2026-02-14T09:00:04.642 [DEBUG] [Thread-182747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:00:12.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:00:12.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:00:12.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-14T09:00:12.850 [DEBUG] [Thread-182748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:00:14.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 8, 59, 42), 6.08, 65.98, 0.0, 38.32, 10.51, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:00:14.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 08:59:42
2026-02-14T09:00:15.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:00:15.167 [DEBUG] [Thread-182749] [transport.py] [_log()] starting thread (client mode): 0xa2ddcdf0
2026-02-14T09:00:15.167 [DEBUG] [Thread-182749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:00:15.188 [DEBUG] [Thread-182749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:00:15.188 [INFO] [Thread-182749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:00:15.193 [DEBUG] [Thread-182749] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:00:15.193 [DEBUG] [Thread-182749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:00:15.193 [DEBUG] [Thread-182749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:00:15.193 [DEBUG] [Thread-182749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:00:15.193 [DEBUG] [Thread-182749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:00:15.193 [DEBUG] [Thread-182749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:00:15.193 [DEBUG] [Thread-182749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:00:15.193 [DEBUG] [Thread-182749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:00:15.193 [DEBUG] [Thread-182749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:00:15.193 [DEBUG] [Thread-182749] [transport.py] [_log()] client lang: <none>
2026-02-14T09:00:15.193 [DEBUG] [Thread-182749] [transport.py] [_log()] server lang: <none>
2026-02-14T09:00:15.193 [DEBUG] [Thread-182749] [transport.py] [_log()] kex follows: False
2026-02-14T09:00:15.194 [DEBUG] [Thread-182749] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:00:15.194 [DEBUG] [Thread-182749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:00:15.194 [DEBUG] [Thread-182749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:00:15.194 [DEBUG] [Thread-182749] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:00:15.194 [DEBUG] [Thread-182749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:00:15.194 [DEBUG] [Thread-182749] [transport.py] [_log()] Compression: none
2026-02-14T09:00:15.194 [DEBUG] [Thread-182749] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:00:15.212 [DEBUG] [Thread-182749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:00:15.213 [DEBUG] [Thread-182749] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:00:15.213 [DEBUG] [Thread-182749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:00:15.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:00:15.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:00:15.215 [DEBUG] [Thread-182749] [transport.py] [_log()] userauth is OK
2026-02-14T09:00:15.216 [DEBUG] [Thread-182749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:00:15.216 [DEBUG] [Thread-182749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:00:15.216 [DEBUG] [Thread-182749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:00:15.216 [DEBUG] [Thread-182749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:00:15.232 [INFO] [Thread-182749] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:00:15.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:00:16.422 [DEBUG] [Thread-182749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:00:16.422 [DEBUG] [Thread-182749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:00:16.423 [DEBUG] [Thread-182749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:00:16.464 [DEBUG] [Thread-182749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:00:16.464 [DEBUG] [Thread-182749] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:00:16.466 [DEBUG] [Thread-182749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:00:16.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:00:16.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:00:16.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:00:16.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:00:16.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:00:16.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:00:16.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:00:16.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:00:16.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:00:16.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.291087 -999.00   +9.50  29.46     74   +5.10 1 1 1 1 1   888    0 5.77 51.72 ----- 25.7 29.5 189.0 34.3 14.1 -24.2 12.9 -23.6 12.4 -25.4 12.9 -25.4
2026-02-14T09:00:16.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:00:16.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:00:16.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.291087
2026-02-14T09:00:16.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:00:16.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:00:16.487 [DEBUG] [Thread-182749] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:00:16.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:00:16.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:00:16.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:00:16.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T08:59:42', tmtdew=6.08, humidity=65.98, cloud=0.0, wind=38.32, temperature=10.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T06:59:09.917', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:00:16.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-14T09:00:16.578 [DEBUG] [Thread-182752] [transport.py] [_log()] starting thread (client mode): 0xa2d3ead0
2026-02-14T09:00:16.578 [DEBUG] [Thread-182752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:00:16.592 [DEBUG] [Thread-182752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:00:16.593 [INFO] [Thread-182752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:00:16.600 [DEBUG] [Thread-182752] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:00:16.601 [DEBUG] [Thread-182752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:00:16.601 [DEBUG] [Thread-182752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:00:16.601 [DEBUG] [Thread-182752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:00:16.601 [DEBUG] [Thread-182752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:00:16.601 [DEBUG] [Thread-182752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:00:16.601 [DEBUG] [Thread-182752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:00:16.601 [DEBUG] [Thread-182752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:00:16.602 [DEBUG] [Thread-182752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:00:16.602 [DEBUG] [Thread-182752] [transport.py] [_log()] client lang: <none>
2026-02-14T09:00:16.602 [DEBUG] [Thread-182752] [transport.py] [_log()] server lang: <none>
2026-02-14T09:00:16.602 [DEBUG] [Thread-182752] [transport.py] [_log()] kex follows: False
2026-02-14T09:00:16.602 [DEBUG] [Thread-182752] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:00:16.602 [DEBUG] [Thread-182752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:00:16.602 [DEBUG] [Thread-182752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:00:16.603 [DEBUG] [Thread-182752] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:00:16.603 [DEBUG] [Thread-182752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:00:16.603 [DEBUG] [Thread-182752] [transport.py] [_log()] Compression: none
2026-02-14T09:00:16.603 [DEBUG] [Thread-182752] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:00:16.659 [DEBUG] [Thread-182752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:00:16.660 [DEBUG] [Thread-182752] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:00:16.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:00:16.661 [DEBUG] [Thread-182752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:00:16.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:00:16.715 [DEBUG] [Thread-182752] [transport.py] [_log()] userauth is OK
2026-02-14T09:00:16.715 [DEBUG] [Thread-182752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:00:16.715 [DEBUG] [Thread-182752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:00:16.715 [DEBUG] [Thread-182752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:00:16.715 [DEBUG] [Thread-182752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:00:16.734 [INFO] [Thread-182752] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:00:16.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-14T09:00:16.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:00:17.531 [DEBUG] [Thread-182752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:00:17.532 [DEBUG] [Thread-182752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:00:17.579 [DEBUG] [Thread-182752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:00:17.580 [DEBUG] [Thread-182752] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:00:17.589 [DEBUG] [Thread-182752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:00:17.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:00:17.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-14T09:00:17.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-14T09:00:17.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:00:17.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:00:17.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:00:17.630 [DEBUG] [Thread-182752] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:00:19.677 [DEBUG] [Thread-182754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:00:34.728 [DEBUG] [Thread-182755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:00:46.790 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:00:46.791 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:00:47.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:00:47.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:00:47.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-14T09:00:49.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 0, 17), 5.2, 69.91, 0.0, 37.97, 9.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:00:49.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:00:17
2026-02-14T09:00:49.766 [DEBUG] [Thread-182756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:00:49.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:00:50.119 [DEBUG] [Thread-182757] [transport.py] [_log()] starting thread (client mode): 0xa2d3ef80
2026-02-14T09:00:50.119 [DEBUG] [Thread-182757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:00:50.133 [DEBUG] [Thread-182757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:00:50.133 [INFO] [Thread-182757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:00:50.137 [DEBUG] [Thread-182757] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:00:50.137 [DEBUG] [Thread-182757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:00:50.137 [DEBUG] [Thread-182757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:00:50.137 [DEBUG] [Thread-182757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:00:50.137 [DEBUG] [Thread-182757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:00:50.137 [DEBUG] [Thread-182757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:00:50.137 [DEBUG] [Thread-182757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:00:50.137 [DEBUG] [Thread-182757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:00:50.137 [DEBUG] [Thread-182757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:00:50.137 [DEBUG] [Thread-182757] [transport.py] [_log()] client lang: <none>
2026-02-14T09:00:50.137 [DEBUG] [Thread-182757] [transport.py] [_log()] server lang: <none>
2026-02-14T09:00:50.137 [DEBUG] [Thread-182757] [transport.py] [_log()] kex follows: False
2026-02-14T09:00:50.137 [DEBUG] [Thread-182757] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:00:50.137 [DEBUG] [Thread-182757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:00:50.137 [DEBUG] [Thread-182757] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:00:50.137 [DEBUG] [Thread-182757] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:00:50.137 [DEBUG] [Thread-182757] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:00:50.137 [DEBUG] [Thread-182757] [transport.py] [_log()] Compression: none
2026-02-14T09:00:50.137 [DEBUG] [Thread-182757] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:00:50.151 [DEBUG] [Thread-182757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:00:50.151 [DEBUG] [Thread-182757] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:00:50.151 [DEBUG] [Thread-182757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:00:50.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:00:50.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:00:50.152 [DEBUG] [Thread-182757] [transport.py] [_log()] userauth is OK
2026-02-14T09:00:50.152 [DEBUG] [Thread-182757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:00:50.152 [DEBUG] [Thread-182757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:00:50.152 [DEBUG] [Thread-182757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:00:50.152 [DEBUG] [Thread-182757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:00:50.161 [INFO] [Thread-182757] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:00:50.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:00:50.757 [DEBUG] [Thread-182757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:00:50.757 [DEBUG] [Thread-182757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:00:50.758 [DEBUG] [Thread-182757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:00:50.798 [DEBUG] [Thread-182757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:00:50.799 [DEBUG] [Thread-182757] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:00:50.802 [DEBUG] [Thread-182757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:00:50.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:00:50.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:00:50.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:00:50.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:00:50.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:00:50.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:00:50.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:00:50.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:00:50.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:00:50.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.292129 -999.00   +9.10  25.73     74   +4.80 1 1 1 1 1   888    0 5.63 43.80 ----- 27.8 25.7 179.4 42.1 13.8 -18.7 12.9 -23.5 12.1 -24.7 12.9 -21.1
2026-02-14T09:00:50.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:00:50.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:00:50.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.292129
2026-02-14T09:00:50.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:00:50.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:00:50.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:00:50.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:00:50.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:00:50.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:00:17', tmtdew=5.2, humidity=69.91, cloud=0.0, wind=37.97, temperature=9.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:00:39.946', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:00:50.828 [DEBUG] [Thread-182757] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:00:50.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-14T09:00:50.929 [DEBUG] [Thread-182760] [transport.py] [_log()] starting thread (client mode): 0xa2d3ed70
2026-02-14T09:00:50.929 [DEBUG] [Thread-182760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:00:50.943 [DEBUG] [Thread-182760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:00:50.943 [INFO] [Thread-182760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:00:50.951 [DEBUG] [Thread-182760] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:00:50.951 [DEBUG] [Thread-182760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:00:50.951 [DEBUG] [Thread-182760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:00:50.951 [DEBUG] [Thread-182760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:00:50.951 [DEBUG] [Thread-182760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:00:50.951 [DEBUG] [Thread-182760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:00:50.951 [DEBUG] [Thread-182760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:00:50.951 [DEBUG] [Thread-182760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:00:50.952 [DEBUG] [Thread-182760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:00:50.952 [DEBUG] [Thread-182760] [transport.py] [_log()] client lang: <none>
2026-02-14T09:00:50.952 [DEBUG] [Thread-182760] [transport.py] [_log()] server lang: <none>
2026-02-14T09:00:50.952 [DEBUG] [Thread-182760] [transport.py] [_log()] kex follows: False
2026-02-14T09:00:50.952 [DEBUG] [Thread-182760] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:00:50.952 [DEBUG] [Thread-182760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:00:50.952 [DEBUG] [Thread-182760] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:00:50.952 [DEBUG] [Thread-182760] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:00:50.952 [DEBUG] [Thread-182760] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:00:50.952 [DEBUG] [Thread-182760] [transport.py] [_log()] Compression: none
2026-02-14T09:00:50.952 [DEBUG] [Thread-182760] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:00:51.008 [DEBUG] [Thread-182760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:00:51.008 [DEBUG] [Thread-182760] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:00:51.008 [DEBUG] [Thread-182760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:00:51.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:00:51.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:00:51.066 [DEBUG] [Thread-182760] [transport.py] [_log()] userauth is OK
2026-02-14T09:00:51.066 [DEBUG] [Thread-182760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:00:51.066 [DEBUG] [Thread-182760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:00:51.066 [DEBUG] [Thread-182760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:00:51.067 [DEBUG] [Thread-182760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:00:51.091 [INFO] [Thread-182760] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:00:51.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-14T09:00:51.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:00:51.930 [DEBUG] [Thread-182760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:00:51.931 [DEBUG] [Thread-182760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:00:51.979 [DEBUG] [Thread-182760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:00:51.979 [DEBUG] [Thread-182760] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:00:51.988 [DEBUG] [Thread-182760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:00:51.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:00:51.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-14T09:00:52.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-14T09:00:52.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:00:52.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:00:52.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:00:52.021 [DEBUG] [Thread-182760] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:01:04.803 [DEBUG] [Thread-182762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:01:12.908 [DEBUG] [Thread-182763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:01:19.856 [DEBUG] [Thread-182764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:01:22.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:01:22.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:01:22.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:01:23.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 0, 52), 5.13, 70.22, 0.0, 30.51, 9.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:01:23.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:00:52
2026-02-14T09:01:24.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:01:24.389 [DEBUG] [Thread-182765] [transport.py] [_log()] starting thread (client mode): 0xa2d3cf10
2026-02-14T09:01:24.389 [DEBUG] [Thread-182765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:01:24.410 [DEBUG] [Thread-182765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:01:24.411 [INFO] [Thread-182765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:01:24.413 [DEBUG] [Thread-182765] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:01:24.413 [DEBUG] [Thread-182765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:01:24.413 [DEBUG] [Thread-182765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:01:24.413 [DEBUG] [Thread-182765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:01:24.413 [DEBUG] [Thread-182765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:01:24.413 [DEBUG] [Thread-182765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:01:24.413 [DEBUG] [Thread-182765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:01:24.413 [DEBUG] [Thread-182765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:01:24.413 [DEBUG] [Thread-182765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:01:24.413 [DEBUG] [Thread-182765] [transport.py] [_log()] client lang: <none>
2026-02-14T09:01:24.413 [DEBUG] [Thread-182765] [transport.py] [_log()] server lang: <none>
2026-02-14T09:01:24.413 [DEBUG] [Thread-182765] [transport.py] [_log()] kex follows: False
2026-02-14T09:01:24.413 [DEBUG] [Thread-182765] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:01:24.413 [DEBUG] [Thread-182765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:01:24.413 [DEBUG] [Thread-182765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:01:24.413 [DEBUG] [Thread-182765] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:01:24.413 [DEBUG] [Thread-182765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:01:24.413 [DEBUG] [Thread-182765] [transport.py] [_log()] Compression: none
2026-02-14T09:01:24.413 [DEBUG] [Thread-182765] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:01:24.429 [DEBUG] [Thread-182765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:01:24.430 [DEBUG] [Thread-182765] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:01:24.430 [DEBUG] [Thread-182765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:01:24.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:01:24.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:01:24.432 [DEBUG] [Thread-182765] [transport.py] [_log()] userauth is OK
2026-02-14T09:01:24.432 [DEBUG] [Thread-182765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:01:24.433 [DEBUG] [Thread-182765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:01:24.433 [DEBUG] [Thread-182765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:01:24.433 [DEBUG] [Thread-182765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:01:24.452 [INFO] [Thread-182765] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:01:24.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:01:25.080 [DEBUG] [Thread-182765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:01:25.080 [DEBUG] [Thread-182765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:01:25.080 [DEBUG] [Thread-182765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:01:25.122 [DEBUG] [Thread-182765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:01:25.122 [DEBUG] [Thread-182765] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:01:25.126 [DEBUG] [Thread-182765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:01:25.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:01:25.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:01:25.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:01:25.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:01:25.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:01:25.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:01:25.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:01:25.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:01:25.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:01:25.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.292476 -999.00   +9.40  33.27     73   +5.00 1 1 2 1 1   888    0 5.56 43.71 ----- 34.8 33.3 179.6 39.2 13.8 -19.7 12.9 -23.5 12.2 -24.0 12.9 -21.7
2026-02-14T09:01:25.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:01:25.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:01:25.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.292476
2026-02-14T09:01:25.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:01:25.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:01:25.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:01:25.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:01:25.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:01:25.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:00:52', tmtdew=5.13, humidity=70.22, cloud=0.0, wind=30.51, temperature=9.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:01:09.926', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:01:25.151 [DEBUG] [Thread-182765] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:01:25.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-14T09:01:25.248 [DEBUG] [Thread-182768] [transport.py] [_log()] starting thread (client mode): 0xa57c18d0
2026-02-14T09:01:25.248 [DEBUG] [Thread-182768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:01:25.262 [DEBUG] [Thread-182768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:01:25.263 [INFO] [Thread-182768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:01:25.270 [DEBUG] [Thread-182768] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:01:25.271 [DEBUG] [Thread-182768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:01:25.271 [DEBUG] [Thread-182768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:01:25.271 [DEBUG] [Thread-182768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:01:25.271 [DEBUG] [Thread-182768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:01:25.271 [DEBUG] [Thread-182768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:01:25.271 [DEBUG] [Thread-182768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:01:25.271 [DEBUG] [Thread-182768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:01:25.271 [DEBUG] [Thread-182768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:01:25.271 [DEBUG] [Thread-182768] [transport.py] [_log()] client lang: <none>
2026-02-14T09:01:25.271 [DEBUG] [Thread-182768] [transport.py] [_log()] server lang: <none>
2026-02-14T09:01:25.271 [DEBUG] [Thread-182768] [transport.py] [_log()] kex follows: False
2026-02-14T09:01:25.271 [DEBUG] [Thread-182768] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:01:25.271 [DEBUG] [Thread-182768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:01:25.271 [DEBUG] [Thread-182768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:01:25.271 [DEBUG] [Thread-182768] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:01:25.271 [DEBUG] [Thread-182768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:01:25.271 [DEBUG] [Thread-182768] [transport.py] [_log()] Compression: none
2026-02-14T09:01:25.271 [DEBUG] [Thread-182768] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:01:25.329 [DEBUG] [Thread-182768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:01:25.329 [DEBUG] [Thread-182768] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:01:25.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:01:25.331 [DEBUG] [Thread-182768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:01:25.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:01:25.390 [DEBUG] [Thread-182768] [transport.py] [_log()] userauth is OK
2026-02-14T09:01:25.390 [DEBUG] [Thread-182768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:01:25.390 [DEBUG] [Thread-182768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:01:25.390 [DEBUG] [Thread-182768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:01:25.391 [DEBUG] [Thread-182768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:01:25.410 [INFO] [Thread-182768] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:01:25.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-14T09:01:25.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:01:26.251 [DEBUG] [Thread-182768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:01:26.251 [DEBUG] [Thread-182768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:01:26.299 [DEBUG] [Thread-182768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:01:26.299 [DEBUG] [Thread-182768] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:01:26.309 [DEBUG] [Thread-182768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:01:26.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:01:26.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-14T09:01:26.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-14T09:01:26.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:01:26.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:01:26.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:01:26.345 [DEBUG] [Thread-182768] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:01:34.892 [DEBUG] [Thread-182770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:01:46.929 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:01:46.931 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:01:49.955 [DEBUG] [Thread-182771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:01:56.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:01:56.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:01:56.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-14T09:01:58.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 1, 28), 5.08, 70.45, 0.0, 30.03, 9.45, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:01:58.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:01:28
2026-02-14T09:01:58.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:01:58.793 [DEBUG] [Thread-182772] [transport.py] [_log()] starting thread (client mode): 0xa2d7a770
2026-02-14T09:01:58.793 [DEBUG] [Thread-182772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:01:58.813 [DEBUG] [Thread-182772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:01:58.813 [INFO] [Thread-182772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:01:58.816 [DEBUG] [Thread-182772] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:01:58.816 [DEBUG] [Thread-182772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:01:58.816 [DEBUG] [Thread-182772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:01:58.816 [DEBUG] [Thread-182772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:01:58.816 [DEBUG] [Thread-182772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:01:58.816 [DEBUG] [Thread-182772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:01:58.817 [DEBUG] [Thread-182772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:01:58.817 [DEBUG] [Thread-182772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:01:58.817 [DEBUG] [Thread-182772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:01:58.817 [DEBUG] [Thread-182772] [transport.py] [_log()] client lang: <none>
2026-02-14T09:01:58.817 [DEBUG] [Thread-182772] [transport.py] [_log()] server lang: <none>
2026-02-14T09:01:58.817 [DEBUG] [Thread-182772] [transport.py] [_log()] kex follows: False
2026-02-14T09:01:58.817 [DEBUG] [Thread-182772] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:01:58.817 [DEBUG] [Thread-182772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:01:58.817 [DEBUG] [Thread-182772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:01:58.817 [DEBUG] [Thread-182772] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:01:58.817 [DEBUG] [Thread-182772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:01:58.817 [DEBUG] [Thread-182772] [transport.py] [_log()] Compression: none
2026-02-14T09:01:58.817 [DEBUG] [Thread-182772] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:01:58.834 [DEBUG] [Thread-182772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:01:58.835 [DEBUG] [Thread-182772] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:01:58.835 [DEBUG] [Thread-182772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:01:58.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:01:58.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:01:58.837 [DEBUG] [Thread-182772] [transport.py] [_log()] userauth is OK
2026-02-14T09:01:58.838 [DEBUG] [Thread-182772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:01:58.838 [DEBUG] [Thread-182772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:01:58.838 [DEBUG] [Thread-182772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:01:58.838 [DEBUG] [Thread-182772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:01:58.857 [INFO] [Thread-182772] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:01:58.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:01:59.438 [DEBUG] [Thread-182772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:01:59.438 [DEBUG] [Thread-182772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:01:59.438 [DEBUG] [Thread-182772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:01:59.479 [DEBUG] [Thread-182772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:01:59.479 [DEBUG] [Thread-182772] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:01:59.485 [DEBUG] [Thread-182772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:01:59.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:01:59.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:01:59.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:01:59.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:01:59.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:01:59.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:01:59.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:01:59.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:01:59.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:01:59.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.292823 -999.00   +9.50  28.74     73   +5.00 1 1 1 1 1   888    0 5.54 40.46 ----- 25.1 28.7 180.4 41.6 13.8 -22.7 13.1 -24.2 12.3 -24.5 12.8 -23.3
2026-02-14T09:01:59.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:01:59.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:01:59.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.292823
2026-02-14T09:01:59.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:01:59.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:01:59.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:01:59.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:01:59.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:01:59.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:01:28', tmtdew=5.08, humidity=70.45, cloud=0.0, wind=30.03, temperature=9.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:01:39.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:01:59.511 [DEBUG] [Thread-182772] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:01:59.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-14T09:01:59.607 [DEBUG] [Thread-182775] [transport.py] [_log()] starting thread (client mode): 0xa57c3370
2026-02-14T09:01:59.607 [DEBUG] [Thread-182775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:01:59.621 [DEBUG] [Thread-182775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:01:59.621 [INFO] [Thread-182775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:01:59.629 [DEBUG] [Thread-182775] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:01:59.629 [DEBUG] [Thread-182775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:01:59.629 [DEBUG] [Thread-182775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:01:59.629 [DEBUG] [Thread-182775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:01:59.629 [DEBUG] [Thread-182775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:01:59.629 [DEBUG] [Thread-182775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:01:59.629 [DEBUG] [Thread-182775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:01:59.629 [DEBUG] [Thread-182775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:01:59.629 [DEBUG] [Thread-182775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:01:59.629 [DEBUG] [Thread-182775] [transport.py] [_log()] client lang: <none>
2026-02-14T09:01:59.629 [DEBUG] [Thread-182775] [transport.py] [_log()] server lang: <none>
2026-02-14T09:01:59.629 [DEBUG] [Thread-182775] [transport.py] [_log()] kex follows: False
2026-02-14T09:01:59.629 [DEBUG] [Thread-182775] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:01:59.629 [DEBUG] [Thread-182775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:01:59.629 [DEBUG] [Thread-182775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:01:59.629 [DEBUG] [Thread-182775] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:01:59.630 [DEBUG] [Thread-182775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:01:59.630 [DEBUG] [Thread-182775] [transport.py] [_log()] Compression: none
2026-02-14T09:01:59.630 [DEBUG] [Thread-182775] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:01:59.687 [DEBUG] [Thread-182775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:01:59.688 [DEBUG] [Thread-182775] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:01:59.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:01:59.689 [DEBUG] [Thread-182775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:01:59.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:01:59.750 [DEBUG] [Thread-182775] [transport.py] [_log()] userauth is OK
2026-02-14T09:01:59.750 [DEBUG] [Thread-182775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:01:59.750 [DEBUG] [Thread-182775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:01:59.751 [DEBUG] [Thread-182775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:01:59.751 [DEBUG] [Thread-182775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:01:59.771 [INFO] [Thread-182775] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:01:59.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-14T09:01:59.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:02:00.604 [DEBUG] [Thread-182775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:02:00.604 [DEBUG] [Thread-182775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:02:00.652 [DEBUG] [Thread-182775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:02:00.652 [DEBUG] [Thread-182775] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:02:00.661 [DEBUG] [Thread-182775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:02:00.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:02:00.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:02:00.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:02:00.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:02:00.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:02:00.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:02:00.699 [DEBUG] [Thread-182775] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:02:04.991 [DEBUG] [Thread-182777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:02:12.945 [DEBUG] [Thread-182778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:02:20.046 [DEBUG] [Thread-182779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:02:30.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:02:30.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:02:30.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-14T09:02:32.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 2, 3), 5.13, 70.24, 0.0, 32.16, 9.55, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:02:32.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:02:03
2026-02-14T09:02:33.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:02:33.279 [DEBUG] [Thread-182780] [transport.py] [_log()] starting thread (client mode): 0xa2d3e1a0
2026-02-14T09:02:33.279 [DEBUG] [Thread-182780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:02:33.291 [DEBUG] [Thread-182780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:02:33.291 [INFO] [Thread-182780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:02:33.294 [DEBUG] [Thread-182780] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:02:33.294 [DEBUG] [Thread-182780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:02:33.294 [DEBUG] [Thread-182780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:02:33.294 [DEBUG] [Thread-182780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:02:33.294 [DEBUG] [Thread-182780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:02:33.294 [DEBUG] [Thread-182780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:02:33.294 [DEBUG] [Thread-182780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:02:33.294 [DEBUG] [Thread-182780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:02:33.294 [DEBUG] [Thread-182780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:02:33.294 [DEBUG] [Thread-182780] [transport.py] [_log()] client lang: <none>
2026-02-14T09:02:33.294 [DEBUG] [Thread-182780] [transport.py] [_log()] server lang: <none>
2026-02-14T09:02:33.294 [DEBUG] [Thread-182780] [transport.py] [_log()] kex follows: False
2026-02-14T09:02:33.294 [DEBUG] [Thread-182780] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:02:33.294 [DEBUG] [Thread-182780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:02:33.295 [DEBUG] [Thread-182780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:02:33.295 [DEBUG] [Thread-182780] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:02:33.295 [DEBUG] [Thread-182780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:02:33.295 [DEBUG] [Thread-182780] [transport.py] [_log()] Compression: none
2026-02-14T09:02:33.295 [DEBUG] [Thread-182780] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:02:33.302 [DEBUG] [Thread-182780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:02:33.302 [DEBUG] [Thread-182780] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:02:33.302 [DEBUG] [Thread-182780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:02:33.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:02:33.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:02:33.303 [DEBUG] [Thread-182780] [transport.py] [_log()] userauth is OK
2026-02-14T09:02:33.303 [DEBUG] [Thread-182780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:02:33.303 [DEBUG] [Thread-182780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:02:33.304 [DEBUG] [Thread-182780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:02:33.304 [DEBUG] [Thread-182780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:02:33.317 [INFO] [Thread-182780] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:02:33.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:02:33.881 [DEBUG] [Thread-182780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:02:33.882 [DEBUG] [Thread-182780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:02:33.882 [DEBUG] [Thread-182780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:02:33.922 [DEBUG] [Thread-182780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:02:33.922 [DEBUG] [Thread-182780] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:02:33.926 [DEBUG] [Thread-182780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:02:33.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:02:33.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:02:33.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:02:33.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:02:33.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:02:33.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:02:33.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:02:33.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:02:33.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:02:33.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.293171 -999.00   +9.50  30.29     73   +5.00 1 2 2 1 1   888    0 5.39 38.26 ----- 32.2 30.3 187.8 44.7 14.1 -19.8 12.9 -21.3 12.3 -19.7 12.9 -21.2
2026-02-14T09:02:33.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:02:33.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:02:33.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.293171
2026-02-14T09:02:33.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:02:33.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:02:33.949 [DEBUG] [Thread-182780] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:02:33.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:02:33.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:02:33.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:02:33.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:02:03', tmtdew=5.13, humidity=70.24, cloud=0.0, wind=32.16, temperature=9.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:02:09.974', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:02:34.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-14T09:02:34.046 [DEBUG] [Thread-182783] [transport.py] [_log()] starting thread (client mode): 0xa2d7a020
2026-02-14T09:02:34.046 [DEBUG] [Thread-182783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:02:34.061 [DEBUG] [Thread-182783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:02:34.061 [INFO] [Thread-182783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:02:34.069 [DEBUG] [Thread-182783] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:02:34.069 [DEBUG] [Thread-182783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:02:34.069 [DEBUG] [Thread-182783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:02:34.069 [DEBUG] [Thread-182783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:02:34.069 [DEBUG] [Thread-182783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:02:34.069 [DEBUG] [Thread-182783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:02:34.069 [DEBUG] [Thread-182783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:02:34.069 [DEBUG] [Thread-182783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:02:34.069 [DEBUG] [Thread-182783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:02:34.069 [DEBUG] [Thread-182783] [transport.py] [_log()] client lang: <none>
2026-02-14T09:02:34.069 [DEBUG] [Thread-182783] [transport.py] [_log()] server lang: <none>
2026-02-14T09:02:34.069 [DEBUG] [Thread-182783] [transport.py] [_log()] kex follows: False
2026-02-14T09:02:34.069 [DEBUG] [Thread-182783] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:02:34.070 [DEBUG] [Thread-182783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:02:34.070 [DEBUG] [Thread-182783] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:02:34.070 [DEBUG] [Thread-182783] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:02:34.070 [DEBUG] [Thread-182783] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:02:34.070 [DEBUG] [Thread-182783] [transport.py] [_log()] Compression: none
2026-02-14T09:02:34.070 [DEBUG] [Thread-182783] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:02:34.129 [DEBUG] [Thread-182783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:02:34.130 [DEBUG] [Thread-182783] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:02:34.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:02:34.131 [DEBUG] [Thread-182783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:02:34.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:02:34.186 [DEBUG] [Thread-182783] [transport.py] [_log()] userauth is OK
2026-02-14T09:02:34.186 [DEBUG] [Thread-182783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:02:34.186 [DEBUG] [Thread-182783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:02:34.187 [DEBUG] [Thread-182783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:02:34.187 [DEBUG] [Thread-182783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:02:34.209 [INFO] [Thread-182783] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:02:34.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T09:02:34.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:02:35.053 [DEBUG] [Thread-182783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:02:35.054 [DEBUG] [Thread-182783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:02:35.081 [DEBUG] [Thread-182785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:02:35.104 [DEBUG] [Thread-182783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:02:35.104 [DEBUG] [Thread-182783] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:02:35.120 [DEBUG] [Thread-182783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:02:35.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:02:35.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:02:35.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-14T09:02:35.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:02:35.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:02:35.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:02:35.172 [DEBUG] [Thread-182783] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:02:47.072 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:02:47.073 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:02:50.139 [DEBUG] [Thread-182786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:03:05.172 [DEBUG] [Thread-182787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:03:05.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:03:05.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:03:05.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-14T09:03:07.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 2, 39), 6.06, 66.15, 0.0, 44.53, 10.91, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:03:07.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:02:39
2026-02-14T09:03:07.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:03:07.944 [DEBUG] [Thread-182788] [transport.py] [_log()] starting thread (client mode): 0xa2d7a950
2026-02-14T09:03:07.945 [DEBUG] [Thread-182788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:03:07.964 [DEBUG] [Thread-182788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:03:07.964 [INFO] [Thread-182788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:03:07.965 [DEBUG] [Thread-182788] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:03:07.966 [DEBUG] [Thread-182788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:03:07.966 [DEBUG] [Thread-182788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:03:07.966 [DEBUG] [Thread-182788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:03:07.966 [DEBUG] [Thread-182788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:03:07.966 [DEBUG] [Thread-182788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:03:07.966 [DEBUG] [Thread-182788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:03:07.966 [DEBUG] [Thread-182788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:03:07.966 [DEBUG] [Thread-182788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:03:07.966 [DEBUG] [Thread-182788] [transport.py] [_log()] client lang: <none>
2026-02-14T09:03:07.966 [DEBUG] [Thread-182788] [transport.py] [_log()] server lang: <none>
2026-02-14T09:03:07.966 [DEBUG] [Thread-182788] [transport.py] [_log()] kex follows: False
2026-02-14T09:03:07.966 [DEBUG] [Thread-182788] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:03:07.966 [DEBUG] [Thread-182788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:03:07.966 [DEBUG] [Thread-182788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:03:07.966 [DEBUG] [Thread-182788] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:03:07.966 [DEBUG] [Thread-182788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:03:07.966 [DEBUG] [Thread-182788] [transport.py] [_log()] Compression: none
2026-02-14T09:03:07.966 [DEBUG] [Thread-182788] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:03:07.979 [DEBUG] [Thread-182788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:03:07.980 [DEBUG] [Thread-182788] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:03:07.980 [DEBUG] [Thread-182788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:03:07.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:03:07.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:03:07.982 [DEBUG] [Thread-182788] [transport.py] [_log()] userauth is OK
2026-02-14T09:03:07.982 [DEBUG] [Thread-182788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:03:07.982 [DEBUG] [Thread-182788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:03:07.982 [DEBUG] [Thread-182788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:03:07.982 [DEBUG] [Thread-182788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:03:08.000 [INFO] [Thread-182788] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:03:08.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:03:08.596 [DEBUG] [Thread-182788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:03:08.596 [DEBUG] [Thread-182788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:03:08.597 [DEBUG] [Thread-182788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:03:08.637 [DEBUG] [Thread-182788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:03:08.637 [DEBUG] [Thread-182788] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:03:08.640 [DEBUG] [Thread-182788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:03:08.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:03:08.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:03:08.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:03:08.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:03:08.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:03:08.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:03:08.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:03:08.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:03:08.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:03:08.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.293518 -999.00  +10.10  20.62     73   +5.50 1 2 1 1 1   888    0 5.53 38.33 ----- 27.9 20.6 178.2 38.5 14.4 -20.3 13.2 -19.1 12.6 -21.0 13.2 -20.9
2026-02-14T09:03:08.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:03:08.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:03:08.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.293518
2026-02-14T09:03:08.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:03:08.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:03:08.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:03:08.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:03:08.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:03:08.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:02:39', tmtdew=6.06, humidity=66.15, cloud=0.0, wind=44.53, temperature=10.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:02:39.955', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:03:08.672 [DEBUG] [Thread-182788] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:03:08.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-14T09:03:08.774 [DEBUG] [Thread-182791] [transport.py] [_log()] starting thread (client mode): 0xa2d3f610
2026-02-14T09:03:08.774 [DEBUG] [Thread-182791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:03:08.789 [DEBUG] [Thread-182791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:03:08.789 [INFO] [Thread-182791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:03:08.797 [DEBUG] [Thread-182791] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:03:08.797 [DEBUG] [Thread-182791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:03:08.797 [DEBUG] [Thread-182791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:03:08.798 [DEBUG] [Thread-182791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:03:08.798 [DEBUG] [Thread-182791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:03:08.798 [DEBUG] [Thread-182791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:03:08.798 [DEBUG] [Thread-182791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:03:08.798 [DEBUG] [Thread-182791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:03:08.798 [DEBUG] [Thread-182791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:03:08.798 [DEBUG] [Thread-182791] [transport.py] [_log()] client lang: <none>
2026-02-14T09:03:08.798 [DEBUG] [Thread-182791] [transport.py] [_log()] server lang: <none>
2026-02-14T09:03:08.798 [DEBUG] [Thread-182791] [transport.py] [_log()] kex follows: False
2026-02-14T09:03:08.798 [DEBUG] [Thread-182791] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:03:08.798 [DEBUG] [Thread-182791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:03:08.798 [DEBUG] [Thread-182791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:03:08.798 [DEBUG] [Thread-182791] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:03:08.798 [DEBUG] [Thread-182791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:03:08.798 [DEBUG] [Thread-182791] [transport.py] [_log()] Compression: none
2026-02-14T09:03:08.798 [DEBUG] [Thread-182791] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:03:08.866 [DEBUG] [Thread-182791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:03:08.867 [DEBUG] [Thread-182791] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:03:08.867 [DEBUG] [Thread-182791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:03:08.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:03:08.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:03:08.925 [DEBUG] [Thread-182791] [transport.py] [_log()] userauth is OK
2026-02-14T09:03:08.925 [DEBUG] [Thread-182791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:03:08.926 [DEBUG] [Thread-182791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:03:08.926 [DEBUG] [Thread-182791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:03:08.926 [DEBUG] [Thread-182791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:03:08.944 [INFO] [Thread-182791] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:03:08.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-14T09:03:08.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:03:09.762 [DEBUG] [Thread-182791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:03:09.762 [DEBUG] [Thread-182791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:03:09.810 [DEBUG] [Thread-182791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:03:09.811 [DEBUG] [Thread-182791] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:03:09.820 [DEBUG] [Thread-182791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:03:09.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:03:09.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-14T09:03:09.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-14T09:03:09.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:03:09.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:03:09.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:03:09.857 [DEBUG] [Thread-182791] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:03:13.011 [DEBUG] [Thread-182793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:03:20.208 [DEBUG] [Thread-182794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:03:35.262 [DEBUG] [Thread-182795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:03:39.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:03:39.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:03:39.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-14T09:03:41.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 3, 14), 5.92, 66.46, 0.0, 39.56, 10.27, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:03:41.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:03:14
2026-02-14T09:03:42.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:03:42.272 [DEBUG] [Thread-182796] [transport.py] [_log()] starting thread (client mode): 0xa2d3c8b0
2026-02-14T09:03:42.272 [DEBUG] [Thread-182796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:03:42.292 [DEBUG] [Thread-182796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:03:42.292 [INFO] [Thread-182796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:03:42.294 [DEBUG] [Thread-182796] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:03:42.294 [DEBUG] [Thread-182796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:03:42.294 [DEBUG] [Thread-182796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:03:42.294 [DEBUG] [Thread-182796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:03:42.294 [DEBUG] [Thread-182796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:03:42.294 [DEBUG] [Thread-182796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:03:42.294 [DEBUG] [Thread-182796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:03:42.294 [DEBUG] [Thread-182796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:03:42.294 [DEBUG] [Thread-182796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:03:42.294 [DEBUG] [Thread-182796] [transport.py] [_log()] client lang: <none>
2026-02-14T09:03:42.294 [DEBUG] [Thread-182796] [transport.py] [_log()] server lang: <none>
2026-02-14T09:03:42.294 [DEBUG] [Thread-182796] [transport.py] [_log()] kex follows: False
2026-02-14T09:03:42.294 [DEBUG] [Thread-182796] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:03:42.294 [DEBUG] [Thread-182796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:03:42.294 [DEBUG] [Thread-182796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:03:42.294 [DEBUG] [Thread-182796] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:03:42.294 [DEBUG] [Thread-182796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:03:42.294 [DEBUG] [Thread-182796] [transport.py] [_log()] Compression: none
2026-02-14T09:03:42.294 [DEBUG] [Thread-182796] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:03:42.306 [DEBUG] [Thread-182796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:03:42.306 [DEBUG] [Thread-182796] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:03:42.307 [DEBUG] [Thread-182796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:03:42.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:03:42.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:03:42.312 [DEBUG] [Thread-182796] [transport.py] [_log()] userauth is OK
2026-02-14T09:03:42.312 [DEBUG] [Thread-182796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:03:42.312 [DEBUG] [Thread-182796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:03:42.312 [DEBUG] [Thread-182796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:03:42.312 [DEBUG] [Thread-182796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:03:42.331 [INFO] [Thread-182796] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:03:42.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:03:42.949 [DEBUG] [Thread-182796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:03:42.950 [DEBUG] [Thread-182796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:03:42.950 [DEBUG] [Thread-182796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:03:42.991 [DEBUG] [Thread-182796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:03:42.991 [DEBUG] [Thread-182796] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:03:42.994 [DEBUG] [Thread-182796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:03:43.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:03:43.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:03:43.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:03:43.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:03:43.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:03:43.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:03:43.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:03:43.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:03:43.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:03:43.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.293865 -999.00  +10.40  26.02     71   +5.50 1 2 1 1 1   888    0 5.55 41.03 ----- 33.8 26.0 149.6 37.2 14.8 -22.5 13.8 -17.5 12.8 -19.8 13.5 -22.4
2026-02-14T09:03:43.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:03:43.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:03:43.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.293865
2026-02-14T09:03:43.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:03:43.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:03:43.018 [DEBUG] [Thread-182796] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:03:43.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:03:43.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:03:43.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:03:43.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:03:14', tmtdew=5.92, humidity=66.46, cloud=0.0, wind=39.56, temperature=10.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:03:09.936', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:03:43.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-14T09:03:43.117 [DEBUG] [Thread-182799] [transport.py] [_log()] starting thread (client mode): 0xa2d3e770
2026-02-14T09:03:43.117 [DEBUG] [Thread-182799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:03:43.133 [DEBUG] [Thread-182799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:03:43.133 [INFO] [Thread-182799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:03:43.140 [DEBUG] [Thread-182799] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:03:43.140 [DEBUG] [Thread-182799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:03:43.141 [DEBUG] [Thread-182799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:03:43.141 [DEBUG] [Thread-182799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:03:43.141 [DEBUG] [Thread-182799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:03:43.141 [DEBUG] [Thread-182799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:03:43.141 [DEBUG] [Thread-182799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:03:43.141 [DEBUG] [Thread-182799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:03:43.141 [DEBUG] [Thread-182799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:03:43.141 [DEBUG] [Thread-182799] [transport.py] [_log()] client lang: <none>
2026-02-14T09:03:43.141 [DEBUG] [Thread-182799] [transport.py] [_log()] server lang: <none>
2026-02-14T09:03:43.141 [DEBUG] [Thread-182799] [transport.py] [_log()] kex follows: False
2026-02-14T09:03:43.141 [DEBUG] [Thread-182799] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:03:43.141 [DEBUG] [Thread-182799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:03:43.141 [DEBUG] [Thread-182799] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:03:43.141 [DEBUG] [Thread-182799] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:03:43.141 [DEBUG] [Thread-182799] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:03:43.141 [DEBUG] [Thread-182799] [transport.py] [_log()] Compression: none
2026-02-14T09:03:43.141 [DEBUG] [Thread-182799] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:03:43.199 [DEBUG] [Thread-182799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:03:43.200 [DEBUG] [Thread-182799] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:03:43.200 [DEBUG] [Thread-182799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:03:43.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:03:43.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:03:43.256 [DEBUG] [Thread-182799] [transport.py] [_log()] userauth is OK
2026-02-14T09:03:43.256 [DEBUG] [Thread-182799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:03:43.256 [DEBUG] [Thread-182799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:03:43.256 [DEBUG] [Thread-182799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:03:43.256 [DEBUG] [Thread-182799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:03:43.275 [INFO] [Thread-182799] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:03:43.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-14T09:03:43.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:03:44.098 [DEBUG] [Thread-182799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:03:44.099 [DEBUG] [Thread-182799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:03:44.146 [DEBUG] [Thread-182799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:03:44.146 [DEBUG] [Thread-182799] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:03:44.155 [DEBUG] [Thread-182799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:03:44.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:03:44.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:03:44.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:03:44.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:03:44.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:03:44.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:03:44.189 [DEBUG] [Thread-182799] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:03:47.212 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:03:47.213 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:03:50.302 [DEBUG] [Thread-182801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:04:05.354 [DEBUG] [Thread-182802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:04:13.041 [DEBUG] [Thread-182803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:04:14.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:04:14.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:04:14.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-14T09:04:16.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 3, 49), 6.38, 64.95, 0.0, 39.33, 10.59, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:04:16.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:03:49
2026-02-14T09:04:16.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:04:16.567 [DEBUG] [Thread-182804] [transport.py] [_log()] starting thread (client mode): 0xa2d3c7f0
2026-02-14T09:04:16.567 [DEBUG] [Thread-182804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:04:16.587 [DEBUG] [Thread-182804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:04:16.587 [INFO] [Thread-182804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:04:16.588 [DEBUG] [Thread-182804] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:04:16.589 [DEBUG] [Thread-182804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:04:16.589 [DEBUG] [Thread-182804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:04:16.589 [DEBUG] [Thread-182804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:04:16.589 [DEBUG] [Thread-182804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:04:16.589 [DEBUG] [Thread-182804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:04:16.589 [DEBUG] [Thread-182804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:04:16.589 [DEBUG] [Thread-182804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:04:16.589 [DEBUG] [Thread-182804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:04:16.589 [DEBUG] [Thread-182804] [transport.py] [_log()] client lang: <none>
2026-02-14T09:04:16.589 [DEBUG] [Thread-182804] [transport.py] [_log()] server lang: <none>
2026-02-14T09:04:16.589 [DEBUG] [Thread-182804] [transport.py] [_log()] kex follows: False
2026-02-14T09:04:16.589 [DEBUG] [Thread-182804] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:04:16.589 [DEBUG] [Thread-182804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:04:16.589 [DEBUG] [Thread-182804] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:04:16.589 [DEBUG] [Thread-182804] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:04:16.589 [DEBUG] [Thread-182804] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:04:16.589 [DEBUG] [Thread-182804] [transport.py] [_log()] Compression: none
2026-02-14T09:04:16.589 [DEBUG] [Thread-182804] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:04:16.600 [DEBUG] [Thread-182804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:04:16.600 [DEBUG] [Thread-182804] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:04:16.601 [DEBUG] [Thread-182804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:04:16.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:04:16.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:04:16.602 [DEBUG] [Thread-182804] [transport.py] [_log()] userauth is OK
2026-02-14T09:04:16.603 [DEBUG] [Thread-182804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:04:16.603 [DEBUG] [Thread-182804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:04:16.603 [DEBUG] [Thread-182804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:04:16.603 [DEBUG] [Thread-182804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:04:16.621 [INFO] [Thread-182804] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:04:16.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:04:17.193 [DEBUG] [Thread-182804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:04:17.193 [DEBUG] [Thread-182804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:04:17.194 [DEBUG] [Thread-182804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:04:17.234 [DEBUG] [Thread-182804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:04:17.235 [DEBUG] [Thread-182804] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:04:17.238 [DEBUG] [Thread-182804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:04:17.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:04:17.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:04:17.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:04:17.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:04:17.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:04:17.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:04:17.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:04:17.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:04:17.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:04:17.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.294559 -999.00   +9.60  35.99     73   +5.10 1 2 2 1 1   888    0 5.41 31.85 ----- 29.5 36.0 165.0 54.0 14.7 -25.1 13.9 -21.0 12.7 -22.6 13.4 -24.7
2026-02-14T09:04:17.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:04:17.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:04:17.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.294559
2026-02-14T09:04:17.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:04:17.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:04:17.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:04:17.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:04:17.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:04:17.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:03:49', tmtdew=6.38, humidity=64.95, cloud=0.0, wind=39.33, temperature=10.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:04:09.898', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:04:17.267 [DEBUG] [Thread-182804] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:04:17.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-14T09:04:17.362 [DEBUG] [Thread-182807] [transport.py] [_log()] starting thread (client mode): 0xa2d3c9d0
2026-02-14T09:04:17.363 [DEBUG] [Thread-182807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:04:17.377 [DEBUG] [Thread-182807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:04:17.377 [INFO] [Thread-182807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:04:17.385 [DEBUG] [Thread-182807] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:04:17.385 [DEBUG] [Thread-182807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:04:17.385 [DEBUG] [Thread-182807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:04:17.385 [DEBUG] [Thread-182807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:04:17.386 [DEBUG] [Thread-182807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:04:17.386 [DEBUG] [Thread-182807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:04:17.386 [DEBUG] [Thread-182807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:04:17.386 [DEBUG] [Thread-182807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:04:17.386 [DEBUG] [Thread-182807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:04:17.386 [DEBUG] [Thread-182807] [transport.py] [_log()] client lang: <none>
2026-02-14T09:04:17.387 [DEBUG] [Thread-182807] [transport.py] [_log()] server lang: <none>
2026-02-14T09:04:17.387 [DEBUG] [Thread-182807] [transport.py] [_log()] kex follows: False
2026-02-14T09:04:17.387 [DEBUG] [Thread-182807] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:04:17.387 [DEBUG] [Thread-182807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:04:17.387 [DEBUG] [Thread-182807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:04:17.387 [DEBUG] [Thread-182807] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:04:17.387 [DEBUG] [Thread-182807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:04:17.387 [DEBUG] [Thread-182807] [transport.py] [_log()] Compression: none
2026-02-14T09:04:17.387 [DEBUG] [Thread-182807] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:04:17.443 [DEBUG] [Thread-182807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:04:17.443 [DEBUG] [Thread-182807] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:04:17.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:04:17.444 [DEBUG] [Thread-182807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:04:17.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:04:17.499 [DEBUG] [Thread-182807] [transport.py] [_log()] userauth is OK
2026-02-14T09:04:17.499 [DEBUG] [Thread-182807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:04:17.499 [DEBUG] [Thread-182807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:04:17.499 [DEBUG] [Thread-182807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:04:17.500 [DEBUG] [Thread-182807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:04:17.518 [INFO] [Thread-182807] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:04:17.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T09:04:17.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:04:18.333 [DEBUG] [Thread-182807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:04:18.334 [DEBUG] [Thread-182807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:04:18.382 [DEBUG] [Thread-182807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:04:18.382 [DEBUG] [Thread-182807] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:04:18.391 [DEBUG] [Thread-182807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:04:18.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:04:18.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-14T09:04:18.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-14T09:04:18.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:04:18.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:04:18.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:04:18.429 [DEBUG] [Thread-182807] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:04:20.394 [DEBUG] [Thread-182809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:04:35.447 [DEBUG] [Thread-182810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:04:47.355 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:04:47.356 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:04:48.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:04:48.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:04:48.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-14T09:04:50.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 4, 25), 6.33, 65.16, 0.0, 40.48, 10.55, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:04:50.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:04:25
2026-02-14T09:04:50.485 [DEBUG] [Thread-182811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:04:50.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:04:50.883 [DEBUG] [Thread-182812] [transport.py] [_log()] starting thread (client mode): 0xa57c3ca0
2026-02-14T09:04:50.883 [DEBUG] [Thread-182812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:04:50.904 [DEBUG] [Thread-182812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:04:50.904 [INFO] [Thread-182812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:04:50.908 [DEBUG] [Thread-182812] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:04:50.908 [DEBUG] [Thread-182812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:04:50.908 [DEBUG] [Thread-182812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:04:50.908 [DEBUG] [Thread-182812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:04:50.908 [DEBUG] [Thread-182812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:04:50.908 [DEBUG] [Thread-182812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:04:50.908 [DEBUG] [Thread-182812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:04:50.908 [DEBUG] [Thread-182812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:04:50.908 [DEBUG] [Thread-182812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:04:50.908 [DEBUG] [Thread-182812] [transport.py] [_log()] client lang: <none>
2026-02-14T09:04:50.908 [DEBUG] [Thread-182812] [transport.py] [_log()] server lang: <none>
2026-02-14T09:04:50.908 [DEBUG] [Thread-182812] [transport.py] [_log()] kex follows: False
2026-02-14T09:04:50.908 [DEBUG] [Thread-182812] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:04:50.908 [DEBUG] [Thread-182812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:04:50.908 [DEBUG] [Thread-182812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:04:50.908 [DEBUG] [Thread-182812] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:04:50.908 [DEBUG] [Thread-182812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:04:50.908 [DEBUG] [Thread-182812] [transport.py] [_log()] Compression: none
2026-02-14T09:04:50.908 [DEBUG] [Thread-182812] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:04:50.924 [DEBUG] [Thread-182812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:04:50.924 [DEBUG] [Thread-182812] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:04:50.924 [DEBUG] [Thread-182812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:04:50.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:04:50.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:04:50.926 [DEBUG] [Thread-182812] [transport.py] [_log()] userauth is OK
2026-02-14T09:04:50.926 [DEBUG] [Thread-182812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:04:50.926 [DEBUG] [Thread-182812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:04:50.926 [DEBUG] [Thread-182812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:04:50.926 [DEBUG] [Thread-182812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:04:50.945 [INFO] [Thread-182812] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:04:50.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:04:51.583 [DEBUG] [Thread-182812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:04:51.584 [DEBUG] [Thread-182812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:04:51.584 [DEBUG] [Thread-182812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:04:51.624 [DEBUG] [Thread-182812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:04:51.625 [DEBUG] [Thread-182812] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:04:51.628 [DEBUG] [Thread-182812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:04:51.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:04:51.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:04:51.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:04:51.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:04:51.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:04:51.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:04:51.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:04:51.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:04:51.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:04:51.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.294907 -999.00   +9.60  43.73     73   +5.10 1 1 2 1 1   888    0 5.28 29.53 ----- 33.8 43.7 170.0 47.8 14.8 -25.6 13.8 -26.0 12.7 -22.7 13.4 -24.7
2026-02-14T09:04:51.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:04:51.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:04:51.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.294907
2026-02-14T09:04:51.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:04:51.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:04:51.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:04:51.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:04:51.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:04:51.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:04:25', tmtdew=6.33, humidity=65.16, cloud=0.0, wind=40.48, temperature=10.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:04:39.965', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:04:51.653 [DEBUG] [Thread-182812] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:04:51.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-14T09:04:51.753 [DEBUG] [Thread-182815] [transport.py] [_log()] starting thread (client mode): 0xa2d7abc0
2026-02-14T09:04:51.754 [DEBUG] [Thread-182815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:04:51.768 [DEBUG] [Thread-182815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:04:51.768 [INFO] [Thread-182815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:04:51.776 [DEBUG] [Thread-182815] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:04:51.776 [DEBUG] [Thread-182815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:04:51.776 [DEBUG] [Thread-182815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:04:51.776 [DEBUG] [Thread-182815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:04:51.776 [DEBUG] [Thread-182815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:04:51.776 [DEBUG] [Thread-182815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:04:51.776 [DEBUG] [Thread-182815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:04:51.776 [DEBUG] [Thread-182815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:04:51.776 [DEBUG] [Thread-182815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:04:51.776 [DEBUG] [Thread-182815] [transport.py] [_log()] client lang: <none>
2026-02-14T09:04:51.776 [DEBUG] [Thread-182815] [transport.py] [_log()] server lang: <none>
2026-02-14T09:04:51.776 [DEBUG] [Thread-182815] [transport.py] [_log()] kex follows: False
2026-02-14T09:04:51.776 [DEBUG] [Thread-182815] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:04:51.776 [DEBUG] [Thread-182815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:04:51.776 [DEBUG] [Thread-182815] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:04:51.776 [DEBUG] [Thread-182815] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:04:51.777 [DEBUG] [Thread-182815] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:04:51.777 [DEBUG] [Thread-182815] [transport.py] [_log()] Compression: none
2026-02-14T09:04:51.777 [DEBUG] [Thread-182815] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:04:51.834 [DEBUG] [Thread-182815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:04:51.834 [DEBUG] [Thread-182815] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:04:51.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:04:51.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:04:51.836 [DEBUG] [Thread-182815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:04:51.890 [DEBUG] [Thread-182815] [transport.py] [_log()] userauth is OK
2026-02-14T09:04:51.890 [DEBUG] [Thread-182815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:04:51.890 [DEBUG] [Thread-182815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:04:51.891 [DEBUG] [Thread-182815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:04:51.891 [DEBUG] [Thread-182815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:04:51.915 [INFO] [Thread-182815] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:04:51.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-14T09:04:51.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:04:52.725 [DEBUG] [Thread-182815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:04:52.726 [DEBUG] [Thread-182815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:04:52.773 [DEBUG] [Thread-182815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:04:52.773 [DEBUG] [Thread-182815] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:04:52.783 [DEBUG] [Thread-182815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:04:52.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:04:52.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:04:52.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:04:52.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:04:52.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:04:52.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:04:52.821 [DEBUG] [Thread-182815] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:05:05.515 [DEBUG] [Thread-182817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:05:13.100 [DEBUG] [Thread-182818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:05:20.566 [DEBUG] [Thread-182819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:05:22.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:05:22.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:05:22.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-14T09:05:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 4, 25), 6.28, 65.16, 0.0, 44.08, 10.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:05:24.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:04:25
2026-02-14T09:05:25.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:05:25.193 [DEBUG] [Thread-182820] [transport.py] [_log()] starting thread (client mode): 0xa2d3cfa0
2026-02-14T09:05:25.193 [DEBUG] [Thread-182820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:05:25.215 [DEBUG] [Thread-182820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:05:25.215 [INFO] [Thread-182820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:05:25.218 [DEBUG] [Thread-182820] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:05:25.218 [DEBUG] [Thread-182820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:05:25.218 [DEBUG] [Thread-182820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:05:25.218 [DEBUG] [Thread-182820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:05:25.218 [DEBUG] [Thread-182820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:05:25.219 [DEBUG] [Thread-182820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:05:25.219 [DEBUG] [Thread-182820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:05:25.219 [DEBUG] [Thread-182820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:05:25.219 [DEBUG] [Thread-182820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:05:25.219 [DEBUG] [Thread-182820] [transport.py] [_log()] client lang: <none>
2026-02-14T09:05:25.219 [DEBUG] [Thread-182820] [transport.py] [_log()] server lang: <none>
2026-02-14T09:05:25.219 [DEBUG] [Thread-182820] [transport.py] [_log()] kex follows: False
2026-02-14T09:05:25.219 [DEBUG] [Thread-182820] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:05:25.219 [DEBUG] [Thread-182820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:05:25.219 [DEBUG] [Thread-182820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:05:25.219 [DEBUG] [Thread-182820] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:05:25.219 [DEBUG] [Thread-182820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:05:25.220 [DEBUG] [Thread-182820] [transport.py] [_log()] Compression: none
2026-02-14T09:05:25.220 [DEBUG] [Thread-182820] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:05:25.238 [DEBUG] [Thread-182820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:05:25.239 [DEBUG] [Thread-182820] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:05:25.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:05:25.241 [DEBUG] [Thread-182820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:05:25.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:05:25.244 [DEBUG] [Thread-182820] [transport.py] [_log()] userauth is OK
2026-02-14T09:05:25.244 [DEBUG] [Thread-182820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:05:25.244 [DEBUG] [Thread-182820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:05:25.244 [DEBUG] [Thread-182820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:05:25.244 [DEBUG] [Thread-182820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:05:25.266 [INFO] [Thread-182820] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:05:25.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:05:25.915 [DEBUG] [Thread-182820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:05:25.915 [DEBUG] [Thread-182820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:05:25.915 [DEBUG] [Thread-182820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:05:25.957 [DEBUG] [Thread-182820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:05:25.957 [DEBUG] [Thread-182820] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:05:25.960 [DEBUG] [Thread-182820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:05:25.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:05:25.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:05:25.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:05:25.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:05:25.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:05:25.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:05:25.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:05:25.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:05:25.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:05:25.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.295253 -999.00   +9.50  34.69     73   +5.00 1 2 2 1 1   888    0 5.23 26.97 ----- 25.3 34.7 168.2 44.3 14.9 -24.4 14.0 -21.2 12.8 -22.8 13.4 -25.5
2026-02-14T09:05:25.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:05:25.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:05:25.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.295253
2026-02-14T09:05:25.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:05:25.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:05:25.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:05:25.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:05:25.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:05:25.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:04:25', tmtdew=6.28, humidity=65.16, cloud=0.0, wind=44.08, temperature=10.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:05:09.859', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:05:25.990 [DEBUG] [Thread-182820] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:05:26.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-14T09:05:26.089 [DEBUG] [Thread-182823] [transport.py] [_log()] starting thread (client mode): 0xa57c05b0
2026-02-14T09:05:26.089 [DEBUG] [Thread-182823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:05:26.103 [DEBUG] [Thread-182823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:05:26.103 [INFO] [Thread-182823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:05:26.111 [DEBUG] [Thread-182823] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:05:26.111 [DEBUG] [Thread-182823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:05:26.111 [DEBUG] [Thread-182823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:05:26.111 [DEBUG] [Thread-182823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:05:26.111 [DEBUG] [Thread-182823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:05:26.112 [DEBUG] [Thread-182823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:05:26.112 [DEBUG] [Thread-182823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:05:26.112 [DEBUG] [Thread-182823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:05:26.112 [DEBUG] [Thread-182823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:05:26.112 [DEBUG] [Thread-182823] [transport.py] [_log()] client lang: <none>
2026-02-14T09:05:26.112 [DEBUG] [Thread-182823] [transport.py] [_log()] server lang: <none>
2026-02-14T09:05:26.112 [DEBUG] [Thread-182823] [transport.py] [_log()] kex follows: False
2026-02-14T09:05:26.112 [DEBUG] [Thread-182823] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:05:26.112 [DEBUG] [Thread-182823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:05:26.112 [DEBUG] [Thread-182823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:05:26.112 [DEBUG] [Thread-182823] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:05:26.112 [DEBUG] [Thread-182823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:05:26.112 [DEBUG] [Thread-182823] [transport.py] [_log()] Compression: none
2026-02-14T09:05:26.112 [DEBUG] [Thread-182823] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:05:26.171 [DEBUG] [Thread-182823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:05:26.171 [DEBUG] [Thread-182823] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:05:26.172 [DEBUG] [Thread-182823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:05:26.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:05:26.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:05:26.230 [DEBUG] [Thread-182823] [transport.py] [_log()] userauth is OK
2026-02-14T09:05:26.230 [DEBUG] [Thread-182823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:05:26.230 [DEBUG] [Thread-182823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:05:26.230 [DEBUG] [Thread-182823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:05:26.231 [DEBUG] [Thread-182823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:05:26.251 [INFO] [Thread-182823] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:05:26.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T09:05:26.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:05:27.088 [DEBUG] [Thread-182823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:05:27.088 [DEBUG] [Thread-182823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:05:27.136 [DEBUG] [Thread-182823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:05:27.137 [DEBUG] [Thread-182823] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:05:27.146 [DEBUG] [Thread-182823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:05:27.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:05:27.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:05:27.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-14T09:05:27.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:05:27.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:05:27.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:05:27.182 [DEBUG] [Thread-182823] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:05:35.603 [DEBUG] [Thread-182825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:05:47.503 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:05:47.504 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:05:50.656 [DEBUG] [Thread-182826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:05:57.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:05:57.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:05:57.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-14T09:05:59.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 5, 36), 6.36, 64.79, 0.0, 46.33, 10.97, 0, 0, 0, 2, 1, 0),)
2026-02-14T09:05:59.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:05:36
2026-02-14T09:05:59.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:05:59.524 [DEBUG] [Thread-182827] [transport.py] [_log()] starting thread (client mode): 0xa5741900
2026-02-14T09:05:59.524 [DEBUG] [Thread-182827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:05:59.543 [DEBUG] [Thread-182827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:05:59.543 [INFO] [Thread-182827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:05:59.546 [DEBUG] [Thread-182827] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:05:59.546 [DEBUG] [Thread-182827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:05:59.546 [DEBUG] [Thread-182827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:05:59.546 [DEBUG] [Thread-182827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:05:59.546 [DEBUG] [Thread-182827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:05:59.546 [DEBUG] [Thread-182827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:05:59.546 [DEBUG] [Thread-182827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:05:59.546 [DEBUG] [Thread-182827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:05:59.546 [DEBUG] [Thread-182827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:05:59.546 [DEBUG] [Thread-182827] [transport.py] [_log()] client lang: <none>
2026-02-14T09:05:59.547 [DEBUG] [Thread-182827] [transport.py] [_log()] server lang: <none>
2026-02-14T09:05:59.547 [DEBUG] [Thread-182827] [transport.py] [_log()] kex follows: False
2026-02-14T09:05:59.547 [DEBUG] [Thread-182827] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:05:59.547 [DEBUG] [Thread-182827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:05:59.547 [DEBUG] [Thread-182827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:05:59.547 [DEBUG] [Thread-182827] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:05:59.547 [DEBUG] [Thread-182827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:05:59.547 [DEBUG] [Thread-182827] [transport.py] [_log()] Compression: none
2026-02-14T09:05:59.547 [DEBUG] [Thread-182827] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:05:59.565 [DEBUG] [Thread-182827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:05:59.565 [DEBUG] [Thread-182827] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:05:59.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:05:59.566 [DEBUG] [Thread-182827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:05:59.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:05:59.568 [DEBUG] [Thread-182827] [transport.py] [_log()] userauth is OK
2026-02-14T09:05:59.568 [DEBUG] [Thread-182827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:05:59.568 [DEBUG] [Thread-182827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:05:59.569 [DEBUG] [Thread-182827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:05:59.569 [DEBUG] [Thread-182827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:05:59.579 [INFO] [Thread-182827] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:05:59.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:06:00.231 [DEBUG] [Thread-182827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:06:00.232 [DEBUG] [Thread-182827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:06:00.232 [DEBUG] [Thread-182827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:06:00.272 [DEBUG] [Thread-182827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:06:00.272 [DEBUG] [Thread-182827] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:06:00.275 [DEBUG] [Thread-182827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:06:00.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:06:00.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:06:00.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:06:00.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:06:00.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:06:00.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:06:00.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:06:00.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:06:00.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:06:00.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.295601 -999.00   +9.90  29.00     73   +5.30 1 2 1 1 1   888    0 5.08 24.45 ----- 26.6 29.0 161.6 40.4 15.1 -27.0 14.1 -22.4 12.8 -23.2 13.5 -25.9
2026-02-14T09:06:00.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:06:00.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:06:00.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.295601
2026-02-14T09:06:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:06:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:06:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:06:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:06:00.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:06:00.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:05:36', tmtdew=6.36, humidity=64.79, cloud=0.0, wind=46.33, temperature=10.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:05:39.926', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:06:00.301 [DEBUG] [Thread-182827] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:06:00.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-14T09:06:00.397 [DEBUG] [Thread-182830] [transport.py] [_log()] starting thread (client mode): 0xa57427d0
2026-02-14T09:06:00.397 [DEBUG] [Thread-182830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:06:00.414 [DEBUG] [Thread-182830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:06:00.414 [INFO] [Thread-182830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:06:00.421 [DEBUG] [Thread-182830] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:06:00.422 [DEBUG] [Thread-182830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:06:00.422 [DEBUG] [Thread-182830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:06:00.422 [DEBUG] [Thread-182830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:06:00.422 [DEBUG] [Thread-182830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:06:00.422 [DEBUG] [Thread-182830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:06:00.422 [DEBUG] [Thread-182830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:06:00.422 [DEBUG] [Thread-182830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:06:00.422 [DEBUG] [Thread-182830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:06:00.422 [DEBUG] [Thread-182830] [transport.py] [_log()] client lang: <none>
2026-02-14T09:06:00.423 [DEBUG] [Thread-182830] [transport.py] [_log()] server lang: <none>
2026-02-14T09:06:00.423 [DEBUG] [Thread-182830] [transport.py] [_log()] kex follows: False
2026-02-14T09:06:00.423 [DEBUG] [Thread-182830] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:06:00.423 [DEBUG] [Thread-182830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:06:00.423 [DEBUG] [Thread-182830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:06:00.423 [DEBUG] [Thread-182830] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:06:00.423 [DEBUG] [Thread-182830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:06:00.423 [DEBUG] [Thread-182830] [transport.py] [_log()] Compression: none
2026-02-14T09:06:00.423 [DEBUG] [Thread-182830] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:06:00.484 [DEBUG] [Thread-182830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:06:00.485 [DEBUG] [Thread-182830] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:06:00.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:06:00.486 [DEBUG] [Thread-182830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:06:00.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:06:00.541 [DEBUG] [Thread-182830] [transport.py] [_log()] userauth is OK
2026-02-14T09:06:00.541 [DEBUG] [Thread-182830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:06:00.541 [DEBUG] [Thread-182830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:06:00.542 [DEBUG] [Thread-182830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:06:00.542 [DEBUG] [Thread-182830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:06:00.561 [INFO] [Thread-182830] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:06:00.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T09:06:00.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:06:01.406 [DEBUG] [Thread-182830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:06:01.406 [DEBUG] [Thread-182830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:06:01.454 [DEBUG] [Thread-182830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:06:01.455 [DEBUG] [Thread-182830] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:06:01.464 [DEBUG] [Thread-182830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:06:01.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:06:01.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-14T09:06:01.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-14T09:06:01.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:06:01.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:06:01.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:06:01.500 [DEBUG] [Thread-182830] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:06:05.695 [DEBUG] [Thread-182832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:06:13.152 [DEBUG] [Thread-182833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:06:20.749 [DEBUG] [Thread-182834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:06:31.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:06:31.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:06:31.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:06:34.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 6, 11), 5.88, 67.09, 0.0, 44.38, 10.0, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:06:34.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:06:11
2026-02-14T09:06:34.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:06:34.664 [DEBUG] [Thread-182835] [transport.py] [_log()] starting thread (client mode): 0xa2d78e50
2026-02-14T09:06:34.664 [DEBUG] [Thread-182835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:06:34.685 [DEBUG] [Thread-182835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:06:34.685 [INFO] [Thread-182835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:06:34.688 [DEBUG] [Thread-182835] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:06:34.688 [DEBUG] [Thread-182835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:06:34.689 [DEBUG] [Thread-182835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:06:34.689 [DEBUG] [Thread-182835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:06:34.689 [DEBUG] [Thread-182835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:06:34.689 [DEBUG] [Thread-182835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:06:34.689 [DEBUG] [Thread-182835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:06:34.689 [DEBUG] [Thread-182835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:06:34.689 [DEBUG] [Thread-182835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:06:34.689 [DEBUG] [Thread-182835] [transport.py] [_log()] client lang: <none>
2026-02-14T09:06:34.689 [DEBUG] [Thread-182835] [transport.py] [_log()] server lang: <none>
2026-02-14T09:06:34.689 [DEBUG] [Thread-182835] [transport.py] [_log()] kex follows: False
2026-02-14T09:06:34.689 [DEBUG] [Thread-182835] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:06:34.689 [DEBUG] [Thread-182835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:06:34.689 [DEBUG] [Thread-182835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:06:34.689 [DEBUG] [Thread-182835] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:06:34.690 [DEBUG] [Thread-182835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:06:34.690 [DEBUG] [Thread-182835] [transport.py] [_log()] Compression: none
2026-02-14T09:06:34.690 [DEBUG] [Thread-182835] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:06:34.712 [DEBUG] [Thread-182835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:06:34.713 [DEBUG] [Thread-182835] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:06:34.713 [DEBUG] [Thread-182835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:06:34.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:06:34.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:06:34.716 [DEBUG] [Thread-182835] [transport.py] [_log()] userauth is OK
2026-02-14T09:06:34.716 [DEBUG] [Thread-182835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:06:34.716 [DEBUG] [Thread-182835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:06:34.716 [DEBUG] [Thread-182835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:06:34.716 [DEBUG] [Thread-182835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:06:34.742 [INFO] [Thread-182835] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:06:34.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:06:35.385 [DEBUG] [Thread-182835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:06:35.386 [DEBUG] [Thread-182835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:06:35.386 [DEBUG] [Thread-182835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:06:35.426 [DEBUG] [Thread-182835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:06:35.427 [DEBUG] [Thread-182835] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:06:35.430 [DEBUG] [Thread-182835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:06:35.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:06:35.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:06:35.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:06:35.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:06:35.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:06:35.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:06:35.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:06:35.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:06:35.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:06:35.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.295948 -999.00   +9.90  27.35     73   +5.30 1 1 1 1 1   888    0 5.14 22.59 ----- 23.8 27.4 164.8 44.3 15.2 -24.2 13.9 -24.5 12.9 -23.9 13.6 -24.0
2026-02-14T09:06:35.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:06:35.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:06:35.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.295948
2026-02-14T09:06:35.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:06:35.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:06:35.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:06:35.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:06:35.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:06:35.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:06:11', tmtdew=5.88, humidity=67.09, cloud=0.0, wind=44.38, temperature=10.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:06:09.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:06:35.457 [DEBUG] [Thread-182835] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:06:35.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-14T09:06:35.554 [DEBUG] [Thread-182838] [transport.py] [_log()] starting thread (client mode): 0xa2d3f910
2026-02-14T09:06:35.555 [DEBUG] [Thread-182838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:06:35.569 [DEBUG] [Thread-182838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:06:35.569 [INFO] [Thread-182838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:06:35.577 [DEBUG] [Thread-182838] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:06:35.577 [DEBUG] [Thread-182838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:06:35.577 [DEBUG] [Thread-182838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:06:35.577 [DEBUG] [Thread-182838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:06:35.577 [DEBUG] [Thread-182838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:06:35.577 [DEBUG] [Thread-182838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:06:35.578 [DEBUG] [Thread-182838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:06:35.578 [DEBUG] [Thread-182838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:06:35.578 [DEBUG] [Thread-182838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:06:35.578 [DEBUG] [Thread-182838] [transport.py] [_log()] client lang: <none>
2026-02-14T09:06:35.578 [DEBUG] [Thread-182838] [transport.py] [_log()] server lang: <none>
2026-02-14T09:06:35.578 [DEBUG] [Thread-182838] [transport.py] [_log()] kex follows: False
2026-02-14T09:06:35.578 [DEBUG] [Thread-182838] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:06:35.578 [DEBUG] [Thread-182838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:06:35.579 [DEBUG] [Thread-182838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:06:35.579 [DEBUG] [Thread-182838] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:06:35.579 [DEBUG] [Thread-182838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:06:35.579 [DEBUG] [Thread-182838] [transport.py] [_log()] Compression: none
2026-02-14T09:06:35.579 [DEBUG] [Thread-182838] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:06:35.636 [DEBUG] [Thread-182838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:06:35.637 [DEBUG] [Thread-182838] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:06:35.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:06:35.638 [DEBUG] [Thread-182838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:06:35.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:06:35.696 [DEBUG] [Thread-182838] [transport.py] [_log()] userauth is OK
2026-02-14T09:06:35.696 [DEBUG] [Thread-182838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:06:35.696 [DEBUG] [Thread-182838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:06:35.697 [DEBUG] [Thread-182838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:06:35.697 [DEBUG] [Thread-182838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:06:35.717 [INFO] [Thread-182838] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:06:35.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-14T09:06:35.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:06:35.786 [DEBUG] [Thread-182840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:06:36.546 [DEBUG] [Thread-182838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:06:36.547 [DEBUG] [Thread-182838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:06:36.594 [DEBUG] [Thread-182838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:06:36.595 [DEBUG] [Thread-182838] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:06:36.604 [DEBUG] [Thread-182838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:06:36.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:06:36.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-14T09:06:36.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-14T09:06:36.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:06:36.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:06:36.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:06:36.641 [DEBUG] [Thread-182838] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:06:47.644 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:06:47.646 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:06:50.839 [DEBUG] [Thread-182841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:07:05.874 [DEBUG] [Thread-182842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:07:06.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:07:06.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:07:06.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-14T09:07:09.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 6, 46), 5.76, 67.67, 0.0, 41.3, 10.05, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:07:09.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:06:46
2026-02-14T09:07:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:07:09.705 [DEBUG] [Thread-182843] [transport.py] [_log()] starting thread (client mode): 0xa5742fe0
2026-02-14T09:07:09.706 [DEBUG] [Thread-182843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:07:09.721 [DEBUG] [Thread-182843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:07:09.721 [INFO] [Thread-182843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:07:09.724 [DEBUG] [Thread-182843] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:07:09.724 [DEBUG] [Thread-182843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:07:09.724 [DEBUG] [Thread-182843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:07:09.724 [DEBUG] [Thread-182843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:07:09.724 [DEBUG] [Thread-182843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:07:09.724 [DEBUG] [Thread-182843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:07:09.725 [DEBUG] [Thread-182843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:07:09.725 [DEBUG] [Thread-182843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:07:09.725 [DEBUG] [Thread-182843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:07:09.725 [DEBUG] [Thread-182843] [transport.py] [_log()] client lang: <none>
2026-02-14T09:07:09.725 [DEBUG] [Thread-182843] [transport.py] [_log()] server lang: <none>
2026-02-14T09:07:09.725 [DEBUG] [Thread-182843] [transport.py] [_log()] kex follows: False
2026-02-14T09:07:09.725 [DEBUG] [Thread-182843] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:07:09.725 [DEBUG] [Thread-182843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:07:09.725 [DEBUG] [Thread-182843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:07:09.725 [DEBUG] [Thread-182843] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:07:09.725 [DEBUG] [Thread-182843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:07:09.725 [DEBUG] [Thread-182843] [transport.py] [_log()] Compression: none
2026-02-14T09:07:09.725 [DEBUG] [Thread-182843] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:07:09.746 [DEBUG] [Thread-182843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:07:09.746 [DEBUG] [Thread-182843] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:07:09.747 [DEBUG] [Thread-182843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:07:09.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:07:09.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:07:09.748 [DEBUG] [Thread-182843] [transport.py] [_log()] userauth is OK
2026-02-14T09:07:09.749 [DEBUG] [Thread-182843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:07:09.749 [DEBUG] [Thread-182843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:07:09.749 [DEBUG] [Thread-182843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:07:09.749 [DEBUG] [Thread-182843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:07:09.771 [INFO] [Thread-182843] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:07:09.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:07:10.337 [DEBUG] [Thread-182843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:07:10.337 [DEBUG] [Thread-182843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:07:10.337 [DEBUG] [Thread-182843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:07:10.378 [DEBUG] [Thread-182843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:07:10.378 [DEBUG] [Thread-182843] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:07:10.381 [DEBUG] [Thread-182843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:07:10.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:07:10.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:07:10.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:07:10.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:07:10.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:07:10.394 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:07:10.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:07:10.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:07:10.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:07:10.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.296296 -999.00  +10.10  28.68     73   +5.40 1 2 1 1 1   888    0 5.01 21.55 ----- 32.2 28.7 165.2 34.8 15.3 -26.5 14.3 -22.2 12.9 -22.7 13.8 -26.1
2026-02-14T09:07:10.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:07:10.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:07:10.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.296296
2026-02-14T09:07:10.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:07:10.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:07:10.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:07:10.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:07:10.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:07:10.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:06:46', tmtdew=5.76, humidity=67.67, cloud=0.0, wind=41.3, temperature=10.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:06:39.974', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:07:10.397 [DEBUG] [Thread-182843] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:07:10.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T09:07:10.495 [DEBUG] [Thread-182846] [transport.py] [_log()] starting thread (client mode): 0xa5740790
2026-02-14T09:07:10.495 [DEBUG] [Thread-182846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:07:10.513 [DEBUG] [Thread-182846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:07:10.514 [INFO] [Thread-182846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:07:10.521 [DEBUG] [Thread-182846] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:07:10.521 [DEBUG] [Thread-182846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:07:10.522 [DEBUG] [Thread-182846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:07:10.522 [DEBUG] [Thread-182846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:07:10.522 [DEBUG] [Thread-182846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:07:10.522 [DEBUG] [Thread-182846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:07:10.522 [DEBUG] [Thread-182846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:07:10.522 [DEBUG] [Thread-182846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:07:10.522 [DEBUG] [Thread-182846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:07:10.522 [DEBUG] [Thread-182846] [transport.py] [_log()] client lang: <none>
2026-02-14T09:07:10.522 [DEBUG] [Thread-182846] [transport.py] [_log()] server lang: <none>
2026-02-14T09:07:10.522 [DEBUG] [Thread-182846] [transport.py] [_log()] kex follows: False
2026-02-14T09:07:10.522 [DEBUG] [Thread-182846] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:07:10.522 [DEBUG] [Thread-182846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:07:10.522 [DEBUG] [Thread-182846] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:07:10.522 [DEBUG] [Thread-182846] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:07:10.522 [DEBUG] [Thread-182846] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:07:10.522 [DEBUG] [Thread-182846] [transport.py] [_log()] Compression: none
2026-02-14T09:07:10.522 [DEBUG] [Thread-182846] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:07:10.577 [DEBUG] [Thread-182846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:07:10.578 [DEBUG] [Thread-182846] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:07:10.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:07:10.579 [DEBUG] [Thread-182846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:07:10.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:07:10.636 [DEBUG] [Thread-182846] [transport.py] [_log()] userauth is OK
2026-02-14T09:07:10.636 [DEBUG] [Thread-182846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:07:10.636 [DEBUG] [Thread-182846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:07:10.636 [DEBUG] [Thread-182846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:07:10.636 [DEBUG] [Thread-182846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:07:10.655 [INFO] [Thread-182846] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:07:10.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-14T09:07:10.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:07:11.489 [DEBUG] [Thread-182846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:07:11.490 [DEBUG] [Thread-182846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:07:11.538 [DEBUG] [Thread-182846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:07:11.538 [DEBUG] [Thread-182846] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:07:11.547 [DEBUG] [Thread-182846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:07:11.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:07:11.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-14T09:07:11.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-14T09:07:11.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:07:11.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:07:11.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:07:11.581 [DEBUG] [Thread-182846] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:07:13.197 [DEBUG] [Thread-182848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:07:20.907 [DEBUG] [Thread-182849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:07:35.966 [DEBUG] [Thread-182850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:07:41.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:07:41.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:07:41.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:07:43.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 7, 21), 5.69, 67.96, 0.0, 38.92, 9.94, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:07:43.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:07:21
2026-02-14T09:07:43.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:07:43.958 [DEBUG] [Thread-182851] [transport.py] [_log()] starting thread (client mode): 0xa5759810
2026-02-14T09:07:43.958 [DEBUG] [Thread-182851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:07:43.978 [DEBUG] [Thread-182851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:07:43.979 [INFO] [Thread-182851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:07:43.982 [DEBUG] [Thread-182851] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:07:43.982 [DEBUG] [Thread-182851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:07:43.982 [DEBUG] [Thread-182851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:07:43.982 [DEBUG] [Thread-182851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:07:43.982 [DEBUG] [Thread-182851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:07:43.982 [DEBUG] [Thread-182851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:07:43.982 [DEBUG] [Thread-182851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:07:43.982 [DEBUG] [Thread-182851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:07:43.982 [DEBUG] [Thread-182851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:07:43.982 [DEBUG] [Thread-182851] [transport.py] [_log()] client lang: <none>
2026-02-14T09:07:43.982 [DEBUG] [Thread-182851] [transport.py] [_log()] server lang: <none>
2026-02-14T09:07:43.982 [DEBUG] [Thread-182851] [transport.py] [_log()] kex follows: False
2026-02-14T09:07:43.982 [DEBUG] [Thread-182851] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:07:43.982 [DEBUG] [Thread-182851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:07:43.982 [DEBUG] [Thread-182851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:07:43.982 [DEBUG] [Thread-182851] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:07:43.982 [DEBUG] [Thread-182851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:07:43.982 [DEBUG] [Thread-182851] [transport.py] [_log()] Compression: none
2026-02-14T09:07:43.982 [DEBUG] [Thread-182851] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:07:43.999 [DEBUG] [Thread-182851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:07:43.999 [DEBUG] [Thread-182851] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:07:44.000 [DEBUG] [Thread-182851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:07:44.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:07:44.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:07:44.002 [DEBUG] [Thread-182851] [transport.py] [_log()] userauth is OK
2026-02-14T09:07:44.002 [DEBUG] [Thread-182851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:07:44.002 [DEBUG] [Thread-182851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:07:44.002 [DEBUG] [Thread-182851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:07:44.003 [DEBUG] [Thread-182851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:07:44.028 [INFO] [Thread-182851] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:07:44.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:07:44.684 [DEBUG] [Thread-182851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:07:44.685 [DEBUG] [Thread-182851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:07:44.685 [DEBUG] [Thread-182851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:07:44.725 [DEBUG] [Thread-182851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:07:44.725 [DEBUG] [Thread-182851] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:07:44.728 [DEBUG] [Thread-182851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:07:44.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:07:44.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:07:44.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:07:44.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:07:44.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:07:44.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:07:44.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:07:44.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:07:44.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:07:44.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.296643 -999.00  +10.00  31.28     73   +5.30 1 1 2 1 1   888    0 5.09 21.57 ----- 25.6 31.3 167.4 48.7 15.2 -24.5 14.4 -23.3 12.9 -25.8 13.8 -25.7
2026-02-14T09:07:44.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:07:44.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:07:44.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.296643
2026-02-14T09:07:44.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:07:44.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:07:44.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:07:44.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:07:44.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:07:44.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:07:21', tmtdew=5.69, humidity=67.96, cloud=0.0, wind=38.92, temperature=9.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:07:09.955', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:07:44.754 [DEBUG] [Thread-182851] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:07:44.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-14T09:07:44.850 [DEBUG] [Thread-182854] [transport.py] [_log()] starting thread (client mode): 0xa2d1a770
2026-02-14T09:07:44.850 [DEBUG] [Thread-182854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:07:44.864 [DEBUG] [Thread-182854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:07:44.864 [INFO] [Thread-182854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:07:44.872 [DEBUG] [Thread-182854] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:07:44.872 [DEBUG] [Thread-182854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:07:44.872 [DEBUG] [Thread-182854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:07:44.873 [DEBUG] [Thread-182854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:07:44.873 [DEBUG] [Thread-182854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:07:44.873 [DEBUG] [Thread-182854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:07:44.873 [DEBUG] [Thread-182854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:07:44.873 [DEBUG] [Thread-182854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:07:44.873 [DEBUG] [Thread-182854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:07:44.873 [DEBUG] [Thread-182854] [transport.py] [_log()] client lang: <none>
2026-02-14T09:07:44.873 [DEBUG] [Thread-182854] [transport.py] [_log()] server lang: <none>
2026-02-14T09:07:44.873 [DEBUG] [Thread-182854] [transport.py] [_log()] kex follows: False
2026-02-14T09:07:44.873 [DEBUG] [Thread-182854] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:07:44.873 [DEBUG] [Thread-182854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:07:44.873 [DEBUG] [Thread-182854] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:07:44.873 [DEBUG] [Thread-182854] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:07:44.873 [DEBUG] [Thread-182854] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:07:44.873 [DEBUG] [Thread-182854] [transport.py] [_log()] Compression: none
2026-02-14T09:07:44.873 [DEBUG] [Thread-182854] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:07:44.930 [DEBUG] [Thread-182854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:07:44.930 [DEBUG] [Thread-182854] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:07:44.931 [DEBUG] [Thread-182854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:07:44.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:07:44.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:07:44.986 [DEBUG] [Thread-182854] [transport.py] [_log()] userauth is OK
2026-02-14T09:07:44.986 [DEBUG] [Thread-182854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:07:44.987 [DEBUG] [Thread-182854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:07:44.987 [DEBUG] [Thread-182854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:07:44.987 [DEBUG] [Thread-182854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:07:45.005 [INFO] [Thread-182854] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:07:45.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-14T09:07:45.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:07:45.836 [DEBUG] [Thread-182854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:07:45.836 [DEBUG] [Thread-182854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:07:45.884 [DEBUG] [Thread-182854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:07:45.885 [DEBUG] [Thread-182854] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:07:45.894 [DEBUG] [Thread-182854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:07:45.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:07:45.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:07: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') -> 00000000
2026-02-14T09:07:45.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:07:45.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:07:45.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:07:45.931 [DEBUG] [Thread-182854] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:07:47.789 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:07:47.789 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:07:51.004 [DEBUG] [Thread-182856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:08:06.064 [DEBUG] [Thread-182857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:08:13.237 [DEBUG] [Thread-182858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:08:15.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:08:15.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:08:15.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-14T09:08:17.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 7, 58), 5.72, 67.77, 0.0, 39.59, 9.84, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:08:17.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:07:58
2026-02-14T09:08:18.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:08:18.423 [DEBUG] [Thread-182859] [transport.py] [_log()] starting thread (client mode): 0xa2d3c5e0
2026-02-14T09:08:18.423 [DEBUG] [Thread-182859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:08:18.443 [DEBUG] [Thread-182859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:08:18.443 [INFO] [Thread-182859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:08:18.446 [DEBUG] [Thread-182859] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:08:18.446 [DEBUG] [Thread-182859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:08:18.446 [DEBUG] [Thread-182859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:08:18.446 [DEBUG] [Thread-182859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:08:18.446 [DEBUG] [Thread-182859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:08:18.446 [DEBUG] [Thread-182859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:08:18.446 [DEBUG] [Thread-182859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:08:18.446 [DEBUG] [Thread-182859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:08:18.446 [DEBUG] [Thread-182859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:08:18.446 [DEBUG] [Thread-182859] [transport.py] [_log()] client lang: <none>
2026-02-14T09:08:18.446 [DEBUG] [Thread-182859] [transport.py] [_log()] server lang: <none>
2026-02-14T09:08:18.446 [DEBUG] [Thread-182859] [transport.py] [_log()] kex follows: False
2026-02-14T09:08:18.446 [DEBUG] [Thread-182859] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:08:18.446 [DEBUG] [Thread-182859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:08:18.447 [DEBUG] [Thread-182859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:08:18.447 [DEBUG] [Thread-182859] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:08:18.447 [DEBUG] [Thread-182859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:08:18.447 [DEBUG] [Thread-182859] [transport.py] [_log()] Compression: none
2026-02-14T09:08:18.447 [DEBUG] [Thread-182859] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:08:18.463 [DEBUG] [Thread-182859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:08:18.464 [DEBUG] [Thread-182859] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:08:18.465 [DEBUG] [Thread-182859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:08:18.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:08:18.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:08:18.509 [DEBUG] [Thread-182859] [transport.py] [_log()] userauth is OK
2026-02-14T09:08:18.510 [DEBUG] [Thread-182859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:08:18.510 [DEBUG] [Thread-182859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:08:18.510 [DEBUG] [Thread-182859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:08:18.510 [DEBUG] [Thread-182859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:08:18.530 [INFO] [Thread-182859] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:08:18.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:08:19.148 [DEBUG] [Thread-182859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:08:19.148 [DEBUG] [Thread-182859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:08:19.148 [DEBUG] [Thread-182859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:08:19.189 [DEBUG] [Thread-182859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:08:19.190 [DEBUG] [Thread-182859] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:08:19.193 [DEBUG] [Thread-182859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:08:19.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:08:19.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:08:19.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:08:19.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:08:19.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:08:19.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:08:19.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:08:19.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:08:19.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:08:19.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.296989 -999.00   +9.90  30.52     73   +5.30 1 1 2 1 1   888    0 4.92 19.14 ----- 31.3 30.5 172.6 41.5 15.3 -26.2 14.3 -25.2 12.9 -24.3 13.7 -26.4
2026-02-14T09:08:19.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:08:19.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:08:19.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.296989
2026-02-14T09:08:19.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:08:19.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:08:19.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:08:19.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:08:19.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:08:19.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:07:58', tmtdew=5.72, humidity=67.77, cloud=0.0, wind=39.59, temperature=9.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:07:39.850', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:08:19.218 [DEBUG] [Thread-182859] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:08:19.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-14T09:08:19.314 [DEBUG] [Thread-182862] [transport.py] [_log()] starting thread (client mode): 0xa575a590
2026-02-14T09:08:19.314 [DEBUG] [Thread-182862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:08:19.329 [DEBUG] [Thread-182862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:08:19.329 [INFO] [Thread-182862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:08:19.337 [DEBUG] [Thread-182862] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:08:19.337 [DEBUG] [Thread-182862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:08:19.337 [DEBUG] [Thread-182862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:08:19.337 [DEBUG] [Thread-182862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:08:19.337 [DEBUG] [Thread-182862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:08:19.337 [DEBUG] [Thread-182862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:08:19.337 [DEBUG] [Thread-182862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:08:19.337 [DEBUG] [Thread-182862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:08:19.337 [DEBUG] [Thread-182862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:08:19.337 [DEBUG] [Thread-182862] [transport.py] [_log()] client lang: <none>
2026-02-14T09:08:19.337 [DEBUG] [Thread-182862] [transport.py] [_log()] server lang: <none>
2026-02-14T09:08:19.337 [DEBUG] [Thread-182862] [transport.py] [_log()] kex follows: False
2026-02-14T09:08:19.337 [DEBUG] [Thread-182862] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:08:19.338 [DEBUG] [Thread-182862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:08:19.338 [DEBUG] [Thread-182862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:08:19.338 [DEBUG] [Thread-182862] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:08:19.338 [DEBUG] [Thread-182862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:08:19.338 [DEBUG] [Thread-182862] [transport.py] [_log()] Compression: none
2026-02-14T09:08:19.338 [DEBUG] [Thread-182862] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:08:19.397 [DEBUG] [Thread-182862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:08:19.398 [DEBUG] [Thread-182862] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:08:19.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:08:19.399 [DEBUG] [Thread-182862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:08:19.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:08:19.457 [DEBUG] [Thread-182862] [transport.py] [_log()] userauth is OK
2026-02-14T09:08:19.457 [DEBUG] [Thread-182862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:08:19.457 [DEBUG] [Thread-182862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:08:19.457 [DEBUG] [Thread-182862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:08:19.457 [DEBUG] [Thread-182862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:08:19.477 [INFO] [Thread-182862] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:08:19.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-14T09:08:19.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:08:20.355 [DEBUG] [Thread-182862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:08:20.356 [DEBUG] [Thread-182862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:08:20.403 [DEBUG] [Thread-182862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:08:20.403 [DEBUG] [Thread-182862] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:08:20.413 [DEBUG] [Thread-182862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:08:20.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:08:20.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:08:20.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-14T09:08:20.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:08:20.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:08:20.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:08:20.450 [DEBUG] [Thread-182862] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:08:21.100 [DEBUG] [Thread-182864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:08:36.155 [DEBUG] [Thread-182865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:08:47.932 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:08:47.933 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:08:50.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:08:50.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:08:50.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-14T09:08:51.192 [DEBUG] [Thread-182866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:08:52.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 8, 33), 5.76, 67.59, 0.0, 39.72, 9.87, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:08:52.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:08:33
2026-02-14T09:08:52.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:08:52.747 [DEBUG] [Thread-182867] [transport.py] [_log()] starting thread (client mode): 0xa57c37c0
2026-02-14T09:08:52.747 [DEBUG] [Thread-182867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:08:52.767 [DEBUG] [Thread-182867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:08:52.767 [INFO] [Thread-182867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:08:52.771 [DEBUG] [Thread-182867] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:08:52.771 [DEBUG] [Thread-182867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:08:52.771 [DEBUG] [Thread-182867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:08:52.771 [DEBUG] [Thread-182867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:08:52.771 [DEBUG] [Thread-182867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:08:52.771 [DEBUG] [Thread-182867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:08:52.771 [DEBUG] [Thread-182867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:08:52.771 [DEBUG] [Thread-182867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:08:52.771 [DEBUG] [Thread-182867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:08:52.771 [DEBUG] [Thread-182867] [transport.py] [_log()] client lang: <none>
2026-02-14T09:08:52.771 [DEBUG] [Thread-182867] [transport.py] [_log()] server lang: <none>
2026-02-14T09:08:52.771 [DEBUG] [Thread-182867] [transport.py] [_log()] kex follows: False
2026-02-14T09:08:52.771 [DEBUG] [Thread-182867] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:08:52.771 [DEBUG] [Thread-182867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:08:52.771 [DEBUG] [Thread-182867] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:08:52.771 [DEBUG] [Thread-182867] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:08:52.771 [DEBUG] [Thread-182867] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:08:52.771 [DEBUG] [Thread-182867] [transport.py] [_log()] Compression: none
2026-02-14T09:08:52.771 [DEBUG] [Thread-182867] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:08:52.791 [DEBUG] [Thread-182867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:08:52.791 [DEBUG] [Thread-182867] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:08:52.792 [DEBUG] [Thread-182867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:08:52.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:08:52.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:08:52.833 [DEBUG] [Thread-182867] [transport.py] [_log()] userauth is OK
2026-02-14T09:08:52.833 [DEBUG] [Thread-182867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:08:52.833 [DEBUG] [Thread-182867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:08:52.833 [DEBUG] [Thread-182867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:08:52.833 [DEBUG] [Thread-182867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:08:52.869 [INFO] [Thread-182867] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:08:52.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:08:53.498 [DEBUG] [Thread-182867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:08:53.498 [DEBUG] [Thread-182867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:08:53.499 [DEBUG] [Thread-182867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:08:53.539 [DEBUG] [Thread-182867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:08:53.540 [DEBUG] [Thread-182867] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:08:53.543 [DEBUG] [Thread-182867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:08:53.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:08:53.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:08:53.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:08:53.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:08:53.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:08:53.567 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:08:53.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:08:53.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:08:53.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:08:53.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.297684 -999.00  +10.00  33.30     73   +5.50 1 2 2 1 1   888    0 4.99 19.84 ----- 29.0 33.3 167.2 40.2 15.5 -25.8 14.5 -22.5 13.1 -23.1 13.8 -27.0
2026-02-14T09:08:53.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:08:53.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:08:53.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.297684
2026-02-14T09:08:53.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:08:53.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:08:53.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:08:53.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:08:53.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:08:53.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:08:33', tmtdew=5.76, humidity=67.59, cloud=0.0, wind=39.72, temperature=9.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:08:39.898', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:08:53.570 [DEBUG] [Thread-182867] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:08:53.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-14T09:08:53.665 [DEBUG] [Thread-182870] [transport.py] [_log()] starting thread (client mode): 0xa2d3c4c0
2026-02-14T09:08:53.665 [DEBUG] [Thread-182870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:08:53.678 [DEBUG] [Thread-182870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:08:53.679 [INFO] [Thread-182870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:08:53.686 [DEBUG] [Thread-182870] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:08:53.686 [DEBUG] [Thread-182870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:08:53.686 [DEBUG] [Thread-182870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:08:53.687 [DEBUG] [Thread-182870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:08:53.687 [DEBUG] [Thread-182870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:08:53.687 [DEBUG] [Thread-182870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:08:53.687 [DEBUG] [Thread-182870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:08:53.687 [DEBUG] [Thread-182870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:08:53.687 [DEBUG] [Thread-182870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:08:53.687 [DEBUG] [Thread-182870] [transport.py] [_log()] client lang: <none>
2026-02-14T09:08:53.687 [DEBUG] [Thread-182870] [transport.py] [_log()] server lang: <none>
2026-02-14T09:08:53.687 [DEBUG] [Thread-182870] [transport.py] [_log()] kex follows: False
2026-02-14T09:08:53.687 [DEBUG] [Thread-182870] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:08:53.687 [DEBUG] [Thread-182870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:08:53.687 [DEBUG] [Thread-182870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:08:53.687 [DEBUG] [Thread-182870] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:08:53.687 [DEBUG] [Thread-182870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:08:53.687 [DEBUG] [Thread-182870] [transport.py] [_log()] Compression: none
2026-02-14T09:08:53.687 [DEBUG] [Thread-182870] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:08:53.743 [DEBUG] [Thread-182870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:08:53.744 [DEBUG] [Thread-182870] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:08:53.744 [DEBUG] [Thread-182870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:08:53.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:08:53.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:08:53.800 [DEBUG] [Thread-182870] [transport.py] [_log()] userauth is OK
2026-02-14T09:08:53.800 [DEBUG] [Thread-182870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:08:53.800 [DEBUG] [Thread-182870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:08:53.800 [DEBUG] [Thread-182870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:08:53.801 [DEBUG] [Thread-182870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:08:53.822 [INFO] [Thread-182870] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:08:53.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-14T09:08:53.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:08:54.645 [DEBUG] [Thread-182870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:08:54.646 [DEBUG] [Thread-182870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:08:54.693 [DEBUG] [Thread-182870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:08:54.694 [DEBUG] [Thread-182870] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:08:54.703 [DEBUG] [Thread-182870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:08:54.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:08:54.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-14T09:08:54.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:08:54.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:08:54.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:08:54.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:08:54.740 [DEBUG] [Thread-182870] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:09:06.230 [DEBUG] [Thread-182872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:09:13.282 [DEBUG] [Thread-182873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:09:21.288 [DEBUG] [Thread-182874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:09:24.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:09:24.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:09:24.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:09:26.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 9, 8), 5.71, 67.8, 0.0, 40.65, 9.9, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:09:26.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:09:08
2026-02-14T09:09:26.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:09:27.103 [DEBUG] [Thread-182875] [transport.py] [_log()] starting thread (client mode): 0xa2d3e380
2026-02-14T09:09:27.103 [DEBUG] [Thread-182875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:09:27.124 [DEBUG] [Thread-182875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:09:27.124 [INFO] [Thread-182875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:09:27.126 [DEBUG] [Thread-182875] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:09:27.127 [DEBUG] [Thread-182875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:09:27.127 [DEBUG] [Thread-182875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:09:27.127 [DEBUG] [Thread-182875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:09:27.127 [DEBUG] [Thread-182875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:09:27.127 [DEBUG] [Thread-182875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:09:27.127 [DEBUG] [Thread-182875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:09:27.127 [DEBUG] [Thread-182875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:09:27.127 [DEBUG] [Thread-182875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:09:27.127 [DEBUG] [Thread-182875] [transport.py] [_log()] client lang: <none>
2026-02-14T09:09:27.127 [DEBUG] [Thread-182875] [transport.py] [_log()] server lang: <none>
2026-02-14T09:09:27.127 [DEBUG] [Thread-182875] [transport.py] [_log()] kex follows: False
2026-02-14T09:09:27.127 [DEBUG] [Thread-182875] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:09:27.127 [DEBUG] [Thread-182875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:09:27.127 [DEBUG] [Thread-182875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:09:27.127 [DEBUG] [Thread-182875] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:09:27.127 [DEBUG] [Thread-182875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:09:27.127 [DEBUG] [Thread-182875] [transport.py] [_log()] Compression: none
2026-02-14T09:09:27.127 [DEBUG] [Thread-182875] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:09:27.135 [DEBUG] [Thread-182875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:09:27.136 [DEBUG] [Thread-182875] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:09:27.136 [DEBUG] [Thread-182875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:09:27.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:09:27.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:09:27.138 [DEBUG] [Thread-182875] [transport.py] [_log()] userauth is OK
2026-02-14T09:09:27.138 [DEBUG] [Thread-182875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:09:27.138 [DEBUG] [Thread-182875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:09:27.138 [DEBUG] [Thread-182875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:09:27.138 [DEBUG] [Thread-182875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:09:27.174 [INFO] [Thread-182875] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:09:27.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:09:27.833 [DEBUG] [Thread-182875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:09:27.833 [DEBUG] [Thread-182875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:09:27.834 [DEBUG] [Thread-182875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:09:27.874 [DEBUG] [Thread-182875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:09:27.875 [DEBUG] [Thread-182875] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:09:27.878 [DEBUG] [Thread-182875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:09:27.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:09:27.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:09:27.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:09:27.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:09:27.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:09:27.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:09:27.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:09:27.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:09:27.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:09:27.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.298032 -999.00   +9.70  26.57     73   +5.30 1 1 1 1 1   888    0 5.07 18.79 ----- 30.5 26.6 165.2 40.6 15.2 -24.9 14.4 -24.6 13.1 -24.4 13.8 -24.7
2026-02-14T09:09:27.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:09:27.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:09:27.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.298032
2026-02-14T09:09:27.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:09:27.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:09:27.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:09:27.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:09:27.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:09:27.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:09:08', tmtdew=5.71, humidity=67.8, cloud=0.0, wind=40.65, temperature=9.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:09:09.965', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:09:27.908 [DEBUG] [Thread-182875] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:09:27.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-14T09:09:28.004 [DEBUG] [Thread-182878] [transport.py] [_log()] starting thread (client mode): 0xa2d3f6d0
2026-02-14T09:09:28.004 [DEBUG] [Thread-182878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:09:28.019 [DEBUG] [Thread-182878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:09:28.019 [INFO] [Thread-182878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:09:28.026 [DEBUG] [Thread-182878] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:09:28.027 [DEBUG] [Thread-182878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:09:28.027 [DEBUG] [Thread-182878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:09:28.027 [DEBUG] [Thread-182878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:09:28.027 [DEBUG] [Thread-182878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:09:28.027 [DEBUG] [Thread-182878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:09:28.027 [DEBUG] [Thread-182878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:09:28.028 [DEBUG] [Thread-182878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:09:28.028 [DEBUG] [Thread-182878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:09:28.028 [DEBUG] [Thread-182878] [transport.py] [_log()] client lang: <none>
2026-02-14T09:09:28.028 [DEBUG] [Thread-182878] [transport.py] [_log()] server lang: <none>
2026-02-14T09:09:28.028 [DEBUG] [Thread-182878] [transport.py] [_log()] kex follows: False
2026-02-14T09:09:28.028 [DEBUG] [Thread-182878] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:09:28.028 [DEBUG] [Thread-182878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:09:28.028 [DEBUG] [Thread-182878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:09:28.028 [DEBUG] [Thread-182878] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:09:28.029 [DEBUG] [Thread-182878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:09:28.029 [DEBUG] [Thread-182878] [transport.py] [_log()] Compression: none
2026-02-14T09:09:28.029 [DEBUG] [Thread-182878] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:09:28.084 [DEBUG] [Thread-182878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:09:28.084 [DEBUG] [Thread-182878] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:09:28.085 [DEBUG] [Thread-182878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:09:28.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:09:28.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:09:28.139 [DEBUG] [Thread-182878] [transport.py] [_log()] userauth is OK
2026-02-14T09:09:28.144 [DEBUG] [Thread-182878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:09:28.144 [DEBUG] [Thread-182878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:09:28.144 [DEBUG] [Thread-182878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:09:28.144 [DEBUG] [Thread-182878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:09:28.163 [INFO] [Thread-182878] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:09:28.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-14T09:09:28.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:09:28.998 [DEBUG] [Thread-182878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:09:28.999 [DEBUG] [Thread-182878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:09:29.046 [DEBUG] [Thread-182878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:09:29.046 [DEBUG] [Thread-182878] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:09:29.055 [DEBUG] [Thread-182878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:09:29.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:09:29.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-14T09:09:29.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-14T09:09:29.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:09:29.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:09:29.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:09:29.089 [DEBUG] [Thread-182878] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:09:36.326 [DEBUG] [Thread-182880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:09:48.073 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:09:48.075 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:09:51.379 [DEBUG] [Thread-182881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:09:59.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:09:59.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:09:59.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-14T09:10:00.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 9, 43), 6.02, 66.57, 0.0, 38.3, 10.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:10:00.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:09:43
2026-02-14T09:10:01.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:10:01.434 [DEBUG] [Thread-182882] [transport.py] [_log()] starting thread (client mode): 0xa57429e0
2026-02-14T09:10:01.434 [DEBUG] [Thread-182882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:10:01.455 [DEBUG] [Thread-182882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:10:01.455 [INFO] [Thread-182882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:10:01.458 [DEBUG] [Thread-182882] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:10:01.458 [DEBUG] [Thread-182882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:10:01.458 [DEBUG] [Thread-182882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:10:01.458 [DEBUG] [Thread-182882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:10:01.458 [DEBUG] [Thread-182882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:10:01.458 [DEBUG] [Thread-182882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:10:01.458 [DEBUG] [Thread-182882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:10:01.458 [DEBUG] [Thread-182882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:10:01.458 [DEBUG] [Thread-182882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:10:01.458 [DEBUG] [Thread-182882] [transport.py] [_log()] client lang: <none>
2026-02-14T09:10:01.458 [DEBUG] [Thread-182882] [transport.py] [_log()] server lang: <none>
2026-02-14T09:10:01.458 [DEBUG] [Thread-182882] [transport.py] [_log()] kex follows: False
2026-02-14T09:10:01.458 [DEBUG] [Thread-182882] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:10:01.458 [DEBUG] [Thread-182882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:10:01.458 [DEBUG] [Thread-182882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:10:01.458 [DEBUG] [Thread-182882] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:10:01.458 [DEBUG] [Thread-182882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:10:01.458 [DEBUG] [Thread-182882] [transport.py] [_log()] Compression: none
2026-02-14T09:10:01.458 [DEBUG] [Thread-182882] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:10:01.474 [DEBUG] [Thread-182882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:10:01.474 [DEBUG] [Thread-182882] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:10:01.475 [DEBUG] [Thread-182882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:10:01.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:10:01.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:10:01.477 [DEBUG] [Thread-182882] [transport.py] [_log()] userauth is OK
2026-02-14T09:10:01.477 [DEBUG] [Thread-182882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:10:01.477 [DEBUG] [Thread-182882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:10:01.477 [DEBUG] [Thread-182882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:10:01.477 [DEBUG] [Thread-182882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:10:01.495 [INFO] [Thread-182882] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:10:01.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:10:02.111 [DEBUG] [Thread-182882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:10:02.112 [DEBUG] [Thread-182882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:10:02.112 [DEBUG] [Thread-182882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:10:02.152 [DEBUG] [Thread-182882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:10:02.152 [DEBUG] [Thread-182882] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:10:02.156 [DEBUG] [Thread-182882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:10:02.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:10:02.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:10:02.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:10:02.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:10:02.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:10:02.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:10:02.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:10:02.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:10:02.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:10:02.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.298379 -999.00   +9.90  29.11     74   +5.50 1 1 1 1 1   888    0 5.05 17.14 ----- 30.0 29.1 161.4 40.1 15.5 -24.6 14.4 -22.5 13.1 -23.6 13.9 -24.9
2026-02-14T09:10:02.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:10:02.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:10:02.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.298379
2026-02-14T09:10:02.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:10:02.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:10:02.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:10:02.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:10:02.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:10:02.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:09:43', tmtdew=6.02, humidity=66.57, cloud=0.0, wind=38.3, temperature=10.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:09:39.946', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:10:02.181 [DEBUG] [Thread-182882] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:10:02.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-14T09:10:02.275 [DEBUG] [Thread-182885] [transport.py] [_log()] starting thread (client mode): 0xa2d3d870
2026-02-14T09:10:02.275 [DEBUG] [Thread-182885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:10:02.290 [DEBUG] [Thread-182885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:10:02.290 [INFO] [Thread-182885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:10:02.297 [DEBUG] [Thread-182885] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:10:02.297 [DEBUG] [Thread-182885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:10:02.297 [DEBUG] [Thread-182885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:10:02.298 [DEBUG] [Thread-182885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:10:02.298 [DEBUG] [Thread-182885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:10:02.298 [DEBUG] [Thread-182885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:10:02.298 [DEBUG] [Thread-182885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:10:02.298 [DEBUG] [Thread-182885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:10:02.298 [DEBUG] [Thread-182885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:10:02.298 [DEBUG] [Thread-182885] [transport.py] [_log()] client lang: <none>
2026-02-14T09:10:02.298 [DEBUG] [Thread-182885] [transport.py] [_log()] server lang: <none>
2026-02-14T09:10:02.298 [DEBUG] [Thread-182885] [transport.py] [_log()] kex follows: False
2026-02-14T09:10:02.298 [DEBUG] [Thread-182885] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:10:02.298 [DEBUG] [Thread-182885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:10:02.298 [DEBUG] [Thread-182885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:10:02.298 [DEBUG] [Thread-182885] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:10:02.298 [DEBUG] [Thread-182885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:10:02.298 [DEBUG] [Thread-182885] [transport.py] [_log()] Compression: none
2026-02-14T09:10:02.298 [DEBUG] [Thread-182885] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:10:02.354 [DEBUG] [Thread-182885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:10:02.354 [DEBUG] [Thread-182885] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:10:02.355 [DEBUG] [Thread-182885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:10:02.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:10:02.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:10:02.411 [DEBUG] [Thread-182885] [transport.py] [_log()] userauth is OK
2026-02-14T09:10:02.411 [DEBUG] [Thread-182885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:10:02.411 [DEBUG] [Thread-182885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:10:02.411 [DEBUG] [Thread-182885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:10:02.411 [DEBUG] [Thread-182885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:10:02.429 [INFO] [Thread-182885] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:10:02.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-14T09:10:02.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:10:03.245 [DEBUG] [Thread-182885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:10:03.245 [DEBUG] [Thread-182885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:10:03.294 [DEBUG] [Thread-182885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:10:03.294 [DEBUG] [Thread-182885] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:10:03.303 [DEBUG] [Thread-182885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:10:03.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:10:03.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-14T09:10:03.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-14T09:10:03.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:10:03.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:10:03.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:10:03.340 [DEBUG] [Thread-182885] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:10:06.415 [DEBUG] [Thread-182887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:10:13.324 [DEBUG] [Thread-182888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:10:21.470 [DEBUG] [Thread-182889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:10:33.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:10:33.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:10:33.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-14T09:10:35.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 10, 19), 5.99, 66.64, 0.0, 36.24, 10.09, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:10:35.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:10:19
2026-02-14T09:10:36.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:10:36.359 [DEBUG] [Thread-182890] [transport.py] [_log()] starting thread (client mode): 0xa5743040
2026-02-14T09:10:36.368 [DEBUG] [Thread-182890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:10:36.379 [DEBUG] [Thread-182890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:10:36.379 [INFO] [Thread-182890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:10:36.382 [DEBUG] [Thread-182890] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:10:36.382 [DEBUG] [Thread-182890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:10:36.382 [DEBUG] [Thread-182890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:10:36.382 [DEBUG] [Thread-182890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:10:36.382 [DEBUG] [Thread-182890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:10:36.382 [DEBUG] [Thread-182890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:10:36.382 [DEBUG] [Thread-182890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:10:36.382 [DEBUG] [Thread-182890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:10:36.382 [DEBUG] [Thread-182890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:10:36.382 [DEBUG] [Thread-182890] [transport.py] [_log()] client lang: <none>
2026-02-14T09:10:36.382 [DEBUG] [Thread-182890] [transport.py] [_log()] server lang: <none>
2026-02-14T09:10:36.382 [DEBUG] [Thread-182890] [transport.py] [_log()] kex follows: False
2026-02-14T09:10:36.382 [DEBUG] [Thread-182890] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:10:36.382 [DEBUG] [Thread-182890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:10:36.382 [DEBUG] [Thread-182890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:10:36.382 [DEBUG] [Thread-182890] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:10:36.382 [DEBUG] [Thread-182890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:10:36.382 [DEBUG] [Thread-182890] [transport.py] [_log()] Compression: none
2026-02-14T09:10:36.382 [DEBUG] [Thread-182890] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:10:36.399 [DEBUG] [Thread-182890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:10:36.399 [DEBUG] [Thread-182890] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:10:36.400 [DEBUG] [Thread-182890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:10:36.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:10:36.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:10:36.401 [DEBUG] [Thread-182890] [transport.py] [_log()] userauth is OK
2026-02-14T09:10:36.402 [DEBUG] [Thread-182890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:10:36.402 [DEBUG] [Thread-182890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:10:36.402 [DEBUG] [Thread-182890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:10:36.402 [DEBUG] [Thread-182890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:10:36.420 [INFO] [Thread-182890] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:10:36.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:10:36.510 [DEBUG] [Thread-182892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:10:37.020 [DEBUG] [Thread-182890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:10:37.020 [DEBUG] [Thread-182890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:10:37.020 [DEBUG] [Thread-182890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:10:37.061 [DEBUG] [Thread-182890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:10:37.062 [DEBUG] [Thread-182890] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:10:37.065 [DEBUG] [Thread-182890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:10:37.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:10:37.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:10:37.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:10:37.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:10:37.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:10:37.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:10:37.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:10:37.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:10:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:10:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.298726 -999.00  +10.00  24.52     73   +5.60 1 1 1 1 1   888    0 4.90 15.67 ----- 28.6 24.5 164.8 39.0 15.6 -25.0 14.5 -23.4 13.2 -23.6 14.0 -24.8
2026-02-14T09:10:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:10:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:10:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.298726
2026-02-14T09:10:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:10:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:10:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:10:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:10:37.090 [DEBUG] [Thread-182890] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:10:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:10:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:10:19', tmtdew=5.99, humidity=66.64, cloud=0.0, wind=36.24, temperature=10.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:10:09.926', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:10:37.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-14T09:10:37.187 [DEBUG] [Thread-182894] [transport.py] [_log()] starting thread (client mode): 0xa57429e0
2026-02-14T09:10:37.188 [DEBUG] [Thread-182894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:10:37.203 [DEBUG] [Thread-182894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:10:37.203 [INFO] [Thread-182894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:10:37.211 [DEBUG] [Thread-182894] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:10:37.211 [DEBUG] [Thread-182894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:10:37.211 [DEBUG] [Thread-182894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:10:37.211 [DEBUG] [Thread-182894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:10:37.211 [DEBUG] [Thread-182894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:10:37.211 [DEBUG] [Thread-182894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:10:37.211 [DEBUG] [Thread-182894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:10:37.211 [DEBUG] [Thread-182894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:10:37.211 [DEBUG] [Thread-182894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:10:37.211 [DEBUG] [Thread-182894] [transport.py] [_log()] client lang: <none>
2026-02-14T09:10:37.211 [DEBUG] [Thread-182894] [transport.py] [_log()] server lang: <none>
2026-02-14T09:10:37.212 [DEBUG] [Thread-182894] [transport.py] [_log()] kex follows: False
2026-02-14T09:10:37.212 [DEBUG] [Thread-182894] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:10:37.212 [DEBUG] [Thread-182894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:10:37.212 [DEBUG] [Thread-182894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:10:37.212 [DEBUG] [Thread-182894] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:10:37.212 [DEBUG] [Thread-182894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:10:37.212 [DEBUG] [Thread-182894] [transport.py] [_log()] Compression: none
2026-02-14T09:10:37.212 [DEBUG] [Thread-182894] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:10:37.272 [DEBUG] [Thread-182894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:10:37.272 [DEBUG] [Thread-182894] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:10:37.273 [DEBUG] [Thread-182894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:10:37.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:10:37.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:10:37.330 [DEBUG] [Thread-182894] [transport.py] [_log()] userauth is OK
2026-02-14T09:10:37.331 [DEBUG] [Thread-182894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:10:37.331 [DEBUG] [Thread-182894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:10:37.331 [DEBUG] [Thread-182894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:10:37.331 [DEBUG] [Thread-182894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:10:37.349 [INFO] [Thread-182894] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:10:37.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-14T09:10:37.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:10:38.191 [DEBUG] [Thread-182894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:10:38.191 [DEBUG] [Thread-182894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:10:38.240 [DEBUG] [Thread-182894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:10:38.240 [DEBUG] [Thread-182894] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:10:38.250 [DEBUG] [Thread-182894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:10:38.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:10:38.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:10:38.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-14T09:10:38.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:10:38.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:10:38.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:10:38.286 [DEBUG] [Thread-182894] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:10:48.215 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:10:48.216 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:10:51.550 [DEBUG] [Thread-182896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:11:06.603 [DEBUG] [Thread-182897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:11:08.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:11:08.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:11:08.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-14T09:11:10.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 10, 54), 5.69, 67.42, 0.0, 37.03, 10.1, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:11:10.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:10:54
2026-02-14T09:11:10.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:11:10.773 [DEBUG] [Thread-182898] [transport.py] [_log()] starting thread (client mode): 0xa57432e0
2026-02-14T09:11:10.773 [DEBUG] [Thread-182898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:11:10.788 [DEBUG] [Thread-182898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:11:10.788 [INFO] [Thread-182898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:11:10.790 [DEBUG] [Thread-182898] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:11:10.791 [DEBUG] [Thread-182898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:11:10.791 [DEBUG] [Thread-182898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:11:10.791 [DEBUG] [Thread-182898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:11:10.791 [DEBUG] [Thread-182898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:11:10.791 [DEBUG] [Thread-182898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:11:10.791 [DEBUG] [Thread-182898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:11:10.791 [DEBUG] [Thread-182898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:11:10.791 [DEBUG] [Thread-182898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:11:10.791 [DEBUG] [Thread-182898] [transport.py] [_log()] client lang: <none>
2026-02-14T09:11:10.791 [DEBUG] [Thread-182898] [transport.py] [_log()] server lang: <none>
2026-02-14T09:11:10.791 [DEBUG] [Thread-182898] [transport.py] [_log()] kex follows: False
2026-02-14T09:11:10.791 [DEBUG] [Thread-182898] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:11:10.791 [DEBUG] [Thread-182898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:11:10.791 [DEBUG] [Thread-182898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:11:10.791 [DEBUG] [Thread-182898] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:11:10.791 [DEBUG] [Thread-182898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:11:10.791 [DEBUG] [Thread-182898] [transport.py] [_log()] Compression: none
2026-02-14T09:11:10.791 [DEBUG] [Thread-182898] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:11:10.805 [DEBUG] [Thread-182898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:11:10.806 [DEBUG] [Thread-182898] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:11:10.806 [DEBUG] [Thread-182898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:11:10.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:11:10.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:11:10.808 [DEBUG] [Thread-182898] [transport.py] [_log()] userauth is OK
2026-02-14T09:11:10.808 [DEBUG] [Thread-182898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:11:10.808 [DEBUG] [Thread-182898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:11:10.808 [DEBUG] [Thread-182898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:11:10.808 [DEBUG] [Thread-182898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:11:10.832 [INFO] [Thread-182898] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:11:10.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:11:11.483 [DEBUG] [Thread-182898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:11:11.483 [DEBUG] [Thread-182898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:11:11.483 [DEBUG] [Thread-182898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:11:11.523 [DEBUG] [Thread-182898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:11:11.524 [DEBUG] [Thread-182898] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:11:11.527 [DEBUG] [Thread-182898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:11:11.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:11:11.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:11:11.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:11:11.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:11:11.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:11:11.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:11:11.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:11:11.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:11:11.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:11:11.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.299073 -999.00  +10.10  31.00     73   +5.50 1 2 2 1 1   888    0 4.94 14.46 ----- 29.2 31.0 168.1 39.4 15.7 -24.0 14.7 -21.5 13.2 -23.5 14.1 -24.0
2026-02-14T09:11:11.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:11:11.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:11:11.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.299073
2026-02-14T09:11:11.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:11:11.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:11:11.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:11:11.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:11:11.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:11:11.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:10:54', tmtdew=5.69, humidity=67.42, cloud=0.0, wind=37.03, temperature=10.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:10:39.907', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:11:11.554 [DEBUG] [Thread-182898] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:11:11.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T09:11:11.650 [DEBUG] [Thread-182901] [transport.py] [_log()] starting thread (client mode): 0xa2d3dbd0
2026-02-14T09:11:11.650 [DEBUG] [Thread-182901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:11:11.665 [DEBUG] [Thread-182901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:11:11.665 [INFO] [Thread-182901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:11:11.672 [DEBUG] [Thread-182901] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:11:11.673 [DEBUG] [Thread-182901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:11:11.673 [DEBUG] [Thread-182901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:11:11.673 [DEBUG] [Thread-182901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:11:11.673 [DEBUG] [Thread-182901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:11:11.673 [DEBUG] [Thread-182901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:11:11.673 [DEBUG] [Thread-182901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:11:11.673 [DEBUG] [Thread-182901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:11:11.673 [DEBUG] [Thread-182901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:11:11.673 [DEBUG] [Thread-182901] [transport.py] [_log()] client lang: <none>
2026-02-14T09:11:11.673 [DEBUG] [Thread-182901] [transport.py] [_log()] server lang: <none>
2026-02-14T09:11:11.673 [DEBUG] [Thread-182901] [transport.py] [_log()] kex follows: False
2026-02-14T09:11:11.673 [DEBUG] [Thread-182901] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:11:11.673 [DEBUG] [Thread-182901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:11:11.673 [DEBUG] [Thread-182901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:11:11.673 [DEBUG] [Thread-182901] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:11:11.673 [DEBUG] [Thread-182901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:11:11.674 [DEBUG] [Thread-182901] [transport.py] [_log()] Compression: none
2026-02-14T09:11:11.674 [DEBUG] [Thread-182901] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:11:11.731 [DEBUG] [Thread-182901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:11:11.732 [DEBUG] [Thread-182901] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:11:11.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:11:11.733 [DEBUG] [Thread-182901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:11:11.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:11:11.790 [DEBUG] [Thread-182901] [transport.py] [_log()] userauth is OK
2026-02-14T09:11:11.790 [DEBUG] [Thread-182901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:11:11.790 [DEBUG] [Thread-182901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:11:11.790 [DEBUG] [Thread-182901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:11:11.790 [DEBUG] [Thread-182901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:11:11.809 [INFO] [Thread-182901] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:11:11.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T09:11:11.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:11:12.647 [DEBUG] [Thread-182901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:11:12.647 [DEBUG] [Thread-182901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:11:12.695 [DEBUG] [Thread-182901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:11:12.695 [DEBUG] [Thread-182901] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:11:12.705 [DEBUG] [Thread-182901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:11:12.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:11:12.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:11:12.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-14T09:11:12.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:11:12.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:11:12.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:11:12.741 [DEBUG] [Thread-182901] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:11:13.359 [DEBUG] [Thread-182903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:11:21.639 [DEBUG] [Thread-182904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:11:36.688 [DEBUG] [Thread-182905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:11:42.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:11:42.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:11:42.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:11:44.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 11, 29), 5.72, 67.27, 0.0, 38.0, 10.2, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:11:44.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:11:29
2026-02-14T09:11:45.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:11:45.460 [DEBUG] [Thread-182906] [transport.py] [_log()] starting thread (client mode): 0xa2ddfa90
2026-02-14T09:11:45.460 [DEBUG] [Thread-182906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:11:45.481 [DEBUG] [Thread-182906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:11:45.481 [INFO] [Thread-182906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:11:45.484 [DEBUG] [Thread-182906] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:11:45.484 [DEBUG] [Thread-182906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:11:45.484 [DEBUG] [Thread-182906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:11:45.484 [DEBUG] [Thread-182906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:11:45.484 [DEBUG] [Thread-182906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:11:45.484 [DEBUG] [Thread-182906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:11:45.484 [DEBUG] [Thread-182906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:11:45.484 [DEBUG] [Thread-182906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:11:45.484 [DEBUG] [Thread-182906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:11:45.485 [DEBUG] [Thread-182906] [transport.py] [_log()] client lang: <none>
2026-02-14T09:11:45.485 [DEBUG] [Thread-182906] [transport.py] [_log()] server lang: <none>
2026-02-14T09:11:45.485 [DEBUG] [Thread-182906] [transport.py] [_log()] kex follows: False
2026-02-14T09:11:45.485 [DEBUG] [Thread-182906] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:11:45.485 [DEBUG] [Thread-182906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:11:45.485 [DEBUG] [Thread-182906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:11:45.485 [DEBUG] [Thread-182906] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:11:45.485 [DEBUG] [Thread-182906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:11:45.485 [DEBUG] [Thread-182906] [transport.py] [_log()] Compression: none
2026-02-14T09:11:45.485 [DEBUG] [Thread-182906] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:11:45.505 [DEBUG] [Thread-182906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:11:45.505 [DEBUG] [Thread-182906] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:11:45.506 [DEBUG] [Thread-182906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:11:45.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:11:45.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:11:45.508 [DEBUG] [Thread-182906] [transport.py] [_log()] userauth is OK
2026-02-14T09:11:45.508 [DEBUG] [Thread-182906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:11:45.508 [DEBUG] [Thread-182906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:11:45.508 [DEBUG] [Thread-182906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:11:45.508 [DEBUG] [Thread-182906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:11:45.544 [INFO] [Thread-182906] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:11:45.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:11:46.178 [DEBUG] [Thread-182906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:11:46.178 [DEBUG] [Thread-182906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:11:46.179 [DEBUG] [Thread-182906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:11:46.219 [DEBUG] [Thread-182906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:11:46.220 [DEBUG] [Thread-182906] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:11:46.223 [DEBUG] [Thread-182906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:11:46.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:11:46.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:11:46.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:11:46.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:11:46.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:11:46.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:11:46.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:11:46.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:11:46.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:11:46.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.299420 -999.00  +10.10  30.30     72   +5.40 1 2 2 1 1   888    0 4.87 14.48 ----- 36.0 30.3 161.0 47.0 15.7 -23.4 14.8 -19.8 13.3 -21.5 14.1 -24.1
2026-02-14T09:11:46.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:11:46.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:11:46.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.299420
2026-02-14T09:11:46.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:11:46.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:11:46.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:11:46.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:11:46.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:11:46.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:11:29', tmtdew=5.72, humidity=67.27, cloud=0.0, wind=38.0, temperature=10.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:11:09.888', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:11:46.253 [DEBUG] [Thread-182906] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:11:46.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-14T09:11:46.354 [DEBUG] [Thread-182909] [transport.py] [_log()] starting thread (client mode): 0xa2ddfca0
2026-02-14T09:11:46.355 [DEBUG] [Thread-182909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:11:46.369 [DEBUG] [Thread-182909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:11:46.370 [INFO] [Thread-182909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:11:46.377 [DEBUG] [Thread-182909] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:11:46.377 [DEBUG] [Thread-182909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:11:46.377 [DEBUG] [Thread-182909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:11:46.377 [DEBUG] [Thread-182909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:11:46.377 [DEBUG] [Thread-182909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:11:46.377 [DEBUG] [Thread-182909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:11:46.377 [DEBUG] [Thread-182909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:11:46.377 [DEBUG] [Thread-182909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:11:46.377 [DEBUG] [Thread-182909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:11:46.377 [DEBUG] [Thread-182909] [transport.py] [_log()] client lang: <none>
2026-02-14T09:11:46.377 [DEBUG] [Thread-182909] [transport.py] [_log()] server lang: <none>
2026-02-14T09:11:46.377 [DEBUG] [Thread-182909] [transport.py] [_log()] kex follows: False
2026-02-14T09:11:46.378 [DEBUG] [Thread-182909] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:11:46.378 [DEBUG] [Thread-182909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:11:46.378 [DEBUG] [Thread-182909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:11:46.378 [DEBUG] [Thread-182909] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:11:46.378 [DEBUG] [Thread-182909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:11:46.378 [DEBUG] [Thread-182909] [transport.py] [_log()] Compression: none
2026-02-14T09:11:46.378 [DEBUG] [Thread-182909] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:11:46.437 [DEBUG] [Thread-182909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:11:46.437 [DEBUG] [Thread-182909] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:11:46.438 [DEBUG] [Thread-182909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:11:46.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:11:46.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:11:46.493 [DEBUG] [Thread-182909] [transport.py] [_log()] userauth is OK
2026-02-14T09:11:46.493 [DEBUG] [Thread-182909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:11:46.494 [DEBUG] [Thread-182909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:11:46.494 [DEBUG] [Thread-182909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:11:46.494 [DEBUG] [Thread-182909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:11:46.513 [INFO] [Thread-182909] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:11:46.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-14T09:11:46.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:11:47.369 [DEBUG] [Thread-182909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:11:47.371 [DEBUG] [Thread-182909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:11:47.417 [DEBUG] [Thread-182909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:11:47.417 [DEBUG] [Thread-182909] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:11:47.426 [DEBUG] [Thread-182909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:11:47.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:11:47.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-14T09:11:47.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-14T09:11:47.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:11:47.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:11:47.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:11:47.464 [DEBUG] [Thread-182909] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:11:48.359 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:11:48.360 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:11:51.725 [DEBUG] [Thread-182911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:12:06.785 [DEBUG] [Thread-182912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:12:13.407 [DEBUG] [Thread-182913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:12:17.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:12:17.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:12:17.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:12:19.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 12, 5), 5.83, 66.8, 0.0, 36.98, 10.3, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:12:19.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:12:05
2026-02-14T09:12:19.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:12:19.936 [DEBUG] [Thread-182914] [transport.py] [_log()] starting thread (client mode): 0xa2ddc3a0
2026-02-14T09:12:19.936 [DEBUG] [Thread-182914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:12:19.957 [DEBUG] [Thread-182914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:12:19.957 [INFO] [Thread-182914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:12:19.960 [DEBUG] [Thread-182914] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:12:19.960 [DEBUG] [Thread-182914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:12:19.960 [DEBUG] [Thread-182914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:12:19.960 [DEBUG] [Thread-182914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:12:19.960 [DEBUG] [Thread-182914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:12:19.961 [DEBUG] [Thread-182914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:12:19.961 [DEBUG] [Thread-182914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:12:19.961 [DEBUG] [Thread-182914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:12:19.961 [DEBUG] [Thread-182914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:12:19.961 [DEBUG] [Thread-182914] [transport.py] [_log()] client lang: <none>
2026-02-14T09:12:19.961 [DEBUG] [Thread-182914] [transport.py] [_log()] server lang: <none>
2026-02-14T09:12:19.961 [DEBUG] [Thread-182914] [transport.py] [_log()] kex follows: False
2026-02-14T09:12:19.961 [DEBUG] [Thread-182914] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:12:19.961 [DEBUG] [Thread-182914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:12:19.961 [DEBUG] [Thread-182914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:12:19.961 [DEBUG] [Thread-182914] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:12:19.961 [DEBUG] [Thread-182914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:12:19.961 [DEBUG] [Thread-182914] [transport.py] [_log()] Compression: none
2026-02-14T09:12:19.961 [DEBUG] [Thread-182914] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:12:19.980 [DEBUG] [Thread-182914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:12:19.980 [DEBUG] [Thread-182914] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:12:19.981 [DEBUG] [Thread-182914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:12:19.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:12:19.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:12:19.983 [DEBUG] [Thread-182914] [transport.py] [_log()] userauth is OK
2026-02-14T09:12:19.983 [DEBUG] [Thread-182914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:12:19.983 [DEBUG] [Thread-182914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:12:19.984 [DEBUG] [Thread-182914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:12:19.984 [DEBUG] [Thread-182914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:12:20.019 [INFO] [Thread-182914] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:12:20.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:12:20.665 [DEBUG] [Thread-182914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:12:20.665 [DEBUG] [Thread-182914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:12:20.665 [DEBUG] [Thread-182914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:12:20.706 [DEBUG] [Thread-182914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:12:20.706 [DEBUG] [Thread-182914] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:12:20.709 [DEBUG] [Thread-182914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:12:20.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:12:20.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:12:20.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:12:20.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:12:20.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:12:20.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:12:20.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:12:20.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:12:20.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:12:20.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.299768 -999.00   +9.80  31.41     73   +5.20 1 2 2 1 1   888    0 4.87 14.62 ----- 34.9 31.4 169.0 45.9 15.6 -23.8 14.7 -24.0 13.2 -21.8 14.1 -24.0
2026-02-14T09:12:20.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:12:20.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:12:20.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.299768
2026-02-14T09:12:20.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:12:20.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:12:20.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:12:20.729 [DEBUG] [Thread-182914] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:12:20.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:12:20.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:12:20.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:12:05', tmtdew=5.83, humidity=66.8, cloud=0.0, wind=36.98, temperature=10.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:11:39.955', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:12:20.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-14T09:12:20.820 [DEBUG] [Thread-182917] [transport.py] [_log()] starting thread (client mode): 0xa2dde1a0
2026-02-14T09:12:20.820 [DEBUG] [Thread-182917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:12:20.834 [DEBUG] [Thread-182917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:12:20.835 [INFO] [Thread-182917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:12:20.842 [DEBUG] [Thread-182917] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:12:20.842 [DEBUG] [Thread-182917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:12:20.842 [DEBUG] [Thread-182917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:12:20.842 [DEBUG] [Thread-182917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:12:20.843 [DEBUG] [Thread-182917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:12:20.843 [DEBUG] [Thread-182917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:12:20.843 [DEBUG] [Thread-182917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:12:20.843 [DEBUG] [Thread-182917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:12:20.843 [DEBUG] [Thread-182917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:12:20.843 [DEBUG] [Thread-182917] [transport.py] [_log()] client lang: <none>
2026-02-14T09:12:20.843 [DEBUG] [Thread-182917] [transport.py] [_log()] server lang: <none>
2026-02-14T09:12:20.843 [DEBUG] [Thread-182917] [transport.py] [_log()] kex follows: False
2026-02-14T09:12:20.843 [DEBUG] [Thread-182917] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:12:20.843 [DEBUG] [Thread-182917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:12:20.843 [DEBUG] [Thread-182917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:12:20.843 [DEBUG] [Thread-182917] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:12:20.843 [DEBUG] [Thread-182917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:12:20.843 [DEBUG] [Thread-182917] [transport.py] [_log()] Compression: none
2026-02-14T09:12:20.843 [DEBUG] [Thread-182917] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:12:20.901 [DEBUG] [Thread-182917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:12:20.901 [DEBUG] [Thread-182917] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:12:20.902 [DEBUG] [Thread-182917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:12:20.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:12:20.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:12:20.956 [DEBUG] [Thread-182917] [transport.py] [_log()] userauth is OK
2026-02-14T09:12:20.957 [DEBUG] [Thread-182917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:12:20.957 [DEBUG] [Thread-182917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:12:20.957 [DEBUG] [Thread-182917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:12:20.957 [DEBUG] [Thread-182917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:12:20.976 [INFO] [Thread-182917] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:12:20.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-14T09:12:20.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:12:21.804 [DEBUG] [Thread-182917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:12:21.805 [DEBUG] [Thread-182917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:12:21.822 [DEBUG] [Thread-182919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:12:21.852 [DEBUG] [Thread-182917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:12:21.853 [DEBUG] [Thread-182917] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:12:21.862 [DEBUG] [Thread-182917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:12:21.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:12:21.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:12:21.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-14T09:12:21.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:12:21.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:12:21.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:12:21.897 [DEBUG] [Thread-182917] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:12:36.877 [DEBUG] [Thread-182920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:12:48.502 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:12:48.503 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:12:51.912 [DEBUG] [Thread-182921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:12:51.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:12:51.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:12:51.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:12:53.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 12, 40), 5.98, 66.48, 0.0, 41.42, 10.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:12:53.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:12:40
2026-02-14T09:12:54.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:12:54.604 [DEBUG] [Thread-182922] [transport.py] [_log()] starting thread (client mode): 0xa2ddfa90
2026-02-14T09:12:54.604 [DEBUG] [Thread-182922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:12:54.625 [DEBUG] [Thread-182922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:12:54.625 [INFO] [Thread-182922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:12:54.628 [DEBUG] [Thread-182922] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:12:54.628 [DEBUG] [Thread-182922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:12:54.628 [DEBUG] [Thread-182922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:12:54.628 [DEBUG] [Thread-182922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:12:54.628 [DEBUG] [Thread-182922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:12:54.628 [DEBUG] [Thread-182922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:12:54.628 [DEBUG] [Thread-182922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:12:54.628 [DEBUG] [Thread-182922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:12:54.629 [DEBUG] [Thread-182922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:12:54.629 [DEBUG] [Thread-182922] [transport.py] [_log()] client lang: <none>
2026-02-14T09:12:54.629 [DEBUG] [Thread-182922] [transport.py] [_log()] server lang: <none>
2026-02-14T09:12:54.629 [DEBUG] [Thread-182922] [transport.py] [_log()] kex follows: False
2026-02-14T09:12:54.629 [DEBUG] [Thread-182922] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:12:54.629 [DEBUG] [Thread-182922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:12:54.629 [DEBUG] [Thread-182922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:12:54.629 [DEBUG] [Thread-182922] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:12:54.629 [DEBUG] [Thread-182922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:12:54.629 [DEBUG] [Thread-182922] [transport.py] [_log()] Compression: none
2026-02-14T09:12:54.629 [DEBUG] [Thread-182922] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:12:54.646 [DEBUG] [Thread-182922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:12:54.647 [DEBUG] [Thread-182922] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:12:54.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:12:54.648 [DEBUG] [Thread-182922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:12:54.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:12:54.650 [DEBUG] [Thread-182922] [transport.py] [_log()] userauth is OK
2026-02-14T09:12:54.650 [DEBUG] [Thread-182922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:12:54.650 [DEBUG] [Thread-182922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:12:54.650 [DEBUG] [Thread-182922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:12:54.650 [DEBUG] [Thread-182922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:12:54.675 [INFO] [Thread-182922] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:12:54.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:12:55.309 [DEBUG] [Thread-182922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:12:55.310 [DEBUG] [Thread-182922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:12:55.310 [DEBUG] [Thread-182922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:12:55.350 [DEBUG] [Thread-182922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:12:55.350 [DEBUG] [Thread-182922] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:12:55.354 [DEBUG] [Thread-182922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:12:55.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:12:55.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:12:55.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:12:55.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:12:55.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:12:55.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:12:55.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:12:55.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:12:55.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:12:55.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.300115 -999.00   +9.50  27.38     74   +5.10 1 2 1 1 1   888    0 4.91 14.65 ----- 24.5 27.4 175.6 40.7 15.7 -21.6 14.6 -22.8 13.2 -22.7 14.0 -24.4
2026-02-14T09:12:55.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:12:55.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:12:55.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.300115
2026-02-14T09:12:55.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:12:55.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:12:55.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:12:55.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:12:55.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:12:55.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:12:40', tmtdew=5.98, humidity=66.48, cloud=0.0, wind=41.42, temperature=10.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:12:09.936', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:12:55.378 [DEBUG] [Thread-182922] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:12:55.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-14T09:12:55.474 [DEBUG] [Thread-182925] [transport.py] [_log()] starting thread (client mode): 0xa2d55450
2026-02-14T09:12:55.474 [DEBUG] [Thread-182925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:12:55.489 [DEBUG] [Thread-182925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:12:55.489 [INFO] [Thread-182925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:12:55.497 [DEBUG] [Thread-182925] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:12:55.497 [DEBUG] [Thread-182925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:12:55.498 [DEBUG] [Thread-182925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:12:55.498 [DEBUG] [Thread-182925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:12:55.498 [DEBUG] [Thread-182925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:12:55.498 [DEBUG] [Thread-182925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:12:55.498 [DEBUG] [Thread-182925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:12:55.498 [DEBUG] [Thread-182925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:12:55.498 [DEBUG] [Thread-182925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:12:55.498 [DEBUG] [Thread-182925] [transport.py] [_log()] client lang: <none>
2026-02-14T09:12:55.498 [DEBUG] [Thread-182925] [transport.py] [_log()] server lang: <none>
2026-02-14T09:12:55.498 [DEBUG] [Thread-182925] [transport.py] [_log()] kex follows: False
2026-02-14T09:12:55.498 [DEBUG] [Thread-182925] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:12:55.498 [DEBUG] [Thread-182925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:12:55.498 [DEBUG] [Thread-182925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:12:55.498 [DEBUG] [Thread-182925] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:12:55.498 [DEBUG] [Thread-182925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:12:55.498 [DEBUG] [Thread-182925] [transport.py] [_log()] Compression: none
2026-02-14T09:12:55.498 [DEBUG] [Thread-182925] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:12:55.557 [DEBUG] [Thread-182925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:12:55.558 [DEBUG] [Thread-182925] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:12:55.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:12:55.559 [DEBUG] [Thread-182925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:12:55.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:12:55.616 [DEBUG] [Thread-182925] [transport.py] [_log()] userauth is OK
2026-02-14T09:12:55.616 [DEBUG] [Thread-182925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:12:55.616 [DEBUG] [Thread-182925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:12:55.616 [DEBUG] [Thread-182925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:12:55.616 [DEBUG] [Thread-182925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:12:55.641 [INFO] [Thread-182925] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:12:55.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-14T09:12:55.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:12:56.485 [DEBUG] [Thread-182925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:12:56.485 [DEBUG] [Thread-182925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:12:56.533 [DEBUG] [Thread-182925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:12:56.534 [DEBUG] [Thread-182925] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:12:56.543 [DEBUG] [Thread-182925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:12:56.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:12:56.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:12: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-14T09:12:56.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:12:56.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:12:56.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:12:56.580 [DEBUG] [Thread-182925] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:13:06.951 [DEBUG] [Thread-182927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:13:13.452 [DEBUG] [Thread-182928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:13:22.014 [DEBUG] [Thread-182929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:13:26.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:13:26.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:13:26.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-14T09:13:28.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 13, 15), 5.55, 68.49, 0.0, 32.64, 10.07, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:13:28.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:13:15
2026-02-14T09:13:28.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:13:29.012 [DEBUG] [Thread-182930] [transport.py] [_log()] starting thread (client mode): 0xa2d55f90
2026-02-14T09:13:29.012 [DEBUG] [Thread-182930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:13:29.034 [DEBUG] [Thread-182930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:13:29.034 [INFO] [Thread-182930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:13:29.037 [DEBUG] [Thread-182930] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:13:29.037 [DEBUG] [Thread-182930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:13:29.037 [DEBUG] [Thread-182930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:13:29.037 [DEBUG] [Thread-182930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:13:29.037 [DEBUG] [Thread-182930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:13:29.037 [DEBUG] [Thread-182930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:13:29.038 [DEBUG] [Thread-182930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:13:29.038 [DEBUG] [Thread-182930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:13:29.038 [DEBUG] [Thread-182930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:13:29.038 [DEBUG] [Thread-182930] [transport.py] [_log()] client lang: <none>
2026-02-14T09:13:29.038 [DEBUG] [Thread-182930] [transport.py] [_log()] server lang: <none>
2026-02-14T09:13:29.038 [DEBUG] [Thread-182930] [transport.py] [_log()] kex follows: False
2026-02-14T09:13:29.038 [DEBUG] [Thread-182930] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:13:29.038 [DEBUG] [Thread-182930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:13:29.038 [DEBUG] [Thread-182930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:13:29.038 [DEBUG] [Thread-182930] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:13:29.038 [DEBUG] [Thread-182930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:13:29.038 [DEBUG] [Thread-182930] [transport.py] [_log()] Compression: none
2026-02-14T09:13:29.038 [DEBUG] [Thread-182930] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:13:29.051 [DEBUG] [Thread-182930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:13:29.051 [DEBUG] [Thread-182930] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:13:29.052 [DEBUG] [Thread-182930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:13:29.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:13:29.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:13:29.054 [DEBUG] [Thread-182930] [transport.py] [_log()] userauth is OK
2026-02-14T09:13:29.054 [DEBUG] [Thread-182930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:13:29.054 [DEBUG] [Thread-182930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:13:29.054 [DEBUG] [Thread-182930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:13:29.054 [DEBUG] [Thread-182930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:13:29.071 [INFO] [Thread-182930] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:13:29.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:13:29.715 [DEBUG] [Thread-182930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:13:29.716 [DEBUG] [Thread-182930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:13:29.716 [DEBUG] [Thread-182930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:13:29.757 [DEBUG] [Thread-182930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:13:29.757 [DEBUG] [Thread-182930] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:13:29.760 [DEBUG] [Thread-182930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:13:29.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:13:29.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:13:29.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:13:29.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:13:29.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:13:29.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:13:29.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:13:29.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:13:29.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:13:29.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.300809 -999.00   +9.70  26.55     73   +5.20 1 2 1 1 1   888    0 4.80 11.27 ----- 26.3 26.6 151.4 35.6 15.4 -21.8 14.4 -22.5 13.2 -21.4 13.9 -22.6
2026-02-14T09:13:29.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:13:29.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:13:29.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.300809
2026-02-14T09:13:29.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:13:29.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:13:29.787 [DEBUG] [Thread-182930] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:13:29.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:13:29.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:13:29.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:13:29.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:13:15', tmtdew=5.55, humidity=68.49, cloud=0.0, wind=32.64, temperature=10.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:13:09.898', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:13:29.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T09:13:29.883 [DEBUG] [Thread-182933] [transport.py] [_log()] starting thread (client mode): 0xa2d56bc0
2026-02-14T09:13:29.884 [DEBUG] [Thread-182933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:13:29.898 [DEBUG] [Thread-182933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:13:29.898 [INFO] [Thread-182933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:13:29.905 [DEBUG] [Thread-182933] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:13:29.905 [DEBUG] [Thread-182933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:13:29.906 [DEBUG] [Thread-182933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:13:29.906 [DEBUG] [Thread-182933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:13:29.906 [DEBUG] [Thread-182933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:13:29.906 [DEBUG] [Thread-182933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:13:29.906 [DEBUG] [Thread-182933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:13:29.906 [DEBUG] [Thread-182933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:13:29.906 [DEBUG] [Thread-182933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:13:29.906 [DEBUG] [Thread-182933] [transport.py] [_log()] client lang: <none>
2026-02-14T09:13:29.906 [DEBUG] [Thread-182933] [transport.py] [_log()] server lang: <none>
2026-02-14T09:13:29.906 [DEBUG] [Thread-182933] [transport.py] [_log()] kex follows: False
2026-02-14T09:13:29.906 [DEBUG] [Thread-182933] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:13:29.906 [DEBUG] [Thread-182933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:13:29.906 [DEBUG] [Thread-182933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:13:29.906 [DEBUG] [Thread-182933] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:13:29.906 [DEBUG] [Thread-182933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:13:29.906 [DEBUG] [Thread-182933] [transport.py] [_log()] Compression: none
2026-02-14T09:13:29.906 [DEBUG] [Thread-182933] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:13:29.962 [DEBUG] [Thread-182933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:13:29.963 [DEBUG] [Thread-182933] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:13:29.963 [DEBUG] [Thread-182933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:13:29.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:13:29.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:13:30.018 [DEBUG] [Thread-182933] [transport.py] [_log()] userauth is OK
2026-02-14T09:13:30.019 [DEBUG] [Thread-182933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:13:30.019 [DEBUG] [Thread-182933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:13:30.019 [DEBUG] [Thread-182933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:13:30.019 [DEBUG] [Thread-182933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:13:30.037 [INFO] [Thread-182933] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:13:30.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-14T09:13:30.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:13:30.858 [DEBUG] [Thread-182933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:13:30.858 [DEBUG] [Thread-182933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:13:30.906 [DEBUG] [Thread-182933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:13:30.906 [DEBUG] [Thread-182933] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:13:30.914 [DEBUG] [Thread-182933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:13:30.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:13: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-14T09:13:30.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-14T09:13:30.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:13:30.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:13:30.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:13:30.948 [DEBUG] [Thread-182933] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:13:37.047 [DEBUG] [Thread-182935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:13:48.644 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:13:48.645 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:13:52.100 [DEBUG] [Thread-182936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:14:00.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:14:00.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:14:00.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:14:02.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 13, 50), 5.64, 68.06, 0.0, 36.28, 9.95, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:14:02.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:13:50
2026-02-14T09:14:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:14:03.410 [DEBUG] [Thread-182937] [transport.py] [_log()] starting thread (client mode): 0xa2d541f0
2026-02-14T09:14:03.410 [DEBUG] [Thread-182937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:14:03.429 [DEBUG] [Thread-182937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:14:03.429 [INFO] [Thread-182937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:14:03.431 [DEBUG] [Thread-182937] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:14:03.431 [DEBUG] [Thread-182937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:14:03.431 [DEBUG] [Thread-182937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:14:03.431 [DEBUG] [Thread-182937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:14:03.431 [DEBUG] [Thread-182937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:14:03.431 [DEBUG] [Thread-182937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:14:03.431 [DEBUG] [Thread-182937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:14:03.432 [DEBUG] [Thread-182937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:14:03.432 [DEBUG] [Thread-182937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:14:03.432 [DEBUG] [Thread-182937] [transport.py] [_log()] client lang: <none>
2026-02-14T09:14:03.432 [DEBUG] [Thread-182937] [transport.py] [_log()] server lang: <none>
2026-02-14T09:14:03.432 [DEBUG] [Thread-182937] [transport.py] [_log()] kex follows: False
2026-02-14T09:14:03.432 [DEBUG] [Thread-182937] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:14:03.432 [DEBUG] [Thread-182937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:14:03.432 [DEBUG] [Thread-182937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:14:03.432 [DEBUG] [Thread-182937] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:14:03.432 [DEBUG] [Thread-182937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:14:03.432 [DEBUG] [Thread-182937] [transport.py] [_log()] Compression: none
2026-02-14T09:14:03.432 [DEBUG] [Thread-182937] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:14:03.445 [DEBUG] [Thread-182937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:14:03.445 [DEBUG] [Thread-182937] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:14:03.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:14:03.446 [DEBUG] [Thread-182937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:14:03.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:14:03.448 [DEBUG] [Thread-182937] [transport.py] [_log()] userauth is OK
2026-02-14T09:14:03.448 [DEBUG] [Thread-182937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:14:03.448 [DEBUG] [Thread-182937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:14:03.448 [DEBUG] [Thread-182937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:14:03.448 [DEBUG] [Thread-182937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:14:03.484 [INFO] [Thread-182937] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:14:03.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:14:04.107 [DEBUG] [Thread-182937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:14:04.107 [DEBUG] [Thread-182937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:14:04.108 [DEBUG] [Thread-182937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:14:04.148 [DEBUG] [Thread-182937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:14:04.148 [DEBUG] [Thread-182937] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:14:04.151 [DEBUG] [Thread-182937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:14:04.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:14:04.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:14:04.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:14:04.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:14:04.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:14:04.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:14:04.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:14:04.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:14:04.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:14:04.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.301156 -999.00   +9.70  25.25     74   +5.30 1 1 1 1 1   888    0 4.84 9.36 ----- 23.8 25.2 186.8 33.8 14.9 -28.6 14.4 -25.2 13.1 -26.0 13.5 -27.8
2026-02-14T09:14:04.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:14:04.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:14:04.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.301156
2026-02-14T09:14:04.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:14:04.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:14:04.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:14:04.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:14:04.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:14:04.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:13:50', tmtdew=5.64, humidity=68.06, cloud=0.0, wind=36.28, temperature=9.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:13:39.878', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:14:04.177 [DEBUG] [Thread-182937] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:14:04.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-14T09:14:04.274 [DEBUG] [Thread-182940] [transport.py] [_log()] starting thread (client mode): 0xa575a980
2026-02-14T09:14:04.275 [DEBUG] [Thread-182940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:14:04.289 [DEBUG] [Thread-182940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:14:04.289 [INFO] [Thread-182940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:14:04.296 [DEBUG] [Thread-182940] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:14:04.297 [DEBUG] [Thread-182940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:14:04.297 [DEBUG] [Thread-182940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:14:04.297 [DEBUG] [Thread-182940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:14:04.297 [DEBUG] [Thread-182940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:14:04.298 [DEBUG] [Thread-182940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:14:04.298 [DEBUG] [Thread-182940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:14:04.298 [DEBUG] [Thread-182940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:14:04.298 [DEBUG] [Thread-182940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:14:04.298 [DEBUG] [Thread-182940] [transport.py] [_log()] client lang: <none>
2026-02-14T09:14:04.298 [DEBUG] [Thread-182940] [transport.py] [_log()] server lang: <none>
2026-02-14T09:14:04.298 [DEBUG] [Thread-182940] [transport.py] [_log()] kex follows: False
2026-02-14T09:14:04.298 [DEBUG] [Thread-182940] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:14:04.298 [DEBUG] [Thread-182940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:14:04.298 [DEBUG] [Thread-182940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:14:04.298 [DEBUG] [Thread-182940] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:14:04.298 [DEBUG] [Thread-182940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:14:04.298 [DEBUG] [Thread-182940] [transport.py] [_log()] Compression: none
2026-02-14T09:14:04.298 [DEBUG] [Thread-182940] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:14:04.355 [DEBUG] [Thread-182940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:14:04.355 [DEBUG] [Thread-182940] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:14:04.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:14:04.356 [DEBUG] [Thread-182940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:14:04.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:14:04.411 [DEBUG] [Thread-182940] [transport.py] [_log()] userauth is OK
2026-02-14T09:14:04.411 [DEBUG] [Thread-182940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:14:04.412 [DEBUG] [Thread-182940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:14:04.412 [DEBUG] [Thread-182940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:14:04.412 [DEBUG] [Thread-182940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:14:04.444 [INFO] [Thread-182940] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:14:04.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T09:14:04.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:14:05.258 [DEBUG] [Thread-182940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:14:05.259 [DEBUG] [Thread-182940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:14:05.306 [DEBUG] [Thread-182940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:14:05.306 [DEBUG] [Thread-182940] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:14:05.316 [DEBUG] [Thread-182940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:14:05.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:14:05.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-14T09:14:05.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:14:05.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:14:05.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:14:05.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:14:05.355 [DEBUG] [Thread-182940] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:14:07.138 [DEBUG] [Thread-182942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:14:13.496 [DEBUG] [Thread-182943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:14:22.193 [DEBUG] [Thread-182944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:14:35.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:14:35.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:14:35.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-14T09:14:37.231 [DEBUG] [Thread-182945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:14:37.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 14, 27), 5.57, 68.39, 0.0, 35.8, 9.87, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:14:37.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:14:27
2026-02-14T09:14:37.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:14:37.962 [DEBUG] [Thread-182946] [transport.py] [_log()] starting thread (client mode): 0xa57598d0
2026-02-14T09:14:37.962 [DEBUG] [Thread-182946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:14:37.982 [DEBUG] [Thread-182946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:14:37.982 [INFO] [Thread-182946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:14:37.985 [DEBUG] [Thread-182946] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:14:37.985 [DEBUG] [Thread-182946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:14:37.985 [DEBUG] [Thread-182946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:14:37.985 [DEBUG] [Thread-182946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:14:37.985 [DEBUG] [Thread-182946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:14:37.985 [DEBUG] [Thread-182946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:14:37.985 [DEBUG] [Thread-182946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:14:37.985 [DEBUG] [Thread-182946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:14:37.985 [DEBUG] [Thread-182946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:14:37.985 [DEBUG] [Thread-182946] [transport.py] [_log()] client lang: <none>
2026-02-14T09:14:37.985 [DEBUG] [Thread-182946] [transport.py] [_log()] server lang: <none>
2026-02-14T09:14:37.985 [DEBUG] [Thread-182946] [transport.py] [_log()] kex follows: False
2026-02-14T09:14:37.985 [DEBUG] [Thread-182946] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:14:37.985 [DEBUG] [Thread-182946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:14:37.986 [DEBUG] [Thread-182946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:14:37.986 [DEBUG] [Thread-182946] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:14:37.986 [DEBUG] [Thread-182946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:14:37.986 [DEBUG] [Thread-182946] [transport.py] [_log()] Compression: none
2026-02-14T09:14:37.986 [DEBUG] [Thread-182946] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:14:38.002 [DEBUG] [Thread-182946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:14:38.003 [DEBUG] [Thread-182946] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:14:38.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:14:38.004 [DEBUG] [Thread-182946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:14:38.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:14:38.006 [DEBUG] [Thread-182946] [transport.py] [_log()] userauth is OK
2026-02-14T09:14:38.006 [DEBUG] [Thread-182946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:14:38.006 [DEBUG] [Thread-182946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:14:38.007 [DEBUG] [Thread-182946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:14:38.007 [DEBUG] [Thread-182946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:14:38.030 [INFO] [Thread-182946] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:14:38.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:14:38.668 [DEBUG] [Thread-182946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:14:38.668 [DEBUG] [Thread-182946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:14:38.669 [DEBUG] [Thread-182946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:14:38.710 [DEBUG] [Thread-182946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:14:38.710 [DEBUG] [Thread-182946] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:14:38.713 [DEBUG] [Thread-182946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:14:38.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:14:38.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:14:38.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:14:38.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:14:38.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:14:38.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:14:38.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:14:38.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:14:38.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:14:38.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.301504 -999.00   +9.80  20.44     74   +5.40 1 1 1 1 1   888    0 4.72 7.38 ----- 31.2 20.4 169.8 33.1 15.1 -24.0 13.8 -25.5 12.9 -23.8 13.7 -25.7
2026-02-14T09:14:38.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:14:38.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:14:38.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.301504
2026-02-14T09:14:38.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:14:38.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:14:38.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:14:38.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:14:38.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:14:38.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:14:27', tmtdew=5.57, humidity=68.39, cloud=0.0, wind=35.8, temperature=9.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:14:09.946', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:14:38.740 [DEBUG] [Thread-182946] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:14:38.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-14T09:14:38.836 [DEBUG] [Thread-182949] [transport.py] [_log()] starting thread (client mode): 0xa2d55990
2026-02-14T09:14:38.836 [DEBUG] [Thread-182949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:14:38.855 [DEBUG] [Thread-182949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:14:38.856 [INFO] [Thread-182949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:14:38.864 [DEBUG] [Thread-182949] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:14:38.864 [DEBUG] [Thread-182949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:14:38.864 [DEBUG] [Thread-182949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:14:38.864 [DEBUG] [Thread-182949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:14:38.864 [DEBUG] [Thread-182949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:14:38.864 [DEBUG] [Thread-182949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:14:38.864 [DEBUG] [Thread-182949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:14:38.864 [DEBUG] [Thread-182949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:14:38.864 [DEBUG] [Thread-182949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:14:38.864 [DEBUG] [Thread-182949] [transport.py] [_log()] client lang: <none>
2026-02-14T09:14:38.865 [DEBUG] [Thread-182949] [transport.py] [_log()] server lang: <none>
2026-02-14T09:14:38.865 [DEBUG] [Thread-182949] [transport.py] [_log()] kex follows: False
2026-02-14T09:14:38.865 [DEBUG] [Thread-182949] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:14:38.865 [DEBUG] [Thread-182949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:14:38.865 [DEBUG] [Thread-182949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:14:38.865 [DEBUG] [Thread-182949] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:14:38.865 [DEBUG] [Thread-182949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:14:38.865 [DEBUG] [Thread-182949] [transport.py] [_log()] Compression: none
2026-02-14T09:14:38.865 [DEBUG] [Thread-182949] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:14:38.923 [DEBUG] [Thread-182949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:14:38.923 [DEBUG] [Thread-182949] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:14:38.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:14:38.925 [DEBUG] [Thread-182949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:14:38.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:14:38.982 [DEBUG] [Thread-182949] [transport.py] [_log()] userauth is OK
2026-02-14T09:14:38.982 [DEBUG] [Thread-182949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:14:38.983 [DEBUG] [Thread-182949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:14:38.983 [DEBUG] [Thread-182949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:14:38.983 [DEBUG] [Thread-182949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:14:39.002 [INFO] [Thread-182949] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:14:39.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-14T09:14:39.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:14:39.841 [DEBUG] [Thread-182949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:14:39.841 [DEBUG] [Thread-182949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:14:39.890 [DEBUG] [Thread-182949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:14:39.890 [DEBUG] [Thread-182949] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:14:39.899 [DEBUG] [Thread-182949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:14:39.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:14:39.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-14T09:14:39.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-14T09:14:39.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:14:39.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:14:39.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:14:39.937 [DEBUG] [Thread-182949] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:14:48.788 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:14:48.790 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:14:52.268 [DEBUG] [Thread-182951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:15:07.320 [DEBUG] [Thread-182952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:15:09.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:15:09.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:15:09.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-14T09:15:11.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 15, 3), 5.54, 68.51, 0.0, 40.49, 9.92, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:15:11.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:15:03
2026-02-14T09:15:12.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:15:12.250 [DEBUG] [Thread-182953] [transport.py] [_log()] starting thread (client mode): 0xa2d19f00
2026-02-14T09:15:12.250 [DEBUG] [Thread-182953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:15:12.269 [DEBUG] [Thread-182953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:15:12.269 [INFO] [Thread-182953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:15:12.272 [DEBUG] [Thread-182953] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:15:12.272 [DEBUG] [Thread-182953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:15:12.272 [DEBUG] [Thread-182953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:15:12.273 [DEBUG] [Thread-182953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:15:12.273 [DEBUG] [Thread-182953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:15:12.273 [DEBUG] [Thread-182953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:15:12.273 [DEBUG] [Thread-182953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:15:12.273 [DEBUG] [Thread-182953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:15:12.273 [DEBUG] [Thread-182953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:15:12.273 [DEBUG] [Thread-182953] [transport.py] [_log()] client lang: <none>
2026-02-14T09:15:12.273 [DEBUG] [Thread-182953] [transport.py] [_log()] server lang: <none>
2026-02-14T09:15:12.273 [DEBUG] [Thread-182953] [transport.py] [_log()] kex follows: False
2026-02-14T09:15:12.273 [DEBUG] [Thread-182953] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:15:12.273 [DEBUG] [Thread-182953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:15:12.273 [DEBUG] [Thread-182953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:15:12.273 [DEBUG] [Thread-182953] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:15:12.273 [DEBUG] [Thread-182953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:15:12.273 [DEBUG] [Thread-182953] [transport.py] [_log()] Compression: none
2026-02-14T09:15:12.273 [DEBUG] [Thread-182953] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:15:12.291 [DEBUG] [Thread-182953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:15:12.292 [DEBUG] [Thread-182953] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:15:12.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:15:12.293 [DEBUG] [Thread-182953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:15:12.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:15:12.295 [DEBUG] [Thread-182953] [transport.py] [_log()] userauth is OK
2026-02-14T09:15:12.296 [DEBUG] [Thread-182953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:15:12.296 [DEBUG] [Thread-182953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:15:12.296 [DEBUG] [Thread-182953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:15:12.296 [DEBUG] [Thread-182953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:15:12.319 [INFO] [Thread-182953] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:15:12.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:15:12.932 [DEBUG] [Thread-182953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:15:12.932 [DEBUG] [Thread-182953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:15:12.933 [DEBUG] [Thread-182953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:15:12.973 [DEBUG] [Thread-182953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:15:12.973 [DEBUG] [Thread-182953] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:15:12.977 [DEBUG] [Thread-182953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:15:12.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:15:12.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:15:12.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:15:12.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:15:12.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:15:12.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:15:12.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:15:12.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:15:12.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:15:12.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.301851 -999.00   +9.70  32.93     73   +5.30 1 1 2 1 1   888    0 4.65 5.08 ----- 31.2 32.9 185.8 40.5 14.7 -22.5 13.8 -26.5 12.9 -26.0 13.5 -22.5
2026-02-14T09:15:12.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:15:12.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:15:12.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.301851
2026-02-14T09:15:12.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:15:12.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:15:12.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:15:12.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:15:12.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:15:12.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:15:03', tmtdew=5.54, humidity=68.51, cloud=0.0, wind=40.49, temperature=9.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:14:39.926', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:15:13.000 [DEBUG] [Thread-182953] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:15:13.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-14T09:15:13.097 [DEBUG] [Thread-182956] [transport.py] [_log()] starting thread (client mode): 0xa2d19e70
2026-02-14T09:15:13.097 [DEBUG] [Thread-182956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:15:13.111 [DEBUG] [Thread-182956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:15:13.111 [INFO] [Thread-182956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:15:13.119 [DEBUG] [Thread-182956] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:15:13.119 [DEBUG] [Thread-182956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:15:13.119 [DEBUG] [Thread-182956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:15:13.119 [DEBUG] [Thread-182956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:15:13.119 [DEBUG] [Thread-182956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:15:13.119 [DEBUG] [Thread-182956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:15:13.119 [DEBUG] [Thread-182956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:15:13.119 [DEBUG] [Thread-182956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:15:13.119 [DEBUG] [Thread-182956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:15:13.119 [DEBUG] [Thread-182956] [transport.py] [_log()] client lang: <none>
2026-02-14T09:15:13.119 [DEBUG] [Thread-182956] [transport.py] [_log()] server lang: <none>
2026-02-14T09:15:13.127 [DEBUG] [Thread-182956] [transport.py] [_log()] kex follows: False
2026-02-14T09:15:13.128 [DEBUG] [Thread-182956] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:15:13.128 [DEBUG] [Thread-182956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:15:13.128 [DEBUG] [Thread-182956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:15:13.128 [DEBUG] [Thread-182956] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:15:13.128 [DEBUG] [Thread-182956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:15:13.128 [DEBUG] [Thread-182956] [transport.py] [_log()] Compression: none
2026-02-14T09:15:13.128 [DEBUG] [Thread-182956] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:15:13.179 [DEBUG] [Thread-182956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:15:13.180 [DEBUG] [Thread-182956] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:15:13.180 [DEBUG] [Thread-182956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:15:13.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:15:13.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:15:13.237 [DEBUG] [Thread-182956] [transport.py] [_log()] userauth is OK
2026-02-14T09:15:13.238 [DEBUG] [Thread-182956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:15:13.238 [DEBUG] [Thread-182956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:15:13.238 [DEBUG] [Thread-182956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:15:13.238 [DEBUG] [Thread-182956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:15:13.258 [INFO] [Thread-182956] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:15:13.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-14T09:15:13.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:15:13.531 [DEBUG] [Thread-182958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:15:14.067 [DEBUG] [Thread-182956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:15:14.067 [DEBUG] [Thread-182956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:15:14.115 [DEBUG] [Thread-182956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:15:14.116 [DEBUG] [Thread-182956] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:15:14.125 [DEBUG] [Thread-182956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:15:14.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:15:14.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-14T09:15:14.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-14T09:15:14.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:15:14.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:15:14.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:15:14.162 [DEBUG] [Thread-182956] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:15:22.356 [DEBUG] [Thread-182959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:15:37.410 [DEBUG] [Thread-182960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:15:44.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:15:44.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:15:44.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:15:46.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 15, 3), 5.54, 68.51, 0.0, 40.49, 9.92, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:15:46.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:15:03
2026-02-14T09:15:46.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:15:47.062 [DEBUG] [Thread-182961] [transport.py] [_log()] starting thread (client mode): 0xa2d54700
2026-02-14T09:15:47.062 [DEBUG] [Thread-182961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:15:47.082 [DEBUG] [Thread-182961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:15:47.082 [INFO] [Thread-182961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:15:47.085 [DEBUG] [Thread-182961] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:15:47.085 [DEBUG] [Thread-182961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:15:47.085 [DEBUG] [Thread-182961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:15:47.085 [DEBUG] [Thread-182961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:15:47.085 [DEBUG] [Thread-182961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:15:47.085 [DEBUG] [Thread-182961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:15:47.085 [DEBUG] [Thread-182961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:15:47.085 [DEBUG] [Thread-182961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:15:47.085 [DEBUG] [Thread-182961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:15:47.086 [DEBUG] [Thread-182961] [transport.py] [_log()] client lang: <none>
2026-02-14T09:15:47.086 [DEBUG] [Thread-182961] [transport.py] [_log()] server lang: <none>
2026-02-14T09:15:47.086 [DEBUG] [Thread-182961] [transport.py] [_log()] kex follows: False
2026-02-14T09:15:47.086 [DEBUG] [Thread-182961] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:15:47.086 [DEBUG] [Thread-182961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:15:47.086 [DEBUG] [Thread-182961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:15:47.086 [DEBUG] [Thread-182961] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:15:47.086 [DEBUG] [Thread-182961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:15:47.086 [DEBUG] [Thread-182961] [transport.py] [_log()] Compression: none
2026-02-14T09:15:47.086 [DEBUG] [Thread-182961] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:15:47.103 [DEBUG] [Thread-182961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:15:47.103 [DEBUG] [Thread-182961] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:15:47.104 [DEBUG] [Thread-182961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:15:47.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:15:47.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:15:47.105 [DEBUG] [Thread-182961] [transport.py] [_log()] userauth is OK
2026-02-14T09:15:47.106 [DEBUG] [Thread-182961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:15:47.106 [DEBUG] [Thread-182961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:15:47.106 [DEBUG] [Thread-182961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:15:47.106 [DEBUG] [Thread-182961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:15:47.125 [INFO] [Thread-182961] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:15:47.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:15:47.967 [DEBUG] [Thread-182961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:15:47.967 [DEBUG] [Thread-182961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:15:47.968 [DEBUG] [Thread-182961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:15:48.008 [DEBUG] [Thread-182961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:15:48.008 [DEBUG] [Thread-182961] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:15:48.011 [DEBUG] [Thread-182961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:15:48.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:15:48.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:15:48.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:15:48.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:15:48.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:15:48.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:15:48.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:15:48.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:15:48.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:15:48.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.302198 -999.00   +9.80  22.95     73   +5.40 1 2 1 1 1   888    0 4.68 3.45 ----- 21.7 22.9 162.6 41.2 14.7 -22.2 13.8 -21.7 12.9 -23.5 13.6 -22.1
2026-02-14T09:15:48.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:15:48.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:15:48.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.302198
2026-02-14T09:15:48.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:15:48.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:15:48.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:15:48.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:15:48.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:15:48.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:15:03', tmtdew=5.54, humidity=68.51, cloud=0.0, wind=40.49, temperature=9.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:15:09.907', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:15:48.040 [DEBUG] [Thread-182961] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:15:48.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T09:15:48.135 [DEBUG] [Thread-182964] [transport.py] [_log()] starting thread (client mode): 0xa2d57fd0
2026-02-14T09:15:48.135 [DEBUG] [Thread-182964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:15:48.149 [DEBUG] [Thread-182964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:15:48.149 [INFO] [Thread-182964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:15:48.156 [DEBUG] [Thread-182964] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:15:48.157 [DEBUG] [Thread-182964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:15:48.157 [DEBUG] [Thread-182964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:15:48.157 [DEBUG] [Thread-182964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:15:48.157 [DEBUG] [Thread-182964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:15:48.157 [DEBUG] [Thread-182964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:15:48.157 [DEBUG] [Thread-182964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:15:48.157 [DEBUG] [Thread-182964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:15:48.157 [DEBUG] [Thread-182964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:15:48.158 [DEBUG] [Thread-182964] [transport.py] [_log()] client lang: <none>
2026-02-14T09:15:48.158 [DEBUG] [Thread-182964] [transport.py] [_log()] server lang: <none>
2026-02-14T09:15:48.158 [DEBUG] [Thread-182964] [transport.py] [_log()] kex follows: False
2026-02-14T09:15:48.158 [DEBUG] [Thread-182964] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:15:48.158 [DEBUG] [Thread-182964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:15:48.158 [DEBUG] [Thread-182964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:15:48.158 [DEBUG] [Thread-182964] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:15:48.159 [DEBUG] [Thread-182964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:15:48.159 [DEBUG] [Thread-182964] [transport.py] [_log()] Compression: none
2026-02-14T09:15:48.159 [DEBUG] [Thread-182964] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:15:48.217 [DEBUG] [Thread-182964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:15:48.217 [DEBUG] [Thread-182964] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:15:48.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:15:48.219 [DEBUG] [Thread-182964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:15:48.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:15:48.273 [DEBUG] [Thread-182964] [transport.py] [_log()] userauth is OK
2026-02-14T09:15:48.273 [DEBUG] [Thread-182964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:15:48.273 [DEBUG] [Thread-182964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:15:48.273 [DEBUG] [Thread-182964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:15:48.274 [DEBUG] [Thread-182964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:15:48.292 [INFO] [Thread-182964] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:15:48.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-14T09:15:48.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:15:48.930 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:15:48.931 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:15:49.151 [DEBUG] [Thread-182964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:15:49.152 [DEBUG] [Thread-182964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:15:49.200 [DEBUG] [Thread-182964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:15:49.200 [DEBUG] [Thread-182964] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:15:49.209 [DEBUG] [Thread-182964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:15:49.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:15:49.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-14T09:15:49.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-14T09:15:49.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:15:49.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:15:49.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:15:49.249 [DEBUG] [Thread-182964] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:15:52.447 [DEBUG] [Thread-182966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:16:07.500 [DEBUG] [Thread-182967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:16:13.572 [DEBUG] [Thread-182968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:16:19.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:16:19.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:16:19.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-14T09:16:21.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 15, 38), 6.24, 65.31, 0.0, 36.27, 10.84, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:16:21.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:15:38
2026-02-14T09:16:22.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:16:22.489 [DEBUG] [Thread-182969] [transport.py] [_log()] starting thread (client mode): 0xa5759780
2026-02-14T09:16:22.490 [DEBUG] [Thread-182969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:16:22.510 [DEBUG] [Thread-182969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:16:22.510 [INFO] [Thread-182969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:16:22.513 [DEBUG] [Thread-182969] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:16:22.513 [DEBUG] [Thread-182969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:16:22.513 [DEBUG] [Thread-182969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:16:22.513 [DEBUG] [Thread-182969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:16:22.513 [DEBUG] [Thread-182969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:16:22.513 [DEBUG] [Thread-182969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:16:22.513 [DEBUG] [Thread-182969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:16:22.513 [DEBUG] [Thread-182969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:16:22.513 [DEBUG] [Thread-182969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:16:22.513 [DEBUG] [Thread-182969] [transport.py] [_log()] client lang: <none>
2026-02-14T09:16:22.514 [DEBUG] [Thread-182969] [transport.py] [_log()] server lang: <none>
2026-02-14T09:16:22.514 [DEBUG] [Thread-182969] [transport.py] [_log()] kex follows: False
2026-02-14T09:16:22.514 [DEBUG] [Thread-182969] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:16:22.514 [DEBUG] [Thread-182969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:16:22.514 [DEBUG] [Thread-182969] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:16:22.514 [DEBUG] [Thread-182969] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:16:22.514 [DEBUG] [Thread-182969] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:16:22.514 [DEBUG] [Thread-182969] [transport.py] [_log()] Compression: none
2026-02-14T09:16:22.514 [DEBUG] [Thread-182969] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:16:22.535 [DEBUG] [Thread-182969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:16:22.535 [DEBUG] [Thread-182969] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:16:22.536 [DEBUG] [Thread-182969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:16:22.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:16:22.537 [DEBUG] [Thread-182971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:16:22.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:16:22.539 [DEBUG] [Thread-182969] [transport.py] [_log()] userauth is OK
2026-02-14T09:16:22.539 [DEBUG] [Thread-182969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:16:22.540 [DEBUG] [Thread-182969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:16:22.540 [DEBUG] [Thread-182969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:16:22.540 [DEBUG] [Thread-182969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:16:22.576 [INFO] [Thread-182969] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:16:22.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:16:23.175 [DEBUG] [Thread-182969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:16:23.175 [DEBUG] [Thread-182969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:16:23.175 [DEBUG] [Thread-182969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:16:23.217 [DEBUG] [Thread-182969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:16:23.217 [DEBUG] [Thread-182969] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:16:23.220 [DEBUG] [Thread-182969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:16:23.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:16:23.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:16:23.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:16:23.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:16:23.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:16:23.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:16:23.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:16:23.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:16:23.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:16:23.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.302545 -999.00   +9.90  30.59     72   +5.30 1 2 2 1 1   888    0 4.66 3.00 ----- 32.7 30.6 162.8 39.6 15.0 -22.5 14.1 -20.9 13.1 -20.7 13.8 -24.3
2026-02-14T09:16:23.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:16:23.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:16:23.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.302545
2026-02-14T09:16:23.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:16:23.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:16:23.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:16:23.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:16:23.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:16:23.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:15:38', tmtdew=6.24, humidity=65.31, cloud=0.0, wind=36.27, temperature=10.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:15:39.888', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:16:23.242 [DEBUG] [Thread-182969] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:16:23.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-14T09:16:23.336 [DEBUG] [Thread-182973] [transport.py] [_log()] starting thread (client mode): 0xa2d57f40
2026-02-14T09:16:23.336 [DEBUG] [Thread-182973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:16:23.351 [DEBUG] [Thread-182973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:16:23.352 [INFO] [Thread-182973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:16:23.359 [DEBUG] [Thread-182973] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:16:23.360 [DEBUG] [Thread-182973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:16:23.360 [DEBUG] [Thread-182973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:16:23.360 [DEBUG] [Thread-182973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:16:23.360 [DEBUG] [Thread-182973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:16:23.360 [DEBUG] [Thread-182973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:16:23.360 [DEBUG] [Thread-182973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:16:23.360 [DEBUG] [Thread-182973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:16:23.360 [DEBUG] [Thread-182973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:16:23.360 [DEBUG] [Thread-182973] [transport.py] [_log()] client lang: <none>
2026-02-14T09:16:23.360 [DEBUG] [Thread-182973] [transport.py] [_log()] server lang: <none>
2026-02-14T09:16:23.360 [DEBUG] [Thread-182973] [transport.py] [_log()] kex follows: False
2026-02-14T09:16:23.360 [DEBUG] [Thread-182973] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:16:23.360 [DEBUG] [Thread-182973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:16:23.360 [DEBUG] [Thread-182973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:16:23.360 [DEBUG] [Thread-182973] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:16:23.360 [DEBUG] [Thread-182973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:16:23.360 [DEBUG] [Thread-182973] [transport.py] [_log()] Compression: none
2026-02-14T09:16:23.360 [DEBUG] [Thread-182973] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:16:23.416 [DEBUG] [Thread-182973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:16:23.417 [DEBUG] [Thread-182973] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:16:23.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:16:23.418 [DEBUG] [Thread-182973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:16:23.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:16:23.473 [DEBUG] [Thread-182973] [transport.py] [_log()] userauth is OK
2026-02-14T09:16:23.473 [DEBUG] [Thread-182973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:16:23.473 [DEBUG] [Thread-182973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:16:23.473 [DEBUG] [Thread-182973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:16:23.473 [DEBUG] [Thread-182973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:16:23.491 [INFO] [Thread-182973] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:16:23.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-14T09:16:23.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:16:24.335 [DEBUG] [Thread-182973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:16:24.335 [DEBUG] [Thread-182973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:16:24.383 [DEBUG] [Thread-182973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:16:24.383 [DEBUG] [Thread-182973] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:16:24.392 [DEBUG] [Thread-182973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:16:24.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:16:24.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-14T09:16:24.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-14T09:16:24.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:16:24.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:16:24.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:16:24.426 [DEBUG] [Thread-182973] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:16:37.573 [DEBUG] [Thread-182975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:16:49.080 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:16:49.081 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:16:52.628 [DEBUG] [Thread-182976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:16:54.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:16:54.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:16:54.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:16:56.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 16, 14), 5.54, 68.37, 0.0, 36.58, 9.93, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:16:56.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:16:14
2026-02-14T09:16:56.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:16:56.952 [DEBUG] [Thread-182977] [transport.py] [_log()] starting thread (client mode): 0xa575a350
2026-02-14T09:16:56.953 [DEBUG] [Thread-182977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:16:56.973 [DEBUG] [Thread-182977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:16:56.973 [INFO] [Thread-182977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:16:56.974 [DEBUG] [Thread-182977] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:16:56.974 [DEBUG] [Thread-182977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:16:56.974 [DEBUG] [Thread-182977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:16:56.974 [DEBUG] [Thread-182977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:16:56.974 [DEBUG] [Thread-182977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:16:56.974 [DEBUG] [Thread-182977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:16:56.975 [DEBUG] [Thread-182977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:16:56.975 [DEBUG] [Thread-182977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:16:56.975 [DEBUG] [Thread-182977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:16:56.975 [DEBUG] [Thread-182977] [transport.py] [_log()] client lang: <none>
2026-02-14T09:16:56.975 [DEBUG] [Thread-182977] [transport.py] [_log()] server lang: <none>
2026-02-14T09:16:56.975 [DEBUG] [Thread-182977] [transport.py] [_log()] kex follows: False
2026-02-14T09:16:56.975 [DEBUG] [Thread-182977] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:16:56.975 [DEBUG] [Thread-182977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:16:56.975 [DEBUG] [Thread-182977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:16:56.975 [DEBUG] [Thread-182977] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:16:56.975 [DEBUG] [Thread-182977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:16:56.975 [DEBUG] [Thread-182977] [transport.py] [_log()] Compression: none
2026-02-14T09:16:56.975 [DEBUG] [Thread-182977] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:16:56.985 [DEBUG] [Thread-182977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:16:56.986 [DEBUG] [Thread-182977] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:16:56.987 [DEBUG] [Thread-182977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:16:56.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:16:56.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:16:56.989 [DEBUG] [Thread-182977] [transport.py] [_log()] userauth is OK
2026-02-14T09:16:56.989 [DEBUG] [Thread-182977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:16:56.989 [DEBUG] [Thread-182977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:16:56.989 [DEBUG] [Thread-182977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:16:56.989 [DEBUG] [Thread-182977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:16:57.014 [INFO] [Thread-182977] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:16:57.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:16:57.628 [DEBUG] [Thread-182977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:16:57.628 [DEBUG] [Thread-182977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:16:57.629 [DEBUG] [Thread-182977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:16:57.670 [DEBUG] [Thread-182977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:16:57.670 [DEBUG] [Thread-182977] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:16:57.673 [DEBUG] [Thread-182977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:16:57.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:16:57.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:16:57.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:16:57.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:16:57.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:16:57.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:16:57.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:16:57.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:16:57.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:16:57.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.302893 -999.00  +10.00  35.64     72   +5.30 1 2 2 1 1   888    0 4.70 3.69 ----- 33.1 35.6 167.8 45.1 14.9 -21.1 14.2 -21.7 13.1 -21.0 13.8 -21.4
2026-02-14T09:16:57.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:16:57.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:16:57.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.302893
2026-02-14T09:16:57.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:16:57.701 [DEBUG] [Thread-182977] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:16:57.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:16:57.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:16:57.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:16:57.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:16:57.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:16:14', tmtdew=5.54, humidity=68.37, cloud=0.0, wind=36.58, temperature=9.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:16:09.955', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:16:57.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-14T09:16:57.796 [DEBUG] [Thread-182980] [transport.py] [_log()] starting thread (client mode): 0xa57406a0
2026-02-14T09:16:57.796 [DEBUG] [Thread-182980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:16:57.810 [DEBUG] [Thread-182980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:16:57.810 [INFO] [Thread-182980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:16:57.817 [DEBUG] [Thread-182980] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:16:57.817 [DEBUG] [Thread-182980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:16:57.818 [DEBUG] [Thread-182980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:16:57.818 [DEBUG] [Thread-182980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:16:57.818 [DEBUG] [Thread-182980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:16:57.818 [DEBUG] [Thread-182980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:16:57.818 [DEBUG] [Thread-182980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:16:57.818 [DEBUG] [Thread-182980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:16:57.818 [DEBUG] [Thread-182980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:16:57.818 [DEBUG] [Thread-182980] [transport.py] [_log()] client lang: <none>
2026-02-14T09:16:57.818 [DEBUG] [Thread-182980] [transport.py] [_log()] server lang: <none>
2026-02-14T09:16:57.818 [DEBUG] [Thread-182980] [transport.py] [_log()] kex follows: False
2026-02-14T09:16:57.819 [DEBUG] [Thread-182980] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:16:57.819 [DEBUG] [Thread-182980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:16:57.819 [DEBUG] [Thread-182980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:16:57.819 [DEBUG] [Thread-182980] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:16:57.819 [DEBUG] [Thread-182980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:16:57.819 [DEBUG] [Thread-182980] [transport.py] [_log()] Compression: none
2026-02-14T09:16:57.819 [DEBUG] [Thread-182980] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:16:57.876 [DEBUG] [Thread-182980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:16:57.876 [DEBUG] [Thread-182980] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:16:57.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:16:57.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:16:57.879 [DEBUG] [Thread-182980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:16:57.932 [DEBUG] [Thread-182980] [transport.py] [_log()] userauth is OK
2026-02-14T09:16:57.932 [DEBUG] [Thread-182980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:16:57.933 [DEBUG] [Thread-182980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:16:57.933 [DEBUG] [Thread-182980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:16:57.933 [DEBUG] [Thread-182980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:16:57.952 [INFO] [Thread-182980] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:16:57.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-14T09:16:57.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:16:58.776 [DEBUG] [Thread-182980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:16:58.776 [DEBUG] [Thread-182980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:16:58.825 [DEBUG] [Thread-182980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:16:58.825 [DEBUG] [Thread-182980] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:16:58.834 [DEBUG] [Thread-182980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:16:58.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:16:58.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:16:58.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-14T09:16:58.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:16:58.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:16:58.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:16:58.871 [DEBUG] [Thread-182980] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:17:07.661 [DEBUG] [Thread-182982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:17:13.612 [DEBUG] [Thread-182983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:17:22.710 [DEBUG] [Thread-182984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:17:28.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:17:28.865 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:17:28.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:17:30.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 16, 50), 6.07, 65.97, 0.0, 38.15, 10.27, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:17:30.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:16:50
2026-02-14T09:17:31.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:17:31.463 [DEBUG] [Thread-182985] [transport.py] [_log()] starting thread (client mode): 0xa57596c0
2026-02-14T09:17:31.464 [DEBUG] [Thread-182985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:17:31.483 [DEBUG] [Thread-182985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:17:31.483 [INFO] [Thread-182985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:17:31.486 [DEBUG] [Thread-182985] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:17:31.487 [DEBUG] [Thread-182985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:17:31.487 [DEBUG] [Thread-182985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:17:31.487 [DEBUG] [Thread-182985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:17:31.487 [DEBUG] [Thread-182985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:17:31.487 [DEBUG] [Thread-182985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:17:31.487 [DEBUG] [Thread-182985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:17:31.487 [DEBUG] [Thread-182985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:17:31.487 [DEBUG] [Thread-182985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:17:31.487 [DEBUG] [Thread-182985] [transport.py] [_log()] client lang: <none>
2026-02-14T09:17:31.487 [DEBUG] [Thread-182985] [transport.py] [_log()] server lang: <none>
2026-02-14T09:17:31.487 [DEBUG] [Thread-182985] [transport.py] [_log()] kex follows: False
2026-02-14T09:17:31.487 [DEBUG] [Thread-182985] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:17:31.487 [DEBUG] [Thread-182985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:17:31.488 [DEBUG] [Thread-182985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:17:31.488 [DEBUG] [Thread-182985] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:17:31.488 [DEBUG] [Thread-182985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:17:31.488 [DEBUG] [Thread-182985] [transport.py] [_log()] Compression: none
2026-02-14T09:17:31.488 [DEBUG] [Thread-182985] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:17:31.508 [DEBUG] [Thread-182985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:17:31.509 [DEBUG] [Thread-182985] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:17:31.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:17:31.510 [DEBUG] [Thread-182985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:17:31.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:17:31.512 [DEBUG] [Thread-182985] [transport.py] [_log()] userauth is OK
2026-02-14T09:17:31.513 [DEBUG] [Thread-182985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:17:31.513 [DEBUG] [Thread-182985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:17:31.513 [DEBUG] [Thread-182985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:17:31.513 [DEBUG] [Thread-182985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:17:31.549 [INFO] [Thread-182985] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:17:31.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:17:32.193 [DEBUG] [Thread-182985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:17:32.194 [DEBUG] [Thread-182985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:17:32.194 [DEBUG] [Thread-182985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:17:32.234 [DEBUG] [Thread-182985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:17:32.235 [DEBUG] [Thread-182985] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:17:32.238 [DEBUG] [Thread-182985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:17:32.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:17:32.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:17:32.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:17:32.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:17:32.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:17:32.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:17:32.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:17:32.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:17:32.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:17:32.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.303587 -999.00  +10.10  29.11     71   +5.20 1 2 1 1 1   888    0 4.78 7.61 ----- 32.4 29.1 157.0 36.4 15.2 -27.3 14.4 -20.5 13.3 -20.8 13.8 -24.6
2026-02-14T09:17:32.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:17:32.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:17:32.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.303587
2026-02-14T09:17:32.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:17:32.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:17:32.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:17:32.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:17:32.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:17:32.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:16:50', tmtdew=6.07, humidity=65.97, cloud=0.0, wind=38.15, temperature=10.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:17:09.917', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:17:32.266 [DEBUG] [Thread-182985] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:17:32.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-14T09:17:32.364 [DEBUG] [Thread-182988] [transport.py] [_log()] starting thread (client mode): 0xa2d1a290
2026-02-14T09:17:32.364 [DEBUG] [Thread-182988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:17:32.379 [DEBUG] [Thread-182988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:17:32.379 [INFO] [Thread-182988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:17:32.388 [DEBUG] [Thread-182988] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:17:32.388 [DEBUG] [Thread-182988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:17:32.388 [DEBUG] [Thread-182988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:17:32.388 [DEBUG] [Thread-182988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:17:32.388 [DEBUG] [Thread-182988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:17:32.388 [DEBUG] [Thread-182988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:17:32.388 [DEBUG] [Thread-182988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:17:32.388 [DEBUG] [Thread-182988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:17:32.389 [DEBUG] [Thread-182988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:17:32.389 [DEBUG] [Thread-182988] [transport.py] [_log()] client lang: <none>
2026-02-14T09:17:32.389 [DEBUG] [Thread-182988] [transport.py] [_log()] server lang: <none>
2026-02-14T09:17:32.389 [DEBUG] [Thread-182988] [transport.py] [_log()] kex follows: False
2026-02-14T09:17:32.389 [DEBUG] [Thread-182988] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:17:32.389 [DEBUG] [Thread-182988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:17:32.389 [DEBUG] [Thread-182988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:17:32.389 [DEBUG] [Thread-182988] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:17:32.389 [DEBUG] [Thread-182988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:17:32.389 [DEBUG] [Thread-182988] [transport.py] [_log()] Compression: none
2026-02-14T09:17:32.389 [DEBUG] [Thread-182988] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:17:32.447 [DEBUG] [Thread-182988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:17:32.448 [DEBUG] [Thread-182988] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:17:32.448 [DEBUG] [Thread-182988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:17:32.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:17:32.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:17:32.504 [DEBUG] [Thread-182988] [transport.py] [_log()] userauth is OK
2026-02-14T09:17:32.504 [DEBUG] [Thread-182988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:17:32.504 [DEBUG] [Thread-182988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:17:32.504 [DEBUG] [Thread-182988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:17:32.504 [DEBUG] [Thread-182988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:17:32.522 [INFO] [Thread-182988] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:17:32.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-14T09:17:32.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:17:33.331 [DEBUG] [Thread-182988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:17:33.331 [DEBUG] [Thread-182988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:17:33.379 [DEBUG] [Thread-182988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:17:33.379 [DEBUG] [Thread-182988] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:17:33.388 [DEBUG] [Thread-182988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:17:33.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:17:33.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:17:33.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-14T09:17:33.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:17:33.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:17:33.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:17:33.427 [DEBUG] [Thread-182988] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:17:37.743 [DEBUG] [Thread-182990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:17:49.222 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:17:49.223 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:17:52.792 [DEBUG] [Thread-182991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:18:03.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:18:03.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:18:03.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-14T09:18:05.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 17, 26), 6.24, 65.23, 0.0, 38.52, 10.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:18:05.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:17:26
2026-02-14T09:18:06.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:18:06.185 [DEBUG] [Thread-182992] [transport.py] [_log()] starting thread (client mode): 0xa2db5ff0
2026-02-14T09:18:06.185 [DEBUG] [Thread-182992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:18:06.206 [DEBUG] [Thread-182992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:18:06.206 [INFO] [Thread-182992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:18:06.209 [DEBUG] [Thread-182992] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:18:06.209 [DEBUG] [Thread-182992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:18:06.209 [DEBUG] [Thread-182992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:18:06.209 [DEBUG] [Thread-182992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:18:06.210 [DEBUG] [Thread-182992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:18:06.210 [DEBUG] [Thread-182992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:18:06.210 [DEBUG] [Thread-182992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:18:06.210 [DEBUG] [Thread-182992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:18:06.210 [DEBUG] [Thread-182992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:18:06.210 [DEBUG] [Thread-182992] [transport.py] [_log()] client lang: <none>
2026-02-14T09:18:06.210 [DEBUG] [Thread-182992] [transport.py] [_log()] server lang: <none>
2026-02-14T09:18:06.210 [DEBUG] [Thread-182992] [transport.py] [_log()] kex follows: False
2026-02-14T09:18:06.210 [DEBUG] [Thread-182992] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:18:06.210 [DEBUG] [Thread-182992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:18:06.210 [DEBUG] [Thread-182992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:18:06.210 [DEBUG] [Thread-182992] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:18:06.210 [DEBUG] [Thread-182992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:18:06.210 [DEBUG] [Thread-182992] [transport.py] [_log()] Compression: none
2026-02-14T09:18:06.210 [DEBUG] [Thread-182992] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:18:06.229 [DEBUG] [Thread-182992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:18:06.230 [DEBUG] [Thread-182992] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:18:06.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:18:06.231 [DEBUG] [Thread-182992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:18:06.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:18:06.233 [DEBUG] [Thread-182992] [transport.py] [_log()] userauth is OK
2026-02-14T09:18:06.233 [DEBUG] [Thread-182992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:18:06.234 [DEBUG] [Thread-182992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:18:06.234 [DEBUG] [Thread-182992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:18:06.234 [DEBUG] [Thread-182992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:18:06.257 [INFO] [Thread-182992] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:18:06.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:18:06.927 [DEBUG] [Thread-182992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:18:06.927 [DEBUG] [Thread-182992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:18:06.928 [DEBUG] [Thread-182992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:18:06.968 [DEBUG] [Thread-182992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:18:06.969 [DEBUG] [Thread-182992] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:18:06.972 [DEBUG] [Thread-182992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:18:06.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:18:06.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:18:06.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:18:06.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:18:06.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:18:06.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:18:06.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:18:06.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:18:06.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:18:06.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.303934 -999.00  +10.10  21.50     72   +5.30 1 2 1 1 1   888    0 4.83 10.93 ----- 21.5 21.5 166.2 42.0 15.4 -22.1 14.4 -20.3 13.3 -20.9 14.0 -22.1
2026-02-14T09:18:06.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:18:06.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:18:06.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.303934
2026-02-14T09:18:07.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:18:07.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:18:07.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:18:07.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:18:07.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:18:07.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:17:26', tmtdew=6.24, humidity=65.23, cloud=0.0, wind=38.52, temperature=10.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:17:39.898', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:18:07.001 [DEBUG] [Thread-182992] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:18:07.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-14T09:18:07.096 [DEBUG] [Thread-182995] [transport.py] [_log()] starting thread (client mode): 0xa2db4490
2026-02-14T09:18:07.096 [DEBUG] [Thread-182995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:18:07.110 [DEBUG] [Thread-182995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:18:07.110 [INFO] [Thread-182995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:18:07.118 [DEBUG] [Thread-182995] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:18:07.119 [DEBUG] [Thread-182995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:18:07.119 [DEBUG] [Thread-182995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:18:07.119 [DEBUG] [Thread-182995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:18:07.119 [DEBUG] [Thread-182995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:18:07.119 [DEBUG] [Thread-182995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:18:07.119 [DEBUG] [Thread-182995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:18:07.119 [DEBUG] [Thread-182995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:18:07.119 [DEBUG] [Thread-182995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:18:07.120 [DEBUG] [Thread-182995] [transport.py] [_log()] client lang: <none>
2026-02-14T09:18:07.120 [DEBUG] [Thread-182995] [transport.py] [_log()] server lang: <none>
2026-02-14T09:18:07.120 [DEBUG] [Thread-182995] [transport.py] [_log()] kex follows: False
2026-02-14T09:18:07.120 [DEBUG] [Thread-182995] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:18:07.120 [DEBUG] [Thread-182995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:18:07.120 [DEBUG] [Thread-182995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:18:07.120 [DEBUG] [Thread-182995] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:18:07.120 [DEBUG] [Thread-182995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:18:07.121 [DEBUG] [Thread-182995] [transport.py] [_log()] Compression: none
2026-02-14T09:18:07.121 [DEBUG] [Thread-182995] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:18:07.181 [DEBUG] [Thread-182995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:18:07.182 [DEBUG] [Thread-182995] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:18:07.183 [DEBUG] [Thread-182995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:18:07.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:18:07.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:18:07.239 [DEBUG] [Thread-182995] [transport.py] [_log()] userauth is OK
2026-02-14T09:18:07.240 [DEBUG] [Thread-182995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:18:07.240 [DEBUG] [Thread-182995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:18:07.240 [DEBUG] [Thread-182995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:18:07.240 [DEBUG] [Thread-182995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:18:07.259 [INFO] [Thread-182995] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:18:07.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T09:18:07.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:18:07.830 [DEBUG] [Thread-182997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:18:08.086 [DEBUG] [Thread-182995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:18:08.087 [DEBUG] [Thread-182995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:18:08.134 [DEBUG] [Thread-182995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:18:08.134 [DEBUG] [Thread-182995] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:18:08.144 [DEBUG] [Thread-182995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:18:08.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:18:08.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-14T09:18:08.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-14T09:18:08.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:18:08.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:18:08.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:18:08.180 [DEBUG] [Thread-182995] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:18:13.672 [DEBUG] [Thread-182998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:18:22.890 [DEBUG] [Thread-182999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:18:37.927 [DEBUG] [Thread-183000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:18:38.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:18:38.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:18:38.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:18:40.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 18, 1), 6.14, 65.73, 0.0, 37.64, 10.33, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:18:40.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:18:01
2026-02-14T09:18:40.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:18:40.756 [DEBUG] [Thread-183001] [transport.py] [_log()] starting thread (client mode): 0xa2ddc0a0
2026-02-14T09:18:40.757 [DEBUG] [Thread-183001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:18:40.778 [DEBUG] [Thread-183001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:18:40.778 [INFO] [Thread-183001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:18:40.781 [DEBUG] [Thread-183001] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:18:40.781 [DEBUG] [Thread-183001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:18:40.782 [DEBUG] [Thread-183001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:18:40.782 [DEBUG] [Thread-183001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:18:40.782 [DEBUG] [Thread-183001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:18:40.782 [DEBUG] [Thread-183001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:18:40.782 [DEBUG] [Thread-183001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:18:40.782 [DEBUG] [Thread-183001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:18:40.782 [DEBUG] [Thread-183001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:18:40.782 [DEBUG] [Thread-183001] [transport.py] [_log()] client lang: <none>
2026-02-14T09:18:40.782 [DEBUG] [Thread-183001] [transport.py] [_log()] server lang: <none>
2026-02-14T09:18:40.782 [DEBUG] [Thread-183001] [transport.py] [_log()] kex follows: False
2026-02-14T09:18:40.782 [DEBUG] [Thread-183001] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:18:40.782 [DEBUG] [Thread-183001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:18:40.782 [DEBUG] [Thread-183001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:18:40.782 [DEBUG] [Thread-183001] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:18:40.782 [DEBUG] [Thread-183001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:18:40.782 [DEBUG] [Thread-183001] [transport.py] [_log()] Compression: none
2026-02-14T09:18:40.782 [DEBUG] [Thread-183001] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:18:40.791 [DEBUG] [Thread-183001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:18:40.791 [DEBUG] [Thread-183001] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:18:40.792 [DEBUG] [Thread-183001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:18:40.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:18:40.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:18:40.794 [DEBUG] [Thread-183001] [transport.py] [_log()] userauth is OK
2026-02-14T09:18:40.794 [DEBUG] [Thread-183001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:18:40.794 [DEBUG] [Thread-183001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:18:40.794 [DEBUG] [Thread-183001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:18:40.794 [DEBUG] [Thread-183001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:18:40.813 [INFO] [Thread-183001] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:18:40.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:18:41.614 [DEBUG] [Thread-183001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:18:41.615 [DEBUG] [Thread-183001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:18:41.615 [DEBUG] [Thread-183001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:18:41.656 [DEBUG] [Thread-183001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:18:41.656 [DEBUG] [Thread-183001] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:18:41.659 [DEBUG] [Thread-183001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:18:41.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:18:41.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:18:41.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:18:41.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:18:41.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:18:41.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:18:41.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:18:41.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:18:41.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:18:41.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.304281 -999.00  +10.50  26.35     71   +5.50 1 2 1 1 1   888    0 4.91 12.70 ----- 33.2 26.4 151.4 32.2 15.7 -20.4 14.7 -16.6 13.5 -18.4 14.2 -21.1
2026-02-14T09:18:41.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:18:41.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:18:41.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.304281
2026-02-14T09:18:41.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:18:41.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:18:41.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:18:41.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:18:41.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:18:41.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:18:01', tmtdew=6.14, humidity=65.73, cloud=0.0, wind=37.64, temperature=10.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:18:09.878', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:18:41.686 [DEBUG] [Thread-183001] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:18:41.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-14T09:18:49.366 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:18:49.367 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:18:52.961 [DEBUG] [Thread-183004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:19:08.013 [DEBUG] [Thread-183005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:19:13.714 [DEBUG] [Thread-183006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:19:23.051 [DEBUG] [Thread-183007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:19:38.087 [DEBUG] [Thread-183008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:19:49.507 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:19:49.509 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:19:53.121 [DEBUG] [Thread-183009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:20:08.154 [DEBUG] [Thread-183010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:20:13.751 [DEBUG] [Thread-183011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:20:23.190 [DEBUG] [Thread-183012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:20:38.226 [DEBUG] [Thread-183013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:20:49.650 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:20:49.651 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:20:53.263 [DEBUG] [Thread-183014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:20:56.131 [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-14T09:21:08.300 [DEBUG] [Thread-183015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:21:13.787 [DEBUG] [Thread-183016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:21:23.335 [DEBUG] [Thread-183017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:21:26.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:21:26.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:21:26.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-14T09:21:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 20, 58), 6.42, 64.21, 0.0, 32.84, 10.63, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:21:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:20:58
2026-02-14T09:21:28.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:21:28.622 [DEBUG] [Thread-183018] [transport.py] [_log()] starting thread (client mode): 0xa2ddc130
2026-02-14T09:21:28.622 [DEBUG] [Thread-183018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:21:28.641 [DEBUG] [Thread-183018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:21:28.641 [INFO] [Thread-183018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:21:28.644 [DEBUG] [Thread-183018] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:21:28.644 [DEBUG] [Thread-183018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:21:28.644 [DEBUG] [Thread-183018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:21:28.644 [DEBUG] [Thread-183018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:21:28.645 [DEBUG] [Thread-183018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:21:28.645 [DEBUG] [Thread-183018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:21:28.645 [DEBUG] [Thread-183018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:21:28.645 [DEBUG] [Thread-183018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:21:28.645 [DEBUG] [Thread-183018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:21:28.645 [DEBUG] [Thread-183018] [transport.py] [_log()] client lang: <none>
2026-02-14T09:21:28.645 [DEBUG] [Thread-183018] [transport.py] [_log()] server lang: <none>
2026-02-14T09:21:28.645 [DEBUG] [Thread-183018] [transport.py] [_log()] kex follows: False
2026-02-14T09:21:28.645 [DEBUG] [Thread-183018] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:21:28.645 [DEBUG] [Thread-183018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:21:28.645 [DEBUG] [Thread-183018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:21:28.645 [DEBUG] [Thread-183018] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:21:28.645 [DEBUG] [Thread-183018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:21:28.645 [DEBUG] [Thread-183018] [transport.py] [_log()] Compression: none
2026-02-14T09:21:28.645 [DEBUG] [Thread-183018] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:21:28.662 [DEBUG] [Thread-183018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:21:28.663 [DEBUG] [Thread-183018] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:21:28.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:21:28.664 [DEBUG] [Thread-183018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:21:28.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:21:28.666 [DEBUG] [Thread-183018] [transport.py] [_log()] userauth is OK
2026-02-14T09:21:28.666 [DEBUG] [Thread-183018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:21:28.666 [DEBUG] [Thread-183018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:21:28.666 [DEBUG] [Thread-183018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:21:28.666 [DEBUG] [Thread-183018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:21:28.691 [INFO] [Thread-183018] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:21:28.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:21:29.340 [DEBUG] [Thread-183018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:21:29.341 [DEBUG] [Thread-183018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:21:29.341 [DEBUG] [Thread-183018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:21:29.381 [DEBUG] [Thread-183018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:21:29.381 [DEBUG] [Thread-183018] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:21:29.385 [DEBUG] [Thread-183018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:21:29.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:21:29.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:21:29.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:21:29.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:21:29.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:21:29.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:21:29.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:21:29.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:21:29.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:21:29.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.306017 -999.00  +10.20  28.20     71   +5.20 1 2 1 1 1   888    0 5.11 20.59 ----- 33.3 28.2 152.7 37.2 15.3 -26.7 14.9 -20.8 13.5 -22.5 14.1 -25.0
2026-02-14T09:21:29.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:21:29.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:21:29.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.306017
2026-02-14T09:21:29.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:21:29.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:21:29.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:21:29.411 [DEBUG] [Thread-183018] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:21:29.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:21:29.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:21:29.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:20:58', tmtdew=6.42, humidity=64.21, cloud=0.0, wind=32.84, temperature=10.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:20:39.869', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:21:29.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-14T09:21:29.514 [DEBUG] [Thread-183021] [transport.py] [_log()] starting thread (client mode): 0xa5741330
2026-02-14T09:21:29.514 [DEBUG] [Thread-183021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:21:29.536 [DEBUG] [Thread-183021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:21:29.536 [INFO] [Thread-183021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:21:29.550 [DEBUG] [Thread-183021] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:21:29.550 [DEBUG] [Thread-183021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:21:29.550 [DEBUG] [Thread-183021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:21:29.550 [DEBUG] [Thread-183021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:21:29.550 [DEBUG] [Thread-183021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:21:29.550 [DEBUG] [Thread-183021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:21:29.550 [DEBUG] [Thread-183021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:21:29.550 [DEBUG] [Thread-183021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:21:29.550 [DEBUG] [Thread-183021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:21:29.550 [DEBUG] [Thread-183021] [transport.py] [_log()] client lang: <none>
2026-02-14T09:21:29.550 [DEBUG] [Thread-183021] [transport.py] [_log()] server lang: <none>
2026-02-14T09:21:29.550 [DEBUG] [Thread-183021] [transport.py] [_log()] kex follows: False
2026-02-14T09:21:29.551 [DEBUG] [Thread-183021] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:21:29.551 [DEBUG] [Thread-183021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:21:29.551 [DEBUG] [Thread-183021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:21:29.551 [DEBUG] [Thread-183021] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:21:29.551 [DEBUG] [Thread-183021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:21:29.551 [DEBUG] [Thread-183021] [transport.py] [_log()] Compression: none
2026-02-14T09:21:29.551 [DEBUG] [Thread-183021] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:21:29.612 [DEBUG] [Thread-183021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:21:29.612 [DEBUG] [Thread-183021] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:21:29.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:21:29.613 [DEBUG] [Thread-183021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:21:29.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:21:29.682 [DEBUG] [Thread-183021] [transport.py] [_log()] userauth is OK
2026-02-14T09:21:29.682 [DEBUG] [Thread-183021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:21:29.683 [DEBUG] [Thread-183021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:21:29.683 [DEBUG] [Thread-183021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:21:29.683 [DEBUG] [Thread-183021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:21:29.709 [INFO] [Thread-183021] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:21:29.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-14T09:21:29.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:21:30.606 [DEBUG] [Thread-183021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:21:30.606 [DEBUG] [Thread-183021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:21:30.653 [DEBUG] [Thread-183021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:21:30.654 [DEBUG] [Thread-183021] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:21:30.663 [DEBUG] [Thread-183021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:21:30.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:21:30.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-14T09:21:30.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:21:30.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:21:30.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:21:30.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:21:30.711 [DEBUG] [Thread-183021] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:21:38.372 [DEBUG] [Thread-183023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:21:49.790 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:21:49.791 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:21:53.428 [DEBUG] [Thread-183024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:22:00.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:22:00.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:22:00.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-14T09:22:02.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 21, 34), 6.48, 64.18, 0.0, 34.72, 10.77, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:22:02.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:21:34
2026-02-14T09:22:03.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:22:03.576 [DEBUG] [Thread-183025] [transport.py] [_log()] starting thread (client mode): 0xa2d55f00
2026-02-14T09:22:03.576 [DEBUG] [Thread-183025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:22:03.596 [DEBUG] [Thread-183025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:22:03.596 [INFO] [Thread-183025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:22:03.599 [DEBUG] [Thread-183025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:22:03.599 [DEBUG] [Thread-183025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:22:03.600 [DEBUG] [Thread-183025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:22:03.600 [DEBUG] [Thread-183025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:22:03.600 [DEBUG] [Thread-183025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:22:03.600 [DEBUG] [Thread-183025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:22:03.600 [DEBUG] [Thread-183025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:22:03.600 [DEBUG] [Thread-183025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:22:03.600 [DEBUG] [Thread-183025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:22:03.600 [DEBUG] [Thread-183025] [transport.py] [_log()] client lang: <none>
2026-02-14T09:22:03.600 [DEBUG] [Thread-183025] [transport.py] [_log()] server lang: <none>
2026-02-14T09:22:03.600 [DEBUG] [Thread-183025] [transport.py] [_log()] kex follows: False
2026-02-14T09:22:03.600 [DEBUG] [Thread-183025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:22:03.600 [DEBUG] [Thread-183025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:22:03.600 [DEBUG] [Thread-183025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:22:03.600 [DEBUG] [Thread-183025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:22:03.601 [DEBUG] [Thread-183025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:22:03.601 [DEBUG] [Thread-183025] [transport.py] [_log()] Compression: none
2026-02-14T09:22:03.601 [DEBUG] [Thread-183025] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:22:03.618 [DEBUG] [Thread-183025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:22:03.618 [DEBUG] [Thread-183025] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:22:03.619 [DEBUG] [Thread-183025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:22:03.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:22:03.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:22:03.620 [DEBUG] [Thread-183025] [transport.py] [_log()] userauth is OK
2026-02-14T09:22:03.620 [DEBUG] [Thread-183025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:22:03.621 [DEBUG] [Thread-183025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:22:03.621 [DEBUG] [Thread-183025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:22:03.621 [DEBUG] [Thread-183025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:22:03.656 [INFO] [Thread-183025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:22:03.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:22:04.288 [DEBUG] [Thread-183025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:22:04.288 [DEBUG] [Thread-183025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:22:04.288 [DEBUG] [Thread-183025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:22:04.329 [DEBUG] [Thread-183025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:22:04.329 [DEBUG] [Thread-183025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:22:04.332 [DEBUG] [Thread-183025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:22:04.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:22:04.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:22:04.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:22:04.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:22:04.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:22:04.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:22:04.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:22:04.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:22:04.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:22:04.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.306712 -999.00  +10.30  26.03     72   +5.50 1 2 1 1 1   888    0 5.37 22.94 ----- 22.1 26.0 158.8 35.4 15.6 -23.0 14.6 -20.6 13.6 -21.5 14.3 -22.2
2026-02-14T09:22:04.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:22:04.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:22:04.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.306712
2026-02-14T09:22:04.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:22:04.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:22:04.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:22:04.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:22:04.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:22:04.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:21:34', tmtdew=6.48, humidity=64.18, cloud=0.0, wind=34.72, temperature=10.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:21:39.917', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:22:04.355 [DEBUG] [Thread-183025] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:22:04.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-14T09:22:04.449 [DEBUG] [Thread-183028] [transport.py] [_log()] starting thread (client mode): 0xa2dddbd0
2026-02-14T09:22:04.449 [DEBUG] [Thread-183028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:22:04.465 [DEBUG] [Thread-183028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:22:04.465 [INFO] [Thread-183028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:22:04.472 [DEBUG] [Thread-183028] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:22:04.473 [DEBUG] [Thread-183028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:22:04.473 [DEBUG] [Thread-183028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:22:04.473 [DEBUG] [Thread-183028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:22:04.473 [DEBUG] [Thread-183028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:22:04.473 [DEBUG] [Thread-183028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:22:04.474 [DEBUG] [Thread-183028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:22:04.474 [DEBUG] [Thread-183028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:22:04.474 [DEBUG] [Thread-183028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:22:04.474 [DEBUG] [Thread-183028] [transport.py] [_log()] client lang: <none>
2026-02-14T09:22:04.474 [DEBUG] [Thread-183028] [transport.py] [_log()] server lang: <none>
2026-02-14T09:22:04.474 [DEBUG] [Thread-183028] [transport.py] [_log()] kex follows: False
2026-02-14T09:22:04.474 [DEBUG] [Thread-183028] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:22:04.474 [DEBUG] [Thread-183028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:22:04.474 [DEBUG] [Thread-183028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:22:04.474 [DEBUG] [Thread-183028] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:22:04.474 [DEBUG] [Thread-183028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:22:04.474 [DEBUG] [Thread-183028] [transport.py] [_log()] Compression: none
2026-02-14T09:22:04.474 [DEBUG] [Thread-183028] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:22:04.531 [DEBUG] [Thread-183028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:22:04.531 [DEBUG] [Thread-183028] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:22:04.532 [DEBUG] [Thread-183028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:22:04.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:22:04.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:22:04.587 [DEBUG] [Thread-183028] [transport.py] [_log()] userauth is OK
2026-02-14T09:22:04.587 [DEBUG] [Thread-183028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:22:04.587 [DEBUG] [Thread-183028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:22:04.587 [DEBUG] [Thread-183028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:22:04.587 [DEBUG] [Thread-183028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:22:04.606 [INFO] [Thread-183028] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:22:04.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-14T09:22:04.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:22:05.449 [DEBUG] [Thread-183028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:22:05.450 [DEBUG] [Thread-183028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:22:05.497 [DEBUG] [Thread-183028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:22:05.497 [DEBUG] [Thread-183028] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:22:05.505 [DEBUG] [Thread-183028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:22:05.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:22:05.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-14T09:22:05.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:22:05.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:22:05.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:22:05.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:22:05.541 [DEBUG] [Thread-183028] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:22:08.465 [DEBUG] [Thread-183030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:22:13.825 [DEBUG] [Thread-183031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:22:23.519 [DEBUG] [Thread-183032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:22:35.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:22:35.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:22:35.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-14T09:22:37.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 22, 10), 5.92, 66.55, 0.0, 31.67, 10.08, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:22:37.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:22:10
2026-02-14T09:22:38.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:22:38.183 [DEBUG] [Thread-183033] [transport.py] [_log()] starting thread (client mode): 0xa2d54f10
2026-02-14T09:22:38.183 [DEBUG] [Thread-183033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:22:38.203 [DEBUG] [Thread-183033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:22:38.203 [INFO] [Thread-183033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:22:38.206 [DEBUG] [Thread-183033] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:22:38.206 [DEBUG] [Thread-183033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:22:38.206 [DEBUG] [Thread-183033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:22:38.206 [DEBUG] [Thread-183033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:22:38.206 [DEBUG] [Thread-183033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:22:38.206 [DEBUG] [Thread-183033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:22:38.206 [DEBUG] [Thread-183033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:22:38.206 [DEBUG] [Thread-183033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:22:38.206 [DEBUG] [Thread-183033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:22:38.207 [DEBUG] [Thread-183033] [transport.py] [_log()] client lang: <none>
2026-02-14T09:22:38.207 [DEBUG] [Thread-183033] [transport.py] [_log()] server lang: <none>
2026-02-14T09:22:38.207 [DEBUG] [Thread-183033] [transport.py] [_log()] kex follows: False
2026-02-14T09:22:38.207 [DEBUG] [Thread-183033] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:22:38.207 [DEBUG] [Thread-183033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:22:38.207 [DEBUG] [Thread-183033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:22:38.207 [DEBUG] [Thread-183033] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:22:38.207 [DEBUG] [Thread-183033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:22:38.207 [DEBUG] [Thread-183033] [transport.py] [_log()] Compression: none
2026-02-14T09:22:38.207 [DEBUG] [Thread-183033] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:22:38.225 [DEBUG] [Thread-183033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:22:38.226 [DEBUG] [Thread-183033] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:22:38.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:22:38.227 [DEBUG] [Thread-183033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:22:38.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:22:38.229 [DEBUG] [Thread-183033] [transport.py] [_log()] userauth is OK
2026-02-14T09:22:38.229 [DEBUG] [Thread-183033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:22:38.229 [DEBUG] [Thread-183033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:22:38.229 [DEBUG] [Thread-183033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:22:38.230 [DEBUG] [Thread-183033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:22:38.252 [INFO] [Thread-183033] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:22:38.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:22:38.554 [DEBUG] [Thread-183035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:22:38.910 [DEBUG] [Thread-183033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:22:38.910 [DEBUG] [Thread-183033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:22:38.911 [DEBUG] [Thread-183033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:22:38.952 [DEBUG] [Thread-183033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:22:38.952 [DEBUG] [Thread-183033] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:22:38.956 [DEBUG] [Thread-183033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:22:38.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:22:38.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:22:38.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:22:38.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:22:38.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:22:38.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:22:38.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:22:38.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:22:38.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:22:38.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.307059 -999.00  +10.80  28.11     71   +5.70 1 2 1 1 1   888    0 5.49 26.37 ----- 30.4 28.1 157.8 37.8 15.8 -25.0 14.6 -22.9 13.7 -22.6 14.5 -24.8
2026-02-14T09:22:38.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:22:38.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:22:38.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.307059
2026-02-14T09:22:38.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:22:38.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:22:38.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:22:38.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:22:38.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:22:38.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:22:10', tmtdew=5.92, humidity=66.55, cloud=0.0, wind=31.67, temperature=10.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:22:09.898', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:22:38.985 [DEBUG] [Thread-183033] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:22:39.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-14T09:22:39.081 [DEBUG] [Thread-183037] [transport.py] [_log()] starting thread (client mode): 0xa2d18c10
2026-02-14T09:22:39.081 [DEBUG] [Thread-183037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:22:39.097 [DEBUG] [Thread-183037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:22:39.098 [INFO] [Thread-183037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:22:39.105 [DEBUG] [Thread-183037] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:22:39.106 [DEBUG] [Thread-183037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:22:39.106 [DEBUG] [Thread-183037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:22:39.106 [DEBUG] [Thread-183037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:22:39.106 [DEBUG] [Thread-183037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:22:39.106 [DEBUG] [Thread-183037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:22:39.106 [DEBUG] [Thread-183037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:22:39.106 [DEBUG] [Thread-183037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:22:39.106 [DEBUG] [Thread-183037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:22:39.106 [DEBUG] [Thread-183037] [transport.py] [_log()] client lang: <none>
2026-02-14T09:22:39.106 [DEBUG] [Thread-183037] [transport.py] [_log()] server lang: <none>
2026-02-14T09:22:39.106 [DEBUG] [Thread-183037] [transport.py] [_log()] kex follows: False
2026-02-14T09:22:39.106 [DEBUG] [Thread-183037] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:22:39.106 [DEBUG] [Thread-183037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:22:39.106 [DEBUG] [Thread-183037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:22:39.107 [DEBUG] [Thread-183037] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:22:39.107 [DEBUG] [Thread-183037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:22:39.107 [DEBUG] [Thread-183037] [transport.py] [_log()] Compression: none
2026-02-14T09:22:39.107 [DEBUG] [Thread-183037] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:22:39.163 [DEBUG] [Thread-183037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:22:39.164 [DEBUG] [Thread-183037] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:22:39.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:22:39.165 [DEBUG] [Thread-183037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:22:39.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:22:39.221 [DEBUG] [Thread-183037] [transport.py] [_log()] userauth is OK
2026-02-14T09:22:39.221 [DEBUG] [Thread-183037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:22:39.221 [DEBUG] [Thread-183037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:22:39.221 [DEBUG] [Thread-183037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:22:39.222 [DEBUG] [Thread-183037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:22:39.242 [INFO] [Thread-183037] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:22:39.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-14T09:22:39.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:22:40.101 [DEBUG] [Thread-183037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:22:40.101 [DEBUG] [Thread-183037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:22:40.152 [DEBUG] [Thread-183037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:22:40.152 [DEBUG] [Thread-183037] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:22:40.163 [DEBUG] [Thread-183037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:22:40.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:22:40.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-14T09:22:40.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-14T09:22:40.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:22:40.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:22:40.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:22:40.199 [DEBUG] [Thread-183037] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:22:49.943 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:22:49.944 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:22:53.587 [DEBUG] [Thread-183039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:23:08.649 [DEBUG] [Thread-183040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:23:10.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:23:10.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:23:10.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:23:12.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 22, 45), 5.87, 66.89, 0.0, 35.15, 10.27, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:23:12.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:22:45
2026-02-14T09:23:12.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:23:12.556 [DEBUG] [Thread-183041] [transport.py] [_log()] starting thread (client mode): 0xa5742b60
2026-02-14T09:23:12.556 [DEBUG] [Thread-183041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:23:12.576 [DEBUG] [Thread-183041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:23:12.576 [INFO] [Thread-183041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:23:12.579 [DEBUG] [Thread-183041] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:23:12.579 [DEBUG] [Thread-183041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:23:12.579 [DEBUG] [Thread-183041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:23:12.580 [DEBUG] [Thread-183041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:23:12.580 [DEBUG] [Thread-183041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:23:12.580 [DEBUG] [Thread-183041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:23:12.580 [DEBUG] [Thread-183041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:23:12.580 [DEBUG] [Thread-183041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:23:12.580 [DEBUG] [Thread-183041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:23:12.580 [DEBUG] [Thread-183041] [transport.py] [_log()] client lang: <none>
2026-02-14T09:23:12.580 [DEBUG] [Thread-183041] [transport.py] [_log()] server lang: <none>
2026-02-14T09:23:12.580 [DEBUG] [Thread-183041] [transport.py] [_log()] kex follows: False
2026-02-14T09:23:12.580 [DEBUG] [Thread-183041] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:23:12.580 [DEBUG] [Thread-183041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:23:12.580 [DEBUG] [Thread-183041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:23:12.580 [DEBUG] [Thread-183041] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:23:12.580 [DEBUG] [Thread-183041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:23:12.581 [DEBUG] [Thread-183041] [transport.py] [_log()] Compression: none
2026-02-14T09:23:12.581 [DEBUG] [Thread-183041] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:23:12.598 [DEBUG] [Thread-183041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:23:12.598 [DEBUG] [Thread-183041] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:23:12.599 [DEBUG] [Thread-183041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:23:12.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:23:12.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:23:12.601 [DEBUG] [Thread-183041] [transport.py] [_log()] userauth is OK
2026-02-14T09:23:12.601 [DEBUG] [Thread-183041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:23:12.601 [DEBUG] [Thread-183041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:23:12.601 [DEBUG] [Thread-183041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:23:12.601 [DEBUG] [Thread-183041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:23:12.624 [INFO] [Thread-183041] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:23:12.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:23:13.266 [DEBUG] [Thread-183041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:23:13.266 [DEBUG] [Thread-183041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:23:13.266 [DEBUG] [Thread-183041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:23:13.308 [DEBUG] [Thread-183041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:23:13.308 [DEBUG] [Thread-183041] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:23:13.311 [DEBUG] [Thread-183041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:23:13.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:23:13.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:23:13.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:23:13.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:23:13.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:23:13.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:23:13.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:23:13.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:23:13.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:23:13.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.307406 -999.00  +10.70  26.63     70   +5.50 1 1 1 1 1   888    0 5.60 29.14 ----- 33.4 26.6 168.4 38.9 15.8 -25.7 14.8 -23.4 13.7 -23.1 14.4 -25.9
2026-02-14T09:23:13.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:23:13.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:23:13.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.307406
2026-02-14T09:23:13.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:23:13.335 [DEBUG] [Thread-183041] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:23:13.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:23:13.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:23:13.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:23:13.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:23:13.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:22:45', tmtdew=5.87, humidity=66.89, cloud=0.0, wind=35.15, temperature=10.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:22:39.878', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:23:13.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-14T09:23:13.439 [DEBUG] [Thread-183044] [transport.py] [_log()] starting thread (client mode): 0xa57411b0
2026-02-14T09:23:13.439 [DEBUG] [Thread-183044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:23:13.453 [DEBUG] [Thread-183044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:23:13.453 [INFO] [Thread-183044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:23:13.460 [DEBUG] [Thread-183044] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:23:13.460 [DEBUG] [Thread-183044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:23:13.460 [DEBUG] [Thread-183044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:23:13.460 [DEBUG] [Thread-183044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:23:13.460 [DEBUG] [Thread-183044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:23:13.460 [DEBUG] [Thread-183044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:23:13.460 [DEBUG] [Thread-183044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:23:13.460 [DEBUG] [Thread-183044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:23:13.460 [DEBUG] [Thread-183044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:23:13.460 [DEBUG] [Thread-183044] [transport.py] [_log()] client lang: <none>
2026-02-14T09:23:13.460 [DEBUG] [Thread-183044] [transport.py] [_log()] server lang: <none>
2026-02-14T09:23:13.460 [DEBUG] [Thread-183044] [transport.py] [_log()] kex follows: False
2026-02-14T09:23:13.460 [DEBUG] [Thread-183044] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:23:13.460 [DEBUG] [Thread-183044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:23:13.460 [DEBUG] [Thread-183044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:23:13.460 [DEBUG] [Thread-183044] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:23:13.460 [DEBUG] [Thread-183044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:23:13.460 [DEBUG] [Thread-183044] [transport.py] [_log()] Compression: none
2026-02-14T09:23:13.460 [DEBUG] [Thread-183044] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:23:13.516 [DEBUG] [Thread-183044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:23:13.517 [DEBUG] [Thread-183044] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:23:13.517 [DEBUG] [Thread-183044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:23:13.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:23:13.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:23:13.574 [DEBUG] [Thread-183044] [transport.py] [_log()] userauth is OK
2026-02-14T09:23:13.574 [DEBUG] [Thread-183044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:23:13.574 [DEBUG] [Thread-183044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:23:13.574 [DEBUG] [Thread-183044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:23:13.574 [DEBUG] [Thread-183044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:23:13.588 [INFO] [Thread-183044] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:23:13.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-14T09:23:13.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:23:13.858 [DEBUG] [Thread-183046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:23:14.388 [DEBUG] [Thread-183044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:23:14.388 [DEBUG] [Thread-183044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:23:14.435 [DEBUG] [Thread-183044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:23:14.436 [DEBUG] [Thread-183044] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:23:14.445 [DEBUG] [Thread-183044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:23:14.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:23:14.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-14T09:23:14.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-14T09:23:14.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:23:14.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:23:14.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:23:14.480 [DEBUG] [Thread-183044] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:23:23.690 [DEBUG] [Thread-183047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:23:38.746 [DEBUG] [Thread-183048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:23:44.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:23:44.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:23:44.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:23:46.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 23, 21), 6.28, 65.09, 0.0, 38.64, 10.63, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:23:46.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:23:21
2026-02-14T09:23:46.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:23:47.072 [DEBUG] [Thread-183049] [transport.py] [_log()] starting thread (client mode): 0xa2d1a8f0
2026-02-14T09:23:47.072 [DEBUG] [Thread-183049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:23:47.093 [DEBUG] [Thread-183049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:23:47.094 [INFO] [Thread-183049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:23:47.096 [DEBUG] [Thread-183049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:23:47.096 [DEBUG] [Thread-183049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:23:47.096 [DEBUG] [Thread-183049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:23:47.096 [DEBUG] [Thread-183049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:23:47.097 [DEBUG] [Thread-183049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:23:47.097 [DEBUG] [Thread-183049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:23:47.097 [DEBUG] [Thread-183049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:23:47.097 [DEBUG] [Thread-183049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:23:47.097 [DEBUG] [Thread-183049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:23:47.097 [DEBUG] [Thread-183049] [transport.py] [_log()] client lang: <none>
2026-02-14T09:23:47.097 [DEBUG] [Thread-183049] [transport.py] [_log()] server lang: <none>
2026-02-14T09:23:47.097 [DEBUG] [Thread-183049] [transport.py] [_log()] kex follows: False
2026-02-14T09:23:47.097 [DEBUG] [Thread-183049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:23:47.097 [DEBUG] [Thread-183049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:23:47.097 [DEBUG] [Thread-183049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:23:47.097 [DEBUG] [Thread-183049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:23:47.097 [DEBUG] [Thread-183049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:23:47.097 [DEBUG] [Thread-183049] [transport.py] [_log()] Compression: none
2026-02-14T09:23:47.097 [DEBUG] [Thread-183049] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:23:47.114 [DEBUG] [Thread-183049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:23:47.115 [DEBUG] [Thread-183049] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:23:47.116 [DEBUG] [Thread-183049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:23:47.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:23:47.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:23:47.118 [DEBUG] [Thread-183049] [transport.py] [_log()] userauth is OK
2026-02-14T09:23:47.118 [DEBUG] [Thread-183049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:23:47.119 [DEBUG] [Thread-183049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:23:47.119 [DEBUG] [Thread-183049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:23:47.119 [DEBUG] [Thread-183049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:23:47.138 [INFO] [Thread-183049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:23:47.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:23:47.898 [DEBUG] [Thread-183049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:23:47.899 [DEBUG] [Thread-183049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:23:47.899 [DEBUG] [Thread-183049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:23:47.939 [DEBUG] [Thread-183049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:23:47.940 [DEBUG] [Thread-183049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:23:47.943 [DEBUG] [Thread-183049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:23:47.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:23:47.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:23:47.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:23:47.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:23:47.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:23:47.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:23:47.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:23:47.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:23:47.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:23:47.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.307753 -999.00  +10.50  23.64     70   +5.40 1 1 1 1 1   888    0 5.57 29.67 ----- 30.8 23.6 166.6 38.8 16.0 -25.0 14.8 -25.5 13.7 -24.8 14.5 -25.4
2026-02-14T09:23:47.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:23:47.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:23:47.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.307753
2026-02-14T09:23:47.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:23:47.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:23:47.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:23:47.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:23:47.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:23:47.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:23:21', tmtdew=6.28, humidity=65.09, cloud=0.0, wind=38.64, temperature=10.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:23:09.859', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:23:47.963 [DEBUG] [Thread-183049] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:23:48.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-14T09:23:48.059 [DEBUG] [Thread-183052] [transport.py] [_log()] starting thread (client mode): 0xa2d55e40
2026-02-14T09:23:48.059 [DEBUG] [Thread-183052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:23:48.073 [DEBUG] [Thread-183052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:23:48.074 [INFO] [Thread-183052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:23:48.081 [DEBUG] [Thread-183052] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:23:48.082 [DEBUG] [Thread-183052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:23:48.082 [DEBUG] [Thread-183052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:23:48.082 [DEBUG] [Thread-183052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:23:48.082 [DEBUG] [Thread-183052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:23:48.082 [DEBUG] [Thread-183052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:23:48.082 [DEBUG] [Thread-183052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:23:48.082 [DEBUG] [Thread-183052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:23:48.082 [DEBUG] [Thread-183052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:23:48.082 [DEBUG] [Thread-183052] [transport.py] [_log()] client lang: <none>
2026-02-14T09:23:48.082 [DEBUG] [Thread-183052] [transport.py] [_log()] server lang: <none>
2026-02-14T09:23:48.082 [DEBUG] [Thread-183052] [transport.py] [_log()] kex follows: False
2026-02-14T09:23:48.082 [DEBUG] [Thread-183052] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:23:48.082 [DEBUG] [Thread-183052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:23:48.082 [DEBUG] [Thread-183052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:23:48.082 [DEBUG] [Thread-183052] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:23:48.082 [DEBUG] [Thread-183052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:23:48.082 [DEBUG] [Thread-183052] [transport.py] [_log()] Compression: none
2026-02-14T09:23:48.082 [DEBUG] [Thread-183052] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:23:48.138 [DEBUG] [Thread-183052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:23:48.138 [DEBUG] [Thread-183052] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:23:48.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:23:48.139 [DEBUG] [Thread-183052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:23:48.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:23:48.194 [DEBUG] [Thread-183052] [transport.py] [_log()] userauth is OK
2026-02-14T09:23:48.194 [DEBUG] [Thread-183052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:23:48.195 [DEBUG] [Thread-183052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:23:48.195 [DEBUG] [Thread-183052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:23:48.195 [DEBUG] [Thread-183052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:23:48.213 [INFO] [Thread-183052] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:23:48.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-14T09:23:48.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:23:49.025 [DEBUG] [Thread-183052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:23:49.025 [DEBUG] [Thread-183052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:23:49.077 [DEBUG] [Thread-183052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:23:49.078 [DEBUG] [Thread-183052] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:23:49.092 [DEBUG] [Thread-183052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:23:49.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:23: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')
2026-02-14T09:23:49.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:23:49.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:23:49.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:23:49.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:23:49.128 [DEBUG] [Thread-183052] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:23:50.084 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:23:50.085 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:23:53.786 [DEBUG] [Thread-183054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:24:08.841 [DEBUG] [Thread-183055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:24:13.900 [DEBUG] [Thread-183056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:24:19.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:24:19.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:24:19.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-14T09:24:21.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 23, 56), 6.13, 65.86, 0.0, 36.86, 10.53, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:24:21.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:23:56
2026-02-14T09:24:21.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:24:21.741 [DEBUG] [Thread-183057] [transport.py] [_log()] starting thread (client mode): 0xa2d3fb80
2026-02-14T09:24:21.741 [DEBUG] [Thread-183057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:24:21.762 [DEBUG] [Thread-183057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:24:21.763 [INFO] [Thread-183057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:24:21.766 [DEBUG] [Thread-183057] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:24:21.766 [DEBUG] [Thread-183057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:24:21.766 [DEBUG] [Thread-183057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:24:21.766 [DEBUG] [Thread-183057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:24:21.766 [DEBUG] [Thread-183057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:24:21.767 [DEBUG] [Thread-183057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:24:21.767 [DEBUG] [Thread-183057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:24:21.767 [DEBUG] [Thread-183057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:24:21.767 [DEBUG] [Thread-183057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:24:21.767 [DEBUG] [Thread-183057] [transport.py] [_log()] client lang: <none>
2026-02-14T09:24:21.767 [DEBUG] [Thread-183057] [transport.py] [_log()] server lang: <none>
2026-02-14T09:24:21.767 [DEBUG] [Thread-183057] [transport.py] [_log()] kex follows: False
2026-02-14T09:24:21.767 [DEBUG] [Thread-183057] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:24:21.767 [DEBUG] [Thread-183057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:24:21.767 [DEBUG] [Thread-183057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:24:21.767 [DEBUG] [Thread-183057] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:24:21.767 [DEBUG] [Thread-183057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:24:21.768 [DEBUG] [Thread-183057] [transport.py] [_log()] Compression: none
2026-02-14T09:24:21.768 [DEBUG] [Thread-183057] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:24:21.787 [DEBUG] [Thread-183057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:24:21.788 [DEBUG] [Thread-183057] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:24:21.788 [DEBUG] [Thread-183057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:24:21.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:24:21.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:24:21.790 [DEBUG] [Thread-183057] [transport.py] [_log()] userauth is OK
2026-02-14T09:24:21.791 [DEBUG] [Thread-183057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:24:21.791 [DEBUG] [Thread-183057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:24:21.791 [DEBUG] [Thread-183057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:24:21.791 [DEBUG] [Thread-183057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:24:21.815 [INFO] [Thread-183057] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:24:21.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:24:22.441 [DEBUG] [Thread-183057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:24:22.441 [DEBUG] [Thread-183057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:24:22.442 [DEBUG] [Thread-183057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:24:22.482 [DEBUG] [Thread-183057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:24:22.482 [DEBUG] [Thread-183057] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:24:22.485 [DEBUG] [Thread-183057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:24:22.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:24:22.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:24:22.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:24:22.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:24:22.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:24:22.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:24:22.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:24:22.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:24:22.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:24:22.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.308101 -999.00  +10.40  33.21     71   +5.50 1 1 2 1 1   888    0 5.58 30.61 ----- 31.0 33.2 171.6 36.7 15.9 -28.7 14.9 -25.8 13.8 -24.5 14.4 -27.1
2026-02-14T09:24:22.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:24:22.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:24:22.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.308101
2026-02-14T09:24:22.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:24:22.510 [DEBUG] [Thread-183057] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:24:22.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:24:22.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:24:22.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:24:22.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:24:22.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:23:56', tmtdew=6.13, humidity=65.86, cloud=0.0, wind=36.86, temperature=10.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:23:39.926', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:24:22.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T09:24:22.605 [DEBUG] [Thread-183060] [transport.py] [_log()] starting thread (client mode): 0xa2d7a950
2026-02-14T09:24:22.605 [DEBUG] [Thread-183060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:24:22.621 [DEBUG] [Thread-183060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:24:22.621 [INFO] [Thread-183060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:24:22.629 [DEBUG] [Thread-183060] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:24:22.629 [DEBUG] [Thread-183060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:24:22.630 [DEBUG] [Thread-183060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:24:22.630 [DEBUG] [Thread-183060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:24:22.630 [DEBUG] [Thread-183060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:24:22.630 [DEBUG] [Thread-183060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:24:22.630 [DEBUG] [Thread-183060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:24:22.630 [DEBUG] [Thread-183060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:24:22.630 [DEBUG] [Thread-183060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:24:22.630 [DEBUG] [Thread-183060] [transport.py] [_log()] client lang: <none>
2026-02-14T09:24:22.630 [DEBUG] [Thread-183060] [transport.py] [_log()] server lang: <none>
2026-02-14T09:24:22.630 [DEBUG] [Thread-183060] [transport.py] [_log()] kex follows: False
2026-02-14T09:24:22.630 [DEBUG] [Thread-183060] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:24:22.630 [DEBUG] [Thread-183060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:24:22.630 [DEBUG] [Thread-183060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:24:22.630 [DEBUG] [Thread-183060] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:24:22.630 [DEBUG] [Thread-183060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:24:22.631 [DEBUG] [Thread-183060] [transport.py] [_log()] Compression: none
2026-02-14T09:24:22.631 [DEBUG] [Thread-183060] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:24:22.685 [DEBUG] [Thread-183060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:24:22.686 [DEBUG] [Thread-183060] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:24:22.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:24:22.687 [DEBUG] [Thread-183060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:24:22.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:24:22.742 [DEBUG] [Thread-183060] [transport.py] [_log()] userauth is OK
2026-02-14T09:24:22.742 [DEBUG] [Thread-183060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:24:22.742 [DEBUG] [Thread-183060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:24:22.743 [DEBUG] [Thread-183060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:24:22.743 [DEBUG] [Thread-183060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:24:22.762 [INFO] [Thread-183060] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:24:22.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-14T09:24:22.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:24:23.596 [DEBUG] [Thread-183060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:24:23.596 [DEBUG] [Thread-183060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:24:23.643 [DEBUG] [Thread-183060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:24:23.643 [DEBUG] [Thread-183060] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:24:23.652 [DEBUG] [Thread-183060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:24:23.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:24:23.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:24:23.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-14T09:24:23.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:24:23.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:24:23.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:24:23.689 [DEBUG] [Thread-183060] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:24:23.872 [DEBUG] [Thread-183062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:24:38.917 [DEBUG] [Thread-183063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:24:50.223 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:24:50.224 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:24:53.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:24:53.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:24: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-14T09:24:53.954 [DEBUG] [Thread-183064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:24:55.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 24, 31), 6.13, 65.81, 0.0, 34.65, 10.32, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:24:55.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:24:31
2026-02-14T09:24:55.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:24:56.064 [DEBUG] [Thread-183065] [transport.py] [_log()] starting thread (client mode): 0xa5743580
2026-02-14T09:24:56.064 [DEBUG] [Thread-183065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:24:56.083 [DEBUG] [Thread-183065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:24:56.084 [INFO] [Thread-183065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:24:56.087 [DEBUG] [Thread-183065] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:24:56.087 [DEBUG] [Thread-183065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:24:56.087 [DEBUG] [Thread-183065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:24:56.087 [DEBUG] [Thread-183065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:24:56.087 [DEBUG] [Thread-183065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:24:56.087 [DEBUG] [Thread-183065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:24:56.087 [DEBUG] [Thread-183065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:24:56.088 [DEBUG] [Thread-183065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:24:56.088 [DEBUG] [Thread-183065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:24:56.088 [DEBUG] [Thread-183065] [transport.py] [_log()] client lang: <none>
2026-02-14T09:24:56.088 [DEBUG] [Thread-183065] [transport.py] [_log()] server lang: <none>
2026-02-14T09:24:56.088 [DEBUG] [Thread-183065] [transport.py] [_log()] kex follows: False
2026-02-14T09:24:56.088 [DEBUG] [Thread-183065] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:24:56.088 [DEBUG] [Thread-183065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:24:56.088 [DEBUG] [Thread-183065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:24:56.088 [DEBUG] [Thread-183065] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:24:56.088 [DEBUG] [Thread-183065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:24:56.088 [DEBUG] [Thread-183065] [transport.py] [_log()] Compression: none
2026-02-14T09:24:56.088 [DEBUG] [Thread-183065] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:24:56.105 [DEBUG] [Thread-183065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:24:56.105 [DEBUG] [Thread-183065] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:24:56.106 [DEBUG] [Thread-183065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:24:56.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:24:56.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:24:56.108 [DEBUG] [Thread-183065] [transport.py] [_log()] userauth is OK
2026-02-14T09:24:56.108 [DEBUG] [Thread-183065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:24:56.109 [DEBUG] [Thread-183065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:24:56.109 [DEBUG] [Thread-183065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:24:56.109 [DEBUG] [Thread-183065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:24:56.145 [INFO] [Thread-183065] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:24:56.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:24:56.763 [DEBUG] [Thread-183065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:24:56.763 [DEBUG] [Thread-183065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:24:56.763 [DEBUG] [Thread-183065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:24:56.804 [DEBUG] [Thread-183065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:24:56.804 [DEBUG] [Thread-183065] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:24:56.807 [DEBUG] [Thread-183065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:24:56.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:24:56.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:24:56.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:24:56.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:24:56.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:24:56.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:24:56.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:24:56.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:24:56.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:24:56.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.308448 -999.00  +10.10  21.46     72   +5.30 1 1 1 1 1   888    0 5.56 28.10 ----- 21.6 21.5 160.2 35.5 15.9 -27.0 14.8 -25.1 13.6 -24.1 14.4 -26.3
2026-02-14T09:24:56.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:24:56.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:24:56.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.308448
2026-02-14T09:24:56.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:24:56.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:24:56.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:24:56.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:24:56.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:24:56.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:24:31', tmtdew=6.13, humidity=65.81, cloud=0.0, wind=34.65, temperature=10.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:24:09.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:24:56.830 [DEBUG] [Thread-183065] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:24:56.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-14T09:24:56.926 [DEBUG] [Thread-183068] [transport.py] [_log()] starting thread (client mode): 0xa5758580
2026-02-14T09:24:56.926 [DEBUG] [Thread-183068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:24:56.940 [DEBUG] [Thread-183068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:24:56.941 [INFO] [Thread-183068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:24:56.948 [DEBUG] [Thread-183068] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:24:56.949 [DEBUG] [Thread-183068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:24:56.949 [DEBUG] [Thread-183068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:24:56.949 [DEBUG] [Thread-183068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:24:56.949 [DEBUG] [Thread-183068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:24:56.949 [DEBUG] [Thread-183068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:24:56.949 [DEBUG] [Thread-183068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:24:56.949 [DEBUG] [Thread-183068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:24:56.949 [DEBUG] [Thread-183068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:24:56.949 [DEBUG] [Thread-183068] [transport.py] [_log()] client lang: <none>
2026-02-14T09:24:56.949 [DEBUG] [Thread-183068] [transport.py] [_log()] server lang: <none>
2026-02-14T09:24:56.949 [DEBUG] [Thread-183068] [transport.py] [_log()] kex follows: False
2026-02-14T09:24:56.949 [DEBUG] [Thread-183068] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:24:56.949 [DEBUG] [Thread-183068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:24:56.949 [DEBUG] [Thread-183068] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:24:56.949 [DEBUG] [Thread-183068] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:24:56.949 [DEBUG] [Thread-183068] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:24:56.950 [DEBUG] [Thread-183068] [transport.py] [_log()] Compression: none
2026-02-14T09:24:56.950 [DEBUG] [Thread-183068] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:24:57.005 [DEBUG] [Thread-183068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:24:57.006 [DEBUG] [Thread-183068] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:24:57.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:24:57.007 [DEBUG] [Thread-183068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:24:57.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:24:57.061 [DEBUG] [Thread-183068] [transport.py] [_log()] userauth is OK
2026-02-14T09:24:57.062 [DEBUG] [Thread-183068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:24:57.062 [DEBUG] [Thread-183068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:24:57.062 [DEBUG] [Thread-183068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:24:57.062 [DEBUG] [Thread-183068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:24:57.082 [INFO] [Thread-183068] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:24:57.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-14T09:24:57.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:24:57.901 [DEBUG] [Thread-183068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:24:57.902 [DEBUG] [Thread-183068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:24:57.950 [DEBUG] [Thread-183068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:24:57.950 [DEBUG] [Thread-183068] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:24:57.959 [DEBUG] [Thread-183068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:24:57.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:24:57.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:24:57.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-14T09:24:57.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:24:57.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:24:57.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:24:57.996 [DEBUG] [Thread-183068] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:25:08.991 [DEBUG] [Thread-183070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:25:13.926 [DEBUG] [Thread-183071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:25:24.049 [DEBUG] [Thread-183072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:25:27.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:25:27.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:25:27.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-14T09:25:29.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 25, 6), 5.94, 66.64, 0.0, 35.98, 10.2, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:25:29.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:25:06
2026-02-14T09:25:30.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:25:30.345 [DEBUG] [Thread-183073] [transport.py] [_log()] starting thread (client mode): 0xa2d3c880
2026-02-14T09:25:30.346 [DEBUG] [Thread-183073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:25:30.364 [DEBUG] [Thread-183073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:25:30.365 [INFO] [Thread-183073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:25:30.368 [DEBUG] [Thread-183073] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:25:30.368 [DEBUG] [Thread-183073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:25:30.368 [DEBUG] [Thread-183073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:25:30.368 [DEBUG] [Thread-183073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:25:30.368 [DEBUG] [Thread-183073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:25:30.369 [DEBUG] [Thread-183073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:25:30.369 [DEBUG] [Thread-183073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:25:30.369 [DEBUG] [Thread-183073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:25:30.369 [DEBUG] [Thread-183073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:25:30.369 [DEBUG] [Thread-183073] [transport.py] [_log()] client lang: <none>
2026-02-14T09:25:30.369 [DEBUG] [Thread-183073] [transport.py] [_log()] server lang: <none>
2026-02-14T09:25:30.369 [DEBUG] [Thread-183073] [transport.py] [_log()] kex follows: False
2026-02-14T09:25:30.369 [DEBUG] [Thread-183073] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:25:30.369 [DEBUG] [Thread-183073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:25:30.369 [DEBUG] [Thread-183073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:25:30.369 [DEBUG] [Thread-183073] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:25:30.369 [DEBUG] [Thread-183073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:25:30.370 [DEBUG] [Thread-183073] [transport.py] [_log()] Compression: none
2026-02-14T09:25:30.370 [DEBUG] [Thread-183073] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:25:30.389 [DEBUG] [Thread-183073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:25:30.390 [DEBUG] [Thread-183073] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:25:30.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:25:30.392 [DEBUG] [Thread-183073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:25:30.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:25:30.394 [DEBUG] [Thread-183073] [transport.py] [_log()] userauth is OK
2026-02-14T09:25:30.395 [DEBUG] [Thread-183073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:25:30.395 [DEBUG] [Thread-183073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:25:30.395 [DEBUG] [Thread-183073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:25:30.395 [DEBUG] [Thread-183073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:25:30.428 [INFO] [Thread-183073] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:25:30.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:25:31.006 [DEBUG] [Thread-183073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:25:31.007 [DEBUG] [Thread-183073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:25:31.007 [DEBUG] [Thread-183073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:25:31.048 [DEBUG] [Thread-183073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:25:31.048 [DEBUG] [Thread-183073] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:25:31.051 [DEBUG] [Thread-183073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:25:31.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:25:31.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:25:31.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:25:31.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:25:31.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:25:31.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:25:31.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:25:31.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:25:31.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:25:31.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.308795 -999.00  +10.40  28.32     71   +5.40 1 1 1 1 1   888    0 5.52 28.14 ----- 24.9 28.3 172.4 34.9 15.7 -23.9 14.8 -25.9 13.6 -24.9 14.4 -25.5
2026-02-14T09:25:31.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:25:31.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:25:31.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.308795
2026-02-14T09:25:31.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:25:31.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:25:31.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:25:31.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:25:31.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:25:31.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:25:06', tmtdew=5.94, humidity=66.64, cloud=0.0, wind=35.98, temperature=10.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:24:39.888', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:25:31.079 [DEBUG] [Thread-183073] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:25:31.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T09:25:31.190 [DEBUG] [Thread-183076] [transport.py] [_log()] starting thread (client mode): 0xa2d558d0
2026-02-14T09:25:31.190 [DEBUG] [Thread-183076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:25:31.204 [DEBUG] [Thread-183076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:25:31.205 [INFO] [Thread-183076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:25:31.212 [DEBUG] [Thread-183076] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:25:31.212 [DEBUG] [Thread-183076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:25:31.212 [DEBUG] [Thread-183076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:25:31.212 [DEBUG] [Thread-183076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:25:31.212 [DEBUG] [Thread-183076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:25:31.213 [DEBUG] [Thread-183076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:25:31.213 [DEBUG] [Thread-183076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:25:31.213 [DEBUG] [Thread-183076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:25:31.213 [DEBUG] [Thread-183076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:25:31.213 [DEBUG] [Thread-183076] [transport.py] [_log()] client lang: <none>
2026-02-14T09:25:31.213 [DEBUG] [Thread-183076] [transport.py] [_log()] server lang: <none>
2026-02-14T09:25:31.213 [DEBUG] [Thread-183076] [transport.py] [_log()] kex follows: False
2026-02-14T09:25:31.213 [DEBUG] [Thread-183076] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:25:31.214 [DEBUG] [Thread-183076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:25:31.214 [DEBUG] [Thread-183076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:25:31.214 [DEBUG] [Thread-183076] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:25:31.214 [DEBUG] [Thread-183076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:25:31.214 [DEBUG] [Thread-183076] [transport.py] [_log()] Compression: none
2026-02-14T09:25:31.214 [DEBUG] [Thread-183076] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:25:31.273 [DEBUG] [Thread-183076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:25:31.274 [DEBUG] [Thread-183076] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:25:31.274 [DEBUG] [Thread-183076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:25:31.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:25:31.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:25:31.329 [DEBUG] [Thread-183076] [transport.py] [_log()] userauth is OK
2026-02-14T09:25:31.329 [DEBUG] [Thread-183076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:25:31.329 [DEBUG] [Thread-183076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:25:31.330 [DEBUG] [Thread-183076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:25:31.330 [DEBUG] [Thread-183076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:25:31.348 [INFO] [Thread-183076] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:25:31.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-14T09:25:31.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:25:32.178 [DEBUG] [Thread-183076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:25:32.178 [DEBUG] [Thread-183076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:25:32.226 [DEBUG] [Thread-183076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:25:32.227 [DEBUG] [Thread-183076] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:25:32.235 [DEBUG] [Thread-183076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:25:32.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:25:32.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:25:32.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:25:32.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:25:32.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:25:32.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:25:32.272 [DEBUG] [Thread-183076] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:25:39.085 [DEBUG] [Thread-183078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:25:50.365 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:25:50.366 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:25:54.137 [DEBUG] [Thread-183079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:26:02.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:26:02.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:26:02.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:26:04.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 25, 42), 6.46, 64.32, 0.0, 39.62, 10.97, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:26:04.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:25:42
2026-02-14T09:26:04.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:26:04.682 [DEBUG] [Thread-183080] [transport.py] [_log()] starting thread (client mode): 0xa5743550
2026-02-14T09:26:04.683 [DEBUG] [Thread-183080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:26:04.704 [DEBUG] [Thread-183080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:26:04.704 [INFO] [Thread-183080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:26:04.708 [DEBUG] [Thread-183080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:26:04.708 [DEBUG] [Thread-183080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:26:04.708 [DEBUG] [Thread-183080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:26:04.708 [DEBUG] [Thread-183080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:26:04.708 [DEBUG] [Thread-183080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:26:04.708 [DEBUG] [Thread-183080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:26:04.708 [DEBUG] [Thread-183080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:26:04.708 [DEBUG] [Thread-183080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:26:04.708 [DEBUG] [Thread-183080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:26:04.708 [DEBUG] [Thread-183080] [transport.py] [_log()] client lang: <none>
2026-02-14T09:26:04.708 [DEBUG] [Thread-183080] [transport.py] [_log()] server lang: <none>
2026-02-14T09:26:04.708 [DEBUG] [Thread-183080] [transport.py] [_log()] kex follows: False
2026-02-14T09:26:04.708 [DEBUG] [Thread-183080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:26:04.708 [DEBUG] [Thread-183080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:26:04.708 [DEBUG] [Thread-183080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:26:04.708 [DEBUG] [Thread-183080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:26:04.708 [DEBUG] [Thread-183080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:26:04.708 [DEBUG] [Thread-183080] [transport.py] [_log()] Compression: none
2026-02-14T09:26:04.708 [DEBUG] [Thread-183080] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:26:04.726 [DEBUG] [Thread-183080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:26:04.726 [DEBUG] [Thread-183080] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:26:04.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:26:04.728 [DEBUG] [Thread-183080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:26:04.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:26:04.730 [DEBUG] [Thread-183080] [transport.py] [_log()] userauth is OK
2026-02-14T09:26:04.730 [DEBUG] [Thread-183080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:26:04.730 [DEBUG] [Thread-183080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:26:04.730 [DEBUG] [Thread-183080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:26:04.730 [DEBUG] [Thread-183080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:26:04.767 [INFO] [Thread-183080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:26:04.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:26:05.451 [DEBUG] [Thread-183080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:26:05.452 [DEBUG] [Thread-183080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:26:05.452 [DEBUG] [Thread-183080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:26:05.492 [DEBUG] [Thread-183080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:26:05.493 [DEBUG] [Thread-183080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:26:05.496 [DEBUG] [Thread-183080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:26:05.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:26:05.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:26:05.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:26:05.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:26:05.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:26:05.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:26:05.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:26:05.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:26:05.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:26:05.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.309142 -999.00  +10.50  24.38     70   +5.40 1 1 1 1 1   888    0 5.54 27.20 ----- 25.4 24.4 176.2 30.3 15.9 -21.8 14.6 -25.7 13.8 -22.1 14.5 -22.4
2026-02-14T09:26:05.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:26:05.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:26:05.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.309142
2026-02-14T09:26:05.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:26:05.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:26:05.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:26:05.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:26:05.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:26:05.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:25:42', tmtdew=6.46, humidity=64.32, cloud=0.0, wind=39.62, temperature=10.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:25:09.869', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:26:05.523 [DEBUG] [Thread-183080] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:26:05.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T09:26:05.623 [DEBUG] [Thread-183083] [transport.py] [_log()] starting thread (client mode): 0xa5741a80
2026-02-14T09:26:05.623 [DEBUG] [Thread-183083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:26:05.638 [DEBUG] [Thread-183083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:26:05.638 [INFO] [Thread-183083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:26:05.645 [DEBUG] [Thread-183083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:26:05.645 [DEBUG] [Thread-183083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:26:05.645 [DEBUG] [Thread-183083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:26:05.645 [DEBUG] [Thread-183083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:26:05.645 [DEBUG] [Thread-183083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:26:05.645 [DEBUG] [Thread-183083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:26:05.645 [DEBUG] [Thread-183083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:26:05.645 [DEBUG] [Thread-183083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:26:05.645 [DEBUG] [Thread-183083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:26:05.645 [DEBUG] [Thread-183083] [transport.py] [_log()] client lang: <none>
2026-02-14T09:26:05.645 [DEBUG] [Thread-183083] [transport.py] [_log()] server lang: <none>
2026-02-14T09:26:05.645 [DEBUG] [Thread-183083] [transport.py] [_log()] kex follows: False
2026-02-14T09:26:05.645 [DEBUG] [Thread-183083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:26:05.645 [DEBUG] [Thread-183083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:26:05.645 [DEBUG] [Thread-183083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:26:05.645 [DEBUG] [Thread-183083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:26:05.646 [DEBUG] [Thread-183083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:26:05.646 [DEBUG] [Thread-183083] [transport.py] [_log()] Compression: none
2026-02-14T09:26:05.646 [DEBUG] [Thread-183083] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:26:05.705 [DEBUG] [Thread-183083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:26:05.705 [DEBUG] [Thread-183083] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:26:05.706 [DEBUG] [Thread-183083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:26:05.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:26:05.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:26:05.760 [DEBUG] [Thread-183083] [transport.py] [_log()] userauth is OK
2026-02-14T09:26:05.761 [DEBUG] [Thread-183083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:26:05.761 [DEBUG] [Thread-183083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:26:05.761 [DEBUG] [Thread-183083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:26:05.761 [DEBUG] [Thread-183083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:26:05.776 [INFO] [Thread-183083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:26:05.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-14T09:26:05.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:26:06.607 [DEBUG] [Thread-183083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:26:06.607 [DEBUG] [Thread-183083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:26:06.655 [DEBUG] [Thread-183083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:26:06.656 [DEBUG] [Thread-183083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:26:06.665 [DEBUG] [Thread-183083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:26:06.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:26:06.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:26:06.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:26:06.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:26:06.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:26:06.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:26:06.701 [DEBUG] [Thread-183083] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:26:09.173 [DEBUG] [Thread-183085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:26:13.960 [DEBUG] [Thread-183086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:26:24.233 [DEBUG] [Thread-183087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:26:36.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:26:36.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:26:36.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-14T09:26:38.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 26, 17), 6.21, 65.51, 0.0, 33.65, 10.22, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:26:38.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:26:17
2026-02-14T09:26:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:26:39.107 [DEBUG] [Thread-183088] [transport.py] [_log()] starting thread (client mode): 0xa2d7a050
2026-02-14T09:26:39.108 [DEBUG] [Thread-183088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:26:39.127 [DEBUG] [Thread-183088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:26:39.128 [INFO] [Thread-183088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:26:39.131 [DEBUG] [Thread-183088] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:26:39.131 [DEBUG] [Thread-183088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:26:39.131 [DEBUG] [Thread-183088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:26:39.131 [DEBUG] [Thread-183088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:26:39.131 [DEBUG] [Thread-183088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:26:39.131 [DEBUG] [Thread-183088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:26:39.132 [DEBUG] [Thread-183088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:26:39.132 [DEBUG] [Thread-183088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:26:39.132 [DEBUG] [Thread-183088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:26:39.132 [DEBUG] [Thread-183088] [transport.py] [_log()] client lang: <none>
2026-02-14T09:26:39.132 [DEBUG] [Thread-183088] [transport.py] [_log()] server lang: <none>
2026-02-14T09:26:39.132 [DEBUG] [Thread-183088] [transport.py] [_log()] kex follows: False
2026-02-14T09:26:39.132 [DEBUG] [Thread-183088] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:26:39.132 [DEBUG] [Thread-183088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:26:39.132 [DEBUG] [Thread-183088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:26:39.132 [DEBUG] [Thread-183088] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:26:39.132 [DEBUG] [Thread-183088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:26:39.132 [DEBUG] [Thread-183088] [transport.py] [_log()] Compression: none
2026-02-14T09:26:39.132 [DEBUG] [Thread-183088] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:26:39.149 [DEBUG] [Thread-183088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:26:39.149 [DEBUG] [Thread-183088] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:26:39.149 [DEBUG] [Thread-183088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:26:39.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:26:39.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:26:39.150 [DEBUG] [Thread-183088] [transport.py] [_log()] userauth is OK
2026-02-14T09:26:39.150 [DEBUG] [Thread-183088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:26:39.150 [DEBUG] [Thread-183088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:26:39.150 [DEBUG] [Thread-183088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:26:39.150 [DEBUG] [Thread-183088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:26:39.161 [INFO] [Thread-183088] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:26:39.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:26:39.269 [DEBUG] [Thread-183090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:26:39.988 [DEBUG] [Thread-183088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:26:39.989 [DEBUG] [Thread-183088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:26:39.989 [DEBUG] [Thread-183088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:26:40.029 [DEBUG] [Thread-183088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:26:40.029 [DEBUG] [Thread-183088] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:26:40.032 [DEBUG] [Thread-183088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:26:40.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:26:40.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:26:40.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:26:40.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:26:40.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:26:40.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:26:40.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:26:40.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:26:40.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:26:40.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.309837 -999.00  +11.00  17.53     69   +5.70 1 2 1 1 1   888    0 5.62 33.10 ----- 22.0 17.5 160.6 26.3 16.3 -23.2 14.7 -22.7 13.9 -21.8 14.8 -22.7
2026-02-14T09:26:40.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:26:40.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:26:40.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.309837
2026-02-14T09:26:40.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:26:40.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:26:40.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:26:40.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:26:40.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:26:40.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:26:17', tmtdew=6.21, humidity=65.51, cloud=0.0, wind=33.65, temperature=10.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:26:09.917', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:26:40.059 [DEBUG] [Thread-183088] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:26:40.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-14T09:26:40.155 [DEBUG] [Thread-183092] [transport.py] [_log()] starting thread (client mode): 0xa57c2740
2026-02-14T09:26:40.155 [DEBUG] [Thread-183092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:26:40.170 [DEBUG] [Thread-183092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:26:40.170 [INFO] [Thread-183092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:26:40.178 [DEBUG] [Thread-183092] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:26:40.178 [DEBUG] [Thread-183092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:26:40.178 [DEBUG] [Thread-183092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:26:40.178 [DEBUG] [Thread-183092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:26:40.178 [DEBUG] [Thread-183092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:26:40.178 [DEBUG] [Thread-183092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:26:40.178 [DEBUG] [Thread-183092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:26:40.178 [DEBUG] [Thread-183092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:26:40.178 [DEBUG] [Thread-183092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:26:40.178 [DEBUG] [Thread-183092] [transport.py] [_log()] client lang: <none>
2026-02-14T09:26:40.179 [DEBUG] [Thread-183092] [transport.py] [_log()] server lang: <none>
2026-02-14T09:26:40.179 [DEBUG] [Thread-183092] [transport.py] [_log()] kex follows: False
2026-02-14T09:26:40.179 [DEBUG] [Thread-183092] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:26:40.179 [DEBUG] [Thread-183092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:26:40.179 [DEBUG] [Thread-183092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:26:40.179 [DEBUG] [Thread-183092] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:26:40.179 [DEBUG] [Thread-183092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:26:40.179 [DEBUG] [Thread-183092] [transport.py] [_log()] Compression: none
2026-02-14T09:26:40.179 [DEBUG] [Thread-183092] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:26:40.236 [DEBUG] [Thread-183092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:26:40.237 [DEBUG] [Thread-183092] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:26:40.237 [DEBUG] [Thread-183092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:26:40.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:26:40.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:26:40.292 [DEBUG] [Thread-183092] [transport.py] [_log()] userauth is OK
2026-02-14T09:26:40.293 [DEBUG] [Thread-183092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:26:40.293 [DEBUG] [Thread-183092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:26:40.293 [DEBUG] [Thread-183092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:26:40.293 [DEBUG] [Thread-183092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:26:40.313 [INFO] [Thread-183092] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:26:40.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-14T09:26:40.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:26:41.160 [DEBUG] [Thread-183092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:26:41.161 [DEBUG] [Thread-183092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:26:41.209 [DEBUG] [Thread-183092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:26:41.209 [DEBUG] [Thread-183092] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:26:41.222 [DEBUG] [Thread-183092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:26:41.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:26:41.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-14T09:26:41.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-14T09:26:41.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:26:41.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:26:41.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:26:41.268 [DEBUG] [Thread-183092] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:26:50.505 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:26:50.506 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:26:54.310 [DEBUG] [Thread-183094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:27:09.361 [DEBUG] [Thread-183095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:27:11.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:27:11.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:27:11.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:27:13.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 26, 52), 6.02, 66.12, 0.0, 30.95, 10.33, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:27:13.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:26:52
2026-02-14T09:27:13.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:27:13.629 [DEBUG] [Thread-183096] [transport.py] [_log()] starting thread (client mode): 0xa57c2950
2026-02-14T09:27:13.629 [DEBUG] [Thread-183096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:27:13.649 [DEBUG] [Thread-183096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:27:13.649 [INFO] [Thread-183096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:27:13.651 [DEBUG] [Thread-183096] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:27:13.651 [DEBUG] [Thread-183096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:27:13.651 [DEBUG] [Thread-183096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:27:13.651 [DEBUG] [Thread-183096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:27:13.651 [DEBUG] [Thread-183096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:27:13.651 [DEBUG] [Thread-183096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:27:13.651 [DEBUG] [Thread-183096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:27:13.651 [DEBUG] [Thread-183096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:27:13.651 [DEBUG] [Thread-183096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:27:13.651 [DEBUG] [Thread-183096] [transport.py] [_log()] client lang: <none>
2026-02-14T09:27:13.651 [DEBUG] [Thread-183096] [transport.py] [_log()] server lang: <none>
2026-02-14T09:27:13.652 [DEBUG] [Thread-183096] [transport.py] [_log()] kex follows: False
2026-02-14T09:27:13.652 [DEBUG] [Thread-183096] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:27:13.652 [DEBUG] [Thread-183096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:27:13.652 [DEBUG] [Thread-183096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:27:13.652 [DEBUG] [Thread-183096] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:27:13.652 [DEBUG] [Thread-183096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:27:13.652 [DEBUG] [Thread-183096] [transport.py] [_log()] Compression: none
2026-02-14T09:27:13.652 [DEBUG] [Thread-183096] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:27:13.673 [DEBUG] [Thread-183096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:27:13.674 [DEBUG] [Thread-183096] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:27:13.675 [DEBUG] [Thread-183096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:27:13.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:27:13.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:27:13.677 [DEBUG] [Thread-183096] [transport.py] [_log()] userauth is OK
2026-02-14T09:27:13.678 [DEBUG] [Thread-183096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:27:13.678 [DEBUG] [Thread-183096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:27:13.678 [DEBUG] [Thread-183096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:27:13.678 [DEBUG] [Thread-183096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:27:13.703 [INFO] [Thread-183096] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:27:13.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:27:13.996 [DEBUG] [Thread-183098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:27:14.295 [DEBUG] [Thread-183096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:27:14.295 [DEBUG] [Thread-183096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:27:14.296 [DEBUG] [Thread-183096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:27:14.337 [DEBUG] [Thread-183096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:27:14.337 [DEBUG] [Thread-183096] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:27:14.340 [DEBUG] [Thread-183096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:27:14.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:27:14.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:27:14.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:27:14.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:27:14.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:27:14.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:27:14.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:27:14.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:27:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:27:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.310184 -999.00  +11.30  23.52     67   +5.60 1 2 1 1 1   888    0 5.73 34.39 ----- 25.9 23.5 163.0 31.6 16.4 -22.7 15.2 -21.1 14.1 -21.4 14.9 -22.6
2026-02-14T09:27:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:27:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:27:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.310184
2026-02-14T09:27:14.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:27:14.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:27:14.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:27:14.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:27:14.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:27:14.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:26:52', tmtdew=6.02, humidity=66.12, cloud=0.0, wind=30.95, temperature=10.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:26:39.898', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:27:14.368 [DEBUG] [Thread-183096] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:27:14.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-14T09:27:14.461 [DEBUG] [Thread-183100] [transport.py] [_log()] starting thread (client mode): 0xa57c2710
2026-02-14T09:27:14.461 [DEBUG] [Thread-183100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:27:14.475 [DEBUG] [Thread-183100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:27:14.475 [INFO] [Thread-183100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:27:14.483 [DEBUG] [Thread-183100] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:27:14.484 [DEBUG] [Thread-183100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:27:14.484 [DEBUG] [Thread-183100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:27:14.484 [DEBUG] [Thread-183100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:27:14.484 [DEBUG] [Thread-183100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:27:14.484 [DEBUG] [Thread-183100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:27:14.484 [DEBUG] [Thread-183100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:27:14.484 [DEBUG] [Thread-183100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:27:14.484 [DEBUG] [Thread-183100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:27:14.485 [DEBUG] [Thread-183100] [transport.py] [_log()] client lang: <none>
2026-02-14T09:27:14.485 [DEBUG] [Thread-183100] [transport.py] [_log()] server lang: <none>
2026-02-14T09:27:14.485 [DEBUG] [Thread-183100] [transport.py] [_log()] kex follows: False
2026-02-14T09:27:14.485 [DEBUG] [Thread-183100] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:27:14.485 [DEBUG] [Thread-183100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:27:14.485 [DEBUG] [Thread-183100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:27:14.485 [DEBUG] [Thread-183100] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:27:14.485 [DEBUG] [Thread-183100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:27:14.486 [DEBUG] [Thread-183100] [transport.py] [_log()] Compression: none
2026-02-14T09:27:14.486 [DEBUG] [Thread-183100] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:27:14.544 [DEBUG] [Thread-183100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:27:14.545 [DEBUG] [Thread-183100] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:27:14.546 [DEBUG] [Thread-183100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:27:14.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:27:14.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:27:14.600 [DEBUG] [Thread-183100] [transport.py] [_log()] userauth is OK
2026-02-14T09:27:14.600 [DEBUG] [Thread-183100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:27:14.600 [DEBUG] [Thread-183100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:27:14.600 [DEBUG] [Thread-183100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:27:14.600 [DEBUG] [Thread-183100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:27:14.619 [INFO] [Thread-183100] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:27:14.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-14T09:27:14.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:27:15.469 [DEBUG] [Thread-183100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:27:15.470 [DEBUG] [Thread-183100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:27:15.518 [DEBUG] [Thread-183100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:27:15.518 [DEBUG] [Thread-183100] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:27:15.528 [DEBUG] [Thread-183100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:27:15.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:27:15.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')
2026-02-14T09:27:15.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:27:15.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:27:15.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:27:15.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:27:15.565 [DEBUG] [Thread-183100] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:27:24.399 [DEBUG] [Thread-183102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:27:39.452 [DEBUG] [Thread-183103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:27:45.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:27:45.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:27:45.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:27:47.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 27, 27), 6.1, 65.77, 0.0, 30.72, 10.4, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:27:47.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:27:27
2026-02-14T09:27:47.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:27:47.969 [DEBUG] [Thread-183104] [transport.py] [_log()] starting thread (client mode): 0xa2d3f160
2026-02-14T09:27:47.969 [DEBUG] [Thread-183104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:27:47.988 [DEBUG] [Thread-183104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:27:47.988 [INFO] [Thread-183104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:27:47.992 [DEBUG] [Thread-183104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:27:47.992 [DEBUG] [Thread-183104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:27:47.992 [DEBUG] [Thread-183104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:27:47.992 [DEBUG] [Thread-183104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:27:47.992 [DEBUG] [Thread-183104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:27:47.992 [DEBUG] [Thread-183104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:27:47.992 [DEBUG] [Thread-183104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:27:47.992 [DEBUG] [Thread-183104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:27:47.992 [DEBUG] [Thread-183104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:27:47.992 [DEBUG] [Thread-183104] [transport.py] [_log()] client lang: <none>
2026-02-14T09:27:47.992 [DEBUG] [Thread-183104] [transport.py] [_log()] server lang: <none>
2026-02-14T09:27:47.992 [DEBUG] [Thread-183104] [transport.py] [_log()] kex follows: False
2026-02-14T09:27:47.993 [DEBUG] [Thread-183104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:27:47.993 [DEBUG] [Thread-183104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:27:47.993 [DEBUG] [Thread-183104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:27:47.993 [DEBUG] [Thread-183104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:27:47.993 [DEBUG] [Thread-183104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:27:47.993 [DEBUG] [Thread-183104] [transport.py] [_log()] Compression: none
2026-02-14T09:27:47.993 [DEBUG] [Thread-183104] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:27:48.010 [DEBUG] [Thread-183104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:27:48.011 [DEBUG] [Thread-183104] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:27:48.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:27:48.012 [DEBUG] [Thread-183104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:27:48.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:27:48.015 [DEBUG] [Thread-183104] [transport.py] [_log()] userauth is OK
2026-02-14T09:27:48.015 [DEBUG] [Thread-183104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:27:48.015 [DEBUG] [Thread-183104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:27:48.015 [DEBUG] [Thread-183104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:27:48.015 [DEBUG] [Thread-183104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:27:48.035 [INFO] [Thread-183104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:27:48.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:27:48.670 [DEBUG] [Thread-183104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:27:48.670 [DEBUG] [Thread-183104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:27:48.671 [DEBUG] [Thread-183104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:27:48.711 [DEBUG] [Thread-183104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:27:48.712 [DEBUG] [Thread-183104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:27:48.715 [DEBUG] [Thread-183104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:27:48.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:27:48.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:27:48.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:27:48.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:27:48.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:27:48.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:27:48.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:27:48.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:27:48.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:27:48.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.310531 -999.00  +10.80  32.46     68   +5.20 1 2 2 1 1   888    0 6.10 44.20 ----- 33.3 32.5 155.9 42.4 16.4 -23.9 15.4 -22.0 14.1 -23.3 14.9 -24.8
2026-02-14T09:27:48.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:27:48.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:27:48.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.310531
2026-02-14T09:27:48.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:27:48.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:27:48.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:27:48.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:27:48.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:27:48.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:27:27', tmtdew=6.1, humidity=65.77, cloud=0.0, wind=30.72, temperature=10.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:27:09.878', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:27:48.744 [DEBUG] [Thread-183104] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:27:48.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-14T09:27:48.840 [DEBUG] [Thread-183107] [transport.py] [_log()] starting thread (client mode): 0xa2d3c610
2026-02-14T09:27:48.841 [DEBUG] [Thread-183107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:27:48.856 [DEBUG] [Thread-183107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:27:48.856 [INFO] [Thread-183107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:27:48.863 [DEBUG] [Thread-183107] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:27:48.864 [DEBUG] [Thread-183107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:27:48.864 [DEBUG] [Thread-183107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:27:48.864 [DEBUG] [Thread-183107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:27:48.864 [DEBUG] [Thread-183107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:27:48.864 [DEBUG] [Thread-183107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:27:48.864 [DEBUG] [Thread-183107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:27:48.864 [DEBUG] [Thread-183107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:27:48.864 [DEBUG] [Thread-183107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:27:48.864 [DEBUG] [Thread-183107] [transport.py] [_log()] client lang: <none>
2026-02-14T09:27:48.864 [DEBUG] [Thread-183107] [transport.py] [_log()] server lang: <none>
2026-02-14T09:27:48.864 [DEBUG] [Thread-183107] [transport.py] [_log()] kex follows: False
2026-02-14T09:27:48.864 [DEBUG] [Thread-183107] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:27:48.864 [DEBUG] [Thread-183107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:27:48.864 [DEBUG] [Thread-183107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:27:48.864 [DEBUG] [Thread-183107] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:27:48.864 [DEBUG] [Thread-183107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:27:48.865 [DEBUG] [Thread-183107] [transport.py] [_log()] Compression: none
2026-02-14T09:27:48.865 [DEBUG] [Thread-183107] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:27:48.923 [DEBUG] [Thread-183107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:27:48.924 [DEBUG] [Thread-183107] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:27:48.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:27:48.925 [DEBUG] [Thread-183107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:27:48.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:27:48.983 [DEBUG] [Thread-183107] [transport.py] [_log()] userauth is OK
2026-02-14T09:27:48.984 [DEBUG] [Thread-183107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:27:48.984 [DEBUG] [Thread-183107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:27:48.984 [DEBUG] [Thread-183107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:27:48.993 [DEBUG] [Thread-183107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:27:49.013 [INFO] [Thread-183107] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:27: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-14T09:27:49.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:27:49.852 [DEBUG] [Thread-183107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:27:49.852 [DEBUG] [Thread-183107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:27:49.901 [DEBUG] [Thread-183107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:27:49.901 [DEBUG] [Thread-183107] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:27:49.910 [DEBUG] [Thread-183107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:27:49.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:27:49.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-14T09:27:49.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-14T09:27:49.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:27:49.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:27:49.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:27:49.947 [DEBUG] [Thread-183107] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:27:50.647 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:27:50.648 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:27:54.490 [DEBUG] [Thread-183109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:28:09.545 [DEBUG] [Thread-183110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:28:14.033 [DEBUG] [Thread-183111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:28:19.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:28:19.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:28:19.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:28:22.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 28, 3), 6.1, 65.81, 0.0, 29.45, 10.45, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:28:22.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:28:03
2026-02-14T09:28:22.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:28:22.640 [DEBUG] [Thread-183112] [transport.py] [_log()] starting thread (client mode): 0xa2d3d420
2026-02-14T09:28:22.640 [DEBUG] [Thread-183112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:28:22.660 [DEBUG] [Thread-183112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:28:22.661 [INFO] [Thread-183112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:28:22.663 [DEBUG] [Thread-183112] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:28:22.663 [DEBUG] [Thread-183112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:28:22.663 [DEBUG] [Thread-183112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:28:22.663 [DEBUG] [Thread-183112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:28:22.663 [DEBUG] [Thread-183112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:28:22.663 [DEBUG] [Thread-183112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:28:22.663 [DEBUG] [Thread-183112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:28:22.663 [DEBUG] [Thread-183112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:28:22.664 [DEBUG] [Thread-183112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:28:22.664 [DEBUG] [Thread-183112] [transport.py] [_log()] client lang: <none>
2026-02-14T09:28:22.664 [DEBUG] [Thread-183112] [transport.py] [_log()] server lang: <none>
2026-02-14T09:28:22.664 [DEBUG] [Thread-183112] [transport.py] [_log()] kex follows: False
2026-02-14T09:28:22.664 [DEBUG] [Thread-183112] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:28:22.664 [DEBUG] [Thread-183112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:28:22.664 [DEBUG] [Thread-183112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:28:22.664 [DEBUG] [Thread-183112] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:28:22.664 [DEBUG] [Thread-183112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:28:22.664 [DEBUG] [Thread-183112] [transport.py] [_log()] Compression: none
2026-02-14T09:28:22.664 [DEBUG] [Thread-183112] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:28:22.681 [DEBUG] [Thread-183112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:28:22.681 [DEBUG] [Thread-183112] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:28:22.681 [DEBUG] [Thread-183112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:28:22.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:28:22.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:28:22.682 [DEBUG] [Thread-183112] [transport.py] [_log()] userauth is OK
2026-02-14T09:28:22.682 [DEBUG] [Thread-183112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:28:22.682 [DEBUG] [Thread-183112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:28:22.682 [DEBUG] [Thread-183112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:28:22.682 [DEBUG] [Thread-183112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:28:22.696 [INFO] [Thread-183112] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:28:22.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:28:23.317 [DEBUG] [Thread-183112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:28:23.317 [DEBUG] [Thread-183112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:28:23.318 [DEBUG] [Thread-183112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:28:23.358 [DEBUG] [Thread-183112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:28:23.358 [DEBUG] [Thread-183112] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:28:23.361 [DEBUG] [Thread-183112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:28:23.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:28:23.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:28:23.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:28:23.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:28:23.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:28:23.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:28:23.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:28:23.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:28:23.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:28:23.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.310878 -999.00  +10.40  25.15     69   +5.20 1 1 1 1 1   888    0 6.33 51.62 ----- 29.6 25.1 163.4 40.1 16.4 -24.4 15.3 -23.5 14.0 -23.6 14.9 -24.4
2026-02-14T09:28:23.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:28:23.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:28:23.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.310878
2026-02-14T09:28:23.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:28:23.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:28:23.387 [DEBUG] [Thread-183112] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:28:23.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:28:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:28:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:28:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:28:03', tmtdew=6.1, humidity=65.81, cloud=0.0, wind=29.45, temperature=10.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:27:39.859', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:28:23.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-14T09:28:23.483 [DEBUG] [Thread-183115] [transport.py] [_log()] starting thread (client mode): 0xa2db64a0
2026-02-14T09:28:23.483 [DEBUG] [Thread-183115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:28:23.497 [DEBUG] [Thread-183115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:28:23.497 [INFO] [Thread-183115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:28:23.505 [DEBUG] [Thread-183115] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:28:23.505 [DEBUG] [Thread-183115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:28:23.505 [DEBUG] [Thread-183115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:28:23.505 [DEBUG] [Thread-183115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:28:23.506 [DEBUG] [Thread-183115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:28:23.506 [DEBUG] [Thread-183115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:28:23.506 [DEBUG] [Thread-183115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:28:23.506 [DEBUG] [Thread-183115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:28:23.506 [DEBUG] [Thread-183115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:28:23.506 [DEBUG] [Thread-183115] [transport.py] [_log()] client lang: <none>
2026-02-14T09:28:23.506 [DEBUG] [Thread-183115] [transport.py] [_log()] server lang: <none>
2026-02-14T09:28:23.506 [DEBUG] [Thread-183115] [transport.py] [_log()] kex follows: False
2026-02-14T09:28:23.506 [DEBUG] [Thread-183115] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:28:23.506 [DEBUG] [Thread-183115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:28:23.506 [DEBUG] [Thread-183115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:28:23.506 [DEBUG] [Thread-183115] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:28:23.506 [DEBUG] [Thread-183115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:28:23.506 [DEBUG] [Thread-183115] [transport.py] [_log()] Compression: none
2026-02-14T09:28:23.506 [DEBUG] [Thread-183115] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:28:23.567 [DEBUG] [Thread-183115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:28:23.567 [DEBUG] [Thread-183115] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:28:23.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:28:23.569 [DEBUG] [Thread-183115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:28:23.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:28:23.623 [DEBUG] [Thread-183115] [transport.py] [_log()] userauth is OK
2026-02-14T09:28:23.623 [DEBUG] [Thread-183115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:28:23.624 [DEBUG] [Thread-183115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:28:23.624 [DEBUG] [Thread-183115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:28:23.624 [DEBUG] [Thread-183115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:28:23.642 [INFO] [Thread-183115] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:28:23.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-14T09:28:23.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:28:24.452 [DEBUG] [Thread-183115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:28:24.452 [DEBUG] [Thread-183115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:28:24.500 [DEBUG] [Thread-183115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:28:24.501 [DEBUG] [Thread-183115] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:28:24.510 [DEBUG] [Thread-183115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:28:24.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:28:24.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-14T09:28:24.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-14T09:28:24.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:28:24.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:28:24.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:28:24.547 [DEBUG] [Thread-183115] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:28:24.581 [DEBUG] [Thread-183117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:28:39.635 [DEBUG] [Thread-183118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:28:50.787 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:28:50.788 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:28:54.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:28:54.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:28:54.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:28:54.672 [DEBUG] [Thread-183119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:28:56.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 28, 39), 6.5, 64.15, 0.0, 30.94, 10.83, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:28:56.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:28:39
2026-02-14T09:28:56.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:28:56.941 [DEBUG] [Thread-183120] [transport.py] [_log()] starting thread (client mode): 0xa2d783a0
2026-02-14T09:28:56.941 [DEBUG] [Thread-183120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:28:56.961 [DEBUG] [Thread-183120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:28:56.961 [INFO] [Thread-183120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:28:56.964 [DEBUG] [Thread-183120] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:28:56.964 [DEBUG] [Thread-183120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:28:56.964 [DEBUG] [Thread-183120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:28:56.964 [DEBUG] [Thread-183120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:28:56.964 [DEBUG] [Thread-183120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:28:56.964 [DEBUG] [Thread-183120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:28:56.964 [DEBUG] [Thread-183120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:28:56.965 [DEBUG] [Thread-183120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:28:56.965 [DEBUG] [Thread-183120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:28:56.965 [DEBUG] [Thread-183120] [transport.py] [_log()] client lang: <none>
2026-02-14T09:28:56.965 [DEBUG] [Thread-183120] [transport.py] [_log()] server lang: <none>
2026-02-14T09:28:56.965 [DEBUG] [Thread-183120] [transport.py] [_log()] kex follows: False
2026-02-14T09:28:56.965 [DEBUG] [Thread-183120] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:28:56.965 [DEBUG] [Thread-183120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:28:56.965 [DEBUG] [Thread-183120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:28:56.965 [DEBUG] [Thread-183120] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:28:56.965 [DEBUG] [Thread-183120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:28:56.965 [DEBUG] [Thread-183120] [transport.py] [_log()] Compression: none
2026-02-14T09:28:56.965 [DEBUG] [Thread-183120] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:28:56.983 [DEBUG] [Thread-183120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:28:56.983 [DEBUG] [Thread-183120] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:28:56.984 [DEBUG] [Thread-183120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:28:56.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:28:56.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:28:56.986 [DEBUG] [Thread-183120] [transport.py] [_log()] userauth is OK
2026-02-14T09:28:56.986 [DEBUG] [Thread-183120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:28:56.986 [DEBUG] [Thread-183120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:28:56.986 [DEBUG] [Thread-183120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:28:56.987 [DEBUG] [Thread-183120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:28:57.012 [INFO] [Thread-183120] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:28:57.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:28:57.627 [DEBUG] [Thread-183120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:28:57.628 [DEBUG] [Thread-183120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:28:57.628 [DEBUG] [Thread-183120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:28:57.668 [DEBUG] [Thread-183120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:28:57.669 [DEBUG] [Thread-183120] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:28:57.672 [DEBUG] [Thread-183120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:28:57.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:28:57.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:28:57.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:28:57.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:28:57.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:28:57.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:28:57.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:28:57.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:28:57.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:28:57.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.311225 -999.00  +10.60  25.44     70   +5.40 1 2 1 1 1   888    0 6.18 48.54 ----- 27.8 25.4 169.8 32.3 16.6 -23.4 15.4 -22.3 14.1 -23.0 15.0 -24.7
2026-02-14T09:28:57.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:28:57.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:28:57.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.311225
2026-02-14T09:28:57.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:28:57.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:28:57.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:28:57.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:28:57.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:28:57.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:28:39', tmtdew=6.5, humidity=64.15, cloud=0.0, wind=30.94, temperature=10.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:28:09.840', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:28:57.700 [DEBUG] [Thread-183120] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:28:57.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T09:28:57.796 [DEBUG] [Thread-183123] [transport.py] [_log()] starting thread (client mode): 0xa2d3ffa0
2026-02-14T09:28:57.797 [DEBUG] [Thread-183123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:28:57.814 [DEBUG] [Thread-183123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:28:57.814 [INFO] [Thread-183123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:28:57.822 [DEBUG] [Thread-183123] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:28:57.822 [DEBUG] [Thread-183123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:28:57.822 [DEBUG] [Thread-183123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:28:57.822 [DEBUG] [Thread-183123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:28:57.822 [DEBUG] [Thread-183123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:28:57.822 [DEBUG] [Thread-183123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:28:57.822 [DEBUG] [Thread-183123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:28:57.822 [DEBUG] [Thread-183123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:28:57.822 [DEBUG] [Thread-183123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:28:57.823 [DEBUG] [Thread-183123] [transport.py] [_log()] client lang: <none>
2026-02-14T09:28:57.823 [DEBUG] [Thread-183123] [transport.py] [_log()] server lang: <none>
2026-02-14T09:28:57.823 [DEBUG] [Thread-183123] [transport.py] [_log()] kex follows: False
2026-02-14T09:28:57.823 [DEBUG] [Thread-183123] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:28:57.823 [DEBUG] [Thread-183123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:28:57.823 [DEBUG] [Thread-183123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:28:57.823 [DEBUG] [Thread-183123] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:28:57.823 [DEBUG] [Thread-183123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:28:57.823 [DEBUG] [Thread-183123] [transport.py] [_log()] Compression: none
2026-02-14T09:28:57.823 [DEBUG] [Thread-183123] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:28:57.882 [DEBUG] [Thread-183123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:28:57.883 [DEBUG] [Thread-183123] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:28:57.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:28:57.884 [DEBUG] [Thread-183123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:28:57.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:28:57.942 [DEBUG] [Thread-183123] [transport.py] [_log()] userauth is OK
2026-02-14T09:28:57.943 [DEBUG] [Thread-183123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:28:57.943 [DEBUG] [Thread-183123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:28:57.943 [DEBUG] [Thread-183123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:28:57.943 [DEBUG] [Thread-183123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:28:57.968 [INFO] [Thread-183123] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:28:57.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T09:28:57.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:28:58.807 [DEBUG] [Thread-183123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:28:58.808 [DEBUG] [Thread-183123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:28:58.856 [DEBUG] [Thread-183123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:28:58.856 [DEBUG] [Thread-183123] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:28:58.865 [DEBUG] [Thread-183123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:28:58.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:28:58.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-14T09:28:58.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-14T09:28:58.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:28:58.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:28:58.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:28:58.899 [DEBUG] [Thread-183123] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:29:09.707 [DEBUG] [Thread-183125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:29:14.078 [DEBUG] [Thread-183126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:29:24.769 [DEBUG] [Thread-183127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:29:28.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:29:28.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:29:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:29:30.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 29, 14), 6.44, 64.36, 0.0, 31.39, 10.68, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:29:30.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:29:14
2026-02-14T09:29:31.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:29:31.253 [DEBUG] [Thread-183128] [transport.py] [_log()] starting thread (client mode): 0xa57c37c0
2026-02-14T09:29:31.254 [DEBUG] [Thread-183128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:29:31.273 [DEBUG] [Thread-183128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:29:31.273 [INFO] [Thread-183128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:29:31.276 [DEBUG] [Thread-183128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:29:31.276 [DEBUG] [Thread-183128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:29:31.276 [DEBUG] [Thread-183128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:29:31.276 [DEBUG] [Thread-183128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:29:31.276 [DEBUG] [Thread-183128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:29:31.276 [DEBUG] [Thread-183128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:29:31.276 [DEBUG] [Thread-183128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:29:31.276 [DEBUG] [Thread-183128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:29:31.276 [DEBUG] [Thread-183128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:29:31.276 [DEBUG] [Thread-183128] [transport.py] [_log()] client lang: <none>
2026-02-14T09:29:31.276 [DEBUG] [Thread-183128] [transport.py] [_log()] server lang: <none>
2026-02-14T09:29:31.276 [DEBUG] [Thread-183128] [transport.py] [_log()] kex follows: False
2026-02-14T09:29:31.276 [DEBUG] [Thread-183128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:29:31.277 [DEBUG] [Thread-183128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:29:31.277 [DEBUG] [Thread-183128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:29:31.277 [DEBUG] [Thread-183128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:29:31.277 [DEBUG] [Thread-183128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:29:31.277 [DEBUG] [Thread-183128] [transport.py] [_log()] Compression: none
2026-02-14T09:29:31.277 [DEBUG] [Thread-183128] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:29:31.285 [DEBUG] [Thread-183128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:29:31.286 [DEBUG] [Thread-183128] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:29:31.286 [DEBUG] [Thread-183128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:29:31.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:29:31.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:29:31.288 [DEBUG] [Thread-183128] [transport.py] [_log()] userauth is OK
2026-02-14T09:29:31.288 [DEBUG] [Thread-183128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:29:31.288 [DEBUG] [Thread-183128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:29:31.288 [DEBUG] [Thread-183128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:29:31.288 [DEBUG] [Thread-183128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:29:31.310 [INFO] [Thread-183128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:29:31.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:29:32.092 [DEBUG] [Thread-183128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:29:32.093 [DEBUG] [Thread-183128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:29:32.093 [DEBUG] [Thread-183128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:29:32.133 [DEBUG] [Thread-183128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:29:32.134 [DEBUG] [Thread-183128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:29:32.137 [DEBUG] [Thread-183128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:29:32.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:29:32.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:29:32.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:29:32.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:29:32.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:29:32.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:29:32.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:29:32.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:29:32.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:29:32.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.311573 -999.00  +10.80  26.47     69   +5.50 1 1 1 1 1   888    0 6.43 51.58 ----- 23.5 26.5 182.6 30.8 16.1 -25.6 15.3 -24.7 14.0 -25.7 14.7 -25.8
2026-02-14T09:29:32.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:29:32.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:29:32.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.311573
2026-02-14T09:29:32.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:29:32.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:29:32.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:29:32.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:29:32.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:29:32.164 [DEBUG] [Thread-183128] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:29:32.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:29:14', tmtdew=6.44, humidity=64.36, cloud=0.0, wind=31.39, temperature=10.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:28:39.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:29:32.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-14T09:29:32.260 [DEBUG] [Thread-183131] [transport.py] [_log()] starting thread (client mode): 0xa57c0160
2026-02-14T09:29:32.260 [DEBUG] [Thread-183131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:29:32.275 [DEBUG] [Thread-183131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:29:32.275 [INFO] [Thread-183131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:29:32.283 [DEBUG] [Thread-183131] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:29:32.283 [DEBUG] [Thread-183131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:29:32.283 [DEBUG] [Thread-183131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:29:32.283 [DEBUG] [Thread-183131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:29:32.283 [DEBUG] [Thread-183131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:29:32.283 [DEBUG] [Thread-183131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:29:32.283 [DEBUG] [Thread-183131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:29:32.283 [DEBUG] [Thread-183131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:29:32.283 [DEBUG] [Thread-183131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:29:32.283 [DEBUG] [Thread-183131] [transport.py] [_log()] client lang: <none>
2026-02-14T09:29:32.283 [DEBUG] [Thread-183131] [transport.py] [_log()] server lang: <none>
2026-02-14T09:29:32.283 [DEBUG] [Thread-183131] [transport.py] [_log()] kex follows: False
2026-02-14T09:29:32.283 [DEBUG] [Thread-183131] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:29:32.284 [DEBUG] [Thread-183131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:29:32.284 [DEBUG] [Thread-183131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:29:32.284 [DEBUG] [Thread-183131] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:29:32.284 [DEBUG] [Thread-183131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:29:32.284 [DEBUG] [Thread-183131] [transport.py] [_log()] Compression: none
2026-02-14T09:29:32.284 [DEBUG] [Thread-183131] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:29:32.342 [DEBUG] [Thread-183131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:29:32.343 [DEBUG] [Thread-183131] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:29:32.343 [DEBUG] [Thread-183131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:29:32.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:29:32.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:29:32.398 [DEBUG] [Thread-183131] [transport.py] [_log()] userauth is OK
2026-02-14T09:29:32.399 [DEBUG] [Thread-183131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:29:32.399 [DEBUG] [Thread-183131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:29:32.399 [DEBUG] [Thread-183131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:29:32.399 [DEBUG] [Thread-183131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:29:32.417 [INFO] [Thread-183131] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:29:32.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T09:29:32.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:29:33.253 [DEBUG] [Thread-183131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:29:33.253 [DEBUG] [Thread-183131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:29:33.301 [DEBUG] [Thread-183131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:29:33.301 [DEBUG] [Thread-183131] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:29:33.310 [DEBUG] [Thread-183131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:29:33.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:29:33.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:29:33.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-14T09:29:33.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:29:33.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:29:33.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:29:33.345 [DEBUG] [Thread-183131] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:29:39.807 [DEBUG] [Thread-183133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:29:50.927 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:29:50.928 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:29:54.863 [DEBUG] [Thread-183134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:30:03.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:30:03.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:30:03.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-14T09:30:05.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 29, 50), 6.43, 64.16, 0.0, 32.61, 10.68, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:30:05.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:29:50
2026-02-14T09:30:05.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:30:05.781 [DEBUG] [Thread-183135] [transport.py] [_log()] starting thread (client mode): 0xa2d3f7f0
2026-02-14T09:30:05.781 [DEBUG] [Thread-183135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:30:05.800 [DEBUG] [Thread-183135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:30:05.801 [INFO] [Thread-183135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:30:05.804 [DEBUG] [Thread-183135] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:30:05.804 [DEBUG] [Thread-183135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:30:05.804 [DEBUG] [Thread-183135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:30:05.804 [DEBUG] [Thread-183135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:30:05.804 [DEBUG] [Thread-183135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:30:05.804 [DEBUG] [Thread-183135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:30:05.804 [DEBUG] [Thread-183135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:30:05.804 [DEBUG] [Thread-183135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:30:05.804 [DEBUG] [Thread-183135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:30:05.804 [DEBUG] [Thread-183135] [transport.py] [_log()] client lang: <none>
2026-02-14T09:30:05.805 [DEBUG] [Thread-183135] [transport.py] [_log()] server lang: <none>
2026-02-14T09:30:05.805 [DEBUG] [Thread-183135] [transport.py] [_log()] kex follows: False
2026-02-14T09:30:05.805 [DEBUG] [Thread-183135] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:30:05.805 [DEBUG] [Thread-183135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:30:05.805 [DEBUG] [Thread-183135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:30:05.805 [DEBUG] [Thread-183135] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:30:05.805 [DEBUG] [Thread-183135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:30:05.805 [DEBUG] [Thread-183135] [transport.py] [_log()] Compression: none
2026-02-14T09:30:05.805 [DEBUG] [Thread-183135] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:30:05.822 [DEBUG] [Thread-183135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:30:05.823 [DEBUG] [Thread-183135] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:30:05.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:30:05.824 [DEBUG] [Thread-183135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:30:05.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:30:05.826 [DEBUG] [Thread-183135] [transport.py] [_log()] userauth is OK
2026-02-14T09:30:05.826 [DEBUG] [Thread-183135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:30:05.826 [DEBUG] [Thread-183135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:30:05.826 [DEBUG] [Thread-183135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:30:05.826 [DEBUG] [Thread-183135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:30:05.844 [INFO] [Thread-183135] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:30:05.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:30:06.716 [DEBUG] [Thread-183135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:30:06.716 [DEBUG] [Thread-183135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:30:06.717 [DEBUG] [Thread-183135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:30:06.757 [DEBUG] [Thread-183135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:30:06.757 [DEBUG] [Thread-183135] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:30:06.760 [DEBUG] [Thread-183135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:30:06.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:30:06.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:30:06.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:30:06.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:30:06.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:30:06.858 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:30:06.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:30:06.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:30:06.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:30:06.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.311920 -999.00  +10.80  20.75     69   +5.30 1 1 1 1 1   888    0 6.41 53.59 ----- 29.7 20.8 172.6 35.6 15.7 -26.5 14.9 -28.2 13.7 -26.3 14.4 -27.4
2026-02-14T09:30:06.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:30:06.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:30:06.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.311920
2026-02-14T09:30:06.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:30:06.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:30:06.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:30:06.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:30:06.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:30:06.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:29:50', tmtdew=6.43, humidity=64.16, cloud=0.0, wind=32.61, temperature=10.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:29:09.888', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:30:06.860 [DEBUG] [Thread-183135] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:30:06.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-14T09:30:06.960 [DEBUG] [Thread-183138] [transport.py] [_log()] starting thread (client mode): 0xa2ddff70
2026-02-14T09:30:06.960 [DEBUG] [Thread-183138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:30:06.975 [DEBUG] [Thread-183138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:30:06.975 [INFO] [Thread-183138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:30:06.982 [DEBUG] [Thread-183138] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:30:06.982 [DEBUG] [Thread-183138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:30:06.982 [DEBUG] [Thread-183138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:30:06.982 [DEBUG] [Thread-183138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:30:06.983 [DEBUG] [Thread-183138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:30:06.983 [DEBUG] [Thread-183138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:30:06.983 [DEBUG] [Thread-183138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:30:06.983 [DEBUG] [Thread-183138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:30:06.983 [DEBUG] [Thread-183138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:30:06.983 [DEBUG] [Thread-183138] [transport.py] [_log()] client lang: <none>
2026-02-14T09:30:06.983 [DEBUG] [Thread-183138] [transport.py] [_log()] server lang: <none>
2026-02-14T09:30:06.983 [DEBUG] [Thread-183138] [transport.py] [_log()] kex follows: False
2026-02-14T09:30:06.983 [DEBUG] [Thread-183138] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:30:06.983 [DEBUG] [Thread-183138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:30:06.983 [DEBUG] [Thread-183138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:30:06.983 [DEBUG] [Thread-183138] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:30:06.983 [DEBUG] [Thread-183138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:30:06.983 [DEBUG] [Thread-183138] [transport.py] [_log()] Compression: none
2026-02-14T09:30:06.983 [DEBUG] [Thread-183138] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:30:07.040 [DEBUG] [Thread-183138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:30:07.041 [DEBUG] [Thread-183138] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:30:07.041 [DEBUG] [Thread-183138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:30:07.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:30:07.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:30:07.097 [DEBUG] [Thread-183138] [transport.py] [_log()] userauth is OK
2026-02-14T09:30:07.098 [DEBUG] [Thread-183138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:30:07.098 [DEBUG] [Thread-183138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:30:07.098 [DEBUG] [Thread-183138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:30:07.098 [DEBUG] [Thread-183138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:30:07.117 [INFO] [Thread-183138] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:30:07.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-14T09:30:07.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:30:07.959 [DEBUG] [Thread-183138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:30:07.960 [DEBUG] [Thread-183138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:30:08.008 [DEBUG] [Thread-183138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:30:08.008 [DEBUG] [Thread-183138] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:30:08.017 [DEBUG] [Thread-183138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:30:08.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:30:08.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-14T09:30:08.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:30:08.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:30:08.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:30:08.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:30:08.051 [DEBUG] [Thread-183138] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:30:09.893 [DEBUG] [Thread-183140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:30:14.112 [DEBUG] [Thread-183141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:30:24.933 [DEBUG] [Thread-183142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:30:38.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:30:38.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:30:38.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-14T09:30:39.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 30, 25), 6.45, 64.11, 0.0, 33.22, 10.73, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:30:39.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:30:25
2026-02-14T09:30:39.961 [DEBUG] [Thread-183143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:30:40.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:30:40.399 [DEBUG] [Thread-183144] [transport.py] [_log()] starting thread (client mode): 0xa57c23b0
2026-02-14T09:30:40.400 [DEBUG] [Thread-183144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:30:40.419 [DEBUG] [Thread-183144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:30:40.419 [INFO] [Thread-183144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:30:40.423 [DEBUG] [Thread-183144] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:30:40.423 [DEBUG] [Thread-183144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:30:40.423 [DEBUG] [Thread-183144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:30:40.423 [DEBUG] [Thread-183144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:30:40.423 [DEBUG] [Thread-183144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:30:40.423 [DEBUG] [Thread-183144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:30:40.423 [DEBUG] [Thread-183144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:30:40.423 [DEBUG] [Thread-183144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:30:40.423 [DEBUG] [Thread-183144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:30:40.424 [DEBUG] [Thread-183144] [transport.py] [_log()] client lang: <none>
2026-02-14T09:30:40.424 [DEBUG] [Thread-183144] [transport.py] [_log()] server lang: <none>
2026-02-14T09:30:40.424 [DEBUG] [Thread-183144] [transport.py] [_log()] kex follows: False
2026-02-14T09:30:40.424 [DEBUG] [Thread-183144] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:30:40.424 [DEBUG] [Thread-183144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:30:40.424 [DEBUG] [Thread-183144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:30:40.424 [DEBUG] [Thread-183144] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:30:40.424 [DEBUG] [Thread-183144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:30:40.424 [DEBUG] [Thread-183144] [transport.py] [_log()] Compression: none
2026-02-14T09:30:40.424 [DEBUG] [Thread-183144] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:30:40.443 [DEBUG] [Thread-183144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:30:40.444 [DEBUG] [Thread-183144] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:30:40.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:30:40.446 [DEBUG] [Thread-183144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:30:40.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:30:40.448 [DEBUG] [Thread-183144] [transport.py] [_log()] userauth is OK
2026-02-14T09:30:40.448 [DEBUG] [Thread-183144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:30:40.449 [DEBUG] [Thread-183144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:30:40.449 [DEBUG] [Thread-183144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:30:40.449 [DEBUG] [Thread-183144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:30:40.481 [INFO] [Thread-183144] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:30:40.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:30:41.150 [DEBUG] [Thread-183144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:30:41.150 [DEBUG] [Thread-183144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:30:41.151 [DEBUG] [Thread-183144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:30:41.191 [DEBUG] [Thread-183144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:30:41.192 [DEBUG] [Thread-183144] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:30:41.195 [DEBUG] [Thread-183144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:30:41.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:30:41.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:30:41.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:30:41.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:30:41.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:30:41.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:30:41.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:30:41.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:30:41.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:30:41.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.312267 -999.00  +10.40  35.61     70   +5.20 1 1 2 1 1   888    0 6.48 53.54 ----- 35.0 35.6 160.6 44.6 15.2 -24.5 14.7 -23.9 13.6 -24.9 14.2 -25.2
2026-02-14T09:30:41.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:30:41.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:30:41.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.312267
2026-02-14T09:30:41.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:30:41.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:30:41.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:30:41.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:30:41.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:30:41.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:30:25', tmtdew=6.45, humidity=64.11, cloud=0.0, wind=33.22, temperature=10.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:29:39.869', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:30:41.223 [DEBUG] [Thread-183144] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:30:41.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-14T09:30:41.329 [DEBUG] [Thread-183147] [transport.py] [_log()] starting thread (client mode): 0xa2db6530
2026-02-14T09:30:41.329 [DEBUG] [Thread-183147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:30:41.343 [DEBUG] [Thread-183147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:30:41.343 [INFO] [Thread-183147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:30:41.350 [DEBUG] [Thread-183147] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:30:41.350 [DEBUG] [Thread-183147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:30:41.350 [DEBUG] [Thread-183147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:30:41.350 [DEBUG] [Thread-183147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:30:41.351 [DEBUG] [Thread-183147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:30:41.351 [DEBUG] [Thread-183147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:30:41.351 [DEBUG] [Thread-183147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:30:41.351 [DEBUG] [Thread-183147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:30:41.351 [DEBUG] [Thread-183147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:30:41.351 [DEBUG] [Thread-183147] [transport.py] [_log()] client lang: <none>
2026-02-14T09:30:41.351 [DEBUG] [Thread-183147] [transport.py] [_log()] server lang: <none>
2026-02-14T09:30:41.351 [DEBUG] [Thread-183147] [transport.py] [_log()] kex follows: False
2026-02-14T09:30:41.351 [DEBUG] [Thread-183147] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:30:41.351 [DEBUG] [Thread-183147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:30:41.351 [DEBUG] [Thread-183147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:30:41.351 [DEBUG] [Thread-183147] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:30:41.351 [DEBUG] [Thread-183147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:30:41.351 [DEBUG] [Thread-183147] [transport.py] [_log()] Compression: none
2026-02-14T09:30:41.351 [DEBUG] [Thread-183147] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:30:41.409 [DEBUG] [Thread-183147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:30:41.410 [DEBUG] [Thread-183147] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:30:41.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:30:41.411 [DEBUG] [Thread-183147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:30:41.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:30:41.465 [DEBUG] [Thread-183147] [transport.py] [_log()] userauth is OK
2026-02-14T09:30:41.466 [DEBUG] [Thread-183147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:30:41.466 [DEBUG] [Thread-183147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:30:41.466 [DEBUG] [Thread-183147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:30:41.466 [DEBUG] [Thread-183147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:30:41.484 [INFO] [Thread-183147] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:30:41.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-14T09:30:41.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:30:42.296 [DEBUG] [Thread-183147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:30:42.297 [DEBUG] [Thread-183147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:30:42.344 [DEBUG] [Thread-183147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:30:42.344 [DEBUG] [Thread-183147] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:30:42.354 [DEBUG] [Thread-183147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:30:42.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:30:42.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-14T09:30:42.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-14T09:30:42.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:30:42.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:30:42.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:30:42.391 [DEBUG] [Thread-183147] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:30:51.069 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:30:51.070 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:30:54.996 [DEBUG] [Thread-183149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:31:10.037 [DEBUG] [Thread-183150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:31:12.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:31:12.413 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:31:12.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:31:14.156 [DEBUG] [Thread-183151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:31:14.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 31), 6.08, 65.94, 0.0, 32.43, 10.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:31:14.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:31:00
2026-02-14T09:31:14.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:31:14.744 [DEBUG] [Thread-183152] [transport.py] [_log()] starting thread (client mode): 0xa5741f30
2026-02-14T09:31:14.744 [DEBUG] [Thread-183152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:31:14.764 [DEBUG] [Thread-183152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:31:14.764 [INFO] [Thread-183152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:31:14.767 [DEBUG] [Thread-183152] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:31:14.767 [DEBUG] [Thread-183152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:31:14.767 [DEBUG] [Thread-183152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:31:14.767 [DEBUG] [Thread-183152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:31:14.767 [DEBUG] [Thread-183152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:31:14.767 [DEBUG] [Thread-183152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:31:14.768 [DEBUG] [Thread-183152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:31:14.768 [DEBUG] [Thread-183152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:31:14.768 [DEBUG] [Thread-183152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:31:14.768 [DEBUG] [Thread-183152] [transport.py] [_log()] client lang: <none>
2026-02-14T09:31:14.768 [DEBUG] [Thread-183152] [transport.py] [_log()] server lang: <none>
2026-02-14T09:31:14.768 [DEBUG] [Thread-183152] [transport.py] [_log()] kex follows: False
2026-02-14T09:31:14.768 [DEBUG] [Thread-183152] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:31:14.768 [DEBUG] [Thread-183152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:31:14.768 [DEBUG] [Thread-183152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:31:14.768 [DEBUG] [Thread-183152] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:31:14.768 [DEBUG] [Thread-183152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:31:14.768 [DEBUG] [Thread-183152] [transport.py] [_log()] Compression: none
2026-02-14T09:31:14.768 [DEBUG] [Thread-183152] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:31:14.788 [DEBUG] [Thread-183152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:31:14.789 [DEBUG] [Thread-183152] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:31:14.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:31:14.791 [DEBUG] [Thread-183152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:31:14.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:31:14.793 [DEBUG] [Thread-183152] [transport.py] [_log()] userauth is OK
2026-02-14T09:31:14.794 [DEBUG] [Thread-183152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:31:14.794 [DEBUG] [Thread-183152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:31:14.794 [DEBUG] [Thread-183152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:31:14.794 [DEBUG] [Thread-183152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:31:14.815 [INFO] [Thread-183152] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:31:14.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:31:15.440 [DEBUG] [Thread-183152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:31:15.441 [DEBUG] [Thread-183152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:31:15.441 [DEBUG] [Thread-183152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:31:15.481 [DEBUG] [Thread-183152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:31:15.481 [DEBUG] [Thread-183152] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:31:15.485 [DEBUG] [Thread-183152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:31:15.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:31:15.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:31:15.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:31:15.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:31:15.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:31:15.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:31:15.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:31:15.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:31:15.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:31:15.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.312962 -999.00  +10.20  23.89     71   +5.20 1 1 1 1 1   888    0 6.44 48.99 ----- 27.2 23.9 197.0 37.9 14.8 -22.4 13.8 -24.0 13.2 -23.4 13.8 -26.1
2026-02-14T09:31:15.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:31:15.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:31:15.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.312962
2026-02-14T09:31:15.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:31:15.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:31:15.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:31:15.512 [DEBUG] [Thread-183152] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:31:15.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:31:15.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:31:15.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:31:00', tmtdew=6.08, humidity=65.94, cloud=0.0, wind=32.43, temperature=10.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:30:39.917', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:31:15.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-14T09:31:15.606 [DEBUG] [Thread-183155] [transport.py] [_log()] starting thread (client mode): 0xa5740190
2026-02-14T09:31:15.606 [DEBUG] [Thread-183155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:31:15.619 [DEBUG] [Thread-183155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:31:15.619 [INFO] [Thread-183155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:31:15.627 [DEBUG] [Thread-183155] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:31:15.627 [DEBUG] [Thread-183155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:31:15.627 [DEBUG] [Thread-183155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:31:15.627 [DEBUG] [Thread-183155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:31:15.627 [DEBUG] [Thread-183155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:31:15.627 [DEBUG] [Thread-183155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:31:15.627 [DEBUG] [Thread-183155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:31:15.627 [DEBUG] [Thread-183155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:31:15.628 [DEBUG] [Thread-183155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:31:15.628 [DEBUG] [Thread-183155] [transport.py] [_log()] client lang: <none>
2026-02-14T09:31:15.628 [DEBUG] [Thread-183155] [transport.py] [_log()] server lang: <none>
2026-02-14T09:31:15.628 [DEBUG] [Thread-183155] [transport.py] [_log()] kex follows: False
2026-02-14T09:31:15.628 [DEBUG] [Thread-183155] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:31:15.628 [DEBUG] [Thread-183155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:31:15.628 [DEBUG] [Thread-183155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:31:15.628 [DEBUG] [Thread-183155] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:31:15.628 [DEBUG] [Thread-183155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:31:15.628 [DEBUG] [Thread-183155] [transport.py] [_log()] Compression: none
2026-02-14T09:31:15.628 [DEBUG] [Thread-183155] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:31:15.684 [DEBUG] [Thread-183155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:31:15.685 [DEBUG] [Thread-183155] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:31:15.686 [DEBUG] [Thread-183155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:31:15.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:31:15.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:31:15.741 [DEBUG] [Thread-183155] [transport.py] [_log()] userauth is OK
2026-02-14T09:31:15.741 [DEBUG] [Thread-183155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:31:15.741 [DEBUG] [Thread-183155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:31:15.741 [DEBUG] [Thread-183155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:31:15.741 [DEBUG] [Thread-183155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:31:15.760 [INFO] [Thread-183155] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:31:15.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-14T09:31:15.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:31:16.548 [DEBUG] [Thread-183155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:31:16.549 [DEBUG] [Thread-183155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:31:16.596 [DEBUG] [Thread-183155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:31:16.597 [DEBUG] [Thread-183155] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:31:16.605 [DEBUG] [Thread-183155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:31:16.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:31:16.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-14T09:31:16.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-14T09:31:16.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:31:16.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:31:16.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:31:16.637 [DEBUG] [Thread-183155] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:31:25.075 [DEBUG] [Thread-183157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:31:40.126 [DEBUG] [Thread-183158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:31:46.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:31:46.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:31:46.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-14T09:31:48.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 31, 35), 6.55, 63.95, 0.0, 33.55, 11.13, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:31:48.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:31:35
2026-02-14T09:31:48.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:31:48.907 [DEBUG] [Thread-183159] [transport.py] [_log()] starting thread (client mode): 0xa2d3d840
2026-02-14T09:31:48.907 [DEBUG] [Thread-183159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:31:48.926 [DEBUG] [Thread-183159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:31:48.926 [INFO] [Thread-183159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:31:48.929 [DEBUG] [Thread-183159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:31:48.929 [DEBUG] [Thread-183159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:31:48.929 [DEBUG] [Thread-183159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:31:48.929 [DEBUG] [Thread-183159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:31:48.929 [DEBUG] [Thread-183159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:31:48.929 [DEBUG] [Thread-183159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:31:48.929 [DEBUG] [Thread-183159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:31:48.929 [DEBUG] [Thread-183159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:31:48.929 [DEBUG] [Thread-183159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:31:48.929 [DEBUG] [Thread-183159] [transport.py] [_log()] client lang: <none>
2026-02-14T09:31:48.930 [DEBUG] [Thread-183159] [transport.py] [_log()] server lang: <none>
2026-02-14T09:31:48.930 [DEBUG] [Thread-183159] [transport.py] [_log()] kex follows: False
2026-02-14T09:31:48.930 [DEBUG] [Thread-183159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:31:48.930 [DEBUG] [Thread-183159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:31:48.930 [DEBUG] [Thread-183159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:31:48.930 [DEBUG] [Thread-183159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:31:48.930 [DEBUG] [Thread-183159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:31:48.930 [DEBUG] [Thread-183159] [transport.py] [_log()] Compression: none
2026-02-14T09:31:48.930 [DEBUG] [Thread-183159] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:31:48.949 [DEBUG] [Thread-183159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:31:48.949 [DEBUG] [Thread-183159] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:31:48.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:31:48.951 [DEBUG] [Thread-183159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:31:48.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:31:48.953 [DEBUG] [Thread-183159] [transport.py] [_log()] userauth is OK
2026-02-14T09:31:48.953 [DEBUG] [Thread-183159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:31:48.953 [DEBUG] [Thread-183159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:31:48.953 [DEBUG] [Thread-183159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:31:48.953 [DEBUG] [Thread-183159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:31:48.967 [INFO] [Thread-183159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:31:48.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:31:49.587 [DEBUG] [Thread-183159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:31:49.587 [DEBUG] [Thread-183159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:31:49.588 [DEBUG] [Thread-183159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:31:49.628 [DEBUG] [Thread-183159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:31:49.629 [DEBUG] [Thread-183159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:31:49.632 [DEBUG] [Thread-183159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:31:49.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:31:49.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:31:49.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:31:49.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:31:49.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:31:49.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:31:49.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:31:49.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:31:49.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:31:49.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.313309 -999.00  +10.00  28.89     71   +5.10 1 1 1 1 1   888    0 5.99 41.80 ----- 22.3 28.9 183.6 37.8 14.4 -20.0 13.8 -24.8 13.0 -24.4 13.8 -24.8
2026-02-14T09:31:49.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:31:49.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:31:49.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.313309
2026-02-14T09:31:49.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:31:49.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:31:49.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:31:49.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:31:49.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:31:49.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:31:35', tmtdew=6.55, humidity=63.95, cloud=0.0, wind=33.55, temperature=11.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:31:09.898', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:31:49.658 [DEBUG] [Thread-183159] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:31:49.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-14T09:31:49.752 [DEBUG] [Thread-183162] [transport.py] [_log()] starting thread (client mode): 0xa57c2590
2026-02-14T09:31:49.752 [DEBUG] [Thread-183162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:31:49.767 [DEBUG] [Thread-183162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:31:49.767 [INFO] [Thread-183162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:31:49.774 [DEBUG] [Thread-183162] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:31:49.775 [DEBUG] [Thread-183162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:31:49.775 [DEBUG] [Thread-183162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:31:49.775 [DEBUG] [Thread-183162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:31:49.775 [DEBUG] [Thread-183162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:31:49.775 [DEBUG] [Thread-183162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:31:49.775 [DEBUG] [Thread-183162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:31:49.776 [DEBUG] [Thread-183162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:31:49.776 [DEBUG] [Thread-183162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:31:49.776 [DEBUG] [Thread-183162] [transport.py] [_log()] client lang: <none>
2026-02-14T09:31:49.776 [DEBUG] [Thread-183162] [transport.py] [_log()] server lang: <none>
2026-02-14T09:31:49.776 [DEBUG] [Thread-183162] [transport.py] [_log()] kex follows: False
2026-02-14T09:31:49.776 [DEBUG] [Thread-183162] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:31:49.776 [DEBUG] [Thread-183162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:31:49.776 [DEBUG] [Thread-183162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:31:49.777 [DEBUG] [Thread-183162] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:31:49.777 [DEBUG] [Thread-183162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:31:49.777 [DEBUG] [Thread-183162] [transport.py] [_log()] Compression: none
2026-02-14T09:31:49.777 [DEBUG] [Thread-183162] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:31:49.832 [DEBUG] [Thread-183162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:31:49.833 [DEBUG] [Thread-183162] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:31:49.833 [DEBUG] [Thread-183162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:31:49.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:31:49.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:31:49.887 [DEBUG] [Thread-183162] [transport.py] [_log()] userauth is OK
2026-02-14T09:31:49.888 [DEBUG] [Thread-183162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:31:49.888 [DEBUG] [Thread-183162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:31:49.888 [DEBUG] [Thread-183162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:31:49.888 [DEBUG] [Thread-183162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:31:49.902 [INFO] [Thread-183162] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:31:49.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-14T09:31:49.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:31:50.763 [DEBUG] [Thread-183162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:31:50.763 [DEBUG] [Thread-183162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:31:50.811 [DEBUG] [Thread-183162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:31:50.811 [DEBUG] [Thread-183162] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:31:50.821 [DEBUG] [Thread-183162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:31:50.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:31:50.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-14T09:31:50.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:31:50.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:31:50.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:31:50.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:31:50.857 [DEBUG] [Thread-183162] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:31:51.209 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:31:51.211 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:31:55.157 [DEBUG] [Thread-183164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:32:10.205 [DEBUG] [Thread-183165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:32:14.190 [DEBUG] [Thread-183166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:32:20.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:32:20.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:32:20.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-14T09:32:23.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 32, 11), 6.0, 66.66, 0.0, 27.07, 10.18, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:32:23.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:32:11
2026-02-14T09:32:23.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:32:23.908 [DEBUG] [Thread-183167] [transport.py] [_log()] starting thread (client mode): 0xa5741e10
2026-02-14T09:32:23.908 [DEBUG] [Thread-183167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:32:23.927 [DEBUG] [Thread-183167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:32:23.927 [INFO] [Thread-183167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:32:23.931 [DEBUG] [Thread-183167] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:32:23.931 [DEBUG] [Thread-183167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:32:23.931 [DEBUG] [Thread-183167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:32:23.931 [DEBUG] [Thread-183167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:32:23.931 [DEBUG] [Thread-183167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:32:23.931 [DEBUG] [Thread-183167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:32:23.931 [DEBUG] [Thread-183167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:32:23.931 [DEBUG] [Thread-183167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:32:23.931 [DEBUG] [Thread-183167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:32:23.931 [DEBUG] [Thread-183167] [transport.py] [_log()] client lang: <none>
2026-02-14T09:32:23.931 [DEBUG] [Thread-183167] [transport.py] [_log()] server lang: <none>
2026-02-14T09:32:23.931 [DEBUG] [Thread-183167] [transport.py] [_log()] kex follows: False
2026-02-14T09:32:23.931 [DEBUG] [Thread-183167] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:32:23.932 [DEBUG] [Thread-183167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:32:23.932 [DEBUG] [Thread-183167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:32:23.932 [DEBUG] [Thread-183167] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:32:23.932 [DEBUG] [Thread-183167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:32:23.932 [DEBUG] [Thread-183167] [transport.py] [_log()] Compression: none
2026-02-14T09:32:23.932 [DEBUG] [Thread-183167] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:32:23.948 [DEBUG] [Thread-183167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:32:23.949 [DEBUG] [Thread-183167] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:32:23.949 [DEBUG] [Thread-183167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:32:23.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:32:23.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:32:23.951 [DEBUG] [Thread-183167] [transport.py] [_log()] userauth is OK
2026-02-14T09:32:23.951 [DEBUG] [Thread-183167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:32:23.952 [DEBUG] [Thread-183167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:32:23.952 [DEBUG] [Thread-183167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:32:23.952 [DEBUG] [Thread-183167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:32:23.975 [INFO] [Thread-183167] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:32:23.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:32:24.753 [DEBUG] [Thread-183167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:32:24.754 [DEBUG] [Thread-183167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:32:24.754 [DEBUG] [Thread-183167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:32:24.794 [DEBUG] [Thread-183167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:32:24.795 [DEBUG] [Thread-183167] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:32:24.798 [DEBUG] [Thread-183167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:32:24.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:32:24.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:32:24.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:32:24.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:32:24.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:32:24.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:32:24.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:32:24.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:32:24.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:32:24.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.313656 -999.00  +10.00  22.60     71   +5.10 1 2 1 1 1   888    0 6.11 43.35 ----- 27.7 22.6 183.0 38.5 14.6 -16.3 13.6 -19.8 13.1 -21.2 13.7 -22.5
2026-02-14T09:32:24.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:32:24.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:32:24.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.313656
2026-02-14T09:32:24.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:32:24.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:32:24.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:32:24.823 [DEBUG] [Thread-183167] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:32:24.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:32:24.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:32:24.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:32:11', tmtdew=6.0, humidity=66.66, cloud=0.0, wind=27.07, temperature=10.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:31:39.878', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:32:24.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T09:32:25.237 [DEBUG] [Thread-183170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:32:40.297 [DEBUG] [Thread-183171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:32:51.348 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:32:51.349 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:32:55.331 [DEBUG] [Thread-183172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:33:10.368 [DEBUG] [Thread-183173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:33:14.222 [DEBUG] [Thread-183174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:33:25.405 [DEBUG] [Thread-183175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:33:40.443 [DEBUG] [Thread-183176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:33:51.491 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:33:51.492 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:33:55.478 [DEBUG] [Thread-183177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:34:10.517 [DEBUG] [Thread-183178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:34:14.267 [DEBUG] [Thread-183179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:34:25.559 [DEBUG] [Thread-183180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:34:39.416 [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-14T09:34:40.600 [DEBUG] [Thread-183181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:34:51.632 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:34:51.633 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:34:55.634 [DEBUG] [Thread-183182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:35:09.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:35:09.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:35:09.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-14T09:35:10.673 [DEBUG] [Thread-183183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:35:11.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 34, 33), 6.92, 62.42, 0.0, 33.8, 11.43, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:35:11.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:34:33
2026-02-14T09:35:12.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:35:12.440 [DEBUG] [Thread-183184] [transport.py] [_log()] starting thread (client mode): 0xa2ddcdf0
2026-02-14T09:35:12.441 [DEBUG] [Thread-183184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:35:12.461 [DEBUG] [Thread-183184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:35:12.461 [INFO] [Thread-183184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:35:12.464 [DEBUG] [Thread-183184] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:35:12.464 [DEBUG] [Thread-183184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:35:12.464 [DEBUG] [Thread-183184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:35:12.464 [DEBUG] [Thread-183184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:35:12.464 [DEBUG] [Thread-183184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:35:12.464 [DEBUG] [Thread-183184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:35:12.464 [DEBUG] [Thread-183184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:35:12.464 [DEBUG] [Thread-183184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:35:12.465 [DEBUG] [Thread-183184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:35:12.465 [DEBUG] [Thread-183184] [transport.py] [_log()] client lang: <none>
2026-02-14T09:35:12.465 [DEBUG] [Thread-183184] [transport.py] [_log()] server lang: <none>
2026-02-14T09:35:12.465 [DEBUG] [Thread-183184] [transport.py] [_log()] kex follows: False
2026-02-14T09:35:12.465 [DEBUG] [Thread-183184] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:35:12.465 [DEBUG] [Thread-183184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:35:12.465 [DEBUG] [Thread-183184] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:35:12.465 [DEBUG] [Thread-183184] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:35:12.465 [DEBUG] [Thread-183184] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:35:12.465 [DEBUG] [Thread-183184] [transport.py] [_log()] Compression: none
2026-02-14T09:35:12.465 [DEBUG] [Thread-183184] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:35:12.484 [DEBUG] [Thread-183184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:35:12.485 [DEBUG] [Thread-183184] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:35:12.486 [DEBUG] [Thread-183184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:35:12.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:35:12.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:35:12.489 [DEBUG] [Thread-183184] [transport.py] [_log()] userauth is OK
2026-02-14T09:35:12.489 [DEBUG] [Thread-183184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:35:12.489 [DEBUG] [Thread-183184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:35:12.490 [DEBUG] [Thread-183184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:35:12.490 [DEBUG] [Thread-183184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:35:12.516 [INFO] [Thread-183184] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:35:12.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:35:13.413 [DEBUG] [Thread-183184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:35:13.413 [DEBUG] [Thread-183184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:35:13.414 [DEBUG] [Thread-183184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:35:13.454 [DEBUG] [Thread-183184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:35:13.455 [DEBUG] [Thread-183184] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:35:13.458 [DEBUG] [Thread-183184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:35:13.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:35:13.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:35:13.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:35:13.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:35:13.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:35:13.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:35:13.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:35:13.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:35:13.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:35:13.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.315739 -999.00  +10.50  26.93     69   +5.20 1 2 1 1 1   888    0 6.02 40.03 ----- 31.0 26.9 174.0 35.1 14.2 -20.0 13.7 -13.6 13.2 -19.7 13.6 -20.5
2026-02-14T09:35:13.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:35:13.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:35:13.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.315739
2026-02-14T09:35:13.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:35:13.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:35:13.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:35:13.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:35:13.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:35:13.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:34:33', tmtdew=6.92, humidity=62.42, cloud=0.0, wind=33.8, temperature=11.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:34:39.850', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:35:13.485 [DEBUG] [Thread-183184] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:35:13.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-14T09:35:13.581 [DEBUG] [Thread-183187] [transport.py] [_log()] starting thread (client mode): 0xa5742140
2026-02-14T09:35:13.581 [DEBUG] [Thread-183187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:35:13.595 [DEBUG] [Thread-183187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:35:13.595 [INFO] [Thread-183187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:35:13.604 [DEBUG] [Thread-183187] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:35:13.604 [DEBUG] [Thread-183187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:35:13.604 [DEBUG] [Thread-183187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:35:13.604 [DEBUG] [Thread-183187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:35:13.604 [DEBUG] [Thread-183187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:35:13.604 [DEBUG] [Thread-183187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:35:13.605 [DEBUG] [Thread-183187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:35:13.605 [DEBUG] [Thread-183187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:35:13.605 [DEBUG] [Thread-183187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:35:13.605 [DEBUG] [Thread-183187] [transport.py] [_log()] client lang: <none>
2026-02-14T09:35:13.605 [DEBUG] [Thread-183187] [transport.py] [_log()] server lang: <none>
2026-02-14T09:35:13.605 [DEBUG] [Thread-183187] [transport.py] [_log()] kex follows: False
2026-02-14T09:35:13.605 [DEBUG] [Thread-183187] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:35:13.605 [DEBUG] [Thread-183187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:35:13.606 [DEBUG] [Thread-183187] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:35:13.606 [DEBUG] [Thread-183187] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:35:13.606 [DEBUG] [Thread-183187] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:35:13.606 [DEBUG] [Thread-183187] [transport.py] [_log()] Compression: none
2026-02-14T09:35:13.606 [DEBUG] [Thread-183187] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:35:13.666 [DEBUG] [Thread-183187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:35:13.667 [DEBUG] [Thread-183187] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:35:13.667 [DEBUG] [Thread-183187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:35:13.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:35:13.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:35:13.722 [DEBUG] [Thread-183187] [transport.py] [_log()] userauth is OK
2026-02-14T09:35:13.722 [DEBUG] [Thread-183187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:35:13.722 [DEBUG] [Thread-183187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:35:13.722 [DEBUG] [Thread-183187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:35:13.722 [DEBUG] [Thread-183187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:35:13.741 [INFO] [Thread-183187] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:35:13.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-14T09:35:13.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:35:14.297 [DEBUG] [Thread-183189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:35:14.546 [DEBUG] [Thread-183187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:35:14.546 [DEBUG] [Thread-183187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:35:14.595 [DEBUG] [Thread-183187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:35:14.595 [DEBUG] [Thread-183187] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:35:14.604 [DEBUG] [Thread-183187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:35:14.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:35:14.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-14T09:35:14.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-14T09:35:14.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:35:14.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:35:14.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:35:14.642 [DEBUG] [Thread-183187] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:35:25.710 [DEBUG] [Thread-183190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:35:40.767 [DEBUG] [Thread-183191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:35:44.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:35:44.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:35:44.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:35:46.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 35, 8), 6.26, 65.03, 0.0, 29.08, 10.58, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:35:46.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:35:08
2026-02-14T09:35:46.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:35:47.083 [DEBUG] [Thread-183192] [transport.py] [_log()] starting thread (client mode): 0xa5759d80
2026-02-14T09:35:47.083 [DEBUG] [Thread-183192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:35:47.103 [DEBUG] [Thread-183192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:35:47.103 [INFO] [Thread-183192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:35:47.106 [DEBUG] [Thread-183192] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:35:47.106 [DEBUG] [Thread-183192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:35:47.106 [DEBUG] [Thread-183192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:35:47.106 [DEBUG] [Thread-183192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:35:47.106 [DEBUG] [Thread-183192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:35:47.106 [DEBUG] [Thread-183192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:35:47.106 [DEBUG] [Thread-183192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:35:47.106 [DEBUG] [Thread-183192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:35:47.107 [DEBUG] [Thread-183192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:35:47.107 [DEBUG] [Thread-183192] [transport.py] [_log()] client lang: <none>
2026-02-14T09:35:47.107 [DEBUG] [Thread-183192] [transport.py] [_log()] server lang: <none>
2026-02-14T09:35:47.107 [DEBUG] [Thread-183192] [transport.py] [_log()] kex follows: False
2026-02-14T09:35:47.107 [DEBUG] [Thread-183192] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:35:47.107 [DEBUG] [Thread-183192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:35:47.107 [DEBUG] [Thread-183192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:35:47.107 [DEBUG] [Thread-183192] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:35:47.107 [DEBUG] [Thread-183192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:35:47.107 [DEBUG] [Thread-183192] [transport.py] [_log()] Compression: none
2026-02-14T09:35:47.107 [DEBUG] [Thread-183192] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:35:47.125 [DEBUG] [Thread-183192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:35:47.125 [DEBUG] [Thread-183192] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:35:47.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:35:47.126 [DEBUG] [Thread-183192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:35:47.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:35:47.128 [DEBUG] [Thread-183192] [transport.py] [_log()] userauth is OK
2026-02-14T09:35:47.128 [DEBUG] [Thread-183192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:35:47.128 [DEBUG] [Thread-183192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:35:47.128 [DEBUG] [Thread-183192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:35:47.129 [DEBUG] [Thread-183192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:35:47.152 [INFO] [Thread-183192] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:35:47.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:35:47.786 [DEBUG] [Thread-183192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:35:47.787 [DEBUG] [Thread-183192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:35:47.787 [DEBUG] [Thread-183192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:35:47.827 [DEBUG] [Thread-183192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:35:47.827 [DEBUG] [Thread-183192] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:35:47.831 [DEBUG] [Thread-183192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:35:47.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:35:47.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:35:47.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:35:47.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:35:47.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:35:47.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:35:47.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:35:47.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:35:47.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:35:47.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.316086 -999.00  +10.30  28.58     70   +5.10 1 2 1 1 1   888    0 6.13 40.66 ----- 30.8 28.6 173.4 34.9 14.0 -20.3 13.4 -17.9 12.9 -18.8 13.4 -22.8
2026-02-14T09:35:47.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:35:47.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:35:47.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.316086
2026-02-14T09:35:47.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:35:47.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:35:47.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:35:47.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:35:47.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:35:47.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:35:08', tmtdew=6.26, humidity=65.03, cloud=0.0, wind=29.08, temperature=10.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:35:09.830', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:35:47.860 [DEBUG] [Thread-183192] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:35:47.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-14T09:35:47.956 [DEBUG] [Thread-183195] [transport.py] [_log()] starting thread (client mode): 0xa2ddf4c0
2026-02-14T09:35:47.956 [DEBUG] [Thread-183195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:35:47.971 [DEBUG] [Thread-183195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:35:47.971 [INFO] [Thread-183195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:35:47.979 [DEBUG] [Thread-183195] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:35:47.979 [DEBUG] [Thread-183195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:35:47.979 [DEBUG] [Thread-183195] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:35:47.979 [DEBUG] [Thread-183195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:35:47.979 [DEBUG] [Thread-183195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:35:47.979 [DEBUG] [Thread-183195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:35:47.979 [DEBUG] [Thread-183195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:35:47.979 [DEBUG] [Thread-183195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:35:47.979 [DEBUG] [Thread-183195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:35:47.979 [DEBUG] [Thread-183195] [transport.py] [_log()] client lang: <none>
2026-02-14T09:35:47.979 [DEBUG] [Thread-183195] [transport.py] [_log()] server lang: <none>
2026-02-14T09:35:47.979 [DEBUG] [Thread-183195] [transport.py] [_log()] kex follows: False
2026-02-14T09:35:47.979 [DEBUG] [Thread-183195] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:35:47.979 [DEBUG] [Thread-183195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:35:47.980 [DEBUG] [Thread-183195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:35:47.980 [DEBUG] [Thread-183195] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:35:47.980 [DEBUG] [Thread-183195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:35:47.980 [DEBUG] [Thread-183195] [transport.py] [_log()] Compression: none
2026-02-14T09:35:47.980 [DEBUG] [Thread-183195] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:35:48.038 [DEBUG] [Thread-183195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:35:48.039 [DEBUG] [Thread-183195] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:35:48.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:35:48.040 [DEBUG] [Thread-183195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:35:48.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:35:48.097 [DEBUG] [Thread-183195] [transport.py] [_log()] userauth is OK
2026-02-14T09:35:48.098 [DEBUG] [Thread-183195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:35:48.098 [DEBUG] [Thread-183195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:35:48.098 [DEBUG] [Thread-183195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:35:48.098 [DEBUG] [Thread-183195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:35:48.117 [INFO] [Thread-183195] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:35:48.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-14T09:35:48.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:35:49.000 [DEBUG] [Thread-183195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:35:49.000 [DEBUG] [Thread-183195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:35:49.048 [DEBUG] [Thread-183195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:35:49.048 [DEBUG] [Thread-183195] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:35:49.058 [DEBUG] [Thread-183195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:35:49.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:35:49.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-14T09:35:49.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:35:49.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:35:49.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:35:49.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:35:49.094 [DEBUG] [Thread-183195] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:35:51.783 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:35:51.784 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:35:55.802 [DEBUG] [Thread-183197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:36:10.856 [DEBUG] [Thread-183198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:36:14.346 [DEBUG] [Thread-183199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:36:19.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:36:19.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:36:19.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-14T09:36:21.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 35, 44), 6.47, 64.53, 0.0, 32.01, 10.45, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:36:21.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:35:44
2026-02-14T09:36:21.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:36:21.804 [DEBUG] [Thread-183200] [transport.py] [_log()] starting thread (client mode): 0xa5758bb0
2026-02-14T09:36:21.804 [DEBUG] [Thread-183200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:36:21.827 [DEBUG] [Thread-183200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:36:21.827 [INFO] [Thread-183200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:36:21.831 [DEBUG] [Thread-183200] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:36:21.831 [DEBUG] [Thread-183200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:36:21.831 [DEBUG] [Thread-183200] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:36:21.831 [DEBUG] [Thread-183200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:36:21.831 [DEBUG] [Thread-183200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:36:21.831 [DEBUG] [Thread-183200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:36:21.831 [DEBUG] [Thread-183200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:36:21.831 [DEBUG] [Thread-183200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:36:21.831 [DEBUG] [Thread-183200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:36:21.831 [DEBUG] [Thread-183200] [transport.py] [_log()] client lang: <none>
2026-02-14T09:36:21.831 [DEBUG] [Thread-183200] [transport.py] [_log()] server lang: <none>
2026-02-14T09:36:21.831 [DEBUG] [Thread-183200] [transport.py] [_log()] kex follows: False
2026-02-14T09:36:21.831 [DEBUG] [Thread-183200] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:36:21.831 [DEBUG] [Thread-183200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:36:21.831 [DEBUG] [Thread-183200] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:36:21.831 [DEBUG] [Thread-183200] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:36:21.831 [DEBUG] [Thread-183200] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:36:21.831 [DEBUG] [Thread-183200] [transport.py] [_log()] Compression: none
2026-02-14T09:36:21.831 [DEBUG] [Thread-183200] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:36:21.849 [DEBUG] [Thread-183200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:36:21.849 [DEBUG] [Thread-183200] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:36:21.850 [DEBUG] [Thread-183200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:36:21.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:36:21.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:36:21.852 [DEBUG] [Thread-183200] [transport.py] [_log()] userauth is OK
2026-02-14T09:36:21.852 [DEBUG] [Thread-183200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:36:21.852 [DEBUG] [Thread-183200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:36:21.852 [DEBUG] [Thread-183200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:36:21.852 [DEBUG] [Thread-183200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:36:21.876 [INFO] [Thread-183200] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:36:21.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:36:22.525 [DEBUG] [Thread-183200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:36:22.525 [DEBUG] [Thread-183200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:36:22.525 [DEBUG] [Thread-183200] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:36:22.566 [DEBUG] [Thread-183200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:36:22.567 [DEBUG] [Thread-183200] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:36:22.570 [DEBUG] [Thread-183200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:36:22.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:36:22.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:36:22.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:36:22.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:36:22.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:36:22.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:36:22.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:36:22.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:36:22.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:36:22.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.316434 -999.00   +9.90  22.79     71   +4.90 1 2 1 1 1   888    0 6.19 41.65 ----- 26.1 22.8 183.8 36.3 13.9 -16.4 13.2 -21.0 12.7 -19.0 13.3 -22.2
2026-02-14T09:36:22.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:36:22.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:36:22.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.316434
2026-02-14T09:36:22.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:36:22.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:36:22.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:36:22.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:36:22.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:36:22.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:35:44', tmtdew=6.47, humidity=64.53, cloud=0.0, wind=32.01, temperature=10.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:35:39.898', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:36:22.598 [DEBUG] [Thread-183200] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:36:22.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-14T09:36:22.693 [DEBUG] [Thread-183203] [transport.py] [_log()] starting thread (client mode): 0xa2d1b160
2026-02-14T09:36:22.693 [DEBUG] [Thread-183203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:36:22.708 [DEBUG] [Thread-183203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:36:22.708 [INFO] [Thread-183203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:36:22.717 [DEBUG] [Thread-183203] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:36:22.717 [DEBUG] [Thread-183203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:36:22.717 [DEBUG] [Thread-183203] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:36:22.717 [DEBUG] [Thread-183203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:36:22.717 [DEBUG] [Thread-183203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:36:22.717 [DEBUG] [Thread-183203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:36:22.717 [DEBUG] [Thread-183203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:36:22.717 [DEBUG] [Thread-183203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:36:22.717 [DEBUG] [Thread-183203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:36:22.717 [DEBUG] [Thread-183203] [transport.py] [_log()] client lang: <none>
2026-02-14T09:36:22.717 [DEBUG] [Thread-183203] [transport.py] [_log()] server lang: <none>
2026-02-14T09:36:22.717 [DEBUG] [Thread-183203] [transport.py] [_log()] kex follows: False
2026-02-14T09:36:22.717 [DEBUG] [Thread-183203] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:36:22.717 [DEBUG] [Thread-183203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:36:22.717 [DEBUG] [Thread-183203] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:36:22.717 [DEBUG] [Thread-183203] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:36:22.717 [DEBUG] [Thread-183203] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:36:22.717 [DEBUG] [Thread-183203] [transport.py] [_log()] Compression: none
2026-02-14T09:36:22.717 [DEBUG] [Thread-183203] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:36:22.772 [DEBUG] [Thread-183203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:36:22.773 [DEBUG] [Thread-183203] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:36:22.773 [DEBUG] [Thread-183203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:36:22.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:36:22.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:36:22.829 [DEBUG] [Thread-183203] [transport.py] [_log()] userauth is OK
2026-02-14T09:36:22.829 [DEBUG] [Thread-183203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:36:22.829 [DEBUG] [Thread-183203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:36:22.829 [DEBUG] [Thread-183203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:36:22.829 [DEBUG] [Thread-183203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:36:22.848 [INFO] [Thread-183203] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:36:22.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-14T09:36:22.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:36:23.651 [DEBUG] [Thread-183203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:36:23.651 [DEBUG] [Thread-183203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:36:23.699 [DEBUG] [Thread-183203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:36:23.700 [DEBUG] [Thread-183203] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:36:23.709 [DEBUG] [Thread-183203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:36:23.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:36:23.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-14T09:36:23.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:36:23.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:36:23.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:36:23.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:36:23.746 [DEBUG] [Thread-183203] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:36:25.894 [DEBUG] [Thread-183205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:36:40.947 [DEBUG] [Thread-183206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:36:51.928 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:36:51.929 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:36:53.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:36:53.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:36:53.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-14T09:36:55.985 [DEBUG] [Thread-183207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:36:56.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 36, 19), 6.25, 65.48, 0.0, 34.67, 10.3, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:36:56.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:36:19
2026-02-14T09:36:56.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:36:56.803 [DEBUG] [Thread-183208] [transport.py] [_log()] starting thread (client mode): 0xa2d19e70
2026-02-14T09:36:56.803 [DEBUG] [Thread-183208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:36:56.824 [DEBUG] [Thread-183208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:36:56.825 [INFO] [Thread-183208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:36:56.828 [DEBUG] [Thread-183208] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:36:56.828 [DEBUG] [Thread-183208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:36:56.828 [DEBUG] [Thread-183208] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:36:56.828 [DEBUG] [Thread-183208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:36:56.828 [DEBUG] [Thread-183208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:36:56.828 [DEBUG] [Thread-183208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:36:56.828 [DEBUG] [Thread-183208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:36:56.828 [DEBUG] [Thread-183208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:36:56.828 [DEBUG] [Thread-183208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:36:56.828 [DEBUG] [Thread-183208] [transport.py] [_log()] client lang: <none>
2026-02-14T09:36:56.828 [DEBUG] [Thread-183208] [transport.py] [_log()] server lang: <none>
2026-02-14T09:36:56.828 [DEBUG] [Thread-183208] [transport.py] [_log()] kex follows: False
2026-02-14T09:36:56.828 [DEBUG] [Thread-183208] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:36:56.828 [DEBUG] [Thread-183208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:36:56.828 [DEBUG] [Thread-183208] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:36:56.828 [DEBUG] [Thread-183208] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:36:56.828 [DEBUG] [Thread-183208] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:36:56.828 [DEBUG] [Thread-183208] [transport.py] [_log()] Compression: none
2026-02-14T09:36:56.828 [DEBUG] [Thread-183208] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:36:56.844 [DEBUG] [Thread-183208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:36:56.844 [DEBUG] [Thread-183208] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:36:56.845 [DEBUG] [Thread-183208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:36:56.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:36:56.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:36:56.846 [DEBUG] [Thread-183208] [transport.py] [_log()] userauth is OK
2026-02-14T09:36:56.846 [DEBUG] [Thread-183208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:36:56.846 [DEBUG] [Thread-183208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:36:56.846 [DEBUG] [Thread-183208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:36:56.847 [DEBUG] [Thread-183208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:36:56.876 [INFO] [Thread-183208] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:36:56.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:36:57.503 [DEBUG] [Thread-183208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:36:57.503 [DEBUG] [Thread-183208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:36:57.503 [DEBUG] [Thread-183208] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:36:57.544 [DEBUG] [Thread-183208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:36:57.544 [DEBUG] [Thread-183208] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:36:57.546 [DEBUG] [Thread-183208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:36:57.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:36:57.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:36:57.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:36:57.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:36:57.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:36:57.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:36:57.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:36:57.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:36:57.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:36:57.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.316781 -999.00  +10.10  17.39     71   +5.20 1 2 1 1 1   888    0 6.38 44.19 ----- 22.5 17.4 160.2 25.6 14.4 -13.6 13.3 -16.4 12.9 -15.3 13.3 -18.3
2026-02-14T09:36:57.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:36:57.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:36:57.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.316781
2026-02-14T09:36:57.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:36:57.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:36:57.566 [DEBUG] [Thread-183208] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:36:57.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:36:57.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:36:57.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:36:57.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:36:19', tmtdew=6.25, humidity=65.48, cloud=0.0, wind=34.67, temperature=10.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:36:09.878', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:36:57.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-14T09:36:57.666 [DEBUG] [Thread-183211] [transport.py] [_log()] starting thread (client mode): 0xa2d3ff70
2026-02-14T09:36:57.666 [DEBUG] [Thread-183211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:36:57.682 [DEBUG] [Thread-183211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:36:57.682 [INFO] [Thread-183211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:36:57.692 [DEBUG] [Thread-183211] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:36:57.692 [DEBUG] [Thread-183211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:36:57.692 [DEBUG] [Thread-183211] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:36:57.692 [DEBUG] [Thread-183211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:36:57.692 [DEBUG] [Thread-183211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:36:57.693 [DEBUG] [Thread-183211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:36:57.693 [DEBUG] [Thread-183211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:36:57.693 [DEBUG] [Thread-183211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:36:57.693 [DEBUG] [Thread-183211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:36:57.693 [DEBUG] [Thread-183211] [transport.py] [_log()] client lang: <none>
2026-02-14T09:36:57.693 [DEBUG] [Thread-183211] [transport.py] [_log()] server lang: <none>
2026-02-14T09:36:57.693 [DEBUG] [Thread-183211] [transport.py] [_log()] kex follows: False
2026-02-14T09:36:57.693 [DEBUG] [Thread-183211] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:36:57.693 [DEBUG] [Thread-183211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:36:57.694 [DEBUG] [Thread-183211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:36:57.694 [DEBUG] [Thread-183211] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:36:57.694 [DEBUG] [Thread-183211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:36:57.694 [DEBUG] [Thread-183211] [transport.py] [_log()] Compression: none
2026-02-14T09:36:57.694 [DEBUG] [Thread-183211] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:36:57.753 [DEBUG] [Thread-183211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:36:57.753 [DEBUG] [Thread-183211] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:36:57.754 [DEBUG] [Thread-183211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:36:57.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:36:57.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:36:57.815 [DEBUG] [Thread-183211] [transport.py] [_log()] userauth is OK
2026-02-14T09:36:57.815 [DEBUG] [Thread-183211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:36:57.815 [DEBUG] [Thread-183211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:36:57.815 [DEBUG] [Thread-183211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:36:57.815 [DEBUG] [Thread-183211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:36:57.837 [INFO] [Thread-183211] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:36:57.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-14T09:36:57.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:36:58.661 [DEBUG] [Thread-183211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:36:58.661 [DEBUG] [Thread-183211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:36:58.709 [DEBUG] [Thread-183211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:36:58.709 [DEBUG] [Thread-183211] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:36:58.717 [DEBUG] [Thread-183211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:36:58.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:36:58.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-14T09:36:58.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:36:58.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:36:58.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:36:58.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:36:58.752 [DEBUG] [Thread-183211] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:37:11.022 [DEBUG] [Thread-183213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:37:14.381 [DEBUG] [Thread-183214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:37:26.076 [DEBUG] [Thread-183215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:37:28.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:37:28.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:37:28.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-14T09:37:30.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 36, 56), 6.18, 65.63, 0.0, 38.13, 10.63, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:37:30.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:36:56
2026-02-14T09:37:30.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:37:31.148 [DEBUG] [Thread-183216] [transport.py] [_log()] starting thread (client mode): 0xa2d3f3d0
2026-02-14T09:37:31.148 [DEBUG] [Thread-183216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:37:31.170 [DEBUG] [Thread-183216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:37:31.170 [INFO] [Thread-183216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:37:31.172 [DEBUG] [Thread-183216] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:37:31.172 [DEBUG] [Thread-183216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:37:31.172 [DEBUG] [Thread-183216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:37:31.172 [DEBUG] [Thread-183216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:37:31.172 [DEBUG] [Thread-183216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:37:31.173 [DEBUG] [Thread-183216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:37:31.173 [DEBUG] [Thread-183216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:37:31.173 [DEBUG] [Thread-183216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:37:31.173 [DEBUG] [Thread-183216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:37:31.173 [DEBUG] [Thread-183216] [transport.py] [_log()] client lang: <none>
2026-02-14T09:37:31.173 [DEBUG] [Thread-183216] [transport.py] [_log()] server lang: <none>
2026-02-14T09:37:31.173 [DEBUG] [Thread-183216] [transport.py] [_log()] kex follows: False
2026-02-14T09:37:31.173 [DEBUG] [Thread-183216] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:37:31.173 [DEBUG] [Thread-183216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:37:31.173 [DEBUG] [Thread-183216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:37:31.173 [DEBUG] [Thread-183216] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:37:31.173 [DEBUG] [Thread-183216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:37:31.173 [DEBUG] [Thread-183216] [transport.py] [_log()] Compression: none
2026-02-14T09:37:31.173 [DEBUG] [Thread-183216] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:37:31.190 [DEBUG] [Thread-183216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:37:31.191 [DEBUG] [Thread-183216] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:37:31.191 [DEBUG] [Thread-183216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:37:31.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:37:31.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:37:31.193 [DEBUG] [Thread-183216] [transport.py] [_log()] userauth is OK
2026-02-14T09:37:31.194 [DEBUG] [Thread-183216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:37:31.194 [DEBUG] [Thread-183216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:37:31.194 [DEBUG] [Thread-183216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:37:31.194 [DEBUG] [Thread-183216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:37:31.213 [INFO] [Thread-183216] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:37:31.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:37:32.046 [DEBUG] [Thread-183216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:37:32.046 [DEBUG] [Thread-183216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:37:32.047 [DEBUG] [Thread-183216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:37:32.087 [DEBUG] [Thread-183216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:37:32.088 [DEBUG] [Thread-183216] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:37:32.090 [DEBUG] [Thread-183216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:37:32.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:37:32.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:37:32.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:37:32.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:37:32.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:37:32.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:37:32.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:37:32.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:37:32.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:37:32.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.317128 -999.00  +10.30  28.68     71   +5.40 1 2 1 1 1   888    0 5.99 37.42 ----- 31.7 28.7 169.0 36.9 14.4 -13.6 13.8 -11.2 13.2 -12.9 13.7 -15.0
2026-02-14T09:37:32.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:37:32.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:37:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.317128
2026-02-14T09:37:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:37:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:37:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:37:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:37:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:37:32.117 [DEBUG] [Thread-183216] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:37:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:36:56', tmtdew=6.18, humidity=65.63, cloud=0.0, wind=38.13, temperature=10.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:36:39.859', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:37:32.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-14T09:37:32.214 [DEBUG] [Thread-183219] [transport.py] [_log()] starting thread (client mode): 0xa2d54bb0
2026-02-14T09:37:32.215 [DEBUG] [Thread-183219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:37:32.231 [DEBUG] [Thread-183219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:37:32.231 [INFO] [Thread-183219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:37:32.238 [DEBUG] [Thread-183219] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:37:32.239 [DEBUG] [Thread-183219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:37:32.239 [DEBUG] [Thread-183219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:37:32.239 [DEBUG] [Thread-183219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:37:32.239 [DEBUG] [Thread-183219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:37:32.239 [DEBUG] [Thread-183219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:37:32.239 [DEBUG] [Thread-183219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:37:32.239 [DEBUG] [Thread-183219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:37:32.239 [DEBUG] [Thread-183219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:37:32.239 [DEBUG] [Thread-183219] [transport.py] [_log()] client lang: <none>
2026-02-14T09:37:32.239 [DEBUG] [Thread-183219] [transport.py] [_log()] server lang: <none>
2026-02-14T09:37:32.239 [DEBUG] [Thread-183219] [transport.py] [_log()] kex follows: False
2026-02-14T09:37:32.239 [DEBUG] [Thread-183219] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:37:32.239 [DEBUG] [Thread-183219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:37:32.239 [DEBUG] [Thread-183219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:37:32.240 [DEBUG] [Thread-183219] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:37:32.240 [DEBUG] [Thread-183219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:37:32.240 [DEBUG] [Thread-183219] [transport.py] [_log()] Compression: none
2026-02-14T09:37:32.240 [DEBUG] [Thread-183219] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:37:32.296 [DEBUG] [Thread-183219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:37:32.297 [DEBUG] [Thread-183219] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:37:32.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:37:32.298 [DEBUG] [Thread-183219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:37:32.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:37:32.352 [DEBUG] [Thread-183219] [transport.py] [_log()] userauth is OK
2026-02-14T09:37:32.353 [DEBUG] [Thread-183219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:37:32.353 [DEBUG] [Thread-183219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:37:32.353 [DEBUG] [Thread-183219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:37:32.353 [DEBUG] [Thread-183219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:37:32.373 [INFO] [Thread-183219] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:37:32.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T09:37:32.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:37:33.175 [DEBUG] [Thread-183219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:37:33.175 [DEBUG] [Thread-183219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:37:33.223 [DEBUG] [Thread-183219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:37:33.223 [DEBUG] [Thread-183219] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:37:33.232 [DEBUG] [Thread-183219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:37:33.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:37:33.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:37:33.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-14T09:37:33.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:37:33.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:37:33.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:37:33.266 [DEBUG] [Thread-183219] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:37:41.115 [DEBUG] [Thread-183221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:37:52.068 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:37:52.069 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:37:56.169 [DEBUG] [Thread-183222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:38:03.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:38:03.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:38:03.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-14T09:38:05.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 37, 32), 6.29, 65.16, 0.0, 40.32, 10.63, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:38:05.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:37:32
2026-02-14T09:38:05.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:38:05.674 [DEBUG] [Thread-183223] [transport.py] [_log()] starting thread (client mode): 0xa2d1ab60
2026-02-14T09:38:05.674 [DEBUG] [Thread-183223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:38:05.694 [DEBUG] [Thread-183223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:38:05.694 [INFO] [Thread-183223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:38:05.697 [DEBUG] [Thread-183223] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:38:05.697 [DEBUG] [Thread-183223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:38:05.697 [DEBUG] [Thread-183223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:38:05.697 [DEBUG] [Thread-183223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:38:05.698 [DEBUG] [Thread-183223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:38:05.698 [DEBUG] [Thread-183223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:38:05.698 [DEBUG] [Thread-183223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:38:05.698 [DEBUG] [Thread-183223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:38:05.698 [DEBUG] [Thread-183223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:38:05.698 [DEBUG] [Thread-183223] [transport.py] [_log()] client lang: <none>
2026-02-14T09:38:05.698 [DEBUG] [Thread-183223] [transport.py] [_log()] server lang: <none>
2026-02-14T09:38:05.698 [DEBUG] [Thread-183223] [transport.py] [_log()] kex follows: False
2026-02-14T09:38:05.698 [DEBUG] [Thread-183223] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:38:05.698 [DEBUG] [Thread-183223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:38:05.698 [DEBUG] [Thread-183223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:38:05.698 [DEBUG] [Thread-183223] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:38:05.698 [DEBUG] [Thread-183223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:38:05.698 [DEBUG] [Thread-183223] [transport.py] [_log()] Compression: none
2026-02-14T09:38:05.698 [DEBUG] [Thread-183223] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:38:05.715 [DEBUG] [Thread-183223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:38:05.716 [DEBUG] [Thread-183223] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:38:05.716 [DEBUG] [Thread-183223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:38:05.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:38:05.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:38:05.718 [DEBUG] [Thread-183223] [transport.py] [_log()] userauth is OK
2026-02-14T09:38:05.719 [DEBUG] [Thread-183223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:38:05.719 [DEBUG] [Thread-183223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:38:05.719 [DEBUG] [Thread-183223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:38:05.719 [DEBUG] [Thread-183223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:38:05.743 [INFO] [Thread-183223] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:38:05.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:38:06.350 [DEBUG] [Thread-183223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:38:06.350 [DEBUG] [Thread-183223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:38:06.350 [DEBUG] [Thread-183223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:38:06.391 [DEBUG] [Thread-183223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:38:06.392 [DEBUG] [Thread-183223] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:38:06.395 [DEBUG] [Thread-183223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:38:06.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:38:06.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:38:06.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:38:06.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:38:06.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:38:06.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:38:06.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:38:06.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:38:06.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:38:06.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.317475 -999.00  +10.40  34.37     70   +5.30 1 2 2 1 1   888    0 6.18 39.34 ----- 36.6 34.4 171.0 40.8 14.8 -15.9 14.1 -15.7 13.4 -16.3 13.9 -17.4
2026-02-14T09:38:06.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:38:06.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:38:06.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.317475
2026-02-14T09:38:06.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:38:06.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:38:06.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:38:06.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:38:06.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:38:06.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:37:32', tmtdew=6.29, humidity=65.16, cloud=0.0, wind=40.32, temperature=10.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:37:09.840', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:38:06.423 [DEBUG] [Thread-183223] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:38:06.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T09:38:06.528 [DEBUG] [Thread-183226] [transport.py] [_log()] starting thread (client mode): 0xa2d3f4c0
2026-02-14T09:38:06.528 [DEBUG] [Thread-183226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:38:06.543 [DEBUG] [Thread-183226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:38:06.543 [INFO] [Thread-183226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:38:06.551 [DEBUG] [Thread-183226] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:38:06.551 [DEBUG] [Thread-183226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:38:06.552 [DEBUG] [Thread-183226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:38:06.552 [DEBUG] [Thread-183226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:38:06.552 [DEBUG] [Thread-183226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:38:06.552 [DEBUG] [Thread-183226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:38:06.552 [DEBUG] [Thread-183226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:38:06.552 [DEBUG] [Thread-183226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:38:06.552 [DEBUG] [Thread-183226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:38:06.552 [DEBUG] [Thread-183226] [transport.py] [_log()] client lang: <none>
2026-02-14T09:38:06.552 [DEBUG] [Thread-183226] [transport.py] [_log()] server lang: <none>
2026-02-14T09:38:06.552 [DEBUG] [Thread-183226] [transport.py] [_log()] kex follows: False
2026-02-14T09:38:06.552 [DEBUG] [Thread-183226] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:38:06.552 [DEBUG] [Thread-183226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:38:06.552 [DEBUG] [Thread-183226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:38:06.552 [DEBUG] [Thread-183226] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:38:06.552 [DEBUG] [Thread-183226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:38:06.552 [DEBUG] [Thread-183226] [transport.py] [_log()] Compression: none
2026-02-14T09:38:06.552 [DEBUG] [Thread-183226] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:38:06.611 [DEBUG] [Thread-183226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:38:06.612 [DEBUG] [Thread-183226] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:38:06.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:38:06.613 [DEBUG] [Thread-183226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:38:06.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:38:06.667 [DEBUG] [Thread-183226] [transport.py] [_log()] userauth is OK
2026-02-14T09:38:06.668 [DEBUG] [Thread-183226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:38:06.668 [DEBUG] [Thread-183226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:38:06.668 [DEBUG] [Thread-183226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:38:06.668 [DEBUG] [Thread-183226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:38:06.692 [INFO] [Thread-183226] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:38:06.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T09:38:06.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:38:07.477 [DEBUG] [Thread-183226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:38:07.477 [DEBUG] [Thread-183226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:38:07.525 [DEBUG] [Thread-183226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:38:07.526 [DEBUG] [Thread-183226] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:38:07.536 [DEBUG] [Thread-183226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:38:07.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:38:07.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-14T09:38:07.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-14T09:38:07.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:38:07.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:38:07.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:38:07.570 [DEBUG] [Thread-183226] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:38:11.206 [DEBUG] [Thread-183228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:38:14.429 [DEBUG] [Thread-183229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:38:26.260 [DEBUG] [Thread-183230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:38:37.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:38:37.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:38:37.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-14T09:38:39.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 38, 7), 6.21, 65.5, 0.0, 35.15, 10.53, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:38:39.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:38:07
2026-02-14T09:38:39.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:38:39.958 [DEBUG] [Thread-183231] [transport.py] [_log()] starting thread (client mode): 0xa2d19510
2026-02-14T09:38:39.958 [DEBUG] [Thread-183231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:38:39.978 [DEBUG] [Thread-183231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:38:39.978 [INFO] [Thread-183231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:38:39.981 [DEBUG] [Thread-183231] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:38:39.981 [DEBUG] [Thread-183231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:38:39.981 [DEBUG] [Thread-183231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:38:39.981 [DEBUG] [Thread-183231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:38:39.981 [DEBUG] [Thread-183231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:38:39.981 [DEBUG] [Thread-183231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:38:39.981 [DEBUG] [Thread-183231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:38:39.981 [DEBUG] [Thread-183231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:38:39.982 [DEBUG] [Thread-183231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:38:39.982 [DEBUG] [Thread-183231] [transport.py] [_log()] client lang: <none>
2026-02-14T09:38:39.982 [DEBUG] [Thread-183231] [transport.py] [_log()] server lang: <none>
2026-02-14T09:38:39.982 [DEBUG] [Thread-183231] [transport.py] [_log()] kex follows: False
2026-02-14T09:38:39.982 [DEBUG] [Thread-183231] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:38:39.982 [DEBUG] [Thread-183231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:38:39.982 [DEBUG] [Thread-183231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:38:39.982 [DEBUG] [Thread-183231] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:38:39.982 [DEBUG] [Thread-183231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:38:39.982 [DEBUG] [Thread-183231] [transport.py] [_log()] Compression: none
2026-02-14T09:38:39.982 [DEBUG] [Thread-183231] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:38:40.000 [DEBUG] [Thread-183231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:38:40.000 [DEBUG] [Thread-183231] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:38:40.001 [DEBUG] [Thread-183231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:38:40.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:38:40.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:38:40.003 [DEBUG] [Thread-183231] [transport.py] [_log()] userauth is OK
2026-02-14T09:38:40.003 [DEBUG] [Thread-183231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:38:40.003 [DEBUG] [Thread-183231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:38:40.004 [DEBUG] [Thread-183231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:38:40.004 [DEBUG] [Thread-183231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:38:40.039 [INFO] [Thread-183231] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:38:40.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:38:40.660 [DEBUG] [Thread-183231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:38:40.660 [DEBUG] [Thread-183231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:38:40.660 [DEBUG] [Thread-183231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:38:40.701 [DEBUG] [Thread-183231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:38:40.702 [DEBUG] [Thread-183231] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:38:40.705 [DEBUG] [Thread-183231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:38:40.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:38:40.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:38:40.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:38:40.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:38:40.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:38:40.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:38:40.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:38:40.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:38:40.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:38:40.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.317822 -999.00  +10.20  33.60     70   +5.10 1 2 2 1 1   888    0 6.15 40.30 ----- 28.7 33.6 169.8 46.3 15.0 -20.3 14.3 -16.4 13.4 -18.4 14.0 -20.4
2026-02-14T09:38:40.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:38:40.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:38:40.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.317822
2026-02-14T09:38:40.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:38:40.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:38:40.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:38:40.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:38:40.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:38:40.731 [DEBUG] [Thread-183231] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:38:40.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:38:07', tmtdew=6.21, humidity=65.5, cloud=0.0, wind=35.15, temperature=10.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:37:39.821', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:38:40.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-14T09:38:40.827 [DEBUG] [Thread-183234] [transport.py] [_log()] starting thread (client mode): 0xa2d19900
2026-02-14T09:38:40.828 [DEBUG] [Thread-183234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:38:40.842 [DEBUG] [Thread-183234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:38:40.842 [INFO] [Thread-183234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:38:40.850 [DEBUG] [Thread-183234] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:38:40.850 [DEBUG] [Thread-183234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:38:40.850 [DEBUG] [Thread-183234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:38:40.850 [DEBUG] [Thread-183234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:38:40.850 [DEBUG] [Thread-183234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:38:40.850 [DEBUG] [Thread-183234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:38:40.850 [DEBUG] [Thread-183234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:38:40.850 [DEBUG] [Thread-183234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:38:40.850 [DEBUG] [Thread-183234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:38:40.850 [DEBUG] [Thread-183234] [transport.py] [_log()] client lang: <none>
2026-02-14T09:38:40.850 [DEBUG] [Thread-183234] [transport.py] [_log()] server lang: <none>
2026-02-14T09:38:40.850 [DEBUG] [Thread-183234] [transport.py] [_log()] kex follows: False
2026-02-14T09:38:40.850 [DEBUG] [Thread-183234] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:38:40.850 [DEBUG] [Thread-183234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:38:40.850 [DEBUG] [Thread-183234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:38:40.850 [DEBUG] [Thread-183234] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:38:40.850 [DEBUG] [Thread-183234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:38:40.850 [DEBUG] [Thread-183234] [transport.py] [_log()] Compression: none
2026-02-14T09:38:40.850 [DEBUG] [Thread-183234] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:38:40.905 [DEBUG] [Thread-183234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:38:40.906 [DEBUG] [Thread-183234] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:38:40.906 [DEBUG] [Thread-183234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:38:40.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:38:40.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:38:40.963 [DEBUG] [Thread-183234] [transport.py] [_log()] userauth is OK
2026-02-14T09:38:40.963 [DEBUG] [Thread-183234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:38:40.963 [DEBUG] [Thread-183234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:38:40.963 [DEBUG] [Thread-183234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:38:40.963 [DEBUG] [Thread-183234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:38:40.982 [INFO] [Thread-183234] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:38:40.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-14T09:38:40.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:38:41.299 [DEBUG] [Thread-183236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:38:41.778 [DEBUG] [Thread-183234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:38:41.778 [DEBUG] [Thread-183234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:38:41.826 [DEBUG] [Thread-183234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:38:41.826 [DEBUG] [Thread-183234] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:38:41.836 [DEBUG] [Thread-183234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:38:41.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:38:41.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-14T09:38:41.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-14T09:38:41.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:38:41.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:38:41.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:38:41.873 [DEBUG] [Thread-183234] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:38:52.211 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:38:52.212 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:38:56.353 [DEBUG] [Thread-183237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:39:11.384 [DEBUG] [Thread-183238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:39:11.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:39:11.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:39:11.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-14T09:39:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 38, 42), 7.08, 61.66, 0.0, 39.02, 11.23, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:39:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:38:42
2026-02-14T09:39:14.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:39:14.181 [DEBUG] [Thread-183239] [transport.py] [_log()] starting thread (client mode): 0xa2d3faf0
2026-02-14T09:39:14.181 [DEBUG] [Thread-183239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:39:14.192 [DEBUG] [Thread-183239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:39:14.192 [INFO] [Thread-183239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:39:14.193 [DEBUG] [Thread-183239] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:39:14.193 [DEBUG] [Thread-183239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:39:14.193 [DEBUG] [Thread-183239] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:39:14.193 [DEBUG] [Thread-183239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:39:14.193 [DEBUG] [Thread-183239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:39:14.193 [DEBUG] [Thread-183239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:39:14.193 [DEBUG] [Thread-183239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:39:14.193 [DEBUG] [Thread-183239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:39:14.193 [DEBUG] [Thread-183239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:39:14.193 [DEBUG] [Thread-183239] [transport.py] [_log()] client lang: <none>
2026-02-14T09:39:14.193 [DEBUG] [Thread-183239] [transport.py] [_log()] server lang: <none>
2026-02-14T09:39:14.193 [DEBUG] [Thread-183239] [transport.py] [_log()] kex follows: False
2026-02-14T09:39:14.193 [DEBUG] [Thread-183239] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:39:14.193 [DEBUG] [Thread-183239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:39:14.193 [DEBUG] [Thread-183239] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:39:14.193 [DEBUG] [Thread-183239] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:39:14.193 [DEBUG] [Thread-183239] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:39:14.193 [DEBUG] [Thread-183239] [transport.py] [_log()] Compression: none
2026-02-14T09:39:14.193 [DEBUG] [Thread-183239] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:39:14.201 [DEBUG] [Thread-183239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:39:14.201 [DEBUG] [Thread-183239] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:39:14.201 [DEBUG] [Thread-183239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:39:14.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:39:14.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:39:14.202 [DEBUG] [Thread-183239] [transport.py] [_log()] userauth is OK
2026-02-14T09:39:14.202 [DEBUG] [Thread-183239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:39:14.202 [DEBUG] [Thread-183239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:39:14.202 [DEBUG] [Thread-183239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:39:14.202 [DEBUG] [Thread-183239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:39:14.214 [INFO] [Thread-183239] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:39:14.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:39:14.474 [DEBUG] [Thread-183241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:39:14.794 [DEBUG] [Thread-183239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:39:14.794 [DEBUG] [Thread-183239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:39:14.795 [DEBUG] [Thread-183239] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:39:14.835 [DEBUG] [Thread-183239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:39:14.835 [DEBUG] [Thread-183239] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:39:14.839 [DEBUG] [Thread-183239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:39:14.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:39:14.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:39:14.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:39:14.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:39:14.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:39:14.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:39:14.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:39:14.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:39:14.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:39:14.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.318864 -999.00  +10.40  24.73     69   +5.10 1 2 1 1 1   888    0 6.27 41.05 ----- 27.5 24.7 157.5 29.7 15.3 -24.7 14.5 -19.8 13.5 -20.6 14.1 -24.2
2026-02-14T09:39:14.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:39:14.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:39:14.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.318864
2026-02-14T09:39:14.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:39:14.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:39:14.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:39:14.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:39:14.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:39:14.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:38:42', tmtdew=7.08, humidity=61.66, cloud=0.0, wind=39.02, temperature=11.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:39:09.850', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:39:14.858 [DEBUG] [Thread-183239] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:39:14.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-14T09:39:14.953 [DEBUG] [Thread-183243] [transport.py] [_log()] starting thread (client mode): 0xa57c0ca0
2026-02-14T09:39:14.954 [DEBUG] [Thread-183243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:39:14.968 [DEBUG] [Thread-183243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:39:14.968 [INFO] [Thread-183243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:39:14.977 [DEBUG] [Thread-183243] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:39:14.977 [DEBUG] [Thread-183243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:39:14.977 [DEBUG] [Thread-183243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:39:14.977 [DEBUG] [Thread-183243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:39:14.977 [DEBUG] [Thread-183243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:39:14.977 [DEBUG] [Thread-183243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:39:14.977 [DEBUG] [Thread-183243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:39:14.977 [DEBUG] [Thread-183243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:39:14.977 [DEBUG] [Thread-183243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:39:14.977 [DEBUG] [Thread-183243] [transport.py] [_log()] client lang: <none>
2026-02-14T09:39:14.977 [DEBUG] [Thread-183243] [transport.py] [_log()] server lang: <none>
2026-02-14T09:39:14.977 [DEBUG] [Thread-183243] [transport.py] [_log()] kex follows: False
2026-02-14T09:39:14.977 [DEBUG] [Thread-183243] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:39:14.977 [DEBUG] [Thread-183243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:39:14.978 [DEBUG] [Thread-183243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:39:14.978 [DEBUG] [Thread-183243] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:39:14.978 [DEBUG] [Thread-183243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:39:14.978 [DEBUG] [Thread-183243] [transport.py] [_log()] Compression: none
2026-02-14T09:39:14.978 [DEBUG] [Thread-183243] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:39:15.034 [DEBUG] [Thread-183243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:39:15.035 [DEBUG] [Thread-183243] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:39:15.035 [DEBUG] [Thread-183243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:39:15.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:39:15.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:39:15.098 [DEBUG] [Thread-183243] [transport.py] [_log()] userauth is OK
2026-02-14T09:39:15.098 [DEBUG] [Thread-183243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:39:15.098 [DEBUG] [Thread-183243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:39:15.098 [DEBUG] [Thread-183243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:39:15.098 [DEBUG] [Thread-183243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:39:15.121 [INFO] [Thread-183243] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:39:15.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-14T09:39:15.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:39:15.923 [DEBUG] [Thread-183243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:39:15.924 [DEBUG] [Thread-183243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:39:15.971 [DEBUG] [Thread-183243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:39:15.972 [DEBUG] [Thread-183243] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:39:15.981 [DEBUG] [Thread-183243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:39:15.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:39:15.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:39:15.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:39:16.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:39:16.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:39:16.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:39:16.017 [DEBUG] [Thread-183243] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:39:26.420 [DEBUG] [Thread-183245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:39:41.475 [DEBUG] [Thread-183246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:39:46.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:39:46.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:39:46.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-14T09:39:47.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 39, 18), 6.46, 64.09, 0.0, 33.19, 10.56, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:39:47.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:39:18
2026-02-14T09:39:48.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:39:48.355 [DEBUG] [Thread-183247] [transport.py] [_log()] starting thread (client mode): 0xa2d561d0
2026-02-14T09:39:48.355 [DEBUG] [Thread-183247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:39:48.366 [DEBUG] [Thread-183247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:39:48.366 [INFO] [Thread-183247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:39:48.368 [DEBUG] [Thread-183247] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:39:48.369 [DEBUG] [Thread-183247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:39:48.369 [DEBUG] [Thread-183247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:39:48.369 [DEBUG] [Thread-183247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:39:48.369 [DEBUG] [Thread-183247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:39:48.369 [DEBUG] [Thread-183247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:39:48.369 [DEBUG] [Thread-183247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:39:48.369 [DEBUG] [Thread-183247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:39:48.369 [DEBUG] [Thread-183247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:39:48.369 [DEBUG] [Thread-183247] [transport.py] [_log()] client lang: <none>
2026-02-14T09:39:48.369 [DEBUG] [Thread-183247] [transport.py] [_log()] server lang: <none>
2026-02-14T09:39:48.369 [DEBUG] [Thread-183247] [transport.py] [_log()] kex follows: False
2026-02-14T09:39:48.369 [DEBUG] [Thread-183247] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:39:48.369 [DEBUG] [Thread-183247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:39:48.369 [DEBUG] [Thread-183247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:39:48.369 [DEBUG] [Thread-183247] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:39:48.369 [DEBUG] [Thread-183247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:39:48.369 [DEBUG] [Thread-183247] [transport.py] [_log()] Compression: none
2026-02-14T09:39:48.369 [DEBUG] [Thread-183247] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:39:48.381 [DEBUG] [Thread-183247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:39:48.382 [DEBUG] [Thread-183247] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:39:48.382 [DEBUG] [Thread-183247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:39:48.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:39:48.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:39:48.383 [DEBUG] [Thread-183247] [transport.py] [_log()] userauth is OK
2026-02-14T09:39:48.383 [DEBUG] [Thread-183247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:39:48.383 [DEBUG] [Thread-183247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:39:48.383 [DEBUG] [Thread-183247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:39:48.383 [DEBUG] [Thread-183247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:39:48.398 [INFO] [Thread-183247] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:39:48.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:39:49.003 [DEBUG] [Thread-183247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:39:49.003 [DEBUG] [Thread-183247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:39:49.004 [DEBUG] [Thread-183247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:39:49.045 [DEBUG] [Thread-183247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:39:49.045 [DEBUG] [Thread-183247] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:39:49.049 [DEBUG] [Thread-183247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:39:49.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:39:49.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:39:49.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:39:49.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:39:49.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:39:49.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:39:49.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:39:49.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:39:49.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:39:49.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.319211 -999.00  +10.30  21.92     69   +5.00 1 2 1 1 1   888    0 6.26 43.15 ----- 21.1 21.9 158.0 33.2 15.2 -21.8 14.4 -18.1 13.4 -18.2 14.1 -22.3
2026-02-14T09:39:49.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:39:49.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:39:49.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.319211
2026-02-14T09:39:49.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:39:49.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:39:49.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:39:49.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:39:49.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:39:49.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:39:18', tmtdew=6.46, humidity=64.09, cloud=0.0, wind=33.19, temperature=10.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:39:39.830', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:39:49.074 [DEBUG] [Thread-183247] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:39: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-14T09:39:49.175 [DEBUG] [Thread-183250] [transport.py] [_log()] starting thread (client mode): 0xa2d1ba90
2026-02-14T09:39:49.175 [DEBUG] [Thread-183250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:39:49.190 [DEBUG] [Thread-183250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:39:49.190 [INFO] [Thread-183250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:39:49.197 [DEBUG] [Thread-183250] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:39:49.198 [DEBUG] [Thread-183250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:39:49.198 [DEBUG] [Thread-183250] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:39:49.198 [DEBUG] [Thread-183250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:39:49.198 [DEBUG] [Thread-183250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:39:49.198 [DEBUG] [Thread-183250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:39:49.198 [DEBUG] [Thread-183250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:39:49.198 [DEBUG] [Thread-183250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:39:49.199 [DEBUG] [Thread-183250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:39:49.199 [DEBUG] [Thread-183250] [transport.py] [_log()] client lang: <none>
2026-02-14T09:39:49.199 [DEBUG] [Thread-183250] [transport.py] [_log()] server lang: <none>
2026-02-14T09:39:49.199 [DEBUG] [Thread-183250] [transport.py] [_log()] kex follows: False
2026-02-14T09:39:49.199 [DEBUG] [Thread-183250] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:39:49.199 [DEBUG] [Thread-183250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:39:49.199 [DEBUG] [Thread-183250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:39:49.200 [DEBUG] [Thread-183250] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:39:49.200 [DEBUG] [Thread-183250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:39:49.200 [DEBUG] [Thread-183250] [transport.py] [_log()] Compression: none
2026-02-14T09:39:49.200 [DEBUG] [Thread-183250] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:39:49.258 [DEBUG] [Thread-183250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:39:49.259 [DEBUG] [Thread-183250] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:39:49.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:39:49.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:39:49.262 [DEBUG] [Thread-183250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:39:49.315 [DEBUG] [Thread-183250] [transport.py] [_log()] userauth is OK
2026-02-14T09:39:49.315 [DEBUG] [Thread-183250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:39:49.315 [DEBUG] [Thread-183250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:39:49.315 [DEBUG] [Thread-183250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:39:49.316 [DEBUG] [Thread-183250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:39:49.338 [INFO] [Thread-183250] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:39:49.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T09:39:49.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:39:50.136 [DEBUG] [Thread-183250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:39:50.136 [DEBUG] [Thread-183250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:39:50.184 [DEBUG] [Thread-183250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:39:50.184 [DEBUG] [Thread-183250] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:39:50.192 [DEBUG] [Thread-183250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:39:50.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:39:50.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')
2026-02-14T09:39:50.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:39:50.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:39:50.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:39:50.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:39:50.225 [DEBUG] [Thread-183250] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:39:52.352 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:39:52.353 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:39:56.513 [DEBUG] [Thread-183252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:40:11.569 [DEBUG] [Thread-183253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:40:14.518 [DEBUG] [Thread-183254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:40:20.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:40:20.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:40:20.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-14T09:40:22.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 39, 53), 6.58, 63.84, 0.0, 30.44, 10.7, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:40:22.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:39:53
2026-02-14T09:40:22.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:40:22.807 [DEBUG] [Thread-183255] [transport.py] [_log()] starting thread (client mode): 0xa2d3ed40
2026-02-14T09:40:22.807 [DEBUG] [Thread-183255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:40:22.822 [DEBUG] [Thread-183255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:40:22.822 [INFO] [Thread-183255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:40:22.826 [DEBUG] [Thread-183255] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:40:22.826 [DEBUG] [Thread-183255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:40:22.826 [DEBUG] [Thread-183255] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:40:22.826 [DEBUG] [Thread-183255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:40:22.826 [DEBUG] [Thread-183255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:40:22.826 [DEBUG] [Thread-183255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:40:22.826 [DEBUG] [Thread-183255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:40:22.826 [DEBUG] [Thread-183255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:40:22.826 [DEBUG] [Thread-183255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:40:22.826 [DEBUG] [Thread-183255] [transport.py] [_log()] client lang: <none>
2026-02-14T09:40:22.826 [DEBUG] [Thread-183255] [transport.py] [_log()] server lang: <none>
2026-02-14T09:40:22.826 [DEBUG] [Thread-183255] [transport.py] [_log()] kex follows: False
2026-02-14T09:40:22.826 [DEBUG] [Thread-183255] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:40:22.826 [DEBUG] [Thread-183255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:40:22.826 [DEBUG] [Thread-183255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:40:22.826 [DEBUG] [Thread-183255] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:40:22.826 [DEBUG] [Thread-183255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:40:22.827 [DEBUG] [Thread-183255] [transport.py] [_log()] Compression: none
2026-02-14T09:40:22.827 [DEBUG] [Thread-183255] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:40:22.844 [DEBUG] [Thread-183255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:40:22.844 [DEBUG] [Thread-183255] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:40:22.845 [DEBUG] [Thread-183255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:40:22.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:40:22.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:40:22.847 [DEBUG] [Thread-183255] [transport.py] [_log()] userauth is OK
2026-02-14T09:40:22.847 [DEBUG] [Thread-183255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:40:22.847 [DEBUG] [Thread-183255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:40:22.847 [DEBUG] [Thread-183255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:40:22.847 [DEBUG] [Thread-183255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:40:22.874 [INFO] [Thread-183255] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:40:22.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:40:23.505 [DEBUG] [Thread-183255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:40:23.505 [DEBUG] [Thread-183255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:40:23.506 [DEBUG] [Thread-183255] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:40:23.546 [DEBUG] [Thread-183255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:40:23.546 [DEBUG] [Thread-183255] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:40:23.550 [DEBUG] [Thread-183255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:40:23.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:40:23.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:40:23.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:40:23.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:40:23.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:40:23.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:40:23.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:40:23.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:40:23.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:40:23.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.319559 -999.00  +10.10  22.60     70   +5.00 1 2 1 1 1   888    0 6.16 39.38 ----- 16.9 22.6 156.2 30.4 15.2 -19.7 14.5 -14.8 13.7 -15.1 14.2 -19.5
2026-02-14T09:40:23.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:40:23.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:40:23.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.319559
2026-02-14T09:40:23.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:40:23.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:40:23.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:40:23.569 [DEBUG] [Thread-183255] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:40:23.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:40:23.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:40:23.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:39:53', tmtdew=6.58, humidity=63.84, cloud=0.0, wind=30.44, temperature=10.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:40:09.898', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:40:23.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-14T09:40:23.660 [DEBUG] [Thread-183258] [transport.py] [_log()] starting thread (client mode): 0xa2d10f10
2026-02-14T09:40:23.661 [DEBUG] [Thread-183258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:40:23.675 [DEBUG] [Thread-183258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:40:23.675 [INFO] [Thread-183258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:40:23.683 [DEBUG] [Thread-183258] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:40:23.683 [DEBUG] [Thread-183258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:40:23.683 [DEBUG] [Thread-183258] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:40:23.684 [DEBUG] [Thread-183258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:40:23.684 [DEBUG] [Thread-183258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:40:23.684 [DEBUG] [Thread-183258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:40:23.684 [DEBUG] [Thread-183258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:40:23.684 [DEBUG] [Thread-183258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:40:23.684 [DEBUG] [Thread-183258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:40:23.684 [DEBUG] [Thread-183258] [transport.py] [_log()] client lang: <none>
2026-02-14T09:40:23.684 [DEBUG] [Thread-183258] [transport.py] [_log()] server lang: <none>
2026-02-14T09:40:23.684 [DEBUG] [Thread-183258] [transport.py] [_log()] kex follows: False
2026-02-14T09:40:23.684 [DEBUG] [Thread-183258] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:40:23.684 [DEBUG] [Thread-183258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:40:23.684 [DEBUG] [Thread-183258] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:40:23.684 [DEBUG] [Thread-183258] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:40:23.684 [DEBUG] [Thread-183258] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:40:23.684 [DEBUG] [Thread-183258] [transport.py] [_log()] Compression: none
2026-02-14T09:40:23.684 [DEBUG] [Thread-183258] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:40:23.743 [DEBUG] [Thread-183258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:40:23.744 [DEBUG] [Thread-183258] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:40:23.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:40:23.745 [DEBUG] [Thread-183258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:40:23.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:40:23.802 [DEBUG] [Thread-183258] [transport.py] [_log()] userauth is OK
2026-02-14T09:40:23.802 [DEBUG] [Thread-183258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:40:23.802 [DEBUG] [Thread-183258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:40:23.802 [DEBUG] [Thread-183258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:40:23.802 [DEBUG] [Thread-183258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:40:23.815 [INFO] [Thread-183258] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:40:23.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-14T09:40:23.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:40:24.634 [DEBUG] [Thread-183258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:40:24.634 [DEBUG] [Thread-183258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:40:24.681 [DEBUG] [Thread-183258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:40:24.682 [DEBUG] [Thread-183258] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:40:24.690 [DEBUG] [Thread-183258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:40:24.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:40:24.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-14T09:40:24.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-14T09:40:24.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:40:24.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:40:24.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:40:24.723 [DEBUG] [Thread-183258] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:40:26.609 [DEBUG] [Thread-183260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:40:41.661 [DEBUG] [Thread-183261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:40:52.494 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:40:52.495 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:40:54.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:40:54.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:40:54.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-14T09:40:56.700 [DEBUG] [Thread-183262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:40:56.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 40, 28), 6.65, 63.53, 0.0, 31.07, 10.73, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:40:56.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:40:28
2026-02-14T09:40:57.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:40:57.353 [DEBUG] [Thread-183263] [transport.py] [_log()] starting thread (client mode): 0xa2d104c0
2026-02-14T09:40:57.354 [DEBUG] [Thread-183263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:40:57.374 [DEBUG] [Thread-183263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:40:57.374 [INFO] [Thread-183263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:40:57.378 [DEBUG] [Thread-183263] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:40:57.378 [DEBUG] [Thread-183263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:40:57.378 [DEBUG] [Thread-183263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:40:57.378 [DEBUG] [Thread-183263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:40:57.378 [DEBUG] [Thread-183263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:40:57.378 [DEBUG] [Thread-183263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:40:57.378 [DEBUG] [Thread-183263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:40:57.379 [DEBUG] [Thread-183263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:40:57.379 [DEBUG] [Thread-183263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:40:57.379 [DEBUG] [Thread-183263] [transport.py] [_log()] client lang: <none>
2026-02-14T09:40:57.379 [DEBUG] [Thread-183263] [transport.py] [_log()] server lang: <none>
2026-02-14T09:40:57.379 [DEBUG] [Thread-183263] [transport.py] [_log()] kex follows: False
2026-02-14T09:40:57.379 [DEBUG] [Thread-183263] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:40:57.379 [DEBUG] [Thread-183263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:40:57.379 [DEBUG] [Thread-183263] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:40:57.379 [DEBUG] [Thread-183263] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:40:57.379 [DEBUG] [Thread-183263] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:40:57.379 [DEBUG] [Thread-183263] [transport.py] [_log()] Compression: none
2026-02-14T09:40:57.379 [DEBUG] [Thread-183263] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:40:57.393 [DEBUG] [Thread-183263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:40:57.393 [DEBUG] [Thread-183263] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:40:57.394 [DEBUG] [Thread-183263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:40:57.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:40:57.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:40:57.396 [DEBUG] [Thread-183263] [transport.py] [_log()] userauth is OK
2026-02-14T09:40:57.396 [DEBUG] [Thread-183263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:40:57.396 [DEBUG] [Thread-183263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:40:57.396 [DEBUG] [Thread-183263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:40:57.396 [DEBUG] [Thread-183263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:40:57.422 [INFO] [Thread-183263] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:40:57.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:40:57.991 [DEBUG] [Thread-183263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:40:57.991 [DEBUG] [Thread-183263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:40:57.991 [DEBUG] [Thread-183263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:40:58.032 [DEBUG] [Thread-183263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:40:58.033 [DEBUG] [Thread-183263] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:40:58.036 [DEBUG] [Thread-183263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:40:58.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:40:58.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:40:58.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:40:58.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:40:58.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:40:58.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:40:58.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:40:58.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:40:58.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:40:58.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.319906 -999.00  +10.40  23.01     70   +5.30 1 2 1 1 1   888    0 6.09 35.92 ----- 28.2 23.0 169.4 29.7 15.7 -17.7 14.8 -16.3 13.9 -17.3 14.5 -18.5
2026-02-14T09:40:58.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:40:58.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:40:58.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.319906
2026-02-14T09:40:58.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:40:58.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:40:58.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:40:58.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:40:58.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:40:58.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:40:28', tmtdew=6.65, humidity=63.53, cloud=0.0, wind=31.07, temperature=10.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:40:39.878', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:40:58.064 [DEBUG] [Thread-183263] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:40:58.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-14T09:40:58.153 [DEBUG] [Thread-183266] [transport.py] [_log()] starting thread (client mode): 0xa2d12350
2026-02-14T09:40:58.153 [DEBUG] [Thread-183266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:40:58.168 [DEBUG] [Thread-183266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:40:58.168 [INFO] [Thread-183266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:40:58.175 [DEBUG] [Thread-183266] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:40:58.175 [DEBUG] [Thread-183266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:40:58.175 [DEBUG] [Thread-183266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:40:58.175 [DEBUG] [Thread-183266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:40:58.175 [DEBUG] [Thread-183266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:40:58.175 [DEBUG] [Thread-183266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:40:58.175 [DEBUG] [Thread-183266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:40:58.175 [DEBUG] [Thread-183266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:40:58.176 [DEBUG] [Thread-183266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:40:58.176 [DEBUG] [Thread-183266] [transport.py] [_log()] client lang: <none>
2026-02-14T09:40:58.176 [DEBUG] [Thread-183266] [transport.py] [_log()] server lang: <none>
2026-02-14T09:40:58.176 [DEBUG] [Thread-183266] [transport.py] [_log()] kex follows: False
2026-02-14T09:40:58.176 [DEBUG] [Thread-183266] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:40:58.176 [DEBUG] [Thread-183266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:40:58.176 [DEBUG] [Thread-183266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:40:58.176 [DEBUG] [Thread-183266] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:40:58.176 [DEBUG] [Thread-183266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:40:58.176 [DEBUG] [Thread-183266] [transport.py] [_log()] Compression: none
2026-02-14T09:40:58.176 [DEBUG] [Thread-183266] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:40:58.234 [DEBUG] [Thread-183266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:40:58.235 [DEBUG] [Thread-183266] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:40:58.235 [DEBUG] [Thread-183266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:40:58.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:40:58.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:40:58.289 [DEBUG] [Thread-183266] [transport.py] [_log()] userauth is OK
2026-02-14T09:40:58.290 [DEBUG] [Thread-183266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:40:58.290 [DEBUG] [Thread-183266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:40:58.290 [DEBUG] [Thread-183266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:40:58.290 [DEBUG] [Thread-183266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:40:58.309 [INFO] [Thread-183266] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:40:58.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-14T09:40:58.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:40:59.126 [DEBUG] [Thread-183266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:40:59.126 [DEBUG] [Thread-183266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:40:59.174 [DEBUG] [Thread-183266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:40:59.175 [DEBUG] [Thread-183266] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:40:59.184 [DEBUG] [Thread-183266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:40:59.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:40:59.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-14T09:40:59.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-14T09:40:59.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:40:59.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:40:59.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:40:59.221 [DEBUG] [Thread-183266] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:41:11.738 [DEBUG] [Thread-183268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:41:14.558 [DEBUG] [Thread-183269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:41:26.793 [DEBUG] [Thread-183270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:41:29.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:41:29.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:41:29.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-14T09:41:31.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 41, 3), 6.63, 63.61, 0.0, 28.23, 10.76, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:41:31.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:41:03
2026-02-14T09:41:31.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:41:32.022 [DEBUG] [Thread-183271] [transport.py] [_log()] starting thread (client mode): 0xa5759420
2026-02-14T09:41:32.022 [DEBUG] [Thread-183271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:41:32.043 [DEBUG] [Thread-183271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:41:32.044 [INFO] [Thread-183271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:41:32.045 [DEBUG] [Thread-183271] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:41:32.045 [DEBUG] [Thread-183271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:41:32.045 [DEBUG] [Thread-183271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:41:32.045 [DEBUG] [Thread-183271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:41:32.045 [DEBUG] [Thread-183271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:41:32.046 [DEBUG] [Thread-183271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:41:32.046 [DEBUG] [Thread-183271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:41:32.046 [DEBUG] [Thread-183271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:41:32.046 [DEBUG] [Thread-183271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:41:32.046 [DEBUG] [Thread-183271] [transport.py] [_log()] client lang: <none>
2026-02-14T09:41:32.046 [DEBUG] [Thread-183271] [transport.py] [_log()] server lang: <none>
2026-02-14T09:41:32.046 [DEBUG] [Thread-183271] [transport.py] [_log()] kex follows: False
2026-02-14T09:41:32.046 [DEBUG] [Thread-183271] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:41:32.046 [DEBUG] [Thread-183271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:41:32.046 [DEBUG] [Thread-183271] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:41:32.046 [DEBUG] [Thread-183271] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:41:32.046 [DEBUG] [Thread-183271] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:41:32.046 [DEBUG] [Thread-183271] [transport.py] [_log()] Compression: none
2026-02-14T09:41:32.046 [DEBUG] [Thread-183271] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:41:32.055 [DEBUG] [Thread-183271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:41:32.055 [DEBUG] [Thread-183271] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:41:32.055 [DEBUG] [Thread-183271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:41:32.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:41:32.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:41:32.057 [DEBUG] [Thread-183271] [transport.py] [_log()] userauth is OK
2026-02-14T09:41:32.057 [DEBUG] [Thread-183271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:41:32.057 [DEBUG] [Thread-183271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:41:32.057 [DEBUG] [Thread-183271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:41:32.057 [DEBUG] [Thread-183271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:41:32.080 [INFO] [Thread-183271] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:41:32.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:41:32.649 [DEBUG] [Thread-183271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:41:32.649 [DEBUG] [Thread-183271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:41:32.650 [DEBUG] [Thread-183271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:41:32.690 [DEBUG] [Thread-183271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:41:32.690 [DEBUG] [Thread-183271] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:41:32.693 [DEBUG] [Thread-183271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:41:32.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:41:32.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:41:32.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:41:32.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:41:32.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:41:32.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:41:32.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:41:32.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:41:32.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:41:32.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.320253 -999.00  +10.40  27.03     69   +5.00 1 2 1 1 1   888    0 6.23 38.11 ----- 30.4 27.0 185.4 45.2 15.9 -20.8 14.9 -24.3 13.8 -21.3 14.6 -22.5
2026-02-14T09:41:32.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:41:32.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:41:32.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.320253
2026-02-14T09:41:32.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:41:32.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:41:32.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:41:32.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:41:32.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:41:32.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:41:03', tmtdew=6.63, humidity=63.61, cloud=0.0, wind=28.23, temperature=10.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:41:09.859', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:41:32.710 [DEBUG] [Thread-183271] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:41:32.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-14T09:41:32.806 [DEBUG] [Thread-183274] [transport.py] [_log()] starting thread (client mode): 0xa575bbe0
2026-02-14T09:41:32.806 [DEBUG] [Thread-183274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:41:32.824 [DEBUG] [Thread-183274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:41:32.824 [INFO] [Thread-183274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:41:32.834 [DEBUG] [Thread-183274] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:41:32.834 [DEBUG] [Thread-183274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:41:32.834 [DEBUG] [Thread-183274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:41:32.834 [DEBUG] [Thread-183274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:41:32.834 [DEBUG] [Thread-183274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:41:32.834 [DEBUG] [Thread-183274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:41:32.834 [DEBUG] [Thread-183274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:41:32.834 [DEBUG] [Thread-183274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:41:32.835 [DEBUG] [Thread-183274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:41:32.835 [DEBUG] [Thread-183274] [transport.py] [_log()] client lang: <none>
2026-02-14T09:41:32.835 [DEBUG] [Thread-183274] [transport.py] [_log()] server lang: <none>
2026-02-14T09:41:32.835 [DEBUG] [Thread-183274] [transport.py] [_log()] kex follows: False
2026-02-14T09:41:32.835 [DEBUG] [Thread-183274] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:41:32.835 [DEBUG] [Thread-183274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:41:32.835 [DEBUG] [Thread-183274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:41:32.835 [DEBUG] [Thread-183274] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:41:32.835 [DEBUG] [Thread-183274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:41:32.835 [DEBUG] [Thread-183274] [transport.py] [_log()] Compression: none
2026-02-14T09:41:32.835 [DEBUG] [Thread-183274] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:41:32.896 [DEBUG] [Thread-183274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:41:32.897 [DEBUG] [Thread-183274] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:41:32.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:41:32.898 [DEBUG] [Thread-183274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:41:32.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:41:32.954 [DEBUG] [Thread-183274] [transport.py] [_log()] userauth is OK
2026-02-14T09:41:32.955 [DEBUG] [Thread-183274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:41:32.955 [DEBUG] [Thread-183274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:41:32.955 [DEBUG] [Thread-183274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:41:32.955 [DEBUG] [Thread-183274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:41:32.975 [INFO] [Thread-183274] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:41:32.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-14T09:41:32.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:41:33.787 [DEBUG] [Thread-183274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:41:33.787 [DEBUG] [Thread-183274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:41:33.836 [DEBUG] [Thread-183274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:41:33.836 [DEBUG] [Thread-183274] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:41:33.846 [DEBUG] [Thread-183274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:41:33.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:41:33.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-14T09:41:33.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:41:33.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:41:33.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:41:33.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:41:33.882 [DEBUG] [Thread-183274] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:41:41.834 [DEBUG] [Thread-183276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:41:52.636 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:41:52.637 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:41:56.882 [DEBUG] [Thread-183277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:42:03.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:42:03.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:42:03.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-14T09:42:05.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 41, 38), 7.09, 61.72, 0.0, 30.91, 11.63, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:42:05.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:41:38
2026-02-14T09:42:06.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:42:06.393 [DEBUG] [Thread-183278] [transport.py] [_log()] starting thread (client mode): 0xa2d13100
2026-02-14T09:42:06.393 [DEBUG] [Thread-183278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:42:06.413 [DEBUG] [Thread-183278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:42:06.413 [INFO] [Thread-183278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:42:06.416 [DEBUG] [Thread-183278] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:42:06.416 [DEBUG] [Thread-183278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:42:06.416 [DEBUG] [Thread-183278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:42:06.416 [DEBUG] [Thread-183278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:42:06.416 [DEBUG] [Thread-183278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:42:06.416 [DEBUG] [Thread-183278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:42:06.416 [DEBUG] [Thread-183278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:42:06.417 [DEBUG] [Thread-183278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:42:06.417 [DEBUG] [Thread-183278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:42:06.417 [DEBUG] [Thread-183278] [transport.py] [_log()] client lang: <none>
2026-02-14T09:42:06.417 [DEBUG] [Thread-183278] [transport.py] [_log()] server lang: <none>
2026-02-14T09:42:06.417 [DEBUG] [Thread-183278] [transport.py] [_log()] kex follows: False
2026-02-14T09:42:06.417 [DEBUG] [Thread-183278] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:42:06.417 [DEBUG] [Thread-183278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:42:06.417 [DEBUG] [Thread-183278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:42:06.417 [DEBUG] [Thread-183278] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:42:06.417 [DEBUG] [Thread-183278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:42:06.417 [DEBUG] [Thread-183278] [transport.py] [_log()] Compression: none
2026-02-14T09:42:06.417 [DEBUG] [Thread-183278] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:42:06.435 [DEBUG] [Thread-183278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:42:06.435 [DEBUG] [Thread-183278] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:42:06.436 [DEBUG] [Thread-183278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:42:06.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:42:06.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:42:06.438 [DEBUG] [Thread-183278] [transport.py] [_log()] userauth is OK
2026-02-14T09:42:06.438 [DEBUG] [Thread-183278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:42:06.438 [DEBUG] [Thread-183278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:42:06.439 [DEBUG] [Thread-183278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:42:06.439 [DEBUG] [Thread-183278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:42:06.462 [INFO] [Thread-183278] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:42:06.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:42:07.053 [DEBUG] [Thread-183278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:42:07.054 [DEBUG] [Thread-183278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:42:07.054 [DEBUG] [Thread-183278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:42:07.094 [DEBUG] [Thread-183278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:42:07.095 [DEBUG] [Thread-183278] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:42:07.097 [DEBUG] [Thread-183278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:42:07.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:42:07.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:42:07.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:42:07.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:42:07.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:42:07.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:42:07.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:42:07.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:42:07.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:42:07.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.320600 -999.00  +10.40  22.71     70   +5.10 1 2 1 1 1   888    0 6.19 37.38 ----- 25.9 22.7 152.2 38.1 15.8 -23.1 14.5 -22.7 13.9 -18.3 14.5 -24.0
2026-02-14T09:42:07.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:42:07.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:42:07.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.320600
2026-02-14T09:42:07.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:42:07.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:42:07.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:42:07.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:42:07.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:42:07.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:41:38', tmtdew=7.09, humidity=61.72, cloud=0.0, wind=30.91, temperature=11.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:41:39.840', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:42:07.123 [DEBUG] [Thread-183278] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:42:07.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-14T09:42:07.220 [DEBUG] [Thread-183281] [transport.py] [_log()] starting thread (client mode): 0xa2d105e0
2026-02-14T09:42:07.220 [DEBUG] [Thread-183281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:42:07.234 [DEBUG] [Thread-183281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:42:07.234 [INFO] [Thread-183281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:42:07.242 [DEBUG] [Thread-183281] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:42:07.243 [DEBUG] [Thread-183281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:42:07.243 [DEBUG] [Thread-183281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:42:07.243 [DEBUG] [Thread-183281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:42:07.243 [DEBUG] [Thread-183281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:42:07.243 [DEBUG] [Thread-183281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:42:07.243 [DEBUG] [Thread-183281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:42:07.243 [DEBUG] [Thread-183281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:42:07.243 [DEBUG] [Thread-183281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:42:07.244 [DEBUG] [Thread-183281] [transport.py] [_log()] client lang: <none>
2026-02-14T09:42:07.244 [DEBUG] [Thread-183281] [transport.py] [_log()] server lang: <none>
2026-02-14T09:42:07.244 [DEBUG] [Thread-183281] [transport.py] [_log()] kex follows: False
2026-02-14T09:42:07.244 [DEBUG] [Thread-183281] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:42:07.244 [DEBUG] [Thread-183281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:42:07.244 [DEBUG] [Thread-183281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:42:07.244 [DEBUG] [Thread-183281] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:42:07.244 [DEBUG] [Thread-183281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:42:07.245 [DEBUG] [Thread-183281] [transport.py] [_log()] Compression: none
2026-02-14T09:42:07.245 [DEBUG] [Thread-183281] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:42:07.302 [DEBUG] [Thread-183281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:42:07.303 [DEBUG] [Thread-183281] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:42:07.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:42:07.304 [DEBUG] [Thread-183281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:42:07.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:42:07.361 [DEBUG] [Thread-183281] [transport.py] [_log()] userauth is OK
2026-02-14T09:42:07.361 [DEBUG] [Thread-183281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:42:07.361 [DEBUG] [Thread-183281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:42:07.362 [DEBUG] [Thread-183281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:42:07.362 [DEBUG] [Thread-183281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:42:07.384 [INFO] [Thread-183281] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:42:07.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T09:42:07.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:42:08.257 [DEBUG] [Thread-183281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:42:08.257 [DEBUG] [Thread-183281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:42:08.305 [DEBUG] [Thread-183281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:42:08.306 [DEBUG] [Thread-183281] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:42:08.315 [DEBUG] [Thread-183281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:42:08.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:42:08.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-14T09:42:08.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:42:08.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:42:08.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:42:08.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:42:08.354 [DEBUG] [Thread-183281] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:42:11.920 [DEBUG] [Thread-183283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:42:14.596 [DEBUG] [Thread-183284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:42:26.977 [DEBUG] [Thread-183285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:42:38.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:42:38.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:42:38.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-14T09:42:40.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 42, 14), 6.83, 63.22, 0.0, 33.15, 10.86, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:42:40.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:42:14
2026-02-14T09:42:40.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:42:40.736 [DEBUG] [Thread-183286] [transport.py] [_log()] starting thread (client mode): 0xa2d13820
2026-02-14T09:42:40.736 [DEBUG] [Thread-183286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:42:40.757 [DEBUG] [Thread-183286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:42:40.757 [INFO] [Thread-183286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:42:40.760 [DEBUG] [Thread-183286] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:42:40.761 [DEBUG] [Thread-183286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:42:40.761 [DEBUG] [Thread-183286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:42:40.761 [DEBUG] [Thread-183286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:42:40.761 [DEBUG] [Thread-183286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:42:40.761 [DEBUG] [Thread-183286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:42:40.761 [DEBUG] [Thread-183286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:42:40.761 [DEBUG] [Thread-183286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:42:40.761 [DEBUG] [Thread-183286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:42:40.761 [DEBUG] [Thread-183286] [transport.py] [_log()] client lang: <none>
2026-02-14T09:42:40.761 [DEBUG] [Thread-183286] [transport.py] [_log()] server lang: <none>
2026-02-14T09:42:40.761 [DEBUG] [Thread-183286] [transport.py] [_log()] kex follows: False
2026-02-14T09:42:40.761 [DEBUG] [Thread-183286] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:42:40.761 [DEBUG] [Thread-183286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:42:40.761 [DEBUG] [Thread-183286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:42:40.761 [DEBUG] [Thread-183286] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:42:40.761 [DEBUG] [Thread-183286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:42:40.761 [DEBUG] [Thread-183286] [transport.py] [_log()] Compression: none
2026-02-14T09:42:40.761 [DEBUG] [Thread-183286] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:42:40.777 [DEBUG] [Thread-183286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:42:40.778 [DEBUG] [Thread-183286] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:42:40.778 [DEBUG] [Thread-183286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:42:40.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:42:40.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:42:40.780 [DEBUG] [Thread-183286] [transport.py] [_log()] userauth is OK
2026-02-14T09:42:40.780 [DEBUG] [Thread-183286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:42:40.780 [DEBUG] [Thread-183286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:42:40.780 [DEBUG] [Thread-183286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:42:40.780 [DEBUG] [Thread-183286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:42:40.795 [INFO] [Thread-183286] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:42:40.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:42:41.374 [DEBUG] [Thread-183286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:42:41.374 [DEBUG] [Thread-183286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:42:41.374 [DEBUG] [Thread-183286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:42:41.415 [DEBUG] [Thread-183286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:42:41.416 [DEBUG] [Thread-183286] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:42:41.419 [DEBUG] [Thread-183286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:42:41.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:42:41.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:42:41.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:42:41.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:42:41.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:42:41.443 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:42:41.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:42:41.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:42:41.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:42:41.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.320947 -999.00  +10.50  28.09     69   +5.20 1 2 1 1 1   888    0 6.17 37.14 ----- 24.9 28.1 156.0 36.0 16.0 -21.1 15.0 -17.9 14.1 -18.3 14.7 -21.5
2026-02-14T09:42:41.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:42:41.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:42:41.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.320947
2026-02-14T09:42:41.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:42:41.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:42:41.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:42:41.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:42:41.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:42:41.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:42:14', tmtdew=6.83, humidity=63.22, cloud=0.0, wind=33.15, temperature=10.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:42:09.821', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:42:41.446 [DEBUG] [Thread-183286] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:42:41.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-14T09:42:41.542 [DEBUG] [Thread-183289] [transport.py] [_log()] starting thread (client mode): 0xa2d119f0
2026-02-14T09:42:41.543 [DEBUG] [Thread-183289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:42:41.558 [DEBUG] [Thread-183289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:42:41.558 [INFO] [Thread-183289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:42:41.566 [DEBUG] [Thread-183289] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:42:41.566 [DEBUG] [Thread-183289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:42:41.566 [DEBUG] [Thread-183289] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:42:41.566 [DEBUG] [Thread-183289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:42:41.566 [DEBUG] [Thread-183289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:42:41.566 [DEBUG] [Thread-183289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:42:41.566 [DEBUG] [Thread-183289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:42:41.567 [DEBUG] [Thread-183289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:42:41.567 [DEBUG] [Thread-183289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:42:41.567 [DEBUG] [Thread-183289] [transport.py] [_log()] client lang: <none>
2026-02-14T09:42:41.567 [DEBUG] [Thread-183289] [transport.py] [_log()] server lang: <none>
2026-02-14T09:42:41.567 [DEBUG] [Thread-183289] [transport.py] [_log()] kex follows: False
2026-02-14T09:42:41.567 [DEBUG] [Thread-183289] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:42:41.567 [DEBUG] [Thread-183289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:42:41.567 [DEBUG] [Thread-183289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:42:41.567 [DEBUG] [Thread-183289] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:42:41.567 [DEBUG] [Thread-183289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:42:41.567 [DEBUG] [Thread-183289] [transport.py] [_log()] Compression: none
2026-02-14T09:42:41.567 [DEBUG] [Thread-183289] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:42:41.623 [DEBUG] [Thread-183289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:42:41.624 [DEBUG] [Thread-183289] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:42:41.624 [DEBUG] [Thread-183289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:42:41.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:42:41.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:42:41.680 [DEBUG] [Thread-183289] [transport.py] [_log()] userauth is OK
2026-02-14T09:42:41.680 [DEBUG] [Thread-183289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:42:41.680 [DEBUG] [Thread-183289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:42:41.680 [DEBUG] [Thread-183289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:42:41.680 [DEBUG] [Thread-183289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:42:41.694 [INFO] [Thread-183289] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:42:41.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-14T09:42:41.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:42:42.024 [DEBUG] [Thread-183291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:42:42.535 [DEBUG] [Thread-183289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:42:42.535 [DEBUG] [Thread-183289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:42:42.584 [DEBUG] [Thread-183289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:42:42.584 [DEBUG] [Thread-183289] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:42:42.594 [DEBUG] [Thread-183289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:42:42.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:42:42.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-14T09:42:42.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-14T09:42:42.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:42:42.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:42:42.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:42:42.631 [DEBUG] [Thread-183289] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:42:52.778 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:42:52.779 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:42:57.076 [DEBUG] [Thread-183292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:43:12.113 [DEBUG] [Thread-183293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:43:12.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:43:12.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:43:12.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-14T09:43:14.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 42, 49), 7.04, 61.87, 0.0, 30.98, 11.24, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:43:14.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:42:49
2026-02-14T09:43:14.640 [DEBUG] [Thread-183294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:43:14.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:43:15.023 [DEBUG] [Thread-183295] [transport.py] [_log()] starting thread (client mode): 0xa2d13370
2026-02-14T09:43:15.023 [DEBUG] [Thread-183295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:43:15.043 [DEBUG] [Thread-183295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:43:15.044 [INFO] [Thread-183295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:43:15.046 [DEBUG] [Thread-183295] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:43:15.046 [DEBUG] [Thread-183295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:43:15.047 [DEBUG] [Thread-183295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:43:15.047 [DEBUG] [Thread-183295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:43:15.047 [DEBUG] [Thread-183295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:43:15.047 [DEBUG] [Thread-183295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:43:15.047 [DEBUG] [Thread-183295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:43:15.047 [DEBUG] [Thread-183295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:43:15.047 [DEBUG] [Thread-183295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:43:15.047 [DEBUG] [Thread-183295] [transport.py] [_log()] client lang: <none>
2026-02-14T09:43:15.047 [DEBUG] [Thread-183295] [transport.py] [_log()] server lang: <none>
2026-02-14T09:43:15.047 [DEBUG] [Thread-183295] [transport.py] [_log()] kex follows: False
2026-02-14T09:43:15.047 [DEBUG] [Thread-183295] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:43:15.047 [DEBUG] [Thread-183295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:43:15.047 [DEBUG] [Thread-183295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:43:15.047 [DEBUG] [Thread-183295] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:43:15.047 [DEBUG] [Thread-183295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:43:15.047 [DEBUG] [Thread-183295] [transport.py] [_log()] Compression: none
2026-02-14T09:43:15.047 [DEBUG] [Thread-183295] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:43:15.058 [DEBUG] [Thread-183295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:43:15.058 [DEBUG] [Thread-183295] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:43:15.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:43:15.059 [DEBUG] [Thread-183295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:43:15.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:43:15.061 [DEBUG] [Thread-183295] [transport.py] [_log()] userauth is OK
2026-02-14T09:43:15.062 [DEBUG] [Thread-183295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:43:15.062 [DEBUG] [Thread-183295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:43:15.062 [DEBUG] [Thread-183295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:43:15.062 [DEBUG] [Thread-183295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:43:15.083 [INFO] [Thread-183295] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:43:15.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:43:15.715 [DEBUG] [Thread-183295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:43:15.715 [DEBUG] [Thread-183295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:43:15.716 [DEBUG] [Thread-183295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:43:15.756 [DEBUG] [Thread-183295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:43:15.757 [DEBUG] [Thread-183295] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:43:15.760 [DEBUG] [Thread-183295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:43:15.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:43:15.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:43:15.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:43:15.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:43:15.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:43:15.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:43:15.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:43:15.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:43:15.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:43:15.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.321295 -999.00  +10.60  31.98     69   +5.30 1 2 2 1 1   888    0 6.08 34.30 ----- 25.3 32.0 141.8 40.1 16.1 -23.2 15.1 -23.4 14.1 -20.0 14.8 -23.1
2026-02-14T09:43:15.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:43:15.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:43:15.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.321295
2026-02-14T09:43:15.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:43:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:43:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:43:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:43:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:43:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:42:49', tmtdew=7.04, humidity=61.87, cloud=0.0, wind=30.98, temperature=11.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:42:39.888', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:43:15.786 [DEBUG] [Thread-183295] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:43:15.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-14T09:43:15.882 [DEBUG] [Thread-183298] [transport.py] [_log()] starting thread (client mode): 0xa2d57220
2026-02-14T09:43:15.882 [DEBUG] [Thread-183298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:43:15.896 [DEBUG] [Thread-183298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:43:15.897 [INFO] [Thread-183298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:43:15.904 [DEBUG] [Thread-183298] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:43:15.904 [DEBUG] [Thread-183298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:43:15.904 [DEBUG] [Thread-183298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:43:15.904 [DEBUG] [Thread-183298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:43:15.904 [DEBUG] [Thread-183298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:43:15.905 [DEBUG] [Thread-183298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:43:15.905 [DEBUG] [Thread-183298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:43:15.905 [DEBUG] [Thread-183298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:43:15.905 [DEBUG] [Thread-183298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:43:15.905 [DEBUG] [Thread-183298] [transport.py] [_log()] client lang: <none>
2026-02-14T09:43:15.905 [DEBUG] [Thread-183298] [transport.py] [_log()] server lang: <none>
2026-02-14T09:43:15.905 [DEBUG] [Thread-183298] [transport.py] [_log()] kex follows: False
2026-02-14T09:43:15.905 [DEBUG] [Thread-183298] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:43:15.905 [DEBUG] [Thread-183298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:43:15.906 [DEBUG] [Thread-183298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:43:15.906 [DEBUG] [Thread-183298] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:43:15.906 [DEBUG] [Thread-183298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:43:15.906 [DEBUG] [Thread-183298] [transport.py] [_log()] Compression: none
2026-02-14T09:43:15.906 [DEBUG] [Thread-183298] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:43:15.964 [DEBUG] [Thread-183298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:43:15.965 [DEBUG] [Thread-183298] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:43:15.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:43:15.966 [DEBUG] [Thread-183298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:43:15.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:43:16.020 [DEBUG] [Thread-183298] [transport.py] [_log()] userauth is OK
2026-02-14T09:43:16.020 [DEBUG] [Thread-183298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:43:16.020 [DEBUG] [Thread-183298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:43:16.021 [DEBUG] [Thread-183298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:43:16.021 [DEBUG] [Thread-183298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:43:16.039 [INFO] [Thread-183298] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:43:16.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T09:43:16.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:43:16.841 [DEBUG] [Thread-183298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:43:16.841 [DEBUG] [Thread-183298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:43:16.889 [DEBUG] [Thread-183298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:43:16.890 [DEBUG] [Thread-183298] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:43:16.899 [DEBUG] [Thread-183298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:43:16.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:43:16.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-14T09:43:16.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-14T09:43:16.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:43:16.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:43:16.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:43:16.937 [DEBUG] [Thread-183298] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:43:27.145 [DEBUG] [Thread-183300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:43:42.196 [DEBUG] [Thread-183301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:43:46.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:43:46.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:43: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-14T09:43:49.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 43, 24), 7.03, 61.9, 0.0, 30.05, 11.21, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:43:49.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:43:24
2026-02-14T09:43:49.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:43:49.519 [DEBUG] [Thread-183302] [transport.py] [_log()] starting thread (client mode): 0xa5759540
2026-02-14T09:43:49.519 [DEBUG] [Thread-183302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:43:49.539 [DEBUG] [Thread-183302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:43:49.539 [INFO] [Thread-183302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:43:49.542 [DEBUG] [Thread-183302] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:43:49.542 [DEBUG] [Thread-183302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:43:49.543 [DEBUG] [Thread-183302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:43:49.543 [DEBUG] [Thread-183302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:43:49.543 [DEBUG] [Thread-183302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:43:49.543 [DEBUG] [Thread-183302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:43:49.543 [DEBUG] [Thread-183302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:43:49.543 [DEBUG] [Thread-183302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:43:49.543 [DEBUG] [Thread-183302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:43:49.543 [DEBUG] [Thread-183302] [transport.py] [_log()] client lang: <none>
2026-02-14T09:43:49.543 [DEBUG] [Thread-183302] [transport.py] [_log()] server lang: <none>
2026-02-14T09:43:49.543 [DEBUG] [Thread-183302] [transport.py] [_log()] kex follows: False
2026-02-14T09:43:49.543 [DEBUG] [Thread-183302] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:43:49.543 [DEBUG] [Thread-183302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:43:49.543 [DEBUG] [Thread-183302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:43:49.544 [DEBUG] [Thread-183302] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:43:49.544 [DEBUG] [Thread-183302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:43:49.544 [DEBUG] [Thread-183302] [transport.py] [_log()] Compression: none
2026-02-14T09:43:49.544 [DEBUG] [Thread-183302] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:43:49.562 [DEBUG] [Thread-183302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:43:49.563 [DEBUG] [Thread-183302] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:43:49.564 [DEBUG] [Thread-183302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:43:49.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:43:49.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:43:49.604 [DEBUG] [Thread-183302] [transport.py] [_log()] userauth is OK
2026-02-14T09:43:49.605 [DEBUG] [Thread-183302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:43:49.605 [DEBUG] [Thread-183302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:43:49.605 [DEBUG] [Thread-183302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:43:49.605 [DEBUG] [Thread-183302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:43:49.626 [INFO] [Thread-183302] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:43:49.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:43:50.279 [DEBUG] [Thread-183302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:43:50.279 [DEBUG] [Thread-183302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:43:50.279 [DEBUG] [Thread-183302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:43:50.320 [DEBUG] [Thread-183302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:43:50.320 [DEBUG] [Thread-183302] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:43:50.323 [DEBUG] [Thread-183302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:43:50.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:43:50.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:43:50.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:43:50.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:43:50.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:43:50.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:43:50.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:43:50.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:43:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:43:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.321989 -999.00  +10.50  25.88     69   +5.20 1 1 1 1 1   888    0 6.08 32.07 ----- 27.0 25.9 158.2 39.5 16.2 -26.2 15.3 -24.9 14.1 -23.4 14.8 -25.2
2026-02-14T09:43:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:43:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:43:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.321989
2026-02-14T09:43:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:43:50.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:43:50.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:43:50.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:43:50.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:43:50.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:43:24', tmtdew=7.03, humidity=61.9, cloud=0.0, wind=30.05, temperature=11.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:43:39.850', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:43:50.349 [DEBUG] [Thread-183302] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:43: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-14T09:43:50.444 [DEBUG] [Thread-183305] [transport.py] [_log()] starting thread (client mode): 0xa575beb0
2026-02-14T09:43:50.444 [DEBUG] [Thread-183305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:43:50.459 [DEBUG] [Thread-183305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:43:50.459 [INFO] [Thread-183305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:43:50.467 [DEBUG] [Thread-183305] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:43:50.467 [DEBUG] [Thread-183305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:43:50.467 [DEBUG] [Thread-183305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:43:50.467 [DEBUG] [Thread-183305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:43:50.467 [DEBUG] [Thread-183305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:43:50.467 [DEBUG] [Thread-183305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:43:50.468 [DEBUG] [Thread-183305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:43:50.468 [DEBUG] [Thread-183305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:43:50.468 [DEBUG] [Thread-183305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:43:50.468 [DEBUG] [Thread-183305] [transport.py] [_log()] client lang: <none>
2026-02-14T09:43:50.468 [DEBUG] [Thread-183305] [transport.py] [_log()] server lang: <none>
2026-02-14T09:43:50.468 [DEBUG] [Thread-183305] [transport.py] [_log()] kex follows: False
2026-02-14T09:43:50.468 [DEBUG] [Thread-183305] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:43:50.468 [DEBUG] [Thread-183305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:43:50.469 [DEBUG] [Thread-183305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:43:50.469 [DEBUG] [Thread-183305] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:43:50.469 [DEBUG] [Thread-183305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:43:50.469 [DEBUG] [Thread-183305] [transport.py] [_log()] Compression: none
2026-02-14T09:43:50.469 [DEBUG] [Thread-183305] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:43:50.533 [DEBUG] [Thread-183305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:43:50.533 [DEBUG] [Thread-183305] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:43:50.534 [DEBUG] [Thread-183305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:43:50.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:43:50.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:43:50.592 [DEBUG] [Thread-183305] [transport.py] [_log()] userauth is OK
2026-02-14T09:43:50.592 [DEBUG] [Thread-183305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:43:50.592 [DEBUG] [Thread-183305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:43:50.592 [DEBUG] [Thread-183305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:43:50.592 [DEBUG] [Thread-183305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:43:50.611 [INFO] [Thread-183305] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:43:50.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-14T09:43:50.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:43:51.403 [DEBUG] [Thread-183305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:43:51.403 [DEBUG] [Thread-183305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:43:51.451 [DEBUG] [Thread-183305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:43:51.452 [DEBUG] [Thread-183305] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:43:51.461 [DEBUG] [Thread-183305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:43:51.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:43:51.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-14T09:43:51.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-14T09:43:51.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:43:51.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:43:51.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:43:51.499 [DEBUG] [Thread-183305] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:43:52.931 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:43:52.932 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:43:57.232 [DEBUG] [Thread-183307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:44:12.286 [DEBUG] [Thread-183308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:44:14.674 [DEBUG] [Thread-183309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:44:21.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:44:21.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:44:21.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-14T09:44:23.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 43, 24), 7.03, 61.9, 0.0, 30.05, 11.21, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:44:23.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:43:24
2026-02-14T09:44:24.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:44:24.427 [DEBUG] [Thread-183310] [transport.py] [_log()] starting thread (client mode): 0xa2d12710
2026-02-14T09:44:24.428 [DEBUG] [Thread-183310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:44:24.448 [DEBUG] [Thread-183310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:44:24.448 [INFO] [Thread-183310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:44:24.451 [DEBUG] [Thread-183310] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:44:24.451 [DEBUG] [Thread-183310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:44:24.451 [DEBUG] [Thread-183310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:44:24.452 [DEBUG] [Thread-183310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:44:24.452 [DEBUG] [Thread-183310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:44:24.452 [DEBUG] [Thread-183310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:44:24.452 [DEBUG] [Thread-183310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:44:24.452 [DEBUG] [Thread-183310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:44:24.452 [DEBUG] [Thread-183310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:44:24.452 [DEBUG] [Thread-183310] [transport.py] [_log()] client lang: <none>
2026-02-14T09:44:24.452 [DEBUG] [Thread-183310] [transport.py] [_log()] server lang: <none>
2026-02-14T09:44:24.452 [DEBUG] [Thread-183310] [transport.py] [_log()] kex follows: False
2026-02-14T09:44:24.452 [DEBUG] [Thread-183310] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:44:24.452 [DEBUG] [Thread-183310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:44:24.452 [DEBUG] [Thread-183310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:44:24.452 [DEBUG] [Thread-183310] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:44:24.452 [DEBUG] [Thread-183310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:44:24.452 [DEBUG] [Thread-183310] [transport.py] [_log()] Compression: none
2026-02-14T09:44:24.452 [DEBUG] [Thread-183310] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:44:24.470 [DEBUG] [Thread-183310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:44:24.470 [DEBUG] [Thread-183310] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:44:24.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:44:24.472 [DEBUG] [Thread-183310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:44:24.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:44:24.474 [DEBUG] [Thread-183310] [transport.py] [_log()] userauth is OK
2026-02-14T09:44:24.474 [DEBUG] [Thread-183310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:44:24.474 [DEBUG] [Thread-183310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:44:24.474 [DEBUG] [Thread-183310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:44:24.474 [DEBUG] [Thread-183310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:44:24.500 [INFO] [Thread-183310] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:44:24.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:44:25.099 [DEBUG] [Thread-183310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:44:25.099 [DEBUG] [Thread-183310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:44:25.100 [DEBUG] [Thread-183310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:44:25.140 [DEBUG] [Thread-183310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:44:25.141 [DEBUG] [Thread-183310] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:44:25.144 [DEBUG] [Thread-183310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:44:25.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:44:25.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:44:25.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:44:25.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:44:25.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:44:25.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:44:25.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:44:25.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:44:25.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:44:25.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.322336 -999.00  +10.40  23.74     69   +5.10 1 1 1 1 1   888    0 6.00 30.38 ----- 23.8 23.7 149.7 36.9 16.2 -27.0 15.3 -23.3 14.1 -23.3 14.8 -25.5
2026-02-14T09:44:25.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:44:25.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:44:25.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.322336
2026-02-14T09:44:25.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:44:25.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:44:25.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:44:25.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:44:25.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:44:25.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:43:24', tmtdew=7.03, humidity=61.9, cloud=0.0, wind=30.05, temperature=11.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:44:09.830', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:44:25.166 [DEBUG] [Thread-183310] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:44:25.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-14T09:44:25.264 [DEBUG] [Thread-183313] [transport.py] [_log()] starting thread (client mode): 0xa2d1ae90
2026-02-14T09:44:25.264 [DEBUG] [Thread-183313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:44:25.282 [DEBUG] [Thread-183313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:44:25.283 [INFO] [Thread-183313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:44:25.292 [DEBUG] [Thread-183313] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:44:25.293 [DEBUG] [Thread-183313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:44:25.293 [DEBUG] [Thread-183313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:44:25.293 [DEBUG] [Thread-183313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:44:25.293 [DEBUG] [Thread-183313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:44:25.293 [DEBUG] [Thread-183313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:44:25.293 [DEBUG] [Thread-183313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:44:25.293 [DEBUG] [Thread-183313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:44:25.293 [DEBUG] [Thread-183313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:44:25.293 [DEBUG] [Thread-183313] [transport.py] [_log()] client lang: <none>
2026-02-14T09:44:25.293 [DEBUG] [Thread-183313] [transport.py] [_log()] server lang: <none>
2026-02-14T09:44:25.293 [DEBUG] [Thread-183313] [transport.py] [_log()] kex follows: False
2026-02-14T09:44:25.293 [DEBUG] [Thread-183313] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:44:25.294 [DEBUG] [Thread-183313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:44:25.294 [DEBUG] [Thread-183313] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:44:25.294 [DEBUG] [Thread-183313] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:44:25.294 [DEBUG] [Thread-183313] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:44:25.294 [DEBUG] [Thread-183313] [transport.py] [_log()] Compression: none
2026-02-14T09:44:25.294 [DEBUG] [Thread-183313] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:44:25.353 [DEBUG] [Thread-183313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:44:25.354 [DEBUG] [Thread-183313] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:44:25.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:44:25.355 [DEBUG] [Thread-183313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:44:25.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:44:25.412 [DEBUG] [Thread-183313] [transport.py] [_log()] userauth is OK
2026-02-14T09:44:25.413 [DEBUG] [Thread-183313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:44:25.413 [DEBUG] [Thread-183313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:44:25.413 [DEBUG] [Thread-183313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:44:25.413 [DEBUG] [Thread-183313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:44:25.442 [INFO] [Thread-183313] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:44:25.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-14T09:44:25.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:44:26.303 [DEBUG] [Thread-183313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:44:26.303 [DEBUG] [Thread-183313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:44:26.351 [DEBUG] [Thread-183313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:44:26.352 [DEBUG] [Thread-183313] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:44:26.363 [DEBUG] [Thread-183313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:44:26.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:44:26.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-14T09:44:26.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-14T09:44:26.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:44:26.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:44:26.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:44:26.403 [DEBUG] [Thread-183313] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:44:27.326 [DEBUG] [Thread-183315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:44:42.379 [DEBUG] [Thread-183316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:44:53.071 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:44:53.072 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:44:56.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:44:56.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:44:56.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-14T09:44:57.415 [DEBUG] [Thread-183317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:44:58.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 44, 35), 7.45, 60.3, 0.0, 29.57, 12.22, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:44:58.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:44:35
2026-02-14T09:44:58.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:44:58.798 [DEBUG] [Thread-183318] [transport.py] [_log()] starting thread (client mode): 0xa575a380
2026-02-14T09:44:58.799 [DEBUG] [Thread-183318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:44:58.819 [DEBUG] [Thread-183318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:44:58.820 [INFO] [Thread-183318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:44:58.822 [DEBUG] [Thread-183318] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:44:58.822 [DEBUG] [Thread-183318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:44:58.822 [DEBUG] [Thread-183318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:44:58.823 [DEBUG] [Thread-183318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:44:58.823 [DEBUG] [Thread-183318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:44:58.823 [DEBUG] [Thread-183318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:44:58.823 [DEBUG] [Thread-183318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:44:58.823 [DEBUG] [Thread-183318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:44:58.823 [DEBUG] [Thread-183318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:44:58.823 [DEBUG] [Thread-183318] [transport.py] [_log()] client lang: <none>
2026-02-14T09:44:58.823 [DEBUG] [Thread-183318] [transport.py] [_log()] server lang: <none>
2026-02-14T09:44:58.823 [DEBUG] [Thread-183318] [transport.py] [_log()] kex follows: False
2026-02-14T09:44:58.823 [DEBUG] [Thread-183318] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:44:58.823 [DEBUG] [Thread-183318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:44:58.823 [DEBUG] [Thread-183318] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:44:58.823 [DEBUG] [Thread-183318] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:44:58.823 [DEBUG] [Thread-183318] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:44:58.823 [DEBUG] [Thread-183318] [transport.py] [_log()] Compression: none
2026-02-14T09:44:58.823 [DEBUG] [Thread-183318] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:44:58.843 [DEBUG] [Thread-183318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:44:58.843 [DEBUG] [Thread-183318] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:44:58.844 [DEBUG] [Thread-183318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:44:58.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:44:58.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:44:58.884 [DEBUG] [Thread-183318] [transport.py] [_log()] userauth is OK
2026-02-14T09:44:58.885 [DEBUG] [Thread-183318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:44:58.885 [DEBUG] [Thread-183318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:44:58.885 [DEBUG] [Thread-183318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:44:58.885 [DEBUG] [Thread-183318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:44:58.922 [INFO] [Thread-183318] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:44:58.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:44:59.582 [DEBUG] [Thread-183318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:44:59.582 [DEBUG] [Thread-183318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:44:59.583 [DEBUG] [Thread-183318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:44:59.623 [DEBUG] [Thread-183318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:44:59.624 [DEBUG] [Thread-183318] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:44:59.627 [DEBUG] [Thread-183318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:44:59.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:44:59.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:44:59.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:44:59.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:44:59.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:44:59.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:44:59.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:44:59.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:44:59.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:44:59.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.322683 -999.00  +10.30  14.87     70   +5.30 1 2 1 1 1   888    0 5.84 21.77 ----- 19.2 14.9 150.1 29.0 16.4 -25.6 15.3 -22.1 14.1 -22.2 14.9 -24.4
2026-02-14T09:44:59.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:44:59.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:44:59.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.322683
2026-02-14T09:44:59.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:44:59.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:44:59.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:44:59.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:44:59.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:44:59.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:44:35', tmtdew=7.45, humidity=60.3, cloud=0.0, wind=29.57, temperature=12.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:44:39.811', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:44:59.655 [DEBUG] [Thread-183318] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:44: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-14T09:44:59.751 [DEBUG] [Thread-183321] [transport.py] [_log()] starting thread (client mode): 0xa2d100a0
2026-02-14T09:44:59.751 [DEBUG] [Thread-183321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:44:59.769 [DEBUG] [Thread-183321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:44:59.769 [INFO] [Thread-183321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:44:59.777 [DEBUG] [Thread-183321] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:44:59.777 [DEBUG] [Thread-183321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:44:59.778 [DEBUG] [Thread-183321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:44:59.778 [DEBUG] [Thread-183321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:44:59.778 [DEBUG] [Thread-183321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:44:59.778 [DEBUG] [Thread-183321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:44:59.778 [DEBUG] [Thread-183321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:44:59.778 [DEBUG] [Thread-183321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:44:59.778 [DEBUG] [Thread-183321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:44:59.778 [DEBUG] [Thread-183321] [transport.py] [_log()] client lang: <none>
2026-02-14T09:44:59.778 [DEBUG] [Thread-183321] [transport.py] [_log()] server lang: <none>
2026-02-14T09:44:59.778 [DEBUG] [Thread-183321] [transport.py] [_log()] kex follows: False
2026-02-14T09:44:59.778 [DEBUG] [Thread-183321] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:44:59.778 [DEBUG] [Thread-183321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:44:59.778 [DEBUG] [Thread-183321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:44:59.778 [DEBUG] [Thread-183321] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:44:59.778 [DEBUG] [Thread-183321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:44:59.778 [DEBUG] [Thread-183321] [transport.py] [_log()] Compression: none
2026-02-14T09:44:59.778 [DEBUG] [Thread-183321] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:44:59.835 [DEBUG] [Thread-183321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:44:59.835 [DEBUG] [Thread-183321] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:44:59.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:44:59.837 [DEBUG] [Thread-183321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:44:59.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:44:59.891 [DEBUG] [Thread-183321] [transport.py] [_log()] userauth is OK
2026-02-14T09:44:59.891 [DEBUG] [Thread-183321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:44:59.891 [DEBUG] [Thread-183321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:44:59.891 [DEBUG] [Thread-183321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:44:59.892 [DEBUG] [Thread-183321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:44:59.910 [INFO] [Thread-183321] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:44:59.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-14T09:44:59.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:45:00.731 [DEBUG] [Thread-183321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:45:00.731 [DEBUG] [Thread-183321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:45:00.779 [DEBUG] [Thread-183321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:45:00.780 [DEBUG] [Thread-183321] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:45:00.789 [DEBUG] [Thread-183321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:45:00.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:45:00.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-14T09:45:00.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-14T09:45:00.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:45:00.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:45:00.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:45:00.826 [DEBUG] [Thread-183321] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:45:12.453 [DEBUG] [Thread-183323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:45:14.709 [DEBUG] [Thread-183324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:45:27.515 [DEBUG] [Thread-183325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:45:30.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:45:30.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:45:30.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-14T09:45:33.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 45, 10), 6.79, 63.17, 0.0, 30.68, 10.93, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:45:33.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:45:10
2026-02-14T09:45:33.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:45:33.923 [DEBUG] [Thread-183326] [transport.py] [_log()] starting thread (client mode): 0xa2d561d0
2026-02-14T09:45:33.923 [DEBUG] [Thread-183326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:45:33.944 [DEBUG] [Thread-183326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:45:33.944 [INFO] [Thread-183326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:45:33.947 [DEBUG] [Thread-183326] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:45:33.947 [DEBUG] [Thread-183326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:45:33.947 [DEBUG] [Thread-183326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:45:33.947 [DEBUG] [Thread-183326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:45:33.947 [DEBUG] [Thread-183326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:45:33.947 [DEBUG] [Thread-183326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:45:33.947 [DEBUG] [Thread-183326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:45:33.947 [DEBUG] [Thread-183326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:45:33.947 [DEBUG] [Thread-183326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:45:33.947 [DEBUG] [Thread-183326] [transport.py] [_log()] client lang: <none>
2026-02-14T09:45:33.947 [DEBUG] [Thread-183326] [transport.py] [_log()] server lang: <none>
2026-02-14T09:45:33.947 [DEBUG] [Thread-183326] [transport.py] [_log()] kex follows: False
2026-02-14T09:45:33.947 [DEBUG] [Thread-183326] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:45:33.947 [DEBUG] [Thread-183326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:45:33.947 [DEBUG] [Thread-183326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:45:33.947 [DEBUG] [Thread-183326] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:45:33.948 [DEBUG] [Thread-183326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:45:33.948 [DEBUG] [Thread-183326] [transport.py] [_log()] Compression: none
2026-02-14T09:45:33.948 [DEBUG] [Thread-183326] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:45:33.967 [DEBUG] [Thread-183326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:45:33.968 [DEBUG] [Thread-183326] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:45:33.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:45:33.969 [DEBUG] [Thread-183326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:45:33.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:45:33.971 [DEBUG] [Thread-183326] [transport.py] [_log()] userauth is OK
2026-02-14T09:45:33.971 [DEBUG] [Thread-183326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:45:33.971 [DEBUG] [Thread-183326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:45:33.971 [DEBUG] [Thread-183326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:45:33.971 [DEBUG] [Thread-183326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:45:34.008 [INFO] [Thread-183326] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:45:34.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:45:34.645 [DEBUG] [Thread-183326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:45:34.645 [DEBUG] [Thread-183326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:45:34.645 [DEBUG] [Thread-183326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:45:34.686 [DEBUG] [Thread-183326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:45:34.686 [DEBUG] [Thread-183326] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:45:34.689 [DEBUG] [Thread-183326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:45:34.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:45:34.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:45:34.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:45:34.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:45:34.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:45:34.711 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:45:34.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:45:34.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:45:34.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:45:34.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.323031 -999.00  +10.70  33.96     70   +5.60 1 2 2 1 1   888    0 5.68 18.15 ----- 22.4 34.0 157.0 39.9 16.6 -23.8 15.5 -21.3 14.2 -22.5 15.1 -24.1
2026-02-14T09:45:34.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:45:34.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:45:34.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.323031
2026-02-14T09:45:34.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:45:34.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:45:34.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:45:34.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:45:34.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:45:34.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:45:10', tmtdew=6.79, humidity=63.17, cloud=0.0, wind=30.68, temperature=10.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:45:09.878', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:45:34.713 [DEBUG] [Thread-183326] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:45:34.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-14T09:45:34.807 [DEBUG] [Thread-183329] [transport.py] [_log()] starting thread (client mode): 0xa2d55930
2026-02-14T09:45:34.808 [DEBUG] [Thread-183329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:45:34.821 [DEBUG] [Thread-183329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:45:34.821 [INFO] [Thread-183329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:45:34.829 [DEBUG] [Thread-183329] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:45:34.829 [DEBUG] [Thread-183329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:45:34.829 [DEBUG] [Thread-183329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:45:34.829 [DEBUG] [Thread-183329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:45:34.830 [DEBUG] [Thread-183329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:45:34.830 [DEBUG] [Thread-183329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:45:34.830 [DEBUG] [Thread-183329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:45:34.830 [DEBUG] [Thread-183329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:45:34.830 [DEBUG] [Thread-183329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:45:34.830 [DEBUG] [Thread-183329] [transport.py] [_log()] client lang: <none>
2026-02-14T09:45:34.830 [DEBUG] [Thread-183329] [transport.py] [_log()] server lang: <none>
2026-02-14T09:45:34.830 [DEBUG] [Thread-183329] [transport.py] [_log()] kex follows: False
2026-02-14T09:45:34.830 [DEBUG] [Thread-183329] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:45:34.830 [DEBUG] [Thread-183329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:45:34.830 [DEBUG] [Thread-183329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:45:34.830 [DEBUG] [Thread-183329] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:45:34.830 [DEBUG] [Thread-183329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:45:34.830 [DEBUG] [Thread-183329] [transport.py] [_log()] Compression: none
2026-02-14T09:45:34.830 [DEBUG] [Thread-183329] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:45:34.888 [DEBUG] [Thread-183329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:45:34.888 [DEBUG] [Thread-183329] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:45:34.889 [DEBUG] [Thread-183329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:45:34.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:45:34.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:45:34.946 [DEBUG] [Thread-183329] [transport.py] [_log()] userauth is OK
2026-02-14T09:45:34.946 [DEBUG] [Thread-183329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:45:34.946 [DEBUG] [Thread-183329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:45:34.946 [DEBUG] [Thread-183329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:45:34.947 [DEBUG] [Thread-183329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:45:34.966 [INFO] [Thread-183329] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:45:34.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-14T09:45:34.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:45:35.841 [DEBUG] [Thread-183329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:45:35.841 [DEBUG] [Thread-183329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:45:35.889 [DEBUG] [Thread-183329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:45:35.890 [DEBUG] [Thread-183329] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:45:35.898 [DEBUG] [Thread-183329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:45:35.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:45:35.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:45:35.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-14T09:45:35.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:45:35.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:45:35.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:45:35.930 [DEBUG] [Thread-183329] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:45:42.552 [DEBUG] [Thread-183331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:45:53.211 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:45:53.212 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:45:57.604 [DEBUG] [Thread-183332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:46:05.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:46:05.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:46:05.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-14T09:46:07.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 45, 47), 6.62, 63.88, 0.0, 35.52, 11.03, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:46:07.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:45:47
2026-02-14T09:46:08.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:46:08.461 [DEBUG] [Thread-183333] [transport.py] [_log()] starting thread (client mode): 0xa2d1a0e0
2026-02-14T09:46:08.461 [DEBUG] [Thread-183333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:46:08.481 [DEBUG] [Thread-183333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:46:08.481 [INFO] [Thread-183333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:46:08.484 [DEBUG] [Thread-183333] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:46:08.485 [DEBUG] [Thread-183333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:46:08.485 [DEBUG] [Thread-183333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:46:08.485 [DEBUG] [Thread-183333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:46:08.485 [DEBUG] [Thread-183333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:46:08.485 [DEBUG] [Thread-183333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:46:08.485 [DEBUG] [Thread-183333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:46:08.485 [DEBUG] [Thread-183333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:46:08.485 [DEBUG] [Thread-183333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:46:08.485 [DEBUG] [Thread-183333] [transport.py] [_log()] client lang: <none>
2026-02-14T09:46:08.485 [DEBUG] [Thread-183333] [transport.py] [_log()] server lang: <none>
2026-02-14T09:46:08.485 [DEBUG] [Thread-183333] [transport.py] [_log()] kex follows: False
2026-02-14T09:46:08.485 [DEBUG] [Thread-183333] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:46:08.485 [DEBUG] [Thread-183333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:46:08.485 [DEBUG] [Thread-183333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:46:08.485 [DEBUG] [Thread-183333] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:46:08.486 [DEBUG] [Thread-183333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:46:08.486 [DEBUG] [Thread-183333] [transport.py] [_log()] Compression: none
2026-02-14T09:46:08.486 [DEBUG] [Thread-183333] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:46:08.504 [DEBUG] [Thread-183333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:46:08.505 [DEBUG] [Thread-183333] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:46:08.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:46:08.506 [DEBUG] [Thread-183333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:46:08.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:46:08.508 [DEBUG] [Thread-183333] [transport.py] [_log()] userauth is OK
2026-02-14T09:46:08.508 [DEBUG] [Thread-183333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:46:08.508 [DEBUG] [Thread-183333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:46:08.509 [DEBUG] [Thread-183333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:46:08.509 [DEBUG] [Thread-183333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:46:08.534 [INFO] [Thread-183333] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:46:08.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:46:09.180 [DEBUG] [Thread-183333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:46:09.180 [DEBUG] [Thread-183333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:46:09.180 [DEBUG] [Thread-183333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:46:09.221 [DEBUG] [Thread-183333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:46:09.222 [DEBUG] [Thread-183333] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:46:09.225 [DEBUG] [Thread-183333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:46:09.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:46:09.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:46:09.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:46:09.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:46:09.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:46:09.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:46:09.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:46:09.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:46:09.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:46:09.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.323377 -999.00  +10.50  26.22     71   +5.50 1 2 1 1 1   888    0 5.61 16.73 ----- 24.1 26.2 140.6 35.5 16.5 -25.5 15.5 -22.4 14.2 -22.4 15.1 -25.6
2026-02-14T09:46:09.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:46:09.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:46:09.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.323377
2026-02-14T09:46:09.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:46:09.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:46:09.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:46:09.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:46:09.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:46:09.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:45:47', tmtdew=6.62, humidity=63.88, cloud=0.0, wind=35.52, temperature=11.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:45:39.773', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:46:09.249 [DEBUG] [Thread-183333] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:46:09.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-14T09:46:09.345 [DEBUG] [Thread-183336] [transport.py] [_log()] starting thread (client mode): 0xa5743fa0
2026-02-14T09:46:09.345 [DEBUG] [Thread-183336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:46:09.361 [DEBUG] [Thread-183336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:46:09.362 [INFO] [Thread-183336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:46:09.370 [DEBUG] [Thread-183336] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:46:09.370 [DEBUG] [Thread-183336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:46:09.370 [DEBUG] [Thread-183336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:46:09.370 [DEBUG] [Thread-183336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:46:09.370 [DEBUG] [Thread-183336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:46:09.370 [DEBUG] [Thread-183336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:46:09.370 [DEBUG] [Thread-183336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:46:09.370 [DEBUG] [Thread-183336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:46:09.370 [DEBUG] [Thread-183336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:46:09.370 [DEBUG] [Thread-183336] [transport.py] [_log()] client lang: <none>
2026-02-14T09:46:09.370 [DEBUG] [Thread-183336] [transport.py] [_log()] server lang: <none>
2026-02-14T09:46:09.370 [DEBUG] [Thread-183336] [transport.py] [_log()] kex follows: False
2026-02-14T09:46:09.371 [DEBUG] [Thread-183336] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:46:09.371 [DEBUG] [Thread-183336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:46:09.371 [DEBUG] [Thread-183336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:46:09.371 [DEBUG] [Thread-183336] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:46:09.371 [DEBUG] [Thread-183336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:46:09.371 [DEBUG] [Thread-183336] [transport.py] [_log()] Compression: none
2026-02-14T09:46:09.371 [DEBUG] [Thread-183336] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:46:09.429 [DEBUG] [Thread-183336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:46:09.430 [DEBUG] [Thread-183336] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:46:09.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:46:09.431 [DEBUG] [Thread-183336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:46:09.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:46:09.485 [DEBUG] [Thread-183336] [transport.py] [_log()] userauth is OK
2026-02-14T09:46:09.485 [DEBUG] [Thread-183336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:46:09.485 [DEBUG] [Thread-183336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:46:09.485 [DEBUG] [Thread-183336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:46:09.485 [DEBUG] [Thread-183336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:46:09.509 [INFO] [Thread-183336] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:46:09.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-14T09:46:09.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:46:10.330 [DEBUG] [Thread-183336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:46:10.330 [DEBUG] [Thread-183336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:46:10.377 [DEBUG] [Thread-183336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:46:10.377 [DEBUG] [Thread-183336] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:46:10.386 [DEBUG] [Thread-183336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:46:10.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:46:10.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-14T09:46:10.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:46:10.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:46:10.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:46:10.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:46:10.421 [DEBUG] [Thread-183336] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:46:12.642 [DEBUG] [Thread-183338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:46:14.754 [DEBUG] [Thread-183339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:46:27.698 [DEBUG] [Thread-183340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:46:40.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:46:40.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:46:40.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-14T09:46:42.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 46, 22), 6.68, 63.62, 0.0, 35.5, 10.99, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:46:42.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:46:22
2026-02-14T09:46:42.737 [DEBUG] [Thread-183341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:46:42.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:46:43.031 [DEBUG] [Thread-183342] [transport.py] [_log()] starting thread (client mode): 0xa57424a0
2026-02-14T09:46:43.031 [DEBUG] [Thread-183342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:46:43.051 [DEBUG] [Thread-183342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:46:43.051 [INFO] [Thread-183342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:46:43.054 [DEBUG] [Thread-183342] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:46:43.054 [DEBUG] [Thread-183342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:46:43.054 [DEBUG] [Thread-183342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:46:43.054 [DEBUG] [Thread-183342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:46:43.054 [DEBUG] [Thread-183342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:46:43.054 [DEBUG] [Thread-183342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:46:43.054 [DEBUG] [Thread-183342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:46:43.054 [DEBUG] [Thread-183342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:46:43.054 [DEBUG] [Thread-183342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:46:43.054 [DEBUG] [Thread-183342] [transport.py] [_log()] client lang: <none>
2026-02-14T09:46:43.054 [DEBUG] [Thread-183342] [transport.py] [_log()] server lang: <none>
2026-02-14T09:46:43.054 [DEBUG] [Thread-183342] [transport.py] [_log()] kex follows: False
2026-02-14T09:46:43.054 [DEBUG] [Thread-183342] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:46:43.054 [DEBUG] [Thread-183342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:46:43.055 [DEBUG] [Thread-183342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:46:43.055 [DEBUG] [Thread-183342] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:46:43.055 [DEBUG] [Thread-183342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:46:43.055 [DEBUG] [Thread-183342] [transport.py] [_log()] Compression: none
2026-02-14T09:46:43.055 [DEBUG] [Thread-183342] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:46:43.070 [DEBUG] [Thread-183342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:46:43.070 [DEBUG] [Thread-183342] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:46:43.071 [DEBUG] [Thread-183342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:46:43.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:46:43.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:46:43.112 [DEBUG] [Thread-183342] [transport.py] [_log()] userauth is OK
2026-02-14T09:46:43.112 [DEBUG] [Thread-183342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:46:43.113 [DEBUG] [Thread-183342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:46:43.113 [DEBUG] [Thread-183342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:46:43.113 [DEBUG] [Thread-183342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:46:43.139 [INFO] [Thread-183342] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:46:43.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:46:43.703 [DEBUG] [Thread-183342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:46:43.703 [DEBUG] [Thread-183342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:46:43.703 [DEBUG] [Thread-183342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:46:43.743 [DEBUG] [Thread-183342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:46:43.744 [DEBUG] [Thread-183342] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:46:43.747 [DEBUG] [Thread-183342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:46:43.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:46:43.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:46:43.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:46:43.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:46:43.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:46:43.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:46:43.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:46:43.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:46:43.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:46:43.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.323725 -999.00  +10.60  29.50     71   +5.60 1 2 1 1 1   888    0 5.61 13.68 ----- 33.0 29.5 168.0 37.5 16.8 -21.9 15.6 -20.7 14.3 -21.1 15.2 -24.4
2026-02-14T09:46:43.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:46:43.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:46:43.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.323725
2026-02-14T09:46:43.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:46:43.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:46:43.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:46:43.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:46:43.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:46:43.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:46:22', tmtdew=6.68, humidity=63.62, cloud=0.0, wind=35.5, temperature=10.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:46:09.840', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:46:43.776 [DEBUG] [Thread-183342] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:46:43.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-14T09:46:43.884 [DEBUG] [Thread-183345] [transport.py] [_log()] starting thread (client mode): 0xa2d18940
2026-02-14T09:46:43.884 [DEBUG] [Thread-183345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:46:43.898 [DEBUG] [Thread-183345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:46:43.898 [INFO] [Thread-183345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:46:43.906 [DEBUG] [Thread-183345] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:46:43.906 [DEBUG] [Thread-183345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:46:43.906 [DEBUG] [Thread-183345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:46:43.906 [DEBUG] [Thread-183345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:46:43.906 [DEBUG] [Thread-183345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:46:43.906 [DEBUG] [Thread-183345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:46:43.906 [DEBUG] [Thread-183345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:46:43.906 [DEBUG] [Thread-183345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:46:43.906 [DEBUG] [Thread-183345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:46:43.906 [DEBUG] [Thread-183345] [transport.py] [_log()] client lang: <none>
2026-02-14T09:46:43.906 [DEBUG] [Thread-183345] [transport.py] [_log()] server lang: <none>
2026-02-14T09:46:43.906 [DEBUG] [Thread-183345] [transport.py] [_log()] kex follows: False
2026-02-14T09:46:43.906 [DEBUG] [Thread-183345] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:46:43.907 [DEBUG] [Thread-183345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:46:43.907 [DEBUG] [Thread-183345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:46:43.907 [DEBUG] [Thread-183345] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:46:43.907 [DEBUG] [Thread-183345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:46:43.907 [DEBUG] [Thread-183345] [transport.py] [_log()] Compression: none
2026-02-14T09:46:43.907 [DEBUG] [Thread-183345] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:46:43.969 [DEBUG] [Thread-183345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:46:43.969 [DEBUG] [Thread-183345] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:46:43.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:46:43.970 [DEBUG] [Thread-183345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:46:43.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:46:44.024 [DEBUG] [Thread-183345] [transport.py] [_log()] userauth is OK
2026-02-14T09:46:44.025 [DEBUG] [Thread-183345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:46:44.025 [DEBUG] [Thread-183345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:46:44.025 [DEBUG] [Thread-183345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:46:44.025 [DEBUG] [Thread-183345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:46:44.039 [INFO] [Thread-183345] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:46:44.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T09:46:44.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:46:44.849 [DEBUG] [Thread-183345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:46:44.850 [DEBUG] [Thread-183345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:46:44.897 [DEBUG] [Thread-183345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:46:44.898 [DEBUG] [Thread-183345] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:46:44.907 [DEBUG] [Thread-183345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:46:44.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:46:44.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-14T09:46:44.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-14T09:46:44.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:46:44.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:46:44.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:46:44.944 [DEBUG] [Thread-183345] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:46:53.355 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:46:53.356 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:46:57.777 [DEBUG] [Thread-183347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:47:12.831 [DEBUG] [Thread-183348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:47:14.787 [DEBUG] [Thread-183349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:47:14.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:47:14.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:47:14.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-14T09:47:16.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 46, 57), 6.65, 63.66, 0.0, 27.81, 11.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:47:16.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:46:57
2026-02-14T09:47:17.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:47:17.457 [DEBUG] [Thread-183350] [transport.py] [_log()] starting thread (client mode): 0xa2d13d30
2026-02-14T09:47:17.457 [DEBUG] [Thread-183350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:47:17.476 [DEBUG] [Thread-183350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:47:17.476 [INFO] [Thread-183350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:47:17.479 [DEBUG] [Thread-183350] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:47:17.479 [DEBUG] [Thread-183350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:47:17.479 [DEBUG] [Thread-183350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:47:17.479 [DEBUG] [Thread-183350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:47:17.479 [DEBUG] [Thread-183350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:47:17.479 [DEBUG] [Thread-183350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:47:17.479 [DEBUG] [Thread-183350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:47:17.479 [DEBUG] [Thread-183350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:47:17.479 [DEBUG] [Thread-183350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:47:17.479 [DEBUG] [Thread-183350] [transport.py] [_log()] client lang: <none>
2026-02-14T09:47:17.479 [DEBUG] [Thread-183350] [transport.py] [_log()] server lang: <none>
2026-02-14T09:47:17.479 [DEBUG] [Thread-183350] [transport.py] [_log()] kex follows: False
2026-02-14T09:47:17.479 [DEBUG] [Thread-183350] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:47:17.479 [DEBUG] [Thread-183350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:47:17.480 [DEBUG] [Thread-183350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:47:17.480 [DEBUG] [Thread-183350] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:47:17.480 [DEBUG] [Thread-183350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:47:17.480 [DEBUG] [Thread-183350] [transport.py] [_log()] Compression: none
2026-02-14T09:47:17.480 [DEBUG] [Thread-183350] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:47:17.495 [DEBUG] [Thread-183350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:47:17.496 [DEBUG] [Thread-183350] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:47:17.496 [DEBUG] [Thread-183350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:47:17.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:47:17.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:47:17.498 [DEBUG] [Thread-183350] [transport.py] [_log()] userauth is OK
2026-02-14T09:47:17.498 [DEBUG] [Thread-183350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:47:17.499 [DEBUG] [Thread-183350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:47:17.499 [DEBUG] [Thread-183350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:47:17.499 [DEBUG] [Thread-183350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:47:17.516 [INFO] [Thread-183350] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:47:17.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:47:18.071 [DEBUG] [Thread-183350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:47:18.071 [DEBUG] [Thread-183350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:47:18.071 [DEBUG] [Thread-183350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:47:18.112 [DEBUG] [Thread-183350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:47:18.112 [DEBUG] [Thread-183350] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:47:18.114 [DEBUG] [Thread-183350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:47:18.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:47:18.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:47:18.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:47:18.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:47:18.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:47:18.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:47:18.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:47:18.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:47:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:47:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.324072 -999.00  +10.50  23.72     71   +5.50 1 2 1 1 1   888    0 5.56 11.74 ----- 18.1 23.7 164.8 31.6 16.8 -21.2 15.7 -21.0 14.3 -20.4 15.3 -22.0
2026-02-14T09:47:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:47:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:47:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.324072
2026-02-14T09:47:18.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:47:18.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:47:18.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:47:18.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:47:18.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:47:18.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:46:57', tmtdew=6.65, humidity=63.66, cloud=0.0, wind=27.81, temperature=11.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:46:39.821', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:47:18.147 [DEBUG] [Thread-183350] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:47:18.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-14T09:47:18.242 [DEBUG] [Thread-183353] [transport.py] [_log()] starting thread (client mode): 0xa2ddd390
2026-02-14T09:47:18.243 [DEBUG] [Thread-183353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:47:18.257 [DEBUG] [Thread-183353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:47:18.257 [INFO] [Thread-183353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:47:18.265 [DEBUG] [Thread-183353] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:47:18.266 [DEBUG] [Thread-183353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:47:18.266 [DEBUG] [Thread-183353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:47:18.266 [DEBUG] [Thread-183353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:47:18.266 [DEBUG] [Thread-183353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:47:18.266 [DEBUG] [Thread-183353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:47:18.266 [DEBUG] [Thread-183353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:47:18.266 [DEBUG] [Thread-183353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:47:18.266 [DEBUG] [Thread-183353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:47:18.266 [DEBUG] [Thread-183353] [transport.py] [_log()] client lang: <none>
2026-02-14T09:47:18.266 [DEBUG] [Thread-183353] [transport.py] [_log()] server lang: <none>
2026-02-14T09:47:18.266 [DEBUG] [Thread-183353] [transport.py] [_log()] kex follows: False
2026-02-14T09:47:18.266 [DEBUG] [Thread-183353] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:47:18.266 [DEBUG] [Thread-183353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:47:18.266 [DEBUG] [Thread-183353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:47:18.266 [DEBUG] [Thread-183353] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:47:18.267 [DEBUG] [Thread-183353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:47:18.267 [DEBUG] [Thread-183353] [transport.py] [_log()] Compression: none
2026-02-14T09:47:18.267 [DEBUG] [Thread-183353] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:47:18.324 [DEBUG] [Thread-183353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:47:18.324 [DEBUG] [Thread-183353] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:47:18.325 [DEBUG] [Thread-183353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:47:18.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:47:18.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:47:18.380 [DEBUG] [Thread-183353] [transport.py] [_log()] userauth is OK
2026-02-14T09:47:18.380 [DEBUG] [Thread-183353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:47:18.380 [DEBUG] [Thread-183353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:47:18.380 [DEBUG] [Thread-183353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:47:18.381 [DEBUG] [Thread-183353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:47:18.401 [INFO] [Thread-183353] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:47:18.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-14T09:47:18.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:47:19.230 [DEBUG] [Thread-183353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:47:19.230 [DEBUG] [Thread-183353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:47:19.277 [DEBUG] [Thread-183353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:47:19.278 [DEBUG] [Thread-183353] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:47:19.287 [DEBUG] [Thread-183353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:47:19.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:47:19.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:47:19.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-14T09:47:19.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:47:19.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:47:19.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:47:19.542 [DEBUG] [Thread-183353] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:47:27.867 [DEBUG] [Thread-183355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:47:42.925 [DEBUG] [Thread-183356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:47:49.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:47:49.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:47:49.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-14T09:47:51.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 47, 34), 7.14, 61.49, 0.0, 33.1, 11.66, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:47:51.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:47:34
2026-02-14T09:47:51.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:47:51.853 [DEBUG] [Thread-183357] [transport.py] [_log()] starting thread (client mode): 0xa2d10820
2026-02-14T09:47:51.854 [DEBUG] [Thread-183357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:47:51.875 [DEBUG] [Thread-183357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:47:51.875 [INFO] [Thread-183357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:47:51.878 [DEBUG] [Thread-183357] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:47:51.878 [DEBUG] [Thread-183357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:47:51.878 [DEBUG] [Thread-183357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:47:51.878 [DEBUG] [Thread-183357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:47:51.878 [DEBUG] [Thread-183357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:47:51.878 [DEBUG] [Thread-183357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:47:51.879 [DEBUG] [Thread-183357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:47:51.879 [DEBUG] [Thread-183357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:47:51.879 [DEBUG] [Thread-183357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:47:51.879 [DEBUG] [Thread-183357] [transport.py] [_log()] client lang: <none>
2026-02-14T09:47:51.879 [DEBUG] [Thread-183357] [transport.py] [_log()] server lang: <none>
2026-02-14T09:47:51.879 [DEBUG] [Thread-183357] [transport.py] [_log()] kex follows: False
2026-02-14T09:47:51.879 [DEBUG] [Thread-183357] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:47:51.879 [DEBUG] [Thread-183357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:47:51.879 [DEBUG] [Thread-183357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:47:51.879 [DEBUG] [Thread-183357] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:47:51.879 [DEBUG] [Thread-183357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:47:51.880 [DEBUG] [Thread-183357] [transport.py] [_log()] Compression: none
2026-02-14T09:47:51.880 [DEBUG] [Thread-183357] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:47:51.898 [DEBUG] [Thread-183357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:47:51.899 [DEBUG] [Thread-183357] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:47:51.899 [DEBUG] [Thread-183357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:47:51.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:47:51.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:47:51.901 [DEBUG] [Thread-183357] [transport.py] [_log()] userauth is OK
2026-02-14T09:47:51.902 [DEBUG] [Thread-183357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:47:51.902 [DEBUG] [Thread-183357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:47:51.902 [DEBUG] [Thread-183357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:47:51.902 [DEBUG] [Thread-183357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:47:51.927 [INFO] [Thread-183357] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:47:51.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:47:52.565 [DEBUG] [Thread-183357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:47:52.565 [DEBUG] [Thread-183357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:47:52.566 [DEBUG] [Thread-183357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:47:52.606 [DEBUG] [Thread-183357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:47:52.607 [DEBUG] [Thread-183357] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:47:52.610 [DEBUG] [Thread-183357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:47:52.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:47:52.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:47:52.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:47:52.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:47:52.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:47:52.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:47:52.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:47:52.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:47:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:47:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.324420 -999.00  +10.90  17.14     70   +5.80 1 2 1 1 1   888    0 5.37 9.87 ----- 22.7 17.1 152.3 29.1 16.9 -19.7 15.6 -19.6 14.4 -20.4 15.3 -20.9
2026-02-14T09:47:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:47:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:47:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.324420
2026-02-14T09:47:52.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:47:52.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:47:52.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:47:52.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:47:52.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:47:52.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:47:34', tmtdew=7.14, humidity=61.49, cloud=0.0, wind=33.1, temperature=11.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:47:09.888', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:47:52.639 [DEBUG] [Thread-183357] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:47:52.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-14T09:47:52.735 [DEBUG] [Thread-183360] [transport.py] [_log()] starting thread (client mode): 0xa2d10b50
2026-02-14T09:47:52.736 [DEBUG] [Thread-183360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:47:52.753 [DEBUG] [Thread-183360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:47:52.753 [INFO] [Thread-183360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:47:52.761 [DEBUG] [Thread-183360] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:47:52.761 [DEBUG] [Thread-183360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:47:52.762 [DEBUG] [Thread-183360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:47:52.762 [DEBUG] [Thread-183360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:47:52.762 [DEBUG] [Thread-183360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:47:52.762 [DEBUG] [Thread-183360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:47:52.762 [DEBUG] [Thread-183360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:47:52.762 [DEBUG] [Thread-183360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:47:52.762 [DEBUG] [Thread-183360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:47:52.762 [DEBUG] [Thread-183360] [transport.py] [_log()] client lang: <none>
2026-02-14T09:47:52.762 [DEBUG] [Thread-183360] [transport.py] [_log()] server lang: <none>
2026-02-14T09:47:52.762 [DEBUG] [Thread-183360] [transport.py] [_log()] kex follows: False
2026-02-14T09:47:52.762 [DEBUG] [Thread-183360] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:47:52.762 [DEBUG] [Thread-183360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:47:52.762 [DEBUG] [Thread-183360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:47:52.763 [DEBUG] [Thread-183360] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:47:52.763 [DEBUG] [Thread-183360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:47:52.763 [DEBUG] [Thread-183360] [transport.py] [_log()] Compression: none
2026-02-14T09:47:52.763 [DEBUG] [Thread-183360] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:47:52.818 [DEBUG] [Thread-183360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:47:52.819 [DEBUG] [Thread-183360] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:47:52.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:47:52.820 [DEBUG] [Thread-183360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:47:52.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:47:52.874 [DEBUG] [Thread-183360] [transport.py] [_log()] userauth is OK
2026-02-14T09:47:52.874 [DEBUG] [Thread-183360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:47:52.874 [DEBUG] [Thread-183360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:47:52.874 [DEBUG] [Thread-183360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:47:52.874 [DEBUG] [Thread-183360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:47:52.893 [INFO] [Thread-183360] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:47: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-14T09:47:52.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:47:53.500 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:47:53.502 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:47:53.727 [DEBUG] [Thread-183360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:47:53.727 [DEBUG] [Thread-183360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:47:53.776 [DEBUG] [Thread-183360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:47:53.776 [DEBUG] [Thread-183360] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:47:53.784 [DEBUG] [Thread-183360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:47:53.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:47:53.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:47:53.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-14T09:47:53.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:47:53.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:47:53.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:47:53.816 [DEBUG] [Thread-183360] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:47:57.960 [DEBUG] [Thread-183362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:48:13.020 [DEBUG] [Thread-183363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:48:14.821 [DEBUG] [Thread-183364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:48:23.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:48:23.835 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:48:23.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-14T09:48:25.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 48, 10), 6.72, 63.46, 0.0, 32.99, 10.98, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:48:25.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:48:10
2026-02-14T09:48:26.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:48:26.314 [DEBUG] [Thread-183365] [transport.py] [_log()] starting thread (client mode): 0xa2d10ee0
2026-02-14T09:48:26.314 [DEBUG] [Thread-183365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:48:26.334 [DEBUG] [Thread-183365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:48:26.334 [INFO] [Thread-183365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:48:26.338 [DEBUG] [Thread-183365] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:48:26.338 [DEBUG] [Thread-183365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:48:26.338 [DEBUG] [Thread-183365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:48:26.338 [DEBUG] [Thread-183365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:48:26.338 [DEBUG] [Thread-183365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:48:26.338 [DEBUG] [Thread-183365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:48:26.338 [DEBUG] [Thread-183365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:48:26.338 [DEBUG] [Thread-183365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:48:26.338 [DEBUG] [Thread-183365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:48:26.338 [DEBUG] [Thread-183365] [transport.py] [_log()] client lang: <none>
2026-02-14T09:48:26.338 [DEBUG] [Thread-183365] [transport.py] [_log()] server lang: <none>
2026-02-14T09:48:26.339 [DEBUG] [Thread-183365] [transport.py] [_log()] kex follows: False
2026-02-14T09:48:26.339 [DEBUG] [Thread-183365] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:48:26.339 [DEBUG] [Thread-183365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:48:26.339 [DEBUG] [Thread-183365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:48:26.339 [DEBUG] [Thread-183365] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:48:26.339 [DEBUG] [Thread-183365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:48:26.339 [DEBUG] [Thread-183365] [transport.py] [_log()] Compression: none
2026-02-14T09:48:26.339 [DEBUG] [Thread-183365] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:48:26.356 [DEBUG] [Thread-183365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:48:26.357 [DEBUG] [Thread-183365] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:48:26.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:48:26.358 [DEBUG] [Thread-183365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:48:26.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:48:26.360 [DEBUG] [Thread-183365] [transport.py] [_log()] userauth is OK
2026-02-14T09:48:26.361 [DEBUG] [Thread-183365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:48:26.361 [DEBUG] [Thread-183365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:48:26.361 [DEBUG] [Thread-183365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:48:26.361 [DEBUG] [Thread-183365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:48:26.387 [INFO] [Thread-183365] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:48:26.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:48:26.991 [DEBUG] [Thread-183365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:48:26.992 [DEBUG] [Thread-183365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:48:26.992 [DEBUG] [Thread-183365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:48:27.032 [DEBUG] [Thread-183365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:48:27.033 [DEBUG] [Thread-183365] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:48:27.036 [DEBUG] [Thread-183365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:48:27.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:48:27.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:48:27.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:48:27.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:48:27.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:48:27.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:48:27.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:48:27.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:48:27.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:48:27.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.325114 -999.00  +10.70  20.98     70   +5.50 1 2 1 1 1   888    0 5.36 9.39 ----- 21.0 21.0 165.8 33.1 16.2 -18.8 15.3 -15.5 14.1 -15.9 14.9 -20.2
2026-02-14T09:48:27.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:48:27.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:48:27.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.325114
2026-02-14T09:48:27.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:48:27.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:48:27.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:48:27.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:48:27.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:48:27.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:48:10', tmtdew=6.72, humidity=63.46, cloud=0.0, wind=32.99, temperature=10.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:48:09.850', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:48:27.062 [DEBUG] [Thread-183365] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:48:27.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-14T09:48:27.159 [DEBUG] [Thread-183368] [transport.py] [_log()] starting thread (client mode): 0xa57413f0
2026-02-14T09:48:27.160 [DEBUG] [Thread-183368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:48:27.174 [DEBUG] [Thread-183368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:48:27.175 [INFO] [Thread-183368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:48:27.182 [DEBUG] [Thread-183368] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:48:27.183 [DEBUG] [Thread-183368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:48:27.183 [DEBUG] [Thread-183368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:48:27.183 [DEBUG] [Thread-183368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:48:27.183 [DEBUG] [Thread-183368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:48:27.183 [DEBUG] [Thread-183368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:48:27.183 [DEBUG] [Thread-183368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:48:27.183 [DEBUG] [Thread-183368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:48:27.183 [DEBUG] [Thread-183368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:48:27.184 [DEBUG] [Thread-183368] [transport.py] [_log()] client lang: <none>
2026-02-14T09:48:27.184 [DEBUG] [Thread-183368] [transport.py] [_log()] server lang: <none>
2026-02-14T09:48:27.184 [DEBUG] [Thread-183368] [transport.py] [_log()] kex follows: False
2026-02-14T09:48:27.184 [DEBUG] [Thread-183368] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:48:27.184 [DEBUG] [Thread-183368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:48:27.184 [DEBUG] [Thread-183368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:48:27.184 [DEBUG] [Thread-183368] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:48:27.185 [DEBUG] [Thread-183368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:48:27.185 [DEBUG] [Thread-183368] [transport.py] [_log()] Compression: none
2026-02-14T09:48:27.185 [DEBUG] [Thread-183368] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:48:27.240 [DEBUG] [Thread-183368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:48:27.241 [DEBUG] [Thread-183368] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:48:27.241 [DEBUG] [Thread-183368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:48:27.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:48:27.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:48:27.296 [DEBUG] [Thread-183368] [transport.py] [_log()] userauth is OK
2026-02-14T09:48:27.296 [DEBUG] [Thread-183368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:48:27.296 [DEBUG] [Thread-183368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:48:27.297 [DEBUG] [Thread-183368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:48:27.297 [DEBUG] [Thread-183368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:48:27.315 [INFO] [Thread-183368] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:48:27.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-14T09:48:27.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:48:28.061 [DEBUG] [Thread-183370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:48:28.135 [DEBUG] [Thread-183368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:48:28.135 [DEBUG] [Thread-183368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:48:28.184 [DEBUG] [Thread-183368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:48:28.184 [DEBUG] [Thread-183368] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:48:28.193 [DEBUG] [Thread-183368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:48:28.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:48:28.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:48:28.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:48:28.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:48:28.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:48:28.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:48:28.227 [DEBUG] [Thread-183368] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:48:43.114 [DEBUG] [Thread-183371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:48:53.642 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:48:53.643 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:48:58.148 [DEBUG] [Thread-183372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:48:58.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:48:58.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:48:58.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-14T09:49:00.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 48, 46), 6.56, 63.89, 0.0, 27.52, 10.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:49:00.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:48:46
2026-02-14T09:49:00.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:49:00.595 [DEBUG] [Thread-183373] [transport.py] [_log()] starting thread (client mode): 0xa2d56230
2026-02-14T09:49:00.595 [DEBUG] [Thread-183373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:49:00.618 [DEBUG] [Thread-183373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:49:00.618 [INFO] [Thread-183373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:49:00.620 [DEBUG] [Thread-183373] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:49:00.620 [DEBUG] [Thread-183373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:49:00.620 [DEBUG] [Thread-183373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:49:00.620 [DEBUG] [Thread-183373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:49:00.620 [DEBUG] [Thread-183373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:49:00.620 [DEBUG] [Thread-183373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:49:00.620 [DEBUG] [Thread-183373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:49:00.620 [DEBUG] [Thread-183373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:49:00.620 [DEBUG] [Thread-183373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:49:00.620 [DEBUG] [Thread-183373] [transport.py] [_log()] client lang: <none>
2026-02-14T09:49:00.621 [DEBUG] [Thread-183373] [transport.py] [_log()] server lang: <none>
2026-02-14T09:49:00.621 [DEBUG] [Thread-183373] [transport.py] [_log()] kex follows: False
2026-02-14T09:49:00.621 [DEBUG] [Thread-183373] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:49:00.621 [DEBUG] [Thread-183373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:49:00.621 [DEBUG] [Thread-183373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:49:00.621 [DEBUG] [Thread-183373] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:49:00.621 [DEBUG] [Thread-183373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:49:00.621 [DEBUG] [Thread-183373] [transport.py] [_log()] Compression: none
2026-02-14T09:49:00.621 [DEBUG] [Thread-183373] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:49:00.642 [DEBUG] [Thread-183373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:49:00.643 [DEBUG] [Thread-183373] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:49:00.644 [DEBUG] [Thread-183373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:49:00.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:49:00.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:49:00.646 [DEBUG] [Thread-183373] [transport.py] [_log()] userauth is OK
2026-02-14T09:49:00.646 [DEBUG] [Thread-183373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:49:00.646 [DEBUG] [Thread-183373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:49:00.646 [DEBUG] [Thread-183373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:49:00.646 [DEBUG] [Thread-183373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:49:00.671 [INFO] [Thread-183373] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:49:00.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:49:01.345 [DEBUG] [Thread-183373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:49:01.345 [DEBUG] [Thread-183373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:49:01.345 [DEBUG] [Thread-183373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:49:01.386 [DEBUG] [Thread-183373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:49:01.387 [DEBUG] [Thread-183373] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:49:01.390 [DEBUG] [Thread-183373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:49:01.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:49:01.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:49:01.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:49:01.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:49:01.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:49:01.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:49:01.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:49:01.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:49:01.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:49:01.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.325461 -999.00  +10.60  28.31     70   +5.40 1 2 1 1 1   888    0 5.50 9.76 ----- 30.0 28.3 162.2 40.6 16.2 -15.0 15.2 -13.9 14.2 -13.0 14.9 -15.7
2026-02-14T09:49:01.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:49:01.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:49:01.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.325461
2026-02-14T09:49:01.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:49:01.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:49:01.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:49:01.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:49:01.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:49:01.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:48:46', tmtdew=6.56, humidity=63.89, cloud=0.0, wind=27.52, temperature=10.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:48:39.830', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:49:01.417 [DEBUG] [Thread-183373] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:49:01.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T09:49:01.511 [DEBUG] [Thread-183376] [transport.py] [_log()] starting thread (client mode): 0xa2db7c40
2026-02-14T09:49:01.511 [DEBUG] [Thread-183376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:49:01.526 [DEBUG] [Thread-183376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:49:01.526 [INFO] [Thread-183376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:49:01.534 [DEBUG] [Thread-183376] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:49:01.534 [DEBUG] [Thread-183376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:49:01.535 [DEBUG] [Thread-183376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:49:01.535 [DEBUG] [Thread-183376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:49:01.535 [DEBUG] [Thread-183376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:49:01.535 [DEBUG] [Thread-183376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:49:01.535 [DEBUG] [Thread-183376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:49:01.535 [DEBUG] [Thread-183376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:49:01.535 [DEBUG] [Thread-183376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:49:01.535 [DEBUG] [Thread-183376] [transport.py] [_log()] client lang: <none>
2026-02-14T09:49:01.535 [DEBUG] [Thread-183376] [transport.py] [_log()] server lang: <none>
2026-02-14T09:49:01.535 [DEBUG] [Thread-183376] [transport.py] [_log()] kex follows: False
2026-02-14T09:49:01.535 [DEBUG] [Thread-183376] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:49:01.535 [DEBUG] [Thread-183376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:49:01.535 [DEBUG] [Thread-183376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:49:01.535 [DEBUG] [Thread-183376] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:49:01.535 [DEBUG] [Thread-183376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:49:01.535 [DEBUG] [Thread-183376] [transport.py] [_log()] Compression: none
2026-02-14T09:49:01.535 [DEBUG] [Thread-183376] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:49:01.593 [DEBUG] [Thread-183376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:49:01.594 [DEBUG] [Thread-183376] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:49:01.595 [DEBUG] [Thread-183376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:49:01.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:49:01.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:49:01.650 [DEBUG] [Thread-183376] [transport.py] [_log()] userauth is OK
2026-02-14T09:49:01.650 [DEBUG] [Thread-183376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:49:01.650 [DEBUG] [Thread-183376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:49:01.650 [DEBUG] [Thread-183376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:49:01.650 [DEBUG] [Thread-183376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:49:01.669 [INFO] [Thread-183376] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:49:01.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-14T09:49:01.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:49:02.505 [DEBUG] [Thread-183376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:49:02.506 [DEBUG] [Thread-183376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:49:02.556 [DEBUG] [Thread-183376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:49:02.557 [DEBUG] [Thread-183376] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:49:02.567 [DEBUG] [Thread-183376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:49:02.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:49:02.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:49:02.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-14T09:49:02.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:49:02.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:49:02.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:49:02.608 [DEBUG] [Thread-183376] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:49:13.184 [DEBUG] [Thread-183378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:49:14.876 [DEBUG] [Thread-183379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:49:28.235 [DEBUG] [Thread-183380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:49:32.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:49:32.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:49:32.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:49:34.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 49, 22), 6.47, 64.31, 0.0, 25.21, 10.63, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:49:34.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:49:22
2026-02-14T09:49:35.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:49:35.258 [DEBUG] [Thread-183381] [transport.py] [_log()] starting thread (client mode): 0xa2d54c10
2026-02-14T09:49:35.258 [DEBUG] [Thread-183381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:49:35.280 [DEBUG] [Thread-183381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:49:35.280 [INFO] [Thread-183381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:49:35.282 [DEBUG] [Thread-183381] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:49:35.282 [DEBUG] [Thread-183381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:49:35.282 [DEBUG] [Thread-183381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:49:35.282 [DEBUG] [Thread-183381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:49:35.282 [DEBUG] [Thread-183381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:49:35.282 [DEBUG] [Thread-183381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:49:35.282 [DEBUG] [Thread-183381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:49:35.282 [DEBUG] [Thread-183381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:49:35.282 [DEBUG] [Thread-183381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:49:35.282 [DEBUG] [Thread-183381] [transport.py] [_log()] client lang: <none>
2026-02-14T09:49:35.283 [DEBUG] [Thread-183381] [transport.py] [_log()] server lang: <none>
2026-02-14T09:49:35.283 [DEBUG] [Thread-183381] [transport.py] [_log()] kex follows: False
2026-02-14T09:49:35.283 [DEBUG] [Thread-183381] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:49:35.283 [DEBUG] [Thread-183381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:49:35.283 [DEBUG] [Thread-183381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:49:35.283 [DEBUG] [Thread-183381] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:49:35.283 [DEBUG] [Thread-183381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:49:35.283 [DEBUG] [Thread-183381] [transport.py] [_log()] Compression: none
2026-02-14T09:49:35.283 [DEBUG] [Thread-183381] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:49:35.293 [DEBUG] [Thread-183381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:49:35.293 [DEBUG] [Thread-183381] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:49:35.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:49:35.294 [DEBUG] [Thread-183381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:49:35.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:49:35.297 [DEBUG] [Thread-183381] [transport.py] [_log()] userauth is OK
2026-02-14T09:49:35.297 [DEBUG] [Thread-183381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:49:35.297 [DEBUG] [Thread-183381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:49:35.297 [DEBUG] [Thread-183381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:49:35.297 [DEBUG] [Thread-183381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:49:35.333 [INFO] [Thread-183381] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:49:35.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:49:35.976 [DEBUG] [Thread-183381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:49:35.976 [DEBUG] [Thread-183381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:49:35.976 [DEBUG] [Thread-183381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:49:36.017 [DEBUG] [Thread-183381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:49:36.018 [DEBUG] [Thread-183381] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:49:36.021 [DEBUG] [Thread-183381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:49:36.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:49:36.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:49:36.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:49:36.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:49:36.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:49:36.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:49:36.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:49:36.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:49:36.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:49:36.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.325808 -999.00  +10.40  31.69     70   +5.30 1 2 2 1 1   888    0 5.26 8.83 ----- 25.4 31.7 163.2 37.5 16.1 -16.0 15.3 -15.0 14.2 -18.3 15.1 -14.5
2026-02-14T09:49:36.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:49:36.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:49:36.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.325808
2026-02-14T09:49:36.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:49:36.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:49:36.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:49:36.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:49:36.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:49:36.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:49:22', tmtdew=6.47, humidity=64.31, cloud=0.0, wind=25.21, temperature=10.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:49:09.811', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:49:36.049 [DEBUG] [Thread-183381] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:49:36.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-14T09:49:36.145 [DEBUG] [Thread-183384] [transport.py] [_log()] starting thread (client mode): 0xa2d11750
2026-02-14T09:49:36.145 [DEBUG] [Thread-183384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:49:36.160 [DEBUG] [Thread-183384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:49:36.160 [INFO] [Thread-183384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:49:36.168 [DEBUG] [Thread-183384] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:49:36.168 [DEBUG] [Thread-183384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:49:36.168 [DEBUG] [Thread-183384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:49:36.168 [DEBUG] [Thread-183384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:49:36.168 [DEBUG] [Thread-183384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:49:36.168 [DEBUG] [Thread-183384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:49:36.168 [DEBUG] [Thread-183384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:49:36.168 [DEBUG] [Thread-183384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:49:36.168 [DEBUG] [Thread-183384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:49:36.168 [DEBUG] [Thread-183384] [transport.py] [_log()] client lang: <none>
2026-02-14T09:49:36.169 [DEBUG] [Thread-183384] [transport.py] [_log()] server lang: <none>
2026-02-14T09:49:36.169 [DEBUG] [Thread-183384] [transport.py] [_log()] kex follows: False
2026-02-14T09:49:36.169 [DEBUG] [Thread-183384] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:49:36.169 [DEBUG] [Thread-183384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:49:36.169 [DEBUG] [Thread-183384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:49:36.169 [DEBUG] [Thread-183384] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:49:36.169 [DEBUG] [Thread-183384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:49:36.169 [DEBUG] [Thread-183384] [transport.py] [_log()] Compression: none
2026-02-14T09:49:36.169 [DEBUG] [Thread-183384] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:49:36.225 [DEBUG] [Thread-183384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:49:36.226 [DEBUG] [Thread-183384] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:49:36.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:49:36.227 [DEBUG] [Thread-183384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:49:36.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:49:36.281 [DEBUG] [Thread-183384] [transport.py] [_log()] userauth is OK
2026-02-14T09:49:36.282 [DEBUG] [Thread-183384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:49:36.282 [DEBUG] [Thread-183384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:49:36.282 [DEBUG] [Thread-183384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:49:36.282 [DEBUG] [Thread-183384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:49:36.301 [INFO] [Thread-183384] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:49:36.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-14T09:49:36.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:49:37.107 [DEBUG] [Thread-183384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:49:37.107 [DEBUG] [Thread-183384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:49:37.156 [DEBUG] [Thread-183384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:49:37.156 [DEBUG] [Thread-183384] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:49:37.165 [DEBUG] [Thread-183384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:49:37.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:49:37.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-14T09:49:37.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:49:37.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:49:37.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:49:37.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:49:37.203 [DEBUG] [Thread-183384] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:49:43.272 [DEBUG] [Thread-183386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:49:53.787 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:49:53.788 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:49:58.319 [DEBUG] [Thread-183387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:50:07.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:50:07.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:50:07.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-14T09:50:09.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 49, 58), 6.25, 65.31, 0.0, 29.78, 10.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:50:09.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:49:58
2026-02-14T09:50:09.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:50:09.802 [DEBUG] [Thread-183388] [transport.py] [_log()] starting thread (client mode): 0xa2d12a70
2026-02-14T09:50:09.802 [DEBUG] [Thread-183388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:50:09.822 [DEBUG] [Thread-183388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:50:09.822 [INFO] [Thread-183388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:50:09.825 [DEBUG] [Thread-183388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:50:09.826 [DEBUG] [Thread-183388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:50:09.826 [DEBUG] [Thread-183388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:50:09.826 [DEBUG] [Thread-183388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:50:09.826 [DEBUG] [Thread-183388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:50:09.826 [DEBUG] [Thread-183388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:50:09.826 [DEBUG] [Thread-183388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:50:09.826 [DEBUG] [Thread-183388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:50:09.826 [DEBUG] [Thread-183388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:50:09.826 [DEBUG] [Thread-183388] [transport.py] [_log()] client lang: <none>
2026-02-14T09:50:09.826 [DEBUG] [Thread-183388] [transport.py] [_log()] server lang: <none>
2026-02-14T09:50:09.826 [DEBUG] [Thread-183388] [transport.py] [_log()] kex follows: False
2026-02-14T09:50:09.826 [DEBUG] [Thread-183388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:50:09.826 [DEBUG] [Thread-183388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:50:09.826 [DEBUG] [Thread-183388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:50:09.826 [DEBUG] [Thread-183388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:50:09.826 [DEBUG] [Thread-183388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:50:09.826 [DEBUG] [Thread-183388] [transport.py] [_log()] Compression: none
2026-02-14T09:50:09.826 [DEBUG] [Thread-183388] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:50:09.845 [DEBUG] [Thread-183388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:50:09.845 [DEBUG] [Thread-183388] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:50:09.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:50:09.846 [DEBUG] [Thread-183388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:50:09.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:50:09.888 [DEBUG] [Thread-183388] [transport.py] [_log()] userauth is OK
2026-02-14T09:50:09.889 [DEBUG] [Thread-183388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:50:09.889 [DEBUG] [Thread-183388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:50:09.889 [DEBUG] [Thread-183388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:50:09.889 [DEBUG] [Thread-183388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:50:09.923 [INFO] [Thread-183388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:50:09.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:50:11.019 [DEBUG] [Thread-183388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:50:11.019 [DEBUG] [Thread-183388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:50:11.020 [DEBUG] [Thread-183388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:50:11.060 [DEBUG] [Thread-183388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:50:11.060 [DEBUG] [Thread-183388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:50:11.064 [DEBUG] [Thread-183388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:50:11.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:50:11.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:50:11.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:50:11.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:50:11.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:50:11.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:50:11.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:50:11.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:50:11.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:50:11.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.326155 -999.00  +10.20  16.69     71   +5.40 1 2 1 1 1   888    0 5.34 6.87 ----- 18.3 16.7 153.9 28.7 16.1 -20.4 15.2 -20.0 14.1 -19.8 14.9 -19.4
2026-02-14T09:50:11.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:50:11.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:50:11.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.326155
2026-02-14T09:50:11.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:50:11.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:50:11.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:50:11.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:50:11.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:50:11.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:49:58', tmtdew=6.25, humidity=65.31, cloud=0.0, wind=29.78, temperature=10.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:49:39.792', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:50:11.093 [DEBUG] [Thread-183388] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:50:11.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-14T09:50:11.197 [DEBUG] [Thread-183391] [transport.py] [_log()] starting thread (client mode): 0xa2d18fd0
2026-02-14T09:50:11.197 [DEBUG] [Thread-183391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:50:11.212 [DEBUG] [Thread-183391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:50:11.212 [INFO] [Thread-183391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:50:11.221 [DEBUG] [Thread-183391] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:50:11.221 [DEBUG] [Thread-183391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:50:11.221 [DEBUG] [Thread-183391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:50:11.221 [DEBUG] [Thread-183391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:50:11.221 [DEBUG] [Thread-183391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:50:11.221 [DEBUG] [Thread-183391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:50:11.221 [DEBUG] [Thread-183391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:50:11.221 [DEBUG] [Thread-183391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:50:11.221 [DEBUG] [Thread-183391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:50:11.221 [DEBUG] [Thread-183391] [transport.py] [_log()] client lang: <none>
2026-02-14T09:50:11.221 [DEBUG] [Thread-183391] [transport.py] [_log()] server lang: <none>
2026-02-14T09:50:11.221 [DEBUG] [Thread-183391] [transport.py] [_log()] kex follows: False
2026-02-14T09:50:11.221 [DEBUG] [Thread-183391] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:50:11.222 [DEBUG] [Thread-183391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:50:11.222 [DEBUG] [Thread-183391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:50:11.222 [DEBUG] [Thread-183391] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:50:11.222 [DEBUG] [Thread-183391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:50:11.222 [DEBUG] [Thread-183391] [transport.py] [_log()] Compression: none
2026-02-14T09:50:11.222 [DEBUG] [Thread-183391] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:50:11.277 [DEBUG] [Thread-183391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:50:11.277 [DEBUG] [Thread-183391] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:50:11.278 [DEBUG] [Thread-183391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:50:11.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:50:11.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:50:11.334 [DEBUG] [Thread-183391] [transport.py] [_log()] userauth is OK
2026-02-14T09:50:11.334 [DEBUG] [Thread-183391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:50:11.334 [DEBUG] [Thread-183391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:50:11.335 [DEBUG] [Thread-183391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:50:11.335 [DEBUG] [Thread-183391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:50:11.361 [INFO] [Thread-183391] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:50:11.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-14T09:50:11.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:50:12.185 [DEBUG] [Thread-183391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:50:12.185 [DEBUG] [Thread-183391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:50:12.233 [DEBUG] [Thread-183391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:50:12.233 [DEBUG] [Thread-183391] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:50:12.242 [DEBUG] [Thread-183391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:50:12.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:50:12.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:50:12.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-14T09:50:12.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:50:12.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:50:12.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:50:12.286 [DEBUG] [Thread-183391] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:50:13.354 [DEBUG] [Thread-183393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:50:14.926 [DEBUG] [Thread-183394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:50:28.407 [DEBUG] [Thread-183395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:50:42.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:50:42.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:50:42.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:50:43.444 [DEBUG] [Thread-183396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:50:44.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 50, 33), 7.21, 61.32, 0.0, 34.44, 12.15, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:50:44.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:50:33
2026-02-14T09:50:44.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:50:44.687 [DEBUG] [Thread-183397] [transport.py] [_log()] starting thread (client mode): 0xa2d78e50
2026-02-14T09:50:44.688 [DEBUG] [Thread-183397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:50:44.707 [DEBUG] [Thread-183397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:50:44.707 [INFO] [Thread-183397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:50:44.710 [DEBUG] [Thread-183397] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:50:44.710 [DEBUG] [Thread-183397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:50:44.710 [DEBUG] [Thread-183397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:50:44.710 [DEBUG] [Thread-183397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:50:44.710 [DEBUG] [Thread-183397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:50:44.710 [DEBUG] [Thread-183397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:50:44.710 [DEBUG] [Thread-183397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:50:44.710 [DEBUG] [Thread-183397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:50:44.710 [DEBUG] [Thread-183397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:50:44.710 [DEBUG] [Thread-183397] [transport.py] [_log()] client lang: <none>
2026-02-14T09:50:44.710 [DEBUG] [Thread-183397] [transport.py] [_log()] server lang: <none>
2026-02-14T09:50:44.710 [DEBUG] [Thread-183397] [transport.py] [_log()] kex follows: False
2026-02-14T09:50:44.710 [DEBUG] [Thread-183397] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:50:44.710 [DEBUG] [Thread-183397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:50:44.710 [DEBUG] [Thread-183397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:50:44.710 [DEBUG] [Thread-183397] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:50:44.710 [DEBUG] [Thread-183397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:50:44.710 [DEBUG] [Thread-183397] [transport.py] [_log()] Compression: none
2026-02-14T09:50:44.710 [DEBUG] [Thread-183397] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:50:44.728 [DEBUG] [Thread-183397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:50:44.728 [DEBUG] [Thread-183397] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:50:44.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:50:44.729 [DEBUG] [Thread-183397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:50:44.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:50:44.731 [DEBUG] [Thread-183397] [transport.py] [_log()] userauth is OK
2026-02-14T09:50:44.732 [DEBUG] [Thread-183397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:50:44.732 [DEBUG] [Thread-183397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:50:44.732 [DEBUG] [Thread-183397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:50:44.732 [DEBUG] [Thread-183397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:50:44.751 [INFO] [Thread-183397] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:50:44.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:50:45.416 [DEBUG] [Thread-183397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:50:45.416 [DEBUG] [Thread-183397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:50:45.417 [DEBUG] [Thread-183397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:50:45.457 [DEBUG] [Thread-183397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:50:45.458 [DEBUG] [Thread-183397] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:50:45.461 [DEBUG] [Thread-183397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:50:45.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:50:45.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:50:45.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:50:45.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:50:45.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:50:45.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:50:45.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:50:45.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:50:45.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:50:45.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.326503 -999.00  +10.50  26.19     71   +5.60 1 2 1 1 1   888    0 5.28 4.39 ----- 19.8 26.2 178.2 30.9 16.1 -17.8 15.2 -17.2 14.1 -21.7 15.0 -18.9
2026-02-14T09:50:45.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:50:45.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:50:45.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.326503
2026-02-14T09:50:45.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:50:45.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:50:45.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:50:45.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:50:45.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:50:45.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:50:33', tmtdew=7.21, humidity=61.32, cloud=0.0, wind=34.44, temperature=12.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:50:09.859', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:50:45.487 [DEBUG] [Thread-183397] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:50:45.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-14T09:50:45.584 [DEBUG] [Thread-183400] [transport.py] [_log()] starting thread (client mode): 0xa2db6530
2026-02-14T09:50:45.585 [DEBUG] [Thread-183400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:50:45.599 [DEBUG] [Thread-183400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:50:45.599 [INFO] [Thread-183400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:50:45.607 [DEBUG] [Thread-183400] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:50:45.607 [DEBUG] [Thread-183400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:50:45.607 [DEBUG] [Thread-183400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:50:45.607 [DEBUG] [Thread-183400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:50:45.608 [DEBUG] [Thread-183400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:50:45.608 [DEBUG] [Thread-183400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:50:45.608 [DEBUG] [Thread-183400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:50:45.608 [DEBUG] [Thread-183400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:50:45.608 [DEBUG] [Thread-183400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:50:45.608 [DEBUG] [Thread-183400] [transport.py] [_log()] client lang: <none>
2026-02-14T09:50:45.608 [DEBUG] [Thread-183400] [transport.py] [_log()] server lang: <none>
2026-02-14T09:50:45.608 [DEBUG] [Thread-183400] [transport.py] [_log()] kex follows: False
2026-02-14T09:50:45.608 [DEBUG] [Thread-183400] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:50:45.608 [DEBUG] [Thread-183400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:50:45.609 [DEBUG] [Thread-183400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:50:45.609 [DEBUG] [Thread-183400] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:50:45.609 [DEBUG] [Thread-183400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:50:45.609 [DEBUG] [Thread-183400] [transport.py] [_log()] Compression: none
2026-02-14T09:50:45.609 [DEBUG] [Thread-183400] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:50:45.665 [DEBUG] [Thread-183400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:50:45.666 [DEBUG] [Thread-183400] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:50:45.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:50:45.668 [DEBUG] [Thread-183400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:50:45.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:50:45.722 [DEBUG] [Thread-183400] [transport.py] [_log()] userauth is OK
2026-02-14T09:50:45.722 [DEBUG] [Thread-183400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:50:45.722 [DEBUG] [Thread-183400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:50:45.722 [DEBUG] [Thread-183400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:50:45.722 [DEBUG] [Thread-183400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:50:45.740 [INFO] [Thread-183400] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:50:45.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-14T09:50:45.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:50:46.583 [DEBUG] [Thread-183400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:50:46.583 [DEBUG] [Thread-183400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:50:46.632 [DEBUG] [Thread-183400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:50:46.632 [DEBUG] [Thread-183400] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:50:46.641 [DEBUG] [Thread-183400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:50:46.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:50:46.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-14T09:50:46.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:50:46.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:50:46.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:50:46.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:50:46.678 [DEBUG] [Thread-183400] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:50:53.930 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:50:53.931 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:50:58.482 [DEBUG] [Thread-183402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:51:13.535 [DEBUG] [Thread-183403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:51:14.961 [DEBUG] [Thread-183404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:51:16.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:51:16.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:51:16.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-14T09:51:18.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 51, 8), 6.47, 64.56, 0.0, 27.98, 10.86, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:51:18.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:51:08
2026-02-14T09:51:18.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:51:18.998 [DEBUG] [Thread-183405] [transport.py] [_log()] starting thread (client mode): 0xa2db5d20
2026-02-14T09:51:18.998 [DEBUG] [Thread-183405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:51:19.017 [DEBUG] [Thread-183405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:51:19.017 [INFO] [Thread-183405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:51:19.021 [DEBUG] [Thread-183405] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:51:19.021 [DEBUG] [Thread-183405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:51:19.021 [DEBUG] [Thread-183405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:51:19.021 [DEBUG] [Thread-183405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:51:19.021 [DEBUG] [Thread-183405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:51:19.021 [DEBUG] [Thread-183405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:51:19.022 [DEBUG] [Thread-183405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:51:19.022 [DEBUG] [Thread-183405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:51:19.022 [DEBUG] [Thread-183405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:51:19.022 [DEBUG] [Thread-183405] [transport.py] [_log()] client lang: <none>
2026-02-14T09:51:19.022 [DEBUG] [Thread-183405] [transport.py] [_log()] server lang: <none>
2026-02-14T09:51:19.022 [DEBUG] [Thread-183405] [transport.py] [_log()] kex follows: False
2026-02-14T09:51:19.022 [DEBUG] [Thread-183405] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:51:19.022 [DEBUG] [Thread-183405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:51:19.022 [DEBUG] [Thread-183405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:51:19.022 [DEBUG] [Thread-183405] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:51:19.022 [DEBUG] [Thread-183405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:51:19.022 [DEBUG] [Thread-183405] [transport.py] [_log()] Compression: none
2026-02-14T09:51:19.022 [DEBUG] [Thread-183405] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:51:19.039 [DEBUG] [Thread-183405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:51:19.039 [DEBUG] [Thread-183405] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:51:19.040 [DEBUG] [Thread-183405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:51:19.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:51:19.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:51:19.042 [DEBUG] [Thread-183405] [transport.py] [_log()] userauth is OK
2026-02-14T09:51:19.043 [DEBUG] [Thread-183405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:51:19.043 [DEBUG] [Thread-183405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:51:19.043 [DEBUG] [Thread-183405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:51:19.043 [DEBUG] [Thread-183405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:51:19.070 [INFO] [Thread-183405] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:51:19.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:51:19.660 [DEBUG] [Thread-183405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:51:19.660 [DEBUG] [Thread-183405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:51:19.661 [DEBUG] [Thread-183405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:51:19.701 [DEBUG] [Thread-183405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:51:19.702 [DEBUG] [Thread-183405] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:51:19.705 [DEBUG] [Thread-183405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:51:19.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:51:19.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:51:19.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:51:19.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:51:19.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:51:19.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:51:19.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:51:19.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:51:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:51:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.326850 -999.00  +10.30  32.38     70   +5.20 1 1 2 1 1   888    0 5.25 3.73 ----- 29.9 32.4 183.0 43.7 16.0 -21.6 14.8 -25.1 14.1 -23.1 14.9 -22.3
2026-02-14T09:51:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:51:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:51:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.326850
2026-02-14T09:51:19.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:51:19.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:51:19.731 [DEBUG] [Thread-183405] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:51:19.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:51:19.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:51:19.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:51:19.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:51:08', tmtdew=6.47, humidity=64.56, cloud=0.0, wind=27.98, temperature=10.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:50:39.840', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:51:19.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-14T09:51:19.829 [DEBUG] [Thread-183408] [transport.py] [_log()] starting thread (client mode): 0xa5742b60
2026-02-14T09:51:19.830 [DEBUG] [Thread-183408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:51:19.844 [DEBUG] [Thread-183408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:51:19.844 [INFO] [Thread-183408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:51:19.852 [DEBUG] [Thread-183408] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:51:19.852 [DEBUG] [Thread-183408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:51:19.852 [DEBUG] [Thread-183408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:51:19.852 [DEBUG] [Thread-183408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:51:19.852 [DEBUG] [Thread-183408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:51:19.852 [DEBUG] [Thread-183408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:51:19.852 [DEBUG] [Thread-183408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:51:19.853 [DEBUG] [Thread-183408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:51:19.853 [DEBUG] [Thread-183408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:51:19.853 [DEBUG] [Thread-183408] [transport.py] [_log()] client lang: <none>
2026-02-14T09:51:19.853 [DEBUG] [Thread-183408] [transport.py] [_log()] server lang: <none>
2026-02-14T09:51:19.853 [DEBUG] [Thread-183408] [transport.py] [_log()] kex follows: False
2026-02-14T09:51:19.853 [DEBUG] [Thread-183408] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:51:19.853 [DEBUG] [Thread-183408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:51:19.853 [DEBUG] [Thread-183408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:51:19.853 [DEBUG] [Thread-183408] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:51:19.853 [DEBUG] [Thread-183408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:51:19.853 [DEBUG] [Thread-183408] [transport.py] [_log()] Compression: none
2026-02-14T09:51:19.853 [DEBUG] [Thread-183408] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:51:19.913 [DEBUG] [Thread-183408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:51:19.914 [DEBUG] [Thread-183408] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:51:19.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:51:19.915 [DEBUG] [Thread-183408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:51:19.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:51:19.969 [DEBUG] [Thread-183408] [transport.py] [_log()] userauth is OK
2026-02-14T09:51:19.969 [DEBUG] [Thread-183408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:51:19.969 [DEBUG] [Thread-183408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:51:19.969 [DEBUG] [Thread-183408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:51:19.969 [DEBUG] [Thread-183408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:51:19.988 [INFO] [Thread-183408] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:51:19.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-14T09:51:19.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:51:20.814 [DEBUG] [Thread-183408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:51:20.814 [DEBUG] [Thread-183408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:51:20.862 [DEBUG] [Thread-183408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:51:20.863 [DEBUG] [Thread-183408] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:51:20.872 [DEBUG] [Thread-183408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:51:20.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:51:20.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:51:20.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:51:20.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:51:20.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:51:20.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:51:20.909 [DEBUG] [Thread-183408] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:51:28.577 [DEBUG] [Thread-183410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:51:43.629 [DEBUG] [Thread-183411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:51:50.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:51:50.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:51:50.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-14T09:51:53.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 51, 43), 6.37, 64.76, 0.0, 28.55, 10.58, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:51:53.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:51:43
2026-02-14T09:51:53.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:51:53.614 [DEBUG] [Thread-183412] [transport.py] [_log()] starting thread (client mode): 0xa57424d0
2026-02-14T09:51:53.614 [DEBUG] [Thread-183412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:51:53.635 [DEBUG] [Thread-183412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:51:53.635 [INFO] [Thread-183412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:51:53.637 [DEBUG] [Thread-183412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:51:53.637 [DEBUG] [Thread-183412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:51:53.637 [DEBUG] [Thread-183412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:51:53.637 [DEBUG] [Thread-183412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:51:53.637 [DEBUG] [Thread-183412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:51:53.637 [DEBUG] [Thread-183412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:51:53.637 [DEBUG] [Thread-183412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:51:53.637 [DEBUG] [Thread-183412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:51:53.637 [DEBUG] [Thread-183412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:51:53.637 [DEBUG] [Thread-183412] [transport.py] [_log()] client lang: <none>
2026-02-14T09:51:53.638 [DEBUG] [Thread-183412] [transport.py] [_log()] server lang: <none>
2026-02-14T09:51:53.638 [DEBUG] [Thread-183412] [transport.py] [_log()] kex follows: False
2026-02-14T09:51:53.638 [DEBUG] [Thread-183412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:51:53.638 [DEBUG] [Thread-183412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:51:53.638 [DEBUG] [Thread-183412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:51:53.638 [DEBUG] [Thread-183412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:51:53.638 [DEBUG] [Thread-183412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:51:53.638 [DEBUG] [Thread-183412] [transport.py] [_log()] Compression: none
2026-02-14T09:51:53.638 [DEBUG] [Thread-183412] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:51:53.657 [DEBUG] [Thread-183412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:51:53.657 [DEBUG] [Thread-183412] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:51:53.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:51:53.658 [DEBUG] [Thread-183412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:51:53.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:51:53.660 [DEBUG] [Thread-183412] [transport.py] [_log()] userauth is OK
2026-02-14T09:51:53.660 [DEBUG] [Thread-183412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:51:53.661 [DEBUG] [Thread-183412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:51:53.661 [DEBUG] [Thread-183412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:51:53.661 [DEBUG] [Thread-183412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:51:53.696 [INFO] [Thread-183412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:51:53.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:51:54.069 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:51:54.070 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:51:54.277 [DEBUG] [Thread-183412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:51:54.277 [DEBUG] [Thread-183412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:51:54.277 [DEBUG] [Thread-183412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:51:54.318 [DEBUG] [Thread-183412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:51:54.318 [DEBUG] [Thread-183412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:51:54.321 [DEBUG] [Thread-183412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:51:54.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:51:54.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:51:54.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:51:54.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:51:54.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:51:54.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:51:54.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:51:54.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:51:54.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:51:54.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.327197 -999.00  +10.10  27.01     71   +5.20 1 1 1 1 1   888    0 5.32 2.31 ----- 29.2 27.0 185.0 35.3 15.8 -22.8 14.7 -26.1 13.9 -24.2 14.8 -25.0
2026-02-14T09:51:54.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:51:54.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:51:54.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.327197
2026-02-14T09:51:54.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:51:54.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:51:54.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:51:54.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:51:54.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:51:54.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:51:43', tmtdew=6.37, humidity=64.76, cloud=0.0, wind=28.55, temperature=10.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:51:09.821', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:51:54.344 [DEBUG] [Thread-183412] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:51:54.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-14T09:51:54.445 [DEBUG] [Thread-183415] [transport.py] [_log()] starting thread (client mode): 0xa2d783a0
2026-02-14T09:51:54.445 [DEBUG] [Thread-183415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:51:54.459 [DEBUG] [Thread-183415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:51:54.459 [INFO] [Thread-183415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:51:54.466 [DEBUG] [Thread-183415] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:51:54.466 [DEBUG] [Thread-183415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:51:54.466 [DEBUG] [Thread-183415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:51:54.466 [DEBUG] [Thread-183415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:51:54.466 [DEBUG] [Thread-183415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:51:54.466 [DEBUG] [Thread-183415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:51:54.467 [DEBUG] [Thread-183415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:51:54.467 [DEBUG] [Thread-183415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:51:54.467 [DEBUG] [Thread-183415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:51:54.467 [DEBUG] [Thread-183415] [transport.py] [_log()] client lang: <none>
2026-02-14T09:51:54.467 [DEBUG] [Thread-183415] [transport.py] [_log()] server lang: <none>
2026-02-14T09:51:54.467 [DEBUG] [Thread-183415] [transport.py] [_log()] kex follows: False
2026-02-14T09:51:54.467 [DEBUG] [Thread-183415] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:51:54.467 [DEBUG] [Thread-183415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:51:54.467 [DEBUG] [Thread-183415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:51:54.467 [DEBUG] [Thread-183415] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:51:54.467 [DEBUG] [Thread-183415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:51:54.467 [DEBUG] [Thread-183415] [transport.py] [_log()] Compression: none
2026-02-14T09:51:54.467 [DEBUG] [Thread-183415] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:51:54.522 [DEBUG] [Thread-183415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:51:54.522 [DEBUG] [Thread-183415] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:51:54.523 [DEBUG] [Thread-183415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:51:54.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:51:54.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:51:54.579 [DEBUG] [Thread-183415] [transport.py] [_log()] userauth is OK
2026-02-14T09:51:54.579 [DEBUG] [Thread-183415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:51:54.579 [DEBUG] [Thread-183415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:51:54.579 [DEBUG] [Thread-183415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:51:54.579 [DEBUG] [Thread-183415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:51:54.597 [INFO] [Thread-183415] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:51:54.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-14T09:51:54.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:51:55.418 [DEBUG] [Thread-183415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:51:55.418 [DEBUG] [Thread-183415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:51:55.466 [DEBUG] [Thread-183415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:51:55.466 [DEBUG] [Thread-183415] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:51:55.475 [DEBUG] [Thread-183415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:51:55.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:51:55.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:51:55.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:51:55.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:51:55.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:51:55.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:51:55.509 [DEBUG] [Thread-183415] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:51:58.665 [DEBUG] [Thread-183417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:52:13.717 [DEBUG] [Thread-183418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:52:14.993 [DEBUG] [Thread-183419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:52:25.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:52:25.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:52:25.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-14T09:52:27.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 52, 20), 6.48, 64.35, 0.0, 30.6, 10.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:52:27.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:52:20
2026-02-14T09:52:27.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:52:27.904 [DEBUG] [Thread-183420] [transport.py] [_log()] starting thread (client mode): 0xa2d3cca0
2026-02-14T09:52:27.904 [DEBUG] [Thread-183420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:52:27.924 [DEBUG] [Thread-183420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:52:27.924 [INFO] [Thread-183420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:52:27.926 [DEBUG] [Thread-183420] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:52:27.926 [DEBUG] [Thread-183420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:52:27.926 [DEBUG] [Thread-183420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:52:27.926 [DEBUG] [Thread-183420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:52:27.926 [DEBUG] [Thread-183420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:52:27.926 [DEBUG] [Thread-183420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:52:27.926 [DEBUG] [Thread-183420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:52:27.926 [DEBUG] [Thread-183420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:52:27.926 [DEBUG] [Thread-183420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:52:27.926 [DEBUG] [Thread-183420] [transport.py] [_log()] client lang: <none>
2026-02-14T09:52:27.926 [DEBUG] [Thread-183420] [transport.py] [_log()] server lang: <none>
2026-02-14T09:52:27.927 [DEBUG] [Thread-183420] [transport.py] [_log()] kex follows: False
2026-02-14T09:52:27.927 [DEBUG] [Thread-183420] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:52:27.927 [DEBUG] [Thread-183420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:52:27.927 [DEBUG] [Thread-183420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:52:27.927 [DEBUG] [Thread-183420] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:52:27.927 [DEBUG] [Thread-183420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:52:27.927 [DEBUG] [Thread-183420] [transport.py] [_log()] Compression: none
2026-02-14T09:52:27.927 [DEBUG] [Thread-183420] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:52:27.946 [DEBUG] [Thread-183420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:52:27.946 [DEBUG] [Thread-183420] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:52:27.946 [DEBUG] [Thread-183420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:52:27.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:52:27.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:52:27.948 [DEBUG] [Thread-183420] [transport.py] [_log()] userauth is OK
2026-02-14T09:52:27.948 [DEBUG] [Thread-183420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:52:27.948 [DEBUG] [Thread-183420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:52:27.948 [DEBUG] [Thread-183420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:52:27.948 [DEBUG] [Thread-183420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:52:27.963 [INFO] [Thread-183420] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:52:27.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:52:28.586 [DEBUG] [Thread-183420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:52:28.586 [DEBUG] [Thread-183420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:52:28.586 [DEBUG] [Thread-183420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:52:28.627 [DEBUG] [Thread-183420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:52:28.627 [DEBUG] [Thread-183420] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:52:28.631 [DEBUG] [Thread-183420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:52:28.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:52:28.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:52:28.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:52:28.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:52:28.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:52:28.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:52:28.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:52:28.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:52:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:52:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.327892 -999.00  +10.50  20.04     70   +5.40 1 1 1 1 1   888    0 4.97 -2.48 ----- 15.6 20.0 165.2 29.1 15.8 -22.0 14.6 -23.0 13.8 -23.8 14.7 -23.6
2026-02-14T09:52:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:52:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:52:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.327892
2026-02-14T09:52:28.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:52:28.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:52:28.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:52:28.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:52:28.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:52:28.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:52:20', tmtdew=6.48, humidity=64.35, cloud=0.0, wind=30.6, temperature=10.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:52:09.869', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:52:28.655 [DEBUG] [Thread-183420] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:52:28.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-14T09:52:28.753 [DEBUG] [Thread-183423] [transport.py] [_log()] starting thread (client mode): 0xa2d3c1f0
2026-02-14T09:52:28.753 [DEBUG] [Thread-183423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:52:28.757 [DEBUG] [Thread-183424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:52:28.767 [DEBUG] [Thread-183423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:52:28.767 [INFO] [Thread-183423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:52:28.776 [DEBUG] [Thread-183423] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:52:28.776 [DEBUG] [Thread-183423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:52:28.776 [DEBUG] [Thread-183423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:52:28.776 [DEBUG] [Thread-183423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:52:28.776 [DEBUG] [Thread-183423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:52:28.776 [DEBUG] [Thread-183423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:52:28.776 [DEBUG] [Thread-183423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:52:28.776 [DEBUG] [Thread-183423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:52:28.776 [DEBUG] [Thread-183423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:52:28.777 [DEBUG] [Thread-183423] [transport.py] [_log()] client lang: <none>
2026-02-14T09:52:28.777 [DEBUG] [Thread-183423] [transport.py] [_log()] server lang: <none>
2026-02-14T09:52:28.777 [DEBUG] [Thread-183423] [transport.py] [_log()] kex follows: False
2026-02-14T09:52:28.777 [DEBUG] [Thread-183423] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:52:28.777 [DEBUG] [Thread-183423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:52:28.777 [DEBUG] [Thread-183423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:52:28.777 [DEBUG] [Thread-183423] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:52:28.777 [DEBUG] [Thread-183423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:52:28.777 [DEBUG] [Thread-183423] [transport.py] [_log()] Compression: none
2026-02-14T09:52:28.777 [DEBUG] [Thread-183423] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:52:28.833 [DEBUG] [Thread-183423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:52:28.833 [DEBUG] [Thread-183423] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:52:28.834 [DEBUG] [Thread-183423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:52:28.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:52:28.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:52:28.890 [DEBUG] [Thread-183423] [transport.py] [_log()] userauth is OK
2026-02-14T09:52:28.890 [DEBUG] [Thread-183423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:52:28.890 [DEBUG] [Thread-183423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:52:28.890 [DEBUG] [Thread-183423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:52:28.890 [DEBUG] [Thread-183423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:52:28.908 [INFO] [Thread-183423] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:52:28.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-14T09:52:28.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:52:29.717 [DEBUG] [Thread-183423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:52:29.718 [DEBUG] [Thread-183423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:52:29.768 [DEBUG] [Thread-183423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:52:29.768 [DEBUG] [Thread-183423] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:52:29.781 [DEBUG] [Thread-183423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:52:29.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:52:29.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-14T09:52:29.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-14T09:52:29.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:52:29.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:52:29.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:52:29.829 [DEBUG] [Thread-183423] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:52:43.799 [DEBUG] [Thread-183426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:52:54.208 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:52:54.210 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:52:58.832 [DEBUG] [Thread-183427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:52:59.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:52:59.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:52:59.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-14T09:53:02.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 52, 20), 6.48, 64.35, 0.0, 30.6, 10.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:53:02.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:52:20
2026-02-14T09:53:02.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:53:02.544 [DEBUG] [Thread-183428] [transport.py] [_log()] starting thread (client mode): 0xa2d3e410
2026-02-14T09:53:02.545 [DEBUG] [Thread-183428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:53:02.560 [DEBUG] [Thread-183428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:53:02.560 [INFO] [Thread-183428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:53:02.563 [DEBUG] [Thread-183428] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:53:02.563 [DEBUG] [Thread-183428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:53:02.563 [DEBUG] [Thread-183428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:53:02.563 [DEBUG] [Thread-183428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:53:02.563 [DEBUG] [Thread-183428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:53:02.563 [DEBUG] [Thread-183428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:53:02.563 [DEBUG] [Thread-183428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:53:02.563 [DEBUG] [Thread-183428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:53:02.563 [DEBUG] [Thread-183428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:53:02.563 [DEBUG] [Thread-183428] [transport.py] [_log()] client lang: <none>
2026-02-14T09:53:02.563 [DEBUG] [Thread-183428] [transport.py] [_log()] server lang: <none>
2026-02-14T09:53:02.563 [DEBUG] [Thread-183428] [transport.py] [_log()] kex follows: False
2026-02-14T09:53:02.563 [DEBUG] [Thread-183428] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:53:02.563 [DEBUG] [Thread-183428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:53:02.563 [DEBUG] [Thread-183428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:53:02.563 [DEBUG] [Thread-183428] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:53:02.563 [DEBUG] [Thread-183428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:53:02.563 [DEBUG] [Thread-183428] [transport.py] [_log()] Compression: none
2026-02-14T09:53:02.563 [DEBUG] [Thread-183428] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:53:02.580 [DEBUG] [Thread-183428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:53:02.580 [DEBUG] [Thread-183428] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:53:02.580 [DEBUG] [Thread-183428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:53:02.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:53:02.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:53:02.581 [DEBUG] [Thread-183428] [transport.py] [_log()] userauth is OK
2026-02-14T09:53:02.581 [DEBUG] [Thread-183428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:53:02.581 [DEBUG] [Thread-183428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:53:02.581 [DEBUG] [Thread-183428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:53:02.581 [DEBUG] [Thread-183428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:53:02.591 [INFO] [Thread-183428] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:53:02.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:53:03.392 [DEBUG] [Thread-183428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:53:03.392 [DEBUG] [Thread-183428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:53:03.393 [DEBUG] [Thread-183428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:53:03.433 [DEBUG] [Thread-183428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:53:03.434 [DEBUG] [Thread-183428] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:53:03.437 [DEBUG] [Thread-183428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:53:03.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:53:03.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:53:03.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:53:03.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:53:03.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:53:03.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:53:03.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:53:03.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:53:03.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:53:03.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.328239 -999.00  +10.80  23.38     69   +5.50 1 2 1 1 1   888    0 5.17 -2.02 ----- 24.0 23.4 182.4 28.8 15.7 -22.1 14.7 -23.7 13.9 -22.3 14.6 -23.2
2026-02-14T09:53:03.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:53:03.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:53:03.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.328239
2026-02-14T09:53:03.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:53:03.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:53:03.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:53:03.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:53:03.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:53:03.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:52:20', tmtdew=6.48, humidity=64.35, cloud=0.0, wind=30.6, temperature=10.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:52:39.850', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:53:03.466 [DEBUG] [Thread-183428] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:53:03.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-14T09:53:03.561 [DEBUG] [Thread-183431] [transport.py] [_log()] starting thread (client mode): 0xa2d19c60
2026-02-14T09:53:03.561 [DEBUG] [Thread-183431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:53:03.575 [DEBUG] [Thread-183431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:53:03.576 [INFO] [Thread-183431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:53:03.583 [DEBUG] [Thread-183431] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:53:03.583 [DEBUG] [Thread-183431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:53:03.584 [DEBUG] [Thread-183431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:53:03.584 [DEBUG] [Thread-183431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:53:03.584 [DEBUG] [Thread-183431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:53:03.584 [DEBUG] [Thread-183431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:53:03.584 [DEBUG] [Thread-183431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:53:03.584 [DEBUG] [Thread-183431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:53:03.584 [DEBUG] [Thread-183431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:53:03.584 [DEBUG] [Thread-183431] [transport.py] [_log()] client lang: <none>
2026-02-14T09:53:03.584 [DEBUG] [Thread-183431] [transport.py] [_log()] server lang: <none>
2026-02-14T09:53:03.584 [DEBUG] [Thread-183431] [transport.py] [_log()] kex follows: False
2026-02-14T09:53:03.584 [DEBUG] [Thread-183431] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:53:03.584 [DEBUG] [Thread-183431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:53:03.584 [DEBUG] [Thread-183431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:53:03.584 [DEBUG] [Thread-183431] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:53:03.584 [DEBUG] [Thread-183431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:53:03.584 [DEBUG] [Thread-183431] [transport.py] [_log()] Compression: none
2026-02-14T09:53:03.584 [DEBUG] [Thread-183431] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:53:03.645 [DEBUG] [Thread-183431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:53:03.645 [DEBUG] [Thread-183431] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:53:03.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:53:03.647 [DEBUG] [Thread-183431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:53:03.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:53:03.700 [DEBUG] [Thread-183431] [transport.py] [_log()] userauth is OK
2026-02-14T09:53:03.700 [DEBUG] [Thread-183431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:53:03.701 [DEBUG] [Thread-183431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:53:03.701 [DEBUG] [Thread-183431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:53:03.701 [DEBUG] [Thread-183431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:53:03.718 [INFO] [Thread-183431] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:53:03.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-14T09:53:03.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:53:04.591 [DEBUG] [Thread-183431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:53:04.592 [DEBUG] [Thread-183431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:53:04.639 [DEBUG] [Thread-183431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:53:04.640 [DEBUG] [Thread-183431] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:53:04.649 [DEBUG] [Thread-183431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:53:04.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:53:04.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-14T09:53:04.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-14T09:53:04.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:53:04.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:53:04.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:53:04.686 [DEBUG] [Thread-183431] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:53:13.871 [DEBUG] [Thread-183433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:53:15.036 [DEBUG] [Thread-183434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:53:28.920 [DEBUG] [Thread-183435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:53:34.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:53:34.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:53:34.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-14T09:53:37.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 52, 55), 6.46, 64.38, 0.0, 29.66, 10.66, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:53:37.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:52:55
2026-02-14T09:53:37.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:53:37.958 [DEBUG] [Thread-183436] [transport.py] [_log()] starting thread (client mode): 0xa2d3d990
2026-02-14T09:53:37.958 [DEBUG] [Thread-183436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:53:37.979 [DEBUG] [Thread-183436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:53:37.979 [INFO] [Thread-183436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:53:37.982 [DEBUG] [Thread-183436] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:53:37.982 [DEBUG] [Thread-183436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:53:37.982 [DEBUG] [Thread-183436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:53:37.982 [DEBUG] [Thread-183436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:53:37.982 [DEBUG] [Thread-183436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:53:37.982 [DEBUG] [Thread-183436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:53:37.982 [DEBUG] [Thread-183436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:53:37.982 [DEBUG] [Thread-183436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:53:37.982 [DEBUG] [Thread-183436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:53:37.982 [DEBUG] [Thread-183436] [transport.py] [_log()] client lang: <none>
2026-02-14T09:53:37.982 [DEBUG] [Thread-183436] [transport.py] [_log()] server lang: <none>
2026-02-14T09:53:37.982 [DEBUG] [Thread-183436] [transport.py] [_log()] kex follows: False
2026-02-14T09:53:37.982 [DEBUG] [Thread-183436] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:53:37.982 [DEBUG] [Thread-183436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:53:37.982 [DEBUG] [Thread-183436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:53:37.982 [DEBUG] [Thread-183436] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:53:37.982 [DEBUG] [Thread-183436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:53:37.982 [DEBUG] [Thread-183436] [transport.py] [_log()] Compression: none
2026-02-14T09:53:37.982 [DEBUG] [Thread-183436] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:53:38.000 [DEBUG] [Thread-183436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:53:38.001 [DEBUG] [Thread-183436] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:53:38.001 [DEBUG] [Thread-183436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:53:38.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:53:38.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:53:38.004 [DEBUG] [Thread-183436] [transport.py] [_log()] userauth is OK
2026-02-14T09:53:38.004 [DEBUG] [Thread-183436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:53:38.004 [DEBUG] [Thread-183436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:53:38.004 [DEBUG] [Thread-183436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:53:38.004 [DEBUG] [Thread-183436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:53:38.029 [INFO] [Thread-183436] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:53:38.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:53:38.688 [DEBUG] [Thread-183436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:53:38.688 [DEBUG] [Thread-183436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:53:38.688 [DEBUG] [Thread-183436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:53:38.728 [DEBUG] [Thread-183436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:53:38.729 [DEBUG] [Thread-183436] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:53:38.732 [DEBUG] [Thread-183436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:53:38.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:53:38.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:53:38.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:53:38.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:53:38.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:53:38.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:53:38.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:53:38.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:53:38.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:53:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.328586 -999.00  +10.80  26.49     69   +5.40 1 1 1 1 1   888    0 5.05 -0.66 ----- 20.0 26.5 194.4 35.0 15.6 -21.5 14.6 -25.3 13.9 -21.8 14.6 -22.1
2026-02-14T09:53:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:53:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:53:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.328586
2026-02-14T09:53:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:53:38.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:53:38.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:53:38.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:53:38.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:53:38.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:52:55', tmtdew=6.46, humidity=64.38, cloud=0.0, wind=29.66, temperature=10.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:53:09.830', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:53:38.759 [DEBUG] [Thread-183436] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:53:38.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-14T09:53:38.856 [DEBUG] [Thread-183439] [transport.py] [_log()] starting thread (client mode): 0xa2d3eef0
2026-02-14T09:53:38.856 [DEBUG] [Thread-183439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:53:38.871 [DEBUG] [Thread-183439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:53:38.871 [INFO] [Thread-183439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:53:38.878 [DEBUG] [Thread-183439] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:53:38.879 [DEBUG] [Thread-183439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:53:38.879 [DEBUG] [Thread-183439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:53:38.879 [DEBUG] [Thread-183439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:53:38.879 [DEBUG] [Thread-183439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:53:38.879 [DEBUG] [Thread-183439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:53:38.879 [DEBUG] [Thread-183439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:53:38.879 [DEBUG] [Thread-183439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:53:38.879 [DEBUG] [Thread-183439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:53:38.879 [DEBUG] [Thread-183439] [transport.py] [_log()] client lang: <none>
2026-02-14T09:53:38.879 [DEBUG] [Thread-183439] [transport.py] [_log()] server lang: <none>
2026-02-14T09:53:38.879 [DEBUG] [Thread-183439] [transport.py] [_log()] kex follows: False
2026-02-14T09:53:38.879 [DEBUG] [Thread-183439] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:53:38.879 [DEBUG] [Thread-183439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:53:38.879 [DEBUG] [Thread-183439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:53:38.879 [DEBUG] [Thread-183439] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:53:38.879 [DEBUG] [Thread-183439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:53:38.879 [DEBUG] [Thread-183439] [transport.py] [_log()] Compression: none
2026-02-14T09:53:38.880 [DEBUG] [Thread-183439] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:53:38.938 [DEBUG] [Thread-183439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:53:38.939 [DEBUG] [Thread-183439] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:53:38.940 [DEBUG] [Thread-183439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:53:38.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:53:38.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:53:38.995 [DEBUG] [Thread-183439] [transport.py] [_log()] userauth is OK
2026-02-14T09:53:38.996 [DEBUG] [Thread-183439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:53:38.996 [DEBUG] [Thread-183439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:53:38.996 [DEBUG] [Thread-183439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:53:38.996 [DEBUG] [Thread-183439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:53:39.020 [INFO] [Thread-183439] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:53:39.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T09:53:39.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:53:39.796 [DEBUG] [Thread-183439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:53:39.796 [DEBUG] [Thread-183439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:53:39.845 [DEBUG] [Thread-183439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:53:39.845 [DEBUG] [Thread-183439] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:53:39.854 [DEBUG] [Thread-183439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:53:39.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:53:39.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-14T09:53:39.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-14T09:53:39.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:53:39.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:53:39.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:53:39.894 [DEBUG] [Thread-183439] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:53:43.958 [DEBUG] [Thread-183441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:53:54.349 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:53:54.350 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:53:59.015 [DEBUG] [Thread-183442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:54:09.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:54:09.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:54:09.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-14T09:54:12.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 53, 30), 6.32, 64.94, 0.0, 29.31, 10.49, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:54:12.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:53:30
2026-02-14T09:54:12.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:54:13.145 [DEBUG] [Thread-183443] [transport.py] [_log()] starting thread (client mode): 0xa2d7ae60
2026-02-14T09:54:13.145 [DEBUG] [Thread-183443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:54:13.165 [DEBUG] [Thread-183443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:54:13.165 [INFO] [Thread-183443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:54:13.169 [DEBUG] [Thread-183443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:54:13.169 [DEBUG] [Thread-183443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:54:13.169 [DEBUG] [Thread-183443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:54:13.169 [DEBUG] [Thread-183443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:54:13.169 [DEBUG] [Thread-183443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:54:13.169 [DEBUG] [Thread-183443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:54:13.170 [DEBUG] [Thread-183443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:54:13.170 [DEBUG] [Thread-183443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:54:13.170 [DEBUG] [Thread-183443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:54:13.170 [DEBUG] [Thread-183443] [transport.py] [_log()] client lang: <none>
2026-02-14T09:54:13.170 [DEBUG] [Thread-183443] [transport.py] [_log()] server lang: <none>
2026-02-14T09:54:13.170 [DEBUG] [Thread-183443] [transport.py] [_log()] kex follows: False
2026-02-14T09:54:13.170 [DEBUG] [Thread-183443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:54:13.170 [DEBUG] [Thread-183443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:54:13.170 [DEBUG] [Thread-183443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:54:13.170 [DEBUG] [Thread-183443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:54:13.170 [DEBUG] [Thread-183443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:54:13.170 [DEBUG] [Thread-183443] [transport.py] [_log()] Compression: none
2026-02-14T09:54:13.170 [DEBUG] [Thread-183443] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:54:13.187 [DEBUG] [Thread-183443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:54:13.187 [DEBUG] [Thread-183443] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:54:13.188 [DEBUG] [Thread-183443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:54:13.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:54:13.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:54:13.190 [DEBUG] [Thread-183443] [transport.py] [_log()] userauth is OK
2026-02-14T09:54:13.190 [DEBUG] [Thread-183443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:54:13.190 [DEBUG] [Thread-183443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:54:13.190 [DEBUG] [Thread-183443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:54:13.190 [DEBUG] [Thread-183443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:54:13.214 [INFO] [Thread-183443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:54:13.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:54:13.868 [DEBUG] [Thread-183443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:54:13.868 [DEBUG] [Thread-183443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:54:13.869 [DEBUG] [Thread-183443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:54:13.909 [DEBUG] [Thread-183443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:54:13.909 [DEBUG] [Thread-183443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:54:13.912 [DEBUG] [Thread-183443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:54:13.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:54:13.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:54:13.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:54:13.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:54:13.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:54:13.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:54:13.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:54:13.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:54:13.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:54:13.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.328933 -999.00  +10.90  24.94     68   +5.40 1 2 1 1 1   888    0 5.10 0.40 ----- 21.5 24.9 164.7 30.3 15.6 -17.1 14.7 -20.5 13.9 -21.8 14.7 -19.3
2026-02-14T09:54:13.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:54:13.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:54:13.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.328933
2026-02-14T09:54:13.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:54:13.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:54:13.936 [DEBUG] [Thread-183443] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:54:13.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:54:13.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:54:13.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:54:13.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:53:30', tmtdew=6.32, humidity=64.94, cloud=0.0, wind=29.31, temperature=10.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:53:39.811', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:54:14.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-14T09:54:14.037 [DEBUG] [Thread-183446] [transport.py] [_log()] starting thread (client mode): 0xa2d3c8b0
2026-02-14T09:54:14.037 [DEBUG] [Thread-183446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:54:14.048 [DEBUG] [Thread-183447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:54:14.055 [DEBUG] [Thread-183446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:54:14.055 [INFO] [Thread-183446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:54:14.067 [DEBUG] [Thread-183446] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:54:14.067 [DEBUG] [Thread-183446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:54:14.067 [DEBUG] [Thread-183446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:54:14.067 [DEBUG] [Thread-183446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:54:14.067 [DEBUG] [Thread-183446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:54:14.067 [DEBUG] [Thread-183446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:54:14.068 [DEBUG] [Thread-183446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:54:14.068 [DEBUG] [Thread-183446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:54:14.068 [DEBUG] [Thread-183446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:54:14.068 [DEBUG] [Thread-183446] [transport.py] [_log()] client lang: <none>
2026-02-14T09:54:14.068 [DEBUG] [Thread-183446] [transport.py] [_log()] server lang: <none>
2026-02-14T09:54:14.068 [DEBUG] [Thread-183446] [transport.py] [_log()] kex follows: False
2026-02-14T09:54:14.068 [DEBUG] [Thread-183446] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:54:14.068 [DEBUG] [Thread-183446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:54:14.068 [DEBUG] [Thread-183446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:54:14.068 [DEBUG] [Thread-183446] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:54:14.068 [DEBUG] [Thread-183446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:54:14.068 [DEBUG] [Thread-183446] [transport.py] [_log()] Compression: none
2026-02-14T09:54:14.068 [DEBUG] [Thread-183446] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:54:14.121 [DEBUG] [Thread-183446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:54:14.121 [DEBUG] [Thread-183446] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:54:14.122 [DEBUG] [Thread-183446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:54:14.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:54:14.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:54:14.181 [DEBUG] [Thread-183446] [transport.py] [_log()] userauth is OK
2026-02-14T09:54:14.182 [DEBUG] [Thread-183446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:54:14.182 [DEBUG] [Thread-183446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:54:14.182 [DEBUG] [Thread-183446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:54:14.182 [DEBUG] [Thread-183446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:54:14.207 [INFO] [Thread-183446] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:54:14.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-14T09:54:14.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:54:15.024 [DEBUG] [Thread-183446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:54:15.024 [DEBUG] [Thread-183446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:54:15.072 [DEBUG] [Thread-183446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:54:15.072 [DEBUG] [Thread-183446] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:54:15.080 [DEBUG] [Thread-183449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:54:15.081 [DEBUG] [Thread-183446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:54:15.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:54:15.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-14T09:54:15.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-14T09:54:15.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:54:15.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:54:15.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:54:15.116 [DEBUG] [Thread-183446] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:54:29.097 [DEBUG] [Thread-183450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:54:44.137 [DEBUG] [Thread-183451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:54:45.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:54:45.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:54:45.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:54:47.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 54, 7), 6.3, 65.04, 0.0, 31.34, 10.49, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:54:47.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:54:07
2026-02-14T09:54:47.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:54:48.102 [DEBUG] [Thread-183452] [transport.py] [_log()] starting thread (client mode): 0xa2d3f040
2026-02-14T09:54:48.102 [DEBUG] [Thread-183452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:54:48.123 [DEBUG] [Thread-183452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:54:48.123 [INFO] [Thread-183452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:54:48.126 [DEBUG] [Thread-183452] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:54:48.126 [DEBUG] [Thread-183452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:54:48.127 [DEBUG] [Thread-183452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:54:48.127 [DEBUG] [Thread-183452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:54:48.127 [DEBUG] [Thread-183452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:54:48.127 [DEBUG] [Thread-183452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:54:48.127 [DEBUG] [Thread-183452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:54:48.127 [DEBUG] [Thread-183452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:54:48.127 [DEBUG] [Thread-183452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:54:48.127 [DEBUG] [Thread-183452] [transport.py] [_log()] client lang: <none>
2026-02-14T09:54:48.127 [DEBUG] [Thread-183452] [transport.py] [_log()] server lang: <none>
2026-02-14T09:54:48.127 [DEBUG] [Thread-183452] [transport.py] [_log()] kex follows: False
2026-02-14T09:54:48.127 [DEBUG] [Thread-183452] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:54:48.127 [DEBUG] [Thread-183452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:54:48.127 [DEBUG] [Thread-183452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:54:48.127 [DEBUG] [Thread-183452] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:54:48.127 [DEBUG] [Thread-183452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:54:48.127 [DEBUG] [Thread-183452] [transport.py] [_log()] Compression: none
2026-02-14T09:54:48.127 [DEBUG] [Thread-183452] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:54:48.144 [DEBUG] [Thread-183452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:54:48.145 [DEBUG] [Thread-183452] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:54:48.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:54:48.146 [DEBUG] [Thread-183452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:54:48.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:54:48.188 [DEBUG] [Thread-183452] [transport.py] [_log()] userauth is OK
2026-02-14T09:54:48.188 [DEBUG] [Thread-183452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:54:48.189 [DEBUG] [Thread-183452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:54:48.189 [DEBUG] [Thread-183452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:54:48.189 [DEBUG] [Thread-183452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:54:48.220 [INFO] [Thread-183452] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:54:48.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:54:48.993 [DEBUG] [Thread-183452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:54:48.994 [DEBUG] [Thread-183452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:54:48.994 [DEBUG] [Thread-183452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:54:49.034 [DEBUG] [Thread-183452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:54:49.035 [DEBUG] [Thread-183452] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:54:49.038 [DEBUG] [Thread-183452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:54:49.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:54:49.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:54:49.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:54:49.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:54:49.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:54:49.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:54:49.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:54:49.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:54:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:54:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.329280 -999.00  +10.90  24.60     68   +5.40 1 2 1 1 1   888    0 5.13 1.10 ----- 26.7 24.6 181.6 31.5 15.8 -16.6 14.9 -20.7 14.3 -19.3 14.9 -17.2
2026-02-14T09:54:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:54:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:54:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.329280
2026-02-14T09:54:49.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:54:49.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:54:49.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:54:49.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:54:49.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:54:49.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:54:07', tmtdew=6.3, humidity=65.04, cloud=0.0, wind=31.34, temperature=10.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:54:09.792', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:54:49.064 [DEBUG] [Thread-183452] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:54:49.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-14T09:54:49.160 [DEBUG] [Thread-183455] [transport.py] [_log()] starting thread (client mode): 0xa2d7ae60
2026-02-14T09:54:49.160 [DEBUG] [Thread-183455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:54:49.175 [DEBUG] [Thread-183455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:54:49.175 [INFO] [Thread-183455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:54:49.184 [DEBUG] [Thread-183455] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:54:49.184 [DEBUG] [Thread-183455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:54:49.184 [DEBUG] [Thread-183455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:54:49.184 [DEBUG] [Thread-183455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:54:49.184 [DEBUG] [Thread-183455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:54:49.184 [DEBUG] [Thread-183455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:54:49.184 [DEBUG] [Thread-183455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:54:49.184 [DEBUG] [Thread-183455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:54:49.184 [DEBUG] [Thread-183455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:54:49.184 [DEBUG] [Thread-183455] [transport.py] [_log()] client lang: <none>
2026-02-14T09:54:49.184 [DEBUG] [Thread-183455] [transport.py] [_log()] server lang: <none>
2026-02-14T09:54:49.184 [DEBUG] [Thread-183455] [transport.py] [_log()] kex follows: False
2026-02-14T09:54:49.184 [DEBUG] [Thread-183455] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:54:49.184 [DEBUG] [Thread-183455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:54:49.185 [DEBUG] [Thread-183455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:54:49.185 [DEBUG] [Thread-183455] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:54:49.185 [DEBUG] [Thread-183455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:54:49.185 [DEBUG] [Thread-183455] [transport.py] [_log()] Compression: none
2026-02-14T09:54:49.185 [DEBUG] [Thread-183455] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:54:49.243 [DEBUG] [Thread-183455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:54:49.244 [DEBUG] [Thread-183455] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:54:49.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:54:49.245 [DEBUG] [Thread-183455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:54:49.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:54:49.303 [DEBUG] [Thread-183455] [transport.py] [_log()] userauth is OK
2026-02-14T09:54:49.303 [DEBUG] [Thread-183455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:54:49.303 [DEBUG] [Thread-183455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:54:49.303 [DEBUG] [Thread-183455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:54:49.303 [DEBUG] [Thread-183455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:54:49.322 [INFO] [Thread-183455] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:54:49.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-14T09:54:49.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:54:50.144 [DEBUG] [Thread-183455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:54:50.144 [DEBUG] [Thread-183455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:54:50.192 [DEBUG] [Thread-183455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:54:50.192 [DEBUG] [Thread-183455] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:54:50.200 [DEBUG] [Thread-183455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:54:50.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:54:50.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:54:50.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-14T09:54:50.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:54:50.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:54:50.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:54:50.231 [DEBUG] [Thread-183455] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:54:54.491 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:54:54.492 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:54:59.177 [DEBUG] [Thread-183457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:55:14.227 [DEBUG] [Thread-183458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:55:15.112 [DEBUG] [Thread-183459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:55:20.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:55:20.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:55:20.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:55:22.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 54, 44), 6.42, 64.44, 0.0, 32.8, 10.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:55:22.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:54:44
2026-02-14T09:55:22.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:55:22.999 [DEBUG] [Thread-183460] [transport.py] [_log()] starting thread (client mode): 0xa2d1add0
2026-02-14T09:55:22.999 [DEBUG] [Thread-183460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:55:23.018 [DEBUG] [Thread-183460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:55:23.018 [INFO] [Thread-183460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:55:23.021 [DEBUG] [Thread-183460] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:55:23.021 [DEBUG] [Thread-183460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:55:23.021 [DEBUG] [Thread-183460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:55:23.021 [DEBUG] [Thread-183460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:55:23.021 [DEBUG] [Thread-183460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:55:23.021 [DEBUG] [Thread-183460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:55:23.021 [DEBUG] [Thread-183460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:55:23.021 [DEBUG] [Thread-183460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:55:23.021 [DEBUG] [Thread-183460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:55:23.021 [DEBUG] [Thread-183460] [transport.py] [_log()] client lang: <none>
2026-02-14T09:55:23.021 [DEBUG] [Thread-183460] [transport.py] [_log()] server lang: <none>
2026-02-14T09:55:23.021 [DEBUG] [Thread-183460] [transport.py] [_log()] kex follows: False
2026-02-14T09:55:23.021 [DEBUG] [Thread-183460] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:55:23.021 [DEBUG] [Thread-183460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:55:23.021 [DEBUG] [Thread-183460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:55:23.021 [DEBUG] [Thread-183460] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:55:23.021 [DEBUG] [Thread-183460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:55:23.021 [DEBUG] [Thread-183460] [transport.py] [_log()] Compression: none
2026-02-14T09:55:23.021 [DEBUG] [Thread-183460] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:55:23.038 [DEBUG] [Thread-183460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:55:23.038 [DEBUG] [Thread-183460] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:55:23.038 [DEBUG] [Thread-183460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:55:23.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:55:23.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:55:23.039 [DEBUG] [Thread-183460] [transport.py] [_log()] userauth is OK
2026-02-14T09:55:23.039 [DEBUG] [Thread-183460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:55:23.039 [DEBUG] [Thread-183460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:55:23.039 [DEBUG] [Thread-183460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:55:23.039 [DEBUG] [Thread-183460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:55:23.058 [INFO] [Thread-183460] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:55:23.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:55:23.692 [DEBUG] [Thread-183460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:55:23.692 [DEBUG] [Thread-183460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:55:23.693 [DEBUG] [Thread-183460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:55:23.733 [DEBUG] [Thread-183460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:55:23.733 [DEBUG] [Thread-183460] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:55:23.736 [DEBUG] [Thread-183460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:55:23.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:55:23.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:55:23.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:55:23.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:55:23.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:55:23.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:55:23.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:55:23.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:55:23.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:55:23.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.329628 -999.00  +10.90  22.39     68   +5.40 1 2 1 1 1   888    0 5.16 1.06 ----- 20.8 22.4 167.8 28.7 15.8 -21.9 14.9 -21.7 14.1 -21.8 14.8 -22.0
2026-02-14T09:55:23.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:55:23.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:55:23.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.329628
2026-02-14T09:55:23.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:55:23.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:55:23.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:55:23.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:55:23.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:55:23.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:54:44', tmtdew=6.42, humidity=64.44, cloud=0.0, wind=32.8, temperature=10.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:54:39.859', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:55:23.763 [DEBUG] [Thread-183460] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:55: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-14T09:55:23.856 [DEBUG] [Thread-183463] [transport.py] [_log()] starting thread (client mode): 0xa2d1be20
2026-02-14T09:55:23.857 [DEBUG] [Thread-183463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:55:23.874 [DEBUG] [Thread-183463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:55:23.874 [INFO] [Thread-183463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:55:23.883 [DEBUG] [Thread-183463] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:55:23.883 [DEBUG] [Thread-183463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:55:23.883 [DEBUG] [Thread-183463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:55:23.883 [DEBUG] [Thread-183463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:55:23.884 [DEBUG] [Thread-183463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:55:23.884 [DEBUG] [Thread-183463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:55:23.884 [DEBUG] [Thread-183463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:55:23.884 [DEBUG] [Thread-183463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:55:23.884 [DEBUG] [Thread-183463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:55:23.884 [DEBUG] [Thread-183463] [transport.py] [_log()] client lang: <none>
2026-02-14T09:55:23.884 [DEBUG] [Thread-183463] [transport.py] [_log()] server lang: <none>
2026-02-14T09:55:23.884 [DEBUG] [Thread-183463] [transport.py] [_log()] kex follows: False
2026-02-14T09:55:23.884 [DEBUG] [Thread-183463] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:55:23.884 [DEBUG] [Thread-183463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:55:23.884 [DEBUG] [Thread-183463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:55:23.884 [DEBUG] [Thread-183463] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:55:23.884 [DEBUG] [Thread-183463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:55:23.884 [DEBUG] [Thread-183463] [transport.py] [_log()] Compression: none
2026-02-14T09:55:23.884 [DEBUG] [Thread-183463] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:55:23.939 [DEBUG] [Thread-183463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:55:23.939 [DEBUG] [Thread-183463] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:55:23.940 [DEBUG] [Thread-183463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:55:23.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:55:23.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:55:23.996 [DEBUG] [Thread-183463] [transport.py] [_log()] userauth is OK
2026-02-14T09:55:23.997 [DEBUG] [Thread-183463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:55:23.997 [DEBUG] [Thread-183463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:55:23.997 [DEBUG] [Thread-183463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:55:23.997 [DEBUG] [Thread-183463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:55:24.016 [INFO] [Thread-183463] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:55:24.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T09:55:24.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:55:24.863 [DEBUG] [Thread-183463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:55:24.864 [DEBUG] [Thread-183463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:55:24.911 [DEBUG] [Thread-183463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:55:24.912 [DEBUG] [Thread-183463] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:55:24.921 [DEBUG] [Thread-183463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:55:24.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:55:24.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-14T09:55:24.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:55:24.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:55:24.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:55:24.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:55:24.958 [DEBUG] [Thread-183463] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:55:29.265 [DEBUG] [Thread-183465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:55:44.317 [DEBUG] [Thread-183466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:55:54.632 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:55:54.633 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:55:54.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:55:54.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:55:54.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-14T09:55:57.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 55, 20), 6.32, 64.84, 0.0, 31.11, 10.45, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:55:57.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:55:20
2026-02-14T09:55:57.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:55:58.022 [DEBUG] [Thread-183467] [transport.py] [_log()] starting thread (client mode): 0xa2ddc0a0
2026-02-14T09:55:58.022 [DEBUG] [Thread-183467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:55:58.042 [DEBUG] [Thread-183467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:55:58.042 [INFO] [Thread-183467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:55:58.045 [DEBUG] [Thread-183467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:55:58.045 [DEBUG] [Thread-183467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:55:58.045 [DEBUG] [Thread-183467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:55:58.046 [DEBUG] [Thread-183467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:55:58.046 [DEBUG] [Thread-183467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:55:58.046 [DEBUG] [Thread-183467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:55:58.046 [DEBUG] [Thread-183467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:55:58.046 [DEBUG] [Thread-183467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:55:58.046 [DEBUG] [Thread-183467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:55:58.046 [DEBUG] [Thread-183467] [transport.py] [_log()] client lang: <none>
2026-02-14T09:55:58.046 [DEBUG] [Thread-183467] [transport.py] [_log()] server lang: <none>
2026-02-14T09:55:58.046 [DEBUG] [Thread-183467] [transport.py] [_log()] kex follows: False
2026-02-14T09:55:58.046 [DEBUG] [Thread-183467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:55:58.046 [DEBUG] [Thread-183467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:55:58.046 [DEBUG] [Thread-183467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:55:58.046 [DEBUG] [Thread-183467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:55:58.046 [DEBUG] [Thread-183467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:55:58.046 [DEBUG] [Thread-183467] [transport.py] [_log()] Compression: none
2026-02-14T09:55:58.046 [DEBUG] [Thread-183467] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:55:58.063 [DEBUG] [Thread-183467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:55:58.064 [DEBUG] [Thread-183467] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:55:58.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:55:58.065 [DEBUG] [Thread-183467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:55:58.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:55:58.067 [DEBUG] [Thread-183467] [transport.py] [_log()] userauth is OK
2026-02-14T09:55:58.067 [DEBUG] [Thread-183467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:55:58.067 [DEBUG] [Thread-183467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:55:58.067 [DEBUG] [Thread-183467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:55:58.068 [DEBUG] [Thread-183467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:55:58.103 [INFO] [Thread-183467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:55:58.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:55:58.765 [DEBUG] [Thread-183467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:55:58.766 [DEBUG] [Thread-183467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:55:58.766 [DEBUG] [Thread-183467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:55:58.807 [DEBUG] [Thread-183467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:55:58.807 [DEBUG] [Thread-183467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:55:58.810 [DEBUG] [Thread-183467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:55:58.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:55:58.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:55:58.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:55:58.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:55:58.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:55:58.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:55:58.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:55:58.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:55:58.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:55:58.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.329974 -999.00  +11.00  19.36     68   +5.40 1 2 1 1 1   888    0 5.11 1.78 ----- 14.5 19.4 159.4 33.5 15.8 -21.4 14.8 -21.5 14.2 -17.0 14.8 -22.0
2026-02-14T09:55:58.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:55:58.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:55:58.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.329974
2026-02-14T09:55:58.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:55:58.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:55:58.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:55:58.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:55:58.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:55:58.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:55:20', tmtdew=6.32, humidity=64.84, cloud=0.0, wind=31.11, temperature=10.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:55:09.754', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:55:58.839 [DEBUG] [Thread-183467] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:55:58.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-14T09:55:58.935 [DEBUG] [Thread-183470] [transport.py] [_log()] starting thread (client mode): 0xa2ddfd90
2026-02-14T09:55:58.935 [DEBUG] [Thread-183470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:55:58.949 [DEBUG] [Thread-183470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:55:58.950 [INFO] [Thread-183470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:55:58.957 [DEBUG] [Thread-183470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:55:58.957 [DEBUG] [Thread-183470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:55:58.957 [DEBUG] [Thread-183470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:55:58.957 [DEBUG] [Thread-183470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:55:58.957 [DEBUG] [Thread-183470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:55:58.957 [DEBUG] [Thread-183470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:55:58.957 [DEBUG] [Thread-183470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:55:58.957 [DEBUG] [Thread-183470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:55:58.957 [DEBUG] [Thread-183470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:55:58.958 [DEBUG] [Thread-183470] [transport.py] [_log()] client lang: <none>
2026-02-14T09:55:58.958 [DEBUG] [Thread-183470] [transport.py] [_log()] server lang: <none>
2026-02-14T09:55:58.958 [DEBUG] [Thread-183470] [transport.py] [_log()] kex follows: False
2026-02-14T09:55:58.958 [DEBUG] [Thread-183470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:55:58.958 [DEBUG] [Thread-183470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:55:58.958 [DEBUG] [Thread-183470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:55:58.958 [DEBUG] [Thread-183470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:55:58.958 [DEBUG] [Thread-183470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:55:58.958 [DEBUG] [Thread-183470] [transport.py] [_log()] Compression: none
2026-02-14T09:55:58.958 [DEBUG] [Thread-183470] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:55:59.013 [DEBUG] [Thread-183470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:55:59.014 [DEBUG] [Thread-183470] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:55:59.015 [DEBUG] [Thread-183470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:55:59.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:55:59.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:55:59.071 [DEBUG] [Thread-183470] [transport.py] [_log()] userauth is OK
2026-02-14T09:55:59.071 [DEBUG] [Thread-183470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:55:59.071 [DEBUG] [Thread-183470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:55:59.071 [DEBUG] [Thread-183470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:55:59.071 [DEBUG] [Thread-183470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:55:59.090 [INFO] [Thread-183470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:55:59.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T09:55:59.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:55:59.362 [DEBUG] [Thread-183472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:55:59.921 [DEBUG] [Thread-183470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:55:59.921 [DEBUG] [Thread-183470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:55:59.968 [DEBUG] [Thread-183470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:55:59.969 [DEBUG] [Thread-183470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:55:59.978 [DEBUG] [Thread-183470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:55:59.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:55:59.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')
2026-02-14T09:55:59.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-14T09:56:00.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:56:00.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:56:00.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:56:00.015 [DEBUG] [Thread-183470] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:56:14.407 [DEBUG] [Thread-183473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:56:15.152 [DEBUG] [Thread-183474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:56:29.445 [DEBUG] [Thread-183475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:56:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:56:30.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:56:30.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-14T09:56:31.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 55, 56), 6.15, 65.55, 0.0, 25.87, 10.36, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:56:31.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:55:56
2026-02-14T09:56:32.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:56:32.414 [DEBUG] [Thread-183476] [transport.py] [_log()] starting thread (client mode): 0xa2d3f280
2026-02-14T09:56:32.414 [DEBUG] [Thread-183476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:56:32.435 [DEBUG] [Thread-183476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:56:32.435 [INFO] [Thread-183476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:56:32.438 [DEBUG] [Thread-183476] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:56:32.438 [DEBUG] [Thread-183476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:56:32.438 [DEBUG] [Thread-183476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:56:32.438 [DEBUG] [Thread-183476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:56:32.438 [DEBUG] [Thread-183476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:56:32.438 [DEBUG] [Thread-183476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:56:32.438 [DEBUG] [Thread-183476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:56:32.438 [DEBUG] [Thread-183476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:56:32.438 [DEBUG] [Thread-183476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:56:32.438 [DEBUG] [Thread-183476] [transport.py] [_log()] client lang: <none>
2026-02-14T09:56:32.438 [DEBUG] [Thread-183476] [transport.py] [_log()] server lang: <none>
2026-02-14T09:56:32.438 [DEBUG] [Thread-183476] [transport.py] [_log()] kex follows: False
2026-02-14T09:56:32.438 [DEBUG] [Thread-183476] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:56:32.438 [DEBUG] [Thread-183476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:56:32.438 [DEBUG] [Thread-183476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:56:32.438 [DEBUG] [Thread-183476] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:56:32.438 [DEBUG] [Thread-183476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:56:32.438 [DEBUG] [Thread-183476] [transport.py] [_log()] Compression: none
2026-02-14T09:56:32.438 [DEBUG] [Thread-183476] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:56:32.446 [DEBUG] [Thread-183476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:56:32.447 [DEBUG] [Thread-183476] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:56:32.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:56:32.448 [DEBUG] [Thread-183476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:56:32.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:56:32.488 [DEBUG] [Thread-183476] [transport.py] [_log()] userauth is OK
2026-02-14T09:56:32.488 [DEBUG] [Thread-183476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:56:32.488 [DEBUG] [Thread-183476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:56:32.488 [DEBUG] [Thread-183476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:56:32.488 [DEBUG] [Thread-183476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:56:32.509 [INFO] [Thread-183476] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:56:32.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:56:33.123 [DEBUG] [Thread-183476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:56:33.123 [DEBUG] [Thread-183476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:56:33.123 [DEBUG] [Thread-183476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:56:33.164 [DEBUG] [Thread-183476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:56:33.164 [DEBUG] [Thread-183476] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:56:33.168 [DEBUG] [Thread-183476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:56:33.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:56:33.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:56:33.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:56:33.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:56:33.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:56:33.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:56:33.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:56:33.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:56:33.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:56:33.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.330322 -999.00  +11.20  23.53     68   +5.50 1 2 1 1 1   888    0 5.35 3.38 ----- 21.8 23.5 188.2 28.2 16.1 -19.2 15.1 -19.1 14.2 -20.7 15.1 -20.0
2026-02-14T09:56:33.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:56:33.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:56:33.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.330322
2026-02-14T09:56:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:56:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:56:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:56:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:56:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:56:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:55:56', tmtdew=6.15, humidity=65.55, cloud=0.0, wind=25.87, temperature=10.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:55:39.821', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:56:33.191 [DEBUG] [Thread-183476] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:56:33.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T09:56:33.289 [DEBUG] [Thread-183479] [transport.py] [_log()] starting thread (client mode): 0xa2db42b0
2026-02-14T09:56:33.289 [DEBUG] [Thread-183479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:56:33.303 [DEBUG] [Thread-183479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:56:33.303 [INFO] [Thread-183479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:56:33.311 [DEBUG] [Thread-183479] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:56:33.311 [DEBUG] [Thread-183479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:56:33.311 [DEBUG] [Thread-183479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:56:33.311 [DEBUG] [Thread-183479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:56:33.312 [DEBUG] [Thread-183479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:56:33.312 [DEBUG] [Thread-183479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:56:33.312 [DEBUG] [Thread-183479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:56:33.312 [DEBUG] [Thread-183479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:56:33.312 [DEBUG] [Thread-183479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:56:33.312 [DEBUG] [Thread-183479] [transport.py] [_log()] client lang: <none>
2026-02-14T09:56:33.312 [DEBUG] [Thread-183479] [transport.py] [_log()] server lang: <none>
2026-02-14T09:56:33.312 [DEBUG] [Thread-183479] [transport.py] [_log()] kex follows: False
2026-02-14T09:56:33.312 [DEBUG] [Thread-183479] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:56:33.312 [DEBUG] [Thread-183479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:56:33.312 [DEBUG] [Thread-183479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:56:33.312 [DEBUG] [Thread-183479] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:56:33.312 [DEBUG] [Thread-183479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:56:33.312 [DEBUG] [Thread-183479] [transport.py] [_log()] Compression: none
2026-02-14T09:56:33.312 [DEBUG] [Thread-183479] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:56:33.368 [DEBUG] [Thread-183479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:56:33.368 [DEBUG] [Thread-183479] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:56:33.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:56:33.370 [DEBUG] [Thread-183479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:56:33.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:56:33.424 [DEBUG] [Thread-183479] [transport.py] [_log()] userauth is OK
2026-02-14T09:56:33.424 [DEBUG] [Thread-183479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:56:33.424 [DEBUG] [Thread-183479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:56:33.424 [DEBUG] [Thread-183479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:56:33.425 [DEBUG] [Thread-183479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:56:33.441 [INFO] [Thread-183479] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:56:33.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-14T09:56:33.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:56:34.264 [DEBUG] [Thread-183479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:56:34.264 [DEBUG] [Thread-183479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:56:34.313 [DEBUG] [Thread-183479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:56:34.313 [DEBUG] [Thread-183479] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:56:34.323 [DEBUG] [Thread-183479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:56:34.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:56:34.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-14T09:56:34.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:56:34.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:56:34.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:56:34.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:56:34.360 [DEBUG] [Thread-183479] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:56:44.486 [DEBUG] [Thread-183481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:56:54.774 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:56:54.775 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:56:59.540 [DEBUG] [Thread-183482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:57:04.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:57:04.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:57:04.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-14T09:57:06.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 56, 32), 6.1, 65.82, 0.0, 24.12, 10.54, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:57:06.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:56:32
2026-02-14T09:57:06.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:57:06.765 [DEBUG] [Thread-183483] [transport.py] [_log()] starting thread (client mode): 0xa2db6c50
2026-02-14T09:57:06.766 [DEBUG] [Thread-183483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:57:06.786 [DEBUG] [Thread-183483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:57:06.786 [INFO] [Thread-183483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:57:06.789 [DEBUG] [Thread-183483] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:57:06.789 [DEBUG] [Thread-183483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:57:06.789 [DEBUG] [Thread-183483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:57:06.789 [DEBUG] [Thread-183483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:57:06.789 [DEBUG] [Thread-183483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:57:06.789 [DEBUG] [Thread-183483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:57:06.789 [DEBUG] [Thread-183483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:57:06.789 [DEBUG] [Thread-183483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:57:06.789 [DEBUG] [Thread-183483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:57:06.789 [DEBUG] [Thread-183483] [transport.py] [_log()] client lang: <none>
2026-02-14T09:57:06.789 [DEBUG] [Thread-183483] [transport.py] [_log()] server lang: <none>
2026-02-14T09:57:06.789 [DEBUG] [Thread-183483] [transport.py] [_log()] kex follows: False
2026-02-14T09:57:06.790 [DEBUG] [Thread-183483] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:57:06.790 [DEBUG] [Thread-183483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:57:06.790 [DEBUG] [Thread-183483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:57:06.790 [DEBUG] [Thread-183483] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:57:06.790 [DEBUG] [Thread-183483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:57:06.790 [DEBUG] [Thread-183483] [transport.py] [_log()] Compression: none
2026-02-14T09:57:06.790 [DEBUG] [Thread-183483] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:57:06.808 [DEBUG] [Thread-183483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:57:06.809 [DEBUG] [Thread-183483] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:57:06.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:57:06.810 [DEBUG] [Thread-183483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:57:06.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:57:06.812 [DEBUG] [Thread-183483] [transport.py] [_log()] userauth is OK
2026-02-14T09:57:06.812 [DEBUG] [Thread-183483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:57:06.812 [DEBUG] [Thread-183483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:57:06.812 [DEBUG] [Thread-183483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:57:06.812 [DEBUG] [Thread-183483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:57:06.826 [INFO] [Thread-183483] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:57:06.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:57:07.455 [DEBUG] [Thread-183483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:57:07.455 [DEBUG] [Thread-183483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:57:07.455 [DEBUG] [Thread-183483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:57:07.496 [DEBUG] [Thread-183483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:57:07.497 [DEBUG] [Thread-183483] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:57:07.500 [DEBUG] [Thread-183483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:57:07.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:57:07.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:57:07.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:57:07.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:57:07.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:57:07.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:57:07.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:57:07.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:57:07.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:57:07.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.331017 -999.00  +11.10  25.51     68   +5.40 1 2 1 1 1   888    0 5.49 8.54 ----- 20.4 25.5 180.0 37.7 16.3 -20.6 15.2 -20.4 14.4 -20.5 15.2 -20.0
2026-02-14T09:57:07.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:57:07.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:57:07.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.331017
2026-02-14T09:57:07.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:57:07.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:57:07.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:57:07.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:57:07.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:57:07.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:56:32', tmtdew=6.1, humidity=65.82, cloud=0.0, wind=24.12, temperature=10.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:56:39.869', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:57:07.527 [DEBUG] [Thread-183483] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:57:07.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-14T09:57:07.622 [DEBUG] [Thread-183486] [transport.py] [_log()] starting thread (client mode): 0xa2db4070
2026-02-14T09:57:07.623 [DEBUG] [Thread-183486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:57:07.637 [DEBUG] [Thread-183486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:57:07.637 [INFO] [Thread-183486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:57:07.645 [DEBUG] [Thread-183486] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:57:07.645 [DEBUG] [Thread-183486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:57:07.645 [DEBUG] [Thread-183486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:57:07.645 [DEBUG] [Thread-183486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:57:07.645 [DEBUG] [Thread-183486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:57:07.645 [DEBUG] [Thread-183486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:57:07.645 [DEBUG] [Thread-183486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:57:07.645 [DEBUG] [Thread-183486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:57:07.645 [DEBUG] [Thread-183486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:57:07.645 [DEBUG] [Thread-183486] [transport.py] [_log()] client lang: <none>
2026-02-14T09:57:07.645 [DEBUG] [Thread-183486] [transport.py] [_log()] server lang: <none>
2026-02-14T09:57:07.645 [DEBUG] [Thread-183486] [transport.py] [_log()] kex follows: False
2026-02-14T09:57:07.645 [DEBUG] [Thread-183486] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:57:07.646 [DEBUG] [Thread-183486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:57:07.646 [DEBUG] [Thread-183486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:57:07.646 [DEBUG] [Thread-183486] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:57:07.646 [DEBUG] [Thread-183486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:57:07.646 [DEBUG] [Thread-183486] [transport.py] [_log()] Compression: none
2026-02-14T09:57:07.646 [DEBUG] [Thread-183486] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:57:07.706 [DEBUG] [Thread-183486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:57:07.706 [DEBUG] [Thread-183486] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:57:07.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:57:07.708 [DEBUG] [Thread-183486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:57:07.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:57:07.766 [DEBUG] [Thread-183486] [transport.py] [_log()] userauth is OK
2026-02-14T09:57:07.767 [DEBUG] [Thread-183486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:57:07.767 [DEBUG] [Thread-183486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:57:07.767 [DEBUG] [Thread-183486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:57:07.767 [DEBUG] [Thread-183486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:57:07.788 [INFO] [Thread-183486] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:57:07.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-14T09:57:07.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:57:08.592 [DEBUG] [Thread-183486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:57:08.592 [DEBUG] [Thread-183486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:57:08.640 [DEBUG] [Thread-183486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:57:08.640 [DEBUG] [Thread-183486] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:57:08.648 [DEBUG] [Thread-183486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:57:08.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:57:08.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-14T09:57:08.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-14T09:57:08.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:57:08.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:57:08.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:57:08.681 [DEBUG] [Thread-183486] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:57:14.580 [DEBUG] [Thread-183488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:57:15.205 [DEBUG] [Thread-183489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:57:29.633 [DEBUG] [Thread-183490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:57:38.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:57:38.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:57: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-14T09:57:40.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 57, 8), 6.51, 64.09, 0.0, 32.48, 10.78, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:57:40.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:57:08
2026-02-14T09:57:40.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:57:41.043 [DEBUG] [Thread-183491] [transport.py] [_log()] starting thread (client mode): 0xa2d3f280
2026-02-14T09:57:41.044 [DEBUG] [Thread-183491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:57:41.064 [DEBUG] [Thread-183491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:57:41.064 [INFO] [Thread-183491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:57:41.067 [DEBUG] [Thread-183491] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:57:41.067 [DEBUG] [Thread-183491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:57:41.067 [DEBUG] [Thread-183491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:57:41.067 [DEBUG] [Thread-183491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:57:41.067 [DEBUG] [Thread-183491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:57:41.068 [DEBUG] [Thread-183491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:57:41.068 [DEBUG] [Thread-183491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:57:41.068 [DEBUG] [Thread-183491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:57:41.068 [DEBUG] [Thread-183491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:57:41.068 [DEBUG] [Thread-183491] [transport.py] [_log()] client lang: <none>
2026-02-14T09:57:41.068 [DEBUG] [Thread-183491] [transport.py] [_log()] server lang: <none>
2026-02-14T09:57:41.068 [DEBUG] [Thread-183491] [transport.py] [_log()] kex follows: False
2026-02-14T09:57:41.068 [DEBUG] [Thread-183491] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:57:41.068 [DEBUG] [Thread-183491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:57:41.068 [DEBUG] [Thread-183491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:57:41.068 [DEBUG] [Thread-183491] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:57:41.068 [DEBUG] [Thread-183491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:57:41.068 [DEBUG] [Thread-183491] [transport.py] [_log()] Compression: none
2026-02-14T09:57:41.069 [DEBUG] [Thread-183491] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:57:41.087 [DEBUG] [Thread-183491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:57:41.088 [DEBUG] [Thread-183491] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:57:41.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:57:41.089 [DEBUG] [Thread-183491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:57:41.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:57:41.091 [DEBUG] [Thread-183491] [transport.py] [_log()] userauth is OK
2026-02-14T09:57:41.091 [DEBUG] [Thread-183491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:57:41.091 [DEBUG] [Thread-183491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:57:41.091 [DEBUG] [Thread-183491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:57:41.092 [DEBUG] [Thread-183491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:57:41.116 [INFO] [Thread-183491] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:57:41.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:57:41.856 [DEBUG] [Thread-183491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:57:41.856 [DEBUG] [Thread-183491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:57:41.857 [DEBUG] [Thread-183491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:57:41.897 [DEBUG] [Thread-183491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:57:41.898 [DEBUG] [Thread-183491] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:57:41.901 [DEBUG] [Thread-183491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:57:41.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:57:41.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:57:41.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:57:41.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:57:41.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:57:41.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:57:41.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:57:41.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:57:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:57:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.331364 -999.00  +11.30  16.94     67   +5.50 1 2 1 1 1   888    0 5.53 13.39 ----- 17.4 16.9 168.2 32.0 16.5 -22.0 15.4 -21.4 14.6 -21.2 15.3 -21.6
2026-02-14T09:57:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:57:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:57:41.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.331364
2026-02-14T09:57:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:57:41.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:57:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:57:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:57:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:57:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:57:08', tmtdew=6.51, humidity=64.09, cloud=0.0, wind=32.48, temperature=10.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:57:09.850', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:57:41.927 [DEBUG] [Thread-183491] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:57:42.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T09:57:42.023 [DEBUG] [Thread-183494] [transport.py] [_log()] starting thread (client mode): 0xa57c0c10
2026-02-14T09:57:42.023 [DEBUG] [Thread-183494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:57:42.037 [DEBUG] [Thread-183494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:57:42.037 [INFO] [Thread-183494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:57:42.045 [DEBUG] [Thread-183494] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:57:42.045 [DEBUG] [Thread-183494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:57:42.045 [DEBUG] [Thread-183494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:57:42.045 [DEBUG] [Thread-183494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:57:42.045 [DEBUG] [Thread-183494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:57:42.045 [DEBUG] [Thread-183494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:57:42.045 [DEBUG] [Thread-183494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:57:42.045 [DEBUG] [Thread-183494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:57:42.045 [DEBUG] [Thread-183494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:57:42.045 [DEBUG] [Thread-183494] [transport.py] [_log()] client lang: <none>
2026-02-14T09:57:42.045 [DEBUG] [Thread-183494] [transport.py] [_log()] server lang: <none>
2026-02-14T09:57:42.045 [DEBUG] [Thread-183494] [transport.py] [_log()] kex follows: False
2026-02-14T09:57:42.045 [DEBUG] [Thread-183494] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:57:42.045 [DEBUG] [Thread-183494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:57:42.045 [DEBUG] [Thread-183494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:57:42.046 [DEBUG] [Thread-183494] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:57:42.046 [DEBUG] [Thread-183494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:57:42.046 [DEBUG] [Thread-183494] [transport.py] [_log()] Compression: none
2026-02-14T09:57:42.046 [DEBUG] [Thread-183494] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:57:42.105 [DEBUG] [Thread-183494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:57:42.106 [DEBUG] [Thread-183494] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:57:42.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:57:42.107 [DEBUG] [Thread-183494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:57:42.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:57:42.163 [DEBUG] [Thread-183494] [transport.py] [_log()] userauth is OK
2026-02-14T09:57:42.163 [DEBUG] [Thread-183494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:57:42.163 [DEBUG] [Thread-183494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:57:42.163 [DEBUG] [Thread-183494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:57:42.163 [DEBUG] [Thread-183494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:57:42.182 [INFO] [Thread-183494] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:57:42.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-14T09:57:42.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:57:42.988 [DEBUG] [Thread-183494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:57:42.988 [DEBUG] [Thread-183494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:57:43.036 [DEBUG] [Thread-183494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:57:43.036 [DEBUG] [Thread-183494] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:57:43.044 [DEBUG] [Thread-183494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:57:43.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:57:43.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-14T09:57:43.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-14T09:57:43.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:57:43.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:57:43.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:57:43.077 [DEBUG] [Thread-183494] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:57:44.670 [DEBUG] [Thread-183496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:57:54.914 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:57:54.915 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:57:59.725 [DEBUG] [Thread-183497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:58:13.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:58:13.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:58:13.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T09:58:14.762 [DEBUG] [Thread-183498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:58:15.243 [DEBUG] [Thread-183499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:58:15.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 57, 43), 7.09, 61.46, 0.0, 32.94, 11.14, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:58:15.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:57:43
2026-02-14T09:58:15.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:58:15.820 [DEBUG] [Thread-183500] [transport.py] [_log()] starting thread (client mode): 0xa2d18700
2026-02-14T09:58:15.820 [DEBUG] [Thread-183500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:58:15.840 [DEBUG] [Thread-183500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:58:15.840 [INFO] [Thread-183500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:58:15.844 [DEBUG] [Thread-183500] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:58:15.844 [DEBUG] [Thread-183500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:58:15.844 [DEBUG] [Thread-183500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:58:15.844 [DEBUG] [Thread-183500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:58:15.844 [DEBUG] [Thread-183500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:58:15.844 [DEBUG] [Thread-183500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:58:15.844 [DEBUG] [Thread-183500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:58:15.844 [DEBUG] [Thread-183500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:58:15.844 [DEBUG] [Thread-183500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:58:15.844 [DEBUG] [Thread-183500] [transport.py] [_log()] client lang: <none>
2026-02-14T09:58:15.844 [DEBUG] [Thread-183500] [transport.py] [_log()] server lang: <none>
2026-02-14T09:58:15.844 [DEBUG] [Thread-183500] [transport.py] [_log()] kex follows: False
2026-02-14T09:58:15.844 [DEBUG] [Thread-183500] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:58:15.845 [DEBUG] [Thread-183500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:58:15.845 [DEBUG] [Thread-183500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:58:15.845 [DEBUG] [Thread-183500] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:58:15.845 [DEBUG] [Thread-183500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:58:15.845 [DEBUG] [Thread-183500] [transport.py] [_log()] Compression: none
2026-02-14T09:58:15.845 [DEBUG] [Thread-183500] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:58:15.862 [DEBUG] [Thread-183500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:58:15.862 [DEBUG] [Thread-183500] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:58:15.863 [DEBUG] [Thread-183500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:58:15.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:58:15.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:58:15.865 [DEBUG] [Thread-183500] [transport.py] [_log()] userauth is OK
2026-02-14T09:58:15.865 [DEBUG] [Thread-183500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:58:15.865 [DEBUG] [Thread-183500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:58:15.865 [DEBUG] [Thread-183500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:58:15.865 [DEBUG] [Thread-183500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:58:15.883 [INFO] [Thread-183500] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:58:15.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:58:16.510 [DEBUG] [Thread-183500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:58:16.510 [DEBUG] [Thread-183500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:58:16.511 [DEBUG] [Thread-183500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:58:16.551 [DEBUG] [Thread-183500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:58:16.551 [DEBUG] [Thread-183500] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:58:16.554 [DEBUG] [Thread-183500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:58:16.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:58:16.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:58:16.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:58:16.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:58:16.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:58:16.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:58:16.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:58:16.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:58:16.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:58:16.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.331711 -999.00  +11.40  28.04     66   +5.30 1 2 1 1 1   888    0 5.64 17.82 ----- 23.7 28.0 148.8 32.5 16.7 -24.2 15.7 -21.6 14.6 -22.7 15.5 -23.5
2026-02-14T09:58:16.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:58:16.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:58:16.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.331711
2026-02-14T09:58:16.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:58:16.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:58:16.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:58:16.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:58:16.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:58:16.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:57:43', tmtdew=7.09, humidity=61.46, cloud=0.0, wind=32.94, temperature=11.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:57:39.830', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:58:16.581 [DEBUG] [Thread-183500] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:58:16.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-14T09:58:16.677 [DEBUG] [Thread-183503] [transport.py] [_log()] starting thread (client mode): 0xa2db5e10
2026-02-14T09:58:16.677 [DEBUG] [Thread-183503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:58:16.691 [DEBUG] [Thread-183503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:58:16.691 [INFO] [Thread-183503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:58:16.698 [DEBUG] [Thread-183503] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:58:16.699 [DEBUG] [Thread-183503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:58:16.699 [DEBUG] [Thread-183503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:58:16.699 [DEBUG] [Thread-183503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:58:16.699 [DEBUG] [Thread-183503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:58:16.699 [DEBUG] [Thread-183503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:58:16.699 [DEBUG] [Thread-183503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:58:16.699 [DEBUG] [Thread-183503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:58:16.699 [DEBUG] [Thread-183503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:58:16.699 [DEBUG] [Thread-183503] [transport.py] [_log()] client lang: <none>
2026-02-14T09:58:16.700 [DEBUG] [Thread-183503] [transport.py] [_log()] server lang: <none>
2026-02-14T09:58:16.700 [DEBUG] [Thread-183503] [transport.py] [_log()] kex follows: False
2026-02-14T09:58:16.700 [DEBUG] [Thread-183503] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:58:16.700 [DEBUG] [Thread-183503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:58:16.700 [DEBUG] [Thread-183503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:58:16.700 [DEBUG] [Thread-183503] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:58:16.700 [DEBUG] [Thread-183503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:58:16.700 [DEBUG] [Thread-183503] [transport.py] [_log()] Compression: none
2026-02-14T09:58:16.701 [DEBUG] [Thread-183503] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:58:16.766 [DEBUG] [Thread-183503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:58:16.767 [DEBUG] [Thread-183503] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:58:16.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:58:16.768 [DEBUG] [Thread-183503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:58:16.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:58:16.823 [DEBUG] [Thread-183503] [transport.py] [_log()] userauth is OK
2026-02-14T09:58:16.824 [DEBUG] [Thread-183503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:58:16.824 [DEBUG] [Thread-183503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:58:16.824 [DEBUG] [Thread-183503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:58:16.824 [DEBUG] [Thread-183503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:58:16.842 [INFO] [Thread-183503] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:58:16.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-14T09:58:16.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:58:17.667 [DEBUG] [Thread-183503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:58:17.668 [DEBUG] [Thread-183503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:58:17.718 [DEBUG] [Thread-183503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:58:17.718 [DEBUG] [Thread-183503] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:58:17.727 [DEBUG] [Thread-183503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:58:17.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:58:17.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:58:17.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T09:58:17.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:58:17.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:58:17.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:58:17.772 [DEBUG] [Thread-183503] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:58:29.797 [DEBUG] [Thread-183505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:58:44.853 [DEBUG] [Thread-183506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:58:47.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:58:47.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:58:47.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-14T09:58:49.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 58, 18), 7.03, 61.68, 0.0, 31.18, 11.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:58:49.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:58:18
2026-02-14T09:58:49.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:58:50.080 [DEBUG] [Thread-183507] [transport.py] [_log()] starting thread (client mode): 0xa2db5de0
2026-02-14T09:58:50.080 [DEBUG] [Thread-183507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:58:50.100 [DEBUG] [Thread-183507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:58:50.100 [INFO] [Thread-183507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:58:50.101 [DEBUG] [Thread-183507] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:58:50.101 [DEBUG] [Thread-183507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:58:50.101 [DEBUG] [Thread-183507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:58:50.101 [DEBUG] [Thread-183507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:58:50.101 [DEBUG] [Thread-183507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:58:50.101 [DEBUG] [Thread-183507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:58:50.101 [DEBUG] [Thread-183507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:58:50.101 [DEBUG] [Thread-183507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:58:50.101 [DEBUG] [Thread-183507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:58:50.101 [DEBUG] [Thread-183507] [transport.py] [_log()] client lang: <none>
2026-02-14T09:58:50.101 [DEBUG] [Thread-183507] [transport.py] [_log()] server lang: <none>
2026-02-14T09:58:50.101 [DEBUG] [Thread-183507] [transport.py] [_log()] kex follows: False
2026-02-14T09:58:50.101 [DEBUG] [Thread-183507] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:58:50.101 [DEBUG] [Thread-183507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:58:50.101 [DEBUG] [Thread-183507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:58:50.101 [DEBUG] [Thread-183507] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:58:50.101 [DEBUG] [Thread-183507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:58:50.102 [DEBUG] [Thread-183507] [transport.py] [_log()] Compression: none
2026-02-14T09:58:50.102 [DEBUG] [Thread-183507] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:58:50.108 [DEBUG] [Thread-183507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:58:50.108 [DEBUG] [Thread-183507] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:58:50.108 [DEBUG] [Thread-183507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:58:50.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:58:50.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:58:50.109 [DEBUG] [Thread-183507] [transport.py] [_log()] userauth is OK
2026-02-14T09:58:50.109 [DEBUG] [Thread-183507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:58:50.109 [DEBUG] [Thread-183507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:58:50.109 [DEBUG] [Thread-183507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:58:50.109 [DEBUG] [Thread-183507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:58:50.120 [INFO] [Thread-183507] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:58:50.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:58:50.743 [DEBUG] [Thread-183507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:58:50.743 [DEBUG] [Thread-183507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:58:50.744 [DEBUG] [Thread-183507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:58:50.784 [DEBUG] [Thread-183507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:58:50.785 [DEBUG] [Thread-183507] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:58:50.788 [DEBUG] [Thread-183507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:58:50.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:58:50.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:58:50.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:58:50.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:58:50.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:58:50.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:58:50.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:58:50.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:58:50.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:58:50.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.332058 -999.00  +11.20  31.41     66   +5.10 1 1 2 1 1   888    0 5.78 20.79 ----- 30.4 31.4 159.6 38.9 16.8 -26.2 15.7 -23.6 14.6 -24.0 15.5 -24.0
2026-02-14T09:58:50.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:58:50.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:58:50.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.332058
2026-02-14T09:58:50.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:58:50.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:58:50.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:58:50.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:58:50.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T09:58:50.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:58:18', tmtdew=7.03, humidity=61.68, cloud=0.0, wind=31.18, temperature=11.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:58:09.811', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:58:50.817 [DEBUG] [Thread-183507] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:58:50.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-14T09:58:50.915 [DEBUG] [Thread-183510] [transport.py] [_log()] starting thread (client mode): 0xa2db5e10
2026-02-14T09:58:50.915 [DEBUG] [Thread-183510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:58:50.931 [DEBUG] [Thread-183510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:58:50.932 [INFO] [Thread-183510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:58:50.939 [DEBUG] [Thread-183510] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:58:50.939 [DEBUG] [Thread-183510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:58:50.939 [DEBUG] [Thread-183510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:58:50.939 [DEBUG] [Thread-183510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:58:50.939 [DEBUG] [Thread-183510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:58:50.939 [DEBUG] [Thread-183510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:58:50.939 [DEBUG] [Thread-183510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:58:50.939 [DEBUG] [Thread-183510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:58:50.939 [DEBUG] [Thread-183510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:58:50.939 [DEBUG] [Thread-183510] [transport.py] [_log()] client lang: <none>
2026-02-14T09:58:50.939 [DEBUG] [Thread-183510] [transport.py] [_log()] server lang: <none>
2026-02-14T09:58:50.939 [DEBUG] [Thread-183510] [transport.py] [_log()] kex follows: False
2026-02-14T09:58:50.939 [DEBUG] [Thread-183510] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:58:50.939 [DEBUG] [Thread-183510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:58:50.939 [DEBUG] [Thread-183510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:58:50.939 [DEBUG] [Thread-183510] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:58:50.939 [DEBUG] [Thread-183510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:58:50.939 [DEBUG] [Thread-183510] [transport.py] [_log()] Compression: none
2026-02-14T09:58:50.939 [DEBUG] [Thread-183510] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:58:50.997 [DEBUG] [Thread-183510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:58:50.997 [DEBUG] [Thread-183510] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:58:50.997 [DEBUG] [Thread-183510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:58:50.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:58:50.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:58:51.053 [DEBUG] [Thread-183510] [transport.py] [_log()] userauth is OK
2026-02-14T09:58:51.053 [DEBUG] [Thread-183510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:58:51.053 [DEBUG] [Thread-183510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:58:51.053 [DEBUG] [Thread-183510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:58:51.053 [DEBUG] [Thread-183510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:58:51.076 [INFO] [Thread-183510] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:58:51.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-14T09:58:51.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:58:51.938 [DEBUG] [Thread-183510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:58:51.938 [DEBUG] [Thread-183510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:58:51.986 [DEBUG] [Thread-183510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:58:51.986 [DEBUG] [Thread-183510] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:58:51.996 [DEBUG] [Thread-183510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:58:52.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:58:52.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-14T09:58:52.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-14T09:58:52.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:58:52.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:58:52.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:58:52.032 [DEBUG] [Thread-183510] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:58:55.056 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:58:55.058 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:58:59.890 [DEBUG] [Thread-183512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:59:14.953 [DEBUG] [Thread-183513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:59:15.287 [DEBUG] [Thread-183514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:59:22.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:59:22.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:59:22.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-14T09:59:23.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 58, 53), 7.42, 60.15, 0.0, 36.98, 11.46, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:59:23.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:58:53
2026-02-14T09:59:24.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:59:24.380 [DEBUG] [Thread-183515] [transport.py] [_log()] starting thread (client mode): 0xa5742740
2026-02-14T09:59:24.380 [DEBUG] [Thread-183515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:59:24.400 [DEBUG] [Thread-183515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:59:24.401 [INFO] [Thread-183515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:59:24.402 [DEBUG] [Thread-183515] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:59:24.402 [DEBUG] [Thread-183515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:59:24.403 [DEBUG] [Thread-183515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:59:24.403 [DEBUG] [Thread-183515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:59:24.403 [DEBUG] [Thread-183515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:59:24.403 [DEBUG] [Thread-183515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:59:24.403 [DEBUG] [Thread-183515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:59:24.403 [DEBUG] [Thread-183515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:59:24.403 [DEBUG] [Thread-183515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:59:24.403 [DEBUG] [Thread-183515] [transport.py] [_log()] client lang: <none>
2026-02-14T09:59:24.403 [DEBUG] [Thread-183515] [transport.py] [_log()] server lang: <none>
2026-02-14T09:59:24.403 [DEBUG] [Thread-183515] [transport.py] [_log()] kex follows: False
2026-02-14T09:59:24.403 [DEBUG] [Thread-183515] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:59:24.404 [DEBUG] [Thread-183515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:59:24.404 [DEBUG] [Thread-183515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:59:24.404 [DEBUG] [Thread-183515] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:59:24.404 [DEBUG] [Thread-183515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:59:24.404 [DEBUG] [Thread-183515] [transport.py] [_log()] Compression: none
2026-02-14T09:59:24.404 [DEBUG] [Thread-183515] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:59:24.417 [DEBUG] [Thread-183515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:59:24.418 [DEBUG] [Thread-183515] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:59:24.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:59:24.419 [DEBUG] [Thread-183515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:59:24.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:59:24.422 [DEBUG] [Thread-183515] [transport.py] [_log()] userauth is OK
2026-02-14T09:59:24.422 [DEBUG] [Thread-183515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:59:24.422 [DEBUG] [Thread-183515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:59:24.422 [DEBUG] [Thread-183515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:59:24.422 [DEBUG] [Thread-183515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:59:24.447 [INFO] [Thread-183515] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:59:24.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:59:25.095 [DEBUG] [Thread-183515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:59:25.095 [DEBUG] [Thread-183515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:59:25.096 [DEBUG] [Thread-183515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:59:25.136 [DEBUG] [Thread-183515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:59:25.137 [DEBUG] [Thread-183515] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:59:25.140 [DEBUG] [Thread-183515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:59:25.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:59:25.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:59:25.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:59:25.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:59:25.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:59:25.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:59:25.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:59:25.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:59:25.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:59:25.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.332405 -999.00  +11.10  23.98     67   +5.20 1 2 1 1 1   888    0 5.92 23.17 ----- 21.4 24.0 160.0 36.6 16.7 -26.1 15.7 -22.6 14.7 -22.8 15.4 -24.8
2026-02-14T09:59:25.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:59:25.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:59:25.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.332405
2026-02-14T09:59:25.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:59:25.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:59:25.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:59:25.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:59:25.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:59:25.166 [DEBUG] [Thread-183515] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:59:25.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:58:53', tmtdew=7.42, humidity=60.15, cloud=0.0, wind=36.98, temperature=11.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:58:39.792', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:59:25.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-14T09:59:25.271 [DEBUG] [Thread-183518] [transport.py] [_log()] starting thread (client mode): 0xa57c3280
2026-02-14T09:59:25.271 [DEBUG] [Thread-183518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:59:25.286 [DEBUG] [Thread-183518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:59:25.286 [INFO] [Thread-183518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:59:25.295 [DEBUG] [Thread-183518] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:59:25.295 [DEBUG] [Thread-183518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:59:25.295 [DEBUG] [Thread-183518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:59:25.295 [DEBUG] [Thread-183518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:59:25.295 [DEBUG] [Thread-183518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:59:25.295 [DEBUG] [Thread-183518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:59:25.295 [DEBUG] [Thread-183518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:59:25.295 [DEBUG] [Thread-183518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:59:25.295 [DEBUG] [Thread-183518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:59:25.295 [DEBUG] [Thread-183518] [transport.py] [_log()] client lang: <none>
2026-02-14T09:59:25.295 [DEBUG] [Thread-183518] [transport.py] [_log()] server lang: <none>
2026-02-14T09:59:25.295 [DEBUG] [Thread-183518] [transport.py] [_log()] kex follows: False
2026-02-14T09:59:25.295 [DEBUG] [Thread-183518] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:59:25.296 [DEBUG] [Thread-183518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:59:25.296 [DEBUG] [Thread-183518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:59:25.296 [DEBUG] [Thread-183518] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:59:25.296 [DEBUG] [Thread-183518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:59:25.296 [DEBUG] [Thread-183518] [transport.py] [_log()] Compression: none
2026-02-14T09:59:25.296 [DEBUG] [Thread-183518] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:59:25.355 [DEBUG] [Thread-183518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:59:25.356 [DEBUG] [Thread-183518] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:59:25.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:59:25.357 [DEBUG] [Thread-183518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:59:25.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:59:25.415 [DEBUG] [Thread-183518] [transport.py] [_log()] userauth is OK
2026-02-14T09:59:25.416 [DEBUG] [Thread-183518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:59:25.416 [DEBUG] [Thread-183518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:59:25.416 [DEBUG] [Thread-183518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:59:25.416 [DEBUG] [Thread-183518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:59:25.434 [INFO] [Thread-183518] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:59:25.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-14T09:59:25.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:59:26.250 [DEBUG] [Thread-183518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:59:26.250 [DEBUG] [Thread-183518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:59:26.299 [DEBUG] [Thread-183518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:59:26.299 [DEBUG] [Thread-183518] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:59:26.309 [DEBUG] [Thread-183518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:59:26.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:59:26.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T09:59: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') -> 00000000
2026-02-14T09:59:26.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:59:26.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:59:26.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:59:26.347 [DEBUG] [Thread-183518] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:59:29.991 [DEBUG] [Thread-183520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:59:45.052 [DEBUG] [Thread-183521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:59:55.195 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:59:55.196 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T09:59:56.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T09:59:56.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T09:59:56.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-14T09:59:58.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 9, 59, 29), 7.58, 59.5, 0.0, 33.3, 11.56, 0, 0, 0, 2, 0, 0),)
2026-02-14T09:59:58.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 09:59:29
2026-02-14T09:59:58.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T09:59:58.827 [DEBUG] [Thread-183522] [transport.py] [_log()] starting thread (client mode): 0xa57c2aa0
2026-02-14T09:59:58.827 [DEBUG] [Thread-183522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:59:58.846 [DEBUG] [Thread-183522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T09:59:58.846 [INFO] [Thread-183522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T09:59:58.850 [DEBUG] [Thread-183522] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:59:58.850 [DEBUG] [Thread-183522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T09:59:58.850 [DEBUG] [Thread-183522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:59:58.850 [DEBUG] [Thread-183522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:59:58.850 [DEBUG] [Thread-183522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:59:58.850 [DEBUG] [Thread-183522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:59:58.850 [DEBUG] [Thread-183522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:59:58.850 [DEBUG] [Thread-183522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:59:58.850 [DEBUG] [Thread-183522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:59:58.850 [DEBUG] [Thread-183522] [transport.py] [_log()] client lang: <none>
2026-02-14T09:59:58.850 [DEBUG] [Thread-183522] [transport.py] [_log()] server lang: <none>
2026-02-14T09:59:58.850 [DEBUG] [Thread-183522] [transport.py] [_log()] kex follows: False
2026-02-14T09:59:58.850 [DEBUG] [Thread-183522] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:59:58.850 [DEBUG] [Thread-183522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:59:58.850 [DEBUG] [Thread-183522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:59:58.850 [DEBUG] [Thread-183522] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:59:58.850 [DEBUG] [Thread-183522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:59:58.850 [DEBUG] [Thread-183522] [transport.py] [_log()] Compression: none
2026-02-14T09:59:58.850 [DEBUG] [Thread-183522] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:59:58.867 [DEBUG] [Thread-183522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:59:58.868 [DEBUG] [Thread-183522] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:59:58.868 [DEBUG] [Thread-183522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T09:59:58.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T09:59:58.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:59:58.912 [DEBUG] [Thread-183522] [transport.py] [_log()] userauth is OK
2026-02-14T09:59:58.913 [DEBUG] [Thread-183522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:59:58.913 [DEBUG] [Thread-183522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:59:58.913 [DEBUG] [Thread-183522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T09:59:58.913 [DEBUG] [Thread-183522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:59:58.944 [INFO] [Thread-183522] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:59:58.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T09:59:59.594 [DEBUG] [Thread-183522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T09:59:59.594 [DEBUG] [Thread-183522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T09:59:59.595 [DEBUG] [Thread-183522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T09:59:59.635 [DEBUG] [Thread-183522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T09:59:59.636 [DEBUG] [Thread-183522] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T09:59:59.639 [DEBUG] [Thread-183522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T09:59:59.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T09:59:59.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T09:59:59.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T09:59:59.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T09:59:59.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T09:59:59.664 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T09:59:59.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T09:59:59.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T09:59:59.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T09:59:59.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.332753 -999.00  +11.20  28.73     66   +5.20 1 2 1 1 1   888    0 5.96 24.70 ----- 22.5 28.7 161.9 36.6 16.9 -24.2 15.6 -22.6 14.8 -22.1 15.5 -24.4
2026-02-14T09:59:59.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T09:59:59.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T09:59:59.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.332753
2026-02-14T09:59:59.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T09:59:59.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T09:59:59.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T09:59:59.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T09:59:59.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T09:59:59.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T09:59:29', tmtdew=7.58, humidity=59.5, cloud=0.0, wind=33.3, temperature=11.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:59:09.859', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T09:59:59.667 [DEBUG] [Thread-183522] [transport.py] [_log()] EOF in transport thread
2026-02-14T09:59:59.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-14T09:59:59.762 [DEBUG] [Thread-183525] [transport.py] [_log()] starting thread (client mode): 0xa57c0760
2026-02-14T09:59:59.762 [DEBUG] [Thread-183525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T09:59:59.776 [DEBUG] [Thread-183525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T09:59:59.776 [INFO] [Thread-183525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T09:59:59.783 [DEBUG] [Thread-183525] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T09:59:59.784 [DEBUG] [Thread-183525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T09:59:59.784 [DEBUG] [Thread-183525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T09:59:59.784 [DEBUG] [Thread-183525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:59:59.784 [DEBUG] [Thread-183525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T09:59:59.784 [DEBUG] [Thread-183525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:59:59.784 [DEBUG] [Thread-183525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T09:59:59.784 [DEBUG] [Thread-183525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T09:59:59.784 [DEBUG] [Thread-183525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T09:59:59.784 [DEBUG] [Thread-183525] [transport.py] [_log()] client lang: <none>
2026-02-14T09:59:59.784 [DEBUG] [Thread-183525] [transport.py] [_log()] server lang: <none>
2026-02-14T09:59:59.784 [DEBUG] [Thread-183525] [transport.py] [_log()] kex follows: False
2026-02-14T09:59:59.784 [DEBUG] [Thread-183525] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T09:59:59.784 [DEBUG] [Thread-183525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T09:59:59.784 [DEBUG] [Thread-183525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T09:59:59.784 [DEBUG] [Thread-183525] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T09:59:59.784 [DEBUG] [Thread-183525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T09:59:59.784 [DEBUG] [Thread-183525] [transport.py] [_log()] Compression: none
2026-02-14T09:59:59.784 [DEBUG] [Thread-183525] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T09:59:59.844 [DEBUG] [Thread-183525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T09:59:59.844 [DEBUG] [Thread-183525] [transport.py] [_log()] Switch to new keys ...
2026-02-14T09:59:59.845 [DEBUG] [Thread-183525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T09:59:59.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T09:59:59.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T09:59:59.900 [DEBUG] [Thread-183525] [transport.py] [_log()] userauth is OK
2026-02-14T09:59:59.900 [DEBUG] [Thread-183525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T09:59:59.900 [DEBUG] [Thread-183525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T09:59:59.901 [DEBUG] [Thread-183525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T09:59:59.901 [DEBUG] [Thread-183525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T09:59:59.919 [INFO] [Thread-183525] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T09:59:59.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-14T09:59:59.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:00:00.091 [DEBUG] [Thread-183527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:00:00.764 [DEBUG] [Thread-183525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:00:00.765 [DEBUG] [Thread-183525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:00:00.812 [DEBUG] [Thread-183525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:00:00.813 [DEBUG] [Thread-183525] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:00:00.822 [DEBUG] [Thread-183525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:00:00.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:00:00.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:00:00.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:00:00.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:00:00.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:00:00.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:00:00.859 [DEBUG] [Thread-183525] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:00:15.140 [DEBUG] [Thread-183528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:00:15.323 [DEBUG] [Thread-183529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:00:30.173 [DEBUG] [Thread-183530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:00:30.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:00:30.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:00:30.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:00:32.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 0, 4), 7.62, 59.3, 0.0, 33.9, 11.46, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:00:32.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:00:04
2026-02-14T10:00:33.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:00:33.260 [DEBUG] [Thread-183531] [transport.py] [_log()] starting thread (client mode): 0xa2ddc5b0
2026-02-14T10:00:33.261 [DEBUG] [Thread-183531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:00:33.281 [DEBUG] [Thread-183531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:00:33.281 [INFO] [Thread-183531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:00:33.284 [DEBUG] [Thread-183531] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:00:33.284 [DEBUG] [Thread-183531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:00:33.284 [DEBUG] [Thread-183531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:00:33.284 [DEBUG] [Thread-183531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:00:33.284 [DEBUG] [Thread-183531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:00:33.284 [DEBUG] [Thread-183531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:00:33.284 [DEBUG] [Thread-183531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:00:33.284 [DEBUG] [Thread-183531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:00:33.284 [DEBUG] [Thread-183531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:00:33.284 [DEBUG] [Thread-183531] [transport.py] [_log()] client lang: <none>
2026-02-14T10:00:33.284 [DEBUG] [Thread-183531] [transport.py] [_log()] server lang: <none>
2026-02-14T10:00:33.284 [DEBUG] [Thread-183531] [transport.py] [_log()] kex follows: False
2026-02-14T10:00:33.284 [DEBUG] [Thread-183531] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:00:33.284 [DEBUG] [Thread-183531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:00:33.284 [DEBUG] [Thread-183531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:00:33.284 [DEBUG] [Thread-183531] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:00:33.285 [DEBUG] [Thread-183531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:00:33.285 [DEBUG] [Thread-183531] [transport.py] [_log()] Compression: none
2026-02-14T10:00:33.285 [DEBUG] [Thread-183531] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:00:33.303 [DEBUG] [Thread-183531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:00:33.303 [DEBUG] [Thread-183531] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:00:33.304 [DEBUG] [Thread-183531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:00:33.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:00:33.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:00:33.307 [DEBUG] [Thread-183531] [transport.py] [_log()] userauth is OK
2026-02-14T10:00:33.308 [DEBUG] [Thread-183531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:00:33.308 [DEBUG] [Thread-183531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:00:33.308 [DEBUG] [Thread-183531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:00:33.308 [DEBUG] [Thread-183531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:00:33.333 [INFO] [Thread-183531] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:00:33.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:00:34.168 [DEBUG] [Thread-183531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:00:34.168 [DEBUG] [Thread-183531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:00:34.169 [DEBUG] [Thread-183531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:00:34.210 [DEBUG] [Thread-183531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:00:34.210 [DEBUG] [Thread-183531] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:00:34.213 [DEBUG] [Thread-183531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:00:34.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:00:34.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:00:34.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:00:34.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:00:34.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:00:34.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:00:34.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:00:34.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:00:34.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:00:34.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.333100 -999.00  +11.00  23.57     66   +4.90 1 1 1 1 1   888    0 6.13 29.13 ----- 19.1 23.6 171.0 33.5 17.0 -26.0 15.8 -25.5 14.7 -23.8 15.6 -25.4
2026-02-14T10:00:34.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:00:34.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:00:34.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.333100
2026-02-14T10:00:34.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:00:34.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:00:34.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:00:34.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:00:34.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:00:34.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:00:04', tmtdew=7.62, humidity=59.3, cloud=0.0, wind=33.9, temperature=11.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T07:59:39.840', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:00:34.245 [DEBUG] [Thread-183531] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:00:34.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-14T10:00:34.339 [DEBUG] [Thread-183534] [transport.py] [_log()] starting thread (client mode): 0xa2d7b730
2026-02-14T10:00:34.340 [DEBUG] [Thread-183534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:00:34.354 [DEBUG] [Thread-183534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:00:34.354 [INFO] [Thread-183534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:00:34.362 [DEBUG] [Thread-183534] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:00:34.362 [DEBUG] [Thread-183534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:00:34.362 [DEBUG] [Thread-183534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:00:34.362 [DEBUG] [Thread-183534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:00:34.362 [DEBUG] [Thread-183534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:00:34.362 [DEBUG] [Thread-183534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:00:34.362 [DEBUG] [Thread-183534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:00:34.362 [DEBUG] [Thread-183534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:00:34.362 [DEBUG] [Thread-183534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:00:34.362 [DEBUG] [Thread-183534] [transport.py] [_log()] client lang: <none>
2026-02-14T10:00:34.362 [DEBUG] [Thread-183534] [transport.py] [_log()] server lang: <none>
2026-02-14T10:00:34.362 [DEBUG] [Thread-183534] [transport.py] [_log()] kex follows: False
2026-02-14T10:00:34.362 [DEBUG] [Thread-183534] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:00:34.362 [DEBUG] [Thread-183534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:00:34.362 [DEBUG] [Thread-183534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:00:34.363 [DEBUG] [Thread-183534] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:00:34.363 [DEBUG] [Thread-183534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:00:34.363 [DEBUG] [Thread-183534] [transport.py] [_log()] Compression: none
2026-02-14T10:00:34.363 [DEBUG] [Thread-183534] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:00:34.421 [DEBUG] [Thread-183534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:00:34.422 [DEBUG] [Thread-183534] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:00:34.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:00:34.423 [DEBUG] [Thread-183534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:00:34.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:00:34.477 [DEBUG] [Thread-183534] [transport.py] [_log()] userauth is OK
2026-02-14T10:00:34.477 [DEBUG] [Thread-183534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:00:34.477 [DEBUG] [Thread-183534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:00:34.477 [DEBUG] [Thread-183534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:00:34.477 [DEBUG] [Thread-183534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:00:34.496 [INFO] [Thread-183534] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:00:34.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-14T10:00:34.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:00:35.301 [DEBUG] [Thread-183534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:00:35.301 [DEBUG] [Thread-183534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:00:35.349 [DEBUG] [Thread-183534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:00:35.349 [DEBUG] [Thread-183534] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:00:35.358 [DEBUG] [Thread-183534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:00:35.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:00:35.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:00:35.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-14T10:00:35.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:00:35.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:00:35.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:00:35.394 [DEBUG] [Thread-183534] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:00:45.211 [DEBUG] [Thread-183536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:00:55.336 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:00:55.337 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:01:00.270 [DEBUG] [Thread-183537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:01:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:01:05.417 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:01:05.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-14T10:01:07.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 0, 39), 7.39, 60.43, 0.0, 21.98, 11.65, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:01:07.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:00:39
2026-02-14T10:01:07.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:01:07.831 [DEBUG] [Thread-183538] [transport.py] [_log()] starting thread (client mode): 0xa2db4f10
2026-02-14T10:01:07.831 [DEBUG] [Thread-183538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:01:07.852 [DEBUG] [Thread-183538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:01:07.852 [INFO] [Thread-183538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:01:07.856 [DEBUG] [Thread-183538] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:01:07.856 [DEBUG] [Thread-183538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:01:07.856 [DEBUG] [Thread-183538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:01:07.856 [DEBUG] [Thread-183538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:01:07.856 [DEBUG] [Thread-183538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:01:07.856 [DEBUG] [Thread-183538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:01:07.856 [DEBUG] [Thread-183538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:01:07.856 [DEBUG] [Thread-183538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:01:07.856 [DEBUG] [Thread-183538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:01:07.856 [DEBUG] [Thread-183538] [transport.py] [_log()] client lang: <none>
2026-02-14T10:01:07.856 [DEBUG] [Thread-183538] [transport.py] [_log()] server lang: <none>
2026-02-14T10:01:07.856 [DEBUG] [Thread-183538] [transport.py] [_log()] kex follows: False
2026-02-14T10:01:07.856 [DEBUG] [Thread-183538] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:01:07.856 [DEBUG] [Thread-183538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:01:07.856 [DEBUG] [Thread-183538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:01:07.856 [DEBUG] [Thread-183538] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:01:07.856 [DEBUG] [Thread-183538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:01:07.856 [DEBUG] [Thread-183538] [transport.py] [_log()] Compression: none
2026-02-14T10:01:07.856 [DEBUG] [Thread-183538] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:01:07.876 [DEBUG] [Thread-183538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:01:07.876 [DEBUG] [Thread-183538] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:01:07.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:01:07.878 [DEBUG] [Thread-183538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:01:07.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:01:07.880 [DEBUG] [Thread-183538] [transport.py] [_log()] userauth is OK
2026-02-14T10:01:07.880 [DEBUG] [Thread-183538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:01:07.881 [DEBUG] [Thread-183538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:01:07.881 [DEBUG] [Thread-183538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:01:07.881 [DEBUG] [Thread-183538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:01:07.903 [INFO] [Thread-183538] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:01:07.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:01:08.566 [DEBUG] [Thread-183538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:01:08.566 [DEBUG] [Thread-183538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:01:08.566 [DEBUG] [Thread-183538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:01:08.607 [DEBUG] [Thread-183538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:01:08.607 [DEBUG] [Thread-183538] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:01:08.610 [DEBUG] [Thread-183538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:01:08.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:01:08.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:01:08.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:01:08.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:01:08.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:01:08.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:01:08.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:01:08.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:01:08.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:01:08.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.333794 -999.00  +11.20  16.08     66   +5.30 1 2 1 1 1   888    0 6.23 31.47 ----- 29.6 16.1 156.5 26.2 17.1 -22.2 16.0 -20.1 14.9 -21.0 15.8 -21.1
2026-02-14T10:01:08.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:01:08.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:01:08.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.333794
2026-02-14T10:01:08.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:01:08.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:01:08.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:01:08.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:01:08.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:01:08.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:00:39', tmtdew=7.39, humidity=60.43, cloud=0.0, wind=21.98, temperature=11.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:00:39.802', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:01:08.632 [DEBUG] [Thread-183538] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:01:08.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-14T10:01:08.715 [DEBUG] [Thread-183541] [transport.py] [_log()] starting thread (client mode): 0xa2d12350
2026-02-14T10:01:08.715 [DEBUG] [Thread-183541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:01:08.730 [DEBUG] [Thread-183541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:01:08.730 [INFO] [Thread-183541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:01:08.737 [DEBUG] [Thread-183541] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:01:08.737 [DEBUG] [Thread-183541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:01:08.737 [DEBUG] [Thread-183541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:01:08.737 [DEBUG] [Thread-183541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:01:08.737 [DEBUG] [Thread-183541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:01:08.737 [DEBUG] [Thread-183541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:01:08.737 [DEBUG] [Thread-183541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:01:08.738 [DEBUG] [Thread-183541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:01:08.738 [DEBUG] [Thread-183541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:01:08.738 [DEBUG] [Thread-183541] [transport.py] [_log()] client lang: <none>
2026-02-14T10:01:08.738 [DEBUG] [Thread-183541] [transport.py] [_log()] server lang: <none>
2026-02-14T10:01:08.738 [DEBUG] [Thread-183541] [transport.py] [_log()] kex follows: False
2026-02-14T10:01:08.738 [DEBUG] [Thread-183541] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:01:08.738 [DEBUG] [Thread-183541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:01:08.738 [DEBUG] [Thread-183541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:01:08.738 [DEBUG] [Thread-183541] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:01:08.738 [DEBUG] [Thread-183541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:01:08.738 [DEBUG] [Thread-183541] [transport.py] [_log()] Compression: none
2026-02-14T10:01:08.738 [DEBUG] [Thread-183541] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:01:08.798 [DEBUG] [Thread-183541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:01:08.799 [DEBUG] [Thread-183541] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:01:08.799 [DEBUG] [Thread-183541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:01:08.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:01:08.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:01:08.854 [DEBUG] [Thread-183541] [transport.py] [_log()] userauth is OK
2026-02-14T10:01:08.855 [DEBUG] [Thread-183541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:01:08.855 [DEBUG] [Thread-183541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:01:08.855 [DEBUG] [Thread-183541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:01:08.855 [DEBUG] [Thread-183541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:01:08.874 [INFO] [Thread-183541] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:01:08.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-14T10:01:08.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:01:09.697 [DEBUG] [Thread-183541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:01:09.697 [DEBUG] [Thread-183541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:01:09.745 [DEBUG] [Thread-183541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:01:09.746 [DEBUG] [Thread-183541] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:01:09.755 [DEBUG] [Thread-183541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:01:09.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:01:09.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-14T10:01:09.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:01:09.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:01:09.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:01:09.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:01:09.792 [DEBUG] [Thread-183541] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:01:15.308 [DEBUG] [Thread-183543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:01:15.385 [DEBUG] [Thread-183544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:01:30.359 [DEBUG] [Thread-183545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:01:39.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:01:39.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:01:39.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:01:41.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 1, 14), 7.36, 60.19, 0.0, 31.39, 11.19, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:01:41.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:01:14
2026-02-14T10:01:41.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:01:42.143 [DEBUG] [Thread-183546] [transport.py] [_log()] starting thread (client mode): 0xa5743580
2026-02-14T10:01:42.144 [DEBUG] [Thread-183546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:01:42.163 [DEBUG] [Thread-183546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:01:42.163 [INFO] [Thread-183546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:01:42.167 [DEBUG] [Thread-183546] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:01:42.167 [DEBUG] [Thread-183546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:01:42.167 [DEBUG] [Thread-183546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:01:42.167 [DEBUG] [Thread-183546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:01:42.167 [DEBUG] [Thread-183546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:01:42.168 [DEBUG] [Thread-183546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:01:42.168 [DEBUG] [Thread-183546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:01:42.168 [DEBUG] [Thread-183546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:01:42.168 [DEBUG] [Thread-183546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:01:42.168 [DEBUG] [Thread-183546] [transport.py] [_log()] client lang: <none>
2026-02-14T10:01:42.168 [DEBUG] [Thread-183546] [transport.py] [_log()] server lang: <none>
2026-02-14T10:01:42.168 [DEBUG] [Thread-183546] [transport.py] [_log()] kex follows: False
2026-02-14T10:01:42.168 [DEBUG] [Thread-183546] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:01:42.168 [DEBUG] [Thread-183546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:01:42.168 [DEBUG] [Thread-183546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:01:42.168 [DEBUG] [Thread-183546] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:01:42.168 [DEBUG] [Thread-183546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:01:42.168 [DEBUG] [Thread-183546] [transport.py] [_log()] Compression: none
2026-02-14T10:01:42.168 [DEBUG] [Thread-183546] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:01:42.183 [DEBUG] [Thread-183546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:01:42.183 [DEBUG] [Thread-183546] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:01:42.184 [DEBUG] [Thread-183546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:01:42.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:01:42.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:01:42.185 [DEBUG] [Thread-183546] [transport.py] [_log()] userauth is OK
2026-02-14T10:01:42.186 [DEBUG] [Thread-183546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:01:42.186 [DEBUG] [Thread-183546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:01:42.186 [DEBUG] [Thread-183546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:01:42.186 [DEBUG] [Thread-183546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:01:42.200 [INFO] [Thread-183546] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:01:42.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:01:42.943 [DEBUG] [Thread-183546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:01:42.943 [DEBUG] [Thread-183546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:01:42.944 [DEBUG] [Thread-183546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:01:42.985 [DEBUG] [Thread-183546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:01:42.985 [DEBUG] [Thread-183546] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:01:42.987 [DEBUG] [Thread-183546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:01:42.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:01:42.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:01:43.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:01:43.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:01:43.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:01:43.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:01:43.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:01:43.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:01:43.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:01:43.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.334141 -999.00  +11.20  28.19     66   +5.10 1 1 1 1 1   888    0 6.25 32.95 ----- 30.9 28.2 142.2 35.5 17.2 -24.4 16.2 -22.9 14.9 -23.9 15.8 -23.4
2026-02-14T10:01:43.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:01:43.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:01:43.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.334141
2026-02-14T10:01:43.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:01:43.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:01:43.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:01:43.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:01:43.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:01:43.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:01:14', tmtdew=7.36, humidity=60.19, cloud=0.0, wind=31.39, temperature=11.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:01:09.782', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:01:43.010 [DEBUG] [Thread-183546] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:01:43.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-14T10:01:43.109 [DEBUG] [Thread-183549] [transport.py] [_log()] starting thread (client mode): 0xa2d3f7c0
2026-02-14T10:01:43.109 [DEBUG] [Thread-183549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:01:43.124 [DEBUG] [Thread-183549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:01:43.124 [INFO] [Thread-183549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:01:43.131 [DEBUG] [Thread-183549] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:01:43.131 [DEBUG] [Thread-183549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:01:43.131 [DEBUG] [Thread-183549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:01:43.131 [DEBUG] [Thread-183549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:01:43.131 [DEBUG] [Thread-183549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:01:43.131 [DEBUG] [Thread-183549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:01:43.131 [DEBUG] [Thread-183549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:01:43.131 [DEBUG] [Thread-183549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:01:43.131 [DEBUG] [Thread-183549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:01:43.131 [DEBUG] [Thread-183549] [transport.py] [_log()] client lang: <none>
2026-02-14T10:01:43.131 [DEBUG] [Thread-183549] [transport.py] [_log()] server lang: <none>
2026-02-14T10:01:43.131 [DEBUG] [Thread-183549] [transport.py] [_log()] kex follows: False
2026-02-14T10:01:43.131 [DEBUG] [Thread-183549] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:01:43.131 [DEBUG] [Thread-183549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:01:43.131 [DEBUG] [Thread-183549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:01:43.131 [DEBUG] [Thread-183549] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:01:43.131 [DEBUG] [Thread-183549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:01:43.131 [DEBUG] [Thread-183549] [transport.py] [_log()] Compression: none
2026-02-14T10:01:43.131 [DEBUG] [Thread-183549] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:01:43.191 [DEBUG] [Thread-183549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:01:43.191 [DEBUG] [Thread-183549] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:01:43.192 [DEBUG] [Thread-183549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:01:43.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:01:43.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:01:43.247 [DEBUG] [Thread-183549] [transport.py] [_log()] userauth is OK
2026-02-14T10:01:43.248 [DEBUG] [Thread-183549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:01:43.248 [DEBUG] [Thread-183549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:01:43.248 [DEBUG] [Thread-183549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:01:43.248 [DEBUG] [Thread-183549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:01:43.266 [INFO] [Thread-183549] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:01:43.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-14T10:01:43.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:01:44.094 [DEBUG] [Thread-183549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:01:44.094 [DEBUG] [Thread-183549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:01:44.142 [DEBUG] [Thread-183549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:01:44.142 [DEBUG] [Thread-183549] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:01:44.151 [DEBUG] [Thread-183549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:01:44.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:01: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')
2026-02-14T10:01:44.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-14T10:01:44.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:01:44.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:01:44.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:01:44.188 [DEBUG] [Thread-183549] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:01:45.392 [DEBUG] [Thread-183551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:02:00.445 [DEBUG] [Thread-183552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:02:00.484 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:02:00.485 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:02:14.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:02:14.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:02:14.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-14T10:02:15.421 [DEBUG] [Thread-183553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:02:15.481 [DEBUG] [Thread-183554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:02:16.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 1, 50), 7.47, 59.95, 0.0, 33.59, 11.41, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:02:16.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:01:50
2026-02-14T10:02:16.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:02:16.814 [DEBUG] [Thread-183555] [transport.py] [_log()] starting thread (client mode): 0xa2d3ca90
2026-02-14T10:02:16.814 [DEBUG] [Thread-183555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:02:16.832 [DEBUG] [Thread-183555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:02:16.832 [INFO] [Thread-183555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:02:16.836 [DEBUG] [Thread-183555] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:02:16.836 [DEBUG] [Thread-183555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:02:16.836 [DEBUG] [Thread-183555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:02:16.836 [DEBUG] [Thread-183555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:02:16.836 [DEBUG] [Thread-183555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:02:16.836 [DEBUG] [Thread-183555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:02:16.836 [DEBUG] [Thread-183555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:02:16.836 [DEBUG] [Thread-183555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:02:16.836 [DEBUG] [Thread-183555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:02:16.836 [DEBUG] [Thread-183555] [transport.py] [_log()] client lang: <none>
2026-02-14T10:02:16.836 [DEBUG] [Thread-183555] [transport.py] [_log()] server lang: <none>
2026-02-14T10:02:16.836 [DEBUG] [Thread-183555] [transport.py] [_log()] kex follows: False
2026-02-14T10:02:16.836 [DEBUG] [Thread-183555] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:02:16.836 [DEBUG] [Thread-183555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:02:16.836 [DEBUG] [Thread-183555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:02:16.836 [DEBUG] [Thread-183555] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:02:16.836 [DEBUG] [Thread-183555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:02:16.836 [DEBUG] [Thread-183555] [transport.py] [_log()] Compression: none
2026-02-14T10:02:16.836 [DEBUG] [Thread-183555] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:02:16.853 [DEBUG] [Thread-183555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:02:16.853 [DEBUG] [Thread-183555] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:02:16.854 [DEBUG] [Thread-183555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:02:16.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:02:16.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:02:16.856 [DEBUG] [Thread-183555] [transport.py] [_log()] userauth is OK
2026-02-14T10:02:16.857 [DEBUG] [Thread-183555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:02:16.857 [DEBUG] [Thread-183555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:02:16.857 [DEBUG] [Thread-183555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:02:16.857 [DEBUG] [Thread-183555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:02:16.881 [INFO] [Thread-183555] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:02:16.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:02:17.476 [DEBUG] [Thread-183555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:02:17.477 [DEBUG] [Thread-183555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:02:17.477 [DEBUG] [Thread-183555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:02:17.518 [DEBUG] [Thread-183555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:02:17.519 [DEBUG] [Thread-183555] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:02:17.522 [DEBUG] [Thread-183555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:02:17.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:02:17.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:02:17.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:02:17.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:02:17.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:02:17.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:02:17.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:02:17.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:02:17.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:02:17.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.334489 -999.00  +11.10  14.27     66   +5.20 1 1 1 1 1   888    0 6.43 35.49 ----- 14.9 14.3 166.8 36.1 17.1 -25.5 16.1 -24.0 15.0 -22.9 15.7 -25.4
2026-02-14T10:02:17.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:02:17.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:02:17.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.334489
2026-02-14T10:02:17.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:02:17.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:02:17.548 [DEBUG] [Thread-183555] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:02:17.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:02:17.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:02:17.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:02:17.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:01:50', tmtdew=7.47, humidity=59.95, cloud=0.0, wind=33.59, temperature=11.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:01:39.850', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:02:17.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-14T10:02:17.642 [DEBUG] [Thread-183558] [transport.py] [_log()] starting thread (client mode): 0xa5741ea0
2026-02-14T10:02:17.642 [DEBUG] [Thread-183558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:02:17.657 [DEBUG] [Thread-183558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:02:17.657 [INFO] [Thread-183558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:02:17.674 [DEBUG] [Thread-183558] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:02:17.674 [DEBUG] [Thread-183558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:02:17.674 [DEBUG] [Thread-183558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:02:17.674 [DEBUG] [Thread-183558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:02:17.674 [DEBUG] [Thread-183558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:02:17.674 [DEBUG] [Thread-183558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:02:17.674 [DEBUG] [Thread-183558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:02:17.674 [DEBUG] [Thread-183558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:02:17.674 [DEBUG] [Thread-183558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:02:17.674 [DEBUG] [Thread-183558] [transport.py] [_log()] client lang: <none>
2026-02-14T10:02:17.674 [DEBUG] [Thread-183558] [transport.py] [_log()] server lang: <none>
2026-02-14T10:02:17.675 [DEBUG] [Thread-183558] [transport.py] [_log()] kex follows: False
2026-02-14T10:02:17.675 [DEBUG] [Thread-183558] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:02:17.675 [DEBUG] [Thread-183558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:02:17.675 [DEBUG] [Thread-183558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:02:17.675 [DEBUG] [Thread-183558] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:02:17.675 [DEBUG] [Thread-183558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:02:17.675 [DEBUG] [Thread-183558] [transport.py] [_log()] Compression: none
2026-02-14T10:02:17.675 [DEBUG] [Thread-183558] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:02:17.724 [DEBUG] [Thread-183558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:02:17.725 [DEBUG] [Thread-183558] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:02:17.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:02:17.726 [DEBUG] [Thread-183558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:02:17.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:02:17.784 [DEBUG] [Thread-183558] [transport.py] [_log()] userauth is OK
2026-02-14T10:02:17.785 [DEBUG] [Thread-183558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:02:17.785 [DEBUG] [Thread-183558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:02:17.785 [DEBUG] [Thread-183558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:02:17.785 [DEBUG] [Thread-183558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:02:17.810 [INFO] [Thread-183558] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:02: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-14T10:02:17.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:02:18.624 [DEBUG] [Thread-183558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:02:18.624 [DEBUG] [Thread-183558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:02:18.672 [DEBUG] [Thread-183558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:02:18.672 [DEBUG] [Thread-183558] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:02:18.682 [DEBUG] [Thread-183558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:02:18.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:02:18.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-14T10:02:18.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-14T10:02:18.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:02:18.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:02:18.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:02:18.720 [DEBUG] [Thread-183558] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:02:30.519 [DEBUG] [Thread-183560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:02:45.578 [DEBUG] [Thread-183561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:02:48.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:02:48.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:02:48.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-14T10:02:50.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 2, 25), 7.55, 59.62, 0.0, 33.37, 11.46, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:02:50.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:02:25
2026-02-14T10:02:51.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:02:51.269 [DEBUG] [Thread-183562] [transport.py] [_log()] starting thread (client mode): 0xa5741870
2026-02-14T10:02:51.269 [DEBUG] [Thread-183562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:02:51.284 [DEBUG] [Thread-183562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:02:51.284 [INFO] [Thread-183562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:02:51.287 [DEBUG] [Thread-183562] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:02:51.287 [DEBUG] [Thread-183562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:02:51.287 [DEBUG] [Thread-183562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:02:51.287 [DEBUG] [Thread-183562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:02:51.287 [DEBUG] [Thread-183562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:02:51.288 [DEBUG] [Thread-183562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:02:51.288 [DEBUG] [Thread-183562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:02:51.288 [DEBUG] [Thread-183562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:02:51.288 [DEBUG] [Thread-183562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:02:51.288 [DEBUG] [Thread-183562] [transport.py] [_log()] client lang: <none>
2026-02-14T10:02:51.288 [DEBUG] [Thread-183562] [transport.py] [_log()] server lang: <none>
2026-02-14T10:02:51.288 [DEBUG] [Thread-183562] [transport.py] [_log()] kex follows: False
2026-02-14T10:02:51.288 [DEBUG] [Thread-183562] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:02:51.288 [DEBUG] [Thread-183562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:02:51.288 [DEBUG] [Thread-183562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:02:51.288 [DEBUG] [Thread-183562] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:02:51.288 [DEBUG] [Thread-183562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:02:51.288 [DEBUG] [Thread-183562] [transport.py] [_log()] Compression: none
2026-02-14T10:02:51.288 [DEBUG] [Thread-183562] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:02:51.310 [DEBUG] [Thread-183562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:02:51.310 [DEBUG] [Thread-183562] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:02:51.311 [DEBUG] [Thread-183562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:02:51.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:02:51.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:02:51.314 [DEBUG] [Thread-183562] [transport.py] [_log()] userauth is OK
2026-02-14T10:02:51.314 [DEBUG] [Thread-183562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:02:51.314 [DEBUG] [Thread-183562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:02:51.314 [DEBUG] [Thread-183562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:02:51.314 [DEBUG] [Thread-183562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:02:51.332 [INFO] [Thread-183562] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:02:51.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:02:51.996 [DEBUG] [Thread-183562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:02:51.997 [DEBUG] [Thread-183562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:02:51.997 [DEBUG] [Thread-183562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:02:52.038 [DEBUG] [Thread-183562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:02:52.039 [DEBUG] [Thread-183562] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:02:52.043 [DEBUG] [Thread-183562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:02:52.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:02:52.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:02:52.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:02:52.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:02:52.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:02:52.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:02:52.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:02:52.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:02:52.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:02:52.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.334836 -999.00  +11.20  22.31     66   +5.10 1 1 1 1 1   888    0 6.50 38.20 ----- 15.9 22.3 167.6 31.5 17.2 -25.6 16.2 -23.8 15.0 -23.6 15.8 -25.2
2026-02-14T10:02:52.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:02:52.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:02:52.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.334836
2026-02-14T10:02:52.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:02:52.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:02:52.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:02:52.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:02:52.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:02:52.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:02:25', tmtdew=7.55, humidity=59.62, cloud=0.0, wind=33.37, temperature=11.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:02:09.830', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:02:52.077 [DEBUG] [Thread-183562] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:02:52.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-14T10:02:52.174 [DEBUG] [Thread-183565] [transport.py] [_log()] starting thread (client mode): 0xa5758790
2026-02-14T10:02:52.174 [DEBUG] [Thread-183565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:02:52.189 [DEBUG] [Thread-183565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:02:52.189 [INFO] [Thread-183565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:02:52.197 [DEBUG] [Thread-183565] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:02:52.197 [DEBUG] [Thread-183565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:02:52.197 [DEBUG] [Thread-183565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:02:52.197 [DEBUG] [Thread-183565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:02:52.197 [DEBUG] [Thread-183565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:02:52.197 [DEBUG] [Thread-183565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:02:52.197 [DEBUG] [Thread-183565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:02:52.197 [DEBUG] [Thread-183565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:02:52.197 [DEBUG] [Thread-183565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:02:52.197 [DEBUG] [Thread-183565] [transport.py] [_log()] client lang: <none>
2026-02-14T10:02:52.198 [DEBUG] [Thread-183565] [transport.py] [_log()] server lang: <none>
2026-02-14T10:02:52.198 [DEBUG] [Thread-183565] [transport.py] [_log()] kex follows: False
2026-02-14T10:02:52.198 [DEBUG] [Thread-183565] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:02:52.198 [DEBUG] [Thread-183565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:02:52.198 [DEBUG] [Thread-183565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:02:52.198 [DEBUG] [Thread-183565] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:02:52.198 [DEBUG] [Thread-183565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:02:52.198 [DEBUG] [Thread-183565] [transport.py] [_log()] Compression: none
2026-02-14T10:02:52.198 [DEBUG] [Thread-183565] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:02:52.258 [DEBUG] [Thread-183565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:02:52.258 [DEBUG] [Thread-183565] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:02:52.259 [DEBUG] [Thread-183565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:02:52.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:02:52.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:02:52.317 [DEBUG] [Thread-183565] [transport.py] [_log()] userauth is OK
2026-02-14T10:02:52.317 [DEBUG] [Thread-183565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:02:52.318 [DEBUG] [Thread-183565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:02:52.318 [DEBUG] [Thread-183565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:02:52.318 [DEBUG] [Thread-183565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:02:52.337 [INFO] [Thread-183565] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:02:52.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-14T10:02:52.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:02:53.178 [DEBUG] [Thread-183565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:02:53.187 [DEBUG] [Thread-183565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:02:53.227 [DEBUG] [Thread-183565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:02:53.227 [DEBUG] [Thread-183565] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:02:53.235 [DEBUG] [Thread-183565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:02:53.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:02:53.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-14T10:02:53.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:02:53.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:02:53.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:02:53.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:02:53.269 [DEBUG] [Thread-183565] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:03:00.618 [DEBUG] [Thread-183567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:03:00.631 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:03:00.632 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:03:15.454 [DEBUG] [Thread-183568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:03:15.673 [DEBUG] [Thread-183569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:03:23.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:03:23.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:03:23.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-14T10:03:25.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 2, 25), 7.45, 60.12, 0.0, 31.57, 11.36, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:03:25.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:02:25
2026-02-14T10:03:25.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:03:25.656 [DEBUG] [Thread-183570] [transport.py] [_log()] starting thread (client mode): 0xa2d3e440
2026-02-14T10:03:25.656 [DEBUG] [Thread-183570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:03:25.677 [DEBUG] [Thread-183570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:03:25.677 [INFO] [Thread-183570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:03:25.680 [DEBUG] [Thread-183570] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:03:25.680 [DEBUG] [Thread-183570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:03:25.680 [DEBUG] [Thread-183570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:03:25.680 [DEBUG] [Thread-183570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:03:25.680 [DEBUG] [Thread-183570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:03:25.680 [DEBUG] [Thread-183570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:03:25.680 [DEBUG] [Thread-183570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:03:25.680 [DEBUG] [Thread-183570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:03:25.680 [DEBUG] [Thread-183570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:03:25.680 [DEBUG] [Thread-183570] [transport.py] [_log()] client lang: <none>
2026-02-14T10:03:25.680 [DEBUG] [Thread-183570] [transport.py] [_log()] server lang: <none>
2026-02-14T10:03:25.680 [DEBUG] [Thread-183570] [transport.py] [_log()] kex follows: False
2026-02-14T10:03:25.680 [DEBUG] [Thread-183570] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:03:25.680 [DEBUG] [Thread-183570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:03:25.680 [DEBUG] [Thread-183570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:03:25.680 [DEBUG] [Thread-183570] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:03:25.680 [DEBUG] [Thread-183570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:03:25.680 [DEBUG] [Thread-183570] [transport.py] [_log()] Compression: none
2026-02-14T10:03:25.681 [DEBUG] [Thread-183570] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:03:25.697 [DEBUG] [Thread-183570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:03:25.698 [DEBUG] [Thread-183570] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:03:25.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:03:25.699 [DEBUG] [Thread-183570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:03:25.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:03:25.701 [DEBUG] [Thread-183570] [transport.py] [_log()] userauth is OK
2026-02-14T10:03:25.701 [DEBUG] [Thread-183570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:03:25.701 [DEBUG] [Thread-183570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:03:25.701 [DEBUG] [Thread-183570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:03:25.702 [DEBUG] [Thread-183570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:03:25.738 [INFO] [Thread-183570] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:03:25.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:03:26.392 [DEBUG] [Thread-183570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:03:26.392 [DEBUG] [Thread-183570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:03:26.393 [DEBUG] [Thread-183570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:03:26.433 [DEBUG] [Thread-183570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:03:26.434 [DEBUG] [Thread-183570] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:03:26.437 [DEBUG] [Thread-183570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:03:26.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:03:26.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:03:26.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:03:26.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:03:26.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:03:26.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:03:26.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:03:26.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:03:26.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:03:26.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.335183 -999.00  +11.20  19.68     67   +5.40 1 2 1 1 1   888    0 6.70 40.73 ----- 19.1 19.7 176.8 33.4 17.3 -25.5 16.2 -23.2 15.1 -22.1 15.8 -24.9
2026-02-14T10:03:26.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:03:26.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:03:26.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.335183
2026-02-14T10:03:26.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:03:26.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:03:26.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:03:26.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:03:26.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:03:26.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:02:25', tmtdew=7.45, humidity=60.12, cloud=0.0, wind=31.57, temperature=11.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:02:39.811', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:03:26.465 [DEBUG] [Thread-183570] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:03:26.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-14T10:03:26.561 [DEBUG] [Thread-183573] [transport.py] [_log()] starting thread (client mode): 0xa2d7b730
2026-02-14T10:03:26.561 [DEBUG] [Thread-183573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:03:26.575 [DEBUG] [Thread-183573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:03:26.576 [INFO] [Thread-183573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:03:26.584 [DEBUG] [Thread-183573] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:03:26.584 [DEBUG] [Thread-183573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:03:26.584 [DEBUG] [Thread-183573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:03:26.584 [DEBUG] [Thread-183573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:03:26.585 [DEBUG] [Thread-183573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:03:26.585 [DEBUG] [Thread-183573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:03:26.585 [DEBUG] [Thread-183573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:03:26.585 [DEBUG] [Thread-183573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:03:26.585 [DEBUG] [Thread-183573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:03:26.585 [DEBUG] [Thread-183573] [transport.py] [_log()] client lang: <none>
2026-02-14T10:03:26.585 [DEBUG] [Thread-183573] [transport.py] [_log()] server lang: <none>
2026-02-14T10:03:26.585 [DEBUG] [Thread-183573] [transport.py] [_log()] kex follows: False
2026-02-14T10:03:26.585 [DEBUG] [Thread-183573] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:03:26.586 [DEBUG] [Thread-183573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:03:26.586 [DEBUG] [Thread-183573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:03:26.586 [DEBUG] [Thread-183573] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:03:26.586 [DEBUG] [Thread-183573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:03:26.586 [DEBUG] [Thread-183573] [transport.py] [_log()] Compression: none
2026-02-14T10:03:26.586 [DEBUG] [Thread-183573] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:03:26.643 [DEBUG] [Thread-183573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:03:26.644 [DEBUG] [Thread-183573] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:03:26.644 [DEBUG] [Thread-183573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:03:26.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:03:26.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:03:26.702 [DEBUG] [Thread-183573] [transport.py] [_log()] userauth is OK
2026-02-14T10:03:26.703 [DEBUG] [Thread-183573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:03:26.703 [DEBUG] [Thread-183573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:03:26.703 [DEBUG] [Thread-183573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:03:26.703 [DEBUG] [Thread-183573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:03:26.727 [INFO] [Thread-183573] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:03:26.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-14T10:03:26.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:03:27.594 [DEBUG] [Thread-183573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:03:27.594 [DEBUG] [Thread-183573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:03:27.642 [DEBUG] [Thread-183573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:03:27.643 [DEBUG] [Thread-183573] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:03:27.652 [DEBUG] [Thread-183573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:03:27.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:03:27.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-14T10:03:27.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:03:27.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:03:27.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:03:27.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:03:27.689 [DEBUG] [Thread-183573] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:03:30.712 [DEBUG] [Thread-183575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:03:45.767 [DEBUG] [Thread-183576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:03:57.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:03:57.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:03:57.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-14T10:03:59.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 3, 36), 8.37, 56.41, 0.0, 26.0, 11.75, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:03:59.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:03:36
2026-02-14T10:04:00.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:04:00.364 [DEBUG] [Thread-183577] [transport.py] [_log()] starting thread (client mode): 0xa2d544f0
2026-02-14T10:04:00.364 [DEBUG] [Thread-183577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:04:00.384 [DEBUG] [Thread-183577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:04:00.384 [INFO] [Thread-183577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:04:00.387 [DEBUG] [Thread-183577] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:04:00.387 [DEBUG] [Thread-183577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:04:00.387 [DEBUG] [Thread-183577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:04:00.387 [DEBUG] [Thread-183577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:04:00.387 [DEBUG] [Thread-183577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:04:00.387 [DEBUG] [Thread-183577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:04:00.387 [DEBUG] [Thread-183577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:04:00.387 [DEBUG] [Thread-183577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:04:00.387 [DEBUG] [Thread-183577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:04:00.387 [DEBUG] [Thread-183577] [transport.py] [_log()] client lang: <none>
2026-02-14T10:04:00.387 [DEBUG] [Thread-183577] [transport.py] [_log()] server lang: <none>
2026-02-14T10:04:00.387 [DEBUG] [Thread-183577] [transport.py] [_log()] kex follows: False
2026-02-14T10:04:00.387 [DEBUG] [Thread-183577] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:04:00.387 [DEBUG] [Thread-183577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:04:00.387 [DEBUG] [Thread-183577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:04:00.388 [DEBUG] [Thread-183577] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:04:00.388 [DEBUG] [Thread-183577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:04:00.388 [DEBUG] [Thread-183577] [transport.py] [_log()] Compression: none
2026-02-14T10:04:00.388 [DEBUG] [Thread-183577] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:04:00.407 [DEBUG] [Thread-183577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:04:00.408 [DEBUG] [Thread-183577] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:04:00.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:04:00.410 [DEBUG] [Thread-183577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:04:00.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:04:00.412 [DEBUG] [Thread-183577] [transport.py] [_log()] userauth is OK
2026-02-14T10:04:00.412 [DEBUG] [Thread-183577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:04:00.412 [DEBUG] [Thread-183577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:04:00.413 [DEBUG] [Thread-183577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:04:00.413 [DEBUG] [Thread-183577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:04:00.436 [INFO] [Thread-183577] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:04:00.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:04:00.775 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:04:00.776 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:04:00.806 [DEBUG] [Thread-183579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:04:01.042 [DEBUG] [Thread-183577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:04:01.043 [DEBUG] [Thread-183577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:04:01.043 [DEBUG] [Thread-183577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:04:01.083 [DEBUG] [Thread-183577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:04:01.084 [DEBUG] [Thread-183577] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:04:01.086 [DEBUG] [Thread-183577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:04:01.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:04:01.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:04:01.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:04:01.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:04:01.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:04:01.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:04:01.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:04:01.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:04:01.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:04:01.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.335530 -999.00  +11.70  13.74     66   +5.80 1 1 1 1 1   888    0 6.67 40.05 ----- 13.9 13.7 186.4 24.0 17.5 -23.6 16.2 -24.4 15.3 -22.7 16.1 -23.4
2026-02-14T10:04:01.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:04:01.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:04:01.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.335530
2026-02-14T10:04:01.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:04:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:04:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:04:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:04:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:04:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:03:36', tmtdew=8.37, humidity=56.41, cloud=0.0, wind=26.0, temperature=11.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:03:09.792', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:04:01.112 [DEBUG] [Thread-183577] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:04:01.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T10:04:01.222 [DEBUG] [Thread-183581] [transport.py] [_log()] starting thread (client mode): 0xa2d54b80
2026-02-14T10:04:01.222 [DEBUG] [Thread-183581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:04:01.237 [DEBUG] [Thread-183581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:04:01.237 [INFO] [Thread-183581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:04:01.246 [DEBUG] [Thread-183581] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:04:01.246 [DEBUG] [Thread-183581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:04:01.246 [DEBUG] [Thread-183581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:04:01.246 [DEBUG] [Thread-183581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:04:01.246 [DEBUG] [Thread-183581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:04:01.247 [DEBUG] [Thread-183581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:04:01.247 [DEBUG] [Thread-183581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:04:01.247 [DEBUG] [Thread-183581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:04:01.247 [DEBUG] [Thread-183581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:04:01.247 [DEBUG] [Thread-183581] [transport.py] [_log()] client lang: <none>
2026-02-14T10:04:01.247 [DEBUG] [Thread-183581] [transport.py] [_log()] server lang: <none>
2026-02-14T10:04:01.247 [DEBUG] [Thread-183581] [transport.py] [_log()] kex follows: False
2026-02-14T10:04:01.247 [DEBUG] [Thread-183581] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:04:01.247 [DEBUG] [Thread-183581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:04:01.248 [DEBUG] [Thread-183581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:04:01.248 [DEBUG] [Thread-183581] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:04:01.248 [DEBUG] [Thread-183581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:04:01.248 [DEBUG] [Thread-183581] [transport.py] [_log()] Compression: none
2026-02-14T10:04:01.248 [DEBUG] [Thread-183581] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:04:01.307 [DEBUG] [Thread-183581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:04:01.308 [DEBUG] [Thread-183581] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:04:01.309 [DEBUG] [Thread-183581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:04:01.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:04:01.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:04:01.363 [DEBUG] [Thread-183581] [transport.py] [_log()] userauth is OK
2026-02-14T10:04:01.364 [DEBUG] [Thread-183581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:04:01.364 [DEBUG] [Thread-183581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:04:01.364 [DEBUG] [Thread-183581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:04:01.364 [DEBUG] [Thread-183581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:04:01.386 [INFO] [Thread-183581] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:04: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-14T10:04:01.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:04:02.281 [DEBUG] [Thread-183581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:04:02.281 [DEBUG] [Thread-183581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:04:02.333 [DEBUG] [Thread-183581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:04:02.333 [DEBUG] [Thread-183581] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:04:02.348 [DEBUG] [Thread-183581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:04:02.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:04:02.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-14T10:04:02.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-14T10:04:02.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:04:02.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:04:02.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:04:02.394 [DEBUG] [Thread-183581] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:04:15.500 [DEBUG] [Thread-183583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:04:15.845 [DEBUG] [Thread-183584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:04:30.907 [DEBUG] [Thread-183585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:04:32.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:04:32.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:04:32.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-14T10:04:34.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 4, 12), 7.08, 61.89, 0.0, 27.61, 11.06, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:04:34.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:04:12
2026-02-14T10:04:34.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:04:34.948 [DEBUG] [Thread-183586] [transport.py] [_log()] starting thread (client mode): 0xa5759540
2026-02-14T10:04:34.948 [DEBUG] [Thread-183586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:04:34.970 [DEBUG] [Thread-183586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:04:34.970 [INFO] [Thread-183586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:04:34.973 [DEBUG] [Thread-183586] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:04:34.973 [DEBUG] [Thread-183586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:04:34.974 [DEBUG] [Thread-183586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:04:34.974 [DEBUG] [Thread-183586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:04:34.974 [DEBUG] [Thread-183586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:04:34.974 [DEBUG] [Thread-183586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:04:34.974 [DEBUG] [Thread-183586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:04:34.974 [DEBUG] [Thread-183586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:04:34.974 [DEBUG] [Thread-183586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:04:34.974 [DEBUG] [Thread-183586] [transport.py] [_log()] client lang: <none>
2026-02-14T10:04:34.974 [DEBUG] [Thread-183586] [transport.py] [_log()] server lang: <none>
2026-02-14T10:04:34.974 [DEBUG] [Thread-183586] [transport.py] [_log()] kex follows: False
2026-02-14T10:04:34.974 [DEBUG] [Thread-183586] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:04:34.975 [DEBUG] [Thread-183586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:04:34.975 [DEBUG] [Thread-183586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:04:34.975 [DEBUG] [Thread-183586] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:04:34.975 [DEBUG] [Thread-183586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:04:34.975 [DEBUG] [Thread-183586] [transport.py] [_log()] Compression: none
2026-02-14T10:04:34.975 [DEBUG] [Thread-183586] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:04:34.994 [DEBUG] [Thread-183586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:04:34.994 [DEBUG] [Thread-183586] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:04:34.995 [DEBUG] [Thread-183586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:04:34.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:04:34.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:04:34.998 [DEBUG] [Thread-183586] [transport.py] [_log()] userauth is OK
2026-02-14T10:04:34.998 [DEBUG] [Thread-183586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:04:34.998 [DEBUG] [Thread-183586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:04:34.999 [DEBUG] [Thread-183586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:04:34.999 [DEBUG] [Thread-183586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:04:35.013 [INFO] [Thread-183586] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:04:35.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:04:35.732 [DEBUG] [Thread-183586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:04:35.733 [DEBUG] [Thread-183586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:04:35.733 [DEBUG] [Thread-183586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:04:35.773 [DEBUG] [Thread-183586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:04:35.774 [DEBUG] [Thread-183586] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:04:35.776 [DEBUG] [Thread-183586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:04:35.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:04:35.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:04:35.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:04:35.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:04:35.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:04:35.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:04:35.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:04:35.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:04:35.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:04:35.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.335877 -999.00  +11.90  15.54     65   +5.70 1 2 1 1 1   888    0 6.83 46.61 ----- 22.9 15.5 172.8 29.8 17.7 -23.8 16.5 -23.0 15.4 -21.9 16.2 -23.2
2026-02-14T10:04:35.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:04:35.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:04:35.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.335877
2026-02-14T10:04:35.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:04:35.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:04:35.799 [DEBUG] [Thread-183586] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:04:35.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:04:35.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:04:35.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:04:35.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:04:12', tmtdew=7.08, humidity=61.89, cloud=0.0, wind=27.61, temperature=11.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:03:39.773', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:04:35.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-14T10:04:35.893 [DEBUG] [Thread-183589] [transport.py] [_log()] starting thread (client mode): 0xa5758fd0
2026-02-14T10:04:35.893 [DEBUG] [Thread-183589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:04:35.907 [DEBUG] [Thread-183589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:04:35.907 [INFO] [Thread-183589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:04:35.915 [DEBUG] [Thread-183589] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:04:35.915 [DEBUG] [Thread-183589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:04:35.915 [DEBUG] [Thread-183589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:04:35.915 [DEBUG] [Thread-183589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:04:35.915 [DEBUG] [Thread-183589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:04:35.915 [DEBUG] [Thread-183589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:04:35.915 [DEBUG] [Thread-183589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:04:35.915 [DEBUG] [Thread-183589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:04:35.915 [DEBUG] [Thread-183589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:04:35.915 [DEBUG] [Thread-183589] [transport.py] [_log()] client lang: <none>
2026-02-14T10:04:35.915 [DEBUG] [Thread-183589] [transport.py] [_log()] server lang: <none>
2026-02-14T10:04:35.915 [DEBUG] [Thread-183589] [transport.py] [_log()] kex follows: False
2026-02-14T10:04:35.915 [DEBUG] [Thread-183589] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:04:35.915 [DEBUG] [Thread-183589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:04:35.915 [DEBUG] [Thread-183589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:04:35.916 [DEBUG] [Thread-183589] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:04:35.916 [DEBUG] [Thread-183589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:04:35.916 [DEBUG] [Thread-183589] [transport.py] [_log()] Compression: none
2026-02-14T10:04:35.916 [DEBUG] [Thread-183589] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:04:35.972 [DEBUG] [Thread-183589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:04:35.972 [DEBUG] [Thread-183589] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:04:35.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:04:35.974 [DEBUG] [Thread-183589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:04:35.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:04:36.028 [DEBUG] [Thread-183589] [transport.py] [_log()] userauth is OK
2026-02-14T10:04:36.028 [DEBUG] [Thread-183589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:04:36.029 [DEBUG] [Thread-183589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:04:36.029 [DEBUG] [Thread-183589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:04:36.029 [DEBUG] [Thread-183589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:04:36.047 [INFO] [Thread-183589] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:04:36.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-14T10:04:36.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:04:36.906 [DEBUG] [Thread-183589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:04:36.906 [DEBUG] [Thread-183589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:04:36.955 [DEBUG] [Thread-183589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:04:36.955 [DEBUG] [Thread-183589] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:04:36.964 [DEBUG] [Thread-183589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:04:36.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:04:36.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-14T10:04:36.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:04:36.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:04:36.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:04:36.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:04:37.002 [DEBUG] [Thread-183589] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:04:45.938 [DEBUG] [Thread-183591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:05:00.916 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:05:00.918 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:05:00.991 [DEBUG] [Thread-183592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:05:07.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:05:07.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:05:07.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:05:08.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 4, 47), 7.62, 59.55, 0.0, 34.7, 11.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:05:08.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:04:47
2026-02-14T10:05:09.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:05:09.410 [DEBUG] [Thread-183593] [transport.py] [_log()] starting thread (client mode): 0xa2d54e80
2026-02-14T10:05:09.410 [DEBUG] [Thread-183593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:05:09.431 [DEBUG] [Thread-183593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:05:09.431 [INFO] [Thread-183593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:05:09.434 [DEBUG] [Thread-183593] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:05:09.434 [DEBUG] [Thread-183593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:05:09.434 [DEBUG] [Thread-183593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:05:09.434 [DEBUG] [Thread-183593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:05:09.434 [DEBUG] [Thread-183593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:05:09.434 [DEBUG] [Thread-183593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:05:09.435 [DEBUG] [Thread-183593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:05:09.435 [DEBUG] [Thread-183593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:05:09.435 [DEBUG] [Thread-183593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:05:09.435 [DEBUG] [Thread-183593] [transport.py] [_log()] client lang: <none>
2026-02-14T10:05:09.435 [DEBUG] [Thread-183593] [transport.py] [_log()] server lang: <none>
2026-02-14T10:05:09.435 [DEBUG] [Thread-183593] [transport.py] [_log()] kex follows: False
2026-02-14T10:05:09.435 [DEBUG] [Thread-183593] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:05:09.435 [DEBUG] [Thread-183593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:05:09.435 [DEBUG] [Thread-183593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:05:09.435 [DEBUG] [Thread-183593] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:05:09.435 [DEBUG] [Thread-183593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:05:09.435 [DEBUG] [Thread-183593] [transport.py] [_log()] Compression: none
2026-02-14T10:05:09.436 [DEBUG] [Thread-183593] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:05:09.455 [DEBUG] [Thread-183593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:05:09.455 [DEBUG] [Thread-183593] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:05:09.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:05:09.456 [DEBUG] [Thread-183593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:05:09.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:05:09.458 [DEBUG] [Thread-183593] [transport.py] [_log()] userauth is OK
2026-02-14T10:05:09.459 [DEBUG] [Thread-183593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:05:09.459 [DEBUG] [Thread-183593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:05:09.459 [DEBUG] [Thread-183593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:05:09.459 [DEBUG] [Thread-183593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:05:09.485 [INFO] [Thread-183593] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:05:09.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:05:10.417 [DEBUG] [Thread-183593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:05:10.417 [DEBUG] [Thread-183593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:05:10.418 [DEBUG] [Thread-183593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:05:10.459 [DEBUG] [Thread-183593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:05:10.459 [DEBUG] [Thread-183593] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:05:10.462 [DEBUG] [Thread-183593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:05:10.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:05:10.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:05:10.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:05:10.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:05:10.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:05:10.492 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:05:10.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:05:10.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:05:10.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:05:10.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.336225 -999.00  +12.00  19.47     63   +5.30 1 1 1 1 1   888    0 7.00 48.94 ----- 15.2 19.5 167.4 30.1 17.8 -24.7 16.5 -26.0 15.4 -22.6 16.3 -24.2
2026-02-14T10:05:10.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:05:10.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:05:10.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.336225
2026-02-14T10:05:10.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:05:10.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:05:10.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:05:10.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:05:10.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:05:10.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:04:47', tmtdew=7.62, humidity=59.55, cloud=0.0, wind=34.7, temperature=11.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:04:09.840', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:05:10.495 [DEBUG] [Thread-183593] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:05:10.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-14T10:05:10.592 [DEBUG] [Thread-183596] [transport.py] [_log()] starting thread (client mode): 0xa2d56080
2026-02-14T10:05:10.592 [DEBUG] [Thread-183596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:05:10.607 [DEBUG] [Thread-183596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:05:10.607 [INFO] [Thread-183596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:05:10.615 [DEBUG] [Thread-183596] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:05:10.615 [DEBUG] [Thread-183596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:05:10.615 [DEBUG] [Thread-183596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:05:10.615 [DEBUG] [Thread-183596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:05:10.615 [DEBUG] [Thread-183596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:05:10.615 [DEBUG] [Thread-183596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:05:10.615 [DEBUG] [Thread-183596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:05:10.615 [DEBUG] [Thread-183596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:05:10.615 [DEBUG] [Thread-183596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:05:10.615 [DEBUG] [Thread-183596] [transport.py] [_log()] client lang: <none>
2026-02-14T10:05:10.615 [DEBUG] [Thread-183596] [transport.py] [_log()] server lang: <none>
2026-02-14T10:05:10.615 [DEBUG] [Thread-183596] [transport.py] [_log()] kex follows: False
2026-02-14T10:05:10.615 [DEBUG] [Thread-183596] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:05:10.615 [DEBUG] [Thread-183596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:05:10.615 [DEBUG] [Thread-183596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:05:10.616 [DEBUG] [Thread-183596] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:05:10.616 [DEBUG] [Thread-183596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:05:10.616 [DEBUG] [Thread-183596] [transport.py] [_log()] Compression: none
2026-02-14T10:05:10.616 [DEBUG] [Thread-183596] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:05:10.673 [DEBUG] [Thread-183596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:05:10.673 [DEBUG] [Thread-183596] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:05:10.674 [DEBUG] [Thread-183596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:05:10.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:05:10.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:05:10.732 [DEBUG] [Thread-183596] [transport.py] [_log()] userauth is OK
2026-02-14T10:05:10.733 [DEBUG] [Thread-183596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:05:10.733 [DEBUG] [Thread-183596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:05:10.733 [DEBUG] [Thread-183596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:05:10.733 [DEBUG] [Thread-183596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:05:10.750 [INFO] [Thread-183596] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:05:10.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-14T10:05:10.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:05:11.573 [DEBUG] [Thread-183596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:05:11.573 [DEBUG] [Thread-183596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:05:11.626 [DEBUG] [Thread-183596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:05:11.626 [DEBUG] [Thread-183596] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:05:11.637 [DEBUG] [Thread-183596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:05:11.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:05:11.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:05:11.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-14T10:05:11.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:05:11.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:05:11.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:05:11.678 [DEBUG] [Thread-183596] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:05:15.532 [DEBUG] [Thread-183598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:05:16.034 [DEBUG] [Thread-183599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:05:31.084 [DEBUG] [Thread-183600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:05:41.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:05:41.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:05:41.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-14T10:05:43.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 5, 22), 7.64, 59.47, 0.0, 32.32, 11.66, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:05:43.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:05:22
2026-02-14T10:05:43.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:05:44.049 [DEBUG] [Thread-183601] [transport.py] [_log()] starting thread (client mode): 0xa2d579d0
2026-02-14T10:05:44.049 [DEBUG] [Thread-183601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:05:44.069 [DEBUG] [Thread-183601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:05:44.069 [INFO] [Thread-183601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:05:44.072 [DEBUG] [Thread-183601] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:05:44.072 [DEBUG] [Thread-183601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:05:44.072 [DEBUG] [Thread-183601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:05:44.073 [DEBUG] [Thread-183601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:05:44.073 [DEBUG] [Thread-183601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:05:44.073 [DEBUG] [Thread-183601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:05:44.073 [DEBUG] [Thread-183601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:05:44.073 [DEBUG] [Thread-183601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:05:44.073 [DEBUG] [Thread-183601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:05:44.073 [DEBUG] [Thread-183601] [transport.py] [_log()] client lang: <none>
2026-02-14T10:05:44.073 [DEBUG] [Thread-183601] [transport.py] [_log()] server lang: <none>
2026-02-14T10:05:44.073 [DEBUG] [Thread-183601] [transport.py] [_log()] kex follows: False
2026-02-14T10:05:44.073 [DEBUG] [Thread-183601] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:05:44.073 [DEBUG] [Thread-183601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:05:44.073 [DEBUG] [Thread-183601] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:05:44.073 [DEBUG] [Thread-183601] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:05:44.073 [DEBUG] [Thread-183601] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:05:44.073 [DEBUG] [Thread-183601] [transport.py] [_log()] Compression: none
2026-02-14T10:05:44.073 [DEBUG] [Thread-183601] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:05:44.090 [DEBUG] [Thread-183601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:05:44.090 [DEBUG] [Thread-183601] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:05:44.091 [DEBUG] [Thread-183601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:05:44.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:05:44.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:05:44.093 [DEBUG] [Thread-183601] [transport.py] [_log()] userauth is OK
2026-02-14T10:05:44.093 [DEBUG] [Thread-183601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:05:44.094 [DEBUG] [Thread-183601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:05:44.094 [DEBUG] [Thread-183601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:05:44.094 [DEBUG] [Thread-183601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:05:44.118 [INFO] [Thread-183601] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:05:44.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:05:44.751 [DEBUG] [Thread-183601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:05:44.751 [DEBUG] [Thread-183601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:05:44.751 [DEBUG] [Thread-183601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:05:44.791 [DEBUG] [Thread-183601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:05:44.792 [DEBUG] [Thread-183601] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:05:44.795 [DEBUG] [Thread-183601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:05:44.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:05:44.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:05:44.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:05:44.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:05:44.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:05:44.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:05:44.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:05:44.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:05:44.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:05:44.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.336919 -999.00  +11.40  29.20     64   +4.90 1 1 1 1 1   888    0 7.45 61.23 ----- 28.0 29.2 167.2 38.5 17.7 -26.4 16.3 -27.2 15.4 -24.4 16.3 -25.6
2026-02-14T10:05:44.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:05:44.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:05:44.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.336919
2026-02-14T10:05:44.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:05:44.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:05:44.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:05:44.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:05:44.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:05:44.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:05:22', tmtdew=7.64, humidity=59.47, cloud=0.0, wind=32.32, temperature=11.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:05:09.802', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:05:44.822 [DEBUG] [Thread-183601] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:05:44.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T10:05:44.918 [DEBUG] [Thread-183604] [transport.py] [_log()] starting thread (client mode): 0xa2d57670
2026-02-14T10:05:44.918 [DEBUG] [Thread-183604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:05:44.932 [DEBUG] [Thread-183604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:05:44.932 [INFO] [Thread-183604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:05:44.939 [DEBUG] [Thread-183604] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:05:44.940 [DEBUG] [Thread-183604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:05:44.940 [DEBUG] [Thread-183604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:05:44.940 [DEBUG] [Thread-183604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:05:44.940 [DEBUG] [Thread-183604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:05:44.940 [DEBUG] [Thread-183604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:05:44.940 [DEBUG] [Thread-183604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:05:44.940 [DEBUG] [Thread-183604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:05:44.941 [DEBUG] [Thread-183604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:05:44.941 [DEBUG] [Thread-183604] [transport.py] [_log()] client lang: <none>
2026-02-14T10:05:44.941 [DEBUG] [Thread-183604] [transport.py] [_log()] server lang: <none>
2026-02-14T10:05:44.941 [DEBUG] [Thread-183604] [transport.py] [_log()] kex follows: False
2026-02-14T10:05:44.941 [DEBUG] [Thread-183604] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:05:44.941 [DEBUG] [Thread-183604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:05:44.941 [DEBUG] [Thread-183604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:05:44.941 [DEBUG] [Thread-183604] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:05:44.942 [DEBUG] [Thread-183604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:05:44.942 [DEBUG] [Thread-183604] [transport.py] [_log()] Compression: none
2026-02-14T10:05:44.942 [DEBUG] [Thread-183604] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:05:44.998 [DEBUG] [Thread-183604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:05:44.999 [DEBUG] [Thread-183604] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:05:44.999 [DEBUG] [Thread-183604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:05:44.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:05:45.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:05:45.054 [DEBUG] [Thread-183604] [transport.py] [_log()] userauth is OK
2026-02-14T10:05:45.054 [DEBUG] [Thread-183604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:05:45.054 [DEBUG] [Thread-183604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:05:45.054 [DEBUG] [Thread-183604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:05:45.055 [DEBUG] [Thread-183604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:05:45.073 [INFO] [Thread-183604] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:05:45.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-14T10:05:45.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:05:45.885 [DEBUG] [Thread-183604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:05:45.885 [DEBUG] [Thread-183604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:05:45.933 [DEBUG] [Thread-183604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:05:45.933 [DEBUG] [Thread-183604] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:05:45.942 [DEBUG] [Thread-183604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:05:45.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:05:45.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-14T10:05:45.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:05:45.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:05:45.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:05:45.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:05:45.977 [DEBUG] [Thread-183604] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:05:46.122 [DEBUG] [Thread-183606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:06:01.058 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:06:01.059 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:06:01.175 [DEBUG] [Thread-183607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:06:15.579 [DEBUG] [Thread-183608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:06:15.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:06:15.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:06:15.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-14T10:06:16.213 [DEBUG] [Thread-183609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:06:18.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 5, 58), 7.56, 60.02, 0.0, 39.38, 11.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:06:18.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:05:58
2026-02-14T10:06:18.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:06:18.893 [DEBUG] [Thread-183610] [transport.py] [_log()] starting thread (client mode): 0xa2d7b730
2026-02-14T10:06:18.893 [DEBUG] [Thread-183610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:06:18.915 [DEBUG] [Thread-183610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:06:18.915 [INFO] [Thread-183610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:06:18.918 [DEBUG] [Thread-183610] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:06:18.918 [DEBUG] [Thread-183610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:06:18.918 [DEBUG] [Thread-183610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:06:18.918 [DEBUG] [Thread-183610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:06:18.919 [DEBUG] [Thread-183610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:06:18.919 [DEBUG] [Thread-183610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:06:18.919 [DEBUG] [Thread-183610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:06:18.919 [DEBUG] [Thread-183610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:06:18.919 [DEBUG] [Thread-183610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:06:18.919 [DEBUG] [Thread-183610] [transport.py] [_log()] client lang: <none>
2026-02-14T10:06:18.919 [DEBUG] [Thread-183610] [transport.py] [_log()] server lang: <none>
2026-02-14T10:06:18.919 [DEBUG] [Thread-183610] [transport.py] [_log()] kex follows: False
2026-02-14T10:06:18.919 [DEBUG] [Thread-183610] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:06:18.920 [DEBUG] [Thread-183610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:06:18.920 [DEBUG] [Thread-183610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:06:18.920 [DEBUG] [Thread-183610] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:06:18.920 [DEBUG] [Thread-183610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:06:18.920 [DEBUG] [Thread-183610] [transport.py] [_log()] Compression: none
2026-02-14T10:06:18.920 [DEBUG] [Thread-183610] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:06:18.939 [DEBUG] [Thread-183610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:06:18.940 [DEBUG] [Thread-183610] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:06:18.940 [DEBUG] [Thread-183610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:06:18.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:06:18.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:06:18.951 [DEBUG] [Thread-183610] [transport.py] [_log()] userauth is OK
2026-02-14T10:06:18.951 [DEBUG] [Thread-183610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:06:18.951 [DEBUG] [Thread-183610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:06:18.951 [DEBUG] [Thread-183610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:06:18.952 [DEBUG] [Thread-183610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:06:18.978 [INFO] [Thread-183610] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:06:18.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:06:19.612 [DEBUG] [Thread-183610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:06:19.612 [DEBUG] [Thread-183610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:06:19.613 [DEBUG] [Thread-183610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:06:19.653 [DEBUG] [Thread-183610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:06:19.654 [DEBUG] [Thread-183610] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:06:19.657 [DEBUG] [Thread-183610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:06:19.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:06:19.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:06:19.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:06:19.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:06:19.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:06:19.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:06:19.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:06:19.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:06:19.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:06:19.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.337266 -999.00  +11.20  39.41     65   +5.00 1 1 2 1 1   888    0 7.38 61.01 ----- 39.4 39.4 168.2 44.1 17.7 -27.2 16.5 -25.6 15.3 -25.3 16.3 -26.1
2026-02-14T10:06:19.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:06:19.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:06:19.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.337266
2026-02-14T10:06:19.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:06:19.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:06:19.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:06:19.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:06:19.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:06:19.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:05:58', tmtdew=7.56, humidity=60.02, cloud=0.0, wind=39.38, temperature=11.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:05:39.782', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:06:19.685 [DEBUG] [Thread-183610] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:06:19.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-14T10:06:19.779 [DEBUG] [Thread-183613] [transport.py] [_log()] starting thread (client mode): 0xa2d78550
2026-02-14T10:06:19.780 [DEBUG] [Thread-183613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:06:19.794 [DEBUG] [Thread-183613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:06:19.794 [INFO] [Thread-183613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:06:19.807 [DEBUG] [Thread-183613] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:06:19.807 [DEBUG] [Thread-183613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:06:19.807 [DEBUG] [Thread-183613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:06:19.807 [DEBUG] [Thread-183613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:06:19.807 [DEBUG] [Thread-183613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:06:19.808 [DEBUG] [Thread-183613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:06:19.808 [DEBUG] [Thread-183613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:06:19.808 [DEBUG] [Thread-183613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:06:19.808 [DEBUG] [Thread-183613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:06:19.808 [DEBUG] [Thread-183613] [transport.py] [_log()] client lang: <none>
2026-02-14T10:06:19.808 [DEBUG] [Thread-183613] [transport.py] [_log()] server lang: <none>
2026-02-14T10:06:19.808 [DEBUG] [Thread-183613] [transport.py] [_log()] kex follows: False
2026-02-14T10:06:19.808 [DEBUG] [Thread-183613] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:06:19.808 [DEBUG] [Thread-183613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:06:19.809 [DEBUG] [Thread-183613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:06:19.809 [DEBUG] [Thread-183613] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:06:19.809 [DEBUG] [Thread-183613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:06:19.809 [DEBUG] [Thread-183613] [transport.py] [_log()] Compression: none
2026-02-14T10:06:19.809 [DEBUG] [Thread-183613] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:06:19.863 [DEBUG] [Thread-183613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:06:19.864 [DEBUG] [Thread-183613] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:06:19.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:06:19.865 [DEBUG] [Thread-183613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:06:19.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:06:19.923 [DEBUG] [Thread-183613] [transport.py] [_log()] userauth is OK
2026-02-14T10:06:19.923 [DEBUG] [Thread-183613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:06:19.923 [DEBUG] [Thread-183613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:06:19.924 [DEBUG] [Thread-183613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:06:19.924 [DEBUG] [Thread-183613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:06:19.946 [INFO] [Thread-183613] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:06:19.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T10:06:19.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:06:20.747 [DEBUG] [Thread-183613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:06:20.747 [DEBUG] [Thread-183613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:06:20.796 [DEBUG] [Thread-183613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:06:20.796 [DEBUG] [Thread-183613] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:06:20.806 [DEBUG] [Thread-183613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:06:20.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:06:20.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-14T10:06:20.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:06:20.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:06:20.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:06:20.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:06:20.845 [DEBUG] [Thread-183613] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:06:31.252 [DEBUG] [Thread-183615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:06:46.308 [DEBUG] [Thread-183616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:06:50.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:06:50.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:06:50.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-14T10:06:52.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 6, 34), 8.29, 56.94, 0.0, 32.88, 12.55, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:06:52.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:06:34
2026-02-14T10:06:53.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:06:53.408 [DEBUG] [Thread-183617] [transport.py] [_log()] starting thread (client mode): 0xa2d11ea0
2026-02-14T10:06:53.409 [DEBUG] [Thread-183617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:06:53.428 [DEBUG] [Thread-183617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:06:53.428 [INFO] [Thread-183617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:06:53.430 [DEBUG] [Thread-183617] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:06:53.430 [DEBUG] [Thread-183617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:06:53.430 [DEBUG] [Thread-183617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:06:53.430 [DEBUG] [Thread-183617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:06:53.430 [DEBUG] [Thread-183617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:06:53.430 [DEBUG] [Thread-183617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:06:53.430 [DEBUG] [Thread-183617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:06:53.430 [DEBUG] [Thread-183617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:06:53.430 [DEBUG] [Thread-183617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:06:53.430 [DEBUG] [Thread-183617] [transport.py] [_log()] client lang: <none>
2026-02-14T10:06:53.430 [DEBUG] [Thread-183617] [transport.py] [_log()] server lang: <none>
2026-02-14T10:06:53.430 [DEBUG] [Thread-183617] [transport.py] [_log()] kex follows: False
2026-02-14T10:06:53.430 [DEBUG] [Thread-183617] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:06:53.430 [DEBUG] [Thread-183617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:06:53.431 [DEBUG] [Thread-183617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:06:53.431 [DEBUG] [Thread-183617] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:06:53.431 [DEBUG] [Thread-183617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:06:53.431 [DEBUG] [Thread-183617] [transport.py] [_log()] Compression: none
2026-02-14T10:06:53.431 [DEBUG] [Thread-183617] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:06:53.442 [DEBUG] [Thread-183617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:06:53.442 [DEBUG] [Thread-183617] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:06:53.443 [DEBUG] [Thread-183617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:06:53.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:06:53.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:06:53.444 [DEBUG] [Thread-183617] [transport.py] [_log()] userauth is OK
2026-02-14T10:06:53.444 [DEBUG] [Thread-183617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:06:53.445 [DEBUG] [Thread-183617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:06:53.445 [DEBUG] [Thread-183617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:06:53.445 [DEBUG] [Thread-183617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:06:53.468 [INFO] [Thread-183617] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:06:53.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:06:54.134 [DEBUG] [Thread-183617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:06:54.134 [DEBUG] [Thread-183617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:06:54.134 [DEBUG] [Thread-183617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:06:54.175 [DEBUG] [Thread-183617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:06:54.175 [DEBUG] [Thread-183617] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:06:54.178 [DEBUG] [Thread-183617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:06:54.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:06:54.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:06:54.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:06:54.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:06:54.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:06:54.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:06:54.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:06:54.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:06:54.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:06:54.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.337613 -999.00  +10.90  26.90     66   +5.00 1 1 1 1 1   888    0 7.47 64.05 ----- 24.7 26.9 163.0 35.1 17.6 -27.3 16.4 -25.3 15.3 -25.2 16.2 -25.9
2026-02-14T10:06:54.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:06:54.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:06:54.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.337613
2026-02-14T10:06:54.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:06:54.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:06:54.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:06:54.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:06:54.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:06:54.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:06:34', tmtdew=8.29, humidity=56.94, cloud=0.0, wind=32.88, temperature=12.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:06:09.763', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:06:54.202 [DEBUG] [Thread-183617] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:06:54.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-14T10:06:54.297 [DEBUG] [Thread-183620] [transport.py] [_log()] starting thread (client mode): 0xa5759c30
2026-02-14T10:06:54.297 [DEBUG] [Thread-183620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:06:54.316 [DEBUG] [Thread-183620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:06:54.316 [INFO] [Thread-183620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:06:54.324 [DEBUG] [Thread-183620] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:06:54.324 [DEBUG] [Thread-183620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:06:54.325 [DEBUG] [Thread-183620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:06:54.325 [DEBUG] [Thread-183620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:06:54.325 [DEBUG] [Thread-183620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:06:54.325 [DEBUG] [Thread-183620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:06:54.325 [DEBUG] [Thread-183620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:06:54.325 [DEBUG] [Thread-183620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:06:54.325 [DEBUG] [Thread-183620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:06:54.325 [DEBUG] [Thread-183620] [transport.py] [_log()] client lang: <none>
2026-02-14T10:06:54.325 [DEBUG] [Thread-183620] [transport.py] [_log()] server lang: <none>
2026-02-14T10:06:54.325 [DEBUG] [Thread-183620] [transport.py] [_log()] kex follows: False
2026-02-14T10:06:54.325 [DEBUG] [Thread-183620] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:06:54.325 [DEBUG] [Thread-183620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:06:54.325 [DEBUG] [Thread-183620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:06:54.325 [DEBUG] [Thread-183620] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:06:54.325 [DEBUG] [Thread-183620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:06:54.326 [DEBUG] [Thread-183620] [transport.py] [_log()] Compression: none
2026-02-14T10:06:54.326 [DEBUG] [Thread-183620] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:06:54.388 [DEBUG] [Thread-183620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:06:54.389 [DEBUG] [Thread-183620] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:06:54.389 [DEBUG] [Thread-183620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:06:54.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:06:54.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:06:54.444 [DEBUG] [Thread-183620] [transport.py] [_log()] userauth is OK
2026-02-14T10:06:54.444 [DEBUG] [Thread-183620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:06:54.444 [DEBUG] [Thread-183620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:06:54.444 [DEBUG] [Thread-183620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:06:54.444 [DEBUG] [Thread-183620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:06:54.460 [INFO] [Thread-183620] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:06:54.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-14T10:06:54.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:06:55.284 [DEBUG] [Thread-183620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:06:55.284 [DEBUG] [Thread-183620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:06:55.333 [DEBUG] [Thread-183620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:06:55.333 [DEBUG] [Thread-183620] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:06:55.342 [DEBUG] [Thread-183620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:06:55.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:06:55.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-14T10:06:55.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-14T10:06:55.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:06:55.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:06:55.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:06:55.379 [DEBUG] [Thread-183620] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:07:01.199 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:07:01.200 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:07:01.342 [DEBUG] [Thread-183622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:07:15.621 [DEBUG] [Thread-183623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:07:16.394 [DEBUG] [Thread-183624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:07:25.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:07:25.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:07:25.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-14T10:07:28.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 7, 9), 7.49, 60.29, 0.0, 31.55, 11.19, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:07:28.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:07:09
2026-02-14T10:07:28.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:07:28.564 [DEBUG] [Thread-183625] [transport.py] [_log()] starting thread (client mode): 0xa2d10d30
2026-02-14T10:07:28.565 [DEBUG] [Thread-183625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:07:28.585 [DEBUG] [Thread-183625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:07:28.585 [INFO] [Thread-183625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:07:28.587 [DEBUG] [Thread-183625] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:07:28.587 [DEBUG] [Thread-183625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:07:28.587 [DEBUG] [Thread-183625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:07:28.587 [DEBUG] [Thread-183625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:07:28.587 [DEBUG] [Thread-183625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:07:28.587 [DEBUG] [Thread-183625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:07:28.587 [DEBUG] [Thread-183625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:07:28.587 [DEBUG] [Thread-183625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:07:28.587 [DEBUG] [Thread-183625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:07:28.587 [DEBUG] [Thread-183625] [transport.py] [_log()] client lang: <none>
2026-02-14T10:07:28.587 [DEBUG] [Thread-183625] [transport.py] [_log()] server lang: <none>
2026-02-14T10:07:28.587 [DEBUG] [Thread-183625] [transport.py] [_log()] kex follows: False
2026-02-14T10:07:28.588 [DEBUG] [Thread-183625] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:07:28.588 [DEBUG] [Thread-183625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:07:28.588 [DEBUG] [Thread-183625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:07:28.588 [DEBUG] [Thread-183625] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:07:28.588 [DEBUG] [Thread-183625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:07:28.588 [DEBUG] [Thread-183625] [transport.py] [_log()] Compression: none
2026-02-14T10:07:28.588 [DEBUG] [Thread-183625] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:07:28.610 [DEBUG] [Thread-183625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:07:28.610 [DEBUG] [Thread-183625] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:07:28.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:07:28.612 [DEBUG] [Thread-183625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:07:28.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:07:28.614 [DEBUG] [Thread-183625] [transport.py] [_log()] userauth is OK
2026-02-14T10:07:28.615 [DEBUG] [Thread-183625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:07:28.615 [DEBUG] [Thread-183625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:07:28.615 [DEBUG] [Thread-183625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:07:28.616 [DEBUG] [Thread-183625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:07:28.652 [INFO] [Thread-183625] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:07:28.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:07:29.364 [DEBUG] [Thread-183625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:07:29.364 [DEBUG] [Thread-183625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:07:29.365 [DEBUG] [Thread-183625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:07:29.405 [DEBUG] [Thread-183625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:07:29.405 [DEBUG] [Thread-183625] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:07:29.409 [DEBUG] [Thread-183625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:07:29.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:07:29.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:07:29.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:07:29.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:07:29.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:07:29.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:07:29.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:07:29.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:07:29.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:07:29.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.337961 -999.00  +10.80  26.16     67   +5.00 1 1 1 1 1   888    0 7.52 63.78 ----- 23.1 26.2 162.0 35.0 17.7 -25.7 16.5 -24.4 15.3 -24.6 16.2 -24.5
2026-02-14T10:07:29.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:07:29.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:07:29.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.337961
2026-02-14T10:07:29.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:07:29.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:07:29.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:07:29.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:07:29.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:07:29.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:07:09', tmtdew=7.49, humidity=60.29, cloud=0.0, wind=31.55, temperature=11.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:06:39.830', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:07:29.438 [DEBUG] [Thread-183625] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:07:29.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-14T10:07:29.534 [DEBUG] [Thread-183628] [transport.py] [_log()] starting thread (client mode): 0xa2d1b550
2026-02-14T10:07:29.534 [DEBUG] [Thread-183628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:07:29.548 [DEBUG] [Thread-183628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:07:29.548 [INFO] [Thread-183628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:07:29.556 [DEBUG] [Thread-183628] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:07:29.556 [DEBUG] [Thread-183628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:07:29.556 [DEBUG] [Thread-183628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:07:29.556 [DEBUG] [Thread-183628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:07:29.557 [DEBUG] [Thread-183628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:07:29.557 [DEBUG] [Thread-183628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:07:29.557 [DEBUG] [Thread-183628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:07:29.557 [DEBUG] [Thread-183628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:07:29.557 [DEBUG] [Thread-183628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:07:29.557 [DEBUG] [Thread-183628] [transport.py] [_log()] client lang: <none>
2026-02-14T10:07:29.557 [DEBUG] [Thread-183628] [transport.py] [_log()] server lang: <none>
2026-02-14T10:07:29.557 [DEBUG] [Thread-183628] [transport.py] [_log()] kex follows: False
2026-02-14T10:07:29.557 [DEBUG] [Thread-183628] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:07:29.557 [DEBUG] [Thread-183628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:07:29.557 [DEBUG] [Thread-183628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:07:29.557 [DEBUG] [Thread-183628] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:07:29.557 [DEBUG] [Thread-183628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:07:29.557 [DEBUG] [Thread-183628] [transport.py] [_log()] Compression: none
2026-02-14T10:07:29.557 [DEBUG] [Thread-183628] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:07:29.616 [DEBUG] [Thread-183628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:07:29.617 [DEBUG] [Thread-183628] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:07:29.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:07:29.618 [DEBUG] [Thread-183628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:07:29.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:07:29.673 [DEBUG] [Thread-183628] [transport.py] [_log()] userauth is OK
2026-02-14T10:07:29.674 [DEBUG] [Thread-183628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:07:29.674 [DEBUG] [Thread-183628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:07:29.674 [DEBUG] [Thread-183628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:07:29.674 [DEBUG] [Thread-183628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:07:29.692 [INFO] [Thread-183628] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:07:29.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T10:07:29.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:07:30.512 [DEBUG] [Thread-183628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:07:30.513 [DEBUG] [Thread-183628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:07:30.560 [DEBUG] [Thread-183628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:07:30.561 [DEBUG] [Thread-183628] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:07:30.570 [DEBUG] [Thread-183628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:07:30.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:07:30.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-14T10:07:30.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-14T10:07:30.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:07:30.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:07:30.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:07:30.615 [DEBUG] [Thread-183628] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:07:31.434 [DEBUG] [Thread-183630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:07:46.497 [DEBUG] [Thread-183631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:08:00.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:08:00.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:08:00.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-14T10:08:01.342 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:08:01.343 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:08:01.534 [DEBUG] [Thread-183632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:08:02.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 7, 46), 7.75, 58.84, 0.0, 32.57, 11.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:08:02.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:07:46
2026-02-14T10:08:03.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:08:03.319 [DEBUG] [Thread-183633] [transport.py] [_log()] starting thread (client mode): 0xa2d1ba90
2026-02-14T10:08:03.319 [DEBUG] [Thread-183633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:08:03.339 [DEBUG] [Thread-183633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:08:03.339 [INFO] [Thread-183633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:08:03.342 [DEBUG] [Thread-183633] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:08:03.343 [DEBUG] [Thread-183633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:08:03.343 [DEBUG] [Thread-183633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:08:03.343 [DEBUG] [Thread-183633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:08:03.343 [DEBUG] [Thread-183633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:08:03.343 [DEBUG] [Thread-183633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:08:03.343 [DEBUG] [Thread-183633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:08:03.343 [DEBUG] [Thread-183633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:08:03.343 [DEBUG] [Thread-183633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:08:03.343 [DEBUG] [Thread-183633] [transport.py] [_log()] client lang: <none>
2026-02-14T10:08:03.344 [DEBUG] [Thread-183633] [transport.py] [_log()] server lang: <none>
2026-02-14T10:08:03.344 [DEBUG] [Thread-183633] [transport.py] [_log()] kex follows: False
2026-02-14T10:08:03.344 [DEBUG] [Thread-183633] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:08:03.344 [DEBUG] [Thread-183633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:08:03.344 [DEBUG] [Thread-183633] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:08:03.344 [DEBUG] [Thread-183633] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:08:03.344 [DEBUG] [Thread-183633] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:08:03.344 [DEBUG] [Thread-183633] [transport.py] [_log()] Compression: none
2026-02-14T10:08:03.344 [DEBUG] [Thread-183633] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:08:03.360 [DEBUG] [Thread-183633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:08:03.361 [DEBUG] [Thread-183633] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:08:03.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:08:03.362 [DEBUG] [Thread-183633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:08:03.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:08:03.364 [DEBUG] [Thread-183633] [transport.py] [_log()] userauth is OK
2026-02-14T10:08:03.364 [DEBUG] [Thread-183633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:08:03.364 [DEBUG] [Thread-183633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:08:03.364 [DEBUG] [Thread-183633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:08:03.364 [DEBUG] [Thread-183633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:08:03.382 [INFO] [Thread-183633] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:08:03.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:08:03.966 [DEBUG] [Thread-183633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:08:03.967 [DEBUG] [Thread-183633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:08:03.967 [DEBUG] [Thread-183633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:08:04.007 [DEBUG] [Thread-183633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:08:04.008 [DEBUG] [Thread-183633] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:08:04.011 [DEBUG] [Thread-183633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:08:04.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:08:04.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:08:04.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:08:04.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:08:04.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:08:04.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:08:04.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:08:04.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:08:04.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:08:04.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.338655 -999.00  +11.50  22.51     66   +5.40 1 1 1 1 1   888    0 7.43 61.85 ----- 24.9 22.5 161.9 33.4 17.8 -24.8 16.6 -22.5 15.4 -23.6 16.4 -24.6
2026-02-14T10:08:04.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:08:04.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:08:04.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.338655
2026-02-14T10:08:04.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:08:04.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:08:04.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:08:04.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:08:04.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:08:04.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:07:46', tmtdew=7.75, humidity=58.84, cloud=0.0, wind=32.57, temperature=11.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:07:39.792', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:08:04.037 [DEBUG] [Thread-183633] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:08:04.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-14T10:08:04.131 [DEBUG] [Thread-183636] [transport.py] [_log()] starting thread (client mode): 0xa2d56b30
2026-02-14T10:08:04.132 [DEBUG] [Thread-183636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:08:04.146 [DEBUG] [Thread-183636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:08:04.146 [INFO] [Thread-183636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:08:04.154 [DEBUG] [Thread-183636] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:08:04.154 [DEBUG] [Thread-183636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:08:04.154 [DEBUG] [Thread-183636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:08:04.154 [DEBUG] [Thread-183636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:08:04.154 [DEBUG] [Thread-183636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:08:04.154 [DEBUG] [Thread-183636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:08:04.155 [DEBUG] [Thread-183636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:08:04.155 [DEBUG] [Thread-183636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:08:04.155 [DEBUG] [Thread-183636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:08:04.155 [DEBUG] [Thread-183636] [transport.py] [_log()] client lang: <none>
2026-02-14T10:08:04.155 [DEBUG] [Thread-183636] [transport.py] [_log()] server lang: <none>
2026-02-14T10:08:04.155 [DEBUG] [Thread-183636] [transport.py] [_log()] kex follows: False
2026-02-14T10:08:04.155 [DEBUG] [Thread-183636] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:08:04.155 [DEBUG] [Thread-183636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:08:04.155 [DEBUG] [Thread-183636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:08:04.155 [DEBUG] [Thread-183636] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:08:04.155 [DEBUG] [Thread-183636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:08:04.155 [DEBUG] [Thread-183636] [transport.py] [_log()] Compression: none
2026-02-14T10:08:04.155 [DEBUG] [Thread-183636] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:08:04.213 [DEBUG] [Thread-183636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:08:04.214 [DEBUG] [Thread-183636] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:08:04.214 [DEBUG] [Thread-183636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:08:04.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:08:04.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:08:04.269 [DEBUG] [Thread-183636] [transport.py] [_log()] userauth is OK
2026-02-14T10:08:04.270 [DEBUG] [Thread-183636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:08:04.270 [DEBUG] [Thread-183636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:08:04.270 [DEBUG] [Thread-183636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:08:04.270 [DEBUG] [Thread-183636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:08:04.289 [INFO] [Thread-183636] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:08:04.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-14T10:08:04.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:08:05.114 [DEBUG] [Thread-183636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:08:05.115 [DEBUG] [Thread-183636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:08:05.163 [DEBUG] [Thread-183636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:08:05.163 [DEBUG] [Thread-183636] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:08:05.172 [DEBUG] [Thread-183636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:08:05.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:08:05.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-14T10:08:05.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:08:05.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:08:05.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:08:05.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:08:05.209 [DEBUG] [Thread-183636] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:08:15.654 [DEBUG] [Thread-183638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:08:16.573 [DEBUG] [Thread-183639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:08:31.625 [DEBUG] [Thread-183640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:08:35.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:08:35.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:08:35.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-14T10:08:37.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 8, 21), 7.8, 58.64, 0.0, 27.28, 11.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:08:37.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:08:21
2026-02-14T10:08:37.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:08:37.763 [DEBUG] [Thread-183641] [transport.py] [_log()] starting thread (client mode): 0xa2d13100
2026-02-14T10:08:37.764 [DEBUG] [Thread-183641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:08:37.783 [DEBUG] [Thread-183641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:08:37.784 [INFO] [Thread-183641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:08:37.787 [DEBUG] [Thread-183641] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:08:37.787 [DEBUG] [Thread-183641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:08:37.787 [DEBUG] [Thread-183641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:08:37.787 [DEBUG] [Thread-183641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:08:37.787 [DEBUG] [Thread-183641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:08:37.787 [DEBUG] [Thread-183641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:08:37.787 [DEBUG] [Thread-183641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:08:37.787 [DEBUG] [Thread-183641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:08:37.787 [DEBUG] [Thread-183641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:08:37.787 [DEBUG] [Thread-183641] [transport.py] [_log()] client lang: <none>
2026-02-14T10:08:37.787 [DEBUG] [Thread-183641] [transport.py] [_log()] server lang: <none>
2026-02-14T10:08:37.788 [DEBUG] [Thread-183641] [transport.py] [_log()] kex follows: False
2026-02-14T10:08:37.788 [DEBUG] [Thread-183641] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:08:37.788 [DEBUG] [Thread-183641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:08:37.788 [DEBUG] [Thread-183641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:08:37.788 [DEBUG] [Thread-183641] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:08:37.788 [DEBUG] [Thread-183641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:08:37.788 [DEBUG] [Thread-183641] [transport.py] [_log()] Compression: none
2026-02-14T10:08:37.788 [DEBUG] [Thread-183641] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:08:37.803 [DEBUG] [Thread-183641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:08:37.804 [DEBUG] [Thread-183641] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:08:37.804 [DEBUG] [Thread-183641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:08:37.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:08:37.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:08:37.806 [DEBUG] [Thread-183641] [transport.py] [_log()] userauth is OK
2026-02-14T10:08:37.806 [DEBUG] [Thread-183641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:08:37.807 [DEBUG] [Thread-183641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:08:37.807 [DEBUG] [Thread-183641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:08:37.807 [DEBUG] [Thread-183641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:08:37.828 [INFO] [Thread-183641] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:08:37.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:08:38.410 [DEBUG] [Thread-183641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:08:38.410 [DEBUG] [Thread-183641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:08:38.410 [DEBUG] [Thread-183641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:08:38.451 [DEBUG] [Thread-183641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:08:38.452 [DEBUG] [Thread-183641] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:08:38.455 [DEBUG] [Thread-183641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:08:38.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:08:38.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:08:38.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:08:38.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:08:38.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:08:38.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:08:38.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:08:38.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:08:38.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:08:38.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.339002 -999.00  +11.40  30.12     65   +5.10 1 1 2 1 1   888    0 7.48 59.08 ----- 31.1 30.1 165.4 34.8 17.8 -26.6 16.6 -24.0 15.4 -24.9 16.4 -25.8
2026-02-14T10:08:38.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:08:38.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:08:38.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.339002
2026-02-14T10:08:38.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:08:38.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:08:38.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:08:38.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:08:38.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:08:38.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:08:21', tmtdew=7.8, humidity=58.64, cloud=0.0, wind=27.28, temperature=11.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:08:09.773', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:08:38.481 [DEBUG] [Thread-183641] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:08:38.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-14T10:08:38.581 [DEBUG] [Thread-183644] [transport.py] [_log()] starting thread (client mode): 0xa2d11fc0
2026-02-14T10:08:38.581 [DEBUG] [Thread-183644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:08:38.595 [DEBUG] [Thread-183644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:08:38.595 [INFO] [Thread-183644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:08:38.603 [DEBUG] [Thread-183644] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:08:38.603 [DEBUG] [Thread-183644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:08:38.603 [DEBUG] [Thread-183644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:08:38.603 [DEBUG] [Thread-183644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:08:38.603 [DEBUG] [Thread-183644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:08:38.603 [DEBUG] [Thread-183644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:08:38.603 [DEBUG] [Thread-183644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:08:38.603 [DEBUG] [Thread-183644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:08:38.603 [DEBUG] [Thread-183644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:08:38.603 [DEBUG] [Thread-183644] [transport.py] [_log()] client lang: <none>
2026-02-14T10:08:38.603 [DEBUG] [Thread-183644] [transport.py] [_log()] server lang: <none>
2026-02-14T10:08:38.603 [DEBUG] [Thread-183644] [transport.py] [_log()] kex follows: False
2026-02-14T10:08:38.603 [DEBUG] [Thread-183644] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:08:38.603 [DEBUG] [Thread-183644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:08:38.603 [DEBUG] [Thread-183644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:08:38.603 [DEBUG] [Thread-183644] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:08:38.603 [DEBUG] [Thread-183644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:08:38.604 [DEBUG] [Thread-183644] [transport.py] [_log()] Compression: none
2026-02-14T10:08:38.604 [DEBUG] [Thread-183644] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:08:38.662 [DEBUG] [Thread-183644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:08:38.662 [DEBUG] [Thread-183644] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:08:38.663 [DEBUG] [Thread-183644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:08:38.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:08:38.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:08:38.718 [DEBUG] [Thread-183644] [transport.py] [_log()] userauth is OK
2026-02-14T10:08:38.719 [DEBUG] [Thread-183644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:08:38.719 [DEBUG] [Thread-183644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:08:38.719 [DEBUG] [Thread-183644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:08:38.719 [DEBUG] [Thread-183644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:08:38.738 [INFO] [Thread-183644] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:08:38.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-14T10:08:38.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:08:39.590 [DEBUG] [Thread-183644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:08:39.591 [DEBUG] [Thread-183644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:08:39.638 [DEBUG] [Thread-183644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:08:39.638 [DEBUG] [Thread-183644] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:08:39.648 [DEBUG] [Thread-183644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:08:39.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:08:39.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-14T10:08:39.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-14T10:08:39.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:08:39.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:08:39.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:08:39.685 [DEBUG] [Thread-183644] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:08:46.660 [DEBUG] [Thread-183646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:09:01.483 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:09:01.484 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:09:01.713 [DEBUG] [Thread-183647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:09:09.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:09:09.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:09:09.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:09:11.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 8, 56), 7.72, 58.97, 0.0, 28.48, 11.59, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:09:11.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:08:56
2026-02-14T10:09:11.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:09:12.103 [DEBUG] [Thread-183648] [transport.py] [_log()] starting thread (client mode): 0xa2d1ac80
2026-02-14T10:09:12.103 [DEBUG] [Thread-183648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:09:12.122 [DEBUG] [Thread-183648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:09:12.122 [INFO] [Thread-183648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:09:12.124 [DEBUG] [Thread-183648] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:09:12.124 [DEBUG] [Thread-183648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:09:12.124 [DEBUG] [Thread-183648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:09:12.124 [DEBUG] [Thread-183648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:09:12.124 [DEBUG] [Thread-183648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:09:12.124 [DEBUG] [Thread-183648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:09:12.124 [DEBUG] [Thread-183648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:09:12.124 [DEBUG] [Thread-183648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:09:12.124 [DEBUG] [Thread-183648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:09:12.124 [DEBUG] [Thread-183648] [transport.py] [_log()] client lang: <none>
2026-02-14T10:09:12.124 [DEBUG] [Thread-183648] [transport.py] [_log()] server lang: <none>
2026-02-14T10:09:12.124 [DEBUG] [Thread-183648] [transport.py] [_log()] kex follows: False
2026-02-14T10:09:12.124 [DEBUG] [Thread-183648] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:09:12.124 [DEBUG] [Thread-183648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:09:12.124 [DEBUG] [Thread-183648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:09:12.124 [DEBUG] [Thread-183648] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:09:12.124 [DEBUG] [Thread-183648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:09:12.124 [DEBUG] [Thread-183648] [transport.py] [_log()] Compression: none
2026-02-14T10:09:12.124 [DEBUG] [Thread-183648] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:09:12.133 [DEBUG] [Thread-183648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:09:12.134 [DEBUG] [Thread-183648] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:09:12.134 [DEBUG] [Thread-183648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:09:12.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:09:12.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:09:12.135 [DEBUG] [Thread-183648] [transport.py] [_log()] userauth is OK
2026-02-14T10:09:12.135 [DEBUG] [Thread-183648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:09:12.135 [DEBUG] [Thread-183648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:09:12.135 [DEBUG] [Thread-183648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:09:12.135 [DEBUG] [Thread-183648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:09:12.147 [INFO] [Thread-183648] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:09:12.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:09:12.762 [DEBUG] [Thread-183648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:09:12.763 [DEBUG] [Thread-183648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:09:12.763 [DEBUG] [Thread-183648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:09:12.803 [DEBUG] [Thread-183648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:09:12.804 [DEBUG] [Thread-183648] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:09:12.807 [DEBUG] [Thread-183648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:09:12.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:09:12.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:09:12.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:09:12.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:09:12.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:09:12.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:09:12.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:09:12.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:09:12.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:09:12.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.339350 -999.00  +11.30  20.38     65   +5.10 1 1 1 1 1   888    0 7.43 57.06 ----- 17.7 20.4 165.7 35.7 17.7 -27.1 16.5 -23.7 15.4 -23.5 16.3 -25.4
2026-02-14T10:09:12.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:09:12.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:09:12.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.339350
2026-02-14T10:09:12.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:09:12.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:09:12.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:09:12.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:09:12.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:09:12.824 [DEBUG] [Thread-183648] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:09:12.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:08:56', tmtdew=7.72, humidity=58.97, cloud=0.0, wind=28.48, temperature=11.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:08:39.840', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:09:12.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-14T10:09:12.930 [DEBUG] [Thread-183651] [transport.py] [_log()] starting thread (client mode): 0xa5743430
2026-02-14T10:09:12.930 [DEBUG] [Thread-183651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:09:12.945 [DEBUG] [Thread-183651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:09:12.945 [INFO] [Thread-183651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:09:12.953 [DEBUG] [Thread-183651] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:09:12.953 [DEBUG] [Thread-183651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:09:12.953 [DEBUG] [Thread-183651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:09:12.953 [DEBUG] [Thread-183651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:09:12.953 [DEBUG] [Thread-183651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:09:12.953 [DEBUG] [Thread-183651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:09:12.953 [DEBUG] [Thread-183651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:09:12.953 [DEBUG] [Thread-183651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:09:12.953 [DEBUG] [Thread-183651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:09:12.953 [DEBUG] [Thread-183651] [transport.py] [_log()] client lang: <none>
2026-02-14T10:09:12.953 [DEBUG] [Thread-183651] [transport.py] [_log()] server lang: <none>
2026-02-14T10:09:12.953 [DEBUG] [Thread-183651] [transport.py] [_log()] kex follows: False
2026-02-14T10:09:12.953 [DEBUG] [Thread-183651] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:09:12.954 [DEBUG] [Thread-183651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:09:12.954 [DEBUG] [Thread-183651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:09:12.954 [DEBUG] [Thread-183651] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:09:12.954 [DEBUG] [Thread-183651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:09:12.954 [DEBUG] [Thread-183651] [transport.py] [_log()] Compression: none
2026-02-14T10:09:12.954 [DEBUG] [Thread-183651] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:09:13.012 [DEBUG] [Thread-183651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:09:13.012 [DEBUG] [Thread-183651] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:09:13.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:09:13.014 [DEBUG] [Thread-183651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:09:13.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:09:13.068 [DEBUG] [Thread-183651] [transport.py] [_log()] userauth is OK
2026-02-14T10:09:13.068 [DEBUG] [Thread-183651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:09:13.068 [DEBUG] [Thread-183651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:09:13.068 [DEBUG] [Thread-183651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:09:13.068 [DEBUG] [Thread-183651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:09:13.093 [INFO] [Thread-183651] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:09:13.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-14T10:09:13.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:09:13.905 [DEBUG] [Thread-183651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:09:13.905 [DEBUG] [Thread-183651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:09:13.953 [DEBUG] [Thread-183651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:09:13.954 [DEBUG] [Thread-183651] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:09:13.963 [DEBUG] [Thread-183651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:09:13.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:09:13.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:09:13.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-14T10:09:13.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:09:13.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:09:13.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:09:14.000 [DEBUG] [Thread-183651] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:09:15.715 [DEBUG] [Thread-183653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:09:16.750 [DEBUG] [Thread-183654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:09:31.804 [DEBUG] [Thread-183655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:09:44.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:09:44.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:09:44.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-14T10:09:45.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 9, 32), 7.88, 58.32, 0.0, 27.77, 11.62, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:09:45.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:09:32
2026-02-14T10:09:46.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:09:46.420 [DEBUG] [Thread-183656] [transport.py] [_log()] starting thread (client mode): 0xa2d1b160
2026-02-14T10:09:46.421 [DEBUG] [Thread-183656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:09:46.440 [DEBUG] [Thread-183656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:09:46.440 [INFO] [Thread-183656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:09:46.444 [DEBUG] [Thread-183656] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:09:46.444 [DEBUG] [Thread-183656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:09:46.444 [DEBUG] [Thread-183656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:09:46.444 [DEBUG] [Thread-183656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:09:46.444 [DEBUG] [Thread-183656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:09:46.444 [DEBUG] [Thread-183656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:09:46.444 [DEBUG] [Thread-183656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:09:46.445 [DEBUG] [Thread-183656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:09:46.445 [DEBUG] [Thread-183656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:09:46.445 [DEBUG] [Thread-183656] [transport.py] [_log()] client lang: <none>
2026-02-14T10:09:46.445 [DEBUG] [Thread-183656] [transport.py] [_log()] server lang: <none>
2026-02-14T10:09:46.445 [DEBUG] [Thread-183656] [transport.py] [_log()] kex follows: False
2026-02-14T10:09:46.445 [DEBUG] [Thread-183656] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:09:46.445 [DEBUG] [Thread-183656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:09:46.445 [DEBUG] [Thread-183656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:09:46.445 [DEBUG] [Thread-183656] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:09:46.445 [DEBUG] [Thread-183656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:09:46.445 [DEBUG] [Thread-183656] [transport.py] [_log()] Compression: none
2026-02-14T10:09:46.445 [DEBUG] [Thread-183656] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:09:46.460 [DEBUG] [Thread-183656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:09:46.461 [DEBUG] [Thread-183656] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:09:46.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:09:46.462 [DEBUG] [Thread-183656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:09:46.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:09:46.464 [DEBUG] [Thread-183656] [transport.py] [_log()] userauth is OK
2026-02-14T10:09:46.464 [DEBUG] [Thread-183656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:09:46.464 [DEBUG] [Thread-183656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:09:46.464 [DEBUG] [Thread-183656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:09:46.464 [DEBUG] [Thread-183656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:09:46.480 [INFO] [Thread-183656] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:09:46.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:09:46.840 [DEBUG] [Thread-183658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:09:47.088 [DEBUG] [Thread-183656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:09:47.088 [DEBUG] [Thread-183656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:09:47.088 [DEBUG] [Thread-183656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:09:47.129 [DEBUG] [Thread-183656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:09:47.129 [DEBUG] [Thread-183656] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:09:47.132 [DEBUG] [Thread-183656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:09:47.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:09:47.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:09:47.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:09:47.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:09:47.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:09:47.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:09:47.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:09:47.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:09:47.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:09:47.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.340044 -999.00  +11.40  19.29     65   +5.10 1 1 1 1 1   888    0 7.34 55.05 ----- 24.5 19.3 149.7 31.1 17.8 -26.9 16.6 -24.1 15.5 -22.0 16.4 -25.6
2026-02-14T10:09:47.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:09:47.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:09:47.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.340044
2026-02-14T10:09:47.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:09:47.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:09:47.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:09:47.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:09:47.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:09:47.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:09:32', tmtdew=7.88, humidity=58.32, cloud=0.0, wind=27.77, temperature=11.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:09:39.802', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:09:47.156 [DEBUG] [Thread-183656] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:09:47.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-14T10:09:47.252 [DEBUG] [Thread-183660] [transport.py] [_log()] starting thread (client mode): 0xa2d1add0
2026-02-14T10:09:47.252 [DEBUG] [Thread-183660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:09:47.266 [DEBUG] [Thread-183660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:09:47.267 [INFO] [Thread-183660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:09:47.274 [DEBUG] [Thread-183660] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:09:47.274 [DEBUG] [Thread-183660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:09:47.275 [DEBUG] [Thread-183660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:09:47.275 [DEBUG] [Thread-183660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:09:47.275 [DEBUG] [Thread-183660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:09:47.275 [DEBUG] [Thread-183660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:09:47.275 [DEBUG] [Thread-183660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:09:47.275 [DEBUG] [Thread-183660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:09:47.275 [DEBUG] [Thread-183660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:09:47.275 [DEBUG] [Thread-183660] [transport.py] [_log()] client lang: <none>
2026-02-14T10:09:47.275 [DEBUG] [Thread-183660] [transport.py] [_log()] server lang: <none>
2026-02-14T10:09:47.275 [DEBUG] [Thread-183660] [transport.py] [_log()] kex follows: False
2026-02-14T10:09:47.275 [DEBUG] [Thread-183660] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:09:47.275 [DEBUG] [Thread-183660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:09:47.275 [DEBUG] [Thread-183660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:09:47.275 [DEBUG] [Thread-183660] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:09:47.275 [DEBUG] [Thread-183660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:09:47.275 [DEBUG] [Thread-183660] [transport.py] [_log()] Compression: none
2026-02-14T10:09:47.275 [DEBUG] [Thread-183660] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:09:47.333 [DEBUG] [Thread-183660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:09:47.334 [DEBUG] [Thread-183660] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:09:47.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:09:47.335 [DEBUG] [Thread-183660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:09:47.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:09:47.392 [DEBUG] [Thread-183660] [transport.py] [_log()] userauth is OK
2026-02-14T10:09:47.392 [DEBUG] [Thread-183660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:09:47.393 [DEBUG] [Thread-183660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:09:47.393 [DEBUG] [Thread-183660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:09:47.393 [DEBUG] [Thread-183660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:09:47.413 [INFO] [Thread-183660] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:09:47.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T10:09:47.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:09:48.225 [DEBUG] [Thread-183660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:09:48.225 [DEBUG] [Thread-183660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:09:48.273 [DEBUG] [Thread-183660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:09:48.274 [DEBUG] [Thread-183660] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:09:48.283 [DEBUG] [Thread-183660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:09:48.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:09:48.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:09:48.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-14T10:09:48.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:09:48.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:09:48.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:09:48.320 [DEBUG] [Thread-183660] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:10:01.626 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:10:01.627 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:10:01.875 [DEBUG] [Thread-183662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:10:15.752 [DEBUG] [Thread-183663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:10:16.924 [DEBUG] [Thread-183664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:10:18.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:10:18.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:10:18.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-14T10:10:20.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 10, 7), 7.79, 58.69, 0.0, 34.53, 11.66, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:10:20.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:10:07
2026-02-14T10:10:21.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:10:21.357 [DEBUG] [Thread-183665] [transport.py] [_log()] starting thread (client mode): 0xa2ddde40
2026-02-14T10:10:21.358 [DEBUG] [Thread-183665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:10:21.375 [DEBUG] [Thread-183665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:10:21.375 [INFO] [Thread-183665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:10:21.378 [DEBUG] [Thread-183665] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:10:21.378 [DEBUG] [Thread-183665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:10:21.378 [DEBUG] [Thread-183665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:10:21.378 [DEBUG] [Thread-183665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:10:21.378 [DEBUG] [Thread-183665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:10:21.378 [DEBUG] [Thread-183665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:10:21.378 [DEBUG] [Thread-183665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:10:21.378 [DEBUG] [Thread-183665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:10:21.378 [DEBUG] [Thread-183665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:10:21.378 [DEBUG] [Thread-183665] [transport.py] [_log()] client lang: <none>
2026-02-14T10:10:21.378 [DEBUG] [Thread-183665] [transport.py] [_log()] server lang: <none>
2026-02-14T10:10:21.378 [DEBUG] [Thread-183665] [transport.py] [_log()] kex follows: False
2026-02-14T10:10:21.378 [DEBUG] [Thread-183665] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:10:21.378 [DEBUG] [Thread-183665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:10:21.378 [DEBUG] [Thread-183665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:10:21.378 [DEBUG] [Thread-183665] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:10:21.378 [DEBUG] [Thread-183665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:10:21.378 [DEBUG] [Thread-183665] [transport.py] [_log()] Compression: none
2026-02-14T10:10:21.378 [DEBUG] [Thread-183665] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:10:21.390 [DEBUG] [Thread-183665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:10:21.390 [DEBUG] [Thread-183665] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:10:21.390 [DEBUG] [Thread-183665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:10:21.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:10:21.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:10:21.391 [DEBUG] [Thread-183665] [transport.py] [_log()] userauth is OK
2026-02-14T10:10:21.391 [DEBUG] [Thread-183665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:10:21.391 [DEBUG] [Thread-183665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:10:21.391 [DEBUG] [Thread-183665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:10:21.391 [DEBUG] [Thread-183665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:10:21.410 [INFO] [Thread-183665] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:10:21.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:10:22.036 [DEBUG] [Thread-183665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:10:22.036 [DEBUG] [Thread-183665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:10:22.036 [DEBUG] [Thread-183665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:10:22.078 [DEBUG] [Thread-183665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:10:22.078 [DEBUG] [Thread-183665] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:10:22.080 [DEBUG] [Thread-183665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:10:22.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:10:22.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:10:22.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:10:22.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:10:22.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:10:22.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:10:22.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:10:22.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:10:22.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:10:22.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.340391 -999.00  +11.60  28.62     64   +5.10 1 1 1 1 1   888    0 7.45 57.12 ----- 26.6 28.6 138.6 38.4 17.9 -25.8 16.7 -23.1 15.5 -24.0 16.5 -24.4
2026-02-14T10:10:22.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:10:22.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:10:22.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.340391
2026-02-14T10:10:22.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:10:22.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:10:22.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:10:22.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:10:22.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:10:22.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:10:07', tmtdew=7.79, humidity=58.69, cloud=0.0, wind=34.53, temperature=11.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:10:09.782', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:10:22.100 [DEBUG] [Thread-183665] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:10:22.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T10:10:22.181 [DEBUG] [Thread-183668] [transport.py] [_log()] starting thread (client mode): 0xa2ddd510
2026-02-14T10:10:22.181 [DEBUG] [Thread-183668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:10:22.195 [DEBUG] [Thread-183668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:10:22.195 [INFO] [Thread-183668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:10:22.203 [DEBUG] [Thread-183668] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:10:22.203 [DEBUG] [Thread-183668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:10:22.203 [DEBUG] [Thread-183668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:10:22.203 [DEBUG] [Thread-183668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:10:22.203 [DEBUG] [Thread-183668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:10:22.203 [DEBUG] [Thread-183668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:10:22.203 [DEBUG] [Thread-183668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:10:22.203 [DEBUG] [Thread-183668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:10:22.203 [DEBUG] [Thread-183668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:10:22.203 [DEBUG] [Thread-183668] [transport.py] [_log()] client lang: <none>
2026-02-14T10:10:22.203 [DEBUG] [Thread-183668] [transport.py] [_log()] server lang: <none>
2026-02-14T10:10:22.203 [DEBUG] [Thread-183668] [transport.py] [_log()] kex follows: False
2026-02-14T10:10:22.203 [DEBUG] [Thread-183668] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:10:22.203 [DEBUG] [Thread-183668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:10:22.203 [DEBUG] [Thread-183668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:10:22.203 [DEBUG] [Thread-183668] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:10:22.203 [DEBUG] [Thread-183668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:10:22.203 [DEBUG] [Thread-183668] [transport.py] [_log()] Compression: none
2026-02-14T10:10:22.203 [DEBUG] [Thread-183668] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:10:22.259 [DEBUG] [Thread-183668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:10:22.259 [DEBUG] [Thread-183668] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:10:22.259 [DEBUG] [Thread-183668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:10:22.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:10:22.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:10:22.316 [DEBUG] [Thread-183668] [transport.py] [_log()] userauth is OK
2026-02-14T10:10:22.316 [DEBUG] [Thread-183668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:10:22.316 [DEBUG] [Thread-183668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:10:22.316 [DEBUG] [Thread-183668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:10:22.316 [DEBUG] [Thread-183668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:10:22.330 [INFO] [Thread-183668] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:10:22.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-14T10:10:22.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:10:23.161 [DEBUG] [Thread-183668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:10:23.161 [DEBUG] [Thread-183668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:10:23.208 [DEBUG] [Thread-183668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:10:23.208 [DEBUG] [Thread-183668] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:10:23.217 [DEBUG] [Thread-183668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:10:23.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:10:23.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:10:23.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:10:23.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:10:23.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:10:23.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:10:23.249 [DEBUG] [Thread-183668] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:10:31.951 [DEBUG] [Thread-183670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:10:46.983 [DEBUG] [Thread-183671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:10:53.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:10:53.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:10:53.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-14T10:10:55.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 10, 43), 7.79, 58.81, 0.0, 35.13, 11.67, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:10:55.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:10:43
2026-02-14T10:10:55.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:10:55.720 [DEBUG] [Thread-183672] [transport.py] [_log()] starting thread (client mode): 0xa2ddfcd0
2026-02-14T10:10:55.720 [DEBUG] [Thread-183672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:10:55.733 [DEBUG] [Thread-183672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:10:55.733 [INFO] [Thread-183672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:10:55.734 [DEBUG] [Thread-183672] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:10:55.734 [DEBUG] [Thread-183672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:10:55.734 [DEBUG] [Thread-183672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:10:55.734 [DEBUG] [Thread-183672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:10:55.734 [DEBUG] [Thread-183672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:10:55.734 [DEBUG] [Thread-183672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:10:55.735 [DEBUG] [Thread-183672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:10:55.735 [DEBUG] [Thread-183672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:10:55.735 [DEBUG] [Thread-183672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:10:55.735 [DEBUG] [Thread-183672] [transport.py] [_log()] client lang: <none>
2026-02-14T10:10:55.735 [DEBUG] [Thread-183672] [transport.py] [_log()] server lang: <none>
2026-02-14T10:10:55.735 [DEBUG] [Thread-183672] [transport.py] [_log()] kex follows: False
2026-02-14T10:10:55.735 [DEBUG] [Thread-183672] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:10:55.735 [DEBUG] [Thread-183672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:10:55.735 [DEBUG] [Thread-183672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:10:55.735 [DEBUG] [Thread-183672] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:10:55.735 [DEBUG] [Thread-183672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:10:55.735 [DEBUG] [Thread-183672] [transport.py] [_log()] Compression: none
2026-02-14T10:10:55.735 [DEBUG] [Thread-183672] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:10:55.743 [DEBUG] [Thread-183672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:10:55.743 [DEBUG] [Thread-183672] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:10:55.744 [DEBUG] [Thread-183672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:10:55.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:10:55.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:10:55.744 [DEBUG] [Thread-183672] [transport.py] [_log()] userauth is OK
2026-02-14T10:10:55.744 [DEBUG] [Thread-183672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:10:55.744 [DEBUG] [Thread-183672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:10:55.744 [DEBUG] [Thread-183672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:10:55.744 [DEBUG] [Thread-183672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:10:55.753 [INFO] [Thread-183672] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:10:55.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:10:56.345 [DEBUG] [Thread-183672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:10:56.345 [DEBUG] [Thread-183672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:10:56.345 [DEBUG] [Thread-183672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:10:56.386 [DEBUG] [Thread-183672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:10:56.386 [DEBUG] [Thread-183672] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:10:56.388 [DEBUG] [Thread-183672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:10:56.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:10:56.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:10:56.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:10:56.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:10:56.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:10:56.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:10:56.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:10:56.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:10:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:10:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.340738 -999.00  +11.70  29.20     64   +5.10 1 1 1 1 1   888    0 7.49 59.78 ----- 32.1 29.2 143.8 35.0 17.9 -24.3 16.7 -23.3 15.6 -23.2 16.6 -25.5
2026-02-14T10:10:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:10:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:10:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.340738
2026-02-14T10:10:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:10:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:10:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:10:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:10:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:10:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:10:43', tmtdew=7.79, humidity=58.81, cloud=0.0, wind=35.13, temperature=11.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:10:39.763', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:10:56.409 [DEBUG] [Thread-183672] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:10:56.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-14T10:10:56.492 [DEBUG] [Thread-183675] [transport.py] [_log()] starting thread (client mode): 0xa2d12d10
2026-02-14T10:10:56.492 [DEBUG] [Thread-183675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:10:56.507 [DEBUG] [Thread-183675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:10:56.507 [INFO] [Thread-183675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:10:56.514 [DEBUG] [Thread-183675] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:10:56.514 [DEBUG] [Thread-183675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:10:56.514 [DEBUG] [Thread-183675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:10:56.514 [DEBUG] [Thread-183675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:10:56.514 [DEBUG] [Thread-183675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:10:56.514 [DEBUG] [Thread-183675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:10:56.514 [DEBUG] [Thread-183675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:10:56.514 [DEBUG] [Thread-183675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:10:56.514 [DEBUG] [Thread-183675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:10:56.514 [DEBUG] [Thread-183675] [transport.py] [_log()] client lang: <none>
2026-02-14T10:10:56.514 [DEBUG] [Thread-183675] [transport.py] [_log()] server lang: <none>
2026-02-14T10:10:56.514 [DEBUG] [Thread-183675] [transport.py] [_log()] kex follows: False
2026-02-14T10:10:56.514 [DEBUG] [Thread-183675] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:10:56.514 [DEBUG] [Thread-183675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:10:56.514 [DEBUG] [Thread-183675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:10:56.514 [DEBUG] [Thread-183675] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:10:56.514 [DEBUG] [Thread-183675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:10:56.514 [DEBUG] [Thread-183675] [transport.py] [_log()] Compression: none
2026-02-14T10:10:56.514 [DEBUG] [Thread-183675] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:10:56.572 [DEBUG] [Thread-183675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:10:56.572 [DEBUG] [Thread-183675] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:10:56.572 [DEBUG] [Thread-183675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:10:56.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:10:56.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:10:56.630 [DEBUG] [Thread-183675] [transport.py] [_log()] userauth is OK
2026-02-14T10:10:56.630 [DEBUG] [Thread-183675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:10:56.630 [DEBUG] [Thread-183675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:10:56.630 [DEBUG] [Thread-183675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:10:56.630 [DEBUG] [Thread-183675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:10:56.644 [INFO] [Thread-183675] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:10:56.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-14T10:10:56.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:10:57.462 [DEBUG] [Thread-183675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:10:57.462 [DEBUG] [Thread-183675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:10:57.510 [DEBUG] [Thread-183675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:10:57.510 [DEBUG] [Thread-183675] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:10:57.518 [DEBUG] [Thread-183675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:10:57.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:10:57.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-14T10:10:57.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-14T10:10:57.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:10:57.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:10:57.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:10:57.551 [DEBUG] [Thread-183675] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:11:01.784 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:11:01.784 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:11:02.008 [DEBUG] [Thread-183677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:11:15.832 [DEBUG] [Thread-183678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:11:17.042 [DEBUG] [Thread-183679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:11:27.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:11:27.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:11:27.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:11:29.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 11, 19), 7.81, 58.69, 0.0, 36.33, 11.54, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:11:29.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:11:19
2026-02-14T10:11:29.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:11:29.940 [DEBUG] [Thread-183680] [transport.py] [_log()] starting thread (client mode): 0xa5741db0
2026-02-14T10:11:29.940 [DEBUG] [Thread-183680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:11:29.960 [DEBUG] [Thread-183680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:11:29.960 [INFO] [Thread-183680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:11:29.961 [DEBUG] [Thread-183680] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:11:29.962 [DEBUG] [Thread-183680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:11:29.962 [DEBUG] [Thread-183680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:11:29.962 [DEBUG] [Thread-183680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:11:29.962 [DEBUG] [Thread-183680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:11:29.962 [DEBUG] [Thread-183680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:11:29.962 [DEBUG] [Thread-183680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:11:29.962 [DEBUG] [Thread-183680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:11:29.962 [DEBUG] [Thread-183680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:11:29.962 [DEBUG] [Thread-183680] [transport.py] [_log()] client lang: <none>
2026-02-14T10:11:29.962 [DEBUG] [Thread-183680] [transport.py] [_log()] server lang: <none>
2026-02-14T10:11:29.962 [DEBUG] [Thread-183680] [transport.py] [_log()] kex follows: False
2026-02-14T10:11:29.962 [DEBUG] [Thread-183680] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:11:29.962 [DEBUG] [Thread-183680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:11:29.962 [DEBUG] [Thread-183680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:11:29.962 [DEBUG] [Thread-183680] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:11:29.962 [DEBUG] [Thread-183680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:11:29.962 [DEBUG] [Thread-183680] [transport.py] [_log()] Compression: none
2026-02-14T10:11:29.962 [DEBUG] [Thread-183680] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:11:29.971 [DEBUG] [Thread-183680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:11:29.971 [DEBUG] [Thread-183680] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:11:29.971 [DEBUG] [Thread-183680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:11:29.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:11:29.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:11:29.973 [DEBUG] [Thread-183680] [transport.py] [_log()] userauth is OK
2026-02-14T10:11:29.973 [DEBUG] [Thread-183680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:11:29.973 [DEBUG] [Thread-183680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:11:29.973 [DEBUG] [Thread-183680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:11:29.973 [DEBUG] [Thread-183680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:11:29.992 [INFO] [Thread-183680] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:11:29.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:11:30.651 [DEBUG] [Thread-183680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:11:30.652 [DEBUG] [Thread-183680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:11:30.652 [DEBUG] [Thread-183680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:11:30.692 [DEBUG] [Thread-183680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:11:30.693 [DEBUG] [Thread-183680] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:11:30.696 [DEBUG] [Thread-183680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:11:30.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:11:30.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:11:30.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:11:30.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:11:30.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:11:30.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:11:30.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:11:30.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:11:30.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:11:30.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.341086 -999.00  +11.30  27.96     64   +4.90 1 1 1 1 1   888    0 7.52 61.23 ----- 28.4 28.0 146.6 37.2 17.7 -27.7 16.7 -24.4 15.5 -24.4 16.4 -25.9
2026-02-14T10:11:30.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:11:30.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:11:30.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.341086
2026-02-14T10:11:30.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:11:30.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:11:30.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:11:30.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:11:30.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:11:30.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:11:19', tmtdew=7.81, humidity=58.69, cloud=0.0, wind=36.33, temperature=11.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:11:09.830', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:11:30.722 [DEBUG] [Thread-183680] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:11:30.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-14T10:11:30.817 [DEBUG] [Thread-183683] [transport.py] [_log()] starting thread (client mode): 0xa57433d0
2026-02-14T10:11:30.817 [DEBUG] [Thread-183683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:11:30.831 [DEBUG] [Thread-183683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:11:30.831 [INFO] [Thread-183683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:11:30.839 [DEBUG] [Thread-183683] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:11:30.840 [DEBUG] [Thread-183683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:11:30.840 [DEBUG] [Thread-183683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:11:30.840 [DEBUG] [Thread-183683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:11:30.840 [DEBUG] [Thread-183683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:11:30.840 [DEBUG] [Thread-183683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:11:30.840 [DEBUG] [Thread-183683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:11:30.840 [DEBUG] [Thread-183683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:11:30.840 [DEBUG] [Thread-183683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:11:30.841 [DEBUG] [Thread-183683] [transport.py] [_log()] client lang: <none>
2026-02-14T10:11:30.841 [DEBUG] [Thread-183683] [transport.py] [_log()] server lang: <none>
2026-02-14T10:11:30.841 [DEBUG] [Thread-183683] [transport.py] [_log()] kex follows: False
2026-02-14T10:11:30.841 [DEBUG] [Thread-183683] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:11:30.841 [DEBUG] [Thread-183683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:11:30.841 [DEBUG] [Thread-183683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:11:30.841 [DEBUG] [Thread-183683] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:11:30.841 [DEBUG] [Thread-183683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:11:30.842 [DEBUG] [Thread-183683] [transport.py] [_log()] Compression: none
2026-02-14T10:11:30.842 [DEBUG] [Thread-183683] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:11:30.897 [DEBUG] [Thread-183683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:11:30.898 [DEBUG] [Thread-183683] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:11:30.898 [DEBUG] [Thread-183683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:11:30.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:11:30.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:11:30.953 [DEBUG] [Thread-183683] [transport.py] [_log()] userauth is OK
2026-02-14T10:11:30.953 [DEBUG] [Thread-183683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:11:30.954 [DEBUG] [Thread-183683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:11:30.954 [DEBUG] [Thread-183683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:11:30.954 [DEBUG] [Thread-183683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:11:30.972 [INFO] [Thread-183683] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:11:30.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T10:11:30.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:11:31.826 [DEBUG] [Thread-183683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:11:31.826 [DEBUG] [Thread-183683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:11:31.874 [DEBUG] [Thread-183683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:11:31.874 [DEBUG] [Thread-183683] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:11:31.884 [DEBUG] [Thread-183683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:11:31.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:11:31.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-14T10:11:31.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-14T10:11:31.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:11:31.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:11:31.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:11:31.921 [DEBUG] [Thread-183683] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:11:32.077 [DEBUG] [Thread-183685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:11:47.138 [DEBUG] [Thread-183686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:12:01.925 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:12:01.926 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:12:01.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:12:01.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:12:01.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:12:02.174 [DEBUG] [Thread-183687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:12:04.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 11, 54), 7.64, 59.45, 0.0, 41.29, 11.14, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:12:04.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:11:54
2026-02-14T10:12:04.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:12:04.602 [DEBUG] [Thread-183688] [transport.py] [_log()] starting thread (client mode): 0xa2d19c00
2026-02-14T10:12:04.603 [DEBUG] [Thread-183688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:12:04.623 [DEBUG] [Thread-183688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:12:04.623 [INFO] [Thread-183688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:12:04.626 [DEBUG] [Thread-183688] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:12:04.627 [DEBUG] [Thread-183688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:12:04.627 [DEBUG] [Thread-183688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:12:04.627 [DEBUG] [Thread-183688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:12:04.627 [DEBUG] [Thread-183688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:12:04.627 [DEBUG] [Thread-183688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:12:04.627 [DEBUG] [Thread-183688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:12:04.627 [DEBUG] [Thread-183688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:12:04.627 [DEBUG] [Thread-183688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:12:04.627 [DEBUG] [Thread-183688] [transport.py] [_log()] client lang: <none>
2026-02-14T10:12:04.627 [DEBUG] [Thread-183688] [transport.py] [_log()] server lang: <none>
2026-02-14T10:12:04.627 [DEBUG] [Thread-183688] [transport.py] [_log()] kex follows: False
2026-02-14T10:12:04.627 [DEBUG] [Thread-183688] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:12:04.627 [DEBUG] [Thread-183688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:12:04.627 [DEBUG] [Thread-183688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:12:04.628 [DEBUG] [Thread-183688] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:12:04.628 [DEBUG] [Thread-183688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:12:04.628 [DEBUG] [Thread-183688] [transport.py] [_log()] Compression: none
2026-02-14T10:12:04.628 [DEBUG] [Thread-183688] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:12:04.644 [DEBUG] [Thread-183688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:12:04.645 [DEBUG] [Thread-183688] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:12:04.645 [DEBUG] [Thread-183688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:12:04.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:12:04.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:12:04.647 [DEBUG] [Thread-183688] [transport.py] [_log()] userauth is OK
2026-02-14T10:12:04.647 [DEBUG] [Thread-183688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:12:04.648 [DEBUG] [Thread-183688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:12:04.648 [DEBUG] [Thread-183688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:12:04.648 [DEBUG] [Thread-183688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:12:04.671 [INFO] [Thread-183688] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:12:04.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:12:05.263 [DEBUG] [Thread-183688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:12:05.263 [DEBUG] [Thread-183688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:12:05.263 [DEBUG] [Thread-183688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:12:05.304 [DEBUG] [Thread-183688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:12:05.305 [DEBUG] [Thread-183688] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:12:05.308 [DEBUG] [Thread-183688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:12:05.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:12:05.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:12:05.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:12:05.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:12:05.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:12:05.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:12:05.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:12:05.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:12:05.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:12:05.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.341433 -999.00  +11.40  40.24     64   +4.90 1 1 2 1 1   888    0 7.95 69.00 ----- 34.3 40.2 174.4 45.1 17.7 -25.9 16.7 -23.1 15.4 -24.5 16.4 -24.4
2026-02-14T10:12:05.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:12:05.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:12:05.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.341433
2026-02-14T10:12:05.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:12:05.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:12:05.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:12:05.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:12:05.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:12:05.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:11:54', tmtdew=7.64, humidity=59.45, cloud=0.0, wind=41.29, temperature=11.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:11:39.811', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:12:05.336 [DEBUG] [Thread-183688] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:12:05.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-14T10:12:05.430 [DEBUG] [Thread-183691] [transport.py] [_log()] starting thread (client mode): 0xa2d542b0
2026-02-14T10:12:05.431 [DEBUG] [Thread-183691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:12:05.445 [DEBUG] [Thread-183691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:12:05.445 [INFO] [Thread-183691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:12:05.453 [DEBUG] [Thread-183691] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:12:05.453 [DEBUG] [Thread-183691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:12:05.453 [DEBUG] [Thread-183691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:12:05.454 [DEBUG] [Thread-183691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:12:05.454 [DEBUG] [Thread-183691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:12:05.454 [DEBUG] [Thread-183691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:12:05.454 [DEBUG] [Thread-183691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:12:05.454 [DEBUG] [Thread-183691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:12:05.454 [DEBUG] [Thread-183691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:12:05.454 [DEBUG] [Thread-183691] [transport.py] [_log()] client lang: <none>
2026-02-14T10:12:05.454 [DEBUG] [Thread-183691] [transport.py] [_log()] server lang: <none>
2026-02-14T10:12:05.454 [DEBUG] [Thread-183691] [transport.py] [_log()] kex follows: False
2026-02-14T10:12:05.454 [DEBUG] [Thread-183691] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:12:05.454 [DEBUG] [Thread-183691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:12:05.454 [DEBUG] [Thread-183691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:12:05.454 [DEBUG] [Thread-183691] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:12:05.454 [DEBUG] [Thread-183691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:12:05.454 [DEBUG] [Thread-183691] [transport.py] [_log()] Compression: none
2026-02-14T10:12:05.454 [DEBUG] [Thread-183691] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:12:05.513 [DEBUG] [Thread-183691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:12:05.514 [DEBUG] [Thread-183691] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:12:05.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:12:05.515 [DEBUG] [Thread-183691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:12:05.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:12:05.569 [DEBUG] [Thread-183691] [transport.py] [_log()] userauth is OK
2026-02-14T10:12:05.569 [DEBUG] [Thread-183691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:12:05.570 [DEBUG] [Thread-183691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:12:05.570 [DEBUG] [Thread-183691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:12:05.570 [DEBUG] [Thread-183691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:12:05.588 [INFO] [Thread-183691] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:12:05.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-14T10:12:05.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:12:06.405 [DEBUG] [Thread-183691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:12:06.405 [DEBUG] [Thread-183691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:12:06.453 [DEBUG] [Thread-183691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:12:06.453 [DEBUG] [Thread-183691] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:12:06.462 [DEBUG] [Thread-183691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:12:06.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:12:06.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-14T10:12:06.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-14T10:12:06.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:12:06.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:12:06.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:12:06.499 [DEBUG] [Thread-183691] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:12:15.890 [DEBUG] [Thread-183693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:12:17.213 [DEBUG] [Thread-183694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:12:32.262 [DEBUG] [Thread-183695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:12:36.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:12:36.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:12:36.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-14T10:12:38.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 12, 30), 7.6, 59.65, 0.0, 40.58, 11.31, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:12:38.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:12:30
2026-02-14T10:12:38.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:12:38.902 [DEBUG] [Thread-183696] [transport.py] [_log()] starting thread (client mode): 0xa2ddece0
2026-02-14T10:12:38.903 [DEBUG] [Thread-183696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:12:38.924 [DEBUG] [Thread-183696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:12:38.924 [INFO] [Thread-183696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:12:38.927 [DEBUG] [Thread-183696] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:12:38.927 [DEBUG] [Thread-183696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:12:38.927 [DEBUG] [Thread-183696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:12:38.927 [DEBUG] [Thread-183696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:12:38.927 [DEBUG] [Thread-183696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:12:38.928 [DEBUG] [Thread-183696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:12:38.928 [DEBUG] [Thread-183696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:12:38.928 [DEBUG] [Thread-183696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:12:38.928 [DEBUG] [Thread-183696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:12:38.928 [DEBUG] [Thread-183696] [transport.py] [_log()] client lang: <none>
2026-02-14T10:12:38.928 [DEBUG] [Thread-183696] [transport.py] [_log()] server lang: <none>
2026-02-14T10:12:38.928 [DEBUG] [Thread-183696] [transport.py] [_log()] kex follows: False
2026-02-14T10:12:38.928 [DEBUG] [Thread-183696] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:12:38.928 [DEBUG] [Thread-183696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:12:38.928 [DEBUG] [Thread-183696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:12:38.928 [DEBUG] [Thread-183696] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:12:38.928 [DEBUG] [Thread-183696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:12:38.928 [DEBUG] [Thread-183696] [transport.py] [_log()] Compression: none
2026-02-14T10:12:38.928 [DEBUG] [Thread-183696] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:12:38.946 [DEBUG] [Thread-183696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:12:38.946 [DEBUG] [Thread-183696] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:12:38.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:12:38.947 [DEBUG] [Thread-183696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:12:38.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:12:38.950 [DEBUG] [Thread-183696] [transport.py] [_log()] userauth is OK
2026-02-14T10:12:38.950 [DEBUG] [Thread-183696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:12:38.950 [DEBUG] [Thread-183696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:12:38.950 [DEBUG] [Thread-183696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:12:38.950 [DEBUG] [Thread-183696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:12:38.974 [INFO] [Thread-183696] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:12:38.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:12:39.589 [DEBUG] [Thread-183696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:12:39.589 [DEBUG] [Thread-183696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:12:39.590 [DEBUG] [Thread-183696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:12:39.630 [DEBUG] [Thread-183696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:12:39.631 [DEBUG] [Thread-183696] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:12:39.634 [DEBUG] [Thread-183696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:12:39.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:12:39.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:12:39.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:12:39.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:12:39.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:12:39.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:12:39.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:12:39.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:12:39.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:12:39.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.341780 -999.00  +11.40  22.33     65   +5.10 1 1 1 1 1   888    0 8.13 76.65 ----- 26.2 22.3 143.6 36.5 17.8 -25.8 16.6 -24.1 15.5 -23.9 16.4 -26.5
2026-02-14T10:12:39.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:12:39.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:12:39.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.341780
2026-02-14T10:12:39.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:12:39.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:12:39.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:12:39.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:12:39.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:12:39.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:12:30', tmtdew=7.6, humidity=59.65, cloud=0.0, wind=40.58, temperature=11.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:12:09.792', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:12:39.660 [DEBUG] [Thread-183696] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:12:39.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-14T10:12:39.765 [DEBUG] [Thread-183699] [transport.py] [_log()] starting thread (client mode): 0xa2d13d60
2026-02-14T10:12:39.765 [DEBUG] [Thread-183699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:12:39.780 [DEBUG] [Thread-183699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:12:39.780 [INFO] [Thread-183699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:12:39.787 [DEBUG] [Thread-183699] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:12:39.787 [DEBUG] [Thread-183699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:12:39.788 [DEBUG] [Thread-183699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:12:39.788 [DEBUG] [Thread-183699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:12:39.788 [DEBUG] [Thread-183699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:12:39.788 [DEBUG] [Thread-183699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:12:39.788 [DEBUG] [Thread-183699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:12:39.788 [DEBUG] [Thread-183699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:12:39.788 [DEBUG] [Thread-183699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:12:39.788 [DEBUG] [Thread-183699] [transport.py] [_log()] client lang: <none>
2026-02-14T10:12:39.788 [DEBUG] [Thread-183699] [transport.py] [_log()] server lang: <none>
2026-02-14T10:12:39.788 [DEBUG] [Thread-183699] [transport.py] [_log()] kex follows: False
2026-02-14T10:12:39.788 [DEBUG] [Thread-183699] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:12:39.788 [DEBUG] [Thread-183699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:12:39.788 [DEBUG] [Thread-183699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:12:39.788 [DEBUG] [Thread-183699] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:12:39.788 [DEBUG] [Thread-183699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:12:39.788 [DEBUG] [Thread-183699] [transport.py] [_log()] Compression: none
2026-02-14T10:12:39.788 [DEBUG] [Thread-183699] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:12:39.844 [DEBUG] [Thread-183699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:12:39.845 [DEBUG] [Thread-183699] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:12:39.845 [DEBUG] [Thread-183699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:12:39.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:12:39.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:12:39.901 [DEBUG] [Thread-183699] [transport.py] [_log()] userauth is OK
2026-02-14T10:12:39.901 [DEBUG] [Thread-183699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:12:39.901 [DEBUG] [Thread-183699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:12:39.901 [DEBUG] [Thread-183699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:12:39.902 [DEBUG] [Thread-183699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:12:39.921 [INFO] [Thread-183699] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:12:39.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-14T10:12:39.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:12:40.759 [DEBUG] [Thread-183699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:12:40.759 [DEBUG] [Thread-183699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:12:40.807 [DEBUG] [Thread-183699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:12:40.807 [DEBUG] [Thread-183699] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:12:40.816 [DEBUG] [Thread-183699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:12:40.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:12:40.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:12:40.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-14T10:12:40.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:12:40.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:12:40.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:12:40.853 [DEBUG] [Thread-183699] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:12:47.294 [DEBUG] [Thread-183701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:13:02.068 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:13:02.069 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:13:02.348 [DEBUG] [Thread-183702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:13:10.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:13:10.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:13:10.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-14T10:13:12.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 12, 30), 7.6, 59.65, 0.0, 40.58, 11.31, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:13:12.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:12:30
2026-02-14T10:13:13.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:13:13.365 [DEBUG] [Thread-183703] [transport.py] [_log()] starting thread (client mode): 0xa2d3dae0
2026-02-14T10:13:13.365 [DEBUG] [Thread-183703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:13:13.386 [DEBUG] [Thread-183703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:13:13.386 [INFO] [Thread-183703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:13:13.389 [DEBUG] [Thread-183703] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:13:13.389 [DEBUG] [Thread-183703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:13:13.390 [DEBUG] [Thread-183703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:13:13.390 [DEBUG] [Thread-183703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:13:13.390 [DEBUG] [Thread-183703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:13:13.390 [DEBUG] [Thread-183703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:13:13.390 [DEBUG] [Thread-183703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:13:13.390 [DEBUG] [Thread-183703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:13:13.390 [DEBUG] [Thread-183703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:13:13.390 [DEBUG] [Thread-183703] [transport.py] [_log()] client lang: <none>
2026-02-14T10:13:13.390 [DEBUG] [Thread-183703] [transport.py] [_log()] server lang: <none>
2026-02-14T10:13:13.390 [DEBUG] [Thread-183703] [transport.py] [_log()] kex follows: False
2026-02-14T10:13:13.390 [DEBUG] [Thread-183703] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:13:13.390 [DEBUG] [Thread-183703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:13:13.390 [DEBUG] [Thread-183703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:13:13.390 [DEBUG] [Thread-183703] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:13:13.391 [DEBUG] [Thread-183703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:13:13.391 [DEBUG] [Thread-183703] [transport.py] [_log()] Compression: none
2026-02-14T10:13:13.391 [DEBUG] [Thread-183703] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:13:13.410 [DEBUG] [Thread-183703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:13:13.411 [DEBUG] [Thread-183703] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:13:13.411 [DEBUG] [Thread-183703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:13:13.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:13:13.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:13:13.413 [DEBUG] [Thread-183703] [transport.py] [_log()] userauth is OK
2026-02-14T10:13:13.413 [DEBUG] [Thread-183703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:13:13.414 [DEBUG] [Thread-183703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:13:13.414 [DEBUG] [Thread-183703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:13:13.414 [DEBUG] [Thread-183703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:13:13.437 [INFO] [Thread-183703] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:13:13.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:13:14.094 [DEBUG] [Thread-183703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:13:14.094 [DEBUG] [Thread-183703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:13:14.094 [DEBUG] [Thread-183703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:13:14.135 [DEBUG] [Thread-183703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:13:14.135 [DEBUG] [Thread-183703] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:13:14.138 [DEBUG] [Thread-183703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:13:14.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:13:14.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:13:14.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:13:14.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:13:14.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:13:14.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:13:14.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:13:14.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:13:14.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:13:14.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.342127 -999.00  +11.50  29.37     65   +5.20 1 1 1 1 1   888    0 7.89 70.58 ----- 26.2 29.4 186.0 35.3 17.8 -25.1 16.7 -25.5 15.5 -23.6 16.4 -24.1
2026-02-14T10:13:14.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:13:14.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:13:14.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.342127
2026-02-14T10:13:14.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:13:14.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:13:14.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:13:14.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:13:14.162 [DEBUG] [Thread-183703] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:13:14.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:13:14.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:12:30', tmtdew=7.6, humidity=59.65, cloud=0.0, wind=40.58, temperature=11.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:12:39.773', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:13:14.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-14T10:13:14.265 [DEBUG] [Thread-183706] [transport.py] [_log()] starting thread (client mode): 0xa2ddd930
2026-02-14T10:13:14.265 [DEBUG] [Thread-183706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:13:14.279 [DEBUG] [Thread-183706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:13:14.279 [INFO] [Thread-183706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:13:14.287 [DEBUG] [Thread-183706] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:13:14.287 [DEBUG] [Thread-183706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:13:14.287 [DEBUG] [Thread-183706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:13:14.287 [DEBUG] [Thread-183706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:13:14.287 [DEBUG] [Thread-183706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:13:14.287 [DEBUG] [Thread-183706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:13:14.288 [DEBUG] [Thread-183706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:13:14.288 [DEBUG] [Thread-183706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:13:14.288 [DEBUG] [Thread-183706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:13:14.288 [DEBUG] [Thread-183706] [transport.py] [_log()] client lang: <none>
2026-02-14T10:13:14.288 [DEBUG] [Thread-183706] [transport.py] [_log()] server lang: <none>
2026-02-14T10:13:14.288 [DEBUG] [Thread-183706] [transport.py] [_log()] kex follows: False
2026-02-14T10:13:14.288 [DEBUG] [Thread-183706] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:13:14.288 [DEBUG] [Thread-183706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:13:14.288 [DEBUG] [Thread-183706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:13:14.289 [DEBUG] [Thread-183706] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:13:14.289 [DEBUG] [Thread-183706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:13:14.289 [DEBUG] [Thread-183706] [transport.py] [_log()] Compression: none
2026-02-14T10:13:14.289 [DEBUG] [Thread-183706] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:13:14.346 [DEBUG] [Thread-183706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:13:14.346 [DEBUG] [Thread-183706] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:13:14.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:13:14.347 [DEBUG] [Thread-183706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:13:14.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:13:14.403 [DEBUG] [Thread-183706] [transport.py] [_log()] userauth is OK
2026-02-14T10:13:14.403 [DEBUG] [Thread-183706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:13:14.403 [DEBUG] [Thread-183706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:13:14.403 [DEBUG] [Thread-183706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:13:14.403 [DEBUG] [Thread-183706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:13:14.425 [INFO] [Thread-183706] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:13:14.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-14T10:13:14.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:13:15.250 [DEBUG] [Thread-183706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:13:15.251 [DEBUG] [Thread-183706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:13:15.298 [DEBUG] [Thread-183706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:13:15.298 [DEBUG] [Thread-183706] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:13:15.308 [DEBUG] [Thread-183706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:13:15.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:13:15.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:13:15.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-14T10:13:15.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:13:15.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:13:15.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:13:15.343 [DEBUG] [Thread-183706] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:13:15.947 [DEBUG] [Thread-183708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:13:17.380 [DEBUG] [Thread-183709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:13:32.441 [DEBUG] [Thread-183710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:13:45.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:13:45.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:13:45.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-14T10:13:47.479 [DEBUG] [Thread-183711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:13:47.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 13, 5), 7.71, 59.22, 0.0, 37.53, 11.32, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:13:47.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:13:05
2026-02-14T10:13:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:13:48.106 [DEBUG] [Thread-183712] [transport.py] [_log()] starting thread (client mode): 0xa2ddff70
2026-02-14T10:13:48.106 [DEBUG] [Thread-183712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:13:48.127 [DEBUG] [Thread-183712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:13:48.127 [INFO] [Thread-183712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:13:48.130 [DEBUG] [Thread-183712] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:13:48.131 [DEBUG] [Thread-183712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:13:48.131 [DEBUG] [Thread-183712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:13:48.131 [DEBUG] [Thread-183712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:13:48.131 [DEBUG] [Thread-183712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:13:48.131 [DEBUG] [Thread-183712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:13:48.131 [DEBUG] [Thread-183712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:13:48.131 [DEBUG] [Thread-183712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:13:48.131 [DEBUG] [Thread-183712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:13:48.131 [DEBUG] [Thread-183712] [transport.py] [_log()] client lang: <none>
2026-02-14T10:13:48.131 [DEBUG] [Thread-183712] [transport.py] [_log()] server lang: <none>
2026-02-14T10:13:48.131 [DEBUG] [Thread-183712] [transport.py] [_log()] kex follows: False
2026-02-14T10:13:48.131 [DEBUG] [Thread-183712] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:13:48.131 [DEBUG] [Thread-183712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:13:48.132 [DEBUG] [Thread-183712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:13:48.132 [DEBUG] [Thread-183712] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:13:48.132 [DEBUG] [Thread-183712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:13:48.132 [DEBUG] [Thread-183712] [transport.py] [_log()] Compression: none
2026-02-14T10:13:48.132 [DEBUG] [Thread-183712] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:13:48.151 [DEBUG] [Thread-183712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:13:48.151 [DEBUG] [Thread-183712] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:13:48.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:13:48.153 [DEBUG] [Thread-183712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:13:48.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:13:48.155 [DEBUG] [Thread-183712] [transport.py] [_log()] userauth is OK
2026-02-14T10:13:48.155 [DEBUG] [Thread-183712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:13:48.155 [DEBUG] [Thread-183712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:13:48.155 [DEBUG] [Thread-183712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:13:48.155 [DEBUG] [Thread-183712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:13:48.181 [INFO] [Thread-183712] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:13:48.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:13:48.831 [DEBUG] [Thread-183712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:13:48.831 [DEBUG] [Thread-183712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:13:48.831 [DEBUG] [Thread-183712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:13:48.872 [DEBUG] [Thread-183712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:13:48.872 [DEBUG] [Thread-183712] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:13:48.874 [DEBUG] [Thread-183712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:13:48.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:13:48.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:13:48.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:13:48.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:13:48.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:13:48.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:13:48.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:13:48.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:13:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:13:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.342474 -999.00  +11.50  21.07     64   +5.00 1 1 1 1 1   888    0 8.10 73.81 ----- 26.2 21.1 180.8 31.7 17.8 -25.1 16.3 -29.3 15.5 -23.8 16.4 -25.4
2026-02-14T10:13:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:13:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:13:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.342474
2026-02-14T10:13:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:13:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:13:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:13:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:13:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:13:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:13:05', tmtdew=7.71, humidity=59.22, cloud=0.0, wind=37.53, temperature=11.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:13:09.754', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:13:48.896 [DEBUG] [Thread-183712] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:13:48.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-14T10:13:48.979 [DEBUG] [Thread-183715] [transport.py] [_log()] starting thread (client mode): 0xa2d11690
2026-02-14T10:13:48.980 [DEBUG] [Thread-183715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:13:48.995 [DEBUG] [Thread-183715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:13:48.995 [INFO] [Thread-183715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:13:49.002 [DEBUG] [Thread-183715] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:13:49.002 [DEBUG] [Thread-183715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:13:49.002 [DEBUG] [Thread-183715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:13:49.002 [DEBUG] [Thread-183715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:13:49.002 [DEBUG] [Thread-183715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:13:49.002 [DEBUG] [Thread-183715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:13:49.002 [DEBUG] [Thread-183715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:13:49.002 [DEBUG] [Thread-183715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:13:49.002 [DEBUG] [Thread-183715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:13:49.002 [DEBUG] [Thread-183715] [transport.py] [_log()] client lang: <none>
2026-02-14T10:13:49.002 [DEBUG] [Thread-183715] [transport.py] [_log()] server lang: <none>
2026-02-14T10:13:49.002 [DEBUG] [Thread-183715] [transport.py] [_log()] kex follows: False
2026-02-14T10:13:49.002 [DEBUG] [Thread-183715] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:13:49.002 [DEBUG] [Thread-183715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:13:49.002 [DEBUG] [Thread-183715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:13:49.002 [DEBUG] [Thread-183715] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:13:49.002 [DEBUG] [Thread-183715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:13:49.002 [DEBUG] [Thread-183715] [transport.py] [_log()] Compression: none
2026-02-14T10:13:49.002 [DEBUG] [Thread-183715] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:13:49.061 [DEBUG] [Thread-183715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:13:49.061 [DEBUG] [Thread-183715] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:13:49.061 [DEBUG] [Thread-183715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:13:49.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:13:49.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:13:49.118 [DEBUG] [Thread-183715] [transport.py] [_log()] userauth is OK
2026-02-14T10:13:49.118 [DEBUG] [Thread-183715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:13:49.118 [DEBUG] [Thread-183715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:13:49.118 [DEBUG] [Thread-183715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:13:49.118 [DEBUG] [Thread-183715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:13:49.133 [INFO] [Thread-183715] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:13:49.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-14T10:13:49.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:13:49.938 [DEBUG] [Thread-183715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:13:49.938 [DEBUG] [Thread-183715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:13:49.986 [DEBUG] [Thread-183715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:13:49.987 [DEBUG] [Thread-183715] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:13:49.996 [DEBUG] [Thread-183715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:13:50.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:13:50.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-14T10:13:50.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-14T10:13:50.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:13:50.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:13:50.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:13:50.033 [DEBUG] [Thread-183715] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:14:02.209 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:14:02.210 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:14:02.519 [DEBUG] [Thread-183717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:14:16.012 [DEBUG] [Thread-183718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:14:17.572 [DEBUG] [Thread-183719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:14:20.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:14:20.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:14:20.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-14T10:14:21.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 13, 40), 8.31, 56.84, 0.0, 34.33, 12.41, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:14:21.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:13:40
2026-02-14T10:14:22.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:14:22.441 [DEBUG] [Thread-183720] [transport.py] [_log()] starting thread (client mode): 0xa2d57280
2026-02-14T10:14:22.441 [DEBUG] [Thread-183720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:14:22.462 [DEBUG] [Thread-183720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:14:22.462 [INFO] [Thread-183720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:14:22.465 [DEBUG] [Thread-183720] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:14:22.465 [DEBUG] [Thread-183720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:14:22.466 [DEBUG] [Thread-183720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:14:22.466 [DEBUG] [Thread-183720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:14:22.466 [DEBUG] [Thread-183720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:14:22.466 [DEBUG] [Thread-183720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:14:22.466 [DEBUG] [Thread-183720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:14:22.466 [DEBUG] [Thread-183720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:14:22.466 [DEBUG] [Thread-183720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:14:22.466 [DEBUG] [Thread-183720] [transport.py] [_log()] client lang: <none>
2026-02-14T10:14:22.466 [DEBUG] [Thread-183720] [transport.py] [_log()] server lang: <none>
2026-02-14T10:14:22.466 [DEBUG] [Thread-183720] [transport.py] [_log()] kex follows: False
2026-02-14T10:14:22.466 [DEBUG] [Thread-183720] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:14:22.466 [DEBUG] [Thread-183720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:14:22.466 [DEBUG] [Thread-183720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:14:22.467 [DEBUG] [Thread-183720] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:14:22.467 [DEBUG] [Thread-183720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:14:22.467 [DEBUG] [Thread-183720] [transport.py] [_log()] Compression: none
2026-02-14T10:14:22.467 [DEBUG] [Thread-183720] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:14:22.486 [DEBUG] [Thread-183720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:14:22.487 [DEBUG] [Thread-183720] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:14:22.487 [DEBUG] [Thread-183720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:14:22.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:14:22.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:14:22.489 [DEBUG] [Thread-183720] [transport.py] [_log()] userauth is OK
2026-02-14T10:14:22.490 [DEBUG] [Thread-183720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:14:22.490 [DEBUG] [Thread-183720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:14:22.490 [DEBUG] [Thread-183720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:14:22.490 [DEBUG] [Thread-183720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:14:22.504 [INFO] [Thread-183720] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:14:22.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:14:23.146 [DEBUG] [Thread-183720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:14:23.146 [DEBUG] [Thread-183720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:14:23.147 [DEBUG] [Thread-183720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:14:23.188 [DEBUG] [Thread-183720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:14:23.189 [DEBUG] [Thread-183720] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:14:23.192 [DEBUG] [Thread-183720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:14:23.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:14:23.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:14:23.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:14:23.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:14:23.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:14:23.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:14:23.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:14:23.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:14:23.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:14:23.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.343169 -999.00  +11.50  24.34     63   +4.80 1 1 1 1 1   888    0 8.10 74.74 ----- 28.2 24.3 149.9 44.4 17.9 -27.9 16.8 -24.6 15.6 -25.0 16.5 -26.7
2026-02-14T10:14:23.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:14:23.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:14:23.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.343169
2026-02-14T10:14:23.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:14:23.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:14:23.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:14:23.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:14:23.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:14:23.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:13:40', tmtdew=8.31, humidity=56.84, cloud=0.0, wind=34.33, temperature=12.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:14:09.802', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:14:23.215 [DEBUG] [Thread-183720] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:14:23.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-14T10:14:23.317 [DEBUG] [Thread-183723] [transport.py] [_log()] starting thread (client mode): 0xa2d57160
2026-02-14T10:14:23.317 [DEBUG] [Thread-183723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:14:23.332 [DEBUG] [Thread-183723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:14:23.332 [INFO] [Thread-183723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:14:23.342 [DEBUG] [Thread-183723] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:14:23.342 [DEBUG] [Thread-183723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:14:23.342 [DEBUG] [Thread-183723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:14:23.342 [DEBUG] [Thread-183723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:14:23.342 [DEBUG] [Thread-183723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:14:23.342 [DEBUG] [Thread-183723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:14:23.342 [DEBUG] [Thread-183723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:14:23.342 [DEBUG] [Thread-183723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:14:23.342 [DEBUG] [Thread-183723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:14:23.342 [DEBUG] [Thread-183723] [transport.py] [_log()] client lang: <none>
2026-02-14T10:14:23.342 [DEBUG] [Thread-183723] [transport.py] [_log()] server lang: <none>
2026-02-14T10:14:23.342 [DEBUG] [Thread-183723] [transport.py] [_log()] kex follows: False
2026-02-14T10:14:23.342 [DEBUG] [Thread-183723] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:14:23.342 [DEBUG] [Thread-183723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:14:23.343 [DEBUG] [Thread-183723] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:14:23.343 [DEBUG] [Thread-183723] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:14:23.343 [DEBUG] [Thread-183723] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:14:23.343 [DEBUG] [Thread-183723] [transport.py] [_log()] Compression: none
2026-02-14T10:14:23.343 [DEBUG] [Thread-183723] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:14:23.398 [DEBUG] [Thread-183723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:14:23.399 [DEBUG] [Thread-183723] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:14:23.399 [DEBUG] [Thread-183723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:14:23.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:14:23.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:14:23.457 [DEBUG] [Thread-183723] [transport.py] [_log()] userauth is OK
2026-02-14T10:14:23.457 [DEBUG] [Thread-183723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:14:23.457 [DEBUG] [Thread-183723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:14:23.458 [DEBUG] [Thread-183723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:14:23.458 [DEBUG] [Thread-183723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:14:23.477 [INFO] [Thread-183723] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:14:23.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-14T10:14:23.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:14:24.282 [DEBUG] [Thread-183723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:14:24.282 [DEBUG] [Thread-183723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:14:24.330 [DEBUG] [Thread-183723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:14:24.331 [DEBUG] [Thread-183723] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:14:24.340 [DEBUG] [Thread-183723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:14:24.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:14:24.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:14:24.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:14:24.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:14:24.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:14:24.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:14:24.376 [DEBUG] [Thread-183723] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:14:32.610 [DEBUG] [Thread-183725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:14:47.662 [DEBUG] [Thread-183726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:14:54.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:14:54.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:14:54.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-14T10:14:56.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 14, 16), 7.98, 58.31, 0.0, 30.19, 11.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:14:56.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:14:16
2026-02-14T10:14:56.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:14:56.949 [DEBUG] [Thread-183727] [transport.py] [_log()] starting thread (client mode): 0xa2d57040
2026-02-14T10:14:56.950 [DEBUG] [Thread-183727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:14:56.970 [DEBUG] [Thread-183727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:14:56.971 [INFO] [Thread-183727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:14:56.975 [DEBUG] [Thread-183727] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:14:56.975 [DEBUG] [Thread-183727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:14:56.975 [DEBUG] [Thread-183727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:14:56.975 [DEBUG] [Thread-183727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:14:56.975 [DEBUG] [Thread-183727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:14:56.975 [DEBUG] [Thread-183727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:14:56.975 [DEBUG] [Thread-183727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:14:56.975 [DEBUG] [Thread-183727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:14:56.975 [DEBUG] [Thread-183727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:14:56.975 [DEBUG] [Thread-183727] [transport.py] [_log()] client lang: <none>
2026-02-14T10:14:56.976 [DEBUG] [Thread-183727] [transport.py] [_log()] server lang: <none>
2026-02-14T10:14:56.976 [DEBUG] [Thread-183727] [transport.py] [_log()] kex follows: False
2026-02-14T10:14:56.976 [DEBUG] [Thread-183727] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:14:56.976 [DEBUG] [Thread-183727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:14:56.976 [DEBUG] [Thread-183727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:14:56.976 [DEBUG] [Thread-183727] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:14:56.976 [DEBUG] [Thread-183727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:14:56.976 [DEBUG] [Thread-183727] [transport.py] [_log()] Compression: none
2026-02-14T10:14:56.976 [DEBUG] [Thread-183727] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:14:56.996 [DEBUG] [Thread-183727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:14:56.996 [DEBUG] [Thread-183727] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:14:56.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:14:56.997 [DEBUG] [Thread-183727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:14:56.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:14:56.999 [DEBUG] [Thread-183727] [transport.py] [_log()] userauth is OK
2026-02-14T10:14:57.000 [DEBUG] [Thread-183727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:14:57.000 [DEBUG] [Thread-183727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:14:57.000 [DEBUG] [Thread-183727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:14:57.000 [DEBUG] [Thread-183727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:14:57.036 [INFO] [Thread-183727] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:14:57.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:14:57.685 [DEBUG] [Thread-183727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:14:57.686 [DEBUG] [Thread-183727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:14:57.686 [DEBUG] [Thread-183727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:14:57.726 [DEBUG] [Thread-183727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:14:57.726 [DEBUG] [Thread-183727] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:14:57.729 [DEBUG] [Thread-183727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:14:57.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:14:57.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:14:57.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:14:57.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:14:57.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:14:57.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:14:57.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:14:57.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:14:57.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:14:57.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.343516 -999.00  +11.30  28.71     64   +4.90 1 1 1 1 1   888    0 8.14 76.09 ----- 26.5 28.7 171.1 39.7 17.8 -26.0 16.6 -25.0 15.5 -23.5 16.4 -25.2
2026-02-14T10:14:57.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:14:57.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:14:57.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.343516
2026-02-14T10:14:57.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:14:57.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:14:57.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:14:57.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:14:57.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:14:57.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:14:16', tmtdew=7.98, humidity=58.31, cloud=0.0, wind=30.19, temperature=11.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:14:39.782', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:14:57.755 [DEBUG] [Thread-183727] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:14:57.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T10:14:57.850 [DEBUG] [Thread-183730] [transport.py] [_log()] starting thread (client mode): 0xa2db7490
2026-02-14T10:14:57.850 [DEBUG] [Thread-183730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:14:57.865 [DEBUG] [Thread-183730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:14:57.865 [INFO] [Thread-183730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:14:57.873 [DEBUG] [Thread-183730] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:14:57.873 [DEBUG] [Thread-183730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:14:57.873 [DEBUG] [Thread-183730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:14:57.873 [DEBUG] [Thread-183730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:14:57.873 [DEBUG] [Thread-183730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:14:57.874 [DEBUG] [Thread-183730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:14:57.874 [DEBUG] [Thread-183730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:14:57.874 [DEBUG] [Thread-183730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:14:57.874 [DEBUG] [Thread-183730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:14:57.874 [DEBUG] [Thread-183730] [transport.py] [_log()] client lang: <none>
2026-02-14T10:14:57.874 [DEBUG] [Thread-183730] [transport.py] [_log()] server lang: <none>
2026-02-14T10:14:57.874 [DEBUG] [Thread-183730] [transport.py] [_log()] kex follows: False
2026-02-14T10:14:57.874 [DEBUG] [Thread-183730] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:14:57.874 [DEBUG] [Thread-183730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:14:57.874 [DEBUG] [Thread-183730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:14:57.874 [DEBUG] [Thread-183730] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:14:57.874 [DEBUG] [Thread-183730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:14:57.874 [DEBUG] [Thread-183730] [transport.py] [_log()] Compression: none
2026-02-14T10:14:57.874 [DEBUG] [Thread-183730] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:14:57.931 [DEBUG] [Thread-183730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:14:57.932 [DEBUG] [Thread-183730] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:14:57.933 [DEBUG] [Thread-183730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:14:57.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:14:57.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:14:57.988 [DEBUG] [Thread-183730] [transport.py] [_log()] userauth is OK
2026-02-14T10:14:57.988 [DEBUG] [Thread-183730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:14:57.988 [DEBUG] [Thread-183730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:14:57.988 [DEBUG] [Thread-183730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:14:57.989 [DEBUG] [Thread-183730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:14:58.013 [INFO] [Thread-183730] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:14:58.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-14T10:14:58.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:14:58.847 [DEBUG] [Thread-183730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:14:58.848 [DEBUG] [Thread-183730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:14:58.896 [DEBUG] [Thread-183730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:14:58.896 [DEBUG] [Thread-183730] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:14:58.905 [DEBUG] [Thread-183730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:14:58.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:14:58.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:14:58.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:14:58.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:14:58.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:14:58.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:14:58.942 [DEBUG] [Thread-183730] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:15:02.353 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:15:02.354 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:15:02.699 [DEBUG] [Thread-183732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:15:16.057 [DEBUG] [Thread-183733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:15:17.756 [DEBUG] [Thread-183734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:15:28.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:15:28.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:15:28.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-14T10:15:31.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 14, 51), 8.27, 56.96, 0.0, 33.61, 11.89, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:15:31.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:14:51
2026-02-14T10:15:31.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:15:32.079 [DEBUG] [Thread-183735] [transport.py] [_log()] starting thread (client mode): 0xa2d783a0
2026-02-14T10:15:32.079 [DEBUG] [Thread-183735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:15:32.095 [DEBUG] [Thread-183735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:15:32.095 [INFO] [Thread-183735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:15:32.098 [DEBUG] [Thread-183735] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:15:32.098 [DEBUG] [Thread-183735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:15:32.098 [DEBUG] [Thread-183735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:15:32.098 [DEBUG] [Thread-183735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:15:32.098 [DEBUG] [Thread-183735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:15:32.098 [DEBUG] [Thread-183735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:15:32.098 [DEBUG] [Thread-183735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:15:32.098 [DEBUG] [Thread-183735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:15:32.099 [DEBUG] [Thread-183735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:15:32.099 [DEBUG] [Thread-183735] [transport.py] [_log()] client lang: <none>
2026-02-14T10:15:32.099 [DEBUG] [Thread-183735] [transport.py] [_log()] server lang: <none>
2026-02-14T10:15:32.099 [DEBUG] [Thread-183735] [transport.py] [_log()] kex follows: False
2026-02-14T10:15:32.099 [DEBUG] [Thread-183735] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:15:32.099 [DEBUG] [Thread-183735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:15:32.099 [DEBUG] [Thread-183735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:15:32.099 [DEBUG] [Thread-183735] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:15:32.099 [DEBUG] [Thread-183735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:15:32.099 [DEBUG] [Thread-183735] [transport.py] [_log()] Compression: none
2026-02-14T10:15:32.099 [DEBUG] [Thread-183735] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:15:32.111 [DEBUG] [Thread-183735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:15:32.112 [DEBUG] [Thread-183735] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:15:32.112 [DEBUG] [Thread-183735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:15:32.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:15:32.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:15:32.157 [DEBUG] [Thread-183735] [transport.py] [_log()] userauth is OK
2026-02-14T10:15:32.157 [DEBUG] [Thread-183735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:15:32.157 [DEBUG] [Thread-183735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:15:32.157 [DEBUG] [Thread-183735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:15:32.157 [DEBUG] [Thread-183735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:15:32.194 [INFO] [Thread-183735] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:15:32.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:15:32.789 [DEBUG] [Thread-183737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:15:32.868 [DEBUG] [Thread-183735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:15:32.869 [DEBUG] [Thread-183735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:15:32.869 [DEBUG] [Thread-183735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:15:32.910 [DEBUG] [Thread-183735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:15:32.910 [DEBUG] [Thread-183735] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:15:32.912 [DEBUG] [Thread-183735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:15:32.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:15:32.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:15:32.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:15:32.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:15:32.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:15:32.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:15:32.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:15:32.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:15:32.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:15:32.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.343863 -999.00  +11.20  23.70     65   +4.90 1 1 1 1 1   888    0 8.09 76.97 ----- 22.0 23.7 161.0 34.3 17.7 -26.9 16.6 -24.4 15.5 -23.3 16.4 -26.3
2026-02-14T10:15:32.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:15:32.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:15:32.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.343863
2026-02-14T10:15:32.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:15:32.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:15:32.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:15:32.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:15:32.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:15:32.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:14:51', tmtdew=8.27, humidity=56.96, cloud=0.0, wind=33.61, temperature=11.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:15:09.763', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:15:32.934 [DEBUG] [Thread-183735] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:15:33.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-14T10:15:33.033 [DEBUG] [Thread-183739] [transport.py] [_log()] starting thread (client mode): 0xa2d79e10
2026-02-14T10:15:33.033 [DEBUG] [Thread-183739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:15:33.047 [DEBUG] [Thread-183739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:15:33.047 [INFO] [Thread-183739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:15:33.054 [DEBUG] [Thread-183739] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:15:33.054 [DEBUG] [Thread-183739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:15:33.054 [DEBUG] [Thread-183739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:15:33.054 [DEBUG] [Thread-183739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:15:33.054 [DEBUG] [Thread-183739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:15:33.054 [DEBUG] [Thread-183739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:15:33.054 [DEBUG] [Thread-183739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:15:33.054 [DEBUG] [Thread-183739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:15:33.055 [DEBUG] [Thread-183739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:15:33.055 [DEBUG] [Thread-183739] [transport.py] [_log()] client lang: <none>
2026-02-14T10:15:33.055 [DEBUG] [Thread-183739] [transport.py] [_log()] server lang: <none>
2026-02-14T10:15:33.055 [DEBUG] [Thread-183739] [transport.py] [_log()] kex follows: False
2026-02-14T10:15:33.055 [DEBUG] [Thread-183739] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:15:33.055 [DEBUG] [Thread-183739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:15:33.055 [DEBUG] [Thread-183739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:15:33.055 [DEBUG] [Thread-183739] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:15:33.055 [DEBUG] [Thread-183739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:15:33.055 [DEBUG] [Thread-183739] [transport.py] [_log()] Compression: none
2026-02-14T10:15:33.055 [DEBUG] [Thread-183739] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:15:33.109 [DEBUG] [Thread-183739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:15:33.109 [DEBUG] [Thread-183739] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:15:33.109 [DEBUG] [Thread-183739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:15:33.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:15:33.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:15:33.167 [DEBUG] [Thread-183739] [transport.py] [_log()] userauth is OK
2026-02-14T10:15:33.167 [DEBUG] [Thread-183739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:15:33.167 [DEBUG] [Thread-183739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:15:33.167 [DEBUG] [Thread-183739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:15:33.167 [DEBUG] [Thread-183739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:15:33.186 [INFO] [Thread-183739] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:15:33.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-14T10:15:33.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:15:33.993 [DEBUG] [Thread-183739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:15:33.994 [DEBUG] [Thread-183739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:15:34.042 [DEBUG] [Thread-183739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:15:34.042 [DEBUG] [Thread-183739] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:15:34.051 [DEBUG] [Thread-183739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:15:34.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:15:34.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:15:34.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-14T10:15:34.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:15:34.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:15:34.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:15:34.090 [DEBUG] [Thread-183739] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:15:47.830 [DEBUG] [Thread-183741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:16:02.492 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:16:02.493 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:16:02.881 [DEBUG] [Thread-183742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:16:04.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:16:04.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:16:04.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-14T10:16:06.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 15, 26), 8.42, 56.38, 0.0, 32.73, 11.99, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:16:06.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:15:26
2026-02-14T10:16:06.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:16:06.864 [DEBUG] [Thread-183743] [transport.py] [_log()] starting thread (client mode): 0xa2d18850
2026-02-14T10:16:06.864 [DEBUG] [Thread-183743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:16:06.883 [DEBUG] [Thread-183743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:16:06.883 [INFO] [Thread-183743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:16:06.886 [DEBUG] [Thread-183743] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:16:06.887 [DEBUG] [Thread-183743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:16:06.887 [DEBUG] [Thread-183743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:16:06.887 [DEBUG] [Thread-183743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:16:06.887 [DEBUG] [Thread-183743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:16:06.887 [DEBUG] [Thread-183743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:16:06.887 [DEBUG] [Thread-183743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:16:06.887 [DEBUG] [Thread-183743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:16:06.887 [DEBUG] [Thread-183743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:16:06.887 [DEBUG] [Thread-183743] [transport.py] [_log()] client lang: <none>
2026-02-14T10:16:06.887 [DEBUG] [Thread-183743] [transport.py] [_log()] server lang: <none>
2026-02-14T10:16:06.887 [DEBUG] [Thread-183743] [transport.py] [_log()] kex follows: False
2026-02-14T10:16:06.887 [DEBUG] [Thread-183743] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:16:06.887 [DEBUG] [Thread-183743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:16:06.887 [DEBUG] [Thread-183743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:16:06.887 [DEBUG] [Thread-183743] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:16:06.887 [DEBUG] [Thread-183743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:16:06.887 [DEBUG] [Thread-183743] [transport.py] [_log()] Compression: none
2026-02-14T10:16:06.887 [DEBUG] [Thread-183743] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:16:06.905 [DEBUG] [Thread-183743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:16:06.906 [DEBUG] [Thread-183743] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:16:06.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:16:06.907 [DEBUG] [Thread-183743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:16:06.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:16:06.909 [DEBUG] [Thread-183743] [transport.py] [_log()] userauth is OK
2026-02-14T10:16:06.909 [DEBUG] [Thread-183743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:16:06.910 [DEBUG] [Thread-183743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:16:06.910 [DEBUG] [Thread-183743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:16:06.910 [DEBUG] [Thread-183743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:16:06.929 [INFO] [Thread-183743] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:16:06.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:16:07.522 [DEBUG] [Thread-183743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:16:07.522 [DEBUG] [Thread-183743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:16:07.523 [DEBUG] [Thread-183743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:16:07.563 [DEBUG] [Thread-183743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:16:07.564 [DEBUG] [Thread-183743] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:16:07.569 [DEBUG] [Thread-183743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:16:07.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:16:07.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:16:07.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:16:07.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:16:07.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:16:07.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:16:07.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:16:07.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:16:07.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:16:07.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.344211 -999.00  +11.40  22.07     65   +5.10 1 1 1 1 1   888    0 8.14 76.29 ----- 16.9 22.1 174.6 32.2 17.8 -26.2 16.5 -27.4 15.6 -23.5 16.5 -25.0
2026-02-14T10:16:07.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:16:07.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:16:07.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.344211
2026-02-14T10:16:07.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:16:07.586 [DEBUG] [Thread-183743] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:16:07.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:16:07.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:16:07.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:16:07.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:16:07.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:15:26', tmtdew=8.42, humidity=56.38, cloud=0.0, wind=32.73, temperature=11.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:15:39.830', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:16:07.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-14T10:16:07.681 [DEBUG] [Thread-183746] [transport.py] [_log()] starting thread (client mode): 0xa2d1b550
2026-02-14T10:16:07.681 [DEBUG] [Thread-183746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:16:07.696 [DEBUG] [Thread-183746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:16:07.696 [INFO] [Thread-183746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:16:07.705 [DEBUG] [Thread-183746] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:16:07.705 [DEBUG] [Thread-183746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:16:07.705 [DEBUG] [Thread-183746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:16:07.705 [DEBUG] [Thread-183746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:16:07.705 [DEBUG] [Thread-183746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:16:07.705 [DEBUG] [Thread-183746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:16:07.706 [DEBUG] [Thread-183746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:16:07.706 [DEBUG] [Thread-183746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:16:07.706 [DEBUG] [Thread-183746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:16:07.706 [DEBUG] [Thread-183746] [transport.py] [_log()] client lang: <none>
2026-02-14T10:16:07.706 [DEBUG] [Thread-183746] [transport.py] [_log()] server lang: <none>
2026-02-14T10:16:07.706 [DEBUG] [Thread-183746] [transport.py] [_log()] kex follows: False
2026-02-14T10:16:07.706 [DEBUG] [Thread-183746] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:16:07.706 [DEBUG] [Thread-183746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:16:07.706 [DEBUG] [Thread-183746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:16:07.706 [DEBUG] [Thread-183746] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:16:07.706 [DEBUG] [Thread-183746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:16:07.706 [DEBUG] [Thread-183746] [transport.py] [_log()] Compression: none
2026-02-14T10:16:07.706 [DEBUG] [Thread-183746] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:16:07.764 [DEBUG] [Thread-183746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:16:07.765 [DEBUG] [Thread-183746] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:16:07.765 [DEBUG] [Thread-183746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:16:07.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:16:07.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:16:07.819 [DEBUG] [Thread-183746] [transport.py] [_log()] userauth is OK
2026-02-14T10:16:07.820 [DEBUG] [Thread-183746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:16:07.820 [DEBUG] [Thread-183746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:16:07.820 [DEBUG] [Thread-183746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:16:07.820 [DEBUG] [Thread-183746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:16:07.838 [INFO] [Thread-183746] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:16:07.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-14T10:16:07.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:16:08.664 [DEBUG] [Thread-183746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:16:08.664 [DEBUG] [Thread-183746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:16:08.712 [DEBUG] [Thread-183746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:16:08.712 [DEBUG] [Thread-183746] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:16:08.721 [DEBUG] [Thread-183746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:16:08.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:16:08.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')
2026-02-14T10:16:08.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-14T10:16:08.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:16:08.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:16:08.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:16:08.758 [DEBUG] [Thread-183746] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:16:16.095 [DEBUG] [Thread-183748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:16:17.919 [DEBUG] [Thread-183749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:16:32.970 [DEBUG] [Thread-183750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:16:38.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:16:38.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:16:38.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-14T10:16:41.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 16, 3), 8.41, 56.4, 0.0, 32.78, 11.9, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:16:41.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:16:03
2026-02-14T10:16:41.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:16:41.613 [DEBUG] [Thread-183751] [transport.py] [_log()] starting thread (client mode): 0xa2db7e20
2026-02-14T10:16:41.613 [DEBUG] [Thread-183751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:16:41.635 [DEBUG] [Thread-183751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:16:41.635 [INFO] [Thread-183751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:16:41.638 [DEBUG] [Thread-183751] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:16:41.638 [DEBUG] [Thread-183751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:16:41.638 [DEBUG] [Thread-183751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:16:41.638 [DEBUG] [Thread-183751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:16:41.638 [DEBUG] [Thread-183751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:16:41.639 [DEBUG] [Thread-183751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:16:41.639 [DEBUG] [Thread-183751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:16:41.639 [DEBUG] [Thread-183751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:16:41.639 [DEBUG] [Thread-183751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:16:41.639 [DEBUG] [Thread-183751] [transport.py] [_log()] client lang: <none>
2026-02-14T10:16:41.639 [DEBUG] [Thread-183751] [transport.py] [_log()] server lang: <none>
2026-02-14T10:16:41.639 [DEBUG] [Thread-183751] [transport.py] [_log()] kex follows: False
2026-02-14T10:16:41.639 [DEBUG] [Thread-183751] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:16:41.639 [DEBUG] [Thread-183751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:16:41.639 [DEBUG] [Thread-183751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:16:41.639 [DEBUG] [Thread-183751] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:16:41.639 [DEBUG] [Thread-183751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:16:41.639 [DEBUG] [Thread-183751] [transport.py] [_log()] Compression: none
2026-02-14T10:16:41.639 [DEBUG] [Thread-183751] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:16:41.656 [DEBUG] [Thread-183751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:16:41.657 [DEBUG] [Thread-183751] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:16:41.657 [DEBUG] [Thread-183751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:16:41.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:16:41.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:16:41.659 [DEBUG] [Thread-183751] [transport.py] [_log()] userauth is OK
2026-02-14T10:16:41.660 [DEBUG] [Thread-183751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:16:41.660 [DEBUG] [Thread-183751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:16:41.660 [DEBUG] [Thread-183751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:16:41.660 [DEBUG] [Thread-183751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:16:41.684 [INFO] [Thread-183751] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:16:41.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:16:42.325 [DEBUG] [Thread-183751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:16:42.325 [DEBUG] [Thread-183751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:16:42.325 [DEBUG] [Thread-183751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:16:42.367 [DEBUG] [Thread-183751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:16:42.367 [DEBUG] [Thread-183751] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:16:42.371 [DEBUG] [Thread-183751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:16:42.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:16:42.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:16:42.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:16:42.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:16:42.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:16:42.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:16:42.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:16:42.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:16:42.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:16:42.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.344558 -999.00  +11.60  15.27     65   +5.20 1 2 1 1 1   888    0 8.11 74.44 ----- 22.2 15.3 174.0 28.1 18.0 -25.2 16.8 -23.3 15.8 -22.2 16.7 -24.0
2026-02-14T10:16:42.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:16:42.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:16:42.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.344558
2026-02-14T10:16:42.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:16:42.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:16:42.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:16:42.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:16:42.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:16:42.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:16:03', tmtdew=8.41, humidity=56.4, cloud=0.0, wind=32.78, temperature=11.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:16:09.811', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:16:42.400 [DEBUG] [Thread-183751] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:16:42.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T10:16:42.496 [DEBUG] [Thread-183754] [transport.py] [_log()] starting thread (client mode): 0xa2db73a0
2026-02-14T10:16:42.496 [DEBUG] [Thread-183754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:16:42.510 [DEBUG] [Thread-183754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:16:42.511 [INFO] [Thread-183754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:16:42.518 [DEBUG] [Thread-183754] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:16:42.519 [DEBUG] [Thread-183754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:16:42.519 [DEBUG] [Thread-183754] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:16:42.519 [DEBUG] [Thread-183754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:16:42.519 [DEBUG] [Thread-183754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:16:42.519 [DEBUG] [Thread-183754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:16:42.519 [DEBUG] [Thread-183754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:16:42.519 [DEBUG] [Thread-183754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:16:42.519 [DEBUG] [Thread-183754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:16:42.519 [DEBUG] [Thread-183754] [transport.py] [_log()] client lang: <none>
2026-02-14T10:16:42.519 [DEBUG] [Thread-183754] [transport.py] [_log()] server lang: <none>
2026-02-14T10:16:42.519 [DEBUG] [Thread-183754] [transport.py] [_log()] kex follows: False
2026-02-14T10:16:42.519 [DEBUG] [Thread-183754] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:16:42.519 [DEBUG] [Thread-183754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:16:42.519 [DEBUG] [Thread-183754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:16:42.519 [DEBUG] [Thread-183754] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:16:42.520 [DEBUG] [Thread-183754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:16:42.520 [DEBUG] [Thread-183754] [transport.py] [_log()] Compression: none
2026-02-14T10:16:42.520 [DEBUG] [Thread-183754] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:16:42.577 [DEBUG] [Thread-183754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:16:42.578 [DEBUG] [Thread-183754] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:16:42.578 [DEBUG] [Thread-183754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:16:42.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:16:42.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:16:42.636 [DEBUG] [Thread-183754] [transport.py] [_log()] userauth is OK
2026-02-14T10:16:42.636 [DEBUG] [Thread-183754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:16:42.637 [DEBUG] [Thread-183754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:16:42.637 [DEBUG] [Thread-183754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:16:42.637 [DEBUG] [Thread-183754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:16:42.656 [INFO] [Thread-183754] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:16:42.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-14T10:16:42.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:16:43.476 [DEBUG] [Thread-183754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:16:43.476 [DEBUG] [Thread-183754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:16:43.525 [DEBUG] [Thread-183754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:16:43.525 [DEBUG] [Thread-183754] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:16:43.534 [DEBUG] [Thread-183754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:16:43.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:16:43.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-14T10:16:43.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-14T10:16:43.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:16:43.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:16:43.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:16:43.574 [DEBUG] [Thread-183754] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:16:48.010 [DEBUG] [Thread-183756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:17:02.633 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:17:02.635 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:17:03.063 [DEBUG] [Thread-183757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:17:13.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:17:13.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:17:13.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:17:15.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 16, 38), 8.46, 56.28, 0.0, 42.97, 12.58, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:17:15.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:16:38
2026-02-14T10:17:16.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:17:16.123 [DEBUG] [Thread-183758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:17:16.172 [DEBUG] [Thread-183759] [transport.py] [_log()] starting thread (client mode): 0xa2d1be20
2026-02-14T10:17:16.172 [DEBUG] [Thread-183759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:17:16.193 [DEBUG] [Thread-183759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:17:16.193 [INFO] [Thread-183759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:17:16.196 [DEBUG] [Thread-183759] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:17:16.196 [DEBUG] [Thread-183759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:17:16.196 [DEBUG] [Thread-183759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:17:16.196 [DEBUG] [Thread-183759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:17:16.196 [DEBUG] [Thread-183759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:17:16.196 [DEBUG] [Thread-183759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:17:16.196 [DEBUG] [Thread-183759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:17:16.196 [DEBUG] [Thread-183759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:17:16.196 [DEBUG] [Thread-183759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:17:16.196 [DEBUG] [Thread-183759] [transport.py] [_log()] client lang: <none>
2026-02-14T10:17:16.196 [DEBUG] [Thread-183759] [transport.py] [_log()] server lang: <none>
2026-02-14T10:17:16.197 [DEBUG] [Thread-183759] [transport.py] [_log()] kex follows: False
2026-02-14T10:17:16.197 [DEBUG] [Thread-183759] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:17:16.197 [DEBUG] [Thread-183759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:17:16.197 [DEBUG] [Thread-183759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:17:16.197 [DEBUG] [Thread-183759] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:17:16.197 [DEBUG] [Thread-183759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:17:16.197 [DEBUG] [Thread-183759] [transport.py] [_log()] Compression: none
2026-02-14T10:17:16.197 [DEBUG] [Thread-183759] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:17:16.217 [DEBUG] [Thread-183759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:17:16.217 [DEBUG] [Thread-183759] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:17:16.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:17:16.218 [DEBUG] [Thread-183759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:17:16.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:17:16.222 [DEBUG] [Thread-183759] [transport.py] [_log()] userauth is OK
2026-02-14T10:17:16.222 [DEBUG] [Thread-183759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:17:16.222 [DEBUG] [Thread-183759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:17:16.222 [DEBUG] [Thread-183759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:17:16.222 [DEBUG] [Thread-183759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:17:16.247 [INFO] [Thread-183759] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:17:16.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:17:16.906 [DEBUG] [Thread-183759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:17:16.906 [DEBUG] [Thread-183759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:17:16.907 [DEBUG] [Thread-183759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:17:16.948 [DEBUG] [Thread-183759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:17:16.948 [DEBUG] [Thread-183759] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:17:16.952 [DEBUG] [Thread-183759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:17:16.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:17:16.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:17:16.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:17:16.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:17:16.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:17:16.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:17:16.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:17:16.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:17:16.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:17:16.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.344905 -999.00  +11.70  25.18     64   +5.10 1 1 1 1 1   888    0 8.35 77.31 ----- 21.8 25.2 166.2 38.0 17.9 -27.3 16.6 -29.2 15.7 -23.5 16.6 -25.8
2026-02-14T10:17:16.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:17:16.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:17:16.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.344905
2026-02-14T10:17:16.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:17:16.977 [DEBUG] [Thread-183759] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:17:16.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:17:16.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:17:16.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:17:16.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:17:16.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:16:38', tmtdew=8.46, humidity=56.28, cloud=0.0, wind=42.97, temperature=12.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:16:39.792', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:17:17.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-14T10:17:17.073 [DEBUG] [Thread-183762] [transport.py] [_log()] starting thread (client mode): 0xa2db51e0
2026-02-14T10:17:17.073 [DEBUG] [Thread-183762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:17:17.089 [DEBUG] [Thread-183762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:17:17.089 [INFO] [Thread-183762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:17:17.096 [DEBUG] [Thread-183762] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:17:17.097 [DEBUG] [Thread-183762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:17:17.097 [DEBUG] [Thread-183762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:17:17.097 [DEBUG] [Thread-183762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:17:17.097 [DEBUG] [Thread-183762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:17:17.097 [DEBUG] [Thread-183762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:17:17.097 [DEBUG] [Thread-183762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:17:17.097 [DEBUG] [Thread-183762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:17:17.097 [DEBUG] [Thread-183762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:17:17.097 [DEBUG] [Thread-183762] [transport.py] [_log()] client lang: <none>
2026-02-14T10:17:17.097 [DEBUG] [Thread-183762] [transport.py] [_log()] server lang: <none>
2026-02-14T10:17:17.097 [DEBUG] [Thread-183762] [transport.py] [_log()] kex follows: False
2026-02-14T10:17:17.097 [DEBUG] [Thread-183762] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:17:17.097 [DEBUG] [Thread-183762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:17:17.097 [DEBUG] [Thread-183762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:17:17.097 [DEBUG] [Thread-183762] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:17:17.097 [DEBUG] [Thread-183762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:17:17.097 [DEBUG] [Thread-183762] [transport.py] [_log()] Compression: none
2026-02-14T10:17:17.097 [DEBUG] [Thread-183762] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:17:17.154 [DEBUG] [Thread-183762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:17:17.155 [DEBUG] [Thread-183762] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:17:17.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:17:17.156 [DEBUG] [Thread-183762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:17:17.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:17:17.210 [DEBUG] [Thread-183762] [transport.py] [_log()] userauth is OK
2026-02-14T10:17:17.210 [DEBUG] [Thread-183762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:17:17.210 [DEBUG] [Thread-183762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:17:17.210 [DEBUG] [Thread-183762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:17:17.210 [DEBUG] [Thread-183762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:17:17.230 [INFO] [Thread-183762] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:17:17.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T10:17:17.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:17:18.051 [DEBUG] [Thread-183762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:17:18.052 [DEBUG] [Thread-183762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:17:18.099 [DEBUG] [Thread-183762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:17:18.101 [DEBUG] [Thread-183764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:17:18.107 [DEBUG] [Thread-183762] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:17:18.116 [DEBUG] [Thread-183762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:17:18.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:17:18.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-14T10:17:18.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-14T10:17:18.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:17:18.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:17:18.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:17:18.153 [DEBUG] [Thread-183762] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:17:33.151 [DEBUG] [Thread-183765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:17:48.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:17:48.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:17:48.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-14T10:17:48.187 [DEBUG] [Thread-183766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:17:49.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 17, 14), 7.96, 57.99, 0.0, 37.44, 11.59, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:17:49.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:17:14
2026-02-14T10:17:50.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:17:50.426 [DEBUG] [Thread-183767] [transport.py] [_log()] starting thread (client mode): 0xa2d3e530
2026-02-14T10:17:50.426 [DEBUG] [Thread-183767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:17:50.443 [DEBUG] [Thread-183767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:17:50.443 [INFO] [Thread-183767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:17:50.446 [DEBUG] [Thread-183767] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:17:50.446 [DEBUG] [Thread-183767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:17:50.446 [DEBUG] [Thread-183767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:17:50.446 [DEBUG] [Thread-183767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:17:50.446 [DEBUG] [Thread-183767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:17:50.446 [DEBUG] [Thread-183767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:17:50.446 [DEBUG] [Thread-183767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:17:50.446 [DEBUG] [Thread-183767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:17:50.447 [DEBUG] [Thread-183767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:17:50.447 [DEBUG] [Thread-183767] [transport.py] [_log()] client lang: <none>
2026-02-14T10:17:50.447 [DEBUG] [Thread-183767] [transport.py] [_log()] server lang: <none>
2026-02-14T10:17:50.447 [DEBUG] [Thread-183767] [transport.py] [_log()] kex follows: False
2026-02-14T10:17:50.447 [DEBUG] [Thread-183767] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:17:50.447 [DEBUG] [Thread-183767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:17:50.447 [DEBUG] [Thread-183767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:17:50.447 [DEBUG] [Thread-183767] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:17:50.447 [DEBUG] [Thread-183767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:17:50.447 [DEBUG] [Thread-183767] [transport.py] [_log()] Compression: none
2026-02-14T10:17:50.447 [DEBUG] [Thread-183767] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:17:50.464 [DEBUG] [Thread-183767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:17:50.464 [DEBUG] [Thread-183767] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:17:50.465 [DEBUG] [Thread-183767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:17:50.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:17:50.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:17:50.467 [DEBUG] [Thread-183767] [transport.py] [_log()] userauth is OK
2026-02-14T10:17:50.467 [DEBUG] [Thread-183767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:17:50.467 [DEBUG] [Thread-183767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:17:50.467 [DEBUG] [Thread-183767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:17:50.467 [DEBUG] [Thread-183767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:17:50.503 [INFO] [Thread-183767] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:17:50.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:17:51.104 [DEBUG] [Thread-183767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:17:51.104 [DEBUG] [Thread-183767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:17:51.104 [DEBUG] [Thread-183767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:17:51.146 [DEBUG] [Thread-183767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:17:51.146 [DEBUG] [Thread-183767] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:17:51.149 [DEBUG] [Thread-183767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:17:51.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:17:51.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:17:51.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:17:51.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:17:51.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:17:51.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:17:51.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:17:51.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:17:51.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:17:51.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.345252 -999.00  +11.80  28.35     64   +5.20 1 1 1 1 1   888    0 8.19 75.34 ----- 24.2 28.4 166.8 33.2 18.1 -25.5 16.8 -22.7 15.8 -24.1 16.8 -24.4
2026-02-14T10:17:51.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:17:51.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:17:51.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.345252
2026-02-14T10:17:51.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:17:51.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:17:51.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:17:51.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:17:51.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:17:51.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:17:14', tmtdew=7.96, humidity=57.99, cloud=0.0, wind=37.44, temperature=11.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:17:09.773', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:17:51.174 [DEBUG] [Thread-183767] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:17:51.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-14T10:17:51.268 [DEBUG] [Thread-183770] [transport.py] [_log()] starting thread (client mode): 0xa2db7040
2026-02-14T10:17:51.268 [DEBUG] [Thread-183770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:17:51.282 [DEBUG] [Thread-183770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:17:51.283 [INFO] [Thread-183770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:17:51.290 [DEBUG] [Thread-183770] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:17:51.291 [DEBUG] [Thread-183770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:17:51.291 [DEBUG] [Thread-183770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:17:51.291 [DEBUG] [Thread-183770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:17:51.291 [DEBUG] [Thread-183770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:17:51.291 [DEBUG] [Thread-183770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:17:51.291 [DEBUG] [Thread-183770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:17:51.291 [DEBUG] [Thread-183770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:17:51.291 [DEBUG] [Thread-183770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:17:51.291 [DEBUG] [Thread-183770] [transport.py] [_log()] client lang: <none>
2026-02-14T10:17:51.291 [DEBUG] [Thread-183770] [transport.py] [_log()] server lang: <none>
2026-02-14T10:17:51.291 [DEBUG] [Thread-183770] [transport.py] [_log()] kex follows: False
2026-02-14T10:17:51.291 [DEBUG] [Thread-183770] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:17:51.291 [DEBUG] [Thread-183770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:17:51.291 [DEBUG] [Thread-183770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:17:51.291 [DEBUG] [Thread-183770] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:17:51.291 [DEBUG] [Thread-183770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:17:51.291 [DEBUG] [Thread-183770] [transport.py] [_log()] Compression: none
2026-02-14T10:17:51.291 [DEBUG] [Thread-183770] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:17:51.348 [DEBUG] [Thread-183770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:17:51.349 [DEBUG] [Thread-183770] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:17:51.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:17:51.350 [DEBUG] [Thread-183770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:17:51.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:17:51.408 [DEBUG] [Thread-183770] [transport.py] [_log()] userauth is OK
2026-02-14T10:17:51.409 [DEBUG] [Thread-183770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:17:51.409 [DEBUG] [Thread-183770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:17:51.409 [DEBUG] [Thread-183770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:17:51.409 [DEBUG] [Thread-183770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:17:51.428 [INFO] [Thread-183770] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:17:51.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T10:17:51.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:17:52.243 [DEBUG] [Thread-183770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:17:52.243 [DEBUG] [Thread-183770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:17:52.291 [DEBUG] [Thread-183770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:17:52.291 [DEBUG] [Thread-183770] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:17:52.299 [DEBUG] [Thread-183770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:17:52.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:17:52.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-14T10:17:52.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:17:52.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:17:52.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:17:52.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:17:52.331 [DEBUG] [Thread-183770] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:18:02.777 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:18:02.778 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:18:03.222 [DEBUG] [Thread-183772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:18:16.182 [DEBUG] [Thread-183773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:18:18.273 [DEBUG] [Thread-183774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:18:22.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:18:22.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:18:22.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:18:24.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 17, 50), 7.57, 59.69, 0.0, 29.98, 11.27, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:18:24.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:17:50
2026-02-14T10:18:24.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:18:24.879 [DEBUG] [Thread-183775] [transport.py] [_log()] starting thread (client mode): 0xa2d3eaa0
2026-02-14T10:18:24.879 [DEBUG] [Thread-183775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:18:24.900 [DEBUG] [Thread-183775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:18:24.900 [INFO] [Thread-183775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:18:24.903 [DEBUG] [Thread-183775] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:18:24.903 [DEBUG] [Thread-183775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:18:24.903 [DEBUG] [Thread-183775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:18:24.903 [DEBUG] [Thread-183775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:18:24.903 [DEBUG] [Thread-183775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:18:24.903 [DEBUG] [Thread-183775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:18:24.903 [DEBUG] [Thread-183775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:18:24.903 [DEBUG] [Thread-183775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:18:24.903 [DEBUG] [Thread-183775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:18:24.903 [DEBUG] [Thread-183775] [transport.py] [_log()] client lang: <none>
2026-02-14T10:18:24.903 [DEBUG] [Thread-183775] [transport.py] [_log()] server lang: <none>
2026-02-14T10:18:24.903 [DEBUG] [Thread-183775] [transport.py] [_log()] kex follows: False
2026-02-14T10:18:24.903 [DEBUG] [Thread-183775] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:18:24.903 [DEBUG] [Thread-183775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:18:24.904 [DEBUG] [Thread-183775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:18:24.904 [DEBUG] [Thread-183775] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:18:24.904 [DEBUG] [Thread-183775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:18:24.904 [DEBUG] [Thread-183775] [transport.py] [_log()] Compression: none
2026-02-14T10:18:24.904 [DEBUG] [Thread-183775] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:18:24.920 [DEBUG] [Thread-183775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:18:24.921 [DEBUG] [Thread-183775] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:18:24.921 [DEBUG] [Thread-183775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:18:24.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:18:24.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:18:24.923 [DEBUG] [Thread-183775] [transport.py] [_log()] userauth is OK
2026-02-14T10:18:24.923 [DEBUG] [Thread-183775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:18:24.924 [DEBUG] [Thread-183775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:18:24.924 [DEBUG] [Thread-183775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:18:24.924 [DEBUG] [Thread-183775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:18:24.942 [INFO] [Thread-183775] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:18:24.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:18:25.555 [DEBUG] [Thread-183775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:18:25.556 [DEBUG] [Thread-183775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:18:25.556 [DEBUG] [Thread-183775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:18:25.596 [DEBUG] [Thread-183775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:18:25.597 [DEBUG] [Thread-183775] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:18:25.599 [DEBUG] [Thread-183775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:18:25.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:18:25.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:18:25.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:18:25.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:18:25.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:18:25.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:18:25.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:18:25.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:18:25.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:18:25.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.345947 -999.00  +11.50  23.66     65   +5.20 1 2 1 1 1   888    0 7.99 63.28 ----- 22.0 23.7 160.2 30.8 18.1 -26.3 17.0 -23.7 15.9 -22.2 16.8 -25.3
2026-02-14T10:18:25.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:18:25.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:18:25.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.345947
2026-02-14T10:18:25.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:18:25.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:18:25.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:18:25.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:18:25.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:18:25.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:17:50', tmtdew=7.57, humidity=59.69, cloud=0.0, wind=29.98, temperature=11.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:18:09.821', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:18:25.625 [DEBUG] [Thread-183775] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:18:25.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-14T10:18:25.722 [DEBUG] [Thread-183778] [transport.py] [_log()] starting thread (client mode): 0xa2d3d870
2026-02-14T10:18:25.722 [DEBUG] [Thread-183778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:18:25.736 [DEBUG] [Thread-183778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:18:25.737 [INFO] [Thread-183778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:18:25.744 [DEBUG] [Thread-183778] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:18:25.744 [DEBUG] [Thread-183778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:18:25.744 [DEBUG] [Thread-183778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:18:25.744 [DEBUG] [Thread-183778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:18:25.744 [DEBUG] [Thread-183778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:18:25.744 [DEBUG] [Thread-183778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:18:25.744 [DEBUG] [Thread-183778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:18:25.744 [DEBUG] [Thread-183778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:18:25.744 [DEBUG] [Thread-183778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:18:25.744 [DEBUG] [Thread-183778] [transport.py] [_log()] client lang: <none>
2026-02-14T10:18:25.745 [DEBUG] [Thread-183778] [transport.py] [_log()] server lang: <none>
2026-02-14T10:18:25.745 [DEBUG] [Thread-183778] [transport.py] [_log()] kex follows: False
2026-02-14T10:18:25.745 [DEBUG] [Thread-183778] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:18:25.745 [DEBUG] [Thread-183778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:18:25.745 [DEBUG] [Thread-183778] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:18:25.745 [DEBUG] [Thread-183778] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:18:25.745 [DEBUG] [Thread-183778] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:18:25.745 [DEBUG] [Thread-183778] [transport.py] [_log()] Compression: none
2026-02-14T10:18:25.745 [DEBUG] [Thread-183778] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:18:25.802 [DEBUG] [Thread-183778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:18:25.803 [DEBUG] [Thread-183778] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:18:25.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:18:25.804 [DEBUG] [Thread-183778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:18:25.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:18:25.861 [DEBUG] [Thread-183778] [transport.py] [_log()] userauth is OK
2026-02-14T10:18:25.861 [DEBUG] [Thread-183778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:18:25.861 [DEBUG] [Thread-183778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:18:25.861 [DEBUG] [Thread-183778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:18:25.862 [DEBUG] [Thread-183778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:18:25.880 [INFO] [Thread-183778] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:18:25.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T10:18:25.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:18:26.682 [DEBUG] [Thread-183778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:18:26.682 [DEBUG] [Thread-183778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:18:26.731 [DEBUG] [Thread-183778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:18:26.731 [DEBUG] [Thread-183778] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:18:26.740 [DEBUG] [Thread-183778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:18:26.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:18:26.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-14T10:18:26.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:18:26.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:18:26.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:18:26.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:18:26.779 [DEBUG] [Thread-183778] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:18:33.310 [DEBUG] [Thread-183780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:18:48.352 [DEBUG] [Thread-183781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:18:56.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:18:56.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:18:56.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-14T10:18:58.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 18, 25), 7.44, 60.23, 0.0, 31.02, 11.31, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:18:58.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:18:25
2026-02-14T10:18:59.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:18:59.204 [DEBUG] [Thread-183782] [transport.py] [_log()] starting thread (client mode): 0xa2dde3e0
2026-02-14T10:18:59.204 [DEBUG] [Thread-183782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:18:59.224 [DEBUG] [Thread-183782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:18:59.224 [INFO] [Thread-183782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:18:59.226 [DEBUG] [Thread-183782] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:18:59.226 [DEBUG] [Thread-183782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:18:59.226 [DEBUG] [Thread-183782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:18:59.226 [DEBUG] [Thread-183782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:18:59.226 [DEBUG] [Thread-183782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:18:59.226 [DEBUG] [Thread-183782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:18:59.227 [DEBUG] [Thread-183782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:18:59.227 [DEBUG] [Thread-183782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:18:59.227 [DEBUG] [Thread-183782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:18:59.227 [DEBUG] [Thread-183782] [transport.py] [_log()] client lang: <none>
2026-02-14T10:18:59.227 [DEBUG] [Thread-183782] [transport.py] [_log()] server lang: <none>
2026-02-14T10:18:59.227 [DEBUG] [Thread-183782] [transport.py] [_log()] kex follows: False
2026-02-14T10:18:59.227 [DEBUG] [Thread-183782] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:18:59.227 [DEBUG] [Thread-183782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:18:59.227 [DEBUG] [Thread-183782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:18:59.227 [DEBUG] [Thread-183782] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:18:59.227 [DEBUG] [Thread-183782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:18:59.227 [DEBUG] [Thread-183782] [transport.py] [_log()] Compression: none
2026-02-14T10:18:59.227 [DEBUG] [Thread-183782] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:18:59.240 [DEBUG] [Thread-183782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:18:59.240 [DEBUG] [Thread-183782] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:18:59.241 [DEBUG] [Thread-183782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:18:59.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:18:59.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:18:59.243 [DEBUG] [Thread-183782] [transport.py] [_log()] userauth is OK
2026-02-14T10:18:59.243 [DEBUG] [Thread-183782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:18:59.243 [DEBUG] [Thread-183782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:18:59.243 [DEBUG] [Thread-183782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:18:59.243 [DEBUG] [Thread-183782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:18:59.262 [INFO] [Thread-183782] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:18:59.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:18:59.890 [DEBUG] [Thread-183782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:18:59.890 [DEBUG] [Thread-183782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:18:59.891 [DEBUG] [Thread-183782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:18:59.931 [DEBUG] [Thread-183782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:18:59.932 [DEBUG] [Thread-183782] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:18:59.935 [DEBUG] [Thread-183782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:18:59.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:18:59.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:18:59.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:18:59.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:18:59.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:18:59.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:18:59.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:18:59.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:18:59.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:18:59.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.346294 -999.00  +11.80  19.35     63   +5.20 1 1 1 1 1   888    0 7.88 61.88 ----- 29.5 19.4 164.8 31.8 18.2 -25.9 17.1 -23.9 15.9 -25.1 16.9 -24.6
2026-02-14T10:18:59.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:18:59.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:18:59.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.346294
2026-02-14T10:18:59.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:18:59.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:18:59.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:18:59.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:18:59.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:18:59.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:18:25', tmtdew=7.44, humidity=60.23, cloud=0.0, wind=31.02, temperature=11.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:18:39.802', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:18:59.960 [DEBUG] [Thread-183782] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:19:00.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-14T10:19:00.057 [DEBUG] [Thread-183785] [transport.py] [_log()] starting thread (client mode): 0xa2ddcdc0
2026-02-14T10:19:00.057 [DEBUG] [Thread-183785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:19:00.071 [DEBUG] [Thread-183785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:19:00.071 [INFO] [Thread-183785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:19:00.079 [DEBUG] [Thread-183785] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:19:00.079 [DEBUG] [Thread-183785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:19:00.079 [DEBUG] [Thread-183785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:19:00.079 [DEBUG] [Thread-183785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:19:00.080 [DEBUG] [Thread-183785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:19:00.080 [DEBUG] [Thread-183785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:19:00.080 [DEBUG] [Thread-183785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:19:00.080 [DEBUG] [Thread-183785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:19:00.080 [DEBUG] [Thread-183785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:19:00.080 [DEBUG] [Thread-183785] [transport.py] [_log()] client lang: <none>
2026-02-14T10:19:00.080 [DEBUG] [Thread-183785] [transport.py] [_log()] server lang: <none>
2026-02-14T10:19:00.080 [DEBUG] [Thread-183785] [transport.py] [_log()] kex follows: False
2026-02-14T10:19:00.080 [DEBUG] [Thread-183785] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:19:00.080 [DEBUG] [Thread-183785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:19:00.080 [DEBUG] [Thread-183785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:19:00.080 [DEBUG] [Thread-183785] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:19:00.080 [DEBUG] [Thread-183785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:19:00.080 [DEBUG] [Thread-183785] [transport.py] [_log()] Compression: none
2026-02-14T10:19:00.080 [DEBUG] [Thread-183785] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:19:00.136 [DEBUG] [Thread-183785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:19:00.137 [DEBUG] [Thread-183785] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:19:00.137 [DEBUG] [Thread-183785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:19:00.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:19:00.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:19:00.197 [DEBUG] [Thread-183785] [transport.py] [_log()] userauth is OK
2026-02-14T10:19:00.197 [DEBUG] [Thread-183785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:19:00.197 [DEBUG] [Thread-183785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:19:00.197 [DEBUG] [Thread-183785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:19:00.198 [DEBUG] [Thread-183785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:19:00.216 [INFO] [Thread-183785] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:19:00.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T10:19:00.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:19:01.042 [DEBUG] [Thread-183785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:19:01.042 [DEBUG] [Thread-183785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:19:01.092 [DEBUG] [Thread-183785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:19:01.092 [DEBUG] [Thread-183785] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:19:01.103 [DEBUG] [Thread-183785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:19:01.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:19:01.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-14T10:19:01.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:19:01.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:19:01.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:19:01.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:19:01.147 [DEBUG] [Thread-183785] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:19:02.918 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:19:02.919 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:19:03.388 [DEBUG] [Thread-183787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:19:16.254 [DEBUG] [Thread-183788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:19:18.440 [DEBUG] [Thread-183789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:19:31.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:19:31.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:19:31.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-14T10:19:33.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 19, 1), 7.48, 60.12, 0.0, 30.54, 11.44, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:19:33.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:19:01
2026-02-14T10:19:33.477 [DEBUG] [Thread-183790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:19:33.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:19:33.819 [DEBUG] [Thread-183791] [transport.py] [_log()] starting thread (client mode): 0xa2d3eef0
2026-02-14T10:19:33.819 [DEBUG] [Thread-183791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:19:33.838 [DEBUG] [Thread-183791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:19:33.838 [INFO] [Thread-183791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:19:33.842 [DEBUG] [Thread-183791] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:19:33.842 [DEBUG] [Thread-183791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:19:33.842 [DEBUG] [Thread-183791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:19:33.842 [DEBUG] [Thread-183791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:19:33.842 [DEBUG] [Thread-183791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:19:33.842 [DEBUG] [Thread-183791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:19:33.842 [DEBUG] [Thread-183791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:19:33.842 [DEBUG] [Thread-183791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:19:33.842 [DEBUG] [Thread-183791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:19:33.842 [DEBUG] [Thread-183791] [transport.py] [_log()] client lang: <none>
2026-02-14T10:19:33.842 [DEBUG] [Thread-183791] [transport.py] [_log()] server lang: <none>
2026-02-14T10:19:33.842 [DEBUG] [Thread-183791] [transport.py] [_log()] kex follows: False
2026-02-14T10:19:33.842 [DEBUG] [Thread-183791] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:19:33.842 [DEBUG] [Thread-183791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:19:33.843 [DEBUG] [Thread-183791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:19:33.843 [DEBUG] [Thread-183791] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:19:33.843 [DEBUG] [Thread-183791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:19:33.843 [DEBUG] [Thread-183791] [transport.py] [_log()] Compression: none
2026-02-14T10:19:33.843 [DEBUG] [Thread-183791] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:19:33.860 [DEBUG] [Thread-183791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:19:33.861 [DEBUG] [Thread-183791] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:19:33.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:19:33.861 [DEBUG] [Thread-183791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:19:33.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:19:33.863 [DEBUG] [Thread-183791] [transport.py] [_log()] userauth is OK
2026-02-14T10:19:33.863 [DEBUG] [Thread-183791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:19:33.864 [DEBUG] [Thread-183791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:19:33.864 [DEBUG] [Thread-183791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:19:33.864 [DEBUG] [Thread-183791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:19:33.898 [INFO] [Thread-183791] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:19:33.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:19:34.517 [DEBUG] [Thread-183791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:19:34.517 [DEBUG] [Thread-183791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:19:34.518 [DEBUG] [Thread-183791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:19:34.558 [DEBUG] [Thread-183791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:19:34.559 [DEBUG] [Thread-183791] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:19:34.561 [DEBUG] [Thread-183791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:19:34.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:19:34.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:19:34.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:19:34.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:19:34.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:19:34.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:19:34.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:19:34.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:19:34.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:19:34.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.346641 -999.00  +11.70  35.13     63   +5.10 1 1 2 1 1   888    0 8.02 63.82 ----- 27.1 35.1 177.4 42.4 18.1 -25.8 16.7 -28.3 15.8 -24.7 16.8 -25.3
2026-02-14T10:19:34.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:19:34.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:19:34.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.346641
2026-02-14T10:19:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:19:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:19:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:19:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:19:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:19:34.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:19:01', tmtdew=7.48, humidity=60.12, cloud=0.0, wind=30.54, temperature=11.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:19:09.782', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:19:34.585 [DEBUG] [Thread-183791] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:19:34.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-14T10:19:34.680 [DEBUG] [Thread-183794] [transport.py] [_log()] starting thread (client mode): 0xa2d3e5f0
2026-02-14T10:19:34.680 [DEBUG] [Thread-183794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:19:34.694 [DEBUG] [Thread-183794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:19:34.694 [INFO] [Thread-183794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:19:34.701 [DEBUG] [Thread-183794] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:19:34.702 [DEBUG] [Thread-183794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:19:34.702 [DEBUG] [Thread-183794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:19:34.702 [DEBUG] [Thread-183794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:19:34.702 [DEBUG] [Thread-183794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:19:34.702 [DEBUG] [Thread-183794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:19:34.702 [DEBUG] [Thread-183794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:19:34.702 [DEBUG] [Thread-183794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:19:34.702 [DEBUG] [Thread-183794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:19:34.702 [DEBUG] [Thread-183794] [transport.py] [_log()] client lang: <none>
2026-02-14T10:19:34.702 [DEBUG] [Thread-183794] [transport.py] [_log()] server lang: <none>
2026-02-14T10:19:34.702 [DEBUG] [Thread-183794] [transport.py] [_log()] kex follows: False
2026-02-14T10:19:34.702 [DEBUG] [Thread-183794] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:19:34.702 [DEBUG] [Thread-183794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:19:34.702 [DEBUG] [Thread-183794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:19:34.702 [DEBUG] [Thread-183794] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:19:34.702 [DEBUG] [Thread-183794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:19:34.702 [DEBUG] [Thread-183794] [transport.py] [_log()] Compression: none
2026-02-14T10:19:34.702 [DEBUG] [Thread-183794] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:19:34.760 [DEBUG] [Thread-183794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:19:34.761 [DEBUG] [Thread-183794] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:19:34.761 [DEBUG] [Thread-183794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:19:34.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:19:34.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:19:34.818 [DEBUG] [Thread-183794] [transport.py] [_log()] userauth is OK
2026-02-14T10:19:34.818 [DEBUG] [Thread-183794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:19:34.818 [DEBUG] [Thread-183794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:19:34.818 [DEBUG] [Thread-183794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:19:34.818 [DEBUG] [Thread-183794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:19:34.841 [INFO] [Thread-183794] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:19:34.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-14T10:19:34.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:19:35.639 [DEBUG] [Thread-183794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:19:35.639 [DEBUG] [Thread-183794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:19:35.687 [DEBUG] [Thread-183794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:19:35.688 [DEBUG] [Thread-183794] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:19:35.697 [DEBUG] [Thread-183794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:19:35.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:19:35.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:19:35.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-14T10:19:35.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:19:35.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:19:35.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:19:35.730 [DEBUG] [Thread-183794] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:19:48.513 [DEBUG] [Thread-183796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:20:03.059 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:20:03.060 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:20:03.567 [DEBUG] [Thread-183797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:20:05.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:20:05.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:20:05.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-14T10:20:08.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 19, 36), 8.37, 56.61, 0.0, 42.73, 12.44, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:20:08.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:19:36
2026-02-14T10:20:08.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:20:08.746 [DEBUG] [Thread-183798] [transport.py] [_log()] starting thread (client mode): 0xa2db4b80
2026-02-14T10:20:08.747 [DEBUG] [Thread-183798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:20:08.768 [DEBUG] [Thread-183798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:20:08.768 [INFO] [Thread-183798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:20:08.771 [DEBUG] [Thread-183798] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:20:08.771 [DEBUG] [Thread-183798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:20:08.771 [DEBUG] [Thread-183798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:20:08.772 [DEBUG] [Thread-183798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:20:08.772 [DEBUG] [Thread-183798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:20:08.772 [DEBUG] [Thread-183798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:20:08.772 [DEBUG] [Thread-183798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:20:08.772 [DEBUG] [Thread-183798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:20:08.772 [DEBUG] [Thread-183798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:20:08.772 [DEBUG] [Thread-183798] [transport.py] [_log()] client lang: <none>
2026-02-14T10:20:08.772 [DEBUG] [Thread-183798] [transport.py] [_log()] server lang: <none>
2026-02-14T10:20:08.772 [DEBUG] [Thread-183798] [transport.py] [_log()] kex follows: False
2026-02-14T10:20:08.772 [DEBUG] [Thread-183798] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:20:08.772 [DEBUG] [Thread-183798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:20:08.772 [DEBUG] [Thread-183798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:20:08.773 [DEBUG] [Thread-183798] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:20:08.773 [DEBUG] [Thread-183798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:20:08.773 [DEBUG] [Thread-183798] [transport.py] [_log()] Compression: none
2026-02-14T10:20:08.773 [DEBUG] [Thread-183798] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:20:08.791 [DEBUG] [Thread-183798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:20:08.792 [DEBUG] [Thread-183798] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:20:08.793 [DEBUG] [Thread-183798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:20:08.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:20:08.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:20:08.795 [DEBUG] [Thread-183798] [transport.py] [_log()] userauth is OK
2026-02-14T10:20:08.795 [DEBUG] [Thread-183798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:20:08.795 [DEBUG] [Thread-183798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:20:08.795 [DEBUG] [Thread-183798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:20:08.795 [DEBUG] [Thread-183798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:20:08.809 [INFO] [Thread-183798] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:20:08.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:20:10.075 [DEBUG] [Thread-183798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:20:10.075 [DEBUG] [Thread-183798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:20:10.075 [DEBUG] [Thread-183798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:20:10.115 [DEBUG] [Thread-183798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:20:10.115 [DEBUG] [Thread-183798] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:20:10.119 [DEBUG] [Thread-183798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:20:10.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:20:10.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:20:10.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:20:10.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:20:10.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:20:10.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:20:10.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:20:10.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:20:10.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:20:10.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.346988 -999.00  +11.50  32.47     63   +4.80 1 1 2 1 1   888    0 8.06 64.23 ----- 30.0 32.5 182.6 38.9 18.0 -27.4 16.6 -28.7 15.6 -25.5 16.6 -26.9
2026-02-14T10:20:10.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:20:10.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:20:10.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.346988
2026-02-14T10:20:10.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:20:10.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:20:10.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:20:10.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:20:10.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:20:10.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:19:36', tmtdew=8.37, humidity=56.61, cloud=0.0, wind=42.73, temperature=12.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:19:39.763', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:20:10.208 [DEBUG] [Thread-183798] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:20:10.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-14T10:20:10.308 [DEBUG] [Thread-183801] [transport.py] [_log()] starting thread (client mode): 0xa2db7100
2026-02-14T10:20:10.308 [DEBUG] [Thread-183801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:20:10.322 [DEBUG] [Thread-183801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:20:10.322 [INFO] [Thread-183801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:20:10.329 [DEBUG] [Thread-183801] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:20:10.330 [DEBUG] [Thread-183801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:20:10.330 [DEBUG] [Thread-183801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:20:10.330 [DEBUG] [Thread-183801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:20:10.330 [DEBUG] [Thread-183801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:20:10.330 [DEBUG] [Thread-183801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:20:10.330 [DEBUG] [Thread-183801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:20:10.330 [DEBUG] [Thread-183801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:20:10.330 [DEBUG] [Thread-183801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:20:10.331 [DEBUG] [Thread-183801] [transport.py] [_log()] client lang: <none>
2026-02-14T10:20:10.331 [DEBUG] [Thread-183801] [transport.py] [_log()] server lang: <none>
2026-02-14T10:20:10.331 [DEBUG] [Thread-183801] [transport.py] [_log()] kex follows: False
2026-02-14T10:20:10.331 [DEBUG] [Thread-183801] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:20:10.331 [DEBUG] [Thread-183801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:20:10.331 [DEBUG] [Thread-183801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:20:10.331 [DEBUG] [Thread-183801] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:20:10.331 [DEBUG] [Thread-183801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:20:10.331 [DEBUG] [Thread-183801] [transport.py] [_log()] Compression: none
2026-02-14T10:20:10.332 [DEBUG] [Thread-183801] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:20:10.390 [DEBUG] [Thread-183801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:20:10.391 [DEBUG] [Thread-183801] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:20:10.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:20:10.393 [DEBUG] [Thread-183801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:20:10.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:20:10.451 [DEBUG] [Thread-183801] [transport.py] [_log()] userauth is OK
2026-02-14T10:20:10.452 [DEBUG] [Thread-183801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:20:10.452 [DEBUG] [Thread-183801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:20:10.452 [DEBUG] [Thread-183801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:20:10.452 [DEBUG] [Thread-183801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:20:10.475 [INFO] [Thread-183801] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:20:10.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-14T10:20:10.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:20:11.273 [DEBUG] [Thread-183801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:20:11.273 [DEBUG] [Thread-183801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:20:11.321 [DEBUG] [Thread-183801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:20:11.321 [DEBUG] [Thread-183801] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:20:11.329 [DEBUG] [Thread-183801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:20:11.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:20:11.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-14T10:20:11.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-14T10:20:11.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:20:11.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:20:11.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:20:11.361 [DEBUG] [Thread-183801] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:20:16.287 [DEBUG] [Thread-183803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:20:18.606 [DEBUG] [Thread-183804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:20:33.662 [DEBUG] [Thread-183805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:20:41.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:20:41.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:20:41.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-14T10:20:43.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 20, 12), 7.69, 59.15, 0.0, 34.37, 11.39, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:20:43.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:20:12
2026-02-14T10:20:43.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:20:43.709 [DEBUG] [Thread-183806] [transport.py] [_log()] starting thread (client mode): 0xa2d3cc40
2026-02-14T10:20:43.709 [DEBUG] [Thread-183806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:20:43.731 [DEBUG] [Thread-183806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:20:43.731 [INFO] [Thread-183806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:20:43.734 [DEBUG] [Thread-183806] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:20:43.734 [DEBUG] [Thread-183806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:20:43.734 [DEBUG] [Thread-183806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:20:43.734 [DEBUG] [Thread-183806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:20:43.734 [DEBUG] [Thread-183806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:20:43.734 [DEBUG] [Thread-183806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:20:43.734 [DEBUG] [Thread-183806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:20:43.734 [DEBUG] [Thread-183806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:20:43.734 [DEBUG] [Thread-183806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:20:43.734 [DEBUG] [Thread-183806] [transport.py] [_log()] client lang: <none>
2026-02-14T10:20:43.734 [DEBUG] [Thread-183806] [transport.py] [_log()] server lang: <none>
2026-02-14T10:20:43.734 [DEBUG] [Thread-183806] [transport.py] [_log()] kex follows: False
2026-02-14T10:20:43.734 [DEBUG] [Thread-183806] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:20:43.734 [DEBUG] [Thread-183806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:20:43.734 [DEBUG] [Thread-183806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:20:43.734 [DEBUG] [Thread-183806] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:20:43.734 [DEBUG] [Thread-183806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:20:43.735 [DEBUG] [Thread-183806] [transport.py] [_log()] Compression: none
2026-02-14T10:20:43.735 [DEBUG] [Thread-183806] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:20:43.750 [DEBUG] [Thread-183806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:20:43.750 [DEBUG] [Thread-183806] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:20:43.750 [DEBUG] [Thread-183806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:20:43.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:20:43.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:20:43.751 [DEBUG] [Thread-183806] [transport.py] [_log()] userauth is OK
2026-02-14T10:20:43.751 [DEBUG] [Thread-183806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:20:43.751 [DEBUG] [Thread-183806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:20:43.751 [DEBUG] [Thread-183806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:20:43.751 [DEBUG] [Thread-183806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:20:43.764 [INFO] [Thread-183806] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:20:43.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:20:44.437 [DEBUG] [Thread-183806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:20:44.437 [DEBUG] [Thread-183806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:20:44.438 [DEBUG] [Thread-183806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:20:44.478 [DEBUG] [Thread-183806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:20:44.479 [DEBUG] [Thread-183806] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:20:44.482 [DEBUG] [Thread-183806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:20:44.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:20:44.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:20:44.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:20:44.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:20:44.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:20:44.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:20:44.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:20:44.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:20:44.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:20:44.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.347335 -999.00  +11.00  31.04     65   +4.70 1 1 2 1 1   888    0 7.88 59.27 ----- 30.1 31.0 181.8 40.6 17.6 -27.7 16.1 -30.3 15.4 -25.7 16.4 -27.2
2026-02-14T10:20:44.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:20:44.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:20:44.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.347335
2026-02-14T10:20:44.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:20:44.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:20:44.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:20:44.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:20:44.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:20:44.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:20:12', tmtdew=7.69, humidity=59.15, cloud=0.0, wind=34.37, temperature=11.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:20:09.744', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:20:44.508 [DEBUG] [Thread-183806] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:20:44.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-14T10:20:44.607 [DEBUG] [Thread-183809] [transport.py] [_log()] starting thread (client mode): 0xa57c2740
2026-02-14T10:20:44.607 [DEBUG] [Thread-183809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:20:44.622 [DEBUG] [Thread-183809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:20:44.622 [INFO] [Thread-183809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:20:44.629 [DEBUG] [Thread-183809] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:20:44.630 [DEBUG] [Thread-183809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:20:44.630 [DEBUG] [Thread-183809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:20:44.630 [DEBUG] [Thread-183809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:20:44.630 [DEBUG] [Thread-183809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:20:44.630 [DEBUG] [Thread-183809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:20:44.630 [DEBUG] [Thread-183809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:20:44.630 [DEBUG] [Thread-183809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:20:44.630 [DEBUG] [Thread-183809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:20:44.630 [DEBUG] [Thread-183809] [transport.py] [_log()] client lang: <none>
2026-02-14T10:20:44.630 [DEBUG] [Thread-183809] [transport.py] [_log()] server lang: <none>
2026-02-14T10:20:44.630 [DEBUG] [Thread-183809] [transport.py] [_log()] kex follows: False
2026-02-14T10:20:44.630 [DEBUG] [Thread-183809] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:20:44.630 [DEBUG] [Thread-183809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:20:44.630 [DEBUG] [Thread-183809] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:20:44.630 [DEBUG] [Thread-183809] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:20:44.630 [DEBUG] [Thread-183809] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:20:44.630 [DEBUG] [Thread-183809] [transport.py] [_log()] Compression: none
2026-02-14T10:20:44.631 [DEBUG] [Thread-183809] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:20:44.688 [DEBUG] [Thread-183809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:20:44.689 [DEBUG] [Thread-183809] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:20:44.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:20:44.690 [DEBUG] [Thread-183809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:20:44.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:20:44.747 [DEBUG] [Thread-183809] [transport.py] [_log()] userauth is OK
2026-02-14T10:20:44.747 [DEBUG] [Thread-183809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:20:44.747 [DEBUG] [Thread-183809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:20:44.747 [DEBUG] [Thread-183809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:20:44.748 [DEBUG] [Thread-183809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:20:44.766 [INFO] [Thread-183809] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:20:44.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-14T10:20:44.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:20:45.602 [DEBUG] [Thread-183809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:20:45.602 [DEBUG] [Thread-183809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:20:45.649 [DEBUG] [Thread-183809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:20:45.649 [DEBUG] [Thread-183809] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:20:45.658 [DEBUG] [Thread-183809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:20:45.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:20:45.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-14T10:20:45.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:20:45.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:20:45.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:20:45.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:20:45.696 [DEBUG] [Thread-183809] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:20:48.701 [DEBUG] [Thread-183811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:21:03.202 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:21:03.203 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:21:03.752 [DEBUG] [Thread-183812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:21:15.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:21:15.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:21:15.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-14T10:21:16.332 [DEBUG] [Thread-183813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:21:17.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 20, 48), 7.78, 58.94, 0.0, 32.5, 11.59, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:21:17.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:20:48
2026-02-14T10:21:17.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:21:18.113 [DEBUG] [Thread-183814] [transport.py] [_log()] starting thread (client mode): 0xa57c1540
2026-02-14T10:21:18.113 [DEBUG] [Thread-183814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:21:18.134 [DEBUG] [Thread-183814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:21:18.135 [INFO] [Thread-183814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:21:18.137 [DEBUG] [Thread-183814] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:21:18.138 [DEBUG] [Thread-183814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:21:18.138 [DEBUG] [Thread-183814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:21:18.138 [DEBUG] [Thread-183814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:21:18.138 [DEBUG] [Thread-183814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:21:18.138 [DEBUG] [Thread-183814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:21:18.138 [DEBUG] [Thread-183814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:21:18.138 [DEBUG] [Thread-183814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:21:18.138 [DEBUG] [Thread-183814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:21:18.138 [DEBUG] [Thread-183814] [transport.py] [_log()] client lang: <none>
2026-02-14T10:21:18.138 [DEBUG] [Thread-183814] [transport.py] [_log()] server lang: <none>
2026-02-14T10:21:18.139 [DEBUG] [Thread-183814] [transport.py] [_log()] kex follows: False
2026-02-14T10:21:18.139 [DEBUG] [Thread-183814] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:21:18.139 [DEBUG] [Thread-183814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:21:18.139 [DEBUG] [Thread-183814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:21:18.139 [DEBUG] [Thread-183814] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:21:18.139 [DEBUG] [Thread-183814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:21:18.139 [DEBUG] [Thread-183814] [transport.py] [_log()] Compression: none
2026-02-14T10:21:18.139 [DEBUG] [Thread-183814] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:21:18.157 [DEBUG] [Thread-183814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:21:18.157 [DEBUG] [Thread-183814] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:21:18.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:21:18.158 [DEBUG] [Thread-183814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:21:18.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:21:18.160 [DEBUG] [Thread-183814] [transport.py] [_log()] userauth is OK
2026-02-14T10:21:18.161 [DEBUG] [Thread-183814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:21:18.161 [DEBUG] [Thread-183814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:21:18.161 [DEBUG] [Thread-183814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:21:18.161 [DEBUG] [Thread-183814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:21:18.179 [INFO] [Thread-183814] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:21:18.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:21:18.789 [DEBUG] [Thread-183816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:21:18.912 [DEBUG] [Thread-183814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:21:18.913 [DEBUG] [Thread-183814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:21:18.913 [DEBUG] [Thread-183814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:21:18.953 [DEBUG] [Thread-183814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:21:18.954 [DEBUG] [Thread-183814] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:21:18.957 [DEBUG] [Thread-183814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:21:18.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:21:18.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:21:18.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:21:18.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:21:18.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:21:18.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:21:18.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:21:18.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:21:18.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:21:18.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.347683 -999.00  +11.10  21.86     66   +5.10 1 1 1 1 1   888    0 7.90 61.40 ----- 15.6 21.9 175.8 36.2 17.7 -25.2 16.1 -26.7 15.6 -22.6 16.5 -25.2
2026-02-14T10:21:18.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:21:18.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:21:18.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.347683
2026-02-14T10:21:18.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:21:18.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:21:18.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:21:18.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:21:18.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:21:18.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:20:48', tmtdew=7.78, humidity=58.94, cloud=0.0, wind=32.5, temperature=11.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:20:39.811', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:21:18.971 [DEBUG] [Thread-183814] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:21:19.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-14T10:21:19.060 [DEBUG] [Thread-183818] [transport.py] [_log()] starting thread (client mode): 0xa2d1b220
2026-02-14T10:21:19.060 [DEBUG] [Thread-183818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:21:19.074 [DEBUG] [Thread-183818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:21:19.075 [INFO] [Thread-183818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:21:19.082 [DEBUG] [Thread-183818] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:21:19.082 [DEBUG] [Thread-183818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:21:19.082 [DEBUG] [Thread-183818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:21:19.082 [DEBUG] [Thread-183818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:21:19.082 [DEBUG] [Thread-183818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:21:19.082 [DEBUG] [Thread-183818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:21:19.083 [DEBUG] [Thread-183818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:21:19.083 [DEBUG] [Thread-183818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:21:19.083 [DEBUG] [Thread-183818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:21:19.083 [DEBUG] [Thread-183818] [transport.py] [_log()] client lang: <none>
2026-02-14T10:21:19.083 [DEBUG] [Thread-183818] [transport.py] [_log()] server lang: <none>
2026-02-14T10:21:19.083 [DEBUG] [Thread-183818] [transport.py] [_log()] kex follows: False
2026-02-14T10:21:19.083 [DEBUG] [Thread-183818] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:21:19.083 [DEBUG] [Thread-183818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:21:19.083 [DEBUG] [Thread-183818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:21:19.083 [DEBUG] [Thread-183818] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:21:19.083 [DEBUG] [Thread-183818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:21:19.083 [DEBUG] [Thread-183818] [transport.py] [_log()] Compression: none
2026-02-14T10:21:19.083 [DEBUG] [Thread-183818] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:21:19.139 [DEBUG] [Thread-183818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:21:19.140 [DEBUG] [Thread-183818] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:21:19.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:21:19.141 [DEBUG] [Thread-183818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:21:19.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:21:19.196 [DEBUG] [Thread-183818] [transport.py] [_log()] userauth is OK
2026-02-14T10:21:19.196 [DEBUG] [Thread-183818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:21:19.196 [DEBUG] [Thread-183818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:21:19.197 [DEBUG] [Thread-183818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:21:19.197 [DEBUG] [Thread-183818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:21:19.215 [INFO] [Thread-183818] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:21:19.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-14T10:21:19.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:21:20.020 [DEBUG] [Thread-183818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:21:20.020 [DEBUG] [Thread-183818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:21:20.068 [DEBUG] [Thread-183818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:21:20.069 [DEBUG] [Thread-183818] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:21:20.078 [DEBUG] [Thread-183818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:21:20.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:21:20.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-14T10:21:20.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-14T10:21:20.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:21:20.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:21:20.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:21:20.118 [DEBUG] [Thread-183818] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:21:33.828 [DEBUG] [Thread-183820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:21:48.876 [DEBUG] [Thread-183821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:21:50.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:21:50.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:21:50.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-14T10:21:52.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 21, 24), 7.8, 58.84, 0.0, 32.13, 11.47, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:21:52.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:21:24
2026-02-14T10:21:52.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:21:52.679 [DEBUG] [Thread-183822] [transport.py] [_log()] starting thread (client mode): 0xa2d792a0
2026-02-14T10:21:52.679 [DEBUG] [Thread-183822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:21:52.698 [DEBUG] [Thread-183822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:21:52.699 [INFO] [Thread-183822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:21:52.702 [DEBUG] [Thread-183822] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:21:52.702 [DEBUG] [Thread-183822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:21:52.702 [DEBUG] [Thread-183822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:21:52.702 [DEBUG] [Thread-183822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:21:52.702 [DEBUG] [Thread-183822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:21:52.702 [DEBUG] [Thread-183822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:21:52.702 [DEBUG] [Thread-183822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:21:52.702 [DEBUG] [Thread-183822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:21:52.703 [DEBUG] [Thread-183822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:21:52.703 [DEBUG] [Thread-183822] [transport.py] [_log()] client lang: <none>
2026-02-14T10:21:52.703 [DEBUG] [Thread-183822] [transport.py] [_log()] server lang: <none>
2026-02-14T10:21:52.703 [DEBUG] [Thread-183822] [transport.py] [_log()] kex follows: False
2026-02-14T10:21:52.703 [DEBUG] [Thread-183822] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:21:52.703 [DEBUG] [Thread-183822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:21:52.703 [DEBUG] [Thread-183822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:21:52.703 [DEBUG] [Thread-183822] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:21:52.703 [DEBUG] [Thread-183822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:21:52.703 [DEBUG] [Thread-183822] [transport.py] [_log()] Compression: none
2026-02-14T10:21:52.703 [DEBUG] [Thread-183822] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:21:52.722 [DEBUG] [Thread-183822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:21:52.723 [DEBUG] [Thread-183822] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:21:52.723 [DEBUG] [Thread-183822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:21:52.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:21:52.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:21:52.725 [DEBUG] [Thread-183822] [transport.py] [_log()] userauth is OK
2026-02-14T10:21:52.725 [DEBUG] [Thread-183822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:21:52.726 [DEBUG] [Thread-183822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:21:52.726 [DEBUG] [Thread-183822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:21:52.726 [DEBUG] [Thread-183822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:21:52.744 [INFO] [Thread-183822] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:21:52.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:21:53.370 [DEBUG] [Thread-183822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:21:53.370 [DEBUG] [Thread-183822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:21:53.370 [DEBUG] [Thread-183822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:21:53.411 [DEBUG] [Thread-183822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:21:53.411 [DEBUG] [Thread-183822] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:21:53.415 [DEBUG] [Thread-183822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:21:53.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:21:53.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:21:53.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:21:53.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:21:53.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:21:53.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:21:53.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:21:53.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:21:53.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:21:53.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.348030 -999.00  +11.50  33.01     64   +5.00 1 2 2 1 1   888    0 7.84 54.95 ----- 23.6 33.0 175.0 36.2 17.8 -26.4 16.6 -23.3 15.7 -22.7 16.7 -24.8
2026-02-14T10:21:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:21:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:21:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.348030
2026-02-14T10:21:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:21:53.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:21:53.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:21:53.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:21:53.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:21:53.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:21:24', tmtdew=7.8, humidity=58.84, cloud=0.0, wind=32.13, temperature=11.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:21:09.792', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:21:53.444 [DEBUG] [Thread-183822] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:21:53.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-14T10:21:53.543 [DEBUG] [Thread-183825] [transport.py] [_log()] starting thread (client mode): 0xa2d54c40
2026-02-14T10:21:53.543 [DEBUG] [Thread-183825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:21:53.558 [DEBUG] [Thread-183825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:21:53.558 [INFO] [Thread-183825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:21:53.565 [DEBUG] [Thread-183825] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:21:53.566 [DEBUG] [Thread-183825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:21:53.566 [DEBUG] [Thread-183825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:21:53.566 [DEBUG] [Thread-183825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:21:53.566 [DEBUG] [Thread-183825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:21:53.566 [DEBUG] [Thread-183825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:21:53.566 [DEBUG] [Thread-183825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:21:53.566 [DEBUG] [Thread-183825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:21:53.567 [DEBUG] [Thread-183825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:21:53.567 [DEBUG] [Thread-183825] [transport.py] [_log()] client lang: <none>
2026-02-14T10:21:53.567 [DEBUG] [Thread-183825] [transport.py] [_log()] server lang: <none>
2026-02-14T10:21:53.567 [DEBUG] [Thread-183825] [transport.py] [_log()] kex follows: False
2026-02-14T10:21:53.567 [DEBUG] [Thread-183825] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:21:53.567 [DEBUG] [Thread-183825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:21:53.567 [DEBUG] [Thread-183825] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:21:53.567 [DEBUG] [Thread-183825] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:21:53.568 [DEBUG] [Thread-183825] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:21:53.568 [DEBUG] [Thread-183825] [transport.py] [_log()] Compression: none
2026-02-14T10:21:53.568 [DEBUG] [Thread-183825] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:21:53.625 [DEBUG] [Thread-183825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:21:53.626 [DEBUG] [Thread-183825] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:21:53.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:21:53.628 [DEBUG] [Thread-183825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:21:53.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:21:53.685 [DEBUG] [Thread-183825] [transport.py] [_log()] userauth is OK
2026-02-14T10:21:53.685 [DEBUG] [Thread-183825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:21:53.686 [DEBUG] [Thread-183825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:21:53.686 [DEBUG] [Thread-183825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:21:53.686 [DEBUG] [Thread-183825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:21:53.706 [INFO] [Thread-183825] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:21:53.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-14T10:21:53.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:21:54.547 [DEBUG] [Thread-183825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:21:54.547 [DEBUG] [Thread-183825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:21:54.595 [DEBUG] [Thread-183825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:21:54.595 [DEBUG] [Thread-183825] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:21:54.605 [DEBUG] [Thread-183825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:21:54.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:21:54.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-14T10:21:54.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-14T10:21:54.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:21:54.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:21:54.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:21:54.643 [DEBUG] [Thread-183825] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:22:03.341 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:22:03.342 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:22:03.912 [DEBUG] [Thread-183827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:22:16.375 [DEBUG] [Thread-183828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:22:18.961 [DEBUG] [Thread-183829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:22:24.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:22:24.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:22:24.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-14T10:22:26.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 22), 7.67, 59.0, 0.0, 24.74, 11.49, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:22:26.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:22:00
2026-02-14T10:22:26.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:22:27.037 [DEBUG] [Thread-183830] [transport.py] [_log()] starting thread (client mode): 0xa2dde290
2026-02-14T10:22:27.038 [DEBUG] [Thread-183830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:22:27.057 [DEBUG] [Thread-183830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:22:27.057 [INFO] [Thread-183830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:22:27.058 [DEBUG] [Thread-183830] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:22:27.058 [DEBUG] [Thread-183830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:22:27.058 [DEBUG] [Thread-183830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:22:27.059 [DEBUG] [Thread-183830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:22:27.059 [DEBUG] [Thread-183830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:22:27.059 [DEBUG] [Thread-183830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:22:27.059 [DEBUG] [Thread-183830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:22:27.059 [DEBUG] [Thread-183830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:22:27.059 [DEBUG] [Thread-183830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:22:27.059 [DEBUG] [Thread-183830] [transport.py] [_log()] client lang: <none>
2026-02-14T10:22:27.059 [DEBUG] [Thread-183830] [transport.py] [_log()] server lang: <none>
2026-02-14T10:22:27.059 [DEBUG] [Thread-183830] [transport.py] [_log()] kex follows: False
2026-02-14T10:22:27.059 [DEBUG] [Thread-183830] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:22:27.059 [DEBUG] [Thread-183830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:22:27.059 [DEBUG] [Thread-183830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:22:27.059 [DEBUG] [Thread-183830] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:22:27.059 [DEBUG] [Thread-183830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:22:27.060 [DEBUG] [Thread-183830] [transport.py] [_log()] Compression: none
2026-02-14T10:22:27.060 [DEBUG] [Thread-183830] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:22:27.071 [DEBUG] [Thread-183830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:22:27.071 [DEBUG] [Thread-183830] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:22:27.072 [DEBUG] [Thread-183830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:22:27.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:22:27.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:22:27.074 [DEBUG] [Thread-183830] [transport.py] [_log()] userauth is OK
2026-02-14T10:22:27.074 [DEBUG] [Thread-183830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:22:27.075 [DEBUG] [Thread-183830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:22:27.075 [DEBUG] [Thread-183830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:22:27.075 [DEBUG] [Thread-183830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:22:27.111 [INFO] [Thread-183830] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:22:27.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:22:27.754 [DEBUG] [Thread-183830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:22:27.755 [DEBUG] [Thread-183830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:22:27.755 [DEBUG] [Thread-183830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:22:27.795 [DEBUG] [Thread-183830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:22:27.795 [DEBUG] [Thread-183830] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:22:27.799 [DEBUG] [Thread-183830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:22:27.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:22:27.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:22:27.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:22:27.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:22:27.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:22:27.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:22:27.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:22:27.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:22:27.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:22:27.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.348377 -999.00  +11.30  23.76     64   +4.80 1 1 1 1 1   888    0 7.80 54.13 ----- 27.9 23.8 168.6 32.6 17.8 -26.7 16.7 -25.0 15.6 -24.2 16.6 -26.7
2026-02-14T10:22:27.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:22:27.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:22:27.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.348377
2026-02-14T10:22:27.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:22:27.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:22:27.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:22:27.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:22:27.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:22:27.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:22:00', tmtdew=7.67, humidity=59.0, cloud=0.0, wind=24.74, temperature=11.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:21:39.773', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:22:27.825 [DEBUG] [Thread-183830] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:22:27.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T10:22:27.920 [DEBUG] [Thread-183833] [transport.py] [_log()] starting thread (client mode): 0xa2d54640
2026-02-14T10:22:27.920 [DEBUG] [Thread-183833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:22:27.935 [DEBUG] [Thread-183833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:22:27.935 [INFO] [Thread-183833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:22:27.943 [DEBUG] [Thread-183833] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:22:27.944 [DEBUG] [Thread-183833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:22:27.944 [DEBUG] [Thread-183833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:22:27.944 [DEBUG] [Thread-183833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:22:27.944 [DEBUG] [Thread-183833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:22:27.944 [DEBUG] [Thread-183833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:22:27.944 [DEBUG] [Thread-183833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:22:27.944 [DEBUG] [Thread-183833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:22:27.944 [DEBUG] [Thread-183833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:22:27.945 [DEBUG] [Thread-183833] [transport.py] [_log()] client lang: <none>
2026-02-14T10:22:27.945 [DEBUG] [Thread-183833] [transport.py] [_log()] server lang: <none>
2026-02-14T10:22:27.945 [DEBUG] [Thread-183833] [transport.py] [_log()] kex follows: False
2026-02-14T10:22:27.945 [DEBUG] [Thread-183833] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:22:27.945 [DEBUG] [Thread-183833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:22:27.945 [DEBUG] [Thread-183833] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:22:27.945 [DEBUG] [Thread-183833] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:22:27.945 [DEBUG] [Thread-183833] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:22:27.946 [DEBUG] [Thread-183833] [transport.py] [_log()] Compression: none
2026-02-14T10:22:27.946 [DEBUG] [Thread-183833] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:22:28.002 [DEBUG] [Thread-183833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:22:28.003 [DEBUG] [Thread-183833] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:22:28.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:22:28.005 [DEBUG] [Thread-183833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:22:28.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:22:28.060 [DEBUG] [Thread-183833] [transport.py] [_log()] userauth is OK
2026-02-14T10:22:28.060 [DEBUG] [Thread-183833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:22:28.060 [DEBUG] [Thread-183833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:22:28.060 [DEBUG] [Thread-183833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:22:28.061 [DEBUG] [Thread-183833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:22:28.078 [INFO] [Thread-183833] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:22:28.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-14T10:22:28.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:22:28.909 [DEBUG] [Thread-183833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:22:28.909 [DEBUG] [Thread-183833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:22:28.957 [DEBUG] [Thread-183833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:22:28.958 [DEBUG] [Thread-183833] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:22:28.968 [DEBUG] [Thread-183833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:22:28.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:22:28.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-14T10:22:28.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:22:29.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:22:29.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:22:29.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:22:29.016 [DEBUG] [Thread-183833] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:22:33.997 [DEBUG] [Thread-183835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:22:49.051 [DEBUG] [Thread-183836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:22:59.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:22:59.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:22:59.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:23:00.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 22, 35), 8.02, 57.93, 0.0, 37.82, 12.18, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:23:00.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:22:35
2026-02-14T10:23:01.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:23:01.374 [DEBUG] [Thread-183837] [transport.py] [_log()] starting thread (client mode): 0xa57c3490
2026-02-14T10:23:01.374 [DEBUG] [Thread-183837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:23:01.394 [DEBUG] [Thread-183837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:23:01.394 [INFO] [Thread-183837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:23:01.397 [DEBUG] [Thread-183837] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:23:01.398 [DEBUG] [Thread-183837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:23:01.398 [DEBUG] [Thread-183837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:23:01.398 [DEBUG] [Thread-183837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:23:01.398 [DEBUG] [Thread-183837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:23:01.398 [DEBUG] [Thread-183837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:23:01.398 [DEBUG] [Thread-183837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:23:01.398 [DEBUG] [Thread-183837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:23:01.398 [DEBUG] [Thread-183837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:23:01.398 [DEBUG] [Thread-183837] [transport.py] [_log()] client lang: <none>
2026-02-14T10:23:01.398 [DEBUG] [Thread-183837] [transport.py] [_log()] server lang: <none>
2026-02-14T10:23:01.398 [DEBUG] [Thread-183837] [transport.py] [_log()] kex follows: False
2026-02-14T10:23:01.398 [DEBUG] [Thread-183837] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:23:01.398 [DEBUG] [Thread-183837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:23:01.399 [DEBUG] [Thread-183837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:23:01.399 [DEBUG] [Thread-183837] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:23:01.399 [DEBUG] [Thread-183837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:23:01.399 [DEBUG] [Thread-183837] [transport.py] [_log()] Compression: none
2026-02-14T10:23:01.399 [DEBUG] [Thread-183837] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:23:01.419 [DEBUG] [Thread-183837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:23:01.420 [DEBUG] [Thread-183837] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:23:01.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:23:01.421 [DEBUG] [Thread-183837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:23:01.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:23:01.424 [DEBUG] [Thread-183837] [transport.py] [_log()] userauth is OK
2026-02-14T10:23:01.424 [DEBUG] [Thread-183837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:23:01.424 [DEBUG] [Thread-183837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:23:01.424 [DEBUG] [Thread-183837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:23:01.424 [DEBUG] [Thread-183837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:23:01.449 [INFO] [Thread-183837] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:23:01.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:23:02.042 [DEBUG] [Thread-183837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:23:02.043 [DEBUG] [Thread-183837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:23:02.043 [DEBUG] [Thread-183837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:23:02.083 [DEBUG] [Thread-183837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:23:02.084 [DEBUG] [Thread-183837] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:23:02.087 [DEBUG] [Thread-183837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:23:02.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:23:02.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:23:02.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:23:02.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:23:02.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:23:02.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:23:02.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:23:02.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:23:02.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:23:02.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.349071 -999.00  +11.20  18.82     65   +4.90 1 1 1 1 1   888    0 7.55 46.53 ----- 21.2 18.8 134.0 32.7 17.8 -25.7 16.7 -24.0 15.7 -22.9 16.6 -25.2
2026-02-14T10:23:02.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:23:02.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:23:02.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.349071
2026-02-14T10:23:02.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:23:02.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:23:02.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:23:02.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:23:02.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:23:02.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:22:35', tmtdew=8.02, humidity=57.93, cloud=0.0, wind=37.82, temperature=12.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:22:39.734', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:23:02.111 [DEBUG] [Thread-183837] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:23:02.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T10:23:02.203 [DEBUG] [Thread-183840] [transport.py] [_log()] starting thread (client mode): 0xa2d3d360
2026-02-14T10:23:02.204 [DEBUG] [Thread-183840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:23:02.220 [DEBUG] [Thread-183840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:23:02.220 [INFO] [Thread-183840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:23:02.228 [DEBUG] [Thread-183840] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:23:02.228 [DEBUG] [Thread-183840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:23:02.228 [DEBUG] [Thread-183840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:23:02.228 [DEBUG] [Thread-183840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:23:02.228 [DEBUG] [Thread-183840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:23:02.229 [DEBUG] [Thread-183840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:23:02.229 [DEBUG] [Thread-183840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:23:02.229 [DEBUG] [Thread-183840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:23:02.229 [DEBUG] [Thread-183840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:23:02.229 [DEBUG] [Thread-183840] [transport.py] [_log()] client lang: <none>
2026-02-14T10:23:02.229 [DEBUG] [Thread-183840] [transport.py] [_log()] server lang: <none>
2026-02-14T10:23:02.229 [DEBUG] [Thread-183840] [transport.py] [_log()] kex follows: False
2026-02-14T10:23:02.229 [DEBUG] [Thread-183840] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:23:02.229 [DEBUG] [Thread-183840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:23:02.229 [DEBUG] [Thread-183840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:23:02.229 [DEBUG] [Thread-183840] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:23:02.229 [DEBUG] [Thread-183840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:23:02.229 [DEBUG] [Thread-183840] [transport.py] [_log()] Compression: none
2026-02-14T10:23:02.229 [DEBUG] [Thread-183840] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:23:02.293 [DEBUG] [Thread-183840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:23:02.293 [DEBUG] [Thread-183840] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:23:02.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:23:02.295 [DEBUG] [Thread-183840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:23:02.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:23:02.356 [DEBUG] [Thread-183840] [transport.py] [_log()] userauth is OK
2026-02-14T10:23:02.356 [DEBUG] [Thread-183840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:23:02.356 [DEBUG] [Thread-183840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:23:02.356 [DEBUG] [Thread-183840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:23:02.356 [DEBUG] [Thread-183840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:23:02.382 [INFO] [Thread-183840] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:23:02.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-14T10:23:02.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:23:03.231 [DEBUG] [Thread-183840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:23:03.231 [DEBUG] [Thread-183840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:23:03.280 [DEBUG] [Thread-183840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:23:03.280 [DEBUG] [Thread-183840] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:23:03.288 [DEBUG] [Thread-183840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:23:03.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:23:03.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-14T10:23:03.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-14T10:23:03.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:23:03.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:23:03.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:23:03.323 [DEBUG] [Thread-183840] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:23:03.484 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:23:03.485 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:23:04.088 [DEBUG] [Thread-183842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:23:16.424 [DEBUG] [Thread-183843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:23:19.142 [DEBUG] [Thread-183844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:23:33.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:23:33.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:23:33.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-14T10:23:34.182 [DEBUG] [Thread-183845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:23:35.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 23, 11), 8.2, 57.19, 0.0, 29.84, 11.51, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:23:35.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:23:11
2026-02-14T10:23:35.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:23:35.691 [DEBUG] [Thread-183846] [transport.py] [_log()] starting thread (client mode): 0xa5742cb0
2026-02-14T10:23:35.691 [DEBUG] [Thread-183846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:23:35.711 [DEBUG] [Thread-183846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:23:35.711 [INFO] [Thread-183846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:23:35.714 [DEBUG] [Thread-183846] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:23:35.715 [DEBUG] [Thread-183846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:23:35.715 [DEBUG] [Thread-183846] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:23:35.715 [DEBUG] [Thread-183846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:23:35.715 [DEBUG] [Thread-183846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:23:35.715 [DEBUG] [Thread-183846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:23:35.715 [DEBUG] [Thread-183846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:23:35.715 [DEBUG] [Thread-183846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:23:35.715 [DEBUG] [Thread-183846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:23:35.715 [DEBUG] [Thread-183846] [transport.py] [_log()] client lang: <none>
2026-02-14T10:23:35.715 [DEBUG] [Thread-183846] [transport.py] [_log()] server lang: <none>
2026-02-14T10:23:35.715 [DEBUG] [Thread-183846] [transport.py] [_log()] kex follows: False
2026-02-14T10:23:35.715 [DEBUG] [Thread-183846] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:23:35.716 [DEBUG] [Thread-183846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:23:35.716 [DEBUG] [Thread-183846] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:23:35.716 [DEBUG] [Thread-183846] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:23:35.716 [DEBUG] [Thread-183846] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:23:35.716 [DEBUG] [Thread-183846] [transport.py] [_log()] Compression: none
2026-02-14T10:23:35.716 [DEBUG] [Thread-183846] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:23:35.735 [DEBUG] [Thread-183846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:23:35.736 [DEBUG] [Thread-183846] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:23:35.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:23:35.737 [DEBUG] [Thread-183846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:23:35.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:23:35.780 [DEBUG] [Thread-183846] [transport.py] [_log()] userauth is OK
2026-02-14T10:23:35.780 [DEBUG] [Thread-183846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:23:35.781 [DEBUG] [Thread-183846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:23:35.781 [DEBUG] [Thread-183846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:23:35.781 [DEBUG] [Thread-183846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:23:35.800 [INFO] [Thread-183846] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:23:35.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:23:36.437 [DEBUG] [Thread-183846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:23:36.438 [DEBUG] [Thread-183846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:23:36.438 [DEBUG] [Thread-183846] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:23:36.479 [DEBUG] [Thread-183846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:23:36.479 [DEBUG] [Thread-183846] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:23:36.482 [DEBUG] [Thread-183846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:23:36.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:23:36.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:23:36.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:23:36.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:23:36.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:23:36.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:23:36.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:23:36.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:23:36.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:23:36.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.349419 -999.00  +11.10  21.76     65   +4.90 1 1 1 1 1   888    0 7.45 39.57 ----- 22.3 21.8 173.4 27.4 18.1 -25.5 16.9 -26.2 15.8 -23.5 16.8 -24.6
2026-02-14T10:23:36.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:23:36.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:23:36.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.349419
2026-02-14T10:23:36.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:23:36.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:23:36.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:23:36.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:23:36.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:23:36.510 [DEBUG] [Thread-183846] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:23:36.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:23:11', tmtdew=8.2, humidity=57.19, cloud=0.0, wind=29.84, temperature=11.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:23:09.802', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:23:36.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T10:23:36.607 [DEBUG] [Thread-183849] [transport.py] [_log()] starting thread (client mode): 0xa575b0a0
2026-02-14T10:23:36.607 [DEBUG] [Thread-183849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:23:36.622 [DEBUG] [Thread-183849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:23:36.622 [INFO] [Thread-183849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:23:36.630 [DEBUG] [Thread-183849] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:23:36.630 [DEBUG] [Thread-183849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:23:36.630 [DEBUG] [Thread-183849] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:23:36.630 [DEBUG] [Thread-183849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:23:36.630 [DEBUG] [Thread-183849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:23:36.630 [DEBUG] [Thread-183849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:23:36.630 [DEBUG] [Thread-183849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:23:36.630 [DEBUG] [Thread-183849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:23:36.630 [DEBUG] [Thread-183849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:23:36.631 [DEBUG] [Thread-183849] [transport.py] [_log()] client lang: <none>
2026-02-14T10:23:36.631 [DEBUG] [Thread-183849] [transport.py] [_log()] server lang: <none>
2026-02-14T10:23:36.631 [DEBUG] [Thread-183849] [transport.py] [_log()] kex follows: False
2026-02-14T10:23:36.631 [DEBUG] [Thread-183849] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:23:36.631 [DEBUG] [Thread-183849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:23:36.631 [DEBUG] [Thread-183849] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:23:36.631 [DEBUG] [Thread-183849] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:23:36.631 [DEBUG] [Thread-183849] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:23:36.631 [DEBUG] [Thread-183849] [transport.py] [_log()] Compression: none
2026-02-14T10:23:36.631 [DEBUG] [Thread-183849] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:23:36.689 [DEBUG] [Thread-183849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:23:36.690 [DEBUG] [Thread-183849] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:23:36.690 [DEBUG] [Thread-183849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:23:36.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:23:36.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:23:36.745 [DEBUG] [Thread-183849] [transport.py] [_log()] userauth is OK
2026-02-14T10:23:36.745 [DEBUG] [Thread-183849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:23:36.745 [DEBUG] [Thread-183849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:23:36.745 [DEBUG] [Thread-183849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:23:36.746 [DEBUG] [Thread-183849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:23:36.764 [INFO] [Thread-183849] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:23:36.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-14T10:23:36.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:23:37.567 [DEBUG] [Thread-183849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:23:37.567 [DEBUG] [Thread-183849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:23:37.616 [DEBUG] [Thread-183849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:23:37.617 [DEBUG] [Thread-183849] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:23:37.626 [DEBUG] [Thread-183849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:23:37.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:23:37.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-14T10:23:37.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:23:37.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:23:37.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:23:37.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:23:37.676 [DEBUG] [Thread-183849] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:23:49.224 [DEBUG] [Thread-183851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:24:03.634 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:24:03.635 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:24:04.278 [DEBUG] [Thread-183852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:24:07.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:24:07.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:24:07.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-14T10:24:09.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 23, 46), 7.49, 60.03, 0.0, 30.91, 11.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:24:09.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:23:46
2026-02-14T10:24:10.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:24:10.668 [DEBUG] [Thread-183853] [transport.py] [_log()] starting thread (client mode): 0xa2d3df90
2026-02-14T10:24:10.669 [DEBUG] [Thread-183853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:24:10.679 [DEBUG] [Thread-183853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:24:10.679 [INFO] [Thread-183853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:24:10.680 [DEBUG] [Thread-183853] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:24:10.680 [DEBUG] [Thread-183853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:24:10.680 [DEBUG] [Thread-183853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:24:10.680 [DEBUG] [Thread-183853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:24:10.680 [DEBUG] [Thread-183853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:24:10.680 [DEBUG] [Thread-183853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:24:10.680 [DEBUG] [Thread-183853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:24:10.680 [DEBUG] [Thread-183853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:24:10.680 [DEBUG] [Thread-183853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:24:10.680 [DEBUG] [Thread-183853] [transport.py] [_log()] client lang: <none>
2026-02-14T10:24:10.680 [DEBUG] [Thread-183853] [transport.py] [_log()] server lang: <none>
2026-02-14T10:24:10.680 [DEBUG] [Thread-183853] [transport.py] [_log()] kex follows: False
2026-02-14T10:24:10.680 [DEBUG] [Thread-183853] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:24:10.680 [DEBUG] [Thread-183853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:24:10.680 [DEBUG] [Thread-183853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:24:10.680 [DEBUG] [Thread-183853] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:24:10.681 [DEBUG] [Thread-183853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:24:10.681 [DEBUG] [Thread-183853] [transport.py] [_log()] Compression: none
2026-02-14T10:24:10.681 [DEBUG] [Thread-183853] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:24:10.689 [DEBUG] [Thread-183853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:24:10.689 [DEBUG] [Thread-183853] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:24:10.689 [DEBUG] [Thread-183853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:24:10.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:24:10.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:24:10.690 [DEBUG] [Thread-183853] [transport.py] [_log()] userauth is OK
2026-02-14T10:24:10.690 [DEBUG] [Thread-183853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:24:10.690 [DEBUG] [Thread-183853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:24:10.691 [DEBUG] [Thread-183853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:24:10.691 [DEBUG] [Thread-183853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:24:10.703 [INFO] [Thread-183853] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:24:10.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:24:11.370 [DEBUG] [Thread-183853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:24:11.370 [DEBUG] [Thread-183853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:24:11.370 [DEBUG] [Thread-183853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:24:11.411 [DEBUG] [Thread-183853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:24:11.412 [DEBUG] [Thread-183853] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:24:11.415 [DEBUG] [Thread-183853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:24:11.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:24:11.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:24:11.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:24:11.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:24:11.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:24:11.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:24:11.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:24:11.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:24:11.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:24:11.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.349766 -999.00  +11.40  27.43     64   +5.00 1 1 1 1 1   888    0 7.36 35.88 ----- 23.4 27.4 157.4 38.0 18.1 -26.6 16.9 -27.1 15.8 -23.2 16.8 -25.9
2026-02-14T10:24:11.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:24:11.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:24:11.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.349766
2026-02-14T10:24:11.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:24:11.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:24:11.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:24:11.442 [DEBUG] [Thread-183853] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:24:11.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:24:11.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:24:11.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:23:46', tmtdew=7.49, humidity=60.03, cloud=0.0, wind=30.91, temperature=11.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:23:39.782', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:24:11.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-14T10:24:11.539 [DEBUG] [Thread-183856] [transport.py] [_log()] starting thread (client mode): 0xa2ddfe80
2026-02-14T10:24:11.539 [DEBUG] [Thread-183856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:24:11.554 [DEBUG] [Thread-183856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:24:11.554 [INFO] [Thread-183856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:24:11.562 [DEBUG] [Thread-183856] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:24:11.562 [DEBUG] [Thread-183856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:24:11.562 [DEBUG] [Thread-183856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:24:11.562 [DEBUG] [Thread-183856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:24:11.562 [DEBUG] [Thread-183856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:24:11.562 [DEBUG] [Thread-183856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:24:11.562 [DEBUG] [Thread-183856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:24:11.562 [DEBUG] [Thread-183856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:24:11.562 [DEBUG] [Thread-183856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:24:11.562 [DEBUG] [Thread-183856] [transport.py] [_log()] client lang: <none>
2026-02-14T10:24:11.562 [DEBUG] [Thread-183856] [transport.py] [_log()] server lang: <none>
2026-02-14T10:24:11.563 [DEBUG] [Thread-183856] [transport.py] [_log()] kex follows: False
2026-02-14T10:24:11.563 [DEBUG] [Thread-183856] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:24:11.563 [DEBUG] [Thread-183856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:24:11.563 [DEBUG] [Thread-183856] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:24:11.563 [DEBUG] [Thread-183856] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:24:11.563 [DEBUG] [Thread-183856] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:24:11.563 [DEBUG] [Thread-183856] [transport.py] [_log()] Compression: none
2026-02-14T10:24:11.563 [DEBUG] [Thread-183856] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:24:11.621 [DEBUG] [Thread-183856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:24:11.621 [DEBUG] [Thread-183856] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:24:11.622 [DEBUG] [Thread-183856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:24:11.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:24:11.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:24:11.677 [DEBUG] [Thread-183856] [transport.py] [_log()] userauth is OK
2026-02-14T10:24:11.677 [DEBUG] [Thread-183856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:24:11.677 [DEBUG] [Thread-183856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:24:11.678 [DEBUG] [Thread-183856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:24:11.678 [DEBUG] [Thread-183856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:24:11.702 [INFO] [Thread-183856] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:24:11.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-14T10:24:11.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:24:12.518 [DEBUG] [Thread-183856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:24:12.518 [DEBUG] [Thread-183856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:24:12.566 [DEBUG] [Thread-183856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:24:12.566 [DEBUG] [Thread-183856] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:24:12.575 [DEBUG] [Thread-183856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:24:12.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:24:12.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-14T10:24:12.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-14T10:24:12.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:24:12.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:24:12.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:24:12.613 [DEBUG] [Thread-183856] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:24:16.479 [DEBUG] [Thread-183858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:24:19.317 [DEBUG] [Thread-183859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:24:34.369 [DEBUG] [Thread-183860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:24:42.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:24:42.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:24:42.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-14T10:24:44.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 24, 21), 7.63, 59.54, 0.0, 29.27, 11.49, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:24:44.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:24:21
2026-02-14T10:24:44.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:24:45.135 [DEBUG] [Thread-183861] [transport.py] [_log()] starting thread (client mode): 0xa2d3e620
2026-02-14T10:24:45.135 [DEBUG] [Thread-183861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:24:45.155 [DEBUG] [Thread-183861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:24:45.155 [INFO] [Thread-183861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:24:45.158 [DEBUG] [Thread-183861] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:24:45.158 [DEBUG] [Thread-183861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:24:45.158 [DEBUG] [Thread-183861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:24:45.158 [DEBUG] [Thread-183861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:24:45.158 [DEBUG] [Thread-183861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:24:45.158 [DEBUG] [Thread-183861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:24:45.159 [DEBUG] [Thread-183861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:24:45.159 [DEBUG] [Thread-183861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:24:45.159 [DEBUG] [Thread-183861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:24:45.159 [DEBUG] [Thread-183861] [transport.py] [_log()] client lang: <none>
2026-02-14T10:24:45.159 [DEBUG] [Thread-183861] [transport.py] [_log()] server lang: <none>
2026-02-14T10:24:45.159 [DEBUG] [Thread-183861] [transport.py] [_log()] kex follows: False
2026-02-14T10:24:45.159 [DEBUG] [Thread-183861] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:24:45.159 [DEBUG] [Thread-183861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:24:45.159 [DEBUG] [Thread-183861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:24:45.159 [DEBUG] [Thread-183861] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:24:45.159 [DEBUG] [Thread-183861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:24:45.159 [DEBUG] [Thread-183861] [transport.py] [_log()] Compression: none
2026-02-14T10:24:45.159 [DEBUG] [Thread-183861] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:24:45.179 [DEBUG] [Thread-183861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:24:45.179 [DEBUG] [Thread-183861] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:24:45.180 [DEBUG] [Thread-183861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:24:45.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:24:45.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:24:45.225 [DEBUG] [Thread-183861] [transport.py] [_log()] userauth is OK
2026-02-14T10:24:45.225 [DEBUG] [Thread-183861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:24:45.226 [DEBUG] [Thread-183861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:24:45.226 [DEBUG] [Thread-183861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:24:45.226 [DEBUG] [Thread-183861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:24:45.258 [INFO] [Thread-183861] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:24:45.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:24:45.895 [DEBUG] [Thread-183861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:24:45.895 [DEBUG] [Thread-183861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:24:45.896 [DEBUG] [Thread-183861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:24:45.937 [DEBUG] [Thread-183861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:24:45.937 [DEBUG] [Thread-183861] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:24:45.940 [DEBUG] [Thread-183861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:24:45.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:24:45.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:24:45.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:24:45.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:24:45.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:24:45.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:24:45.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:24:45.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:24:45.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:24:45.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.350113 -999.00  +11.80  22.67     63   +5.00 1 1 1 1 1   888    0 7.32 34.85 ----- 23.9 22.7 159.7 35.9 18.2 -24.5 17.0 -23.0 15.9 -23.2 16.9 -24.3
2026-02-14T10:24:45.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:24:45.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:24:45.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.350113
2026-02-14T10:24:45.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:24:45.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:24:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:24:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:24:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:24:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:24:21', tmtdew=7.63, humidity=59.54, cloud=0.0, wind=29.27, temperature=11.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:24:09.763', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:24:45.971 [DEBUG] [Thread-183861] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:24:46.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T10:24:46.066 [DEBUG] [Thread-183864] [transport.py] [_log()] starting thread (client mode): 0xa2d7bca0
2026-02-14T10:24:46.066 [DEBUG] [Thread-183864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:24:46.081 [DEBUG] [Thread-183864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:24:46.081 [INFO] [Thread-183864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:24:46.089 [DEBUG] [Thread-183864] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:24:46.089 [DEBUG] [Thread-183864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:24:46.089 [DEBUG] [Thread-183864] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:24:46.089 [DEBUG] [Thread-183864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:24:46.089 [DEBUG] [Thread-183864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:24:46.089 [DEBUG] [Thread-183864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:24:46.089 [DEBUG] [Thread-183864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:24:46.089 [DEBUG] [Thread-183864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:24:46.089 [DEBUG] [Thread-183864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:24:46.089 [DEBUG] [Thread-183864] [transport.py] [_log()] client lang: <none>
2026-02-14T10:24:46.089 [DEBUG] [Thread-183864] [transport.py] [_log()] server lang: <none>
2026-02-14T10:24:46.089 [DEBUG] [Thread-183864] [transport.py] [_log()] kex follows: False
2026-02-14T10:24:46.089 [DEBUG] [Thread-183864] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:24:46.090 [DEBUG] [Thread-183864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:24:46.090 [DEBUG] [Thread-183864] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:24:46.090 [DEBUG] [Thread-183864] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:24:46.090 [DEBUG] [Thread-183864] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:24:46.090 [DEBUG] [Thread-183864] [transport.py] [_log()] Compression: none
2026-02-14T10:24:46.090 [DEBUG] [Thread-183864] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:24:46.149 [DEBUG] [Thread-183864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:24:46.150 [DEBUG] [Thread-183864] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:24:46.150 [DEBUG] [Thread-183864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:24:46.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:24:46.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:24:46.205 [DEBUG] [Thread-183864] [transport.py] [_log()] userauth is OK
2026-02-14T10:24:46.206 [DEBUG] [Thread-183864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:24:46.206 [DEBUG] [Thread-183864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:24:46.206 [DEBUG] [Thread-183864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:24:46.206 [DEBUG] [Thread-183864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:24:46.230 [INFO] [Thread-183864] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:24:46.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T10:24:46.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:24:47.082 [DEBUG] [Thread-183864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:24:47.082 [DEBUG] [Thread-183864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:24:47.130 [DEBUG] [Thread-183864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:24:47.131 [DEBUG] [Thread-183864] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:24:47.140 [DEBUG] [Thread-183864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:24:47.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:24:47.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-14T10:24:47.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:24:47.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:24:47.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:24:47.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:24:47.176 [DEBUG] [Thread-183864] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:24:49.408 [DEBUG] [Thread-183866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:25:03.781 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:25:03.782 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:25:04.461 [DEBUG] [Thread-183867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:25:16.532 [DEBUG] [Thread-183868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:25:17.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:25:17.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:25:17.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:25:19.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 24, 56), 8.18, 57.27, 0.0, 37.86, 11.94, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:25:19.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:24:56
2026-02-14T10:25:19.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:25:19.497 [DEBUG] [Thread-183869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:25:19.639 [DEBUG] [Thread-183870] [transport.py] [_log()] starting thread (client mode): 0xa57c01c0
2026-02-14T10:25:19.639 [DEBUG] [Thread-183870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:25:19.659 [DEBUG] [Thread-183870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:25:19.659 [INFO] [Thread-183870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:25:19.662 [DEBUG] [Thread-183870] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:25:19.662 [DEBUG] [Thread-183870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:25:19.662 [DEBUG] [Thread-183870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:25:19.663 [DEBUG] [Thread-183870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:25:19.663 [DEBUG] [Thread-183870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:25:19.663 [DEBUG] [Thread-183870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:25:19.663 [DEBUG] [Thread-183870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:25:19.663 [DEBUG] [Thread-183870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:25:19.663 [DEBUG] [Thread-183870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:25:19.663 [DEBUG] [Thread-183870] [transport.py] [_log()] client lang: <none>
2026-02-14T10:25:19.663 [DEBUG] [Thread-183870] [transport.py] [_log()] server lang: <none>
2026-02-14T10:25:19.663 [DEBUG] [Thread-183870] [transport.py] [_log()] kex follows: False
2026-02-14T10:25:19.663 [DEBUG] [Thread-183870] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:25:19.663 [DEBUG] [Thread-183870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:25:19.663 [DEBUG] [Thread-183870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:25:19.663 [DEBUG] [Thread-183870] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:25:19.663 [DEBUG] [Thread-183870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:25:19.664 [DEBUG] [Thread-183870] [transport.py] [_log()] Compression: none
2026-02-14T10:25:19.664 [DEBUG] [Thread-183870] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:25:19.682 [DEBUG] [Thread-183870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:25:19.682 [DEBUG] [Thread-183870] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:25:19.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:25:19.683 [DEBUG] [Thread-183870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:25:19.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:25:19.725 [DEBUG] [Thread-183870] [transport.py] [_log()] userauth is OK
2026-02-14T10:25:19.725 [DEBUG] [Thread-183870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:25:19.725 [DEBUG] [Thread-183870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:25:19.725 [DEBUG] [Thread-183870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:25:19.726 [DEBUG] [Thread-183870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:25:19.758 [INFO] [Thread-183870] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:25:19.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:25:20.337 [DEBUG] [Thread-183870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:25:20.337 [DEBUG] [Thread-183870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:25:20.338 [DEBUG] [Thread-183870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:25:20.378 [DEBUG] [Thread-183870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:25:20.379 [DEBUG] [Thread-183870] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:25:20.383 [DEBUG] [Thread-183870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:25:20.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:25:20.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:25:20.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:25:20.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:25:20.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:25:20.410 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:25:20.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:25:20.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:25:20.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:25:20.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.350460 -999.00  +12.00  26.06     62   +5.10 1 1 1 1 1   888    0 7.34 36.58 ----- 18.5 26.1 158.4 32.1 18.2 -26.1 17.1 -24.0 16.1 -22.5 16.9 -25.5
2026-02-14T10:25:20.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:25:20.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:25:20.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.350460
2026-02-14T10:25:20.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:25:20.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:25:20.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:25:20.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:25:20.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:25:20.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:24:56', tmtdew=8.18, humidity=57.27, cloud=0.0, wind=37.86, temperature=11.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:24:39.744', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:25:20.413 [DEBUG] [Thread-183870] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:25:20.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-14T10:25:20.507 [DEBUG] [Thread-183873] [transport.py] [_log()] starting thread (client mode): 0xa5758910
2026-02-14T10:25:20.507 [DEBUG] [Thread-183873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:25:20.521 [DEBUG] [Thread-183873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:25:20.521 [INFO] [Thread-183873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:25:20.529 [DEBUG] [Thread-183873] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:25:20.529 [DEBUG] [Thread-183873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:25:20.529 [DEBUG] [Thread-183873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:25:20.530 [DEBUG] [Thread-183873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:25:20.530 [DEBUG] [Thread-183873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:25:20.530 [DEBUG] [Thread-183873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:25:20.530 [DEBUG] [Thread-183873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:25:20.530 [DEBUG] [Thread-183873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:25:20.530 [DEBUG] [Thread-183873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:25:20.530 [DEBUG] [Thread-183873] [transport.py] [_log()] client lang: <none>
2026-02-14T10:25:20.530 [DEBUG] [Thread-183873] [transport.py] [_log()] server lang: <none>
2026-02-14T10:25:20.530 [DEBUG] [Thread-183873] [transport.py] [_log()] kex follows: False
2026-02-14T10:25:20.530 [DEBUG] [Thread-183873] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:25:20.531 [DEBUG] [Thread-183873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:25:20.531 [DEBUG] [Thread-183873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:25:20.531 [DEBUG] [Thread-183873] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:25:20.531 [DEBUG] [Thread-183873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:25:20.531 [DEBUG] [Thread-183873] [transport.py] [_log()] Compression: none
2026-02-14T10:25:20.531 [DEBUG] [Thread-183873] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:25:20.589 [DEBUG] [Thread-183873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:25:20.590 [DEBUG] [Thread-183873] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:25:20.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:25:20.591 [DEBUG] [Thread-183873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:25:20.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:25:20.645 [DEBUG] [Thread-183873] [transport.py] [_log()] userauth is OK
2026-02-14T10:25:20.645 [DEBUG] [Thread-183873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:25:20.646 [DEBUG] [Thread-183873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:25:20.646 [DEBUG] [Thread-183873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:25:20.646 [DEBUG] [Thread-183873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:25:20.664 [INFO] [Thread-183873] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:25:20.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-14T10:25:20.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:25:21.484 [DEBUG] [Thread-183873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:25:21.484 [DEBUG] [Thread-183873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:25:21.532 [DEBUG] [Thread-183873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:25:21.532 [DEBUG] [Thread-183873] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:25:21.541 [DEBUG] [Thread-183873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:25:21.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:25:21.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:25:21.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-14T10:25:21.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:25:21.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:25:21.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:25:21.578 [DEBUG] [Thread-183873] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:25:34.531 [DEBUG] [Thread-183875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:25:49.586 [DEBUG] [Thread-183876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:25:51.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:25:51.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:25:51.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:25:53.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 25, 32), 8.32, 56.78, 0.0, 34.62, 12.1, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:25:53.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:25:32
2026-02-14T10:25:53.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:25:53.988 [DEBUG] [Thread-183877] [transport.py] [_log()] starting thread (client mode): 0xa575b130
2026-02-14T10:25:53.988 [DEBUG] [Thread-183877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:25:54.008 [DEBUG] [Thread-183877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:25:54.009 [INFO] [Thread-183877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:25:54.011 [DEBUG] [Thread-183877] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:25:54.011 [DEBUG] [Thread-183877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:25:54.011 [DEBUG] [Thread-183877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:25:54.012 [DEBUG] [Thread-183877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:25:54.012 [DEBUG] [Thread-183877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:25:54.012 [DEBUG] [Thread-183877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:25:54.012 [DEBUG] [Thread-183877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:25:54.012 [DEBUG] [Thread-183877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:25:54.012 [DEBUG] [Thread-183877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:25:54.012 [DEBUG] [Thread-183877] [transport.py] [_log()] client lang: <none>
2026-02-14T10:25:54.012 [DEBUG] [Thread-183877] [transport.py] [_log()] server lang: <none>
2026-02-14T10:25:54.012 [DEBUG] [Thread-183877] [transport.py] [_log()] kex follows: False
2026-02-14T10:25:54.012 [DEBUG] [Thread-183877] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:25:54.012 [DEBUG] [Thread-183877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:25:54.012 [DEBUG] [Thread-183877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:25:54.013 [DEBUG] [Thread-183877] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:25:54.013 [DEBUG] [Thread-183877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:25:54.013 [DEBUG] [Thread-183877] [transport.py] [_log()] Compression: none
2026-02-14T10:25:54.013 [DEBUG] [Thread-183877] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:25:54.036 [DEBUG] [Thread-183877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:25:54.036 [DEBUG] [Thread-183877] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:25:54.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:25:54.037 [DEBUG] [Thread-183877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:25:54.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:25:54.039 [DEBUG] [Thread-183877] [transport.py] [_log()] userauth is OK
2026-02-14T10:25:54.040 [DEBUG] [Thread-183877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:25:54.040 [DEBUG] [Thread-183877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:25:54.040 [DEBUG] [Thread-183877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:25:54.040 [DEBUG] [Thread-183877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:25:54.066 [INFO] [Thread-183877] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:25:54.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:25:54.709 [DEBUG] [Thread-183877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:25:54.709 [DEBUG] [Thread-183877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:25:54.709 [DEBUG] [Thread-183877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:25:54.751 [DEBUG] [Thread-183877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:25:54.751 [DEBUG] [Thread-183877] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:25:54.755 [DEBUG] [Thread-183877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:25:54.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:25:54.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:25:54.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:25:54.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:25:54.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:25:54.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:25:54.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:25:54.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:25:54.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:25:54.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.350807 -999.00  +12.10  24.42     61   +5.00 1 2 1 1 1   888    0 7.40 36.23 ----- 19.0 24.4 154.6 31.4 18.5 -24.5 17.2 -23.0 16.1 -22.4 17.2 -24.7
2026-02-14T10:25:54.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:25:54.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:25:54.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.350807
2026-02-14T10:25:54.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:25:54.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:25:54.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:25:54.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:25:54.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:25:54.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:25:32', tmtdew=8.32, humidity=56.78, cloud=0.0, wind=34.62, temperature=12.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:25:09.725', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:25:54.781 [DEBUG] [Thread-183877] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:25:54.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-14T10:25:54.878 [DEBUG] [Thread-183880] [transport.py] [_log()] starting thread (client mode): 0xa2d3e290
2026-02-14T10:25:54.878 [DEBUG] [Thread-183880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:25:54.892 [DEBUG] [Thread-183880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:25:54.893 [INFO] [Thread-183880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:25:54.901 [DEBUG] [Thread-183880] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:25:54.901 [DEBUG] [Thread-183880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:25:54.901 [DEBUG] [Thread-183880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:25:54.902 [DEBUG] [Thread-183880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:25:54.902 [DEBUG] [Thread-183880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:25:54.902 [DEBUG] [Thread-183880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:25:54.902 [DEBUG] [Thread-183880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:25:54.902 [DEBUG] [Thread-183880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:25:54.902 [DEBUG] [Thread-183880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:25:54.902 [DEBUG] [Thread-183880] [transport.py] [_log()] client lang: <none>
2026-02-14T10:25:54.902 [DEBUG] [Thread-183880] [transport.py] [_log()] server lang: <none>
2026-02-14T10:25:54.902 [DEBUG] [Thread-183880] [transport.py] [_log()] kex follows: False
2026-02-14T10:25:54.902 [DEBUG] [Thread-183880] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:25:54.902 [DEBUG] [Thread-183880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:25:54.902 [DEBUG] [Thread-183880] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:25:54.902 [DEBUG] [Thread-183880] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:25:54.902 [DEBUG] [Thread-183880] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:25:54.902 [DEBUG] [Thread-183880] [transport.py] [_log()] Compression: none
2026-02-14T10:25:54.903 [DEBUG] [Thread-183880] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:25:54.961 [DEBUG] [Thread-183880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:25:54.962 [DEBUG] [Thread-183880] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:25:54.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:25:54.972 [DEBUG] [Thread-183880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:25:54.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:25:55.021 [DEBUG] [Thread-183880] [transport.py] [_log()] userauth is OK
2026-02-14T10:25:55.021 [DEBUG] [Thread-183880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:25:55.021 [DEBUG] [Thread-183880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:25:55.021 [DEBUG] [Thread-183880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:25:55.021 [DEBUG] [Thread-183880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:25:55.045 [INFO] [Thread-183880] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:25:55.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-14T10:25:55.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:25:55.880 [DEBUG] [Thread-183880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:25:55.881 [DEBUG] [Thread-183880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:25:55.928 [DEBUG] [Thread-183880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:25:55.929 [DEBUG] [Thread-183880] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:25:55.938 [DEBUG] [Thread-183880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:25:55.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:25:55.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:25:55.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-14T10:25:55.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:25:55.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:25:55.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:25:55.976 [DEBUG] [Thread-183880] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:26:03.922 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:26:03.923 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:26:04.620 [DEBUG] [Thread-183882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:26:16.566 [DEBUG] [Thread-183883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:26:19.675 [DEBUG] [Thread-183884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:26:25.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:26:25.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:26:26.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-14T10:26:27.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 26, 7), 8.32, 56.73, 0.0, 35.69, 11.85, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:26:27.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:26:07
2026-02-14T10:26:28.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:26:28.510 [DEBUG] [Thread-183885] [transport.py] [_log()] starting thread (client mode): 0xa2d3da50
2026-02-14T10:26:28.510 [DEBUG] [Thread-183885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:26:28.529 [DEBUG] [Thread-183885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:26:28.529 [INFO] [Thread-183885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:26:28.541 [DEBUG] [Thread-183885] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:26:28.541 [DEBUG] [Thread-183885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:26:28.541 [DEBUG] [Thread-183885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:26:28.541 [DEBUG] [Thread-183885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:26:28.541 [DEBUG] [Thread-183885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:26:28.541 [DEBUG] [Thread-183885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:26:28.541 [DEBUG] [Thread-183885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:26:28.541 [DEBUG] [Thread-183885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:26:28.541 [DEBUG] [Thread-183885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:26:28.541 [DEBUG] [Thread-183885] [transport.py] [_log()] client lang: <none>
2026-02-14T10:26:28.541 [DEBUG] [Thread-183885] [transport.py] [_log()] server lang: <none>
2026-02-14T10:26:28.541 [DEBUG] [Thread-183885] [transport.py] [_log()] kex follows: False
2026-02-14T10:26:28.542 [DEBUG] [Thread-183885] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:26:28.542 [DEBUG] [Thread-183885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:26:28.542 [DEBUG] [Thread-183885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:26:28.542 [DEBUG] [Thread-183885] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:26:28.542 [DEBUG] [Thread-183885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:26:28.542 [DEBUG] [Thread-183885] [transport.py] [_log()] Compression: none
2026-02-14T10:26:28.542 [DEBUG] [Thread-183885] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:26:28.561 [DEBUG] [Thread-183885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:26:28.561 [DEBUG] [Thread-183885] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:26:28.561 [DEBUG] [Thread-183885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:26:28.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:26:28.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:26:28.562 [DEBUG] [Thread-183885] [transport.py] [_log()] userauth is OK
2026-02-14T10:26:28.562 [DEBUG] [Thread-183885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:26:28.562 [DEBUG] [Thread-183885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:26:28.562 [DEBUG] [Thread-183885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:26:28.562 [DEBUG] [Thread-183885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:26:28.579 [INFO] [Thread-183885] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:26:28.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:26:29.238 [DEBUG] [Thread-183885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:26:29.239 [DEBUG] [Thread-183885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:26:29.239 [DEBUG] [Thread-183885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:26:29.280 [DEBUG] [Thread-183885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:26:29.281 [DEBUG] [Thread-183885] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:26:29.284 [DEBUG] [Thread-183885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:26:29.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:26:29.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:26:29.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:26:29.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:26:29.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:26:29.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:26:29.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:26:29.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:26:29.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:26:29.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.351155 -999.00  +12.10  31.25     62   +5.10 1 1 2 1 1   888    0 7.41 37.96 ----- 25.9 31.2 161.8 36.0 18.4 -26.8 17.3 -24.3 16.1 -24.1 17.1 -25.6
2026-02-14T10:26:29.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:26:29.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:26:29.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.351155
2026-02-14T10:26:29.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:26:29.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:26:29.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:26:29.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:26:29.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:26:29.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:26:07', tmtdew=8.32, humidity=56.73, cloud=0.0, wind=35.69, temperature=11.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:25:39.792', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:26:29.313 [DEBUG] [Thread-183885] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:26: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-14T10:26:29.423 [DEBUG] [Thread-183888] [transport.py] [_log()] starting thread (client mode): 0xa57b0640
2026-02-14T10:26:29.423 [DEBUG] [Thread-183888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:26:29.438 [DEBUG] [Thread-183888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:26:29.438 [INFO] [Thread-183888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:26:29.445 [DEBUG] [Thread-183888] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:26:29.446 [DEBUG] [Thread-183888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:26:29.446 [DEBUG] [Thread-183888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:26:29.446 [DEBUG] [Thread-183888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:26:29.446 [DEBUG] [Thread-183888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:26:29.446 [DEBUG] [Thread-183888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:26:29.446 [DEBUG] [Thread-183888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:26:29.446 [DEBUG] [Thread-183888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:26:29.446 [DEBUG] [Thread-183888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:26:29.446 [DEBUG] [Thread-183888] [transport.py] [_log()] client lang: <none>
2026-02-14T10:26:29.446 [DEBUG] [Thread-183888] [transport.py] [_log()] server lang: <none>
2026-02-14T10:26:29.446 [DEBUG] [Thread-183888] [transport.py] [_log()] kex follows: False
2026-02-14T10:26:29.446 [DEBUG] [Thread-183888] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:26:29.446 [DEBUG] [Thread-183888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:26:29.446 [DEBUG] [Thread-183888] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:26:29.446 [DEBUG] [Thread-183888] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:26:29.446 [DEBUG] [Thread-183888] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:26:29.446 [DEBUG] [Thread-183888] [transport.py] [_log()] Compression: none
2026-02-14T10:26:29.446 [DEBUG] [Thread-183888] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:26:29.504 [DEBUG] [Thread-183888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:26:29.504 [DEBUG] [Thread-183888] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:26:29.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:26:29.506 [DEBUG] [Thread-183888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:26:29.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:26:29.559 [DEBUG] [Thread-183888] [transport.py] [_log()] userauth is OK
2026-02-14T10:26:29.559 [DEBUG] [Thread-183888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:26:29.559 [DEBUG] [Thread-183888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:26:29.560 [DEBUG] [Thread-183888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:26:29.560 [DEBUG] [Thread-183888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:26:29.575 [INFO] [Thread-183888] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:26:29.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-14T10:26:29.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:26:30.423 [DEBUG] [Thread-183888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:26:30.424 [DEBUG] [Thread-183888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:26:30.471 [DEBUG] [Thread-183888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:26:30.471 [DEBUG] [Thread-183888] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:26:30.481 [DEBUG] [Thread-183888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:26:30.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:26:30.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:26:30.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-14T10:26:30.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:26:30.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:26:30.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:26:30.518 [DEBUG] [Thread-183888] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:26:34.713 [DEBUG] [Thread-183890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:26:49.764 [DEBUG] [Thread-183891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:27:00.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:27:00.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:27:00.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-14T10:27:02.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 26, 42), 8.68, 55.48, 0.0, 32.43, 12.81, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:27:02.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:26:42
2026-02-14T10:27:02.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:27:02.913 [DEBUG] [Thread-183892] [transport.py] [_log()] starting thread (client mode): 0xa2d10b50
2026-02-14T10:27:02.913 [DEBUG] [Thread-183892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:27:02.933 [DEBUG] [Thread-183892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:27:02.933 [INFO] [Thread-183892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:27:02.936 [DEBUG] [Thread-183892] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:27:02.936 [DEBUG] [Thread-183892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:27:02.936 [DEBUG] [Thread-183892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:27:02.936 [DEBUG] [Thread-183892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:27:02.937 [DEBUG] [Thread-183892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:27:02.937 [DEBUG] [Thread-183892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:27:02.937 [DEBUG] [Thread-183892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:27:02.937 [DEBUG] [Thread-183892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:27:02.937 [DEBUG] [Thread-183892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:27:02.937 [DEBUG] [Thread-183892] [transport.py] [_log()] client lang: <none>
2026-02-14T10:27:02.937 [DEBUG] [Thread-183892] [transport.py] [_log()] server lang: <none>
2026-02-14T10:27:02.937 [DEBUG] [Thread-183892] [transport.py] [_log()] kex follows: False
2026-02-14T10:27:02.937 [DEBUG] [Thread-183892] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:27:02.937 [DEBUG] [Thread-183892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:27:02.937 [DEBUG] [Thread-183892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:27:02.937 [DEBUG] [Thread-183892] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:27:02.937 [DEBUG] [Thread-183892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:27:02.937 [DEBUG] [Thread-183892] [transport.py] [_log()] Compression: none
2026-02-14T10:27:02.937 [DEBUG] [Thread-183892] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:27:02.955 [DEBUG] [Thread-183892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:27:02.956 [DEBUG] [Thread-183892] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:27:02.956 [DEBUG] [Thread-183892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:27:02.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:27:02.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:27:02.957 [DEBUG] [Thread-183892] [transport.py] [_log()] userauth is OK
2026-02-14T10:27:02.957 [DEBUG] [Thread-183892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:27:02.957 [DEBUG] [Thread-183892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:27:02.957 [DEBUG] [Thread-183892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:27:02.957 [DEBUG] [Thread-183892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:27:02.973 [INFO] [Thread-183892] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:27:02.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:27:03.762 [DEBUG] [Thread-183892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:27:03.763 [DEBUG] [Thread-183892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:27:03.763 [DEBUG] [Thread-183892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:27:03.803 [DEBUG] [Thread-183892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:27:03.804 [DEBUG] [Thread-183892] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:27:03.808 [DEBUG] [Thread-183892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:27:03.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:27:03.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:27:03.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:27:03.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:27:03.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:27:03.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:27:03.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:27:03.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:27:03.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:27:03.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.351502 -999.00  +11.90  24.98     62   +5.00 1 1 1 1 1   888    0 7.44 39.78 ----- 26.3 25.0 161.4 43.4 18.4 -27.4 17.2 -23.7 16.1 -24.7 17.1 -25.9
2026-02-14T10:27:03.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:27:03.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:27:03.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.351502
2026-02-14T10:27:03.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:27:03.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:27:03.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:27:03.828 [DEBUG] [Thread-183892] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:27:03.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:27:03.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:27:03.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:26:42', tmtdew=8.68, humidity=55.48, cloud=0.0, wind=32.43, temperature=12.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:26:09.773', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:27:03.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-14T10:27:03.923 [DEBUG] [Thread-183895] [transport.py] [_log()] starting thread (client mode): 0xa2d11780
2026-02-14T10:27:03.924 [DEBUG] [Thread-183895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:27:03.939 [DEBUG] [Thread-183895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:27:03.939 [INFO] [Thread-183895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:27:03.946 [DEBUG] [Thread-183895] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:27:03.947 [DEBUG] [Thread-183895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:27:03.947 [DEBUG] [Thread-183895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:27:03.947 [DEBUG] [Thread-183895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:27:03.947 [DEBUG] [Thread-183895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:27:03.947 [DEBUG] [Thread-183895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:27:03.947 [DEBUG] [Thread-183895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:27:03.947 [DEBUG] [Thread-183895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:27:03.947 [DEBUG] [Thread-183895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:27:03.947 [DEBUG] [Thread-183895] [transport.py] [_log()] client lang: <none>
2026-02-14T10:27:03.947 [DEBUG] [Thread-183895] [transport.py] [_log()] server lang: <none>
2026-02-14T10:27:03.947 [DEBUG] [Thread-183895] [transport.py] [_log()] kex follows: False
2026-02-14T10:27:03.947 [DEBUG] [Thread-183895] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:27:03.947 [DEBUG] [Thread-183895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:27:03.947 [DEBUG] [Thread-183895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:27:03.947 [DEBUG] [Thread-183895] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:27:03.947 [DEBUG] [Thread-183895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:27:03.947 [DEBUG] [Thread-183895] [transport.py] [_log()] Compression: none
2026-02-14T10:27:03.947 [DEBUG] [Thread-183895] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:27:04.004 [DEBUG] [Thread-183895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:27:04.004 [DEBUG] [Thread-183895] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:27:04.005 [DEBUG] [Thread-183895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:27:04.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:27:04.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:27:04.060 [DEBUG] [Thread-183895] [transport.py] [_log()] userauth is OK
2026-02-14T10:27:04.060 [DEBUG] [Thread-183895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:27:04.060 [DEBUG] [Thread-183895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:27:04.060 [DEBUG] [Thread-183895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:27:04.060 [DEBUG] [Thread-183895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:27:04.065 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:27:04.066 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:27:04.079 [INFO] [Thread-183895] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:27: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-14T10:27:04.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:27:04.804 [DEBUG] [Thread-183897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:27:04.918 [DEBUG] [Thread-183895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:27:04.918 [DEBUG] [Thread-183895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:27:04.966 [DEBUG] [Thread-183895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:27:04.967 [DEBUG] [Thread-183895] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:27:04.976 [DEBUG] [Thread-183895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:27:04.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:27: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-14T10:27: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-14T10:27:05.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:27:05.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:27:05.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:27:05.012 [DEBUG] [Thread-183895] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:27:16.612 [DEBUG] [Thread-183898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:27:19.861 [DEBUG] [Thread-183899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:27:34.898 [DEBUG] [Thread-183900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:27:35.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:27:35.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:27:35.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:27:36.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 27, 18), 8.27, 56.92, 0.0, 25.59, 11.87, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:27:36.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:27:18
2026-02-14T10:27:37.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:27:37.474 [DEBUG] [Thread-183901] [transport.py] [_log()] starting thread (client mode): 0xa575a590
2026-02-14T10:27:37.474 [DEBUG] [Thread-183901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:27:37.496 [DEBUG] [Thread-183901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:27:37.496 [INFO] [Thread-183901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:27:37.498 [DEBUG] [Thread-183901] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:27:37.499 [DEBUG] [Thread-183901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:27:37.499 [DEBUG] [Thread-183901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:27:37.499 [DEBUG] [Thread-183901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:27:37.499 [DEBUG] [Thread-183901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:27:37.499 [DEBUG] [Thread-183901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:27:37.499 [DEBUG] [Thread-183901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:27:37.499 [DEBUG] [Thread-183901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:27:37.499 [DEBUG] [Thread-183901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:27:37.499 [DEBUG] [Thread-183901] [transport.py] [_log()] client lang: <none>
2026-02-14T10:27:37.499 [DEBUG] [Thread-183901] [transport.py] [_log()] server lang: <none>
2026-02-14T10:27:37.499 [DEBUG] [Thread-183901] [transport.py] [_log()] kex follows: False
2026-02-14T10:27:37.499 [DEBUG] [Thread-183901] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:27:37.499 [DEBUG] [Thread-183901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:27:37.499 [DEBUG] [Thread-183901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:27:37.499 [DEBUG] [Thread-183901] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:27:37.499 [DEBUG] [Thread-183901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:27:37.499 [DEBUG] [Thread-183901] [transport.py] [_log()] Compression: none
2026-02-14T10:27:37.499 [DEBUG] [Thread-183901] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:27:37.516 [DEBUG] [Thread-183901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:27:37.517 [DEBUG] [Thread-183901] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:27:37.517 [DEBUG] [Thread-183901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:27:37.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:27:37.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:27:37.520 [DEBUG] [Thread-183901] [transport.py] [_log()] userauth is OK
2026-02-14T10:27:37.520 [DEBUG] [Thread-183901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:27:37.520 [DEBUG] [Thread-183901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:27:37.520 [DEBUG] [Thread-183901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:27:37.521 [DEBUG] [Thread-183901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:27:37.548 [INFO] [Thread-183901] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:27:37.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:27:38.167 [DEBUG] [Thread-183901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:27:38.167 [DEBUG] [Thread-183901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:27:38.168 [DEBUG] [Thread-183901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:27:38.208 [DEBUG] [Thread-183901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:27:38.208 [DEBUG] [Thread-183901] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:27:38.212 [DEBUG] [Thread-183901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:27:38.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:27:38.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:27:38.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:27:38.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:27:38.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:27:38.239 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:27:38.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:27:38.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:27:38.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:27:38.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.352197 -999.00  +11.70  30.58     63   +5.10 1 1 2 1 1   888    0 7.58 40.54 ----- 31.0 30.6 178.0 43.6 18.5 -26.8 17.3 -23.3 15.9 -29.5 17.2 -26.4
2026-02-14T10:27:38.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:27:38.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:27:38.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.352197
2026-02-14T10:27:38.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:27:38.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:27:38.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:27:38.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:27:38.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:27:38.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:27:18', tmtdew=8.27, humidity=56.92, cloud=0.0, wind=25.59, temperature=11.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:27:09.821', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:27:38.242 [DEBUG] [Thread-183901] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:27:38.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-14T10:27:38.338 [DEBUG] [Thread-183904] [transport.py] [_log()] starting thread (client mode): 0xa5758400
2026-02-14T10:27:38.338 [DEBUG] [Thread-183904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:27:38.352 [DEBUG] [Thread-183904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:27:38.353 [INFO] [Thread-183904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:27:38.360 [DEBUG] [Thread-183904] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:27:38.360 [DEBUG] [Thread-183904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:27:38.360 [DEBUG] [Thread-183904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:27:38.360 [DEBUG] [Thread-183904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:27:38.360 [DEBUG] [Thread-183904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:27:38.360 [DEBUG] [Thread-183904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:27:38.360 [DEBUG] [Thread-183904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:27:38.360 [DEBUG] [Thread-183904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:27:38.360 [DEBUG] [Thread-183904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:27:38.360 [DEBUG] [Thread-183904] [transport.py] [_log()] client lang: <none>
2026-02-14T10:27:38.360 [DEBUG] [Thread-183904] [transport.py] [_log()] server lang: <none>
2026-02-14T10:27:38.360 [DEBUG] [Thread-183904] [transport.py] [_log()] kex follows: False
2026-02-14T10:27:38.361 [DEBUG] [Thread-183904] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:27:38.361 [DEBUG] [Thread-183904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:27:38.361 [DEBUG] [Thread-183904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:27:38.361 [DEBUG] [Thread-183904] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:27:38.361 [DEBUG] [Thread-183904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:27:38.361 [DEBUG] [Thread-183904] [transport.py] [_log()] Compression: none
2026-02-14T10:27:38.361 [DEBUG] [Thread-183904] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:27:38.419 [DEBUG] [Thread-183904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:27:38.420 [DEBUG] [Thread-183904] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:27:38.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:27:38.421 [DEBUG] [Thread-183904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:27:38.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:27:38.475 [DEBUG] [Thread-183904] [transport.py] [_log()] userauth is OK
2026-02-14T10:27:38.475 [DEBUG] [Thread-183904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:27:38.475 [DEBUG] [Thread-183904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:27:38.475 [DEBUG] [Thread-183904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:27:38.475 [DEBUG] [Thread-183904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:27:38.494 [INFO] [Thread-183904] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:27:38.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-14T10:27:38.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:27:39.298 [DEBUG] [Thread-183904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:27:39.298 [DEBUG] [Thread-183904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:27:39.351 [DEBUG] [Thread-183904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:27:39.351 [DEBUG] [Thread-183904] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:27:39.361 [DEBUG] [Thread-183904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:27:39.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:27:39.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-14T10:27:39.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-14T10:27:39.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:27:39.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:27:39.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:27:39.398 [DEBUG] [Thread-183904] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:27:49.931 [DEBUG] [Thread-183906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:28:04.205 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:28:04.206 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:28:04.970 [DEBUG] [Thread-183907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:28:09.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:28:09.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:28:09.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:28:12.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 27, 55), 8.08, 57.81, 0.0, 32.64, 12.02, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:28:12.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:27:55
2026-02-14T10:28:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:28:12.789 [DEBUG] [Thread-183908] [transport.py] [_log()] starting thread (client mode): 0xa575b8e0
2026-02-14T10:28:12.790 [DEBUG] [Thread-183908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:28:12.810 [DEBUG] [Thread-183908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:28:12.810 [INFO] [Thread-183908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:28:12.813 [DEBUG] [Thread-183908] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:28:12.813 [DEBUG] [Thread-183908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:28:12.813 [DEBUG] [Thread-183908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:28:12.813 [DEBUG] [Thread-183908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:28:12.813 [DEBUG] [Thread-183908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:28:12.813 [DEBUG] [Thread-183908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:28:12.814 [DEBUG] [Thread-183908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:28:12.814 [DEBUG] [Thread-183908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:28:12.814 [DEBUG] [Thread-183908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:28:12.814 [DEBUG] [Thread-183908] [transport.py] [_log()] client lang: <none>
2026-02-14T10:28:12.814 [DEBUG] [Thread-183908] [transport.py] [_log()] server lang: <none>
2026-02-14T10:28:12.814 [DEBUG] [Thread-183908] [transport.py] [_log()] kex follows: False
2026-02-14T10:28:12.814 [DEBUG] [Thread-183908] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:28:12.814 [DEBUG] [Thread-183908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:28:12.814 [DEBUG] [Thread-183908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:28:12.814 [DEBUG] [Thread-183908] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:28:12.814 [DEBUG] [Thread-183908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:28:12.814 [DEBUG] [Thread-183908] [transport.py] [_log()] Compression: none
2026-02-14T10:28:12.814 [DEBUG] [Thread-183908] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:28:12.831 [DEBUG] [Thread-183908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:28:12.832 [DEBUG] [Thread-183908] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:28:12.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:28:12.833 [DEBUG] [Thread-183908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:28:12.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:28:12.834 [DEBUG] [Thread-183908] [transport.py] [_log()] userauth is OK
2026-02-14T10:28:12.835 [DEBUG] [Thread-183908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:28:12.835 [DEBUG] [Thread-183908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:28:12.835 [DEBUG] [Thread-183908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:28:12.835 [DEBUG] [Thread-183908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:28:12.851 [INFO] [Thread-183908] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:28:12.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:28:13.489 [DEBUG] [Thread-183908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:28:13.489 [DEBUG] [Thread-183908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:28:13.490 [DEBUG] [Thread-183908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:28:13.531 [DEBUG] [Thread-183908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:28:13.531 [DEBUG] [Thread-183908] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:28:13.535 [DEBUG] [Thread-183908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:28:13.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:28:13.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:28:13.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:28:13.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:28:13.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:28:13.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:28:13.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:28:13.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:28:13.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:28:13.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.352544 -999.00  +11.60  28.63     63   +5.00 1 1 1 1 1   888    0 7.62 41.10 ----- 22.8 28.6 195.6 39.0 18.1 -26.1 16.5 -28.6 16.1 -24.1 16.9 -25.6
2026-02-14T10:28:13.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:28:13.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:28:13.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.352544
2026-02-14T10:28:13.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:28:13.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:28:13.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:28:13.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:28:13.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:28:13.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:27:55', tmtdew=8.08, humidity=57.81, cloud=0.0, wind=32.64, temperature=12.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:27:39.802', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:28:13.563 [DEBUG] [Thread-183908] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:28:13.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-14T10:28:13.658 [DEBUG] [Thread-183911] [transport.py] [_log()] starting thread (client mode): 0xa2d10220
2026-02-14T10:28:13.658 [DEBUG] [Thread-183911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:28:13.674 [DEBUG] [Thread-183911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:28:13.674 [INFO] [Thread-183911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:28:13.682 [DEBUG] [Thread-183911] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:28:13.682 [DEBUG] [Thread-183911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:28:13.682 [DEBUG] [Thread-183911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:28:13.682 [DEBUG] [Thread-183911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:28:13.682 [DEBUG] [Thread-183911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:28:13.682 [DEBUG] [Thread-183911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:28:13.682 [DEBUG] [Thread-183911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:28:13.682 [DEBUG] [Thread-183911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:28:13.682 [DEBUG] [Thread-183911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:28:13.682 [DEBUG] [Thread-183911] [transport.py] [_log()] client lang: <none>
2026-02-14T10:28:13.682 [DEBUG] [Thread-183911] [transport.py] [_log()] server lang: <none>
2026-02-14T10:28:13.682 [DEBUG] [Thread-183911] [transport.py] [_log()] kex follows: False
2026-02-14T10:28:13.683 [DEBUG] [Thread-183911] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:28:13.683 [DEBUG] [Thread-183911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:28:13.683 [DEBUG] [Thread-183911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:28:13.683 [DEBUG] [Thread-183911] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:28:13.683 [DEBUG] [Thread-183911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:28:13.683 [DEBUG] [Thread-183911] [transport.py] [_log()] Compression: none
2026-02-14T10:28:13.683 [DEBUG] [Thread-183911] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:28:13.742 [DEBUG] [Thread-183911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:28:13.743 [DEBUG] [Thread-183911] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:28:13.744 [DEBUG] [Thread-183911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:28:13.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:28:13.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:28:13.798 [DEBUG] [Thread-183911] [transport.py] [_log()] userauth is OK
2026-02-14T10:28:13.798 [DEBUG] [Thread-183911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:28:13.798 [DEBUG] [Thread-183911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:28:13.799 [DEBUG] [Thread-183911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:28:13.799 [DEBUG] [Thread-183911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:28:13.819 [INFO] [Thread-183911] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:28:13.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-14T10:28:13.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:28:14.683 [DEBUG] [Thread-183911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:28:14.684 [DEBUG] [Thread-183911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:28:14.731 [DEBUG] [Thread-183911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:28:14.732 [DEBUG] [Thread-183911] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:28:14.741 [DEBUG] [Thread-183911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:28:14.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:28:14.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-14T10:28:14.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-14T10:28:14.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:28:14.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:28:14.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:28:14.778 [DEBUG] [Thread-183911] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:28:16.655 [DEBUG] [Thread-183913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:28:20.002 [DEBUG] [Thread-183914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:28:35.054 [DEBUG] [Thread-183915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:28:44.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:28:44.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:28:44.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-14T10:28:46.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 28, 30), 8.34, 56.89, 0.0, 33.15, 12.33, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:28:46.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:28:30
2026-02-14T10:28:47.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:28:47.304 [DEBUG] [Thread-183916] [transport.py] [_log()] starting thread (client mode): 0xa2d79270
2026-02-14T10:28:47.305 [DEBUG] [Thread-183916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:28:47.324 [DEBUG] [Thread-183916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:28:47.324 [INFO] [Thread-183916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:28:47.327 [DEBUG] [Thread-183916] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:28:47.328 [DEBUG] [Thread-183916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:28:47.328 [DEBUG] [Thread-183916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:28:47.328 [DEBUG] [Thread-183916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:28:47.328 [DEBUG] [Thread-183916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:28:47.328 [DEBUG] [Thread-183916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:28:47.328 [DEBUG] [Thread-183916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:28:47.328 [DEBUG] [Thread-183916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:28:47.328 [DEBUG] [Thread-183916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:28:47.328 [DEBUG] [Thread-183916] [transport.py] [_log()] client lang: <none>
2026-02-14T10:28:47.328 [DEBUG] [Thread-183916] [transport.py] [_log()] server lang: <none>
2026-02-14T10:28:47.328 [DEBUG] [Thread-183916] [transport.py] [_log()] kex follows: False
2026-02-14T10:28:47.328 [DEBUG] [Thread-183916] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:28:47.329 [DEBUG] [Thread-183916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:28:47.329 [DEBUG] [Thread-183916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:28:47.329 [DEBUG] [Thread-183916] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:28:47.329 [DEBUG] [Thread-183916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:28:47.329 [DEBUG] [Thread-183916] [transport.py] [_log()] Compression: none
2026-02-14T10:28:47.329 [DEBUG] [Thread-183916] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:28:47.346 [DEBUG] [Thread-183916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:28:47.346 [DEBUG] [Thread-183916] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:28:47.347 [DEBUG] [Thread-183916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:28:47.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:28:47.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:28:47.348 [DEBUG] [Thread-183916] [transport.py] [_log()] userauth is OK
2026-02-14T10:28:47.348 [DEBUG] [Thread-183916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:28:47.349 [DEBUG] [Thread-183916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:28:47.349 [DEBUG] [Thread-183916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:28:47.349 [DEBUG] [Thread-183916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:28:47.372 [INFO] [Thread-183916] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:28:47.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:28:48.169 [DEBUG] [Thread-183916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:28:48.169 [DEBUG] [Thread-183916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:28:48.170 [DEBUG] [Thread-183916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:28:48.210 [DEBUG] [Thread-183916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:28:48.211 [DEBUG] [Thread-183916] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:28:48.214 [DEBUG] [Thread-183916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:28:48.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:28:48.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:28:48.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:28:48.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:28:48.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:28:48.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:28:48.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:28:48.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:28:48.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:28:48.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.352891 -999.00  +11.90  20.65     63   +5.10 1 1 1 1 1   888    0 7.64 41.09 ----- 26.1 20.6 184.8 33.8 18.2 -24.6 16.7 -30.6 16.0 -24.2 17.0 -23.7
2026-02-14T10:28:48.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:28:48.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:28:48.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.352891
2026-02-14T10:28:48.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:28:48.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:28:48.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:28:48.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:28:48.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:28:48.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:28:30', tmtdew=8.34, humidity=56.89, cloud=0.0, wind=33.15, temperature=12.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:28:09.782', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:28:48.239 [DEBUG] [Thread-183916] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:28:48.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-14T10:28:48.345 [DEBUG] [Thread-183919] [transport.py] [_log()] starting thread (client mode): 0xa2d795d0
2026-02-14T10:28:48.346 [DEBUG] [Thread-183919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:28:48.360 [DEBUG] [Thread-183919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:28:48.360 [INFO] [Thread-183919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:28:48.367 [DEBUG] [Thread-183919] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:28:48.368 [DEBUG] [Thread-183919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:28:48.368 [DEBUG] [Thread-183919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:28:48.368 [DEBUG] [Thread-183919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:28:48.368 [DEBUG] [Thread-183919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:28:48.368 [DEBUG] [Thread-183919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:28:48.368 [DEBUG] [Thread-183919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:28:48.368 [DEBUG] [Thread-183919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:28:48.368 [DEBUG] [Thread-183919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:28:48.368 [DEBUG] [Thread-183919] [transport.py] [_log()] client lang: <none>
2026-02-14T10:28:48.368 [DEBUG] [Thread-183919] [transport.py] [_log()] server lang: <none>
2026-02-14T10:28:48.368 [DEBUG] [Thread-183919] [transport.py] [_log()] kex follows: False
2026-02-14T10:28:48.368 [DEBUG] [Thread-183919] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:28:48.368 [DEBUG] [Thread-183919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:28:48.368 [DEBUG] [Thread-183919] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:28:48.368 [DEBUG] [Thread-183919] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:28:48.368 [DEBUG] [Thread-183919] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:28:48.368 [DEBUG] [Thread-183919] [transport.py] [_log()] Compression: none
2026-02-14T10:28:48.368 [DEBUG] [Thread-183919] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:28:48.426 [DEBUG] [Thread-183919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:28:48.426 [DEBUG] [Thread-183919] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:28:48.427 [DEBUG] [Thread-183919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:28:48.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:28:48.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:28:48.481 [DEBUG] [Thread-183919] [transport.py] [_log()] userauth is OK
2026-02-14T10:28:48.482 [DEBUG] [Thread-183919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:28:48.482 [DEBUG] [Thread-183919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:28:48.482 [DEBUG] [Thread-183919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:28:48.482 [DEBUG] [Thread-183919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:28:48.507 [INFO] [Thread-183919] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:28:48.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-14T10:28:48.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:28:49.303 [DEBUG] [Thread-183919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:28:49.303 [DEBUG] [Thread-183919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:28:49.351 [DEBUG] [Thread-183919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:28:49.351 [DEBUG] [Thread-183919] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:28:49.361 [DEBUG] [Thread-183919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:28:49.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:28:49.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-14T10:28:49.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:28:49.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:28:49.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:28:49.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:28:49.395 [DEBUG] [Thread-183919] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:28:50.091 [DEBUG] [Thread-183921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:29:04.346 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:29:04.347 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:29:05.143 [DEBUG] [Thread-183922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:29:16.711 [DEBUG] [Thread-183923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:29:19.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:29:19.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:29:19.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-14T10:29:20.180 [DEBUG] [Thread-183924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:29:21.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 29, 5), 8.25, 57.19, 0.0, 34.34, 12.17, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:29:21.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:29:05
2026-02-14T10:29:21.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:29:21.881 [DEBUG] [Thread-183925] [transport.py] [_log()] starting thread (client mode): 0xa57b3670
2026-02-14T10:29:21.882 [DEBUG] [Thread-183925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:29:21.899 [DEBUG] [Thread-183925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:29:21.900 [INFO] [Thread-183925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:29:21.903 [DEBUG] [Thread-183925] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:29:21.903 [DEBUG] [Thread-183925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:29:21.903 [DEBUG] [Thread-183925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:29:21.904 [DEBUG] [Thread-183925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:29:21.904 [DEBUG] [Thread-183925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:29:21.904 [DEBUG] [Thread-183925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:29:21.904 [DEBUG] [Thread-183925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:29:21.904 [DEBUG] [Thread-183925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:29:21.904 [DEBUG] [Thread-183925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:29:21.904 [DEBUG] [Thread-183925] [transport.py] [_log()] client lang: <none>
2026-02-14T10:29:21.904 [DEBUG] [Thread-183925] [transport.py] [_log()] server lang: <none>
2026-02-14T10:29:21.904 [DEBUG] [Thread-183925] [transport.py] [_log()] kex follows: False
2026-02-14T10:29:21.904 [DEBUG] [Thread-183925] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:29:21.904 [DEBUG] [Thread-183925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:29:21.904 [DEBUG] [Thread-183925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:29:21.904 [DEBUG] [Thread-183925] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:29:21.904 [DEBUG] [Thread-183925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:29:21.904 [DEBUG] [Thread-183925] [transport.py] [_log()] Compression: none
2026-02-14T10:29:21.904 [DEBUG] [Thread-183925] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:29:21.921 [DEBUG] [Thread-183925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:29:21.922 [DEBUG] [Thread-183925] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:29:21.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:29:21.923 [DEBUG] [Thread-183925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:29:21.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:29:21.925 [DEBUG] [Thread-183925] [transport.py] [_log()] userauth is OK
2026-02-14T10:29:21.925 [DEBUG] [Thread-183925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:29:21.925 [DEBUG] [Thread-183925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:29:21.925 [DEBUG] [Thread-183925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:29:21.926 [DEBUG] [Thread-183925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:29:21.949 [INFO] [Thread-183925] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:29:21.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:29:22.600 [DEBUG] [Thread-183925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:29:22.601 [DEBUG] [Thread-183925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:29:22.601 [DEBUG] [Thread-183925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:29:22.642 [DEBUG] [Thread-183925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:29:22.642 [DEBUG] [Thread-183925] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:29:22.646 [DEBUG] [Thread-183925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:29:22.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:29:22.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:29:22.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:29:22.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:29:22.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:29:22.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:29:22.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:29:22.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:29:22.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:29:22.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.353238 -999.00  +11.90  21.09     62   +4.80 1 1 1 1 1   888    0 7.75 45.30 ----- 22.2 21.1 196.4 35.4 18.2 -25.2 16.8 -26.5 16.1 -23.2 17.0 -25.3
2026-02-14T10:29:22.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:29:22.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:29:22.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.353238
2026-02-14T10:29:22.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:29:22.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:29:22.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:29:22.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:29:22.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:29:22.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:29:05', tmtdew=8.25, humidity=57.19, cloud=0.0, wind=34.34, temperature=12.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:28:39.763', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:29:22.673 [DEBUG] [Thread-183925] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:29:22.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-14T10:29:22.767 [DEBUG] [Thread-183928] [transport.py] [_log()] starting thread (client mode): 0xa57b3d00
2026-02-14T10:29:22.767 [DEBUG] [Thread-183928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:29:22.782 [DEBUG] [Thread-183928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:29:22.782 [INFO] [Thread-183928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:29:22.789 [DEBUG] [Thread-183928] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:29:22.789 [DEBUG] [Thread-183928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:29:22.789 [DEBUG] [Thread-183928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:29:22.789 [DEBUG] [Thread-183928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:29:22.789 [DEBUG] [Thread-183928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:29:22.789 [DEBUG] [Thread-183928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:29:22.790 [DEBUG] [Thread-183928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:29:22.790 [DEBUG] [Thread-183928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:29:22.790 [DEBUG] [Thread-183928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:29:22.790 [DEBUG] [Thread-183928] [transport.py] [_log()] client lang: <none>
2026-02-14T10:29:22.790 [DEBUG] [Thread-183928] [transport.py] [_log()] server lang: <none>
2026-02-14T10:29:22.790 [DEBUG] [Thread-183928] [transport.py] [_log()] kex follows: False
2026-02-14T10:29:22.790 [DEBUG] [Thread-183928] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:29:22.790 [DEBUG] [Thread-183928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:29:22.790 [DEBUG] [Thread-183928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:29:22.790 [DEBUG] [Thread-183928] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:29:22.790 [DEBUG] [Thread-183928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:29:22.790 [DEBUG] [Thread-183928] [transport.py] [_log()] Compression: none
2026-02-14T10:29:22.790 [DEBUG] [Thread-183928] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:29:22.848 [DEBUG] [Thread-183928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:29:22.849 [DEBUG] [Thread-183928] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:29:22.849 [DEBUG] [Thread-183928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:29:22.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:29:22.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:29:22.904 [DEBUG] [Thread-183928] [transport.py] [_log()] userauth is OK
2026-02-14T10:29:22.904 [DEBUG] [Thread-183928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:29:22.904 [DEBUG] [Thread-183928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:29:22.904 [DEBUG] [Thread-183928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:29:22.904 [DEBUG] [Thread-183928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:29:22.922 [INFO] [Thread-183928] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:29:22.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-14T10:29:22.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:29:23.757 [DEBUG] [Thread-183928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:29:23.758 [DEBUG] [Thread-183928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:29:23.805 [DEBUG] [Thread-183928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:29:23.806 [DEBUG] [Thread-183928] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:29:23.815 [DEBUG] [Thread-183928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:29:23.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:29:23.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-14T10:29:23.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-14T10:29:23.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:29:23.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:29:23.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:29:23.850 [DEBUG] [Thread-183928] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:29:35.218 [DEBUG] [Thread-183930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:29:50.268 [DEBUG] [Thread-183931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:29:53.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:29:53.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:29:53.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-14T10:29:56.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 29, 42), 8.97, 54.45, 0.0, 38.88, 13.1, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:29:56.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:29:42
2026-02-14T10:29:56.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:29:56.773 [DEBUG] [Thread-183932] [transport.py] [_log()] starting thread (client mode): 0xa5758640
2026-02-14T10:29:56.773 [DEBUG] [Thread-183932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:29:56.802 [DEBUG] [Thread-183932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:29:56.802 [INFO] [Thread-183932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:29:56.804 [DEBUG] [Thread-183932] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:29:56.805 [DEBUG] [Thread-183932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:29:56.805 [DEBUG] [Thread-183932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:29:56.805 [DEBUG] [Thread-183932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:29:56.805 [DEBUG] [Thread-183932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:29:56.805 [DEBUG] [Thread-183932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:29:56.805 [DEBUG] [Thread-183932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:29:56.805 [DEBUG] [Thread-183932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:29:56.805 [DEBUG] [Thread-183932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:29:56.805 [DEBUG] [Thread-183932] [transport.py] [_log()] client lang: <none>
2026-02-14T10:29:56.805 [DEBUG] [Thread-183932] [transport.py] [_log()] server lang: <none>
2026-02-14T10:29:56.805 [DEBUG] [Thread-183932] [transport.py] [_log()] kex follows: False
2026-02-14T10:29:56.805 [DEBUG] [Thread-183932] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:29:56.805 [DEBUG] [Thread-183932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:29:56.805 [DEBUG] [Thread-183932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:29:56.805 [DEBUG] [Thread-183932] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:29:56.805 [DEBUG] [Thread-183932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:29:56.805 [DEBUG] [Thread-183932] [transport.py] [_log()] Compression: none
2026-02-14T10:29:56.805 [DEBUG] [Thread-183932] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:29:56.820 [DEBUG] [Thread-183932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:29:56.820 [DEBUG] [Thread-183932] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:29:56.821 [DEBUG] [Thread-183932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:29:56.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:29:56.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:29:56.823 [DEBUG] [Thread-183932] [transport.py] [_log()] userauth is OK
2026-02-14T10:29:56.823 [DEBUG] [Thread-183932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:29:56.823 [DEBUG] [Thread-183932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:29:56.824 [DEBUG] [Thread-183932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:29:56.824 [DEBUG] [Thread-183932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:29:56.843 [INFO] [Thread-183932] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:29:56.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:29:57.507 [DEBUG] [Thread-183932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:29:57.508 [DEBUG] [Thread-183932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:29:57.508 [DEBUG] [Thread-183932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:29:57.549 [DEBUG] [Thread-183932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:29:57.549 [DEBUG] [Thread-183932] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:29:57.553 [DEBUG] [Thread-183932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:29:57.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:29:57.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:29:57.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:29:57.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:29:57.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:29:57.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:29:57.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:29:57.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:29:57.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:29:57.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.353585 -999.00  +12.00  16.08     62   +5.00 1 1 1 1 1   888    0 7.77 48.37 ----- 17.6 16.1 190.2 26.1 18.2 -24.3 16.8 -25.8 16.2 -23.4 17.1 -23.4
2026-02-14T10:29:57.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:29:57.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:29:57.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.353585
2026-02-14T10:29:57.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:29:57.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:29:57.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:29:57.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:29:57.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:29:57.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:29:42', tmtdew=8.97, humidity=54.45, cloud=0.0, wind=38.88, temperature=13.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:29:09.744', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:29:57.583 [DEBUG] [Thread-183932] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:29:57.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-14T10:29:57.679 [DEBUG] [Thread-183935] [transport.py] [_log()] starting thread (client mode): 0xa575bd90
2026-02-14T10:29:57.679 [DEBUG] [Thread-183935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:29:57.695 [DEBUG] [Thread-183935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:29:57.695 [INFO] [Thread-183935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:29:57.706 [DEBUG] [Thread-183935] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:29:57.706 [DEBUG] [Thread-183935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:29:57.706 [DEBUG] [Thread-183935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:29:57.706 [DEBUG] [Thread-183935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:29:57.706 [DEBUG] [Thread-183935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:29:57.706 [DEBUG] [Thread-183935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:29:57.706 [DEBUG] [Thread-183935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:29:57.706 [DEBUG] [Thread-183935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:29:57.706 [DEBUG] [Thread-183935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:29:57.706 [DEBUG] [Thread-183935] [transport.py] [_log()] client lang: <none>
2026-02-14T10:29:57.706 [DEBUG] [Thread-183935] [transport.py] [_log()] server lang: <none>
2026-02-14T10:29:57.706 [DEBUG] [Thread-183935] [transport.py] [_log()] kex follows: False
2026-02-14T10:29:57.706 [DEBUG] [Thread-183935] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:29:57.707 [DEBUG] [Thread-183935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:29:57.707 [DEBUG] [Thread-183935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:29:57.707 [DEBUG] [Thread-183935] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:29:57.707 [DEBUG] [Thread-183935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:29:57.707 [DEBUG] [Thread-183935] [transport.py] [_log()] Compression: none
2026-02-14T10:29:57.707 [DEBUG] [Thread-183935] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:29:57.763 [DEBUG] [Thread-183935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:29:57.764 [DEBUG] [Thread-183935] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:29:57.765 [DEBUG] [Thread-183935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:29:57.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:29:57.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:29:57.821 [DEBUG] [Thread-183935] [transport.py] [_log()] userauth is OK
2026-02-14T10:29:57.822 [DEBUG] [Thread-183935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:29:57.822 [DEBUG] [Thread-183935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:29:57.822 [DEBUG] [Thread-183935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:29:57.822 [DEBUG] [Thread-183935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:29:57.840 [INFO] [Thread-183935] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:29:57.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-14T10:29:57.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:29:58.682 [DEBUG] [Thread-183935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:29:58.682 [DEBUG] [Thread-183935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:29:58.730 [DEBUG] [Thread-183935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:29:58.730 [DEBUG] [Thread-183935] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:29:58.739 [DEBUG] [Thread-183935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:29:58.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:29:58.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:29:58.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-14T10:29:58.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:29:58.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:29:58.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:29:58.773 [DEBUG] [Thread-183935] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:30:04.486 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:30:04.486 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:30:05.301 [DEBUG] [Thread-183937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:30:16.751 [DEBUG] [Thread-183938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:30:20.359 [DEBUG] [Thread-183939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:30:28.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:30:28.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:30:28.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-14T10:30:30.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 30, 17), 8.0, 57.94, 0.0, 31.76, 11.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:30:30.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:30:17
2026-02-14T10:30:31.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:30:31.220 [DEBUG] [Thread-183940] [transport.py] [_log()] starting thread (client mode): 0xa2d57eb0
2026-02-14T10:30:31.220 [DEBUG] [Thread-183940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:30:31.240 [DEBUG] [Thread-183940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:30:31.240 [INFO] [Thread-183940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:30:31.243 [DEBUG] [Thread-183940] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:30:31.243 [DEBUG] [Thread-183940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:30:31.243 [DEBUG] [Thread-183940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:30:31.243 [DEBUG] [Thread-183940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:30:31.244 [DEBUG] [Thread-183940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:30:31.244 [DEBUG] [Thread-183940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:30:31.244 [DEBUG] [Thread-183940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:30:31.244 [DEBUG] [Thread-183940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:30:31.244 [DEBUG] [Thread-183940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:30:31.244 [DEBUG] [Thread-183940] [transport.py] [_log()] client lang: <none>
2026-02-14T10:30:31.244 [DEBUG] [Thread-183940] [transport.py] [_log()] server lang: <none>
2026-02-14T10:30:31.244 [DEBUG] [Thread-183940] [transport.py] [_log()] kex follows: False
2026-02-14T10:30:31.244 [DEBUG] [Thread-183940] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:30:31.244 [DEBUG] [Thread-183940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:30:31.244 [DEBUG] [Thread-183940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:30:31.244 [DEBUG] [Thread-183940] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:30:31.244 [DEBUG] [Thread-183940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:30:31.244 [DEBUG] [Thread-183940] [transport.py] [_log()] Compression: none
2026-02-14T10:30:31.244 [DEBUG] [Thread-183940] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:30:31.261 [DEBUG] [Thread-183940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:30:31.262 [DEBUG] [Thread-183940] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:30:31.263 [DEBUG] [Thread-183940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:30:31.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:30:31.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:30:31.265 [DEBUG] [Thread-183940] [transport.py] [_log()] userauth is OK
2026-02-14T10:30:31.265 [DEBUG] [Thread-183940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:30:31.265 [DEBUG] [Thread-183940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:30:31.265 [DEBUG] [Thread-183940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:30:31.265 [DEBUG] [Thread-183940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:30:31.290 [INFO] [Thread-183940] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:30:31.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:30:31.947 [DEBUG] [Thread-183940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:30:31.948 [DEBUG] [Thread-183940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:30:31.948 [DEBUG] [Thread-183940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:30:31.988 [DEBUG] [Thread-183940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:30:31.989 [DEBUG] [Thread-183940] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:30:31.992 [DEBUG] [Thread-183940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:30:32.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:30:32.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:30:32.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:30:32.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:30:32.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:30:32.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:30:32.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:30:32.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:30:32.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:30:32.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.353932 -999.00  +12.20  24.58     61   +4.90 1 1 1 1 1   888    0 7.95 50.39 ----- 21.3 24.6 162.6 35.0 18.3 -25.9 16.9 -26.4 16.2 -23.9 17.1 -24.2
2026-02-14T10:30:32.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:30:32.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:30:32.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.353932
2026-02-14T10:30:32.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:30:32.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:30:32.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:30:32.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:30:32.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:30:32.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:30:17', tmtdew=8.0, humidity=57.94, cloud=0.0, wind=31.76, temperature=11.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:29:39.725', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:30:32.019 [DEBUG] [Thread-183940] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:30:32.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-14T10:30:32.114 [DEBUG] [Thread-183943] [transport.py] [_log()] starting thread (client mode): 0xa575ab30
2026-02-14T10:30:32.115 [DEBUG] [Thread-183943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:30:32.130 [DEBUG] [Thread-183943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:30:32.130 [INFO] [Thread-183943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:30:32.138 [DEBUG] [Thread-183943] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:30:32.138 [DEBUG] [Thread-183943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:30:32.138 [DEBUG] [Thread-183943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:30:32.138 [DEBUG] [Thread-183943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:30:32.138 [DEBUG] [Thread-183943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:30:32.138 [DEBUG] [Thread-183943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:30:32.139 [DEBUG] [Thread-183943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:30:32.139 [DEBUG] [Thread-183943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:30:32.139 [DEBUG] [Thread-183943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:30:32.139 [DEBUG] [Thread-183943] [transport.py] [_log()] client lang: <none>
2026-02-14T10:30:32.139 [DEBUG] [Thread-183943] [transport.py] [_log()] server lang: <none>
2026-02-14T10:30:32.139 [DEBUG] [Thread-183943] [transport.py] [_log()] kex follows: False
2026-02-14T10:30:32.139 [DEBUG] [Thread-183943] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:30:32.139 [DEBUG] [Thread-183943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:30:32.139 [DEBUG] [Thread-183943] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:30:32.139 [DEBUG] [Thread-183943] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:30:32.139 [DEBUG] [Thread-183943] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:30:32.139 [DEBUG] [Thread-183943] [transport.py] [_log()] Compression: none
2026-02-14T10:30:32.139 [DEBUG] [Thread-183943] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:30:32.201 [DEBUG] [Thread-183943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:30:32.201 [DEBUG] [Thread-183943] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:30:32.202 [DEBUG] [Thread-183943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:30:32.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:30:32.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:30:32.259 [DEBUG] [Thread-183943] [transport.py] [_log()] userauth is OK
2026-02-14T10:30:32.259 [DEBUG] [Thread-183943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:30:32.259 [DEBUG] [Thread-183943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:30:32.259 [DEBUG] [Thread-183943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:30:32.260 [DEBUG] [Thread-183943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:30:32.278 [INFO] [Thread-183943] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:30:32.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-14T10:30:32.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:30:33.137 [DEBUG] [Thread-183943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:30:33.137 [DEBUG] [Thread-183943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:30:33.186 [DEBUG] [Thread-183943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:30:33.187 [DEBUG] [Thread-183943] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:30:33.195 [DEBUG] [Thread-183943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:30:33.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:30:33.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-14T10:30:33.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-14T10:30:33.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:30:33.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:30:33.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:30:33.226 [DEBUG] [Thread-183943] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:30:35.395 [DEBUG] [Thread-183945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:30:50.452 [DEBUG] [Thread-183946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:31:03.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:31:03.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:31:03.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:31:04.627 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:31:04.628 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:31:05.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 30, 52), 8.25, 57.21, 0.0, 28.11, 12.12, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:31:05.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:30:52
2026-02-14T10:31:05.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:31:05.486 [DEBUG] [Thread-183947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:31:05.585 [DEBUG] [Thread-183948] [transport.py] [_log()] starting thread (client mode): 0xa2d12d70
2026-02-14T10:31:05.585 [DEBUG] [Thread-183948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:31:05.605 [DEBUG] [Thread-183948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:31:05.605 [INFO] [Thread-183948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:31:05.609 [DEBUG] [Thread-183948] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:31:05.609 [DEBUG] [Thread-183948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:31:05.609 [DEBUG] [Thread-183948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:31:05.609 [DEBUG] [Thread-183948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:31:05.609 [DEBUG] [Thread-183948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:31:05.609 [DEBUG] [Thread-183948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:31:05.609 [DEBUG] [Thread-183948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:31:05.609 [DEBUG] [Thread-183948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:31:05.609 [DEBUG] [Thread-183948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:31:05.609 [DEBUG] [Thread-183948] [transport.py] [_log()] client lang: <none>
2026-02-14T10:31:05.609 [DEBUG] [Thread-183948] [transport.py] [_log()] server lang: <none>
2026-02-14T10:31:05.609 [DEBUG] [Thread-183948] [transport.py] [_log()] kex follows: False
2026-02-14T10:31:05.609 [DEBUG] [Thread-183948] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:31:05.610 [DEBUG] [Thread-183948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:31:05.610 [DEBUG] [Thread-183948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:31:05.610 [DEBUG] [Thread-183948] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:31:05.610 [DEBUG] [Thread-183948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:31:05.610 [DEBUG] [Thread-183948] [transport.py] [_log()] Compression: none
2026-02-14T10:31:05.610 [DEBUG] [Thread-183948] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:31:05.629 [DEBUG] [Thread-183948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:31:05.629 [DEBUG] [Thread-183948] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:31:05.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:31:05.630 [DEBUG] [Thread-183948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:31:05.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:31:05.633 [DEBUG] [Thread-183948] [transport.py] [_log()] userauth is OK
2026-02-14T10:31:05.633 [DEBUG] [Thread-183948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:31:05.633 [DEBUG] [Thread-183948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:31:05.633 [DEBUG] [Thread-183948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:31:05.633 [DEBUG] [Thread-183948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:31:05.668 [INFO] [Thread-183948] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:31:05.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:31:06.298 [DEBUG] [Thread-183948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:31:06.298 [DEBUG] [Thread-183948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:31:06.298 [DEBUG] [Thread-183948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:31:06.338 [DEBUG] [Thread-183948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:31:06.338 [DEBUG] [Thread-183948] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:31:06.340 [DEBUG] [Thread-183948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:31:06.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:31:06.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:31:06.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:31:06.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:31:06.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:31:06.357 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:31:06.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:31:06.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:31:06.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:31:06.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.354279 -999.00  +12.00  20.37     60   +4.70 1 1 1 1 1   888    0 7.90 47.67 ----- 19.5 20.4 155.7 32.5 18.4 -25.3 17.2 -23.5 16.2 -23.9 17.2 -25.0
2026-02-14T10:31:06.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:31:06.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:31:06.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.354279
2026-02-14T10:31:06.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:31:06.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:31:06.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:31:06.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:31:06.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:31:06.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:30:52', tmtdew=8.25, humidity=57.21, cloud=0.0, wind=28.11, temperature=12.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:30:09.706', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:31:06.359 [DEBUG] [Thread-183948] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:31:06.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-14T10:31:06.444 [DEBUG] [Thread-183951] [transport.py] [_log()] starting thread (client mode): 0xa2d54f70
2026-02-14T10:31:06.444 [DEBUG] [Thread-183951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:31:06.465 [DEBUG] [Thread-183951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:31:06.465 [INFO] [Thread-183951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:31:06.477 [DEBUG] [Thread-183951] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:31:06.477 [DEBUG] [Thread-183951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:31:06.477 [DEBUG] [Thread-183951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:31:06.477 [DEBUG] [Thread-183951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:31:06.477 [DEBUG] [Thread-183951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:31:06.477 [DEBUG] [Thread-183951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:31:06.477 [DEBUG] [Thread-183951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:31:06.477 [DEBUG] [Thread-183951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:31:06.477 [DEBUG] [Thread-183951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:31:06.477 [DEBUG] [Thread-183951] [transport.py] [_log()] client lang: <none>
2026-02-14T10:31:06.478 [DEBUG] [Thread-183951] [transport.py] [_log()] server lang: <none>
2026-02-14T10:31:06.478 [DEBUG] [Thread-183951] [transport.py] [_log()] kex follows: False
2026-02-14T10:31:06.478 [DEBUG] [Thread-183951] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:31:06.478 [DEBUG] [Thread-183951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:31:06.478 [DEBUG] [Thread-183951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:31:06.478 [DEBUG] [Thread-183951] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:31:06.478 [DEBUG] [Thread-183951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:31:06.478 [DEBUG] [Thread-183951] [transport.py] [_log()] Compression: none
2026-02-14T10:31:06.478 [DEBUG] [Thread-183951] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:31:06.541 [DEBUG] [Thread-183951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:31:06.542 [DEBUG] [Thread-183951] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:31:06.542 [DEBUG] [Thread-183951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:31:06.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:31:06.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:31:06.600 [DEBUG] [Thread-183951] [transport.py] [_log()] userauth is OK
2026-02-14T10:31:06.600 [DEBUG] [Thread-183951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:31:06.600 [DEBUG] [Thread-183951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:31:06.600 [DEBUG] [Thread-183951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:31:06.600 [DEBUG] [Thread-183951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:31:06.614 [INFO] [Thread-183951] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:31:06.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-14T10:31:06.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:31:07.468 [DEBUG] [Thread-183951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:31:07.469 [DEBUG] [Thread-183951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:31:07.516 [DEBUG] [Thread-183951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:31:07.516 [DEBUG] [Thread-183951] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:31:07.529 [DEBUG] [Thread-183951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:31:07.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:31:07.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-14T10:31:07.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-14T10:31:07.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:31:07.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:31:07.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:31:07.568 [DEBUG] [Thread-183951] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:31:16.798 [DEBUG] [Thread-183953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:31:20.520 [DEBUG] [Thread-183954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:31:35.580 [DEBUG] [Thread-183955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:31:37.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:31:37.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:31:37.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:31:39.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 31, 28), 8.11, 57.72, 0.0, 29.22, 12.1, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:31:39.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:31:28
2026-02-14T10:31:40.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:31:40.339 [DEBUG] [Thread-183956] [transport.py] [_log()] starting thread (client mode): 0xa2d57e50
2026-02-14T10:31:40.340 [DEBUG] [Thread-183956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:31:40.360 [DEBUG] [Thread-183956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:31:40.360 [INFO] [Thread-183956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:31:40.361 [DEBUG] [Thread-183956] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:31:40.361 [DEBUG] [Thread-183956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:31:40.362 [DEBUG] [Thread-183956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:31:40.362 [DEBUG] [Thread-183956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:31:40.362 [DEBUG] [Thread-183956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:31:40.362 [DEBUG] [Thread-183956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:31:40.362 [DEBUG] [Thread-183956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:31:40.362 [DEBUG] [Thread-183956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:31:40.362 [DEBUG] [Thread-183956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:31:40.362 [DEBUG] [Thread-183956] [transport.py] [_log()] client lang: <none>
2026-02-14T10:31:40.362 [DEBUG] [Thread-183956] [transport.py] [_log()] server lang: <none>
2026-02-14T10:31:40.362 [DEBUG] [Thread-183956] [transport.py] [_log()] kex follows: False
2026-02-14T10:31:40.362 [DEBUG] [Thread-183956] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:31:40.362 [DEBUG] [Thread-183956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:31:40.362 [DEBUG] [Thread-183956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:31:40.362 [DEBUG] [Thread-183956] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:31:40.362 [DEBUG] [Thread-183956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:31:40.362 [DEBUG] [Thread-183956] [transport.py] [_log()] Compression: none
2026-02-14T10:31:40.362 [DEBUG] [Thread-183956] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:31:40.383 [DEBUG] [Thread-183956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:31:40.384 [DEBUG] [Thread-183956] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:31:40.385 [DEBUG] [Thread-183956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:31:40.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:31:40.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:31:40.388 [DEBUG] [Thread-183956] [transport.py] [_log()] userauth is OK
2026-02-14T10:31:40.388 [DEBUG] [Thread-183956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:31:40.388 [DEBUG] [Thread-183956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:31:40.388 [DEBUG] [Thread-183956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:31:40.388 [DEBUG] [Thread-183956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:31:40.409 [INFO] [Thread-183956] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:31:40.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:31:41.205 [DEBUG] [Thread-183956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:31:41.205 [DEBUG] [Thread-183956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:31:41.205 [DEBUG] [Thread-183956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:31:41.246 [DEBUG] [Thread-183956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:31:41.246 [DEBUG] [Thread-183956] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:31:41.248 [DEBUG] [Thread-183956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:31:41.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:31:41.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:31:41.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:31:41.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:31:41.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:31:41.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:31:41.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:31:41.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:31:41.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:31:41.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.354974 -999.00  +12.20  19.26     62   +5.30 1 2 1 1 1   888    0 8.25 52.04 ----- 19.8 19.3 186.0 28.4 18.7 -24.8 17.5 -22.3 16.4 -23.3 17.4 -24.6
2026-02-14T10:31:41.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:31:41.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:31:41.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.354974
2026-02-14T10:31:41.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:31:41.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:31:41.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:31:41.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:31:41.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:31:41.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:31:28', tmtdew=8.11, humidity=57.72, cloud=0.0, wind=29.22, temperature=12.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:31:09.754', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:31:41.268 [DEBUG] [Thread-183956] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:31:41.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-14T10:31:41.363 [DEBUG] [Thread-183959] [transport.py] [_log()] starting thread (client mode): 0xa2d56710
2026-02-14T10:31:41.363 [DEBUG] [Thread-183959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:31:41.377 [DEBUG] [Thread-183959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:31:41.378 [INFO] [Thread-183959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:31:41.385 [DEBUG] [Thread-183959] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:31:41.386 [DEBUG] [Thread-183959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:31:41.386 [DEBUG] [Thread-183959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:31:41.386 [DEBUG] [Thread-183959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:31:41.386 [DEBUG] [Thread-183959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:31:41.386 [DEBUG] [Thread-183959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:31:41.386 [DEBUG] [Thread-183959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:31:41.386 [DEBUG] [Thread-183959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:31:41.386 [DEBUG] [Thread-183959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:31:41.386 [DEBUG] [Thread-183959] [transport.py] [_log()] client lang: <none>
2026-02-14T10:31:41.386 [DEBUG] [Thread-183959] [transport.py] [_log()] server lang: <none>
2026-02-14T10:31:41.386 [DEBUG] [Thread-183959] [transport.py] [_log()] kex follows: False
2026-02-14T10:31:41.386 [DEBUG] [Thread-183959] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:31:41.386 [DEBUG] [Thread-183959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:31:41.386 [DEBUG] [Thread-183959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:31:41.386 [DEBUG] [Thread-183959] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:31:41.387 [DEBUG] [Thread-183959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:31:41.387 [DEBUG] [Thread-183959] [transport.py] [_log()] Compression: none
2026-02-14T10:31:41.387 [DEBUG] [Thread-183959] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:31:41.446 [DEBUG] [Thread-183959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:31:41.446 [DEBUG] [Thread-183959] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:31:41.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:31:41.447 [DEBUG] [Thread-183959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:31:41.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:31:41.504 [DEBUG] [Thread-183959] [transport.py] [_log()] userauth is OK
2026-02-14T10:31:41.504 [DEBUG] [Thread-183959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:31:41.504 [DEBUG] [Thread-183959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:31:41.504 [DEBUG] [Thread-183959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:31:41.505 [DEBUG] [Thread-183959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:31:41.531 [INFO] [Thread-183959] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:31:41.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-14T10:31:41.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:31:42.379 [DEBUG] [Thread-183959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:31:42.380 [DEBUG] [Thread-183959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:31:42.427 [DEBUG] [Thread-183959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:31:42.428 [DEBUG] [Thread-183959] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:31:42.437 [DEBUG] [Thread-183959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:31:42.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:31:42.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:31: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-14T10:31:42.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:31:42.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:31:42.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:31:42.474 [DEBUG] [Thread-183959] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:31:50.615 [DEBUG] [Thread-183961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:32:04.768 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:32:04.769 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:32:05.665 [DEBUG] [Thread-183962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:32:12.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:32:12.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:32:12.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-14T10:32:14.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 32, 4), 8.09, 57.87, 0.0, 30.56, 12.3, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:32:14.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:32:04
2026-02-14T10:32:15.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:32:15.223 [DEBUG] [Thread-183963] [transport.py] [_log()] starting thread (client mode): 0xa2d11960
2026-02-14T10:32:15.223 [DEBUG] [Thread-183963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:32:15.243 [DEBUG] [Thread-183963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:32:15.243 [INFO] [Thread-183963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:32:15.246 [DEBUG] [Thread-183963] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:32:15.246 [DEBUG] [Thread-183963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:32:15.246 [DEBUG] [Thread-183963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:32:15.246 [DEBUG] [Thread-183963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:32:15.246 [DEBUG] [Thread-183963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:32:15.246 [DEBUG] [Thread-183963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:32:15.246 [DEBUG] [Thread-183963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:32:15.246 [DEBUG] [Thread-183963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:32:15.246 [DEBUG] [Thread-183963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:32:15.246 [DEBUG] [Thread-183963] [transport.py] [_log()] client lang: <none>
2026-02-14T10:32:15.246 [DEBUG] [Thread-183963] [transport.py] [_log()] server lang: <none>
2026-02-14T10:32:15.246 [DEBUG] [Thread-183963] [transport.py] [_log()] kex follows: False
2026-02-14T10:32:15.246 [DEBUG] [Thread-183963] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:32:15.247 [DEBUG] [Thread-183963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:32:15.247 [DEBUG] [Thread-183963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:32:15.247 [DEBUG] [Thread-183963] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:32:15.247 [DEBUG] [Thread-183963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:32:15.247 [DEBUG] [Thread-183963] [transport.py] [_log()] Compression: none
2026-02-14T10:32:15.247 [DEBUG] [Thread-183963] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:32:15.263 [DEBUG] [Thread-183963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:32:15.264 [DEBUG] [Thread-183963] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:32:15.264 [DEBUG] [Thread-183963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:32:15.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:32:15.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:32:15.266 [DEBUG] [Thread-183963] [transport.py] [_log()] userauth is OK
2026-02-14T10:32:15.267 [DEBUG] [Thread-183963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:32:15.267 [DEBUG] [Thread-183963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:32:15.267 [DEBUG] [Thread-183963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:32:15.267 [DEBUG] [Thread-183963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:32:15.291 [INFO] [Thread-183963] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:32:15.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:32:15.918 [DEBUG] [Thread-183963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:32:15.919 [DEBUG] [Thread-183963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:32:15.919 [DEBUG] [Thread-183963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:32:15.959 [DEBUG] [Thread-183963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:32:15.959 [DEBUG] [Thread-183963] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:32:15.963 [DEBUG] [Thread-183963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:32:15.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:32:15.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:32:15.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:32:15.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:32:15.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:32:15.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:32:15.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:32:15.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:32:15.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:32:15.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.355321 -999.00  +12.50  18.18     62   +5.40 1 2 1 1 1   888    0 7.84 44.78 ----- 28.2 18.2 173.5 25.0 18.9 -24.3 17.5 -22.8 16.5 -22.4 17.6 -23.4
2026-02-14T10:32:15.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:32:15.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:32:15.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.355321
2026-02-14T10:32:15.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:32:15.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:32:15.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:32:15.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:32:15.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:32:15.991 [DEBUG] [Thread-183963] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:32:15.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:32:04', tmtdew=8.09, humidity=57.87, cloud=0.0, wind=30.56, temperature=12.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:31:39.734', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:32:16.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-14T10:32:16.087 [DEBUG] [Thread-183966] [transport.py] [_log()] starting thread (client mode): 0xa2ddfe80
2026-02-14T10:32:16.087 [DEBUG] [Thread-183966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:32:16.102 [DEBUG] [Thread-183966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:32:16.102 [INFO] [Thread-183966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:32:16.110 [DEBUG] [Thread-183966] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:32:16.110 [DEBUG] [Thread-183966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:32:16.110 [DEBUG] [Thread-183966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:32:16.110 [DEBUG] [Thread-183966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:32:16.110 [DEBUG] [Thread-183966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:32:16.110 [DEBUG] [Thread-183966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:32:16.110 [DEBUG] [Thread-183966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:32:16.110 [DEBUG] [Thread-183966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:32:16.110 [DEBUG] [Thread-183966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:32:16.110 [DEBUG] [Thread-183966] [transport.py] [_log()] client lang: <none>
2026-02-14T10:32:16.110 [DEBUG] [Thread-183966] [transport.py] [_log()] server lang: <none>
2026-02-14T10:32:16.110 [DEBUG] [Thread-183966] [transport.py] [_log()] kex follows: False
2026-02-14T10:32:16.110 [DEBUG] [Thread-183966] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:32:16.110 [DEBUG] [Thread-183966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:32:16.110 [DEBUG] [Thread-183966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:32:16.111 [DEBUG] [Thread-183966] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:32:16.111 [DEBUG] [Thread-183966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:32:16.111 [DEBUG] [Thread-183966] [transport.py] [_log()] Compression: none
2026-02-14T10:32:16.111 [DEBUG] [Thread-183966] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:32:16.176 [DEBUG] [Thread-183966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:32:16.177 [DEBUG] [Thread-183966] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:32:16.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:32:16.178 [DEBUG] [Thread-183966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:32:16.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:32:16.233 [DEBUG] [Thread-183966] [transport.py] [_log()] userauth is OK
2026-02-14T10:32:16.234 [DEBUG] [Thread-183966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:32:16.234 [DEBUG] [Thread-183966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:32:16.234 [DEBUG] [Thread-183966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:32:16.234 [DEBUG] [Thread-183966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:32:16.253 [INFO] [Thread-183966] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:32:16.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-14T10:32:16.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:32:16.848 [DEBUG] [Thread-183968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:32:17.102 [DEBUG] [Thread-183966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:32:17.102 [DEBUG] [Thread-183966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:32:17.150 [DEBUG] [Thread-183966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:32:17.151 [DEBUG] [Thread-183966] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:32:17.163 [DEBUG] [Thread-183966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:32:17.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:32:17.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:32:17.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:32:17.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:32:17.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:32:17.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:32:17.206 [DEBUG] [Thread-183966] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:32:20.701 [DEBUG] [Thread-183969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:32:35.754 [DEBUG] [Thread-183970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:32:47.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:32:47.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:32:47.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-14T10:32:49.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 32, 40), 8.95, 54.48, 0.0, 32.0, 12.97, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:32:49.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:32:40
2026-02-14T10:32:49.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:32:49.910 [DEBUG] [Thread-183971] [transport.py] [_log()] starting thread (client mode): 0xa5742950
2026-02-14T10:32:49.910 [DEBUG] [Thread-183971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:32:49.930 [DEBUG] [Thread-183971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:32:49.930 [INFO] [Thread-183971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:32:49.931 [DEBUG] [Thread-183971] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:32:49.931 [DEBUG] [Thread-183971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:32:49.931 [DEBUG] [Thread-183971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:32:49.931 [DEBUG] [Thread-183971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:32:49.931 [DEBUG] [Thread-183971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:32:49.932 [DEBUG] [Thread-183971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:32:49.932 [DEBUG] [Thread-183971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:32:49.932 [DEBUG] [Thread-183971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:32:49.932 [DEBUG] [Thread-183971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:32:49.932 [DEBUG] [Thread-183971] [transport.py] [_log()] client lang: <none>
2026-02-14T10:32:49.932 [DEBUG] [Thread-183971] [transport.py] [_log()] server lang: <none>
2026-02-14T10:32:49.932 [DEBUG] [Thread-183971] [transport.py] [_log()] kex follows: False
2026-02-14T10:32:49.932 [DEBUG] [Thread-183971] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:32:49.932 [DEBUG] [Thread-183971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:32:49.932 [DEBUG] [Thread-183971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:32:49.932 [DEBUG] [Thread-183971] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:32:49.932 [DEBUG] [Thread-183971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:32:49.932 [DEBUG] [Thread-183971] [transport.py] [_log()] Compression: none
2026-02-14T10:32:49.932 [DEBUG] [Thread-183971] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:32:49.941 [DEBUG] [Thread-183971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:32:49.941 [DEBUG] [Thread-183971] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:32:49.941 [DEBUG] [Thread-183971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:32:49.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:32:49.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:32:49.943 [DEBUG] [Thread-183971] [transport.py] [_log()] userauth is OK
2026-02-14T10:32:49.943 [DEBUG] [Thread-183971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:32:49.944 [DEBUG] [Thread-183971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:32:49.944 [DEBUG] [Thread-183971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:32:49.944 [DEBUG] [Thread-183971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:32:49.968 [INFO] [Thread-183971] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:32:49.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:32:50.584 [DEBUG] [Thread-183971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:32:50.584 [DEBUG] [Thread-183971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:32:50.584 [DEBUG] [Thread-183971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:32:50.625 [DEBUG] [Thread-183971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:32:50.625 [DEBUG] [Thread-183971] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:32:50.628 [DEBUG] [Thread-183971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:32:50.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:32:50.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:32:50.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:32:50.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:32:50.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:32:50.650 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:32:50.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:32:50.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:32:50.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:32:50.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.355668 -999.00  +12.20  22.50     60   +4.80 1 1 1 1 1   888    0 8.10 52.22 ----- 31.2 22.5 190.6 41.5 18.7 -26.1 17.6 -25.8 16.2 -26.8 17.4 -27.0
2026-02-14T10:32:50.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:32:50.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:32:50.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.355668
2026-02-14T10:32:50.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:32:50.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:32:50.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:32:50.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:32:50.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:32:50.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:32:40', tmtdew=8.95, humidity=54.48, cloud=0.0, wind=32.0, temperature=12.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:32:09.715', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:32:50.653 [DEBUG] [Thread-183971] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:32:50.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-14T10:32:50.755 [DEBUG] [Thread-183974] [transport.py] [_log()] starting thread (client mode): 0xa2d54bb0
2026-02-14T10:32:50.756 [DEBUG] [Thread-183974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:32:50.774 [DEBUG] [Thread-183974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:32:50.774 [INFO] [Thread-183974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:32:50.784 [DEBUG] [Thread-183974] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:32:50.784 [DEBUG] [Thread-183974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:32:50.784 [DEBUG] [Thread-183974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:32:50.784 [DEBUG] [Thread-183974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:32:50.785 [DEBUG] [Thread-183974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:32:50.785 [DEBUG] [Thread-183974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:32:50.785 [DEBUG] [Thread-183974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:32:50.785 [DEBUG] [Thread-183974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:32:50.785 [DEBUG] [Thread-183974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:32:50.785 [DEBUG] [Thread-183974] [transport.py] [_log()] client lang: <none>
2026-02-14T10:32:50.785 [DEBUG] [Thread-183974] [transport.py] [_log()] server lang: <none>
2026-02-14T10:32:50.785 [DEBUG] [Thread-183974] [transport.py] [_log()] kex follows: False
2026-02-14T10:32:50.785 [DEBUG] [Thread-183974] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:32:50.786 [DEBUG] [Thread-183974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:32:50.786 [DEBUG] [Thread-183974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:32:50.786 [DEBUG] [Thread-183974] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:32:50.786 [DEBUG] [Thread-183974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:32:50.786 [DEBUG] [Thread-183974] [transport.py] [_log()] Compression: none
2026-02-14T10:32:50.786 [DEBUG] [Thread-183974] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:32:50.792 [DEBUG] [Thread-183976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:32:50.840 [DEBUG] [Thread-183974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:32:50.840 [DEBUG] [Thread-183974] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:32:50.841 [DEBUG] [Thread-183974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:32:50.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:32:50.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:32:50.895 [DEBUG] [Thread-183974] [transport.py] [_log()] userauth is OK
2026-02-14T10:32:50.896 [DEBUG] [Thread-183974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:32:50.896 [DEBUG] [Thread-183974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:32:50.896 [DEBUG] [Thread-183974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:32:50.896 [DEBUG] [Thread-183974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:32:50.915 [INFO] [Thread-183974] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:32: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-14T10:32:50.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:32:51.749 [DEBUG] [Thread-183974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:32:51.749 [DEBUG] [Thread-183974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:32:51.797 [DEBUG] [Thread-183974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:32:51.798 [DEBUG] [Thread-183974] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:32:51.807 [DEBUG] [Thread-183974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:32:51.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:32:51.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-14T10:32:51.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-14T10:32:51.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:32:51.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:32:51.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:32:51.845 [DEBUG] [Thread-183974] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:33:04.911 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:33:04.912 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:33:05.843 [DEBUG] [Thread-183977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:33:16.882 [DEBUG] [Thread-183978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:33:20.880 [DEBUG] [Thread-183979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:33:21.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:33:21.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:33:21.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-14T10:33:23.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 33, 15), 8.46, 56.37, 0.0, 31.37, 11.99, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:33:23.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:33:15
2026-02-14T10:33:24.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:33:24.301 [DEBUG] [Thread-183980] [transport.py] [_log()] starting thread (client mode): 0xa5742c80
2026-02-14T10:33:24.301 [DEBUG] [Thread-183980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:33:24.321 [DEBUG] [Thread-183980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:33:24.321 [INFO] [Thread-183980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:33:24.325 [DEBUG] [Thread-183980] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:33:24.325 [DEBUG] [Thread-183980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:33:24.325 [DEBUG] [Thread-183980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:33:24.325 [DEBUG] [Thread-183980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:33:24.326 [DEBUG] [Thread-183980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:33:24.326 [DEBUG] [Thread-183980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:33:24.326 [DEBUG] [Thread-183980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:33:24.326 [DEBUG] [Thread-183980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:33:24.326 [DEBUG] [Thread-183980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:33:24.326 [DEBUG] [Thread-183980] [transport.py] [_log()] client lang: <none>
2026-02-14T10:33:24.326 [DEBUG] [Thread-183980] [transport.py] [_log()] server lang: <none>
2026-02-14T10:33:24.326 [DEBUG] [Thread-183980] [transport.py] [_log()] kex follows: False
2026-02-14T10:33:24.326 [DEBUG] [Thread-183980] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:33:24.326 [DEBUG] [Thread-183980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:33:24.326 [DEBUG] [Thread-183980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:33:24.326 [DEBUG] [Thread-183980] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:33:24.326 [DEBUG] [Thread-183980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:33:24.326 [DEBUG] [Thread-183980] [transport.py] [_log()] Compression: none
2026-02-14T10:33:24.327 [DEBUG] [Thread-183980] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:33:24.344 [DEBUG] [Thread-183980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:33:24.345 [DEBUG] [Thread-183980] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:33:24.346 [DEBUG] [Thread-183980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:33:24.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:33:24.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:33:24.348 [DEBUG] [Thread-183980] [transport.py] [_log()] userauth is OK
2026-02-14T10:33:24.348 [DEBUG] [Thread-183980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:33:24.348 [DEBUG] [Thread-183980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:33:24.348 [DEBUG] [Thread-183980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:33:24.348 [DEBUG] [Thread-183980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:33:24.372 [INFO] [Thread-183980] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:33:24.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:33:25.020 [DEBUG] [Thread-183980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:33:25.021 [DEBUG] [Thread-183980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:33:25.021 [DEBUG] [Thread-183980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:33:25.062 [DEBUG] [Thread-183980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:33:25.062 [DEBUG] [Thread-183980] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:33:25.065 [DEBUG] [Thread-183980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:33:25.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:33:25.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:33:25.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:33:25.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:33:25.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:33:25.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:33:25.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:33:25.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:33:25.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:33:25.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.356016 -999.00  +11.70  21.32     61   +4.60 1 1 1 1 1   888    0 8.31 54.99 ----- 22.3 21.3 169.2 37.1 18.4 -25.8 16.7 -31.3 16.2 -23.8 17.2 -25.6
2026-02-14T10:33:25.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:33:25.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:33:25.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.356016
2026-02-14T10:33:25.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:33:25.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:33:25.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:33:25.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:33:25.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:33:25.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:33:15', tmtdew=8.46, humidity=56.37, cloud=0.0, wind=31.37, temperature=11.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:32:39.782', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:33:25.092 [DEBUG] [Thread-183980] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:33:25.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-14T10:33:25.188 [DEBUG] [Thread-183983] [transport.py] [_log()] starting thread (client mode): 0xa2d554b0
2026-02-14T10:33:25.188 [DEBUG] [Thread-183983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:33:25.203 [DEBUG] [Thread-183983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:33:25.203 [INFO] [Thread-183983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:33:25.211 [DEBUG] [Thread-183983] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:33:25.211 [DEBUG] [Thread-183983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:33:25.212 [DEBUG] [Thread-183983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:33:25.212 [DEBUG] [Thread-183983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:33:25.212 [DEBUG] [Thread-183983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:33:25.212 [DEBUG] [Thread-183983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:33:25.212 [DEBUG] [Thread-183983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:33:25.212 [DEBUG] [Thread-183983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:33:25.212 [DEBUG] [Thread-183983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:33:25.212 [DEBUG] [Thread-183983] [transport.py] [_log()] client lang: <none>
2026-02-14T10:33:25.213 [DEBUG] [Thread-183983] [transport.py] [_log()] server lang: <none>
2026-02-14T10:33:25.213 [DEBUG] [Thread-183983] [transport.py] [_log()] kex follows: False
2026-02-14T10:33:25.213 [DEBUG] [Thread-183983] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:33:25.213 [DEBUG] [Thread-183983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:33:25.213 [DEBUG] [Thread-183983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:33:25.213 [DEBUG] [Thread-183983] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:33:25.213 [DEBUG] [Thread-183983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:33:25.214 [DEBUG] [Thread-183983] [transport.py] [_log()] Compression: none
2026-02-14T10:33:25.214 [DEBUG] [Thread-183983] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:33:25.272 [DEBUG] [Thread-183983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:33:25.273 [DEBUG] [Thread-183983] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:33:25.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:33:25.274 [DEBUG] [Thread-183983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:33:25.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:33:25.331 [DEBUG] [Thread-183983] [transport.py] [_log()] userauth is OK
2026-02-14T10:33:25.331 [DEBUG] [Thread-183983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:33:25.331 [DEBUG] [Thread-183983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:33:25.332 [DEBUG] [Thread-183983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:33:25.332 [DEBUG] [Thread-183983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:33:25.350 [INFO] [Thread-183983] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:33:25.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-14T10:33:25.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:33:26.221 [DEBUG] [Thread-183983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:33:26.221 [DEBUG] [Thread-183983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:33:26.269 [DEBUG] [Thread-183983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:33:26.270 [DEBUG] [Thread-183983] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:33:26.279 [DEBUG] [Thread-183983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:33:26.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:33:26.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-14T10:33:26.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-14T10:33:26.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:33:26.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:33:26.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:33:26.318 [DEBUG] [Thread-183983] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:33:35.917 [DEBUG] [Thread-183985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:33:50.969 [DEBUG] [Thread-183986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:33:56.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:33:56.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:33:56.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:33:58.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 33, 15), 8.46, 56.37, 0.0, 31.37, 11.99, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:33:58.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:33:15
2026-02-14T10:33:58.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:33:58.934 [DEBUG] [Thread-183987] [transport.py] [_log()] starting thread (client mode): 0xa2d560e0
2026-02-14T10:33:58.935 [DEBUG] [Thread-183987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:33:58.956 [DEBUG] [Thread-183987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:33:58.956 [INFO] [Thread-183987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:33:58.959 [DEBUG] [Thread-183987] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:33:58.960 [DEBUG] [Thread-183987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:33:58.960 [DEBUG] [Thread-183987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:33:58.960 [DEBUG] [Thread-183987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:33:58.960 [DEBUG] [Thread-183987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:33:58.960 [DEBUG] [Thread-183987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:33:58.960 [DEBUG] [Thread-183987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:33:58.960 [DEBUG] [Thread-183987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:33:58.960 [DEBUG] [Thread-183987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:33:58.960 [DEBUG] [Thread-183987] [transport.py] [_log()] client lang: <none>
2026-02-14T10:33:58.960 [DEBUG] [Thread-183987] [transport.py] [_log()] server lang: <none>
2026-02-14T10:33:58.960 [DEBUG] [Thread-183987] [transport.py] [_log()] kex follows: False
2026-02-14T10:33:58.960 [DEBUG] [Thread-183987] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:33:58.960 [DEBUG] [Thread-183987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:33:58.960 [DEBUG] [Thread-183987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:33:58.960 [DEBUG] [Thread-183987] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:33:58.960 [DEBUG] [Thread-183987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:33:58.960 [DEBUG] [Thread-183987] [transport.py] [_log()] Compression: none
2026-02-14T10:33:58.960 [DEBUG] [Thread-183987] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:33:58.977 [DEBUG] [Thread-183987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:33:58.978 [DEBUG] [Thread-183987] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:33:58.978 [DEBUG] [Thread-183987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:33:58.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:33:58.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:33:58.980 [DEBUG] [Thread-183987] [transport.py] [_log()] userauth is OK
2026-02-14T10:33:58.981 [DEBUG] [Thread-183987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:33:58.981 [DEBUG] [Thread-183987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:33:58.981 [DEBUG] [Thread-183987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:33:58.981 [DEBUG] [Thread-183987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:33:59.002 [INFO] [Thread-183987] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:33:59.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:33:59.623 [DEBUG] [Thread-183987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:33:59.623 [DEBUG] [Thread-183987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:33:59.624 [DEBUG] [Thread-183987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:33:59.665 [DEBUG] [Thread-183987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:33:59.665 [DEBUG] [Thread-183987] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:33:59.669 [DEBUG] [Thread-183987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:33:59.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:33:59.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:33:59.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:33:59.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:33:59.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:33:59.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:33:59.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:33:59.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:33:59.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:33:59.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.356363 -999.00  +11.80  26.27     62   +4.90 1 2 1 1 1   888    0 8.03 47.41 ----- 20.2 26.3 166.2 34.2 18.6 -25.1 17.3 -23.1 16.4 -22.8 17.4 -24.3
2026-02-14T10:33:59.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:33:59.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:33:59.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.356363
2026-02-14T10:33:59.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:33:59.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:33:59.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:33:59.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:33:59.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:33:59.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:33:15', tmtdew=8.46, humidity=56.37, cloud=0.0, wind=31.37, temperature=11.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:33:09.763', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:33:59.689 [DEBUG] [Thread-183987] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:33:59.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-14T10:33:59.785 [DEBUG] [Thread-183990] [transport.py] [_log()] starting thread (client mode): 0xa5740160
2026-02-14T10:33:59.785 [DEBUG] [Thread-183990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:33:59.800 [DEBUG] [Thread-183990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:33:59.800 [INFO] [Thread-183990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:33:59.808 [DEBUG] [Thread-183990] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:33:59.808 [DEBUG] [Thread-183990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:33:59.808 [DEBUG] [Thread-183990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:33:59.808 [DEBUG] [Thread-183990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:33:59.809 [DEBUG] [Thread-183990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:33:59.809 [DEBUG] [Thread-183990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:33:59.809 [DEBUG] [Thread-183990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:33:59.809 [DEBUG] [Thread-183990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:33:59.809 [DEBUG] [Thread-183990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:33:59.809 [DEBUG] [Thread-183990] [transport.py] [_log()] client lang: <none>
2026-02-14T10:33:59.809 [DEBUG] [Thread-183990] [transport.py] [_log()] server lang: <none>
2026-02-14T10:33:59.809 [DEBUG] [Thread-183990] [transport.py] [_log()] kex follows: False
2026-02-14T10:33:59.809 [DEBUG] [Thread-183990] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:33:59.809 [DEBUG] [Thread-183990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:33:59.809 [DEBUG] [Thread-183990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:33:59.809 [DEBUG] [Thread-183990] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:33:59.809 [DEBUG] [Thread-183990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:33:59.809 [DEBUG] [Thread-183990] [transport.py] [_log()] Compression: none
2026-02-14T10:33:59.809 [DEBUG] [Thread-183990] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:33:59.866 [DEBUG] [Thread-183990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:33:59.866 [DEBUG] [Thread-183990] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:33:59.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:33:59.868 [DEBUG] [Thread-183990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:33:59.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:33:59.922 [DEBUG] [Thread-183990] [transport.py] [_log()] userauth is OK
2026-02-14T10:33:59.922 [DEBUG] [Thread-183990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:33:59.922 [DEBUG] [Thread-183990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:33:59.922 [DEBUG] [Thread-183990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:33:59.923 [DEBUG] [Thread-183990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:33:59.942 [INFO] [Thread-183990] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:33:59.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-14T10:33:59.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:34:00.752 [DEBUG] [Thread-183990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:34:00.752 [DEBUG] [Thread-183990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:34:00.801 [DEBUG] [Thread-183990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:34:00.801 [DEBUG] [Thread-183990] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:34:00.811 [DEBUG] [Thread-183990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:34:00.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:34:00.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:34:00.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-14T10:34:00.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:34:00.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:34:00.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:34:00.848 [DEBUG] [Thread-183990] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:34:05.050 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:34:05.052 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:34:06.008 [DEBUG] [Thread-183992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:34:16.927 [DEBUG] [Thread-183993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:34:21.059 [DEBUG] [Thread-183994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:34:30.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:34:30.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:34:30.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:34:32.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 33, 51), 8.06, 57.87, 0.0, 35.31, 12.0, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:34:32.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:33:51
2026-02-14T10:34:33.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:34:33.337 [DEBUG] [Thread-183995] [transport.py] [_log()] starting thread (client mode): 0xa2ddebc0
2026-02-14T10:34:33.337 [DEBUG] [Thread-183995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:34:33.356 [DEBUG] [Thread-183995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:34:33.356 [INFO] [Thread-183995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:34:33.360 [DEBUG] [Thread-183995] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:34:33.360 [DEBUG] [Thread-183995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:34:33.360 [DEBUG] [Thread-183995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:34:33.360 [DEBUG] [Thread-183995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:34:33.360 [DEBUG] [Thread-183995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:34:33.360 [DEBUG] [Thread-183995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:34:33.360 [DEBUG] [Thread-183995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:34:33.361 [DEBUG] [Thread-183995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:34:33.361 [DEBUG] [Thread-183995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:34:33.361 [DEBUG] [Thread-183995] [transport.py] [_log()] client lang: <none>
2026-02-14T10:34:33.361 [DEBUG] [Thread-183995] [transport.py] [_log()] server lang: <none>
2026-02-14T10:34:33.361 [DEBUG] [Thread-183995] [transport.py] [_log()] kex follows: False
2026-02-14T10:34:33.361 [DEBUG] [Thread-183995] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:34:33.361 [DEBUG] [Thread-183995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:34:33.361 [DEBUG] [Thread-183995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:34:33.361 [DEBUG] [Thread-183995] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:34:33.361 [DEBUG] [Thread-183995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:34:33.361 [DEBUG] [Thread-183995] [transport.py] [_log()] Compression: none
2026-02-14T10:34:33.361 [DEBUG] [Thread-183995] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:34:33.386 [DEBUG] [Thread-183995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:34:33.386 [DEBUG] [Thread-183995] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:34:33.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:34:33.387 [DEBUG] [Thread-183995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:34:33.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:34:33.389 [DEBUG] [Thread-183995] [transport.py] [_log()] userauth is OK
2026-02-14T10:34:33.389 [DEBUG] [Thread-183995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:34:33.389 [DEBUG] [Thread-183995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:34:33.389 [DEBUG] [Thread-183995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:34:33.389 [DEBUG] [Thread-183995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:34:33.406 [INFO] [Thread-183995] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:34:33.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:34:34.213 [DEBUG] [Thread-183995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:34:34.213 [DEBUG] [Thread-183995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:34:34.223 [DEBUG] [Thread-183995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:34:34.254 [DEBUG] [Thread-183995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:34:34.254 [DEBUG] [Thread-183995] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:34:34.257 [DEBUG] [Thread-183995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:34:34.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:34:34.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:34:34.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:34:34.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:34:34.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:34:34.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:34:34.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:34:34.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:34:34.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:34:34.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.356710 -999.00  +11.70  24.42     63   +5.00 1 1 1 1 1   888    0 7.95 44.72 ----- 26.4 24.4 181.0 34.6 18.6 -26.6 17.3 -23.5 16.2 -24.4 17.3 -27.1
2026-02-14T10:34:34.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:34:34.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:34:34.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.356710
2026-02-14T10:34:34.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:34:34.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:34:34.285 [DEBUG] [Thread-183995] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:34:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:34:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:34:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:34:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:33:51', tmtdew=8.06, humidity=57.87, cloud=0.0, wind=35.31, temperature=12.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:33:39.744', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:34:34.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-14T10:34:34.389 [DEBUG] [Thread-183998] [transport.py] [_log()] starting thread (client mode): 0xa5740bb0
2026-02-14T10:34:34.389 [DEBUG] [Thread-183998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:34:34.403 [DEBUG] [Thread-183998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:34:34.404 [INFO] [Thread-183998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:34:34.411 [DEBUG] [Thread-183998] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:34:34.411 [DEBUG] [Thread-183998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:34:34.411 [DEBUG] [Thread-183998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:34:34.412 [DEBUG] [Thread-183998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:34:34.412 [DEBUG] [Thread-183998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:34:34.412 [DEBUG] [Thread-183998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:34:34.412 [DEBUG] [Thread-183998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:34:34.412 [DEBUG] [Thread-183998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:34:34.412 [DEBUG] [Thread-183998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:34:34.412 [DEBUG] [Thread-183998] [transport.py] [_log()] client lang: <none>
2026-02-14T10:34:34.412 [DEBUG] [Thread-183998] [transport.py] [_log()] server lang: <none>
2026-02-14T10:34:34.412 [DEBUG] [Thread-183998] [transport.py] [_log()] kex follows: False
2026-02-14T10:34:34.413 [DEBUG] [Thread-183998] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:34:34.413 [DEBUG] [Thread-183998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:34:34.413 [DEBUG] [Thread-183998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:34:34.413 [DEBUG] [Thread-183998] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:34:34.413 [DEBUG] [Thread-183998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:34:34.413 [DEBUG] [Thread-183998] [transport.py] [_log()] Compression: none
2026-02-14T10:34:34.413 [DEBUG] [Thread-183998] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:34:34.468 [DEBUG] [Thread-183998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:34:34.468 [DEBUG] [Thread-183998] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:34:34.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:34:34.469 [DEBUG] [Thread-183998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:34:34.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:34:34.524 [DEBUG] [Thread-183998] [transport.py] [_log()] userauth is OK
2026-02-14T10:34:34.524 [DEBUG] [Thread-183998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:34:34.524 [DEBUG] [Thread-183998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:34:34.524 [DEBUG] [Thread-183998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:34:34.524 [DEBUG] [Thread-183998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:34:34.543 [INFO] [Thread-183998] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:34:34.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T10:34:34.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:34:35.350 [DEBUG] [Thread-183998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:34:35.350 [DEBUG] [Thread-183998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:34:35.398 [DEBUG] [Thread-183998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:34:35.398 [DEBUG] [Thread-183998] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:34:35.407 [DEBUG] [Thread-183998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:34:35.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:34:35.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:34:35.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-14T10:34:35.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:34:35.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:34:35.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:34:35.442 [DEBUG] [Thread-183998] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:34:36.093 [DEBUG] [Thread-184000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:34:51.142 [DEBUG] [Thread-184001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:35:05.191 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:35:05.192 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:35:05.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:35:05.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:35:05.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-14T10:35:06.174 [DEBUG] [Thread-184002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:35:07.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 34, 27), 8.12, 57.64, 0.0, 34.48, 11.95, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:35:07.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:34:27
2026-02-14T10:35:07.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:35:08.156 [DEBUG] [Thread-184003] [transport.py] [_log()] starting thread (client mode): 0xa2dde3e0
2026-02-14T10:35:08.156 [DEBUG] [Thread-184003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:35:08.177 [DEBUG] [Thread-184003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:35:08.177 [INFO] [Thread-184003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:35:08.178 [DEBUG] [Thread-184003] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:35:08.178 [DEBUG] [Thread-184003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:35:08.178 [DEBUG] [Thread-184003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:35:08.178 [DEBUG] [Thread-184003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:35:08.178 [DEBUG] [Thread-184003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:35:08.178 [DEBUG] [Thread-184003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:35:08.178 [DEBUG] [Thread-184003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:35:08.178 [DEBUG] [Thread-184003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:35:08.178 [DEBUG] [Thread-184003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:35:08.178 [DEBUG] [Thread-184003] [transport.py] [_log()] client lang: <none>
2026-02-14T10:35:08.178 [DEBUG] [Thread-184003] [transport.py] [_log()] server lang: <none>
2026-02-14T10:35:08.178 [DEBUG] [Thread-184003] [transport.py] [_log()] kex follows: False
2026-02-14T10:35:08.178 [DEBUG] [Thread-184003] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:35:08.178 [DEBUG] [Thread-184003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:35:08.178 [DEBUG] [Thread-184003] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:35:08.178 [DEBUG] [Thread-184003] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:35:08.178 [DEBUG] [Thread-184003] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:35:08.178 [DEBUG] [Thread-184003] [transport.py] [_log()] Compression: none
2026-02-14T10:35:08.178 [DEBUG] [Thread-184003] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:35:08.186 [DEBUG] [Thread-184003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:35:08.187 [DEBUG] [Thread-184003] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:35:08.187 [DEBUG] [Thread-184003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:35:08.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:35:08.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:35:08.189 [DEBUG] [Thread-184003] [transport.py] [_log()] userauth is OK
2026-02-14T10:35:08.189 [DEBUG] [Thread-184003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:35:08.189 [DEBUG] [Thread-184003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:35:08.189 [DEBUG] [Thread-184003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:35:08.189 [DEBUG] [Thread-184003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:35:08.206 [INFO] [Thread-184003] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:35:08.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:35:09.139 [DEBUG] [Thread-184003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:35:09.139 [DEBUG] [Thread-184003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:35:09.139 [DEBUG] [Thread-184003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:35:09.180 [DEBUG] [Thread-184003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:35:09.180 [DEBUG] [Thread-184003] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:35:09.183 [DEBUG] [Thread-184003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:35:09.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:35:09.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:35:09.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:35:09.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:35:09.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:35:09.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:35:09.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:35:09.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:35:09.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:35:09.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.357057 -999.00  +11.50  22.41     64   +5.20 1 1 1 1 1   888    0 8.01 43.46 ----- 18.0 22.4 164.4 34.4 18.5 -25.7 17.2 -23.7 16.2 -23.0 17.2 -25.3
2026-02-14T10:35:09.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:35:09.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:35:09.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.357057
2026-02-14T10:35:09.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:35:09.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:35:09.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:35:09.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:35:09.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:35:09.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:34:27', tmtdew=8.12, humidity=57.64, cloud=0.0, wind=34.48, temperature=11.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:34:09.725', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:35:09.214 [DEBUG] [Thread-184003] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:35:09.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T10:35:09.312 [DEBUG] [Thread-184006] [transport.py] [_log()] starting thread (client mode): 0xa2d1add0
2026-02-14T10:35:09.312 [DEBUG] [Thread-184006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:35:09.328 [DEBUG] [Thread-184006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:35:09.329 [INFO] [Thread-184006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:35:09.339 [DEBUG] [Thread-184006] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:35:09.339 [DEBUG] [Thread-184006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:35:09.339 [DEBUG] [Thread-184006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:35:09.339 [DEBUG] [Thread-184006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:35:09.339 [DEBUG] [Thread-184006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:35:09.339 [DEBUG] [Thread-184006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:35:09.340 [DEBUG] [Thread-184006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:35:09.340 [DEBUG] [Thread-184006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:35:09.340 [DEBUG] [Thread-184006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:35:09.340 [DEBUG] [Thread-184006] [transport.py] [_log()] client lang: <none>
2026-02-14T10:35:09.340 [DEBUG] [Thread-184006] [transport.py] [_log()] server lang: <none>
2026-02-14T10:35:09.340 [DEBUG] [Thread-184006] [transport.py] [_log()] kex follows: False
2026-02-14T10:35:09.340 [DEBUG] [Thread-184006] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:35:09.340 [DEBUG] [Thread-184006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:35:09.341 [DEBUG] [Thread-184006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:35:09.341 [DEBUG] [Thread-184006] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:35:09.341 [DEBUG] [Thread-184006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:35:09.341 [DEBUG] [Thread-184006] [transport.py] [_log()] Compression: none
2026-02-14T10:35:09.341 [DEBUG] [Thread-184006] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:35:09.398 [DEBUG] [Thread-184006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:35:09.399 [DEBUG] [Thread-184006] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:35:09.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:35:09.400 [DEBUG] [Thread-184006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:35:09.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:35:09.465 [DEBUG] [Thread-184006] [transport.py] [_log()] userauth is OK
2026-02-14T10:35:09.466 [DEBUG] [Thread-184006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:35:09.466 [DEBUG] [Thread-184006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:35:09.466 [DEBUG] [Thread-184006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:35:09.466 [DEBUG] [Thread-184006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:35:09.485 [INFO] [Thread-184006] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:35:09.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-14T10:35:09.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:35:10.308 [DEBUG] [Thread-184006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:35:10.308 [DEBUG] [Thread-184006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:35:10.356 [DEBUG] [Thread-184006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:35:10.357 [DEBUG] [Thread-184006] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:35:10.366 [DEBUG] [Thread-184006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:35:10.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:35:10.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:35:10.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-14T10:35:10.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:35:10.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:35:10.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:35:10.405 [DEBUG] [Thread-184006] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:35:16.974 [DEBUG] [Thread-184008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:35:21.210 [DEBUG] [Thread-184009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:35:36.260 [DEBUG] [Thread-184010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:35:40.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:35:40.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:35:40.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-14T10:35:42.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 35, 2), 8.12, 57.62, 0.0, 31.23, 11.84, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:35:42.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:35:02
2026-02-14T10:35:42.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:35:42.922 [DEBUG] [Thread-184011] [transport.py] [_log()] starting thread (client mode): 0xa5740190
2026-02-14T10:35:42.923 [DEBUG] [Thread-184011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:35:42.942 [DEBUG] [Thread-184011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:35:42.942 [INFO] [Thread-184011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:35:42.943 [DEBUG] [Thread-184011] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:35:42.943 [DEBUG] [Thread-184011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:35:42.943 [DEBUG] [Thread-184011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:35:42.943 [DEBUG] [Thread-184011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:35:42.943 [DEBUG] [Thread-184011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:35:42.944 [DEBUG] [Thread-184011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:35:42.944 [DEBUG] [Thread-184011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:35:42.944 [DEBUG] [Thread-184011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:35:42.944 [DEBUG] [Thread-184011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:35:42.944 [DEBUG] [Thread-184011] [transport.py] [_log()] client lang: <none>
2026-02-14T10:35:42.944 [DEBUG] [Thread-184011] [transport.py] [_log()] server lang: <none>
2026-02-14T10:35:42.944 [DEBUG] [Thread-184011] [transport.py] [_log()] kex follows: False
2026-02-14T10:35:42.944 [DEBUG] [Thread-184011] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:35:42.944 [DEBUG] [Thread-184011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:35:42.944 [DEBUG] [Thread-184011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:35:42.944 [DEBUG] [Thread-184011] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:35:42.944 [DEBUG] [Thread-184011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:35:42.944 [DEBUG] [Thread-184011] [transport.py] [_log()] Compression: none
2026-02-14T10:35:42.944 [DEBUG] [Thread-184011] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:35:42.955 [DEBUG] [Thread-184011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:35:42.955 [DEBUG] [Thread-184011] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:35:42.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:35:42.955 [DEBUG] [Thread-184011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:35:42.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:35:42.956 [DEBUG] [Thread-184011] [transport.py] [_log()] userauth is OK
2026-02-14T10:35:42.957 [DEBUG] [Thread-184011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:35:42.957 [DEBUG] [Thread-184011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:35:42.957 [DEBUG] [Thread-184011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:35:42.957 [DEBUG] [Thread-184011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:35:42.968 [INFO] [Thread-184011] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:35:42.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:35:43.619 [DEBUG] [Thread-184011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:35:43.619 [DEBUG] [Thread-184011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:35:43.619 [DEBUG] [Thread-184011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:35:43.660 [DEBUG] [Thread-184011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:35:43.660 [DEBUG] [Thread-184011] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:35:43.663 [DEBUG] [Thread-184011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:35:43.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:35:43.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:35:43.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:35:43.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:35:43.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:35:43.690 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:35:43.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:35:43.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:35:43.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:35:43.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.357752 -999.00  +11.70  24.78     65   +5.40 1 2 1 1 1   888    0 8.10 46.86 ----- 24.6 24.8 151.4 31.9 18.7 -23.5 17.4 -21.9 16.4 -23.2 17.5 -23.5
2026-02-14T10:35:43.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:35:43.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:35:43.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.357752
2026-02-14T10:35:43.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:35:43.693 [DEBUG] [Thread-184011] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:35:43.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:35:43.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:35:43.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:35:43.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:35:43.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:35:02', tmtdew=8.12, humidity=57.62, cloud=0.0, wind=31.23, temperature=11.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:35:09.773', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:35:43.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-14T10:35:43.799 [DEBUG] [Thread-184014] [transport.py] [_log()] starting thread (client mode): 0xa2db63b0
2026-02-14T10:35:43.799 [DEBUG] [Thread-184014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:35:43.814 [DEBUG] [Thread-184014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:35:43.814 [INFO] [Thread-184014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:35:43.822 [DEBUG] [Thread-184014] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:35:43.822 [DEBUG] [Thread-184014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:35:43.822 [DEBUG] [Thread-184014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:35:43.822 [DEBUG] [Thread-184014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:35:43.822 [DEBUG] [Thread-184014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:35:43.822 [DEBUG] [Thread-184014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:35:43.822 [DEBUG] [Thread-184014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:35:43.822 [DEBUG] [Thread-184014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:35:43.822 [DEBUG] [Thread-184014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:35:43.822 [DEBUG] [Thread-184014] [transport.py] [_log()] client lang: <none>
2026-02-14T10:35:43.822 [DEBUG] [Thread-184014] [transport.py] [_log()] server lang: <none>
2026-02-14T10:35:43.822 [DEBUG] [Thread-184014] [transport.py] [_log()] kex follows: False
2026-02-14T10:35:43.822 [DEBUG] [Thread-184014] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:35:43.823 [DEBUG] [Thread-184014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:35:43.823 [DEBUG] [Thread-184014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:35:43.823 [DEBUG] [Thread-184014] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:35:43.823 [DEBUG] [Thread-184014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:35:43.823 [DEBUG] [Thread-184014] [transport.py] [_log()] Compression: none
2026-02-14T10:35:43.823 [DEBUG] [Thread-184014] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:35:43.883 [DEBUG] [Thread-184014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:35:43.883 [DEBUG] [Thread-184014] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:35:43.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:35:43.884 [DEBUG] [Thread-184014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:35:43.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:35:43.945 [DEBUG] [Thread-184014] [transport.py] [_log()] userauth is OK
2026-02-14T10:35:43.945 [DEBUG] [Thread-184014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:35:43.945 [DEBUG] [Thread-184014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:35:43.945 [DEBUG] [Thread-184014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:35:43.945 [DEBUG] [Thread-184014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:35:43.963 [INFO] [Thread-184014] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:35:43.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-14T10:35:43.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:35:44.789 [DEBUG] [Thread-184014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:35:44.790 [DEBUG] [Thread-184014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:35:44.837 [DEBUG] [Thread-184014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:35:44.838 [DEBUG] [Thread-184014] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:35:44.847 [DEBUG] [Thread-184014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:35:44.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:35:44.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:35:44.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-14T10:35:44.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:35:44.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:35:44.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:35:44.883 [DEBUG] [Thread-184014] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:35:51.297 [DEBUG] [Thread-184016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:36:05.335 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:36:05.336 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:36:06.349 [DEBUG] [Thread-184017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:36:14.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:36:14.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:36:14.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-14T10:36:16.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 35, 37), 8.12, 57.66, 0.0, 30.59, 12.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:36:16.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:35:37
2026-02-14T10:36:17.015 [DEBUG] [Thread-184018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:36:17.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:36:17.506 [DEBUG] [Thread-184019] [transport.py] [_log()] starting thread (client mode): 0xa2db6200
2026-02-14T10:36:17.506 [DEBUG] [Thread-184019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:36:17.519 [DEBUG] [Thread-184019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:36:17.519 [INFO] [Thread-184019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:36:17.523 [DEBUG] [Thread-184019] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:36:17.523 [DEBUG] [Thread-184019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:36:17.523 [DEBUG] [Thread-184019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:36:17.523 [DEBUG] [Thread-184019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:36:17.523 [DEBUG] [Thread-184019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:36:17.523 [DEBUG] [Thread-184019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:36:17.523 [DEBUG] [Thread-184019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:36:17.523 [DEBUG] [Thread-184019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:36:17.523 [DEBUG] [Thread-184019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:36:17.523 [DEBUG] [Thread-184019] [transport.py] [_log()] client lang: <none>
2026-02-14T10:36:17.523 [DEBUG] [Thread-184019] [transport.py] [_log()] server lang: <none>
2026-02-14T10:36:17.524 [DEBUG] [Thread-184019] [transport.py] [_log()] kex follows: False
2026-02-14T10:36:17.524 [DEBUG] [Thread-184019] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:36:17.524 [DEBUG] [Thread-184019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:36:17.524 [DEBUG] [Thread-184019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:36:17.524 [DEBUG] [Thread-184019] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:36:17.524 [DEBUG] [Thread-184019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:36:17.524 [DEBUG] [Thread-184019] [transport.py] [_log()] Compression: none
2026-02-14T10:36:17.524 [DEBUG] [Thread-184019] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:36:17.542 [DEBUG] [Thread-184019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:36:17.542 [DEBUG] [Thread-184019] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:36:17.543 [DEBUG] [Thread-184019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:36:17.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:36:17.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:36:17.545 [DEBUG] [Thread-184019] [transport.py] [_log()] userauth is OK
2026-02-14T10:36:17.545 [DEBUG] [Thread-184019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:36:17.545 [DEBUG] [Thread-184019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:36:17.545 [DEBUG] [Thread-184019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:36:17.546 [DEBUG] [Thread-184019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:36:17.566 [INFO] [Thread-184019] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:36:17.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:36:18.206 [DEBUG] [Thread-184019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:36:18.206 [DEBUG] [Thread-184019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:36:18.206 [DEBUG] [Thread-184019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:36:18.247 [DEBUG] [Thread-184019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:36:18.248 [DEBUG] [Thread-184019] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:36:18.251 [DEBUG] [Thread-184019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:36:18.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:36:18.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:36:18.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:36:18.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:36:18.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:36:18.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:36:18.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:36:18.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:36:18.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:36:18.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.358099 -999.00  +11.70  21.37     64   +5.30 1 2 1 1 1   888    0 8.05 44.07 ----- 26.6 21.4 172.0 33.3 18.7 -22.0 17.5 -20.8 16.6 -20.6 17.5 -22.5
2026-02-14T10:36:18.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:36:18.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:36:18.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.358099
2026-02-14T10:36:18.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:36:18.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:36:18.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:36:18.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:36:18.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:36:18.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:35:37', tmtdew=8.12, humidity=57.66, cloud=0.0, wind=30.59, temperature=12.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:35:39.754', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:36:18.282 [DEBUG] [Thread-184019] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:36:18.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T10:36:18.378 [DEBUG] [Thread-184022] [transport.py] [_log()] starting thread (client mode): 0xa5741150
2026-02-14T10:36:18.379 [DEBUG] [Thread-184022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:36:18.393 [DEBUG] [Thread-184022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:36:18.393 [INFO] [Thread-184022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:36:18.405 [DEBUG] [Thread-184022] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:36:18.405 [DEBUG] [Thread-184022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:36:18.405 [DEBUG] [Thread-184022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:36:18.406 [DEBUG] [Thread-184022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:36:18.406 [DEBUG] [Thread-184022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:36:18.406 [DEBUG] [Thread-184022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:36:18.406 [DEBUG] [Thread-184022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:36:18.406 [DEBUG] [Thread-184022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:36:18.406 [DEBUG] [Thread-184022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:36:18.406 [DEBUG] [Thread-184022] [transport.py] [_log()] client lang: <none>
2026-02-14T10:36:18.406 [DEBUG] [Thread-184022] [transport.py] [_log()] server lang: <none>
2026-02-14T10:36:18.406 [DEBUG] [Thread-184022] [transport.py] [_log()] kex follows: False
2026-02-14T10:36:18.406 [DEBUG] [Thread-184022] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:36:18.406 [DEBUG] [Thread-184022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:36:18.406 [DEBUG] [Thread-184022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:36:18.406 [DEBUG] [Thread-184022] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:36:18.406 [DEBUG] [Thread-184022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:36:18.406 [DEBUG] [Thread-184022] [transport.py] [_log()] Compression: none
2026-02-14T10:36:18.406 [DEBUG] [Thread-184022] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:36:18.464 [DEBUG] [Thread-184022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:36:18.464 [DEBUG] [Thread-184022] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:36:18.465 [DEBUG] [Thread-184022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:36:18.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:36:18.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:36:18.527 [DEBUG] [Thread-184022] [transport.py] [_log()] userauth is OK
2026-02-14T10:36:18.528 [DEBUG] [Thread-184022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:36:18.528 [DEBUG] [Thread-184022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:36:18.528 [DEBUG] [Thread-184022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:36:18.528 [DEBUG] [Thread-184022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:36:18.546 [INFO] [Thread-184022] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:36:18.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T10:36:18.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:36:19.368 [DEBUG] [Thread-184022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:36:19.368 [DEBUG] [Thread-184022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:36:19.418 [DEBUG] [Thread-184022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:36:19.419 [DEBUG] [Thread-184022] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:36:19.431 [DEBUG] [Thread-184022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:36:19.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:36:19.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-14T10:36:19.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:36:19.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:36:19.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:36:19.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:36:19.478 [DEBUG] [Thread-184022] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:36:21.385 [DEBUG] [Thread-184024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:36:36.437 [DEBUG] [Thread-184025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:36:49.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:36:49.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:36:49.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:36:51.474 [DEBUG] [Thread-184026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:36:52.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 36, 13), 7.53, 59.99, 0.0, 33.54, 11.82, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:36:52.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:36:13
2026-02-14T10:36:52.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:36:52.689 [DEBUG] [Thread-184027] [transport.py] [_log()] starting thread (client mode): 0xa2db64a0
2026-02-14T10:36:52.689 [DEBUG] [Thread-184027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:36:52.710 [DEBUG] [Thread-184027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:36:52.711 [INFO] [Thread-184027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:36:52.713 [DEBUG] [Thread-184027] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:36:52.713 [DEBUG] [Thread-184027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:36:52.713 [DEBUG] [Thread-184027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:36:52.714 [DEBUG] [Thread-184027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:36:52.714 [DEBUG] [Thread-184027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:36:52.714 [DEBUG] [Thread-184027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:36:52.714 [DEBUG] [Thread-184027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:36:52.714 [DEBUG] [Thread-184027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:36:52.714 [DEBUG] [Thread-184027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:36:52.714 [DEBUG] [Thread-184027] [transport.py] [_log()] client lang: <none>
2026-02-14T10:36:52.714 [DEBUG] [Thread-184027] [transport.py] [_log()] server lang: <none>
2026-02-14T10:36:52.714 [DEBUG] [Thread-184027] [transport.py] [_log()] kex follows: False
2026-02-14T10:36:52.714 [DEBUG] [Thread-184027] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:36:52.714 [DEBUG] [Thread-184027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:36:52.715 [DEBUG] [Thread-184027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:36:52.715 [DEBUG] [Thread-184027] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:36:52.715 [DEBUG] [Thread-184027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:36:52.715 [DEBUG] [Thread-184027] [transport.py] [_log()] Compression: none
2026-02-14T10:36:52.715 [DEBUG] [Thread-184027] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:36:52.733 [DEBUG] [Thread-184027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:36:52.733 [DEBUG] [Thread-184027] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:36:52.734 [DEBUG] [Thread-184027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:36:52.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:36:52.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:36:52.736 [DEBUG] [Thread-184027] [transport.py] [_log()] userauth is OK
2026-02-14T10:36:52.736 [DEBUG] [Thread-184027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:36:52.736 [DEBUG] [Thread-184027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:36:52.737 [DEBUG] [Thread-184027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:36:52.737 [DEBUG] [Thread-184027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:36:52.775 [INFO] [Thread-184027] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:36:52.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:36:53.424 [DEBUG] [Thread-184027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:36:53.424 [DEBUG] [Thread-184027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:36:53.424 [DEBUG] [Thread-184027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:36:53.465 [DEBUG] [Thread-184027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:36:53.466 [DEBUG] [Thread-184027] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:36:53.469 [DEBUG] [Thread-184027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:36:53.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:36:53.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:36:53.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:36:53.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:36:53.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:36:53.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:36:53.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:36:53.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:36:53.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:36:53.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.358446 -999.00  +11.90  24.83     64   +5.30 1 2 1 1 1   888    0 7.80 40.60 ----- 19.4 24.8 168.8 34.0 18.9 -20.4 17.6 -19.7 16.8 -17.9 17.6 -21.5
2026-02-14T10:36:53.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:36:53.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:36:53.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.358446
2026-02-14T10:36:53.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:36:53.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:36:53.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:36:53.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:36:53.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:36:53.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:36:13', tmtdew=7.53, humidity=59.99, cloud=0.0, wind=33.54, temperature=11.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:36:09.734', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:36:53.496 [DEBUG] [Thread-184027] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:36:53.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T10:37:05.479 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:37:05.480 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:37:06.510 [DEBUG] [Thread-184030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:37:17.080 [DEBUG] [Thread-184031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:37:21.563 [DEBUG] [Thread-184032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:37:36.598 [DEBUG] [Thread-184033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:37:51.633 [DEBUG] [Thread-184034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:38:05.619 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:38:05.621 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:38:06.670 [DEBUG] [Thread-184035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:38:17.119 [DEBUG] [Thread-184036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:38:21.709 [DEBUG] [Thread-184037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:38:36.748 [DEBUG] [Thread-184038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:38:51.781 [DEBUG] [Thread-184039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:39:05.764 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:39:05.765 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:39:06.040 [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-14T10:39:06.819 [DEBUG] [Thread-184040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:39:17.176 [DEBUG] [Thread-184041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:39:21.857 [DEBUG] [Thread-184042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:39:36.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:39:36.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:39:36.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-14T10:39:36.893 [DEBUG] [Thread-184043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:39:38.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 39, 10), 7.83, 58.75, 0.0, 28.6, 11.89, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:39:38.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:39:10
2026-02-14T10:39:38.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:39:38.666 [DEBUG] [Thread-184044] [transport.py] [_log()] starting thread (client mode): 0xa2db6050
2026-02-14T10:39:38.667 [DEBUG] [Thread-184044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:39:38.686 [DEBUG] [Thread-184044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:39:38.686 [INFO] [Thread-184044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:39:38.699 [DEBUG] [Thread-184044] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:39:38.699 [DEBUG] [Thread-184044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:39:38.699 [DEBUG] [Thread-184044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:39:38.700 [DEBUG] [Thread-184044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:39:38.700 [DEBUG] [Thread-184044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:39:38.700 [DEBUG] [Thread-184044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:39:38.700 [DEBUG] [Thread-184044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:39:38.700 [DEBUG] [Thread-184044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:39:38.700 [DEBUG] [Thread-184044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:39:38.700 [DEBUG] [Thread-184044] [transport.py] [_log()] client lang: <none>
2026-02-14T10:39:38.700 [DEBUG] [Thread-184044] [transport.py] [_log()] server lang: <none>
2026-02-14T10:39:38.700 [DEBUG] [Thread-184044] [transport.py] [_log()] kex follows: False
2026-02-14T10:39:38.701 [DEBUG] [Thread-184044] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:39:38.701 [DEBUG] [Thread-184044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:39:38.701 [DEBUG] [Thread-184044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:39:38.701 [DEBUG] [Thread-184044] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:39:38.701 [DEBUG] [Thread-184044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:39:38.701 [DEBUG] [Thread-184044] [transport.py] [_log()] Compression: none
2026-02-14T10:39:38.701 [DEBUG] [Thread-184044] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:39:38.722 [DEBUG] [Thread-184044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:39:38.723 [DEBUG] [Thread-184044] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:39:38.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:39:38.724 [DEBUG] [Thread-184044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:39:38.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:39:38.726 [DEBUG] [Thread-184044] [transport.py] [_log()] userauth is OK
2026-02-14T10:39:38.726 [DEBUG] [Thread-184044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:39:38.726 [DEBUG] [Thread-184044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:39:38.726 [DEBUG] [Thread-184044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:39:38.726 [DEBUG] [Thread-184044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:39:38.762 [INFO] [Thread-184044] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:39:38.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:39:39.439 [DEBUG] [Thread-184044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:39:39.439 [DEBUG] [Thread-184044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:39:39.440 [DEBUG] [Thread-184044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:39:39.480 [DEBUG] [Thread-184044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:39:39.481 [DEBUG] [Thread-184044] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:39:39.484 [DEBUG] [Thread-184044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:39:39.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:39:39.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:39:39.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:39:39.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:39:39.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:39:39.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:39:39.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:39:39.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:39:39.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:39:39.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.360182 -999.00  +11.80  23.39     65   +5.40 1 2 1 1 1   888    0 7.62 30.46 ----- 23.4 23.4 178.8 29.3 19.4 -24.1 17.9 -22.2 16.9 -21.8 18.0 -23.9
2026-02-14T10:39:39.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:39:39.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:39:39.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.360182
2026-02-14T10:39:39.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:39:39.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:39:39.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:39:39.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:39:39.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:39:39.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:39:10', tmtdew=7.83, humidity=58.75, cloud=0.0, wind=28.6, temperature=11.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:38:39.725', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:39:39.511 [DEBUG] [Thread-184044] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:39:39.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-14T10:39:39.607 [DEBUG] [Thread-184047] [transport.py] [_log()] starting thread (client mode): 0xa2d1ae90
2026-02-14T10:39:39.607 [DEBUG] [Thread-184047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:39:39.622 [DEBUG] [Thread-184047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:39:39.622 [INFO] [Thread-184047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:39:39.630 [DEBUG] [Thread-184047] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:39:39.630 [DEBUG] [Thread-184047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:39:39.630 [DEBUG] [Thread-184047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:39:39.630 [DEBUG] [Thread-184047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:39:39.630 [DEBUG] [Thread-184047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:39:39.630 [DEBUG] [Thread-184047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:39:39.631 [DEBUG] [Thread-184047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:39:39.631 [DEBUG] [Thread-184047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:39:39.631 [DEBUG] [Thread-184047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:39:39.631 [DEBUG] [Thread-184047] [transport.py] [_log()] client lang: <none>
2026-02-14T10:39:39.631 [DEBUG] [Thread-184047] [transport.py] [_log()] server lang: <none>
2026-02-14T10:39:39.631 [DEBUG] [Thread-184047] [transport.py] [_log()] kex follows: False
2026-02-14T10:39:39.631 [DEBUG] [Thread-184047] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:39:39.631 [DEBUG] [Thread-184047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:39:39.631 [DEBUG] [Thread-184047] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:39:39.631 [DEBUG] [Thread-184047] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:39:39.631 [DEBUG] [Thread-184047] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:39:39.631 [DEBUG] [Thread-184047] [transport.py] [_log()] Compression: none
2026-02-14T10:39:39.631 [DEBUG] [Thread-184047] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:39:39.690 [DEBUG] [Thread-184047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:39:39.691 [DEBUG] [Thread-184047] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:39:39.691 [DEBUG] [Thread-184047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:39:39.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:39:39.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:39:39.750 [DEBUG] [Thread-184047] [transport.py] [_log()] userauth is OK
2026-02-14T10:39:39.750 [DEBUG] [Thread-184047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:39:39.750 [DEBUG] [Thread-184047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:39:39.751 [DEBUG] [Thread-184047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:39:39.751 [DEBUG] [Thread-184047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:39:39.775 [INFO] [Thread-184047] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:39:39.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-14T10:39:39.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:39:40.603 [DEBUG] [Thread-184047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:39:40.603 [DEBUG] [Thread-184047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:39:40.652 [DEBUG] [Thread-184047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:39:40.652 [DEBUG] [Thread-184047] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:39:40.661 [DEBUG] [Thread-184047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:39:40.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:39:40.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-14T10:39:40.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-14T10:39:40.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:39:40.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:39:40.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:39:40.701 [DEBUG] [Thread-184047] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:39:51.931 [DEBUG] [Thread-184049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:40:05.905 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:40:05.906 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:40:06.986 [DEBUG] [Thread-184050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:40:10.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:40:10.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:40:10.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-14T10:40:12.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 39, 45), 7.65, 59.35, 0.0, 26.91, 11.7, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:40:12.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:39:45
2026-02-14T10:40:12.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:40:13.054 [DEBUG] [Thread-184051] [transport.py] [_log()] starting thread (client mode): 0xa2ddfaf0
2026-02-14T10:40:13.054 [DEBUG] [Thread-184051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:40:13.077 [DEBUG] [Thread-184051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:40:13.077 [INFO] [Thread-184051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:40:13.080 [DEBUG] [Thread-184051] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:40:13.080 [DEBUG] [Thread-184051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:40:13.080 [DEBUG] [Thread-184051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:40:13.080 [DEBUG] [Thread-184051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:40:13.081 [DEBUG] [Thread-184051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:40:13.081 [DEBUG] [Thread-184051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:40:13.081 [DEBUG] [Thread-184051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:40:13.081 [DEBUG] [Thread-184051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:40:13.081 [DEBUG] [Thread-184051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:40:13.081 [DEBUG] [Thread-184051] [transport.py] [_log()] client lang: <none>
2026-02-14T10:40:13.081 [DEBUG] [Thread-184051] [transport.py] [_log()] server lang: <none>
2026-02-14T10:40:13.081 [DEBUG] [Thread-184051] [transport.py] [_log()] kex follows: False
2026-02-14T10:40:13.081 [DEBUG] [Thread-184051] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:40:13.081 [DEBUG] [Thread-184051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:40:13.081 [DEBUG] [Thread-184051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:40:13.081 [DEBUG] [Thread-184051] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:40:13.081 [DEBUG] [Thread-184051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:40:13.081 [DEBUG] [Thread-184051] [transport.py] [_log()] Compression: none
2026-02-14T10:40:13.081 [DEBUG] [Thread-184051] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:40:13.099 [DEBUG] [Thread-184051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:40:13.100 [DEBUG] [Thread-184051] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:40:13.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:40:13.100 [DEBUG] [Thread-184051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:40:13.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:40:13.102 [DEBUG] [Thread-184051] [transport.py] [_log()] userauth is OK
2026-02-14T10:40:13.103 [DEBUG] [Thread-184051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:40:13.103 [DEBUG] [Thread-184051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:40:13.103 [DEBUG] [Thread-184051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:40:13.103 [DEBUG] [Thread-184051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:40:13.120 [INFO] [Thread-184051] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:40:13.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:40:13.770 [DEBUG] [Thread-184051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:40:13.770 [DEBUG] [Thread-184051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:40:13.771 [DEBUG] [Thread-184051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:40:13.812 [DEBUG] [Thread-184051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:40:13.812 [DEBUG] [Thread-184051] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:40:13.815 [DEBUG] [Thread-184051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:40:13.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:40:13.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:40:13.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:40:13.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:40:13.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:40:13.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:40:13.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:40:13.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:40:13.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:40:13.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.360877 -999.00  +12.60  19.22     63   +5.80 1 2 1 1 1   888    0 7.22 23.12 ----- 26.2 19.2 163.2 24.3 19.7 -23.7 18.1 -22.0 17.1 -23.0 18.2 -23.1
2026-02-14T10:40:13.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:40:13.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:40:13.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.360877
2026-02-14T10:40:13.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:40:13.850 [DEBUG] [Thread-184051] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:40:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:40:13.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:40:13.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:40:13.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:40:13.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:39:45', tmtdew=7.65, humidity=59.35, cloud=0.0, wind=26.91, temperature=11.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:39:39.773', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:40:13.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-14T10:40:13.949 [DEBUG] [Thread-184054] [transport.py] [_log()] starting thread (client mode): 0xa2db4a30
2026-02-14T10:40:13.949 [DEBUG] [Thread-184054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:40:13.963 [DEBUG] [Thread-184054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:40:13.964 [INFO] [Thread-184054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:40:13.973 [DEBUG] [Thread-184054] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:40:13.973 [DEBUG] [Thread-184054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:40:13.973 [DEBUG] [Thread-184054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:40:13.974 [DEBUG] [Thread-184054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:40:13.974 [DEBUG] [Thread-184054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:40:13.974 [DEBUG] [Thread-184054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:40:13.974 [DEBUG] [Thread-184054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:40:13.974 [DEBUG] [Thread-184054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:40:13.974 [DEBUG] [Thread-184054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:40:13.974 [DEBUG] [Thread-184054] [transport.py] [_log()] client lang: <none>
2026-02-14T10:40:13.974 [DEBUG] [Thread-184054] [transport.py] [_log()] server lang: <none>
2026-02-14T10:40:13.974 [DEBUG] [Thread-184054] [transport.py] [_log()] kex follows: False
2026-02-14T10:40:13.974 [DEBUG] [Thread-184054] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:40:13.974 [DEBUG] [Thread-184054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:40:13.974 [DEBUG] [Thread-184054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:40:13.974 [DEBUG] [Thread-184054] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:40:13.974 [DEBUG] [Thread-184054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:40:13.974 [DEBUG] [Thread-184054] [transport.py] [_log()] Compression: none
2026-02-14T10:40:13.974 [DEBUG] [Thread-184054] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:40:14.042 [DEBUG] [Thread-184054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:40:14.043 [DEBUG] [Thread-184054] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:40:14.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:40:14.044 [DEBUG] [Thread-184054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:40:14.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:40:14.098 [DEBUG] [Thread-184054] [transport.py] [_log()] userauth is OK
2026-02-14T10:40:14.099 [DEBUG] [Thread-184054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:40:14.099 [DEBUG] [Thread-184054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:40:14.099 [DEBUG] [Thread-184054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:40:14.099 [DEBUG] [Thread-184054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:40:14.131 [INFO] [Thread-184054] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:40:14.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-14T10:40:14.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:40:14.962 [DEBUG] [Thread-184054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:40:14.962 [DEBUG] [Thread-184054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:40:15.010 [DEBUG] [Thread-184054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:40:15.011 [DEBUG] [Thread-184054] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:40:15.020 [DEBUG] [Thread-184054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:40:15.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:40:15.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:40:15.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:40:15.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:40:15.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:40:15.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:40:15.055 [DEBUG] [Thread-184054] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:40:17.222 [DEBUG] [Thread-184056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:40:22.024 [DEBUG] [Thread-184057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:40:37.077 [DEBUG] [Thread-184058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:40:45.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:40:45.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:40:45.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-14T10:40:47.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 40, 20), 7.61, 59.53, 0.0, 26.7, 11.77, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:40:47.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:40:20
2026-02-14T10:40:47.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:40:48.048 [DEBUG] [Thread-184059] [transport.py] [_log()] starting thread (client mode): 0xa2d3ebf0
2026-02-14T10:40:48.049 [DEBUG] [Thread-184059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:40:48.068 [DEBUG] [Thread-184059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:40:48.068 [INFO] [Thread-184059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:40:48.071 [DEBUG] [Thread-184059] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:40:48.072 [DEBUG] [Thread-184059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:40:48.072 [DEBUG] [Thread-184059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:40:48.072 [DEBUG] [Thread-184059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:40:48.072 [DEBUG] [Thread-184059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:40:48.072 [DEBUG] [Thread-184059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:40:48.072 [DEBUG] [Thread-184059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:40:48.072 [DEBUG] [Thread-184059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:40:48.072 [DEBUG] [Thread-184059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:40:48.072 [DEBUG] [Thread-184059] [transport.py] [_log()] client lang: <none>
2026-02-14T10:40:48.072 [DEBUG] [Thread-184059] [transport.py] [_log()] server lang: <none>
2026-02-14T10:40:48.072 [DEBUG] [Thread-184059] [transport.py] [_log()] kex follows: False
2026-02-14T10:40:48.072 [DEBUG] [Thread-184059] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:40:48.072 [DEBUG] [Thread-184059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:40:48.072 [DEBUG] [Thread-184059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:40:48.072 [DEBUG] [Thread-184059] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:40:48.072 [DEBUG] [Thread-184059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:40:48.072 [DEBUG] [Thread-184059] [transport.py] [_log()] Compression: none
2026-02-14T10:40:48.072 [DEBUG] [Thread-184059] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:40:48.089 [DEBUG] [Thread-184059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:40:48.090 [DEBUG] [Thread-184059] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:40:48.090 [DEBUG] [Thread-184059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:40:48.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:40:48.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:40:48.092 [DEBUG] [Thread-184059] [transport.py] [_log()] userauth is OK
2026-02-14T10:40:48.093 [DEBUG] [Thread-184059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:40:48.093 [DEBUG] [Thread-184059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:40:48.093 [DEBUG] [Thread-184059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:40:48.093 [DEBUG] [Thread-184059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:40:48.111 [INFO] [Thread-184059] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:40:48.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:40:48.922 [DEBUG] [Thread-184059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:40:48.922 [DEBUG] [Thread-184059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:40:48.923 [DEBUG] [Thread-184059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:40:48.963 [DEBUG] [Thread-184059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:40:48.964 [DEBUG] [Thread-184059] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:40:48.967 [DEBUG] [Thread-184059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:40:48.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:40:48.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:40:48.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:40:48.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:40:48.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:40:48.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:40:48.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:40:48.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:40:48.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:40:48.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.361223 -999.00  +12.90  32.77     61   +5.60 1 1 2 1 1   888    0 7.47 25.44 ----- 32.1 32.8 200.9 35.3 19.5 -28.1 18.1 -28.2 16.8 -27.9 18.1 -25.8
2026-02-14T10:40:48.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:40:48.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:40:48.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.361223
2026-02-14T10:40:48.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:40:48.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:40:48.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:40:48.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:40:48.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:40:48.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:40:20', tmtdew=7.61, humidity=59.53, cloud=0.0, wind=26.7, temperature=11.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:40:09.667', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:40:48.995 [DEBUG] [Thread-184059] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:40:49.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T10:40:52.113 [DEBUG] [Thread-184062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:41:06.049 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:41:06.050 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:41:07.156 [DEBUG] [Thread-184063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:41:17.255 [DEBUG] [Thread-184064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:41:22.196 [DEBUG] [Thread-184065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:41:37.235 [DEBUG] [Thread-184066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:41:52.273 [DEBUG] [Thread-184067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:42:06.191 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:42:06.192 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:42:07.309 [DEBUG] [Thread-184068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:42:17.300 [DEBUG] [Thread-184069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:42:22.350 [DEBUG] [Thread-184070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:42:37.387 [DEBUG] [Thread-184071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:42:52.424 [DEBUG] [Thread-184072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:43:03.608 [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-14T10:43:06.331 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:43:06.333 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:43:07.456 [DEBUG] [Thread-184073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:43:17.334 [DEBUG] [Thread-184074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:43:22.493 [DEBUG] [Thread-184075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:43:33.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:43:33.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:43:33.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-14T10:43:35.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 43, 18), 8.17, 57.29, 0.0, 28.78, 12.23, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:43:35.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:43:18
2026-02-14T10:43:36.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:43:36.264 [DEBUG] [Thread-184076] [transport.py] [_log()] starting thread (client mode): 0xa2d3eec0
2026-02-14T10:43:36.264 [DEBUG] [Thread-184076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:43:36.282 [DEBUG] [Thread-184076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:43:36.282 [INFO] [Thread-184076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:43:36.285 [DEBUG] [Thread-184076] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:43:36.285 [DEBUG] [Thread-184076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:43:36.285 [DEBUG] [Thread-184076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:43:36.285 [DEBUG] [Thread-184076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:43:36.285 [DEBUG] [Thread-184076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:43:36.286 [DEBUG] [Thread-184076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:43:36.286 [DEBUG] [Thread-184076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:43:36.286 [DEBUG] [Thread-184076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:43:36.286 [DEBUG] [Thread-184076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:43:36.286 [DEBUG] [Thread-184076] [transport.py] [_log()] client lang: <none>
2026-02-14T10:43:36.286 [DEBUG] [Thread-184076] [transport.py] [_log()] server lang: <none>
2026-02-14T10:43:36.286 [DEBUG] [Thread-184076] [transport.py] [_log()] kex follows: False
2026-02-14T10:43:36.286 [DEBUG] [Thread-184076] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:43:36.286 [DEBUG] [Thread-184076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:43:36.286 [DEBUG] [Thread-184076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:43:36.286 [DEBUG] [Thread-184076] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:43:36.286 [DEBUG] [Thread-184076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:43:36.286 [DEBUG] [Thread-184076] [transport.py] [_log()] Compression: none
2026-02-14T10:43:36.286 [DEBUG] [Thread-184076] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:43:36.305 [DEBUG] [Thread-184076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:43:36.305 [DEBUG] [Thread-184076] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:43:36.306 [DEBUG] [Thread-184076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:43:36.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:43:36.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:43:36.308 [DEBUG] [Thread-184076] [transport.py] [_log()] userauth is OK
2026-02-14T10:43:36.308 [DEBUG] [Thread-184076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:43:36.308 [DEBUG] [Thread-184076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:43:36.308 [DEBUG] [Thread-184076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:43:36.308 [DEBUG] [Thread-184076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:43:36.329 [INFO] [Thread-184076] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:43:36.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:43:37.454 [DEBUG] [Thread-184076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:43:37.455 [DEBUG] [Thread-184076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:43:37.455 [DEBUG] [Thread-184076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:43:37.495 [DEBUG] [Thread-184076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:43:37.495 [DEBUG] [Thread-184076] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:43:37.498 [DEBUG] [Thread-184076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:43:37.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:43:37.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:43:37.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:43:37.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:43:37.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:43:37.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:43:37.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:43:37.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:43:37.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:43:37.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.362960 -999.00  +11.80  27.18     63   +5.10 1 1 1 1 1   888    0 7.32 19.88 ----- 26.0 27.2 193.6 44.8 18.4 -26.9 17.0 -28.7 16.4 -25.0 17.3 -26.3
2026-02-14T10:43:37.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:43:37.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:43:37.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.362960
2026-02-14T10:43:37.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:43:37.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:43:37.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:43:37.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:43:37.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:43:37.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:43:18', tmtdew=8.17, humidity=57.29, cloud=0.0, wind=28.78, temperature=12.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:42:39.744', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:43:37.522 [DEBUG] [Thread-184076] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:43:37.530 [DEBUG] [Thread-184079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:43:37.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-14T10:43:37.623 [DEBUG] [Thread-184080] [transport.py] [_log()] starting thread (client mode): 0xa57b3eb0
2026-02-14T10:43:37.623 [DEBUG] [Thread-184080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:43:37.638 [DEBUG] [Thread-184080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:43:37.639 [INFO] [Thread-184080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:43:37.646 [DEBUG] [Thread-184080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:43:37.646 [DEBUG] [Thread-184080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:43:37.646 [DEBUG] [Thread-184080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:43:37.647 [DEBUG] [Thread-184080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:43:37.647 [DEBUG] [Thread-184080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:43:37.647 [DEBUG] [Thread-184080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:43:37.647 [DEBUG] [Thread-184080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:43:37.647 [DEBUG] [Thread-184080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:43:37.647 [DEBUG] [Thread-184080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:43:37.647 [DEBUG] [Thread-184080] [transport.py] [_log()] client lang: <none>
2026-02-14T10:43:37.647 [DEBUG] [Thread-184080] [transport.py] [_log()] server lang: <none>
2026-02-14T10:43:37.648 [DEBUG] [Thread-184080] [transport.py] [_log()] kex follows: False
2026-02-14T10:43:37.648 [DEBUG] [Thread-184080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:43:37.648 [DEBUG] [Thread-184080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:43:37.648 [DEBUG] [Thread-184080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:43:37.648 [DEBUG] [Thread-184080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:43:37.649 [DEBUG] [Thread-184080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:43:37.649 [DEBUG] [Thread-184080] [transport.py] [_log()] Compression: none
2026-02-14T10:43:37.649 [DEBUG] [Thread-184080] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:43:37.705 [DEBUG] [Thread-184080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:43:37.706 [DEBUG] [Thread-184080] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:43:37.706 [DEBUG] [Thread-184080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:43:37.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:43:37.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:43:37.761 [DEBUG] [Thread-184080] [transport.py] [_log()] userauth is OK
2026-02-14T10:43:37.761 [DEBUG] [Thread-184080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:43:37.761 [DEBUG] [Thread-184080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:43:37.762 [DEBUG] [Thread-184080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:43:37.762 [DEBUG] [Thread-184080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:43:37.780 [INFO] [Thread-184080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:43:37.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T10:43:37.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:43:38.591 [DEBUG] [Thread-184080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:43:38.591 [DEBUG] [Thread-184080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:43:38.639 [DEBUG] [Thread-184080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:43:38.639 [DEBUG] [Thread-184080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:43:38.649 [DEBUG] [Thread-184080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:43:38.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:43:38.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-14T10:43:38.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-14T10:43:38.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:43:38.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:43:38.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:43:38.685 [DEBUG] [Thread-184080] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:43:52.578 [DEBUG] [Thread-184082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:44:06.474 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:44:06.475 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:44:07.617 [DEBUG] [Thread-184083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:44:08.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:44:08.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:44:08.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-14T10:44:10.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 43, 53), 8.26, 57.28, 0.0, 34.99, 12.07, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:44:10.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:43:53
2026-02-14T10:44:11.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:44:11.501 [DEBUG] [Thread-184084] [transport.py] [_log()] starting thread (client mode): 0xa2d3ff40
2026-02-14T10:44:11.502 [DEBUG] [Thread-184084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:44:11.512 [DEBUG] [Thread-184084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:44:11.512 [INFO] [Thread-184084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:44:11.514 [DEBUG] [Thread-184084] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:44:11.514 [DEBUG] [Thread-184084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:44:11.514 [DEBUG] [Thread-184084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:44:11.514 [DEBUG] [Thread-184084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:44:11.514 [DEBUG] [Thread-184084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:44:11.514 [DEBUG] [Thread-184084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:44:11.514 [DEBUG] [Thread-184084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:44:11.514 [DEBUG] [Thread-184084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:44:11.514 [DEBUG] [Thread-184084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:44:11.514 [DEBUG] [Thread-184084] [transport.py] [_log()] client lang: <none>
2026-02-14T10:44:11.514 [DEBUG] [Thread-184084] [transport.py] [_log()] server lang: <none>
2026-02-14T10:44:11.514 [DEBUG] [Thread-184084] [transport.py] [_log()] kex follows: False
2026-02-14T10:44:11.514 [DEBUG] [Thread-184084] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:44:11.514 [DEBUG] [Thread-184084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:44:11.514 [DEBUG] [Thread-184084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:44:11.514 [DEBUG] [Thread-184084] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:44:11.514 [DEBUG] [Thread-184084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:44:11.514 [DEBUG] [Thread-184084] [transport.py] [_log()] Compression: none
2026-02-14T10:44:11.514 [DEBUG] [Thread-184084] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:44:11.527 [DEBUG] [Thread-184084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:44:11.527 [DEBUG] [Thread-184084] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:44:11.527 [DEBUG] [Thread-184084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:44:11.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:44:11.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:44:11.528 [DEBUG] [Thread-184084] [transport.py] [_log()] userauth is OK
2026-02-14T10:44:11.528 [DEBUG] [Thread-184084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:44:11.528 [DEBUG] [Thread-184084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:44:11.528 [DEBUG] [Thread-184084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:44:11.528 [DEBUG] [Thread-184084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:44:11.549 [INFO] [Thread-184084] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:44:11.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:44:12.218 [DEBUG] [Thread-184084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:44:12.218 [DEBUG] [Thread-184084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:44:12.218 [DEBUG] [Thread-184084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:44:12.259 [DEBUG] [Thread-184084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:44:12.260 [DEBUG] [Thread-184084] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:44:12.263 [DEBUG] [Thread-184084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:44:12.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:44:12.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:44:12.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:44:12.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:44:12.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:44:12.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:44:12.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:44:12.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:44:12.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:44:12.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.363307 -999.00  +11.90  26.68     63   +5.10 1 1 1 1 1   888    0 7.30 19.57 ----- 26.2 26.7 174.2 38.1 18.5 -25.7 17.1 -27.8 16.5 -24.0 17.4 -25.5
2026-02-14T10:44:12.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:44:12.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:44:12.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.363307
2026-02-14T10:44:12.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:44:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:44:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:44:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:44:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:44:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:43:53', tmtdew=8.26, humidity=57.28, cloud=0.0, wind=34.99, temperature=12.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:43:09.725', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:44:12.289 [DEBUG] [Thread-184084] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:44:12.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-14T10:44:12.386 [DEBUG] [Thread-184087] [transport.py] [_log()] starting thread (client mode): 0xa2d19c90
2026-02-14T10:44:12.386 [DEBUG] [Thread-184087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:44:12.400 [DEBUG] [Thread-184087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:44:12.401 [INFO] [Thread-184087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:44:12.408 [DEBUG] [Thread-184087] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:44:12.408 [DEBUG] [Thread-184087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:44:12.408 [DEBUG] [Thread-184087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:44:12.408 [DEBUG] [Thread-184087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:44:12.408 [DEBUG] [Thread-184087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:44:12.408 [DEBUG] [Thread-184087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:44:12.408 [DEBUG] [Thread-184087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:44:12.408 [DEBUG] [Thread-184087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:44:12.409 [DEBUG] [Thread-184087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:44:12.409 [DEBUG] [Thread-184087] [transport.py] [_log()] client lang: <none>
2026-02-14T10:44:12.409 [DEBUG] [Thread-184087] [transport.py] [_log()] server lang: <none>
2026-02-14T10:44:12.409 [DEBUG] [Thread-184087] [transport.py] [_log()] kex follows: False
2026-02-14T10:44:12.409 [DEBUG] [Thread-184087] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:44:12.409 [DEBUG] [Thread-184087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:44:12.409 [DEBUG] [Thread-184087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:44:12.409 [DEBUG] [Thread-184087] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:44:12.409 [DEBUG] [Thread-184087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:44:12.409 [DEBUG] [Thread-184087] [transport.py] [_log()] Compression: none
2026-02-14T10:44:12.409 [DEBUG] [Thread-184087] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:44:12.464 [DEBUG] [Thread-184087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:44:12.465 [DEBUG] [Thread-184087] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:44:12.465 [DEBUG] [Thread-184087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:44:12.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:44:12.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:44:12.521 [DEBUG] [Thread-184087] [transport.py] [_log()] userauth is OK
2026-02-14T10:44:12.521 [DEBUG] [Thread-184087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:44:12.522 [DEBUG] [Thread-184087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:44:12.522 [DEBUG] [Thread-184087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:44:12.522 [DEBUG] [Thread-184087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:44:12.541 [INFO] [Thread-184087] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:44:12.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-14T10:44:12.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:44:13.370 [DEBUG] [Thread-184087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:44:13.370 [DEBUG] [Thread-184087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:44:13.418 [DEBUG] [Thread-184087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:44:13.419 [DEBUG] [Thread-184087] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:44:13.428 [DEBUG] [Thread-184087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:44:13.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:44:13.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-14T10:44:13.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-14T10:44:13.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:44:13.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:44:13.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:44:13.470 [DEBUG] [Thread-184087] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:44:17.362 [DEBUG] [Thread-184089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:44:22.653 [DEBUG] [Thread-184090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:44:37.716 [DEBUG] [Thread-184091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:44:43.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:44:43.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:44:43.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:44:45.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 44, 28), 8.21, 57.44, 0.0, 33.51, 11.95, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:44:45.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:44:28
2026-02-14T10:44:46.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:44:46.216 [DEBUG] [Thread-184092] [transport.py] [_log()] starting thread (client mode): 0xa2d3feb0
2026-02-14T10:44:46.216 [DEBUG] [Thread-184092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:44:46.236 [DEBUG] [Thread-184092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:44:46.236 [INFO] [Thread-184092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:44:46.239 [DEBUG] [Thread-184092] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:44:46.240 [DEBUG] [Thread-184092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:44:46.240 [DEBUG] [Thread-184092] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:44:46.240 [DEBUG] [Thread-184092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:44:46.240 [DEBUG] [Thread-184092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:44:46.240 [DEBUG] [Thread-184092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:44:46.240 [DEBUG] [Thread-184092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:44:46.240 [DEBUG] [Thread-184092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:44:46.240 [DEBUG] [Thread-184092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:44:46.240 [DEBUG] [Thread-184092] [transport.py] [_log()] client lang: <none>
2026-02-14T10:44:46.240 [DEBUG] [Thread-184092] [transport.py] [_log()] server lang: <none>
2026-02-14T10:44:46.240 [DEBUG] [Thread-184092] [transport.py] [_log()] kex follows: False
2026-02-14T10:44:46.240 [DEBUG] [Thread-184092] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:44:46.240 [DEBUG] [Thread-184092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:44:46.240 [DEBUG] [Thread-184092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:44:46.240 [DEBUG] [Thread-184092] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:44:46.240 [DEBUG] [Thread-184092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:44:46.240 [DEBUG] [Thread-184092] [transport.py] [_log()] Compression: none
2026-02-14T10:44:46.240 [DEBUG] [Thread-184092] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:44:46.257 [DEBUG] [Thread-184092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:44:46.258 [DEBUG] [Thread-184092] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:44:46.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:44:46.259 [DEBUG] [Thread-184092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:44:46.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:44:46.261 [DEBUG] [Thread-184092] [transport.py] [_log()] userauth is OK
2026-02-14T10:44:46.261 [DEBUG] [Thread-184092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:44:46.262 [DEBUG] [Thread-184092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:44:46.262 [DEBUG] [Thread-184092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:44:46.262 [DEBUG] [Thread-184092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:44:46.298 [INFO] [Thread-184092] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:44:46.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:44:46.937 [DEBUG] [Thread-184092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:44:46.938 [DEBUG] [Thread-184092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:44:46.938 [DEBUG] [Thread-184092] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:44:46.978 [DEBUG] [Thread-184092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:44:46.979 [DEBUG] [Thread-184092] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:44:46.982 [DEBUG] [Thread-184092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:44:46.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:44:46.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:44:46.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:44:46.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:44:47.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:44:47.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:44:47.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:44:47.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:44:47.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:44:47.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.364001 -999.00  +11.70  24.74     63   +5.10 1 1 1 1 1   888    0 7.23 16.62 ----- 30.8 24.7 177.2 37.9 18.5 -25.4 17.0 -27.4 16.4 -24.4 17.4 -25.0
2026-02-14T10:44:47.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:44:47.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:44:47.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.364001
2026-02-14T10:44:47.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:44:47.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:44:47.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:44:47.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:44:47.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:44:47.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:44:28', tmtdew=8.21, humidity=57.44, cloud=0.0, wind=33.51, temperature=11.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:44:09.686', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:44:47.008 [DEBUG] [Thread-184092] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:44:47.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T10:44:47.105 [DEBUG] [Thread-184095] [transport.py] [_log()] starting thread (client mode): 0xa2d3d630
2026-02-14T10:44:47.105 [DEBUG] [Thread-184095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:44:47.119 [DEBUG] [Thread-184095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:44:47.120 [INFO] [Thread-184095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:44:47.127 [DEBUG] [Thread-184095] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:44:47.127 [DEBUG] [Thread-184095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:44:47.127 [DEBUG] [Thread-184095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:44:47.127 [DEBUG] [Thread-184095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:44:47.127 [DEBUG] [Thread-184095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:44:47.127 [DEBUG] [Thread-184095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:44:47.127 [DEBUG] [Thread-184095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:44:47.128 [DEBUG] [Thread-184095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:44:47.128 [DEBUG] [Thread-184095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:44:47.128 [DEBUG] [Thread-184095] [transport.py] [_log()] client lang: <none>
2026-02-14T10:44:47.128 [DEBUG] [Thread-184095] [transport.py] [_log()] server lang: <none>
2026-02-14T10:44:47.128 [DEBUG] [Thread-184095] [transport.py] [_log()] kex follows: False
2026-02-14T10:44:47.128 [DEBUG] [Thread-184095] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:44:47.128 [DEBUG] [Thread-184095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:44:47.128 [DEBUG] [Thread-184095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:44:47.128 [DEBUG] [Thread-184095] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:44:47.128 [DEBUG] [Thread-184095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:44:47.128 [DEBUG] [Thread-184095] [transport.py] [_log()] Compression: none
2026-02-14T10:44:47.128 [DEBUG] [Thread-184095] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:44:47.185 [DEBUG] [Thread-184095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:44:47.186 [DEBUG] [Thread-184095] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:44:47.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:44:47.187 [DEBUG] [Thread-184095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:44:47.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:44:47.242 [DEBUG] [Thread-184095] [transport.py] [_log()] userauth is OK
2026-02-14T10:44:47.242 [DEBUG] [Thread-184095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:44:47.243 [DEBUG] [Thread-184095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:44:47.243 [DEBUG] [Thread-184095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:44:47.243 [DEBUG] [Thread-184095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:44:47.261 [INFO] [Thread-184095] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:44:47.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T10:44:47.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:44:48.071 [DEBUG] [Thread-184095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:44:48.072 [DEBUG] [Thread-184095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:44:48.119 [DEBUG] [Thread-184095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:44:48.119 [DEBUG] [Thread-184095] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:44:48.128 [DEBUG] [Thread-184095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:44:48.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:44:48.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-14T10:44:48.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:44:48.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:44:48.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:44:48.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:44:48.163 [DEBUG] [Thread-184095] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:44:52.758 [DEBUG] [Thread-184097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:45:06.615 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:45:06.616 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:45:07.811 [DEBUG] [Thread-184098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:45:17.396 [DEBUG] [Thread-184099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:45:18.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:45:18.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:45:18.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:45:20.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 45, 4), 8.21, 57.44, 0.0, 31.99, 11.88, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:45:20.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:45:04
2026-02-14T10:45:20.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:45:20.805 [DEBUG] [Thread-184100] [transport.py] [_log()] starting thread (client mode): 0xa2db6920
2026-02-14T10:45:20.805 [DEBUG] [Thread-184100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:45:20.827 [DEBUG] [Thread-184100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:45:20.827 [INFO] [Thread-184100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:45:20.830 [DEBUG] [Thread-184100] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:45:20.831 [DEBUG] [Thread-184100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:45:20.831 [DEBUG] [Thread-184100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:45:20.831 [DEBUG] [Thread-184100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:45:20.831 [DEBUG] [Thread-184100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:45:20.831 [DEBUG] [Thread-184100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:45:20.831 [DEBUG] [Thread-184100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:45:20.831 [DEBUG] [Thread-184100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:45:20.831 [DEBUG] [Thread-184100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:45:20.831 [DEBUG] [Thread-184100] [transport.py] [_log()] client lang: <none>
2026-02-14T10:45:20.831 [DEBUG] [Thread-184100] [transport.py] [_log()] server lang: <none>
2026-02-14T10:45:20.831 [DEBUG] [Thread-184100] [transport.py] [_log()] kex follows: False
2026-02-14T10:45:20.831 [DEBUG] [Thread-184100] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:45:20.831 [DEBUG] [Thread-184100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:45:20.831 [DEBUG] [Thread-184100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:45:20.831 [DEBUG] [Thread-184100] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:45:20.831 [DEBUG] [Thread-184100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:45:20.831 [DEBUG] [Thread-184100] [transport.py] [_log()] Compression: none
2026-02-14T10:45:20.831 [DEBUG] [Thread-184100] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:45:20.848 [DEBUG] [Thread-184100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:45:20.848 [DEBUG] [Thread-184100] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:45:20.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:45:20.850 [DEBUG] [Thread-184100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:45:20.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:45:20.852 [DEBUG] [Thread-184100] [transport.py] [_log()] userauth is OK
2026-02-14T10:45:20.852 [DEBUG] [Thread-184100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:45:20.852 [DEBUG] [Thread-184100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:45:20.852 [DEBUG] [Thread-184100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:45:20.853 [DEBUG] [Thread-184100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:45:20.876 [INFO] [Thread-184100] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:45:20.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:45:21.500 [DEBUG] [Thread-184100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:45:21.501 [DEBUG] [Thread-184100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:45:21.501 [DEBUG] [Thread-184100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:45:21.541 [DEBUG] [Thread-184100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:45:21.542 [DEBUG] [Thread-184100] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:45:21.545 [DEBUG] [Thread-184100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:45:21.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:45:21.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:45:21.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:45:21.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:45:21.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:45:21.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:45:21.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:45:21.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:45:21.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:45:21.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.364349 -999.00  +11.50  28.76     64   +4.90 1 1 1 1 1   888    0 7.15 16.21 ----- 27.7 28.8 185.4 39.7 18.4 -26.1 17.0 -27.4 16.4 -24.8 17.2 -25.1
2026-02-14T10:45:21.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:45:21.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:45:21.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.364349
2026-02-14T10:45:21.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:45:21.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:45:21.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:45:21.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:45:21.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:45:21.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:45:04', tmtdew=8.21, humidity=57.44, cloud=0.0, wind=31.99, temperature=11.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:44:39.754', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:45:21.572 [DEBUG] [Thread-184100] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:45:21.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-14T10:45:21.679 [DEBUG] [Thread-184103] [transport.py] [_log()] starting thread (client mode): 0xa2db5cc0
2026-02-14T10:45:21.679 [DEBUG] [Thread-184103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:45:21.697 [DEBUG] [Thread-184103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:45:21.698 [INFO] [Thread-184103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:45:21.705 [DEBUG] [Thread-184103] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:45:21.706 [DEBUG] [Thread-184103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:45:21.706 [DEBUG] [Thread-184103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:45:21.706 [DEBUG] [Thread-184103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:45:21.706 [DEBUG] [Thread-184103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:45:21.706 [DEBUG] [Thread-184103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:45:21.706 [DEBUG] [Thread-184103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:45:21.706 [DEBUG] [Thread-184103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:45:21.707 [DEBUG] [Thread-184103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:45:21.707 [DEBUG] [Thread-184103] [transport.py] [_log()] client lang: <none>
2026-02-14T10:45:21.707 [DEBUG] [Thread-184103] [transport.py] [_log()] server lang: <none>
2026-02-14T10:45:21.707 [DEBUG] [Thread-184103] [transport.py] [_log()] kex follows: False
2026-02-14T10:45:21.707 [DEBUG] [Thread-184103] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:45:21.707 [DEBUG] [Thread-184103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:45:21.707 [DEBUG] [Thread-184103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:45:21.707 [DEBUG] [Thread-184103] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:45:21.708 [DEBUG] [Thread-184103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:45:21.708 [DEBUG] [Thread-184103] [transport.py] [_log()] Compression: none
2026-02-14T10:45:21.708 [DEBUG] [Thread-184103] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:45:21.767 [DEBUG] [Thread-184103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:45:21.768 [DEBUG] [Thread-184103] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:45:21.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:45:21.769 [DEBUG] [Thread-184103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:45:21.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:45:21.825 [DEBUG] [Thread-184103] [transport.py] [_log()] userauth is OK
2026-02-14T10:45:21.826 [DEBUG] [Thread-184103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:45:21.826 [DEBUG] [Thread-184103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:45:21.826 [DEBUG] [Thread-184103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:45:21.826 [DEBUG] [Thread-184103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:45:21.845 [INFO] [Thread-184103] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:45:21.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-14T10:45:21.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:45:22.651 [DEBUG] [Thread-184103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:45:22.651 [DEBUG] [Thread-184103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:45:22.703 [DEBUG] [Thread-184103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:45:22.703 [DEBUG] [Thread-184103] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:45:22.716 [DEBUG] [Thread-184103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:45:22.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:45:22.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-14T10:45:22.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-14T10:45:22.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:45:22.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:45:22.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:45:22.768 [DEBUG] [Thread-184103] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:45:22.847 [DEBUG] [Thread-184105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:45:37.902 [DEBUG] [Thread-184106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:45:52.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:45:52.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:45:52.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-14T10:45:52.936 [DEBUG] [Thread-184107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:45:54.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 45, 40), 8.88, 54.75, 0.0, 39.48, 12.94, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:45:54.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:45:40
2026-02-14T10:45:55.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:45:55.197 [DEBUG] [Thread-184108] [transport.py] [_log()] starting thread (client mode): 0xa2d3f8e0
2026-02-14T10:45:55.198 [DEBUG] [Thread-184108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:45:55.218 [DEBUG] [Thread-184108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:45:55.218 [INFO] [Thread-184108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:45:55.221 [DEBUG] [Thread-184108] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:45:55.221 [DEBUG] [Thread-184108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:45:55.222 [DEBUG] [Thread-184108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:45:55.222 [DEBUG] [Thread-184108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:45:55.222 [DEBUG] [Thread-184108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:45:55.222 [DEBUG] [Thread-184108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:45:55.222 [DEBUG] [Thread-184108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:45:55.222 [DEBUG] [Thread-184108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:45:55.222 [DEBUG] [Thread-184108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:45:55.222 [DEBUG] [Thread-184108] [transport.py] [_log()] client lang: <none>
2026-02-14T10:45:55.222 [DEBUG] [Thread-184108] [transport.py] [_log()] server lang: <none>
2026-02-14T10:45:55.222 [DEBUG] [Thread-184108] [transport.py] [_log()] kex follows: False
2026-02-14T10:45:55.222 [DEBUG] [Thread-184108] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:45:55.222 [DEBUG] [Thread-184108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:45:55.222 [DEBUG] [Thread-184108] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:45:55.222 [DEBUG] [Thread-184108] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:45:55.222 [DEBUG] [Thread-184108] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:45:55.222 [DEBUG] [Thread-184108] [transport.py] [_log()] Compression: none
2026-02-14T10:45:55.222 [DEBUG] [Thread-184108] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:45:55.240 [DEBUG] [Thread-184108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:45:55.241 [DEBUG] [Thread-184108] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:45:55.241 [DEBUG] [Thread-184108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:45:55.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:45:55.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:45:55.243 [DEBUG] [Thread-184108] [transport.py] [_log()] userauth is OK
2026-02-14T10:45:55.243 [DEBUG] [Thread-184108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:45:55.243 [DEBUG] [Thread-184108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:45:55.243 [DEBUG] [Thread-184108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:45:55.244 [DEBUG] [Thread-184108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:45:55.265 [INFO] [Thread-184108] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:45:55.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:45:55.986 [DEBUG] [Thread-184108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:45:55.986 [DEBUG] [Thread-184108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:45:55.987 [DEBUG] [Thread-184108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:45:56.027 [DEBUG] [Thread-184108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:45:56.028 [DEBUG] [Thread-184108] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:45:56.031 [DEBUG] [Thread-184108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:45:56.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:45:56.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:45:56.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:45:56.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:45:56.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:45:56.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:45:56.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:45:56.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:45:56.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:45:56.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.364696 -999.00  +11.60  28.98     63   +5.00 1 1 1 1 1   888    0 7.04 15.32 ----- 26.5 29.0 191.0 36.5 18.4 -26.8 16.8 -28.7 16.4 -24.3 17.2 -27.0
2026-02-14T10:45:56.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:45:56.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:45:56.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.364696
2026-02-14T10:45:56.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:45:56.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:45:56.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:45:56.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:45:56.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:45:56.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:45:40', tmtdew=8.88, humidity=54.75, cloud=0.0, wind=39.48, temperature=12.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:45:09.734', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:45:56.049 [DEBUG] [Thread-184108] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:45:56.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T10:45:56.134 [DEBUG] [Thread-184111] [transport.py] [_log()] starting thread (client mode): 0xa2d3f940
2026-02-14T10:45:56.134 [DEBUG] [Thread-184111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:45:56.148 [DEBUG] [Thread-184111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:45:56.148 [INFO] [Thread-184111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:45:56.157 [DEBUG] [Thread-184111] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:45:56.157 [DEBUG] [Thread-184111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:45:56.157 [DEBUG] [Thread-184111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:45:56.157 [DEBUG] [Thread-184111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:45:56.157 [DEBUG] [Thread-184111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:45:56.157 [DEBUG] [Thread-184111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:45:56.157 [DEBUG] [Thread-184111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:45:56.157 [DEBUG] [Thread-184111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:45:56.158 [DEBUG] [Thread-184111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:45:56.158 [DEBUG] [Thread-184111] [transport.py] [_log()] client lang: <none>
2026-02-14T10:45:56.158 [DEBUG] [Thread-184111] [transport.py] [_log()] server lang: <none>
2026-02-14T10:45:56.158 [DEBUG] [Thread-184111] [transport.py] [_log()] kex follows: False
2026-02-14T10:45:56.158 [DEBUG] [Thread-184111] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:45:56.158 [DEBUG] [Thread-184111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:45:56.158 [DEBUG] [Thread-184111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:45:56.158 [DEBUG] [Thread-184111] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:45:56.158 [DEBUG] [Thread-184111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:45:56.158 [DEBUG] [Thread-184111] [transport.py] [_log()] Compression: none
2026-02-14T10:45:56.158 [DEBUG] [Thread-184111] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:45:56.213 [DEBUG] [Thread-184111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:45:56.214 [DEBUG] [Thread-184111] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:45:56.214 [DEBUG] [Thread-184111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:45:56.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:45:56.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:45:56.272 [DEBUG] [Thread-184111] [transport.py] [_log()] userauth is OK
2026-02-14T10:45:56.273 [DEBUG] [Thread-184111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:45:56.273 [DEBUG] [Thread-184111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:45:56.273 [DEBUG] [Thread-184111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:45:56.273 [DEBUG] [Thread-184111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:45:56.294 [INFO] [Thread-184111] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:45:56.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-14T10:45:56.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:45:57.110 [DEBUG] [Thread-184111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:45:57.110 [DEBUG] [Thread-184111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:45:57.158 [DEBUG] [Thread-184111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:45:57.158 [DEBUG] [Thread-184111] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:45:57.167 [DEBUG] [Thread-184111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:45:57.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:45:57.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-14T10:45:57.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-14T10:45:57.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:45:57.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:45:57.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:45:57.200 [DEBUG] [Thread-184111] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:46:06.757 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:46:06.759 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:46:07.974 [DEBUG] [Thread-184113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:46:17.425 [DEBUG] [Thread-184114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:46:23.025 [DEBUG] [Thread-184115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:46:27.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:46:27.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:46:27.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-14T10:46:29.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 46, 15), 8.57, 55.81, 0.0, 33.21, 12.4, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:46:29.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:46:15
2026-02-14T10:46:29.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:46:29.547 [DEBUG] [Thread-184116] [transport.py] [_log()] starting thread (client mode): 0xa2d1a800
2026-02-14T10:46:29.547 [DEBUG] [Thread-184116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:46:29.569 [DEBUG] [Thread-184116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:46:29.569 [INFO] [Thread-184116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:46:29.572 [DEBUG] [Thread-184116] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:46:29.572 [DEBUG] [Thread-184116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:46:29.572 [DEBUG] [Thread-184116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:46:29.572 [DEBUG] [Thread-184116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:46:29.572 [DEBUG] [Thread-184116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:46:29.572 [DEBUG] [Thread-184116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:46:29.572 [DEBUG] [Thread-184116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:46:29.572 [DEBUG] [Thread-184116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:46:29.572 [DEBUG] [Thread-184116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:46:29.572 [DEBUG] [Thread-184116] [transport.py] [_log()] client lang: <none>
2026-02-14T10:46:29.572 [DEBUG] [Thread-184116] [transport.py] [_log()] server lang: <none>
2026-02-14T10:46:29.572 [DEBUG] [Thread-184116] [transport.py] [_log()] kex follows: False
2026-02-14T10:46:29.572 [DEBUG] [Thread-184116] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:46:29.572 [DEBUG] [Thread-184116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:46:29.573 [DEBUG] [Thread-184116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:46:29.573 [DEBUG] [Thread-184116] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:46:29.573 [DEBUG] [Thread-184116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:46:29.573 [DEBUG] [Thread-184116] [transport.py] [_log()] Compression: none
2026-02-14T10:46:29.573 [DEBUG] [Thread-184116] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:46:29.591 [DEBUG] [Thread-184116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:46:29.592 [DEBUG] [Thread-184116] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:46:29.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:46:29.593 [DEBUG] [Thread-184116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:46:29.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:46:29.595 [DEBUG] [Thread-184116] [transport.py] [_log()] userauth is OK
2026-02-14T10:46:29.595 [DEBUG] [Thread-184116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:46:29.595 [DEBUG] [Thread-184116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:46:29.595 [DEBUG] [Thread-184116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:46:29.595 [DEBUG] [Thread-184116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:46:29.613 [INFO] [Thread-184116] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:46:29.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:46:30.241 [DEBUG] [Thread-184116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:46:30.241 [DEBUG] [Thread-184116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:46:30.242 [DEBUG] [Thread-184116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:46:30.282 [DEBUG] [Thread-184116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:46:30.283 [DEBUG] [Thread-184116] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:46:30.286 [DEBUG] [Thread-184116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:46:30.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:46:30.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:46:30.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:46:30.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:46:30.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:46:30.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:46:30.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:46:30.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:46:30.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:46:30.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.365043 -999.00  +11.80  22.03     63   +5.10 1 1 1 1 1   888    0 7.12 12.78 ----- 28.2 22.0 192.4 34.2 18.2 -28.2 16.9 -25.2 16.2 -26.4 17.2 -26.9
2026-02-14T10:46:30.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:46:30.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:46:30.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.365043
2026-02-14T10:46:30.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:46:30.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:46:30.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:46:30.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:46:30.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:46:30.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:46:15', tmtdew=8.57, humidity=55.81, cloud=0.0, wind=33.21, temperature=12.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:45:39.715', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:46:30.313 [DEBUG] [Thread-184116] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:46:30.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T10:46:30.409 [DEBUG] [Thread-184119] [transport.py] [_log()] starting thread (client mode): 0xa2d1a680
2026-02-14T10:46:30.409 [DEBUG] [Thread-184119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:46:30.424 [DEBUG] [Thread-184119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:46:30.424 [INFO] [Thread-184119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:46:30.435 [DEBUG] [Thread-184119] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:46:30.435 [DEBUG] [Thread-184119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:46:30.435 [DEBUG] [Thread-184119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:46:30.435 [DEBUG] [Thread-184119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:46:30.435 [DEBUG] [Thread-184119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:46:30.435 [DEBUG] [Thread-184119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:46:30.435 [DEBUG] [Thread-184119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:46:30.436 [DEBUG] [Thread-184119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:46:30.436 [DEBUG] [Thread-184119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:46:30.436 [DEBUG] [Thread-184119] [transport.py] [_log()] client lang: <none>
2026-02-14T10:46:30.436 [DEBUG] [Thread-184119] [transport.py] [_log()] server lang: <none>
2026-02-14T10:46:30.436 [DEBUG] [Thread-184119] [transport.py] [_log()] kex follows: False
2026-02-14T10:46:30.436 [DEBUG] [Thread-184119] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:46:30.436 [DEBUG] [Thread-184119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:46:30.436 [DEBUG] [Thread-184119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:46:30.436 [DEBUG] [Thread-184119] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:46:30.436 [DEBUG] [Thread-184119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:46:30.436 [DEBUG] [Thread-184119] [transport.py] [_log()] Compression: none
2026-02-14T10:46:30.436 [DEBUG] [Thread-184119] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:46:30.495 [DEBUG] [Thread-184119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:46:30.496 [DEBUG] [Thread-184119] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:46:30.496 [DEBUG] [Thread-184119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:46:30.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:46:30.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:46:30.554 [DEBUG] [Thread-184119] [transport.py] [_log()] userauth is OK
2026-02-14T10:46:30.554 [DEBUG] [Thread-184119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:46:30.554 [DEBUG] [Thread-184119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:46:30.554 [DEBUG] [Thread-184119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:46:30.554 [DEBUG] [Thread-184119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:46:30.579 [INFO] [Thread-184119] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:46:30.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-14T10:46:30.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:46:31.412 [DEBUG] [Thread-184119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:46:31.413 [DEBUG] [Thread-184119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:46:31.460 [DEBUG] [Thread-184119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:46:31.461 [DEBUG] [Thread-184119] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:46:31.470 [DEBUG] [Thread-184119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:46:31.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:46:31.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-14T10:46:31.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-14T10:46:31.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:46:31.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:46:31.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:46:31.507 [DEBUG] [Thread-184119] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:46:38.066 [DEBUG] [Thread-184121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:46:53.125 [DEBUG] [Thread-184122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:47:01.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:47:01.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:47:01.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:47:03.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 46, 51), 8.43, 56.7, 0.0, 28.97, 12.33, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:47:03.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:46:51
2026-02-14T10:47:03.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:47:04.004 [DEBUG] [Thread-184123] [transport.py] [_log()] starting thread (client mode): 0xa2d3ef80
2026-02-14T10:47:04.005 [DEBUG] [Thread-184123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:47:04.025 [DEBUG] [Thread-184123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:47:04.025 [INFO] [Thread-184123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:47:04.029 [DEBUG] [Thread-184123] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:47:04.029 [DEBUG] [Thread-184123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:47:04.029 [DEBUG] [Thread-184123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:47:04.029 [DEBUG] [Thread-184123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:47:04.030 [DEBUG] [Thread-184123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:47:04.030 [DEBUG] [Thread-184123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:47:04.030 [DEBUG] [Thread-184123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:47:04.030 [DEBUG] [Thread-184123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:47:04.030 [DEBUG] [Thread-184123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:47:04.030 [DEBUG] [Thread-184123] [transport.py] [_log()] client lang: <none>
2026-02-14T10:47:04.030 [DEBUG] [Thread-184123] [transport.py] [_log()] server lang: <none>
2026-02-14T10:47:04.030 [DEBUG] [Thread-184123] [transport.py] [_log()] kex follows: False
2026-02-14T10:47:04.030 [DEBUG] [Thread-184123] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:47:04.030 [DEBUG] [Thread-184123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:47:04.030 [DEBUG] [Thread-184123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:47:04.030 [DEBUG] [Thread-184123] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:47:04.031 [DEBUG] [Thread-184123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:47:04.031 [DEBUG] [Thread-184123] [transport.py] [_log()] Compression: none
2026-02-14T10:47:04.031 [DEBUG] [Thread-184123] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:47:04.050 [DEBUG] [Thread-184123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:47:04.051 [DEBUG] [Thread-184123] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:47:04.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:47:04.052 [DEBUG] [Thread-184123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:47:04.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:47:04.054 [DEBUG] [Thread-184123] [transport.py] [_log()] userauth is OK
2026-02-14T10:47:04.054 [DEBUG] [Thread-184123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:47:04.055 [DEBUG] [Thread-184123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:47:04.055 [DEBUG] [Thread-184123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:47:04.055 [DEBUG] [Thread-184123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:47:04.076 [INFO] [Thread-184123] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:47:04.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:47:04.712 [DEBUG] [Thread-184123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:47:04.712 [DEBUG] [Thread-184123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:47:04.713 [DEBUG] [Thread-184123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:47:04.754 [DEBUG] [Thread-184123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:47:04.754 [DEBUG] [Thread-184123] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:47:04.757 [DEBUG] [Thread-184123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:47:04.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:47:04.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:47:04.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:47:04.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:47:04.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:47:04.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:47:04.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:47:04.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:47:04.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:47:04.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.365390 -999.00  +11.70  26.70     63   +5.10 1 1 1 1 1   888    0 7.02 11.75 ----- 18.8 26.7 199.2 35.2 18.1 -23.8 16.4 -27.3 16.0 -26.9 17.1 -23.4
2026-02-14T10:47:04.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:47:04.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:47:04.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.365390
2026-02-14T10:47:04.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:47:04.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:47:04.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:47:04.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:47:04.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:47:04.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:46:51', tmtdew=8.43, humidity=56.7, cloud=0.0, wind=28.97, temperature=12.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:46:09.696', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:47:04.786 [DEBUG] [Thread-184123] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:47:04.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T10:47:04.882 [DEBUG] [Thread-184126] [transport.py] [_log()] starting thread (client mode): 0xa5743580
2026-02-14T10:47:04.882 [DEBUG] [Thread-184126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:47:04.900 [DEBUG] [Thread-184126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:47:04.901 [INFO] [Thread-184126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:47:04.908 [DEBUG] [Thread-184126] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:47:04.908 [DEBUG] [Thread-184126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:47:04.908 [DEBUG] [Thread-184126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:47:04.909 [DEBUG] [Thread-184126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:47:04.909 [DEBUG] [Thread-184126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:47:04.909 [DEBUG] [Thread-184126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:47:04.909 [DEBUG] [Thread-184126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:47:04.909 [DEBUG] [Thread-184126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:47:04.909 [DEBUG] [Thread-184126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:47:04.909 [DEBUG] [Thread-184126] [transport.py] [_log()] client lang: <none>
2026-02-14T10:47:04.909 [DEBUG] [Thread-184126] [transport.py] [_log()] server lang: <none>
2026-02-14T10:47:04.909 [DEBUG] [Thread-184126] [transport.py] [_log()] kex follows: False
2026-02-14T10:47:04.909 [DEBUG] [Thread-184126] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:47:04.909 [DEBUG] [Thread-184126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:47:04.909 [DEBUG] [Thread-184126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:47:04.909 [DEBUG] [Thread-184126] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:47:04.909 [DEBUG] [Thread-184126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:47:04.909 [DEBUG] [Thread-184126] [transport.py] [_log()] Compression: none
2026-02-14T10:47:04.909 [DEBUG] [Thread-184126] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:47:04.965 [DEBUG] [Thread-184126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:47:04.966 [DEBUG] [Thread-184126] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:47:04.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:47:04.967 [DEBUG] [Thread-184126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:47:04.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:47:05.021 [DEBUG] [Thread-184126] [transport.py] [_log()] userauth is OK
2026-02-14T10:47:05.021 [DEBUG] [Thread-184126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:47:05.021 [DEBUG] [Thread-184126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:47:05.021 [DEBUG] [Thread-184126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:47:05.022 [DEBUG] [Thread-184126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:47:05.040 [INFO] [Thread-184126] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:47:05.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T10:47:05.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:47:05.908 [DEBUG] [Thread-184126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:47:05.908 [DEBUG] [Thread-184126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:47:05.957 [DEBUG] [Thread-184126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:47:05.957 [DEBUG] [Thread-184126] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:47:05.967 [DEBUG] [Thread-184126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:47:05.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:47:05.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-14T10:47:05.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:47:05.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:47:05.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:47:05.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:47:06.004 [DEBUG] [Thread-184126] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:47:06.914 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:47:06.915 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:47:08.160 [DEBUG] [Thread-184128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:47:17.468 [DEBUG] [Thread-184129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:47:23.207 [DEBUG] [Thread-184130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:47:36.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:47:36.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:47:36.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-14T10:47:38.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 47, 27), 8.48, 56.53, 0.0, 27.65, 12.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:47:38.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:47:27
2026-02-14T10:47:38.240 [DEBUG] [Thread-184131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:47:38.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:47:38.789 [DEBUG] [Thread-184132] [transport.py] [_log()] starting thread (client mode): 0xa5741d80
2026-02-14T10:47:38.790 [DEBUG] [Thread-184132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:47:38.809 [DEBUG] [Thread-184132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:47:38.810 [INFO] [Thread-184132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:47:38.812 [DEBUG] [Thread-184132] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:47:38.812 [DEBUG] [Thread-184132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:47:38.812 [DEBUG] [Thread-184132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:47:38.813 [DEBUG] [Thread-184132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:47:38.813 [DEBUG] [Thread-184132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:47:38.813 [DEBUG] [Thread-184132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:47:38.813 [DEBUG] [Thread-184132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:47:38.813 [DEBUG] [Thread-184132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:47:38.813 [DEBUG] [Thread-184132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:47:38.813 [DEBUG] [Thread-184132] [transport.py] [_log()] client lang: <none>
2026-02-14T10:47:38.813 [DEBUG] [Thread-184132] [transport.py] [_log()] server lang: <none>
2026-02-14T10:47:38.813 [DEBUG] [Thread-184132] [transport.py] [_log()] kex follows: False
2026-02-14T10:47:38.813 [DEBUG] [Thread-184132] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:47:38.813 [DEBUG] [Thread-184132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:47:38.813 [DEBUG] [Thread-184132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:47:38.813 [DEBUG] [Thread-184132] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:47:38.813 [DEBUG] [Thread-184132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:47:38.813 [DEBUG] [Thread-184132] [transport.py] [_log()] Compression: none
2026-02-14T10:47:38.813 [DEBUG] [Thread-184132] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:47:38.832 [DEBUG] [Thread-184132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:47:38.832 [DEBUG] [Thread-184132] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:47:38.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:47:38.833 [DEBUG] [Thread-184132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:47:38.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:47:38.836 [DEBUG] [Thread-184132] [transport.py] [_log()] userauth is OK
2026-02-14T10:47:38.836 [DEBUG] [Thread-184132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:47:38.836 [DEBUG] [Thread-184132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:47:38.836 [DEBUG] [Thread-184132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:47:38.837 [DEBUG] [Thread-184132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:47:38.873 [INFO] [Thread-184132] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:47:38.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:47:39.524 [DEBUG] [Thread-184132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:47:39.524 [DEBUG] [Thread-184132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:47:39.525 [DEBUG] [Thread-184132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:47:39.566 [DEBUG] [Thread-184132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:47:39.566 [DEBUG] [Thread-184132] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:47:39.569 [DEBUG] [Thread-184132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:47:39.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:47:39.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:47:39.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:47:39.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:47:39.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:47:39.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:47:39.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:47:39.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:47:39.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:47:39.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.365738 -999.00  +12.10  28.00     63   +5.30 1 2 1 1 1   888    0 7.01 9.82 ----- 26.5 28.0 182.4 33.6 18.3 -24.9 17.0 -23.9 16.4 -21.9 17.2 -24.9
2026-02-14T10:47:39.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:47:39.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:47:39.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.365738
2026-02-14T10:47:39.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:47:39.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:47:39.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:47:39.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:47:39.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:47:39.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:47:27', tmtdew=8.48, humidity=56.53, cloud=0.0, wind=27.65, temperature=12.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:46:39.763', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:47:39.588 [DEBUG] [Thread-184132] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:47:39.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-14T10:47:39.671 [DEBUG] [Thread-184135] [transport.py] [_log()] starting thread (client mode): 0xa2d18940
2026-02-14T10:47:39.672 [DEBUG] [Thread-184135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:47:39.686 [DEBUG] [Thread-184135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:47:39.686 [INFO] [Thread-184135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:47:39.694 [DEBUG] [Thread-184135] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:47:39.694 [DEBUG] [Thread-184135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:47:39.694 [DEBUG] [Thread-184135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:47:39.694 [DEBUG] [Thread-184135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:47:39.694 [DEBUG] [Thread-184135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:47:39.694 [DEBUG] [Thread-184135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:47:39.694 [DEBUG] [Thread-184135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:47:39.694 [DEBUG] [Thread-184135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:47:39.694 [DEBUG] [Thread-184135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:47:39.694 [DEBUG] [Thread-184135] [transport.py] [_log()] client lang: <none>
2026-02-14T10:47:39.694 [DEBUG] [Thread-184135] [transport.py] [_log()] server lang: <none>
2026-02-14T10:47:39.694 [DEBUG] [Thread-184135] [transport.py] [_log()] kex follows: False
2026-02-14T10:47:39.694 [DEBUG] [Thread-184135] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:47:39.694 [DEBUG] [Thread-184135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:47:39.694 [DEBUG] [Thread-184135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:47:39.694 [DEBUG] [Thread-184135] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:47:39.694 [DEBUG] [Thread-184135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:47:39.695 [DEBUG] [Thread-184135] [transport.py] [_log()] Compression: none
2026-02-14T10:47:39.695 [DEBUG] [Thread-184135] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:47:39.753 [DEBUG] [Thread-184135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:47:39.753 [DEBUG] [Thread-184135] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:47:39.754 [DEBUG] [Thread-184135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:47:39.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:47:39.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:47:39.809 [DEBUG] [Thread-184135] [transport.py] [_log()] userauth is OK
2026-02-14T10:47:39.810 [DEBUG] [Thread-184135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:47:39.810 [DEBUG] [Thread-184135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:47:39.810 [DEBUG] [Thread-184135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:47:39.810 [DEBUG] [Thread-184135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:47:39.829 [INFO] [Thread-184135] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:47:39.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-14T10:47:39.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:47:40.620 [DEBUG] [Thread-184135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:47:40.620 [DEBUG] [Thread-184135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:47:40.669 [DEBUG] [Thread-184135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:47:40.669 [DEBUG] [Thread-184135] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:47:40.681 [DEBUG] [Thread-184135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:47:40.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:47:40.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-14T10:47:40.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-14T10:47:40.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:47:40.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:47:40.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:47:40.731 [DEBUG] [Thread-184135] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:47:53.281 [DEBUG] [Thread-184137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:48:07.059 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:48:07.061 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:48:08.331 [DEBUG] [Thread-184138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:48:10.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:48:10.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:48:10.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-14T10:48:13.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 48, 3), 8.56, 56.2, 0.0, 27.6, 12.3, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:48:13.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:48:03
2026-02-14T10:48:13.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:48:13.555 [DEBUG] [Thread-184139] [transport.py] [_log()] starting thread (client mode): 0xa57c3490
2026-02-14T10:48:13.555 [DEBUG] [Thread-184139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:48:13.574 [DEBUG] [Thread-184139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:48:13.575 [INFO] [Thread-184139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:48:13.576 [DEBUG] [Thread-184139] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:48:13.577 [DEBUG] [Thread-184139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:48:13.577 [DEBUG] [Thread-184139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:48:13.577 [DEBUG] [Thread-184139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:48:13.577 [DEBUG] [Thread-184139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:48:13.577 [DEBUG] [Thread-184139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:48:13.577 [DEBUG] [Thread-184139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:48:13.577 [DEBUG] [Thread-184139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:48:13.577 [DEBUG] [Thread-184139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:48:13.577 [DEBUG] [Thread-184139] [transport.py] [_log()] client lang: <none>
2026-02-14T10:48:13.577 [DEBUG] [Thread-184139] [transport.py] [_log()] server lang: <none>
2026-02-14T10:48:13.577 [DEBUG] [Thread-184139] [transport.py] [_log()] kex follows: False
2026-02-14T10:48:13.577 [DEBUG] [Thread-184139] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:48:13.577 [DEBUG] [Thread-184139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:48:13.577 [DEBUG] [Thread-184139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:48:13.577 [DEBUG] [Thread-184139] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:48:13.577 [DEBUG] [Thread-184139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:48:13.577 [DEBUG] [Thread-184139] [transport.py] [_log()] Compression: none
2026-02-14T10:48:13.577 [DEBUG] [Thread-184139] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:48:13.585 [DEBUG] [Thread-184139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:48:13.585 [DEBUG] [Thread-184139] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:48:13.586 [DEBUG] [Thread-184139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:48:13.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:48:13.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:48:13.587 [DEBUG] [Thread-184139] [transport.py] [_log()] userauth is OK
2026-02-14T10:48:13.587 [DEBUG] [Thread-184139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:48:13.587 [DEBUG] [Thread-184139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:48:13.588 [DEBUG] [Thread-184139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:48:13.588 [DEBUG] [Thread-184139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:48:13.604 [INFO] [Thread-184139] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:48:13.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:48:14.218 [DEBUG] [Thread-184139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:48:14.219 [DEBUG] [Thread-184139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:48:14.219 [DEBUG] [Thread-184139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:48:14.259 [DEBUG] [Thread-184139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:48:14.260 [DEBUG] [Thread-184139] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:48:14.263 [DEBUG] [Thread-184139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:48:14.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:48:14.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:48:14.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:48:14.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:48:14.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:48:14.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:48:14.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:48:14.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:48:14.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:48:14.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.366779 -999.00  +12.30  17.83     61   +5.10 1 1 1 1 1   888    0 6.97 11.13 ----- 16.8 17.8 151.4 28.4 18.7 -24.0 17.4 -23.7 16.5 -24.4 17.6 -22.7
2026-02-14T10:48:14.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:48:14.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:48:14.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.366779
2026-02-14T10:48:14.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:48:14.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:48:14.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:48:14.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:48:14.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:48:14.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:48:03', tmtdew=8.56, humidity=56.2, cloud=0.0, wind=27.6, temperature=12.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:48:09.706', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:48:14.280 [DEBUG] [Thread-184139] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:48:14.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-14T10:48:14.377 [DEBUG] [Thread-184142] [transport.py] [_log()] starting thread (client mode): 0xa2d1b220
2026-02-14T10:48:14.377 [DEBUG] [Thread-184142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:48:14.391 [DEBUG] [Thread-184142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:48:14.391 [INFO] [Thread-184142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:48:14.399 [DEBUG] [Thread-184142] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:48:14.399 [DEBUG] [Thread-184142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:48:14.399 [DEBUG] [Thread-184142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:48:14.399 [DEBUG] [Thread-184142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:48:14.399 [DEBUG] [Thread-184142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:48:14.399 [DEBUG] [Thread-184142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:48:14.399 [DEBUG] [Thread-184142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:48:14.399 [DEBUG] [Thread-184142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:48:14.399 [DEBUG] [Thread-184142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:48:14.399 [DEBUG] [Thread-184142] [transport.py] [_log()] client lang: <none>
2026-02-14T10:48:14.399 [DEBUG] [Thread-184142] [transport.py] [_log()] server lang: <none>
2026-02-14T10:48:14.399 [DEBUG] [Thread-184142] [transport.py] [_log()] kex follows: False
2026-02-14T10:48:14.399 [DEBUG] [Thread-184142] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:48:14.399 [DEBUG] [Thread-184142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:48:14.399 [DEBUG] [Thread-184142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:48:14.400 [DEBUG] [Thread-184142] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:48:14.400 [DEBUG] [Thread-184142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:48:14.400 [DEBUG] [Thread-184142] [transport.py] [_log()] Compression: none
2026-02-14T10:48:14.400 [DEBUG] [Thread-184142] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:48:14.457 [DEBUG] [Thread-184142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:48:14.458 [DEBUG] [Thread-184142] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:48:14.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:48:14.459 [DEBUG] [Thread-184142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:48:14.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:48:14.513 [DEBUG] [Thread-184142] [transport.py] [_log()] userauth is OK
2026-02-14T10:48:14.513 [DEBUG] [Thread-184142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:48:14.514 [DEBUG] [Thread-184142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:48:14.514 [DEBUG] [Thread-184142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:48:14.514 [DEBUG] [Thread-184142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:48:14.533 [INFO] [Thread-184142] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:48:14.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-14T10:48:14.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:48:15.359 [DEBUG] [Thread-184142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:48:15.359 [DEBUG] [Thread-184142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:48:15.407 [DEBUG] [Thread-184142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:48:15.408 [DEBUG] [Thread-184142] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:48:15.417 [DEBUG] [Thread-184142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:48:15.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:48:15.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:48:15.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-14T10:48:15.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:48:15.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:48:15.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:48:15.459 [DEBUG] [Thread-184142] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:48:17.513 [DEBUG] [Thread-184144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:48:23.370 [DEBUG] [Thread-184145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:48:38.424 [DEBUG] [Thread-184146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:48:45.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:48:45.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:48:45.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-14T10:48:47.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 48, 3), 8.56, 56.2, 0.0, 27.6, 12.3, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:48:47.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:48:03
2026-02-14T10:48:48.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:48:48.295 [DEBUG] [Thread-184147] [transport.py] [_log()] starting thread (client mode): 0xa2d3fd90
2026-02-14T10:48:48.296 [DEBUG] [Thread-184147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:48:48.314 [DEBUG] [Thread-184147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:48:48.314 [INFO] [Thread-184147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:48:48.316 [DEBUG] [Thread-184147] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:48:48.316 [DEBUG] [Thread-184147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:48:48.316 [DEBUG] [Thread-184147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:48:48.316 [DEBUG] [Thread-184147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:48:48.316 [DEBUG] [Thread-184147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:48:48.316 [DEBUG] [Thread-184147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:48:48.316 [DEBUG] [Thread-184147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:48:48.316 [DEBUG] [Thread-184147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:48:48.316 [DEBUG] [Thread-184147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:48:48.316 [DEBUG] [Thread-184147] [transport.py] [_log()] client lang: <none>
2026-02-14T10:48:48.316 [DEBUG] [Thread-184147] [transport.py] [_log()] server lang: <none>
2026-02-14T10:48:48.316 [DEBUG] [Thread-184147] [transport.py] [_log()] kex follows: False
2026-02-14T10:48:48.316 [DEBUG] [Thread-184147] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:48:48.316 [DEBUG] [Thread-184147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:48:48.316 [DEBUG] [Thread-184147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:48:48.316 [DEBUG] [Thread-184147] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:48:48.316 [DEBUG] [Thread-184147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:48:48.316 [DEBUG] [Thread-184147] [transport.py] [_log()] Compression: none
2026-02-14T10:48:48.316 [DEBUG] [Thread-184147] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:48:48.331 [DEBUG] [Thread-184147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:48:48.331 [DEBUG] [Thread-184147] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:48:48.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:48:48.332 [DEBUG] [Thread-184147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:48:48.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:48:48.334 [DEBUG] [Thread-184147] [transport.py] [_log()] userauth is OK
2026-02-14T10:48:48.334 [DEBUG] [Thread-184147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:48:48.335 [DEBUG] [Thread-184147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:48:48.335 [DEBUG] [Thread-184147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:48:48.335 [DEBUG] [Thread-184147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:48:48.359 [INFO] [Thread-184147] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:48:48.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:48:48.997 [DEBUG] [Thread-184147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:48:48.997 [DEBUG] [Thread-184147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:48:48.997 [DEBUG] [Thread-184147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:48:49.038 [DEBUG] [Thread-184147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:48:49.039 [DEBUG] [Thread-184147] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:48:49.042 [DEBUG] [Thread-184147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:48:49.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:48:49.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:48:49.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:48:49.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:48:49.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:48:49.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:48:49.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:48:49.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:48:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:48:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.367126 -999.00  +12.50  16.00     60   +5.20 1 2 1 1 1   888    0 7.06 12.41 ----- 16.8 16.0 172.0 26.8 19.0 -23.4 17.7 -23.0 16.8 -21.4 17.8 -22.2
2026-02-14T10:48:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:48:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:48:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.367126
2026-02-14T10:48:49.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:48:49.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:48:49.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:48:49.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:48:49.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:48:49.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:48:03', tmtdew=8.56, humidity=56.2, cloud=0.0, wind=27.6, temperature=12.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:48:39.686', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:48:49.064 [DEBUG] [Thread-184147] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:48:49.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-14T10:48:49.159 [DEBUG] [Thread-184150] [transport.py] [_log()] starting thread (client mode): 0xa2ddfa90
2026-02-14T10:48:49.159 [DEBUG] [Thread-184150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:48:49.175 [DEBUG] [Thread-184150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:48:49.175 [INFO] [Thread-184150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:48:49.183 [DEBUG] [Thread-184150] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:48:49.183 [DEBUG] [Thread-184150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:48:49.183 [DEBUG] [Thread-184150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:48:49.183 [DEBUG] [Thread-184150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:48:49.184 [DEBUG] [Thread-184150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:48:49.184 [DEBUG] [Thread-184150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:48:49.184 [DEBUG] [Thread-184150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:48:49.184 [DEBUG] [Thread-184150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:48:49.184 [DEBUG] [Thread-184150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:48:49.184 [DEBUG] [Thread-184150] [transport.py] [_log()] client lang: <none>
2026-02-14T10:48:49.184 [DEBUG] [Thread-184150] [transport.py] [_log()] server lang: <none>
2026-02-14T10:48:49.184 [DEBUG] [Thread-184150] [transport.py] [_log()] kex follows: False
2026-02-14T10:48:49.184 [DEBUG] [Thread-184150] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:48:49.184 [DEBUG] [Thread-184150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:48:49.184 [DEBUG] [Thread-184150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:48:49.184 [DEBUG] [Thread-184150] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:48:49.184 [DEBUG] [Thread-184150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:48:49.185 [DEBUG] [Thread-184150] [transport.py] [_log()] Compression: none
2026-02-14T10:48:49.185 [DEBUG] [Thread-184150] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:48:49.242 [DEBUG] [Thread-184150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:48:49.242 [DEBUG] [Thread-184150] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:48:49.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:48:49.243 [DEBUG] [Thread-184150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:48:49.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:48:49.300 [DEBUG] [Thread-184150] [transport.py] [_log()] userauth is OK
2026-02-14T10:48:49.301 [DEBUG] [Thread-184150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:48:49.301 [DEBUG] [Thread-184150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:48:49.301 [DEBUG] [Thread-184150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:48:49.302 [DEBUG] [Thread-184150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:48:49.321 [INFO] [Thread-184150] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:48:49.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-14T10:48:49.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:48:50.156 [DEBUG] [Thread-184150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:48:50.157 [DEBUG] [Thread-184150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:48:50.204 [DEBUG] [Thread-184150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:48:50.205 [DEBUG] [Thread-184150] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:48:50.213 [DEBUG] [Thread-184150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:48:50.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:48:50.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-14T10:48:50.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-14T10:48:50.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:48:50.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:48:50.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:48:50.248 [DEBUG] [Thread-184150] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:48:53.462 [DEBUG] [Thread-184152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:49:07.206 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:49:07.207 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:49:08.520 [DEBUG] [Thread-184153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:49:17.545 [DEBUG] [Thread-184154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:49:20.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:49:20.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:49:20.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-14T10:49:22.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 48, 40), 9.71, 51.79, 0.0, 33.03, 13.5, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:49:22.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:48:40
2026-02-14T10:49:23.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:49:23.311 [DEBUG] [Thread-184155] [transport.py] [_log()] starting thread (client mode): 0xa2db4310
2026-02-14T10:49:23.311 [DEBUG] [Thread-184155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:49:23.332 [DEBUG] [Thread-184155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:49:23.332 [INFO] [Thread-184155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:49:23.335 [DEBUG] [Thread-184155] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:49:23.335 [DEBUG] [Thread-184155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:49:23.335 [DEBUG] [Thread-184155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:49:23.335 [DEBUG] [Thread-184155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:49:23.335 [DEBUG] [Thread-184155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:49:23.335 [DEBUG] [Thread-184155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:49:23.335 [DEBUG] [Thread-184155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:49:23.336 [DEBUG] [Thread-184155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:49:23.336 [DEBUG] [Thread-184155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:49:23.336 [DEBUG] [Thread-184155] [transport.py] [_log()] client lang: <none>
2026-02-14T10:49:23.336 [DEBUG] [Thread-184155] [transport.py] [_log()] server lang: <none>
2026-02-14T10:49:23.336 [DEBUG] [Thread-184155] [transport.py] [_log()] kex follows: False
2026-02-14T10:49:23.336 [DEBUG] [Thread-184155] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:49:23.336 [DEBUG] [Thread-184155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:49:23.336 [DEBUG] [Thread-184155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:49:23.336 [DEBUG] [Thread-184155] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:49:23.336 [DEBUG] [Thread-184155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:49:23.336 [DEBUG] [Thread-184155] [transport.py] [_log()] Compression: none
2026-02-14T10:49:23.336 [DEBUG] [Thread-184155] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:49:23.349 [DEBUG] [Thread-184155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:49:23.350 [DEBUG] [Thread-184155] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:49:23.350 [DEBUG] [Thread-184155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:49:23.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:49:23.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:49:23.352 [DEBUG] [Thread-184155] [transport.py] [_log()] userauth is OK
2026-02-14T10:49:23.352 [DEBUG] [Thread-184155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:49:23.353 [DEBUG] [Thread-184155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:49:23.353 [DEBUG] [Thread-184155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:49:23.353 [DEBUG] [Thread-184155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:49:23.376 [INFO] [Thread-184155] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:49:23.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:49:23.560 [DEBUG] [Thread-184157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:49:23.951 [DEBUG] [Thread-184155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:49:23.952 [DEBUG] [Thread-184155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:49:23.952 [DEBUG] [Thread-184155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:49:23.993 [DEBUG] [Thread-184155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:49:23.993 [DEBUG] [Thread-184155] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:49:23.995 [DEBUG] [Thread-184155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:49:24.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:49:24.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:49:24.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:49:24.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:49:24.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:49:24.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:49:24.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:49:24.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:49:24.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:49:24.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.367474 -999.00  +12.60  32.80     59   +5.00 1 1 2 1 1   888    0 7.32 17.06 ----- 28.1 32.8 179.8 41.0 18.9 -26.8 17.6 -26.0 16.9 -23.0 17.7 -25.3
2026-02-14T10:49:24.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:49:24.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:49:24.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.367474
2026-02-14T10:49:24.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:49:24.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:49:24.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:49:24.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:49:24.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:49:24.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:48:40', tmtdew=9.71, humidity=51.79, cloud=0.0, wind=33.03, temperature=13.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:49:09.754', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:49:24.015 [DEBUG] [Thread-184155] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:49:24.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-14T10:49:24.102 [DEBUG] [Thread-184159] [transport.py] [_log()] starting thread (client mode): 0xa2ddf220
2026-02-14T10:49:24.102 [DEBUG] [Thread-184159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:49:24.121 [DEBUG] [Thread-184159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:49:24.121 [INFO] [Thread-184159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:49:24.133 [DEBUG] [Thread-184159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:49:24.133 [DEBUG] [Thread-184159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:49:24.133 [DEBUG] [Thread-184159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:49:24.133 [DEBUG] [Thread-184159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:49:24.133 [DEBUG] [Thread-184159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:49:24.133 [DEBUG] [Thread-184159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:49:24.133 [DEBUG] [Thread-184159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:49:24.133 [DEBUG] [Thread-184159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:49:24.133 [DEBUG] [Thread-184159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:49:24.133 [DEBUG] [Thread-184159] [transport.py] [_log()] client lang: <none>
2026-02-14T10:49:24.133 [DEBUG] [Thread-184159] [transport.py] [_log()] server lang: <none>
2026-02-14T10:49:24.133 [DEBUG] [Thread-184159] [transport.py] [_log()] kex follows: False
2026-02-14T10:49:24.133 [DEBUG] [Thread-184159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:49:24.133 [DEBUG] [Thread-184159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:49:24.133 [DEBUG] [Thread-184159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:49:24.134 [DEBUG] [Thread-184159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:49:24.134 [DEBUG] [Thread-184159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:49:24.134 [DEBUG] [Thread-184159] [transport.py] [_log()] Compression: none
2026-02-14T10:49:24.134 [DEBUG] [Thread-184159] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:49:24.197 [DEBUG] [Thread-184159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:49:24.198 [DEBUG] [Thread-184159] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:49:24.198 [DEBUG] [Thread-184159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:49:24.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:49:24.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:49:24.266 [DEBUG] [Thread-184159] [transport.py] [_log()] userauth is OK
2026-02-14T10:49:24.266 [DEBUG] [Thread-184159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:49:24.266 [DEBUG] [Thread-184159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:49:24.266 [DEBUG] [Thread-184159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:49:24.266 [DEBUG] [Thread-184159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:49:24.300 [INFO] [Thread-184159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:49:24.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-14T10:49:24.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:49:25.111 [DEBUG] [Thread-184159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:49:25.112 [DEBUG] [Thread-184159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:49:25.166 [DEBUG] [Thread-184159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:49:25.166 [DEBUG] [Thread-184159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:49:25.176 [DEBUG] [Thread-184159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:49:25.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:49:25.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-14T10:49:25.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-14T10:49:25.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:49:25.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:49:25.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:49:25.211 [DEBUG] [Thread-184159] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:49:38.593 [DEBUG] [Thread-184161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:49:53.648 [DEBUG] [Thread-184162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:49:55.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:49:55.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:49:55.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-14T10:49:57.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 49, 15), 8.63, 55.69, 0.0, 30.44, 12.33, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:49:57.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:49:15
2026-02-14T10:49:57.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:49:57.907 [DEBUG] [Thread-184163] [transport.py] [_log()] starting thread (client mode): 0xa2d3da20
2026-02-14T10:49:57.907 [DEBUG] [Thread-184163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:49:57.920 [DEBUG] [Thread-184163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:49:57.920 [INFO] [Thread-184163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:49:57.921 [DEBUG] [Thread-184163] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:49:57.922 [DEBUG] [Thread-184163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:49:57.922 [DEBUG] [Thread-184163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:49:57.922 [DEBUG] [Thread-184163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:49:57.922 [DEBUG] [Thread-184163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:49:57.922 [DEBUG] [Thread-184163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:49:57.922 [DEBUG] [Thread-184163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:49:57.922 [DEBUG] [Thread-184163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:49:57.922 [DEBUG] [Thread-184163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:49:57.922 [DEBUG] [Thread-184163] [transport.py] [_log()] client lang: <none>
2026-02-14T10:49:57.922 [DEBUG] [Thread-184163] [transport.py] [_log()] server lang: <none>
2026-02-14T10:49:57.922 [DEBUG] [Thread-184163] [transport.py] [_log()] kex follows: False
2026-02-14T10:49:57.922 [DEBUG] [Thread-184163] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:49:57.922 [DEBUG] [Thread-184163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:49:57.922 [DEBUG] [Thread-184163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:49:57.922 [DEBUG] [Thread-184163] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:49:57.922 [DEBUG] [Thread-184163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:49:57.922 [DEBUG] [Thread-184163] [transport.py] [_log()] Compression: none
2026-02-14T10:49:57.922 [DEBUG] [Thread-184163] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:49:57.930 [DEBUG] [Thread-184163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:49:57.931 [DEBUG] [Thread-184163] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:49:57.931 [DEBUG] [Thread-184163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:49:57.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:49:57.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:49:57.932 [DEBUG] [Thread-184163] [transport.py] [_log()] userauth is OK
2026-02-14T10:49:57.932 [DEBUG] [Thread-184163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:49:57.932 [DEBUG] [Thread-184163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:49:57.932 [DEBUG] [Thread-184163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:49:57.932 [DEBUG] [Thread-184163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:49:57.946 [INFO] [Thread-184163] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:49:57.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:49:58.515 [DEBUG] [Thread-184163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:49:58.515 [DEBUG] [Thread-184163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:49:58.516 [DEBUG] [Thread-184163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:49:58.556 [DEBUG] [Thread-184163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:49:58.557 [DEBUG] [Thread-184163] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:49:58.559 [DEBUG] [Thread-184163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:49:58.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:49:58.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:49:58.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:49:58.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:49:58.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:49:58.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:49:58.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:49:58.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:49:58.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:49:58.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.367821 -999.00  +12.50  21.18     60   +5.00 1 1 1 1 1   888    0 7.32 20.94 ----- 20.6 21.2 181.2 32.0 19.0 -25.0 17.7 -23.4 16.8 -24.0 17.8 -24.4
2026-02-14T10:49:58.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:49:58.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:49:58.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.367821
2026-02-14T10:49:58.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:49:58.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:49:58.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:49:58.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:49:58.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:49:58.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:49:15', tmtdew=8.63, humidity=55.69, cloud=0.0, wind=30.44, temperature=12.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:49:39.734', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:49:58.581 [DEBUG] [Thread-184163] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:49:58.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-14T10:49:58.675 [DEBUG] [Thread-184166] [transport.py] [_log()] starting thread (client mode): 0xa2d110f0
2026-02-14T10:49:58.675 [DEBUG] [Thread-184166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:49:58.689 [DEBUG] [Thread-184166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:49:58.689 [INFO] [Thread-184166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:49:58.697 [DEBUG] [Thread-184166] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:49:58.697 [DEBUG] [Thread-184166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:49:58.697 [DEBUG] [Thread-184166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:49:58.697 [DEBUG] [Thread-184166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:49:58.697 [DEBUG] [Thread-184166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:49:58.697 [DEBUG] [Thread-184166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:49:58.697 [DEBUG] [Thread-184166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:49:58.697 [DEBUG] [Thread-184166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:49:58.697 [DEBUG] [Thread-184166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:49:58.698 [DEBUG] [Thread-184166] [transport.py] [_log()] client lang: <none>
2026-02-14T10:49:58.698 [DEBUG] [Thread-184166] [transport.py] [_log()] server lang: <none>
2026-02-14T10:49:58.698 [DEBUG] [Thread-184166] [transport.py] [_log()] kex follows: False
2026-02-14T10:49:58.698 [DEBUG] [Thread-184166] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:49:58.698 [DEBUG] [Thread-184166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:49:58.698 [DEBUG] [Thread-184166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:49:58.698 [DEBUG] [Thread-184166] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:49:58.698 [DEBUG] [Thread-184166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:49:58.698 [DEBUG] [Thread-184166] [transport.py] [_log()] Compression: none
2026-02-14T10:49:58.698 [DEBUG] [Thread-184166] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:49:58.756 [DEBUG] [Thread-184166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:49:58.756 [DEBUG] [Thread-184166] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:49:58.757 [DEBUG] [Thread-184166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:49:58.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:49:58.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:49:58.812 [DEBUG] [Thread-184166] [transport.py] [_log()] userauth is OK
2026-02-14T10:49:58.812 [DEBUG] [Thread-184166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:49:58.812 [DEBUG] [Thread-184166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:49:58.813 [DEBUG] [Thread-184166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:49:58.813 [DEBUG] [Thread-184166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:49:58.831 [INFO] [Thread-184166] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:49:58.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-14T10:49:58.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:49:59.639 [DEBUG] [Thread-184166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:49:59.639 [DEBUG] [Thread-184166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:49:59.687 [DEBUG] [Thread-184166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:49:59.687 [DEBUG] [Thread-184166] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:49:59.696 [DEBUG] [Thread-184166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:49:59.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:49:59.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:49:59.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-14T10:49:59.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:49:59.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:49:59.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:49:59.732 [DEBUG] [Thread-184166] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:50:07.348 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:50:07.349 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:50:08.684 [DEBUG] [Thread-184168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:50:17.578 [DEBUG] [Thread-184169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:50:23.737 [DEBUG] [Thread-184170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:50:29.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:50:29.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:50:29.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-14T10:50:31.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 49, 51), 9.05, 53.71, 0.0, 34.41, 12.65, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:50:31.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:49:51
2026-02-14T10:50:32.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:50:32.324 [DEBUG] [Thread-184171] [transport.py] [_log()] starting thread (client mode): 0xa2d1bdf0
2026-02-14T10:50:32.325 [DEBUG] [Thread-184171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:50:32.342 [DEBUG] [Thread-184171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:50:32.342 [INFO] [Thread-184171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:50:32.345 [DEBUG] [Thread-184171] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:50:32.345 [DEBUG] [Thread-184171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:50:32.345 [DEBUG] [Thread-184171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:50:32.345 [DEBUG] [Thread-184171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:50:32.345 [DEBUG] [Thread-184171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:50:32.345 [DEBUG] [Thread-184171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:50:32.345 [DEBUG] [Thread-184171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:50:32.345 [DEBUG] [Thread-184171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:50:32.345 [DEBUG] [Thread-184171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:50:32.345 [DEBUG] [Thread-184171] [transport.py] [_log()] client lang: <none>
2026-02-14T10:50:32.345 [DEBUG] [Thread-184171] [transport.py] [_log()] server lang: <none>
2026-02-14T10:50:32.345 [DEBUG] [Thread-184171] [transport.py] [_log()] kex follows: False
2026-02-14T10:50:32.345 [DEBUG] [Thread-184171] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:50:32.345 [DEBUG] [Thread-184171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:50:32.345 [DEBUG] [Thread-184171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:50:32.346 [DEBUG] [Thread-184171] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:50:32.346 [DEBUG] [Thread-184171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:50:32.346 [DEBUG] [Thread-184171] [transport.py] [_log()] Compression: none
2026-02-14T10:50:32.346 [DEBUG] [Thread-184171] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:50:32.355 [DEBUG] [Thread-184171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:50:32.355 [DEBUG] [Thread-184171] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:50:32.356 [DEBUG] [Thread-184171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:50:32.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:50:32.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:50:32.357 [DEBUG] [Thread-184171] [transport.py] [_log()] userauth is OK
2026-02-14T10:50:32.357 [DEBUG] [Thread-184171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:50:32.358 [DEBUG] [Thread-184171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:50:32.358 [DEBUG] [Thread-184171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:50:32.358 [DEBUG] [Thread-184171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:50:32.381 [INFO] [Thread-184171] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:50:32.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:50:33.046 [DEBUG] [Thread-184171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:50:33.046 [DEBUG] [Thread-184171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:50:33.047 [DEBUG] [Thread-184171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:50:33.087 [DEBUG] [Thread-184171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:50:33.087 [DEBUG] [Thread-184171] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:50:33.090 [DEBUG] [Thread-184171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:50:33.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:50:33.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:50:33.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:50:33.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:50:33.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:50:33.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:50:33.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:50:33.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:50:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:50:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.368168 -999.00  +12.50  20.76     60   +5.00 1 1 1 1 1   888    0 7.51 23.63 ----- 21.2 20.8 157.7 35.1 18.9 -25.0 17.1 -29.5 16.7 -26.1 17.8 -24.6
2026-02-14T10:50:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:50:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:50:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.368168
2026-02-14T10:50:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:50:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:50:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:50:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:50:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:50:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:49:51', tmtdew=9.05, humidity=53.71, cloud=0.0, wind=34.41, temperature=12.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:50:09.715', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:50:33.112 [DEBUG] [Thread-184171] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:50:33.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-14T10:50:33.212 [DEBUG] [Thread-184174] [transport.py] [_log()] starting thread (client mode): 0xa5743d00
2026-02-14T10:50:33.212 [DEBUG] [Thread-184174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:50:33.228 [DEBUG] [Thread-184174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:50:33.229 [INFO] [Thread-184174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:50:33.237 [DEBUG] [Thread-184174] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:50:33.238 [DEBUG] [Thread-184174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:50:33.238 [DEBUG] [Thread-184174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:50:33.238 [DEBUG] [Thread-184174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:50:33.238 [DEBUG] [Thread-184174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:50:33.238 [DEBUG] [Thread-184174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:50:33.239 [DEBUG] [Thread-184174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:50:33.239 [DEBUG] [Thread-184174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:50:33.239 [DEBUG] [Thread-184174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:50:33.239 [DEBUG] [Thread-184174] [transport.py] [_log()] client lang: <none>
2026-02-14T10:50:33.239 [DEBUG] [Thread-184174] [transport.py] [_log()] server lang: <none>
2026-02-14T10:50:33.239 [DEBUG] [Thread-184174] [transport.py] [_log()] kex follows: False
2026-02-14T10:50:33.239 [DEBUG] [Thread-184174] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:50:33.239 [DEBUG] [Thread-184174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:50:33.239 [DEBUG] [Thread-184174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:50:33.239 [DEBUG] [Thread-184174] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:50:33.239 [DEBUG] [Thread-184174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:50:33.239 [DEBUG] [Thread-184174] [transport.py] [_log()] Compression: none
2026-02-14T10:50:33.239 [DEBUG] [Thread-184174] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:50:33.296 [DEBUG] [Thread-184174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:50:33.296 [DEBUG] [Thread-184174] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:50:33.297 [DEBUG] [Thread-184174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:50:33.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:50:33.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:50:33.357 [DEBUG] [Thread-184174] [transport.py] [_log()] userauth is OK
2026-02-14T10:50:33.358 [DEBUG] [Thread-184174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:50:33.358 [DEBUG] [Thread-184174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:50:33.358 [DEBUG] [Thread-184174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:50:33.358 [DEBUG] [Thread-184174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:50:33.376 [INFO] [Thread-184174] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:50:33.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-14T10:50:33.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:50:34.154 [DEBUG] [Thread-184174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:50:34.154 [DEBUG] [Thread-184174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:50:34.202 [DEBUG] [Thread-184174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:50:34.203 [DEBUG] [Thread-184174] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:50:34.216 [DEBUG] [Thread-184174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:50:34.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:50:34.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-14T10:50:34.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:50:34.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:50:34.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:50:34.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:50:34.264 [DEBUG] [Thread-184174] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:50:38.777 [DEBUG] [Thread-184176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:50:53.838 [DEBUG] [Thread-184177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:51:04.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:51:04.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:51:04.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-14T10:51:06.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 50, 27), 8.88, 54.31, 0.0, 33.35, 12.57, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:51:06.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:50:27
2026-02-14T10:51:06.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:51:06.568 [DEBUG] [Thread-184178] [transport.py] [_log()] starting thread (client mode): 0xa57413f0
2026-02-14T10:51:06.568 [DEBUG] [Thread-184178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:51:06.595 [DEBUG] [Thread-184178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:51:06.596 [INFO] [Thread-184178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:51:06.597 [DEBUG] [Thread-184178] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:51:06.597 [DEBUG] [Thread-184178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:51:06.597 [DEBUG] [Thread-184178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:51:06.597 [DEBUG] [Thread-184178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:51:06.597 [DEBUG] [Thread-184178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:51:06.597 [DEBUG] [Thread-184178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:51:06.597 [DEBUG] [Thread-184178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:51:06.597 [DEBUG] [Thread-184178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:51:06.597 [DEBUG] [Thread-184178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:51:06.597 [DEBUG] [Thread-184178] [transport.py] [_log()] client lang: <none>
2026-02-14T10:51:06.597 [DEBUG] [Thread-184178] [transport.py] [_log()] server lang: <none>
2026-02-14T10:51:06.597 [DEBUG] [Thread-184178] [transport.py] [_log()] kex follows: False
2026-02-14T10:51:06.597 [DEBUG] [Thread-184178] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:51:06.597 [DEBUG] [Thread-184178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:51:06.597 [DEBUG] [Thread-184178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:51:06.598 [DEBUG] [Thread-184178] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:51:06.598 [DEBUG] [Thread-184178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:51:06.598 [DEBUG] [Thread-184178] [transport.py] [_log()] Compression: none
2026-02-14T10:51:06.598 [DEBUG] [Thread-184178] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:51:06.616 [DEBUG] [Thread-184178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:51:06.616 [DEBUG] [Thread-184178] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:51:06.617 [DEBUG] [Thread-184178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:51:06.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:51:06.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:51:06.619 [DEBUG] [Thread-184178] [transport.py] [_log()] userauth is OK
2026-02-14T10:51:06.619 [DEBUG] [Thread-184178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:51:06.619 [DEBUG] [Thread-184178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:51:06.620 [DEBUG] [Thread-184178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:51:06.620 [DEBUG] [Thread-184178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:51:06.643 [INFO] [Thread-184178] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:51:06.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:51:07.267 [DEBUG] [Thread-184178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:51:07.267 [DEBUG] [Thread-184178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:51:07.268 [DEBUG] [Thread-184178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:51:07.308 [DEBUG] [Thread-184178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:51:07.308 [DEBUG] [Thread-184178] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:51:07.311 [DEBUG] [Thread-184178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:51:07.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:51:07.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:51:07.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:51:07.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:51:07.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:51:07.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:51:07.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:51:07.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:51:07.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:51:07.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.368515 -999.00  +12.50  21.15     60   +5.00 1 2 1 1 1   888    0 7.68 24.23 ----- 22.5 21.1 153.4 31.4 19.1 -25.1 17.8 -22.7 16.8 -22.7 17.9 -25.0
2026-02-14T10:51:07.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:51:07.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:51:07.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.368515
2026-02-14T10:51:07.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:51:07.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:51:07.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:51:07.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:51:07.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:51:07.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:50:27', tmtdew=8.88, humidity=54.31, cloud=0.0, wind=33.35, temperature=12.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:50:39.696', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:51:07.341 [DEBUG] [Thread-184178] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:51:07.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-14T10:51:07.436 [DEBUG] [Thread-184181] [transport.py] [_log()] starting thread (client mode): 0xa5740100
2026-02-14T10:51:07.436 [DEBUG] [Thread-184181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:51:07.451 [DEBUG] [Thread-184181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:51:07.451 [INFO] [Thread-184181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:51:07.458 [DEBUG] [Thread-184181] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:51:07.459 [DEBUG] [Thread-184181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:51:07.459 [DEBUG] [Thread-184181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:51:07.459 [DEBUG] [Thread-184181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:51:07.459 [DEBUG] [Thread-184181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:51:07.459 [DEBUG] [Thread-184181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:51:07.459 [DEBUG] [Thread-184181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:51:07.459 [DEBUG] [Thread-184181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:51:07.459 [DEBUG] [Thread-184181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:51:07.460 [DEBUG] [Thread-184181] [transport.py] [_log()] client lang: <none>
2026-02-14T10:51:07.460 [DEBUG] [Thread-184181] [transport.py] [_log()] server lang: <none>
2026-02-14T10:51:07.460 [DEBUG] [Thread-184181] [transport.py] [_log()] kex follows: False
2026-02-14T10:51:07.460 [DEBUG] [Thread-184181] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:51:07.460 [DEBUG] [Thread-184181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:51:07.460 [DEBUG] [Thread-184181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:51:07.460 [DEBUG] [Thread-184181] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:51:07.460 [DEBUG] [Thread-184181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:51:07.461 [DEBUG] [Thread-184181] [transport.py] [_log()] Compression: none
2026-02-14T10:51:07.461 [DEBUG] [Thread-184181] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:51:07.487 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:51:07.488 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:51:07.520 [DEBUG] [Thread-184181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:51:07.521 [DEBUG] [Thread-184181] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:51:07.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:51:07.522 [DEBUG] [Thread-184181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:51:07.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:51:07.579 [DEBUG] [Thread-184181] [transport.py] [_log()] userauth is OK
2026-02-14T10:51:07.580 [DEBUG] [Thread-184181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:51:07.580 [DEBUG] [Thread-184181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:51:07.580 [DEBUG] [Thread-184181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:51:07.580 [DEBUG] [Thread-184181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:51:07.603 [INFO] [Thread-184181] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:51: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-14T10:51:07.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:51:08.408 [DEBUG] [Thread-184181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:51:08.408 [DEBUG] [Thread-184181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:51:08.456 [DEBUG] [Thread-184181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:51:08.457 [DEBUG] [Thread-184181] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:51:08.466 [DEBUG] [Thread-184181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:51:08.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:51:08.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-14T10:51:08.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-14T10:51:08.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:51:08.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:51:08.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:51:08.503 [DEBUG] [Thread-184181] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:51:08.875 [DEBUG] [Thread-184183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:51:17.623 [DEBUG] [Thread-184184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:51:23.924 [DEBUG] [Thread-184185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:51:38.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:51:38.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:51:38.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-14T10:51:38.956 [DEBUG] [Thread-184186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:51:40.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 51, 2), 8.86, 54.39, 0.0, 31.67, 12.47, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:51:40.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:51:02
2026-02-14T10:51:41.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:51:41.564 [DEBUG] [Thread-184187] [transport.py] [_log()] starting thread (client mode): 0xa2db6200
2026-02-14T10:51:41.564 [DEBUG] [Thread-184187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:51:41.584 [DEBUG] [Thread-184187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:51:41.584 [INFO] [Thread-184187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:51:41.585 [DEBUG] [Thread-184187] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:51:41.585 [DEBUG] [Thread-184187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:51:41.585 [DEBUG] [Thread-184187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:51:41.586 [DEBUG] [Thread-184187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:51:41.586 [DEBUG] [Thread-184187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:51:41.586 [DEBUG] [Thread-184187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:51:41.586 [DEBUG] [Thread-184187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:51:41.586 [DEBUG] [Thread-184187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:51:41.586 [DEBUG] [Thread-184187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:51:41.586 [DEBUG] [Thread-184187] [transport.py] [_log()] client lang: <none>
2026-02-14T10:51:41.586 [DEBUG] [Thread-184187] [transport.py] [_log()] server lang: <none>
2026-02-14T10:51:41.586 [DEBUG] [Thread-184187] [transport.py] [_log()] kex follows: False
2026-02-14T10:51:41.586 [DEBUG] [Thread-184187] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:51:41.586 [DEBUG] [Thread-184187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:51:41.586 [DEBUG] [Thread-184187] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:51:41.586 [DEBUG] [Thread-184187] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:51:41.587 [DEBUG] [Thread-184187] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:51:41.587 [DEBUG] [Thread-184187] [transport.py] [_log()] Compression: none
2026-02-14T10:51:41.587 [DEBUG] [Thread-184187] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:51:41.600 [DEBUG] [Thread-184187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:51:41.601 [DEBUG] [Thread-184187] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:51:41.601 [DEBUG] [Thread-184187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:51:41.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:51:41.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:51:41.603 [DEBUG] [Thread-184187] [transport.py] [_log()] userauth is OK
2026-02-14T10:51:41.604 [DEBUG] [Thread-184187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:51:41.604 [DEBUG] [Thread-184187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:51:41.604 [DEBUG] [Thread-184187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:51:41.604 [DEBUG] [Thread-184187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:51:41.634 [INFO] [Thread-184187] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:51:41.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:51:42.234 [DEBUG] [Thread-184187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:51:42.235 [DEBUG] [Thread-184187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:51:42.235 [DEBUG] [Thread-184187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:51:42.275 [DEBUG] [Thread-184187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:51:42.276 [DEBUG] [Thread-184187] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:51:42.279 [DEBUG] [Thread-184187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:51:42.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:51:42.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:51:42.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:51:42.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:51:42.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:51:42.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:51:42.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:51:42.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:51:42.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:51:42.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.368862 -999.00  +12.20  29.86     61   +5.00 1 1 1 1 1   888    0 7.58 23.03 ----- 31.6 29.9 174.6 32.5 19.0 -25.1 17.8 -22.8 16.8 -24.5 17.9 -24.7
2026-02-14T10:51:42.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:51:42.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:51:42.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.368862
2026-02-14T10:51:42.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:51:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:51:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:51:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:51:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:51:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:51:02', tmtdew=8.86, humidity=54.39, cloud=0.0, wind=31.67, temperature=12.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:51:09.677', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:51:42.306 [DEBUG] [Thread-184187] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:51:42.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-14T10:51:42.401 [DEBUG] [Thread-184190] [transport.py] [_log()] starting thread (client mode): 0xa57b3610
2026-02-14T10:51:42.402 [DEBUG] [Thread-184190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:51:42.416 [DEBUG] [Thread-184190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:51:42.416 [INFO] [Thread-184190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:51:42.424 [DEBUG] [Thread-184190] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:51:42.424 [DEBUG] [Thread-184190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:51:42.424 [DEBUG] [Thread-184190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:51:42.424 [DEBUG] [Thread-184190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:51:42.424 [DEBUG] [Thread-184190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:51:42.424 [DEBUG] [Thread-184190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:51:42.424 [DEBUG] [Thread-184190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:51:42.424 [DEBUG] [Thread-184190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:51:42.424 [DEBUG] [Thread-184190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:51:42.424 [DEBUG] [Thread-184190] [transport.py] [_log()] client lang: <none>
2026-02-14T10:51:42.424 [DEBUG] [Thread-184190] [transport.py] [_log()] server lang: <none>
2026-02-14T10:51:42.424 [DEBUG] [Thread-184190] [transport.py] [_log()] kex follows: False
2026-02-14T10:51:42.424 [DEBUG] [Thread-184190] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:51:42.424 [DEBUG] [Thread-184190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:51:42.425 [DEBUG] [Thread-184190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:51:42.425 [DEBUG] [Thread-184190] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:51:42.425 [DEBUG] [Thread-184190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:51:42.425 [DEBUG] [Thread-184190] [transport.py] [_log()] Compression: none
2026-02-14T10:51:42.425 [DEBUG] [Thread-184190] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:51:42.483 [DEBUG] [Thread-184190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:51:42.484 [DEBUG] [Thread-184190] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:51:42.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:51:42.485 [DEBUG] [Thread-184190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:51:42.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:51:42.544 [DEBUG] [Thread-184190] [transport.py] [_log()] userauth is OK
2026-02-14T10:51:42.544 [DEBUG] [Thread-184190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:51:42.544 [DEBUG] [Thread-184190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:51:42.544 [DEBUG] [Thread-184190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:51:42.545 [DEBUG] [Thread-184190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:51:42.565 [INFO] [Thread-184190] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:51:42.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T10:51:42.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:51:43.364 [DEBUG] [Thread-184190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:51:43.364 [DEBUG] [Thread-184190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:51:43.412 [DEBUG] [Thread-184190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:51:43.413 [DEBUG] [Thread-184190] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:51:43.422 [DEBUG] [Thread-184190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:51:43.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:51:43.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:51:43.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-14T10:51:43.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:51:43.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:51:43.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:51:43.459 [DEBUG] [Thread-184190] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:51:53.992 [DEBUG] [Thread-184192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:52:07.631 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:52:07.633 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:52:09.049 [DEBUG] [Thread-184193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:52:13.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:52:13.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:52:13.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:52:15.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 51, 37), 8.86, 54.68, 0.0, 27.98, 12.4, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:52:15.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:51:37
2026-02-14T10:52:15.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:52:16.059 [DEBUG] [Thread-184194] [transport.py] [_log()] starting thread (client mode): 0xa5740100
2026-02-14T10:52:16.059 [DEBUG] [Thread-184194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:52:16.080 [DEBUG] [Thread-184194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:52:16.080 [INFO] [Thread-184194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:52:16.083 [DEBUG] [Thread-184194] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:52:16.084 [DEBUG] [Thread-184194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:52:16.084 [DEBUG] [Thread-184194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:52:16.084 [DEBUG] [Thread-184194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:52:16.084 [DEBUG] [Thread-184194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:52:16.084 [DEBUG] [Thread-184194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:52:16.084 [DEBUG] [Thread-184194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:52:16.084 [DEBUG] [Thread-184194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:52:16.084 [DEBUG] [Thread-184194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:52:16.084 [DEBUG] [Thread-184194] [transport.py] [_log()] client lang: <none>
2026-02-14T10:52:16.084 [DEBUG] [Thread-184194] [transport.py] [_log()] server lang: <none>
2026-02-14T10:52:16.085 [DEBUG] [Thread-184194] [transport.py] [_log()] kex follows: False
2026-02-14T10:52:16.085 [DEBUG] [Thread-184194] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:52:16.085 [DEBUG] [Thread-184194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:52:16.085 [DEBUG] [Thread-184194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:52:16.085 [DEBUG] [Thread-184194] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:52:16.085 [DEBUG] [Thread-184194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:52:16.085 [DEBUG] [Thread-184194] [transport.py] [_log()] Compression: none
2026-02-14T10:52:16.085 [DEBUG] [Thread-184194] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:52:16.105 [DEBUG] [Thread-184194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:52:16.106 [DEBUG] [Thread-184194] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:52:16.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:52:16.107 [DEBUG] [Thread-184194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:52:16.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:52:16.110 [DEBUG] [Thread-184194] [transport.py] [_log()] userauth is OK
2026-02-14T10:52:16.110 [DEBUG] [Thread-184194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:52:16.110 [DEBUG] [Thread-184194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:52:16.111 [DEBUG] [Thread-184194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:52:16.111 [DEBUG] [Thread-184194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:52:16.131 [INFO] [Thread-184194] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:52:16.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:52:16.781 [DEBUG] [Thread-184194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:52:16.781 [DEBUG] [Thread-184194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:52:16.781 [DEBUG] [Thread-184194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:52:16.823 [DEBUG] [Thread-184194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:52:16.823 [DEBUG] [Thread-184194] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:52:16.827 [DEBUG] [Thread-184194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:52:16.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:52:16.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:52:16.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:52:16.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:52:16.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:52:16.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:52:16.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:52:16.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:52:16.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:52:16.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.369210 -999.00  +12.10  27.35     61   +4.90 1 1 1 1 1   888    0 7.67 22.29 ----- 33.3 27.4 175.4 38.2 18.9 -24.5 17.2 -29.0 16.8 -24.4 17.7 -24.4
2026-02-14T10:52:16.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:52:16.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:52:16.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.369210
2026-02-14T10:52:16.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:52:16.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:52:16.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:52:16.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:52:16.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:52:16.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:51:37', tmtdew=8.86, humidity=54.68, cloud=0.0, wind=27.98, temperature=12.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:51:39.744', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:52:16.856 [DEBUG] [Thread-184194] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:52:16.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-14T10:52:16.951 [DEBUG] [Thread-184197] [transport.py] [_log()] starting thread (client mode): 0xa57c3ca0
2026-02-14T10:52:16.951 [DEBUG] [Thread-184197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:52:16.965 [DEBUG] [Thread-184197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:52:16.966 [INFO] [Thread-184197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:52:16.976 [DEBUG] [Thread-184197] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:52:16.976 [DEBUG] [Thread-184197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:52:16.976 [DEBUG] [Thread-184197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:52:16.976 [DEBUG] [Thread-184197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:52:16.977 [DEBUG] [Thread-184197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:52:16.977 [DEBUG] [Thread-184197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:52:16.977 [DEBUG] [Thread-184197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:52:16.977 [DEBUG] [Thread-184197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:52:16.977 [DEBUG] [Thread-184197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:52:16.977 [DEBUG] [Thread-184197] [transport.py] [_log()] client lang: <none>
2026-02-14T10:52:16.977 [DEBUG] [Thread-184197] [transport.py] [_log()] server lang: <none>
2026-02-14T10:52:16.977 [DEBUG] [Thread-184197] [transport.py] [_log()] kex follows: False
2026-02-14T10:52:16.977 [DEBUG] [Thread-184197] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:52:16.978 [DEBUG] [Thread-184197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:52:16.978 [DEBUG] [Thread-184197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:52:16.978 [DEBUG] [Thread-184197] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:52:16.978 [DEBUG] [Thread-184197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:52:16.978 [DEBUG] [Thread-184197] [transport.py] [_log()] Compression: none
2026-02-14T10:52:16.978 [DEBUG] [Thread-184197] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:52:17.035 [DEBUG] [Thread-184197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:52:17.035 [DEBUG] [Thread-184197] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:52:17.036 [DEBUG] [Thread-184197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:52:17.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:52:17.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:52:17.091 [DEBUG] [Thread-184197] [transport.py] [_log()] userauth is OK
2026-02-14T10:52:17.091 [DEBUG] [Thread-184197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:52:17.091 [DEBUG] [Thread-184197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:52:17.091 [DEBUG] [Thread-184197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:52:17.091 [DEBUG] [Thread-184197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:52:17.109 [INFO] [Thread-184197] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:52:17.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T10:52:17.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:52:17.667 [DEBUG] [Thread-184199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:52:17.923 [DEBUG] [Thread-184197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:52:17.924 [DEBUG] [Thread-184197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:52:17.971 [DEBUG] [Thread-184197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:52:17.971 [DEBUG] [Thread-184197] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:52:17.980 [DEBUG] [Thread-184197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:52:17.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:52: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')
2026-02-14T10:52:17.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:52:18.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:52:18.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:52:18.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:52:18.016 [DEBUG] [Thread-184197] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:52:24.086 [DEBUG] [Thread-184200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:52:39.145 [DEBUG] [Thread-184201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:52:48.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:52:48.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:52:48.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-14T10:52:49.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 52, 14), 8.49, 56.08, 0.0, 30.49, 11.93, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:52:49.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:52:14
2026-02-14T10:52:50.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:52:50.464 [DEBUG] [Thread-184202] [transport.py] [_log()] starting thread (client mode): 0xa5759120
2026-02-14T10:52:50.464 [DEBUG] [Thread-184202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:52:50.484 [DEBUG] [Thread-184202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:52:50.485 [INFO] [Thread-184202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:52:50.487 [DEBUG] [Thread-184202] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:52:50.488 [DEBUG] [Thread-184202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:52:50.488 [DEBUG] [Thread-184202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:52:50.488 [DEBUG] [Thread-184202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:52:50.488 [DEBUG] [Thread-184202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:52:50.488 [DEBUG] [Thread-184202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:52:50.488 [DEBUG] [Thread-184202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:52:50.488 [DEBUG] [Thread-184202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:52:50.488 [DEBUG] [Thread-184202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:52:50.488 [DEBUG] [Thread-184202] [transport.py] [_log()] client lang: <none>
2026-02-14T10:52:50.488 [DEBUG] [Thread-184202] [transport.py] [_log()] server lang: <none>
2026-02-14T10:52:50.488 [DEBUG] [Thread-184202] [transport.py] [_log()] kex follows: False
2026-02-14T10:52:50.488 [DEBUG] [Thread-184202] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:52:50.488 [DEBUG] [Thread-184202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:52:50.489 [DEBUG] [Thread-184202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:52:50.489 [DEBUG] [Thread-184202] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:52:50.489 [DEBUG] [Thread-184202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:52:50.489 [DEBUG] [Thread-184202] [transport.py] [_log()] Compression: none
2026-02-14T10:52:50.489 [DEBUG] [Thread-184202] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:52:50.506 [DEBUG] [Thread-184202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:52:50.506 [DEBUG] [Thread-184202] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:52:50.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:52:50.507 [DEBUG] [Thread-184202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:52:50.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:52:50.509 [DEBUG] [Thread-184202] [transport.py] [_log()] userauth is OK
2026-02-14T10:52:50.509 [DEBUG] [Thread-184202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:52:50.509 [DEBUG] [Thread-184202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:52:50.510 [DEBUG] [Thread-184202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:52:50.510 [DEBUG] [Thread-184202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:52:50.535 [INFO] [Thread-184202] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:52:50.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:52:51.150 [DEBUG] [Thread-184202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:52:51.150 [DEBUG] [Thread-184202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:52:51.151 [DEBUG] [Thread-184202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:52:51.191 [DEBUG] [Thread-184202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:52:51.191 [DEBUG] [Thread-184202] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:52:51.193 [DEBUG] [Thread-184202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:52:51.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:52:51.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:52:51.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:52:51.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:52:51.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:52:51.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:52:51.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:52:51.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:52:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:52:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.369904 -999.00  +11.90  20.31     62   +5.10 1 1 1 1 1   888    0 7.41 16.93 ----- 20.2 20.3 152.8 32.5 19.0 -23.3 17.6 -27.3 16.8 -23.1 17.9 -22.6
2026-02-14T10:52:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:52:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:52:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.369904
2026-02-14T10:52:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:52:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:52:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:52:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:52:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:52:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:52:14', tmtdew=8.49, humidity=56.08, cloud=0.0, wind=30.49, temperature=11.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:52:39.706', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:52:51.215 [DEBUG] [Thread-184202] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:52: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-14T10:52:51.309 [DEBUG] [Thread-184205] [transport.py] [_log()] starting thread (client mode): 0xa2d3cdf0
2026-02-14T10:52:51.309 [DEBUG] [Thread-184205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:52:51.324 [DEBUG] [Thread-184205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:52:51.324 [INFO] [Thread-184205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:52:51.333 [DEBUG] [Thread-184205] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:52:51.333 [DEBUG] [Thread-184205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:52:51.333 [DEBUG] [Thread-184205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:52:51.333 [DEBUG] [Thread-184205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:52:51.333 [DEBUG] [Thread-184205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:52:51.333 [DEBUG] [Thread-184205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:52:51.333 [DEBUG] [Thread-184205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:52:51.333 [DEBUG] [Thread-184205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:52:51.334 [DEBUG] [Thread-184205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:52:51.334 [DEBUG] [Thread-184205] [transport.py] [_log()] client lang: <none>
2026-02-14T10:52:51.334 [DEBUG] [Thread-184205] [transport.py] [_log()] server lang: <none>
2026-02-14T10:52:51.334 [DEBUG] [Thread-184205] [transport.py] [_log()] kex follows: False
2026-02-14T10:52:51.334 [DEBUG] [Thread-184205] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:52:51.334 [DEBUG] [Thread-184205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:52:51.334 [DEBUG] [Thread-184205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:52:51.334 [DEBUG] [Thread-184205] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:52:51.334 [DEBUG] [Thread-184205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:52:51.334 [DEBUG] [Thread-184205] [transport.py] [_log()] Compression: none
2026-02-14T10:52:51.334 [DEBUG] [Thread-184205] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:52:51.390 [DEBUG] [Thread-184205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:52:51.391 [DEBUG] [Thread-184205] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:52:51.391 [DEBUG] [Thread-184205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:52:51.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:52:51.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:52:51.448 [DEBUG] [Thread-184205] [transport.py] [_log()] userauth is OK
2026-02-14T10:52:51.448 [DEBUG] [Thread-184205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:52:51.449 [DEBUG] [Thread-184205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:52:51.449 [DEBUG] [Thread-184205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:52:51.449 [DEBUG] [Thread-184205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:52:51.467 [INFO] [Thread-184205] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:52:51.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-14T10:52:51.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:52:52.289 [DEBUG] [Thread-184205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:52:52.290 [DEBUG] [Thread-184205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:52:52.337 [DEBUG] [Thread-184205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:52:52.338 [DEBUG] [Thread-184205] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:52:52.347 [DEBUG] [Thread-184205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:52:52.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:52:52.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:52:52.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:52:52.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:52:52.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:52:52.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:52:52.385 [DEBUG] [Thread-184205] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:52:54.179 [DEBUG] [Thread-184207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:53:07.774 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:53:07.776 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:53:09.232 [DEBUG] [Thread-184208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:53:17.704 [DEBUG] [Thread-184209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:53:22.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:53:22.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:53:22.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-14T10:53:24.270 [DEBUG] [Thread-184210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:53:24.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 52, 49), 8.44, 56.25, 0.0, 27.05, 12.17, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:53:24.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:52:49
2026-02-14T10:53:24.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:53:25.136 [DEBUG] [Thread-184211] [transport.py] [_log()] starting thread (client mode): 0xa57c2740
2026-02-14T10:53:25.136 [DEBUG] [Thread-184211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:53:25.157 [DEBUG] [Thread-184211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:53:25.157 [INFO] [Thread-184211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:53:25.161 [DEBUG] [Thread-184211] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:53:25.161 [DEBUG] [Thread-184211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:53:25.161 [DEBUG] [Thread-184211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:53:25.161 [DEBUG] [Thread-184211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:53:25.161 [DEBUG] [Thread-184211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:53:25.161 [DEBUG] [Thread-184211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:53:25.161 [DEBUG] [Thread-184211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:53:25.161 [DEBUG] [Thread-184211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:53:25.161 [DEBUG] [Thread-184211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:53:25.161 [DEBUG] [Thread-184211] [transport.py] [_log()] client lang: <none>
2026-02-14T10:53:25.161 [DEBUG] [Thread-184211] [transport.py] [_log()] server lang: <none>
2026-02-14T10:53:25.161 [DEBUG] [Thread-184211] [transport.py] [_log()] kex follows: False
2026-02-14T10:53:25.161 [DEBUG] [Thread-184211] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:53:25.161 [DEBUG] [Thread-184211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:53:25.161 [DEBUG] [Thread-184211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:53:25.161 [DEBUG] [Thread-184211] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:53:25.161 [DEBUG] [Thread-184211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:53:25.161 [DEBUG] [Thread-184211] [transport.py] [_log()] Compression: none
2026-02-14T10:53:25.161 [DEBUG] [Thread-184211] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:53:25.179 [DEBUG] [Thread-184211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:53:25.180 [DEBUG] [Thread-184211] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:53:25.180 [DEBUG] [Thread-184211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:53:25.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:53:25.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:53:25.182 [DEBUG] [Thread-184211] [transport.py] [_log()] userauth is OK
2026-02-14T10:53:25.183 [DEBUG] [Thread-184211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:53:25.183 [DEBUG] [Thread-184211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:53:25.183 [DEBUG] [Thread-184211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:53:25.183 [DEBUG] [Thread-184211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:53:25.206 [INFO] [Thread-184211] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:53:25.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:53:25.847 [DEBUG] [Thread-184211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:53:25.847 [DEBUG] [Thread-184211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:53:25.848 [DEBUG] [Thread-184211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:53:25.889 [DEBUG] [Thread-184211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:53:25.889 [DEBUG] [Thread-184211] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:53:25.892 [DEBUG] [Thread-184211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:53:25.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:53:25.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:53:25.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:53:25.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:53:25.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:53:25.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:53:25.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:53:25.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:53:25.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:53:25.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.370251 -999.00  +12.50  25.48     60   +5.10 1 1 1 1 1   888    0 7.40 15.79 ----- 25.1 25.5 170.8 36.3 19.2 -24.9 17.8 -24.5 16.9 -21.8 17.9 -24.0
2026-02-14T10:53:25.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:53:25.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:53:25.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.370251
2026-02-14T10:53:25.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:53:25.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:53:25.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:53:25.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:53:25.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:53:25.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:52:49', tmtdew=8.44, humidity=56.25, cloud=0.0, wind=27.05, temperature=12.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:53:09.686', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:53:25.921 [DEBUG] [Thread-184211] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:53:25.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-14T10:53:26.006 [DEBUG] [Thread-184214] [transport.py] [_log()] starting thread (client mode): 0xa57590c0
2026-02-14T10:53:26.006 [DEBUG] [Thread-184214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:53:26.021 [DEBUG] [Thread-184214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:53:26.021 [INFO] [Thread-184214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:53:26.029 [DEBUG] [Thread-184214] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:53:26.029 [DEBUG] [Thread-184214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:53:26.029 [DEBUG] [Thread-184214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:53:26.029 [DEBUG] [Thread-184214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:53:26.029 [DEBUG] [Thread-184214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:53:26.029 [DEBUG] [Thread-184214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:53:26.029 [DEBUG] [Thread-184214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:53:26.029 [DEBUG] [Thread-184214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:53:26.029 [DEBUG] [Thread-184214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:53:26.029 [DEBUG] [Thread-184214] [transport.py] [_log()] client lang: <none>
2026-02-14T10:53:26.030 [DEBUG] [Thread-184214] [transport.py] [_log()] server lang: <none>
2026-02-14T10:53:26.030 [DEBUG] [Thread-184214] [transport.py] [_log()] kex follows: False
2026-02-14T10:53:26.030 [DEBUG] [Thread-184214] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:53:26.030 [DEBUG] [Thread-184214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:53:26.030 [DEBUG] [Thread-184214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:53:26.030 [DEBUG] [Thread-184214] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:53:26.030 [DEBUG] [Thread-184214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:53:26.030 [DEBUG] [Thread-184214] [transport.py] [_log()] Compression: none
2026-02-14T10:53:26.030 [DEBUG] [Thread-184214] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:53:26.089 [DEBUG] [Thread-184214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:53:26.090 [DEBUG] [Thread-184214] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:53:26.091 [DEBUG] [Thread-184214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:53:26.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:53:26.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:53:26.146 [DEBUG] [Thread-184214] [transport.py] [_log()] userauth is OK
2026-02-14T10:53:26.146 [DEBUG] [Thread-184214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:53:26.146 [DEBUG] [Thread-184214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:53:26.146 [DEBUG] [Thread-184214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:53:26.146 [DEBUG] [Thread-184214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:53:26.168 [INFO] [Thread-184214] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:53:26.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-14T10:53:26.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:53:26.981 [DEBUG] [Thread-184214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:53:26.981 [DEBUG] [Thread-184214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:53:27.029 [DEBUG] [Thread-184214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:53:27.030 [DEBUG] [Thread-184214] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:53:27.042 [DEBUG] [Thread-184214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:53:27.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:53:27.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:53:27.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:53:27.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:53:27.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:53:27.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:53:27.079 [DEBUG] [Thread-184214] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:53:39.307 [DEBUG] [Thread-184216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:53:54.364 [DEBUG] [Thread-184217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:53:57.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:53:57.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:53:57.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:53:59.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 53, 24), 8.54, 55.9, 0.0, 30.91, 12.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:53:59.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:53:24
2026-02-14T10:53:59.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:53:59.537 [DEBUG] [Thread-184218] [transport.py] [_log()] starting thread (client mode): 0xa575add0
2026-02-14T10:53:59.537 [DEBUG] [Thread-184218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:53:59.557 [DEBUG] [Thread-184218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:53:59.557 [INFO] [Thread-184218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:53:59.560 [DEBUG] [Thread-184218] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:53:59.560 [DEBUG] [Thread-184218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:53:59.560 [DEBUG] [Thread-184218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:53:59.561 [DEBUG] [Thread-184218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:53:59.561 [DEBUG] [Thread-184218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:53:59.561 [DEBUG] [Thread-184218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:53:59.561 [DEBUG] [Thread-184218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:53:59.561 [DEBUG] [Thread-184218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:53:59.561 [DEBUG] [Thread-184218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:53:59.561 [DEBUG] [Thread-184218] [transport.py] [_log()] client lang: <none>
2026-02-14T10:53:59.561 [DEBUG] [Thread-184218] [transport.py] [_log()] server lang: <none>
2026-02-14T10:53:59.561 [DEBUG] [Thread-184218] [transport.py] [_log()] kex follows: False
2026-02-14T10:53:59.561 [DEBUG] [Thread-184218] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:53:59.561 [DEBUG] [Thread-184218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:53:59.561 [DEBUG] [Thread-184218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:53:59.561 [DEBUG] [Thread-184218] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:53:59.561 [DEBUG] [Thread-184218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:53:59.562 [DEBUG] [Thread-184218] [transport.py] [_log()] Compression: none
2026-02-14T10:53:59.562 [DEBUG] [Thread-184218] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:53:59.581 [DEBUG] [Thread-184218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:53:59.581 [DEBUG] [Thread-184218] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:53:59.582 [DEBUG] [Thread-184218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:53:59.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:53:59.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:53:59.584 [DEBUG] [Thread-184218] [transport.py] [_log()] userauth is OK
2026-02-14T10:53:59.584 [DEBUG] [Thread-184218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:53:59.584 [DEBUG] [Thread-184218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:53:59.584 [DEBUG] [Thread-184218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:53:59.585 [DEBUG] [Thread-184218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:53:59.608 [INFO] [Thread-184218] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:53:59.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:54:00.228 [DEBUG] [Thread-184218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:54:00.228 [DEBUG] [Thread-184218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:54:00.237 [DEBUG] [Thread-184218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:54:00.270 [DEBUG] [Thread-184218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:54:00.270 [DEBUG] [Thread-184218] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:54:00.273 [DEBUG] [Thread-184218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:54:00.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:54:00.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:54:00.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:54:00.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:54:00.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:54:00.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:54:00.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:54:00.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:54:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:54:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.370598 -999.00  +12.70  20.38     60   +5.10 1 1 1 1 1   888    0 7.39 15.49 ----- 24.5 20.4 171.8 34.9 19.1 -26.0 17.6 -28.6 16.9 -22.5 17.9 -25.7
2026-02-14T10:54:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:54:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:54:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.370598
2026-02-14T10:54:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:54:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:54:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:54:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:54:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:54:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:53:24', tmtdew=8.54, humidity=55.9, cloud=0.0, wind=30.91, temperature=12.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:53:39.667', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:54:00.293 [DEBUG] [Thread-184218] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:54:00.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-14T10:54:00.382 [DEBUG] [Thread-184221] [transport.py] [_log()] starting thread (client mode): 0xa5759c30
2026-02-14T10:54:00.382 [DEBUG] [Thread-184221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:54:00.396 [DEBUG] [Thread-184221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:54:00.396 [INFO] [Thread-184221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:54:00.404 [DEBUG] [Thread-184221] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:54:00.405 [DEBUG] [Thread-184221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:54:00.405 [DEBUG] [Thread-184221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:54:00.405 [DEBUG] [Thread-184221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:54:00.405 [DEBUG] [Thread-184221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:54:00.405 [DEBUG] [Thread-184221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:54:00.405 [DEBUG] [Thread-184221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:54:00.405 [DEBUG] [Thread-184221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:54:00.405 [DEBUG] [Thread-184221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:54:00.405 [DEBUG] [Thread-184221] [transport.py] [_log()] client lang: <none>
2026-02-14T10:54:00.405 [DEBUG] [Thread-184221] [transport.py] [_log()] server lang: <none>
2026-02-14T10:54:00.405 [DEBUG] [Thread-184221] [transport.py] [_log()] kex follows: False
2026-02-14T10:54:00.405 [DEBUG] [Thread-184221] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:54:00.405 [DEBUG] [Thread-184221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:54:00.405 [DEBUG] [Thread-184221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:54:00.405 [DEBUG] [Thread-184221] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:54:00.405 [DEBUG] [Thread-184221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:54:00.406 [DEBUG] [Thread-184221] [transport.py] [_log()] Compression: none
2026-02-14T10:54:00.406 [DEBUG] [Thread-184221] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:54:00.465 [DEBUG] [Thread-184221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:54:00.466 [DEBUG] [Thread-184221] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:54:00.467 [DEBUG] [Thread-184221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:54:00.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:54:00.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:54:00.520 [DEBUG] [Thread-184221] [transport.py] [_log()] userauth is OK
2026-02-14T10:54:00.521 [DEBUG] [Thread-184221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:54:00.521 [DEBUG] [Thread-184221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:54:00.521 [DEBUG] [Thread-184221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:54:00.521 [DEBUG] [Thread-184221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:54:00.544 [INFO] [Thread-184221] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:54:00.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-14T10:54:00.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:54:01.370 [DEBUG] [Thread-184221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:54:01.371 [DEBUG] [Thread-184221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:54:01.418 [DEBUG] [Thread-184221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:54:01.419 [DEBUG] [Thread-184221] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:54:01.427 [DEBUG] [Thread-184221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:54:01.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:54:01.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-14T10:54:01.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-14T10:54:01.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:54:01.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:54:01.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:54:01.465 [DEBUG] [Thread-184221] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:54:07.917 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:54:07.919 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:54:09.403 [DEBUG] [Thread-184223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:54:17.762 [DEBUG] [Thread-184224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:54:24.447 [DEBUG] [Thread-184225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:54:31.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:54:31.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:54:31.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-14T10:54:33.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 53, 24), 8.54, 55.9, 0.0, 30.91, 12.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:54:33.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:53:24
2026-02-14T10:54:33.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:54:33.790 [DEBUG] [Thread-184226] [transport.py] [_log()] starting thread (client mode): 0xa2dde5f0
2026-02-14T10:54:33.790 [DEBUG] [Thread-184226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:54:33.810 [DEBUG] [Thread-184226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:54:33.811 [INFO] [Thread-184226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:54:33.814 [DEBUG] [Thread-184226] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:54:33.814 [DEBUG] [Thread-184226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:54:33.814 [DEBUG] [Thread-184226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:54:33.814 [DEBUG] [Thread-184226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:54:33.815 [DEBUG] [Thread-184226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:54:33.815 [DEBUG] [Thread-184226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:54:33.815 [DEBUG] [Thread-184226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:54:33.815 [DEBUG] [Thread-184226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:54:33.815 [DEBUG] [Thread-184226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:54:33.815 [DEBUG] [Thread-184226] [transport.py] [_log()] client lang: <none>
2026-02-14T10:54:33.815 [DEBUG] [Thread-184226] [transport.py] [_log()] server lang: <none>
2026-02-14T10:54:33.815 [DEBUG] [Thread-184226] [transport.py] [_log()] kex follows: False
2026-02-14T10:54:33.815 [DEBUG] [Thread-184226] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:54:33.815 [DEBUG] [Thread-184226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:54:33.816 [DEBUG] [Thread-184226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:54:33.816 [DEBUG] [Thread-184226] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:54:33.816 [DEBUG] [Thread-184226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:54:33.816 [DEBUG] [Thread-184226] [transport.py] [_log()] Compression: none
2026-02-14T10:54:33.816 [DEBUG] [Thread-184226] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:54:33.835 [DEBUG] [Thread-184226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:54:33.835 [DEBUG] [Thread-184226] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:54:33.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:54:33.836 [DEBUG] [Thread-184226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:54:33.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:54:33.839 [DEBUG] [Thread-184226] [transport.py] [_log()] userauth is OK
2026-02-14T10:54:33.839 [DEBUG] [Thread-184226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:54:33.840 [DEBUG] [Thread-184226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:54:33.840 [DEBUG] [Thread-184226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:54:33.840 [DEBUG] [Thread-184226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:54:33.863 [INFO] [Thread-184226] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:54:33.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:54:34.487 [DEBUG] [Thread-184226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:54:34.487 [DEBUG] [Thread-184226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:54:34.487 [DEBUG] [Thread-184226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:54:34.528 [DEBUG] [Thread-184226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:54:34.529 [DEBUG] [Thread-184226] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:54:34.532 [DEBUG] [Thread-184226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:54:34.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:54:34.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:54:34.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:54:34.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:54:34.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:54:34.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:54:34.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:54:34.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:54:34.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:54:34.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.370946 -999.00  +13.00  23.26     59   +5.20 1 2 1 1 1   888    0 7.53 18.34 ----- 25.8 23.3 176.4 29.8 19.3 -23.6 17.8 -22.8 16.9 -23.0 18.1 -22.4
2026-02-14T10:54:34.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:54:34.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:54:34.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.370946
2026-02-14T10:54:34.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:54:34.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:54:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:54:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:54:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:54:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:53:24', tmtdew=8.54, humidity=55.9, cloud=0.0, wind=30.91, temperature=12.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:54:09.734', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:54:34.558 [DEBUG] [Thread-184226] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:54:34.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-14T10:54:34.656 [DEBUG] [Thread-184229] [transport.py] [_log()] starting thread (client mode): 0xa2dde500
2026-02-14T10:54:34.657 [DEBUG] [Thread-184229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:54:34.675 [DEBUG] [Thread-184229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:54:34.675 [INFO] [Thread-184229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:54:34.686 [DEBUG] [Thread-184229] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:54:34.686 [DEBUG] [Thread-184229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:54:34.687 [DEBUG] [Thread-184229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:54:34.687 [DEBUG] [Thread-184229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:54:34.687 [DEBUG] [Thread-184229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:54:34.687 [DEBUG] [Thread-184229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:54:34.687 [DEBUG] [Thread-184229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:54:34.688 [DEBUG] [Thread-184229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:54:34.688 [DEBUG] [Thread-184229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:54:34.688 [DEBUG] [Thread-184229] [transport.py] [_log()] client lang: <none>
2026-02-14T10:54:34.688 [DEBUG] [Thread-184229] [transport.py] [_log()] server lang: <none>
2026-02-14T10:54:34.688 [DEBUG] [Thread-184229] [transport.py] [_log()] kex follows: False
2026-02-14T10:54:34.688 [DEBUG] [Thread-184229] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:54:34.688 [DEBUG] [Thread-184229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:54:34.688 [DEBUG] [Thread-184229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:54:34.688 [DEBUG] [Thread-184229] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:54:34.688 [DEBUG] [Thread-184229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:54:34.688 [DEBUG] [Thread-184229] [transport.py] [_log()] Compression: none
2026-02-14T10:54:34.688 [DEBUG] [Thread-184229] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:54:34.747 [DEBUG] [Thread-184229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:54:34.748 [DEBUG] [Thread-184229] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:54:34.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:54:34.749 [DEBUG] [Thread-184229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:54:34.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:54:34.813 [DEBUG] [Thread-184229] [transport.py] [_log()] userauth is OK
2026-02-14T10:54:34.813 [DEBUG] [Thread-184229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:54:34.813 [DEBUG] [Thread-184229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:54:34.813 [DEBUG] [Thread-184229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:54:34.813 [DEBUG] [Thread-184229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:54:34.838 [INFO] [Thread-184229] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:54:34.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-14T10:54:34.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:54:35.669 [DEBUG] [Thread-184229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:54:35.669 [DEBUG] [Thread-184229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:54:35.718 [DEBUG] [Thread-184229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:54:35.718 [DEBUG] [Thread-184229] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:54:35.728 [DEBUG] [Thread-184229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:54:35.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:54:35.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-14T10:54:35.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-14T10:54:35.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:54:35.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:54:35.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:54:35.766 [DEBUG] [Thread-184229] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:54:39.485 [DEBUG] [Thread-184231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:54:54.534 [DEBUG] [Thread-184232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:55:05.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:55:05.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:55:05.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:55:07.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 54, 35), 9.47, 52.72, 0.0, 27.1, 13.66, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:55:07.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:54:35
2026-02-14T10:55:08.062 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:55:08.063 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:55:08.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:55:08.369 [DEBUG] [Thread-184233] [transport.py] [_log()] starting thread (client mode): 0xa57c1e10
2026-02-14T10:55:08.369 [DEBUG] [Thread-184233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:55:08.389 [DEBUG] [Thread-184233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:55:08.389 [INFO] [Thread-184233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:55:08.393 [DEBUG] [Thread-184233] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:55:08.393 [DEBUG] [Thread-184233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:55:08.393 [DEBUG] [Thread-184233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:55:08.393 [DEBUG] [Thread-184233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:55:08.393 [DEBUG] [Thread-184233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:55:08.393 [DEBUG] [Thread-184233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:55:08.393 [DEBUG] [Thread-184233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:55:08.393 [DEBUG] [Thread-184233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:55:08.393 [DEBUG] [Thread-184233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:55:08.393 [DEBUG] [Thread-184233] [transport.py] [_log()] client lang: <none>
2026-02-14T10:55:08.393 [DEBUG] [Thread-184233] [transport.py] [_log()] server lang: <none>
2026-02-14T10:55:08.393 [DEBUG] [Thread-184233] [transport.py] [_log()] kex follows: False
2026-02-14T10:55:08.393 [DEBUG] [Thread-184233] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:55:08.393 [DEBUG] [Thread-184233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:55:08.393 [DEBUG] [Thread-184233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:55:08.393 [DEBUG] [Thread-184233] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:55:08.393 [DEBUG] [Thread-184233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:55:08.393 [DEBUG] [Thread-184233] [transport.py] [_log()] Compression: none
2026-02-14T10:55:08.393 [DEBUG] [Thread-184233] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:55:08.409 [DEBUG] [Thread-184233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:55:08.410 [DEBUG] [Thread-184233] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:55:08.410 [DEBUG] [Thread-184233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:55:08.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:55:08.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:55:08.413 [DEBUG] [Thread-184233] [transport.py] [_log()] userauth is OK
2026-02-14T10:55:08.413 [DEBUG] [Thread-184233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:55:08.413 [DEBUG] [Thread-184233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:55:08.414 [DEBUG] [Thread-184233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:55:08.414 [DEBUG] [Thread-184233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:55:08.432 [INFO] [Thread-184233] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:55:08.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:55:09.494 [DEBUG] [Thread-184233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:55:09.494 [DEBUG] [Thread-184233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:55:09.495 [DEBUG] [Thread-184233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:55:09.535 [DEBUG] [Thread-184233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:55:09.536 [DEBUG] [Thread-184233] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:55:09.539 [DEBUG] [Thread-184233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:55:09.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:55:09.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:55:09.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:55:09.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:55:09.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:55:09.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:55:09.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:55:09.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:55:09.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:55:09.571 [DEBUG] [Thread-184236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:55:09.571 [DEBUG] [Thread-184233] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:55:09.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.371293 -999.00  +13.10  24.06     58   +5.20 1 1 1 1 1   888    0 7.63 22.49 ----- 25.0 24.1 179.6 35.5 19.4 -26.2 17.9 -26.8 17.1 -22.6 18.1 -25.3
2026-02-14T10:55:09.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:55:09.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:55:09.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.371293
2026-02-14T10:55:09.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:55:09.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:55:09.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:55:09.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:55:09.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:55:09.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:54:35', tmtdew=9.47, humidity=52.72, cloud=0.0, wind=27.1, temperature=13.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:54:39.715', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:55:09.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-14T10:55:09.683 [DEBUG] [Thread-184237] [transport.py] [_log()] starting thread (client mode): 0xa57c0310
2026-02-14T10:55:09.684 [DEBUG] [Thread-184237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:55:09.698 [DEBUG] [Thread-184237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:55:09.699 [INFO] [Thread-184237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:55:09.706 [DEBUG] [Thread-184237] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:55:09.716 [DEBUG] [Thread-184237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:55:09.716 [DEBUG] [Thread-184237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:55:09.716 [DEBUG] [Thread-184237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:55:09.716 [DEBUG] [Thread-184237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:55:09.716 [DEBUG] [Thread-184237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:55:09.716 [DEBUG] [Thread-184237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:55:09.716 [DEBUG] [Thread-184237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:55:09.716 [DEBUG] [Thread-184237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:55:09.716 [DEBUG] [Thread-184237] [transport.py] [_log()] client lang: <none>
2026-02-14T10:55:09.716 [DEBUG] [Thread-184237] [transport.py] [_log()] server lang: <none>
2026-02-14T10:55:09.716 [DEBUG] [Thread-184237] [transport.py] [_log()] kex follows: False
2026-02-14T10:55:09.716 [DEBUG] [Thread-184237] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:55:09.717 [DEBUG] [Thread-184237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:55:09.717 [DEBUG] [Thread-184237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:55:09.717 [DEBUG] [Thread-184237] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:55:09.717 [DEBUG] [Thread-184237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:55:09.717 [DEBUG] [Thread-184237] [transport.py] [_log()] Compression: none
2026-02-14T10:55:09.717 [DEBUG] [Thread-184237] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:55:09.764 [DEBUG] [Thread-184237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:55:09.765 [DEBUG] [Thread-184237] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:55:09.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:55:09.766 [DEBUG] [Thread-184237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:55:09.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:55:09.821 [DEBUG] [Thread-184237] [transport.py] [_log()] userauth is OK
2026-02-14T10:55:09.821 [DEBUG] [Thread-184237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:55:09.822 [DEBUG] [Thread-184237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:55:09.822 [DEBUG] [Thread-184237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:55:09.822 [DEBUG] [Thread-184237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:55:09.856 [INFO] [Thread-184237] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:55:09.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T10:55:09.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:55:10.701 [DEBUG] [Thread-184237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:55:10.701 [DEBUG] [Thread-184237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:55:10.750 [DEBUG] [Thread-184237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:55:10.750 [DEBUG] [Thread-184237] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:55:10.758 [DEBUG] [Thread-184237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:55:10.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:55:10.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-14T10:55:10.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:55:10.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:55:10.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:55:10.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:55:10.790 [DEBUG] [Thread-184237] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:55:17.796 [DEBUG] [Thread-184239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:55:24.608 [DEBUG] [Thread-184240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:55:39.668 [DEBUG] [Thread-184241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:55:40.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:55:40.785 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:55:40.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-14T10:55:42.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 55, 11), 8.8, 55.25, 0.0, 32.78, 12.26, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:55:42.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:55:11
2026-02-14T10:55:42.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:55:43.125 [DEBUG] [Thread-184242] [transport.py] [_log()] starting thread (client mode): 0xa2d54c40
2026-02-14T10:55:43.125 [DEBUG] [Thread-184242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:55:43.146 [DEBUG] [Thread-184242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:55:43.146 [INFO] [Thread-184242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:55:43.147 [DEBUG] [Thread-184242] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:55:43.148 [DEBUG] [Thread-184242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:55:43.148 [DEBUG] [Thread-184242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:55:43.148 [DEBUG] [Thread-184242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:55:43.148 [DEBUG] [Thread-184242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:55:43.148 [DEBUG] [Thread-184242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:55:43.148 [DEBUG] [Thread-184242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:55:43.148 [DEBUG] [Thread-184242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:55:43.148 [DEBUG] [Thread-184242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:55:43.148 [DEBUG] [Thread-184242] [transport.py] [_log()] client lang: <none>
2026-02-14T10:55:43.148 [DEBUG] [Thread-184242] [transport.py] [_log()] server lang: <none>
2026-02-14T10:55:43.148 [DEBUG] [Thread-184242] [transport.py] [_log()] kex follows: False
2026-02-14T10:55:43.148 [DEBUG] [Thread-184242] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:55:43.148 [DEBUG] [Thread-184242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:55:43.148 [DEBUG] [Thread-184242] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:55:43.149 [DEBUG] [Thread-184242] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:55:43.149 [DEBUG] [Thread-184242] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:55:43.149 [DEBUG] [Thread-184242] [transport.py] [_log()] Compression: none
2026-02-14T10:55:43.149 [DEBUG] [Thread-184242] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:55:43.157 [DEBUG] [Thread-184242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:55:43.157 [DEBUG] [Thread-184242] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:55:43.157 [DEBUG] [Thread-184242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:55:43.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:55:43.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:55:43.159 [DEBUG] [Thread-184242] [transport.py] [_log()] userauth is OK
2026-02-14T10:55:43.160 [DEBUG] [Thread-184242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:55:43.160 [DEBUG] [Thread-184242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:55:43.160 [DEBUG] [Thread-184242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:55:43.160 [DEBUG] [Thread-184242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:55:43.194 [INFO] [Thread-184242] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:55:43.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:55:43.821 [DEBUG] [Thread-184242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:55:43.830 [DEBUG] [Thread-184242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:55:43.830 [DEBUG] [Thread-184242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:55:43.862 [DEBUG] [Thread-184242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:55:43.862 [DEBUG] [Thread-184242] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:55:43.865 [DEBUG] [Thread-184242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:55:43.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:55:43.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:55:43.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:55:43.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:55:43.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:55:43.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:55:43.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:55:43.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:55:43.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:55:43.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.371640 -999.00  +12.80  32.36     58   +4.70 1 1 2 1 1   888    0 7.82 26.20 ----- 23.5 32.4 165.4 36.0 19.2 -25.7 18.0 -24.1 17.1 -23.5 18.1 -24.4
2026-02-14T10:55:43.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:55:43.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:55:43.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.371640
2026-02-14T10:55:43.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:55:43.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:55:43.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:55:43.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:55:43.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:55:43.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:55:11', tmtdew=8.8, humidity=55.25, cloud=0.0, wind=32.78, temperature=12.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:55:09.696', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:55:43.889 [DEBUG] [Thread-184242] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:55:43.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-14T10:55:43.987 [DEBUG] [Thread-184245] [transport.py] [_log()] starting thread (client mode): 0xa57591e0
2026-02-14T10:55:43.987 [DEBUG] [Thread-184245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:55:44.001 [DEBUG] [Thread-184245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:55:44.001 [INFO] [Thread-184245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:55:44.008 [DEBUG] [Thread-184245] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:55:44.009 [DEBUG] [Thread-184245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:55:44.009 [DEBUG] [Thread-184245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:55:44.009 [DEBUG] [Thread-184245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:55:44.009 [DEBUG] [Thread-184245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:55:44.009 [DEBUG] [Thread-184245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:55:44.009 [DEBUG] [Thread-184245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:55:44.009 [DEBUG] [Thread-184245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:55:44.009 [DEBUG] [Thread-184245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:55:44.009 [DEBUG] [Thread-184245] [transport.py] [_log()] client lang: <none>
2026-02-14T10:55:44.009 [DEBUG] [Thread-184245] [transport.py] [_log()] server lang: <none>
2026-02-14T10:55:44.009 [DEBUG] [Thread-184245] [transport.py] [_log()] kex follows: False
2026-02-14T10:55:44.009 [DEBUG] [Thread-184245] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:55:44.009 [DEBUG] [Thread-184245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:55:44.009 [DEBUG] [Thread-184245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:55:44.009 [DEBUG] [Thread-184245] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:55:44.009 [DEBUG] [Thread-184245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:55:44.009 [DEBUG] [Thread-184245] [transport.py] [_log()] Compression: none
2026-02-14T10:55:44.009 [DEBUG] [Thread-184245] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:55:44.067 [DEBUG] [Thread-184245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:55:44.068 [DEBUG] [Thread-184245] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:55:44.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:55:44.069 [DEBUG] [Thread-184245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:55:44.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:55:44.123 [DEBUG] [Thread-184245] [transport.py] [_log()] userauth is OK
2026-02-14T10:55:44.123 [DEBUG] [Thread-184245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:55:44.124 [DEBUG] [Thread-184245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:55:44.124 [DEBUG] [Thread-184245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:55:44.124 [DEBUG] [Thread-184245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:55:44.147 [INFO] [Thread-184245] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:55:44.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-14T10:55:44.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:55:44.978 [DEBUG] [Thread-184245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:55:44.978 [DEBUG] [Thread-184245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:55:45.026 [DEBUG] [Thread-184245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:55:45.027 [DEBUG] [Thread-184245] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:55:45.036 [DEBUG] [Thread-184245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:55:45.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:55:45.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-14T10:55:45.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-14T10:55:45.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:55:45.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:55:45.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:55:45.073 [DEBUG] [Thread-184245] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:55:54.706 [DEBUG] [Thread-184247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:56:08.203 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:56:08.204 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:56:09.753 [DEBUG] [Thread-184248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:56:15.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:56:15.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:56:15.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-14T10:56:16.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 55, 46), 8.98, 54.63, 0.0, 30.7, 12.63, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:56:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:55:46
2026-02-14T10:56:17.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:56:17.442 [DEBUG] [Thread-184249] [transport.py] [_log()] starting thread (client mode): 0xa57c2c50
2026-02-14T10:56:17.442 [DEBUG] [Thread-184249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:56:17.466 [DEBUG] [Thread-184249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:56:17.466 [INFO] [Thread-184249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:56:17.469 [DEBUG] [Thread-184249] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:56:17.469 [DEBUG] [Thread-184249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:56:17.469 [DEBUG] [Thread-184249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:56:17.470 [DEBUG] [Thread-184249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:56:17.470 [DEBUG] [Thread-184249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:56:17.470 [DEBUG] [Thread-184249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:56:17.470 [DEBUG] [Thread-184249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:56:17.470 [DEBUG] [Thread-184249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:56:17.470 [DEBUG] [Thread-184249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:56:17.470 [DEBUG] [Thread-184249] [transport.py] [_log()] client lang: <none>
2026-02-14T10:56:17.470 [DEBUG] [Thread-184249] [transport.py] [_log()] server lang: <none>
2026-02-14T10:56:17.470 [DEBUG] [Thread-184249] [transport.py] [_log()] kex follows: False
2026-02-14T10:56:17.470 [DEBUG] [Thread-184249] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:56:17.470 [DEBUG] [Thread-184249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:56:17.470 [DEBUG] [Thread-184249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:56:17.470 [DEBUG] [Thread-184249] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:56:17.470 [DEBUG] [Thread-184249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:56:17.470 [DEBUG] [Thread-184249] [transport.py] [_log()] Compression: none
2026-02-14T10:56:17.470 [DEBUG] [Thread-184249] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:56:17.490 [DEBUG] [Thread-184249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:56:17.491 [DEBUG] [Thread-184249] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:56:17.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:56:17.492 [DEBUG] [Thread-184249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:56:17.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:56:17.494 [DEBUG] [Thread-184249] [transport.py] [_log()] userauth is OK
2026-02-14T10:56:17.494 [DEBUG] [Thread-184249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:56:17.494 [DEBUG] [Thread-184249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:56:17.494 [DEBUG] [Thread-184249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:56:17.494 [DEBUG] [Thread-184249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:56:17.518 [INFO] [Thread-184249] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:56:17.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:56:17.839 [DEBUG] [Thread-184251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:56:18.171 [DEBUG] [Thread-184249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:56:18.172 [DEBUG] [Thread-184249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:56:18.172 [DEBUG] [Thread-184249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:56:18.212 [DEBUG] [Thread-184249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:56:18.213 [DEBUG] [Thread-184249] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:56:18.217 [DEBUG] [Thread-184249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:56:18.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:56:18.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:56:18.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:56:18.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:56:18.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:56:18.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:56:18.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:56:18.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:56:18.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:56:18.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.371988 -999.00  +12.80  22.38     58   +4.90 1 1 1 1 1   888    0 7.94 29.05 ----- 18.7 22.4 161.2 30.4 19.4 -25.5 18.0 -26.0 17.1 -22.5 18.3 -24.5
2026-02-14T10:56:18.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:56:18.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:56:18.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.371988
2026-02-14T10:56:18.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:56:18.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:56:18.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:56:18.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:56:18.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:56:18.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:55:46', tmtdew=8.98, humidity=54.63, cloud=0.0, wind=30.7, temperature=12.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:55:39.763', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:56:18.243 [DEBUG] [Thread-184249] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:56:18.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-14T10:56:18.337 [DEBUG] [Thread-184253] [transport.py] [_log()] starting thread (client mode): 0xa575b940
2026-02-14T10:56:18.337 [DEBUG] [Thread-184253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:56:18.352 [DEBUG] [Thread-184253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:56:18.353 [INFO] [Thread-184253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:56:18.360 [DEBUG] [Thread-184253] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:56:18.360 [DEBUG] [Thread-184253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:56:18.360 [DEBUG] [Thread-184253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:56:18.360 [DEBUG] [Thread-184253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:56:18.361 [DEBUG] [Thread-184253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:56:18.361 [DEBUG] [Thread-184253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:56:18.361 [DEBUG] [Thread-184253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:56:18.361 [DEBUG] [Thread-184253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:56:18.361 [DEBUG] [Thread-184253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:56:18.361 [DEBUG] [Thread-184253] [transport.py] [_log()] client lang: <none>
2026-02-14T10:56:18.361 [DEBUG] [Thread-184253] [transport.py] [_log()] server lang: <none>
2026-02-14T10:56:18.361 [DEBUG] [Thread-184253] [transport.py] [_log()] kex follows: False
2026-02-14T10:56:18.361 [DEBUG] [Thread-184253] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:56:18.361 [DEBUG] [Thread-184253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:56:18.362 [DEBUG] [Thread-184253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:56:18.362 [DEBUG] [Thread-184253] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:56:18.362 [DEBUG] [Thread-184253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:56:18.362 [DEBUG] [Thread-184253] [transport.py] [_log()] Compression: none
2026-02-14T10:56:18.362 [DEBUG] [Thread-184253] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:56:18.419 [DEBUG] [Thread-184253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:56:18.419 [DEBUG] [Thread-184253] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:56:18.420 [DEBUG] [Thread-184253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:56:18.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:56:18.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:56:18.475 [DEBUG] [Thread-184253] [transport.py] [_log()] userauth is OK
2026-02-14T10:56:18.476 [DEBUG] [Thread-184253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:56:18.476 [DEBUG] [Thread-184253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:56:18.476 [DEBUG] [Thread-184253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:56:18.476 [DEBUG] [Thread-184253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:56:18.500 [INFO] [Thread-184253] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:56:18.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-14T10:56:18.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:56:19.324 [DEBUG] [Thread-184253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:56:19.324 [DEBUG] [Thread-184253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:56:19.371 [DEBUG] [Thread-184253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:56:19.372 [DEBUG] [Thread-184253] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:56:19.381 [DEBUG] [Thread-184253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:56:19.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:56:19.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:56:19.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-14T10:56:19.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:56:19.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:56:19.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:56:19.418 [DEBUG] [Thread-184253] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:56:24.792 [DEBUG] [Thread-184255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:56:39.846 [DEBUG] [Thread-184256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:56:49.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:56:49.440 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:56:49.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-14T10:56:51.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 56, 21), 8.84, 55.13, 0.0, 29.75, 12.58, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:56:51.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:56:21
2026-02-14T10:56:51.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:56:51.687 [DEBUG] [Thread-184257] [transport.py] [_log()] starting thread (client mode): 0xa2d56890
2026-02-14T10:56:51.687 [DEBUG] [Thread-184257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:56:51.707 [DEBUG] [Thread-184257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:56:51.707 [INFO] [Thread-184257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:56:51.710 [DEBUG] [Thread-184257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:56:51.710 [DEBUG] [Thread-184257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:56:51.710 [DEBUG] [Thread-184257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:56:51.710 [DEBUG] [Thread-184257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:56:51.710 [DEBUG] [Thread-184257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:56:51.710 [DEBUG] [Thread-184257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:56:51.710 [DEBUG] [Thread-184257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:56:51.710 [DEBUG] [Thread-184257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:56:51.710 [DEBUG] [Thread-184257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:56:51.710 [DEBUG] [Thread-184257] [transport.py] [_log()] client lang: <none>
2026-02-14T10:56:51.710 [DEBUG] [Thread-184257] [transport.py] [_log()] server lang: <none>
2026-02-14T10:56:51.710 [DEBUG] [Thread-184257] [transport.py] [_log()] kex follows: False
2026-02-14T10:56:51.710 [DEBUG] [Thread-184257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:56:51.710 [DEBUG] [Thread-184257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:56:51.711 [DEBUG] [Thread-184257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:56:51.711 [DEBUG] [Thread-184257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:56:51.711 [DEBUG] [Thread-184257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:56:51.711 [DEBUG] [Thread-184257] [transport.py] [_log()] Compression: none
2026-02-14T10:56:51.711 [DEBUG] [Thread-184257] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:56:51.728 [DEBUG] [Thread-184257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:56:51.729 [DEBUG] [Thread-184257] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:56:51.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:56:51.730 [DEBUG] [Thread-184257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:56:51.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:56:51.732 [DEBUG] [Thread-184257] [transport.py] [_log()] userauth is OK
2026-02-14T10:56:51.732 [DEBUG] [Thread-184257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:56:51.732 [DEBUG] [Thread-184257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:56:51.732 [DEBUG] [Thread-184257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:56:51.732 [DEBUG] [Thread-184257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:56:51.756 [INFO] [Thread-184257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:56:51.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:56:52.396 [DEBUG] [Thread-184257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:56:52.396 [DEBUG] [Thread-184257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:56:52.397 [DEBUG] [Thread-184257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:56:52.438 [DEBUG] [Thread-184257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:56:52.438 [DEBUG] [Thread-184257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:56:52.442 [DEBUG] [Thread-184257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:56:52.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:56:52.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:56:52.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:56:52.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:56:52.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:56:52.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:56:52.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:56:52.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:56:52.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:56:52.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.372335 -999.00  +12.70  21.25     59   +5.10 1 1 1 1 1   888    0 8.08 31.51 ----- 26.7 21.2 177.2 33.2 19.4 -25.6 18.1 -24.8 17.1 -24.3 18.2 -24.4
2026-02-14T10:56:52.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:56:52.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:56:52.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.372335
2026-02-14T10:56:52.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:56:52.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:56:52.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:56:52.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:56:52.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:56:52.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:56:21', tmtdew=8.84, humidity=55.13, cloud=0.0, wind=29.75, temperature=12.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:56:09.744', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:56:52.471 [DEBUG] [Thread-184257] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:56:52.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-14T10:56:52.568 [DEBUG] [Thread-184260] [transport.py] [_log()] starting thread (client mode): 0xa2d57b50
2026-02-14T10:56:52.569 [DEBUG] [Thread-184260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:56:52.584 [DEBUG] [Thread-184260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:56:52.585 [INFO] [Thread-184260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:56:52.593 [DEBUG] [Thread-184260] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:56:52.593 [DEBUG] [Thread-184260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:56:52.593 [DEBUG] [Thread-184260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:56:52.593 [DEBUG] [Thread-184260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:56:52.593 [DEBUG] [Thread-184260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:56:52.594 [DEBUG] [Thread-184260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:56:52.594 [DEBUG] [Thread-184260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:56:52.594 [DEBUG] [Thread-184260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:56:52.594 [DEBUG] [Thread-184260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:56:52.594 [DEBUG] [Thread-184260] [transport.py] [_log()] client lang: <none>
2026-02-14T10:56:52.594 [DEBUG] [Thread-184260] [transport.py] [_log()] server lang: <none>
2026-02-14T10:56:52.594 [DEBUG] [Thread-184260] [transport.py] [_log()] kex follows: False
2026-02-14T10:56:52.594 [DEBUG] [Thread-184260] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:56:52.595 [DEBUG] [Thread-184260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:56:52.595 [DEBUG] [Thread-184260] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:56:52.595 [DEBUG] [Thread-184260] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:56:52.595 [DEBUG] [Thread-184260] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:56:52.595 [DEBUG] [Thread-184260] [transport.py] [_log()] Compression: none
2026-02-14T10:56:52.595 [DEBUG] [Thread-184260] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:56:52.652 [DEBUG] [Thread-184260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:56:52.653 [DEBUG] [Thread-184260] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:56:52.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:56:52.654 [DEBUG] [Thread-184260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:56:52.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:56:52.712 [DEBUG] [Thread-184260] [transport.py] [_log()] userauth is OK
2026-02-14T10:56:52.712 [DEBUG] [Thread-184260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:56:52.712 [DEBUG] [Thread-184260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:56:52.712 [DEBUG] [Thread-184260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:56:52.712 [DEBUG] [Thread-184260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:56:52.733 [INFO] [Thread-184260] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:56:52.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T10:56:52.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:56:53.541 [DEBUG] [Thread-184260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:56:53.541 [DEBUG] [Thread-184260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:56:53.592 [DEBUG] [Thread-184260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:56:53.592 [DEBUG] [Thread-184260] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:56:53.610 [DEBUG] [Thread-184260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:56:53.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:56:53.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-14T10:56:53.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:56:53.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:56:53.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:56:53.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:56:53.650 [DEBUG] [Thread-184260] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:56:54.885 [DEBUG] [Thread-184262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:57:08.345 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:57:08.347 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:57:09.937 [DEBUG] [Thread-184263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:57:17.881 [DEBUG] [Thread-184264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:57:23.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:57:23.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:57:23.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:57:24.973 [DEBUG] [Thread-184265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:57:25.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 56, 56), 8.39, 56.81, 0.0, 27.98, 11.88, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:57:25.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:56:56
2026-02-14T10:57:25.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:57:26.096 [DEBUG] [Thread-184266] [transport.py] [_log()] starting thread (client mode): 0xa57c2aa0
2026-02-14T10:57:26.096 [DEBUG] [Thread-184266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:57:26.116 [DEBUG] [Thread-184266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:57:26.116 [INFO] [Thread-184266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:57:26.119 [DEBUG] [Thread-184266] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:57:26.119 [DEBUG] [Thread-184266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:57:26.119 [DEBUG] [Thread-184266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:57:26.119 [DEBUG] [Thread-184266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:57:26.119 [DEBUG] [Thread-184266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:57:26.119 [DEBUG] [Thread-184266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:57:26.120 [DEBUG] [Thread-184266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:57:26.120 [DEBUG] [Thread-184266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:57:26.120 [DEBUG] [Thread-184266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:57:26.120 [DEBUG] [Thread-184266] [transport.py] [_log()] client lang: <none>
2026-02-14T10:57:26.120 [DEBUG] [Thread-184266] [transport.py] [_log()] server lang: <none>
2026-02-14T10:57:26.120 [DEBUG] [Thread-184266] [transport.py] [_log()] kex follows: False
2026-02-14T10:57:26.120 [DEBUG] [Thread-184266] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:57:26.120 [DEBUG] [Thread-184266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:57:26.120 [DEBUG] [Thread-184266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:57:26.120 [DEBUG] [Thread-184266] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:57:26.120 [DEBUG] [Thread-184266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:57:26.120 [DEBUG] [Thread-184266] [transport.py] [_log()] Compression: none
2026-02-14T10:57:26.120 [DEBUG] [Thread-184266] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:57:26.138 [DEBUG] [Thread-184266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:57:26.139 [DEBUG] [Thread-184266] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:57:26.139 [DEBUG] [Thread-184266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:57:26.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:57:26.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:57:26.141 [DEBUG] [Thread-184266] [transport.py] [_log()] userauth is OK
2026-02-14T10:57:26.142 [DEBUG] [Thread-184266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:57:26.142 [DEBUG] [Thread-184266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:57:26.142 [DEBUG] [Thread-184266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:57:26.142 [DEBUG] [Thread-184266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:57:26.157 [INFO] [Thread-184266] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:57:26.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:57:26.798 [DEBUG] [Thread-184266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:57:26.798 [DEBUG] [Thread-184266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:57:26.799 [DEBUG] [Thread-184266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:57:26.839 [DEBUG] [Thread-184266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:57:26.840 [DEBUG] [Thread-184266] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:57:26.843 [DEBUG] [Thread-184266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:57:26.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:57:26.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:57:26.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:57:26.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:57:26.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:57:26.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:57:26.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:57:26.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:57:26.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:57:26.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.373029 -999.00  +12.40  20.79     61   +5.20 1 1 1 1 1   888    0 8.03 33.38 ----- 17.4 20.8 165.8 29.2 19.4 -24.8 18.0 -22.9 17.1 -23.4 18.3 -23.8
2026-02-14T10:57:26.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:57:26.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:57:26.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.373029
2026-02-14T10:57:26.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:57:26.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:57:26.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:57:26.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:57:26.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:57:26.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:56:56', tmtdew=8.39, humidity=56.81, cloud=0.0, wind=27.98, temperature=11.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:57:09.706', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:57:26.869 [DEBUG] [Thread-184266] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:57:26.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T10:57:26.964 [DEBUG] [Thread-184269] [transport.py] [_log()] starting thread (client mode): 0xa2d57c10
2026-02-14T10:57:26.964 [DEBUG] [Thread-184269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:57:26.978 [DEBUG] [Thread-184269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:57:26.978 [INFO] [Thread-184269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:57:26.986 [DEBUG] [Thread-184269] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:57:26.986 [DEBUG] [Thread-184269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:57:26.986 [DEBUG] [Thread-184269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:57:26.986 [DEBUG] [Thread-184269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:57:26.986 [DEBUG] [Thread-184269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:57:26.986 [DEBUG] [Thread-184269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:57:26.986 [DEBUG] [Thread-184269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:57:26.986 [DEBUG] [Thread-184269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:57:26.987 [DEBUG] [Thread-184269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:57:26.987 [DEBUG] [Thread-184269] [transport.py] [_log()] client lang: <none>
2026-02-14T10:57:26.987 [DEBUG] [Thread-184269] [transport.py] [_log()] server lang: <none>
2026-02-14T10:57:26.987 [DEBUG] [Thread-184269] [transport.py] [_log()] kex follows: False
2026-02-14T10:57:26.987 [DEBUG] [Thread-184269] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:57:26.987 [DEBUG] [Thread-184269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:57:26.987 [DEBUG] [Thread-184269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:57:26.987 [DEBUG] [Thread-184269] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:57:26.987 [DEBUG] [Thread-184269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:57:26.987 [DEBUG] [Thread-184269] [transport.py] [_log()] Compression: none
2026-02-14T10:57:26.987 [DEBUG] [Thread-184269] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:57:27.046 [DEBUG] [Thread-184269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:57:27.047 [DEBUG] [Thread-184269] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:57:27.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:57:27.048 [DEBUG] [Thread-184269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:57:27.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:57:27.105 [DEBUG] [Thread-184269] [transport.py] [_log()] userauth is OK
2026-02-14T10:57:27.106 [DEBUG] [Thread-184269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:57:27.106 [DEBUG] [Thread-184269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:57:27.106 [DEBUG] [Thread-184269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:57:27.106 [DEBUG] [Thread-184269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:57:27.124 [INFO] [Thread-184269] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:57:27.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-14T10:57:27.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:57:27.948 [DEBUG] [Thread-184269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:57:27.948 [DEBUG] [Thread-184269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:57:27.996 [DEBUG] [Thread-184269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:57:27.997 [DEBUG] [Thread-184269] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:57:28.006 [DEBUG] [Thread-184269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:57:28.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:57:28.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:57:28.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-14T10:57:28.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:57:28.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:57:28.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:57:28.044 [DEBUG] [Thread-184269] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:57:40.013 [DEBUG] [Thread-184271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:57:55.072 [DEBUG] [Thread-184272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:57:58.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:57:58.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:57:58.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T10:57:59.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 57, 31), 8.27, 57.24, 0.0, 31.95, 11.9, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:57:59.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:57:31
2026-02-14T10:58:00.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:58:00.434 [DEBUG] [Thread-184273] [transport.py] [_log()] starting thread (client mode): 0xa57596c0
2026-02-14T10:58:00.434 [DEBUG] [Thread-184273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:58:00.454 [DEBUG] [Thread-184273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:58:00.454 [INFO] [Thread-184273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:58:00.457 [DEBUG] [Thread-184273] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:58:00.457 [DEBUG] [Thread-184273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:58:00.457 [DEBUG] [Thread-184273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:58:00.457 [DEBUG] [Thread-184273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:58:00.457 [DEBUG] [Thread-184273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:58:00.457 [DEBUG] [Thread-184273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:58:00.457 [DEBUG] [Thread-184273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:58:00.458 [DEBUG] [Thread-184273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:58:00.458 [DEBUG] [Thread-184273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:58:00.458 [DEBUG] [Thread-184273] [transport.py] [_log()] client lang: <none>
2026-02-14T10:58:00.458 [DEBUG] [Thread-184273] [transport.py] [_log()] server lang: <none>
2026-02-14T10:58:00.458 [DEBUG] [Thread-184273] [transport.py] [_log()] kex follows: False
2026-02-14T10:58:00.458 [DEBUG] [Thread-184273] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:58:00.458 [DEBUG] [Thread-184273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:58:00.458 [DEBUG] [Thread-184273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:58:00.458 [DEBUG] [Thread-184273] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:58:00.458 [DEBUG] [Thread-184273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:58:00.458 [DEBUG] [Thread-184273] [transport.py] [_log()] Compression: none
2026-02-14T10:58:00.458 [DEBUG] [Thread-184273] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:58:00.472 [DEBUG] [Thread-184273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:58:00.473 [DEBUG] [Thread-184273] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:58:00.473 [DEBUG] [Thread-184273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:58:00.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:58:00.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:58:00.475 [DEBUG] [Thread-184273] [transport.py] [_log()] userauth is OK
2026-02-14T10:58:00.475 [DEBUG] [Thread-184273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:58:00.475 [DEBUG] [Thread-184273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:58:00.475 [DEBUG] [Thread-184273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:58:00.476 [DEBUG] [Thread-184273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:58:00.510 [INFO] [Thread-184273] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:58:00.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:58:01.156 [DEBUG] [Thread-184273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:58:01.156 [DEBUG] [Thread-184273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:58:01.156 [DEBUG] [Thread-184273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:58:01.197 [DEBUG] [Thread-184273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:58:01.197 [DEBUG] [Thread-184273] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:58:01.200 [DEBUG] [Thread-184273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:58:01.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:58:01.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:58:01.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:58:01.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:58:01.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:58:01.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:58:01.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:58:01.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:58:01.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:58:01.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.373376 -999.00  +13.00  23.70     60   +5.60 1 2 1 1 1   888    0 8.03 33.29 ----- 31.0 23.7 185.2 34.9 19.5 -25.7 18.2 -22.7 17.3 -21.8 18.3 -24.1
2026-02-14T10:58:01.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:58:01.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:58:01.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.373376
2026-02-14T10:58:01.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:58:01.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:58:01.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:58:01.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:58:01.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:58:01.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:57:31', tmtdew=8.27, humidity=57.24, cloud=0.0, wind=31.95, temperature=11.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:57:39.686', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:58:01.225 [DEBUG] [Thread-184273] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:58:01.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-14T10:58:01.319 [DEBUG] [Thread-184276] [transport.py] [_log()] starting thread (client mode): 0xa57c2aa0
2026-02-14T10:58:01.320 [DEBUG] [Thread-184276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:58:01.334 [DEBUG] [Thread-184276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:58:01.334 [INFO] [Thread-184276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:58:01.341 [DEBUG] [Thread-184276] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:58:01.342 [DEBUG] [Thread-184276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:58:01.342 [DEBUG] [Thread-184276] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:58:01.342 [DEBUG] [Thread-184276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:58:01.342 [DEBUG] [Thread-184276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:58:01.342 [DEBUG] [Thread-184276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:58:01.343 [DEBUG] [Thread-184276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:58:01.343 [DEBUG] [Thread-184276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:58:01.343 [DEBUG] [Thread-184276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:58:01.343 [DEBUG] [Thread-184276] [transport.py] [_log()] client lang: <none>
2026-02-14T10:58:01.343 [DEBUG] [Thread-184276] [transport.py] [_log()] server lang: <none>
2026-02-14T10:58:01.343 [DEBUG] [Thread-184276] [transport.py] [_log()] kex follows: False
2026-02-14T10:58:01.343 [DEBUG] [Thread-184276] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:58:01.343 [DEBUG] [Thread-184276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:58:01.343 [DEBUG] [Thread-184276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:58:01.343 [DEBUG] [Thread-184276] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:58:01.343 [DEBUG] [Thread-184276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:58:01.343 [DEBUG] [Thread-184276] [transport.py] [_log()] Compression: none
2026-02-14T10:58:01.343 [DEBUG] [Thread-184276] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:58:01.405 [DEBUG] [Thread-184276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:58:01.405 [DEBUG] [Thread-184276] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:58:01.405 [DEBUG] [Thread-184276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:58:01.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:58:01.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:58:01.460 [DEBUG] [Thread-184276] [transport.py] [_log()] userauth is OK
2026-02-14T10:58:01.460 [DEBUG] [Thread-184276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:58:01.460 [DEBUG] [Thread-184276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:58:01.460 [DEBUG] [Thread-184276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:58:01.460 [DEBUG] [Thread-184276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:58:01.474 [INFO] [Thread-184276] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:58:01.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-14T10:58:01.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:58:02.312 [DEBUG] [Thread-184276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:58:02.312 [DEBUG] [Thread-184276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:58:02.360 [DEBUG] [Thread-184276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:58:02.360 [DEBUG] [Thread-184276] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:58:02.368 [DEBUG] [Thread-184276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:58:02.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:58:02.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-14T10:58:02.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-14T10:58:02.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:58:02.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:58:02.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:58:02.402 [DEBUG] [Thread-184276] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:58:08.488 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:58:08.489 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:58:10.109 [DEBUG] [Thread-184278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:58:17.927 [DEBUG] [Thread-184279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:58:25.165 [DEBUG] [Thread-184280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:58:32.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:58:32.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:58:32.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-14T10:58:34.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 58, 6), 8.5, 56.48, 0.0, 36.08, 12.15, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:58:34.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:58:06
2026-02-14T10:58:34.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:58:34.741 [DEBUG] [Thread-184281] [transport.py] [_log()] starting thread (client mode): 0xa2d56f50
2026-02-14T10:58:34.741 [DEBUG] [Thread-184281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:58:34.765 [DEBUG] [Thread-184281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:58:34.765 [INFO] [Thread-184281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:58:34.768 [DEBUG] [Thread-184281] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:58:34.769 [DEBUG] [Thread-184281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:58:34.769 [DEBUG] [Thread-184281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:58:34.769 [DEBUG] [Thread-184281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:58:34.769 [DEBUG] [Thread-184281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:58:34.769 [DEBUG] [Thread-184281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:58:34.769 [DEBUG] [Thread-184281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:58:34.769 [DEBUG] [Thread-184281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:58:34.769 [DEBUG] [Thread-184281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:58:34.769 [DEBUG] [Thread-184281] [transport.py] [_log()] client lang: <none>
2026-02-14T10:58:34.769 [DEBUG] [Thread-184281] [transport.py] [_log()] server lang: <none>
2026-02-14T10:58:34.769 [DEBUG] [Thread-184281] [transport.py] [_log()] kex follows: False
2026-02-14T10:58:34.769 [DEBUG] [Thread-184281] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:58:34.769 [DEBUG] [Thread-184281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:58:34.769 [DEBUG] [Thread-184281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:58:34.769 [DEBUG] [Thread-184281] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:58:34.769 [DEBUG] [Thread-184281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:58:34.769 [DEBUG] [Thread-184281] [transport.py] [_log()] Compression: none
2026-02-14T10:58:34.769 [DEBUG] [Thread-184281] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:58:34.787 [DEBUG] [Thread-184281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:58:34.788 [DEBUG] [Thread-184281] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:58:34.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:58:34.789 [DEBUG] [Thread-184281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:58:34.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:58:34.791 [DEBUG] [Thread-184281] [transport.py] [_log()] userauth is OK
2026-02-14T10:58:34.791 [DEBUG] [Thread-184281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:58:34.791 [DEBUG] [Thread-184281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:58:34.791 [DEBUG] [Thread-184281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:58:34.791 [DEBUG] [Thread-184281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:58:34.809 [INFO] [Thread-184281] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:58:34.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:58:35.406 [DEBUG] [Thread-184281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:58:35.407 [DEBUG] [Thread-184281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:58:35.407 [DEBUG] [Thread-184281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:58:35.448 [DEBUG] [Thread-184281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:58:35.449 [DEBUG] [Thread-184281] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:58:35.452 [DEBUG] [Thread-184281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:58:35.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:58:35.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:58:35.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:58:35.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:58:35.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:58:35.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:58:35.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:58:35.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:58:35.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:58:35.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.373723 -999.00  +13.00  32.95     58   +5.10 1 2 2 1 1   888    0 8.06 35.68 ----- 27.6 33.0 162.0 43.3 19.4 -27.8 18.1 -23.7 17.4 -21.9 18.4 -25.8
2026-02-14T10:58:35.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:58:35.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:58:35.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.373723
2026-02-14T10:58:35.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:58:35.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:58:35.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:58:35.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:58:35.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T10:58:35.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:58:06', tmtdew=8.5, humidity=56.48, cloud=0.0, wind=36.08, temperature=12.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:58:09.667', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:58:35.473 [DEBUG] [Thread-184281] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:58:35.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-14T10:58:35.570 [DEBUG] [Thread-184284] [transport.py] [_log()] starting thread (client mode): 0xa5740190
2026-02-14T10:58:35.571 [DEBUG] [Thread-184284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:58:35.586 [DEBUG] [Thread-184284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:58:35.586 [INFO] [Thread-184284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:58:35.595 [DEBUG] [Thread-184284] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:58:35.596 [DEBUG] [Thread-184284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:58:35.596 [DEBUG] [Thread-184284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:58:35.596 [DEBUG] [Thread-184284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:58:35.597 [DEBUG] [Thread-184284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:58:35.597 [DEBUG] [Thread-184284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:58:35.597 [DEBUG] [Thread-184284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:58:35.597 [DEBUG] [Thread-184284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:58:35.597 [DEBUG] [Thread-184284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:58:35.597 [DEBUG] [Thread-184284] [transport.py] [_log()] client lang: <none>
2026-02-14T10:58:35.597 [DEBUG] [Thread-184284] [transport.py] [_log()] server lang: <none>
2026-02-14T10:58:35.597 [DEBUG] [Thread-184284] [transport.py] [_log()] kex follows: False
2026-02-14T10:58:35.597 [DEBUG] [Thread-184284] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:58:35.597 [DEBUG] [Thread-184284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:58:35.597 [DEBUG] [Thread-184284] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:58:35.597 [DEBUG] [Thread-184284] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:58:35.598 [DEBUG] [Thread-184284] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:58:35.598 [DEBUG] [Thread-184284] [transport.py] [_log()] Compression: none
2026-02-14T10:58:35.598 [DEBUG] [Thread-184284] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:58:35.657 [DEBUG] [Thread-184284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:58:35.657 [DEBUG] [Thread-184284] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:58:35.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:58:35.659 [DEBUG] [Thread-184284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:58:35.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:58:35.717 [DEBUG] [Thread-184284] [transport.py] [_log()] userauth is OK
2026-02-14T10:58:35.717 [DEBUG] [Thread-184284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:58:35.717 [DEBUG] [Thread-184284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:58:35.717 [DEBUG] [Thread-184284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:58:35.717 [DEBUG] [Thread-184284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:58:35.736 [INFO] [Thread-184284] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:58:35.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-14T10:58:35.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:58:36.566 [DEBUG] [Thread-184284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:58:36.566 [DEBUG] [Thread-184284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:58:36.613 [DEBUG] [Thread-184284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:58:36.614 [DEBUG] [Thread-184284] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:58:36.623 [DEBUG] [Thread-184284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:58:36.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:58:36.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-14T10:58:36.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-14T10:58:36.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:58:36.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:58:36.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:58:36.660 [DEBUG] [Thread-184284] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:58:40.204 [DEBUG] [Thread-184286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:58:55.262 [DEBUG] [Thread-184287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:59:06.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:59:06.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:59:06.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-14T10:59:08.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 58, 42), 9.79, 51.59, 0.0, 43.61, 13.86, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:59:08.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:58:42
2026-02-14T10:59:08.632 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:59:08.633 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:59:08.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:59:08.950 [DEBUG] [Thread-184288] [transport.py] [_log()] starting thread (client mode): 0xa5758730
2026-02-14T10:59:08.950 [DEBUG] [Thread-184288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:59:08.970 [DEBUG] [Thread-184288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:59:08.970 [INFO] [Thread-184288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:59:08.971 [DEBUG] [Thread-184288] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:59:08.971 [DEBUG] [Thread-184288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:59:08.971 [DEBUG] [Thread-184288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:59:08.971 [DEBUG] [Thread-184288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:59:08.971 [DEBUG] [Thread-184288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:59:08.971 [DEBUG] [Thread-184288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:59:08.972 [DEBUG] [Thread-184288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:59:08.972 [DEBUG] [Thread-184288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:59:08.972 [DEBUG] [Thread-184288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:59:08.972 [DEBUG] [Thread-184288] [transport.py] [_log()] client lang: <none>
2026-02-14T10:59:08.972 [DEBUG] [Thread-184288] [transport.py] [_log()] server lang: <none>
2026-02-14T10:59:08.972 [DEBUG] [Thread-184288] [transport.py] [_log()] kex follows: False
2026-02-14T10:59:08.972 [DEBUG] [Thread-184288] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:59:08.972 [DEBUG] [Thread-184288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:59:08.972 [DEBUG] [Thread-184288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:59:08.972 [DEBUG] [Thread-184288] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:59:08.972 [DEBUG] [Thread-184288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:59:08.972 [DEBUG] [Thread-184288] [transport.py] [_log()] Compression: none
2026-02-14T10:59:08.972 [DEBUG] [Thread-184288] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:59:08.990 [DEBUG] [Thread-184288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:59:08.991 [DEBUG] [Thread-184288] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:59:08.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:59:08.992 [DEBUG] [Thread-184288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:59:08.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:59:08.994 [DEBUG] [Thread-184288] [transport.py] [_log()] userauth is OK
2026-02-14T10:59:08.994 [DEBUG] [Thread-184288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:59:08.995 [DEBUG] [Thread-184288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:59:08.995 [DEBUG] [Thread-184288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:59:08.995 [DEBUG] [Thread-184288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:59:09.019 [INFO] [Thread-184288] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:59:09.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:59:09.667 [DEBUG] [Thread-184288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:59:09.668 [DEBUG] [Thread-184288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:59:09.668 [DEBUG] [Thread-184288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:59:09.708 [DEBUG] [Thread-184288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:59:09.709 [DEBUG] [Thread-184288] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:59:09.712 [DEBUG] [Thread-184288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:59:09.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:59:09.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:59:09.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:59:09.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:59:09.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:59:09.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:59:09.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:59:09.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:59:09.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:59:09.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.374071 -999.00  +12.90  23.57     59   +5.20 1 1 1 1 1   888    0 8.30 41.01 ----- 23.9 23.6 172.0 32.5 19.5 -24.9 18.0 -27.1 17.3 -23.4 18.4 -24.0
2026-02-14T10:59:09.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:59:09.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:59:09.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.374071
2026-02-14T10:59:09.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:59:09.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:59:09.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:59:09.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:59:09.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:59:09.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:58:42', tmtdew=9.79, humidity=51.59, cloud=0.0, wind=43.61, temperature=13.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:58:39.734', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:59:09.739 [DEBUG] [Thread-184288] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:59:09.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T10:59:09.845 [DEBUG] [Thread-184291] [transport.py] [_log()] starting thread (client mode): 0xa2d10130
2026-02-14T10:59:09.845 [DEBUG] [Thread-184291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:59:09.860 [DEBUG] [Thread-184291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:59:09.861 [INFO] [Thread-184291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:59:09.868 [DEBUG] [Thread-184291] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:59:09.868 [DEBUG] [Thread-184291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:59:09.869 [DEBUG] [Thread-184291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:59:09.869 [DEBUG] [Thread-184291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:59:09.869 [DEBUG] [Thread-184291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:59:09.869 [DEBUG] [Thread-184291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:59:09.869 [DEBUG] [Thread-184291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:59:09.869 [DEBUG] [Thread-184291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:59:09.869 [DEBUG] [Thread-184291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:59:09.869 [DEBUG] [Thread-184291] [transport.py] [_log()] client lang: <none>
2026-02-14T10:59:09.869 [DEBUG] [Thread-184291] [transport.py] [_log()] server lang: <none>
2026-02-14T10:59:09.869 [DEBUG] [Thread-184291] [transport.py] [_log()] kex follows: False
2026-02-14T10:59:09.869 [DEBUG] [Thread-184291] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:59:09.869 [DEBUG] [Thread-184291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:59:09.869 [DEBUG] [Thread-184291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:59:09.869 [DEBUG] [Thread-184291] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:59:09.869 [DEBUG] [Thread-184291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:59:09.869 [DEBUG] [Thread-184291] [transport.py] [_log()] Compression: none
2026-02-14T10:59:09.869 [DEBUG] [Thread-184291] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:59:09.928 [DEBUG] [Thread-184291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:59:09.929 [DEBUG] [Thread-184291] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:59:09.929 [DEBUG] [Thread-184291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:59:09.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:59:09.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:59:09.985 [DEBUG] [Thread-184291] [transport.py] [_log()] userauth is OK
2026-02-14T10:59:09.985 [DEBUG] [Thread-184291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:59:09.986 [DEBUG] [Thread-184291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:59:09.986 [DEBUG] [Thread-184291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:59:09.986 [DEBUG] [Thread-184291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:59:10.009 [INFO] [Thread-184291] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:59:10.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-14T10:59:10.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:59:10.302 [DEBUG] [Thread-184293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:59:10.842 [DEBUG] [Thread-184291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:59:10.842 [DEBUG] [Thread-184291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:59:10.890 [DEBUG] [Thread-184291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:59:10.890 [DEBUG] [Thread-184291] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:59:10.898 [DEBUG] [Thread-184291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:59:10.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:59:10.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-14T10:59:10.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T10:59:10.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:59:10.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:59:10.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:59:10.944 [DEBUG] [Thread-184291] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:59:17.961 [DEBUG] [Thread-184294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:59:25.365 [DEBUG] [Thread-184295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:59:40.404 [DEBUG] [Thread-184296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T10:59:40.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T10:59:40.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T10:59:40.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-14T10:59:42.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 59, 17), 8.88, 54.66, 0.0, 38.48, 12.7, 0, 0, 0, 2, 0, 0),)
2026-02-14T10:59:42.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:59:17
2026-02-14T10:59:43.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T10:59:43.286 [DEBUG] [Thread-184297] [transport.py] [_log()] starting thread (client mode): 0xa57c0460
2026-02-14T10:59:43.286 [DEBUG] [Thread-184297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:59:43.307 [DEBUG] [Thread-184297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T10:59:43.307 [INFO] [Thread-184297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T10:59:43.311 [DEBUG] [Thread-184297] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:59:43.311 [DEBUG] [Thread-184297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T10:59:43.311 [DEBUG] [Thread-184297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:59:43.311 [DEBUG] [Thread-184297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:59:43.311 [DEBUG] [Thread-184297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:59:43.311 [DEBUG] [Thread-184297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:59:43.311 [DEBUG] [Thread-184297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:59:43.311 [DEBUG] [Thread-184297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:59:43.311 [DEBUG] [Thread-184297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:59:43.312 [DEBUG] [Thread-184297] [transport.py] [_log()] client lang: <none>
2026-02-14T10:59:43.312 [DEBUG] [Thread-184297] [transport.py] [_log()] server lang: <none>
2026-02-14T10:59:43.312 [DEBUG] [Thread-184297] [transport.py] [_log()] kex follows: False
2026-02-14T10:59:43.312 [DEBUG] [Thread-184297] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:59:43.312 [DEBUG] [Thread-184297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:59:43.312 [DEBUG] [Thread-184297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:59:43.312 [DEBUG] [Thread-184297] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:59:43.312 [DEBUG] [Thread-184297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:59:43.312 [DEBUG] [Thread-184297] [transport.py] [_log()] Compression: none
2026-02-14T10:59:43.312 [DEBUG] [Thread-184297] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:59:43.331 [DEBUG] [Thread-184297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:59:43.332 [DEBUG] [Thread-184297] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:59:43.332 [DEBUG] [Thread-184297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T10:59:43.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T10:59:43.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:59:43.335 [DEBUG] [Thread-184297] [transport.py] [_log()] userauth is OK
2026-02-14T10:59:43.335 [DEBUG] [Thread-184297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:59:43.335 [DEBUG] [Thread-184297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:59:43.336 [DEBUG] [Thread-184297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T10:59:43.336 [DEBUG] [Thread-184297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:59:43.371 [INFO] [Thread-184297] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:59:43.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:59:44.026 [DEBUG] [Thread-184297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:59:44.026 [DEBUG] [Thread-184297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:59:44.026 [DEBUG] [Thread-184297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T10:59:44.067 [DEBUG] [Thread-184297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:59:44.068 [DEBUG] [Thread-184297] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:59:44.071 [DEBUG] [Thread-184297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:59:44.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:59:44.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T10:59:44.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T10:59:44.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T10:59:44.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:59:44.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T10:59:44.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:59:44.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:59:44.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T10:59:44.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.374418 -999.00  +12.70  35.97     59   +5.00 1 1 2 1 1   888    0 8.54 44.07 ----- 29.9 36.0 164.0 41.6 19.2 -27.8 18.0 -24.8 17.2 -23.9 18.2 -25.4
2026-02-14T10:59:44.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T10:59:44.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T10:59:44.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.374418
2026-02-14T10:59:44.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T10:59:44.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T10:59:44.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T10:59:44.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T10:59:44.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T10:59:44.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:59:17', tmtdew=8.88, humidity=54.66, cloud=0.0, wind=38.48, temperature=12.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:59:09.715', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T10:59:44.100 [DEBUG] [Thread-184297] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:59:44.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-14T10:59:44.193 [DEBUG] [Thread-184300] [transport.py] [_log()] starting thread (client mode): 0xa2d570d0
2026-02-14T10:59:44.193 [DEBUG] [Thread-184300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T10:59:44.209 [DEBUG] [Thread-184300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T10:59:44.210 [INFO] [Thread-184300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T10:59:44.217 [DEBUG] [Thread-184300] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T10:59:44.218 [DEBUG] [Thread-184300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T10:59:44.218 [DEBUG] [Thread-184300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T10:59:44.218 [DEBUG] [Thread-184300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:59:44.218 [DEBUG] [Thread-184300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T10:59:44.218 [DEBUG] [Thread-184300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:59:44.218 [DEBUG] [Thread-184300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T10:59:44.218 [DEBUG] [Thread-184300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T10:59:44.218 [DEBUG] [Thread-184300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T10:59:44.218 [DEBUG] [Thread-184300] [transport.py] [_log()] client lang: <none>
2026-02-14T10:59:44.218 [DEBUG] [Thread-184300] [transport.py] [_log()] server lang: <none>
2026-02-14T10:59:44.218 [DEBUG] [Thread-184300] [transport.py] [_log()] kex follows: False
2026-02-14T10:59:44.218 [DEBUG] [Thread-184300] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T10:59:44.218 [DEBUG] [Thread-184300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T10:59:44.218 [DEBUG] [Thread-184300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T10:59:44.218 [DEBUG] [Thread-184300] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T10:59:44.218 [DEBUG] [Thread-184300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T10:59:44.218 [DEBUG] [Thread-184300] [transport.py] [_log()] Compression: none
2026-02-14T10:59:44.218 [DEBUG] [Thread-184300] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T10:59:44.275 [DEBUG] [Thread-184300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T10:59:44.276 [DEBUG] [Thread-184300] [transport.py] [_log()] Switch to new keys ...
2026-02-14T10:59:44.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T10:59:44.277 [DEBUG] [Thread-184300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T10:59:44.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T10:59:44.331 [DEBUG] [Thread-184300] [transport.py] [_log()] userauth is OK
2026-02-14T10:59:44.331 [DEBUG] [Thread-184300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T10:59:44.331 [DEBUG] [Thread-184300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T10:59:44.331 [DEBUG] [Thread-184300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T10:59:44.331 [DEBUG] [Thread-184300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T10:59:44.350 [INFO] [Thread-184300] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T10:59:44.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-14T10:59:44.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T10:59:45.192 [DEBUG] [Thread-184300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T10:59:45.192 [DEBUG] [Thread-184300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T10:59:45.241 [DEBUG] [Thread-184300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T10:59:45.241 [DEBUG] [Thread-184300] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T10:59:45.251 [DEBUG] [Thread-184300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T10:59:45.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T10:59:45.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T10:59: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') -> 00000000
2026-02-14T10:59:45.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T10:59:45.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T10:59:45.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T10:59:45.286 [DEBUG] [Thread-184300] [transport.py] [_log()] EOF in transport thread
2026-02-14T10:59:55.441 [DEBUG] [Thread-184302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:00:08.773 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:00:08.774 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:00:10.491 [DEBUG] [Thread-184303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:00:15.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:00:15.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:00:15.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-14T11:00:17.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 10, 59, 52), 9.06, 54.07, 0.0, 33.28, 12.83, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:00:17.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 10:59:52
2026-02-14T11:00:17.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:00:17.699 [DEBUG] [Thread-184304] [transport.py] [_log()] starting thread (client mode): 0xa2d11690
2026-02-14T11:00:17.699 [DEBUG] [Thread-184304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:00:17.720 [DEBUG] [Thread-184304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:00:17.720 [INFO] [Thread-184304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:00:17.723 [DEBUG] [Thread-184304] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:00:17.723 [DEBUG] [Thread-184304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:00:17.723 [DEBUG] [Thread-184304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:00:17.723 [DEBUG] [Thread-184304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:00:17.723 [DEBUG] [Thread-184304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:00:17.723 [DEBUG] [Thread-184304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:00:17.724 [DEBUG] [Thread-184304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:00:17.724 [DEBUG] [Thread-184304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:00:17.724 [DEBUG] [Thread-184304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:00:17.724 [DEBUG] [Thread-184304] [transport.py] [_log()] client lang: <none>
2026-02-14T11:00:17.724 [DEBUG] [Thread-184304] [transport.py] [_log()] server lang: <none>
2026-02-14T11:00:17.724 [DEBUG] [Thread-184304] [transport.py] [_log()] kex follows: False
2026-02-14T11:00:17.724 [DEBUG] [Thread-184304] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:00:17.724 [DEBUG] [Thread-184304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:00:17.724 [DEBUG] [Thread-184304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:00:17.724 [DEBUG] [Thread-184304] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:00:17.724 [DEBUG] [Thread-184304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:00:17.724 [DEBUG] [Thread-184304] [transport.py] [_log()] Compression: none
2026-02-14T11:00:17.725 [DEBUG] [Thread-184304] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:00:17.743 [DEBUG] [Thread-184304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:00:17.743 [DEBUG] [Thread-184304] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:00:17.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:00:17.744 [DEBUG] [Thread-184304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:00:17.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:00:17.747 [DEBUG] [Thread-184304] [transport.py] [_log()] userauth is OK
2026-02-14T11:00:17.747 [DEBUG] [Thread-184304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:00:17.747 [DEBUG] [Thread-184304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:00:17.747 [DEBUG] [Thread-184304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:00:17.747 [DEBUG] [Thread-184304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:00:17.772 [INFO] [Thread-184304] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:00:17.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:00:18.003 [DEBUG] [Thread-184306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:00:18.479 [DEBUG] [Thread-184304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:00:18.489 [DEBUG] [Thread-184304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:00:18.489 [DEBUG] [Thread-184304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:00:18.521 [DEBUG] [Thread-184304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:00:18.521 [DEBUG] [Thread-184304] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:00:18.524 [DEBUG] [Thread-184304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:00:18.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:00:18.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:00:18.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:00:18.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:00:18.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:00:18.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:00:18.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:00:18.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:00:18.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:00:18.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.374765 -999.00  +12.50  28.66     60   +5.10 1 1 1 1 1   888    0 8.59 48.05 ----- 32.7 28.7 160.6 37.2 19.3 -26.7 18.0 -24.7 17.1 -23.0 18.3 -25.3
2026-02-14T11:00:18.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:00:18.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:00:18.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.374765
2026-02-14T11:00:18.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:00:18.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:00:18.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:00:18.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:00:18.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:00:18.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T10:59:52', tmtdew=9.06, humidity=54.07, cloud=0.0, wind=33.28, temperature=12.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T08:59:39.696', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:00:18.571 [DEBUG] [Thread-184304] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:00:18.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-14T11:00:18.673 [DEBUG] [Thread-184308] [transport.py] [_log()] starting thread (client mode): 0xa57c2aa0
2026-02-14T11:00:18.673 [DEBUG] [Thread-184308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:00:18.694 [DEBUG] [Thread-184308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:00:18.694 [INFO] [Thread-184308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:00:18.706 [DEBUG] [Thread-184308] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:00:18.706 [DEBUG] [Thread-184308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:00:18.707 [DEBUG] [Thread-184308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:00:18.707 [DEBUG] [Thread-184308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:00:18.707 [DEBUG] [Thread-184308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:00:18.707 [DEBUG] [Thread-184308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:00:18.707 [DEBUG] [Thread-184308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:00:18.707 [DEBUG] [Thread-184308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:00:18.707 [DEBUG] [Thread-184308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:00:18.707 [DEBUG] [Thread-184308] [transport.py] [_log()] client lang: <none>
2026-02-14T11:00:18.707 [DEBUG] [Thread-184308] [transport.py] [_log()] server lang: <none>
2026-02-14T11:00:18.707 [DEBUG] [Thread-184308] [transport.py] [_log()] kex follows: False
2026-02-14T11:00:18.707 [DEBUG] [Thread-184308] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:00:18.707 [DEBUG] [Thread-184308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:00:18.707 [DEBUG] [Thread-184308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:00:18.708 [DEBUG] [Thread-184308] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:00:18.708 [DEBUG] [Thread-184308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:00:18.708 [DEBUG] [Thread-184308] [transport.py] [_log()] Compression: none
2026-02-14T11:00:18.708 [DEBUG] [Thread-184308] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:00:18.772 [DEBUG] [Thread-184308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:00:18.773 [DEBUG] [Thread-184308] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:00:18.773 [DEBUG] [Thread-184308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:00:18.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:00:18.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:00:18.840 [DEBUG] [Thread-184308] [transport.py] [_log()] userauth is OK
2026-02-14T11:00:18.841 [DEBUG] [Thread-184308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:00:18.841 [DEBUG] [Thread-184308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:00:18.841 [DEBUG] [Thread-184308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:00:18.841 [DEBUG] [Thread-184308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:00:18.865 [INFO] [Thread-184308] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:00:18.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-14T11:00:18.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:00:19.715 [DEBUG] [Thread-184308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:00:19.716 [DEBUG] [Thread-184308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:00:19.770 [DEBUG] [Thread-184308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:00:19.771 [DEBUG] [Thread-184308] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:00:19.786 [DEBUG] [Thread-184308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:00:19.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:00:19.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')
2026-02-14T11:00:19.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-14T11:00:19.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:00:19.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:00:19.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:00:19.851 [DEBUG] [Thread-184308] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:00:25.527 [DEBUG] [Thread-184310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:00:40.583 [DEBUG] [Thread-184311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:00:49.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:00:49.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:00:49.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T11:00:51.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 0, 27), 9.14, 53.83, 0.0, 31.06, 12.91, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:00:51.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:00:27
2026-02-14T11:00:52.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:00:52.227 [DEBUG] [Thread-184312] [transport.py] [_log()] starting thread (client mode): 0xa57c3f40
2026-02-14T11:00:52.227 [DEBUG] [Thread-184312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:00:52.248 [DEBUG] [Thread-184312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:00:52.248 [INFO] [Thread-184312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:00:52.251 [DEBUG] [Thread-184312] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:00:52.252 [DEBUG] [Thread-184312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:00:52.252 [DEBUG] [Thread-184312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:00:52.252 [DEBUG] [Thread-184312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:00:52.252 [DEBUG] [Thread-184312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:00:52.252 [DEBUG] [Thread-184312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:00:52.252 [DEBUG] [Thread-184312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:00:52.252 [DEBUG] [Thread-184312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:00:52.252 [DEBUG] [Thread-184312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:00:52.252 [DEBUG] [Thread-184312] [transport.py] [_log()] client lang: <none>
2026-02-14T11:00:52.252 [DEBUG] [Thread-184312] [transport.py] [_log()] server lang: <none>
2026-02-14T11:00:52.252 [DEBUG] [Thread-184312] [transport.py] [_log()] kex follows: False
2026-02-14T11:00:52.252 [DEBUG] [Thread-184312] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:00:52.252 [DEBUG] [Thread-184312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:00:52.252 [DEBUG] [Thread-184312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:00:52.252 [DEBUG] [Thread-184312] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:00:52.252 [DEBUG] [Thread-184312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:00:52.252 [DEBUG] [Thread-184312] [transport.py] [_log()] Compression: none
2026-02-14T11:00:52.252 [DEBUG] [Thread-184312] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:00:52.270 [DEBUG] [Thread-184312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:00:52.271 [DEBUG] [Thread-184312] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:00:52.271 [DEBUG] [Thread-184312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:00:52.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:00:52.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:00:52.314 [DEBUG] [Thread-184312] [transport.py] [_log()] userauth is OK
2026-02-14T11:00:52.314 [DEBUG] [Thread-184312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:00:52.314 [DEBUG] [Thread-184312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:00:52.314 [DEBUG] [Thread-184312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:00:52.314 [DEBUG] [Thread-184312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:00:52.345 [INFO] [Thread-184312] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:00:52.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:00:52.987 [DEBUG] [Thread-184312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:00:52.987 [DEBUG] [Thread-184312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:00:52.988 [DEBUG] [Thread-184312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:00:53.028 [DEBUG] [Thread-184312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:00:53.028 [DEBUG] [Thread-184312] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:00:53.031 [DEBUG] [Thread-184312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:00:53.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:00:53.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:00:53.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:00:53.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:00:53.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:00:53.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:00:53.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:00:53.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:00:53.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:00:53.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.375112 -999.00  +12.20  22.98     61   +5.00 1 1 1 1 1   888    0 8.57 47.72 ----- 22.3 23.0 168.0 39.8 19.3 -25.2 18.0 -25.0 17.1 -25.5 18.3 -25.3
2026-02-14T11:00:53.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:00:53.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:00:53.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.375112
2026-02-14T11:00:53.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:00:53.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:00:53.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:00:53.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:00:53.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:00:53.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:00:27', tmtdew=9.14, humidity=53.83, cloud=0.0, wind=31.06, temperature=12.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:00:09.677', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:00:53.056 [DEBUG] [Thread-184312] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:00:53.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-14T11:00:53.154 [DEBUG] [Thread-184315] [transport.py] [_log()] starting thread (client mode): 0xa57c2380
2026-02-14T11:00:53.154 [DEBUG] [Thread-184315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:00:53.168 [DEBUG] [Thread-184315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:00:53.169 [INFO] [Thread-184315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:00:53.176 [DEBUG] [Thread-184315] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:00:53.176 [DEBUG] [Thread-184315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:00:53.176 [DEBUG] [Thread-184315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:00:53.176 [DEBUG] [Thread-184315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:00:53.177 [DEBUG] [Thread-184315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:00:53.177 [DEBUG] [Thread-184315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:00:53.177 [DEBUG] [Thread-184315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:00:53.177 [DEBUG] [Thread-184315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:00:53.177 [DEBUG] [Thread-184315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:00:53.177 [DEBUG] [Thread-184315] [transport.py] [_log()] client lang: <none>
2026-02-14T11:00:53.177 [DEBUG] [Thread-184315] [transport.py] [_log()] server lang: <none>
2026-02-14T11:00:53.177 [DEBUG] [Thread-184315] [transport.py] [_log()] kex follows: False
2026-02-14T11:00:53.177 [DEBUG] [Thread-184315] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:00:53.177 [DEBUG] [Thread-184315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:00:53.177 [DEBUG] [Thread-184315] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:00:53.177 [DEBUG] [Thread-184315] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:00:53.177 [DEBUG] [Thread-184315] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:00:53.177 [DEBUG] [Thread-184315] [transport.py] [_log()] Compression: none
2026-02-14T11:00:53.177 [DEBUG] [Thread-184315] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:00:53.233 [DEBUG] [Thread-184315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:00:53.234 [DEBUG] [Thread-184315] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:00:53.234 [DEBUG] [Thread-184315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:00:53.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:00:53.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:00:53.290 [DEBUG] [Thread-184315] [transport.py] [_log()] userauth is OK
2026-02-14T11:00:53.291 [DEBUG] [Thread-184315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:00:53.291 [DEBUG] [Thread-184315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:00:53.291 [DEBUG] [Thread-184315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:00:53.291 [DEBUG] [Thread-184315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:00:53.310 [INFO] [Thread-184315] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:00:53.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-14T11:00:53.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:00:54.125 [DEBUG] [Thread-184315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:00:54.125 [DEBUG] [Thread-184315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:00:54.173 [DEBUG] [Thread-184315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:00:54.173 [DEBUG] [Thread-184315] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:00:54.182 [DEBUG] [Thread-184315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:00:54.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:00:54.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:00:54.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-14T11:00:54.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:00:54.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:00:54.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:00:54.219 [DEBUG] [Thread-184315] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:00:55.622 [DEBUG] [Thread-184317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:01:08.916 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:01:08.917 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:01:10.678 [DEBUG] [Thread-184318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:01:18.046 [DEBUG] [Thread-184319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:01:24.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:01:24.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:01:24.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-14T11:01:25.717 [DEBUG] [Thread-184320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:01:26.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 1, 2), 9.1, 53.96, 0.0, 35.75, 12.93, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:01:26.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:01:02
2026-02-14T11:01:26.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:01:26.809 [DEBUG] [Thread-184321] [transport.py] [_log()] starting thread (client mode): 0xa2d578e0
2026-02-14T11:01:26.809 [DEBUG] [Thread-184321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:01:26.830 [DEBUG] [Thread-184321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:01:26.831 [INFO] [Thread-184321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:01:26.834 [DEBUG] [Thread-184321] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:01:26.834 [DEBUG] [Thread-184321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:01:26.835 [DEBUG] [Thread-184321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:01:26.835 [DEBUG] [Thread-184321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:01:26.835 [DEBUG] [Thread-184321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:01:26.835 [DEBUG] [Thread-184321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:01:26.835 [DEBUG] [Thread-184321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:01:26.835 [DEBUG] [Thread-184321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:01:26.835 [DEBUG] [Thread-184321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:01:26.835 [DEBUG] [Thread-184321] [transport.py] [_log()] client lang: <none>
2026-02-14T11:01:26.835 [DEBUG] [Thread-184321] [transport.py] [_log()] server lang: <none>
2026-02-14T11:01:26.835 [DEBUG] [Thread-184321] [transport.py] [_log()] kex follows: False
2026-02-14T11:01:26.835 [DEBUG] [Thread-184321] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:01:26.835 [DEBUG] [Thread-184321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:01:26.835 [DEBUG] [Thread-184321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:01:26.835 [DEBUG] [Thread-184321] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:01:26.835 [DEBUG] [Thread-184321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:01:26.835 [DEBUG] [Thread-184321] [transport.py] [_log()] Compression: none
2026-02-14T11:01:26.835 [DEBUG] [Thread-184321] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:01:26.852 [DEBUG] [Thread-184321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:01:26.853 [DEBUG] [Thread-184321] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:01:26.854 [DEBUG] [Thread-184321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:01:26.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:01:26.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:01:26.856 [DEBUG] [Thread-184321] [transport.py] [_log()] userauth is OK
2026-02-14T11:01:26.856 [DEBUG] [Thread-184321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:01:26.857 [DEBUG] [Thread-184321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:01:26.857 [DEBUG] [Thread-184321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:01:26.857 [DEBUG] [Thread-184321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:01:26.875 [INFO] [Thread-184321] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:01:26.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:01:27.475 [DEBUG] [Thread-184321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:01:27.476 [DEBUG] [Thread-184321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:01:27.476 [DEBUG] [Thread-184321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:01:27.516 [DEBUG] [Thread-184321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:01:27.517 [DEBUG] [Thread-184321] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:01:27.519 [DEBUG] [Thread-184321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:01:27.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:01:27.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:01:27.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:01:27.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:01:27.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:01:27.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:01:27.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:01:27.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:01:27.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:01:27.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.375807 -999.00  +12.40  21.68     60   +5.10 1 1 1 1 1   888    0 8.44 43.51 ----- 37.8 21.7 178.4 34.4 19.1 -28.8 17.9 -25.4 17.1 -22.1 18.0 -27.4
2026-02-14T11:01:27.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:01:27.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:01:27.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.375807
2026-02-14T11:01:27.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:01:27.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:01:27.545 [DEBUG] [Thread-184321] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:01:27.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:01:27.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:01:27.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:01:27.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:01:02', tmtdew=9.1, humidity=53.96, cloud=0.0, wind=35.75, temperature=12.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:01:09.725', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:01:27.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-14T11:01:27.645 [DEBUG] [Thread-184324] [transport.py] [_log()] starting thread (client mode): 0xa2ddd390
2026-02-14T11:01:27.646 [DEBUG] [Thread-184324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:01:27.661 [DEBUG] [Thread-184324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:01:27.661 [INFO] [Thread-184324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:01:27.669 [DEBUG] [Thread-184324] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:01:27.669 [DEBUG] [Thread-184324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:01:27.669 [DEBUG] [Thread-184324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:01:27.670 [DEBUG] [Thread-184324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:01:27.670 [DEBUG] [Thread-184324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:01:27.670 [DEBUG] [Thread-184324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:01:27.670 [DEBUG] [Thread-184324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:01:27.670 [DEBUG] [Thread-184324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:01:27.670 [DEBUG] [Thread-184324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:01:27.670 [DEBUG] [Thread-184324] [transport.py] [_log()] client lang: <none>
2026-02-14T11:01:27.670 [DEBUG] [Thread-184324] [transport.py] [_log()] server lang: <none>
2026-02-14T11:01:27.670 [DEBUG] [Thread-184324] [transport.py] [_log()] kex follows: False
2026-02-14T11:01:27.670 [DEBUG] [Thread-184324] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:01:27.670 [DEBUG] [Thread-184324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:01:27.670 [DEBUG] [Thread-184324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:01:27.670 [DEBUG] [Thread-184324] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:01:27.670 [DEBUG] [Thread-184324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:01:27.670 [DEBUG] [Thread-184324] [transport.py] [_log()] Compression: none
2026-02-14T11:01:27.670 [DEBUG] [Thread-184324] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:01:27.731 [DEBUG] [Thread-184324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:01:27.732 [DEBUG] [Thread-184324] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:01:27.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:01:27.733 [DEBUG] [Thread-184324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:01:27.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:01:27.790 [DEBUG] [Thread-184324] [transport.py] [_log()] userauth is OK
2026-02-14T11:01:27.790 [DEBUG] [Thread-184324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:01:27.791 [DEBUG] [Thread-184324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:01:27.791 [DEBUG] [Thread-184324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:01:27.791 [DEBUG] [Thread-184324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:01:27.812 [INFO] [Thread-184324] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:01:27.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-14T11:01:27.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:01:28.622 [DEBUG] [Thread-184324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:01:28.622 [DEBUG] [Thread-184324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:01:28.671 [DEBUG] [Thread-184324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:01:28.671 [DEBUG] [Thread-184324] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:01:28.681 [DEBUG] [Thread-184324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:01:28.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:01:28.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-14T11:01:28.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:01:28.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:01:28.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:01:28.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:01:28.718 [DEBUG] [Thread-184324] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:01:40.756 [DEBUG] [Thread-184326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:01:55.817 [DEBUG] [Thread-184327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:01:58.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:01:58.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:01:58.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T11:02:00.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 1, 37), 9.34, 53.05, 0.0, 28.12, 13.19, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:02:00.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:01:37
2026-02-14T11:02:00.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:02:01.090 [DEBUG] [Thread-184328] [transport.py] [_log()] starting thread (client mode): 0xa57411b0
2026-02-14T11:02:01.091 [DEBUG] [Thread-184328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:02:01.111 [DEBUG] [Thread-184328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:02:01.111 [INFO] [Thread-184328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:02:01.114 [DEBUG] [Thread-184328] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:02:01.114 [DEBUG] [Thread-184328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:02:01.114 [DEBUG] [Thread-184328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:02:01.114 [DEBUG] [Thread-184328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:02:01.114 [DEBUG] [Thread-184328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:02:01.114 [DEBUG] [Thread-184328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:02:01.114 [DEBUG] [Thread-184328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:02:01.114 [DEBUG] [Thread-184328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:02:01.114 [DEBUG] [Thread-184328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:02:01.114 [DEBUG] [Thread-184328] [transport.py] [_log()] client lang: <none>
2026-02-14T11:02:01.114 [DEBUG] [Thread-184328] [transport.py] [_log()] server lang: <none>
2026-02-14T11:02:01.114 [DEBUG] [Thread-184328] [transport.py] [_log()] kex follows: False
2026-02-14T11:02:01.114 [DEBUG] [Thread-184328] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:02:01.114 [DEBUG] [Thread-184328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:02:01.114 [DEBUG] [Thread-184328] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:02:01.114 [DEBUG] [Thread-184328] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:02:01.114 [DEBUG] [Thread-184328] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:02:01.114 [DEBUG] [Thread-184328] [transport.py] [_log()] Compression: none
2026-02-14T11:02:01.114 [DEBUG] [Thread-184328] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:02:01.132 [DEBUG] [Thread-184328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:02:01.132 [DEBUG] [Thread-184328] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:02:01.133 [DEBUG] [Thread-184328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:02:01.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:02:01.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:02:01.135 [DEBUG] [Thread-184328] [transport.py] [_log()] userauth is OK
2026-02-14T11:02:01.135 [DEBUG] [Thread-184328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:02:01.135 [DEBUG] [Thread-184328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:02:01.135 [DEBUG] [Thread-184328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:02:01.135 [DEBUG] [Thread-184328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:02:01.160 [INFO] [Thread-184328] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:02:01.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:02:01.758 [DEBUG] [Thread-184328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:02:01.767 [DEBUG] [Thread-184328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:02:01.768 [DEBUG] [Thread-184328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:02:01.799 [DEBUG] [Thread-184328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:02:01.799 [DEBUG] [Thread-184328] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:02:01.801 [DEBUG] [Thread-184328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:02:01.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:02:01.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:02:01.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:02:01.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:02:01.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:02:01.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:02:01.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:02:01.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:02:01.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:02:01.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.376154 -999.00  +12.40  24.05     60   +4.90 1 1 1 1 1   888    0 8.54 47.64 ----- 24.2 24.1 179.4 43.7 18.9 -26.1 17.3 -28.0 16.9 -26.1 17.9 -25.3
2026-02-14T11:02:01.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:02:01.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:02:01.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.376154
2026-02-14T11:02:01.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:02:01.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:02:01.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:02:01.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:02:01.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:02:01.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:01:37', tmtdew=9.34, humidity=53.05, cloud=0.0, wind=28.12, temperature=13.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:01:39.706', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:02:01.819 [DEBUG] [Thread-184328] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:02:01.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-14T11:02:01.905 [DEBUG] [Thread-184331] [transport.py] [_log()] starting thread (client mode): 0xa2d3d030
2026-02-14T11:02:01.905 [DEBUG] [Thread-184331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:02:01.920 [DEBUG] [Thread-184331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:02:01.920 [INFO] [Thread-184331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:02:01.927 [DEBUG] [Thread-184331] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:02:01.928 [DEBUG] [Thread-184331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:02:01.928 [DEBUG] [Thread-184331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:02:01.928 [DEBUG] [Thread-184331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:02:01.928 [DEBUG] [Thread-184331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:02:01.928 [DEBUG] [Thread-184331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:02:01.928 [DEBUG] [Thread-184331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:02:01.928 [DEBUG] [Thread-184331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:02:01.928 [DEBUG] [Thread-184331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:02:01.928 [DEBUG] [Thread-184331] [transport.py] [_log()] client lang: <none>
2026-02-14T11:02:01.928 [DEBUG] [Thread-184331] [transport.py] [_log()] server lang: <none>
2026-02-14T11:02:01.928 [DEBUG] [Thread-184331] [transport.py] [_log()] kex follows: False
2026-02-14T11:02:01.928 [DEBUG] [Thread-184331] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:02:01.928 [DEBUG] [Thread-184331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:02:01.928 [DEBUG] [Thread-184331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:02:01.928 [DEBUG] [Thread-184331] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:02:01.928 [DEBUG] [Thread-184331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:02:01.928 [DEBUG] [Thread-184331] [transport.py] [_log()] Compression: none
2026-02-14T11:02:01.928 [DEBUG] [Thread-184331] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:02:01.985 [DEBUG] [Thread-184331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:02:01.986 [DEBUG] [Thread-184331] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:02:01.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:02:01.987 [DEBUG] [Thread-184331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:02:01.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:02:02.047 [DEBUG] [Thread-184331] [transport.py] [_log()] userauth is OK
2026-02-14T11:02:02.047 [DEBUG] [Thread-184331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:02:02.047 [DEBUG] [Thread-184331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:02:02.047 [DEBUG] [Thread-184331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:02:02.047 [DEBUG] [Thread-184331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:02:02.066 [INFO] [Thread-184331] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:02:02.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-14T11:02:02.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:02:02.908 [DEBUG] [Thread-184331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:02:02.908 [DEBUG] [Thread-184331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:02:02.957 [DEBUG] [Thread-184331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:02:02.957 [DEBUG] [Thread-184331] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:02:02.966 [DEBUG] [Thread-184331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:02:02.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:02:02.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-14T11:02:02.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:02:02.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:02:02.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:02:02.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:02:03.003 [DEBUG] [Thread-184331] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:02:09.055 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:02:09.056 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:02:10.856 [DEBUG] [Thread-184333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:02:18.080 [DEBUG] [Thread-184334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:02:25.913 [DEBUG] [Thread-184335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:02:33.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:02:33.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:02:33.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-14T11:02:34.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 2, 12), 8.53, 56.05, 0.0, 33.05, 12.2, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:02:34.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:02:12
2026-02-14T11:02:35.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:02:35.378 [DEBUG] [Thread-184336] [transport.py] [_log()] starting thread (client mode): 0xa2d1b190
2026-02-14T11:02:35.378 [DEBUG] [Thread-184336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:02:35.398 [DEBUG] [Thread-184336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:02:35.398 [INFO] [Thread-184336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:02:35.401 [DEBUG] [Thread-184336] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:02:35.401 [DEBUG] [Thread-184336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:02:35.401 [DEBUG] [Thread-184336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:02:35.401 [DEBUG] [Thread-184336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:02:35.401 [DEBUG] [Thread-184336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:02:35.401 [DEBUG] [Thread-184336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:02:35.401 [DEBUG] [Thread-184336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:02:35.402 [DEBUG] [Thread-184336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:02:35.402 [DEBUG] [Thread-184336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:02:35.402 [DEBUG] [Thread-184336] [transport.py] [_log()] client lang: <none>
2026-02-14T11:02:35.402 [DEBUG] [Thread-184336] [transport.py] [_log()] server lang: <none>
2026-02-14T11:02:35.402 [DEBUG] [Thread-184336] [transport.py] [_log()] kex follows: False
2026-02-14T11:02:35.402 [DEBUG] [Thread-184336] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:02:35.402 [DEBUG] [Thread-184336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:02:35.402 [DEBUG] [Thread-184336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:02:35.402 [DEBUG] [Thread-184336] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:02:35.402 [DEBUG] [Thread-184336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:02:35.402 [DEBUG] [Thread-184336] [transport.py] [_log()] Compression: none
2026-02-14T11:02:35.402 [DEBUG] [Thread-184336] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:02:35.422 [DEBUG] [Thread-184336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:02:35.423 [DEBUG] [Thread-184336] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:02:35.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:02:35.424 [DEBUG] [Thread-184336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:02:35.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:02:35.427 [DEBUG] [Thread-184336] [transport.py] [_log()] userauth is OK
2026-02-14T11:02:35.428 [DEBUG] [Thread-184336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:02:35.428 [DEBUG] [Thread-184336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:02:35.428 [DEBUG] [Thread-184336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:02:35.428 [DEBUG] [Thread-184336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:02:35.453 [INFO] [Thread-184336] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:02:35.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:02:36.081 [DEBUG] [Thread-184336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:02:36.081 [DEBUG] [Thread-184336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:02:36.082 [DEBUG] [Thread-184336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:02:36.122 [DEBUG] [Thread-184336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:02:36.123 [DEBUG] [Thread-184336] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:02:36.126 [DEBUG] [Thread-184336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:02:36.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:02:36.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:02:36.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:02:36.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:02:36.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:02:36.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:02:36.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:02:36.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:02:36.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:02:36.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.376501 -999.00  +12.30  25.07     61   +5.00 1 1 1 1 1   888    0 8.72 51.51 ----- 26.5 25.1 162.4 40.6 19.1 -24.4 17.4 -24.7 16.9 -23.7 18.1 -24.0
2026-02-14T11:02:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:02:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:02:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.376501
2026-02-14T11:02:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:02:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:02:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:02:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:02:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:02:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:02:12', tmtdew=8.53, humidity=56.05, cloud=0.0, wind=33.05, temperature=12.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:02:09.686', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:02:36.153 [DEBUG] [Thread-184336] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:02:36.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-14T11:02:36.261 [DEBUG] [Thread-184339] [transport.py] [_log()] starting thread (client mode): 0xa2d1b550
2026-02-14T11:02:36.261 [DEBUG] [Thread-184339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:02:36.276 [DEBUG] [Thread-184339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:02:36.277 [INFO] [Thread-184339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:02:36.284 [DEBUG] [Thread-184339] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:02:36.284 [DEBUG] [Thread-184339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:02:36.284 [DEBUG] [Thread-184339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:02:36.284 [DEBUG] [Thread-184339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:02:36.285 [DEBUG] [Thread-184339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:02:36.285 [DEBUG] [Thread-184339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:02:36.285 [DEBUG] [Thread-184339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:02:36.285 [DEBUG] [Thread-184339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:02:36.285 [DEBUG] [Thread-184339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:02:36.285 [DEBUG] [Thread-184339] [transport.py] [_log()] client lang: <none>
2026-02-14T11:02:36.285 [DEBUG] [Thread-184339] [transport.py] [_log()] server lang: <none>
2026-02-14T11:02:36.285 [DEBUG] [Thread-184339] [transport.py] [_log()] kex follows: False
2026-02-14T11:02:36.285 [DEBUG] [Thread-184339] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:02:36.285 [DEBUG] [Thread-184339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:02:36.285 [DEBUG] [Thread-184339] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:02:36.285 [DEBUG] [Thread-184339] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:02:36.285 [DEBUG] [Thread-184339] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:02:36.285 [DEBUG] [Thread-184339] [transport.py] [_log()] Compression: none
2026-02-14T11:02:36.285 [DEBUG] [Thread-184339] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:02:36.344 [DEBUG] [Thread-184339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:02:36.345 [DEBUG] [Thread-184339] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:02:36.346 [DEBUG] [Thread-184339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:02:36.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:02:36.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:02:36.400 [DEBUG] [Thread-184339] [transport.py] [_log()] userauth is OK
2026-02-14T11:02:36.401 [DEBUG] [Thread-184339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:02:36.401 [DEBUG] [Thread-184339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:02:36.401 [DEBUG] [Thread-184339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:02:36.401 [DEBUG] [Thread-184339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:02:36.420 [INFO] [Thread-184339] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:02:36.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-14T11:02:36.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:02:37.243 [DEBUG] [Thread-184339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:02:37.244 [DEBUG] [Thread-184339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:02:37.291 [DEBUG] [Thread-184339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:02:37.292 [DEBUG] [Thread-184339] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:02:37.301 [DEBUG] [Thread-184339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:02:37.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:02:37.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:02:37.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-14T11:02:37.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:02:37.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:02:37.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:02:37.338 [DEBUG] [Thread-184339] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:02:40.950 [DEBUG] [Thread-184341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:02:56.004 [DEBUG] [Thread-184342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:03:07.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:03:07.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:03:07.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-14T11:03:09.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 2, 48), 9.06, 54.11, 0.0, 29.57, 12.83, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:03:09.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:02:48
2026-02-14T11:03:09.197 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:03:09.198 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:03:09.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:03:09.540 [DEBUG] [Thread-184343] [transport.py] [_log()] starting thread (client mode): 0xa2d109a0
2026-02-14T11:03:09.540 [DEBUG] [Thread-184343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:03:09.560 [DEBUG] [Thread-184343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:03:09.560 [INFO] [Thread-184343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:03:09.563 [DEBUG] [Thread-184343] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:03:09.563 [DEBUG] [Thread-184343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:03:09.564 [DEBUG] [Thread-184343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:03:09.564 [DEBUG] [Thread-184343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:03:09.564 [DEBUG] [Thread-184343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:03:09.564 [DEBUG] [Thread-184343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:03:09.564 [DEBUG] [Thread-184343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:03:09.564 [DEBUG] [Thread-184343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:03:09.564 [DEBUG] [Thread-184343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:03:09.564 [DEBUG] [Thread-184343] [transport.py] [_log()] client lang: <none>
2026-02-14T11:03:09.564 [DEBUG] [Thread-184343] [transport.py] [_log()] server lang: <none>
2026-02-14T11:03:09.564 [DEBUG] [Thread-184343] [transport.py] [_log()] kex follows: False
2026-02-14T11:03:09.564 [DEBUG] [Thread-184343] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:03:09.564 [DEBUG] [Thread-184343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:03:09.564 [DEBUG] [Thread-184343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:03:09.565 [DEBUG] [Thread-184343] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:03:09.565 [DEBUG] [Thread-184343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:03:09.565 [DEBUG] [Thread-184343] [transport.py] [_log()] Compression: none
2026-02-14T11:03:09.565 [DEBUG] [Thread-184343] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:03:09.583 [DEBUG] [Thread-184343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:03:09.584 [DEBUG] [Thread-184343] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:03:09.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:03:09.586 [DEBUG] [Thread-184343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:03:09.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:03:09.626 [DEBUG] [Thread-184343] [transport.py] [_log()] userauth is OK
2026-02-14T11:03:09.626 [DEBUG] [Thread-184343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:03:09.626 [DEBUG] [Thread-184343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:03:09.627 [DEBUG] [Thread-184343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:03:09.627 [DEBUG] [Thread-184343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:03:09.647 [INFO] [Thread-184343] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:03:09.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:03:10.271 [DEBUG] [Thread-184343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:03:10.271 [DEBUG] [Thread-184343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:03:10.272 [DEBUG] [Thread-184343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:03:10.312 [DEBUG] [Thread-184343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:03:10.312 [DEBUG] [Thread-184343] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:03:10.316 [DEBUG] [Thread-184343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:03:10.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:03:10.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:03:10.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:03:10.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:03:10.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:03:10.340 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:03:10.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:03:10.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:03:10.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:03:10.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.376848 -999.00  +12.60  15.80     61   +5.30 1 1 1 1 1   888    0 8.71 51.68 ----- 14.9 15.8 154.4 30.5 18.9 -23.5 17.2 -29.5 16.9 -24.6 17.9 -22.5
2026-02-14T11:03:10.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:03:10.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:03:10.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.376848
2026-02-14T11:03:10.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:03:10.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:03:10.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:03:10.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:03:10.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:03:10.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:02:48', tmtdew=9.06, humidity=54.11, cloud=0.0, wind=29.57, temperature=12.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:02:39.667', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:03:10.343 [DEBUG] [Thread-184343] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:03:10.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-14T11:03:10.441 [DEBUG] [Thread-184346] [transport.py] [_log()] starting thread (client mode): 0xa2d118a0
2026-02-14T11:03:10.441 [DEBUG] [Thread-184346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:03:10.457 [DEBUG] [Thread-184346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:03:10.457 [INFO] [Thread-184346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:03:10.466 [DEBUG] [Thread-184346] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:03:10.467 [DEBUG] [Thread-184346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:03:10.467 [DEBUG] [Thread-184346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:03:10.467 [DEBUG] [Thread-184346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:03:10.467 [DEBUG] [Thread-184346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:03:10.467 [DEBUG] [Thread-184346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:03:10.467 [DEBUG] [Thread-184346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:03:10.467 [DEBUG] [Thread-184346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:03:10.467 [DEBUG] [Thread-184346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:03:10.467 [DEBUG] [Thread-184346] [transport.py] [_log()] client lang: <none>
2026-02-14T11:03:10.467 [DEBUG] [Thread-184346] [transport.py] [_log()] server lang: <none>
2026-02-14T11:03:10.467 [DEBUG] [Thread-184346] [transport.py] [_log()] kex follows: False
2026-02-14T11:03:10.467 [DEBUG] [Thread-184346] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:03:10.467 [DEBUG] [Thread-184346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:03:10.468 [DEBUG] [Thread-184346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:03:10.468 [DEBUG] [Thread-184346] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:03:10.468 [DEBUG] [Thread-184346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:03:10.468 [DEBUG] [Thread-184346] [transport.py] [_log()] Compression: none
2026-02-14T11:03:10.468 [DEBUG] [Thread-184346] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:03:10.526 [DEBUG] [Thread-184346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:03:10.527 [DEBUG] [Thread-184346] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:03:10.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:03:10.528 [DEBUG] [Thread-184346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:03:10.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:03:10.586 [DEBUG] [Thread-184346] [transport.py] [_log()] userauth is OK
2026-02-14T11:03:10.586 [DEBUG] [Thread-184346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:03:10.586 [DEBUG] [Thread-184346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:03:10.586 [DEBUG] [Thread-184346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:03:10.586 [DEBUG] [Thread-184346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:03:10.605 [INFO] [Thread-184346] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:03:10.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-14T11:03:10.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:03:11.042 [DEBUG] [Thread-184348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:03:11.411 [DEBUG] [Thread-184346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:03:11.411 [DEBUG] [Thread-184346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:03:11.463 [DEBUG] [Thread-184346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:03:11.463 [DEBUG] [Thread-184346] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:03:11.475 [DEBUG] [Thread-184346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:03:11.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:03:11.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-14T11:03:11.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-14T11:03:11.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:03:11.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:03:11.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:03:11.520 [DEBUG] [Thread-184346] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:03:18.130 [DEBUG] [Thread-184349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:03:26.097 [DEBUG] [Thread-184350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:03:41.136 [DEBUG] [Thread-184351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:03:41.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:03:41.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:03:41.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-14T11:03:43.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 3, 23), 9.06, 54.07, 0.0, 31.04, 12.76, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:03:43.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:03:23
2026-02-14T11:03:43.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:03:43.888 [DEBUG] [Thread-184352] [transport.py] [_log()] starting thread (client mode): 0xa2ddfe80
2026-02-14T11:03:43.888 [DEBUG] [Thread-184352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:03:43.909 [DEBUG] [Thread-184352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:03:43.909 [INFO] [Thread-184352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:03:43.912 [DEBUG] [Thread-184352] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:03:43.912 [DEBUG] [Thread-184352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:03:43.912 [DEBUG] [Thread-184352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:03:43.912 [DEBUG] [Thread-184352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:03:43.912 [DEBUG] [Thread-184352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:03:43.912 [DEBUG] [Thread-184352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:03:43.912 [DEBUG] [Thread-184352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:03:43.913 [DEBUG] [Thread-184352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:03:43.913 [DEBUG] [Thread-184352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:03:43.913 [DEBUG] [Thread-184352] [transport.py] [_log()] client lang: <none>
2026-02-14T11:03:43.913 [DEBUG] [Thread-184352] [transport.py] [_log()] server lang: <none>
2026-02-14T11:03:43.913 [DEBUG] [Thread-184352] [transport.py] [_log()] kex follows: False
2026-02-14T11:03:43.913 [DEBUG] [Thread-184352] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:03:43.913 [DEBUG] [Thread-184352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:03:43.913 [DEBUG] [Thread-184352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:03:43.913 [DEBUG] [Thread-184352] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:03:43.913 [DEBUG] [Thread-184352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:03:43.913 [DEBUG] [Thread-184352] [transport.py] [_log()] Compression: none
2026-02-14T11:03:43.913 [DEBUG] [Thread-184352] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:03:43.927 [DEBUG] [Thread-184352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:03:43.928 [DEBUG] [Thread-184352] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:03:43.928 [DEBUG] [Thread-184352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:03:43.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:03:43.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:03:43.930 [DEBUG] [Thread-184352] [transport.py] [_log()] userauth is OK
2026-02-14T11:03:43.930 [DEBUG] [Thread-184352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:03:43.930 [DEBUG] [Thread-184352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:03:43.930 [DEBUG] [Thread-184352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:03:43.930 [DEBUG] [Thread-184352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:03:43.949 [INFO] [Thread-184352] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:03:43.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:03:44.571 [DEBUG] [Thread-184352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:03:44.571 [DEBUG] [Thread-184352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:03:44.572 [DEBUG] [Thread-184352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:03:44.613 [DEBUG] [Thread-184352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:03:44.613 [DEBUG] [Thread-184352] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:03:44.616 [DEBUG] [Thread-184352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:03:44.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:03:44.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:03:44.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:03:44.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:03:44.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:03:44.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:03:44.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:03:44.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:03:44.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:03:44.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.377196 -999.00  +12.80  29.29     59   +5.10 1 2 1 1 1   888    0 8.80 53.83 ----- 23.0 29.3 184.2 37.5 19.0 -24.5 17.6 -23.4 17.1 -22.1 18.0 -23.5
2026-02-14T11:03:44.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:03:44.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:03:44.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.377196
2026-02-14T11:03:44.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:03:44.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:03:44.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:03:44.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:03:44.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:03:44.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:03:23', tmtdew=9.06, humidity=54.07, cloud=0.0, wind=31.04, temperature=12.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:03:09.734', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:03:44.644 [DEBUG] [Thread-184352] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:03:44.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-14T11:03:44.743 [DEBUG] [Thread-184355] [transport.py] [_log()] starting thread (client mode): 0xa2d3d780
2026-02-14T11:03:44.743 [DEBUG] [Thread-184355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:03:44.757 [DEBUG] [Thread-184355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:03:44.758 [INFO] [Thread-184355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:03:44.765 [DEBUG] [Thread-184355] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:03:44.765 [DEBUG] [Thread-184355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:03:44.766 [DEBUG] [Thread-184355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:03:44.766 [DEBUG] [Thread-184355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:03:44.766 [DEBUG] [Thread-184355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:03:44.766 [DEBUG] [Thread-184355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:03:44.766 [DEBUG] [Thread-184355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:03:44.766 [DEBUG] [Thread-184355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:03:44.766 [DEBUG] [Thread-184355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:03:44.766 [DEBUG] [Thread-184355] [transport.py] [_log()] client lang: <none>
2026-02-14T11:03:44.766 [DEBUG] [Thread-184355] [transport.py] [_log()] server lang: <none>
2026-02-14T11:03:44.766 [DEBUG] [Thread-184355] [transport.py] [_log()] kex follows: False
2026-02-14T11:03:44.766 [DEBUG] [Thread-184355] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:03:44.766 [DEBUG] [Thread-184355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:03:44.766 [DEBUG] [Thread-184355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:03:44.766 [DEBUG] [Thread-184355] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:03:44.766 [DEBUG] [Thread-184355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:03:44.766 [DEBUG] [Thread-184355] [transport.py] [_log()] Compression: none
2026-02-14T11:03:44.766 [DEBUG] [Thread-184355] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:03:44.823 [DEBUG] [Thread-184355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:03:44.823 [DEBUG] [Thread-184355] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:03:44.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:03:44.825 [DEBUG] [Thread-184355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:03:44.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:03:44.880 [DEBUG] [Thread-184355] [transport.py] [_log()] userauth is OK
2026-02-14T11:03:44.880 [DEBUG] [Thread-184355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:03:44.880 [DEBUG] [Thread-184355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:03:44.881 [DEBUG] [Thread-184355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:03:44.881 [DEBUG] [Thread-184355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:03:44.900 [INFO] [Thread-184355] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:03:44.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T11:03:44.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:03:45.704 [DEBUG] [Thread-184355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:03:45.704 [DEBUG] [Thread-184355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:03:45.751 [DEBUG] [Thread-184355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:03:45.752 [DEBUG] [Thread-184355] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:03:45.761 [DEBUG] [Thread-184355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:03:45.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:03:45.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-14T11:03:45.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-14T11:03:45.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:03:45.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:03:45.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:03:45.797 [DEBUG] [Thread-184355] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:03:56.175 [DEBUG] [Thread-184357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:04:09.337 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:04:09.338 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:04:11.227 [DEBUG] [Thread-184358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:04:15.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:04:15.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:04:15.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-14T11:04:17.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 3, 58), 8.96, 54.46, 0.0, 37.04, 12.55, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:04:17.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:03:58
2026-02-14T11:04:18.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:04:18.157 [DEBUG] [Thread-184359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:04:18.197 [DEBUG] [Thread-184360] [transport.py] [_log()] starting thread (client mode): 0xa2d18130
2026-02-14T11:04:18.197 [DEBUG] [Thread-184360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:04:18.218 [DEBUG] [Thread-184360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:04:18.218 [INFO] [Thread-184360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:04:18.221 [DEBUG] [Thread-184360] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:04:18.221 [DEBUG] [Thread-184360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:04:18.221 [DEBUG] [Thread-184360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:04:18.221 [DEBUG] [Thread-184360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:04:18.221 [DEBUG] [Thread-184360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:04:18.221 [DEBUG] [Thread-184360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:04:18.221 [DEBUG] [Thread-184360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:04:18.221 [DEBUG] [Thread-184360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:04:18.221 [DEBUG] [Thread-184360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:04:18.221 [DEBUG] [Thread-184360] [transport.py] [_log()] client lang: <none>
2026-02-14T11:04:18.221 [DEBUG] [Thread-184360] [transport.py] [_log()] server lang: <none>
2026-02-14T11:04:18.221 [DEBUG] [Thread-184360] [transport.py] [_log()] kex follows: False
2026-02-14T11:04:18.221 [DEBUG] [Thread-184360] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:04:18.222 [DEBUG] [Thread-184360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:04:18.222 [DEBUG] [Thread-184360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:04:18.222 [DEBUG] [Thread-184360] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:04:18.222 [DEBUG] [Thread-184360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:04:18.222 [DEBUG] [Thread-184360] [transport.py] [_log()] Compression: none
2026-02-14T11:04:18.222 [DEBUG] [Thread-184360] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:04:18.241 [DEBUG] [Thread-184360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:04:18.241 [DEBUG] [Thread-184360] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:04:18.242 [DEBUG] [Thread-184360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:04:18.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:04:18.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:04:18.244 [DEBUG] [Thread-184360] [transport.py] [_log()] userauth is OK
2026-02-14T11:04:18.244 [DEBUG] [Thread-184360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:04:18.244 [DEBUG] [Thread-184360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:04:18.244 [DEBUG] [Thread-184360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:04:18.244 [DEBUG] [Thread-184360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:04:18.290 [INFO] [Thread-184360] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:04:18.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:04:19.098 [DEBUG] [Thread-184360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:04:19.098 [DEBUG] [Thread-184360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:04:19.098 [DEBUG] [Thread-184360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:04:19.138 [DEBUG] [Thread-184360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:04:19.138 [DEBUG] [Thread-184360] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:04:19.142 [DEBUG] [Thread-184360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:04:19.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:04:19.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:04:19.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:04:19.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:04:19.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:04:19.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:04:19.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:04:19.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:04:19.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:04:19.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.377543 -999.00  +12.80  20.48     59   +5.00 1 1 1 1 1   888    0 9.04 61.31 ----- 22.5 20.5 165.0 40.2 19.2 -23.7 17.5 -23.9 17.0 -23.8 18.2 -23.0
2026-02-14T11:04:19.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:04:19.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:04:19.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.377543
2026-02-14T11:04:19.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:04:19.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:04:19.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:04:19.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:04:19.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:04:19.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:03:58', tmtdew=8.96, humidity=54.46, cloud=0.0, wind=37.04, temperature=12.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:03:39.715', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:04:19.168 [DEBUG] [Thread-184360] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:04:19.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T11:04:19.264 [DEBUG] [Thread-184363] [transport.py] [_log()] starting thread (client mode): 0xa2db5000
2026-02-14T11:04:19.264 [DEBUG] [Thread-184363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:04:19.278 [DEBUG] [Thread-184363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:04:19.279 [INFO] [Thread-184363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:04:19.289 [DEBUG] [Thread-184363] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:04:19.289 [DEBUG] [Thread-184363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:04:19.289 [DEBUG] [Thread-184363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:04:19.290 [DEBUG] [Thread-184363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:04:19.290 [DEBUG] [Thread-184363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:04:19.290 [DEBUG] [Thread-184363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:04:19.290 [DEBUG] [Thread-184363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:04:19.290 [DEBUG] [Thread-184363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:04:19.290 [DEBUG] [Thread-184363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:04:19.290 [DEBUG] [Thread-184363] [transport.py] [_log()] client lang: <none>
2026-02-14T11:04:19.290 [DEBUG] [Thread-184363] [transport.py] [_log()] server lang: <none>
2026-02-14T11:04:19.290 [DEBUG] [Thread-184363] [transport.py] [_log()] kex follows: False
2026-02-14T11:04:19.291 [DEBUG] [Thread-184363] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:04:19.291 [DEBUG] [Thread-184363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:04:19.291 [DEBUG] [Thread-184363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:04:19.291 [DEBUG] [Thread-184363] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:04:19.291 [DEBUG] [Thread-184363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:04:19.291 [DEBUG] [Thread-184363] [transport.py] [_log()] Compression: none
2026-02-14T11:04:19.291 [DEBUG] [Thread-184363] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:04:19.348 [DEBUG] [Thread-184363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:04:19.349 [DEBUG] [Thread-184363] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:04:19.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:04:19.350 [DEBUG] [Thread-184363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:04:19.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:04:19.409 [DEBUG] [Thread-184363] [transport.py] [_log()] userauth is OK
2026-02-14T11:04:19.409 [DEBUG] [Thread-184363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:04:19.409 [DEBUG] [Thread-184363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:04:19.409 [DEBUG] [Thread-184363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:04:19.409 [DEBUG] [Thread-184363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:04:19.430 [INFO] [Thread-184363] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:04:19.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-14T11:04:19.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:04:20.260 [DEBUG] [Thread-184363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:04:20.260 [DEBUG] [Thread-184363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:04:20.309 [DEBUG] [Thread-184363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:04:20.309 [DEBUG] [Thread-184363] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:04:20.319 [DEBUG] [Thread-184363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:04:20.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:04:20.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-14T11:04:20.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-14T11:04:20.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:04:20.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:04:20.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:04:20.357 [DEBUG] [Thread-184363] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:04:26.263 [DEBUG] [Thread-184365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:04:41.312 [DEBUG] [Thread-184366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:04:50.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:04:50.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:04:50.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-14T11:04:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 4, 33), 9.37, 53.02, 0.0, 40.54, 13.39, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:04:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:04:33
2026-02-14T11:04:52.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:04:52.784 [DEBUG] [Thread-184367] [transport.py] [_log()] starting thread (client mode): 0xa2db6410
2026-02-14T11:04:52.785 [DEBUG] [Thread-184367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:04:52.804 [DEBUG] [Thread-184367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:04:52.804 [INFO] [Thread-184367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:04:52.807 [DEBUG] [Thread-184367] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:04:52.808 [DEBUG] [Thread-184367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:04:52.808 [DEBUG] [Thread-184367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:04:52.808 [DEBUG] [Thread-184367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:04:52.808 [DEBUG] [Thread-184367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:04:52.808 [DEBUG] [Thread-184367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:04:52.808 [DEBUG] [Thread-184367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:04:52.808 [DEBUG] [Thread-184367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:04:52.808 [DEBUG] [Thread-184367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:04:52.808 [DEBUG] [Thread-184367] [transport.py] [_log()] client lang: <none>
2026-02-14T11:04:52.808 [DEBUG] [Thread-184367] [transport.py] [_log()] server lang: <none>
2026-02-14T11:04:52.808 [DEBUG] [Thread-184367] [transport.py] [_log()] kex follows: False
2026-02-14T11:04:52.808 [DEBUG] [Thread-184367] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:04:52.808 [DEBUG] [Thread-184367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:04:52.809 [DEBUG] [Thread-184367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:04:52.809 [DEBUG] [Thread-184367] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:04:52.809 [DEBUG] [Thread-184367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:04:52.809 [DEBUG] [Thread-184367] [transport.py] [_log()] Compression: none
2026-02-14T11:04:52.809 [DEBUG] [Thread-184367] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:04:52.828 [DEBUG] [Thread-184367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:04:52.829 [DEBUG] [Thread-184367] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:04:52.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:04:52.831 [DEBUG] [Thread-184367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:04:52.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:04:52.833 [DEBUG] [Thread-184367] [transport.py] [_log()] userauth is OK
2026-02-14T11:04:52.833 [DEBUG] [Thread-184367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:04:52.834 [DEBUG] [Thread-184367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:04:52.834 [DEBUG] [Thread-184367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:04:52.834 [DEBUG] [Thread-184367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:04:52.857 [INFO] [Thread-184367] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:04:52.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:04:53.461 [DEBUG] [Thread-184367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:04:53.462 [DEBUG] [Thread-184367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:04:53.462 [DEBUG] [Thread-184367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:04:53.503 [DEBUG] [Thread-184367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:04:53.503 [DEBUG] [Thread-184367] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:04:53.506 [DEBUG] [Thread-184367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:04:53.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:04:53.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:04:53.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:04:53.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:04:53.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:04:53.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:04:53.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:04:53.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:04:53.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:04:53.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.377890 -999.00  +13.10  22.15     58   +5.00 1 1 1 1 1   888    0 9.12 61.66 ----- 23.6 22.1 178.2 27.6 19.1 -25.9 18.1 -26.5 17.3 -21.5 18.1 -25.0
2026-02-14T11:04:53.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:04:53.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:04:53.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.377890
2026-02-14T11:04:53.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:04:53.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:04:53.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:04:53.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:04:53.533 [DEBUG] [Thread-184367] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:04:53.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:04:53.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:04:33', tmtdew=9.37, humidity=53.02, cloud=0.0, wind=40.54, temperature=13.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:04:09.696', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:04:53.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-14T11:04:53.631 [DEBUG] [Thread-184370] [transport.py] [_log()] starting thread (client mode): 0xa5743fd0
2026-02-14T11:04:53.631 [DEBUG] [Thread-184370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:04:53.648 [DEBUG] [Thread-184370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:04:53.648 [INFO] [Thread-184370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:04:53.657 [DEBUG] [Thread-184370] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:04:53.657 [DEBUG] [Thread-184370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:04:53.657 [DEBUG] [Thread-184370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:04:53.657 [DEBUG] [Thread-184370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:04:53.657 [DEBUG] [Thread-184370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:04:53.658 [DEBUG] [Thread-184370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:04:53.658 [DEBUG] [Thread-184370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:04:53.658 [DEBUG] [Thread-184370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:04:53.658 [DEBUG] [Thread-184370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:04:53.658 [DEBUG] [Thread-184370] [transport.py] [_log()] client lang: <none>
2026-02-14T11:04:53.658 [DEBUG] [Thread-184370] [transport.py] [_log()] server lang: <none>
2026-02-14T11:04:53.659 [DEBUG] [Thread-184370] [transport.py] [_log()] kex follows: False
2026-02-14T11:04:53.659 [DEBUG] [Thread-184370] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:04:53.659 [DEBUG] [Thread-184370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:04:53.659 [DEBUG] [Thread-184370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:04:53.659 [DEBUG] [Thread-184370] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:04:53.659 [DEBUG] [Thread-184370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:04:53.659 [DEBUG] [Thread-184370] [transport.py] [_log()] Compression: none
2026-02-14T11:04:53.659 [DEBUG] [Thread-184370] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:04:53.714 [DEBUG] [Thread-184370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:04:53.715 [DEBUG] [Thread-184370] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:04:53.715 [DEBUG] [Thread-184370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:04:53.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:04:53.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:04:53.774 [DEBUG] [Thread-184370] [transport.py] [_log()] userauth is OK
2026-02-14T11:04:53.775 [DEBUG] [Thread-184370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:04:53.775 [DEBUG] [Thread-184370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:04:53.775 [DEBUG] [Thread-184370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:04:53.775 [DEBUG] [Thread-184370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:04:53.795 [INFO] [Thread-184370] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:04:53.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-14T11:04:53.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:04:54.629 [DEBUG] [Thread-184370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:04:54.629 [DEBUG] [Thread-184370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:04:54.676 [DEBUG] [Thread-184370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:04:54.677 [DEBUG] [Thread-184370] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:04:54.686 [DEBUG] [Thread-184370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:04:54.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:04:54.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-14T11:04:54.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:04:54.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:04:54.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:04:54.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:04:54.724 [DEBUG] [Thread-184370] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:04:56.350 [DEBUG] [Thread-184372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:05:09.479 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:05:09.480 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:05:11.407 [DEBUG] [Thread-184373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:05:18.204 [DEBUG] [Thread-184374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:05:24.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:05:24.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:05:24.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-14T11:05:26.447 [DEBUG] [Thread-184375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:05:27.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 5, 9), 8.84, 54.64, 0.0, 34.35, 12.3, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:05:27.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:05:09
2026-02-14T11:05:27.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:05:27.715 [DEBUG] [Thread-184376] [transport.py] [_log()] starting thread (client mode): 0xa2db4d00
2026-02-14T11:05:27.715 [DEBUG] [Thread-184376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:05:27.735 [DEBUG] [Thread-184376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:05:27.735 [INFO] [Thread-184376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:05:27.738 [DEBUG] [Thread-184376] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:05:27.738 [DEBUG] [Thread-184376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:05:27.738 [DEBUG] [Thread-184376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:05:27.738 [DEBUG] [Thread-184376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:05:27.738 [DEBUG] [Thread-184376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:05:27.738 [DEBUG] [Thread-184376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:05:27.739 [DEBUG] [Thread-184376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:05:27.739 [DEBUG] [Thread-184376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:05:27.739 [DEBUG] [Thread-184376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:05:27.739 [DEBUG] [Thread-184376] [transport.py] [_log()] client lang: <none>
2026-02-14T11:05:27.739 [DEBUG] [Thread-184376] [transport.py] [_log()] server lang: <none>
2026-02-14T11:05:27.739 [DEBUG] [Thread-184376] [transport.py] [_log()] kex follows: False
2026-02-14T11:05:27.739 [DEBUG] [Thread-184376] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:05:27.739 [DEBUG] [Thread-184376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:05:27.739 [DEBUG] [Thread-184376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:05:27.739 [DEBUG] [Thread-184376] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:05:27.739 [DEBUG] [Thread-184376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:05:27.739 [DEBUG] [Thread-184376] [transport.py] [_log()] Compression: none
2026-02-14T11:05:27.739 [DEBUG] [Thread-184376] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:05:27.756 [DEBUG] [Thread-184376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:05:27.756 [DEBUG] [Thread-184376] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:05:27.757 [DEBUG] [Thread-184376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:05:27.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:05:27.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:05:27.801 [DEBUG] [Thread-184376] [transport.py] [_log()] userauth is OK
2026-02-14T11:05:27.801 [DEBUG] [Thread-184376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:05:27.801 [DEBUG] [Thread-184376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:05:27.802 [DEBUG] [Thread-184376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:05:27.802 [DEBUG] [Thread-184376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:05:27.823 [INFO] [Thread-184376] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:05:27.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:05:28.423 [DEBUG] [Thread-184376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:05:28.423 [DEBUG] [Thread-184376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:05:28.423 [DEBUG] [Thread-184376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:05:28.463 [DEBUG] [Thread-184376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:05:28.463 [DEBUG] [Thread-184376] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:05:28.467 [DEBUG] [Thread-184376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:05:28.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:05:28.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:05:28.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:05:28.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:05:28.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:05:28.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:05:28.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:05:28.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:05:28.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:05:28.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.378237 -999.00  +13.00  21.99     57   +4.70 1 1 1 1 1   888    0 9.02 60.97 ----- 24.9 22.0 177.0 37.0 19.2 -25.7 17.7 -26.6 17.1 -22.6 18.1 -26.2
2026-02-14T11:05:28.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:05:28.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:05:28.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.378237
2026-02-14T11:05:28.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:05:28.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:05:28.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:05:28.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:05:28.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:05:28.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:05:09', tmtdew=8.84, humidity=54.64, cloud=0.0, wind=34.35, temperature=12.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:04:39.677', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:05:28.497 [DEBUG] [Thread-184376] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:05:28.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-14T11:05:28.593 [DEBUG] [Thread-184379] [transport.py] [_log()] starting thread (client mode): 0xa2d1ba90
2026-02-14T11:05:28.593 [DEBUG] [Thread-184379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:05:28.608 [DEBUG] [Thread-184379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:05:28.608 [INFO] [Thread-184379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:05:28.617 [DEBUG] [Thread-184379] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:05:28.617 [DEBUG] [Thread-184379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:05:28.617 [DEBUG] [Thread-184379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:05:28.617 [DEBUG] [Thread-184379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:05:28.617 [DEBUG] [Thread-184379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:05:28.617 [DEBUG] [Thread-184379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:05:28.617 [DEBUG] [Thread-184379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:05:28.617 [DEBUG] [Thread-184379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:05:28.617 [DEBUG] [Thread-184379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:05:28.617 [DEBUG] [Thread-184379] [transport.py] [_log()] client lang: <none>
2026-02-14T11:05:28.617 [DEBUG] [Thread-184379] [transport.py] [_log()] server lang: <none>
2026-02-14T11:05:28.617 [DEBUG] [Thread-184379] [transport.py] [_log()] kex follows: False
2026-02-14T11:05:28.617 [DEBUG] [Thread-184379] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:05:28.617 [DEBUG] [Thread-184379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:05:28.617 [DEBUG] [Thread-184379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:05:28.617 [DEBUG] [Thread-184379] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:05:28.617 [DEBUG] [Thread-184379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:05:28.617 [DEBUG] [Thread-184379] [transport.py] [_log()] Compression: none
2026-02-14T11:05:28.617 [DEBUG] [Thread-184379] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:05:28.677 [DEBUG] [Thread-184379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:05:28.677 [DEBUG] [Thread-184379] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:05:28.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:05:28.678 [DEBUG] [Thread-184379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:05:28.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:05:28.739 [DEBUG] [Thread-184379] [transport.py] [_log()] userauth is OK
2026-02-14T11:05:28.740 [DEBUG] [Thread-184379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:05:28.740 [DEBUG] [Thread-184379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:05:28.740 [DEBUG] [Thread-184379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:05:28.740 [DEBUG] [Thread-184379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:05:28.762 [INFO] [Thread-184379] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:05:28.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-14T11:05:28.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:05:29.566 [DEBUG] [Thread-184379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:05:29.566 [DEBUG] [Thread-184379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:05:29.614 [DEBUG] [Thread-184379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:05:29.615 [DEBUG] [Thread-184379] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:05:29.624 [DEBUG] [Thread-184379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:05:29.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:05:29.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:05:29.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-14T11:05:29.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:05:29.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:05:29.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:05:29.662 [DEBUG] [Thread-184379] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:05:41.487 [DEBUG] [Thread-184381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:05:56.546 [DEBUG] [Thread-184382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:05:59.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:05:59.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:05:59.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T11:06:01.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 5, 44), 8.92, 54.49, 0.0, 27.91, 12.18, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:06:01.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:05:44
2026-02-14T11:06:02.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:06:02.201 [DEBUG] [Thread-184383] [transport.py] [_log()] starting thread (client mode): 0xa2d106d0
2026-02-14T11:06:02.201 [DEBUG] [Thread-184383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:06:02.222 [DEBUG] [Thread-184383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:06:02.223 [INFO] [Thread-184383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:06:02.226 [DEBUG] [Thread-184383] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:06:02.226 [DEBUG] [Thread-184383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:06:02.226 [DEBUG] [Thread-184383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:06:02.226 [DEBUG] [Thread-184383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:06:02.226 [DEBUG] [Thread-184383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:06:02.226 [DEBUG] [Thread-184383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:06:02.226 [DEBUG] [Thread-184383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:06:02.226 [DEBUG] [Thread-184383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:06:02.226 [DEBUG] [Thread-184383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:06:02.226 [DEBUG] [Thread-184383] [transport.py] [_log()] client lang: <none>
2026-02-14T11:06:02.226 [DEBUG] [Thread-184383] [transport.py] [_log()] server lang: <none>
2026-02-14T11:06:02.226 [DEBUG] [Thread-184383] [transport.py] [_log()] kex follows: False
2026-02-14T11:06:02.226 [DEBUG] [Thread-184383] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:06:02.226 [DEBUG] [Thread-184383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:06:02.226 [DEBUG] [Thread-184383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:06:02.226 [DEBUG] [Thread-184383] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:06:02.227 [DEBUG] [Thread-184383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:06:02.227 [DEBUG] [Thread-184383] [transport.py] [_log()] Compression: none
2026-02-14T11:06:02.227 [DEBUG] [Thread-184383] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:06:02.244 [DEBUG] [Thread-184383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:06:02.244 [DEBUG] [Thread-184383] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:06:02.245 [DEBUG] [Thread-184383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:06:02.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:06:02.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:06:02.247 [DEBUG] [Thread-184383] [transport.py] [_log()] userauth is OK
2026-02-14T11:06:02.247 [DEBUG] [Thread-184383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:06:02.248 [DEBUG] [Thread-184383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:06:02.248 [DEBUG] [Thread-184383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:06:02.248 [DEBUG] [Thread-184383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:06:02.272 [INFO] [Thread-184383] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:06:02.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:06:02.897 [DEBUG] [Thread-184383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:06:02.897 [DEBUG] [Thread-184383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:06:02.898 [DEBUG] [Thread-184383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:06:02.938 [DEBUG] [Thread-184383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:06:02.938 [DEBUG] [Thread-184383] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:06:02.941 [DEBUG] [Thread-184383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:06:02.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:06:02.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:06:02.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:06:02.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:06:02.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:06:02.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:06:02.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:06:02.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:06:02.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:06:02.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.378932 -999.00  +12.90  24.82     57   +4.70 1 1 1 1 1   888    0 9.15 61.43 ----- 26.6 24.8 165.6 33.1 19.3 -24.5 17.7 -24.9 17.1 -22.0 18.3 -22.9
2026-02-14T11:06:02.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:06:02.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:06:02.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.378932
2026-02-14T11:06:02.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:06:02.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:06:02.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:06:02.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:06:02.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:06:02.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:05:44', tmtdew=8.92, humidity=54.49, cloud=0.0, wind=27.91, temperature=12.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:05:39.725', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:06:02.965 [DEBUG] [Thread-184383] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:06:03.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T11:06:03.067 [DEBUG] [Thread-184386] [transport.py] [_log()] starting thread (client mode): 0xa2db4100
2026-02-14T11:06:03.067 [DEBUG] [Thread-184386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:06:03.085 [DEBUG] [Thread-184386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:06:03.085 [INFO] [Thread-184386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:06:03.092 [DEBUG] [Thread-184386] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:06:03.092 [DEBUG] [Thread-184386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:06:03.092 [DEBUG] [Thread-184386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:06:03.092 [DEBUG] [Thread-184386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:06:03.092 [DEBUG] [Thread-184386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:06:03.092 [DEBUG] [Thread-184386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:06:03.092 [DEBUG] [Thread-184386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:06:03.092 [DEBUG] [Thread-184386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:06:03.092 [DEBUG] [Thread-184386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:06:03.092 [DEBUG] [Thread-184386] [transport.py] [_log()] client lang: <none>
2026-02-14T11:06:03.092 [DEBUG] [Thread-184386] [transport.py] [_log()] server lang: <none>
2026-02-14T11:06:03.092 [DEBUG] [Thread-184386] [transport.py] [_log()] kex follows: False
2026-02-14T11:06:03.092 [DEBUG] [Thread-184386] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:06:03.093 [DEBUG] [Thread-184386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:06:03.093 [DEBUG] [Thread-184386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:06:03.093 [DEBUG] [Thread-184386] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:06:03.093 [DEBUG] [Thread-184386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:06:03.093 [DEBUG] [Thread-184386] [transport.py] [_log()] Compression: none
2026-02-14T11:06:03.093 [DEBUG] [Thread-184386] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:06:03.154 [DEBUG] [Thread-184386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:06:03.155 [DEBUG] [Thread-184386] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:06:03.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:06:03.156 [DEBUG] [Thread-184386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:06:03.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:06:03.211 [DEBUG] [Thread-184386] [transport.py] [_log()] userauth is OK
2026-02-14T11:06:03.212 [DEBUG] [Thread-184386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:06:03.212 [DEBUG] [Thread-184386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:06:03.212 [DEBUG] [Thread-184386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:06:03.212 [DEBUG] [Thread-184386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:06:03.244 [INFO] [Thread-184386] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:06:03.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-14T11:06:03.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:06:04.080 [DEBUG] [Thread-184386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:06:04.080 [DEBUG] [Thread-184386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:06:04.129 [DEBUG] [Thread-184386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:06:04.130 [DEBUG] [Thread-184386] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:06:04.140 [DEBUG] [Thread-184386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:06:04.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:06:04.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-14T11:06:04.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:06:04.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:06:04.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:06:04.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:06:04.183 [DEBUG] [Thread-184386] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:06:09.620 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:06:09.621 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:06:11.583 [DEBUG] [Thread-184388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:06:18.248 [DEBUG] [Thread-184389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:06:26.639 [DEBUG] [Thread-184390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:06:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:06:34.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:06:34.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-14T11:06:36.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 6, 19), 8.92, 54.53, 0.0, 27.49, 12.26, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:06:36.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:06:19
2026-02-14T11:06:36.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:06:36.542 [DEBUG] [Thread-184391] [transport.py] [_log()] starting thread (client mode): 0xa2d1ac80
2026-02-14T11:06:36.542 [DEBUG] [Thread-184391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:06:36.563 [DEBUG] [Thread-184391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:06:36.563 [INFO] [Thread-184391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:06:36.567 [DEBUG] [Thread-184391] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:06:36.567 [DEBUG] [Thread-184391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:06:36.567 [DEBUG] [Thread-184391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:06:36.567 [DEBUG] [Thread-184391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:06:36.567 [DEBUG] [Thread-184391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:06:36.567 [DEBUG] [Thread-184391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:06:36.567 [DEBUG] [Thread-184391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:06:36.567 [DEBUG] [Thread-184391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:06:36.568 [DEBUG] [Thread-184391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:06:36.568 [DEBUG] [Thread-184391] [transport.py] [_log()] client lang: <none>
2026-02-14T11:06:36.568 [DEBUG] [Thread-184391] [transport.py] [_log()] server lang: <none>
2026-02-14T11:06:36.568 [DEBUG] [Thread-184391] [transport.py] [_log()] kex follows: False
2026-02-14T11:06:36.568 [DEBUG] [Thread-184391] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:06:36.568 [DEBUG] [Thread-184391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:06:36.568 [DEBUG] [Thread-184391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:06:36.568 [DEBUG] [Thread-184391] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:06:36.568 [DEBUG] [Thread-184391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:06:36.568 [DEBUG] [Thread-184391] [transport.py] [_log()] Compression: none
2026-02-14T11:06:36.568 [DEBUG] [Thread-184391] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:06:36.585 [DEBUG] [Thread-184391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:06:36.585 [DEBUG] [Thread-184391] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:06:36.586 [DEBUG] [Thread-184391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:06:36.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:06:36.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:06:36.588 [DEBUG] [Thread-184391] [transport.py] [_log()] userauth is OK
2026-02-14T11:06:36.588 [DEBUG] [Thread-184391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:06:36.588 [DEBUG] [Thread-184391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:06:36.588 [DEBUG] [Thread-184391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:06:36.589 [DEBUG] [Thread-184391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:06:36.611 [INFO] [Thread-184391] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:06:36.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:06:37.192 [DEBUG] [Thread-184391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:06:37.192 [DEBUG] [Thread-184391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:06:37.193 [DEBUG] [Thread-184391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:06:37.234 [DEBUG] [Thread-184391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:06:37.234 [DEBUG] [Thread-184391] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:06:37.237 [DEBUG] [Thread-184391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:06:37.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:06:37.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:06:37.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:06:37.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:06:37.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:06:37.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:06:37.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:06:37.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:06:37.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:06:37.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.379279 -999.00  +12.90  27.86     58   +4.90 1 1 1 1 1   888    0 9.29 61.93 ----- 28.8 27.9 144.8 40.6 19.4 -26.0 17.9 -23.8 17.2 -24.4 18.3 -25.3
2026-02-14T11:06:37.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:06:37.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:06:37.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.379279
2026-02-14T11:06:37.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:06:37.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:06:37.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:06:37.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:06:37.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:06:37.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:06:19', tmtdew=8.92, humidity=54.53, cloud=0.0, wind=27.49, temperature=12.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:06:09.706', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:06:37.264 [DEBUG] [Thread-184391] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:06:37.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-14T11:06:37.358 [DEBUG] [Thread-184394] [transport.py] [_log()] starting thread (client mode): 0xa2d1be20
2026-02-14T11:06:37.358 [DEBUG] [Thread-184394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:06:37.374 [DEBUG] [Thread-184394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:06:37.375 [INFO] [Thread-184394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:06:37.382 [DEBUG] [Thread-184394] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:06:37.382 [DEBUG] [Thread-184394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:06:37.382 [DEBUG] [Thread-184394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:06:37.383 [DEBUG] [Thread-184394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:06:37.383 [DEBUG] [Thread-184394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:06:37.383 [DEBUG] [Thread-184394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:06:37.383 [DEBUG] [Thread-184394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:06:37.383 [DEBUG] [Thread-184394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:06:37.383 [DEBUG] [Thread-184394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:06:37.383 [DEBUG] [Thread-184394] [transport.py] [_log()] client lang: <none>
2026-02-14T11:06:37.383 [DEBUG] [Thread-184394] [transport.py] [_log()] server lang: <none>
2026-02-14T11:06:37.383 [DEBUG] [Thread-184394] [transport.py] [_log()] kex follows: False
2026-02-14T11:06:37.383 [DEBUG] [Thread-184394] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:06:37.384 [DEBUG] [Thread-184394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:06:37.384 [DEBUG] [Thread-184394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:06:37.384 [DEBUG] [Thread-184394] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:06:37.384 [DEBUG] [Thread-184394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:06:37.384 [DEBUG] [Thread-184394] [transport.py] [_log()] Compression: none
2026-02-14T11:06:37.384 [DEBUG] [Thread-184394] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:06:37.443 [DEBUG] [Thread-184394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:06:37.444 [DEBUG] [Thread-184394] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:06:37.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:06:37.446 [DEBUG] [Thread-184394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:06:37.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:06:37.499 [DEBUG] [Thread-184394] [transport.py] [_log()] userauth is OK
2026-02-14T11:06:37.500 [DEBUG] [Thread-184394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:06:37.500 [DEBUG] [Thread-184394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:06:37.500 [DEBUG] [Thread-184394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:06:37.500 [DEBUG] [Thread-184394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:06:37.523 [INFO] [Thread-184394] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:06:37.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T11:06:37.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:06:38.349 [DEBUG] [Thread-184394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:06:38.349 [DEBUG] [Thread-184394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:06:38.398 [DEBUG] [Thread-184394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:06:38.398 [DEBUG] [Thread-184394] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:06:38.408 [DEBUG] [Thread-184394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:06:38.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:06:38.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:06:38.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:06:38.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:06:38.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:06:38.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:06:38.449 [DEBUG] [Thread-184394] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:06:41.671 [DEBUG] [Thread-184396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:06:56.725 [DEBUG] [Thread-184397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:07:08.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:07:08.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:07:08.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-14T11:07:09.764 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:07:09.765 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:07:10.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 6, 55), 9.62, 51.95, 0.0, 29.09, 13.18, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:07:10.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:06:55
2026-02-14T11:07:10.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:07:11.047 [DEBUG] [Thread-184398] [transport.py] [_log()] starting thread (client mode): 0xa2d19960
2026-02-14T11:07:11.047 [DEBUG] [Thread-184398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:07:11.067 [DEBUG] [Thread-184398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:07:11.068 [INFO] [Thread-184398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:07:11.071 [DEBUG] [Thread-184398] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:07:11.071 [DEBUG] [Thread-184398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:07:11.071 [DEBUG] [Thread-184398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:07:11.071 [DEBUG] [Thread-184398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:07:11.071 [DEBUG] [Thread-184398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:07:11.071 [DEBUG] [Thread-184398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:07:11.071 [DEBUG] [Thread-184398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:07:11.071 [DEBUG] [Thread-184398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:07:11.071 [DEBUG] [Thread-184398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:07:11.072 [DEBUG] [Thread-184398] [transport.py] [_log()] client lang: <none>
2026-02-14T11:07:11.072 [DEBUG] [Thread-184398] [transport.py] [_log()] server lang: <none>
2026-02-14T11:07:11.072 [DEBUG] [Thread-184398] [transport.py] [_log()] kex follows: False
2026-02-14T11:07:11.072 [DEBUG] [Thread-184398] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:07:11.072 [DEBUG] [Thread-184398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:07:11.072 [DEBUG] [Thread-184398] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:07:11.072 [DEBUG] [Thread-184398] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:07:11.072 [DEBUG] [Thread-184398] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:07:11.072 [DEBUG] [Thread-184398] [transport.py] [_log()] Compression: none
2026-02-14T11:07:11.072 [DEBUG] [Thread-184398] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:07:11.089 [DEBUG] [Thread-184398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:07:11.089 [DEBUG] [Thread-184398] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:07:11.090 [DEBUG] [Thread-184398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:07:11.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:07:11.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:07:11.092 [DEBUG] [Thread-184398] [transport.py] [_log()] userauth is OK
2026-02-14T11:07:11.093 [DEBUG] [Thread-184398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:07:11.093 [DEBUG] [Thread-184398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:07:11.093 [DEBUG] [Thread-184398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:07:11.093 [DEBUG] [Thread-184398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:07:11.109 [INFO] [Thread-184398] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:07:11.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:07:11.764 [DEBUG] [Thread-184400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:07:11.906 [DEBUG] [Thread-184398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:07:11.907 [DEBUG] [Thread-184398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:07:11.907 [DEBUG] [Thread-184398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:07:11.947 [DEBUG] [Thread-184398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:07:11.948 [DEBUG] [Thread-184398] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:07:11.951 [DEBUG] [Thread-184398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:07:11.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:07:11.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:07:11.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:07:11.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:07:11.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:07:11.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:07:11.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:07:11.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:07:11.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:07:11.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.379626 -999.00  +12.70  24.49     58   +4.80 1 1 1 1 1   888    0 9.24 63.14 ----- 22.5 24.5 160.3 37.7 19.4 -25.4 18.0 -22.9 17.3 -23.6 18.3 -23.8
2026-02-14T11:07:11.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:07:11.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:07:11.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.379626
2026-02-14T11:07:11.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:07:11.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:07:11.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:07:11.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:07:11.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:07:11.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:06:55', tmtdew=9.62, humidity=51.95, cloud=0.0, wind=29.09, temperature=13.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:06:39.686', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:07:11.977 [DEBUG] [Thread-184398] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:07:12.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T11:07:12.076 [DEBUG] [Thread-184402] [transport.py] [_log()] starting thread (client mode): 0xa2d19390
2026-02-14T11:07:12.076 [DEBUG] [Thread-184402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:07:12.093 [DEBUG] [Thread-184402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:07:12.093 [INFO] [Thread-184402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:07:12.101 [DEBUG] [Thread-184402] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:07:12.101 [DEBUG] [Thread-184402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:07:12.101 [DEBUG] [Thread-184402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:07:12.102 [DEBUG] [Thread-184402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:07:12.102 [DEBUG] [Thread-184402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:07:12.102 [DEBUG] [Thread-184402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:07:12.102 [DEBUG] [Thread-184402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:07:12.102 [DEBUG] [Thread-184402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:07:12.102 [DEBUG] [Thread-184402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:07:12.102 [DEBUG] [Thread-184402] [transport.py] [_log()] client lang: <none>
2026-02-14T11:07:12.102 [DEBUG] [Thread-184402] [transport.py] [_log()] server lang: <none>
2026-02-14T11:07:12.102 [DEBUG] [Thread-184402] [transport.py] [_log()] kex follows: False
2026-02-14T11:07:12.102 [DEBUG] [Thread-184402] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:07:12.102 [DEBUG] [Thread-184402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:07:12.102 [DEBUG] [Thread-184402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:07:12.102 [DEBUG] [Thread-184402] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:07:12.102 [DEBUG] [Thread-184402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:07:12.102 [DEBUG] [Thread-184402] [transport.py] [_log()] Compression: none
2026-02-14T11:07:12.102 [DEBUG] [Thread-184402] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:07:12.159 [DEBUG] [Thread-184402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:07:12.159 [DEBUG] [Thread-184402] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:07:12.160 [DEBUG] [Thread-184402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:07:12.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:07:12.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:07:12.222 [DEBUG] [Thread-184402] [transport.py] [_log()] userauth is OK
2026-02-14T11:07:12.223 [DEBUG] [Thread-184402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:07:12.223 [DEBUG] [Thread-184402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:07:12.223 [DEBUG] [Thread-184402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:07:12.223 [DEBUG] [Thread-184402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:07:12.242 [INFO] [Thread-184402] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:07:12.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-14T11:07:12.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:07:13.034 [DEBUG] [Thread-184402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:07:13.034 [DEBUG] [Thread-184402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:07:13.081 [DEBUG] [Thread-184402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:07:13.081 [DEBUG] [Thread-184402] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:07:13.089 [DEBUG] [Thread-184402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:07:13.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:07:13.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-14T11:07:13.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-14T11:07:13.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:07:13.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:07:13.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:07:13.120 [DEBUG] [Thread-184402] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:07:18.296 [DEBUG] [Thread-184404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:07:26.803 [DEBUG] [Thread-184405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:07:41.854 [DEBUG] [Thread-184406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:07:43.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:07:43.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:07:43.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-14T11:07:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 7, 30), 9.65, 51.87, 0.0, 26.39, 13.15, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:07:44.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:07:30
2026-02-14T11:07:45.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:07:45.455 [DEBUG] [Thread-184407] [transport.py] [_log()] starting thread (client mode): 0xa2d7a050
2026-02-14T11:07:45.455 [DEBUG] [Thread-184407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:07:45.473 [DEBUG] [Thread-184407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:07:45.473 [INFO] [Thread-184407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:07:45.476 [DEBUG] [Thread-184407] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:07:45.476 [DEBUG] [Thread-184407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:07:45.476 [DEBUG] [Thread-184407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:07:45.476 [DEBUG] [Thread-184407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:07:45.476 [DEBUG] [Thread-184407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:07:45.476 [DEBUG] [Thread-184407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:07:45.476 [DEBUG] [Thread-184407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:07:45.476 [DEBUG] [Thread-184407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:07:45.476 [DEBUG] [Thread-184407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:07:45.476 [DEBUG] [Thread-184407] [transport.py] [_log()] client lang: <none>
2026-02-14T11:07:45.477 [DEBUG] [Thread-184407] [transport.py] [_log()] server lang: <none>
2026-02-14T11:07:45.477 [DEBUG] [Thread-184407] [transport.py] [_log()] kex follows: False
2026-02-14T11:07:45.477 [DEBUG] [Thread-184407] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:07:45.477 [DEBUG] [Thread-184407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:07:45.477 [DEBUG] [Thread-184407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:07:45.477 [DEBUG] [Thread-184407] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:07:45.477 [DEBUG] [Thread-184407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:07:45.477 [DEBUG] [Thread-184407] [transport.py] [_log()] Compression: none
2026-02-14T11:07:45.477 [DEBUG] [Thread-184407] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:07:45.484 [DEBUG] [Thread-184407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:07:45.484 [DEBUG] [Thread-184407] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:07:45.485 [DEBUG] [Thread-184407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:07:45.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:07:45.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:07:45.486 [DEBUG] [Thread-184407] [transport.py] [_log()] userauth is OK
2026-02-14T11:07:45.486 [DEBUG] [Thread-184407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:07:45.486 [DEBUG] [Thread-184407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:07:45.486 [DEBUG] [Thread-184407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:07:45.486 [DEBUG] [Thread-184407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:07:45.504 [INFO] [Thread-184407] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:07:45.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:07:46.090 [DEBUG] [Thread-184407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:07:46.090 [DEBUG] [Thread-184407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:07:46.090 [DEBUG] [Thread-184407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:07:46.132 [DEBUG] [Thread-184407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:07:46.132 [DEBUG] [Thread-184407] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:07:46.135 [DEBUG] [Thread-184407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:07:46.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:07:46.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:07:46.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:07:46.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:07:46.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:07:46.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:07:46.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:07:46.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:07:46.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:07:46.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.379973 -999.00  +12.80  26.09     58   +4.80 1 1 1 1 1   888    0 9.22 58.12 ----- 28.0 26.1 171.6 34.5 19.4 -26.1 18.1 -23.1 17.4 -23.4 18.4 -24.3
2026-02-14T11:07:46.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:07:46.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:07:46.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.379973
2026-02-14T11:07:46.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:07:46.164 [DEBUG] [Thread-184407] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:07:46.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:07:46.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:07:46.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:07:46.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:07:46.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:07:30', tmtdew=9.65, humidity=51.87, cloud=0.0, wind=26.39, temperature=13.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:07:09.667', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:07:46.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-14T11:07:46.261 [DEBUG] [Thread-184410] [transport.py] [_log()] starting thread (client mode): 0xa2ddd360
2026-02-14T11:07:46.261 [DEBUG] [Thread-184410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:07:46.276 [DEBUG] [Thread-184410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:07:46.276 [INFO] [Thread-184410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:07:46.284 [DEBUG] [Thread-184410] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:07:46.284 [DEBUG] [Thread-184410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:07:46.284 [DEBUG] [Thread-184410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:07:46.284 [DEBUG] [Thread-184410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:07:46.284 [DEBUG] [Thread-184410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:07:46.284 [DEBUG] [Thread-184410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:07:46.285 [DEBUG] [Thread-184410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:07:46.285 [DEBUG] [Thread-184410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:07:46.285 [DEBUG] [Thread-184410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:07:46.285 [DEBUG] [Thread-184410] [transport.py] [_log()] client lang: <none>
2026-02-14T11:07:46.285 [DEBUG] [Thread-184410] [transport.py] [_log()] server lang: <none>
2026-02-14T11:07:46.285 [DEBUG] [Thread-184410] [transport.py] [_log()] kex follows: False
2026-02-14T11:07:46.285 [DEBUG] [Thread-184410] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:07:46.285 [DEBUG] [Thread-184410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:07:46.285 [DEBUG] [Thread-184410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:07:46.285 [DEBUG] [Thread-184410] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:07:46.285 [DEBUG] [Thread-184410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:07:46.285 [DEBUG] [Thread-184410] [transport.py] [_log()] Compression: none
2026-02-14T11:07:46.285 [DEBUG] [Thread-184410] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:07:46.341 [DEBUG] [Thread-184410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:07:46.342 [DEBUG] [Thread-184410] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:07:46.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:07:46.343 [DEBUG] [Thread-184410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:07:46.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:07:46.398 [DEBUG] [Thread-184410] [transport.py] [_log()] userauth is OK
2026-02-14T11:07:46.398 [DEBUG] [Thread-184410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:07:46.398 [DEBUG] [Thread-184410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:07:46.398 [DEBUG] [Thread-184410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:07:46.399 [DEBUG] [Thread-184410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:07:46.418 [INFO] [Thread-184410] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:07:46.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T11:07:46.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:07:47.263 [DEBUG] [Thread-184410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:07:47.264 [DEBUG] [Thread-184410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:07:47.311 [DEBUG] [Thread-184410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:07:47.311 [DEBUG] [Thread-184410] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:07:47.320 [DEBUG] [Thread-184410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:07:47.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:07:47.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:07:47.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-14T11:07:47.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:07:47.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:07:47.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:07:47.354 [DEBUG] [Thread-184410] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:07:56.891 [DEBUG] [Thread-184412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:08:09.906 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:08:09.907 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:08:11.946 [DEBUG] [Thread-184413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:08:17.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:08:17.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:08:17.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-14T11:08:18.332 [DEBUG] [Thread-184414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:08:19.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 8, 5), 9.65, 51.92, 0.0, 28.55, 13.41, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:08:19.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:08:05
2026-02-14T11:08:19.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:08:19.631 [DEBUG] [Thread-184415] [transport.py] [_log()] starting thread (client mode): 0xa2d1a7a0
2026-02-14T11:08:19.631 [DEBUG] [Thread-184415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:08:19.650 [DEBUG] [Thread-184415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:08:19.650 [INFO] [Thread-184415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:08:19.654 [DEBUG] [Thread-184415] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:08:19.654 [DEBUG] [Thread-184415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:08:19.654 [DEBUG] [Thread-184415] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:08:19.654 [DEBUG] [Thread-184415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:08:19.654 [DEBUG] [Thread-184415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:08:19.654 [DEBUG] [Thread-184415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:08:19.654 [DEBUG] [Thread-184415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:08:19.654 [DEBUG] [Thread-184415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:08:19.654 [DEBUG] [Thread-184415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:08:19.654 [DEBUG] [Thread-184415] [transport.py] [_log()] client lang: <none>
2026-02-14T11:08:19.654 [DEBUG] [Thread-184415] [transport.py] [_log()] server lang: <none>
2026-02-14T11:08:19.654 [DEBUG] [Thread-184415] [transport.py] [_log()] kex follows: False
2026-02-14T11:08:19.654 [DEBUG] [Thread-184415] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:08:19.654 [DEBUG] [Thread-184415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:08:19.654 [DEBUG] [Thread-184415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:08:19.654 [DEBUG] [Thread-184415] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:08:19.654 [DEBUG] [Thread-184415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:08:19.654 [DEBUG] [Thread-184415] [transport.py] [_log()] Compression: none
2026-02-14T11:08:19.655 [DEBUG] [Thread-184415] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:08:19.669 [DEBUG] [Thread-184415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:08:19.670 [DEBUG] [Thread-184415] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:08:19.670 [DEBUG] [Thread-184415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:08:19.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:08:19.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:08:19.672 [DEBUG] [Thread-184415] [transport.py] [_log()] userauth is OK
2026-02-14T11:08:19.672 [DEBUG] [Thread-184415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:08:19.672 [DEBUG] [Thread-184415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:08:19.673 [DEBUG] [Thread-184415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:08:19.673 [DEBUG] [Thread-184415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:08:19.693 [INFO] [Thread-184415] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:08:19.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:08:20.329 [DEBUG] [Thread-184415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:08:20.329 [DEBUG] [Thread-184415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:08:20.330 [DEBUG] [Thread-184415] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:08:20.370 [DEBUG] [Thread-184415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:08:20.371 [DEBUG] [Thread-184415] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:08:20.374 [DEBUG] [Thread-184415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:08:20.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:08:20.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:08:20.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:08:20.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:08:20.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:08:20.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:08:20.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:08:20.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:08:20.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:08:20.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.380320 -999.00  +13.10  16.21     58   +5.10 1 1 1 1 1   888    0 9.09 55.81 ----- 19.0 16.2 168.3 33.5 19.6 -23.9 18.1 -25.8 17.3 -22.0 18.6 -23.2
2026-02-14T11:08:20.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:08:20.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:08:20.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.380320
2026-02-14T11:08:20.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:08:20.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:08:20.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:08:20.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:08:20.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:08:20.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:08:05', tmtdew=9.65, humidity=51.92, cloud=0.0, wind=28.55, temperature=13.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:07:39.648', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:08:20.402 [DEBUG] [Thread-184415] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:08:20.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-14T11:08:20.500 [DEBUG] [Thread-184418] [transport.py] [_log()] starting thread (client mode): 0xa2d3dab0
2026-02-14T11:08:20.501 [DEBUG] [Thread-184418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:08:20.515 [DEBUG] [Thread-184418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:08:20.516 [INFO] [Thread-184418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:08:20.523 [DEBUG] [Thread-184418] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:08:20.523 [DEBUG] [Thread-184418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:08:20.523 [DEBUG] [Thread-184418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:08:20.523 [DEBUG] [Thread-184418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:08:20.523 [DEBUG] [Thread-184418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:08:20.523 [DEBUG] [Thread-184418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:08:20.523 [DEBUG] [Thread-184418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:08:20.523 [DEBUG] [Thread-184418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:08:20.523 [DEBUG] [Thread-184418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:08:20.524 [DEBUG] [Thread-184418] [transport.py] [_log()] client lang: <none>
2026-02-14T11:08:20.524 [DEBUG] [Thread-184418] [transport.py] [_log()] server lang: <none>
2026-02-14T11:08:20.524 [DEBUG] [Thread-184418] [transport.py] [_log()] kex follows: False
2026-02-14T11:08:20.524 [DEBUG] [Thread-184418] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:08:20.524 [DEBUG] [Thread-184418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:08:20.524 [DEBUG] [Thread-184418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:08:20.524 [DEBUG] [Thread-184418] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:08:20.524 [DEBUG] [Thread-184418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:08:20.524 [DEBUG] [Thread-184418] [transport.py] [_log()] Compression: none
2026-02-14T11:08:20.524 [DEBUG] [Thread-184418] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:08:20.581 [DEBUG] [Thread-184418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:08:20.582 [DEBUG] [Thread-184418] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:08:20.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:08:20.583 [DEBUG] [Thread-184418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:08:20.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:08:20.638 [DEBUG] [Thread-184418] [transport.py] [_log()] userauth is OK
2026-02-14T11:08:20.638 [DEBUG] [Thread-184418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:08:20.638 [DEBUG] [Thread-184418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:08:20.638 [DEBUG] [Thread-184418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:08:20.638 [DEBUG] [Thread-184418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:08:20.656 [INFO] [Thread-184418] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:08:20.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-14T11:08:20.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:08:21.451 [DEBUG] [Thread-184418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:08:21.451 [DEBUG] [Thread-184418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:08:21.500 [DEBUG] [Thread-184418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:08:21.500 [DEBUG] [Thread-184418] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:08:21.510 [DEBUG] [Thread-184418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:08:21.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:08:21.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-14T11:08: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-14T11:08:21.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:08:21.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:08:21.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:08:21.549 [DEBUG] [Thread-184418] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:08:26.980 [DEBUG] [Thread-184420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:08:42.029 [DEBUG] [Thread-184421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:08:51.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:08:51.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:08:51.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-14T11:08:53.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 8, 40), 10.4, 49.47, 0.0, 33.48, 14.06, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:08:53.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:08:40
2026-02-14T11:08:53.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:08:53.942 [DEBUG] [Thread-184422] [transport.py] [_log()] starting thread (client mode): 0xa2d3d900
2026-02-14T11:08:53.942 [DEBUG] [Thread-184422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:08:53.962 [DEBUG] [Thread-184422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:08:53.962 [INFO] [Thread-184422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:08:53.965 [DEBUG] [Thread-184422] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:08:53.965 [DEBUG] [Thread-184422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:08:53.965 [DEBUG] [Thread-184422] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:08:53.965 [DEBUG] [Thread-184422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:08:53.965 [DEBUG] [Thread-184422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:08:53.965 [DEBUG] [Thread-184422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:08:53.965 [DEBUG] [Thread-184422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:08:53.965 [DEBUG] [Thread-184422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:08:53.966 [DEBUG] [Thread-184422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:08:53.966 [DEBUG] [Thread-184422] [transport.py] [_log()] client lang: <none>
2026-02-14T11:08:53.966 [DEBUG] [Thread-184422] [transport.py] [_log()] server lang: <none>
2026-02-14T11:08:53.966 [DEBUG] [Thread-184422] [transport.py] [_log()] kex follows: False
2026-02-14T11:08:53.966 [DEBUG] [Thread-184422] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:08:53.966 [DEBUG] [Thread-184422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:08:53.966 [DEBUG] [Thread-184422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:08:53.966 [DEBUG] [Thread-184422] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:08:53.966 [DEBUG] [Thread-184422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:08:53.966 [DEBUG] [Thread-184422] [transport.py] [_log()] Compression: none
2026-02-14T11:08:53.966 [DEBUG] [Thread-184422] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:08:53.982 [DEBUG] [Thread-184422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:08:53.982 [DEBUG] [Thread-184422] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:08:53.983 [DEBUG] [Thread-184422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:08:53.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:08:53.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:08:53.984 [DEBUG] [Thread-184422] [transport.py] [_log()] userauth is OK
2026-02-14T11:08:53.984 [DEBUG] [Thread-184422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:08:53.984 [DEBUG] [Thread-184422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:08:53.984 [DEBUG] [Thread-184422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:08:53.985 [DEBUG] [Thread-184422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:08:53.999 [INFO] [Thread-184422] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:08:53.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:08:54.625 [DEBUG] [Thread-184422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:08:54.626 [DEBUG] [Thread-184422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:08:54.626 [DEBUG] [Thread-184422] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:08:54.667 [DEBUG] [Thread-184422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:08:54.667 [DEBUG] [Thread-184422] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:08:54.670 [DEBUG] [Thread-184422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:08:54.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:08:54.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:08:54.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:08:54.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:08:54.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:08:54.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:08:54.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:08:54.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:08:54.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:08:54.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.380668 -999.00  +13.10  28.09     57   +5.00 1 2 1 1 1   888    0 9.12 58.55 ----- 26.2 28.1 158.8 38.7 19.6 -26.3 18.3 -23.9 17.6 -21.4 18.6 -26.6
2026-02-14T11:08:54.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:08:54.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:08:54.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.380668
2026-02-14T11:08:54.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:08:54.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:08:54.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:08:54.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:08:54.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:08:54.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:08:40', tmtdew=10.4, humidity=49.47, cloud=0.0, wind=33.48, temperature=14.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:08:09.715', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:08:54.695 [DEBUG] [Thread-184422] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:08:54.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T11:08:54.791 [DEBUG] [Thread-184425] [transport.py] [_log()] starting thread (client mode): 0xa2ddc580
2026-02-14T11:08:54.791 [DEBUG] [Thread-184425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:08:54.806 [DEBUG] [Thread-184425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:08:54.806 [INFO] [Thread-184425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:08:54.814 [DEBUG] [Thread-184425] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:08:54.814 [DEBUG] [Thread-184425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:08:54.814 [DEBUG] [Thread-184425] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:08:54.814 [DEBUG] [Thread-184425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:08:54.814 [DEBUG] [Thread-184425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:08:54.814 [DEBUG] [Thread-184425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:08:54.814 [DEBUG] [Thread-184425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:08:54.814 [DEBUG] [Thread-184425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:08:54.814 [DEBUG] [Thread-184425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:08:54.814 [DEBUG] [Thread-184425] [transport.py] [_log()] client lang: <none>
2026-02-14T11:08:54.814 [DEBUG] [Thread-184425] [transport.py] [_log()] server lang: <none>
2026-02-14T11:08:54.814 [DEBUG] [Thread-184425] [transport.py] [_log()] kex follows: False
2026-02-14T11:08:54.814 [DEBUG] [Thread-184425] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:08:54.814 [DEBUG] [Thread-184425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:08:54.815 [DEBUG] [Thread-184425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:08:54.815 [DEBUG] [Thread-184425] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:08:54.815 [DEBUG] [Thread-184425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:08:54.815 [DEBUG] [Thread-184425] [transport.py] [_log()] Compression: none
2026-02-14T11:08:54.815 [DEBUG] [Thread-184425] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:08:54.872 [DEBUG] [Thread-184425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:08:54.873 [DEBUG] [Thread-184425] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:08:54.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:08:54.874 [DEBUG] [Thread-184425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:08:54.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:08:54.928 [DEBUG] [Thread-184425] [transport.py] [_log()] userauth is OK
2026-02-14T11:08:54.929 [DEBUG] [Thread-184425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:08:54.929 [DEBUG] [Thread-184425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:08:54.929 [DEBUG] [Thread-184425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:08:54.929 [DEBUG] [Thread-184425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:08:54.947 [INFO] [Thread-184425] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:08:54.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-14T11:08:54.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:08:55.812 [DEBUG] [Thread-184425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:08:55.812 [DEBUG] [Thread-184425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:08:55.861 [DEBUG] [Thread-184425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:08:55.861 [DEBUG] [Thread-184425] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:08:55.871 [DEBUG] [Thread-184425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:08:55.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:08:55.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-14T11:08:55.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-14T11:08:55.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:08:55.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:08:55.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:08:55.907 [DEBUG] [Thread-184425] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:08:57.064 [DEBUG] [Thread-184427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:09:10.058 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:09:10.060 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:09:12.139 [DEBUG] [Thread-184428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:09:18.379 [DEBUG] [Thread-184429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:09:25.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:09:25.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:09:25.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-14T11:09:27.177 [DEBUG] [Thread-184430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:09:27.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 9, 17), 9.92, 50.86, 0.0, 34.28, 13.49, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:09:27.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:09:17
2026-02-14T11:09:28.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:09:28.305 [DEBUG] [Thread-184431] [transport.py] [_log()] starting thread (client mode): 0xa2d199c0
2026-02-14T11:09:28.305 [DEBUG] [Thread-184431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:09:28.325 [DEBUG] [Thread-184431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:09:28.326 [INFO] [Thread-184431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:09:28.329 [DEBUG] [Thread-184431] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:09:28.329 [DEBUG] [Thread-184431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:09:28.329 [DEBUG] [Thread-184431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:09:28.329 [DEBUG] [Thread-184431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:09:28.329 [DEBUG] [Thread-184431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:09:28.329 [DEBUG] [Thread-184431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:09:28.329 [DEBUG] [Thread-184431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:09:28.329 [DEBUG] [Thread-184431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:09:28.330 [DEBUG] [Thread-184431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:09:28.330 [DEBUG] [Thread-184431] [transport.py] [_log()] client lang: <none>
2026-02-14T11:09:28.330 [DEBUG] [Thread-184431] [transport.py] [_log()] server lang: <none>
2026-02-14T11:09:28.330 [DEBUG] [Thread-184431] [transport.py] [_log()] kex follows: False
2026-02-14T11:09:28.330 [DEBUG] [Thread-184431] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:09:28.330 [DEBUG] [Thread-184431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:09:28.330 [DEBUG] [Thread-184431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:09:28.330 [DEBUG] [Thread-184431] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:09:28.330 [DEBUG] [Thread-184431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:09:28.330 [DEBUG] [Thread-184431] [transport.py] [_log()] Compression: none
2026-02-14T11:09:28.330 [DEBUG] [Thread-184431] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:09:28.351 [DEBUG] [Thread-184431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:09:28.352 [DEBUG] [Thread-184431] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:09:28.352 [DEBUG] [Thread-184431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:09:28.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:09:28.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:09:28.354 [DEBUG] [Thread-184431] [transport.py] [_log()] userauth is OK
2026-02-14T11:09:28.355 [DEBUG] [Thread-184431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:09:28.355 [DEBUG] [Thread-184431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:09:28.355 [DEBUG] [Thread-184431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:09:28.355 [DEBUG] [Thread-184431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:09:28.380 [INFO] [Thread-184431] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:09:28.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:09:29.031 [DEBUG] [Thread-184431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:09:29.031 [DEBUG] [Thread-184431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:09:29.032 [DEBUG] [Thread-184431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:09:29.072 [DEBUG] [Thread-184431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:09:29.073 [DEBUG] [Thread-184431] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:09:29.076 [DEBUG] [Thread-184431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:09:29.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:09:29.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:09:29.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:09:29.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:09:29.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:09:29.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:09:29.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:09:29.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:09:29.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:09:29.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.381015 -999.00  +12.70  34.46     58   +4.80 1 1 2 1 1   888    0 9.08 54.94 ----- 30.0 34.5 170.8 43.5 19.4 -25.8 18.1 -24.2 17.5 -23.4 18.4 -24.8
2026-02-14T11:09:29.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:09:29.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:09:29.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.381015
2026-02-14T11:09:29.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:09:29.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:09:29.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:09:29.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:09:29.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:09:29.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:09:17', tmtdew=9.92, humidity=50.86, cloud=0.0, wind=34.28, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:08:39.696', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:09:29.103 [DEBUG] [Thread-184431] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:09:29.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-14T11:09:29.200 [DEBUG] [Thread-184434] [transport.py] [_log()] starting thread (client mode): 0xa2ddd690
2026-02-14T11:09:29.200 [DEBUG] [Thread-184434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:09:29.215 [DEBUG] [Thread-184434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:09:29.215 [INFO] [Thread-184434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:09:29.223 [DEBUG] [Thread-184434] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:09:29.223 [DEBUG] [Thread-184434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:09:29.223 [DEBUG] [Thread-184434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:09:29.223 [DEBUG] [Thread-184434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:09:29.223 [DEBUG] [Thread-184434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:09:29.223 [DEBUG] [Thread-184434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:09:29.223 [DEBUG] [Thread-184434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:09:29.223 [DEBUG] [Thread-184434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:09:29.223 [DEBUG] [Thread-184434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:09:29.223 [DEBUG] [Thread-184434] [transport.py] [_log()] client lang: <none>
2026-02-14T11:09:29.223 [DEBUG] [Thread-184434] [transport.py] [_log()] server lang: <none>
2026-02-14T11:09:29.223 [DEBUG] [Thread-184434] [transport.py] [_log()] kex follows: False
2026-02-14T11:09:29.223 [DEBUG] [Thread-184434] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:09:29.223 [DEBUG] [Thread-184434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:09:29.223 [DEBUG] [Thread-184434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:09:29.223 [DEBUG] [Thread-184434] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:09:29.224 [DEBUG] [Thread-184434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:09:29.224 [DEBUG] [Thread-184434] [transport.py] [_log()] Compression: none
2026-02-14T11:09:29.224 [DEBUG] [Thread-184434] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:09:29.283 [DEBUG] [Thread-184434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:09:29.284 [DEBUG] [Thread-184434] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:09:29.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:09:29.285 [DEBUG] [Thread-184434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:09:29.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:09:29.345 [DEBUG] [Thread-184434] [transport.py] [_log()] userauth is OK
2026-02-14T11:09:29.345 [DEBUG] [Thread-184434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:09:29.345 [DEBUG] [Thread-184434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:09:29.345 [DEBUG] [Thread-184434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:09:29.345 [DEBUG] [Thread-184434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:09:29.365 [INFO] [Thread-184434] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:09:29.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T11:09:29.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:09:30.205 [DEBUG] [Thread-184434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:09:30.206 [DEBUG] [Thread-184434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:09:30.253 [DEBUG] [Thread-184434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:09:30.254 [DEBUG] [Thread-184434] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:09:30.262 [DEBUG] [Thread-184434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:09:30.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:09:30.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-14T11:09:30.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-14T11:09:30.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:09:30.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:09:30.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:09:30.296 [DEBUG] [Thread-184434] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:09:42.215 [DEBUG] [Thread-184436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:09:57.269 [DEBUG] [Thread-184437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:10:00.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:10:00.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:10:00.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-14T11:10:02.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 9, 53), 9.5, 52.43, 0.0, 32.52, 12.94, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:10:02.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:09:53
2026-02-14T11:10:03.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:10:03.354 [DEBUG] [Thread-184438] [transport.py] [_log()] starting thread (client mode): 0xa2d18f40
2026-02-14T11:10:03.354 [DEBUG] [Thread-184438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:10:03.376 [DEBUG] [Thread-184438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:10:03.376 [INFO] [Thread-184438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:10:03.379 [DEBUG] [Thread-184438] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:10:03.379 [DEBUG] [Thread-184438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:10:03.379 [DEBUG] [Thread-184438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:10:03.379 [DEBUG] [Thread-184438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:10:03.379 [DEBUG] [Thread-184438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:10:03.379 [DEBUG] [Thread-184438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:10:03.379 [DEBUG] [Thread-184438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:10:03.379 [DEBUG] [Thread-184438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:10:03.379 [DEBUG] [Thread-184438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:10:03.379 [DEBUG] [Thread-184438] [transport.py] [_log()] client lang: <none>
2026-02-14T11:10:03.379 [DEBUG] [Thread-184438] [transport.py] [_log()] server lang: <none>
2026-02-14T11:10:03.379 [DEBUG] [Thread-184438] [transport.py] [_log()] kex follows: False
2026-02-14T11:10:03.379 [DEBUG] [Thread-184438] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:10:03.379 [DEBUG] [Thread-184438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:10:03.379 [DEBUG] [Thread-184438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:10:03.379 [DEBUG] [Thread-184438] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:10:03.379 [DEBUG] [Thread-184438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:10:03.379 [DEBUG] [Thread-184438] [transport.py] [_log()] Compression: none
2026-02-14T11:10:03.379 [DEBUG] [Thread-184438] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:10:03.397 [DEBUG] [Thread-184438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:10:03.398 [DEBUG] [Thread-184438] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:10:03.398 [DEBUG] [Thread-184438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:10:03.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:10:03.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:10:03.400 [DEBUG] [Thread-184438] [transport.py] [_log()] userauth is OK
2026-02-14T11:10:03.401 [DEBUG] [Thread-184438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:10:03.401 [DEBUG] [Thread-184438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:10:03.401 [DEBUG] [Thread-184438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:10:03.401 [DEBUG] [Thread-184438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:10:03.425 [INFO] [Thread-184438] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:10:03.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:10:04.489 [DEBUG] [Thread-184438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:10:04.489 [DEBUG] [Thread-184438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:10:04.489 [DEBUG] [Thread-184438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:10:04.529 [DEBUG] [Thread-184438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:10:04.530 [DEBUG] [Thread-184438] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:10:04.533 [DEBUG] [Thread-184438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:10:04.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:10:04.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:10:04.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:10:04.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:10:04.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:10:04.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:10:04.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:10:04.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:10:04.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:10:04.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.381362 -999.00  +12.60  25.72     59   +4.80 1 1 1 1 1   888    0 9.04 53.59 ----- 21.3 25.7 178.4 36.4 19.5 -26.7 18.1 -24.5 17.5 -23.5 18.5 -26.3
2026-02-14T11:10:04.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:10:04.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:10:04.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.381362
2026-02-14T11:10:04.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:10:04.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:10:04.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:10:04.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:10:04.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:10:04.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:09:53', tmtdew=9.5, humidity=52.43, cloud=0.0, wind=32.52, temperature=12.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:09:09.677', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:10:04.563 [DEBUG] [Thread-184438] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:10:04.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T11:10:04.658 [DEBUG] [Thread-184441] [transport.py] [_log()] starting thread (client mode): 0xa57c1900
2026-02-14T11:10:04.659 [DEBUG] [Thread-184441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:10:04.674 [DEBUG] [Thread-184441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:10:04.674 [INFO] [Thread-184441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:10:04.682 [DEBUG] [Thread-184441] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:10:04.682 [DEBUG] [Thread-184441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:10:04.682 [DEBUG] [Thread-184441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:10:04.683 [DEBUG] [Thread-184441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:10:04.683 [DEBUG] [Thread-184441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:10:04.683 [DEBUG] [Thread-184441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:10:04.683 [DEBUG] [Thread-184441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:10:04.683 [DEBUG] [Thread-184441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:10:04.683 [DEBUG] [Thread-184441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:10:04.683 [DEBUG] [Thread-184441] [transport.py] [_log()] client lang: <none>
2026-02-14T11:10:04.683 [DEBUG] [Thread-184441] [transport.py] [_log()] server lang: <none>
2026-02-14T11:10:04.683 [DEBUG] [Thread-184441] [transport.py] [_log()] kex follows: False
2026-02-14T11:10:04.683 [DEBUG] [Thread-184441] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:10:04.683 [DEBUG] [Thread-184441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:10:04.683 [DEBUG] [Thread-184441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:10:04.683 [DEBUG] [Thread-184441] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:10:04.683 [DEBUG] [Thread-184441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:10:04.684 [DEBUG] [Thread-184441] [transport.py] [_log()] Compression: none
2026-02-14T11:10:04.684 [DEBUG] [Thread-184441] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:10:04.739 [DEBUG] [Thread-184441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:10:04.740 [DEBUG] [Thread-184441] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:10:04.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:10:04.741 [DEBUG] [Thread-184441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:10:04.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:10:04.795 [DEBUG] [Thread-184441] [transport.py] [_log()] userauth is OK
2026-02-14T11:10:04.795 [DEBUG] [Thread-184441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:10:04.795 [DEBUG] [Thread-184441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:10:04.795 [DEBUG] [Thread-184441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:10:04.795 [DEBUG] [Thread-184441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:10:04.814 [INFO] [Thread-184441] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:10:04.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-14T11:10:04.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:10:05.627 [DEBUG] [Thread-184441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:10:05.627 [DEBUG] [Thread-184441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:10:05.675 [DEBUG] [Thread-184441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:10:05.675 [DEBUG] [Thread-184441] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:10:05.684 [DEBUG] [Thread-184441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:10:05.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:10:05.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:10:05.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:10:05.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:10:05.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:10:05.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:10:05.717 [DEBUG] [Thread-184441] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:10:10.207 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:10:10.208 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:10:12.306 [DEBUG] [Thread-184443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:10:18.412 [DEBUG] [Thread-184444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:10:27.358 [DEBUG] [Thread-184445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:10:35.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:10:35.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:10:35.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-14T11:10:37.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 10, 28), 9.64, 52.0, 0.0, 30.07, 13.14, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:10:37.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:10:28
2026-02-14T11:10:37.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:10:38.089 [DEBUG] [Thread-184446] [transport.py] [_log()] starting thread (client mode): 0xa2d1bdc0
2026-02-14T11:10:38.089 [DEBUG] [Thread-184446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:10:38.110 [DEBUG] [Thread-184446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:10:38.110 [INFO] [Thread-184446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:10:38.113 [DEBUG] [Thread-184446] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:10:38.113 [DEBUG] [Thread-184446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:10:38.113 [DEBUG] [Thread-184446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:10:38.113 [DEBUG] [Thread-184446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:10:38.113 [DEBUG] [Thread-184446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:10:38.113 [DEBUG] [Thread-184446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:10:38.113 [DEBUG] [Thread-184446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:10:38.113 [DEBUG] [Thread-184446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:10:38.113 [DEBUG] [Thread-184446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:10:38.113 [DEBUG] [Thread-184446] [transport.py] [_log()] client lang: <none>
2026-02-14T11:10:38.114 [DEBUG] [Thread-184446] [transport.py] [_log()] server lang: <none>
2026-02-14T11:10:38.114 [DEBUG] [Thread-184446] [transport.py] [_log()] kex follows: False
2026-02-14T11:10:38.114 [DEBUG] [Thread-184446] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:10:38.114 [DEBUG] [Thread-184446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:10:38.114 [DEBUG] [Thread-184446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:10:38.114 [DEBUG] [Thread-184446] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:10:38.114 [DEBUG] [Thread-184446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:10:38.114 [DEBUG] [Thread-184446] [transport.py] [_log()] Compression: none
2026-02-14T11:10:38.114 [DEBUG] [Thread-184446] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:10:38.131 [DEBUG] [Thread-184446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:10:38.131 [DEBUG] [Thread-184446] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:10:38.132 [DEBUG] [Thread-184446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:10:38.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:10:38.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:10:38.134 [DEBUG] [Thread-184446] [transport.py] [_log()] userauth is OK
2026-02-14T11:10:38.134 [DEBUG] [Thread-184446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:10:38.134 [DEBUG] [Thread-184446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:10:38.134 [DEBUG] [Thread-184446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:10:38.134 [DEBUG] [Thread-184446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:10:38.159 [INFO] [Thread-184446] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:10:38.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:10:38.748 [DEBUG] [Thread-184446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:10:38.748 [DEBUG] [Thread-184446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:10:38.749 [DEBUG] [Thread-184446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:10:38.789 [DEBUG] [Thread-184446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:10:38.790 [DEBUG] [Thread-184446] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:10:38.793 [DEBUG] [Thread-184446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:10:38.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:10:38.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:10:38.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:10:38.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:10:38.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:10:38.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:10:38.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:10:38.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:10:38.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:10:38.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.382056 -999.00  +13.00  21.67     58   +5.10 1 2 1 1 1   888    0 9.17 54.87 ----- 24.3 21.7 157.8 36.0 19.9 -25.2 18.3 -22.6 17.6 -22.8 18.8 -23.9
2026-02-14T11:10:38.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:10:38.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:10:38.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.382056
2026-02-14T11:10:38.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:10:38.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:10:38.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:10:38.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:10:38.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:10:38.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:10:28', tmtdew=9.64, humidity=52.0, cloud=0.0, wind=30.07, temperature=13.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:10:09.638', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:10:38.822 [DEBUG] [Thread-184446] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:10:38.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-14T11:10:38.926 [DEBUG] [Thread-184449] [transport.py] [_log()] starting thread (client mode): 0xa2ddcee0
2026-02-14T11:10:38.926 [DEBUG] [Thread-184449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:10:38.941 [DEBUG] [Thread-184449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:10:38.941 [INFO] [Thread-184449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:10:38.951 [DEBUG] [Thread-184449] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:10:38.951 [DEBUG] [Thread-184449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:10:38.951 [DEBUG] [Thread-184449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:10:38.951 [DEBUG] [Thread-184449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:10:38.951 [DEBUG] [Thread-184449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:10:38.951 [DEBUG] [Thread-184449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:10:38.951 [DEBUG] [Thread-184449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:10:38.951 [DEBUG] [Thread-184449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:10:38.951 [DEBUG] [Thread-184449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:10:38.951 [DEBUG] [Thread-184449] [transport.py] [_log()] client lang: <none>
2026-02-14T11:10:38.951 [DEBUG] [Thread-184449] [transport.py] [_log()] server lang: <none>
2026-02-14T11:10:38.951 [DEBUG] [Thread-184449] [transport.py] [_log()] kex follows: False
2026-02-14T11:10:38.952 [DEBUG] [Thread-184449] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:10:38.952 [DEBUG] [Thread-184449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:10:38.952 [DEBUG] [Thread-184449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:10:38.952 [DEBUG] [Thread-184449] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:10:38.952 [DEBUG] [Thread-184449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:10:38.952 [DEBUG] [Thread-184449] [transport.py] [_log()] Compression: none
2026-02-14T11:10:38.952 [DEBUG] [Thread-184449] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:10:39.010 [DEBUG] [Thread-184449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:10:39.011 [DEBUG] [Thread-184449] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:10:39.011 [DEBUG] [Thread-184449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:10:39.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:10:39.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:10:39.067 [DEBUG] [Thread-184449] [transport.py] [_log()] userauth is OK
2026-02-14T11:10:39.067 [DEBUG] [Thread-184449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:10:39.067 [DEBUG] [Thread-184449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:10:39.067 [DEBUG] [Thread-184449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:10:39.067 [DEBUG] [Thread-184449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:10:39.087 [INFO] [Thread-184449] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:10:39.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-14T11:10:39.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:10:39.875 [DEBUG] [Thread-184449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:10:39.875 [DEBUG] [Thread-184449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:10:39.922 [DEBUG] [Thread-184449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:10:39.923 [DEBUG] [Thread-184449] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:10:39.932 [DEBUG] [Thread-184449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:10:39.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:10:39.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:10:39.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:10:39.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:10:39.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:10:39.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:10:39.971 [DEBUG] [Thread-184449] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:10:42.392 [DEBUG] [Thread-184451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:10:57.450 [DEBUG] [Thread-184452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:11:09.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:11:09.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:11:09.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-14T11:11:10.356 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:11:10.357 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:11:12.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 11, 3), 9.69, 51.82, 0.0, 30.37, 13.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:11:12.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:11:03
2026-02-14T11:11:12.487 [DEBUG] [Thread-184453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:11:12.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:11:12.653 [DEBUG] [Thread-184454] [transport.py] [_log()] starting thread (client mode): 0xa2ddd0c0
2026-02-14T11:11:12.653 [DEBUG] [Thread-184454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:11:12.673 [DEBUG] [Thread-184454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:11:12.673 [INFO] [Thread-184454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:11:12.676 [DEBUG] [Thread-184454] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:11:12.676 [DEBUG] [Thread-184454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:11:12.677 [DEBUG] [Thread-184454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:11:12.677 [DEBUG] [Thread-184454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:11:12.677 [DEBUG] [Thread-184454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:11:12.677 [DEBUG] [Thread-184454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:11:12.677 [DEBUG] [Thread-184454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:11:12.677 [DEBUG] [Thread-184454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:11:12.677 [DEBUG] [Thread-184454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:11:12.677 [DEBUG] [Thread-184454] [transport.py] [_log()] client lang: <none>
2026-02-14T11:11:12.677 [DEBUG] [Thread-184454] [transport.py] [_log()] server lang: <none>
2026-02-14T11:11:12.677 [DEBUG] [Thread-184454] [transport.py] [_log()] kex follows: False
2026-02-14T11:11:12.677 [DEBUG] [Thread-184454] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:11:12.677 [DEBUG] [Thread-184454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:11:12.677 [DEBUG] [Thread-184454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:11:12.677 [DEBUG] [Thread-184454] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:11:12.678 [DEBUG] [Thread-184454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:11:12.678 [DEBUG] [Thread-184454] [transport.py] [_log()] Compression: none
2026-02-14T11:11:12.678 [DEBUG] [Thread-184454] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:11:12.696 [DEBUG] [Thread-184454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:11:12.697 [DEBUG] [Thread-184454] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:11:12.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:11:12.698 [DEBUG] [Thread-184454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:11:12.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:11:12.700 [DEBUG] [Thread-184454] [transport.py] [_log()] userauth is OK
2026-02-14T11:11:12.700 [DEBUG] [Thread-184454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:11:12.700 [DEBUG] [Thread-184454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:11:12.700 [DEBUG] [Thread-184454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:11:12.700 [DEBUG] [Thread-184454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:11:12.719 [INFO] [Thread-184454] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:11:12.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:11:13.347 [DEBUG] [Thread-184454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:11:13.347 [DEBUG] [Thread-184454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:11:13.348 [DEBUG] [Thread-184454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:11:13.389 [DEBUG] [Thread-184454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:11:13.389 [DEBUG] [Thread-184454] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:11:13.392 [DEBUG] [Thread-184454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:11:13.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:11:13.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:11:13.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:11:13.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:11:13.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:11:13.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:11:13.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:11:13.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:11:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:11:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.382404 -999.00  +13.20  29.80     58   +5.10 1 1 1 1 1   888    0 9.02 54.09 ----- 29.0 29.8 171.6 37.8 19.9 -25.4 18.3 -24.8 17.6 -23.1 18.8 -24.5
2026-02-14T11:11:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:11:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:11:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.382404
2026-02-14T11:11:13.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:11:13.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:11:13.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:11:13.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:11:13.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:11:13.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:11:03', tmtdew=9.69, humidity=51.82, cloud=0.0, wind=30.37, temperature=13.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:10:39.706', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:11:13.414 [DEBUG] [Thread-184454] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:11:13.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-14T11:11:13.510 [DEBUG] [Thread-184457] [transport.py] [_log()] starting thread (client mode): 0xa2ddc490
2026-02-14T11:11:13.510 [DEBUG] [Thread-184457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:11:13.525 [DEBUG] [Thread-184457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:11:13.526 [INFO] [Thread-184457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:11:13.533 [DEBUG] [Thread-184457] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:11:13.534 [DEBUG] [Thread-184457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:11:13.534 [DEBUG] [Thread-184457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:11:13.534 [DEBUG] [Thread-184457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:11:13.534 [DEBUG] [Thread-184457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:11:13.534 [DEBUG] [Thread-184457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:11:13.534 [DEBUG] [Thread-184457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:11:13.534 [DEBUG] [Thread-184457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:11:13.534 [DEBUG] [Thread-184457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:11:13.534 [DEBUG] [Thread-184457] [transport.py] [_log()] client lang: <none>
2026-02-14T11:11:13.534 [DEBUG] [Thread-184457] [transport.py] [_log()] server lang: <none>
2026-02-14T11:11:13.534 [DEBUG] [Thread-184457] [transport.py] [_log()] kex follows: False
2026-02-14T11:11:13.534 [DEBUG] [Thread-184457] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:11:13.534 [DEBUG] [Thread-184457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:11:13.534 [DEBUG] [Thread-184457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:11:13.534 [DEBUG] [Thread-184457] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:11:13.534 [DEBUG] [Thread-184457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:11:13.534 [DEBUG] [Thread-184457] [transport.py] [_log()] Compression: none
2026-02-14T11:11:13.535 [DEBUG] [Thread-184457] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:11:13.594 [DEBUG] [Thread-184457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:11:13.595 [DEBUG] [Thread-184457] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:11:13.596 [DEBUG] [Thread-184457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:11:13.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:11:13.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:11:13.651 [DEBUG] [Thread-184457] [transport.py] [_log()] userauth is OK
2026-02-14T11:11:13.651 [DEBUG] [Thread-184457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:11:13.651 [DEBUG] [Thread-184457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:11:13.652 [DEBUG] [Thread-184457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:11:13.652 [DEBUG] [Thread-184457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:11:13.670 [INFO] [Thread-184457] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:11:13.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T11:11:13.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:11:14.495 [DEBUG] [Thread-184457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:11:14.495 [DEBUG] [Thread-184457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:11:14.546 [DEBUG] [Thread-184457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:11:14.546 [DEBUG] [Thread-184457] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:11:14.559 [DEBUG] [Thread-184457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:11:14.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:11:14.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:11:14.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-14T11:11:14.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:11:14.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:11:14.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:11:14.603 [DEBUG] [Thread-184457] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:11:18.455 [DEBUG] [Thread-184459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:11:27.526 [DEBUG] [Thread-184460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:11:42.583 [DEBUG] [Thread-184461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:11:44.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:11:44.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:11:44.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-14T11:11:46.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 11, 39), 10.76, 48.34, 0.0, 42.73, 14.45, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:11:46.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:11:39
2026-02-14T11:11:46.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:11:46.902 [DEBUG] [Thread-184462] [transport.py] [_log()] starting thread (client mode): 0xa2d19c00
2026-02-14T11:11:46.902 [DEBUG] [Thread-184462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:11:46.923 [DEBUG] [Thread-184462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:11:46.924 [INFO] [Thread-184462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:11:46.927 [DEBUG] [Thread-184462] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:11:46.927 [DEBUG] [Thread-184462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:11:46.927 [DEBUG] [Thread-184462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:11:46.927 [DEBUG] [Thread-184462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:11:46.927 [DEBUG] [Thread-184462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:11:46.927 [DEBUG] [Thread-184462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:11:46.927 [DEBUG] [Thread-184462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:11:46.927 [DEBUG] [Thread-184462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:11:46.927 [DEBUG] [Thread-184462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:11:46.927 [DEBUG] [Thread-184462] [transport.py] [_log()] client lang: <none>
2026-02-14T11:11:46.927 [DEBUG] [Thread-184462] [transport.py] [_log()] server lang: <none>
2026-02-14T11:11:46.927 [DEBUG] [Thread-184462] [transport.py] [_log()] kex follows: False
2026-02-14T11:11:46.927 [DEBUG] [Thread-184462] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:11:46.927 [DEBUG] [Thread-184462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:11:46.927 [DEBUG] [Thread-184462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:11:46.927 [DEBUG] [Thread-184462] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:11:46.927 [DEBUG] [Thread-184462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:11:46.927 [DEBUG] [Thread-184462] [transport.py] [_log()] Compression: none
2026-02-14T11:11:46.927 [DEBUG] [Thread-184462] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:11:46.944 [DEBUG] [Thread-184462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:11:46.945 [DEBUG] [Thread-184462] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:11:46.945 [DEBUG] [Thread-184462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:11:46.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:11:46.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:11:46.948 [DEBUG] [Thread-184462] [transport.py] [_log()] userauth is OK
2026-02-14T11:11:46.948 [DEBUG] [Thread-184462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:11:46.949 [DEBUG] [Thread-184462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:11:46.949 [DEBUG] [Thread-184462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:11:46.949 [DEBUG] [Thread-184462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:11:46.973 [INFO] [Thread-184462] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:11:46.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:11:47.594 [DEBUG] [Thread-184462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:11:47.594 [DEBUG] [Thread-184462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:11:47.595 [DEBUG] [Thread-184462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:11:47.635 [DEBUG] [Thread-184462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:11:47.635 [DEBUG] [Thread-184462] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:11:47.638 [DEBUG] [Thread-184462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:11:47.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:11:47.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:11:47.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:11:47.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:11:47.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:11:47.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:11:47.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:11:47.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:11:47.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:11:47.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.382751 -999.00  +13.20  31.29     57   +4.90 1 2 2 1 1   888    0 9.13 53.34 ----- 32.2 31.3 162.0 43.1 19.7 -27.9 18.6 -23.2 17.8 -22.4 18.7 -26.0
2026-02-14T11:11:47.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:11:47.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:11:47.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.382751
2026-02-14T11:11:47.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:11:47.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:11:47.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:11:47.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:11:47.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:11:47.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:11:39', tmtdew=10.76, humidity=48.34, cloud=0.0, wind=42.73, temperature=14.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:11:09.686', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:11:47.657 [DEBUG] [Thread-184462] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:11:47.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-14T11:11:47.740 [DEBUG] [Thread-184465] [transport.py] [_log()] starting thread (client mode): 0xa5740e20
2026-02-14T11:11:47.741 [DEBUG] [Thread-184465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:11:47.755 [DEBUG] [Thread-184465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:11:47.755 [INFO] [Thread-184465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:11:47.763 [DEBUG] [Thread-184465] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:11:47.763 [DEBUG] [Thread-184465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:11:47.764 [DEBUG] [Thread-184465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:11:47.764 [DEBUG] [Thread-184465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:11:47.764 [DEBUG] [Thread-184465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:11:47.764 [DEBUG] [Thread-184465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:11:47.764 [DEBUG] [Thread-184465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:11:47.764 [DEBUG] [Thread-184465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:11:47.764 [DEBUG] [Thread-184465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:11:47.764 [DEBUG] [Thread-184465] [transport.py] [_log()] client lang: <none>
2026-02-14T11:11:47.764 [DEBUG] [Thread-184465] [transport.py] [_log()] server lang: <none>
2026-02-14T11:11:47.765 [DEBUG] [Thread-184465] [transport.py] [_log()] kex follows: False
2026-02-14T11:11:47.765 [DEBUG] [Thread-184465] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:11:47.765 [DEBUG] [Thread-184465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:11:47.765 [DEBUG] [Thread-184465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:11:47.765 [DEBUG] [Thread-184465] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:11:47.765 [DEBUG] [Thread-184465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:11:47.765 [DEBUG] [Thread-184465] [transport.py] [_log()] Compression: none
2026-02-14T11:11:47.766 [DEBUG] [Thread-184465] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:11:47.822 [DEBUG] [Thread-184465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:11:47.823 [DEBUG] [Thread-184465] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:11:47.823 [DEBUG] [Thread-184465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:11:47.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:11:47.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:11:47.881 [DEBUG] [Thread-184465] [transport.py] [_log()] userauth is OK
2026-02-14T11:11:47.881 [DEBUG] [Thread-184465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:11:47.881 [DEBUG] [Thread-184465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:11:47.881 [DEBUG] [Thread-184465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:11:47.882 [DEBUG] [Thread-184465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:11:47.900 [INFO] [Thread-184465] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:11:47.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-14T11:11:47.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:11:48.730 [DEBUG] [Thread-184465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:11:48.731 [DEBUG] [Thread-184465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:11:48.783 [DEBUG] [Thread-184465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:11:48.783 [DEBUG] [Thread-184465] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:11:48.792 [DEBUG] [Thread-184465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:11:48.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:11:48.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:11:48.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:11:48.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:11:48.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:11:48.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:11:48.828 [DEBUG] [Thread-184465] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:11:57.619 [DEBUG] [Thread-184467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:12:10.500 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:12:10.501 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:12:12.676 [DEBUG] [Thread-184468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:12:18.489 [DEBUG] [Thread-184469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:12:18.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:12:18.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:12:18.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T11:12:20.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 11, 39), 10.76, 48.34, 0.0, 42.73, 14.45, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:12:20.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:11:39
2026-02-14T11:12:21.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:12:21.262 [DEBUG] [Thread-184470] [transport.py] [_log()] starting thread (client mode): 0xa57437f0
2026-02-14T11:12:21.262 [DEBUG] [Thread-184470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:12:21.282 [DEBUG] [Thread-184470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:12:21.282 [INFO] [Thread-184470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:12:21.285 [DEBUG] [Thread-184470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:12:21.286 [DEBUG] [Thread-184470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:12:21.286 [DEBUG] [Thread-184470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:12:21.286 [DEBUG] [Thread-184470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:12:21.286 [DEBUG] [Thread-184470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:12:21.286 [DEBUG] [Thread-184470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:12:21.286 [DEBUG] [Thread-184470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:12:21.286 [DEBUG] [Thread-184470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:12:21.286 [DEBUG] [Thread-184470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:12:21.286 [DEBUG] [Thread-184470] [transport.py] [_log()] client lang: <none>
2026-02-14T11:12:21.286 [DEBUG] [Thread-184470] [transport.py] [_log()] server lang: <none>
2026-02-14T11:12:21.286 [DEBUG] [Thread-184470] [transport.py] [_log()] kex follows: False
2026-02-14T11:12:21.286 [DEBUG] [Thread-184470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:12:21.286 [DEBUG] [Thread-184470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:12:21.287 [DEBUG] [Thread-184470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:12:21.287 [DEBUG] [Thread-184470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:12:21.287 [DEBUG] [Thread-184470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:12:21.287 [DEBUG] [Thread-184470] [transport.py] [_log()] Compression: none
2026-02-14T11:12:21.287 [DEBUG] [Thread-184470] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:12:21.299 [DEBUG] [Thread-184470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:12:21.299 [DEBUG] [Thread-184470] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:12:21.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:12:21.300 [DEBUG] [Thread-184470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:12:21.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:12:21.303 [DEBUG] [Thread-184470] [transport.py] [_log()] userauth is OK
2026-02-14T11:12:21.303 [DEBUG] [Thread-184470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:12:21.303 [DEBUG] [Thread-184470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:12:21.303 [DEBUG] [Thread-184470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:12:21.303 [DEBUG] [Thread-184470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:12:21.328 [INFO] [Thread-184470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:12:21.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:12:21.995 [DEBUG] [Thread-184470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:12:21.996 [DEBUG] [Thread-184470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:12:21.996 [DEBUG] [Thread-184470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:12:22.036 [DEBUG] [Thread-184470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:12:22.037 [DEBUG] [Thread-184470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:12:22.040 [DEBUG] [Thread-184470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:12:22.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:12:22.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:12:22.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:12:22.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:12:22.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:12:22.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:12:22.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:12:22.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:12:22.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:12:22.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.383098 -999.00  +12.80  29.30     57   +4.60 1 1 1 1 1   888    0 9.22 56.41 ----- 28.3 29.3 163.2 45.0 19.7 -26.3 18.4 -26.4 17.6 -25.6 18.7 -25.4
2026-02-14T11:12:22.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:12:22.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:12:22.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.383098
2026-02-14T11:12:22.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:12:22.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:12:22.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:12:22.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:12:22.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:12:22.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:11:39', tmtdew=10.76, humidity=48.34, cloud=0.0, wind=42.73, temperature=14.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:11:39.667', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:12:22.067 [DEBUG] [Thread-184470] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:12:22.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-14T11:12:22.164 [DEBUG] [Thread-184473] [transport.py] [_log()] starting thread (client mode): 0xa2d189d0
2026-02-14T11:12:22.164 [DEBUG] [Thread-184473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:12:22.180 [DEBUG] [Thread-184473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:12:22.180 [INFO] [Thread-184473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:12:22.188 [DEBUG] [Thread-184473] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:12:22.189 [DEBUG] [Thread-184473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:12:22.189 [DEBUG] [Thread-184473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:12:22.189 [DEBUG] [Thread-184473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:12:22.189 [DEBUG] [Thread-184473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:12:22.189 [DEBUG] [Thread-184473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:12:22.189 [DEBUG] [Thread-184473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:12:22.189 [DEBUG] [Thread-184473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:12:22.189 [DEBUG] [Thread-184473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:12:22.190 [DEBUG] [Thread-184473] [transport.py] [_log()] client lang: <none>
2026-02-14T11:12:22.190 [DEBUG] [Thread-184473] [transport.py] [_log()] server lang: <none>
2026-02-14T11:12:22.190 [DEBUG] [Thread-184473] [transport.py] [_log()] kex follows: False
2026-02-14T11:12:22.190 [DEBUG] [Thread-184473] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:12:22.190 [DEBUG] [Thread-184473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:12:22.190 [DEBUG] [Thread-184473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:12:22.190 [DEBUG] [Thread-184473] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:12:22.190 [DEBUG] [Thread-184473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:12:22.191 [DEBUG] [Thread-184473] [transport.py] [_log()] Compression: none
2026-02-14T11:12:22.191 [DEBUG] [Thread-184473] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:12:22.248 [DEBUG] [Thread-184473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:12:22.248 [DEBUG] [Thread-184473] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:12:22.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:12:22.250 [DEBUG] [Thread-184473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:12:22.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:12:22.307 [DEBUG] [Thread-184473] [transport.py] [_log()] userauth is OK
2026-02-14T11:12:22.308 [DEBUG] [Thread-184473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:12:22.308 [DEBUG] [Thread-184473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:12:22.308 [DEBUG] [Thread-184473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:12:22.308 [DEBUG] [Thread-184473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:12:22.327 [INFO] [Thread-184473] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:12:22.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-14T11:12:22.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:12:23.152 [DEBUG] [Thread-184473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:12:23.152 [DEBUG] [Thread-184473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:12:23.201 [DEBUG] [Thread-184473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:12:23.202 [DEBUG] [Thread-184473] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:12:23.211 [DEBUG] [Thread-184473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:12:23.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:12:23.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-14T11:12:23.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-14T11:12:23.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:12:23.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:12:23.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:12:23.464 [DEBUG] [Thread-184473] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:12:27.715 [DEBUG] [Thread-184475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:12:42.769 [DEBUG] [Thread-184476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:12:53.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:12:53.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:12:53.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-14T11:12:55.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 12, 14), 9.68, 51.95, 0.0, 34.32, 13.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:12:55.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:12:14
2026-02-14T11:12:55.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:12:55.926 [DEBUG] [Thread-184477] [transport.py] [_log()] starting thread (client mode): 0xa2db6830
2026-02-14T11:12:55.927 [DEBUG] [Thread-184477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:12:55.946 [DEBUG] [Thread-184477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:12:55.946 [INFO] [Thread-184477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:12:55.948 [DEBUG] [Thread-184477] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:12:55.948 [DEBUG] [Thread-184477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:12:55.948 [DEBUG] [Thread-184477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:12:55.948 [DEBUG] [Thread-184477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:12:55.948 [DEBUG] [Thread-184477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:12:55.948 [DEBUG] [Thread-184477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:12:55.948 [DEBUG] [Thread-184477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:12:55.948 [DEBUG] [Thread-184477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:12:55.948 [DEBUG] [Thread-184477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:12:55.949 [DEBUG] [Thread-184477] [transport.py] [_log()] client lang: <none>
2026-02-14T11:12:55.949 [DEBUG] [Thread-184477] [transport.py] [_log()] server lang: <none>
2026-02-14T11:12:55.949 [DEBUG] [Thread-184477] [transport.py] [_log()] kex follows: False
2026-02-14T11:12:55.949 [DEBUG] [Thread-184477] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:12:55.949 [DEBUG] [Thread-184477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:12:55.949 [DEBUG] [Thread-184477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:12:55.949 [DEBUG] [Thread-184477] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:12:55.949 [DEBUG] [Thread-184477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:12:55.949 [DEBUG] [Thread-184477] [transport.py] [_log()] Compression: none
2026-02-14T11:12:55.949 [DEBUG] [Thread-184477] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:12:55.966 [DEBUG] [Thread-184477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:12:55.966 [DEBUG] [Thread-184477] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:12:55.967 [DEBUG] [Thread-184477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:12:55.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:12:55.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:12:55.969 [DEBUG] [Thread-184477] [transport.py] [_log()] userauth is OK
2026-02-14T11:12:55.969 [DEBUG] [Thread-184477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:12:55.969 [DEBUG] [Thread-184477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:12:55.969 [DEBUG] [Thread-184477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:12:55.969 [DEBUG] [Thread-184477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:12:55.995 [INFO] [Thread-184477] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:12:55.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:12:56.799 [DEBUG] [Thread-184477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:12:56.799 [DEBUG] [Thread-184477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:12:56.799 [DEBUG] [Thread-184477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:12:56.841 [DEBUG] [Thread-184477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:12:56.841 [DEBUG] [Thread-184477] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:12:56.844 [DEBUG] [Thread-184477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:12:56.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:12:56.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:12:56.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:12:56.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:12:56.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:12:56.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:12:56.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:12:56.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:12:56.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:12:56.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.383445 -999.00  +12.80  28.85     56   +4.30 1 1 1 1 1   888    0 9.27 57.78 ----- 31.3 28.9 159.8 38.4 19.6 -27.7 18.3 -24.4 17.6 -23.6 18.6 -26.6
2026-02-14T11:12:56.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:12:56.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:12:56.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.383445
2026-02-14T11:12:56.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:12:56.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:12:56.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:12:56.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:12:56.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:12:56.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:12:14', tmtdew=9.68, humidity=51.95, cloud=0.0, wind=34.32, temperature=13.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:12:09.648', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:12:56.866 [DEBUG] [Thread-184477] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:12:56.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-14T11:12:57.803 [DEBUG] [Thread-184480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:13:10.643 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:13:10.644 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:13:12.857 [DEBUG] [Thread-184481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:13:18.521 [DEBUG] [Thread-184482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:13:27.898 [DEBUG] [Thread-184483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:13:42.934 [DEBUG] [Thread-184484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:13:57.968 [DEBUG] [Thread-184485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:14:10.787 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:14:10.788 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:14:13.005 [DEBUG] [Thread-184486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:14:18.555 [DEBUG] [Thread-184487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:14:28.046 [DEBUG] [Thread-184488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:14:43.082 [DEBUG] [Thread-184489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:14:58.114 [DEBUG] [Thread-184490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:15:08.727 [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-14T11:15:10.929 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:15:10.930 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:15:13.145 [DEBUG] [Thread-184491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:15:18.611 [DEBUG] [Thread-184492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:15:28.181 [DEBUG] [Thread-184493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:15:38.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:15:38.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:15:38.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-14T11:15:40.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 15, 10), 9.96, 50.81, 0.0, 35.15, 12.78, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:15:40.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:15:10
2026-02-14T11:15:40.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:15:41.118 [DEBUG] [Thread-184494] [transport.py] [_log()] starting thread (client mode): 0xa2dde560
2026-02-14T11:15:41.119 [DEBUG] [Thread-184494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:15:41.139 [DEBUG] [Thread-184494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:15:41.140 [INFO] [Thread-184494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:15:41.142 [DEBUG] [Thread-184494] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:15:41.143 [DEBUG] [Thread-184494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:15:41.143 [DEBUG] [Thread-184494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:15:41.143 [DEBUG] [Thread-184494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:15:41.143 [DEBUG] [Thread-184494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:15:41.143 [DEBUG] [Thread-184494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:15:41.143 [DEBUG] [Thread-184494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:15:41.143 [DEBUG] [Thread-184494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:15:41.143 [DEBUG] [Thread-184494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:15:41.143 [DEBUG] [Thread-184494] [transport.py] [_log()] client lang: <none>
2026-02-14T11:15:41.143 [DEBUG] [Thread-184494] [transport.py] [_log()] server lang: <none>
2026-02-14T11:15:41.143 [DEBUG] [Thread-184494] [transport.py] [_log()] kex follows: False
2026-02-14T11:15:41.143 [DEBUG] [Thread-184494] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:15:41.144 [DEBUG] [Thread-184494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:15:41.144 [DEBUG] [Thread-184494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:15:41.144 [DEBUG] [Thread-184494] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:15:41.144 [DEBUG] [Thread-184494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:15:41.144 [DEBUG] [Thread-184494] [transport.py] [_log()] Compression: none
2026-02-14T11:15:41.144 [DEBUG] [Thread-184494] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:15:41.163 [DEBUG] [Thread-184494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:15:41.163 [DEBUG] [Thread-184494] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:15:41.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:15:41.164 [DEBUG] [Thread-184494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:15:41.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:15:41.166 [DEBUG] [Thread-184494] [transport.py] [_log()] userauth is OK
2026-02-14T11:15:41.167 [DEBUG] [Thread-184494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:15:41.167 [DEBUG] [Thread-184494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:15:41.167 [DEBUG] [Thread-184494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:15:41.167 [DEBUG] [Thread-184494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:15:41.192 [INFO] [Thread-184494] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:15:41.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:15:41.829 [DEBUG] [Thread-184494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:15:41.829 [DEBUG] [Thread-184494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:15:41.829 [DEBUG] [Thread-184494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:15:41.870 [DEBUG] [Thread-184494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:15:41.871 [DEBUG] [Thread-184494] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:15:41.874 [DEBUG] [Thread-184494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:15:41.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:15:41.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:15:41.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:15:41.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:15:41.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:15:41.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:15:41.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:15:41.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:15:41.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:15:41.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.385529 -999.00  +12.50  23.71     58   +4.60 1 1 1 1 1   888    0 9.80 70.26 ----- 21.7 23.7 167.0 36.0 19.6 -26.1 18.4 -23.7 17.6 -23.6 18.7 -25.1
2026-02-14T11:15:41.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:15:41.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:15:41.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.385529
2026-02-14T11:15:41.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:15:41.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:15:41.908 [DEBUG] [Thread-184494] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:15:41.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:15:41.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:15:41.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:15:41.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:15:10', tmtdew=9.96, humidity=50.81, cloud=0.0, wind=35.15, temperature=12.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:15:09.706', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:15:41.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-14T11:15:42.003 [DEBUG] [Thread-184497] [transport.py] [_log()] starting thread (client mode): 0xa5740490
2026-02-14T11:15:42.003 [DEBUG] [Thread-184497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:15:42.021 [DEBUG] [Thread-184497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:15:42.021 [INFO] [Thread-184497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:15:42.029 [DEBUG] [Thread-184497] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:15:42.029 [DEBUG] [Thread-184497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:15:42.029 [DEBUG] [Thread-184497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:15:42.029 [DEBUG] [Thread-184497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:15:42.029 [DEBUG] [Thread-184497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:15:42.029 [DEBUG] [Thread-184497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:15:42.030 [DEBUG] [Thread-184497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:15:42.030 [DEBUG] [Thread-184497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:15:42.030 [DEBUG] [Thread-184497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:15:42.030 [DEBUG] [Thread-184497] [transport.py] [_log()] client lang: <none>
2026-02-14T11:15:42.030 [DEBUG] [Thread-184497] [transport.py] [_log()] server lang: <none>
2026-02-14T11:15:42.030 [DEBUG] [Thread-184497] [transport.py] [_log()] kex follows: False
2026-02-14T11:15:42.030 [DEBUG] [Thread-184497] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:15:42.030 [DEBUG] [Thread-184497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:15:42.030 [DEBUG] [Thread-184497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:15:42.031 [DEBUG] [Thread-184497] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:15:42.031 [DEBUG] [Thread-184497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:15:42.031 [DEBUG] [Thread-184497] [transport.py] [_log()] Compression: none
2026-02-14T11:15:42.031 [DEBUG] [Thread-184497] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:15:42.086 [DEBUG] [Thread-184497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:15:42.087 [DEBUG] [Thread-184497] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:15:42.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:15:42.088 [DEBUG] [Thread-184497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:15:42.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:15:42.142 [DEBUG] [Thread-184497] [transport.py] [_log()] userauth is OK
2026-02-14T11:15:42.143 [DEBUG] [Thread-184497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:15:42.143 [DEBUG] [Thread-184497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:15:42.143 [DEBUG] [Thread-184497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:15:42.143 [DEBUG] [Thread-184497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:15:42.162 [INFO] [Thread-184497] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:15:42.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T11:15:42.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:15:43.003 [DEBUG] [Thread-184497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:15:43.003 [DEBUG] [Thread-184497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:15:43.051 [DEBUG] [Thread-184497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:15:43.051 [DEBUG] [Thread-184497] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:15:43.060 [DEBUG] [Thread-184497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:15:43.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:15:43.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-14T11:15:43.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:15:43.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:15:43.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:15:43.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:15:43.094 [DEBUG] [Thread-184497] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:15:43.217 [DEBUG] [Thread-184499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:15:58.270 [DEBUG] [Thread-184500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:16:11.075 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:16:11.077 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:16:13.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:16:13.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:16:13.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-14T11:16:13.306 [DEBUG] [Thread-184501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:16:14.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 15, 46), 9.39, 52.63, 0.0, 30.49, 12.88, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:16:14.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:15:46
2026-02-14T11:16:15.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:16:15.474 [DEBUG] [Thread-184502] [transport.py] [_log()] starting thread (client mode): 0xa57400d0
2026-02-14T11:16:15.474 [DEBUG] [Thread-184502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:16:15.494 [DEBUG] [Thread-184502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:16:15.494 [INFO] [Thread-184502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:16:15.495 [DEBUG] [Thread-184502] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:16:15.496 [DEBUG] [Thread-184502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:16:15.496 [DEBUG] [Thread-184502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:16:15.496 [DEBUG] [Thread-184502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:16:15.496 [DEBUG] [Thread-184502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:16:15.496 [DEBUG] [Thread-184502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:16:15.496 [DEBUG] [Thread-184502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:16:15.496 [DEBUG] [Thread-184502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:16:15.496 [DEBUG] [Thread-184502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:16:15.496 [DEBUG] [Thread-184502] [transport.py] [_log()] client lang: <none>
2026-02-14T11:16:15.496 [DEBUG] [Thread-184502] [transport.py] [_log()] server lang: <none>
2026-02-14T11:16:15.496 [DEBUG] [Thread-184502] [transport.py] [_log()] kex follows: False
2026-02-14T11:16:15.496 [DEBUG] [Thread-184502] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:16:15.497 [DEBUG] [Thread-184502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:16:15.497 [DEBUG] [Thread-184502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:16:15.497 [DEBUG] [Thread-184502] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:16:15.497 [DEBUG] [Thread-184502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:16:15.497 [DEBUG] [Thread-184502] [transport.py] [_log()] Compression: none
2026-02-14T11:16:15.497 [DEBUG] [Thread-184502] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:16:15.505 [DEBUG] [Thread-184502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:16:15.505 [DEBUG] [Thread-184502] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:16:15.505 [DEBUG] [Thread-184502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:16:15.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:16:15.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:16:15.507 [DEBUG] [Thread-184502] [transport.py] [_log()] userauth is OK
2026-02-14T11:16:15.507 [DEBUG] [Thread-184502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:16:15.507 [DEBUG] [Thread-184502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:16:15.507 [DEBUG] [Thread-184502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:16:15.507 [DEBUG] [Thread-184502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:16:15.519 [INFO] [Thread-184502] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:16:15.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:16:16.296 [DEBUG] [Thread-184502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:16:16.296 [DEBUG] [Thread-184502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:16:16.297 [DEBUG] [Thread-184502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:16:16.338 [DEBUG] [Thread-184502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:16:16.338 [DEBUG] [Thread-184502] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:16:16.341 [DEBUG] [Thread-184502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:16:16.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:16:16.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:16:16.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:16:16.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:16:16.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:16:16.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:16:16.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:16:16.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:16:16.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:16:16.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.385876 -999.00  +12.40  20.74     58   +4.50 1 1 1 1 1   888    0 9.70 63.40 ----- 18.2 20.7 173.6 37.8 19.6 -24.6 18.3 -23.5 17.6 -23.7 18.6 -24.1
2026-02-14T11:16:16.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:16:16.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:16:16.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.385876
2026-02-14T11:16:16.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:16:16.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:16:16.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:16:16.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:16:16.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:16:16.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:15:46', tmtdew=9.39, humidity=52.63, cloud=0.0, wind=30.49, temperature=12.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:15:39.686', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:16:16.367 [DEBUG] [Thread-184502] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:16:16.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-14T11:16:16.473 [DEBUG] [Thread-184505] [transport.py] [_log()] starting thread (client mode): 0xa2db6230
2026-02-14T11:16:16.473 [DEBUG] [Thread-184505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:16:16.488 [DEBUG] [Thread-184505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:16:16.488 [INFO] [Thread-184505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:16:16.495 [DEBUG] [Thread-184505] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:16:16.496 [DEBUG] [Thread-184505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:16:16.496 [DEBUG] [Thread-184505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:16:16.496 [DEBUG] [Thread-184505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:16:16.496 [DEBUG] [Thread-184505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:16:16.496 [DEBUG] [Thread-184505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:16:16.496 [DEBUG] [Thread-184505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:16:16.496 [DEBUG] [Thread-184505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:16:16.496 [DEBUG] [Thread-184505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:16:16.496 [DEBUG] [Thread-184505] [transport.py] [_log()] client lang: <none>
2026-02-14T11:16:16.496 [DEBUG] [Thread-184505] [transport.py] [_log()] server lang: <none>
2026-02-14T11:16:16.496 [DEBUG] [Thread-184505] [transport.py] [_log()] kex follows: False
2026-02-14T11:16:16.496 [DEBUG] [Thread-184505] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:16:16.496 [DEBUG] [Thread-184505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:16:16.496 [DEBUG] [Thread-184505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:16:16.496 [DEBUG] [Thread-184505] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:16:16.497 [DEBUG] [Thread-184505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:16:16.497 [DEBUG] [Thread-184505] [transport.py] [_log()] Compression: none
2026-02-14T11:16:16.497 [DEBUG] [Thread-184505] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:16:16.555 [DEBUG] [Thread-184505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:16:16.556 [DEBUG] [Thread-184505] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:16:16.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:16:16.557 [DEBUG] [Thread-184505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:16:16.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:16:16.611 [DEBUG] [Thread-184505] [transport.py] [_log()] userauth is OK
2026-02-14T11:16:16.612 [DEBUG] [Thread-184505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:16:16.612 [DEBUG] [Thread-184505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:16:16.612 [DEBUG] [Thread-184505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:16:16.612 [DEBUG] [Thread-184505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:16:16.631 [INFO] [Thread-184505] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:16:16.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-14T11:16:16.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:16:17.455 [DEBUG] [Thread-184505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:16:17.455 [DEBUG] [Thread-184505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:16:17.504 [DEBUG] [Thread-184505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:16:17.504 [DEBUG] [Thread-184505] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:16:17.513 [DEBUG] [Thread-184505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:16:17.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:16:17.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:16: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') -> 00000000
2026-02-14T11:16:17.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:16:17.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:16:17.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:16:17.550 [DEBUG] [Thread-184505] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:16:18.661 [DEBUG] [Thread-184507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:16:28.346 [DEBUG] [Thread-184508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:16:43.399 [DEBUG] [Thread-184509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:16:47.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:16:47.550 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:16:47.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T11:16:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 16, 21), 9.63, 51.83, 0.0, 30.97, 13.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:16:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:16:21
2026-02-14T11:16:50.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:16:50.218 [DEBUG] [Thread-184510] [transport.py] [_log()] starting thread (client mode): 0xa2d3d150
2026-02-14T11:16:50.218 [DEBUG] [Thread-184510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:16:50.238 [DEBUG] [Thread-184510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:16:50.238 [INFO] [Thread-184510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:16:50.241 [DEBUG] [Thread-184510] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:16:50.241 [DEBUG] [Thread-184510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:16:50.241 [DEBUG] [Thread-184510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:16:50.241 [DEBUG] [Thread-184510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:16:50.241 [DEBUG] [Thread-184510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:16:50.241 [DEBUG] [Thread-184510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:16:50.241 [DEBUG] [Thread-184510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:16:50.241 [DEBUG] [Thread-184510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:16:50.241 [DEBUG] [Thread-184510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:16:50.241 [DEBUG] [Thread-184510] [transport.py] [_log()] client lang: <none>
2026-02-14T11:16:50.241 [DEBUG] [Thread-184510] [transport.py] [_log()] server lang: <none>
2026-02-14T11:16:50.241 [DEBUG] [Thread-184510] [transport.py] [_log()] kex follows: False
2026-02-14T11:16:50.241 [DEBUG] [Thread-184510] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:16:50.241 [DEBUG] [Thread-184510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:16:50.242 [DEBUG] [Thread-184510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:16:50.242 [DEBUG] [Thread-184510] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:16:50.242 [DEBUG] [Thread-184510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:16:50.242 [DEBUG] [Thread-184510] [transport.py] [_log()] Compression: none
2026-02-14T11:16:50.242 [DEBUG] [Thread-184510] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:16:50.257 [DEBUG] [Thread-184510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:16:50.257 [DEBUG] [Thread-184510] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:16:50.257 [DEBUG] [Thread-184510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:16:50.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:16:50.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:16:50.258 [DEBUG] [Thread-184510] [transport.py] [_log()] userauth is OK
2026-02-14T11:16:50.258 [DEBUG] [Thread-184510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:16:50.258 [DEBUG] [Thread-184510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:16:50.258 [DEBUG] [Thread-184510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:16:50.258 [DEBUG] [Thread-184510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:16:50.277 [INFO] [Thread-184510] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:16:50.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:16:50.916 [DEBUG] [Thread-184510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:16:50.916 [DEBUG] [Thread-184510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:16:50.917 [DEBUG] [Thread-184510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:16:50.957 [DEBUG] [Thread-184510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:16:50.957 [DEBUG] [Thread-184510] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:16:50.960 [DEBUG] [Thread-184510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:16:50.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:16:50.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:16:50.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:16:50.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:16:50.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:16:50.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:16:50.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:16:50.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:16:50.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:16:50.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.386223 -999.00  +12.40  28.67     59   +4.70 1 1 1 1 1   888    0 9.43 56.17 ----- 21.5 28.7 148.4 35.8 19.6 -24.9 18.2 -23.8 17.6 -23.2 18.6 -24.1
2026-02-14T11:16:50.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:16:50.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:16:50.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.386223
2026-02-14T11:16:50.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:16:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:16:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:16:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:16:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:16:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:16:21', tmtdew=9.63, humidity=51.83, cloud=0.0, wind=30.97, temperature=13.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:16:09.667', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:16:50.983 [DEBUG] [Thread-184510] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:16:51.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-14T11:16:51.077 [DEBUG] [Thread-184513] [transport.py] [_log()] starting thread (client mode): 0xa2d3f6d0
2026-02-14T11:16:51.077 [DEBUG] [Thread-184513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:16:51.092 [DEBUG] [Thread-184513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:16:51.092 [INFO] [Thread-184513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:16:51.099 [DEBUG] [Thread-184513] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:16:51.100 [DEBUG] [Thread-184513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:16:51.101 [DEBUG] [Thread-184513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:16:51.101 [DEBUG] [Thread-184513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:16:51.101 [DEBUG] [Thread-184513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:16:51.101 [DEBUG] [Thread-184513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:16:51.101 [DEBUG] [Thread-184513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:16:51.101 [DEBUG] [Thread-184513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:16:51.101 [DEBUG] [Thread-184513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:16:51.101 [DEBUG] [Thread-184513] [transport.py] [_log()] client lang: <none>
2026-02-14T11:16:51.101 [DEBUG] [Thread-184513] [transport.py] [_log()] server lang: <none>
2026-02-14T11:16:51.101 [DEBUG] [Thread-184513] [transport.py] [_log()] kex follows: False
2026-02-14T11:16:51.101 [DEBUG] [Thread-184513] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:16:51.101 [DEBUG] [Thread-184513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:16:51.101 [DEBUG] [Thread-184513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:16:51.101 [DEBUG] [Thread-184513] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:16:51.101 [DEBUG] [Thread-184513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:16:51.102 [DEBUG] [Thread-184513] [transport.py] [_log()] Compression: none
2026-02-14T11:16:51.102 [DEBUG] [Thread-184513] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:16:51.156 [DEBUG] [Thread-184513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:16:51.156 [DEBUG] [Thread-184513] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:16:51.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:16:51.157 [DEBUG] [Thread-184513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:16:51.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:16:51.213 [DEBUG] [Thread-184513] [transport.py] [_log()] userauth is OK
2026-02-14T11:16:51.214 [DEBUG] [Thread-184513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:16:51.214 [DEBUG] [Thread-184513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:16:51.214 [DEBUG] [Thread-184513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:16:51.214 [DEBUG] [Thread-184513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:16:51.239 [INFO] [Thread-184513] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:16:51.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T11:16:51.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:16:52.100 [DEBUG] [Thread-184513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:16:52.101 [DEBUG] [Thread-184513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:16:52.148 [DEBUG] [Thread-184513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:16:52.149 [DEBUG] [Thread-184513] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:16:52.158 [DEBUG] [Thread-184513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:16:52.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:16:52.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:16:52.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-14T11:16:52.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:16:52.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:16:52.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:16:52.194 [DEBUG] [Thread-184513] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:16:58.436 [DEBUG] [Thread-184515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:17:11.218 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:17:11.219 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:17:13.485 [DEBUG] [Thread-184516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:17:18.696 [DEBUG] [Thread-184517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:17:22.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:17:22.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:17:22.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-14T11:17:24.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 16, 56), 9.41, 52.53, 0.0, 28.48, 12.66, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:17:24.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:16:56
2026-02-14T11:17:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:17:24.679 [DEBUG] [Thread-184518] [transport.py] [_log()] starting thread (client mode): 0xa2d10f10
2026-02-14T11:17:24.679 [DEBUG] [Thread-184518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:17:24.700 [DEBUG] [Thread-184518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:17:24.700 [INFO] [Thread-184518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:17:24.703 [DEBUG] [Thread-184518] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:17:24.703 [DEBUG] [Thread-184518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:17:24.703 [DEBUG] [Thread-184518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:17:24.703 [DEBUG] [Thread-184518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:17:24.703 [DEBUG] [Thread-184518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:17:24.703 [DEBUG] [Thread-184518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:17:24.703 [DEBUG] [Thread-184518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:17:24.704 [DEBUG] [Thread-184518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:17:24.704 [DEBUG] [Thread-184518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:17:24.704 [DEBUG] [Thread-184518] [transport.py] [_log()] client lang: <none>
2026-02-14T11:17:24.704 [DEBUG] [Thread-184518] [transport.py] [_log()] server lang: <none>
2026-02-14T11:17:24.704 [DEBUG] [Thread-184518] [transport.py] [_log()] kex follows: False
2026-02-14T11:17:24.704 [DEBUG] [Thread-184518] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:17:24.704 [DEBUG] [Thread-184518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:17:24.704 [DEBUG] [Thread-184518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:17:24.704 [DEBUG] [Thread-184518] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:17:24.704 [DEBUG] [Thread-184518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:17:24.704 [DEBUG] [Thread-184518] [transport.py] [_log()] Compression: none
2026-02-14T11:17:24.704 [DEBUG] [Thread-184518] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:17:24.720 [DEBUG] [Thread-184518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:17:24.721 [DEBUG] [Thread-184518] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:17:24.721 [DEBUG] [Thread-184518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:17:24.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:17:24.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:17:24.765 [DEBUG] [Thread-184518] [transport.py] [_log()] userauth is OK
2026-02-14T11:17:24.766 [DEBUG] [Thread-184518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:17:24.766 [DEBUG] [Thread-184518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:17:24.766 [DEBUG] [Thread-184518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:17:24.766 [DEBUG] [Thread-184518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:17:24.786 [INFO] [Thread-184518] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:17:24.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:17:25.416 [DEBUG] [Thread-184518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:17:25.416 [DEBUG] [Thread-184518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:17:25.416 [DEBUG] [Thread-184518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:17:25.456 [DEBUG] [Thread-184518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:17:25.457 [DEBUG] [Thread-184518] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:17:25.460 [DEBUG] [Thread-184518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:17:25.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:17:25.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:17:25.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:17:25.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:17:25.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:17:25.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:17:25.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:17:25.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:17:25.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:17:25.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.386570 -999.00  +11.90  20.22     60   +4.40 1 1 1 1 1   888    0 9.32 52.84 ----- 19.2 20.2 147.2 44.0 19.6 -24.9 18.2 -24.0 17.6 -23.9 18.6 -24.4
2026-02-14T11:17:25.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:17:25.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:17:25.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.386570
2026-02-14T11:17:25.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:17:25.489 [DEBUG] [Thread-184518] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:17:25.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:17:25.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:17:25.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:17:25.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:17:25.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:16:56', tmtdew=9.41, humidity=52.53, cloud=0.0, wind=28.48, temperature=12.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:16:39.648', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:17:25.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-14T11:17:25.584 [DEBUG] [Thread-184521] [transport.py] [_log()] starting thread (client mode): 0xa2d1ab00
2026-02-14T11:17:25.584 [DEBUG] [Thread-184521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:17:25.599 [DEBUG] [Thread-184521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:17:25.599 [INFO] [Thread-184521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:17:25.607 [DEBUG] [Thread-184521] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:17:25.607 [DEBUG] [Thread-184521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:17:25.607 [DEBUG] [Thread-184521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:17:25.607 [DEBUG] [Thread-184521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:17:25.607 [DEBUG] [Thread-184521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:17:25.607 [DEBUG] [Thread-184521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:17:25.607 [DEBUG] [Thread-184521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:17:25.607 [DEBUG] [Thread-184521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:17:25.607 [DEBUG] [Thread-184521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:17:25.607 [DEBUG] [Thread-184521] [transport.py] [_log()] client lang: <none>
2026-02-14T11:17:25.607 [DEBUG] [Thread-184521] [transport.py] [_log()] server lang: <none>
2026-02-14T11:17:25.607 [DEBUG] [Thread-184521] [transport.py] [_log()] kex follows: False
2026-02-14T11:17:25.607 [DEBUG] [Thread-184521] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:17:25.607 [DEBUG] [Thread-184521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:17:25.608 [DEBUG] [Thread-184521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:17:25.608 [DEBUG] [Thread-184521] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:17:25.608 [DEBUG] [Thread-184521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:17:25.608 [DEBUG] [Thread-184521] [transport.py] [_log()] Compression: none
2026-02-14T11:17:25.608 [DEBUG] [Thread-184521] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:17:25.666 [DEBUG] [Thread-184521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:17:25.667 [DEBUG] [Thread-184521] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:17:25.667 [DEBUG] [Thread-184521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:17:25.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:17:25.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:17:25.723 [DEBUG] [Thread-184521] [transport.py] [_log()] userauth is OK
2026-02-14T11:17:25.723 [DEBUG] [Thread-184521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:17:25.723 [DEBUG] [Thread-184521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:17:25.723 [DEBUG] [Thread-184521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:17:25.723 [DEBUG] [Thread-184521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:17:25.743 [INFO] [Thread-184521] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:17:25.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-14T11:17:25.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:17:26.592 [DEBUG] [Thread-184521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:17:26.592 [DEBUG] [Thread-184521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:17:26.640 [DEBUG] [Thread-184521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:17:26.641 [DEBUG] [Thread-184521] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:17:26.650 [DEBUG] [Thread-184521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:17:26.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:17:26.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:17:26.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-14T11:17:26.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:17:26.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:17:26.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:17:26.687 [DEBUG] [Thread-184521] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:17:28.522 [DEBUG] [Thread-184523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:17:43.577 [DEBUG] [Thread-184524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:17:56.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:17:56.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:17:56.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-14T11:17:58.614 [DEBUG] [Thread-184525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:17:59.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 17, 32), 9.48, 52.26, 0.0, 28.13, 12.69, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:17:59.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:17:32
2026-02-14T11:17:59.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:17:59.824 [DEBUG] [Thread-184526] [transport.py] [_log()] starting thread (client mode): 0xa2d18700
2026-02-14T11:17:59.824 [DEBUG] [Thread-184526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:17:59.844 [DEBUG] [Thread-184526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:17:59.844 [INFO] [Thread-184526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:17:59.847 [DEBUG] [Thread-184526] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:17:59.847 [DEBUG] [Thread-184526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:17:59.847 [DEBUG] [Thread-184526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:17:59.847 [DEBUG] [Thread-184526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:17:59.847 [DEBUG] [Thread-184526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:17:59.847 [DEBUG] [Thread-184526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:17:59.847 [DEBUG] [Thread-184526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:17:59.847 [DEBUG] [Thread-184526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:17:59.847 [DEBUG] [Thread-184526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:17:59.847 [DEBUG] [Thread-184526] [transport.py] [_log()] client lang: <none>
2026-02-14T11:17:59.847 [DEBUG] [Thread-184526] [transport.py] [_log()] server lang: <none>
2026-02-14T11:17:59.847 [DEBUG] [Thread-184526] [transport.py] [_log()] kex follows: False
2026-02-14T11:17:59.847 [DEBUG] [Thread-184526] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:17:59.848 [DEBUG] [Thread-184526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:17:59.848 [DEBUG] [Thread-184526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:17:59.848 [DEBUG] [Thread-184526] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:17:59.848 [DEBUG] [Thread-184526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:17:59.848 [DEBUG] [Thread-184526] [transport.py] [_log()] Compression: none
2026-02-14T11:17:59.848 [DEBUG] [Thread-184526] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:17:59.866 [DEBUG] [Thread-184526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:17:59.867 [DEBUG] [Thread-184526] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:17:59.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:17:59.868 [DEBUG] [Thread-184526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:17:59.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:17:59.870 [DEBUG] [Thread-184526] [transport.py] [_log()] userauth is OK
2026-02-14T11:17:59.871 [DEBUG] [Thread-184526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:17:59.871 [DEBUG] [Thread-184526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:17:59.871 [DEBUG] [Thread-184526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:17:59.871 [DEBUG] [Thread-184526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:17:59.893 [INFO] [Thread-184526] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:17:59.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:18:00.524 [DEBUG] [Thread-184526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:18:00.524 [DEBUG] [Thread-184526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:18:00.524 [DEBUG] [Thread-184526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:18:00.565 [DEBUG] [Thread-184526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:18:00.566 [DEBUG] [Thread-184526] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:18:00.569 [DEBUG] [Thread-184526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:18:00.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:18:00.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:18:00.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:18:00.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:18:00.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:18:00.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:18:00.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:18:00.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:18:00.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:18:00.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.386917 -999.00  +12.10  17.24     60   +4.70 1 2 1 1 1   888    0 9.20 45.50 ----- 22.4 17.2 148.8 30.9 19.4 -25.0 18.3 -23.1 17.6 -22.7 18.6 -24.7
2026-02-14T11:18:00.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:18:00.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:18:00.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.386917
2026-02-14T11:18:00.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:18:00.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:18:00.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:18:00.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:18:00.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:18:00.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:17:32', tmtdew=9.48, humidity=52.26, cloud=0.0, wind=28.13, temperature=12.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:17:09.629', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:18:00.597 [DEBUG] [Thread-184526] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:18:00.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-14T11:18:00.693 [DEBUG] [Thread-184529] [transport.py] [_log()] starting thread (client mode): 0xa2d55720
2026-02-14T11:18:00.693 [DEBUG] [Thread-184529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:18:00.708 [DEBUG] [Thread-184529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:18:00.708 [INFO] [Thread-184529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:18:00.715 [DEBUG] [Thread-184529] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:18:00.716 [DEBUG] [Thread-184529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:18:00.716 [DEBUG] [Thread-184529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:18:00.716 [DEBUG] [Thread-184529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:18:00.716 [DEBUG] [Thread-184529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:18:00.717 [DEBUG] [Thread-184529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:18:00.717 [DEBUG] [Thread-184529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:18:00.717 [DEBUG] [Thread-184529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:18:00.717 [DEBUG] [Thread-184529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:18:00.717 [DEBUG] [Thread-184529] [transport.py] [_log()] client lang: <none>
2026-02-14T11:18:00.717 [DEBUG] [Thread-184529] [transport.py] [_log()] server lang: <none>
2026-02-14T11:18:00.717 [DEBUG] [Thread-184529] [transport.py] [_log()] kex follows: False
2026-02-14T11:18:00.717 [DEBUG] [Thread-184529] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:18:00.717 [DEBUG] [Thread-184529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:18:00.717 [DEBUG] [Thread-184529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:18:00.717 [DEBUG] [Thread-184529] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:18:00.717 [DEBUG] [Thread-184529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:18:00.717 [DEBUG] [Thread-184529] [transport.py] [_log()] Compression: none
2026-02-14T11:18:00.717 [DEBUG] [Thread-184529] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:18:00.773 [DEBUG] [Thread-184529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:18:00.773 [DEBUG] [Thread-184529] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:18:00.774 [DEBUG] [Thread-184529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:18:00.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:18:00.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:18:00.831 [DEBUG] [Thread-184529] [transport.py] [_log()] userauth is OK
2026-02-14T11:18:00.831 [DEBUG] [Thread-184529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:18:00.831 [DEBUG] [Thread-184529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:18:00.831 [DEBUG] [Thread-184529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:18:00.831 [DEBUG] [Thread-184529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:18:00.849 [INFO] [Thread-184529] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:18:00.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-14T11:18:00.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:18:01.664 [DEBUG] [Thread-184529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:18:01.664 [DEBUG] [Thread-184529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:18:01.711 [DEBUG] [Thread-184529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:18:01.711 [DEBUG] [Thread-184529] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:18:01.721 [DEBUG] [Thread-184529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:18:01.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:18:01.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')
2026-02-14T11:18:01.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:18:01.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:18:01.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:18:01.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:18:01.757 [DEBUG] [Thread-184529] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:18:11.358 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:18:11.359 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:18:13.650 [DEBUG] [Thread-184531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:18:18.736 [DEBUG] [Thread-184532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:18:28.703 [DEBUG] [Thread-184533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:18:31.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:18:31.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:18:31.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T11:18:33.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 18, 7), 9.08, 53.62, 0.0, 26.26, 12.25, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:18:33.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:18:07
2026-02-14T11:18:34.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:18:34.289 [DEBUG] [Thread-184534] [transport.py] [_log()] starting thread (client mode): 0xa5741030
2026-02-14T11:18:34.289 [DEBUG] [Thread-184534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:18:34.309 [DEBUG] [Thread-184534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:18:34.309 [INFO] [Thread-184534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:18:34.312 [DEBUG] [Thread-184534] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:18:34.312 [DEBUG] [Thread-184534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:18:34.312 [DEBUG] [Thread-184534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:18:34.312 [DEBUG] [Thread-184534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:18:34.312 [DEBUG] [Thread-184534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:18:34.312 [DEBUG] [Thread-184534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:18:34.313 [DEBUG] [Thread-184534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:18:34.313 [DEBUG] [Thread-184534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:18:34.313 [DEBUG] [Thread-184534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:18:34.313 [DEBUG] [Thread-184534] [transport.py] [_log()] client lang: <none>
2026-02-14T11:18:34.313 [DEBUG] [Thread-184534] [transport.py] [_log()] server lang: <none>
2026-02-14T11:18:34.313 [DEBUG] [Thread-184534] [transport.py] [_log()] kex follows: False
2026-02-14T11:18:34.313 [DEBUG] [Thread-184534] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:18:34.313 [DEBUG] [Thread-184534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:18:34.313 [DEBUG] [Thread-184534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:18:34.313 [DEBUG] [Thread-184534] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:18:34.313 [DEBUG] [Thread-184534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:18:34.313 [DEBUG] [Thread-184534] [transport.py] [_log()] Compression: none
2026-02-14T11:18:34.313 [DEBUG] [Thread-184534] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:18:34.330 [DEBUG] [Thread-184534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:18:34.330 [DEBUG] [Thread-184534] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:18:34.331 [DEBUG] [Thread-184534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:18:34.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:18:34.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:18:34.333 [DEBUG] [Thread-184534] [transport.py] [_log()] userauth is OK
2026-02-14T11:18:34.333 [DEBUG] [Thread-184534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:18:34.333 [DEBUG] [Thread-184534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:18:34.333 [DEBUG] [Thread-184534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:18:34.334 [DEBUG] [Thread-184534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:18:34.358 [INFO] [Thread-184534] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:18:34.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:18:34.987 [DEBUG] [Thread-184534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:18:34.987 [DEBUG] [Thread-184534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:18:34.988 [DEBUG] [Thread-184534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:18:35.029 [DEBUG] [Thread-184534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:18:35.029 [DEBUG] [Thread-184534] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:18:35.033 [DEBUG] [Thread-184534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:18:35.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:18:35.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:18:35.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:18:35.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:18:35.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:18:35.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:18:35.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:18:35.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:18:35.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:18:35.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.387265 -999.00  +12.30  25.08     60   +4.80 1 1 1 1 1   888    0 9.05 42.21 ----- 23.1 25.1 170.4 31.7 19.5 -25.8 18.2 -22.6 17.6 -23.6 18.7 -25.3
2026-02-14T11:18:35.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:18:35.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:18:35.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.387265
2026-02-14T11:18:35.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:18:35.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:18:35.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:18:35.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:18:35.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:18:35.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:18:07', tmtdew=9.08, humidity=53.62, cloud=0.0, wind=26.26, temperature=12.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:17:39.696', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:18:35.062 [DEBUG] [Thread-184534] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:18:35.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-14T11:18:35.158 [DEBUG] [Thread-184537] [transport.py] [_log()] starting thread (client mode): 0xa2db4e20
2026-02-14T11:18:35.158 [DEBUG] [Thread-184537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:18:35.172 [DEBUG] [Thread-184537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:18:35.172 [INFO] [Thread-184537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:18:35.181 [DEBUG] [Thread-184537] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:18:35.181 [DEBUG] [Thread-184537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:18:35.181 [DEBUG] [Thread-184537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:18:35.181 [DEBUG] [Thread-184537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:18:35.181 [DEBUG] [Thread-184537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:18:35.181 [DEBUG] [Thread-184537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:18:35.181 [DEBUG] [Thread-184537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:18:35.181 [DEBUG] [Thread-184537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:18:35.181 [DEBUG] [Thread-184537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:18:35.181 [DEBUG] [Thread-184537] [transport.py] [_log()] client lang: <none>
2026-02-14T11:18:35.181 [DEBUG] [Thread-184537] [transport.py] [_log()] server lang: <none>
2026-02-14T11:18:35.181 [DEBUG] [Thread-184537] [transport.py] [_log()] kex follows: False
2026-02-14T11:18:35.182 [DEBUG] [Thread-184537] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:18:35.182 [DEBUG] [Thread-184537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:18:35.182 [DEBUG] [Thread-184537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:18:35.182 [DEBUG] [Thread-184537] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:18:35.182 [DEBUG] [Thread-184537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:18:35.182 [DEBUG] [Thread-184537] [transport.py] [_log()] Compression: none
2026-02-14T11:18:35.182 [DEBUG] [Thread-184537] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:18:35.240 [DEBUG] [Thread-184537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:18:35.240 [DEBUG] [Thread-184537] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:18:35.241 [DEBUG] [Thread-184537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:18:35.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:18:35.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:18:35.296 [DEBUG] [Thread-184537] [transport.py] [_log()] userauth is OK
2026-02-14T11:18:35.296 [DEBUG] [Thread-184537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:18:35.296 [DEBUG] [Thread-184537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:18:35.296 [DEBUG] [Thread-184537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:18:35.296 [DEBUG] [Thread-184537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:18:35.318 [INFO] [Thread-184537] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:18:35.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-14T11:18:35.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:18:36.114 [DEBUG] [Thread-184537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:18:36.114 [DEBUG] [Thread-184537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:18:36.162 [DEBUG] [Thread-184537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:18:36.163 [DEBUG] [Thread-184537] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:18:36.172 [DEBUG] [Thread-184537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:18:36.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:18:36.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-14T11:18:36.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-14T11:18:36.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:18:36.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:18:36.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:18:36.211 [DEBUG] [Thread-184537] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:18:43.742 [DEBUG] [Thread-184539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:18:58.797 [DEBUG] [Thread-184540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:19:06.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:19:06.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:19:06.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-14T11:19:08.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 18, 42), 8.97, 54.37, 0.0, 25.86, 12.86, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:19:08.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:18:42
2026-02-14T11:19:08.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:19:08.864 [DEBUG] [Thread-184541] [transport.py] [_log()] starting thread (client mode): 0xa2d13be0
2026-02-14T11:19:08.864 [DEBUG] [Thread-184541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:19:08.884 [DEBUG] [Thread-184541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:19:08.884 [INFO] [Thread-184541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:19:08.887 [DEBUG] [Thread-184541] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:19:08.887 [DEBUG] [Thread-184541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:19:08.887 [DEBUG] [Thread-184541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:19:08.887 [DEBUG] [Thread-184541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:19:08.887 [DEBUG] [Thread-184541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:19:08.887 [DEBUG] [Thread-184541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:19:08.887 [DEBUG] [Thread-184541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:19:08.887 [DEBUG] [Thread-184541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:19:08.887 [DEBUG] [Thread-184541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:19:08.887 [DEBUG] [Thread-184541] [transport.py] [_log()] client lang: <none>
2026-02-14T11:19:08.887 [DEBUG] [Thread-184541] [transport.py] [_log()] server lang: <none>
2026-02-14T11:19:08.887 [DEBUG] [Thread-184541] [transport.py] [_log()] kex follows: False
2026-02-14T11:19:08.887 [DEBUG] [Thread-184541] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:19:08.887 [DEBUG] [Thread-184541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:19:08.888 [DEBUG] [Thread-184541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:19:08.888 [DEBUG] [Thread-184541] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:19:08.888 [DEBUG] [Thread-184541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:19:08.888 [DEBUG] [Thread-184541] [transport.py] [_log()] Compression: none
2026-02-14T11:19:08.888 [DEBUG] [Thread-184541] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:19:08.905 [DEBUG] [Thread-184541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:19:08.906 [DEBUG] [Thread-184541] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:19:08.906 [DEBUG] [Thread-184541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:19:08.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:19:08.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:19:08.908 [DEBUG] [Thread-184541] [transport.py] [_log()] userauth is OK
2026-02-14T11:19:08.908 [DEBUG] [Thread-184541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:19:08.908 [DEBUG] [Thread-184541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:19:08.908 [DEBUG] [Thread-184541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:19:08.909 [DEBUG] [Thread-184541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:19:08.927 [INFO] [Thread-184541] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:19:08.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:19:09.701 [DEBUG] [Thread-184541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:19:09.701 [DEBUG] [Thread-184541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:19:09.702 [DEBUG] [Thread-184541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:19:09.743 [DEBUG] [Thread-184541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:19:09.743 [DEBUG] [Thread-184541] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:19:09.747 [DEBUG] [Thread-184541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:19:09.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:19:09.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:19:09.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:19:09.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:19:09.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:19:09.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:19:09.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:19:09.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:19:09.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:19:09.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.387959 -999.00  +12.50  18.55     59   +4.80 1 1 1 1 1   888    0 8.67 32.59 ----- 16.4 18.6 189.7 36.1 19.5 -26.7 18.0 -26.2 17.6 -22.7 18.6 -25.3
2026-02-14T11:19:09.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:19:09.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:19:09.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.387959
2026-02-14T11:19:09.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:19:09.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:19:09.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:19:09.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:19:09.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:19:09.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:18:42', tmtdew=8.97, humidity=54.37, cloud=0.0, wind=25.86, temperature=12.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:18:39.658', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:19:09.772 [DEBUG] [Thread-184541] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:19: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-14T11:19:09.876 [DEBUG] [Thread-184544] [transport.py] [_log()] starting thread (client mode): 0xa2d10220
2026-02-14T11:19:09.876 [DEBUG] [Thread-184544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:19:09.890 [DEBUG] [Thread-184544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:19:09.891 [INFO] [Thread-184544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:19:09.898 [DEBUG] [Thread-184544] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:19:09.899 [DEBUG] [Thread-184544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:19:09.899 [DEBUG] [Thread-184544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:19:09.899 [DEBUG] [Thread-184544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:19:09.899 [DEBUG] [Thread-184544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:19:09.899 [DEBUG] [Thread-184544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:19:09.899 [DEBUG] [Thread-184544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:19:09.899 [DEBUG] [Thread-184544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:19:09.899 [DEBUG] [Thread-184544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:19:09.900 [DEBUG] [Thread-184544] [transport.py] [_log()] client lang: <none>
2026-02-14T11:19:09.900 [DEBUG] [Thread-184544] [transport.py] [_log()] server lang: <none>
2026-02-14T11:19:09.900 [DEBUG] [Thread-184544] [transport.py] [_log()] kex follows: False
2026-02-14T11:19:09.900 [DEBUG] [Thread-184544] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:19:09.900 [DEBUG] [Thread-184544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:19:09.900 [DEBUG] [Thread-184544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:19:09.900 [DEBUG] [Thread-184544] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:19:09.901 [DEBUG] [Thread-184544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:19:09.901 [DEBUG] [Thread-184544] [transport.py] [_log()] Compression: none
2026-02-14T11:19:09.901 [DEBUG] [Thread-184544] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:19:09.958 [DEBUG] [Thread-184544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:19:09.959 [DEBUG] [Thread-184544] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:19:09.959 [DEBUG] [Thread-184544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:19:09.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:19:09.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:19:10.017 [DEBUG] [Thread-184544] [transport.py] [_log()] userauth is OK
2026-02-14T11:19:10.018 [DEBUG] [Thread-184544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:19:10.018 [DEBUG] [Thread-184544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:19:10.018 [DEBUG] [Thread-184544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:19:10.018 [DEBUG] [Thread-184544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:19:10.041 [INFO] [Thread-184544] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:19:10.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-14T11:19:10.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:19:10.859 [DEBUG] [Thread-184544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:19:10.859 [DEBUG] [Thread-184544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:19:10.910 [DEBUG] [Thread-184544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:19:10.910 [DEBUG] [Thread-184544] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:19:10.922 [DEBUG] [Thread-184544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:19:10.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:19:10.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-14T11:19:10.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:19:10.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:19:10.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:19:10.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:19:10.972 [DEBUG] [Thread-184544] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:19:11.502 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:19:11.503 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:19:13.836 [DEBUG] [Thread-184546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:19:18.790 [DEBUG] [Thread-184547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:19:28.884 [DEBUG] [Thread-184548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:19:40.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:19:40.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:19:41.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T11:19:42.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 19, 17), 8.92, 54.57, 0.0, 25.41, 12.63, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:19:42.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:19:17
2026-02-14T11:19:43.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:19:43.370 [DEBUG] [Thread-184549] [transport.py] [_log()] starting thread (client mode): 0xa57581c0
2026-02-14T11:19:43.370 [DEBUG] [Thread-184549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:19:43.391 [DEBUG] [Thread-184549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:19:43.391 [INFO] [Thread-184549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:19:43.394 [DEBUG] [Thread-184549] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:19:43.394 [DEBUG] [Thread-184549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:19:43.394 [DEBUG] [Thread-184549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:19:43.394 [DEBUG] [Thread-184549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:19:43.395 [DEBUG] [Thread-184549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:19:43.395 [DEBUG] [Thread-184549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:19:43.395 [DEBUG] [Thread-184549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:19:43.395 [DEBUG] [Thread-184549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:19:43.395 [DEBUG] [Thread-184549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:19:43.395 [DEBUG] [Thread-184549] [transport.py] [_log()] client lang: <none>
2026-02-14T11:19:43.395 [DEBUG] [Thread-184549] [transport.py] [_log()] server lang: <none>
2026-02-14T11:19:43.395 [DEBUG] [Thread-184549] [transport.py] [_log()] kex follows: False
2026-02-14T11:19:43.395 [DEBUG] [Thread-184549] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:19:43.395 [DEBUG] [Thread-184549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:19:43.395 [DEBUG] [Thread-184549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:19:43.395 [DEBUG] [Thread-184549] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:19:43.395 [DEBUG] [Thread-184549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:19:43.395 [DEBUG] [Thread-184549] [transport.py] [_log()] Compression: none
2026-02-14T11:19:43.395 [DEBUG] [Thread-184549] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:19:43.412 [DEBUG] [Thread-184549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:19:43.413 [DEBUG] [Thread-184549] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:19:43.413 [DEBUG] [Thread-184549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:19:43.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:19:43.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:19:43.416 [DEBUG] [Thread-184549] [transport.py] [_log()] userauth is OK
2026-02-14T11:19:43.416 [DEBUG] [Thread-184549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:19:43.416 [DEBUG] [Thread-184549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:19:43.416 [DEBUG] [Thread-184549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:19:43.417 [DEBUG] [Thread-184549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:19:43.440 [INFO] [Thread-184549] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:19:43.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:19:43.921 [DEBUG] [Thread-184551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:19:44.054 [DEBUG] [Thread-184549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:19:44.055 [DEBUG] [Thread-184549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:19:44.055 [DEBUG] [Thread-184549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:19:44.096 [DEBUG] [Thread-184549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:19:44.096 [DEBUG] [Thread-184549] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:19:44.099 [DEBUG] [Thread-184549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:19:44.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:19:44.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:19:44.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:19:44.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:19:44.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:19:44.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:19:44.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:19:44.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:19:44.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:19:44.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.388306 -999.00  +12.50  25.55     59   +4.80 1 1 1 1 1   888    0 8.80 30.40 ----- 26.2 25.6 175.2 36.9 19.6 -26.5 17.9 -29.5 17.6 -22.9 18.7 -25.9
2026-02-14T11:19:44.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:19:44.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:19:44.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.388306
2026-02-14T11:19:44.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:19:44.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:19:44.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:19:44.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:19:44.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:19:44.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:19:17', tmtdew=8.92, humidity=54.57, cloud=0.0, wind=25.41, temperature=12.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:19:09.638', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:19:44.128 [DEBUG] [Thread-184549] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:19:44.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-14T11:19:44.235 [DEBUG] [Thread-184553] [transport.py] [_log()] starting thread (client mode): 0xa2d54130
2026-02-14T11:19:44.235 [DEBUG] [Thread-184553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:19:44.249 [DEBUG] [Thread-184553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:19:44.250 [INFO] [Thread-184553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:19:44.257 [DEBUG] [Thread-184553] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:19:44.257 [DEBUG] [Thread-184553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:19:44.258 [DEBUG] [Thread-184553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:19:44.258 [DEBUG] [Thread-184553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:19:44.258 [DEBUG] [Thread-184553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:19:44.258 [DEBUG] [Thread-184553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:19:44.258 [DEBUG] [Thread-184553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:19:44.258 [DEBUG] [Thread-184553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:19:44.258 [DEBUG] [Thread-184553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:19:44.258 [DEBUG] [Thread-184553] [transport.py] [_log()] client lang: <none>
2026-02-14T11:19:44.258 [DEBUG] [Thread-184553] [transport.py] [_log()] server lang: <none>
2026-02-14T11:19:44.258 [DEBUG] [Thread-184553] [transport.py] [_log()] kex follows: False
2026-02-14T11:19:44.258 [DEBUG] [Thread-184553] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:19:44.258 [DEBUG] [Thread-184553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:19:44.258 [DEBUG] [Thread-184553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:19:44.258 [DEBUG] [Thread-184553] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:19:44.258 [DEBUG] [Thread-184553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:19:44.258 [DEBUG] [Thread-184553] [transport.py] [_log()] Compression: none
2026-02-14T11:19:44.258 [DEBUG] [Thread-184553] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:19:44.317 [DEBUG] [Thread-184553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:19:44.318 [DEBUG] [Thread-184553] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:19:44.319 [DEBUG] [Thread-184553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:19:44.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:19:44.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:19:44.373 [DEBUG] [Thread-184553] [transport.py] [_log()] userauth is OK
2026-02-14T11:19:44.374 [DEBUG] [Thread-184553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:19:44.374 [DEBUG] [Thread-184553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:19:44.374 [DEBUG] [Thread-184553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:19:44.374 [DEBUG] [Thread-184553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:19:44.389 [INFO] [Thread-184553] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:19:44.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T11:19:44.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:19:45.183 [DEBUG] [Thread-184553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:19:45.193 [DEBUG] [Thread-184553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:19:45.231 [DEBUG] [Thread-184553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:19:45.232 [DEBUG] [Thread-184553] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:19:45.241 [DEBUG] [Thread-184553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:19:45.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:19:45.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-14T11:19:45.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-14T11:19:45.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:19:45.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:19:45.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:19:45.278 [DEBUG] [Thread-184553] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:19:58.958 [DEBUG] [Thread-184555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:20:11.652 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:20:11.653 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:20:14.018 [DEBUG] [Thread-184556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:20:15.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:20:15.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:20:15.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-14T11:20:17.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 19, 52), 9.41, 52.95, 0.0, 32.38, 13.08, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:20:17.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:19:52
2026-02-14T11:20:17.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:20:17.650 [DEBUG] [Thread-184557] [transport.py] [_log()] starting thread (client mode): 0xa2dc1e70
2026-02-14T11:20:17.650 [DEBUG] [Thread-184557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:20:17.671 [DEBUG] [Thread-184557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:20:17.671 [INFO] [Thread-184557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:20:17.674 [DEBUG] [Thread-184557] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:20:17.674 [DEBUG] [Thread-184557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:20:17.674 [DEBUG] [Thread-184557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:20:17.674 [DEBUG] [Thread-184557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:20:17.675 [DEBUG] [Thread-184557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:20:17.675 [DEBUG] [Thread-184557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:20:17.675 [DEBUG] [Thread-184557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:20:17.675 [DEBUG] [Thread-184557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:20:17.675 [DEBUG] [Thread-184557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:20:17.675 [DEBUG] [Thread-184557] [transport.py] [_log()] client lang: <none>
2026-02-14T11:20:17.675 [DEBUG] [Thread-184557] [transport.py] [_log()] server lang: <none>
2026-02-14T11:20:17.675 [DEBUG] [Thread-184557] [transport.py] [_log()] kex follows: False
2026-02-14T11:20:17.675 [DEBUG] [Thread-184557] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:20:17.675 [DEBUG] [Thread-184557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:20:17.675 [DEBUG] [Thread-184557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:20:17.675 [DEBUG] [Thread-184557] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:20:17.675 [DEBUG] [Thread-184557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:20:17.676 [DEBUG] [Thread-184557] [transport.py] [_log()] Compression: none
2026-02-14T11:20:17.676 [DEBUG] [Thread-184557] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:20:17.696 [DEBUG] [Thread-184557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:20:17.696 [DEBUG] [Thread-184557] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:20:17.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:20:17.698 [DEBUG] [Thread-184557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:20:17.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:20:17.699 [DEBUG] [Thread-184557] [transport.py] [_log()] userauth is OK
2026-02-14T11:20:17.700 [DEBUG] [Thread-184557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:20:17.700 [DEBUG] [Thread-184557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:20:17.700 [DEBUG] [Thread-184557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:20:17.700 [DEBUG] [Thread-184557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:20:17.719 [INFO] [Thread-184557] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:20:17.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:20:18.364 [DEBUG] [Thread-184557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:20:18.364 [DEBUG] [Thread-184557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:20:18.365 [DEBUG] [Thread-184557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:20:18.405 [DEBUG] [Thread-184557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:20:18.406 [DEBUG] [Thread-184557] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:20:18.409 [DEBUG] [Thread-184557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:20:18.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:20:18.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:20:18.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:20:18.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:20:18.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:20:18.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:20:18.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:20:18.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:20:18.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:20:18.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.388653 -999.00  +12.90  21.37     58   +5.00 1 1 1 1 1   888    0 8.61 30.32 ----- 19.4 21.4 185.4 37.1 19.5 -24.4 18.0 -27.3 17.7 -22.9 18.6 -23.0
2026-02-14T11:20:18.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:20:18.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:20:18.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.388653
2026-02-14T11:20:18.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:20:18.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:20:18.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:20:18.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:20:18.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:20:18.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:19:52', tmtdew=9.41, humidity=52.95, cloud=0.0, wind=32.38, temperature=13.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:19:39.619', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:20:18.439 [DEBUG] [Thread-184557] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:20:18.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-14T11:20:18.535 [DEBUG] [Thread-184560] [transport.py] [_log()] starting thread (client mode): 0xa2dc1990
2026-02-14T11:20:18.535 [DEBUG] [Thread-184560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:20:18.549 [DEBUG] [Thread-184560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:20:18.549 [INFO] [Thread-184560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:20:18.557 [DEBUG] [Thread-184560] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:20:18.557 [DEBUG] [Thread-184560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:20:18.557 [DEBUG] [Thread-184560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:20:18.557 [DEBUG] [Thread-184560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:20:18.557 [DEBUG] [Thread-184560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:20:18.557 [DEBUG] [Thread-184560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:20:18.557 [DEBUG] [Thread-184560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:20:18.557 [DEBUG] [Thread-184560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:20:18.558 [DEBUG] [Thread-184560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:20:18.558 [DEBUG] [Thread-184560] [transport.py] [_log()] client lang: <none>
2026-02-14T11:20:18.558 [DEBUG] [Thread-184560] [transport.py] [_log()] server lang: <none>
2026-02-14T11:20:18.558 [DEBUG] [Thread-184560] [transport.py] [_log()] kex follows: False
2026-02-14T11:20:18.558 [DEBUG] [Thread-184560] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:20:18.558 [DEBUG] [Thread-184560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:20:18.558 [DEBUG] [Thread-184560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:20:18.558 [DEBUG] [Thread-184560] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:20:18.558 [DEBUG] [Thread-184560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:20:18.558 [DEBUG] [Thread-184560] [transport.py] [_log()] Compression: none
2026-02-14T11:20:18.558 [DEBUG] [Thread-184560] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:20:18.615 [DEBUG] [Thread-184560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:20:18.615 [DEBUG] [Thread-184560] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:20:18.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:20:18.616 [DEBUG] [Thread-184560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:20:18.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:20:18.671 [DEBUG] [Thread-184560] [transport.py] [_log()] userauth is OK
2026-02-14T11:20:18.671 [DEBUG] [Thread-184560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:20:18.672 [DEBUG] [Thread-184560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:20:18.672 [DEBUG] [Thread-184560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:20:18.672 [DEBUG] [Thread-184560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:20:18.691 [INFO] [Thread-184560] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:20:18.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T11:20:18.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:20:18.833 [DEBUG] [Thread-184562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:20:19.513 [DEBUG] [Thread-184560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:20:19.514 [DEBUG] [Thread-184560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:20:19.561 [DEBUG] [Thread-184560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:20:19.561 [DEBUG] [Thread-184560] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:20:19.571 [DEBUG] [Thread-184560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:20:19.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:20: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')
2026-02-14T11:20:19.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-14T11:20:19.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:20:19.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:20:19.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:20:19.607 [DEBUG] [Thread-184560] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:20:29.055 [DEBUG] [Thread-184563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:20:44.103 [DEBUG] [Thread-184564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:20:49.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:20:49.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:20:49.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-14T11:20:51.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 20, 28), 9.75, 51.82, 0.0, 36.01, 13.26, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:20:51.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:20:28
2026-02-14T11:20:51.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:20:52.071 [DEBUG] [Thread-184565] [transport.py] [_log()] starting thread (client mode): 0xa2dc0d90
2026-02-14T11:20:52.071 [DEBUG] [Thread-184565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:20:52.090 [DEBUG] [Thread-184565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:20:52.091 [INFO] [Thread-184565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:20:52.094 [DEBUG] [Thread-184565] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:20:52.094 [DEBUG] [Thread-184565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:20:52.094 [DEBUG] [Thread-184565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:20:52.094 [DEBUG] [Thread-184565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:20:52.094 [DEBUG] [Thread-184565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:20:52.094 [DEBUG] [Thread-184565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:20:52.094 [DEBUG] [Thread-184565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:20:52.094 [DEBUG] [Thread-184565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:20:52.094 [DEBUG] [Thread-184565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:20:52.094 [DEBUG] [Thread-184565] [transport.py] [_log()] client lang: <none>
2026-02-14T11:20:52.094 [DEBUG] [Thread-184565] [transport.py] [_log()] server lang: <none>
2026-02-14T11:20:52.094 [DEBUG] [Thread-184565] [transport.py] [_log()] kex follows: False
2026-02-14T11:20:52.094 [DEBUG] [Thread-184565] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:20:52.094 [DEBUG] [Thread-184565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:20:52.094 [DEBUG] [Thread-184565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:20:52.094 [DEBUG] [Thread-184565] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:20:52.094 [DEBUG] [Thread-184565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:20:52.094 [DEBUG] [Thread-184565] [transport.py] [_log()] Compression: none
2026-02-14T11:20:52.094 [DEBUG] [Thread-184565] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:20:52.112 [DEBUG] [Thread-184565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:20:52.112 [DEBUG] [Thread-184565] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:20:52.113 [DEBUG] [Thread-184565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:20:52.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:20:52.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:20:52.115 [DEBUG] [Thread-184565] [transport.py] [_log()] userauth is OK
2026-02-14T11:20:52.115 [DEBUG] [Thread-184565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:20:52.115 [DEBUG] [Thread-184565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:20:52.115 [DEBUG] [Thread-184565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:20:52.115 [DEBUG] [Thread-184565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:20:52.140 [INFO] [Thread-184565] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:20:52.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:20:52.782 [DEBUG] [Thread-184565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:20:52.782 [DEBUG] [Thread-184565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:20:52.783 [DEBUG] [Thread-184565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:20:52.823 [DEBUG] [Thread-184565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:20:52.824 [DEBUG] [Thread-184565] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:20:52.827 [DEBUG] [Thread-184565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:20:52.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:20:52.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:20:52.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:20:52.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:20:52.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:20:52.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:20:52.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:20:52.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:20:52.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:20:52.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.389001 -999.00  +13.30  27.98     57   +5.00 1 1 1 1 1   888    0 8.75 31.70 ----- 21.6 28.0 168.8 31.6 19.6 -23.6 18.1 -26.9 17.8 -23.7 18.7 -22.6
2026-02-14T11:20:52.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:20:52.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:20:52.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.389001
2026-02-14T11:20:52.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:20:52.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:20:52.855 [DEBUG] [Thread-184565] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:20:52.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:20:52.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:20:52.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:20:52.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:20:28', tmtdew=9.75, humidity=51.82, cloud=0.0, wind=36.01, temperature=13.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:20:09.686', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:20:52.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-14T11:20:59.138 [DEBUG] [Thread-184568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:21:11.799 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:21:11.801 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:21:14.191 [DEBUG] [Thread-184569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:21:18.866 [DEBUG] [Thread-184570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:21:29.226 [DEBUG] [Thread-184571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:21:44.261 [DEBUG] [Thread-184572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:21:59.297 [DEBUG] [Thread-184573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:22:11.941 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:22:11.943 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:22:14.337 [DEBUG] [Thread-184574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:22:18.919 [DEBUG] [Thread-184575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:22:29.376 [DEBUG] [Thread-184576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:22:44.411 [DEBUG] [Thread-184577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:22:59.449 [DEBUG] [Thread-184578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:23:07.960 [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-14T11:23:12.082 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:23:12.083 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:23:14.487 [DEBUG] [Thread-184579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:23:18.952 [DEBUG] [Thread-184580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:23:29.524 [DEBUG] [Thread-184581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:23:37.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:23:37.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:23:37.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-14T11:23:39.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 23, 24), 9.18, 53.71, 0.0, 31.55, 13.13, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:23:39.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:23:24
2026-02-14T11:23:40.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:23:40.355 [DEBUG] [Thread-184582] [transport.py] [_log()] starting thread (client mode): 0xa2dc12a0
2026-02-14T11:23:40.355 [DEBUG] [Thread-184582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:23:40.376 [DEBUG] [Thread-184582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:23:40.376 [INFO] [Thread-184582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:23:40.379 [DEBUG] [Thread-184582] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:23:40.379 [DEBUG] [Thread-184582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:23:40.379 [DEBUG] [Thread-184582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:23:40.379 [DEBUG] [Thread-184582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:23:40.380 [DEBUG] [Thread-184582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:23:40.380 [DEBUG] [Thread-184582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:23:40.380 [DEBUG] [Thread-184582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:23:40.380 [DEBUG] [Thread-184582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:23:40.380 [DEBUG] [Thread-184582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:23:40.380 [DEBUG] [Thread-184582] [transport.py] [_log()] client lang: <none>
2026-02-14T11:23:40.380 [DEBUG] [Thread-184582] [transport.py] [_log()] server lang: <none>
2026-02-14T11:23:40.380 [DEBUG] [Thread-184582] [transport.py] [_log()] kex follows: False
2026-02-14T11:23:40.380 [DEBUG] [Thread-184582] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:23:40.380 [DEBUG] [Thread-184582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:23:40.380 [DEBUG] [Thread-184582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:23:40.380 [DEBUG] [Thread-184582] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:23:40.380 [DEBUG] [Thread-184582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:23:40.380 [DEBUG] [Thread-184582] [transport.py] [_log()] Compression: none
2026-02-14T11:23:40.380 [DEBUG] [Thread-184582] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:23:40.399 [DEBUG] [Thread-184582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:23:40.400 [DEBUG] [Thread-184582] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:23:40.400 [DEBUG] [Thread-184582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:23:40.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:23:40.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:23:40.402 [DEBUG] [Thread-184582] [transport.py] [_log()] userauth is OK
2026-02-14T11:23:40.402 [DEBUG] [Thread-184582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:23:40.402 [DEBUG] [Thread-184582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:23:40.402 [DEBUG] [Thread-184582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:23:40.402 [DEBUG] [Thread-184582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:23:40.434 [INFO] [Thread-184582] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:23:40.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:23:41.063 [DEBUG] [Thread-184582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:23:41.064 [DEBUG] [Thread-184582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:23:41.064 [DEBUG] [Thread-184582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:23:41.104 [DEBUG] [Thread-184582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:23:41.104 [DEBUG] [Thread-184582] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:23:41.107 [DEBUG] [Thread-184582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:23:41.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:23:41.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:23:41.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:23:41.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:23:41.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:23:41.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:23:41.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:23:41.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:23:41.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:23:41.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.391084 -999.00  +13.20  24.08     58   +5.10 1 1 1 1 1   888    0 8.51 22.29 ----- 24.1 24.1 130.4 28.7 20.1 -23.6 18.8 -25.0 18.1 -22.3 19.2 -23.0
2026-02-14T11:23:41.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:23:41.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:23:41.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.391084
2026-02-14T11:23:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:23:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:23:41.134 [DEBUG] [Thread-184582] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:23:41.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:23:41.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:23:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:23:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:23:24', tmtdew=9.18, humidity=53.71, cloud=0.0, wind=31.55, temperature=13.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:23:09.658', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:23:41.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-14T11:23:41.234 [DEBUG] [Thread-184585] [transport.py] [_log()] starting thread (client mode): 0xa575ac50
2026-02-14T11:23:41.235 [DEBUG] [Thread-184585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:23:41.252 [DEBUG] [Thread-184585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:23:41.253 [INFO] [Thread-184585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:23:41.260 [DEBUG] [Thread-184585] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:23:41.260 [DEBUG] [Thread-184585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:23:41.261 [DEBUG] [Thread-184585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:23:41.261 [DEBUG] [Thread-184585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:23:41.261 [DEBUG] [Thread-184585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:23:41.261 [DEBUG] [Thread-184585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:23:41.261 [DEBUG] [Thread-184585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:23:41.261 [DEBUG] [Thread-184585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:23:41.261 [DEBUG] [Thread-184585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:23:41.261 [DEBUG] [Thread-184585] [transport.py] [_log()] client lang: <none>
2026-02-14T11:23:41.262 [DEBUG] [Thread-184585] [transport.py] [_log()] server lang: <none>
2026-02-14T11:23:41.262 [DEBUG] [Thread-184585] [transport.py] [_log()] kex follows: False
2026-02-14T11:23:41.262 [DEBUG] [Thread-184585] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:23:41.262 [DEBUG] [Thread-184585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:23:41.262 [DEBUG] [Thread-184585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:23:41.262 [DEBUG] [Thread-184585] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:23:41.263 [DEBUG] [Thread-184585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:23:41.263 [DEBUG] [Thread-184585] [transport.py] [_log()] Compression: none
2026-02-14T11:23:41.263 [DEBUG] [Thread-184585] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:23:41.322 [DEBUG] [Thread-184585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:23:41.323 [DEBUG] [Thread-184585] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:23:41.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:23:41.324 [DEBUG] [Thread-184585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:23:41.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:23:41.385 [DEBUG] [Thread-184585] [transport.py] [_log()] userauth is OK
2026-02-14T11:23:41.386 [DEBUG] [Thread-184585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:23:41.386 [DEBUG] [Thread-184585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:23:41.386 [DEBUG] [Thread-184585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:23:41.386 [DEBUG] [Thread-184585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:23:41.404 [INFO] [Thread-184585] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:23:41.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-14T11:23:41.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:23:42.211 [DEBUG] [Thread-184585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:23:42.211 [DEBUG] [Thread-184585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:23:42.259 [DEBUG] [Thread-184585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:23:42.260 [DEBUG] [Thread-184585] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:23:42.269 [DEBUG] [Thread-184585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:23:42.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:23:42.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-14T11:23:42.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-14T11:23:42.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:23:42.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:23:42.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:23:42.306 [DEBUG] [Thread-184585] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:23:44.560 [DEBUG] [Thread-184587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:23:59.624 [DEBUG] [Thread-184588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:24:12.222 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:24:12.223 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:24:12.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:24:12.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:24:12.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-14T11:24:14.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 23, 59), 9.5, 52.21, 0.0, 33.17, 12.91, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:24:14.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:23:59
2026-02-14T11:24:14.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:24:14.658 [DEBUG] [Thread-184589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:24:14.696 [DEBUG] [Thread-184590] [transport.py] [_log()] starting thread (client mode): 0xa575a7a0
2026-02-14T11:24:14.696 [DEBUG] [Thread-184590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:24:14.716 [DEBUG] [Thread-184590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:24:14.717 [INFO] [Thread-184590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:24:14.720 [DEBUG] [Thread-184590] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:24:14.720 [DEBUG] [Thread-184590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:24:14.720 [DEBUG] [Thread-184590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:24:14.720 [DEBUG] [Thread-184590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:24:14.720 [DEBUG] [Thread-184590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:24:14.720 [DEBUG] [Thread-184590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:24:14.720 [DEBUG] [Thread-184590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:24:14.720 [DEBUG] [Thread-184590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:24:14.720 [DEBUG] [Thread-184590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:24:14.720 [DEBUG] [Thread-184590] [transport.py] [_log()] client lang: <none>
2026-02-14T11:24:14.720 [DEBUG] [Thread-184590] [transport.py] [_log()] server lang: <none>
2026-02-14T11:24:14.720 [DEBUG] [Thread-184590] [transport.py] [_log()] kex follows: False
2026-02-14T11:24:14.720 [DEBUG] [Thread-184590] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:24:14.720 [DEBUG] [Thread-184590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:24:14.720 [DEBUG] [Thread-184590] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:24:14.720 [DEBUG] [Thread-184590] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:24:14.720 [DEBUG] [Thread-184590] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:24:14.720 [DEBUG] [Thread-184590] [transport.py] [_log()] Compression: none
2026-02-14T11:24:14.720 [DEBUG] [Thread-184590] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:24:14.739 [DEBUG] [Thread-184590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:24:14.740 [DEBUG] [Thread-184590] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:24:14.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:24:14.741 [DEBUG] [Thread-184590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:24:14.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:24:14.743 [DEBUG] [Thread-184590] [transport.py] [_log()] userauth is OK
2026-02-14T11:24:14.744 [DEBUG] [Thread-184590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:24:14.744 [DEBUG] [Thread-184590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:24:14.744 [DEBUG] [Thread-184590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:24:14.744 [DEBUG] [Thread-184590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:24:14.768 [INFO] [Thread-184590] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:24:14.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:24:15.573 [DEBUG] [Thread-184590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:24:15.573 [DEBUG] [Thread-184590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:24:15.573 [DEBUG] [Thread-184590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:24:15.614 [DEBUG] [Thread-184590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:24:15.615 [DEBUG] [Thread-184590] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:24:15.618 [DEBUG] [Thread-184590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:24:15.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:24:15.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:24:15.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:24:15.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:24:15.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:24:15.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:24:15.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:24:15.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:24:15.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:24:15.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.391431 -999.00  +13.00  28.66     57   +4.80 1 2 1 1 1   888    0 8.67 23.56 ----- 28.6 28.7 144.8 34.2 20.1 -24.8 18.9 -23.3 18.2 -21.8 19.2 -24.1
2026-02-14T11:24:15.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:24:15.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:24:15.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.391431
2026-02-14T11:24:15.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:24:15.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:24:15.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:24:15.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:24:15.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:24:15.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:23:59', tmtdew=9.5, humidity=52.21, cloud=0.0, wind=33.17, temperature=12.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:23:39.638', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:24:15.646 [DEBUG] [Thread-184590] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:24:15.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T11:24:15.745 [DEBUG] [Thread-184593] [transport.py] [_log()] starting thread (client mode): 0xa2dc1060
2026-02-14T11:24:15.746 [DEBUG] [Thread-184593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:24:15.760 [DEBUG] [Thread-184593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:24:15.761 [INFO] [Thread-184593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:24:15.768 [DEBUG] [Thread-184593] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:24:15.768 [DEBUG] [Thread-184593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:24:15.768 [DEBUG] [Thread-184593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:24:15.768 [DEBUG] [Thread-184593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:24:15.769 [DEBUG] [Thread-184593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:24:15.769 [DEBUG] [Thread-184593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:24:15.769 [DEBUG] [Thread-184593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:24:15.769 [DEBUG] [Thread-184593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:24:15.769 [DEBUG] [Thread-184593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:24:15.769 [DEBUG] [Thread-184593] [transport.py] [_log()] client lang: <none>
2026-02-14T11:24:15.769 [DEBUG] [Thread-184593] [transport.py] [_log()] server lang: <none>
2026-02-14T11:24:15.769 [DEBUG] [Thread-184593] [transport.py] [_log()] kex follows: False
2026-02-14T11:24:15.769 [DEBUG] [Thread-184593] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:24:15.769 [DEBUG] [Thread-184593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:24:15.769 [DEBUG] [Thread-184593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:24:15.769 [DEBUG] [Thread-184593] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:24:15.769 [DEBUG] [Thread-184593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:24:15.769 [DEBUG] [Thread-184593] [transport.py] [_log()] Compression: none
2026-02-14T11:24:15.769 [DEBUG] [Thread-184593] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:24:15.826 [DEBUG] [Thread-184593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:24:15.827 [DEBUG] [Thread-184593] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:24:15.827 [DEBUG] [Thread-184593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:24:15.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:24:15.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:24:15.883 [DEBUG] [Thread-184593] [transport.py] [_log()] userauth is OK
2026-02-14T11:24:15.884 [DEBUG] [Thread-184593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:24:15.884 [DEBUG] [Thread-184593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:24:15.884 [DEBUG] [Thread-184593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:24:15.884 [DEBUG] [Thread-184593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:24:15.908 [INFO] [Thread-184593] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:24:15.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-14T11:24:15.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:24:16.742 [DEBUG] [Thread-184593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:24:16.742 [DEBUG] [Thread-184593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:24:16.789 [DEBUG] [Thread-184593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:24:16.790 [DEBUG] [Thread-184593] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:24:16.799 [DEBUG] [Thread-184593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:24:16.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:24:16.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-14T11:24:16.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:24:16.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:24:16.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:24:16.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:24:16.836 [DEBUG] [Thread-184593] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:24:18.985 [DEBUG] [Thread-184595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:24:29.692 [DEBUG] [Thread-184596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:24:44.746 [DEBUG] [Thread-184597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:24:46.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:24:46.858 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:24:46.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-14T11:24:48.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 24, 35), 10.13, 50.43, 0.0, 32.21, 14.02, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:24:48.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:24:35
2026-02-14T11:24:49.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:24:49.475 [DEBUG] [Thread-184598] [transport.py] [_log()] starting thread (client mode): 0xa575a410
2026-02-14T11:24:49.476 [DEBUG] [Thread-184598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:24:49.495 [DEBUG] [Thread-184598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:24:49.495 [INFO] [Thread-184598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:24:49.498 [DEBUG] [Thread-184598] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:24:49.498 [DEBUG] [Thread-184598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:24:49.499 [DEBUG] [Thread-184598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:24:49.499 [DEBUG] [Thread-184598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:24:49.499 [DEBUG] [Thread-184598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:24:49.499 [DEBUG] [Thread-184598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:24:49.499 [DEBUG] [Thread-184598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:24:49.499 [DEBUG] [Thread-184598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:24:49.499 [DEBUG] [Thread-184598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:24:49.499 [DEBUG] [Thread-184598] [transport.py] [_log()] client lang: <none>
2026-02-14T11:24:49.499 [DEBUG] [Thread-184598] [transport.py] [_log()] server lang: <none>
2026-02-14T11:24:49.499 [DEBUG] [Thread-184598] [transport.py] [_log()] kex follows: False
2026-02-14T11:24:49.499 [DEBUG] [Thread-184598] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:24:49.499 [DEBUG] [Thread-184598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:24:49.499 [DEBUG] [Thread-184598] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:24:49.499 [DEBUG] [Thread-184598] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:24:49.499 [DEBUG] [Thread-184598] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:24:49.499 [DEBUG] [Thread-184598] [transport.py] [_log()] Compression: none
2026-02-14T11:24:49.499 [DEBUG] [Thread-184598] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:24:49.516 [DEBUG] [Thread-184598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:24:49.516 [DEBUG] [Thread-184598] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:24:49.517 [DEBUG] [Thread-184598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:24:49.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:24:49.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:24:49.561 [DEBUG] [Thread-184598] [transport.py] [_log()] userauth is OK
2026-02-14T11:24:49.561 [DEBUG] [Thread-184598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:24:49.562 [DEBUG] [Thread-184598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:24:49.562 [DEBUG] [Thread-184598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:24:49.562 [DEBUG] [Thread-184598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:24:49.600 [INFO] [Thread-184598] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:24:49.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:24:50.233 [DEBUG] [Thread-184598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:24:50.233 [DEBUG] [Thread-184598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:24:50.233 [DEBUG] [Thread-184598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:24:50.274 [DEBUG] [Thread-184598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:24:50.274 [DEBUG] [Thread-184598] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:24:50.276 [DEBUG] [Thread-184598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:24:50.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:24:50.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:24:50.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:24:50.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:24:50.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:24:50.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:24:50.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:24:50.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:24:50.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:24:50.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.391778 -999.00  +12.90  21.56     58   +5.00 1 1 1 1 1   888    0 8.53 21.49 ----- 22.5 21.6 142.2 29.5 20.1 -24.4 18.9 -23.6 18.1 -23.6 19.1 -23.0
2026-02-14T11:24:50.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:24:50.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:24:50.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.391778
2026-02-14T11:24:50.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:24:50.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:24:50.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:24:50.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:24:50.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:24:50.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:24:35', tmtdew=10.13, humidity=50.43, cloud=0.0, wind=32.21, temperature=14.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:24:09.619', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:24:50.297 [DEBUG] [Thread-184598] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:24:50.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-14T11:24:50.381 [DEBUG] [Thread-184601] [transport.py] [_log()] starting thread (client mode): 0xa2d10400
2026-02-14T11:24:50.381 [DEBUG] [Thread-184601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:24:50.395 [DEBUG] [Thread-184601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:24:50.395 [INFO] [Thread-184601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:24:50.403 [DEBUG] [Thread-184601] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:24:50.403 [DEBUG] [Thread-184601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:24:50.403 [DEBUG] [Thread-184601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:24:50.403 [DEBUG] [Thread-184601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:24:50.403 [DEBUG] [Thread-184601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:24:50.403 [DEBUG] [Thread-184601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:24:50.403 [DEBUG] [Thread-184601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:24:50.403 [DEBUG] [Thread-184601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:24:50.403 [DEBUG] [Thread-184601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:24:50.403 [DEBUG] [Thread-184601] [transport.py] [_log()] client lang: <none>
2026-02-14T11:24:50.403 [DEBUG] [Thread-184601] [transport.py] [_log()] server lang: <none>
2026-02-14T11:24:50.403 [DEBUG] [Thread-184601] [transport.py] [_log()] kex follows: False
2026-02-14T11:24:50.403 [DEBUG] [Thread-184601] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:24:50.404 [DEBUG] [Thread-184601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:24:50.404 [DEBUG] [Thread-184601] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:24:50.404 [DEBUG] [Thread-184601] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:24:50.404 [DEBUG] [Thread-184601] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:24:50.404 [DEBUG] [Thread-184601] [transport.py] [_log()] Compression: none
2026-02-14T11:24:50.404 [DEBUG] [Thread-184601] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:24:50.465 [DEBUG] [Thread-184601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:24:50.466 [DEBUG] [Thread-184601] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:24:50.467 [DEBUG] [Thread-184601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:24:50.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:24:50.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:24:50.521 [DEBUG] [Thread-184601] [transport.py] [_log()] userauth is OK
2026-02-14T11:24:50.522 [DEBUG] [Thread-184601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:24:50.522 [DEBUG] [Thread-184601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:24:50.522 [DEBUG] [Thread-184601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:24:50.522 [DEBUG] [Thread-184601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:24:50.545 [INFO] [Thread-184601] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:24:50.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-14T11:24:50.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:24:51.365 [DEBUG] [Thread-184601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:24:51.365 [DEBUG] [Thread-184601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:24:51.413 [DEBUG] [Thread-184601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:24:51.414 [DEBUG] [Thread-184601] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:24:51.423 [DEBUG] [Thread-184601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:24:51.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:24:51.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-14T11:24:51.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:24:51.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:24:51.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:24:51.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:24:51.461 [DEBUG] [Thread-184601] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:24:59.784 [DEBUG] [Thread-184603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:25:12.366 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:25:12.367 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:25:14.841 [DEBUG] [Thread-184604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:25:19.028 [DEBUG] [Thread-184605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:25:21.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:25:21.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:25:21.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T11:25:23.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 25, 11), 9.45, 53.06, 0.0, 26.03, 13.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:25:23.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:25:11
2026-02-14T11:25:23.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:25:23.819 [DEBUG] [Thread-184606] [transport.py] [_log()] starting thread (client mode): 0xa2dc22c0
2026-02-14T11:25:23.819 [DEBUG] [Thread-184606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:25:23.839 [DEBUG] [Thread-184606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:25:23.839 [INFO] [Thread-184606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:25:23.841 [DEBUG] [Thread-184606] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:25:23.841 [DEBUG] [Thread-184606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:25:23.841 [DEBUG] [Thread-184606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:25:23.842 [DEBUG] [Thread-184606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:25:23.842 [DEBUG] [Thread-184606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:25:23.842 [DEBUG] [Thread-184606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:25:23.842 [DEBUG] [Thread-184606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:25:23.842 [DEBUG] [Thread-184606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:25:23.842 [DEBUG] [Thread-184606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:25:23.842 [DEBUG] [Thread-184606] [transport.py] [_log()] client lang: <none>
2026-02-14T11:25:23.842 [DEBUG] [Thread-184606] [transport.py] [_log()] server lang: <none>
2026-02-14T11:25:23.842 [DEBUG] [Thread-184606] [transport.py] [_log()] kex follows: False
2026-02-14T11:25:23.842 [DEBUG] [Thread-184606] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:25:23.842 [DEBUG] [Thread-184606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:25:23.842 [DEBUG] [Thread-184606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:25:23.842 [DEBUG] [Thread-184606] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:25:23.842 [DEBUG] [Thread-184606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:25:23.842 [DEBUG] [Thread-184606] [transport.py] [_log()] Compression: none
2026-02-14T11:25:23.842 [DEBUG] [Thread-184606] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:25:23.855 [DEBUG] [Thread-184606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:25:23.856 [DEBUG] [Thread-184606] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:25:23.856 [DEBUG] [Thread-184606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:25:23.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:25:23.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:25:23.858 [DEBUG] [Thread-184606] [transport.py] [_log()] userauth is OK
2026-02-14T11:25:23.858 [DEBUG] [Thread-184606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:25:23.858 [DEBUG] [Thread-184606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:25:23.858 [DEBUG] [Thread-184606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:25:23.858 [DEBUG] [Thread-184606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:25:23.893 [INFO] [Thread-184606] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:25:23.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:25:24.551 [DEBUG] [Thread-184606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:25:24.552 [DEBUG] [Thread-184606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:25:24.552 [DEBUG] [Thread-184606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:25:24.592 [DEBUG] [Thread-184606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:25:24.592 [DEBUG] [Thread-184606] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:25:24.595 [DEBUG] [Thread-184606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:25:24.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:25:24.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:25:24.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:25:24.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:25:24.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:25:24.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:25:24.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:25:24.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:25:24.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:25:24.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.392126 -999.00  +13.20  23.57     58   +5.10 1 2 1 1 1   888    0 8.46 22.46 ----- 26.8 23.6 143.4 37.5 20.0 -25.7 19.0 -22.8 18.2 -22.0 19.2 -23.0
2026-02-14T11:25:24.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:25:24.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:25:24.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.392126
2026-02-14T11:25:24.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:25:24.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:25:24.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:25:24.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:25:24.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:25:24.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:25:11', tmtdew=9.45, humidity=53.06, cloud=0.0, wind=26.03, temperature=13.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:24:39.686', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:25:24.622 [DEBUG] [Thread-184606] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:25:24.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-14T11:25:29.876 [DEBUG] [Thread-184609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:25:44.915 [DEBUG] [Thread-184610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:25:59.950 [DEBUG] [Thread-184611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:26:12.509 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:26:12.510 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:26:14.988 [DEBUG] [Thread-184612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:26:19.092 [DEBUG] [Thread-184613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:26:30.029 [DEBUG] [Thread-184614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:26:45.069 [DEBUG] [Thread-184615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:27:00.106 [DEBUG] [Thread-184616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:27:12.650 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:27:12.651 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:27:15.143 [DEBUG] [Thread-184617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:27:19.142 [DEBUG] [Thread-184618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:27:30.180 [DEBUG] [Thread-184619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:27:38.295 [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-14T11:27:45.220 [DEBUG] [Thread-184620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:28:00.254 [DEBUG] [Thread-184621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:28:08.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:28:08.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:28:08.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-14T11:28:10.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 27, 32), 9.23, 53.78, 0.0, 29.89, 12.79, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:28:10.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:27:32
2026-02-14T11:28:11.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:28:11.474 [DEBUG] [Thread-184622] [transport.py] [_log()] starting thread (client mode): 0xa5759300
2026-02-14T11:28:11.474 [DEBUG] [Thread-184622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:28:11.493 [DEBUG] [Thread-184622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:28:11.493 [INFO] [Thread-184622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:28:11.497 [DEBUG] [Thread-184622] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:28:11.497 [DEBUG] [Thread-184622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:28:11.497 [DEBUG] [Thread-184622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:28:11.497 [DEBUG] [Thread-184622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:28:11.497 [DEBUG] [Thread-184622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:28:11.497 [DEBUG] [Thread-184622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:28:11.497 [DEBUG] [Thread-184622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:28:11.497 [DEBUG] [Thread-184622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:28:11.497 [DEBUG] [Thread-184622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:28:11.497 [DEBUG] [Thread-184622] [transport.py] [_log()] client lang: <none>
2026-02-14T11:28:11.497 [DEBUG] [Thread-184622] [transport.py] [_log()] server lang: <none>
2026-02-14T11:28:11.498 [DEBUG] [Thread-184622] [transport.py] [_log()] kex follows: False
2026-02-14T11:28:11.498 [DEBUG] [Thread-184622] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:28:11.498 [DEBUG] [Thread-184622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:28:11.498 [DEBUG] [Thread-184622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:28:11.498 [DEBUG] [Thread-184622] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:28:11.498 [DEBUG] [Thread-184622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:28:11.498 [DEBUG] [Thread-184622] [transport.py] [_log()] Compression: none
2026-02-14T11:28:11.498 [DEBUG] [Thread-184622] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:28:11.519 [DEBUG] [Thread-184622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:28:11.520 [DEBUG] [Thread-184622] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:28:11.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:28:11.521 [DEBUG] [Thread-184622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:28:11.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:28:11.524 [DEBUG] [Thread-184622] [transport.py] [_log()] userauth is OK
2026-02-14T11:28:11.524 [DEBUG] [Thread-184622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:28:11.524 [DEBUG] [Thread-184622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:28:11.524 [DEBUG] [Thread-184622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:28:11.524 [DEBUG] [Thread-184622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:28:11.549 [INFO] [Thread-184622] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:28:11.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:28:12.195 [DEBUG] [Thread-184622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:28:12.195 [DEBUG] [Thread-184622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:28:12.196 [DEBUG] [Thread-184622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:28:12.237 [DEBUG] [Thread-184622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:28:12.237 [DEBUG] [Thread-184622] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:28:12.240 [DEBUG] [Thread-184622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:28:12.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:28:12.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:28:12.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:28:12.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:28:12.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:28:12.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:28:12.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:28:12.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:28:12.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:28:12.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.394209 -999.00  +12.60  22.90     58   +4.70 1 2 1 1 1   888    0 8.42 15.75 ----- 23.5 22.9 170.2 29.7 19.6 -24.8 18.4 -23.6 17.9 -21.6 18.9 -24.1
2026-02-14T11:28:12.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:28:12.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:28:12.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.394209
2026-02-14T11:28:12.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:28:12.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:28:12.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:28:12.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:28:12.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:28:12.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:27:32', tmtdew=9.23, humidity=53.78, cloud=0.0, wind=29.89, temperature=12.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:27:39.658', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:28:12.268 [DEBUG] [Thread-184622] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:28:12.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-14T11:28:12.363 [DEBUG] [Thread-184625] [transport.py] [_log()] starting thread (client mode): 0xa57581f0
2026-02-14T11:28:12.363 [DEBUG] [Thread-184625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:28:12.379 [DEBUG] [Thread-184625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:28:12.380 [INFO] [Thread-184625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:28:12.387 [DEBUG] [Thread-184625] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:28:12.387 [DEBUG] [Thread-184625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:28:12.388 [DEBUG] [Thread-184625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:28:12.388 [DEBUG] [Thread-184625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:28:12.388 [DEBUG] [Thread-184625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:28:12.388 [DEBUG] [Thread-184625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:28:12.388 [DEBUG] [Thread-184625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:28:12.388 [DEBUG] [Thread-184625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:28:12.388 [DEBUG] [Thread-184625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:28:12.388 [DEBUG] [Thread-184625] [transport.py] [_log()] client lang: <none>
2026-02-14T11:28:12.388 [DEBUG] [Thread-184625] [transport.py] [_log()] server lang: <none>
2026-02-14T11:28:12.388 [DEBUG] [Thread-184625] [transport.py] [_log()] kex follows: False
2026-02-14T11:28:12.388 [DEBUG] [Thread-184625] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:28:12.388 [DEBUG] [Thread-184625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:28:12.388 [DEBUG] [Thread-184625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:28:12.388 [DEBUG] [Thread-184625] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:28:12.388 [DEBUG] [Thread-184625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:28:12.388 [DEBUG] [Thread-184625] [transport.py] [_log()] Compression: none
2026-02-14T11:28:12.388 [DEBUG] [Thread-184625] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:28:12.447 [DEBUG] [Thread-184625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:28:12.447 [DEBUG] [Thread-184625] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:28:12.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:28:12.449 [DEBUG] [Thread-184625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:28:12.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:28:12.507 [DEBUG] [Thread-184625] [transport.py] [_log()] userauth is OK
2026-02-14T11:28:12.507 [DEBUG] [Thread-184625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:28:12.508 [DEBUG] [Thread-184625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:28:12.508 [DEBUG] [Thread-184625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:28:12.508 [DEBUG] [Thread-184625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:28:12.527 [INFO] [Thread-184625] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:28:12.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-14T11:28:12.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:28:12.789 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:28:12.791 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:28:13.364 [DEBUG] [Thread-184625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:28:13.364 [DEBUG] [Thread-184625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:28:13.412 [DEBUG] [Thread-184625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:28:13.413 [DEBUG] [Thread-184625] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:28:13.421 [DEBUG] [Thread-184625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:28:13.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:28:13.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:28:13.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:28:13.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:28:13.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:28:13.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:28:13.461 [DEBUG] [Thread-184625] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:28:15.291 [DEBUG] [Thread-184627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:28:19.195 [DEBUG] [Thread-184628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:28:30.342 [DEBUG] [Thread-184629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:28:43.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:28:43.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:28:43.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-14T11:28:45.376 [DEBUG] [Thread-184630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:28:45.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 28, 7), 9.18, 53.93, 0.0, 30.93, 12.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:28:45.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:28:07
2026-02-14T11:28:45.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:28:46.044 [DEBUG] [Thread-184631] [transport.py] [_log()] starting thread (client mode): 0xa5759960
2026-02-14T11:28:46.044 [DEBUG] [Thread-184631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:28:46.065 [DEBUG] [Thread-184631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:28:46.065 [INFO] [Thread-184631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:28:46.068 [DEBUG] [Thread-184631] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:28:46.068 [DEBUG] [Thread-184631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:28:46.068 [DEBUG] [Thread-184631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:28:46.068 [DEBUG] [Thread-184631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:28:46.068 [DEBUG] [Thread-184631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:28:46.068 [DEBUG] [Thread-184631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:28:46.068 [DEBUG] [Thread-184631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:28:46.068 [DEBUG] [Thread-184631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:28:46.068 [DEBUG] [Thread-184631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:28:46.068 [DEBUG] [Thread-184631] [transport.py] [_log()] client lang: <none>
2026-02-14T11:28:46.068 [DEBUG] [Thread-184631] [transport.py] [_log()] server lang: <none>
2026-02-14T11:28:46.068 [DEBUG] [Thread-184631] [transport.py] [_log()] kex follows: False
2026-02-14T11:28:46.069 [DEBUG] [Thread-184631] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:28:46.069 [DEBUG] [Thread-184631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:28:46.069 [DEBUG] [Thread-184631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:28:46.069 [DEBUG] [Thread-184631] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:28:46.069 [DEBUG] [Thread-184631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:28:46.069 [DEBUG] [Thread-184631] [transport.py] [_log()] Compression: none
2026-02-14T11:28:46.069 [DEBUG] [Thread-184631] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:28:46.085 [DEBUG] [Thread-184631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:28:46.086 [DEBUG] [Thread-184631] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:28:46.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:28:46.087 [DEBUG] [Thread-184631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:28:46.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:28:46.089 [DEBUG] [Thread-184631] [transport.py] [_log()] userauth is OK
2026-02-14T11:28:46.090 [DEBUG] [Thread-184631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:28:46.090 [DEBUG] [Thread-184631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:28:46.090 [DEBUG] [Thread-184631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:28:46.090 [DEBUG] [Thread-184631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:28:46.115 [INFO] [Thread-184631] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:28:46.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:28:46.756 [DEBUG] [Thread-184631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:28:46.757 [DEBUG] [Thread-184631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:28:46.757 [DEBUG] [Thread-184631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:28:46.797 [DEBUG] [Thread-184631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:28:46.798 [DEBUG] [Thread-184631] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:28:46.801 [DEBUG] [Thread-184631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:28:46.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:28:46.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:28:46.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:28:46.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:28:46.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:28:46.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:28:46.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:28:46.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:28:46.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:28:46.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.394556 -999.00  +12.40  23.80     58   +4.40 1 1 1 1 1   888    0 8.46 16.55 ----- 25.3 23.8 164.6 39.9 19.6 -26.9 18.4 -23.9 17.9 -24.9 18.9 -25.6
2026-02-14T11:28:46.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:28:46.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:28:46.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.394556
2026-02-14T11:28:46.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:28:46.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:28:46.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:28:46.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:28:46.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:28:46.828 [DEBUG] [Thread-184631] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:28:46.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:28:07', tmtdew=9.18, humidity=53.93, cloud=0.0, wind=30.93, temperature=12.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:28:09.638', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:28:46.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-14T11:28:46.923 [DEBUG] [Thread-184634] [transport.py] [_log()] starting thread (client mode): 0xa2dc2050
2026-02-14T11:28:46.923 [DEBUG] [Thread-184634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:28:46.938 [DEBUG] [Thread-184634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:28:46.938 [INFO] [Thread-184634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:28:46.945 [DEBUG] [Thread-184634] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:28:46.946 [DEBUG] [Thread-184634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:28:46.946 [DEBUG] [Thread-184634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:28:46.946 [DEBUG] [Thread-184634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:28:46.946 [DEBUG] [Thread-184634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:28:46.947 [DEBUG] [Thread-184634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:28:46.947 [DEBUG] [Thread-184634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:28:46.947 [DEBUG] [Thread-184634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:28:46.947 [DEBUG] [Thread-184634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:28:46.947 [DEBUG] [Thread-184634] [transport.py] [_log()] client lang: <none>
2026-02-14T11:28:46.947 [DEBUG] [Thread-184634] [transport.py] [_log()] server lang: <none>
2026-02-14T11:28:46.947 [DEBUG] [Thread-184634] [transport.py] [_log()] kex follows: False
2026-02-14T11:28:46.947 [DEBUG] [Thread-184634] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:28:46.947 [DEBUG] [Thread-184634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:28:46.947 [DEBUG] [Thread-184634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:28:46.947 [DEBUG] [Thread-184634] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:28:46.947 [DEBUG] [Thread-184634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:28:46.947 [DEBUG] [Thread-184634] [transport.py] [_log()] Compression: none
2026-02-14T11:28:46.947 [DEBUG] [Thread-184634] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:28:47.002 [DEBUG] [Thread-184634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:28:47.003 [DEBUG] [Thread-184634] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:28:47.004 [DEBUG] [Thread-184634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:28:47.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:28:47.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:28:47.059 [DEBUG] [Thread-184634] [transport.py] [_log()] userauth is OK
2026-02-14T11:28:47.059 [DEBUG] [Thread-184634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:28:47.059 [DEBUG] [Thread-184634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:28:47.059 [DEBUG] [Thread-184634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:28:47.060 [DEBUG] [Thread-184634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:28:47.078 [INFO] [Thread-184634] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:28:47.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-14T11:28:47.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:28:47.877 [DEBUG] [Thread-184634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:28:47.878 [DEBUG] [Thread-184634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:28:47.929 [DEBUG] [Thread-184634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:28:47.929 [DEBUG] [Thread-184634] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:28:47.938 [DEBUG] [Thread-184634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:28:47.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:28:47.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:28:47.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-14T11:28:47.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:28:47.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:28:47.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:28:47.976 [DEBUG] [Thread-184634] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:29:00.411 [DEBUG] [Thread-184636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:29:12.931 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:29:12.932 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:29:15.468 [DEBUG] [Thread-184637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:29:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:29:17.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:29:18.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-14T11:29:19.226 [DEBUG] [Thread-184638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:29:20.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 28, 44), 9.53, 52.45, 0.0, 31.85, 12.66, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:29:20.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:28:44
2026-02-14T11:29:20.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:29:21.110 [DEBUG] [Thread-184639] [transport.py] [_log()] starting thread (client mode): 0xa2dc12d0
2026-02-14T11:29:21.110 [DEBUG] [Thread-184639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:29:21.130 [DEBUG] [Thread-184639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:29:21.130 [INFO] [Thread-184639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:29:21.132 [DEBUG] [Thread-184639] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:29:21.132 [DEBUG] [Thread-184639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:29:21.132 [DEBUG] [Thread-184639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:29:21.132 [DEBUG] [Thread-184639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:29:21.132 [DEBUG] [Thread-184639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:29:21.132 [DEBUG] [Thread-184639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:29:21.132 [DEBUG] [Thread-184639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:29:21.132 [DEBUG] [Thread-184639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:29:21.132 [DEBUG] [Thread-184639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:29:21.133 [DEBUG] [Thread-184639] [transport.py] [_log()] client lang: <none>
2026-02-14T11:29:21.133 [DEBUG] [Thread-184639] [transport.py] [_log()] server lang: <none>
2026-02-14T11:29:21.133 [DEBUG] [Thread-184639] [transport.py] [_log()] kex follows: False
2026-02-14T11:29:21.133 [DEBUG] [Thread-184639] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:29:21.133 [DEBUG] [Thread-184639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:29:21.133 [DEBUG] [Thread-184639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:29:21.133 [DEBUG] [Thread-184639] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:29:21.133 [DEBUG] [Thread-184639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:29:21.133 [DEBUG] [Thread-184639] [transport.py] [_log()] Compression: none
2026-02-14T11:29:21.133 [DEBUG] [Thread-184639] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:29:21.145 [DEBUG] [Thread-184639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:29:21.146 [DEBUG] [Thread-184639] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:29:21.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:29:21.147 [DEBUG] [Thread-184639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:29:21.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:29:21.149 [DEBUG] [Thread-184639] [transport.py] [_log()] userauth is OK
2026-02-14T11:29:21.149 [DEBUG] [Thread-184639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:29:21.149 [DEBUG] [Thread-184639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:29:21.149 [DEBUG] [Thread-184639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:29:21.149 [DEBUG] [Thread-184639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:29:21.169 [INFO] [Thread-184639] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:29:21.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:29:21.953 [DEBUG] [Thread-184639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:29:21.954 [DEBUG] [Thread-184639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:29:21.954 [DEBUG] [Thread-184639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:29:21.994 [DEBUG] [Thread-184639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:29:21.995 [DEBUG] [Thread-184639] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:29:21.998 [DEBUG] [Thread-184639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:29:22.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:29:22.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:29:22.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:29:22.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:29:22.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:29:22.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:29:22.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:29:22.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:29:22.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:29:22.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.394903 -999.00  +12.20  25.68     59   +4.40 1 1 1 1 1   888    0 8.19 14.51 ----- 25.2 25.7 146.8 36.9 19.5 -25.6 18.2 -23.6 17.8 -23.6 18.8 -25.6
2026-02-14T11:29:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:29:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:29:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.394903
2026-02-14T11:29:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:29:22.025 [DEBUG] [Thread-184639] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:29:22.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:29:22.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:29:22.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:29:22.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:29:22.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:28:44', tmtdew=9.53, humidity=52.45, cloud=0.0, wind=31.85, temperature=12.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:28:39.619', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:29:22.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T11:29:22.121 [DEBUG] [Thread-184642] [transport.py] [_log()] starting thread (client mode): 0xa2d106d0
2026-02-14T11:29:22.121 [DEBUG] [Thread-184642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:29:22.136 [DEBUG] [Thread-184642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:29:22.137 [INFO] [Thread-184642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:29:22.144 [DEBUG] [Thread-184642] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:29:22.144 [DEBUG] [Thread-184642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:29:22.144 [DEBUG] [Thread-184642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:29:22.144 [DEBUG] [Thread-184642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:29:22.145 [DEBUG] [Thread-184642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:29:22.145 [DEBUG] [Thread-184642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:29:22.145 [DEBUG] [Thread-184642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:29:22.145 [DEBUG] [Thread-184642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:29:22.145 [DEBUG] [Thread-184642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:29:22.145 [DEBUG] [Thread-184642] [transport.py] [_log()] client lang: <none>
2026-02-14T11:29:22.145 [DEBUG] [Thread-184642] [transport.py] [_log()] server lang: <none>
2026-02-14T11:29:22.145 [DEBUG] [Thread-184642] [transport.py] [_log()] kex follows: False
2026-02-14T11:29:22.145 [DEBUG] [Thread-184642] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:29:22.145 [DEBUG] [Thread-184642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:29:22.145 [DEBUG] [Thread-184642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:29:22.145 [DEBUG] [Thread-184642] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:29:22.145 [DEBUG] [Thread-184642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:29:22.145 [DEBUG] [Thread-184642] [transport.py] [_log()] Compression: none
2026-02-14T11:29:22.145 [DEBUG] [Thread-184642] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:29:22.203 [DEBUG] [Thread-184642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:29:22.203 [DEBUG] [Thread-184642] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:29:22.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:29:22.204 [DEBUG] [Thread-184642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:29:22.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:29:22.259 [DEBUG] [Thread-184642] [transport.py] [_log()] userauth is OK
2026-02-14T11:29:22.259 [DEBUG] [Thread-184642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:29:22.259 [DEBUG] [Thread-184642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:29:22.259 [DEBUG] [Thread-184642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:29:22.260 [DEBUG] [Thread-184642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:29:22.279 [INFO] [Thread-184642] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:29:22.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-14T11:29:22.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:29:23.076 [DEBUG] [Thread-184642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:29:23.076 [DEBUG] [Thread-184642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:29:23.124 [DEBUG] [Thread-184642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:29:23.124 [DEBUG] [Thread-184642] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:29:23.133 [DEBUG] [Thread-184642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:29:23.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:29:23.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-14T11:29:23.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-14T11:29:23.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:29:23.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:29:23.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:29:23.168 [DEBUG] [Thread-184642] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:29:30.506 [DEBUG] [Thread-184644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:29:45.560 [DEBUG] [Thread-184645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:29:53.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:29:53.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:29:53.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-14T11:29:55.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 29, 19), 9.32, 53.09, 0.0, 27.42, 12.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:29:55.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:29:19
2026-02-14T11:29:55.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:29:55.606 [DEBUG] [Thread-184646] [transport.py] [_log()] starting thread (client mode): 0xa2dc3ee0
2026-02-14T11:29:55.606 [DEBUG] [Thread-184646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:29:55.626 [DEBUG] [Thread-184646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:29:55.626 [INFO] [Thread-184646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:29:55.629 [DEBUG] [Thread-184646] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:29:55.629 [DEBUG] [Thread-184646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:29:55.629 [DEBUG] [Thread-184646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:29:55.629 [DEBUG] [Thread-184646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:29:55.629 [DEBUG] [Thread-184646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:29:55.629 [DEBUG] [Thread-184646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:29:55.629 [DEBUG] [Thread-184646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:29:55.629 [DEBUG] [Thread-184646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:29:55.629 [DEBUG] [Thread-184646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:29:55.629 [DEBUG] [Thread-184646] [transport.py] [_log()] client lang: <none>
2026-02-14T11:29:55.629 [DEBUG] [Thread-184646] [transport.py] [_log()] server lang: <none>
2026-02-14T11:29:55.629 [DEBUG] [Thread-184646] [transport.py] [_log()] kex follows: False
2026-02-14T11:29:55.629 [DEBUG] [Thread-184646] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:29:55.629 [DEBUG] [Thread-184646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:29:55.629 [DEBUG] [Thread-184646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:29:55.629 [DEBUG] [Thread-184646] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:29:55.629 [DEBUG] [Thread-184646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:29:55.629 [DEBUG] [Thread-184646] [transport.py] [_log()] Compression: none
2026-02-14T11:29:55.629 [DEBUG] [Thread-184646] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:29:55.648 [DEBUG] [Thread-184646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:29:55.649 [DEBUG] [Thread-184646] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:29:55.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:29:55.650 [DEBUG] [Thread-184646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:29:55.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:29:55.653 [DEBUG] [Thread-184646] [transport.py] [_log()] userauth is OK
2026-02-14T11:29:55.653 [DEBUG] [Thread-184646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:29:55.654 [DEBUG] [Thread-184646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:29:55.654 [DEBUG] [Thread-184646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:29:55.654 [DEBUG] [Thread-184646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:29:55.679 [INFO] [Thread-184646] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:29:55.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:29:56.326 [DEBUG] [Thread-184646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:29:56.327 [DEBUG] [Thread-184646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:29:56.327 [DEBUG] [Thread-184646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:29:56.367 [DEBUG] [Thread-184646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:29:56.367 [DEBUG] [Thread-184646] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:29:56.369 [DEBUG] [Thread-184646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:29:56.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:29:56.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:29:56.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:29:56.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:29:56.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:29:56.392 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:29:56.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:29:56.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:29:56.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:29:56.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.395251 -999.00  +12.40  17.90     59   +4.70 1 1 1 1 1   888    0 8.31 14.28 ----- 22.9 17.9 162.6 29.5 19.5 -25.3 18.2 -23.9 17.8 -22.8 18.8 -24.0
2026-02-14T11:29:56.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:29:56.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:29:56.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.395251
2026-02-14T11:29:56.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:29:56.394 [DEBUG] [Thread-184646] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:29:56.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:29:56.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:29:56.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:29:56.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:29:56.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:29:19', tmtdew=9.32, humidity=53.09, cloud=0.0, wind=27.42, temperature=12.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:29:09.686', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:29:56.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-14T11:29:56.490 [DEBUG] [Thread-184649] [transport.py] [_log()] starting thread (client mode): 0xa575a470
2026-02-14T11:29:56.490 [DEBUG] [Thread-184649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:29:56.505 [DEBUG] [Thread-184649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:29:56.505 [INFO] [Thread-184649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:29:56.512 [DEBUG] [Thread-184649] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:29:56.513 [DEBUG] [Thread-184649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:29:56.513 [DEBUG] [Thread-184649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:29:56.513 [DEBUG] [Thread-184649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:29:56.513 [DEBUG] [Thread-184649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:29:56.513 [DEBUG] [Thread-184649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:29:56.513 [DEBUG] [Thread-184649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:29:56.513 [DEBUG] [Thread-184649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:29:56.513 [DEBUG] [Thread-184649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:29:56.513 [DEBUG] [Thread-184649] [transport.py] [_log()] client lang: <none>
2026-02-14T11:29:56.513 [DEBUG] [Thread-184649] [transport.py] [_log()] server lang: <none>
2026-02-14T11:29:56.513 [DEBUG] [Thread-184649] [transport.py] [_log()] kex follows: False
2026-02-14T11:29:56.513 [DEBUG] [Thread-184649] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:29:56.513 [DEBUG] [Thread-184649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:29:56.513 [DEBUG] [Thread-184649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:29:56.513 [DEBUG] [Thread-184649] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:29:56.513 [DEBUG] [Thread-184649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:29:56.513 [DEBUG] [Thread-184649] [transport.py] [_log()] Compression: none
2026-02-14T11:29:56.513 [DEBUG] [Thread-184649] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:29:56.570 [DEBUG] [Thread-184649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:29:56.570 [DEBUG] [Thread-184649] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:29:56.570 [DEBUG] [Thread-184649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:29:56.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:29:56.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:29:56.626 [DEBUG] [Thread-184649] [transport.py] [_log()] userauth is OK
2026-02-14T11:29:56.626 [DEBUG] [Thread-184649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:29:56.626 [DEBUG] [Thread-184649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:29:56.627 [DEBUG] [Thread-184649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:29:56.627 [DEBUG] [Thread-184649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:29:56.649 [INFO] [Thread-184649] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:29:56.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-14T11:29:56.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:29:57.460 [DEBUG] [Thread-184649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:29:57.460 [DEBUG] [Thread-184649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:29:57.508 [DEBUG] [Thread-184649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:29:57.508 [DEBUG] [Thread-184649] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:29:57.517 [DEBUG] [Thread-184649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:29:57.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:29:57.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-14T11:29:57.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:29:57.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:29:57.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:29:57.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:29:57.551 [DEBUG] [Thread-184649] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:30:00.593 [DEBUG] [Thread-184651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:30:13.080 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:30:13.081 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:30:15.642 [DEBUG] [Thread-184652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:30:19.267 [DEBUG] [Thread-184653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:30:27.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:30:27.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:30:27.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-14T11:30:29.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 29, 55), 9.28, 53.13, 0.0, 31.2, 12.58, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:30:29.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:29:55
2026-02-14T11:30:29.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:30:30.049 [DEBUG] [Thread-184654] [transport.py] [_log()] starting thread (client mode): 0xa2dc3310
2026-02-14T11:30:30.049 [DEBUG] [Thread-184654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:30:30.065 [DEBUG] [Thread-184654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:30:30.066 [INFO] [Thread-184654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:30:30.067 [DEBUG] [Thread-184654] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:30:30.067 [DEBUG] [Thread-184654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:30:30.067 [DEBUG] [Thread-184654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:30:30.067 [DEBUG] [Thread-184654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:30:30.067 [DEBUG] [Thread-184654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:30:30.067 [DEBUG] [Thread-184654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:30:30.067 [DEBUG] [Thread-184654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:30:30.067 [DEBUG] [Thread-184654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:30:30.067 [DEBUG] [Thread-184654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:30:30.067 [DEBUG] [Thread-184654] [transport.py] [_log()] client lang: <none>
2026-02-14T11:30:30.067 [DEBUG] [Thread-184654] [transport.py] [_log()] server lang: <none>
2026-02-14T11:30:30.067 [DEBUG] [Thread-184654] [transport.py] [_log()] kex follows: False
2026-02-14T11:30:30.067 [DEBUG] [Thread-184654] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:30:30.067 [DEBUG] [Thread-184654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:30:30.067 [DEBUG] [Thread-184654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:30:30.067 [DEBUG] [Thread-184654] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:30:30.067 [DEBUG] [Thread-184654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:30:30.067 [DEBUG] [Thread-184654] [transport.py] [_log()] Compression: none
2026-02-14T11:30:30.067 [DEBUG] [Thread-184654] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:30:30.075 [DEBUG] [Thread-184654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:30:30.075 [DEBUG] [Thread-184654] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:30:30.075 [DEBUG] [Thread-184654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:30:30.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:30:30.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:30:30.076 [DEBUG] [Thread-184654] [transport.py] [_log()] userauth is OK
2026-02-14T11:30:30.076 [DEBUG] [Thread-184654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:30:30.076 [DEBUG] [Thread-184654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:30:30.076 [DEBUG] [Thread-184654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:30:30.076 [DEBUG] [Thread-184654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:30:30.089 [INFO] [Thread-184654] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:30:30.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:30:30.658 [DEBUG] [Thread-184654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:30:30.658 [DEBUG] [Thread-184654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:30:30.659 [DEBUG] [Thread-184654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:30:30.680 [DEBUG] [Thread-184656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:30:30.699 [DEBUG] [Thread-184654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:30:30.699 [DEBUG] [Thread-184654] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:30:30.701 [DEBUG] [Thread-184654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:30:30.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:30:30.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:30:30.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:30:30.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:30:30.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:30:30.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:30:30.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:30:30.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:30:30.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:30:30.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.395598 -999.00  +12.30  25.31     59   +4.60 1 2 1 1 1   888    0 8.22 11.61 ----- 26.9 25.3 147.2 38.5 19.5 -26.9 18.3 -23.6 17.8 -22.3 18.8 -25.9
2026-02-14T11:30:30.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:30:30.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:30:30.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.395598
2026-02-14T11:30:30.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:30:30.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:30:30.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:30:30.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:30:30.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:30:30.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:29:55', tmtdew=9.28, humidity=53.13, cloud=0.0, wind=31.2, temperature=12.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:29:39.667', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:30:30.727 [DEBUG] [Thread-184654] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:30:30.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T11:30:30.834 [DEBUG] [Thread-184658] [transport.py] [_log()] starting thread (client mode): 0xa2dc1e10
2026-02-14T11:30:30.834 [DEBUG] [Thread-184658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:30:30.848 [DEBUG] [Thread-184658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:30:30.849 [INFO] [Thread-184658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:30:30.858 [DEBUG] [Thread-184658] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:30:30.858 [DEBUG] [Thread-184658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:30:30.858 [DEBUG] [Thread-184658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:30:30.858 [DEBUG] [Thread-184658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:30:30.858 [DEBUG] [Thread-184658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:30:30.858 [DEBUG] [Thread-184658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:30:30.858 [DEBUG] [Thread-184658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:30:30.858 [DEBUG] [Thread-184658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:30:30.858 [DEBUG] [Thread-184658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:30:30.858 [DEBUG] [Thread-184658] [transport.py] [_log()] client lang: <none>
2026-02-14T11:30:30.859 [DEBUG] [Thread-184658] [transport.py] [_log()] server lang: <none>
2026-02-14T11:30:30.859 [DEBUG] [Thread-184658] [transport.py] [_log()] kex follows: False
2026-02-14T11:30:30.859 [DEBUG] [Thread-184658] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:30:30.859 [DEBUG] [Thread-184658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:30:30.859 [DEBUG] [Thread-184658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:30:30.859 [DEBUG] [Thread-184658] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:30:30.859 [DEBUG] [Thread-184658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:30:30.859 [DEBUG] [Thread-184658] [transport.py] [_log()] Compression: none
2026-02-14T11:30:30.859 [DEBUG] [Thread-184658] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:30:30.919 [DEBUG] [Thread-184658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:30:30.919 [DEBUG] [Thread-184658] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:30:30.920 [DEBUG] [Thread-184658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:30:30.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:30:30.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:30:30.975 [DEBUG] [Thread-184658] [transport.py] [_log()] userauth is OK
2026-02-14T11:30:30.975 [DEBUG] [Thread-184658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:30:30.975 [DEBUG] [Thread-184658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:30:30.975 [DEBUG] [Thread-184658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:30:30.975 [DEBUG] [Thread-184658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:30:30.999 [INFO] [Thread-184658] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:30:30.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-14T11:30:30.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:30:31.808 [DEBUG] [Thread-184658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:30:31.809 [DEBUG] [Thread-184658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:30:31.856 [DEBUG] [Thread-184658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:30:31.857 [DEBUG] [Thread-184658] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:30:31.866 [DEBUG] [Thread-184658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:30:31.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:30:31.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:30:31.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-14T11:30:31.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:30:31.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:30:31.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:30:31.903 [DEBUG] [Thread-184658] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:30:45.721 [DEBUG] [Thread-184660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:31:00.774 [DEBUG] [Thread-184661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:31:01.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:31:01.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:31:01.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T11:31:03.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 30, 31), 9.41, 52.71, 0.0, 32.64, 12.78, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:31:03.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:30:31
2026-02-14T11:31:04.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:31:04.290 [DEBUG] [Thread-184662] [transport.py] [_log()] starting thread (client mode): 0xa2d54490
2026-02-14T11:31:04.291 [DEBUG] [Thread-184662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:31:04.310 [DEBUG] [Thread-184662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:31:04.311 [INFO] [Thread-184662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:31:04.314 [DEBUG] [Thread-184662] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:31:04.314 [DEBUG] [Thread-184662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:31:04.314 [DEBUG] [Thread-184662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:31:04.314 [DEBUG] [Thread-184662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:31:04.314 [DEBUG] [Thread-184662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:31:04.314 [DEBUG] [Thread-184662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:31:04.314 [DEBUG] [Thread-184662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:31:04.314 [DEBUG] [Thread-184662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:31:04.314 [DEBUG] [Thread-184662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:31:04.314 [DEBUG] [Thread-184662] [transport.py] [_log()] client lang: <none>
2026-02-14T11:31:04.314 [DEBUG] [Thread-184662] [transport.py] [_log()] server lang: <none>
2026-02-14T11:31:04.314 [DEBUG] [Thread-184662] [transport.py] [_log()] kex follows: False
2026-02-14T11:31:04.315 [DEBUG] [Thread-184662] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:31:04.315 [DEBUG] [Thread-184662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:31:04.315 [DEBUG] [Thread-184662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:31:04.315 [DEBUG] [Thread-184662] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:31:04.315 [DEBUG] [Thread-184662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:31:04.315 [DEBUG] [Thread-184662] [transport.py] [_log()] Compression: none
2026-02-14T11:31:04.315 [DEBUG] [Thread-184662] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:31:04.324 [DEBUG] [Thread-184662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:31:04.325 [DEBUG] [Thread-184662] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:31:04.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:31:04.326 [DEBUG] [Thread-184662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:31:04.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:31:04.328 [DEBUG] [Thread-184662] [transport.py] [_log()] userauth is OK
2026-02-14T11:31:04.328 [DEBUG] [Thread-184662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:31:04.328 [DEBUG] [Thread-184662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:31:04.328 [DEBUG] [Thread-184662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:31:04.328 [DEBUG] [Thread-184662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:31:04.367 [INFO] [Thread-184662] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:31:04.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:31:05.004 [DEBUG] [Thread-184662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:31:05.005 [DEBUG] [Thread-184662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:31:05.005 [DEBUG] [Thread-184662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:31:05.045 [DEBUG] [Thread-184662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:31:05.046 [DEBUG] [Thread-184662] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:31:05.049 [DEBUG] [Thread-184662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:31:05.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:31:05.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:31:05.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:31:05.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:31:05.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:31:05.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:31:05.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:31:05.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:31:05.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:31:05.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.395945 -999.00  +12.30  20.41     59   +4.70 1 1 1 1 1   888    0 8.06 6.77 ----- 21.3 20.4 159.6 31.0 19.5 -25.4 18.3 -24.0 17.7 -23.9 18.8 -24.8
2026-02-14T11:31:05.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:31:05.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:31:05.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.395945
2026-02-14T11:31:05.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:31:05.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:31:05.075 [DEBUG] [Thread-184662] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:31:05.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:31:05.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:31:05.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:31:05.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:30:31', tmtdew=9.41, humidity=52.71, cloud=0.0, wind=32.64, temperature=12.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:30:09.648', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:31:05.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T11:31:05.173 [DEBUG] [Thread-184665] [transport.py] [_log()] starting thread (client mode): 0xa57c2a40
2026-02-14T11:31:05.173 [DEBUG] [Thread-184665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:31:05.189 [DEBUG] [Thread-184665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:31:05.189 [INFO] [Thread-184665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:31:05.197 [DEBUG] [Thread-184665] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:31:05.198 [DEBUG] [Thread-184665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:31:05.198 [DEBUG] [Thread-184665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:31:05.198 [DEBUG] [Thread-184665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:31:05.198 [DEBUG] [Thread-184665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:31:05.198 [DEBUG] [Thread-184665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:31:05.198 [DEBUG] [Thread-184665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:31:05.198 [DEBUG] [Thread-184665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:31:05.198 [DEBUG] [Thread-184665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:31:05.199 [DEBUG] [Thread-184665] [transport.py] [_log()] client lang: <none>
2026-02-14T11:31:05.199 [DEBUG] [Thread-184665] [transport.py] [_log()] server lang: <none>
2026-02-14T11:31:05.199 [DEBUG] [Thread-184665] [transport.py] [_log()] kex follows: False
2026-02-14T11:31:05.199 [DEBUG] [Thread-184665] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:31:05.199 [DEBUG] [Thread-184665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:31:05.199 [DEBUG] [Thread-184665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:31:05.199 [DEBUG] [Thread-184665] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:31:05.199 [DEBUG] [Thread-184665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:31:05.200 [DEBUG] [Thread-184665] [transport.py] [_log()] Compression: none
2026-02-14T11:31:05.200 [DEBUG] [Thread-184665] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:31:05.259 [DEBUG] [Thread-184665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:31:05.260 [DEBUG] [Thread-184665] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:31:05.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:31:05.261 [DEBUG] [Thread-184665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:31:05.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:31:05.316 [DEBUG] [Thread-184665] [transport.py] [_log()] userauth is OK
2026-02-14T11:31:05.316 [DEBUG] [Thread-184665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:31:05.316 [DEBUG] [Thread-184665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:31:05.316 [DEBUG] [Thread-184665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:31:05.316 [DEBUG] [Thread-184665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:31:05.337 [INFO] [Thread-184665] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:31:05.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-14T11:31:05.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:31:06.158 [DEBUG] [Thread-184665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:31:06.158 [DEBUG] [Thread-184665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:31:06.206 [DEBUG] [Thread-184665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:31:06.206 [DEBUG] [Thread-184665] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:31:06.215 [DEBUG] [Thread-184665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:31:06.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:31:06.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-14T11:31:06.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-14T11:31:06.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:31:06.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:31:06.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:31:06.254 [DEBUG] [Thread-184665] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:31:13.237 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:31:13.238 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:31:15.812 [DEBUG] [Thread-184667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:31:19.311 [DEBUG] [Thread-184668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:31:30.866 [DEBUG] [Thread-184669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:31:36.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:31:36.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:31:36.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-14T11:31:38.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 31, 8), 9.46, 52.53, 0.0, 31.58, 12.76, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:31:38.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:31:08
2026-02-14T11:31:38.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:31:38.637 [DEBUG] [Thread-184670] [transport.py] [_log()] starting thread (client mode): 0xa2d55a50
2026-02-14T11:31:38.637 [DEBUG] [Thread-184670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:31:38.660 [DEBUG] [Thread-184670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:31:38.661 [INFO] [Thread-184670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:31:38.664 [DEBUG] [Thread-184670] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:31:38.665 [DEBUG] [Thread-184670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:31:38.665 [DEBUG] [Thread-184670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:31:38.665 [DEBUG] [Thread-184670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:31:38.665 [DEBUG] [Thread-184670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:31:38.665 [DEBUG] [Thread-184670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:31:38.665 [DEBUG] [Thread-184670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:31:38.665 [DEBUG] [Thread-184670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:31:38.665 [DEBUG] [Thread-184670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:31:38.665 [DEBUG] [Thread-184670] [transport.py] [_log()] client lang: <none>
2026-02-14T11:31:38.665 [DEBUG] [Thread-184670] [transport.py] [_log()] server lang: <none>
2026-02-14T11:31:38.665 [DEBUG] [Thread-184670] [transport.py] [_log()] kex follows: False
2026-02-14T11:31:38.665 [DEBUG] [Thread-184670] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:31:38.665 [DEBUG] [Thread-184670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:31:38.665 [DEBUG] [Thread-184670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:31:38.665 [DEBUG] [Thread-184670] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:31:38.665 [DEBUG] [Thread-184670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:31:38.665 [DEBUG] [Thread-184670] [transport.py] [_log()] Compression: none
2026-02-14T11:31:38.665 [DEBUG] [Thread-184670] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:31:38.683 [DEBUG] [Thread-184670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:31:38.684 [DEBUG] [Thread-184670] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:31:38.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:31:38.685 [DEBUG] [Thread-184670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:31:38.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:31:38.687 [DEBUG] [Thread-184670] [transport.py] [_log()] userauth is OK
2026-02-14T11:31:38.687 [DEBUG] [Thread-184670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:31:38.688 [DEBUG] [Thread-184670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:31:38.688 [DEBUG] [Thread-184670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:31:38.688 [DEBUG] [Thread-184670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:31:38.723 [INFO] [Thread-184670] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:31:38.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:31:39.374 [DEBUG] [Thread-184670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:31:39.375 [DEBUG] [Thread-184670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:31:39.375 [DEBUG] [Thread-184670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:31:39.415 [DEBUG] [Thread-184670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:31:39.415 [DEBUG] [Thread-184670] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:31:39.419 [DEBUG] [Thread-184670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:31:39.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:31:39.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:31:39.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:31:39.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:31:39.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:31:39.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:31:39.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:31:39.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:31:39.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:31:39.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.396292 -999.00  +12.30  27.72     59   +4.70 1 1 1 1 1   888    0 8.05 1.72 ----- 28.3 27.7 139.6 37.3 19.6 -24.7 18.2 -24.1 17.7 -22.8 18.8 -24.5
2026-02-14T11:31:39.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:31:39.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:31:39.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.396292
2026-02-14T11:31:39.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:31:39.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:31:39.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:31:39.448 [DEBUG] [Thread-184670] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:31:39.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:31:39.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:31:39.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:31:08', tmtdew=9.46, humidity=52.53, cloud=0.0, wind=31.58, temperature=12.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:30:39.629', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:31:39.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-14T11:31:39.548 [DEBUG] [Thread-184673] [transport.py] [_log()] starting thread (client mode): 0xa2d57d30
2026-02-14T11:31:39.548 [DEBUG] [Thread-184673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:31:39.564 [DEBUG] [Thread-184673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:31:39.564 [INFO] [Thread-184673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:31:39.571 [DEBUG] [Thread-184673] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:31:39.572 [DEBUG] [Thread-184673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:31:39.572 [DEBUG] [Thread-184673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:31:39.572 [DEBUG] [Thread-184673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:31:39.572 [DEBUG] [Thread-184673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:31:39.572 [DEBUG] [Thread-184673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:31:39.572 [DEBUG] [Thread-184673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:31:39.572 [DEBUG] [Thread-184673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:31:39.572 [DEBUG] [Thread-184673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:31:39.572 [DEBUG] [Thread-184673] [transport.py] [_log()] client lang: <none>
2026-02-14T11:31:39.572 [DEBUG] [Thread-184673] [transport.py] [_log()] server lang: <none>
2026-02-14T11:31:39.572 [DEBUG] [Thread-184673] [transport.py] [_log()] kex follows: False
2026-02-14T11:31:39.572 [DEBUG] [Thread-184673] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:31:39.573 [DEBUG] [Thread-184673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:31:39.573 [DEBUG] [Thread-184673] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:31:39.573 [DEBUG] [Thread-184673] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:31:39.573 [DEBUG] [Thread-184673] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:31:39.573 [DEBUG] [Thread-184673] [transport.py] [_log()] Compression: none
2026-02-14T11:31:39.573 [DEBUG] [Thread-184673] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:31:39.630 [DEBUG] [Thread-184673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:31:39.631 [DEBUG] [Thread-184673] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:31:39.632 [DEBUG] [Thread-184673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:31:39.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:31:39.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:31:39.687 [DEBUG] [Thread-184673] [transport.py] [_log()] userauth is OK
2026-02-14T11:31:39.687 [DEBUG] [Thread-184673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:31:39.687 [DEBUG] [Thread-184673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:31:39.687 [DEBUG] [Thread-184673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:31:39.687 [DEBUG] [Thread-184673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:31:39.708 [INFO] [Thread-184673] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:31:39.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-14T11:31:39.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:31:40.499 [DEBUG] [Thread-184673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:31:40.500 [DEBUG] [Thread-184673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:31:40.547 [DEBUG] [Thread-184673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:31:40.548 [DEBUG] [Thread-184673] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:31:40.557 [DEBUG] [Thread-184673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:31:40.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:31:40.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-14T11:31:40.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-14T11:31:40.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:31:40.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:31:40.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:31:40.597 [DEBUG] [Thread-184673] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:31:45.902 [DEBUG] [Thread-184675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:32:00.954 [DEBUG] [Thread-184676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:32:10.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:32:10.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:32:10.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-14T11:32:12.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 31, 43), 9.54, 52.43, 0.0, 25.85, 13.04, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:32:12.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:31:43
2026-02-14T11:32:12.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:32:13.091 [DEBUG] [Thread-184677] [transport.py] [_log()] starting thread (client mode): 0xa2db5b70
2026-02-14T11:32:13.091 [DEBUG] [Thread-184677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:32:13.112 [DEBUG] [Thread-184677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:32:13.112 [INFO] [Thread-184677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:32:13.115 [DEBUG] [Thread-184677] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:32:13.115 [DEBUG] [Thread-184677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:32:13.115 [DEBUG] [Thread-184677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:32:13.115 [DEBUG] [Thread-184677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:32:13.115 [DEBUG] [Thread-184677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:32:13.115 [DEBUG] [Thread-184677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:32:13.115 [DEBUG] [Thread-184677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:32:13.115 [DEBUG] [Thread-184677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:32:13.115 [DEBUG] [Thread-184677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:32:13.115 [DEBUG] [Thread-184677] [transport.py] [_log()] client lang: <none>
2026-02-14T11:32:13.115 [DEBUG] [Thread-184677] [transport.py] [_log()] server lang: <none>
2026-02-14T11:32:13.115 [DEBUG] [Thread-184677] [transport.py] [_log()] kex follows: False
2026-02-14T11:32:13.115 [DEBUG] [Thread-184677] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:32:13.116 [DEBUG] [Thread-184677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:32:13.116 [DEBUG] [Thread-184677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:32:13.116 [DEBUG] [Thread-184677] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:32:13.116 [DEBUG] [Thread-184677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:32:13.116 [DEBUG] [Thread-184677] [transport.py] [_log()] Compression: none
2026-02-14T11:32:13.116 [DEBUG] [Thread-184677] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:32:13.132 [DEBUG] [Thread-184677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:32:13.133 [DEBUG] [Thread-184677] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:32:13.133 [DEBUG] [Thread-184677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:32:13.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:32:13.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:32:13.139 [DEBUG] [Thread-184677] [transport.py] [_log()] userauth is OK
2026-02-14T11:32:13.140 [DEBUG] [Thread-184677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:32:13.140 [DEBUG] [Thread-184677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:32:13.140 [DEBUG] [Thread-184677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:32:13.140 [DEBUG] [Thread-184677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:32:13.158 [INFO] [Thread-184677] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:32:13.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:32:13.379 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:32:13.381 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:32:13.959 [DEBUG] [Thread-184677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:32:13.959 [DEBUG] [Thread-184677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:32:13.959 [DEBUG] [Thread-184677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:32:14.001 [DEBUG] [Thread-184677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:32:14.001 [DEBUG] [Thread-184677] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:32:14.005 [DEBUG] [Thread-184677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:32:14.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:32:14.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:32:14.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:32:14.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:32:14.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:32:14.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:32:14.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:32:14.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:32:14.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:32:14.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.396987 -999.00  +12.60  24.09     59   +4.80 1 2 1 1 1   888    0 7.63 -7.17 ----- 24.4 24.1 135.4 31.6 19.6 -24.0 18.5 -23.0 17.9 -22.8 18.8 -24.4
2026-02-14T11:32:14.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:32:14.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:32:14.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.396987
2026-02-14T11:32:14.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:32:14.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:32:14.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:32:14.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:32:14.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:32:14.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:31:43', tmtdew=9.54, humidity=52.43, cloud=0.0, wind=25.85, temperature=13.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:31:39.677', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:32:14.031 [DEBUG] [Thread-184677] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:32:14.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-14T11:32:14.123 [DEBUG] [Thread-184680] [transport.py] [_log()] starting thread (client mode): 0xa2db4e20
2026-02-14T11:32:14.123 [DEBUG] [Thread-184680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:32:14.139 [DEBUG] [Thread-184680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:32:14.139 [INFO] [Thread-184680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:32:14.147 [DEBUG] [Thread-184680] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:32:14.147 [DEBUG] [Thread-184680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:32:14.147 [DEBUG] [Thread-184680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:32:14.147 [DEBUG] [Thread-184680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:32:14.147 [DEBUG] [Thread-184680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:32:14.147 [DEBUG] [Thread-184680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:32:14.148 [DEBUG] [Thread-184680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:32:14.148 [DEBUG] [Thread-184680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:32:14.148 [DEBUG] [Thread-184680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:32:14.148 [DEBUG] [Thread-184680] [transport.py] [_log()] client lang: <none>
2026-02-14T11:32:14.148 [DEBUG] [Thread-184680] [transport.py] [_log()] server lang: <none>
2026-02-14T11:32:14.148 [DEBUG] [Thread-184680] [transport.py] [_log()] kex follows: False
2026-02-14T11:32:14.148 [DEBUG] [Thread-184680] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:32:14.148 [DEBUG] [Thread-184680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:32:14.148 [DEBUG] [Thread-184680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:32:14.148 [DEBUG] [Thread-184680] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:32:14.148 [DEBUG] [Thread-184680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:32:14.148 [DEBUG] [Thread-184680] [transport.py] [_log()] Compression: none
2026-02-14T11:32:14.148 [DEBUG] [Thread-184680] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:32:14.207 [DEBUG] [Thread-184680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:32:14.207 [DEBUG] [Thread-184680] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:32:14.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:32:14.208 [DEBUG] [Thread-184680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:32:14.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:32:14.263 [DEBUG] [Thread-184680] [transport.py] [_log()] userauth is OK
2026-02-14T11:32:14.263 [DEBUG] [Thread-184680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:32:14.263 [DEBUG] [Thread-184680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:32:14.263 [DEBUG] [Thread-184680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:32:14.263 [DEBUG] [Thread-184680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:32:14.285 [INFO] [Thread-184680] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:32:14.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-14T11:32:14.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:32:15.089 [DEBUG] [Thread-184680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:32:15.089 [DEBUG] [Thread-184680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:32:15.137 [DEBUG] [Thread-184680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:32:15.138 [DEBUG] [Thread-184680] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:32:15.146 [DEBUG] [Thread-184680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:32:15.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:32:15.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-14T11:32:15.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-14T11:32:15.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:32:15.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:32:15.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:32:15.181 [DEBUG] [Thread-184680] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:32:15.988 [DEBUG] [Thread-184682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:32:19.354 [DEBUG] [Thread-184683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:32:31.042 [DEBUG] [Thread-184684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:32:45.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:32:45.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:32:45.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-14T11:32:46.080 [DEBUG] [Thread-184685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:32:47.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 32, 18), 9.51, 52.53, 0.0, 27.67, 12.99, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:32:47.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:32:18
2026-02-14T11:32:47.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:32:47.571 [DEBUG] [Thread-184686] [transport.py] [_log()] starting thread (client mode): 0xa2dc2a40
2026-02-14T11:32:47.571 [DEBUG] [Thread-184686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:32:47.592 [DEBUG] [Thread-184686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:32:47.592 [INFO] [Thread-184686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:32:47.595 [DEBUG] [Thread-184686] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:32:47.595 [DEBUG] [Thread-184686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:32:47.596 [DEBUG] [Thread-184686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:32:47.596 [DEBUG] [Thread-184686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:32:47.596 [DEBUG] [Thread-184686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:32:47.596 [DEBUG] [Thread-184686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:32:47.596 [DEBUG] [Thread-184686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:32:47.596 [DEBUG] [Thread-184686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:32:47.596 [DEBUG] [Thread-184686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:32:47.596 [DEBUG] [Thread-184686] [transport.py] [_log()] client lang: <none>
2026-02-14T11:32:47.596 [DEBUG] [Thread-184686] [transport.py] [_log()] server lang: <none>
2026-02-14T11:32:47.596 [DEBUG] [Thread-184686] [transport.py] [_log()] kex follows: False
2026-02-14T11:32:47.596 [DEBUG] [Thread-184686] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:32:47.596 [DEBUG] [Thread-184686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:32:47.596 [DEBUG] [Thread-184686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:32:47.596 [DEBUG] [Thread-184686] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:32:47.596 [DEBUG] [Thread-184686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:32:47.596 [DEBUG] [Thread-184686] [transport.py] [_log()] Compression: none
2026-02-14T11:32:47.596 [DEBUG] [Thread-184686] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:32:47.615 [DEBUG] [Thread-184686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:32:47.616 [DEBUG] [Thread-184686] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:32:47.616 [DEBUG] [Thread-184686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:32:47.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:32:47.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:32:47.657 [DEBUG] [Thread-184686] [transport.py] [_log()] userauth is OK
2026-02-14T11:32:47.658 [DEBUG] [Thread-184686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:32:47.658 [DEBUG] [Thread-184686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:32:47.658 [DEBUG] [Thread-184686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:32:47.658 [DEBUG] [Thread-184686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:32:47.678 [INFO] [Thread-184686] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:32:47.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:32:48.315 [DEBUG] [Thread-184686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:32:48.316 [DEBUG] [Thread-184686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:32:48.316 [DEBUG] [Thread-184686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:32:48.356 [DEBUG] [Thread-184686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:32:48.357 [DEBUG] [Thread-184686] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:32:48.360 [DEBUG] [Thread-184686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:32:48.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:32:48.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:32:48.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:32:48.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:32:48.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:32:48.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:32:48.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:32:48.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:32:48.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:32:48.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.397334 -999.00  +12.70  28.92     58   +4.80 1 1 1 1 1   888    0 7.53 -10.68 ----- 25.6 28.9 169.8 36.6 19.5 -23.9 18.4 -25.7 17.9 -22.4 18.8 -23.9
2026-02-14T11:32:48.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:32:48.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:32:48.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.397334
2026-02-14T11:32:48.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:32:48.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:32:48.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:32:48.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:32:48.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:32:48.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:32:18', tmtdew=9.51, humidity=52.53, cloud=0.0, wind=27.67, temperature=12.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:32:09.658', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:32:48.392 [DEBUG] [Thread-184686] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:32:48.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-14T11:32:48.487 [DEBUG] [Thread-184689] [transport.py] [_log()] starting thread (client mode): 0xa2db73d0
2026-02-14T11:32:48.487 [DEBUG] [Thread-184689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:32:48.502 [DEBUG] [Thread-184689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:32:48.502 [INFO] [Thread-184689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:32:48.510 [DEBUG] [Thread-184689] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:32:48.510 [DEBUG] [Thread-184689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:32:48.510 [DEBUG] [Thread-184689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:32:48.510 [DEBUG] [Thread-184689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:32:48.510 [DEBUG] [Thread-184689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:32:48.510 [DEBUG] [Thread-184689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:32:48.510 [DEBUG] [Thread-184689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:32:48.510 [DEBUG] [Thread-184689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:32:48.510 [DEBUG] [Thread-184689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:32:48.510 [DEBUG] [Thread-184689] [transport.py] [_log()] client lang: <none>
2026-02-14T11:32:48.510 [DEBUG] [Thread-184689] [transport.py] [_log()] server lang: <none>
2026-02-14T11:32:48.511 [DEBUG] [Thread-184689] [transport.py] [_log()] kex follows: False
2026-02-14T11:32:48.511 [DEBUG] [Thread-184689] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:32:48.511 [DEBUG] [Thread-184689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:32:48.511 [DEBUG] [Thread-184689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:32:48.511 [DEBUG] [Thread-184689] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:32:48.511 [DEBUG] [Thread-184689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:32:48.511 [DEBUG] [Thread-184689] [transport.py] [_log()] Compression: none
2026-02-14T11:32:48.511 [DEBUG] [Thread-184689] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:32:48.571 [DEBUG] [Thread-184689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:32:48.571 [DEBUG] [Thread-184689] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:32:48.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:32:48.572 [DEBUG] [Thread-184689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:32:48.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:32:48.626 [DEBUG] [Thread-184689] [transport.py] [_log()] userauth is OK
2026-02-14T11:32:48.627 [DEBUG] [Thread-184689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:32:48.627 [DEBUG] [Thread-184689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:32:48.627 [DEBUG] [Thread-184689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:32:48.627 [DEBUG] [Thread-184689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:32:48.647 [INFO] [Thread-184689] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:32: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-14T11:32:48.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:32:49.486 [DEBUG] [Thread-184689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:32:49.487 [DEBUG] [Thread-184689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:32:49.534 [DEBUG] [Thread-184689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:32:49.535 [DEBUG] [Thread-184689] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:32:49.544 [DEBUG] [Thread-184689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:32:49.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:32:49.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-14T11:32:49.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-14T11:32:49.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:32:49.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:32:49.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:32:49.581 [DEBUG] [Thread-184689] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:33:01.115 [DEBUG] [Thread-184691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:33:13.524 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:33:13.525 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:33:16.159 [DEBUG] [Thread-184692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:33:19.399 [DEBUG] [Thread-184693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:33:19.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:33:19.589 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:33:19.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T11:33:21.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 32, 54), 9.34, 52.91, 0.0, 28.02, 12.64, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:33:21.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:32:54
2026-02-14T11:33:22.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:33:22.216 [DEBUG] [Thread-184694] [transport.py] [_log()] starting thread (client mode): 0xa57c3c40
2026-02-14T11:33:22.216 [DEBUG] [Thread-184694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:33:22.236 [DEBUG] [Thread-184694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:33:22.237 [INFO] [Thread-184694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:33:22.239 [DEBUG] [Thread-184694] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:33:22.240 [DEBUG] [Thread-184694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:33:22.240 [DEBUG] [Thread-184694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:33:22.240 [DEBUG] [Thread-184694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:33:22.240 [DEBUG] [Thread-184694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:33:22.240 [DEBUG] [Thread-184694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:33:22.240 [DEBUG] [Thread-184694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:33:22.240 [DEBUG] [Thread-184694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:33:22.240 [DEBUG] [Thread-184694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:33:22.240 [DEBUG] [Thread-184694] [transport.py] [_log()] client lang: <none>
2026-02-14T11:33:22.240 [DEBUG] [Thread-184694] [transport.py] [_log()] server lang: <none>
2026-02-14T11:33:22.240 [DEBUG] [Thread-184694] [transport.py] [_log()] kex follows: False
2026-02-14T11:33:22.240 [DEBUG] [Thread-184694] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:33:22.240 [DEBUG] [Thread-184694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:33:22.240 [DEBUG] [Thread-184694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:33:22.240 [DEBUG] [Thread-184694] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:33:22.240 [DEBUG] [Thread-184694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:33:22.240 [DEBUG] [Thread-184694] [transport.py] [_log()] Compression: none
2026-02-14T11:33:22.240 [DEBUG] [Thread-184694] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:33:22.257 [DEBUG] [Thread-184694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:33:22.257 [DEBUG] [Thread-184694] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:33:22.258 [DEBUG] [Thread-184694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:33:22.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:33:22.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:33:22.260 [DEBUG] [Thread-184694] [transport.py] [_log()] userauth is OK
2026-02-14T11:33:22.260 [DEBUG] [Thread-184694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:33:22.260 [DEBUG] [Thread-184694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:33:22.260 [DEBUG] [Thread-184694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:33:22.260 [DEBUG] [Thread-184694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:33:22.285 [INFO] [Thread-184694] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:33:22.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:33:22.874 [DEBUG] [Thread-184694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:33:22.874 [DEBUG] [Thread-184694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:33:22.874 [DEBUG] [Thread-184694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:33:22.915 [DEBUG] [Thread-184694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:33:22.915 [DEBUG] [Thread-184694] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:33:22.918 [DEBUG] [Thread-184694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:33:22.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:33:22.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:33:22.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:33:22.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:33:22.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:33:22.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:33:22.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:33:22.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:33:22.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:33:22.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.397681 -999.00  +12.40  18.62     59   +4.70 1 1 1 1 1   888    0 7.31 -14.34 ----- 22.7 18.6 173.4 35.2 19.6 -28.2 18.2 -26.8 17.7 -23.4 18.9 -26.8
2026-02-14T11:33:22.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:33:22.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:33:22.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.397681
2026-02-14T11:33:22.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:33:22.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:33:22.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:33:22.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:33:22.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:33:22.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:32:54', tmtdew=9.34, humidity=52.91, cloud=0.0, wind=28.02, temperature=12.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:32:39.638', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:33:22.938 [DEBUG] [Thread-184694] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:33:23.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T11:33:23.043 [DEBUG] [Thread-184697] [transport.py] [_log()] starting thread (client mode): 0xa2d54ac0
2026-02-14T11:33:23.043 [DEBUG] [Thread-184697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:33:23.058 [DEBUG] [Thread-184697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:33:23.058 [INFO] [Thread-184697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:33:23.066 [DEBUG] [Thread-184697] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:33:23.066 [DEBUG] [Thread-184697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:33:23.066 [DEBUG] [Thread-184697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:33:23.066 [DEBUG] [Thread-184697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:33:23.066 [DEBUG] [Thread-184697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:33:23.066 [DEBUG] [Thread-184697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:33:23.066 [DEBUG] [Thread-184697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:33:23.066 [DEBUG] [Thread-184697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:33:23.066 [DEBUG] [Thread-184697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:33:23.066 [DEBUG] [Thread-184697] [transport.py] [_log()] client lang: <none>
2026-02-14T11:33:23.067 [DEBUG] [Thread-184697] [transport.py] [_log()] server lang: <none>
2026-02-14T11:33:23.067 [DEBUG] [Thread-184697] [transport.py] [_log()] kex follows: False
2026-02-14T11:33:23.067 [DEBUG] [Thread-184697] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:33:23.067 [DEBUG] [Thread-184697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:33:23.067 [DEBUG] [Thread-184697] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:33:23.067 [DEBUG] [Thread-184697] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:33:23.067 [DEBUG] [Thread-184697] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:33:23.067 [DEBUG] [Thread-184697] [transport.py] [_log()] Compression: none
2026-02-14T11:33:23.067 [DEBUG] [Thread-184697] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:33:23.127 [DEBUG] [Thread-184697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:33:23.127 [DEBUG] [Thread-184697] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:33:23.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:33:23.137 [DEBUG] [Thread-184697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:33:23.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:33:23.186 [DEBUG] [Thread-184697] [transport.py] [_log()] userauth is OK
2026-02-14T11:33:23.186 [DEBUG] [Thread-184697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:33:23.186 [DEBUG] [Thread-184697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:33:23.186 [DEBUG] [Thread-184697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:33:23.186 [DEBUG] [Thread-184697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:33:23.210 [INFO] [Thread-184697] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:33:23.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-14T11:33:23.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:33:24.003 [DEBUG] [Thread-184697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:33:24.003 [DEBUG] [Thread-184697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:33:24.051 [DEBUG] [Thread-184697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:33:24.051 [DEBUG] [Thread-184697] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:33:24.060 [DEBUG] [Thread-184697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:33:24.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:33:24.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-14T11:33:24.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:33:24.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:33:24.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:33:24.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:33:24.094 [DEBUG] [Thread-184697] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:33:31.196 [DEBUG] [Thread-184699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:33:46.251 [DEBUG] [Thread-184700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:33:54.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:33:54.118 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:33:54.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-14T11:33:56.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 33, 29), 9.29, 53.15, 0.0, 29.13, 12.82, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:33:56.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:33:29
2026-02-14T11:33:56.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:33:56.614 [DEBUG] [Thread-184701] [transport.py] [_log()] starting thread (client mode): 0xa2d57280
2026-02-14T11:33:56.614 [DEBUG] [Thread-184701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:33:56.635 [DEBUG] [Thread-184701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:33:56.635 [INFO] [Thread-184701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:33:56.638 [DEBUG] [Thread-184701] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:33:56.638 [DEBUG] [Thread-184701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:33:56.638 [DEBUG] [Thread-184701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:33:56.638 [DEBUG] [Thread-184701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:33:56.638 [DEBUG] [Thread-184701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:33:56.638 [DEBUG] [Thread-184701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:33:56.638 [DEBUG] [Thread-184701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:33:56.638 [DEBUG] [Thread-184701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:33:56.639 [DEBUG] [Thread-184701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:33:56.639 [DEBUG] [Thread-184701] [transport.py] [_log()] client lang: <none>
2026-02-14T11:33:56.639 [DEBUG] [Thread-184701] [transport.py] [_log()] server lang: <none>
2026-02-14T11:33:56.639 [DEBUG] [Thread-184701] [transport.py] [_log()] kex follows: False
2026-02-14T11:33:56.639 [DEBUG] [Thread-184701] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:33:56.639 [DEBUG] [Thread-184701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:33:56.639 [DEBUG] [Thread-184701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:33:56.639 [DEBUG] [Thread-184701] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:33:56.639 [DEBUG] [Thread-184701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:33:56.639 [DEBUG] [Thread-184701] [transport.py] [_log()] Compression: none
2026-02-14T11:33:56.639 [DEBUG] [Thread-184701] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:33:56.656 [DEBUG] [Thread-184701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:33:56.656 [DEBUG] [Thread-184701] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:33:56.657 [DEBUG] [Thread-184701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:33:56.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:33:56.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:33:56.659 [DEBUG] [Thread-184701] [transport.py] [_log()] userauth is OK
2026-02-14T11:33:56.659 [DEBUG] [Thread-184701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:33:56.660 [DEBUG] [Thread-184701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:33:56.660 [DEBUG] [Thread-184701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:33:56.660 [DEBUG] [Thread-184701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:33:56.684 [INFO] [Thread-184701] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:33:56.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:33:57.313 [DEBUG] [Thread-184701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:33:57.313 [DEBUG] [Thread-184701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:33:57.314 [DEBUG] [Thread-184701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:33:57.354 [DEBUG] [Thread-184701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:33:57.355 [DEBUG] [Thread-184701] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:33:57.358 [DEBUG] [Thread-184701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:33:57.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:33:57.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:33:57.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:33:57.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:33:57.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:33:57.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:33:57.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:33:57.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:33:57.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:33:57.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.398028 -999.00  +12.60  20.01     59   +4.90 1 1 1 1 1   888    0 7.49 -20.36 ----- 21.4 20.0 190.0 32.0 19.5 -24.2 18.4 -24.5 17.8 -23.1 18.9 -23.8
2026-02-14T11:33:57.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:33:57.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:33:57.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.398028
2026-02-14T11:33:57.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:33:57.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:33:57.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:33:57.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:33:57.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:33:57.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:33:29', tmtdew=9.29, humidity=53.15, cloud=0.0, wind=29.13, temperature=12.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:33:09.619', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:33:57.376 [DEBUG] [Thread-184701] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:33:57.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-14T11:33:57.472 [DEBUG] [Thread-184704] [transport.py] [_log()] starting thread (client mode): 0xa5741330
2026-02-14T11:33:57.472 [DEBUG] [Thread-184704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:33:57.487 [DEBUG] [Thread-184704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:33:57.487 [INFO] [Thread-184704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:33:57.495 [DEBUG] [Thread-184704] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:33:57.495 [DEBUG] [Thread-184704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:33:57.495 [DEBUG] [Thread-184704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:33:57.495 [DEBUG] [Thread-184704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:33:57.496 [DEBUG] [Thread-184704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:33:57.496 [DEBUG] [Thread-184704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:33:57.496 [DEBUG] [Thread-184704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:33:57.496 [DEBUG] [Thread-184704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:33:57.496 [DEBUG] [Thread-184704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:33:57.496 [DEBUG] [Thread-184704] [transport.py] [_log()] client lang: <none>
2026-02-14T11:33:57.496 [DEBUG] [Thread-184704] [transport.py] [_log()] server lang: <none>
2026-02-14T11:33:57.496 [DEBUG] [Thread-184704] [transport.py] [_log()] kex follows: False
2026-02-14T11:33:57.496 [DEBUG] [Thread-184704] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:33:57.496 [DEBUG] [Thread-184704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:33:57.496 [DEBUG] [Thread-184704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:33:57.496 [DEBUG] [Thread-184704] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:33:57.496 [DEBUG] [Thread-184704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:33:57.496 [DEBUG] [Thread-184704] [transport.py] [_log()] Compression: none
2026-02-14T11:33:57.496 [DEBUG] [Thread-184704] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:33:57.554 [DEBUG] [Thread-184704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:33:57.555 [DEBUG] [Thread-184704] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:33:57.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:33:57.556 [DEBUG] [Thread-184704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:33:57.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:33:57.610 [DEBUG] [Thread-184704] [transport.py] [_log()] userauth is OK
2026-02-14T11:33:57.610 [DEBUG] [Thread-184704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:33:57.611 [DEBUG] [Thread-184704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:33:57.611 [DEBUG] [Thread-184704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:33:57.611 [DEBUG] [Thread-184704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:33:57.629 [INFO] [Thread-184704] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:33:57.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-14T11:33:57.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:33:58.433 [DEBUG] [Thread-184704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:33:58.434 [DEBUG] [Thread-184704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:33:58.481 [DEBUG] [Thread-184704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:33:58.481 [DEBUG] [Thread-184704] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:33:58.491 [DEBUG] [Thread-184704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:33:58.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:33:58.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:33:58.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:33:58.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:33:58.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:33:58.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:33:58.529 [DEBUG] [Thread-184704] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:34:01.289 [DEBUG] [Thread-184706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:34:13.665 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:34:13.666 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:34:16.342 [DEBUG] [Thread-184707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:34:19.433 [DEBUG] [Thread-184708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:34:28.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:34:28.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:34:28.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-14T11:34:30.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 34, 4), 9.44, 52.65, 0.0, 26.68, 12.91, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:34:30.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:34:04
2026-02-14T11:34:30.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:34:31.107 [DEBUG] [Thread-184709] [transport.py] [_log()] starting thread (client mode): 0xa2dc1030
2026-02-14T11:34:31.107 [DEBUG] [Thread-184709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:34:31.128 [DEBUG] [Thread-184709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:34:31.128 [INFO] [Thread-184709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:34:31.131 [DEBUG] [Thread-184709] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:34:31.131 [DEBUG] [Thread-184709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:34:31.131 [DEBUG] [Thread-184709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:34:31.132 [DEBUG] [Thread-184709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:34:31.132 [DEBUG] [Thread-184709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:34:31.132 [DEBUG] [Thread-184709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:34:31.132 [DEBUG] [Thread-184709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:34:31.132 [DEBUG] [Thread-184709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:34:31.132 [DEBUG] [Thread-184709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:34:31.132 [DEBUG] [Thread-184709] [transport.py] [_log()] client lang: <none>
2026-02-14T11:34:31.132 [DEBUG] [Thread-184709] [transport.py] [_log()] server lang: <none>
2026-02-14T11:34:31.132 [DEBUG] [Thread-184709] [transport.py] [_log()] kex follows: False
2026-02-14T11:34:31.132 [DEBUG] [Thread-184709] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:34:31.132 [DEBUG] [Thread-184709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:34:31.132 [DEBUG] [Thread-184709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:34:31.132 [DEBUG] [Thread-184709] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:34:31.132 [DEBUG] [Thread-184709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:34:31.132 [DEBUG] [Thread-184709] [transport.py] [_log()] Compression: none
2026-02-14T11:34:31.132 [DEBUG] [Thread-184709] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:34:31.147 [DEBUG] [Thread-184709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:34:31.147 [DEBUG] [Thread-184709] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:34:31.147 [DEBUG] [Thread-184709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:34:31.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:34:31.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:34:31.148 [DEBUG] [Thread-184709] [transport.py] [_log()] userauth is OK
2026-02-14T11:34:31.148 [DEBUG] [Thread-184709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:34:31.148 [DEBUG] [Thread-184709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:34:31.148 [DEBUG] [Thread-184709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:34:31.148 [DEBUG] [Thread-184709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:34:31.158 [INFO] [Thread-184709] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:34:31.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:34:31.375 [DEBUG] [Thread-184711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:34:31.796 [DEBUG] [Thread-184709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:34:31.796 [DEBUG] [Thread-184709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:34:31.797 [DEBUG] [Thread-184709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:34:31.837 [DEBUG] [Thread-184709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:34:31.838 [DEBUG] [Thread-184709] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:34:31.841 [DEBUG] [Thread-184709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:34:31.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:34:31.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:34:31.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:34:31.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:34:31.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:34:31.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:34:31.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:34:31.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:34:31.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:34:31.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.398375 -999.00  +12.60  21.92     59   +4.80 1 2 1 1 1   888    0 7.31 -21.84 ----- 21.0 21.9 181.0 26.5 19.3 -27.7 18.1 -24.0 17.8 -20.9 18.6 -27.2
2026-02-14T11:34:31.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:34:31.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:34:31.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.398375
2026-02-14T11:34:31.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:34:31.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:34:31.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:34:31.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:34:31.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:34:31.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:34:04', tmtdew=9.44, humidity=52.65, cloud=0.0, wind=26.68, temperature=12.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:33:39.600', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:34:31.868 [DEBUG] [Thread-184709] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:34:31.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-14T11:34:31.965 [DEBUG] [Thread-184713] [transport.py] [_log()] starting thread (client mode): 0xa57c2740
2026-02-14T11:34:31.965 [DEBUG] [Thread-184713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:34:31.980 [DEBUG] [Thread-184713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:34:31.980 [INFO] [Thread-184713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:34:31.987 [DEBUG] [Thread-184713] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:34:31.988 [DEBUG] [Thread-184713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:34:31.988 [DEBUG] [Thread-184713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:34:31.988 [DEBUG] [Thread-184713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:34:31.988 [DEBUG] [Thread-184713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:34:31.988 [DEBUG] [Thread-184713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:34:31.988 [DEBUG] [Thread-184713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:34:31.988 [DEBUG] [Thread-184713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:34:31.988 [DEBUG] [Thread-184713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:34:31.988 [DEBUG] [Thread-184713] [transport.py] [_log()] client lang: <none>
2026-02-14T11:34:31.988 [DEBUG] [Thread-184713] [transport.py] [_log()] server lang: <none>
2026-02-14T11:34:31.988 [DEBUG] [Thread-184713] [transport.py] [_log()] kex follows: False
2026-02-14T11:34:31.988 [DEBUG] [Thread-184713] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:34:31.988 [DEBUG] [Thread-184713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:34:31.988 [DEBUG] [Thread-184713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:34:31.988 [DEBUG] [Thread-184713] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:34:31.989 [DEBUG] [Thread-184713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:34:31.989 [DEBUG] [Thread-184713] [transport.py] [_log()] Compression: none
2026-02-14T11:34:31.989 [DEBUG] [Thread-184713] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:34:32.046 [DEBUG] [Thread-184713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:34:32.047 [DEBUG] [Thread-184713] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:34:32.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:34:32.048 [DEBUG] [Thread-184713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:34:32.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:34:32.102 [DEBUG] [Thread-184713] [transport.py] [_log()] userauth is OK
2026-02-14T11:34:32.102 [DEBUG] [Thread-184713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:34:32.102 [DEBUG] [Thread-184713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:34:32.102 [DEBUG] [Thread-184713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:34:32.102 [DEBUG] [Thread-184713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:34:32.121 [INFO] [Thread-184713] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:34:32.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-14T11:34:32.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:34:32.942 [DEBUG] [Thread-184713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:34:32.942 [DEBUG] [Thread-184713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:34:32.991 [DEBUG] [Thread-184713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:34:32.991 [DEBUG] [Thread-184713] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:34:33.006 [DEBUG] [Thread-184713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:34:33.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:34:33.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-14T11:34: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-14T11:34:33.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:34:33.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:34:33.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:34:33.041 [DEBUG] [Thread-184713] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:34:46.414 [DEBUG] [Thread-184715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:35:01.467 [DEBUG] [Thread-184716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:35:03.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:35:03.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:35:03.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T11:35:04.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 34, 39), 10.99, 47.74, 0.0, 21.07, 15.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:35:04.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:34:39
2026-02-14T11:35:05.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:35:05.446 [DEBUG] [Thread-184717] [transport.py] [_log()] starting thread (client mode): 0xa57c1ae0
2026-02-14T11:35:05.446 [DEBUG] [Thread-184717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:35:05.466 [DEBUG] [Thread-184717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:35:05.466 [INFO] [Thread-184717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:35:05.467 [DEBUG] [Thread-184717] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:35:05.467 [DEBUG] [Thread-184717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:35:05.467 [DEBUG] [Thread-184717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:35:05.467 [DEBUG] [Thread-184717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:35:05.467 [DEBUG] [Thread-184717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:35:05.467 [DEBUG] [Thread-184717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:35:05.467 [DEBUG] [Thread-184717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:35:05.467 [DEBUG] [Thread-184717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:35:05.467 [DEBUG] [Thread-184717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:35:05.467 [DEBUG] [Thread-184717] [transport.py] [_log()] client lang: <none>
2026-02-14T11:35:05.467 [DEBUG] [Thread-184717] [transport.py] [_log()] server lang: <none>
2026-02-14T11:35:05.467 [DEBUG] [Thread-184717] [transport.py] [_log()] kex follows: False
2026-02-14T11:35:05.467 [DEBUG] [Thread-184717] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:35:05.467 [DEBUG] [Thread-184717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:35:05.467 [DEBUG] [Thread-184717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:35:05.467 [DEBUG] [Thread-184717] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:35:05.467 [DEBUG] [Thread-184717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:35:05.467 [DEBUG] [Thread-184717] [transport.py] [_log()] Compression: none
2026-02-14T11:35:05.467 [DEBUG] [Thread-184717] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:35:05.475 [DEBUG] [Thread-184717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:35:05.475 [DEBUG] [Thread-184717] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:35:05.475 [DEBUG] [Thread-184717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:35:05.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:35:05.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:35:05.477 [DEBUG] [Thread-184717] [transport.py] [_log()] userauth is OK
2026-02-14T11:35:05.477 [DEBUG] [Thread-184717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:35:05.477 [DEBUG] [Thread-184717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:35:05.477 [DEBUG] [Thread-184717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:35:05.477 [DEBUG] [Thread-184717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:35:05.493 [INFO] [Thread-184717] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:35:05.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:35:06.240 [DEBUG] [Thread-184717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:35:06.240 [DEBUG] [Thread-184717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:35:06.241 [DEBUG] [Thread-184717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:35:06.281 [DEBUG] [Thread-184717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:35:06.282 [DEBUG] [Thread-184717] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:35:06.285 [DEBUG] [Thread-184717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:35:06.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:35:06.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:35:06.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:35:06.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:35:06.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:35:06.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:35:06.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:35:06.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:35:06.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:35:06.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.398723 -999.00  +12.50  17.55     58   +4.70 1 1 1 1 1   888    0 7.25 -22.52 ----- 21.3 17.6 158.0 30.7 19.4 -26.1 17.8 -28.5 17.7 -22.8 18.7 -25.8
2026-02-14T11:35:06.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:35:06.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:35:06.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.398723
2026-02-14T11:35:06.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:35:06.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:35:06.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:35:06.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:35:06.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:35:06.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:34:39', tmtdew=10.99, humidity=47.74, cloud=0.0, wind=21.07, temperature=15.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:34:09.667', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:35:06.340 [DEBUG] [Thread-184717] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:35:06.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-14T11:35:06.428 [DEBUG] [Thread-184720] [transport.py] [_log()] starting thread (client mode): 0xa57c2380
2026-02-14T11:35:06.428 [DEBUG] [Thread-184720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:35:06.443 [DEBUG] [Thread-184720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:35:06.444 [INFO] [Thread-184720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:35:06.451 [DEBUG] [Thread-184720] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:35:06.451 [DEBUG] [Thread-184720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:35:06.451 [DEBUG] [Thread-184720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:35:06.451 [DEBUG] [Thread-184720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:35:06.452 [DEBUG] [Thread-184720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:35:06.452 [DEBUG] [Thread-184720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:35:06.452 [DEBUG] [Thread-184720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:35:06.452 [DEBUG] [Thread-184720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:35:06.452 [DEBUG] [Thread-184720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:35:06.452 [DEBUG] [Thread-184720] [transport.py] [_log()] client lang: <none>
2026-02-14T11:35:06.452 [DEBUG] [Thread-184720] [transport.py] [_log()] server lang: <none>
2026-02-14T11:35:06.452 [DEBUG] [Thread-184720] [transport.py] [_log()] kex follows: False
2026-02-14T11:35:06.452 [DEBUG] [Thread-184720] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:35:06.453 [DEBUG] [Thread-184720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:35:06.453 [DEBUG] [Thread-184720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:35:06.453 [DEBUG] [Thread-184720] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:35:06.453 [DEBUG] [Thread-184720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:35:06.453 [DEBUG] [Thread-184720] [transport.py] [_log()] Compression: none
2026-02-14T11:35:06.453 [DEBUG] [Thread-184720] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:35:06.510 [DEBUG] [Thread-184720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:35:06.511 [DEBUG] [Thread-184720] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:35:06.511 [DEBUG] [Thread-184720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:35:06.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:35:06.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:35:06.570 [DEBUG] [Thread-184720] [transport.py] [_log()] userauth is OK
2026-02-14T11:35:06.570 [DEBUG] [Thread-184720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:35:06.570 [DEBUG] [Thread-184720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:35:06.570 [DEBUG] [Thread-184720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:35:06.570 [DEBUG] [Thread-184720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:35:06.589 [INFO] [Thread-184720] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:35:06.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-14T11:35:06.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:35:07.424 [DEBUG] [Thread-184720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:35:07.424 [DEBUG] [Thread-184720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:35:07.472 [DEBUG] [Thread-184720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:35:07.473 [DEBUG] [Thread-184720] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:35:07.482 [DEBUG] [Thread-184720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:35:07.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:35:07.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-14T11:35:07.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-14T11:35:07.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:35:07.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:35:07.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:35:07.518 [DEBUG] [Thread-184720] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:35:13.807 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:35:13.809 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:35:16.509 [DEBUG] [Thread-184722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:35:19.465 [DEBUG] [Thread-184723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:35:31.582 [DEBUG] [Thread-184724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:35:37.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:35:37.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:35:37.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-14T11:35:39.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 35, 15), 10.2, 50.07, 0.0, 23.5, 13.7, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:35:39.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:35:15
2026-02-14T11:35:39.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:35:39.922 [DEBUG] [Thread-184725] [transport.py] [_log()] starting thread (client mode): 0xa2dc2a10
2026-02-14T11:35:39.922 [DEBUG] [Thread-184725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:35:39.941 [DEBUG] [Thread-184725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:35:39.941 [INFO] [Thread-184725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:35:39.945 [DEBUG] [Thread-184725] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:35:39.945 [DEBUG] [Thread-184725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:35:39.945 [DEBUG] [Thread-184725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:35:39.945 [DEBUG] [Thread-184725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:35:39.945 [DEBUG] [Thread-184725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:35:39.945 [DEBUG] [Thread-184725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:35:39.945 [DEBUG] [Thread-184725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:35:39.945 [DEBUG] [Thread-184725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:35:39.945 [DEBUG] [Thread-184725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:35:39.945 [DEBUG] [Thread-184725] [transport.py] [_log()] client lang: <none>
2026-02-14T11:35:39.945 [DEBUG] [Thread-184725] [transport.py] [_log()] server lang: <none>
2026-02-14T11:35:39.945 [DEBUG] [Thread-184725] [transport.py] [_log()] kex follows: False
2026-02-14T11:35:39.945 [DEBUG] [Thread-184725] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:35:39.946 [DEBUG] [Thread-184725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:35:39.946 [DEBUG] [Thread-184725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:35:39.946 [DEBUG] [Thread-184725] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:35:39.946 [DEBUG] [Thread-184725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:35:39.946 [DEBUG] [Thread-184725] [transport.py] [_log()] Compression: none
2026-02-14T11:35:39.946 [DEBUG] [Thread-184725] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:35:39.960 [DEBUG] [Thread-184725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:35:39.961 [DEBUG] [Thread-184725] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:35:39.961 [DEBUG] [Thread-184725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:35:39.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:35:39.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:35:39.961 [DEBUG] [Thread-184725] [transport.py] [_log()] userauth is OK
2026-02-14T11:35:39.962 [DEBUG] [Thread-184725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:35:39.962 [DEBUG] [Thread-184725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:35:39.962 [DEBUG] [Thread-184725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:35:39.962 [DEBUG] [Thread-184725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:35:39.976 [INFO] [Thread-184725] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:35:39.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:35:40.638 [DEBUG] [Thread-184725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:35:40.639 [DEBUG] [Thread-184725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:35:40.639 [DEBUG] [Thread-184725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:35:40.679 [DEBUG] [Thread-184725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:35:40.679 [DEBUG] [Thread-184725] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:35:40.683 [DEBUG] [Thread-184725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:35:40.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:35:40.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:35:40.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:35:40.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:35:40.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:35:40.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:35:40.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:35:40.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:35:40.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:35:40.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.399070 -999.00  +12.70  21.54     58   +4.80 1 1 1 1 1   888    0 7.14 -22.53 ----- 25.4 21.5 206.2 26.5 19.5 -24.1 17.9 -27.7 17.8 -22.6 18.8 -23.2
2026-02-14T11:35:40.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:35:40.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:35:40.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.399070
2026-02-14T11:35:40.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:35:40.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:35:40.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:35:40.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:35:40.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:35:40.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:35:15', tmtdew=10.2, humidity=50.07, cloud=0.0, wind=23.5, temperature=13.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:34:39.648', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:35:40.709 [DEBUG] [Thread-184725] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:35:40.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-14T11:35:40.810 [DEBUG] [Thread-184728] [transport.py] [_log()] starting thread (client mode): 0xa57402b0
2026-02-14T11:35:40.811 [DEBUG] [Thread-184728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:35:40.825 [DEBUG] [Thread-184728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:35:40.826 [INFO] [Thread-184728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:35:40.833 [DEBUG] [Thread-184728] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:35:40.833 [DEBUG] [Thread-184728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:35:40.833 [DEBUG] [Thread-184728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:35:40.834 [DEBUG] [Thread-184728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:35:40.834 [DEBUG] [Thread-184728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:35:40.834 [DEBUG] [Thread-184728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:35:40.834 [DEBUG] [Thread-184728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:35:40.834 [DEBUG] [Thread-184728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:35:40.834 [DEBUG] [Thread-184728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:35:40.834 [DEBUG] [Thread-184728] [transport.py] [_log()] client lang: <none>
2026-02-14T11:35:40.834 [DEBUG] [Thread-184728] [transport.py] [_log()] server lang: <none>
2026-02-14T11:35:40.834 [DEBUG] [Thread-184728] [transport.py] [_log()] kex follows: False
2026-02-14T11:35:40.834 [DEBUG] [Thread-184728] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:35:40.834 [DEBUG] [Thread-184728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:35:40.834 [DEBUG] [Thread-184728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:35:40.834 [DEBUG] [Thread-184728] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:35:40.834 [DEBUG] [Thread-184728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:35:40.834 [DEBUG] [Thread-184728] [transport.py] [_log()] Compression: none
2026-02-14T11:35:40.835 [DEBUG] [Thread-184728] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:35:40.893 [DEBUG] [Thread-184728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:35:40.894 [DEBUG] [Thread-184728] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:35:40.895 [DEBUG] [Thread-184728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:35:40.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:35:40.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:35:40.949 [DEBUG] [Thread-184728] [transport.py] [_log()] userauth is OK
2026-02-14T11:35:40.950 [DEBUG] [Thread-184728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:35:40.950 [DEBUG] [Thread-184728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:35:40.950 [DEBUG] [Thread-184728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:35:40.950 [DEBUG] [Thread-184728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:35:40.968 [INFO] [Thread-184728] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:35:40.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T11:35:40.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:35:41.769 [DEBUG] [Thread-184728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:35:41.770 [DEBUG] [Thread-184728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:35:41.817 [DEBUG] [Thread-184728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:35:41.818 [DEBUG] [Thread-184728] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:35:41.827 [DEBUG] [Thread-184728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:35:41.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:35:41.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-14T11:35:41.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-14T11:35:41.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:35:41.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:35:41.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:35:41.862 [DEBUG] [Thread-184728] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:35:46.620 [DEBUG] [Thread-184730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:36:01.669 [DEBUG] [Thread-184731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:36:11.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:36:11.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:36:11.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-14T11:36:13.950 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:36:13.952 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:36:13.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 35, 51), 10.28, 49.85, 0.0, 27.88, 13.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:36:13.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:35:51
2026-02-14T11:36:14.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:36:14.516 [DEBUG] [Thread-184732] [transport.py] [_log()] starting thread (client mode): 0xa5741d20
2026-02-14T11:36:14.516 [DEBUG] [Thread-184732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:36:14.537 [DEBUG] [Thread-184732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:36:14.537 [INFO] [Thread-184732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:36:14.540 [DEBUG] [Thread-184732] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:36:14.540 [DEBUG] [Thread-184732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:36:14.540 [DEBUG] [Thread-184732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:36:14.540 [DEBUG] [Thread-184732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:36:14.540 [DEBUG] [Thread-184732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:36:14.540 [DEBUG] [Thread-184732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:36:14.540 [DEBUG] [Thread-184732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:36:14.540 [DEBUG] [Thread-184732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:36:14.540 [DEBUG] [Thread-184732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:36:14.540 [DEBUG] [Thread-184732] [transport.py] [_log()] client lang: <none>
2026-02-14T11:36:14.540 [DEBUG] [Thread-184732] [transport.py] [_log()] server lang: <none>
2026-02-14T11:36:14.540 [DEBUG] [Thread-184732] [transport.py] [_log()] kex follows: False
2026-02-14T11:36:14.540 [DEBUG] [Thread-184732] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:36:14.540 [DEBUG] [Thread-184732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:36:14.540 [DEBUG] [Thread-184732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:36:14.540 [DEBUG] [Thread-184732] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:36:14.540 [DEBUG] [Thread-184732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:36:14.540 [DEBUG] [Thread-184732] [transport.py] [_log()] Compression: none
2026-02-14T11:36:14.540 [DEBUG] [Thread-184732] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:36:14.560 [DEBUG] [Thread-184732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:36:14.561 [DEBUG] [Thread-184732] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:36:14.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:36:14.562 [DEBUG] [Thread-184732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:36:14.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:36:14.565 [DEBUG] [Thread-184732] [transport.py] [_log()] userauth is OK
2026-02-14T11:36:14.565 [DEBUG] [Thread-184732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:36:14.565 [DEBUG] [Thread-184732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:36:14.565 [DEBUG] [Thread-184732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:36:14.565 [DEBUG] [Thread-184732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:36:14.589 [INFO] [Thread-184732] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:36:14.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:36:15.317 [DEBUG] [Thread-184732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:36:15.317 [DEBUG] [Thread-184732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:36:15.317 [DEBUG] [Thread-184732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:36:15.359 [DEBUG] [Thread-184732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:36:15.359 [DEBUG] [Thread-184732] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:36:15.363 [DEBUG] [Thread-184732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:36:15.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:36:15.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:36:15.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:36:15.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:36:15.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:36:15.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:36:15.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:36:15.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:36:15.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:36:15.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.399417 -999.00  +13.10  29.29     57   +5.00 1 1 1 1 1   888    0 7.40 -16.93 ----- 24.9 29.3 152.8 34.7 19.5 -23.4 18.2 -23.1 17.9 -23.0 18.9 -22.8
2026-02-14T11:36:15.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:36:15.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:36:15.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.399417
2026-02-14T11:36:15.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:36:15.390 [DEBUG] [Thread-184732] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:36:15.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:36:15.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:36:15.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:36:15.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:36:15.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:35:51', tmtdew=10.28, humidity=49.85, cloud=0.0, wind=27.88, temperature=13.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:35:09.629', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:36:15.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-14T11:36:15.491 [DEBUG] [Thread-184735] [transport.py] [_log()] starting thread (client mode): 0xa2dc1750
2026-02-14T11:36:15.491 [DEBUG] [Thread-184735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:36:15.506 [DEBUG] [Thread-184735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:36:15.506 [INFO] [Thread-184735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:36:15.514 [DEBUG] [Thread-184735] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:36:15.514 [DEBUG] [Thread-184735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:36:15.514 [DEBUG] [Thread-184735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:36:15.514 [DEBUG] [Thread-184735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:36:15.515 [DEBUG] [Thread-184735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:36:15.515 [DEBUG] [Thread-184735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:36:15.515 [DEBUG] [Thread-184735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:36:15.515 [DEBUG] [Thread-184735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:36:15.515 [DEBUG] [Thread-184735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:36:15.515 [DEBUG] [Thread-184735] [transport.py] [_log()] client lang: <none>
2026-02-14T11:36:15.515 [DEBUG] [Thread-184735] [transport.py] [_log()] server lang: <none>
2026-02-14T11:36:15.515 [DEBUG] [Thread-184735] [transport.py] [_log()] kex follows: False
2026-02-14T11:36:15.515 [DEBUG] [Thread-184735] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:36:15.515 [DEBUG] [Thread-184735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:36:15.515 [DEBUG] [Thread-184735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:36:15.515 [DEBUG] [Thread-184735] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:36:15.515 [DEBUG] [Thread-184735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:36:15.515 [DEBUG] [Thread-184735] [transport.py] [_log()] Compression: none
2026-02-14T11:36:15.515 [DEBUG] [Thread-184735] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:36:15.574 [DEBUG] [Thread-184735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:36:15.574 [DEBUG] [Thread-184735] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:36:15.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:36:15.576 [DEBUG] [Thread-184735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:36:15.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:36:15.634 [DEBUG] [Thread-184735] [transport.py] [_log()] userauth is OK
2026-02-14T11:36:15.634 [DEBUG] [Thread-184735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:36:15.634 [DEBUG] [Thread-184735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:36:15.634 [DEBUG] [Thread-184735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:36:15.634 [DEBUG] [Thread-184735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:36:15.653 [INFO] [Thread-184735] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:36:15.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-14T11:36:15.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:36:16.467 [DEBUG] [Thread-184735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:36:16.467 [DEBUG] [Thread-184735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:36:16.516 [DEBUG] [Thread-184735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:36:16.516 [DEBUG] [Thread-184735] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:36:16.531 [DEBUG] [Thread-184735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:36:16.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:36:16.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:36:16.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-14T11:36:16.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:36:16.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:36:16.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:36:16.570 [DEBUG] [Thread-184735] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:36:16.706 [DEBUG] [Thread-184737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:36:19.498 [DEBUG] [Thread-184738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:36:31.756 [DEBUG] [Thread-184739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:36:46.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:36:46.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:36:46.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-14T11:36:46.797 [DEBUG] [Thread-184740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:36:48.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 36, 26), 10.35, 49.7, 0.0, 28.95, 13.87, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:36:48.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:36:26
2026-02-14T11:36:49.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:36:49.560 [DEBUG] [Thread-184741] [transport.py] [_log()] starting thread (client mode): 0xa2dc3310
2026-02-14T11:36:49.560 [DEBUG] [Thread-184741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:36:49.580 [DEBUG] [Thread-184741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:36:49.580 [INFO] [Thread-184741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:36:49.583 [DEBUG] [Thread-184741] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:36:49.583 [DEBUG] [Thread-184741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:36:49.583 [DEBUG] [Thread-184741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:36:49.583 [DEBUG] [Thread-184741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:36:49.583 [DEBUG] [Thread-184741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:36:49.583 [DEBUG] [Thread-184741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:36:49.583 [DEBUG] [Thread-184741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:36:49.583 [DEBUG] [Thread-184741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:36:49.583 [DEBUG] [Thread-184741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:36:49.583 [DEBUG] [Thread-184741] [transport.py] [_log()] client lang: <none>
2026-02-14T11:36:49.583 [DEBUG] [Thread-184741] [transport.py] [_log()] server lang: <none>
2026-02-14T11:36:49.583 [DEBUG] [Thread-184741] [transport.py] [_log()] kex follows: False
2026-02-14T11:36:49.583 [DEBUG] [Thread-184741] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:36:49.583 [DEBUG] [Thread-184741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:36:49.583 [DEBUG] [Thread-184741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:36:49.584 [DEBUG] [Thread-184741] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:36:49.584 [DEBUG] [Thread-184741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:36:49.584 [DEBUG] [Thread-184741] [transport.py] [_log()] Compression: none
2026-02-14T11:36:49.584 [DEBUG] [Thread-184741] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:36:49.601 [DEBUG] [Thread-184741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:36:49.601 [DEBUG] [Thread-184741] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:36:49.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:36:49.602 [DEBUG] [Thread-184741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:36:49.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:36:49.605 [DEBUG] [Thread-184741] [transport.py] [_log()] userauth is OK
2026-02-14T11:36:49.605 [DEBUG] [Thread-184741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:36:49.605 [DEBUG] [Thread-184741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:36:49.605 [DEBUG] [Thread-184741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:36:49.605 [DEBUG] [Thread-184741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:36:49.632 [INFO] [Thread-184741] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:36:49.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:36:50.214 [DEBUG] [Thread-184741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:36:50.214 [DEBUG] [Thread-184741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:36:50.215 [DEBUG] [Thread-184741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:36:50.255 [DEBUG] [Thread-184741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:36:50.255 [DEBUG] [Thread-184741] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:36:50.257 [DEBUG] [Thread-184741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:36:50.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:36:50.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:36:50.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:36:50.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:36:50.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:36:50.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:36:50.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:36:50.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:36:50.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:36:50.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.400111 -999.00  +13.10  26.42     58   +5.00 1 1 1 1 1   888    0 7.55 -11.30 ----- 21.4 26.4 152.0 35.0 19.6 -25.2 18.2 -26.3 17.9 -23.7 18.9 -24.4
2026-02-14T11:36:50.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:36:50.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:36:50.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.400111
2026-02-14T11:36:50.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:36:50.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:36:50.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:36:50.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:36:50.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:36:50.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:36:26', tmtdew=10.35, humidity=49.7, cloud=0.0, wind=28.95, temperature=13.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:36:09.590', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:36:50.275 [DEBUG] [Thread-184741] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:36:50.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-14T11:36:50.359 [DEBUG] [Thread-184744] [transport.py] [_log()] starting thread (client mode): 0xa57c3a00
2026-02-14T11:36:50.360 [DEBUG] [Thread-184744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:36:50.375 [DEBUG] [Thread-184744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:36:50.375 [INFO] [Thread-184744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:36:50.382 [DEBUG] [Thread-184744] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:36:50.382 [DEBUG] [Thread-184744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:36:50.382 [DEBUG] [Thread-184744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:36:50.383 [DEBUG] [Thread-184744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:36:50.383 [DEBUG] [Thread-184744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:36:50.383 [DEBUG] [Thread-184744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:36:50.383 [DEBUG] [Thread-184744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:36:50.383 [DEBUG] [Thread-184744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:36:50.383 [DEBUG] [Thread-184744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:36:50.383 [DEBUG] [Thread-184744] [transport.py] [_log()] client lang: <none>
2026-02-14T11:36:50.383 [DEBUG] [Thread-184744] [transport.py] [_log()] server lang: <none>
2026-02-14T11:36:50.383 [DEBUG] [Thread-184744] [transport.py] [_log()] kex follows: False
2026-02-14T11:36:50.383 [DEBUG] [Thread-184744] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:36:50.383 [DEBUG] [Thread-184744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:36:50.383 [DEBUG] [Thread-184744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:36:50.383 [DEBUG] [Thread-184744] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:36:50.383 [DEBUG] [Thread-184744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:36:50.383 [DEBUG] [Thread-184744] [transport.py] [_log()] Compression: none
2026-02-14T11:36:50.383 [DEBUG] [Thread-184744] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:36:50.440 [DEBUG] [Thread-184744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:36:50.441 [DEBUG] [Thread-184744] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:36:50.441 [DEBUG] [Thread-184744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:36:50.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:36:50.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:36:50.500 [DEBUG] [Thread-184744] [transport.py] [_log()] userauth is OK
2026-02-14T11:36:50.500 [DEBUG] [Thread-184744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:36:50.500 [DEBUG] [Thread-184744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:36:50.500 [DEBUG] [Thread-184744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:36:50.500 [DEBUG] [Thread-184744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:36:50.519 [INFO] [Thread-184744] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:36:50.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-14T11:36:50.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:36:51.402 [DEBUG] [Thread-184744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:36:51.403 [DEBUG] [Thread-184744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:36:51.450 [DEBUG] [Thread-184744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:36:51.451 [DEBUG] [Thread-184744] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:36:51.460 [DEBUG] [Thread-184744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:36:51.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:36:51.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:36:51.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:36:51.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:36:51.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:36:51.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:36:51.497 [DEBUG] [Thread-184744] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:37:01.836 [DEBUG] [Thread-184746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:37:14.096 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:37:14.097 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:37:16.895 [DEBUG] [Thread-184747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:37:19.534 [DEBUG] [Thread-184748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:37:21.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:37:21.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:37:21.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-14T11:37:23.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 37, 1), 10.07, 50.64, 0.0, 27.83, 13.67, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:37:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:37:01
2026-02-14T11:37:23.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:37:24.017 [DEBUG] [Thread-184749] [transport.py] [_log()] starting thread (client mode): 0xa2d3dab0
2026-02-14T11:37:24.017 [DEBUG] [Thread-184749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:37:24.036 [DEBUG] [Thread-184749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:37:24.037 [INFO] [Thread-184749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:37:24.040 [DEBUG] [Thread-184749] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:37:24.040 [DEBUG] [Thread-184749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:37:24.040 [DEBUG] [Thread-184749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:37:24.040 [DEBUG] [Thread-184749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:37:24.040 [DEBUG] [Thread-184749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:37:24.040 [DEBUG] [Thread-184749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:37:24.040 [DEBUG] [Thread-184749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:37:24.040 [DEBUG] [Thread-184749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:37:24.040 [DEBUG] [Thread-184749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:37:24.040 [DEBUG] [Thread-184749] [transport.py] [_log()] client lang: <none>
2026-02-14T11:37:24.040 [DEBUG] [Thread-184749] [transport.py] [_log()] server lang: <none>
2026-02-14T11:37:24.040 [DEBUG] [Thread-184749] [transport.py] [_log()] kex follows: False
2026-02-14T11:37:24.040 [DEBUG] [Thread-184749] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:37:24.040 [DEBUG] [Thread-184749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:37:24.040 [DEBUG] [Thread-184749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:37:24.040 [DEBUG] [Thread-184749] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:37:24.040 [DEBUG] [Thread-184749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:37:24.040 [DEBUG] [Thread-184749] [transport.py] [_log()] Compression: none
2026-02-14T11:37:24.040 [DEBUG] [Thread-184749] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:37:24.057 [DEBUG] [Thread-184749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:37:24.057 [DEBUG] [Thread-184749] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:37:24.057 [DEBUG] [Thread-184749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:37:24.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:37:24.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:37:24.059 [DEBUG] [Thread-184749] [transport.py] [_log()] userauth is OK
2026-02-14T11:37:24.059 [DEBUG] [Thread-184749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:37:24.059 [DEBUG] [Thread-184749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:37:24.059 [DEBUG] [Thread-184749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:37:24.059 [DEBUG] [Thread-184749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:37:24.085 [INFO] [Thread-184749] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:37:24.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:37:24.644 [DEBUG] [Thread-184749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:37:24.645 [DEBUG] [Thread-184749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:37:24.645 [DEBUG] [Thread-184749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:37:24.686 [DEBUG] [Thread-184749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:37:24.686 [DEBUG] [Thread-184749] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:37:24.688 [DEBUG] [Thread-184749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:37:24.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:37:24.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:37:24.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:37:24.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:37:24.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:37:24.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:37:24.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:37:24.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:37:24.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:37:24.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.400806 -999.00  +12.90  24.34     59   +5.10 1 1 1 1 1   888    0 7.53 -11.99 ----- 27.0 24.3 164.0 33.2 19.6 -24.3 18.4 -25.5 17.9 -25.0 19.0 -23.7
2026-02-14T11:37:24.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:37:24.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:37:24.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.400806
2026-02-14T11:37:24.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:37:24.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:37:24.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:37:24.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:37:24.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:37:24.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:37:01', tmtdew=10.07, humidity=50.64, cloud=0.0, wind=27.83, temperature=13.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:37:09.638', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:37:24.709 [DEBUG] [Thread-184749] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:37:24.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-14T11:37:24.802 [DEBUG] [Thread-184752] [transport.py] [_log()] starting thread (client mode): 0xa2d3f370
2026-02-14T11:37:24.803 [DEBUG] [Thread-184752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:37:24.817 [DEBUG] [Thread-184752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:37:24.817 [INFO] [Thread-184752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:37:24.825 [DEBUG] [Thread-184752] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:37:24.825 [DEBUG] [Thread-184752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:37:24.825 [DEBUG] [Thread-184752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:37:24.825 [DEBUG] [Thread-184752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:37:24.826 [DEBUG] [Thread-184752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:37:24.826 [DEBUG] [Thread-184752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:37:24.826 [DEBUG] [Thread-184752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:37:24.826 [DEBUG] [Thread-184752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:37:24.826 [DEBUG] [Thread-184752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:37:24.826 [DEBUG] [Thread-184752] [transport.py] [_log()] client lang: <none>
2026-02-14T11:37:24.826 [DEBUG] [Thread-184752] [transport.py] [_log()] server lang: <none>
2026-02-14T11:37:24.826 [DEBUG] [Thread-184752] [transport.py] [_log()] kex follows: False
2026-02-14T11:37:24.826 [DEBUG] [Thread-184752] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:37:24.826 [DEBUG] [Thread-184752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:37:24.826 [DEBUG] [Thread-184752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:37:24.826 [DEBUG] [Thread-184752] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:37:24.826 [DEBUG] [Thread-184752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:37:24.826 [DEBUG] [Thread-184752] [transport.py] [_log()] Compression: none
2026-02-14T11:37:24.826 [DEBUG] [Thread-184752] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:37:24.885 [DEBUG] [Thread-184752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:37:24.885 [DEBUG] [Thread-184752] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:37:24.886 [DEBUG] [Thread-184752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:37:24.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:37:24.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:37:24.944 [DEBUG] [Thread-184752] [transport.py] [_log()] userauth is OK
2026-02-14T11:37:24.944 [DEBUG] [Thread-184752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:37:24.944 [DEBUG] [Thread-184752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:37:24.944 [DEBUG] [Thread-184752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:37:24.944 [DEBUG] [Thread-184752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:37:24.963 [INFO] [Thread-184752] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:37: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-14T11:37:24.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:37:25.811 [DEBUG] [Thread-184752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:37:25.811 [DEBUG] [Thread-184752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:37:25.860 [DEBUG] [Thread-184752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:37:25.860 [DEBUG] [Thread-184752] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:37:25.869 [DEBUG] [Thread-184752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:37:25.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:37:25.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:37:25.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-14T11:37:25.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:37:25.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:37:25.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:37:25.906 [DEBUG] [Thread-184752] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:37:31.932 [DEBUG] [Thread-184754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:37:46.984 [DEBUG] [Thread-184755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:37:55.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:37:55.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:37:55.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-14T11:37:58.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 37, 37), 10.81, 48.14, 0.0, 36.1, 14.25, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:37:58.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:37:37
2026-02-14T11:37:58.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:37:58.676 [DEBUG] [Thread-184756] [transport.py] [_log()] starting thread (client mode): 0xa2d3f910
2026-02-14T11:37:58.676 [DEBUG] [Thread-184756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:37:58.691 [DEBUG] [Thread-184756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:37:58.691 [INFO] [Thread-184756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:37:58.693 [DEBUG] [Thread-184756] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:37:58.693 [DEBUG] [Thread-184756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:37:58.693 [DEBUG] [Thread-184756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:37:58.693 [DEBUG] [Thread-184756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:37:58.693 [DEBUG] [Thread-184756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:37:58.693 [DEBUG] [Thread-184756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:37:58.693 [DEBUG] [Thread-184756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:37:58.693 [DEBUG] [Thread-184756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:37:58.693 [DEBUG] [Thread-184756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:37:58.693 [DEBUG] [Thread-184756] [transport.py] [_log()] client lang: <none>
2026-02-14T11:37:58.693 [DEBUG] [Thread-184756] [transport.py] [_log()] server lang: <none>
2026-02-14T11:37:58.693 [DEBUG] [Thread-184756] [transport.py] [_log()] kex follows: False
2026-02-14T11:37:58.693 [DEBUG] [Thread-184756] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:37:58.693 [DEBUG] [Thread-184756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:37:58.693 [DEBUG] [Thread-184756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:37:58.693 [DEBUG] [Thread-184756] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:37:58.693 [DEBUG] [Thread-184756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:37:58.693 [DEBUG] [Thread-184756] [transport.py] [_log()] Compression: none
2026-02-14T11:37:58.693 [DEBUG] [Thread-184756] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:37:58.705 [DEBUG] [Thread-184756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:37:58.706 [DEBUG] [Thread-184756] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:37:58.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:37:58.707 [DEBUG] [Thread-184756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:37:58.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:37:58.709 [DEBUG] [Thread-184756] [transport.py] [_log()] userauth is OK
2026-02-14T11:37:58.709 [DEBUG] [Thread-184756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:37:58.709 [DEBUG] [Thread-184756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:37:58.710 [DEBUG] [Thread-184756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:37:58.710 [DEBUG] [Thread-184756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:37:58.732 [INFO] [Thread-184756] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:37:58.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:37:59.322 [DEBUG] [Thread-184756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:37:59.322 [DEBUG] [Thread-184756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:37:59.322 [DEBUG] [Thread-184756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:37:59.363 [DEBUG] [Thread-184756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:37:59.363 [DEBUG] [Thread-184756] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:37:59.366 [DEBUG] [Thread-184756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:37:59.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:37:59.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:37:59.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:37:59.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:37:59.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:37:59.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:37:59.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:37:59.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:37:59.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:37:59.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.401153 -999.00  +13.10  31.31     58   +5.00 1 1 2 1 1   888    0 7.63 -12.14 ----- 28.1 31.3 182.4 37.8 19.4 -25.7 18.0 -26.3 17.7 -24.4 18.8 -25.2
2026-02-14T11:37:59.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:37:59.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:37:59.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.401153
2026-02-14T11:37:59.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:37:59.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:37:59.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:37:59.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:37:59.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:37:59.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:37:37', tmtdew=10.81, humidity=48.14, cloud=0.0, wind=36.1, temperature=14.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:37:39.619', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:37:59.391 [DEBUG] [Thread-184756] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:37:59.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-14T11:37:59.488 [DEBUG] [Thread-184759] [transport.py] [_log()] starting thread (client mode): 0xa2db53f0
2026-02-14T11:37:59.488 [DEBUG] [Thread-184759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:37:59.503 [DEBUG] [Thread-184759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:37:59.503 [INFO] [Thread-184759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:37:59.511 [DEBUG] [Thread-184759] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:37:59.511 [DEBUG] [Thread-184759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:37:59.511 [DEBUG] [Thread-184759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:37:59.511 [DEBUG] [Thread-184759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:37:59.511 [DEBUG] [Thread-184759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:37:59.511 [DEBUG] [Thread-184759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:37:59.511 [DEBUG] [Thread-184759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:37:59.511 [DEBUG] [Thread-184759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:37:59.511 [DEBUG] [Thread-184759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:37:59.511 [DEBUG] [Thread-184759] [transport.py] [_log()] client lang: <none>
2026-02-14T11:37:59.511 [DEBUG] [Thread-184759] [transport.py] [_log()] server lang: <none>
2026-02-14T11:37:59.511 [DEBUG] [Thread-184759] [transport.py] [_log()] kex follows: False
2026-02-14T11:37:59.512 [DEBUG] [Thread-184759] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:37:59.512 [DEBUG] [Thread-184759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:37:59.512 [DEBUG] [Thread-184759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:37:59.512 [DEBUG] [Thread-184759] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:37:59.512 [DEBUG] [Thread-184759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:37:59.512 [DEBUG] [Thread-184759] [transport.py] [_log()] Compression: none
2026-02-14T11:37:59.512 [DEBUG] [Thread-184759] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:37:59.568 [DEBUG] [Thread-184759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:37:59.569 [DEBUG] [Thread-184759] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:37:59.570 [DEBUG] [Thread-184759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:37:59.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:37:59.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:37:59.625 [DEBUG] [Thread-184759] [transport.py] [_log()] userauth is OK
2026-02-14T11:37:59.625 [DEBUG] [Thread-184759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:37:59.626 [DEBUG] [Thread-184759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:37:59.626 [DEBUG] [Thread-184759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:37:59.626 [DEBUG] [Thread-184759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:37:59.647 [INFO] [Thread-184759] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:37:59.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-14T11:37:59.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:38:00.460 [DEBUG] [Thread-184759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:38:00.460 [DEBUG] [Thread-184759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:38:00.509 [DEBUG] [Thread-184759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:38:00.509 [DEBUG] [Thread-184759] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:38:00.519 [DEBUG] [Thread-184759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:38:00.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:38:00.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-14T11:38:00.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:38:00.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:38:00.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:38:00.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:38:00.558 [DEBUG] [Thread-184759] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:38:02.019 [DEBUG] [Thread-184761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:38:14.238 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:38:14.239 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:38:17.069 [DEBUG] [Thread-184762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:38:19.567 [DEBUG] [Thread-184763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:38:30.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:38:30.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:38:30.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-14T11:38:32.101 [DEBUG] [Thread-184764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:38:32.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 38, 12), 9.33, 53.13, 0.0, 33.54, 12.81, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:38:32.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:38:12
2026-02-14T11:38:32.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:38:32.969 [DEBUG] [Thread-184765] [transport.py] [_log()] starting thread (client mode): 0xa2db7580
2026-02-14T11:38:32.969 [DEBUG] [Thread-184765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:38:32.989 [DEBUG] [Thread-184765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:38:32.989 [INFO] [Thread-184765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:38:32.991 [DEBUG] [Thread-184765] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:38:32.991 [DEBUG] [Thread-184765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:38:32.991 [DEBUG] [Thread-184765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:38:32.991 [DEBUG] [Thread-184765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:38:32.991 [DEBUG] [Thread-184765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:38:32.991 [DEBUG] [Thread-184765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:38:32.991 [DEBUG] [Thread-184765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:38:32.991 [DEBUG] [Thread-184765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:38:32.991 [DEBUG] [Thread-184765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:38:32.991 [DEBUG] [Thread-184765] [transport.py] [_log()] client lang: <none>
2026-02-14T11:38:32.991 [DEBUG] [Thread-184765] [transport.py] [_log()] server lang: <none>
2026-02-14T11:38:32.991 [DEBUG] [Thread-184765] [transport.py] [_log()] kex follows: False
2026-02-14T11:38:32.991 [DEBUG] [Thread-184765] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:38:32.991 [DEBUG] [Thread-184765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:38:32.991 [DEBUG] [Thread-184765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:38:32.991 [DEBUG] [Thread-184765] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:38:32.991 [DEBUG] [Thread-184765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:38:32.991 [DEBUG] [Thread-184765] [transport.py] [_log()] Compression: none
2026-02-14T11:38:32.991 [DEBUG] [Thread-184765] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:38:33.012 [DEBUG] [Thread-184765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:38:33.013 [DEBUG] [Thread-184765] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:38:33.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:38:33.013 [DEBUG] [Thread-184765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:38:33.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:38:33.015 [DEBUG] [Thread-184765] [transport.py] [_log()] userauth is OK
2026-02-14T11:38:33.015 [DEBUG] [Thread-184765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:38:33.015 [DEBUG] [Thread-184765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:38:33.015 [DEBUG] [Thread-184765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:38:33.015 [DEBUG] [Thread-184765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:38:33.033 [INFO] [Thread-184765] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:38:33.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:38:33.585 [DEBUG] [Thread-184765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:38:33.586 [DEBUG] [Thread-184765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:38:33.586 [DEBUG] [Thread-184765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:38:33.626 [DEBUG] [Thread-184765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:38:33.626 [DEBUG] [Thread-184765] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:38:33.630 [DEBUG] [Thread-184765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:38:33.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:38:33.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:38:33.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:38:33.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:38:33.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:38:33.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:38:33.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:38:33.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:38:33.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:38:33.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.401500 -999.00  +12.80  24.58     58   +5.00 1 1 1 1 1   888    0 7.58 -11.28 ----- 24.7 24.6 195.8 34.2 19.3 -23.9 17.9 -25.2 17.7 -21.7 18.6 -23.1
2026-02-14T11:38:33.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:38:33.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:38:33.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.401500
2026-02-14T11:38:33.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:38:33.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:38:33.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:38:33.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:38:33.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:38:33.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:38:12', tmtdew=9.33, humidity=53.13, cloud=0.0, wind=33.54, temperature=12.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:38:09.600', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:38:33.652 [DEBUG] [Thread-184765] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:38:33.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-14T11:38:33.751 [DEBUG] [Thread-184768] [transport.py] [_log()] starting thread (client mode): 0xa2d3c340
2026-02-14T11:38:33.751 [DEBUG] [Thread-184768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:38:33.765 [DEBUG] [Thread-184768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:38:33.765 [INFO] [Thread-184768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:38:33.773 [DEBUG] [Thread-184768] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:38:33.773 [DEBUG] [Thread-184768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:38:33.773 [DEBUG] [Thread-184768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:38:33.774 [DEBUG] [Thread-184768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:38:33.774 [DEBUG] [Thread-184768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:38:33.774 [DEBUG] [Thread-184768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:38:33.774 [DEBUG] [Thread-184768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:38:33.774 [DEBUG] [Thread-184768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:38:33.774 [DEBUG] [Thread-184768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:38:33.774 [DEBUG] [Thread-184768] [transport.py] [_log()] client lang: <none>
2026-02-14T11:38:33.774 [DEBUG] [Thread-184768] [transport.py] [_log()] server lang: <none>
2026-02-14T11:38:33.774 [DEBUG] [Thread-184768] [transport.py] [_log()] kex follows: False
2026-02-14T11:38:33.774 [DEBUG] [Thread-184768] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:38:33.774 [DEBUG] [Thread-184768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:38:33.774 [DEBUG] [Thread-184768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:38:33.774 [DEBUG] [Thread-184768] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:38:33.774 [DEBUG] [Thread-184768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:38:33.774 [DEBUG] [Thread-184768] [transport.py] [_log()] Compression: none
2026-02-14T11:38:33.774 [DEBUG] [Thread-184768] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:38:33.831 [DEBUG] [Thread-184768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:38:33.832 [DEBUG] [Thread-184768] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:38:33.832 [DEBUG] [Thread-184768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:38:33.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:38:33.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:38:33.888 [DEBUG] [Thread-184768] [transport.py] [_log()] userauth is OK
2026-02-14T11:38:33.888 [DEBUG] [Thread-184768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:38:33.888 [DEBUG] [Thread-184768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:38:33.888 [DEBUG] [Thread-184768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:38:33.888 [DEBUG] [Thread-184768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:38:33.910 [INFO] [Thread-184768] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:38:33.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-14T11:38:33.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:38:34.719 [DEBUG] [Thread-184768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:38:34.719 [DEBUG] [Thread-184768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:38:34.767 [DEBUG] [Thread-184768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:38:34.767 [DEBUG] [Thread-184768] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:38:34.776 [DEBUG] [Thread-184768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:38:34.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:38:34.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-14T11:38:34.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-14T11:38:34.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:38:34.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:38:34.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:38:34.810 [DEBUG] [Thread-184768] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:38:47.135 [DEBUG] [Thread-184770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:39:02.189 [DEBUG] [Thread-184771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:39:04.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:39:04.824 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:39:04.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T11:39:06.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 38, 47), 8.85, 54.93, 0.0, 27.91, 12.57, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:39:06.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:38:47
2026-02-14T11:39:07.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:39:07.189 [DEBUG] [Thread-184772] [transport.py] [_log()] starting thread (client mode): 0xa57c3d60
2026-02-14T11:39:07.189 [DEBUG] [Thread-184772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:39:07.199 [DEBUG] [Thread-184772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:39:07.200 [INFO] [Thread-184772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:39:07.203 [DEBUG] [Thread-184772] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:39:07.203 [DEBUG] [Thread-184772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:39:07.203 [DEBUG] [Thread-184772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:39:07.203 [DEBUG] [Thread-184772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:39:07.203 [DEBUG] [Thread-184772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:39:07.203 [DEBUG] [Thread-184772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:39:07.203 [DEBUG] [Thread-184772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:39:07.203 [DEBUG] [Thread-184772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:39:07.203 [DEBUG] [Thread-184772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:39:07.203 [DEBUG] [Thread-184772] [transport.py] [_log()] client lang: <none>
2026-02-14T11:39:07.203 [DEBUG] [Thread-184772] [transport.py] [_log()] server lang: <none>
2026-02-14T11:39:07.203 [DEBUG] [Thread-184772] [transport.py] [_log()] kex follows: False
2026-02-14T11:39:07.203 [DEBUG] [Thread-184772] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:39:07.203 [DEBUG] [Thread-184772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:39:07.203 [DEBUG] [Thread-184772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:39:07.203 [DEBUG] [Thread-184772] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:39:07.203 [DEBUG] [Thread-184772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:39:07.203 [DEBUG] [Thread-184772] [transport.py] [_log()] Compression: none
2026-02-14T11:39:07.203 [DEBUG] [Thread-184772] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:39:07.216 [DEBUG] [Thread-184772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:39:07.216 [DEBUG] [Thread-184772] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:39:07.217 [DEBUG] [Thread-184772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:39:07.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:39:07.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:39:07.218 [DEBUG] [Thread-184772] [transport.py] [_log()] userauth is OK
2026-02-14T11:39:07.218 [DEBUG] [Thread-184772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:39:07.218 [DEBUG] [Thread-184772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:39:07.218 [DEBUG] [Thread-184772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:39:07.218 [DEBUG] [Thread-184772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:39:07.240 [INFO] [Thread-184772] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:39:07.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:39:07.848 [DEBUG] [Thread-184772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:39:07.848 [DEBUG] [Thread-184772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:39:07.849 [DEBUG] [Thread-184772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:39:07.889 [DEBUG] [Thread-184772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:39:07.889 [DEBUG] [Thread-184772] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:39:07.894 [DEBUG] [Thread-184772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:39:07.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:39:07.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:39:07.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:39:07.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:39:07.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:39:07.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:39:07.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:39:07.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:39:07.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:39:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.401848 -999.00  +12.50  17.37     59   +4.90 1 1 1 1 1   888    0 7.64 -11.91 ----- 23.6 17.4 173.4 37.3 19.2 -25.7 17.9 -24.6 17.7 -23.3 18.5 -25.2
2026-02-14T11:39:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:39:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:39:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.401848
2026-02-14T11:39:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:39:07.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:39:07.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:39:07.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:39:07.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:39:07.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:38:47', tmtdew=8.85, humidity=54.93, cloud=0.0, wind=27.91, temperature=12.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:38:39.667', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:39:07.919 [DEBUG] [Thread-184772] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:39:08.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-14T11:39:08.014 [DEBUG] [Thread-184775] [transport.py] [_log()] starting thread (client mode): 0xa57c0160
2026-02-14T11:39:08.014 [DEBUG] [Thread-184775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:39:08.029 [DEBUG] [Thread-184775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:39:08.029 [INFO] [Thread-184775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:39:08.036 [DEBUG] [Thread-184775] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:39:08.037 [DEBUG] [Thread-184775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:39:08.037 [DEBUG] [Thread-184775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:39:08.037 [DEBUG] [Thread-184775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:39:08.037 [DEBUG] [Thread-184775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:39:08.037 [DEBUG] [Thread-184775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:39:08.037 [DEBUG] [Thread-184775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:39:08.038 [DEBUG] [Thread-184775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:39:08.038 [DEBUG] [Thread-184775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:39:08.038 [DEBUG] [Thread-184775] [transport.py] [_log()] client lang: <none>
2026-02-14T11:39:08.038 [DEBUG] [Thread-184775] [transport.py] [_log()] server lang: <none>
2026-02-14T11:39:08.038 [DEBUG] [Thread-184775] [transport.py] [_log()] kex follows: False
2026-02-14T11:39:08.038 [DEBUG] [Thread-184775] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:39:08.038 [DEBUG] [Thread-184775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:39:08.039 [DEBUG] [Thread-184775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:39:08.039 [DEBUG] [Thread-184775] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:39:08.039 [DEBUG] [Thread-184775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:39:08.039 [DEBUG] [Thread-184775] [transport.py] [_log()] Compression: none
2026-02-14T11:39:08.039 [DEBUG] [Thread-184775] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:39:08.096 [DEBUG] [Thread-184775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:39:08.096 [DEBUG] [Thread-184775] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:39:08.097 [DEBUG] [Thread-184775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:39:08.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:39:08.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:39:08.156 [DEBUG] [Thread-184775] [transport.py] [_log()] userauth is OK
2026-02-14T11:39:08.156 [DEBUG] [Thread-184775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:39:08.157 [DEBUG] [Thread-184775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:39:08.157 [DEBUG] [Thread-184775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:39:08.157 [DEBUG] [Thread-184775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:39:08.180 [INFO] [Thread-184775] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:39:08.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-14T11:39:08.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:39:08.969 [DEBUG] [Thread-184775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:39:08.970 [DEBUG] [Thread-184775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:39:09.017 [DEBUG] [Thread-184775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:39:09.017 [DEBUG] [Thread-184775] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:39:09.027 [DEBUG] [Thread-184775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:39:09.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:39:09.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-14T11:39:09.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-14T11:39:09.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:39:09.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:39:09.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:39:09.064 [DEBUG] [Thread-184775] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:39:14.381 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:39:14.382 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:39:17.227 [DEBUG] [Thread-184777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:39:19.598 [DEBUG] [Thread-184778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:39:32.281 [DEBUG] [Thread-184779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:39:39.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:39:39.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:39:39.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-14T11:39:40.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 39, 23), 9.17, 53.88, 0.0, 28.41, 12.84, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:39:40.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:39:23
2026-02-14T11:39:41.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:39:41.469 [DEBUG] [Thread-184780] [transport.py] [_log()] starting thread (client mode): 0xa2d3eda0
2026-02-14T11:39:41.469 [DEBUG] [Thread-184780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:39:41.489 [DEBUG] [Thread-184780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:39:41.490 [INFO] [Thread-184780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:39:41.491 [DEBUG] [Thread-184780] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:39:41.491 [DEBUG] [Thread-184780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:39:41.491 [DEBUG] [Thread-184780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:39:41.491 [DEBUG] [Thread-184780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:39:41.491 [DEBUG] [Thread-184780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:39:41.491 [DEBUG] [Thread-184780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:39:41.491 [DEBUG] [Thread-184780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:39:41.491 [DEBUG] [Thread-184780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:39:41.491 [DEBUG] [Thread-184780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:39:41.491 [DEBUG] [Thread-184780] [transport.py] [_log()] client lang: <none>
2026-02-14T11:39:41.491 [DEBUG] [Thread-184780] [transport.py] [_log()] server lang: <none>
2026-02-14T11:39:41.491 [DEBUG] [Thread-184780] [transport.py] [_log()] kex follows: False
2026-02-14T11:39:41.491 [DEBUG] [Thread-184780] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:39:41.491 [DEBUG] [Thread-184780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:39:41.491 [DEBUG] [Thread-184780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:39:41.491 [DEBUG] [Thread-184780] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:39:41.491 [DEBUG] [Thread-184780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:39:41.491 [DEBUG] [Thread-184780] [transport.py] [_log()] Compression: none
2026-02-14T11:39:41.491 [DEBUG] [Thread-184780] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:39:41.499 [DEBUG] [Thread-184780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:39:41.499 [DEBUG] [Thread-184780] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:39:41.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:39:41.499 [DEBUG] [Thread-184780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:39:41.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:39:41.500 [DEBUG] [Thread-184780] [transport.py] [_log()] userauth is OK
2026-02-14T11:39:41.500 [DEBUG] [Thread-184780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:39:41.500 [DEBUG] [Thread-184780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:39:41.500 [DEBUG] [Thread-184780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:39:41.500 [DEBUG] [Thread-184780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:39:41.513 [INFO] [Thread-184780] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:39:41.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:39:42.077 [DEBUG] [Thread-184780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:39:42.077 [DEBUG] [Thread-184780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:39:42.078 [DEBUG] [Thread-184780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:39:42.118 [DEBUG] [Thread-184780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:39:42.118 [DEBUG] [Thread-184780] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:39:42.121 [DEBUG] [Thread-184780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:39:42.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:39:42.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:39:42.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:39:42.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:39:42.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:39:42.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:39:42.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:39:42.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:39:42.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:39:42.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.402195 -999.00  +12.70  11.24     60   +5.10 1 2 1 1 1   888    0 7.56 -13.68 ----- 15.0 11.2 172.8 29.7 19.3 -24.8 17.8 -21.7 17.7 -20.6 18.7 -23.8
2026-02-14T11:39:42.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:39:42.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:39:42.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.402195
2026-02-14T11:39:42.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:39:42.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:39:42.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:39:42.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:39:42.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:39:42.155 [DEBUG] [Thread-184780] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:39:42.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:39:23', tmtdew=9.17, humidity=53.88, cloud=0.0, wind=28.41, temperature=12.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:39:09.648', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:39:42.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-14T11:39:42.248 [DEBUG] [Thread-184783] [transport.py] [_log()] starting thread (client mode): 0xa57c2a40
2026-02-14T11:39:42.248 [DEBUG] [Thread-184783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:39:42.263 [DEBUG] [Thread-184783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:39:42.263 [INFO] [Thread-184783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:39:42.271 [DEBUG] [Thread-184783] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:39:42.271 [DEBUG] [Thread-184783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:39:42.271 [DEBUG] [Thread-184783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:39:42.271 [DEBUG] [Thread-184783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:39:42.271 [DEBUG] [Thread-184783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:39:42.271 [DEBUG] [Thread-184783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:39:42.272 [DEBUG] [Thread-184783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:39:42.272 [DEBUG] [Thread-184783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:39:42.272 [DEBUG] [Thread-184783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:39:42.272 [DEBUG] [Thread-184783] [transport.py] [_log()] client lang: <none>
2026-02-14T11:39:42.272 [DEBUG] [Thread-184783] [transport.py] [_log()] server lang: <none>
2026-02-14T11:39:42.272 [DEBUG] [Thread-184783] [transport.py] [_log()] kex follows: False
2026-02-14T11:39:42.272 [DEBUG] [Thread-184783] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:39:42.272 [DEBUG] [Thread-184783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:39:42.272 [DEBUG] [Thread-184783] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:39:42.273 [DEBUG] [Thread-184783] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:39:42.273 [DEBUG] [Thread-184783] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:39:42.273 [DEBUG] [Thread-184783] [transport.py] [_log()] Compression: none
2026-02-14T11:39:42.273 [DEBUG] [Thread-184783] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:39:42.328 [DEBUG] [Thread-184783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:39:42.329 [DEBUG] [Thread-184783] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:39:42.329 [DEBUG] [Thread-184783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:39:42.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:39:42.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:39:42.384 [DEBUG] [Thread-184783] [transport.py] [_log()] userauth is OK
2026-02-14T11:39:42.385 [DEBUG] [Thread-184783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:39:42.385 [DEBUG] [Thread-184783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:39:42.385 [DEBUG] [Thread-184783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:39:42.385 [DEBUG] [Thread-184783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:39:42.404 [INFO] [Thread-184783] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:39:42.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-14T11:39:42.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:39:43.204 [DEBUG] [Thread-184783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:39:43.204 [DEBUG] [Thread-184783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:39:43.256 [DEBUG] [Thread-184783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:39:43.256 [DEBUG] [Thread-184783] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:39:43.264 [DEBUG] [Thread-184783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:39:43.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:39:43.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:39:43.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-14T11:39:43.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:39:43.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:39:43.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:39:43.297 [DEBUG] [Thread-184783] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:39:47.321 [DEBUG] [Thread-184785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:40:02.372 [DEBUG] [Thread-184786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:40:13.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:40:13.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:40:13.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-14T11:40:14.524 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:40:14.525 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:40:15.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 39, 59), 9.14, 53.93, 0.0, 24.91, 12.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:40:15.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:39:59
2026-02-14T11:40:15.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:40:15.833 [DEBUG] [Thread-184787] [transport.py] [_log()] starting thread (client mode): 0xa2dc2dd0
2026-02-14T11:40:15.833 [DEBUG] [Thread-184787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:40:15.853 [DEBUG] [Thread-184787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:40:15.853 [INFO] [Thread-184787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:40:15.856 [DEBUG] [Thread-184787] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:40:15.856 [DEBUG] [Thread-184787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:40:15.856 [DEBUG] [Thread-184787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:40:15.856 [DEBUG] [Thread-184787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:40:15.856 [DEBUG] [Thread-184787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:40:15.856 [DEBUG] [Thread-184787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:40:15.856 [DEBUG] [Thread-184787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:40:15.856 [DEBUG] [Thread-184787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:40:15.856 [DEBUG] [Thread-184787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:40:15.856 [DEBUG] [Thread-184787] [transport.py] [_log()] client lang: <none>
2026-02-14T11:40:15.856 [DEBUG] [Thread-184787] [transport.py] [_log()] server lang: <none>
2026-02-14T11:40:15.856 [DEBUG] [Thread-184787] [transport.py] [_log()] kex follows: False
2026-02-14T11:40:15.856 [DEBUG] [Thread-184787] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:40:15.856 [DEBUG] [Thread-184787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:40:15.857 [DEBUG] [Thread-184787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:40:15.857 [DEBUG] [Thread-184787] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:40:15.857 [DEBUG] [Thread-184787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:40:15.857 [DEBUG] [Thread-184787] [transport.py] [_log()] Compression: none
2026-02-14T11:40:15.857 [DEBUG] [Thread-184787] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:40:15.873 [DEBUG] [Thread-184787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:40:15.874 [DEBUG] [Thread-184787] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:40:15.874 [DEBUG] [Thread-184787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:40:15.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:40:15.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:40:15.876 [DEBUG] [Thread-184787] [transport.py] [_log()] userauth is OK
2026-02-14T11:40:15.876 [DEBUG] [Thread-184787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:40:15.876 [DEBUG] [Thread-184787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:40:15.876 [DEBUG] [Thread-184787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:40:15.876 [DEBUG] [Thread-184787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:40:15.891 [INFO] [Thread-184787] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:40:15.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:40:16.466 [DEBUG] [Thread-184787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:40:16.467 [DEBUG] [Thread-184787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:40:16.467 [DEBUG] [Thread-184787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:40:16.508 [DEBUG] [Thread-184787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:40:16.508 [DEBUG] [Thread-184787] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:40:16.510 [DEBUG] [Thread-184787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:40:16.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:40:16.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:40:16.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:40:16.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:40:16.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:40:16.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:40:16.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:40:16.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:40:16.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:40:16.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.402889 -999.00  +13.80  27.46     56   +5.30 1 2 1 1 1   888    0 7.56 -15.20 ----- 24.7 27.5 167.0 34.9 19.9 -24.5 18.6 -21.9 18.2 -21.3 19.2 -23.6
2026-02-14T11:40:16.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:40:16.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:40:16.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.402889
2026-02-14T11:40:16.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:40:16.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:40:16.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:40:16.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:40:16.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:40:16.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:39:59', tmtdew=9.14, humidity=53.93, cloud=0.0, wind=24.91, temperature=12.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:40:09.610', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:40:16.531 [DEBUG] [Thread-184787] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:40:16.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T11:40:16.625 [DEBUG] [Thread-184790] [transport.py] [_log()] starting thread (client mode): 0xa2dc21a0
2026-02-14T11:40:16.625 [DEBUG] [Thread-184790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:40:16.649 [DEBUG] [Thread-184790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:40:16.649 [INFO] [Thread-184790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:40:16.663 [DEBUG] [Thread-184790] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:40:16.664 [DEBUG] [Thread-184790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:40:16.664 [DEBUG] [Thread-184790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:40:16.664 [DEBUG] [Thread-184790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:40:16.664 [DEBUG] [Thread-184790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:40:16.664 [DEBUG] [Thread-184790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:40:16.664 [DEBUG] [Thread-184790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:40:16.665 [DEBUG] [Thread-184790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:40:16.665 [DEBUG] [Thread-184790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:40:16.665 [DEBUG] [Thread-184790] [transport.py] [_log()] client lang: <none>
2026-02-14T11:40:16.665 [DEBUG] [Thread-184790] [transport.py] [_log()] server lang: <none>
2026-02-14T11:40:16.665 [DEBUG] [Thread-184790] [transport.py] [_log()] kex follows: False
2026-02-14T11:40:16.666 [DEBUG] [Thread-184790] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:40:16.666 [DEBUG] [Thread-184790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:40:16.666 [DEBUG] [Thread-184790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:40:16.666 [DEBUG] [Thread-184790] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:40:16.666 [DEBUG] [Thread-184790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:40:16.666 [DEBUG] [Thread-184790] [transport.py] [_log()] Compression: none
2026-02-14T11:40:16.666 [DEBUG] [Thread-184790] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:40:16.720 [DEBUG] [Thread-184790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:40:16.721 [DEBUG] [Thread-184790] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:40:16.721 [DEBUG] [Thread-184790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:40:16.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:40:16.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:40:16.790 [DEBUG] [Thread-184790] [transport.py] [_log()] userauth is OK
2026-02-14T11:40:16.790 [DEBUG] [Thread-184790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:40:16.791 [DEBUG] [Thread-184790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:40:16.791 [DEBUG] [Thread-184790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:40:16.791 [DEBUG] [Thread-184790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:40:16.816 [INFO] [Thread-184790] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:40:16.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-14T11:40:16.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:40:17.408 [DEBUG] [Thread-184792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:40:17.626 [DEBUG] [Thread-184790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:40:17.626 [DEBUG] [Thread-184790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:40:17.679 [DEBUG] [Thread-184790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:40:17.679 [DEBUG] [Thread-184790] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:40:17.696 [DEBUG] [Thread-184790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:40:17.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:40:17.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-14T11:40:17.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:40:17.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:40:17.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:40:17.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:40:17.762 [DEBUG] [Thread-184790] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:40:19.632 [DEBUG] [Thread-184793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:40:32.467 [DEBUG] [Thread-184794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:40:47.505 [DEBUG] [Thread-184795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:40:47.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:40:47.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:40:47.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-14T11:40:49.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 40, 34), 10.23, 50.09, 0.0, 32.92, 14.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:40:49.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:40:34
2026-02-14T11:40:49.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:40:50.118 [DEBUG] [Thread-184796] [transport.py] [_log()] starting thread (client mode): 0xa5741900
2026-02-14T11:40:50.119 [DEBUG] [Thread-184796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:40:50.139 [DEBUG] [Thread-184796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:40:50.139 [INFO] [Thread-184796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:40:50.140 [DEBUG] [Thread-184796] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:40:50.140 [DEBUG] [Thread-184796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:40:50.140 [DEBUG] [Thread-184796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:40:50.140 [DEBUG] [Thread-184796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:40:50.141 [DEBUG] [Thread-184796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:40:50.141 [DEBUG] [Thread-184796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:40:50.141 [DEBUG] [Thread-184796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:40:50.141 [DEBUG] [Thread-184796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:40:50.141 [DEBUG] [Thread-184796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:40:50.141 [DEBUG] [Thread-184796] [transport.py] [_log()] client lang: <none>
2026-02-14T11:40:50.141 [DEBUG] [Thread-184796] [transport.py] [_log()] server lang: <none>
2026-02-14T11:40:50.141 [DEBUG] [Thread-184796] [transport.py] [_log()] kex follows: False
2026-02-14T11:40:50.141 [DEBUG] [Thread-184796] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:40:50.141 [DEBUG] [Thread-184796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:40:50.141 [DEBUG] [Thread-184796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:40:50.141 [DEBUG] [Thread-184796] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:40:50.141 [DEBUG] [Thread-184796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:40:50.141 [DEBUG] [Thread-184796] [transport.py] [_log()] Compression: none
2026-02-14T11:40:50.141 [DEBUG] [Thread-184796] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:40:50.153 [DEBUG] [Thread-184796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:40:50.153 [DEBUG] [Thread-184796] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:40:50.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:40:50.154 [DEBUG] [Thread-184796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:40:50.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:40:50.156 [DEBUG] [Thread-184796] [transport.py] [_log()] userauth is OK
2026-02-14T11:40:50.156 [DEBUG] [Thread-184796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:40:50.156 [DEBUG] [Thread-184796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:40:50.156 [DEBUG] [Thread-184796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:40:50.156 [DEBUG] [Thread-184796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:40:50.180 [INFO] [Thread-184796] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:40:50.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:40:50.772 [DEBUG] [Thread-184796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:40:50.772 [DEBUG] [Thread-184796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:40:50.773 [DEBUG] [Thread-184796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:40:50.813 [DEBUG] [Thread-184796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:40:50.813 [DEBUG] [Thread-184796] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:40:50.815 [DEBUG] [Thread-184796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:40:50.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:40:50.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:40:50.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:40:50.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:40:50.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:40:50.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:40:50.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:40:50.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:40:50.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:40:50.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.403236 -999.00  +13.80  29.15     55   +5.00 1 1 1 1 1   888    0 7.50 -11.31 ----- 25.4 29.1 174.2 37.9 19.8 -25.7 18.4 -24.6 18.1 -23.2 19.1 -25.1
2026-02-14T11:40:50.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:40:50.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:40:50.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.403236
2026-02-14T11:40:50.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:40:50.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:40:50.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:40:50.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:40:50.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:40:50.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:40:34', tmtdew=10.23, humidity=50.09, cloud=0.0, wind=32.92, temperature=14.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:40:39.590', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:40:50.837 [DEBUG] [Thread-184796] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:40:50.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-14T11:40:50.934 [DEBUG] [Thread-184799] [transport.py] [_log()] starting thread (client mode): 0xa57421a0
2026-02-14T11:40:50.934 [DEBUG] [Thread-184799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:40:50.948 [DEBUG] [Thread-184799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:40:50.948 [INFO] [Thread-184799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:40:50.956 [DEBUG] [Thread-184799] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:40:50.956 [DEBUG] [Thread-184799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:40:50.956 [DEBUG] [Thread-184799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:40:50.956 [DEBUG] [Thread-184799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:40:50.956 [DEBUG] [Thread-184799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:40:50.956 [DEBUG] [Thread-184799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:40:50.957 [DEBUG] [Thread-184799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:40:50.957 [DEBUG] [Thread-184799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:40:50.957 [DEBUG] [Thread-184799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:40:50.957 [DEBUG] [Thread-184799] [transport.py] [_log()] client lang: <none>
2026-02-14T11:40:50.957 [DEBUG] [Thread-184799] [transport.py] [_log()] server lang: <none>
2026-02-14T11:40:50.957 [DEBUG] [Thread-184799] [transport.py] [_log()] kex follows: False
2026-02-14T11:40:50.957 [DEBUG] [Thread-184799] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:40:50.957 [DEBUG] [Thread-184799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:40:50.957 [DEBUG] [Thread-184799] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:40:50.957 [DEBUG] [Thread-184799] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:40:50.957 [DEBUG] [Thread-184799] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:40:50.957 [DEBUG] [Thread-184799] [transport.py] [_log()] Compression: none
2026-02-14T11:40:50.958 [DEBUG] [Thread-184799] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:40:51.014 [DEBUG] [Thread-184799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:40:51.015 [DEBUG] [Thread-184799] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:40:51.015 [DEBUG] [Thread-184799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:40:51.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:40:51.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:40:51.070 [DEBUG] [Thread-184799] [transport.py] [_log()] userauth is OK
2026-02-14T11:40:51.070 [DEBUG] [Thread-184799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:40:51.071 [DEBUG] [Thread-184799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:40:51.071 [DEBUG] [Thread-184799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:40:51.071 [DEBUG] [Thread-184799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:40:51.085 [INFO] [Thread-184799] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:40:51.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-14T11:40:51.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:40:51.898 [DEBUG] [Thread-184799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:40:51.905 [DEBUG] [Thread-184799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:40:51.946 [DEBUG] [Thread-184799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:40:51.946 [DEBUG] [Thread-184799] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:40:51.956 [DEBUG] [Thread-184799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:40:51.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:40:51.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-14T11:40:51.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:40:51.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:40:51.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:40:51.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:40:51.992 [DEBUG] [Thread-184799] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:41:02.544 [DEBUG] [Thread-184801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:41:14.666 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:41:14.668 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:41:17.602 [DEBUG] [Thread-184802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:41:19.665 [DEBUG] [Thread-184803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:41:22.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:41:22.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:41:22.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-14T11:41:24.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 41, 9), 10.25, 49.8, 0.0, 37.41, 13.69, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:41:24.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:41:09
2026-02-14T11:41:24.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:41:24.816 [DEBUG] [Thread-184804] [transport.py] [_log()] starting thread (client mode): 0xa2dc2500
2026-02-14T11:41:24.816 [DEBUG] [Thread-184804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:41:24.837 [DEBUG] [Thread-184804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:41:24.837 [INFO] [Thread-184804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:41:24.839 [DEBUG] [Thread-184804] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:41:24.840 [DEBUG] [Thread-184804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:41:24.840 [DEBUG] [Thread-184804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:41:24.840 [DEBUG] [Thread-184804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:41:24.840 [DEBUG] [Thread-184804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:41:24.840 [DEBUG] [Thread-184804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:41:24.840 [DEBUG] [Thread-184804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:41:24.840 [DEBUG] [Thread-184804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:41:24.840 [DEBUG] [Thread-184804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:41:24.840 [DEBUG] [Thread-184804] [transport.py] [_log()] client lang: <none>
2026-02-14T11:41:24.840 [DEBUG] [Thread-184804] [transport.py] [_log()] server lang: <none>
2026-02-14T11:41:24.840 [DEBUG] [Thread-184804] [transport.py] [_log()] kex follows: False
2026-02-14T11:41:24.840 [DEBUG] [Thread-184804] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:41:24.840 [DEBUG] [Thread-184804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:41:24.840 [DEBUG] [Thread-184804] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:41:24.840 [DEBUG] [Thread-184804] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:41:24.840 [DEBUG] [Thread-184804] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:41:24.840 [DEBUG] [Thread-184804] [transport.py] [_log()] Compression: none
2026-02-14T11:41:24.840 [DEBUG] [Thread-184804] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:41:24.852 [DEBUG] [Thread-184804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:41:24.853 [DEBUG] [Thread-184804] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:41:24.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:41:24.855 [DEBUG] [Thread-184804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:41:24.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:41:24.857 [DEBUG] [Thread-184804] [transport.py] [_log()] userauth is OK
2026-02-14T11:41:24.857 [DEBUG] [Thread-184804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:41:24.857 [DEBUG] [Thread-184804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:41:24.857 [DEBUG] [Thread-184804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:41:24.857 [DEBUG] [Thread-184804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:41:24.872 [INFO] [Thread-184804] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:41:24.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:41:25.558 [DEBUG] [Thread-184804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:41:25.558 [DEBUG] [Thread-184804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:41:25.559 [DEBUG] [Thread-184804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:41:25.599 [DEBUG] [Thread-184804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:41:25.600 [DEBUG] [Thread-184804] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:41:25.603 [DEBUG] [Thread-184804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:41:25.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:41:25.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:41:25.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:41:25.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:41:25.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:41:25.629 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:41:25.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:41:25.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:41:25.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:41:25.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.403584 -999.00  +13.40  26.30     56   +5.00 1 1 1 1 1   888    0 7.66 -8.02 ----- 23.5 26.3 170.2 37.9 19.8 -24.5 18.1 -26.5 18.0 -23.6 19.1 -23.8
2026-02-14T11:41:25.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:41:25.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:41:25.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.403584
2026-02-14T11:41:25.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:41:25.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:41:25.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:41:25.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:41:25.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:41:25.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:41:09', tmtdew=10.25, humidity=49.8, cloud=0.0, wind=37.41, temperature=13.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:41:09.658', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:41:25.631 [DEBUG] [Thread-184804] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:41:25.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-14T11:41:25.731 [DEBUG] [Thread-184807] [transport.py] [_log()] starting thread (client mode): 0xa2dc14b0
2026-02-14T11:41:25.732 [DEBUG] [Thread-184807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:41:25.746 [DEBUG] [Thread-184807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:41:25.746 [INFO] [Thread-184807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:41:25.754 [DEBUG] [Thread-184807] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:41:25.754 [DEBUG] [Thread-184807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:41:25.755 [DEBUG] [Thread-184807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:41:25.755 [DEBUG] [Thread-184807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:41:25.755 [DEBUG] [Thread-184807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:41:25.755 [DEBUG] [Thread-184807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:41:25.755 [DEBUG] [Thread-184807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:41:25.755 [DEBUG] [Thread-184807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:41:25.755 [DEBUG] [Thread-184807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:41:25.755 [DEBUG] [Thread-184807] [transport.py] [_log()] client lang: <none>
2026-02-14T11:41:25.755 [DEBUG] [Thread-184807] [transport.py] [_log()] server lang: <none>
2026-02-14T11:41:25.755 [DEBUG] [Thread-184807] [transport.py] [_log()] kex follows: False
2026-02-14T11:41:25.755 [DEBUG] [Thread-184807] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:41:25.755 [DEBUG] [Thread-184807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:41:25.755 [DEBUG] [Thread-184807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:41:25.755 [DEBUG] [Thread-184807] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:41:25.755 [DEBUG] [Thread-184807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:41:25.755 [DEBUG] [Thread-184807] [transport.py] [_log()] Compression: none
2026-02-14T11:41:25.755 [DEBUG] [Thread-184807] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:41:25.815 [DEBUG] [Thread-184807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:41:25.816 [DEBUG] [Thread-184807] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:41:25.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:41:25.817 [DEBUG] [Thread-184807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:41:25.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:41:25.871 [DEBUG] [Thread-184807] [transport.py] [_log()] userauth is OK
2026-02-14T11:41:25.871 [DEBUG] [Thread-184807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:41:25.872 [DEBUG] [Thread-184807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:41:25.872 [DEBUG] [Thread-184807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:41:25.872 [DEBUG] [Thread-184807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:41:25.890 [INFO] [Thread-184807] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:41:25.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-14T11:41:25.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:41:26.719 [DEBUG] [Thread-184807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:41:26.720 [DEBUG] [Thread-184807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:41:26.767 [DEBUG] [Thread-184807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:41:26.768 [DEBUG] [Thread-184807] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:41:26.777 [DEBUG] [Thread-184807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:41:26.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:41:26.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-14T11:41:26.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-14T11:41:26.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:41:26.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:41:26.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:41:26.814 [DEBUG] [Thread-184807] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:41:32.636 [DEBUG] [Thread-184809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:41:47.690 [DEBUG] [Thread-184810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:41:56.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:41:56.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:41:56.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-14T11:41:58.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 41, 45), 9.46, 52.75, 0.0, 29.57, 12.94, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:41:58.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:41:45
2026-02-14T11:41:59.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:41:59.327 [DEBUG] [Thread-184811] [transport.py] [_log()] starting thread (client mode): 0xa57c01c0
2026-02-14T11:41:59.327 [DEBUG] [Thread-184811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:41:59.347 [DEBUG] [Thread-184811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:41:59.347 [INFO] [Thread-184811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:41:59.350 [DEBUG] [Thread-184811] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:41:59.350 [DEBUG] [Thread-184811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:41:59.350 [DEBUG] [Thread-184811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:41:59.350 [DEBUG] [Thread-184811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:41:59.350 [DEBUG] [Thread-184811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:41:59.350 [DEBUG] [Thread-184811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:41:59.350 [DEBUG] [Thread-184811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:41:59.350 [DEBUG] [Thread-184811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:41:59.350 [DEBUG] [Thread-184811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:41:59.350 [DEBUG] [Thread-184811] [transport.py] [_log()] client lang: <none>
2026-02-14T11:41:59.350 [DEBUG] [Thread-184811] [transport.py] [_log()] server lang: <none>
2026-02-14T11:41:59.350 [DEBUG] [Thread-184811] [transport.py] [_log()] kex follows: False
2026-02-14T11:41:59.350 [DEBUG] [Thread-184811] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:41:59.350 [DEBUG] [Thread-184811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:41:59.350 [DEBUG] [Thread-184811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:41:59.350 [DEBUG] [Thread-184811] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:41:59.350 [DEBUG] [Thread-184811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:41:59.350 [DEBUG] [Thread-184811] [transport.py] [_log()] Compression: none
2026-02-14T11:41:59.350 [DEBUG] [Thread-184811] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:41:59.368 [DEBUG] [Thread-184811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:41:59.369 [DEBUG] [Thread-184811] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:41:59.369 [DEBUG] [Thread-184811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:41:59.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:41:59.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:41:59.371 [DEBUG] [Thread-184811] [transport.py] [_log()] userauth is OK
2026-02-14T11:41:59.371 [DEBUG] [Thread-184811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:41:59.372 [DEBUG] [Thread-184811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:41:59.372 [DEBUG] [Thread-184811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:41:59.372 [DEBUG] [Thread-184811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:41:59.397 [INFO] [Thread-184811] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:41:59.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:42:00.025 [DEBUG] [Thread-184811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:42:00.025 [DEBUG] [Thread-184811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:42:00.026 [DEBUG] [Thread-184811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:42:00.066 [DEBUG] [Thread-184811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:42:00.066 [DEBUG] [Thread-184811] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:42:00.069 [DEBUG] [Thread-184811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:42:00.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:42:00.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:42:00.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:42:00.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:42:00.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:42:00.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:42:00.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:42:00.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:42:00.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:42:00.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.403931 -999.00  +13.30  19.20     57   +5.00 1 2 1 1 1   888    0 7.87 -4.73 ----- 20.0 19.2 152.6 32.4 19.7 -25.0 18.3 -22.7 18.1 -21.6 19.1 -24.2
2026-02-14T11:42:00.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:42:00.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:42:00.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.403931
2026-02-14T11:42:00.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:42:00.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:42:00.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:42:00.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:42:00.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:42:00.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:41:45', tmtdew=9.46, humidity=52.75, cloud=0.0, wind=29.57, temperature=12.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:41:39.638', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:42:00.096 [DEBUG] [Thread-184811] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:42:00.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-14T11:42:00.199 [DEBUG] [Thread-184814] [transport.py] [_log()] starting thread (client mode): 0xa2dc0dc0
2026-02-14T11:42:00.199 [DEBUG] [Thread-184814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:42:00.214 [DEBUG] [Thread-184814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:42:00.214 [INFO] [Thread-184814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:42:00.223 [DEBUG] [Thread-184814] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:42:00.223 [DEBUG] [Thread-184814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:42:00.223 [DEBUG] [Thread-184814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:42:00.223 [DEBUG] [Thread-184814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:42:00.223 [DEBUG] [Thread-184814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:42:00.223 [DEBUG] [Thread-184814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:42:00.223 [DEBUG] [Thread-184814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:42:00.224 [DEBUG] [Thread-184814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:42:00.224 [DEBUG] [Thread-184814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:42:00.224 [DEBUG] [Thread-184814] [transport.py] [_log()] client lang: <none>
2026-02-14T11:42:00.224 [DEBUG] [Thread-184814] [transport.py] [_log()] server lang: <none>
2026-02-14T11:42:00.224 [DEBUG] [Thread-184814] [transport.py] [_log()] kex follows: False
2026-02-14T11:42:00.224 [DEBUG] [Thread-184814] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:42:00.224 [DEBUG] [Thread-184814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:42:00.224 [DEBUG] [Thread-184814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:42:00.224 [DEBUG] [Thread-184814] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:42:00.224 [DEBUG] [Thread-184814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:42:00.224 [DEBUG] [Thread-184814] [transport.py] [_log()] Compression: none
2026-02-14T11:42:00.224 [DEBUG] [Thread-184814] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:42:00.282 [DEBUG] [Thread-184814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:42:00.283 [DEBUG] [Thread-184814] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:42:00.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:42:00.284 [DEBUG] [Thread-184814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:42:00.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:42:00.339 [DEBUG] [Thread-184814] [transport.py] [_log()] userauth is OK
2026-02-14T11:42:00.339 [DEBUG] [Thread-184814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:42:00.340 [DEBUG] [Thread-184814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:42:00.340 [DEBUG] [Thread-184814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:42:00.340 [DEBUG] [Thread-184814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:42:00.359 [INFO] [Thread-184814] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:42:00.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-14T11:42:00.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:42:01.163 [DEBUG] [Thread-184814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:42:01.163 [DEBUG] [Thread-184814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:42:01.211 [DEBUG] [Thread-184814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:42:01.212 [DEBUG] [Thread-184814] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:42:01.221 [DEBUG] [Thread-184814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:42:01.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:42:01.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-14T11:42:01.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:42:01.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:42:01.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:42:01.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:42:01.260 [DEBUG] [Thread-184814] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:42:02.726 [DEBUG] [Thread-184816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:42:14.809 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:42:14.810 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:42:17.789 [DEBUG] [Thread-184817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:42:19.717 [DEBUG] [Thread-184818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:42:31.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:42:31.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:42:31.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-14T11:42:32.826 [DEBUG] [Thread-184819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:42:33.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 42, 20), 9.44, 52.78, 0.0, 26.34, 12.76, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:42:33.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:42:20
2026-02-14T11:42:33.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:42:33.744 [DEBUG] [Thread-184820] [transport.py] [_log()] starting thread (client mode): 0xa57c3f40
2026-02-14T11:42:33.744 [DEBUG] [Thread-184820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:42:33.764 [DEBUG] [Thread-184820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:42:33.764 [INFO] [Thread-184820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:42:33.768 [DEBUG] [Thread-184820] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:42:33.768 [DEBUG] [Thread-184820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:42:33.768 [DEBUG] [Thread-184820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:42:33.768 [DEBUG] [Thread-184820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:42:33.768 [DEBUG] [Thread-184820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:42:33.768 [DEBUG] [Thread-184820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:42:33.768 [DEBUG] [Thread-184820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:42:33.768 [DEBUG] [Thread-184820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:42:33.768 [DEBUG] [Thread-184820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:42:33.768 [DEBUG] [Thread-184820] [transport.py] [_log()] client lang: <none>
2026-02-14T11:42:33.768 [DEBUG] [Thread-184820] [transport.py] [_log()] server lang: <none>
2026-02-14T11:42:33.768 [DEBUG] [Thread-184820] [transport.py] [_log()] kex follows: False
2026-02-14T11:42:33.768 [DEBUG] [Thread-184820] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:42:33.768 [DEBUG] [Thread-184820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:42:33.768 [DEBUG] [Thread-184820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:42:33.768 [DEBUG] [Thread-184820] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:42:33.768 [DEBUG] [Thread-184820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:42:33.768 [DEBUG] [Thread-184820] [transport.py] [_log()] Compression: none
2026-02-14T11:42:33.768 [DEBUG] [Thread-184820] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:42:33.785 [DEBUG] [Thread-184820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:42:33.786 [DEBUG] [Thread-184820] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:42:33.787 [DEBUG] [Thread-184820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:42:33.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:42:33.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:42:33.789 [DEBUG] [Thread-184820] [transport.py] [_log()] userauth is OK
2026-02-14T11:42:33.789 [DEBUG] [Thread-184820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:42:33.789 [DEBUG] [Thread-184820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:42:33.789 [DEBUG] [Thread-184820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:42:33.789 [DEBUG] [Thread-184820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:42:33.813 [INFO] [Thread-184820] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:42:33.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:42:34.454 [DEBUG] [Thread-184820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:42:34.454 [DEBUG] [Thread-184820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:42:34.454 [DEBUG] [Thread-184820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:42:34.494 [DEBUG] [Thread-184820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:42:34.495 [DEBUG] [Thread-184820] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:42:34.498 [DEBUG] [Thread-184820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:42:34.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:42:34.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:42:34.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:42:34.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:42:34.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:42:34.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:42:34.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:42:34.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:42:34.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:42:34.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.404278 -999.00  +12.60  21.61     58   +4.60 1 1 1 1 1   888    0 7.97 -2.00 ----- 26.1 21.6 147.7 36.5 19.8 -24.9 18.6 -23.3 18.0 -23.7 19.1 -25.8
2026-02-14T11:42:34.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:42:34.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:42:34.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.404278
2026-02-14T11:42:34.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:42:34.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:42:34.524 [DEBUG] [Thread-184820] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:42:34.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:42:34.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:42:34.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:42:34.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:42:20', tmtdew=9.44, humidity=52.78, cloud=0.0, wind=26.34, temperature=12.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:42:09.619', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:42:34.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-14T11:42:34.623 [DEBUG] [Thread-184823] [transport.py] [_log()] starting thread (client mode): 0xa2ddeb00
2026-02-14T11:42:34.623 [DEBUG] [Thread-184823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:42:34.636 [DEBUG] [Thread-184823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:42:34.636 [INFO] [Thread-184823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:42:34.644 [DEBUG] [Thread-184823] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:42:34.644 [DEBUG] [Thread-184823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:42:34.644 [DEBUG] [Thread-184823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:42:34.645 [DEBUG] [Thread-184823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:42:34.645 [DEBUG] [Thread-184823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:42:34.645 [DEBUG] [Thread-184823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:42:34.645 [DEBUG] [Thread-184823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:42:34.645 [DEBUG] [Thread-184823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:42:34.645 [DEBUG] [Thread-184823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:42:34.645 [DEBUG] [Thread-184823] [transport.py] [_log()] client lang: <none>
2026-02-14T11:42:34.645 [DEBUG] [Thread-184823] [transport.py] [_log()] server lang: <none>
2026-02-14T11:42:34.645 [DEBUG] [Thread-184823] [transport.py] [_log()] kex follows: False
2026-02-14T11:42:34.645 [DEBUG] [Thread-184823] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:42:34.645 [DEBUG] [Thread-184823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:42:34.645 [DEBUG] [Thread-184823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:42:34.645 [DEBUG] [Thread-184823] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:42:34.645 [DEBUG] [Thread-184823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:42:34.645 [DEBUG] [Thread-184823] [transport.py] [_log()] Compression: none
2026-02-14T11:42:34.645 [DEBUG] [Thread-184823] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:42:34.702 [DEBUG] [Thread-184823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:42:34.703 [DEBUG] [Thread-184823] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:42:34.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:42:34.704 [DEBUG] [Thread-184823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:42:34.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:42:34.758 [DEBUG] [Thread-184823] [transport.py] [_log()] userauth is OK
2026-02-14T11:42:34.759 [DEBUG] [Thread-184823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:42:34.759 [DEBUG] [Thread-184823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:42:34.759 [DEBUG] [Thread-184823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:42:34.759 [DEBUG] [Thread-184823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:42:34.778 [INFO] [Thread-184823] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:42:34.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-14T11:42:34.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:42:35.579 [DEBUG] [Thread-184823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:42:35.579 [DEBUG] [Thread-184823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:42:35.626 [DEBUG] [Thread-184823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:42:35.627 [DEBUG] [Thread-184823] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:42:35.636 [DEBUG] [Thread-184823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:42:35.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:42:35.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')
2026-02-14T11:42:35.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:42:35.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:42:35.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:42:35.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:42:35.673 [DEBUG] [Thread-184823] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:42:47.859 [DEBUG] [Thread-184825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:43:02.903 [DEBUG] [Thread-184826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:43:05.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:43:05.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:43:05.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-14T11:43:07.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 42, 56), 9.49, 52.26, 0.0, 27.12, 13.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:43:07.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:42:56
2026-02-14T11:43:07.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:43:08.034 [DEBUG] [Thread-184827] [transport.py] [_log()] starting thread (client mode): 0xa57c23b0
2026-02-14T11:43:08.035 [DEBUG] [Thread-184827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:43:08.056 [DEBUG] [Thread-184827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:43:08.056 [INFO] [Thread-184827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:43:08.059 [DEBUG] [Thread-184827] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:43:08.059 [DEBUG] [Thread-184827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:43:08.060 [DEBUG] [Thread-184827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:43:08.060 [DEBUG] [Thread-184827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:43:08.060 [DEBUG] [Thread-184827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:43:08.060 [DEBUG] [Thread-184827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:43:08.060 [DEBUG] [Thread-184827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:43:08.060 [DEBUG] [Thread-184827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:43:08.060 [DEBUG] [Thread-184827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:43:08.060 [DEBUG] [Thread-184827] [transport.py] [_log()] client lang: <none>
2026-02-14T11:43:08.060 [DEBUG] [Thread-184827] [transport.py] [_log()] server lang: <none>
2026-02-14T11:43:08.060 [DEBUG] [Thread-184827] [transport.py] [_log()] kex follows: False
2026-02-14T11:43:08.060 [DEBUG] [Thread-184827] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:43:08.060 [DEBUG] [Thread-184827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:43:08.060 [DEBUG] [Thread-184827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:43:08.060 [DEBUG] [Thread-184827] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:43:08.061 [DEBUG] [Thread-184827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:43:08.061 [DEBUG] [Thread-184827] [transport.py] [_log()] Compression: none
2026-02-14T11:43:08.061 [DEBUG] [Thread-184827] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:43:08.074 [DEBUG] [Thread-184827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:43:08.075 [DEBUG] [Thread-184827] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:43:08.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:43:08.076 [DEBUG] [Thread-184827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:43:08.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:43:08.078 [DEBUG] [Thread-184827] [transport.py] [_log()] userauth is OK
2026-02-14T11:43:08.078 [DEBUG] [Thread-184827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:43:08.079 [DEBUG] [Thread-184827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:43:08.079 [DEBUG] [Thread-184827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:43:08.079 [DEBUG] [Thread-184827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:43:08.103 [INFO] [Thread-184827] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:43:08.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:43:08.770 [DEBUG] [Thread-184827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:43:08.770 [DEBUG] [Thread-184827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:43:08.770 [DEBUG] [Thread-184827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:43:08.812 [DEBUG] [Thread-184827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:43:08.812 [DEBUG] [Thread-184827] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:43:08.816 [DEBUG] [Thread-184827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:43:08.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:43:08.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:43:08.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:43:08.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:43:08.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:43:08.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:43:08.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:43:08.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:43:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:43:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.404625 -999.00  +12.40  24.44     59   +4.70 1 1 1 1 1   888    0 7.99 -0.45 ----- 17.8 24.4 163.3 33.5 19.7 -25.6 18.5 -23.8 18.0 -23.0 19.1 -25.5
2026-02-14T11:43:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:43:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:43:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.404625
2026-02-14T11:43:08.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:43:08.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:43:08.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:43:08.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:43:08.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:43:08.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:42:56', tmtdew=9.49, humidity=52.26, cloud=0.0, wind=27.12, temperature=13.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:42:39.600', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:43:08.843 [DEBUG] [Thread-184827] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:43:08.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-14T11:43:08.937 [DEBUG] [Thread-184830] [transport.py] [_log()] starting thread (client mode): 0xa2dc13c0
2026-02-14T11:43:08.937 [DEBUG] [Thread-184830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:43:08.953 [DEBUG] [Thread-184830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:43:08.953 [INFO] [Thread-184830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:43:08.961 [DEBUG] [Thread-184830] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:43:08.961 [DEBUG] [Thread-184830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:43:08.961 [DEBUG] [Thread-184830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:43:08.961 [DEBUG] [Thread-184830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:43:08.961 [DEBUG] [Thread-184830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:43:08.961 [DEBUG] [Thread-184830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:43:08.961 [DEBUG] [Thread-184830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:43:08.961 [DEBUG] [Thread-184830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:43:08.961 [DEBUG] [Thread-184830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:43:08.961 [DEBUG] [Thread-184830] [transport.py] [_log()] client lang: <none>
2026-02-14T11:43:08.961 [DEBUG] [Thread-184830] [transport.py] [_log()] server lang: <none>
2026-02-14T11:43:08.962 [DEBUG] [Thread-184830] [transport.py] [_log()] kex follows: False
2026-02-14T11:43:08.962 [DEBUG] [Thread-184830] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:43:08.962 [DEBUG] [Thread-184830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:43:08.962 [DEBUG] [Thread-184830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:43:08.962 [DEBUG] [Thread-184830] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:43:08.962 [DEBUG] [Thread-184830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:43:08.962 [DEBUG] [Thread-184830] [transport.py] [_log()] Compression: none
2026-02-14T11:43:08.962 [DEBUG] [Thread-184830] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:43:09.018 [DEBUG] [Thread-184830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:43:09.018 [DEBUG] [Thread-184830] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:43:09.019 [DEBUG] [Thread-184830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:43:09.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:43:09.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:43:09.074 [DEBUG] [Thread-184830] [transport.py] [_log()] userauth is OK
2026-02-14T11:43:09.074 [DEBUG] [Thread-184830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:43:09.075 [DEBUG] [Thread-184830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:43:09.075 [DEBUG] [Thread-184830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:43:09.075 [DEBUG] [Thread-184830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:43:09.099 [INFO] [Thread-184830] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:43:09.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-14T11:43:09.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:43:09.901 [DEBUG] [Thread-184830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:43:09.902 [DEBUG] [Thread-184830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:43:09.949 [DEBUG] [Thread-184830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:43:09.950 [DEBUG] [Thread-184830] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:43:09.959 [DEBUG] [Thread-184830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:43:09.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:43:09.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-14T11:43:09.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:43:09.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:43:09.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:43:09.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:43:09.997 [DEBUG] [Thread-184830] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:43:14.951 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:43:14.952 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:43:17.937 [DEBUG] [Thread-184832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:43:19.751 [DEBUG] [Thread-184833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:43:32.998 [DEBUG] [Thread-184834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:43:40.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:43:40.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:43:40.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-14T11:43:41.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 43, 31), 9.39, 52.63, 0.0, 30.54, 13.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:43:41.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:43:31
2026-02-14T11:43:42.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:43:42.511 [DEBUG] [Thread-184835] [transport.py] [_log()] starting thread (client mode): 0xa2d57c40
2026-02-14T11:43:42.512 [DEBUG] [Thread-184835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:43:42.532 [DEBUG] [Thread-184835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:43:42.532 [INFO] [Thread-184835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:43:42.535 [DEBUG] [Thread-184835] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:43:42.535 [DEBUG] [Thread-184835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:43:42.535 [DEBUG] [Thread-184835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:43:42.536 [DEBUG] [Thread-184835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:43:42.536 [DEBUG] [Thread-184835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:43:42.536 [DEBUG] [Thread-184835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:43:42.536 [DEBUG] [Thread-184835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:43:42.536 [DEBUG] [Thread-184835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:43:42.536 [DEBUG] [Thread-184835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:43:42.536 [DEBUG] [Thread-184835] [transport.py] [_log()] client lang: <none>
2026-02-14T11:43:42.536 [DEBUG] [Thread-184835] [transport.py] [_log()] server lang: <none>
2026-02-14T11:43:42.536 [DEBUG] [Thread-184835] [transport.py] [_log()] kex follows: False
2026-02-14T11:43:42.536 [DEBUG] [Thread-184835] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:43:42.536 [DEBUG] [Thread-184835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:43:42.536 [DEBUG] [Thread-184835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:43:42.536 [DEBUG] [Thread-184835] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:43:42.536 [DEBUG] [Thread-184835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:43:42.536 [DEBUG] [Thread-184835] [transport.py] [_log()] Compression: none
2026-02-14T11:43:42.536 [DEBUG] [Thread-184835] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:43:42.553 [DEBUG] [Thread-184835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:43:42.553 [DEBUG] [Thread-184835] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:43:42.554 [DEBUG] [Thread-184835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:43:42.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:43:42.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:43:42.597 [DEBUG] [Thread-184835] [transport.py] [_log()] userauth is OK
2026-02-14T11:43:42.598 [DEBUG] [Thread-184835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:43:42.598 [DEBUG] [Thread-184835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:43:42.598 [DEBUG] [Thread-184835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:43:42.598 [DEBUG] [Thread-184835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:43:42.618 [INFO] [Thread-184835] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:43:42.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:43:43.195 [DEBUG] [Thread-184835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:43:43.196 [DEBUG] [Thread-184835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:43:43.196 [DEBUG] [Thread-184835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:43:43.236 [DEBUG] [Thread-184835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:43:43.236 [DEBUG] [Thread-184835] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:43:43.239 [DEBUG] [Thread-184835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:43:43.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:43:43.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:43:43.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:43:43.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:43:43.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:43:43.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:43:43.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:43:43.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:43:43.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:43:43.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.404972 -999.00  +12.90  22.61     58   +5.00 1 1 1 1 1   888    0 7.92 0.96 ----- 20.3 22.6 156.2 37.0 19.8 -24.7 18.7 -24.0 18.2 -22.9 19.1 -23.9
2026-02-14T11:43:43.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:43:43.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:43:43.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.404972
2026-02-14T11:43:43.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:43:43.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:43:43.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:43:43.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:43:43.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:43:43.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:43:31', tmtdew=9.39, humidity=52.63, cloud=0.0, wind=30.54, temperature=13.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:43:09.581', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:43:43.261 [DEBUG] [Thread-184835] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:43:43.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-14T11:43:43.357 [DEBUG] [Thread-184838] [transport.py] [_log()] starting thread (client mode): 0xa2dc2ef0
2026-02-14T11:43:43.358 [DEBUG] [Thread-184838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:43:43.372 [DEBUG] [Thread-184838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:43:43.373 [INFO] [Thread-184838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:43:43.380 [DEBUG] [Thread-184838] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:43:43.380 [DEBUG] [Thread-184838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:43:43.380 [DEBUG] [Thread-184838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:43:43.380 [DEBUG] [Thread-184838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:43:43.380 [DEBUG] [Thread-184838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:43:43.380 [DEBUG] [Thread-184838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:43:43.380 [DEBUG] [Thread-184838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:43:43.380 [DEBUG] [Thread-184838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:43:43.380 [DEBUG] [Thread-184838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:43:43.380 [DEBUG] [Thread-184838] [transport.py] [_log()] client lang: <none>
2026-02-14T11:43:43.381 [DEBUG] [Thread-184838] [transport.py] [_log()] server lang: <none>
2026-02-14T11:43:43.381 [DEBUG] [Thread-184838] [transport.py] [_log()] kex follows: False
2026-02-14T11:43:43.381 [DEBUG] [Thread-184838] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:43:43.381 [DEBUG] [Thread-184838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:43:43.381 [DEBUG] [Thread-184838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:43:43.381 [DEBUG] [Thread-184838] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:43:43.381 [DEBUG] [Thread-184838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:43:43.381 [DEBUG] [Thread-184838] [transport.py] [_log()] Compression: none
2026-02-14T11:43:43.381 [DEBUG] [Thread-184838] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:43:43.438 [DEBUG] [Thread-184838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:43:43.439 [DEBUG] [Thread-184838] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:43:43.439 [DEBUG] [Thread-184838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:43:43.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:43:43.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:43:43.493 [DEBUG] [Thread-184838] [transport.py] [_log()] userauth is OK
2026-02-14T11:43:43.493 [DEBUG] [Thread-184838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:43:43.493 [DEBUG] [Thread-184838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:43:43.493 [DEBUG] [Thread-184838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:43:43.493 [DEBUG] [Thread-184838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:43:43.507 [INFO] [Thread-184838] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:43:43.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T11:43:43.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:43:44.316 [DEBUG] [Thread-184838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:43:44.316 [DEBUG] [Thread-184838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:43:44.364 [DEBUG] [Thread-184838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:43:44.364 [DEBUG] [Thread-184838] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:43:44.373 [DEBUG] [Thread-184838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:43:44.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:43: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-14T11:43: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-14T11:43:44.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:43:44.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:43:44.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:43:44.411 [DEBUG] [Thread-184838] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:43:48.032 [DEBUG] [Thread-184840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:44:03.086 [DEBUG] [Thread-184841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:44:14.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:44:14.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:44: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-14T11:44:15.091 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:44:15.093 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:44:16.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 44, 6), 9.45, 52.41, 0.0, 25.71, 13.02, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:44:16.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:44:06
2026-02-14T11:44:16.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:44:16.806 [DEBUG] [Thread-184842] [transport.py] [_log()] starting thread (client mode): 0xa2d3e2c0
2026-02-14T11:44:16.806 [DEBUG] [Thread-184842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:44:16.828 [DEBUG] [Thread-184842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:44:16.828 [INFO] [Thread-184842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:44:16.830 [DEBUG] [Thread-184842] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:44:16.831 [DEBUG] [Thread-184842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:44:16.831 [DEBUG] [Thread-184842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:44:16.831 [DEBUG] [Thread-184842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:44:16.831 [DEBUG] [Thread-184842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:44:16.831 [DEBUG] [Thread-184842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:44:16.831 [DEBUG] [Thread-184842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:44:16.831 [DEBUG] [Thread-184842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:44:16.831 [DEBUG] [Thread-184842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:44:16.831 [DEBUG] [Thread-184842] [transport.py] [_log()] client lang: <none>
2026-02-14T11:44:16.831 [DEBUG] [Thread-184842] [transport.py] [_log()] server lang: <none>
2026-02-14T11:44:16.831 [DEBUG] [Thread-184842] [transport.py] [_log()] kex follows: False
2026-02-14T11:44:16.831 [DEBUG] [Thread-184842] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:44:16.831 [DEBUG] [Thread-184842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:44:16.832 [DEBUG] [Thread-184842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:44:16.832 [DEBUG] [Thread-184842] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:44:16.832 [DEBUG] [Thread-184842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:44:16.832 [DEBUG] [Thread-184842] [transport.py] [_log()] Compression: none
2026-02-14T11:44:16.832 [DEBUG] [Thread-184842] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:44:16.851 [DEBUG] [Thread-184842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:44:16.852 [DEBUG] [Thread-184842] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:44:16.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:44:16.854 [DEBUG] [Thread-184842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:44:16.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:44:16.856 [DEBUG] [Thread-184842] [transport.py] [_log()] userauth is OK
2026-02-14T11:44:16.856 [DEBUG] [Thread-184842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:44:16.856 [DEBUG] [Thread-184842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:44:16.856 [DEBUG] [Thread-184842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:44:16.856 [DEBUG] [Thread-184842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:44:16.880 [INFO] [Thread-184842] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:44:16.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:44:17.479 [DEBUG] [Thread-184842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:44:17.479 [DEBUG] [Thread-184842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:44:17.480 [DEBUG] [Thread-184842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:44:17.520 [DEBUG] [Thread-184842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:44:17.521 [DEBUG] [Thread-184842] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:44:17.524 [DEBUG] [Thread-184842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:44:17.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:44:17.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:44:17.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:44:17.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:44:17.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:44:17.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:44:17.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:44:17.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:44:17.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:44:17.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.405320 -999.00  +12.60  25.26     58   +4.60 1 1 1 1 1   888    0 8.05 4.69 ----- 21.6 25.3 153.8 35.1 19.6 -27.6 18.5 -24.2 18.0 -24.1 19.1 -26.0
2026-02-14T11:44:17.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:44:17.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:44:17.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.405320
2026-02-14T11:44:17.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:44:17.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:44:17.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:44:17.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:44:17.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:44:17.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:44:06', tmtdew=9.45, humidity=52.41, cloud=0.0, wind=25.71, temperature=13.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:43:39.648', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:44:17.553 [DEBUG] [Thread-184842] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:44:17.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-14T11:44:17.648 [DEBUG] [Thread-184845] [transport.py] [_log()] starting thread (client mode): 0xa57c05b0
2026-02-14T11:44:17.648 [DEBUG] [Thread-184845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:44:17.663 [DEBUG] [Thread-184845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:44:17.663 [INFO] [Thread-184845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:44:17.673 [DEBUG] [Thread-184845] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:44:17.673 [DEBUG] [Thread-184845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:44:17.673 [DEBUG] [Thread-184845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:44:17.673 [DEBUG] [Thread-184845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:44:17.673 [DEBUG] [Thread-184845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:44:17.673 [DEBUG] [Thread-184845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:44:17.673 [DEBUG] [Thread-184845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:44:17.673 [DEBUG] [Thread-184845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:44:17.673 [DEBUG] [Thread-184845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:44:17.673 [DEBUG] [Thread-184845] [transport.py] [_log()] client lang: <none>
2026-02-14T11:44:17.674 [DEBUG] [Thread-184845] [transport.py] [_log()] server lang: <none>
2026-02-14T11:44:17.674 [DEBUG] [Thread-184845] [transport.py] [_log()] kex follows: False
2026-02-14T11:44:17.674 [DEBUG] [Thread-184845] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:44:17.674 [DEBUG] [Thread-184845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:44:17.674 [DEBUG] [Thread-184845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:44:17.674 [DEBUG] [Thread-184845] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:44:17.674 [DEBUG] [Thread-184845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:44:17.674 [DEBUG] [Thread-184845] [transport.py] [_log()] Compression: none
2026-02-14T11:44:17.674 [DEBUG] [Thread-184845] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:44:17.739 [DEBUG] [Thread-184845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:44:17.740 [DEBUG] [Thread-184845] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:44:17.740 [DEBUG] [Thread-184845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:44:17.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:44:17.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:44:17.798 [DEBUG] [Thread-184845] [transport.py] [_log()] userauth is OK
2026-02-14T11:44:17.798 [DEBUG] [Thread-184845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:44:17.798 [DEBUG] [Thread-184845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:44:17.798 [DEBUG] [Thread-184845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:44:17.799 [DEBUG] [Thread-184845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:44:17.817 [INFO] [Thread-184845] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:44:17.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-14T11:44:17.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:44:18.119 [DEBUG] [Thread-184847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:44:18.595 [DEBUG] [Thread-184845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:44:18.596 [DEBUG] [Thread-184845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:44:18.643 [DEBUG] [Thread-184845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:44:18.644 [DEBUG] [Thread-184845] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:44:18.653 [DEBUG] [Thread-184845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:44:18.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:44:18.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:44:18.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:44:18.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:44:18.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:44:18.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:44:18.690 [DEBUG] [Thread-184845] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:44:19.786 [DEBUG] [Thread-184848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:44:33.158 [DEBUG] [Thread-184849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:44:48.196 [DEBUG] [Thread-184850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:44:48.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:44:48.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:44:48.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T11:44:50.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 44, 42), 10.24, 49.96, 0.0, 29.85, 13.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:44:50.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:44:42
2026-02-14T11:44:50.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:44:51.161 [DEBUG] [Thread-184851] [transport.py] [_log()] starting thread (client mode): 0xa2dc0730
2026-02-14T11:44:51.161 [DEBUG] [Thread-184851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:44:51.184 [DEBUG] [Thread-184851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:44:51.185 [INFO] [Thread-184851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:44:51.188 [DEBUG] [Thread-184851] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:44:51.188 [DEBUG] [Thread-184851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:44:51.189 [DEBUG] [Thread-184851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:44:51.189 [DEBUG] [Thread-184851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:44:51.189 [DEBUG] [Thread-184851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:44:51.189 [DEBUG] [Thread-184851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:44:51.189 [DEBUG] [Thread-184851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:44:51.189 [DEBUG] [Thread-184851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:44:51.189 [DEBUG] [Thread-184851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:44:51.189 [DEBUG] [Thread-184851] [transport.py] [_log()] client lang: <none>
2026-02-14T11:44:51.189 [DEBUG] [Thread-184851] [transport.py] [_log()] server lang: <none>
2026-02-14T11:44:51.189 [DEBUG] [Thread-184851] [transport.py] [_log()] kex follows: False
2026-02-14T11:44:51.190 [DEBUG] [Thread-184851] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:44:51.190 [DEBUG] [Thread-184851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:44:51.190 [DEBUG] [Thread-184851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:44:51.190 [DEBUG] [Thread-184851] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:44:51.190 [DEBUG] [Thread-184851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:44:51.190 [DEBUG] [Thread-184851] [transport.py] [_log()] Compression: none
2026-02-14T11:44:51.190 [DEBUG] [Thread-184851] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:44:51.209 [DEBUG] [Thread-184851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:44:51.210 [DEBUG] [Thread-184851] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:44:51.211 [DEBUG] [Thread-184851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:44:51.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:44:51.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:44:51.212 [DEBUG] [Thread-184851] [transport.py] [_log()] userauth is OK
2026-02-14T11:44:51.213 [DEBUG] [Thread-184851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:44:51.213 [DEBUG] [Thread-184851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:44:51.213 [DEBUG] [Thread-184851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:44:51.213 [DEBUG] [Thread-184851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:44:51.248 [INFO] [Thread-184851] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:44:51.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:44:51.878 [DEBUG] [Thread-184851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:44:51.879 [DEBUG] [Thread-184851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:44:51.879 [DEBUG] [Thread-184851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:44:51.919 [DEBUG] [Thread-184851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:44:51.920 [DEBUG] [Thread-184851] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:44:51.923 [DEBUG] [Thread-184851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:44:51.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:44:51.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:44:51.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:44:51.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:44:51.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:44:51.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:44:51.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:44:51.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:44:51.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:44:51.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.406014 -999.00  +12.60  15.75     59   +4.90 1 2 1 1 1   888    0 8.07 7.97 ----- 14.0 15.8 151.2 22.3 19.7 -25.0 18.6 -23.1 18.1 -21.9 19.1 -24.2
2026-02-14T11:44:51.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:44:51.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:44:51.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.406014
2026-02-14T11:44:51.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:44:51.948 [DEBUG] [Thread-184851] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:44:51.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:44:51.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:44:51.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:44:51.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:44:51.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:44:42', tmtdew=10.24, humidity=49.96, cloud=0.0, wind=29.85, temperature=13.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:44:39.610', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:44:52.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T11:44:52.044 [DEBUG] [Thread-184854] [transport.py] [_log()] starting thread (client mode): 0xa2ddd510
2026-02-14T11:44:52.044 [DEBUG] [Thread-184854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:44:52.058 [DEBUG] [Thread-184854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:44:52.058 [INFO] [Thread-184854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:44:52.066 [DEBUG] [Thread-184854] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:44:52.066 [DEBUG] [Thread-184854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:44:52.066 [DEBUG] [Thread-184854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:44:52.066 [DEBUG] [Thread-184854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:44:52.067 [DEBUG] [Thread-184854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:44:52.067 [DEBUG] [Thread-184854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:44:52.067 [DEBUG] [Thread-184854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:44:52.067 [DEBUG] [Thread-184854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:44:52.067 [DEBUG] [Thread-184854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:44:52.067 [DEBUG] [Thread-184854] [transport.py] [_log()] client lang: <none>
2026-02-14T11:44:52.067 [DEBUG] [Thread-184854] [transport.py] [_log()] server lang: <none>
2026-02-14T11:44:52.067 [DEBUG] [Thread-184854] [transport.py] [_log()] kex follows: False
2026-02-14T11:44:52.067 [DEBUG] [Thread-184854] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:44:52.067 [DEBUG] [Thread-184854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:44:52.067 [DEBUG] [Thread-184854] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:44:52.067 [DEBUG] [Thread-184854] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:44:52.067 [DEBUG] [Thread-184854] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:44:52.067 [DEBUG] [Thread-184854] [transport.py] [_log()] Compression: none
2026-02-14T11:44:52.067 [DEBUG] [Thread-184854] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:44:52.129 [DEBUG] [Thread-184854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:44:52.130 [DEBUG] [Thread-184854] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:44:52.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:44:52.131 [DEBUG] [Thread-184854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:44:52.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:44:52.185 [DEBUG] [Thread-184854] [transport.py] [_log()] userauth is OK
2026-02-14T11:44:52.185 [DEBUG] [Thread-184854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:44:52.186 [DEBUG] [Thread-184854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:44:52.186 [DEBUG] [Thread-184854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:44:52.186 [DEBUG] [Thread-184854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:44:52.204 [INFO] [Thread-184854] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:44:52.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T11:44:52.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:44:53.052 [DEBUG] [Thread-184854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:44:53.052 [DEBUG] [Thread-184854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:44:53.100 [DEBUG] [Thread-184854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:44:53.100 [DEBUG] [Thread-184854] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:44:53.109 [DEBUG] [Thread-184854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:44:53.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:44:53.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:44:53.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-14T11:44:53.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:44:53.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:44:53.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:44:53.151 [DEBUG] [Thread-184854] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:45:03.232 [DEBUG] [Thread-184856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:45:15.234 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:45:15.235 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:45:18.276 [DEBUG] [Thread-184857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:45:19.818 [DEBUG] [Thread-184858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:45:23.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:45:23.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:45:23.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-14T11:45:25.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 44, 42), 10.24, 49.96, 0.0, 29.85, 13.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:45:25.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:44:42
2026-02-14T11:45:25.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:45:25.563 [DEBUG] [Thread-184859] [transport.py] [_log()] starting thread (client mode): 0xa2d1be20
2026-02-14T11:45:25.563 [DEBUG] [Thread-184859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:45:25.584 [DEBUG] [Thread-184859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:45:25.584 [INFO] [Thread-184859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:45:25.588 [DEBUG] [Thread-184859] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:45:25.588 [DEBUG] [Thread-184859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:45:25.588 [DEBUG] [Thread-184859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:45:25.588 [DEBUG] [Thread-184859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:45:25.588 [DEBUG] [Thread-184859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:45:25.588 [DEBUG] [Thread-184859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:45:25.588 [DEBUG] [Thread-184859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:45:25.588 [DEBUG] [Thread-184859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:45:25.588 [DEBUG] [Thread-184859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:45:25.588 [DEBUG] [Thread-184859] [transport.py] [_log()] client lang: <none>
2026-02-14T11:45:25.588 [DEBUG] [Thread-184859] [transport.py] [_log()] server lang: <none>
2026-02-14T11:45:25.588 [DEBUG] [Thread-184859] [transport.py] [_log()] kex follows: False
2026-02-14T11:45:25.588 [DEBUG] [Thread-184859] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:45:25.588 [DEBUG] [Thread-184859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:45:25.588 [DEBUG] [Thread-184859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:45:25.588 [DEBUG] [Thread-184859] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:45:25.588 [DEBUG] [Thread-184859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:45:25.588 [DEBUG] [Thread-184859] [transport.py] [_log()] Compression: none
2026-02-14T11:45:25.588 [DEBUG] [Thread-184859] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:45:25.606 [DEBUG] [Thread-184859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:45:25.606 [DEBUG] [Thread-184859] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:45:25.607 [DEBUG] [Thread-184859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:45:25.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:45:25.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:45:25.609 [DEBUG] [Thread-184859] [transport.py] [_log()] userauth is OK
2026-02-14T11:45:25.609 [DEBUG] [Thread-184859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:45:25.609 [DEBUG] [Thread-184859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:45:25.609 [DEBUG] [Thread-184859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:45:25.610 [DEBUG] [Thread-184859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:45:25.635 [INFO] [Thread-184859] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:45:25.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:45:26.273 [DEBUG] [Thread-184859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:45:26.273 [DEBUG] [Thread-184859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:45:26.273 [DEBUG] [Thread-184859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:45:26.313 [DEBUG] [Thread-184859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:45:26.313 [DEBUG] [Thread-184859] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:45:26.317 [DEBUG] [Thread-184859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:45:26.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:45:26.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:45:26.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:45:26.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:45:26.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:45:26.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:45:26.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:45:26.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:45:26.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:45:26.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.406361 -999.00  +13.00  15.89     57   +4.80 1 2 1 1 1   888    0 8.27 9.25 ----- 14.0 15.9 161.2 28.4 19.9 -25.2 18.6 -22.6 18.2 -22.6 19.3 -24.3
2026-02-14T11:45:26.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:45:26.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:45:26.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.406361
2026-02-14T11:45:26.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:45:26.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:45:26.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:45:26.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:45:26.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:45:26.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:44:42', tmtdew=10.24, humidity=49.96, cloud=0.0, wind=29.85, temperature=13.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:45:09.590', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:45:26.344 [DEBUG] [Thread-184859] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:45:26.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-14T11:45:26.442 [DEBUG] [Thread-184862] [transport.py] [_log()] starting thread (client mode): 0xa5759540
2026-02-14T11:45:26.443 [DEBUG] [Thread-184862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:45:26.459 [DEBUG] [Thread-184862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:45:26.459 [INFO] [Thread-184862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:45:26.467 [DEBUG] [Thread-184862] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:45:26.467 [DEBUG] [Thread-184862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:45:26.467 [DEBUG] [Thread-184862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:45:26.467 [DEBUG] [Thread-184862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:45:26.467 [DEBUG] [Thread-184862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:45:26.467 [DEBUG] [Thread-184862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:45:26.467 [DEBUG] [Thread-184862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:45:26.467 [DEBUG] [Thread-184862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:45:26.467 [DEBUG] [Thread-184862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:45:26.467 [DEBUG] [Thread-184862] [transport.py] [_log()] client lang: <none>
2026-02-14T11:45:26.468 [DEBUG] [Thread-184862] [transport.py] [_log()] server lang: <none>
2026-02-14T11:45:26.468 [DEBUG] [Thread-184862] [transport.py] [_log()] kex follows: False
2026-02-14T11:45:26.468 [DEBUG] [Thread-184862] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:45:26.468 [DEBUG] [Thread-184862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:45:26.468 [DEBUG] [Thread-184862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:45:26.468 [DEBUG] [Thread-184862] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:45:26.468 [DEBUG] [Thread-184862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:45:26.468 [DEBUG] [Thread-184862] [transport.py] [_log()] Compression: none
2026-02-14T11:45:26.468 [DEBUG] [Thread-184862] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:45:26.527 [DEBUG] [Thread-184862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:45:26.527 [DEBUG] [Thread-184862] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:45:26.528 [DEBUG] [Thread-184862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:45:26.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:45:26.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:45:26.590 [DEBUG] [Thread-184862] [transport.py] [_log()] userauth is OK
2026-02-14T11:45:26.590 [DEBUG] [Thread-184862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:45:26.590 [DEBUG] [Thread-184862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:45:26.590 [DEBUG] [Thread-184862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:45:26.590 [DEBUG] [Thread-184862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:45:26.611 [INFO] [Thread-184862] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:45:26.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-14T11:45:26.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:45:27.415 [DEBUG] [Thread-184862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:45:27.415 [DEBUG] [Thread-184862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:45:27.463 [DEBUG] [Thread-184862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:45:27.464 [DEBUG] [Thread-184862] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:45:27.473 [DEBUG] [Thread-184862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:45:27.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:45:27.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:45:27.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-14T11:45:27.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:45:27.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:45:27.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:45:27.510 [DEBUG] [Thread-184862] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:45:33.314 [DEBUG] [Thread-184864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:45:48.359 [DEBUG] [Thread-184865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:45:57.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:45:57.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:45:57.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-14T11:46:00.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 45, 18), 9.17, 53.64, 0.0, 28.78, 12.66, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:46:00.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:45:18
2026-02-14T11:46:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:46:00.718 [DEBUG] [Thread-184866] [transport.py] [_log()] starting thread (client mode): 0xa2ddc490
2026-02-14T11:46:00.718 [DEBUG] [Thread-184866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:46:00.739 [DEBUG] [Thread-184866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:46:00.739 [INFO] [Thread-184866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:46:00.742 [DEBUG] [Thread-184866] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:46:00.742 [DEBUG] [Thread-184866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:46:00.742 [DEBUG] [Thread-184866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:46:00.742 [DEBUG] [Thread-184866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:46:00.742 [DEBUG] [Thread-184866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:46:00.742 [DEBUG] [Thread-184866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:46:00.742 [DEBUG] [Thread-184866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:46:00.742 [DEBUG] [Thread-184866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:46:00.742 [DEBUG] [Thread-184866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:46:00.742 [DEBUG] [Thread-184866] [transport.py] [_log()] client lang: <none>
2026-02-14T11:46:00.742 [DEBUG] [Thread-184866] [transport.py] [_log()] server lang: <none>
2026-02-14T11:46:00.742 [DEBUG] [Thread-184866] [transport.py] [_log()] kex follows: False
2026-02-14T11:46:00.742 [DEBUG] [Thread-184866] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:46:00.743 [DEBUG] [Thread-184866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:46:00.743 [DEBUG] [Thread-184866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:46:00.743 [DEBUG] [Thread-184866] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:46:00.743 [DEBUG] [Thread-184866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:46:00.743 [DEBUG] [Thread-184866] [transport.py] [_log()] Compression: none
2026-02-14T11:46:00.743 [DEBUG] [Thread-184866] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:46:00.760 [DEBUG] [Thread-184866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:46:00.761 [DEBUG] [Thread-184866] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:46:00.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:46:00.762 [DEBUG] [Thread-184866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:46:00.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:46:00.764 [DEBUG] [Thread-184866] [transport.py] [_log()] userauth is OK
2026-02-14T11:46:00.764 [DEBUG] [Thread-184866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:46:00.764 [DEBUG] [Thread-184866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:46:00.764 [DEBUG] [Thread-184866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:46:00.764 [DEBUG] [Thread-184866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:46:00.789 [INFO] [Thread-184866] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:46:00.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:46:01.370 [DEBUG] [Thread-184866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:46:01.370 [DEBUG] [Thread-184866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:46:01.370 [DEBUG] [Thread-184866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:46:01.412 [DEBUG] [Thread-184866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:46:01.412 [DEBUG] [Thread-184866] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:46:01.415 [DEBUG] [Thread-184866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:46:01.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:46:01.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:46:01.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:46:01.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:46:01.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:46:01.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:46:01.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:46:01.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:46:01.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:46:01.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.406708 -999.00  +13.30  17.49     57   +5.00 1 2 1 1 1   888    0 8.10 10.11 ----- 30.4 17.5 166.2 23.6 20.1 -23.6 18.8 -23.5 18.4 -21.1 19.4 -23.3
2026-02-14T11:46:01.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:46:01.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:46:01.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.406708
2026-02-14T11:46:01.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:46:01.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:46:01.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:46:01.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:46:01.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:46:01.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:45:18', tmtdew=9.17, humidity=53.64, cloud=0.0, wind=28.78, temperature=12.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:45:39.571', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:46:01.434 [DEBUG] [Thread-184866] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:46:01.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-14T11:46:01.523 [DEBUG] [Thread-184869] [transport.py] [_log()] starting thread (client mode): 0xa2d196c0
2026-02-14T11:46:01.523 [DEBUG] [Thread-184869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:46:01.537 [DEBUG] [Thread-184869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:46:01.538 [INFO] [Thread-184869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:46:01.545 [DEBUG] [Thread-184869] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:46:01.546 [DEBUG] [Thread-184869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:46:01.546 [DEBUG] [Thread-184869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:46:01.546 [DEBUG] [Thread-184869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:46:01.546 [DEBUG] [Thread-184869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:46:01.546 [DEBUG] [Thread-184869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:46:01.546 [DEBUG] [Thread-184869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:46:01.546 [DEBUG] [Thread-184869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:46:01.546 [DEBUG] [Thread-184869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:46:01.547 [DEBUG] [Thread-184869] [transport.py] [_log()] client lang: <none>
2026-02-14T11:46:01.547 [DEBUG] [Thread-184869] [transport.py] [_log()] server lang: <none>
2026-02-14T11:46:01.547 [DEBUG] [Thread-184869] [transport.py] [_log()] kex follows: False
2026-02-14T11:46:01.547 [DEBUG] [Thread-184869] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:46:01.547 [DEBUG] [Thread-184869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:46:01.547 [DEBUG] [Thread-184869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:46:01.547 [DEBUG] [Thread-184869] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:46:01.547 [DEBUG] [Thread-184869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:46:01.547 [DEBUG] [Thread-184869] [transport.py] [_log()] Compression: none
2026-02-14T11:46:01.547 [DEBUG] [Thread-184869] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:46:01.602 [DEBUG] [Thread-184869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:46:01.602 [DEBUG] [Thread-184869] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:46:01.603 [DEBUG] [Thread-184869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:46:01.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:46:01.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:46:01.659 [DEBUG] [Thread-184869] [transport.py] [_log()] userauth is OK
2026-02-14T11:46:01.660 [DEBUG] [Thread-184869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:46:01.660 [DEBUG] [Thread-184869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:46:01.660 [DEBUG] [Thread-184869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:46:01.660 [DEBUG] [Thread-184869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:46:01.684 [INFO] [Thread-184869] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:46:01.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-14T11:46:01.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:46:02.510 [DEBUG] [Thread-184869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:46:02.510 [DEBUG] [Thread-184869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:46:02.558 [DEBUG] [Thread-184869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:46:02.559 [DEBUG] [Thread-184869] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:46:02.568 [DEBUG] [Thread-184869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:46:02.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:46:02.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-14T11:46:02.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-14T11:46:02.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:46:02.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:46:02.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:46:02.606 [DEBUG] [Thread-184869] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:46:03.397 [DEBUG] [Thread-184871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:46:15.376 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:46:15.377 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:46:18.449 [DEBUG] [Thread-184872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:46:19.853 [DEBUG] [Thread-184873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:46:32.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:46:32.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:46:32.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-14T11:46:33.486 [DEBUG] [Thread-184874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:46:34.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 45, 52), 9.28, 53.26, 0.0, 28.5, 12.64, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:46:34.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:45:52
2026-02-14T11:46:35.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:46:35.587 [DEBUG] [Thread-184875] [transport.py] [_log()] starting thread (client mode): 0xa2d19510
2026-02-14T11:46:35.587 [DEBUG] [Thread-184875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:46:35.609 [DEBUG] [Thread-184875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:46:35.609 [INFO] [Thread-184875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:46:35.611 [DEBUG] [Thread-184875] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:46:35.612 [DEBUG] [Thread-184875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:46:35.612 [DEBUG] [Thread-184875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:46:35.612 [DEBUG] [Thread-184875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:46:35.612 [DEBUG] [Thread-184875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:46:35.612 [DEBUG] [Thread-184875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:46:35.612 [DEBUG] [Thread-184875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:46:35.612 [DEBUG] [Thread-184875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:46:35.613 [DEBUG] [Thread-184875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:46:35.613 [DEBUG] [Thread-184875] [transport.py] [_log()] client lang: <none>
2026-02-14T11:46:35.613 [DEBUG] [Thread-184875] [transport.py] [_log()] server lang: <none>
2026-02-14T11:46:35.613 [DEBUG] [Thread-184875] [transport.py] [_log()] kex follows: False
2026-02-14T11:46:35.613 [DEBUG] [Thread-184875] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:46:35.613 [DEBUG] [Thread-184875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:46:35.613 [DEBUG] [Thread-184875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:46:35.614 [DEBUG] [Thread-184875] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:46:35.614 [DEBUG] [Thread-184875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:46:35.614 [DEBUG] [Thread-184875] [transport.py] [_log()] Compression: none
2026-02-14T11:46:35.614 [DEBUG] [Thread-184875] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:46:35.633 [DEBUG] [Thread-184875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:46:35.634 [DEBUG] [Thread-184875] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:46:35.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:46:35.635 [DEBUG] [Thread-184875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:46:35.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:46:35.637 [DEBUG] [Thread-184875] [transport.py] [_log()] userauth is OK
2026-02-14T11:46:35.637 [DEBUG] [Thread-184875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:46:35.637 [DEBUG] [Thread-184875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:46:35.638 [DEBUG] [Thread-184875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:46:35.638 [DEBUG] [Thread-184875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:46:35.675 [INFO] [Thread-184875] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:46:35.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:46:36.329 [DEBUG] [Thread-184875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:46:36.329 [DEBUG] [Thread-184875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:46:36.329 [DEBUG] [Thread-184875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:46:36.369 [DEBUG] [Thread-184875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:46:36.370 [DEBUG] [Thread-184875] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:46:36.373 [DEBUG] [Thread-184875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:46:36.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:46:36.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:46:36.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:46:36.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:46:36.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:46:36.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:46:36.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:46:36.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:46:36.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:46:36.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.407055 -999.00  +13.40  20.25     56   +4.80 1 2 1 1 1   888    0 8.25 12.84 ----- 25.3 20.2 151.8 34.1 20.1 -24.3 18.9 -23.1 18.4 -21.6 19.4 -23.6
2026-02-14T11:46:36.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:46:36.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:46:36.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.407055
2026-02-14T11:46:36.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:46:36.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:46:36.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:46:36.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:46:36.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:46:36.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:45:52', tmtdew=9.28, humidity=53.26, cloud=0.0, wind=28.5, temperature=12.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:46:09.552', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:46:36.405 [DEBUG] [Thread-184875] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:46:36.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-14T11:46:36.515 [DEBUG] [Thread-184878] [transport.py] [_log()] starting thread (client mode): 0xa2ddca90
2026-02-14T11:46:36.515 [DEBUG] [Thread-184878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:46:36.531 [DEBUG] [Thread-184878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:46:36.531 [INFO] [Thread-184878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:46:36.539 [DEBUG] [Thread-184878] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:46:36.539 [DEBUG] [Thread-184878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:46:36.539 [DEBUG] [Thread-184878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:46:36.539 [DEBUG] [Thread-184878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:46:36.539 [DEBUG] [Thread-184878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:46:36.539 [DEBUG] [Thread-184878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:46:36.539 [DEBUG] [Thread-184878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:46:36.539 [DEBUG] [Thread-184878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:46:36.540 [DEBUG] [Thread-184878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:46:36.540 [DEBUG] [Thread-184878] [transport.py] [_log()] client lang: <none>
2026-02-14T11:46:36.540 [DEBUG] [Thread-184878] [transport.py] [_log()] server lang: <none>
2026-02-14T11:46:36.540 [DEBUG] [Thread-184878] [transport.py] [_log()] kex follows: False
2026-02-14T11:46:36.540 [DEBUG] [Thread-184878] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:46:36.540 [DEBUG] [Thread-184878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:46:36.540 [DEBUG] [Thread-184878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:46:36.540 [DEBUG] [Thread-184878] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:46:36.540 [DEBUG] [Thread-184878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:46:36.540 [DEBUG] [Thread-184878] [transport.py] [_log()] Compression: none
2026-02-14T11:46:36.540 [DEBUG] [Thread-184878] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:46:36.596 [DEBUG] [Thread-184878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:46:36.597 [DEBUG] [Thread-184878] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:46:36.597 [DEBUG] [Thread-184878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:46:36.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:46:36.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:46:36.652 [DEBUG] [Thread-184878] [transport.py] [_log()] userauth is OK
2026-02-14T11:46:36.652 [DEBUG] [Thread-184878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:46:36.652 [DEBUG] [Thread-184878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:46:36.653 [DEBUG] [Thread-184878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:46:36.653 [DEBUG] [Thread-184878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:46:36.671 [INFO] [Thread-184878] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:46:36.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-14T11:46:36.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:46:37.461 [DEBUG] [Thread-184878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:46:37.461 [DEBUG] [Thread-184878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:46:37.508 [DEBUG] [Thread-184878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:46:37.509 [DEBUG] [Thread-184878] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:46:37.518 [DEBUG] [Thread-184878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:46:37.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:46:37.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:46:37.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-14T11:46:37.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:46:37.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:46:37.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:46:37.558 [DEBUG] [Thread-184878] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:46:48.523 [DEBUG] [Thread-184880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:47:03.575 [DEBUG] [Thread-184881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:47:07.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:47:07.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:47:07.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-14T11:47:09.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 46, 29), 9.23, 53.46, 0.0, 32.73, 12.67, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:47:09.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:46:29
2026-02-14T11:47:10.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:47:10.586 [DEBUG] [Thread-184882] [transport.py] [_log()] starting thread (client mode): 0xa2d19960
2026-02-14T11:47:10.587 [DEBUG] [Thread-184882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:47:10.607 [DEBUG] [Thread-184882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:47:10.607 [INFO] [Thread-184882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:47:10.610 [DEBUG] [Thread-184882] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:47:10.610 [DEBUG] [Thread-184882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:47:10.611 [DEBUG] [Thread-184882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:47:10.611 [DEBUG] [Thread-184882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:47:10.611 [DEBUG] [Thread-184882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:47:10.611 [DEBUG] [Thread-184882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:47:10.611 [DEBUG] [Thread-184882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:47:10.611 [DEBUG] [Thread-184882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:47:10.611 [DEBUG] [Thread-184882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:47:10.611 [DEBUG] [Thread-184882] [transport.py] [_log()] client lang: <none>
2026-02-14T11:47:10.611 [DEBUG] [Thread-184882] [transport.py] [_log()] server lang: <none>
2026-02-14T11:47:10.611 [DEBUG] [Thread-184882] [transport.py] [_log()] kex follows: False
2026-02-14T11:47:10.611 [DEBUG] [Thread-184882] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:47:10.611 [DEBUG] [Thread-184882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:47:10.611 [DEBUG] [Thread-184882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:47:10.611 [DEBUG] [Thread-184882] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:47:10.611 [DEBUG] [Thread-184882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:47:10.611 [DEBUG] [Thread-184882] [transport.py] [_log()] Compression: none
2026-02-14T11:47:10.611 [DEBUG] [Thread-184882] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:47:10.628 [DEBUG] [Thread-184882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:47:10.629 [DEBUG] [Thread-184882] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:47:10.629 [DEBUG] [Thread-184882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:47:10.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:47:10.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:47:10.632 [DEBUG] [Thread-184882] [transport.py] [_log()] userauth is OK
2026-02-14T11:47:10.632 [DEBUG] [Thread-184882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:47:10.632 [DEBUG] [Thread-184882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:47:10.632 [DEBUG] [Thread-184882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:47:10.632 [DEBUG] [Thread-184882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:47:10.657 [INFO] [Thread-184882] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:47:10.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:47:11.301 [DEBUG] [Thread-184882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:47:11.302 [DEBUG] [Thread-184882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:47:11.302 [DEBUG] [Thread-184882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:47:11.342 [DEBUG] [Thread-184882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:47:11.342 [DEBUG] [Thread-184882] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:47:11.345 [DEBUG] [Thread-184882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:47:11.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:47:11.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:47:11.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:47:11.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:47:11.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:47:11.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:47:11.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:47:11.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:47:11.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:47:11.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.407403 -999.00  +13.50  22.03     56   +5.10 1 2 1 1 1   888    0 8.39 14.44 ----- 31.7 22.0 139.6 38.3 20.2 -24.5 19.0 -23.1 18.5 -22.4 19.5 -24.4
2026-02-14T11:47:11.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:47:11.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:47:11.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.407403
2026-02-14T11:47:11.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:47:11.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:47:11.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:47:11.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:47:11.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:47:11.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:46:29', tmtdew=9.23, humidity=53.46, cloud=0.0, wind=32.73, temperature=12.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:46:39.619', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:47:11.370 [DEBUG] [Thread-184882] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:47:11.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-14T11:47:11.466 [DEBUG] [Thread-184885] [transport.py] [_log()] starting thread (client mode): 0xa2db5cc0
2026-02-14T11:47:11.467 [DEBUG] [Thread-184885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:47:11.481 [DEBUG] [Thread-184885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:47:11.482 [INFO] [Thread-184885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:47:11.489 [DEBUG] [Thread-184885] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:47:11.490 [DEBUG] [Thread-184885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:47:11.490 [DEBUG] [Thread-184885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:47:11.490 [DEBUG] [Thread-184885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:47:11.490 [DEBUG] [Thread-184885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:47:11.490 [DEBUG] [Thread-184885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:47:11.490 [DEBUG] [Thread-184885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:47:11.490 [DEBUG] [Thread-184885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:47:11.490 [DEBUG] [Thread-184885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:47:11.490 [DEBUG] [Thread-184885] [transport.py] [_log()] client lang: <none>
2026-02-14T11:47:11.490 [DEBUG] [Thread-184885] [transport.py] [_log()] server lang: <none>
2026-02-14T11:47:11.490 [DEBUG] [Thread-184885] [transport.py] [_log()] kex follows: False
2026-02-14T11:47:11.490 [DEBUG] [Thread-184885] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:47:11.490 [DEBUG] [Thread-184885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:47:11.490 [DEBUG] [Thread-184885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:47:11.490 [DEBUG] [Thread-184885] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:47:11.490 [DEBUG] [Thread-184885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:47:11.490 [DEBUG] [Thread-184885] [transport.py] [_log()] Compression: none
2026-02-14T11:47:11.491 [DEBUG] [Thread-184885] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:47:11.550 [DEBUG] [Thread-184885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:47:11.551 [DEBUG] [Thread-184885] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:47:11.552 [DEBUG] [Thread-184885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:47:11.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:47:11.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:47:11.609 [DEBUG] [Thread-184885] [transport.py] [_log()] userauth is OK
2026-02-14T11:47:11.609 [DEBUG] [Thread-184885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:47:11.610 [DEBUG] [Thread-184885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:47:11.610 [DEBUG] [Thread-184885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:47:11.610 [DEBUG] [Thread-184885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:47:11.633 [INFO] [Thread-184885] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:47:11.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-14T11:47:11.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:47:12.445 [DEBUG] [Thread-184885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:47:12.445 [DEBUG] [Thread-184885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:47:12.494 [DEBUG] [Thread-184885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:47:12.494 [DEBUG] [Thread-184885] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:47:12.503 [DEBUG] [Thread-184885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:47:12.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:47:12.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:47:12.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:47:12.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:47:12.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:47:12.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:47:12.541 [DEBUG] [Thread-184885] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:47:15.521 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:47:15.522 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:47:18.615 [DEBUG] [Thread-184887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:47:19.889 [DEBUG] [Thread-184888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:47:33.670 [DEBUG] [Thread-184889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:47:42.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:47:42.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:47:42.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-14T11:47:44.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 47, 5), 9.24, 53.46, 0.0, 34.49, 12.81, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:47:44.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:47:05
2026-02-14T11:47:44.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:47:45.101 [DEBUG] [Thread-184890] [transport.py] [_log()] starting thread (client mode): 0xa2d19fc0
2026-02-14T11:47:45.101 [DEBUG] [Thread-184890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:47:45.121 [DEBUG] [Thread-184890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:47:45.122 [INFO] [Thread-184890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:47:45.124 [DEBUG] [Thread-184890] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:47:45.125 [DEBUG] [Thread-184890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:47:45.125 [DEBUG] [Thread-184890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:47:45.125 [DEBUG] [Thread-184890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:47:45.125 [DEBUG] [Thread-184890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:47:45.125 [DEBUG] [Thread-184890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:47:45.125 [DEBUG] [Thread-184890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:47:45.125 [DEBUG] [Thread-184890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:47:45.125 [DEBUG] [Thread-184890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:47:45.125 [DEBUG] [Thread-184890] [transport.py] [_log()] client lang: <none>
2026-02-14T11:47:45.125 [DEBUG] [Thread-184890] [transport.py] [_log()] server lang: <none>
2026-02-14T11:47:45.125 [DEBUG] [Thread-184890] [transport.py] [_log()] kex follows: False
2026-02-14T11:47:45.125 [DEBUG] [Thread-184890] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:47:45.125 [DEBUG] [Thread-184890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:47:45.126 [DEBUG] [Thread-184890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:47:45.126 [DEBUG] [Thread-184890] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:47:45.126 [DEBUG] [Thread-184890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:47:45.126 [DEBUG] [Thread-184890] [transport.py] [_log()] Compression: none
2026-02-14T11:47:45.126 [DEBUG] [Thread-184890] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:47:45.144 [DEBUG] [Thread-184890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:47:45.145 [DEBUG] [Thread-184890] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:47:45.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:47:45.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:47:45.147 [DEBUG] [Thread-184890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:47:45.148 [DEBUG] [Thread-184890] [transport.py] [_log()] userauth is OK
2026-02-14T11:47:45.149 [DEBUG] [Thread-184890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:47:45.149 [DEBUG] [Thread-184890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:47:45.149 [DEBUG] [Thread-184890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:47:45.149 [DEBUG] [Thread-184890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:47:45.170 [INFO] [Thread-184890] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:47:45.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:47:45.795 [DEBUG] [Thread-184890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:47:45.795 [DEBUG] [Thread-184890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:47:45.796 [DEBUG] [Thread-184890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:47:45.836 [DEBUG] [Thread-184890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:47:45.837 [DEBUG] [Thread-184890] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:47:45.840 [DEBUG] [Thread-184890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:47:45.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:47:45.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:47:45.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:47:45.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:47:45.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:47:45.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:47:45.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:47:45.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:47:45.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:47:45.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.407750 -999.00  +13.50  36.45     56   +5.00 1 1 2 1 1   888    0 8.42 14.71 ----- 30.8 36.5 144.1 44.7 20.2 -24.1 19.1 -23.8 18.5 -23.3 19.6 -23.9
2026-02-14T11:47:45.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:47:45.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:47:45.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.407750
2026-02-14T11:47:45.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:47:45.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:47:45.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:47:45.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:47:45.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:47:45.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:47:05', tmtdew=9.24, humidity=53.46, cloud=0.0, wind=34.49, temperature=12.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:47:09.600', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:47:45.868 [DEBUG] [Thread-184890] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:47:45.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-14T11:47:45.966 [DEBUG] [Thread-184893] [transport.py] [_log()] starting thread (client mode): 0xa57585b0
2026-02-14T11:47:45.966 [DEBUG] [Thread-184893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:47:45.980 [DEBUG] [Thread-184893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:47:45.981 [INFO] [Thread-184893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:47:45.988 [DEBUG] [Thread-184893] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:47:45.988 [DEBUG] [Thread-184893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:47:45.989 [DEBUG] [Thread-184893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:47:45.989 [DEBUG] [Thread-184893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:47:45.989 [DEBUG] [Thread-184893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:47:45.989 [DEBUG] [Thread-184893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:47:45.989 [DEBUG] [Thread-184893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:47:45.989 [DEBUG] [Thread-184893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:47:45.989 [DEBUG] [Thread-184893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:47:45.989 [DEBUG] [Thread-184893] [transport.py] [_log()] client lang: <none>
2026-02-14T11:47:45.989 [DEBUG] [Thread-184893] [transport.py] [_log()] server lang: <none>
2026-02-14T11:47:45.989 [DEBUG] [Thread-184893] [transport.py] [_log()] kex follows: False
2026-02-14T11:47:45.989 [DEBUG] [Thread-184893] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:47:45.989 [DEBUG] [Thread-184893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:47:45.989 [DEBUG] [Thread-184893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:47:45.989 [DEBUG] [Thread-184893] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:47:45.989 [DEBUG] [Thread-184893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:47:45.989 [DEBUG] [Thread-184893] [transport.py] [_log()] Compression: none
2026-02-14T11:47:45.989 [DEBUG] [Thread-184893] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:47:46.046 [DEBUG] [Thread-184893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:47:46.047 [DEBUG] [Thread-184893] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:47:46.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:47:46.048 [DEBUG] [Thread-184893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:47:46.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:47:46.102 [DEBUG] [Thread-184893] [transport.py] [_log()] userauth is OK
2026-02-14T11:47:46.103 [DEBUG] [Thread-184893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:47:46.103 [DEBUG] [Thread-184893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:47:46.103 [DEBUG] [Thread-184893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:47:46.103 [DEBUG] [Thread-184893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:47:46.121 [INFO] [Thread-184893] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:47:46.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T11:47:46.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:47:46.959 [DEBUG] [Thread-184893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:47:46.959 [DEBUG] [Thread-184893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:47:47.007 [DEBUG] [Thread-184893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:47:47.007 [DEBUG] [Thread-184893] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:47:47.015 [DEBUG] [Thread-184893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:47:47.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:47:47.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-14T11:47:47.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-14T11:47:47.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:47:47.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:47:47.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:47:47.047 [DEBUG] [Thread-184893] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:47:48.706 [DEBUG] [Thread-184895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:48:03.758 [DEBUG] [Thread-184896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:48:15.661 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:48:15.662 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:48:17.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:48:17.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:48:17.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T11:48:18.796 [DEBUG] [Thread-184897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:48:19.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 47, 41), 10.17, 50.29, 0.0, 35.57, 14.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:48:19.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:47:41
2026-02-14T11:48:19.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:48:19.913 [DEBUG] [Thread-184898] [transport.py] [_log()] starting thread (client mode): 0xa575ac50
2026-02-14T11:48:19.913 [DEBUG] [Thread-184898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:48:19.932 [DEBUG] [Thread-184898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:48:19.932 [INFO] [Thread-184898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:48:19.933 [DEBUG] [Thread-184899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:48:19.936 [DEBUG] [Thread-184898] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:48:19.936 [DEBUG] [Thread-184898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:48:19.936 [DEBUG] [Thread-184898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:48:19.936 [DEBUG] [Thread-184898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:48:19.936 [DEBUG] [Thread-184898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:48:19.936 [DEBUG] [Thread-184898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:48:19.936 [DEBUG] [Thread-184898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:48:19.936 [DEBUG] [Thread-184898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:48:19.936 [DEBUG] [Thread-184898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:48:19.936 [DEBUG] [Thread-184898] [transport.py] [_log()] client lang: <none>
2026-02-14T11:48:19.936 [DEBUG] [Thread-184898] [transport.py] [_log()] server lang: <none>
2026-02-14T11:48:19.936 [DEBUG] [Thread-184898] [transport.py] [_log()] kex follows: False
2026-02-14T11:48:19.936 [DEBUG] [Thread-184898] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:48:19.936 [DEBUG] [Thread-184898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:48:19.936 [DEBUG] [Thread-184898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:48:19.936 [DEBUG] [Thread-184898] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:48:19.936 [DEBUG] [Thread-184898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:48:19.936 [DEBUG] [Thread-184898] [transport.py] [_log()] Compression: none
2026-02-14T11:48:19.936 [DEBUG] [Thread-184898] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:48:19.955 [DEBUG] [Thread-184898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:48:19.956 [DEBUG] [Thread-184898] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:48:19.956 [DEBUG] [Thread-184898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:48:19.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:48:19.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:48:19.957 [DEBUG] [Thread-184898] [transport.py] [_log()] userauth is OK
2026-02-14T11:48:19.958 [DEBUG] [Thread-184898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:48:19.958 [DEBUG] [Thread-184898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:48:19.958 [DEBUG] [Thread-184898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:48:19.958 [DEBUG] [Thread-184898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:48:19.976 [INFO] [Thread-184898] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:48:19.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:48:20.624 [DEBUG] [Thread-184898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:48:20.624 [DEBUG] [Thread-184898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:48:20.624 [DEBUG] [Thread-184898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:48:20.665 [DEBUG] [Thread-184898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:48:20.666 [DEBUG] [Thread-184898] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:48:20.669 [DEBUG] [Thread-184898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:48:20.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:48:20.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:48:20.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:48:20.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:48:20.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:48:20.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:48:20.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:48:20.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:48:20.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:48:20.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.408097 -999.00  +13.10  23.13     57   +5.00 1 1 1 1 1   888    0 8.31 12.47 ----- 31.1 23.1 147.0 35.5 20.0 -25.6 18.9 -23.2 18.4 -22.9 19.4 -24.8
2026-02-14T11:48:20.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:48:20.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:48:20.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.408097
2026-02-14T11:48:20.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:48:20.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:48:20.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:48:20.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:48:20.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:48:20.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:47:41', tmtdew=10.17, humidity=50.29, cloud=0.0, wind=35.57, temperature=14.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:47:39.581', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:48:20.706 [DEBUG] [Thread-184898] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:48:20.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-14T11:48:20.801 [DEBUG] [Thread-184902] [transport.py] [_log()] starting thread (client mode): 0xa2d138b0
2026-02-14T11:48:20.802 [DEBUG] [Thread-184902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:48:20.816 [DEBUG] [Thread-184902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:48:20.816 [INFO] [Thread-184902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:48:20.823 [DEBUG] [Thread-184902] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:48:20.824 [DEBUG] [Thread-184902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:48:20.824 [DEBUG] [Thread-184902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:48:20.824 [DEBUG] [Thread-184902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:48:20.824 [DEBUG] [Thread-184902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:48:20.824 [DEBUG] [Thread-184902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:48:20.824 [DEBUG] [Thread-184902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:48:20.824 [DEBUG] [Thread-184902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:48:20.825 [DEBUG] [Thread-184902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:48:20.825 [DEBUG] [Thread-184902] [transport.py] [_log()] client lang: <none>
2026-02-14T11:48:20.825 [DEBUG] [Thread-184902] [transport.py] [_log()] server lang: <none>
2026-02-14T11:48:20.825 [DEBUG] [Thread-184902] [transport.py] [_log()] kex follows: False
2026-02-14T11:48:20.825 [DEBUG] [Thread-184902] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:48:20.825 [DEBUG] [Thread-184902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:48:20.825 [DEBUG] [Thread-184902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:48:20.825 [DEBUG] [Thread-184902] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:48:20.826 [DEBUG] [Thread-184902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:48:20.826 [DEBUG] [Thread-184902] [transport.py] [_log()] Compression: none
2026-02-14T11:48:20.826 [DEBUG] [Thread-184902] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:48:20.883 [DEBUG] [Thread-184902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:48:20.884 [DEBUG] [Thread-184902] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:48:20.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:48:20.885 [DEBUG] [Thread-184902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:48:20.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:48:20.939 [DEBUG] [Thread-184902] [transport.py] [_log()] userauth is OK
2026-02-14T11:48:20.940 [DEBUG] [Thread-184902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:48:20.940 [DEBUG] [Thread-184902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:48:20.940 [DEBUG] [Thread-184902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:48:20.940 [DEBUG] [Thread-184902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:48:20.959 [INFO] [Thread-184902] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:48:20.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-14T11:48:20.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:48:21.736 [DEBUG] [Thread-184902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:48:21.736 [DEBUG] [Thread-184902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:48:21.785 [DEBUG] [Thread-184902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:48:21.786 [DEBUG] [Thread-184902] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:48:21.795 [DEBUG] [Thread-184902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:48:21.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:48:21.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:48:21.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-14T11:48:21.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:48:21.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:48:21.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:48:21.838 [DEBUG] [Thread-184902] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:48:33.833 [DEBUG] [Thread-184904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:48:48.886 [DEBUG] [Thread-184905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:48:51.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:48:51.841 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:48:51.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-14T11:48:53.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 48, 17), 9.48, 52.33, 0.0, 37.42, 13.19, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:48:53.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:48:17
2026-02-14T11:48:54.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:48:54.321 [DEBUG] [Thread-184906] [transport.py] [_log()] starting thread (client mode): 0xa2d11630
2026-02-14T11:48:54.321 [DEBUG] [Thread-184906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:48:54.341 [DEBUG] [Thread-184906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:48:54.341 [INFO] [Thread-184906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:48:54.344 [DEBUG] [Thread-184906] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:48:54.344 [DEBUG] [Thread-184906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:48:54.344 [DEBUG] [Thread-184906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:48:54.344 [DEBUG] [Thread-184906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:48:54.344 [DEBUG] [Thread-184906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:48:54.344 [DEBUG] [Thread-184906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:48:54.344 [DEBUG] [Thread-184906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:48:54.344 [DEBUG] [Thread-184906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:48:54.345 [DEBUG] [Thread-184906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:48:54.345 [DEBUG] [Thread-184906] [transport.py] [_log()] client lang: <none>
2026-02-14T11:48:54.345 [DEBUG] [Thread-184906] [transport.py] [_log()] server lang: <none>
2026-02-14T11:48:54.345 [DEBUG] [Thread-184906] [transport.py] [_log()] kex follows: False
2026-02-14T11:48:54.345 [DEBUG] [Thread-184906] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:48:54.345 [DEBUG] [Thread-184906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:48:54.345 [DEBUG] [Thread-184906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:48:54.345 [DEBUG] [Thread-184906] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:48:54.345 [DEBUG] [Thread-184906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:48:54.345 [DEBUG] [Thread-184906] [transport.py] [_log()] Compression: none
2026-02-14T11:48:54.345 [DEBUG] [Thread-184906] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:48:54.365 [DEBUG] [Thread-184906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:48:54.365 [DEBUG] [Thread-184906] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:48:54.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:48:54.366 [DEBUG] [Thread-184906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:48:54.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:48:54.369 [DEBUG] [Thread-184906] [transport.py] [_log()] userauth is OK
2026-02-14T11:48:54.370 [DEBUG] [Thread-184906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:48:54.370 [DEBUG] [Thread-184906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:48:54.370 [DEBUG] [Thread-184906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:48:54.370 [DEBUG] [Thread-184906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:48:54.395 [INFO] [Thread-184906] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:48:54.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:48:55.030 [DEBUG] [Thread-184906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:48:55.030 [DEBUG] [Thread-184906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:48:55.030 [DEBUG] [Thread-184906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:48:55.071 [DEBUG] [Thread-184906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:48:55.071 [DEBUG] [Thread-184906] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:48:55.075 [DEBUG] [Thread-184906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:48:55.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:48:55.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:48:55.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:48:55.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:48:55.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:48:55.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:48:55.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:48:55.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:48:55.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:48:55.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.408445 -999.00  +12.80  29.33     58   +4.90 1 1 1 1 1   888    0 8.19 10.44 ----- 25.4 29.3 143.4 34.0 19.8 -26.2 18.7 -23.7 18.4 -23.7 19.4 -26.6
2026-02-14T11:48:55.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:48:55.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:48:55.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.408445
2026-02-14T11:48:55.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:48:55.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:48:55.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:48:55.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:48:55.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:48:55.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:48:17', tmtdew=9.48, humidity=52.33, cloud=0.0, wind=37.42, temperature=13.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:48:09.648', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:48:55.102 [DEBUG] [Thread-184906] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:48:55.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-14T11:48:55.210 [DEBUG] [Thread-184909] [transport.py] [_log()] starting thread (client mode): 0xa2d11930
2026-02-14T11:48:55.210 [DEBUG] [Thread-184909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:48:55.226 [DEBUG] [Thread-184909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:48:55.226 [INFO] [Thread-184909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:48:55.234 [DEBUG] [Thread-184909] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:48:55.234 [DEBUG] [Thread-184909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:48:55.234 [DEBUG] [Thread-184909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:48:55.234 [DEBUG] [Thread-184909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:48:55.234 [DEBUG] [Thread-184909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:48:55.234 [DEBUG] [Thread-184909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:48:55.234 [DEBUG] [Thread-184909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:48:55.234 [DEBUG] [Thread-184909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:48:55.234 [DEBUG] [Thread-184909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:48:55.234 [DEBUG] [Thread-184909] [transport.py] [_log()] client lang: <none>
2026-02-14T11:48:55.235 [DEBUG] [Thread-184909] [transport.py] [_log()] server lang: <none>
2026-02-14T11:48:55.235 [DEBUG] [Thread-184909] [transport.py] [_log()] kex follows: False
2026-02-14T11:48:55.235 [DEBUG] [Thread-184909] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:48:55.235 [DEBUG] [Thread-184909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:48:55.235 [DEBUG] [Thread-184909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:48:55.235 [DEBUG] [Thread-184909] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:48:55.235 [DEBUG] [Thread-184909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:48:55.235 [DEBUG] [Thread-184909] [transport.py] [_log()] Compression: none
2026-02-14T11:48:55.235 [DEBUG] [Thread-184909] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:48:55.292 [DEBUG] [Thread-184909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:48:55.293 [DEBUG] [Thread-184909] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:48:55.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:48:55.294 [DEBUG] [Thread-184909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:48:55.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:48:55.347 [DEBUG] [Thread-184909] [transport.py] [_log()] userauth is OK
2026-02-14T11:48:55.347 [DEBUG] [Thread-184909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:48:55.348 [DEBUG] [Thread-184909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:48:55.348 [DEBUG] [Thread-184909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:48:55.348 [DEBUG] [Thread-184909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:48:55.361 [INFO] [Thread-184909] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:48:55.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-14T11:48:55.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:48:56.159 [DEBUG] [Thread-184909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:48:56.159 [DEBUG] [Thread-184909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:48:56.207 [DEBUG] [Thread-184909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:48:56.208 [DEBUG] [Thread-184909] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:48:56.217 [DEBUG] [Thread-184909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:48:56.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:48:56.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-14T11:48:56.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-14T11:48:56.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:48:56.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:48:56.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:48:56.253 [DEBUG] [Thread-184909] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:49:03.923 [DEBUG] [Thread-184911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:49:15.802 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:49:15.803 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:49:18.971 [DEBUG] [Thread-184912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:49:19.966 [DEBUG] [Thread-184913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:49:26.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:49:26.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:49:26.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-14T11:49:28.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 48, 53), 9.43, 52.99, 0.0, 37.05, 13.16, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:49:28.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:48:53
2026-02-14T11:49:28.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:49:28.940 [DEBUG] [Thread-184914] [transport.py] [_log()] starting thread (client mode): 0xa575a2c0
2026-02-14T11:49:28.941 [DEBUG] [Thread-184914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:49:28.961 [DEBUG] [Thread-184914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:49:28.961 [INFO] [Thread-184914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:49:28.964 [DEBUG] [Thread-184914] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:49:28.964 [DEBUG] [Thread-184914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:49:28.964 [DEBUG] [Thread-184914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:49:28.964 [DEBUG] [Thread-184914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:49:28.964 [DEBUG] [Thread-184914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:49:28.964 [DEBUG] [Thread-184914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:49:28.964 [DEBUG] [Thread-184914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:49:28.964 [DEBUG] [Thread-184914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:49:28.964 [DEBUG] [Thread-184914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:49:28.964 [DEBUG] [Thread-184914] [transport.py] [_log()] client lang: <none>
2026-02-14T11:49:28.964 [DEBUG] [Thread-184914] [transport.py] [_log()] server lang: <none>
2026-02-14T11:49:28.964 [DEBUG] [Thread-184914] [transport.py] [_log()] kex follows: False
2026-02-14T11:49:28.964 [DEBUG] [Thread-184914] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:49:28.965 [DEBUG] [Thread-184914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:49:28.965 [DEBUG] [Thread-184914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:49:28.965 [DEBUG] [Thread-184914] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:49:28.965 [DEBUG] [Thread-184914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:49:28.965 [DEBUG] [Thread-184914] [transport.py] [_log()] Compression: none
2026-02-14T11:49:28.965 [DEBUG] [Thread-184914] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:49:28.983 [DEBUG] [Thread-184914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:49:28.983 [DEBUG] [Thread-184914] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:49:28.984 [DEBUG] [Thread-184914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:49:28.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:49:28.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:49:28.986 [DEBUG] [Thread-184914] [transport.py] [_log()] userauth is OK
2026-02-14T11:49:28.986 [DEBUG] [Thread-184914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:49:28.986 [DEBUG] [Thread-184914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:49:28.986 [DEBUG] [Thread-184914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:49:28.986 [DEBUG] [Thread-184914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:49:29.003 [INFO] [Thread-184914] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:49:29.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:49:29.620 [DEBUG] [Thread-184914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:49:29.620 [DEBUG] [Thread-184914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:49:29.621 [DEBUG] [Thread-184914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:49:29.661 [DEBUG] [Thread-184914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:49:29.661 [DEBUG] [Thread-184914] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:49:29.665 [DEBUG] [Thread-184914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:49:29.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:49:29.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:49:29.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:49:29.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:49:29.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:49:29.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:49:29.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:49:29.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:49:29.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:49:29.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.409139 -999.00  +13.10  23.89     58   +5.10 1 1 1 1 1   888    0 8.15 8.88 ----- 26.8 23.9 137.6 33.7 19.9 -24.6 18.8 -24.2 18.4 -23.0 19.4 -25.5
2026-02-14T11:49:29.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:49:29.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:49:29.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.409139
2026-02-14T11:49:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:49:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:49:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:49:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:49:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:49:29.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:48:53', tmtdew=9.43, humidity=52.99, cloud=0.0, wind=37.05, temperature=13.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:49:09.610', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:49:29.692 [DEBUG] [Thread-184914] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:49:29.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-14T11:49:29.788 [DEBUG] [Thread-184917] [transport.py] [_log()] starting thread (client mode): 0xa2d18c40
2026-02-14T11:49:29.788 [DEBUG] [Thread-184917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:49:29.804 [DEBUG] [Thread-184917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:49:29.804 [INFO] [Thread-184917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:49:29.811 [DEBUG] [Thread-184917] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:49:29.812 [DEBUG] [Thread-184917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:49:29.812 [DEBUG] [Thread-184917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:49:29.812 [DEBUG] [Thread-184917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:49:29.812 [DEBUG] [Thread-184917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:49:29.812 [DEBUG] [Thread-184917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:49:29.812 [DEBUG] [Thread-184917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:49:29.813 [DEBUG] [Thread-184917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:49:29.813 [DEBUG] [Thread-184917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:49:29.813 [DEBUG] [Thread-184917] [transport.py] [_log()] client lang: <none>
2026-02-14T11:49:29.813 [DEBUG] [Thread-184917] [transport.py] [_log()] server lang: <none>
2026-02-14T11:49:29.813 [DEBUG] [Thread-184917] [transport.py] [_log()] kex follows: False
2026-02-14T11:49:29.813 [DEBUG] [Thread-184917] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:49:29.813 [DEBUG] [Thread-184917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:49:29.813 [DEBUG] [Thread-184917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:49:29.813 [DEBUG] [Thread-184917] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:49:29.814 [DEBUG] [Thread-184917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:49:29.814 [DEBUG] [Thread-184917] [transport.py] [_log()] Compression: none
2026-02-14T11:49:29.814 [DEBUG] [Thread-184917] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:49:29.870 [DEBUG] [Thread-184917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:49:29.871 [DEBUG] [Thread-184917] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:49:29.871 [DEBUG] [Thread-184917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:49:29.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:49:29.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:49:29.929 [DEBUG] [Thread-184917] [transport.py] [_log()] userauth is OK
2026-02-14T11:49:29.929 [DEBUG] [Thread-184917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:49:29.930 [DEBUG] [Thread-184917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:49:29.930 [DEBUG] [Thread-184917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:49:29.930 [DEBUG] [Thread-184917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:49:29.950 [INFO] [Thread-184917] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:49:29.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-14T11:49:29.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:49:30.768 [DEBUG] [Thread-184917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:49:30.769 [DEBUG] [Thread-184917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:49:30.816 [DEBUG] [Thread-184917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:49:30.817 [DEBUG] [Thread-184917] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:49:30.826 [DEBUG] [Thread-184917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:49:30.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:49:30.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:49:30.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-14T11:49:30.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:49:30.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:49:30.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:49:30.863 [DEBUG] [Thread-184917] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:49:34.006 [DEBUG] [Thread-184919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:49:49.059 [DEBUG] [Thread-184920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:50:00.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:50:00.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:50:00.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T11:50:02.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 49, 28), 9.63, 52.31, 0.0, 35.66, 13.24, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:50:02.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:49:28
2026-02-14T11:50:03.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:50:03.511 [DEBUG] [Thread-184921] [transport.py] [_log()] starting thread (client mode): 0xa575bd60
2026-02-14T11:50:03.512 [DEBUG] [Thread-184921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:50:03.532 [DEBUG] [Thread-184921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:50:03.532 [INFO] [Thread-184921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:50:03.535 [DEBUG] [Thread-184921] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:50:03.535 [DEBUG] [Thread-184921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:50:03.535 [DEBUG] [Thread-184921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:50:03.535 [DEBUG] [Thread-184921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:50:03.535 [DEBUG] [Thread-184921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:50:03.535 [DEBUG] [Thread-184921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:50:03.535 [DEBUG] [Thread-184921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:50:03.535 [DEBUG] [Thread-184921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:50:03.535 [DEBUG] [Thread-184921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:50:03.536 [DEBUG] [Thread-184921] [transport.py] [_log()] client lang: <none>
2026-02-14T11:50:03.536 [DEBUG] [Thread-184921] [transport.py] [_log()] server lang: <none>
2026-02-14T11:50:03.536 [DEBUG] [Thread-184921] [transport.py] [_log()] kex follows: False
2026-02-14T11:50:03.536 [DEBUG] [Thread-184921] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:50:03.536 [DEBUG] [Thread-184921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:50:03.536 [DEBUG] [Thread-184921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:50:03.536 [DEBUG] [Thread-184921] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:50:03.536 [DEBUG] [Thread-184921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:50:03.536 [DEBUG] [Thread-184921] [transport.py] [_log()] Compression: none
2026-02-14T11:50:03.536 [DEBUG] [Thread-184921] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:50:03.556 [DEBUG] [Thread-184921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:50:03.557 [DEBUG] [Thread-184921] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:50:03.557 [DEBUG] [Thread-184921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:50:03.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:50:03.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:50:03.602 [DEBUG] [Thread-184921] [transport.py] [_log()] userauth is OK
2026-02-14T11:50:03.603 [DEBUG] [Thread-184921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:50:03.603 [DEBUG] [Thread-184921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:50:03.603 [DEBUG] [Thread-184921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:50:03.603 [DEBUG] [Thread-184921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:50:03.630 [INFO] [Thread-184921] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:50:03.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:50:04.096 [DEBUG] [Thread-184923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:50:04.349 [DEBUG] [Thread-184921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:50:04.350 [DEBUG] [Thread-184921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:50:04.350 [DEBUG] [Thread-184921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:50:04.390 [DEBUG] [Thread-184921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:50:04.390 [DEBUG] [Thread-184921] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:50:04.394 [DEBUG] [Thread-184921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:50:04.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:50:04.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:50:04.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:50:04.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:50:04.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:50:04.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:50:04.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:50:04.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:50:04.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:50:04.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.409486 -999.00  +13.00  21.92     58   +5.00 1 1 1 1 1   888    0 8.23 8.35 ----- 20.7 21.9 152.4 32.4 19.9 -24.4 18.9 -25.5 18.4 -22.8 19.3 -25.5
2026-02-14T11:50:04.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:50:04.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:50:04.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.409486
2026-02-14T11:50:04.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:50:04.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:50:04.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:50:04.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:50:04.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:50:04.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:49:28', tmtdew=9.63, humidity=52.31, cloud=0.0, wind=35.66, temperature=13.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:49:39.590', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:50:04.420 [DEBUG] [Thread-184921] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:50:04.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-14T11:50:15.944 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:50:15.945 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:50:19.145 [DEBUG] [Thread-184925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:50:19.999 [DEBUG] [Thread-184926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:50:34.200 [DEBUG] [Thread-184927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:50:49.236 [DEBUG] [Thread-184928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:51:04.274 [DEBUG] [Thread-184929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:51:16.085 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:51:16.086 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:51:19.311 [DEBUG] [Thread-184930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:51:20.042 [DEBUG] [Thread-184931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:51:34.347 [DEBUG] [Thread-184932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:51:49.385 [DEBUG] [Thread-184933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:52:04.418 [DEBUG] [Thread-184934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:52:16.236 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:52:16.237 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:52:16.951 [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-14T11:52:19.456 [DEBUG] [Thread-184935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:52:20.082 [DEBUG] [Thread-184936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:52:34.496 [DEBUG] [Thread-184937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:52:46.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:52:46.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:52:46.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T11:52:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 52, 27), 10.45, 48.95, 0.0, 30.28, 13.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:52:49.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:52:27
2026-02-14T11:52:49.532 [DEBUG] [Thread-184938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:52:49.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:52:49.930 [DEBUG] [Thread-184939] [transport.py] [_log()] starting thread (client mode): 0xa2d196c0
2026-02-14T11:52:49.930 [DEBUG] [Thread-184939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:52:49.950 [DEBUG] [Thread-184939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:52:49.950 [INFO] [Thread-184939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:52:49.954 [DEBUG] [Thread-184939] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:52:49.954 [DEBUG] [Thread-184939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:52:49.954 [DEBUG] [Thread-184939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:52:49.954 [DEBUG] [Thread-184939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:52:49.954 [DEBUG] [Thread-184939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:52:49.954 [DEBUG] [Thread-184939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:52:49.954 [DEBUG] [Thread-184939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:52:49.954 [DEBUG] [Thread-184939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:52:49.954 [DEBUG] [Thread-184939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:52:49.954 [DEBUG] [Thread-184939] [transport.py] [_log()] client lang: <none>
2026-02-14T11:52:49.954 [DEBUG] [Thread-184939] [transport.py] [_log()] server lang: <none>
2026-02-14T11:52:49.954 [DEBUG] [Thread-184939] [transport.py] [_log()] kex follows: False
2026-02-14T11:52:49.954 [DEBUG] [Thread-184939] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:52:49.954 [DEBUG] [Thread-184939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:52:49.954 [DEBUG] [Thread-184939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:52:49.954 [DEBUG] [Thread-184939] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:52:49.954 [DEBUG] [Thread-184939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:52:49.954 [DEBUG] [Thread-184939] [transport.py] [_log()] Compression: none
2026-02-14T11:52:49.954 [DEBUG] [Thread-184939] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:52:49.975 [DEBUG] [Thread-184939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:52:49.975 [DEBUG] [Thread-184939] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:52:49.976 [DEBUG] [Thread-184939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:52:49.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:52:49.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:52:49.978 [DEBUG] [Thread-184939] [transport.py] [_log()] userauth is OK
2026-02-14T11:52:49.978 [DEBUG] [Thread-184939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:52:49.979 [DEBUG] [Thread-184939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:52:49.979 [DEBUG] [Thread-184939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:52:49.979 [DEBUG] [Thread-184939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:52:50.016 [INFO] [Thread-184939] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:52:50.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:52:50.684 [DEBUG] [Thread-184939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:52:50.685 [DEBUG] [Thread-184939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:52:50.685 [DEBUG] [Thread-184939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:52:50.726 [DEBUG] [Thread-184939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:52:50.726 [DEBUG] [Thread-184939] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:52:50.729 [DEBUG] [Thread-184939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:52:50.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:52:50.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:52:50.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:52:50.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:52:50.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:52:50.750 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:52:50.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:52:50.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:52:50.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:52:50.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.411222 -999.00  +13.10  21.47     56   +4.60 1 1 1 1 1   888    0 8.70 24.21 ----- 25.2 21.5 173.8 30.1 19.7 -25.2 18.4 -23.3 18.3 -23.3 19.2 -25.2
2026-02-14T11:52:50.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:52:50.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:52:50.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.411222
2026-02-14T11:52:50.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:52:50.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:52:50.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:52:50.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:52:50.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:52:50.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:52:27', tmtdew=10.45, humidity=48.95, cloud=0.0, wind=30.28, temperature=13.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:52:09.581', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:52:50.753 [DEBUG] [Thread-184939] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:52:50.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-14T11:52:50.848 [DEBUG] [Thread-184942] [transport.py] [_log()] starting thread (client mode): 0xa2d11b40
2026-02-14T11:52:50.849 [DEBUG] [Thread-184942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:52:50.864 [DEBUG] [Thread-184942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:52:50.864 [INFO] [Thread-184942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:52:50.872 [DEBUG] [Thread-184942] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:52:50.872 [DEBUG] [Thread-184942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:52:50.872 [DEBUG] [Thread-184942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:52:50.873 [DEBUG] [Thread-184942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:52:50.873 [DEBUG] [Thread-184942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:52:50.873 [DEBUG] [Thread-184942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:52:50.873 [DEBUG] [Thread-184942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:52:50.873 [DEBUG] [Thread-184942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:52:50.873 [DEBUG] [Thread-184942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:52:50.873 [DEBUG] [Thread-184942] [transport.py] [_log()] client lang: <none>
2026-02-14T11:52:50.873 [DEBUG] [Thread-184942] [transport.py] [_log()] server lang: <none>
2026-02-14T11:52:50.873 [DEBUG] [Thread-184942] [transport.py] [_log()] kex follows: False
2026-02-14T11:52:50.873 [DEBUG] [Thread-184942] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:52:50.873 [DEBUG] [Thread-184942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:52:50.873 [DEBUG] [Thread-184942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:52:50.873 [DEBUG] [Thread-184942] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:52:50.873 [DEBUG] [Thread-184942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:52:50.873 [DEBUG] [Thread-184942] [transport.py] [_log()] Compression: none
2026-02-14T11:52:50.873 [DEBUG] [Thread-184942] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:52:50.935 [DEBUG] [Thread-184942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:52:50.935 [DEBUG] [Thread-184942] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:52:50.936 [DEBUG] [Thread-184942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:52:50.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:52:50.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:52:51.002 [DEBUG] [Thread-184942] [transport.py] [_log()] userauth is OK
2026-02-14T11:52:51.002 [DEBUG] [Thread-184942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:52:51.002 [DEBUG] [Thread-184942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:52:51.002 [DEBUG] [Thread-184942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:52:51.002 [DEBUG] [Thread-184942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:52:51.025 [INFO] [Thread-184942] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:52:51.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T11:52:51.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:52:51.904 [DEBUG] [Thread-184942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:52:51.904 [DEBUG] [Thread-184942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:52:51.952 [DEBUG] [Thread-184942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:52:51.953 [DEBUG] [Thread-184942] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:52:51.962 [DEBUG] [Thread-184942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:52:51.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:52:51.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-14T11:52:51.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-14T11:52:51.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:52:51.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:52:51.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:52:51.999 [DEBUG] [Thread-184942] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:53:04.572 [DEBUG] [Thread-184944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:53:16.380 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:53:16.381 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:53:19.627 [DEBUG] [Thread-184945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:53:20.127 [DEBUG] [Thread-184946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:53:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:53:22.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:53:22.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-14T11:53:24.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 53, 3), 10.56, 48.6, 0.0, 34.21, 13.52, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:53:24.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:53:03
2026-02-14T11:53:25.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:53:25.210 [DEBUG] [Thread-184947] [transport.py] [_log()] starting thread (client mode): 0xa2d12dd0
2026-02-14T11:53:25.210 [DEBUG] [Thread-184947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:53:25.230 [DEBUG] [Thread-184947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:53:25.230 [INFO] [Thread-184947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:53:25.233 [DEBUG] [Thread-184947] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:53:25.233 [DEBUG] [Thread-184947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:53:25.233 [DEBUG] [Thread-184947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:53:25.233 [DEBUG] [Thread-184947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:53:25.234 [DEBUG] [Thread-184947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:53:25.234 [DEBUG] [Thread-184947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:53:25.234 [DEBUG] [Thread-184947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:53:25.234 [DEBUG] [Thread-184947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:53:25.234 [DEBUG] [Thread-184947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:53:25.234 [DEBUG] [Thread-184947] [transport.py] [_log()] client lang: <none>
2026-02-14T11:53:25.234 [DEBUG] [Thread-184947] [transport.py] [_log()] server lang: <none>
2026-02-14T11:53:25.234 [DEBUG] [Thread-184947] [transport.py] [_log()] kex follows: False
2026-02-14T11:53:25.234 [DEBUG] [Thread-184947] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:53:25.234 [DEBUG] [Thread-184947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:53:25.234 [DEBUG] [Thread-184947] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:53:25.234 [DEBUG] [Thread-184947] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:53:25.234 [DEBUG] [Thread-184947] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:53:25.234 [DEBUG] [Thread-184947] [transport.py] [_log()] Compression: none
2026-02-14T11:53:25.234 [DEBUG] [Thread-184947] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:53:25.253 [DEBUG] [Thread-184947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:53:25.254 [DEBUG] [Thread-184947] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:53:25.254 [DEBUG] [Thread-184947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:53:25.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:53:25.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:53:25.256 [DEBUG] [Thread-184947] [transport.py] [_log()] userauth is OK
2026-02-14T11:53:25.256 [DEBUG] [Thread-184947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:53:25.256 [DEBUG] [Thread-184947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:53:25.256 [DEBUG] [Thread-184947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:53:25.256 [DEBUG] [Thread-184947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:53:25.280 [INFO] [Thread-184947] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:53:25.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:53:25.926 [DEBUG] [Thread-184947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:53:25.926 [DEBUG] [Thread-184947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:53:25.927 [DEBUG] [Thread-184947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:53:25.967 [DEBUG] [Thread-184947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:53:25.967 [DEBUG] [Thread-184947] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:53:25.971 [DEBUG] [Thread-184947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:53:25.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:53:25.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:53:25.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:53:25.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:53:25.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:53:25.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:53:25.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:53:25.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:53:25.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:53:25.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.411917 -999.00  +13.20  26.91     56   +4.70 1 1 1 1 1   888    0 8.82 27.64 ----- 24.2 26.9 154.6 40.2 19.7 -26.9 18.5 -23.7 18.2 -23.4 19.2 -25.7
2026-02-14T11:53:25.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:53:25.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:53:25.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.411917
2026-02-14T11:53:25.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:53:25.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:53:25.997 [DEBUG] [Thread-184947] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:53:25.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:53:25.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:53:25.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:53:25.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:53:03', tmtdew=10.56, humidity=48.6, cloud=0.0, wind=34.21, temperature=13.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:53:09.629', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:53:26.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-14T11:53:26.101 [DEBUG] [Thread-184950] [transport.py] [_log()] starting thread (client mode): 0xa5759210
2026-02-14T11:53:26.101 [DEBUG] [Thread-184950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:53:26.116 [DEBUG] [Thread-184950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:53:26.116 [INFO] [Thread-184950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:53:26.124 [DEBUG] [Thread-184950] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:53:26.124 [DEBUG] [Thread-184950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:53:26.124 [DEBUG] [Thread-184950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:53:26.124 [DEBUG] [Thread-184950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:53:26.124 [DEBUG] [Thread-184950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:53:26.124 [DEBUG] [Thread-184950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:53:26.124 [DEBUG] [Thread-184950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:53:26.125 [DEBUG] [Thread-184950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:53:26.125 [DEBUG] [Thread-184950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:53:26.125 [DEBUG] [Thread-184950] [transport.py] [_log()] client lang: <none>
2026-02-14T11:53:26.125 [DEBUG] [Thread-184950] [transport.py] [_log()] server lang: <none>
2026-02-14T11:53:26.125 [DEBUG] [Thread-184950] [transport.py] [_log()] kex follows: False
2026-02-14T11:53:26.125 [DEBUG] [Thread-184950] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:53:26.125 [DEBUG] [Thread-184950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:53:26.125 [DEBUG] [Thread-184950] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:53:26.126 [DEBUG] [Thread-184950] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:53:26.126 [DEBUG] [Thread-184950] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:53:26.126 [DEBUG] [Thread-184950] [transport.py] [_log()] Compression: none
2026-02-14T11:53:26.126 [DEBUG] [Thread-184950] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:53:26.180 [DEBUG] [Thread-184950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:53:26.181 [DEBUG] [Thread-184950] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:53:26.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:53:26.182 [DEBUG] [Thread-184950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:53:26.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:53:26.237 [DEBUG] [Thread-184950] [transport.py] [_log()] userauth is OK
2026-02-14T11:53:26.237 [DEBUG] [Thread-184950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:53:26.237 [DEBUG] [Thread-184950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:53:26.237 [DEBUG] [Thread-184950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:53:26.237 [DEBUG] [Thread-184950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:53:26.256 [INFO] [Thread-184950] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:53:26.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T11:53:26.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:53:27.046 [DEBUG] [Thread-184950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:53:27.046 [DEBUG] [Thread-184950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:53:27.094 [DEBUG] [Thread-184950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:53:27.094 [DEBUG] [Thread-184950] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:53:27.103 [DEBUG] [Thread-184950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:53:27.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:53:27.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-14T11:53:27.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-14T11:53:27.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:53:27.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:53:27.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:53:27.138 [DEBUG] [Thread-184950] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:53:34.661 [DEBUG] [Thread-184952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:53:49.719 [DEBUG] [Thread-184953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:53:57.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:53:57.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:53:57.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T11:53:59.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 53, 38), 11.17, 47.01, 0.0, 43.15, 14.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:53:59.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:53:38
2026-02-14T11:53:59.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:53:59.627 [DEBUG] [Thread-184954] [transport.py] [_log()] starting thread (client mode): 0xa2d55240
2026-02-14T11:53:59.628 [DEBUG] [Thread-184954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:53:59.649 [DEBUG] [Thread-184954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:53:59.649 [INFO] [Thread-184954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:53:59.652 [DEBUG] [Thread-184954] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:53:59.652 [DEBUG] [Thread-184954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:53:59.652 [DEBUG] [Thread-184954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:53:59.652 [DEBUG] [Thread-184954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:53:59.652 [DEBUG] [Thread-184954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:53:59.652 [DEBUG] [Thread-184954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:53:59.652 [DEBUG] [Thread-184954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:53:59.652 [DEBUG] [Thread-184954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:53:59.652 [DEBUG] [Thread-184954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:53:59.652 [DEBUG] [Thread-184954] [transport.py] [_log()] client lang: <none>
2026-02-14T11:53:59.652 [DEBUG] [Thread-184954] [transport.py] [_log()] server lang: <none>
2026-02-14T11:53:59.652 [DEBUG] [Thread-184954] [transport.py] [_log()] kex follows: False
2026-02-14T11:53:59.652 [DEBUG] [Thread-184954] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:53:59.652 [DEBUG] [Thread-184954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:53:59.653 [DEBUG] [Thread-184954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:53:59.653 [DEBUG] [Thread-184954] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:53:59.653 [DEBUG] [Thread-184954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:53:59.653 [DEBUG] [Thread-184954] [transport.py] [_log()] Compression: none
2026-02-14T11:53:59.653 [DEBUG] [Thread-184954] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:53:59.670 [DEBUG] [Thread-184954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:53:59.670 [DEBUG] [Thread-184954] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:53:59.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:53:59.671 [DEBUG] [Thread-184954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:53:59.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:53:59.673 [DEBUG] [Thread-184954] [transport.py] [_log()] userauth is OK
2026-02-14T11:53:59.673 [DEBUG] [Thread-184954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:53:59.673 [DEBUG] [Thread-184954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:53:59.673 [DEBUG] [Thread-184954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:53:59.673 [DEBUG] [Thread-184954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:53:59.691 [INFO] [Thread-184954] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:53:59.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:54:00.278 [DEBUG] [Thread-184954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:54:00.279 [DEBUG] [Thread-184954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:54:00.279 [DEBUG] [Thread-184954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:54:00.319 [DEBUG] [Thread-184954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:54:00.319 [DEBUG] [Thread-184954] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:54:00.323 [DEBUG] [Thread-184954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:54:00.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:54:00.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:54:00.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:54:00.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:54:00.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:54:00.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:54:00.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:54:00.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:54:00.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:54:00.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.412264 -999.00  +13.20  32.91     56   +4.70 1 1 2 1 1   888    0 8.94 29.85 ----- 29.5 32.9 162.2 41.2 19.8 -25.8 18.5 -24.7 18.2 -23.9 19.3 -26.1
2026-02-14T11:54:00.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:54:00.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:54:00.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.412264
2026-02-14T11:54:00.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:54:00.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:54:00.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:54:00.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:54:00.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:54:00.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:53:38', tmtdew=11.17, humidity=47.01, cloud=0.0, wind=43.15, temperature=14.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:53:39.610', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:54:00.348 [DEBUG] [Thread-184954] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:54:00.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-14T11:54:00.442 [DEBUG] [Thread-184957] [transport.py] [_log()] starting thread (client mode): 0xa575b0a0
2026-02-14T11:54:00.442 [DEBUG] [Thread-184957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:54:00.457 [DEBUG] [Thread-184957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:54:00.457 [INFO] [Thread-184957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:54:00.464 [DEBUG] [Thread-184957] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:54:00.465 [DEBUG] [Thread-184957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:54:00.465 [DEBUG] [Thread-184957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:54:00.465 [DEBUG] [Thread-184957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:54:00.465 [DEBUG] [Thread-184957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:54:00.465 [DEBUG] [Thread-184957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:54:00.465 [DEBUG] [Thread-184957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:54:00.465 [DEBUG] [Thread-184957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:54:00.465 [DEBUG] [Thread-184957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:54:00.465 [DEBUG] [Thread-184957] [transport.py] [_log()] client lang: <none>
2026-02-14T11:54:00.466 [DEBUG] [Thread-184957] [transport.py] [_log()] server lang: <none>
2026-02-14T11:54:00.466 [DEBUG] [Thread-184957] [transport.py] [_log()] kex follows: False
2026-02-14T11:54:00.466 [DEBUG] [Thread-184957] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:54:00.466 [DEBUG] [Thread-184957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:54:00.466 [DEBUG] [Thread-184957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:54:00.466 [DEBUG] [Thread-184957] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:54:00.466 [DEBUG] [Thread-184957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:54:00.466 [DEBUG] [Thread-184957] [transport.py] [_log()] Compression: none
2026-02-14T11:54:00.467 [DEBUG] [Thread-184957] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:54:00.522 [DEBUG] [Thread-184957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:54:00.522 [DEBUG] [Thread-184957] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:54:00.523 [DEBUG] [Thread-184957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:54:00.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:54:00.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:54:00.578 [DEBUG] [Thread-184957] [transport.py] [_log()] userauth is OK
2026-02-14T11:54:00.578 [DEBUG] [Thread-184957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:54:00.578 [DEBUG] [Thread-184957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:54:00.578 [DEBUG] [Thread-184957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:54:00.578 [DEBUG] [Thread-184957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:54:00.597 [INFO] [Thread-184957] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:54:00.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-14T11:54:00.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:54:01.419 [DEBUG] [Thread-184957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:54:01.420 [DEBUG] [Thread-184957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:54:01.468 [DEBUG] [Thread-184957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:54:01.469 [DEBUG] [Thread-184957] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:54:01.478 [DEBUG] [Thread-184957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:54:01.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:54:01.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:54:01.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-14T11:54:01.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:54:01.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:54:01.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:54:01.513 [DEBUG] [Thread-184957] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:54:04.759 [DEBUG] [Thread-184959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:54:16.525 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:54:16.526 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:54:19.817 [DEBUG] [Thread-184960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:54:20.166 [DEBUG] [Thread-184961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:54:31.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:54:31.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:54:31.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-14T11:54:33.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 54, 13), 10.24, 49.92, 0.0, 37.51, 13.39, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:54:33.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:54:13
2026-02-14T11:54:33.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:54:33.917 [DEBUG] [Thread-184962] [transport.py] [_log()] starting thread (client mode): 0xa2d1b850
2026-02-14T11:54:33.917 [DEBUG] [Thread-184962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:54:33.939 [DEBUG] [Thread-184962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:54:33.940 [INFO] [Thread-184962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:54:33.943 [DEBUG] [Thread-184962] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:54:33.943 [DEBUG] [Thread-184962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:54:33.943 [DEBUG] [Thread-184962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:54:33.943 [DEBUG] [Thread-184962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:54:33.943 [DEBUG] [Thread-184962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:54:33.943 [DEBUG] [Thread-184962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:54:33.943 [DEBUG] [Thread-184962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:54:33.943 [DEBUG] [Thread-184962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:54:33.944 [DEBUG] [Thread-184962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:54:33.944 [DEBUG] [Thread-184962] [transport.py] [_log()] client lang: <none>
2026-02-14T11:54:33.944 [DEBUG] [Thread-184962] [transport.py] [_log()] server lang: <none>
2026-02-14T11:54:33.944 [DEBUG] [Thread-184962] [transport.py] [_log()] kex follows: False
2026-02-14T11:54:33.944 [DEBUG] [Thread-184962] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:54:33.944 [DEBUG] [Thread-184962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:54:33.944 [DEBUG] [Thread-184962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:54:33.944 [DEBUG] [Thread-184962] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:54:33.944 [DEBUG] [Thread-184962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:54:33.944 [DEBUG] [Thread-184962] [transport.py] [_log()] Compression: none
2026-02-14T11:54:33.944 [DEBUG] [Thread-184962] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:54:33.962 [DEBUG] [Thread-184962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:54:33.962 [DEBUG] [Thread-184962] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:54:33.963 [DEBUG] [Thread-184962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:54:33.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:54:33.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:54:33.965 [DEBUG] [Thread-184962] [transport.py] [_log()] userauth is OK
2026-02-14T11:54:33.965 [DEBUG] [Thread-184962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:54:33.965 [DEBUG] [Thread-184962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:54:33.965 [DEBUG] [Thread-184962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:54:33.965 [DEBUG] [Thread-184962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:54:33.984 [INFO] [Thread-184962] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:54:33.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:54:34.618 [DEBUG] [Thread-184962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:54:34.619 [DEBUG] [Thread-184962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:54:34.619 [DEBUG] [Thread-184962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:54:34.659 [DEBUG] [Thread-184962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:54:34.660 [DEBUG] [Thread-184962] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:54:34.663 [DEBUG] [Thread-184962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:54:34.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:54:34.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:54:34.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:54:34.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:54:34.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:54:34.688 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:54:34.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:54:34.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:54:34.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:54:34.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.412611 -999.00  +13.40  25.85     56   +4.80 1 1 1 1 1   888    0 9.16 34.15 ----- 27.0 25.9 173.8 32.6 19.7 -26.4 18.2 -26.5 18.1 -22.6 19.2 -25.9
2026-02-14T11:54:34.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:54:34.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:54:34.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.412611
2026-02-14T11:54:34.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:54:34.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:54:34.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:54:34.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:54:34.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:54:34.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:54:13', tmtdew=10.24, humidity=49.92, cloud=0.0, wind=37.51, temperature=13.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:54:09.590', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:54:34.691 [DEBUG] [Thread-184962] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:54: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-14T11:54:34.788 [DEBUG] [Thread-184965] [transport.py] [_log()] starting thread (client mode): 0xa2d18c10
2026-02-14T11:54:34.788 [DEBUG] [Thread-184965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:54:34.802 [DEBUG] [Thread-184965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:54:34.803 [INFO] [Thread-184965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:54:34.811 [DEBUG] [Thread-184965] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:54:34.811 [DEBUG] [Thread-184965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:54:34.811 [DEBUG] [Thread-184965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:54:34.811 [DEBUG] [Thread-184965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:54:34.811 [DEBUG] [Thread-184965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:54:34.811 [DEBUG] [Thread-184965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:54:34.811 [DEBUG] [Thread-184965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:54:34.811 [DEBUG] [Thread-184965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:54:34.811 [DEBUG] [Thread-184965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:54:34.811 [DEBUG] [Thread-184965] [transport.py] [_log()] client lang: <none>
2026-02-14T11:54:34.812 [DEBUG] [Thread-184965] [transport.py] [_log()] server lang: <none>
2026-02-14T11:54:34.812 [DEBUG] [Thread-184965] [transport.py] [_log()] kex follows: False
2026-02-14T11:54:34.812 [DEBUG] [Thread-184965] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:54:34.812 [DEBUG] [Thread-184965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:54:34.812 [DEBUG] [Thread-184965] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:54:34.812 [DEBUG] [Thread-184965] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:54:34.812 [DEBUG] [Thread-184965] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:54:34.812 [DEBUG] [Thread-184965] [transport.py] [_log()] Compression: none
2026-02-14T11:54:34.812 [DEBUG] [Thread-184965] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:54:34.856 [DEBUG] [Thread-184967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:54:34.873 [DEBUG] [Thread-184965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:54:34.874 [DEBUG] [Thread-184965] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:54:34.875 [DEBUG] [Thread-184965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:54:34.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:54:34.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:54:34.932 [DEBUG] [Thread-184965] [transport.py] [_log()] userauth is OK
2026-02-14T11:54:34.933 [DEBUG] [Thread-184965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:54:34.933 [DEBUG] [Thread-184965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:54:34.933 [DEBUG] [Thread-184965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:54:34.933 [DEBUG] [Thread-184965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:54:34.955 [INFO] [Thread-184965] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:54:34.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T11:54:34.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:54:35.770 [DEBUG] [Thread-184965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:54:35.771 [DEBUG] [Thread-184965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:54:35.819 [DEBUG] [Thread-184965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:54:35.819 [DEBUG] [Thread-184965] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:54:35.828 [DEBUG] [Thread-184965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:54:35.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:54:35.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:54:35.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-14T11:54:35.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:54:35.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:54:35.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:54:35.865 [DEBUG] [Thread-184965] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:54:49.909 [DEBUG] [Thread-184968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:55:04.944 [DEBUG] [Thread-184969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:55:05.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:55:05.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:55:05.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-14T11:55:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 54, 49), 9.61, 51.88, 0.0, 29.1, 12.86, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:55:07.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:54:49
2026-02-14T11:55:08.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:55:08.243 [DEBUG] [Thread-184970] [transport.py] [_log()] starting thread (client mode): 0xa2d13d60
2026-02-14T11:55:08.243 [DEBUG] [Thread-184970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:55:08.264 [DEBUG] [Thread-184970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:55:08.264 [INFO] [Thread-184970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:55:08.267 [DEBUG] [Thread-184970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:55:08.267 [DEBUG] [Thread-184970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:55:08.267 [DEBUG] [Thread-184970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:55:08.267 [DEBUG] [Thread-184970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:55:08.267 [DEBUG] [Thread-184970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:55:08.267 [DEBUG] [Thread-184970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:55:08.268 [DEBUG] [Thread-184970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:55:08.268 [DEBUG] [Thread-184970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:55:08.268 [DEBUG] [Thread-184970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:55:08.268 [DEBUG] [Thread-184970] [transport.py] [_log()] client lang: <none>
2026-02-14T11:55:08.268 [DEBUG] [Thread-184970] [transport.py] [_log()] server lang: <none>
2026-02-14T11:55:08.268 [DEBUG] [Thread-184970] [transport.py] [_log()] kex follows: False
2026-02-14T11:55:08.268 [DEBUG] [Thread-184970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:55:08.268 [DEBUG] [Thread-184970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:55:08.268 [DEBUG] [Thread-184970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:55:08.268 [DEBUG] [Thread-184970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:55:08.268 [DEBUG] [Thread-184970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:55:08.268 [DEBUG] [Thread-184970] [transport.py] [_log()] Compression: none
2026-02-14T11:55:08.268 [DEBUG] [Thread-184970] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:55:08.287 [DEBUG] [Thread-184970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:55:08.287 [DEBUG] [Thread-184970] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:55:08.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:55:08.288 [DEBUG] [Thread-184970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:55:08.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:55:08.291 [DEBUG] [Thread-184970] [transport.py] [_log()] userauth is OK
2026-02-14T11:55:08.291 [DEBUG] [Thread-184970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:55:08.291 [DEBUG] [Thread-184970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:55:08.291 [DEBUG] [Thread-184970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:55:08.291 [DEBUG] [Thread-184970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:55:08.315 [INFO] [Thread-184970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:55:08.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:55:09.047 [DEBUG] [Thread-184970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:55:09.048 [DEBUG] [Thread-184970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:55:09.048 [DEBUG] [Thread-184970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:55:09.088 [DEBUG] [Thread-184970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:55:09.088 [DEBUG] [Thread-184970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:55:09.091 [DEBUG] [Thread-184970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:55:09.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:55:09.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:55:09.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:55:09.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:55:09.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:55:09.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:55:09.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:55:09.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:55:09.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:55:09.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.412958 -999.00  +13.20  26.41     56   +4.70 1 1 1 1 1   888    0 9.15 32.95 ----- 22.7 26.4 171.8 31.5 19.8 -24.1 18.5 -23.7 18.3 -22.4 19.4 -23.7
2026-02-14T11:55:09.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:55:09.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:55:09.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.412958
2026-02-14T11:55:09.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:55:09.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:55:09.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:55:09.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:55:09.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:55:09.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:54:49', tmtdew=9.61, humidity=51.88, cloud=0.0, wind=29.1, temperature=12.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:54:39.571', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:55:09.116 [DEBUG] [Thread-184970] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:55:09.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-14T11:55:09.209 [DEBUG] [Thread-184973] [transport.py] [_log()] starting thread (client mode): 0xa2d10f70
2026-02-14T11:55:09.210 [DEBUG] [Thread-184973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:55:09.224 [DEBUG] [Thread-184973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:55:09.224 [INFO] [Thread-184973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:55:09.231 [DEBUG] [Thread-184973] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:55:09.232 [DEBUG] [Thread-184973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:55:09.232 [DEBUG] [Thread-184973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:55:09.232 [DEBUG] [Thread-184973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:55:09.232 [DEBUG] [Thread-184973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:55:09.232 [DEBUG] [Thread-184973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:55:09.232 [DEBUG] [Thread-184973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:55:09.232 [DEBUG] [Thread-184973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:55:09.232 [DEBUG] [Thread-184973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:55:09.233 [DEBUG] [Thread-184973] [transport.py] [_log()] client lang: <none>
2026-02-14T11:55:09.233 [DEBUG] [Thread-184973] [transport.py] [_log()] server lang: <none>
2026-02-14T11:55:09.233 [DEBUG] [Thread-184973] [transport.py] [_log()] kex follows: False
2026-02-14T11:55:09.233 [DEBUG] [Thread-184973] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:55:09.233 [DEBUG] [Thread-184973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:55:09.233 [DEBUG] [Thread-184973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:55:09.233 [DEBUG] [Thread-184973] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:55:09.233 [DEBUG] [Thread-184973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:55:09.234 [DEBUG] [Thread-184973] [transport.py] [_log()] Compression: none
2026-02-14T11:55:09.234 [DEBUG] [Thread-184973] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:55:09.293 [DEBUG] [Thread-184973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:55:09.294 [DEBUG] [Thread-184973] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:55:09.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:55:09.295 [DEBUG] [Thread-184973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:55:09.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:55:09.350 [DEBUG] [Thread-184973] [transport.py] [_log()] userauth is OK
2026-02-14T11:55:09.351 [DEBUG] [Thread-184973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:55:09.351 [DEBUG] [Thread-184973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:55:09.351 [DEBUG] [Thread-184973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:55:09.351 [DEBUG] [Thread-184973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:55:09.369 [INFO] [Thread-184973] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:55:09.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-14T11:55:09.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:55:10.182 [DEBUG] [Thread-184973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:55:10.182 [DEBUG] [Thread-184973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:55:10.233 [DEBUG] [Thread-184973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:55:10.233 [DEBUG] [Thread-184973] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:55:10.245 [DEBUG] [Thread-184973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:55:10.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:55:10.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:55:10.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:55:10.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:55:10.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:55:10.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:55:10.285 [DEBUG] [Thread-184973] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:55:16.676 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:55:16.677 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:55:19.984 [DEBUG] [Thread-184975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:55:20.221 [DEBUG] [Thread-184976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:55:35.033 [DEBUG] [Thread-184977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:55:40.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:55:40.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:55:40.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-14T11:55:42.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 55, 24), 9.55, 52.06, 0.0, 27.47, 12.77, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:55:42.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:55:24
2026-02-14T11:55:42.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:55:42.710 [DEBUG] [Thread-184978] [transport.py] [_log()] starting thread (client mode): 0xa2d12650
2026-02-14T11:55:42.710 [DEBUG] [Thread-184978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:55:42.729 [DEBUG] [Thread-184978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:55:42.729 [INFO] [Thread-184978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:55:42.732 [DEBUG] [Thread-184978] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:55:42.733 [DEBUG] [Thread-184978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:55:42.733 [DEBUG] [Thread-184978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:55:42.733 [DEBUG] [Thread-184978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:55:42.733 [DEBUG] [Thread-184978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:55:42.733 [DEBUG] [Thread-184978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:55:42.733 [DEBUG] [Thread-184978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:55:42.733 [DEBUG] [Thread-184978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:55:42.733 [DEBUG] [Thread-184978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:55:42.733 [DEBUG] [Thread-184978] [transport.py] [_log()] client lang: <none>
2026-02-14T11:55:42.733 [DEBUG] [Thread-184978] [transport.py] [_log()] server lang: <none>
2026-02-14T11:55:42.733 [DEBUG] [Thread-184978] [transport.py] [_log()] kex follows: False
2026-02-14T11:55:42.733 [DEBUG] [Thread-184978] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:55:42.733 [DEBUG] [Thread-184978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:55:42.734 [DEBUG] [Thread-184978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:55:42.734 [DEBUG] [Thread-184978] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:55:42.734 [DEBUG] [Thread-184978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:55:42.734 [DEBUG] [Thread-184978] [transport.py] [_log()] Compression: none
2026-02-14T11:55:42.734 [DEBUG] [Thread-184978] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:55:42.751 [DEBUG] [Thread-184978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:55:42.751 [DEBUG] [Thread-184978] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:55:42.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:55:42.752 [DEBUG] [Thread-184978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:55:42.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:55:42.754 [DEBUG] [Thread-184978] [transport.py] [_log()] userauth is OK
2026-02-14T11:55:42.754 [DEBUG] [Thread-184978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:55:42.754 [DEBUG] [Thread-184978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:55:42.754 [DEBUG] [Thread-184978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:55:42.754 [DEBUG] [Thread-184978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:55:42.790 [INFO] [Thread-184978] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:55:42.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:55:43.409 [DEBUG] [Thread-184978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:55:43.409 [DEBUG] [Thread-184978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:55:43.410 [DEBUG] [Thread-184978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:55:43.452 [DEBUG] [Thread-184978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:55:43.452 [DEBUG] [Thread-184978] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:55:43.456 [DEBUG] [Thread-184978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:55:43.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:55:43.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:55:43.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:55:43.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:55:43.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:55:43.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:55:43.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:55:43.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:55:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:55:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.413306 -999.00  +13.20  21.08     56   +4.80 1 1 1 1 1   888    0 9.22 34.62 ----- 18.7 21.1 182.8 29.9 19.8 -23.7 18.4 -26.5 18.2 -24.7 19.3 -23.4
2026-02-14T11:55:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:55:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:55:43.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.413306
2026-02-14T11:55:43.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:55:43.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:55:43.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:55:43.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:55:43.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:55:43.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:55:24', tmtdew=9.55, humidity=52.06, cloud=0.0, wind=27.47, temperature=12.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:55:09.638', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:55:43.486 [DEBUG] [Thread-184978] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:55:43.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-14T11:55:43.585 [DEBUG] [Thread-184981] [transport.py] [_log()] starting thread (client mode): 0xa5741030
2026-02-14T11:55:43.585 [DEBUG] [Thread-184981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:55:43.599 [DEBUG] [Thread-184981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:55:43.600 [INFO] [Thread-184981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:55:43.607 [DEBUG] [Thread-184981] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:55:43.607 [DEBUG] [Thread-184981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:55:43.608 [DEBUG] [Thread-184981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:55:43.608 [DEBUG] [Thread-184981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:55:43.608 [DEBUG] [Thread-184981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:55:43.608 [DEBUG] [Thread-184981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:55:43.608 [DEBUG] [Thread-184981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:55:43.608 [DEBUG] [Thread-184981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:55:43.609 [DEBUG] [Thread-184981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:55:43.609 [DEBUG] [Thread-184981] [transport.py] [_log()] client lang: <none>
2026-02-14T11:55:43.609 [DEBUG] [Thread-184981] [transport.py] [_log()] server lang: <none>
2026-02-14T11:55:43.609 [DEBUG] [Thread-184981] [transport.py] [_log()] kex follows: False
2026-02-14T11:55:43.609 [DEBUG] [Thread-184981] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:55:43.609 [DEBUG] [Thread-184981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:55:43.609 [DEBUG] [Thread-184981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:55:43.609 [DEBUG] [Thread-184981] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:55:43.609 [DEBUG] [Thread-184981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:55:43.609 [DEBUG] [Thread-184981] [transport.py] [_log()] Compression: none
2026-02-14T11:55:43.609 [DEBUG] [Thread-184981] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:55:43.667 [DEBUG] [Thread-184981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:55:43.668 [DEBUG] [Thread-184981] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:55:43.668 [DEBUG] [Thread-184981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:55:43.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:55:43.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:55:43.727 [DEBUG] [Thread-184981] [transport.py] [_log()] userauth is OK
2026-02-14T11:55:43.727 [DEBUG] [Thread-184981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:55:43.727 [DEBUG] [Thread-184981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:55:43.727 [DEBUG] [Thread-184981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:55:43.728 [DEBUG] [Thread-184981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:55:43.746 [INFO] [Thread-184981] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:55:43.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-14T11:55:43.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:55:44.583 [DEBUG] [Thread-184981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:55:44.584 [DEBUG] [Thread-184981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:55:44.631 [DEBUG] [Thread-184981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:55:44.632 [DEBUG] [Thread-184981] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:55:44.641 [DEBUG] [Thread-184981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:55:44.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:55:44.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-14T11:55:44.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:55:44.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:55:44.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:55:44.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:55:44.678 [DEBUG] [Thread-184981] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:55:50.066 [DEBUG] [Thread-184983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:56:05.120 [DEBUG] [Thread-184984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:56:14.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:56:14.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:56:14.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-14T11:56:16.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 56), 9.14, 53.58, 0.0, 22.92, 12.59, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:56:16.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:56:00
2026-02-14T11:56:16.816 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:56:16.817 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:56:16.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:56:17.050 [DEBUG] [Thread-184985] [transport.py] [_log()] starting thread (client mode): 0xa2d10e20
2026-02-14T11:56:17.058 [DEBUG] [Thread-184985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:56:17.071 [DEBUG] [Thread-184985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:56:17.071 [INFO] [Thread-184985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:56:17.074 [DEBUG] [Thread-184985] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:56:17.074 [DEBUG] [Thread-184985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:56:17.074 [DEBUG] [Thread-184985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:56:17.074 [DEBUG] [Thread-184985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:56:17.075 [DEBUG] [Thread-184985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:56:17.075 [DEBUG] [Thread-184985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:56:17.075 [DEBUG] [Thread-184985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:56:17.075 [DEBUG] [Thread-184985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:56:17.075 [DEBUG] [Thread-184985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:56:17.075 [DEBUG] [Thread-184985] [transport.py] [_log()] client lang: <none>
2026-02-14T11:56:17.075 [DEBUG] [Thread-184985] [transport.py] [_log()] server lang: <none>
2026-02-14T11:56:17.075 [DEBUG] [Thread-184985] [transport.py] [_log()] kex follows: False
2026-02-14T11:56:17.075 [DEBUG] [Thread-184985] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:56:17.075 [DEBUG] [Thread-184985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:56:17.075 [DEBUG] [Thread-184985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:56:17.075 [DEBUG] [Thread-184985] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:56:17.075 [DEBUG] [Thread-184985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:56:17.075 [DEBUG] [Thread-184985] [transport.py] [_log()] Compression: none
2026-02-14T11:56:17.075 [DEBUG] [Thread-184985] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:56:17.093 [DEBUG] [Thread-184985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:56:17.093 [DEBUG] [Thread-184985] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:56:17.094 [DEBUG] [Thread-184985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:56:17.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:56:17.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:56:17.137 [DEBUG] [Thread-184985] [transport.py] [_log()] userauth is OK
2026-02-14T11:56:17.137 [DEBUG] [Thread-184985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:56:17.138 [DEBUG] [Thread-184985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:56:17.138 [DEBUG] [Thread-184985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:56:17.138 [DEBUG] [Thread-184985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:56:17.176 [INFO] [Thread-184985] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:56:17.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:56:17.797 [DEBUG] [Thread-184985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:56:17.797 [DEBUG] [Thread-184985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:56:17.798 [DEBUG] [Thread-184985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:56:17.838 [DEBUG] [Thread-184985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:56:17.839 [DEBUG] [Thread-184985] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:56:17.842 [DEBUG] [Thread-184985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:56:17.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:56:17.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:56:17.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:56:17.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:56:17.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:56:17.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:56:17.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:56:17.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:56:17.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:56:17.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.413652 -999.00  +12.90  22.65     57   +4.80 1 2 1 1 1   888    0 9.29 36.67 ----- 19.4 22.6 165.8 31.0 19.8 -24.6 18.4 -22.9 18.3 -23.1 19.3 -24.1
2026-02-14T11:56:17.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:56:17.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:56:17.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.413652
2026-02-14T11:56:17.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:56:17.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:56:17.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:56:17.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:56:17.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:56:17.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:56:00', tmtdew=9.14, humidity=53.58, cloud=0.0, wind=22.92, temperature=12.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:55:39.533', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:56:17.871 [DEBUG] [Thread-184985] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:56:17.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-14T11:56:17.977 [DEBUG] [Thread-184988] [transport.py] [_log()] starting thread (client mode): 0xa2d10d00
2026-02-14T11:56:17.977 [DEBUG] [Thread-184988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:56:17.991 [DEBUG] [Thread-184988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:56:17.991 [INFO] [Thread-184988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:56:17.999 [DEBUG] [Thread-184988] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:56:17.999 [DEBUG] [Thread-184988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:56:17.999 [DEBUG] [Thread-184988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:56:17.999 [DEBUG] [Thread-184988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:56:17.999 [DEBUG] [Thread-184988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:56:17.999 [DEBUG] [Thread-184988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:56:17.999 [DEBUG] [Thread-184988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:56:17.999 [DEBUG] [Thread-184988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:56:17.999 [DEBUG] [Thread-184988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:56:17.999 [DEBUG] [Thread-184988] [transport.py] [_log()] client lang: <none>
2026-02-14T11:56:17.999 [DEBUG] [Thread-184988] [transport.py] [_log()] server lang: <none>
2026-02-14T11:56:17.999 [DEBUG] [Thread-184988] [transport.py] [_log()] kex follows: False
2026-02-14T11:56:18.000 [DEBUG] [Thread-184988] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:56:18.000 [DEBUG] [Thread-184988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:56:18.000 [DEBUG] [Thread-184988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:56:18.000 [DEBUG] [Thread-184988] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:56:18.000 [DEBUG] [Thread-184988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:56:18.000 [DEBUG] [Thread-184988] [transport.py] [_log()] Compression: none
2026-02-14T11:56:18.000 [DEBUG] [Thread-184988] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:56:18.067 [DEBUG] [Thread-184988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:56:18.067 [DEBUG] [Thread-184988] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:56:18.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:56:18.069 [DEBUG] [Thread-184988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:56:18.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:56:18.122 [DEBUG] [Thread-184988] [transport.py] [_log()] userauth is OK
2026-02-14T11:56:18.123 [DEBUG] [Thread-184988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:56:18.123 [DEBUG] [Thread-184988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:56:18.123 [DEBUG] [Thread-184988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:56:18.123 [DEBUG] [Thread-184988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:56:18.141 [INFO] [Thread-184988] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:56:18.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-14T11:56:18.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:56:18.955 [DEBUG] [Thread-184988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:56:18.955 [DEBUG] [Thread-184988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:56:19.003 [DEBUG] [Thread-184988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:56:19.004 [DEBUG] [Thread-184988] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:56:19.013 [DEBUG] [Thread-184988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:56:19.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:56:19.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-14T11:56:19.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-14T11:56:19.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:56:19.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:56:19.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:56:19.048 [DEBUG] [Thread-184988] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:56:20.156 [DEBUG] [Thread-184990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:56:20.264 [DEBUG] [Thread-184991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:56:35.212 [DEBUG] [Thread-184992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:56:49.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:56:49.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:56:49.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T11:56:50.251 [DEBUG] [Thread-184993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:56:50.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 56, 35), 9.91, 51.12, 0.0, 25.19, 13.71, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:56:50.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:56:35
2026-02-14T11:56:51.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:56:51.395 [DEBUG] [Thread-184994] [transport.py] [_log()] starting thread (client mode): 0xa2ddfe20
2026-02-14T11:56:51.395 [DEBUG] [Thread-184994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:56:51.414 [DEBUG] [Thread-184994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:56:51.414 [INFO] [Thread-184994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:56:51.417 [DEBUG] [Thread-184994] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:56:51.417 [DEBUG] [Thread-184994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:56:51.417 [DEBUG] [Thread-184994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:56:51.417 [DEBUG] [Thread-184994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:56:51.417 [DEBUG] [Thread-184994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:56:51.417 [DEBUG] [Thread-184994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:56:51.417 [DEBUG] [Thread-184994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:56:51.418 [DEBUG] [Thread-184994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:56:51.418 [DEBUG] [Thread-184994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:56:51.418 [DEBUG] [Thread-184994] [transport.py] [_log()] client lang: <none>
2026-02-14T11:56:51.418 [DEBUG] [Thread-184994] [transport.py] [_log()] server lang: <none>
2026-02-14T11:56:51.418 [DEBUG] [Thread-184994] [transport.py] [_log()] kex follows: False
2026-02-14T11:56:51.418 [DEBUG] [Thread-184994] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:56:51.418 [DEBUG] [Thread-184994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:56:51.418 [DEBUG] [Thread-184994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:56:51.418 [DEBUG] [Thread-184994] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:56:51.418 [DEBUG] [Thread-184994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:56:51.418 [DEBUG] [Thread-184994] [transport.py] [_log()] Compression: none
2026-02-14T11:56:51.418 [DEBUG] [Thread-184994] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:56:51.436 [DEBUG] [Thread-184994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:56:51.437 [DEBUG] [Thread-184994] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:56:51.438 [DEBUG] [Thread-184994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:56:51.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:56:51.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:56:51.440 [DEBUG] [Thread-184994] [transport.py] [_log()] userauth is OK
2026-02-14T11:56:51.440 [DEBUG] [Thread-184994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:56:51.440 [DEBUG] [Thread-184994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:56:51.440 [DEBUG] [Thread-184994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:56:51.440 [DEBUG] [Thread-184994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:56:51.457 [INFO] [Thread-184994] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:56:51.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:56:52.220 [DEBUG] [Thread-184994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:56:52.220 [DEBUG] [Thread-184994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:56:52.221 [DEBUG] [Thread-184994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:56:52.261 [DEBUG] [Thread-184994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:56:52.262 [DEBUG] [Thread-184994] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:56:52.263 [DEBUG] [Thread-184994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:56:52.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:56:52.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:56:52.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:56:52.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:56:52.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:56:52.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:56:52.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:56:52.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:56:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:56:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.414000 -999.00  +13.20  22.47     57   +5.00 1 1 1 1 1   888    0 9.29 36.46 ----- 28.4 22.5 191.8 26.7 20.0 -23.6 18.6 -26.0 18.4 -23.5 19.5 -23.2
2026-02-14T11:56:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:56:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:56:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.414000
2026-02-14T11:56:52.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:56:52.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:56:52.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:56:52.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:56:52.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:56:52.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:56:35', tmtdew=9.91, humidity=51.12, cloud=0.0, wind=25.19, temperature=13.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:56:09.600', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:56:52.282 [DEBUG] [Thread-184994] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:56:52.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-14T11:56:52.376 [DEBUG] [Thread-184997] [transport.py] [_log()] starting thread (client mode): 0xa57c3280
2026-02-14T11:56:52.376 [DEBUG] [Thread-184997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:56:52.391 [DEBUG] [Thread-184997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:56:52.391 [INFO] [Thread-184997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:56:52.399 [DEBUG] [Thread-184997] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:56:52.399 [DEBUG] [Thread-184997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:56:52.400 [DEBUG] [Thread-184997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:56:52.400 [DEBUG] [Thread-184997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:56:52.400 [DEBUG] [Thread-184997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:56:52.400 [DEBUG] [Thread-184997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:56:52.400 [DEBUG] [Thread-184997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:56:52.400 [DEBUG] [Thread-184997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:56:52.400 [DEBUG] [Thread-184997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:56:52.400 [DEBUG] [Thread-184997] [transport.py] [_log()] client lang: <none>
2026-02-14T11:56:52.400 [DEBUG] [Thread-184997] [transport.py] [_log()] server lang: <none>
2026-02-14T11:56:52.400 [DEBUG] [Thread-184997] [transport.py] [_log()] kex follows: False
2026-02-14T11:56:52.400 [DEBUG] [Thread-184997] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:56:52.400 [DEBUG] [Thread-184997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:56:52.401 [DEBUG] [Thread-184997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:56:52.401 [DEBUG] [Thread-184997] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:56:52.401 [DEBUG] [Thread-184997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:56:52.401 [DEBUG] [Thread-184997] [transport.py] [_log()] Compression: none
2026-02-14T11:56:52.401 [DEBUG] [Thread-184997] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:56:52.459 [DEBUG] [Thread-184997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:56:52.460 [DEBUG] [Thread-184997] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:56:52.461 [DEBUG] [Thread-184997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:56:52.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:56:52.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:56:52.515 [DEBUG] [Thread-184997] [transport.py] [_log()] userauth is OK
2026-02-14T11:56:52.516 [DEBUG] [Thread-184997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:56:52.516 [DEBUG] [Thread-184997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:56:52.516 [DEBUG] [Thread-184997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:56:52.516 [DEBUG] [Thread-184997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:56:52.535 [INFO] [Thread-184997] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:56:52.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-14T11:56:52.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:56:53.320 [DEBUG] [Thread-184997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:56:53.320 [DEBUG] [Thread-184997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:56:53.368 [DEBUG] [Thread-184997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:56:53.368 [DEBUG] [Thread-184997] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:56:53.377 [DEBUG] [Thread-184997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:56:53.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:56:53.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:56:53.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-14T11:56:53.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:56:53.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:56:53.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:56:53.409 [DEBUG] [Thread-184997] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:57:05.288 [DEBUG] [Thread-184999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:57:16.959 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:57:16.961 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:57:20.296 [DEBUG] [Thread-185000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:57:20.338 [DEBUG] [Thread-185001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:57:23.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:57:23.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:57:23.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-14T11:57:25.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 57, 11), 9.56, 52.25, 0.0, 28.8, 13.0, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:57:25.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:57:11
2026-02-14T11:57:25.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:57:25.933 [DEBUG] [Thread-185002] [transport.py] [_log()] starting thread (client mode): 0xa575b4c0
2026-02-14T11:57:25.934 [DEBUG] [Thread-185002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:57:25.955 [DEBUG] [Thread-185002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:57:25.955 [INFO] [Thread-185002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:57:25.958 [DEBUG] [Thread-185002] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:57:25.958 [DEBUG] [Thread-185002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:57:25.958 [DEBUG] [Thread-185002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:57:25.958 [DEBUG] [Thread-185002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:57:25.958 [DEBUG] [Thread-185002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:57:25.958 [DEBUG] [Thread-185002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:57:25.958 [DEBUG] [Thread-185002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:57:25.958 [DEBUG] [Thread-185002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:57:25.958 [DEBUG] [Thread-185002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:57:25.958 [DEBUG] [Thread-185002] [transport.py] [_log()] client lang: <none>
2026-02-14T11:57:25.958 [DEBUG] [Thread-185002] [transport.py] [_log()] server lang: <none>
2026-02-14T11:57:25.958 [DEBUG] [Thread-185002] [transport.py] [_log()] kex follows: False
2026-02-14T11:57:25.958 [DEBUG] [Thread-185002] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:57:25.958 [DEBUG] [Thread-185002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:57:25.959 [DEBUG] [Thread-185002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:57:25.959 [DEBUG] [Thread-185002] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:57:25.959 [DEBUG] [Thread-185002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:57:25.959 [DEBUG] [Thread-185002] [transport.py] [_log()] Compression: none
2026-02-14T11:57:25.959 [DEBUG] [Thread-185002] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:57:25.976 [DEBUG] [Thread-185002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:57:25.977 [DEBUG] [Thread-185002] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:57:25.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:57:25.978 [DEBUG] [Thread-185002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:57:25.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:57:25.980 [DEBUG] [Thread-185002] [transport.py] [_log()] userauth is OK
2026-02-14T11:57:25.980 [DEBUG] [Thread-185002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:57:25.980 [DEBUG] [Thread-185002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:57:25.981 [DEBUG] [Thread-185002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:57:25.981 [DEBUG] [Thread-185002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:57:26.005 [INFO] [Thread-185002] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:57:26.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:57:26.674 [DEBUG] [Thread-185002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:57:26.674 [DEBUG] [Thread-185002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:57:26.675 [DEBUG] [Thread-185002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:57:26.715 [DEBUG] [Thread-185002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:57:26.715 [DEBUG] [Thread-185002] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:57:26.718 [DEBUG] [Thread-185002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:57:26.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:57:26.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:57:26.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:57:26.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:57:26.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:57:26.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:57:26.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:57:26.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:57:26.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:57:26.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.414347 -999.00  +13.40  28.89     56   +4.90 1 1 1 1 1   888    0 9.33 36.70 ----- 25.2 28.9 165.9 39.4 19.9 -24.2 18.5 -23.4 18.3 -22.7 19.4 -23.3
2026-02-14T11:57:26.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:57:26.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:57:26.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.414347
2026-02-14T11:57:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:57:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:57:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:57:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:57:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:57:26.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:57:11', tmtdew=9.56, humidity=52.25, cloud=0.0, wind=28.8, temperature=13.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:56:39.581', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:57:26.745 [DEBUG] [Thread-185002] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:57:26.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-14T11:57:26.839 [DEBUG] [Thread-185005] [transport.py] [_log()] starting thread (client mode): 0xa2d18f40
2026-02-14T11:57:26.840 [DEBUG] [Thread-185005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:57:26.854 [DEBUG] [Thread-185005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:57:26.854 [INFO] [Thread-185005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:57:26.867 [DEBUG] [Thread-185005] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:57:26.868 [DEBUG] [Thread-185005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:57:26.868 [DEBUG] [Thread-185005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:57:26.868 [DEBUG] [Thread-185005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:57:26.868 [DEBUG] [Thread-185005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:57:26.868 [DEBUG] [Thread-185005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:57:26.868 [DEBUG] [Thread-185005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:57:26.869 [DEBUG] [Thread-185005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:57:26.869 [DEBUG] [Thread-185005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:57:26.869 [DEBUG] [Thread-185005] [transport.py] [_log()] client lang: <none>
2026-02-14T11:57:26.869 [DEBUG] [Thread-185005] [transport.py] [_log()] server lang: <none>
2026-02-14T11:57:26.869 [DEBUG] [Thread-185005] [transport.py] [_log()] kex follows: False
2026-02-14T11:57:26.869 [DEBUG] [Thread-185005] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:57:26.869 [DEBUG] [Thread-185005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:57:26.870 [DEBUG] [Thread-185005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:57:26.870 [DEBUG] [Thread-185005] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:57:26.870 [DEBUG] [Thread-185005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:57:26.870 [DEBUG] [Thread-185005] [transport.py] [_log()] Compression: none
2026-02-14T11:57:26.870 [DEBUG] [Thread-185005] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:57:26.927 [DEBUG] [Thread-185005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:57:26.928 [DEBUG] [Thread-185005] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:57:26.928 [DEBUG] [Thread-185005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:57:26.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:57:26.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:57:26.988 [DEBUG] [Thread-185005] [transport.py] [_log()] userauth is OK
2026-02-14T11:57:26.989 [DEBUG] [Thread-185005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:57:26.989 [DEBUG] [Thread-185005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:57:26.989 [DEBUG] [Thread-185005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:57:26.989 [DEBUG] [Thread-185005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:57:27.016 [INFO] [Thread-185005] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:57:27.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T11:57:27.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:57:27.860 [DEBUG] [Thread-185005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:57:27.860 [DEBUG] [Thread-185005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:57:27.910 [DEBUG] [Thread-185005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:57:27.910 [DEBUG] [Thread-185005] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:57:27.920 [DEBUG] [Thread-185005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:57:27.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:57:27.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-14T11:57:27.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:57:27.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:57:27.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:57:27.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:57:27.956 [DEBUG] [Thread-185005] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:57:35.375 [DEBUG] [Thread-185007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:57:50.424 [DEBUG] [Thread-185008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:57:57.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:57:57.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:57:57.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-14T11:57:59.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 57, 46), 10.36, 49.64, 0.0, 28.02, 13.94, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:57:59.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:57:46
2026-02-14T11:58:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:58:00.391 [DEBUG] [Thread-185009] [transport.py] [_log()] starting thread (client mode): 0xa57436a0
2026-02-14T11:58:00.391 [DEBUG] [Thread-185009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:58:00.410 [DEBUG] [Thread-185009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:58:00.410 [INFO] [Thread-185009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:58:00.414 [DEBUG] [Thread-185009] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:58:00.414 [DEBUG] [Thread-185009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:58:00.414 [DEBUG] [Thread-185009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:58:00.414 [DEBUG] [Thread-185009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:58:00.414 [DEBUG] [Thread-185009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:58:00.414 [DEBUG] [Thread-185009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:58:00.414 [DEBUG] [Thread-185009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:58:00.414 [DEBUG] [Thread-185009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:58:00.414 [DEBUG] [Thread-185009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:58:00.414 [DEBUG] [Thread-185009] [transport.py] [_log()] client lang: <none>
2026-02-14T11:58:00.414 [DEBUG] [Thread-185009] [transport.py] [_log()] server lang: <none>
2026-02-14T11:58:00.414 [DEBUG] [Thread-185009] [transport.py] [_log()] kex follows: False
2026-02-14T11:58:00.414 [DEBUG] [Thread-185009] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:58:00.414 [DEBUG] [Thread-185009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:58:00.414 [DEBUG] [Thread-185009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:58:00.414 [DEBUG] [Thread-185009] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:58:00.414 [DEBUG] [Thread-185009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:58:00.414 [DEBUG] [Thread-185009] [transport.py] [_log()] Compression: none
2026-02-14T11:58:00.414 [DEBUG] [Thread-185009] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:58:00.432 [DEBUG] [Thread-185009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:58:00.432 [DEBUG] [Thread-185009] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:58:00.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:58:00.433 [DEBUG] [Thread-185009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:58:00.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:58:00.433 [DEBUG] [Thread-185009] [transport.py] [_log()] userauth is OK
2026-02-14T11:58:00.433 [DEBUG] [Thread-185009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:58:00.433 [DEBUG] [Thread-185009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:58:00.433 [DEBUG] [Thread-185009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:58:00.433 [DEBUG] [Thread-185009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:58:00.463 [INFO] [Thread-185009] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:58:00.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:58:01.146 [DEBUG] [Thread-185009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:58:01.146 [DEBUG] [Thread-185009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:58:01.146 [DEBUG] [Thread-185009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:58:01.188 [DEBUG] [Thread-185009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:58:01.188 [DEBUG] [Thread-185009] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:58:01.191 [DEBUG] [Thread-185009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:58:01.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:58:01.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:58:01.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:58:01.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:58:01.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:58:01.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:58:01.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:58:01.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:58:01.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:58:01.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.415042 -999.00  +13.70  24.46     55   +4.90 1 2 1 1 1   888    0 9.27 38.95 ----- 28.7 24.5 169.8 33.1 20.1 -25.2 18.7 -23.0 18.6 -22.1 19.6 -25.1
2026-02-14T11:58:01.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:58:01.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:58:01.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.415042
2026-02-14T11:58:01.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:58:01.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:58:01.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:58:01.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:58:01.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T11:58:01.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:57:46', tmtdew=10.36, humidity=49.64, cloud=0.0, wind=28.02, temperature=13.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:57:39.629', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:58:01.216 [DEBUG] [Thread-185009] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:58:01.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-14T11:58:01.310 [DEBUG] [Thread-185012] [transport.py] [_log()] starting thread (client mode): 0xa5743bb0
2026-02-14T11:58:01.310 [DEBUG] [Thread-185012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:58:01.324 [DEBUG] [Thread-185012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:58:01.324 [INFO] [Thread-185012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:58:01.331 [DEBUG] [Thread-185012] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:58:01.331 [DEBUG] [Thread-185012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:58:01.331 [DEBUG] [Thread-185012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:58:01.332 [DEBUG] [Thread-185012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:58:01.332 [DEBUG] [Thread-185012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:58:01.332 [DEBUG] [Thread-185012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:58:01.332 [DEBUG] [Thread-185012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:58:01.332 [DEBUG] [Thread-185012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:58:01.332 [DEBUG] [Thread-185012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:58:01.332 [DEBUG] [Thread-185012] [transport.py] [_log()] client lang: <none>
2026-02-14T11:58:01.332 [DEBUG] [Thread-185012] [transport.py] [_log()] server lang: <none>
2026-02-14T11:58:01.332 [DEBUG] [Thread-185012] [transport.py] [_log()] kex follows: False
2026-02-14T11:58:01.332 [DEBUG] [Thread-185012] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:58:01.332 [DEBUG] [Thread-185012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:58:01.332 [DEBUG] [Thread-185012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:58:01.332 [DEBUG] [Thread-185012] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:58:01.332 [DEBUG] [Thread-185012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:58:01.332 [DEBUG] [Thread-185012] [transport.py] [_log()] Compression: none
2026-02-14T11:58:01.332 [DEBUG] [Thread-185012] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:58:01.392 [DEBUG] [Thread-185012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:58:01.392 [DEBUG] [Thread-185012] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:58:01.393 [DEBUG] [Thread-185012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:58:01.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:58:01.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:58:01.448 [DEBUG] [Thread-185012] [transport.py] [_log()] userauth is OK
2026-02-14T11:58:01.448 [DEBUG] [Thread-185012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:58:01.448 [DEBUG] [Thread-185012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:58:01.448 [DEBUG] [Thread-185012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:58:01.448 [DEBUG] [Thread-185012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:58:01.467 [INFO] [Thread-185012] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:58:01.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-14T11:58:01.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:58:02.289 [DEBUG] [Thread-185012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:58:02.289 [DEBUG] [Thread-185012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:58:02.338 [DEBUG] [Thread-185012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:58:02.338 [DEBUG] [Thread-185012] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:58:02.347 [DEBUG] [Thread-185012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:58:02.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:58:02.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:58:02.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-14T11:58:02.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:58:02.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:58:02.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:58:02.385 [DEBUG] [Thread-185012] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:58:05.461 [DEBUG] [Thread-185014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:58:17.100 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:58:17.102 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:58:20.341 [DEBUG] [Thread-185015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:58:20.512 [DEBUG] [Thread-185016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:58:32.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:58:32.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:58:32.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-14T11:58:34.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 58, 22), 10.46, 49.35, 0.0, 29.18, 14.1, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:58:34.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:58:22
2026-02-14T11:58:34.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:58:34.766 [DEBUG] [Thread-185017] [transport.py] [_log()] starting thread (client mode): 0xa57c0bb0
2026-02-14T11:58:34.767 [DEBUG] [Thread-185017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:58:34.789 [DEBUG] [Thread-185017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:58:34.789 [INFO] [Thread-185017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:58:34.792 [DEBUG] [Thread-185017] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:58:34.792 [DEBUG] [Thread-185017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:58:34.792 [DEBUG] [Thread-185017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:58:34.792 [DEBUG] [Thread-185017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:58:34.792 [DEBUG] [Thread-185017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:58:34.792 [DEBUG] [Thread-185017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:58:34.792 [DEBUG] [Thread-185017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:58:34.792 [DEBUG] [Thread-185017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:58:34.792 [DEBUG] [Thread-185017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:58:34.792 [DEBUG] [Thread-185017] [transport.py] [_log()] client lang: <none>
2026-02-14T11:58:34.792 [DEBUG] [Thread-185017] [transport.py] [_log()] server lang: <none>
2026-02-14T11:58:34.792 [DEBUG] [Thread-185017] [transport.py] [_log()] kex follows: False
2026-02-14T11:58:34.792 [DEBUG] [Thread-185017] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:58:34.792 [DEBUG] [Thread-185017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:58:34.793 [DEBUG] [Thread-185017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:58:34.793 [DEBUG] [Thread-185017] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:58:34.793 [DEBUG] [Thread-185017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:58:34.793 [DEBUG] [Thread-185017] [transport.py] [_log()] Compression: none
2026-02-14T11:58:34.793 [DEBUG] [Thread-185017] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:58:34.811 [DEBUG] [Thread-185017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:58:34.811 [DEBUG] [Thread-185017] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:58:34.812 [DEBUG] [Thread-185017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:58:34.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:58:34.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:58:34.814 [DEBUG] [Thread-185017] [transport.py] [_log()] userauth is OK
2026-02-14T11:58:34.814 [DEBUG] [Thread-185017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:58:34.814 [DEBUG] [Thread-185017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:58:34.814 [DEBUG] [Thread-185017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:58:34.814 [DEBUG] [Thread-185017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:58:34.839 [INFO] [Thread-185017] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:58:34.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:58:35.479 [DEBUG] [Thread-185017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:58:35.479 [DEBUG] [Thread-185017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:58:35.480 [DEBUG] [Thread-185017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:58:35.520 [DEBUG] [Thread-185017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:58:35.520 [DEBUG] [Thread-185017] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:58:35.523 [DEBUG] [Thread-185017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:58:35.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:58:35.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:58:35.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:58:35.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:58:35.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:58:35.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:58:35.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:58:35.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:58:35.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:58:35.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.415389 -999.00  +13.30  26.37     55   +4.50 1 1 1 1 1   888    0 9.45 41.78 ----- 23.2 26.4 180.6 35.8 20.0 -25.6 18.4 -28.7 18.4 -24.1 19.5 -25.8
2026-02-14T11:58:35.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:58:35.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:58:35.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.415389
2026-02-14T11:58:35.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:58:35.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:58:35.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:58:35.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:58:35.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:58:35.552 [DEBUG] [Thread-185020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:58:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:58:22', tmtdew=10.46, humidity=49.35, cloud=0.0, wind=29.18, temperature=14.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:58:09.610', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:58:35.552 [DEBUG] [Thread-185017] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:58:35.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T11:58:35.651 [DEBUG] [Thread-185021] [transport.py] [_log()] starting thread (client mode): 0xa2ddf820
2026-02-14T11:58:35.652 [DEBUG] [Thread-185021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:58:35.666 [DEBUG] [Thread-185021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:58:35.666 [INFO] [Thread-185021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:58:35.677 [DEBUG] [Thread-185021] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:58:35.677 [DEBUG] [Thread-185021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:58:35.678 [DEBUG] [Thread-185021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:58:35.678 [DEBUG] [Thread-185021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:58:35.678 [DEBUG] [Thread-185021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:58:35.678 [DEBUG] [Thread-185021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:58:35.678 [DEBUG] [Thread-185021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:58:35.678 [DEBUG] [Thread-185021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:58:35.678 [DEBUG] [Thread-185021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:58:35.678 [DEBUG] [Thread-185021] [transport.py] [_log()] client lang: <none>
2026-02-14T11:58:35.678 [DEBUG] [Thread-185021] [transport.py] [_log()] server lang: <none>
2026-02-14T11:58:35.678 [DEBUG] [Thread-185021] [transport.py] [_log()] kex follows: False
2026-02-14T11:58:35.678 [DEBUG] [Thread-185021] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:58:35.678 [DEBUG] [Thread-185021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:58:35.679 [DEBUG] [Thread-185021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:58:35.679 [DEBUG] [Thread-185021] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:58:35.679 [DEBUG] [Thread-185021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:58:35.679 [DEBUG] [Thread-185021] [transport.py] [_log()] Compression: none
2026-02-14T11:58:35.679 [DEBUG] [Thread-185021] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:58:35.746 [DEBUG] [Thread-185021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:58:35.746 [DEBUG] [Thread-185021] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:58:35.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:58:35.748 [DEBUG] [Thread-185021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:58:35.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:58:35.804 [DEBUG] [Thread-185021] [transport.py] [_log()] userauth is OK
2026-02-14T11:58:35.804 [DEBUG] [Thread-185021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:58:35.804 [DEBUG] [Thread-185021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:58:35.805 [DEBUG] [Thread-185021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:58:35.805 [DEBUG] [Thread-185021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:58:35.824 [INFO] [Thread-185021] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:58:35.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-14T11:58:35.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:58:36.646 [DEBUG] [Thread-185021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:58:36.646 [DEBUG] [Thread-185021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:58:36.694 [DEBUG] [Thread-185021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:58:36.695 [DEBUG] [Thread-185021] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:58:36.704 [DEBUG] [Thread-185021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:58:36.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:58:36.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-14T11:58:36.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-14T11:58:36.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:58:36.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:58:36.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:58:36.741 [DEBUG] [Thread-185021] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:58:50.589 [DEBUG] [Thread-185023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:59:05.642 [DEBUG] [Thread-185024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:59:06.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:59:06.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:59:06.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-14T11:59:08.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 58, 57), 10.41, 49.59, 0.0, 31.88, 13.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:59:08.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:58:57
2026-02-14T11:59:08.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:59:09.129 [DEBUG] [Thread-185025] [transport.py] [_log()] starting thread (client mode): 0xa2d3fbb0
2026-02-14T11:59:09.129 [DEBUG] [Thread-185025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:59:09.149 [DEBUG] [Thread-185025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:59:09.149 [INFO] [Thread-185025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:59:09.152 [DEBUG] [Thread-185025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:59:09.153 [DEBUG] [Thread-185025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:59:09.153 [DEBUG] [Thread-185025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:59:09.153 [DEBUG] [Thread-185025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:59:09.153 [DEBUG] [Thread-185025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:59:09.153 [DEBUG] [Thread-185025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:59:09.153 [DEBUG] [Thread-185025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:59:09.153 [DEBUG] [Thread-185025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:59:09.153 [DEBUG] [Thread-185025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:59:09.153 [DEBUG] [Thread-185025] [transport.py] [_log()] client lang: <none>
2026-02-14T11:59:09.153 [DEBUG] [Thread-185025] [transport.py] [_log()] server lang: <none>
2026-02-14T11:59:09.153 [DEBUG] [Thread-185025] [transport.py] [_log()] kex follows: False
2026-02-14T11:59:09.153 [DEBUG] [Thread-185025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:59:09.153 [DEBUG] [Thread-185025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:59:09.153 [DEBUG] [Thread-185025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:59:09.153 [DEBUG] [Thread-185025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:59:09.153 [DEBUG] [Thread-185025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:59:09.153 [DEBUG] [Thread-185025] [transport.py] [_log()] Compression: none
2026-02-14T11:59:09.153 [DEBUG] [Thread-185025] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:59:09.171 [DEBUG] [Thread-185025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:59:09.171 [DEBUG] [Thread-185025] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:59:09.172 [DEBUG] [Thread-185025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:59:09.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:59:09.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:59:09.174 [DEBUG] [Thread-185025] [transport.py] [_log()] userauth is OK
2026-02-14T11:59:09.174 [DEBUG] [Thread-185025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:59:09.174 [DEBUG] [Thread-185025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:59:09.174 [DEBUG] [Thread-185025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:59:09.174 [DEBUG] [Thread-185025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:59:09.199 [INFO] [Thread-185025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:59:09.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:59:09.800 [DEBUG] [Thread-185025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:59:09.801 [DEBUG] [Thread-185025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:59:09.801 [DEBUG] [Thread-185025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:59:09.841 [DEBUG] [Thread-185025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:59:09.841 [DEBUG] [Thread-185025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:59:09.845 [DEBUG] [Thread-185025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:59:09.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:59:09.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:59:09.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:59:09.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:59:09.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:59:09.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:59:09.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:59:09.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:59:09.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:59:09.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.415736 -999.00  +13.40  26.48     55   +4.80 1 1 1 1 1   888    0 9.46 44.98 ----- 34.1 26.5 158.7 32.6 20.1 -25.6 18.8 -25.4 18.5 -24.6 19.6 -25.0
2026-02-14T11:59:09.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:59:09.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:59:09.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.415736
2026-02-14T11:59:09.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:59:09.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:59:09.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:59:09.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:59:09.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:59:09.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:58:57', tmtdew=10.41, humidity=49.59, cloud=0.0, wind=31.88, temperature=13.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:58:39.590', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:59:09.870 [DEBUG] [Thread-185025] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:59:09.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-14T11:59:09.968 [DEBUG] [Thread-185028] [transport.py] [_log()] starting thread (client mode): 0xa5741ba0
2026-02-14T11:59:09.968 [DEBUG] [Thread-185028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:59:09.982 [DEBUG] [Thread-185028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:59:09.983 [INFO] [Thread-185028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:59:09.990 [DEBUG] [Thread-185028] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:59:09.991 [DEBUG] [Thread-185028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:59:09.991 [DEBUG] [Thread-185028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:59:09.991 [DEBUG] [Thread-185028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:59:09.991 [DEBUG] [Thread-185028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:59:09.991 [DEBUG] [Thread-185028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:59:09.991 [DEBUG] [Thread-185028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:59:09.991 [DEBUG] [Thread-185028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:59:09.991 [DEBUG] [Thread-185028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:59:09.991 [DEBUG] [Thread-185028] [transport.py] [_log()] client lang: <none>
2026-02-14T11:59:09.991 [DEBUG] [Thread-185028] [transport.py] [_log()] server lang: <none>
2026-02-14T11:59:09.991 [DEBUG] [Thread-185028] [transport.py] [_log()] kex follows: False
2026-02-14T11:59:09.991 [DEBUG] [Thread-185028] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:59:09.991 [DEBUG] [Thread-185028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:59:09.991 [DEBUG] [Thread-185028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:59:09.991 [DEBUG] [Thread-185028] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:59:09.991 [DEBUG] [Thread-185028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:59:09.992 [DEBUG] [Thread-185028] [transport.py] [_log()] Compression: none
2026-02-14T11:59:09.992 [DEBUG] [Thread-185028] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:59:10.052 [DEBUG] [Thread-185028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:59:10.052 [DEBUG] [Thread-185028] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:59:10.053 [DEBUG] [Thread-185028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:59:10.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:59:10.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:59:10.111 [DEBUG] [Thread-185028] [transport.py] [_log()] userauth is OK
2026-02-14T11:59:10.112 [DEBUG] [Thread-185028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:59:10.112 [DEBUG] [Thread-185028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:59:10.112 [DEBUG] [Thread-185028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:59:10.112 [DEBUG] [Thread-185028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:59:10.139 [INFO] [Thread-185028] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:59:10.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-14T11:59:10.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:59:10.939 [DEBUG] [Thread-185028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:59:10.948 [DEBUG] [Thread-185028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:59:10.987 [DEBUG] [Thread-185028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:59:10.987 [DEBUG] [Thread-185028] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:59:10.997 [DEBUG] [Thread-185028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:59:11.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:59:11.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-14T11:59:11.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:59:11.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:59:11.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:59:11.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:59:11.041 [DEBUG] [Thread-185028] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:59:17.245 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:59:17.246 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:59:20.387 [DEBUG] [Thread-185030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:59:20.680 [DEBUG] [Thread-185031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:59:35.732 [DEBUG] [Thread-185032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T11:59:41.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T11:59:41.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T11:59:41.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-14T11:59:43.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 11, 59, 32), 10.36, 49.79, 0.0, 35.23, 13.54, 0, 0, 0, 2, 0, 0),)
2026-02-14T11:59:43.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 11:59:32
2026-02-14T11:59:43.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T11:59:43.665 [DEBUG] [Thread-185033] [transport.py] [_log()] starting thread (client mode): 0xa2db6cb0
2026-02-14T11:59:43.665 [DEBUG] [Thread-185033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:59:43.684 [DEBUG] [Thread-185033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T11:59:43.684 [INFO] [Thread-185033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T11:59:43.687 [DEBUG] [Thread-185033] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:59:43.687 [DEBUG] [Thread-185033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T11:59:43.687 [DEBUG] [Thread-185033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:59:43.688 [DEBUG] [Thread-185033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:59:43.688 [DEBUG] [Thread-185033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:59:43.688 [DEBUG] [Thread-185033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:59:43.688 [DEBUG] [Thread-185033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:59:43.688 [DEBUG] [Thread-185033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:59:43.688 [DEBUG] [Thread-185033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:59:43.688 [DEBUG] [Thread-185033] [transport.py] [_log()] client lang: <none>
2026-02-14T11:59:43.688 [DEBUG] [Thread-185033] [transport.py] [_log()] server lang: <none>
2026-02-14T11:59:43.688 [DEBUG] [Thread-185033] [transport.py] [_log()] kex follows: False
2026-02-14T11:59:43.688 [DEBUG] [Thread-185033] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:59:43.688 [DEBUG] [Thread-185033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:59:43.688 [DEBUG] [Thread-185033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:59:43.688 [DEBUG] [Thread-185033] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:59:43.688 [DEBUG] [Thread-185033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:59:43.688 [DEBUG] [Thread-185033] [transport.py] [_log()] Compression: none
2026-02-14T11:59:43.688 [DEBUG] [Thread-185033] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:59:43.704 [DEBUG] [Thread-185033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:59:43.705 [DEBUG] [Thread-185033] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:59:43.706 [DEBUG] [Thread-185033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T11:59:43.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T11:59:43.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:59:43.708 [DEBUG] [Thread-185033] [transport.py] [_log()] userauth is OK
2026-02-14T11:59:43.708 [DEBUG] [Thread-185033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:59:43.708 [DEBUG] [Thread-185033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:59:43.708 [DEBUG] [Thread-185033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T11:59:43.708 [DEBUG] [Thread-185033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:59:43.729 [INFO] [Thread-185033] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:59:43.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:59:44.488 [DEBUG] [Thread-185033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:59:44.488 [DEBUG] [Thread-185033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:59:44.488 [DEBUG] [Thread-185033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T11:59:44.529 [DEBUG] [Thread-185033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:59:44.530 [DEBUG] [Thread-185033] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:59:44.533 [DEBUG] [Thread-185033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:59:44.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:59:44.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T11:59:44.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T11:59:44.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T11:59:44.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:59:44.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T11:59:44.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:59:44.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:59:44.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T11:59:44.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.416083 -999.00  +13.10  24.84     56   +4.50 1 1 1 1 1   888    0 9.65 46.99 ----- 27.7 24.8 160.6 38.0 19.9 -26.2 18.7 -22.7 18.4 -24.1 19.4 -24.6
2026-02-14T11:59:44.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T11:59:44.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T11:59:44.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.416083
2026-02-14T11:59:44.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T11:59:44.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T11:59:44.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T11:59:44.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T11:59:44.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T11:59:44.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T11:59:32', tmtdew=10.36, humidity=49.79, cloud=0.0, wind=35.23, temperature=13.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:59:09.571', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T11:59:44.559 [DEBUG] [Thread-185033] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:59:44.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-14T11:59:44.655 [DEBUG] [Thread-185036] [transport.py] [_log()] starting thread (client mode): 0xa5740f10
2026-02-14T11:59:44.655 [DEBUG] [Thread-185036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T11:59:44.671 [DEBUG] [Thread-185036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T11:59:44.671 [INFO] [Thread-185036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T11:59:44.679 [DEBUG] [Thread-185036] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T11:59:44.679 [DEBUG] [Thread-185036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T11:59:44.679 [DEBUG] [Thread-185036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T11:59:44.680 [DEBUG] [Thread-185036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:59:44.680 [DEBUG] [Thread-185036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T11:59:44.680 [DEBUG] [Thread-185036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:59:44.680 [DEBUG] [Thread-185036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T11:59:44.680 [DEBUG] [Thread-185036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T11:59:44.680 [DEBUG] [Thread-185036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T11:59:44.680 [DEBUG] [Thread-185036] [transport.py] [_log()] client lang: <none>
2026-02-14T11:59:44.680 [DEBUG] [Thread-185036] [transport.py] [_log()] server lang: <none>
2026-02-14T11:59:44.680 [DEBUG] [Thread-185036] [transport.py] [_log()] kex follows: False
2026-02-14T11:59:44.680 [DEBUG] [Thread-185036] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T11:59:44.680 [DEBUG] [Thread-185036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T11:59:44.680 [DEBUG] [Thread-185036] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T11:59:44.680 [DEBUG] [Thread-185036] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T11:59:44.681 [DEBUG] [Thread-185036] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T11:59:44.681 [DEBUG] [Thread-185036] [transport.py] [_log()] Compression: none
2026-02-14T11:59:44.681 [DEBUG] [Thread-185036] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T11:59:44.737 [DEBUG] [Thread-185036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T11:59:44.737 [DEBUG] [Thread-185036] [transport.py] [_log()] Switch to new keys ...
2026-02-14T11:59:44.738 [DEBUG] [Thread-185036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T11:59:44.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T11:59:44.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T11:59:44.793 [DEBUG] [Thread-185036] [transport.py] [_log()] userauth is OK
2026-02-14T11:59:44.793 [DEBUG] [Thread-185036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T11:59:44.793 [DEBUG] [Thread-185036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T11:59:44.793 [DEBUG] [Thread-185036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T11:59:44.793 [DEBUG] [Thread-185036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T11:59:44.812 [INFO] [Thread-185036] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T11:59:44.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-14T11:59:44.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T11:59:45.645 [DEBUG] [Thread-185036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T11:59:45.646 [DEBUG] [Thread-185036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T11:59:45.693 [DEBUG] [Thread-185036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T11:59:45.693 [DEBUG] [Thread-185036] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T11:59:45.701 [DEBUG] [Thread-185036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T11:59:45.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T11:59:45.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T11:59:45.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T11:59:45.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T11:59:45.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T11:59:45.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T11:59:45.733 [DEBUG] [Thread-185036] [transport.py] [_log()] EOF in transport thread
2026-02-14T11:59:50.765 [DEBUG] [Thread-185038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:00:05.813 [DEBUG] [Thread-185039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:00:15.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:00:15.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:00:15.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:00:17.387 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:00:17.388 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:00:17.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 0, 8), 10.4, 49.62, 0.0, 30.05, 13.4, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:00:17.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:00:08
2026-02-14T12:00:18.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:00:18.223 [DEBUG] [Thread-185040] [transport.py] [_log()] starting thread (client mode): 0xa2d11b40
2026-02-14T12:00:18.223 [DEBUG] [Thread-185040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:00:18.244 [DEBUG] [Thread-185040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:00:18.245 [INFO] [Thread-185040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:00:18.248 [DEBUG] [Thread-185040] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:00:18.248 [DEBUG] [Thread-185040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:00:18.248 [DEBUG] [Thread-185040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:00:18.248 [DEBUG] [Thread-185040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:00:18.248 [DEBUG] [Thread-185040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:00:18.248 [DEBUG] [Thread-185040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:00:18.248 [DEBUG] [Thread-185040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:00:18.248 [DEBUG] [Thread-185040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:00:18.248 [DEBUG] [Thread-185040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:00:18.248 [DEBUG] [Thread-185040] [transport.py] [_log()] client lang: <none>
2026-02-14T12:00:18.248 [DEBUG] [Thread-185040] [transport.py] [_log()] server lang: <none>
2026-02-14T12:00:18.249 [DEBUG] [Thread-185040] [transport.py] [_log()] kex follows: False
2026-02-14T12:00:18.249 [DEBUG] [Thread-185040] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:00:18.249 [DEBUG] [Thread-185040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:00:18.249 [DEBUG] [Thread-185040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:00:18.249 [DEBUG] [Thread-185040] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:00:18.249 [DEBUG] [Thread-185040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:00:18.249 [DEBUG] [Thread-185040] [transport.py] [_log()] Compression: none
2026-02-14T12:00:18.249 [DEBUG] [Thread-185040] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:00:18.267 [DEBUG] [Thread-185040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:00:18.267 [DEBUG] [Thread-185040] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:00:18.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:00:18.268 [DEBUG] [Thread-185040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:00:18.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:00:18.270 [DEBUG] [Thread-185040] [transport.py] [_log()] userauth is OK
2026-02-14T12:00:18.270 [DEBUG] [Thread-185040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:00:18.270 [DEBUG] [Thread-185040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:00:18.271 [DEBUG] [Thread-185040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:00:18.271 [DEBUG] [Thread-185040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:00:18.294 [INFO] [Thread-185040] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:00:18.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:00:20.436 [DEBUG] [Thread-185042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:00:20.852 [DEBUG] [Thread-185043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:00:24.133 [DEBUG] [Thread-185040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:00:24.133 [DEBUG] [Thread-185040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:00:24.133 [DEBUG] [Thread-185040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:00:24.174 [DEBUG] [Thread-185040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:00:24.174 [DEBUG] [Thread-185040] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:00:24.177 [DEBUG] [Thread-185040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:00:24.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:00:24.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:00:24.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:00:24.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:00:24.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:00:24.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:00:24.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:00:24.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:00:24.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:00:24.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.416430 -999.00  +12.90  26.81     56   +4.40 1 1 1 1 1   888    0 9.65 47.28 ----- 18.0 26.8 155.2 32.2 19.9 -25.5 18.7 -23.5 18.4 -24.1 19.4 -24.9
2026-02-14T12:00:24.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:00:24.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:00:24.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.416430
2026-02-14T12:00:24.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:00:24.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:00:24.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:00:24.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:00:24.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:00:24.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:00:08', tmtdew=10.4, humidity=49.62, cloud=0.0, wind=30.05, temperature=13.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T09:59:39.552', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:00:24.280 [DEBUG] [Thread-185040] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:00:24.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:00:24.376 [DEBUG] [Thread-185045] [transport.py] [_log()] starting thread (client mode): 0xa2d18100
2026-02-14T12:00:24.376 [DEBUG] [Thread-185045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:00:24.390 [DEBUG] [Thread-185045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:00:24.391 [INFO] [Thread-185045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:00:24.398 [DEBUG] [Thread-185045] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:00:24.398 [DEBUG] [Thread-185045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:00:24.398 [DEBUG] [Thread-185045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:00:24.398 [DEBUG] [Thread-185045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:00:24.398 [DEBUG] [Thread-185045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:00:24.399 [DEBUG] [Thread-185045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:00:24.399 [DEBUG] [Thread-185045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:00:24.399 [DEBUG] [Thread-185045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:00:24.399 [DEBUG] [Thread-185045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:00:24.399 [DEBUG] [Thread-185045] [transport.py] [_log()] client lang: <none>
2026-02-14T12:00:24.399 [DEBUG] [Thread-185045] [transport.py] [_log()] server lang: <none>
2026-02-14T12:00:24.399 [DEBUG] [Thread-185045] [transport.py] [_log()] kex follows: False
2026-02-14T12:00:24.399 [DEBUG] [Thread-185045] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:00:24.399 [DEBUG] [Thread-185045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:00:24.400 [DEBUG] [Thread-185045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:00:24.400 [DEBUG] [Thread-185045] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:00:24.400 [DEBUG] [Thread-185045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:00:24.400 [DEBUG] [Thread-185045] [transport.py] [_log()] Compression: none
2026-02-14T12:00:24.400 [DEBUG] [Thread-185045] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:00:24.458 [DEBUG] [Thread-185045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:00:24.459 [DEBUG] [Thread-185045] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:00:24.459 [DEBUG] [Thread-185045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:00:24.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:00:24.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:00:24.517 [DEBUG] [Thread-185045] [transport.py] [_log()] userauth is OK
2026-02-14T12:00:24.517 [DEBUG] [Thread-185045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:00:24.518 [DEBUG] [Thread-185045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:00:24.518 [DEBUG] [Thread-185045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:00:24.518 [DEBUG] [Thread-185045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:00:24.552 [INFO] [Thread-185045] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:00:24.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-14T12:00:24.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:00:25.353 [DEBUG] [Thread-185045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:00:25.353 [DEBUG] [Thread-185045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:00:25.403 [DEBUG] [Thread-185045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:00:25.403 [DEBUG] [Thread-185045] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:00:25.412 [DEBUG] [Thread-185045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:00:25.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:00:25.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-14T12:00:25.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-14T12:00:25.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:00:25.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:00:25.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:00:25.449 [DEBUG] [Thread-185045] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:00:35.888 [DEBUG] [Thread-185047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:00:50.940 [DEBUG] [Thread-185048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:00:55.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:00:55.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:00:55.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:00:57.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 0, 43), 10.08, 50.3, 0.0, 28.46, 13.05, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:00:57.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:00:43
2026-02-14T12:00:57.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:00:57.858 [DEBUG] [Thread-185049] [transport.py] [_log()] starting thread (client mode): 0xa2d19e70
2026-02-14T12:00:57.858 [DEBUG] [Thread-185049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:00:57.879 [DEBUG] [Thread-185049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:00:57.879 [INFO] [Thread-185049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:00:57.882 [DEBUG] [Thread-185049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:00:57.882 [DEBUG] [Thread-185049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:00:57.882 [DEBUG] [Thread-185049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:00:57.882 [DEBUG] [Thread-185049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:00:57.882 [DEBUG] [Thread-185049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:00:57.882 [DEBUG] [Thread-185049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:00:57.882 [DEBUG] [Thread-185049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:00:57.882 [DEBUG] [Thread-185049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:00:57.882 [DEBUG] [Thread-185049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:00:57.882 [DEBUG] [Thread-185049] [transport.py] [_log()] client lang: <none>
2026-02-14T12:00:57.882 [DEBUG] [Thread-185049] [transport.py] [_log()] server lang: <none>
2026-02-14T12:00:57.882 [DEBUG] [Thread-185049] [transport.py] [_log()] kex follows: False
2026-02-14T12:00:57.882 [DEBUG] [Thread-185049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:00:57.882 [DEBUG] [Thread-185049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:00:57.882 [DEBUG] [Thread-185049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:00:57.882 [DEBUG] [Thread-185049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:00:57.882 [DEBUG] [Thread-185049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:00:57.882 [DEBUG] [Thread-185049] [transport.py] [_log()] Compression: none
2026-02-14T12:00:57.882 [DEBUG] [Thread-185049] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:00:57.900 [DEBUG] [Thread-185049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:00:57.900 [DEBUG] [Thread-185049] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:00:57.901 [DEBUG] [Thread-185049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:00:57.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:00:57.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:00:57.903 [DEBUG] [Thread-185049] [transport.py] [_log()] userauth is OK
2026-02-14T12:00:57.904 [DEBUG] [Thread-185049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:00:57.904 [DEBUG] [Thread-185049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:00:57.904 [DEBUG] [Thread-185049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:00:57.904 [DEBUG] [Thread-185049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:00:57.929 [INFO] [Thread-185049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:00:57.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:00:58.554 [DEBUG] [Thread-185049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:00:58.554 [DEBUG] [Thread-185049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:00:58.555 [DEBUG] [Thread-185049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:00:58.595 [DEBUG] [Thread-185049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:00:58.596 [DEBUG] [Thread-185049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:00:58.599 [DEBUG] [Thread-185049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:00:58.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:00:58.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:00:58.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:00:58.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:00:58.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:00:58.622 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:00:58.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:00:58.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:00:58.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:00:58.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.416777 -999.00  +12.90  24.97     56   +4.50 1 2 1 1 1   888    0 9.59 44.51 ----- 23.8 25.0 164.8 32.9 19.9 -25.6 18.7 -23.1 18.4 -22.8 19.5 -24.7
2026-02-14T12:00:58.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:00:58.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:00:58.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.416777
2026-02-14T12:00:58.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:00:58.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:00:58.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:00:58.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:00:58.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T12:00:58.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:00:43', tmtdew=10.08, humidity=50.3, cloud=0.0, wind=28.46, temperature=13.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:00:09.533', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:00:58.625 [DEBUG] [Thread-185049] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:00:58.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-14T12:00:58.721 [DEBUG] [Thread-185052] [transport.py] [_log()] starting thread (client mode): 0xa57433d0
2026-02-14T12:00:58.721 [DEBUG] [Thread-185052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:00:58.735 [DEBUG] [Thread-185052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:00:58.736 [INFO] [Thread-185052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:00:58.743 [DEBUG] [Thread-185052] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:00:58.743 [DEBUG] [Thread-185052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:00:58.743 [DEBUG] [Thread-185052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:00:58.743 [DEBUG] [Thread-185052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:00:58.743 [DEBUG] [Thread-185052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:00:58.743 [DEBUG] [Thread-185052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:00:58.743 [DEBUG] [Thread-185052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:00:58.743 [DEBUG] [Thread-185052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:00:58.744 [DEBUG] [Thread-185052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:00:58.744 [DEBUG] [Thread-185052] [transport.py] [_log()] client lang: <none>
2026-02-14T12:00:58.744 [DEBUG] [Thread-185052] [transport.py] [_log()] server lang: <none>
2026-02-14T12:00:58.744 [DEBUG] [Thread-185052] [transport.py] [_log()] kex follows: False
2026-02-14T12:00:58.744 [DEBUG] [Thread-185052] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:00:58.744 [DEBUG] [Thread-185052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:00:58.744 [DEBUG] [Thread-185052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:00:58.744 [DEBUG] [Thread-185052] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:00:58.744 [DEBUG] [Thread-185052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:00:58.744 [DEBUG] [Thread-185052] [transport.py] [_log()] Compression: none
2026-02-14T12:00:58.744 [DEBUG] [Thread-185052] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:00:58.801 [DEBUG] [Thread-185052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:00:58.801 [DEBUG] [Thread-185052] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:00:58.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:00:58.803 [DEBUG] [Thread-185052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:00:58.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:00:58.861 [DEBUG] [Thread-185052] [transport.py] [_log()] userauth is OK
2026-02-14T12:00:58.861 [DEBUG] [Thread-185052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:00:58.861 [DEBUG] [Thread-185052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:00:58.861 [DEBUG] [Thread-185052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:00:58.862 [DEBUG] [Thread-185052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:00:58.881 [INFO] [Thread-185052] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:00:58.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-14T12:00:58.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:00:59.707 [DEBUG] [Thread-185052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:00:59.708 [DEBUG] [Thread-185052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:00:59.754 [DEBUG] [Thread-185052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:00:59.755 [DEBUG] [Thread-185052] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:00:59.764 [DEBUG] [Thread-185052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:00:59.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:00:59.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:00:59.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:00:59.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:00:59.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:00:59.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:00:59.799 [DEBUG] [Thread-185052] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:01:05.976 [DEBUG] [Thread-185054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:01:17.528 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:01:17.529 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:01:20.481 [DEBUG] [Thread-185055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:01:21.029 [DEBUG] [Thread-185056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:01:29.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:01:29.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:01:29.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-14T12:01:31.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 1, 18), 9.94, 50.77, 0.0, 31.39, 13.02, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:01:31.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:01:18
2026-02-14T12:01:32.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:01:32.257 [DEBUG] [Thread-185057] [transport.py] [_log()] starting thread (client mode): 0xa2d54be0
2026-02-14T12:01:32.257 [DEBUG] [Thread-185057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:01:32.277 [DEBUG] [Thread-185057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:01:32.277 [INFO] [Thread-185057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:01:32.280 [DEBUG] [Thread-185057] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:01:32.280 [DEBUG] [Thread-185057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:01:32.281 [DEBUG] [Thread-185057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:01:32.281 [DEBUG] [Thread-185057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:01:32.281 [DEBUG] [Thread-185057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:01:32.281 [DEBUG] [Thread-185057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:01:32.281 [DEBUG] [Thread-185057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:01:32.281 [DEBUG] [Thread-185057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:01:32.281 [DEBUG] [Thread-185057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:01:32.281 [DEBUG] [Thread-185057] [transport.py] [_log()] client lang: <none>
2026-02-14T12:01:32.281 [DEBUG] [Thread-185057] [transport.py] [_log()] server lang: <none>
2026-02-14T12:01:32.281 [DEBUG] [Thread-185057] [transport.py] [_log()] kex follows: False
2026-02-14T12:01:32.281 [DEBUG] [Thread-185057] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:01:32.282 [DEBUG] [Thread-185057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:01:32.282 [DEBUG] [Thread-185057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:01:32.282 [DEBUG] [Thread-185057] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:01:32.282 [DEBUG] [Thread-185057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:01:32.282 [DEBUG] [Thread-185057] [transport.py] [_log()] Compression: none
2026-02-14T12:01:32.282 [DEBUG] [Thread-185057] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:01:32.299 [DEBUG] [Thread-185057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:01:32.300 [DEBUG] [Thread-185057] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:01:32.300 [DEBUG] [Thread-185057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:01:32.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:01:32.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:01:32.303 [DEBUG] [Thread-185057] [transport.py] [_log()] userauth is OK
2026-02-14T12:01:32.303 [DEBUG] [Thread-185057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:01:32.304 [DEBUG] [Thread-185057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:01:32.304 [DEBUG] [Thread-185057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:01:32.304 [DEBUG] [Thread-185057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:01:32.324 [INFO] [Thread-185057] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:01:32.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:01:32.966 [DEBUG] [Thread-185057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:01:32.966 [DEBUG] [Thread-185057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:01:32.967 [DEBUG] [Thread-185057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:01:33.007 [DEBUG] [Thread-185057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:01:33.007 [DEBUG] [Thread-185057] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:01:33.010 [DEBUG] [Thread-185057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:01:33.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:01:33.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:01:33.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:01:33.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:01:33.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:01:33.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:01:33.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:01:33.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:01:33.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:01:33.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.417125 -999.00  +12.80  16.99     56   +4.40 1 2 1 1 1   888    0 9.82 49.37 ----- 18.6 17.0 142.3 31.2 20.0 -25.6 18.8 -22.6 18.5 -21.3 19.5 -25.1
2026-02-14T12:01:33.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:01:33.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:01:33.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.417125
2026-02-14T12:01:33.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:01:33.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:01:33.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:01:33.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:01:33.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T12:01:33.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:01:18', tmtdew=9.94, humidity=50.77, cloud=0.0, wind=31.39, temperature=13.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:00:39.600', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:01:33.030 [DEBUG] [Thread-185057] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:01:33.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-14T12:01:33.127 [DEBUG] [Thread-185060] [transport.py] [_log()] starting thread (client mode): 0xa2db67a0
2026-02-14T12:01:33.127 [DEBUG] [Thread-185060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:01:33.141 [DEBUG] [Thread-185060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:01:33.141 [INFO] [Thread-185060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:01:33.148 [DEBUG] [Thread-185060] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:01:33.148 [DEBUG] [Thread-185060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:01:33.148 [DEBUG] [Thread-185060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:01:33.148 [DEBUG] [Thread-185060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:01:33.148 [DEBUG] [Thread-185060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:01:33.148 [DEBUG] [Thread-185060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:01:33.148 [DEBUG] [Thread-185060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:01:33.148 [DEBUG] [Thread-185060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:01:33.148 [DEBUG] [Thread-185060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:01:33.148 [DEBUG] [Thread-185060] [transport.py] [_log()] client lang: <none>
2026-02-14T12:01:33.148 [DEBUG] [Thread-185060] [transport.py] [_log()] server lang: <none>
2026-02-14T12:01:33.148 [DEBUG] [Thread-185060] [transport.py] [_log()] kex follows: False
2026-02-14T12:01:33.148 [DEBUG] [Thread-185060] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:01:33.148 [DEBUG] [Thread-185060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:01:33.148 [DEBUG] [Thread-185060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:01:33.148 [DEBUG] [Thread-185060] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:01:33.148 [DEBUG] [Thread-185060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:01:33.149 [DEBUG] [Thread-185060] [transport.py] [_log()] Compression: none
2026-02-14T12:01:33.149 [DEBUG] [Thread-185060] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:01:33.203 [DEBUG] [Thread-185060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:01:33.203 [DEBUG] [Thread-185060] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:01:33.203 [DEBUG] [Thread-185060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:01:33.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:01:33.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:01:33.268 [DEBUG] [Thread-185060] [transport.py] [_log()] userauth is OK
2026-02-14T12:01:33.268 [DEBUG] [Thread-185060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:01:33.268 [DEBUG] [Thread-185060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:01:33.268 [DEBUG] [Thread-185060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:01:33.268 [DEBUG] [Thread-185060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:01:33.284 [INFO] [Thread-185060] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:01:33.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-14T12:01:33.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:01:34.090 [DEBUG] [Thread-185060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:01:34.090 [DEBUG] [Thread-185060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:01:34.145 [DEBUG] [Thread-185060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:01:34.145 [DEBUG] [Thread-185060] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:01:34.161 [DEBUG] [Thread-185060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:01:34.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:01: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')
2026-02-14T12:01:34.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-14T12:01:34.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:01:34.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:01:34.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:01:34.227 [DEBUG] [Thread-185060] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:01:36.069 [DEBUG] [Thread-185062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:01:51.120 [DEBUG] [Thread-185063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:02:04.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:02:04.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:02:04.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:02:06.154 [DEBUG] [Thread-185064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:02:06.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 1, 55), 10.16, 50.1, 0.0, 33.12, 13.69, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:02:06.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:01:55
2026-02-14T12:02:07.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:02:07.298 [DEBUG] [Thread-185065] [transport.py] [_log()] starting thread (client mode): 0xa2db55d0
2026-02-14T12:02:07.298 [DEBUG] [Thread-185065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:02:07.319 [DEBUG] [Thread-185065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:02:07.319 [INFO] [Thread-185065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:02:07.320 [DEBUG] [Thread-185065] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:02:07.321 [DEBUG] [Thread-185065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:02:07.321 [DEBUG] [Thread-185065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:02:07.321 [DEBUG] [Thread-185065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:02:07.321 [DEBUG] [Thread-185065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:02:07.321 [DEBUG] [Thread-185065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:02:07.321 [DEBUG] [Thread-185065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:02:07.321 [DEBUG] [Thread-185065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:02:07.321 [DEBUG] [Thread-185065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:02:07.321 [DEBUG] [Thread-185065] [transport.py] [_log()] client lang: <none>
2026-02-14T12:02:07.321 [DEBUG] [Thread-185065] [transport.py] [_log()] server lang: <none>
2026-02-14T12:02:07.321 [DEBUG] [Thread-185065] [transport.py] [_log()] kex follows: False
2026-02-14T12:02:07.321 [DEBUG] [Thread-185065] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:02:07.321 [DEBUG] [Thread-185065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:02:07.321 [DEBUG] [Thread-185065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:02:07.321 [DEBUG] [Thread-185065] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:02:07.321 [DEBUG] [Thread-185065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:02:07.321 [DEBUG] [Thread-185065] [transport.py] [_log()] Compression: none
2026-02-14T12:02:07.321 [DEBUG] [Thread-185065] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:02:07.341 [DEBUG] [Thread-185065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:02:07.342 [DEBUG] [Thread-185065] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:02:07.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:02:07.343 [DEBUG] [Thread-185065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:02:07.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:02:07.346 [DEBUG] [Thread-185065] [transport.py] [_log()] userauth is OK
2026-02-14T12:02:07.346 [DEBUG] [Thread-185065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:02:07.346 [DEBUG] [Thread-185065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:02:07.346 [DEBUG] [Thread-185065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:02:07.346 [DEBUG] [Thread-185065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:02:07.371 [INFO] [Thread-185065] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:02:07.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:02:08.103 [DEBUG] [Thread-185065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:02:08.104 [DEBUG] [Thread-185065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:02:08.104 [DEBUG] [Thread-185065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:02:08.144 [DEBUG] [Thread-185065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:02:08.153 [DEBUG] [Thread-185065] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:02:08.156 [DEBUG] [Thread-185065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:02:08.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:02:08.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:02:08.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:02:08.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:02:08.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:02:08.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:02:08.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:02:08.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:02:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:02:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.417819 -999.00  +13.80  24.56     54   +4.90 1 2 1 1 1   888    0 9.73 48.20 ----- 19.9 24.6 162.0 33.8 20.3 -24.5 19.1 -23.3 18.7 -21.4 19.8 -23.9
2026-02-14T12:02:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:02:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:02:08.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.417819
2026-02-14T12:02:08.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:02:08.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:02:08.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:02:08.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:02:08.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T12:02:08.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:01:55', tmtdew=10.16, humidity=50.1, cloud=0.0, wind=33.12, temperature=13.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:01:39.562', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:02:08.182 [DEBUG] [Thread-185065] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:02:08.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-14T12:02:08.278 [DEBUG] [Thread-185068] [transport.py] [_log()] starting thread (client mode): 0xa2d3d570
2026-02-14T12:02:08.278 [DEBUG] [Thread-185068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:02:08.292 [DEBUG] [Thread-185068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:02:08.292 [INFO] [Thread-185068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:02:08.300 [DEBUG] [Thread-185068] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:02:08.300 [DEBUG] [Thread-185068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:02:08.300 [DEBUG] [Thread-185068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:02:08.300 [DEBUG] [Thread-185068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:02:08.300 [DEBUG] [Thread-185068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:02:08.300 [DEBUG] [Thread-185068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:02:08.300 [DEBUG] [Thread-185068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:02:08.300 [DEBUG] [Thread-185068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:02:08.300 [DEBUG] [Thread-185068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:02:08.300 [DEBUG] [Thread-185068] [transport.py] [_log()] client lang: <none>
2026-02-14T12:02:08.300 [DEBUG] [Thread-185068] [transport.py] [_log()] server lang: <none>
2026-02-14T12:02:08.300 [DEBUG] [Thread-185068] [transport.py] [_log()] kex follows: False
2026-02-14T12:02:08.300 [DEBUG] [Thread-185068] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:02:08.300 [DEBUG] [Thread-185068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:02:08.300 [DEBUG] [Thread-185068] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:02:08.300 [DEBUG] [Thread-185068] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:02:08.301 [DEBUG] [Thread-185068] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:02:08.301 [DEBUG] [Thread-185068] [transport.py] [_log()] Compression: none
2026-02-14T12:02:08.301 [DEBUG] [Thread-185068] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:02:08.357 [DEBUG] [Thread-185068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:02:08.357 [DEBUG] [Thread-185068] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:02:08.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:02:08.358 [DEBUG] [Thread-185068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:02:08.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:02:08.412 [DEBUG] [Thread-185068] [transport.py] [_log()] userauth is OK
2026-02-14T12:02:08.413 [DEBUG] [Thread-185068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:02:08.413 [DEBUG] [Thread-185068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:02:08.413 [DEBUG] [Thread-185068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:02:08.413 [DEBUG] [Thread-185068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:02:08.431 [INFO] [Thread-185068] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:02:08.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-14T12:02:08.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:02:09.257 [DEBUG] [Thread-185068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:02:09.257 [DEBUG] [Thread-185068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:02:09.305 [DEBUG] [Thread-185068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:02:09.306 [DEBUG] [Thread-185068] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:02:09.315 [DEBUG] [Thread-185068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:02:09.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:02:09.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-14T12:02:09.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-14T12:02:09.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:02:09.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:02:09.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:02:09.351 [DEBUG] [Thread-185068] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:02:17.670 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:02:17.671 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:02:20.515 [DEBUG] [Thread-185070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:02:21.192 [DEBUG] [Thread-185071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:02:36.253 [DEBUG] [Thread-185072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:02:39.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:02:39.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:02:39.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-14T12:02:41.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 2, 30), 10.25, 49.77, 0.0, 31.05, 13.62, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:02:41.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:02:30
2026-02-14T12:02:41.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:02:41.828 [DEBUG] [Thread-185073] [transport.py] [_log()] starting thread (client mode): 0xa2d3e5f0
2026-02-14T12:02:41.828 [DEBUG] [Thread-185073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:02:41.848 [DEBUG] [Thread-185073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:02:41.849 [INFO] [Thread-185073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:02:41.852 [DEBUG] [Thread-185073] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:02:41.852 [DEBUG] [Thread-185073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:02:41.852 [DEBUG] [Thread-185073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:02:41.852 [DEBUG] [Thread-185073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:02:41.852 [DEBUG] [Thread-185073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:02:41.852 [DEBUG] [Thread-185073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:02:41.852 [DEBUG] [Thread-185073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:02:41.852 [DEBUG] [Thread-185073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:02:41.852 [DEBUG] [Thread-185073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:02:41.852 [DEBUG] [Thread-185073] [transport.py] [_log()] client lang: <none>
2026-02-14T12:02:41.852 [DEBUG] [Thread-185073] [transport.py] [_log()] server lang: <none>
2026-02-14T12:02:41.852 [DEBUG] [Thread-185073] [transport.py] [_log()] kex follows: False
2026-02-14T12:02:41.852 [DEBUG] [Thread-185073] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:02:41.852 [DEBUG] [Thread-185073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:02:41.852 [DEBUG] [Thread-185073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:02:41.852 [DEBUG] [Thread-185073] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:02:41.852 [DEBUG] [Thread-185073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:02:41.853 [DEBUG] [Thread-185073] [transport.py] [_log()] Compression: none
2026-02-14T12:02:41.853 [DEBUG] [Thread-185073] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:02:41.872 [DEBUG] [Thread-185073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:02:41.872 [DEBUG] [Thread-185073] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:02:41.873 [DEBUG] [Thread-185073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:02:41.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:02:41.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:02:41.877 [DEBUG] [Thread-185073] [transport.py] [_log()] userauth is OK
2026-02-14T12:02:41.878 [DEBUG] [Thread-185073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:02:41.878 [DEBUG] [Thread-185073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:02:41.878 [DEBUG] [Thread-185073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:02:41.878 [DEBUG] [Thread-185073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:02:41.901 [INFO] [Thread-185073] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:02:41.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:02:42.553 [DEBUG] [Thread-185073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:02:42.553 [DEBUG] [Thread-185073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:02:42.554 [DEBUG] [Thread-185073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:02:42.594 [DEBUG] [Thread-185073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:02:42.594 [DEBUG] [Thread-185073] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:02:42.598 [DEBUG] [Thread-185073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:02:42.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:02:42.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:02:42.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:02:42.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:02:42.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:02:42.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:02:42.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:02:42.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:02:42.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:02:42.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.418167 -999.00  +14.20  25.12     53   +4.90 1 2 1 1 1   888    0 9.92 51.45 ----- 30.9 25.1 177.7 32.3 20.4 -24.2 19.1 -22.6 18.9 -21.8 19.9 -24.0
2026-02-14T12:02:42.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:02:42.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:02:42.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.418167
2026-02-14T12:02:42.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:02:42.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:02:42.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:02:42.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:02:42.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T12:02:42.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:02:30', tmtdew=10.25, humidity=49.77, cloud=0.0, wind=31.05, temperature=13.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:02:09.629', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:02:42.622 [DEBUG] [Thread-185073] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:02:42.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-14T12:02:42.718 [DEBUG] [Thread-185076] [transport.py] [_log()] starting thread (client mode): 0xa57c1660
2026-02-14T12:02:42.718 [DEBUG] [Thread-185076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:02:42.733 [DEBUG] [Thread-185076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:02:42.733 [INFO] [Thread-185076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:02:42.741 [DEBUG] [Thread-185076] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:02:42.741 [DEBUG] [Thread-185076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:02:42.741 [DEBUG] [Thread-185076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:02:42.741 [DEBUG] [Thread-185076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:02:42.741 [DEBUG] [Thread-185076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:02:42.742 [DEBUG] [Thread-185076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:02:42.742 [DEBUG] [Thread-185076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:02:42.742 [DEBUG] [Thread-185076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:02:42.742 [DEBUG] [Thread-185076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:02:42.742 [DEBUG] [Thread-185076] [transport.py] [_log()] client lang: <none>
2026-02-14T12:02:42.742 [DEBUG] [Thread-185076] [transport.py] [_log()] server lang: <none>
2026-02-14T12:02:42.742 [DEBUG] [Thread-185076] [transport.py] [_log()] kex follows: False
2026-02-14T12:02:42.742 [DEBUG] [Thread-185076] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:02:42.742 [DEBUG] [Thread-185076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:02:42.742 [DEBUG] [Thread-185076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:02:42.742 [DEBUG] [Thread-185076] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:02:42.742 [DEBUG] [Thread-185076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:02:42.742 [DEBUG] [Thread-185076] [transport.py] [_log()] Compression: none
2026-02-14T12:02:42.742 [DEBUG] [Thread-185076] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:02:42.801 [DEBUG] [Thread-185076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:02:42.801 [DEBUG] [Thread-185076] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:02:42.802 [DEBUG] [Thread-185076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:02:42.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:02:42.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:02:42.857 [DEBUG] [Thread-185076] [transport.py] [_log()] userauth is OK
2026-02-14T12:02:42.857 [DEBUG] [Thread-185076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:02:42.857 [DEBUG] [Thread-185076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:02:42.857 [DEBUG] [Thread-185076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:02:42.857 [DEBUG] [Thread-185076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:02:42.875 [INFO] [Thread-185076] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:02:42.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-14T12:02:42.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:02:43.671 [DEBUG] [Thread-185076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:02:43.671 [DEBUG] [Thread-185076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:02:43.719 [DEBUG] [Thread-185076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:02:43.720 [DEBUG] [Thread-185076] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:02:43.729 [DEBUG] [Thread-185076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:02:43.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:02:43.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-14T12:02:43.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-14T12:02:43.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:02:43.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:02:43.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:02:43.765 [DEBUG] [Thread-185076] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:02:51.292 [DEBUG] [Thread-185078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:03:06.342 [DEBUG] [Thread-185079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:03:13.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:03:13.783 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:03:13.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-14T12:03:15.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 3, 5), 10.06, 50.38, 0.0, 32.69, 13.57, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:03:15.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:03:05
2026-02-14T12:03:16.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:03:16.181 [DEBUG] [Thread-185080] [transport.py] [_log()] starting thread (client mode): 0xa2dc2170
2026-02-14T12:03:16.181 [DEBUG] [Thread-185080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:03:16.193 [DEBUG] [Thread-185080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:03:16.193 [INFO] [Thread-185080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:03:16.196 [DEBUG] [Thread-185080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:03:16.196 [DEBUG] [Thread-185080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:03:16.196 [DEBUG] [Thread-185080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:03:16.196 [DEBUG] [Thread-185080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:03:16.196 [DEBUG] [Thread-185080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:03:16.196 [DEBUG] [Thread-185080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:03:16.196 [DEBUG] [Thread-185080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:03:16.196 [DEBUG] [Thread-185080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:03:16.196 [DEBUG] [Thread-185080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:03:16.196 [DEBUG] [Thread-185080] [transport.py] [_log()] client lang: <none>
2026-02-14T12:03:16.196 [DEBUG] [Thread-185080] [transport.py] [_log()] server lang: <none>
2026-02-14T12:03:16.196 [DEBUG] [Thread-185080] [transport.py] [_log()] kex follows: False
2026-02-14T12:03:16.196 [DEBUG] [Thread-185080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:03:16.196 [DEBUG] [Thread-185080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:03:16.196 [DEBUG] [Thread-185080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:03:16.196 [DEBUG] [Thread-185080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:03:16.196 [DEBUG] [Thread-185080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:03:16.197 [DEBUG] [Thread-185080] [transport.py] [_log()] Compression: none
2026-02-14T12:03:16.197 [DEBUG] [Thread-185080] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:03:16.214 [DEBUG] [Thread-185080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:03:16.215 [DEBUG] [Thread-185080] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:03:16.215 [DEBUG] [Thread-185080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:03:16.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:03:16.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:03:16.217 [DEBUG] [Thread-185080] [transport.py] [_log()] userauth is OK
2026-02-14T12:03:16.217 [DEBUG] [Thread-185080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:03:16.217 [DEBUG] [Thread-185080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:03:16.217 [DEBUG] [Thread-185080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:03:16.217 [DEBUG] [Thread-185080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:03:16.242 [INFO] [Thread-185080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:03:16.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:03:16.899 [DEBUG] [Thread-185080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:03:16.900 [DEBUG] [Thread-185080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:03:16.900 [DEBUG] [Thread-185080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:03:16.940 [DEBUG] [Thread-185080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:03:16.941 [DEBUG] [Thread-185080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:03:16.944 [DEBUG] [Thread-185080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:03:16.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:03:16.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:03:16.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:03:16.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:03:16.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:03:16.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:03:16.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:03:16.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:03:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:03:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.418514 -999.00  +14.00  24.13     53   +4.70 1 1 1 1 1   888    0 10.12 55.83 ----- 23.4 24.1 190.2 33.1 20.3 -25.2 18.9 -26.8 18.8 -24.6 19.8 -25.0
2026-02-14T12:03:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:03:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:03:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.418514
2026-02-14T12:03:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:03:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:03:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:03:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:03:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:03:16.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:03:05', tmtdew=10.06, humidity=50.38, cloud=0.0, wind=32.69, temperature=13.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:02:39.610', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:03:16.971 [DEBUG] [Thread-185080] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:03:17.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:03:17.065 [DEBUG] [Thread-185083] [transport.py] [_log()] starting thread (client mode): 0xa2db7580
2026-02-14T12:03:17.066 [DEBUG] [Thread-185083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:03:17.080 [DEBUG] [Thread-185083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:03:17.080 [INFO] [Thread-185083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:03:17.088 [DEBUG] [Thread-185083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:03:17.088 [DEBUG] [Thread-185083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:03:17.088 [DEBUG] [Thread-185083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:03:17.088 [DEBUG] [Thread-185083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:03:17.088 [DEBUG] [Thread-185083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:03:17.088 [DEBUG] [Thread-185083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:03:17.088 [DEBUG] [Thread-185083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:03:17.088 [DEBUG] [Thread-185083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:03:17.088 [DEBUG] [Thread-185083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:03:17.088 [DEBUG] [Thread-185083] [transport.py] [_log()] client lang: <none>
2026-02-14T12:03:17.088 [DEBUG] [Thread-185083] [transport.py] [_log()] server lang: <none>
2026-02-14T12:03:17.088 [DEBUG] [Thread-185083] [transport.py] [_log()] kex follows: False
2026-02-14T12:03:17.089 [DEBUG] [Thread-185083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:03:17.089 [DEBUG] [Thread-185083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:03:17.089 [DEBUG] [Thread-185083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:03:17.089 [DEBUG] [Thread-185083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:03:17.089 [DEBUG] [Thread-185083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:03:17.089 [DEBUG] [Thread-185083] [transport.py] [_log()] Compression: none
2026-02-14T12:03:17.089 [DEBUG] [Thread-185083] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:03:17.145 [DEBUG] [Thread-185083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:03:17.145 [DEBUG] [Thread-185083] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:03:17.146 [DEBUG] [Thread-185083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:03:17.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:03:17.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:03:17.201 [DEBUG] [Thread-185083] [transport.py] [_log()] userauth is OK
2026-02-14T12:03:17.202 [DEBUG] [Thread-185083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:03:17.202 [DEBUG] [Thread-185083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:03:17.202 [DEBUG] [Thread-185083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:03:17.202 [DEBUG] [Thread-185083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:03:17.220 [INFO] [Thread-185083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:03:17.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-14T12:03:17.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:03:17.812 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:03:17.813 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:03:18.016 [DEBUG] [Thread-185083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:03:18.016 [DEBUG] [Thread-185083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:03:18.063 [DEBUG] [Thread-185083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:03:18.063 [DEBUG] [Thread-185083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:03:18.072 [DEBUG] [Thread-185083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:03:18.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:03:18.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-14T12:03:18.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-14T12:03:18.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:03:18.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:03:18.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:03:18.112 [DEBUG] [Thread-185083] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:03:20.548 [DEBUG] [Thread-185085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:03:21.380 [DEBUG] [Thread-185086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:03:36.441 [DEBUG] [Thread-185087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:03:48.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:03:48.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:03:48.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-14T12:03:50.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 3, 41), 10.76, 48.36, 0.0, 34.01, 14.57, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:03:50.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:03:41
2026-02-14T12:03:50.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:03:50.744 [DEBUG] [Thread-185088] [transport.py] [_log()] starting thread (client mode): 0xa57c1ae0
2026-02-14T12:03:50.745 [DEBUG] [Thread-185088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:03:50.765 [DEBUG] [Thread-185088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:03:50.765 [INFO] [Thread-185088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:03:50.768 [DEBUG] [Thread-185088] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:03:50.768 [DEBUG] [Thread-185088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:03:50.768 [DEBUG] [Thread-185088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:03:50.768 [DEBUG] [Thread-185088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:03:50.768 [DEBUG] [Thread-185088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:03:50.768 [DEBUG] [Thread-185088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:03:50.768 [DEBUG] [Thread-185088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:03:50.768 [DEBUG] [Thread-185088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:03:50.768 [DEBUG] [Thread-185088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:03:50.768 [DEBUG] [Thread-185088] [transport.py] [_log()] client lang: <none>
2026-02-14T12:03:50.768 [DEBUG] [Thread-185088] [transport.py] [_log()] server lang: <none>
2026-02-14T12:03:50.768 [DEBUG] [Thread-185088] [transport.py] [_log()] kex follows: False
2026-02-14T12:03:50.768 [DEBUG] [Thread-185088] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:03:50.768 [DEBUG] [Thread-185088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:03:50.768 [DEBUG] [Thread-185088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:03:50.768 [DEBUG] [Thread-185088] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:03:50.768 [DEBUG] [Thread-185088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:03:50.768 [DEBUG] [Thread-185088] [transport.py] [_log()] Compression: none
2026-02-14T12:03:50.768 [DEBUG] [Thread-185088] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:03:50.785 [DEBUG] [Thread-185088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:03:50.785 [DEBUG] [Thread-185088] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:03:50.786 [DEBUG] [Thread-185088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:03:50.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:03:50.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:03:50.787 [DEBUG] [Thread-185088] [transport.py] [_log()] userauth is OK
2026-02-14T12:03:50.788 [DEBUG] [Thread-185088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:03:50.788 [DEBUG] [Thread-185088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:03:50.788 [DEBUG] [Thread-185088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:03:50.788 [DEBUG] [Thread-185088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:03:50.808 [INFO] [Thread-185088] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:03:50.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:03:51.392 [DEBUG] [Thread-185088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:03:51.392 [DEBUG] [Thread-185088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:03:51.393 [DEBUG] [Thread-185088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:03:51.433 [DEBUG] [Thread-185088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:03:51.434 [DEBUG] [Thread-185088] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:03:51.437 [DEBUG] [Thread-185088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:03:51.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:03:51.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:03:51.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:03:51.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:03:51.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:03:51.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:03:51.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:03:51.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:03:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:03:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.418861 -999.00  +13.80  31.67     54   +4.70 1 1 2 1 1   888    0 10.12 53.71 ----- 29.6 31.7 172.0 41.9 20.3 -24.8 18.9 -24.2 18.7 -24.8 19.9 -23.9
2026-02-14T12:03:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:03:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:03:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.418861
2026-02-14T12:03:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:03:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:03:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:03:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:03:51.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:03:51.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:03:41', tmtdew=10.76, humidity=48.36, cloud=0.0, wind=34.01, temperature=14.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:03:09.590', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:03:51.463 [DEBUG] [Thread-185088] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:03:51.480 [DEBUG] [Thread-185091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:03:51.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-14T12:03:51.562 [DEBUG] [Thread-185092] [transport.py] [_log()] starting thread (client mode): 0xa2db7f40
2026-02-14T12:03:51.562 [DEBUG] [Thread-185092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:03:51.577 [DEBUG] [Thread-185092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:03:51.577 [INFO] [Thread-185092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:03:51.585 [DEBUG] [Thread-185092] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:03:51.585 [DEBUG] [Thread-185092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:03:51.585 [DEBUG] [Thread-185092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:03:51.585 [DEBUG] [Thread-185092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:03:51.585 [DEBUG] [Thread-185092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:03:51.585 [DEBUG] [Thread-185092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:03:51.585 [DEBUG] [Thread-185092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:03:51.585 [DEBUG] [Thread-185092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:03:51.585 [DEBUG] [Thread-185092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:03:51.585 [DEBUG] [Thread-185092] [transport.py] [_log()] client lang: <none>
2026-02-14T12:03:51.585 [DEBUG] [Thread-185092] [transport.py] [_log()] server lang: <none>
2026-02-14T12:03:51.585 [DEBUG] [Thread-185092] [transport.py] [_log()] kex follows: False
2026-02-14T12:03:51.585 [DEBUG] [Thread-185092] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:03:51.585 [DEBUG] [Thread-185092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:03:51.585 [DEBUG] [Thread-185092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:03:51.586 [DEBUG] [Thread-185092] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:03:51.586 [DEBUG] [Thread-185092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:03:51.586 [DEBUG] [Thread-185092] [transport.py] [_log()] Compression: none
2026-02-14T12:03:51.586 [DEBUG] [Thread-185092] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:03:51.648 [DEBUG] [Thread-185092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:03:51.649 [DEBUG] [Thread-185092] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:03:51.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:03:51.650 [DEBUG] [Thread-185092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:03:51.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:03:51.705 [DEBUG] [Thread-185092] [transport.py] [_log()] userauth is OK
2026-02-14T12:03:51.706 [DEBUG] [Thread-185092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:03:51.706 [DEBUG] [Thread-185092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:03:51.706 [DEBUG] [Thread-185092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:03:51.706 [DEBUG] [Thread-185092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:03:51.725 [INFO] [Thread-185092] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:03: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-14T12:03:51.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:03:52.540 [DEBUG] [Thread-185092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:03:52.541 [DEBUG] [Thread-185092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:03:52.588 [DEBUG] [Thread-185092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:03:52.589 [DEBUG] [Thread-185092] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:03:52.598 [DEBUG] [Thread-185092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:03:52.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:03:52.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:03:52.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:03:52.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:03:52.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:03:52.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:03:52.635 [DEBUG] [Thread-185092] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:04:06.521 [DEBUG] [Thread-185094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:04:17.953 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:04:17.954 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:04:20.589 [DEBUG] [Thread-185095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:04:21.555 [DEBUG] [Thread-185096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:04:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:04:22.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:04:22.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:04:24.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 4, 16), 9.74, 51.81, 0.0, 26.52, 13.1, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:04:24.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:04:16
2026-02-14T12:04:24.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:04:25.122 [DEBUG] [Thread-185097] [transport.py] [_log()] starting thread (client mode): 0xa2dc0b50
2026-02-14T12:04:25.122 [DEBUG] [Thread-185097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:04:25.142 [DEBUG] [Thread-185097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:04:25.142 [INFO] [Thread-185097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:04:25.143 [DEBUG] [Thread-185097] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:04:25.143 [DEBUG] [Thread-185097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:04:25.143 [DEBUG] [Thread-185097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:04:25.143 [DEBUG] [Thread-185097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:04:25.143 [DEBUG] [Thread-185097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:04:25.143 [DEBUG] [Thread-185097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:04:25.143 [DEBUG] [Thread-185097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:04:25.143 [DEBUG] [Thread-185097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:04:25.144 [DEBUG] [Thread-185097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:04:25.144 [DEBUG] [Thread-185097] [transport.py] [_log()] client lang: <none>
2026-02-14T12:04:25.144 [DEBUG] [Thread-185097] [transport.py] [_log()] server lang: <none>
2026-02-14T12:04:25.144 [DEBUG] [Thread-185097] [transport.py] [_log()] kex follows: False
2026-02-14T12:04:25.144 [DEBUG] [Thread-185097] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:04:25.144 [DEBUG] [Thread-185097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:04:25.144 [DEBUG] [Thread-185097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:04:25.144 [DEBUG] [Thread-185097] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:04:25.144 [DEBUG] [Thread-185097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:04:25.144 [DEBUG] [Thread-185097] [transport.py] [_log()] Compression: none
2026-02-14T12:04:25.144 [DEBUG] [Thread-185097] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:04:25.161 [DEBUG] [Thread-185097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:04:25.162 [DEBUG] [Thread-185097] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:04:25.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:04:25.163 [DEBUG] [Thread-185097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:04:25.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:04:25.165 [DEBUG] [Thread-185097] [transport.py] [_log()] userauth is OK
2026-02-14T12:04:25.165 [DEBUG] [Thread-185097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:04:25.165 [DEBUG] [Thread-185097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:04:25.165 [DEBUG] [Thread-185097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:04:25.165 [DEBUG] [Thread-185097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:04:25.202 [INFO] [Thread-185097] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:04:25.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:04:25.799 [DEBUG] [Thread-185097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:04:25.799 [DEBUG] [Thread-185097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:04:25.799 [DEBUG] [Thread-185097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:04:25.840 [DEBUG] [Thread-185097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:04:25.840 [DEBUG] [Thread-185097] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:04:25.843 [DEBUG] [Thread-185097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:04:25.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:04:25.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:04:25.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:04:25.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:04:25.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:04:25.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:04:25.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:04:25.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:04:25.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:04:25.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.419208 -999.00  +13.60  33.72     55   +4.80 1 1 2 1 1   888    0 10.02 54.38 ----- 23.6 33.7 178.8 38.1 20.2 -24.5 18.6 -29.2 18.6 -24.7 19.8 -24.5
2026-02-14T12:04:25.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:04:25.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:04:25.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.419208
2026-02-14T12:04:25.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:04:25.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:04:25.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:04:25.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:04:25.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:04:25.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:04:16', tmtdew=9.74, humidity=51.81, cloud=0.0, wind=26.52, temperature=13.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:03:39.571', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:04:25.872 [DEBUG] [Thread-185097] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:04:25.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-14T12:04:25.978 [DEBUG] [Thread-185100] [transport.py] [_log()] starting thread (client mode): 0xa57c3a00
2026-02-14T12:04:25.978 [DEBUG] [Thread-185100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:04:25.993 [DEBUG] [Thread-185100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:04:25.993 [INFO] [Thread-185100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:04:26.000 [DEBUG] [Thread-185100] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:04:26.000 [DEBUG] [Thread-185100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:04:26.001 [DEBUG] [Thread-185100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:04:26.001 [DEBUG] [Thread-185100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:04:26.001 [DEBUG] [Thread-185100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:04:26.001 [DEBUG] [Thread-185100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:04:26.001 [DEBUG] [Thread-185100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:04:26.001 [DEBUG] [Thread-185100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:04:26.001 [DEBUG] [Thread-185100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:04:26.001 [DEBUG] [Thread-185100] [transport.py] [_log()] client lang: <none>
2026-02-14T12:04:26.001 [DEBUG] [Thread-185100] [transport.py] [_log()] server lang: <none>
2026-02-14T12:04:26.001 [DEBUG] [Thread-185100] [transport.py] [_log()] kex follows: False
2026-02-14T12:04:26.001 [DEBUG] [Thread-185100] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:04:26.001 [DEBUG] [Thread-185100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:04:26.001 [DEBUG] [Thread-185100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:04:26.001 [DEBUG] [Thread-185100] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:04:26.001 [DEBUG] [Thread-185100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:04:26.001 [DEBUG] [Thread-185100] [transport.py] [_log()] Compression: none
2026-02-14T12:04:26.001 [DEBUG] [Thread-185100] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:04:26.061 [DEBUG] [Thread-185100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:04:26.061 [DEBUG] [Thread-185100] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:04:26.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:04:26.062 [DEBUG] [Thread-185100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:04:26.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:04:26.118 [DEBUG] [Thread-185100] [transport.py] [_log()] userauth is OK
2026-02-14T12:04:26.119 [DEBUG] [Thread-185100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:04:26.119 [DEBUG] [Thread-185100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:04:26.119 [DEBUG] [Thread-185100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:04:26.119 [DEBUG] [Thread-185100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:04:26.139 [INFO] [Thread-185100] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:04:26.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-14T12:04:26.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:04:26.946 [DEBUG] [Thread-185100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:04:26.946 [DEBUG] [Thread-185100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:04:26.996 [DEBUG] [Thread-185100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:04:26.996 [DEBUG] [Thread-185100] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:04:27.006 [DEBUG] [Thread-185100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:04:27.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:04:27.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-14T12:04:27.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:04:27.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:04:27.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:04:27.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:04:27.044 [DEBUG] [Thread-185100] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:04:36.594 [DEBUG] [Thread-185102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:04:51.647 [DEBUG] [Thread-185103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:04:57.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:04:57.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:04:57.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:04:58.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 4, 16), 9.74, 51.81, 0.0, 26.52, 13.1, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:04:58.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:04:16
2026-02-14T12:04:59.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:04:59.485 [DEBUG] [Thread-185104] [transport.py] [_log()] starting thread (client mode): 0xa2db5b70
2026-02-14T12:04:59.485 [DEBUG] [Thread-185104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:04:59.505 [DEBUG] [Thread-185104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:04:59.505 [INFO] [Thread-185104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:04:59.508 [DEBUG] [Thread-185104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:04:59.508 [DEBUG] [Thread-185104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:04:59.508 [DEBUG] [Thread-185104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:04:59.508 [DEBUG] [Thread-185104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:04:59.508 [DEBUG] [Thread-185104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:04:59.508 [DEBUG] [Thread-185104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:04:59.508 [DEBUG] [Thread-185104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:04:59.508 [DEBUG] [Thread-185104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:04:59.508 [DEBUG] [Thread-185104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:04:59.508 [DEBUG] [Thread-185104] [transport.py] [_log()] client lang: <none>
2026-02-14T12:04:59.508 [DEBUG] [Thread-185104] [transport.py] [_log()] server lang: <none>
2026-02-14T12:04:59.508 [DEBUG] [Thread-185104] [transport.py] [_log()] kex follows: False
2026-02-14T12:04:59.508 [DEBUG] [Thread-185104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:04:59.508 [DEBUG] [Thread-185104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:04:59.509 [DEBUG] [Thread-185104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:04:59.509 [DEBUG] [Thread-185104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:04:59.509 [DEBUG] [Thread-185104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:04:59.509 [DEBUG] [Thread-185104] [transport.py] [_log()] Compression: none
2026-02-14T12:04:59.509 [DEBUG] [Thread-185104] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:04:59.525 [DEBUG] [Thread-185104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:04:59.526 [DEBUG] [Thread-185104] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:04:59.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:04:59.527 [DEBUG] [Thread-185104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:04:59.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:04:59.529 [DEBUG] [Thread-185104] [transport.py] [_log()] userauth is OK
2026-02-14T12:04:59.530 [DEBUG] [Thread-185104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:04:59.530 [DEBUG] [Thread-185104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:04:59.530 [DEBUG] [Thread-185104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:04:59.530 [DEBUG] [Thread-185104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:04:59.552 [INFO] [Thread-185104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:04:59.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:05:00.349 [DEBUG] [Thread-185104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:05:00.349 [DEBUG] [Thread-185104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:05:00.350 [DEBUG] [Thread-185104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:05:00.390 [DEBUG] [Thread-185104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:05:00.391 [DEBUG] [Thread-185104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:05:00.394 [DEBUG] [Thread-185104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:05:00.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:05:00.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:05:00.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:05:00.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:05:00.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:05:00.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:05:00.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:05:00.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:05:00.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:05:00.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.419555 -999.00  +13.40  19.50     56   +4.80 1 1 1 1 1   888    0 10.14 53.47 ----- 21.0 19.5 181.0 36.2 20.0 -26.5 18.4 -30.2 18.5 -23.0 19.6 -26.7
2026-02-14T12:05:00.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:05:00.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:05:00.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.419555
2026-02-14T12:05:00.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:05:00.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:05:00.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:05:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:05:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:05:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:04:16', tmtdew=9.74, humidity=51.81, cloud=0.0, wind=26.52, temperature=13.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:04:09.552', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:05:00.422 [DEBUG] [Thread-185104] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:05:00.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-14T12:05:00.517 [DEBUG] [Thread-185107] [transport.py] [_log()] starting thread (client mode): 0xa2dc26b0
2026-02-14T12:05:00.517 [DEBUG] [Thread-185107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:05:00.532 [DEBUG] [Thread-185107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:05:00.532 [INFO] [Thread-185107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:05:00.539 [DEBUG] [Thread-185107] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:05:00.539 [DEBUG] [Thread-185107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:05:00.540 [DEBUG] [Thread-185107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:05:00.540 [DEBUG] [Thread-185107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:05:00.540 [DEBUG] [Thread-185107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:05:00.540 [DEBUG] [Thread-185107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:05:00.540 [DEBUG] [Thread-185107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:05:00.540 [DEBUG] [Thread-185107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:05:00.540 [DEBUG] [Thread-185107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:05:00.540 [DEBUG] [Thread-185107] [transport.py] [_log()] client lang: <none>
2026-02-14T12:05:00.540 [DEBUG] [Thread-185107] [transport.py] [_log()] server lang: <none>
2026-02-14T12:05:00.540 [DEBUG] [Thread-185107] [transport.py] [_log()] kex follows: False
2026-02-14T12:05:00.540 [DEBUG] [Thread-185107] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:05:00.540 [DEBUG] [Thread-185107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:05:00.540 [DEBUG] [Thread-185107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:05:00.540 [DEBUG] [Thread-185107] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:05:00.540 [DEBUG] [Thread-185107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:05:00.540 [DEBUG] [Thread-185107] [transport.py] [_log()] Compression: none
2026-02-14T12:05:00.540 [DEBUG] [Thread-185107] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:05:00.600 [DEBUG] [Thread-185107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:05:00.601 [DEBUG] [Thread-185107] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:05:00.601 [DEBUG] [Thread-185107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:05:00.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:05:00.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:05:00.658 [DEBUG] [Thread-185107] [transport.py] [_log()] userauth is OK
2026-02-14T12:05:00.659 [DEBUG] [Thread-185107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:05:00.659 [DEBUG] [Thread-185107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:05:00.659 [DEBUG] [Thread-185107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:05:00.659 [DEBUG] [Thread-185107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:05:00.677 [INFO] [Thread-185107] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:05:00.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-14T12:05:00.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:05:01.508 [DEBUG] [Thread-185107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:05:01.508 [DEBUG] [Thread-185107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:05:01.559 [DEBUG] [Thread-185107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:05:01.559 [DEBUG] [Thread-185107] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:05:01.569 [DEBUG] [Thread-185107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:05:01.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:05:01.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-14T12:05:01.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-14T12:05:01.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:05:01.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:05:01.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:05:01.610 [DEBUG] [Thread-185107] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:05:06.682 [DEBUG] [Thread-185109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:05:18.096 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:05:18.096 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:05:20.630 [DEBUG] [Thread-185110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:05:21.735 [DEBUG] [Thread-185111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:05:31.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:05:31.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:05:31.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-14T12:05:34.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 4, 51), 9.42, 52.53, 0.0, 24.19, 12.8, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:05:34.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:04:51
2026-02-14T12:05:34.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:05:34.724 [DEBUG] [Thread-185112] [transport.py] [_log()] starting thread (client mode): 0xa57c3fd0
2026-02-14T12:05:34.724 [DEBUG] [Thread-185112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:05:34.746 [DEBUG] [Thread-185112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:05:34.746 [INFO] [Thread-185112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:05:34.747 [DEBUG] [Thread-185112] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:05:34.747 [DEBUG] [Thread-185112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:05:34.747 [DEBUG] [Thread-185112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:05:34.747 [DEBUG] [Thread-185112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:05:34.747 [DEBUG] [Thread-185112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:05:34.747 [DEBUG] [Thread-185112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:05:34.747 [DEBUG] [Thread-185112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:05:34.747 [DEBUG] [Thread-185112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:05:34.747 [DEBUG] [Thread-185112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:05:34.747 [DEBUG] [Thread-185112] [transport.py] [_log()] client lang: <none>
2026-02-14T12:05:34.747 [DEBUG] [Thread-185112] [transport.py] [_log()] server lang: <none>
2026-02-14T12:05:34.747 [DEBUG] [Thread-185112] [transport.py] [_log()] kex follows: False
2026-02-14T12:05:34.747 [DEBUG] [Thread-185112] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:05:34.747 [DEBUG] [Thread-185112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:05:34.747 [DEBUG] [Thread-185112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:05:34.747 [DEBUG] [Thread-185112] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:05:34.747 [DEBUG] [Thread-185112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:05:34.747 [DEBUG] [Thread-185112] [transport.py] [_log()] Compression: none
2026-02-14T12:05:34.747 [DEBUG] [Thread-185112] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:05:34.765 [DEBUG] [Thread-185112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:05:34.765 [DEBUG] [Thread-185112] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:05:34.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:05:34.766 [DEBUG] [Thread-185112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:05:34.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:05:34.768 [DEBUG] [Thread-185112] [transport.py] [_log()] userauth is OK
2026-02-14T12:05:34.768 [DEBUG] [Thread-185112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:05:34.769 [DEBUG] [Thread-185112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:05:34.769 [DEBUG] [Thread-185112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:05:34.769 [DEBUG] [Thread-185112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:05:34.803 [INFO] [Thread-185112] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:05:34.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:05:35.444 [DEBUG] [Thread-185112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:05:35.444 [DEBUG] [Thread-185112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:05:35.445 [DEBUG] [Thread-185112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:05:35.485 [DEBUG] [Thread-185112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:05:35.486 [DEBUG] [Thread-185112] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:05:35.489 [DEBUG] [Thread-185112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:05:35.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:05:35.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:05:35.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:05:35.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:05:35.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:05:35.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:05:35.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:05:35.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:05:35.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:05:35.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.419903 -999.00  +13.40  23.47     56   +4.90 1 1 1 1 1   888    0 10.03 53.19 ----- 28.5 23.5 176.6 29.7 20.1 -24.5 18.6 -24.3 18.7 -23.7 19.7 -24.6
2026-02-14T12:05:35.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:05:35.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:05:35.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.419903
2026-02-14T12:05:35.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:05:35.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:05:35.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:05:35.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:05:35.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:05:35.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:04:51', tmtdew=9.42, humidity=52.53, cloud=0.0, wind=24.19, temperature=12.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:04:39.619', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:05:35.519 [DEBUG] [Thread-185112] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:05:35.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-14T12:05:35.610 [DEBUG] [Thread-185115] [transport.py] [_log()] starting thread (client mode): 0xa5743f40
2026-02-14T12:05:35.610 [DEBUG] [Thread-185115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:05:35.624 [DEBUG] [Thread-185115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:05:35.624 [INFO] [Thread-185115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:05:35.636 [DEBUG] [Thread-185115] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:05:35.636 [DEBUG] [Thread-185115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:05:35.637 [DEBUG] [Thread-185115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:05:35.637 [DEBUG] [Thread-185115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:05:35.637 [DEBUG] [Thread-185115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:05:35.637 [DEBUG] [Thread-185115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:05:35.637 [DEBUG] [Thread-185115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:05:35.637 [DEBUG] [Thread-185115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:05:35.637 [DEBUG] [Thread-185115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:05:35.637 [DEBUG] [Thread-185115] [transport.py] [_log()] client lang: <none>
2026-02-14T12:05:35.637 [DEBUG] [Thread-185115] [transport.py] [_log()] server lang: <none>
2026-02-14T12:05:35.637 [DEBUG] [Thread-185115] [transport.py] [_log()] kex follows: False
2026-02-14T12:05:35.637 [DEBUG] [Thread-185115] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:05:35.637 [DEBUG] [Thread-185115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:05:35.638 [DEBUG] [Thread-185115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:05:35.638 [DEBUG] [Thread-185115] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:05:35.638 [DEBUG] [Thread-185115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:05:35.638 [DEBUG] [Thread-185115] [transport.py] [_log()] Compression: none
2026-02-14T12:05:35.638 [DEBUG] [Thread-185115] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:05:35.689 [DEBUG] [Thread-185115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:05:35.690 [DEBUG] [Thread-185115] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:05:35.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:05:35.691 [DEBUG] [Thread-185115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:05:35.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:05:35.754 [DEBUG] [Thread-185115] [transport.py] [_log()] userauth is OK
2026-02-14T12:05:35.754 [DEBUG] [Thread-185115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:05:35.754 [DEBUG] [Thread-185115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:05:35.754 [DEBUG] [Thread-185115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:05:35.754 [DEBUG] [Thread-185115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:05:35.773 [INFO] [Thread-185115] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:05:35.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-14T12:05:35.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:05:36.591 [DEBUG] [Thread-185115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:05:36.592 [DEBUG] [Thread-185115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:05:36.639 [DEBUG] [Thread-185115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:05:36.640 [DEBUG] [Thread-185115] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:05:36.649 [DEBUG] [Thread-185115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:05:36.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:05:36.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-14T12:05:36.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-14T12:05:36.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:05:36.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:05:36.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:05:36.685 [DEBUG] [Thread-185115] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:05:36.771 [DEBUG] [Thread-185117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:05:51.823 [DEBUG] [Thread-185118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:06:06.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:06:06.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:06:06.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:06:06.860 [DEBUG] [Thread-185119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:06:09.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 5, 27), 9.22, 53.21, 0.0, 21.44, 12.7, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:06:09.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:05:27
2026-02-14T12:06:09.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:06:09.737 [DEBUG] [Thread-185120] [transport.py] [_log()] starting thread (client mode): 0xa57c0a60
2026-02-14T12:06:09.737 [DEBUG] [Thread-185120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:06:09.757 [DEBUG] [Thread-185120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:06:09.758 [INFO] [Thread-185120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:06:09.760 [DEBUG] [Thread-185120] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:06:09.761 [DEBUG] [Thread-185120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:06:09.761 [DEBUG] [Thread-185120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:06:09.761 [DEBUG] [Thread-185120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:06:09.761 [DEBUG] [Thread-185120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:06:09.761 [DEBUG] [Thread-185120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:06:09.761 [DEBUG] [Thread-185120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:06:09.761 [DEBUG] [Thread-185120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:06:09.761 [DEBUG] [Thread-185120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:06:09.761 [DEBUG] [Thread-185120] [transport.py] [_log()] client lang: <none>
2026-02-14T12:06:09.761 [DEBUG] [Thread-185120] [transport.py] [_log()] server lang: <none>
2026-02-14T12:06:09.762 [DEBUG] [Thread-185120] [transport.py] [_log()] kex follows: False
2026-02-14T12:06:09.762 [DEBUG] [Thread-185120] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:06:09.762 [DEBUG] [Thread-185120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:06:09.762 [DEBUG] [Thread-185120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:06:09.762 [DEBUG] [Thread-185120] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:06:09.762 [DEBUG] [Thread-185120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:06:09.762 [DEBUG] [Thread-185120] [transport.py] [_log()] Compression: none
2026-02-14T12:06:09.762 [DEBUG] [Thread-185120] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:06:09.779 [DEBUG] [Thread-185120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:06:09.780 [DEBUG] [Thread-185120] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:06:09.780 [DEBUG] [Thread-185120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:06:09.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:06:09.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:06:09.782 [DEBUG] [Thread-185120] [transport.py] [_log()] userauth is OK
2026-02-14T12:06:09.782 [DEBUG] [Thread-185120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:06:09.783 [DEBUG] [Thread-185120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:06:09.783 [DEBUG] [Thread-185120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:06:09.783 [DEBUG] [Thread-185120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:06:09.807 [INFO] [Thread-185120] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:06:09.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:06:10.444 [DEBUG] [Thread-185120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:06:10.453 [DEBUG] [Thread-185120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:06:10.454 [DEBUG] [Thread-185120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:06:10.485 [DEBUG] [Thread-185120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:06:10.485 [DEBUG] [Thread-185120] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:06:10.488 [DEBUG] [Thread-185120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:06:10.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:06:10.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:06:10.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:06:10.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:06:10.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:06:10.511 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:06:10.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:06:10.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:06:10.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:06:10.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.420597 -999.00  +13.30  26.84     55   +4.60 1 1 1 1 1   888    0 9.97 50.52 ----- 24.6 26.8 166.2 38.5 20.1 -25.0 18.8 -22.7 18.6 -23.7 19.7 -25.0
2026-02-14T12:06:10.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:06:10.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:06:10.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.420597
2026-02-14T12:06:10.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:06:10.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:06:10.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:06:10.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:06:10.513 [DEBUG] [Thread-185120] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:06:10.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:06:10.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:05:27', tmtdew=9.22, humidity=53.21, cloud=0.0, wind=21.44, temperature=12.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:05:39.581', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:06:10.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:06:10.608 [DEBUG] [Thread-185123] [transport.py] [_log()] starting thread (client mode): 0xa2d3fd30
2026-02-14T12:06:10.608 [DEBUG] [Thread-185123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:06:10.622 [DEBUG] [Thread-185123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:06:10.622 [INFO] [Thread-185123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:06:10.630 [DEBUG] [Thread-185123] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:06:10.630 [DEBUG] [Thread-185123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:06:10.630 [DEBUG] [Thread-185123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:06:10.630 [DEBUG] [Thread-185123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:06:10.630 [DEBUG] [Thread-185123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:06:10.630 [DEBUG] [Thread-185123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:06:10.630 [DEBUG] [Thread-185123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:06:10.630 [DEBUG] [Thread-185123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:06:10.630 [DEBUG] [Thread-185123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:06:10.630 [DEBUG] [Thread-185123] [transport.py] [_log()] client lang: <none>
2026-02-14T12:06:10.630 [DEBUG] [Thread-185123] [transport.py] [_log()] server lang: <none>
2026-02-14T12:06:10.630 [DEBUG] [Thread-185123] [transport.py] [_log()] kex follows: False
2026-02-14T12:06:10.630 [DEBUG] [Thread-185123] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:06:10.630 [DEBUG] [Thread-185123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:06:10.630 [DEBUG] [Thread-185123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:06:10.630 [DEBUG] [Thread-185123] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:06:10.630 [DEBUG] [Thread-185123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:06:10.630 [DEBUG] [Thread-185123] [transport.py] [_log()] Compression: none
2026-02-14T12:06:10.630 [DEBUG] [Thread-185123] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:06:10.689 [DEBUG] [Thread-185123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:06:10.689 [DEBUG] [Thread-185123] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:06:10.690 [DEBUG] [Thread-185123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:06:10.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:06:10.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:06:10.746 [DEBUG] [Thread-185123] [transport.py] [_log()] userauth is OK
2026-02-14T12:06:10.746 [DEBUG] [Thread-185123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:06:10.746 [DEBUG] [Thread-185123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:06:10.746 [DEBUG] [Thread-185123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:06:10.746 [DEBUG] [Thread-185123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:06:10.780 [INFO] [Thread-185123] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:06:10.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-14T12:06:10.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:06:11.601 [DEBUG] [Thread-185123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:06:11.601 [DEBUG] [Thread-185123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:06:11.649 [DEBUG] [Thread-185123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:06:11.649 [DEBUG] [Thread-185123] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:06:11.657 [DEBUG] [Thread-185123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:06:11.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:06:11.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:06:11.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:06:11.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:06:11.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:06:11.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:06:11.693 [DEBUG] [Thread-185123] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:06:18.236 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:06:18.237 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:06:20.663 [DEBUG] [Thread-185125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:06:21.892 [DEBUG] [Thread-185126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:06:36.943 [DEBUG] [Thread-185127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:06:41.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:06:41.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:06:41.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-14T12:06:44.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 6, 4), 9.25, 53.13, 0.0, 23.98, 12.77, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:06:44.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:06:04
2026-02-14T12:06:44.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:06:44.743 [DEBUG] [Thread-185128] [transport.py] [_log()] starting thread (client mode): 0xa2d3e380
2026-02-14T12:06:44.743 [DEBUG] [Thread-185128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:06:44.763 [DEBUG] [Thread-185128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:06:44.763 [INFO] [Thread-185128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:06:44.766 [DEBUG] [Thread-185128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:06:44.766 [DEBUG] [Thread-185128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:06:44.767 [DEBUG] [Thread-185128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:06:44.767 [DEBUG] [Thread-185128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:06:44.767 [DEBUG] [Thread-185128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:06:44.767 [DEBUG] [Thread-185128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:06:44.767 [DEBUG] [Thread-185128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:06:44.767 [DEBUG] [Thread-185128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:06:44.767 [DEBUG] [Thread-185128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:06:44.767 [DEBUG] [Thread-185128] [transport.py] [_log()] client lang: <none>
2026-02-14T12:06:44.767 [DEBUG] [Thread-185128] [transport.py] [_log()] server lang: <none>
2026-02-14T12:06:44.767 [DEBUG] [Thread-185128] [transport.py] [_log()] kex follows: False
2026-02-14T12:06:44.767 [DEBUG] [Thread-185128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:06:44.767 [DEBUG] [Thread-185128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:06:44.767 [DEBUG] [Thread-185128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:06:44.767 [DEBUG] [Thread-185128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:06:44.767 [DEBUG] [Thread-185128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:06:44.767 [DEBUG] [Thread-185128] [transport.py] [_log()] Compression: none
2026-02-14T12:06:44.767 [DEBUG] [Thread-185128] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:06:44.783 [DEBUG] [Thread-185128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:06:44.783 [DEBUG] [Thread-185128] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:06:44.784 [DEBUG] [Thread-185128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:06:44.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:06:44.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:06:44.785 [DEBUG] [Thread-185128] [transport.py] [_log()] userauth is OK
2026-02-14T12:06:44.785 [DEBUG] [Thread-185128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:06:44.786 [DEBUG] [Thread-185128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:06:44.786 [DEBUG] [Thread-185128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:06:44.786 [DEBUG] [Thread-185128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:06:44.800 [INFO] [Thread-185128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:06:44.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:06:45.442 [DEBUG] [Thread-185128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:06:45.442 [DEBUG] [Thread-185128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:06:45.442 [DEBUG] [Thread-185128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:06:45.483 [DEBUG] [Thread-185128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:06:45.484 [DEBUG] [Thread-185128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:06:45.487 [DEBUG] [Thread-185128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:06:45.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:06:45.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:06:45.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:06:45.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:06:45.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:06:45.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:06:45.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:06:45.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:06:45.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:06:45.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.420944 -999.00  +13.80  24.90     54   +4.80 1 1 1 1 1   888    0 10.04 53.82 ----- 27.6 24.9 170.2 41.2 20.1 -24.5 18.9 -23.0 18.7 -23.9 19.8 -23.7
2026-02-14T12:06:45.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:06:45.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:06:45.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.420944
2026-02-14T12:06:45.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:06:45.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:06:45.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:06:45.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:06:45.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:06:45.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:06:04', tmtdew=9.25, humidity=53.13, cloud=0.0, wind=23.98, temperature=12.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:06:09.562', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:06:45.515 [DEBUG] [Thread-185128] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:06:45.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-14T12:06:45.620 [DEBUG] [Thread-185131] [transport.py] [_log()] starting thread (client mode): 0xa2d1be20
2026-02-14T12:06:45.620 [DEBUG] [Thread-185131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:06:45.639 [DEBUG] [Thread-185131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:06:45.640 [INFO] [Thread-185131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:06:45.653 [DEBUG] [Thread-185131] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:06:45.653 [DEBUG] [Thread-185131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:06:45.653 [DEBUG] [Thread-185131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:06:45.653 [DEBUG] [Thread-185131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:06:45.654 [DEBUG] [Thread-185131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:06:45.654 [DEBUG] [Thread-185131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:06:45.654 [DEBUG] [Thread-185131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:06:45.654 [DEBUG] [Thread-185131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:06:45.654 [DEBUG] [Thread-185131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:06:45.654 [DEBUG] [Thread-185131] [transport.py] [_log()] client lang: <none>
2026-02-14T12:06:45.654 [DEBUG] [Thread-185131] [transport.py] [_log()] server lang: <none>
2026-02-14T12:06:45.654 [DEBUG] [Thread-185131] [transport.py] [_log()] kex follows: False
2026-02-14T12:06:45.654 [DEBUG] [Thread-185131] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:06:45.654 [DEBUG] [Thread-185131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:06:45.654 [DEBUG] [Thread-185131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:06:45.654 [DEBUG] [Thread-185131] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:06:45.654 [DEBUG] [Thread-185131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:06:45.654 [DEBUG] [Thread-185131] [transport.py] [_log()] Compression: none
2026-02-14T12:06:45.654 [DEBUG] [Thread-185131] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:06:45.710 [DEBUG] [Thread-185131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:06:45.710 [DEBUG] [Thread-185131] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:06:45.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:06:45.711 [DEBUG] [Thread-185131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:06:45.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:06:45.780 [DEBUG] [Thread-185131] [transport.py] [_log()] userauth is OK
2026-02-14T12:06:45.781 [DEBUG] [Thread-185131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:06:45.781 [DEBUG] [Thread-185131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:06:45.781 [DEBUG] [Thread-185131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:06:45.781 [DEBUG] [Thread-185131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:06:45.803 [INFO] [Thread-185131] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:06:45.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-14T12:06:45.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:06:46.637 [DEBUG] [Thread-185131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:06:46.638 [DEBUG] [Thread-185131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:06:46.690 [DEBUG] [Thread-185131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:06:46.690 [DEBUG] [Thread-185131] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:06:46.706 [DEBUG] [Thread-185131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:06:46.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:06:46.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:06:46.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-14T12:06:46.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:06:46.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:06:46.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:06:46.756 [DEBUG] [Thread-185131] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:06:51.982 [DEBUG] [Thread-185133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:07:07.034 [DEBUG] [Thread-185134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:07:16.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:07:16.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:07:16.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-14T12:07:18.379 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:07:18.380 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:07:19.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 6, 40), 11.17, 47.1, 0.0, 37.54, 14.94, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:07:19.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:06:40
2026-02-14T12:07:19.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:07:19.647 [DEBUG] [Thread-185135] [transport.py] [_log()] starting thread (client mode): 0xa2db7f40
2026-02-14T12:07:19.647 [DEBUG] [Thread-185135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:07:19.667 [DEBUG] [Thread-185135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:07:19.667 [INFO] [Thread-185135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:07:19.670 [DEBUG] [Thread-185135] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:07:19.670 [DEBUG] [Thread-185135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:07:19.670 [DEBUG] [Thread-185135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:07:19.670 [DEBUG] [Thread-185135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:07:19.670 [DEBUG] [Thread-185135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:07:19.670 [DEBUG] [Thread-185135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:07:19.670 [DEBUG] [Thread-185135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:07:19.670 [DEBUG] [Thread-185135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:07:19.670 [DEBUG] [Thread-185135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:07:19.670 [DEBUG] [Thread-185135] [transport.py] [_log()] client lang: <none>
2026-02-14T12:07:19.670 [DEBUG] [Thread-185135] [transport.py] [_log()] server lang: <none>
2026-02-14T12:07:19.670 [DEBUG] [Thread-185135] [transport.py] [_log()] kex follows: False
2026-02-14T12:07:19.670 [DEBUG] [Thread-185135] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:07:19.670 [DEBUG] [Thread-185135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:07:19.670 [DEBUG] [Thread-185135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:07:19.670 [DEBUG] [Thread-185135] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:07:19.670 [DEBUG] [Thread-185135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:07:19.670 [DEBUG] [Thread-185135] [transport.py] [_log()] Compression: none
2026-02-14T12:07:19.670 [DEBUG] [Thread-185135] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:07:19.688 [DEBUG] [Thread-185135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:07:19.688 [DEBUG] [Thread-185135] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:07:19.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:07:19.689 [DEBUG] [Thread-185135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:07:19.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:07:19.692 [DEBUG] [Thread-185135] [transport.py] [_log()] userauth is OK
2026-02-14T12:07:19.692 [DEBUG] [Thread-185135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:07:19.692 [DEBUG] [Thread-185135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:07:19.692 [DEBUG] [Thread-185135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:07:19.692 [DEBUG] [Thread-185135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:07:19.719 [INFO] [Thread-185135] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:07:19.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:07:20.365 [DEBUG] [Thread-185135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:07:20.365 [DEBUG] [Thread-185135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:07:20.366 [DEBUG] [Thread-185135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:07:20.406 [DEBUG] [Thread-185135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:07:20.407 [DEBUG] [Thread-185135] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:07:20.410 [DEBUG] [Thread-185135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:07:20.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:07:20.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:07:20.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:07:20.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:07:20.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:07:20.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:07:20.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:07:20.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:07:20.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:07:20.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.421291 -999.00  +14.30  24.64     53   +4.90 1 1 1 1 1   888    0 9.86 48.11 ----- 23.5 24.6 179.2 35.7 20.2 -24.9 18.9 -23.7 18.8 -24.0 19.9 -24.4
2026-02-14T12:07:20.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:07:20.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:07:20.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.421291
2026-02-14T12:07:20.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:07:20.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:07:20.440 [DEBUG] [Thread-185135] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:07:20.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:07:20.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:07:20.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:07:20.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:06:40', tmtdew=11.17, humidity=47.1, cloud=0.0, wind=37.54, temperature=14.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:06:39.542', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:07:20.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-14T12:07:20.537 [DEBUG] [Thread-185138] [transport.py] [_log()] starting thread (client mode): 0xa2d3f610
2026-02-14T12:07:20.537 [DEBUG] [Thread-185138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:07:20.551 [DEBUG] [Thread-185138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:07:20.551 [INFO] [Thread-185138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:07:20.559 [DEBUG] [Thread-185138] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:07:20.559 [DEBUG] [Thread-185138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:07:20.559 [DEBUG] [Thread-185138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:07:20.559 [DEBUG] [Thread-185138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:07:20.559 [DEBUG] [Thread-185138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:07:20.559 [DEBUG] [Thread-185138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:07:20.559 [DEBUG] [Thread-185138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:07:20.559 [DEBUG] [Thread-185138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:07:20.559 [DEBUG] [Thread-185138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:07:20.559 [DEBUG] [Thread-185138] [transport.py] [_log()] client lang: <none>
2026-02-14T12:07:20.560 [DEBUG] [Thread-185138] [transport.py] [_log()] server lang: <none>
2026-02-14T12:07:20.560 [DEBUG] [Thread-185138] [transport.py] [_log()] kex follows: False
2026-02-14T12:07:20.560 [DEBUG] [Thread-185138] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:07:20.560 [DEBUG] [Thread-185138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:07:20.560 [DEBUG] [Thread-185138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:07:20.560 [DEBUG] [Thread-185138] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:07:20.560 [DEBUG] [Thread-185138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:07:20.560 [DEBUG] [Thread-185138] [transport.py] [_log()] Compression: none
2026-02-14T12:07:20.560 [DEBUG] [Thread-185138] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:07:20.616 [DEBUG] [Thread-185138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:07:20.616 [DEBUG] [Thread-185138] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:07:20.616 [DEBUG] [Thread-185138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:07:20.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:07:20.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:07:20.675 [DEBUG] [Thread-185138] [transport.py] [_log()] userauth is OK
2026-02-14T12:07:20.676 [DEBUG] [Thread-185138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:07:20.676 [DEBUG] [Thread-185138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:07:20.676 [DEBUG] [Thread-185138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:07:20.676 [DEBUG] [Thread-185138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:07:20.697 [INFO] [Thread-185138] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:07:20.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-14T12:07:20.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:07:20.710 [DEBUG] [Thread-185140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:07:21.500 [DEBUG] [Thread-185138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:07:21.500 [DEBUG] [Thread-185138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:07:21.548 [DEBUG] [Thread-185138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:07:21.548 [DEBUG] [Thread-185138] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:07:21.557 [DEBUG] [Thread-185138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:07:21.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:07:21.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:07:21.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-14T12:07:21.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:07:21.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:07:21.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:07:21.592 [DEBUG] [Thread-185138] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:07:22.074 [DEBUG] [Thread-185141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:07:37.127 [DEBUG] [Thread-185142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:07:51.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:07:51.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:07: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-14T12:07:52.163 [DEBUG] [Thread-185143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:07:54.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 7, 17), 10.48, 49.35, 0.0, 35.85, 13.6, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:07:54.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:07:17
2026-02-14T12:07:54.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:07:54.732 [DEBUG] [Thread-185144] [transport.py] [_log()] starting thread (client mode): 0xa5740c70
2026-02-14T12:07:54.733 [DEBUG] [Thread-185144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:07:54.751 [DEBUG] [Thread-185144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:07:54.751 [INFO] [Thread-185144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:07:54.753 [DEBUG] [Thread-185144] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:07:54.754 [DEBUG] [Thread-185144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:07:54.754 [DEBUG] [Thread-185144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:07:54.754 [DEBUG] [Thread-185144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:07:54.754 [DEBUG] [Thread-185144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:07:54.754 [DEBUG] [Thread-185144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:07:54.754 [DEBUG] [Thread-185144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:07:54.754 [DEBUG] [Thread-185144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:07:54.754 [DEBUG] [Thread-185144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:07:54.754 [DEBUG] [Thread-185144] [transport.py] [_log()] client lang: <none>
2026-02-14T12:07:54.754 [DEBUG] [Thread-185144] [transport.py] [_log()] server lang: <none>
2026-02-14T12:07:54.754 [DEBUG] [Thread-185144] [transport.py] [_log()] kex follows: False
2026-02-14T12:07:54.754 [DEBUG] [Thread-185144] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:07:54.754 [DEBUG] [Thread-185144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:07:54.754 [DEBUG] [Thread-185144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:07:54.754 [DEBUG] [Thread-185144] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:07:54.754 [DEBUG] [Thread-185144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:07:54.755 [DEBUG] [Thread-185144] [transport.py] [_log()] Compression: none
2026-02-14T12:07:54.755 [DEBUG] [Thread-185144] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:07:54.769 [DEBUG] [Thread-185144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:07:54.769 [DEBUG] [Thread-185144] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:07:54.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:07:54.770 [DEBUG] [Thread-185144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:07:54.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:07:54.772 [DEBUG] [Thread-185144] [transport.py] [_log()] userauth is OK
2026-02-14T12:07:54.772 [DEBUG] [Thread-185144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:07:54.773 [DEBUG] [Thread-185144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:07:54.773 [DEBUG] [Thread-185144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:07:54.773 [DEBUG] [Thread-185144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:07:54.792 [INFO] [Thread-185144] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:07:54.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:07:55.403 [DEBUG] [Thread-185144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:07:55.403 [DEBUG] [Thread-185144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:07:55.404 [DEBUG] [Thread-185144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:07:55.444 [DEBUG] [Thread-185144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:07:55.445 [DEBUG] [Thread-185144] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:07:55.448 [DEBUG] [Thread-185144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:07:55.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:07:55.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:07:55.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:07:55.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:07:55.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:07:55.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:07:55.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:07:55.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:07:55.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:07:55.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.421638 -999.00  +14.40  25.95     51   +4.50 1 1 1 1 1   888    0 9.98 53.44 ----- 23.2 25.9 177.8 35.4 20.4 -24.8 18.8 -30.5 18.8 -24.3 19.9 -23.9
2026-02-14T12:07:55.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:07:55.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:07:55.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.421638
2026-02-14T12:07:55.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:07:55.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:07:55.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:07:55.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:07:55.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:07:55.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:07:17', tmtdew=10.48, humidity=49.35, cloud=0.0, wind=35.85, temperature=13.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:07:09.523', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:07:55.475 [DEBUG] [Thread-185144] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:07:55.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-14T12:07:55.577 [DEBUG] [Thread-185147] [transport.py] [_log()] starting thread (client mode): 0xa2d3e620
2026-02-14T12:07:55.577 [DEBUG] [Thread-185147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:07:55.591 [DEBUG] [Thread-185147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:07:55.592 [INFO] [Thread-185147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:07:55.601 [DEBUG] [Thread-185147] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:07:55.601 [DEBUG] [Thread-185147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:07:55.601 [DEBUG] [Thread-185147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:07:55.602 [DEBUG] [Thread-185147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:07:55.602 [DEBUG] [Thread-185147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:07:55.602 [DEBUG] [Thread-185147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:07:55.602 [DEBUG] [Thread-185147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:07:55.602 [DEBUG] [Thread-185147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:07:55.602 [DEBUG] [Thread-185147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:07:55.602 [DEBUG] [Thread-185147] [transport.py] [_log()] client lang: <none>
2026-02-14T12:07:55.602 [DEBUG] [Thread-185147] [transport.py] [_log()] server lang: <none>
2026-02-14T12:07:55.603 [DEBUG] [Thread-185147] [transport.py] [_log()] kex follows: False
2026-02-14T12:07:55.603 [DEBUG] [Thread-185147] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:07:55.603 [DEBUG] [Thread-185147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:07:55.603 [DEBUG] [Thread-185147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:07:55.603 [DEBUG] [Thread-185147] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:07:55.603 [DEBUG] [Thread-185147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:07:55.603 [DEBUG] [Thread-185147] [transport.py] [_log()] Compression: none
2026-02-14T12:07:55.603 [DEBUG] [Thread-185147] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:07:55.662 [DEBUG] [Thread-185147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:07:55.663 [DEBUG] [Thread-185147] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:07:55.664 [DEBUG] [Thread-185147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:07:55.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:07:55.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:07:55.722 [DEBUG] [Thread-185147] [transport.py] [_log()] userauth is OK
2026-02-14T12:07:55.722 [DEBUG] [Thread-185147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:07:55.722 [DEBUG] [Thread-185147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:07:55.722 [DEBUG] [Thread-185147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:07:55.722 [DEBUG] [Thread-185147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:07:55.741 [INFO] [Thread-185147] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:07:55.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-14T12:07:55.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:07:56.552 [DEBUG] [Thread-185147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:07:56.553 [DEBUG] [Thread-185147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:07:56.600 [DEBUG] [Thread-185147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:07:56.601 [DEBUG] [Thread-185147] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:07:56.610 [DEBUG] [Thread-185147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:07:56.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:07:56.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-14T12:07:56.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-14T12:07:56.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:07:56.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:07:56.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:07:56.648 [DEBUG] [Thread-185147] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:08:07.200 [DEBUG] [Thread-185149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:08:18.518 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:08:18.519 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:08:20.766 [DEBUG] [Thread-185150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:08:22.258 [DEBUG] [Thread-185151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:08:26.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:08:26.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:08: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-14T12:08:28.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 7, 52), 10.59, 49.04, 0.0, 26.77, 13.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:08:28.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:07:52
2026-02-14T12:08:28.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:08:29.124 [DEBUG] [Thread-185152] [transport.py] [_log()] starting thread (client mode): 0xa5743df0
2026-02-14T12:08:29.125 [DEBUG] [Thread-185152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:08:29.145 [DEBUG] [Thread-185152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:08:29.145 [INFO] [Thread-185152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:08:29.148 [DEBUG] [Thread-185152] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:08:29.148 [DEBUG] [Thread-185152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:08:29.148 [DEBUG] [Thread-185152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:08:29.148 [DEBUG] [Thread-185152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:08:29.148 [DEBUG] [Thread-185152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:08:29.148 [DEBUG] [Thread-185152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:08:29.148 [DEBUG] [Thread-185152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:08:29.148 [DEBUG] [Thread-185152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:08:29.148 [DEBUG] [Thread-185152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:08:29.148 [DEBUG] [Thread-185152] [transport.py] [_log()] client lang: <none>
2026-02-14T12:08:29.148 [DEBUG] [Thread-185152] [transport.py] [_log()] server lang: <none>
2026-02-14T12:08:29.148 [DEBUG] [Thread-185152] [transport.py] [_log()] kex follows: False
2026-02-14T12:08:29.149 [DEBUG] [Thread-185152] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:08:29.149 [DEBUG] [Thread-185152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:08:29.149 [DEBUG] [Thread-185152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:08:29.149 [DEBUG] [Thread-185152] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:08:29.149 [DEBUG] [Thread-185152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:08:29.149 [DEBUG] [Thread-185152] [transport.py] [_log()] Compression: none
2026-02-14T12:08:29.149 [DEBUG] [Thread-185152] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:08:29.166 [DEBUG] [Thread-185152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:08:29.167 [DEBUG] [Thread-185152] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:08:29.167 [DEBUG] [Thread-185152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:08:29.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:08:29.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:08:29.170 [DEBUG] [Thread-185152] [transport.py] [_log()] userauth is OK
2026-02-14T12:08:29.170 [DEBUG] [Thread-185152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:08:29.170 [DEBUG] [Thread-185152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:08:29.170 [DEBUG] [Thread-185152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:08:29.170 [DEBUG] [Thread-185152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:08:29.206 [INFO] [Thread-185152] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:08:29.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:08:29.831 [DEBUG] [Thread-185152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:08:29.831 [DEBUG] [Thread-185152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:08:29.832 [DEBUG] [Thread-185152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:08:29.872 [DEBUG] [Thread-185152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:08:29.873 [DEBUG] [Thread-185152] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:08:29.876 [DEBUG] [Thread-185152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:08:29.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:08:29.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:08:29.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:08:29.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:08:29.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:08:29.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:08:29.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:08:29.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:08:29.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:08:29.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.421986 -999.00  +14.10  22.20     52   +4.50 1 1 1 1 1   888    0 10.20 55.06 ----- 14.0 22.2 198.4 24.9 20.3 -25.8 18.8 -25.8 18.8 -23.5 19.9 -25.2
2026-02-14T12:08:29.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:08:29.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:08:29.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.421986
2026-02-14T12:08:29.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:08:29.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:08:29.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:08:29.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:08:29.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:08:29.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:07:52', tmtdew=10.59, humidity=49.04, cloud=0.0, wind=26.77, temperature=13.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:07:39.590', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:08:29.906 [DEBUG] [Thread-185152] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:08: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-14T12:08:30.002 [DEBUG] [Thread-185155] [transport.py] [_log()] starting thread (client mode): 0xa2ddd120
2026-02-14T12:08:30.002 [DEBUG] [Thread-185155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:08:30.016 [DEBUG] [Thread-185155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:08:30.016 [INFO] [Thread-185155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:08:30.024 [DEBUG] [Thread-185155] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:08:30.024 [DEBUG] [Thread-185155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:08:30.024 [DEBUG] [Thread-185155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:08:30.024 [DEBUG] [Thread-185155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:08:30.024 [DEBUG] [Thread-185155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:08:30.024 [DEBUG] [Thread-185155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:08:30.024 [DEBUG] [Thread-185155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:08:30.024 [DEBUG] [Thread-185155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:08:30.024 [DEBUG] [Thread-185155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:08:30.024 [DEBUG] [Thread-185155] [transport.py] [_log()] client lang: <none>
2026-02-14T12:08:30.024 [DEBUG] [Thread-185155] [transport.py] [_log()] server lang: <none>
2026-02-14T12:08:30.024 [DEBUG] [Thread-185155] [transport.py] [_log()] kex follows: False
2026-02-14T12:08:30.024 [DEBUG] [Thread-185155] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:08:30.024 [DEBUG] [Thread-185155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:08:30.024 [DEBUG] [Thread-185155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:08:30.024 [DEBUG] [Thread-185155] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:08:30.025 [DEBUG] [Thread-185155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:08:30.025 [DEBUG] [Thread-185155] [transport.py] [_log()] Compression: none
2026-02-14T12:08:30.025 [DEBUG] [Thread-185155] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:08:30.083 [DEBUG] [Thread-185155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:08:30.083 [DEBUG] [Thread-185155] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:08:30.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:08:30.084 [DEBUG] [Thread-185155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:08:30.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:08:30.142 [DEBUG] [Thread-185155] [transport.py] [_log()] userauth is OK
2026-02-14T12:08:30.142 [DEBUG] [Thread-185155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:08:30.142 [DEBUG] [Thread-185155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:08:30.142 [DEBUG] [Thread-185155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:08:30.142 [DEBUG] [Thread-185155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:08:30.170 [INFO] [Thread-185155] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:08:30.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-14T12:08:30.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:08:30.973 [DEBUG] [Thread-185155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:08:30.973 [DEBUG] [Thread-185155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:08:31.024 [DEBUG] [Thread-185155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:08:31.024 [DEBUG] [Thread-185155] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:08:31.033 [DEBUG] [Thread-185155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:08:31.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:08:31.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:08:31.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-14T12:08:31.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:08:31.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:08:31.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:08:31.068 [DEBUG] [Thread-185155] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:08:37.294 [DEBUG] [Thread-185157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:08:52.347 [DEBUG] [Thread-185158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:09:01.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:09:01.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:09:01.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-14T12:09:03.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 8, 29), 10.27, 50.05, 0.0, 29.27, 13.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:09:03.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:08:29
2026-02-14T12:09:03.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:09:03.641 [DEBUG] [Thread-185159] [transport.py] [_log()] starting thread (client mode): 0xa2d19c00
2026-02-14T12:09:03.641 [DEBUG] [Thread-185159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:09:03.665 [DEBUG] [Thread-185159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:09:03.665 [INFO] [Thread-185159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:09:03.668 [DEBUG] [Thread-185159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:09:03.668 [DEBUG] [Thread-185159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:09:03.668 [DEBUG] [Thread-185159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:09:03.668 [DEBUG] [Thread-185159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:09:03.668 [DEBUG] [Thread-185159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:09:03.668 [DEBUG] [Thread-185159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:09:03.668 [DEBUG] [Thread-185159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:09:03.668 [DEBUG] [Thread-185159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:09:03.668 [DEBUG] [Thread-185159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:09:03.668 [DEBUG] [Thread-185159] [transport.py] [_log()] client lang: <none>
2026-02-14T12:09:03.668 [DEBUG] [Thread-185159] [transport.py] [_log()] server lang: <none>
2026-02-14T12:09:03.668 [DEBUG] [Thread-185159] [transport.py] [_log()] kex follows: False
2026-02-14T12:09:03.668 [DEBUG] [Thread-185159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:09:03.669 [DEBUG] [Thread-185159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:09:03.669 [DEBUG] [Thread-185159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:09:03.669 [DEBUG] [Thread-185159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:09:03.669 [DEBUG] [Thread-185159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:09:03.669 [DEBUG] [Thread-185159] [transport.py] [_log()] Compression: none
2026-02-14T12:09:03.669 [DEBUG] [Thread-185159] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:09:03.688 [DEBUG] [Thread-185159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:09:03.689 [DEBUG] [Thread-185159] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:09:03.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:09:03.690 [DEBUG] [Thread-185159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:09:03.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:09:03.693 [DEBUG] [Thread-185159] [transport.py] [_log()] userauth is OK
2026-02-14T12:09:03.693 [DEBUG] [Thread-185159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:09:03.693 [DEBUG] [Thread-185159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:09:03.693 [DEBUG] [Thread-185159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:09:03.693 [DEBUG] [Thread-185159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:09:03.718 [INFO] [Thread-185159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:09:03.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:09:04.399 [DEBUG] [Thread-185159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:09:04.399 [DEBUG] [Thread-185159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:09:04.399 [DEBUG] [Thread-185159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:09:04.440 [DEBUG] [Thread-185159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:09:04.440 [DEBUG] [Thread-185159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:09:04.443 [DEBUG] [Thread-185159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:09:04.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:09:04.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:09:04.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:09:04.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:09:04.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:09:04.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:09:04.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:09:04.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:09:04.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:09:04.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.422333 -999.00  +14.20  21.52     52   +4.70 1 1 1 1 1   888    0 10.48 58.18 ----- 25.3 21.5 182.2 26.1 20.3 -25.3 18.9 -24.8 18.9 -22.6 20.0 -24.8
2026-02-14T12:09:04.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:09:04.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:09:04.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.422333
2026-02-14T12:09:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:09:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:09:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:09:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:09:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:09:04.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:08:29', tmtdew=10.27, humidity=50.05, cloud=0.0, wind=29.27, temperature=13.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:08:09.571', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:09:04.472 [DEBUG] [Thread-185159] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:09:04.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-14T12:09:04.571 [DEBUG] [Thread-185162] [transport.py] [_log()] starting thread (client mode): 0xa2d1bd00
2026-02-14T12:09:04.571 [DEBUG] [Thread-185162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:09:04.585 [DEBUG] [Thread-185162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:09:04.585 [INFO] [Thread-185162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:09:04.593 [DEBUG] [Thread-185162] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:09:04.593 [DEBUG] [Thread-185162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:09:04.593 [DEBUG] [Thread-185162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:09:04.593 [DEBUG] [Thread-185162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:09:04.593 [DEBUG] [Thread-185162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:09:04.593 [DEBUG] [Thread-185162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:09:04.593 [DEBUG] [Thread-185162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:09:04.593 [DEBUG] [Thread-185162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:09:04.593 [DEBUG] [Thread-185162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:09:04.593 [DEBUG] [Thread-185162] [transport.py] [_log()] client lang: <none>
2026-02-14T12:09:04.593 [DEBUG] [Thread-185162] [transport.py] [_log()] server lang: <none>
2026-02-14T12:09:04.594 [DEBUG] [Thread-185162] [transport.py] [_log()] kex follows: False
2026-02-14T12:09:04.594 [DEBUG] [Thread-185162] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:09:04.594 [DEBUG] [Thread-185162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:09:04.594 [DEBUG] [Thread-185162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:09:04.594 [DEBUG] [Thread-185162] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:09:04.594 [DEBUG] [Thread-185162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:09:04.594 [DEBUG] [Thread-185162] [transport.py] [_log()] Compression: none
2026-02-14T12:09:04.594 [DEBUG] [Thread-185162] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:09:04.654 [DEBUG] [Thread-185162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:09:04.654 [DEBUG] [Thread-185162] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:09:04.655 [DEBUG] [Thread-185162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:09:04.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:09:04.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:09:04.709 [DEBUG] [Thread-185162] [transport.py] [_log()] userauth is OK
2026-02-14T12:09:04.710 [DEBUG] [Thread-185162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:09:04.710 [DEBUG] [Thread-185162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:09:04.710 [DEBUG] [Thread-185162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:09:04.710 [DEBUG] [Thread-185162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:09:04.736 [INFO] [Thread-185162] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:09:04.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T12:09:04.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:09:05.548 [DEBUG] [Thread-185162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:09:05.558 [DEBUG] [Thread-185162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:09:05.596 [DEBUG] [Thread-185162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:09:05.597 [DEBUG] [Thread-185162] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:09:05.606 [DEBUG] [Thread-185162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:09:05.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:09:05.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-14T12:09:05.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-14T12:09:05.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:09:05.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:09:05.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:09:05.646 [DEBUG] [Thread-185162] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:09:07.384 [DEBUG] [Thread-185164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:09:18.659 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:09:18.660 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:09:20.801 [DEBUG] [Thread-185165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:09:22.438 [DEBUG] [Thread-185166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:09:35.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:09:35.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:09:35.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-14T12:09:37.476 [DEBUG] [Thread-185167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:09:37.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 9, 4), 10.35, 49.79, 0.0, 29.94, 13.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:09:37.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:09:04
2026-02-14T12:09:38.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:09:38.423 [DEBUG] [Thread-185168] [transport.py] [_log()] starting thread (client mode): 0xa2d189d0
2026-02-14T12:09:38.423 [DEBUG] [Thread-185168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:09:38.433 [DEBUG] [Thread-185168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:09:38.433 [INFO] [Thread-185168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:09:38.435 [DEBUG] [Thread-185168] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:09:38.435 [DEBUG] [Thread-185168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:09:38.435 [DEBUG] [Thread-185168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:09:38.435 [DEBUG] [Thread-185168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:09:38.435 [DEBUG] [Thread-185168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:09:38.435 [DEBUG] [Thread-185168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:09:38.435 [DEBUG] [Thread-185168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:09:38.435 [DEBUG] [Thread-185168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:09:38.435 [DEBUG] [Thread-185168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:09:38.435 [DEBUG] [Thread-185168] [transport.py] [_log()] client lang: <none>
2026-02-14T12:09:38.435 [DEBUG] [Thread-185168] [transport.py] [_log()] server lang: <none>
2026-02-14T12:09:38.435 [DEBUG] [Thread-185168] [transport.py] [_log()] kex follows: False
2026-02-14T12:09:38.435 [DEBUG] [Thread-185168] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:09:38.435 [DEBUG] [Thread-185168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:09:38.435 [DEBUG] [Thread-185168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:09:38.435 [DEBUG] [Thread-185168] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:09:38.435 [DEBUG] [Thread-185168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:09:38.435 [DEBUG] [Thread-185168] [transport.py] [_log()] Compression: none
2026-02-14T12:09:38.435 [DEBUG] [Thread-185168] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:09:38.443 [DEBUG] [Thread-185168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:09:38.443 [DEBUG] [Thread-185168] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:09:38.443 [DEBUG] [Thread-185168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:09:38.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:09:38.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:09:38.445 [DEBUG] [Thread-185168] [transport.py] [_log()] userauth is OK
2026-02-14T12:09:38.445 [DEBUG] [Thread-185168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:09:38.445 [DEBUG] [Thread-185168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:09:38.445 [DEBUG] [Thread-185168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:09:38.445 [DEBUG] [Thread-185168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:09:38.457 [INFO] [Thread-185168] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:09:38.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:09:39.209 [DEBUG] [Thread-185168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:09:39.210 [DEBUG] [Thread-185168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:09:39.210 [DEBUG] [Thread-185168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:09:39.250 [DEBUG] [Thread-185168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:09:39.250 [DEBUG] [Thread-185168] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:09:39.253 [DEBUG] [Thread-185168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:09:39.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:09:39.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:09:39.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:09:39.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:09:39.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:09:39.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:09:39.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:09:39.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:09:39.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:09:39.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.423028 -999.00  +13.30  16.99     54   +4.30 1 1 1 1 1   888    0 10.52 60.25 ----- 16.5 17.0 184.2 25.0 20.2 -23.9 18.6 -26.6 18.7 -22.4 19.8 -23.2
2026-02-14T12:09:39.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:09:39.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:09:39.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.423028
2026-02-14T12:09:39.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:09:39.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:09:39.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:09:39.276 [DEBUG] [Thread-185168] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:09:39.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:09:39.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:09:39.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:09:04', tmtdew=10.35, humidity=49.79, cloud=0.0, wind=29.94, temperature=13.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:09:09.619', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:09:39.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-14T12:09:39.383 [DEBUG] [Thread-185171] [transport.py] [_log()] starting thread (client mode): 0xa2d11480
2026-02-14T12:09:39.383 [DEBUG] [Thread-185171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:09:39.398 [DEBUG] [Thread-185171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:09:39.398 [INFO] [Thread-185171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:09:39.406 [DEBUG] [Thread-185171] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:09:39.406 [DEBUG] [Thread-185171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:09:39.406 [DEBUG] [Thread-185171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:09:39.406 [DEBUG] [Thread-185171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:09:39.406 [DEBUG] [Thread-185171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:09:39.406 [DEBUG] [Thread-185171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:09:39.407 [DEBUG] [Thread-185171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:09:39.407 [DEBUG] [Thread-185171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:09:39.407 [DEBUG] [Thread-185171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:09:39.407 [DEBUG] [Thread-185171] [transport.py] [_log()] client lang: <none>
2026-02-14T12:09:39.407 [DEBUG] [Thread-185171] [transport.py] [_log()] server lang: <none>
2026-02-14T12:09:39.407 [DEBUG] [Thread-185171] [transport.py] [_log()] kex follows: False
2026-02-14T12:09:39.407 [DEBUG] [Thread-185171] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:09:39.407 [DEBUG] [Thread-185171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:09:39.408 [DEBUG] [Thread-185171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:09:39.408 [DEBUG] [Thread-185171] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:09:39.408 [DEBUG] [Thread-185171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:09:39.408 [DEBUG] [Thread-185171] [transport.py] [_log()] Compression: none
2026-02-14T12:09:39.408 [DEBUG] [Thread-185171] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:09:39.466 [DEBUG] [Thread-185171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:09:39.466 [DEBUG] [Thread-185171] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:09:39.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:09:39.468 [DEBUG] [Thread-185171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:09:39.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:09:39.522 [DEBUG] [Thread-185171] [transport.py] [_log()] userauth is OK
2026-02-14T12:09:39.522 [DEBUG] [Thread-185171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:09:39.522 [DEBUG] [Thread-185171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:09:39.522 [DEBUG] [Thread-185171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:09:39.522 [DEBUG] [Thread-185171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:09:39.545 [INFO] [Thread-185171] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:09:39.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-14T12:09:39.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:09:40.345 [DEBUG] [Thread-185171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:09:40.345 [DEBUG] [Thread-185171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:09:40.397 [DEBUG] [Thread-185171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:09:40.397 [DEBUG] [Thread-185171] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:09:40.406 [DEBUG] [Thread-185171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:09:40.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:09:40.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-14T12:09: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-14T12:09:40.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:09:40.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:09:40.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:09:40.444 [DEBUG] [Thread-185171] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:09:52.516 [DEBUG] [Thread-185173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:10:07.569 [DEBUG] [Thread-185174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:10:10.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:10:10.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:10:10.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-14T12:10:12.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 9, 39), 11.52, 45.88, 0.0, 36.45, 14.6, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:10:12.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:09:39
2026-02-14T12:10:13.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:10:13.381 [DEBUG] [Thread-185175] [transport.py] [_log()] starting thread (client mode): 0xa2dc2fb0
2026-02-14T12:10:13.382 [DEBUG] [Thread-185175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:10:13.402 [DEBUG] [Thread-185175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:10:13.402 [INFO] [Thread-185175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:10:13.405 [DEBUG] [Thread-185175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:10:13.405 [DEBUG] [Thread-185175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:10:13.405 [DEBUG] [Thread-185175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:10:13.405 [DEBUG] [Thread-185175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:10:13.405 [DEBUG] [Thread-185175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:10:13.405 [DEBUG] [Thread-185175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:10:13.405 [DEBUG] [Thread-185175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:10:13.405 [DEBUG] [Thread-185175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:10:13.405 [DEBUG] [Thread-185175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:10:13.405 [DEBUG] [Thread-185175] [transport.py] [_log()] client lang: <none>
2026-02-14T12:10:13.405 [DEBUG] [Thread-185175] [transport.py] [_log()] server lang: <none>
2026-02-14T12:10:13.405 [DEBUG] [Thread-185175] [transport.py] [_log()] kex follows: False
2026-02-14T12:10:13.405 [DEBUG] [Thread-185175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:10:13.405 [DEBUG] [Thread-185175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:10:13.405 [DEBUG] [Thread-185175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:10:13.405 [DEBUG] [Thread-185175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:10:13.405 [DEBUG] [Thread-185175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:10:13.405 [DEBUG] [Thread-185175] [transport.py] [_log()] Compression: none
2026-02-14T12:10:13.405 [DEBUG] [Thread-185175] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:10:13.421 [DEBUG] [Thread-185175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:10:13.422 [DEBUG] [Thread-185175] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:10:13.422 [DEBUG] [Thread-185175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:10:13.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:10:13.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:10:13.425 [DEBUG] [Thread-185175] [transport.py] [_log()] userauth is OK
2026-02-14T12:10:13.425 [DEBUG] [Thread-185175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:10:13.425 [DEBUG] [Thread-185175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:10:13.425 [DEBUG] [Thread-185175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:10:13.425 [DEBUG] [Thread-185175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:10:13.450 [INFO] [Thread-185175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:10:13.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:10:14.199 [DEBUG] [Thread-185175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:10:14.199 [DEBUG] [Thread-185175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:10:14.200 [DEBUG] [Thread-185175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:10:14.240 [DEBUG] [Thread-185175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:10:14.240 [DEBUG] [Thread-185175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:10:14.242 [DEBUG] [Thread-185175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:10:14.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:10:14.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:10:14.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:10:14.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:10:14.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:10:14.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:10:14.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:10:14.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:10:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:10:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.423375 -999.00  +13.60  27.78     53   +4.20 1 1 1 1 1   888    0 10.33 55.18 ----- 26.8 27.8 151.6 34.7 20.3 -24.9 19.0 -24.0 18.8 -23.6 19.9 -25.0
2026-02-14T12:10:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:10:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:10:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.423375
2026-02-14T12:10:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:10:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:10:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:10:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:10:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:10:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:09:39', tmtdew=11.52, humidity=45.88, cloud=0.0, wind=36.45, temperature=14.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:09:39.600', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:10:14.262 [DEBUG] [Thread-185175] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:10:14.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-14T12:10:14.355 [DEBUG] [Thread-185178] [transport.py] [_log()] starting thread (client mode): 0xa2dc3130
2026-02-14T12:10:14.356 [DEBUG] [Thread-185178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:10:14.371 [DEBUG] [Thread-185178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:10:14.371 [INFO] [Thread-185178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:10:14.379 [DEBUG] [Thread-185178] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:10:14.379 [DEBUG] [Thread-185178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:10:14.379 [DEBUG] [Thread-185178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:10:14.379 [DEBUG] [Thread-185178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:10:14.379 [DEBUG] [Thread-185178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:10:14.379 [DEBUG] [Thread-185178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:10:14.379 [DEBUG] [Thread-185178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:10:14.379 [DEBUG] [Thread-185178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:10:14.379 [DEBUG] [Thread-185178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:10:14.379 [DEBUG] [Thread-185178] [transport.py] [_log()] client lang: <none>
2026-02-14T12:10:14.379 [DEBUG] [Thread-185178] [transport.py] [_log()] server lang: <none>
2026-02-14T12:10:14.379 [DEBUG] [Thread-185178] [transport.py] [_log()] kex follows: False
2026-02-14T12:10:14.379 [DEBUG] [Thread-185178] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:10:14.379 [DEBUG] [Thread-185178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:10:14.379 [DEBUG] [Thread-185178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:10:14.380 [DEBUG] [Thread-185178] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:10:14.380 [DEBUG] [Thread-185178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:10:14.380 [DEBUG] [Thread-185178] [transport.py] [_log()] Compression: none
2026-02-14T12:10:14.380 [DEBUG] [Thread-185178] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:10:14.438 [DEBUG] [Thread-185178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:10:14.438 [DEBUG] [Thread-185178] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:10:14.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:10:14.439 [DEBUG] [Thread-185178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:10:14.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:10:14.494 [DEBUG] [Thread-185178] [transport.py] [_log()] userauth is OK
2026-02-14T12:10:14.494 [DEBUG] [Thread-185178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:10:14.494 [DEBUG] [Thread-185178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:10:14.494 [DEBUG] [Thread-185178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:10:14.494 [DEBUG] [Thread-185178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:10:14.520 [INFO] [Thread-185178] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:10:14.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-14T12:10:14.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:10:15.329 [DEBUG] [Thread-185178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:10:15.329 [DEBUG] [Thread-185178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:10:15.381 [DEBUG] [Thread-185178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:10:15.381 [DEBUG] [Thread-185178] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:10:15.391 [DEBUG] [Thread-185178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:10:15.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:10:15.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-14T12:10:15.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:10:15.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:10:15.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:10:15.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:10:15.427 [DEBUG] [Thread-185178] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:10:18.801 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:10:18.802 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:10:20.850 [DEBUG] [Thread-185180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:10:22.605 [DEBUG] [Thread-185181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:10:37.664 [DEBUG] [Thread-185182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:10:45.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:10:45.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:10:45.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-14T12:10:47.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 10, 15), 10.36, 49.45, 0.0, 24.52, 13.5, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:10:47.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:10:15
2026-02-14T12:10:47.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:10:48.035 [DEBUG] [Thread-185183] [transport.py] [_log()] starting thread (client mode): 0xa2d19c00
2026-02-14T12:10:48.035 [DEBUG] [Thread-185183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:10:48.054 [DEBUG] [Thread-185183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:10:48.054 [INFO] [Thread-185183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:10:48.057 [DEBUG] [Thread-185183] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:10:48.058 [DEBUG] [Thread-185183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:10:48.058 [DEBUG] [Thread-185183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:10:48.058 [DEBUG] [Thread-185183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:10:48.058 [DEBUG] [Thread-185183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:10:48.058 [DEBUG] [Thread-185183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:10:48.058 [DEBUG] [Thread-185183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:10:48.058 [DEBUG] [Thread-185183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:10:48.058 [DEBUG] [Thread-185183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:10:48.058 [DEBUG] [Thread-185183] [transport.py] [_log()] client lang: <none>
2026-02-14T12:10:48.058 [DEBUG] [Thread-185183] [transport.py] [_log()] server lang: <none>
2026-02-14T12:10:48.058 [DEBUG] [Thread-185183] [transport.py] [_log()] kex follows: False
2026-02-14T12:10:48.058 [DEBUG] [Thread-185183] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:10:48.058 [DEBUG] [Thread-185183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:10:48.058 [DEBUG] [Thread-185183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:10:48.059 [DEBUG] [Thread-185183] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:10:48.059 [DEBUG] [Thread-185183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:10:48.059 [DEBUG] [Thread-185183] [transport.py] [_log()] Compression: none
2026-02-14T12:10:48.059 [DEBUG] [Thread-185183] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:10:48.073 [DEBUG] [Thread-185183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:10:48.073 [DEBUG] [Thread-185183] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:10:48.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:10:48.074 [DEBUG] [Thread-185183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:10:48.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:10:48.076 [DEBUG] [Thread-185183] [transport.py] [_log()] userauth is OK
2026-02-14T12:10:48.076 [DEBUG] [Thread-185183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:10:48.076 [DEBUG] [Thread-185183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:10:48.076 [DEBUG] [Thread-185183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:10:48.076 [DEBUG] [Thread-185183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:10:48.100 [INFO] [Thread-185183] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:10:48.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:10:48.759 [DEBUG] [Thread-185183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:10:48.760 [DEBUG] [Thread-185183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:10:48.760 [DEBUG] [Thread-185183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:10:48.800 [DEBUG] [Thread-185183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:10:48.801 [DEBUG] [Thread-185183] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:10:48.804 [DEBUG] [Thread-185183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:10:48.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:10:48.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:10:48.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:10:48.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:10:48.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:10:48.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:10:48.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:10:48.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:10:48.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:10:48.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.423722 -999.00  +13.40  30.51     53   +4.20 1 1 2 1 1   888    0 10.29 56.07 ----- 24.6 30.5 146.0 42.4 20.2 -24.6 19.1 -24.5 18.8 -23.5 19.9 -24.1
2026-02-14T12:10:48.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:10:48.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:10:48.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.423722
2026-02-14T12:10:48.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:10:48.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:10:48.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:10:48.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:10:48.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:10:48.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:10:15', tmtdew=10.36, humidity=49.45, cloud=0.0, wind=24.52, temperature=13.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:10:09.581', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:10:48.834 [DEBUG] [Thread-185183] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:10:48.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:10:48.928 [DEBUG] [Thread-185186] [transport.py] [_log()] starting thread (client mode): 0xa5741d80
2026-02-14T12:10:48.928 [DEBUG] [Thread-185186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:10:48.943 [DEBUG] [Thread-185186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:10:48.943 [INFO] [Thread-185186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:10:48.951 [DEBUG] [Thread-185186] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:10:48.951 [DEBUG] [Thread-185186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:10:48.951 [DEBUG] [Thread-185186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:10:48.951 [DEBUG] [Thread-185186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:10:48.951 [DEBUG] [Thread-185186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:10:48.951 [DEBUG] [Thread-185186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:10:48.951 [DEBUG] [Thread-185186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:10:48.951 [DEBUG] [Thread-185186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:10:48.951 [DEBUG] [Thread-185186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:10:48.951 [DEBUG] [Thread-185186] [transport.py] [_log()] client lang: <none>
2026-02-14T12:10:48.951 [DEBUG] [Thread-185186] [transport.py] [_log()] server lang: <none>
2026-02-14T12:10:48.951 [DEBUG] [Thread-185186] [transport.py] [_log()] kex follows: False
2026-02-14T12:10:48.951 [DEBUG] [Thread-185186] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:10:48.951 [DEBUG] [Thread-185186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:10:48.951 [DEBUG] [Thread-185186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:10:48.951 [DEBUG] [Thread-185186] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:10:48.951 [DEBUG] [Thread-185186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:10:48.951 [DEBUG] [Thread-185186] [transport.py] [_log()] Compression: none
2026-02-14T12:10:48.952 [DEBUG] [Thread-185186] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:10:49.010 [DEBUG] [Thread-185186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:10:49.010 [DEBUG] [Thread-185186] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:10:49.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:10:49.011 [DEBUG] [Thread-185186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:10:49.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:10:49.066 [DEBUG] [Thread-185186] [transport.py] [_log()] userauth is OK
2026-02-14T12:10:49.066 [DEBUG] [Thread-185186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:10:49.066 [DEBUG] [Thread-185186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:10:49.067 [DEBUG] [Thread-185186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:10:49.067 [DEBUG] [Thread-185186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:10:49.085 [INFO] [Thread-185186] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:10:49.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T12:10:49.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:10:49.921 [DEBUG] [Thread-185186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:10:49.921 [DEBUG] [Thread-185186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:10:49.969 [DEBUG] [Thread-185186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:10:49.970 [DEBUG] [Thread-185186] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:10:49.980 [DEBUG] [Thread-185186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:10:49.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:10:49.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:10:49.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:10:50.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:10:50.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:10:50.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:10:50.017 [DEBUG] [Thread-185186] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:10:52.702 [DEBUG] [Thread-185188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:11:07.751 [DEBUG] [Thread-185189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:11:18.948 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:11:18.949 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:11:20.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:11:20.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:11:20.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-14T12:11:20.886 [DEBUG] [Thread-185190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:11:22.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 10, 51), 10.84, 47.87, 0.0, 32.38, 13.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:11:22.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:10:51
2026-02-14T12:11:22.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:11:22.545 [DEBUG] [Thread-185191] [transport.py] [_log()] starting thread (client mode): 0xa5743040
2026-02-14T12:11:22.545 [DEBUG] [Thread-185191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:11:22.566 [DEBUG] [Thread-185191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:11:22.566 [INFO] [Thread-185191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:11:22.569 [DEBUG] [Thread-185191] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:11:22.569 [DEBUG] [Thread-185191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:11:22.569 [DEBUG] [Thread-185191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:11:22.569 [DEBUG] [Thread-185191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:11:22.569 [DEBUG] [Thread-185191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:11:22.570 [DEBUG] [Thread-185191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:11:22.570 [DEBUG] [Thread-185191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:11:22.570 [DEBUG] [Thread-185191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:11:22.570 [DEBUG] [Thread-185191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:11:22.570 [DEBUG] [Thread-185191] [transport.py] [_log()] client lang: <none>
2026-02-14T12:11:22.570 [DEBUG] [Thread-185191] [transport.py] [_log()] server lang: <none>
2026-02-14T12:11:22.570 [DEBUG] [Thread-185191] [transport.py] [_log()] kex follows: False
2026-02-14T12:11:22.570 [DEBUG] [Thread-185191] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:11:22.570 [DEBUG] [Thread-185191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:11:22.570 [DEBUG] [Thread-185191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:11:22.570 [DEBUG] [Thread-185191] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:11:22.570 [DEBUG] [Thread-185191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:11:22.570 [DEBUG] [Thread-185191] [transport.py] [_log()] Compression: none
2026-02-14T12:11:22.570 [DEBUG] [Thread-185191] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:11:22.587 [DEBUG] [Thread-185191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:11:22.587 [DEBUG] [Thread-185191] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:11:22.588 [DEBUG] [Thread-185191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:11:22.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:11:22.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:11:22.590 [DEBUG] [Thread-185191] [transport.py] [_log()] userauth is OK
2026-02-14T12:11:22.590 [DEBUG] [Thread-185191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:11:22.590 [DEBUG] [Thread-185191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:11:22.590 [DEBUG] [Thread-185191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:11:22.590 [DEBUG] [Thread-185191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:11:22.605 [INFO] [Thread-185191] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:11:22.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:11:22.788 [DEBUG] [Thread-185193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:11:23.232 [DEBUG] [Thread-185191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:11:23.232 [DEBUG] [Thread-185191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:11:23.233 [DEBUG] [Thread-185191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:11:23.273 [DEBUG] [Thread-185191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:11:23.273 [DEBUG] [Thread-185191] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:11:23.276 [DEBUG] [Thread-185191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:11:23.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:11:23.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:11:23.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:11:23.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:11:23.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:11:23.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:11:23.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:11:23.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:11:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:11:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.424069 -999.00  +13.70  25.29     53   +4.40 1 1 1 1 1   888    0 10.44 59.59 ----- 20.5 25.3 140.6 32.3 20.2 -24.3 19.1 -23.9 18.9 -23.7 20.0 -23.8
2026-02-14T12:11:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:11:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:11:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.424069
2026-02-14T12:11:23.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:11:23.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:11:23.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:11:23.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:11:23.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:11:23.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:10:51', tmtdew=10.84, humidity=47.87, cloud=0.0, wind=32.38, temperature=13.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:10:39.562', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:11:23.298 [DEBUG] [Thread-185191] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:11:23.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-14T12:11:23.398 [DEBUG] [Thread-185195] [transport.py] [_log()] starting thread (client mode): 0xa575bc70
2026-02-14T12:11:23.398 [DEBUG] [Thread-185195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:11:23.413 [DEBUG] [Thread-185195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:11:23.413 [INFO] [Thread-185195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:11:23.420 [DEBUG] [Thread-185195] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:11:23.420 [DEBUG] [Thread-185195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:11:23.421 [DEBUG] [Thread-185195] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:11:23.421 [DEBUG] [Thread-185195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:11:23.421 [DEBUG] [Thread-185195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:11:23.421 [DEBUG] [Thread-185195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:11:23.421 [DEBUG] [Thread-185195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:11:23.421 [DEBUG] [Thread-185195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:11:23.421 [DEBUG] [Thread-185195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:11:23.421 [DEBUG] [Thread-185195] [transport.py] [_log()] client lang: <none>
2026-02-14T12:11:23.421 [DEBUG] [Thread-185195] [transport.py] [_log()] server lang: <none>
2026-02-14T12:11:23.421 [DEBUG] [Thread-185195] [transport.py] [_log()] kex follows: False
2026-02-14T12:11:23.422 [DEBUG] [Thread-185195] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:11:23.422 [DEBUG] [Thread-185195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:11:23.422 [DEBUG] [Thread-185195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:11:23.422 [DEBUG] [Thread-185195] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:11:23.422 [DEBUG] [Thread-185195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:11:23.422 [DEBUG] [Thread-185195] [transport.py] [_log()] Compression: none
2026-02-14T12:11:23.422 [DEBUG] [Thread-185195] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:11:23.477 [DEBUG] [Thread-185195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:11:23.477 [DEBUG] [Thread-185195] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:11:23.478 [DEBUG] [Thread-185195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:11:23.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:11:23.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:11:23.533 [DEBUG] [Thread-185195] [transport.py] [_log()] userauth is OK
2026-02-14T12:11:23.533 [DEBUG] [Thread-185195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:11:23.533 [DEBUG] [Thread-185195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:11:23.533 [DEBUG] [Thread-185195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:11:23.534 [DEBUG] [Thread-185195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:11:23.553 [INFO] [Thread-185195] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:11:23.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-14T12:11:23.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:11:24.361 [DEBUG] [Thread-185195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:11:24.361 [DEBUG] [Thread-185195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:11:24.410 [DEBUG] [Thread-185195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:11:24.410 [DEBUG] [Thread-185195] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:11:24.422 [DEBUG] [Thread-185195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:11:24.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:11:24.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:11:24.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:11:24.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:11:24.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:11:24.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:11:24.459 [DEBUG] [Thread-185195] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:11:37.826 [DEBUG] [Thread-185197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:11:52.887 [DEBUG] [Thread-185198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:11:54.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:11:54.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:11:54.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-14T12:11:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 11, 27), 10.83, 47.91, 0.0, 31.67, 13.32, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:11:56.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:11:27
2026-02-14T12:11:57.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:11:57.582 [DEBUG] [Thread-185199] [transport.py] [_log()] starting thread (client mode): 0xa575bd60
2026-02-14T12:11:57.582 [DEBUG] [Thread-185199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:11:57.602 [DEBUG] [Thread-185199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:11:57.602 [INFO] [Thread-185199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:11:57.605 [DEBUG] [Thread-185199] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:11:57.605 [DEBUG] [Thread-185199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:11:57.605 [DEBUG] [Thread-185199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:11:57.605 [DEBUG] [Thread-185199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:11:57.605 [DEBUG] [Thread-185199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:11:57.605 [DEBUG] [Thread-185199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:11:57.605 [DEBUG] [Thread-185199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:11:57.605 [DEBUG] [Thread-185199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:11:57.605 [DEBUG] [Thread-185199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:11:57.606 [DEBUG] [Thread-185199] [transport.py] [_log()] client lang: <none>
2026-02-14T12:11:57.606 [DEBUG] [Thread-185199] [transport.py] [_log()] server lang: <none>
2026-02-14T12:11:57.606 [DEBUG] [Thread-185199] [transport.py] [_log()] kex follows: False
2026-02-14T12:11:57.606 [DEBUG] [Thread-185199] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:11:57.606 [DEBUG] [Thread-185199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:11:57.606 [DEBUG] [Thread-185199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:11:57.606 [DEBUG] [Thread-185199] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:11:57.606 [DEBUG] [Thread-185199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:11:57.606 [DEBUG] [Thread-185199] [transport.py] [_log()] Compression: none
2026-02-14T12:11:57.606 [DEBUG] [Thread-185199] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:11:57.625 [DEBUG] [Thread-185199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:11:57.625 [DEBUG] [Thread-185199] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:11:57.626 [DEBUG] [Thread-185199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:11:57.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:11:57.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:11:57.628 [DEBUG] [Thread-185199] [transport.py] [_log()] userauth is OK
2026-02-14T12:11:57.628 [DEBUG] [Thread-185199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:11:57.629 [DEBUG] [Thread-185199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:11:57.629 [DEBUG] [Thread-185199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:11:57.629 [DEBUG] [Thread-185199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:11:57.665 [INFO] [Thread-185199] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:11:57.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:11:58.310 [DEBUG] [Thread-185199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:11:58.310 [DEBUG] [Thread-185199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:11:58.310 [DEBUG] [Thread-185199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:11:58.351 [DEBUG] [Thread-185199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:11:58.351 [DEBUG] [Thread-185199] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:11:58.354 [DEBUG] [Thread-185199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:11:58.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:11:58.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:11:58.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:11:58.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:11:58.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:11:58.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:11:58.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:11:58.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:11:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:11:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.424416 -999.00  +13.70  18.45     53   +4.30 1 2 1 1 1   888    0 10.51 63.22 ----- 21.3 18.4 150.0 30.1 20.4 -24.0 19.2 -22.6 19.0 -23.0 20.1 -24.0
2026-02-14T12:11:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:11:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:11:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.424416
2026-02-14T12:11:58.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:11:58.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:11:58.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:11:58.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:11:58.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T12:11:58.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:11:27', tmtdew=10.83, humidity=47.91, cloud=0.0, wind=31.67, temperature=13.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:11:09.542', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:11:58.384 [DEBUG] [Thread-185199] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:11:58.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-14T12:11:58.480 [DEBUG] [Thread-185202] [transport.py] [_log()] starting thread (client mode): 0xa2dc0190
2026-02-14T12:11:58.480 [DEBUG] [Thread-185202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:11:58.494 [DEBUG] [Thread-185202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:11:58.495 [INFO] [Thread-185202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:11:58.502 [DEBUG] [Thread-185202] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:11:58.502 [DEBUG] [Thread-185202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:11:58.502 [DEBUG] [Thread-185202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:11:58.502 [DEBUG] [Thread-185202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:11:58.502 [DEBUG] [Thread-185202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:11:58.502 [DEBUG] [Thread-185202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:11:58.502 [DEBUG] [Thread-185202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:11:58.503 [DEBUG] [Thread-185202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:11:58.503 [DEBUG] [Thread-185202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:11:58.503 [DEBUG] [Thread-185202] [transport.py] [_log()] client lang: <none>
2026-02-14T12:11:58.503 [DEBUG] [Thread-185202] [transport.py] [_log()] server lang: <none>
2026-02-14T12:11:58.503 [DEBUG] [Thread-185202] [transport.py] [_log()] kex follows: False
2026-02-14T12:11:58.503 [DEBUG] [Thread-185202] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:11:58.503 [DEBUG] [Thread-185202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:11:58.503 [DEBUG] [Thread-185202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:11:58.503 [DEBUG] [Thread-185202] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:11:58.503 [DEBUG] [Thread-185202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:11:58.503 [DEBUG] [Thread-185202] [transport.py] [_log()] Compression: none
2026-02-14T12:11:58.503 [DEBUG] [Thread-185202] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:11:58.565 [DEBUG] [Thread-185202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:11:58.566 [DEBUG] [Thread-185202] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:11:58.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:11:58.567 [DEBUG] [Thread-185202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:11:58.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:11:58.621 [DEBUG] [Thread-185202] [transport.py] [_log()] userauth is OK
2026-02-14T12:11:58.622 [DEBUG] [Thread-185202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:11:58.622 [DEBUG] [Thread-185202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:11:58.622 [DEBUG] [Thread-185202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:11:58.622 [DEBUG] [Thread-185202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:11:58.640 [INFO] [Thread-185202] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:11:58.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-14T12:11:58.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:11:59.434 [DEBUG] [Thread-185202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:11:59.434 [DEBUG] [Thread-185202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:11:59.482 [DEBUG] [Thread-185202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:11:59.482 [DEBUG] [Thread-185202] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:11:59.492 [DEBUG] [Thread-185202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:11:59.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:11:59.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:11:59.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-14T12:11:59.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:11:59.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:11:59.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:11:59.529 [DEBUG] [Thread-185202] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:12:07.923 [DEBUG] [Thread-185204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:12:19.088 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:12:19.089 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:12:20.940 [DEBUG] [Thread-185205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:12:22.975 [DEBUG] [Thread-185206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:12:29.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:12:29.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:12:29.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-14T12:12:31.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 12, 4), 10.83, 47.91, 0.0, 31.32, 13.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:12:31.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:12:04
2026-02-14T12:12:31.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:12:32.052 [DEBUG] [Thread-185207] [transport.py] [_log()] starting thread (client mode): 0xa2d3e0e0
2026-02-14T12:12:32.052 [DEBUG] [Thread-185207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:12:32.071 [DEBUG] [Thread-185207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:12:32.072 [INFO] [Thread-185207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:12:32.075 [DEBUG] [Thread-185207] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:12:32.075 [DEBUG] [Thread-185207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:12:32.075 [DEBUG] [Thread-185207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:12:32.075 [DEBUG] [Thread-185207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:12:32.075 [DEBUG] [Thread-185207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:12:32.075 [DEBUG] [Thread-185207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:12:32.075 [DEBUG] [Thread-185207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:12:32.075 [DEBUG] [Thread-185207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:12:32.075 [DEBUG] [Thread-185207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:12:32.075 [DEBUG] [Thread-185207] [transport.py] [_log()] client lang: <none>
2026-02-14T12:12:32.075 [DEBUG] [Thread-185207] [transport.py] [_log()] server lang: <none>
2026-02-14T12:12:32.075 [DEBUG] [Thread-185207] [transport.py] [_log()] kex follows: False
2026-02-14T12:12:32.075 [DEBUG] [Thread-185207] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:12:32.075 [DEBUG] [Thread-185207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:12:32.075 [DEBUG] [Thread-185207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:12:32.075 [DEBUG] [Thread-185207] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:12:32.075 [DEBUG] [Thread-185207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:12:32.075 [DEBUG] [Thread-185207] [transport.py] [_log()] Compression: none
2026-02-14T12:12:32.075 [DEBUG] [Thread-185207] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:12:32.090 [DEBUG] [Thread-185207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:12:32.091 [DEBUG] [Thread-185207] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:12:32.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:12:32.092 [DEBUG] [Thread-185207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:12:32.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:12:32.095 [DEBUG] [Thread-185207] [transport.py] [_log()] userauth is OK
2026-02-14T12:12:32.095 [DEBUG] [Thread-185207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:12:32.095 [DEBUG] [Thread-185207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:12:32.096 [DEBUG] [Thread-185207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:12:32.096 [DEBUG] [Thread-185207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:12:32.113 [INFO] [Thread-185207] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:12:32.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:12:32.957 [DEBUG] [Thread-185207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:12:32.957 [DEBUG] [Thread-185207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:12:32.958 [DEBUG] [Thread-185207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:12:32.998 [DEBUG] [Thread-185207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:12:32.998 [DEBUG] [Thread-185207] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:12:33.001 [DEBUG] [Thread-185207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:12:33.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:12:33.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:12:33.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:12:33.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:12:33.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:12:33.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:12:33.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:12:33.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:12:33.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:12:33.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.424764 -999.00  +13.50  16.39     53   +4.30 1 1 1 1 1   888    0 10.66 66.97 ----- 22.2 16.4 160.4 33.4 20.3 -24.8 19.2 -23.7 18.9 -23.4 20.0 -24.5
2026-02-14T12:12:33.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:12:33.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:12:33.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.424764
2026-02-14T12:12:33.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:12:33.024 [DEBUG] [Thread-185207] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:12:33.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:12:33.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:12:33.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:12:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:12:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:12:04', tmtdew=10.83, humidity=47.91, cloud=0.0, wind=31.32, temperature=13.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:11:39.610', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:12:33.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:12:33.122 [DEBUG] [Thread-185210] [transport.py] [_log()] starting thread (client mode): 0xa2d564d0
2026-02-14T12:12:33.122 [DEBUG] [Thread-185210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:12:33.137 [DEBUG] [Thread-185210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:12:33.137 [INFO] [Thread-185210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:12:33.144 [DEBUG] [Thread-185210] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:12:33.144 [DEBUG] [Thread-185210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:12:33.144 [DEBUG] [Thread-185210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:12:33.144 [DEBUG] [Thread-185210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:12:33.145 [DEBUG] [Thread-185210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:12:33.145 [DEBUG] [Thread-185210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:12:33.145 [DEBUG] [Thread-185210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:12:33.145 [DEBUG] [Thread-185210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:12:33.145 [DEBUG] [Thread-185210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:12:33.145 [DEBUG] [Thread-185210] [transport.py] [_log()] client lang: <none>
2026-02-14T12:12:33.145 [DEBUG] [Thread-185210] [transport.py] [_log()] server lang: <none>
2026-02-14T12:12:33.145 [DEBUG] [Thread-185210] [transport.py] [_log()] kex follows: False
2026-02-14T12:12:33.145 [DEBUG] [Thread-185210] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:12:33.145 [DEBUG] [Thread-185210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:12:33.145 [DEBUG] [Thread-185210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:12:33.146 [DEBUG] [Thread-185210] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:12:33.146 [DEBUG] [Thread-185210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:12:33.146 [DEBUG] [Thread-185210] [transport.py] [_log()] Compression: none
2026-02-14T12:12:33.146 [DEBUG] [Thread-185210] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:12:33.200 [DEBUG] [Thread-185210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:12:33.201 [DEBUG] [Thread-185210] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:12:33.201 [DEBUG] [Thread-185210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:12:33.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:12:33.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:12:33.257 [DEBUG] [Thread-185210] [transport.py] [_log()] userauth is OK
2026-02-14T12:12:33.257 [DEBUG] [Thread-185210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:12:33.258 [DEBUG] [Thread-185210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:12:33.258 [DEBUG] [Thread-185210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:12:33.258 [DEBUG] [Thread-185210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:12:33.277 [INFO] [Thread-185210] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:12:33.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-14T12:12:33.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:12:34.099 [DEBUG] [Thread-185210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:12:34.099 [DEBUG] [Thread-185210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:12:34.146 [DEBUG] [Thread-185210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:12:34.147 [DEBUG] [Thread-185210] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:12:34.157 [DEBUG] [Thread-185210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:12:34.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:12:34.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-14T12:12:34.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-14T12:12:34.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:12:34.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:12:34.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:12:34.193 [DEBUG] [Thread-185210] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:12:38.009 [DEBUG] [Thread-185212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:12:53.061 [DEBUG] [Thread-185213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:13:04.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:13:04.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:13: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-14T12:13:06.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 12, 40), 11.3, 46.51, 0.0, 20.61, 14.31, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:13:06.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:12:40
2026-02-14T12:13:06.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:13:06.573 [DEBUG] [Thread-185214] [transport.py] [_log()] starting thread (client mode): 0xa2ddfe80
2026-02-14T12:13:06.573 [DEBUG] [Thread-185214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:13:06.591 [DEBUG] [Thread-185214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:13:06.591 [INFO] [Thread-185214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:13:06.595 [DEBUG] [Thread-185214] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:13:06.595 [DEBUG] [Thread-185214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:13:06.595 [DEBUG] [Thread-185214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:13:06.595 [DEBUG] [Thread-185214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:13:06.595 [DEBUG] [Thread-185214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:13:06.595 [DEBUG] [Thread-185214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:13:06.595 [DEBUG] [Thread-185214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:13:06.595 [DEBUG] [Thread-185214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:13:06.595 [DEBUG] [Thread-185214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:13:06.595 [DEBUG] [Thread-185214] [transport.py] [_log()] client lang: <none>
2026-02-14T12:13:06.595 [DEBUG] [Thread-185214] [transport.py] [_log()] server lang: <none>
2026-02-14T12:13:06.595 [DEBUG] [Thread-185214] [transport.py] [_log()] kex follows: False
2026-02-14T12:13:06.595 [DEBUG] [Thread-185214] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:13:06.595 [DEBUG] [Thread-185214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:13:06.595 [DEBUG] [Thread-185214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:13:06.595 [DEBUG] [Thread-185214] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:13:06.595 [DEBUG] [Thread-185214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:13:06.595 [DEBUG] [Thread-185214] [transport.py] [_log()] Compression: none
2026-02-14T12:13:06.595 [DEBUG] [Thread-185214] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:13:06.613 [DEBUG] [Thread-185214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:13:06.614 [DEBUG] [Thread-185214] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:13:06.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:13:06.615 [DEBUG] [Thread-185214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:13:06.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:13:06.617 [DEBUG] [Thread-185214] [transport.py] [_log()] userauth is OK
2026-02-14T12:13:06.618 [DEBUG] [Thread-185214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:13:06.618 [DEBUG] [Thread-185214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:13:06.618 [DEBUG] [Thread-185214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:13:06.618 [DEBUG] [Thread-185214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:13:06.643 [INFO] [Thread-185214] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:13:06.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:13:07.299 [DEBUG] [Thread-185214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:13:07.299 [DEBUG] [Thread-185214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:13:07.300 [DEBUG] [Thread-185214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:13:07.341 [DEBUG] [Thread-185214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:13:07.341 [DEBUG] [Thread-185214] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:13:07.344 [DEBUG] [Thread-185214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:13:07.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:13:07.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:13:07.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:13:07.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:13:07.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:13:07.368 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:13:07.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:13:07.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:13:07.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:13:07.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.425111 -999.00  +13.30  13.29     54   +4.30 1 1 1 1 1   888    0 10.59 65.91 ----- 22.9 13.3 150.8 28.1 20.3 -24.9 19.1 -24.2 18.9 -22.8 20.1 -24.7
2026-02-14T12:13:07.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:13:07.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:13:07.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.425111
2026-02-14T12:13:07.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:13:07.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:13:07.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:13:07.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:13:07.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:13:07.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:12:40', tmtdew=11.3, humidity=46.51, cloud=0.0, wind=20.61, temperature=14.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:12:09.590', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:13:07.371 [DEBUG] [Thread-185214] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:13:07.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-14T12:13:07.472 [DEBUG] [Thread-185217] [transport.py] [_log()] starting thread (client mode): 0xa2ddc5b0
2026-02-14T12:13:07.472 [DEBUG] [Thread-185217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:13:07.487 [DEBUG] [Thread-185217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:13:07.487 [INFO] [Thread-185217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:13:07.495 [DEBUG] [Thread-185217] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:13:07.495 [DEBUG] [Thread-185217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:13:07.495 [DEBUG] [Thread-185217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:13:07.495 [DEBUG] [Thread-185217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:13:07.495 [DEBUG] [Thread-185217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:13:07.495 [DEBUG] [Thread-185217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:13:07.495 [DEBUG] [Thread-185217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:13:07.496 [DEBUG] [Thread-185217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:13:07.496 [DEBUG] [Thread-185217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:13:07.496 [DEBUG] [Thread-185217] [transport.py] [_log()] client lang: <none>
2026-02-14T12:13:07.496 [DEBUG] [Thread-185217] [transport.py] [_log()] server lang: <none>
2026-02-14T12:13:07.496 [DEBUG] [Thread-185217] [transport.py] [_log()] kex follows: False
2026-02-14T12:13:07.496 [DEBUG] [Thread-185217] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:13:07.496 [DEBUG] [Thread-185217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:13:07.496 [DEBUG] [Thread-185217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:13:07.496 [DEBUG] [Thread-185217] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:13:07.497 [DEBUG] [Thread-185217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:13:07.497 [DEBUG] [Thread-185217] [transport.py] [_log()] Compression: none
2026-02-14T12:13:07.497 [DEBUG] [Thread-185217] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:13:07.555 [DEBUG] [Thread-185217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:13:07.556 [DEBUG] [Thread-185217] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:13:07.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:13:07.557 [DEBUG] [Thread-185217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:13:07.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:13:07.613 [DEBUG] [Thread-185217] [transport.py] [_log()] userauth is OK
2026-02-14T12:13:07.614 [DEBUG] [Thread-185217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:13:07.614 [DEBUG] [Thread-185217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:13:07.614 [DEBUG] [Thread-185217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:13:07.614 [DEBUG] [Thread-185217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:13:07.633 [INFO] [Thread-185217] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:13:07.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-14T12:13:07.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:13:08.096 [DEBUG] [Thread-185219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:13:08.442 [DEBUG] [Thread-185217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:13:08.442 [DEBUG] [Thread-185217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:13:08.489 [DEBUG] [Thread-185217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:13:08.489 [DEBUG] [Thread-185217] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:13:08.499 [DEBUG] [Thread-185217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:13:08.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:13:08.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-14T12:13:08.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:13:08.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:13:08.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:13:08.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:13:08.535 [DEBUG] [Thread-185217] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:13:19.229 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:13:19.230 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:13:20.967 [DEBUG] [Thread-185220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:13:23.148 [DEBUG] [Thread-185221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:13:38.189 [DEBUG] [Thread-185222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:13:38.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:13:38.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:13:38.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-14T12:13:40.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 13, 15), 10.57, 48.95, 0.0, 37.33, 13.75, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:13:40.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:13:15
2026-02-14T12:13:40.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:13:41.139 [DEBUG] [Thread-185223] [transport.py] [_log()] starting thread (client mode): 0xa2d118a0
2026-02-14T12:13:41.139 [DEBUG] [Thread-185223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:13:41.160 [DEBUG] [Thread-185223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:13:41.160 [INFO] [Thread-185223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:13:41.163 [DEBUG] [Thread-185223] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:13:41.163 [DEBUG] [Thread-185223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:13:41.163 [DEBUG] [Thread-185223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:13:41.163 [DEBUG] [Thread-185223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:13:41.163 [DEBUG] [Thread-185223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:13:41.163 [DEBUG] [Thread-185223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:13:41.163 [DEBUG] [Thread-185223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:13:41.163 [DEBUG] [Thread-185223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:13:41.163 [DEBUG] [Thread-185223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:13:41.163 [DEBUG] [Thread-185223] [transport.py] [_log()] client lang: <none>
2026-02-14T12:13:41.163 [DEBUG] [Thread-185223] [transport.py] [_log()] server lang: <none>
2026-02-14T12:13:41.163 [DEBUG] [Thread-185223] [transport.py] [_log()] kex follows: False
2026-02-14T12:13:41.163 [DEBUG] [Thread-185223] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:13:41.163 [DEBUG] [Thread-185223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:13:41.163 [DEBUG] [Thread-185223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:13:41.163 [DEBUG] [Thread-185223] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:13:41.163 [DEBUG] [Thread-185223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:13:41.164 [DEBUG] [Thread-185223] [transport.py] [_log()] Compression: none
2026-02-14T12:13:41.164 [DEBUG] [Thread-185223] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:13:41.173 [DEBUG] [Thread-185223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:13:41.173 [DEBUG] [Thread-185223] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:13:41.174 [DEBUG] [Thread-185223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:13:41.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:13:41.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:13:41.175 [DEBUG] [Thread-185223] [transport.py] [_log()] userauth is OK
2026-02-14T12:13:41.175 [DEBUG] [Thread-185223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:13:41.175 [DEBUG] [Thread-185223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:13:41.175 [DEBUG] [Thread-185223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:13:41.175 [DEBUG] [Thread-185223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:13:41.188 [INFO] [Thread-185223] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:13:41.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:13:41.740 [DEBUG] [Thread-185223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:13:41.740 [DEBUG] [Thread-185223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:13:41.740 [DEBUG] [Thread-185223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:13:41.782 [DEBUG] [Thread-185223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:13:41.782 [DEBUG] [Thread-185223] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:13:41.785 [DEBUG] [Thread-185223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:13:41.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:13:41.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:13:41.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:13:41.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:13:41.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:13:41.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:13:41.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:13:41.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:13:41.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:13:41.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.425458 -999.00  +13.40  38.13     53   +4.20 1 1 2 1 1   888    0 10.55 66.99 ----- 32.3 38.1 177.4 41.4 20.4 -25.0 19.0 -28.0 18.9 -24.7 20.1 -25.0
2026-02-14T12:13:41.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:13:41.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:13:41.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.425458
2026-02-14T12:13:41.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:13:41.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:13:41.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:13:41.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:13:41.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:13:41.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:13:15', tmtdew=10.57, humidity=48.95, cloud=0.0, wind=37.33, temperature=13.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:12:39.571', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:13:41.816 [DEBUG] [Thread-185223] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:13:41.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-14T12:13:41.911 [DEBUG] [Thread-185226] [transport.py] [_log()] starting thread (client mode): 0xa2dc3d00
2026-02-14T12:13:41.911 [DEBUG] [Thread-185226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:13:41.933 [DEBUG] [Thread-185226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:13:41.933 [INFO] [Thread-185226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:13:41.945 [DEBUG] [Thread-185226] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:13:41.945 [DEBUG] [Thread-185226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:13:41.945 [DEBUG] [Thread-185226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:13:41.945 [DEBUG] [Thread-185226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:13:41.946 [DEBUG] [Thread-185226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:13:41.946 [DEBUG] [Thread-185226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:13:41.946 [DEBUG] [Thread-185226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:13:41.946 [DEBUG] [Thread-185226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:13:41.946 [DEBUG] [Thread-185226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:13:41.946 [DEBUG] [Thread-185226] [transport.py] [_log()] client lang: <none>
2026-02-14T12:13:41.946 [DEBUG] [Thread-185226] [transport.py] [_log()] server lang: <none>
2026-02-14T12:13:41.946 [DEBUG] [Thread-185226] [transport.py] [_log()] kex follows: False
2026-02-14T12:13:41.946 [DEBUG] [Thread-185226] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:13:41.946 [DEBUG] [Thread-185226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:13:41.946 [DEBUG] [Thread-185226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:13:41.946 [DEBUG] [Thread-185226] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:13:41.946 [DEBUG] [Thread-185226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:13:41.946 [DEBUG] [Thread-185226] [transport.py] [_log()] Compression: none
2026-02-14T12:13:41.946 [DEBUG] [Thread-185226] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:13:42.001 [DEBUG] [Thread-185226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:13:42.002 [DEBUG] [Thread-185226] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:13:42.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:13:42.003 [DEBUG] [Thread-185226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:13:42.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:13:42.059 [DEBUG] [Thread-185226] [transport.py] [_log()] userauth is OK
2026-02-14T12:13:42.059 [DEBUG] [Thread-185226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:13:42.059 [DEBUG] [Thread-185226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:13:42.059 [DEBUG] [Thread-185226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:13:42.059 [DEBUG] [Thread-185226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:13:42.079 [INFO] [Thread-185226] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:13: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-14T12:13:42.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:13:42.909 [DEBUG] [Thread-185226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:13:42.909 [DEBUG] [Thread-185226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:13:42.957 [DEBUG] [Thread-185226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:13:42.957 [DEBUG] [Thread-185226] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:13:42.966 [DEBUG] [Thread-185226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:13:42.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:13:42.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-14T12:13:42.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-14T12:13:42.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:13:42.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:13:42.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:13:42.998 [DEBUG] [Thread-185226] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:13:53.226 [DEBUG] [Thread-185228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:14:08.272 [DEBUG] [Thread-185229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:14:13.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:14:13.020 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:14:13.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-14T12:14:15.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 13, 50), 11.29, 46.68, 0.0, 34.02, 13.92, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:14:15.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:13:50
2026-02-14T12:14:15.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:14:15.605 [DEBUG] [Thread-185230] [transport.py] [_log()] starting thread (client mode): 0xa5758850
2026-02-14T12:14:15.605 [DEBUG] [Thread-185230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:14:15.626 [DEBUG] [Thread-185230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:14:15.627 [INFO] [Thread-185230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:14:15.637 [DEBUG] [Thread-185230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:14:15.637 [DEBUG] [Thread-185230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:14:15.638 [DEBUG] [Thread-185230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:14:15.638 [DEBUG] [Thread-185230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:14:15.638 [DEBUG] [Thread-185230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:14:15.638 [DEBUG] [Thread-185230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:14:15.638 [DEBUG] [Thread-185230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:14:15.638 [DEBUG] [Thread-185230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:14:15.638 [DEBUG] [Thread-185230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:14:15.638 [DEBUG] [Thread-185230] [transport.py] [_log()] client lang: <none>
2026-02-14T12:14:15.638 [DEBUG] [Thread-185230] [transport.py] [_log()] server lang: <none>
2026-02-14T12:14:15.638 [DEBUG] [Thread-185230] [transport.py] [_log()] kex follows: False
2026-02-14T12:14:15.638 [DEBUG] [Thread-185230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:14:15.638 [DEBUG] [Thread-185230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:14:15.638 [DEBUG] [Thread-185230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:14:15.639 [DEBUG] [Thread-185230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:14:15.639 [DEBUG] [Thread-185230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:14:15.639 [DEBUG] [Thread-185230] [transport.py] [_log()] Compression: none
2026-02-14T12:14:15.639 [DEBUG] [Thread-185230] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:14:15.663 [DEBUG] [Thread-185230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:14:15.663 [DEBUG] [Thread-185230] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:14:15.664 [DEBUG] [Thread-185230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:14:15.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:14:15.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:14:15.666 [DEBUG] [Thread-185230] [transport.py] [_log()] userauth is OK
2026-02-14T12:14:15.666 [DEBUG] [Thread-185230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:14:15.666 [DEBUG] [Thread-185230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:14:15.666 [DEBUG] [Thread-185230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:14:15.666 [DEBUG] [Thread-185230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:14:15.686 [INFO] [Thread-185230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:14:15.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:14:16.333 [DEBUG] [Thread-185230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:14:16.334 [DEBUG] [Thread-185230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:14:16.334 [DEBUG] [Thread-185230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:14:16.374 [DEBUG] [Thread-185230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:14:16.375 [DEBUG] [Thread-185230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:14:16.378 [DEBUG] [Thread-185230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:14:16.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:14:16.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:14:16.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:14:16.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:14:16.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:14:16.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:14:16.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:14:16.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:14:16.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:14:16.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.426152 -999.00  +13.20  23.41     53   +4.00 1 1 1 1 1   888    0 10.58 60.31 ----- 21.1 23.4 182.8 40.2 19.9 -26.8 18.2 -29.4 18.6 -23.0 19.6 -26.2
2026-02-14T12:14:16.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:14:16.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:14:16.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.426152
2026-02-14T12:14:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:14:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:14:16.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:14:16.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:14:16.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:14:16.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:13:50', tmtdew=11.29, humidity=46.68, cloud=0.0, wind=34.02, temperature=13.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:13:39.533', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:14:16.404 [DEBUG] [Thread-185230] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:14:16.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-14T12:14:16.500 [DEBUG] [Thread-185233] [transport.py] [_log()] starting thread (client mode): 0xa2d20250
2026-02-14T12:14:16.500 [DEBUG] [Thread-185233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:14:16.514 [DEBUG] [Thread-185233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:14:16.514 [INFO] [Thread-185233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:14:16.522 [DEBUG] [Thread-185233] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:14:16.522 [DEBUG] [Thread-185233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:14:16.522 [DEBUG] [Thread-185233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:14:16.522 [DEBUG] [Thread-185233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:14:16.523 [DEBUG] [Thread-185233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:14:16.523 [DEBUG] [Thread-185233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:14:16.523 [DEBUG] [Thread-185233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:14:16.523 [DEBUG] [Thread-185233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:14:16.523 [DEBUG] [Thread-185233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:14:16.523 [DEBUG] [Thread-185233] [transport.py] [_log()] client lang: <none>
2026-02-14T12:14:16.523 [DEBUG] [Thread-185233] [transport.py] [_log()] server lang: <none>
2026-02-14T12:14:16.523 [DEBUG] [Thread-185233] [transport.py] [_log()] kex follows: False
2026-02-14T12:14:16.523 [DEBUG] [Thread-185233] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:14:16.523 [DEBUG] [Thread-185233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:14:16.523 [DEBUG] [Thread-185233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:14:16.523 [DEBUG] [Thread-185233] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:14:16.523 [DEBUG] [Thread-185233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:14:16.523 [DEBUG] [Thread-185233] [transport.py] [_log()] Compression: none
2026-02-14T12:14:16.523 [DEBUG] [Thread-185233] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:14:16.581 [DEBUG] [Thread-185233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:14:16.581 [DEBUG] [Thread-185233] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:14:16.582 [DEBUG] [Thread-185233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:14:16.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:14:16.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:14:16.637 [DEBUG] [Thread-185233] [transport.py] [_log()] userauth is OK
2026-02-14T12:14:16.637 [DEBUG] [Thread-185233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:14:16.637 [DEBUG] [Thread-185233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:14:16.637 [DEBUG] [Thread-185233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:14:16.638 [DEBUG] [Thread-185233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:14:16.661 [INFO] [Thread-185233] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:14:16.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-14T12:14:16.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:14:17.524 [DEBUG] [Thread-185233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:14:17.525 [DEBUG] [Thread-185233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:14:17.573 [DEBUG] [Thread-185233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:14:17.573 [DEBUG] [Thread-185233] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:14:17.582 [DEBUG] [Thread-185233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:14:17.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:14:17.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:14:17.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:14:17.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:14:17.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:14:17.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:14:17.618 [DEBUG] [Thread-185233] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:14:19.370 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:14:19.371 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:14:21.000 [DEBUG] [Thread-185235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:14:23.309 [DEBUG] [Thread-185236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:14:38.359 [DEBUG] [Thread-185237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:14:47.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:14:47.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:14:47.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-14T12:14:49.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 14, 26), 11.34, 46.5, 0.0, 31.51, 13.78, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:14:49.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:14:26
2026-02-14T12:14:50.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:14:50.196 [DEBUG] [Thread-185238] [transport.py] [_log()] starting thread (client mode): 0xa2d236a0
2026-02-14T12:14:50.196 [DEBUG] [Thread-185238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:14:50.216 [DEBUG] [Thread-185238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:14:50.216 [INFO] [Thread-185238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:14:50.220 [DEBUG] [Thread-185238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:14:50.220 [DEBUG] [Thread-185238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:14:50.220 [DEBUG] [Thread-185238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:14:50.220 [DEBUG] [Thread-185238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:14:50.220 [DEBUG] [Thread-185238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:14:50.220 [DEBUG] [Thread-185238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:14:50.221 [DEBUG] [Thread-185238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:14:50.221 [DEBUG] [Thread-185238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:14:50.221 [DEBUG] [Thread-185238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:14:50.221 [DEBUG] [Thread-185238] [transport.py] [_log()] client lang: <none>
2026-02-14T12:14:50.221 [DEBUG] [Thread-185238] [transport.py] [_log()] server lang: <none>
2026-02-14T12:14:50.221 [DEBUG] [Thread-185238] [transport.py] [_log()] kex follows: False
2026-02-14T12:14:50.221 [DEBUG] [Thread-185238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:14:50.221 [DEBUG] [Thread-185238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:14:50.221 [DEBUG] [Thread-185238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:14:50.221 [DEBUG] [Thread-185238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:14:50.221 [DEBUG] [Thread-185238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:14:50.221 [DEBUG] [Thread-185238] [transport.py] [_log()] Compression: none
2026-02-14T12:14:50.221 [DEBUG] [Thread-185238] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:14:50.238 [DEBUG] [Thread-185238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:14:50.238 [DEBUG] [Thread-185238] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:14:50.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:14:50.239 [DEBUG] [Thread-185238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:14:50.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:14:50.241 [DEBUG] [Thread-185238] [transport.py] [_log()] userauth is OK
2026-02-14T12:14:50.241 [DEBUG] [Thread-185238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:14:50.241 [DEBUG] [Thread-185238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:14:50.241 [DEBUG] [Thread-185238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:14:50.241 [DEBUG] [Thread-185238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:14:50.251 [INFO] [Thread-185238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:14:50.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:14:50.917 [DEBUG] [Thread-185238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:14:50.918 [DEBUG] [Thread-185238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:14:50.918 [DEBUG] [Thread-185238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:14:50.958 [DEBUG] [Thread-185238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:14:50.959 [DEBUG] [Thread-185238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:14:50.962 [DEBUG] [Thread-185238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:14:50.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:14:50.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:14:50.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:14:50.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:14:50.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:14:50.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:14:50.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:14:50.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:14:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:14:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.426500 -999.00  +13.40  28.43     53   +4.00 1 2 1 1 1   888    0 10.51 59.67 ----- 20.8 28.4 139.8 43.0 20.1 -24.5 18.9 -22.7 18.9 -21.7 19.9 -24.4
2026-02-14T12:14:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:14:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:14:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.426500
2026-02-14T12:14:50.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:14:50.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:14:50.990 [DEBUG] [Thread-185238] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:14:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:14:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:14:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T12:14:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:14:26', tmtdew=11.34, humidity=46.5, cloud=0.0, wind=31.51, temperature=13.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:14:09.600', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:14:51.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-14T12:14:51.090 [DEBUG] [Thread-185241] [transport.py] [_log()] starting thread (client mode): 0xa2d233a0
2026-02-14T12:14:51.090 [DEBUG] [Thread-185241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:14:51.105 [DEBUG] [Thread-185241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:14:51.105 [INFO] [Thread-185241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:14:51.112 [DEBUG] [Thread-185241] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:14:51.112 [DEBUG] [Thread-185241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:14:51.113 [DEBUG] [Thread-185241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:14:51.113 [DEBUG] [Thread-185241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:14:51.113 [DEBUG] [Thread-185241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:14:51.113 [DEBUG] [Thread-185241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:14:51.113 [DEBUG] [Thread-185241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:14:51.113 [DEBUG] [Thread-185241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:14:51.113 [DEBUG] [Thread-185241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:14:51.113 [DEBUG] [Thread-185241] [transport.py] [_log()] client lang: <none>
2026-02-14T12:14:51.113 [DEBUG] [Thread-185241] [transport.py] [_log()] server lang: <none>
2026-02-14T12:14:51.113 [DEBUG] [Thread-185241] [transport.py] [_log()] kex follows: False
2026-02-14T12:14:51.113 [DEBUG] [Thread-185241] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:14:51.113 [DEBUG] [Thread-185241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:14:51.113 [DEBUG] [Thread-185241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:14:51.113 [DEBUG] [Thread-185241] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:14:51.113 [DEBUG] [Thread-185241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:14:51.113 [DEBUG] [Thread-185241] [transport.py] [_log()] Compression: none
2026-02-14T12:14:51.113 [DEBUG] [Thread-185241] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:14:51.167 [DEBUG] [Thread-185241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:14:51.168 [DEBUG] [Thread-185241] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:14:51.168 [DEBUG] [Thread-185241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:14:51.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:14:51.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:14:51.225 [DEBUG] [Thread-185241] [transport.py] [_log()] userauth is OK
2026-02-14T12:14:51.226 [DEBUG] [Thread-185241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:14:51.226 [DEBUG] [Thread-185241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:14:51.226 [DEBUG] [Thread-185241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:14:51.226 [DEBUG] [Thread-185241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:14:51.246 [INFO] [Thread-185241] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:14:51.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-14T12:14:51.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:14:52.053 [DEBUG] [Thread-185241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:14:52.053 [DEBUG] [Thread-185241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:14:52.101 [DEBUG] [Thread-185241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:14:52.101 [DEBUG] [Thread-185241] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:14:52.110 [DEBUG] [Thread-185241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:14:52.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:14:52.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:14: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-14T12:14:52.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:14:52.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:14:52.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:14:52.153 [DEBUG] [Thread-185241] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:14:53.397 [DEBUG] [Thread-185243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:15:08.447 [DEBUG] [Thread-185244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:15:19.525 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:15:19.526 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:15:21.033 [DEBUG] [Thread-185245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:15:22.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:15:22.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:15:22.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-14T12:15:23.482 [DEBUG] [Thread-185246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:15:24.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 15, 1), 11.39, 45.93, 0.0, 31.11, 13.83, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:15:24.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:15:01
2026-02-14T12:15:24.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:15:24.666 [DEBUG] [Thread-185247] [transport.py] [_log()] starting thread (client mode): 0xa2d22410
2026-02-14T12:15:24.666 [DEBUG] [Thread-185247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:15:24.687 [DEBUG] [Thread-185247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:15:24.687 [INFO] [Thread-185247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:15:24.690 [DEBUG] [Thread-185247] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:15:24.690 [DEBUG] [Thread-185247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:15:24.690 [DEBUG] [Thread-185247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:15:24.690 [DEBUG] [Thread-185247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:15:24.690 [DEBUG] [Thread-185247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:15:24.690 [DEBUG] [Thread-185247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:15:24.690 [DEBUG] [Thread-185247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:15:24.690 [DEBUG] [Thread-185247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:15:24.690 [DEBUG] [Thread-185247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:15:24.690 [DEBUG] [Thread-185247] [transport.py] [_log()] client lang: <none>
2026-02-14T12:15:24.690 [DEBUG] [Thread-185247] [transport.py] [_log()] server lang: <none>
2026-02-14T12:15:24.690 [DEBUG] [Thread-185247] [transport.py] [_log()] kex follows: False
2026-02-14T12:15:24.690 [DEBUG] [Thread-185247] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:15:24.690 [DEBUG] [Thread-185247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:15:24.691 [DEBUG] [Thread-185247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:15:24.691 [DEBUG] [Thread-185247] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:15:24.691 [DEBUG] [Thread-185247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:15:24.691 [DEBUG] [Thread-185247] [transport.py] [_log()] Compression: none
2026-02-14T12:15:24.691 [DEBUG] [Thread-185247] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:15:24.709 [DEBUG] [Thread-185247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:15:24.710 [DEBUG] [Thread-185247] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:15:24.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:15:24.711 [DEBUG] [Thread-185247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:15:24.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:15:24.713 [DEBUG] [Thread-185247] [transport.py] [_log()] userauth is OK
2026-02-14T12:15:24.714 [DEBUG] [Thread-185247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:15:24.714 [DEBUG] [Thread-185247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:15:24.714 [DEBUG] [Thread-185247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:15:24.714 [DEBUG] [Thread-185247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:15:24.738 [INFO] [Thread-185247] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:15:24.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:15:25.324 [DEBUG] [Thread-185247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:15:25.324 [DEBUG] [Thread-185247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:15:25.324 [DEBUG] [Thread-185247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:15:25.364 [DEBUG] [Thread-185247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:15:25.364 [DEBUG] [Thread-185247] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:15:25.368 [DEBUG] [Thread-185247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:15:25.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:15:25.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:15:25.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:15:25.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:15:25.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:15:25.392 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:15:25.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:15:25.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:15:25.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:15:25.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.426847 -999.00  +14.00  24.00     51   +4.20 1 1 1 1 1   888    0 10.76 60.92 ----- 25.8 24.0 178.0 34.5 20.2 -26.1 18.9 -27.2 18.9 -24.4 20.0 -25.6
2026-02-14T12:15:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:15:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:15:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.426847
2026-02-14T12:15:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:15:25.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:15:25.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:15:25.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:15:25.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:15:25.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:15:01', tmtdew=11.39, humidity=45.93, cloud=0.0, wind=31.11, temperature=13.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:14:39.581', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:15:25.396 [DEBUG] [Thread-185247] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:15:25.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-14T12:15:25.490 [DEBUG] [Thread-185250] [transport.py] [_log()] starting thread (client mode): 0xa2d55e70
2026-02-14T12:15:25.491 [DEBUG] [Thread-185250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:15:25.505 [DEBUG] [Thread-185250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:15:25.505 [INFO] [Thread-185250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:15:25.516 [DEBUG] [Thread-185250] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:15:25.516 [DEBUG] [Thread-185250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:15:25.516 [DEBUG] [Thread-185250] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:15:25.516 [DEBUG] [Thread-185250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:15:25.516 [DEBUG] [Thread-185250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:15:25.516 [DEBUG] [Thread-185250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:15:25.516 [DEBUG] [Thread-185250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:15:25.516 [DEBUG] [Thread-185250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:15:25.516 [DEBUG] [Thread-185250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:15:25.516 [DEBUG] [Thread-185250] [transport.py] [_log()] client lang: <none>
2026-02-14T12:15:25.517 [DEBUG] [Thread-185250] [transport.py] [_log()] server lang: <none>
2026-02-14T12:15:25.517 [DEBUG] [Thread-185250] [transport.py] [_log()] kex follows: False
2026-02-14T12:15:25.517 [DEBUG] [Thread-185250] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:15:25.517 [DEBUG] [Thread-185250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:15:25.517 [DEBUG] [Thread-185250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:15:25.517 [DEBUG] [Thread-185250] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:15:25.517 [DEBUG] [Thread-185250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:15:25.517 [DEBUG] [Thread-185250] [transport.py] [_log()] Compression: none
2026-02-14T12:15:25.517 [DEBUG] [Thread-185250] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:15:25.573 [DEBUG] [Thread-185250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:15:25.573 [DEBUG] [Thread-185250] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:15:25.574 [DEBUG] [Thread-185250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:15:25.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:15:25.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:15:25.628 [DEBUG] [Thread-185250] [transport.py] [_log()] userauth is OK
2026-02-14T12:15:25.629 [DEBUG] [Thread-185250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:15:25.629 [DEBUG] [Thread-185250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:15:25.629 [DEBUG] [Thread-185250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:15:25.629 [DEBUG] [Thread-185250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:15:25.656 [INFO] [Thread-185250] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:15:25.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T12:15:25.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:15:26.496 [DEBUG] [Thread-185250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:15:26.496 [DEBUG] [Thread-185250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:15:26.544 [DEBUG] [Thread-185250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:15:26.545 [DEBUG] [Thread-185250] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:15:26.554 [DEBUG] [Thread-185250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:15:26.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:15:26.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-14T12:15:26.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-14T12:15:26.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:15:26.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:15:26.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:15:26.590 [DEBUG] [Thread-185250] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:15:38.519 [DEBUG] [Thread-185252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:15:53.569 [DEBUG] [Thread-185253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:15:56.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:15:56.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:15:56.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-14T12:15:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 15, 36), 12.36, 43.39, 0.0, 31.05, 15.23, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:15:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:15:36
2026-02-14T12:15:58.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:15:58.988 [DEBUG] [Thread-185254] [transport.py] [_log()] starting thread (client mode): 0xa2d54850
2026-02-14T12:15:58.989 [DEBUG] [Thread-185254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:15:59.011 [DEBUG] [Thread-185254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:15:59.011 [INFO] [Thread-185254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:15:59.014 [DEBUG] [Thread-185254] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:15:59.015 [DEBUG] [Thread-185254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:15:59.015 [DEBUG] [Thread-185254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:15:59.015 [DEBUG] [Thread-185254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:15:59.015 [DEBUG] [Thread-185254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:15:59.015 [DEBUG] [Thread-185254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:15:59.015 [DEBUG] [Thread-185254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:15:59.015 [DEBUG] [Thread-185254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:15:59.015 [DEBUG] [Thread-185254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:15:59.015 [DEBUG] [Thread-185254] [transport.py] [_log()] client lang: <none>
2026-02-14T12:15:59.015 [DEBUG] [Thread-185254] [transport.py] [_log()] server lang: <none>
2026-02-14T12:15:59.015 [DEBUG] [Thread-185254] [transport.py] [_log()] kex follows: False
2026-02-14T12:15:59.015 [DEBUG] [Thread-185254] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:15:59.015 [DEBUG] [Thread-185254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:15:59.015 [DEBUG] [Thread-185254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:15:59.015 [DEBUG] [Thread-185254] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:15:59.015 [DEBUG] [Thread-185254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:15:59.015 [DEBUG] [Thread-185254] [transport.py] [_log()] Compression: none
2026-02-14T12:15:59.015 [DEBUG] [Thread-185254] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:15:59.031 [DEBUG] [Thread-185254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:15:59.032 [DEBUG] [Thread-185254] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:15:59.032 [DEBUG] [Thread-185254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:15:59.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:15:59.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:15:59.034 [DEBUG] [Thread-185254] [transport.py] [_log()] userauth is OK
2026-02-14T12:15:59.034 [DEBUG] [Thread-185254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:15:59.035 [DEBUG] [Thread-185254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:15:59.035 [DEBUG] [Thread-185254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:15:59.035 [DEBUG] [Thread-185254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:15:59.060 [INFO] [Thread-185254] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:15:59.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:15:59.663 [DEBUG] [Thread-185254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:15:59.663 [DEBUG] [Thread-185254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:15:59.664 [DEBUG] [Thread-185254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:15:59.704 [DEBUG] [Thread-185254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:15:59.705 [DEBUG] [Thread-185254] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:15:59.708 [DEBUG] [Thread-185254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:15:59.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:15:59.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:15:59.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:15:59.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:15:59.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:15:59.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:15:59.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:15:59.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:15:59.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:15:59.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.427194 -999.00  +14.10  32.41     50   +4.00 1 1 2 1 1   888    0 10.86 59.91 ----- 27.2 32.4 174.0 37.0 20.2 -25.6 18.8 -24.6 18.9 -24.7 19.9 -25.1
2026-02-14T12:15:59.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:15:59.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:15:59.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.427194
2026-02-14T12:15:59.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:15:59.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:15:59.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:15:59.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:15:59.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:15:59.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:15:36', tmtdew=12.36, humidity=43.39, cloud=0.0, wind=31.05, temperature=15.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:15:09.562', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:15:59.736 [DEBUG] [Thread-185254] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:15:59.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-14T12:15:59.832 [DEBUG] [Thread-185257] [transport.py] [_log()] starting thread (client mode): 0xa2d201c0
2026-02-14T12:15:59.833 [DEBUG] [Thread-185257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:15:59.848 [DEBUG] [Thread-185257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:15:59.848 [INFO] [Thread-185257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:15:59.855 [DEBUG] [Thread-185257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:15:59.856 [DEBUG] [Thread-185257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:15:59.856 [DEBUG] [Thread-185257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:15:59.856 [DEBUG] [Thread-185257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:15:59.856 [DEBUG] [Thread-185257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:15:59.856 [DEBUG] [Thread-185257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:15:59.856 [DEBUG] [Thread-185257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:15:59.857 [DEBUG] [Thread-185257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:15:59.857 [DEBUG] [Thread-185257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:15:59.857 [DEBUG] [Thread-185257] [transport.py] [_log()] client lang: <none>
2026-02-14T12:15:59.857 [DEBUG] [Thread-185257] [transport.py] [_log()] server lang: <none>
2026-02-14T12:15:59.857 [DEBUG] [Thread-185257] [transport.py] [_log()] kex follows: False
2026-02-14T12:15:59.857 [DEBUG] [Thread-185257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:15:59.857 [DEBUG] [Thread-185257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:15:59.857 [DEBUG] [Thread-185257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:15:59.858 [DEBUG] [Thread-185257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:15:59.858 [DEBUG] [Thread-185257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:15:59.858 [DEBUG] [Thread-185257] [transport.py] [_log()] Compression: none
2026-02-14T12:15:59.858 [DEBUG] [Thread-185257] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:15:59.915 [DEBUG] [Thread-185257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:15:59.915 [DEBUG] [Thread-185257] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:15:59.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:15:59.917 [DEBUG] [Thread-185257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:15:59.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:15:59.973 [DEBUG] [Thread-185257] [transport.py] [_log()] userauth is OK
2026-02-14T12:15:59.973 [DEBUG] [Thread-185257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:15:59.974 [DEBUG] [Thread-185257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:15:59.974 [DEBUG] [Thread-185257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:15:59.974 [DEBUG] [Thread-185257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:15:59.996 [INFO] [Thread-185257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:15:59.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-14T12:15:59.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:16:00.790 [DEBUG] [Thread-185257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:16:00.790 [DEBUG] [Thread-185257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:16:00.838 [DEBUG] [Thread-185257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:16:00.839 [DEBUG] [Thread-185257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:16:00.848 [DEBUG] [Thread-185257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:16:00.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:16:00.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:16:00.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-14T12:16:00.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:16:00.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:16:00.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:16:00.888 [DEBUG] [Thread-185257] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:16:08.608 [DEBUG] [Thread-185259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:16:19.666 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:16:19.667 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:16:21.085 [DEBUG] [Thread-185260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:16:23.667 [DEBUG] [Thread-185261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:16:30.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:16:30.909 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:16:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:16:32.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 16, 11), 11.81, 44.95, 0.0, 31.2, 14.48, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:16:32.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:16:11
2026-02-14T12:16:33.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:16:33.352 [DEBUG] [Thread-185262] [transport.py] [_log()] starting thread (client mode): 0xa57587c0
2026-02-14T12:16:33.352 [DEBUG] [Thread-185262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:16:33.372 [DEBUG] [Thread-185262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:16:33.372 [INFO] [Thread-185262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:16:33.375 [DEBUG] [Thread-185262] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:16:33.375 [DEBUG] [Thread-185262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:16:33.375 [DEBUG] [Thread-185262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:16:33.376 [DEBUG] [Thread-185262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:16:33.376 [DEBUG] [Thread-185262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:16:33.376 [DEBUG] [Thread-185262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:16:33.376 [DEBUG] [Thread-185262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:16:33.376 [DEBUG] [Thread-185262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:16:33.376 [DEBUG] [Thread-185262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:16:33.376 [DEBUG] [Thread-185262] [transport.py] [_log()] client lang: <none>
2026-02-14T12:16:33.376 [DEBUG] [Thread-185262] [transport.py] [_log()] server lang: <none>
2026-02-14T12:16:33.376 [DEBUG] [Thread-185262] [transport.py] [_log()] kex follows: False
2026-02-14T12:16:33.376 [DEBUG] [Thread-185262] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:16:33.376 [DEBUG] [Thread-185262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:16:33.376 [DEBUG] [Thread-185262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:16:33.376 [DEBUG] [Thread-185262] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:16:33.376 [DEBUG] [Thread-185262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:16:33.376 [DEBUG] [Thread-185262] [transport.py] [_log()] Compression: none
2026-02-14T12:16:33.376 [DEBUG] [Thread-185262] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:16:33.387 [DEBUG] [Thread-185262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:16:33.387 [DEBUG] [Thread-185262] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:16:33.388 [DEBUG] [Thread-185262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:16:33.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:16:33.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:16:33.391 [DEBUG] [Thread-185262] [transport.py] [_log()] userauth is OK
2026-02-14T12:16:33.391 [DEBUG] [Thread-185262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:16:33.391 [DEBUG] [Thread-185262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:16:33.391 [DEBUG] [Thread-185262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:16:33.392 [DEBUG] [Thread-185262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:16:33.411 [INFO] [Thread-185262] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:16:33.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:16:34.143 [DEBUG] [Thread-185262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:16:34.144 [DEBUG] [Thread-185262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:16:34.144 [DEBUG] [Thread-185262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:16:34.184 [DEBUG] [Thread-185262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:16:34.185 [DEBUG] [Thread-185262] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:16:34.188 [DEBUG] [Thread-185262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:16:34.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:16:34.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:16:34.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:16:34.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:16:34.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:16:34.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:16:34.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:16:34.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:16:34.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:16:34.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.427889 -999.00  +13.80  24.05     51   +4.10 1 1 1 1 1   888    0 11.12 70.13 ----- 27.4 24.1 159.8 37.2 20.2 -26.2 18.9 -25.4 18.7 -24.5 19.9 -25.0
2026-02-14T12:16:34.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:16:34.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:16:34.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.427889
2026-02-14T12:16:34.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:16:34.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:16:34.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:16:34.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:16:34.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:16:34.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:16:11', tmtdew=11.81, humidity=44.95, cloud=0.0, wind=31.2, temperature=14.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:16:09.610', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:16:34.217 [DEBUG] [Thread-185262] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:16:34.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-14T12:16:34.314 [DEBUG] [Thread-185265] [transport.py] [_log()] starting thread (client mode): 0xa5759c00
2026-02-14T12:16:34.314 [DEBUG] [Thread-185265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:16:34.329 [DEBUG] [Thread-185265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:16:34.329 [INFO] [Thread-185265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:16:34.339 [DEBUG] [Thread-185265] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:16:34.340 [DEBUG] [Thread-185265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:16:34.340 [DEBUG] [Thread-185265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:16:34.340 [DEBUG] [Thread-185265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:16:34.340 [DEBUG] [Thread-185265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:16:34.340 [DEBUG] [Thread-185265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:16:34.340 [DEBUG] [Thread-185265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:16:34.340 [DEBUG] [Thread-185265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:16:34.341 [DEBUG] [Thread-185265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:16:34.341 [DEBUG] [Thread-185265] [transport.py] [_log()] client lang: <none>
2026-02-14T12:16:34.341 [DEBUG] [Thread-185265] [transport.py] [_log()] server lang: <none>
2026-02-14T12:16:34.341 [DEBUG] [Thread-185265] [transport.py] [_log()] kex follows: False
2026-02-14T12:16:34.341 [DEBUG] [Thread-185265] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:16:34.341 [DEBUG] [Thread-185265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:16:34.341 [DEBUG] [Thread-185265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:16:34.341 [DEBUG] [Thread-185265] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:16:34.341 [DEBUG] [Thread-185265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:16:34.341 [DEBUG] [Thread-185265] [transport.py] [_log()] Compression: none
2026-02-14T12:16:34.341 [DEBUG] [Thread-185265] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:16:34.401 [DEBUG] [Thread-185265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:16:34.402 [DEBUG] [Thread-185265] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:16:34.402 [DEBUG] [Thread-185265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:16:34.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:16:34.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:16:34.458 [DEBUG] [Thread-185265] [transport.py] [_log()] userauth is OK
2026-02-14T12:16:34.458 [DEBUG] [Thread-185265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:16:34.459 [DEBUG] [Thread-185265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:16:34.459 [DEBUG] [Thread-185265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:16:34.459 [DEBUG] [Thread-185265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:16:34.479 [INFO] [Thread-185265] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:16:34.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-14T12:16:34.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:16:35.314 [DEBUG] [Thread-185265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:16:35.315 [DEBUG] [Thread-185265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:16:35.363 [DEBUG] [Thread-185265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:16:35.363 [DEBUG] [Thread-185265] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:16:35.372 [DEBUG] [Thread-185265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:16:35.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:16:35.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-14T12:16:35.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-14T12:16:35.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:16:35.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:16:35.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:16:35.413 [DEBUG] [Thread-185265] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:16:38.703 [DEBUG] [Thread-185267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:16:53.765 [DEBUG] [Thread-185268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:17:05.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:17:05.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:17:05.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-14T12:17:07.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 16, 47), 11.51, 45.93, 0.0, 27.74, 14.15, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:17:07.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:16:47
2026-02-14T12:17:07.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:17:07.881 [DEBUG] [Thread-185269] [transport.py] [_log()] starting thread (client mode): 0xa2d56cb0
2026-02-14T12:17:07.881 [DEBUG] [Thread-185269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:17:07.898 [DEBUG] [Thread-185269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:17:07.898 [INFO] [Thread-185269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:17:07.901 [DEBUG] [Thread-185269] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:17:07.901 [DEBUG] [Thread-185269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:17:07.901 [DEBUG] [Thread-185269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:17:07.901 [DEBUG] [Thread-185269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:17:07.901 [DEBUG] [Thread-185269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:17:07.901 [DEBUG] [Thread-185269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:17:07.901 [DEBUG] [Thread-185269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:17:07.901 [DEBUG] [Thread-185269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:17:07.901 [DEBUG] [Thread-185269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:17:07.901 [DEBUG] [Thread-185269] [transport.py] [_log()] client lang: <none>
2026-02-14T12:17:07.901 [DEBUG] [Thread-185269] [transport.py] [_log()] server lang: <none>
2026-02-14T12:17:07.901 [DEBUG] [Thread-185269] [transport.py] [_log()] kex follows: False
2026-02-14T12:17:07.901 [DEBUG] [Thread-185269] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:17:07.901 [DEBUG] [Thread-185269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:17:07.901 [DEBUG] [Thread-185269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:17:07.901 [DEBUG] [Thread-185269] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:17:07.901 [DEBUG] [Thread-185269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:17:07.901 [DEBUG] [Thread-185269] [transport.py] [_log()] Compression: none
2026-02-14T12:17:07.901 [DEBUG] [Thread-185269] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:17:07.920 [DEBUG] [Thread-185269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:17:07.921 [DEBUG] [Thread-185269] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:17:07.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:17:07.922 [DEBUG] [Thread-185269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:17:07.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:17:07.924 [DEBUG] [Thread-185269] [transport.py] [_log()] userauth is OK
2026-02-14T12:17:07.924 [DEBUG] [Thread-185269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:17:07.924 [DEBUG] [Thread-185269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:17:07.924 [DEBUG] [Thread-185269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:17:07.924 [DEBUG] [Thread-185269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:17:07.951 [INFO] [Thread-185269] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:17:07.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:17:08.540 [DEBUG] [Thread-185269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:17:08.541 [DEBUG] [Thread-185269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:17:08.541 [DEBUG] [Thread-185269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:17:08.582 [DEBUG] [Thread-185269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:17:08.582 [DEBUG] [Thread-185269] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:17:08.584 [DEBUG] [Thread-185269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:17:08.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:17:08.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:17:08.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:17:08.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:17:08.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:17:08.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:17:08.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:17:08.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:17:08.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:17:08.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.428236 -999.00  +13.80  21.17     52   +4.10 1 1 1 1 1   888    0 10.83 68.00 ----- 25.1 21.2 174.4 27.2 20.3 -24.5 19.0 -25.0 18.8 -23.3 20.0 -24.2
2026-02-14T12:17:08.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:17:08.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:17:08.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.428236
2026-02-14T12:17:08.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:17:08.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:17:08.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:17:08.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:17:08.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:17:08.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:16:47', tmtdew=11.51, humidity=45.93, cloud=0.0, wind=27.74, temperature=14.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:16:39.590', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:17:08.612 [DEBUG] [Thread-185269] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:17:08.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:17:08.707 [DEBUG] [Thread-185272] [transport.py] [_log()] starting thread (client mode): 0xa2d110f0
2026-02-14T12:17:08.707 [DEBUG] [Thread-185272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:17:08.722 [DEBUG] [Thread-185272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:17:08.722 [INFO] [Thread-185272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:17:08.730 [DEBUG] [Thread-185272] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:17:08.730 [DEBUG] [Thread-185272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:17:08.730 [DEBUG] [Thread-185272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:17:08.730 [DEBUG] [Thread-185272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:17:08.730 [DEBUG] [Thread-185272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:17:08.730 [DEBUG] [Thread-185272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:17:08.731 [DEBUG] [Thread-185272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:17:08.731 [DEBUG] [Thread-185272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:17:08.731 [DEBUG] [Thread-185272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:17:08.731 [DEBUG] [Thread-185272] [transport.py] [_log()] client lang: <none>
2026-02-14T12:17:08.731 [DEBUG] [Thread-185272] [transport.py] [_log()] server lang: <none>
2026-02-14T12:17:08.731 [DEBUG] [Thread-185272] [transport.py] [_log()] kex follows: False
2026-02-14T12:17:08.731 [DEBUG] [Thread-185272] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:17:08.731 [DEBUG] [Thread-185272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:17:08.731 [DEBUG] [Thread-185272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:17:08.731 [DEBUG] [Thread-185272] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:17:08.731 [DEBUG] [Thread-185272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:17:08.731 [DEBUG] [Thread-185272] [transport.py] [_log()] Compression: none
2026-02-14T12:17:08.731 [DEBUG] [Thread-185272] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:17:08.788 [DEBUG] [Thread-185272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:17:08.789 [DEBUG] [Thread-185272] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:17:08.789 [DEBUG] [Thread-185272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:17:08.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:17:08.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:17:08.810 [DEBUG] [Thread-185274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:17:08.845 [DEBUG] [Thread-185272] [transport.py] [_log()] userauth is OK
2026-02-14T12:17:08.845 [DEBUG] [Thread-185272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:17:08.845 [DEBUG] [Thread-185272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:17:08.845 [DEBUG] [Thread-185272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:17:08.845 [DEBUG] [Thread-185272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:17:08.864 [INFO] [Thread-185272] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:17:08.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-14T12:17:08.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:17:09.709 [DEBUG] [Thread-185272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:17:09.709 [DEBUG] [Thread-185272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:17:09.761 [DEBUG] [Thread-185272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:17:09.762 [DEBUG] [Thread-185272] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:17:09.771 [DEBUG] [Thread-185272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:17:09.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:17:09.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-14T12:17:09.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-14T12:17:09.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:17:09.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:17:09.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:17:09.808 [DEBUG] [Thread-185272] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:17:19.808 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:17:19.809 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:17:21.127 [DEBUG] [Thread-185275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:17:23.860 [DEBUG] [Thread-185276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:17:38.896 [DEBUG] [Thread-185277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:17:39.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:17:39.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:17:39.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-14T12:17:41.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 17, 23), 11.44, 46.11, 0.0, 29.55, 14.1, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:17:41.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:17:23
2026-02-14T12:17:42.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:17:42.349 [DEBUG] [Thread-185278] [transport.py] [_log()] starting thread (client mode): 0xa5759660
2026-02-14T12:17:42.349 [DEBUG] [Thread-185278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:17:42.371 [DEBUG] [Thread-185278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:17:42.371 [INFO] [Thread-185278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:17:42.373 [DEBUG] [Thread-185278] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:17:42.373 [DEBUG] [Thread-185278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:17:42.373 [DEBUG] [Thread-185278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:17:42.373 [DEBUG] [Thread-185278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:17:42.373 [DEBUG] [Thread-185278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:17:42.373 [DEBUG] [Thread-185278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:17:42.373 [DEBUG] [Thread-185278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:17:42.373 [DEBUG] [Thread-185278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:17:42.373 [DEBUG] [Thread-185278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:17:42.373 [DEBUG] [Thread-185278] [transport.py] [_log()] client lang: <none>
2026-02-14T12:17:42.373 [DEBUG] [Thread-185278] [transport.py] [_log()] server lang: <none>
2026-02-14T12:17:42.373 [DEBUG] [Thread-185278] [transport.py] [_log()] kex follows: False
2026-02-14T12:17:42.373 [DEBUG] [Thread-185278] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:17:42.373 [DEBUG] [Thread-185278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:17:42.373 [DEBUG] [Thread-185278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:17:42.373 [DEBUG] [Thread-185278] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:17:42.373 [DEBUG] [Thread-185278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:17:42.373 [DEBUG] [Thread-185278] [transport.py] [_log()] Compression: none
2026-02-14T12:17:42.373 [DEBUG] [Thread-185278] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:17:42.388 [DEBUG] [Thread-185278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:17:42.389 [DEBUG] [Thread-185278] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:17:42.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:17:42.389 [DEBUG] [Thread-185278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:17:42.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:17:42.391 [DEBUG] [Thread-185278] [transport.py] [_log()] userauth is OK
2026-02-14T12:17:42.392 [DEBUG] [Thread-185278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:17:42.392 [DEBUG] [Thread-185278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:17:42.392 [DEBUG] [Thread-185278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:17:42.392 [DEBUG] [Thread-185278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:17:42.410 [INFO] [Thread-185278] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:17:42.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:17:43.028 [DEBUG] [Thread-185278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:17:43.028 [DEBUG] [Thread-185278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:17:43.028 [DEBUG] [Thread-185278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:17:43.069 [DEBUG] [Thread-185278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:17:43.069 [DEBUG] [Thread-185278] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:17:43.072 [DEBUG] [Thread-185278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:17:43.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:17:43.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:17:43.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:17:43.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:17:43.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:17:43.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:17:43.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:17:43.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:17:43.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:17:43.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.428583 -999.00  +14.00  25.25     51   +4.10 1 1 1 1 1   888    0 11.02 67.75 ----- 27.9 25.2 169.8 31.6 20.2 -24.1 18.8 -23.0 18.9 -24.0 19.9 -23.6
2026-02-14T12:17:43.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:17:43.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:17:43.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.428583
2026-02-14T12:17:43.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:17:43.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:17:43.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:17:43.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:17:43.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:17:43.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:17:23', tmtdew=11.44, humidity=46.11, cloud=0.0, wind=29.55, temperature=14.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:17:09.571', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:17:43.092 [DEBUG] [Thread-185278] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:17:43.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-14T12:17:43.187 [DEBUG] [Thread-185281] [transport.py] [_log()] starting thread (client mode): 0xa57581c0
2026-02-14T12:17:43.187 [DEBUG] [Thread-185281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:17:43.200 [DEBUG] [Thread-185281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:17:43.200 [INFO] [Thread-185281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:17:43.208 [DEBUG] [Thread-185281] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:17:43.208 [DEBUG] [Thread-185281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:17:43.208 [DEBUG] [Thread-185281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:17:43.208 [DEBUG] [Thread-185281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:17:43.208 [DEBUG] [Thread-185281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:17:43.208 [DEBUG] [Thread-185281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:17:43.208 [DEBUG] [Thread-185281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:17:43.208 [DEBUG] [Thread-185281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:17:43.208 [DEBUG] [Thread-185281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:17:43.208 [DEBUG] [Thread-185281] [transport.py] [_log()] client lang: <none>
2026-02-14T12:17:43.208 [DEBUG] [Thread-185281] [transport.py] [_log()] server lang: <none>
2026-02-14T12:17:43.208 [DEBUG] [Thread-185281] [transport.py] [_log()] kex follows: False
2026-02-14T12:17:43.208 [DEBUG] [Thread-185281] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:17:43.208 [DEBUG] [Thread-185281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:17:43.208 [DEBUG] [Thread-185281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:17:43.208 [DEBUG] [Thread-185281] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:17:43.209 [DEBUG] [Thread-185281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:17:43.209 [DEBUG] [Thread-185281] [transport.py] [_log()] Compression: none
2026-02-14T12:17:43.209 [DEBUG] [Thread-185281] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:17:43.264 [DEBUG] [Thread-185281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:17:43.265 [DEBUG] [Thread-185281] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:17:43.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:17:43.266 [DEBUG] [Thread-185281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:17:43.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:17:43.321 [DEBUG] [Thread-185281] [transport.py] [_log()] userauth is OK
2026-02-14T12:17:43.322 [DEBUG] [Thread-185281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:17:43.322 [DEBUG] [Thread-185281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:17:43.322 [DEBUG] [Thread-185281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:17:43.322 [DEBUG] [Thread-185281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:17:43.340 [INFO] [Thread-185281] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:17:43.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T12:17:43.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:17:44.132 [DEBUG] [Thread-185281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:17:44.132 [DEBUG] [Thread-185281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:17:44.180 [DEBUG] [Thread-185281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:17:44.180 [DEBUG] [Thread-185281] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:17:44.189 [DEBUG] [Thread-185281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:17:44.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:17:44.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-14T12:17:44.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-14T12:17:44.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:17:44.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:17:44.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:17:44.228 [DEBUG] [Thread-185281] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:17:53.935 [DEBUG] [Thread-185283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:18:08.995 [DEBUG] [Thread-185284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:18:14.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:18:14.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:18:14.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-14T12:18:16.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 17, 58), 11.18, 46.66, 0.0, 31.85, 13.83, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:18:16.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:17:58
2026-02-14T12:18:16.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:18:16.579 [DEBUG] [Thread-185285] [transport.py] [_log()] starting thread (client mode): 0xa2d221d0
2026-02-14T12:18:16.579 [DEBUG] [Thread-185285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:18:16.599 [DEBUG] [Thread-185285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:18:16.599 [INFO] [Thread-185285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:18:16.602 [DEBUG] [Thread-185285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:18:16.603 [DEBUG] [Thread-185285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:18:16.603 [DEBUG] [Thread-185285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:18:16.603 [DEBUG] [Thread-185285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:18:16.603 [DEBUG] [Thread-185285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:18:16.603 [DEBUG] [Thread-185285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:18:16.603 [DEBUG] [Thread-185285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:18:16.603 [DEBUG] [Thread-185285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:18:16.603 [DEBUG] [Thread-185285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:18:16.603 [DEBUG] [Thread-185285] [transport.py] [_log()] client lang: <none>
2026-02-14T12:18:16.603 [DEBUG] [Thread-185285] [transport.py] [_log()] server lang: <none>
2026-02-14T12:18:16.604 [DEBUG] [Thread-185285] [transport.py] [_log()] kex follows: False
2026-02-14T12:18:16.604 [DEBUG] [Thread-185285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:18:16.604 [DEBUG] [Thread-185285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:18:16.604 [DEBUG] [Thread-185285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:18:16.604 [DEBUG] [Thread-185285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:18:16.604 [DEBUG] [Thread-185285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:18:16.604 [DEBUG] [Thread-185285] [transport.py] [_log()] Compression: none
2026-02-14T12:18:16.604 [DEBUG] [Thread-185285] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:18:16.623 [DEBUG] [Thread-185285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:18:16.624 [DEBUG] [Thread-185285] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:18:16.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:18:16.626 [DEBUG] [Thread-185285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:18:16.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:18:16.628 [DEBUG] [Thread-185285] [transport.py] [_log()] userauth is OK
2026-02-14T12:18:16.628 [DEBUG] [Thread-185285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:18:16.628 [DEBUG] [Thread-185285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:18:16.628 [DEBUG] [Thread-185285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:18:16.628 [DEBUG] [Thread-185285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:18:16.647 [INFO] [Thread-185285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:18:16.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:18:17.231 [DEBUG] [Thread-185285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:18:17.232 [DEBUG] [Thread-185285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:18:17.232 [DEBUG] [Thread-185285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:18:17.273 [DEBUG] [Thread-185285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:18:17.273 [DEBUG] [Thread-185285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:18:17.277 [DEBUG] [Thread-185285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:18:17.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:18:17.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:18:17.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:18:17.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:18:17.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:18:17.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:18:17.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:18:17.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:18:17.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:18:17.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.429277 -999.00  +13.70  27.29     52   +4.30 1 1 1 1 1   888    0 11.15 71.61 ----- 22.8 27.3 184.2 36.6 20.1 -27.8 18.4 -31.2 18.6 -24.0 19.8 -28.2
2026-02-14T12:18:17.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:18:17.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:18:17.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.429277
2026-02-14T12:18:17.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:18:17.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:18:17.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:18:17.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:18:17.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:18:17.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:17:58', tmtdew=11.18, humidity=46.66, cloud=0.0, wind=31.85, temperature=13.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:18:09.533', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:18:17.305 [DEBUG] [Thread-185285] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:18:17.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-14T12:18:17.400 [DEBUG] [Thread-185288] [transport.py] [_log()] starting thread (client mode): 0xa2d57ee0
2026-02-14T12:18:17.400 [DEBUG] [Thread-185288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:18:17.414 [DEBUG] [Thread-185288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:18:17.415 [INFO] [Thread-185288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:18:17.422 [DEBUG] [Thread-185288] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:18:17.422 [DEBUG] [Thread-185288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:18:17.422 [DEBUG] [Thread-185288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:18:17.422 [DEBUG] [Thread-185288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:18:17.422 [DEBUG] [Thread-185288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:18:17.422 [DEBUG] [Thread-185288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:18:17.422 [DEBUG] [Thread-185288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:18:17.422 [DEBUG] [Thread-185288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:18:17.422 [DEBUG] [Thread-185288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:18:17.423 [DEBUG] [Thread-185288] [transport.py] [_log()] client lang: <none>
2026-02-14T12:18:17.423 [DEBUG] [Thread-185288] [transport.py] [_log()] server lang: <none>
2026-02-14T12:18:17.423 [DEBUG] [Thread-185288] [transport.py] [_log()] kex follows: False
2026-02-14T12:18:17.423 [DEBUG] [Thread-185288] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:18:17.423 [DEBUG] [Thread-185288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:18:17.423 [DEBUG] [Thread-185288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:18:17.423 [DEBUG] [Thread-185288] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:18:17.423 [DEBUG] [Thread-185288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:18:17.423 [DEBUG] [Thread-185288] [transport.py] [_log()] Compression: none
2026-02-14T12:18:17.423 [DEBUG] [Thread-185288] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:18:17.481 [DEBUG] [Thread-185288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:18:17.481 [DEBUG] [Thread-185288] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:18:17.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:18:17.482 [DEBUG] [Thread-185288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:18:17.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:18:17.537 [DEBUG] [Thread-185288] [transport.py] [_log()] userauth is OK
2026-02-14T12:18:17.537 [DEBUG] [Thread-185288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:18:17.537 [DEBUG] [Thread-185288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:18:17.537 [DEBUG] [Thread-185288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:18:17.537 [DEBUG] [Thread-185288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:18:17.556 [INFO] [Thread-185288] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:18: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-14T12:18:17.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:18:18.424 [DEBUG] [Thread-185288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:18:18.424 [DEBUG] [Thread-185288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:18:18.473 [DEBUG] [Thread-185288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:18:18.473 [DEBUG] [Thread-185288] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:18:18.482 [DEBUG] [Thread-185288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:18:18.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:18:18.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:18: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-14T12:18:18.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:18:18.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:18:18.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:18:18.518 [DEBUG] [Thread-185288] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:18:19.949 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:18:19.950 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:18:21.160 [DEBUG] [Thread-185290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:18:24.029 [DEBUG] [Thread-185291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:18:39.079 [DEBUG] [Thread-185292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:18:48.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:18:48.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:18:48.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-14T12:18:50.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 18, 33), 11.78, 45.08, 0.0, 37.08, 14.8, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:18:50.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:18:33
2026-02-14T12:18:51.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:18:51.579 [DEBUG] [Thread-185293] [transport.py] [_log()] starting thread (client mode): 0xa575baf0
2026-02-14T12:18:51.580 [DEBUG] [Thread-185293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:18:51.598 [DEBUG] [Thread-185293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:18:51.598 [INFO] [Thread-185293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:18:51.600 [DEBUG] [Thread-185293] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:18:51.600 [DEBUG] [Thread-185293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:18:51.600 [DEBUG] [Thread-185293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:18:51.600 [DEBUG] [Thread-185293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:18:51.600 [DEBUG] [Thread-185293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:18:51.600 [DEBUG] [Thread-185293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:18:51.600 [DEBUG] [Thread-185293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:18:51.600 [DEBUG] [Thread-185293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:18:51.600 [DEBUG] [Thread-185293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:18:51.600 [DEBUG] [Thread-185293] [transport.py] [_log()] client lang: <none>
2026-02-14T12:18:51.600 [DEBUG] [Thread-185293] [transport.py] [_log()] server lang: <none>
2026-02-14T12:18:51.600 [DEBUG] [Thread-185293] [transport.py] [_log()] kex follows: False
2026-02-14T12:18:51.600 [DEBUG] [Thread-185293] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:18:51.601 [DEBUG] [Thread-185293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:18:51.601 [DEBUG] [Thread-185293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:18:51.601 [DEBUG] [Thread-185293] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:18:51.601 [DEBUG] [Thread-185293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:18:51.601 [DEBUG] [Thread-185293] [transport.py] [_log()] Compression: none
2026-02-14T12:18:51.601 [DEBUG] [Thread-185293] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:18:51.610 [DEBUG] [Thread-185293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:18:51.610 [DEBUG] [Thread-185293] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:18:51.611 [DEBUG] [Thread-185293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:18:51.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:18:51.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:18:51.612 [DEBUG] [Thread-185293] [transport.py] [_log()] userauth is OK
2026-02-14T12:18:51.612 [DEBUG] [Thread-185293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:18:51.612 [DEBUG] [Thread-185293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:18:51.612 [DEBUG] [Thread-185293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:18:51.612 [DEBUG] [Thread-185293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:18:51.626 [INFO] [Thread-185293] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:18:51.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:18:52.247 [DEBUG] [Thread-185293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:18:52.247 [DEBUG] [Thread-185293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:18:52.247 [DEBUG] [Thread-185293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:18:52.288 [DEBUG] [Thread-185293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:18:52.289 [DEBUG] [Thread-185293] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:18:52.295 [DEBUG] [Thread-185293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:18:52.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:18:52.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:18:52.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:18:52.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:18:52.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:18:52.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:18:52.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:18:52.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:18:52.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:18:52.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.429625 -999.00  +13.70  22.93     54   +4.50 1 1 1 1 1   888    0 11.00 67.31 ----- 28.7 22.9 173.6 32.7 20.1 -26.5 18.4 -28.9 18.7 -23.0 19.9 -27.0
2026-02-14T12:18:52.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:18:52.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:18:52.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.429625
2026-02-14T12:18:52.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:18:52.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:18:52.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:18:52.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:18:52.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:18:52.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:18:33', tmtdew=11.78, humidity=45.08, cloud=0.0, wind=37.08, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:18:39.600', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:18:52.329 [DEBUG] [Thread-185293] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:18:52.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-14T12:18:52.417 [DEBUG] [Thread-185296] [transport.py] [_log()] starting thread (client mode): 0xa2d12710
2026-02-14T12:18:52.418 [DEBUG] [Thread-185296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:18:52.432 [DEBUG] [Thread-185296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:18:52.432 [INFO] [Thread-185296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:18:52.439 [DEBUG] [Thread-185296] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:18:52.439 [DEBUG] [Thread-185296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:18:52.439 [DEBUG] [Thread-185296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:18:52.439 [DEBUG] [Thread-185296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:18:52.439 [DEBUG] [Thread-185296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:18:52.439 [DEBUG] [Thread-185296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:18:52.439 [DEBUG] [Thread-185296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:18:52.439 [DEBUG] [Thread-185296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:18:52.440 [DEBUG] [Thread-185296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:18:52.440 [DEBUG] [Thread-185296] [transport.py] [_log()] client lang: <none>
2026-02-14T12:18:52.440 [DEBUG] [Thread-185296] [transport.py] [_log()] server lang: <none>
2026-02-14T12:18:52.440 [DEBUG] [Thread-185296] [transport.py] [_log()] kex follows: False
2026-02-14T12:18:52.440 [DEBUG] [Thread-185296] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:18:52.440 [DEBUG] [Thread-185296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:18:52.440 [DEBUG] [Thread-185296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:18:52.440 [DEBUG] [Thread-185296] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:18:52.440 [DEBUG] [Thread-185296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:18:52.440 [DEBUG] [Thread-185296] [transport.py] [_log()] Compression: none
2026-02-14T12:18:52.440 [DEBUG] [Thread-185296] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:18:52.495 [DEBUG] [Thread-185296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:18:52.495 [DEBUG] [Thread-185296] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:18:52.495 [DEBUG] [Thread-185296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:18:52.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:18:52.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:18:52.552 [DEBUG] [Thread-185296] [transport.py] [_log()] userauth is OK
2026-02-14T12:18:52.552 [DEBUG] [Thread-185296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:18:52.552 [DEBUG] [Thread-185296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:18:52.552 [DEBUG] [Thread-185296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:18:52.552 [DEBUG] [Thread-185296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:18:52.567 [INFO] [Thread-185296] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:18:52.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T12:18:52.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:18:53.392 [DEBUG] [Thread-185296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:18:53.392 [DEBUG] [Thread-185296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:18:53.440 [DEBUG] [Thread-185296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:18:53.441 [DEBUG] [Thread-185296] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:18:53.450 [DEBUG] [Thread-185296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:18:53.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:18:53.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:18:53.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:18:53.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:18:53.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:18:53.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:18:53.486 [DEBUG] [Thread-185296] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:18:54.113 [DEBUG] [Thread-185298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:19:09.163 [DEBUG] [Thread-185299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:19:20.100 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:19:20.101 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:19:21.204 [DEBUG] [Thread-185300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:19:23.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:19:23.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:19:23.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-14T12:19:24.202 [DEBUG] [Thread-185301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:19:25.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 19, 10), 10.63, 48.52, 0.0, 32.87, 13.47, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:19:25.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:19:10
2026-02-14T12:19:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:19:26.107 [DEBUG] [Thread-185302] [transport.py] [_log()] starting thread (client mode): 0xa2d235e0
2026-02-14T12:19:26.107 [DEBUG] [Thread-185302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:19:26.123 [DEBUG] [Thread-185302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:19:26.124 [INFO] [Thread-185302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:19:26.125 [DEBUG] [Thread-185302] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:19:26.125 [DEBUG] [Thread-185302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:19:26.125 [DEBUG] [Thread-185302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:19:26.125 [DEBUG] [Thread-185302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:19:26.125 [DEBUG] [Thread-185302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:19:26.125 [DEBUG] [Thread-185302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:19:26.125 [DEBUG] [Thread-185302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:19:26.125 [DEBUG] [Thread-185302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:19:26.125 [DEBUG] [Thread-185302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:19:26.125 [DEBUG] [Thread-185302] [transport.py] [_log()] client lang: <none>
2026-02-14T12:19:26.125 [DEBUG] [Thread-185302] [transport.py] [_log()] server lang: <none>
2026-02-14T12:19:26.125 [DEBUG] [Thread-185302] [transport.py] [_log()] kex follows: False
2026-02-14T12:19:26.125 [DEBUG] [Thread-185302] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:19:26.125 [DEBUG] [Thread-185302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:19:26.125 [DEBUG] [Thread-185302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:19:26.125 [DEBUG] [Thread-185302] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:19:26.125 [DEBUG] [Thread-185302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:19:26.125 [DEBUG] [Thread-185302] [transport.py] [_log()] Compression: none
2026-02-14T12:19:26.125 [DEBUG] [Thread-185302] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:19:26.134 [DEBUG] [Thread-185302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:19:26.134 [DEBUG] [Thread-185302] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:19:26.135 [DEBUG] [Thread-185302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:19:26.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:19:26.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:19:26.136 [DEBUG] [Thread-185302] [transport.py] [_log()] userauth is OK
2026-02-14T12:19:26.136 [DEBUG] [Thread-185302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:19:26.136 [DEBUG] [Thread-185302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:19:26.137 [DEBUG] [Thread-185302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:19:26.137 [DEBUG] [Thread-185302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:19:26.159 [INFO] [Thread-185302] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:19:26.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:19:26.811 [DEBUG] [Thread-185302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:19:26.812 [DEBUG] [Thread-185302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:19:26.812 [DEBUG] [Thread-185302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:19:26.853 [DEBUG] [Thread-185302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:19:26.853 [DEBUG] [Thread-185302] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:19:26.856 [DEBUG] [Thread-185302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:19:26.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:19:26.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:19:26.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:19:26.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:19:26.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:19:26.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:19:26.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:19:26.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:19:26.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:19:26.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.429972 -999.00  +13.60  23.90     54   +4.50 1 2 1 1 1   888    0 10.81 66.63 ----- 24.9 23.9 170.6 33.7 20.2 -24.7 18.8 -22.6 18.8 -22.4 19.9 -24.4
2026-02-14T12:19:26.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:19:26.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:19:26.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.429972
2026-02-14T12:19:26.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:19:26.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:19:26.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:19:26.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:19:26.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T12:19:26.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:19:10', tmtdew=10.63, humidity=48.52, cloud=0.0, wind=32.87, temperature=13.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:19:09.581', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:19:26.883 [DEBUG] [Thread-185302] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:19:26.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-14T12:19:26.989 [DEBUG] [Thread-185305] [transport.py] [_log()] starting thread (client mode): 0xa2dc13c0
2026-02-14T12:19:26.989 [DEBUG] [Thread-185305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:19:27.006 [DEBUG] [Thread-185305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:19:27.006 [INFO] [Thread-185305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:19:27.014 [DEBUG] [Thread-185305] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:19:27.014 [DEBUG] [Thread-185305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:19:27.014 [DEBUG] [Thread-185305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:19:27.014 [DEBUG] [Thread-185305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:19:27.014 [DEBUG] [Thread-185305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:19:27.014 [DEBUG] [Thread-185305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:19:27.014 [DEBUG] [Thread-185305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:19:27.014 [DEBUG] [Thread-185305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:19:27.014 [DEBUG] [Thread-185305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:19:27.014 [DEBUG] [Thread-185305] [transport.py] [_log()] client lang: <none>
2026-02-14T12:19:27.014 [DEBUG] [Thread-185305] [transport.py] [_log()] server lang: <none>
2026-02-14T12:19:27.014 [DEBUG] [Thread-185305] [transport.py] [_log()] kex follows: False
2026-02-14T12:19:27.015 [DEBUG] [Thread-185305] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:19:27.015 [DEBUG] [Thread-185305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:19:27.015 [DEBUG] [Thread-185305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:19:27.015 [DEBUG] [Thread-185305] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:19:27.015 [DEBUG] [Thread-185305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:19:27.015 [DEBUG] [Thread-185305] [transport.py] [_log()] Compression: none
2026-02-14T12:19:27.015 [DEBUG] [Thread-185305] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:19:27.073 [DEBUG] [Thread-185305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:19:27.074 [DEBUG] [Thread-185305] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:19:27.075 [DEBUG] [Thread-185305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:19:27.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:19:27.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:19:27.133 [DEBUG] [Thread-185305] [transport.py] [_log()] userauth is OK
2026-02-14T12:19:27.134 [DEBUG] [Thread-185305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:19:27.134 [DEBUG] [Thread-185305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:19:27.134 [DEBUG] [Thread-185305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:19:27.134 [DEBUG] [Thread-185305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:19:27.153 [INFO] [Thread-185305] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:19:27.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-14T12:19:27.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:19:28.010 [DEBUG] [Thread-185305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:19:28.010 [DEBUG] [Thread-185305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:19:28.058 [DEBUG] [Thread-185305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:19:28.059 [DEBUG] [Thread-185305] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:19:28.068 [DEBUG] [Thread-185305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:19:28.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:19:28.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-14T12:19:28.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:19:28.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:19:28.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:19:28.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:19:28.106 [DEBUG] [Thread-185305] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:19:39.240 [DEBUG] [Thread-185307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:19:54.301 [DEBUG] [Thread-185308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:19:58.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:19:58.128 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:19:58.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:20:00.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 19, 45), 10.76, 48.27, 0.0, 31.2, 13.95, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:20:00.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:19:45
2026-02-14T12:20:00.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:20:00.602 [DEBUG] [Thread-185309] [transport.py] [_log()] starting thread (client mode): 0xa2d57bb0
2026-02-14T12:20:00.603 [DEBUG] [Thread-185309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:20:00.624 [DEBUG] [Thread-185309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:20:00.624 [INFO] [Thread-185309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:20:00.627 [DEBUG] [Thread-185309] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:20:00.628 [DEBUG] [Thread-185309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:20:00.628 [DEBUG] [Thread-185309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:20:00.628 [DEBUG] [Thread-185309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:20:00.628 [DEBUG] [Thread-185309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:20:00.628 [DEBUG] [Thread-185309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:20:00.628 [DEBUG] [Thread-185309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:20:00.628 [DEBUG] [Thread-185309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:20:00.628 [DEBUG] [Thread-185309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:20:00.628 [DEBUG] [Thread-185309] [transport.py] [_log()] client lang: <none>
2026-02-14T12:20:00.628 [DEBUG] [Thread-185309] [transport.py] [_log()] server lang: <none>
2026-02-14T12:20:00.628 [DEBUG] [Thread-185309] [transport.py] [_log()] kex follows: False
2026-02-14T12:20:00.628 [DEBUG] [Thread-185309] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:20:00.628 [DEBUG] [Thread-185309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:20:00.628 [DEBUG] [Thread-185309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:20:00.628 [DEBUG] [Thread-185309] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:20:00.628 [DEBUG] [Thread-185309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:20:00.628 [DEBUG] [Thread-185309] [transport.py] [_log()] Compression: none
2026-02-14T12:20:00.628 [DEBUG] [Thread-185309] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:20:00.646 [DEBUG] [Thread-185309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:20:00.647 [DEBUG] [Thread-185309] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:20:00.647 [DEBUG] [Thread-185309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:20:00.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:20:00.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:20:00.649 [DEBUG] [Thread-185309] [transport.py] [_log()] userauth is OK
2026-02-14T12:20:00.650 [DEBUG] [Thread-185309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:20:00.650 [DEBUG] [Thread-185309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:20:00.650 [DEBUG] [Thread-185309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:20:00.650 [DEBUG] [Thread-185309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:20:00.682 [INFO] [Thread-185309] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:20:00.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:20:01.355 [DEBUG] [Thread-185309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:20:01.355 [DEBUG] [Thread-185309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:20:01.355 [DEBUG] [Thread-185309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:20:01.397 [DEBUG] [Thread-185309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:20:01.397 [DEBUG] [Thread-185309] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:20:01.400 [DEBUG] [Thread-185309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:20:01.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:20:01.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:20:01.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:20:01.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:20:01.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:20:01.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:20:01.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:20:01.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:20:01.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:20:01.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.430319 -999.00  +13.50  30.03     54   +4.60 1 1 2 1 1   888    0 10.83 62.06 ----- 25.6 30.0 161.8 34.5 20.1 -25.9 18.9 -23.7 18.7 -22.5 19.9 -25.2
2026-02-14T12:20:01.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:20:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:20:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.430319
2026-02-14T12:20:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:20:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:20:01.423 [DEBUG] [Thread-185309] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:20:01.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:20:01.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:20:01.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:20:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:19:45', tmtdew=10.76, humidity=48.27, cloud=0.0, wind=31.2, temperature=13.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:19:39.562', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:20: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-14T12:20:01.526 [DEBUG] [Thread-185312] [transport.py] [_log()] starting thread (client mode): 0xa2ddf3a0
2026-02-14T12:20:01.526 [DEBUG] [Thread-185312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:20:01.540 [DEBUG] [Thread-185312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:20:01.540 [INFO] [Thread-185312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:20:01.547 [DEBUG] [Thread-185312] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:20:01.547 [DEBUG] [Thread-185312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:20:01.547 [DEBUG] [Thread-185312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:20:01.547 [DEBUG] [Thread-185312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:20:01.547 [DEBUG] [Thread-185312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:20:01.547 [DEBUG] [Thread-185312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:20:01.547 [DEBUG] [Thread-185312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:20:01.547 [DEBUG] [Thread-185312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:20:01.548 [DEBUG] [Thread-185312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:20:01.548 [DEBUG] [Thread-185312] [transport.py] [_log()] client lang: <none>
2026-02-14T12:20:01.548 [DEBUG] [Thread-185312] [transport.py] [_log()] server lang: <none>
2026-02-14T12:20:01.548 [DEBUG] [Thread-185312] [transport.py] [_log()] kex follows: False
2026-02-14T12:20:01.548 [DEBUG] [Thread-185312] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:20:01.548 [DEBUG] [Thread-185312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:20:01.548 [DEBUG] [Thread-185312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:20:01.548 [DEBUG] [Thread-185312] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:20:01.548 [DEBUG] [Thread-185312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:20:01.548 [DEBUG] [Thread-185312] [transport.py] [_log()] Compression: none
2026-02-14T12:20:01.548 [DEBUG] [Thread-185312] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:20:01.605 [DEBUG] [Thread-185312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:20:01.605 [DEBUG] [Thread-185312] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:20:01.606 [DEBUG] [Thread-185312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:20:01.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:20:01.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:20:01.661 [DEBUG] [Thread-185312] [transport.py] [_log()] userauth is OK
2026-02-14T12:20:01.661 [DEBUG] [Thread-185312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:20:01.661 [DEBUG] [Thread-185312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:20:01.661 [DEBUG] [Thread-185312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:20:01.661 [DEBUG] [Thread-185312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:20:01.675 [INFO] [Thread-185312] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:20:01.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-14T12:20:01.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:20:02.516 [DEBUG] [Thread-185312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:20:02.516 [DEBUG] [Thread-185312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:20:02.564 [DEBUG] [Thread-185312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:20:02.564 [DEBUG] [Thread-185312] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:20:02.573 [DEBUG] [Thread-185312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:20:02.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:20:02.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')
2026-02-14T12:20:02.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-14T12:20:02.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:20:02.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:20:02.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:20:02.611 [DEBUG] [Thread-185312] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:20:09.337 [DEBUG] [Thread-185314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:20:20.242 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:20:20.242 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:20:21.249 [DEBUG] [Thread-185315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:20:24.388 [DEBUG] [Thread-185316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:20:32.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:20:32.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:20:32.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-14T12:20:34.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 20, 20), 11.05, 47.46, 0.0, 35.11, 14.4, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:20:34.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:20:20
2026-02-14T12:20:35.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:20:35.164 [DEBUG] [Thread-185317] [transport.py] [_log()] starting thread (client mode): 0xa2d55660
2026-02-14T12:20:35.165 [DEBUG] [Thread-185317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:20:35.185 [DEBUG] [Thread-185317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:20:35.185 [INFO] [Thread-185317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:20:35.186 [DEBUG] [Thread-185317] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:20:35.186 [DEBUG] [Thread-185317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:20:35.186 [DEBUG] [Thread-185317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:20:35.186 [DEBUG] [Thread-185317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:20:35.186 [DEBUG] [Thread-185317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:20:35.186 [DEBUG] [Thread-185317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:20:35.186 [DEBUG] [Thread-185317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:20:35.186 [DEBUG] [Thread-185317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:20:35.186 [DEBUG] [Thread-185317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:20:35.186 [DEBUG] [Thread-185317] [transport.py] [_log()] client lang: <none>
2026-02-14T12:20:35.186 [DEBUG] [Thread-185317] [transport.py] [_log()] server lang: <none>
2026-02-14T12:20:35.186 [DEBUG] [Thread-185317] [transport.py] [_log()] kex follows: False
2026-02-14T12:20:35.186 [DEBUG] [Thread-185317] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:20:35.186 [DEBUG] [Thread-185317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:20:35.186 [DEBUG] [Thread-185317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:20:35.186 [DEBUG] [Thread-185317] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:20:35.186 [DEBUG] [Thread-185317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:20:35.186 [DEBUG] [Thread-185317] [transport.py] [_log()] Compression: none
2026-02-14T12:20:35.186 [DEBUG] [Thread-185317] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:20:35.193 [DEBUG] [Thread-185317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:20:35.193 [DEBUG] [Thread-185317] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:20:35.193 [DEBUG] [Thread-185317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:20:35.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:20:35.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:20:35.194 [DEBUG] [Thread-185317] [transport.py] [_log()] userauth is OK
2026-02-14T12:20:35.194 [DEBUG] [Thread-185317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:20:35.194 [DEBUG] [Thread-185317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:20:35.194 [DEBUG] [Thread-185317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:20:35.194 [DEBUG] [Thread-185317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:20:35.203 [INFO] [Thread-185317] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:20:35.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:20:35.828 [DEBUG] [Thread-185317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:20:35.828 [DEBUG] [Thread-185317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:20:35.829 [DEBUG] [Thread-185317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:20:35.869 [DEBUG] [Thread-185317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:20:35.870 [DEBUG] [Thread-185317] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:20:35.873 [DEBUG] [Thread-185317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:20:35.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:20:35.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:20:35.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:20:35.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:20:35.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:20:35.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:20:35.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:20:35.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:20:35.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:20:35.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.430666 -999.00  +13.70  27.76     54   +4.60 1 1 1 1 1   888    0 10.93 57.51 ----- 23.0 27.8 165.0 29.8 20.2 -25.6 18.9 -23.1 18.8 -23.8 20.1 -24.7
2026-02-14T12:20:35.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:20:35.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:20:35.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.430666
2026-02-14T12:20:35.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:20:35.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:20:35.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:20:35.901 [DEBUG] [Thread-185317] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:20:35.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:20:35.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:20:35.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:20:20', tmtdew=11.05, humidity=47.46, cloud=0.0, wind=35.11, temperature=14.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:20:09.542', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:20:35.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-14T12:20:35.998 [DEBUG] [Thread-185320] [transport.py] [_log()] starting thread (client mode): 0xa2dc12a0
2026-02-14T12:20:35.998 [DEBUG] [Thread-185320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:20:36.013 [DEBUG] [Thread-185320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:20:36.013 [INFO] [Thread-185320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:20:36.021 [DEBUG] [Thread-185320] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:20:36.021 [DEBUG] [Thread-185320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:20:36.021 [DEBUG] [Thread-185320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:20:36.021 [DEBUG] [Thread-185320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:20:36.021 [DEBUG] [Thread-185320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:20:36.021 [DEBUG] [Thread-185320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:20:36.022 [DEBUG] [Thread-185320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:20:36.022 [DEBUG] [Thread-185320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:20:36.022 [DEBUG] [Thread-185320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:20:36.022 [DEBUG] [Thread-185320] [transport.py] [_log()] client lang: <none>
2026-02-14T12:20:36.022 [DEBUG] [Thread-185320] [transport.py] [_log()] server lang: <none>
2026-02-14T12:20:36.022 [DEBUG] [Thread-185320] [transport.py] [_log()] kex follows: False
2026-02-14T12:20:36.022 [DEBUG] [Thread-185320] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:20:36.022 [DEBUG] [Thread-185320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:20:36.023 [DEBUG] [Thread-185320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:20:36.023 [DEBUG] [Thread-185320] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:20:36.023 [DEBUG] [Thread-185320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:20:36.023 [DEBUG] [Thread-185320] [transport.py] [_log()] Compression: none
2026-02-14T12:20:36.023 [DEBUG] [Thread-185320] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:20:36.078 [DEBUG] [Thread-185320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:20:36.079 [DEBUG] [Thread-185320] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:20:36.079 [DEBUG] [Thread-185320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:20:36.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:20:36.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:20:36.133 [DEBUG] [Thread-185320] [transport.py] [_log()] userauth is OK
2026-02-14T12:20:36.134 [DEBUG] [Thread-185320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:20:36.134 [DEBUG] [Thread-185320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:20:36.134 [DEBUG] [Thread-185320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:20:36.134 [DEBUG] [Thread-185320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:20:36.153 [INFO] [Thread-185320] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:20:36.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-14T12:20:36.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:20:36.939 [DEBUG] [Thread-185320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:20:36.940 [DEBUG] [Thread-185320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:20:36.988 [DEBUG] [Thread-185320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:20:36.988 [DEBUG] [Thread-185320] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:20:36.997 [DEBUG] [Thread-185320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:20:37.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:20:37.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-14T12:20:37.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:20:37.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:20:37.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:20:37.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:20:37.034 [DEBUG] [Thread-185320] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:20:39.424 [DEBUG] [Thread-185322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:20:54.480 [DEBUG] [Thread-185323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:21:07.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:21:07.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:21:07.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:21:09.515 [DEBUG] [Thread-185324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:21:09.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 20, 56), 10.61, 48.77, 0.0, 25.81, 13.45, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:21:09.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:20:56
2026-02-14T12:21:10.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:21:10.193 [DEBUG] [Thread-185325] [transport.py] [_log()] starting thread (client mode): 0xa81d63e0
2026-02-14T12:21:10.193 [DEBUG] [Thread-185325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:21:10.213 [DEBUG] [Thread-185325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:21:10.213 [INFO] [Thread-185325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:21:10.216 [DEBUG] [Thread-185325] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:21:10.216 [DEBUG] [Thread-185325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:21:10.216 [DEBUG] [Thread-185325] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:21:10.216 [DEBUG] [Thread-185325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:21:10.216 [DEBUG] [Thread-185325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:21:10.216 [DEBUG] [Thread-185325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:21:10.216 [DEBUG] [Thread-185325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:21:10.216 [DEBUG] [Thread-185325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:21:10.216 [DEBUG] [Thread-185325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:21:10.217 [DEBUG] [Thread-185325] [transport.py] [_log()] client lang: <none>
2026-02-14T12:21:10.217 [DEBUG] [Thread-185325] [transport.py] [_log()] server lang: <none>
2026-02-14T12:21:10.217 [DEBUG] [Thread-185325] [transport.py] [_log()] kex follows: False
2026-02-14T12:21:10.217 [DEBUG] [Thread-185325] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:21:10.217 [DEBUG] [Thread-185325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:21:10.217 [DEBUG] [Thread-185325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:21:10.217 [DEBUG] [Thread-185325] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:21:10.217 [DEBUG] [Thread-185325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:21:10.217 [DEBUG] [Thread-185325] [transport.py] [_log()] Compression: none
2026-02-14T12:21:10.217 [DEBUG] [Thread-185325] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:21:10.232 [DEBUG] [Thread-185325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:21:10.232 [DEBUG] [Thread-185325] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:21:10.232 [DEBUG] [Thread-185325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:21:10.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:21:10.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:21:10.233 [DEBUG] [Thread-185325] [transport.py] [_log()] userauth is OK
2026-02-14T12:21:10.233 [DEBUG] [Thread-185325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:21:10.233 [DEBUG] [Thread-185325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:21:10.233 [DEBUG] [Thread-185325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:21:10.233 [DEBUG] [Thread-185325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:21:10.248 [INFO] [Thread-185325] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:21:10.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:21:10.902 [DEBUG] [Thread-185325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:21:10.903 [DEBUG] [Thread-185325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:21:10.903 [DEBUG] [Thread-185325] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:21:10.943 [DEBUG] [Thread-185325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:21:10.943 [DEBUG] [Thread-185325] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:21:10.946 [DEBUG] [Thread-185325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:21:10.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:21:10.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:21:10.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:21:10.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:21:10.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:21:10.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:21:10.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:21:10.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:21:10.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:21:10.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.431013 -999.00  +13.70  17.24     54   +4.70 1 2 1 1 1   888    0 10.83 59.62 ----- 18.0 17.2 172.8 27.1 20.3 -25.0 18.9 -22.7 18.9 -21.8 20.1 -23.8
2026-02-14T12:21:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:21:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:21:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.431013
2026-02-14T12:21:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:21:10.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:21:10.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:21:10.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:21:10.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T12:21:10.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:20:56', tmtdew=10.61, humidity=48.77, cloud=0.0, wind=25.81, temperature=13.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:20:39.523', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:21:10.970 [DEBUG] [Thread-185325] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:21:11.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-14T12:21:11.081 [DEBUG] [Thread-185328] [transport.py] [_log()] starting thread (client mode): 0xa2dc34f0
2026-02-14T12:21:11.081 [DEBUG] [Thread-185328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:21:11.095 [DEBUG] [Thread-185328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:21:11.095 [INFO] [Thread-185328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:21:11.103 [DEBUG] [Thread-185328] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:21:11.103 [DEBUG] [Thread-185328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:21:11.103 [DEBUG] [Thread-185328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:21:11.103 [DEBUG] [Thread-185328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:21:11.103 [DEBUG] [Thread-185328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:21:11.103 [DEBUG] [Thread-185328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:21:11.104 [DEBUG] [Thread-185328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:21:11.104 [DEBUG] [Thread-185328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:21:11.104 [DEBUG] [Thread-185328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:21:11.104 [DEBUG] [Thread-185328] [transport.py] [_log()] client lang: <none>
2026-02-14T12:21:11.104 [DEBUG] [Thread-185328] [transport.py] [_log()] server lang: <none>
2026-02-14T12:21:11.104 [DEBUG] [Thread-185328] [transport.py] [_log()] kex follows: False
2026-02-14T12:21:11.104 [DEBUG] [Thread-185328] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:21:11.104 [DEBUG] [Thread-185328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:21:11.104 [DEBUG] [Thread-185328] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:21:11.105 [DEBUG] [Thread-185328] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:21:11.105 [DEBUG] [Thread-185328] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:21:11.105 [DEBUG] [Thread-185328] [transport.py] [_log()] Compression: none
2026-02-14T12:21:11.105 [DEBUG] [Thread-185328] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:21:11.162 [DEBUG] [Thread-185328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:21:11.162 [DEBUG] [Thread-185328] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:21:11.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:21:11.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:21:11.164 [DEBUG] [Thread-185328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:21:11.218 [DEBUG] [Thread-185328] [transport.py] [_log()] userauth is OK
2026-02-14T12:21:11.218 [DEBUG] [Thread-185328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:21:11.218 [DEBUG] [Thread-185328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:21:11.218 [DEBUG] [Thread-185328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:21:11.218 [DEBUG] [Thread-185328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:21:11.239 [INFO] [Thread-185328] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:21:11.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-14T12:21:11.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:21:12.061 [DEBUG] [Thread-185328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:21:12.062 [DEBUG] [Thread-185328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:21:12.109 [DEBUG] [Thread-185328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:21:12.109 [DEBUG] [Thread-185328] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:21:12.117 [DEBUG] [Thread-185328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:21:12.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:21: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-14T12:21:12.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:21:12.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:21:12.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:21:12.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:21:12.151 [DEBUG] [Thread-185328] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:21:20.382 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:21:20.383 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:21:21.294 [DEBUG] [Thread-185330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:21:24.550 [DEBUG] [Thread-185331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:21:39.605 [DEBUG] [Thread-185332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:21:42.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:21:42.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:21:42.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-14T12:21:44.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 21, 32), 10.3, 49.75, 0.0, 28.21, 13.33, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:21:44.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:21:32
2026-02-14T12:21:44.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:21:44.838 [DEBUG] [Thread-185333] [transport.py] [_log()] starting thread (client mode): 0xa5758af0
2026-02-14T12:21:44.838 [DEBUG] [Thread-185333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:21:44.859 [DEBUG] [Thread-185333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:21:44.859 [INFO] [Thread-185333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:21:44.862 [DEBUG] [Thread-185333] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:21:44.862 [DEBUG] [Thread-185333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:21:44.862 [DEBUG] [Thread-185333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:21:44.862 [DEBUG] [Thread-185333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:21:44.862 [DEBUG] [Thread-185333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:21:44.862 [DEBUG] [Thread-185333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:21:44.862 [DEBUG] [Thread-185333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:21:44.862 [DEBUG] [Thread-185333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:21:44.862 [DEBUG] [Thread-185333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:21:44.862 [DEBUG] [Thread-185333] [transport.py] [_log()] client lang: <none>
2026-02-14T12:21:44.862 [DEBUG] [Thread-185333] [transport.py] [_log()] server lang: <none>
2026-02-14T12:21:44.862 [DEBUG] [Thread-185333] [transport.py] [_log()] kex follows: False
2026-02-14T12:21:44.862 [DEBUG] [Thread-185333] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:21:44.862 [DEBUG] [Thread-185333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:21:44.862 [DEBUG] [Thread-185333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:21:44.862 [DEBUG] [Thread-185333] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:21:44.862 [DEBUG] [Thread-185333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:21:44.862 [DEBUG] [Thread-185333] [transport.py] [_log()] Compression: none
2026-02-14T12:21:44.862 [DEBUG] [Thread-185333] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:21:44.880 [DEBUG] [Thread-185333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:21:44.880 [DEBUG] [Thread-185333] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:21:44.881 [DEBUG] [Thread-185333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:21:44.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:21:44.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:21:44.883 [DEBUG] [Thread-185333] [transport.py] [_log()] userauth is OK
2026-02-14T12:21:44.883 [DEBUG] [Thread-185333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:21:44.883 [DEBUG] [Thread-185333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:21:44.883 [DEBUG] [Thread-185333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:21:44.883 [DEBUG] [Thread-185333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:21:44.907 [INFO] [Thread-185333] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:21:44.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:21:45.544 [DEBUG] [Thread-185333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:21:45.545 [DEBUG] [Thread-185333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:21:45.545 [DEBUG] [Thread-185333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:21:45.585 [DEBUG] [Thread-185333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:21:45.586 [DEBUG] [Thread-185333] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:21:45.589 [DEBUG] [Thread-185333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:21:45.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:21:45.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:21:45.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:21:45.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:21:45.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:21:45.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:21:45.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:21:45.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:21:45.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:21:45.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.431361 -999.00  +13.80  16.00     54   +4.70 1 2 1 1 1   888    0 10.77 56.91 ----- 12.3 16.0 169.4 23.9 20.4 -23.8 19.1 -22.7 19.0 -20.9 20.1 -23.2
2026-02-14T12:21:45.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:21:45.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:21:45.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.431361
2026-02-14T12:21:45.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:21:45.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:21:45.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:21:45.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:21:45.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T12:21:45.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:21:32', tmtdew=10.3, humidity=49.75, cloud=0.0, wind=28.21, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:21:09.590', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:21:45.616 [DEBUG] [Thread-185333] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:21:45.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-14T12:21:45.713 [DEBUG] [Thread-185336] [transport.py] [_log()] starting thread (client mode): 0xa2d551b0
2026-02-14T12:21:45.713 [DEBUG] [Thread-185336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:21:45.727 [DEBUG] [Thread-185336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:21:45.728 [INFO] [Thread-185336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:21:45.735 [DEBUG] [Thread-185336] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:21:45.735 [DEBUG] [Thread-185336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:21:45.736 [DEBUG] [Thread-185336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:21:45.736 [DEBUG] [Thread-185336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:21:45.736 [DEBUG] [Thread-185336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:21:45.736 [DEBUG] [Thread-185336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:21:45.736 [DEBUG] [Thread-185336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:21:45.736 [DEBUG] [Thread-185336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:21:45.736 [DEBUG] [Thread-185336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:21:45.736 [DEBUG] [Thread-185336] [transport.py] [_log()] client lang: <none>
2026-02-14T12:21:45.736 [DEBUG] [Thread-185336] [transport.py] [_log()] server lang: <none>
2026-02-14T12:21:45.736 [DEBUG] [Thread-185336] [transport.py] [_log()] kex follows: False
2026-02-14T12:21:45.736 [DEBUG] [Thread-185336] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:21:45.736 [DEBUG] [Thread-185336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:21:45.736 [DEBUG] [Thread-185336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:21:45.736 [DEBUG] [Thread-185336] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:21:45.736 [DEBUG] [Thread-185336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:21:45.736 [DEBUG] [Thread-185336] [transport.py] [_log()] Compression: none
2026-02-14T12:21:45.736 [DEBUG] [Thread-185336] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:21:45.794 [DEBUG] [Thread-185336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:21:45.794 [DEBUG] [Thread-185336] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:21:45.795 [DEBUG] [Thread-185336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:21:45.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:21:45.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:21:45.851 [DEBUG] [Thread-185336] [transport.py] [_log()] userauth is OK
2026-02-14T12:21:45.851 [DEBUG] [Thread-185336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:21:45.851 [DEBUG] [Thread-185336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:21:45.851 [DEBUG] [Thread-185336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:21:45.851 [DEBUG] [Thread-185336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:21:45.875 [INFO] [Thread-185336] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:21:45.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-14T12:21:45.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:21:46.708 [DEBUG] [Thread-185336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:21:46.709 [DEBUG] [Thread-185336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:21:46.756 [DEBUG] [Thread-185336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:21:46.757 [DEBUG] [Thread-185336] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:21:46.766 [DEBUG] [Thread-185336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:21:46.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:21:46.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-14T12:21:46.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-14T12:21:46.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:21:46.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:21:46.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:21:46.803 [DEBUG] [Thread-185336] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:21:54.641 [DEBUG] [Thread-185338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:22:09.691 [DEBUG] [Thread-185339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:22:16.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:22:16.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:22:16.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-14T12:22:18.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 22, 8), 10.49, 49.17, 0.0, 35.9, 13.45, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:22:18.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:22:08
2026-02-14T12:22:19.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:22:19.247 [DEBUG] [Thread-185340] [transport.py] [_log()] starting thread (client mode): 0xa2dde3e0
2026-02-14T12:22:19.247 [DEBUG] [Thread-185340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:22:19.267 [DEBUG] [Thread-185340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:22:19.267 [INFO] [Thread-185340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:22:19.271 [DEBUG] [Thread-185340] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:22:19.271 [DEBUG] [Thread-185340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:22:19.271 [DEBUG] [Thread-185340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:22:19.271 [DEBUG] [Thread-185340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:22:19.271 [DEBUG] [Thread-185340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:22:19.271 [DEBUG] [Thread-185340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:22:19.271 [DEBUG] [Thread-185340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:22:19.271 [DEBUG] [Thread-185340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:22:19.271 [DEBUG] [Thread-185340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:22:19.271 [DEBUG] [Thread-185340] [transport.py] [_log()] client lang: <none>
2026-02-14T12:22:19.271 [DEBUG] [Thread-185340] [transport.py] [_log()] server lang: <none>
2026-02-14T12:22:19.271 [DEBUG] [Thread-185340] [transport.py] [_log()] kex follows: False
2026-02-14T12:22:19.271 [DEBUG] [Thread-185340] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:22:19.271 [DEBUG] [Thread-185340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:22:19.271 [DEBUG] [Thread-185340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:22:19.271 [DEBUG] [Thread-185340] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:22:19.271 [DEBUG] [Thread-185340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:22:19.271 [DEBUG] [Thread-185340] [transport.py] [_log()] Compression: none
2026-02-14T12:22:19.271 [DEBUG] [Thread-185340] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:22:19.287 [DEBUG] [Thread-185340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:22:19.288 [DEBUG] [Thread-185340] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:22:19.288 [DEBUG] [Thread-185340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:22:19.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:22:19.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:22:19.290 [DEBUG] [Thread-185340] [transport.py] [_log()] userauth is OK
2026-02-14T12:22:19.291 [DEBUG] [Thread-185340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:22:19.291 [DEBUG] [Thread-185340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:22:19.291 [DEBUG] [Thread-185340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:22:19.291 [DEBUG] [Thread-185340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:22:19.312 [INFO] [Thread-185340] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:22:19.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:22:19.951 [DEBUG] [Thread-185340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:22:19.952 [DEBUG] [Thread-185340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:22:19.952 [DEBUG] [Thread-185340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:22:19.993 [DEBUG] [Thread-185340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:22:19.993 [DEBUG] [Thread-185340] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:22:19.996 [DEBUG] [Thread-185340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:22:20.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:22:20.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:22:20.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:22:20.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:22:20.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:22:20.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:22:20.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:22:20.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:22:20.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:22:20.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.431708 -999.00  +14.10  22.80     53   +4.80 1 2 1 1 1   888    0 10.89 58.01 ----- 20.6 22.8 157.2 36.0 20.6 -23.8 19.1 -22.5 19.1 -21.9 20.3 -23.4
2026-02-14T12:22:20.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:22:20.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:22:20.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.431708
2026-02-14T12:22:20.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:22:20.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:22:20.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:22:20.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:22:20.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T12:22:20.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:22:08', tmtdew=10.49, humidity=49.17, cloud=0.0, wind=35.9, temperature=13.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:21:39.571', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:22:20.022 [DEBUG] [Thread-185340] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:22:20.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:22:20.128 [DEBUG] [Thread-185343] [transport.py] [_log()] starting thread (client mode): 0xa2ddd510
2026-02-14T12:22:20.128 [DEBUG] [Thread-185343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:22:20.143 [DEBUG] [Thread-185343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:22:20.143 [INFO] [Thread-185343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:22:20.153 [DEBUG] [Thread-185343] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:22:20.154 [DEBUG] [Thread-185343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:22:20.154 [DEBUG] [Thread-185343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:22:20.154 [DEBUG] [Thread-185343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:22:20.154 [DEBUG] [Thread-185343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:22:20.154 [DEBUG] [Thread-185343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:22:20.154 [DEBUG] [Thread-185343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:22:20.154 [DEBUG] [Thread-185343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:22:20.154 [DEBUG] [Thread-185343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:22:20.154 [DEBUG] [Thread-185343] [transport.py] [_log()] client lang: <none>
2026-02-14T12:22:20.154 [DEBUG] [Thread-185343] [transport.py] [_log()] server lang: <none>
2026-02-14T12:22:20.154 [DEBUG] [Thread-185343] [transport.py] [_log()] kex follows: False
2026-02-14T12:22:20.154 [DEBUG] [Thread-185343] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:22:20.154 [DEBUG] [Thread-185343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:22:20.154 [DEBUG] [Thread-185343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:22:20.155 [DEBUG] [Thread-185343] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:22:20.155 [DEBUG] [Thread-185343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:22:20.155 [DEBUG] [Thread-185343] [transport.py] [_log()] Compression: none
2026-02-14T12:22:20.155 [DEBUG] [Thread-185343] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:22:20.211 [DEBUG] [Thread-185343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:22:20.212 [DEBUG] [Thread-185343] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:22:20.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:22:20.213 [DEBUG] [Thread-185343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:22:20.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:22:20.267 [DEBUG] [Thread-185343] [transport.py] [_log()] userauth is OK
2026-02-14T12:22:20.268 [DEBUG] [Thread-185343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:22:20.268 [DEBUG] [Thread-185343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:22:20.268 [DEBUG] [Thread-185343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:22:20.268 [DEBUG] [Thread-185343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:22:20.293 [INFO] [Thread-185343] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:22:20.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-14T12:22:20.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:22:20.521 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:22:20.522 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:22:21.096 [DEBUG] [Thread-185343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:22:21.096 [DEBUG] [Thread-185343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:22:21.144 [DEBUG] [Thread-185343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:22:21.145 [DEBUG] [Thread-185343] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:22:21.154 [DEBUG] [Thread-185343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:22:21.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:22: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-14T12:22: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-14T12:22:21.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:22:21.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:22:21.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:22:21.192 [DEBUG] [Thread-185343] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:22:21.326 [DEBUG] [Thread-185345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:22:24.728 [DEBUG] [Thread-185346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:22:39.788 [DEBUG] [Thread-185347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:22:51.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:22:51.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:22:51.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-14T12:22:53.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 22, 8), 10.49, 49.17, 0.0, 35.9, 13.45, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:22:53.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:22:08
2026-02-14T12:22:53.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:22:54.010 [DEBUG] [Thread-185348] [transport.py] [_log()] starting thread (client mode): 0xa2ddfc40
2026-02-14T12:22:54.011 [DEBUG] [Thread-185348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:22:54.030 [DEBUG] [Thread-185348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:22:54.031 [INFO] [Thread-185348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:22:54.034 [DEBUG] [Thread-185348] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:22:54.034 [DEBUG] [Thread-185348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:22:54.034 [DEBUG] [Thread-185348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:22:54.034 [DEBUG] [Thread-185348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:22:54.034 [DEBUG] [Thread-185348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:22:54.034 [DEBUG] [Thread-185348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:22:54.034 [DEBUG] [Thread-185348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:22:54.034 [DEBUG] [Thread-185348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:22:54.034 [DEBUG] [Thread-185348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:22:54.034 [DEBUG] [Thread-185348] [transport.py] [_log()] client lang: <none>
2026-02-14T12:22:54.034 [DEBUG] [Thread-185348] [transport.py] [_log()] server lang: <none>
2026-02-14T12:22:54.034 [DEBUG] [Thread-185348] [transport.py] [_log()] kex follows: False
2026-02-14T12:22:54.034 [DEBUG] [Thread-185348] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:22:54.035 [DEBUG] [Thread-185348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:22:54.035 [DEBUG] [Thread-185348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:22:54.035 [DEBUG] [Thread-185348] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:22:54.035 [DEBUG] [Thread-185348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:22:54.035 [DEBUG] [Thread-185348] [transport.py] [_log()] Compression: none
2026-02-14T12:22:54.035 [DEBUG] [Thread-185348] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:22:54.052 [DEBUG] [Thread-185348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:22:54.053 [DEBUG] [Thread-185348] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:22:54.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:22:54.054 [DEBUG] [Thread-185348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:22:54.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:22:54.056 [DEBUG] [Thread-185348] [transport.py] [_log()] userauth is OK
2026-02-14T12:22:54.056 [DEBUG] [Thread-185348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:22:54.057 [DEBUG] [Thread-185348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:22:54.057 [DEBUG] [Thread-185348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:22:54.057 [DEBUG] [Thread-185348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:22:54.075 [INFO] [Thread-185348] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:22:54.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:22:54.649 [DEBUG] [Thread-185348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:22:54.650 [DEBUG] [Thread-185348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:22:54.650 [DEBUG] [Thread-185348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:22:54.691 [DEBUG] [Thread-185348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:22:54.691 [DEBUG] [Thread-185348] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:22:54.695 [DEBUG] [Thread-185348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:22:54.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:22:54.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:22:54.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:22:54.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:22:54.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:22:54.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:22:54.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:22:54.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:22:54.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:22:54.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.432402 -999.00  +14.40  26.10     51   +4.50 1 1 1 1 1   888    0 11.25 65.36 ----- 24.3 26.1 151.6 38.7 20.5 -26.2 19.2 -24.3 19.0 -24.5 20.2 -27.0
2026-02-14T12:22:54.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:22:54.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:22:54.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.432402
2026-02-14T12:22:54.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:22:54.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:22:54.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:22:54.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:22:54.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:22:54.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:22:08', tmtdew=10.49, humidity=49.17, cloud=0.0, wind=35.9, temperature=13.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:22:39.533', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:22:54.723 [DEBUG] [Thread-185348] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:22:54.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-14T12:22:54.821 [DEBUG] [Thread-185351] [transport.py] [_log()] starting thread (client mode): 0xa57c3fd0
2026-02-14T12:22:54.821 [DEBUG] [Thread-185351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:22:54.825 [DEBUG] [Thread-185352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:22:54.834 [DEBUG] [Thread-185351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:22:54.835 [INFO] [Thread-185351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:22:54.843 [DEBUG] [Thread-185351] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:22:54.843 [DEBUG] [Thread-185351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:22:54.843 [DEBUG] [Thread-185351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:22:54.843 [DEBUG] [Thread-185351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:22:54.843 [DEBUG] [Thread-185351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:22:54.844 [DEBUG] [Thread-185351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:22:54.844 [DEBUG] [Thread-185351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:22:54.844 [DEBUG] [Thread-185351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:22:54.844 [DEBUG] [Thread-185351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:22:54.844 [DEBUG] [Thread-185351] [transport.py] [_log()] client lang: <none>
2026-02-14T12:22:54.844 [DEBUG] [Thread-185351] [transport.py] [_log()] server lang: <none>
2026-02-14T12:22:54.844 [DEBUG] [Thread-185351] [transport.py] [_log()] kex follows: False
2026-02-14T12:22:54.844 [DEBUG] [Thread-185351] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:22:54.844 [DEBUG] [Thread-185351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:22:54.844 [DEBUG] [Thread-185351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:22:54.844 [DEBUG] [Thread-185351] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:22:54.844 [DEBUG] [Thread-185351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:22:54.844 [DEBUG] [Thread-185351] [transport.py] [_log()] Compression: none
2026-02-14T12:22:54.844 [DEBUG] [Thread-185351] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:22:54.899 [DEBUG] [Thread-185351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:22:54.900 [DEBUG] [Thread-185351] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:22:54.900 [DEBUG] [Thread-185351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:22:54.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:22:54.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:22:54.955 [DEBUG] [Thread-185351] [transport.py] [_log()] userauth is OK
2026-02-14T12:22:54.956 [DEBUG] [Thread-185351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:22:54.956 [DEBUG] [Thread-185351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:22:54.956 [DEBUG] [Thread-185351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:22:54.956 [DEBUG] [Thread-185351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:22:54.977 [INFO] [Thread-185351] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:22:54.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-14T12:22:54.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:22:55.762 [DEBUG] [Thread-185351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:22:55.762 [DEBUG] [Thread-185351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:22:55.811 [DEBUG] [Thread-185351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:22:55.811 [DEBUG] [Thread-185351] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:22:55.820 [DEBUG] [Thread-185351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:22:55.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:22:55.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-14T12:22:55.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:22:55.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:22:55.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:22:55.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:22:55.858 [DEBUG] [Thread-185351] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:23:09.871 [DEBUG] [Thread-185354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:23:20.660 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:23:20.661 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:23:21.371 [DEBUG] [Thread-185355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:23:24.904 [DEBUG] [Thread-185356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:23:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:23:25.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:23:25.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:23:28.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 22, 45), 11.22, 47.09, 0.0, 36.61, 14.32, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:23:28.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:22:45
2026-02-14T12:23:28.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:23:28.973 [DEBUG] [Thread-185357] [transport.py] [_log()] starting thread (client mode): 0xa2ddfac0
2026-02-14T12:23:28.973 [DEBUG] [Thread-185357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:23:28.993 [DEBUG] [Thread-185357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:23:28.994 [INFO] [Thread-185357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:23:28.995 [DEBUG] [Thread-185357] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:23:28.995 [DEBUG] [Thread-185357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:23:28.995 [DEBUG] [Thread-185357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:23:28.995 [DEBUG] [Thread-185357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:23:28.995 [DEBUG] [Thread-185357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:23:28.995 [DEBUG] [Thread-185357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:23:28.995 [DEBUG] [Thread-185357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:23:28.995 [DEBUG] [Thread-185357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:23:28.995 [DEBUG] [Thread-185357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:23:28.995 [DEBUG] [Thread-185357] [transport.py] [_log()] client lang: <none>
2026-02-14T12:23:28.995 [DEBUG] [Thread-185357] [transport.py] [_log()] server lang: <none>
2026-02-14T12:23:28.995 [DEBUG] [Thread-185357] [transport.py] [_log()] kex follows: False
2026-02-14T12:23:28.995 [DEBUG] [Thread-185357] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:23:28.995 [DEBUG] [Thread-185357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:23:28.996 [DEBUG] [Thread-185357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:23:28.996 [DEBUG] [Thread-185357] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:23:28.996 [DEBUG] [Thread-185357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:23:28.996 [DEBUG] [Thread-185357] [transport.py] [_log()] Compression: none
2026-02-14T12:23:28.996 [DEBUG] [Thread-185357] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:23:29.012 [DEBUG] [Thread-185357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:23:29.012 [DEBUG] [Thread-185357] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:23:29.013 [DEBUG] [Thread-185357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:23:29.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:23:29.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:23:29.014 [DEBUG] [Thread-185357] [transport.py] [_log()] userauth is OK
2026-02-14T12:23:29.014 [DEBUG] [Thread-185357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:23:29.014 [DEBUG] [Thread-185357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:23:29.014 [DEBUG] [Thread-185357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:23:29.014 [DEBUG] [Thread-185357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:23:29.024 [INFO] [Thread-185357] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:23:29.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:23:29.658 [DEBUG] [Thread-185357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:23:29.658 [DEBUG] [Thread-185357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:23:29.659 [DEBUG] [Thread-185357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:23:29.699 [DEBUG] [Thread-185357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:23:29.699 [DEBUG] [Thread-185357] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:23:29.702 [DEBUG] [Thread-185357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:23:29.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:23:29.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:23:29.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:23:29.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:23:29.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:23:29.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:23:29.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:23:29.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:23:29.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:23:29.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.432749 -999.00  +14.50  27.86     51   +4.70 1 1 1 1 1   888    0 10.90 61.32 ----- 32.9 27.9 178.6 32.9 20.5 -25.1 19.1 -25.2 19.1 -24.6 20.2 -24.6
2026-02-14T12:23:29.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:23:29.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:23:29.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.432749
2026-02-14T12:23:29.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:23:29.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:23:29.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:23:29.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:23:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:23:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:22:45', tmtdew=11.22, humidity=47.09, cloud=0.0, wind=36.61, temperature=14.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:23:09.514', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:23:29.728 [DEBUG] [Thread-185357] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:23:29.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:23:29.826 [DEBUG] [Thread-185360] [transport.py] [_log()] starting thread (client mode): 0xa2dc1780
2026-02-14T12:23:29.826 [DEBUG] [Thread-185360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:23:29.844 [DEBUG] [Thread-185360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:23:29.845 [INFO] [Thread-185360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:23:29.852 [DEBUG] [Thread-185360] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:23:29.852 [DEBUG] [Thread-185360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:23:29.852 [DEBUG] [Thread-185360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:23:29.852 [DEBUG] [Thread-185360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:23:29.852 [DEBUG] [Thread-185360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:23:29.852 [DEBUG] [Thread-185360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:23:29.853 [DEBUG] [Thread-185360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:23:29.853 [DEBUG] [Thread-185360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:23:29.853 [DEBUG] [Thread-185360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:23:29.853 [DEBUG] [Thread-185360] [transport.py] [_log()] client lang: <none>
2026-02-14T12:23:29.853 [DEBUG] [Thread-185360] [transport.py] [_log()] server lang: <none>
2026-02-14T12:23:29.853 [DEBUG] [Thread-185360] [transport.py] [_log()] kex follows: False
2026-02-14T12:23:29.853 [DEBUG] [Thread-185360] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:23:29.853 [DEBUG] [Thread-185360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:23:29.853 [DEBUG] [Thread-185360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:23:29.853 [DEBUG] [Thread-185360] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:23:29.853 [DEBUG] [Thread-185360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:23:29.853 [DEBUG] [Thread-185360] [transport.py] [_log()] Compression: none
2026-02-14T12:23:29.853 [DEBUG] [Thread-185360] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:23:29.912 [DEBUG] [Thread-185360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:23:29.912 [DEBUG] [Thread-185360] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:23:29.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:23:29.913 [DEBUG] [Thread-185360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:23:29.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:23:29.968 [DEBUG] [Thread-185360] [transport.py] [_log()] userauth is OK
2026-02-14T12:23:29.968 [DEBUG] [Thread-185360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:23:29.968 [DEBUG] [Thread-185360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:23:29.969 [DEBUG] [Thread-185360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:23:29.969 [DEBUG] [Thread-185360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:23:29.987 [INFO] [Thread-185360] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:23:29.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-14T12:23:29.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:23:30.795 [DEBUG] [Thread-185360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:23:30.796 [DEBUG] [Thread-185360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:23:30.843 [DEBUG] [Thread-185360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:23:30.843 [DEBUG] [Thread-185360] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:23:30.852 [DEBUG] [Thread-185360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:23:30.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:23:30.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:23:30.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:23:30.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:23:30.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:23:30.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:23:30.889 [DEBUG] [Thread-185360] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:23:39.942 [DEBUG] [Thread-185362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:23:54.995 [DEBUG] [Thread-185363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:24:00.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:24:00.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:24:00.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-14T12:24:03.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 23, 21), 11.65, 45.81, 0.0, 37.64, 14.68, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:24:03.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:23:21
2026-02-14T12:24:03.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:24:03.765 [DEBUG] [Thread-185364] [transport.py] [_log()] starting thread (client mode): 0xa5742230
2026-02-14T12:24:03.765 [DEBUG] [Thread-185364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:24:03.784 [DEBUG] [Thread-185364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:24:03.784 [INFO] [Thread-185364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:24:03.788 [DEBUG] [Thread-185364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:24:03.788 [DEBUG] [Thread-185364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:24:03.788 [DEBUG] [Thread-185364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:24:03.788 [DEBUG] [Thread-185364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:24:03.788 [DEBUG] [Thread-185364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:24:03.788 [DEBUG] [Thread-185364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:24:03.788 [DEBUG] [Thread-185364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:24:03.788 [DEBUG] [Thread-185364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:24:03.788 [DEBUG] [Thread-185364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:24:03.788 [DEBUG] [Thread-185364] [transport.py] [_log()] client lang: <none>
2026-02-14T12:24:03.788 [DEBUG] [Thread-185364] [transport.py] [_log()] server lang: <none>
2026-02-14T12:24:03.788 [DEBUG] [Thread-185364] [transport.py] [_log()] kex follows: False
2026-02-14T12:24:03.788 [DEBUG] [Thread-185364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:24:03.788 [DEBUG] [Thread-185364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:24:03.788 [DEBUG] [Thread-185364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:24:03.789 [DEBUG] [Thread-185364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:24:03.789 [DEBUG] [Thread-185364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:24:03.789 [DEBUG] [Thread-185364] [transport.py] [_log()] Compression: none
2026-02-14T12:24:03.789 [DEBUG] [Thread-185364] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:24:03.810 [DEBUG] [Thread-185364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:24:03.811 [DEBUG] [Thread-185364] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:24:03.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:24:03.812 [DEBUG] [Thread-185364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:24:03.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:24:03.815 [DEBUG] [Thread-185364] [transport.py] [_log()] userauth is OK
2026-02-14T12:24:03.815 [DEBUG] [Thread-185364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:24:03.815 [DEBUG] [Thread-185364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:24:03.815 [DEBUG] [Thread-185364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:24:03.815 [DEBUG] [Thread-185364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:24:03.848 [INFO] [Thread-185364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:24:03.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:24:04.482 [DEBUG] [Thread-185364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:24:04.483 [DEBUG] [Thread-185364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:24:04.483 [DEBUG] [Thread-185364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:24:04.524 [DEBUG] [Thread-185364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:24:04.524 [DEBUG] [Thread-185364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:24:04.527 [DEBUG] [Thread-185364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:24:04.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:24:04.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:24:04.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:24:04.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:24:04.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:24:04.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:24:04.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:24:04.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:24:04.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:24:04.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.433097 -999.00  +14.20  31.98     51   +4.40 1 1 2 1 1   888    0 11.24 66.67 ----- 27.0 32.0 177.1 41.5 20.4 -26.0 18.9 -28.6 19.0 -22.9 20.2 -26.4
2026-02-14T12:24:04.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:24:04.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:24:04.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.433097
2026-02-14T12:24:04.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:24:04.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:24:04.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:24:04.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:24:04.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:24:04.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:23:21', tmtdew=11.65, humidity=45.81, cloud=0.0, wind=37.64, temperature=14.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:23:39.581', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:24:04.557 [DEBUG] [Thread-185364] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:24:04.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-14T12:24:04.655 [DEBUG] [Thread-185367] [transport.py] [_log()] starting thread (client mode): 0xa2dc3e80
2026-02-14T12:24:04.656 [DEBUG] [Thread-185367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:24:04.672 [DEBUG] [Thread-185367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:24:04.673 [INFO] [Thread-185367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:24:04.680 [DEBUG] [Thread-185367] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:24:04.680 [DEBUG] [Thread-185367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:24:04.680 [DEBUG] [Thread-185367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:24:04.680 [DEBUG] [Thread-185367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:24:04.680 [DEBUG] [Thread-185367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:24:04.680 [DEBUG] [Thread-185367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:24:04.681 [DEBUG] [Thread-185367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:24:04.681 [DEBUG] [Thread-185367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:24:04.681 [DEBUG] [Thread-185367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:24:04.681 [DEBUG] [Thread-185367] [transport.py] [_log()] client lang: <none>
2026-02-14T12:24:04.681 [DEBUG] [Thread-185367] [transport.py] [_log()] server lang: <none>
2026-02-14T12:24:04.681 [DEBUG] [Thread-185367] [transport.py] [_log()] kex follows: False
2026-02-14T12:24:04.681 [DEBUG] [Thread-185367] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:24:04.681 [DEBUG] [Thread-185367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:24:04.681 [DEBUG] [Thread-185367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:24:04.681 [DEBUG] [Thread-185367] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:24:04.681 [DEBUG] [Thread-185367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:24:04.681 [DEBUG] [Thread-185367] [transport.py] [_log()] Compression: none
2026-02-14T12:24:04.681 [DEBUG] [Thread-185367] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:24:04.740 [DEBUG] [Thread-185367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:24:04.740 [DEBUG] [Thread-185367] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:24:04.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:24:04.741 [DEBUG] [Thread-185367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:24:04.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:24:04.796 [DEBUG] [Thread-185367] [transport.py] [_log()] userauth is OK
2026-02-14T12:24:04.796 [DEBUG] [Thread-185367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:24:04.797 [DEBUG] [Thread-185367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:24:04.797 [DEBUG] [Thread-185367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:24:04.797 [DEBUG] [Thread-185367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:24:04.815 [INFO] [Thread-185367] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:24:04.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-14T12:24:04.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:24:05.647 [DEBUG] [Thread-185367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:24:05.647 [DEBUG] [Thread-185367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:24:05.699 [DEBUG] [Thread-185367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:24:05.699 [DEBUG] [Thread-185367] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:24:05.708 [DEBUG] [Thread-185367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:24:05.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:24:05.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-14T12:24:05.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-14T12:24:05.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:24:05.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:24:05.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:24:05.747 [DEBUG] [Thread-185367] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:24:10.032 [DEBUG] [Thread-185369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:24:20.801 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:24:20.802 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:24:21.418 [DEBUG] [Thread-185370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:24:25.094 [DEBUG] [Thread-185371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:24:35.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:24:35.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:24:35.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-14T12:24:38.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 23, 57), 11.24, 46.76, 0.0, 39.79, 13.97, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:24:38.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:23:57
2026-02-14T12:24:38.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:24:38.658 [DEBUG] [Thread-185372] [transport.py] [_log()] starting thread (client mode): 0xa5743fa0
2026-02-14T12:24:38.658 [DEBUG] [Thread-185372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:24:38.679 [DEBUG] [Thread-185372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:24:38.679 [INFO] [Thread-185372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:24:38.683 [DEBUG] [Thread-185372] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:24:38.683 [DEBUG] [Thread-185372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:24:38.683 [DEBUG] [Thread-185372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:24:38.683 [DEBUG] [Thread-185372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:24:38.683 [DEBUG] [Thread-185372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:24:38.683 [DEBUG] [Thread-185372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:24:38.683 [DEBUG] [Thread-185372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:24:38.683 [DEBUG] [Thread-185372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:24:38.683 [DEBUG] [Thread-185372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:24:38.683 [DEBUG] [Thread-185372] [transport.py] [_log()] client lang: <none>
2026-02-14T12:24:38.683 [DEBUG] [Thread-185372] [transport.py] [_log()] server lang: <none>
2026-02-14T12:24:38.683 [DEBUG] [Thread-185372] [transport.py] [_log()] kex follows: False
2026-02-14T12:24:38.684 [DEBUG] [Thread-185372] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:24:38.684 [DEBUG] [Thread-185372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:24:38.684 [DEBUG] [Thread-185372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:24:38.684 [DEBUG] [Thread-185372] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:24:38.684 [DEBUG] [Thread-185372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:24:38.684 [DEBUG] [Thread-185372] [transport.py] [_log()] Compression: none
2026-02-14T12:24:38.684 [DEBUG] [Thread-185372] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:24:38.703 [DEBUG] [Thread-185372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:24:38.704 [DEBUG] [Thread-185372] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:24:38.704 [DEBUG] [Thread-185372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:24:38.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:24:38.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:24:38.706 [DEBUG] [Thread-185372] [transport.py] [_log()] userauth is OK
2026-02-14T12:24:38.707 [DEBUG] [Thread-185372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:24:38.707 [DEBUG] [Thread-185372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:24:38.707 [DEBUG] [Thread-185372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:24:38.707 [DEBUG] [Thread-185372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:24:38.743 [INFO] [Thread-185372] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:24:38.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:24:39.396 [DEBUG] [Thread-185372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:24:39.396 [DEBUG] [Thread-185372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:24:39.396 [DEBUG] [Thread-185372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:24:39.436 [DEBUG] [Thread-185372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:24:39.437 [DEBUG] [Thread-185372] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:24:39.440 [DEBUG] [Thread-185372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:24:39.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:24:39.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:24:39.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:24:39.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:24:39.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:24:39.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:24:39.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:24:39.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:24:39.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:24:39.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.433444 -999.00  +14.10  22.10     52   +4.50 1 1 1 1 1   888    0 11.15 66.13 ----- 25.9 22.1 169.8 38.3 20.4 -24.6 19.0 -25.9 19.2 -21.2 20.3 -24.1
2026-02-14T12:24:39.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:24:39.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:24:39.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.433444
2026-02-14T12:24:39.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:24:39.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:24:39.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:24:39.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:24:39.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:24:39.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:23:57', tmtdew=11.24, humidity=46.76, cloud=0.0, wind=39.79, temperature=13.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:24:09.562', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:24:39.468 [DEBUG] [Thread-185372] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:24:39.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-14T12:24:40.135 [DEBUG] [Thread-185375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:24:55.188 [DEBUG] [Thread-185376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:25:10.224 [DEBUG] [Thread-185377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:25:20.943 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:25:20.944 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:25:21.464 [DEBUG] [Thread-185378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:25:25.259 [DEBUG] [Thread-185379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:25:40.294 [DEBUG] [Thread-185380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:25:55.329 [DEBUG] [Thread-185381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:26:10.369 [DEBUG] [Thread-185382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:26:21.084 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:26:21.085 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:26:21.524 [DEBUG] [Thread-185383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:26:25.405 [DEBUG] [Thread-185384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:26:40.442 [DEBUG] [Thread-185385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:26:53.624 [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-14T12:26:55.476 [DEBUG] [Thread-185386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:27:10.516 [DEBUG] [Thread-185387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:27:21.224 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:27:21.225 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:27:21.559 [DEBUG] [Thread-185388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:27:23.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:27:23.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:27:23.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-14T12:27:25.553 [DEBUG] [Thread-185389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:27:25.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 26, 57), 10.74, 48.41, 0.0, 31.03, 13.82, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:27:25.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:26:57
2026-02-14T12:27:25.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:27:26.076 [DEBUG] [Thread-185390] [transport.py] [_log()] starting thread (client mode): 0xa57420b0
2026-02-14T12:27:26.076 [DEBUG] [Thread-185390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:27:26.095 [DEBUG] [Thread-185390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:27:26.096 [INFO] [Thread-185390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:27:26.099 [DEBUG] [Thread-185390] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:27:26.099 [DEBUG] [Thread-185390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:27:26.099 [DEBUG] [Thread-185390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:27:26.099 [DEBUG] [Thread-185390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:27:26.099 [DEBUG] [Thread-185390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:27:26.099 [DEBUG] [Thread-185390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:27:26.099 [DEBUG] [Thread-185390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:27:26.099 [DEBUG] [Thread-185390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:27:26.099 [DEBUG] [Thread-185390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:27:26.099 [DEBUG] [Thread-185390] [transport.py] [_log()] client lang: <none>
2026-02-14T12:27:26.099 [DEBUG] [Thread-185390] [transport.py] [_log()] server lang: <none>
2026-02-14T12:27:26.099 [DEBUG] [Thread-185390] [transport.py] [_log()] kex follows: False
2026-02-14T12:27:26.099 [DEBUG] [Thread-185390] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:27:26.099 [DEBUG] [Thread-185390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:27:26.099 [DEBUG] [Thread-185390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:27:26.100 [DEBUG] [Thread-185390] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:27:26.100 [DEBUG] [Thread-185390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:27:26.100 [DEBUG] [Thread-185390] [transport.py] [_log()] Compression: none
2026-02-14T12:27:26.100 [DEBUG] [Thread-185390] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:27:26.114 [DEBUG] [Thread-185390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:27:26.115 [DEBUG] [Thread-185390] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:27:26.115 [DEBUG] [Thread-185390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:27:26.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:27:26.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:27:26.117 [DEBUG] [Thread-185390] [transport.py] [_log()] userauth is OK
2026-02-14T12:27:26.117 [DEBUG] [Thread-185390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:27:26.117 [DEBUG] [Thread-185390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:27:26.117 [DEBUG] [Thread-185390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:27:26.117 [DEBUG] [Thread-185390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:27:26.134 [INFO] [Thread-185390] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:27:26.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:27:26.791 [DEBUG] [Thread-185390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:27:26.791 [DEBUG] [Thread-185390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:27:26.792 [DEBUG] [Thread-185390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:27:26.832 [DEBUG] [Thread-185390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:27:26.833 [DEBUG] [Thread-185390] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:27:26.836 [DEBUG] [Thread-185390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:27:26.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:27:26.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:27:26.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:27:26.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:27:26.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:27:26.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:27:26.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:27:26.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:27:26.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:27:26.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.435527 -999.00  +13.70  33.94     52   +4.00 1 1 2 1 1   888    0 11.27 65.95 ----- 32.5 33.9 134.6 38.3 20.4 -24.7 19.3 -23.4 19.2 -23.9 20.2 -24.9
2026-02-14T12:27:26.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:27:26.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:27:26.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.435527
2026-02-14T12:27:26.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:27:26.865 [DEBUG] [Thread-185390] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:27:26.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:27:26.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:27:26.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:27:26.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:27:26.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:26:57', tmtdew=10.74, humidity=48.41, cloud=0.0, wind=31.03, temperature=13.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:27:09.533', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:27:26.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-14T12:27:26.959 [DEBUG] [Thread-185393] [transport.py] [_log()] starting thread (client mode): 0xa2dde0e0
2026-02-14T12:27:26.959 [DEBUG] [Thread-185393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:27:26.974 [DEBUG] [Thread-185393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:27:26.975 [INFO] [Thread-185393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:27:26.982 [DEBUG] [Thread-185393] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:27:26.983 [DEBUG] [Thread-185393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:27:26.983 [DEBUG] [Thread-185393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:27:26.983 [DEBUG] [Thread-185393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:27:26.983 [DEBUG] [Thread-185393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:27:26.983 [DEBUG] [Thread-185393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:27:26.983 [DEBUG] [Thread-185393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:27:26.984 [DEBUG] [Thread-185393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:27:26.984 [DEBUG] [Thread-185393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:27:26.984 [DEBUG] [Thread-185393] [transport.py] [_log()] client lang: <none>
2026-02-14T12:27:26.984 [DEBUG] [Thread-185393] [transport.py] [_log()] server lang: <none>
2026-02-14T12:27:26.984 [DEBUG] [Thread-185393] [transport.py] [_log()] kex follows: False
2026-02-14T12:27:26.984 [DEBUG] [Thread-185393] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:27:26.984 [DEBUG] [Thread-185393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:27:26.984 [DEBUG] [Thread-185393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:27:26.985 [DEBUG] [Thread-185393] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:27:26.985 [DEBUG] [Thread-185393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:27:26.985 [DEBUG] [Thread-185393] [transport.py] [_log()] Compression: none
2026-02-14T12:27:26.985 [DEBUG] [Thread-185393] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:27:27.042 [DEBUG] [Thread-185393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:27:27.043 [DEBUG] [Thread-185393] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:27:27.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:27:27.044 [DEBUG] [Thread-185393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:27:27.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:27:27.101 [DEBUG] [Thread-185393] [transport.py] [_log()] userauth is OK
2026-02-14T12:27:27.102 [DEBUG] [Thread-185393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:27:27.102 [DEBUG] [Thread-185393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:27:27.102 [DEBUG] [Thread-185393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:27:27.102 [DEBUG] [Thread-185393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:27:27.121 [INFO] [Thread-185393] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:27:27.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-14T12:27:27.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:27:27.952 [DEBUG] [Thread-185393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:27:27.952 [DEBUG] [Thread-185393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:27:28.000 [DEBUG] [Thread-185393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:27:28.001 [DEBUG] [Thread-185393] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:27:28.010 [DEBUG] [Thread-185393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:27:28.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:27:28.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:27:28.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-14T12:27:28.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:27:28.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:27:28.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:27:28.047 [DEBUG] [Thread-185393] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:27:40.586 [DEBUG] [Thread-185395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:27:55.638 [DEBUG] [Thread-185396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:27:58.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:27:58.068 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:27:58.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:27:59.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 27, 32), 10.79, 48.24, 0.0, 28.92, 13.87, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:27:59.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:27:32
2026-02-14T12:28:00.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:28:00.467 [DEBUG] [Thread-185397] [transport.py] [_log()] starting thread (client mode): 0xa2dc22c0
2026-02-14T12:28:00.468 [DEBUG] [Thread-185397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:28:00.491 [DEBUG] [Thread-185397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:28:00.491 [INFO] [Thread-185397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:28:00.494 [DEBUG] [Thread-185397] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:28:00.495 [DEBUG] [Thread-185397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:28:00.495 [DEBUG] [Thread-185397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:28:00.495 [DEBUG] [Thread-185397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:28:00.495 [DEBUG] [Thread-185397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:28:00.495 [DEBUG] [Thread-185397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:28:00.495 [DEBUG] [Thread-185397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:28:00.495 [DEBUG] [Thread-185397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:28:00.495 [DEBUG] [Thread-185397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:28:00.495 [DEBUG] [Thread-185397] [transport.py] [_log()] client lang: <none>
2026-02-14T12:28:00.495 [DEBUG] [Thread-185397] [transport.py] [_log()] server lang: <none>
2026-02-14T12:28:00.495 [DEBUG] [Thread-185397] [transport.py] [_log()] kex follows: False
2026-02-14T12:28:00.496 [DEBUG] [Thread-185397] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:28:00.496 [DEBUG] [Thread-185397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:28:00.496 [DEBUG] [Thread-185397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:28:00.496 [DEBUG] [Thread-185397] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:28:00.496 [DEBUG] [Thread-185397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:28:00.496 [DEBUG] [Thread-185397] [transport.py] [_log()] Compression: none
2026-02-14T12:28:00.496 [DEBUG] [Thread-185397] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:28:00.518 [DEBUG] [Thread-185397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:28:00.519 [DEBUG] [Thread-185397] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:28:00.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:28:00.520 [DEBUG] [Thread-185397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:28:00.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:28:00.561 [DEBUG] [Thread-185397] [transport.py] [_log()] userauth is OK
2026-02-14T12:28:00.561 [DEBUG] [Thread-185397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:28:00.561 [DEBUG] [Thread-185397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:28:00.562 [DEBUG] [Thread-185397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:28:00.562 [DEBUG] [Thread-185397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:28:00.584 [INFO] [Thread-185397] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:28:00.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:28:01.224 [DEBUG] [Thread-185397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:28:01.224 [DEBUG] [Thread-185397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:28:01.225 [DEBUG] [Thread-185397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:28:01.265 [DEBUG] [Thread-185397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:28:01.266 [DEBUG] [Thread-185397] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:28:01.270 [DEBUG] [Thread-185397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:28:01.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:28:01.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:28:01.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:28:01.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:28:01.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:28:01.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:28:01.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:28:01.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:28:01.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:28:01.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.435874 -999.00  +13.70  29.42     51   +4.00 1 1 1 1 1   888    0 10.96 59.50 ----- 26.7 29.4 140.8 36.2 20.3 -25.2 19.3 -25.1 19.1 -23.7 20.1 -26.2
2026-02-14T12:28:01.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:28:01.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:28:01.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.435874
2026-02-14T12:28:01.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:28:01.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:28:01.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:28:01.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:28:01.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:28:01.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:27:32', tmtdew=10.79, humidity=48.24, cloud=0.0, wind=28.92, temperature=13.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:27:39.514', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:28:01.296 [DEBUG] [Thread-185397] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:28:01.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:28:01.410 [DEBUG] [Thread-185400] [transport.py] [_log()] starting thread (client mode): 0xa5741c00
2026-02-14T12:28:01.410 [DEBUG] [Thread-185400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:28:01.425 [DEBUG] [Thread-185400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:28:01.425 [INFO] [Thread-185400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:28:01.441 [DEBUG] [Thread-185400] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:28:01.442 [DEBUG] [Thread-185400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:28:01.442 [DEBUG] [Thread-185400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:28:01.442 [DEBUG] [Thread-185400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:28:01.442 [DEBUG] [Thread-185400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:28:01.442 [DEBUG] [Thread-185400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:28:01.442 [DEBUG] [Thread-185400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:28:01.442 [DEBUG] [Thread-185400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:28:01.442 [DEBUG] [Thread-185400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:28:01.442 [DEBUG] [Thread-185400] [transport.py] [_log()] client lang: <none>
2026-02-14T12:28:01.442 [DEBUG] [Thread-185400] [transport.py] [_log()] server lang: <none>
2026-02-14T12:28:01.442 [DEBUG] [Thread-185400] [transport.py] [_log()] kex follows: False
2026-02-14T12:28:01.443 [DEBUG] [Thread-185400] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:28:01.443 [DEBUG] [Thread-185400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:28:01.443 [DEBUG] [Thread-185400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:28:01.443 [DEBUG] [Thread-185400] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:28:01.443 [DEBUG] [Thread-185400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:28:01.443 [DEBUG] [Thread-185400] [transport.py] [_log()] Compression: none
2026-02-14T12:28:01.443 [DEBUG] [Thread-185400] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:28:01.489 [DEBUG] [Thread-185400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:28:01.490 [DEBUG] [Thread-185400] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:28:01.491 [DEBUG] [Thread-185400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:28:01.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:28:01.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:28:01.545 [DEBUG] [Thread-185400] [transport.py] [_log()] userauth is OK
2026-02-14T12:28:01.546 [DEBUG] [Thread-185400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:28:01.546 [DEBUG] [Thread-185400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:28:01.546 [DEBUG] [Thread-185400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:28:01.546 [DEBUG] [Thread-185400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:28:01.564 [INFO] [Thread-185400] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:28:01.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T12:28:01.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:28:02.425 [DEBUG] [Thread-185400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:28:02.425 [DEBUG] [Thread-185400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:28:02.473 [DEBUG] [Thread-185400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:28:02.474 [DEBUG] [Thread-185400] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:28:02.483 [DEBUG] [Thread-185400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:28:02.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:28:02.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:28:02.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-14T12:28:02.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:28:02.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:28:02.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:28:02.520 [DEBUG] [Thread-185400] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:28:10.678 [DEBUG] [Thread-185402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:28:21.366 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:28:21.367 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:28:21.605 [DEBUG] [Thread-185403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:28:25.742 [DEBUG] [Thread-185404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:28:32.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:28:32.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:28:32.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:28:34.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 28, 8), 10.71, 48.42, 0.0, 27.51, 13.57, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:28:34.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:28:08
2026-02-14T12:28:34.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:28:35.014 [DEBUG] [Thread-185405] [transport.py] [_log()] starting thread (client mode): 0xa81d7490
2026-02-14T12:28:35.014 [DEBUG] [Thread-185405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:28:35.033 [DEBUG] [Thread-185405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:28:35.033 [INFO] [Thread-185405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:28:35.034 [DEBUG] [Thread-185405] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:28:35.034 [DEBUG] [Thread-185405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:28:35.034 [DEBUG] [Thread-185405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:28:35.034 [DEBUG] [Thread-185405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:28:35.034 [DEBUG] [Thread-185405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:28:35.034 [DEBUG] [Thread-185405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:28:35.034 [DEBUG] [Thread-185405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:28:35.034 [DEBUG] [Thread-185405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:28:35.034 [DEBUG] [Thread-185405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:28:35.034 [DEBUG] [Thread-185405] [transport.py] [_log()] client lang: <none>
2026-02-14T12:28:35.034 [DEBUG] [Thread-185405] [transport.py] [_log()] server lang: <none>
2026-02-14T12:28:35.034 [DEBUG] [Thread-185405] [transport.py] [_log()] kex follows: False
2026-02-14T12:28:35.035 [DEBUG] [Thread-185405] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:28:35.035 [DEBUG] [Thread-185405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:28:35.035 [DEBUG] [Thread-185405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:28:35.035 [DEBUG] [Thread-185405] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:28:35.035 [DEBUG] [Thread-185405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:28:35.035 [DEBUG] [Thread-185405] [transport.py] [_log()] Compression: none
2026-02-14T12:28:35.035 [DEBUG] [Thread-185405] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:28:35.043 [DEBUG] [Thread-185405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:28:35.043 [DEBUG] [Thread-185405] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:28:35.044 [DEBUG] [Thread-185405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:28:35.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:28:35.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:28:35.046 [DEBUG] [Thread-185405] [transport.py] [_log()] userauth is OK
2026-02-14T12:28:35.046 [DEBUG] [Thread-185405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:28:35.046 [DEBUG] [Thread-185405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:28:35.046 [DEBUG] [Thread-185405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:28:35.046 [DEBUG] [Thread-185405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:28:35.064 [INFO] [Thread-185405] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:28:35.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:28:35.686 [DEBUG] [Thread-185405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:28:35.687 [DEBUG] [Thread-185405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:28:35.687 [DEBUG] [Thread-185405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:28:35.727 [DEBUG] [Thread-185405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:28:35.728 [DEBUG] [Thread-185405] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:28:35.731 [DEBUG] [Thread-185405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:28:35.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:28:35.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:28:35.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:28:35.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:28:35.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:28:35.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:28:35.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:28:35.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:28:35.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:28:35.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.436222 -999.00  +13.60  23.16     53   +4.30 1 2 1 1 1   888    0 10.99 57.96 ----- 22.6 23.2 135.2 31.2 20.3 -23.4 19.4 -23.3 19.3 -21.9 20.2 -23.6
2026-02-14T12:28:35.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:28:35.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:28:35.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.436222
2026-02-14T12:28:35.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:28:35.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:28:35.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:28:35.757 [DEBUG] [Thread-185405] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:28:35.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:28:35.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T12:28:35.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:28:08', tmtdew=10.71, humidity=48.42, cloud=0.0, wind=27.51, temperature=13.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:28:09.581', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:28:35.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-14T12:28:35.855 [DEBUG] [Thread-185408] [transport.py] [_log()] starting thread (client mode): 0xa2d3ee60
2026-02-14T12:28:35.856 [DEBUG] [Thread-185408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:28:35.870 [DEBUG] [Thread-185408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:28:35.871 [INFO] [Thread-185408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:28:35.878 [DEBUG] [Thread-185408] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:28:35.878 [DEBUG] [Thread-185408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:28:35.878 [DEBUG] [Thread-185408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:28:35.878 [DEBUG] [Thread-185408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:28:35.878 [DEBUG] [Thread-185408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:28:35.878 [DEBUG] [Thread-185408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:28:35.878 [DEBUG] [Thread-185408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:28:35.879 [DEBUG] [Thread-185408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:28:35.879 [DEBUG] [Thread-185408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:28:35.879 [DEBUG] [Thread-185408] [transport.py] [_log()] client lang: <none>
2026-02-14T12:28:35.879 [DEBUG] [Thread-185408] [transport.py] [_log()] server lang: <none>
2026-02-14T12:28:35.879 [DEBUG] [Thread-185408] [transport.py] [_log()] kex follows: False
2026-02-14T12:28:35.879 [DEBUG] [Thread-185408] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:28:35.879 [DEBUG] [Thread-185408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:28:35.879 [DEBUG] [Thread-185408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:28:35.879 [DEBUG] [Thread-185408] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:28:35.879 [DEBUG] [Thread-185408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:28:35.879 [DEBUG] [Thread-185408] [transport.py] [_log()] Compression: none
2026-02-14T12:28:35.879 [DEBUG] [Thread-185408] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:28:35.938 [DEBUG] [Thread-185408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:28:35.938 [DEBUG] [Thread-185408] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:28:35.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:28:35.939 [DEBUG] [Thread-185408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:28:35.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:28:35.994 [DEBUG] [Thread-185408] [transport.py] [_log()] userauth is OK
2026-02-14T12:28:35.995 [DEBUG] [Thread-185408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:28:35.995 [DEBUG] [Thread-185408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:28:35.995 [DEBUG] [Thread-185408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:28:35.995 [DEBUG] [Thread-185408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:28:36.014 [INFO] [Thread-185408] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:28:36.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-14T12:28:36.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:28:36.851 [DEBUG] [Thread-185408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:28:36.851 [DEBUG] [Thread-185408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:28:36.899 [DEBUG] [Thread-185408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:28:36.900 [DEBUG] [Thread-185408] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:28:36.909 [DEBUG] [Thread-185408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:28:36.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:28:36.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-14T12:28:36.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-14T12:28:36.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:28:36.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:28:36.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:28:36.946 [DEBUG] [Thread-185408] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:28:40.781 [DEBUG] [Thread-185410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:28:55.841 [DEBUG] [Thread-185411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:29:06.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:29:06.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:29:06.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-14T12:29:09.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 28, 44), 10.96, 47.74, 0.0, 28.23, 13.75, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:29:09.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:28:44
2026-02-14T12:29:09.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:29:09.704 [DEBUG] [Thread-185412] [transport.py] [_log()] starting thread (client mode): 0xa2d3e410
2026-02-14T12:29:09.705 [DEBUG] [Thread-185412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:29:09.725 [DEBUG] [Thread-185412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:29:09.726 [INFO] [Thread-185412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:29:09.728 [DEBUG] [Thread-185412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:29:09.729 [DEBUG] [Thread-185412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:29:09.729 [DEBUG] [Thread-185412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:29:09.729 [DEBUG] [Thread-185412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:29:09.729 [DEBUG] [Thread-185412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:29:09.729 [DEBUG] [Thread-185412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:29:09.729 [DEBUG] [Thread-185412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:29:09.729 [DEBUG] [Thread-185412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:29:09.729 [DEBUG] [Thread-185412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:29:09.729 [DEBUG] [Thread-185412] [transport.py] [_log()] client lang: <none>
2026-02-14T12:29:09.729 [DEBUG] [Thread-185412] [transport.py] [_log()] server lang: <none>
2026-02-14T12:29:09.729 [DEBUG] [Thread-185412] [transport.py] [_log()] kex follows: False
2026-02-14T12:29:09.729 [DEBUG] [Thread-185412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:29:09.729 [DEBUG] [Thread-185412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:29:09.729 [DEBUG] [Thread-185412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:29:09.729 [DEBUG] [Thread-185412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:29:09.729 [DEBUG] [Thread-185412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:29:09.729 [DEBUG] [Thread-185412] [transport.py] [_log()] Compression: none
2026-02-14T12:29:09.729 [DEBUG] [Thread-185412] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:29:09.737 [DEBUG] [Thread-185412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:29:09.738 [DEBUG] [Thread-185412] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:29:09.738 [DEBUG] [Thread-185412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:29:09.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:29:09.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:29:09.739 [DEBUG] [Thread-185412] [transport.py] [_log()] userauth is OK
2026-02-14T12:29:09.740 [DEBUG] [Thread-185412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:29:09.740 [DEBUG] [Thread-185412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:29:09.740 [DEBUG] [Thread-185412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:29:09.740 [DEBUG] [Thread-185412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:29:09.754 [INFO] [Thread-185412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:29:09.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:29:10.405 [DEBUG] [Thread-185412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:29:10.406 [DEBUG] [Thread-185412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:29:10.406 [DEBUG] [Thread-185412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:29:10.446 [DEBUG] [Thread-185412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:29:10.447 [DEBUG] [Thread-185412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:29:10.450 [DEBUG] [Thread-185412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:29:10.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:29:10.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:29:10.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:29:10.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:29:10.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:29:10.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:29:10.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:29:10.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:29:10.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:29:10.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.436569 -999.00  +14.10  26.22     51   +4.30 1 1 1 1 1   888    0 11.14 51.39 ----- 30.1 26.2 153.4 36.9 20.4 -26.9 19.5 -24.5 19.2 -24.4 20.3 -25.8
2026-02-14T12:29:10.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:29:10.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:29:10.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.436569
2026-02-14T12:29:10.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:29:10.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:29:10.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:29:10.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:29:10.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:29:10.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:28:44', tmtdew=10.96, humidity=47.74, cloud=0.0, wind=28.23, temperature=13.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:28:39.562', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:29:10.478 [DEBUG] [Thread-185412] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:29: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-14T12:29:10.573 [DEBUG] [Thread-185415] [transport.py] [_log()] starting thread (client mode): 0xa2db7f40
2026-02-14T12:29:10.573 [DEBUG] [Thread-185415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:29:10.588 [DEBUG] [Thread-185415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:29:10.588 [INFO] [Thread-185415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:29:10.596 [DEBUG] [Thread-185415] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:29:10.596 [DEBUG] [Thread-185415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:29:10.596 [DEBUG] [Thread-185415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:29:10.596 [DEBUG] [Thread-185415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:29:10.596 [DEBUG] [Thread-185415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:29:10.596 [DEBUG] [Thread-185415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:29:10.597 [DEBUG] [Thread-185415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:29:10.597 [DEBUG] [Thread-185415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:29:10.597 [DEBUG] [Thread-185415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:29:10.597 [DEBUG] [Thread-185415] [transport.py] [_log()] client lang: <none>
2026-02-14T12:29:10.597 [DEBUG] [Thread-185415] [transport.py] [_log()] server lang: <none>
2026-02-14T12:29:10.597 [DEBUG] [Thread-185415] [transport.py] [_log()] kex follows: False
2026-02-14T12:29:10.597 [DEBUG] [Thread-185415] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:29:10.597 [DEBUG] [Thread-185415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:29:10.598 [DEBUG] [Thread-185415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:29:10.598 [DEBUG] [Thread-185415] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:29:10.598 [DEBUG] [Thread-185415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:29:10.598 [DEBUG] [Thread-185415] [transport.py] [_log()] Compression: none
2026-02-14T12:29:10.598 [DEBUG] [Thread-185415] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:29:10.654 [DEBUG] [Thread-185415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:29:10.655 [DEBUG] [Thread-185415] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:29:10.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:29:10.656 [DEBUG] [Thread-185415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:29:10.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:29:10.710 [DEBUG] [Thread-185415] [transport.py] [_log()] userauth is OK
2026-02-14T12:29:10.710 [DEBUG] [Thread-185415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:29:10.711 [DEBUG] [Thread-185415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:29:10.711 [DEBUG] [Thread-185415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:29:10.711 [DEBUG] [Thread-185415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:29:10.729 [INFO] [Thread-185415] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:29:10.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-14T12:29:10.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:29:10.881 [DEBUG] [Thread-185417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:29:11.540 [DEBUG] [Thread-185415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:29:11.540 [DEBUG] [Thread-185415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:29:11.588 [DEBUG] [Thread-185415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:29:11.588 [DEBUG] [Thread-185415] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:29:11.597 [DEBUG] [Thread-185415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:29:11.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:29:11.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-14T12:29:11.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:29:11.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:29:11.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:29:11.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:29:11.633 [DEBUG] [Thread-185415] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:29:21.509 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:29:21.510 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:29:21.638 [DEBUG] [Thread-185418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:29:25.938 [DEBUG] [Thread-185419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:29:40.974 [DEBUG] [Thread-185420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:29:41.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:29:41.649 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:29:41.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-14T12:29:43.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 29, 19), 10.94, 47.85, 0.0, 27.01, 13.88, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:29:43.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:29:19
2026-02-14T12:29:43.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:29:44.136 [DEBUG] [Thread-185421] [transport.py] [_log()] starting thread (client mode): 0xa2db5900
2026-02-14T12:29:44.136 [DEBUG] [Thread-185421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:29:44.156 [DEBUG] [Thread-185421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:29:44.156 [INFO] [Thread-185421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:29:44.159 [DEBUG] [Thread-185421] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:29:44.159 [DEBUG] [Thread-185421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:29:44.159 [DEBUG] [Thread-185421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:29:44.159 [DEBUG] [Thread-185421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:29:44.159 [DEBUG] [Thread-185421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:29:44.159 [DEBUG] [Thread-185421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:29:44.159 [DEBUG] [Thread-185421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:29:44.160 [DEBUG] [Thread-185421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:29:44.160 [DEBUG] [Thread-185421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:29:44.160 [DEBUG] [Thread-185421] [transport.py] [_log()] client lang: <none>
2026-02-14T12:29:44.160 [DEBUG] [Thread-185421] [transport.py] [_log()] server lang: <none>
2026-02-14T12:29:44.160 [DEBUG] [Thread-185421] [transport.py] [_log()] kex follows: False
2026-02-14T12:29:44.160 [DEBUG] [Thread-185421] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:29:44.160 [DEBUG] [Thread-185421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:29:44.160 [DEBUG] [Thread-185421] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:29:44.160 [DEBUG] [Thread-185421] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:29:44.160 [DEBUG] [Thread-185421] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:29:44.160 [DEBUG] [Thread-185421] [transport.py] [_log()] Compression: none
2026-02-14T12:29:44.160 [DEBUG] [Thread-185421] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:29:44.178 [DEBUG] [Thread-185421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:29:44.178 [DEBUG] [Thread-185421] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:29:44.179 [DEBUG] [Thread-185421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:29:44.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:29:44.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:29:44.180 [DEBUG] [Thread-185421] [transport.py] [_log()] userauth is OK
2026-02-14T12:29:44.180 [DEBUG] [Thread-185421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:29:44.180 [DEBUG] [Thread-185421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:29:44.180 [DEBUG] [Thread-185421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:29:44.180 [DEBUG] [Thread-185421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:29:44.198 [INFO] [Thread-185421] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:29:44.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:29:44.833 [DEBUG] [Thread-185421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:29:44.834 [DEBUG] [Thread-185421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:29:44.834 [DEBUG] [Thread-185421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:29:44.874 [DEBUG] [Thread-185421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:29:44.875 [DEBUG] [Thread-185421] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:29:44.878 [DEBUG] [Thread-185421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:29:44.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:29:44.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:29:44.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:29:44.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:29:44.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:29:44.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:29:44.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:29:44.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:29:44.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:29:44.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.436916 -999.00  +13.80  26.94     50   +3.80 1 1 1 1 1   888    0 10.73 51.84 ----- 23.7 26.9 151.6 40.9 20.3 -25.7 19.3 -24.8 19.1 -23.5 20.2 -25.1
2026-02-14T12:29:44.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:29:44.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:29:44.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.436916
2026-02-14T12:29:44.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:29:44.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:29:44.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:29:44.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:29:44.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:29:44.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:29:19', tmtdew=10.94, humidity=47.85, cloud=0.0, wind=27.01, temperature=13.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:29:09.542', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:29:44.905 [DEBUG] [Thread-185421] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:29:44.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-14T12:29:45.001 [DEBUG] [Thread-185424] [transport.py] [_log()] starting thread (client mode): 0xa2db4490
2026-02-14T12:29:45.002 [DEBUG] [Thread-185424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:29:45.016 [DEBUG] [Thread-185424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:29:45.016 [INFO] [Thread-185424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:29:45.024 [DEBUG] [Thread-185424] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:29:45.025 [DEBUG] [Thread-185424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:29:45.025 [DEBUG] [Thread-185424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:29:45.025 [DEBUG] [Thread-185424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:29:45.025 [DEBUG] [Thread-185424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:29:45.025 [DEBUG] [Thread-185424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:29:45.025 [DEBUG] [Thread-185424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:29:45.025 [DEBUG] [Thread-185424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:29:45.025 [DEBUG] [Thread-185424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:29:45.025 [DEBUG] [Thread-185424] [transport.py] [_log()] client lang: <none>
2026-02-14T12:29:45.025 [DEBUG] [Thread-185424] [transport.py] [_log()] server lang: <none>
2026-02-14T12:29:45.025 [DEBUG] [Thread-185424] [transport.py] [_log()] kex follows: False
2026-02-14T12:29:45.025 [DEBUG] [Thread-185424] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:29:45.025 [DEBUG] [Thread-185424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:29:45.025 [DEBUG] [Thread-185424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:29:45.025 [DEBUG] [Thread-185424] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:29:45.025 [DEBUG] [Thread-185424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:29:45.026 [DEBUG] [Thread-185424] [transport.py] [_log()] Compression: none
2026-02-14T12:29:45.026 [DEBUG] [Thread-185424] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:29:45.081 [DEBUG] [Thread-185424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:29:45.082 [DEBUG] [Thread-185424] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:29:45.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:29:45.083 [DEBUG] [Thread-185424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:29:45.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:29:45.138 [DEBUG] [Thread-185424] [transport.py] [_log()] userauth is OK
2026-02-14T12:29:45.138 [DEBUG] [Thread-185424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:29:45.139 [DEBUG] [Thread-185424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:29:45.139 [DEBUG] [Thread-185424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:29:45.139 [DEBUG] [Thread-185424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:29:45.157 [INFO] [Thread-185424] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:29:45.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-14T12:29:45.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:29:45.940 [DEBUG] [Thread-185424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:29:45.940 [DEBUG] [Thread-185424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:29:45.988 [DEBUG] [Thread-185424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:29:45.988 [DEBUG] [Thread-185424] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:29:45.997 [DEBUG] [Thread-185424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:29:46.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:29:46.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-14T12:29:46.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:29:46.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:29:46.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:29:46.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:29:46.034 [DEBUG] [Thread-185424] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:29:56.008 [DEBUG] [Thread-185426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:30:11.060 [DEBUG] [Thread-185427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:30:16.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:30:16.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:30:16.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-14T12:30:18.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 29, 54), 11.82, 44.96, 0.0, 30.74, 14.32, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:30:18.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:29:54
2026-02-14T12:30:18.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:30:18.683 [DEBUG] [Thread-185428] [transport.py] [_log()] starting thread (client mode): 0xa2d3e350
2026-02-14T12:30:18.683 [DEBUG] [Thread-185428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:30:18.705 [DEBUG] [Thread-185428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:30:18.705 [INFO] [Thread-185428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:30:18.708 [DEBUG] [Thread-185428] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:30:18.708 [DEBUG] [Thread-185428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:30:18.708 [DEBUG] [Thread-185428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:30:18.709 [DEBUG] [Thread-185428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:30:18.709 [DEBUG] [Thread-185428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:30:18.709 [DEBUG] [Thread-185428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:30:18.709 [DEBUG] [Thread-185428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:30:18.709 [DEBUG] [Thread-185428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:30:18.709 [DEBUG] [Thread-185428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:30:18.709 [DEBUG] [Thread-185428] [transport.py] [_log()] client lang: <none>
2026-02-14T12:30:18.709 [DEBUG] [Thread-185428] [transport.py] [_log()] server lang: <none>
2026-02-14T12:30:18.709 [DEBUG] [Thread-185428] [transport.py] [_log()] kex follows: False
2026-02-14T12:30:18.709 [DEBUG] [Thread-185428] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:30:18.709 [DEBUG] [Thread-185428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:30:18.709 [DEBUG] [Thread-185428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:30:18.709 [DEBUG] [Thread-185428] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:30:18.709 [DEBUG] [Thread-185428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:30:18.709 [DEBUG] [Thread-185428] [transport.py] [_log()] Compression: none
2026-02-14T12:30:18.709 [DEBUG] [Thread-185428] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:30:18.726 [DEBUG] [Thread-185428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:30:18.727 [DEBUG] [Thread-185428] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:30:18.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:30:18.728 [DEBUG] [Thread-185428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:30:18.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:30:18.730 [DEBUG] [Thread-185428] [transport.py] [_log()] userauth is OK
2026-02-14T12:30:18.731 [DEBUG] [Thread-185428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:30:18.731 [DEBUG] [Thread-185428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:30:18.731 [DEBUG] [Thread-185428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:30:18.731 [DEBUG] [Thread-185428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:30:18.754 [INFO] [Thread-185428] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:30:18.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:30:19.334 [DEBUG] [Thread-185428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:30:19.334 [DEBUG] [Thread-185428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:30:19.335 [DEBUG] [Thread-185428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:30:19.375 [DEBUG] [Thread-185428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:30:19.376 [DEBUG] [Thread-185428] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:30:19.379 [DEBUG] [Thread-185428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:30:19.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:30:19.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:30:19.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:30:19.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:30:19.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:30:19.403 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:30:19.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:30:19.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:30:19.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:30:19.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.437263 -999.00  +13.50  24.54     51   +3.70 1 1 1 1 1   888    0 11.12 53.23 ----- 17.9 24.5 175.8 38.4 20.2 -26.2 19.0 -30.9 19.0 -24.3 20.1 -26.5
2026-02-14T12:30:19.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:30:19.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:30:19.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.437263
2026-02-14T12:30:19.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:30:19.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:30:19.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:30:19.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:30:19.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:30:19.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:29:54', tmtdew=11.82, humidity=44.96, cloud=0.0, wind=30.74, temperature=14.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:29:39.523', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:30:19.406 [DEBUG] [Thread-185428] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:30:19.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-14T12:30:19.502 [DEBUG] [Thread-185431] [transport.py] [_log()] starting thread (client mode): 0xa5741900
2026-02-14T12:30:19.502 [DEBUG] [Thread-185431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:30:19.517 [DEBUG] [Thread-185431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:30:19.517 [INFO] [Thread-185431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:30:19.525 [DEBUG] [Thread-185431] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:30:19.525 [DEBUG] [Thread-185431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:30:19.525 [DEBUG] [Thread-185431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:30:19.525 [DEBUG] [Thread-185431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:30:19.525 [DEBUG] [Thread-185431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:30:19.525 [DEBUG] [Thread-185431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:30:19.525 [DEBUG] [Thread-185431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:30:19.525 [DEBUG] [Thread-185431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:30:19.525 [DEBUG] [Thread-185431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:30:19.525 [DEBUG] [Thread-185431] [transport.py] [_log()] client lang: <none>
2026-02-14T12:30:19.525 [DEBUG] [Thread-185431] [transport.py] [_log()] server lang: <none>
2026-02-14T12:30:19.525 [DEBUG] [Thread-185431] [transport.py] [_log()] kex follows: False
2026-02-14T12:30:19.525 [DEBUG] [Thread-185431] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:30:19.525 [DEBUG] [Thread-185431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:30:19.526 [DEBUG] [Thread-185431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:30:19.526 [DEBUG] [Thread-185431] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:30:19.526 [DEBUG] [Thread-185431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:30:19.526 [DEBUG] [Thread-185431] [transport.py] [_log()] Compression: none
2026-02-14T12:30:19.526 [DEBUG] [Thread-185431] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:30:19.581 [DEBUG] [Thread-185431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:30:19.582 [DEBUG] [Thread-185431] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:30:19.582 [DEBUG] [Thread-185431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:30:19.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:30:19.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:30:19.638 [DEBUG] [Thread-185431] [transport.py] [_log()] userauth is OK
2026-02-14T12:30:19.638 [DEBUG] [Thread-185431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:30:19.638 [DEBUG] [Thread-185431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:30:19.639 [DEBUG] [Thread-185431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:30:19.639 [DEBUG] [Thread-185431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:30:19.657 [INFO] [Thread-185431] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:30:19.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-14T12:30:19.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:30:20.439 [DEBUG] [Thread-185431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:30:20.440 [DEBUG] [Thread-185431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:30:20.487 [DEBUG] [Thread-185431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:30:20.488 [DEBUG] [Thread-185431] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:30:20.496 [DEBUG] [Thread-185431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:30:20.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:30:20.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-14T12:30:20.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-14T12:30:20.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:30:20.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:30:20.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:30:20.533 [DEBUG] [Thread-185431] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:30:21.654 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:30:21.655 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:30:21.673 [DEBUG] [Thread-185433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:30:26.097 [DEBUG] [Thread-185434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:30:41.149 [DEBUG] [Thread-185435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:30:50.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:30:50.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:30:50.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-14T12:30:52.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 30, 30), 12.18, 43.9, 0.0, 30.47, 14.51, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:30:52.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:30:30
2026-02-14T12:30:52.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:30:53.134 [DEBUG] [Thread-185436] [transport.py] [_log()] starting thread (client mode): 0xa2db4ca0
2026-02-14T12:30:53.134 [DEBUG] [Thread-185436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:30:53.149 [DEBUG] [Thread-185436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:30:53.149 [INFO] [Thread-185436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:30:53.150 [DEBUG] [Thread-185436] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:30:53.150 [DEBUG] [Thread-185436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:30:53.150 [DEBUG] [Thread-185436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:30:53.150 [DEBUG] [Thread-185436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:30:53.150 [DEBUG] [Thread-185436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:30:53.150 [DEBUG] [Thread-185436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:30:53.150 [DEBUG] [Thread-185436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:30:53.150 [DEBUG] [Thread-185436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:30:53.150 [DEBUG] [Thread-185436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:30:53.150 [DEBUG] [Thread-185436] [transport.py] [_log()] client lang: <none>
2026-02-14T12:30:53.150 [DEBUG] [Thread-185436] [transport.py] [_log()] server lang: <none>
2026-02-14T12:30:53.150 [DEBUG] [Thread-185436] [transport.py] [_log()] kex follows: False
2026-02-14T12:30:53.150 [DEBUG] [Thread-185436] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:30:53.151 [DEBUG] [Thread-185436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:30:53.151 [DEBUG] [Thread-185436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:30:53.151 [DEBUG] [Thread-185436] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:30:53.151 [DEBUG] [Thread-185436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:30:53.151 [DEBUG] [Thread-185436] [transport.py] [_log()] Compression: none
2026-02-14T12:30:53.151 [DEBUG] [Thread-185436] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:30:53.161 [DEBUG] [Thread-185436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:30:53.161 [DEBUG] [Thread-185436] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:30:53.161 [DEBUG] [Thread-185436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:30:53.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:30:53.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:30:53.163 [DEBUG] [Thread-185436] [transport.py] [_log()] userauth is OK
2026-02-14T12:30:53.163 [DEBUG] [Thread-185436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:30:53.163 [DEBUG] [Thread-185436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:30:53.163 [DEBUG] [Thread-185436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:30:53.164 [DEBUG] [Thread-185436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:30:53.186 [INFO] [Thread-185436] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:30:53.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:30:53.764 [DEBUG] [Thread-185436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:30:53.764 [DEBUG] [Thread-185436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:30:53.765 [DEBUG] [Thread-185436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:30:53.805 [DEBUG] [Thread-185436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:30:53.805 [DEBUG] [Thread-185436] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:30:53.809 [DEBUG] [Thread-185436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:30:53.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:30:53.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:30:53.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:30:53.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:30:53.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:30:53.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:30:53.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:30:53.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:30:53.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:30:53.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.437958 -999.00  +14.00  27.68     50   +3.90 1 1 1 1 1   888    0 10.99 51.79 ----- 26.8 27.7 170.4 40.0 20.3 -25.8 19.1 -24.0 19.2 -22.9 20.3 -25.0
2026-02-14T12:30:53.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:30:53.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:30:53.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.437958
2026-02-14T12:30:53.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:30:53.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:30:53.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:30:53.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:30:53.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:30:53.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:30:30', tmtdew=12.18, humidity=43.9, cloud=0.0, wind=30.47, temperature=14.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:30:39.571', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:30:53.836 [DEBUG] [Thread-185436] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:30:53.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:30:53.935 [DEBUG] [Thread-185439] [transport.py] [_log()] starting thread (client mode): 0xa2db4580
2026-02-14T12:30:53.935 [DEBUG] [Thread-185439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:30:53.949 [DEBUG] [Thread-185439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:30:53.950 [INFO] [Thread-185439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:30:53.957 [DEBUG] [Thread-185439] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:30:53.957 [DEBUG] [Thread-185439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:30:53.957 [DEBUG] [Thread-185439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:30:53.958 [DEBUG] [Thread-185439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:30:53.958 [DEBUG] [Thread-185439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:30:53.958 [DEBUG] [Thread-185439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:30:53.958 [DEBUG] [Thread-185439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:30:53.958 [DEBUG] [Thread-185439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:30:53.958 [DEBUG] [Thread-185439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:30:53.958 [DEBUG] [Thread-185439] [transport.py] [_log()] client lang: <none>
2026-02-14T12:30:53.958 [DEBUG] [Thread-185439] [transport.py] [_log()] server lang: <none>
2026-02-14T12:30:53.958 [DEBUG] [Thread-185439] [transport.py] [_log()] kex follows: False
2026-02-14T12:30:53.958 [DEBUG] [Thread-185439] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:30:53.958 [DEBUG] [Thread-185439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:30:53.958 [DEBUG] [Thread-185439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:30:53.958 [DEBUG] [Thread-185439] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:30:53.958 [DEBUG] [Thread-185439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:30:53.958 [DEBUG] [Thread-185439] [transport.py] [_log()] Compression: none
2026-02-14T12:30:53.958 [DEBUG] [Thread-185439] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:30:54.018 [DEBUG] [Thread-185439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:30:54.018 [DEBUG] [Thread-185439] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:30:54.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:30:54.020 [DEBUG] [Thread-185439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:30:54.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:30:54.074 [DEBUG] [Thread-185439] [transport.py] [_log()] userauth is OK
2026-02-14T12:30:54.074 [DEBUG] [Thread-185439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:30:54.074 [DEBUG] [Thread-185439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:30:54.075 [DEBUG] [Thread-185439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:30:54.075 [DEBUG] [Thread-185439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:30:54.094 [INFO] [Thread-185439] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:30:54.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T12:30:54.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:30:54.882 [DEBUG] [Thread-185439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:30:54.882 [DEBUG] [Thread-185439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:30:54.930 [DEBUG] [Thread-185439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:30:54.931 [DEBUG] [Thread-185439] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:30:54.940 [DEBUG] [Thread-185439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:30:54.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:30:54.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-14T12:30:54.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:30:54.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:30:54.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:30:54.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:30:54.976 [DEBUG] [Thread-185439] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:30:56.185 [DEBUG] [Thread-185441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:31:11.240 [DEBUG] [Thread-185442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:31:21.720 [DEBUG] [Thread-185443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:31:21.802 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:31:21.803 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:31:24.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:31:24.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:31:25.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-14T12:31:26.277 [DEBUG] [Thread-185444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:31:26.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 31, 5), 12.44, 43.18, 0.0, 34.62, 14.73, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:31:26.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:31:05
2026-02-14T12:31:27.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:31:27.424 [DEBUG] [Thread-185445] [transport.py] [_log()] starting thread (client mode): 0xa2d19000
2026-02-14T12:31:27.424 [DEBUG] [Thread-185445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:31:27.443 [DEBUG] [Thread-185445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:31:27.443 [INFO] [Thread-185445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:31:27.445 [DEBUG] [Thread-185445] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:31:27.445 [DEBUG] [Thread-185445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:31:27.445 [DEBUG] [Thread-185445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:31:27.445 [DEBUG] [Thread-185445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:31:27.445 [DEBUG] [Thread-185445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:31:27.445 [DEBUG] [Thread-185445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:31:27.445 [DEBUG] [Thread-185445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:31:27.446 [DEBUG] [Thread-185445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:31:27.446 [DEBUG] [Thread-185445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:31:27.446 [DEBUG] [Thread-185445] [transport.py] [_log()] client lang: <none>
2026-02-14T12:31:27.446 [DEBUG] [Thread-185445] [transport.py] [_log()] server lang: <none>
2026-02-14T12:31:27.446 [DEBUG] [Thread-185445] [transport.py] [_log()] kex follows: False
2026-02-14T12:31:27.446 [DEBUG] [Thread-185445] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:31:27.446 [DEBUG] [Thread-185445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:31:27.446 [DEBUG] [Thread-185445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:31:27.446 [DEBUG] [Thread-185445] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:31:27.446 [DEBUG] [Thread-185445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:31:27.446 [DEBUG] [Thread-185445] [transport.py] [_log()] Compression: none
2026-02-14T12:31:27.446 [DEBUG] [Thread-185445] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:31:27.456 [DEBUG] [Thread-185445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:31:27.457 [DEBUG] [Thread-185445] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:31:27.457 [DEBUG] [Thread-185445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:31:27.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:31:27.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:31:27.459 [DEBUG] [Thread-185445] [transport.py] [_log()] userauth is OK
2026-02-14T12:31:27.459 [DEBUG] [Thread-185445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:31:27.459 [DEBUG] [Thread-185445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:31:27.459 [DEBUG] [Thread-185445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:31:27.459 [DEBUG] [Thread-185445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:31:27.495 [INFO] [Thread-185445] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:31:27.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:31:28.115 [DEBUG] [Thread-185445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:31:28.115 [DEBUG] [Thread-185445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:31:28.115 [DEBUG] [Thread-185445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:31:28.155 [DEBUG] [Thread-185445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:31:28.155 [DEBUG] [Thread-185445] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:31:28.161 [DEBUG] [Thread-185445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:31:28.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:31:28.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:31:28.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:31:28.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:31:28.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:31:28.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:31:28.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:31:28.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:31:28.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:31:28.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.438305 -999.00  +14.20  29.48     49   +3.70 1 1 1 1 1   888    0 11.23 50.47 ----- 29.9 29.5 181.6 38.0 20.2 -27.5 18.8 -32.2 19.0 -25.1 20.1 -27.5
2026-02-14T12:31:28.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:31:28.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:31:28.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.438305
2026-02-14T12:31:28.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:31:28.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:31:28.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:31:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:31:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:31:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:31:05', tmtdew=12.44, humidity=43.18, cloud=0.0, wind=34.62, temperature=14.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:31:09.552', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:31:28.185 [DEBUG] [Thread-185445] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:31:28.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-14T12:31:28.280 [DEBUG] [Thread-185448] [transport.py] [_log()] starting thread (client mode): 0xa81d6a10
2026-02-14T12:31:28.280 [DEBUG] [Thread-185448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:31:28.294 [DEBUG] [Thread-185448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:31:28.295 [INFO] [Thread-185448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:31:28.302 [DEBUG] [Thread-185448] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:31:28.302 [DEBUG] [Thread-185448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:31:28.302 [DEBUG] [Thread-185448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:31:28.302 [DEBUG] [Thread-185448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:31:28.302 [DEBUG] [Thread-185448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:31:28.302 [DEBUG] [Thread-185448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:31:28.302 [DEBUG] [Thread-185448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:31:28.302 [DEBUG] [Thread-185448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:31:28.303 [DEBUG] [Thread-185448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:31:28.303 [DEBUG] [Thread-185448] [transport.py] [_log()] client lang: <none>
2026-02-14T12:31:28.303 [DEBUG] [Thread-185448] [transport.py] [_log()] server lang: <none>
2026-02-14T12:31:28.303 [DEBUG] [Thread-185448] [transport.py] [_log()] kex follows: False
2026-02-14T12:31:28.303 [DEBUG] [Thread-185448] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:31:28.303 [DEBUG] [Thread-185448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:31:28.303 [DEBUG] [Thread-185448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:31:28.303 [DEBUG] [Thread-185448] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:31:28.303 [DEBUG] [Thread-185448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:31:28.303 [DEBUG] [Thread-185448] [transport.py] [_log()] Compression: none
2026-02-14T12:31:28.303 [DEBUG] [Thread-185448] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:31:28.362 [DEBUG] [Thread-185448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:31:28.362 [DEBUG] [Thread-185448] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:31:28.363 [DEBUG] [Thread-185448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:31:28.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:31:28.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:31:28.418 [DEBUG] [Thread-185448] [transport.py] [_log()] userauth is OK
2026-02-14T12:31:28.418 [DEBUG] [Thread-185448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:31:28.418 [DEBUG] [Thread-185448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:31:28.418 [DEBUG] [Thread-185448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:31:28.418 [DEBUG] [Thread-185448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:31:28.437 [INFO] [Thread-185448] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:31:28.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T12:31:28.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:31:29.217 [DEBUG] [Thread-185448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:31:29.217 [DEBUG] [Thread-185448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:31:29.266 [DEBUG] [Thread-185448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:31:29.267 [DEBUG] [Thread-185448] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:31:29.276 [DEBUG] [Thread-185448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:31:29.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:31:29.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-14T12:31:29.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:31:29.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:31:29.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:31:29.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:31:29.313 [DEBUG] [Thread-185448] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:31:41.314 [DEBUG] [Thread-185450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:31:56.374 [DEBUG] [Thread-185451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:31:59.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:31:59.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:31:59.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:32:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 31, 40), 13.28, 40.8, 0.0, 42.27, 15.79, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:32:01.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:31:40
2026-02-14T12:32:01.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:32:01.819 [DEBUG] [Thread-185452] [transport.py] [_log()] starting thread (client mode): 0xa2d3c5e0
2026-02-14T12:32:01.819 [DEBUG] [Thread-185452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:32:01.839 [DEBUG] [Thread-185452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:32:01.839 [INFO] [Thread-185452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:32:01.842 [DEBUG] [Thread-185452] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:32:01.842 [DEBUG] [Thread-185452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:32:01.842 [DEBUG] [Thread-185452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:32:01.842 [DEBUG] [Thread-185452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:32:01.842 [DEBUG] [Thread-185452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:32:01.842 [DEBUG] [Thread-185452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:32:01.842 [DEBUG] [Thread-185452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:32:01.843 [DEBUG] [Thread-185452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:32:01.843 [DEBUG] [Thread-185452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:32:01.843 [DEBUG] [Thread-185452] [transport.py] [_log()] client lang: <none>
2026-02-14T12:32:01.843 [DEBUG] [Thread-185452] [transport.py] [_log()] server lang: <none>
2026-02-14T12:32:01.843 [DEBUG] [Thread-185452] [transport.py] [_log()] kex follows: False
2026-02-14T12:32:01.843 [DEBUG] [Thread-185452] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:32:01.843 [DEBUG] [Thread-185452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:32:01.843 [DEBUG] [Thread-185452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:32:01.843 [DEBUG] [Thread-185452] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:32:01.843 [DEBUG] [Thread-185452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:32:01.843 [DEBUG] [Thread-185452] [transport.py] [_log()] Compression: none
2026-02-14T12:32:01.843 [DEBUG] [Thread-185452] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:32:01.863 [DEBUG] [Thread-185452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:32:01.864 [DEBUG] [Thread-185452] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:32:01.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:32:01.865 [DEBUG] [Thread-185452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:32:01.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:32:01.905 [DEBUG] [Thread-185452] [transport.py] [_log()] userauth is OK
2026-02-14T12:32:01.905 [DEBUG] [Thread-185452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:32:01.905 [DEBUG] [Thread-185452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:32:01.905 [DEBUG] [Thread-185452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:32:01.905 [DEBUG] [Thread-185452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:32:01.932 [INFO] [Thread-185452] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:32:01.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:32:02.551 [DEBUG] [Thread-185452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:32:02.551 [DEBUG] [Thread-185452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:32:02.551 [DEBUG] [Thread-185452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:32:02.592 [DEBUG] [Thread-185452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:32:02.592 [DEBUG] [Thread-185452] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:32:02.594 [DEBUG] [Thread-185452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:32:02.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:32:02.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:32:02.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:32:02.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:32:02.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:32:02.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:32:02.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:32:02.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:32:02.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:32:02.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.438652 -999.00  +14.20  26.76     48   +3.50 1 1 1 1 1   888    0 10.82 48.26 ----- 24.6 26.8 171.6 34.2 20.3 -25.7 18.9 -24.4 19.1 -23.7 20.2 -25.4
2026-02-14T12:32:02.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:32:02.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:32:02.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.438652
2026-02-14T12:32:02.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:32:02.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:32:02.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:32:02.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:32:02.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:32:02.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:31:40', tmtdew=13.28, humidity=40.8, cloud=0.0, wind=42.27, temperature=15.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:31:39.533', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:32:02.616 [DEBUG] [Thread-185452] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:32:02.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:32:02.698 [DEBUG] [Thread-185455] [transport.py] [_log()] starting thread (client mode): 0xa2db53f0
2026-02-14T12:32:02.698 [DEBUG] [Thread-185455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:32:02.712 [DEBUG] [Thread-185455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:32:02.712 [INFO] [Thread-185455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:32:02.719 [DEBUG] [Thread-185455] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:32:02.720 [DEBUG] [Thread-185455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:32:02.720 [DEBUG] [Thread-185455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:32:02.720 [DEBUG] [Thread-185455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:32:02.720 [DEBUG] [Thread-185455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:32:02.720 [DEBUG] [Thread-185455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:32:02.720 [DEBUG] [Thread-185455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:32:02.721 [DEBUG] [Thread-185455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:32:02.721 [DEBUG] [Thread-185455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:32:02.721 [DEBUG] [Thread-185455] [transport.py] [_log()] client lang: <none>
2026-02-14T12:32:02.721 [DEBUG] [Thread-185455] [transport.py] [_log()] server lang: <none>
2026-02-14T12:32:02.721 [DEBUG] [Thread-185455] [transport.py] [_log()] kex follows: False
2026-02-14T12:32:02.721 [DEBUG] [Thread-185455] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:32:02.721 [DEBUG] [Thread-185455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:32:02.721 [DEBUG] [Thread-185455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:32:02.722 [DEBUG] [Thread-185455] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:32:02.722 [DEBUG] [Thread-185455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:32:02.722 [DEBUG] [Thread-185455] [transport.py] [_log()] Compression: none
2026-02-14T12:32:02.722 [DEBUG] [Thread-185455] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:32:02.783 [DEBUG] [Thread-185455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:32:02.784 [DEBUG] [Thread-185455] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:32:02.785 [DEBUG] [Thread-185455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:32:02.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:32:02.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:32:02.842 [DEBUG] [Thread-185455] [transport.py] [_log()] userauth is OK
2026-02-14T12:32:02.843 [DEBUG] [Thread-185455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:32:02.843 [DEBUG] [Thread-185455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:32:02.843 [DEBUG] [Thread-185455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:32:02.843 [DEBUG] [Thread-185455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:32:02.861 [INFO] [Thread-185455] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:32:02.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-14T12:32:02.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:32:03.676 [DEBUG] [Thread-185455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:32:03.677 [DEBUG] [Thread-185455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:32:03.724 [DEBUG] [Thread-185455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:32:03.725 [DEBUG] [Thread-185455] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:32:03.734 [DEBUG] [Thread-185455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:32:03.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:32:03.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-14T12:32:03.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:32:03.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:32:03.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:32:03.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:32:03.770 [DEBUG] [Thread-185455] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:32:11.412 [DEBUG] [Thread-185457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:32:21.764 [DEBUG] [Thread-185458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:32:21.943 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:32:21.944 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:32:26.466 [DEBUG] [Thread-185459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:32:33.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:32:33.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:32:33.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-14T12:32:35.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 32, 18), 12.36, 42.93, 0.0, 29.84, 14.08, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:32:35.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:32:18
2026-02-14T12:32:36.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:32:36.436 [DEBUG] [Thread-185460] [transport.py] [_log()] starting thread (client mode): 0xa5740820
2026-02-14T12:32:36.437 [DEBUG] [Thread-185460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:32:36.457 [DEBUG] [Thread-185460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:32:36.457 [INFO] [Thread-185460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:32:36.460 [DEBUG] [Thread-185460] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:32:36.460 [DEBUG] [Thread-185460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:32:36.460 [DEBUG] [Thread-185460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:32:36.460 [DEBUG] [Thread-185460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:32:36.460 [DEBUG] [Thread-185460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:32:36.460 [DEBUG] [Thread-185460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:32:36.460 [DEBUG] [Thread-185460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:32:36.460 [DEBUG] [Thread-185460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:32:36.460 [DEBUG] [Thread-185460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:32:36.460 [DEBUG] [Thread-185460] [transport.py] [_log()] client lang: <none>
2026-02-14T12:32:36.460 [DEBUG] [Thread-185460] [transport.py] [_log()] server lang: <none>
2026-02-14T12:32:36.460 [DEBUG] [Thread-185460] [transport.py] [_log()] kex follows: False
2026-02-14T12:32:36.460 [DEBUG] [Thread-185460] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:32:36.460 [DEBUG] [Thread-185460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:32:36.460 [DEBUG] [Thread-185460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:32:36.460 [DEBUG] [Thread-185460] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:32:36.460 [DEBUG] [Thread-185460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:32:36.460 [DEBUG] [Thread-185460] [transport.py] [_log()] Compression: none
2026-02-14T12:32:36.460 [DEBUG] [Thread-185460] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:32:36.477 [DEBUG] [Thread-185460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:32:36.478 [DEBUG] [Thread-185460] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:32:36.478 [DEBUG] [Thread-185460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:32:36.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:32:36.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:32:36.480 [DEBUG] [Thread-185460] [transport.py] [_log()] userauth is OK
2026-02-14T12:32:36.481 [DEBUG] [Thread-185460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:32:36.481 [DEBUG] [Thread-185460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:32:36.481 [DEBUG] [Thread-185460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:32:36.481 [DEBUG] [Thread-185460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:32:36.506 [INFO] [Thread-185460] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:32:36.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:32:37.109 [DEBUG] [Thread-185460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:32:37.109 [DEBUG] [Thread-185460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:32:37.109 [DEBUG] [Thread-185460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:32:37.149 [DEBUG] [Thread-185460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:32:37.150 [DEBUG] [Thread-185460] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:32:37.153 [DEBUG] [Thread-185460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:32:37.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:32:37.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:32:37.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:32:37.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:32:37.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:32:37.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:32:37.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:32:37.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:32:37.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:32:37.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.438999 -999.00  +13.90  22.49     49   +3.40 1 1 1 1 1   888    0 11.04 48.91 ----- 24.4 22.5 185.0 33.3 20.1 -25.2 18.6 -28.6 18.9 -24.9 20.0 -25.7
2026-02-14T12:32:37.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:32:37.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:32:37.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.438999
2026-02-14T12:32:37.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:32:37.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:32:37.178 [DEBUG] [Thread-185460] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:32:37.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:32:37.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:32:37.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:32:37.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:32:18', tmtdew=12.36, humidity=42.93, cloud=0.0, wind=29.84, temperature=14.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:32:09.514', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:32:37.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-14T12:32:37.278 [DEBUG] [Thread-185463] [transport.py] [_log()] starting thread (client mode): 0xa5741c00
2026-02-14T12:32:37.278 [DEBUG] [Thread-185463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:32:37.292 [DEBUG] [Thread-185463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:32:37.293 [INFO] [Thread-185463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:32:37.300 [DEBUG] [Thread-185463] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:32:37.300 [DEBUG] [Thread-185463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:32:37.300 [DEBUG] [Thread-185463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:32:37.300 [DEBUG] [Thread-185463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:32:37.300 [DEBUG] [Thread-185463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:32:37.300 [DEBUG] [Thread-185463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:32:37.300 [DEBUG] [Thread-185463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:32:37.300 [DEBUG] [Thread-185463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:32:37.300 [DEBUG] [Thread-185463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:32:37.300 [DEBUG] [Thread-185463] [transport.py] [_log()] client lang: <none>
2026-02-14T12:32:37.300 [DEBUG] [Thread-185463] [transport.py] [_log()] server lang: <none>
2026-02-14T12:32:37.300 [DEBUG] [Thread-185463] [transport.py] [_log()] kex follows: False
2026-02-14T12:32:37.300 [DEBUG] [Thread-185463] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:32:37.300 [DEBUG] [Thread-185463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:32:37.300 [DEBUG] [Thread-185463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:32:37.300 [DEBUG] [Thread-185463] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:32:37.300 [DEBUG] [Thread-185463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:32:37.300 [DEBUG] [Thread-185463] [transport.py] [_log()] Compression: none
2026-02-14T12:32:37.300 [DEBUG] [Thread-185463] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:32:37.359 [DEBUG] [Thread-185463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:32:37.359 [DEBUG] [Thread-185463] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:32:37.360 [DEBUG] [Thread-185463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:32:37.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:32:37.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:32:37.414 [DEBUG] [Thread-185463] [transport.py] [_log()] userauth is OK
2026-02-14T12:32:37.415 [DEBUG] [Thread-185463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:32:37.415 [DEBUG] [Thread-185463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:32:37.415 [DEBUG] [Thread-185463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:32:37.415 [DEBUG] [Thread-185463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:32:37.434 [INFO] [Thread-185463] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:32:37.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T12:32:37.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:32:38.236 [DEBUG] [Thread-185463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:32:38.237 [DEBUG] [Thread-185463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:32:38.284 [DEBUG] [Thread-185463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:32:38.285 [DEBUG] [Thread-185463] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:32:38.294 [DEBUG] [Thread-185463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:32:38.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:32:38.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:32:38.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:32:38.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:32:38.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:32:38.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:32:38.331 [DEBUG] [Thread-185463] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:32:41.504 [DEBUG] [Thread-185465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:32:56.556 [DEBUG] [Thread-185466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:33:08.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:33:08.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:33:08.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:33:10.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 32, 54), 11.89, 44.47, 0.0, 29.4, 13.75, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:33:10.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:32:54
2026-02-14T12:33:10.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:33:10.679 [DEBUG] [Thread-185467] [transport.py] [_log()] starting thread (client mode): 0xa2d1a530
2026-02-14T12:33:10.679 [DEBUG] [Thread-185467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:33:10.694 [DEBUG] [Thread-185467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:33:10.694 [INFO] [Thread-185467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:33:10.696 [DEBUG] [Thread-185467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:33:10.696 [DEBUG] [Thread-185467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:33:10.696 [DEBUG] [Thread-185467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:33:10.696 [DEBUG] [Thread-185467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:33:10.696 [DEBUG] [Thread-185467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:33:10.696 [DEBUG] [Thread-185467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:33:10.696 [DEBUG] [Thread-185467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:33:10.696 [DEBUG] [Thread-185467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:33:10.697 [DEBUG] [Thread-185467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:33:10.697 [DEBUG] [Thread-185467] [transport.py] [_log()] client lang: <none>
2026-02-14T12:33:10.697 [DEBUG] [Thread-185467] [transport.py] [_log()] server lang: <none>
2026-02-14T12:33:10.697 [DEBUG] [Thread-185467] [transport.py] [_log()] kex follows: False
2026-02-14T12:33:10.697 [DEBUG] [Thread-185467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:33:10.697 [DEBUG] [Thread-185467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:33:10.697 [DEBUG] [Thread-185467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:33:10.697 [DEBUG] [Thread-185467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:33:10.697 [DEBUG] [Thread-185467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:33:10.697 [DEBUG] [Thread-185467] [transport.py] [_log()] Compression: none
2026-02-14T12:33:10.697 [DEBUG] [Thread-185467] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:33:10.705 [DEBUG] [Thread-185467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:33:10.705 [DEBUG] [Thread-185467] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:33:10.705 [DEBUG] [Thread-185467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:33:10.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:33:10.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:33:10.707 [DEBUG] [Thread-185467] [transport.py] [_log()] userauth is OK
2026-02-14T12:33:10.707 [DEBUG] [Thread-185467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:33:10.707 [DEBUG] [Thread-185467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:33:10.707 [DEBUG] [Thread-185467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:33:10.707 [DEBUG] [Thread-185467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:33:10.720 [INFO] [Thread-185467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:33:10.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:33:11.314 [DEBUG] [Thread-185467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:33:11.314 [DEBUG] [Thread-185467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:33:11.314 [DEBUG] [Thread-185467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:33:11.355 [DEBUG] [Thread-185467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:33:11.355 [DEBUG] [Thread-185467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:33:11.358 [DEBUG] [Thread-185467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:33:11.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:33:11.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:33:11.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:33:11.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:33:11.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:33:11.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:33:11.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:33:11.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:33:11.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:33:11.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.439346 -999.00  +13.80  30.85     49   +3.30 1 1 2 1 1   888    0 10.92 53.85 ----- 28.4 30.9 152.6 35.1 20.2 -26.0 19.0 -24.5 19.0 -23.7 20.2 -26.3
2026-02-14T12:33:11.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:33:11.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:33:11.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.439346
2026-02-14T12:33:11.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:33:11.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:33:11.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:33:11.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:33:11.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:33:11.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:32:54', tmtdew=11.89, humidity=44.47, cloud=0.0, wind=29.4, temperature=13.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:32:39.494', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:33:11.383 [DEBUG] [Thread-185467] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:33:11.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-14T12:33:11.479 [DEBUG] [Thread-185470] [transport.py] [_log()] starting thread (client mode): 0xa2dc3ee0
2026-02-14T12:33:11.479 [DEBUG] [Thread-185470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:33:11.495 [DEBUG] [Thread-185470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:33:11.495 [INFO] [Thread-185470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:33:11.502 [DEBUG] [Thread-185470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:33:11.503 [DEBUG] [Thread-185470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:33:11.503 [DEBUG] [Thread-185470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:33:11.503 [DEBUG] [Thread-185470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:33:11.503 [DEBUG] [Thread-185470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:33:11.503 [DEBUG] [Thread-185470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:33:11.503 [DEBUG] [Thread-185470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:33:11.503 [DEBUG] [Thread-185470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:33:11.503 [DEBUG] [Thread-185470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:33:11.503 [DEBUG] [Thread-185470] [transport.py] [_log()] client lang: <none>
2026-02-14T12:33:11.503 [DEBUG] [Thread-185470] [transport.py] [_log()] server lang: <none>
2026-02-14T12:33:11.503 [DEBUG] [Thread-185470] [transport.py] [_log()] kex follows: False
2026-02-14T12:33:11.503 [DEBUG] [Thread-185470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:33:11.503 [DEBUG] [Thread-185470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:33:11.503 [DEBUG] [Thread-185470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:33:11.504 [DEBUG] [Thread-185470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:33:11.504 [DEBUG] [Thread-185470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:33:11.504 [DEBUG] [Thread-185470] [transport.py] [_log()] Compression: none
2026-02-14T12:33:11.504 [DEBUG] [Thread-185470] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:33:11.561 [DEBUG] [Thread-185470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:33:11.562 [DEBUG] [Thread-185470] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:33:11.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:33:11.563 [DEBUG] [Thread-185470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:33:11.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:33:11.596 [DEBUG] [Thread-185472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:33:11.618 [DEBUG] [Thread-185470] [transport.py] [_log()] userauth is OK
2026-02-14T12:33:11.618 [DEBUG] [Thread-185470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:33:11.618 [DEBUG] [Thread-185470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:33:11.618 [DEBUG] [Thread-185470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:33:11.618 [DEBUG] [Thread-185470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:33:11.637 [INFO] [Thread-185470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:33:11.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-14T12:33:11.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:33:12.455 [DEBUG] [Thread-185470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:33:12.455 [DEBUG] [Thread-185470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:33:12.503 [DEBUG] [Thread-185470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:33:12.504 [DEBUG] [Thread-185470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:33:12.513 [DEBUG] [Thread-185470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:33:12.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:33:12.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:33:12.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-14T12:33:12.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:33:12.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:33:12.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:33:12.549 [DEBUG] [Thread-185470] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:33:21.819 [DEBUG] [Thread-185473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:33:22.086 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:33:22.087 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:33:26.650 [DEBUG] [Thread-185474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:33:41.688 [DEBUG] [Thread-185475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:33:42.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:33:42.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:33:42.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-14T12:33:44.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 33, 29), 12.06, 44.02, 0.0, 28.04, 13.88, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:33:44.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:33:29
2026-02-14T12:33:44.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:33:44.936 [DEBUG] [Thread-185476] [transport.py] [_log()] starting thread (client mode): 0xa2ddf3d0
2026-02-14T12:33:44.936 [DEBUG] [Thread-185476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:33:44.957 [DEBUG] [Thread-185476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:33:44.957 [INFO] [Thread-185476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:33:44.959 [DEBUG] [Thread-185476] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:33:44.959 [DEBUG] [Thread-185476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:33:44.959 [DEBUG] [Thread-185476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:33:44.959 [DEBUG] [Thread-185476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:33:44.960 [DEBUG] [Thread-185476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:33:44.960 [DEBUG] [Thread-185476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:33:44.960 [DEBUG] [Thread-185476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:33:44.960 [DEBUG] [Thread-185476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:33:44.960 [DEBUG] [Thread-185476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:33:44.960 [DEBUG] [Thread-185476] [transport.py] [_log()] client lang: <none>
2026-02-14T12:33:44.960 [DEBUG] [Thread-185476] [transport.py] [_log()] server lang: <none>
2026-02-14T12:33:44.960 [DEBUG] [Thread-185476] [transport.py] [_log()] kex follows: False
2026-02-14T12:33:44.960 [DEBUG] [Thread-185476] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:33:44.960 [DEBUG] [Thread-185476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:33:44.960 [DEBUG] [Thread-185476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:33:44.960 [DEBUG] [Thread-185476] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:33:44.960 [DEBUG] [Thread-185476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:33:44.960 [DEBUG] [Thread-185476] [transport.py] [_log()] Compression: none
2026-02-14T12:33:44.961 [DEBUG] [Thread-185476] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:33:44.970 [DEBUG] [Thread-185476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:33:44.971 [DEBUG] [Thread-185476] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:33:44.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:33:44.972 [DEBUG] [Thread-185476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:33:44.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:33:44.975 [DEBUG] [Thread-185476] [transport.py] [_log()] userauth is OK
2026-02-14T12:33:44.975 [DEBUG] [Thread-185476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:33:44.976 [DEBUG] [Thread-185476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:33:44.976 [DEBUG] [Thread-185476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:33:44.976 [DEBUG] [Thread-185476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:33:45.001 [INFO] [Thread-185476] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:33:45.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:33:45.603 [DEBUG] [Thread-185476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:33:45.604 [DEBUG] [Thread-185476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:33:45.604 [DEBUG] [Thread-185476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:33:45.645 [DEBUG] [Thread-185476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:33:45.645 [DEBUG] [Thread-185476] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:33:45.649 [DEBUG] [Thread-185476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:33:45.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:33:45.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:33:45.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:33:45.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:33:45.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:33:45.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:33:45.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:33:45.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:33:45.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:33:45.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.439694 -999.00  +13.70  23.41     51   +3.80 1 1 1 1 1   888    0 11.10 52.88 ----- 23.2 23.4 132.6 33.6 20.2 -24.5 19.1 -23.6 19.2 -23.3 20.2 -23.7
2026-02-14T12:33:45.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:33:45.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:33:45.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.439694
2026-02-14T12:33:45.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:33:45.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:33:45.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:33:45.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:33:45.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:33:45.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:33:29', tmtdew=12.06, humidity=44.02, cloud=0.0, wind=28.04, temperature=13.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:33:09.562', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:33:45.679 [DEBUG] [Thread-185476] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:33:45.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-14T12:33:45.767 [DEBUG] [Thread-185479] [transport.py] [_log()] starting thread (client mode): 0xa5741570
2026-02-14T12:33:45.767 [DEBUG] [Thread-185479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:33:45.782 [DEBUG] [Thread-185479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:33:45.782 [INFO] [Thread-185479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:33:45.790 [DEBUG] [Thread-185479] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:33:45.790 [DEBUG] [Thread-185479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:33:45.790 [DEBUG] [Thread-185479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:33:45.790 [DEBUG] [Thread-185479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:33:45.791 [DEBUG] [Thread-185479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:33:45.791 [DEBUG] [Thread-185479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:33:45.791 [DEBUG] [Thread-185479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:33:45.791 [DEBUG] [Thread-185479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:33:45.791 [DEBUG] [Thread-185479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:33:45.791 [DEBUG] [Thread-185479] [transport.py] [_log()] client lang: <none>
2026-02-14T12:33:45.791 [DEBUG] [Thread-185479] [transport.py] [_log()] server lang: <none>
2026-02-14T12:33:45.791 [DEBUG] [Thread-185479] [transport.py] [_log()] kex follows: False
2026-02-14T12:33:45.791 [DEBUG] [Thread-185479] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:33:45.791 [DEBUG] [Thread-185479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:33:45.791 [DEBUG] [Thread-185479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:33:45.791 [DEBUG] [Thread-185479] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:33:45.791 [DEBUG] [Thread-185479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:33:45.791 [DEBUG] [Thread-185479] [transport.py] [_log()] Compression: none
2026-02-14T12:33:45.792 [DEBUG] [Thread-185479] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:33:45.850 [DEBUG] [Thread-185479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:33:45.851 [DEBUG] [Thread-185479] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:33:45.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:33:45.852 [DEBUG] [Thread-185479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:33:45.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:33:45.906 [DEBUG] [Thread-185479] [transport.py] [_log()] userauth is OK
2026-02-14T12:33:45.907 [DEBUG] [Thread-185479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:33:45.907 [DEBUG] [Thread-185479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:33:45.907 [DEBUG] [Thread-185479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:33:45.907 [DEBUG] [Thread-185479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:33:45.926 [INFO] [Thread-185479] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:33:45.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-14T12:33:45.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:33:46.760 [DEBUG] [Thread-185479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:33:46.760 [DEBUG] [Thread-185479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:33:46.808 [DEBUG] [Thread-185479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:33:46.808 [DEBUG] [Thread-185479] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:33:46.818 [DEBUG] [Thread-185479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:33:46.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:33:46.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-14T12:33: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-14T12:33:46.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:33:46.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:33:46.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:33:46.854 [DEBUG] [Thread-185479] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:33:56.723 [DEBUG] [Thread-185481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:34:11.774 [DEBUG] [Thread-185482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:34:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:34:16.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:34:16.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-14T12:34:18.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 34, 5), 11.77, 44.81, 0.0, 26.7, 13.71, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:34:18.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:34:05
2026-02-14T12:34:19.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:34:19.255 [DEBUG] [Thread-185483] [transport.py] [_log()] starting thread (client mode): 0xa57c0ca0
2026-02-14T12:34:19.255 [DEBUG] [Thread-185483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:34:19.275 [DEBUG] [Thread-185483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:34:19.275 [INFO] [Thread-185483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:34:19.278 [DEBUG] [Thread-185483] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:34:19.278 [DEBUG] [Thread-185483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:34:19.278 [DEBUG] [Thread-185483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:34:19.278 [DEBUG] [Thread-185483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:34:19.278 [DEBUG] [Thread-185483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:34:19.278 [DEBUG] [Thread-185483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:34:19.278 [DEBUG] [Thread-185483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:34:19.278 [DEBUG] [Thread-185483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:34:19.278 [DEBUG] [Thread-185483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:34:19.278 [DEBUG] [Thread-185483] [transport.py] [_log()] client lang: <none>
2026-02-14T12:34:19.278 [DEBUG] [Thread-185483] [transport.py] [_log()] server lang: <none>
2026-02-14T12:34:19.278 [DEBUG] [Thread-185483] [transport.py] [_log()] kex follows: False
2026-02-14T12:34:19.279 [DEBUG] [Thread-185483] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:34:19.279 [DEBUG] [Thread-185483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:34:19.279 [DEBUG] [Thread-185483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:34:19.279 [DEBUG] [Thread-185483] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:34:19.279 [DEBUG] [Thread-185483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:34:19.279 [DEBUG] [Thread-185483] [transport.py] [_log()] Compression: none
2026-02-14T12:34:19.279 [DEBUG] [Thread-185483] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:34:19.297 [DEBUG] [Thread-185483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:34:19.297 [DEBUG] [Thread-185483] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:34:19.298 [DEBUG] [Thread-185483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:34:19.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:34:19.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:34:19.301 [DEBUG] [Thread-185483] [transport.py] [_log()] userauth is OK
2026-02-14T12:34:19.301 [DEBUG] [Thread-185483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:34:19.301 [DEBUG] [Thread-185483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:34:19.301 [DEBUG] [Thread-185483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:34:19.301 [DEBUG] [Thread-185483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:34:19.326 [INFO] [Thread-185483] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:34:19.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:34:19.970 [DEBUG] [Thread-185483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:34:19.970 [DEBUG] [Thread-185483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:34:19.970 [DEBUG] [Thread-185483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:34:20.010 [DEBUG] [Thread-185483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:34:20.011 [DEBUG] [Thread-185483] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:34:20.014 [DEBUG] [Thread-185483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:34:20.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:34:20.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:34:20.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:34:20.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:34:20.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:34:20.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:34:20.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:34:20.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:34:20.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:34:20.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.440388 -999.00  +14.00  24.13     50   +3.80 1 1 1 1 1   888    0 11.13 53.40 ----- 20.4 24.1 171.8 31.5 20.4 -24.5 19.2 -27.3 19.3 -23.5 20.4 -24.8
2026-02-14T12:34:20.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:34:20.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:34:20.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.440388
2026-02-14T12:34:20.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:34:20.042 [DEBUG] [Thread-185483] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:34:20.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:34:20.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:34:20.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:34:20.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:34:20.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:34:05', tmtdew=11.77, humidity=44.81, cloud=0.0, wind=26.7, temperature=13.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:34:09.523', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:34:20.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-14T12:34:20.150 [DEBUG] [Thread-185486] [transport.py] [_log()] starting thread (client mode): 0xa57410f0
2026-02-14T12:34:20.150 [DEBUG] [Thread-185486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:34:20.165 [DEBUG] [Thread-185486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:34:20.165 [INFO] [Thread-185486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:34:20.172 [DEBUG] [Thread-185486] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:34:20.173 [DEBUG] [Thread-185486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:34:20.173 [DEBUG] [Thread-185486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:34:20.173 [DEBUG] [Thread-185486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:34:20.173 [DEBUG] [Thread-185486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:34:20.173 [DEBUG] [Thread-185486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:34:20.173 [DEBUG] [Thread-185486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:34:20.173 [DEBUG] [Thread-185486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:34:20.173 [DEBUG] [Thread-185486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:34:20.173 [DEBUG] [Thread-185486] [transport.py] [_log()] client lang: <none>
2026-02-14T12:34:20.173 [DEBUG] [Thread-185486] [transport.py] [_log()] server lang: <none>
2026-02-14T12:34:20.173 [DEBUG] [Thread-185486] [transport.py] [_log()] kex follows: False
2026-02-14T12:34:20.173 [DEBUG] [Thread-185486] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:34:20.173 [DEBUG] [Thread-185486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:34:20.173 [DEBUG] [Thread-185486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:34:20.173 [DEBUG] [Thread-185486] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:34:20.174 [DEBUG] [Thread-185486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:34:20.174 [DEBUG] [Thread-185486] [transport.py] [_log()] Compression: none
2026-02-14T12:34:20.174 [DEBUG] [Thread-185486] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:34:20.230 [DEBUG] [Thread-185486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:34:20.231 [DEBUG] [Thread-185486] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:34:20.232 [DEBUG] [Thread-185486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:34:20.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:34:20.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:34:20.287 [DEBUG] [Thread-185486] [transport.py] [_log()] userauth is OK
2026-02-14T12:34:20.287 [DEBUG] [Thread-185486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:34:20.287 [DEBUG] [Thread-185486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:34:20.287 [DEBUG] [Thread-185486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:34:20.287 [DEBUG] [Thread-185486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:34:20.306 [INFO] [Thread-185486] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:34:20.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-14T12:34:20.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:34:21.110 [DEBUG] [Thread-185486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:34:21.110 [DEBUG] [Thread-185486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:34:21.161 [DEBUG] [Thread-185486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:34:21.161 [DEBUG] [Thread-185486] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:34:21.173 [DEBUG] [Thread-185486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:34:21.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:34:21.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-14T12:34:21.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-14T12:34:21.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:34:21.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:34:21.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:34:21.211 [DEBUG] [Thread-185486] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:34:21.867 [DEBUG] [Thread-185488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:34:22.228 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:34:22.229 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:34:26.810 [DEBUG] [Thread-185489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:34:41.862 [DEBUG] [Thread-185490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:34:51.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:34:51.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:34:51.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-14T12:34:53.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 34, 40), 12.1, 44.02, 0.0, 32.07, 14.6, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:34:53.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:34:40
2026-02-14T12:34:53.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:34:53.531 [DEBUG] [Thread-185491] [transport.py] [_log()] starting thread (client mode): 0xa2ddcfa0
2026-02-14T12:34:53.531 [DEBUG] [Thread-185491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:34:53.553 [DEBUG] [Thread-185491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:34:53.553 [INFO] [Thread-185491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:34:53.555 [DEBUG] [Thread-185491] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:34:53.556 [DEBUG] [Thread-185491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:34:53.556 [DEBUG] [Thread-185491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:34:53.556 [DEBUG] [Thread-185491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:34:53.556 [DEBUG] [Thread-185491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:34:53.556 [DEBUG] [Thread-185491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:34:53.556 [DEBUG] [Thread-185491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:34:53.556 [DEBUG] [Thread-185491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:34:53.556 [DEBUG] [Thread-185491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:34:53.556 [DEBUG] [Thread-185491] [transport.py] [_log()] client lang: <none>
2026-02-14T12:34:53.556 [DEBUG] [Thread-185491] [transport.py] [_log()] server lang: <none>
2026-02-14T12:34:53.556 [DEBUG] [Thread-185491] [transport.py] [_log()] kex follows: False
2026-02-14T12:34:53.556 [DEBUG] [Thread-185491] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:34:53.556 [DEBUG] [Thread-185491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:34:53.556 [DEBUG] [Thread-185491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:34:53.556 [DEBUG] [Thread-185491] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:34:53.556 [DEBUG] [Thread-185491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:34:53.556 [DEBUG] [Thread-185491] [transport.py] [_log()] Compression: none
2026-02-14T12:34:53.556 [DEBUG] [Thread-185491] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:34:53.573 [DEBUG] [Thread-185491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:34:53.574 [DEBUG] [Thread-185491] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:34:53.574 [DEBUG] [Thread-185491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:34:53.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:34:53.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:34:53.576 [DEBUG] [Thread-185491] [transport.py] [_log()] userauth is OK
2026-02-14T12:34:53.576 [DEBUG] [Thread-185491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:34:53.577 [DEBUG] [Thread-185491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:34:53.577 [DEBUG] [Thread-185491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:34:53.577 [DEBUG] [Thread-185491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:34:53.595 [INFO] [Thread-185491] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:34:53.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:34:54.261 [DEBUG] [Thread-185491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:34:54.261 [DEBUG] [Thread-185491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:34:54.261 [DEBUG] [Thread-185491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:34:54.301 [DEBUG] [Thread-185491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:34:54.302 [DEBUG] [Thread-185491] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:34:54.305 [DEBUG] [Thread-185491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:34:54.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:34:54.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:34:54.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:34:54.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:34:54.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:34:54.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:34:54.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:34:54.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:34:54.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:34:54.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.440735 -999.00  +14.30  28.63     50   +4.30 1 1 1 1 1   888    0 11.25 54.70 ----- 23.3 28.6 162.6 31.7 20.5 -24.9 19.3 -23.6 19.3 -22.7 20.5 -25.3
2026-02-14T12:34:54.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:34:54.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:34:54.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.440735
2026-02-14T12:34:54.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:34:54.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:34:54.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:34:54.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:34:54.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:34:54.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:34:40', tmtdew=12.1, humidity=44.02, cloud=0.0, wind=32.07, temperature=14.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:34:39.504', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:34:54.332 [DEBUG] [Thread-185491] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:34:54.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-14T12:34:54.429 [DEBUG] [Thread-185494] [transport.py] [_log()] starting thread (client mode): 0xa2dc3490
2026-02-14T12:34:54.429 [DEBUG] [Thread-185494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:34:54.445 [DEBUG] [Thread-185494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:34:54.445 [INFO] [Thread-185494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:34:54.453 [DEBUG] [Thread-185494] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:34:54.453 [DEBUG] [Thread-185494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:34:54.453 [DEBUG] [Thread-185494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:34:54.453 [DEBUG] [Thread-185494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:34:54.453 [DEBUG] [Thread-185494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:34:54.453 [DEBUG] [Thread-185494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:34:54.453 [DEBUG] [Thread-185494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:34:54.453 [DEBUG] [Thread-185494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:34:54.453 [DEBUG] [Thread-185494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:34:54.454 [DEBUG] [Thread-185494] [transport.py] [_log()] client lang: <none>
2026-02-14T12:34:54.454 [DEBUG] [Thread-185494] [transport.py] [_log()] server lang: <none>
2026-02-14T12:34:54.454 [DEBUG] [Thread-185494] [transport.py] [_log()] kex follows: False
2026-02-14T12:34:54.454 [DEBUG] [Thread-185494] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:34:54.454 [DEBUG] [Thread-185494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:34:54.454 [DEBUG] [Thread-185494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:34:54.454 [DEBUG] [Thread-185494] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:34:54.454 [DEBUG] [Thread-185494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:34:54.454 [DEBUG] [Thread-185494] [transport.py] [_log()] Compression: none
2026-02-14T12:34:54.454 [DEBUG] [Thread-185494] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:34:54.520 [DEBUG] [Thread-185494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:34:54.521 [DEBUG] [Thread-185494] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:34:54.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:34:54.522 [DEBUG] [Thread-185494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:34:54.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:34:54.579 [DEBUG] [Thread-185494] [transport.py] [_log()] userauth is OK
2026-02-14T12:34:54.579 [DEBUG] [Thread-185494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:34:54.579 [DEBUG] [Thread-185494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:34:54.579 [DEBUG] [Thread-185494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:34:54.580 [DEBUG] [Thread-185494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:34:54.599 [INFO] [Thread-185494] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:34:54.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-14T12:34:54.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:34:55.483 [DEBUG] [Thread-185494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:34:55.484 [DEBUG] [Thread-185494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:34:55.533 [DEBUG] [Thread-185494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:34:55.534 [DEBUG] [Thread-185494] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:34:55.542 [DEBUG] [Thread-185494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:34:55.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:34:55.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:34:55.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-14T12:34:55.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:34:55.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:34:55.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:34:55.579 [DEBUG] [Thread-185494] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:34:56.899 [DEBUG] [Thread-185496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:35:11.958 [DEBUG] [Thread-185497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:35:21.914 [DEBUG] [Thread-185498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:35:22.369 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:35:22.370 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:35:25.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:35:25.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:35:25.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-14T12:35:26.999 [DEBUG] [Thread-185499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:35:27.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 35, 15), 11.36, 46.54, 0.0, 38.57, 13.98, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:35:27.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:35:15
2026-02-14T12:35:27.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:35:27.992 [DEBUG] [Thread-185500] [transport.py] [_log()] starting thread (client mode): 0xa2ddc580
2026-02-14T12:35:27.993 [DEBUG] [Thread-185500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:35:28.012 [DEBUG] [Thread-185500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:35:28.012 [INFO] [Thread-185500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:35:28.015 [DEBUG] [Thread-185500] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:35:28.015 [DEBUG] [Thread-185500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:35:28.015 [DEBUG] [Thread-185500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:35:28.015 [DEBUG] [Thread-185500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:35:28.015 [DEBUG] [Thread-185500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:35:28.016 [DEBUG] [Thread-185500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:35:28.016 [DEBUG] [Thread-185500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:35:28.016 [DEBUG] [Thread-185500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:35:28.016 [DEBUG] [Thread-185500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:35:28.016 [DEBUG] [Thread-185500] [transport.py] [_log()] client lang: <none>
2026-02-14T12:35:28.016 [DEBUG] [Thread-185500] [transport.py] [_log()] server lang: <none>
2026-02-14T12:35:28.016 [DEBUG] [Thread-185500] [transport.py] [_log()] kex follows: False
2026-02-14T12:35:28.016 [DEBUG] [Thread-185500] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:35:28.016 [DEBUG] [Thread-185500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:35:28.016 [DEBUG] [Thread-185500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:35:28.016 [DEBUG] [Thread-185500] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:35:28.016 [DEBUG] [Thread-185500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:35:28.016 [DEBUG] [Thread-185500] [transport.py] [_log()] Compression: none
2026-02-14T12:35:28.016 [DEBUG] [Thread-185500] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:35:28.037 [DEBUG] [Thread-185500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:35:28.038 [DEBUG] [Thread-185500] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:35:28.038 [DEBUG] [Thread-185500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:35:28.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:35:28.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:35:28.039 [DEBUG] [Thread-185500] [transport.py] [_log()] userauth is OK
2026-02-14T12:35:28.039 [DEBUG] [Thread-185500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:35:28.039 [DEBUG] [Thread-185500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:35:28.040 [DEBUG] [Thread-185500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:35:28.040 [DEBUG] [Thread-185500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:35:28.053 [INFO] [Thread-185500] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:35:28.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:35:28.685 [DEBUG] [Thread-185500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:35:28.685 [DEBUG] [Thread-185500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:35:28.685 [DEBUG] [Thread-185500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:35:28.725 [DEBUG] [Thread-185500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:35:28.726 [DEBUG] [Thread-185500] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:35:28.729 [DEBUG] [Thread-185500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:35:28.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:35:28.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:35:28.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:35:28.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:35:28.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:35:28.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:35:28.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:35:28.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:35:28.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:35:28.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.441083 -999.00  +14.40  29.71     51   +4.40 1 1 1 1 1   888    0 10.96 46.58 ----- 32.9 29.7 175.4 38.6 20.6 -24.9 19.3 -27.0 19.4 -24.1 20.5 -24.8
2026-02-14T12:35:28.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:35:28.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:35:28.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.441083
2026-02-14T12:35:28.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:35:28.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:35:28.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:35:28.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:35:28.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:35:28.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:35:15', tmtdew=11.36, humidity=46.54, cloud=0.0, wind=38.57, temperature=13.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:35:09.571', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:35:28.755 [DEBUG] [Thread-185500] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:35:28.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:35:28.851 [DEBUG] [Thread-185503] [transport.py] [_log()] starting thread (client mode): 0xa2dc1ba0
2026-02-14T12:35:28.851 [DEBUG] [Thread-185503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:35:28.865 [DEBUG] [Thread-185503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:35:28.865 [INFO] [Thread-185503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:35:28.873 [DEBUG] [Thread-185503] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:35:28.873 [DEBUG] [Thread-185503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:35:28.873 [DEBUG] [Thread-185503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:35:28.873 [DEBUG] [Thread-185503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:35:28.873 [DEBUG] [Thread-185503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:35:28.873 [DEBUG] [Thread-185503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:35:28.873 [DEBUG] [Thread-185503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:35:28.873 [DEBUG] [Thread-185503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:35:28.873 [DEBUG] [Thread-185503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:35:28.873 [DEBUG] [Thread-185503] [transport.py] [_log()] client lang: <none>
2026-02-14T12:35:28.873 [DEBUG] [Thread-185503] [transport.py] [_log()] server lang: <none>
2026-02-14T12:35:28.873 [DEBUG] [Thread-185503] [transport.py] [_log()] kex follows: False
2026-02-14T12:35:28.873 [DEBUG] [Thread-185503] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:35:28.874 [DEBUG] [Thread-185503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:35:28.874 [DEBUG] [Thread-185503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:35:28.874 [DEBUG] [Thread-185503] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:35:28.874 [DEBUG] [Thread-185503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:35:28.874 [DEBUG] [Thread-185503] [transport.py] [_log()] Compression: none
2026-02-14T12:35:28.874 [DEBUG] [Thread-185503] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:35:28.931 [DEBUG] [Thread-185503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:35:28.931 [DEBUG] [Thread-185503] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:35:28.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:35:28.933 [DEBUG] [Thread-185503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:35:28.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:35:28.987 [DEBUG] [Thread-185503] [transport.py] [_log()] userauth is OK
2026-02-14T12:35:28.987 [DEBUG] [Thread-185503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:35:28.987 [DEBUG] [Thread-185503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:35:28.987 [DEBUG] [Thread-185503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:35:28.987 [DEBUG] [Thread-185503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:35:29.006 [INFO] [Thread-185503] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:35: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-14T12:35:29.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:35:29.833 [DEBUG] [Thread-185503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:35:29.833 [DEBUG] [Thread-185503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:35:29.881 [DEBUG] [Thread-185503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:35:29.882 [DEBUG] [Thread-185503] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:35:29.890 [DEBUG] [Thread-185503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:35:29.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:35:29.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:35:29.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:35:29.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:35:29.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:35:29.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:35:29.932 [DEBUG] [Thread-185503] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:35:42.039 [DEBUG] [Thread-185505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:35:57.088 [DEBUG] [Thread-185506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:35:59.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:35:59.955 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:35:59.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-14T12:36:01.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 35, 50), 11.66, 45.18, 0.0, 36.1, 14.16, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:36:01.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:35:50
2026-02-14T12:36:02.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:36:02.390 [DEBUG] [Thread-185507] [transport.py] [_log()] starting thread (client mode): 0xa2d3f2e0
2026-02-14T12:36:02.390 [DEBUG] [Thread-185507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:36:02.410 [DEBUG] [Thread-185507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:36:02.411 [INFO] [Thread-185507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:36:02.414 [DEBUG] [Thread-185507] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:36:02.414 [DEBUG] [Thread-185507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:36:02.414 [DEBUG] [Thread-185507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:36:02.414 [DEBUG] [Thread-185507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:36:02.414 [DEBUG] [Thread-185507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:36:02.414 [DEBUG] [Thread-185507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:36:02.414 [DEBUG] [Thread-185507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:36:02.414 [DEBUG] [Thread-185507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:36:02.414 [DEBUG] [Thread-185507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:36:02.414 [DEBUG] [Thread-185507] [transport.py] [_log()] client lang: <none>
2026-02-14T12:36:02.414 [DEBUG] [Thread-185507] [transport.py] [_log()] server lang: <none>
2026-02-14T12:36:02.414 [DEBUG] [Thread-185507] [transport.py] [_log()] kex follows: False
2026-02-14T12:36:02.415 [DEBUG] [Thread-185507] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:36:02.415 [DEBUG] [Thread-185507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:36:02.415 [DEBUG] [Thread-185507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:36:02.415 [DEBUG] [Thread-185507] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:36:02.415 [DEBUG] [Thread-185507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:36:02.415 [DEBUG] [Thread-185507] [transport.py] [_log()] Compression: none
2026-02-14T12:36:02.415 [DEBUG] [Thread-185507] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:36:02.431 [DEBUG] [Thread-185507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:36:02.432 [DEBUG] [Thread-185507] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:36:02.432 [DEBUG] [Thread-185507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:36:02.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:36:02.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:36:02.434 [DEBUG] [Thread-185507] [transport.py] [_log()] userauth is OK
2026-02-14T12:36:02.434 [DEBUG] [Thread-185507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:36:02.434 [DEBUG] [Thread-185507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:36:02.434 [DEBUG] [Thread-185507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:36:02.434 [DEBUG] [Thread-185507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:36:02.452 [INFO] [Thread-185507] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:36:02.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:36:03.114 [DEBUG] [Thread-185507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:36:03.114 [DEBUG] [Thread-185507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:36:03.114 [DEBUG] [Thread-185507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:36:03.155 [DEBUG] [Thread-185507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:36:03.155 [DEBUG] [Thread-185507] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:36:03.158 [DEBUG] [Thread-185507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:36:03.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:36:03.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:36:03.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:36:03.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:36:03.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:36:03.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:36:03.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:36:03.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:36:03.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:36:03.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.441430 -999.00  +14.10  26.63     51   +4.20 1 1 1 1 1   888    0 11.04 45.36 ----- 21.9 26.6 161.2 47.5 20.5 -25.5 19.4 -24.1 19.2 -23.5 20.4 -24.9
2026-02-14T12:36:03.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:36:03.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:36:03.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.441430
2026-02-14T12:36:03.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:36:03.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:36:03.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:36:03.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:36:03.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:36:03.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:35:50', tmtdew=11.66, humidity=45.18, cloud=0.0, wind=36.1, temperature=14.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:35:39.552', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:36:03.181 [DEBUG] [Thread-185507] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:36:03.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:36:03.274 [DEBUG] [Thread-185510] [transport.py] [_log()] starting thread (client mode): 0xa57410f0
2026-02-14T12:36:03.274 [DEBUG] [Thread-185510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:36:03.288 [DEBUG] [Thread-185510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:36:03.288 [INFO] [Thread-185510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:36:03.295 [DEBUG] [Thread-185510] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:36:03.295 [DEBUG] [Thread-185510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:36:03.295 [DEBUG] [Thread-185510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:36:03.296 [DEBUG] [Thread-185510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:36:03.296 [DEBUG] [Thread-185510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:36:03.296 [DEBUG] [Thread-185510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:36:03.296 [DEBUG] [Thread-185510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:36:03.296 [DEBUG] [Thread-185510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:36:03.296 [DEBUG] [Thread-185510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:36:03.296 [DEBUG] [Thread-185510] [transport.py] [_log()] client lang: <none>
2026-02-14T12:36:03.296 [DEBUG] [Thread-185510] [transport.py] [_log()] server lang: <none>
2026-02-14T12:36:03.296 [DEBUG] [Thread-185510] [transport.py] [_log()] kex follows: False
2026-02-14T12:36:03.296 [DEBUG] [Thread-185510] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:36:03.296 [DEBUG] [Thread-185510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:36:03.296 [DEBUG] [Thread-185510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:36:03.296 [DEBUG] [Thread-185510] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:36:03.296 [DEBUG] [Thread-185510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:36:03.296 [DEBUG] [Thread-185510] [transport.py] [_log()] Compression: none
2026-02-14T12:36:03.296 [DEBUG] [Thread-185510] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:36:03.353 [DEBUG] [Thread-185510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:36:03.354 [DEBUG] [Thread-185510] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:36:03.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:36:03.355 [DEBUG] [Thread-185510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:36:03.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:36:03.410 [DEBUG] [Thread-185510] [transport.py] [_log()] userauth is OK
2026-02-14T12:36:03.410 [DEBUG] [Thread-185510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:36:03.410 [DEBUG] [Thread-185510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:36:03.410 [DEBUG] [Thread-185510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:36:03.410 [DEBUG] [Thread-185510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:36:03.432 [INFO] [Thread-185510] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:36:03.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-14T12:36:03.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:36:04.242 [DEBUG] [Thread-185510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:36:04.242 [DEBUG] [Thread-185510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:36:04.290 [DEBUG] [Thread-185510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:36:04.291 [DEBUG] [Thread-185510] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:36:04.299 [DEBUG] [Thread-185510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:36:04.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:36:04.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-14T12:36:04.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-14T12:36:04.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:36:04.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:36:04.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:36:04.332 [DEBUG] [Thread-185510] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:36:12.122 [DEBUG] [Thread-185512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:36:21.947 [DEBUG] [Thread-185513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:36:22.509 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:36:22.510 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:36:27.186 [DEBUG] [Thread-185514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:36:34.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:36:34.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:36:34.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-14T12:36:36.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 36, 26), 11.58, 45.38, 0.0, 35.38, 14.05, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:36:36.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:36:26
2026-02-14T12:36:36.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:36:37.013 [DEBUG] [Thread-185515] [transport.py] [_log()] starting thread (client mode): 0xa2dc1090
2026-02-14T12:36:37.013 [DEBUG] [Thread-185515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:36:37.029 [DEBUG] [Thread-185515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:36:37.029 [INFO] [Thread-185515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:36:37.032 [DEBUG] [Thread-185515] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:36:37.032 [DEBUG] [Thread-185515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:36:37.032 [DEBUG] [Thread-185515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:36:37.032 [DEBUG] [Thread-185515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:36:37.032 [DEBUG] [Thread-185515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:36:37.032 [DEBUG] [Thread-185515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:36:37.032 [DEBUG] [Thread-185515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:36:37.032 [DEBUG] [Thread-185515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:36:37.033 [DEBUG] [Thread-185515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:36:37.033 [DEBUG] [Thread-185515] [transport.py] [_log()] client lang: <none>
2026-02-14T12:36:37.033 [DEBUG] [Thread-185515] [transport.py] [_log()] server lang: <none>
2026-02-14T12:36:37.033 [DEBUG] [Thread-185515] [transport.py] [_log()] kex follows: False
2026-02-14T12:36:37.033 [DEBUG] [Thread-185515] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:36:37.033 [DEBUG] [Thread-185515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:36:37.033 [DEBUG] [Thread-185515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:36:37.033 [DEBUG] [Thread-185515] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:36:37.033 [DEBUG] [Thread-185515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:36:37.033 [DEBUG] [Thread-185515] [transport.py] [_log()] Compression: none
2026-02-14T12:36:37.033 [DEBUG] [Thread-185515] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:36:37.052 [DEBUG] [Thread-185515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:36:37.053 [DEBUG] [Thread-185515] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:36:37.053 [DEBUG] [Thread-185515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:36:37.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:36:37.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:36:37.056 [DEBUG] [Thread-185515] [transport.py] [_log()] userauth is OK
2026-02-14T12:36:37.056 [DEBUG] [Thread-185515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:36:37.056 [DEBUG] [Thread-185515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:36:37.056 [DEBUG] [Thread-185515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:36:37.056 [DEBUG] [Thread-185515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:36:37.074 [INFO] [Thread-185515] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:36:37.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:36:37.677 [DEBUG] [Thread-185515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:36:37.677 [DEBUG] [Thread-185515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:36:37.678 [DEBUG] [Thread-185515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:36:37.719 [DEBUG] [Thread-185515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:36:37.719 [DEBUG] [Thread-185515] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:36:37.722 [DEBUG] [Thread-185515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:36:37.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:36:37.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:36:37.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:36:37.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:36:37.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:36:37.747 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:36:37.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:36:37.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:36:37.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:36:37.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.441777 -999.00  +14.10  26.12     52   +4.40 1 2 1 1 1   888    0 11.04 44.03 ----- 20.1 26.1 165.4 36.6 20.5 -24.0 19.3 -23.0 19.4 -21.8 20.5 -23.0
2026-02-14T12:36:37.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:36:37.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:36:37.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.441777
2026-02-14T12:36:37.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:36:37.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:36:37.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:36:37.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:36:37.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T12:36:37.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:36:26', tmtdew=11.58, humidity=45.38, cloud=0.0, wind=35.38, temperature=14.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:36:09.533', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:36:37.750 [DEBUG] [Thread-185515] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:36:37.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-14T12:36:37.847 [DEBUG] [Thread-185518] [transport.py] [_log()] starting thread (client mode): 0xa2dde860
2026-02-14T12:36:37.847 [DEBUG] [Thread-185518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:36:37.862 [DEBUG] [Thread-185518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:36:37.862 [INFO] [Thread-185518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:36:37.870 [DEBUG] [Thread-185518] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:36:37.870 [DEBUG] [Thread-185518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:36:37.870 [DEBUG] [Thread-185518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:36:37.870 [DEBUG] [Thread-185518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:36:37.871 [DEBUG] [Thread-185518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:36:37.871 [DEBUG] [Thread-185518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:36:37.871 [DEBUG] [Thread-185518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:36:37.871 [DEBUG] [Thread-185518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:36:37.871 [DEBUG] [Thread-185518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:36:37.871 [DEBUG] [Thread-185518] [transport.py] [_log()] client lang: <none>
2026-02-14T12:36:37.871 [DEBUG] [Thread-185518] [transport.py] [_log()] server lang: <none>
2026-02-14T12:36:37.871 [DEBUG] [Thread-185518] [transport.py] [_log()] kex follows: False
2026-02-14T12:36:37.871 [DEBUG] [Thread-185518] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:36:37.871 [DEBUG] [Thread-185518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:36:37.871 [DEBUG] [Thread-185518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:36:37.871 [DEBUG] [Thread-185518] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:36:37.871 [DEBUG] [Thread-185518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:36:37.871 [DEBUG] [Thread-185518] [transport.py] [_log()] Compression: none
2026-02-14T12:36:37.871 [DEBUG] [Thread-185518] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:36:37.930 [DEBUG] [Thread-185518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:36:37.931 [DEBUG] [Thread-185518] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:36:37.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:36:37.932 [DEBUG] [Thread-185518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:36:37.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:36:37.987 [DEBUG] [Thread-185518] [transport.py] [_log()] userauth is OK
2026-02-14T12:36:37.987 [DEBUG] [Thread-185518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:36:37.987 [DEBUG] [Thread-185518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:36:37.987 [DEBUG] [Thread-185518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:36:37.987 [DEBUG] [Thread-185518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:36:38.005 [INFO] [Thread-185518] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:36:38.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-14T12:36:38.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:36:38.832 [DEBUG] [Thread-185518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:36:38.832 [DEBUG] [Thread-185518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:36:38.880 [DEBUG] [Thread-185518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:36:38.880 [DEBUG] [Thread-185518] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:36:38.889 [DEBUG] [Thread-185518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:36:38.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:36:38.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:36:38.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-14T12:36:38.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:36:38.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:36:38.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:36:38.924 [DEBUG] [Thread-185518] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:36:42.222 [DEBUG] [Thread-185520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:36:57.284 [DEBUG] [Thread-185521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:37:08.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:37:08.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:37:08.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:37:10.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 37, 1), 11.4, 45.98, 0.0, 40.33, 13.98, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:37:10.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:37:01
2026-02-14T12:37:11.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:37:11.359 [DEBUG] [Thread-185522] [transport.py] [_log()] starting thread (client mode): 0xa5741db0
2026-02-14T12:37:11.359 [DEBUG] [Thread-185522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:37:11.379 [DEBUG] [Thread-185522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:37:11.379 [INFO] [Thread-185522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:37:11.382 [DEBUG] [Thread-185522] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:37:11.382 [DEBUG] [Thread-185522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:37:11.382 [DEBUG] [Thread-185522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:37:11.382 [DEBUG] [Thread-185522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:37:11.382 [DEBUG] [Thread-185522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:37:11.382 [DEBUG] [Thread-185522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:37:11.382 [DEBUG] [Thread-185522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:37:11.382 [DEBUG] [Thread-185522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:37:11.382 [DEBUG] [Thread-185522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:37:11.382 [DEBUG] [Thread-185522] [transport.py] [_log()] client lang: <none>
2026-02-14T12:37:11.382 [DEBUG] [Thread-185522] [transport.py] [_log()] server lang: <none>
2026-02-14T12:37:11.382 [DEBUG] [Thread-185522] [transport.py] [_log()] kex follows: False
2026-02-14T12:37:11.382 [DEBUG] [Thread-185522] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:37:11.382 [DEBUG] [Thread-185522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:37:11.382 [DEBUG] [Thread-185522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:37:11.382 [DEBUG] [Thread-185522] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:37:11.382 [DEBUG] [Thread-185522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:37:11.382 [DEBUG] [Thread-185522] [transport.py] [_log()] Compression: none
2026-02-14T12:37:11.382 [DEBUG] [Thread-185522] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:37:11.401 [DEBUG] [Thread-185522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:37:11.401 [DEBUG] [Thread-185522] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:37:11.402 [DEBUG] [Thread-185522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:37:11.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:37:11.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:37:11.404 [DEBUG] [Thread-185522] [transport.py] [_log()] userauth is OK
2026-02-14T12:37:11.404 [DEBUG] [Thread-185522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:37:11.404 [DEBUG] [Thread-185522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:37:11.404 [DEBUG] [Thread-185522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:37:11.404 [DEBUG] [Thread-185522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:37:11.428 [INFO] [Thread-185522] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:37:11.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:37:12.080 [DEBUG] [Thread-185522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:37:12.080 [DEBUG] [Thread-185522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:37:12.080 [DEBUG] [Thread-185522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:37:12.121 [DEBUG] [Thread-185522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:37:12.122 [DEBUG] [Thread-185522] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:37:12.125 [DEBUG] [Thread-185522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:37:12.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:37:12.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:37:12.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:37:12.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:37:12.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:37:12.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:37:12.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:37:12.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:37:12.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:37:12.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.442124 -999.00  +14.30  36.16     51   +4.40 1 1 2 1 1   888    0 11.00 46.81 ----- 29.0 36.2 161.6 44.2 20.6 -25.5 19.3 -23.5 19.3 -24.0 20.5 -25.3
2026-02-14T12:37:12.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:37:12.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:37:12.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.442124
2026-02-14T12:37:12.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:37:12.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:37:12.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:37:12.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:37:12.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:37:12.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:37:01', tmtdew=11.4, humidity=45.98, cloud=0.0, wind=40.33, temperature=13.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:36:39.514', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:37:12.150 [DEBUG] [Thread-185522] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:37:12.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:37:12.241 [DEBUG] [Thread-185525] [transport.py] [_log()] starting thread (client mode): 0xa2d3cb20
2026-02-14T12:37:12.241 [DEBUG] [Thread-185525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:37:12.255 [DEBUG] [Thread-185525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:37:12.255 [INFO] [Thread-185525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:37:12.263 [DEBUG] [Thread-185525] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:37:12.263 [DEBUG] [Thread-185525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:37:12.263 [DEBUG] [Thread-185525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:37:12.263 [DEBUG] [Thread-185525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:37:12.263 [DEBUG] [Thread-185525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:37:12.263 [DEBUG] [Thread-185525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:37:12.263 [DEBUG] [Thread-185525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:37:12.263 [DEBUG] [Thread-185525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:37:12.263 [DEBUG] [Thread-185525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:37:12.263 [DEBUG] [Thread-185525] [transport.py] [_log()] client lang: <none>
2026-02-14T12:37:12.263 [DEBUG] [Thread-185525] [transport.py] [_log()] server lang: <none>
2026-02-14T12:37:12.263 [DEBUG] [Thread-185525] [transport.py] [_log()] kex follows: False
2026-02-14T12:37:12.264 [DEBUG] [Thread-185525] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:37:12.264 [DEBUG] [Thread-185525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:37:12.264 [DEBUG] [Thread-185525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:37:12.264 [DEBUG] [Thread-185525] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:37:12.264 [DEBUG] [Thread-185525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:37:12.264 [DEBUG] [Thread-185525] [transport.py] [_log()] Compression: none
2026-02-14T12:37:12.264 [DEBUG] [Thread-185525] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:37:12.322 [DEBUG] [Thread-185527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:37:12.323 [DEBUG] [Thread-185525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:37:12.324 [DEBUG] [Thread-185525] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:37:12.325 [DEBUG] [Thread-185525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:37:12.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:37:12.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:37:12.382 [DEBUG] [Thread-185525] [transport.py] [_log()] userauth is OK
2026-02-14T12:37:12.382 [DEBUG] [Thread-185525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:37:12.382 [DEBUG] [Thread-185525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:37:12.382 [DEBUG] [Thread-185525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:37:12.383 [DEBUG] [Thread-185525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:37:12.405 [INFO] [Thread-185525] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:37:12.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-14T12:37:12.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:37:13.209 [DEBUG] [Thread-185525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:37:13.209 [DEBUG] [Thread-185525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:37:13.257 [DEBUG] [Thread-185525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:37:13.257 [DEBUG] [Thread-185525] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:37:13.266 [DEBUG] [Thread-185525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:37:13.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:37:13.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-14T12:37:13.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:37:13.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:37:13.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:37:13.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:37:13.300 [DEBUG] [Thread-185525] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:37:22.001 [DEBUG] [Thread-185528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:37:22.649 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:37:22.651 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:37:27.384 [DEBUG] [Thread-185529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:37:42.423 [DEBUG] [Thread-185530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:37:43.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:37:43.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:37:43.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:37:45.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 37, 36), 12.75, 42.26, 0.0, 38.42, 15.43, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:37:45.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:37:36
2026-02-14T12:37:45.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:37:45.785 [DEBUG] [Thread-185531] [transport.py] [_log()] starting thread (client mode): 0xa2ddd630
2026-02-14T12:37:45.785 [DEBUG] [Thread-185531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:37:45.806 [DEBUG] [Thread-185531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:37:45.806 [INFO] [Thread-185531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:37:45.810 [DEBUG] [Thread-185531] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:37:45.810 [DEBUG] [Thread-185531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:37:45.810 [DEBUG] [Thread-185531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:37:45.810 [DEBUG] [Thread-185531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:37:45.810 [DEBUG] [Thread-185531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:37:45.810 [DEBUG] [Thread-185531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:37:45.811 [DEBUG] [Thread-185531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:37:45.811 [DEBUG] [Thread-185531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:37:45.811 [DEBUG] [Thread-185531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:37:45.811 [DEBUG] [Thread-185531] [transport.py] [_log()] client lang: <none>
2026-02-14T12:37:45.811 [DEBUG] [Thread-185531] [transport.py] [_log()] server lang: <none>
2026-02-14T12:37:45.811 [DEBUG] [Thread-185531] [transport.py] [_log()] kex follows: False
2026-02-14T12:37:45.811 [DEBUG] [Thread-185531] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:37:45.811 [DEBUG] [Thread-185531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:37:45.811 [DEBUG] [Thread-185531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:37:45.811 [DEBUG] [Thread-185531] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:37:45.812 [DEBUG] [Thread-185531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:37:45.812 [DEBUG] [Thread-185531] [transport.py] [_log()] Compression: none
2026-02-14T12:37:45.812 [DEBUG] [Thread-185531] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:37:45.829 [DEBUG] [Thread-185531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:37:45.830 [DEBUG] [Thread-185531] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:37:45.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:37:45.831 [DEBUG] [Thread-185531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:37:45.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:37:45.834 [DEBUG] [Thread-185531] [transport.py] [_log()] userauth is OK
2026-02-14T12:37:45.834 [DEBUG] [Thread-185531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:37:45.834 [DEBUG] [Thread-185531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:37:45.835 [DEBUG] [Thread-185531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:37:45.835 [DEBUG] [Thread-185531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:37:45.858 [INFO] [Thread-185531] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:37:45.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:37:46.525 [DEBUG] [Thread-185531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:37:46.525 [DEBUG] [Thread-185531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:37:46.525 [DEBUG] [Thread-185531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:37:46.566 [DEBUG] [Thread-185531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:37:46.567 [DEBUG] [Thread-185531] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:37:46.570 [DEBUG] [Thread-185531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:37:46.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:37:46.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:37:46.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:37:46.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:37:46.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:37:46.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:37:46.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:37:46.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:37:46.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:37:46.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.442471 -999.00  +14.10  26.08     51   +4.20 1 1 1 1 1   888    0 10.85 40.44 ----- 25.1 26.1 158.0 34.0 20.5 -25.6 19.3 -26.0 19.3 -23.4 20.5 -24.9
2026-02-14T12:37:46.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:37:46.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:37:46.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.442471
2026-02-14T12:37:46.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:37:46.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:37:46.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:37:46.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:37:46.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:37:46.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:37:36', tmtdew=12.75, humidity=42.26, cloud=0.0, wind=38.42, temperature=15.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:37:09.494', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:37:46.595 [DEBUG] [Thread-185531] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:37:46.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:37:46.691 [DEBUG] [Thread-185534] [transport.py] [_log()] starting thread (client mode): 0xa2dc1d20
2026-02-14T12:37:46.691 [DEBUG] [Thread-185534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:37:46.710 [DEBUG] [Thread-185534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:37:46.710 [INFO] [Thread-185534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:37:46.718 [DEBUG] [Thread-185534] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:37:46.718 [DEBUG] [Thread-185534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:37:46.718 [DEBUG] [Thread-185534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:37:46.718 [DEBUG] [Thread-185534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:37:46.718 [DEBUG] [Thread-185534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:37:46.718 [DEBUG] [Thread-185534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:37:46.718 [DEBUG] [Thread-185534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:37:46.718 [DEBUG] [Thread-185534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:37:46.718 [DEBUG] [Thread-185534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:37:46.718 [DEBUG] [Thread-185534] [transport.py] [_log()] client lang: <none>
2026-02-14T12:37:46.719 [DEBUG] [Thread-185534] [transport.py] [_log()] server lang: <none>
2026-02-14T12:37:46.719 [DEBUG] [Thread-185534] [transport.py] [_log()] kex follows: False
2026-02-14T12:37:46.719 [DEBUG] [Thread-185534] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:37:46.719 [DEBUG] [Thread-185534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:37:46.719 [DEBUG] [Thread-185534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:37:46.719 [DEBUG] [Thread-185534] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:37:46.719 [DEBUG] [Thread-185534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:37:46.719 [DEBUG] [Thread-185534] [transport.py] [_log()] Compression: none
2026-02-14T12:37:46.719 [DEBUG] [Thread-185534] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:37:46.779 [DEBUG] [Thread-185534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:37:46.779 [DEBUG] [Thread-185534] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:37:46.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:37:46.780 [DEBUG] [Thread-185534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:37:46.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:37:46.835 [DEBUG] [Thread-185534] [transport.py] [_log()] userauth is OK
2026-02-14T12:37:46.835 [DEBUG] [Thread-185534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:37:46.835 [DEBUG] [Thread-185534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:37:46.835 [DEBUG] [Thread-185534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:37:46.835 [DEBUG] [Thread-185534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:37:46.854 [INFO] [Thread-185534] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:37:46.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-14T12:37:46.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:37:47.675 [DEBUG] [Thread-185534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:37:47.676 [DEBUG] [Thread-185534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:37:47.723 [DEBUG] [Thread-185534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:37:47.724 [DEBUG] [Thread-185534] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:37:47.733 [DEBUG] [Thread-185534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:37:47.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:37:47.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:37:47.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-14T12:37:47.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:37:47.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:37:47.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:37:47.770 [DEBUG] [Thread-185534] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:37:57.460 [DEBUG] [Thread-185536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:38:12.518 [DEBUG] [Thread-185537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:38:17.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:38:17.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:38:17.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-14T12:38:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 37, 36), 12.75, 42.26, 0.0, 38.42, 15.43, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:38:19.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:37:36
2026-02-14T12:38:20.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:38:20.190 [DEBUG] [Thread-185538] [transport.py] [_log()] starting thread (client mode): 0xa2d22260
2026-02-14T12:38:20.191 [DEBUG] [Thread-185538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:38:20.211 [DEBUG] [Thread-185538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:38:20.211 [INFO] [Thread-185538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:38:20.214 [DEBUG] [Thread-185538] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:38:20.214 [DEBUG] [Thread-185538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:38:20.214 [DEBUG] [Thread-185538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:38:20.214 [DEBUG] [Thread-185538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:38:20.214 [DEBUG] [Thread-185538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:38:20.214 [DEBUG] [Thread-185538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:38:20.214 [DEBUG] [Thread-185538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:38:20.214 [DEBUG] [Thread-185538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:38:20.214 [DEBUG] [Thread-185538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:38:20.214 [DEBUG] [Thread-185538] [transport.py] [_log()] client lang: <none>
2026-02-14T12:38:20.214 [DEBUG] [Thread-185538] [transport.py] [_log()] server lang: <none>
2026-02-14T12:38:20.214 [DEBUG] [Thread-185538] [transport.py] [_log()] kex follows: False
2026-02-14T12:38:20.214 [DEBUG] [Thread-185538] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:38:20.214 [DEBUG] [Thread-185538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:38:20.214 [DEBUG] [Thread-185538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:38:20.214 [DEBUG] [Thread-185538] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:38:20.214 [DEBUG] [Thread-185538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:38:20.214 [DEBUG] [Thread-185538] [transport.py] [_log()] Compression: none
2026-02-14T12:38:20.214 [DEBUG] [Thread-185538] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:38:20.232 [DEBUG] [Thread-185538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:38:20.232 [DEBUG] [Thread-185538] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:38:20.233 [DEBUG] [Thread-185538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:38:20.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:38:20.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:38:20.235 [DEBUG] [Thread-185538] [transport.py] [_log()] userauth is OK
2026-02-14T12:38:20.235 [DEBUG] [Thread-185538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:38:20.236 [DEBUG] [Thread-185538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:38:20.236 [DEBUG] [Thread-185538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:38:20.236 [DEBUG] [Thread-185538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:38:20.261 [INFO] [Thread-185538] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:38:20.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:38:20.947 [DEBUG] [Thread-185538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:38:20.947 [DEBUG] [Thread-185538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:38:20.948 [DEBUG] [Thread-185538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:38:20.989 [DEBUG] [Thread-185538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:38:20.989 [DEBUG] [Thread-185538] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:38:20.993 [DEBUG] [Thread-185538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:38:21.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:38:21.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:38:21.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:38:21.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:38:21.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:38:21.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:38:21.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:38:21.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:38:21.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:38:21.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.443166 -999.00  +13.90  38.31     51   +4.20 1 1 2 1 1   888    0 11.04 45.59 ----- 37.1 38.3 145.0 41.0 20.5 -26.0 19.4 -24.7 19.3 -24.3 20.4 -26.2
2026-02-14T12:38:21.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:38:21.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:38:21.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.443166
2026-02-14T12:38:21.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:38:21.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:38:21.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:38:21.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:38:21.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:38:21.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:37:36', tmtdew=12.75, humidity=42.26, cloud=0.0, wind=38.42, temperature=15.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:38:09.542', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:38:21.018 [DEBUG] [Thread-185538] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:38:21.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-14T12:38:21.112 [DEBUG] [Thread-185541] [transport.py] [_log()] starting thread (client mode): 0xa2ddd0c0
2026-02-14T12:38:21.112 [DEBUG] [Thread-185541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:38:21.127 [DEBUG] [Thread-185541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:38:21.127 [INFO] [Thread-185541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:38:21.135 [DEBUG] [Thread-185541] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:38:21.135 [DEBUG] [Thread-185541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:38:21.135 [DEBUG] [Thread-185541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:38:21.135 [DEBUG] [Thread-185541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:38:21.135 [DEBUG] [Thread-185541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:38:21.135 [DEBUG] [Thread-185541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:38:21.135 [DEBUG] [Thread-185541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:38:21.135 [DEBUG] [Thread-185541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:38:21.135 [DEBUG] [Thread-185541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:38:21.135 [DEBUG] [Thread-185541] [transport.py] [_log()] client lang: <none>
2026-02-14T12:38:21.135 [DEBUG] [Thread-185541] [transport.py] [_log()] server lang: <none>
2026-02-14T12:38:21.135 [DEBUG] [Thread-185541] [transport.py] [_log()] kex follows: False
2026-02-14T12:38:21.135 [DEBUG] [Thread-185541] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:38:21.135 [DEBUG] [Thread-185541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:38:21.135 [DEBUG] [Thread-185541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:38:21.135 [DEBUG] [Thread-185541] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:38:21.135 [DEBUG] [Thread-185541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:38:21.136 [DEBUG] [Thread-185541] [transport.py] [_log()] Compression: none
2026-02-14T12:38:21.136 [DEBUG] [Thread-185541] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:38:21.194 [DEBUG] [Thread-185541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:38:21.195 [DEBUG] [Thread-185541] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:38:21.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:38:21.196 [DEBUG] [Thread-185541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:38:21.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:38:21.251 [DEBUG] [Thread-185541] [transport.py] [_log()] userauth is OK
2026-02-14T12:38:21.251 [DEBUG] [Thread-185541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:38:21.251 [DEBUG] [Thread-185541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:38:21.251 [DEBUG] [Thread-185541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:38:21.251 [DEBUG] [Thread-185541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:38:21.270 [INFO] [Thread-185541] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:38:21.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-14T12:38:21.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:38:22.035 [DEBUG] [Thread-185543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:38:22.089 [DEBUG] [Thread-185541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:38:22.090 [DEBUG] [Thread-185541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:38:22.137 [DEBUG] [Thread-185541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:38:22.138 [DEBUG] [Thread-185541] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:38:22.147 [DEBUG] [Thread-185541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:38:22.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:38:22.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-14T12:38:22.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-14T12:38:22.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:38:22.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:38:22.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:38:22.183 [DEBUG] [Thread-185541] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:38:22.790 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:38:22.791 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:38:27.558 [DEBUG] [Thread-185544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:38:42.609 [DEBUG] [Thread-185545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:38:52.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:38:52.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:38:52.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-14T12:38:54.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 38, 12), 11.63, 45.23, 0.0, 36.17, 14.13, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:38:54.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:38:12
2026-02-14T12:38:54.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:38:54.985 [DEBUG] [Thread-185546] [transport.py] [_log()] starting thread (client mode): 0xa5741e10
2026-02-14T12:38:54.985 [DEBUG] [Thread-185546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:38:55.005 [DEBUG] [Thread-185546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:38:55.005 [INFO] [Thread-185546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:38:55.009 [DEBUG] [Thread-185546] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:38:55.009 [DEBUG] [Thread-185546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:38:55.009 [DEBUG] [Thread-185546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:38:55.009 [DEBUG] [Thread-185546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:38:55.009 [DEBUG] [Thread-185546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:38:55.010 [DEBUG] [Thread-185546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:38:55.010 [DEBUG] [Thread-185546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:38:55.010 [DEBUG] [Thread-185546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:38:55.010 [DEBUG] [Thread-185546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:38:55.010 [DEBUG] [Thread-185546] [transport.py] [_log()] client lang: <none>
2026-02-14T12:38:55.010 [DEBUG] [Thread-185546] [transport.py] [_log()] server lang: <none>
2026-02-14T12:38:55.010 [DEBUG] [Thread-185546] [transport.py] [_log()] kex follows: False
2026-02-14T12:38:55.010 [DEBUG] [Thread-185546] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:38:55.010 [DEBUG] [Thread-185546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:38:55.010 [DEBUG] [Thread-185546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:38:55.010 [DEBUG] [Thread-185546] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:38:55.010 [DEBUG] [Thread-185546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:38:55.010 [DEBUG] [Thread-185546] [transport.py] [_log()] Compression: none
2026-02-14T12:38:55.010 [DEBUG] [Thread-185546] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:38:55.027 [DEBUG] [Thread-185546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:38:55.028 [DEBUG] [Thread-185546] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:38:55.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:38:55.029 [DEBUG] [Thread-185546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:38:55.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:38:55.031 [DEBUG] [Thread-185546] [transport.py] [_log()] userauth is OK
2026-02-14T12:38:55.031 [DEBUG] [Thread-185546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:38:55.031 [DEBUG] [Thread-185546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:38:55.031 [DEBUG] [Thread-185546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:38:55.032 [DEBUG] [Thread-185546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:38:55.069 [INFO] [Thread-185546] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:38:55.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:38:55.715 [DEBUG] [Thread-185546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:38:55.716 [DEBUG] [Thread-185546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:38:55.716 [DEBUG] [Thread-185546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:38:55.756 [DEBUG] [Thread-185546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:38:55.757 [DEBUG] [Thread-185546] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:38:55.760 [DEBUG] [Thread-185546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:38:55.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:38:55.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:38:55.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:38:55.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:38:55.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:38:55.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:38:55.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:38:55.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:38:55.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:38:55.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.443513 -999.00  +13.50  28.26     53   +4.30 1 1 1 1 1   888    0 10.83 40.69 ----- 18.7 28.3 146.6 40.4 20.4 -24.4 19.3 -24.4 19.3 -23.0 20.4 -24.6
2026-02-14T12:38:55.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:38:55.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:38:55.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.443513
2026-02-14T12:38:55.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:38:55.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:38:55.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:38:55.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:38:55.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:38:55.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:38:12', tmtdew=11.63, humidity=45.23, cloud=0.0, wind=36.17, temperature=14.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:38:39.523', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:38:55.789 [DEBUG] [Thread-185546] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:38:55.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-14T12:38:55.883 [DEBUG] [Thread-185549] [transport.py] [_log()] starting thread (client mode): 0xa575b430
2026-02-14T12:38:55.883 [DEBUG] [Thread-185549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:38:55.898 [DEBUG] [Thread-185549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:38:55.898 [INFO] [Thread-185549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:38:55.905 [DEBUG] [Thread-185549] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:38:55.906 [DEBUG] [Thread-185549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:38:55.906 [DEBUG] [Thread-185549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:38:55.906 [DEBUG] [Thread-185549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:38:55.906 [DEBUG] [Thread-185549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:38:55.906 [DEBUG] [Thread-185549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:38:55.906 [DEBUG] [Thread-185549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:38:55.906 [DEBUG] [Thread-185549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:38:55.906 [DEBUG] [Thread-185549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:38:55.906 [DEBUG] [Thread-185549] [transport.py] [_log()] client lang: <none>
2026-02-14T12:38:55.906 [DEBUG] [Thread-185549] [transport.py] [_log()] server lang: <none>
2026-02-14T12:38:55.907 [DEBUG] [Thread-185549] [transport.py] [_log()] kex follows: False
2026-02-14T12:38:55.907 [DEBUG] [Thread-185549] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:38:55.907 [DEBUG] [Thread-185549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:38:55.907 [DEBUG] [Thread-185549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:38:55.907 [DEBUG] [Thread-185549] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:38:55.907 [DEBUG] [Thread-185549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:38:55.907 [DEBUG] [Thread-185549] [transport.py] [_log()] Compression: none
2026-02-14T12:38:55.907 [DEBUG] [Thread-185549] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:38:55.966 [DEBUG] [Thread-185549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:38:55.967 [DEBUG] [Thread-185549] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:38:55.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:38:55.968 [DEBUG] [Thread-185549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:38:55.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:38:56.023 [DEBUG] [Thread-185549] [transport.py] [_log()] userauth is OK
2026-02-14T12:38:56.024 [DEBUG] [Thread-185549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:38:56.024 [DEBUG] [Thread-185549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:38:56.024 [DEBUG] [Thread-185549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:38:56.024 [DEBUG] [Thread-185549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:38:56.042 [INFO] [Thread-185549] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:38:56.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-14T12:38:56.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:38:56.874 [DEBUG] [Thread-185549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:38:56.875 [DEBUG] [Thread-185549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:38:56.922 [DEBUG] [Thread-185549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:38:56.922 [DEBUG] [Thread-185549] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:38:56.932 [DEBUG] [Thread-185549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:38:56.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:38:56.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:38:56.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:38:56.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:38:56.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:38:56.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:38:56.969 [DEBUG] [Thread-185549] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:38:57.643 [DEBUG] [Thread-185551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:39:12.697 [DEBUG] [Thread-185552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:39:22.068 [DEBUG] [Thread-185553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:39:22.933 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:39:22.934 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:39:26.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:39:26.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:39:26.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-14T12:39:27.739 [DEBUG] [Thread-185554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:39:29.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 38, 47), 11.33, 46.36, 0.0, 33.58, 14.23, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:39:29.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:38:47
2026-02-14T12:39:29.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:39:30.005 [DEBUG] [Thread-185555] [transport.py] [_log()] starting thread (client mode): 0xa57410f0
2026-02-14T12:39:30.005 [DEBUG] [Thread-185555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:39:30.024 [DEBUG] [Thread-185555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:39:30.024 [INFO] [Thread-185555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:39:30.026 [DEBUG] [Thread-185555] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:39:30.026 [DEBUG] [Thread-185555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:39:30.026 [DEBUG] [Thread-185555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:39:30.026 [DEBUG] [Thread-185555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:39:30.026 [DEBUG] [Thread-185555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:39:30.026 [DEBUG] [Thread-185555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:39:30.026 [DEBUG] [Thread-185555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:39:30.026 [DEBUG] [Thread-185555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:39:30.026 [DEBUG] [Thread-185555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:39:30.026 [DEBUG] [Thread-185555] [transport.py] [_log()] client lang: <none>
2026-02-14T12:39:30.026 [DEBUG] [Thread-185555] [transport.py] [_log()] server lang: <none>
2026-02-14T12:39:30.026 [DEBUG] [Thread-185555] [transport.py] [_log()] kex follows: False
2026-02-14T12:39:30.026 [DEBUG] [Thread-185555] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:39:30.026 [DEBUG] [Thread-185555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:39:30.026 [DEBUG] [Thread-185555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:39:30.026 [DEBUG] [Thread-185555] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:39:30.026 [DEBUG] [Thread-185555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:39:30.026 [DEBUG] [Thread-185555] [transport.py] [_log()] Compression: none
2026-02-14T12:39:30.026 [DEBUG] [Thread-185555] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:39:30.038 [DEBUG] [Thread-185555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:39:30.038 [DEBUG] [Thread-185555] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:39:30.038 [DEBUG] [Thread-185555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:39:30.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:39:30.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:39:30.040 [DEBUG] [Thread-185555] [transport.py] [_log()] userauth is OK
2026-02-14T12:39:30.040 [DEBUG] [Thread-185555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:39:30.040 [DEBUG] [Thread-185555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:39:30.040 [DEBUG] [Thread-185555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:39:30.040 [DEBUG] [Thread-185555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:39:30.053 [INFO] [Thread-185555] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:39:30.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:39:30.689 [DEBUG] [Thread-185555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:39:30.690 [DEBUG] [Thread-185555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:39:30.690 [DEBUG] [Thread-185555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:39:30.731 [DEBUG] [Thread-185555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:39:30.731 [DEBUG] [Thread-185555] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:39:30.734 [DEBUG] [Thread-185555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:39:30.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:39:30.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:39:30.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:39:30.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:39:30.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:39:30.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:39:30.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:39:30.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:39:30.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:39:30.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.443860 -999.00  +13.40  21.55     54   +4.40 1 2 1 1 1   888    0 10.93 37.40 ----- 23.2 21.6 145.0 29.5 20.5 -24.1 19.4 -23.8 19.4 -21.0 20.4 -24.2
2026-02-14T12:39:30.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:39:30.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:39:30.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.443860
2026-02-14T12:39:30.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:39:30.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:39:30.763 [DEBUG] [Thread-185555] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:39:30.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:39:30.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:39:30.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T12:39:30.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:38:47', tmtdew=11.33, humidity=46.36, cloud=0.0, wind=33.58, temperature=14.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:39:09.504', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:39:30.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-14T12:39:30.865 [DEBUG] [Thread-185558] [transport.py] [_log()] starting thread (client mode): 0xa575b490
2026-02-14T12:39:30.865 [DEBUG] [Thread-185558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:39:30.881 [DEBUG] [Thread-185558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:39:30.881 [INFO] [Thread-185558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:39:30.889 [DEBUG] [Thread-185558] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:39:30.889 [DEBUG] [Thread-185558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:39:30.889 [DEBUG] [Thread-185558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:39:30.889 [DEBUG] [Thread-185558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:39:30.889 [DEBUG] [Thread-185558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:39:30.889 [DEBUG] [Thread-185558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:39:30.889 [DEBUG] [Thread-185558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:39:30.889 [DEBUG] [Thread-185558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:39:30.889 [DEBUG] [Thread-185558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:39:30.889 [DEBUG] [Thread-185558] [transport.py] [_log()] client lang: <none>
2026-02-14T12:39:30.889 [DEBUG] [Thread-185558] [transport.py] [_log()] server lang: <none>
2026-02-14T12:39:30.890 [DEBUG] [Thread-185558] [transport.py] [_log()] kex follows: False
2026-02-14T12:39:30.890 [DEBUG] [Thread-185558] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:39:30.890 [DEBUG] [Thread-185558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:39:30.890 [DEBUG] [Thread-185558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:39:30.890 [DEBUG] [Thread-185558] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:39:30.890 [DEBUG] [Thread-185558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:39:30.890 [DEBUG] [Thread-185558] [transport.py] [_log()] Compression: none
2026-02-14T12:39:30.890 [DEBUG] [Thread-185558] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:39:30.947 [DEBUG] [Thread-185558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:39:30.948 [DEBUG] [Thread-185558] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:39:30.948 [DEBUG] [Thread-185558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:39:30.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:39:30.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:39:31.003 [DEBUG] [Thread-185558] [transport.py] [_log()] userauth is OK
2026-02-14T12:39:31.004 [DEBUG] [Thread-185558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:39:31.004 [DEBUG] [Thread-185558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:39:31.004 [DEBUG] [Thread-185558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:39:31.004 [DEBUG] [Thread-185558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:39:31.030 [INFO] [Thread-185558] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:39:31.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-14T12:39:31.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:39:31.859 [DEBUG] [Thread-185558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:39:31.860 [DEBUG] [Thread-185558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:39:31.907 [DEBUG] [Thread-185558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:39:31.908 [DEBUG] [Thread-185558] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:39:31.917 [DEBUG] [Thread-185558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:39:31.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:39:31.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-14T12:39:31.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:39:31.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:39:31.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:39:31.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:39:31.951 [DEBUG] [Thread-185558] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:39:42.776 [DEBUG] [Thread-185560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:39:57.830 [DEBUG] [Thread-185561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:40:01.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:40:01.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:40:01.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:40:04.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 39, 24), 11.21, 46.71, 0.0, 34.95, 14.16, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:40:04.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:39:24
2026-02-14T12:40:04.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:40:04.741 [DEBUG] [Thread-185562] [transport.py] [_log()] starting thread (client mode): 0xa2de2080
2026-02-14T12:40:04.741 [DEBUG] [Thread-185562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:40:04.761 [DEBUG] [Thread-185562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:40:04.761 [INFO] [Thread-185562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:40:04.765 [DEBUG] [Thread-185562] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:40:04.765 [DEBUG] [Thread-185562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:40:04.765 [DEBUG] [Thread-185562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:40:04.765 [DEBUG] [Thread-185562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:40:04.765 [DEBUG] [Thread-185562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:40:04.765 [DEBUG] [Thread-185562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:40:04.765 [DEBUG] [Thread-185562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:40:04.765 [DEBUG] [Thread-185562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:40:04.765 [DEBUG] [Thread-185562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:40:04.765 [DEBUG] [Thread-185562] [transport.py] [_log()] client lang: <none>
2026-02-14T12:40:04.765 [DEBUG] [Thread-185562] [transport.py] [_log()] server lang: <none>
2026-02-14T12:40:04.765 [DEBUG] [Thread-185562] [transport.py] [_log()] kex follows: False
2026-02-14T12:40:04.765 [DEBUG] [Thread-185562] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:40:04.765 [DEBUG] [Thread-185562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:40:04.765 [DEBUG] [Thread-185562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:40:04.765 [DEBUG] [Thread-185562] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:40:04.765 [DEBUG] [Thread-185562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:40:04.765 [DEBUG] [Thread-185562] [transport.py] [_log()] Compression: none
2026-02-14T12:40:04.765 [DEBUG] [Thread-185562] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:40:04.773 [DEBUG] [Thread-185562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:40:04.774 [DEBUG] [Thread-185562] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:40:04.774 [DEBUG] [Thread-185562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:40:04.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:40:04.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:40:04.776 [DEBUG] [Thread-185562] [transport.py] [_log()] userauth is OK
2026-02-14T12:40:04.776 [DEBUG] [Thread-185562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:40:04.776 [DEBUG] [Thread-185562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:40:04.776 [DEBUG] [Thread-185562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:40:04.776 [DEBUG] [Thread-185562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:40:04.794 [INFO] [Thread-185562] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:40:04.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:40:12.876 [DEBUG] [Thread-185564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:40:14.723 [DEBUG] [Thread-185562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:40:14.723 [DEBUG] [Thread-185562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:40:14.724 [DEBUG] [Thread-185562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:40:14.764 [DEBUG] [Thread-185562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:40:14.765 [DEBUG] [Thread-185562] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:40:14.768 [DEBUG] [Thread-185562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:40:14.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:40:14.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:40:14.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:40:14.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:40:14.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:40:14.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:40:14.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:40:14.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:40:14.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:40:14.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.444207 -999.00  +13.80  28.01     52   +4.40 1 1 1 1 1   888    0 10.81 30.88 ----- 30.6 28.0 183.2 35.6 20.3 -27.2 18.9 -30.0 19.2 -26.3 20.3 -27.1
2026-02-14T12:40:14.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:40:14.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:40:14.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.444207
2026-02-14T12:40:14.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:40:14.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:40:14.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:40:14.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:40:14.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:40:14.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:39:24', tmtdew=11.21, humidity=46.71, cloud=0.0, wind=34.95, temperature=14.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:39:39.485', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:40:14.874 [DEBUG] [Thread-185562] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:40:14.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-14T12:40:14.970 [DEBUG] [Thread-185566] [transport.py] [_log()] starting thread (client mode): 0xa5758040
2026-02-14T12:40:14.970 [DEBUG] [Thread-185566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:40:14.988 [DEBUG] [Thread-185566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:40:14.988 [INFO] [Thread-185566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:40:14.996 [DEBUG] [Thread-185566] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:40:14.996 [DEBUG] [Thread-185566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:40:14.996 [DEBUG] [Thread-185566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:40:14.996 [DEBUG] [Thread-185566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:40:14.996 [DEBUG] [Thread-185566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:40:14.996 [DEBUG] [Thread-185566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:40:14.996 [DEBUG] [Thread-185566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:40:14.996 [DEBUG] [Thread-185566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:40:14.996 [DEBUG] [Thread-185566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:40:14.996 [DEBUG] [Thread-185566] [transport.py] [_log()] client lang: <none>
2026-02-14T12:40:14.996 [DEBUG] [Thread-185566] [transport.py] [_log()] server lang: <none>
2026-02-14T12:40:14.996 [DEBUG] [Thread-185566] [transport.py] [_log()] kex follows: False
2026-02-14T12:40:14.996 [DEBUG] [Thread-185566] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:40:14.996 [DEBUG] [Thread-185566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:40:14.996 [DEBUG] [Thread-185566] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:40:14.996 [DEBUG] [Thread-185566] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:40:14.997 [DEBUG] [Thread-185566] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:40:14.997 [DEBUG] [Thread-185566] [transport.py] [_log()] Compression: none
2026-02-14T12:40:14.997 [DEBUG] [Thread-185566] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:40:15.056 [DEBUG] [Thread-185566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:40:15.056 [DEBUG] [Thread-185566] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:40:15.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:40:15.057 [DEBUG] [Thread-185566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:40:15.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:40:15.114 [DEBUG] [Thread-185566] [transport.py] [_log()] userauth is OK
2026-02-14T12:40:15.114 [DEBUG] [Thread-185566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:40:15.114 [DEBUG] [Thread-185566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:40:15.114 [DEBUG] [Thread-185566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:40:15.114 [DEBUG] [Thread-185566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:40:15.134 [INFO] [Thread-185566] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:40:15.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-14T12:40:15.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:40:15.932 [DEBUG] [Thread-185566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:40:15.932 [DEBUG] [Thread-185566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:40:15.980 [DEBUG] [Thread-185566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:40:15.980 [DEBUG] [Thread-185566] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:40:15.988 [DEBUG] [Thread-185566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:40:15.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:40:15.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-14T12:40:16.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-14T12:40:16.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:40:16.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:40:16.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:40:16.022 [DEBUG] [Thread-185566] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:40:22.107 [DEBUG] [Thread-185568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:40:23.075 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:40:23.077 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:40:27.914 [DEBUG] [Thread-185569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:40:42.967 [DEBUG] [Thread-185570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:40:46.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:40:46.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:40:46.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-14T12:40:47.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 40, 35), 11.87, 44.84, 0.0, 45.59, 14.96, 0, 0, 0, 2, 1, 0),)
2026-02-14T12:40:47.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:40:35
2026-02-14T12:40:48.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:40:48.389 [DEBUG] [Thread-185571] [transport.py] [_log()] starting thread (client mode): 0xa57582e0
2026-02-14T12:40:48.389 [DEBUG] [Thread-185571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:40:48.409 [DEBUG] [Thread-185571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:40:48.409 [INFO] [Thread-185571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:40:48.413 [DEBUG] [Thread-185571] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:40:48.413 [DEBUG] [Thread-185571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:40:48.413 [DEBUG] [Thread-185571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:40:48.413 [DEBUG] [Thread-185571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:40:48.413 [DEBUG] [Thread-185571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:40:48.413 [DEBUG] [Thread-185571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:40:48.413 [DEBUG] [Thread-185571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:40:48.414 [DEBUG] [Thread-185571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:40:48.414 [DEBUG] [Thread-185571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:40:48.414 [DEBUG] [Thread-185571] [transport.py] [_log()] client lang: <none>
2026-02-14T12:40:48.414 [DEBUG] [Thread-185571] [transport.py] [_log()] server lang: <none>
2026-02-14T12:40:48.414 [DEBUG] [Thread-185571] [transport.py] [_log()] kex follows: False
2026-02-14T12:40:48.414 [DEBUG] [Thread-185571] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:40:48.414 [DEBUG] [Thread-185571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:40:48.414 [DEBUG] [Thread-185571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:40:48.414 [DEBUG] [Thread-185571] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:40:48.414 [DEBUG] [Thread-185571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:40:48.414 [DEBUG] [Thread-185571] [transport.py] [_log()] Compression: none
2026-02-14T12:40:48.414 [DEBUG] [Thread-185571] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:40:48.434 [DEBUG] [Thread-185571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:40:48.435 [DEBUG] [Thread-185571] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:40:48.435 [DEBUG] [Thread-185571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:40:48.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:40:48.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:40:48.438 [DEBUG] [Thread-185571] [transport.py] [_log()] userauth is OK
2026-02-14T12:40:48.438 [DEBUG] [Thread-185571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:40:48.438 [DEBUG] [Thread-185571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:40:48.438 [DEBUG] [Thread-185571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:40:48.438 [DEBUG] [Thread-185571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:40:48.464 [INFO] [Thread-185571] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:40:48.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:40:49.105 [DEBUG] [Thread-185571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:40:49.105 [DEBUG] [Thread-185571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:40:49.106 [DEBUG] [Thread-185571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:40:49.146 [DEBUG] [Thread-185571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:40:49.147 [DEBUG] [Thread-185571] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:40:49.150 [DEBUG] [Thread-185571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:40:49.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:40:49.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:40:49.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:40:49.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:40:49.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:40:49.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:40:49.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:40:49.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:40:49.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:40:49.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.444555 -999.00  +13.80  22.09     52   +4.30 1 1 1 1 1   888    0 10.70 29.43 ----- 23.3 22.1 163.2 35.9 20.5 -25.8 19.3 -22.5 19.4 -23.7 20.5 -25.5
2026-02-14T12:40:49.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:40:49.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:40:49.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.444555
2026-02-14T12:40:49.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:40:49.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:40:49.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:40:49.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:40:49.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:40:49.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:40:35', tmtdew=11.87, humidity=44.84, cloud=0.0, wind=45.59, temperature=14.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:40:09.552', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:40:49.177 [DEBUG] [Thread-185571] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:40:49.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-14T12:40:49.283 [DEBUG] [Thread-185574] [transport.py] [_log()] starting thread (client mode): 0xa2d564d0
2026-02-14T12:40:49.283 [DEBUG] [Thread-185574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:40:49.298 [DEBUG] [Thread-185574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:40:49.298 [INFO] [Thread-185574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:40:49.306 [DEBUG] [Thread-185574] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:40:49.306 [DEBUG] [Thread-185574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:40:49.306 [DEBUG] [Thread-185574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:40:49.306 [DEBUG] [Thread-185574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:40:49.306 [DEBUG] [Thread-185574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:40:49.306 [DEBUG] [Thread-185574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:40:49.306 [DEBUG] [Thread-185574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:40:49.306 [DEBUG] [Thread-185574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:40:49.306 [DEBUG] [Thread-185574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:40:49.306 [DEBUG] [Thread-185574] [transport.py] [_log()] client lang: <none>
2026-02-14T12:40:49.306 [DEBUG] [Thread-185574] [transport.py] [_log()] server lang: <none>
2026-02-14T12:40:49.307 [DEBUG] [Thread-185574] [transport.py] [_log()] kex follows: False
2026-02-14T12:40:49.307 [DEBUG] [Thread-185574] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:40:49.307 [DEBUG] [Thread-185574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:40:49.307 [DEBUG] [Thread-185574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:40:49.307 [DEBUG] [Thread-185574] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:40:49.307 [DEBUG] [Thread-185574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:40:49.307 [DEBUG] [Thread-185574] [transport.py] [_log()] Compression: none
2026-02-14T12:40:49.307 [DEBUG] [Thread-185574] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:40:49.370 [DEBUG] [Thread-185574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:40:49.370 [DEBUG] [Thread-185574] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:40:49.371 [DEBUG] [Thread-185574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:40:49.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:40:49.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:40:49.426 [DEBUG] [Thread-185574] [transport.py] [_log()] userauth is OK
2026-02-14T12:40:49.427 [DEBUG] [Thread-185574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:40:49.427 [DEBUG] [Thread-185574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:40:49.427 [DEBUG] [Thread-185574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:40:49.427 [DEBUG] [Thread-185574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:40:49.447 [INFO] [Thread-185574] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:40:49.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T12:40:49.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:40:50.298 [DEBUG] [Thread-185574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:40:50.299 [DEBUG] [Thread-185574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:40:50.347 [DEBUG] [Thread-185574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:40:50.347 [DEBUG] [Thread-185574] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:40:50.355 [DEBUG] [Thread-185574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:40:50.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:40:50.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-14T12:40:50.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-14T12:40:50.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:40:50.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:40:50.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:40:50.387 [DEBUG] [Thread-185574] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:40:58.005 [DEBUG] [Thread-185576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:41:13.057 [DEBUG] [Thread-185577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:41:20.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:41:20.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:41:20.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:41:22.149 [DEBUG] [Thread-185578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:41:22.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 41, 11), 11.25, 46.36, 0.0, 31.81, 14.13, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:41:22.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:41:11
2026-02-14T12:41:22.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:41:22.716 [DEBUG] [Thread-185579] [transport.py] [_log()] starting thread (client mode): 0xa2d55e10
2026-02-14T12:41:22.717 [DEBUG] [Thread-185579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:41:22.737 [DEBUG] [Thread-185579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:41:22.737 [INFO] [Thread-185579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:41:22.740 [DEBUG] [Thread-185579] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:41:22.740 [DEBUG] [Thread-185579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:41:22.740 [DEBUG] [Thread-185579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:41:22.740 [DEBUG] [Thread-185579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:41:22.740 [DEBUG] [Thread-185579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:41:22.740 [DEBUG] [Thread-185579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:41:22.740 [DEBUG] [Thread-185579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:41:22.740 [DEBUG] [Thread-185579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:41:22.740 [DEBUG] [Thread-185579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:41:22.740 [DEBUG] [Thread-185579] [transport.py] [_log()] client lang: <none>
2026-02-14T12:41:22.740 [DEBUG] [Thread-185579] [transport.py] [_log()] server lang: <none>
2026-02-14T12:41:22.740 [DEBUG] [Thread-185579] [transport.py] [_log()] kex follows: False
2026-02-14T12:41:22.740 [DEBUG] [Thread-185579] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:41:22.740 [DEBUG] [Thread-185579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:41:22.740 [DEBUG] [Thread-185579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:41:22.740 [DEBUG] [Thread-185579] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:41:22.740 [DEBUG] [Thread-185579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:41:22.740 [DEBUG] [Thread-185579] [transport.py] [_log()] Compression: none
2026-02-14T12:41:22.740 [DEBUG] [Thread-185579] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:41:22.757 [DEBUG] [Thread-185579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:41:22.758 [DEBUG] [Thread-185579] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:41:22.758 [DEBUG] [Thread-185579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:41:22.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:41:22.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:41:22.760 [DEBUG] [Thread-185579] [transport.py] [_log()] userauth is OK
2026-02-14T12:41:22.760 [DEBUG] [Thread-185579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:41:22.760 [DEBUG] [Thread-185579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:41:22.760 [DEBUG] [Thread-185579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:41:22.760 [DEBUG] [Thread-185579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:41:22.796 [INFO] [Thread-185579] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:41:22.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:41:23.217 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:41:23.218 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:41:23.422 [DEBUG] [Thread-185579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:41:23.422 [DEBUG] [Thread-185579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:41:23.422 [DEBUG] [Thread-185579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:41:23.463 [DEBUG] [Thread-185579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:41:23.463 [DEBUG] [Thread-185579] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:41:23.466 [DEBUG] [Thread-185579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:41:23.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:41:23.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:41:23.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:41:23.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:41:23.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:41:23.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:41:23.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:41:23.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:41:23.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:41:23.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.444902 -999.00  +14.20  28.12     52   +4.50 1 1 1 1 1   888    0 10.53 24.88 ----- 34.3 28.1 145.2 33.5 20.5 -25.7 19.4 -23.6 19.4 -23.7 20.5 -25.9
2026-02-14T12:41:23.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:41:23.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:41:23.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.444902
2026-02-14T12:41:23.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:41:23.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:41:23.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:41:23.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:41:23.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:41:23.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:41:11', tmtdew=11.25, humidity=46.36, cloud=0.0, wind=31.81, temperature=14.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:40:39.533', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:41:23.485 [DEBUG] [Thread-185579] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:41:23.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-14T12:41:23.579 [DEBUG] [Thread-185582] [transport.py] [_log()] starting thread (client mode): 0xa2d578b0
2026-02-14T12:41:23.579 [DEBUG] [Thread-185582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:41:23.593 [DEBUG] [Thread-185582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:41:23.593 [INFO] [Thread-185582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:41:23.600 [DEBUG] [Thread-185582] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:41:23.601 [DEBUG] [Thread-185582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:41:23.601 [DEBUG] [Thread-185582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:41:23.601 [DEBUG] [Thread-185582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:41:23.601 [DEBUG] [Thread-185582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:41:23.601 [DEBUG] [Thread-185582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:41:23.601 [DEBUG] [Thread-185582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:41:23.601 [DEBUG] [Thread-185582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:41:23.601 [DEBUG] [Thread-185582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:41:23.601 [DEBUG] [Thread-185582] [transport.py] [_log()] client lang: <none>
2026-02-14T12:41:23.601 [DEBUG] [Thread-185582] [transport.py] [_log()] server lang: <none>
2026-02-14T12:41:23.601 [DEBUG] [Thread-185582] [transport.py] [_log()] kex follows: False
2026-02-14T12:41:23.601 [DEBUG] [Thread-185582] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:41:23.601 [DEBUG] [Thread-185582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:41:23.601 [DEBUG] [Thread-185582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:41:23.601 [DEBUG] [Thread-185582] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:41:23.601 [DEBUG] [Thread-185582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:41:23.601 [DEBUG] [Thread-185582] [transport.py] [_log()] Compression: none
2026-02-14T12:41:23.601 [DEBUG] [Thread-185582] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:41:23.658 [DEBUG] [Thread-185582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:41:23.659 [DEBUG] [Thread-185582] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:41:23.660 [DEBUG] [Thread-185582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:41:23.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:41:23.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:41:23.715 [DEBUG] [Thread-185582] [transport.py] [_log()] userauth is OK
2026-02-14T12:41:23.715 [DEBUG] [Thread-185582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:41:23.716 [DEBUG] [Thread-185582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:41:23.716 [DEBUG] [Thread-185582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:41:23.716 [DEBUG] [Thread-185582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:41:23.735 [INFO] [Thread-185582] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:41:23.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-14T12:41:23.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:41:24.558 [DEBUG] [Thread-185582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:41:24.558 [DEBUG] [Thread-185582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:41:24.608 [DEBUG] [Thread-185582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:41:24.608 [DEBUG] [Thread-185582] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:41:24.620 [DEBUG] [Thread-185582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:41:24.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:41:24.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-14T12:41:24.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-14T12:41:24.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:41:24.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:41:24.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:41:24.659 [DEBUG] [Thread-185582] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:41:28.097 [DEBUG] [Thread-185584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:41:43.145 [DEBUG] [Thread-185585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:41:54.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:41:54.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:41:54.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-14T12:41:56.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 41, 46), 11.79, 44.76, 0.0, 33.72, 14.46, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:41:56.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:41:46
2026-02-14T12:41:56.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:41:57.032 [DEBUG] [Thread-185586] [transport.py] [_log()] starting thread (client mode): 0xa2d55270
2026-02-14T12:41:57.032 [DEBUG] [Thread-185586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:41:57.054 [DEBUG] [Thread-185586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:41:57.054 [INFO] [Thread-185586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:41:57.057 [DEBUG] [Thread-185586] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:41:57.057 [DEBUG] [Thread-185586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:41:57.057 [DEBUG] [Thread-185586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:41:57.057 [DEBUG] [Thread-185586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:41:57.058 [DEBUG] [Thread-185586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:41:57.058 [DEBUG] [Thread-185586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:41:57.058 [DEBUG] [Thread-185586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:41:57.058 [DEBUG] [Thread-185586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:41:57.058 [DEBUG] [Thread-185586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:41:57.058 [DEBUG] [Thread-185586] [transport.py] [_log()] client lang: <none>
2026-02-14T12:41:57.058 [DEBUG] [Thread-185586] [transport.py] [_log()] server lang: <none>
2026-02-14T12:41:57.058 [DEBUG] [Thread-185586] [transport.py] [_log()] kex follows: False
2026-02-14T12:41:57.058 [DEBUG] [Thread-185586] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:41:57.058 [DEBUG] [Thread-185586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:41:57.058 [DEBUG] [Thread-185586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:41:57.058 [DEBUG] [Thread-185586] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:41:57.058 [DEBUG] [Thread-185586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:41:57.058 [DEBUG] [Thread-185586] [transport.py] [_log()] Compression: none
2026-02-14T12:41:57.058 [DEBUG] [Thread-185586] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:41:57.075 [DEBUG] [Thread-185586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:41:57.075 [DEBUG] [Thread-185586] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:41:57.076 [DEBUG] [Thread-185586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:41:57.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:41:57.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:41:57.078 [DEBUG] [Thread-185586] [transport.py] [_log()] userauth is OK
2026-02-14T12:41:57.078 [DEBUG] [Thread-185586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:41:57.078 [DEBUG] [Thread-185586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:41:57.078 [DEBUG] [Thread-185586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:41:57.078 [DEBUG] [Thread-185586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:41:57.104 [INFO] [Thread-185586] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:41:57.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:41:57.741 [DEBUG] [Thread-185586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:41:57.742 [DEBUG] [Thread-185586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:41:57.742 [DEBUG] [Thread-185586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:41:57.782 [DEBUG] [Thread-185586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:41:57.783 [DEBUG] [Thread-185586] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:41:57.785 [DEBUG] [Thread-185586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:41:57.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:41:57.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:41:57.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:41:57.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:41:57.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:41:57.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:41:57.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:41:57.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:41:57.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:41:57.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.445249 -999.00  +14.00  28.63     51   +4.10 1 1 1 1 1   888    0 10.26 23.62 ----- 19.4 28.6 133.4 33.6 20.6 -24.5 19.5 -24.0 19.5 -22.3 20.6 -24.5
2026-02-14T12:41:57.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:41:57.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:41:57.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.445249
2026-02-14T12:41:57.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:41:57.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:41:57.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:41:57.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:41:57.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:41:57.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:41:46', tmtdew=11.79, humidity=44.76, cloud=0.0, wind=33.72, temperature=14.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:41:09.514', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:41:57.804 [DEBUG] [Thread-185586] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:41:57.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-14T12:41:57.893 [DEBUG] [Thread-185589] [transport.py] [_log()] starting thread (client mode): 0xa2d56b60
2026-02-14T12:41:57.893 [DEBUG] [Thread-185589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:41:57.908 [DEBUG] [Thread-185589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:41:57.908 [INFO] [Thread-185589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:41:57.915 [DEBUG] [Thread-185589] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:41:57.916 [DEBUG] [Thread-185589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:41:57.916 [DEBUG] [Thread-185589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:41:57.916 [DEBUG] [Thread-185589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:41:57.916 [DEBUG] [Thread-185589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:41:57.916 [DEBUG] [Thread-185589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:41:57.916 [DEBUG] [Thread-185589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:41:57.916 [DEBUG] [Thread-185589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:41:57.916 [DEBUG] [Thread-185589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:41:57.916 [DEBUG] [Thread-185589] [transport.py] [_log()] client lang: <none>
2026-02-14T12:41:57.916 [DEBUG] [Thread-185589] [transport.py] [_log()] server lang: <none>
2026-02-14T12:41:57.916 [DEBUG] [Thread-185589] [transport.py] [_log()] kex follows: False
2026-02-14T12:41:57.916 [DEBUG] [Thread-185589] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:41:57.916 [DEBUG] [Thread-185589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:41:57.916 [DEBUG] [Thread-185589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:41:57.916 [DEBUG] [Thread-185589] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:41:57.916 [DEBUG] [Thread-185589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:41:57.916 [DEBUG] [Thread-185589] [transport.py] [_log()] Compression: none
2026-02-14T12:41:57.917 [DEBUG] [Thread-185589] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:41:57.974 [DEBUG] [Thread-185589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:41:57.975 [DEBUG] [Thread-185589] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:41:57.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:41:57.976 [DEBUG] [Thread-185589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:41:57.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:41:58.030 [DEBUG] [Thread-185589] [transport.py] [_log()] userauth is OK
2026-02-14T12:41:58.031 [DEBUG] [Thread-185589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:41:58.031 [DEBUG] [Thread-185589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:41:58.031 [DEBUG] [Thread-185589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:41:58.031 [DEBUG] [Thread-185589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:41:58.049 [INFO] [Thread-185589] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:41:58.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-14T12:41:58.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:41:58.183 [DEBUG] [Thread-185591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:41:58.860 [DEBUG] [Thread-185589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:41:58.860 [DEBUG] [Thread-185589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:41:58.908 [DEBUG] [Thread-185589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:41:58.909 [DEBUG] [Thread-185589] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:41:58.917 [DEBUG] [Thread-185589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:41:58.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:41:58.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-14T12:41:58.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-14T12:41:58.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:41:58.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:41:58.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:41:58.954 [DEBUG] [Thread-185589] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:42:13.235 [DEBUG] [Thread-185592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:42:22.190 [DEBUG] [Thread-185593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:42:23.363 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:42:23.364 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:42:28.266 [DEBUG] [Thread-185594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:42:28.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:42:28.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:42:28.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-14T12:42:30.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 42, 22), 11.97, 44.24, 0.0, 29.27, 14.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:42:30.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:42:22
2026-02-14T12:42:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:42:31.330 [DEBUG] [Thread-185595] [transport.py] [_log()] starting thread (client mode): 0xa2d20640
2026-02-14T12:42:31.330 [DEBUG] [Thread-185595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:42:31.352 [DEBUG] [Thread-185595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:42:31.353 [INFO] [Thread-185595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:42:31.356 [DEBUG] [Thread-185595] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:42:31.356 [DEBUG] [Thread-185595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:42:31.356 [DEBUG] [Thread-185595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:42:31.356 [DEBUG] [Thread-185595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:42:31.357 [DEBUG] [Thread-185595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:42:31.357 [DEBUG] [Thread-185595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:42:31.357 [DEBUG] [Thread-185595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:42:31.357 [DEBUG] [Thread-185595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:42:31.357 [DEBUG] [Thread-185595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:42:31.357 [DEBUG] [Thread-185595] [transport.py] [_log()] client lang: <none>
2026-02-14T12:42:31.357 [DEBUG] [Thread-185595] [transport.py] [_log()] server lang: <none>
2026-02-14T12:42:31.357 [DEBUG] [Thread-185595] [transport.py] [_log()] kex follows: False
2026-02-14T12:42:31.357 [DEBUG] [Thread-185595] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:42:31.357 [DEBUG] [Thread-185595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:42:31.357 [DEBUG] [Thread-185595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:42:31.357 [DEBUG] [Thread-185595] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:42:31.358 [DEBUG] [Thread-185595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:42:31.358 [DEBUG] [Thread-185595] [transport.py] [_log()] Compression: none
2026-02-14T12:42:31.358 [DEBUG] [Thread-185595] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:42:31.372 [DEBUG] [Thread-185595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:42:31.373 [DEBUG] [Thread-185595] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:42:31.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:42:31.374 [DEBUG] [Thread-185595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:42:31.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:42:31.376 [DEBUG] [Thread-185595] [transport.py] [_log()] userauth is OK
2026-02-14T12:42:31.376 [DEBUG] [Thread-185595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:42:31.376 [DEBUG] [Thread-185595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:42:31.376 [DEBUG] [Thread-185595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:42:31.376 [DEBUG] [Thread-185595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:42:31.400 [INFO] [Thread-185595] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:42:31.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:42:32.048 [DEBUG] [Thread-185595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:42:32.048 [DEBUG] [Thread-185595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:42:32.049 [DEBUG] [Thread-185595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:42:32.089 [DEBUG] [Thread-185595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:42:32.089 [DEBUG] [Thread-185595] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:42:32.093 [DEBUG] [Thread-185595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:42:32.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:42:32.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:42:32.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:42:32.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:42:32.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:42:32.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:42:32.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:42:32.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:42:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:42:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.445596 -999.00  +14.50  20.04     51   +4.50 1 1 1 1 1   888    0 10.14 22.35 ----- 22.1 20.0 139.6 31.4 20.6 -24.6 19.7 -23.8 19.7 -23.1 20.7 -23.7
2026-02-14T12:42:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:42:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:42:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.445596
2026-02-14T12:42:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:42:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:42:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:42:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:42:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:42:32.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:42:22', tmtdew=11.97, humidity=44.24, cloud=0.0, wind=29.27, temperature=14.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:41:39.494', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:42:32.118 [DEBUG] [Thread-185595] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:42:32.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:42:32.214 [DEBUG] [Thread-185598] [transport.py] [_log()] starting thread (client mode): 0xa2d23430
2026-02-14T12:42:32.214 [DEBUG] [Thread-185598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:42:32.228 [DEBUG] [Thread-185598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:42:32.228 [INFO] [Thread-185598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:42:32.236 [DEBUG] [Thread-185598] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:42:32.236 [DEBUG] [Thread-185598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:42:32.236 [DEBUG] [Thread-185598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:42:32.236 [DEBUG] [Thread-185598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:42:32.236 [DEBUG] [Thread-185598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:42:32.237 [DEBUG] [Thread-185598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:42:32.237 [DEBUG] [Thread-185598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:42:32.237 [DEBUG] [Thread-185598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:42:32.237 [DEBUG] [Thread-185598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:42:32.237 [DEBUG] [Thread-185598] [transport.py] [_log()] client lang: <none>
2026-02-14T12:42:32.237 [DEBUG] [Thread-185598] [transport.py] [_log()] server lang: <none>
2026-02-14T12:42:32.237 [DEBUG] [Thread-185598] [transport.py] [_log()] kex follows: False
2026-02-14T12:42:32.237 [DEBUG] [Thread-185598] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:42:32.237 [DEBUG] [Thread-185598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:42:32.237 [DEBUG] [Thread-185598] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:42:32.237 [DEBUG] [Thread-185598] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:42:32.237 [DEBUG] [Thread-185598] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:42:32.237 [DEBUG] [Thread-185598] [transport.py] [_log()] Compression: none
2026-02-14T12:42:32.237 [DEBUG] [Thread-185598] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:42:32.292 [DEBUG] [Thread-185598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:42:32.293 [DEBUG] [Thread-185598] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:42:32.293 [DEBUG] [Thread-185598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:42:32.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:42:32.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:42:32.350 [DEBUG] [Thread-185598] [transport.py] [_log()] userauth is OK
2026-02-14T12:42:32.350 [DEBUG] [Thread-185598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:42:32.350 [DEBUG] [Thread-185598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:42:32.351 [DEBUG] [Thread-185598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:42:32.351 [DEBUG] [Thread-185598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:42:32.373 [INFO] [Thread-185598] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:42:32.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T12:42:32.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:42:33.190 [DEBUG] [Thread-185598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:42:33.190 [DEBUG] [Thread-185598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:42:33.239 [DEBUG] [Thread-185598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:42:33.239 [DEBUG] [Thread-185598] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:42:33.248 [DEBUG] [Thread-185598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:42:33.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:42:33.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-14T12:42:33.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-14T12:42:33.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:42:33.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:42:33.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:42:33.282 [DEBUG] [Thread-185598] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:42:43.301 [DEBUG] [Thread-185600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:42:58.349 [DEBUG] [Thread-185601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:43:03.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:43:03.304 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:43:03.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:43:05.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 42, 57), 11.91, 44.68, 0.0, 38.02, 14.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:43:05.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:42:57
2026-02-14T12:43:05.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:43:05.638 [DEBUG] [Thread-185602] [transport.py] [_log()] starting thread (client mode): 0xa2d20310
2026-02-14T12:43:05.639 [DEBUG] [Thread-185602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:43:05.654 [DEBUG] [Thread-185602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:43:05.654 [INFO] [Thread-185602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:43:05.657 [DEBUG] [Thread-185602] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:43:05.657 [DEBUG] [Thread-185602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:43:05.658 [DEBUG] [Thread-185602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:43:05.658 [DEBUG] [Thread-185602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:43:05.658 [DEBUG] [Thread-185602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:43:05.658 [DEBUG] [Thread-185602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:43:05.658 [DEBUG] [Thread-185602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:43:05.658 [DEBUG] [Thread-185602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:43:05.658 [DEBUG] [Thread-185602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:43:05.658 [DEBUG] [Thread-185602] [transport.py] [_log()] client lang: <none>
2026-02-14T12:43:05.658 [DEBUG] [Thread-185602] [transport.py] [_log()] server lang: <none>
2026-02-14T12:43:05.658 [DEBUG] [Thread-185602] [transport.py] [_log()] kex follows: False
2026-02-14T12:43:05.658 [DEBUG] [Thread-185602] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:43:05.658 [DEBUG] [Thread-185602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:43:05.658 [DEBUG] [Thread-185602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:43:05.658 [DEBUG] [Thread-185602] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:43:05.658 [DEBUG] [Thread-185602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:43:05.658 [DEBUG] [Thread-185602] [transport.py] [_log()] Compression: none
2026-02-14T12:43:05.658 [DEBUG] [Thread-185602] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:43:05.678 [DEBUG] [Thread-185602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:43:05.679 [DEBUG] [Thread-185602] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:43:05.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:43:05.680 [DEBUG] [Thread-185602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:43:05.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:43:05.682 [DEBUG] [Thread-185602] [transport.py] [_log()] userauth is OK
2026-02-14T12:43:05.682 [DEBUG] [Thread-185602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:43:05.682 [DEBUG] [Thread-185602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:43:05.682 [DEBUG] [Thread-185602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:43:05.682 [DEBUG] [Thread-185602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:43:05.700 [INFO] [Thread-185602] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:43:05.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:43:06.489 [DEBUG] [Thread-185602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:43:06.489 [DEBUG] [Thread-185602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:43:06.489 [DEBUG] [Thread-185602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:43:06.530 [DEBUG] [Thread-185602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:43:06.531 [DEBUG] [Thread-185602] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:43:06.534 [DEBUG] [Thread-185602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:43:06.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:43:06.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:43:06.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:43:06.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:43:06.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:43:06.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:43:06.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:43:06.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:43:06.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:43:06.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.446291 -999.00  +14.50  28.72     48   +3.70 1 1 1 1 1   888    0 10.36 24.16 ----- 29.5 28.7 157.6 35.0 20.5 -27.0 19.6 -25.4 19.7 -24.3 20.5 -25.9
2026-02-14T12:43:06.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:43:06.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:43:06.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.446291
2026-02-14T12:43:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:43:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:43:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:43:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:43:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:43:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:42:57', tmtdew=11.91, humidity=44.68, cloud=0.0, wind=38.02, temperature=14.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:42:39.542', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:43:06.560 [DEBUG] [Thread-185602] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:43:06.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:43:06.654 [DEBUG] [Thread-185605] [transport.py] [_log()] starting thread (client mode): 0xa2d208e0
2026-02-14T12:43:06.654 [DEBUG] [Thread-185605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:43:06.669 [DEBUG] [Thread-185605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:43:06.669 [INFO] [Thread-185605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:43:06.676 [DEBUG] [Thread-185605] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:43:06.676 [DEBUG] [Thread-185605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:43:06.677 [DEBUG] [Thread-185605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:43:06.677 [DEBUG] [Thread-185605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:43:06.677 [DEBUG] [Thread-185605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:43:06.677 [DEBUG] [Thread-185605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:43:06.677 [DEBUG] [Thread-185605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:43:06.677 [DEBUG] [Thread-185605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:43:06.677 [DEBUG] [Thread-185605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:43:06.677 [DEBUG] [Thread-185605] [transport.py] [_log()] client lang: <none>
2026-02-14T12:43:06.677 [DEBUG] [Thread-185605] [transport.py] [_log()] server lang: <none>
2026-02-14T12:43:06.677 [DEBUG] [Thread-185605] [transport.py] [_log()] kex follows: False
2026-02-14T12:43:06.677 [DEBUG] [Thread-185605] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:43:06.677 [DEBUG] [Thread-185605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:43:06.677 [DEBUG] [Thread-185605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:43:06.677 [DEBUG] [Thread-185605] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:43:06.677 [DEBUG] [Thread-185605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:43:06.677 [DEBUG] [Thread-185605] [transport.py] [_log()] Compression: none
2026-02-14T12:43:06.677 [DEBUG] [Thread-185605] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:43:06.735 [DEBUG] [Thread-185605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:43:06.735 [DEBUG] [Thread-185605] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:43:06.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:43:06.736 [DEBUG] [Thread-185605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:43:06.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:43:06.791 [DEBUG] [Thread-185605] [transport.py] [_log()] userauth is OK
2026-02-14T12:43:06.791 [DEBUG] [Thread-185605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:43:06.791 [DEBUG] [Thread-185605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:43:06.791 [DEBUG] [Thread-185605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:43:06.791 [DEBUG] [Thread-185605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:43:06.810 [INFO] [Thread-185605] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:43:06.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-14T12:43:06.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:43:07.655 [DEBUG] [Thread-185605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:43:07.656 [DEBUG] [Thread-185605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:43:07.703 [DEBUG] [Thread-185605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:43:07.704 [DEBUG] [Thread-185605] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:43:07.713 [DEBUG] [Thread-185605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:43:07.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:43:07.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-14T12:43:07.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-14T12:43:07.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:43:07.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:43:07.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:43:07.750 [DEBUG] [Thread-185605] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:43:13.386 [DEBUG] [Thread-185607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:43:22.223 [DEBUG] [Thread-185608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:43:23.506 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:43:23.507 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:43:28.438 [DEBUG] [Thread-185609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:43:37.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:43:37.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:43:37.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-14T12:43:39.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 42, 57), 11.91, 44.68, 0.0, 38.02, 14.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:43:39.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:42:57
2026-02-14T12:43:40.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:43:40.187 [DEBUG] [Thread-185610] [transport.py] [_log()] starting thread (client mode): 0xa57593f0
2026-02-14T12:43:40.187 [DEBUG] [Thread-185610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:43:40.208 [DEBUG] [Thread-185610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:43:40.209 [INFO] [Thread-185610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:43:40.212 [DEBUG] [Thread-185610] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:43:40.212 [DEBUG] [Thread-185610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:43:40.212 [DEBUG] [Thread-185610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:43:40.212 [DEBUG] [Thread-185610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:43:40.212 [DEBUG] [Thread-185610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:43:40.212 [DEBUG] [Thread-185610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:43:40.212 [DEBUG] [Thread-185610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:43:40.212 [DEBUG] [Thread-185610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:43:40.212 [DEBUG] [Thread-185610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:43:40.212 [DEBUG] [Thread-185610] [transport.py] [_log()] client lang: <none>
2026-02-14T12:43:40.212 [DEBUG] [Thread-185610] [transport.py] [_log()] server lang: <none>
2026-02-14T12:43:40.212 [DEBUG] [Thread-185610] [transport.py] [_log()] kex follows: False
2026-02-14T12:43:40.212 [DEBUG] [Thread-185610] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:43:40.212 [DEBUG] [Thread-185610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:43:40.212 [DEBUG] [Thread-185610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:43:40.212 [DEBUG] [Thread-185610] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:43:40.212 [DEBUG] [Thread-185610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:43:40.212 [DEBUG] [Thread-185610] [transport.py] [_log()] Compression: none
2026-02-14T12:43:40.212 [DEBUG] [Thread-185610] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:43:40.230 [DEBUG] [Thread-185610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:43:40.230 [DEBUG] [Thread-185610] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:43:40.231 [DEBUG] [Thread-185610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:43:40.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:43:40.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:43:40.233 [DEBUG] [Thread-185610] [transport.py] [_log()] userauth is OK
2026-02-14T12:43:40.233 [DEBUG] [Thread-185610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:43:40.233 [DEBUG] [Thread-185610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:43:40.233 [DEBUG] [Thread-185610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:43:40.233 [DEBUG] [Thread-185610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:43:40.258 [INFO] [Thread-185610] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:43:40.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:43:40.905 [DEBUG] [Thread-185610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:43:40.905 [DEBUG] [Thread-185610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:43:40.906 [DEBUG] [Thread-185610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:43:40.946 [DEBUG] [Thread-185610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:43:40.947 [DEBUG] [Thread-185610] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:43:40.950 [DEBUG] [Thread-185610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:43:40.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:43:40.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:43:40.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:43:40.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:43:40.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:43:40.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:43:40.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:43:40.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:43:40.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:43:40.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.446638 -999.00  +14.20  30.26     49   +3.70 1 1 2 1 1   888    0 10.61 25.87 ----- 37.5 30.3 143.6 37.3 20.4 -25.5 19.5 -24.8 19.4 -25.9 20.4 -27.4
2026-02-14T12:43:40.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:43:40.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:43:40.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.446638
2026-02-14T12:43:40.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:43:40.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:43:40.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:43:40.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:43:40.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:43:40.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:42:57', tmtdew=11.91, humidity=44.68, cloud=0.0, wind=38.02, temperature=14.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:43:09.523', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:43:40.977 [DEBUG] [Thread-185610] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:43:41.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-14T12:43:41.073 [DEBUG] [Thread-185613] [transport.py] [_log()] starting thread (client mode): 0xa2d561a0
2026-02-14T12:43:41.074 [DEBUG] [Thread-185613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:43:41.089 [DEBUG] [Thread-185613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:43:41.089 [INFO] [Thread-185613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:43:41.096 [DEBUG] [Thread-185613] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:43:41.097 [DEBUG] [Thread-185613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:43:41.097 [DEBUG] [Thread-185613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:43:41.097 [DEBUG] [Thread-185613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:43:41.097 [DEBUG] [Thread-185613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:43:41.097 [DEBUG] [Thread-185613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:43:41.097 [DEBUG] [Thread-185613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:43:41.098 [DEBUG] [Thread-185613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:43:41.098 [DEBUG] [Thread-185613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:43:41.098 [DEBUG] [Thread-185613] [transport.py] [_log()] client lang: <none>
2026-02-14T12:43:41.098 [DEBUG] [Thread-185613] [transport.py] [_log()] server lang: <none>
2026-02-14T12:43:41.098 [DEBUG] [Thread-185613] [transport.py] [_log()] kex follows: False
2026-02-14T12:43:41.098 [DEBUG] [Thread-185613] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:43:41.098 [DEBUG] [Thread-185613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:43:41.098 [DEBUG] [Thread-185613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:43:41.099 [DEBUG] [Thread-185613] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:43:41.099 [DEBUG] [Thread-185613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:43:41.099 [DEBUG] [Thread-185613] [transport.py] [_log()] Compression: none
2026-02-14T12:43:41.099 [DEBUG] [Thread-185613] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:43:41.156 [DEBUG] [Thread-185613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:43:41.157 [DEBUG] [Thread-185613] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:43:41.157 [DEBUG] [Thread-185613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:43:41.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:43:41.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:43:41.215 [DEBUG] [Thread-185613] [transport.py] [_log()] userauth is OK
2026-02-14T12:43:41.216 [DEBUG] [Thread-185613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:43:41.216 [DEBUG] [Thread-185613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:43:41.216 [DEBUG] [Thread-185613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:43:41.216 [DEBUG] [Thread-185613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:43:41.235 [INFO] [Thread-185613] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:43:41.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-14T12:43:41.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:43:42.059 [DEBUG] [Thread-185613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:43:42.059 [DEBUG] [Thread-185613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:43:42.107 [DEBUG] [Thread-185613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:43:42.107 [DEBUG] [Thread-185613] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:43:42.116 [DEBUG] [Thread-185613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:43:42.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:43:42.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-14T12:43:42.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-14T12:43:42.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:43:42.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:43:42.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:43:42.153 [DEBUG] [Thread-185613] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:43:43.476 [DEBUG] [Thread-185615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:43:58.537 [DEBUG] [Thread-185616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:44:12.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:44:12.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:44:12.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-14T12:44:13.574 [DEBUG] [Thread-185617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:44:14.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 43, 32), 12.12, 44.12, 0.0, 36.72, 14.78, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:44:14.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:43:32
2026-02-14T12:44:14.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:44:15.125 [DEBUG] [Thread-185618] [transport.py] [_log()] starting thread (client mode): 0xa2d11840
2026-02-14T12:44:15.125 [DEBUG] [Thread-185618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:44:15.145 [DEBUG] [Thread-185618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:44:15.145 [INFO] [Thread-185618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:44:15.148 [DEBUG] [Thread-185618] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:44:15.148 [DEBUG] [Thread-185618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:44:15.148 [DEBUG] [Thread-185618] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:44:15.148 [DEBUG] [Thread-185618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:44:15.148 [DEBUG] [Thread-185618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:44:15.148 [DEBUG] [Thread-185618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:44:15.148 [DEBUG] [Thread-185618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:44:15.148 [DEBUG] [Thread-185618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:44:15.148 [DEBUG] [Thread-185618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:44:15.148 [DEBUG] [Thread-185618] [transport.py] [_log()] client lang: <none>
2026-02-14T12:44:15.149 [DEBUG] [Thread-185618] [transport.py] [_log()] server lang: <none>
2026-02-14T12:44:15.149 [DEBUG] [Thread-185618] [transport.py] [_log()] kex follows: False
2026-02-14T12:44:15.149 [DEBUG] [Thread-185618] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:44:15.149 [DEBUG] [Thread-185618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:44:15.149 [DEBUG] [Thread-185618] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:44:15.149 [DEBUG] [Thread-185618] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:44:15.149 [DEBUG] [Thread-185618] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:44:15.149 [DEBUG] [Thread-185618] [transport.py] [_log()] Compression: none
2026-02-14T12:44:15.149 [DEBUG] [Thread-185618] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:44:15.167 [DEBUG] [Thread-185618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:44:15.167 [DEBUG] [Thread-185618] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:44:15.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:44:15.168 [DEBUG] [Thread-185618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:44:15.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:44:15.170 [DEBUG] [Thread-185618] [transport.py] [_log()] userauth is OK
2026-02-14T12:44:15.170 [DEBUG] [Thread-185618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:44:15.171 [DEBUG] [Thread-185618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:44:15.171 [DEBUG] [Thread-185618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:44:15.171 [DEBUG] [Thread-185618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:44:15.193 [INFO] [Thread-185618] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:44:15.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:44:15.843 [DEBUG] [Thread-185618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:44:15.843 [DEBUG] [Thread-185618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:44:15.844 [DEBUG] [Thread-185618] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:44:15.884 [DEBUG] [Thread-185618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:44:15.884 [DEBUG] [Thread-185618] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:44:15.888 [DEBUG] [Thread-185618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:44:15.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:44:15.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:44:15.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:44:15.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:44:15.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:44:15.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:44:15.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:44:15.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:44:15.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:44:15.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.446985 -999.00  +13.90  30.15     49   +3.60 1 1 2 1 1   888    0 10.72 27.93 ----- 27.8 30.1 139.8 37.5 20.3 -24.8 19.3 -24.7 19.4 -25.4 20.4 -25.4
2026-02-14T12:44:15.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:44:15.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:44:15.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.446985
2026-02-14T12:44:15.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:44:15.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:44:15.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:44:15.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:44:15.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:44:15.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:43:32', tmtdew=12.12, humidity=44.12, cloud=0.0, wind=36.72, temperature=14.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:43:39.504', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:44:15.915 [DEBUG] [Thread-185618] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:44:15.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-14T12:44:16.011 [DEBUG] [Thread-185621] [transport.py] [_log()] starting thread (client mode): 0xa2d133d0
2026-02-14T12:44:16.011 [DEBUG] [Thread-185621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:44:16.031 [DEBUG] [Thread-185621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:44:16.031 [INFO] [Thread-185621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:44:16.038 [DEBUG] [Thread-185621] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:44:16.039 [DEBUG] [Thread-185621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:44:16.039 [DEBUG] [Thread-185621] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:44:16.039 [DEBUG] [Thread-185621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:44:16.039 [DEBUG] [Thread-185621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:44:16.039 [DEBUG] [Thread-185621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:44:16.039 [DEBUG] [Thread-185621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:44:16.039 [DEBUG] [Thread-185621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:44:16.039 [DEBUG] [Thread-185621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:44:16.039 [DEBUG] [Thread-185621] [transport.py] [_log()] client lang: <none>
2026-02-14T12:44:16.039 [DEBUG] [Thread-185621] [transport.py] [_log()] server lang: <none>
2026-02-14T12:44:16.039 [DEBUG] [Thread-185621] [transport.py] [_log()] kex follows: False
2026-02-14T12:44:16.039 [DEBUG] [Thread-185621] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:44:16.039 [DEBUG] [Thread-185621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:44:16.040 [DEBUG] [Thread-185621] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:44:16.040 [DEBUG] [Thread-185621] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:44:16.040 [DEBUG] [Thread-185621] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:44:16.040 [DEBUG] [Thread-185621] [transport.py] [_log()] Compression: none
2026-02-14T12:44:16.040 [DEBUG] [Thread-185621] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:44:16.099 [DEBUG] [Thread-185621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:44:16.099 [DEBUG] [Thread-185621] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:44:16.100 [DEBUG] [Thread-185621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:44:16.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:44:16.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:44:16.154 [DEBUG] [Thread-185621] [transport.py] [_log()] userauth is OK
2026-02-14T12:44:16.155 [DEBUG] [Thread-185621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:44:16.155 [DEBUG] [Thread-185621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:44:16.155 [DEBUG] [Thread-185621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:44:16.155 [DEBUG] [Thread-185621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:44:16.174 [INFO] [Thread-185621] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:44:16.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-14T12:44:16.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:44:16.995 [DEBUG] [Thread-185621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:44:16.995 [DEBUG] [Thread-185621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:44:17.043 [DEBUG] [Thread-185621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:44:17.044 [DEBUG] [Thread-185621] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:44:17.053 [DEBUG] [Thread-185621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:44:17.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:44:17.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:44:17.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-14T12:44:17.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:44:17.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:44:17.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:44:17.089 [DEBUG] [Thread-185621] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:44:22.258 [DEBUG] [Thread-185623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:44:23.650 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:44:23.651 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:44:28.613 [DEBUG] [Thread-185624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:44:43.663 [DEBUG] [Thread-185625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:44:47.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:44:47.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:44:47.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-14T12:44:49.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 44, 8), 12.16, 43.95, 0.0, 30.1, 14.65, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:44:49.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:44:08
2026-02-14T12:44:49.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:44:50.080 [DEBUG] [Thread-185626] [transport.py] [_log()] starting thread (client mode): 0xa2d56470
2026-02-14T12:44:50.080 [DEBUG] [Thread-185626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:44:50.100 [DEBUG] [Thread-185626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:44:50.100 [INFO] [Thread-185626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:44:50.103 [DEBUG] [Thread-185626] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:44:50.104 [DEBUG] [Thread-185626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:44:50.104 [DEBUG] [Thread-185626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:44:50.104 [DEBUG] [Thread-185626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:44:50.104 [DEBUG] [Thread-185626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:44:50.104 [DEBUG] [Thread-185626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:44:50.104 [DEBUG] [Thread-185626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:44:50.104 [DEBUG] [Thread-185626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:44:50.104 [DEBUG] [Thread-185626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:44:50.104 [DEBUG] [Thread-185626] [transport.py] [_log()] client lang: <none>
2026-02-14T12:44:50.104 [DEBUG] [Thread-185626] [transport.py] [_log()] server lang: <none>
2026-02-14T12:44:50.104 [DEBUG] [Thread-185626] [transport.py] [_log()] kex follows: False
2026-02-14T12:44:50.104 [DEBUG] [Thread-185626] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:44:50.104 [DEBUG] [Thread-185626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:44:50.105 [DEBUG] [Thread-185626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:44:50.105 [DEBUG] [Thread-185626] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:44:50.105 [DEBUG] [Thread-185626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:44:50.105 [DEBUG] [Thread-185626] [transport.py] [_log()] Compression: none
2026-02-14T12:44:50.105 [DEBUG] [Thread-185626] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:44:50.123 [DEBUG] [Thread-185626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:44:50.124 [DEBUG] [Thread-185626] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:44:50.125 [DEBUG] [Thread-185626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:44:50.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:44:50.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:44:50.127 [DEBUG] [Thread-185626] [transport.py] [_log()] userauth is OK
2026-02-14T12:44:50.128 [DEBUG] [Thread-185626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:44:50.128 [DEBUG] [Thread-185626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:44:50.128 [DEBUG] [Thread-185626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:44:50.128 [DEBUG] [Thread-185626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:44:50.165 [INFO] [Thread-185626] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:44:50.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:44:50.790 [DEBUG] [Thread-185626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:44:50.790 [DEBUG] [Thread-185626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:44:50.790 [DEBUG] [Thread-185626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:44:50.831 [DEBUG] [Thread-185626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:44:50.831 [DEBUG] [Thread-185626] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:44:50.834 [DEBUG] [Thread-185626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:44:50.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:44:50.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:44:50.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:44:50.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:44:50.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:44:50.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:44:50.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:44:50.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:44:50.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:44:50.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.447332 -999.00  +14.00  26.50     49   +3.50 1 1 1 1 1   888    0 10.70 30.79 ----- 30.6 26.5 161.8 40.5 20.3 -26.4 19.4 -24.9 19.4 -24.4 20.5 -25.9
2026-02-14T12:44:50.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:44:50.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:44:50.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.447332
2026-02-14T12:44:50.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:44:50.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:44:50.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:44:50.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:44:50.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:44:50.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:44:08', tmtdew=12.16, humidity=43.95, cloud=0.0, wind=30.1, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:44:09.485', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:44:50.861 [DEBUG] [Thread-185626] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:44:50.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-14T12:44:50.957 [DEBUG] [Thread-185629] [transport.py] [_log()] starting thread (client mode): 0xa2dde860
2026-02-14T12:44:50.957 [DEBUG] [Thread-185629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:44:50.971 [DEBUG] [Thread-185629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:44:50.971 [INFO] [Thread-185629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:44:50.978 [DEBUG] [Thread-185629] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:44:50.978 [DEBUG] [Thread-185629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:44:50.979 [DEBUG] [Thread-185629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:44:50.979 [DEBUG] [Thread-185629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:44:50.979 [DEBUG] [Thread-185629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:44:50.979 [DEBUG] [Thread-185629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:44:50.979 [DEBUG] [Thread-185629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:44:50.979 [DEBUG] [Thread-185629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:44:50.979 [DEBUG] [Thread-185629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:44:50.979 [DEBUG] [Thread-185629] [transport.py] [_log()] client lang: <none>
2026-02-14T12:44:50.979 [DEBUG] [Thread-185629] [transport.py] [_log()] server lang: <none>
2026-02-14T12:44:50.979 [DEBUG] [Thread-185629] [transport.py] [_log()] kex follows: False
2026-02-14T12:44:50.979 [DEBUG] [Thread-185629] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:44:50.979 [DEBUG] [Thread-185629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:44:50.979 [DEBUG] [Thread-185629] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:44:50.979 [DEBUG] [Thread-185629] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:44:50.979 [DEBUG] [Thread-185629] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:44:50.979 [DEBUG] [Thread-185629] [transport.py] [_log()] Compression: none
2026-02-14T12:44:50.979 [DEBUG] [Thread-185629] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:44:51.038 [DEBUG] [Thread-185629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:44:51.038 [DEBUG] [Thread-185629] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:44:51.039 [DEBUG] [Thread-185629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:44:51.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:44:51.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:44:51.094 [DEBUG] [Thread-185629] [transport.py] [_log()] userauth is OK
2026-02-14T12:44:51.094 [DEBUG] [Thread-185629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:44:51.094 [DEBUG] [Thread-185629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:44:51.095 [DEBUG] [Thread-185629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:44:51.095 [DEBUG] [Thread-185629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:44:51.118 [INFO] [Thread-185629] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:44:51.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-14T12:44:51.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:44:51.909 [DEBUG] [Thread-185629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:44:51.910 [DEBUG] [Thread-185629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:44:51.957 [DEBUG] [Thread-185629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:44:51.958 [DEBUG] [Thread-185629] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:44:51.967 [DEBUG] [Thread-185629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:44:51.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:44:51.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-14T12:44:51.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-14T12:44:51.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:44:51.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:44:51.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:44:52.004 [DEBUG] [Thread-185629] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:44:58.699 [DEBUG] [Thread-185631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:45:13.750 [DEBUG] [Thread-185632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:45:22.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:45:22.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:45:22.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-14T12:45:22.291 [DEBUG] [Thread-185633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:45:23.791 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:45:23.793 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:45:24.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 44, 44), 12.13, 43.88, 0.0, 33.21, 14.0, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:45:24.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:44:44
2026-02-14T12:45:24.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:45:24.672 [DEBUG] [Thread-185634] [transport.py] [_log()] starting thread (client mode): 0xa2dc12d0
2026-02-14T12:45:24.672 [DEBUG] [Thread-185634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:45:24.692 [DEBUG] [Thread-185634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:45:24.692 [INFO] [Thread-185634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:45:24.695 [DEBUG] [Thread-185634] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:45:24.695 [DEBUG] [Thread-185634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:45:24.695 [DEBUG] [Thread-185634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:45:24.695 [DEBUG] [Thread-185634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:45:24.695 [DEBUG] [Thread-185634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:45:24.695 [DEBUG] [Thread-185634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:45:24.696 [DEBUG] [Thread-185634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:45:24.696 [DEBUG] [Thread-185634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:45:24.696 [DEBUG] [Thread-185634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:45:24.696 [DEBUG] [Thread-185634] [transport.py] [_log()] client lang: <none>
2026-02-14T12:45:24.696 [DEBUG] [Thread-185634] [transport.py] [_log()] server lang: <none>
2026-02-14T12:45:24.696 [DEBUG] [Thread-185634] [transport.py] [_log()] kex follows: False
2026-02-14T12:45:24.696 [DEBUG] [Thread-185634] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:45:24.696 [DEBUG] [Thread-185634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:45:24.696 [DEBUG] [Thread-185634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:45:24.696 [DEBUG] [Thread-185634] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:45:24.696 [DEBUG] [Thread-185634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:45:24.696 [DEBUG] [Thread-185634] [transport.py] [_log()] Compression: none
2026-02-14T12:45:24.696 [DEBUG] [Thread-185634] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:45:24.715 [DEBUG] [Thread-185634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:45:24.716 [DEBUG] [Thread-185634] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:45:24.716 [DEBUG] [Thread-185634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:45:24.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:45:24.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:45:24.719 [DEBUG] [Thread-185634] [transport.py] [_log()] userauth is OK
2026-02-14T12:45:24.719 [DEBUG] [Thread-185634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:45:24.719 [DEBUG] [Thread-185634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:45:24.719 [DEBUG] [Thread-185634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:45:24.719 [DEBUG] [Thread-185634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:45:24.742 [INFO] [Thread-185634] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:45:24.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:45:25.350 [DEBUG] [Thread-185634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:45:25.350 [DEBUG] [Thread-185634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:45:25.351 [DEBUG] [Thread-185634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:45:25.391 [DEBUG] [Thread-185634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:45:25.392 [DEBUG] [Thread-185634] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:45:25.395 [DEBUG] [Thread-185634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:45:25.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:45:25.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:45:25.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:45:25.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:45:25.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:45:25.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:45:25.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:45:25.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:45:25.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:45:25.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.447680 -999.00  +14.10  19.37     49   +3.60 1 1 1 1 1   888    0 10.76 30.62 ----- 22.3 19.4 161.2 36.5 20.3 -26.0 19.3 -24.3 19.3 -24.3 20.5 -25.5
2026-02-14T12:45:25.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:45:25.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:45:25.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.447680
2026-02-14T12:45:25.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:45:25.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:45:25.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:45:25.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:45:25.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:45:25.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:44:44', tmtdew=12.13, humidity=43.88, cloud=0.0, wind=33.21, temperature=14.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:44:39.552', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:45:25.423 [DEBUG] [Thread-185634] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:45:25.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-14T12:45:25.519 [DEBUG] [Thread-185637] [transport.py] [_log()] starting thread (client mode): 0xa2d57070
2026-02-14T12:45:25.519 [DEBUG] [Thread-185637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:45:25.534 [DEBUG] [Thread-185637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:45:25.534 [INFO] [Thread-185637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:45:25.541 [DEBUG] [Thread-185637] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:45:25.542 [DEBUG] [Thread-185637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:45:25.542 [DEBUG] [Thread-185637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:45:25.542 [DEBUG] [Thread-185637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:45:25.542 [DEBUG] [Thread-185637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:45:25.542 [DEBUG] [Thread-185637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:45:25.542 [DEBUG] [Thread-185637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:45:25.542 [DEBUG] [Thread-185637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:45:25.543 [DEBUG] [Thread-185637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:45:25.543 [DEBUG] [Thread-185637] [transport.py] [_log()] client lang: <none>
2026-02-14T12:45:25.543 [DEBUG] [Thread-185637] [transport.py] [_log()] server lang: <none>
2026-02-14T12:45:25.543 [DEBUG] [Thread-185637] [transport.py] [_log()] kex follows: False
2026-02-14T12:45:25.543 [DEBUG] [Thread-185637] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:45:25.543 [DEBUG] [Thread-185637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:45:25.543 [DEBUG] [Thread-185637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:45:25.543 [DEBUG] [Thread-185637] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:45:25.544 [DEBUG] [Thread-185637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:45:25.544 [DEBUG] [Thread-185637] [transport.py] [_log()] Compression: none
2026-02-14T12:45:25.544 [DEBUG] [Thread-185637] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:45:25.603 [DEBUG] [Thread-185637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:45:25.603 [DEBUG] [Thread-185637] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:45:25.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:45:25.605 [DEBUG] [Thread-185637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:45:25.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:45:25.658 [DEBUG] [Thread-185637] [transport.py] [_log()] userauth is OK
2026-02-14T12:45:25.659 [DEBUG] [Thread-185637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:45:25.659 [DEBUG] [Thread-185637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:45:25.659 [DEBUG] [Thread-185637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:45:25.659 [DEBUG] [Thread-185637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:45:25.682 [INFO] [Thread-185637] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:45:25.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-14T12:45:25.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:45:26.480 [DEBUG] [Thread-185637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:45:26.481 [DEBUG] [Thread-185637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:45:26.528 [DEBUG] [Thread-185637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:45:26.528 [DEBUG] [Thread-185637] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:45:26.537 [DEBUG] [Thread-185637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:45:26.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:45:26.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-14T12:45:26.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-14T12:45:26.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:45:26.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:45:26.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:45:26.574 [DEBUG] [Thread-185637] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:45:28.788 [DEBUG] [Thread-185639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:45:43.842 [DEBUG] [Thread-185640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:45:56.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:45:56.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:45:56.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-14T12:45:58.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 45, 20), 12.35, 43.35, 0.0, 34.8, 14.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:45:58.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:45:20
2026-02-14T12:45:58.879 [DEBUG] [Thread-185641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:45:59.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:45:59.422 [DEBUG] [Thread-185642] [transport.py] [_log()] starting thread (client mode): 0xa2d56260
2026-02-14T12:45:59.422 [DEBUG] [Thread-185642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:45:59.443 [DEBUG] [Thread-185642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:45:59.443 [INFO] [Thread-185642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:45:59.446 [DEBUG] [Thread-185642] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:45:59.446 [DEBUG] [Thread-185642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:45:59.446 [DEBUG] [Thread-185642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:45:59.446 [DEBUG] [Thread-185642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:45:59.446 [DEBUG] [Thread-185642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:45:59.446 [DEBUG] [Thread-185642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:45:59.446 [DEBUG] [Thread-185642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:45:59.446 [DEBUG] [Thread-185642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:45:59.446 [DEBUG] [Thread-185642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:45:59.446 [DEBUG] [Thread-185642] [transport.py] [_log()] client lang: <none>
2026-02-14T12:45:59.446 [DEBUG] [Thread-185642] [transport.py] [_log()] server lang: <none>
2026-02-14T12:45:59.446 [DEBUG] [Thread-185642] [transport.py] [_log()] kex follows: False
2026-02-14T12:45:59.446 [DEBUG] [Thread-185642] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:45:59.446 [DEBUG] [Thread-185642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:45:59.446 [DEBUG] [Thread-185642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:45:59.446 [DEBUG] [Thread-185642] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:45:59.446 [DEBUG] [Thread-185642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:45:59.446 [DEBUG] [Thread-185642] [transport.py] [_log()] Compression: none
2026-02-14T12:45:59.446 [DEBUG] [Thread-185642] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:45:59.463 [DEBUG] [Thread-185642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:45:59.464 [DEBUG] [Thread-185642] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:45:59.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:45:59.465 [DEBUG] [Thread-185642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:45:59.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:45:59.467 [DEBUG] [Thread-185642] [transport.py] [_log()] userauth is OK
2026-02-14T12:45:59.467 [DEBUG] [Thread-185642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:45:59.467 [DEBUG] [Thread-185642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:45:59.467 [DEBUG] [Thread-185642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:45:59.467 [DEBUG] [Thread-185642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:45:59.489 [INFO] [Thread-185642] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:45:59.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:46:00.149 [DEBUG] [Thread-185642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:46:00.150 [DEBUG] [Thread-185642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:46:00.150 [DEBUG] [Thread-185642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:46:00.190 [DEBUG] [Thread-185642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:46:00.190 [DEBUG] [Thread-185642] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:46:00.194 [DEBUG] [Thread-185642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:46:00.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:46:00.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:46:00.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:46:00.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:46:00.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:46:00.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:46:00.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:46:00.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:46:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:46:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.448027 -999.00  +14.00  17.78     49   +3.50 1 1 1 1 1   888    0 10.98 33.94 ----- 16.2 17.8 155.6 32.7 20.5 -24.7 19.3 -24.4 19.3 -25.1 20.6 -24.0
2026-02-14T12:46:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:46:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:46:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.448027
2026-02-14T12:46:00.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:46:00.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:46:00.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:46:00.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:46:00.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:46:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:45:20', tmtdew=12.35, humidity=43.35, cloud=0.0, wind=34.8, temperature=14.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:45:09.533', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:46:00.224 [DEBUG] [Thread-185642] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:46:00.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-14T12:46:00.320 [DEBUG] [Thread-185645] [transport.py] [_log()] starting thread (client mode): 0xa2d18c40
2026-02-14T12:46:00.320 [DEBUG] [Thread-185645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:46:00.334 [DEBUG] [Thread-185645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:46:00.334 [INFO] [Thread-185645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:46:00.342 [DEBUG] [Thread-185645] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:46:00.342 [DEBUG] [Thread-185645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:46:00.342 [DEBUG] [Thread-185645] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:46:00.342 [DEBUG] [Thread-185645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:46:00.342 [DEBUG] [Thread-185645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:46:00.342 [DEBUG] [Thread-185645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:46:00.342 [DEBUG] [Thread-185645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:46:00.342 [DEBUG] [Thread-185645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:46:00.342 [DEBUG] [Thread-185645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:46:00.343 [DEBUG] [Thread-185645] [transport.py] [_log()] client lang: <none>
2026-02-14T12:46:00.343 [DEBUG] [Thread-185645] [transport.py] [_log()] server lang: <none>
2026-02-14T12:46:00.343 [DEBUG] [Thread-185645] [transport.py] [_log()] kex follows: False
2026-02-14T12:46:00.343 [DEBUG] [Thread-185645] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:46:00.343 [DEBUG] [Thread-185645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:46:00.343 [DEBUG] [Thread-185645] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:46:00.343 [DEBUG] [Thread-185645] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:46:00.343 [DEBUG] [Thread-185645] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:46:00.343 [DEBUG] [Thread-185645] [transport.py] [_log()] Compression: none
2026-02-14T12:46:00.343 [DEBUG] [Thread-185645] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:46:00.402 [DEBUG] [Thread-185645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:46:00.403 [DEBUG] [Thread-185645] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:46:00.403 [DEBUG] [Thread-185645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:46:00.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:46:00.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:46:00.463 [DEBUG] [Thread-185645] [transport.py] [_log()] userauth is OK
2026-02-14T12:46:00.463 [DEBUG] [Thread-185645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:46:00.463 [DEBUG] [Thread-185645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:46:00.463 [DEBUG] [Thread-185645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:46:00.463 [DEBUG] [Thread-185645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:46:00.482 [INFO] [Thread-185645] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:46:00.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-14T12:46:00.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:46:01.284 [DEBUG] [Thread-185645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:46:01.285 [DEBUG] [Thread-185645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:46:01.332 [DEBUG] [Thread-185645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:46:01.332 [DEBUG] [Thread-185645] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:46:01.343 [DEBUG] [Thread-185645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:46:01.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:46:01.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-14T12:46:01.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-14T12:46:01.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:46:01.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:46:01.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:46:01.377 [DEBUG] [Thread-185645] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:46:13.916 [DEBUG] [Thread-185647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:46:22.338 [DEBUG] [Thread-185648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:46:23.937 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:46:23.938 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:46:28.968 [DEBUG] [Thread-185649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:46:31.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:46:31.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:46:31.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-14T12:46:33.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 45, 55), 12.54, 42.75, 0.0, 22.09, 14.66, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:46:33.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:45:55
2026-02-14T12:46:33.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:46:33.977 [DEBUG] [Thread-185650] [transport.py] [_log()] starting thread (client mode): 0xa575b460
2026-02-14T12:46:33.977 [DEBUG] [Thread-185650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:46:33.997 [DEBUG] [Thread-185650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:46:33.997 [INFO] [Thread-185650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:46:33.999 [DEBUG] [Thread-185650] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:46:33.999 [DEBUG] [Thread-185650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:46:33.999 [DEBUG] [Thread-185650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:46:33.999 [DEBUG] [Thread-185650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:46:33.999 [DEBUG] [Thread-185650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:46:33.999 [DEBUG] [Thread-185650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:46:33.999 [DEBUG] [Thread-185650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:46:33.999 [DEBUG] [Thread-185650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:46:33.999 [DEBUG] [Thread-185650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:46:33.999 [DEBUG] [Thread-185650] [transport.py] [_log()] client lang: <none>
2026-02-14T12:46:33.999 [DEBUG] [Thread-185650] [transport.py] [_log()] server lang: <none>
2026-02-14T12:46:33.999 [DEBUG] [Thread-185650] [transport.py] [_log()] kex follows: False
2026-02-14T12:46:34.000 [DEBUG] [Thread-185650] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:46:34.000 [DEBUG] [Thread-185650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:46:34.000 [DEBUG] [Thread-185650] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:46:34.000 [DEBUG] [Thread-185650] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:46:34.000 [DEBUG] [Thread-185650] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:46:34.000 [DEBUG] [Thread-185650] [transport.py] [_log()] Compression: none
2026-02-14T12:46:34.000 [DEBUG] [Thread-185650] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:46:34.009 [DEBUG] [Thread-185650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:46:34.010 [DEBUG] [Thread-185650] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:46:34.010 [DEBUG] [Thread-185650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:46:34.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:46:34.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:46:34.013 [DEBUG] [Thread-185650] [transport.py] [_log()] userauth is OK
2026-02-14T12:46:34.013 [DEBUG] [Thread-185650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:46:34.013 [DEBUG] [Thread-185650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:46:34.013 [DEBUG] [Thread-185650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:46:34.013 [DEBUG] [Thread-185650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:46:34.027 [INFO] [Thread-185650] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:46:34.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:46:34.675 [DEBUG] [Thread-185650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:46:34.675 [DEBUG] [Thread-185650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:46:34.676 [DEBUG] [Thread-185650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:46:34.717 [DEBUG] [Thread-185650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:46:34.717 [DEBUG] [Thread-185650] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:46:34.720 [DEBUG] [Thread-185650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:46:34.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:46:34.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:46:34.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:46:34.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:46:34.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:46:34.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:46:34.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:46:34.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:46:34.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:46:34.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.448721 -999.00  +14.30  15.90     50   +4.10 1 1 1 1 1   888    0 11.20 43.26 ----- 17.3 15.9 163.4 24.6 20.6 -24.3 19.3 -22.8 19.5 -23.9 20.7 -23.9
2026-02-14T12:46:34.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:46:34.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:46:34.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.448721
2026-02-14T12:46:34.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:46:34.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:46:34.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:46:34.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:46:34.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:46:34.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:45:55', tmtdew=12.54, humidity=42.75, cloud=0.0, wind=22.09, temperature=14.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:46:09.494', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:46:34.752 [DEBUG] [Thread-185650] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:46:34.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-14T12:46:34.848 [DEBUG] [Thread-185653] [transport.py] [_log()] starting thread (client mode): 0xa2d12980
2026-02-14T12:46:34.848 [DEBUG] [Thread-185653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:46:34.863 [DEBUG] [Thread-185653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:46:34.863 [INFO] [Thread-185653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:46:34.871 [DEBUG] [Thread-185653] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:46:34.871 [DEBUG] [Thread-185653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:46:34.871 [DEBUG] [Thread-185653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:46:34.871 [DEBUG] [Thread-185653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:46:34.872 [DEBUG] [Thread-185653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:46:34.872 [DEBUG] [Thread-185653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:46:34.872 [DEBUG] [Thread-185653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:46:34.872 [DEBUG] [Thread-185653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:46:34.872 [DEBUG] [Thread-185653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:46:34.872 [DEBUG] [Thread-185653] [transport.py] [_log()] client lang: <none>
2026-02-14T12:46:34.872 [DEBUG] [Thread-185653] [transport.py] [_log()] server lang: <none>
2026-02-14T12:46:34.872 [DEBUG] [Thread-185653] [transport.py] [_log()] kex follows: False
2026-02-14T12:46:34.872 [DEBUG] [Thread-185653] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:46:34.873 [DEBUG] [Thread-185653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:46:34.873 [DEBUG] [Thread-185653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:46:34.873 [DEBUG] [Thread-185653] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:46:34.873 [DEBUG] [Thread-185653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:46:34.873 [DEBUG] [Thread-185653] [transport.py] [_log()] Compression: none
2026-02-14T12:46:34.873 [DEBUG] [Thread-185653] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:46:34.930 [DEBUG] [Thread-185653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:46:34.931 [DEBUG] [Thread-185653] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:46:34.931 [DEBUG] [Thread-185653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:46:34.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:46:34.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:46:34.987 [DEBUG] [Thread-185653] [transport.py] [_log()] userauth is OK
2026-02-14T12:46:34.987 [DEBUG] [Thread-185653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:46:34.987 [DEBUG] [Thread-185653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:46:34.988 [DEBUG] [Thread-185653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:46:34.988 [DEBUG] [Thread-185653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:46:35.010 [INFO] [Thread-185653] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:46:35.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T12:46:35.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:46:35.831 [DEBUG] [Thread-185653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:46:35.831 [DEBUG] [Thread-185653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:46:35.878 [DEBUG] [Thread-185653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:46:35.879 [DEBUG] [Thread-185653] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:46:35.888 [DEBUG] [Thread-185653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:46:35.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:46:35.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-14T12:46:35.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:46:35.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:46:35.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:46:35.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:46:35.924 [DEBUG] [Thread-185653] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:46:44.003 [DEBUG] [Thread-185655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:46:59.050 [DEBUG] [Thread-185656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:47:05.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:47:05.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:47:05.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-14T12:47:07.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 46, 31), 12.36, 43.18, 0.0, 28.41, 14.4, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:47:07.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:46:31
2026-02-14T12:47:08.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:47:08.335 [DEBUG] [Thread-185657] [transport.py] [_log()] starting thread (client mode): 0xa2d10370
2026-02-14T12:47:08.335 [DEBUG] [Thread-185657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:47:08.355 [DEBUG] [Thread-185657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:47:08.355 [INFO] [Thread-185657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:47:08.356 [DEBUG] [Thread-185657] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:47:08.356 [DEBUG] [Thread-185657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:47:08.356 [DEBUG] [Thread-185657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:47:08.356 [DEBUG] [Thread-185657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:47:08.356 [DEBUG] [Thread-185657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:47:08.356 [DEBUG] [Thread-185657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:47:08.356 [DEBUG] [Thread-185657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:47:08.357 [DEBUG] [Thread-185657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:47:08.357 [DEBUG] [Thread-185657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:47:08.357 [DEBUG] [Thread-185657] [transport.py] [_log()] client lang: <none>
2026-02-14T12:47:08.357 [DEBUG] [Thread-185657] [transport.py] [_log()] server lang: <none>
2026-02-14T12:47:08.357 [DEBUG] [Thread-185657] [transport.py] [_log()] kex follows: False
2026-02-14T12:47:08.357 [DEBUG] [Thread-185657] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:47:08.357 [DEBUG] [Thread-185657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:47:08.357 [DEBUG] [Thread-185657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:47:08.357 [DEBUG] [Thread-185657] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:47:08.357 [DEBUG] [Thread-185657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:47:08.357 [DEBUG] [Thread-185657] [transport.py] [_log()] Compression: none
2026-02-14T12:47:08.357 [DEBUG] [Thread-185657] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:47:08.374 [DEBUG] [Thread-185657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:47:08.375 [DEBUG] [Thread-185657] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:47:08.375 [DEBUG] [Thread-185657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:47:08.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:47:08.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:47:08.377 [DEBUG] [Thread-185657] [transport.py] [_log()] userauth is OK
2026-02-14T12:47:08.377 [DEBUG] [Thread-185657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:47:08.377 [DEBUG] [Thread-185657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:47:08.378 [DEBUG] [Thread-185657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:47:08.378 [DEBUG] [Thread-185657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:47:08.396 [INFO] [Thread-185657] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:47:08.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:47:09.205 [DEBUG] [Thread-185657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:47:09.205 [DEBUG] [Thread-185657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:47:09.205 [DEBUG] [Thread-185657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:47:09.246 [DEBUG] [Thread-185657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:47:09.246 [DEBUG] [Thread-185657] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:47:09.250 [DEBUG] [Thread-185657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:47:09.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:47:09.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:47:09.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:47:09.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:47:09.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:47:09.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:47:09.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:47:09.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:47:09.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:47:09.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.449068 -999.00  +14.90  23.77     48   +4.00 1 2 1 1 1   888    0 11.42 48.37 ----- 27.9 23.8 150.0 38.9 20.7 -25.7 19.6 -24.1 19.6 -20.9 20.8 -25.8
2026-02-14T12:47:09.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:47:09.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:47:09.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.449068
2026-02-14T12:47:09.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:47:09.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:47:09.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:47:09.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:47:09.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-14T12:47:09.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:46:31', tmtdew=12.36, humidity=43.18, cloud=0.0, wind=28.41, temperature=14.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:46:39.475', atlas_cloud=2, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:47:09.278 [DEBUG] [Thread-185657] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:47:09.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-14T12:47:09.376 [DEBUG] [Thread-185660] [transport.py] [_log()] starting thread (client mode): 0xa2d579a0
2026-02-14T12:47:09.376 [DEBUG] [Thread-185660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:47:09.394 [DEBUG] [Thread-185660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:47:09.394 [INFO] [Thread-185660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:47:09.405 [DEBUG] [Thread-185660] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:47:09.406 [DEBUG] [Thread-185660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:47:09.406 [DEBUG] [Thread-185660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:47:09.406 [DEBUG] [Thread-185660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:47:09.406 [DEBUG] [Thread-185660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:47:09.406 [DEBUG] [Thread-185660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:47:09.406 [DEBUG] [Thread-185660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:47:09.406 [DEBUG] [Thread-185660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:47:09.406 [DEBUG] [Thread-185660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:47:09.406 [DEBUG] [Thread-185660] [transport.py] [_log()] client lang: <none>
2026-02-14T12:47:09.406 [DEBUG] [Thread-185660] [transport.py] [_log()] server lang: <none>
2026-02-14T12:47:09.406 [DEBUG] [Thread-185660] [transport.py] [_log()] kex follows: False
2026-02-14T12:47:09.406 [DEBUG] [Thread-185660] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:47:09.406 [DEBUG] [Thread-185660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:47:09.406 [DEBUG] [Thread-185660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:47:09.407 [DEBUG] [Thread-185660] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:47:09.407 [DEBUG] [Thread-185660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:47:09.407 [DEBUG] [Thread-185660] [transport.py] [_log()] Compression: none
2026-02-14T12:47:09.407 [DEBUG] [Thread-185660] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:47:09.466 [DEBUG] [Thread-185660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:47:09.467 [DEBUG] [Thread-185660] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:47:09.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:47:09.468 [DEBUG] [Thread-185660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:47:09.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:47:09.523 [DEBUG] [Thread-185660] [transport.py] [_log()] userauth is OK
2026-02-14T12:47:09.524 [DEBUG] [Thread-185660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:47:09.524 [DEBUG] [Thread-185660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:47:09.524 [DEBUG] [Thread-185660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:47:09.524 [DEBUG] [Thread-185660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:47:09.542 [INFO] [Thread-185660] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:47:09.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-14T12:47:09.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:47:10.345 [DEBUG] [Thread-185660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:47:10.346 [DEBUG] [Thread-185660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:47:10.394 [DEBUG] [Thread-185660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:47:10.395 [DEBUG] [Thread-185660] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:47:10.404 [DEBUG] [Thread-185660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:47:10.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:47:10.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-14T12:47:10.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-14T12:47:10.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:47:10.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:47:10.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:47:10.440 [DEBUG] [Thread-185660] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:47:14.085 [DEBUG] [Thread-185662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:47:22.381 [DEBUG] [Thread-185663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:47:24.080 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:47:24.080 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:47:29.138 [DEBUG] [Thread-185664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:47:40.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:47:40.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:47:40.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-14T12:47:42.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 47, 6), 12.29, 43.37, 0.0, 27.29, 14.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:47:42.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:47:06
2026-02-14T12:47:42.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:47:42.825 [DEBUG] [Thread-185665] [transport.py] [_log()] starting thread (client mode): 0xa2d10b50
2026-02-14T12:47:42.825 [DEBUG] [Thread-185665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:47:42.845 [DEBUG] [Thread-185665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:47:42.845 [INFO] [Thread-185665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:47:42.848 [DEBUG] [Thread-185665] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:47:42.848 [DEBUG] [Thread-185665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:47:42.849 [DEBUG] [Thread-185665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:47:42.849 [DEBUG] [Thread-185665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:47:42.849 [DEBUG] [Thread-185665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:47:42.849 [DEBUG] [Thread-185665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:47:42.849 [DEBUG] [Thread-185665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:47:42.849 [DEBUG] [Thread-185665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:47:42.849 [DEBUG] [Thread-185665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:47:42.849 [DEBUG] [Thread-185665] [transport.py] [_log()] client lang: <none>
2026-02-14T12:47:42.849 [DEBUG] [Thread-185665] [transport.py] [_log()] server lang: <none>
2026-02-14T12:47:42.849 [DEBUG] [Thread-185665] [transport.py] [_log()] kex follows: False
2026-02-14T12:47:42.849 [DEBUG] [Thread-185665] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:47:42.849 [DEBUG] [Thread-185665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:47:42.849 [DEBUG] [Thread-185665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:47:42.849 [DEBUG] [Thread-185665] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:47:42.849 [DEBUG] [Thread-185665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:47:42.849 [DEBUG] [Thread-185665] [transport.py] [_log()] Compression: none
2026-02-14T12:47:42.849 [DEBUG] [Thread-185665] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:47:42.867 [DEBUG] [Thread-185665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:47:42.868 [DEBUG] [Thread-185665] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:47:42.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:47:42.869 [DEBUG] [Thread-185665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:47:42.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:47:42.870 [DEBUG] [Thread-185665] [transport.py] [_log()] userauth is OK
2026-02-14T12:47:42.870 [DEBUG] [Thread-185665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:47:42.870 [DEBUG] [Thread-185665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:47:42.870 [DEBUG] [Thread-185665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:47:42.870 [DEBUG] [Thread-185665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:47:42.891 [INFO] [Thread-185665] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:47:42.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:47:43.484 [DEBUG] [Thread-185665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:47:43.484 [DEBUG] [Thread-185665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:47:43.485 [DEBUG] [Thread-185665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:47:43.525 [DEBUG] [Thread-185665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:47:43.526 [DEBUG] [Thread-185665] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:47:43.529 [DEBUG] [Thread-185665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:47:43.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:47:43.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:47:43.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:47:43.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:47:43.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:47:43.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:47:43.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:47:43.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:47:43.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:47:43.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.449416 -999.00  +14.60  25.95     48   +3.70 1 1 1 1 1   888    0 11.40 51.68 ----- 26.7 25.9 166.4 36.9 20.5 -26.3 19.6 -24.0 19.6 -23.6 20.6 -25.5
2026-02-14T12:47:43.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:47:43.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:47:43.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.449416
2026-02-14T12:47:43.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:47:43.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:47:43.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:47:43.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:47:43.560 [DEBUG] [Thread-185665] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:47:43.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:47:43.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:47:06', tmtdew=12.29, humidity=43.37, cloud=0.0, wind=27.29, temperature=14.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:47:09.542', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:47:43.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:47:43.655 [DEBUG] [Thread-185668] [transport.py] [_log()] starting thread (client mode): 0xa2d3ca60
2026-02-14T12:47:43.655 [DEBUG] [Thread-185668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:47:43.670 [DEBUG] [Thread-185668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:47:43.670 [INFO] [Thread-185668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:47:43.677 [DEBUG] [Thread-185668] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:47:43.678 [DEBUG] [Thread-185668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:47:43.678 [DEBUG] [Thread-185668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:47:43.678 [DEBUG] [Thread-185668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:47:43.678 [DEBUG] [Thread-185668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:47:43.678 [DEBUG] [Thread-185668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:47:43.678 [DEBUG] [Thread-185668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:47:43.678 [DEBUG] [Thread-185668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:47:43.678 [DEBUG] [Thread-185668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:47:43.678 [DEBUG] [Thread-185668] [transport.py] [_log()] client lang: <none>
2026-02-14T12:47:43.678 [DEBUG] [Thread-185668] [transport.py] [_log()] server lang: <none>
2026-02-14T12:47:43.678 [DEBUG] [Thread-185668] [transport.py] [_log()] kex follows: False
2026-02-14T12:47:43.678 [DEBUG] [Thread-185668] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:47:43.678 [DEBUG] [Thread-185668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:47:43.678 [DEBUG] [Thread-185668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:47:43.678 [DEBUG] [Thread-185668] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:47:43.678 [DEBUG] [Thread-185668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:47:43.678 [DEBUG] [Thread-185668] [transport.py] [_log()] Compression: none
2026-02-14T12:47:43.678 [DEBUG] [Thread-185668] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:47:43.734 [DEBUG] [Thread-185668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:47:43.735 [DEBUG] [Thread-185668] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:47:43.735 [DEBUG] [Thread-185668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:47:43.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:47:43.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:47:43.790 [DEBUG] [Thread-185668] [transport.py] [_log()] userauth is OK
2026-02-14T12:47:43.791 [DEBUG] [Thread-185668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:47:43.791 [DEBUG] [Thread-185668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:47:43.791 [DEBUG] [Thread-185668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:47:43.791 [DEBUG] [Thread-185668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:47:43.810 [INFO] [Thread-185668] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:47:43.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-14T12:47:43.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:47:44.176 [DEBUG] [Thread-185670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:47:44.656 [DEBUG] [Thread-185668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:47:44.657 [DEBUG] [Thread-185668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:47:44.704 [DEBUG] [Thread-185668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:47:44.705 [DEBUG] [Thread-185668] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:47:44.714 [DEBUG] [Thread-185668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:47:44.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:47:44.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-14T12:47:44.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-14T12:47:44.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:47:44.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:47:44.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:47:44.751 [DEBUG] [Thread-185668] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:47:59.223 [DEBUG] [Thread-185671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:48:14.259 [DEBUG] [Thread-185672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:48:14.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:48:14.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:48:14.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-14T12:48:16.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 47, 42), 13.39, 40.44, 0.0, 41.14, 15.63, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:48:16.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:47:42
2026-02-14T12:48:16.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:48:17.114 [DEBUG] [Thread-185673] [transport.py] [_log()] starting thread (client mode): 0xa2d22080
2026-02-14T12:48:17.115 [DEBUG] [Thread-185673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:48:17.137 [DEBUG] [Thread-185673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:48:17.137 [INFO] [Thread-185673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:48:17.140 [DEBUG] [Thread-185673] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:48:17.140 [DEBUG] [Thread-185673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:48:17.141 [DEBUG] [Thread-185673] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:48:17.141 [DEBUG] [Thread-185673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:48:17.141 [DEBUG] [Thread-185673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:48:17.141 [DEBUG] [Thread-185673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:48:17.141 [DEBUG] [Thread-185673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:48:17.141 [DEBUG] [Thread-185673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:48:17.141 [DEBUG] [Thread-185673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:48:17.141 [DEBUG] [Thread-185673] [transport.py] [_log()] client lang: <none>
2026-02-14T12:48:17.141 [DEBUG] [Thread-185673] [transport.py] [_log()] server lang: <none>
2026-02-14T12:48:17.141 [DEBUG] [Thread-185673] [transport.py] [_log()] kex follows: False
2026-02-14T12:48:17.141 [DEBUG] [Thread-185673] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:48:17.141 [DEBUG] [Thread-185673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:48:17.141 [DEBUG] [Thread-185673] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:48:17.142 [DEBUG] [Thread-185673] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:48:17.142 [DEBUG] [Thread-185673] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:48:17.142 [DEBUG] [Thread-185673] [transport.py] [_log()] Compression: none
2026-02-14T12:48:17.142 [DEBUG] [Thread-185673] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:48:17.161 [DEBUG] [Thread-185673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:48:17.161 [DEBUG] [Thread-185673] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:48:17.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:48:17.163 [DEBUG] [Thread-185673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:48:17.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:48:17.166 [DEBUG] [Thread-185673] [transport.py] [_log()] userauth is OK
2026-02-14T12:48:17.166 [DEBUG] [Thread-185673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:48:17.167 [DEBUG] [Thread-185673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:48:17.167 [DEBUG] [Thread-185673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:48:17.167 [DEBUG] [Thread-185673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:48:17.188 [INFO] [Thread-185673] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:48:17.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:48:17.799 [DEBUG] [Thread-185673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:48:17.799 [DEBUG] [Thread-185673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:48:17.800 [DEBUG] [Thread-185673] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:48:17.841 [DEBUG] [Thread-185673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:48:17.841 [DEBUG] [Thread-185673] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:48:17.844 [DEBUG] [Thread-185673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:48:17.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:48:17.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:48:17.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:48:17.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:48:17.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:48:17.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:48:17.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:48:17.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:48:17.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:48:17.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.449763 -999.00  +14.20  24.57     49   +3.70 1 1 1 1 1   888    0 11.41 53.94 ----- 27.3 24.6 141.4 35.2 20.6 -25.0 19.5 -24.1 19.5 -23.1 20.6 -24.1
2026-02-14T12:48:17.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:48:17.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:48:17.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.449763
2026-02-14T12:48:17.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:48:17.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:48:17.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:48:17.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:48:17.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:48:17.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:47:42', tmtdew=13.39, humidity=40.44, cloud=0.0, wind=41.14, temperature=15.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:47:39.523', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:48:17.873 [DEBUG] [Thread-185673] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:48:17.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-14T12:48:17.968 [DEBUG] [Thread-185676] [transport.py] [_log()] starting thread (client mode): 0xa2dde290
2026-02-14T12:48:17.968 [DEBUG] [Thread-185676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:48:17.982 [DEBUG] [Thread-185676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:48:17.982 [INFO] [Thread-185676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:48:17.990 [DEBUG] [Thread-185676] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:48:17.990 [DEBUG] [Thread-185676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:48:17.990 [DEBUG] [Thread-185676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:48:17.990 [DEBUG] [Thread-185676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:48:17.990 [DEBUG] [Thread-185676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:48:17.990 [DEBUG] [Thread-185676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:48:17.990 [DEBUG] [Thread-185676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:48:17.990 [DEBUG] [Thread-185676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:48:17.990 [DEBUG] [Thread-185676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:48:17.990 [DEBUG] [Thread-185676] [transport.py] [_log()] client lang: <none>
2026-02-14T12:48:17.990 [DEBUG] [Thread-185676] [transport.py] [_log()] server lang: <none>
2026-02-14T12:48:17.990 [DEBUG] [Thread-185676] [transport.py] [_log()] kex follows: False
2026-02-14T12:48:17.990 [DEBUG] [Thread-185676] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:48:17.990 [DEBUG] [Thread-185676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:48:17.990 [DEBUG] [Thread-185676] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:48:17.991 [DEBUG] [Thread-185676] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:48:17.991 [DEBUG] [Thread-185676] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:48:17.991 [DEBUG] [Thread-185676] [transport.py] [_log()] Compression: none
2026-02-14T12:48:17.991 [DEBUG] [Thread-185676] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:48:18.050 [DEBUG] [Thread-185676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:48:18.051 [DEBUG] [Thread-185676] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:48:18.052 [DEBUG] [Thread-185676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:48:18.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:48:18.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:48:18.106 [DEBUG] [Thread-185676] [transport.py] [_log()] userauth is OK
2026-02-14T12:48:18.106 [DEBUG] [Thread-185676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:48:18.106 [DEBUG] [Thread-185676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:48:18.107 [DEBUG] [Thread-185676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:48:18.107 [DEBUG] [Thread-185676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:48:18.132 [INFO] [Thread-185676] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:48:18.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-14T12:48:18.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:48:18.926 [DEBUG] [Thread-185676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:48:18.927 [DEBUG] [Thread-185676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:48:18.976 [DEBUG] [Thread-185676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:48:18.977 [DEBUG] [Thread-185676] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:48:18.989 [DEBUG] [Thread-185676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:48:18.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:48:18.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-14T12:48:19.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-14T12:48:19.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:48:19.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:48:19.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:48:19.026 [DEBUG] [Thread-185676] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:48:22.423 [DEBUG] [Thread-185678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:48:24.218 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:48:24.219 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:48:29.297 [DEBUG] [Thread-185679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:48:44.348 [DEBUG] [Thread-185680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:48:49.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:48:49.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:48:49.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-14T12:48:51.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 48, 17), 12.59, 42.25, 0.0, 27.08, 14.5, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:48:51.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:48:17
2026-02-14T12:48:51.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:48:51.534 [DEBUG] [Thread-185681] [transport.py] [_log()] starting thread (client mode): 0xa2d10220
2026-02-14T12:48:51.535 [DEBUG] [Thread-185681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:48:51.554 [DEBUG] [Thread-185681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:48:51.555 [INFO] [Thread-185681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:48:51.558 [DEBUG] [Thread-185681] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:48:51.558 [DEBUG] [Thread-185681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:48:51.558 [DEBUG] [Thread-185681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:48:51.558 [DEBUG] [Thread-185681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:48:51.558 [DEBUG] [Thread-185681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:48:51.558 [DEBUG] [Thread-185681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:48:51.558 [DEBUG] [Thread-185681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:48:51.558 [DEBUG] [Thread-185681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:48:51.558 [DEBUG] [Thread-185681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:48:51.558 [DEBUG] [Thread-185681] [transport.py] [_log()] client lang: <none>
2026-02-14T12:48:51.558 [DEBUG] [Thread-185681] [transport.py] [_log()] server lang: <none>
2026-02-14T12:48:51.558 [DEBUG] [Thread-185681] [transport.py] [_log()] kex follows: False
2026-02-14T12:48:51.559 [DEBUG] [Thread-185681] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:48:51.559 [DEBUG] [Thread-185681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:48:51.559 [DEBUG] [Thread-185681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:48:51.559 [DEBUG] [Thread-185681] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:48:51.559 [DEBUG] [Thread-185681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:48:51.559 [DEBUG] [Thread-185681] [transport.py] [_log()] Compression: none
2026-02-14T12:48:51.559 [DEBUG] [Thread-185681] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:48:51.577 [DEBUG] [Thread-185681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:48:51.577 [DEBUG] [Thread-185681] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:48:51.578 [DEBUG] [Thread-185681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:48:51.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:48:51.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:48:51.580 [DEBUG] [Thread-185681] [transport.py] [_log()] userauth is OK
2026-02-14T12:48:51.581 [DEBUG] [Thread-185681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:48:51.581 [DEBUG] [Thread-185681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:48:51.581 [DEBUG] [Thread-185681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:48:51.581 [DEBUG] [Thread-185681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:48:51.603 [INFO] [Thread-185681] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:48:51.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:48:52.238 [DEBUG] [Thread-185681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:48:52.238 [DEBUG] [Thread-185681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:48:52.239 [DEBUG] [Thread-185681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:48:52.279 [DEBUG] [Thread-185681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:48:52.280 [DEBUG] [Thread-185681] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:48:52.282 [DEBUG] [Thread-185681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:48:52.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:48:52.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:48:52.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:48:52.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:48:52.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:48:52.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:48:52.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:48:52.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:48:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:48:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.450110 -999.00  +14.40  22.00     49   +4.00 1 1 1 1 1   888    0 11.69 56.67 ----- 23.0 22.0 171.0 30.2 20.8 -24.5 19.6 -25.5 19.6 -23.1 20.8 -23.3
2026-02-14T12:48:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:48:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:48:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.450110
2026-02-14T12:48:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:48:52.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:48:52.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:48:52.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:48:52.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:48:52.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:48:17', tmtdew=12.59, humidity=42.25, cloud=0.0, wind=27.08, temperature=14.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:48:09.504', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:48:52.308 [DEBUG] [Thread-185681] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:48:52.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:48:52.403 [DEBUG] [Thread-185684] [transport.py] [_log()] starting thread (client mode): 0xa2d12fb0
2026-02-14T12:48:52.403 [DEBUG] [Thread-185684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:48:52.417 [DEBUG] [Thread-185684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:48:52.417 [INFO] [Thread-185684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:48:52.425 [DEBUG] [Thread-185684] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:48:52.425 [DEBUG] [Thread-185684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:48:52.425 [DEBUG] [Thread-185684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:48:52.425 [DEBUG] [Thread-185684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:48:52.425 [DEBUG] [Thread-185684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:48:52.425 [DEBUG] [Thread-185684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:48:52.425 [DEBUG] [Thread-185684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:48:52.425 [DEBUG] [Thread-185684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:48:52.425 [DEBUG] [Thread-185684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:48:52.425 [DEBUG] [Thread-185684] [transport.py] [_log()] client lang: <none>
2026-02-14T12:48:52.425 [DEBUG] [Thread-185684] [transport.py] [_log()] server lang: <none>
2026-02-14T12:48:52.425 [DEBUG] [Thread-185684] [transport.py] [_log()] kex follows: False
2026-02-14T12:48:52.425 [DEBUG] [Thread-185684] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:48:52.425 [DEBUG] [Thread-185684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:48:52.426 [DEBUG] [Thread-185684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:48:52.426 [DEBUG] [Thread-185684] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:48:52.426 [DEBUG] [Thread-185684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:48:52.426 [DEBUG] [Thread-185684] [transport.py] [_log()] Compression: none
2026-02-14T12:48:52.426 [DEBUG] [Thread-185684] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:48:52.481 [DEBUG] [Thread-185684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:48:52.482 [DEBUG] [Thread-185684] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:48:52.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:48:52.483 [DEBUG] [Thread-185684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:48:52.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:48:52.538 [DEBUG] [Thread-185684] [transport.py] [_log()] userauth is OK
2026-02-14T12:48:52.538 [DEBUG] [Thread-185684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:48:52.538 [DEBUG] [Thread-185684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:48:52.538 [DEBUG] [Thread-185684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:48:52.539 [DEBUG] [Thread-185684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:48:52.556 [INFO] [Thread-185684] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:48:52.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-14T12:48:52.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:48:53.359 [DEBUG] [Thread-185684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:48:53.359 [DEBUG] [Thread-185684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:48:53.407 [DEBUG] [Thread-185684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:48:53.408 [DEBUG] [Thread-185684] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:48:53.417 [DEBUG] [Thread-185684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:48:53.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:48:53.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-14T12:48:53.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:48:53.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:48:53.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:48:53.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:48:53.454 [DEBUG] [Thread-185684] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:48:59.383 [DEBUG] [Thread-185686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:49:14.448 [DEBUG] [Thread-185687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:49:22.461 [DEBUG] [Thread-185688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:49:23.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:49:23.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:49:23.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-14T12:49:24.358 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:49:24.359 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:49:25.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 48, 52), 12.34, 43.52, 0.0, 35.18, 14.5, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:49:25.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:48:52
2026-02-14T12:49:25.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:49:25.930 [DEBUG] [Thread-185689] [transport.py] [_log()] starting thread (client mode): 0xa2d188e0
2026-02-14T12:49:25.930 [DEBUG] [Thread-185689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:49:25.948 [DEBUG] [Thread-185689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:49:25.948 [INFO] [Thread-185689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:49:25.951 [DEBUG] [Thread-185689] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:49:25.952 [DEBUG] [Thread-185689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:49:25.952 [DEBUG] [Thread-185689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:49:25.952 [DEBUG] [Thread-185689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:49:25.952 [DEBUG] [Thread-185689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:49:25.952 [DEBUG] [Thread-185689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:49:25.952 [DEBUG] [Thread-185689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:49:25.952 [DEBUG] [Thread-185689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:49:25.952 [DEBUG] [Thread-185689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:49:25.952 [DEBUG] [Thread-185689] [transport.py] [_log()] client lang: <none>
2026-02-14T12:49:25.952 [DEBUG] [Thread-185689] [transport.py] [_log()] server lang: <none>
2026-02-14T12:49:25.952 [DEBUG] [Thread-185689] [transport.py] [_log()] kex follows: False
2026-02-14T12:49:25.952 [DEBUG] [Thread-185689] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:49:25.952 [DEBUG] [Thread-185689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:49:25.952 [DEBUG] [Thread-185689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:49:25.952 [DEBUG] [Thread-185689] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:49:25.952 [DEBUG] [Thread-185689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:49:25.952 [DEBUG] [Thread-185689] [transport.py] [_log()] Compression: none
2026-02-14T12:49:25.952 [DEBUG] [Thread-185689] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:49:25.971 [DEBUG] [Thread-185689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:49:25.971 [DEBUG] [Thread-185689] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:49:25.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:49:25.972 [DEBUG] [Thread-185689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:49:25.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:49:25.975 [DEBUG] [Thread-185689] [transport.py] [_log()] userauth is OK
2026-02-14T12:49:25.975 [DEBUG] [Thread-185689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:49:25.975 [DEBUG] [Thread-185689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:49:25.975 [DEBUG] [Thread-185689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:49:25.975 [DEBUG] [Thread-185689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:49:26.000 [INFO] [Thread-185689] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:49:26.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:49:26.656 [DEBUG] [Thread-185689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:49:26.656 [DEBUG] [Thread-185689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:49:26.657 [DEBUG] [Thread-185689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:49:26.697 [DEBUG] [Thread-185689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:49:26.698 [DEBUG] [Thread-185689] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:49:26.701 [DEBUG] [Thread-185689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:49:26.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:49:26.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:49:26.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:49:26.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:49:26.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:49:26.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:49:26.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:49:26.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:49:26.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:49:26.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.450457 -999.00  +14.50  22.26     49   +4.00 1 1 1 1 1   888    0 11.53 58.22 ----- 40.0 22.3 177.4 35.0 20.7 -26.9 19.6 -26.4 19.8 -24.1 20.8 -26.0
2026-02-14T12:49:26.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:49:26.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:49:26.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.450457
2026-02-14T12:49:26.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:49:26.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:49:26.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:49:26.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:49:26.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:49:26.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:48:52', tmtdew=12.34, humidity=43.52, cloud=0.0, wind=35.18, temperature=14.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:48:39.485', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:49:26.730 [DEBUG] [Thread-185689] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:49:26.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T12:49:26.826 [DEBUG] [Thread-185692] [transport.py] [_log()] starting thread (client mode): 0xa2ddce20
2026-02-14T12:49:26.826 [DEBUG] [Thread-185692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:49:26.840 [DEBUG] [Thread-185692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:49:26.840 [INFO] [Thread-185692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:49:26.847 [DEBUG] [Thread-185692] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:49:26.848 [DEBUG] [Thread-185692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:49:26.848 [DEBUG] [Thread-185692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:49:26.848 [DEBUG] [Thread-185692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:49:26.848 [DEBUG] [Thread-185692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:49:26.848 [DEBUG] [Thread-185692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:49:26.848 [DEBUG] [Thread-185692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:49:26.848 [DEBUG] [Thread-185692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:49:26.848 [DEBUG] [Thread-185692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:49:26.848 [DEBUG] [Thread-185692] [transport.py] [_log()] client lang: <none>
2026-02-14T12:49:26.848 [DEBUG] [Thread-185692] [transport.py] [_log()] server lang: <none>
2026-02-14T12:49:26.848 [DEBUG] [Thread-185692] [transport.py] [_log()] kex follows: False
2026-02-14T12:49:26.848 [DEBUG] [Thread-185692] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:49:26.848 [DEBUG] [Thread-185692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:49:26.848 [DEBUG] [Thread-185692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:49:26.848 [DEBUG] [Thread-185692] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:49:26.848 [DEBUG] [Thread-185692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:49:26.848 [DEBUG] [Thread-185692] [transport.py] [_log()] Compression: none
2026-02-14T12:49:26.848 [DEBUG] [Thread-185692] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:49:26.907 [DEBUG] [Thread-185692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:49:26.908 [DEBUG] [Thread-185692] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:49:26.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:49:26.909 [DEBUG] [Thread-185692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:49:26.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:49:26.966 [DEBUG] [Thread-185692] [transport.py] [_log()] userauth is OK
2026-02-14T12:49:26.967 [DEBUG] [Thread-185692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:49:26.967 [DEBUG] [Thread-185692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:49:26.967 [DEBUG] [Thread-185692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:49:26.967 [DEBUG] [Thread-185692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:49:26.987 [INFO] [Thread-185692] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:49:26.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-14T12:49:26.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:49:27.814 [DEBUG] [Thread-185692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:49:27.815 [DEBUG] [Thread-185692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:49:27.863 [DEBUG] [Thread-185692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:49:27.863 [DEBUG] [Thread-185692] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:49:27.872 [DEBUG] [Thread-185692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:49:27.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:49:27.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-14T12:49:27.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-14T12:49:27.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:49:27.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:49:27.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:49:27.908 [DEBUG] [Thread-185692] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:49:29.486 [DEBUG] [Thread-185694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:49:44.536 [DEBUG] [Thread-185695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:49:57.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:49:57.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:49:57.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:49:59.574 [DEBUG] [Thread-185696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:49:59.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 49, 27), 12.85, 42.17, 0.0, 32.68, 14.81, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:49:59.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:49:27
2026-02-14T12:50:00.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:50:00.498 [DEBUG] [Thread-185697] [transport.py] [_log()] starting thread (client mode): 0xa2dde3e0
2026-02-14T12:50:00.498 [DEBUG] [Thread-185697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:50:00.518 [DEBUG] [Thread-185697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:50:00.518 [INFO] [Thread-185697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:50:00.521 [DEBUG] [Thread-185697] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:50:00.521 [DEBUG] [Thread-185697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:50:00.521 [DEBUG] [Thread-185697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:50:00.521 [DEBUG] [Thread-185697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:50:00.521 [DEBUG] [Thread-185697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:50:00.521 [DEBUG] [Thread-185697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:50:00.521 [DEBUG] [Thread-185697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:50:00.521 [DEBUG] [Thread-185697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:50:00.521 [DEBUG] [Thread-185697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:50:00.521 [DEBUG] [Thread-185697] [transport.py] [_log()] client lang: <none>
2026-02-14T12:50:00.521 [DEBUG] [Thread-185697] [transport.py] [_log()] server lang: <none>
2026-02-14T12:50:00.521 [DEBUG] [Thread-185697] [transport.py] [_log()] kex follows: False
2026-02-14T12:50:00.521 [DEBUG] [Thread-185697] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:50:00.522 [DEBUG] [Thread-185697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:50:00.522 [DEBUG] [Thread-185697] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:50:00.522 [DEBUG] [Thread-185697] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:50:00.522 [DEBUG] [Thread-185697] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:50:00.522 [DEBUG] [Thread-185697] [transport.py] [_log()] Compression: none
2026-02-14T12:50:00.522 [DEBUG] [Thread-185697] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:50:00.539 [DEBUG] [Thread-185697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:50:00.540 [DEBUG] [Thread-185697] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:50:00.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:50:00.541 [DEBUG] [Thread-185697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:50:00.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:50:00.543 [DEBUG] [Thread-185697] [transport.py] [_log()] userauth is OK
2026-02-14T12:50:00.543 [DEBUG] [Thread-185697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:50:00.543 [DEBUG] [Thread-185697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:50:00.543 [DEBUG] [Thread-185697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:50:00.544 [DEBUG] [Thread-185697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:50:00.569 [INFO] [Thread-185697] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:50:00.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:50:01.355 [DEBUG] [Thread-185697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:50:01.355 [DEBUG] [Thread-185697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:50:01.356 [DEBUG] [Thread-185697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:50:01.397 [DEBUG] [Thread-185697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:50:01.397 [DEBUG] [Thread-185697] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:50:01.400 [DEBUG] [Thread-185697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:50:01.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:50:01.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:50:01.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:50:01.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:50:01.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:50:01.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:50:01.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:50:01.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:50:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:50:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.450804 -999.00  +14.20  29.24     49   +3.70 1 1 1 1 1   888    0 11.31 56.43 ----- 26.6 29.2 158.6 45.5 20.7 -25.7 19.5 -24.3 19.6 -23.9 20.8 -24.5
2026-02-14T12:50:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:50:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:50:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.450804
2026-02-14T12:50:01.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:50:01.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:50:01.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:50:01.426 [DEBUG] [Thread-185697] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:50:01.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:50:01.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:50:01.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:49:27', tmtdew=12.85, humidity=42.17, cloud=0.0, wind=32.68, temperature=14.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:49:09.466', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:50:01.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-14T12:50:01.521 [DEBUG] [Thread-185700] [transport.py] [_log()] starting thread (client mode): 0xa57420b0
2026-02-14T12:50:01.521 [DEBUG] [Thread-185700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:50:01.536 [DEBUG] [Thread-185700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:50:01.536 [INFO] [Thread-185700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:50:01.543 [DEBUG] [Thread-185700] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:50:01.543 [DEBUG] [Thread-185700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:50:01.543 [DEBUG] [Thread-185700] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:50:01.544 [DEBUG] [Thread-185700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:50:01.544 [DEBUG] [Thread-185700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:50:01.544 [DEBUG] [Thread-185700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:50:01.544 [DEBUG] [Thread-185700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:50:01.544 [DEBUG] [Thread-185700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:50:01.544 [DEBUG] [Thread-185700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:50:01.544 [DEBUG] [Thread-185700] [transport.py] [_log()] client lang: <none>
2026-02-14T12:50:01.544 [DEBUG] [Thread-185700] [transport.py] [_log()] server lang: <none>
2026-02-14T12:50:01.544 [DEBUG] [Thread-185700] [transport.py] [_log()] kex follows: False
2026-02-14T12:50:01.544 [DEBUG] [Thread-185700] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:50:01.544 [DEBUG] [Thread-185700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:50:01.544 [DEBUG] [Thread-185700] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:50:01.544 [DEBUG] [Thread-185700] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:50:01.544 [DEBUG] [Thread-185700] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:50:01.544 [DEBUG] [Thread-185700] [transport.py] [_log()] Compression: none
2026-02-14T12:50:01.544 [DEBUG] [Thread-185700] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:50:01.602 [DEBUG] [Thread-185700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:50:01.602 [DEBUG] [Thread-185700] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:50:01.603 [DEBUG] [Thread-185700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:50:01.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:50:01.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:50:01.658 [DEBUG] [Thread-185700] [transport.py] [_log()] userauth is OK
2026-02-14T12:50:01.658 [DEBUG] [Thread-185700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:50:01.658 [DEBUG] [Thread-185700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:50:01.658 [DEBUG] [Thread-185700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:50:01.659 [DEBUG] [Thread-185700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:50:01.677 [INFO] [Thread-185700] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:50:01.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-14T12:50:01.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:50:02.513 [DEBUG] [Thread-185700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:50:02.513 [DEBUG] [Thread-185700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:50:02.564 [DEBUG] [Thread-185700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:50:02.564 [DEBUG] [Thread-185700] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:50:02.573 [DEBUG] [Thread-185700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:50:02.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:50:02.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:50:02.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-14T12:50:02.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:50:02.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:50:02.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:50:02.611 [DEBUG] [Thread-185700] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:50:14.610 [DEBUG] [Thread-185702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:50:22.493 [DEBUG] [Thread-185703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:50:24.499 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:50:24.500 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:50:29.662 [DEBUG] [Thread-185704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:50:32.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:50:32.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:50:32.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-14T12:50:34.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 50, 3), 12.97, 41.84, 0.0, 32.32, 14.79, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:50:34.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:50:03
2026-02-14T12:50:34.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:50:35.056 [DEBUG] [Thread-185705] [transport.py] [_log()] starting thread (client mode): 0xa5741030
2026-02-14T12:50:35.057 [DEBUG] [Thread-185705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:50:35.078 [DEBUG] [Thread-185705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:50:35.078 [INFO] [Thread-185705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:50:35.082 [DEBUG] [Thread-185705] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:50:35.082 [DEBUG] [Thread-185705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:50:35.082 [DEBUG] [Thread-185705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:50:35.082 [DEBUG] [Thread-185705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:50:35.082 [DEBUG] [Thread-185705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:50:35.082 [DEBUG] [Thread-185705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:50:35.082 [DEBUG] [Thread-185705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:50:35.082 [DEBUG] [Thread-185705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:50:35.083 [DEBUG] [Thread-185705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:50:35.083 [DEBUG] [Thread-185705] [transport.py] [_log()] client lang: <none>
2026-02-14T12:50:35.083 [DEBUG] [Thread-185705] [transport.py] [_log()] server lang: <none>
2026-02-14T12:50:35.083 [DEBUG] [Thread-185705] [transport.py] [_log()] kex follows: False
2026-02-14T12:50:35.083 [DEBUG] [Thread-185705] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:50:35.083 [DEBUG] [Thread-185705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:50:35.083 [DEBUG] [Thread-185705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:50:35.083 [DEBUG] [Thread-185705] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:50:35.083 [DEBUG] [Thread-185705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:50:35.083 [DEBUG] [Thread-185705] [transport.py] [_log()] Compression: none
2026-02-14T12:50:35.083 [DEBUG] [Thread-185705] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:50:35.101 [DEBUG] [Thread-185705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:50:35.101 [DEBUG] [Thread-185705] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:50:35.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:50:35.102 [DEBUG] [Thread-185705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:50:35.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:50:35.104 [DEBUG] [Thread-185705] [transport.py] [_log()] userauth is OK
2026-02-14T12:50:35.105 [DEBUG] [Thread-185705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:50:35.105 [DEBUG] [Thread-185705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:50:35.105 [DEBUG] [Thread-185705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:50:35.105 [DEBUG] [Thread-185705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:50:35.126 [INFO] [Thread-185705] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:50:35.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:50:35.765 [DEBUG] [Thread-185705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:50:35.765 [DEBUG] [Thread-185705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:50:35.766 [DEBUG] [Thread-185705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:50:35.806 [DEBUG] [Thread-185705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:50:35.807 [DEBUG] [Thread-185705] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:50:35.810 [DEBUG] [Thread-185705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:50:35.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:50:35.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:50:35.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:50:35.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:50:35.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:50:35.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:50:35.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:50:35.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:50:35.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:50:35.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.451498 -999.00  +14.00  21.61     49   +3.50 1 1 1 1 1   888    0 11.53 48.82 ----- 24.5 21.6 158.0 36.1 20.6 -26.7 19.4 -24.2 19.5 -24.4 20.7 -25.3
2026-02-14T12:50:35.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:50:35.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:50:35.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.451498
2026-02-14T12:50:35.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:50:35.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:50:35.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:50:35.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:50:35.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:50:35.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:50:03', tmtdew=12.97, humidity=41.84, cloud=0.0, wind=32.32, temperature=14.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:50:09.427', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:50:35.839 [DEBUG] [Thread-185705] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:50:35.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-14T12:50:35.936 [DEBUG] [Thread-185708] [transport.py] [_log()] starting thread (client mode): 0xa2db4ca0
2026-02-14T12:50:35.936 [DEBUG] [Thread-185708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:50:35.950 [DEBUG] [Thread-185708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:50:35.950 [INFO] [Thread-185708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:50:35.958 [DEBUG] [Thread-185708] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:50:35.958 [DEBUG] [Thread-185708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:50:35.958 [DEBUG] [Thread-185708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:50:35.958 [DEBUG] [Thread-185708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:50:35.958 [DEBUG] [Thread-185708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:50:35.958 [DEBUG] [Thread-185708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:50:35.959 [DEBUG] [Thread-185708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:50:35.959 [DEBUG] [Thread-185708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:50:35.959 [DEBUG] [Thread-185708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:50:35.959 [DEBUG] [Thread-185708] [transport.py] [_log()] client lang: <none>
2026-02-14T12:50:35.959 [DEBUG] [Thread-185708] [transport.py] [_log()] server lang: <none>
2026-02-14T12:50:35.959 [DEBUG] [Thread-185708] [transport.py] [_log()] kex follows: False
2026-02-14T12:50:35.959 [DEBUG] [Thread-185708] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:50:35.959 [DEBUG] [Thread-185708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:50:35.959 [DEBUG] [Thread-185708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:50:35.959 [DEBUG] [Thread-185708] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:50:35.959 [DEBUG] [Thread-185708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:50:35.959 [DEBUG] [Thread-185708] [transport.py] [_log()] Compression: none
2026-02-14T12:50:35.959 [DEBUG] [Thread-185708] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:50:36.022 [DEBUG] [Thread-185708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:50:36.023 [DEBUG] [Thread-185708] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:50:36.024 [DEBUG] [Thread-185708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:50:36.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:50:36.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:50:36.081 [DEBUG] [Thread-185708] [transport.py] [_log()] userauth is OK
2026-02-14T12:50:36.081 [DEBUG] [Thread-185708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:50:36.081 [DEBUG] [Thread-185708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:50:36.081 [DEBUG] [Thread-185708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:50:36.081 [DEBUG] [Thread-185708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:50:36.104 [INFO] [Thread-185708] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:50:36.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-14T12:50:36.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:50:36.910 [DEBUG] [Thread-185708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:50:36.910 [DEBUG] [Thread-185708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:50:36.958 [DEBUG] [Thread-185708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:50:36.958 [DEBUG] [Thread-185708] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:50:36.968 [DEBUG] [Thread-185708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:50:36.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:50:36.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:50:36.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:50:36.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:50:36.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:50:36.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:50:37.005 [DEBUG] [Thread-185708] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:50:44.698 [DEBUG] [Thread-185710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:50:59.738 [DEBUG] [Thread-185711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:51:07.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:51:07.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:51:07.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-14T12:51:09.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 50, 39), 14.58, 37.22, 0.0, 35.04, 15.92, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:51:09.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:50:39
2026-02-14T12:51:09.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:51:09.825 [DEBUG] [Thread-185712] [transport.py] [_log()] starting thread (client mode): 0xa2db7a90
2026-02-14T12:51:09.825 [DEBUG] [Thread-185712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:51:09.844 [DEBUG] [Thread-185712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:51:09.844 [INFO] [Thread-185712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:51:09.847 [DEBUG] [Thread-185712] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:51:09.848 [DEBUG] [Thread-185712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:51:09.848 [DEBUG] [Thread-185712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:51:09.848 [DEBUG] [Thread-185712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:51:09.848 [DEBUG] [Thread-185712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:51:09.848 [DEBUG] [Thread-185712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:51:09.848 [DEBUG] [Thread-185712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:51:09.848 [DEBUG] [Thread-185712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:51:09.848 [DEBUG] [Thread-185712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:51:09.848 [DEBUG] [Thread-185712] [transport.py] [_log()] client lang: <none>
2026-02-14T12:51:09.848 [DEBUG] [Thread-185712] [transport.py] [_log()] server lang: <none>
2026-02-14T12:51:09.848 [DEBUG] [Thread-185712] [transport.py] [_log()] kex follows: False
2026-02-14T12:51:09.848 [DEBUG] [Thread-185712] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:51:09.849 [DEBUG] [Thread-185712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:51:09.849 [DEBUG] [Thread-185712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:51:09.849 [DEBUG] [Thread-185712] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:51:09.849 [DEBUG] [Thread-185712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:51:09.849 [DEBUG] [Thread-185712] [transport.py] [_log()] Compression: none
2026-02-14T12:51:09.849 [DEBUG] [Thread-185712] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:51:09.867 [DEBUG] [Thread-185712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:51:09.867 [DEBUG] [Thread-185712] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:51:09.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:51:09.868 [DEBUG] [Thread-185712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:51:09.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:51:09.870 [DEBUG] [Thread-185712] [transport.py] [_log()] userauth is OK
2026-02-14T12:51:09.871 [DEBUG] [Thread-185712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:51:09.871 [DEBUG] [Thread-185712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:51:09.871 [DEBUG] [Thread-185712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:51:09.871 [DEBUG] [Thread-185712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:51:09.897 [INFO] [Thread-185712] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:51:09.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:51:10.561 [DEBUG] [Thread-185712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:51:10.562 [DEBUG] [Thread-185712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:51:10.562 [DEBUG] [Thread-185712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:51:10.602 [DEBUG] [Thread-185712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:51:10.603 [DEBUG] [Thread-185712] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:51:10.606 [DEBUG] [Thread-185712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:51:10.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:51:10.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:51:10.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:51:10.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:51:10.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:51:10.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:51:10.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:51:10.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:51:10.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:51:10.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.451846 -999.00  +14.20  27.23     49   +3.70 1 1 1 1 1   888    0 11.36 50.73 ----- 32.6 27.2 164.2 37.3 20.5 -27.0 19.4 -24.6 19.5 -24.8 20.7 -26.5
2026-02-14T12:51:10.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:51:10.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:51:10.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.451846
2026-02-14T12:51:10.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:51:10.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:51:10.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:51:10.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:51:10.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:51:10.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:50:39', tmtdew=14.58, humidity=37.22, cloud=0.0, wind=35.04, temperature=15.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:50:39.494', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:51:10.632 [DEBUG] [Thread-185712] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:51:10.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-14T12:51:10.726 [DEBUG] [Thread-185715] [transport.py] [_log()] starting thread (client mode): 0xa5741870
2026-02-14T12:51:10.726 [DEBUG] [Thread-185715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:51:10.741 [DEBUG] [Thread-185715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:51:10.741 [INFO] [Thread-185715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:51:10.758 [DEBUG] [Thread-185715] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:51:10.759 [DEBUG] [Thread-185715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:51:10.759 [DEBUG] [Thread-185715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:51:10.759 [DEBUG] [Thread-185715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:51:10.759 [DEBUG] [Thread-185715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:51:10.759 [DEBUG] [Thread-185715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:51:10.760 [DEBUG] [Thread-185715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:51:10.760 [DEBUG] [Thread-185715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:51:10.760 [DEBUG] [Thread-185715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:51:10.760 [DEBUG] [Thread-185715] [transport.py] [_log()] client lang: <none>
2026-02-14T12:51:10.760 [DEBUG] [Thread-185715] [transport.py] [_log()] server lang: <none>
2026-02-14T12:51:10.760 [DEBUG] [Thread-185715] [transport.py] [_log()] kex follows: False
2026-02-14T12:51:10.760 [DEBUG] [Thread-185715] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:51:10.760 [DEBUG] [Thread-185715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:51:10.760 [DEBUG] [Thread-185715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:51:10.761 [DEBUG] [Thread-185715] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:51:10.761 [DEBUG] [Thread-185715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:51:10.761 [DEBUG] [Thread-185715] [transport.py] [_log()] Compression: none
2026-02-14T12:51:10.761 [DEBUG] [Thread-185715] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:51:10.807 [DEBUG] [Thread-185715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:51:10.807 [DEBUG] [Thread-185715] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:51:10.808 [DEBUG] [Thread-185715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:51:10.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:51:10.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:51:10.862 [DEBUG] [Thread-185715] [transport.py] [_log()] userauth is OK
2026-02-14T12:51:10.863 [DEBUG] [Thread-185715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:51:10.863 [DEBUG] [Thread-185715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:51:10.863 [DEBUG] [Thread-185715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:51:10.863 [DEBUG] [Thread-185715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:51:10.882 [INFO] [Thread-185715] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:51:10.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-14T12:51:10.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:51:11.704 [DEBUG] [Thread-185715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:51:11.705 [DEBUG] [Thread-185715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:51:11.752 [DEBUG] [Thread-185715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:51:11.753 [DEBUG] [Thread-185715] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:51:11.762 [DEBUG] [Thread-185715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:51:11.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:51:11.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-14T12:51:11.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-14T12:51:11.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:51:11.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:51:11.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:51:11.798 [DEBUG] [Thread-185715] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:51:14.773 [DEBUG] [Thread-185717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:51:22.527 [DEBUG] [Thread-185718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:51:24.640 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:51:24.642 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:51:29.822 [DEBUG] [Thread-185719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:51:41.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:51:41.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:51:41.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:51:43.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 51, 14), 12.77, 42.07, 0.0, 33.65, 14.46, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:51:43.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:51:14
2026-02-14T12:51:44.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:51:44.242 [DEBUG] [Thread-185720] [transport.py] [_log()] starting thread (client mode): 0xa5742b60
2026-02-14T12:51:44.243 [DEBUG] [Thread-185720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:51:44.262 [DEBUG] [Thread-185720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:51:44.262 [INFO] [Thread-185720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:51:44.265 [DEBUG] [Thread-185720] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:51:44.265 [DEBUG] [Thread-185720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:51:44.265 [DEBUG] [Thread-185720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:51:44.266 [DEBUG] [Thread-185720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:51:44.266 [DEBUG] [Thread-185720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:51:44.266 [DEBUG] [Thread-185720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:51:44.266 [DEBUG] [Thread-185720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:51:44.266 [DEBUG] [Thread-185720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:51:44.266 [DEBUG] [Thread-185720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:51:44.266 [DEBUG] [Thread-185720] [transport.py] [_log()] client lang: <none>
2026-02-14T12:51:44.266 [DEBUG] [Thread-185720] [transport.py] [_log()] server lang: <none>
2026-02-14T12:51:44.266 [DEBUG] [Thread-185720] [transport.py] [_log()] kex follows: False
2026-02-14T12:51:44.266 [DEBUG] [Thread-185720] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:51:44.266 [DEBUG] [Thread-185720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:51:44.266 [DEBUG] [Thread-185720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:51:44.266 [DEBUG] [Thread-185720] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:51:44.266 [DEBUG] [Thread-185720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:51:44.267 [DEBUG] [Thread-185720] [transport.py] [_log()] Compression: none
2026-02-14T12:51:44.267 [DEBUG] [Thread-185720] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:51:44.286 [DEBUG] [Thread-185720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:51:44.287 [DEBUG] [Thread-185720] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:51:44.288 [DEBUG] [Thread-185720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:51:44.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:51:44.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:51:44.291 [DEBUG] [Thread-185720] [transport.py] [_log()] userauth is OK
2026-02-14T12:51:44.291 [DEBUG] [Thread-185720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:51:44.291 [DEBUG] [Thread-185720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:51:44.291 [DEBUG] [Thread-185720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:51:44.291 [DEBUG] [Thread-185720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:51:44.315 [INFO] [Thread-185720] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:51:44.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:51:44.860 [DEBUG] [Thread-185722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:51:44.977 [DEBUG] [Thread-185720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:51:44.978 [DEBUG] [Thread-185720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:51:44.978 [DEBUG] [Thread-185720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:51:45.019 [DEBUG] [Thread-185720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:51:45.019 [DEBUG] [Thread-185720] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:51:45.022 [DEBUG] [Thread-185720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:51:45.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:51:45.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:51:45.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:51:45.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:51:45.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:51:45.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:51:45.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:51:45.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:51:45.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:51:45.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.452193 -999.00  +14.20  24.12     49   +3.80 1 1 1 1 1   888    0 11.68 49.91 ----- 25.6 24.1 137.6 34.7 20.6 -25.4 19.5 -23.8 19.5 -24.4 20.6 -25.7
2026-02-14T12:51:45.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:51:45.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:51:45.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.452193
2026-02-14T12:51:45.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:51:45.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:51:45.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:51:45.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:51:45.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:51:45.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:51:14', tmtdew=12.77, humidity=42.07, cloud=0.0, wind=33.65, temperature=14.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:51:09.475', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:51:45.052 [DEBUG] [Thread-185720] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:51:45.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-14T12:51:45.145 [DEBUG] [Thread-185724] [transport.py] [_log()] starting thread (client mode): 0xa2db5810
2026-02-14T12:51:45.146 [DEBUG] [Thread-185724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:51:45.160 [DEBUG] [Thread-185724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:51:45.160 [INFO] [Thread-185724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:51:45.167 [DEBUG] [Thread-185724] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:51:45.167 [DEBUG] [Thread-185724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:51:45.167 [DEBUG] [Thread-185724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:51:45.167 [DEBUG] [Thread-185724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:51:45.168 [DEBUG] [Thread-185724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:51:45.168 [DEBUG] [Thread-185724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:51:45.168 [DEBUG] [Thread-185724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:51:45.168 [DEBUG] [Thread-185724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:51:45.168 [DEBUG] [Thread-185724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:51:45.168 [DEBUG] [Thread-185724] [transport.py] [_log()] client lang: <none>
2026-02-14T12:51:45.168 [DEBUG] [Thread-185724] [transport.py] [_log()] server lang: <none>
2026-02-14T12:51:45.168 [DEBUG] [Thread-185724] [transport.py] [_log()] kex follows: False
2026-02-14T12:51:45.168 [DEBUG] [Thread-185724] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:51:45.168 [DEBUG] [Thread-185724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:51:45.168 [DEBUG] [Thread-185724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:51:45.168 [DEBUG] [Thread-185724] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:51:45.168 [DEBUG] [Thread-185724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:51:45.168 [DEBUG] [Thread-185724] [transport.py] [_log()] Compression: none
2026-02-14T12:51:45.168 [DEBUG] [Thread-185724] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:51:45.226 [DEBUG] [Thread-185724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:51:45.227 [DEBUG] [Thread-185724] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:51:45.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:51:45.228 [DEBUG] [Thread-185724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:51:45.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:51:45.282 [DEBUG] [Thread-185724] [transport.py] [_log()] userauth is OK
2026-02-14T12:51:45.283 [DEBUG] [Thread-185724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:51:45.283 [DEBUG] [Thread-185724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:51:45.283 [DEBUG] [Thread-185724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:51:45.283 [DEBUG] [Thread-185724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:51:45.308 [INFO] [Thread-185724] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:51:45.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-14T12:51:45.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:51:46.127 [DEBUG] [Thread-185724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:51:46.127 [DEBUG] [Thread-185724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:51:46.175 [DEBUG] [Thread-185724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:51:46.175 [DEBUG] [Thread-185724] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:51:46.184 [DEBUG] [Thread-185724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:51:46.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:51:46.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-14T12:51:46.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:51:46.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:51:46.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:51:46.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:51:46.218 [DEBUG] [Thread-185724] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:51:59.895 [DEBUG] [Thread-185726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:52:14.949 [DEBUG] [Thread-185727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:52:16.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:52:16.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:52:16.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-14T12:52:18.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 51, 49), 11.9, 44.57, 0.0, 24.42, 13.91, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:52:18.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:51:49
2026-02-14T12:52:18.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:52:18.633 [DEBUG] [Thread-185728] [transport.py] [_log()] starting thread (client mode): 0xa5741c00
2026-02-14T12:52:18.633 [DEBUG] [Thread-185728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:52:18.654 [DEBUG] [Thread-185728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:52:18.654 [INFO] [Thread-185728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:52:18.657 [DEBUG] [Thread-185728] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:52:18.658 [DEBUG] [Thread-185728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:52:18.658 [DEBUG] [Thread-185728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:52:18.658 [DEBUG] [Thread-185728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:52:18.658 [DEBUG] [Thread-185728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:52:18.658 [DEBUG] [Thread-185728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:52:18.658 [DEBUG] [Thread-185728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:52:18.658 [DEBUG] [Thread-185728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:52:18.658 [DEBUG] [Thread-185728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:52:18.658 [DEBUG] [Thread-185728] [transport.py] [_log()] client lang: <none>
2026-02-14T12:52:18.658 [DEBUG] [Thread-185728] [transport.py] [_log()] server lang: <none>
2026-02-14T12:52:18.658 [DEBUG] [Thread-185728] [transport.py] [_log()] kex follows: False
2026-02-14T12:52:18.658 [DEBUG] [Thread-185728] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:52:18.658 [DEBUG] [Thread-185728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:52:18.658 [DEBUG] [Thread-185728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:52:18.658 [DEBUG] [Thread-185728] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:52:18.658 [DEBUG] [Thread-185728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:52:18.658 [DEBUG] [Thread-185728] [transport.py] [_log()] Compression: none
2026-02-14T12:52:18.658 [DEBUG] [Thread-185728] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:52:18.676 [DEBUG] [Thread-185728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:52:18.677 [DEBUG] [Thread-185728] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:52:18.677 [DEBUG] [Thread-185728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:52:18.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:52:18.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:52:18.680 [DEBUG] [Thread-185728] [transport.py] [_log()] userauth is OK
2026-02-14T12:52:18.680 [DEBUG] [Thread-185728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:52:18.680 [DEBUG] [Thread-185728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:52:18.680 [DEBUG] [Thread-185728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:52:18.680 [DEBUG] [Thread-185728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:52:18.717 [INFO] [Thread-185728] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:52:18.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:52:19.323 [DEBUG] [Thread-185728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:52:19.324 [DEBUG] [Thread-185728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:52:19.324 [DEBUG] [Thread-185728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:52:19.364 [DEBUG] [Thread-185728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:52:19.364 [DEBUG] [Thread-185728] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:52:19.367 [DEBUG] [Thread-185728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:52:19.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:52:19.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:52:19.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:52:19.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:52:19.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:52:19.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:52:19.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:52:19.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:52:19.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:52:19.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.452541 -999.00  +14.20  19.98     49   +3.80 1 1 1 1 1   888    0 11.30 47.26 ----- 22.3 20.0 143.2 29.6 20.7 -25.5 19.6 -23.5 19.6 -23.3 20.9 -23.6
2026-02-14T12:52:19.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:52:19.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:52:19.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.452541
2026-02-14T12:52:19.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:52:19.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:52:19.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:52:19.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:52:19.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:52:19.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:51:49', tmtdew=11.9, humidity=44.57, cloud=0.0, wind=24.42, temperature=13.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:51:39.542', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:52:19.393 [DEBUG] [Thread-185728] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:52:19.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-14T12:52:19.487 [DEBUG] [Thread-185731] [transport.py] [_log()] starting thread (client mode): 0xa5740430
2026-02-14T12:52:19.487 [DEBUG] [Thread-185731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:52:19.503 [DEBUG] [Thread-185731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:52:19.503 [INFO] [Thread-185731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:52:19.512 [DEBUG] [Thread-185731] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:52:19.512 [DEBUG] [Thread-185731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:52:19.513 [DEBUG] [Thread-185731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:52:19.513 [DEBUG] [Thread-185731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:52:19.513 [DEBUG] [Thread-185731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:52:19.513 [DEBUG] [Thread-185731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:52:19.513 [DEBUG] [Thread-185731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:52:19.513 [DEBUG] [Thread-185731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:52:19.513 [DEBUG] [Thread-185731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:52:19.513 [DEBUG] [Thread-185731] [transport.py] [_log()] client lang: <none>
2026-02-14T12:52:19.513 [DEBUG] [Thread-185731] [transport.py] [_log()] server lang: <none>
2026-02-14T12:52:19.513 [DEBUG] [Thread-185731] [transport.py] [_log()] kex follows: False
2026-02-14T12:52:19.513 [DEBUG] [Thread-185731] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:52:19.513 [DEBUG] [Thread-185731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:52:19.513 [DEBUG] [Thread-185731] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:52:19.513 [DEBUG] [Thread-185731] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:52:19.513 [DEBUG] [Thread-185731] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:52:19.513 [DEBUG] [Thread-185731] [transport.py] [_log()] Compression: none
2026-02-14T12:52:19.513 [DEBUG] [Thread-185731] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:52:19.570 [DEBUG] [Thread-185731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:52:19.570 [DEBUG] [Thread-185731] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:52:19.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:52:19.571 [DEBUG] [Thread-185731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:52:19.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:52:19.628 [DEBUG] [Thread-185731] [transport.py] [_log()] userauth is OK
2026-02-14T12:52:19.629 [DEBUG] [Thread-185731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:52:19.629 [DEBUG] [Thread-185731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:52:19.629 [DEBUG] [Thread-185731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:52:19.629 [DEBUG] [Thread-185731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:52:19.653 [INFO] [Thread-185731] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:52:19.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-14T12:52:19.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:52:20.455 [DEBUG] [Thread-185731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:52:20.455 [DEBUG] [Thread-185731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:52:20.503 [DEBUG] [Thread-185731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:52:20.504 [DEBUG] [Thread-185731] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:52:20.513 [DEBUG] [Thread-185731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:52:20.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:52:20.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-14T12:52:20.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-14T12:52:20.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:52:20.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:52:20.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:52:20.550 [DEBUG] [Thread-185731] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:52:22.559 [DEBUG] [Thread-185733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:52:24.781 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:52:24.782 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:52:29.987 [DEBUG] [Thread-185734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:52:45.038 [DEBUG] [Thread-185735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:52:50.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:52:50.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:52:50.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:52:52.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 52, 24), 11.86, 44.68, 0.0, 24.49, 13.86, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:52:52.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:52:24
2026-02-14T12:52:53.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:52:53.183 [DEBUG] [Thread-185736] [transport.py] [_log()] starting thread (client mode): 0xa5741ea0
2026-02-14T12:52:53.183 [DEBUG] [Thread-185736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:52:53.204 [DEBUG] [Thread-185736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:52:53.204 [INFO] [Thread-185736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:52:53.207 [DEBUG] [Thread-185736] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:52:53.207 [DEBUG] [Thread-185736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:52:53.207 [DEBUG] [Thread-185736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:52:53.207 [DEBUG] [Thread-185736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:52:53.207 [DEBUG] [Thread-185736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:52:53.207 [DEBUG] [Thread-185736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:52:53.207 [DEBUG] [Thread-185736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:52:53.207 [DEBUG] [Thread-185736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:52:53.207 [DEBUG] [Thread-185736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:52:53.207 [DEBUG] [Thread-185736] [transport.py] [_log()] client lang: <none>
2026-02-14T12:52:53.207 [DEBUG] [Thread-185736] [transport.py] [_log()] server lang: <none>
2026-02-14T12:52:53.207 [DEBUG] [Thread-185736] [transport.py] [_log()] kex follows: False
2026-02-14T12:52:53.207 [DEBUG] [Thread-185736] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:52:53.207 [DEBUG] [Thread-185736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:52:53.207 [DEBUG] [Thread-185736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:52:53.207 [DEBUG] [Thread-185736] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:52:53.207 [DEBUG] [Thread-185736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:52:53.207 [DEBUG] [Thread-185736] [transport.py] [_log()] Compression: none
2026-02-14T12:52:53.207 [DEBUG] [Thread-185736] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:52:53.224 [DEBUG] [Thread-185736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:52:53.224 [DEBUG] [Thread-185736] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:52:53.225 [DEBUG] [Thread-185736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:52:53.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:52:53.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:52:53.269 [DEBUG] [Thread-185736] [transport.py] [_log()] userauth is OK
2026-02-14T12:52:53.270 [DEBUG] [Thread-185736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:52:53.270 [DEBUG] [Thread-185736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:52:53.270 [DEBUG] [Thread-185736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:52:53.270 [DEBUG] [Thread-185736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:52:53.296 [INFO] [Thread-185736] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:52:53.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:52:53.907 [DEBUG] [Thread-185736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:52:53.907 [DEBUG] [Thread-185736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:52:53.908 [DEBUG] [Thread-185736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:52:53.948 [DEBUG] [Thread-185736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:52:53.949 [DEBUG] [Thread-185736] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:52:53.952 [DEBUG] [Thread-185736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:52:53.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:52:53.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:52:53.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:52:53.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:52:53.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:52:53.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:52:53.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:52:53.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:52:53.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:52:53.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.452888 -999.00  +14.20  17.22     50   +4.00 1 1 1 1 1   888    0 11.32 43.32 ----- 19.6 17.2 165.8 25.3 20.9 -24.1 19.7 -23.7 19.7 -23.4 21.0 -23.4
2026-02-14T12:52:53.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:52:53.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:52:53.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.452888
2026-02-14T12:52:53.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:52:53.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:52:53.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:52:53.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:52:53.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:52:53.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:52:24', tmtdew=11.86, humidity=44.68, cloud=0.0, wind=24.49, temperature=13.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:52:09.523', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:52:53.981 [DEBUG] [Thread-185736] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:52:54.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-14T12:52:54.078 [DEBUG] [Thread-185739] [transport.py] [_log()] starting thread (client mode): 0xa57411b0
2026-02-14T12:52:54.078 [DEBUG] [Thread-185739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:52:54.092 [DEBUG] [Thread-185739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:52:54.093 [INFO] [Thread-185739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:52:54.100 [DEBUG] [Thread-185739] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:52:54.100 [DEBUG] [Thread-185739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:52:54.101 [DEBUG] [Thread-185739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:52:54.101 [DEBUG] [Thread-185739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:52:54.101 [DEBUG] [Thread-185739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:52:54.101 [DEBUG] [Thread-185739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:52:54.101 [DEBUG] [Thread-185739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:52:54.101 [DEBUG] [Thread-185739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:52:54.101 [DEBUG] [Thread-185739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:52:54.101 [DEBUG] [Thread-185739] [transport.py] [_log()] client lang: <none>
2026-02-14T12:52:54.101 [DEBUG] [Thread-185739] [transport.py] [_log()] server lang: <none>
2026-02-14T12:52:54.101 [DEBUG] [Thread-185739] [transport.py] [_log()] kex follows: False
2026-02-14T12:52:54.101 [DEBUG] [Thread-185739] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:52:54.101 [DEBUG] [Thread-185739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:52:54.101 [DEBUG] [Thread-185739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:52:54.101 [DEBUG] [Thread-185739] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:52:54.101 [DEBUG] [Thread-185739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:52:54.101 [DEBUG] [Thread-185739] [transport.py] [_log()] Compression: none
2026-02-14T12:52:54.101 [DEBUG] [Thread-185739] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:52:54.158 [DEBUG] [Thread-185739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:52:54.159 [DEBUG] [Thread-185739] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:52:54.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:52:54.159 [DEBUG] [Thread-185739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:52:54.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:52:54.214 [DEBUG] [Thread-185739] [transport.py] [_log()] userauth is OK
2026-02-14T12:52:54.215 [DEBUG] [Thread-185739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:52:54.215 [DEBUG] [Thread-185739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:52:54.215 [DEBUG] [Thread-185739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:52:54.215 [DEBUG] [Thread-185739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:52:54.233 [INFO] [Thread-185739] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:52:54.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T12:52:54.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:52:55.044 [DEBUG] [Thread-185739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:52:55.044 [DEBUG] [Thread-185739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:52:55.093 [DEBUG] [Thread-185739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:52:55.093 [DEBUG] [Thread-185739] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:52:55.102 [DEBUG] [Thread-185739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:52:55.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:52:55.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-14T12:52:55.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-14T12:52:55.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:52:55.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:52:55.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:52:55.138 [DEBUG] [Thread-185739] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:53:00.077 [DEBUG] [Thread-185741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:53:15.138 [DEBUG] [Thread-185742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:53:22.595 [DEBUG] [Thread-185743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:53:24.922 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:53:24.923 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:53:25.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:53:25.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:53:25.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-14T12:53:27.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 52, 24), 12.11, 43.68, 0.0, 24.49, 14.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:53:27.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:52:24
2026-02-14T12:53:27.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:53:27.623 [DEBUG] [Thread-185744] [transport.py] [_log()] starting thread (client mode): 0xa2db67a0
2026-02-14T12:53:27.623 [DEBUG] [Thread-185744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:53:27.644 [DEBUG] [Thread-185744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:53:27.644 [INFO] [Thread-185744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:53:27.647 [DEBUG] [Thread-185744] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:53:27.647 [DEBUG] [Thread-185744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:53:27.647 [DEBUG] [Thread-185744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:53:27.647 [DEBUG] [Thread-185744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:53:27.647 [DEBUG] [Thread-185744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:53:27.647 [DEBUG] [Thread-185744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:53:27.647 [DEBUG] [Thread-185744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:53:27.647 [DEBUG] [Thread-185744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:53:27.647 [DEBUG] [Thread-185744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:53:27.647 [DEBUG] [Thread-185744] [transport.py] [_log()] client lang: <none>
2026-02-14T12:53:27.647 [DEBUG] [Thread-185744] [transport.py] [_log()] server lang: <none>
2026-02-14T12:53:27.647 [DEBUG] [Thread-185744] [transport.py] [_log()] kex follows: False
2026-02-14T12:53:27.648 [DEBUG] [Thread-185744] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:53:27.648 [DEBUG] [Thread-185744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:53:27.648 [DEBUG] [Thread-185744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:53:27.648 [DEBUG] [Thread-185744] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:53:27.648 [DEBUG] [Thread-185744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:53:27.648 [DEBUG] [Thread-185744] [transport.py] [_log()] Compression: none
2026-02-14T12:53:27.648 [DEBUG] [Thread-185744] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:53:27.667 [DEBUG] [Thread-185744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:53:27.667 [DEBUG] [Thread-185744] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:53:27.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:53:27.668 [DEBUG] [Thread-185744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:53:27.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:53:27.670 [DEBUG] [Thread-185744] [transport.py] [_log()] userauth is OK
2026-02-14T12:53:27.671 [DEBUG] [Thread-185744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:53:27.671 [DEBUG] [Thread-185744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:53:27.671 [DEBUG] [Thread-185744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:53:27.671 [DEBUG] [Thread-185744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:53:27.694 [INFO] [Thread-185744] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:53:27.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:53:28.513 [DEBUG] [Thread-185744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:53:28.513 [DEBUG] [Thread-185744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:53:28.514 [DEBUG] [Thread-185744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:53:28.554 [DEBUG] [Thread-185744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:53:28.555 [DEBUG] [Thread-185744] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:53:28.558 [DEBUG] [Thread-185744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:53:28.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:53:28.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:53:28.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:53:28.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:53:28.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:53:28.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:53:28.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:53:28.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:53:28.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:53:28.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.453582 -999.00  +14.70  28.53     48   +3.80 1 1 1 1 1   888    0 11.27 40.87 ----- 33.8 28.5 153.8 39.3 20.8 -24.7 19.7 -24.2 19.8 -23.6 20.9 -25.8
2026-02-14T12:53:28.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:53:28.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:53:28.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.453582
2026-02-14T12:53:28.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:53:28.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:53:28.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:53:28.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:53:28.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:53:28.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:52:24', tmtdew=12.11, humidity=43.68, cloud=0.0, wind=24.49, temperature=14.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:53:09.485', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:53:28.584 [DEBUG] [Thread-185744] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:53:28.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-14T12:53:28.680 [DEBUG] [Thread-185747] [transport.py] [_log()] starting thread (client mode): 0xa2d1bcd0
2026-02-14T12:53:28.680 [DEBUG] [Thread-185747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:53:28.695 [DEBUG] [Thread-185747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:53:28.695 [INFO] [Thread-185747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:53:28.702 [DEBUG] [Thread-185747] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:53:28.703 [DEBUG] [Thread-185747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:53:28.703 [DEBUG] [Thread-185747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:53:28.703 [DEBUG] [Thread-185747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:53:28.703 [DEBUG] [Thread-185747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:53:28.703 [DEBUG] [Thread-185747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:53:28.703 [DEBUG] [Thread-185747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:53:28.703 [DEBUG] [Thread-185747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:53:28.703 [DEBUG] [Thread-185747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:53:28.703 [DEBUG] [Thread-185747] [transport.py] [_log()] client lang: <none>
2026-02-14T12:53:28.703 [DEBUG] [Thread-185747] [transport.py] [_log()] server lang: <none>
2026-02-14T12:53:28.703 [DEBUG] [Thread-185747] [transport.py] [_log()] kex follows: False
2026-02-14T12:53:28.703 [DEBUG] [Thread-185747] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:53:28.703 [DEBUG] [Thread-185747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:53:28.703 [DEBUG] [Thread-185747] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:53:28.703 [DEBUG] [Thread-185747] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:53:28.703 [DEBUG] [Thread-185747] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:53:28.703 [DEBUG] [Thread-185747] [transport.py] [_log()] Compression: none
2026-02-14T12:53:28.704 [DEBUG] [Thread-185747] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:53:28.766 [DEBUG] [Thread-185747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:53:28.767 [DEBUG] [Thread-185747] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:53:28.767 [DEBUG] [Thread-185747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:53:28.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:53:28.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:53:28.823 [DEBUG] [Thread-185747] [transport.py] [_log()] userauth is OK
2026-02-14T12:53:28.823 [DEBUG] [Thread-185747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:53:28.823 [DEBUG] [Thread-185747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:53:28.824 [DEBUG] [Thread-185747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:53:28.824 [DEBUG] [Thread-185747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:53:28.844 [INFO] [Thread-185747] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:53: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-14T12:53:28.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:53:29.638 [DEBUG] [Thread-185747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:53:29.638 [DEBUG] [Thread-185747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:53:29.686 [DEBUG] [Thread-185747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:53:29.686 [DEBUG] [Thread-185747] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:53:29.695 [DEBUG] [Thread-185747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:53:29.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:53:29.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:53:29.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-14T12:53:29.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:53:29.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:53:29.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:53:29.732 [DEBUG] [Thread-185747] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:53:30.175 [DEBUG] [Thread-185749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:53:45.227 [DEBUG] [Thread-185750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:53:59.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:53:59.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:53:59.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-14T12:54:00.271 [DEBUG] [Thread-185751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:54:01.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 53, 35), 13.03, 41.4, 0.0, 30.66, 15.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:54:01.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:53:35
2026-02-14T12:54:01.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:54:02.157 [DEBUG] [Thread-185752] [transport.py] [_log()] starting thread (client mode): 0xa2db49a0
2026-02-14T12:54:02.157 [DEBUG] [Thread-185752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:54:02.173 [DEBUG] [Thread-185752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:54:02.173 [INFO] [Thread-185752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:54:02.176 [DEBUG] [Thread-185752] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:54:02.176 [DEBUG] [Thread-185752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:54:02.177 [DEBUG] [Thread-185752] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:54:02.177 [DEBUG] [Thread-185752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:54:02.177 [DEBUG] [Thread-185752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:54:02.177 [DEBUG] [Thread-185752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:54:02.177 [DEBUG] [Thread-185752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:54:02.177 [DEBUG] [Thread-185752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:54:02.177 [DEBUG] [Thread-185752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:54:02.177 [DEBUG] [Thread-185752] [transport.py] [_log()] client lang: <none>
2026-02-14T12:54:02.177 [DEBUG] [Thread-185752] [transport.py] [_log()] server lang: <none>
2026-02-14T12:54:02.177 [DEBUG] [Thread-185752] [transport.py] [_log()] kex follows: False
2026-02-14T12:54:02.177 [DEBUG] [Thread-185752] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:54:02.177 [DEBUG] [Thread-185752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:54:02.177 [DEBUG] [Thread-185752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:54:02.177 [DEBUG] [Thread-185752] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:54:02.177 [DEBUG] [Thread-185752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:54:02.177 [DEBUG] [Thread-185752] [transport.py] [_log()] Compression: none
2026-02-14T12:54:02.177 [DEBUG] [Thread-185752] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:54:02.193 [DEBUG] [Thread-185752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:54:02.193 [DEBUG] [Thread-185752] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:54:02.194 [DEBUG] [Thread-185752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:54:02.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:54:02.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:54:02.195 [DEBUG] [Thread-185752] [transport.py] [_log()] userauth is OK
2026-02-14T12:54:02.196 [DEBUG] [Thread-185752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:54:02.196 [DEBUG] [Thread-185752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:54:02.196 [DEBUG] [Thread-185752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:54:02.196 [DEBUG] [Thread-185752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:54:02.214 [INFO] [Thread-185752] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:54:02.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:54:02.823 [DEBUG] [Thread-185752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:54:02.823 [DEBUG] [Thread-185752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:54:02.823 [DEBUG] [Thread-185752] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:54:02.864 [DEBUG] [Thread-185752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:54:02.865 [DEBUG] [Thread-185752] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:54:02.867 [DEBUG] [Thread-185752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:54:02.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:54:02.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:54:02.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:54:02.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:54:02.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:54:02.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:54:02.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:54:02.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:54:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:54:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.453929 -999.00  +14.60  29.47     47   +3.70 1 1 1 1 1   888    0 11.48 47.36 ----- 17.0 29.5 135.0 40.5 20.9 -24.3 19.8 -23.7 19.8 -23.6 21.0 -23.6
2026-02-14T12:54:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:54:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:54:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.453929
2026-02-14T12:54:02.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:54:02.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:54:02.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:54:02.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:54:02.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:54:02.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:53:35', tmtdew=13.03, humidity=41.4, cloud=0.0, wind=30.66, temperature=15.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:53:39.466', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:54:02.891 [DEBUG] [Thread-185752] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:54:02.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-14T12:54:02.990 [DEBUG] [Thread-185755] [transport.py] [_log()] starting thread (client mode): 0xa2d3d600
2026-02-14T12:54:02.990 [DEBUG] [Thread-185755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:54:03.004 [DEBUG] [Thread-185755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:54:03.004 [INFO] [Thread-185755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:54:03.011 [DEBUG] [Thread-185755] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:54:03.012 [DEBUG] [Thread-185755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:54:03.012 [DEBUG] [Thread-185755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:54:03.012 [DEBUG] [Thread-185755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:54:03.012 [DEBUG] [Thread-185755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:54:03.012 [DEBUG] [Thread-185755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:54:03.012 [DEBUG] [Thread-185755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:54:03.012 [DEBUG] [Thread-185755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:54:03.012 [DEBUG] [Thread-185755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:54:03.012 [DEBUG] [Thread-185755] [transport.py] [_log()] client lang: <none>
2026-02-14T12:54:03.013 [DEBUG] [Thread-185755] [transport.py] [_log()] server lang: <none>
2026-02-14T12:54:03.013 [DEBUG] [Thread-185755] [transport.py] [_log()] kex follows: False
2026-02-14T12:54:03.013 [DEBUG] [Thread-185755] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:54:03.013 [DEBUG] [Thread-185755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:54:03.013 [DEBUG] [Thread-185755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:54:03.013 [DEBUG] [Thread-185755] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:54:03.013 [DEBUG] [Thread-185755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:54:03.013 [DEBUG] [Thread-185755] [transport.py] [_log()] Compression: none
2026-02-14T12:54:03.013 [DEBUG] [Thread-185755] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:54:03.070 [DEBUG] [Thread-185755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:54:03.070 [DEBUG] [Thread-185755] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:54:03.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:54:03.070 [DEBUG] [Thread-185755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:54:03.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:54:03.126 [DEBUG] [Thread-185755] [transport.py] [_log()] userauth is OK
2026-02-14T12:54:03.126 [DEBUG] [Thread-185755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:54:03.127 [DEBUG] [Thread-185755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:54:03.127 [DEBUG] [Thread-185755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:54:03.127 [DEBUG] [Thread-185755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:54:03.149 [INFO] [Thread-185755] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:54:03.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-14T12:54:03.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:54:03.954 [DEBUG] [Thread-185755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:54:03.954 [DEBUG] [Thread-185755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:54:04.002 [DEBUG] [Thread-185755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:54:04.003 [DEBUG] [Thread-185755] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:54:04.012 [DEBUG] [Thread-185755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:54:04.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:54:04.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-14T12:54:04.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:54:04.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:54:04.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:54:04.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:54:04.048 [DEBUG] [Thread-185755] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:54:15.310 [DEBUG] [Thread-185757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:54:22.640 [DEBUG] [Thread-185758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:54:25.062 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:54:25.064 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:54:30.372 [DEBUG] [Thread-185759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:54:34.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:54:34.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:54:34.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-14T12:54:35.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 54, 10), 12.99, 41.34, 0.0, 37.11, 14.89, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:54:35.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:54:10
2026-02-14T12:54:36.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:54:36.443 [DEBUG] [Thread-185760] [transport.py] [_log()] starting thread (client mode): 0xa2d3fee0
2026-02-14T12:54:36.443 [DEBUG] [Thread-185760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:54:36.463 [DEBUG] [Thread-185760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:54:36.463 [INFO] [Thread-185760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:54:36.466 [DEBUG] [Thread-185760] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:54:36.467 [DEBUG] [Thread-185760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:54:36.467 [DEBUG] [Thread-185760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:54:36.467 [DEBUG] [Thread-185760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:54:36.467 [DEBUG] [Thread-185760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:54:36.467 [DEBUG] [Thread-185760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:54:36.467 [DEBUG] [Thread-185760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:54:36.467 [DEBUG] [Thread-185760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:54:36.467 [DEBUG] [Thread-185760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:54:36.467 [DEBUG] [Thread-185760] [transport.py] [_log()] client lang: <none>
2026-02-14T12:54:36.467 [DEBUG] [Thread-185760] [transport.py] [_log()] server lang: <none>
2026-02-14T12:54:36.467 [DEBUG] [Thread-185760] [transport.py] [_log()] kex follows: False
2026-02-14T12:54:36.467 [DEBUG] [Thread-185760] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:54:36.468 [DEBUG] [Thread-185760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:54:36.468 [DEBUG] [Thread-185760] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:54:36.468 [DEBUG] [Thread-185760] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:54:36.468 [DEBUG] [Thread-185760] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:54:36.468 [DEBUG] [Thread-185760] [transport.py] [_log()] Compression: none
2026-02-14T12:54:36.468 [DEBUG] [Thread-185760] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:54:36.485 [DEBUG] [Thread-185760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:54:36.485 [DEBUG] [Thread-185760] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:54:36.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:54:36.487 [DEBUG] [Thread-185760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:54:36.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:54:36.529 [DEBUG] [Thread-185760] [transport.py] [_log()] userauth is OK
2026-02-14T12:54:36.529 [DEBUG] [Thread-185760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:54:36.529 [DEBUG] [Thread-185760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:54:36.529 [DEBUG] [Thread-185760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:54:36.529 [DEBUG] [Thread-185760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:54:36.560 [INFO] [Thread-185760] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:54:36.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:54:37.200 [DEBUG] [Thread-185760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:54:37.200 [DEBUG] [Thread-185760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:54:37.201 [DEBUG] [Thread-185760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:54:37.241 [DEBUG] [Thread-185760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:54:37.242 [DEBUG] [Thread-185760] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:54:37.245 [DEBUG] [Thread-185760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:54:37.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:54:37.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:54:37.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:54:37.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:54:37.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:54:37.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:54:37.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:54:37.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:54:37.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:54:37.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.454277 -999.00  +14.90  27.26     47   +3.80 1 1 1 1 1   888    0 11.60 46.89 ----- 27.9 27.3 166.8 36.6 20.9 -25.5 19.9 -24.9 19.9 -22.3 21.0 -25.2
2026-02-14T12:54:37.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:54:37.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:54:37.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.454277
2026-02-14T12:54:37.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:54:37.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:54:37.271 [DEBUG] [Thread-185760] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:54:37.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:54:37.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:54:37.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:54:37.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:54:10', tmtdew=12.99, humidity=41.34, cloud=0.0, wind=37.11, temperature=14.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:54:09.533', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:54:37.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-14T12:54:37.364 [DEBUG] [Thread-185763] [transport.py] [_log()] starting thread (client mode): 0xa575afe0
2026-02-14T12:54:37.364 [DEBUG] [Thread-185763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:54:37.379 [DEBUG] [Thread-185763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:54:37.379 [INFO] [Thread-185763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:54:37.386 [DEBUG] [Thread-185763] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:54:37.387 [DEBUG] [Thread-185763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:54:37.387 [DEBUG] [Thread-185763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:54:37.387 [DEBUG] [Thread-185763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:54:37.387 [DEBUG] [Thread-185763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:54:37.387 [DEBUG] [Thread-185763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:54:37.387 [DEBUG] [Thread-185763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:54:37.387 [DEBUG] [Thread-185763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:54:37.388 [DEBUG] [Thread-185763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:54:37.388 [DEBUG] [Thread-185763] [transport.py] [_log()] client lang: <none>
2026-02-14T12:54:37.388 [DEBUG] [Thread-185763] [transport.py] [_log()] server lang: <none>
2026-02-14T12:54:37.388 [DEBUG] [Thread-185763] [transport.py] [_log()] kex follows: False
2026-02-14T12:54:37.388 [DEBUG] [Thread-185763] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:54:37.388 [DEBUG] [Thread-185763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:54:37.388 [DEBUG] [Thread-185763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:54:37.388 [DEBUG] [Thread-185763] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:54:37.389 [DEBUG] [Thread-185763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:54:37.389 [DEBUG] [Thread-185763] [transport.py] [_log()] Compression: none
2026-02-14T12:54:37.389 [DEBUG] [Thread-185763] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:54:37.447 [DEBUG] [Thread-185763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:54:37.447 [DEBUG] [Thread-185763] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:54:37.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:54:37.448 [DEBUG] [Thread-185763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:54:37.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:54:37.503 [DEBUG] [Thread-185763] [transport.py] [_log()] userauth is OK
2026-02-14T12:54:37.503 [DEBUG] [Thread-185763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:54:37.503 [DEBUG] [Thread-185763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:54:37.503 [DEBUG] [Thread-185763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:54:37.504 [DEBUG] [Thread-185763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:54:37.522 [INFO] [Thread-185763] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:54: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-14T12:54:37.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:54:38.316 [DEBUG] [Thread-185763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:54:38.316 [DEBUG] [Thread-185763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:54:38.364 [DEBUG] [Thread-185763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:54:38.365 [DEBUG] [Thread-185763] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:54:38.374 [DEBUG] [Thread-185763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:54:38.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:54:38.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-14T12:54:38.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-14T12:54:38.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:54:38.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:54:38.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:54:38.411 [DEBUG] [Thread-185763] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:54:45.411 [DEBUG] [Thread-185765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:55:00.465 [DEBUG] [Thread-185766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:55:08.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:55:08.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:55:08.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:55:10.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 54, 46), 12.83, 42.09, 0.0, 31.18, 14.58, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:55:10.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:54:46
2026-02-14T12:55:10.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:55:10.916 [DEBUG] [Thread-185767] [transport.py] [_log()] starting thread (client mode): 0xa57413f0
2026-02-14T12:55:10.916 [DEBUG] [Thread-185767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:55:10.935 [DEBUG] [Thread-185767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:55:10.935 [INFO] [Thread-185767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:55:10.939 [DEBUG] [Thread-185767] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:55:10.939 [DEBUG] [Thread-185767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:55:10.939 [DEBUG] [Thread-185767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:55:10.939 [DEBUG] [Thread-185767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:55:10.939 [DEBUG] [Thread-185767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:55:10.939 [DEBUG] [Thread-185767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:55:10.939 [DEBUG] [Thread-185767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:55:10.939 [DEBUG] [Thread-185767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:55:10.939 [DEBUG] [Thread-185767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:55:10.939 [DEBUG] [Thread-185767] [transport.py] [_log()] client lang: <none>
2026-02-14T12:55:10.939 [DEBUG] [Thread-185767] [transport.py] [_log()] server lang: <none>
2026-02-14T12:55:10.939 [DEBUG] [Thread-185767] [transport.py] [_log()] kex follows: False
2026-02-14T12:55:10.939 [DEBUG] [Thread-185767] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:55:10.939 [DEBUG] [Thread-185767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:55:10.940 [DEBUG] [Thread-185767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:55:10.940 [DEBUG] [Thread-185767] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:55:10.940 [DEBUG] [Thread-185767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:55:10.940 [DEBUG] [Thread-185767] [transport.py] [_log()] Compression: none
2026-02-14T12:55:10.940 [DEBUG] [Thread-185767] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:55:10.956 [DEBUG] [Thread-185767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:55:10.956 [DEBUG] [Thread-185767] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:55:10.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:55:10.957 [DEBUG] [Thread-185767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:55:10.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:55:10.959 [DEBUG] [Thread-185767] [transport.py] [_log()] userauth is OK
2026-02-14T12:55:10.959 [DEBUG] [Thread-185767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:55:10.959 [DEBUG] [Thread-185767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:55:10.959 [DEBUG] [Thread-185767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:55:10.960 [DEBUG] [Thread-185767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:55:10.982 [INFO] [Thread-185767] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:55:10.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:55:15.499 [DEBUG] [Thread-185769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:55:17.059 [DEBUG] [Thread-185767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:55:17.059 [DEBUG] [Thread-185767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:55:17.060 [DEBUG] [Thread-185767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:55:17.100 [DEBUG] [Thread-185767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:55:17.101 [DEBUG] [Thread-185767] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:55:17.104 [DEBUG] [Thread-185767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:55:17.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:55:17.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:55:17.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:55:17.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:55:17.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:55:17.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:55:17.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:55:17.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:55:17.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:55:17.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.454624 -999.00  +14.40  26.66     48   +3.60 1 1 1 1 1   888    0 11.71 51.14 ----- 20.1 26.7 141.8 41.9 20.9 -24.0 19.8 -23.9 20.0 -22.8 21.0 -24.0
2026-02-14T12:55:17.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:55:17.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:55:17.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.454624
2026-02-14T12:55:17.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:55:17.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:55:17.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:55:17.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:55:17.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:55:17.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:54:46', tmtdew=12.83, humidity=42.09, cloud=0.0, wind=31.18, temperature=14.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:54:39.514', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:55:17.136 [DEBUG] [Thread-185767] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:55:17.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-14T12:55:17.228 [DEBUG] [Thread-185771] [transport.py] [_log()] starting thread (client mode): 0xa2d3fb50
2026-02-14T12:55:17.228 [DEBUG] [Thread-185771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:55:17.242 [DEBUG] [Thread-185771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:55:17.242 [INFO] [Thread-185771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:55:17.250 [DEBUG] [Thread-185771] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:55:17.250 [DEBUG] [Thread-185771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:55:17.250 [DEBUG] [Thread-185771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:55:17.250 [DEBUG] [Thread-185771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:55:17.250 [DEBUG] [Thread-185771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:55:17.250 [DEBUG] [Thread-185771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:55:17.250 [DEBUG] [Thread-185771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:55:17.250 [DEBUG] [Thread-185771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:55:17.250 [DEBUG] [Thread-185771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:55:17.250 [DEBUG] [Thread-185771] [transport.py] [_log()] client lang: <none>
2026-02-14T12:55:17.250 [DEBUG] [Thread-185771] [transport.py] [_log()] server lang: <none>
2026-02-14T12:55:17.250 [DEBUG] [Thread-185771] [transport.py] [_log()] kex follows: False
2026-02-14T12:55:17.250 [DEBUG] [Thread-185771] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:55:17.250 [DEBUG] [Thread-185771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:55:17.250 [DEBUG] [Thread-185771] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:55:17.250 [DEBUG] [Thread-185771] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:55:17.250 [DEBUG] [Thread-185771] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:55:17.251 [DEBUG] [Thread-185771] [transport.py] [_log()] Compression: none
2026-02-14T12:55:17.251 [DEBUG] [Thread-185771] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:55:17.306 [DEBUG] [Thread-185771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:55:17.307 [DEBUG] [Thread-185771] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:55:17.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:55:17.308 [DEBUG] [Thread-185771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:55:17.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:55:17.363 [DEBUG] [Thread-185771] [transport.py] [_log()] userauth is OK
2026-02-14T12:55:17.363 [DEBUG] [Thread-185771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:55:17.363 [DEBUG] [Thread-185771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:55:17.364 [DEBUG] [Thread-185771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:55:17.364 [DEBUG] [Thread-185771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:55:17.388 [INFO] [Thread-185771] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:55:17.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T12:55:17.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:55:18.167 [DEBUG] [Thread-185771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:55:18.167 [DEBUG] [Thread-185771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:55:18.215 [DEBUG] [Thread-185771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:55:18.215 [DEBUG] [Thread-185771] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:55:18.224 [DEBUG] [Thread-185771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:55:18.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:55: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')
2026-02-14T12:55:18.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-14T12:55:18.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:55:18.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:55:18.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:55:18.259 [DEBUG] [Thread-185771] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:55:22.675 [DEBUG] [Thread-185773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:55:25.207 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:55:25.208 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:55:30.536 [DEBUG] [Thread-185774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:55:45.590 [DEBUG] [Thread-185775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:55:48.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:55:48.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:55:48.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T12:55:50.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 55, 21), 12.83, 42.12, 0.0, 31.62, 14.73, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:55:50.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:55:21
2026-02-14T12:55:51.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:55:51.269 [DEBUG] [Thread-185776] [transport.py] [_log()] starting thread (client mode): 0xa2d1a560
2026-02-14T12:55:51.269 [DEBUG] [Thread-185776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:55:51.290 [DEBUG] [Thread-185776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:55:51.290 [INFO] [Thread-185776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:55:51.294 [DEBUG] [Thread-185776] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:55:51.294 [DEBUG] [Thread-185776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:55:51.294 [DEBUG] [Thread-185776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:55:51.294 [DEBUG] [Thread-185776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:55:51.294 [DEBUG] [Thread-185776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:55:51.294 [DEBUG] [Thread-185776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:55:51.294 [DEBUG] [Thread-185776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:55:51.294 [DEBUG] [Thread-185776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:55:51.294 [DEBUG] [Thread-185776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:55:51.295 [DEBUG] [Thread-185776] [transport.py] [_log()] client lang: <none>
2026-02-14T12:55:51.295 [DEBUG] [Thread-185776] [transport.py] [_log()] server lang: <none>
2026-02-14T12:55:51.295 [DEBUG] [Thread-185776] [transport.py] [_log()] kex follows: False
2026-02-14T12:55:51.295 [DEBUG] [Thread-185776] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:55:51.295 [DEBUG] [Thread-185776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:55:51.295 [DEBUG] [Thread-185776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:55:51.295 [DEBUG] [Thread-185776] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:55:51.295 [DEBUG] [Thread-185776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:55:51.295 [DEBUG] [Thread-185776] [transport.py] [_log()] Compression: none
2026-02-14T12:55:51.295 [DEBUG] [Thread-185776] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:55:51.313 [DEBUG] [Thread-185776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:55:51.314 [DEBUG] [Thread-185776] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:55:51.315 [DEBUG] [Thread-185776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:55:51.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:55:51.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:55:51.319 [DEBUG] [Thread-185776] [transport.py] [_log()] userauth is OK
2026-02-14T12:55:51.319 [DEBUG] [Thread-185776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:55:51.320 [DEBUG] [Thread-185776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:55:51.320 [DEBUG] [Thread-185776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:55:51.320 [DEBUG] [Thread-185776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:55:51.356 [INFO] [Thread-185776] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:55:51.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:55:51.973 [DEBUG] [Thread-185776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:55:51.973 [DEBUG] [Thread-185776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:55:51.973 [DEBUG] [Thread-185776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:55:52.014 [DEBUG] [Thread-185776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:55:52.014 [DEBUG] [Thread-185776] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:55:52.017 [DEBUG] [Thread-185776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:55:52.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:55:52.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:55:52.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:55:52.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:55:52.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:55:52.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:55:52.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:55:52.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:55:52.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:55:52.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.454624 -999.00  +14.40  26.66     48   +3.60 1 1 1 1 1   888    0 11.71 51.14 ----- 20.1 26.7 141.8 41.9 20.9 -24.0 19.8 -23.9 20.0 -22.8 21.0 -24.0
2026-02-14T12:55:52.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:55:52.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:55:52.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.454624
2026-02-14T12:55:52.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:55:52.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:55:52.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:55:52.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:55:52.045 [DEBUG] [Thread-185776] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:55:52.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:55:52.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:55:21', tmtdew=12.83, humidity=42.12, cloud=0.0, wind=31.62, temperature=14.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:54:39.514', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:55:52.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-14T12:55:52.142 [DEBUG] [Thread-185779] [transport.py] [_log()] starting thread (client mode): 0xa2d3e6e0
2026-02-14T12:55:52.142 [DEBUG] [Thread-185779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:55:52.157 [DEBUG] [Thread-185779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:55:52.157 [INFO] [Thread-185779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:55:52.164 [DEBUG] [Thread-185779] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:55:52.165 [DEBUG] [Thread-185779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:55:52.165 [DEBUG] [Thread-185779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:55:52.165 [DEBUG] [Thread-185779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:55:52.165 [DEBUG] [Thread-185779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:55:52.165 [DEBUG] [Thread-185779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:55:52.165 [DEBUG] [Thread-185779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:55:52.165 [DEBUG] [Thread-185779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:55:52.165 [DEBUG] [Thread-185779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:55:52.165 [DEBUG] [Thread-185779] [transport.py] [_log()] client lang: <none>
2026-02-14T12:55:52.165 [DEBUG] [Thread-185779] [transport.py] [_log()] server lang: <none>
2026-02-14T12:55:52.165 [DEBUG] [Thread-185779] [transport.py] [_log()] kex follows: False
2026-02-14T12:55:52.165 [DEBUG] [Thread-185779] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:55:52.165 [DEBUG] [Thread-185779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:55:52.165 [DEBUG] [Thread-185779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:55:52.165 [DEBUG] [Thread-185779] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:55:52.165 [DEBUG] [Thread-185779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:55:52.165 [DEBUG] [Thread-185779] [transport.py] [_log()] Compression: none
2026-02-14T12:55:52.166 [DEBUG] [Thread-185779] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:55:52.223 [DEBUG] [Thread-185779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:55:52.224 [DEBUG] [Thread-185779] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:55:52.225 [DEBUG] [Thread-185779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:55:52.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:55:52.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:55:52.278 [DEBUG] [Thread-185779] [transport.py] [_log()] userauth is OK
2026-02-14T12:55:52.278 [DEBUG] [Thread-185779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:55:52.279 [DEBUG] [Thread-185779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:55:52.279 [DEBUG] [Thread-185779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:55:52.279 [DEBUG] [Thread-185779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:55:52.294 [INFO] [Thread-185779] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:55: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-14T12:55:52.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:55:53.087 [DEBUG] [Thread-185779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:55:53.088 [DEBUG] [Thread-185779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:55:53.135 [DEBUG] [Thread-185779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:55:53.135 [DEBUG] [Thread-185779] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:55:53.144 [DEBUG] [Thread-185779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:55:53.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:55:53.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:55:53.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-14T12:55:53.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:55:53.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:55:53.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:55:53.177 [DEBUG] [Thread-185779] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:56:00.628 [DEBUG] [Thread-185781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:56:15.688 [DEBUG] [Thread-185782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:56:22.708 [DEBUG] [Thread-185783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:56:23.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:56:23.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:56:23.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-14T12:56:25.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 55, 56), 12.89, 41.74, 0.0, 29.34, 15.19, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:56:25.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:55:56
2026-02-14T12:56:25.349 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:56:25.351 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:56:25.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:56:25.665 [DEBUG] [Thread-185784] [transport.py] [_log()] starting thread (client mode): 0xa2ddff40
2026-02-14T12:56:25.665 [DEBUG] [Thread-185784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:56:25.686 [DEBUG] [Thread-185784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:56:25.686 [INFO] [Thread-185784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:56:25.690 [DEBUG] [Thread-185784] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:56:25.690 [DEBUG] [Thread-185784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:56:25.690 [DEBUG] [Thread-185784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:56:25.690 [DEBUG] [Thread-185784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:56:25.690 [DEBUG] [Thread-185784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:56:25.690 [DEBUG] [Thread-185784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:56:25.690 [DEBUG] [Thread-185784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:56:25.690 [DEBUG] [Thread-185784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:56:25.690 [DEBUG] [Thread-185784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:56:25.690 [DEBUG] [Thread-185784] [transport.py] [_log()] client lang: <none>
2026-02-14T12:56:25.690 [DEBUG] [Thread-185784] [transport.py] [_log()] server lang: <none>
2026-02-14T12:56:25.690 [DEBUG] [Thread-185784] [transport.py] [_log()] kex follows: False
2026-02-14T12:56:25.690 [DEBUG] [Thread-185784] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:56:25.690 [DEBUG] [Thread-185784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:56:25.690 [DEBUG] [Thread-185784] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:56:25.690 [DEBUG] [Thread-185784] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:56:25.690 [DEBUG] [Thread-185784] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:56:25.690 [DEBUG] [Thread-185784] [transport.py] [_log()] Compression: none
2026-02-14T12:56:25.690 [DEBUG] [Thread-185784] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:56:25.707 [DEBUG] [Thread-185784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:56:25.708 [DEBUG] [Thread-185784] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:56:25.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:56:25.709 [DEBUG] [Thread-185784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:56:25.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:56:25.711 [DEBUG] [Thread-185784] [transport.py] [_log()] userauth is OK
2026-02-14T12:56:25.711 [DEBUG] [Thread-185784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:56:25.712 [DEBUG] [Thread-185784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:56:25.712 [DEBUG] [Thread-185784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:56:25.712 [DEBUG] [Thread-185784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:56:25.735 [INFO] [Thread-185784] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:56:25.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:56:26.383 [DEBUG] [Thread-185784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:56:26.384 [DEBUG] [Thread-185784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:56:26.384 [DEBUG] [Thread-185784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:56:26.424 [DEBUG] [Thread-185784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:56:26.425 [DEBUG] [Thread-185784] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:56:26.428 [DEBUG] [Thread-185784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:56:26.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:56:26.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:56:26.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:56:26.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:56:26.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:56:26.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:56:26.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:56:26.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:56:26.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:56:26.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.454624 -999.00  +14.40  26.66     48   +3.60 1 1 1 1 1   888    0 11.71 51.14 ----- 20.1 26.7 141.8 41.9 20.9 -24.0 19.8 -23.9 20.0 -22.8 21.0 -24.0
2026-02-14T12:56:26.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:56:26.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:56:26.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.454624
2026-02-14T12:56:26.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:56:26.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:56:26.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:56:26.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:56:26.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:56:26.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:55:56', tmtdew=12.89, humidity=41.74, cloud=0.0, wind=29.34, temperature=15.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:54:39.514', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:56:26.455 [DEBUG] [Thread-185784] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:56:26.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-14T12:56:26.551 [DEBUG] [Thread-185787] [transport.py] [_log()] starting thread (client mode): 0xa2d20400
2026-02-14T12:56:26.551 [DEBUG] [Thread-185787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:56:26.565 [DEBUG] [Thread-185787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:56:26.565 [INFO] [Thread-185787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:56:26.573 [DEBUG] [Thread-185787] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:56:26.573 [DEBUG] [Thread-185787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:56:26.574 [DEBUG] [Thread-185787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:56:26.574 [DEBUG] [Thread-185787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:56:26.574 [DEBUG] [Thread-185787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:56:26.574 [DEBUG] [Thread-185787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:56:26.574 [DEBUG] [Thread-185787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:56:26.574 [DEBUG] [Thread-185787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:56:26.574 [DEBUG] [Thread-185787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:56:26.574 [DEBUG] [Thread-185787] [transport.py] [_log()] client lang: <none>
2026-02-14T12:56:26.574 [DEBUG] [Thread-185787] [transport.py] [_log()] server lang: <none>
2026-02-14T12:56:26.574 [DEBUG] [Thread-185787] [transport.py] [_log()] kex follows: False
2026-02-14T12:56:26.574 [DEBUG] [Thread-185787] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:56:26.574 [DEBUG] [Thread-185787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:56:26.574 [DEBUG] [Thread-185787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:56:26.574 [DEBUG] [Thread-185787] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:56:26.574 [DEBUG] [Thread-185787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:56:26.574 [DEBUG] [Thread-185787] [transport.py] [_log()] Compression: none
2026-02-14T12:56:26.574 [DEBUG] [Thread-185787] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:56:26.631 [DEBUG] [Thread-185787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:56:26.632 [DEBUG] [Thread-185787] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:56:26.632 [DEBUG] [Thread-185787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:56:26.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:56:26.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:56:26.694 [DEBUG] [Thread-185787] [transport.py] [_log()] userauth is OK
2026-02-14T12:56:26.694 [DEBUG] [Thread-185787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:56:26.694 [DEBUG] [Thread-185787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:56:26.694 [DEBUG] [Thread-185787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:56:26.694 [DEBUG] [Thread-185787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:56:26.713 [INFO] [Thread-185787] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:56:26.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-14T12:56:26.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:56:27.522 [DEBUG] [Thread-185787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:56:27.522 [DEBUG] [Thread-185787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:56:27.573 [DEBUG] [Thread-185787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:56:27.574 [DEBUG] [Thread-185787] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:56:27.585 [DEBUG] [Thread-185787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:56:27.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:56:27.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')
2026-02-14T12:56:27.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-14T12:56:27.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:56:27.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:56:27.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:56:27.624 [DEBUG] [Thread-185787] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:56:30.729 [DEBUG] [Thread-185789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:56:45.787 [DEBUG] [Thread-185790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:56:57.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:56:57.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:56:57.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-14T12:56:59.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 56, 32), 12.75, 42.08, 0.0, 30.38, 15.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:56:59.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:56:32
2026-02-14T12:57:00.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:57:00.166 [DEBUG] [Thread-185791] [transport.py] [_log()] starting thread (client mode): 0xa2d199c0
2026-02-14T12:57:00.167 [DEBUG] [Thread-185791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:57:00.186 [DEBUG] [Thread-185791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:57:00.186 [INFO] [Thread-185791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:57:00.189 [DEBUG] [Thread-185791] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:57:00.189 [DEBUG] [Thread-185791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:57:00.189 [DEBUG] [Thread-185791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:57:00.189 [DEBUG] [Thread-185791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:57:00.189 [DEBUG] [Thread-185791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:57:00.190 [DEBUG] [Thread-185791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:57:00.190 [DEBUG] [Thread-185791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:57:00.190 [DEBUG] [Thread-185791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:57:00.190 [DEBUG] [Thread-185791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:57:00.190 [DEBUG] [Thread-185791] [transport.py] [_log()] client lang: <none>
2026-02-14T12:57:00.190 [DEBUG] [Thread-185791] [transport.py] [_log()] server lang: <none>
2026-02-14T12:57:00.190 [DEBUG] [Thread-185791] [transport.py] [_log()] kex follows: False
2026-02-14T12:57:00.190 [DEBUG] [Thread-185791] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:57:00.190 [DEBUG] [Thread-185791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:57:00.190 [DEBUG] [Thread-185791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:57:00.190 [DEBUG] [Thread-185791] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:57:00.190 [DEBUG] [Thread-185791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:57:00.190 [DEBUG] [Thread-185791] [transport.py] [_log()] Compression: none
2026-02-14T12:57:00.190 [DEBUG] [Thread-185791] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:57:00.209 [DEBUG] [Thread-185791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:57:00.209 [DEBUG] [Thread-185791] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:57:00.210 [DEBUG] [Thread-185791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:57:00.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:57:00.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:57:00.212 [DEBUG] [Thread-185791] [transport.py] [_log()] userauth is OK
2026-02-14T12:57:00.212 [DEBUG] [Thread-185791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:57:00.212 [DEBUG] [Thread-185791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:57:00.212 [DEBUG] [Thread-185791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:57:00.212 [DEBUG] [Thread-185791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:57:00.236 [INFO] [Thread-185791] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:57:00.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:57:00.827 [DEBUG] [Thread-185793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:57:00.861 [DEBUG] [Thread-185791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:57:00.861 [DEBUG] [Thread-185791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:57:00.862 [DEBUG] [Thread-185791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:57:00.902 [DEBUG] [Thread-185791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:57:00.903 [DEBUG] [Thread-185791] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:57:00.906 [DEBUG] [Thread-185791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:57:00.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:57:00.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:57:00.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:57:00.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:57:00.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:57:00.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:57:00.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:57:00.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:57:00.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:57:00.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.454624 -999.00  +14.40  26.66     48   +3.60 1 1 1 1 1   888    0 11.71 51.14 ----- 20.1 26.7 141.8 41.9 20.9 -24.0 19.8 -23.9 20.0 -22.8 21.0 -24.0
2026-02-14T12:57:00.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:57:00.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:57:00.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.454624
2026-02-14T12:57:00.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:57:00.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:57:00.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:57:00.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:57:00.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:57:00.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:56:32', tmtdew=12.75, humidity=42.08, cloud=0.0, wind=30.38, temperature=15.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:54:39.514', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:57:00.932 [DEBUG] [Thread-185791] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:57: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-14T12:57:01.027 [DEBUG] [Thread-185795] [transport.py] [_log()] starting thread (client mode): 0xa5743fd0
2026-02-14T12:57:01.027 [DEBUG] [Thread-185795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:57:01.042 [DEBUG] [Thread-185795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:57:01.042 [INFO] [Thread-185795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:57:01.050 [DEBUG] [Thread-185795] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:57:01.050 [DEBUG] [Thread-185795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:57:01.050 [DEBUG] [Thread-185795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:57:01.050 [DEBUG] [Thread-185795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:57:01.050 [DEBUG] [Thread-185795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:57:01.050 [DEBUG] [Thread-185795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:57:01.050 [DEBUG] [Thread-185795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:57:01.050 [DEBUG] [Thread-185795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:57:01.050 [DEBUG] [Thread-185795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:57:01.050 [DEBUG] [Thread-185795] [transport.py] [_log()] client lang: <none>
2026-02-14T12:57:01.050 [DEBUG] [Thread-185795] [transport.py] [_log()] server lang: <none>
2026-02-14T12:57:01.050 [DEBUG] [Thread-185795] [transport.py] [_log()] kex follows: False
2026-02-14T12:57:01.050 [DEBUG] [Thread-185795] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:57:01.050 [DEBUG] [Thread-185795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:57:01.051 [DEBUG] [Thread-185795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:57:01.051 [DEBUG] [Thread-185795] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:57:01.051 [DEBUG] [Thread-185795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:57:01.051 [DEBUG] [Thread-185795] [transport.py] [_log()] Compression: none
2026-02-14T12:57:01.051 [DEBUG] [Thread-185795] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:57:01.107 [DEBUG] [Thread-185795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:57:01.107 [DEBUG] [Thread-185795] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:57:01.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:57:01.109 [DEBUG] [Thread-185795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:57:01.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:57:01.163 [DEBUG] [Thread-185795] [transport.py] [_log()] userauth is OK
2026-02-14T12:57:01.163 [DEBUG] [Thread-185795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:57:01.164 [DEBUG] [Thread-185795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:57:01.164 [DEBUG] [Thread-185795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:57:01.164 [DEBUG] [Thread-185795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:57:01.182 [INFO] [Thread-185795] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:57:01.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-14T12:57:01.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:57:02.009 [DEBUG] [Thread-185795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:57:02.009 [DEBUG] [Thread-185795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:57:02.057 [DEBUG] [Thread-185795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:57:02.058 [DEBUG] [Thread-185795] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:57:02.067 [DEBUG] [Thread-185795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:57:02.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:57:02.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-14T12:57:02.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-14T12:57:02.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:57:02.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:57:02.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:57:02.103 [DEBUG] [Thread-185795] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:57:15.870 [DEBUG] [Thread-185797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:57:22.750 [DEBUG] [Thread-185798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:57:25.492 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:57:25.493 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:57:30.918 [DEBUG] [Thread-185799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:57:32.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:57:32.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:57:32.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-14T12:57:34.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 57, 7), 12.6, 42.52, 0.0, 32.73, 15.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:57:34.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:57:07
2026-02-14T12:57:35.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:57:35.166 [DEBUG] [Thread-185800] [transport.py] [_log()] starting thread (client mode): 0xa2dc1ea0
2026-02-14T12:57:35.166 [DEBUG] [Thread-185800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:57:35.186 [DEBUG] [Thread-185800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:57:35.186 [INFO] [Thread-185800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:57:35.189 [DEBUG] [Thread-185800] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:57:35.189 [DEBUG] [Thread-185800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:57:35.190 [DEBUG] [Thread-185800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:57:35.190 [DEBUG] [Thread-185800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:57:35.190 [DEBUG] [Thread-185800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:57:35.190 [DEBUG] [Thread-185800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:57:35.190 [DEBUG] [Thread-185800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:57:35.190 [DEBUG] [Thread-185800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:57:35.190 [DEBUG] [Thread-185800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:57:35.190 [DEBUG] [Thread-185800] [transport.py] [_log()] client lang: <none>
2026-02-14T12:57:35.190 [DEBUG] [Thread-185800] [transport.py] [_log()] server lang: <none>
2026-02-14T12:57:35.190 [DEBUG] [Thread-185800] [transport.py] [_log()] kex follows: False
2026-02-14T12:57:35.190 [DEBUG] [Thread-185800] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:57:35.190 [DEBUG] [Thread-185800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:57:35.190 [DEBUG] [Thread-185800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:57:35.190 [DEBUG] [Thread-185800] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:57:35.190 [DEBUG] [Thread-185800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:57:35.190 [DEBUG] [Thread-185800] [transport.py] [_log()] Compression: none
2026-02-14T12:57:35.190 [DEBUG] [Thread-185800] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:57:35.208 [DEBUG] [Thread-185800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:57:35.209 [DEBUG] [Thread-185800] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:57:35.209 [DEBUG] [Thread-185800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:57:35.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:57:35.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:57:35.212 [DEBUG] [Thread-185800] [transport.py] [_log()] userauth is OK
2026-02-14T12:57:35.212 [DEBUG] [Thread-185800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:57:35.212 [DEBUG] [Thread-185800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:57:35.212 [DEBUG] [Thread-185800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:57:35.212 [DEBUG] [Thread-185800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:57:35.237 [INFO] [Thread-185800] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:57:35.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:57:35.899 [DEBUG] [Thread-185800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:57:35.899 [DEBUG] [Thread-185800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:57:35.900 [DEBUG] [Thread-185800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:57:35.940 [DEBUG] [Thread-185800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:57:35.941 [DEBUG] [Thread-185800] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:57:35.944 [DEBUG] [Thread-185800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:57:35.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:57:35.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:57:35.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:57:35.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:57:35.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:57:35.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:57:35.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:57:35.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:57:35.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:57:35.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.454624 -999.00  +14.40  26.66     48   +3.60 1 1 1 1 1   888    0 11.71 51.14 ----- 20.1 26.7 141.8 41.9 20.9 -24.0 19.8 -23.9 20.0 -22.8 21.0 -24.0
2026-02-14T12:57:35.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:57:35.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:57:35.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.454624
2026-02-14T12:57:35.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:57:35.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:57:35.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:57:35.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:57:35.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:57:35.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:57:07', tmtdew=12.6, humidity=42.52, cloud=0.0, wind=32.73, temperature=15.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:54:39.514', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:57:35.974 [DEBUG] [Thread-185800] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:57:36.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-14T12:57:36.072 [DEBUG] [Thread-185803] [transport.py] [_log()] starting thread (client mode): 0xa2dc1ba0
2026-02-14T12:57:36.073 [DEBUG] [Thread-185803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:57:36.090 [DEBUG] [Thread-185803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:57:36.091 [INFO] [Thread-185803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:57:36.101 [DEBUG] [Thread-185803] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:57:36.101 [DEBUG] [Thread-185803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:57:36.101 [DEBUG] [Thread-185803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:57:36.101 [DEBUG] [Thread-185803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:57:36.101 [DEBUG] [Thread-185803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:57:36.101 [DEBUG] [Thread-185803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:57:36.101 [DEBUG] [Thread-185803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:57:36.102 [DEBUG] [Thread-185803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:57:36.102 [DEBUG] [Thread-185803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:57:36.102 [DEBUG] [Thread-185803] [transport.py] [_log()] client lang: <none>
2026-02-14T12:57:36.102 [DEBUG] [Thread-185803] [transport.py] [_log()] server lang: <none>
2026-02-14T12:57:36.102 [DEBUG] [Thread-185803] [transport.py] [_log()] kex follows: False
2026-02-14T12:57:36.102 [DEBUG] [Thread-185803] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:57:36.102 [DEBUG] [Thread-185803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:57:36.102 [DEBUG] [Thread-185803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:57:36.102 [DEBUG] [Thread-185803] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:57:36.102 [DEBUG] [Thread-185803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:57:36.102 [DEBUG] [Thread-185803] [transport.py] [_log()] Compression: none
2026-02-14T12:57:36.102 [DEBUG] [Thread-185803] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:57:36.165 [DEBUG] [Thread-185803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:57:36.166 [DEBUG] [Thread-185803] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:57:36.166 [DEBUG] [Thread-185803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:57:36.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:57:36.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:57:36.223 [DEBUG] [Thread-185803] [transport.py] [_log()] userauth is OK
2026-02-14T12:57:36.224 [DEBUG] [Thread-185803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:57:36.224 [DEBUG] [Thread-185803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:57:36.224 [DEBUG] [Thread-185803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:57:36.224 [DEBUG] [Thread-185803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:57:36.242 [INFO] [Thread-185803] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:57:36.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-14T12:57:36.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:57:37.071 [DEBUG] [Thread-185803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:57:37.072 [DEBUG] [Thread-185803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:57:37.119 [DEBUG] [Thread-185803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:57:37.120 [DEBUG] [Thread-185803] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:57:37.129 [DEBUG] [Thread-185803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:57:37.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:57:37.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T12:57:37.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:57:37.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:57:37.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:57:37.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:57:37.166 [DEBUG] [Thread-185803] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:57:45.955 [DEBUG] [Thread-185805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:58:01.006 [DEBUG] [Thread-185806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:58:07.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:58:07.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:58:07.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-14T12:58:09.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 57, 43), 12.77, 41.9, 0.0, 29.03, 14.78, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:58:09.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:57:43
2026-02-14T12:58:10.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:58:10.304 [DEBUG] [Thread-185807] [transport.py] [_log()] starting thread (client mode): 0xa5759c30
2026-02-14T12:58:10.304 [DEBUG] [Thread-185807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:58:10.326 [DEBUG] [Thread-185807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:58:10.326 [INFO] [Thread-185807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:58:10.329 [DEBUG] [Thread-185807] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:58:10.329 [DEBUG] [Thread-185807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:58:10.329 [DEBUG] [Thread-185807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:58:10.329 [DEBUG] [Thread-185807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:58:10.329 [DEBUG] [Thread-185807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:58:10.329 [DEBUG] [Thread-185807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:58:10.329 [DEBUG] [Thread-185807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:58:10.329 [DEBUG] [Thread-185807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:58:10.329 [DEBUG] [Thread-185807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:58:10.329 [DEBUG] [Thread-185807] [transport.py] [_log()] client lang: <none>
2026-02-14T12:58:10.329 [DEBUG] [Thread-185807] [transport.py] [_log()] server lang: <none>
2026-02-14T12:58:10.329 [DEBUG] [Thread-185807] [transport.py] [_log()] kex follows: False
2026-02-14T12:58:10.330 [DEBUG] [Thread-185807] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:58:10.330 [DEBUG] [Thread-185807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:58:10.330 [DEBUG] [Thread-185807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:58:10.330 [DEBUG] [Thread-185807] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:58:10.330 [DEBUG] [Thread-185807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:58:10.330 [DEBUG] [Thread-185807] [transport.py] [_log()] Compression: none
2026-02-14T12:58:10.330 [DEBUG] [Thread-185807] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:58:10.346 [DEBUG] [Thread-185807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:58:10.347 [DEBUG] [Thread-185807] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:58:10.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:58:10.348 [DEBUG] [Thread-185807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:58:10.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:58:10.350 [DEBUG] [Thread-185807] [transport.py] [_log()] userauth is OK
2026-02-14T12:58:10.350 [DEBUG] [Thread-185807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:58:10.350 [DEBUG] [Thread-185807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:58:10.350 [DEBUG] [Thread-185807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:58:10.351 [DEBUG] [Thread-185807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:58:10.368 [INFO] [Thread-185807] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:58:10.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:58:10.972 [DEBUG] [Thread-185807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:58:10.972 [DEBUG] [Thread-185807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:58:10.973 [DEBUG] [Thread-185807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:58:11.013 [DEBUG] [Thread-185807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:58:11.013 [DEBUG] [Thread-185807] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:58:11.017 [DEBUG] [Thread-185807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:58:11.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:58:11.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:58:11.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:58:11.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:58:11.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:58:11.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:58:11.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:58:11.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:58:11.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:58:11.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.454624 -999.00  +14.40  26.66     48   +3.60 1 1 1 1 1   888    0 11.71 51.14 ----- 20.1 26.7 141.8 41.9 20.9 -24.0 19.8 -23.9 20.0 -22.8 21.0 -24.0
2026-02-14T12:58:11.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:58:11.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:58:11.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.454624
2026-02-14T12:58:11.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:58:11.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:58:11.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:58:11.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:58:11.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:58:11.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:57:43', tmtdew=12.77, humidity=41.9, cloud=0.0, wind=29.03, temperature=14.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:54:39.514', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:58:11.045 [DEBUG] [Thread-185807] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:58:11.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-14T12:58:11.140 [DEBUG] [Thread-185810] [transport.py] [_log()] starting thread (client mode): 0xa575bcd0
2026-02-14T12:58:11.140 [DEBUG] [Thread-185810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:58:11.155 [DEBUG] [Thread-185810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:58:11.155 [INFO] [Thread-185810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:58:11.162 [DEBUG] [Thread-185810] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:58:11.162 [DEBUG] [Thread-185810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:58:11.162 [DEBUG] [Thread-185810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:58:11.162 [DEBUG] [Thread-185810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:58:11.162 [DEBUG] [Thread-185810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:58:11.162 [DEBUG] [Thread-185810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:58:11.162 [DEBUG] [Thread-185810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:58:11.162 [DEBUG] [Thread-185810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:58:11.162 [DEBUG] [Thread-185810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:58:11.162 [DEBUG] [Thread-185810] [transport.py] [_log()] client lang: <none>
2026-02-14T12:58:11.163 [DEBUG] [Thread-185810] [transport.py] [_log()] server lang: <none>
2026-02-14T12:58:11.163 [DEBUG] [Thread-185810] [transport.py] [_log()] kex follows: False
2026-02-14T12:58:11.163 [DEBUG] [Thread-185810] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:58:11.163 [DEBUG] [Thread-185810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:58:11.163 [DEBUG] [Thread-185810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:58:11.163 [DEBUG] [Thread-185810] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:58:11.163 [DEBUG] [Thread-185810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:58:11.163 [DEBUG] [Thread-185810] [transport.py] [_log()] Compression: none
2026-02-14T12:58:11.163 [DEBUG] [Thread-185810] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:58:11.219 [DEBUG] [Thread-185810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:58:11.220 [DEBUG] [Thread-185810] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:58:11.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:58:11.221 [DEBUG] [Thread-185810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:58:11.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:58:11.276 [DEBUG] [Thread-185810] [transport.py] [_log()] userauth is OK
2026-02-14T12:58:11.276 [DEBUG] [Thread-185810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:58:11.276 [DEBUG] [Thread-185810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:58:11.276 [DEBUG] [Thread-185810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:58:11.277 [DEBUG] [Thread-185810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:58:11.295 [INFO] [Thread-185810] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:58:11.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-14T12:58:11.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:58:12.090 [DEBUG] [Thread-185810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:58:12.091 [DEBUG] [Thread-185810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:58:12.138 [DEBUG] [Thread-185810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:58:12.138 [DEBUG] [Thread-185810] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:58:12.148 [DEBUG] [Thread-185810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:58:12.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:58:12.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-14T12:58:12.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T12:58:12.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:58:12.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:58:12.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:58:12.189 [DEBUG] [Thread-185810] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:58:16.043 [DEBUG] [Thread-185812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:58:22.791 [DEBUG] [Thread-185813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:58:25.634 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:58:25.636 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:58:31.096 [DEBUG] [Thread-185814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:58:42.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:58:42.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:58:42.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-14T12:58:44.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 58, 18), 13.08, 41.17, 0.0, 33.84, 15.24, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:58:44.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:58:18
2026-02-14T12:58:44.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:58:44.623 [DEBUG] [Thread-185815] [transport.py] [_log()] starting thread (client mode): 0xa575af50
2026-02-14T12:58:44.623 [DEBUG] [Thread-185815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:58:44.643 [DEBUG] [Thread-185815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:58:44.644 [INFO] [Thread-185815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:58:44.647 [DEBUG] [Thread-185815] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:58:44.647 [DEBUG] [Thread-185815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:58:44.647 [DEBUG] [Thread-185815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:58:44.647 [DEBUG] [Thread-185815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:58:44.647 [DEBUG] [Thread-185815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:58:44.647 [DEBUG] [Thread-185815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:58:44.647 [DEBUG] [Thread-185815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:58:44.647 [DEBUG] [Thread-185815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:58:44.647 [DEBUG] [Thread-185815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:58:44.647 [DEBUG] [Thread-185815] [transport.py] [_log()] client lang: <none>
2026-02-14T12:58:44.647 [DEBUG] [Thread-185815] [transport.py] [_log()] server lang: <none>
2026-02-14T12:58:44.647 [DEBUG] [Thread-185815] [transport.py] [_log()] kex follows: False
2026-02-14T12:58:44.648 [DEBUG] [Thread-185815] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:58:44.648 [DEBUG] [Thread-185815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:58:44.648 [DEBUG] [Thread-185815] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:58:44.648 [DEBUG] [Thread-185815] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:58:44.648 [DEBUG] [Thread-185815] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:58:44.648 [DEBUG] [Thread-185815] [transport.py] [_log()] Compression: none
2026-02-14T12:58:44.648 [DEBUG] [Thread-185815] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:58:44.664 [DEBUG] [Thread-185815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:58:44.664 [DEBUG] [Thread-185815] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:58:44.665 [DEBUG] [Thread-185815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:58:44.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:58:44.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:58:44.709 [DEBUG] [Thread-185815] [transport.py] [_log()] userauth is OK
2026-02-14T12:58:44.709 [DEBUG] [Thread-185815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:58:44.709 [DEBUG] [Thread-185815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:58:44.710 [DEBUG] [Thread-185815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:58:44.710 [DEBUG] [Thread-185815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:58:44.746 [INFO] [Thread-185815] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:58:44.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:58:45.390 [DEBUG] [Thread-185815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:58:45.390 [DEBUG] [Thread-185815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:58:45.390 [DEBUG] [Thread-185815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:58:45.431 [DEBUG] [Thread-185815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:58:45.432 [DEBUG] [Thread-185815] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:58:45.435 [DEBUG] [Thread-185815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:58:45.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:58:45.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:58:45.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:58:45.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:58:45.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:58:45.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:58:45.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:58:45.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:58:45.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:58:45.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.454624 -999.00  +14.40  26.66     48   +3.60 1 1 1 1 1   888    0 11.71 51.14 ----- 20.1 26.7 141.8 41.9 20.9 -24.0 19.8 -23.9 20.0 -22.8 21.0 -24.0
2026-02-14T12:58:45.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:58:45.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:58:45.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.454624
2026-02-14T12:58:45.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:58:45.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:58:45.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:58:45.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:58:45.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:58:45.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:58:18', tmtdew=13.08, humidity=41.17, cloud=0.0, wind=33.84, temperature=15.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:54:39.514', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:58:45.463 [DEBUG] [Thread-185815] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:58:45.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-14T12:58:45.556 [DEBUG] [Thread-185818] [transport.py] [_log()] starting thread (client mode): 0xa2d23940
2026-02-14T12:58:45.556 [DEBUG] [Thread-185818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:58:45.572 [DEBUG] [Thread-185818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:58:45.572 [INFO] [Thread-185818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:58:45.580 [DEBUG] [Thread-185818] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:58:45.580 [DEBUG] [Thread-185818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:58:45.580 [DEBUG] [Thread-185818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:58:45.580 [DEBUG] [Thread-185818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:58:45.580 [DEBUG] [Thread-185818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:58:45.580 [DEBUG] [Thread-185818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:58:45.581 [DEBUG] [Thread-185818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:58:45.581 [DEBUG] [Thread-185818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:58:45.581 [DEBUG] [Thread-185818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:58:45.581 [DEBUG] [Thread-185818] [transport.py] [_log()] client lang: <none>
2026-02-14T12:58:45.581 [DEBUG] [Thread-185818] [transport.py] [_log()] server lang: <none>
2026-02-14T12:58:45.581 [DEBUG] [Thread-185818] [transport.py] [_log()] kex follows: False
2026-02-14T12:58:45.581 [DEBUG] [Thread-185818] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:58:45.581 [DEBUG] [Thread-185818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:58:45.582 [DEBUG] [Thread-185818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:58:45.582 [DEBUG] [Thread-185818] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:58:45.582 [DEBUG] [Thread-185818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:58:45.582 [DEBUG] [Thread-185818] [transport.py] [_log()] Compression: none
2026-02-14T12:58:45.582 [DEBUG] [Thread-185818] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:58:45.640 [DEBUG] [Thread-185818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:58:45.641 [DEBUG] [Thread-185818] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:58:45.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:58:45.642 [DEBUG] [Thread-185818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:58:45.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:58:45.699 [DEBUG] [Thread-185818] [transport.py] [_log()] userauth is OK
2026-02-14T12:58:45.700 [DEBUG] [Thread-185818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:58:45.700 [DEBUG] [Thread-185818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:58:45.700 [DEBUG] [Thread-185818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:58:45.700 [DEBUG] [Thread-185818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:58:45.718 [INFO] [Thread-185818] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:58:45.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-14T12:58:45.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:58:46.132 [DEBUG] [Thread-185820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:58:46.537 [DEBUG] [Thread-185818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:58:46.538 [DEBUG] [Thread-185818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:58:46.585 [DEBUG] [Thread-185818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:58:46.586 [DEBUG] [Thread-185818] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:58:46.595 [DEBUG] [Thread-185818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:58:46.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:58:46.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-14T12:58: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-14T12:58:46.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:58:46.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:58:46.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:58:46.632 [DEBUG] [Thread-185818] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:59:01.194 [DEBUG] [Thread-185821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:59:16.229 [DEBUG] [Thread-185822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:59:16.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:59:16.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:59:16.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-14T12:59:19.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 58, 55), 12.6, 42.81, 0.0, 24.0, 14.56, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:59:19.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:58:55
2026-02-14T12:59:19.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:59:19.712 [DEBUG] [Thread-185823] [transport.py] [_log()] starting thread (client mode): 0xa2d23220
2026-02-14T12:59:19.712 [DEBUG] [Thread-185823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:59:19.733 [DEBUG] [Thread-185823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:59:19.733 [INFO] [Thread-185823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:59:19.736 [DEBUG] [Thread-185823] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:59:19.736 [DEBUG] [Thread-185823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:59:19.736 [DEBUG] [Thread-185823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:59:19.736 [DEBUG] [Thread-185823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:59:19.736 [DEBUG] [Thread-185823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:59:19.736 [DEBUG] [Thread-185823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:59:19.736 [DEBUG] [Thread-185823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:59:19.736 [DEBUG] [Thread-185823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:59:19.736 [DEBUG] [Thread-185823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:59:19.736 [DEBUG] [Thread-185823] [transport.py] [_log()] client lang: <none>
2026-02-14T12:59:19.736 [DEBUG] [Thread-185823] [transport.py] [_log()] server lang: <none>
2026-02-14T12:59:19.736 [DEBUG] [Thread-185823] [transport.py] [_log()] kex follows: False
2026-02-14T12:59:19.736 [DEBUG] [Thread-185823] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:59:19.736 [DEBUG] [Thread-185823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:59:19.736 [DEBUG] [Thread-185823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:59:19.736 [DEBUG] [Thread-185823] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:59:19.736 [DEBUG] [Thread-185823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:59:19.736 [DEBUG] [Thread-185823] [transport.py] [_log()] Compression: none
2026-02-14T12:59:19.736 [DEBUG] [Thread-185823] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:59:19.753 [DEBUG] [Thread-185823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:59:19.754 [DEBUG] [Thread-185823] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:59:19.754 [DEBUG] [Thread-185823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:59:19.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:59:19.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:59:19.756 [DEBUG] [Thread-185823] [transport.py] [_log()] userauth is OK
2026-02-14T12:59:19.756 [DEBUG] [Thread-185823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:59:19.757 [DEBUG] [Thread-185823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:59:19.757 [DEBUG] [Thread-185823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:59:19.757 [DEBUG] [Thread-185823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:59:19.777 [INFO] [Thread-185823] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:59:19.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:59:20.590 [DEBUG] [Thread-185823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:59:20.590 [DEBUG] [Thread-185823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:59:20.590 [DEBUG] [Thread-185823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:59:20.630 [DEBUG] [Thread-185823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:59:20.631 [DEBUG] [Thread-185823] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:59:20.634 [DEBUG] [Thread-185823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:59:20.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:59:20.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:59:20.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:59:20.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:59:20.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:59:20.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:59:20.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:59:20.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:59:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:59:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.454624 -999.00  +14.40  26.66     48   +3.60 1 1 1 1 1   888    0 11.71 51.14 ----- 20.1 26.7 141.8 41.9 20.9 -24.0 19.8 -23.9 20.0 -22.8 21.0 -24.0
2026-02-14T12:59:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:59:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:59:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.454624
2026-02-14T12:59:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:59:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:59:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:59:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:59:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:59:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:58:55', tmtdew=12.6, humidity=42.81, cloud=0.0, wind=24.0, temperature=14.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:54:39.514', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:59:20.660 [DEBUG] [Thread-185823] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:59:20.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-14T12:59:20.758 [DEBUG] [Thread-185826] [transport.py] [_log()] starting thread (client mode): 0xa2d12fb0
2026-02-14T12:59:20.758 [DEBUG] [Thread-185826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:59:20.771 [DEBUG] [Thread-185826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:59:20.772 [INFO] [Thread-185826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:59:20.779 [DEBUG] [Thread-185826] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:59:20.779 [DEBUG] [Thread-185826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:59:20.779 [DEBUG] [Thread-185826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:59:20.780 [DEBUG] [Thread-185826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:59:20.780 [DEBUG] [Thread-185826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:59:20.780 [DEBUG] [Thread-185826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:59:20.780 [DEBUG] [Thread-185826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:59:20.780 [DEBUG] [Thread-185826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:59:20.780 [DEBUG] [Thread-185826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:59:20.780 [DEBUG] [Thread-185826] [transport.py] [_log()] client lang: <none>
2026-02-14T12:59:20.780 [DEBUG] [Thread-185826] [transport.py] [_log()] server lang: <none>
2026-02-14T12:59:20.780 [DEBUG] [Thread-185826] [transport.py] [_log()] kex follows: False
2026-02-14T12:59:20.780 [DEBUG] [Thread-185826] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:59:20.780 [DEBUG] [Thread-185826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:59:20.780 [DEBUG] [Thread-185826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:59:20.780 [DEBUG] [Thread-185826] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:59:20.780 [DEBUG] [Thread-185826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:59:20.780 [DEBUG] [Thread-185826] [transport.py] [_log()] Compression: none
2026-02-14T12:59:20.780 [DEBUG] [Thread-185826] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:59:20.839 [DEBUG] [Thread-185826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:59:20.840 [DEBUG] [Thread-185826] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:59:20.841 [DEBUG] [Thread-185826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:59:20.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:59:20.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:59:20.895 [DEBUG] [Thread-185826] [transport.py] [_log()] userauth is OK
2026-02-14T12:59:20.895 [DEBUG] [Thread-185826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:59:20.895 [DEBUG] [Thread-185826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:59:20.895 [DEBUG] [Thread-185826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:59:20.895 [DEBUG] [Thread-185826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:59:20.913 [INFO] [Thread-185826] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:59:20.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T12:59:20.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:59:21.693 [DEBUG] [Thread-185826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:59:21.693 [DEBUG] [Thread-185826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:59:21.741 [DEBUG] [Thread-185826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:59:21.741 [DEBUG] [Thread-185826] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:59:21.749 [DEBUG] [Thread-185826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:59:21.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:59:21.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-14T12:59:21.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-14T12:59:21.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:59:21.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:59:21.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:59:21.781 [DEBUG] [Thread-185826] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:59:22.840 [DEBUG] [Thread-185828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:59:25.776 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:59:25.777 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:59:31.263 [DEBUG] [Thread-185829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:59:46.312 [DEBUG] [Thread-185830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T12:59:51.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T12:59:51.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T12:59: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-14T12:59:53.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 12, 59, 31), 12.13, 44.03, 0.0, 23.84, 14.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T12:59:53.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 12:59:31
2026-02-14T12:59:54.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T12:59:54.175 [DEBUG] [Thread-185831] [transport.py] [_log()] starting thread (client mode): 0xa5742050
2026-02-14T12:59:54.175 [DEBUG] [Thread-185831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:59:54.195 [DEBUG] [Thread-185831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T12:59:54.195 [INFO] [Thread-185831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T12:59:54.198 [DEBUG] [Thread-185831] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:59:54.198 [DEBUG] [Thread-185831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T12:59:54.198 [DEBUG] [Thread-185831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:59:54.198 [DEBUG] [Thread-185831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:59:54.198 [DEBUG] [Thread-185831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:59:54.198 [DEBUG] [Thread-185831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:59:54.199 [DEBUG] [Thread-185831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:59:54.199 [DEBUG] [Thread-185831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:59:54.199 [DEBUG] [Thread-185831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:59:54.199 [DEBUG] [Thread-185831] [transport.py] [_log()] client lang: <none>
2026-02-14T12:59:54.199 [DEBUG] [Thread-185831] [transport.py] [_log()] server lang: <none>
2026-02-14T12:59:54.199 [DEBUG] [Thread-185831] [transport.py] [_log()] kex follows: False
2026-02-14T12:59:54.199 [DEBUG] [Thread-185831] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:59:54.199 [DEBUG] [Thread-185831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:59:54.199 [DEBUG] [Thread-185831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:59:54.199 [DEBUG] [Thread-185831] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:59:54.199 [DEBUG] [Thread-185831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:59:54.199 [DEBUG] [Thread-185831] [transport.py] [_log()] Compression: none
2026-02-14T12:59:54.199 [DEBUG] [Thread-185831] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:59:54.219 [DEBUG] [Thread-185831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:59:54.220 [DEBUG] [Thread-185831] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:59:54.220 [DEBUG] [Thread-185831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T12:59:54.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T12:59:54.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:59:54.264 [DEBUG] [Thread-185831] [transport.py] [_log()] userauth is OK
2026-02-14T12:59:54.264 [DEBUG] [Thread-185831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:59:54.265 [DEBUG] [Thread-185831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:59:54.265 [DEBUG] [Thread-185831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T12:59:54.265 [DEBUG] [Thread-185831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:59:54.297 [INFO] [Thread-185831] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:59:54.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:59:54.934 [DEBUG] [Thread-185831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:59:54.934 [DEBUG] [Thread-185831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:59:54.935 [DEBUG] [Thread-185831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T12:59:54.975 [DEBUG] [Thread-185831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:59:54.976 [DEBUG] [Thread-185831] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:59:54.979 [DEBUG] [Thread-185831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:59:54.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:59:54.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T12:59:54.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T12:59:54.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T12:59:55.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:59:55.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T12:59:55.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:59:55.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:59:55.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T12:59:55.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.454624 -999.00  +14.40  26.66     48   +3.60 1 1 1 1 1   888    0 11.71 51.14 ----- 20.1 26.7 141.8 41.9 20.9 -24.0 19.8 -23.9 20.0 -22.8 21.0 -24.0
2026-02-14T12:59:55.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T12:59:55.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T12:59:55.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.454624
2026-02-14T12:59:55.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T12:59:55.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T12:59:55.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T12:59:55.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T12:59:55.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T12:59:55.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T12:59:31', tmtdew=12.13, humidity=44.03, cloud=0.0, wind=23.84, temperature=14.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:54:39.514', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T12:59:55.009 [DEBUG] [Thread-185831] [transport.py] [_log()] EOF in transport thread
2026-02-14T12:59:55.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-14T12:59:55.105 [DEBUG] [Thread-185834] [transport.py] [_log()] starting thread (client mode): 0xa575b0a0
2026-02-14T12:59:55.106 [DEBUG] [Thread-185834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T12:59:55.120 [DEBUG] [Thread-185834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T12:59:55.120 [INFO] [Thread-185834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T12:59:55.127 [DEBUG] [Thread-185834] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T12:59:55.128 [DEBUG] [Thread-185834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T12:59:55.128 [DEBUG] [Thread-185834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T12:59:55.128 [DEBUG] [Thread-185834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:59:55.128 [DEBUG] [Thread-185834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T12:59:55.128 [DEBUG] [Thread-185834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:59:55.128 [DEBUG] [Thread-185834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T12:59:55.128 [DEBUG] [Thread-185834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T12:59:55.128 [DEBUG] [Thread-185834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T12:59:55.128 [DEBUG] [Thread-185834] [transport.py] [_log()] client lang: <none>
2026-02-14T12:59:55.128 [DEBUG] [Thread-185834] [transport.py] [_log()] server lang: <none>
2026-02-14T12:59:55.128 [DEBUG] [Thread-185834] [transport.py] [_log()] kex follows: False
2026-02-14T12:59:55.128 [DEBUG] [Thread-185834] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T12:59:55.128 [DEBUG] [Thread-185834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T12:59:55.128 [DEBUG] [Thread-185834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T12:59:55.129 [DEBUG] [Thread-185834] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T12:59:55.129 [DEBUG] [Thread-185834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T12:59:55.129 [DEBUG] [Thread-185834] [transport.py] [_log()] Compression: none
2026-02-14T12:59:55.129 [DEBUG] [Thread-185834] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T12:59:55.187 [DEBUG] [Thread-185834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T12:59:55.188 [DEBUG] [Thread-185834] [transport.py] [_log()] Switch to new keys ...
2026-02-14T12:59:55.189 [DEBUG] [Thread-185834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T12:59:55.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T12:59:55.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T12:59:55.244 [DEBUG] [Thread-185834] [transport.py] [_log()] userauth is OK
2026-02-14T12:59:55.244 [DEBUG] [Thread-185834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T12:59:55.244 [DEBUG] [Thread-185834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T12:59:55.244 [DEBUG] [Thread-185834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T12:59:55.244 [DEBUG] [Thread-185834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T12:59:55.262 [INFO] [Thread-185834] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T12:59:55.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T12:59:55.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T12:59:56.057 [DEBUG] [Thread-185834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T12:59:56.057 [DEBUG] [Thread-185834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T12:59:56.105 [DEBUG] [Thread-185834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T12:59:56.106 [DEBUG] [Thread-185834] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T12:59:56.115 [DEBUG] [Thread-185834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T12:59:56.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T12:59:56.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-14T12:59:56.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-14T12:59:56.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T12:59:56.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T12:59:56.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T12:59:56.151 [DEBUG] [Thread-185834] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:00:01.349 [DEBUG] [Thread-185836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:00:16.412 [DEBUG] [Thread-185837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:00:22.890 [DEBUG] [Thread-185838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:00:25.920 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:00:25.921 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:00:26.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:00:26.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:00:26.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-14T13:00:28.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 0, 7), 12.35, 43.5, 0.0, 25.44, 14.54, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:00:28.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:00:07
2026-02-14T13:00:28.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:00:28.559 [DEBUG] [Thread-185839] [transport.py] [_log()] starting thread (client mode): 0xa2d20520
2026-02-14T13:00:28.559 [DEBUG] [Thread-185839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:00:28.579 [DEBUG] [Thread-185839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:00:28.580 [INFO] [Thread-185839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:00:28.582 [DEBUG] [Thread-185839] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:00:28.583 [DEBUG] [Thread-185839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:00:28.583 [DEBUG] [Thread-185839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:00:28.583 [DEBUG] [Thread-185839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:00:28.583 [DEBUG] [Thread-185839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:00:28.583 [DEBUG] [Thread-185839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:00:28.583 [DEBUG] [Thread-185839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:00:28.583 [DEBUG] [Thread-185839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:00:28.583 [DEBUG] [Thread-185839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:00:28.583 [DEBUG] [Thread-185839] [transport.py] [_log()] client lang: <none>
2026-02-14T13:00:28.583 [DEBUG] [Thread-185839] [transport.py] [_log()] server lang: <none>
2026-02-14T13:00:28.583 [DEBUG] [Thread-185839] [transport.py] [_log()] kex follows: False
2026-02-14T13:00:28.583 [DEBUG] [Thread-185839] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:00:28.583 [DEBUG] [Thread-185839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:00:28.583 [DEBUG] [Thread-185839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:00:28.583 [DEBUG] [Thread-185839] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:00:28.583 [DEBUG] [Thread-185839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:00:28.583 [DEBUG] [Thread-185839] [transport.py] [_log()] Compression: none
2026-02-14T13:00:28.583 [DEBUG] [Thread-185839] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:00:28.603 [DEBUG] [Thread-185839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:00:28.603 [DEBUG] [Thread-185839] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:00:28.604 [DEBUG] [Thread-185839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:00:28.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:00:28.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:00:28.645 [DEBUG] [Thread-185839] [transport.py] [_log()] userauth is OK
2026-02-14T13:00:28.646 [DEBUG] [Thread-185839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:00:28.646 [DEBUG] [Thread-185839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:00:28.646 [DEBUG] [Thread-185839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:00:28.646 [DEBUG] [Thread-185839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:00:28.678 [INFO] [Thread-185839] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:00:28.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:00:29.265 [DEBUG] [Thread-185839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:00:29.265 [DEBUG] [Thread-185839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:00:29.265 [DEBUG] [Thread-185839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:00:29.306 [DEBUG] [Thread-185839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:00:29.306 [DEBUG] [Thread-185839] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:00:29.308 [DEBUG] [Thread-185839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:00:29.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:00:29.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:00:29.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:00:29.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:00:29.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:00:29.321 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:00:29.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:00:29.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:00:29.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:00:29.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.454624 -999.00  +14.40  26.66     48   +3.60 1 1 1 1 1   888    0 11.71 51.14 ----- 20.1 26.7 141.8 41.9 20.9 -24.0 19.8 -23.9 20.0 -22.8 21.0 -24.0
2026-02-14T13:00:29.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:00:29.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:00:29.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.454624
2026-02-14T13:00:29.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:00:29.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:00:29.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:00:29.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:00:29.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:00:29.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:00:07', tmtdew=12.35, humidity=43.5, cloud=0.0, wind=25.44, temperature=14.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T10:54:39.514', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:00:29.322 [DEBUG] [Thread-185839] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:00: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-14T13:00:29.406 [DEBUG] [Thread-185842] [transport.py] [_log()] starting thread (client mode): 0xa5758790
2026-02-14T13:00:29.406 [DEBUG] [Thread-185842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:00:29.421 [DEBUG] [Thread-185842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:00:29.421 [INFO] [Thread-185842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:00:29.429 [DEBUG] [Thread-185842] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:00:29.429 [DEBUG] [Thread-185842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:00:29.429 [DEBUG] [Thread-185842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:00:29.429 [DEBUG] [Thread-185842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:00:29.429 [DEBUG] [Thread-185842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:00:29.429 [DEBUG] [Thread-185842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:00:29.429 [DEBUG] [Thread-185842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:00:29.429 [DEBUG] [Thread-185842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:00:29.429 [DEBUG] [Thread-185842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:00:29.429 [DEBUG] [Thread-185842] [transport.py] [_log()] client lang: <none>
2026-02-14T13:00:29.429 [DEBUG] [Thread-185842] [transport.py] [_log()] server lang: <none>
2026-02-14T13:00:29.429 [DEBUG] [Thread-185842] [transport.py] [_log()] kex follows: False
2026-02-14T13:00:29.429 [DEBUG] [Thread-185842] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:00:29.429 [DEBUG] [Thread-185842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:00:29.429 [DEBUG] [Thread-185842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:00:29.430 [DEBUG] [Thread-185842] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:00:29.430 [DEBUG] [Thread-185842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:00:29.430 [DEBUG] [Thread-185842] [transport.py] [_log()] Compression: none
2026-02-14T13:00:29.430 [DEBUG] [Thread-185842] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:00:29.487 [DEBUG] [Thread-185842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:00:29.487 [DEBUG] [Thread-185842] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:00:29.487 [DEBUG] [Thread-185842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:00:29.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:00:29.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:00:29.547 [DEBUG] [Thread-185842] [transport.py] [_log()] userauth is OK
2026-02-14T13:00:29.547 [DEBUG] [Thread-185842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:00:29.547 [DEBUG] [Thread-185842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:00:29.548 [DEBUG] [Thread-185842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:00:29.548 [DEBUG] [Thread-185842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:00:29.567 [INFO] [Thread-185842] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:00:29.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T13:00:29.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:00:30.359 [DEBUG] [Thread-185842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:00:30.360 [DEBUG] [Thread-185842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:00:30.407 [DEBUG] [Thread-185842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:00:30.407 [DEBUG] [Thread-185842] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:00:30.417 [DEBUG] [Thread-185842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:00:30.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:00:30.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:00:30.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-14T13:00:30.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:00:30.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:00:30.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:00:30.462 [DEBUG] [Thread-185842] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:00:31.452 [DEBUG] [Thread-185844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:00:46.503 [DEBUG] [Thread-185845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:01:00.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:01:00.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:01:00.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:01:01.544 [DEBUG] [Thread-185846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:01:02.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 0, 42), 13.43, 40.36, 0.0, 32.02, 15.28, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:01:02.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:00:42
2026-02-14T13:01:02.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:01:02.846 [DEBUG] [Thread-185847] [transport.py] [_log()] starting thread (client mode): 0xa2dc2170
2026-02-14T13:01:02.846 [DEBUG] [Thread-185847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:01:02.866 [DEBUG] [Thread-185847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:01:02.866 [INFO] [Thread-185847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:01:02.869 [DEBUG] [Thread-185847] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:01:02.870 [DEBUG] [Thread-185847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:01:02.870 [DEBUG] [Thread-185847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:01:02.870 [DEBUG] [Thread-185847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:01:02.870 [DEBUG] [Thread-185847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:01:02.870 [DEBUG] [Thread-185847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:01:02.870 [DEBUG] [Thread-185847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:01:02.870 [DEBUG] [Thread-185847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:01:02.870 [DEBUG] [Thread-185847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:01:02.870 [DEBUG] [Thread-185847] [transport.py] [_log()] client lang: <none>
2026-02-14T13:01:02.870 [DEBUG] [Thread-185847] [transport.py] [_log()] server lang: <none>
2026-02-14T13:01:02.870 [DEBUG] [Thread-185847] [transport.py] [_log()] kex follows: False
2026-02-14T13:01:02.870 [DEBUG] [Thread-185847] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:01:02.870 [DEBUG] [Thread-185847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:01:02.870 [DEBUG] [Thread-185847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:01:02.871 [DEBUG] [Thread-185847] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:01:02.871 [DEBUG] [Thread-185847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:01:02.871 [DEBUG] [Thread-185847] [transport.py] [_log()] Compression: none
2026-02-14T13:01:02.871 [DEBUG] [Thread-185847] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:01:02.887 [DEBUG] [Thread-185847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:01:02.888 [DEBUG] [Thread-185847] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:01:02.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:01:02.888 [DEBUG] [Thread-185847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:01:02.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:01:02.890 [DEBUG] [Thread-185847] [transport.py] [_log()] userauth is OK
2026-02-14T13:01:02.890 [DEBUG] [Thread-185847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:01:02.890 [DEBUG] [Thread-185847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:01:02.890 [DEBUG] [Thread-185847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:01:02.890 [DEBUG] [Thread-185847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:01:02.908 [INFO] [Thread-185847] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:01:02.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:01:03.523 [DEBUG] [Thread-185847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:01:03.523 [DEBUG] [Thread-185847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:01:03.523 [DEBUG] [Thread-185847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:01:03.564 [DEBUG] [Thread-185847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:01:03.564 [DEBUG] [Thread-185847] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:01:03.568 [DEBUG] [Thread-185847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:01:03.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:01:03.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:01:03.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:01:03.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:01:03.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:01:03.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:01:03.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:01:03.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:01:03.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:01:03.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.458790 -999.00  +15.20  18.39     46   +3.70 1 1 1 1 1   888    0 12.28 61.82 NA 22.0 18.4 173.0 27.8 21.3 -25.2 20.2 -24.9 20.4 -23.2 21.5 -25.2
2026-02-14T13:01:03.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:01:03.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:01:03.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.458790
2026-02-14T13:01:03.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:01:03.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:01:03.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:01:03.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:01:03.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:01:03.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:00:42', tmtdew=13.43, humidity=40.36, cloud=0.0, wind=32.02, temperature=15.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:00:39.456', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:01:03.594 [DEBUG] [Thread-185847] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:01:03.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-14T13:01:03.689 [DEBUG] [Thread-185850] [transport.py] [_log()] starting thread (client mode): 0xa2d12f50
2026-02-14T13:01:03.690 [DEBUG] [Thread-185850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:01:03.704 [DEBUG] [Thread-185850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:01:03.704 [INFO] [Thread-185850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:01:03.712 [DEBUG] [Thread-185850] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:01:03.712 [DEBUG] [Thread-185850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:01:03.712 [DEBUG] [Thread-185850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:01:03.712 [DEBUG] [Thread-185850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:01:03.712 [DEBUG] [Thread-185850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:01:03.712 [DEBUG] [Thread-185850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:01:03.712 [DEBUG] [Thread-185850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:01:03.713 [DEBUG] [Thread-185850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:01:03.713 [DEBUG] [Thread-185850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:01:03.713 [DEBUG] [Thread-185850] [transport.py] [_log()] client lang: <none>
2026-02-14T13:01:03.713 [DEBUG] [Thread-185850] [transport.py] [_log()] server lang: <none>
2026-02-14T13:01:03.713 [DEBUG] [Thread-185850] [transport.py] [_log()] kex follows: False
2026-02-14T13:01:03.713 [DEBUG] [Thread-185850] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:01:03.713 [DEBUG] [Thread-185850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:01:03.713 [DEBUG] [Thread-185850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:01:03.713 [DEBUG] [Thread-185850] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:01:03.713 [DEBUG] [Thread-185850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:01:03.713 [DEBUG] [Thread-185850] [transport.py] [_log()] Compression: none
2026-02-14T13:01:03.713 [DEBUG] [Thread-185850] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:01:03.772 [DEBUG] [Thread-185850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:01:03.772 [DEBUG] [Thread-185850] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:01:03.773 [DEBUG] [Thread-185850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:01:03.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:01:03.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:01:03.828 [DEBUG] [Thread-185850] [transport.py] [_log()] userauth is OK
2026-02-14T13:01:03.828 [DEBUG] [Thread-185850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:01:03.828 [DEBUG] [Thread-185850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:01:03.828 [DEBUG] [Thread-185850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:01:03.828 [DEBUG] [Thread-185850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:01:03.848 [INFO] [Thread-185850] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:01:03.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-14T13:01:03.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:01:04.670 [DEBUG] [Thread-185850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:01:04.671 [DEBUG] [Thread-185850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:01:04.718 [DEBUG] [Thread-185850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:01:04.719 [DEBUG] [Thread-185850] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:01:04.728 [DEBUG] [Thread-185850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:01:04.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:01:04.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-14T13:01:04.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-14T13:01:04.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:01:04.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:01:04.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:01:04.764 [DEBUG] [Thread-185850] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:01:16.584 [DEBUG] [Thread-185852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:01:22.920 [DEBUG] [Thread-185853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:01:26.079 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:01:26.080 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:01:31.647 [DEBUG] [Thread-185854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:01:34.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:01:34.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:01:34.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-14T13:01:37.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 1, 18), 13.38, 40.42, 0.0, 32.2, 15.04, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:01:37.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:01:18
2026-02-14T13:01:37.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:01:37.596 [DEBUG] [Thread-185855] [transport.py] [_log()] starting thread (client mode): 0xa2dc3160
2026-02-14T13:01:37.596 [DEBUG] [Thread-185855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:01:37.617 [DEBUG] [Thread-185855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:01:37.617 [INFO] [Thread-185855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:01:37.620 [DEBUG] [Thread-185855] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:01:37.620 [DEBUG] [Thread-185855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:01:37.620 [DEBUG] [Thread-185855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:01:37.620 [DEBUG] [Thread-185855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:01:37.620 [DEBUG] [Thread-185855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:01:37.620 [DEBUG] [Thread-185855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:01:37.620 [DEBUG] [Thread-185855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:01:37.620 [DEBUG] [Thread-185855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:01:37.620 [DEBUG] [Thread-185855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:01:37.620 [DEBUG] [Thread-185855] [transport.py] [_log()] client lang: <none>
2026-02-14T13:01:37.620 [DEBUG] [Thread-185855] [transport.py] [_log()] server lang: <none>
2026-02-14T13:01:37.620 [DEBUG] [Thread-185855] [transport.py] [_log()] kex follows: False
2026-02-14T13:01:37.621 [DEBUG] [Thread-185855] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:01:37.621 [DEBUG] [Thread-185855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:01:37.621 [DEBUG] [Thread-185855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:01:37.621 [DEBUG] [Thread-185855] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:01:37.621 [DEBUG] [Thread-185855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:01:37.621 [DEBUG] [Thread-185855] [transport.py] [_log()] Compression: none
2026-02-14T13:01:37.621 [DEBUG] [Thread-185855] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:01:37.634 [DEBUG] [Thread-185855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:01:37.635 [DEBUG] [Thread-185855] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:01:37.635 [DEBUG] [Thread-185855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:01:37.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:01:37.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:01:37.637 [DEBUG] [Thread-185855] [transport.py] [_log()] userauth is OK
2026-02-14T13:01:37.637 [DEBUG] [Thread-185855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:01:37.637 [DEBUG] [Thread-185855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:01:37.637 [DEBUG] [Thread-185855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:01:37.638 [DEBUG] [Thread-185855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:01:37.661 [INFO] [Thread-185855] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:01:37.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:01:38.318 [DEBUG] [Thread-185855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:01:38.318 [DEBUG] [Thread-185855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:01:38.318 [DEBUG] [Thread-185855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:01:38.359 [DEBUG] [Thread-185855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:01:38.359 [DEBUG] [Thread-185855] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:01:38.361 [DEBUG] [Thread-185855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:01:38.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:01:38.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:01:38.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:01:38.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:01:38.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:01:38.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:01:38.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:01:38.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:01:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:01:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.459138 -999.00  +15.10  17.70     46   +3.70 1 1 1 1 1   888    0 12.26 67.03 ----- 21.8 17.7 163.8 27.0 21.3 -25.7 20.3 -24.2 20.3 -24.4 21.5 -25.2
2026-02-14T13:01:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:01:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:01:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.459138
2026-02-14T13:01:38.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:01:38.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:01:38.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:01:38.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:01:38.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:01:38.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:01:18', tmtdew=13.38, humidity=40.42, cloud=0.0, wind=32.2, temperature=15.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:01:09.523', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:01:38.385 [DEBUG] [Thread-185855] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:01:38.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-14T13:01:38.481 [DEBUG] [Thread-185858] [transport.py] [_log()] starting thread (client mode): 0xa2d3c1f0
2026-02-14T13:01:38.481 [DEBUG] [Thread-185858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:01:38.495 [DEBUG] [Thread-185858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:01:38.495 [INFO] [Thread-185858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:01:38.502 [DEBUG] [Thread-185858] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:01:38.502 [DEBUG] [Thread-185858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:01:38.502 [DEBUG] [Thread-185858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:01:38.502 [DEBUG] [Thread-185858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:01:38.502 [DEBUG] [Thread-185858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:01:38.502 [DEBUG] [Thread-185858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:01:38.502 [DEBUG] [Thread-185858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:01:38.503 [DEBUG] [Thread-185858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:01:38.503 [DEBUG] [Thread-185858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:01:38.503 [DEBUG] [Thread-185858] [transport.py] [_log()] client lang: <none>
2026-02-14T13:01:38.503 [DEBUG] [Thread-185858] [transport.py] [_log()] server lang: <none>
2026-02-14T13:01:38.503 [DEBUG] [Thread-185858] [transport.py] [_log()] kex follows: False
2026-02-14T13:01:38.503 [DEBUG] [Thread-185858] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:01:38.503 [DEBUG] [Thread-185858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:01:38.503 [DEBUG] [Thread-185858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:01:38.503 [DEBUG] [Thread-185858] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:01:38.503 [DEBUG] [Thread-185858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:01:38.503 [DEBUG] [Thread-185858] [transport.py] [_log()] Compression: none
2026-02-14T13:01:38.503 [DEBUG] [Thread-185858] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:01:38.558 [DEBUG] [Thread-185858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:01:38.559 [DEBUG] [Thread-185858] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:01:38.559 [DEBUG] [Thread-185858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:01:38.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:01:38.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:01:38.620 [DEBUG] [Thread-185858] [transport.py] [_log()] userauth is OK
2026-02-14T13:01:38.620 [DEBUG] [Thread-185858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:01:38.620 [DEBUG] [Thread-185858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:01:38.620 [DEBUG] [Thread-185858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:01:38.621 [DEBUG] [Thread-185858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:01:38.643 [INFO] [Thread-185858] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:01:38.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-14T13:01:38.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:01:39.533 [DEBUG] [Thread-185858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:01:39.533 [DEBUG] [Thread-185858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:01:39.581 [DEBUG] [Thread-185858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:01:39.581 [DEBUG] [Thread-185858] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:01:39.590 [DEBUG] [Thread-185858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:01:39.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:01:39.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-14T13:01:39.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-14T13:01:39.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:01:39.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:01:39.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:01:39.624 [DEBUG] [Thread-185858] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:01:46.681 [DEBUG] [Thread-185860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:02:01.736 [DEBUG] [Thread-185861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:02:09.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:02:09.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:02:09.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:02:11.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 1, 54), 12.86, 42.03, 0.0, 27.9, 14.99, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:02:11.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:01:54
2026-02-14T13:02:12.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:02:12.668 [DEBUG] [Thread-185862] [transport.py] [_log()] starting thread (client mode): 0xa2d19690
2026-02-14T13:02:12.668 [DEBUG] [Thread-185862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:02:12.690 [DEBUG] [Thread-185862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:02:12.690 [INFO] [Thread-185862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:02:12.693 [DEBUG] [Thread-185862] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:02:12.693 [DEBUG] [Thread-185862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:02:12.693 [DEBUG] [Thread-185862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:02:12.693 [DEBUG] [Thread-185862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:02:12.693 [DEBUG] [Thread-185862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:02:12.693 [DEBUG] [Thread-185862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:02:12.693 [DEBUG] [Thread-185862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:02:12.693 [DEBUG] [Thread-185862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:02:12.693 [DEBUG] [Thread-185862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:02:12.693 [DEBUG] [Thread-185862] [transport.py] [_log()] client lang: <none>
2026-02-14T13:02:12.693 [DEBUG] [Thread-185862] [transport.py] [_log()] server lang: <none>
2026-02-14T13:02:12.693 [DEBUG] [Thread-185862] [transport.py] [_log()] kex follows: False
2026-02-14T13:02:12.693 [DEBUG] [Thread-185862] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:02:12.694 [DEBUG] [Thread-185862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:02:12.694 [DEBUG] [Thread-185862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:02:12.694 [DEBUG] [Thread-185862] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:02:12.694 [DEBUG] [Thread-185862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:02:12.694 [DEBUG] [Thread-185862] [transport.py] [_log()] Compression: none
2026-02-14T13:02:12.694 [DEBUG] [Thread-185862] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:02:12.710 [DEBUG] [Thread-185862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:02:12.711 [DEBUG] [Thread-185862] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:02:12.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:02:12.712 [DEBUG] [Thread-185862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:02:12.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:02:12.714 [DEBUG] [Thread-185862] [transport.py] [_log()] userauth is OK
2026-02-14T13:02:12.714 [DEBUG] [Thread-185862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:02:12.715 [DEBUG] [Thread-185862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:02:12.715 [DEBUG] [Thread-185862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:02:12.715 [DEBUG] [Thread-185862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:02:12.734 [INFO] [Thread-185862] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:02:12.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:02:13.337 [DEBUG] [Thread-185862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:02:13.337 [DEBUG] [Thread-185862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:02:13.337 [DEBUG] [Thread-185862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:02:13.378 [DEBUG] [Thread-185862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:02:13.378 [DEBUG] [Thread-185862] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:02:13.381 [DEBUG] [Thread-185862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:02:13.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:02:13.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:02:13.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:02:13.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:02:13.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:02:13.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:02:13.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:02:13.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:02:13.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:02:13.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.459485 -999.00  +15.50  20.69     46   +4.10 1 1 1 1 1   888    0 12.50 67.59 ----- 21.4 20.7 156.8 23.3 21.5 -24.9 20.5 -26.3 20.6 -21.6 21.6 -24.1
2026-02-14T13:02:13.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:02:13.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:02:13.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.459485
2026-02-14T13:02:13.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:02:13.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:02:13.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:02:13.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:02:13.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:02:13.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:01:54', tmtdew=12.86, humidity=42.03, cloud=0.0, wind=27.9, temperature=14.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:01:39.504', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:02:13.404 [DEBUG] [Thread-185862] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:02:13.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-14T13:02:13.512 [DEBUG] [Thread-185865] [transport.py] [_log()] starting thread (client mode): 0xa2d1aa10
2026-02-14T13:02:13.512 [DEBUG] [Thread-185865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:02:13.529 [DEBUG] [Thread-185865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:02:13.529 [INFO] [Thread-185865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:02:13.536 [DEBUG] [Thread-185865] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:02:13.537 [DEBUG] [Thread-185865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:02:13.537 [DEBUG] [Thread-185865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:02:13.537 [DEBUG] [Thread-185865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:02:13.537 [DEBUG] [Thread-185865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:02:13.537 [DEBUG] [Thread-185865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:02:13.537 [DEBUG] [Thread-185865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:02:13.537 [DEBUG] [Thread-185865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:02:13.537 [DEBUG] [Thread-185865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:02:13.537 [DEBUG] [Thread-185865] [transport.py] [_log()] client lang: <none>
2026-02-14T13:02:13.537 [DEBUG] [Thread-185865] [transport.py] [_log()] server lang: <none>
2026-02-14T13:02:13.537 [DEBUG] [Thread-185865] [transport.py] [_log()] kex follows: False
2026-02-14T13:02:13.537 [DEBUG] [Thread-185865] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:02:13.537 [DEBUG] [Thread-185865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:02:13.537 [DEBUG] [Thread-185865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:02:13.538 [DEBUG] [Thread-185865] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:02:13.538 [DEBUG] [Thread-185865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:02:13.538 [DEBUG] [Thread-185865] [transport.py] [_log()] Compression: none
2026-02-14T13:02:13.538 [DEBUG] [Thread-185865] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:02:13.600 [DEBUG] [Thread-185865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:02:13.601 [DEBUG] [Thread-185865] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:02:13.601 [DEBUG] [Thread-185865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:02:13.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:02:13.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:02:13.656 [DEBUG] [Thread-185865] [transport.py] [_log()] userauth is OK
2026-02-14T13:02:13.656 [DEBUG] [Thread-185865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:02:13.657 [DEBUG] [Thread-185865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:02:13.657 [DEBUG] [Thread-185865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:02:13.657 [DEBUG] [Thread-185865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:02:13.675 [INFO] [Thread-185865] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:02:13.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-14T13:02:13.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:02:14.527 [DEBUG] [Thread-185865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:02:14.528 [DEBUG] [Thread-185865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:02:14.575 [DEBUG] [Thread-185865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:02:14.576 [DEBUG] [Thread-185865] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:02:14.585 [DEBUG] [Thread-185865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:02:14.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:02:14.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-14T13:02:14.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:02:14.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:02:14.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:02:14.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:02:14.629 [DEBUG] [Thread-185865] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:02:16.775 [DEBUG] [Thread-185867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:02:22.954 [DEBUG] [Thread-185868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:02:26.221 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:02:26.222 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:02:31.826 [DEBUG] [Thread-185869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:02:44.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:02:44.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:02: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-14T13:02:46.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 2, 29), 12.85, 42.05, 0.0, 26.4, 14.99, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:02:46.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:02:29
2026-02-14T13:02:46.861 [DEBUG] [Thread-185870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:02:46.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:02:47.103 [DEBUG] [Thread-185871] [transport.py] [_log()] starting thread (client mode): 0xa2d19ea0
2026-02-14T13:02:47.103 [DEBUG] [Thread-185871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:02:47.123 [DEBUG] [Thread-185871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:02:47.123 [INFO] [Thread-185871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:02:47.126 [DEBUG] [Thread-185871] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:02:47.126 [DEBUG] [Thread-185871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:02:47.126 [DEBUG] [Thread-185871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:02:47.126 [DEBUG] [Thread-185871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:02:47.126 [DEBUG] [Thread-185871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:02:47.127 [DEBUG] [Thread-185871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:02:47.127 [DEBUG] [Thread-185871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:02:47.127 [DEBUG] [Thread-185871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:02:47.127 [DEBUG] [Thread-185871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:02:47.127 [DEBUG] [Thread-185871] [transport.py] [_log()] client lang: <none>
2026-02-14T13:02:47.127 [DEBUG] [Thread-185871] [transport.py] [_log()] server lang: <none>
2026-02-14T13:02:47.127 [DEBUG] [Thread-185871] [transport.py] [_log()] kex follows: False
2026-02-14T13:02:47.127 [DEBUG] [Thread-185871] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:02:47.127 [DEBUG] [Thread-185871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:02:47.127 [DEBUG] [Thread-185871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:02:47.127 [DEBUG] [Thread-185871] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:02:47.127 [DEBUG] [Thread-185871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:02:47.127 [DEBUG] [Thread-185871] [transport.py] [_log()] Compression: none
2026-02-14T13:02:47.127 [DEBUG] [Thread-185871] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:02:47.142 [DEBUG] [Thread-185871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:02:47.142 [DEBUG] [Thread-185871] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:02:47.142 [DEBUG] [Thread-185871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:02:47.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:02:47.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:02:47.143 [DEBUG] [Thread-185871] [transport.py] [_log()] userauth is OK
2026-02-14T13:02:47.143 [DEBUG] [Thread-185871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:02:47.143 [DEBUG] [Thread-185871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:02:47.143 [DEBUG] [Thread-185871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:02:47.143 [DEBUG] [Thread-185871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:02:47.154 [INFO] [Thread-185871] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:02:47.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:02:47.803 [DEBUG] [Thread-185871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:02:47.803 [DEBUG] [Thread-185871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:02:47.804 [DEBUG] [Thread-185871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:02:47.845 [DEBUG] [Thread-185871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:02:47.845 [DEBUG] [Thread-185871] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:02:47.848 [DEBUG] [Thread-185871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:02:47.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:02:47.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:02:47.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:02:47.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:02:47.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:02:47.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:02:47.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:02:47.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:02:47.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:02:47.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.459832 -999.00  +15.60  22.37     46   +4.10 1 1 1 1 1   888    0 12.70 78.61 ----- 26.6 22.4 165.0 29.8 21.7 -24.2 20.6 -25.1 20.8 -21.8 21.9 -24.1
2026-02-14T13:02:47.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:02:47.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:02:47.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.459832
2026-02-14T13:02:47.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:02:47.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:02:47.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:02:47.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:02:47.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:02:47.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:02:29', tmtdew=12.85, humidity=42.05, cloud=0.0, wind=26.4, temperature=14.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:02:09.485', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:02:47.878 [DEBUG] [Thread-185871] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:02:47.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-14T13:02:47.979 [DEBUG] [Thread-185874] [transport.py] [_log()] starting thread (client mode): 0xa2d22f80
2026-02-14T13:02:47.980 [DEBUG] [Thread-185874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:02:47.994 [DEBUG] [Thread-185874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:02:47.994 [INFO] [Thread-185874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:02:48.002 [DEBUG] [Thread-185874] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:02:48.002 [DEBUG] [Thread-185874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:02:48.002 [DEBUG] [Thread-185874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:02:48.002 [DEBUG] [Thread-185874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:02:48.002 [DEBUG] [Thread-185874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:02:48.002 [DEBUG] [Thread-185874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:02:48.002 [DEBUG] [Thread-185874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:02:48.002 [DEBUG] [Thread-185874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:02:48.002 [DEBUG] [Thread-185874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:02:48.002 [DEBUG] [Thread-185874] [transport.py] [_log()] client lang: <none>
2026-02-14T13:02:48.002 [DEBUG] [Thread-185874] [transport.py] [_log()] server lang: <none>
2026-02-14T13:02:48.002 [DEBUG] [Thread-185874] [transport.py] [_log()] kex follows: False
2026-02-14T13:02:48.002 [DEBUG] [Thread-185874] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:02:48.002 [DEBUG] [Thread-185874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:02:48.002 [DEBUG] [Thread-185874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:02:48.003 [DEBUG] [Thread-185874] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:02:48.003 [DEBUG] [Thread-185874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:02:48.003 [DEBUG] [Thread-185874] [transport.py] [_log()] Compression: none
2026-02-14T13:02:48.003 [DEBUG] [Thread-185874] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:02:48.060 [DEBUG] [Thread-185874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:02:48.061 [DEBUG] [Thread-185874] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:02:48.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:02:48.062 [DEBUG] [Thread-185874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:02:48.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:02:48.116 [DEBUG] [Thread-185874] [transport.py] [_log()] userauth is OK
2026-02-14T13:02:48.122 [DEBUG] [Thread-185874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:02:48.122 [DEBUG] [Thread-185874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:02:48.122 [DEBUG] [Thread-185874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:02:48.122 [DEBUG] [Thread-185874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:02:48.148 [INFO] [Thread-185874] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:02:48.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-14T13:02:48.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:02:48.937 [DEBUG] [Thread-185874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:02:48.937 [DEBUG] [Thread-185874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:02:48.985 [DEBUG] [Thread-185874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:02:48.986 [DEBUG] [Thread-185874] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:02:48.995 [DEBUG] [Thread-185874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:02:49.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:02:49.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:02:49.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-14T13:02:49.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:02:49.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:02:49.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:02:49.031 [DEBUG] [Thread-185874] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:03:01.895 [DEBUG] [Thread-185876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:03:16.945 [DEBUG] [Thread-185877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:03:19.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:03:19.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:03:19.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-14T13:03:21.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 3, 6), 12.93, 41.89, 0.0, 24.9, 15.21, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:03:21.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:03:06
2026-02-14T13:03:21.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:03:21.880 [DEBUG] [Thread-185878] [transport.py] [_log()] starting thread (client mode): 0xa2db67a0
2026-02-14T13:03:21.880 [DEBUG] [Thread-185878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:03:21.903 [DEBUG] [Thread-185878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:03:21.903 [INFO] [Thread-185878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:03:21.907 [DEBUG] [Thread-185878] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:03:21.907 [DEBUG] [Thread-185878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:03:21.907 [DEBUG] [Thread-185878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:03:21.907 [DEBUG] [Thread-185878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:03:21.907 [DEBUG] [Thread-185878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:03:21.907 [DEBUG] [Thread-185878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:03:21.907 [DEBUG] [Thread-185878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:03:21.907 [DEBUG] [Thread-185878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:03:21.907 [DEBUG] [Thread-185878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:03:21.907 [DEBUG] [Thread-185878] [transport.py] [_log()] client lang: <none>
2026-02-14T13:03:21.907 [DEBUG] [Thread-185878] [transport.py] [_log()] server lang: <none>
2026-02-14T13:03:21.907 [DEBUG] [Thread-185878] [transport.py] [_log()] kex follows: False
2026-02-14T13:03:21.907 [DEBUG] [Thread-185878] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:03:21.907 [DEBUG] [Thread-185878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:03:21.907 [DEBUG] [Thread-185878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:03:21.907 [DEBUG] [Thread-185878] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:03:21.907 [DEBUG] [Thread-185878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:03:21.907 [DEBUG] [Thread-185878] [transport.py] [_log()] Compression: none
2026-02-14T13:03:21.907 [DEBUG] [Thread-185878] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:03:21.923 [DEBUG] [Thread-185878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:03:21.924 [DEBUG] [Thread-185878] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:03:21.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:03:21.925 [DEBUG] [Thread-185878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:03:21.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:03:21.926 [DEBUG] [Thread-185878] [transport.py] [_log()] userauth is OK
2026-02-14T13:03:21.927 [DEBUG] [Thread-185878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:03:21.927 [DEBUG] [Thread-185878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:03:21.927 [DEBUG] [Thread-185878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:03:21.927 [DEBUG] [Thread-185878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:03:21.950 [INFO] [Thread-185878] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:03:21.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:03:22.569 [DEBUG] [Thread-185878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:03:22.569 [DEBUG] [Thread-185878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:03:22.569 [DEBUG] [Thread-185878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:03:22.610 [DEBUG] [Thread-185878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:03:22.611 [DEBUG] [Thread-185878] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:03:22.614 [DEBUG] [Thread-185878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:03:22.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:03:22.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:03:22.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:03:22.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:03:22.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:03:22.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:03:22.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:03:22.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:03:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:03:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.460526 -999.00  +15.60  23.22     45   +3.80 1 1 1 1 1   888    0 12.95 82.35 ----- 18.0 23.2 182.8 26.6 21.7 -26.0 20.1 -31.6 20.7 -24.9 21.9 -25.9
2026-02-14T13:03:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:03:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:03:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.460526
2026-02-14T13:03:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:03:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:03:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:03:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:03:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:03:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:03:06', tmtdew=12.93, humidity=41.89, cloud=0.0, wind=24.9, temperature=15.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:03:09.446', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:03:22.641 [DEBUG] [Thread-185878] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:03:22.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T13:03:22.736 [DEBUG] [Thread-185881] [transport.py] [_log()] starting thread (client mode): 0xa2d567d0
2026-02-14T13:03:22.736 [DEBUG] [Thread-185881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:03:22.751 [DEBUG] [Thread-185881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:03:22.751 [INFO] [Thread-185881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:03:22.758 [DEBUG] [Thread-185881] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:03:22.759 [DEBUG] [Thread-185881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:03:22.759 [DEBUG] [Thread-185881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:03:22.759 [DEBUG] [Thread-185881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:03:22.759 [DEBUG] [Thread-185881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:03:22.759 [DEBUG] [Thread-185881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:03:22.759 [DEBUG] [Thread-185881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:03:22.759 [DEBUG] [Thread-185881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:03:22.759 [DEBUG] [Thread-185881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:03:22.759 [DEBUG] [Thread-185881] [transport.py] [_log()] client lang: <none>
2026-02-14T13:03:22.759 [DEBUG] [Thread-185881] [transport.py] [_log()] server lang: <none>
2026-02-14T13:03:22.759 [DEBUG] [Thread-185881] [transport.py] [_log()] kex follows: False
2026-02-14T13:03:22.759 [DEBUG] [Thread-185881] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:03:22.759 [DEBUG] [Thread-185881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:03:22.759 [DEBUG] [Thread-185881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:03:22.759 [DEBUG] [Thread-185881] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:03:22.759 [DEBUG] [Thread-185881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:03:22.759 [DEBUG] [Thread-185881] [transport.py] [_log()] Compression: none
2026-02-14T13:03:22.759 [DEBUG] [Thread-185881] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:03:22.815 [DEBUG] [Thread-185881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:03:22.816 [DEBUG] [Thread-185881] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:03:22.817 [DEBUG] [Thread-185881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:03:22.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:03:22.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:03:22.871 [DEBUG] [Thread-185881] [transport.py] [_log()] userauth is OK
2026-02-14T13:03:22.872 [DEBUG] [Thread-185881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:03:22.872 [DEBUG] [Thread-185881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:03:22.872 [DEBUG] [Thread-185881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:03:22.872 [DEBUG] [Thread-185881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:03:22.891 [INFO] [Thread-185881] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:03:22.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-14T13:03:22.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:03:22.999 [DEBUG] [Thread-185883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:03:23.710 [DEBUG] [Thread-185881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:03:23.710 [DEBUG] [Thread-185881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:03:23.758 [DEBUG] [Thread-185881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:03:23.759 [DEBUG] [Thread-185881] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:03:23.768 [DEBUG] [Thread-185881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:03:23.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:03:23.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:03:23.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:03:23.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:03:23.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:03:23.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:03:23.804 [DEBUG] [Thread-185881] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:03:26.365 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:03:26.366 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:03:31.980 [DEBUG] [Thread-185884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:03:47.028 [DEBUG] [Thread-185885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:03:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:03:53.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:03:53.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-14T13:03:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 3, 41), 13.78, 39.47, 0.0, 25.9, 16.12, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:03:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:03:41
2026-02-14T13:03:56.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:03:56.177 [DEBUG] [Thread-185886] [transport.py] [_log()] starting thread (client mode): 0xa2d54400
2026-02-14T13:03:56.177 [DEBUG] [Thread-185886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:03:56.197 [DEBUG] [Thread-185886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:03:56.197 [INFO] [Thread-185886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:03:56.200 [DEBUG] [Thread-185886] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:03:56.201 [DEBUG] [Thread-185886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:03:56.201 [DEBUG] [Thread-185886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:03:56.201 [DEBUG] [Thread-185886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:03:56.201 [DEBUG] [Thread-185886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:03:56.201 [DEBUG] [Thread-185886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:03:56.201 [DEBUG] [Thread-185886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:03:56.201 [DEBUG] [Thread-185886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:03:56.201 [DEBUG] [Thread-185886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:03:56.201 [DEBUG] [Thread-185886] [transport.py] [_log()] client lang: <none>
2026-02-14T13:03:56.201 [DEBUG] [Thread-185886] [transport.py] [_log()] server lang: <none>
2026-02-14T13:03:56.202 [DEBUG] [Thread-185886] [transport.py] [_log()] kex follows: False
2026-02-14T13:03:56.202 [DEBUG] [Thread-185886] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:03:56.202 [DEBUG] [Thread-185886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:03:56.202 [DEBUG] [Thread-185886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:03:56.202 [DEBUG] [Thread-185886] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:03:56.202 [DEBUG] [Thread-185886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:03:56.202 [DEBUG] [Thread-185886] [transport.py] [_log()] Compression: none
2026-02-14T13:03:56.202 [DEBUG] [Thread-185886] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:03:56.221 [DEBUG] [Thread-185886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:03:56.221 [DEBUG] [Thread-185886] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:03:56.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:03:56.222 [DEBUG] [Thread-185886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:03:56.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:03:56.225 [DEBUG] [Thread-185886] [transport.py] [_log()] userauth is OK
2026-02-14T13:03:56.225 [DEBUG] [Thread-185886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:03:56.225 [DEBUG] [Thread-185886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:03:56.225 [DEBUG] [Thread-185886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:03:56.225 [DEBUG] [Thread-185886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:03:56.262 [INFO] [Thread-185886] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:03:56.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:03:56.878 [DEBUG] [Thread-185886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:03:56.879 [DEBUG] [Thread-185886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:03:56.879 [DEBUG] [Thread-185886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:03:56.919 [DEBUG] [Thread-185886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:03:56.920 [DEBUG] [Thread-185886] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:03:56.923 [DEBUG] [Thread-185886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:03:56.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:03:56.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:03:56.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:03:56.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:03:56.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:03:56.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:03:56.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:03:56.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:03:56.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:03:56.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.460874 -999.00  +15.60  23.54     45   +3.90 1 1 1 1 1   888    0 13.68 89.21 ----- 19.2 23.5 159.2 27.7 21.5 -25.7 20.4 -25.0 20.6 -23.1 21.6 -25.6
2026-02-14T13:03:56.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:03:56.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:03:56.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.460874
2026-02-14T13:03:56.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:03:56.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:03:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:03:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:03:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:03:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:03:41', tmtdew=13.78, humidity=39.47, cloud=0.0, wind=25.9, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:03:39.514', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:03:56.949 [DEBUG] [Thread-185886] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:03:57.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-14T13:03:57.046 [DEBUG] [Thread-185889] [transport.py] [_log()] starting thread (client mode): 0xa2d133d0
2026-02-14T13:03:57.046 [DEBUG] [Thread-185889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:03:57.061 [DEBUG] [Thread-185889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:03:57.061 [INFO] [Thread-185889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:03:57.069 [DEBUG] [Thread-185889] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:03:57.069 [DEBUG] [Thread-185889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:03:57.069 [DEBUG] [Thread-185889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:03:57.069 [DEBUG] [Thread-185889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:03:57.069 [DEBUG] [Thread-185889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:03:57.069 [DEBUG] [Thread-185889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:03:57.069 [DEBUG] [Thread-185889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:03:57.069 [DEBUG] [Thread-185889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:03:57.070 [DEBUG] [Thread-185889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:03:57.070 [DEBUG] [Thread-185889] [transport.py] [_log()] client lang: <none>
2026-02-14T13:03:57.070 [DEBUG] [Thread-185889] [transport.py] [_log()] server lang: <none>
2026-02-14T13:03:57.070 [DEBUG] [Thread-185889] [transport.py] [_log()] kex follows: False
2026-02-14T13:03:57.070 [DEBUG] [Thread-185889] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:03:57.070 [DEBUG] [Thread-185889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:03:57.070 [DEBUG] [Thread-185889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:03:57.070 [DEBUG] [Thread-185889] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:03:57.070 [DEBUG] [Thread-185889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:03:57.070 [DEBUG] [Thread-185889] [transport.py] [_log()] Compression: none
2026-02-14T13:03:57.070 [DEBUG] [Thread-185889] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:03:57.128 [DEBUG] [Thread-185889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:03:57.128 [DEBUG] [Thread-185889] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:03:57.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:03:57.130 [DEBUG] [Thread-185889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:03:57.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:03:57.184 [DEBUG] [Thread-185889] [transport.py] [_log()] userauth is OK
2026-02-14T13:03:57.184 [DEBUG] [Thread-185889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:03:57.184 [DEBUG] [Thread-185889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:03:57.185 [DEBUG] [Thread-185889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:03:57.185 [DEBUG] [Thread-185889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:03:57.199 [INFO] [Thread-185889] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:03:57.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-14T13:03:57.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:03:57.995 [DEBUG] [Thread-185889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:03:57.996 [DEBUG] [Thread-185889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:03:58.044 [DEBUG] [Thread-185889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:03:58.044 [DEBUG] [Thread-185889] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:03:58.053 [DEBUG] [Thread-185889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:03:58.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:03:58.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-14T13:03:58.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-14T13:03:58.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:03:58.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:03:58.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:03:58.088 [DEBUG] [Thread-185889] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:04:02.063 [DEBUG] [Thread-185891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:04:17.125 [DEBUG] [Thread-185892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:04:23.042 [DEBUG] [Thread-185893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:04:26.509 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:04:26.510 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:04:28.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:04:28.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:04:28.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-14T13:04:29.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 4, 16), 13.07, 41.14, 0.0, 31.79, 15.21, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:04:29.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:04:16
2026-02-14T13:04:30.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:04:30.453 [DEBUG] [Thread-185894] [transport.py] [_log()] starting thread (client mode): 0xa2d130d0
2026-02-14T13:04:30.453 [DEBUG] [Thread-185894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:04:30.473 [DEBUG] [Thread-185894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:04:30.474 [INFO] [Thread-185894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:04:30.477 [DEBUG] [Thread-185894] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:04:30.477 [DEBUG] [Thread-185894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:04:30.477 [DEBUG] [Thread-185894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:04:30.477 [DEBUG] [Thread-185894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:04:30.477 [DEBUG] [Thread-185894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:04:30.478 [DEBUG] [Thread-185894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:04:30.478 [DEBUG] [Thread-185894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:04:30.478 [DEBUG] [Thread-185894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:04:30.478 [DEBUG] [Thread-185894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:04:30.478 [DEBUG] [Thread-185894] [transport.py] [_log()] client lang: <none>
2026-02-14T13:04:30.478 [DEBUG] [Thread-185894] [transport.py] [_log()] server lang: <none>
2026-02-14T13:04:30.478 [DEBUG] [Thread-185894] [transport.py] [_log()] kex follows: False
2026-02-14T13:04:30.478 [DEBUG] [Thread-185894] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:04:30.478 [DEBUG] [Thread-185894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:04:30.478 [DEBUG] [Thread-185894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:04:30.478 [DEBUG] [Thread-185894] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:04:30.478 [DEBUG] [Thread-185894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:04:30.479 [DEBUG] [Thread-185894] [transport.py] [_log()] Compression: none
2026-02-14T13:04:30.479 [DEBUG] [Thread-185894] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:04:30.497 [DEBUG] [Thread-185894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:04:30.498 [DEBUG] [Thread-185894] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:04:30.498 [DEBUG] [Thread-185894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:04:30.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:04:30.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:04:30.500 [DEBUG] [Thread-185894] [transport.py] [_log()] userauth is OK
2026-02-14T13:04:30.500 [DEBUG] [Thread-185894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:04:30.501 [DEBUG] [Thread-185894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:04:30.501 [DEBUG] [Thread-185894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:04:30.501 [DEBUG] [Thread-185894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:04:30.524 [INFO] [Thread-185894] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:04:30.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:04:31.165 [DEBUG] [Thread-185894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:04:31.165 [DEBUG] [Thread-185894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:04:31.165 [DEBUG] [Thread-185894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:04:31.206 [DEBUG] [Thread-185894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:04:31.207 [DEBUG] [Thread-185894] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:04:31.209 [DEBUG] [Thread-185894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:04:31.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:04:31.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:04:31.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:04:31.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:04:31.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:04:31.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:04:31.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:04:31.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:04:31.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:04:31.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.461221 -999.00  +15.60  24.23     45   +4.00 1 1 1 1 1   888    0 13.36 92.39 ----- 16.9 24.2 170.0 35.9 21.6 -26.2 20.4 -24.9 20.6 -24.7 21.9 -27.2
2026-02-14T13:04:31.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:04:31.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:04:31.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.461221
2026-02-14T13:04:31.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:04:31.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:04:31.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:04:31.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:04:31.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:04:31.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:04:16', tmtdew=13.07, humidity=41.14, cloud=0.0, wind=31.79, temperature=15.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:04:09.494', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:04:31.233 [DEBUG] [Thread-185894] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:04:31.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-14T13:04:32.161 [DEBUG] [Thread-185897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:04:47.211 [DEBUG] [Thread-185898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:05:02.251 [DEBUG] [Thread-185899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:05:17.287 [DEBUG] [Thread-185900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:05:23.074 [DEBUG] [Thread-185901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:05:26.658 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:05:26.659 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:05:32.325 [DEBUG] [Thread-185902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:05:47.360 [DEBUG] [Thread-185903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:06:02.394 [DEBUG] [Thread-185904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:06:17.430 [DEBUG] [Thread-185905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:06:23.110 [DEBUG] [Thread-185906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:06:26.805 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:06:26.806 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:06:32.465 [DEBUG] [Thread-185907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:06:45.688 [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-14T13:06:47.502 [DEBUG] [Thread-185908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:07:02.545 [DEBUG] [Thread-185909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:07:15.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:07:15.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:07:15.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-14T13:07:17.587 [DEBUG] [Thread-185910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:07:18.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 6, 38), 14.48, 37.58, 0.0, 28.12, 16.25, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:07:18.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:06:38
2026-02-14T13:07:18.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:07:18.649 [DEBUG] [Thread-185911] [transport.py] [_log()] starting thread (client mode): 0xa2d11b70
2026-02-14T13:07:18.649 [DEBUG] [Thread-185911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:07:18.670 [DEBUG] [Thread-185911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:07:18.670 [INFO] [Thread-185911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:07:18.674 [DEBUG] [Thread-185911] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:07:18.674 [DEBUG] [Thread-185911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:07:18.674 [DEBUG] [Thread-185911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:07:18.674 [DEBUG] [Thread-185911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:07:18.675 [DEBUG] [Thread-185911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:07:18.675 [DEBUG] [Thread-185911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:07:18.675 [DEBUG] [Thread-185911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:07:18.675 [DEBUG] [Thread-185911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:07:18.675 [DEBUG] [Thread-185911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:07:18.675 [DEBUG] [Thread-185911] [transport.py] [_log()] client lang: <none>
2026-02-14T13:07:18.675 [DEBUG] [Thread-185911] [transport.py] [_log()] server lang: <none>
2026-02-14T13:07:18.675 [DEBUG] [Thread-185911] [transport.py] [_log()] kex follows: False
2026-02-14T13:07:18.675 [DEBUG] [Thread-185911] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:07:18.675 [DEBUG] [Thread-185911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:07:18.675 [DEBUG] [Thread-185911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:07:18.675 [DEBUG] [Thread-185911] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:07:18.675 [DEBUG] [Thread-185911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:07:18.675 [DEBUG] [Thread-185911] [transport.py] [_log()] Compression: none
2026-02-14T13:07:18.675 [DEBUG] [Thread-185911] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:07:18.692 [DEBUG] [Thread-185911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:07:18.693 [DEBUG] [Thread-185911] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:07:18.693 [DEBUG] [Thread-185911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:07:18.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:07:18.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:07:18.696 [DEBUG] [Thread-185911] [transport.py] [_log()] userauth is OK
2026-02-14T13:07:18.696 [DEBUG] [Thread-185911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:07:18.696 [DEBUG] [Thread-185911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:07:18.696 [DEBUG] [Thread-185911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:07:18.696 [DEBUG] [Thread-185911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:07:18.733 [INFO] [Thread-185911] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:07:18.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:07:19.376 [DEBUG] [Thread-185911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:07:19.376 [DEBUG] [Thread-185911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:07:19.377 [DEBUG] [Thread-185911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:07:19.417 [DEBUG] [Thread-185911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:07:19.417 [DEBUG] [Thread-185911] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:07:19.421 [DEBUG] [Thread-185911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:07:19.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:07:19.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:07:19.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:07:19.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:07:19.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:07:19.443 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:07:19.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:07:19.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:07:19.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:07:19.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.462957 -999.00  +15.10  25.97     44   +3.20 1 1 1 1 1   888    0 13.94 96.50 ----- 27.4 26.0 182.4 37.5 21.4 -27.4 19.9 -29.6 20.5 -23.8 21.7 -26.3
2026-02-14T13:07:19.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:07:19.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:07:19.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.462957
2026-02-14T13:07:19.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:07:19.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:07:19.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:07:19.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:07:19.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:07:19.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:06:38', tmtdew=14.48, humidity=37.58, cloud=0.0, wind=28.12, temperature=16.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:06:39.485', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:07:19.446 [DEBUG] [Thread-185911] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:07:19.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-14T13:07:19.542 [DEBUG] [Thread-185914] [transport.py] [_log()] starting thread (client mode): 0xa2d13700
2026-02-14T13:07:19.543 [DEBUG] [Thread-185914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:07:19.557 [DEBUG] [Thread-185914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:07:19.557 [INFO] [Thread-185914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:07:19.565 [DEBUG] [Thread-185914] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:07:19.565 [DEBUG] [Thread-185914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:07:19.566 [DEBUG] [Thread-185914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:07:19.566 [DEBUG] [Thread-185914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:07:19.566 [DEBUG] [Thread-185914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:07:19.566 [DEBUG] [Thread-185914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:07:19.566 [DEBUG] [Thread-185914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:07:19.566 [DEBUG] [Thread-185914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:07:19.566 [DEBUG] [Thread-185914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:07:19.566 [DEBUG] [Thread-185914] [transport.py] [_log()] client lang: <none>
2026-02-14T13:07:19.566 [DEBUG] [Thread-185914] [transport.py] [_log()] server lang: <none>
2026-02-14T13:07:19.566 [DEBUG] [Thread-185914] [transport.py] [_log()] kex follows: False
2026-02-14T13:07:19.566 [DEBUG] [Thread-185914] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:07:19.566 [DEBUG] [Thread-185914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:07:19.566 [DEBUG] [Thread-185914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:07:19.567 [DEBUG] [Thread-185914] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:07:19.567 [DEBUG] [Thread-185914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:07:19.567 [DEBUG] [Thread-185914] [transport.py] [_log()] Compression: none
2026-02-14T13:07:19.567 [DEBUG] [Thread-185914] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:07:19.624 [DEBUG] [Thread-185914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:07:19.624 [DEBUG] [Thread-185914] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:07:19.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:07:19.626 [DEBUG] [Thread-185914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:07:19.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:07:19.680 [DEBUG] [Thread-185914] [transport.py] [_log()] userauth is OK
2026-02-14T13:07:19.681 [DEBUG] [Thread-185914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:07:19.681 [DEBUG] [Thread-185914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:07:19.681 [DEBUG] [Thread-185914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:07:19.681 [DEBUG] [Thread-185914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:07:19.699 [INFO] [Thread-185914] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:07:19.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-14T13:07:19.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:07:20.505 [DEBUG] [Thread-185914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:07:20.505 [DEBUG] [Thread-185914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:07:20.553 [DEBUG] [Thread-185914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:07:20.553 [DEBUG] [Thread-185914] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:07:20.562 [DEBUG] [Thread-185914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:07:20.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:07:20.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-14T13:07:20.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-14T13:07:20.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:07:20.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:07:20.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:07:20.596 [DEBUG] [Thread-185914] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:07:23.154 [DEBUG] [Thread-185916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:07:26.948 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:07:26.949 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:07:32.624 [DEBUG] [Thread-185917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:07:47.680 [DEBUG] [Thread-185918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:07:50.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:07:50.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:07:50.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-14T13:07:52.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 7, 13), 13.32, 40.48, 0.0, 35.55, 14.76, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:07:52.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:07:13
2026-02-14T13:07:53.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:07:53.483 [DEBUG] [Thread-185919] [transport.py] [_log()] starting thread (client mode): 0xa2d12dd0
2026-02-14T13:07:53.483 [DEBUG] [Thread-185919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:07:53.506 [DEBUG] [Thread-185919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:07:53.506 [INFO] [Thread-185919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:07:53.509 [DEBUG] [Thread-185919] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:07:53.509 [DEBUG] [Thread-185919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:07:53.509 [DEBUG] [Thread-185919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:07:53.509 [DEBUG] [Thread-185919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:07:53.509 [DEBUG] [Thread-185919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:07:53.509 [DEBUG] [Thread-185919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:07:53.509 [DEBUG] [Thread-185919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:07:53.510 [DEBUG] [Thread-185919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:07:53.510 [DEBUG] [Thread-185919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:07:53.510 [DEBUG] [Thread-185919] [transport.py] [_log()] client lang: <none>
2026-02-14T13:07:53.510 [DEBUG] [Thread-185919] [transport.py] [_log()] server lang: <none>
2026-02-14T13:07:53.510 [DEBUG] [Thread-185919] [transport.py] [_log()] kex follows: False
2026-02-14T13:07:53.510 [DEBUG] [Thread-185919] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:07:53.510 [DEBUG] [Thread-185919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:07:53.510 [DEBUG] [Thread-185919] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:07:53.510 [DEBUG] [Thread-185919] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:07:53.510 [DEBUG] [Thread-185919] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:07:53.510 [DEBUG] [Thread-185919] [transport.py] [_log()] Compression: none
2026-02-14T13:07:53.510 [DEBUG] [Thread-185919] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:07:53.529 [DEBUG] [Thread-185919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:07:53.529 [DEBUG] [Thread-185919] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:07:53.530 [DEBUG] [Thread-185919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:07:53.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:07:53.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:07:53.532 [DEBUG] [Thread-185919] [transport.py] [_log()] userauth is OK
2026-02-14T13:07:53.532 [DEBUG] [Thread-185919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:07:53.532 [DEBUG] [Thread-185919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:07:53.532 [DEBUG] [Thread-185919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:07:53.532 [DEBUG] [Thread-185919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:07:53.569 [INFO] [Thread-185919] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:07:53.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:07:54.202 [DEBUG] [Thread-185919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:07:54.203 [DEBUG] [Thread-185919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:07:54.203 [DEBUG] [Thread-185919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:07:54.243 [DEBUG] [Thread-185919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:07:54.244 [DEBUG] [Thread-185919] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:07:54.247 [DEBUG] [Thread-185919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:07:54.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:07:54.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:07:54.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:07:54.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:07:54.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:07:54.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:07:54.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:07:54.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:07:54.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:07:54.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.463304 -999.00  +15.10  26.29     44   +3.00 1 1 1 1 1   888    0 13.79 98.49 ----- 31.0 26.3 175.2 34.7 21.4 -26.1 19.9 -28.3 20.5 -25.3 21.5 -25.7
2026-02-14T13:07:54.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:07:54.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:07:54.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.463304
2026-02-14T13:07:54.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:07:54.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:07:54.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:07:54.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:07:54.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:07:54.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:07:13', tmtdew=13.32, humidity=40.48, cloud=0.0, wind=35.55, temperature=14.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:07:09.466', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:07:54.275 [DEBUG] [Thread-185919] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:07:54.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-14T13:07:54.372 [DEBUG] [Thread-185922] [transport.py] [_log()] starting thread (client mode): 0xa2d11cf0
2026-02-14T13:07:54.372 [DEBUG] [Thread-185922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:07:54.387 [DEBUG] [Thread-185922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:07:54.388 [INFO] [Thread-185922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:07:54.395 [DEBUG] [Thread-185922] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:07:54.395 [DEBUG] [Thread-185922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:07:54.395 [DEBUG] [Thread-185922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:07:54.395 [DEBUG] [Thread-185922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:07:54.395 [DEBUG] [Thread-185922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:07:54.395 [DEBUG] [Thread-185922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:07:54.395 [DEBUG] [Thread-185922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:07:54.396 [DEBUG] [Thread-185922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:07:54.396 [DEBUG] [Thread-185922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:07:54.396 [DEBUG] [Thread-185922] [transport.py] [_log()] client lang: <none>
2026-02-14T13:07:54.396 [DEBUG] [Thread-185922] [transport.py] [_log()] server lang: <none>
2026-02-14T13:07:54.396 [DEBUG] [Thread-185922] [transport.py] [_log()] kex follows: False
2026-02-14T13:07:54.396 [DEBUG] [Thread-185922] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:07:54.396 [DEBUG] [Thread-185922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:07:54.396 [DEBUG] [Thread-185922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:07:54.396 [DEBUG] [Thread-185922] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:07:54.396 [DEBUG] [Thread-185922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:07:54.396 [DEBUG] [Thread-185922] [transport.py] [_log()] Compression: none
2026-02-14T13:07:54.396 [DEBUG] [Thread-185922] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:07:54.452 [DEBUG] [Thread-185922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:07:54.452 [DEBUG] [Thread-185922] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:07:54.453 [DEBUG] [Thread-185922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:07:54.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:07:54.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:07:54.508 [DEBUG] [Thread-185922] [transport.py] [_log()] userauth is OK
2026-02-14T13:07:54.509 [DEBUG] [Thread-185922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:07:54.509 [DEBUG] [Thread-185922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:07:54.509 [DEBUG] [Thread-185922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:07:54.509 [DEBUG] [Thread-185922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:07:54.533 [INFO] [Thread-185922] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:07:54.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T13:07:54.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:07:55.392 [DEBUG] [Thread-185922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:07:55.392 [DEBUG] [Thread-185922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:07:55.440 [DEBUG] [Thread-185922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:07:55.440 [DEBUG] [Thread-185922] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:07:55.449 [DEBUG] [Thread-185922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:07:55.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:07:55.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-14T13:07:55.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:07:55.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:07:55.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:07:55.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:07:55.485 [DEBUG] [Thread-185922] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:08:02.710 [DEBUG] [Thread-185924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:08:17.760 [DEBUG] [Thread-185925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:08:23.187 [DEBUG] [Thread-185926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:08:25.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:08:25.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:08:25.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-14T13:08:27.095 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:08:27.097 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:08:27.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 7, 49), 13.6, 39.88, 0.0, 24.33, 14.79, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:08:27.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:07:49
2026-02-14T13:08:28.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:08:28.544 [DEBUG] [Thread-185927] [transport.py] [_log()] starting thread (client mode): 0xa2d11780
2026-02-14T13:08:28.544 [DEBUG] [Thread-185927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:08:28.564 [DEBUG] [Thread-185927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:08:28.564 [INFO] [Thread-185927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:08:28.565 [DEBUG] [Thread-185927] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:08:28.566 [DEBUG] [Thread-185927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:08:28.566 [DEBUG] [Thread-185927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:08:28.566 [DEBUG] [Thread-185927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:08:28.566 [DEBUG] [Thread-185927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:08:28.566 [DEBUG] [Thread-185927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:08:28.566 [DEBUG] [Thread-185927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:08:28.566 [DEBUG] [Thread-185927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:08:28.566 [DEBUG] [Thread-185927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:08:28.566 [DEBUG] [Thread-185927] [transport.py] [_log()] client lang: <none>
2026-02-14T13:08:28.566 [DEBUG] [Thread-185927] [transport.py] [_log()] server lang: <none>
2026-02-14T13:08:28.566 [DEBUG] [Thread-185927] [transport.py] [_log()] kex follows: False
2026-02-14T13:08:28.566 [DEBUG] [Thread-185927] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:08:28.567 [DEBUG] [Thread-185927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:08:28.567 [DEBUG] [Thread-185927] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:08:28.567 [DEBUG] [Thread-185927] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:08:28.567 [DEBUG] [Thread-185927] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:08:28.567 [DEBUG] [Thread-185927] [transport.py] [_log()] Compression: none
2026-02-14T13:08:28.567 [DEBUG] [Thread-185927] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:08:28.577 [DEBUG] [Thread-185927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:08:28.577 [DEBUG] [Thread-185927] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:08:28.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:08:28.578 [DEBUG] [Thread-185927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:08:28.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:08:28.581 [DEBUG] [Thread-185927] [transport.py] [_log()] userauth is OK
2026-02-14T13:08:28.581 [DEBUG] [Thread-185927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:08:28.581 [DEBUG] [Thread-185927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:08:28.581 [DEBUG] [Thread-185927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:08:28.582 [DEBUG] [Thread-185927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:08:28.607 [INFO] [Thread-185927] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:08:28.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:08:29.232 [DEBUG] [Thread-185927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:08:29.232 [DEBUG] [Thread-185927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:08:29.232 [DEBUG] [Thread-185927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:08:29.274 [DEBUG] [Thread-185927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:08:29.274 [DEBUG] [Thread-185927] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:08:29.277 [DEBUG] [Thread-185927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:08:29.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:08:29.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:08:29.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:08:29.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:08:29.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:08:29.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:08:29.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:08:29.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:08:29.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:08:29.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.463651 -999.00  +14.80  21.10     44   +2.90 1 1 1 1 1   888    0 13.78 100.09 ----- 22.7 21.1 174.6 29.2 21.1 -28.1 19.7 -27.2 20.2 -26.6 21.5 -28.0
2026-02-14T13:08:29.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:08:29.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:08:29.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.463651
2026-02-14T13:08:29.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:08:29.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:08:29.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:08:29.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:08:29.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:08:29.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:07:49', tmtdew=13.6, humidity=39.88, cloud=0.0, wind=24.33, temperature=14.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:07:39.446', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:08:29.306 [DEBUG] [Thread-185927] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:08:29.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-14T13:08:29.402 [DEBUG] [Thread-185930] [transport.py] [_log()] starting thread (client mode): 0xa2dc0ee0
2026-02-14T13:08:29.402 [DEBUG] [Thread-185930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:08:29.416 [DEBUG] [Thread-185930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:08:29.416 [INFO] [Thread-185930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:08:29.424 [DEBUG] [Thread-185930] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:08:29.424 [DEBUG] [Thread-185930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:08:29.425 [DEBUG] [Thread-185930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:08:29.425 [DEBUG] [Thread-185930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:08:29.425 [DEBUG] [Thread-185930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:08:29.425 [DEBUG] [Thread-185930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:08:29.425 [DEBUG] [Thread-185930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:08:29.425 [DEBUG] [Thread-185930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:08:29.425 [DEBUG] [Thread-185930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:08:29.425 [DEBUG] [Thread-185930] [transport.py] [_log()] client lang: <none>
2026-02-14T13:08:29.425 [DEBUG] [Thread-185930] [transport.py] [_log()] server lang: <none>
2026-02-14T13:08:29.425 [DEBUG] [Thread-185930] [transport.py] [_log()] kex follows: False
2026-02-14T13:08:29.425 [DEBUG] [Thread-185930] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:08:29.425 [DEBUG] [Thread-185930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:08:29.425 [DEBUG] [Thread-185930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:08:29.425 [DEBUG] [Thread-185930] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:08:29.425 [DEBUG] [Thread-185930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:08:29.425 [DEBUG] [Thread-185930] [transport.py] [_log()] Compression: none
2026-02-14T13:08:29.425 [DEBUG] [Thread-185930] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:08:29.484 [DEBUG] [Thread-185930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:08:29.485 [DEBUG] [Thread-185930] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:08:29.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:08:29.486 [DEBUG] [Thread-185930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:08:29.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:08:29.540 [DEBUG] [Thread-185930] [transport.py] [_log()] userauth is OK
2026-02-14T13:08:29.541 [DEBUG] [Thread-185930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:08:29.541 [DEBUG] [Thread-185930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:08:29.541 [DEBUG] [Thread-185930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:08:29.541 [DEBUG] [Thread-185930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:08:29.560 [INFO] [Thread-185930] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:08:29.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-14T13:08:29.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:08:30.347 [DEBUG] [Thread-185930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:08:30.348 [DEBUG] [Thread-185930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:08:30.395 [DEBUG] [Thread-185930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:08:30.396 [DEBUG] [Thread-185930] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:08:30.405 [DEBUG] [Thread-185930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:08:30.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:08:30.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-14T13:08:30.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-14T13:08:30.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:08:30.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:08:30.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:08:30.442 [DEBUG] [Thread-185930] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:08:32.800 [DEBUG] [Thread-185932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:08:47.852 [DEBUG] [Thread-185933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:09:00.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:09:00.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:09:00.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-14T13:09:02.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 8, 25), 13.5, 40.09, 0.0, 21.58, 14.69, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:09:02.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:08:25
2026-02-14T13:09:02.887 [DEBUG] [Thread-185934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:09:03.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:09:03.333 [DEBUG] [Thread-185935] [transport.py] [_log()] starting thread (client mode): 0xa2d57fd0
2026-02-14T13:09:03.333 [DEBUG] [Thread-185935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:09:03.353 [DEBUG] [Thread-185935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:09:03.353 [INFO] [Thread-185935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:09:03.356 [DEBUG] [Thread-185935] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:09:03.356 [DEBUG] [Thread-185935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:09:03.356 [DEBUG] [Thread-185935] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:09:03.356 [DEBUG] [Thread-185935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:09:03.356 [DEBUG] [Thread-185935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:09:03.356 [DEBUG] [Thread-185935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:09:03.356 [DEBUG] [Thread-185935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:09:03.356 [DEBUG] [Thread-185935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:09:03.356 [DEBUG] [Thread-185935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:09:03.356 [DEBUG] [Thread-185935] [transport.py] [_log()] client lang: <none>
2026-02-14T13:09:03.357 [DEBUG] [Thread-185935] [transport.py] [_log()] server lang: <none>
2026-02-14T13:09:03.357 [DEBUG] [Thread-185935] [transport.py] [_log()] kex follows: False
2026-02-14T13:09:03.357 [DEBUG] [Thread-185935] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:09:03.357 [DEBUG] [Thread-185935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:09:03.357 [DEBUG] [Thread-185935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:09:03.357 [DEBUG] [Thread-185935] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:09:03.357 [DEBUG] [Thread-185935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:09:03.357 [DEBUG] [Thread-185935] [transport.py] [_log()] Compression: none
2026-02-14T13:09:03.357 [DEBUG] [Thread-185935] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:09:03.375 [DEBUG] [Thread-185935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:09:03.376 [DEBUG] [Thread-185935] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:09:03.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:09:03.377 [DEBUG] [Thread-185935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:09:03.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:09:03.380 [DEBUG] [Thread-185935] [transport.py] [_log()] userauth is OK
2026-02-14T13:09:03.380 [DEBUG] [Thread-185935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:09:03.380 [DEBUG] [Thread-185935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:09:03.380 [DEBUG] [Thread-185935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:09:03.381 [DEBUG] [Thread-185935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:09:03.396 [INFO] [Thread-185935] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:09:03.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:09:04.033 [DEBUG] [Thread-185935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:09:04.034 [DEBUG] [Thread-185935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:09:04.034 [DEBUG] [Thread-185935] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:09:04.074 [DEBUG] [Thread-185935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:09:04.074 [DEBUG] [Thread-185935] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:09:04.076 [DEBUG] [Thread-185935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:09:04.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:09:04.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:09:04.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:09:04.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:09:04.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:09:04.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:09:04.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:09:04.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:09:04.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:09:04.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.464346 -999.00  +14.80  27.30     44   +2.80 1 1 1 1 1   888    0 14.76 122.43 ----- 29.1 27.3 171.2 39.3 21.3 -26.8 20.0 -29.1 20.4 -24.7 21.7 -26.8
2026-02-14T13:09:04.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:09:04.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:09:04.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.464346
2026-02-14T13:09:04.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:09:04.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:09:04.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:09:04.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:09:04.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:09:04.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:08:25', tmtdew=13.5, humidity=40.09, cloud=0.0, wind=21.58, temperature=14.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:08:39.494', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:09:04.098 [DEBUG] [Thread-185935] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:09:04.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-14T13:09:04.181 [DEBUG] [Thread-185938] [transport.py] [_log()] starting thread (client mode): 0xa2d54cd0
2026-02-14T13:09:04.181 [DEBUG] [Thread-185938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:09:04.195 [DEBUG] [Thread-185938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:09:04.195 [INFO] [Thread-185938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:09:04.202 [DEBUG] [Thread-185938] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:09:04.203 [DEBUG] [Thread-185938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:09:04.203 [DEBUG] [Thread-185938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:09:04.203 [DEBUG] [Thread-185938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:09:04.203 [DEBUG] [Thread-185938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:09:04.203 [DEBUG] [Thread-185938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:09:04.203 [DEBUG] [Thread-185938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:09:04.203 [DEBUG] [Thread-185938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:09:04.203 [DEBUG] [Thread-185938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:09:04.203 [DEBUG] [Thread-185938] [transport.py] [_log()] client lang: <none>
2026-02-14T13:09:04.203 [DEBUG] [Thread-185938] [transport.py] [_log()] server lang: <none>
2026-02-14T13:09:04.203 [DEBUG] [Thread-185938] [transport.py] [_log()] kex follows: False
2026-02-14T13:09:04.203 [DEBUG] [Thread-185938] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:09:04.203 [DEBUG] [Thread-185938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:09:04.203 [DEBUG] [Thread-185938] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:09:04.203 [DEBUG] [Thread-185938] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:09:04.203 [DEBUG] [Thread-185938] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:09:04.203 [DEBUG] [Thread-185938] [transport.py] [_log()] Compression: none
2026-02-14T13:09:04.203 [DEBUG] [Thread-185938] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:09:04.259 [DEBUG] [Thread-185938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:09:04.260 [DEBUG] [Thread-185938] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:09:04.260 [DEBUG] [Thread-185938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:09:04.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:09:04.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:09:04.317 [DEBUG] [Thread-185938] [transport.py] [_log()] userauth is OK
2026-02-14T13:09:04.317 [DEBUG] [Thread-185938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:09:04.317 [DEBUG] [Thread-185938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:09:04.317 [DEBUG] [Thread-185938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:09:04.317 [DEBUG] [Thread-185938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:09:04.339 [INFO] [Thread-185938] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:09:04.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T13:09:04.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:09:05.170 [DEBUG] [Thread-185938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:09:05.171 [DEBUG] [Thread-185938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:09:05.218 [DEBUG] [Thread-185938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:09:05.219 [DEBUG] [Thread-185938] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:09:05.228 [DEBUG] [Thread-185938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:09:05.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:09:05.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:09: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') -> 00000000
2026-02-14T13:09:05.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:09:05.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:09:05.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:09:05.264 [DEBUG] [Thread-185938] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:09:17.928 [DEBUG] [Thread-185940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:09:23.224 [DEBUG] [Thread-185941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:09:27.237 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:09:27.238 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:09:32.982 [DEBUG] [Thread-185942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:09:35.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:09:35.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:09:35.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-14T13:09:37.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 9), 13.85, 38.99, 0.0, 26.01, 15.21, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:09:37.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:09:00
2026-02-14T13:09:37.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:09:37.653 [DEBUG] [Thread-185943] [transport.py] [_log()] starting thread (client mode): 0xa2d22e90
2026-02-14T13:09:37.653 [DEBUG] [Thread-185943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:09:37.671 [DEBUG] [Thread-185943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:09:37.672 [INFO] [Thread-185943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:09:37.674 [DEBUG] [Thread-185943] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:09:37.675 [DEBUG] [Thread-185943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:09:37.675 [DEBUG] [Thread-185943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:09:37.675 [DEBUG] [Thread-185943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:09:37.675 [DEBUG] [Thread-185943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:09:37.675 [DEBUG] [Thread-185943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:09:37.675 [DEBUG] [Thread-185943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:09:37.675 [DEBUG] [Thread-185943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:09:37.675 [DEBUG] [Thread-185943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:09:37.675 [DEBUG] [Thread-185943] [transport.py] [_log()] client lang: <none>
2026-02-14T13:09:37.675 [DEBUG] [Thread-185943] [transport.py] [_log()] server lang: <none>
2026-02-14T13:09:37.675 [DEBUG] [Thread-185943] [transport.py] [_log()] kex follows: False
2026-02-14T13:09:37.675 [DEBUG] [Thread-185943] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:09:37.675 [DEBUG] [Thread-185943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:09:37.676 [DEBUG] [Thread-185943] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:09:37.676 [DEBUG] [Thread-185943] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:09:37.676 [DEBUG] [Thread-185943] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:09:37.676 [DEBUG] [Thread-185943] [transport.py] [_log()] Compression: none
2026-02-14T13:09:37.676 [DEBUG] [Thread-185943] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:09:37.694 [DEBUG] [Thread-185943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:09:37.695 [DEBUG] [Thread-185943] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:09:37.695 [DEBUG] [Thread-185943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:09:37.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:09:37.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:09:37.697 [DEBUG] [Thread-185943] [transport.py] [_log()] userauth is OK
2026-02-14T13:09:37.697 [DEBUG] [Thread-185943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:09:37.698 [DEBUG] [Thread-185943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:09:37.698 [DEBUG] [Thread-185943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:09:37.698 [DEBUG] [Thread-185943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:09:37.716 [INFO] [Thread-185943] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:09:37.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:09:38.449 [DEBUG] [Thread-185943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:09:38.449 [DEBUG] [Thread-185943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:09:38.450 [DEBUG] [Thread-185943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:09:38.490 [DEBUG] [Thread-185943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:09:38.490 [DEBUG] [Thread-185943] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:09:38.493 [DEBUG] [Thread-185943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:09:38.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:09:38.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:09:38.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:09:38.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:09:38.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:09:38.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:09:38.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:09:38.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:09:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:09:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.464693 -999.00  +14.80  15.34     44   +2.80 1 1 1 1 1   888    0 14.65 112.37 ----- 18.6 15.3 168.2 31.5 21.2 -27.0 20.1 -25.0 20.4 -24.6 21.6 -26.4
2026-02-14T13:09:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:09:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:09:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.464693
2026-02-14T13:09:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:09:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:09:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:09:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:09:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:09:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:09:00', tmtdew=13.85, humidity=38.99, cloud=0.0, wind=26.01, temperature=15.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:09:09.475', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:09:38.514 [DEBUG] [Thread-185943] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:09:38.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T13:09:38.600 [DEBUG] [Thread-185946] [transport.py] [_log()] starting thread (client mode): 0xa575a5c0
2026-02-14T13:09:38.600 [DEBUG] [Thread-185946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:09:38.614 [DEBUG] [Thread-185946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:09:38.614 [INFO] [Thread-185946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:09:38.622 [DEBUG] [Thread-185946] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:09:38.622 [DEBUG] [Thread-185946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:09:38.622 [DEBUG] [Thread-185946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:09:38.622 [DEBUG] [Thread-185946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:09:38.622 [DEBUG] [Thread-185946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:09:38.622 [DEBUG] [Thread-185946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:09:38.622 [DEBUG] [Thread-185946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:09:38.623 [DEBUG] [Thread-185946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:09:38.623 [DEBUG] [Thread-185946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:09:38.623 [DEBUG] [Thread-185946] [transport.py] [_log()] client lang: <none>
2026-02-14T13:09:38.623 [DEBUG] [Thread-185946] [transport.py] [_log()] server lang: <none>
2026-02-14T13:09:38.623 [DEBUG] [Thread-185946] [transport.py] [_log()] kex follows: False
2026-02-14T13:09:38.623 [DEBUG] [Thread-185946] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:09:38.623 [DEBUG] [Thread-185946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:09:38.623 [DEBUG] [Thread-185946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:09:38.623 [DEBUG] [Thread-185946] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:09:38.623 [DEBUG] [Thread-185946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:09:38.623 [DEBUG] [Thread-185946] [transport.py] [_log()] Compression: none
2026-02-14T13:09:38.623 [DEBUG] [Thread-185946] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:09:38.680 [DEBUG] [Thread-185946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:09:38.681 [DEBUG] [Thread-185946] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:09:38.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:09:38.682 [DEBUG] [Thread-185946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:09:38.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:09:38.736 [DEBUG] [Thread-185946] [transport.py] [_log()] userauth is OK
2026-02-14T13:09:38.737 [DEBUG] [Thread-185946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:09:38.737 [DEBUG] [Thread-185946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:09:38.737 [DEBUG] [Thread-185946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:09:38.737 [DEBUG] [Thread-185946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:09:38.755 [INFO] [Thread-185946] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:09:38.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-14T13:09:38.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:09:39.546 [DEBUG] [Thread-185946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:09:39.546 [DEBUG] [Thread-185946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:09:39.594 [DEBUG] [Thread-185946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:09:39.594 [DEBUG] [Thread-185946] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:09:39.603 [DEBUG] [Thread-185946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:09:39.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:09:39.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:09:39.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:09:39.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:09:39.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:09:39.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:09:39.636 [DEBUG] [Thread-185946] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:09:48.021 [DEBUG] [Thread-185948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:10:03.072 [DEBUG] [Thread-185949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:10:09.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:10:09.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:10:09.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-14T13:10:11.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 9, 37), 15.58, 34.83, 0.0, 23.89, 16.58, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:10:11.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:09:37
2026-02-14T13:10:12.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:10:12.284 [DEBUG] [Thread-185950] [transport.py] [_log()] starting thread (client mode): 0xa2d544f0
2026-02-14T13:10:12.285 [DEBUG] [Thread-185950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:10:12.304 [DEBUG] [Thread-185950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:10:12.304 [INFO] [Thread-185950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:10:12.307 [DEBUG] [Thread-185950] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:10:12.307 [DEBUG] [Thread-185950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:10:12.307 [DEBUG] [Thread-185950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:10:12.308 [DEBUG] [Thread-185950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:10:12.308 [DEBUG] [Thread-185950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:10:12.308 [DEBUG] [Thread-185950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:10:12.308 [DEBUG] [Thread-185950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:10:12.308 [DEBUG] [Thread-185950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:10:12.308 [DEBUG] [Thread-185950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:10:12.308 [DEBUG] [Thread-185950] [transport.py] [_log()] client lang: <none>
2026-02-14T13:10:12.308 [DEBUG] [Thread-185950] [transport.py] [_log()] server lang: <none>
2026-02-14T13:10:12.308 [DEBUG] [Thread-185950] [transport.py] [_log()] kex follows: False
2026-02-14T13:10:12.308 [DEBUG] [Thread-185950] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:10:12.308 [DEBUG] [Thread-185950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:10:12.308 [DEBUG] [Thread-185950] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:10:12.308 [DEBUG] [Thread-185950] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:10:12.308 [DEBUG] [Thread-185950] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:10:12.308 [DEBUG] [Thread-185950] [transport.py] [_log()] Compression: none
2026-02-14T13:10:12.309 [DEBUG] [Thread-185950] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:10:12.326 [DEBUG] [Thread-185950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:10:12.327 [DEBUG] [Thread-185950] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:10:12.327 [DEBUG] [Thread-185950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:10:12.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:10:12.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:10:12.329 [DEBUG] [Thread-185950] [transport.py] [_log()] userauth is OK
2026-02-14T13:10:12.329 [DEBUG] [Thread-185950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:10:12.329 [DEBUG] [Thread-185950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:10:12.329 [DEBUG] [Thread-185950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:10:12.330 [DEBUG] [Thread-185950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:10:12.353 [INFO] [Thread-185950] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:10:12.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:10:15.626 [DEBUG] [Thread-185950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:10:15.627 [DEBUG] [Thread-185950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:10:15.627 [DEBUG] [Thread-185950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:10:15.667 [DEBUG] [Thread-185950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:10:15.668 [DEBUG] [Thread-185950] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:10:15.671 [DEBUG] [Thread-185950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:10:15.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:10:15.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:10:15.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:10:15.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:10:15.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:10:15.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:10:15.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:10:15.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:10:15.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:10:15.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.465040 -999.00  +14.90  31.93     44   +2.80 1 1 2 1 1   888    0 14.42 112.22 ----- 28.1 31.9 175.6 36.4 21.4 -25.6 20.1 -26.1 20.5 -24.2 21.7 -25.9
2026-02-14T13:10:15.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:10:15.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:10:15.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.465040
2026-02-14T13:10:15.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:10:15.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:10:15.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:10:15.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:10:15.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:10:15.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:09:37', tmtdew=15.58, humidity=34.83, cloud=0.0, wind=23.89, temperature=16.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:09:39.456', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:10:15.698 [DEBUG] [Thread-185950] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:10: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-14T13:10:15.793 [DEBUG] [Thread-185953] [transport.py] [_log()] starting thread (client mode): 0xa2d56860
2026-02-14T13:10:15.793 [DEBUG] [Thread-185953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:10:15.807 [DEBUG] [Thread-185953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:10:15.807 [INFO] [Thread-185953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:10:15.815 [DEBUG] [Thread-185953] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:10:15.815 [DEBUG] [Thread-185953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:10:15.815 [DEBUG] [Thread-185953] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:10:15.816 [DEBUG] [Thread-185953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:10:15.816 [DEBUG] [Thread-185953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:10:15.816 [DEBUG] [Thread-185953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:10:15.816 [DEBUG] [Thread-185953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:10:15.816 [DEBUG] [Thread-185953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:10:15.816 [DEBUG] [Thread-185953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:10:15.816 [DEBUG] [Thread-185953] [transport.py] [_log()] client lang: <none>
2026-02-14T13:10:15.816 [DEBUG] [Thread-185953] [transport.py] [_log()] server lang: <none>
2026-02-14T13:10:15.816 [DEBUG] [Thread-185953] [transport.py] [_log()] kex follows: False
2026-02-14T13:10:15.816 [DEBUG] [Thread-185953] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:10:15.816 [DEBUG] [Thread-185953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:10:15.816 [DEBUG] [Thread-185953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:10:15.816 [DEBUG] [Thread-185953] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:10:15.816 [DEBUG] [Thread-185953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:10:15.816 [DEBUG] [Thread-185953] [transport.py] [_log()] Compression: none
2026-02-14T13:10:15.816 [DEBUG] [Thread-185953] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:10:15.872 [DEBUG] [Thread-185953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:10:15.873 [DEBUG] [Thread-185953] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:10:15.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:10:15.874 [DEBUG] [Thread-185953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:10:15.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:10:15.929 [DEBUG] [Thread-185953] [transport.py] [_log()] userauth is OK
2026-02-14T13:10:15.929 [DEBUG] [Thread-185953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:10:15.929 [DEBUG] [Thread-185953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:10:15.929 [DEBUG] [Thread-185953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:10:15.929 [DEBUG] [Thread-185953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:10:15.948 [INFO] [Thread-185953] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:10:15.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-14T13:10:15.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:10:16.757 [DEBUG] [Thread-185953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:10:16.757 [DEBUG] [Thread-185953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:10:16.805 [DEBUG] [Thread-185953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:10:16.806 [DEBUG] [Thread-185953] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:10:16.815 [DEBUG] [Thread-185953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:10:16.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:10:16.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-14T13:10:16.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:10:16.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:10:16.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:10:16.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:10:16.852 [DEBUG] [Thread-185953] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:10:18.103 [DEBUG] [Thread-185955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:10:23.272 [DEBUG] [Thread-185956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:10:27.381 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:10:27.382 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:10:33.158 [DEBUG] [Thread-185957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:10:46.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:10:46.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:10:46.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-14T13:10:48.192 [DEBUG] [Thread-185958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:10:48.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 10, 12), 14.45, 37.71, 0.0, 23.61, 15.26, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:10:48.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:10:12
2026-02-14T13:10:49.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:10:49.479 [DEBUG] [Thread-185959] [transport.py] [_log()] starting thread (client mode): 0xa2d56e60
2026-02-14T13:10:49.479 [DEBUG] [Thread-185959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:10:49.501 [DEBUG] [Thread-185959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:10:49.501 [INFO] [Thread-185959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:10:49.502 [DEBUG] [Thread-185959] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:10:49.502 [DEBUG] [Thread-185959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:10:49.502 [DEBUG] [Thread-185959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:10:49.503 [DEBUG] [Thread-185959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:10:49.503 [DEBUG] [Thread-185959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:10:49.503 [DEBUG] [Thread-185959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:10:49.503 [DEBUG] [Thread-185959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:10:49.503 [DEBUG] [Thread-185959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:10:49.503 [DEBUG] [Thread-185959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:10:49.503 [DEBUG] [Thread-185959] [transport.py] [_log()] client lang: <none>
2026-02-14T13:10:49.503 [DEBUG] [Thread-185959] [transport.py] [_log()] server lang: <none>
2026-02-14T13:10:49.503 [DEBUG] [Thread-185959] [transport.py] [_log()] kex follows: False
2026-02-14T13:10:49.503 [DEBUG] [Thread-185959] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:10:49.503 [DEBUG] [Thread-185959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:10:49.503 [DEBUG] [Thread-185959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:10:49.503 [DEBUG] [Thread-185959] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:10:49.503 [DEBUG] [Thread-185959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:10:49.503 [DEBUG] [Thread-185959] [transport.py] [_log()] Compression: none
2026-02-14T13:10:49.503 [DEBUG] [Thread-185959] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:10:49.521 [DEBUG] [Thread-185959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:10:49.522 [DEBUG] [Thread-185959] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:10:49.523 [DEBUG] [Thread-185959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:10:49.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:10:49.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:10:49.525 [DEBUG] [Thread-185959] [transport.py] [_log()] userauth is OK
2026-02-14T13:10:49.525 [DEBUG] [Thread-185959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:10:49.525 [DEBUG] [Thread-185959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:10:49.525 [DEBUG] [Thread-185959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:10:49.525 [DEBUG] [Thread-185959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:10:49.550 [INFO] [Thread-185959] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:10:49.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:10:50.169 [DEBUG] [Thread-185959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:10:50.170 [DEBUG] [Thread-185959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:10:50.170 [DEBUG] [Thread-185959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:10:50.210 [DEBUG] [Thread-185959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:10:50.210 [DEBUG] [Thread-185959] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:10:50.214 [DEBUG] [Thread-185959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:10:50.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:10:50.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:10:50.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:10:50.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:10:50.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:10:50.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:10:50.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:10:50.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:10:50.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:10:50.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.465388 -999.00  +14.50  29.57     44   +2.60 1 1 1 1 1   888    0 14.60 110.48 ----- 20.8 29.6 170.0 39.3 21.2 -29.0 19.6 -28.4 20.2 -27.9 21.6 -28.6
2026-02-14T13:10:50.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:10:50.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:10:50.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.465388
2026-02-14T13:10:50.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:10:50.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:10:50.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:10:50.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:10:50.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:10:50.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:10:12', tmtdew=14.45, humidity=37.71, cloud=0.0, wind=23.61, temperature=15.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:10:09.523', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:10:50.241 [DEBUG] [Thread-185959] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:10:50.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-14T13:10:50.340 [DEBUG] [Thread-185962] [transport.py] [_log()] starting thread (client mode): 0xa2ddcbe0
2026-02-14T13:10:50.340 [DEBUG] [Thread-185962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:10:50.355 [DEBUG] [Thread-185962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:10:50.355 [INFO] [Thread-185962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:10:50.362 [DEBUG] [Thread-185962] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:10:50.362 [DEBUG] [Thread-185962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:10:50.362 [DEBUG] [Thread-185962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:10:50.362 [DEBUG] [Thread-185962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:10:50.362 [DEBUG] [Thread-185962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:10:50.362 [DEBUG] [Thread-185962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:10:50.362 [DEBUG] [Thread-185962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:10:50.362 [DEBUG] [Thread-185962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:10:50.362 [DEBUG] [Thread-185962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:10:50.362 [DEBUG] [Thread-185962] [transport.py] [_log()] client lang: <none>
2026-02-14T13:10:50.362 [DEBUG] [Thread-185962] [transport.py] [_log()] server lang: <none>
2026-02-14T13:10:50.362 [DEBUG] [Thread-185962] [transport.py] [_log()] kex follows: False
2026-02-14T13:10:50.362 [DEBUG] [Thread-185962] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:10:50.362 [DEBUG] [Thread-185962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:10:50.362 [DEBUG] [Thread-185962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:10:50.362 [DEBUG] [Thread-185962] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:10:50.362 [DEBUG] [Thread-185962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:10:50.362 [DEBUG] [Thread-185962] [transport.py] [_log()] Compression: none
2026-02-14T13:10:50.362 [DEBUG] [Thread-185962] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:10:50.422 [DEBUG] [Thread-185962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:10:50.423 [DEBUG] [Thread-185962] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:10:50.423 [DEBUG] [Thread-185962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:10:50.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:10:50.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:10:50.480 [DEBUG] [Thread-185962] [transport.py] [_log()] userauth is OK
2026-02-14T13:10:50.480 [DEBUG] [Thread-185962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:10:50.480 [DEBUG] [Thread-185962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:10:50.480 [DEBUG] [Thread-185962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:10:50.480 [DEBUG] [Thread-185962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:10:50.495 [INFO] [Thread-185962] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:10:50.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-14T13:10:50.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:10:51.375 [DEBUG] [Thread-185962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:10:51.375 [DEBUG] [Thread-185962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:10:51.423 [DEBUG] [Thread-185962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:10:51.423 [DEBUG] [Thread-185962] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:10:51.434 [DEBUG] [Thread-185962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:10:51.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:10:51.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-14T13:10:51.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:10:51.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:10:51.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:10:51.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:10:51.476 [DEBUG] [Thread-185962] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:11:03.229 [DEBUG] [Thread-185964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:11:18.288 [DEBUG] [Thread-185965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:11:21.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:11:21.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:11:21.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-14T13:11:23.314 [DEBUG] [Thread-185966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:11:23.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 10, 47), 14.54, 37.25, 0.0, 23.61, 15.32, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:11:23.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:10:47
2026-02-14T13:11:23.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:11:23.985 [DEBUG] [Thread-185967] [transport.py] [_log()] starting thread (client mode): 0xa2ddd420
2026-02-14T13:11:23.985 [DEBUG] [Thread-185967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:11:24.006 [DEBUG] [Thread-185967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:11:24.006 [INFO] [Thread-185967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:11:24.010 [DEBUG] [Thread-185967] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:11:24.010 [DEBUG] [Thread-185967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:11:24.010 [DEBUG] [Thread-185967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:11:24.010 [DEBUG] [Thread-185967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:11:24.010 [DEBUG] [Thread-185967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:11:24.010 [DEBUG] [Thread-185967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:11:24.010 [DEBUG] [Thread-185967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:11:24.010 [DEBUG] [Thread-185967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:11:24.010 [DEBUG] [Thread-185967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:11:24.010 [DEBUG] [Thread-185967] [transport.py] [_log()] client lang: <none>
2026-02-14T13:11:24.010 [DEBUG] [Thread-185967] [transport.py] [_log()] server lang: <none>
2026-02-14T13:11:24.010 [DEBUG] [Thread-185967] [transport.py] [_log()] kex follows: False
2026-02-14T13:11:24.010 [DEBUG] [Thread-185967] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:11:24.010 [DEBUG] [Thread-185967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:11:24.010 [DEBUG] [Thread-185967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:11:24.010 [DEBUG] [Thread-185967] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:11:24.010 [DEBUG] [Thread-185967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:11:24.010 [DEBUG] [Thread-185967] [transport.py] [_log()] Compression: none
2026-02-14T13:11:24.010 [DEBUG] [Thread-185967] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:11:24.027 [DEBUG] [Thread-185967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:11:24.028 [DEBUG] [Thread-185967] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:11:24.028 [DEBUG] [Thread-185967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:11:24.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:11:24.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:11:24.029 [DEBUG] [Thread-185967] [transport.py] [_log()] userauth is OK
2026-02-14T13:11:24.029 [DEBUG] [Thread-185967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:11:24.029 [DEBUG] [Thread-185967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:11:24.029 [DEBUG] [Thread-185967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:11:24.029 [DEBUG] [Thread-185967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:11:24.038 [INFO] [Thread-185967] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:11:24.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:11:24.678 [DEBUG] [Thread-185967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:11:24.679 [DEBUG] [Thread-185967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:11:24.679 [DEBUG] [Thread-185967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:11:24.719 [DEBUG] [Thread-185967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:11:24.720 [DEBUG] [Thread-185967] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:11:24.723 [DEBUG] [Thread-185967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:11:24.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:11:24.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:11:24.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:11:24.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:11:24.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:11:24.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:11:24.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:11:24.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:11:24.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:11:24.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.465735 -999.00  +14.50  17.71     44   +2.60 1 1 1 1 1   888    0 14.56 110.98 ----- 20.3 17.7 168.2 28.8 21.1 -26.3 19.8 -25.3 20.3 -26.2 21.4 -26.3
2026-02-14T13:11:24.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:11:24.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:11:24.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.465735
2026-02-14T13:11:24.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:11:24.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:11:24.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:11:24.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:11:24.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:11:24.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:10:47', tmtdew=14.54, humidity=37.25, cloud=0.0, wind=23.61, temperature=15.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:10:39.504', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:11:24.752 [DEBUG] [Thread-185967] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:11:24.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-14T13:11:24.846 [DEBUG] [Thread-185970] [transport.py] [_log()] starting thread (client mode): 0xa2dc0670
2026-02-14T13:11:24.846 [DEBUG] [Thread-185970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:11:24.861 [DEBUG] [Thread-185970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:11:24.861 [INFO] [Thread-185970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:11:24.869 [DEBUG] [Thread-185970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:11:24.869 [DEBUG] [Thread-185970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:11:24.869 [DEBUG] [Thread-185970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:11:24.869 [DEBUG] [Thread-185970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:11:24.869 [DEBUG] [Thread-185970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:11:24.869 [DEBUG] [Thread-185970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:11:24.869 [DEBUG] [Thread-185970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:11:24.869 [DEBUG] [Thread-185970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:11:24.869 [DEBUG] [Thread-185970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:11:24.869 [DEBUG] [Thread-185970] [transport.py] [_log()] client lang: <none>
2026-02-14T13:11:24.869 [DEBUG] [Thread-185970] [transport.py] [_log()] server lang: <none>
2026-02-14T13:11:24.869 [DEBUG] [Thread-185970] [transport.py] [_log()] kex follows: False
2026-02-14T13:11:24.869 [DEBUG] [Thread-185970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:11:24.869 [DEBUG] [Thread-185970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:11:24.870 [DEBUG] [Thread-185970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:11:24.870 [DEBUG] [Thread-185970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:11:24.870 [DEBUG] [Thread-185970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:11:24.870 [DEBUG] [Thread-185970] [transport.py] [_log()] Compression: none
2026-02-14T13:11:24.870 [DEBUG] [Thread-185970] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:11:24.928 [DEBUG] [Thread-185970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:11:24.929 [DEBUG] [Thread-185970] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:11:24.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:11:24.930 [DEBUG] [Thread-185970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:11:24.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:11:24.984 [DEBUG] [Thread-185970] [transport.py] [_log()] userauth is OK
2026-02-14T13:11:24.985 [DEBUG] [Thread-185970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:11:24.985 [DEBUG] [Thread-185970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:11:24.985 [DEBUG] [Thread-185970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:11:24.985 [DEBUG] [Thread-185970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:11:25.005 [INFO] [Thread-185970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:11:25.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-14T13:11:25.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:11:25.892 [DEBUG] [Thread-185970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:11:25.892 [DEBUG] [Thread-185970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:11:25.940 [DEBUG] [Thread-185970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:11:25.941 [DEBUG] [Thread-185970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:11:25.950 [DEBUG] [Thread-185970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:11:25.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:11:25.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:11:25.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-14T13:11:25.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:11:25.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:11:25.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:11:25.987 [DEBUG] [Thread-185970] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:11:27.522 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:11:27.523 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:11:33.325 [DEBUG] [Thread-185972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:11:48.377 [DEBUG] [Thread-185973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:11:55.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:11:55.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:11:56.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-14T13:11:57.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 11, 23), 14.5, 37.38, 0.0, 27.84, 15.39, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:11:57.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:11:23
2026-02-14T13:11:58.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:11:58.384 [DEBUG] [Thread-185974] [transport.py] [_log()] starting thread (client mode): 0xa2d22f20
2026-02-14T13:11:58.384 [DEBUG] [Thread-185974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:11:58.404 [DEBUG] [Thread-185974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:11:58.404 [INFO] [Thread-185974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:11:58.407 [DEBUG] [Thread-185974] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:11:58.407 [DEBUG] [Thread-185974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:11:58.407 [DEBUG] [Thread-185974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:11:58.407 [DEBUG] [Thread-185974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:11:58.407 [DEBUG] [Thread-185974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:11:58.407 [DEBUG] [Thread-185974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:11:58.407 [DEBUG] [Thread-185974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:11:58.407 [DEBUG] [Thread-185974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:11:58.407 [DEBUG] [Thread-185974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:11:58.407 [DEBUG] [Thread-185974] [transport.py] [_log()] client lang: <none>
2026-02-14T13:11:58.407 [DEBUG] [Thread-185974] [transport.py] [_log()] server lang: <none>
2026-02-14T13:11:58.408 [DEBUG] [Thread-185974] [transport.py] [_log()] kex follows: False
2026-02-14T13:11:58.408 [DEBUG] [Thread-185974] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:11:58.408 [DEBUG] [Thread-185974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:11:58.408 [DEBUG] [Thread-185974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:11:58.408 [DEBUG] [Thread-185974] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:11:58.408 [DEBUG] [Thread-185974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:11:58.408 [DEBUG] [Thread-185974] [transport.py] [_log()] Compression: none
2026-02-14T13:11:58.408 [DEBUG] [Thread-185974] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:11:58.426 [DEBUG] [Thread-185974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:11:58.427 [DEBUG] [Thread-185974] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:11:58.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:11:58.429 [DEBUG] [Thread-185974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:11:58.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:11:58.431 [DEBUG] [Thread-185974] [transport.py] [_log()] userauth is OK
2026-02-14T13:11:58.431 [DEBUG] [Thread-185974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:11:58.431 [DEBUG] [Thread-185974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:11:58.431 [DEBUG] [Thread-185974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:11:58.431 [DEBUG] [Thread-185974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:11:58.467 [INFO] [Thread-185974] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:11:58.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:11:59.125 [DEBUG] [Thread-185974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:11:59.125 [DEBUG] [Thread-185974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:11:59.125 [DEBUG] [Thread-185974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:11:59.166 [DEBUG] [Thread-185974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:11:59.167 [DEBUG] [Thread-185974] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:11:59.170 [DEBUG] [Thread-185974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:11:59.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:11:59.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:11:59.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:11:59.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:11:59.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:11:59.192 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:11:59.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:11:59.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:11:59.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:11:59.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.466082 -999.00  +14.80  32.31     44   +2.70 1 1 2 1 1   888    0 14.24 109.90 ----- 28.0 32.3 176.6 46.0 21.2 -26.7 19.8 -24.8 20.4 -25.0 21.6 -25.9
2026-02-14T13:11:59.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:11:59.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:11:59.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.466082
2026-02-14T13:11:59.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:11:59.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:11:59.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:11:59.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:11:59.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:11:59.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:11:23', tmtdew=14.5, humidity=37.38, cloud=0.0, wind=27.84, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:11:09.485', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:11:59.196 [DEBUG] [Thread-185974] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:11:59.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-14T13:11:59.294 [DEBUG] [Thread-185977] [transport.py] [_log()] starting thread (client mode): 0xa2d20250
2026-02-14T13:11:59.294 [DEBUG] [Thread-185977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:11:59.309 [DEBUG] [Thread-185977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:11:59.309 [INFO] [Thread-185977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:11:59.317 [DEBUG] [Thread-185977] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:11:59.317 [DEBUG] [Thread-185977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:11:59.317 [DEBUG] [Thread-185977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:11:59.317 [DEBUG] [Thread-185977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:11:59.317 [DEBUG] [Thread-185977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:11:59.317 [DEBUG] [Thread-185977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:11:59.317 [DEBUG] [Thread-185977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:11:59.318 [DEBUG] [Thread-185977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:11:59.318 [DEBUG] [Thread-185977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:11:59.318 [DEBUG] [Thread-185977] [transport.py] [_log()] client lang: <none>
2026-02-14T13:11:59.318 [DEBUG] [Thread-185977] [transport.py] [_log()] server lang: <none>
2026-02-14T13:11:59.318 [DEBUG] [Thread-185977] [transport.py] [_log()] kex follows: False
2026-02-14T13:11:59.318 [DEBUG] [Thread-185977] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:11:59.318 [DEBUG] [Thread-185977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:11:59.318 [DEBUG] [Thread-185977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:11:59.318 [DEBUG] [Thread-185977] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:11:59.318 [DEBUG] [Thread-185977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:11:59.318 [DEBUG] [Thread-185977] [transport.py] [_log()] Compression: none
2026-02-14T13:11:59.318 [DEBUG] [Thread-185977] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:11:59.376 [DEBUG] [Thread-185977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:11:59.377 [DEBUG] [Thread-185977] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:11:59.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:11:59.378 [DEBUG] [Thread-185977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:11:59.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:11:59.432 [DEBUG] [Thread-185977] [transport.py] [_log()] userauth is OK
2026-02-14T13:11:59.433 [DEBUG] [Thread-185977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:11:59.433 [DEBUG] [Thread-185977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:11:59.433 [DEBUG] [Thread-185977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:11:59.433 [DEBUG] [Thread-185977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:11:59.451 [INFO] [Thread-185977] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:11: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-14T13:11:59.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:12:00.271 [DEBUG] [Thread-185977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:12:00.271 [DEBUG] [Thread-185977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:12:00.320 [DEBUG] [Thread-185977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:12:00.320 [DEBUG] [Thread-185977] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:12:00.328 [DEBUG] [Thread-185977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:12:00.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:12:00.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:12:00.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:12:00.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:12:00.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:12:00.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:12:00.360 [DEBUG] [Thread-185977] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:12:03.413 [DEBUG] [Thread-185979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:12:18.463 [DEBUG] [Thread-185980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:12:23.368 [DEBUG] [Thread-185981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:12:27.663 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:12:27.664 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:12:30.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:12:30.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:12:30.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-14T13:12:32.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 11, 59), 14.44, 37.61, 0.0, 30.96, 15.19, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:12:32.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:11:59
2026-02-14T13:12:32.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:12:32.836 [DEBUG] [Thread-185982] [transport.py] [_log()] starting thread (client mode): 0xa2ddde40
2026-02-14T13:12:32.836 [DEBUG] [Thread-185982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:12:32.856 [DEBUG] [Thread-185982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:12:32.856 [INFO] [Thread-185982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:12:32.859 [DEBUG] [Thread-185982] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:12:32.859 [DEBUG] [Thread-185982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:12:32.859 [DEBUG] [Thread-185982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:12:32.859 [DEBUG] [Thread-185982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:12:32.859 [DEBUG] [Thread-185982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:12:32.859 [DEBUG] [Thread-185982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:12:32.859 [DEBUG] [Thread-185982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:12:32.859 [DEBUG] [Thread-185982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:12:32.859 [DEBUG] [Thread-185982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:12:32.859 [DEBUG] [Thread-185982] [transport.py] [_log()] client lang: <none>
2026-02-14T13:12:32.859 [DEBUG] [Thread-185982] [transport.py] [_log()] server lang: <none>
2026-02-14T13:12:32.859 [DEBUG] [Thread-185982] [transport.py] [_log()] kex follows: False
2026-02-14T13:12:32.859 [DEBUG] [Thread-185982] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:12:32.860 [DEBUG] [Thread-185982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:12:32.860 [DEBUG] [Thread-185982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:12:32.860 [DEBUG] [Thread-185982] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:12:32.860 [DEBUG] [Thread-185982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:12:32.860 [DEBUG] [Thread-185982] [transport.py] [_log()] Compression: none
2026-02-14T13:12:32.860 [DEBUG] [Thread-185982] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:12:32.882 [DEBUG] [Thread-185982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:12:32.883 [DEBUG] [Thread-185982] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:12:32.883 [DEBUG] [Thread-185982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:12:32.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:12:32.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:12:32.885 [DEBUG] [Thread-185982] [transport.py] [_log()] userauth is OK
2026-02-14T13:12:32.885 [DEBUG] [Thread-185982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:12:32.885 [DEBUG] [Thread-185982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:12:32.885 [DEBUG] [Thread-185982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:12:32.885 [DEBUG] [Thread-185982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:12:32.905 [INFO] [Thread-185982] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:12:32.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:12:33.500 [DEBUG] [Thread-185984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:12:33.553 [DEBUG] [Thread-185982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:12:33.553 [DEBUG] [Thread-185982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:12:33.554 [DEBUG] [Thread-185982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:12:33.595 [DEBUG] [Thread-185982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:12:33.595 [DEBUG] [Thread-185982] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:12:33.598 [DEBUG] [Thread-185982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:12:33.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:12:33.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:12:33.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:12:33.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:12:33.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:12:33.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:12:33.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:12:33.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:12:33.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:12:33.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.466429 -999.00  +14.80  20.40     44   +2.70 1 1 1 1 1   888    0 14.36 108.94 ----- 24.6 20.4 154.4 34.3 21.2 -27.7 20.0 -25.4 20.3 -25.6 21.6 -27.4
2026-02-14T13:12:33.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:12:33.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:12:33.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.466429
2026-02-14T13:12:33.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:12:33.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:12:33.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:12:33.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:12:33.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:12:33.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:11:59', tmtdew=14.44, humidity=37.61, cloud=0.0, wind=30.96, temperature=15.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:11:39.466', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:12:33.624 [DEBUG] [Thread-185982] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:12:33.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-14T13:12:33.720 [DEBUG] [Thread-185986] [transport.py] [_log()] starting thread (client mode): 0xa2d19c60
2026-02-14T13:12:33.720 [DEBUG] [Thread-185986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:12:33.734 [DEBUG] [Thread-185986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:12:33.735 [INFO] [Thread-185986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:12:33.742 [DEBUG] [Thread-185986] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:12:33.743 [DEBUG] [Thread-185986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:12:33.743 [DEBUG] [Thread-185986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:12:33.743 [DEBUG] [Thread-185986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:12:33.743 [DEBUG] [Thread-185986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:12:33.743 [DEBUG] [Thread-185986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:12:33.743 [DEBUG] [Thread-185986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:12:33.743 [DEBUG] [Thread-185986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:12:33.743 [DEBUG] [Thread-185986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:12:33.743 [DEBUG] [Thread-185986] [transport.py] [_log()] client lang: <none>
2026-02-14T13:12:33.743 [DEBUG] [Thread-185986] [transport.py] [_log()] server lang: <none>
2026-02-14T13:12:33.743 [DEBUG] [Thread-185986] [transport.py] [_log()] kex follows: False
2026-02-14T13:12:33.743 [DEBUG] [Thread-185986] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:12:33.743 [DEBUG] [Thread-185986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:12:33.743 [DEBUG] [Thread-185986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:12:33.743 [DEBUG] [Thread-185986] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:12:33.743 [DEBUG] [Thread-185986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:12:33.743 [DEBUG] [Thread-185986] [transport.py] [_log()] Compression: none
2026-02-14T13:12:33.744 [DEBUG] [Thread-185986] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:12:33.800 [DEBUG] [Thread-185986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:12:33.801 [DEBUG] [Thread-185986] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:12:33.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:12:33.802 [DEBUG] [Thread-185986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:12:33.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:12:33.856 [DEBUG] [Thread-185986] [transport.py] [_log()] userauth is OK
2026-02-14T13:12:33.857 [DEBUG] [Thread-185986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:12:33.857 [DEBUG] [Thread-185986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:12:33.857 [DEBUG] [Thread-185986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:12:33.857 [DEBUG] [Thread-185986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:12:33.875 [INFO] [Thread-185986] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:12:33.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-14T13:12:33.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:12:34.685 [DEBUG] [Thread-185986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:12:34.685 [DEBUG] [Thread-185986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:12:34.733 [DEBUG] [Thread-185986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:12:34.733 [DEBUG] [Thread-185986] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:12:34.742 [DEBUG] [Thread-185986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:12:34.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:12:34.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:12:34.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:12:34.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:12:34.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:12:34.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:12:34.779 [DEBUG] [Thread-185986] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:12:48.541 [DEBUG] [Thread-185988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:13:03.591 [DEBUG] [Thread-185989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:13:04.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:13:04.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:13:04.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-14T13:13:06.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 12, 34), 15.3, 35.3, 0.0, 29.22, 15.75, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:13:06.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:12:34
2026-02-14T13:13:07.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:13:07.223 [DEBUG] [Thread-185990] [transport.py] [_log()] starting thread (client mode): 0xa2d18c40
2026-02-14T13:13:07.223 [DEBUG] [Thread-185990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:13:07.244 [DEBUG] [Thread-185990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:13:07.244 [INFO] [Thread-185990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:13:07.247 [DEBUG] [Thread-185990] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:13:07.247 [DEBUG] [Thread-185990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:13:07.247 [DEBUG] [Thread-185990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:13:07.247 [DEBUG] [Thread-185990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:13:07.247 [DEBUG] [Thread-185990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:13:07.247 [DEBUG] [Thread-185990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:13:07.247 [DEBUG] [Thread-185990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:13:07.247 [DEBUG] [Thread-185990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:13:07.247 [DEBUG] [Thread-185990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:13:07.247 [DEBUG] [Thread-185990] [transport.py] [_log()] client lang: <none>
2026-02-14T13:13:07.247 [DEBUG] [Thread-185990] [transport.py] [_log()] server lang: <none>
2026-02-14T13:13:07.247 [DEBUG] [Thread-185990] [transport.py] [_log()] kex follows: False
2026-02-14T13:13:07.247 [DEBUG] [Thread-185990] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:13:07.247 [DEBUG] [Thread-185990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:13:07.247 [DEBUG] [Thread-185990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:13:07.247 [DEBUG] [Thread-185990] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:13:07.247 [DEBUG] [Thread-185990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:13:07.247 [DEBUG] [Thread-185990] [transport.py] [_log()] Compression: none
2026-02-14T13:13:07.248 [DEBUG] [Thread-185990] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:13:07.265 [DEBUG] [Thread-185990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:13:07.265 [DEBUG] [Thread-185990] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:13:07.266 [DEBUG] [Thread-185990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:13:07.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:13:07.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:13:07.268 [DEBUG] [Thread-185990] [transport.py] [_log()] userauth is OK
2026-02-14T13:13:07.268 [DEBUG] [Thread-185990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:13:07.268 [DEBUG] [Thread-185990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:13:07.268 [DEBUG] [Thread-185990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:13:07.268 [DEBUG] [Thread-185990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:13:07.293 [INFO] [Thread-185990] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:13:07.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:13:08.037 [DEBUG] [Thread-185990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:13:08.038 [DEBUG] [Thread-185990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:13:08.038 [DEBUG] [Thread-185990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:13:08.078 [DEBUG] [Thread-185990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:13:08.079 [DEBUG] [Thread-185990] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:13:08.082 [DEBUG] [Thread-185990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:13:08.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:13:08.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:13:08.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:13:08.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:13:08.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:13:08.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:13:08.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:13:08.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:13:08.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:13:08.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.466776 -999.00  +14.50  21.16     44   +2.70 1 1 1 1 1   888    0 14.76 115.45 ----- 22.6 21.2 142.4 28.2 21.2 -27.2 20.1 -25.4 20.3 -25.7 21.5 -27.5
2026-02-14T13:13:08.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:13:08.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:13:08.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.466776
2026-02-14T13:13:08.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:13:08.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:13:08.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:13:08.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:13:08.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:13:08.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:12:34', tmtdew=15.3, humidity=35.3, cloud=0.0, wind=29.22, temperature=15.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:12:09.446', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:13:08.108 [DEBUG] [Thread-185990] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:13:08.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-14T13:13:08.214 [DEBUG] [Thread-185993] [transport.py] [_log()] starting thread (client mode): 0xa2d22620
2026-02-14T13:13:08.214 [DEBUG] [Thread-185993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:13:08.228 [DEBUG] [Thread-185993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:13:08.228 [INFO] [Thread-185993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:13:08.236 [DEBUG] [Thread-185993] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:13:08.236 [DEBUG] [Thread-185993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:13:08.236 [DEBUG] [Thread-185993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:13:08.236 [DEBUG] [Thread-185993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:13:08.236 [DEBUG] [Thread-185993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:13:08.236 [DEBUG] [Thread-185993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:13:08.236 [DEBUG] [Thread-185993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:13:08.236 [DEBUG] [Thread-185993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:13:08.236 [DEBUG] [Thread-185993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:13:08.236 [DEBUG] [Thread-185993] [transport.py] [_log()] client lang: <none>
2026-02-14T13:13:08.236 [DEBUG] [Thread-185993] [transport.py] [_log()] server lang: <none>
2026-02-14T13:13:08.236 [DEBUG] [Thread-185993] [transport.py] [_log()] kex follows: False
2026-02-14T13:13:08.236 [DEBUG] [Thread-185993] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:13:08.236 [DEBUG] [Thread-185993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:13:08.237 [DEBUG] [Thread-185993] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:13:08.237 [DEBUG] [Thread-185993] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:13:08.237 [DEBUG] [Thread-185993] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:13:08.237 [DEBUG] [Thread-185993] [transport.py] [_log()] Compression: none
2026-02-14T13:13:08.237 [DEBUG] [Thread-185993] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:13:08.304 [DEBUG] [Thread-185993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:13:08.305 [DEBUG] [Thread-185993] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:13:08.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:13:08.306 [DEBUG] [Thread-185993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:13:08.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:13:08.360 [DEBUG] [Thread-185993] [transport.py] [_log()] userauth is OK
2026-02-14T13:13:08.360 [DEBUG] [Thread-185993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:13:08.361 [DEBUG] [Thread-185993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:13:08.361 [DEBUG] [Thread-185993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:13:08.361 [DEBUG] [Thread-185993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:13:08.379 [INFO] [Thread-185993] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:13:08.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-14T13:13:08.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:13:09.163 [DEBUG] [Thread-185993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:13:09.163 [DEBUG] [Thread-185993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:13:09.210 [DEBUG] [Thread-185993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:13:09.211 [DEBUG] [Thread-185993] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:13:09.219 [DEBUG] [Thread-185993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:13:09.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:13:09.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:13:09.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-14T13:13:09.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:13:09.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:13:09.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:13:09.250 [DEBUG] [Thread-185993] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:13:18.627 [DEBUG] [Thread-185995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:13:23.401 [DEBUG] [Thread-185996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:13:27.805 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:13:27.806 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:13:33.682 [DEBUG] [Thread-185997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:13:39.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:13:39.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:13:39.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-14T13:13:41.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 13, 9), 14.26, 37.74, 0.0, 25.76, 14.86, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:13:41.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:13:09
2026-02-14T13:13:41.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:13:41.649 [DEBUG] [Thread-185998] [transport.py] [_log()] starting thread (client mode): 0xa2dc3430
2026-02-14T13:13:41.650 [DEBUG] [Thread-185998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:13:41.671 [DEBUG] [Thread-185998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:13:41.671 [INFO] [Thread-185998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:13:41.674 [DEBUG] [Thread-185998] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:13:41.674 [DEBUG] [Thread-185998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:13:41.674 [DEBUG] [Thread-185998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:13:41.674 [DEBUG] [Thread-185998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:13:41.674 [DEBUG] [Thread-185998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:13:41.675 [DEBUG] [Thread-185998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:13:41.675 [DEBUG] [Thread-185998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:13:41.675 [DEBUG] [Thread-185998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:13:41.675 [DEBUG] [Thread-185998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:13:41.675 [DEBUG] [Thread-185998] [transport.py] [_log()] client lang: <none>
2026-02-14T13:13:41.675 [DEBUG] [Thread-185998] [transport.py] [_log()] server lang: <none>
2026-02-14T13:13:41.675 [DEBUG] [Thread-185998] [transport.py] [_log()] kex follows: False
2026-02-14T13:13:41.675 [DEBUG] [Thread-185998] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:13:41.675 [DEBUG] [Thread-185998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:13:41.675 [DEBUG] [Thread-185998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:13:41.675 [DEBUG] [Thread-185998] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:13:41.675 [DEBUG] [Thread-185998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:13:41.676 [DEBUG] [Thread-185998] [transport.py] [_log()] Compression: none
2026-02-14T13:13:41.676 [DEBUG] [Thread-185998] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:13:41.695 [DEBUG] [Thread-185998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:13:41.696 [DEBUG] [Thread-185998] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:13:41.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:13:41.697 [DEBUG] [Thread-185998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:13:41.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:13:41.700 [DEBUG] [Thread-185998] [transport.py] [_log()] userauth is OK
2026-02-14T13:13:41.700 [DEBUG] [Thread-185998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:13:41.700 [DEBUG] [Thread-185998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:13:41.700 [DEBUG] [Thread-185998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:13:41.700 [DEBUG] [Thread-185998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:13:41.736 [INFO] [Thread-185998] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:13:41.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:13:42.382 [DEBUG] [Thread-185998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:13:42.383 [DEBUG] [Thread-185998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:13:42.383 [DEBUG] [Thread-185998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:13:42.423 [DEBUG] [Thread-185998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:13:42.424 [DEBUG] [Thread-185998] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:13:42.427 [DEBUG] [Thread-185998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:13:42.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:13:42.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:13:42.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:13:42.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:13:42.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:13:42.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:13:42.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:13:42.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:13:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:13:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.467124 -999.00  +14.60  13.81     45   +2.90 1 1 1 1 1   888    0 14.68 112.55 ----- 15.9 13.8 171.4 27.4 21.3 -25.8 20.2 -23.7 20.4 -24.2 21.6 -25.0
2026-02-14T13:13:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:13:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:13:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.467124
2026-02-14T13:13:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:13:42.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:13:42.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:13:42.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:13:42.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:13:42.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:13:09', tmtdew=14.26, humidity=37.74, cloud=0.0, wind=25.76, temperature=14.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:12:39.514', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:13:42.456 [DEBUG] [Thread-185998] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:13:42.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-14T13:13:42.552 [DEBUG] [Thread-186001] [transport.py] [_log()] starting thread (client mode): 0xa2d3cca0
2026-02-14T13:13:42.552 [DEBUG] [Thread-186001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:13:42.567 [DEBUG] [Thread-186001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:13:42.567 [INFO] [Thread-186001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:13:42.574 [DEBUG] [Thread-186001] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:13:42.575 [DEBUG] [Thread-186001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:13:42.575 [DEBUG] [Thread-186001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:13:42.575 [DEBUG] [Thread-186001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:13:42.575 [DEBUG] [Thread-186001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:13:42.575 [DEBUG] [Thread-186001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:13:42.575 [DEBUG] [Thread-186001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:13:42.575 [DEBUG] [Thread-186001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:13:42.575 [DEBUG] [Thread-186001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:13:42.575 [DEBUG] [Thread-186001] [transport.py] [_log()] client lang: <none>
2026-02-14T13:13:42.575 [DEBUG] [Thread-186001] [transport.py] [_log()] server lang: <none>
2026-02-14T13:13:42.575 [DEBUG] [Thread-186001] [transport.py] [_log()] kex follows: False
2026-02-14T13:13:42.575 [DEBUG] [Thread-186001] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:13:42.575 [DEBUG] [Thread-186001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:13:42.575 [DEBUG] [Thread-186001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:13:42.575 [DEBUG] [Thread-186001] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:13:42.575 [DEBUG] [Thread-186001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:13:42.575 [DEBUG] [Thread-186001] [transport.py] [_log()] Compression: none
2026-02-14T13:13:42.576 [DEBUG] [Thread-186001] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:13:42.633 [DEBUG] [Thread-186001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:13:42.633 [DEBUG] [Thread-186001] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:13:42.634 [DEBUG] [Thread-186001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:13:42.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:13:42.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:13:42.688 [DEBUG] [Thread-186001] [transport.py] [_log()] userauth is OK
2026-02-14T13:13:42.689 [DEBUG] [Thread-186001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:13:42.689 [DEBUG] [Thread-186001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:13:42.689 [DEBUG] [Thread-186001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:13:42.689 [DEBUG] [Thread-186001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:13:42.707 [INFO] [Thread-186001] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:13:42.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-14T13:13:42.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:13:43.576 [DEBUG] [Thread-186001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:13:43.577 [DEBUG] [Thread-186001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:13:43.624 [DEBUG] [Thread-186001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:13:43.624 [DEBUG] [Thread-186001] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:13:43.633 [DEBUG] [Thread-186001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:13:43.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:13:43.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-14T13:13:43.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:13:43.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:13:43.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:13:43.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:13:43.670 [DEBUG] [Thread-186001] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:13:48.721 [DEBUG] [Thread-186003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:14:03.776 [DEBUG] [Thread-186004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:14:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:14:13.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:14:13.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-14T13:14:15.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 13, 44), 13.25, 40.41, 0.0, 21.35, 14.33, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:14:15.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:13:44
2026-02-14T13:14:16.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:14:16.169 [DEBUG] [Thread-186005] [transport.py] [_log()] starting thread (client mode): 0xa2d577c0
2026-02-14T13:14:16.169 [DEBUG] [Thread-186005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:14:16.191 [DEBUG] [Thread-186005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:14:16.191 [INFO] [Thread-186005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:14:16.194 [DEBUG] [Thread-186005] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:14:16.194 [DEBUG] [Thread-186005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:14:16.194 [DEBUG] [Thread-186005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:14:16.194 [DEBUG] [Thread-186005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:14:16.194 [DEBUG] [Thread-186005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:14:16.194 [DEBUG] [Thread-186005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:14:16.194 [DEBUG] [Thread-186005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:14:16.194 [DEBUG] [Thread-186005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:14:16.194 [DEBUG] [Thread-186005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:14:16.194 [DEBUG] [Thread-186005] [transport.py] [_log()] client lang: <none>
2026-02-14T13:14:16.194 [DEBUG] [Thread-186005] [transport.py] [_log()] server lang: <none>
2026-02-14T13:14:16.194 [DEBUG] [Thread-186005] [transport.py] [_log()] kex follows: False
2026-02-14T13:14:16.194 [DEBUG] [Thread-186005] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:14:16.195 [DEBUG] [Thread-186005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:14:16.195 [DEBUG] [Thread-186005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:14:16.195 [DEBUG] [Thread-186005] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:14:16.195 [DEBUG] [Thread-186005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:14:16.195 [DEBUG] [Thread-186005] [transport.py] [_log()] Compression: none
2026-02-14T13:14:16.195 [DEBUG] [Thread-186005] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:14:16.211 [DEBUG] [Thread-186005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:14:16.212 [DEBUG] [Thread-186005] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:14:16.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:14:16.213 [DEBUG] [Thread-186005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:14:16.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:14:16.215 [DEBUG] [Thread-186005] [transport.py] [_log()] userauth is OK
2026-02-14T13:14:16.215 [DEBUG] [Thread-186005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:14:16.215 [DEBUG] [Thread-186005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:14:16.215 [DEBUG] [Thread-186005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:14:16.215 [DEBUG] [Thread-186005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:14:16.241 [INFO] [Thread-186005] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:14:16.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:14:16.818 [DEBUG] [Thread-186005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:14:16.818 [DEBUG] [Thread-186005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:14:16.819 [DEBUG] [Thread-186005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:14:16.860 [DEBUG] [Thread-186005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:14:16.860 [DEBUG] [Thread-186005] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:14:16.864 [DEBUG] [Thread-186005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:14:16.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:14:16.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:14:16.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:14:16.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:14:16.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:14:16.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:14:16.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:14:16.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:14:16.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:14:16.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.468165 -999.00  +15.10  18.44     45   +3.40 1 1 1 1 1   888    0 14.89 114.96 ----- 18.8 18.4 182.8 27.0 21.6 -26.8 20.2 -28.7 20.7 -24.5 22.0 -25.2
2026-02-14T13:14:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:14:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:14:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.468165
2026-02-14T13:14:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:14:16.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:14:16.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:14:16.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:14:16.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:14:16.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:13:44', tmtdew=13.25, humidity=40.41, cloud=0.0, wind=21.35, temperature=14.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:14:09.456', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:14:16.894 [DEBUG] [Thread-186005] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:14:16.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-14T13:14:16.990 [DEBUG] [Thread-186008] [transport.py] [_log()] starting thread (client mode): 0xa2ddd390
2026-02-14T13:14:16.990 [DEBUG] [Thread-186008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:14:17.004 [DEBUG] [Thread-186008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:14:17.004 [INFO] [Thread-186008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:14:17.012 [DEBUG] [Thread-186008] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:14:17.012 [DEBUG] [Thread-186008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:14:17.012 [DEBUG] [Thread-186008] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:14:17.012 [DEBUG] [Thread-186008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:14:17.012 [DEBUG] [Thread-186008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:14:17.012 [DEBUG] [Thread-186008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:14:17.013 [DEBUG] [Thread-186008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:14:17.013 [DEBUG] [Thread-186008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:14:17.013 [DEBUG] [Thread-186008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:14:17.013 [DEBUG] [Thread-186008] [transport.py] [_log()] client lang: <none>
2026-02-14T13:14:17.013 [DEBUG] [Thread-186008] [transport.py] [_log()] server lang: <none>
2026-02-14T13:14:17.013 [DEBUG] [Thread-186008] [transport.py] [_log()] kex follows: False
2026-02-14T13:14:17.013 [DEBUG] [Thread-186008] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:14:17.013 [DEBUG] [Thread-186008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:14:17.013 [DEBUG] [Thread-186008] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:14:17.013 [DEBUG] [Thread-186008] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:14:17.013 [DEBUG] [Thread-186008] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:14:17.013 [DEBUG] [Thread-186008] [transport.py] [_log()] Compression: none
2026-02-14T13:14:17.013 [DEBUG] [Thread-186008] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:14:17.072 [DEBUG] [Thread-186008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:14:17.073 [DEBUG] [Thread-186008] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:14:17.074 [DEBUG] [Thread-186008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:14:17.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:14:17.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:14:17.129 [DEBUG] [Thread-186008] [transport.py] [_log()] userauth is OK
2026-02-14T13:14:17.129 [DEBUG] [Thread-186008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:14:17.129 [DEBUG] [Thread-186008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:14:17.129 [DEBUG] [Thread-186008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:14:17.129 [DEBUG] [Thread-186008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:14:17.147 [INFO] [Thread-186008] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:14:17.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-14T13:14:17.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:14:17.981 [DEBUG] [Thread-186008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:14:17.981 [DEBUG] [Thread-186008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:14:18.029 [DEBUG] [Thread-186008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:14:18.029 [DEBUG] [Thread-186008] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:14:18.038 [DEBUG] [Thread-186008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:14:18.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:14:18.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-14T13:14:18.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-14T13:14:18.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:14:18.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:14:18.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:14:18.073 [DEBUG] [Thread-186008] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:14:18.812 [DEBUG] [Thread-186010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:14:23.437 [DEBUG] [Thread-186011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:14:27.943 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:14:27.944 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:14:33.862 [DEBUG] [Thread-186012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:14:48.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:14:48.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:14:48.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:14:48.901 [DEBUG] [Thread-186013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:14:50.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 14, 20), 12.91, 41.35, 0.0, 22.16, 14.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:14:50.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:14:20
2026-02-14T13:14:50.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:14:50.745 [DEBUG] [Thread-186014] [transport.py] [_log()] starting thread (client mode): 0xa2d1b220
2026-02-14T13:14:50.745 [DEBUG] [Thread-186014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:14:50.769 [DEBUG] [Thread-186014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:14:50.769 [INFO] [Thread-186014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:14:50.771 [DEBUG] [Thread-186014] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:14:50.771 [DEBUG] [Thread-186014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:14:50.771 [DEBUG] [Thread-186014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:14:50.772 [DEBUG] [Thread-186014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:14:50.772 [DEBUG] [Thread-186014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:14:50.772 [DEBUG] [Thread-186014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:14:50.772 [DEBUG] [Thread-186014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:14:50.772 [DEBUG] [Thread-186014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:14:50.772 [DEBUG] [Thread-186014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:14:50.772 [DEBUG] [Thread-186014] [transport.py] [_log()] client lang: <none>
2026-02-14T13:14:50.772 [DEBUG] [Thread-186014] [transport.py] [_log()] server lang: <none>
2026-02-14T13:14:50.772 [DEBUG] [Thread-186014] [transport.py] [_log()] kex follows: False
2026-02-14T13:14:50.772 [DEBUG] [Thread-186014] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:14:50.772 [DEBUG] [Thread-186014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:14:50.772 [DEBUG] [Thread-186014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:14:50.772 [DEBUG] [Thread-186014] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:14:50.772 [DEBUG] [Thread-186014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:14:50.772 [DEBUG] [Thread-186014] [transport.py] [_log()] Compression: none
2026-02-14T13:14:50.772 [DEBUG] [Thread-186014] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:14:50.784 [DEBUG] [Thread-186014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:14:50.784 [DEBUG] [Thread-186014] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:14:50.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:14:50.785 [DEBUG] [Thread-186014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:14:50.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:14:50.788 [DEBUG] [Thread-186014] [transport.py] [_log()] userauth is OK
2026-02-14T13:14:50.788 [DEBUG] [Thread-186014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:14:50.788 [DEBUG] [Thread-186014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:14:50.788 [DEBUG] [Thread-186014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:14:50.788 [DEBUG] [Thread-186014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:14:50.806 [INFO] [Thread-186014] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:14:50.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:14:51.383 [DEBUG] [Thread-186014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:14:51.383 [DEBUG] [Thread-186014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:14:51.384 [DEBUG] [Thread-186014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:14:51.425 [DEBUG] [Thread-186014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:14:51.425 [DEBUG] [Thread-186014] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:14:51.428 [DEBUG] [Thread-186014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:14:51.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:14:51.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:14:51.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:14:51.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:14:51.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:14:51.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:14:51.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:14:51.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:14:51.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:14:51.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.468512 -999.00  +15.10  18.96     46   +3.60 1 1 1 1 1   888    0 14.60 112.20 ----- 12.5 19.0 149.2 24.2 21.6 -26.5 20.4 -24.0 20.7 -24.2 21.9 -26.4
2026-02-14T13:14:51.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:14:51.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:14:51.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.468512
2026-02-14T13:14:51.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:14:51.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:14:51.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:14:51.456 [DEBUG] [Thread-186014] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:14:51.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:14:51.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:14:51.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:14:20', tmtdew=12.91, humidity=41.35, cloud=0.0, wind=22.16, temperature=14.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:14:39.437', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:14:51.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-14T13:14:51.563 [DEBUG] [Thread-186017] [transport.py] [_log()] starting thread (client mode): 0xa2dc1e40
2026-02-14T13:14:51.563 [DEBUG] [Thread-186017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:14:51.577 [DEBUG] [Thread-186017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:14:51.577 [INFO] [Thread-186017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:14:51.585 [DEBUG] [Thread-186017] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:14:51.585 [DEBUG] [Thread-186017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:14:51.585 [DEBUG] [Thread-186017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:14:51.585 [DEBUG] [Thread-186017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:14:51.585 [DEBUG] [Thread-186017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:14:51.586 [DEBUG] [Thread-186017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:14:51.586 [DEBUG] [Thread-186017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:14:51.586 [DEBUG] [Thread-186017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:14:51.586 [DEBUG] [Thread-186017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:14:51.586 [DEBUG] [Thread-186017] [transport.py] [_log()] client lang: <none>
2026-02-14T13:14:51.586 [DEBUG] [Thread-186017] [transport.py] [_log()] server lang: <none>
2026-02-14T13:14:51.586 [DEBUG] [Thread-186017] [transport.py] [_log()] kex follows: False
2026-02-14T13:14:51.586 [DEBUG] [Thread-186017] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:14:51.586 [DEBUG] [Thread-186017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:14:51.586 [DEBUG] [Thread-186017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:14:51.586 [DEBUG] [Thread-186017] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:14:51.586 [DEBUG] [Thread-186017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:14:51.586 [DEBUG] [Thread-186017] [transport.py] [_log()] Compression: none
2026-02-14T13:14:51.586 [DEBUG] [Thread-186017] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:14:51.644 [DEBUG] [Thread-186017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:14:51.645 [DEBUG] [Thread-186017] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:14:51.645 [DEBUG] [Thread-186017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:14:51.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:14:51.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:14:51.700 [DEBUG] [Thread-186017] [transport.py] [_log()] userauth is OK
2026-02-14T13:14:51.700 [DEBUG] [Thread-186017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:14:51.701 [DEBUG] [Thread-186017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:14:51.701 [DEBUG] [Thread-186017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:14:51.701 [DEBUG] [Thread-186017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:14:51.724 [INFO] [Thread-186017] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:14: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-14T13:14:51.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:14:52.505 [DEBUG] [Thread-186017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:14:52.505 [DEBUG] [Thread-186017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:14:52.554 [DEBUG] [Thread-186017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:14:52.554 [DEBUG] [Thread-186017] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:14:52.563 [DEBUG] [Thread-186017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:14:52.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:14:52.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-14T13:14:52.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:14:52.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:14:52.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:14:52.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:14:52.599 [DEBUG] [Thread-186017] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:15:03.938 [DEBUG] [Thread-186019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:15:18.990 [DEBUG] [Thread-186020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:15:22.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:15:22.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:15:22.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:15:23.481 [DEBUG] [Thread-186021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:15:24.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 14, 55), 13.25, 40.52, 0.0, 27.08, 15.14, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:15:24.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:14:55
2026-02-14T13:15:25.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:15:25.303 [DEBUG] [Thread-186022] [transport.py] [_log()] starting thread (client mode): 0xa2dc3dc0
2026-02-14T13:15:25.303 [DEBUG] [Thread-186022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:15:25.316 [DEBUG] [Thread-186022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:15:25.317 [INFO] [Thread-186022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:15:25.320 [DEBUG] [Thread-186022] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:15:25.320 [DEBUG] [Thread-186022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:15:25.320 [DEBUG] [Thread-186022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:15:25.320 [DEBUG] [Thread-186022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:15:25.320 [DEBUG] [Thread-186022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:15:25.320 [DEBUG] [Thread-186022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:15:25.320 [DEBUG] [Thread-186022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:15:25.320 [DEBUG] [Thread-186022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:15:25.320 [DEBUG] [Thread-186022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:15:25.320 [DEBUG] [Thread-186022] [transport.py] [_log()] client lang: <none>
2026-02-14T13:15:25.320 [DEBUG] [Thread-186022] [transport.py] [_log()] server lang: <none>
2026-02-14T13:15:25.320 [DEBUG] [Thread-186022] [transport.py] [_log()] kex follows: False
2026-02-14T13:15:25.320 [DEBUG] [Thread-186022] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:15:25.320 [DEBUG] [Thread-186022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:15:25.320 [DEBUG] [Thread-186022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:15:25.320 [DEBUG] [Thread-186022] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:15:25.320 [DEBUG] [Thread-186022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:15:25.320 [DEBUG] [Thread-186022] [transport.py] [_log()] Compression: none
2026-02-14T13:15:25.320 [DEBUG] [Thread-186022] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:15:25.337 [DEBUG] [Thread-186022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:15:25.337 [DEBUG] [Thread-186022] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:15:25.337 [DEBUG] [Thread-186022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:15:25.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:15:25.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:15:25.339 [DEBUG] [Thread-186022] [transport.py] [_log()] userauth is OK
2026-02-14T13:15:25.339 [DEBUG] [Thread-186022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:15:25.339 [DEBUG] [Thread-186022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:15:25.339 [DEBUG] [Thread-186022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:15:25.339 [DEBUG] [Thread-186022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:15:25.357 [INFO] [Thread-186022] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:15:25.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:15:25.996 [DEBUG] [Thread-186022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:15:25.997 [DEBUG] [Thread-186022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:15:25.997 [DEBUG] [Thread-186022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:15:26.038 [DEBUG] [Thread-186022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:15:26.038 [DEBUG] [Thread-186022] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:15:26.041 [DEBUG] [Thread-186022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:15:26.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:15:26.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:15:26.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:15:26.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:15:26.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:15:26.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:15:26.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:15:26.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:15:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:15:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.468860 -999.00  +15.10  22.44     45   +3.30 1 1 1 1 1   888    0 14.80 110.39 ----- 29.7 22.4 154.4 35.1 21.7 -25.4 20.5 -25.3 20.9 -22.8 22.1 -24.9
2026-02-14T13:15:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:15:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:15:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.468860
2026-02-14T13:15:26.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:15:26.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:15:26.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:15:26.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:15:26.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:15:26.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:14:55', tmtdew=13.25, humidity=40.52, cloud=0.0, wind=27.08, temperature=15.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:15:09.504', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:15:26.069 [DEBUG] [Thread-186022] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:15:26.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-14T13:15:26.164 [DEBUG] [Thread-186025] [transport.py] [_log()] starting thread (client mode): 0xa5741d80
2026-02-14T13:15:26.164 [DEBUG] [Thread-186025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:15:26.183 [DEBUG] [Thread-186025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:15:26.183 [INFO] [Thread-186025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:15:26.191 [DEBUG] [Thread-186025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:15:26.191 [DEBUG] [Thread-186025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:15:26.191 [DEBUG] [Thread-186025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:15:26.191 [DEBUG] [Thread-186025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:15:26.191 [DEBUG] [Thread-186025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:15:26.191 [DEBUG] [Thread-186025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:15:26.191 [DEBUG] [Thread-186025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:15:26.191 [DEBUG] [Thread-186025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:15:26.191 [DEBUG] [Thread-186025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:15:26.191 [DEBUG] [Thread-186025] [transport.py] [_log()] client lang: <none>
2026-02-14T13:15:26.191 [DEBUG] [Thread-186025] [transport.py] [_log()] server lang: <none>
2026-02-14T13:15:26.191 [DEBUG] [Thread-186025] [transport.py] [_log()] kex follows: False
2026-02-14T13:15:26.191 [DEBUG] [Thread-186025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:15:26.192 [DEBUG] [Thread-186025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:15:26.192 [DEBUG] [Thread-186025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:15:26.192 [DEBUG] [Thread-186025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:15:26.192 [DEBUG] [Thread-186025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:15:26.192 [DEBUG] [Thread-186025] [transport.py] [_log()] Compression: none
2026-02-14T13:15:26.192 [DEBUG] [Thread-186025] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:15:26.252 [DEBUG] [Thread-186025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:15:26.253 [DEBUG] [Thread-186025] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:15:26.254 [DEBUG] [Thread-186025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:15:26.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:15:26.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:15:26.309 [DEBUG] [Thread-186025] [transport.py] [_log()] userauth is OK
2026-02-14T13:15:26.309 [DEBUG] [Thread-186025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:15:26.309 [DEBUG] [Thread-186025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:15:26.309 [DEBUG] [Thread-186025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:15:26.310 [DEBUG] [Thread-186025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:15:26.328 [INFO] [Thread-186025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:15:26.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-14T13:15:26.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:15:27.148 [DEBUG] [Thread-186025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:15:27.148 [DEBUG] [Thread-186025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:15:27.196 [DEBUG] [Thread-186025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:15:27.196 [DEBUG] [Thread-186025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:15:27.205 [DEBUG] [Thread-186025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:15:27.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:15:27.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-14T13:15:27.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-14T13:15:27.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:15:27.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:15:27.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:15:27.242 [DEBUG] [Thread-186025] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:15:28.084 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:15:28.085 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:15:34.030 [DEBUG] [Thread-186027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:15:49.083 [DEBUG] [Thread-186028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:15:57.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:15:57.263 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:15:57.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:15:59.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 15, 30), 13.74, 39.33, 0.0, 30.56, 15.54, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:15:59.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:15:30
2026-02-14T13:15:59.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:15:59.692 [DEBUG] [Thread-186029] [transport.py] [_log()] starting thread (client mode): 0xa2d192d0
2026-02-14T13:15:59.693 [DEBUG] [Thread-186029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:15:59.714 [DEBUG] [Thread-186029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:15:59.714 [INFO] [Thread-186029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:15:59.717 [DEBUG] [Thread-186029] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:15:59.717 [DEBUG] [Thread-186029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:15:59.718 [DEBUG] [Thread-186029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:15:59.718 [DEBUG] [Thread-186029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:15:59.718 [DEBUG] [Thread-186029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:15:59.718 [DEBUG] [Thread-186029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:15:59.718 [DEBUG] [Thread-186029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:15:59.718 [DEBUG] [Thread-186029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:15:59.718 [DEBUG] [Thread-186029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:15:59.718 [DEBUG] [Thread-186029] [transport.py] [_log()] client lang: <none>
2026-02-14T13:15:59.718 [DEBUG] [Thread-186029] [transport.py] [_log()] server lang: <none>
2026-02-14T13:15:59.718 [DEBUG] [Thread-186029] [transport.py] [_log()] kex follows: False
2026-02-14T13:15:59.718 [DEBUG] [Thread-186029] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:15:59.718 [DEBUG] [Thread-186029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:15:59.718 [DEBUG] [Thread-186029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:15:59.719 [DEBUG] [Thread-186029] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:15:59.719 [DEBUG] [Thread-186029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:15:59.719 [DEBUG] [Thread-186029] [transport.py] [_log()] Compression: none
2026-02-14T13:15:59.719 [DEBUG] [Thread-186029] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:15:59.738 [DEBUG] [Thread-186029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:15:59.738 [DEBUG] [Thread-186029] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:15:59.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:15:59.740 [DEBUG] [Thread-186029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:15:59.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:15:59.742 [DEBUG] [Thread-186029] [transport.py] [_log()] userauth is OK
2026-02-14T13:15:59.743 [DEBUG] [Thread-186029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:15:59.743 [DEBUG] [Thread-186029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:15:59.743 [DEBUG] [Thread-186029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:15:59.743 [DEBUG] [Thread-186029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:15:59.766 [INFO] [Thread-186029] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:15:59.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:16:00.420 [DEBUG] [Thread-186029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:16:00.420 [DEBUG] [Thread-186029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:16:00.420 [DEBUG] [Thread-186029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:16:00.460 [DEBUG] [Thread-186029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:16:00.461 [DEBUG] [Thread-186029] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:16:00.464 [DEBUG] [Thread-186029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:16:00.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:16:00.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:16:00.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:16:00.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:16:00.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:16:00.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:16:00.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:16:00.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:16:00.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:16:00.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.469207 -999.00  +15.10  33.34     44   +3.00 1 1 2 1 1   888    0 14.54 108.52 ----- 29.5 33.3 154.0 47.2 21.6 -28.2 20.3 -26.0 20.7 -25.1 21.9 -27.3
2026-02-14T13:16:00.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:16:00.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:16:00.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.469207
2026-02-14T13:16:00.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:16:00.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:16:00.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:16:00.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:16:00.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:16:00.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:15:30', tmtdew=13.74, humidity=39.33, cloud=0.0, wind=30.56, temperature=15.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:15:39.485', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:16:00.491 [DEBUG] [Thread-186029] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:16:00.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-14T13:16:00.587 [DEBUG] [Thread-186032] [transport.py] [_log()] starting thread (client mode): 0xa2d1b0a0
2026-02-14T13:16:00.587 [DEBUG] [Thread-186032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:16:00.602 [DEBUG] [Thread-186032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:16:00.602 [INFO] [Thread-186032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:16:00.609 [DEBUG] [Thread-186032] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:16:00.610 [DEBUG] [Thread-186032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:16:00.610 [DEBUG] [Thread-186032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:16:00.610 [DEBUG] [Thread-186032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:16:00.610 [DEBUG] [Thread-186032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:16:00.610 [DEBUG] [Thread-186032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:16:00.611 [DEBUG] [Thread-186032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:16:00.611 [DEBUG] [Thread-186032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:16:00.611 [DEBUG] [Thread-186032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:16:00.611 [DEBUG] [Thread-186032] [transport.py] [_log()] client lang: <none>
2026-02-14T13:16:00.611 [DEBUG] [Thread-186032] [transport.py] [_log()] server lang: <none>
2026-02-14T13:16:00.611 [DEBUG] [Thread-186032] [transport.py] [_log()] kex follows: False
2026-02-14T13:16:00.611 [DEBUG] [Thread-186032] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:16:00.611 [DEBUG] [Thread-186032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:16:00.611 [DEBUG] [Thread-186032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:16:00.612 [DEBUG] [Thread-186032] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:16:00.612 [DEBUG] [Thread-186032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:16:00.612 [DEBUG] [Thread-186032] [transport.py] [_log()] Compression: none
2026-02-14T13:16:00.612 [DEBUG] [Thread-186032] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:16:00.669 [DEBUG] [Thread-186032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:16:00.670 [DEBUG] [Thread-186032] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:16:00.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:16:00.671 [DEBUG] [Thread-186032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:16:00.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:16:00.724 [DEBUG] [Thread-186032] [transport.py] [_log()] userauth is OK
2026-02-14T13:16:00.724 [DEBUG] [Thread-186032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:16:00.724 [DEBUG] [Thread-186032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:16:00.724 [DEBUG] [Thread-186032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:16:00.724 [DEBUG] [Thread-186032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:16:00.742 [INFO] [Thread-186032] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:16:00.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-14T13:16:00.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:16:01.574 [DEBUG] [Thread-186032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:16:01.574 [DEBUG] [Thread-186032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:16:01.623 [DEBUG] [Thread-186032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:16:01.623 [DEBUG] [Thread-186032] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:16:01.632 [DEBUG] [Thread-186032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:16:01.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:16:01.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:16:01.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-14T13:16:01.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:16:01.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:16:01.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:16:01.669 [DEBUG] [Thread-186032] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:16:04.120 [DEBUG] [Thread-186034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:16:19.172 [DEBUG] [Thread-186035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:16:23.528 [DEBUG] [Thread-186036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:16:28.224 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:16:28.225 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:16:31.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:16:31.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:16:31.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:16:33.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 16, 6), 13.93, 38.83, 0.0, 28.04, 15.51, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:16:33.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:16:06
2026-02-14T13:16:33.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:16:34.070 [DEBUG] [Thread-186037] [transport.py] [_log()] starting thread (client mode): 0xa2d1a290
2026-02-14T13:16:34.070 [DEBUG] [Thread-186037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:16:34.089 [DEBUG] [Thread-186037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:16:34.089 [INFO] [Thread-186037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:16:34.091 [DEBUG] [Thread-186037] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:16:34.091 [DEBUG] [Thread-186037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:16:34.091 [DEBUG] [Thread-186037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:16:34.091 [DEBUG] [Thread-186037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:16:34.091 [DEBUG] [Thread-186037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:16:34.091 [DEBUG] [Thread-186037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:16:34.091 [DEBUG] [Thread-186037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:16:34.091 [DEBUG] [Thread-186037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:16:34.091 [DEBUG] [Thread-186037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:16:34.091 [DEBUG] [Thread-186037] [transport.py] [_log()] client lang: <none>
2026-02-14T13:16:34.091 [DEBUG] [Thread-186037] [transport.py] [_log()] server lang: <none>
2026-02-14T13:16:34.091 [DEBUG] [Thread-186037] [transport.py] [_log()] kex follows: False
2026-02-14T13:16:34.091 [DEBUG] [Thread-186037] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:16:34.092 [DEBUG] [Thread-186037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:16:34.092 [DEBUG] [Thread-186037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:16:34.092 [DEBUG] [Thread-186037] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:16:34.092 [DEBUG] [Thread-186037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:16:34.092 [DEBUG] [Thread-186037] [transport.py] [_log()] Compression: none
2026-02-14T13:16:34.092 [DEBUG] [Thread-186037] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:16:34.111 [DEBUG] [Thread-186037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:16:34.112 [DEBUG] [Thread-186037] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:16:34.112 [DEBUG] [Thread-186037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:16:34.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:16:34.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:16:34.114 [DEBUG] [Thread-186037] [transport.py] [_log()] userauth is OK
2026-02-14T13:16:34.115 [DEBUG] [Thread-186037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:16:34.115 [DEBUG] [Thread-186037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:16:34.115 [DEBUG] [Thread-186037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:16:34.115 [DEBUG] [Thread-186037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:16:34.139 [INFO] [Thread-186037] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:16:34.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:16:34.206 [DEBUG] [Thread-186039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:16:34.779 [DEBUG] [Thread-186037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:16:34.779 [DEBUG] [Thread-186037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:16:34.780 [DEBUG] [Thread-186037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:16:34.821 [DEBUG] [Thread-186037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:16:34.821 [DEBUG] [Thread-186037] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:16:34.824 [DEBUG] [Thread-186037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:16:34.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:16:34.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:16:34.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:16:34.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:16:34.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:16:34.846 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:16:34.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:16:34.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:16:34.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:16:34.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.469554 -999.00  +15.10  25.21     44   +2.90 1 1 1 1 1   888    0 14.61 100.99 ----- 26.5 25.2 163.0 38.6 21.5 -25.8 20.2 -26.2 20.6 -25.3 21.9 -26.0
2026-02-14T13:16:34.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:16:34.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:16:34.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.469554
2026-02-14T13:16:34.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:16:34.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:16:34.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:16:34.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:16:34.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:16:34.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:16:06', tmtdew=13.93, humidity=38.83, cloud=0.0, wind=28.04, temperature=15.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:16:09.466', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:16:34.849 [DEBUG] [Thread-186037] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:16:34.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-14T13:16:34.946 [DEBUG] [Thread-186041] [transport.py] [_log()] starting thread (client mode): 0xa2dde3e0
2026-02-14T13:16:34.946 [DEBUG] [Thread-186041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:16:34.960 [DEBUG] [Thread-186041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:16:34.960 [INFO] [Thread-186041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:16:34.968 [DEBUG] [Thread-186041] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:16:34.968 [DEBUG] [Thread-186041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:16:34.968 [DEBUG] [Thread-186041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:16:34.968 [DEBUG] [Thread-186041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:16:34.968 [DEBUG] [Thread-186041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:16:34.968 [DEBUG] [Thread-186041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:16:34.968 [DEBUG] [Thread-186041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:16:34.968 [DEBUG] [Thread-186041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:16:34.968 [DEBUG] [Thread-186041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:16:34.968 [DEBUG] [Thread-186041] [transport.py] [_log()] client lang: <none>
2026-02-14T13:16:34.968 [DEBUG] [Thread-186041] [transport.py] [_log()] server lang: <none>
2026-02-14T13:16:34.968 [DEBUG] [Thread-186041] [transport.py] [_log()] kex follows: False
2026-02-14T13:16:34.968 [DEBUG] [Thread-186041] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:16:34.968 [DEBUG] [Thread-186041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:16:34.968 [DEBUG] [Thread-186041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:16:34.969 [DEBUG] [Thread-186041] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:16:34.969 [DEBUG] [Thread-186041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:16:34.969 [DEBUG] [Thread-186041] [transport.py] [_log()] Compression: none
2026-02-14T13:16:34.969 [DEBUG] [Thread-186041] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:16:35.028 [DEBUG] [Thread-186041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:16:35.029 [DEBUG] [Thread-186041] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:16:35.030 [DEBUG] [Thread-186041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:16:35.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:16:35.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:16:35.084 [DEBUG] [Thread-186041] [transport.py] [_log()] userauth is OK
2026-02-14T13:16:35.084 [DEBUG] [Thread-186041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:16:35.085 [DEBUG] [Thread-186041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:16:35.085 [DEBUG] [Thread-186041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:16:35.085 [DEBUG] [Thread-186041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:16:35.108 [INFO] [Thread-186041] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:16:35.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T13:16:35.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:16:35.926 [DEBUG] [Thread-186041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:16:35.927 [DEBUG] [Thread-186041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:16:35.974 [DEBUG] [Thread-186041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:16:35.975 [DEBUG] [Thread-186041] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:16:35.984 [DEBUG] [Thread-186041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:16:35.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:16:35.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-14T13:16:36.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-14T13:16:36.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:16:36.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:16:36.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:16:36.021 [DEBUG] [Thread-186041] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:16:49.244 [DEBUG] [Thread-186043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:17:04.297 [DEBUG] [Thread-186044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:17:06.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:17:06.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:17:06.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:17:08.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 16, 42), 15.04, 36.22, 0.0, 34.75, 16.65, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:17:08.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:16:42
2026-02-14T13:17:08.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:17:08.661 [DEBUG] [Thread-186045] [transport.py] [_log()] starting thread (client mode): 0xa2d13460
2026-02-14T13:17:08.661 [DEBUG] [Thread-186045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:17:08.681 [DEBUG] [Thread-186045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:17:08.682 [INFO] [Thread-186045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:17:08.685 [DEBUG] [Thread-186045] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:17:08.685 [DEBUG] [Thread-186045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:17:08.685 [DEBUG] [Thread-186045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:17:08.685 [DEBUG] [Thread-186045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:17:08.685 [DEBUG] [Thread-186045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:17:08.685 [DEBUG] [Thread-186045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:17:08.685 [DEBUG] [Thread-186045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:17:08.686 [DEBUG] [Thread-186045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:17:08.686 [DEBUG] [Thread-186045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:17:08.686 [DEBUG] [Thread-186045] [transport.py] [_log()] client lang: <none>
2026-02-14T13:17:08.686 [DEBUG] [Thread-186045] [transport.py] [_log()] server lang: <none>
2026-02-14T13:17:08.686 [DEBUG] [Thread-186045] [transport.py] [_log()] kex follows: False
2026-02-14T13:17:08.686 [DEBUG] [Thread-186045] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:17:08.686 [DEBUG] [Thread-186045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:17:08.686 [DEBUG] [Thread-186045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:17:08.686 [DEBUG] [Thread-186045] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:17:08.686 [DEBUG] [Thread-186045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:17:08.686 [DEBUG] [Thread-186045] [transport.py] [_log()] Compression: none
2026-02-14T13:17:08.686 [DEBUG] [Thread-186045] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:17:08.706 [DEBUG] [Thread-186045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:17:08.707 [DEBUG] [Thread-186045] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:17:08.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:17:08.708 [DEBUG] [Thread-186045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:17:08.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:17:08.710 [DEBUG] [Thread-186045] [transport.py] [_log()] userauth is OK
2026-02-14T13:17:08.710 [DEBUG] [Thread-186045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:17:08.711 [DEBUG] [Thread-186045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:17:08.711 [DEBUG] [Thread-186045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:17:08.711 [DEBUG] [Thread-186045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:17:08.736 [INFO] [Thread-186045] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:17:08.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:17:09.364 [DEBUG] [Thread-186045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:17:09.365 [DEBUG] [Thread-186045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:17:09.365 [DEBUG] [Thread-186045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:17:09.405 [DEBUG] [Thread-186045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:17:09.405 [DEBUG] [Thread-186045] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:17:09.409 [DEBUG] [Thread-186045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:17:09.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:17:09.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:17:09.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:17:09.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:17:09.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:17:09.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:17:09.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:17:09.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:17:09.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:17:09.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.469901 -999.00  +15.30  34.55     43   +3.00 1 1 2 1 1   888    0 14.35 97.75 ----- 30.7 34.5 166.2 40.1 21.6 -25.6 20.3 -24.6 20.7 -24.1 21.9 -25.1
2026-02-14T13:17:09.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:17:09.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:17:09.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.469901
2026-02-14T13:17:09.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:17:09.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:17:09.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:17:09.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:17:09.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:17:09.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:16:42', tmtdew=15.04, humidity=36.22, cloud=0.0, wind=34.75, temperature=16.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:16:39.446', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:17:09.432 [DEBUG] [Thread-186045] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:17:09.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-14T13:17:09.532 [DEBUG] [Thread-186048] [transport.py] [_log()] starting thread (client mode): 0xa575a6b0
2026-02-14T13:17:09.533 [DEBUG] [Thread-186048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:17:09.550 [DEBUG] [Thread-186048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:17:09.550 [INFO] [Thread-186048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:17:09.558 [DEBUG] [Thread-186048] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:17:09.558 [DEBUG] [Thread-186048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:17:09.559 [DEBUG] [Thread-186048] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:17:09.559 [DEBUG] [Thread-186048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:17:09.559 [DEBUG] [Thread-186048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:17:09.559 [DEBUG] [Thread-186048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:17:09.559 [DEBUG] [Thread-186048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:17:09.559 [DEBUG] [Thread-186048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:17:09.559 [DEBUG] [Thread-186048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:17:09.559 [DEBUG] [Thread-186048] [transport.py] [_log()] client lang: <none>
2026-02-14T13:17:09.559 [DEBUG] [Thread-186048] [transport.py] [_log()] server lang: <none>
2026-02-14T13:17:09.559 [DEBUG] [Thread-186048] [transport.py] [_log()] kex follows: False
2026-02-14T13:17:09.559 [DEBUG] [Thread-186048] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:17:09.559 [DEBUG] [Thread-186048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:17:09.559 [DEBUG] [Thread-186048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:17:09.559 [DEBUG] [Thread-186048] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:17:09.560 [DEBUG] [Thread-186048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:17:09.560 [DEBUG] [Thread-186048] [transport.py] [_log()] Compression: none
2026-02-14T13:17:09.560 [DEBUG] [Thread-186048] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:17:09.617 [DEBUG] [Thread-186048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:17:09.617 [DEBUG] [Thread-186048] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:17:09.618 [DEBUG] [Thread-186048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:17:09.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:17:09.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:17:09.673 [DEBUG] [Thread-186048] [transport.py] [_log()] userauth is OK
2026-02-14T13:17:09.673 [DEBUG] [Thread-186048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:17:09.673 [DEBUG] [Thread-186048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:17:09.673 [DEBUG] [Thread-186048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:17:09.673 [DEBUG] [Thread-186048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:17:09.693 [INFO] [Thread-186048] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:17:09.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T13:17:09.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:17:10.517 [DEBUG] [Thread-186048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:17:10.517 [DEBUG] [Thread-186048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:17:10.568 [DEBUG] [Thread-186048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:17:10.568 [DEBUG] [Thread-186048] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:17:10.581 [DEBUG] [Thread-186048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:17:10.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:17:10.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')
2026-02-14T13:17:10.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-14T13:17:10.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:17:10.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:17:10.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:17:10.627 [DEBUG] [Thread-186048] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:17:19.334 [DEBUG] [Thread-186050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:17:23.562 [DEBUG] [Thread-186051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:17:28.367 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:17:28.368 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:17:34.389 [DEBUG] [Thread-186052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:17:40.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:17:40.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:17:40.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:17:42.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 17, 17), 14.6, 37.1, 0.0, 37.41, 15.52, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:17:42.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:17:17
2026-02-14T13:17:42.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:17:43.050 [DEBUG] [Thread-186053] [transport.py] [_log()] starting thread (client mode): 0xa5741150
2026-02-14T13:17:43.050 [DEBUG] [Thread-186053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:17:43.071 [DEBUG] [Thread-186053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:17:43.071 [INFO] [Thread-186053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:17:43.072 [DEBUG] [Thread-186053] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:17:43.072 [DEBUG] [Thread-186053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:17:43.072 [DEBUG] [Thread-186053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:17:43.072 [DEBUG] [Thread-186053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:17:43.072 [DEBUG] [Thread-186053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:17:43.072 [DEBUG] [Thread-186053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:17:43.072 [DEBUG] [Thread-186053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:17:43.072 [DEBUG] [Thread-186053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:17:43.072 [DEBUG] [Thread-186053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:17:43.072 [DEBUG] [Thread-186053] [transport.py] [_log()] client lang: <none>
2026-02-14T13:17:43.072 [DEBUG] [Thread-186053] [transport.py] [_log()] server lang: <none>
2026-02-14T13:17:43.073 [DEBUG] [Thread-186053] [transport.py] [_log()] kex follows: False
2026-02-14T13:17:43.073 [DEBUG] [Thread-186053] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:17:43.073 [DEBUG] [Thread-186053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:17:43.073 [DEBUG] [Thread-186053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:17:43.073 [DEBUG] [Thread-186053] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:17:43.073 [DEBUG] [Thread-186053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:17:43.073 [DEBUG] [Thread-186053] [transport.py] [_log()] Compression: none
2026-02-14T13:17:43.073 [DEBUG] [Thread-186053] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:17:43.081 [DEBUG] [Thread-186053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:17:43.081 [DEBUG] [Thread-186053] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:17:43.081 [DEBUG] [Thread-186053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:17:43.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:17:43.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:17:43.083 [DEBUG] [Thread-186053] [transport.py] [_log()] userauth is OK
2026-02-14T13:17:43.083 [DEBUG] [Thread-186053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:17:43.083 [DEBUG] [Thread-186053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:17:43.083 [DEBUG] [Thread-186053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:17:43.084 [DEBUG] [Thread-186053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:17:43.100 [INFO] [Thread-186053] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:17:43.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:17:43.711 [DEBUG] [Thread-186053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:17:43.711 [DEBUG] [Thread-186053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:17:43.712 [DEBUG] [Thread-186053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:17:43.753 [DEBUG] [Thread-186053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:17:43.753 [DEBUG] [Thread-186053] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:17:43.758 [DEBUG] [Thread-186053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:17:43.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:17:43.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:17:43.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:17:43.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:17:43.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:17:43.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:17:43.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:17:43.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:17:43.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:17:43.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.470248 -999.00  +14.90  18.32     44   +3.00 1 1 1 1 1   888    0 14.63 97.70 ----- 14.5 18.3 157.0 36.7 21.5 -27.1 20.2 -27.9 20.6 -25.4 21.9 -27.8
2026-02-14T13:17:43.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:17:43.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:17:43.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.470248
2026-02-14T13:17:43.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:17:43.785 [DEBUG] [Thread-186053] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:17:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:17:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:17:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:17:43.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:17:43.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:17:17', tmtdew=14.6, humidity=37.1, cloud=0.0, wind=37.41, temperature=15.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:17:09.427', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:17:43.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-14T13:17:43.881 [DEBUG] [Thread-186056] [transport.py] [_log()] starting thread (client mode): 0xa5743430
2026-02-14T13:17:43.881 [DEBUG] [Thread-186056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:17:43.896 [DEBUG] [Thread-186056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:17:43.896 [INFO] [Thread-186056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:17:43.903 [DEBUG] [Thread-186056] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:17:43.904 [DEBUG] [Thread-186056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:17:43.904 [DEBUG] [Thread-186056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:17:43.904 [DEBUG] [Thread-186056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:17:43.904 [DEBUG] [Thread-186056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:17:43.904 [DEBUG] [Thread-186056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:17:43.904 [DEBUG] [Thread-186056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:17:43.904 [DEBUG] [Thread-186056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:17:43.904 [DEBUG] [Thread-186056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:17:43.904 [DEBUG] [Thread-186056] [transport.py] [_log()] client lang: <none>
2026-02-14T13:17:43.904 [DEBUG] [Thread-186056] [transport.py] [_log()] server lang: <none>
2026-02-14T13:17:43.904 [DEBUG] [Thread-186056] [transport.py] [_log()] kex follows: False
2026-02-14T13:17:43.904 [DEBUG] [Thread-186056] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:17:43.904 [DEBUG] [Thread-186056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:17:43.904 [DEBUG] [Thread-186056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:17:43.905 [DEBUG] [Thread-186056] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:17:43.905 [DEBUG] [Thread-186056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:17:43.905 [DEBUG] [Thread-186056] [transport.py] [_log()] Compression: none
2026-02-14T13:17:43.905 [DEBUG] [Thread-186056] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:17:43.964 [DEBUG] [Thread-186056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:17:43.965 [DEBUG] [Thread-186056] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:17:43.965 [DEBUG] [Thread-186056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:17:43.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:17:43.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:17:44.020 [DEBUG] [Thread-186056] [transport.py] [_log()] userauth is OK
2026-02-14T13:17:44.021 [DEBUG] [Thread-186056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:17:44.021 [DEBUG] [Thread-186056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:17:44.021 [DEBUG] [Thread-186056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:17:44.021 [DEBUG] [Thread-186056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:17:44.039 [INFO] [Thread-186056] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:17:44.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T13:17:44.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:17:44.829 [DEBUG] [Thread-186056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:17:44.830 [DEBUG] [Thread-186056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:17:44.877 [DEBUG] [Thread-186056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:17:44.878 [DEBUG] [Thread-186056] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:17:44.887 [DEBUG] [Thread-186056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:17:44.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:17:44.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-14T13:17:44.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-14T13:17:44.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:17:44.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:17:44.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:17:44.923 [DEBUG] [Thread-186056] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:17:49.425 [DEBUG] [Thread-186058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:18:04.479 [DEBUG] [Thread-186059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:18:14.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:18:14.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:18:14.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:18:16.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 17, 52), 14.14, 38.11, 0.0, 24.51, 15.24, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:18:16.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:17:52
2026-02-14T13:18:17.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:18:17.446 [DEBUG] [Thread-186060] [transport.py] [_log()] starting thread (client mode): 0xa57c05b0
2026-02-14T13:18:17.446 [DEBUG] [Thread-186060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:18:17.468 [DEBUG] [Thread-186060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:18:17.468 [INFO] [Thread-186060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:18:17.471 [DEBUG] [Thread-186060] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:18:17.471 [DEBUG] [Thread-186060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:18:17.471 [DEBUG] [Thread-186060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:18:17.471 [DEBUG] [Thread-186060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:18:17.471 [DEBUG] [Thread-186060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:18:17.471 [DEBUG] [Thread-186060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:18:17.471 [DEBUG] [Thread-186060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:18:17.471 [DEBUG] [Thread-186060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:18:17.471 [DEBUG] [Thread-186060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:18:17.471 [DEBUG] [Thread-186060] [transport.py] [_log()] client lang: <none>
2026-02-14T13:18:17.471 [DEBUG] [Thread-186060] [transport.py] [_log()] server lang: <none>
2026-02-14T13:18:17.471 [DEBUG] [Thread-186060] [transport.py] [_log()] kex follows: False
2026-02-14T13:18:17.471 [DEBUG] [Thread-186060] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:18:17.471 [DEBUG] [Thread-186060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:18:17.471 [DEBUG] [Thread-186060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:18:17.471 [DEBUG] [Thread-186060] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:18:17.471 [DEBUG] [Thread-186060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:18:17.471 [DEBUG] [Thread-186060] [transport.py] [_log()] Compression: none
2026-02-14T13:18:17.471 [DEBUG] [Thread-186060] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:18:17.490 [DEBUG] [Thread-186060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:18:17.490 [DEBUG] [Thread-186060] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:18:17.491 [DEBUG] [Thread-186060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:18:17.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:18:17.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:18:17.493 [DEBUG] [Thread-186060] [transport.py] [_log()] userauth is OK
2026-02-14T13:18:17.493 [DEBUG] [Thread-186060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:18:17.494 [DEBUG] [Thread-186060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:18:17.494 [DEBUG] [Thread-186060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:18:17.494 [DEBUG] [Thread-186060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:18:17.517 [INFO] [Thread-186060] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:18:17.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:18:18.124 [DEBUG] [Thread-186060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:18:18.124 [DEBUG] [Thread-186060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:18:18.124 [DEBUG] [Thread-186060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:18:18.165 [DEBUG] [Thread-186060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:18:18.165 [DEBUG] [Thread-186060] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:18:18.168 [DEBUG] [Thread-186060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:18:18.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:18:18.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:18:18.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:18:18.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:18:18.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:18:18.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:18:18.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:18:18.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:18:18.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:18:18.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.470596 -999.00  +15.10  35.90     43   +2.90 1 1 2 1 1   888    0 14.50 94.84 ----- 30.4 35.9 169.8 38.9 21.6 -26.2 20.2 -25.2 20.7 -24.0 21.9 -25.2
2026-02-14T13:18:18.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:18:18.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:18:18.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.470596
2026-02-14T13:18:18.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:18:18.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:18:18.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:18:18.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:18:18.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:18:18.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:17:52', tmtdew=14.14, humidity=38.11, cloud=0.0, wind=24.51, temperature=15.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:17:39.494', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:18:18.196 [DEBUG] [Thread-186060] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:18:18.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-14T13:18:18.291 [DEBUG] [Thread-186063] [transport.py] [_log()] starting thread (client mode): 0xa2d1a9b0
2026-02-14T13:18:18.291 [DEBUG] [Thread-186063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:18:18.306 [DEBUG] [Thread-186063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:18:18.306 [INFO] [Thread-186063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:18:18.314 [DEBUG] [Thread-186063] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:18:18.314 [DEBUG] [Thread-186063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:18:18.314 [DEBUG] [Thread-186063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:18:18.314 [DEBUG] [Thread-186063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:18:18.314 [DEBUG] [Thread-186063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:18:18.314 [DEBUG] [Thread-186063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:18:18.314 [DEBUG] [Thread-186063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:18:18.314 [DEBUG] [Thread-186063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:18:18.314 [DEBUG] [Thread-186063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:18:18.314 [DEBUG] [Thread-186063] [transport.py] [_log()] client lang: <none>
2026-02-14T13:18:18.314 [DEBUG] [Thread-186063] [transport.py] [_log()] server lang: <none>
2026-02-14T13:18:18.314 [DEBUG] [Thread-186063] [transport.py] [_log()] kex follows: False
2026-02-14T13:18:18.314 [DEBUG] [Thread-186063] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:18:18.314 [DEBUG] [Thread-186063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:18:18.314 [DEBUG] [Thread-186063] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:18:18.314 [DEBUG] [Thread-186063] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:18:18.314 [DEBUG] [Thread-186063] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:18:18.315 [DEBUG] [Thread-186063] [transport.py] [_log()] Compression: none
2026-02-14T13:18:18.315 [DEBUG] [Thread-186063] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:18:18.372 [DEBUG] [Thread-186063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:18:18.372 [DEBUG] [Thread-186063] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:18:18.373 [DEBUG] [Thread-186063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:18:18.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:18:18.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:18:18.429 [DEBUG] [Thread-186063] [transport.py] [_log()] userauth is OK
2026-02-14T13:18:18.429 [DEBUG] [Thread-186063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:18:18.429 [DEBUG] [Thread-186063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:18:18.429 [DEBUG] [Thread-186063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:18:18.429 [DEBUG] [Thread-186063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:18:18.448 [INFO] [Thread-186063] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:18:18.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-14T13:18:18.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:18:19.235 [DEBUG] [Thread-186063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:18:19.235 [DEBUG] [Thread-186063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:18:19.283 [DEBUG] [Thread-186063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:18:19.284 [DEBUG] [Thread-186063] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:18:19.293 [DEBUG] [Thread-186063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:18:19.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:18:19.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-14T13:18:19.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-14T13:18:19.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:18:19.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:18:19.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:18:19.328 [DEBUG] [Thread-186063] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:18:19.520 [DEBUG] [Thread-186065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:18:23.610 [DEBUG] [Thread-186066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:18:28.507 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:18:28.509 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:18:34.579 [DEBUG] [Thread-186067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:18:49.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:18:49.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:18: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-14T13:18:49.612 [DEBUG] [Thread-186068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:18:51.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 18, 28), 14.25, 37.91, 0.0, 28.51, 15.49, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:18:51.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:18:28
2026-02-14T13:18:52.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:18:52.241 [DEBUG] [Thread-186069] [transport.py] [_log()] starting thread (client mode): 0xa2d1b100
2026-02-14T13:18:52.241 [DEBUG] [Thread-186069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:18:52.261 [DEBUG] [Thread-186069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:18:52.262 [INFO] [Thread-186069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:18:52.265 [DEBUG] [Thread-186069] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:18:52.265 [DEBUG] [Thread-186069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:18:52.265 [DEBUG] [Thread-186069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:18:52.265 [DEBUG] [Thread-186069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:18:52.266 [DEBUG] [Thread-186069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:18:52.266 [DEBUG] [Thread-186069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:18:52.266 [DEBUG] [Thread-186069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:18:52.266 [DEBUG] [Thread-186069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:18:52.266 [DEBUG] [Thread-186069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:18:52.266 [DEBUG] [Thread-186069] [transport.py] [_log()] client lang: <none>
2026-02-14T13:18:52.266 [DEBUG] [Thread-186069] [transport.py] [_log()] server lang: <none>
2026-02-14T13:18:52.266 [DEBUG] [Thread-186069] [transport.py] [_log()] kex follows: False
2026-02-14T13:18:52.266 [DEBUG] [Thread-186069] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:18:52.266 [DEBUG] [Thread-186069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:18:52.266 [DEBUG] [Thread-186069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:18:52.266 [DEBUG] [Thread-186069] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:18:52.266 [DEBUG] [Thread-186069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:18:52.266 [DEBUG] [Thread-186069] [transport.py] [_log()] Compression: none
2026-02-14T13:18:52.266 [DEBUG] [Thread-186069] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:18:52.283 [DEBUG] [Thread-186069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:18:52.284 [DEBUG] [Thread-186069] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:18:52.285 [DEBUG] [Thread-186069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:18:52.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:18:52.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:18:52.287 [DEBUG] [Thread-186069] [transport.py] [_log()] userauth is OK
2026-02-14T13:18:52.287 [DEBUG] [Thread-186069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:18:52.287 [DEBUG] [Thread-186069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:18:52.287 [DEBUG] [Thread-186069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:18:52.287 [DEBUG] [Thread-186069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:18:52.313 [INFO] [Thread-186069] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:18:52.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:18:52.971 [DEBUG] [Thread-186069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:18:52.971 [DEBUG] [Thread-186069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:18:52.971 [DEBUG] [Thread-186069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:18:53.012 [DEBUG] [Thread-186069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:18:53.012 [DEBUG] [Thread-186069] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:18:53.014 [DEBUG] [Thread-186069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:18:53.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:18:53.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:18:53.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:18:53.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:18:53.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:18:53.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:18:53.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:18:53.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:18:53.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:18:53.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.470943 -999.00  +15.10  19.31     43   +2.90 1 1 1 1 1   888    0 14.22 98.11 ----- 24.0 19.3 197.0 39.2 21.4 -27.3 20.1 -26.7 20.6 -23.4 21.9 -25.7
2026-02-14T13:18:53.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:18:53.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:18:53.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.470943
2026-02-14T13:18:53.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:18:53.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:18:53.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:18:53.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:18:53.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:18:53.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:18:28', tmtdew=14.25, humidity=37.91, cloud=0.0, wind=28.51, temperature=15.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:18:09.475', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:18:53.037 [DEBUG] [Thread-186069] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:18:53.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-14T13:18:53.139 [DEBUG] [Thread-186072] [transport.py] [_log()] starting thread (client mode): 0xa57438e0
2026-02-14T13:18:53.139 [DEBUG] [Thread-186072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:18:53.153 [DEBUG] [Thread-186072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:18:53.153 [INFO] [Thread-186072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:18:53.160 [DEBUG] [Thread-186072] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:18:53.160 [DEBUG] [Thread-186072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:18:53.161 [DEBUG] [Thread-186072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:18:53.161 [DEBUG] [Thread-186072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:18:53.161 [DEBUG] [Thread-186072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:18:53.161 [DEBUG] [Thread-186072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:18:53.161 [DEBUG] [Thread-186072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:18:53.161 [DEBUG] [Thread-186072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:18:53.161 [DEBUG] [Thread-186072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:18:53.161 [DEBUG] [Thread-186072] [transport.py] [_log()] client lang: <none>
2026-02-14T13:18:53.161 [DEBUG] [Thread-186072] [transport.py] [_log()] server lang: <none>
2026-02-14T13:18:53.161 [DEBUG] [Thread-186072] [transport.py] [_log()] kex follows: False
2026-02-14T13:18:53.161 [DEBUG] [Thread-186072] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:18:53.161 [DEBUG] [Thread-186072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:18:53.161 [DEBUG] [Thread-186072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:18:53.161 [DEBUG] [Thread-186072] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:18:53.161 [DEBUG] [Thread-186072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:18:53.161 [DEBUG] [Thread-186072] [transport.py] [_log()] Compression: none
2026-02-14T13:18:53.161 [DEBUG] [Thread-186072] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:18:53.220 [DEBUG] [Thread-186072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:18:53.221 [DEBUG] [Thread-186072] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:18:53.222 [DEBUG] [Thread-186072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:18:53.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:18:53.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:18:53.276 [DEBUG] [Thread-186072] [transport.py] [_log()] userauth is OK
2026-02-14T13:18:53.277 [DEBUG] [Thread-186072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:18:53.277 [DEBUG] [Thread-186072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:18:53.277 [DEBUG] [Thread-186072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:18:53.277 [DEBUG] [Thread-186072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:18:53.295 [INFO] [Thread-186072] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:18:53.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-14T13:18:53.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:18:54.082 [DEBUG] [Thread-186072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:18:54.083 [DEBUG] [Thread-186072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:18:54.130 [DEBUG] [Thread-186072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:18:54.131 [DEBUG] [Thread-186072] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:18:54.140 [DEBUG] [Thread-186072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:18:54.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:18:54.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-14T13:18:54.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:18:54.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:18:54.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:18:54.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:18:54.176 [DEBUG] [Thread-186072] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:19:04.649 [DEBUG] [Thread-186074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:19:19.704 [DEBUG] [Thread-186075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:19:23.643 [DEBUG] [Thread-186076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:19:24.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:19:24.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:19:24.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-14T13:19:26.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 19, 3), 14.43, 37.48, 0.0, 28.85, 15.57, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:19:26.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:19:03
2026-02-14T13:19:26.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:19:26.798 [DEBUG] [Thread-186077] [transport.py] [_log()] starting thread (client mode): 0xa2d3d2d0
2026-02-14T13:19:26.798 [DEBUG] [Thread-186077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:19:26.818 [DEBUG] [Thread-186077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:19:26.818 [INFO] [Thread-186077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:19:26.821 [DEBUG] [Thread-186077] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:19:26.821 [DEBUG] [Thread-186077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:19:26.821 [DEBUG] [Thread-186077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:19:26.821 [DEBUG] [Thread-186077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:19:26.821 [DEBUG] [Thread-186077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:19:26.821 [DEBUG] [Thread-186077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:19:26.821 [DEBUG] [Thread-186077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:19:26.821 [DEBUG] [Thread-186077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:19:26.821 [DEBUG] [Thread-186077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:19:26.821 [DEBUG] [Thread-186077] [transport.py] [_log()] client lang: <none>
2026-02-14T13:19:26.821 [DEBUG] [Thread-186077] [transport.py] [_log()] server lang: <none>
2026-02-14T13:19:26.821 [DEBUG] [Thread-186077] [transport.py] [_log()] kex follows: False
2026-02-14T13:19:26.821 [DEBUG] [Thread-186077] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:19:26.821 [DEBUG] [Thread-186077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:19:26.821 [DEBUG] [Thread-186077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:19:26.821 [DEBUG] [Thread-186077] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:19:26.821 [DEBUG] [Thread-186077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:19:26.821 [DEBUG] [Thread-186077] [transport.py] [_log()] Compression: none
2026-02-14T13:19:26.822 [DEBUG] [Thread-186077] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:19:26.839 [DEBUG] [Thread-186077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:19:26.840 [DEBUG] [Thread-186077] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:19:26.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:19:26.841 [DEBUG] [Thread-186077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:19:26.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:19:26.843 [DEBUG] [Thread-186077] [transport.py] [_log()] userauth is OK
2026-02-14T13:19:26.843 [DEBUG] [Thread-186077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:19:26.843 [DEBUG] [Thread-186077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:19:26.843 [DEBUG] [Thread-186077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:19:26.844 [DEBUG] [Thread-186077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:19:26.868 [INFO] [Thread-186077] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:19:26.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:19:27.507 [DEBUG] [Thread-186077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:19:27.507 [DEBUG] [Thread-186077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:19:27.508 [DEBUG] [Thread-186077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:19:27.548 [DEBUG] [Thread-186077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:19:27.549 [DEBUG] [Thread-186077] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:19:27.552 [DEBUG] [Thread-186077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:19:27.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:19:27.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:19:27.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:19:27.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:19:27.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:19:27.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:19:27.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:19:27.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:19:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:19:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.471637 -999.00  +15.70  18.88     42   +2.90 1 1 1 1 1   888    0 14.71 101.78 ----- 23.2 18.9 174.6 39.4 21.6 -26.6 20.2 -28.3 20.9 -24.0 22.0 -24.9
2026-02-14T13:19:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:19:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:19:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.471637
2026-02-14T13:19:27.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:19:27.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:19:27.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:19:27.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:19:27.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:19:27.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:19:03', tmtdew=14.43, humidity=37.48, cloud=0.0, wind=28.85, temperature=15.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:19:09.437', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:19:27.577 [DEBUG] [Thread-186077] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:19:27.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-14T13:19:27.673 [DEBUG] [Thread-186080] [transport.py] [_log()] starting thread (client mode): 0xa2dddbd0
2026-02-14T13:19:27.673 [DEBUG] [Thread-186080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:19:27.688 [DEBUG] [Thread-186080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:19:27.689 [INFO] [Thread-186080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:19:27.697 [DEBUG] [Thread-186080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:19:27.698 [DEBUG] [Thread-186080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:19:27.698 [DEBUG] [Thread-186080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:19:27.698 [DEBUG] [Thread-186080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:19:27.698 [DEBUG] [Thread-186080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:19:27.698 [DEBUG] [Thread-186080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:19:27.698 [DEBUG] [Thread-186080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:19:27.698 [DEBUG] [Thread-186080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:19:27.698 [DEBUG] [Thread-186080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:19:27.698 [DEBUG] [Thread-186080] [transport.py] [_log()] client lang: <none>
2026-02-14T13:19:27.698 [DEBUG] [Thread-186080] [transport.py] [_log()] server lang: <none>
2026-02-14T13:19:27.698 [DEBUG] [Thread-186080] [transport.py] [_log()] kex follows: False
2026-02-14T13:19:27.698 [DEBUG] [Thread-186080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:19:27.698 [DEBUG] [Thread-186080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:19:27.698 [DEBUG] [Thread-186080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:19:27.698 [DEBUG] [Thread-186080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:19:27.699 [DEBUG] [Thread-186080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:19:27.699 [DEBUG] [Thread-186080] [transport.py] [_log()] Compression: none
2026-02-14T13:19:27.699 [DEBUG] [Thread-186080] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:19:27.757 [DEBUG] [Thread-186080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:19:27.757 [DEBUG] [Thread-186080] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:19:27.758 [DEBUG] [Thread-186080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:19:27.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:19:27.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:19:27.817 [DEBUG] [Thread-186080] [transport.py] [_log()] userauth is OK
2026-02-14T13:19:27.818 [DEBUG] [Thread-186080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:19:27.818 [DEBUG] [Thread-186080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:19:27.818 [DEBUG] [Thread-186080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:19:27.818 [DEBUG] [Thread-186080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:19:27.836 [INFO] [Thread-186080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:19:27.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-14T13:19:27.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:19:28.649 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:19:28.650 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:19:28.682 [DEBUG] [Thread-186080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:19:28.682 [DEBUG] [Thread-186080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:19:28.730 [DEBUG] [Thread-186080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:19:28.731 [DEBUG] [Thread-186080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:19:28.740 [DEBUG] [Thread-186080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:19:28.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:19:28.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-14T13:19:28.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-14T13:19:28.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:19:28.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:19:28.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:19:28.777 [DEBUG] [Thread-186080] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:19:34.744 [DEBUG] [Thread-186082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:19:49.798 [DEBUG] [Thread-186083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:19:58.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:19:58.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:19:58.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:20:00.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 19, 38), 15.73, 34.5, 0.0, 28.9, 16.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:20:00.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:19:38
2026-02-14T13:20:00.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:20:01.151 [DEBUG] [Thread-186084] [transport.py] [_log()] starting thread (client mode): 0xa2d3cdc0
2026-02-14T13:20:01.151 [DEBUG] [Thread-186084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:20:01.171 [DEBUG] [Thread-186084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:20:01.171 [INFO] [Thread-186084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:20:01.175 [DEBUG] [Thread-186084] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:20:01.175 [DEBUG] [Thread-186084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:20:01.175 [DEBUG] [Thread-186084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:20:01.175 [DEBUG] [Thread-186084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:20:01.176 [DEBUG] [Thread-186084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:20:01.176 [DEBUG] [Thread-186084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:20:01.176 [DEBUG] [Thread-186084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:20:01.176 [DEBUG] [Thread-186084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:20:01.176 [DEBUG] [Thread-186084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:20:01.176 [DEBUG] [Thread-186084] [transport.py] [_log()] client lang: <none>
2026-02-14T13:20:01.176 [DEBUG] [Thread-186084] [transport.py] [_log()] server lang: <none>
2026-02-14T13:20:01.176 [DEBUG] [Thread-186084] [transport.py] [_log()] kex follows: False
2026-02-14T13:20:01.176 [DEBUG] [Thread-186084] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:20:01.176 [DEBUG] [Thread-186084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:20:01.176 [DEBUG] [Thread-186084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:20:01.176 [DEBUG] [Thread-186084] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:20:01.176 [DEBUG] [Thread-186084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:20:01.177 [DEBUG] [Thread-186084] [transport.py] [_log()] Compression: none
2026-02-14T13:20:01.177 [DEBUG] [Thread-186084] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:20:01.196 [DEBUG] [Thread-186084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:20:01.197 [DEBUG] [Thread-186084] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:20:01.198 [DEBUG] [Thread-186084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:20:01.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:20:01.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:20:01.200 [DEBUG] [Thread-186084] [transport.py] [_log()] userauth is OK
2026-02-14T13:20:01.200 [DEBUG] [Thread-186084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:20:01.200 [DEBUG] [Thread-186084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:20:01.201 [DEBUG] [Thread-186084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:20:01.201 [DEBUG] [Thread-186084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:20:01.215 [INFO] [Thread-186084] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:20:01.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:20:01.779 [DEBUG] [Thread-186084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:20:01.779 [DEBUG] [Thread-186084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:20:01.779 [DEBUG] [Thread-186084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:20:01.820 [DEBUG] [Thread-186084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:20:01.820 [DEBUG] [Thread-186084] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:20:01.821 [DEBUG] [Thread-186084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:20:01.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:20:01.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:20:01.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:20:01.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:20:01.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:20:01.832 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:20:01.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:20:01.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:20:01.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:20:01.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.471984 -999.00  +15.20  22.51     43   +2.80 1 1 1 1 1   888    0 14.45 98.56 ----- 25.1 22.5 186.8 27.7 21.6 -26.8 20.0 -28.4 20.7 -25.1 22.0 -27.2
2026-02-14T13:20:01.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:20:01.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:20:01.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.471984
2026-02-14T13:20:01.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:20:01.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:20:01.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:20:01.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:20:01.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:20:01.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:19:38', tmtdew=15.73, humidity=34.5, cloud=0.0, wind=28.9, temperature=16.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:19:39.418', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:20:01.834 [DEBUG] [Thread-186084] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:20:01.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T13:20:01.941 [DEBUG] [Thread-186087] [transport.py] [_log()] starting thread (client mode): 0xa57428c0
2026-02-14T13:20:01.941 [DEBUG] [Thread-186087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:20:01.955 [DEBUG] [Thread-186087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:20:01.956 [INFO] [Thread-186087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:20:01.963 [DEBUG] [Thread-186087] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:20:01.963 [DEBUG] [Thread-186087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:20:01.963 [DEBUG] [Thread-186087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:20:01.963 [DEBUG] [Thread-186087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:20:01.963 [DEBUG] [Thread-186087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:20:01.963 [DEBUG] [Thread-186087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:20:01.963 [DEBUG] [Thread-186087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:20:01.963 [DEBUG] [Thread-186087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:20:01.963 [DEBUG] [Thread-186087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:20:01.963 [DEBUG] [Thread-186087] [transport.py] [_log()] client lang: <none>
2026-02-14T13:20:01.963 [DEBUG] [Thread-186087] [transport.py] [_log()] server lang: <none>
2026-02-14T13:20:01.963 [DEBUG] [Thread-186087] [transport.py] [_log()] kex follows: False
2026-02-14T13:20:01.963 [DEBUG] [Thread-186087] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:20:01.963 [DEBUG] [Thread-186087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:20:01.963 [DEBUG] [Thread-186087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:20:01.963 [DEBUG] [Thread-186087] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:20:01.963 [DEBUG] [Thread-186087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:20:01.963 [DEBUG] [Thread-186087] [transport.py] [_log()] Compression: none
2026-02-14T13:20:01.963 [DEBUG] [Thread-186087] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:20:02.020 [DEBUG] [Thread-186087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:20:02.021 [DEBUG] [Thread-186087] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:20:02.021 [DEBUG] [Thread-186087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:20:02.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:20:02.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:20:02.076 [DEBUG] [Thread-186087] [transport.py] [_log()] userauth is OK
2026-02-14T13:20:02.076 [DEBUG] [Thread-186087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:20:02.077 [DEBUG] [Thread-186087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:20:02.077 [DEBUG] [Thread-186087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:20:02.077 [DEBUG] [Thread-186087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:20:02.095 [INFO] [Thread-186087] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:20:02.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-14T13:20:02.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:20:02.922 [DEBUG] [Thread-186087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:20:02.922 [DEBUG] [Thread-186087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:20:02.969 [DEBUG] [Thread-186087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:20:02.970 [DEBUG] [Thread-186087] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:20:02.978 [DEBUG] [Thread-186087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:20:02.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:20:02.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-14T13:20:02.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-14T13:20:03.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:20:03.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:20:03.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:20:03.012 [DEBUG] [Thread-186087] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:20:04.832 [DEBUG] [Thread-186089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:20:19.886 [DEBUG] [Thread-186090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:20:23.695 [DEBUG] [Thread-186091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:20:28.792 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:20:28.793 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:20:33.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:20:33.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:20:33.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-14T13:20:34.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 20, 14), 14.73, 36.87, 0.0, 28.57, 15.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:20:34.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:20:14
2026-02-14T13:20:34.924 [DEBUG] [Thread-186092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:20:35.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:20:35.391 [DEBUG] [Thread-186093] [transport.py] [_log()] starting thread (client mode): 0xa2d18c40
2026-02-14T13:20:35.400 [DEBUG] [Thread-186093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:20:35.411 [DEBUG] [Thread-186093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:20:35.412 [INFO] [Thread-186093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:20:35.415 [DEBUG] [Thread-186093] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:20:35.415 [DEBUG] [Thread-186093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:20:35.415 [DEBUG] [Thread-186093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:20:35.415 [DEBUG] [Thread-186093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:20:35.415 [DEBUG] [Thread-186093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:20:35.415 [DEBUG] [Thread-186093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:20:35.415 [DEBUG] [Thread-186093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:20:35.415 [DEBUG] [Thread-186093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:20:35.415 [DEBUG] [Thread-186093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:20:35.415 [DEBUG] [Thread-186093] [transport.py] [_log()] client lang: <none>
2026-02-14T13:20:35.415 [DEBUG] [Thread-186093] [transport.py] [_log()] server lang: <none>
2026-02-14T13:20:35.415 [DEBUG] [Thread-186093] [transport.py] [_log()] kex follows: False
2026-02-14T13:20:35.415 [DEBUG] [Thread-186093] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:20:35.415 [DEBUG] [Thread-186093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:20:35.416 [DEBUG] [Thread-186093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:20:35.416 [DEBUG] [Thread-186093] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:20:35.416 [DEBUG] [Thread-186093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:20:35.416 [DEBUG] [Thread-186093] [transport.py] [_log()] Compression: none
2026-02-14T13:20:35.416 [DEBUG] [Thread-186093] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:20:35.428 [DEBUG] [Thread-186093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:20:35.428 [DEBUG] [Thread-186093] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:20:35.429 [DEBUG] [Thread-186093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:20:35.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:20:35.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:20:35.472 [DEBUG] [Thread-186093] [transport.py] [_log()] userauth is OK
2026-02-14T13:20:35.473 [DEBUG] [Thread-186093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:20:35.473 [DEBUG] [Thread-186093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:20:35.473 [DEBUG] [Thread-186093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:20:35.473 [DEBUG] [Thread-186093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:20:35.510 [INFO] [Thread-186093] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:20:35.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:20:36.127 [DEBUG] [Thread-186093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:20:36.127 [DEBUG] [Thread-186093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:20:36.127 [DEBUG] [Thread-186093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:20:36.167 [DEBUG] [Thread-186093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:20:36.168 [DEBUG] [Thread-186093] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:20:36.171 [DEBUG] [Thread-186093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:20:36.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:20:36.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:20:36.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:20:36.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:20:36.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:20:36.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:20:36.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:20:36.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:20:36.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:20:36.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.472332 -999.00  +14.90  22.41     44   +2.70 1 1 1 1 1   888    0 14.73 100.87 ----- 20.2 22.4 183.4 34.7 21.4 -26.4 19.9 -28.6 20.7 -24.6 21.8 -26.5
2026-02-14T13:20:36.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:20:36.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:20:36.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.472332
2026-02-14T13:20:36.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:20:36.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:20:36.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:20:36.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:20:36.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:20:36.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:20:14', tmtdew=14.73, humidity=36.87, cloud=0.0, wind=28.57, temperature=15.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:20:09.485', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:20:36.199 [DEBUG] [Thread-186093] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:20:36.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T13:20:36.295 [DEBUG] [Thread-186096] [transport.py] [_log()] starting thread (client mode): 0xa5740430
2026-02-14T13:20:36.295 [DEBUG] [Thread-186096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:20:36.310 [DEBUG] [Thread-186096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:20:36.310 [INFO] [Thread-186096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:20:36.318 [DEBUG] [Thread-186096] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:20:36.318 [DEBUG] [Thread-186096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:20:36.318 [DEBUG] [Thread-186096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:20:36.318 [DEBUG] [Thread-186096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:20:36.318 [DEBUG] [Thread-186096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:20:36.318 [DEBUG] [Thread-186096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:20:36.318 [DEBUG] [Thread-186096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:20:36.318 [DEBUG] [Thread-186096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:20:36.319 [DEBUG] [Thread-186096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:20:36.319 [DEBUG] [Thread-186096] [transport.py] [_log()] client lang: <none>
2026-02-14T13:20:36.319 [DEBUG] [Thread-186096] [transport.py] [_log()] server lang: <none>
2026-02-14T13:20:36.319 [DEBUG] [Thread-186096] [transport.py] [_log()] kex follows: False
2026-02-14T13:20:36.319 [DEBUG] [Thread-186096] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:20:36.319 [DEBUG] [Thread-186096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:20:36.319 [DEBUG] [Thread-186096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:20:36.319 [DEBUG] [Thread-186096] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:20:36.319 [DEBUG] [Thread-186096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:20:36.319 [DEBUG] [Thread-186096] [transport.py] [_log()] Compression: none
2026-02-14T13:20:36.319 [DEBUG] [Thread-186096] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:20:36.376 [DEBUG] [Thread-186096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:20:36.377 [DEBUG] [Thread-186096] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:20:36.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:20:36.378 [DEBUG] [Thread-186096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:20:36.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:20:36.433 [DEBUG] [Thread-186096] [transport.py] [_log()] userauth is OK
2026-02-14T13:20:36.433 [DEBUG] [Thread-186096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:20:36.433 [DEBUG] [Thread-186096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:20:36.433 [DEBUG] [Thread-186096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:20:36.433 [DEBUG] [Thread-186096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:20:36.451 [INFO] [Thread-186096] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:20:36.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-14T13:20:36.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:20:37.255 [DEBUG] [Thread-186096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:20:37.255 [DEBUG] [Thread-186096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:20:37.303 [DEBUG] [Thread-186096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:20:37.304 [DEBUG] [Thread-186096] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:20:37.313 [DEBUG] [Thread-186096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:20:37.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:20:37.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-14T13:20:37.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-14T13:20:37.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:20:37.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:20:37.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:20:37.351 [DEBUG] [Thread-186096] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:20:49.961 [DEBUG] [Thread-186098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:21:05.022 [DEBUG] [Thread-186099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:21:07.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:21:07.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:21:07.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-14T13:21:09.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 20, 49), 14.64, 37.27, 0.0, 26.94, 15.52, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:21:09.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:20:49
2026-02-14T13:21:09.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:21:09.843 [DEBUG] [Thread-186100] [transport.py] [_log()] starting thread (client mode): 0xa57434f0
2026-02-14T13:21:09.843 [DEBUG] [Thread-186100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:21:09.863 [DEBUG] [Thread-186100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:21:09.864 [INFO] [Thread-186100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:21:09.867 [DEBUG] [Thread-186100] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:21:09.867 [DEBUG] [Thread-186100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:21:09.867 [DEBUG] [Thread-186100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:21:09.867 [DEBUG] [Thread-186100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:21:09.867 [DEBUG] [Thread-186100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:21:09.867 [DEBUG] [Thread-186100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:21:09.867 [DEBUG] [Thread-186100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:21:09.867 [DEBUG] [Thread-186100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:21:09.867 [DEBUG] [Thread-186100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:21:09.867 [DEBUG] [Thread-186100] [transport.py] [_log()] client lang: <none>
2026-02-14T13:21:09.868 [DEBUG] [Thread-186100] [transport.py] [_log()] server lang: <none>
2026-02-14T13:21:09.868 [DEBUG] [Thread-186100] [transport.py] [_log()] kex follows: False
2026-02-14T13:21:09.868 [DEBUG] [Thread-186100] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:21:09.868 [DEBUG] [Thread-186100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:21:09.868 [DEBUG] [Thread-186100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:21:09.868 [DEBUG] [Thread-186100] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:21:09.868 [DEBUG] [Thread-186100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:21:09.868 [DEBUG] [Thread-186100] [transport.py] [_log()] Compression: none
2026-02-14T13:21:09.868 [DEBUG] [Thread-186100] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:21:09.886 [DEBUG] [Thread-186100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:21:09.886 [DEBUG] [Thread-186100] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:21:09.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:21:09.887 [DEBUG] [Thread-186100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:21:09.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:21:09.929 [DEBUG] [Thread-186100] [transport.py] [_log()] userauth is OK
2026-02-14T13:21:09.929 [DEBUG] [Thread-186100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:21:09.929 [DEBUG] [Thread-186100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:21:09.929 [DEBUG] [Thread-186100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:21:09.929 [DEBUG] [Thread-186100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:21:09.961 [INFO] [Thread-186100] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:21:09.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:21:11.750 [DEBUG] [Thread-186100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:21:11.750 [DEBUG] [Thread-186100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:21:11.751 [DEBUG] [Thread-186100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:21:11.791 [DEBUG] [Thread-186100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:21:11.792 [DEBUG] [Thread-186100] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:21:11.795 [DEBUG] [Thread-186100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:21:11.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:21:11.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:21:11.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:21:11.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:21:11.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:21:11.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:21:11.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:21:11.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:21:11.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:21:11.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.472679 -999.00  +15.00  23.84     44   +2.90 1 1 1 1 1   888    0 14.50 95.46 ----- 18.6 23.8 167.8 30.0 21.5 -26.6 20.4 -25.5 20.7 -23.9 21.9 -26.2
2026-02-14T13:21:11.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:21:11.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:21:11.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.472679
2026-02-14T13:21:11.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:21:11.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:21:11.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:21:11.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:21:11.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:21:11.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:20:49', tmtdew=14.64, humidity=37.27, cloud=0.0, wind=26.94, temperature=15.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:20:39.466', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:21:11.821 [DEBUG] [Thread-186100] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:21:11.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-14T13:21:11.917 [DEBUG] [Thread-186103] [transport.py] [_log()] starting thread (client mode): 0xa575a830
2026-02-14T13:21:11.917 [DEBUG] [Thread-186103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:21:11.931 [DEBUG] [Thread-186103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:21:11.932 [INFO] [Thread-186103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:21:11.939 [DEBUG] [Thread-186103] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:21:11.940 [DEBUG] [Thread-186103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:21:11.940 [DEBUG] [Thread-186103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:21:11.940 [DEBUG] [Thread-186103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:21:11.940 [DEBUG] [Thread-186103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:21:11.940 [DEBUG] [Thread-186103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:21:11.940 [DEBUG] [Thread-186103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:21:11.940 [DEBUG] [Thread-186103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:21:11.940 [DEBUG] [Thread-186103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:21:11.940 [DEBUG] [Thread-186103] [transport.py] [_log()] client lang: <none>
2026-02-14T13:21:11.940 [DEBUG] [Thread-186103] [transport.py] [_log()] server lang: <none>
2026-02-14T13:21:11.940 [DEBUG] [Thread-186103] [transport.py] [_log()] kex follows: False
2026-02-14T13:21:11.940 [DEBUG] [Thread-186103] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:21:11.940 [DEBUG] [Thread-186103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:21:11.940 [DEBUG] [Thread-186103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:21:11.940 [DEBUG] [Thread-186103] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:21:11.940 [DEBUG] [Thread-186103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:21:11.940 [DEBUG] [Thread-186103] [transport.py] [_log()] Compression: none
2026-02-14T13:21:11.940 [DEBUG] [Thread-186103] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:21:12.000 [DEBUG] [Thread-186103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:21:12.000 [DEBUG] [Thread-186103] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:21:12.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:21:12.002 [DEBUG] [Thread-186103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:21:12.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:21:12.056 [DEBUG] [Thread-186103] [transport.py] [_log()] userauth is OK
2026-02-14T13:21:12.057 [DEBUG] [Thread-186103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:21:12.057 [DEBUG] [Thread-186103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:21:12.057 [DEBUG] [Thread-186103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:21:12.057 [DEBUG] [Thread-186103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:21:12.075 [INFO] [Thread-186103] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:21:12.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-14T13:21:12.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:21:12.920 [DEBUG] [Thread-186103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:21:12.920 [DEBUG] [Thread-186103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:21:12.969 [DEBUG] [Thread-186103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:21:12.969 [DEBUG] [Thread-186103] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:21:12.977 [DEBUG] [Thread-186103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:21:12.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:21:12.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-14T13:21: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') -> 00000000
2026-02-14T13:21:13.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:21:13.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:21:13.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:21:13.014 [DEBUG] [Thread-186103] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:21:20.061 [DEBUG] [Thread-186105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:21:23.728 [DEBUG] [Thread-186106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:21:28.932 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:21:28.933 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:21:35.113 [DEBUG] [Thread-186107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:21:43.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:21:43.037 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:21:43.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-14T13:21:44.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 21, 24), 14.67, 37.17, 0.0, 26.38, 15.39, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:21:44.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:21:24
2026-02-14T13:21:45.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:21:45.430 [DEBUG] [Thread-186108] [transport.py] [_log()] starting thread (client mode): 0xa2d1a8f0
2026-02-14T13:21:45.430 [DEBUG] [Thread-186108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:21:45.451 [DEBUG] [Thread-186108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:21:45.451 [INFO] [Thread-186108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:21:45.454 [DEBUG] [Thread-186108] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:21:45.454 [DEBUG] [Thread-186108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:21:45.454 [DEBUG] [Thread-186108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:21:45.454 [DEBUG] [Thread-186108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:21:45.454 [DEBUG] [Thread-186108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:21:45.454 [DEBUG] [Thread-186108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:21:45.455 [DEBUG] [Thread-186108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:21:45.455 [DEBUG] [Thread-186108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:21:45.455 [DEBUG] [Thread-186108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:21:45.455 [DEBUG] [Thread-186108] [transport.py] [_log()] client lang: <none>
2026-02-14T13:21:45.455 [DEBUG] [Thread-186108] [transport.py] [_log()] server lang: <none>
2026-02-14T13:21:45.455 [DEBUG] [Thread-186108] [transport.py] [_log()] kex follows: False
2026-02-14T13:21:45.455 [DEBUG] [Thread-186108] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:21:45.455 [DEBUG] [Thread-186108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:21:45.455 [DEBUG] [Thread-186108] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:21:45.455 [DEBUG] [Thread-186108] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:21:45.455 [DEBUG] [Thread-186108] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:21:45.455 [DEBUG] [Thread-186108] [transport.py] [_log()] Compression: none
2026-02-14T13:21:45.455 [DEBUG] [Thread-186108] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:21:45.471 [DEBUG] [Thread-186108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:21:45.472 [DEBUG] [Thread-186108] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:21:45.472 [DEBUG] [Thread-186108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:21:45.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:21:45.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:21:45.474 [DEBUG] [Thread-186108] [transport.py] [_log()] userauth is OK
2026-02-14T13:21:45.474 [DEBUG] [Thread-186108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:21:45.474 [DEBUG] [Thread-186108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:21:45.474 [DEBUG] [Thread-186108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:21:45.474 [DEBUG] [Thread-186108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:21:45.490 [INFO] [Thread-186108] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:21:45.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:21:46.109 [DEBUG] [Thread-186108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:21:46.109 [DEBUG] [Thread-186108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:21:46.109 [DEBUG] [Thread-186108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:21:46.150 [DEBUG] [Thread-186108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:21:46.150 [DEBUG] [Thread-186108] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:21:46.153 [DEBUG] [Thread-186108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:21:46.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:21:46.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:21:46.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:21:46.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:21:46.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:21:46.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:21:46.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:21:46.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:21:46.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:21:46.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.473026 -999.00  +15.50  16.65     44   +3.50 1 1 1 1 1   888    0 14.00 80.79 ----- 19.5 16.6 174.6 32.3 21.6 -25.9 20.4 -31.9 20.9 -25.0 22.1 -25.6
2026-02-14T13:21:46.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:21:46.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:21:46.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.473026
2026-02-14T13:21:46.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:21:46.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:21:46.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:21:46.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:21:46.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:21:46.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:21:24', tmtdew=14.67, humidity=37.17, cloud=0.0, wind=26.38, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:21:09.446', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:21:46.183 [DEBUG] [Thread-186108] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:21:46.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-14T13:21:46.279 [DEBUG] [Thread-186111] [transport.py] [_log()] starting thread (client mode): 0xa2ddcdf0
2026-02-14T13:21:46.279 [DEBUG] [Thread-186111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:21:46.294 [DEBUG] [Thread-186111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:21:46.294 [INFO] [Thread-186111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:21:46.301 [DEBUG] [Thread-186111] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:21:46.301 [DEBUG] [Thread-186111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:21:46.302 [DEBUG] [Thread-186111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:21:46.302 [DEBUG] [Thread-186111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:21:46.302 [DEBUG] [Thread-186111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:21:46.302 [DEBUG] [Thread-186111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:21:46.302 [DEBUG] [Thread-186111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:21:46.302 [DEBUG] [Thread-186111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:21:46.302 [DEBUG] [Thread-186111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:21:46.302 [DEBUG] [Thread-186111] [transport.py] [_log()] client lang: <none>
2026-02-14T13:21:46.302 [DEBUG] [Thread-186111] [transport.py] [_log()] server lang: <none>
2026-02-14T13:21:46.302 [DEBUG] [Thread-186111] [transport.py] [_log()] kex follows: False
2026-02-14T13:21:46.302 [DEBUG] [Thread-186111] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:21:46.302 [DEBUG] [Thread-186111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:21:46.302 [DEBUG] [Thread-186111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:21:46.302 [DEBUG] [Thread-186111] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:21:46.302 [DEBUG] [Thread-186111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:21:46.302 [DEBUG] [Thread-186111] [transport.py] [_log()] Compression: none
2026-02-14T13:21:46.302 [DEBUG] [Thread-186111] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:21:46.361 [DEBUG] [Thread-186111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:21:46.361 [DEBUG] [Thread-186111] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:21:46.362 [DEBUG] [Thread-186111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:21:46.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:21:46.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:21:46.416 [DEBUG] [Thread-186111] [transport.py] [_log()] userauth is OK
2026-02-14T13:21:46.417 [DEBUG] [Thread-186111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:21:46.417 [DEBUG] [Thread-186111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:21:46.417 [DEBUG] [Thread-186111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:21:46.417 [DEBUG] [Thread-186111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:21:46.436 [INFO] [Thread-186111] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:21:46.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T13:21:46.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:21:47.237 [DEBUG] [Thread-186111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:21:47.237 [DEBUG] [Thread-186111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:21:47.284 [DEBUG] [Thread-186111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:21:47.284 [DEBUG] [Thread-186111] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:21:47.294 [DEBUG] [Thread-186111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:21:47.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:21: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-14T13:21:47.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:21:47.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:21:47.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:21:47.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:21:47.329 [DEBUG] [Thread-186111] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:21:50.151 [DEBUG] [Thread-186113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:22:05.200 [DEBUG] [Thread-186114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:22:17.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:22:17.353 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:22:17.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-14T13:22:19.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 21, 24), 14.67, 37.17, 0.0, 29.98, 15.44, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:22:19.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:21:24
2026-02-14T13:22:19.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:22:19.924 [DEBUG] [Thread-186115] [transport.py] [_log()] starting thread (client mode): 0xa2dde800
2026-02-14T13:22:19.924 [DEBUG] [Thread-186115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:22:19.943 [DEBUG] [Thread-186115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:22:19.943 [INFO] [Thread-186115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:22:19.947 [DEBUG] [Thread-186115] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:22:19.947 [DEBUG] [Thread-186115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:22:19.947 [DEBUG] [Thread-186115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:22:19.947 [DEBUG] [Thread-186115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:22:19.947 [DEBUG] [Thread-186115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:22:19.947 [DEBUG] [Thread-186115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:22:19.947 [DEBUG] [Thread-186115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:22:19.947 [DEBUG] [Thread-186115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:22:19.947 [DEBUG] [Thread-186115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:22:19.947 [DEBUG] [Thread-186115] [transport.py] [_log()] client lang: <none>
2026-02-14T13:22:19.947 [DEBUG] [Thread-186115] [transport.py] [_log()] server lang: <none>
2026-02-14T13:22:19.947 [DEBUG] [Thread-186115] [transport.py] [_log()] kex follows: False
2026-02-14T13:22:19.948 [DEBUG] [Thread-186115] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:22:19.948 [DEBUG] [Thread-186115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:22:19.948 [DEBUG] [Thread-186115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:22:19.948 [DEBUG] [Thread-186115] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:22:19.948 [DEBUG] [Thread-186115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:22:19.948 [DEBUG] [Thread-186115] [transport.py] [_log()] Compression: none
2026-02-14T13:22:19.948 [DEBUG] [Thread-186115] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:22:19.966 [DEBUG] [Thread-186115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:22:19.967 [DEBUG] [Thread-186115] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:22:19.967 [DEBUG] [Thread-186115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:22:19.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:22:19.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:22:19.969 [DEBUG] [Thread-186115] [transport.py] [_log()] userauth is OK
2026-02-14T13:22:19.970 [DEBUG] [Thread-186115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:22:19.970 [DEBUG] [Thread-186115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:22:19.970 [DEBUG] [Thread-186115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:22:19.970 [DEBUG] [Thread-186115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:22:19.988 [INFO] [Thread-186115] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:22:19.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:22:20.240 [DEBUG] [Thread-186117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:22:20.627 [DEBUG] [Thread-186115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:22:20.627 [DEBUG] [Thread-186115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:22:20.627 [DEBUG] [Thread-186115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:22:20.668 [DEBUG] [Thread-186115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:22:20.669 [DEBUG] [Thread-186115] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:22:20.672 [DEBUG] [Thread-186115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:22:20.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:22:20.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:22:20.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:22:20.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:22:20.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:22:20.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:22:20.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:22:20.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:22:20.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:22:20.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.473373 -999.00  +15.70  17.78     44   +3.50 1 1 1 1 1   888    0 14.29 87.53 ----- 19.7 17.8 181.6 30.8 21.7 -24.9 20.5 -24.0 20.9 -23.3 22.1 -24.1
2026-02-14T13:22:20.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:22:20.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:22:20.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.473373
2026-02-14T13:22:20.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:22:20.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:22:20.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:22:20.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:22:20.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:22:20.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:21:24', tmtdew=14.67, humidity=37.17, cloud=0.0, wind=29.98, temperature=15.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:21:39.427', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:22:20.700 [DEBUG] [Thread-186115] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:22:20.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T13:22:20.796 [DEBUG] [Thread-186119] [transport.py] [_log()] starting thread (client mode): 0xa2db68c0
2026-02-14T13:22:20.796 [DEBUG] [Thread-186119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:22:20.811 [DEBUG] [Thread-186119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:22:20.811 [INFO] [Thread-186119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:22:20.818 [DEBUG] [Thread-186119] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:22:20.819 [DEBUG] [Thread-186119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:22:20.819 [DEBUG] [Thread-186119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:22:20.819 [DEBUG] [Thread-186119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:22:20.819 [DEBUG] [Thread-186119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:22:20.819 [DEBUG] [Thread-186119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:22:20.819 [DEBUG] [Thread-186119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:22:20.820 [DEBUG] [Thread-186119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:22:20.820 [DEBUG] [Thread-186119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:22:20.820 [DEBUG] [Thread-186119] [transport.py] [_log()] client lang: <none>
2026-02-14T13:22:20.820 [DEBUG] [Thread-186119] [transport.py] [_log()] server lang: <none>
2026-02-14T13:22:20.820 [DEBUG] [Thread-186119] [transport.py] [_log()] kex follows: False
2026-02-14T13:22:20.820 [DEBUG] [Thread-186119] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:22:20.820 [DEBUG] [Thread-186119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:22:20.820 [DEBUG] [Thread-186119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:22:20.821 [DEBUG] [Thread-186119] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:22:20.821 [DEBUG] [Thread-186119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:22:20.821 [DEBUG] [Thread-186119] [transport.py] [_log()] Compression: none
2026-02-14T13:22:20.821 [DEBUG] [Thread-186119] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:22:20.877 [DEBUG] [Thread-186119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:22:20.877 [DEBUG] [Thread-186119] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:22:20.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:22:20.878 [DEBUG] [Thread-186119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:22:20.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:22:20.932 [DEBUG] [Thread-186119] [transport.py] [_log()] userauth is OK
2026-02-14T13:22:20.933 [DEBUG] [Thread-186119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:22:20.933 [DEBUG] [Thread-186119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:22:20.933 [DEBUG] [Thread-186119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:22:20.933 [DEBUG] [Thread-186119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:22:20.956 [INFO] [Thread-186119] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:22:20.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T13:22:20.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:22:21.747 [DEBUG] [Thread-186119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:22:21.748 [DEBUG] [Thread-186119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:22:21.796 [DEBUG] [Thread-186119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:22:21.796 [DEBUG] [Thread-186119] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:22:21.805 [DEBUG] [Thread-186119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:22:21.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:22:21.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:22:21.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:22:21.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:22:21.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:22:21.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:22:21.842 [DEBUG] [Thread-186119] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:22:23.762 [DEBUG] [Thread-186121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:22:29.082 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:22:29.083 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:22:35.276 [DEBUG] [Thread-186122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:22:50.325 [DEBUG] [Thread-186123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:22:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:22:51.865 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:22:51.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-14T13:22:53.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 22, 36), 14.91, 36.39, 0.0, 40.96, 16.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:22:53.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:22:36
2026-02-14T13:22:54.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:22:54.307 [DEBUG] [Thread-186124] [transport.py] [_log()] starting thread (client mode): 0xa2d3e2f0
2026-02-14T13:22:54.307 [DEBUG] [Thread-186124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:22:54.326 [DEBUG] [Thread-186124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:22:54.326 [INFO] [Thread-186124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:22:54.330 [DEBUG] [Thread-186124] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:22:54.330 [DEBUG] [Thread-186124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:22:54.330 [DEBUG] [Thread-186124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:22:54.330 [DEBUG] [Thread-186124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:22:54.330 [DEBUG] [Thread-186124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:22:54.330 [DEBUG] [Thread-186124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:22:54.330 [DEBUG] [Thread-186124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:22:54.330 [DEBUG] [Thread-186124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:22:54.330 [DEBUG] [Thread-186124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:22:54.330 [DEBUG] [Thread-186124] [transport.py] [_log()] client lang: <none>
2026-02-14T13:22:54.330 [DEBUG] [Thread-186124] [transport.py] [_log()] server lang: <none>
2026-02-14T13:22:54.330 [DEBUG] [Thread-186124] [transport.py] [_log()] kex follows: False
2026-02-14T13:22:54.330 [DEBUG] [Thread-186124] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:22:54.330 [DEBUG] [Thread-186124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:22:54.330 [DEBUG] [Thread-186124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:22:54.330 [DEBUG] [Thread-186124] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:22:54.330 [DEBUG] [Thread-186124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:22:54.330 [DEBUG] [Thread-186124] [transport.py] [_log()] Compression: none
2026-02-14T13:22:54.330 [DEBUG] [Thread-186124] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:22:54.347 [DEBUG] [Thread-186124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:22:54.348 [DEBUG] [Thread-186124] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:22:54.348 [DEBUG] [Thread-186124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:22:54.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:22:54.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:22:54.350 [DEBUG] [Thread-186124] [transport.py] [_log()] userauth is OK
2026-02-14T13:22:54.351 [DEBUG] [Thread-186124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:22:54.351 [DEBUG] [Thread-186124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:22:54.351 [DEBUG] [Thread-186124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:22:54.351 [DEBUG] [Thread-186124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:22:54.385 [INFO] [Thread-186124] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:22:54.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:22:55.044 [DEBUG] [Thread-186124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:22:55.044 [DEBUG] [Thread-186124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:22:55.044 [DEBUG] [Thread-186124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:22:55.085 [DEBUG] [Thread-186124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:22:55.085 [DEBUG] [Thread-186124] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:22:55.088 [DEBUG] [Thread-186124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:22:55.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:22:55.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:22:55.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:22:55.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:22:55.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:22:55.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:22:55.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:22:55.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:22:55.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:22:55.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.473721 -999.00  +16.10  18.58     42   +3.40 1 1 1 1 1   888    0 14.90 96.01 ----- 21.2 18.6 150.2 32.9 21.8 -25.0 20.7 -24.6 21.1 -22.9 22.2 -25.2
2026-02-14T13:22:55.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:22:55.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:22:55.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.473721
2026-02-14T13:22:55.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:22:55.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:22:55.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:22:55.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:22:55.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:22:55.112 [DEBUG] [Thread-186124] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:22:55.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:22:36', tmtdew=14.91, humidity=36.39, cloud=0.0, wind=40.96, temperature=16.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:22:09.494', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:22:55.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-14T13:22:55.208 [DEBUG] [Thread-186127] [transport.py] [_log()] starting thread (client mode): 0xa2d3e290
2026-02-14T13:22:55.208 [DEBUG] [Thread-186127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:22:55.222 [DEBUG] [Thread-186127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:22:55.222 [INFO] [Thread-186127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:22:55.230 [DEBUG] [Thread-186127] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:22:55.230 [DEBUG] [Thread-186127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:22:55.230 [DEBUG] [Thread-186127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:22:55.230 [DEBUG] [Thread-186127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:22:55.230 [DEBUG] [Thread-186127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:22:55.230 [DEBUG] [Thread-186127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:22:55.230 [DEBUG] [Thread-186127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:22:55.230 [DEBUG] [Thread-186127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:22:55.230 [DEBUG] [Thread-186127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:22:55.230 [DEBUG] [Thread-186127] [transport.py] [_log()] client lang: <none>
2026-02-14T13:22:55.230 [DEBUG] [Thread-186127] [transport.py] [_log()] server lang: <none>
2026-02-14T13:22:55.230 [DEBUG] [Thread-186127] [transport.py] [_log()] kex follows: False
2026-02-14T13:22:55.230 [DEBUG] [Thread-186127] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:22:55.230 [DEBUG] [Thread-186127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:22:55.230 [DEBUG] [Thread-186127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:22:55.230 [DEBUG] [Thread-186127] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:22:55.230 [DEBUG] [Thread-186127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:22:55.230 [DEBUG] [Thread-186127] [transport.py] [_log()] Compression: none
2026-02-14T13:22:55.230 [DEBUG] [Thread-186127] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:22:55.288 [DEBUG] [Thread-186127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:22:55.288 [DEBUG] [Thread-186127] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:22:55.289 [DEBUG] [Thread-186127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:22:55.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:22:55.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:22:55.344 [DEBUG] [Thread-186127] [transport.py] [_log()] userauth is OK
2026-02-14T13:22:55.344 [DEBUG] [Thread-186127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:22:55.344 [DEBUG] [Thread-186127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:22:55.345 [DEBUG] [Thread-186127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:22:55.345 [DEBUG] [Thread-186127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:22:55.367 [INFO] [Thread-186127] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:22:55.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-14T13:22:55.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:22:56.174 [DEBUG] [Thread-186127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:22:56.174 [DEBUG] [Thread-186127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:22:56.223 [DEBUG] [Thread-186127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:22:56.223 [DEBUG] [Thread-186127] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:22:56.232 [DEBUG] [Thread-186127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:22:56.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:22:56.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-14T13:22:56.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-14T13:22:56.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:22:56.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:22:56.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:22:56.266 [DEBUG] [Thread-186127] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:23:05.357 [DEBUG] [Thread-186129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:23:20.417 [DEBUG] [Thread-186130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:23:23.798 [DEBUG] [Thread-186131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:23:26.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:23:26.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:23:26.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-14T13:23:28.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 23, 12), 14.17, 38.45, 0.0, 31.6, 15.47, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:23:28.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:23:12
2026-02-14T13:23:28.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:23:28.956 [DEBUG] [Thread-186132] [transport.py] [_log()] starting thread (client mode): 0xa5759090
2026-02-14T13:23:28.956 [DEBUG] [Thread-186132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:23:28.977 [DEBUG] [Thread-186132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:23:28.977 [INFO] [Thread-186132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:23:28.980 [DEBUG] [Thread-186132] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:23:28.980 [DEBUG] [Thread-186132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:23:28.980 [DEBUG] [Thread-186132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:23:28.980 [DEBUG] [Thread-186132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:23:28.980 [DEBUG] [Thread-186132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:23:28.980 [DEBUG] [Thread-186132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:23:28.980 [DEBUG] [Thread-186132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:23:28.980 [DEBUG] [Thread-186132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:23:28.980 [DEBUG] [Thread-186132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:23:28.980 [DEBUG] [Thread-186132] [transport.py] [_log()] client lang: <none>
2026-02-14T13:23:28.980 [DEBUG] [Thread-186132] [transport.py] [_log()] server lang: <none>
2026-02-14T13:23:28.980 [DEBUG] [Thread-186132] [transport.py] [_log()] kex follows: False
2026-02-14T13:23:28.980 [DEBUG] [Thread-186132] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:23:28.980 [DEBUG] [Thread-186132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:23:28.980 [DEBUG] [Thread-186132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:23:28.980 [DEBUG] [Thread-186132] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:23:28.980 [DEBUG] [Thread-186132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:23:28.980 [DEBUG] [Thread-186132] [transport.py] [_log()] Compression: none
2026-02-14T13:23:28.980 [DEBUG] [Thread-186132] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:23:28.998 [DEBUG] [Thread-186132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:23:28.998 [DEBUG] [Thread-186132] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:23:28.999 [DEBUG] [Thread-186132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:23:28.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:23:29.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:23:29.002 [DEBUG] [Thread-186132] [transport.py] [_log()] userauth is OK
2026-02-14T13:23:29.002 [DEBUG] [Thread-186132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:23:29.002 [DEBUG] [Thread-186132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:23:29.002 [DEBUG] [Thread-186132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:23:29.003 [DEBUG] [Thread-186132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:23:29.028 [INFO] [Thread-186132] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:23:29.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:23:29.231 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:23:29.233 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:23:29.681 [DEBUG] [Thread-186132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:23:29.681 [DEBUG] [Thread-186132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:23:29.682 [DEBUG] [Thread-186132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:23:29.722 [DEBUG] [Thread-186132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:23:29.723 [DEBUG] [Thread-186132] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:23:29.726 [DEBUG] [Thread-186132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:23:29.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:23:29.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:23:29.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:23:29.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:23:29.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:23:29.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:23:29.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:23:29.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:23:29.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:23:29.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.474068 -999.00  +16.10  20.97     42   +3.40 1 1 1 1 1   888    0 13.98 87.18 ----- 16.5 21.0 167.0 27.0 21.9 -26.1 20.8 -26.3 21.1 -23.9 22.3 -25.7
2026-02-14T13:23:29.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:23:29.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:23:29.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.474068
2026-02-14T13:23:29.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:23:29.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:23:29.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:23:29.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:23:29.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:23:29.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:23:12', tmtdew=14.17, humidity=38.45, cloud=0.0, wind=31.6, temperature=15.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:22:39.475', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:23:29.758 [DEBUG] [Thread-186132] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:23:29.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-14T13:23:29.861 [DEBUG] [Thread-186135] [transport.py] [_log()] starting thread (client mode): 0xa2d3c610
2026-02-14T13:23:29.861 [DEBUG] [Thread-186135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:23:29.875 [DEBUG] [Thread-186135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:23:29.875 [INFO] [Thread-186135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:23:29.885 [DEBUG] [Thread-186135] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:23:29.885 [DEBUG] [Thread-186135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:23:29.885 [DEBUG] [Thread-186135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:23:29.886 [DEBUG] [Thread-186135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:23:29.886 [DEBUG] [Thread-186135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:23:29.886 [DEBUG] [Thread-186135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:23:29.886 [DEBUG] [Thread-186135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:23:29.886 [DEBUG] [Thread-186135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:23:29.886 [DEBUG] [Thread-186135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:23:29.886 [DEBUG] [Thread-186135] [transport.py] [_log()] client lang: <none>
2026-02-14T13:23:29.886 [DEBUG] [Thread-186135] [transport.py] [_log()] server lang: <none>
2026-02-14T13:23:29.886 [DEBUG] [Thread-186135] [transport.py] [_log()] kex follows: False
2026-02-14T13:23:29.886 [DEBUG] [Thread-186135] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:23:29.886 [DEBUG] [Thread-186135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:23:29.886 [DEBUG] [Thread-186135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:23:29.886 [DEBUG] [Thread-186135] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:23:29.887 [DEBUG] [Thread-186135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:23:29.887 [DEBUG] [Thread-186135] [transport.py] [_log()] Compression: none
2026-02-14T13:23:29.887 [DEBUG] [Thread-186135] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:23:29.944 [DEBUG] [Thread-186135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:23:29.945 [DEBUG] [Thread-186135] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:23:29.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:23:29.946 [DEBUG] [Thread-186135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:23:29.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:23:30.000 [DEBUG] [Thread-186135] [transport.py] [_log()] userauth is OK
2026-02-14T13:23:30.001 [DEBUG] [Thread-186135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:23:30.001 [DEBUG] [Thread-186135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:23:30.001 [DEBUG] [Thread-186135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:23:30.001 [DEBUG] [Thread-186135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:23:30.021 [INFO] [Thread-186135] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:23:30.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T13:23:30.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:23:30.791 [DEBUG] [Thread-186135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:23:30.791 [DEBUG] [Thread-186135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:23:30.840 [DEBUG] [Thread-186135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:23:30.840 [DEBUG] [Thread-186135] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:23:30.849 [DEBUG] [Thread-186135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:23:30.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:23:30.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:23:30.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:23:30.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:23:30.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:23:30.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:23:30.886 [DEBUG] [Thread-186135] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:23:35.453 [DEBUG] [Thread-186137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:23:50.510 [DEBUG] [Thread-186138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:24:00.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:24:00.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:24:00.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:24:02.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 23, 47), 13.93, 39.09, 0.0, 31.14, 15.49, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:24:02.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:23:47
2026-02-14T13:24:03.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:24:03.285 [DEBUG] [Thread-186139] [transport.py] [_log()] starting thread (client mode): 0xa5758130
2026-02-14T13:24:03.285 [DEBUG] [Thread-186139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:24:03.305 [DEBUG] [Thread-186139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:24:03.305 [INFO] [Thread-186139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:24:03.308 [DEBUG] [Thread-186139] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:24:03.308 [DEBUG] [Thread-186139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:24:03.308 [DEBUG] [Thread-186139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:24:03.309 [DEBUG] [Thread-186139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:24:03.309 [DEBUG] [Thread-186139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:24:03.309 [DEBUG] [Thread-186139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:24:03.309 [DEBUG] [Thread-186139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:24:03.309 [DEBUG] [Thread-186139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:24:03.309 [DEBUG] [Thread-186139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:24:03.309 [DEBUG] [Thread-186139] [transport.py] [_log()] client lang: <none>
2026-02-14T13:24:03.309 [DEBUG] [Thread-186139] [transport.py] [_log()] server lang: <none>
2026-02-14T13:24:03.309 [DEBUG] [Thread-186139] [transport.py] [_log()] kex follows: False
2026-02-14T13:24:03.309 [DEBUG] [Thread-186139] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:24:03.309 [DEBUG] [Thread-186139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:24:03.309 [DEBUG] [Thread-186139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:24:03.309 [DEBUG] [Thread-186139] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:24:03.309 [DEBUG] [Thread-186139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:24:03.309 [DEBUG] [Thread-186139] [transport.py] [_log()] Compression: none
2026-02-14T13:24:03.309 [DEBUG] [Thread-186139] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:24:03.327 [DEBUG] [Thread-186139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:24:03.327 [DEBUG] [Thread-186139] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:24:03.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:24:03.328 [DEBUG] [Thread-186139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:24:03.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:24:03.330 [DEBUG] [Thread-186139] [transport.py] [_log()] userauth is OK
2026-02-14T13:24:03.331 [DEBUG] [Thread-186139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:24:03.331 [DEBUG] [Thread-186139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:24:03.331 [DEBUG] [Thread-186139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:24:03.331 [DEBUG] [Thread-186139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:24:03.345 [INFO] [Thread-186139] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:24:03.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:24:04.144 [DEBUG] [Thread-186139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:24:04.145 [DEBUG] [Thread-186139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:24:04.145 [DEBUG] [Thread-186139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:24:04.185 [DEBUG] [Thread-186139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:24:04.186 [DEBUG] [Thread-186139] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:24:04.189 [DEBUG] [Thread-186139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:24:04.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:24:04.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:24:04.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:24:04.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:24:04.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:24:04.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:24:04.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:24:04.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:24:04.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:24:04.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.474415 -999.00  +16.50  19.53     41   +3.40 1 1 1 1 1   888    0 14.63 91.95 ----- 23.1 19.5 169.4 25.4 22.1 -24.9 21.1 -24.3 21.4 -22.6 22.5 -24.5
2026-02-14T13:24:04.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:24:04.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:24:04.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.474415
2026-02-14T13:24:04.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:24:04.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:24:04.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:24:04.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:24:04.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:24:04.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:23:47', tmtdew=13.93, humidity=39.09, cloud=0.0, wind=31.14, temperature=15.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:23:09.456', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:24:04.214 [DEBUG] [Thread-186139] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:24:04.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-14T13:24:04.307 [DEBUG] [Thread-186142] [transport.py] [_log()] starting thread (client mode): 0xa5741ba0
2026-02-14T13:24:04.307 [DEBUG] [Thread-186142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:24:04.321 [DEBUG] [Thread-186142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:24:04.321 [INFO] [Thread-186142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:24:04.329 [DEBUG] [Thread-186142] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:24:04.329 [DEBUG] [Thread-186142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:24:04.329 [DEBUG] [Thread-186142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:24:04.329 [DEBUG] [Thread-186142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:24:04.330 [DEBUG] [Thread-186142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:24:04.330 [DEBUG] [Thread-186142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:24:04.330 [DEBUG] [Thread-186142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:24:04.330 [DEBUG] [Thread-186142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:24:04.330 [DEBUG] [Thread-186142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:24:04.330 [DEBUG] [Thread-186142] [transport.py] [_log()] client lang: <none>
2026-02-14T13:24:04.330 [DEBUG] [Thread-186142] [transport.py] [_log()] server lang: <none>
2026-02-14T13:24:04.330 [DEBUG] [Thread-186142] [transport.py] [_log()] kex follows: False
2026-02-14T13:24:04.330 [DEBUG] [Thread-186142] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:24:04.330 [DEBUG] [Thread-186142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:24:04.330 [DEBUG] [Thread-186142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:24:04.330 [DEBUG] [Thread-186142] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:24:04.330 [DEBUG] [Thread-186142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:24:04.330 [DEBUG] [Thread-186142] [transport.py] [_log()] Compression: none
2026-02-14T13:24:04.330 [DEBUG] [Thread-186142] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:24:04.388 [DEBUG] [Thread-186142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:24:04.389 [DEBUG] [Thread-186142] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:24:04.389 [DEBUG] [Thread-186142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:24:04.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:24:04.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:24:04.444 [DEBUG] [Thread-186142] [transport.py] [_log()] userauth is OK
2026-02-14T13:24:04.445 [DEBUG] [Thread-186142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:24:04.445 [DEBUG] [Thread-186142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:24:04.445 [DEBUG] [Thread-186142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:24:04.445 [DEBUG] [Thread-186142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:24:04.463 [INFO] [Thread-186142] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:24:04.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-14T13:24:04.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:24:05.284 [DEBUG] [Thread-186142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:24:05.285 [DEBUG] [Thread-186142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:24:05.332 [DEBUG] [Thread-186142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:24:05.333 [DEBUG] [Thread-186142] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:24:05.341 [DEBUG] [Thread-186142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:24:05.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:24:05.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-14T13:24:05.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:24:05.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:24:05.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:24:05.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:24:05.374 [DEBUG] [Thread-186142] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:24:05.545 [DEBUG] [Thread-186144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:24:20.601 [DEBUG] [Thread-186145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:24:23.831 [DEBUG] [Thread-186146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:24:29.376 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:24:29.377 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:24:35.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:24:35.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:24:35.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-14T13:24:35.639 [DEBUG] [Thread-186147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:24:37.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 24, 23), 13.92, 39.14, 0.0, 30.28, 15.5, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:24:37.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:24:23
2026-02-14T13:24:37.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:24:37.766 [DEBUG] [Thread-186148] [transport.py] [_log()] starting thread (client mode): 0xa2db6da0
2026-02-14T13:24:37.766 [DEBUG] [Thread-186148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:24:37.786 [DEBUG] [Thread-186148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:24:37.786 [INFO] [Thread-186148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:24:37.790 [DEBUG] [Thread-186148] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:24:37.790 [DEBUG] [Thread-186148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:24:37.790 [DEBUG] [Thread-186148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:24:37.790 [DEBUG] [Thread-186148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:24:37.790 [DEBUG] [Thread-186148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:24:37.790 [DEBUG] [Thread-186148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:24:37.790 [DEBUG] [Thread-186148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:24:37.790 [DEBUG] [Thread-186148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:24:37.790 [DEBUG] [Thread-186148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:24:37.790 [DEBUG] [Thread-186148] [transport.py] [_log()] client lang: <none>
2026-02-14T13:24:37.790 [DEBUG] [Thread-186148] [transport.py] [_log()] server lang: <none>
2026-02-14T13:24:37.790 [DEBUG] [Thread-186148] [transport.py] [_log()] kex follows: False
2026-02-14T13:24:37.790 [DEBUG] [Thread-186148] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:24:37.790 [DEBUG] [Thread-186148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:24:37.790 [DEBUG] [Thread-186148] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:24:37.791 [DEBUG] [Thread-186148] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:24:37.791 [DEBUG] [Thread-186148] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:24:37.791 [DEBUG] [Thread-186148] [transport.py] [_log()] Compression: none
2026-02-14T13:24:37.791 [DEBUG] [Thread-186148] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:24:37.808 [DEBUG] [Thread-186148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:24:37.809 [DEBUG] [Thread-186148] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:24:37.810 [DEBUG] [Thread-186148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:24:37.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:24:37.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:24:37.812 [DEBUG] [Thread-186148] [transport.py] [_log()] userauth is OK
2026-02-14T13:24:37.812 [DEBUG] [Thread-186148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:24:37.812 [DEBUG] [Thread-186148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:24:37.812 [DEBUG] [Thread-186148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:24:37.812 [DEBUG] [Thread-186148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:24:37.837 [INFO] [Thread-186148] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:24:37.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:24:38.476 [DEBUG] [Thread-186148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:24:38.476 [DEBUG] [Thread-186148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:24:38.477 [DEBUG] [Thread-186148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:24:38.518 [DEBUG] [Thread-186148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:24:38.518 [DEBUG] [Thread-186148] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:24:38.522 [DEBUG] [Thread-186148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:24:38.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:24:38.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:24:38.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:24:38.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:24:38.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:24:38.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:24:38.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:24:38.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:24:38.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:24:38.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.475109 -999.00  +15.60  32.02     44   +3.50 1 1 2 1 1   888    0 14.25 75.06 ----- 22.3 32.0 166.2 38.4 22.1 -27.9 20.9 -24.7 21.2 -26.0 22.5 -25.4
2026-02-14T13:24:38.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:24:38.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:24:38.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.475109
2026-02-14T13:24:38.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:24:38.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:24:38.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:24:38.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:24:38.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:24:38.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:24:23', tmtdew=13.92, humidity=39.14, cloud=0.0, wind=30.28, temperature=15.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:24:09.418', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:24:38.548 [DEBUG] [Thread-186148] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:24:38.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-14T13:24:38.645 [DEBUG] [Thread-186151] [transport.py] [_log()] starting thread (client mode): 0xa2d223e0
2026-02-14T13:24:38.645 [DEBUG] [Thread-186151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:24:38.658 [DEBUG] [Thread-186151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:24:38.659 [INFO] [Thread-186151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:24:38.666 [DEBUG] [Thread-186151] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:24:38.666 [DEBUG] [Thread-186151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:24:38.666 [DEBUG] [Thread-186151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:24:38.666 [DEBUG] [Thread-186151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:24:38.666 [DEBUG] [Thread-186151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:24:38.666 [DEBUG] [Thread-186151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:24:38.666 [DEBUG] [Thread-186151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:24:38.666 [DEBUG] [Thread-186151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:24:38.666 [DEBUG] [Thread-186151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:24:38.666 [DEBUG] [Thread-186151] [transport.py] [_log()] client lang: <none>
2026-02-14T13:24:38.666 [DEBUG] [Thread-186151] [transport.py] [_log()] server lang: <none>
2026-02-14T13:24:38.666 [DEBUG] [Thread-186151] [transport.py] [_log()] kex follows: False
2026-02-14T13:24:38.666 [DEBUG] [Thread-186151] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:24:38.667 [DEBUG] [Thread-186151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:24:38.667 [DEBUG] [Thread-186151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:24:38.667 [DEBUG] [Thread-186151] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:24:38.667 [DEBUG] [Thread-186151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:24:38.667 [DEBUG] [Thread-186151] [transport.py] [_log()] Compression: none
2026-02-14T13:24:38.667 [DEBUG] [Thread-186151] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:24:38.723 [DEBUG] [Thread-186151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:24:38.724 [DEBUG] [Thread-186151] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:24:38.725 [DEBUG] [Thread-186151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:24:38.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:24:38.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:24:38.780 [DEBUG] [Thread-186151] [transport.py] [_log()] userauth is OK
2026-02-14T13:24:38.780 [DEBUG] [Thread-186151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:24:38.780 [DEBUG] [Thread-186151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:24:38.780 [DEBUG] [Thread-186151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:24:38.780 [DEBUG] [Thread-186151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:24:38.794 [INFO] [Thread-186151] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:24:38.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-14T13:24:38.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:24:39.582 [DEBUG] [Thread-186151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:24:39.582 [DEBUG] [Thread-186151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:24:39.630 [DEBUG] [Thread-186151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:24:39.631 [DEBUG] [Thread-186151] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:24:39.640 [DEBUG] [Thread-186151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:24:39.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:24:39.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:24:39.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:24:39.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:24:39.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:24:39.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:24:39.677 [DEBUG] [Thread-186151] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:24:50.678 [DEBUG] [Thread-186153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:25:05.725 [DEBUG] [Thread-186154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:25:09.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:25:09.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:25:09.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-14T13:25:11.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 24, 58), 13.55, 40.04, 0.0, 29.43, 15.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:25:11.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:24:58
2026-02-14T13:25:12.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:25:12.343 [DEBUG] [Thread-186155] [transport.py] [_log()] starting thread (client mode): 0xa2d1b190
2026-02-14T13:25:12.343 [DEBUG] [Thread-186155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:25:12.363 [DEBUG] [Thread-186155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:25:12.363 [INFO] [Thread-186155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:25:12.366 [DEBUG] [Thread-186155] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:25:12.366 [DEBUG] [Thread-186155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:25:12.367 [DEBUG] [Thread-186155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:25:12.367 [DEBUG] [Thread-186155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:25:12.367 [DEBUG] [Thread-186155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:25:12.367 [DEBUG] [Thread-186155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:25:12.367 [DEBUG] [Thread-186155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:25:12.367 [DEBUG] [Thread-186155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:25:12.367 [DEBUG] [Thread-186155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:25:12.367 [DEBUG] [Thread-186155] [transport.py] [_log()] client lang: <none>
2026-02-14T13:25:12.367 [DEBUG] [Thread-186155] [transport.py] [_log()] server lang: <none>
2026-02-14T13:25:12.367 [DEBUG] [Thread-186155] [transport.py] [_log()] kex follows: False
2026-02-14T13:25:12.367 [DEBUG] [Thread-186155] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:25:12.367 [DEBUG] [Thread-186155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:25:12.367 [DEBUG] [Thread-186155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:25:12.368 [DEBUG] [Thread-186155] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:25:12.368 [DEBUG] [Thread-186155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:25:12.368 [DEBUG] [Thread-186155] [transport.py] [_log()] Compression: none
2026-02-14T13:25:12.368 [DEBUG] [Thread-186155] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:25:12.389 [DEBUG] [Thread-186155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:25:12.390 [DEBUG] [Thread-186155] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:25:12.390 [DEBUG] [Thread-186155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:25:12.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:25:12.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:25:12.433 [DEBUG] [Thread-186155] [transport.py] [_log()] userauth is OK
2026-02-14T13:25:12.433 [DEBUG] [Thread-186155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:25:12.433 [DEBUG] [Thread-186155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:25:12.433 [DEBUG] [Thread-186155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:25:12.433 [DEBUG] [Thread-186155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:25:12.456 [INFO] [Thread-186155] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:25:12.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:25:18.722 [DEBUG] [Thread-186155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:25:18.723 [DEBUG] [Thread-186155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:25:18.723 [DEBUG] [Thread-186155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:25:18.763 [DEBUG] [Thread-186155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:25:18.763 [DEBUG] [Thread-186155] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:25:18.766 [DEBUG] [Thread-186155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:25:18.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:25:18.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:25:18.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:25:18.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:25:18.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:25:18.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:25:18.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:25:18.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:25:18.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:25:18.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.475457 -999.00  +15.20  19.56     45   +3.50 1 1 1 1 1   888    0 13.75 73.05 ----- 23.6 19.6 155.4 32.3 21.9 -27.6 20.8 -25.1 21.1 -25.0 22.4 -26.2
2026-02-14T13:25:18.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:25:18.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:25:18.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.475457
2026-02-14T13:25:18.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:25:18.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:25:18.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:25:18.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:25:18.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:25:18.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:24:58', tmtdew=13.55, humidity=40.04, cloud=0.0, wind=29.43, temperature=15.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:24:39.485', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:25:18.803 [DEBUG] [Thread-186155] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:25:18.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-14T13:25:18.904 [DEBUG] [Thread-186158] [transport.py] [_log()] starting thread (client mode): 0xa5740c70
2026-02-14T13:25:18.904 [DEBUG] [Thread-186158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:25:18.918 [DEBUG] [Thread-186158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:25:18.918 [INFO] [Thread-186158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:25:18.926 [DEBUG] [Thread-186158] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:25:18.926 [DEBUG] [Thread-186158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:25:18.926 [DEBUG] [Thread-186158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:25:18.926 [DEBUG] [Thread-186158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:25:18.926 [DEBUG] [Thread-186158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:25:18.926 [DEBUG] [Thread-186158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:25:18.927 [DEBUG] [Thread-186158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:25:18.927 [DEBUG] [Thread-186158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:25:18.927 [DEBUG] [Thread-186158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:25:18.927 [DEBUG] [Thread-186158] [transport.py] [_log()] client lang: <none>
2026-02-14T13:25:18.927 [DEBUG] [Thread-186158] [transport.py] [_log()] server lang: <none>
2026-02-14T13:25:18.927 [DEBUG] [Thread-186158] [transport.py] [_log()] kex follows: False
2026-02-14T13:25:18.927 [DEBUG] [Thread-186158] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:25:18.927 [DEBUG] [Thread-186158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:25:18.928 [DEBUG] [Thread-186158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:25:18.928 [DEBUG] [Thread-186158] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:25:18.928 [DEBUG] [Thread-186158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:25:18.928 [DEBUG] [Thread-186158] [transport.py] [_log()] Compression: none
2026-02-14T13:25:18.928 [DEBUG] [Thread-186158] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:25:18.985 [DEBUG] [Thread-186158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:25:18.986 [DEBUG] [Thread-186158] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:25:18.986 [DEBUG] [Thread-186158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:25:18.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:25:18.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:25:19.040 [DEBUG] [Thread-186158] [transport.py] [_log()] userauth is OK
2026-02-14T13:25:19.041 [DEBUG] [Thread-186158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:25:19.041 [DEBUG] [Thread-186158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:25:19.041 [DEBUG] [Thread-186158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:25:19.041 [DEBUG] [Thread-186158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:25:19.060 [INFO] [Thread-186158] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:25:19.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-14T13:25:19.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:25:19.868 [DEBUG] [Thread-186158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:25:19.869 [DEBUG] [Thread-186158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:25:19.916 [DEBUG] [Thread-186158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:25:19.917 [DEBUG] [Thread-186158] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:25:19.926 [DEBUG] [Thread-186158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:25:19.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:25:19.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-14T13:25:19.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-14T13:25:19.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:25:19.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:25:19.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:25:19.967 [DEBUG] [Thread-186158] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:25:20.763 [DEBUG] [Thread-186160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:25:23.867 [DEBUG] [Thread-186161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:25:29.516 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:25:29.517 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:25:35.814 [DEBUG] [Thread-186162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:25:49.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:25:49.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:25:49.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-14T13:25:50.850 [DEBUG] [Thread-186163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:25:52.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 25, 33), 14.47, 37.65, 0.0, 34.08, 16.41, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:25:52.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:25:33
2026-02-14T13:25:52.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:25:53.002 [DEBUG] [Thread-186164] [transport.py] [_log()] starting thread (client mode): 0xa2d3ef80
2026-02-14T13:25:53.003 [DEBUG] [Thread-186164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:25:53.023 [DEBUG] [Thread-186164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:25:53.023 [INFO] [Thread-186164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:25:53.026 [DEBUG] [Thread-186164] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:25:53.026 [DEBUG] [Thread-186164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:25:53.026 [DEBUG] [Thread-186164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:25:53.026 [DEBUG] [Thread-186164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:25:53.026 [DEBUG] [Thread-186164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:25:53.026 [DEBUG] [Thread-186164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:25:53.026 [DEBUG] [Thread-186164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:25:53.026 [DEBUG] [Thread-186164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:25:53.026 [DEBUG] [Thread-186164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:25:53.027 [DEBUG] [Thread-186164] [transport.py] [_log()] client lang: <none>
2026-02-14T13:25:53.027 [DEBUG] [Thread-186164] [transport.py] [_log()] server lang: <none>
2026-02-14T13:25:53.027 [DEBUG] [Thread-186164] [transport.py] [_log()] kex follows: False
2026-02-14T13:25:53.027 [DEBUG] [Thread-186164] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:25:53.027 [DEBUG] [Thread-186164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:25:53.027 [DEBUG] [Thread-186164] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:25:53.027 [DEBUG] [Thread-186164] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:25:53.027 [DEBUG] [Thread-186164] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:25:53.027 [DEBUG] [Thread-186164] [transport.py] [_log()] Compression: none
2026-02-14T13:25:53.027 [DEBUG] [Thread-186164] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:25:53.045 [DEBUG] [Thread-186164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:25:53.045 [DEBUG] [Thread-186164] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:25:53.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:25:53.046 [DEBUG] [Thread-186164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:25:53.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:25:53.049 [DEBUG] [Thread-186164] [transport.py] [_log()] userauth is OK
2026-02-14T13:25:53.049 [DEBUG] [Thread-186164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:25:53.049 [DEBUG] [Thread-186164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:25:53.049 [DEBUG] [Thread-186164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:25:53.049 [DEBUG] [Thread-186164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:25:53.072 [INFO] [Thread-186164] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:25:53.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:25:53.659 [DEBUG] [Thread-186164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:25:53.659 [DEBUG] [Thread-186164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:25:53.660 [DEBUG] [Thread-186164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:25:53.701 [DEBUG] [Thread-186164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:25:53.701 [DEBUG] [Thread-186164] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:25:53.705 [DEBUG] [Thread-186164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:25:53.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:25:53.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:25:53.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:25:53.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:25:53.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:25:53.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:25:53.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:25:53.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:25:53.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:25:53.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.475804 -999.00  +15.10  26.06     45   +3.50 1 1 1 1 1   888    0 14.30 71.78 ----- 25.9 26.1 156.2 35.0 22.0 -28.1 20.7 -25.3 21.1 -25.3 22.4 -25.4
2026-02-14T13:25:53.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:25:53.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:25:53.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.475804
2026-02-14T13:25:53.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:25:53.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:25:53.734 [DEBUG] [Thread-186164] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:25:53.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:25:53.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:25:53.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:25:53.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:25:33', tmtdew=14.47, humidity=37.65, cloud=0.0, wind=34.08, temperature=16.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:25:09.466', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:25:53.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T13:25:53.830 [DEBUG] [Thread-186167] [transport.py] [_log()] starting thread (client mode): 0xa2d1a800
2026-02-14T13:25:53.831 [DEBUG] [Thread-186167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:25:53.845 [DEBUG] [Thread-186167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:25:53.845 [INFO] [Thread-186167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:25:53.853 [DEBUG] [Thread-186167] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:25:53.853 [DEBUG] [Thread-186167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:25:53.854 [DEBUG] [Thread-186167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:25:53.854 [DEBUG] [Thread-186167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:25:53.854 [DEBUG] [Thread-186167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:25:53.854 [DEBUG] [Thread-186167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:25:53.854 [DEBUG] [Thread-186167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:25:53.854 [DEBUG] [Thread-186167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:25:53.854 [DEBUG] [Thread-186167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:25:53.854 [DEBUG] [Thread-186167] [transport.py] [_log()] client lang: <none>
2026-02-14T13:25:53.854 [DEBUG] [Thread-186167] [transport.py] [_log()] server lang: <none>
2026-02-14T13:25:53.854 [DEBUG] [Thread-186167] [transport.py] [_log()] kex follows: False
2026-02-14T13:25:53.854 [DEBUG] [Thread-186167] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:25:53.854 [DEBUG] [Thread-186167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:25:53.854 [DEBUG] [Thread-186167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:25:53.854 [DEBUG] [Thread-186167] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:25:53.855 [DEBUG] [Thread-186167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:25:53.855 [DEBUG] [Thread-186167] [transport.py] [_log()] Compression: none
2026-02-14T13:25:53.855 [DEBUG] [Thread-186167] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:25:53.911 [DEBUG] [Thread-186167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:25:53.912 [DEBUG] [Thread-186167] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:25:53.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:25:53.912 [DEBUG] [Thread-186167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:25:53.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:25:53.968 [DEBUG] [Thread-186167] [transport.py] [_log()] userauth is OK
2026-02-14T13:25:53.968 [DEBUG] [Thread-186167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:25:53.969 [DEBUG] [Thread-186167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:25:53.969 [DEBUG] [Thread-186167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:25:53.969 [DEBUG] [Thread-186167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:25:53.987 [INFO] [Thread-186167] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:25:53.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-14T13:25:53.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:25:54.775 [DEBUG] [Thread-186167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:25:54.775 [DEBUG] [Thread-186167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:25:54.823 [DEBUG] [Thread-186167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:25:54.823 [DEBUG] [Thread-186167] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:25:54.832 [DEBUG] [Thread-186167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:25:54.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:25:54.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-14T13:25:54.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-14T13:25:54.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:25:54.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:25:54.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:25:54.869 [DEBUG] [Thread-186167] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:26:05.890 [DEBUG] [Thread-186169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:26:20.944 [DEBUG] [Thread-186170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:26:23.909 [DEBUG] [Thread-186171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:26:24.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:26:24.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:26:24.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:26:26.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 26, 9), 13.59, 39.69, 0.0, 28.65, 15.31, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:26:26.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:26:09
2026-02-14T13:26:27.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:26:27.266 [DEBUG] [Thread-186172] [transport.py] [_log()] starting thread (client mode): 0xa2d232e0
2026-02-14T13:26:27.266 [DEBUG] [Thread-186172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:26:27.282 [DEBUG] [Thread-186172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:26:27.282 [INFO] [Thread-186172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:26:27.285 [DEBUG] [Thread-186172] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:26:27.285 [DEBUG] [Thread-186172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:26:27.285 [DEBUG] [Thread-186172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:26:27.285 [DEBUG] [Thread-186172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:26:27.285 [DEBUG] [Thread-186172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:26:27.285 [DEBUG] [Thread-186172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:26:27.285 [DEBUG] [Thread-186172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:26:27.286 [DEBUG] [Thread-186172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:26:27.286 [DEBUG] [Thread-186172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:26:27.286 [DEBUG] [Thread-186172] [transport.py] [_log()] client lang: <none>
2026-02-14T13:26:27.286 [DEBUG] [Thread-186172] [transport.py] [_log()] server lang: <none>
2026-02-14T13:26:27.286 [DEBUG] [Thread-186172] [transport.py] [_log()] kex follows: False
2026-02-14T13:26:27.286 [DEBUG] [Thread-186172] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:26:27.286 [DEBUG] [Thread-186172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:26:27.286 [DEBUG] [Thread-186172] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:26:27.286 [DEBUG] [Thread-186172] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:26:27.286 [DEBUG] [Thread-186172] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:26:27.286 [DEBUG] [Thread-186172] [transport.py] [_log()] Compression: none
2026-02-14T13:26:27.286 [DEBUG] [Thread-186172] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:26:27.303 [DEBUG] [Thread-186172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:26:27.303 [DEBUG] [Thread-186172] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:26:27.304 [DEBUG] [Thread-186172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:26:27.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:26:27.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:26:27.306 [DEBUG] [Thread-186172] [transport.py] [_log()] userauth is OK
2026-02-14T13:26:27.306 [DEBUG] [Thread-186172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:26:27.306 [DEBUG] [Thread-186172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:26:27.306 [DEBUG] [Thread-186172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:26:27.306 [DEBUG] [Thread-186172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:26:27.331 [INFO] [Thread-186172] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:26:27.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:26:27.910 [DEBUG] [Thread-186172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:26:27.910 [DEBUG] [Thread-186172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:26:27.910 [DEBUG] [Thread-186172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:26:27.952 [DEBUG] [Thread-186172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:26:27.952 [DEBUG] [Thread-186172] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:26:27.956 [DEBUG] [Thread-186172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:26:27.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:26:27.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:26:27.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:26:27.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:26:27.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:26:27.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:26:27.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:26:27.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:26:27.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:26:27.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.476498 -999.00  +15.30  22.74     45   +3.60 1 1 1 1 1   888    0 13.52 57.87 ----- 24.7 22.7 135.0 34.0 21.9 -24.7 20.9 -24.6 21.1 -23.4 22.3 -25.0
2026-02-14T13:26:27.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:26:27.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:26:27.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.476498
2026-02-14T13:26:27.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:26:27.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:26:27.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:26:27.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:26:27.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:26:27.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:26:09', tmtdew=13.59, humidity=39.69, cloud=0.0, wind=28.65, temperature=15.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:26:09.427', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:26:27.996 [DEBUG] [Thread-186172] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:26:28.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-14T13:26:28.090 [DEBUG] [Thread-186175] [transport.py] [_log()] starting thread (client mode): 0xa2d3e770
2026-02-14T13:26:28.090 [DEBUG] [Thread-186175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:26:28.105 [DEBUG] [Thread-186175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:26:28.105 [INFO] [Thread-186175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:26:28.112 [DEBUG] [Thread-186175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:26:28.113 [DEBUG] [Thread-186175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:26:28.113 [DEBUG] [Thread-186175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:26:28.113 [DEBUG] [Thread-186175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:26:28.113 [DEBUG] [Thread-186175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:26:28.113 [DEBUG] [Thread-186175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:26:28.113 [DEBUG] [Thread-186175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:26:28.113 [DEBUG] [Thread-186175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:26:28.113 [DEBUG] [Thread-186175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:26:28.113 [DEBUG] [Thread-186175] [transport.py] [_log()] client lang: <none>
2026-02-14T13:26:28.113 [DEBUG] [Thread-186175] [transport.py] [_log()] server lang: <none>
2026-02-14T13:26:28.113 [DEBUG] [Thread-186175] [transport.py] [_log()] kex follows: False
2026-02-14T13:26:28.113 [DEBUG] [Thread-186175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:26:28.113 [DEBUG] [Thread-186175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:26:28.113 [DEBUG] [Thread-186175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:26:28.113 [DEBUG] [Thread-186175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:26:28.113 [DEBUG] [Thread-186175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:26:28.114 [DEBUG] [Thread-186175] [transport.py] [_log()] Compression: none
2026-02-14T13:26:28.114 [DEBUG] [Thread-186175] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:26:28.172 [DEBUG] [Thread-186175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:26:28.173 [DEBUG] [Thread-186175] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:26:28.173 [DEBUG] [Thread-186175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:26:28.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:26:28.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:26:28.230 [DEBUG] [Thread-186175] [transport.py] [_log()] userauth is OK
2026-02-14T13:26:28.230 [DEBUG] [Thread-186175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:26:28.230 [DEBUG] [Thread-186175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:26:28.230 [DEBUG] [Thread-186175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:26:28.230 [DEBUG] [Thread-186175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:26:28.250 [INFO] [Thread-186175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:26: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-14T13:26:28.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:26:29.066 [DEBUG] [Thread-186175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:26:29.066 [DEBUG] [Thread-186175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:26:29.114 [DEBUG] [Thread-186175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:26:29.115 [DEBUG] [Thread-186175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:26:29.124 [DEBUG] [Thread-186175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:26:29.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:26:29.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:26:29.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-14T13:26:29.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:26:29.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:26:29.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:26:29.161 [DEBUG] [Thread-186175] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:26:29.660 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:26:29.661 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:26:35.980 [DEBUG] [Thread-186177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:26:51.033 [DEBUG] [Thread-186178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:26:59.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:26:59.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:26:59.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-14T13:27:01.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 26, 44), 13.62, 40.1, 0.0, 29.36, 15.57, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:27:01.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:26:44
2026-02-14T13:27:01.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:27:01.604 [DEBUG] [Thread-186179] [transport.py] [_log()] starting thread (client mode): 0xa2d3d480
2026-02-14T13:27:01.604 [DEBUG] [Thread-186179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:27:01.625 [DEBUG] [Thread-186179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:27:01.625 [INFO] [Thread-186179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:27:01.628 [DEBUG] [Thread-186179] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:27:01.628 [DEBUG] [Thread-186179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:27:01.629 [DEBUG] [Thread-186179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:27:01.629 [DEBUG] [Thread-186179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:27:01.629 [DEBUG] [Thread-186179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:27:01.629 [DEBUG] [Thread-186179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:27:01.629 [DEBUG] [Thread-186179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:27:01.629 [DEBUG] [Thread-186179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:27:01.629 [DEBUG] [Thread-186179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:27:01.629 [DEBUG] [Thread-186179] [transport.py] [_log()] client lang: <none>
2026-02-14T13:27:01.629 [DEBUG] [Thread-186179] [transport.py] [_log()] server lang: <none>
2026-02-14T13:27:01.629 [DEBUG] [Thread-186179] [transport.py] [_log()] kex follows: False
2026-02-14T13:27:01.629 [DEBUG] [Thread-186179] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:27:01.629 [DEBUG] [Thread-186179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:27:01.630 [DEBUG] [Thread-186179] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:27:01.630 [DEBUG] [Thread-186179] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:27:01.630 [DEBUG] [Thread-186179] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:27:01.630 [DEBUG] [Thread-186179] [transport.py] [_log()] Compression: none
2026-02-14T13:27:01.630 [DEBUG] [Thread-186179] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:27:01.648 [DEBUG] [Thread-186179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:27:01.648 [DEBUG] [Thread-186179] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:27:01.649 [DEBUG] [Thread-186179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:27:01.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:27:01.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:27:01.651 [DEBUG] [Thread-186179] [transport.py] [_log()] userauth is OK
2026-02-14T13:27:01.651 [DEBUG] [Thread-186179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:27:01.652 [DEBUG] [Thread-186179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:27:01.652 [DEBUG] [Thread-186179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:27:01.652 [DEBUG] [Thread-186179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:27:01.679 [INFO] [Thread-186179] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:27:01.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:27:02.259 [DEBUG] [Thread-186179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:27:02.259 [DEBUG] [Thread-186179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:27:02.260 [DEBUG] [Thread-186179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:27:02.300 [DEBUG] [Thread-186179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:27:02.300 [DEBUG] [Thread-186179] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:27:02.304 [DEBUG] [Thread-186179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:27:02.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:27:02.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:27:02.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:27:02.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:27:02.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:27:02.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:27:02.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:27:02.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:27:02.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:27:02.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.476845 -999.00  +15.80  23.59     45   +3.90 1 1 1 1 1   888    0 13.34 50.04 ----- 21.7 23.6 148.2 31.3 21.9 -24.3 20.9 -23.4 21.3 -23.1 22.4 -24.4
2026-02-14T13:27:02.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:27:02.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:27:02.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.476845
2026-02-14T13:27:02.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:27:02.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:27:02.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:27:02.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:27:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:27:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:26:44', tmtdew=13.62, humidity=40.1, cloud=0.0, wind=29.36, temperature=15.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:26:39.408', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:27:02.331 [DEBUG] [Thread-186179] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:27: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-14T13:27:02.427 [DEBUG] [Thread-186182] [transport.py] [_log()] starting thread (client mode): 0xa2dc0e80
2026-02-14T13:27:02.427 [DEBUG] [Thread-186182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:27:02.442 [DEBUG] [Thread-186182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:27:02.442 [INFO] [Thread-186182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:27:02.450 [DEBUG] [Thread-186182] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:27:02.450 [DEBUG] [Thread-186182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:27:02.450 [DEBUG] [Thread-186182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:27:02.451 [DEBUG] [Thread-186182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:27:02.451 [DEBUG] [Thread-186182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:27:02.451 [DEBUG] [Thread-186182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:27:02.451 [DEBUG] [Thread-186182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:27:02.451 [DEBUG] [Thread-186182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:27:02.451 [DEBUG] [Thread-186182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:27:02.451 [DEBUG] [Thread-186182] [transport.py] [_log()] client lang: <none>
2026-02-14T13:27:02.451 [DEBUG] [Thread-186182] [transport.py] [_log()] server lang: <none>
2026-02-14T13:27:02.451 [DEBUG] [Thread-186182] [transport.py] [_log()] kex follows: False
2026-02-14T13:27:02.451 [DEBUG] [Thread-186182] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:27:02.451 [DEBUG] [Thread-186182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:27:02.451 [DEBUG] [Thread-186182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:27:02.451 [DEBUG] [Thread-186182] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:27:02.451 [DEBUG] [Thread-186182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:27:02.451 [DEBUG] [Thread-186182] [transport.py] [_log()] Compression: none
2026-02-14T13:27:02.451 [DEBUG] [Thread-186182] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:27:02.509 [DEBUG] [Thread-186182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:27:02.510 [DEBUG] [Thread-186182] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:27:02.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:27:02.511 [DEBUG] [Thread-186182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:27:02.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:27:02.568 [DEBUG] [Thread-186182] [transport.py] [_log()] userauth is OK
2026-02-14T13:27:02.569 [DEBUG] [Thread-186182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:27:02.569 [DEBUG] [Thread-186182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:27:02.569 [DEBUG] [Thread-186182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:27:02.569 [DEBUG] [Thread-186182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:27:02.587 [INFO] [Thread-186182] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:27:02.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T13:27:02.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:27:03.437 [DEBUG] [Thread-186182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:27:03.437 [DEBUG] [Thread-186182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:27:03.484 [DEBUG] [Thread-186182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:27:03.485 [DEBUG] [Thread-186182] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:27:03.494 [DEBUG] [Thread-186182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:27:03.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:27:03.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-14T13:27:03.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-14T13:27:03.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:27:03.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:27:03.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:27:03.535 [DEBUG] [Thread-186182] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:27:06.067 [DEBUG] [Thread-186184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:27:21.112 [DEBUG] [Thread-186185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:27:23.940 [DEBUG] [Thread-186186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:27:29.803 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:27:29.804 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:27:33.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:27:33.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:27:33.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-14T13:27:35.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 27, 20), 13.67, 40.01, 0.0, 30.65, 15.67, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:27:35.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:27:20
2026-02-14T13:27:35.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:27:36.074 [DEBUG] [Thread-186187] [transport.py] [_log()] starting thread (client mode): 0xa2d3e560
2026-02-14T13:27:36.074 [DEBUG] [Thread-186187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:27:36.090 [DEBUG] [Thread-186187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:27:36.091 [INFO] [Thread-186187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:27:36.093 [DEBUG] [Thread-186187] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:27:36.093 [DEBUG] [Thread-186187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:27:36.093 [DEBUG] [Thread-186187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:27:36.093 [DEBUG] [Thread-186187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:27:36.093 [DEBUG] [Thread-186187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:27:36.093 [DEBUG] [Thread-186187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:27:36.093 [DEBUG] [Thread-186187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:27:36.093 [DEBUG] [Thread-186187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:27:36.093 [DEBUG] [Thread-186187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:27:36.093 [DEBUG] [Thread-186187] [transport.py] [_log()] client lang: <none>
2026-02-14T13:27:36.093 [DEBUG] [Thread-186187] [transport.py] [_log()] server lang: <none>
2026-02-14T13:27:36.093 [DEBUG] [Thread-186187] [transport.py] [_log()] kex follows: False
2026-02-14T13:27:36.093 [DEBUG] [Thread-186187] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:27:36.093 [DEBUG] [Thread-186187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:27:36.094 [DEBUG] [Thread-186187] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:27:36.094 [DEBUG] [Thread-186187] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:27:36.094 [DEBUG] [Thread-186187] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:27:36.094 [DEBUG] [Thread-186187] [transport.py] [_log()] Compression: none
2026-02-14T13:27:36.094 [DEBUG] [Thread-186187] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:27:36.109 [DEBUG] [Thread-186187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:27:36.109 [DEBUG] [Thread-186187] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:27:36.110 [DEBUG] [Thread-186187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:27:36.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:27:36.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:27:36.113 [DEBUG] [Thread-186187] [transport.py] [_log()] userauth is OK
2026-02-14T13:27:36.113 [DEBUG] [Thread-186187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:27:36.113 [DEBUG] [Thread-186187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:27:36.113 [DEBUG] [Thread-186187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:27:36.113 [DEBUG] [Thread-186187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:27:36.132 [INFO] [Thread-186187] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:27:36.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:27:36.151 [DEBUG] [Thread-186189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:27:36.770 [DEBUG] [Thread-186187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:27:36.770 [DEBUG] [Thread-186187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:27:36.771 [DEBUG] [Thread-186187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:27:36.811 [DEBUG] [Thread-186187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:27:36.812 [DEBUG] [Thread-186187] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:27:36.815 [DEBUG] [Thread-186187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:27:36.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:27:36.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:27:36.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:27:36.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:27:36.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:27:36.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:27:36.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:27:36.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:27:36.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:27:36.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.477193 -999.00  +16.00  24.00     43   +3.60 1 1 1 1 1   888    0 13.45 48.80 ----- 19.8 24.0 155.8 36.5 22.0 -25.8 21.0 -24.6 21.4 -23.4 22.6 -25.9
2026-02-14T13:27:36.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:27:36.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:27:36.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.477193
2026-02-14T13:27:36.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:27:36.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:27:36.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:27:36.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:27:36.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:27:36.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:27:20', tmtdew=13.67, humidity=40.01, cloud=0.0, wind=30.65, temperature=15.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:27:09.475', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:27:36.841 [DEBUG] [Thread-186187] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:27:36.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-14T13:27:36.941 [DEBUG] [Thread-186191] [transport.py] [_log()] starting thread (client mode): 0xa2d11a80
2026-02-14T13:27:36.941 [DEBUG] [Thread-186191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:27:36.957 [DEBUG] [Thread-186191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:27:36.957 [INFO] [Thread-186191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:27:36.965 [DEBUG] [Thread-186191] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:27:36.966 [DEBUG] [Thread-186191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:27:36.966 [DEBUG] [Thread-186191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:27:36.966 [DEBUG] [Thread-186191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:27:36.966 [DEBUG] [Thread-186191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:27:36.966 [DEBUG] [Thread-186191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:27:36.966 [DEBUG] [Thread-186191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:27:36.966 [DEBUG] [Thread-186191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:27:36.966 [DEBUG] [Thread-186191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:27:36.966 [DEBUG] [Thread-186191] [transport.py] [_log()] client lang: <none>
2026-02-14T13:27:36.966 [DEBUG] [Thread-186191] [transport.py] [_log()] server lang: <none>
2026-02-14T13:27:36.966 [DEBUG] [Thread-186191] [transport.py] [_log()] kex follows: False
2026-02-14T13:27:36.966 [DEBUG] [Thread-186191] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:27:36.966 [DEBUG] [Thread-186191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:27:36.966 [DEBUG] [Thread-186191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:27:36.966 [DEBUG] [Thread-186191] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:27:36.966 [DEBUG] [Thread-186191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:27:36.967 [DEBUG] [Thread-186191] [transport.py] [_log()] Compression: none
2026-02-14T13:27:36.967 [DEBUG] [Thread-186191] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:27:37.024 [DEBUG] [Thread-186191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:27:37.025 [DEBUG] [Thread-186191] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:27:37.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:27:37.026 [DEBUG] [Thread-186191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:27:37.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:27:37.081 [DEBUG] [Thread-186191] [transport.py] [_log()] userauth is OK
2026-02-14T13:27:37.081 [DEBUG] [Thread-186191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:27:37.081 [DEBUG] [Thread-186191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:27:37.081 [DEBUG] [Thread-186191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:27:37.081 [DEBUG] [Thread-186191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:27:37.100 [INFO] [Thread-186191] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:27:37.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-14T13:27:37.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:27:37.915 [DEBUG] [Thread-186191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:27:37.915 [DEBUG] [Thread-186191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:27:37.963 [DEBUG] [Thread-186191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:27:37.964 [DEBUG] [Thread-186191] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:27:37.973 [DEBUG] [Thread-186191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:27:37.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:27:37.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:27:37.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:27:38.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:27:38.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:27:38.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:27:38.010 [DEBUG] [Thread-186191] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:27:51.185 [DEBUG] [Thread-186193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:28:06.234 [DEBUG] [Thread-186194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:28:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:28:08.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:28:08.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:28:10.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 27, 55), 14.4, 37.96, 0.0, 31.26, 16.25, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:28:10.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:27:55
2026-02-14T13:28:10.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:28:10.763 [DEBUG] [Thread-186195] [transport.py] [_log()] starting thread (client mode): 0xa2d21c90
2026-02-14T13:28:10.763 [DEBUG] [Thread-186195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:28:10.783 [DEBUG] [Thread-186195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:28:10.783 [INFO] [Thread-186195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:28:10.786 [DEBUG] [Thread-186195] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:28:10.786 [DEBUG] [Thread-186195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:28:10.786 [DEBUG] [Thread-186195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:28:10.786 [DEBUG] [Thread-186195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:28:10.786 [DEBUG] [Thread-186195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:28:10.786 [DEBUG] [Thread-186195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:28:10.786 [DEBUG] [Thread-186195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:28:10.786 [DEBUG] [Thread-186195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:28:10.786 [DEBUG] [Thread-186195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:28:10.786 [DEBUG] [Thread-186195] [transport.py] [_log()] client lang: <none>
2026-02-14T13:28:10.786 [DEBUG] [Thread-186195] [transport.py] [_log()] server lang: <none>
2026-02-14T13:28:10.786 [DEBUG] [Thread-186195] [transport.py] [_log()] kex follows: False
2026-02-14T13:28:10.786 [DEBUG] [Thread-186195] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:28:10.786 [DEBUG] [Thread-186195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:28:10.786 [DEBUG] [Thread-186195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:28:10.786 [DEBUG] [Thread-186195] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:28:10.786 [DEBUG] [Thread-186195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:28:10.786 [DEBUG] [Thread-186195] [transport.py] [_log()] Compression: none
2026-02-14T13:28:10.786 [DEBUG] [Thread-186195] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:28:10.805 [DEBUG] [Thread-186195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:28:10.805 [DEBUG] [Thread-186195] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:28:10.806 [DEBUG] [Thread-186195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:28:10.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:28:10.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:28:10.849 [DEBUG] [Thread-186195] [transport.py] [_log()] userauth is OK
2026-02-14T13:28:10.850 [DEBUG] [Thread-186195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:28:10.850 [DEBUG] [Thread-186195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:28:10.850 [DEBUG] [Thread-186195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:28:10.850 [DEBUG] [Thread-186195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:28:10.871 [INFO] [Thread-186195] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:28:10.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:28:11.483 [DEBUG] [Thread-186195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:28:11.483 [DEBUG] [Thread-186195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:28:11.484 [DEBUG] [Thread-186195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:28:11.524 [DEBUG] [Thread-186195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:28:11.525 [DEBUG] [Thread-186195] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:28:11.529 [DEBUG] [Thread-186195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:28:11.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:28:11.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:28:11.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:28:11.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:28:11.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:28:11.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:28:11.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:28:11.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:28:11.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:28:11.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.477540 -999.00  +16.20  20.10     43   +3.60 1 1 1 1 1   888    0 13.48 48.95 ----- 22.9 20.1 163.0 26.9 22.1 -25.1 21.1 -24.7 21.4 -22.8 22.6 -24.9
2026-02-14T13:28:11.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:28:11.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:28:11.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.477540
2026-02-14T13:28:11.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:28:11.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:28:11.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:28:11.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:28:11.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:28:11.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:27:55', tmtdew=14.4, humidity=37.96, cloud=0.0, wind=31.26, temperature=16.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:27:39.456', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:28:11.556 [DEBUG] [Thread-186195] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:28:11.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-14T13:28:11.652 [DEBUG] [Thread-186198] [transport.py] [_log()] starting thread (client mode): 0xa2d55930
2026-02-14T13:28:11.652 [DEBUG] [Thread-186198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:28:11.665 [DEBUG] [Thread-186198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:28:11.665 [INFO] [Thread-186198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:28:11.673 [DEBUG] [Thread-186198] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:28:11.673 [DEBUG] [Thread-186198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:28:11.673 [DEBUG] [Thread-186198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:28:11.673 [DEBUG] [Thread-186198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:28:11.673 [DEBUG] [Thread-186198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:28:11.673 [DEBUG] [Thread-186198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:28:11.674 [DEBUG] [Thread-186198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:28:11.674 [DEBUG] [Thread-186198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:28:11.674 [DEBUG] [Thread-186198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:28:11.674 [DEBUG] [Thread-186198] [transport.py] [_log()] client lang: <none>
2026-02-14T13:28:11.674 [DEBUG] [Thread-186198] [transport.py] [_log()] server lang: <none>
2026-02-14T13:28:11.674 [DEBUG] [Thread-186198] [transport.py] [_log()] kex follows: False
2026-02-14T13:28:11.674 [DEBUG] [Thread-186198] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:28:11.674 [DEBUG] [Thread-186198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:28:11.674 [DEBUG] [Thread-186198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:28:11.674 [DEBUG] [Thread-186198] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:28:11.674 [DEBUG] [Thread-186198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:28:11.674 [DEBUG] [Thread-186198] [transport.py] [_log()] Compression: none
2026-02-14T13:28:11.674 [DEBUG] [Thread-186198] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:28:11.732 [DEBUG] [Thread-186198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:28:11.733 [DEBUG] [Thread-186198] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:28:11.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:28:11.734 [DEBUG] [Thread-186198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:28:11.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:28:11.788 [DEBUG] [Thread-186198] [transport.py] [_log()] userauth is OK
2026-02-14T13:28:11.789 [DEBUG] [Thread-186198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:28:11.789 [DEBUG] [Thread-186198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:28:11.789 [DEBUG] [Thread-186198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:28:11.789 [DEBUG] [Thread-186198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:28:11.813 [INFO] [Thread-186198] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:28:11.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-14T13:28:11.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:28:12.615 [DEBUG] [Thread-186198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:28:12.615 [DEBUG] [Thread-186198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:28:12.663 [DEBUG] [Thread-186198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:28:12.663 [DEBUG] [Thread-186198] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:28:12.672 [DEBUG] [Thread-186198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:28:12.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:28:12.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:28: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-14T13:28:12.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:28:12.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:28:12.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:28:12.709 [DEBUG] [Thread-186198] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:28:21.272 [DEBUG] [Thread-186200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:28:23.980 [DEBUG] [Thread-186201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:28:29.947 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:28:29.948 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:28:36.323 [DEBUG] [Thread-186202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:28:42.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:28:42.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:28:42.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-14T13:28:44.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 28, 31), 14.22, 38.3, 0.0, 35.27, 15.87, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:28:44.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:28:31
2026-02-14T13:28:45.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:28:45.528 [DEBUG] [Thread-186203] [transport.py] [_log()] starting thread (client mode): 0xa2d3f4c0
2026-02-14T13:28:45.528 [DEBUG] [Thread-186203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:28:45.548 [DEBUG] [Thread-186203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:28:45.548 [INFO] [Thread-186203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:28:45.551 [DEBUG] [Thread-186203] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:28:45.552 [DEBUG] [Thread-186203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:28:45.552 [DEBUG] [Thread-186203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:28:45.552 [DEBUG] [Thread-186203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:28:45.552 [DEBUG] [Thread-186203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:28:45.552 [DEBUG] [Thread-186203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:28:45.552 [DEBUG] [Thread-186203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:28:45.552 [DEBUG] [Thread-186203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:28:45.552 [DEBUG] [Thread-186203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:28:45.552 [DEBUG] [Thread-186203] [transport.py] [_log()] client lang: <none>
2026-02-14T13:28:45.552 [DEBUG] [Thread-186203] [transport.py] [_log()] server lang: <none>
2026-02-14T13:28:45.552 [DEBUG] [Thread-186203] [transport.py] [_log()] kex follows: False
2026-02-14T13:28:45.552 [DEBUG] [Thread-186203] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:28:45.552 [DEBUG] [Thread-186203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:28:45.553 [DEBUG] [Thread-186203] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:28:45.553 [DEBUG] [Thread-186203] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:28:45.553 [DEBUG] [Thread-186203] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:28:45.553 [DEBUG] [Thread-186203] [transport.py] [_log()] Compression: none
2026-02-14T13:28:45.553 [DEBUG] [Thread-186203] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:28:45.574 [DEBUG] [Thread-186203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:28:45.575 [DEBUG] [Thread-186203] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:28:45.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:28:45.576 [DEBUG] [Thread-186203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:28:45.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:28:45.578 [DEBUG] [Thread-186203] [transport.py] [_log()] userauth is OK
2026-02-14T13:28:45.578 [DEBUG] [Thread-186203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:28:45.579 [DEBUG] [Thread-186203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:28:45.579 [DEBUG] [Thread-186203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:28:45.579 [DEBUG] [Thread-186203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:28:45.604 [INFO] [Thread-186203] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:28:45.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:28:46.239 [DEBUG] [Thread-186203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:28:46.239 [DEBUG] [Thread-186203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:28:46.239 [DEBUG] [Thread-186203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:28:46.280 [DEBUG] [Thread-186203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:28:46.281 [DEBUG] [Thread-186203] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:28:46.284 [DEBUG] [Thread-186203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:28:46.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:28:46.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:28:46.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:28:46.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:28:46.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:28:46.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:28:46.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:28:46.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:28:46.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:28:46.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.477887 -999.00  +16.10  31.93     42   +3.30 1 1 2 1 1   888    0 13.54 52.76 ----- 33.9 31.9 154.0 40.3 22.2 -25.9 21.0 -26.4 21.5 -24.1 22.7 -25.3
2026-02-14T13:28:46.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:28:46.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:28:46.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.477887
2026-02-14T13:28:46.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:28:46.316 [DEBUG] [Thread-186203] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:28:46.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:28:46.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:28:46.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:28:46.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:28:46.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:28:31', tmtdew=14.22, humidity=38.3, cloud=0.0, wind=35.27, temperature=15.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:28:09.437', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:28:46.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-14T13:28:46.413 [DEBUG] [Thread-186206] [transport.py] [_log()] starting thread (client mode): 0xa2dc0b80
2026-02-14T13:28:46.414 [DEBUG] [Thread-186206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:28:46.428 [DEBUG] [Thread-186206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:28:46.428 [INFO] [Thread-186206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:28:46.435 [DEBUG] [Thread-186206] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:28:46.436 [DEBUG] [Thread-186206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:28:46.436 [DEBUG] [Thread-186206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:28:46.436 [DEBUG] [Thread-186206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:28:46.436 [DEBUG] [Thread-186206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:28:46.436 [DEBUG] [Thread-186206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:28:46.436 [DEBUG] [Thread-186206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:28:46.436 [DEBUG] [Thread-186206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:28:46.436 [DEBUG] [Thread-186206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:28:46.437 [DEBUG] [Thread-186206] [transport.py] [_log()] client lang: <none>
2026-02-14T13:28:46.437 [DEBUG] [Thread-186206] [transport.py] [_log()] server lang: <none>
2026-02-14T13:28:46.437 [DEBUG] [Thread-186206] [transport.py] [_log()] kex follows: False
2026-02-14T13:28:46.437 [DEBUG] [Thread-186206] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:28:46.437 [DEBUG] [Thread-186206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:28:46.437 [DEBUG] [Thread-186206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:28:46.437 [DEBUG] [Thread-186206] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:28:46.437 [DEBUG] [Thread-186206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:28:46.438 [DEBUG] [Thread-186206] [transport.py] [_log()] Compression: none
2026-02-14T13:28:46.438 [DEBUG] [Thread-186206] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:28:46.493 [DEBUG] [Thread-186206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:28:46.494 [DEBUG] [Thread-186206] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:28:46.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:28:46.495 [DEBUG] [Thread-186206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:28:46.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:28:46.549 [DEBUG] [Thread-186206] [transport.py] [_log()] userauth is OK
2026-02-14T13:28:46.549 [DEBUG] [Thread-186206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:28:46.549 [DEBUG] [Thread-186206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:28:46.549 [DEBUG] [Thread-186206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:28:46.549 [DEBUG] [Thread-186206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:28:46.567 [INFO] [Thread-186206] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:28:46.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-14T13:28:46.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:28:47.427 [DEBUG] [Thread-186206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:28:47.427 [DEBUG] [Thread-186206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:28:47.475 [DEBUG] [Thread-186206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:28:47.475 [DEBUG] [Thread-186206] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:28:47.484 [DEBUG] [Thread-186206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:28:47.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:28:47.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:28:47.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-14T13:28:47.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:28:47.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:28:47.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:28:47.521 [DEBUG] [Thread-186206] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:28:51.359 [DEBUG] [Thread-186208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:29:06.411 [DEBUG] [Thread-186209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:29:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:29:17.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:29:17.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-14T13:29:19.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 29, 6), 14.12, 38.54, 0.0, 30.82, 15.8, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:29:19.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:29:06
2026-02-14T13:29:20.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:29:20.450 [DEBUG] [Thread-186210] [transport.py] [_log()] starting thread (client mode): 0xa2db5d20
2026-02-14T13:29:20.450 [DEBUG] [Thread-186210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:29:20.470 [DEBUG] [Thread-186210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:29:20.470 [INFO] [Thread-186210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:29:20.473 [DEBUG] [Thread-186210] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:29:20.473 [DEBUG] [Thread-186210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:29:20.473 [DEBUG] [Thread-186210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:29:20.473 [DEBUG] [Thread-186210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:29:20.473 [DEBUG] [Thread-186210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:29:20.473 [DEBUG] [Thread-186210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:29:20.473 [DEBUG] [Thread-186210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:29:20.473 [DEBUG] [Thread-186210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:29:20.473 [DEBUG] [Thread-186210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:29:20.474 [DEBUG] [Thread-186210] [transport.py] [_log()] client lang: <none>
2026-02-14T13:29:20.474 [DEBUG] [Thread-186210] [transport.py] [_log()] server lang: <none>
2026-02-14T13:29:20.474 [DEBUG] [Thread-186210] [transport.py] [_log()] kex follows: False
2026-02-14T13:29:20.474 [DEBUG] [Thread-186210] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:29:20.474 [DEBUG] [Thread-186210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:29:20.474 [DEBUG] [Thread-186210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:29:20.474 [DEBUG] [Thread-186210] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:29:20.474 [DEBUG] [Thread-186210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:29:20.474 [DEBUG] [Thread-186210] [transport.py] [_log()] Compression: none
2026-02-14T13:29:20.474 [DEBUG] [Thread-186210] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:29:20.492 [DEBUG] [Thread-186210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:29:20.492 [DEBUG] [Thread-186210] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:29:20.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:29:20.493 [DEBUG] [Thread-186210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:29:20.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:29:20.495 [DEBUG] [Thread-186210] [transport.py] [_log()] userauth is OK
2026-02-14T13:29:20.495 [DEBUG] [Thread-186210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:29:20.496 [DEBUG] [Thread-186210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:29:20.496 [DEBUG] [Thread-186210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:29:20.496 [DEBUG] [Thread-186210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:29:20.529 [INFO] [Thread-186210] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:29:20.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:29:21.171 [DEBUG] [Thread-186210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:29:21.171 [DEBUG] [Thread-186210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:29:21.172 [DEBUG] [Thread-186210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:29:21.212 [DEBUG] [Thread-186210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:29:21.213 [DEBUG] [Thread-186210] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:29:21.216 [DEBUG] [Thread-186210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:29:21.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:29:21.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:29:21.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:29:21.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:29:21.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:29:21.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:29:21.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:29:21.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:29:21.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:29:21.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.478234 -999.00  +15.90  31.37     43   +3.40 1 1 2 1 1   888    0 13.54 50.50 ----- 28.0 31.4 160.5 36.1 21.9 -26.4 20.9 -25.2 21.3 -23.5 22.5 -26.2
2026-02-14T13:29:21.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:29:21.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:29:21.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.478234
2026-02-14T13:29:21.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:29:21.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:29:21.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:29:21.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:29:21.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:29:21.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:29:06', tmtdew=14.12, humidity=38.54, cloud=0.0, wind=30.82, temperature=15.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:28:39.418', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:29:21.246 [DEBUG] [Thread-186210] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:29:21.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-14T13:29:21.340 [DEBUG] [Thread-186213] [transport.py] [_log()] starting thread (client mode): 0xa2deab30
2026-02-14T13:29:21.340 [DEBUG] [Thread-186213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:29:21.355 [DEBUG] [Thread-186213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:29:21.355 [INFO] [Thread-186213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:29:21.363 [DEBUG] [Thread-186213] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:29:21.363 [DEBUG] [Thread-186213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:29:21.363 [DEBUG] [Thread-186213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:29:21.363 [DEBUG] [Thread-186213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:29:21.363 [DEBUG] [Thread-186213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:29:21.363 [DEBUG] [Thread-186213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:29:21.364 [DEBUG] [Thread-186213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:29:21.364 [DEBUG] [Thread-186213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:29:21.364 [DEBUG] [Thread-186213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:29:21.364 [DEBUG] [Thread-186213] [transport.py] [_log()] client lang: <none>
2026-02-14T13:29:21.364 [DEBUG] [Thread-186213] [transport.py] [_log()] server lang: <none>
2026-02-14T13:29:21.364 [DEBUG] [Thread-186213] [transport.py] [_log()] kex follows: False
2026-02-14T13:29:21.364 [DEBUG] [Thread-186213] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:29:21.364 [DEBUG] [Thread-186213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:29:21.364 [DEBUG] [Thread-186213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:29:21.364 [DEBUG] [Thread-186213] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:29:21.364 [DEBUG] [Thread-186213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:29:21.364 [DEBUG] [Thread-186213] [transport.py] [_log()] Compression: none
2026-02-14T13:29:21.364 [DEBUG] [Thread-186213] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:29:21.419 [DEBUG] [Thread-186213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:29:21.419 [DEBUG] [Thread-186213] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:29:21.419 [DEBUG] [Thread-186213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:29:21.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:29:21.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:29:21.442 [DEBUG] [Thread-186215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:29:21.476 [DEBUG] [Thread-186213] [transport.py] [_log()] userauth is OK
2026-02-14T13:29:21.476 [DEBUG] [Thread-186213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:29:21.476 [DEBUG] [Thread-186213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:29:21.476 [DEBUG] [Thread-186213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:29:21.476 [DEBUG] [Thread-186213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:29:21.489 [INFO] [Thread-186213] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:29:21.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-14T13:29:21.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:29:22.283 [DEBUG] [Thread-186213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:29:22.284 [DEBUG] [Thread-186213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:29:22.331 [DEBUG] [Thread-186213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:29:22.332 [DEBUG] [Thread-186213] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:29:22.341 [DEBUG] [Thread-186213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:29:22.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:29: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-14T13:29:22.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-14T13:29:22.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:29:22.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:29:22.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:29:22.378 [DEBUG] [Thread-186213] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:29:24.013 [DEBUG] [Thread-186216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:29:30.087 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:29:30.089 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:29:36.482 [DEBUG] [Thread-186217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:29:51.519 [DEBUG] [Thread-186218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:29:52.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:29:52.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:29: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-14T13:29:54.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 29, 42), 15.46, 35.29, 0.0, 43.05, 17.17, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:29:54.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:29:42
2026-02-14T13:29:54.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:29:54.838 [DEBUG] [Thread-186219] [transport.py] [_log()] starting thread (client mode): 0xa2de8f70
2026-02-14T13:29:54.838 [DEBUG] [Thread-186219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:29:54.858 [DEBUG] [Thread-186219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:29:54.858 [INFO] [Thread-186219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:29:54.861 [DEBUG] [Thread-186219] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:29:54.861 [DEBUG] [Thread-186219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:29:54.861 [DEBUG] [Thread-186219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:29:54.861 [DEBUG] [Thread-186219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:29:54.861 [DEBUG] [Thread-186219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:29:54.861 [DEBUG] [Thread-186219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:29:54.861 [DEBUG] [Thread-186219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:29:54.861 [DEBUG] [Thread-186219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:29:54.861 [DEBUG] [Thread-186219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:29:54.861 [DEBUG] [Thread-186219] [transport.py] [_log()] client lang: <none>
2026-02-14T13:29:54.861 [DEBUG] [Thread-186219] [transport.py] [_log()] server lang: <none>
2026-02-14T13:29:54.861 [DEBUG] [Thread-186219] [transport.py] [_log()] kex follows: False
2026-02-14T13:29:54.861 [DEBUG] [Thread-186219] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:29:54.861 [DEBUG] [Thread-186219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:29:54.862 [DEBUG] [Thread-186219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:29:54.862 [DEBUG] [Thread-186219] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:29:54.862 [DEBUG] [Thread-186219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:29:54.862 [DEBUG] [Thread-186219] [transport.py] [_log()] Compression: none
2026-02-14T13:29:54.862 [DEBUG] [Thread-186219] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:29:54.879 [DEBUG] [Thread-186219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:29:54.880 [DEBUG] [Thread-186219] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:29:54.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:29:54.881 [DEBUG] [Thread-186219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:29:54.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:29:54.883 [DEBUG] [Thread-186219] [transport.py] [_log()] userauth is OK
2026-02-14T13:29:54.883 [DEBUG] [Thread-186219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:29:54.884 [DEBUG] [Thread-186219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:29:54.884 [DEBUG] [Thread-186219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:29:54.884 [DEBUG] [Thread-186219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:29:54.898 [INFO] [Thread-186219] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:29:54.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:29:55.486 [DEBUG] [Thread-186219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:29:55.486 [DEBUG] [Thread-186219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:29:55.486 [DEBUG] [Thread-186219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:29:55.527 [DEBUG] [Thread-186219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:29:55.528 [DEBUG] [Thread-186219] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:29:55.531 [DEBUG] [Thread-186219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:29:55.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:29:55.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:29:55.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:29:55.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:29:55.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:29:55.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:29:55.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:29:55.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:29:55.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:29:55.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.478929 -999.00  +15.50  30.68     44   +3.30 1 1 2 1 1   888    0 13.50 44.97 ----- 25.6 30.7 162.6 39.9 21.8 -27.4 20.8 -26.6 21.2 -24.4 22.4 -27.2
2026-02-14T13:29:55.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:29:55.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:29:55.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.478929
2026-02-14T13:29:55.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:29:55.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:29:55.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:29:55.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:29:55.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:29:55.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:29:42', tmtdew=15.46, humidity=35.29, cloud=0.0, wind=43.05, temperature=17.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:29:39.466', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:29:55.557 [DEBUG] [Thread-186219] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:29:55.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-14T13:29:55.653 [DEBUG] [Thread-186222] [transport.py] [_log()] starting thread (client mode): 0xa2d124d0
2026-02-14T13:29:55.653 [DEBUG] [Thread-186222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:29:55.668 [DEBUG] [Thread-186222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:29:55.668 [INFO] [Thread-186222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:29:55.675 [DEBUG] [Thread-186222] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:29:55.676 [DEBUG] [Thread-186222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:29:55.676 [DEBUG] [Thread-186222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:29:55.676 [DEBUG] [Thread-186222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:29:55.676 [DEBUG] [Thread-186222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:29:55.676 [DEBUG] [Thread-186222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:29:55.676 [DEBUG] [Thread-186222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:29:55.676 [DEBUG] [Thread-186222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:29:55.676 [DEBUG] [Thread-186222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:29:55.676 [DEBUG] [Thread-186222] [transport.py] [_log()] client lang: <none>
2026-02-14T13:29:55.676 [DEBUG] [Thread-186222] [transport.py] [_log()] server lang: <none>
2026-02-14T13:29:55.676 [DEBUG] [Thread-186222] [transport.py] [_log()] kex follows: False
2026-02-14T13:29:55.676 [DEBUG] [Thread-186222] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:29:55.676 [DEBUG] [Thread-186222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:29:55.676 [DEBUG] [Thread-186222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:29:55.676 [DEBUG] [Thread-186222] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:29:55.677 [DEBUG] [Thread-186222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:29:55.677 [DEBUG] [Thread-186222] [transport.py] [_log()] Compression: none
2026-02-14T13:29:55.677 [DEBUG] [Thread-186222] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:29:55.732 [DEBUG] [Thread-186222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:29:55.733 [DEBUG] [Thread-186222] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:29:55.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:29:55.734 [DEBUG] [Thread-186222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:29:55.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:29:55.788 [DEBUG] [Thread-186222] [transport.py] [_log()] userauth is OK
2026-02-14T13:29:55.789 [DEBUG] [Thread-186222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:29:55.789 [DEBUG] [Thread-186222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:29:55.789 [DEBUG] [Thread-186222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:29:55.789 [DEBUG] [Thread-186222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:29:55.807 [INFO] [Thread-186222] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:29:55.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-14T13:29:55.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:29:56.609 [DEBUG] [Thread-186222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:29:56.609 [DEBUG] [Thread-186222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:29:56.657 [DEBUG] [Thread-186222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:29:56.657 [DEBUG] [Thread-186222] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:29:56.667 [DEBUG] [Thread-186222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:29:56.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:29:56.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-14T13:29:56.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-14T13:29:56.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:29:56.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:29:56.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:29:56.703 [DEBUG] [Thread-186222] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:30:06.558 [DEBUG] [Thread-186224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:30:21.606 [DEBUG] [Thread-186225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:30:24.047 [DEBUG] [Thread-186226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:30:26.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:30:26.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:30:26.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:30:28.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 30, 17), 14.47, 37.41, 0.0, 34.0, 15.7, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:30:28.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:30:17
2026-02-14T13:30:28.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:30:29.087 [DEBUG] [Thread-186227] [transport.py] [_log()] starting thread (client mode): 0xa2db4b80
2026-02-14T13:30:29.087 [DEBUG] [Thread-186227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:30:29.108 [DEBUG] [Thread-186227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:30:29.109 [INFO] [Thread-186227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:30:29.111 [DEBUG] [Thread-186227] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:30:29.111 [DEBUG] [Thread-186227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:30:29.111 [DEBUG] [Thread-186227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:30:29.111 [DEBUG] [Thread-186227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:30:29.111 [DEBUG] [Thread-186227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:30:29.111 [DEBUG] [Thread-186227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:30:29.111 [DEBUG] [Thread-186227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:30:29.111 [DEBUG] [Thread-186227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:30:29.111 [DEBUG] [Thread-186227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:30:29.111 [DEBUG] [Thread-186227] [transport.py] [_log()] client lang: <none>
2026-02-14T13:30:29.111 [DEBUG] [Thread-186227] [transport.py] [_log()] server lang: <none>
2026-02-14T13:30:29.111 [DEBUG] [Thread-186227] [transport.py] [_log()] kex follows: False
2026-02-14T13:30:29.111 [DEBUG] [Thread-186227] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:30:29.112 [DEBUG] [Thread-186227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:30:29.112 [DEBUG] [Thread-186227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:30:29.112 [DEBUG] [Thread-186227] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:30:29.112 [DEBUG] [Thread-186227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:30:29.112 [DEBUG] [Thread-186227] [transport.py] [_log()] Compression: none
2026-02-14T13:30:29.112 [DEBUG] [Thread-186227] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:30:29.131 [DEBUG] [Thread-186227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:30:29.132 [DEBUG] [Thread-186227] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:30:29.132 [DEBUG] [Thread-186227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:30:29.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:30:29.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:30:29.135 [DEBUG] [Thread-186227] [transport.py] [_log()] userauth is OK
2026-02-14T13:30:29.135 [DEBUG] [Thread-186227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:30:29.135 [DEBUG] [Thread-186227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:30:29.135 [DEBUG] [Thread-186227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:30:29.135 [DEBUG] [Thread-186227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:30:29.172 [INFO] [Thread-186227] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:30:29.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:30:29.824 [DEBUG] [Thread-186227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:30:29.824 [DEBUG] [Thread-186227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:30:29.825 [DEBUG] [Thread-186227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:30:29.865 [DEBUG] [Thread-186227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:30:29.866 [DEBUG] [Thread-186227] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:30:29.868 [DEBUG] [Thread-186227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:30:29.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:30:29.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:30:29.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:30:29.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:30:29.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:30:29.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:30:29.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:30:29.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:30:29.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:30:29.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.479275 -999.00  +16.00  28.37     42   +3.30 1 1 1 1 1   888    0 13.37 42.31 ----- 30.3 28.4 170.8 31.6 21.9 -25.8 20.7 -28.3 21.2 -24.7 22.4 -25.0
2026-02-14T13:30:29.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:30:29.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:30:29.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.479275
2026-02-14T13:30:29.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:30:29.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:30:29.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:30:29.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:30:29.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:30:29.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:30:17', tmtdew=14.47, humidity=37.41, cloud=0.0, wind=34.0, temperature=15.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:30:09.360', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:30:29.896 [DEBUG] [Thread-186227] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:30:29.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-14T13:30:29.991 [DEBUG] [Thread-186230] [transport.py] [_log()] starting thread (client mode): 0xa2dea560
2026-02-14T13:30:29.991 [DEBUG] [Thread-186230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:30:30.005 [DEBUG] [Thread-186230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:30:30.005 [INFO] [Thread-186230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:30:30.014 [DEBUG] [Thread-186230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:30:30.014 [DEBUG] [Thread-186230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:30:30.014 [DEBUG] [Thread-186230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:30:30.014 [DEBUG] [Thread-186230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:30:30.014 [DEBUG] [Thread-186230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:30:30.014 [DEBUG] [Thread-186230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:30:30.014 [DEBUG] [Thread-186230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:30:30.014 [DEBUG] [Thread-186230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:30:30.014 [DEBUG] [Thread-186230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:30:30.014 [DEBUG] [Thread-186230] [transport.py] [_log()] client lang: <none>
2026-02-14T13:30:30.014 [DEBUG] [Thread-186230] [transport.py] [_log()] server lang: <none>
2026-02-14T13:30:30.014 [DEBUG] [Thread-186230] [transport.py] [_log()] kex follows: False
2026-02-14T13:30:30.014 [DEBUG] [Thread-186230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:30:30.014 [DEBUG] [Thread-186230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:30:30.015 [DEBUG] [Thread-186230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:30:30.015 [DEBUG] [Thread-186230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:30:30.015 [DEBUG] [Thread-186230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:30:30.015 [DEBUG] [Thread-186230] [transport.py] [_log()] Compression: none
2026-02-14T13:30:30.015 [DEBUG] [Thread-186230] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:30:30.072 [DEBUG] [Thread-186230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:30:30.073 [DEBUG] [Thread-186230] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:30:30.073 [DEBUG] [Thread-186230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:30:30.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:30:30.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:30:30.129 [DEBUG] [Thread-186230] [transport.py] [_log()] userauth is OK
2026-02-14T13:30:30.130 [DEBUG] [Thread-186230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:30:30.130 [DEBUG] [Thread-186230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:30:30.130 [DEBUG] [Thread-186230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:30:30.130 [DEBUG] [Thread-186230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:30:30.155 [INFO] [Thread-186230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:30:30.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-14T13:30:30.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:30:30.227 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:30:30.228 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:30:30.995 [DEBUG] [Thread-186230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:30:30.995 [DEBUG] [Thread-186230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:30:31.043 [DEBUG] [Thread-186230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:30:31.044 [DEBUG] [Thread-186230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:30:31.053 [DEBUG] [Thread-186230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:30:31.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:30:31.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:30:31.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:30:31.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:30:31.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:30:31.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:30:31.090 [DEBUG] [Thread-186230] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:30:36.641 [DEBUG] [Thread-186232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:30:51.682 [DEBUG] [Thread-186233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:31:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:31:01.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:31:01.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-14T13:31:02.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 30, 53), 14.51, 37.51, 0.0, 35.96, 15.62, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:31:02.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:30:53
2026-02-14T13:31:03.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:31:03.442 [DEBUG] [Thread-186234] [transport.py] [_log()] starting thread (client mode): 0xa2deb490
2026-02-14T13:31:03.442 [DEBUG] [Thread-186234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:31:03.461 [DEBUG] [Thread-186234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:31:03.462 [INFO] [Thread-186234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:31:03.465 [DEBUG] [Thread-186234] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:31:03.465 [DEBUG] [Thread-186234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:31:03.465 [DEBUG] [Thread-186234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:31:03.466 [DEBUG] [Thread-186234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:31:03.466 [DEBUG] [Thread-186234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:31:03.466 [DEBUG] [Thread-186234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:31:03.466 [DEBUG] [Thread-186234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:31:03.466 [DEBUG] [Thread-186234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:31:03.466 [DEBUG] [Thread-186234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:31:03.466 [DEBUG] [Thread-186234] [transport.py] [_log()] client lang: <none>
2026-02-14T13:31:03.466 [DEBUG] [Thread-186234] [transport.py] [_log()] server lang: <none>
2026-02-14T13:31:03.466 [DEBUG] [Thread-186234] [transport.py] [_log()] kex follows: False
2026-02-14T13:31:03.466 [DEBUG] [Thread-186234] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:31:03.466 [DEBUG] [Thread-186234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:31:03.466 [DEBUG] [Thread-186234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:31:03.466 [DEBUG] [Thread-186234] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:31:03.466 [DEBUG] [Thread-186234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:31:03.466 [DEBUG] [Thread-186234] [transport.py] [_log()] Compression: none
2026-02-14T13:31:03.466 [DEBUG] [Thread-186234] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:31:03.483 [DEBUG] [Thread-186234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:31:03.483 [DEBUG] [Thread-186234] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:31:03.484 [DEBUG] [Thread-186234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:31:03.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:31:03.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:31:03.487 [DEBUG] [Thread-186234] [transport.py] [_log()] userauth is OK
2026-02-14T13:31:03.487 [DEBUG] [Thread-186234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:31:03.487 [DEBUG] [Thread-186234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:31:03.487 [DEBUG] [Thread-186234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:31:03.487 [DEBUG] [Thread-186234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:31:03.512 [INFO] [Thread-186234] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:31:03.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:31:04.157 [DEBUG] [Thread-186234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:31:04.157 [DEBUG] [Thread-186234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:31:04.157 [DEBUG] [Thread-186234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:31:04.198 [DEBUG] [Thread-186234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:31:04.199 [DEBUG] [Thread-186234] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:31:04.202 [DEBUG] [Thread-186234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:31:04.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:31:04.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:31:04.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:31:04.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:31:04.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:31:04.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:31:04.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:31:04.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:31:04.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:31:04.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.479623 -999.00  +15.80  27.55     42   +3.00 1 1 1 1 1   888    0 13.50 44.64 ----- 32.3 27.6 165.7 35.3 21.9 -27.2 20.7 -24.6 21.2 -25.6 22.5 -27.4
2026-02-14T13:31:04.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:31:04.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:31:04.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.479623
2026-02-14T13:31:04.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:31:04.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:31:04.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:31:04.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:31:04.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:31:04.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:30:53', tmtdew=14.51, humidity=37.51, cloud=0.0, wind=35.96, temperature=15.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:30:39.427', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:31:04.233 [DEBUG] [Thread-186234] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:31:04.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-14T13:31:04.335 [DEBUG] [Thread-186237] [transport.py] [_log()] starting thread (client mode): 0xa2d22620
2026-02-14T13:31:04.336 [DEBUG] [Thread-186237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:31:04.350 [DEBUG] [Thread-186237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:31:04.350 [INFO] [Thread-186237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:31:04.362 [DEBUG] [Thread-186237] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:31:04.362 [DEBUG] [Thread-186237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:31:04.362 [DEBUG] [Thread-186237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:31:04.363 [DEBUG] [Thread-186237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:31:04.363 [DEBUG] [Thread-186237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:31:04.363 [DEBUG] [Thread-186237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:31:04.363 [DEBUG] [Thread-186237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:31:04.363 [DEBUG] [Thread-186237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:31:04.363 [DEBUG] [Thread-186237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:31:04.363 [DEBUG] [Thread-186237] [transport.py] [_log()] client lang: <none>
2026-02-14T13:31:04.363 [DEBUG] [Thread-186237] [transport.py] [_log()] server lang: <none>
2026-02-14T13:31:04.363 [DEBUG] [Thread-186237] [transport.py] [_log()] kex follows: False
2026-02-14T13:31:04.363 [DEBUG] [Thread-186237] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:31:04.363 [DEBUG] [Thread-186237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:31:04.363 [DEBUG] [Thread-186237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:31:04.363 [DEBUG] [Thread-186237] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:31:04.364 [DEBUG] [Thread-186237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:31:04.364 [DEBUG] [Thread-186237] [transport.py] [_log()] Compression: none
2026-02-14T13:31:04.364 [DEBUG] [Thread-186237] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:31:04.420 [DEBUG] [Thread-186237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:31:04.421 [DEBUG] [Thread-186237] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:31:04.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:31:04.422 [DEBUG] [Thread-186237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:31:04.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:31:04.483 [DEBUG] [Thread-186237] [transport.py] [_log()] userauth is OK
2026-02-14T13:31:04.484 [DEBUG] [Thread-186237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:31:04.484 [DEBUG] [Thread-186237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:31:04.484 [DEBUG] [Thread-186237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:31:04.484 [DEBUG] [Thread-186237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:31:04.505 [INFO] [Thread-186237] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:31:04.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-14T13:31:04.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:31:05.364 [DEBUG] [Thread-186237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:31:05.365 [DEBUG] [Thread-186237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:31:05.415 [DEBUG] [Thread-186237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:31:05.415 [DEBUG] [Thread-186237] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:31:05.429 [DEBUG] [Thread-186237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:31:05.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:31:05.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:31:05.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-14T13:31:05.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:31:05.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:31:05.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:31:05.477 [DEBUG] [Thread-186237] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:31:06.719 [DEBUG] [Thread-186239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:31:21.768 [DEBUG] [Thread-186240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:31:24.074 [DEBUG] [Thread-186241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:31:30.372 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:31:30.373 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:31:35.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:31:35.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:31:35.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-14T13:31:36.805 [DEBUG] [Thread-186242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:31:37.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 30, 53), 14.51, 37.51, 0.0, 35.96, 15.62, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:31:37.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:30:53
2026-02-14T13:31:38.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:31:38.188 [DEBUG] [Thread-186243] [transport.py] [_log()] starting thread (client mode): 0xa2db67a0
2026-02-14T13:31:38.188 [DEBUG] [Thread-186243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:31:38.208 [DEBUG] [Thread-186243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:31:38.208 [INFO] [Thread-186243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:31:38.212 [DEBUG] [Thread-186243] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:31:38.212 [DEBUG] [Thread-186243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:31:38.212 [DEBUG] [Thread-186243] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:31:38.212 [DEBUG] [Thread-186243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:31:38.212 [DEBUG] [Thread-186243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:31:38.212 [DEBUG] [Thread-186243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:31:38.212 [DEBUG] [Thread-186243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:31:38.212 [DEBUG] [Thread-186243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:31:38.212 [DEBUG] [Thread-186243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:31:38.212 [DEBUG] [Thread-186243] [transport.py] [_log()] client lang: <none>
2026-02-14T13:31:38.212 [DEBUG] [Thread-186243] [transport.py] [_log()] server lang: <none>
2026-02-14T13:31:38.212 [DEBUG] [Thread-186243] [transport.py] [_log()] kex follows: False
2026-02-14T13:31:38.212 [DEBUG] [Thread-186243] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:31:38.212 [DEBUG] [Thread-186243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:31:38.212 [DEBUG] [Thread-186243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:31:38.213 [DEBUG] [Thread-186243] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:31:38.213 [DEBUG] [Thread-186243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:31:38.213 [DEBUG] [Thread-186243] [transport.py] [_log()] Compression: none
2026-02-14T13:31:38.213 [DEBUG] [Thread-186243] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:31:38.231 [DEBUG] [Thread-186243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:31:38.231 [DEBUG] [Thread-186243] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:31:38.232 [DEBUG] [Thread-186243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:31:38.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:31:38.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:31:38.234 [DEBUG] [Thread-186243] [transport.py] [_log()] userauth is OK
2026-02-14T13:31:38.234 [DEBUG] [Thread-186243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:31:38.234 [DEBUG] [Thread-186243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:31:38.234 [DEBUG] [Thread-186243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:31:38.234 [DEBUG] [Thread-186243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:31:38.259 [INFO] [Thread-186243] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:31:38.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:31:38.905 [DEBUG] [Thread-186243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:31:38.906 [DEBUG] [Thread-186243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:31:38.906 [DEBUG] [Thread-186243] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:31:38.947 [DEBUG] [Thread-186243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:31:38.947 [DEBUG] [Thread-186243] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:31:38.951 [DEBUG] [Thread-186243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:31:38.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:31:38.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:31:38.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:31:38.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:31:38.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:31:38.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:31:38.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:31:38.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:31:38.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:31:38.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.479970 -999.00  +15.60  29.51     43   +3.10 1 1 1 1 1   888    0 13.39 46.34 ----- 29.2 29.5 168.2 34.5 21.9 -26.6 20.7 -26.3 21.2 -25.5 22.4 -26.4
2026-02-14T13:31:38.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:31:38.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:31:38.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.479970
2026-02-14T13:31:38.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:31:38.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:31:38.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:31:38.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:31:38.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:31:38.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:30:53', tmtdew=14.51, humidity=37.51, cloud=0.0, wind=35.96, temperature=15.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:31:09.408', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:31:38.979 [DEBUG] [Thread-186243] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:31:39.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T13:31:39.075 [DEBUG] [Thread-186246] [transport.py] [_log()] starting thread (client mode): 0xa2d23040
2026-02-14T13:31:39.076 [DEBUG] [Thread-186246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:31:39.090 [DEBUG] [Thread-186246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:31:39.090 [INFO] [Thread-186246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:31:39.097 [DEBUG] [Thread-186246] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:31:39.098 [DEBUG] [Thread-186246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:31:39.098 [DEBUG] [Thread-186246] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:31:39.098 [DEBUG] [Thread-186246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:31:39.098 [DEBUG] [Thread-186246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:31:39.098 [DEBUG] [Thread-186246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:31:39.098 [DEBUG] [Thread-186246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:31:39.098 [DEBUG] [Thread-186246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:31:39.099 [DEBUG] [Thread-186246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:31:39.099 [DEBUG] [Thread-186246] [transport.py] [_log()] client lang: <none>
2026-02-14T13:31:39.099 [DEBUG] [Thread-186246] [transport.py] [_log()] server lang: <none>
2026-02-14T13:31:39.099 [DEBUG] [Thread-186246] [transport.py] [_log()] kex follows: False
2026-02-14T13:31:39.099 [DEBUG] [Thread-186246] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:31:39.099 [DEBUG] [Thread-186246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:31:39.099 [DEBUG] [Thread-186246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:31:39.099 [DEBUG] [Thread-186246] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:31:39.099 [DEBUG] [Thread-186246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:31:39.099 [DEBUG] [Thread-186246] [transport.py] [_log()] Compression: none
2026-02-14T13:31:39.099 [DEBUG] [Thread-186246] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:31:39.156 [DEBUG] [Thread-186246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:31:39.157 [DEBUG] [Thread-186246] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:31:39.157 [DEBUG] [Thread-186246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:31:39.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:31:39.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:31:39.215 [DEBUG] [Thread-186246] [transport.py] [_log()] userauth is OK
2026-02-14T13:31:39.215 [DEBUG] [Thread-186246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:31:39.215 [DEBUG] [Thread-186246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:31:39.215 [DEBUG] [Thread-186246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:31:39.216 [DEBUG] [Thread-186246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:31:39.241 [INFO] [Thread-186246] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:31:39.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-14T13:31:39.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:31:40.052 [DEBUG] [Thread-186246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:31:40.052 [DEBUG] [Thread-186246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:31:40.100 [DEBUG] [Thread-186246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:31:40.101 [DEBUG] [Thread-186246] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:31:40.109 [DEBUG] [Thread-186246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:31:40.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:31: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-14T13:31: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-14T13:31:40.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:31:40.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:31:40.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:31:40.146 [DEBUG] [Thread-186246] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:31:51.842 [DEBUG] [Thread-186248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:32:06.901 [DEBUG] [Thread-186249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:32:10.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:32:10.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:32:10.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:32:12.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 31, 29), 14.41, 37.78, 0.0, 33.51, 15.69, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:32:12.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:31:29
2026-02-14T13:32:12.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:32:12.848 [DEBUG] [Thread-186250] [transport.py] [_log()] starting thread (client mode): 0xa2d11d20
2026-02-14T13:32:12.848 [DEBUG] [Thread-186250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:32:12.876 [DEBUG] [Thread-186250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:32:12.876 [INFO] [Thread-186250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:32:12.878 [DEBUG] [Thread-186250] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:32:12.878 [DEBUG] [Thread-186250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:32:12.878 [DEBUG] [Thread-186250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:32:12.879 [DEBUG] [Thread-186250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:32:12.879 [DEBUG] [Thread-186250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:32:12.879 [DEBUG] [Thread-186250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:32:12.879 [DEBUG] [Thread-186250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:32:12.879 [DEBUG] [Thread-186250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:32:12.879 [DEBUG] [Thread-186250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:32:12.879 [DEBUG] [Thread-186250] [transport.py] [_log()] client lang: <none>
2026-02-14T13:32:12.879 [DEBUG] [Thread-186250] [transport.py] [_log()] server lang: <none>
2026-02-14T13:32:12.879 [DEBUG] [Thread-186250] [transport.py] [_log()] kex follows: False
2026-02-14T13:32:12.879 [DEBUG] [Thread-186250] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:32:12.879 [DEBUG] [Thread-186250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:32:12.879 [DEBUG] [Thread-186250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:32:12.879 [DEBUG] [Thread-186250] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:32:12.879 [DEBUG] [Thread-186250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:32:12.879 [DEBUG] [Thread-186250] [transport.py] [_log()] Compression: none
2026-02-14T13:32:12.879 [DEBUG] [Thread-186250] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:32:12.892 [DEBUG] [Thread-186250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:32:12.892 [DEBUG] [Thread-186250] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:32:12.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:32:12.892 [DEBUG] [Thread-186250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:32:12.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:32:12.895 [DEBUG] [Thread-186250] [transport.py] [_log()] userauth is OK
2026-02-14T13:32:12.895 [DEBUG] [Thread-186250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:32:12.895 [DEBUG] [Thread-186250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:32:12.895 [DEBUG] [Thread-186250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:32:12.896 [DEBUG] [Thread-186250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:32:12.913 [INFO] [Thread-186250] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:32:12.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:32:13.531 [DEBUG] [Thread-186250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:32:13.531 [DEBUG] [Thread-186250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:32:13.532 [DEBUG] [Thread-186250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:32:13.572 [DEBUG] [Thread-186250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:32:13.573 [DEBUG] [Thread-186250] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:32:13.576 [DEBUG] [Thread-186250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:32:13.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:32:13.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:32:13.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:32:13.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:32:13.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:32:13.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:32:13.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:32:13.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:32:13.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:32:13.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.480318 -999.00  +15.50  28.93     43   +3.10 1 1 1 1 1   888    0 13.26 39.58 ----- 24.9 28.9 172.4 38.7 21.9 -25.7 20.6 -26.0 21.2 -23.2 22.4 -25.8
2026-02-14T13:32:13.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:32:13.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:32:13.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.480318
2026-02-14T13:32:13.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:32:13.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:32:13.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:32:13.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:32:13.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:32:13.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:31:29', tmtdew=14.41, humidity=37.78, cloud=0.0, wind=33.51, temperature=15.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:31:39.475', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:32:13.600 [DEBUG] [Thread-186250] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:32:13.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-14T13:32:13.696 [DEBUG] [Thread-186253] [transport.py] [_log()] starting thread (client mode): 0xa2d13f40
2026-02-14T13:32:13.696 [DEBUG] [Thread-186253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:32:13.710 [DEBUG] [Thread-186253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:32:13.711 [INFO] [Thread-186253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:32:13.718 [DEBUG] [Thread-186253] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:32:13.719 [DEBUG] [Thread-186253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:32:13.719 [DEBUG] [Thread-186253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:32:13.719 [DEBUG] [Thread-186253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:32:13.719 [DEBUG] [Thread-186253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:32:13.719 [DEBUG] [Thread-186253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:32:13.719 [DEBUG] [Thread-186253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:32:13.719 [DEBUG] [Thread-186253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:32:13.719 [DEBUG] [Thread-186253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:32:13.719 [DEBUG] [Thread-186253] [transport.py] [_log()] client lang: <none>
2026-02-14T13:32:13.719 [DEBUG] [Thread-186253] [transport.py] [_log()] server lang: <none>
2026-02-14T13:32:13.719 [DEBUG] [Thread-186253] [transport.py] [_log()] kex follows: False
2026-02-14T13:32:13.719 [DEBUG] [Thread-186253] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:32:13.719 [DEBUG] [Thread-186253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:32:13.719 [DEBUG] [Thread-186253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:32:13.719 [DEBUG] [Thread-186253] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:32:13.720 [DEBUG] [Thread-186253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:32:13.720 [DEBUG] [Thread-186253] [transport.py] [_log()] Compression: none
2026-02-14T13:32:13.720 [DEBUG] [Thread-186253] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:32:13.776 [DEBUG] [Thread-186253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:32:13.777 [DEBUG] [Thread-186253] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:32:13.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:32:13.778 [DEBUG] [Thread-186253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:32:13.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:32:13.832 [DEBUG] [Thread-186253] [transport.py] [_log()] userauth is OK
2026-02-14T13:32:13.833 [DEBUG] [Thread-186253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:32:13.833 [DEBUG] [Thread-186253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:32:13.833 [DEBUG] [Thread-186253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:32:13.833 [DEBUG] [Thread-186253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:32:13.851 [INFO] [Thread-186253] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:32:13.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-14T13:32:13.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:32:14.652 [DEBUG] [Thread-186253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:32:14.652 [DEBUG] [Thread-186253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:32:14.700 [DEBUG] [Thread-186253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:32:14.701 [DEBUG] [Thread-186253] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:32:14.709 [DEBUG] [Thread-186253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:32:14.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:32:14.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-14T13:32:14.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-14T13:32:14.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:32:14.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:32:14.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:32:14.746 [DEBUG] [Thread-186253] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:32:21.939 [DEBUG] [Thread-186255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:32:24.102 [DEBUG] [Thread-186256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:32:30.516 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:32:30.517 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:32:36.994 [DEBUG] [Thread-186257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:32:44.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:32:44.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:32:44.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:32:47.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 32, 5), 14.43, 37.7, 0.0, 36.1, 15.6, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:32:47.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:32:05
2026-02-14T13:32:47.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:32:47.997 [DEBUG] [Thread-186258] [transport.py] [_log()] starting thread (client mode): 0xa2d20460
2026-02-14T13:32:47.997 [DEBUG] [Thread-186258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:32:48.019 [DEBUG] [Thread-186258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:32:48.019 [INFO] [Thread-186258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:32:48.023 [DEBUG] [Thread-186258] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:32:48.023 [DEBUG] [Thread-186258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:32:48.023 [DEBUG] [Thread-186258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:32:48.023 [DEBUG] [Thread-186258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:32:48.023 [DEBUG] [Thread-186258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:32:48.023 [DEBUG] [Thread-186258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:32:48.023 [DEBUG] [Thread-186258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:32:48.023 [DEBUG] [Thread-186258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:32:48.023 [DEBUG] [Thread-186258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:32:48.023 [DEBUG] [Thread-186258] [transport.py] [_log()] client lang: <none>
2026-02-14T13:32:48.023 [DEBUG] [Thread-186258] [transport.py] [_log()] server lang: <none>
2026-02-14T13:32:48.023 [DEBUG] [Thread-186258] [transport.py] [_log()] kex follows: False
2026-02-14T13:32:48.023 [DEBUG] [Thread-186258] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:32:48.023 [DEBUG] [Thread-186258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:32:48.023 [DEBUG] [Thread-186258] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:32:48.023 [DEBUG] [Thread-186258] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:32:48.023 [DEBUG] [Thread-186258] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:32:48.023 [DEBUG] [Thread-186258] [transport.py] [_log()] Compression: none
2026-02-14T13:32:48.023 [DEBUG] [Thread-186258] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:32:48.040 [DEBUG] [Thread-186258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:32:48.040 [DEBUG] [Thread-186258] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:32:48.041 [DEBUG] [Thread-186258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:32:48.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:32:48.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:32:48.043 [DEBUG] [Thread-186258] [transport.py] [_log()] userauth is OK
2026-02-14T13:32:48.043 [DEBUG] [Thread-186258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:32:48.043 [DEBUG] [Thread-186258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:32:48.043 [DEBUG] [Thread-186258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:32:48.043 [DEBUG] [Thread-186258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:32:48.067 [INFO] [Thread-186258] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:32:48.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:32:48.668 [DEBUG] [Thread-186258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:32:48.668 [DEBUG] [Thread-186258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:32:48.669 [DEBUG] [Thread-186258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:32:48.709 [DEBUG] [Thread-186258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:32:48.710 [DEBUG] [Thread-186258] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:32:48.713 [DEBUG] [Thread-186258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:32:48.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:32:48.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:32:48.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:32:48.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:32:48.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:32:48.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:32:48.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:32:48.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:32:48.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:32:48.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.480665 -999.00  +15.20  15.34     44   +3.10 1 1 1 1 1   888    0 13.40 35.97 ----- 30.6 15.3 173.2 31.4 21.9 -26.0 20.6 -25.4 21.2 -24.1 22.5 -26.0
2026-02-14T13:32:48.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:32:48.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:32:48.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.480665
2026-02-14T13:32:48.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:32:48.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:32:48.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:32:48.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:32:48.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:32:48.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:32:05', tmtdew=14.43, humidity=37.7, cloud=0.0, wind=36.1, temperature=15.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:32:09.456', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:32:48.748 [DEBUG] [Thread-186258] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:32:48.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T13:32:48.846 [DEBUG] [Thread-186261] [transport.py] [_log()] starting thread (client mode): 0xa2dc2da0
2026-02-14T13:32:48.846 [DEBUG] [Thread-186261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:32:48.861 [DEBUG] [Thread-186261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:32:48.861 [INFO] [Thread-186261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:32:48.868 [DEBUG] [Thread-186261] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:32:48.869 [DEBUG] [Thread-186261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:32:48.869 [DEBUG] [Thread-186261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:32:48.869 [DEBUG] [Thread-186261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:32:48.869 [DEBUG] [Thread-186261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:32:48.869 [DEBUG] [Thread-186261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:32:48.869 [DEBUG] [Thread-186261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:32:48.869 [DEBUG] [Thread-186261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:32:48.869 [DEBUG] [Thread-186261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:32:48.869 [DEBUG] [Thread-186261] [transport.py] [_log()] client lang: <none>
2026-02-14T13:32:48.869 [DEBUG] [Thread-186261] [transport.py] [_log()] server lang: <none>
2026-02-14T13:32:48.869 [DEBUG] [Thread-186261] [transport.py] [_log()] kex follows: False
2026-02-14T13:32:48.869 [DEBUG] [Thread-186261] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:32:48.869 [DEBUG] [Thread-186261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:32:48.869 [DEBUG] [Thread-186261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:32:48.869 [DEBUG] [Thread-186261] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:32:48.869 [DEBUG] [Thread-186261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:32:48.870 [DEBUG] [Thread-186261] [transport.py] [_log()] Compression: none
2026-02-14T13:32:48.870 [DEBUG] [Thread-186261] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:32:48.928 [DEBUG] [Thread-186261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:32:48.928 [DEBUG] [Thread-186261] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:32:48.929 [DEBUG] [Thread-186261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:32:48.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:32:48.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:32:48.985 [DEBUG] [Thread-186261] [transport.py] [_log()] userauth is OK
2026-02-14T13:32:48.985 [DEBUG] [Thread-186261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:32:48.985 [DEBUG] [Thread-186261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:32:48.985 [DEBUG] [Thread-186261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:32:48.985 [DEBUG] [Thread-186261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:32:49.004 [INFO] [Thread-186261] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:32:49.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T13:32:49.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:32:49.837 [DEBUG] [Thread-186261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:32:49.837 [DEBUG] [Thread-186261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:32:49.886 [DEBUG] [Thread-186261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:32:49.886 [DEBUG] [Thread-186261] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:32:49.895 [DEBUG] [Thread-186261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:32:49.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:32:49.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-14T13:32:49.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:32:49.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:32:49.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:32:49.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:32:49.932 [DEBUG] [Thread-186261] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:32:52.030 [DEBUG] [Thread-186263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:33:07.083 [DEBUG] [Thread-186264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:33:19.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:33:19.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:33:19.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-14T13:33:22.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 32, 41), 15.21, 35.82, 0.0, 37.61, 16.77, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:33:22.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:32:41
2026-02-14T13:33:22.119 [DEBUG] [Thread-186265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:33:22.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:33:22.611 [DEBUG] [Thread-186266] [transport.py] [_log()] starting thread (client mode): 0xa2db67a0
2026-02-14T13:33:22.611 [DEBUG] [Thread-186266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:33:22.633 [DEBUG] [Thread-186266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:33:22.634 [INFO] [Thread-186266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:33:22.637 [DEBUG] [Thread-186266] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:33:22.637 [DEBUG] [Thread-186266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:33:22.637 [DEBUG] [Thread-186266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:33:22.637 [DEBUG] [Thread-186266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:33:22.637 [DEBUG] [Thread-186266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:33:22.637 [DEBUG] [Thread-186266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:33:22.637 [DEBUG] [Thread-186266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:33:22.637 [DEBUG] [Thread-186266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:33:22.637 [DEBUG] [Thread-186266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:33:22.637 [DEBUG] [Thread-186266] [transport.py] [_log()] client lang: <none>
2026-02-14T13:33:22.637 [DEBUG] [Thread-186266] [transport.py] [_log()] server lang: <none>
2026-02-14T13:33:22.637 [DEBUG] [Thread-186266] [transport.py] [_log()] kex follows: False
2026-02-14T13:33:22.637 [DEBUG] [Thread-186266] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:33:22.637 [DEBUG] [Thread-186266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:33:22.637 [DEBUG] [Thread-186266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:33:22.637 [DEBUG] [Thread-186266] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:33:22.637 [DEBUG] [Thread-186266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:33:22.638 [DEBUG] [Thread-186266] [transport.py] [_log()] Compression: none
2026-02-14T13:33:22.638 [DEBUG] [Thread-186266] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:33:22.656 [DEBUG] [Thread-186266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:33:22.656 [DEBUG] [Thread-186266] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:33:22.657 [DEBUG] [Thread-186266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:33:22.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:33:22.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:33:22.659 [DEBUG] [Thread-186266] [transport.py] [_log()] userauth is OK
2026-02-14T13:33:22.659 [DEBUG] [Thread-186266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:33:22.659 [DEBUG] [Thread-186266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:33:22.659 [DEBUG] [Thread-186266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:33:22.659 [DEBUG] [Thread-186266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:33:22.685 [INFO] [Thread-186266] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:33:22.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:33:23.340 [DEBUG] [Thread-186266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:33:23.341 [DEBUG] [Thread-186266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:33:23.341 [DEBUG] [Thread-186266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:33:23.381 [DEBUG] [Thread-186266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:33:23.381 [DEBUG] [Thread-186266] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:33:23.384 [DEBUG] [Thread-186266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:33:23.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:33:23.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:33:23.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:33:23.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:33:23.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:33:23.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:33:23.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:33:23.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:33:23.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:33:23.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.481012 -999.00  +15.30  33.49     44   +3.20 1 1 2 1 1   888    0 13.22 35.52 ----- 29.4 33.5 166.6 38.3 21.8 -28.1 20.7 -25.2 21.1 -26.0 22.4 -26.3
2026-02-14T13:33:23.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:33:23.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:33:23.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.481012
2026-02-14T13:33:23.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:33:23.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:33:23.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:33:23.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:33:23.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:33:23.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:32:41', tmtdew=15.21, humidity=35.82, cloud=0.0, wind=37.61, temperature=16.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:32:39.437', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:33:23.409 [DEBUG] [Thread-186266] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:33:23.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-14T13:33:23.506 [DEBUG] [Thread-186269] [transport.py] [_log()] starting thread (client mode): 0xa2d12fb0
2026-02-14T13:33:23.506 [DEBUG] [Thread-186269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:33:23.525 [DEBUG] [Thread-186269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:33:23.525 [INFO] [Thread-186269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:33:23.540 [DEBUG] [Thread-186269] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:33:23.540 [DEBUG] [Thread-186269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:33:23.540 [DEBUG] [Thread-186269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:33:23.540 [DEBUG] [Thread-186269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:33:23.540 [DEBUG] [Thread-186269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:33:23.541 [DEBUG] [Thread-186269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:33:23.541 [DEBUG] [Thread-186269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:33:23.541 [DEBUG] [Thread-186269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:33:23.541 [DEBUG] [Thread-186269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:33:23.541 [DEBUG] [Thread-186269] [transport.py] [_log()] client lang: <none>
2026-02-14T13:33:23.541 [DEBUG] [Thread-186269] [transport.py] [_log()] server lang: <none>
2026-02-14T13:33:23.541 [DEBUG] [Thread-186269] [transport.py] [_log()] kex follows: False
2026-02-14T13:33:23.541 [DEBUG] [Thread-186269] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:33:23.541 [DEBUG] [Thread-186269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:33:23.541 [DEBUG] [Thread-186269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:33:23.541 [DEBUG] [Thread-186269] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:33:23.541 [DEBUG] [Thread-186269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:33:23.541 [DEBUG] [Thread-186269] [transport.py] [_log()] Compression: none
2026-02-14T13:33:23.541 [DEBUG] [Thread-186269] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:33:23.614 [DEBUG] [Thread-186269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:33:23.615 [DEBUG] [Thread-186269] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:33:23.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:33:23.616 [DEBUG] [Thread-186269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:33:23.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:33:23.676 [DEBUG] [Thread-186269] [transport.py] [_log()] userauth is OK
2026-02-14T13:33:23.676 [DEBUG] [Thread-186269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:33:23.676 [DEBUG] [Thread-186269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:33:23.676 [DEBUG] [Thread-186269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:33:23.677 [DEBUG] [Thread-186269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:33:23.696 [INFO] [Thread-186269] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:33:23.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-14T13:33:23.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:33:24.130 [DEBUG] [Thread-186271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:33:24.531 [DEBUG] [Thread-186269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:33:24.531 [DEBUG] [Thread-186269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:33:24.579 [DEBUG] [Thread-186269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:33:24.580 [DEBUG] [Thread-186269] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:33:24.589 [DEBUG] [Thread-186269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:33:24.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:33:24.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-14T13:33:24.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-14T13:33:24.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:33:24.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:33:24.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:33:24.625 [DEBUG] [Thread-186269] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:33:30.657 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:33:30.658 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:33:37.154 [DEBUG] [Thread-186272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:33:52.207 [DEBUG] [Thread-186273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:33:54.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:33:54.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:33:54.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-14T13:33:56.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 33, 17), 14.31, 37.75, 0.0, 33.44, 15.57, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:33:56.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:33:17
2026-02-14T13:33:57.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:33:57.578 [DEBUG] [Thread-186274] [transport.py] [_log()] starting thread (client mode): 0xa2d128c0
2026-02-14T13:33:57.578 [DEBUG] [Thread-186274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:33:57.597 [DEBUG] [Thread-186274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:33:57.598 [INFO] [Thread-186274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:33:57.599 [DEBUG] [Thread-186274] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:33:57.599 [DEBUG] [Thread-186274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:33:57.599 [DEBUG] [Thread-186274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:33:57.599 [DEBUG] [Thread-186274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:33:57.599 [DEBUG] [Thread-186274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:33:57.599 [DEBUG] [Thread-186274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:33:57.599 [DEBUG] [Thread-186274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:33:57.599 [DEBUG] [Thread-186274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:33:57.599 [DEBUG] [Thread-186274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:33:57.599 [DEBUG] [Thread-186274] [transport.py] [_log()] client lang: <none>
2026-02-14T13:33:57.599 [DEBUG] [Thread-186274] [transport.py] [_log()] server lang: <none>
2026-02-14T13:33:57.599 [DEBUG] [Thread-186274] [transport.py] [_log()] kex follows: False
2026-02-14T13:33:57.599 [DEBUG] [Thread-186274] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:33:57.600 [DEBUG] [Thread-186274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:33:57.600 [DEBUG] [Thread-186274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:33:57.600 [DEBUG] [Thread-186274] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:33:57.600 [DEBUG] [Thread-186274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:33:57.600 [DEBUG] [Thread-186274] [transport.py] [_log()] Compression: none
2026-02-14T13:33:57.600 [DEBUG] [Thread-186274] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:33:57.607 [DEBUG] [Thread-186274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:33:57.607 [DEBUG] [Thread-186274] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:33:57.607 [DEBUG] [Thread-186274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:33:57.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:33:57.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:33:57.609 [DEBUG] [Thread-186274] [transport.py] [_log()] userauth is OK
2026-02-14T13:33:57.609 [DEBUG] [Thread-186274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:33:57.609 [DEBUG] [Thread-186274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:33:57.609 [DEBUG] [Thread-186274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:33:57.609 [DEBUG] [Thread-186274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:33:57.628 [INFO] [Thread-186274] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:33:57.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:33:58.238 [DEBUG] [Thread-186274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:33:58.238 [DEBUG] [Thread-186274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:33:58.239 [DEBUG] [Thread-186274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:33:58.279 [DEBUG] [Thread-186274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:33:58.279 [DEBUG] [Thread-186274] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:33:58.282 [DEBUG] [Thread-186274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:33:58.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:33:58.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:33:58.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:33:58.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:33:58.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:33:58.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:33:58.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:33:58.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:33:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:33:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.481359 -999.00  +15.40  19.84     44   +3.30 1 1 1 1 1   888    0 13.24 37.01 ----- 22.4 19.8 186.6 32.6 21.8 -27.7 20.4 -28.0 21.2 -25.0 22.4 -27.2
2026-02-14T13:33:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:33:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:33:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.481359
2026-02-14T13:33:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:33:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:33:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:33:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:33:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:33:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:33:17', tmtdew=14.31, humidity=37.75, cloud=0.0, wind=33.44, temperature=15.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:33:09.418', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:33:58.303 [DEBUG] [Thread-186274] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:33:58.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-14T13:33:58.386 [DEBUG] [Thread-186277] [transport.py] [_log()] starting thread (client mode): 0xa2d55f60
2026-02-14T13:33:58.387 [DEBUG] [Thread-186277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:33:58.401 [DEBUG] [Thread-186277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:33:58.401 [INFO] [Thread-186277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:33:58.409 [DEBUG] [Thread-186277] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:33:58.409 [DEBUG] [Thread-186277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:33:58.409 [DEBUG] [Thread-186277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:33:58.409 [DEBUG] [Thread-186277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:33:58.409 [DEBUG] [Thread-186277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:33:58.409 [DEBUG] [Thread-186277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:33:58.409 [DEBUG] [Thread-186277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:33:58.409 [DEBUG] [Thread-186277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:33:58.409 [DEBUG] [Thread-186277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:33:58.409 [DEBUG] [Thread-186277] [transport.py] [_log()] client lang: <none>
2026-02-14T13:33:58.409 [DEBUG] [Thread-186277] [transport.py] [_log()] server lang: <none>
2026-02-14T13:33:58.409 [DEBUG] [Thread-186277] [transport.py] [_log()] kex follows: False
2026-02-14T13:33:58.410 [DEBUG] [Thread-186277] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:33:58.410 [DEBUG] [Thread-186277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:33:58.410 [DEBUG] [Thread-186277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:33:58.410 [DEBUG] [Thread-186277] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:33:58.410 [DEBUG] [Thread-186277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:33:58.410 [DEBUG] [Thread-186277] [transport.py] [_log()] Compression: none
2026-02-14T13:33:58.410 [DEBUG] [Thread-186277] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:33:58.469 [DEBUG] [Thread-186277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:33:58.469 [DEBUG] [Thread-186277] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:33:58.470 [DEBUG] [Thread-186277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:33:58.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:33:58.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:33:58.524 [DEBUG] [Thread-186277] [transport.py] [_log()] userauth is OK
2026-02-14T13:33:58.524 [DEBUG] [Thread-186277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:33:58.525 [DEBUG] [Thread-186277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:33:58.525 [DEBUG] [Thread-186277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:33:58.525 [DEBUG] [Thread-186277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:33:58.547 [INFO] [Thread-186277] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:33:58.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-14T13:33:58.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:33:59.380 [DEBUG] [Thread-186277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:33:59.380 [DEBUG] [Thread-186277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:33:59.427 [DEBUG] [Thread-186277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:33:59.428 [DEBUG] [Thread-186277] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:33:59.437 [DEBUG] [Thread-186277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:33:59.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:33:59.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:33:59.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-14T13:33:59.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:33:59.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:33:59.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:33:59.474 [DEBUG] [Thread-186277] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:34:07.245 [DEBUG] [Thread-186279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:34:22.307 [DEBUG] [Thread-186280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:34:24.161 [DEBUG] [Thread-186281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:34:29.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:34:29.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:34:29.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:34:30.798 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:34:30.799 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:34:31.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 33, 53), 14.75, 37.12, 0.0, 35.94, 15.69, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:34:31.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:33:53
2026-02-14T13:34:31.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:34:32.042 [DEBUG] [Thread-186282] [transport.py] [_log()] starting thread (client mode): 0xa2d23580
2026-02-14T13:34:32.042 [DEBUG] [Thread-186282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:34:32.063 [DEBUG] [Thread-186282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:34:32.063 [INFO] [Thread-186282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:34:32.066 [DEBUG] [Thread-186282] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:34:32.067 [DEBUG] [Thread-186282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:34:32.067 [DEBUG] [Thread-186282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:34:32.067 [DEBUG] [Thread-186282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:34:32.067 [DEBUG] [Thread-186282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:34:32.067 [DEBUG] [Thread-186282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:34:32.067 [DEBUG] [Thread-186282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:34:32.067 [DEBUG] [Thread-186282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:34:32.067 [DEBUG] [Thread-186282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:34:32.067 [DEBUG] [Thread-186282] [transport.py] [_log()] client lang: <none>
2026-02-14T13:34:32.067 [DEBUG] [Thread-186282] [transport.py] [_log()] server lang: <none>
2026-02-14T13:34:32.067 [DEBUG] [Thread-186282] [transport.py] [_log()] kex follows: False
2026-02-14T13:34:32.067 [DEBUG] [Thread-186282] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:34:32.067 [DEBUG] [Thread-186282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:34:32.067 [DEBUG] [Thread-186282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:34:32.067 [DEBUG] [Thread-186282] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:34:32.067 [DEBUG] [Thread-186282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:34:32.067 [DEBUG] [Thread-186282] [transport.py] [_log()] Compression: none
2026-02-14T13:34:32.067 [DEBUG] [Thread-186282] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:34:32.084 [DEBUG] [Thread-186282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:34:32.085 [DEBUG] [Thread-186282] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:34:32.085 [DEBUG] [Thread-186282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:34:32.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:34:32.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:34:32.087 [DEBUG] [Thread-186282] [transport.py] [_log()] userauth is OK
2026-02-14T13:34:32.087 [DEBUG] [Thread-186282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:34:32.088 [DEBUG] [Thread-186282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:34:32.088 [DEBUG] [Thread-186282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:34:32.088 [DEBUG] [Thread-186282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:34:32.112 [INFO] [Thread-186282] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:34:32.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:34:32.763 [DEBUG] [Thread-186282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:34:32.764 [DEBUG] [Thread-186282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:34:32.764 [DEBUG] [Thread-186282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:34:32.804 [DEBUG] [Thread-186282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:34:32.805 [DEBUG] [Thread-186282] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:34:32.808 [DEBUG] [Thread-186282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:34:32.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:34:32.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:34:32.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:34:32.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:34:32.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:34:32.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:34:32.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:34:32.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:34:32.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:34:32.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.482054 -999.00  +15.50  24.49     43   +3.20 1 1 1 1 1   888    0 13.34 33.24 ----- 29.6 24.5 176.8 34.2 21.8 -26.6 20.3 -31.2 21.2 -26.2 22.4 -26.1
2026-02-14T13:34:32.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:34:32.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:34:32.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.482054
2026-02-14T13:34:32.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:34:32.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:34:32.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:34:32.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:34:32.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:34:32.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:33:53', tmtdew=14.75, humidity=37.12, cloud=0.0, wind=35.94, temperature=15.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:34:09.466', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:34:32.834 [DEBUG] [Thread-186282] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:34:32.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-14T13:34:32.932 [DEBUG] [Thread-186285] [transport.py] [_log()] starting thread (client mode): 0xa2d13a90
2026-02-14T13:34:32.932 [DEBUG] [Thread-186285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:34:32.946 [DEBUG] [Thread-186285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:34:32.946 [INFO] [Thread-186285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:34:32.954 [DEBUG] [Thread-186285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:34:32.954 [DEBUG] [Thread-186285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:34:32.954 [DEBUG] [Thread-186285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:34:32.954 [DEBUG] [Thread-186285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:34:32.954 [DEBUG] [Thread-186285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:34:32.954 [DEBUG] [Thread-186285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:34:32.954 [DEBUG] [Thread-186285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:34:32.954 [DEBUG] [Thread-186285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:34:32.955 [DEBUG] [Thread-186285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:34:32.955 [DEBUG] [Thread-186285] [transport.py] [_log()] client lang: <none>
2026-02-14T13:34:32.955 [DEBUG] [Thread-186285] [transport.py] [_log()] server lang: <none>
2026-02-14T13:34:32.955 [DEBUG] [Thread-186285] [transport.py] [_log()] kex follows: False
2026-02-14T13:34:32.955 [DEBUG] [Thread-186285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:34:32.955 [DEBUG] [Thread-186285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:34:32.955 [DEBUG] [Thread-186285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:34:32.955 [DEBUG] [Thread-186285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:34:32.955 [DEBUG] [Thread-186285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:34:32.955 [DEBUG] [Thread-186285] [transport.py] [_log()] Compression: none
2026-02-14T13:34:32.955 [DEBUG] [Thread-186285] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:34:33.012 [DEBUG] [Thread-186285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:34:33.012 [DEBUG] [Thread-186285] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:34:33.013 [DEBUG] [Thread-186285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:34:33.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:34:33.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:34:33.068 [DEBUG] [Thread-186285] [transport.py] [_log()] userauth is OK
2026-02-14T13:34:33.068 [DEBUG] [Thread-186285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:34:33.068 [DEBUG] [Thread-186285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:34:33.068 [DEBUG] [Thread-186285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:34:33.068 [DEBUG] [Thread-186285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:34:33.088 [INFO] [Thread-186285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:34:33.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-14T13:34:33.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:34:33.898 [DEBUG] [Thread-186285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:34:33.898 [DEBUG] [Thread-186285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:34:33.946 [DEBUG] [Thread-186285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:34:33.946 [DEBUG] [Thread-186285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:34:33.955 [DEBUG] [Thread-186285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:34:33.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:34:33.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:34:33.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:34:33.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:34:33.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:34:33.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:34:33.992 [DEBUG] [Thread-186285] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:34:37.345 [DEBUG] [Thread-186287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:34:52.401 [DEBUG] [Thread-186288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:35:04.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:35:04.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:35:04.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-14T13:35:05.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 34, 29), 14.25, 38.21, 0.0, 35.55, 15.24, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:35:05.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:34:29
2026-02-14T13:35:06.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:35:06.508 [DEBUG] [Thread-186289] [transport.py] [_log()] starting thread (client mode): 0xa2d23550
2026-02-14T13:35:06.508 [DEBUG] [Thread-186289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:35:06.530 [DEBUG] [Thread-186289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:35:06.530 [INFO] [Thread-186289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:35:06.533 [DEBUG] [Thread-186289] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:35:06.534 [DEBUG] [Thread-186289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:35:06.534 [DEBUG] [Thread-186289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:35:06.534 [DEBUG] [Thread-186289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:35:06.534 [DEBUG] [Thread-186289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:35:06.534 [DEBUG] [Thread-186289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:35:06.534 [DEBUG] [Thread-186289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:35:06.534 [DEBUG] [Thread-186289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:35:06.534 [DEBUG] [Thread-186289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:35:06.534 [DEBUG] [Thread-186289] [transport.py] [_log()] client lang: <none>
2026-02-14T13:35:06.534 [DEBUG] [Thread-186289] [transport.py] [_log()] server lang: <none>
2026-02-14T13:35:06.534 [DEBUG] [Thread-186289] [transport.py] [_log()] kex follows: False
2026-02-14T13:35:06.534 [DEBUG] [Thread-186289] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:35:06.535 [DEBUG] [Thread-186289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:35:06.535 [DEBUG] [Thread-186289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:35:06.535 [DEBUG] [Thread-186289] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:35:06.535 [DEBUG] [Thread-186289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:35:06.535 [DEBUG] [Thread-186289] [transport.py] [_log()] Compression: none
2026-02-14T13:35:06.535 [DEBUG] [Thread-186289] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:35:06.554 [DEBUG] [Thread-186289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:35:06.555 [DEBUG] [Thread-186289] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:35:06.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:35:06.556 [DEBUG] [Thread-186289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:35:06.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:35:06.558 [DEBUG] [Thread-186289] [transport.py] [_log()] userauth is OK
2026-02-14T13:35:06.558 [DEBUG] [Thread-186289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:35:06.558 [DEBUG] [Thread-186289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:35:06.559 [DEBUG] [Thread-186289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:35:06.559 [DEBUG] [Thread-186289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:35:06.582 [INFO] [Thread-186289] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:35:06.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:35:07.439 [DEBUG] [Thread-186291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:35:17.427 [DEBUG] [Thread-186289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:35:17.427 [DEBUG] [Thread-186289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:35:17.427 [DEBUG] [Thread-186289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:35:17.468 [DEBUG] [Thread-186289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:35:17.469 [DEBUG] [Thread-186289] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:35:17.472 [DEBUG] [Thread-186289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:35:17.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:35:17.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:35:17.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:35:17.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:35:17.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:35:17.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:35:17.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:35:17.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:35:17.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:35:17.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.482401 -999.00  +15.40  29.11     43   +3.00 1 1 1 1 1   888    0 13.08 29.96 ----- 23.0 29.1 155.6 36.0 21.8 -26.6 20.7 -25.0 21.2 -25.2 22.3 -26.4
2026-02-14T13:35:17.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:35:17.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:35:17.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.482401
2026-02-14T13:35:17.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:35:17.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:35:17.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:35:17.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:35:17.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:35:17.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:34:29', tmtdew=14.25, humidity=38.21, cloud=0.0, wind=35.55, temperature=15.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:34:39.446', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:35:17.574 [DEBUG] [Thread-186289] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:35: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-14T13:35:17.669 [DEBUG] [Thread-186293] [transport.py] [_log()] starting thread (client mode): 0xa2dc0310
2026-02-14T13:35:17.669 [DEBUG] [Thread-186293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:35:17.683 [DEBUG] [Thread-186293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:35:17.683 [INFO] [Thread-186293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:35:17.693 [DEBUG] [Thread-186293] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:35:17.693 [DEBUG] [Thread-186293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:35:17.693 [DEBUG] [Thread-186293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:35:17.693 [DEBUG] [Thread-186293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:35:17.693 [DEBUG] [Thread-186293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:35:17.693 [DEBUG] [Thread-186293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:35:17.693 [DEBUG] [Thread-186293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:35:17.694 [DEBUG] [Thread-186293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:35:17.694 [DEBUG] [Thread-186293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:35:17.694 [DEBUG] [Thread-186293] [transport.py] [_log()] client lang: <none>
2026-02-14T13:35:17.694 [DEBUG] [Thread-186293] [transport.py] [_log()] server lang: <none>
2026-02-14T13:35:17.694 [DEBUG] [Thread-186293] [transport.py] [_log()] kex follows: False
2026-02-14T13:35:17.694 [DEBUG] [Thread-186293] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:35:17.694 [DEBUG] [Thread-186293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:35:17.694 [DEBUG] [Thread-186293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:35:17.694 [DEBUG] [Thread-186293] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:35:17.694 [DEBUG] [Thread-186293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:35:17.694 [DEBUG] [Thread-186293] [transport.py] [_log()] Compression: none
2026-02-14T13:35:17.694 [DEBUG] [Thread-186293] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:35:17.753 [DEBUG] [Thread-186293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:35:17.753 [DEBUG] [Thread-186293] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:35:17.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:35:17.754 [DEBUG] [Thread-186293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:35:17.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:35:17.809 [DEBUG] [Thread-186293] [transport.py] [_log()] userauth is OK
2026-02-14T13:35:17.809 [DEBUG] [Thread-186293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:35:17.809 [DEBUG] [Thread-186293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:35:17.809 [DEBUG] [Thread-186293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:35:17.809 [DEBUG] [Thread-186293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:35:17.828 [INFO] [Thread-186293] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:35:17.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-14T13:35:17.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:35:18.629 [DEBUG] [Thread-186293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:35:18.629 [DEBUG] [Thread-186293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:35:18.677 [DEBUG] [Thread-186293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:35:18.678 [DEBUG] [Thread-186293] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:35:18.687 [DEBUG] [Thread-186293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:35:18.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:35:18.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-14T13:35:18.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-14T13:35:18.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:35:18.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:35:18.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:35:18.722 [DEBUG] [Thread-186293] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:35:22.477 [DEBUG] [Thread-186295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:35:24.226 [DEBUG] [Thread-186296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:35:30.940 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:35:30.942 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:35:37.537 [DEBUG] [Thread-186297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:35:48.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:35:48.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:35:48.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-14T13:35:50.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 35, 39), 15.35, 35.19, 0.0, 36.48, 15.91, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:35:50.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:35:39
2026-02-14T13:35:51.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:35:51.302 [DEBUG] [Thread-186298] [transport.py] [_log()] starting thread (client mode): 0xa2d541f0
2026-02-14T13:35:51.302 [DEBUG] [Thread-186298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:35:51.322 [DEBUG] [Thread-186298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:35:51.323 [INFO] [Thread-186298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:35:51.326 [DEBUG] [Thread-186298] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:35:51.326 [DEBUG] [Thread-186298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:35:51.326 [DEBUG] [Thread-186298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:35:51.326 [DEBUG] [Thread-186298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:35:51.326 [DEBUG] [Thread-186298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:35:51.326 [DEBUG] [Thread-186298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:35:51.326 [DEBUG] [Thread-186298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:35:51.326 [DEBUG] [Thread-186298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:35:51.326 [DEBUG] [Thread-186298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:35:51.326 [DEBUG] [Thread-186298] [transport.py] [_log()] client lang: <none>
2026-02-14T13:35:51.326 [DEBUG] [Thread-186298] [transport.py] [_log()] server lang: <none>
2026-02-14T13:35:51.326 [DEBUG] [Thread-186298] [transport.py] [_log()] kex follows: False
2026-02-14T13:35:51.326 [DEBUG] [Thread-186298] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:35:51.326 [DEBUG] [Thread-186298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:35:51.326 [DEBUG] [Thread-186298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:35:51.326 [DEBUG] [Thread-186298] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:35:51.326 [DEBUG] [Thread-186298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:35:51.326 [DEBUG] [Thread-186298] [transport.py] [_log()] Compression: none
2026-02-14T13:35:51.326 [DEBUG] [Thread-186298] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:35:51.346 [DEBUG] [Thread-186298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:35:51.347 [DEBUG] [Thread-186298] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:35:51.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:35:51.348 [DEBUG] [Thread-186298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:35:51.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:35:51.350 [DEBUG] [Thread-186298] [transport.py] [_log()] userauth is OK
2026-02-14T13:35:51.350 [DEBUG] [Thread-186298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:35:51.350 [DEBUG] [Thread-186298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:35:51.350 [DEBUG] [Thread-186298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:35:51.351 [DEBUG] [Thread-186298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:35:51.375 [INFO] [Thread-186298] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:35:51.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:35:51.951 [DEBUG] [Thread-186298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:35:51.951 [DEBUG] [Thread-186298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:35:51.951 [DEBUG] [Thread-186298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:35:51.992 [DEBUG] [Thread-186298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:35:51.993 [DEBUG] [Thread-186298] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:35:51.997 [DEBUG] [Thread-186298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:35:52.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:35:52.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:35:52.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:35:52.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:35:52.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:35:52.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:35:52.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:35:52.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:35:52.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:35:52.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.482748 -999.00  +15.30  26.49     42   +2.60 1 1 1 1 1   888    0 13.01 29.98 ----- 26.1 26.5 174.2 38.5 21.8 -28.1 20.4 -27.9 21.2 -26.1 22.4 -26.7
2026-02-14T13:35:52.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:35:52.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:35:52.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.482748
2026-02-14T13:35:52.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:35:52.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:35:52.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:35:52.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:35:52.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:35:52.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:35:39', tmtdew=15.35, humidity=35.19, cloud=0.0, wind=36.48, temperature=15.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:35:09.427', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:35:52.023 [DEBUG] [Thread-186298] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:35:52.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-14T13:35:52.119 [DEBUG] [Thread-186301] [transport.py] [_log()] starting thread (client mode): 0xa5740640
2026-02-14T13:35:52.119 [DEBUG] [Thread-186301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:35:52.133 [DEBUG] [Thread-186301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:35:52.133 [INFO] [Thread-186301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:35:52.140 [DEBUG] [Thread-186301] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:35:52.141 [DEBUG] [Thread-186301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:35:52.141 [DEBUG] [Thread-186301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:35:52.141 [DEBUG] [Thread-186301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:35:52.141 [DEBUG] [Thread-186301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:35:52.141 [DEBUG] [Thread-186301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:35:52.141 [DEBUG] [Thread-186301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:35:52.142 [DEBUG] [Thread-186301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:35:52.142 [DEBUG] [Thread-186301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:35:52.142 [DEBUG] [Thread-186301] [transport.py] [_log()] client lang: <none>
2026-02-14T13:35:52.142 [DEBUG] [Thread-186301] [transport.py] [_log()] server lang: <none>
2026-02-14T13:35:52.142 [DEBUG] [Thread-186301] [transport.py] [_log()] kex follows: False
2026-02-14T13:35:52.142 [DEBUG] [Thread-186301] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:35:52.142 [DEBUG] [Thread-186301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:35:52.142 [DEBUG] [Thread-186301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:35:52.143 [DEBUG] [Thread-186301] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:35:52.143 [DEBUG] [Thread-186301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:35:52.143 [DEBUG] [Thread-186301] [transport.py] [_log()] Compression: none
2026-02-14T13:35:52.143 [DEBUG] [Thread-186301] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:35:52.201 [DEBUG] [Thread-186301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:35:52.202 [DEBUG] [Thread-186301] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:35:52.202 [DEBUG] [Thread-186301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:35:52.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:35:52.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:35:52.257 [DEBUG] [Thread-186301] [transport.py] [_log()] userauth is OK
2026-02-14T13:35:52.257 [DEBUG] [Thread-186301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:35:52.258 [DEBUG] [Thread-186301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:35:52.258 [DEBUG] [Thread-186301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:35:52.258 [DEBUG] [Thread-186301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:35:52.277 [INFO] [Thread-186301] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:35:52.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-14T13:35:52.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:35:52.575 [DEBUG] [Thread-186303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:35:53.091 [DEBUG] [Thread-186301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:35:53.091 [DEBUG] [Thread-186301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:35:53.138 [DEBUG] [Thread-186301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:35:53.138 [DEBUG] [Thread-186301] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:35:53.146 [DEBUG] [Thread-186301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:35:53.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:35:53.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:35:53.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-14T13:35:53.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:35:53.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:35:53.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:35:53.178 [DEBUG] [Thread-186301] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:36:07.626 [DEBUG] [Thread-186304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:36:22.666 [DEBUG] [Thread-186305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:36:23.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:36:23.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:36:23.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-14T13:36:24.261 [DEBUG] [Thread-186306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:36:25.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 36, 16), 14.65, 36.77, 0.0, 30.74, 14.94, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:36:25.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:36:16
2026-02-14T13:36:25.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:36:25.590 [DEBUG] [Thread-186307] [transport.py] [_log()] starting thread (client mode): 0xa2deb1c0
2026-02-14T13:36:25.590 [DEBUG] [Thread-186307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:36:25.608 [DEBUG] [Thread-186307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:36:25.608 [INFO] [Thread-186307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:36:25.611 [DEBUG] [Thread-186307] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:36:25.611 [DEBUG] [Thread-186307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:36:25.611 [DEBUG] [Thread-186307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:36:25.611 [DEBUG] [Thread-186307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:36:25.611 [DEBUG] [Thread-186307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:36:25.611 [DEBUG] [Thread-186307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:36:25.612 [DEBUG] [Thread-186307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:36:25.612 [DEBUG] [Thread-186307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:36:25.612 [DEBUG] [Thread-186307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:36:25.612 [DEBUG] [Thread-186307] [transport.py] [_log()] client lang: <none>
2026-02-14T13:36:25.612 [DEBUG] [Thread-186307] [transport.py] [_log()] server lang: <none>
2026-02-14T13:36:25.612 [DEBUG] [Thread-186307] [transport.py] [_log()] kex follows: False
2026-02-14T13:36:25.612 [DEBUG] [Thread-186307] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:36:25.612 [DEBUG] [Thread-186307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:36:25.612 [DEBUG] [Thread-186307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:36:25.612 [DEBUG] [Thread-186307] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:36:25.612 [DEBUG] [Thread-186307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:36:25.612 [DEBUG] [Thread-186307] [transport.py] [_log()] Compression: none
2026-02-14T13:36:25.612 [DEBUG] [Thread-186307] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:36:25.628 [DEBUG] [Thread-186307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:36:25.629 [DEBUG] [Thread-186307] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:36:25.629 [DEBUG] [Thread-186307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:36:25.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:36:25.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:36:25.631 [DEBUG] [Thread-186307] [transport.py] [_log()] userauth is OK
2026-02-14T13:36:25.631 [DEBUG] [Thread-186307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:36:25.631 [DEBUG] [Thread-186307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:36:25.631 [DEBUG] [Thread-186307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:36:25.631 [DEBUG] [Thread-186307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:36:25.655 [INFO] [Thread-186307] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:36:25.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:36:26.317 [DEBUG] [Thread-186307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:36:26.317 [DEBUG] [Thread-186307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:36:26.318 [DEBUG] [Thread-186307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:36:26.358 [DEBUG] [Thread-186307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:36:26.359 [DEBUG] [Thread-186307] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:36:26.361 [DEBUG] [Thread-186307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:36:26.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:36:26.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:36:26.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:36:26.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:36:26.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:36:26.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:36:26.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:36:26.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:36:26.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:36:26.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.483095 -999.00  +15.10  22.17     42   +2.50 1 1 1 1 1   888    0 12.92 29.66 ----- 21.0 22.2 171.0 31.1 21.6 -26.9 20.4 -24.8 21.1 -25.4 22.2 -26.9
2026-02-14T13:36:26.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:36:26.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:36:26.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.483095
2026-02-14T13:36:26.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:36:26.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:36:26.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:36:26.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:36:26.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:36:26.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:36:16', tmtdew=14.65, humidity=36.77, cloud=0.0, wind=30.74, temperature=14.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:35:39.408', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:36:26.388 [DEBUG] [Thread-186307] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:36:26.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-14T13:36:26.484 [DEBUG] [Thread-186310] [transport.py] [_log()] starting thread (client mode): 0xa2dc2170
2026-02-14T13:36:26.484 [DEBUG] [Thread-186310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:36:26.498 [DEBUG] [Thread-186310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:36:26.499 [INFO] [Thread-186310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:36:26.506 [DEBUG] [Thread-186310] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:36:26.507 [DEBUG] [Thread-186310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:36:26.507 [DEBUG] [Thread-186310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:36:26.507 [DEBUG] [Thread-186310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:36:26.507 [DEBUG] [Thread-186310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:36:26.507 [DEBUG] [Thread-186310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:36:26.507 [DEBUG] [Thread-186310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:36:26.507 [DEBUG] [Thread-186310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:36:26.507 [DEBUG] [Thread-186310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:36:26.507 [DEBUG] [Thread-186310] [transport.py] [_log()] client lang: <none>
2026-02-14T13:36:26.507 [DEBUG] [Thread-186310] [transport.py] [_log()] server lang: <none>
2026-02-14T13:36:26.507 [DEBUG] [Thread-186310] [transport.py] [_log()] kex follows: False
2026-02-14T13:36:26.507 [DEBUG] [Thread-186310] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:36:26.507 [DEBUG] [Thread-186310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:36:26.507 [DEBUG] [Thread-186310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:36:26.507 [DEBUG] [Thread-186310] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:36:26.507 [DEBUG] [Thread-186310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:36:26.507 [DEBUG] [Thread-186310] [transport.py] [_log()] Compression: none
2026-02-14T13:36:26.507 [DEBUG] [Thread-186310] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:36:26.565 [DEBUG] [Thread-186310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:36:26.566 [DEBUG] [Thread-186310] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:36:26.566 [DEBUG] [Thread-186310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:36:26.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:36:26.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:36:26.624 [DEBUG] [Thread-186310] [transport.py] [_log()] userauth is OK
2026-02-14T13:36:26.625 [DEBUG] [Thread-186310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:36:26.625 [DEBUG] [Thread-186310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:36:26.625 [DEBUG] [Thread-186310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:36:26.625 [DEBUG] [Thread-186310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:36:26.644 [INFO] [Thread-186310] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:36:26.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-14T13:36:26.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:36:27.473 [DEBUG] [Thread-186310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:36:27.473 [DEBUG] [Thread-186310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:36:27.521 [DEBUG] [Thread-186310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:36:27.522 [DEBUG] [Thread-186310] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:36:27.531 [DEBUG] [Thread-186310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:36:27.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:36:27.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:36:27.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:36:27.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:36:27.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:36:27.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:36:27.566 [DEBUG] [Thread-186310] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:36:31.081 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:36:31.082 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:36:37.702 [DEBUG] [Thread-186312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:36:52.756 [DEBUG] [Thread-186313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:36:57.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:36:57.586 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:36:57.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-14T13:36:59.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 36, 51), 14.53, 37.29, 0.0, 23.29, 14.94, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:36:59.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:36:51
2026-02-14T13:36:59.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:36:59.914 [DEBUG] [Thread-186314] [transport.py] [_log()] starting thread (client mode): 0xa2d3d990
2026-02-14T13:36:59.914 [DEBUG] [Thread-186314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:36:59.934 [DEBUG] [Thread-186314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:36:59.934 [INFO] [Thread-186314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:36:59.938 [DEBUG] [Thread-186314] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:36:59.938 [DEBUG] [Thread-186314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:36:59.938 [DEBUG] [Thread-186314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:36:59.938 [DEBUG] [Thread-186314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:36:59.938 [DEBUG] [Thread-186314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:36:59.938 [DEBUG] [Thread-186314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:36:59.938 [DEBUG] [Thread-186314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:36:59.938 [DEBUG] [Thread-186314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:36:59.938 [DEBUG] [Thread-186314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:36:59.938 [DEBUG] [Thread-186314] [transport.py] [_log()] client lang: <none>
2026-02-14T13:36:59.938 [DEBUG] [Thread-186314] [transport.py] [_log()] server lang: <none>
2026-02-14T13:36:59.938 [DEBUG] [Thread-186314] [transport.py] [_log()] kex follows: False
2026-02-14T13:36:59.938 [DEBUG] [Thread-186314] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:36:59.938 [DEBUG] [Thread-186314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:36:59.938 [DEBUG] [Thread-186314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:36:59.938 [DEBUG] [Thread-186314] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:36:59.938 [DEBUG] [Thread-186314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:36:59.938 [DEBUG] [Thread-186314] [transport.py] [_log()] Compression: none
2026-02-14T13:36:59.938 [DEBUG] [Thread-186314] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:36:59.955 [DEBUG] [Thread-186314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:36:59.955 [DEBUG] [Thread-186314] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:36:59.956 [DEBUG] [Thread-186314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:36:59.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:36:59.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:36:59.958 [DEBUG] [Thread-186314] [transport.py] [_log()] userauth is OK
2026-02-14T13:36:59.959 [DEBUG] [Thread-186314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:36:59.959 [DEBUG] [Thread-186314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:36:59.959 [DEBUG] [Thread-186314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:36:59.959 [DEBUG] [Thread-186314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:36:59.995 [INFO] [Thread-186314] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:36:59.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:37:00.668 [DEBUG] [Thread-186314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:37:00.669 [DEBUG] [Thread-186314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:37:00.669 [DEBUG] [Thread-186314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:37:00.709 [DEBUG] [Thread-186314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:37:00.710 [DEBUG] [Thread-186314] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:37:00.714 [DEBUG] [Thread-186314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:37:00.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:37:00.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:37:00.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:37:00.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:37:00.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:37:00.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:37:00.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:37:00.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:37:00.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:37:00.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.483443 -999.00  +15.10  21.94     40   +1.90 1 1 1 1 1   888    0 12.88 29.29 ----- 21.7 21.9 146.8 26.6 21.8 -25.2 20.8 -25.0 21.4 -24.8 22.4 -25.3
2026-02-14T13:37:00.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:37:00.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:37:00.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.483443
2026-02-14T13:37:00.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:37:00.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:37:00.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:37:00.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:37:00.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:37:00.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:36:51', tmtdew=14.53, humidity=37.29, cloud=0.0, wind=23.29, temperature=14.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:36:09.475', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:37:00.742 [DEBUG] [Thread-186314] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:37:00.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-14T13:37:00.837 [DEBUG] [Thread-186317] [transport.py] [_log()] starting thread (client mode): 0xa2dea530
2026-02-14T13:37:00.837 [DEBUG] [Thread-186317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:37:00.852 [DEBUG] [Thread-186317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:37:00.852 [INFO] [Thread-186317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:37:00.860 [DEBUG] [Thread-186317] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:37:00.860 [DEBUG] [Thread-186317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:37:00.860 [DEBUG] [Thread-186317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:37:00.860 [DEBUG] [Thread-186317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:37:00.860 [DEBUG] [Thread-186317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:37:00.861 [DEBUG] [Thread-186317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:37:00.861 [DEBUG] [Thread-186317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:37:00.861 [DEBUG] [Thread-186317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:37:00.861 [DEBUG] [Thread-186317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:37:00.861 [DEBUG] [Thread-186317] [transport.py] [_log()] client lang: <none>
2026-02-14T13:37:00.861 [DEBUG] [Thread-186317] [transport.py] [_log()] server lang: <none>
2026-02-14T13:37:00.861 [DEBUG] [Thread-186317] [transport.py] [_log()] kex follows: False
2026-02-14T13:37:00.861 [DEBUG] [Thread-186317] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:37:00.861 [DEBUG] [Thread-186317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:37:00.861 [DEBUG] [Thread-186317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:37:00.861 [DEBUG] [Thread-186317] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:37:00.861 [DEBUG] [Thread-186317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:37:00.861 [DEBUG] [Thread-186317] [transport.py] [_log()] Compression: none
2026-02-14T13:37:00.861 [DEBUG] [Thread-186317] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:37:00.921 [DEBUG] [Thread-186317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:37:00.921 [DEBUG] [Thread-186317] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:37:00.922 [DEBUG] [Thread-186317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:37:00.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:37:00.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:37:00.976 [DEBUG] [Thread-186317] [transport.py] [_log()] userauth is OK
2026-02-14T13:37:00.977 [DEBUG] [Thread-186317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:37:00.977 [DEBUG] [Thread-186317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:37:00.977 [DEBUG] [Thread-186317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:37:00.977 [DEBUG] [Thread-186317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:37:00.996 [INFO] [Thread-186317] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:37:00.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-14T13:37:00.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:37:01.837 [DEBUG] [Thread-186317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:37:01.837 [DEBUG] [Thread-186317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:37:01.885 [DEBUG] [Thread-186317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:37:01.886 [DEBUG] [Thread-186317] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:37:01.895 [DEBUG] [Thread-186317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:37:01.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:37:01.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:37:01.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:37:01.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:37:01.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:37:01.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:37:01.927 [DEBUG] [Thread-186317] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:37:07.795 [DEBUG] [Thread-186319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:37:22.848 [DEBUG] [Thread-186320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:37:24.296 [DEBUG] [Thread-186321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:37:31.221 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:37:31.223 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:37:31.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:37:31.955 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:37:31.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-14T13:37:33.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 36, 51), 14.53, 37.29, 0.0, 23.29, 14.94, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:37:33.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:36:51
2026-02-14T13:37:34.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:37:34.351 [DEBUG] [Thread-186322] [transport.py] [_log()] starting thread (client mode): 0xa2dc0910
2026-02-14T13:37:34.351 [DEBUG] [Thread-186322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:37:34.374 [DEBUG] [Thread-186322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:37:34.374 [INFO] [Thread-186322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:37:34.378 [DEBUG] [Thread-186322] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:37:34.378 [DEBUG] [Thread-186322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:37:34.378 [DEBUG] [Thread-186322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:37:34.379 [DEBUG] [Thread-186322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:37:34.379 [DEBUG] [Thread-186322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:37:34.379 [DEBUG] [Thread-186322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:37:34.379 [DEBUG] [Thread-186322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:37:34.379 [DEBUG] [Thread-186322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:37:34.379 [DEBUG] [Thread-186322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:37:34.379 [DEBUG] [Thread-186322] [transport.py] [_log()] client lang: <none>
2026-02-14T13:37:34.379 [DEBUG] [Thread-186322] [transport.py] [_log()] server lang: <none>
2026-02-14T13:37:34.379 [DEBUG] [Thread-186322] [transport.py] [_log()] kex follows: False
2026-02-14T13:37:34.379 [DEBUG] [Thread-186322] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:37:34.379 [DEBUG] [Thread-186322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:37:34.379 [DEBUG] [Thread-186322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:37:34.379 [DEBUG] [Thread-186322] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:37:34.379 [DEBUG] [Thread-186322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:37:34.379 [DEBUG] [Thread-186322] [transport.py] [_log()] Compression: none
2026-02-14T13:37:34.379 [DEBUG] [Thread-186322] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:37:34.399 [DEBUG] [Thread-186322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:37:34.400 [DEBUG] [Thread-186322] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:37:34.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:37:34.401 [DEBUG] [Thread-186322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:37:34.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:37:34.403 [DEBUG] [Thread-186322] [transport.py] [_log()] userauth is OK
2026-02-14T13:37:34.403 [DEBUG] [Thread-186322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:37:34.403 [DEBUG] [Thread-186322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:37:34.403 [DEBUG] [Thread-186322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:37:34.404 [DEBUG] [Thread-186322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:37:34.428 [INFO] [Thread-186322] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:37:34.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:37:35.076 [DEBUG] [Thread-186322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:37:35.076 [DEBUG] [Thread-186322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:37:35.076 [DEBUG] [Thread-186322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:37:35.117 [DEBUG] [Thread-186322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:37:35.117 [DEBUG] [Thread-186322] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:37:35.120 [DEBUG] [Thread-186322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:37:35.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:37:35.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:37:35.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:37:35.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:37:35.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:37:35.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:37:35.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:37:35.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:37:35.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:37:35.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.483790 -999.00  +15.20  19.52     41   +2.30 1 1 1 1 1   888    0 13.45 35.86 ----- 17.9 19.5 141.6 24.1 21.8 -26.3 20.9 -24.2 21.2 -24.4 22.4 -25.2
2026-02-14T13:37:35.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:37:35.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:37:35.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.483790
2026-02-14T13:37:35.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:37:35.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:37:35.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:37:35.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:37:35.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:37:35.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:36:51', tmtdew=14.53, humidity=37.29, cloud=0.0, wind=23.29, temperature=14.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:36:39.456', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:37:35.146 [DEBUG] [Thread-186322] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:37:35.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-14T13:37:35.244 [DEBUG] [Thread-186325] [transport.py] [_log()] starting thread (client mode): 0xa2d3c8b0
2026-02-14T13:37:35.244 [DEBUG] [Thread-186325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:37:35.261 [DEBUG] [Thread-186325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:37:35.261 [INFO] [Thread-186325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:37:35.271 [DEBUG] [Thread-186325] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:37:35.272 [DEBUG] [Thread-186325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:37:35.272 [DEBUG] [Thread-186325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:37:35.272 [DEBUG] [Thread-186325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:37:35.272 [DEBUG] [Thread-186325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:37:35.272 [DEBUG] [Thread-186325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:37:35.272 [DEBUG] [Thread-186325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:37:35.272 [DEBUG] [Thread-186325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:37:35.272 [DEBUG] [Thread-186325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:37:35.272 [DEBUG] [Thread-186325] [transport.py] [_log()] client lang: <none>
2026-02-14T13:37:35.272 [DEBUG] [Thread-186325] [transport.py] [_log()] server lang: <none>
2026-02-14T13:37:35.272 [DEBUG] [Thread-186325] [transport.py] [_log()] kex follows: False
2026-02-14T13:37:35.272 [DEBUG] [Thread-186325] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:37:35.272 [DEBUG] [Thread-186325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:37:35.273 [DEBUG] [Thread-186325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:37:35.273 [DEBUG] [Thread-186325] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:37:35.273 [DEBUG] [Thread-186325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:37:35.273 [DEBUG] [Thread-186325] [transport.py] [_log()] Compression: none
2026-02-14T13:37:35.273 [DEBUG] [Thread-186325] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:37:35.334 [DEBUG] [Thread-186325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:37:35.334 [DEBUG] [Thread-186325] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:37:35.335 [DEBUG] [Thread-186325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:37:35.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:37:35.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:37:35.393 [DEBUG] [Thread-186325] [transport.py] [_log()] userauth is OK
2026-02-14T13:37:35.393 [DEBUG] [Thread-186325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:37:35.393 [DEBUG] [Thread-186325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:37:35.393 [DEBUG] [Thread-186325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:37:35.393 [DEBUG] [Thread-186325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:37:35.407 [INFO] [Thread-186325] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:37:35.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-14T13:37:35.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:37:36.191 [DEBUG] [Thread-186325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:37:36.192 [DEBUG] [Thread-186325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:37:36.240 [DEBUG] [Thread-186325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:37:36.240 [DEBUG] [Thread-186325] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:37:36.249 [DEBUG] [Thread-186325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:37:36.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:37:36.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-14T13:37:36.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-14T13:37:36.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:37:36.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:37:36.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:37:36.285 [DEBUG] [Thread-186325] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:37:37.888 [DEBUG] [Thread-186327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:37:52.942 [DEBUG] [Thread-186328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:38:06.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:38:06.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:38:06.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-14T13:38:07.980 [DEBUG] [Thread-186329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:38:08.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 37, 26), 14.43, 37.66, 0.0, 25.09, 15.22, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:38:08.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:37:26
2026-02-14T13:38:08.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:38:08.986 [DEBUG] [Thread-186330] [transport.py] [_log()] starting thread (client mode): 0xa2d3e9e0
2026-02-14T13:38:08.987 [DEBUG] [Thread-186330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:38:09.007 [DEBUG] [Thread-186330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:38:09.007 [INFO] [Thread-186330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:38:09.009 [DEBUG] [Thread-186330] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:38:09.009 [DEBUG] [Thread-186330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:38:09.009 [DEBUG] [Thread-186330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:38:09.009 [DEBUG] [Thread-186330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:38:09.009 [DEBUG] [Thread-186330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:38:09.010 [DEBUG] [Thread-186330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:38:09.010 [DEBUG] [Thread-186330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:38:09.010 [DEBUG] [Thread-186330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:38:09.010 [DEBUG] [Thread-186330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:38:09.010 [DEBUG] [Thread-186330] [transport.py] [_log()] client lang: <none>
2026-02-14T13:38:09.010 [DEBUG] [Thread-186330] [transport.py] [_log()] server lang: <none>
2026-02-14T13:38:09.010 [DEBUG] [Thread-186330] [transport.py] [_log()] kex follows: False
2026-02-14T13:38:09.010 [DEBUG] [Thread-186330] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:38:09.010 [DEBUG] [Thread-186330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:38:09.010 [DEBUG] [Thread-186330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:38:09.010 [DEBUG] [Thread-186330] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:38:09.010 [DEBUG] [Thread-186330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:38:09.010 [DEBUG] [Thread-186330] [transport.py] [_log()] Compression: none
2026-02-14T13:38:09.010 [DEBUG] [Thread-186330] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:38:09.021 [DEBUG] [Thread-186330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:38:09.021 [DEBUG] [Thread-186330] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:38:09.022 [DEBUG] [Thread-186330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:38:09.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:38:09.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:38:09.024 [DEBUG] [Thread-186330] [transport.py] [_log()] userauth is OK
2026-02-14T13:38:09.024 [DEBUG] [Thread-186330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:38:09.024 [DEBUG] [Thread-186330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:38:09.024 [DEBUG] [Thread-186330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:38:09.024 [DEBUG] [Thread-186330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:38:09.053 [INFO] [Thread-186330] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:38:09.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:38:09.657 [DEBUG] [Thread-186330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:38:09.657 [DEBUG] [Thread-186330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:38:09.658 [DEBUG] [Thread-186330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:38:09.698 [DEBUG] [Thread-186330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:38:09.699 [DEBUG] [Thread-186330] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:38:09.701 [DEBUG] [Thread-186330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:38:09.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:38:09.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:38:09.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:38:09.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:38:09.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:38:09.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:38:09.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:38:09.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:38:09.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:38:09.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.484484 -999.00  +15.60  17.86     43   +3.30 1 1 1 1 1   888    0 13.35 32.74 ----- 18.2 17.9 139.6 22.9 22.0 -25.0 21.0 -24.5 21.4 -23.1 22.6 -24.7
2026-02-14T13:38:09.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:38:09.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:38:09.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.484484
2026-02-14T13:38:09.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:38:09.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:38:09.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:38:09.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:38:09.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:38:09.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:37:26', tmtdew=14.43, humidity=37.66, cloud=0.0, wind=25.09, temperature=15.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:37:39.418', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:38:09.721 [DEBUG] [Thread-186330] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:38:09.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-14T13:38:09.817 [DEBUG] [Thread-186333] [transport.py] [_log()] starting thread (client mode): 0xa2d101f0
2026-02-14T13:38:09.817 [DEBUG] [Thread-186333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:38:09.831 [DEBUG] [Thread-186333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:38:09.831 [INFO] [Thread-186333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:38:09.839 [DEBUG] [Thread-186333] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:38:09.839 [DEBUG] [Thread-186333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:38:09.839 [DEBUG] [Thread-186333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:38:09.839 [DEBUG] [Thread-186333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:38:09.840 [DEBUG] [Thread-186333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:38:09.840 [DEBUG] [Thread-186333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:38:09.840 [DEBUG] [Thread-186333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:38:09.840 [DEBUG] [Thread-186333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:38:09.840 [DEBUG] [Thread-186333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:38:09.840 [DEBUG] [Thread-186333] [transport.py] [_log()] client lang: <none>
2026-02-14T13:38:09.840 [DEBUG] [Thread-186333] [transport.py] [_log()] server lang: <none>
2026-02-14T13:38:09.840 [DEBUG] [Thread-186333] [transport.py] [_log()] kex follows: False
2026-02-14T13:38:09.840 [DEBUG] [Thread-186333] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:38:09.840 [DEBUG] [Thread-186333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:38:09.840 [DEBUG] [Thread-186333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:38:09.840 [DEBUG] [Thread-186333] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:38:09.840 [DEBUG] [Thread-186333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:38:09.840 [DEBUG] [Thread-186333] [transport.py] [_log()] Compression: none
2026-02-14T13:38:09.840 [DEBUG] [Thread-186333] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:38:09.897 [DEBUG] [Thread-186333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:38:09.897 [DEBUG] [Thread-186333] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:38:09.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:38:09.899 [DEBUG] [Thread-186333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:38:09.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:38:09.953 [DEBUG] [Thread-186333] [transport.py] [_log()] userauth is OK
2026-02-14T13:38:09.953 [DEBUG] [Thread-186333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:38:09.953 [DEBUG] [Thread-186333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:38:09.953 [DEBUG] [Thread-186333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:38:09.953 [DEBUG] [Thread-186333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:38:09.978 [INFO] [Thread-186333] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:38:09.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-14T13:38:09.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:38:10.781 [DEBUG] [Thread-186333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:38:10.781 [DEBUG] [Thread-186333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:38:10.829 [DEBUG] [Thread-186333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:38:10.830 [DEBUG] [Thread-186333] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:38:10.839 [DEBUG] [Thread-186333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:38:10.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:38:10.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-14T13:38:10.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-14T13:38:10.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:38:10.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:38:10.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:38:10.876 [DEBUG] [Thread-186333] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:38:23.014 [DEBUG] [Thread-186335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:38:24.344 [DEBUG] [Thread-186336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:38:31.370 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:38:31.371 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:38:38.063 [DEBUG] [Thread-186337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:38:40.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:38:40.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:38:40.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:38:42.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 38, 1), 14.48, 37.61, 0.0, 24.93, 15.52, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:38:42.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:38:01
2026-02-14T13:38:43.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:38:43.430 [DEBUG] [Thread-186338] [transport.py] [_log()] starting thread (client mode): 0xa2dea290
2026-02-14T13:38:43.430 [DEBUG] [Thread-186338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:38:43.444 [DEBUG] [Thread-186338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:38:43.444 [INFO] [Thread-186338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:38:43.446 [DEBUG] [Thread-186338] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:38:43.446 [DEBUG] [Thread-186338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:38:43.446 [DEBUG] [Thread-186338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:38:43.446 [DEBUG] [Thread-186338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:38:43.446 [DEBUG] [Thread-186338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:38:43.446 [DEBUG] [Thread-186338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:38:43.446 [DEBUG] [Thread-186338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:38:43.446 [DEBUG] [Thread-186338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:38:43.446 [DEBUG] [Thread-186338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:38:43.446 [DEBUG] [Thread-186338] [transport.py] [_log()] client lang: <none>
2026-02-14T13:38:43.446 [DEBUG] [Thread-186338] [transport.py] [_log()] server lang: <none>
2026-02-14T13:38:43.446 [DEBUG] [Thread-186338] [transport.py] [_log()] kex follows: False
2026-02-14T13:38:43.446 [DEBUG] [Thread-186338] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:38:43.446 [DEBUG] [Thread-186338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:38:43.446 [DEBUG] [Thread-186338] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:38:43.446 [DEBUG] [Thread-186338] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:38:43.446 [DEBUG] [Thread-186338] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:38:43.446 [DEBUG] [Thread-186338] [transport.py] [_log()] Compression: none
2026-02-14T13:38:43.446 [DEBUG] [Thread-186338] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:38:43.455 [DEBUG] [Thread-186338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:38:43.456 [DEBUG] [Thread-186338] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:38:43.456 [DEBUG] [Thread-186338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:38:43.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:38:43.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:38:43.457 [DEBUG] [Thread-186338] [transport.py] [_log()] userauth is OK
2026-02-14T13:38:43.457 [DEBUG] [Thread-186338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:38:43.457 [DEBUG] [Thread-186338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:38:43.457 [DEBUG] [Thread-186338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:38:43.457 [DEBUG] [Thread-186338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:38:43.468 [INFO] [Thread-186338] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:38:43.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:38:44.120 [DEBUG] [Thread-186338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:38:44.121 [DEBUG] [Thread-186338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:38:44.121 [DEBUG] [Thread-186338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:38:44.161 [DEBUG] [Thread-186338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:38:44.162 [DEBUG] [Thread-186338] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:38:44.165 [DEBUG] [Thread-186338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:38:44.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:38:44.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:38:44.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:38:44.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:38:44.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:38:44.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:38:44.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:38:44.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:38:44.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:38:44.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.484831 -999.00  +15.30  28.95     44   +3.30 1 1 1 1 1   888    0 13.40 30.83 ----- 24.7 28.9 144.8 36.8 22.1 -26.5 21.0 -25.0 21.5 -24.8 22.6 -27.6
2026-02-14T13:38:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:38:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:38:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.484831
2026-02-14T13:38:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:38:44.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:38:44.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:38:44.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:38:44.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:38:44.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:38:01', tmtdew=14.48, humidity=37.61, cloud=0.0, wind=24.93, temperature=15.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:38:09.398', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:38:44.193 [DEBUG] [Thread-186338] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:38:44.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T13:38:44.289 [DEBUG] [Thread-186341] [transport.py] [_log()] starting thread (client mode): 0xa2debd30
2026-02-14T13:38:44.289 [DEBUG] [Thread-186341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:38:44.308 [DEBUG] [Thread-186341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:38:44.308 [INFO] [Thread-186341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:38:44.316 [DEBUG] [Thread-186341] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:38:44.316 [DEBUG] [Thread-186341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:38:44.316 [DEBUG] [Thread-186341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:38:44.316 [DEBUG] [Thread-186341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:38:44.325 [DEBUG] [Thread-186341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:38:44.325 [DEBUG] [Thread-186341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:38:44.325 [DEBUG] [Thread-186341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:38:44.325 [DEBUG] [Thread-186341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:38:44.325 [DEBUG] [Thread-186341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:38:44.325 [DEBUG] [Thread-186341] [transport.py] [_log()] client lang: <none>
2026-02-14T13:38:44.326 [DEBUG] [Thread-186341] [transport.py] [_log()] server lang: <none>
2026-02-14T13:38:44.326 [DEBUG] [Thread-186341] [transport.py] [_log()] kex follows: False
2026-02-14T13:38:44.326 [DEBUG] [Thread-186341] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:38:44.326 [DEBUG] [Thread-186341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:38:44.326 [DEBUG] [Thread-186341] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:38:44.326 [DEBUG] [Thread-186341] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:38:44.326 [DEBUG] [Thread-186341] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:38:44.326 [DEBUG] [Thread-186341] [transport.py] [_log()] Compression: none
2026-02-14T13:38:44.326 [DEBUG] [Thread-186341] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:38:44.373 [DEBUG] [Thread-186341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:38:44.373 [DEBUG] [Thread-186341] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:38:44.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:38:44.374 [DEBUG] [Thread-186341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:38:44.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:38:44.429 [DEBUG] [Thread-186341] [transport.py] [_log()] userauth is OK
2026-02-14T13:38:44.429 [DEBUG] [Thread-186341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:38:44.429 [DEBUG] [Thread-186341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:38:44.429 [DEBUG] [Thread-186341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:38:44.429 [DEBUG] [Thread-186341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:38:44.448 [INFO] [Thread-186341] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:38:44.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-14T13:38:44.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:38:45.258 [DEBUG] [Thread-186341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:38:45.258 [DEBUG] [Thread-186341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:38:45.306 [DEBUG] [Thread-186341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:38:45.307 [DEBUG] [Thread-186341] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:38:45.316 [DEBUG] [Thread-186341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:38:45.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:38:45.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:38:45.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-14T13:38:45.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:38:45.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:38:45.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:38:45.352 [DEBUG] [Thread-186341] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:38:53.101 [DEBUG] [Thread-186343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:39:08.155 [DEBUG] [Thread-186344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:39:15.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:39:15.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:39:15.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-14T13:39:17.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 38, 37), 15.75, 34.73, 0.0, 32.21, 17.7, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:39:17.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:38:37
2026-02-14T13:39:17.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:39:17.962 [DEBUG] [Thread-186345] [transport.py] [_log()] starting thread (client mode): 0xa2dc13c0
2026-02-14T13:39:17.962 [DEBUG] [Thread-186345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:39:17.981 [DEBUG] [Thread-186345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:39:17.981 [INFO] [Thread-186345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:39:17.983 [DEBUG] [Thread-186345] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:39:17.983 [DEBUG] [Thread-186345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:39:17.983 [DEBUG] [Thread-186345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:39:17.983 [DEBUG] [Thread-186345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:39:17.983 [DEBUG] [Thread-186345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:39:17.983 [DEBUG] [Thread-186345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:39:17.983 [DEBUG] [Thread-186345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:39:17.983 [DEBUG] [Thread-186345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:39:17.983 [DEBUG] [Thread-186345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:39:17.983 [DEBUG] [Thread-186345] [transport.py] [_log()] client lang: <none>
2026-02-14T13:39:17.983 [DEBUG] [Thread-186345] [transport.py] [_log()] server lang: <none>
2026-02-14T13:39:17.983 [DEBUG] [Thread-186345] [transport.py] [_log()] kex follows: False
2026-02-14T13:39:17.983 [DEBUG] [Thread-186345] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:39:17.983 [DEBUG] [Thread-186345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:39:17.984 [DEBUG] [Thread-186345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:39:17.984 [DEBUG] [Thread-186345] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:39:17.984 [DEBUG] [Thread-186345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:39:17.984 [DEBUG] [Thread-186345] [transport.py] [_log()] Compression: none
2026-02-14T13:39:17.984 [DEBUG] [Thread-186345] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:39:17.991 [DEBUG] [Thread-186345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:39:17.992 [DEBUG] [Thread-186345] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:39:17.992 [DEBUG] [Thread-186345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:39:17.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:39:17.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:39:17.994 [DEBUG] [Thread-186345] [transport.py] [_log()] userauth is OK
2026-02-14T13:39:17.994 [DEBUG] [Thread-186345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:39:17.994 [DEBUG] [Thread-186345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:39:17.994 [DEBUG] [Thread-186345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:39:17.994 [DEBUG] [Thread-186345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:39:18.011 [INFO] [Thread-186345] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:39:18.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:39:18.665 [DEBUG] [Thread-186345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:39:18.665 [DEBUG] [Thread-186345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:39:18.666 [DEBUG] [Thread-186345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:39:18.706 [DEBUG] [Thread-186345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:39:18.707 [DEBUG] [Thread-186345] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:39:18.710 [DEBUG] [Thread-186345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:39:18.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:39:18.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:39:18.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:39:18.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:39:18.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:39:18.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:39:18.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:39:18.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:39:18.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:39:18.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.485526 -999.00  +15.80  18.60     44   +3.80 1 1 1 1 1   888    0 13.02 24.39 ----- 33.2 18.6 134.3 37.4 22.0 -25.8 21.2 -24.0 21.6 -24.5 22.7 -26.6
2026-02-14T13:39:18.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:39:18.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:39:18.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.485526
2026-02-14T13:39:18.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:39:18.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:39:18.740 [DEBUG] [Thread-186345] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:39:18.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:39:18.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:39:18.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:39:18.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:38:37', tmtdew=15.75, humidity=34.73, cloud=0.0, wind=32.21, temperature=17.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:39:09.446', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:39:18.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-14T13:39:18.835 [DEBUG] [Thread-186348] [transport.py] [_log()] starting thread (client mode): 0xa57426e0
2026-02-14T13:39:18.835 [DEBUG] [Thread-186348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:39:18.850 [DEBUG] [Thread-186348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:39:18.850 [INFO] [Thread-186348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:39:18.857 [DEBUG] [Thread-186348] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:39:18.858 [DEBUG] [Thread-186348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:39:18.858 [DEBUG] [Thread-186348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:39:18.858 [DEBUG] [Thread-186348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:39:18.858 [DEBUG] [Thread-186348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:39:18.858 [DEBUG] [Thread-186348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:39:18.858 [DEBUG] [Thread-186348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:39:18.858 [DEBUG] [Thread-186348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:39:18.858 [DEBUG] [Thread-186348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:39:18.858 [DEBUG] [Thread-186348] [transport.py] [_log()] client lang: <none>
2026-02-14T13:39:18.858 [DEBUG] [Thread-186348] [transport.py] [_log()] server lang: <none>
2026-02-14T13:39:18.858 [DEBUG] [Thread-186348] [transport.py] [_log()] kex follows: False
2026-02-14T13:39:18.858 [DEBUG] [Thread-186348] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:39:18.858 [DEBUG] [Thread-186348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:39:18.858 [DEBUG] [Thread-186348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:39:18.858 [DEBUG] [Thread-186348] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:39:18.858 [DEBUG] [Thread-186348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:39:18.859 [DEBUG] [Thread-186348] [transport.py] [_log()] Compression: none
2026-02-14T13:39:18.859 [DEBUG] [Thread-186348] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:39:18.916 [DEBUG] [Thread-186348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:39:18.917 [DEBUG] [Thread-186348] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:39:18.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:39:18.918 [DEBUG] [Thread-186348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:39:18.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:39:18.972 [DEBUG] [Thread-186348] [transport.py] [_log()] userauth is OK
2026-02-14T13:39:18.972 [DEBUG] [Thread-186348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:39:18.972 [DEBUG] [Thread-186348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:39:18.972 [DEBUG] [Thread-186348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:39:18.972 [DEBUG] [Thread-186348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:39:18.990 [INFO] [Thread-186348] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:39:18.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-14T13:39:18.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:39:19.803 [DEBUG] [Thread-186348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:39:19.804 [DEBUG] [Thread-186348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:39:19.851 [DEBUG] [Thread-186348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:39:19.852 [DEBUG] [Thread-186348] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:39:19.861 [DEBUG] [Thread-186348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:39:19.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:39:19.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-14T13:39:19.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-14T13:39:19.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:39:19.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:39:19.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:39:19.899 [DEBUG] [Thread-186348] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:39:23.190 [DEBUG] [Thread-186350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:39:24.377 [DEBUG] [Thread-186351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:39:31.512 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:39:31.513 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:39:38.241 [DEBUG] [Thread-186352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:39:49.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:39:49.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:39:49.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:39:51.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 39, 13), 14.44, 37.86, 0.0, 32.57, 16.07, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:39:51.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:39:13
2026-02-14T13:39:52.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:39:52.312 [DEBUG] [Thread-186353] [transport.py] [_log()] starting thread (client mode): 0xa2dc0dc0
2026-02-14T13:39:52.313 [DEBUG] [Thread-186353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:39:52.332 [DEBUG] [Thread-186353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:39:52.332 [INFO] [Thread-186353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:39:52.335 [DEBUG] [Thread-186353] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:39:52.336 [DEBUG] [Thread-186353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:39:52.336 [DEBUG] [Thread-186353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:39:52.336 [DEBUG] [Thread-186353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:39:52.336 [DEBUG] [Thread-186353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:39:52.336 [DEBUG] [Thread-186353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:39:52.336 [DEBUG] [Thread-186353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:39:52.336 [DEBUG] [Thread-186353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:39:52.336 [DEBUG] [Thread-186353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:39:52.336 [DEBUG] [Thread-186353] [transport.py] [_log()] client lang: <none>
2026-02-14T13:39:52.336 [DEBUG] [Thread-186353] [transport.py] [_log()] server lang: <none>
2026-02-14T13:39:52.336 [DEBUG] [Thread-186353] [transport.py] [_log()] kex follows: False
2026-02-14T13:39:52.336 [DEBUG] [Thread-186353] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:39:52.336 [DEBUG] [Thread-186353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:39:52.336 [DEBUG] [Thread-186353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:39:52.336 [DEBUG] [Thread-186353] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:39:52.336 [DEBUG] [Thread-186353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:39:52.336 [DEBUG] [Thread-186353] [transport.py] [_log()] Compression: none
2026-02-14T13:39:52.336 [DEBUG] [Thread-186353] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:39:52.352 [DEBUG] [Thread-186353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:39:52.353 [DEBUG] [Thread-186353] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:39:52.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:39:52.353 [DEBUG] [Thread-186353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:39:52.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:39:52.355 [DEBUG] [Thread-186353] [transport.py] [_log()] userauth is OK
2026-02-14T13:39:52.355 [DEBUG] [Thread-186353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:39:52.355 [DEBUG] [Thread-186353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:39:52.355 [DEBUG] [Thread-186353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:39:52.355 [DEBUG] [Thread-186353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:39:52.368 [INFO] [Thread-186353] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:39:52.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:39:52.969 [DEBUG] [Thread-186353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:39:52.970 [DEBUG] [Thread-186353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:39:52.970 [DEBUG] [Thread-186353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:39:53.010 [DEBUG] [Thread-186353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:39:53.010 [DEBUG] [Thread-186353] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:39:53.013 [DEBUG] [Thread-186353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:39:53.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:39:53.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:39:53.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:39:53.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:39:53.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:39:53.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:39:53.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:39:53.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:39:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:39:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.485873 -999.00  +16.10  22.17     43   +3.80 1 1 1 1 1   888    0 12.89 23.27 ----- 21.3 22.2 164.3 36.2 22.1 -25.2 21.1 -28.9 21.7 -23.5 22.8 -26.7
2026-02-14T13:39:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:39:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:39:53.034 [DEBUG] [Thread-186353] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:39:53.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.485873
2026-02-14T13:39:53.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:39:53.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:39:53.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:39:53.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:39:53.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:39:53.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:39:13', tmtdew=14.44, humidity=37.86, cloud=0.0, wind=32.57, temperature=16.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:39:39.427', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:39:53.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T13:39:53.137 [DEBUG] [Thread-186356] [transport.py] [_log()] starting thread (client mode): 0xa2d22da0
2026-02-14T13:39:53.138 [DEBUG] [Thread-186356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:39:53.152 [DEBUG] [Thread-186356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:39:53.152 [INFO] [Thread-186356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:39:53.159 [DEBUG] [Thread-186356] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:39:53.159 [DEBUG] [Thread-186356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:39:53.159 [DEBUG] [Thread-186356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:39:53.160 [DEBUG] [Thread-186356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:39:53.160 [DEBUG] [Thread-186356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:39:53.160 [DEBUG] [Thread-186356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:39:53.160 [DEBUG] [Thread-186356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:39:53.160 [DEBUG] [Thread-186356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:39:53.160 [DEBUG] [Thread-186356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:39:53.160 [DEBUG] [Thread-186356] [transport.py] [_log()] client lang: <none>
2026-02-14T13:39:53.160 [DEBUG] [Thread-186356] [transport.py] [_log()] server lang: <none>
2026-02-14T13:39:53.160 [DEBUG] [Thread-186356] [transport.py] [_log()] kex follows: False
2026-02-14T13:39:53.160 [DEBUG] [Thread-186356] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:39:53.160 [DEBUG] [Thread-186356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:39:53.160 [DEBUG] [Thread-186356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:39:53.160 [DEBUG] [Thread-186356] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:39:53.160 [DEBUG] [Thread-186356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:39:53.160 [DEBUG] [Thread-186356] [transport.py] [_log()] Compression: none
2026-02-14T13:39:53.160 [DEBUG] [Thread-186356] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:39:53.215 [DEBUG] [Thread-186356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:39:53.216 [DEBUG] [Thread-186356] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:39:53.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:39:53.217 [DEBUG] [Thread-186356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:39:53.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:39:53.272 [DEBUG] [Thread-186356] [transport.py] [_log()] userauth is OK
2026-02-14T13:39:53.272 [DEBUG] [Thread-186356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:39:53.272 [DEBUG] [Thread-186356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:39:53.272 [DEBUG] [Thread-186356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:39:53.273 [DEBUG] [Thread-186356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:39:53.276 [DEBUG] [Thread-186358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:39:53.294 [INFO] [Thread-186356] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:39:53.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-14T13:39:53.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:39:54.108 [DEBUG] [Thread-186356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:39:54.108 [DEBUG] [Thread-186356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:39:54.157 [DEBUG] [Thread-186356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:39:54.157 [DEBUG] [Thread-186356] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:39:54.166 [DEBUG] [Thread-186356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:39:54.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:39: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')
2026-02-14T13:39:54.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-14T13:39:54.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:39:54.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:39:54.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:39:54.199 [DEBUG] [Thread-186356] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:40:08.328 [DEBUG] [Thread-186359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:40:23.365 [DEBUG] [Thread-186360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:40:24.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:40:24.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:40:24.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:40:24.410 [DEBUG] [Thread-186361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:40:26.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 39, 48), 13.94, 38.81, 0.0, 30.56, 15.82, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:40:26.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:39:48
2026-02-14T13:40:26.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:40:26.782 [DEBUG] [Thread-186362] [transport.py] [_log()] starting thread (client mode): 0xa5759c00
2026-02-14T13:40:26.782 [DEBUG] [Thread-186362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:40:26.803 [DEBUG] [Thread-186362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:40:26.803 [INFO] [Thread-186362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:40:26.805 [DEBUG] [Thread-186362] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:40:26.806 [DEBUG] [Thread-186362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:40:26.806 [DEBUG] [Thread-186362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:40:26.806 [DEBUG] [Thread-186362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:40:26.806 [DEBUG] [Thread-186362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:40:26.806 [DEBUG] [Thread-186362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:40:26.806 [DEBUG] [Thread-186362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:40:26.806 [DEBUG] [Thread-186362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:40:26.806 [DEBUG] [Thread-186362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:40:26.806 [DEBUG] [Thread-186362] [transport.py] [_log()] client lang: <none>
2026-02-14T13:40:26.806 [DEBUG] [Thread-186362] [transport.py] [_log()] server lang: <none>
2026-02-14T13:40:26.806 [DEBUG] [Thread-186362] [transport.py] [_log()] kex follows: False
2026-02-14T13:40:26.806 [DEBUG] [Thread-186362] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:40:26.806 [DEBUG] [Thread-186362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:40:26.806 [DEBUG] [Thread-186362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:40:26.806 [DEBUG] [Thread-186362] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:40:26.806 [DEBUG] [Thread-186362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:40:26.806 [DEBUG] [Thread-186362] [transport.py] [_log()] Compression: none
2026-02-14T13:40:26.806 [DEBUG] [Thread-186362] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:40:26.818 [DEBUG] [Thread-186362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:40:26.818 [DEBUG] [Thread-186362] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:40:26.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:40:26.819 [DEBUG] [Thread-186362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:40:26.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:40:26.822 [DEBUG] [Thread-186362] [transport.py] [_log()] userauth is OK
2026-02-14T13:40:26.822 [DEBUG] [Thread-186362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:40:26.822 [DEBUG] [Thread-186362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:40:26.822 [DEBUG] [Thread-186362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:40:26.823 [DEBUG] [Thread-186362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:40:26.847 [INFO] [Thread-186362] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:40:26.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:40:27.495 [DEBUG] [Thread-186362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:40:27.495 [DEBUG] [Thread-186362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:40:27.495 [DEBUG] [Thread-186362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:40:27.537 [DEBUG] [Thread-186362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:40:27.537 [DEBUG] [Thread-186362] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:40:27.541 [DEBUG] [Thread-186362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:40:27.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:40:27.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:40:27.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:40:27.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:40:27.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:40:27.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:40:27.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:40:27.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:40:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:40:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.486220 -999.00  +15.90  25.79     43   +3.50 1 1 1 1 1   888    0 13.14 23.20 ----- 25.0 25.8 173.2 30.1 22.1 -26.8 21.1 -24.9 21.6 -24.0 22.7 -28.9
2026-02-14T13:40:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:40:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:40:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.486220
2026-02-14T13:40:27.573 [DEBUG] [Thread-186362] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:40:27.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:40:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:40:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:40:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:40:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:40:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:39:48', tmtdew=13.94, humidity=38.81, cloud=0.0, wind=30.56, temperature=15.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:40:09.408', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:40:27.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-14T13:40:27.673 [DEBUG] [Thread-186365] [transport.py] [_log()] starting thread (client mode): 0xa2d199c0
2026-02-14T13:40:27.673 [DEBUG] [Thread-186365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:40:27.690 [DEBUG] [Thread-186365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:40:27.690 [INFO] [Thread-186365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:40:27.698 [DEBUG] [Thread-186365] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:40:27.698 [DEBUG] [Thread-186365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:40:27.698 [DEBUG] [Thread-186365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:40:27.698 [DEBUG] [Thread-186365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:40:27.698 [DEBUG] [Thread-186365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:40:27.698 [DEBUG] [Thread-186365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:40:27.698 [DEBUG] [Thread-186365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:40:27.698 [DEBUG] [Thread-186365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:40:27.698 [DEBUG] [Thread-186365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:40:27.698 [DEBUG] [Thread-186365] [transport.py] [_log()] client lang: <none>
2026-02-14T13:40:27.698 [DEBUG] [Thread-186365] [transport.py] [_log()] server lang: <none>
2026-02-14T13:40:27.698 [DEBUG] [Thread-186365] [transport.py] [_log()] kex follows: False
2026-02-14T13:40:27.699 [DEBUG] [Thread-186365] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:40:27.699 [DEBUG] [Thread-186365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:40:27.699 [DEBUG] [Thread-186365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:40:27.699 [DEBUG] [Thread-186365] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:40:27.699 [DEBUG] [Thread-186365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:40:27.699 [DEBUG] [Thread-186365] [transport.py] [_log()] Compression: none
2026-02-14T13:40:27.699 [DEBUG] [Thread-186365] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:40:27.761 [DEBUG] [Thread-186365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:40:27.762 [DEBUG] [Thread-186365] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:40:27.762 [DEBUG] [Thread-186365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:40:27.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:40:27.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:40:27.817 [DEBUG] [Thread-186365] [transport.py] [_log()] userauth is OK
2026-02-14T13:40:27.817 [DEBUG] [Thread-186365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:40:27.818 [DEBUG] [Thread-186365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:40:27.818 [DEBUG] [Thread-186365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:40:27.818 [DEBUG] [Thread-186365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:40:27.837 [INFO] [Thread-186365] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:40:27.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-14T13:40:27.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:40:28.649 [DEBUG] [Thread-186365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:40:28.649 [DEBUG] [Thread-186365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:40:28.697 [DEBUG] [Thread-186365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:40:28.697 [DEBUG] [Thread-186365] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:40:28.709 [DEBUG] [Thread-186365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:40:28.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:40:28.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-14T13:40:28.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:40:28.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:40:28.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:40:28.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:40:28.746 [DEBUG] [Thread-186365] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:40:31.662 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:40:31.663 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:40:38.402 [DEBUG] [Thread-186367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:40:53.452 [DEBUG] [Thread-186368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:40:58.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:40:58.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:40:58.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-14T13:41:00.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 40, 23), 13.94, 38.86, 0.0, 31.46, 15.97, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:41:00.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:40:23
2026-02-14T13:41:01.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:41:01.214 [DEBUG] [Thread-186369] [transport.py] [_log()] starting thread (client mode): 0xa2db67a0
2026-02-14T13:41:01.215 [DEBUG] [Thread-186369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:41:01.235 [DEBUG] [Thread-186369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:41:01.235 [INFO] [Thread-186369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:41:01.239 [DEBUG] [Thread-186369] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:41:01.239 [DEBUG] [Thread-186369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:41:01.239 [DEBUG] [Thread-186369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:41:01.239 [DEBUG] [Thread-186369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:41:01.239 [DEBUG] [Thread-186369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:41:01.239 [DEBUG] [Thread-186369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:41:01.240 [DEBUG] [Thread-186369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:41:01.240 [DEBUG] [Thread-186369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:41:01.240 [DEBUG] [Thread-186369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:41:01.240 [DEBUG] [Thread-186369] [transport.py] [_log()] client lang: <none>
2026-02-14T13:41:01.240 [DEBUG] [Thread-186369] [transport.py] [_log()] server lang: <none>
2026-02-14T13:41:01.240 [DEBUG] [Thread-186369] [transport.py] [_log()] kex follows: False
2026-02-14T13:41:01.240 [DEBUG] [Thread-186369] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:41:01.240 [DEBUG] [Thread-186369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:41:01.240 [DEBUG] [Thread-186369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:41:01.240 [DEBUG] [Thread-186369] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:41:01.240 [DEBUG] [Thread-186369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:41:01.240 [DEBUG] [Thread-186369] [transport.py] [_log()] Compression: none
2026-02-14T13:41:01.240 [DEBUG] [Thread-186369] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:41:01.257 [DEBUG] [Thread-186369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:41:01.258 [DEBUG] [Thread-186369] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:41:01.258 [DEBUG] [Thread-186369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:41:01.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:41:01.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:41:01.260 [DEBUG] [Thread-186369] [transport.py] [_log()] userauth is OK
2026-02-14T13:41:01.261 [DEBUG] [Thread-186369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:41:01.261 [DEBUG] [Thread-186369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:41:01.261 [DEBUG] [Thread-186369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:41:01.261 [DEBUG] [Thread-186369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:41:01.282 [INFO] [Thread-186369] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:41:01.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:41:01.923 [DEBUG] [Thread-186369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:41:01.923 [DEBUG] [Thread-186369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:41:01.923 [DEBUG] [Thread-186369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:41:01.964 [DEBUG] [Thread-186369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:41:01.964 [DEBUG] [Thread-186369] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:41:01.966 [DEBUG] [Thread-186369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:41:01.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:41:01.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:41:01.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:41:01.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:41:01.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:41:01.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:41:01.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:41:01.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:41:01.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:41:01.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.486567 -999.00  +15.90  21.36     43   +3.50 1 1 1 1 1   888    0 12.93 22.69 ----- 17.9 21.4 174.8 33.0 22.1 -28.1 20.7 -27.2 21.6 -25.9 22.8 -29.3
2026-02-14T13:41:01.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:41:01.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:41:01.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.486567
2026-02-14T13:41:01.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:41:01.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:41:01.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:41:01.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:41:01.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:41:01.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:40:23', tmtdew=13.94, humidity=38.86, cloud=0.0, wind=31.46, temperature=15.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:40:39.389', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:41:01.989 [DEBUG] [Thread-186369] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:41:02.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T13:41:02.071 [DEBUG] [Thread-186372] [transport.py] [_log()] starting thread (client mode): 0xa2d1a290
2026-02-14T13:41:02.071 [DEBUG] [Thread-186372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:41:02.086 [DEBUG] [Thread-186372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:41:02.086 [INFO] [Thread-186372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:41:02.093 [DEBUG] [Thread-186372] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:41:02.093 [DEBUG] [Thread-186372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:41:02.093 [DEBUG] [Thread-186372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:41:02.093 [DEBUG] [Thread-186372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:41:02.093 [DEBUG] [Thread-186372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:41:02.093 [DEBUG] [Thread-186372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:41:02.093 [DEBUG] [Thread-186372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:41:02.093 [DEBUG] [Thread-186372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:41:02.093 [DEBUG] [Thread-186372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:41:02.093 [DEBUG] [Thread-186372] [transport.py] [_log()] client lang: <none>
2026-02-14T13:41:02.093 [DEBUG] [Thread-186372] [transport.py] [_log()] server lang: <none>
2026-02-14T13:41:02.093 [DEBUG] [Thread-186372] [transport.py] [_log()] kex follows: False
2026-02-14T13:41:02.093 [DEBUG] [Thread-186372] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:41:02.093 [DEBUG] [Thread-186372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:41:02.093 [DEBUG] [Thread-186372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:41:02.093 [DEBUG] [Thread-186372] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:41:02.093 [DEBUG] [Thread-186372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:41:02.093 [DEBUG] [Thread-186372] [transport.py] [_log()] Compression: none
2026-02-14T13:41:02.093 [DEBUG] [Thread-186372] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:41:02.150 [DEBUG] [Thread-186372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:41:02.150 [DEBUG] [Thread-186372] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:41:02.151 [DEBUG] [Thread-186372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:41:02.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:41:02.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:41:02.208 [DEBUG] [Thread-186372] [transport.py] [_log()] userauth is OK
2026-02-14T13:41:02.208 [DEBUG] [Thread-186372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:41:02.208 [DEBUG] [Thread-186372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:41:02.209 [DEBUG] [Thread-186372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:41:02.209 [DEBUG] [Thread-186372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:41:02.225 [INFO] [Thread-186372] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:41:02.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T13:41:02.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:41:03.076 [DEBUG] [Thread-186372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:41:03.076 [DEBUG] [Thread-186372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:41:03.124 [DEBUG] [Thread-186372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:41:03.124 [DEBUG] [Thread-186372] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:41:03.133 [DEBUG] [Thread-186372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:41:03.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:41:03.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-14T13:41:03.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-14T13:41:03.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:41:03.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:41:03.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:41:03.167 [DEBUG] [Thread-186372] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:41:08.489 [DEBUG] [Thread-186374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:41:23.541 [DEBUG] [Thread-186375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:41:24.474 [DEBUG] [Thread-186376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:41:31.808 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:41:31.810 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:41:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:41:33.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:41: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-14T13:41:35.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 40, 59), 14.62, 37.56, 0.0, 30.45, 16.5, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:41:35.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:40:59
2026-02-14T13:41:35.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:41:35.555 [DEBUG] [Thread-186377] [transport.py] [_log()] starting thread (client mode): 0xa2d1ac80
2026-02-14T13:41:35.555 [DEBUG] [Thread-186377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:41:35.575 [DEBUG] [Thread-186377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:41:35.575 [INFO] [Thread-186377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:41:35.578 [DEBUG] [Thread-186377] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:41:35.578 [DEBUG] [Thread-186377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:41:35.578 [DEBUG] [Thread-186377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:41:35.578 [DEBUG] [Thread-186377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:41:35.578 [DEBUG] [Thread-186377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:41:35.578 [DEBUG] [Thread-186377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:41:35.578 [DEBUG] [Thread-186377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:41:35.578 [DEBUG] [Thread-186377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:41:35.578 [DEBUG] [Thread-186377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:41:35.579 [DEBUG] [Thread-186377] [transport.py] [_log()] client lang: <none>
2026-02-14T13:41:35.579 [DEBUG] [Thread-186377] [transport.py] [_log()] server lang: <none>
2026-02-14T13:41:35.579 [DEBUG] [Thread-186377] [transport.py] [_log()] kex follows: False
2026-02-14T13:41:35.579 [DEBUG] [Thread-186377] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:41:35.579 [DEBUG] [Thread-186377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:41:35.579 [DEBUG] [Thread-186377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:41:35.579 [DEBUG] [Thread-186377] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:41:35.579 [DEBUG] [Thread-186377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:41:35.579 [DEBUG] [Thread-186377] [transport.py] [_log()] Compression: none
2026-02-14T13:41:35.579 [DEBUG] [Thread-186377] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:41:35.592 [DEBUG] [Thread-186377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:41:35.593 [DEBUG] [Thread-186377] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:41:35.593 [DEBUG] [Thread-186377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:41:35.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:41:35.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:41:35.637 [DEBUG] [Thread-186377] [transport.py] [_log()] userauth is OK
2026-02-14T13:41:35.637 [DEBUG] [Thread-186377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:41:35.637 [DEBUG] [Thread-186377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:41:35.637 [DEBUG] [Thread-186377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:41:35.637 [DEBUG] [Thread-186377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:41:35.657 [INFO] [Thread-186377] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:41:35.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:41:36.312 [DEBUG] [Thread-186377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:41:36.312 [DEBUG] [Thread-186377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:41:36.312 [DEBUG] [Thread-186377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:41:36.353 [DEBUG] [Thread-186377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:41:36.354 [DEBUG] [Thread-186377] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:41:36.357 [DEBUG] [Thread-186377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:41:36.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:41:36.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:41:36.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:41:36.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:41:36.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:41:36.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:41:36.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:41:36.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:41:36.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:41:36.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.486915 -999.00  +16.20  23.93     43   +3.60 1 1 1 1 1   888    0 13.10 23.74 ----- 25.8 23.9 167.0 37.6 22.1 -25.4 20.9 -26.6 21.6 -22.6 22.7 -26.5
2026-02-14T13:41:36.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:41:36.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:41:36.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.486915
2026-02-14T13:41:36.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:41:36.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:41:36.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:41:36.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:41:36.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:41:36.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:40:59', tmtdew=14.62, humidity=37.56, cloud=0.0, wind=30.45, temperature=16.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:41:09.456', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:41:36.383 [DEBUG] [Thread-186377] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:41:36.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-14T13:41:36.476 [DEBUG] [Thread-186380] [transport.py] [_log()] starting thread (client mode): 0xa2d3dff0
2026-02-14T13:41:36.476 [DEBUG] [Thread-186380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:41:36.490 [DEBUG] [Thread-186380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:41:36.491 [INFO] [Thread-186380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:41:36.498 [DEBUG] [Thread-186380] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:41:36.498 [DEBUG] [Thread-186380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:41:36.498 [DEBUG] [Thread-186380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:41:36.498 [DEBUG] [Thread-186380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:41:36.499 [DEBUG] [Thread-186380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:41:36.499 [DEBUG] [Thread-186380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:41:36.499 [DEBUG] [Thread-186380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:41:36.499 [DEBUG] [Thread-186380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:41:36.499 [DEBUG] [Thread-186380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:41:36.499 [DEBUG] [Thread-186380] [transport.py] [_log()] client lang: <none>
2026-02-14T13:41:36.499 [DEBUG] [Thread-186380] [transport.py] [_log()] server lang: <none>
2026-02-14T13:41:36.499 [DEBUG] [Thread-186380] [transport.py] [_log()] kex follows: False
2026-02-14T13:41:36.499 [DEBUG] [Thread-186380] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:41:36.499 [DEBUG] [Thread-186380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:41:36.499 [DEBUG] [Thread-186380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:41:36.499 [DEBUG] [Thread-186380] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:41:36.499 [DEBUG] [Thread-186380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:41:36.499 [DEBUG] [Thread-186380] [transport.py] [_log()] Compression: none
2026-02-14T13:41:36.499 [DEBUG] [Thread-186380] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:41:36.556 [DEBUG] [Thread-186380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:41:36.557 [DEBUG] [Thread-186380] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:41:36.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:41:36.558 [DEBUG] [Thread-186380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:41:36.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:41:36.613 [DEBUG] [Thread-186380] [transport.py] [_log()] userauth is OK
2026-02-14T13:41:36.613 [DEBUG] [Thread-186380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:41:36.613 [DEBUG] [Thread-186380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:41:36.613 [DEBUG] [Thread-186380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:41:36.613 [DEBUG] [Thread-186380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:41:36.632 [INFO] [Thread-186380] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:41:36.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-14T13:41:36.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:41:37.445 [DEBUG] [Thread-186380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:41:37.445 [DEBUG] [Thread-186380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:41:37.493 [DEBUG] [Thread-186380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:41:37.493 [DEBUG] [Thread-186380] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:41:37.503 [DEBUG] [Thread-186380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:41:37.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:41:37.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-14T13:41:37.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:41:37.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:41:37.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:41:37.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:41:37.539 [DEBUG] [Thread-186380] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:41:38.577 [DEBUG] [Thread-186382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:41:53.629 [DEBUG] [Thread-186383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:42:07.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:42:07.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:42:07.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-14T13:42:08.665 [DEBUG] [Thread-186384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:42:09.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 41, 34), 16.39, 33.17, 0.0, 44.81, 17.73, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:42:09.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:41:34
2026-02-14T13:42:10.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:42:10.583 [DEBUG] [Thread-186385] [transport.py] [_log()] starting thread (client mode): 0xa2db6470
2026-02-14T13:42:10.583 [DEBUG] [Thread-186385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:42:10.603 [DEBUG] [Thread-186385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:42:10.603 [INFO] [Thread-186385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:42:10.606 [DEBUG] [Thread-186385] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:42:10.606 [DEBUG] [Thread-186385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:42:10.606 [DEBUG] [Thread-186385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:42:10.606 [DEBUG] [Thread-186385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:42:10.606 [DEBUG] [Thread-186385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:42:10.606 [DEBUG] [Thread-186385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:42:10.606 [DEBUG] [Thread-186385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:42:10.606 [DEBUG] [Thread-186385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:42:10.606 [DEBUG] [Thread-186385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:42:10.606 [DEBUG] [Thread-186385] [transport.py] [_log()] client lang: <none>
2026-02-14T13:42:10.606 [DEBUG] [Thread-186385] [transport.py] [_log()] server lang: <none>
2026-02-14T13:42:10.607 [DEBUG] [Thread-186385] [transport.py] [_log()] kex follows: False
2026-02-14T13:42:10.607 [DEBUG] [Thread-186385] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:42:10.607 [DEBUG] [Thread-186385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:42:10.607 [DEBUG] [Thread-186385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:42:10.607 [DEBUG] [Thread-186385] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:42:10.607 [DEBUG] [Thread-186385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:42:10.607 [DEBUG] [Thread-186385] [transport.py] [_log()] Compression: none
2026-02-14T13:42:10.607 [DEBUG] [Thread-186385] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:42:10.622 [DEBUG] [Thread-186385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:42:10.623 [DEBUG] [Thread-186385] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:42:10.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:42:10.623 [DEBUG] [Thread-186385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:42:10.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:42:10.625 [DEBUG] [Thread-186385] [transport.py] [_log()] userauth is OK
2026-02-14T13:42:10.625 [DEBUG] [Thread-186385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:42:10.625 [DEBUG] [Thread-186385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:42:10.625 [DEBUG] [Thread-186385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:42:10.625 [DEBUG] [Thread-186385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:42:10.639 [INFO] [Thread-186385] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:42:10.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:42:11.264 [DEBUG] [Thread-186385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:42:11.264 [DEBUG] [Thread-186385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:42:11.265 [DEBUG] [Thread-186385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:42:11.305 [DEBUG] [Thread-186385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:42:11.306 [DEBUG] [Thread-186385] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:42:11.309 [DEBUG] [Thread-186385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:42:11.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:42:11.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:42:11.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:42:11.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:42:11.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:42:11.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:42:11.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:42:11.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:42:11.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:42:11.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.487262 -999.00  +16.40  31.52     41   +3.40 1 1 2 1 1   888    0 13.13 27.01 ----- 23.8 31.5 182.0 44.2 22.2 -27.6 21.0 -27.0 21.6 -25.1 22.9 -25.7
2026-02-14T13:42:11.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:42:11.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:42:11.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.487262
2026-02-14T13:42:11.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:42:11.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:42:11.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:42:11.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:42:11.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:42:11.336 [DEBUG] [Thread-186385] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:42:11.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:41:34', tmtdew=16.39, humidity=33.17, cloud=0.0, wind=44.81, temperature=17.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:41:39.437', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:42:11.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-14T13:42:11.432 [DEBUG] [Thread-186388] [transport.py] [_log()] starting thread (client mode): 0xa2d1b4c0
2026-02-14T13:42:11.432 [DEBUG] [Thread-186388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:42:11.446 [DEBUG] [Thread-186388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:42:11.446 [INFO] [Thread-186388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:42:11.453 [DEBUG] [Thread-186388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:42:11.454 [DEBUG] [Thread-186388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:42:11.454 [DEBUG] [Thread-186388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:42:11.454 [DEBUG] [Thread-186388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:42:11.454 [DEBUG] [Thread-186388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:42:11.454 [DEBUG] [Thread-186388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:42:11.454 [DEBUG] [Thread-186388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:42:11.454 [DEBUG] [Thread-186388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:42:11.454 [DEBUG] [Thread-186388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:42:11.454 [DEBUG] [Thread-186388] [transport.py] [_log()] client lang: <none>
2026-02-14T13:42:11.454 [DEBUG] [Thread-186388] [transport.py] [_log()] server lang: <none>
2026-02-14T13:42:11.455 [DEBUG] [Thread-186388] [transport.py] [_log()] kex follows: False
2026-02-14T13:42:11.455 [DEBUG] [Thread-186388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:42:11.455 [DEBUG] [Thread-186388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:42:11.455 [DEBUG] [Thread-186388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:42:11.455 [DEBUG] [Thread-186388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:42:11.455 [DEBUG] [Thread-186388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:42:11.455 [DEBUG] [Thread-186388] [transport.py] [_log()] Compression: none
2026-02-14T13:42:11.455 [DEBUG] [Thread-186388] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:42:11.513 [DEBUG] [Thread-186388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:42:11.514 [DEBUG] [Thread-186388] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:42:11.515 [DEBUG] [Thread-186388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:42:11.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:42:11.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:42:11.572 [DEBUG] [Thread-186388] [transport.py] [_log()] userauth is OK
2026-02-14T13:42:11.572 [DEBUG] [Thread-186388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:42:11.572 [DEBUG] [Thread-186388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:42:11.573 [DEBUG] [Thread-186388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:42:11.573 [DEBUG] [Thread-186388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:42:11.590 [INFO] [Thread-186388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:42:11.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-14T13:42:11.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:42:12.415 [DEBUG] [Thread-186388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:42:12.416 [DEBUG] [Thread-186388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:42:12.463 [DEBUG] [Thread-186388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:42:12.464 [DEBUG] [Thread-186388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:42:12.473 [DEBUG] [Thread-186388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:42:12.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:42:12.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-14T13:42:12.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-14T13:42:12.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:42:12.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:42:12.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:42:12.510 [DEBUG] [Thread-186388] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:42:23.702 [DEBUG] [Thread-186390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:42:24.508 [DEBUG] [Thread-186391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:42:31.949 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:42:31.950 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:42:38.753 [DEBUG] [Thread-186392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:42:42.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:42:42.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:42:42.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-14T13:42:44.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 42, 9), 14.89, 36.7, 0.0, 34.6, 16.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:42:44.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:42:09
2026-02-14T13:42:44.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:42:45.111 [DEBUG] [Thread-186393] [transport.py] [_log()] starting thread (client mode): 0xa5741d80
2026-02-14T13:42:45.112 [DEBUG] [Thread-186393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:42:45.131 [DEBUG] [Thread-186393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:42:45.132 [INFO] [Thread-186393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:42:45.135 [DEBUG] [Thread-186393] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:42:45.135 [DEBUG] [Thread-186393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:42:45.135 [DEBUG] [Thread-186393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:42:45.135 [DEBUG] [Thread-186393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:42:45.135 [DEBUG] [Thread-186393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:42:45.135 [DEBUG] [Thread-186393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:42:45.135 [DEBUG] [Thread-186393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:42:45.135 [DEBUG] [Thread-186393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:42:45.135 [DEBUG] [Thread-186393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:42:45.135 [DEBUG] [Thread-186393] [transport.py] [_log()] client lang: <none>
2026-02-14T13:42:45.135 [DEBUG] [Thread-186393] [transport.py] [_log()] server lang: <none>
2026-02-14T13:42:45.135 [DEBUG] [Thread-186393] [transport.py] [_log()] kex follows: False
2026-02-14T13:42:45.135 [DEBUG] [Thread-186393] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:42:45.135 [DEBUG] [Thread-186393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:42:45.135 [DEBUG] [Thread-186393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:42:45.135 [DEBUG] [Thread-186393] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:42:45.135 [DEBUG] [Thread-186393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:42:45.135 [DEBUG] [Thread-186393] [transport.py] [_log()] Compression: none
2026-02-14T13:42:45.135 [DEBUG] [Thread-186393] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:42:45.152 [DEBUG] [Thread-186393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:42:45.153 [DEBUG] [Thread-186393] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:42:45.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:42:45.154 [DEBUG] [Thread-186393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:42:45.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:42:45.197 [DEBUG] [Thread-186393] [transport.py] [_log()] userauth is OK
2026-02-14T13:42:45.198 [DEBUG] [Thread-186393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:42:45.198 [DEBUG] [Thread-186393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:42:45.198 [DEBUG] [Thread-186393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:42:45.198 [DEBUG] [Thread-186393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:42:45.219 [INFO] [Thread-186393] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:42:45.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:42:45.849 [DEBUG] [Thread-186393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:42:45.849 [DEBUG] [Thread-186393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:42:45.850 [DEBUG] [Thread-186393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:42:45.891 [DEBUG] [Thread-186393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:42:45.891 [DEBUG] [Thread-186393] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:42:45.895 [DEBUG] [Thread-186393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:42:45.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:42:45.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:42:45.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:42:45.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:42:45.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:42:45.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:42:45.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:42:45.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:42:45.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:42:45.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.487609 -999.00  +16.30  26.60     40   +2.80 1 1 1 1 1   888    0 13.40 31.36 ----- 24.7 26.6 178.4 36.1 22.1 -27.9 20.8 -28.5 21.6 -25.3 22.8 -27.3
2026-02-14T13:42:45.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:42:45.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:42:45.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.487609
2026-02-14T13:42:45.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:42:45.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:42:45.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:42:45.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:42:45.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:42:45.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:42:09', tmtdew=14.89, humidity=36.7, cloud=0.0, wind=34.6, temperature=16.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:42:09.418', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:42:45.922 [DEBUG] [Thread-186393] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:42:46.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-14T13:42:46.018 [DEBUG] [Thread-186396] [transport.py] [_log()] starting thread (client mode): 0xa5743550
2026-02-14T13:42:46.018 [DEBUG] [Thread-186396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:42:46.032 [DEBUG] [Thread-186396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:42:46.032 [INFO] [Thread-186396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:42:46.040 [DEBUG] [Thread-186396] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:42:46.040 [DEBUG] [Thread-186396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:42:46.040 [DEBUG] [Thread-186396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:42:46.040 [DEBUG] [Thread-186396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:42:46.040 [DEBUG] [Thread-186396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:42:46.041 [DEBUG] [Thread-186396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:42:46.041 [DEBUG] [Thread-186396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:42:46.041 [DEBUG] [Thread-186396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:42:46.041 [DEBUG] [Thread-186396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:42:46.041 [DEBUG] [Thread-186396] [transport.py] [_log()] client lang: <none>
2026-02-14T13:42:46.041 [DEBUG] [Thread-186396] [transport.py] [_log()] server lang: <none>
2026-02-14T13:42:46.041 [DEBUG] [Thread-186396] [transport.py] [_log()] kex follows: False
2026-02-14T13:42:46.041 [DEBUG] [Thread-186396] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:42:46.042 [DEBUG] [Thread-186396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:42:46.042 [DEBUG] [Thread-186396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:42:46.042 [DEBUG] [Thread-186396] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:42:46.042 [DEBUG] [Thread-186396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:42:46.042 [DEBUG] [Thread-186396] [transport.py] [_log()] Compression: none
2026-02-14T13:42:46.043 [DEBUG] [Thread-186396] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:42:46.101 [DEBUG] [Thread-186396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:42:46.102 [DEBUG] [Thread-186396] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:42:46.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:42:46.103 [DEBUG] [Thread-186396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:42:46.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:42:46.156 [DEBUG] [Thread-186396] [transport.py] [_log()] userauth is OK
2026-02-14T13:42:46.156 [DEBUG] [Thread-186396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:42:46.156 [DEBUG] [Thread-186396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:42:46.156 [DEBUG] [Thread-186396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:42:46.156 [DEBUG] [Thread-186396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:42:46.172 [INFO] [Thread-186396] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:42:46.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T13:42:46.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:42:46.977 [DEBUG] [Thread-186396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:42:46.977 [DEBUG] [Thread-186396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:42:47.025 [DEBUG] [Thread-186396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:42:47.025 [DEBUG] [Thread-186396] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:42:47.034 [DEBUG] [Thread-186396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:42:47.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:42:47.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-14T13:42:47.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-14T13:42:47.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:42:47.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:42:47.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:42:47.069 [DEBUG] [Thread-186396] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:42:53.792 [DEBUG] [Thread-186398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:43:08.845 [DEBUG] [Thread-186399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:43:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:43:17.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:43:17.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-14T13:43:19.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 42, 46), 14.4, 37.98, 0.0, 32.31, 15.52, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:43:19.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:42:46
2026-02-14T13:43:19.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:43:19.759 [DEBUG] [Thread-186400] [transport.py] [_log()] starting thread (client mode): 0xa2d18c40
2026-02-14T13:43:19.760 [DEBUG] [Thread-186400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:43:19.780 [DEBUG] [Thread-186400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:43:19.780 [INFO] [Thread-186400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:43:19.783 [DEBUG] [Thread-186400] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:43:19.783 [DEBUG] [Thread-186400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:43:19.783 [DEBUG] [Thread-186400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:43:19.783 [DEBUG] [Thread-186400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:43:19.783 [DEBUG] [Thread-186400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:43:19.783 [DEBUG] [Thread-186400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:43:19.783 [DEBUG] [Thread-186400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:43:19.783 [DEBUG] [Thread-186400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:43:19.783 [DEBUG] [Thread-186400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:43:19.783 [DEBUG] [Thread-186400] [transport.py] [_log()] client lang: <none>
2026-02-14T13:43:19.783 [DEBUG] [Thread-186400] [transport.py] [_log()] server lang: <none>
2026-02-14T13:43:19.784 [DEBUG] [Thread-186400] [transport.py] [_log()] kex follows: False
2026-02-14T13:43:19.784 [DEBUG] [Thread-186400] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:43:19.784 [DEBUG] [Thread-186400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:43:19.784 [DEBUG] [Thread-186400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:43:19.784 [DEBUG] [Thread-186400] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:43:19.784 [DEBUG] [Thread-186400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:43:19.784 [DEBUG] [Thread-186400] [transport.py] [_log()] Compression: none
2026-02-14T13:43:19.784 [DEBUG] [Thread-186400] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:43:19.803 [DEBUG] [Thread-186400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:43:19.804 [DEBUG] [Thread-186400] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:43:19.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:43:19.805 [DEBUG] [Thread-186400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:43:19.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:43:19.807 [DEBUG] [Thread-186400] [transport.py] [_log()] userauth is OK
2026-02-14T13:43:19.807 [DEBUG] [Thread-186400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:43:19.808 [DEBUG] [Thread-186400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:43:19.808 [DEBUG] [Thread-186400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:43:19.808 [DEBUG] [Thread-186400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:43:19.843 [INFO] [Thread-186400] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:43:19.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:43:20.476 [DEBUG] [Thread-186400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:43:20.476 [DEBUG] [Thread-186400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:43:20.476 [DEBUG] [Thread-186400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:43:20.517 [DEBUG] [Thread-186400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:43:20.518 [DEBUG] [Thread-186400] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:43:20.521 [DEBUG] [Thread-186400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:43:20.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:43:20.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:43:20.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:43:20.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:43:20.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:43:20.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:43:20.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:43:20.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:43:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:43:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.487956 -999.00  +16.20  31.69     41   +2.90 1 1 2 1 1   888    0 13.35 35.68 ----- 25.5 31.7 184.8 36.0 22.2 -26.2 20.8 -28.7 21.8 -25.2 22.9 -25.5
2026-02-14T13:43:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:43:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:43:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.487956
2026-02-14T13:43:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:43:20.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:43:20.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:43:20.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:43:20.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:43:20.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:42:46', tmtdew=14.4, humidity=37.98, cloud=0.0, wind=32.31, temperature=15.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:42:39.398', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:43:20.549 [DEBUG] [Thread-186400] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:43:20.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-14T13:43:20.650 [DEBUG] [Thread-186403] [transport.py] [_log()] starting thread (client mode): 0xa2d1bc40
2026-02-14T13:43:20.651 [DEBUG] [Thread-186403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:43:20.665 [DEBUG] [Thread-186403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:43:20.665 [INFO] [Thread-186403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:43:20.672 [DEBUG] [Thread-186403] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:43:20.673 [DEBUG] [Thread-186403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:43:20.673 [DEBUG] [Thread-186403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:43:20.673 [DEBUG] [Thread-186403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:43:20.673 [DEBUG] [Thread-186403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:43:20.673 [DEBUG] [Thread-186403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:43:20.673 [DEBUG] [Thread-186403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:43:20.673 [DEBUG] [Thread-186403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:43:20.673 [DEBUG] [Thread-186403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:43:20.673 [DEBUG] [Thread-186403] [transport.py] [_log()] client lang: <none>
2026-02-14T13:43:20.673 [DEBUG] [Thread-186403] [transport.py] [_log()] server lang: <none>
2026-02-14T13:43:20.673 [DEBUG] [Thread-186403] [transport.py] [_log()] kex follows: False
2026-02-14T13:43:20.673 [DEBUG] [Thread-186403] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:43:20.673 [DEBUG] [Thread-186403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:43:20.673 [DEBUG] [Thread-186403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:43:20.673 [DEBUG] [Thread-186403] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:43:20.673 [DEBUG] [Thread-186403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:43:20.673 [DEBUG] [Thread-186403] [transport.py] [_log()] Compression: none
2026-02-14T13:43:20.673 [DEBUG] [Thread-186403] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:43:20.733 [DEBUG] [Thread-186403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:43:20.733 [DEBUG] [Thread-186403] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:43:20.734 [DEBUG] [Thread-186403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:43:20.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:43:20.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:43:20.789 [DEBUG] [Thread-186403] [transport.py] [_log()] userauth is OK
2026-02-14T13:43:20.789 [DEBUG] [Thread-186403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:43:20.789 [DEBUG] [Thread-186403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:43:20.789 [DEBUG] [Thread-186403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:43:20.789 [DEBUG] [Thread-186403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:43:20.807 [INFO] [Thread-186403] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:43:20.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-14T13:43:20.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:43:21.643 [DEBUG] [Thread-186403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:43:21.643 [DEBUG] [Thread-186403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:43:21.691 [DEBUG] [Thread-186403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:43:21.691 [DEBUG] [Thread-186403] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:43:21.700 [DEBUG] [Thread-186403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:43:21.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:43:21.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-14T13:43:21.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-14T13:43:21.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:43:21.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:43:21.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:43:21.736 [DEBUG] [Thread-186403] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:43:23.880 [DEBUG] [Thread-186405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:43:24.540 [DEBUG] [Thread-186406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:43:32.093 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:43:32.094 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:43:38.933 [DEBUG] [Thread-186407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:43:51.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:43:51.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:43:51.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-14T13:43:53.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 43, 21), 14.55, 37.65, 0.0, 31.32, 15.62, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:43:53.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:43:21
2026-02-14T13:43:53.967 [DEBUG] [Thread-186408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:43:53.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:43:54.148 [DEBUG] [Thread-186409] [transport.py] [_log()] starting thread (client mode): 0xa2d1bd30
2026-02-14T13:43:54.148 [DEBUG] [Thread-186409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:43:54.170 [DEBUG] [Thread-186409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:43:54.170 [INFO] [Thread-186409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:43:54.174 [DEBUG] [Thread-186409] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:43:54.174 [DEBUG] [Thread-186409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:43:54.174 [DEBUG] [Thread-186409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:43:54.174 [DEBUG] [Thread-186409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:43:54.175 [DEBUG] [Thread-186409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:43:54.175 [DEBUG] [Thread-186409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:43:54.175 [DEBUG] [Thread-186409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:43:54.175 [DEBUG] [Thread-186409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:43:54.175 [DEBUG] [Thread-186409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:43:54.175 [DEBUG] [Thread-186409] [transport.py] [_log()] client lang: <none>
2026-02-14T13:43:54.175 [DEBUG] [Thread-186409] [transport.py] [_log()] server lang: <none>
2026-02-14T13:43:54.175 [DEBUG] [Thread-186409] [transport.py] [_log()] kex follows: False
2026-02-14T13:43:54.175 [DEBUG] [Thread-186409] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:43:54.175 [DEBUG] [Thread-186409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:43:54.175 [DEBUG] [Thread-186409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:43:54.175 [DEBUG] [Thread-186409] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:43:54.176 [DEBUG] [Thread-186409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:43:54.176 [DEBUG] [Thread-186409] [transport.py] [_log()] Compression: none
2026-02-14T13:43:54.176 [DEBUG] [Thread-186409] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:43:54.195 [DEBUG] [Thread-186409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:43:54.196 [DEBUG] [Thread-186409] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:43:54.197 [DEBUG] [Thread-186409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:43:54.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:43:54.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:43:54.199 [DEBUG] [Thread-186409] [transport.py] [_log()] userauth is OK
2026-02-14T13:43:54.199 [DEBUG] [Thread-186409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:43:54.200 [DEBUG] [Thread-186409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:43:54.200 [DEBUG] [Thread-186409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:43:54.200 [DEBUG] [Thread-186409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:43:54.235 [INFO] [Thread-186409] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:43:54.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:43:54.857 [DEBUG] [Thread-186409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:43:54.857 [DEBUG] [Thread-186409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:43:54.857 [DEBUG] [Thread-186409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:43:54.898 [DEBUG] [Thread-186409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:43:54.898 [DEBUG] [Thread-186409] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:43:54.902 [DEBUG] [Thread-186409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:43:54.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:43:54.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:43:54.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:43:54.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:43:54.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:43:54.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:43:54.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:43:54.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:43:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:43:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.488304 -999.00  +15.90  31.52     41   +2.90 1 1 2 1 1   888    0 13.67 39.14 ----- 26.5 31.5 183.6 38.9 22.1 -27.3 20.8 -24.8 21.6 -26.4 22.6 -27.2
2026-02-14T13:43:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:43:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:43:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.488304
2026-02-14T13:43:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:43:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:43:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:43:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:43:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:43:54.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:43:21', tmtdew=14.55, humidity=37.65, cloud=0.0, wind=31.32, temperature=15.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:43:09.466', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:43:54.920 [DEBUG] [Thread-186409] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:43:54.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-14T13:43:55.005 [DEBUG] [Thread-186412] [transport.py] [_log()] starting thread (client mode): 0xa2ddd930
2026-02-14T13:43:55.005 [DEBUG] [Thread-186412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:43:55.020 [DEBUG] [Thread-186412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:43:55.020 [INFO] [Thread-186412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:43:55.027 [DEBUG] [Thread-186412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:43:55.028 [DEBUG] [Thread-186412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:43:55.028 [DEBUG] [Thread-186412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:43:55.028 [DEBUG] [Thread-186412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:43:55.028 [DEBUG] [Thread-186412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:43:55.028 [DEBUG] [Thread-186412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:43:55.028 [DEBUG] [Thread-186412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:43:55.028 [DEBUG] [Thread-186412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:43:55.028 [DEBUG] [Thread-186412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:43:55.028 [DEBUG] [Thread-186412] [transport.py] [_log()] client lang: <none>
2026-02-14T13:43:55.028 [DEBUG] [Thread-186412] [transport.py] [_log()] server lang: <none>
2026-02-14T13:43:55.028 [DEBUG] [Thread-186412] [transport.py] [_log()] kex follows: False
2026-02-14T13:43:55.028 [DEBUG] [Thread-186412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:43:55.028 [DEBUG] [Thread-186412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:43:55.028 [DEBUG] [Thread-186412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:43:55.028 [DEBUG] [Thread-186412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:43:55.028 [DEBUG] [Thread-186412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:43:55.028 [DEBUG] [Thread-186412] [transport.py] [_log()] Compression: none
2026-02-14T13:43:55.028 [DEBUG] [Thread-186412] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:43:55.085 [DEBUG] [Thread-186412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:43:55.085 [DEBUG] [Thread-186412] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:43:55.085 [DEBUG] [Thread-186412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:43:55.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:43:55.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:43:55.140 [DEBUG] [Thread-186412] [transport.py] [_log()] userauth is OK
2026-02-14T13:43:55.140 [DEBUG] [Thread-186412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:43:55.140 [DEBUG] [Thread-186412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:43:55.140 [DEBUG] [Thread-186412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:43:55.140 [DEBUG] [Thread-186412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:43:55.158 [INFO] [Thread-186412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:43:55.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-14T13:43:55.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:43:56.003 [DEBUG] [Thread-186412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:43:56.003 [DEBUG] [Thread-186412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:43:56.050 [DEBUG] [Thread-186412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:43:56.051 [DEBUG] [Thread-186412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:43:56.060 [DEBUG] [Thread-186412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:43:56.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:43:56.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:43:56.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-14T13:43:56.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:43:56.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:43:56.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:43:56.096 [DEBUG] [Thread-186412] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:44:09.003 [DEBUG] [Thread-186414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:44:24.060 [DEBUG] [Thread-186415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:44:24.586 [DEBUG] [Thread-186416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:44:26.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:44:26.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:44:26.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-14T13:44:27.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 43, 57), 14.82, 36.95, 0.0, 41.74, 16.07, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:44:27.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:43:57
2026-02-14T13:44:28.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:44:28.511 [DEBUG] [Thread-186417] [transport.py] [_log()] starting thread (client mode): 0xa2d3dbd0
2026-02-14T13:44:28.511 [DEBUG] [Thread-186417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:44:28.532 [DEBUG] [Thread-186417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:44:28.532 [INFO] [Thread-186417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:44:28.536 [DEBUG] [Thread-186417] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:44:28.536 [DEBUG] [Thread-186417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:44:28.536 [DEBUG] [Thread-186417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:44:28.536 [DEBUG] [Thread-186417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:44:28.536 [DEBUG] [Thread-186417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:44:28.536 [DEBUG] [Thread-186417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:44:28.536 [DEBUG] [Thread-186417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:44:28.536 [DEBUG] [Thread-186417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:44:28.537 [DEBUG] [Thread-186417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:44:28.537 [DEBUG] [Thread-186417] [transport.py] [_log()] client lang: <none>
2026-02-14T13:44:28.537 [DEBUG] [Thread-186417] [transport.py] [_log()] server lang: <none>
2026-02-14T13:44:28.537 [DEBUG] [Thread-186417] [transport.py] [_log()] kex follows: False
2026-02-14T13:44:28.537 [DEBUG] [Thread-186417] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:44:28.537 [DEBUG] [Thread-186417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:44:28.537 [DEBUG] [Thread-186417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:44:28.537 [DEBUG] [Thread-186417] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:44:28.537 [DEBUG] [Thread-186417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:44:28.537 [DEBUG] [Thread-186417] [transport.py] [_log()] Compression: none
2026-02-14T13:44:28.537 [DEBUG] [Thread-186417] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:44:28.556 [DEBUG] [Thread-186417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:44:28.557 [DEBUG] [Thread-186417] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:44:28.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:44:28.558 [DEBUG] [Thread-186417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:44:28.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:44:28.560 [DEBUG] [Thread-186417] [transport.py] [_log()] userauth is OK
2026-02-14T13:44:28.560 [DEBUG] [Thread-186417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:44:28.560 [DEBUG] [Thread-186417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:44:28.560 [DEBUG] [Thread-186417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:44:28.560 [DEBUG] [Thread-186417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:44:28.585 [INFO] [Thread-186417] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:44:28.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:44:29.383 [DEBUG] [Thread-186417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:44:29.384 [DEBUG] [Thread-186417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:44:29.384 [DEBUG] [Thread-186417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:44:29.425 [DEBUG] [Thread-186417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:44:29.425 [DEBUG] [Thread-186417] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:44:29.428 [DEBUG] [Thread-186417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:44:29.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:44:29.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:44:29.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:44:29.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:44:29.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:44:29.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:44:29.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:44:29.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:44:29.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:44:29.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.488651 -999.00  +16.20  25.21     42   +3.30 1 1 1 1 1   888    0 13.45 36.72 ----- 30.9 25.2 164.0 31.6 22.0 -28.3 20.9 -28.2 21.6 -26.1 22.7 -26.7
2026-02-14T13:44:29.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:44:29.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:44:29.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.488651
2026-02-14T13:44:29.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:44:29.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:44:29.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:44:29.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:44:29.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:44:29.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:43:57', tmtdew=14.82, humidity=36.95, cloud=0.0, wind=41.74, temperature=16.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:43:39.446', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:44:29.456 [DEBUG] [Thread-186417] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:44:29.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-14T13:44:29.552 [DEBUG] [Thread-186420] [transport.py] [_log()] starting thread (client mode): 0xa2d579a0
2026-02-14T13:44:29.552 [DEBUG] [Thread-186420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:44:29.566 [DEBUG] [Thread-186420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:44:29.567 [INFO] [Thread-186420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:44:29.574 [DEBUG] [Thread-186420] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:44:29.574 [DEBUG] [Thread-186420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:44:29.575 [DEBUG] [Thread-186420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:44:29.575 [DEBUG] [Thread-186420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:44:29.575 [DEBUG] [Thread-186420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:44:29.575 [DEBUG] [Thread-186420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:44:29.575 [DEBUG] [Thread-186420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:44:29.575 [DEBUG] [Thread-186420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:44:29.575 [DEBUG] [Thread-186420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:44:29.575 [DEBUG] [Thread-186420] [transport.py] [_log()] client lang: <none>
2026-02-14T13:44:29.576 [DEBUG] [Thread-186420] [transport.py] [_log()] server lang: <none>
2026-02-14T13:44:29.576 [DEBUG] [Thread-186420] [transport.py] [_log()] kex follows: False
2026-02-14T13:44:29.576 [DEBUG] [Thread-186420] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:44:29.576 [DEBUG] [Thread-186420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:44:29.576 [DEBUG] [Thread-186420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:44:29.576 [DEBUG] [Thread-186420] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:44:29.576 [DEBUG] [Thread-186420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:44:29.577 [DEBUG] [Thread-186420] [transport.py] [_log()] Compression: none
2026-02-14T13:44:29.577 [DEBUG] [Thread-186420] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:44:29.633 [DEBUG] [Thread-186420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:44:29.634 [DEBUG] [Thread-186420] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:44:29.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:44:29.635 [DEBUG] [Thread-186420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:44:29.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:44:29.688 [DEBUG] [Thread-186420] [transport.py] [_log()] userauth is OK
2026-02-14T13:44:29.689 [DEBUG] [Thread-186420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:44:29.689 [DEBUG] [Thread-186420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:44:29.689 [DEBUG] [Thread-186420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:44:29.689 [DEBUG] [Thread-186420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:44:29.708 [INFO] [Thread-186420] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:44:29.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-14T13:44:29.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:44:30.527 [DEBUG] [Thread-186420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:44:30.527 [DEBUG] [Thread-186420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:44:30.575 [DEBUG] [Thread-186420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:44:30.576 [DEBUG] [Thread-186420] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:44:30.585 [DEBUG] [Thread-186420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:44:30.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:44:30.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')
2026-02-14T13:44:30.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-14T13:44:30.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:44:30.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:44:30.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:44:30.621 [DEBUG] [Thread-186420] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:44:32.236 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:44:32.237 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:44:39.093 [DEBUG] [Thread-186422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:44:54.144 [DEBUG] [Thread-186423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:45:00.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:45:00.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:45:00.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-14T13:45:02.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 44, 33), 14.72, 37.12, 0.0, 36.13, 15.8, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:45:02.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:44:33
2026-02-14T13:45:02.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:45:03.044 [DEBUG] [Thread-186424] [transport.py] [_log()] starting thread (client mode): 0xa2d18a30
2026-02-14T13:45:03.044 [DEBUG] [Thread-186424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:45:03.064 [DEBUG] [Thread-186424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:45:03.064 [INFO] [Thread-186424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:45:03.068 [DEBUG] [Thread-186424] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:45:03.068 [DEBUG] [Thread-186424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:45:03.068 [DEBUG] [Thread-186424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:45:03.068 [DEBUG] [Thread-186424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:45:03.068 [DEBUG] [Thread-186424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:45:03.068 [DEBUG] [Thread-186424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:45:03.068 [DEBUG] [Thread-186424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:45:03.068 [DEBUG] [Thread-186424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:45:03.068 [DEBUG] [Thread-186424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:45:03.068 [DEBUG] [Thread-186424] [transport.py] [_log()] client lang: <none>
2026-02-14T13:45:03.068 [DEBUG] [Thread-186424] [transport.py] [_log()] server lang: <none>
2026-02-14T13:45:03.068 [DEBUG] [Thread-186424] [transport.py] [_log()] kex follows: False
2026-02-14T13:45:03.068 [DEBUG] [Thread-186424] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:45:03.068 [DEBUG] [Thread-186424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:45:03.068 [DEBUG] [Thread-186424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:45:03.068 [DEBUG] [Thread-186424] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:45:03.068 [DEBUG] [Thread-186424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:45:03.068 [DEBUG] [Thread-186424] [transport.py] [_log()] Compression: none
2026-02-14T13:45:03.068 [DEBUG] [Thread-186424] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:45:03.078 [DEBUG] [Thread-186424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:45:03.078 [DEBUG] [Thread-186424] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:45:03.079 [DEBUG] [Thread-186424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:45:03.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:45:03.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:45:03.080 [DEBUG] [Thread-186424] [transport.py] [_log()] userauth is OK
2026-02-14T13:45:03.080 [DEBUG] [Thread-186424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:45:03.080 [DEBUG] [Thread-186424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:45:03.080 [DEBUG] [Thread-186424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:45:03.080 [DEBUG] [Thread-186424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:45:03.092 [INFO] [Thread-186424] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:45:03.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:45:06.402 [DEBUG] [Thread-186424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:45:06.402 [DEBUG] [Thread-186424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:45:06.402 [DEBUG] [Thread-186424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:45:06.443 [DEBUG] [Thread-186424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:45:06.443 [DEBUG] [Thread-186424] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:45:06.446 [DEBUG] [Thread-186424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:45:06.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:45:06.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:45:06.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:45:06.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:45:06.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:45:06.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:45:06.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:45:06.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:45:06.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:45:06.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.489345 -999.00  +16.30  28.29     41   +3.10 1 1 1 1 1   888    0 13.61 39.62 ----- 29.0 28.3 165.6 34.0 22.0 -26.7 21.0 -25.5 21.6 -25.2 22.7 -27.3
2026-02-14T13:45:06.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:45:06.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:45:06.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.489345
2026-02-14T13:45:06.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:45:06.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:45:06.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:45:06.487 [DEBUG] [Thread-186424] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:45:06.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:45:06.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:45:06.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:44:33', tmtdew=14.72, humidity=37.12, cloud=0.0, wind=36.13, temperature=15.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:44:39.408', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:45:06.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T13:45:06.584 [DEBUG] [Thread-186427] [transport.py] [_log()] starting thread (client mode): 0xa2ddc880
2026-02-14T13:45:06.584 [DEBUG] [Thread-186427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:45:06.600 [DEBUG] [Thread-186427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:45:06.600 [INFO] [Thread-186427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:45:06.608 [DEBUG] [Thread-186427] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:45:06.608 [DEBUG] [Thread-186427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:45:06.608 [DEBUG] [Thread-186427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:45:06.608 [DEBUG] [Thread-186427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:45:06.608 [DEBUG] [Thread-186427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:45:06.608 [DEBUG] [Thread-186427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:45:06.608 [DEBUG] [Thread-186427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:45:06.608 [DEBUG] [Thread-186427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:45:06.608 [DEBUG] [Thread-186427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:45:06.608 [DEBUG] [Thread-186427] [transport.py] [_log()] client lang: <none>
2026-02-14T13:45:06.609 [DEBUG] [Thread-186427] [transport.py] [_log()] server lang: <none>
2026-02-14T13:45:06.609 [DEBUG] [Thread-186427] [transport.py] [_log()] kex follows: False
2026-02-14T13:45:06.609 [DEBUG] [Thread-186427] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:45:06.609 [DEBUG] [Thread-186427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:45:06.609 [DEBUG] [Thread-186427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:45:06.609 [DEBUG] [Thread-186427] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:45:06.609 [DEBUG] [Thread-186427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:45:06.609 [DEBUG] [Thread-186427] [transport.py] [_log()] Compression: none
2026-02-14T13:45:06.609 [DEBUG] [Thread-186427] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:45:06.669 [DEBUG] [Thread-186427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:45:06.670 [DEBUG] [Thread-186427] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:45:06.670 [DEBUG] [Thread-186427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:45:06.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:45:06.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:45:06.725 [DEBUG] [Thread-186427] [transport.py] [_log()] userauth is OK
2026-02-14T13:45:06.725 [DEBUG] [Thread-186427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:45:06.726 [DEBUG] [Thread-186427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:45:06.726 [DEBUG] [Thread-186427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:45:06.726 [DEBUG] [Thread-186427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:45:06.744 [INFO] [Thread-186427] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:45:06.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-14T13:45:06.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:45:07.590 [DEBUG] [Thread-186427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:45:07.591 [DEBUG] [Thread-186427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:45:07.638 [DEBUG] [Thread-186427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:45:07.638 [DEBUG] [Thread-186427] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:45:07.648 [DEBUG] [Thread-186427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:45:07.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:45:07.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-14T13:45:07.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-14T13:45:07.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:45:07.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:45:07.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:45:07.685 [DEBUG] [Thread-186427] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:45:09.180 [DEBUG] [Thread-186429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:45:24.241 [DEBUG] [Thread-186430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:45:24.636 [DEBUG] [Thread-186431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:45:32.391 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:45:32.392 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:45:37.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:45:37.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:45:37.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:45:39.277 [DEBUG] [Thread-186432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:45:39.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 45, 8), 14.57, 37.43, 0.0, 34.44, 15.69, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:45:39.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:45:08
2026-02-14T13:45:39.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:45:40.046 [DEBUG] [Thread-186433] [transport.py] [_log()] starting thread (client mode): 0xa2d1bbb0
2026-02-14T13:45:40.047 [DEBUG] [Thread-186433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:45:40.067 [DEBUG] [Thread-186433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:45:40.068 [INFO] [Thread-186433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:45:40.069 [DEBUG] [Thread-186433] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:45:40.070 [DEBUG] [Thread-186433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:45:40.070 [DEBUG] [Thread-186433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:45:40.070 [DEBUG] [Thread-186433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:45:40.070 [DEBUG] [Thread-186433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:45:40.070 [DEBUG] [Thread-186433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:45:40.070 [DEBUG] [Thread-186433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:45:40.070 [DEBUG] [Thread-186433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:45:40.070 [DEBUG] [Thread-186433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:45:40.070 [DEBUG] [Thread-186433] [transport.py] [_log()] client lang: <none>
2026-02-14T13:45:40.070 [DEBUG] [Thread-186433] [transport.py] [_log()] server lang: <none>
2026-02-14T13:45:40.070 [DEBUG] [Thread-186433] [transport.py] [_log()] kex follows: False
2026-02-14T13:45:40.070 [DEBUG] [Thread-186433] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:45:40.070 [DEBUG] [Thread-186433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:45:40.070 [DEBUG] [Thread-186433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:45:40.070 [DEBUG] [Thread-186433] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:45:40.070 [DEBUG] [Thread-186433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:45:40.070 [DEBUG] [Thread-186433] [transport.py] [_log()] Compression: none
2026-02-14T13:45:40.070 [DEBUG] [Thread-186433] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:45:40.085 [DEBUG] [Thread-186433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:45:40.085 [DEBUG] [Thread-186433] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:45:40.086 [DEBUG] [Thread-186433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:45:40.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:45:40.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:45:40.088 [DEBUG] [Thread-186433] [transport.py] [_log()] userauth is OK
2026-02-14T13:45:40.089 [DEBUG] [Thread-186433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:45:40.089 [DEBUG] [Thread-186433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:45:40.089 [DEBUG] [Thread-186433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:45:40.089 [DEBUG] [Thread-186433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:45:40.115 [INFO] [Thread-186433] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:45:40.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:45:40.677 [DEBUG] [Thread-186433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:45:40.678 [DEBUG] [Thread-186433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:45:40.678 [DEBUG] [Thread-186433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:45:40.718 [DEBUG] [Thread-186433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:45:40.719 [DEBUG] [Thread-186433] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:45:40.722 [DEBUG] [Thread-186433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:45:40.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:45:40.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:45:40.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:45:40.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:45:40.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:45:40.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:45:40.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:45:40.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:45:40.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:45:40.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.489692 -999.00  +16.10  24.26     41   +2.80 1 1 1 1 1   888    0 13.51 41.61 ----- 31.4 24.3 183.4 35.9 22.0 -27.2 20.7 -33.6 21.6 -26.7 22.7 -29.9
2026-02-14T13:45:40.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:45:40.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:45:40.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.489692
2026-02-14T13:45:40.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:45:40.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:45:40.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:45:40.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:45:40.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:45:40.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:45:08', tmtdew=14.57, humidity=37.43, cloud=0.0, wind=34.44, temperature=15.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:45:09.389', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:45:40.748 [DEBUG] [Thread-186433] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:45:40.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-14T13:45:40.843 [DEBUG] [Thread-186436] [transport.py] [_log()] starting thread (client mode): 0xa2ddfac0
2026-02-14T13:45:40.843 [DEBUG] [Thread-186436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:45:40.857 [DEBUG] [Thread-186436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:45:40.858 [INFO] [Thread-186436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:45:40.865 [DEBUG] [Thread-186436] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:45:40.866 [DEBUG] [Thread-186436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:45:40.866 [DEBUG] [Thread-186436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:45:40.866 [DEBUG] [Thread-186436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:45:40.866 [DEBUG] [Thread-186436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:45:40.866 [DEBUG] [Thread-186436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:45:40.866 [DEBUG] [Thread-186436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:45:40.866 [DEBUG] [Thread-186436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:45:40.866 [DEBUG] [Thread-186436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:45:40.866 [DEBUG] [Thread-186436] [transport.py] [_log()] client lang: <none>
2026-02-14T13:45:40.866 [DEBUG] [Thread-186436] [transport.py] [_log()] server lang: <none>
2026-02-14T13:45:40.866 [DEBUG] [Thread-186436] [transport.py] [_log()] kex follows: False
2026-02-14T13:45:40.866 [DEBUG] [Thread-186436] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:45:40.866 [DEBUG] [Thread-186436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:45:40.866 [DEBUG] [Thread-186436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:45:40.866 [DEBUG] [Thread-186436] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:45:40.866 [DEBUG] [Thread-186436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:45:40.866 [DEBUG] [Thread-186436] [transport.py] [_log()] Compression: none
2026-02-14T13:45:40.867 [DEBUG] [Thread-186436] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:45:40.924 [DEBUG] [Thread-186436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:45:40.925 [DEBUG] [Thread-186436] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:45:40.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:45:40.926 [DEBUG] [Thread-186436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:45:40.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:45:40.981 [DEBUG] [Thread-186436] [transport.py] [_log()] userauth is OK
2026-02-14T13:45:40.981 [DEBUG] [Thread-186436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:45:40.982 [DEBUG] [Thread-186436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:45:40.982 [DEBUG] [Thread-186436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:45:40.982 [DEBUG] [Thread-186436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:45:41.000 [INFO] [Thread-186436] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:45:41.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-14T13:45:41.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:45:41.810 [DEBUG] [Thread-186436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:45:41.810 [DEBUG] [Thread-186436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:45:41.859 [DEBUG] [Thread-186436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:45:41.859 [DEBUG] [Thread-186436] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:45:41.868 [DEBUG] [Thread-186436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:45:41.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:45:41.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-14T13:45:41.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-14T13:45:41.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:45:41.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:45:41.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:45:41.906 [DEBUG] [Thread-186436] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:45:54.317 [DEBUG] [Thread-186438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:46:09.368 [DEBUG] [Thread-186439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:46:11.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:46:11.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:46:11.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-14T13:46:13.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 45, 43), 15.09, 35.88, 0.0, 29.73, 15.84, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:46:13.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:45:43
2026-02-14T13:46:14.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:46:14.381 [DEBUG] [Thread-186440] [transport.py] [_log()] starting thread (client mode): 0xa2ddd420
2026-02-14T13:46:14.382 [DEBUG] [Thread-186440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:46:14.402 [DEBUG] [Thread-186440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:46:14.402 [INFO] [Thread-186440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:46:14.404 [DEBUG] [Thread-186440] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:46:14.404 [DEBUG] [Thread-186440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:46:14.404 [DEBUG] [Thread-186440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:46:14.404 [DEBUG] [Thread-186440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:46:14.404 [DEBUG] [Thread-186440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:46:14.404 [DEBUG] [Thread-186440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:46:14.404 [DEBUG] [Thread-186440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:46:14.404 [DEBUG] [Thread-186440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:46:14.405 [DEBUG] [Thread-186440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:46:14.405 [DEBUG] [Thread-186440] [transport.py] [_log()] client lang: <none>
2026-02-14T13:46:14.405 [DEBUG] [Thread-186440] [transport.py] [_log()] server lang: <none>
2026-02-14T13:46:14.405 [DEBUG] [Thread-186440] [transport.py] [_log()] kex follows: False
2026-02-14T13:46:14.405 [DEBUG] [Thread-186440] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:46:14.405 [DEBUG] [Thread-186440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:46:14.405 [DEBUG] [Thread-186440] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:46:14.405 [DEBUG] [Thread-186440] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:46:14.405 [DEBUG] [Thread-186440] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:46:14.405 [DEBUG] [Thread-186440] [transport.py] [_log()] Compression: none
2026-02-14T13:46:14.405 [DEBUG] [Thread-186440] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:46:14.417 [DEBUG] [Thread-186440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:46:14.417 [DEBUG] [Thread-186440] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:46:14.418 [DEBUG] [Thread-186440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:46:14.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:46:14.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:46:14.420 [DEBUG] [Thread-186440] [transport.py] [_log()] userauth is OK
2026-02-14T13:46:14.420 [DEBUG] [Thread-186440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:46:14.420 [DEBUG] [Thread-186440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:46:14.420 [DEBUG] [Thread-186440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:46:14.420 [DEBUG] [Thread-186440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:46:14.456 [INFO] [Thread-186440] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:46:14.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:46:15.094 [DEBUG] [Thread-186440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:46:15.095 [DEBUG] [Thread-186440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:46:15.095 [DEBUG] [Thread-186440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:46:15.137 [DEBUG] [Thread-186440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:46:15.137 [DEBUG] [Thread-186440] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:46:15.139 [DEBUG] [Thread-186440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:46:15.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:46:15.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:46:15.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:46:15.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:46:15.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:46:15.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:46:15.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:46:15.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:46:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:46:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.490039 -999.00  +15.70  23.44     41   +2.80 1 1 1 1 1   888    0 13.54 37.97 ----- 24.2 23.4 179.4 33.0 21.9 -26.6 20.6 -27.2 21.6 -26.3 22.7 -25.7
2026-02-14T13:46:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:46:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:46:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.490039
2026-02-14T13:46:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:46:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:46:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:46:15.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:46:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:46:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:45:43', tmtdew=15.09, humidity=35.88, cloud=0.0, wind=29.73, temperature=15.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:45:39.370', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:46:15.161 [DEBUG] [Thread-186440] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:46:15.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-14T13:46:15.276 [DEBUG] [Thread-186443] [transport.py] [_log()] starting thread (client mode): 0xa2d57d00
2026-02-14T13:46:15.276 [DEBUG] [Thread-186443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:46:15.290 [DEBUG] [Thread-186443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:46:15.290 [INFO] [Thread-186443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:46:15.297 [DEBUG] [Thread-186443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:46:15.297 [DEBUG] [Thread-186443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:46:15.297 [DEBUG] [Thread-186443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:46:15.297 [DEBUG] [Thread-186443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:46:15.297 [DEBUG] [Thread-186443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:46:15.297 [DEBUG] [Thread-186443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:46:15.297 [DEBUG] [Thread-186443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:46:15.298 [DEBUG] [Thread-186443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:46:15.298 [DEBUG] [Thread-186443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:46:15.298 [DEBUG] [Thread-186443] [transport.py] [_log()] client lang: <none>
2026-02-14T13:46:15.298 [DEBUG] [Thread-186443] [transport.py] [_log()] server lang: <none>
2026-02-14T13:46:15.298 [DEBUG] [Thread-186443] [transport.py] [_log()] kex follows: False
2026-02-14T13:46:15.298 [DEBUG] [Thread-186443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:46:15.298 [DEBUG] [Thread-186443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:46:15.298 [DEBUG] [Thread-186443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:46:15.298 [DEBUG] [Thread-186443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:46:15.298 [DEBUG] [Thread-186443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:46:15.298 [DEBUG] [Thread-186443] [transport.py] [_log()] Compression: none
2026-02-14T13:46:15.298 [DEBUG] [Thread-186443] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:46:15.360 [DEBUG] [Thread-186443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:46:15.361 [DEBUG] [Thread-186443] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:46:15.361 [DEBUG] [Thread-186443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:46:15.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:46:15.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:46:15.416 [DEBUG] [Thread-186443] [transport.py] [_log()] userauth is OK
2026-02-14T13:46:15.416 [DEBUG] [Thread-186443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:46:15.417 [DEBUG] [Thread-186443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:46:15.417 [DEBUG] [Thread-186443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:46:15.417 [DEBUG] [Thread-186443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:46:15.435 [INFO] [Thread-186443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:46:15.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T13:46:15.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:46:16.262 [DEBUG] [Thread-186443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:46:16.263 [DEBUG] [Thread-186443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:46:16.311 [DEBUG] [Thread-186443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:46:16.311 [DEBUG] [Thread-186443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:46:16.320 [DEBUG] [Thread-186443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:46:16.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:46:16.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-14T13:46:16.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:46:16.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:46:16.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:46:16.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:46:16.353 [DEBUG] [Thread-186443] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:46:24.400 [DEBUG] [Thread-186445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:46:24.668 [DEBUG] [Thread-186446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:46:32.535 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:46:32.536 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:46:39.450 [DEBUG] [Thread-186447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:46:46.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:46:46.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:46:46.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-14T13:46:48.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 46, 18), 15.17, 35.7, 0.0, 31.97, 15.82, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:46:48.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:46:18
2026-02-14T13:46:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:46:48.841 [DEBUG] [Thread-186448] [transport.py] [_log()] starting thread (client mode): 0xa5743bb0
2026-02-14T13:46:48.842 [DEBUG] [Thread-186448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:46:48.855 [DEBUG] [Thread-186448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:46:48.855 [INFO] [Thread-186448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:46:48.856 [DEBUG] [Thread-186448] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:46:48.856 [DEBUG] [Thread-186448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:46:48.856 [DEBUG] [Thread-186448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:46:48.856 [DEBUG] [Thread-186448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:46:48.856 [DEBUG] [Thread-186448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:46:48.856 [DEBUG] [Thread-186448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:46:48.856 [DEBUG] [Thread-186448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:46:48.856 [DEBUG] [Thread-186448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:46:48.856 [DEBUG] [Thread-186448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:46:48.856 [DEBUG] [Thread-186448] [transport.py] [_log()] client lang: <none>
2026-02-14T13:46:48.856 [DEBUG] [Thread-186448] [transport.py] [_log()] server lang: <none>
2026-02-14T13:46:48.856 [DEBUG] [Thread-186448] [transport.py] [_log()] kex follows: False
2026-02-14T13:46:48.856 [DEBUG] [Thread-186448] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:46:48.856 [DEBUG] [Thread-186448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:46:48.856 [DEBUG] [Thread-186448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:46:48.856 [DEBUG] [Thread-186448] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:46:48.856 [DEBUG] [Thread-186448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:46:48.856 [DEBUG] [Thread-186448] [transport.py] [_log()] Compression: none
2026-02-14T13:46:48.856 [DEBUG] [Thread-186448] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:46:48.874 [DEBUG] [Thread-186448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:46:48.875 [DEBUG] [Thread-186448] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:46:48.875 [DEBUG] [Thread-186448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:46:48.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:46:48.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:46:48.877 [DEBUG] [Thread-186448] [transport.py] [_log()] userauth is OK
2026-02-14T13:46:48.877 [DEBUG] [Thread-186448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:46:48.877 [DEBUG] [Thread-186448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:46:48.877 [DEBUG] [Thread-186448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:46:48.877 [DEBUG] [Thread-186448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:46:48.896 [INFO] [Thread-186448] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:46:48.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:46:49.656 [DEBUG] [Thread-186448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:46:49.656 [DEBUG] [Thread-186448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:46:49.656 [DEBUG] [Thread-186448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:46:49.697 [DEBUG] [Thread-186448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:46:49.698 [DEBUG] [Thread-186448] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:46:49.701 [DEBUG] [Thread-186448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:46:49.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:46:49.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:46:49.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:46:49.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:46:49.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:46:49.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:46:49.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:46:49.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:46:49.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:46:49.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.490387 -999.00  +15.50  26.65     42   +2.70 1 1 1 1 1   888    0 13.66 40.66 ----- 23.6 26.6 173.4 40.8 21.8 -27.5 20.6 -26.4 21.4 -26.7 22.5 -26.9
2026-02-14T13:46:49.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:46:49.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:46:49.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.490387
2026-02-14T13:46:49.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:46:49.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:46:49.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:46:49.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:46:49.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:46:49.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:46:18', tmtdew=15.17, humidity=35.7, cloud=0.0, wind=31.97, temperature=15.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:46:09.437', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:46:49.720 [DEBUG] [Thread-186448] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:46:49.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-14T13:46:54.484 [DEBUG] [Thread-186451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:47:09.540 [DEBUG] [Thread-186452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:47:24.577 [DEBUG] [Thread-186453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:47:24.701 [DEBUG] [Thread-186454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:47:32.678 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:47:32.679 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:47:39.617 [DEBUG] [Thread-186455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:47:54.658 [DEBUG] [Thread-186456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:48:09.699 [DEBUG] [Thread-186457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:48:24.732 [DEBUG] [Thread-186458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:48:24.736 [DEBUG] [Thread-186459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:48:32.821 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:48:32.822 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:48:39.766 [DEBUG] [Thread-186460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:48:54.803 [DEBUG] [Thread-186461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:49:05.207 [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-14T13:49:09.841 [DEBUG] [Thread-186462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:49:24.770 [DEBUG] [Thread-186463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:49:24.876 [DEBUG] [Thread-186464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:49:32.964 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:49:32.965 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:49:35.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:49:35.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:49:35.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-14T13:49:37.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 49, 16), 14.94, 36.07, 0.0, 29.57, 15.77, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:49:37.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:49:16
2026-02-14T13:49:37.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:49:37.640 [DEBUG] [Thread-186465] [transport.py] [_log()] starting thread (client mode): 0xa2d57fa0
2026-02-14T13:49:37.640 [DEBUG] [Thread-186465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:49:37.660 [DEBUG] [Thread-186465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:49:37.660 [INFO] [Thread-186465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:49:37.661 [DEBUG] [Thread-186465] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:49:37.661 [DEBUG] [Thread-186465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:49:37.661 [DEBUG] [Thread-186465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:49:37.661 [DEBUG] [Thread-186465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:49:37.661 [DEBUG] [Thread-186465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:49:37.661 [DEBUG] [Thread-186465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:49:37.661 [DEBUG] [Thread-186465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:49:37.661 [DEBUG] [Thread-186465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:49:37.661 [DEBUG] [Thread-186465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:49:37.661 [DEBUG] [Thread-186465] [transport.py] [_log()] client lang: <none>
2026-02-14T13:49:37.661 [DEBUG] [Thread-186465] [transport.py] [_log()] server lang: <none>
2026-02-14T13:49:37.661 [DEBUG] [Thread-186465] [transport.py] [_log()] kex follows: False
2026-02-14T13:49:37.661 [DEBUG] [Thread-186465] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:49:37.661 [DEBUG] [Thread-186465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:49:37.661 [DEBUG] [Thread-186465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:49:37.661 [DEBUG] [Thread-186465] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:49:37.661 [DEBUG] [Thread-186465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:49:37.661 [DEBUG] [Thread-186465] [transport.py] [_log()] Compression: none
2026-02-14T13:49:37.661 [DEBUG] [Thread-186465] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:49:37.669 [DEBUG] [Thread-186465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:49:37.670 [DEBUG] [Thread-186465] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:49:37.670 [DEBUG] [Thread-186465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:49:37.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:49:37.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:49:37.671 [DEBUG] [Thread-186465] [transport.py] [_log()] userauth is OK
2026-02-14T13:49:37.672 [DEBUG] [Thread-186465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:49:37.672 [DEBUG] [Thread-186465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:49:37.672 [DEBUG] [Thread-186465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:49:37.672 [DEBUG] [Thread-186465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:49:37.688 [INFO] [Thread-186465] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:49:37.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:49:38.270 [DEBUG] [Thread-186465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:49:38.270 [DEBUG] [Thread-186465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:49:38.271 [DEBUG] [Thread-186465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:49:38.312 [DEBUG] [Thread-186465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:49:38.312 [DEBUG] [Thread-186465] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:49:38.315 [DEBUG] [Thread-186465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:49:38.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:49:38.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:49:38.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:49:38.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:49:38.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:49:38.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:49:38.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:49:38.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:49:38.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:49:38.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.492123 -999.00  +16.40  12.20     40   +2.90 1 1 1 1 1   888    0 14.34 49.26 ----- 14.5 12.2 165.2 27.3 22.4 -26.1 21.2 -26.1 21.9 -24.5 23.1 -26.9
2026-02-14T13:49:38.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:49:38.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:49:38.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.492123
2026-02-14T13:49:38.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:49:38.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:49:38.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:49:38.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:49:38.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:49:38.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:49:16', tmtdew=14.94, humidity=36.07, cloud=0.0, wind=29.57, temperature=15.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:48:39.427', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:49:38.342 [DEBUG] [Thread-186465] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:49:38.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-14T13:49:38.438 [DEBUG] [Thread-186468] [transport.py] [_log()] starting thread (client mode): 0xa5740760
2026-02-14T13:49:38.438 [DEBUG] [Thread-186468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:49:38.456 [DEBUG] [Thread-186468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:49:38.457 [INFO] [Thread-186468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:49:38.464 [DEBUG] [Thread-186468] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:49:38.464 [DEBUG] [Thread-186468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:49:38.464 [DEBUG] [Thread-186468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:49:38.464 [DEBUG] [Thread-186468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:49:38.464 [DEBUG] [Thread-186468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:49:38.465 [DEBUG] [Thread-186468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:49:38.465 [DEBUG] [Thread-186468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:49:38.465 [DEBUG] [Thread-186468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:49:38.465 [DEBUG] [Thread-186468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:49:38.465 [DEBUG] [Thread-186468] [transport.py] [_log()] client lang: <none>
2026-02-14T13:49:38.465 [DEBUG] [Thread-186468] [transport.py] [_log()] server lang: <none>
2026-02-14T13:49:38.465 [DEBUG] [Thread-186468] [transport.py] [_log()] kex follows: False
2026-02-14T13:49:38.465 [DEBUG] [Thread-186468] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:49:38.465 [DEBUG] [Thread-186468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:49:38.465 [DEBUG] [Thread-186468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:49:38.465 [DEBUG] [Thread-186468] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:49:38.465 [DEBUG] [Thread-186468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:49:38.465 [DEBUG] [Thread-186468] [transport.py] [_log()] Compression: none
2026-02-14T13:49:38.465 [DEBUG] [Thread-186468] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:49:38.528 [DEBUG] [Thread-186468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:49:38.528 [DEBUG] [Thread-186468] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:49:38.538 [DEBUG] [Thread-186468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:49:38.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:49:38.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:49:38.587 [DEBUG] [Thread-186468] [transport.py] [_log()] userauth is OK
2026-02-14T13:49:38.587 [DEBUG] [Thread-186468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:49:38.587 [DEBUG] [Thread-186468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:49:38.587 [DEBUG] [Thread-186468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:49:38.587 [DEBUG] [Thread-186468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:49:38.612 [INFO] [Thread-186468] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:49:38.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-14T13:49:38.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:49:39.422 [DEBUG] [Thread-186468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:49:39.422 [DEBUG] [Thread-186468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:49:39.470 [DEBUG] [Thread-186468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:49:39.471 [DEBUG] [Thread-186468] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:49:39.480 [DEBUG] [Thread-186468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:49:39.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:49:39.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:49:39.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:49:39.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:49:39.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:49:39.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:49:39.517 [DEBUG] [Thread-186468] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:49:39.914 [DEBUG] [Thread-186470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:49:54.974 [DEBUG] [Thread-186471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:50:09.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:50:09.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:50:09.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:50:10.012 [DEBUG] [Thread-186472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:50:11.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 49, 52), 15.44, 35.32, 0.0, 35.2, 16.22, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:50:11.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:49:52
2026-02-14T13:50:12.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:50:12.562 [DEBUG] [Thread-186473] [transport.py] [_log()] starting thread (client mode): 0xa57419f0
2026-02-14T13:50:12.562 [DEBUG] [Thread-186473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:50:12.583 [DEBUG] [Thread-186473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:50:12.583 [INFO] [Thread-186473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:50:12.586 [DEBUG] [Thread-186473] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:50:12.586 [DEBUG] [Thread-186473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:50:12.586 [DEBUG] [Thread-186473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:50:12.586 [DEBUG] [Thread-186473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:50:12.587 [DEBUG] [Thread-186473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:50:12.587 [DEBUG] [Thread-186473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:50:12.587 [DEBUG] [Thread-186473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:50:12.587 [DEBUG] [Thread-186473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:50:12.587 [DEBUG] [Thread-186473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:50:12.587 [DEBUG] [Thread-186473] [transport.py] [_log()] client lang: <none>
2026-02-14T13:50:12.587 [DEBUG] [Thread-186473] [transport.py] [_log()] server lang: <none>
2026-02-14T13:50:12.587 [DEBUG] [Thread-186473] [transport.py] [_log()] kex follows: False
2026-02-14T13:50:12.587 [DEBUG] [Thread-186473] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:50:12.587 [DEBUG] [Thread-186473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:50:12.587 [DEBUG] [Thread-186473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:50:12.587 [DEBUG] [Thread-186473] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:50:12.587 [DEBUG] [Thread-186473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:50:12.587 [DEBUG] [Thread-186473] [transport.py] [_log()] Compression: none
2026-02-14T13:50:12.587 [DEBUG] [Thread-186473] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:50:12.603 [DEBUG] [Thread-186473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:50:12.604 [DEBUG] [Thread-186473] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:50:12.605 [DEBUG] [Thread-186473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:50:12.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:50:12.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:50:12.607 [DEBUG] [Thread-186473] [transport.py] [_log()] userauth is OK
2026-02-14T13:50:12.607 [DEBUG] [Thread-186473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:50:12.607 [DEBUG] [Thread-186473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:50:12.607 [DEBUG] [Thread-186473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:50:12.607 [DEBUG] [Thread-186473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:50:12.631 [INFO] [Thread-186473] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:50:12.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:50:20.932 [DEBUG] [Thread-186473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:50:20.933 [DEBUG] [Thread-186473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:50:20.933 [DEBUG] [Thread-186473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:50:20.974 [DEBUG] [Thread-186473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:50:20.974 [DEBUG] [Thread-186473] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:50:20.978 [DEBUG] [Thread-186473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:50:21.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:50:21.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:50:21.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:50:21.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:50:21.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:50:21.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:50:21.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:50:21.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:50:21.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:50:21.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.492817 -999.00  +15.50  28.33     40   +2.20 1 1 1 1 1   888    0 14.32 56.65 ----- 27.9 28.3 146.6 41.3 22.1 -27.6 21.1 -26.8 21.7 -25.7 22.8 -29.0
2026-02-14T13:50:21.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:50:21.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:50:21.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.492817
2026-02-14T13:50:21.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:50:21.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:50:21.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:50:21.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:50:21.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:50:21.209 [DEBUG] [Thread-186473] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:50:21.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:49:52', tmtdew=15.44, humidity=35.32, cloud=0.0, wind=35.2, temperature=16.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:49:39.389', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:50:21.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-14T13:50:21.304 [DEBUG] [Thread-186476] [transport.py] [_log()] starting thread (client mode): 0xa2dde290
2026-02-14T13:50:21.305 [DEBUG] [Thread-186476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:50:21.319 [DEBUG] [Thread-186476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:50:21.319 [INFO] [Thread-186476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:50:21.327 [DEBUG] [Thread-186476] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:50:21.327 [DEBUG] [Thread-186476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:50:21.327 [DEBUG] [Thread-186476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:50:21.327 [DEBUG] [Thread-186476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:50:21.327 [DEBUG] [Thread-186476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:50:21.327 [DEBUG] [Thread-186476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:50:21.327 [DEBUG] [Thread-186476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:50:21.327 [DEBUG] [Thread-186476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:50:21.327 [DEBUG] [Thread-186476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:50:21.327 [DEBUG] [Thread-186476] [transport.py] [_log()] client lang: <none>
2026-02-14T13:50:21.327 [DEBUG] [Thread-186476] [transport.py] [_log()] server lang: <none>
2026-02-14T13:50:21.328 [DEBUG] [Thread-186476] [transport.py] [_log()] kex follows: False
2026-02-14T13:50:21.328 [DEBUG] [Thread-186476] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:50:21.328 [DEBUG] [Thread-186476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:50:21.328 [DEBUG] [Thread-186476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:50:21.328 [DEBUG] [Thread-186476] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:50:21.328 [DEBUG] [Thread-186476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:50:21.328 [DEBUG] [Thread-186476] [transport.py] [_log()] Compression: none
2026-02-14T13:50:21.328 [DEBUG] [Thread-186476] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:50:21.384 [DEBUG] [Thread-186476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:50:21.385 [DEBUG] [Thread-186476] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:50:21.386 [DEBUG] [Thread-186476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:50:21.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:50:21.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:50:21.441 [DEBUG] [Thread-186476] [transport.py] [_log()] userauth is OK
2026-02-14T13:50:21.441 [DEBUG] [Thread-186476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:50:21.441 [DEBUG] [Thread-186476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:50:21.441 [DEBUG] [Thread-186476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:50:21.441 [DEBUG] [Thread-186476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:50:21.460 [INFO] [Thread-186476] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:50:21.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-14T13:50:21.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:50:22.280 [DEBUG] [Thread-186476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:50:22.281 [DEBUG] [Thread-186476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:50:22.328 [DEBUG] [Thread-186476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:50:22.329 [DEBUG] [Thread-186476] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:50:22.338 [DEBUG] [Thread-186476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:50:22.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:50:22.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')
2026-02-14T13:50:22.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-14T13:50:22.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:50:22.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:50:22.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:50:22.374 [DEBUG] [Thread-186476] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:50:24.821 [DEBUG] [Thread-186478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:50:25.049 [DEBUG] [Thread-186479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:50:33.106 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:50:33.107 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:50:40.101 [DEBUG] [Thread-186480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:50:52.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:50:52.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:50:52.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-14T13:50:54.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 50, 28), 15.35, 35.5, 0.0, 32.13, 16.12, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:50:54.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:50:28
2026-02-14T13:50:54.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:50:54.838 [DEBUG] [Thread-186481] [transport.py] [_log()] starting thread (client mode): 0xa2dea260
2026-02-14T13:50:54.838 [DEBUG] [Thread-186481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:50:54.850 [DEBUG] [Thread-186481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:50:54.851 [INFO] [Thread-186481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:50:54.854 [DEBUG] [Thread-186481] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:50:54.854 [DEBUG] [Thread-186481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:50:54.854 [DEBUG] [Thread-186481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:50:54.854 [DEBUG] [Thread-186481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:50:54.854 [DEBUG] [Thread-186481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:50:54.854 [DEBUG] [Thread-186481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:50:54.854 [DEBUG] [Thread-186481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:50:54.854 [DEBUG] [Thread-186481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:50:54.854 [DEBUG] [Thread-186481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:50:54.854 [DEBUG] [Thread-186481] [transport.py] [_log()] client lang: <none>
2026-02-14T13:50:54.854 [DEBUG] [Thread-186481] [transport.py] [_log()] server lang: <none>
2026-02-14T13:50:54.854 [DEBUG] [Thread-186481] [transport.py] [_log()] kex follows: False
2026-02-14T13:50:54.854 [DEBUG] [Thread-186481] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:50:54.854 [DEBUG] [Thread-186481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:50:54.854 [DEBUG] [Thread-186481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:50:54.854 [DEBUG] [Thread-186481] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:50:54.854 [DEBUG] [Thread-186481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:50:54.854 [DEBUG] [Thread-186481] [transport.py] [_log()] Compression: none
2026-02-14T13:50:54.854 [DEBUG] [Thread-186481] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:50:54.867 [DEBUG] [Thread-186481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:50:54.867 [DEBUG] [Thread-186481] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:50:54.868 [DEBUG] [Thread-186481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:50:54.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:50:54.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:50:54.869 [DEBUG] [Thread-186481] [transport.py] [_log()] userauth is OK
2026-02-14T13:50:54.869 [DEBUG] [Thread-186481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:50:54.870 [DEBUG] [Thread-186481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:50:54.870 [DEBUG] [Thread-186481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:50:54.870 [DEBUG] [Thread-186481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:50:54.893 [INFO] [Thread-186481] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:50:54.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:50:55.139 [DEBUG] [Thread-186483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:50:55.516 [DEBUG] [Thread-186481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:50:55.517 [DEBUG] [Thread-186481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:50:55.517 [DEBUG] [Thread-186481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:50:55.558 [DEBUG] [Thread-186481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:50:55.558 [DEBUG] [Thread-186481] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:50:55.561 [DEBUG] [Thread-186481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:50:55.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:50:55.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:50:55.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:50:55.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:50:55.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:50:55.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:50:55.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:50:55.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:50:55.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:50:55.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.493512 -999.00  +15.20  19.06     43   +2.80 1 1 1 1 1   888    0 14.02 51.97 ----- 21.0 19.1 144.3 41.0 21.9 -28.1 20.9 -25.8 21.6 -26.2 22.8 -27.3
2026-02-14T13:50:55.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:50:55.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:50:55.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.493512
2026-02-14T13:50:55.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:50:55.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:50:55.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:50:55.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:50:55.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:50:55.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:50:28', tmtdew=15.35, humidity=35.5, cloud=0.0, wind=32.13, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:50:39.437', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:50:55.589 [DEBUG] [Thread-186481] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:50:55.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-14T13:50:55.684 [DEBUG] [Thread-186485] [transport.py] [_log()] starting thread (client mode): 0xa2deb0a0
2026-02-14T13:50:55.684 [DEBUG] [Thread-186485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:50:55.699 [DEBUG] [Thread-186485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:50:55.699 [INFO] [Thread-186485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:50:55.707 [DEBUG] [Thread-186485] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:50:55.707 [DEBUG] [Thread-186485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:50:55.707 [DEBUG] [Thread-186485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:50:55.707 [DEBUG] [Thread-186485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:50:55.707 [DEBUG] [Thread-186485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:50:55.707 [DEBUG] [Thread-186485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:50:55.707 [DEBUG] [Thread-186485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:50:55.707 [DEBUG] [Thread-186485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:50:55.707 [DEBUG] [Thread-186485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:50:55.707 [DEBUG] [Thread-186485] [transport.py] [_log()] client lang: <none>
2026-02-14T13:50:55.707 [DEBUG] [Thread-186485] [transport.py] [_log()] server lang: <none>
2026-02-14T13:50:55.707 [DEBUG] [Thread-186485] [transport.py] [_log()] kex follows: False
2026-02-14T13:50:55.707 [DEBUG] [Thread-186485] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:50:55.708 [DEBUG] [Thread-186485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:50:55.708 [DEBUG] [Thread-186485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:50:55.708 [DEBUG] [Thread-186485] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:50:55.708 [DEBUG] [Thread-186485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:50:55.708 [DEBUG] [Thread-186485] [transport.py] [_log()] Compression: none
2026-02-14T13:50:55.708 [DEBUG] [Thread-186485] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:50:55.764 [DEBUG] [Thread-186485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:50:55.765 [DEBUG] [Thread-186485] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:50:55.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:50:55.766 [DEBUG] [Thread-186485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:50:55.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:50:55.821 [DEBUG] [Thread-186485] [transport.py] [_log()] userauth is OK
2026-02-14T13:50:55.821 [DEBUG] [Thread-186485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:50:55.821 [DEBUG] [Thread-186485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:50:55.821 [DEBUG] [Thread-186485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:50:55.821 [DEBUG] [Thread-186485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:50:55.840 [INFO] [Thread-186485] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:50:55.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-14T13:50:55.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:50:56.721 [DEBUG] [Thread-186485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:50:56.722 [DEBUG] [Thread-186485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:50:56.769 [DEBUG] [Thread-186485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:50:56.770 [DEBUG] [Thread-186485] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:50:56.779 [DEBUG] [Thread-186485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:50:56.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:50:56.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:50:56.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:50:56.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:50:56.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:50:56.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:50:56.816 [DEBUG] [Thread-186485] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:51:10.175 [DEBUG] [Thread-186487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:51:24.854 [DEBUG] [Thread-186488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:51:25.237 [DEBUG] [Thread-186489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:51:26.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:51:26.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:51:26.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-14T13:51:28.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 51, 3), 15.23, 35.8, 0.0, 35.2, 16.15, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:51:28.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:51:03
2026-02-14T13:51:29.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:51:29.295 [DEBUG] [Thread-186490] [transport.py] [_log()] starting thread (client mode): 0xa2de8c70
2026-02-14T13:51:29.295 [DEBUG] [Thread-186490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:51:29.316 [DEBUG] [Thread-186490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:51:29.316 [INFO] [Thread-186490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:51:29.319 [DEBUG] [Thread-186490] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:51:29.319 [DEBUG] [Thread-186490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:51:29.319 [DEBUG] [Thread-186490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:51:29.319 [DEBUG] [Thread-186490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:51:29.320 [DEBUG] [Thread-186490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:51:29.320 [DEBUG] [Thread-186490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:51:29.320 [DEBUG] [Thread-186490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:51:29.320 [DEBUG] [Thread-186490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:51:29.320 [DEBUG] [Thread-186490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:51:29.320 [DEBUG] [Thread-186490] [transport.py] [_log()] client lang: <none>
2026-02-14T13:51:29.320 [DEBUG] [Thread-186490] [transport.py] [_log()] server lang: <none>
2026-02-14T13:51:29.320 [DEBUG] [Thread-186490] [transport.py] [_log()] kex follows: False
2026-02-14T13:51:29.320 [DEBUG] [Thread-186490] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:51:29.320 [DEBUG] [Thread-186490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:51:29.320 [DEBUG] [Thread-186490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:51:29.320 [DEBUG] [Thread-186490] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:51:29.320 [DEBUG] [Thread-186490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:51:29.321 [DEBUG] [Thread-186490] [transport.py] [_log()] Compression: none
2026-02-14T13:51:29.321 [DEBUG] [Thread-186490] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:51:29.339 [DEBUG] [Thread-186490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:51:29.340 [DEBUG] [Thread-186490] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:51:29.341 [DEBUG] [Thread-186490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:51:29.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:51:29.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:51:29.342 [DEBUG] [Thread-186490] [transport.py] [_log()] userauth is OK
2026-02-14T13:51:29.343 [DEBUG] [Thread-186490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:51:29.343 [DEBUG] [Thread-186490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:51:29.343 [DEBUG] [Thread-186490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:51:29.343 [DEBUG] [Thread-186490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:51:29.357 [INFO] [Thread-186490] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:51:29.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:51:29.961 [DEBUG] [Thread-186490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:51:29.961 [DEBUG] [Thread-186490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:51:29.961 [DEBUG] [Thread-186490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:51:30.002 [DEBUG] [Thread-186490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:51:30.003 [DEBUG] [Thread-186490] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:51:30.006 [DEBUG] [Thread-186490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:51:30.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:51:30.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:51:30.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:51:30.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:51:30.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:51:30.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:51:30.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:51:30.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:51:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:51:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.493859 -999.00  +15.50  19.71     43   +3.00 1 1 1 1 1   888    0 14.07 50.62 ----- 18.7 19.7 146.0 29.6 22.0 -27.3 20.9 -26.0 21.6 -24.4 22.8 -26.0
2026-02-14T13:51:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:51:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:51:30.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.493859
2026-02-14T13:51:30.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:51:30.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:51:30.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:51:30.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:51:30.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:51:30.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:51:03', tmtdew=15.23, humidity=35.8, cloud=0.0, wind=35.2, temperature=16.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:51:09.418', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:51:30.035 [DEBUG] [Thread-186490] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:51:30.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-14T13:51:30.132 [DEBUG] [Thread-186493] [transport.py] [_log()] starting thread (client mode): 0xa575bb50
2026-02-14T13:51:30.132 [DEBUG] [Thread-186493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:51:30.146 [DEBUG] [Thread-186493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:51:30.147 [INFO] [Thread-186493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:51:30.154 [DEBUG] [Thread-186493] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:51:30.154 [DEBUG] [Thread-186493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:51:30.154 [DEBUG] [Thread-186493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:51:30.154 [DEBUG] [Thread-186493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:51:30.154 [DEBUG] [Thread-186493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:51:30.154 [DEBUG] [Thread-186493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:51:30.154 [DEBUG] [Thread-186493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:51:30.154 [DEBUG] [Thread-186493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:51:30.154 [DEBUG] [Thread-186493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:51:30.154 [DEBUG] [Thread-186493] [transport.py] [_log()] client lang: <none>
2026-02-14T13:51:30.155 [DEBUG] [Thread-186493] [transport.py] [_log()] server lang: <none>
2026-02-14T13:51:30.155 [DEBUG] [Thread-186493] [transport.py] [_log()] kex follows: False
2026-02-14T13:51:30.155 [DEBUG] [Thread-186493] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:51:30.155 [DEBUG] [Thread-186493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:51:30.155 [DEBUG] [Thread-186493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:51:30.155 [DEBUG] [Thread-186493] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:51:30.155 [DEBUG] [Thread-186493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:51:30.155 [DEBUG] [Thread-186493] [transport.py] [_log()] Compression: none
2026-02-14T13:51:30.155 [DEBUG] [Thread-186493] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:51:30.212 [DEBUG] [Thread-186493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:51:30.213 [DEBUG] [Thread-186493] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:51:30.213 [DEBUG] [Thread-186493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:51:30.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:51:30.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:51:30.269 [DEBUG] [Thread-186493] [transport.py] [_log()] userauth is OK
2026-02-14T13:51:30.269 [DEBUG] [Thread-186493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:51:30.269 [DEBUG] [Thread-186493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:51:30.269 [DEBUG] [Thread-186493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:51:30.269 [DEBUG] [Thread-186493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:51:30.287 [INFO] [Thread-186493] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:51:30.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-14T13:51:30.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:51:31.077 [DEBUG] [Thread-186493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:51:31.078 [DEBUG] [Thread-186493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:51:31.125 [DEBUG] [Thread-186493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:51:31.126 [DEBUG] [Thread-186493] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:51:31.135 [DEBUG] [Thread-186493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:51:31.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:51:31.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:51:31.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-14T13:51:31.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:51:31.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:51:31.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:51:31.170 [DEBUG] [Thread-186493] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:51:33.249 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:51:33.250 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:51:40.272 [DEBUG] [Thread-186495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:51:55.318 [DEBUG] [Thread-186496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:52:01.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:52:01.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:52:01.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-14T13:52:03.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 51, 39), 16.19, 33.4, 0.0, 32.11, 16.84, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:52:03.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:51:39
2026-02-14T13:52:03.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:52:03.807 [DEBUG] [Thread-186497] [transport.py] [_log()] starting thread (client mode): 0xa575b460
2026-02-14T13:52:03.807 [DEBUG] [Thread-186497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:52:03.827 [DEBUG] [Thread-186497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:52:03.827 [INFO] [Thread-186497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:52:03.830 [DEBUG] [Thread-186497] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:52:03.830 [DEBUG] [Thread-186497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:52:03.830 [DEBUG] [Thread-186497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:52:03.830 [DEBUG] [Thread-186497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:52:03.830 [DEBUG] [Thread-186497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:52:03.830 [DEBUG] [Thread-186497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:52:03.830 [DEBUG] [Thread-186497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:52:03.830 [DEBUG] [Thread-186497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:52:03.831 [DEBUG] [Thread-186497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:52:03.831 [DEBUG] [Thread-186497] [transport.py] [_log()] client lang: <none>
2026-02-14T13:52:03.831 [DEBUG] [Thread-186497] [transport.py] [_log()] server lang: <none>
2026-02-14T13:52:03.831 [DEBUG] [Thread-186497] [transport.py] [_log()] kex follows: False
2026-02-14T13:52:03.831 [DEBUG] [Thread-186497] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:52:03.831 [DEBUG] [Thread-186497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:52:03.831 [DEBUG] [Thread-186497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:52:03.831 [DEBUG] [Thread-186497] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:52:03.831 [DEBUG] [Thread-186497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:52:03.831 [DEBUG] [Thread-186497] [transport.py] [_log()] Compression: none
2026-02-14T13:52:03.831 [DEBUG] [Thread-186497] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:52:03.848 [DEBUG] [Thread-186497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:52:03.848 [DEBUG] [Thread-186497] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:52:03.849 [DEBUG] [Thread-186497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:52:03.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:52:03.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:52:03.892 [DEBUG] [Thread-186497] [transport.py] [_log()] userauth is OK
2026-02-14T13:52:03.893 [DEBUG] [Thread-186497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:52:03.893 [DEBUG] [Thread-186497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:52:03.893 [DEBUG] [Thread-186497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:52:03.893 [DEBUG] [Thread-186497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:52:03.913 [INFO] [Thread-186497] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:52:03.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:52:04.567 [DEBUG] [Thread-186497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:52:04.568 [DEBUG] [Thread-186497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:52:04.568 [DEBUG] [Thread-186497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:52:04.608 [DEBUG] [Thread-186497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:52:04.608 [DEBUG] [Thread-186497] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:52:04.612 [DEBUG] [Thread-186497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:52:04.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:52:04.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:52:04.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:52:04.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:52:04.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:52:04.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:52:04.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:52:04.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:52:04.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:52:04.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.494206 -999.00  +15.60  23.69     40   +2.20 1 1 1 1 1   888    0 14.34 51.73 ----- 22.8 23.7 172.8 39.6 21.9 -27.4 20.9 -24.8 21.6 -24.6 22.8 -27.3
2026-02-14T13:52:04.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:52:04.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:52:04.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.494206
2026-02-14T13:52:04.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:52:04.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:52:04.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:52:04.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:52:04.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:52:04.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:51:39', tmtdew=16.19, humidity=33.4, cloud=0.0, wind=32.11, temperature=16.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:51:39.398', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:52:04.637 [DEBUG] [Thread-186497] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:52:04.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-14T13:52:04.731 [DEBUG] [Thread-186500] [transport.py] [_log()] starting thread (client mode): 0xa5740520
2026-02-14T13:52:04.731 [DEBUG] [Thread-186500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:52:04.746 [DEBUG] [Thread-186500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:52:04.746 [INFO] [Thread-186500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:52:04.753 [DEBUG] [Thread-186500] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:52:04.753 [DEBUG] [Thread-186500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:52:04.754 [DEBUG] [Thread-186500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:52:04.754 [DEBUG] [Thread-186500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:52:04.754 [DEBUG] [Thread-186500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:52:04.754 [DEBUG] [Thread-186500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:52:04.754 [DEBUG] [Thread-186500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:52:04.754 [DEBUG] [Thread-186500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:52:04.754 [DEBUG] [Thread-186500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:52:04.754 [DEBUG] [Thread-186500] [transport.py] [_log()] client lang: <none>
2026-02-14T13:52:04.754 [DEBUG] [Thread-186500] [transport.py] [_log()] server lang: <none>
2026-02-14T13:52:04.754 [DEBUG] [Thread-186500] [transport.py] [_log()] kex follows: False
2026-02-14T13:52:04.754 [DEBUG] [Thread-186500] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:52:04.754 [DEBUG] [Thread-186500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:52:04.754 [DEBUG] [Thread-186500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:52:04.754 [DEBUG] [Thread-186500] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:52:04.754 [DEBUG] [Thread-186500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:52:04.754 [DEBUG] [Thread-186500] [transport.py] [_log()] Compression: none
2026-02-14T13:52:04.754 [DEBUG] [Thread-186500] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:52:04.812 [DEBUG] [Thread-186500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:52:04.813 [DEBUG] [Thread-186500] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:52:04.813 [DEBUG] [Thread-186500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:52:04.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:52:04.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:52:04.868 [DEBUG] [Thread-186500] [transport.py] [_log()] userauth is OK
2026-02-14T13:52:04.869 [DEBUG] [Thread-186500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:52:04.869 [DEBUG] [Thread-186500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:52:04.869 [DEBUG] [Thread-186500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:52:04.869 [DEBUG] [Thread-186500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:52:04.887 [INFO] [Thread-186500] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:52:04.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-14T13:52:04.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:52:05.689 [DEBUG] [Thread-186500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:52:05.689 [DEBUG] [Thread-186500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:52:05.737 [DEBUG] [Thread-186500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:52:05.738 [DEBUG] [Thread-186500] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:52:05.746 [DEBUG] [Thread-186500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:52:05.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:52:05.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:52:05.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:52:05.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:52:05.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:52:05.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:52:05.783 [DEBUG] [Thread-186500] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:52:10.358 [DEBUG] [Thread-186502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:52:24.900 [DEBUG] [Thread-186503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:52:25.413 [DEBUG] [Thread-186504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:52:33.389 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:52:33.390 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:52:35.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:52:35.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:52:35.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:52:38.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 52, 15), 15.15, 35.57, 0.0, 31.2, 15.82, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:52:38.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:52:15
2026-02-14T13:52:38.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:52:38.835 [DEBUG] [Thread-186505] [transport.py] [_log()] starting thread (client mode): 0xa2d3d120
2026-02-14T13:52:38.835 [DEBUG] [Thread-186505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:52:38.855 [DEBUG] [Thread-186505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:52:38.855 [INFO] [Thread-186505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:52:38.858 [DEBUG] [Thread-186505] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:52:38.858 [DEBUG] [Thread-186505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:52:38.858 [DEBUG] [Thread-186505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:52:38.858 [DEBUG] [Thread-186505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:52:38.858 [DEBUG] [Thread-186505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:52:38.858 [DEBUG] [Thread-186505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:52:38.858 [DEBUG] [Thread-186505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:52:38.858 [DEBUG] [Thread-186505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:52:38.858 [DEBUG] [Thread-186505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:52:38.858 [DEBUG] [Thread-186505] [transport.py] [_log()] client lang: <none>
2026-02-14T13:52:38.858 [DEBUG] [Thread-186505] [transport.py] [_log()] server lang: <none>
2026-02-14T13:52:38.858 [DEBUG] [Thread-186505] [transport.py] [_log()] kex follows: False
2026-02-14T13:52:38.858 [DEBUG] [Thread-186505] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:52:38.858 [DEBUG] [Thread-186505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:52:38.858 [DEBUG] [Thread-186505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:52:38.858 [DEBUG] [Thread-186505] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:52:38.858 [DEBUG] [Thread-186505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:52:38.859 [DEBUG] [Thread-186505] [transport.py] [_log()] Compression: none
2026-02-14T13:52:38.859 [DEBUG] [Thread-186505] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:52:38.867 [DEBUG] [Thread-186505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:52:38.867 [DEBUG] [Thread-186505] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:52:38.867 [DEBUG] [Thread-186505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:52:38.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:52:38.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:52:38.869 [DEBUG] [Thread-186505] [transport.py] [_log()] userauth is OK
2026-02-14T13:52:38.869 [DEBUG] [Thread-186505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:52:38.869 [DEBUG] [Thread-186505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:52:38.869 [DEBUG] [Thread-186505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:52:38.869 [DEBUG] [Thread-186505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:52:38.887 [INFO] [Thread-186505] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:52:38.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:52:39.482 [DEBUG] [Thread-186505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:52:39.482 [DEBUG] [Thread-186505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:52:39.483 [DEBUG] [Thread-186505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:52:39.523 [DEBUG] [Thread-186505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:52:39.523 [DEBUG] [Thread-186505] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:52:39.526 [DEBUG] [Thread-186505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:52:39.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:52:39.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:52:39.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:52:39.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:52:39.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:52:39.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:52:39.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:52:39.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:52:39.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:52:39.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.494553 -999.00  +15.90  27.02     41   +2.70 1 1 1 1 1   888    0 14.49 49.90 ----- 30.8 27.0 157.2 34.6 22.1 -26.0 21.1 -25.9 21.7 -24.1 22.9 -26.0
2026-02-14T13:52:39.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:52:39.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:52:39.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.494553
2026-02-14T13:52:39.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:52:39.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:52:39.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:52:39.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:52:39.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:52:39.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:52:15', tmtdew=15.15, humidity=35.57, cloud=0.0, wind=31.2, temperature=15.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:52:09.379', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:52:39.549 [DEBUG] [Thread-186505] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:52:39.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-14T13:52:39.649 [DEBUG] [Thread-186508] [transport.py] [_log()] starting thread (client mode): 0xa2dea590
2026-02-14T13:52:39.649 [DEBUG] [Thread-186508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:52:39.663 [DEBUG] [Thread-186508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:52:39.663 [INFO] [Thread-186508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:52:39.670 [DEBUG] [Thread-186508] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:52:39.670 [DEBUG] [Thread-186508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:52:39.670 [DEBUG] [Thread-186508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:52:39.670 [DEBUG] [Thread-186508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:52:39.670 [DEBUG] [Thread-186508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:52:39.670 [DEBUG] [Thread-186508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:52:39.670 [DEBUG] [Thread-186508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:52:39.670 [DEBUG] [Thread-186508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:52:39.670 [DEBUG] [Thread-186508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:52:39.671 [DEBUG] [Thread-186508] [transport.py] [_log()] client lang: <none>
2026-02-14T13:52:39.671 [DEBUG] [Thread-186508] [transport.py] [_log()] server lang: <none>
2026-02-14T13:52:39.671 [DEBUG] [Thread-186508] [transport.py] [_log()] kex follows: False
2026-02-14T13:52:39.671 [DEBUG] [Thread-186508] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:52:39.671 [DEBUG] [Thread-186508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:52:39.671 [DEBUG] [Thread-186508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:52:39.671 [DEBUG] [Thread-186508] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:52:39.671 [DEBUG] [Thread-186508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:52:39.671 [DEBUG] [Thread-186508] [transport.py] [_log()] Compression: none
2026-02-14T13:52:39.671 [DEBUG] [Thread-186508] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:52:39.727 [DEBUG] [Thread-186508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:52:39.727 [DEBUG] [Thread-186508] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:52:39.728 [DEBUG] [Thread-186508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:52:39.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:52:39.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:52:39.784 [DEBUG] [Thread-186508] [transport.py] [_log()] userauth is OK
2026-02-14T13:52:39.785 [DEBUG] [Thread-186508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:52:39.785 [DEBUG] [Thread-186508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:52:39.785 [DEBUG] [Thread-186508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:52:39.785 [DEBUG] [Thread-186508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:52:39.803 [INFO] [Thread-186508] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:52:39.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-14T13:52:39.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:52:40.449 [DEBUG] [Thread-186510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:52:40.592 [DEBUG] [Thread-186508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:52:40.592 [DEBUG] [Thread-186508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:52:40.640 [DEBUG] [Thread-186508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:52:40.640 [DEBUG] [Thread-186508] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:52:40.648 [DEBUG] [Thread-186508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:52:40.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:52:40.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-14T13:52:40.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-14T13:52:40.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:52:40.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:52:40.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:52:40.679 [DEBUG] [Thread-186508] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:52:55.499 [DEBUG] [Thread-186511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:53:10.536 [DEBUG] [Thread-186512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:53:10.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:53:10.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:53:10.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-14T13:53:12.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 52, 50), 15.52, 35.01, 0.0, 30.75, 16.08, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:53:12.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:52:50
2026-02-14T13:53:12.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:53:13.122 [DEBUG] [Thread-186513] [transport.py] [_log()] starting thread (client mode): 0xa2d10bb0
2026-02-14T13:53:13.123 [DEBUG] [Thread-186513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:53:13.142 [DEBUG] [Thread-186513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:53:13.142 [INFO] [Thread-186513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:53:13.145 [DEBUG] [Thread-186513] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:53:13.146 [DEBUG] [Thread-186513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:53:13.146 [DEBUG] [Thread-186513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:53:13.146 [DEBUG] [Thread-186513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:53:13.146 [DEBUG] [Thread-186513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:53:13.146 [DEBUG] [Thread-186513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:53:13.146 [DEBUG] [Thread-186513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:53:13.146 [DEBUG] [Thread-186513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:53:13.146 [DEBUG] [Thread-186513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:53:13.146 [DEBUG] [Thread-186513] [transport.py] [_log()] client lang: <none>
2026-02-14T13:53:13.146 [DEBUG] [Thread-186513] [transport.py] [_log()] server lang: <none>
2026-02-14T13:53:13.146 [DEBUG] [Thread-186513] [transport.py] [_log()] kex follows: False
2026-02-14T13:53:13.146 [DEBUG] [Thread-186513] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:53:13.146 [DEBUG] [Thread-186513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:53:13.146 [DEBUG] [Thread-186513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:53:13.147 [DEBUG] [Thread-186513] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:53:13.147 [DEBUG] [Thread-186513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:53:13.147 [DEBUG] [Thread-186513] [transport.py] [_log()] Compression: none
2026-02-14T13:53:13.147 [DEBUG] [Thread-186513] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:53:13.161 [DEBUG] [Thread-186513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:53:13.161 [DEBUG] [Thread-186513] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:53:13.162 [DEBUG] [Thread-186513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:53:13.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:53:13.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:53:13.164 [DEBUG] [Thread-186513] [transport.py] [_log()] userauth is OK
2026-02-14T13:53:13.164 [DEBUG] [Thread-186513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:53:13.164 [DEBUG] [Thread-186513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:53:13.164 [DEBUG] [Thread-186513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:53:13.164 [DEBUG] [Thread-186513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:53:13.182 [INFO] [Thread-186513] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:53:13.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:53:13.834 [DEBUG] [Thread-186513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:53:13.834 [DEBUG] [Thread-186513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:53:13.834 [DEBUG] [Thread-186513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:53:13.874 [DEBUG] [Thread-186513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:53:13.874 [DEBUG] [Thread-186513] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:53:13.877 [DEBUG] [Thread-186513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:53:13.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:53:13.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:53:13.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:53:13.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:53:13.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:53:13.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:53:13.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:53:13.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:53:13.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:53:13.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.494901 -999.00  +16.00  24.60     40   +2.70 1 1 1 1 1   888    0 14.28 54.87 ----- 20.5 24.6 161.8 29.2 22.1 -26.8 21.2 -26.4 21.8 -24.7 22.9 -27.0
2026-02-14T13:53:13.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:53:13.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:53:13.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.494901
2026-02-14T13:53:13.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:53:13.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:53:13.907 [DEBUG] [Thread-186513] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:53:13.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:53:13.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:53:13.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:53:13.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:52:50', tmtdew=15.52, humidity=35.01, cloud=0.0, wind=30.75, temperature=16.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:52:39.446', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:53: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-14T13:53:14.001 [DEBUG] [Thread-186516] [transport.py] [_log()] starting thread (client mode): 0xa575af50
2026-02-14T13:53:14.001 [DEBUG] [Thread-186516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:53:14.016 [DEBUG] [Thread-186516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:53:14.016 [INFO] [Thread-186516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:53:14.024 [DEBUG] [Thread-186516] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:53:14.024 [DEBUG] [Thread-186516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:53:14.024 [DEBUG] [Thread-186516] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:53:14.024 [DEBUG] [Thread-186516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:53:14.024 [DEBUG] [Thread-186516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:53:14.024 [DEBUG] [Thread-186516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:53:14.024 [DEBUG] [Thread-186516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:53:14.024 [DEBUG] [Thread-186516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:53:14.024 [DEBUG] [Thread-186516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:53:14.024 [DEBUG] [Thread-186516] [transport.py] [_log()] client lang: <none>
2026-02-14T13:53:14.024 [DEBUG] [Thread-186516] [transport.py] [_log()] server lang: <none>
2026-02-14T13:53:14.024 [DEBUG] [Thread-186516] [transport.py] [_log()] kex follows: False
2026-02-14T13:53:14.024 [DEBUG] [Thread-186516] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:53:14.024 [DEBUG] [Thread-186516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:53:14.025 [DEBUG] [Thread-186516] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:53:14.025 [DEBUG] [Thread-186516] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:53:14.025 [DEBUG] [Thread-186516] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:53:14.025 [DEBUG] [Thread-186516] [transport.py] [_log()] Compression: none
2026-02-14T13:53:14.025 [DEBUG] [Thread-186516] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:53:14.085 [DEBUG] [Thread-186516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:53:14.085 [DEBUG] [Thread-186516] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:53:14.086 [DEBUG] [Thread-186516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:53:14.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:53:14.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:53:14.141 [DEBUG] [Thread-186516] [transport.py] [_log()] userauth is OK
2026-02-14T13:53:14.141 [DEBUG] [Thread-186516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:53:14.141 [DEBUG] [Thread-186516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:53:14.141 [DEBUG] [Thread-186516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:53:14.141 [DEBUG] [Thread-186516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:53:14.160 [INFO] [Thread-186516] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:53:14.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-14T13:53:14.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:53:14.976 [DEBUG] [Thread-186516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:53:14.976 [DEBUG] [Thread-186516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:53:15.026 [DEBUG] [Thread-186516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:53:15.027 [DEBUG] [Thread-186516] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:53:15.036 [DEBUG] [Thread-186516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:53:15.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:53:15.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-14T13:53:15.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-14T13:53:15.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:53:15.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:53:15.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:53:15.071 [DEBUG] [Thread-186516] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:53:24.944 [DEBUG] [Thread-186518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:53:25.575 [DEBUG] [Thread-186519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:53:33.533 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:53:33.534 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:53:40.625 [DEBUG] [Thread-186520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:53:45.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:53:45.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:53:45.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:53:46.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 53, 25), 15.34, 35.34, 0.0, 28.0, 15.8, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:53:46.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:53:25
2026-02-14T13:53:47.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:53:47.439 [DEBUG] [Thread-186521] [transport.py] [_log()] starting thread (client mode): 0xa2dc1570
2026-02-14T13:53:47.440 [DEBUG] [Thread-186521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:53:47.459 [DEBUG] [Thread-186521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:53:47.460 [INFO] [Thread-186521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:53:47.463 [DEBUG] [Thread-186521] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:53:47.463 [DEBUG] [Thread-186521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:53:47.463 [DEBUG] [Thread-186521] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:53:47.463 [DEBUG] [Thread-186521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:53:47.463 [DEBUG] [Thread-186521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:53:47.463 [DEBUG] [Thread-186521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:53:47.463 [DEBUG] [Thread-186521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:53:47.463 [DEBUG] [Thread-186521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:53:47.463 [DEBUG] [Thread-186521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:53:47.463 [DEBUG] [Thread-186521] [transport.py] [_log()] client lang: <none>
2026-02-14T13:53:47.463 [DEBUG] [Thread-186521] [transport.py] [_log()] server lang: <none>
2026-02-14T13:53:47.463 [DEBUG] [Thread-186521] [transport.py] [_log()] kex follows: False
2026-02-14T13:53:47.463 [DEBUG] [Thread-186521] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:53:47.463 [DEBUG] [Thread-186521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:53:47.463 [DEBUG] [Thread-186521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:53:47.463 [DEBUG] [Thread-186521] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:53:47.463 [DEBUG] [Thread-186521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:53:47.464 [DEBUG] [Thread-186521] [transport.py] [_log()] Compression: none
2026-02-14T13:53:47.464 [DEBUG] [Thread-186521] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:53:47.482 [DEBUG] [Thread-186521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:53:47.482 [DEBUG] [Thread-186521] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:53:47.483 [DEBUG] [Thread-186521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:53:47.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:53:47.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:53:47.485 [DEBUG] [Thread-186521] [transport.py] [_log()] userauth is OK
2026-02-14T13:53:47.485 [DEBUG] [Thread-186521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:53:47.486 [DEBUG] [Thread-186521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:53:47.486 [DEBUG] [Thread-186521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:53:47.486 [DEBUG] [Thread-186521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:53:47.509 [INFO] [Thread-186521] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:53:47.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:53:48.118 [DEBUG] [Thread-186521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:53:48.118 [DEBUG] [Thread-186521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:53:48.119 [DEBUG] [Thread-186521] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:53:48.159 [DEBUG] [Thread-186521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:53:48.159 [DEBUG] [Thread-186521] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:53:48.162 [DEBUG] [Thread-186521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:53:48.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:53:48.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:53:48.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:53:48.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:53:48.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:53:48.185 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:53:48.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:53:48.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:53:48.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:53:48.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.495248 -999.00  +16.10  32.47     40   +2.70 1 1 2 1 1   888    0 14.51 58.17 ----- 25.6 32.5 168.8 39.7 22.2 -27.3 21.1 -26.2 21.8 -25.1 23.0 -26.8
2026-02-14T13:53:48.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:53:48.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:53:48.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.495248
2026-02-14T13:53:48.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:53:48.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:53:48.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:53:48.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:53:48.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:53:48.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:53:25', tmtdew=15.34, humidity=35.34, cloud=0.0, wind=28.0, temperature=15.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:53:09.427', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:53:48.187 [DEBUG] [Thread-186521] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:53:48.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-14T13:53:48.282 [DEBUG] [Thread-186524] [transport.py] [_log()] starting thread (client mode): 0xa57420b0
2026-02-14T13:53:48.282 [DEBUG] [Thread-186524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:53:48.297 [DEBUG] [Thread-186524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:53:48.297 [INFO] [Thread-186524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:53:48.305 [DEBUG] [Thread-186524] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:53:48.305 [DEBUG] [Thread-186524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:53:48.305 [DEBUG] [Thread-186524] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:53:48.305 [DEBUG] [Thread-186524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:53:48.305 [DEBUG] [Thread-186524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:53:48.306 [DEBUG] [Thread-186524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:53:48.306 [DEBUG] [Thread-186524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:53:48.306 [DEBUG] [Thread-186524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:53:48.306 [DEBUG] [Thread-186524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:53:48.306 [DEBUG] [Thread-186524] [transport.py] [_log()] client lang: <none>
2026-02-14T13:53:48.306 [DEBUG] [Thread-186524] [transport.py] [_log()] server lang: <none>
2026-02-14T13:53:48.307 [DEBUG] [Thread-186524] [transport.py] [_log()] kex follows: False
2026-02-14T13:53:48.307 [DEBUG] [Thread-186524] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:53:48.307 [DEBUG] [Thread-186524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:53:48.307 [DEBUG] [Thread-186524] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:53:48.307 [DEBUG] [Thread-186524] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:53:48.307 [DEBUG] [Thread-186524] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:53:48.307 [DEBUG] [Thread-186524] [transport.py] [_log()] Compression: none
2026-02-14T13:53:48.307 [DEBUG] [Thread-186524] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:53:48.364 [DEBUG] [Thread-186524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:53:48.364 [DEBUG] [Thread-186524] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:53:48.365 [DEBUG] [Thread-186524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:53:48.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:53:48.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:53:48.421 [DEBUG] [Thread-186524] [transport.py] [_log()] userauth is OK
2026-02-14T13:53:48.421 [DEBUG] [Thread-186524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:53:48.421 [DEBUG] [Thread-186524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:53:48.421 [DEBUG] [Thread-186524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:53:48.421 [DEBUG] [Thread-186524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:53:48.440 [INFO] [Thread-186524] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:53:48.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-14T13:53:48.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:53:49.263 [DEBUG] [Thread-186524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:53:49.263 [DEBUG] [Thread-186524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:53:49.311 [DEBUG] [Thread-186524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:53:49.312 [DEBUG] [Thread-186524] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:53:49.321 [DEBUG] [Thread-186524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:53:49.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:53:49.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-14T13:53:49.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-14T13:53:49.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:53:49.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:53:49.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:53:49.358 [DEBUG] [Thread-186524] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:53:55.663 [DEBUG] [Thread-186526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:54:10.716 [DEBUG] [Thread-186527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:54:19.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:54:19.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:54:19.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-14T13:54:21.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 54, 1), 15.45, 35.18, 0.0, 39.22, 15.95, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:54:21.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:54:01
2026-02-14T13:54:21.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:54:21.997 [DEBUG] [Thread-186528] [transport.py] [_log()] starting thread (client mode): 0xa575af50
2026-02-14T13:54:21.997 [DEBUG] [Thread-186528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:54:22.012 [DEBUG] [Thread-186528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:54:22.012 [INFO] [Thread-186528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:54:22.014 [DEBUG] [Thread-186528] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:54:22.014 [DEBUG] [Thread-186528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:54:22.014 [DEBUG] [Thread-186528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:54:22.014 [DEBUG] [Thread-186528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:54:22.014 [DEBUG] [Thread-186528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:54:22.014 [DEBUG] [Thread-186528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:54:22.014 [DEBUG] [Thread-186528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:54:22.014 [DEBUG] [Thread-186528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:54:22.014 [DEBUG] [Thread-186528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:54:22.015 [DEBUG] [Thread-186528] [transport.py] [_log()] client lang: <none>
2026-02-14T13:54:22.015 [DEBUG] [Thread-186528] [transport.py] [_log()] server lang: <none>
2026-02-14T13:54:22.015 [DEBUG] [Thread-186528] [transport.py] [_log()] kex follows: False
2026-02-14T13:54:22.015 [DEBUG] [Thread-186528] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:54:22.015 [DEBUG] [Thread-186528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:54:22.015 [DEBUG] [Thread-186528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:54:22.015 [DEBUG] [Thread-186528] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:54:22.015 [DEBUG] [Thread-186528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:54:22.015 [DEBUG] [Thread-186528] [transport.py] [_log()] Compression: none
2026-02-14T13:54:22.015 [DEBUG] [Thread-186528] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:54:22.024 [DEBUG] [Thread-186528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:54:22.025 [DEBUG] [Thread-186528] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:54:22.025 [DEBUG] [Thread-186528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:54:22.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:54:22.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:54:22.026 [DEBUG] [Thread-186528] [transport.py] [_log()] userauth is OK
2026-02-14T13:54:22.026 [DEBUG] [Thread-186528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:54:22.026 [DEBUG] [Thread-186528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:54:22.026 [DEBUG] [Thread-186528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:54:22.026 [DEBUG] [Thread-186528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:54:22.044 [INFO] [Thread-186528] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:54:22.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:54:22.708 [DEBUG] [Thread-186528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:54:22.709 [DEBUG] [Thread-186528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:54:22.709 [DEBUG] [Thread-186528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:54:22.749 [DEBUG] [Thread-186528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:54:22.750 [DEBUG] [Thread-186528] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:54:22.754 [DEBUG] [Thread-186528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:54:22.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:54:22.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:54:22.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:54:22.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:54:22.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:54:22.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:54:22.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:54:22.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:54:22.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:54:22.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.495942 -999.00  +16.10  24.25     41   +2.90 1 1 1 1 1   888    0 14.30 58.57 ----- 21.4 24.2 180.8 29.1 22.1 -27.0 20.8 -27.4 21.8 -24.9 22.9 -26.9
2026-02-14T13:54:22.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:54:22.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:54:22.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.495942
2026-02-14T13:54:22.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:54:22.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:54:22.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:54:22.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:54:22.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:54:22.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:54:01', tmtdew=15.45, humidity=35.18, cloud=0.0, wind=39.22, temperature=15.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:54:09.389', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:54:22.781 [DEBUG] [Thread-186528] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:54:22.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-14T13:54:22.883 [DEBUG] [Thread-186531] [transport.py] [_log()] starting thread (client mode): 0xa2d231c0
2026-02-14T13:54:22.883 [DEBUG] [Thread-186531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:54:22.898 [DEBUG] [Thread-186531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:54:22.898 [INFO] [Thread-186531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:54:22.905 [DEBUG] [Thread-186531] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:54:22.905 [DEBUG] [Thread-186531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:54:22.905 [DEBUG] [Thread-186531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:54:22.905 [DEBUG] [Thread-186531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:54:22.905 [DEBUG] [Thread-186531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:54:22.905 [DEBUG] [Thread-186531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:54:22.906 [DEBUG] [Thread-186531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:54:22.906 [DEBUG] [Thread-186531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:54:22.906 [DEBUG] [Thread-186531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:54:22.906 [DEBUG] [Thread-186531] [transport.py] [_log()] client lang: <none>
2026-02-14T13:54:22.906 [DEBUG] [Thread-186531] [transport.py] [_log()] server lang: <none>
2026-02-14T13:54:22.906 [DEBUG] [Thread-186531] [transport.py] [_log()] kex follows: False
2026-02-14T13:54:22.906 [DEBUG] [Thread-186531] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:54:22.906 [DEBUG] [Thread-186531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:54:22.906 [DEBUG] [Thread-186531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:54:22.906 [DEBUG] [Thread-186531] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:54:22.906 [DEBUG] [Thread-186531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:54:22.906 [DEBUG] [Thread-186531] [transport.py] [_log()] Compression: none
2026-02-14T13:54:22.906 [DEBUG] [Thread-186531] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:54:22.962 [DEBUG] [Thread-186531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:54:22.963 [DEBUG] [Thread-186531] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:54:22.963 [DEBUG] [Thread-186531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:54:22.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:54:22.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:54:23.020 [DEBUG] [Thread-186531] [transport.py] [_log()] userauth is OK
2026-02-14T13:54:23.021 [DEBUG] [Thread-186531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:54:23.021 [DEBUG] [Thread-186531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:54:23.021 [DEBUG] [Thread-186531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:54:23.021 [DEBUG] [Thread-186531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:54:23.040 [INFO] [Thread-186531] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:54:23.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T13:54:23.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:54:23.914 [DEBUG] [Thread-186531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:54:23.915 [DEBUG] [Thread-186531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:54:23.962 [DEBUG] [Thread-186531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:54:23.963 [DEBUG] [Thread-186531] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:54:23.974 [DEBUG] [Thread-186531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:54:23.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:54:23.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-14T13:54:23.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T13:54:24.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:54:24.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:54:24.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:54:24.008 [DEBUG] [Thread-186531] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:54:25.000 [DEBUG] [Thread-186533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:54:25.758 [DEBUG] [Thread-186534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:54:33.674 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:54:33.675 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:54:40.819 [DEBUG] [Thread-186535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:54:54.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:54:54.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:54:54.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-14T13:54:55.853 [DEBUG] [Thread-186536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:54:56.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 54, 36), 16.23, 33.37, 0.0, 36.98, 17.07, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:54:56.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:54:36
2026-02-14T13:54:56.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:54:56.578 [DEBUG] [Thread-186537] [transport.py] [_log()] starting thread (client mode): 0xa5758c70
2026-02-14T13:54:56.578 [DEBUG] [Thread-186537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:54:56.599 [DEBUG] [Thread-186537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:54:56.599 [INFO] [Thread-186537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:54:56.602 [DEBUG] [Thread-186537] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:54:56.602 [DEBUG] [Thread-186537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:54:56.602 [DEBUG] [Thread-186537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:54:56.602 [DEBUG] [Thread-186537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:54:56.602 [DEBUG] [Thread-186537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:54:56.602 [DEBUG] [Thread-186537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:54:56.602 [DEBUG] [Thread-186537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:54:56.602 [DEBUG] [Thread-186537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:54:56.602 [DEBUG] [Thread-186537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:54:56.603 [DEBUG] [Thread-186537] [transport.py] [_log()] client lang: <none>
2026-02-14T13:54:56.603 [DEBUG] [Thread-186537] [transport.py] [_log()] server lang: <none>
2026-02-14T13:54:56.603 [DEBUG] [Thread-186537] [transport.py] [_log()] kex follows: False
2026-02-14T13:54:56.603 [DEBUG] [Thread-186537] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:54:56.603 [DEBUG] [Thread-186537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:54:56.603 [DEBUG] [Thread-186537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:54:56.603 [DEBUG] [Thread-186537] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:54:56.603 [DEBUG] [Thread-186537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:54:56.603 [DEBUG] [Thread-186537] [transport.py] [_log()] Compression: none
2026-02-14T13:54:56.603 [DEBUG] [Thread-186537] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:54:56.621 [DEBUG] [Thread-186537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:54:56.622 [DEBUG] [Thread-186537] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:54:56.622 [DEBUG] [Thread-186537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:54:56.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:54:56.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:54:56.624 [DEBUG] [Thread-186537] [transport.py] [_log()] userauth is OK
2026-02-14T13:54:56.625 [DEBUG] [Thread-186537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:54:56.625 [DEBUG] [Thread-186537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:54:56.625 [DEBUG] [Thread-186537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:54:56.625 [DEBUG] [Thread-186537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:54:56.639 [INFO] [Thread-186537] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:54:56.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:54:57.279 [DEBUG] [Thread-186537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:54:57.280 [DEBUG] [Thread-186537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:54:57.280 [DEBUG] [Thread-186537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:54:57.321 [DEBUG] [Thread-186537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:54:57.321 [DEBUG] [Thread-186537] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:54:57.323 [DEBUG] [Thread-186537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:54:57.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:54:57.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:54:57.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:54:57.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:54:57.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:54:57.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:54:57.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:54:57.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:54:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:54:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.496289 -999.00  +15.80  25.60     41   +2.80 1 1 1 1 1   888    0 14.14 52.53 ----- 22.3 25.6 173.8 38.2 22.0 -26.8 20.9 -27.9 21.6 -25.1 22.9 -27.7
2026-02-14T13:54:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:54:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:54:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.496289
2026-02-14T13:54:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:54:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:54:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:54:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:54:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:54:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:54:36', tmtdew=16.23, humidity=33.37, cloud=0.0, wind=36.98, temperature=17.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:54:39.370', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:54:57.340 [DEBUG] [Thread-186537] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:54:57.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-14T13:54:57.426 [DEBUG] [Thread-186540] [transport.py] [_log()] starting thread (client mode): 0xa5758790
2026-02-14T13:54:57.426 [DEBUG] [Thread-186540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:54:57.441 [DEBUG] [Thread-186540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:54:57.441 [INFO] [Thread-186540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:54:57.449 [DEBUG] [Thread-186540] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:54:57.449 [DEBUG] [Thread-186540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:54:57.449 [DEBUG] [Thread-186540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:54:57.449 [DEBUG] [Thread-186540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:54:57.449 [DEBUG] [Thread-186540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:54:57.449 [DEBUG] [Thread-186540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:54:57.449 [DEBUG] [Thread-186540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:54:57.449 [DEBUG] [Thread-186540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:54:57.449 [DEBUG] [Thread-186540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:54:57.449 [DEBUG] [Thread-186540] [transport.py] [_log()] client lang: <none>
2026-02-14T13:54:57.449 [DEBUG] [Thread-186540] [transport.py] [_log()] server lang: <none>
2026-02-14T13:54:57.449 [DEBUG] [Thread-186540] [transport.py] [_log()] kex follows: False
2026-02-14T13:54:57.449 [DEBUG] [Thread-186540] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:54:57.450 [DEBUG] [Thread-186540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:54:57.450 [DEBUG] [Thread-186540] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:54:57.450 [DEBUG] [Thread-186540] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:54:57.450 [DEBUG] [Thread-186540] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:54:57.450 [DEBUG] [Thread-186540] [transport.py] [_log()] Compression: none
2026-02-14T13:54:57.450 [DEBUG] [Thread-186540] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:54:57.508 [DEBUG] [Thread-186540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:54:57.509 [DEBUG] [Thread-186540] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:54:57.510 [DEBUG] [Thread-186540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:54:57.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:54:57.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:54:57.564 [DEBUG] [Thread-186540] [transport.py] [_log()] userauth is OK
2026-02-14T13:54:57.565 [DEBUG] [Thread-186540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:54:57.565 [DEBUG] [Thread-186540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:54:57.565 [DEBUG] [Thread-186540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:54:57.565 [DEBUG] [Thread-186540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:54:57.584 [INFO] [Thread-186540] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:54:57.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T13:54:57.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:54:58.414 [DEBUG] [Thread-186540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:54:58.414 [DEBUG] [Thread-186540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:54:58.462 [DEBUG] [Thread-186540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:54:58.463 [DEBUG] [Thread-186540] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:54:58.472 [DEBUG] [Thread-186540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:54:58.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:54:58.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-14T13:54:58.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-14T13:54:58.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:54:58.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:54:58.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:54:58.507 [DEBUG] [Thread-186540] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:55:10.888 [DEBUG] [Thread-186542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:55:25.034 [DEBUG] [Thread-186543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:55:25.949 [DEBUG] [Thread-186544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:55:28.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:55:28.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:55:28.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:55:30.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 55, 13), 15.04, 35.87, 0.0, 32.71, 15.77, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:55:30.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:55:13
2026-02-14T13:55:30.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:55:30.913 [DEBUG] [Thread-186545] [transport.py] [_log()] starting thread (client mode): 0xa2d114b0
2026-02-14T13:55:30.913 [DEBUG] [Thread-186545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:55:30.933 [DEBUG] [Thread-186545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:55:30.933 [INFO] [Thread-186545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:55:30.937 [DEBUG] [Thread-186545] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:55:30.937 [DEBUG] [Thread-186545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:55:30.937 [DEBUG] [Thread-186545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:55:30.937 [DEBUG] [Thread-186545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:55:30.937 [DEBUG] [Thread-186545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:55:30.937 [DEBUG] [Thread-186545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:55:30.937 [DEBUG] [Thread-186545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:55:30.937 [DEBUG] [Thread-186545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:55:30.937 [DEBUG] [Thread-186545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:55:30.937 [DEBUG] [Thread-186545] [transport.py] [_log()] client lang: <none>
2026-02-14T13:55:30.937 [DEBUG] [Thread-186545] [transport.py] [_log()] server lang: <none>
2026-02-14T13:55:30.937 [DEBUG] [Thread-186545] [transport.py] [_log()] kex follows: False
2026-02-14T13:55:30.937 [DEBUG] [Thread-186545] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:55:30.938 [DEBUG] [Thread-186545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:55:30.938 [DEBUG] [Thread-186545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:55:30.938 [DEBUG] [Thread-186545] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:55:30.938 [DEBUG] [Thread-186545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:55:30.938 [DEBUG] [Thread-186545] [transport.py] [_log()] Compression: none
2026-02-14T13:55:30.938 [DEBUG] [Thread-186545] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:55:30.956 [DEBUG] [Thread-186545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:55:30.957 [DEBUG] [Thread-186545] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:55:30.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:55:30.958 [DEBUG] [Thread-186545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:55:30.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:55:30.961 [DEBUG] [Thread-186545] [transport.py] [_log()] userauth is OK
2026-02-14T13:55:30.961 [DEBUG] [Thread-186545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:55:30.961 [DEBUG] [Thread-186545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:55:30.962 [DEBUG] [Thread-186545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:55:30.962 [DEBUG] [Thread-186545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:55:30.994 [INFO] [Thread-186545] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:55:30.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:55:31.608 [DEBUG] [Thread-186545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:55:31.608 [DEBUG] [Thread-186545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:55:31.609 [DEBUG] [Thread-186545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:55:31.649 [DEBUG] [Thread-186545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:55:31.649 [DEBUG] [Thread-186545] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:55:31.652 [DEBUG] [Thread-186545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:55:31.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:55:31.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:55:31.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:55:31.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:55:31.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:55:31.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:55:31.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:55:31.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:55:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:55:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.496637 -999.00  +15.90  31.72     41   +2.80 1 1 2 1 1   888    0 14.02 45.16 ----- 28.1 31.7 182.8 41.6 22.1 -29.4 20.6 -27.0 21.6 -28.9 22.9 -29.3
2026-02-14T13:55:31.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:55:31.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:55:31.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.496637
2026-02-14T13:55:31.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:55:31.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:55:31.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:55:31.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:55:31.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:55:31.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:55:13', tmtdew=15.04, humidity=35.87, cloud=0.0, wind=32.71, temperature=15.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:55:09.437', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:55:31.687 [DEBUG] [Thread-186545] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:55:31.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-14T13:55:31.784 [DEBUG] [Thread-186548] [transport.py] [_log()] starting thread (client mode): 0xa2d101c0
2026-02-14T13:55:31.784 [DEBUG] [Thread-186548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:55:31.798 [DEBUG] [Thread-186548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:55:31.799 [INFO] [Thread-186548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:55:31.806 [DEBUG] [Thread-186548] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:55:31.807 [DEBUG] [Thread-186548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:55:31.807 [DEBUG] [Thread-186548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:55:31.807 [DEBUG] [Thread-186548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:55:31.807 [DEBUG] [Thread-186548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:55:31.807 [DEBUG] [Thread-186548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:55:31.807 [DEBUG] [Thread-186548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:55:31.807 [DEBUG] [Thread-186548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:55:31.807 [DEBUG] [Thread-186548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:55:31.807 [DEBUG] [Thread-186548] [transport.py] [_log()] client lang: <none>
2026-02-14T13:55:31.807 [DEBUG] [Thread-186548] [transport.py] [_log()] server lang: <none>
2026-02-14T13:55:31.807 [DEBUG] [Thread-186548] [transport.py] [_log()] kex follows: False
2026-02-14T13:55:31.807 [DEBUG] [Thread-186548] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:55:31.807 [DEBUG] [Thread-186548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:55:31.807 [DEBUG] [Thread-186548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:55:31.807 [DEBUG] [Thread-186548] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:55:31.807 [DEBUG] [Thread-186548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:55:31.807 [DEBUG] [Thread-186548] [transport.py] [_log()] Compression: none
2026-02-14T13:55:31.808 [DEBUG] [Thread-186548] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:55:31.864 [DEBUG] [Thread-186548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:55:31.865 [DEBUG] [Thread-186548] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:55:31.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:55:31.866 [DEBUG] [Thread-186548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:55:31.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:55:31.920 [DEBUG] [Thread-186548] [transport.py] [_log()] userauth is OK
2026-02-14T13:55:31.921 [DEBUG] [Thread-186548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:55:31.921 [DEBUG] [Thread-186548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:55:31.921 [DEBUG] [Thread-186548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:55:31.921 [DEBUG] [Thread-186548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:55:31.939 [INFO] [Thread-186548] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:55:31.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-14T13:55:31.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:55:32.818 [DEBUG] [Thread-186548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:55:32.818 [DEBUG] [Thread-186548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:55:32.869 [DEBUG] [Thread-186548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:55:32.870 [DEBUG] [Thread-186548] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:55:32.882 [DEBUG] [Thread-186548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:55:32.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:55:32.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-14T13:55:32.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-14T13:55:32.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:55:32.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:55:32.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:55:32.932 [DEBUG] [Thread-186548] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:55:33.818 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:55:33.819 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:55:40.990 [DEBUG] [Thread-186550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:55:56.039 [DEBUG] [Thread-186551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:56:02.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:56:02.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:56:02.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:56:05.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 55, 49), 14.81, 36.45, 0.0, 33.82, 15.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:56:05.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:55:49
2026-02-14T13:56:05.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:56:05.919 [DEBUG] [Thread-186552] [transport.py] [_log()] starting thread (client mode): 0xa2d13970
2026-02-14T13:56:05.919 [DEBUG] [Thread-186552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:56:05.940 [DEBUG] [Thread-186552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:56:05.940 [INFO] [Thread-186552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:56:05.943 [DEBUG] [Thread-186552] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:56:05.943 [DEBUG] [Thread-186552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:56:05.943 [DEBUG] [Thread-186552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:56:05.943 [DEBUG] [Thread-186552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:56:05.943 [DEBUG] [Thread-186552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:56:05.943 [DEBUG] [Thread-186552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:56:05.943 [DEBUG] [Thread-186552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:56:05.943 [DEBUG] [Thread-186552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:56:05.944 [DEBUG] [Thread-186552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:56:05.944 [DEBUG] [Thread-186552] [transport.py] [_log()] client lang: <none>
2026-02-14T13:56:05.944 [DEBUG] [Thread-186552] [transport.py] [_log()] server lang: <none>
2026-02-14T13:56:05.944 [DEBUG] [Thread-186552] [transport.py] [_log()] kex follows: False
2026-02-14T13:56:05.944 [DEBUG] [Thread-186552] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:56:05.944 [DEBUG] [Thread-186552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:56:05.944 [DEBUG] [Thread-186552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:56:05.944 [DEBUG] [Thread-186552] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:56:05.944 [DEBUG] [Thread-186552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:56:05.944 [DEBUG] [Thread-186552] [transport.py] [_log()] Compression: none
2026-02-14T13:56:05.944 [DEBUG] [Thread-186552] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:56:05.962 [DEBUG] [Thread-186552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:56:05.962 [DEBUG] [Thread-186552] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:56:05.963 [DEBUG] [Thread-186552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:56:05.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:56:05.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:56:05.965 [DEBUG] [Thread-186552] [transport.py] [_log()] userauth is OK
2026-02-14T13:56:05.965 [DEBUG] [Thread-186552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:56:05.965 [DEBUG] [Thread-186552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:56:05.965 [DEBUG] [Thread-186552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:56:05.966 [DEBUG] [Thread-186552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:56:06.002 [INFO] [Thread-186552] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:56:06.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:56:06.682 [DEBUG] [Thread-186552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:56:06.683 [DEBUG] [Thread-186552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:56:06.683 [DEBUG] [Thread-186552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:56:06.723 [DEBUG] [Thread-186552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:56:06.724 [DEBUG] [Thread-186552] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:56:06.726 [DEBUG] [Thread-186552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:56:06.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:56:06.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:56:06.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:56:06.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:56:06.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:56:06.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:56:06.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:56:06.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:56:06.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:56:06.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.496984 -999.00  +15.80  27.10     42   +3.10 1 1 1 1 1   888    0 13.94 40.37 ----- 24.5 27.1 188.4 33.8 22.0 -27.4 20.5 -32.0 21.7 -25.9 22.8 -27.3
2026-02-14T13:56:06.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:56:06.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:56:06.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.496984
2026-02-14T13:56:06.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:56:06.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:56:06.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:56:06.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:56:06.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:56:06.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:55:49', tmtdew=14.81, humidity=36.45, cloud=0.0, wind=33.82, temperature=15.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:55:39.418', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:56:06.752 [DEBUG] [Thread-186552] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:56:06.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-14T13:56:06.844 [DEBUG] [Thread-186555] [transport.py] [_log()] starting thread (client mode): 0xa2dc3c40
2026-02-14T13:56:06.844 [DEBUG] [Thread-186555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:56:06.862 [DEBUG] [Thread-186555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:56:06.862 [INFO] [Thread-186555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:56:06.871 [DEBUG] [Thread-186555] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:56:06.872 [DEBUG] [Thread-186555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:56:06.872 [DEBUG] [Thread-186555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:56:06.872 [DEBUG] [Thread-186555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:56:06.872 [DEBUG] [Thread-186555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:56:06.872 [DEBUG] [Thread-186555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:56:06.872 [DEBUG] [Thread-186555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:56:06.872 [DEBUG] [Thread-186555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:56:06.872 [DEBUG] [Thread-186555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:56:06.872 [DEBUG] [Thread-186555] [transport.py] [_log()] client lang: <none>
2026-02-14T13:56:06.872 [DEBUG] [Thread-186555] [transport.py] [_log()] server lang: <none>
2026-02-14T13:56:06.872 [DEBUG] [Thread-186555] [transport.py] [_log()] kex follows: False
2026-02-14T13:56:06.872 [DEBUG] [Thread-186555] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:56:06.872 [DEBUG] [Thread-186555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:56:06.873 [DEBUG] [Thread-186555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:56:06.873 [DEBUG] [Thread-186555] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:56:06.873 [DEBUG] [Thread-186555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:56:06.873 [DEBUG] [Thread-186555] [transport.py] [_log()] Compression: none
2026-02-14T13:56:06.873 [DEBUG] [Thread-186555] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:56:06.931 [DEBUG] [Thread-186555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:56:06.932 [DEBUG] [Thread-186555] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:56:06.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:56:06.933 [DEBUG] [Thread-186555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:56:06.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:56:06.988 [DEBUG] [Thread-186555] [transport.py] [_log()] userauth is OK
2026-02-14T13:56:06.989 [DEBUG] [Thread-186555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:56:06.989 [DEBUG] [Thread-186555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:56:06.989 [DEBUG] [Thread-186555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:56:06.989 [DEBUG] [Thread-186555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:56:07.009 [INFO] [Thread-186555] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:56:07.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-14T13:56:07.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:56:07.812 [DEBUG] [Thread-186555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:56:07.812 [DEBUG] [Thread-186555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:56:07.859 [DEBUG] [Thread-186555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:56:07.860 [DEBUG] [Thread-186555] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:56:07.869 [DEBUG] [Thread-186555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:56:07.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:56: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')
2026-02-14T13:56:07.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-14T13:56:07.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:56:07.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:56:07.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:56:07.905 [DEBUG] [Thread-186555] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:56:11.080 [DEBUG] [Thread-186557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:56:25.077 [DEBUG] [Thread-186558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:56:26.132 [DEBUG] [Thread-186559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:56:33.961 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:56:33.961 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:56:37.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:56:37.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:56:37.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-14T13:56:40.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 56, 25), 14.75, 36.6, 0.0, 32.08, 15.65, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:56:40.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:56:25
2026-02-14T13:56:40.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:56:40.965 [DEBUG] [Thread-186560] [transport.py] [_log()] starting thread (client mode): 0xa2d13f40
2026-02-14T13:56:40.966 [DEBUG] [Thread-186560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:56:40.988 [DEBUG] [Thread-186560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:56:40.989 [INFO] [Thread-186560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:56:40.992 [DEBUG] [Thread-186560] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:56:40.993 [DEBUG] [Thread-186560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:56:40.993 [DEBUG] [Thread-186560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:56:40.993 [DEBUG] [Thread-186560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:56:40.993 [DEBUG] [Thread-186560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:56:40.993 [DEBUG] [Thread-186560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:56:40.993 [DEBUG] [Thread-186560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:56:40.993 [DEBUG] [Thread-186560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:56:40.993 [DEBUG] [Thread-186560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:56:40.993 [DEBUG] [Thread-186560] [transport.py] [_log()] client lang: <none>
2026-02-14T13:56:40.994 [DEBUG] [Thread-186560] [transport.py] [_log()] server lang: <none>
2026-02-14T13:56:40.994 [DEBUG] [Thread-186560] [transport.py] [_log()] kex follows: False
2026-02-14T13:56:40.994 [DEBUG] [Thread-186560] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:56:40.994 [DEBUG] [Thread-186560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:56:40.994 [DEBUG] [Thread-186560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:56:40.994 [DEBUG] [Thread-186560] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:56:40.994 [DEBUG] [Thread-186560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:56:40.994 [DEBUG] [Thread-186560] [transport.py] [_log()] Compression: none
2026-02-14T13:56:40.994 [DEBUG] [Thread-186560] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:56:41.011 [DEBUG] [Thread-186560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:56:41.012 [DEBUG] [Thread-186560] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:56:41.012 [DEBUG] [Thread-186560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:56:41.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:56:41.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:56:41.015 [DEBUG] [Thread-186560] [transport.py] [_log()] userauth is OK
2026-02-14T13:56:41.015 [DEBUG] [Thread-186560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:56:41.015 [DEBUG] [Thread-186560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:56:41.015 [DEBUG] [Thread-186560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:56:41.015 [DEBUG] [Thread-186560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:56:41.040 [INFO] [Thread-186560] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:56:41.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:56:41.174 [DEBUG] [Thread-186562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:56:41.698 [DEBUG] [Thread-186560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:56:41.698 [DEBUG] [Thread-186560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:56:41.698 [DEBUG] [Thread-186560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:56:41.740 [DEBUG] [Thread-186560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:56:41.740 [DEBUG] [Thread-186560] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:56:41.743 [DEBUG] [Thread-186560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:56:41.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:56:41.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:56:41.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:56:41.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:56:41.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:56:41.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:56:41.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:56:41.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:56:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:56:41.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.497331 -999.00  +15.90  24.41     42   +3.10 1 1 1 1 1   888    0 13.89 37.95 ----- 23.4 24.4 164.1 34.0 21.9 -26.3 20.7 -31.0 21.6 -25.1 22.6 -27.6
2026-02-14T13:56:41.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:56:41.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:56:41.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.497331
2026-02-14T13:56:41.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:56:41.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:56:41.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:56:41.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:56:41.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:56:41.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:56:25', tmtdew=14.75, humidity=36.6, cloud=0.0, wind=32.08, temperature=15.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:56:09.398', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:56:41.769 [DEBUG] [Thread-186560] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:56:41.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-14T13:56:41.861 [DEBUG] [Thread-186564] [transport.py] [_log()] starting thread (client mode): 0xa575bd00
2026-02-14T13:56:41.862 [DEBUG] [Thread-186564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:56:41.876 [DEBUG] [Thread-186564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:56:41.876 [INFO] [Thread-186564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:56:41.884 [DEBUG] [Thread-186564] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:56:41.884 [DEBUG] [Thread-186564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:56:41.884 [DEBUG] [Thread-186564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:56:41.884 [DEBUG] [Thread-186564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:56:41.884 [DEBUG] [Thread-186564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:56:41.884 [DEBUG] [Thread-186564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:56:41.884 [DEBUG] [Thread-186564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:56:41.884 [DEBUG] [Thread-186564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:56:41.884 [DEBUG] [Thread-186564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:56:41.884 [DEBUG] [Thread-186564] [transport.py] [_log()] client lang: <none>
2026-02-14T13:56:41.884 [DEBUG] [Thread-186564] [transport.py] [_log()] server lang: <none>
2026-02-14T13:56:41.884 [DEBUG] [Thread-186564] [transport.py] [_log()] kex follows: False
2026-02-14T13:56:41.884 [DEBUG] [Thread-186564] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:56:41.884 [DEBUG] [Thread-186564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:56:41.884 [DEBUG] [Thread-186564] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:56:41.885 [DEBUG] [Thread-186564] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:56:41.885 [DEBUG] [Thread-186564] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:56:41.885 [DEBUG] [Thread-186564] [transport.py] [_log()] Compression: none
2026-02-14T13:56:41.885 [DEBUG] [Thread-186564] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:56:41.940 [DEBUG] [Thread-186564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:56:41.941 [DEBUG] [Thread-186564] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:56:41.941 [DEBUG] [Thread-186564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:56:41.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:56:41.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:56:41.997 [DEBUG] [Thread-186564] [transport.py] [_log()] userauth is OK
2026-02-14T13:56:41.997 [DEBUG] [Thread-186564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:56:41.997 [DEBUG] [Thread-186564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:56:41.997 [DEBUG] [Thread-186564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:56:41.997 [DEBUG] [Thread-186564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:56:42.016 [INFO] [Thread-186564] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:56:42.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T13:56:42.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:56:42.880 [DEBUG] [Thread-186564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:56:42.881 [DEBUG] [Thread-186564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:56:42.929 [DEBUG] [Thread-186564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:56:42.936 [DEBUG] [Thread-186564] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:56:42.945 [DEBUG] [Thread-186564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:56:42.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:56:42.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-14T13:56:42.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-14T13:56:42.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:56:42.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:56:42.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:56:42.978 [DEBUG] [Thread-186564] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:56:56.206 [DEBUG] [Thread-186566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:57:11.255 [DEBUG] [Thread-186567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:57:13.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:57:13.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:57:13.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-14T13:57:14.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 57), 14.5, 37.63, 0.0, 28.44, 15.5, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:57:14.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:57:00
2026-02-14T13:57:15.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:57:15.404 [DEBUG] [Thread-186568] [transport.py] [_log()] starting thread (client mode): 0xa2d223e0
2026-02-14T13:57:15.404 [DEBUG] [Thread-186568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:57:15.423 [DEBUG] [Thread-186568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:57:15.423 [INFO] [Thread-186568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:57:15.426 [DEBUG] [Thread-186568] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:57:15.427 [DEBUG] [Thread-186568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:57:15.427 [DEBUG] [Thread-186568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:57:15.427 [DEBUG] [Thread-186568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:57:15.427 [DEBUG] [Thread-186568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:57:15.427 [DEBUG] [Thread-186568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:57:15.427 [DEBUG] [Thread-186568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:57:15.427 [DEBUG] [Thread-186568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:57:15.427 [DEBUG] [Thread-186568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:57:15.427 [DEBUG] [Thread-186568] [transport.py] [_log()] client lang: <none>
2026-02-14T13:57:15.427 [DEBUG] [Thread-186568] [transport.py] [_log()] server lang: <none>
2026-02-14T13:57:15.427 [DEBUG] [Thread-186568] [transport.py] [_log()] kex follows: False
2026-02-14T13:57:15.427 [DEBUG] [Thread-186568] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:57:15.427 [DEBUG] [Thread-186568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:57:15.427 [DEBUG] [Thread-186568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:57:15.427 [DEBUG] [Thread-186568] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:57:15.427 [DEBUG] [Thread-186568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:57:15.427 [DEBUG] [Thread-186568] [transport.py] [_log()] Compression: none
2026-02-14T13:57:15.427 [DEBUG] [Thread-186568] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:57:15.444 [DEBUG] [Thread-186568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:57:15.445 [DEBUG] [Thread-186568] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:57:15.446 [DEBUG] [Thread-186568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:57:15.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:57:15.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:57:15.448 [DEBUG] [Thread-186568] [transport.py] [_log()] userauth is OK
2026-02-14T13:57:15.449 [DEBUG] [Thread-186568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:57:15.449 [DEBUG] [Thread-186568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:57:15.449 [DEBUG] [Thread-186568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:57:15.449 [DEBUG] [Thread-186568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:57:15.471 [INFO] [Thread-186568] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:57:15.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:57:16.241 [DEBUG] [Thread-186568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:57:16.242 [DEBUG] [Thread-186568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:57:16.242 [DEBUG] [Thread-186568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:57:16.283 [DEBUG] [Thread-186568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:57:16.283 [DEBUG] [Thread-186568] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:57:16.287 [DEBUG] [Thread-186568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:57:16.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:57:16.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:57:16.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:57:16.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:57:16.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:57:16.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:57:16.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:57:16.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:57:16.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:57:16.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.497678 -999.00  +15.70  21.29     42   +2.90 1 1 1 1 1   888    0 13.90 36.86 ----- 23.8 21.3 167.9 28.8 22.0 -26.5 20.9 -27.4 21.7 -24.5 22.9 -26.2
2026-02-14T13:57:16.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:57:16.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:57:16.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.497678
2026-02-14T13:57:16.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:57:16.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:57:16.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:57:16.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:57:16.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:57:16.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:57:00', tmtdew=14.5, humidity=37.63, cloud=0.0, wind=28.44, temperature=15.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:56:39.379', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:57:16.318 [DEBUG] [Thread-186568] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:57:16.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-14T13:57:16.413 [DEBUG] [Thread-186571] [transport.py] [_log()] starting thread (client mode): 0xa2db49d0
2026-02-14T13:57:16.413 [DEBUG] [Thread-186571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:57:16.428 [DEBUG] [Thread-186571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:57:16.428 [INFO] [Thread-186571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:57:16.435 [DEBUG] [Thread-186571] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:57:16.436 [DEBUG] [Thread-186571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:57:16.436 [DEBUG] [Thread-186571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:57:16.436 [DEBUG] [Thread-186571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:57:16.436 [DEBUG] [Thread-186571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:57:16.436 [DEBUG] [Thread-186571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:57:16.436 [DEBUG] [Thread-186571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:57:16.436 [DEBUG] [Thread-186571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:57:16.436 [DEBUG] [Thread-186571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:57:16.436 [DEBUG] [Thread-186571] [transport.py] [_log()] client lang: <none>
2026-02-14T13:57:16.436 [DEBUG] [Thread-186571] [transport.py] [_log()] server lang: <none>
2026-02-14T13:57:16.436 [DEBUG] [Thread-186571] [transport.py] [_log()] kex follows: False
2026-02-14T13:57:16.436 [DEBUG] [Thread-186571] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:57:16.436 [DEBUG] [Thread-186571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:57:16.436 [DEBUG] [Thread-186571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:57:16.436 [DEBUG] [Thread-186571] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:57:16.436 [DEBUG] [Thread-186571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:57:16.436 [DEBUG] [Thread-186571] [transport.py] [_log()] Compression: none
2026-02-14T13:57:16.436 [DEBUG] [Thread-186571] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:57:16.493 [DEBUG] [Thread-186571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:57:16.494 [DEBUG] [Thread-186571] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:57:16.494 [DEBUG] [Thread-186571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:57:16.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:57:16.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:57:16.549 [DEBUG] [Thread-186571] [transport.py] [_log()] userauth is OK
2026-02-14T13:57:16.549 [DEBUG] [Thread-186571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:57:16.549 [DEBUG] [Thread-186571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:57:16.549 [DEBUG] [Thread-186571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:57:16.549 [DEBUG] [Thread-186571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:57:16.568 [INFO] [Thread-186571] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:57:16.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-14T13:57:16.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:57:17.411 [DEBUG] [Thread-186571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:57:17.411 [DEBUG] [Thread-186571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:57:17.459 [DEBUG] [Thread-186571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:57:17.460 [DEBUG] [Thread-186571] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:57:17.469 [DEBUG] [Thread-186571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:57:17.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:57:17.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:57:17.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-14T13:57:17.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:57:17.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:57:17.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:57:17.505 [DEBUG] [Thread-186571] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:57:25.112 [DEBUG] [Thread-186573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:57:26.295 [DEBUG] [Thread-186574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:57:34.104 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:57:34.105 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:57:41.345 [DEBUG] [Thread-186575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:57:47.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:57:47.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:57:47.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T13:57:49.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 57, 36), 15.67, 34.59, 0.0, 29.11, 16.54, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:57:49.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:57:36
2026-02-14T13:57:49.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:57:49.912 [DEBUG] [Thread-186576] [transport.py] [_log()] starting thread (client mode): 0xa2dc0ee0
2026-02-14T13:57:49.912 [DEBUG] [Thread-186576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:57:49.933 [DEBUG] [Thread-186576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:57:49.933 [INFO] [Thread-186576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:57:49.936 [DEBUG] [Thread-186576] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:57:49.936 [DEBUG] [Thread-186576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:57:49.936 [DEBUG] [Thread-186576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:57:49.936 [DEBUG] [Thread-186576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:57:49.936 [DEBUG] [Thread-186576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:57:49.936 [DEBUG] [Thread-186576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:57:49.936 [DEBUG] [Thread-186576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:57:49.936 [DEBUG] [Thread-186576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:57:49.936 [DEBUG] [Thread-186576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:57:49.936 [DEBUG] [Thread-186576] [transport.py] [_log()] client lang: <none>
2026-02-14T13:57:49.936 [DEBUG] [Thread-186576] [transport.py] [_log()] server lang: <none>
2026-02-14T13:57:49.936 [DEBUG] [Thread-186576] [transport.py] [_log()] kex follows: False
2026-02-14T13:57:49.937 [DEBUG] [Thread-186576] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:57:49.937 [DEBUG] [Thread-186576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:57:49.937 [DEBUG] [Thread-186576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:57:49.937 [DEBUG] [Thread-186576] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:57:49.937 [DEBUG] [Thread-186576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:57:49.937 [DEBUG] [Thread-186576] [transport.py] [_log()] Compression: none
2026-02-14T13:57:49.937 [DEBUG] [Thread-186576] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:57:49.956 [DEBUG] [Thread-186576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:57:49.957 [DEBUG] [Thread-186576] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:57:49.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:57:49.958 [DEBUG] [Thread-186576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:57:49.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:57:49.961 [DEBUG] [Thread-186576] [transport.py] [_log()] userauth is OK
2026-02-14T13:57:49.961 [DEBUG] [Thread-186576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:57:49.961 [DEBUG] [Thread-186576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:57:49.961 [DEBUG] [Thread-186576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:57:49.961 [DEBUG] [Thread-186576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:57:49.979 [INFO] [Thread-186576] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:57:49.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:57:50.621 [DEBUG] [Thread-186576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:57:50.621 [DEBUG] [Thread-186576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:57:50.621 [DEBUG] [Thread-186576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:57:50.662 [DEBUG] [Thread-186576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:57:50.662 [DEBUG] [Thread-186576] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:57:50.665 [DEBUG] [Thread-186576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:57:50.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:57:50.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:57:50.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:57:50.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:57:50.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:57:50.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:57:50.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:57:50.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:57:50.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:57:50.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.498025 -999.00  +15.70  21.97     41   +2.70 1 1 1 1 1   888    0 13.93 38.10 ----- 18.8 22.0 161.8 29.2 22.1 -27.5 21.0 -25.4 21.8 -25.7 23.0 -26.5
2026-02-14T13:57:50.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:57:50.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:57:50.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.498025
2026-02-14T13:57:50.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:57:50.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:57:50.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:57:50.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:57:50.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:57:50.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:57:36', tmtdew=15.67, humidity=34.59, cloud=0.0, wind=29.11, temperature=16.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:57:09.360', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:57:50.686 [DEBUG] [Thread-186576] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:57:50.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-14T13:57:50.784 [DEBUG] [Thread-186579] [transport.py] [_log()] starting thread (client mode): 0xa2dc07c0
2026-02-14T13:57:50.784 [DEBUG] [Thread-186579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:57:50.800 [DEBUG] [Thread-186579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:57:50.800 [INFO] [Thread-186579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:57:50.808 [DEBUG] [Thread-186579] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:57:50.808 [DEBUG] [Thread-186579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:57:50.808 [DEBUG] [Thread-186579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:57:50.808 [DEBUG] [Thread-186579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:57:50.808 [DEBUG] [Thread-186579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:57:50.808 [DEBUG] [Thread-186579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:57:50.809 [DEBUG] [Thread-186579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:57:50.809 [DEBUG] [Thread-186579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:57:50.809 [DEBUG] [Thread-186579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:57:50.809 [DEBUG] [Thread-186579] [transport.py] [_log()] client lang: <none>
2026-02-14T13:57:50.809 [DEBUG] [Thread-186579] [transport.py] [_log()] server lang: <none>
2026-02-14T13:57:50.809 [DEBUG] [Thread-186579] [transport.py] [_log()] kex follows: False
2026-02-14T13:57:50.809 [DEBUG] [Thread-186579] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:57:50.809 [DEBUG] [Thread-186579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:57:50.809 [DEBUG] [Thread-186579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:57:50.810 [DEBUG] [Thread-186579] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:57:50.810 [DEBUG] [Thread-186579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:57:50.810 [DEBUG] [Thread-186579] [transport.py] [_log()] Compression: none
2026-02-14T13:57:50.810 [DEBUG] [Thread-186579] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:57:50.868 [DEBUG] [Thread-186579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:57:50.869 [DEBUG] [Thread-186579] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:57:50.869 [DEBUG] [Thread-186579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:57:50.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:57:50.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:57:50.928 [DEBUG] [Thread-186579] [transport.py] [_log()] userauth is OK
2026-02-14T13:57:50.928 [DEBUG] [Thread-186579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:57:50.928 [DEBUG] [Thread-186579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:57:50.928 [DEBUG] [Thread-186579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:57:50.928 [DEBUG] [Thread-186579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:57:50.948 [INFO] [Thread-186579] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:57:50.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-14T13:57:50.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:57:51.776 [DEBUG] [Thread-186579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:57:51.776 [DEBUG] [Thread-186579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:57:51.824 [DEBUG] [Thread-186579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:57:51.825 [DEBUG] [Thread-186579] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:57:51.834 [DEBUG] [Thread-186579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:57:51.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:57:51.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-14T13:57:51.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-14T13:57:51.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:57:51.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:57:51.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:57:51.871 [DEBUG] [Thread-186579] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:57:56.382 [DEBUG] [Thread-186581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:58:11.443 [DEBUG] [Thread-186582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:58:21.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:58:21.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:58:21.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-14T13:58:24.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 58, 12), 14.75, 36.9, 0.0, 32.25, 15.7, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:58:24.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:58:12
2026-02-14T13:58:24.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:58:24.684 [DEBUG] [Thread-186583] [transport.py] [_log()] starting thread (client mode): 0xa2db49d0
2026-02-14T13:58:24.684 [DEBUG] [Thread-186583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:58:24.705 [DEBUG] [Thread-186583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:58:24.705 [INFO] [Thread-186583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:58:24.708 [DEBUG] [Thread-186583] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:58:24.708 [DEBUG] [Thread-186583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:58:24.708 [DEBUG] [Thread-186583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:58:24.708 [DEBUG] [Thread-186583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:58:24.708 [DEBUG] [Thread-186583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:58:24.708 [DEBUG] [Thread-186583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:58:24.708 [DEBUG] [Thread-186583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:58:24.708 [DEBUG] [Thread-186583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:58:24.708 [DEBUG] [Thread-186583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:58:24.709 [DEBUG] [Thread-186583] [transport.py] [_log()] client lang: <none>
2026-02-14T13:58:24.709 [DEBUG] [Thread-186583] [transport.py] [_log()] server lang: <none>
2026-02-14T13:58:24.709 [DEBUG] [Thread-186583] [transport.py] [_log()] kex follows: False
2026-02-14T13:58:24.709 [DEBUG] [Thread-186583] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:58:24.709 [DEBUG] [Thread-186583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:58:24.709 [DEBUG] [Thread-186583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:58:24.709 [DEBUG] [Thread-186583] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:58:24.709 [DEBUG] [Thread-186583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:58:24.709 [DEBUG] [Thread-186583] [transport.py] [_log()] Compression: none
2026-02-14T13:58:24.709 [DEBUG] [Thread-186583] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:58:24.728 [DEBUG] [Thread-186583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:58:24.729 [DEBUG] [Thread-186583] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:58:24.729 [DEBUG] [Thread-186583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:58:24.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:58:24.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:58:24.732 [DEBUG] [Thread-186583] [transport.py] [_log()] userauth is OK
2026-02-14T13:58:24.732 [DEBUG] [Thread-186583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:58:24.733 [DEBUG] [Thread-186583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:58:24.733 [DEBUG] [Thread-186583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:58:24.733 [DEBUG] [Thread-186583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:58:24.746 [INFO] [Thread-186583] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:58:24.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:58:25.155 [DEBUG] [Thread-186585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:58:25.420 [DEBUG] [Thread-186583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:58:25.420 [DEBUG] [Thread-186583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:58:25.421 [DEBUG] [Thread-186583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:58:25.461 [DEBUG] [Thread-186583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:58:25.462 [DEBUG] [Thread-186583] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:58:25.465 [DEBUG] [Thread-186583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:58:25.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:58:25.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:58:25.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:58:25.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:58:25.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:58:25.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:58:25.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:58:25.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:58:25.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:58:25.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.498373 -999.00  +15.70  34.57     41   +2.80 1 1 2 1 1   888    0 13.80 35.53 ----- 32.9 34.6 188.8 44.5 22.1 -27.7 20.5 -34.2 21.7 -25.9 22.9 -27.6
2026-02-14T13:58:25.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:58:25.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:58:25.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.498373
2026-02-14T13:58:25.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:58:25.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:58:25.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:58:25.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:58:25.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:58:25.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:58:12', tmtdew=14.75, humidity=36.9, cloud=0.0, wind=32.25, temperature=15.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:57:39.427', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:58:25.494 [DEBUG] [Thread-186583] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:58:25.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-14T13:58:25.594 [DEBUG] [Thread-186587] [transport.py] [_log()] starting thread (client mode): 0xa2d13130
2026-02-14T13:58:25.594 [DEBUG] [Thread-186587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:58:25.609 [DEBUG] [Thread-186587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:58:25.609 [INFO] [Thread-186587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:58:25.616 [DEBUG] [Thread-186587] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:58:25.617 [DEBUG] [Thread-186587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:58:25.617 [DEBUG] [Thread-186587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:58:25.617 [DEBUG] [Thread-186587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:58:25.617 [DEBUG] [Thread-186587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:58:25.617 [DEBUG] [Thread-186587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:58:25.617 [DEBUG] [Thread-186587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:58:25.617 [DEBUG] [Thread-186587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:58:25.617 [DEBUG] [Thread-186587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:58:25.617 [DEBUG] [Thread-186587] [transport.py] [_log()] client lang: <none>
2026-02-14T13:58:25.617 [DEBUG] [Thread-186587] [transport.py] [_log()] server lang: <none>
2026-02-14T13:58:25.617 [DEBUG] [Thread-186587] [transport.py] [_log()] kex follows: False
2026-02-14T13:58:25.617 [DEBUG] [Thread-186587] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:58:25.617 [DEBUG] [Thread-186587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:58:25.617 [DEBUG] [Thread-186587] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:58:25.617 [DEBUG] [Thread-186587] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:58:25.617 [DEBUG] [Thread-186587] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:58:25.617 [DEBUG] [Thread-186587] [transport.py] [_log()] Compression: none
2026-02-14T13:58:25.618 [DEBUG] [Thread-186587] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:58:25.677 [DEBUG] [Thread-186587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:58:25.677 [DEBUG] [Thread-186587] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:58:25.678 [DEBUG] [Thread-186587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:58:25.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:58:25.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:58:25.732 [DEBUG] [Thread-186587] [transport.py] [_log()] userauth is OK
2026-02-14T13:58:25.733 [DEBUG] [Thread-186587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:58:25.733 [DEBUG] [Thread-186587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:58:25.733 [DEBUG] [Thread-186587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:58:25.733 [DEBUG] [Thread-186587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:58:25.751 [INFO] [Thread-186587] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:58:25.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T13:58:25.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:58:26.483 [DEBUG] [Thread-186589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:58:26.586 [DEBUG] [Thread-186587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:58:26.586 [DEBUG] [Thread-186587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:58:26.633 [DEBUG] [Thread-186587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:58:26.634 [DEBUG] [Thread-186587] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:58:26.643 [DEBUG] [Thread-186587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:58:26.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:58:26.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-14T13:58:26.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-14T13:58:26.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:58:26.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:58:26.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:58:26.680 [DEBUG] [Thread-186587] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:58:34.248 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:58:34.249 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:58:41.538 [DEBUG] [Thread-186590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:58:56.577 [DEBUG] [Thread-186591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:58:56.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:58:56.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:58:56.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-14T13:58:58.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 58, 48), 15.1, 36.08, 0.0, 28.16, 15.93, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:58:58.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:58:48
2026-02-14T13:58:58.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:58:59.082 [DEBUG] [Thread-186592] [transport.py] [_log()] starting thread (client mode): 0xa2debac0
2026-02-14T13:58:59.082 [DEBUG] [Thread-186592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:58:59.105 [DEBUG] [Thread-186592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:58:59.105 [INFO] [Thread-186592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:58:59.109 [DEBUG] [Thread-186592] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:58:59.109 [DEBUG] [Thread-186592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:58:59.109 [DEBUG] [Thread-186592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:58:59.109 [DEBUG] [Thread-186592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:58:59.109 [DEBUG] [Thread-186592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:58:59.109 [DEBUG] [Thread-186592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:58:59.110 [DEBUG] [Thread-186592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:58:59.110 [DEBUG] [Thread-186592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:58:59.110 [DEBUG] [Thread-186592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:58:59.110 [DEBUG] [Thread-186592] [transport.py] [_log()] client lang: <none>
2026-02-14T13:58:59.110 [DEBUG] [Thread-186592] [transport.py] [_log()] server lang: <none>
2026-02-14T13:58:59.110 [DEBUG] [Thread-186592] [transport.py] [_log()] kex follows: False
2026-02-14T13:58:59.110 [DEBUG] [Thread-186592] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:58:59.110 [DEBUG] [Thread-186592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:58:59.110 [DEBUG] [Thread-186592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:58:59.110 [DEBUG] [Thread-186592] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:58:59.111 [DEBUG] [Thread-186592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:58:59.111 [DEBUG] [Thread-186592] [transport.py] [_log()] Compression: none
2026-02-14T13:58:59.111 [DEBUG] [Thread-186592] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:58:59.132 [DEBUG] [Thread-186592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:58:59.132 [DEBUG] [Thread-186592] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:58:59.133 [DEBUG] [Thread-186592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:58:59.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:58:59.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:58:59.135 [DEBUG] [Thread-186592] [transport.py] [_log()] userauth is OK
2026-02-14T13:58:59.135 [DEBUG] [Thread-186592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:58:59.136 [DEBUG] [Thread-186592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:58:59.136 [DEBUG] [Thread-186592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:58:59.136 [DEBUG] [Thread-186592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:58:59.171 [INFO] [Thread-186592] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:58:59.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:58:59.834 [DEBUG] [Thread-186592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:58:59.834 [DEBUG] [Thread-186592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:58:59.835 [DEBUG] [Thread-186592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:58:59.875 [DEBUG] [Thread-186592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:58:59.875 [DEBUG] [Thread-186592] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:58:59.878 [DEBUG] [Thread-186592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:58:59.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:58:59.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:58:59.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:58:59.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:58:59.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:58:59.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:58:59.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:58:59.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:58:59.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:58:59.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.498720 -999.00  +15.20  19.42     42   +2.60 1 1 1 1 1   888    0 13.97 34.09 ----- 21.0 19.4 177.4 38.0 21.8 -28.0 20.6 -25.2 21.5 -26.2 22.6 -28.5
2026-02-14T13:58:59.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:58:59.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:58:59.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.498720
2026-02-14T13:58:59.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:58:59.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:58:59.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:58:59.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:58:59.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:58:59.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:58:48', tmtdew=15.1, humidity=36.08, cloud=0.0, wind=28.16, temperature=15.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:58:09.408', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:58:59.904 [DEBUG] [Thread-186592] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:58:59.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-14T13:59:00.001 [DEBUG] [Thread-186595] [transport.py] [_log()] starting thread (client mode): 0xa2d13820
2026-02-14T13:59:00.001 [DEBUG] [Thread-186595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:59:00.015 [DEBUG] [Thread-186595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:59:00.015 [INFO] [Thread-186595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:59:00.022 [DEBUG] [Thread-186595] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:59:00.022 [DEBUG] [Thread-186595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:59:00.022 [DEBUG] [Thread-186595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:59:00.022 [DEBUG] [Thread-186595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:59:00.022 [DEBUG] [Thread-186595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:59:00.023 [DEBUG] [Thread-186595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:59:00.023 [DEBUG] [Thread-186595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:59:00.023 [DEBUG] [Thread-186595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:59:00.023 [DEBUG] [Thread-186595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:59:00.023 [DEBUG] [Thread-186595] [transport.py] [_log()] client lang: <none>
2026-02-14T13:59:00.023 [DEBUG] [Thread-186595] [transport.py] [_log()] server lang: <none>
2026-02-14T13:59:00.023 [DEBUG] [Thread-186595] [transport.py] [_log()] kex follows: False
2026-02-14T13:59:00.023 [DEBUG] [Thread-186595] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:59:00.023 [DEBUG] [Thread-186595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:59:00.023 [DEBUG] [Thread-186595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:59:00.023 [DEBUG] [Thread-186595] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:59:00.023 [DEBUG] [Thread-186595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:59:00.023 [DEBUG] [Thread-186595] [transport.py] [_log()] Compression: none
2026-02-14T13:59:00.023 [DEBUG] [Thread-186595] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:59:00.079 [DEBUG] [Thread-186595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:59:00.080 [DEBUG] [Thread-186595] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:59:00.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:59:00.081 [DEBUG] [Thread-186595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:59:00.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:59:00.136 [DEBUG] [Thread-186595] [transport.py] [_log()] userauth is OK
2026-02-14T13:59:00.136 [DEBUG] [Thread-186595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:59:00.136 [DEBUG] [Thread-186595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:59:00.136 [DEBUG] [Thread-186595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:59:00.136 [DEBUG] [Thread-186595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:59:00.158 [INFO] [Thread-186595] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:59:00.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-14T13:59:00.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:59:01.024 [DEBUG] [Thread-186595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:59:01.024 [DEBUG] [Thread-186595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:59:01.072 [DEBUG] [Thread-186595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:59:01.072 [DEBUG] [Thread-186595] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:59:01.080 [DEBUG] [Thread-186595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:59:01.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:59:01.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-14T13:59:01.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-14T13:59:01.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:59:01.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:59:01.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:59:01.114 [DEBUG] [Thread-186595] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:59:11.612 [DEBUG] [Thread-186597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:59:25.188 [DEBUG] [Thread-186598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:59:26.669 [DEBUG] [Thread-186599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:59:31.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T13:59:31.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T13:59:31.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-14T13:59:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 59, 23), 15.13, 36.0, 0.0, 30.58, 15.92, 0, 0, 0, 2, 0, 0),)
2026-02-14T13:59:32.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:59:23
2026-02-14T13:59:33.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T13:59:33.496 [DEBUG] [Thread-186600] [transport.py] [_log()] starting thread (client mode): 0xa2deb430
2026-02-14T13:59:33.496 [DEBUG] [Thread-186600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:59:33.517 [DEBUG] [Thread-186600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T13:59:33.517 [INFO] [Thread-186600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T13:59:33.520 [DEBUG] [Thread-186600] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:59:33.520 [DEBUG] [Thread-186600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T13:59:33.521 [DEBUG] [Thread-186600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:59:33.521 [DEBUG] [Thread-186600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:59:33.521 [DEBUG] [Thread-186600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:59:33.521 [DEBUG] [Thread-186600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:59:33.521 [DEBUG] [Thread-186600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:59:33.521 [DEBUG] [Thread-186600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:59:33.521 [DEBUG] [Thread-186600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:59:33.521 [DEBUG] [Thread-186600] [transport.py] [_log()] client lang: <none>
2026-02-14T13:59:33.521 [DEBUG] [Thread-186600] [transport.py] [_log()] server lang: <none>
2026-02-14T13:59:33.521 [DEBUG] [Thread-186600] [transport.py] [_log()] kex follows: False
2026-02-14T13:59:33.521 [DEBUG] [Thread-186600] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:59:33.521 [DEBUG] [Thread-186600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:59:33.521 [DEBUG] [Thread-186600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:59:33.521 [DEBUG] [Thread-186600] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:59:33.521 [DEBUG] [Thread-186600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:59:33.521 [DEBUG] [Thread-186600] [transport.py] [_log()] Compression: none
2026-02-14T13:59:33.521 [DEBUG] [Thread-186600] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:59:33.538 [DEBUG] [Thread-186600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:59:33.539 [DEBUG] [Thread-186600] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:59:33.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T13:59:33.540 [DEBUG] [Thread-186600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T13:59:33.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:59:33.542 [DEBUG] [Thread-186600] [transport.py] [_log()] userauth is OK
2026-02-14T13:59:33.542 [DEBUG] [Thread-186600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:59:33.542 [DEBUG] [Thread-186600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:59:33.542 [DEBUG] [Thread-186600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T13:59:33.543 [DEBUG] [Thread-186600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:59:33.567 [INFO] [Thread-186600] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:59:33.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:59:34.218 [DEBUG] [Thread-186600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:59:34.218 [DEBUG] [Thread-186600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:59:34.219 [DEBUG] [Thread-186600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T13:59:34.260 [DEBUG] [Thread-186600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:59:34.260 [DEBUG] [Thread-186600] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:59:34.263 [DEBUG] [Thread-186600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:59:34.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:59:34.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T13:59:34.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T13:59:34.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T13:59:34.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:59:34.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T13:59:34.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:59:34.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:59:34.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T13:59:34.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.499067 -999.00  +15.30  23.81     42   +2.70 1 1 1 1 1   888    0 13.92 33.23 ----- 18.1 23.8 187.2 35.1 21.9 -28.1 20.5 -27.4 21.6 -27.6 22.8 -27.2
2026-02-14T13:59:34.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T13:59:34.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T13:59:34.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.499067
2026-02-14T13:59:34.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T13:59:34.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T13:59:34.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T13:59:34.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T13:59:34.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T13:59:34.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:59:23', tmtdew=15.13, humidity=36.0, cloud=0.0, wind=30.58, temperature=15.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:58:39.389', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T13:59:34.291 [DEBUG] [Thread-186600] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:59:34.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-14T13:59:34.387 [DEBUG] [Thread-186603] [transport.py] [_log()] starting thread (client mode): 0xa575b1f0
2026-02-14T13:59:34.387 [DEBUG] [Thread-186603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T13:59:34.388 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:59:34.389 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:59:34.402 [DEBUG] [Thread-186603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T13:59:34.402 [INFO] [Thread-186603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T13:59:34.409 [DEBUG] [Thread-186603] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T13:59:34.410 [DEBUG] [Thread-186603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T13:59:34.410 [DEBUG] [Thread-186603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T13:59:34.410 [DEBUG] [Thread-186603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:59:34.410 [DEBUG] [Thread-186603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T13:59:34.410 [DEBUG] [Thread-186603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:59:34.410 [DEBUG] [Thread-186603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T13:59:34.411 [DEBUG] [Thread-186603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T13:59:34.411 [DEBUG] [Thread-186603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T13:59:34.411 [DEBUG] [Thread-186603] [transport.py] [_log()] client lang: <none>
2026-02-14T13:59:34.411 [DEBUG] [Thread-186603] [transport.py] [_log()] server lang: <none>
2026-02-14T13:59:34.411 [DEBUG] [Thread-186603] [transport.py] [_log()] kex follows: False
2026-02-14T13:59:34.411 [DEBUG] [Thread-186603] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T13:59:34.411 [DEBUG] [Thread-186603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T13:59:34.411 [DEBUG] [Thread-186603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T13:59:34.412 [DEBUG] [Thread-186603] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T13:59:34.412 [DEBUG] [Thread-186603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T13:59:34.412 [DEBUG] [Thread-186603] [transport.py] [_log()] Compression: none
2026-02-14T13:59:34.412 [DEBUG] [Thread-186603] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T13:59:34.468 [DEBUG] [Thread-186603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T13:59:34.468 [DEBUG] [Thread-186603] [transport.py] [_log()] Switch to new keys ...
2026-02-14T13:59:34.469 [DEBUG] [Thread-186603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T13:59:34.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T13:59:34.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T13:59:34.525 [DEBUG] [Thread-186603] [transport.py] [_log()] userauth is OK
2026-02-14T13:59:34.525 [DEBUG] [Thread-186603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T13:59:34.526 [DEBUG] [Thread-186603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T13:59:34.526 [DEBUG] [Thread-186603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T13:59:34.526 [DEBUG] [Thread-186603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T13:59:34.545 [INFO] [Thread-186603] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T13:59:34.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-14T13:59:34.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T13:59:35.361 [DEBUG] [Thread-186603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T13:59:35.361 [DEBUG] [Thread-186603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T13:59:35.409 [DEBUG] [Thread-186603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T13:59:35.410 [DEBUG] [Thread-186603] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T13:59:35.419 [DEBUG] [Thread-186603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T13:59:35.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T13:59:35.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T13:59:35.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-14T13:59:35.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T13:59:35.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T13:59:35.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T13:59:35.455 [DEBUG] [Thread-186603] [transport.py] [_log()] EOF in transport thread
2026-02-14T13:59:41.709 [DEBUG] [Thread-186605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T13:59:56.769 [DEBUG] [Thread-186606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:00:05.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:00:05.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:00:05.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-14T14:00:07.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 13, 59, 58), 14.55, 37.21, 0.0, 38.11, 15.83, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:00:07.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 13:59:58
2026-02-14T14:00:07.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:00:07.760 [DEBUG] [Thread-186607] [transport.py] [_log()] starting thread (client mode): 0xa2dc34c0
2026-02-14T14:00:07.760 [DEBUG] [Thread-186607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:00:07.778 [DEBUG] [Thread-186607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:00:07.778 [INFO] [Thread-186607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:00:07.782 [DEBUG] [Thread-186607] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:00:07.782 [DEBUG] [Thread-186607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:00:07.782 [DEBUG] [Thread-186607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:00:07.782 [DEBUG] [Thread-186607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:00:07.782 [DEBUG] [Thread-186607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:00:07.782 [DEBUG] [Thread-186607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:00:07.782 [DEBUG] [Thread-186607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:00:07.782 [DEBUG] [Thread-186607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:00:07.782 [DEBUG] [Thread-186607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:00:07.782 [DEBUG] [Thread-186607] [transport.py] [_log()] client lang: <none>
2026-02-14T14:00:07.782 [DEBUG] [Thread-186607] [transport.py] [_log()] server lang: <none>
2026-02-14T14:00:07.782 [DEBUG] [Thread-186607] [transport.py] [_log()] kex follows: False
2026-02-14T14:00:07.782 [DEBUG] [Thread-186607] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:00:07.782 [DEBUG] [Thread-186607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:00:07.782 [DEBUG] [Thread-186607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:00:07.782 [DEBUG] [Thread-186607] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:00:07.782 [DEBUG] [Thread-186607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:00:07.782 [DEBUG] [Thread-186607] [transport.py] [_log()] Compression: none
2026-02-14T14:00:07.782 [DEBUG] [Thread-186607] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:00:07.797 [DEBUG] [Thread-186607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:00:07.797 [DEBUG] [Thread-186607] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:00:07.797 [DEBUG] [Thread-186607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:00:07.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:00:07.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:00:07.799 [DEBUG] [Thread-186607] [transport.py] [_log()] userauth is OK
2026-02-14T14:00:07.799 [DEBUG] [Thread-186607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:00:07.799 [DEBUG] [Thread-186607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:00:07.799 [DEBUG] [Thread-186607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:00:07.799 [DEBUG] [Thread-186607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:00:07.830 [INFO] [Thread-186607] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:00:07.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:00:10.913 [DEBUG] [Thread-186607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:00:10.913 [DEBUG] [Thread-186607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:00:10.913 [DEBUG] [Thread-186607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:00:10.954 [DEBUG] [Thread-186607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:00:10.954 [DEBUG] [Thread-186607] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:00:10.957 [DEBUG] [Thread-186607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:00:10.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:00:10.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:00:10.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:00:10.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:00:10.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:00:10.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:00:10.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:00:10.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:00:10.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:00:10.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.499761 -999.00  +16.00  32.54     43   +3.50 1 1 2 1 1   888    0 13.90 29.35 ----- 26.7 32.5 145.2 36.1 22.0 -26.6 21.0 -27.5 21.8 -24.4 22.9 -27.0
2026-02-14T14:00:10.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:00:10.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:00:10.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.499761
2026-02-14T14:00:10.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:00:10.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:00:10.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:00:10.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:00:10.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:00:10.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T13:59:58', tmtdew=14.55, humidity=37.21, cloud=0.0, wind=38.11, temperature=15.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T11:59:39.350', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:00:10.983 [DEBUG] [Thread-186607] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:00:11.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-14T14:00:11.079 [DEBUG] [Thread-186610] [transport.py] [_log()] starting thread (client mode): 0xa2d22380
2026-02-14T14:00:11.079 [DEBUG] [Thread-186610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:00:11.094 [DEBUG] [Thread-186610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:00:11.095 [INFO] [Thread-186610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:00:11.102 [DEBUG] [Thread-186610] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:00:11.103 [DEBUG] [Thread-186610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:00:11.103 [DEBUG] [Thread-186610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:00:11.103 [DEBUG] [Thread-186610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:00:11.103 [DEBUG] [Thread-186610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:00:11.103 [DEBUG] [Thread-186610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:00:11.103 [DEBUG] [Thread-186610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:00:11.103 [DEBUG] [Thread-186610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:00:11.104 [DEBUG] [Thread-186610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:00:11.104 [DEBUG] [Thread-186610] [transport.py] [_log()] client lang: <none>
2026-02-14T14:00:11.104 [DEBUG] [Thread-186610] [transport.py] [_log()] server lang: <none>
2026-02-14T14:00:11.104 [DEBUG] [Thread-186610] [transport.py] [_log()] kex follows: False
2026-02-14T14:00:11.104 [DEBUG] [Thread-186610] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:00:11.104 [DEBUG] [Thread-186610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:00:11.104 [DEBUG] [Thread-186610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:00:11.104 [DEBUG] [Thread-186610] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:00:11.105 [DEBUG] [Thread-186610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:00:11.105 [DEBUG] [Thread-186610] [transport.py] [_log()] Compression: none
2026-02-14T14:00:11.105 [DEBUG] [Thread-186610] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:00:11.161 [DEBUG] [Thread-186610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:00:11.162 [DEBUG] [Thread-186610] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:00:11.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:00:11.163 [DEBUG] [Thread-186610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:00:11.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:00:11.222 [DEBUG] [Thread-186610] [transport.py] [_log()] userauth is OK
2026-02-14T14:00:11.222 [DEBUG] [Thread-186610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:00:11.222 [DEBUG] [Thread-186610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:00:11.223 [DEBUG] [Thread-186610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:00:11.223 [DEBUG] [Thread-186610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:00:11.241 [INFO] [Thread-186610] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:00:11.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-14T14:00:11.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:00:11.808 [DEBUG] [Thread-186612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:00:12.077 [DEBUG] [Thread-186610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:00:12.078 [DEBUG] [Thread-186610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:00:12.125 [DEBUG] [Thread-186610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:00:12.126 [DEBUG] [Thread-186610] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:00:12.135 [DEBUG] [Thread-186610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:00:12.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:00: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-14T14:00:12.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-14T14:00:12.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:00:12.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:00:12.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:00:12.171 [DEBUG] [Thread-186610] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:00:25.225 [DEBUG] [Thread-186613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:00:26.860 [DEBUG] [Thread-186614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:00:34.528 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:00:34.529 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:00:41.898 [DEBUG] [Thread-186615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:00:42.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:00:42.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:00:42.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-14T14:00:44.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 0, 34), 15.87, 34.3, 0.0, 32.14, 17.27, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:00:44.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:00:34
2026-02-14T14:00:44.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:00:44.989 [DEBUG] [Thread-186616] [transport.py] [_log()] starting thread (client mode): 0xa2dc1570
2026-02-14T14:00:44.989 [DEBUG] [Thread-186616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:00:45.008 [DEBUG] [Thread-186616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:00:45.008 [INFO] [Thread-186616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:00:45.011 [DEBUG] [Thread-186616] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:00:45.012 [DEBUG] [Thread-186616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:00:45.012 [DEBUG] [Thread-186616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:00:45.012 [DEBUG] [Thread-186616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:00:45.012 [DEBUG] [Thread-186616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:00:45.012 [DEBUG] [Thread-186616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:00:45.012 [DEBUG] [Thread-186616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:00:45.012 [DEBUG] [Thread-186616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:00:45.012 [DEBUG] [Thread-186616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:00:45.012 [DEBUG] [Thread-186616] [transport.py] [_log()] client lang: <none>
2026-02-14T14:00:45.012 [DEBUG] [Thread-186616] [transport.py] [_log()] server lang: <none>
2026-02-14T14:00:45.012 [DEBUG] [Thread-186616] [transport.py] [_log()] kex follows: False
2026-02-14T14:00:45.012 [DEBUG] [Thread-186616] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:00:45.012 [DEBUG] [Thread-186616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:00:45.012 [DEBUG] [Thread-186616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:00:45.012 [DEBUG] [Thread-186616] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:00:45.012 [DEBUG] [Thread-186616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:00:45.012 [DEBUG] [Thread-186616] [transport.py] [_log()] Compression: none
2026-02-14T14:00:45.012 [DEBUG] [Thread-186616] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:00:45.029 [DEBUG] [Thread-186616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:00:45.030 [DEBUG] [Thread-186616] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:00:45.030 [DEBUG] [Thread-186616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:00:45.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:00:45.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:00:45.032 [DEBUG] [Thread-186616] [transport.py] [_log()] userauth is OK
2026-02-14T14:00:45.032 [DEBUG] [Thread-186616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:00:45.033 [DEBUG] [Thread-186616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:00:45.033 [DEBUG] [Thread-186616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:00:45.033 [DEBUG] [Thread-186616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:00:45.059 [INFO] [Thread-186616] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:00:45.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:00:45.718 [DEBUG] [Thread-186616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:00:45.719 [DEBUG] [Thread-186616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:00:45.719 [DEBUG] [Thread-186616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:00:45.760 [DEBUG] [Thread-186616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:00:45.760 [DEBUG] [Thread-186616] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:00:45.763 [DEBUG] [Thread-186616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:00:45.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:00:45.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:00:45.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:00:45.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:00:45.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:00:45.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:00:45.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:00:45.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:00:45.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:00:45.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.500108 -999.00  +15.50  18.98     43   +3.20 1 1 1 1 1   888    0 13.58 27.21 ----- 14.5 19.0 144.2 32.1 21.9 -27.0 21.1 -24.7 21.7 -23.9 22.8 -26.2
2026-02-14T14:00:45.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:00:45.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:00:45.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.500108
2026-02-14T14:00:45.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:00:45.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:00:45.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:00:45.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:00:45.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:00:45.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:00:34', tmtdew=15.87, humidity=34.3, cloud=0.0, wind=32.14, temperature=17.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:00:09.331', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:00:45.790 [DEBUG] [Thread-186616] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:00:45.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-14T14:00:45.889 [DEBUG] [Thread-186619] [transport.py] [_log()] starting thread (client mode): 0xa2ddfcd0
2026-02-14T14:00:45.889 [DEBUG] [Thread-186619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:00:45.903 [DEBUG] [Thread-186619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:00:45.904 [INFO] [Thread-186619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:00:45.911 [DEBUG] [Thread-186619] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:00:45.912 [DEBUG] [Thread-186619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:00:45.912 [DEBUG] [Thread-186619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:00:45.912 [DEBUG] [Thread-186619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:00:45.912 [DEBUG] [Thread-186619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:00:45.912 [DEBUG] [Thread-186619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:00:45.912 [DEBUG] [Thread-186619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:00:45.912 [DEBUG] [Thread-186619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:00:45.913 [DEBUG] [Thread-186619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:00:45.913 [DEBUG] [Thread-186619] [transport.py] [_log()] client lang: <none>
2026-02-14T14:00:45.913 [DEBUG] [Thread-186619] [transport.py] [_log()] server lang: <none>
2026-02-14T14:00:45.913 [DEBUG] [Thread-186619] [transport.py] [_log()] kex follows: False
2026-02-14T14:00:45.913 [DEBUG] [Thread-186619] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:00:45.913 [DEBUG] [Thread-186619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:00:45.913 [DEBUG] [Thread-186619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:00:45.913 [DEBUG] [Thread-186619] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:00:45.914 [DEBUG] [Thread-186619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:00:45.914 [DEBUG] [Thread-186619] [transport.py] [_log()] Compression: none
2026-02-14T14:00:45.914 [DEBUG] [Thread-186619] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:00:45.969 [DEBUG] [Thread-186619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:00:45.970 [DEBUG] [Thread-186619] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:00:45.971 [DEBUG] [Thread-186619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:00:45.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:00:45.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:00:46.024 [DEBUG] [Thread-186619] [transport.py] [_log()] userauth is OK
2026-02-14T14:00:46.024 [DEBUG] [Thread-186619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:00:46.024 [DEBUG] [Thread-186619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:00:46.025 [DEBUG] [Thread-186619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:00:46.025 [DEBUG] [Thread-186619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:00:46.045 [INFO] [Thread-186619] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:00: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-14T14:00:46.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:00:46.873 [DEBUG] [Thread-186619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:00:46.874 [DEBUG] [Thread-186619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:00:46.921 [DEBUG] [Thread-186619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:00:46.922 [DEBUG] [Thread-186619] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:00:46.931 [DEBUG] [Thread-186619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:00:46.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:00:46.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:00:46.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:00:46.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:00:46.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:00:46.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:00:46.967 [DEBUG] [Thread-186619] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:00:56.936 [DEBUG] [Thread-186621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:01:11.987 [DEBUG] [Thread-186622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:01:16.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:01:16.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:01:16.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-14T14:01:19.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 1, 10), 14.71, 37.0, 0.0, 35.02, 15.98, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:01:19.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:01:10
2026-02-14T14:01:19.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:01:19.874 [DEBUG] [Thread-186623] [transport.py] [_log()] starting thread (client mode): 0xa2d1bdf0
2026-02-14T14:01:19.874 [DEBUG] [Thread-186623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:01:19.895 [DEBUG] [Thread-186623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:01:19.896 [INFO] [Thread-186623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:01:19.899 [DEBUG] [Thread-186623] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:01:19.899 [DEBUG] [Thread-186623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:01:19.899 [DEBUG] [Thread-186623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:01:19.899 [DEBUG] [Thread-186623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:01:19.899 [DEBUG] [Thread-186623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:01:19.899 [DEBUG] [Thread-186623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:01:19.899 [DEBUG] [Thread-186623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:01:19.900 [DEBUG] [Thread-186623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:01:19.900 [DEBUG] [Thread-186623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:01:19.900 [DEBUG] [Thread-186623] [transport.py] [_log()] client lang: <none>
2026-02-14T14:01:19.900 [DEBUG] [Thread-186623] [transport.py] [_log()] server lang: <none>
2026-02-14T14:01:19.900 [DEBUG] [Thread-186623] [transport.py] [_log()] kex follows: False
2026-02-14T14:01:19.900 [DEBUG] [Thread-186623] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:01:19.900 [DEBUG] [Thread-186623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:01:19.900 [DEBUG] [Thread-186623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:01:19.900 [DEBUG] [Thread-186623] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:01:19.900 [DEBUG] [Thread-186623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:01:19.900 [DEBUG] [Thread-186623] [transport.py] [_log()] Compression: none
2026-02-14T14:01:19.900 [DEBUG] [Thread-186623] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:01:19.919 [DEBUG] [Thread-186623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:01:19.920 [DEBUG] [Thread-186623] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:01:19.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:01:19.921 [DEBUG] [Thread-186623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:01:19.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:01:19.923 [DEBUG] [Thread-186623] [transport.py] [_log()] userauth is OK
2026-02-14T14:01:19.923 [DEBUG] [Thread-186623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:01:19.923 [DEBUG] [Thread-186623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:01:19.923 [DEBUG] [Thread-186623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:01:19.923 [DEBUG] [Thread-186623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:01:19.948 [INFO] [Thread-186623] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:01:19.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:01:20.592 [DEBUG] [Thread-186623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:01:20.592 [DEBUG] [Thread-186623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:01:20.593 [DEBUG] [Thread-186623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:01:20.633 [DEBUG] [Thread-186623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:01:20.634 [DEBUG] [Thread-186623] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:01:20.637 [DEBUG] [Thread-186623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:01:20.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:01:20.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:01:20.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:01:20.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:01:20.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:01:20.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:01:20.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:01:20.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:01:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:01:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.500456 -999.00  +15.70  24.38     43   +3.40 1 1 1 1 1   888    0 13.44 27.22 ----- 17.3 24.4 186.6 31.1 21.9 -27.2 20.7 -27.2 21.7 -25.1 22.8 -28.9
2026-02-14T14:01:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:01:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:01:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.500456
2026-02-14T14:01:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:01:20.660 [DEBUG] [Thread-186623] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:01:20.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:01:20.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:01:20.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:01:20.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:01:20.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:01:10', tmtdew=14.71, humidity=37.0, cloud=0.0, wind=35.02, temperature=15.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:00:39.398', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:01:20.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-14T14:01:20.760 [DEBUG] [Thread-186626] [transport.py] [_log()] starting thread (client mode): 0xa2d20580
2026-02-14T14:01:20.760 [DEBUG] [Thread-186626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:01:20.775 [DEBUG] [Thread-186626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:01:20.775 [INFO] [Thread-186626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:01:20.782 [DEBUG] [Thread-186626] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:01:20.782 [DEBUG] [Thread-186626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:01:20.782 [DEBUG] [Thread-186626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:01:20.782 [DEBUG] [Thread-186626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:01:20.782 [DEBUG] [Thread-186626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:01:20.782 [DEBUG] [Thread-186626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:01:20.783 [DEBUG] [Thread-186626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:01:20.783 [DEBUG] [Thread-186626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:01:20.783 [DEBUG] [Thread-186626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:01:20.783 [DEBUG] [Thread-186626] [transport.py] [_log()] client lang: <none>
2026-02-14T14:01:20.783 [DEBUG] [Thread-186626] [transport.py] [_log()] server lang: <none>
2026-02-14T14:01:20.783 [DEBUG] [Thread-186626] [transport.py] [_log()] kex follows: False
2026-02-14T14:01:20.783 [DEBUG] [Thread-186626] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:01:20.783 [DEBUG] [Thread-186626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:01:20.783 [DEBUG] [Thread-186626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:01:20.783 [DEBUG] [Thread-186626] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:01:20.783 [DEBUG] [Thread-186626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:01:20.783 [DEBUG] [Thread-186626] [transport.py] [_log()] Compression: none
2026-02-14T14:01:20.783 [DEBUG] [Thread-186626] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:01:20.840 [DEBUG] [Thread-186626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:01:20.841 [DEBUG] [Thread-186626] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:01:20.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:01:20.842 [DEBUG] [Thread-186626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:01:20.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:01:20.897 [DEBUG] [Thread-186626] [transport.py] [_log()] userauth is OK
2026-02-14T14:01:20.897 [DEBUG] [Thread-186626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:01:20.897 [DEBUG] [Thread-186626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:01:20.897 [DEBUG] [Thread-186626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:01:20.897 [DEBUG] [Thread-186626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:01:20.916 [INFO] [Thread-186626] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:01:20.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-14T14:01:20.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:01:21.729 [DEBUG] [Thread-186626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:01:21.729 [DEBUG] [Thread-186626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:01:21.777 [DEBUG] [Thread-186626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:01:21.778 [DEBUG] [Thread-186626] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:01:21.787 [DEBUG] [Thread-186626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:01:21.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:01:21.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:01:21.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-14T14:01:21.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:01:21.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:01:21.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:01:21.821 [DEBUG] [Thread-186626] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:01:25.258 [DEBUG] [Thread-186628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:01:27.026 [DEBUG] [Thread-186629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:01:34.671 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:01:34.672 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:01:42.076 [DEBUG] [Thread-186630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:01:51.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:01:51.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:01:51.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-14T14:01:53.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 1, 46), 13.92, 39.28, 0.0, 32.01, 15.73, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:01:53.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:01:46
2026-02-14T14:01:54.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:01:54.268 [DEBUG] [Thread-186631] [transport.py] [_log()] starting thread (client mode): 0xa2d57430
2026-02-14T14:01:54.268 [DEBUG] [Thread-186631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:01:54.289 [DEBUG] [Thread-186631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:01:54.289 [INFO] [Thread-186631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:01:54.293 [DEBUG] [Thread-186631] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:01:54.294 [DEBUG] [Thread-186631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:01:54.294 [DEBUG] [Thread-186631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:01:54.294 [DEBUG] [Thread-186631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:01:54.294 [DEBUG] [Thread-186631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:01:54.294 [DEBUG] [Thread-186631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:01:54.294 [DEBUG] [Thread-186631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:01:54.294 [DEBUG] [Thread-186631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:01:54.294 [DEBUG] [Thread-186631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:01:54.294 [DEBUG] [Thread-186631] [transport.py] [_log()] client lang: <none>
2026-02-14T14:01:54.294 [DEBUG] [Thread-186631] [transport.py] [_log()] server lang: <none>
2026-02-14T14:01:54.294 [DEBUG] [Thread-186631] [transport.py] [_log()] kex follows: False
2026-02-14T14:01:54.294 [DEBUG] [Thread-186631] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:01:54.295 [DEBUG] [Thread-186631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:01:54.295 [DEBUG] [Thread-186631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:01:54.295 [DEBUG] [Thread-186631] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:01:54.295 [DEBUG] [Thread-186631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:01:54.295 [DEBUG] [Thread-186631] [transport.py] [_log()] Compression: none
2026-02-14T14:01:54.295 [DEBUG] [Thread-186631] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:01:54.314 [DEBUG] [Thread-186631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:01:54.314 [DEBUG] [Thread-186631] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:01:54.315 [DEBUG] [Thread-186631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:01:54.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:01:54.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:01:54.317 [DEBUG] [Thread-186631] [transport.py] [_log()] userauth is OK
2026-02-14T14:01:54.317 [DEBUG] [Thread-186631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:01:54.317 [DEBUG] [Thread-186631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:01:54.317 [DEBUG] [Thread-186631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:01:54.317 [DEBUG] [Thread-186631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:01:54.340 [INFO] [Thread-186631] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:01:54.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:01:55.005 [DEBUG] [Thread-186631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:01:55.005 [DEBUG] [Thread-186631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:01:55.006 [DEBUG] [Thread-186631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:01:55.046 [DEBUG] [Thread-186631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:01:55.047 [DEBUG] [Thread-186631] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:01:55.050 [DEBUG] [Thread-186631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:01:55.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:01:55.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:01:55.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:01:55.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:01:55.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:01:55.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:01:55.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:01:55.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:01:55.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:01:55.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.500803 -999.00  +15.70  18.26     43   +3.50 1 1 1 1 1   888    0 13.16 25.44 ----- 14.3 18.3 149.4 26.1 22.1 -24.7 21.1 -24.8 21.9 -23.1 23.0 -24.9
2026-02-14T14:01:55.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:01:55.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:01:55.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.500803
2026-02-14T14:01:55.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:01:55.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:01:55.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:01:55.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:01:55.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:01:55.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:01:46', tmtdew=13.92, humidity=39.28, cloud=0.0, wind=32.01, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:01:09.379', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:01:55.079 [DEBUG] [Thread-186631] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:01:55.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-14T14:01:55.175 [DEBUG] [Thread-186634] [transport.py] [_log()] starting thread (client mode): 0xa2d55990
2026-02-14T14:01:55.175 [DEBUG] [Thread-186634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:01:55.189 [DEBUG] [Thread-186634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:01:55.189 [INFO] [Thread-186634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:01:55.196 [DEBUG] [Thread-186634] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:01:55.197 [DEBUG] [Thread-186634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:01:55.197 [DEBUG] [Thread-186634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:01:55.197 [DEBUG] [Thread-186634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:01:55.197 [DEBUG] [Thread-186634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:01:55.197 [DEBUG] [Thread-186634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:01:55.197 [DEBUG] [Thread-186634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:01:55.197 [DEBUG] [Thread-186634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:01:55.197 [DEBUG] [Thread-186634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:01:55.197 [DEBUG] [Thread-186634] [transport.py] [_log()] client lang: <none>
2026-02-14T14:01:55.197 [DEBUG] [Thread-186634] [transport.py] [_log()] server lang: <none>
2026-02-14T14:01:55.197 [DEBUG] [Thread-186634] [transport.py] [_log()] kex follows: False
2026-02-14T14:01:55.197 [DEBUG] [Thread-186634] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:01:55.197 [DEBUG] [Thread-186634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:01:55.197 [DEBUG] [Thread-186634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:01:55.197 [DEBUG] [Thread-186634] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:01:55.197 [DEBUG] [Thread-186634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:01:55.197 [DEBUG] [Thread-186634] [transport.py] [_log()] Compression: none
2026-02-14T14:01:55.197 [DEBUG] [Thread-186634] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:01:55.256 [DEBUG] [Thread-186634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:01:55.257 [DEBUG] [Thread-186634] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:01:55.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:01:55.258 [DEBUG] [Thread-186634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:01:55.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:01:55.312 [DEBUG] [Thread-186634] [transport.py] [_log()] userauth is OK
2026-02-14T14:01:55.313 [DEBUG] [Thread-186634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:01:55.313 [DEBUG] [Thread-186634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:01:55.313 [DEBUG] [Thread-186634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:01:55.313 [DEBUG] [Thread-186634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:01:55.331 [INFO] [Thread-186634] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:01:55.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-14T14:01:55.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:01:56.137 [DEBUG] [Thread-186634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:01:56.137 [DEBUG] [Thread-186634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:01:56.184 [DEBUG] [Thread-186634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:01:56.185 [DEBUG] [Thread-186634] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:01:56.194 [DEBUG] [Thread-186634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:01:56.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:01:56.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:01:56.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-14T14:01:56.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:01:56.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:01:56.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:01:56.231 [DEBUG] [Thread-186634] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:01:57.109 [DEBUG] [Thread-186636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:02:12.163 [DEBUG] [Thread-186637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:02:25.290 [DEBUG] [Thread-186638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:02:26.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:02:26.254 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:02:26.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-14T14:02:27.203 [DEBUG] [Thread-186639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:02:28.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 1, 46), 13.92, 39.28, 0.0, 32.01, 15.73, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:02:28.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:01:46
2026-02-14T14:02:28.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:02:29.151 [DEBUG] [Thread-186640] [transport.py] [_log()] starting thread (client mode): 0xa2d223e0
2026-02-14T14:02:29.151 [DEBUG] [Thread-186640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:02:29.171 [DEBUG] [Thread-186640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:02:29.171 [INFO] [Thread-186640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:02:29.175 [DEBUG] [Thread-186640] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:02:29.175 [DEBUG] [Thread-186640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:02:29.175 [DEBUG] [Thread-186640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:02:29.175 [DEBUG] [Thread-186640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:02:29.175 [DEBUG] [Thread-186640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:02:29.175 [DEBUG] [Thread-186640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:02:29.175 [DEBUG] [Thread-186640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:02:29.175 [DEBUG] [Thread-186640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:02:29.175 [DEBUG] [Thread-186640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:02:29.175 [DEBUG] [Thread-186640] [transport.py] [_log()] client lang: <none>
2026-02-14T14:02:29.175 [DEBUG] [Thread-186640] [transport.py] [_log()] server lang: <none>
2026-02-14T14:02:29.175 [DEBUG] [Thread-186640] [transport.py] [_log()] kex follows: False
2026-02-14T14:02:29.175 [DEBUG] [Thread-186640] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:02:29.175 [DEBUG] [Thread-186640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:02:29.175 [DEBUG] [Thread-186640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:02:29.175 [DEBUG] [Thread-186640] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:02:29.175 [DEBUG] [Thread-186640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:02:29.175 [DEBUG] [Thread-186640] [transport.py] [_log()] Compression: none
2026-02-14T14:02:29.175 [DEBUG] [Thread-186640] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:02:29.192 [DEBUG] [Thread-186640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:02:29.193 [DEBUG] [Thread-186640] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:02:29.193 [DEBUG] [Thread-186640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:02:29.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:02:29.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:02:29.237 [DEBUG] [Thread-186640] [transport.py] [_log()] userauth is OK
2026-02-14T14:02:29.237 [DEBUG] [Thread-186640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:02:29.238 [DEBUG] [Thread-186640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:02:29.238 [DEBUG] [Thread-186640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:02:29.238 [DEBUG] [Thread-186640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:02:29.259 [INFO] [Thread-186640] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:02:29.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:02:29.908 [DEBUG] [Thread-186640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:02:29.909 [DEBUG] [Thread-186640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:02:29.909 [DEBUG] [Thread-186640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:02:29.949 [DEBUG] [Thread-186640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:02:29.950 [DEBUG] [Thread-186640] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:02:29.954 [DEBUG] [Thread-186640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:02:29.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:02:29.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:02:29.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:02:29.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:02:29.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:02:29.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:02:29.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:02:29.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:02:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:02:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.501150 -999.00  +16.20  28.14     43   +3.80 1 1 1 1 1   888    0 13.31 22.76 ----- 23.7 28.1 149.8 30.0 22.2 -25.8 21.2 -25.7 21.9 -24.3 23.1 -26.4
2026-02-14T14:02:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:02:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:02:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.501150
2026-02-14T14:02:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:02:29.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:02:29.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:02:29.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:02:29.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:02:29.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:01:46', tmtdew=13.92, humidity=39.28, cloud=0.0, wind=32.01, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:01:39.360', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:02:29.980 [DEBUG] [Thread-186640] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:02:30.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T14:02:30.075 [DEBUG] [Thread-186643] [transport.py] [_log()] starting thread (client mode): 0xa2de8f70
2026-02-14T14:02:30.076 [DEBUG] [Thread-186643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:02:30.091 [DEBUG] [Thread-186643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:02:30.091 [INFO] [Thread-186643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:02:30.098 [DEBUG] [Thread-186643] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:02:30.099 [DEBUG] [Thread-186643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:02:30.099 [DEBUG] [Thread-186643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:02:30.099 [DEBUG] [Thread-186643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:02:30.099 [DEBUG] [Thread-186643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:02:30.099 [DEBUG] [Thread-186643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:02:30.099 [DEBUG] [Thread-186643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:02:30.100 [DEBUG] [Thread-186643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:02:30.100 [DEBUG] [Thread-186643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:02:30.100 [DEBUG] [Thread-186643] [transport.py] [_log()] client lang: <none>
2026-02-14T14:02:30.100 [DEBUG] [Thread-186643] [transport.py] [_log()] server lang: <none>
2026-02-14T14:02:30.100 [DEBUG] [Thread-186643] [transport.py] [_log()] kex follows: False
2026-02-14T14:02:30.100 [DEBUG] [Thread-186643] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:02:30.100 [DEBUG] [Thread-186643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:02:30.100 [DEBUG] [Thread-186643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:02:30.101 [DEBUG] [Thread-186643] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:02:30.101 [DEBUG] [Thread-186643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:02:30.101 [DEBUG] [Thread-186643] [transport.py] [_log()] Compression: none
2026-02-14T14:02:30.101 [DEBUG] [Thread-186643] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:02:30.160 [DEBUG] [Thread-186643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:02:30.161 [DEBUG] [Thread-186643] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:02:30.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:02:30.162 [DEBUG] [Thread-186643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:02:30.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:02:30.219 [DEBUG] [Thread-186643] [transport.py] [_log()] userauth is OK
2026-02-14T14:02:30.220 [DEBUG] [Thread-186643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:02:30.220 [DEBUG] [Thread-186643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:02:30.220 [DEBUG] [Thread-186643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:02:30.220 [DEBUG] [Thread-186643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:02:30.239 [INFO] [Thread-186643] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:02:30.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-14T14:02:30.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:02:31.023 [DEBUG] [Thread-186643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:02:31.023 [DEBUG] [Thread-186643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:02:31.070 [DEBUG] [Thread-186643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:02:31.071 [DEBUG] [Thread-186643] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:02:31.080 [DEBUG] [Thread-186643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:02:31.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:02:31.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-14T14:02:31.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-14T14:02:31.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:02:31.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:02:31.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:02:31.116 [DEBUG] [Thread-186643] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:02:34.818 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:02:34.819 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:02:42.239 [DEBUG] [Thread-186645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:02:57.292 [DEBUG] [Thread-186646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:03:01.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:03:01.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:03:01.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-14T14:03:03.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 2, 21), 13.78, 39.61, 0.0, 30.31, 15.65, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:03:03.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:02:21
2026-02-14T14:03:03.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:03:04.039 [DEBUG] [Thread-186647] [transport.py] [_log()] starting thread (client mode): 0xa2ddd840
2026-02-14T14:03:04.039 [DEBUG] [Thread-186647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:03:04.053 [DEBUG] [Thread-186647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:03:04.054 [INFO] [Thread-186647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:03:04.054 [DEBUG] [Thread-186647] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:03:04.054 [DEBUG] [Thread-186647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:03:04.054 [DEBUG] [Thread-186647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:03:04.055 [DEBUG] [Thread-186647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:03:04.055 [DEBUG] [Thread-186647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:03:04.055 [DEBUG] [Thread-186647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:03:04.055 [DEBUG] [Thread-186647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:03:04.055 [DEBUG] [Thread-186647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:03:04.055 [DEBUG] [Thread-186647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:03:04.055 [DEBUG] [Thread-186647] [transport.py] [_log()] client lang: <none>
2026-02-14T14:03:04.055 [DEBUG] [Thread-186647] [transport.py] [_log()] server lang: <none>
2026-02-14T14:03:04.055 [DEBUG] [Thread-186647] [transport.py] [_log()] kex follows: False
2026-02-14T14:03:04.055 [DEBUG] [Thread-186647] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:03:04.055 [DEBUG] [Thread-186647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:03:04.055 [DEBUG] [Thread-186647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:03:04.055 [DEBUG] [Thread-186647] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:03:04.055 [DEBUG] [Thread-186647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:03:04.055 [DEBUG] [Thread-186647] [transport.py] [_log()] Compression: none
2026-02-14T14:03:04.055 [DEBUG] [Thread-186647] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:03:04.065 [DEBUG] [Thread-186647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:03:04.065 [DEBUG] [Thread-186647] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:03:04.065 [DEBUG] [Thread-186647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:03:04.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:03:04.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:03:04.066 [DEBUG] [Thread-186647] [transport.py] [_log()] userauth is OK
2026-02-14T14:03:04.066 [DEBUG] [Thread-186647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:03:04.067 [DEBUG] [Thread-186647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:03:04.067 [DEBUG] [Thread-186647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:03:04.067 [DEBUG] [Thread-186647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:03:04.081 [INFO] [Thread-186647] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:03:04.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:03:04.664 [DEBUG] [Thread-186647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:03:04.664 [DEBUG] [Thread-186647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:03:04.665 [DEBUG] [Thread-186647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:03:04.706 [DEBUG] [Thread-186647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:03:04.706 [DEBUG] [Thread-186647] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:03:04.709 [DEBUG] [Thread-186647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:03:04.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:03:04.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:03:04.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:03:04.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:03:04.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:03:04.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:03:04.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:03:04.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:03:04.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:03:04.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.501845 -999.00  +16.20  17.43     43   +3.80 1 1 1 1 1   888    0 13.14 11.91 ----- 21.2 17.4 148.2 27.3 22.3 -25.7 21.4 -25.3 22.1 -23.5 23.2 -25.3
2026-02-14T14:03:04.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:03:04.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:03:04.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.501845
2026-02-14T14:03:04.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:03:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:03:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:03:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:03:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:03:04.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:02:21', tmtdew=13.78, humidity=39.61, cloud=0.0, wind=30.31, temperature=15.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:02:39.408', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:03:04.737 [DEBUG] [Thread-186647] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:03:04.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-14T14:03:04.832 [DEBUG] [Thread-186650] [transport.py] [_log()] starting thread (client mode): 0xa2d1a020
2026-02-14T14:03:04.833 [DEBUG] [Thread-186650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:03:04.847 [DEBUG] [Thread-186650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:03:04.847 [INFO] [Thread-186650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:03:04.855 [DEBUG] [Thread-186650] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:03:04.855 [DEBUG] [Thread-186650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:03:04.855 [DEBUG] [Thread-186650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:03:04.855 [DEBUG] [Thread-186650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:03:04.855 [DEBUG] [Thread-186650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:03:04.855 [DEBUG] [Thread-186650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:03:04.855 [DEBUG] [Thread-186650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:03:04.855 [DEBUG] [Thread-186650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:03:04.855 [DEBUG] [Thread-186650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:03:04.855 [DEBUG] [Thread-186650] [transport.py] [_log()] client lang: <none>
2026-02-14T14:03:04.855 [DEBUG] [Thread-186650] [transport.py] [_log()] server lang: <none>
2026-02-14T14:03:04.855 [DEBUG] [Thread-186650] [transport.py] [_log()] kex follows: False
2026-02-14T14:03:04.855 [DEBUG] [Thread-186650] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:03:04.855 [DEBUG] [Thread-186650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:03:04.855 [DEBUG] [Thread-186650] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:03:04.855 [DEBUG] [Thread-186650] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:03:04.855 [DEBUG] [Thread-186650] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:03:04.856 [DEBUG] [Thread-186650] [transport.py] [_log()] Compression: none
2026-02-14T14:03:04.856 [DEBUG] [Thread-186650] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:03:04.918 [DEBUG] [Thread-186650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:03:04.918 [DEBUG] [Thread-186650] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:03:04.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:03:04.920 [DEBUG] [Thread-186650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:03:04.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:03:04.974 [DEBUG] [Thread-186650] [transport.py] [_log()] userauth is OK
2026-02-14T14:03:04.974 [DEBUG] [Thread-186650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:03:04.974 [DEBUG] [Thread-186650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:03:04.974 [DEBUG] [Thread-186650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:03:04.974 [DEBUG] [Thread-186650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:03:04.999 [INFO] [Thread-186650] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:03:04.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-14T14:03:04.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:03:05.799 [DEBUG] [Thread-186650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:03:05.799 [DEBUG] [Thread-186650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:03:05.847 [DEBUG] [Thread-186650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:03:05.847 [DEBUG] [Thread-186650] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:03:05.855 [DEBUG] [Thread-186650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:03:05.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:03:05.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:03:05.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-14T14:03:05.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:03:05.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:03:05.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:03:05.887 [DEBUG] [Thread-186650] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:03:12.330 [DEBUG] [Thread-186652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:03:25.347 [DEBUG] [Thread-186653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:03:27.381 [DEBUG] [Thread-186654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:03:34.960 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:03:34.961 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:03:35.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:03:35.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:03:35.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-14T14:03:38.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 2, 57), 14.05, 38.68, 0.0, 28.39, 15.85, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:03:38.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:02:57
2026-02-14T14:03:38.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:03:38.901 [DEBUG] [Thread-186655] [transport.py] [_log()] starting thread (client mode): 0xa2d56080
2026-02-14T14:03:38.901 [DEBUG] [Thread-186655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:03:38.921 [DEBUG] [Thread-186655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:03:38.921 [INFO] [Thread-186655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:03:38.924 [DEBUG] [Thread-186655] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:03:38.924 [DEBUG] [Thread-186655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:03:38.924 [DEBUG] [Thread-186655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:03:38.924 [DEBUG] [Thread-186655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:03:38.924 [DEBUG] [Thread-186655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:03:38.924 [DEBUG] [Thread-186655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:03:38.924 [DEBUG] [Thread-186655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:03:38.925 [DEBUG] [Thread-186655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:03:38.925 [DEBUG] [Thread-186655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:03:38.925 [DEBUG] [Thread-186655] [transport.py] [_log()] client lang: <none>
2026-02-14T14:03:38.925 [DEBUG] [Thread-186655] [transport.py] [_log()] server lang: <none>
2026-02-14T14:03:38.925 [DEBUG] [Thread-186655] [transport.py] [_log()] kex follows: False
2026-02-14T14:03:38.925 [DEBUG] [Thread-186655] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:03:38.925 [DEBUG] [Thread-186655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:03:38.925 [DEBUG] [Thread-186655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:03:38.925 [DEBUG] [Thread-186655] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:03:38.925 [DEBUG] [Thread-186655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:03:38.925 [DEBUG] [Thread-186655] [transport.py] [_log()] Compression: none
2026-02-14T14:03:38.925 [DEBUG] [Thread-186655] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:03:38.934 [DEBUG] [Thread-186655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:03:38.934 [DEBUG] [Thread-186655] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:03:38.935 [DEBUG] [Thread-186655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:03:38.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:03:38.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:03:38.937 [DEBUG] [Thread-186655] [transport.py] [_log()] userauth is OK
2026-02-14T14:03:38.937 [DEBUG] [Thread-186655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:03:38.937 [DEBUG] [Thread-186655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:03:38.937 [DEBUG] [Thread-186655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:03:38.937 [DEBUG] [Thread-186655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:03:38.973 [INFO] [Thread-186655] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:03:38.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:03:39.636 [DEBUG] [Thread-186655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:03:39.637 [DEBUG] [Thread-186655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:03:39.637 [DEBUG] [Thread-186655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:03:39.677 [DEBUG] [Thread-186655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:03:39.677 [DEBUG] [Thread-186655] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:03:39.681 [DEBUG] [Thread-186655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:03:39.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:03:39.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:03:39.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:03:39.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:03:39.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:03:39.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:03:39.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:03:39.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:03:39.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:03:39.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.502192 -999.00  +16.20  18.58     44   +3.90 1 1 1 1 1   888    0 12.88 5.97 ----- 27.5 18.6 145.9 25.1 22.4 -24.6 21.6 -24.7 22.4 -23.0 23.4 -24.0
2026-02-14T14:03:39.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:03:39.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:03:39.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.502192
2026-02-14T14:03:39.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:03:39.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:03:39.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:03:39.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:03:39.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:03:39.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:02:57', tmtdew=14.05, humidity=38.68, cloud=0.0, wind=28.39, temperature=15.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:03:09.389', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:03:39.706 [DEBUG] [Thread-186655] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:03:39.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-14T14:03:39.802 [DEBUG] [Thread-186658] [transport.py] [_log()] starting thread (client mode): 0xa5741d80
2026-02-14T14:03:39.803 [DEBUG] [Thread-186658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:03:39.817 [DEBUG] [Thread-186658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:03:39.817 [INFO] [Thread-186658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:03:39.825 [DEBUG] [Thread-186658] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:03:39.826 [DEBUG] [Thread-186658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:03:39.826 [DEBUG] [Thread-186658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:03:39.826 [DEBUG] [Thread-186658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:03:39.826 [DEBUG] [Thread-186658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:03:39.826 [DEBUG] [Thread-186658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:03:39.826 [DEBUG] [Thread-186658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:03:39.826 [DEBUG] [Thread-186658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:03:39.826 [DEBUG] [Thread-186658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:03:39.826 [DEBUG] [Thread-186658] [transport.py] [_log()] client lang: <none>
2026-02-14T14:03:39.827 [DEBUG] [Thread-186658] [transport.py] [_log()] server lang: <none>
2026-02-14T14:03:39.827 [DEBUG] [Thread-186658] [transport.py] [_log()] kex follows: False
2026-02-14T14:03:39.827 [DEBUG] [Thread-186658] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:03:39.827 [DEBUG] [Thread-186658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:03:39.827 [DEBUG] [Thread-186658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:03:39.827 [DEBUG] [Thread-186658] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:03:39.827 [DEBUG] [Thread-186658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:03:39.828 [DEBUG] [Thread-186658] [transport.py] [_log()] Compression: none
2026-02-14T14:03:39.828 [DEBUG] [Thread-186658] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:03:39.884 [DEBUG] [Thread-186658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:03:39.885 [DEBUG] [Thread-186658] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:03:39.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:03:39.886 [DEBUG] [Thread-186658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:03:39.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:03:39.944 [DEBUG] [Thread-186658] [transport.py] [_log()] userauth is OK
2026-02-14T14:03:39.944 [DEBUG] [Thread-186658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:03:39.944 [DEBUG] [Thread-186658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:03:39.944 [DEBUG] [Thread-186658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:03:39.944 [DEBUG] [Thread-186658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:03:39.963 [INFO] [Thread-186658] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:03:39.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-14T14:03:39.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:03:40.783 [DEBUG] [Thread-186658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:03:40.784 [DEBUG] [Thread-186658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:03:40.831 [DEBUG] [Thread-186658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:03:40.832 [DEBUG] [Thread-186658] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:03:40.841 [DEBUG] [Thread-186658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:03:40.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:03:40.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:03:40.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:03:40.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:03:40.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:03:40.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:03:40.878 [DEBUG] [Thread-186658] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:03:42.420 [DEBUG] [Thread-186660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:03:57.470 [DEBUG] [Thread-186661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:04:10.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:04:10.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:04:10.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:04:12.508 [DEBUG] [Thread-186662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:04:12.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 3, 33), 14.1, 38.58, 0.0, 32.43, 16.0, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:04:12.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:03:33
2026-02-14T14:04:13.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:04:13.279 [DEBUG] [Thread-186663] [transport.py] [_log()] starting thread (client mode): 0xa5741930
2026-02-14T14:04:13.279 [DEBUG] [Thread-186663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:04:13.299 [DEBUG] [Thread-186663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:04:13.299 [INFO] [Thread-186663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:04:13.300 [DEBUG] [Thread-186663] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:04:13.300 [DEBUG] [Thread-186663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:04:13.301 [DEBUG] [Thread-186663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:04:13.301 [DEBUG] [Thread-186663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:04:13.301 [DEBUG] [Thread-186663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:04:13.301 [DEBUG] [Thread-186663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:04:13.301 [DEBUG] [Thread-186663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:04:13.301 [DEBUG] [Thread-186663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:04:13.301 [DEBUG] [Thread-186663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:04:13.301 [DEBUG] [Thread-186663] [transport.py] [_log()] client lang: <none>
2026-02-14T14:04:13.301 [DEBUG] [Thread-186663] [transport.py] [_log()] server lang: <none>
2026-02-14T14:04:13.301 [DEBUG] [Thread-186663] [transport.py] [_log()] kex follows: False
2026-02-14T14:04:13.301 [DEBUG] [Thread-186663] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:04:13.301 [DEBUG] [Thread-186663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:04:13.301 [DEBUG] [Thread-186663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:04:13.301 [DEBUG] [Thread-186663] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:04:13.301 [DEBUG] [Thread-186663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:04:13.301 [DEBUG] [Thread-186663] [transport.py] [_log()] Compression: none
2026-02-14T14:04:13.301 [DEBUG] [Thread-186663] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:04:13.309 [DEBUG] [Thread-186663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:04:13.309 [DEBUG] [Thread-186663] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:04:13.309 [DEBUG] [Thread-186663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:04:13.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:04:13.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:04:13.310 [DEBUG] [Thread-186663] [transport.py] [_log()] userauth is OK
2026-02-14T14:04:13.310 [DEBUG] [Thread-186663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:04:13.310 [DEBUG] [Thread-186663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:04:13.310 [DEBUG] [Thread-186663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:04:13.310 [DEBUG] [Thread-186663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:04:13.322 [INFO] [Thread-186663] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:04:13.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:04:13.951 [DEBUG] [Thread-186663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:04:13.951 [DEBUG] [Thread-186663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:04:13.952 [DEBUG] [Thread-186663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:04:13.993 [DEBUG] [Thread-186663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:04:13.993 [DEBUG] [Thread-186663] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:04:13.997 [DEBUG] [Thread-186663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:04:14.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:04:14.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:04:14.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:04:14.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:04:14.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:04:14.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:04:14.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:04:14.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:04:14.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:04:14.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.502539 -999.00  +16.10  22.85     42   +3.40 1 1 1 1 1   888    0 12.60 1.68 ----- 28.4 22.9 155.2 32.6 22.4 -26.2 21.6 -25.7 22.3 -24.6 23.4 -26.3
2026-02-14T14:04:14.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:04:14.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:04:14.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.502539
2026-02-14T14:04:14.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:04:14.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:04:14.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:04:14.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:04:14.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:04:14.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:03:33', tmtdew=14.1, humidity=38.58, cloud=0.0, wind=32.43, temperature=16.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:03:39.370', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:04:14.025 [DEBUG] [Thread-186663] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:04:14.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-14T14:04:14.124 [DEBUG] [Thread-186666] [transport.py] [_log()] starting thread (client mode): 0xa2d18f40
2026-02-14T14:04:14.124 [DEBUG] [Thread-186666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:04:14.139 [DEBUG] [Thread-186666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:04:14.139 [INFO] [Thread-186666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:04:14.146 [DEBUG] [Thread-186666] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:04:14.147 [DEBUG] [Thread-186666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:04:14.147 [DEBUG] [Thread-186666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:04:14.147 [DEBUG] [Thread-186666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:04:14.147 [DEBUG] [Thread-186666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:04:14.147 [DEBUG] [Thread-186666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:04:14.147 [DEBUG] [Thread-186666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:04:14.147 [DEBUG] [Thread-186666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:04:14.147 [DEBUG] [Thread-186666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:04:14.147 [DEBUG] [Thread-186666] [transport.py] [_log()] client lang: <none>
2026-02-14T14:04:14.147 [DEBUG] [Thread-186666] [transport.py] [_log()] server lang: <none>
2026-02-14T14:04:14.147 [DEBUG] [Thread-186666] [transport.py] [_log()] kex follows: False
2026-02-14T14:04:14.148 [DEBUG] [Thread-186666] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:04:14.148 [DEBUG] [Thread-186666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:04:14.148 [DEBUG] [Thread-186666] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:04:14.148 [DEBUG] [Thread-186666] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:04:14.148 [DEBUG] [Thread-186666] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:04:14.148 [DEBUG] [Thread-186666] [transport.py] [_log()] Compression: none
2026-02-14T14:04:14.148 [DEBUG] [Thread-186666] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:04:14.206 [DEBUG] [Thread-186666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:04:14.207 [DEBUG] [Thread-186666] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:04:14.208 [DEBUG] [Thread-186666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:04:14.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:04:14.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:04:14.261 [DEBUG] [Thread-186666] [transport.py] [_log()] userauth is OK
2026-02-14T14:04:14.262 [DEBUG] [Thread-186666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:04:14.262 [DEBUG] [Thread-186666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:04:14.262 [DEBUG] [Thread-186666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:04:14.262 [DEBUG] [Thread-186666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:04:14.280 [INFO] [Thread-186666] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:04:14.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-14T14:04:14.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:04:15.096 [DEBUG] [Thread-186666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:04:15.096 [DEBUG] [Thread-186666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:04:15.147 [DEBUG] [Thread-186666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:04:15.148 [DEBUG] [Thread-186666] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:04:15.159 [DEBUG] [Thread-186666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:04:15.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:04:15.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:04:15.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-14T14:04:15.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:04:15.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:04:15.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:04:15.208 [DEBUG] [Thread-186666] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:04:25.398 [DEBUG] [Thread-186668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:04:27.551 [DEBUG] [Thread-186669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:04:35.104 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:04:35.105 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:04:42.610 [DEBUG] [Thread-186670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:04:45.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:04:45.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:04:45.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:04:47.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 4, 9), 14.39, 37.83, 0.0, 29.98, 15.97, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:04:47.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:04:09
2026-02-14T14:04:47.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:04:48.002 [DEBUG] [Thread-186671] [transport.py] [_log()] starting thread (client mode): 0xa2d3c6d0
2026-02-14T14:04:48.002 [DEBUG] [Thread-186671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:04:48.023 [DEBUG] [Thread-186671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:04:48.023 [INFO] [Thread-186671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:04:48.027 [DEBUG] [Thread-186671] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:04:48.027 [DEBUG] [Thread-186671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:04:48.027 [DEBUG] [Thread-186671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:04:48.027 [DEBUG] [Thread-186671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:04:48.027 [DEBUG] [Thread-186671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:04:48.027 [DEBUG] [Thread-186671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:04:48.027 [DEBUG] [Thread-186671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:04:48.027 [DEBUG] [Thread-186671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:04:48.027 [DEBUG] [Thread-186671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:04:48.027 [DEBUG] [Thread-186671] [transport.py] [_log()] client lang: <none>
2026-02-14T14:04:48.027 [DEBUG] [Thread-186671] [transport.py] [_log()] server lang: <none>
2026-02-14T14:04:48.027 [DEBUG] [Thread-186671] [transport.py] [_log()] kex follows: False
2026-02-14T14:04:48.027 [DEBUG] [Thread-186671] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:04:48.027 [DEBUG] [Thread-186671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:04:48.028 [DEBUG] [Thread-186671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:04:48.028 [DEBUG] [Thread-186671] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:04:48.028 [DEBUG] [Thread-186671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:04:48.028 [DEBUG] [Thread-186671] [transport.py] [_log()] Compression: none
2026-02-14T14:04:48.028 [DEBUG] [Thread-186671] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:04:48.046 [DEBUG] [Thread-186671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:04:48.047 [DEBUG] [Thread-186671] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:04:48.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:04:48.048 [DEBUG] [Thread-186671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:04:48.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:04:48.050 [DEBUG] [Thread-186671] [transport.py] [_log()] userauth is OK
2026-02-14T14:04:48.050 [DEBUG] [Thread-186671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:04:48.051 [DEBUG] [Thread-186671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:04:48.051 [DEBUG] [Thread-186671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:04:48.051 [DEBUG] [Thread-186671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:04:48.073 [INFO] [Thread-186671] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:04:48.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:04:48.724 [DEBUG] [Thread-186671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:04:48.724 [DEBUG] [Thread-186671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:04:48.724 [DEBUG] [Thread-186671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:04:48.764 [DEBUG] [Thread-186671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:04:48.765 [DEBUG] [Thread-186671] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:04:48.768 [DEBUG] [Thread-186671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:04:48.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:04:48.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:04:48.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:04:48.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:04:48.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:04:48.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:04:48.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:04:48.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:04:48.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:04:48.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.503233 -999.00  +16.20  26.49     41   +3.10 1 1 1 1 1   888    0 12.82 -0.06 ----- 24.3 26.5 153.0 35.4 22.4 -26.8 21.5 -24.8 22.2 -25.2 23.4 -28.7
2026-02-14T14:04:48.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:04:48.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:04:48.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.503233
2026-02-14T14:04:48.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:04:48.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:04:48.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:04:48.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:04:48.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:04:48.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:04:09', tmtdew=14.39, humidity=37.83, cloud=0.0, wind=29.98, temperature=15.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:04:39.331', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:04:48.797 [DEBUG] [Thread-186671] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:04:48.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-14T14:04:48.893 [DEBUG] [Thread-186674] [transport.py] [_log()] starting thread (client mode): 0xa2dde0e0
2026-02-14T14:04:48.893 [DEBUG] [Thread-186674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:04:48.907 [DEBUG] [Thread-186674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:04:48.907 [INFO] [Thread-186674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:04:48.915 [DEBUG] [Thread-186674] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:04:48.915 [DEBUG] [Thread-186674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:04:48.915 [DEBUG] [Thread-186674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:04:48.915 [DEBUG] [Thread-186674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:04:48.915 [DEBUG] [Thread-186674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:04:48.915 [DEBUG] [Thread-186674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:04:48.915 [DEBUG] [Thread-186674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:04:48.915 [DEBUG] [Thread-186674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:04:48.915 [DEBUG] [Thread-186674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:04:48.915 [DEBUG] [Thread-186674] [transport.py] [_log()] client lang: <none>
2026-02-14T14:04:48.915 [DEBUG] [Thread-186674] [transport.py] [_log()] server lang: <none>
2026-02-14T14:04:48.915 [DEBUG] [Thread-186674] [transport.py] [_log()] kex follows: False
2026-02-14T14:04:48.916 [DEBUG] [Thread-186674] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:04:48.916 [DEBUG] [Thread-186674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:04:48.916 [DEBUG] [Thread-186674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:04:48.916 [DEBUG] [Thread-186674] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:04:48.916 [DEBUG] [Thread-186674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:04:48.916 [DEBUG] [Thread-186674] [transport.py] [_log()] Compression: none
2026-02-14T14:04:48.916 [DEBUG] [Thread-186674] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:04:48.975 [DEBUG] [Thread-186674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:04:48.976 [DEBUG] [Thread-186674] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:04:48.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:04:48.977 [DEBUG] [Thread-186674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:04:48.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:04:49.031 [DEBUG] [Thread-186674] [transport.py] [_log()] userauth is OK
2026-02-14T14:04:49.031 [DEBUG] [Thread-186674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:04:49.031 [DEBUG] [Thread-186674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:04:49.031 [DEBUG] [Thread-186674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:04:49.031 [DEBUG] [Thread-186674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:04:49.050 [INFO] [Thread-186674] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:04:49.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-14T14:04:49.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:04:49.880 [DEBUG] [Thread-186674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:04:49.880 [DEBUG] [Thread-186674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:04:49.928 [DEBUG] [Thread-186674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:04:49.928 [DEBUG] [Thread-186674] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:04:49.938 [DEBUG] [Thread-186674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:04:49.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:04:49.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-14T14:04:49.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-14T14:04:49.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:04:49.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:04:49.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:04:49.975 [DEBUG] [Thread-186674] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:04:57.646 [DEBUG] [Thread-186676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:05:12.695 [DEBUG] [Thread-186677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:05:19.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:05:19.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:05: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-14T14:05:22.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 4, 44), 15.04, 36.1, 0.0, 30.12, 16.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:05:22.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:04:44
2026-02-14T14:05:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:05:22.656 [DEBUG] [Thread-186678] [transport.py] [_log()] starting thread (client mode): 0xa2d55330
2026-02-14T14:05:22.656 [DEBUG] [Thread-186678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:05:22.677 [DEBUG] [Thread-186678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:05:22.677 [INFO] [Thread-186678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:05:22.680 [DEBUG] [Thread-186678] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:05:22.680 [DEBUG] [Thread-186678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:05:22.680 [DEBUG] [Thread-186678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:05:22.681 [DEBUG] [Thread-186678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:05:22.681 [DEBUG] [Thread-186678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:05:22.681 [DEBUG] [Thread-186678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:05:22.681 [DEBUG] [Thread-186678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:05:22.681 [DEBUG] [Thread-186678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:05:22.681 [DEBUG] [Thread-186678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:05:22.681 [DEBUG] [Thread-186678] [transport.py] [_log()] client lang: <none>
2026-02-14T14:05:22.681 [DEBUG] [Thread-186678] [transport.py] [_log()] server lang: <none>
2026-02-14T14:05:22.681 [DEBUG] [Thread-186678] [transport.py] [_log()] kex follows: False
2026-02-14T14:05:22.681 [DEBUG] [Thread-186678] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:05:22.681 [DEBUG] [Thread-186678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:05:22.681 [DEBUG] [Thread-186678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:05:22.681 [DEBUG] [Thread-186678] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:05:22.681 [DEBUG] [Thread-186678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:05:22.681 [DEBUG] [Thread-186678] [transport.py] [_log()] Compression: none
2026-02-14T14:05:22.681 [DEBUG] [Thread-186678] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:05:22.697 [DEBUG] [Thread-186678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:05:22.698 [DEBUG] [Thread-186678] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:05:22.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:05:22.699 [DEBUG] [Thread-186678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:05:22.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:05:22.700 [DEBUG] [Thread-186678] [transport.py] [_log()] userauth is OK
2026-02-14T14:05:22.700 [DEBUG] [Thread-186678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:05:22.700 [DEBUG] [Thread-186678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:05:22.700 [DEBUG] [Thread-186678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:05:22.700 [DEBUG] [Thread-186678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:05:22.715 [INFO] [Thread-186678] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:05:22.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:05:23.360 [DEBUG] [Thread-186678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:05:23.361 [DEBUG] [Thread-186678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:05:23.361 [DEBUG] [Thread-186678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:05:23.401 [DEBUG] [Thread-186678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:05:23.401 [DEBUG] [Thread-186678] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:05:23.404 [DEBUG] [Thread-186678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:05:23.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:05:23.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:05:23.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:05:23.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:05:23.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:05:23.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:05:23.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:05:23.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:05:23.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:05:23.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.503581 -999.00  +16.20  25.27     41   +3.10 1 1 1 1 1   888    0 12.79 0.19 ----- 26.0 25.3 184.4 33.5 22.3 -26.9 21.2 -26.7 22.1 -25.5 23.3 -27.0
2026-02-14T14:05:23.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:05:23.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:05:23.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.503581
2026-02-14T14:05:23.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:05:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:05:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:05:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:05:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:05:23.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:04:44', tmtdew=15.04, humidity=36.1, cloud=0.0, wind=30.12, temperature=16.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:05:09.398', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:05:23.429 [DEBUG] [Thread-186678] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:05:23.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-14T14:05:23.537 [DEBUG] [Thread-186681] [transport.py] [_log()] starting thread (client mode): 0xa2d55930
2026-02-14T14:05:23.537 [DEBUG] [Thread-186681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:05:23.551 [DEBUG] [Thread-186681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:05:23.552 [INFO] [Thread-186681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:05:23.559 [DEBUG] [Thread-186681] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:05:23.559 [DEBUG] [Thread-186681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:05:23.560 [DEBUG] [Thread-186681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:05:23.560 [DEBUG] [Thread-186681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:05:23.560 [DEBUG] [Thread-186681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:05:23.560 [DEBUG] [Thread-186681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:05:23.560 [DEBUG] [Thread-186681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:05:23.560 [DEBUG] [Thread-186681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:05:23.560 [DEBUG] [Thread-186681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:05:23.560 [DEBUG] [Thread-186681] [transport.py] [_log()] client lang: <none>
2026-02-14T14:05:23.560 [DEBUG] [Thread-186681] [transport.py] [_log()] server lang: <none>
2026-02-14T14:05:23.561 [DEBUG] [Thread-186681] [transport.py] [_log()] kex follows: False
2026-02-14T14:05:23.561 [DEBUG] [Thread-186681] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:05:23.561 [DEBUG] [Thread-186681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:05:23.561 [DEBUG] [Thread-186681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:05:23.561 [DEBUG] [Thread-186681] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:05:23.561 [DEBUG] [Thread-186681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:05:23.561 [DEBUG] [Thread-186681] [transport.py] [_log()] Compression: none
2026-02-14T14:05:23.561 [DEBUG] [Thread-186681] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:05:23.615 [DEBUG] [Thread-186681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:05:23.616 [DEBUG] [Thread-186681] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:05:23.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:05:23.617 [DEBUG] [Thread-186681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:05:23.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:05:23.672 [DEBUG] [Thread-186681] [transport.py] [_log()] userauth is OK
2026-02-14T14:05:23.672 [DEBUG] [Thread-186681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:05:23.672 [DEBUG] [Thread-186681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:05:23.672 [DEBUG] [Thread-186681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:05:23.672 [DEBUG] [Thread-186681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:05:23.690 [INFO] [Thread-186681] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:05:23.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T14:05:23.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:05:24.498 [DEBUG] [Thread-186681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:05:24.498 [DEBUG] [Thread-186681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:05:24.546 [DEBUG] [Thread-186681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:05:24.546 [DEBUG] [Thread-186681] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:05:24.555 [DEBUG] [Thread-186681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:05:24.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:05:24.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-14T14:05:24.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-14T14:05:24.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:05:24.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:05:24.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:05:24.589 [DEBUG] [Thread-186681] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:05:25.430 [DEBUG] [Thread-186683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:05:27.732 [DEBUG] [Thread-186684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:05:35.244 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:05:35.246 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:05:42.780 [DEBUG] [Thread-186685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:05:54.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:05:54.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:05:54.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-14T14:05:56.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 5, 20), 15.59, 34.9, 0.0, 32.32, 16.83, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:05:56.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:05:20
2026-02-14T14:05:57.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:05:57.291 [DEBUG] [Thread-186686] [transport.py] [_log()] starting thread (client mode): 0xa5742680
2026-02-14T14:05:57.291 [DEBUG] [Thread-186686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:05:57.311 [DEBUG] [Thread-186686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:05:57.311 [INFO] [Thread-186686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:05:57.314 [DEBUG] [Thread-186686] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:05:57.314 [DEBUG] [Thread-186686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:05:57.314 [DEBUG] [Thread-186686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:05:57.314 [DEBUG] [Thread-186686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:05:57.314 [DEBUG] [Thread-186686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:05:57.314 [DEBUG] [Thread-186686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:05:57.314 [DEBUG] [Thread-186686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:05:57.314 [DEBUG] [Thread-186686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:05:57.314 [DEBUG] [Thread-186686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:05:57.314 [DEBUG] [Thread-186686] [transport.py] [_log()] client lang: <none>
2026-02-14T14:05:57.314 [DEBUG] [Thread-186686] [transport.py] [_log()] server lang: <none>
2026-02-14T14:05:57.314 [DEBUG] [Thread-186686] [transport.py] [_log()] kex follows: False
2026-02-14T14:05:57.314 [DEBUG] [Thread-186686] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:05:57.314 [DEBUG] [Thread-186686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:05:57.315 [DEBUG] [Thread-186686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:05:57.315 [DEBUG] [Thread-186686] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:05:57.315 [DEBUG] [Thread-186686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:05:57.315 [DEBUG] [Thread-186686] [transport.py] [_log()] Compression: none
2026-02-14T14:05:57.315 [DEBUG] [Thread-186686] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:05:57.330 [DEBUG] [Thread-186686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:05:57.331 [DEBUG] [Thread-186686] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:05:57.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:05:57.332 [DEBUG] [Thread-186686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:05:57.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:05:57.373 [DEBUG] [Thread-186686] [transport.py] [_log()] userauth is OK
2026-02-14T14:05:57.373 [DEBUG] [Thread-186686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:05:57.373 [DEBUG] [Thread-186686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:05:57.373 [DEBUG] [Thread-186686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:05:57.374 [DEBUG] [Thread-186686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:05:57.406 [INFO] [Thread-186686] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:05:57.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:05:57.817 [DEBUG] [Thread-186688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:05:58.062 [DEBUG] [Thread-186686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:05:58.062 [DEBUG] [Thread-186686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:05:58.062 [DEBUG] [Thread-186686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:05:58.103 [DEBUG] [Thread-186686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:05:58.103 [DEBUG] [Thread-186686] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:05:58.106 [DEBUG] [Thread-186686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:05:58.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:05:58.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:05:58.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:05:58.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:05:58.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:05:58.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:05:58.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:05:58.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:05:58.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:05:58.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.503928 -999.00  +16.10  25.62     41   +2.80 1 1 1 1 1   888    0 12.76 2.50 ----- 24.2 25.6 179.4 42.0 22.1 -28.5 20.7 -28.3 22.0 -26.9 23.1 -29.3
2026-02-14T14:05:58.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:05:58.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:05:58.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.503928
2026-02-14T14:05:58.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:05:58.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:05:58.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:05:58.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:05:58.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:05:58.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:05:20', tmtdew=15.59, humidity=34.9, cloud=0.0, wind=32.32, temperature=16.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:05:39.379', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:05:58.132 [DEBUG] [Thread-186686] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:05:58.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T14:05:58.227 [DEBUG] [Thread-186690] [transport.py] [_log()] starting thread (client mode): 0xa5741570
2026-02-14T14:05:58.227 [DEBUG] [Thread-186690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:05:58.241 [DEBUG] [Thread-186690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:05:58.241 [INFO] [Thread-186690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:05:58.249 [DEBUG] [Thread-186690] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:05:58.249 [DEBUG] [Thread-186690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:05:58.249 [DEBUG] [Thread-186690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:05:58.249 [DEBUG] [Thread-186690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:05:58.249 [DEBUG] [Thread-186690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:05:58.250 [DEBUG] [Thread-186690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:05:58.250 [DEBUG] [Thread-186690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:05:58.250 [DEBUG] [Thread-186690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:05:58.250 [DEBUG] [Thread-186690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:05:58.250 [DEBUG] [Thread-186690] [transport.py] [_log()] client lang: <none>
2026-02-14T14:05:58.250 [DEBUG] [Thread-186690] [transport.py] [_log()] server lang: <none>
2026-02-14T14:05:58.250 [DEBUG] [Thread-186690] [transport.py] [_log()] kex follows: False
2026-02-14T14:05:58.250 [DEBUG] [Thread-186690] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:05:58.250 [DEBUG] [Thread-186690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:05:58.251 [DEBUG] [Thread-186690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:05:58.251 [DEBUG] [Thread-186690] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:05:58.251 [DEBUG] [Thread-186690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:05:58.251 [DEBUG] [Thread-186690] [transport.py] [_log()] Compression: none
2026-02-14T14:05:58.251 [DEBUG] [Thread-186690] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:05:58.306 [DEBUG] [Thread-186690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:05:58.307 [DEBUG] [Thread-186690] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:05:58.307 [DEBUG] [Thread-186690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:05:58.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:05:58.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:05:58.362 [DEBUG] [Thread-186690] [transport.py] [_log()] userauth is OK
2026-02-14T14:05:58.362 [DEBUG] [Thread-186690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:05:58.362 [DEBUG] [Thread-186690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:05:58.362 [DEBUG] [Thread-186690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:05:58.362 [DEBUG] [Thread-186690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:05:58.381 [INFO] [Thread-186690] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:05:58.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-14T14:05:58.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:05:59.215 [DEBUG] [Thread-186690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:05:59.215 [DEBUG] [Thread-186690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:05:59.263 [DEBUG] [Thread-186690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:05:59.264 [DEBUG] [Thread-186690] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:05:59.273 [DEBUG] [Thread-186690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:05:59.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:05:59.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-14T14:05:59.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-14T14:05:59.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:05:59.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:05:59.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:05:59.309 [DEBUG] [Thread-186690] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:06:12.854 [DEBUG] [Thread-186692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:06:25.466 [DEBUG] [Thread-186693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:06:27.904 [DEBUG] [Thread-186694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:06:29.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:06:29.321 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:06:29.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-14T14:06:31.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 5, 56), 15.52, 34.99, 0.0, 27.4, 16.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:06:31.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:05:56
2026-02-14T14:06:31.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:06:31.932 [DEBUG] [Thread-186695] [transport.py] [_log()] starting thread (client mode): 0xa2dc4f10
2026-02-14T14:06:31.932 [DEBUG] [Thread-186695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:06:31.945 [DEBUG] [Thread-186695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:06:31.945 [INFO] [Thread-186695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:06:31.949 [DEBUG] [Thread-186695] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:06:31.949 [DEBUG] [Thread-186695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:06:31.949 [DEBUG] [Thread-186695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:06:31.949 [DEBUG] [Thread-186695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:06:31.949 [DEBUG] [Thread-186695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:06:31.949 [DEBUG] [Thread-186695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:06:31.949 [DEBUG] [Thread-186695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:06:31.949 [DEBUG] [Thread-186695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:06:31.949 [DEBUG] [Thread-186695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:06:31.950 [DEBUG] [Thread-186695] [transport.py] [_log()] client lang: <none>
2026-02-14T14:06:31.950 [DEBUG] [Thread-186695] [transport.py] [_log()] server lang: <none>
2026-02-14T14:06:31.950 [DEBUG] [Thread-186695] [transport.py] [_log()] kex follows: False
2026-02-14T14:06:31.950 [DEBUG] [Thread-186695] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:06:31.950 [DEBUG] [Thread-186695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:06:31.950 [DEBUG] [Thread-186695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:06:31.950 [DEBUG] [Thread-186695] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:06:31.950 [DEBUG] [Thread-186695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:06:31.950 [DEBUG] [Thread-186695] [transport.py] [_log()] Compression: none
2026-02-14T14:06:31.950 [DEBUG] [Thread-186695] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:06:31.971 [DEBUG] [Thread-186695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:06:31.972 [DEBUG] [Thread-186695] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:06:31.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:06:31.973 [DEBUG] [Thread-186695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:06:31.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:06:31.976 [DEBUG] [Thread-186695] [transport.py] [_log()] userauth is OK
2026-02-14T14:06:31.976 [DEBUG] [Thread-186695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:06:31.976 [DEBUG] [Thread-186695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:06:31.976 [DEBUG] [Thread-186695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:06:31.976 [DEBUG] [Thread-186695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:06:32.012 [INFO] [Thread-186695] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:06:32.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:06:32.653 [DEBUG] [Thread-186695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:06:32.654 [DEBUG] [Thread-186695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:06:32.654 [DEBUG] [Thread-186695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:06:32.694 [DEBUG] [Thread-186695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:06:32.694 [DEBUG] [Thread-186695] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:06:32.698 [DEBUG] [Thread-186695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:06:32.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:06:32.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:06:32.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:06:32.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:06:32.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:06:32.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:06:32.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:06:32.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:06:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:06:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.504275 -999.00  +15.90  29.66     41   +2.90 1 1 1 1 1   888    0 13.16 3.73 ----- 32.5 29.7 194.6 37.4 22.1 -27.4 20.8 -30.6 22.0 -25.7 23.1 -27.0
2026-02-14T14:06:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:06:32.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:06:32.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.504275
2026-02-14T14:06:32.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:06:32.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:06:32.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:06:32.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:06:32.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:06:32.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:05:56', tmtdew=15.52, humidity=34.99, cloud=0.0, wind=27.4, temperature=16.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:06:09.360', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:06:32.726 [DEBUG] [Thread-186695] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:06:32.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-14T14:06:32.823 [DEBUG] [Thread-186698] [transport.py] [_log()] starting thread (client mode): 0xa2dc74f0
2026-02-14T14:06:32.823 [DEBUG] [Thread-186698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:06:32.837 [DEBUG] [Thread-186698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:06:32.837 [INFO] [Thread-186698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:06:32.845 [DEBUG] [Thread-186698] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:06:32.845 [DEBUG] [Thread-186698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:06:32.845 [DEBUG] [Thread-186698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:06:32.846 [DEBUG] [Thread-186698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:06:32.846 [DEBUG] [Thread-186698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:06:32.846 [DEBUG] [Thread-186698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:06:32.846 [DEBUG] [Thread-186698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:06:32.846 [DEBUG] [Thread-186698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:06:32.846 [DEBUG] [Thread-186698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:06:32.846 [DEBUG] [Thread-186698] [transport.py] [_log()] client lang: <none>
2026-02-14T14:06:32.846 [DEBUG] [Thread-186698] [transport.py] [_log()] server lang: <none>
2026-02-14T14:06:32.846 [DEBUG] [Thread-186698] [transport.py] [_log()] kex follows: False
2026-02-14T14:06:32.846 [DEBUG] [Thread-186698] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:06:32.847 [DEBUG] [Thread-186698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:06:32.847 [DEBUG] [Thread-186698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:06:32.847 [DEBUG] [Thread-186698] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:06:32.847 [DEBUG] [Thread-186698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:06:32.847 [DEBUG] [Thread-186698] [transport.py] [_log()] Compression: none
2026-02-14T14:06:32.847 [DEBUG] [Thread-186698] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:06:32.902 [DEBUG] [Thread-186698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:06:32.903 [DEBUG] [Thread-186698] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:06:32.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:06:32.904 [DEBUG] [Thread-186698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:06:32.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:06:32.960 [DEBUG] [Thread-186698] [transport.py] [_log()] userauth is OK
2026-02-14T14:06:32.960 [DEBUG] [Thread-186698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:06:32.960 [DEBUG] [Thread-186698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:06:32.960 [DEBUG] [Thread-186698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:06:32.961 [DEBUG] [Thread-186698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:06:32.978 [INFO] [Thread-186698] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:06:32.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-14T14:06:32.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:06:33.790 [DEBUG] [Thread-186698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:06:33.790 [DEBUG] [Thread-186698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:06:33.838 [DEBUG] [Thread-186698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:06:33.839 [DEBUG] [Thread-186698] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:06:33.848 [DEBUG] [Thread-186698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:06:33.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:06:33.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:06:33.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-14T14:06:33.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:06:33.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:06:33.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:06:33.885 [DEBUG] [Thread-186698] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:06:35.384 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:06:35.385 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:06:42.938 [DEBUG] [Thread-186700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:06:57.996 [DEBUG] [Thread-186701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:07:03.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:07:03.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:07:03.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-14T14:07:05.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 6, 32), 15.52, 35.03, 0.0, 25.69, 16.46, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:07:05.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:06:32
2026-02-14T14:07:06.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:07:06.316 [DEBUG] [Thread-186702] [transport.py] [_log()] starting thread (client mode): 0xa2dc58d0
2026-02-14T14:07:06.316 [DEBUG] [Thread-186702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:07:06.336 [DEBUG] [Thread-186702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:07:06.336 [INFO] [Thread-186702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:07:06.337 [DEBUG] [Thread-186702] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:07:06.337 [DEBUG] [Thread-186702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:07:06.337 [DEBUG] [Thread-186702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:07:06.337 [DEBUG] [Thread-186702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:07:06.337 [DEBUG] [Thread-186702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:07:06.337 [DEBUG] [Thread-186702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:07:06.338 [DEBUG] [Thread-186702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:07:06.338 [DEBUG] [Thread-186702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:07:06.338 [DEBUG] [Thread-186702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:07:06.338 [DEBUG] [Thread-186702] [transport.py] [_log()] client lang: <none>
2026-02-14T14:07:06.338 [DEBUG] [Thread-186702] [transport.py] [_log()] server lang: <none>
2026-02-14T14:07:06.338 [DEBUG] [Thread-186702] [transport.py] [_log()] kex follows: False
2026-02-14T14:07:06.338 [DEBUG] [Thread-186702] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:07:06.338 [DEBUG] [Thread-186702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:07:06.338 [DEBUG] [Thread-186702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:07:06.338 [DEBUG] [Thread-186702] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:07:06.338 [DEBUG] [Thread-186702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:07:06.338 [DEBUG] [Thread-186702] [transport.py] [_log()] Compression: none
2026-02-14T14:07:06.338 [DEBUG] [Thread-186702] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:07:06.358 [DEBUG] [Thread-186702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:07:06.359 [DEBUG] [Thread-186702] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:07:06.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:07:06.361 [DEBUG] [Thread-186702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:07:06.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:07:06.363 [DEBUG] [Thread-186702] [transport.py] [_log()] userauth is OK
2026-02-14T14:07:06.363 [DEBUG] [Thread-186702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:07:06.364 [DEBUG] [Thread-186702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:07:06.364 [DEBUG] [Thread-186702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:07:06.364 [DEBUG] [Thread-186702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:07:06.385 [INFO] [Thread-186702] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:07:06.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:07:06.950 [DEBUG] [Thread-186702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:07:06.950 [DEBUG] [Thread-186702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:07:06.950 [DEBUG] [Thread-186702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:07:06.990 [DEBUG] [Thread-186702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:07:06.991 [DEBUG] [Thread-186702] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:07:06.994 [DEBUG] [Thread-186702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:07:07.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:07:07.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:07:07.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:07:07.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:07:07.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:07:07.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:07:07.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:07:07.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:07:07.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:07:07.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.504623 -999.00  +15.90  32.06     41   +2.90 1 1 2 1 1   888    0 12.98 7.85 ----- 36.6 32.1 202.4 38.5 22.0 -27.9 20.8 -29.9 22.0 -26.4 23.1 -28.3
2026-02-14T14:07:07.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:07:07.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:07:07.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.504623
2026-02-14T14:07:07.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:07:07.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:07:07.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:07:07.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:07:07.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:07:07.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:06:32', tmtdew=15.52, humidity=35.03, cloud=0.0, wind=25.69, temperature=16.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:06:39.427', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:07:07.022 [DEBUG] [Thread-186702] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:07:07.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-14T14:07:07.117 [DEBUG] [Thread-186705] [transport.py] [_log()] starting thread (client mode): 0xa2dc5360
2026-02-14T14:07:07.117 [DEBUG] [Thread-186705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:07:07.132 [DEBUG] [Thread-186705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:07:07.132 [INFO] [Thread-186705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:07:07.140 [DEBUG] [Thread-186705] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:07:07.140 [DEBUG] [Thread-186705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:07:07.140 [DEBUG] [Thread-186705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:07:07.141 [DEBUG] [Thread-186705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:07:07.141 [DEBUG] [Thread-186705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:07:07.141 [DEBUG] [Thread-186705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:07:07.141 [DEBUG] [Thread-186705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:07:07.141 [DEBUG] [Thread-186705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:07:07.141 [DEBUG] [Thread-186705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:07:07.141 [DEBUG] [Thread-186705] [transport.py] [_log()] client lang: <none>
2026-02-14T14:07:07.141 [DEBUG] [Thread-186705] [transport.py] [_log()] server lang: <none>
2026-02-14T14:07:07.141 [DEBUG] [Thread-186705] [transport.py] [_log()] kex follows: False
2026-02-14T14:07:07.141 [DEBUG] [Thread-186705] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:07:07.141 [DEBUG] [Thread-186705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:07:07.141 [DEBUG] [Thread-186705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:07:07.141 [DEBUG] [Thread-186705] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:07:07.141 [DEBUG] [Thread-186705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:07:07.141 [DEBUG] [Thread-186705] [transport.py] [_log()] Compression: none
2026-02-14T14:07:07.141 [DEBUG] [Thread-186705] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:07:07.198 [DEBUG] [Thread-186705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:07:07.199 [DEBUG] [Thread-186705] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:07:07.199 [DEBUG] [Thread-186705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:07:07.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:07:07.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:07:07.257 [DEBUG] [Thread-186705] [transport.py] [_log()] userauth is OK
2026-02-14T14:07:07.257 [DEBUG] [Thread-186705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:07:07.257 [DEBUG] [Thread-186705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:07:07.257 [DEBUG] [Thread-186705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:07:07.257 [DEBUG] [Thread-186705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:07:07.277 [INFO] [Thread-186705] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:07:07.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-14T14:07:07.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:07:08.071 [DEBUG] [Thread-186705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:07:08.071 [DEBUG] [Thread-186705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:07:08.119 [DEBUG] [Thread-186705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:07:08.119 [DEBUG] [Thread-186705] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:07:08.128 [DEBUG] [Thread-186705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:07:08.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:07:08.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:07:08.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-14T14:07:08.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:07:08.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:07:08.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:07:08.162 [DEBUG] [Thread-186705] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:07:13.034 [DEBUG] [Thread-186707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:07:25.511 [DEBUG] [Thread-186708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:07:28.086 [DEBUG] [Thread-186709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:07:35.529 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:07:35.530 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:07:38.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:07:38.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:07:38.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-14T14:07:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 7, 8), 15.95, 34.17, 0.0, 31.9, 16.91, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:07:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:07:08
2026-02-14T14:07:40.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:07:40.511 [DEBUG] [Thread-186710] [transport.py] [_log()] starting thread (client mode): 0xa2d3c8b0
2026-02-14T14:07:40.511 [DEBUG] [Thread-186710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:07:40.531 [DEBUG] [Thread-186710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:07:40.531 [INFO] [Thread-186710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:07:40.534 [DEBUG] [Thread-186710] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:07:40.534 [DEBUG] [Thread-186710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:07:40.534 [DEBUG] [Thread-186710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:07:40.534 [DEBUG] [Thread-186710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:07:40.534 [DEBUG] [Thread-186710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:07:40.534 [DEBUG] [Thread-186710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:07:40.534 [DEBUG] [Thread-186710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:07:40.534 [DEBUG] [Thread-186710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:07:40.535 [DEBUG] [Thread-186710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:07:40.535 [DEBUG] [Thread-186710] [transport.py] [_log()] client lang: <none>
2026-02-14T14:07:40.535 [DEBUG] [Thread-186710] [transport.py] [_log()] server lang: <none>
2026-02-14T14:07:40.535 [DEBUG] [Thread-186710] [transport.py] [_log()] kex follows: False
2026-02-14T14:07:40.535 [DEBUG] [Thread-186710] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:07:40.535 [DEBUG] [Thread-186710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:07:40.535 [DEBUG] [Thread-186710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:07:40.535 [DEBUG] [Thread-186710] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:07:40.535 [DEBUG] [Thread-186710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:07:40.535 [DEBUG] [Thread-186710] [transport.py] [_log()] Compression: none
2026-02-14T14:07:40.535 [DEBUG] [Thread-186710] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:07:40.554 [DEBUG] [Thread-186710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:07:40.555 [DEBUG] [Thread-186710] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:07:40.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:07:40.556 [DEBUG] [Thread-186710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:07:40.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:07:40.597 [DEBUG] [Thread-186710] [transport.py] [_log()] userauth is OK
2026-02-14T14:07:40.597 [DEBUG] [Thread-186710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:07:40.597 [DEBUG] [Thread-186710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:07:40.597 [DEBUG] [Thread-186710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:07:40.597 [DEBUG] [Thread-186710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:07:40.618 [INFO] [Thread-186710] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:07:40.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:07:41.265 [DEBUG] [Thread-186710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:07:41.265 [DEBUG] [Thread-186710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:07:41.266 [DEBUG] [Thread-186710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:07:41.306 [DEBUG] [Thread-186710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:07:41.307 [DEBUG] [Thread-186710] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:07:41.310 [DEBUG] [Thread-186710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:07:41.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:07:41.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:07:41.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:07:41.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:07:41.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:07:41.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:07:41.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:07:41.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:07:41.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:07:41.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.504970 -999.00  +16.10  28.21     41   +3.00 1 1 1 1 1   888    0 13.15 7.50 ----- 22.3 28.2 182.2 34.5 22.1 -25.8 21.0 -26.0 22.1 -24.3 23.2 -25.9
2026-02-14T14:07:41.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:07:41.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:07:41.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.504970
2026-02-14T14:07:41.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:07:41.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:07:41.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:07:41.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:07:41.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:07:41.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:07:08', tmtdew=15.95, humidity=34.17, cloud=0.0, wind=31.9, temperature=16.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:07:09.408', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:07:41.337 [DEBUG] [Thread-186710] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:07:41.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T14:07:41.433 [DEBUG] [Thread-186713] [transport.py] [_log()] starting thread (client mode): 0xa57425f0
2026-02-14T14:07:41.434 [DEBUG] [Thread-186713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:07:41.448 [DEBUG] [Thread-186713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:07:41.448 [INFO] [Thread-186713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:07:41.456 [DEBUG] [Thread-186713] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:07:41.456 [DEBUG] [Thread-186713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:07:41.456 [DEBUG] [Thread-186713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:07:41.457 [DEBUG] [Thread-186713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:07:41.457 [DEBUG] [Thread-186713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:07:41.457 [DEBUG] [Thread-186713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:07:41.457 [DEBUG] [Thread-186713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:07:41.457 [DEBUG] [Thread-186713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:07:41.457 [DEBUG] [Thread-186713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:07:41.457 [DEBUG] [Thread-186713] [transport.py] [_log()] client lang: <none>
2026-02-14T14:07:41.457 [DEBUG] [Thread-186713] [transport.py] [_log()] server lang: <none>
2026-02-14T14:07:41.457 [DEBUG] [Thread-186713] [transport.py] [_log()] kex follows: False
2026-02-14T14:07:41.458 [DEBUG] [Thread-186713] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:07:41.458 [DEBUG] [Thread-186713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:07:41.458 [DEBUG] [Thread-186713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:07:41.458 [DEBUG] [Thread-186713] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:07:41.458 [DEBUG] [Thread-186713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:07:41.458 [DEBUG] [Thread-186713] [transport.py] [_log()] Compression: none
2026-02-14T14:07:41.458 [DEBUG] [Thread-186713] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:07:41.513 [DEBUG] [Thread-186713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:07:41.514 [DEBUG] [Thread-186713] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:07:41.514 [DEBUG] [Thread-186713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:07:41.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:07:41.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:07:41.571 [DEBUG] [Thread-186713] [transport.py] [_log()] userauth is OK
2026-02-14T14:07:41.571 [DEBUG] [Thread-186713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:07:41.571 [DEBUG] [Thread-186713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:07:41.571 [DEBUG] [Thread-186713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:07:41.572 [DEBUG] [Thread-186713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:07:41.593 [INFO] [Thread-186713] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:07:41.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-14T14:07:41.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:07:42.401 [DEBUG] [Thread-186713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:07:42.401 [DEBUG] [Thread-186713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:07:42.449 [DEBUG] [Thread-186713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:07:42.450 [DEBUG] [Thread-186713] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:07:42.459 [DEBUG] [Thread-186713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:07:42.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:07:42.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-14T14:07:42.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:07:42.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:07:42.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:07:42.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:07:42.496 [DEBUG] [Thread-186713] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:07:43.119 [DEBUG] [Thread-186715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:07:58.172 [DEBUG] [Thread-186716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:08:12.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:08:12.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:08:12.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-14T14:08:13.208 [DEBUG] [Thread-186717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:08:14.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 7, 44), 15.77, 34.66, 0.0, 33.51, 16.43, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:08:14.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:07:44
2026-02-14T14:08:14.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:08:14.940 [DEBUG] [Thread-186718] [transport.py] [_log()] starting thread (client mode): 0xa2d3ead0
2026-02-14T14:08:14.940 [DEBUG] [Thread-186718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:08:14.961 [DEBUG] [Thread-186718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:08:14.961 [INFO] [Thread-186718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:08:14.964 [DEBUG] [Thread-186718] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:08:14.964 [DEBUG] [Thread-186718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:08:14.964 [DEBUG] [Thread-186718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:08:14.964 [DEBUG] [Thread-186718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:08:14.964 [DEBUG] [Thread-186718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:08:14.964 [DEBUG] [Thread-186718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:08:14.964 [DEBUG] [Thread-186718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:08:14.964 [DEBUG] [Thread-186718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:08:14.964 [DEBUG] [Thread-186718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:08:14.965 [DEBUG] [Thread-186718] [transport.py] [_log()] client lang: <none>
2026-02-14T14:08:14.965 [DEBUG] [Thread-186718] [transport.py] [_log()] server lang: <none>
2026-02-14T14:08:14.965 [DEBUG] [Thread-186718] [transport.py] [_log()] kex follows: False
2026-02-14T14:08:14.965 [DEBUG] [Thread-186718] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:08:14.965 [DEBUG] [Thread-186718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:08:14.965 [DEBUG] [Thread-186718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:08:14.965 [DEBUG] [Thread-186718] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:08:14.965 [DEBUG] [Thread-186718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:08:14.965 [DEBUG] [Thread-186718] [transport.py] [_log()] Compression: none
2026-02-14T14:08:14.965 [DEBUG] [Thread-186718] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:08:14.983 [DEBUG] [Thread-186718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:08:14.984 [DEBUG] [Thread-186718] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:08:14.985 [DEBUG] [Thread-186718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:08:14.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:08:14.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:08:14.987 [DEBUG] [Thread-186718] [transport.py] [_log()] userauth is OK
2026-02-14T14:08:14.988 [DEBUG] [Thread-186718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:08:14.988 [DEBUG] [Thread-186718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:08:14.988 [DEBUG] [Thread-186718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:08:14.988 [DEBUG] [Thread-186718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:08:15.012 [INFO] [Thread-186718] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:08:15.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:08:15.649 [DEBUG] [Thread-186718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:08:15.649 [DEBUG] [Thread-186718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:08:15.650 [DEBUG] [Thread-186718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:08:15.690 [DEBUG] [Thread-186718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:08:15.691 [DEBUG] [Thread-186718] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:08:15.694 [DEBUG] [Thread-186718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:08:15.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:08:15.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:08:15.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:08:15.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:08:15.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:08:15.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:08:15.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:08:15.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:08:15.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:08:15.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.505317 -999.00  +16.10  19.30     41   +2.90 1 1 1 1 1   888    0 12.85 5.95 ----- 22.3 19.3 188.8 35.5 22.1 -26.6 21.1 -26.1 22.1 -24.7 23.1 -27.0
2026-02-14T14:08:15.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:08:15.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:08:15.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.505317
2026-02-14T14:08:15.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:08:15.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:08:15.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:08:15.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:08:15.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:08:15.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:07:44', tmtdew=15.77, humidity=34.66, cloud=0.0, wind=33.51, temperature=16.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:07:39.389', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:08:15.721 [DEBUG] [Thread-186718] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:08:15.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-14T14:08:15.817 [DEBUG] [Thread-186721] [transport.py] [_log()] starting thread (client mode): 0xa5741330
2026-02-14T14:08:15.817 [DEBUG] [Thread-186721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:08:15.835 [DEBUG] [Thread-186721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:08:15.835 [INFO] [Thread-186721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:08:15.842 [DEBUG] [Thread-186721] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:08:15.843 [DEBUG] [Thread-186721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:08:15.843 [DEBUG] [Thread-186721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:08:15.843 [DEBUG] [Thread-186721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:08:15.843 [DEBUG] [Thread-186721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:08:15.843 [DEBUG] [Thread-186721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:08:15.843 [DEBUG] [Thread-186721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:08:15.843 [DEBUG] [Thread-186721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:08:15.843 [DEBUG] [Thread-186721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:08:15.843 [DEBUG] [Thread-186721] [transport.py] [_log()] client lang: <none>
2026-02-14T14:08:15.843 [DEBUG] [Thread-186721] [transport.py] [_log()] server lang: <none>
2026-02-14T14:08:15.843 [DEBUG] [Thread-186721] [transport.py] [_log()] kex follows: False
2026-02-14T14:08:15.843 [DEBUG] [Thread-186721] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:08:15.843 [DEBUG] [Thread-186721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:08:15.843 [DEBUG] [Thread-186721] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:08:15.843 [DEBUG] [Thread-186721] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:08:15.843 [DEBUG] [Thread-186721] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:08:15.844 [DEBUG] [Thread-186721] [transport.py] [_log()] Compression: none
2026-02-14T14:08:15.844 [DEBUG] [Thread-186721] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:08:15.899 [DEBUG] [Thread-186721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:08:15.900 [DEBUG] [Thread-186721] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:08:15.901 [DEBUG] [Thread-186721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:08:15.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:08:15.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:08:15.956 [DEBUG] [Thread-186721] [transport.py] [_log()] userauth is OK
2026-02-14T14:08:15.956 [DEBUG] [Thread-186721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:08:15.956 [DEBUG] [Thread-186721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:08:15.956 [DEBUG] [Thread-186721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:08:15.956 [DEBUG] [Thread-186721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:08:15.974 [INFO] [Thread-186721] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:08:15.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-14T14:08:15.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:08:16.806 [DEBUG] [Thread-186721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:08:16.807 [DEBUG] [Thread-186721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:08:16.854 [DEBUG] [Thread-186721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:08:16.855 [DEBUG] [Thread-186721] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:08:16.864 [DEBUG] [Thread-186721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:08:16.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:08:16.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-14T14:08:16.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-14T14:08:16.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:08:16.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:08:16.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:08:16.900 [DEBUG] [Thread-186721] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:08:25.565 [DEBUG] [Thread-186723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:08:28.248 [DEBUG] [Thread-186724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:08:35.672 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:08:35.673 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:08:43.301 [DEBUG] [Thread-186725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:08:46.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:08:46.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:08:46.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-14T14:08:48.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 8, 19), 15.52, 35.11, 0.0, 29.93, 16.03, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:08:48.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:08:19
2026-02-14T14:08:49.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:08:49.310 [DEBUG] [Thread-186726] [transport.py] [_log()] starting thread (client mode): 0xa2dc4b20
2026-02-14T14:08:49.310 [DEBUG] [Thread-186726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:08:49.330 [DEBUG] [Thread-186726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:08:49.330 [INFO] [Thread-186726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:08:49.334 [DEBUG] [Thread-186726] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:08:49.334 [DEBUG] [Thread-186726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:08:49.334 [DEBUG] [Thread-186726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:08:49.334 [DEBUG] [Thread-186726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:08:49.334 [DEBUG] [Thread-186726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:08:49.334 [DEBUG] [Thread-186726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:08:49.334 [DEBUG] [Thread-186726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:08:49.334 [DEBUG] [Thread-186726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:08:49.335 [DEBUG] [Thread-186726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:08:49.335 [DEBUG] [Thread-186726] [transport.py] [_log()] client lang: <none>
2026-02-14T14:08:49.335 [DEBUG] [Thread-186726] [transport.py] [_log()] server lang: <none>
2026-02-14T14:08:49.335 [DEBUG] [Thread-186726] [transport.py] [_log()] kex follows: False
2026-02-14T14:08:49.335 [DEBUG] [Thread-186726] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:08:49.335 [DEBUG] [Thread-186726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:08:49.335 [DEBUG] [Thread-186726] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:08:49.335 [DEBUG] [Thread-186726] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:08:49.335 [DEBUG] [Thread-186726] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:08:49.335 [DEBUG] [Thread-186726] [transport.py] [_log()] Compression: none
2026-02-14T14:08:49.335 [DEBUG] [Thread-186726] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:08:49.352 [DEBUG] [Thread-186726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:08:49.353 [DEBUG] [Thread-186726] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:08:49.353 [DEBUG] [Thread-186726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:08:49.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:08:49.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:08:49.356 [DEBUG] [Thread-186726] [transport.py] [_log()] userauth is OK
2026-02-14T14:08:49.356 [DEBUG] [Thread-186726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:08:49.356 [DEBUG] [Thread-186726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:08:49.356 [DEBUG] [Thread-186726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:08:49.356 [DEBUG] [Thread-186726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:08:49.376 [INFO] [Thread-186726] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:08:49.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:08:50.179 [DEBUG] [Thread-186726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:08:50.179 [DEBUG] [Thread-186726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:08:50.180 [DEBUG] [Thread-186726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:08:50.220 [DEBUG] [Thread-186726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:08:50.220 [DEBUG] [Thread-186726] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:08:50.224 [DEBUG] [Thread-186726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:08:50.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:08:50.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:08:50.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:08:50.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:08:50.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:08:50.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:08:50.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:08:50.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:08:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:08:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.505664 -999.00  +16.10  17.08     41   +2.90 1 1 1 1 1   888    0 13.12 5.21 ----- 22.5 17.1 167.6 34.7 22.1 -25.8 21.1 -25.5 22.0 -23.7 23.1 -26.5
2026-02-14T14:08:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:08:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:08:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.505664
2026-02-14T14:08:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:08:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:08:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:08:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:08:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:08:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:08:19', tmtdew=15.52, humidity=35.11, cloud=0.0, wind=29.93, temperature=16.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:08:09.370', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:08:50.251 [DEBUG] [Thread-186726] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:08:50.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-14T14:08:50.358 [DEBUG] [Thread-186729] [transport.py] [_log()] starting thread (client mode): 0xa2dc4c70
2026-02-14T14:08:50.358 [DEBUG] [Thread-186729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:08:50.372 [DEBUG] [Thread-186729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:08:50.372 [INFO] [Thread-186729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:08:50.380 [DEBUG] [Thread-186729] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:08:50.380 [DEBUG] [Thread-186729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:08:50.380 [DEBUG] [Thread-186729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:08:50.380 [DEBUG] [Thread-186729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:08:50.380 [DEBUG] [Thread-186729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:08:50.380 [DEBUG] [Thread-186729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:08:50.380 [DEBUG] [Thread-186729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:08:50.380 [DEBUG] [Thread-186729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:08:50.380 [DEBUG] [Thread-186729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:08:50.380 [DEBUG] [Thread-186729] [transport.py] [_log()] client lang: <none>
2026-02-14T14:08:50.380 [DEBUG] [Thread-186729] [transport.py] [_log()] server lang: <none>
2026-02-14T14:08:50.380 [DEBUG] [Thread-186729] [transport.py] [_log()] kex follows: False
2026-02-14T14:08:50.380 [DEBUG] [Thread-186729] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:08:50.380 [DEBUG] [Thread-186729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:08:50.380 [DEBUG] [Thread-186729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:08:50.380 [DEBUG] [Thread-186729] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:08:50.380 [DEBUG] [Thread-186729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:08:50.380 [DEBUG] [Thread-186729] [transport.py] [_log()] Compression: none
2026-02-14T14:08:50.380 [DEBUG] [Thread-186729] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:08:50.436 [DEBUG] [Thread-186729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:08:50.436 [DEBUG] [Thread-186729] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:08:50.436 [DEBUG] [Thread-186729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:08:50.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:08:50.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:08:50.492 [DEBUG] [Thread-186729] [transport.py] [_log()] userauth is OK
2026-02-14T14:08:50.492 [DEBUG] [Thread-186729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:08:50.493 [DEBUG] [Thread-186729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:08:50.493 [DEBUG] [Thread-186729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:08:50.493 [DEBUG] [Thread-186729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:08:50.512 [INFO] [Thread-186729] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:08:50.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-14T14:08:50.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:08:51.324 [DEBUG] [Thread-186729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:08:51.324 [DEBUG] [Thread-186729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:08:51.372 [DEBUG] [Thread-186729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:08:51.373 [DEBUG] [Thread-186729] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:08:51.382 [DEBUG] [Thread-186729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:08:51.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:08:51.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:08:51.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-14T14:08:51.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:08:51.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:08:51.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:08:51.419 [DEBUG] [Thread-186729] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:08:58.336 [DEBUG] [Thread-186731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:09:13.398 [DEBUG] [Thread-186732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:09:21.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:09:21.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:09:21.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:09:23.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 8, 55), 15.12, 35.85, 0.0, 28.57, 15.98, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:09:23.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:08:55
2026-02-14T14:09:23.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:09:23.757 [DEBUG] [Thread-186733] [transport.py] [_log()] starting thread (client mode): 0xa2dc45e0
2026-02-14T14:09:23.757 [DEBUG] [Thread-186733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:09:23.778 [DEBUG] [Thread-186733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:09:23.778 [INFO] [Thread-186733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:09:23.781 [DEBUG] [Thread-186733] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:09:23.782 [DEBUG] [Thread-186733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:09:23.782 [DEBUG] [Thread-186733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:09:23.782 [DEBUG] [Thread-186733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:09:23.782 [DEBUG] [Thread-186733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:09:23.782 [DEBUG] [Thread-186733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:09:23.782 [DEBUG] [Thread-186733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:09:23.782 [DEBUG] [Thread-186733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:09:23.782 [DEBUG] [Thread-186733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:09:23.782 [DEBUG] [Thread-186733] [transport.py] [_log()] client lang: <none>
2026-02-14T14:09:23.782 [DEBUG] [Thread-186733] [transport.py] [_log()] server lang: <none>
2026-02-14T14:09:23.782 [DEBUG] [Thread-186733] [transport.py] [_log()] kex follows: False
2026-02-14T14:09:23.782 [DEBUG] [Thread-186733] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:09:23.782 [DEBUG] [Thread-186733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:09:23.782 [DEBUG] [Thread-186733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:09:23.782 [DEBUG] [Thread-186733] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:09:23.782 [DEBUG] [Thread-186733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:09:23.782 [DEBUG] [Thread-186733] [transport.py] [_log()] Compression: none
2026-02-14T14:09:23.782 [DEBUG] [Thread-186733] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:09:23.802 [DEBUG] [Thread-186733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:09:23.803 [DEBUG] [Thread-186733] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:09:23.803 [DEBUG] [Thread-186733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:09:23.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:09:23.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:09:23.806 [DEBUG] [Thread-186733] [transport.py] [_log()] userauth is OK
2026-02-14T14:09:23.806 [DEBUG] [Thread-186733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:09:23.806 [DEBUG] [Thread-186733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:09:23.806 [DEBUG] [Thread-186733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:09:23.806 [DEBUG] [Thread-186733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:09:23.821 [INFO] [Thread-186733] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:09:23.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:09:24.446 [DEBUG] [Thread-186733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:09:24.446 [DEBUG] [Thread-186733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:09:24.447 [DEBUG] [Thread-186733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:09:24.486 [DEBUG] [Thread-186733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:09:24.487 [DEBUG] [Thread-186733] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:09:24.490 [DEBUG] [Thread-186733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:09:24.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:09:24.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:09:24.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:09:24.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:09:24.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:09:24.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:09:24.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:09:24.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:09:24.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:09:24.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.506011 -999.00  +16.20  25.58     41   +3.20 1 1 1 1 1   888    0 13.05 0.49 ----- 22.9 25.6 186.2 33.0 22.1 -27.2 20.9 -28.1 22.0 -25.2 23.1 -27.3
2026-02-14T14:09:24.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:09:24.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:09:24.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.506011
2026-02-14T14:09:24.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:09:24.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:09:24.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:09:24.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:09:24.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:09:24.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:08:55', tmtdew=15.12, humidity=35.85, cloud=0.0, wind=28.57, temperature=15.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:08:39.350', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:09:24.527 [DEBUG] [Thread-186733] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:09:24.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-14T14:09:24.621 [DEBUG] [Thread-186736] [transport.py] [_log()] starting thread (client mode): 0xa2d57250
2026-02-14T14:09:24.621 [DEBUG] [Thread-186736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:09:24.636 [DEBUG] [Thread-186736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:09:24.636 [INFO] [Thread-186736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:09:24.643 [DEBUG] [Thread-186736] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:09:24.643 [DEBUG] [Thread-186736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:09:24.643 [DEBUG] [Thread-186736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:09:24.643 [DEBUG] [Thread-186736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:09:24.643 [DEBUG] [Thread-186736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:09:24.643 [DEBUG] [Thread-186736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:09:24.643 [DEBUG] [Thread-186736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:09:24.644 [DEBUG] [Thread-186736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:09:24.644 [DEBUG] [Thread-186736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:09:24.644 [DEBUG] [Thread-186736] [transport.py] [_log()] client lang: <none>
2026-02-14T14:09:24.644 [DEBUG] [Thread-186736] [transport.py] [_log()] server lang: <none>
2026-02-14T14:09:24.644 [DEBUG] [Thread-186736] [transport.py] [_log()] kex follows: False
2026-02-14T14:09:24.644 [DEBUG] [Thread-186736] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:09:24.644 [DEBUG] [Thread-186736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:09:24.644 [DEBUG] [Thread-186736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:09:24.644 [DEBUG] [Thread-186736] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:09:24.644 [DEBUG] [Thread-186736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:09:24.644 [DEBUG] [Thread-186736] [transport.py] [_log()] Compression: none
2026-02-14T14:09:24.644 [DEBUG] [Thread-186736] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:09:24.706 [DEBUG] [Thread-186736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:09:24.707 [DEBUG] [Thread-186736] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:09:24.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:09:24.708 [DEBUG] [Thread-186736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:09:24.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:09:24.766 [DEBUG] [Thread-186736] [transport.py] [_log()] userauth is OK
2026-02-14T14:09:24.767 [DEBUG] [Thread-186736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:09:24.767 [DEBUG] [Thread-186736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:09:24.767 [DEBUG] [Thread-186736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:09:24.767 [DEBUG] [Thread-186736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:09:24.785 [INFO] [Thread-186736] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:09:24.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-14T14:09:24.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:09:25.609 [DEBUG] [Thread-186736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:09:25.609 [DEBUG] [Thread-186736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:09:25.610 [DEBUG] [Thread-186738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:09:25.658 [DEBUG] [Thread-186736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:09:25.659 [DEBUG] [Thread-186736] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:09:25.668 [DEBUG] [Thread-186736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:09:25.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:09: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-14T14:09: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-14T14:09:25.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:09:25.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:09:25.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:09:25.705 [DEBUG] [Thread-186736] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:09:28.437 [DEBUG] [Thread-186739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:09:35.811 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:09:35.812 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:09:43.484 [DEBUG] [Thread-186740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:09:55.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:09:55.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:09:55.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:09:57.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 9, 30), 15.18, 35.75, 0.0, 28.99, 16.15, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:09:57.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:09:30
2026-02-14T14:09:58.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:09:58.468 [DEBUG] [Thread-186741] [transport.py] [_log()] starting thread (client mode): 0xa2dc45b0
2026-02-14T14:09:58.468 [DEBUG] [Thread-186741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:09:58.488 [DEBUG] [Thread-186741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:09:58.488 [INFO] [Thread-186741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:09:58.491 [DEBUG] [Thread-186741] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:09:58.492 [DEBUG] [Thread-186741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:09:58.492 [DEBUG] [Thread-186741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:09:58.492 [DEBUG] [Thread-186741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:09:58.492 [DEBUG] [Thread-186741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:09:58.492 [DEBUG] [Thread-186741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:09:58.492 [DEBUG] [Thread-186741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:09:58.492 [DEBUG] [Thread-186741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:09:58.492 [DEBUG] [Thread-186741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:09:58.492 [DEBUG] [Thread-186741] [transport.py] [_log()] client lang: <none>
2026-02-14T14:09:58.492 [DEBUG] [Thread-186741] [transport.py] [_log()] server lang: <none>
2026-02-14T14:09:58.492 [DEBUG] [Thread-186741] [transport.py] [_log()] kex follows: False
2026-02-14T14:09:58.492 [DEBUG] [Thread-186741] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:09:58.492 [DEBUG] [Thread-186741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:09:58.492 [DEBUG] [Thread-186741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:09:58.492 [DEBUG] [Thread-186741] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:09:58.492 [DEBUG] [Thread-186741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:09:58.492 [DEBUG] [Thread-186741] [transport.py] [_log()] Compression: none
2026-02-14T14:09:58.492 [DEBUG] [Thread-186741] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:09:58.510 [DEBUG] [Thread-186741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:09:58.511 [DEBUG] [Thread-186741] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:09:58.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:09:58.512 [DEBUG] [Thread-186741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:09:58.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:09:58.514 [DEBUG] [Thread-186741] [transport.py] [_log()] userauth is OK
2026-02-14T14:09:58.514 [DEBUG] [Thread-186741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:09:58.514 [DEBUG] [Thread-186741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:09:58.515 [DEBUG] [Thread-186741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:09:58.515 [DEBUG] [Thread-186741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:09:58.522 [DEBUG] [Thread-186743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:09:58.531 [INFO] [Thread-186741] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:09:58.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:09:59.181 [DEBUG] [Thread-186741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:09:59.181 [DEBUG] [Thread-186741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:09:59.182 [DEBUG] [Thread-186741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:09:59.222 [DEBUG] [Thread-186741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:09:59.223 [DEBUG] [Thread-186741] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:09:59.226 [DEBUG] [Thread-186741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:09:59.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:09:59.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:09:59.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:09:59.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:09:59.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:09:59.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:09:59.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:09:59.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:09:59.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:09:59.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.506359 -999.00  +16.10  26.63     42   +3.20 1 1 1 1 1   888    0 12.72 -3.52 ----- 22.1 26.6 182.0 35.1 22.1 -26.7 20.9 -27.8 21.9 -25.2 23.0 -26.9
2026-02-14T14:09:59.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:09:59.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:09:59.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.506359
2026-02-14T14:09:59.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:09:59.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:09:59.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:09:59.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:09:59.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:09:59.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:09:30', tmtdew=15.18, humidity=35.75, cloud=0.0, wind=28.99, temperature=16.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:09:09.418', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:09:59.253 [DEBUG] [Thread-186741] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:09:59.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-14T14:09:59.357 [DEBUG] [Thread-186745] [transport.py] [_log()] starting thread (client mode): 0xa5741d80
2026-02-14T14:09:59.357 [DEBUG] [Thread-186745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:09:59.371 [DEBUG] [Thread-186745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:09:59.372 [INFO] [Thread-186745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:09:59.379 [DEBUG] [Thread-186745] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:09:59.379 [DEBUG] [Thread-186745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:09:59.379 [DEBUG] [Thread-186745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:09:59.379 [DEBUG] [Thread-186745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:09:59.379 [DEBUG] [Thread-186745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:09:59.380 [DEBUG] [Thread-186745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:09:59.380 [DEBUG] [Thread-186745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:09:59.380 [DEBUG] [Thread-186745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:09:59.380 [DEBUG] [Thread-186745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:09:59.380 [DEBUG] [Thread-186745] [transport.py] [_log()] client lang: <none>
2026-02-14T14:09:59.380 [DEBUG] [Thread-186745] [transport.py] [_log()] server lang: <none>
2026-02-14T14:09:59.380 [DEBUG] [Thread-186745] [transport.py] [_log()] kex follows: False
2026-02-14T14:09:59.380 [DEBUG] [Thread-186745] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:09:59.380 [DEBUG] [Thread-186745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:09:59.380 [DEBUG] [Thread-186745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:09:59.380 [DEBUG] [Thread-186745] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:09:59.380 [DEBUG] [Thread-186745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:09:59.380 [DEBUG] [Thread-186745] [transport.py] [_log()] Compression: none
2026-02-14T14:09:59.380 [DEBUG] [Thread-186745] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:09:59.441 [DEBUG] [Thread-186745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:09:59.442 [DEBUG] [Thread-186745] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:09:59.442 [DEBUG] [Thread-186745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:09:59.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:09:59.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:09:59.499 [DEBUG] [Thread-186745] [transport.py] [_log()] userauth is OK
2026-02-14T14:09:59.499 [DEBUG] [Thread-186745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:09:59.500 [DEBUG] [Thread-186745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:09:59.500 [DEBUG] [Thread-186745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:09:59.500 [DEBUG] [Thread-186745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:09:59.524 [INFO] [Thread-186745] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:09:59.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T14:09:59.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:10:00.345 [DEBUG] [Thread-186745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:10:00.345 [DEBUG] [Thread-186745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:10:00.392 [DEBUG] [Thread-186745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:10:00.393 [DEBUG] [Thread-186745] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:10:00.402 [DEBUG] [Thread-186745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:10:00.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:10:00.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:10:00.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-14T14:10:00.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:10:00.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:10:00.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:10:00.438 [DEBUG] [Thread-186745] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:10:13.557 [DEBUG] [Thread-186747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:10:25.643 [DEBUG] [Thread-186748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:10:28.607 [DEBUG] [Thread-186749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:10:30.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:10:30.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:10:30.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-14T14:10:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 10, 5), 15.29, 35.5, 0.0, 32.17, 16.15, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:10:32.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:10:05
2026-02-14T14:10:33.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:10:33.423 [DEBUG] [Thread-186750] [transport.py] [_log()] starting thread (client mode): 0xa2ddfe80
2026-02-14T14:10:33.423 [DEBUG] [Thread-186750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:10:33.443 [DEBUG] [Thread-186750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:10:33.444 [INFO] [Thread-186750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:10:33.447 [DEBUG] [Thread-186750] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:10:33.447 [DEBUG] [Thread-186750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:10:33.447 [DEBUG] [Thread-186750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:10:33.447 [DEBUG] [Thread-186750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:10:33.447 [DEBUG] [Thread-186750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:10:33.447 [DEBUG] [Thread-186750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:10:33.447 [DEBUG] [Thread-186750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:10:33.447 [DEBUG] [Thread-186750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:10:33.447 [DEBUG] [Thread-186750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:10:33.447 [DEBUG] [Thread-186750] [transport.py] [_log()] client lang: <none>
2026-02-14T14:10:33.447 [DEBUG] [Thread-186750] [transport.py] [_log()] server lang: <none>
2026-02-14T14:10:33.448 [DEBUG] [Thread-186750] [transport.py] [_log()] kex follows: False
2026-02-14T14:10:33.448 [DEBUG] [Thread-186750] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:10:33.448 [DEBUG] [Thread-186750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:10:33.448 [DEBUG] [Thread-186750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:10:33.448 [DEBUG] [Thread-186750] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:10:33.448 [DEBUG] [Thread-186750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:10:33.448 [DEBUG] [Thread-186750] [transport.py] [_log()] Compression: none
2026-02-14T14:10:33.448 [DEBUG] [Thread-186750] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:10:33.466 [DEBUG] [Thread-186750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:10:33.467 [DEBUG] [Thread-186750] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:10:33.467 [DEBUG] [Thread-186750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:10:33.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:10:33.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:10:33.469 [DEBUG] [Thread-186750] [transport.py] [_log()] userauth is OK
2026-02-14T14:10:33.470 [DEBUG] [Thread-186750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:10:33.470 [DEBUG] [Thread-186750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:10:33.470 [DEBUG] [Thread-186750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:10:33.470 [DEBUG] [Thread-186750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:10:33.484 [INFO] [Thread-186750] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:10:33.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:10:34.060 [DEBUG] [Thread-186750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:10:34.060 [DEBUG] [Thread-186750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:10:34.061 [DEBUG] [Thread-186750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:10:34.101 [DEBUG] [Thread-186750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:10:34.102 [DEBUG] [Thread-186750] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:10:34.105 [DEBUG] [Thread-186750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:10:34.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:10:34.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:10:34.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:10:34.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:10:34.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:10:34.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:10:34.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:10:34.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:10:34.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:10:34.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.507053 -999.00  +16.20  19.99     42   +3.30 1 1 1 1 1   888    0 12.38 -8.96 ----- 16.8 20.0 189.6 35.0 22.1 -26.4 21.0 -27.6 22.1 -24.2 23.1 -25.5
2026-02-14T14:10:34.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:10:34.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:10:34.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.507053
2026-02-14T14:10:34.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:10:34.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:10:34.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:10:34.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:10:34.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:10:34.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:10:05', tmtdew=15.29, humidity=35.5, cloud=0.0, wind=32.17, temperature=16.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:10:09.379', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:10:34.131 [DEBUG] [Thread-186750] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:10:34.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T14:10:34.227 [DEBUG] [Thread-186753] [transport.py] [_log()] starting thread (client mode): 0xa2d3c1f0
2026-02-14T14:10:34.227 [DEBUG] [Thread-186753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:10:34.240 [DEBUG] [Thread-186753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:10:34.241 [INFO] [Thread-186753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:10:34.248 [DEBUG] [Thread-186753] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:10:34.248 [DEBUG] [Thread-186753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:10:34.248 [DEBUG] [Thread-186753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:10:34.248 [DEBUG] [Thread-186753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:10:34.248 [DEBUG] [Thread-186753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:10:34.248 [DEBUG] [Thread-186753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:10:34.248 [DEBUG] [Thread-186753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:10:34.248 [DEBUG] [Thread-186753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:10:34.248 [DEBUG] [Thread-186753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:10:34.248 [DEBUG] [Thread-186753] [transport.py] [_log()] client lang: <none>
2026-02-14T14:10:34.248 [DEBUG] [Thread-186753] [transport.py] [_log()] server lang: <none>
2026-02-14T14:10:34.249 [DEBUG] [Thread-186753] [transport.py] [_log()] kex follows: False
2026-02-14T14:10:34.249 [DEBUG] [Thread-186753] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:10:34.249 [DEBUG] [Thread-186753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:10:34.249 [DEBUG] [Thread-186753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:10:34.249 [DEBUG] [Thread-186753] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:10:34.249 [DEBUG] [Thread-186753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:10:34.249 [DEBUG] [Thread-186753] [transport.py] [_log()] Compression: none
2026-02-14T14:10:34.249 [DEBUG] [Thread-186753] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:10:34.308 [DEBUG] [Thread-186753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:10:34.309 [DEBUG] [Thread-186753] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:10:34.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:10:34.310 [DEBUG] [Thread-186753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:10:34.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:10:34.364 [DEBUG] [Thread-186753] [transport.py] [_log()] userauth is OK
2026-02-14T14:10:34.365 [DEBUG] [Thread-186753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:10:34.365 [DEBUG] [Thread-186753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:10:34.374 [DEBUG] [Thread-186753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:10:34.374 [DEBUG] [Thread-186753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:10:34.393 [INFO] [Thread-186753] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:10:34.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-14T14:10:34.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:10:35.195 [DEBUG] [Thread-186753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:10:35.195 [DEBUG] [Thread-186753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:10:35.243 [DEBUG] [Thread-186753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:10:35.244 [DEBUG] [Thread-186753] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:10:35.253 [DEBUG] [Thread-186753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:10:35.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:10:35.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-14T14:10:35.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-14T14:10:35.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:10:35.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:10:35.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:10:35.289 [DEBUG] [Thread-186753] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:10:35.954 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:10:35.955 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:10:43.646 [DEBUG] [Thread-186755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:10:58.698 [DEBUG] [Thread-186756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:11:05.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:11:05.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:11:05.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-14T14:11:07.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 10, 41), 16.99, 31.84, 0.0, 37.79, 17.96, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:11:07.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:10:41
2026-02-14T14:11:07.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:11:07.766 [DEBUG] [Thread-186757] [transport.py] [_log()] starting thread (client mode): 0xa2dc4580
2026-02-14T14:11:07.766 [DEBUG] [Thread-186757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:11:07.786 [DEBUG] [Thread-186757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:11:07.786 [INFO] [Thread-186757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:11:07.789 [DEBUG] [Thread-186757] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:11:07.789 [DEBUG] [Thread-186757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:11:07.789 [DEBUG] [Thread-186757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:11:07.789 [DEBUG] [Thread-186757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:11:07.789 [DEBUG] [Thread-186757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:11:07.789 [DEBUG] [Thread-186757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:11:07.789 [DEBUG] [Thread-186757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:11:07.789 [DEBUG] [Thread-186757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:11:07.789 [DEBUG] [Thread-186757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:11:07.789 [DEBUG] [Thread-186757] [transport.py] [_log()] client lang: <none>
2026-02-14T14:11:07.789 [DEBUG] [Thread-186757] [transport.py] [_log()] server lang: <none>
2026-02-14T14:11:07.789 [DEBUG] [Thread-186757] [transport.py] [_log()] kex follows: False
2026-02-14T14:11:07.789 [DEBUG] [Thread-186757] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:11:07.789 [DEBUG] [Thread-186757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:11:07.789 [DEBUG] [Thread-186757] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:11:07.789 [DEBUG] [Thread-186757] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:11:07.790 [DEBUG] [Thread-186757] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:11:07.790 [DEBUG] [Thread-186757] [transport.py] [_log()] Compression: none
2026-02-14T14:11:07.790 [DEBUG] [Thread-186757] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:11:07.807 [DEBUG] [Thread-186757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:11:07.807 [DEBUG] [Thread-186757] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:11:07.808 [DEBUG] [Thread-186757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:11:07.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:11:07.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:11:07.810 [DEBUG] [Thread-186757] [transport.py] [_log()] userauth is OK
2026-02-14T14:11:07.810 [DEBUG] [Thread-186757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:11:07.810 [DEBUG] [Thread-186757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:11:07.810 [DEBUG] [Thread-186757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:11:07.810 [DEBUG] [Thread-186757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:11:07.833 [INFO] [Thread-186757] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:11:07.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:11:08.512 [DEBUG] [Thread-186757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:11:08.512 [DEBUG] [Thread-186757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:11:08.513 [DEBUG] [Thread-186757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:11:08.553 [DEBUG] [Thread-186757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:11:08.553 [DEBUG] [Thread-186757] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:11:08.556 [DEBUG] [Thread-186757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:11:08.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:11:08.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:11:08.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:11:08.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:11:08.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:11:08.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:11:08.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:11:08.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:11:08.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:11:08.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.507400 -999.00  +16.40  20.70     42   +3.50 1 1 1 1 1   888    0 12.61 -11.21 ----- 17.1 20.7 185.8 30.5 22.2 -24.4 21.1 -27.2 22.1 -22.5 23.2 -25.0
2026-02-14T14:11:08.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:11:08.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:11:08.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.507400
2026-02-14T14:11:08.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:11:08.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:11:08.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:11:08.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:11:08.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:11:08.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:10:41', tmtdew=16.99, humidity=31.84, cloud=0.0, wind=37.79, 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-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:10:39.360', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:11:08.581 [DEBUG] [Thread-186757] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:11: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-14T14:11:08.664 [DEBUG] [Thread-186760] [transport.py] [_log()] starting thread (client mode): 0xa2dc41f0
2026-02-14T14:11:08.664 [DEBUG] [Thread-186760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:11:08.679 [DEBUG] [Thread-186760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:11:08.680 [INFO] [Thread-186760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:11:08.687 [DEBUG] [Thread-186760] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:11:08.687 [DEBUG] [Thread-186760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:11:08.688 [DEBUG] [Thread-186760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:11:08.688 [DEBUG] [Thread-186760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:11:08.688 [DEBUG] [Thread-186760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:11:08.688 [DEBUG] [Thread-186760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:11:08.688 [DEBUG] [Thread-186760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:11:08.688 [DEBUG] [Thread-186760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:11:08.688 [DEBUG] [Thread-186760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:11:08.688 [DEBUG] [Thread-186760] [transport.py] [_log()] client lang: <none>
2026-02-14T14:11:08.688 [DEBUG] [Thread-186760] [transport.py] [_log()] server lang: <none>
2026-02-14T14:11:08.688 [DEBUG] [Thread-186760] [transport.py] [_log()] kex follows: False
2026-02-14T14:11:08.688 [DEBUG] [Thread-186760] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:11:08.688 [DEBUG] [Thread-186760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:11:08.688 [DEBUG] [Thread-186760] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:11:08.688 [DEBUG] [Thread-186760] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:11:08.688 [DEBUG] [Thread-186760] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:11:08.689 [DEBUG] [Thread-186760] [transport.py] [_log()] Compression: none
2026-02-14T14:11:08.689 [DEBUG] [Thread-186760] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:11:08.745 [DEBUG] [Thread-186760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:11:08.745 [DEBUG] [Thread-186760] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:11:08.746 [DEBUG] [Thread-186760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:11:08.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:11:08.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:11:08.801 [DEBUG] [Thread-186760] [transport.py] [_log()] userauth is OK
2026-02-14T14:11:08.802 [DEBUG] [Thread-186760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:11:08.802 [DEBUG] [Thread-186760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:11:08.802 [DEBUG] [Thread-186760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:11:08.802 [DEBUG] [Thread-186760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:11:08.821 [INFO] [Thread-186760] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:11:08.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-14T14:11:08.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:11:09.645 [DEBUG] [Thread-186760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:11:09.646 [DEBUG] [Thread-186760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:11:09.693 [DEBUG] [Thread-186760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:11:09.693 [DEBUG] [Thread-186760] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:11:09.703 [DEBUG] [Thread-186760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:11:09.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:11:09.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-14T14:11:09.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:11:09.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:11:09.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:11:09.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:11:09.738 [DEBUG] [Thread-186760] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:11:13.732 [DEBUG] [Thread-186762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:11:25.676 [DEBUG] [Thread-186763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:11:28.786 [DEBUG] [Thread-186764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:11:36.095 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:11:36.096 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:11:39.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:11:39.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:11:39.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-14T14:11:41.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 11, 17), 14.92, 36.49, 0.0, 32.34, 16.16, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:11:41.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:11:17
2026-02-14T14:11:42.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:11:42.237 [DEBUG] [Thread-186765] [transport.py] [_log()] starting thread (client mode): 0xa2d1ab00
2026-02-14T14:11:42.237 [DEBUG] [Thread-186765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:11:42.259 [DEBUG] [Thread-186765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:11:42.259 [INFO] [Thread-186765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:11:42.263 [DEBUG] [Thread-186765] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:11:42.263 [DEBUG] [Thread-186765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:11:42.263 [DEBUG] [Thread-186765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:11:42.263 [DEBUG] [Thread-186765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:11:42.263 [DEBUG] [Thread-186765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:11:42.263 [DEBUG] [Thread-186765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:11:42.263 [DEBUG] [Thread-186765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:11:42.263 [DEBUG] [Thread-186765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:11:42.263 [DEBUG] [Thread-186765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:11:42.263 [DEBUG] [Thread-186765] [transport.py] [_log()] client lang: <none>
2026-02-14T14:11:42.263 [DEBUG] [Thread-186765] [transport.py] [_log()] server lang: <none>
2026-02-14T14:11:42.263 [DEBUG] [Thread-186765] [transport.py] [_log()] kex follows: False
2026-02-14T14:11:42.263 [DEBUG] [Thread-186765] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:11:42.263 [DEBUG] [Thread-186765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:11:42.263 [DEBUG] [Thread-186765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:11:42.263 [DEBUG] [Thread-186765] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:11:42.263 [DEBUG] [Thread-186765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:11:42.263 [DEBUG] [Thread-186765] [transport.py] [_log()] Compression: none
2026-02-14T14:11:42.263 [DEBUG] [Thread-186765] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:11:42.280 [DEBUG] [Thread-186765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:11:42.280 [DEBUG] [Thread-186765] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:11:42.281 [DEBUG] [Thread-186765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:11:42.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:11:42.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:11:42.283 [DEBUG] [Thread-186765] [transport.py] [_log()] userauth is OK
2026-02-14T14:11:42.283 [DEBUG] [Thread-186765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:11:42.283 [DEBUG] [Thread-186765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:11:42.283 [DEBUG] [Thread-186765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:11:42.283 [DEBUG] [Thread-186765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:11:42.307 [INFO] [Thread-186765] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:11:42.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:11:42.913 [DEBUG] [Thread-186765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:11:42.914 [DEBUG] [Thread-186765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:11:42.914 [DEBUG] [Thread-186765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:11:42.955 [DEBUG] [Thread-186765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:11:42.955 [DEBUG] [Thread-186765] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:11:42.957 [DEBUG] [Thread-186765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:11:42.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:11:42.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:11:42.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:11:42.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:11:42.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:11:42.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:11:42.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:11:42.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:11:42.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:11:42.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.507747 -999.00  +16.60  25.32     41   +3.50 1 1 1 1 1   888    0 12.46 -12.86 ----- 20.1 25.3 179.4 34.7 22.4 -25.4 21.2 -26.5 22.3 -23.6 23.4 -25.3
2026-02-14T14:11:42.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:11:42.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:11:42.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.507747
2026-02-14T14:11:42.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:11:42.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:11:42.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:11:42.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:11:42.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:11:42.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:11:17', tmtdew=14.92, humidity=36.49, cloud=0.0, wind=32.34, temperature=16.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:11:09.341', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:11:42.980 [DEBUG] [Thread-186765] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:11:43.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-14T14:11:43.077 [DEBUG] [Thread-186768] [transport.py] [_log()] starting thread (client mode): 0xa2d191e0
2026-02-14T14:11:43.077 [DEBUG] [Thread-186768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:11:43.092 [DEBUG] [Thread-186768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:11:43.092 [INFO] [Thread-186768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:11:43.099 [DEBUG] [Thread-186768] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:11:43.099 [DEBUG] [Thread-186768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:11:43.099 [DEBUG] [Thread-186768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:11:43.099 [DEBUG] [Thread-186768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:11:43.099 [DEBUG] [Thread-186768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:11:43.099 [DEBUG] [Thread-186768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:11:43.100 [DEBUG] [Thread-186768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:11:43.100 [DEBUG] [Thread-186768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:11:43.100 [DEBUG] [Thread-186768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:11:43.100 [DEBUG] [Thread-186768] [transport.py] [_log()] client lang: <none>
2026-02-14T14:11:43.100 [DEBUG] [Thread-186768] [transport.py] [_log()] server lang: <none>
2026-02-14T14:11:43.100 [DEBUG] [Thread-186768] [transport.py] [_log()] kex follows: False
2026-02-14T14:11:43.100 [DEBUG] [Thread-186768] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:11:43.100 [DEBUG] [Thread-186768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:11:43.100 [DEBUG] [Thread-186768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:11:43.100 [DEBUG] [Thread-186768] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:11:43.100 [DEBUG] [Thread-186768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:11:43.100 [DEBUG] [Thread-186768] [transport.py] [_log()] Compression: none
2026-02-14T14:11:43.100 [DEBUG] [Thread-186768] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:11:43.157 [DEBUG] [Thread-186768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:11:43.158 [DEBUG] [Thread-186768] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:11:43.158 [DEBUG] [Thread-186768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:11:43.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:11:43.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:11:43.214 [DEBUG] [Thread-186768] [transport.py] [_log()] userauth is OK
2026-02-14T14:11:43.214 [DEBUG] [Thread-186768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:11:43.215 [DEBUG] [Thread-186768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:11:43.215 [DEBUG] [Thread-186768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:11:43.215 [DEBUG] [Thread-186768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:11:43.233 [INFO] [Thread-186768] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:11:43.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-14T14:11:43.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:11:43.826 [DEBUG] [Thread-186770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:11:44.066 [DEBUG] [Thread-186768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:11:44.066 [DEBUG] [Thread-186768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:11:44.114 [DEBUG] [Thread-186768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:11:44.114 [DEBUG] [Thread-186768] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:11:44.123 [DEBUG] [Thread-186768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:11:44.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:11:44.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-14T14:11:44.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:11:44.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:11:44.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:11:44.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:11:44.160 [DEBUG] [Thread-186768] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:11:58.874 [DEBUG] [Thread-186771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:12:13.910 [DEBUG] [Thread-186772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:12:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:12:14.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:12:14.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-14T14:12:16.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 11, 53), 14.72, 37.11, 0.0, 28.85, 16.2, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:12:16.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:11:53
2026-02-14T14:12:16.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:12:17.106 [DEBUG] [Thread-186773] [transport.py] [_log()] starting thread (client mode): 0xa5743190
2026-02-14T14:12:17.106 [DEBUG] [Thread-186773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:12:17.121 [DEBUG] [Thread-186773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:12:17.121 [INFO] [Thread-186773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:12:17.124 [DEBUG] [Thread-186773] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:12:17.124 [DEBUG] [Thread-186773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:12:17.124 [DEBUG] [Thread-186773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:12:17.124 [DEBUG] [Thread-186773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:12:17.124 [DEBUG] [Thread-186773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:12:17.124 [DEBUG] [Thread-186773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:12:17.124 [DEBUG] [Thread-186773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:12:17.124 [DEBUG] [Thread-186773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:12:17.124 [DEBUG] [Thread-186773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:12:17.124 [DEBUG] [Thread-186773] [transport.py] [_log()] client lang: <none>
2026-02-14T14:12:17.125 [DEBUG] [Thread-186773] [transport.py] [_log()] server lang: <none>
2026-02-14T14:12:17.125 [DEBUG] [Thread-186773] [transport.py] [_log()] kex follows: False
2026-02-14T14:12:17.125 [DEBUG] [Thread-186773] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:12:17.125 [DEBUG] [Thread-186773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:12:17.125 [DEBUG] [Thread-186773] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:12:17.125 [DEBUG] [Thread-186773] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:12:17.125 [DEBUG] [Thread-186773] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:12:17.125 [DEBUG] [Thread-186773] [transport.py] [_log()] Compression: none
2026-02-14T14:12:17.125 [DEBUG] [Thread-186773] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:12:17.141 [DEBUG] [Thread-186773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:12:17.141 [DEBUG] [Thread-186773] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:12:17.142 [DEBUG] [Thread-186773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:12:17.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:12:17.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:12:17.143 [DEBUG] [Thread-186773] [transport.py] [_log()] userauth is OK
2026-02-14T14:12:17.143 [DEBUG] [Thread-186773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:12:17.143 [DEBUG] [Thread-186773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:12:17.143 [DEBUG] [Thread-186773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:12:17.143 [DEBUG] [Thread-186773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:12:17.156 [INFO] [Thread-186773] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:12:17.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:12:17.800 [DEBUG] [Thread-186773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:12:17.801 [DEBUG] [Thread-186773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:12:17.801 [DEBUG] [Thread-186773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:12:17.841 [DEBUG] [Thread-186773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:12:17.842 [DEBUG] [Thread-186773] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:12:17.845 [DEBUG] [Thread-186773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:12:17.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:12:17.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:12:17.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:12:17.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:12:17.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:12:17.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:12:17.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:12:17.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:12:17.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:12:17.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.508095 -999.00  +16.60  24.34     41   +3.50 1 1 1 1 1   888    0 12.43 -11.67 ----- 24.1 24.3 154.0 35.6 22.4 -25.4 21.4 -25.9 22.2 -24.0 23.3 -27.1
2026-02-14T14:12:17.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:12:17.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:12:17.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.508095
2026-02-14T14:12:17.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:12:17.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:12:17.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:12:17.870 [DEBUG] [Thread-186773] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:12:17.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:12:17.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:12:17.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:11:53', tmtdew=14.72, humidity=37.11, cloud=0.0, wind=28.85, temperature=16.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:11:39.408', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:12:17.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-14T14:12:17.966 [DEBUG] [Thread-186776] [transport.py] [_log()] starting thread (client mode): 0xa2d3e5c0
2026-02-14T14:12:17.966 [DEBUG] [Thread-186776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:12:17.981 [DEBUG] [Thread-186776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:12:17.981 [INFO] [Thread-186776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:12:17.988 [DEBUG] [Thread-186776] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:12:17.989 [DEBUG] [Thread-186776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:12:17.989 [DEBUG] [Thread-186776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:12:17.989 [DEBUG] [Thread-186776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:12:17.989 [DEBUG] [Thread-186776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:12:17.989 [DEBUG] [Thread-186776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:12:17.989 [DEBUG] [Thread-186776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:12:17.989 [DEBUG] [Thread-186776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:12:17.989 [DEBUG] [Thread-186776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:12:17.989 [DEBUG] [Thread-186776] [transport.py] [_log()] client lang: <none>
2026-02-14T14:12:17.989 [DEBUG] [Thread-186776] [transport.py] [_log()] server lang: <none>
2026-02-14T14:12:17.989 [DEBUG] [Thread-186776] [transport.py] [_log()] kex follows: False
2026-02-14T14:12:17.989 [DEBUG] [Thread-186776] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:12:17.989 [DEBUG] [Thread-186776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:12:17.989 [DEBUG] [Thread-186776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:12:17.989 [DEBUG] [Thread-186776] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:12:17.989 [DEBUG] [Thread-186776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:12:17.990 [DEBUG] [Thread-186776] [transport.py] [_log()] Compression: none
2026-02-14T14:12:17.990 [DEBUG] [Thread-186776] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:12:18.047 [DEBUG] [Thread-186776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:12:18.047 [DEBUG] [Thread-186776] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:12:18.048 [DEBUG] [Thread-186776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:12:18.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:12:18.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:12:18.103 [DEBUG] [Thread-186776] [transport.py] [_log()] userauth is OK
2026-02-14T14:12:18.103 [DEBUG] [Thread-186776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:12:18.103 [DEBUG] [Thread-186776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:12:18.103 [DEBUG] [Thread-186776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:12:18.103 [DEBUG] [Thread-186776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:12:18.121 [INFO] [Thread-186776] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:12:18.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-14T14:12:18.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:12:18.925 [DEBUG] [Thread-186776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:12:18.925 [DEBUG] [Thread-186776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:12:18.972 [DEBUG] [Thread-186776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:12:18.973 [DEBUG] [Thread-186776] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:12:18.982 [DEBUG] [Thread-186776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:12:18.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:12:18.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-14T14:12:19.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-14T14:12:19.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:12:19.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:12:19.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:12:19.018 [DEBUG] [Thread-186776] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:12:25.712 [DEBUG] [Thread-186778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:12:28.947 [DEBUG] [Thread-186779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:12:36.236 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:12:36.237 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:12:44.000 [DEBUG] [Thread-186780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:12:49.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:12:49.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:12:49.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:12:50.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 12, 28), 14.93, 36.63, 0.0, 26.91, 16.33, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:12:50.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:12:28
2026-02-14T14:12:51.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:12:51.481 [DEBUG] [Thread-186781] [transport.py] [_log()] starting thread (client mode): 0xa2d1a560
2026-02-14T14:12:51.481 [DEBUG] [Thread-186781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:12:51.500 [DEBUG] [Thread-186781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:12:51.500 [INFO] [Thread-186781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:12:51.503 [DEBUG] [Thread-186781] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:12:51.503 [DEBUG] [Thread-186781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:12:51.503 [DEBUG] [Thread-186781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:12:51.503 [DEBUG] [Thread-186781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:12:51.503 [DEBUG] [Thread-186781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:12:51.503 [DEBUG] [Thread-186781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:12:51.503 [DEBUG] [Thread-186781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:12:51.503 [DEBUG] [Thread-186781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:12:51.503 [DEBUG] [Thread-186781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:12:51.504 [DEBUG] [Thread-186781] [transport.py] [_log()] client lang: <none>
2026-02-14T14:12:51.504 [DEBUG] [Thread-186781] [transport.py] [_log()] server lang: <none>
2026-02-14T14:12:51.504 [DEBUG] [Thread-186781] [transport.py] [_log()] kex follows: False
2026-02-14T14:12:51.504 [DEBUG] [Thread-186781] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:12:51.504 [DEBUG] [Thread-186781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:12:51.504 [DEBUG] [Thread-186781] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:12:51.504 [DEBUG] [Thread-186781] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:12:51.504 [DEBUG] [Thread-186781] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:12:51.504 [DEBUG] [Thread-186781] [transport.py] [_log()] Compression: none
2026-02-14T14:12:51.504 [DEBUG] [Thread-186781] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:12:51.521 [DEBUG] [Thread-186781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:12:51.522 [DEBUG] [Thread-186781] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:12:51.523 [DEBUG] [Thread-186781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:12:51.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:12:51.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:12:51.525 [DEBUG] [Thread-186781] [transport.py] [_log()] userauth is OK
2026-02-14T14:12:51.525 [DEBUG] [Thread-186781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:12:51.525 [DEBUG] [Thread-186781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:12:51.525 [DEBUG] [Thread-186781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:12:51.525 [DEBUG] [Thread-186781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:12:51.549 [INFO] [Thread-186781] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:12:51.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:12:52.335 [DEBUG] [Thread-186781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:12:52.335 [DEBUG] [Thread-186781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:12:52.335 [DEBUG] [Thread-186781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:12:52.376 [DEBUG] [Thread-186781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:12:52.377 [DEBUG] [Thread-186781] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:12:52.380 [DEBUG] [Thread-186781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:12:52.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:12:52.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:12:52.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:12:52.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:12:52.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:12:52.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:12:52.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:12:52.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:12:52.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:12:52.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.508442 -999.00  +16.00  19.37     42   +3.20 1 1 1 1 1   888    0 12.54 -9.70 ----- 14.5 19.4 127.2 38.1 22.3 -25.8 21.6 -24.8 22.2 -24.5 23.3 -25.8
2026-02-14T14:12:52.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:12:52.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:12:52.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.508442
2026-02-14T14:12:52.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:12:52.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:12:52.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:12:52.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:12:52.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:12:52.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:12:28', tmtdew=14.93, humidity=36.63, cloud=0.0, wind=26.91, temperature=16.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:12:09.389', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:12:52.408 [DEBUG] [Thread-186781] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:12:52.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-14T14:12:52.504 [DEBUG] [Thread-186784] [transport.py] [_log()] starting thread (client mode): 0xa2dc6830
2026-02-14T14:12:52.504 [DEBUG] [Thread-186784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:12:52.518 [DEBUG] [Thread-186784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:12:52.519 [INFO] [Thread-186784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:12:52.526 [DEBUG] [Thread-186784] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:12:52.526 [DEBUG] [Thread-186784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:12:52.526 [DEBUG] [Thread-186784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:12:52.526 [DEBUG] [Thread-186784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:12:52.526 [DEBUG] [Thread-186784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:12:52.526 [DEBUG] [Thread-186784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:12:52.526 [DEBUG] [Thread-186784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:12:52.526 [DEBUG] [Thread-186784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:12:52.527 [DEBUG] [Thread-186784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:12:52.527 [DEBUG] [Thread-186784] [transport.py] [_log()] client lang: <none>
2026-02-14T14:12:52.527 [DEBUG] [Thread-186784] [transport.py] [_log()] server lang: <none>
2026-02-14T14:12:52.527 [DEBUG] [Thread-186784] [transport.py] [_log()] kex follows: False
2026-02-14T14:12:52.527 [DEBUG] [Thread-186784] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:12:52.527 [DEBUG] [Thread-186784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:12:52.527 [DEBUG] [Thread-186784] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:12:52.527 [DEBUG] [Thread-186784] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:12:52.527 [DEBUG] [Thread-186784] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:12:52.527 [DEBUG] [Thread-186784] [transport.py] [_log()] Compression: none
2026-02-14T14:12:52.527 [DEBUG] [Thread-186784] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:12:52.584 [DEBUG] [Thread-186784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:12:52.585 [DEBUG] [Thread-186784] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:12:52.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:12:52.586 [DEBUG] [Thread-186784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:12:52.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:12:52.640 [DEBUG] [Thread-186784] [transport.py] [_log()] userauth is OK
2026-02-14T14:12:52.640 [DEBUG] [Thread-186784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:12:52.640 [DEBUG] [Thread-186784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:12:52.640 [DEBUG] [Thread-186784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:12:52.640 [DEBUG] [Thread-186784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:12:52.653 [INFO] [Thread-186784] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:12:52.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-14T14:12:52.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:12:53.475 [DEBUG] [Thread-186784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:12:53.475 [DEBUG] [Thread-186784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:12:53.523 [DEBUG] [Thread-186784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:12:53.524 [DEBUG] [Thread-186784] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:12:53.532 [DEBUG] [Thread-186784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:12:53.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:12:53.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-14T14:12:53.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-14T14:12:53.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:12:53.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:12:53.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:12:53.568 [DEBUG] [Thread-186784] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:12:59.034 [DEBUG] [Thread-186786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:13:14.089 [DEBUG] [Thread-186787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:13:23.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:13:23.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:13:23.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-14T14:13:25.748 [DEBUG] [Thread-186788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:13:25.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 13, 3), 14.86, 36.8, 0.0, 24.6, 16.3, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:13:25.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:13:03
2026-02-14T14:13:26.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:13:26.596 [DEBUG] [Thread-186789] [transport.py] [_log()] starting thread (client mode): 0xa2dc4370
2026-02-14T14:13:26.596 [DEBUG] [Thread-186789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:13:26.618 [DEBUG] [Thread-186789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:13:26.618 [INFO] [Thread-186789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:13:26.621 [DEBUG] [Thread-186789] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:13:26.622 [DEBUG] [Thread-186789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:13:26.622 [DEBUG] [Thread-186789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:13:26.622 [DEBUG] [Thread-186789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:13:26.622 [DEBUG] [Thread-186789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:13:26.622 [DEBUG] [Thread-186789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:13:26.622 [DEBUG] [Thread-186789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:13:26.622 [DEBUG] [Thread-186789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:13:26.622 [DEBUG] [Thread-186789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:13:26.622 [DEBUG] [Thread-186789] [transport.py] [_log()] client lang: <none>
2026-02-14T14:13:26.622 [DEBUG] [Thread-186789] [transport.py] [_log()] server lang: <none>
2026-02-14T14:13:26.622 [DEBUG] [Thread-186789] [transport.py] [_log()] kex follows: False
2026-02-14T14:13:26.623 [DEBUG] [Thread-186789] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:13:26.623 [DEBUG] [Thread-186789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:13:26.623 [DEBUG] [Thread-186789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:13:26.623 [DEBUG] [Thread-186789] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:13:26.623 [DEBUG] [Thread-186789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:13:26.623 [DEBUG] [Thread-186789] [transport.py] [_log()] Compression: none
2026-02-14T14:13:26.623 [DEBUG] [Thread-186789] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:13:26.644 [DEBUG] [Thread-186789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:13:26.645 [DEBUG] [Thread-186789] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:13:26.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:13:26.646 [DEBUG] [Thread-186789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:13:26.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:13:26.648 [DEBUG] [Thread-186789] [transport.py] [_log()] userauth is OK
2026-02-14T14:13:26.648 [DEBUG] [Thread-186789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:13:26.648 [DEBUG] [Thread-186789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:13:26.648 [DEBUG] [Thread-186789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:13:26.648 [DEBUG] [Thread-186789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:13:26.685 [INFO] [Thread-186789] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:13:26.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:13:27.319 [DEBUG] [Thread-186789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:13:27.319 [DEBUG] [Thread-186789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:13:27.319 [DEBUG] [Thread-186789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:13:27.359 [DEBUG] [Thread-186789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:13:27.359 [DEBUG] [Thread-186789] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:13:27.362 [DEBUG] [Thread-186789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:13:27.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:13:27.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:13:27.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:13:27.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:13:27.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:13:27.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:13:27.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:13:27.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:13:27.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:13:27.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.508789 -999.00  +16.20  30.22     42   +3.40 1 1 2 1 1   888    0 12.39 -7.42 ----- 24.7 30.2 178.2 38.7 22.3 -25.6 21.4 -25.3 22.3 -24.0 23.4 -27.3
2026-02-14T14:13:27.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:13:27.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:13:27.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.508789
2026-02-14T14:13:27.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:13:27.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:13:27.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:13:27.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:13:27.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:13:27.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:13:03', tmtdew=14.86, humidity=36.8, cloud=0.0, wind=24.6, temperature=16.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:12:39.370', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:13:27.388 [DEBUG] [Thread-186789] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:13:27.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-14T14:13:27.483 [DEBUG] [Thread-186792] [transport.py] [_log()] starting thread (client mode): 0xa2dc5600
2026-02-14T14:13:27.483 [DEBUG] [Thread-186792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:13:27.499 [DEBUG] [Thread-186792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:13:27.500 [INFO] [Thread-186792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:13:27.507 [DEBUG] [Thread-186792] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:13:27.507 [DEBUG] [Thread-186792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:13:27.508 [DEBUG] [Thread-186792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:13:27.508 [DEBUG] [Thread-186792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:13:27.508 [DEBUG] [Thread-186792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:13:27.508 [DEBUG] [Thread-186792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:13:27.508 [DEBUG] [Thread-186792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:13:27.508 [DEBUG] [Thread-186792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:13:27.508 [DEBUG] [Thread-186792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:13:27.508 [DEBUG] [Thread-186792] [transport.py] [_log()] client lang: <none>
2026-02-14T14:13:27.509 [DEBUG] [Thread-186792] [transport.py] [_log()] server lang: <none>
2026-02-14T14:13:27.509 [DEBUG] [Thread-186792] [transport.py] [_log()] kex follows: False
2026-02-14T14:13:27.509 [DEBUG] [Thread-186792] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:13:27.509 [DEBUG] [Thread-186792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:13:27.509 [DEBUG] [Thread-186792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:13:27.509 [DEBUG] [Thread-186792] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:13:27.509 [DEBUG] [Thread-186792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:13:27.510 [DEBUG] [Thread-186792] [transport.py] [_log()] Compression: none
2026-02-14T14:13:27.510 [DEBUG] [Thread-186792] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:13:27.570 [DEBUG] [Thread-186792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:13:27.571 [DEBUG] [Thread-186792] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:13:27.572 [DEBUG] [Thread-186792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:13:27.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:13:27.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:13:27.629 [DEBUG] [Thread-186792] [transport.py] [_log()] userauth is OK
2026-02-14T14:13:27.629 [DEBUG] [Thread-186792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:13:27.629 [DEBUG] [Thread-186792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:13:27.630 [DEBUG] [Thread-186792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:13:27.630 [DEBUG] [Thread-186792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:13:27.648 [INFO] [Thread-186792] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:13:27.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-14T14:13:27.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:13:28.505 [DEBUG] [Thread-186792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:13:28.505 [DEBUG] [Thread-186792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:13:28.553 [DEBUG] [Thread-186792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:13:28.554 [DEBUG] [Thread-186792] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:13:28.563 [DEBUG] [Thread-186792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:13:28.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:13:28.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-14T14:13:28.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:13:28.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:13:28.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:13:28.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:13:28.599 [DEBUG] [Thread-186792] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:13:29.127 [DEBUG] [Thread-186794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:13:36.377 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:13:36.378 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:13:44.179 [DEBUG] [Thread-186795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:13:58.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:13:58.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:13:58.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-14T14:13:59.212 [DEBUG] [Thread-186796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:14:00.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 13, 40), 16.8, 32.41, 0.0, 37.54, 18.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:14:00.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:13:40
2026-02-14T14:14:00.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:14:01.081 [DEBUG] [Thread-186797] [transport.py] [_log()] starting thread (client mode): 0xa2d195d0
2026-02-14T14:14:01.081 [DEBUG] [Thread-186797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:14:01.101 [DEBUG] [Thread-186797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:14:01.101 [INFO] [Thread-186797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:14:01.104 [DEBUG] [Thread-186797] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:14:01.104 [DEBUG] [Thread-186797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:14:01.104 [DEBUG] [Thread-186797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:14:01.104 [DEBUG] [Thread-186797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:14:01.104 [DEBUG] [Thread-186797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:14:01.104 [DEBUG] [Thread-186797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:14:01.104 [DEBUG] [Thread-186797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:14:01.104 [DEBUG] [Thread-186797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:14:01.104 [DEBUG] [Thread-186797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:14:01.104 [DEBUG] [Thread-186797] [transport.py] [_log()] client lang: <none>
2026-02-14T14:14:01.104 [DEBUG] [Thread-186797] [transport.py] [_log()] server lang: <none>
2026-02-14T14:14:01.105 [DEBUG] [Thread-186797] [transport.py] [_log()] kex follows: False
2026-02-14T14:14:01.105 [DEBUG] [Thread-186797] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:14:01.105 [DEBUG] [Thread-186797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:14:01.105 [DEBUG] [Thread-186797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:14:01.105 [DEBUG] [Thread-186797] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:14:01.105 [DEBUG] [Thread-186797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:14:01.105 [DEBUG] [Thread-186797] [transport.py] [_log()] Compression: none
2026-02-14T14:14:01.105 [DEBUG] [Thread-186797] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:14:01.121 [DEBUG] [Thread-186797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:14:01.121 [DEBUG] [Thread-186797] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:14:01.122 [DEBUG] [Thread-186797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:14:01.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:14:01.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:14:01.124 [DEBUG] [Thread-186797] [transport.py] [_log()] userauth is OK
2026-02-14T14:14:01.124 [DEBUG] [Thread-186797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:14:01.124 [DEBUG] [Thread-186797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:14:01.124 [DEBUG] [Thread-186797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:14:01.124 [DEBUG] [Thread-186797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:14:01.161 [INFO] [Thread-186797] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:14:01.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:14:01.824 [DEBUG] [Thread-186797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:14:01.824 [DEBUG] [Thread-186797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:14:01.825 [DEBUG] [Thread-186797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:14:01.865 [DEBUG] [Thread-186797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:14:01.866 [DEBUG] [Thread-186797] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:14:01.869 [DEBUG] [Thread-186797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:14:01.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:14:01.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:14:01.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:14:01.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:14:01.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:14:01.892 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:14:01.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:14:01.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:14:01.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:14:01.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.509136 -999.00  +16.40  24.70     41   +3.20 1 1 1 1 1   888    0 12.77 -6.30 ----- 26.6 24.7 158.0 37.8 22.4 -25.6 21.4 -26.0 22.4 -23.7 23.5 -24.8
2026-02-14T14:14:01.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:14:01.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:14:01.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.509136
2026-02-14T14:14:01.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:14:01.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:14:01.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:14:01.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:14:01.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:14:01.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:13:40', tmtdew=16.8, humidity=32.41, cloud=0.0, wind=37.54, temperature=18.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:13:09.350', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:14:01.895 [DEBUG] [Thread-186797] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:14:01.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-14T14:14:01.989 [DEBUG] [Thread-186800] [transport.py] [_log()] starting thread (client mode): 0xa2d56800
2026-02-14T14:14:01.990 [DEBUG] [Thread-186800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:14:02.005 [DEBUG] [Thread-186800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:14:02.005 [INFO] [Thread-186800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:14:02.012 [DEBUG] [Thread-186800] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:14:02.013 [DEBUG] [Thread-186800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:14:02.013 [DEBUG] [Thread-186800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:14:02.013 [DEBUG] [Thread-186800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:14:02.013 [DEBUG] [Thread-186800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:14:02.013 [DEBUG] [Thread-186800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:14:02.013 [DEBUG] [Thread-186800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:14:02.013 [DEBUG] [Thread-186800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:14:02.013 [DEBUG] [Thread-186800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:14:02.013 [DEBUG] [Thread-186800] [transport.py] [_log()] client lang: <none>
2026-02-14T14:14:02.013 [DEBUG] [Thread-186800] [transport.py] [_log()] server lang: <none>
2026-02-14T14:14:02.013 [DEBUG] [Thread-186800] [transport.py] [_log()] kex follows: False
2026-02-14T14:14:02.013 [DEBUG] [Thread-186800] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:14:02.013 [DEBUG] [Thread-186800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:14:02.013 [DEBUG] [Thread-186800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:14:02.013 [DEBUG] [Thread-186800] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:14:02.013 [DEBUG] [Thread-186800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:14:02.013 [DEBUG] [Thread-186800] [transport.py] [_log()] Compression: none
2026-02-14T14:14:02.013 [DEBUG] [Thread-186800] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:14:02.068 [DEBUG] [Thread-186800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:14:02.068 [DEBUG] [Thread-186800] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:14:02.068 [DEBUG] [Thread-186800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:14:02.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:14:02.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:14:02.125 [DEBUG] [Thread-186800] [transport.py] [_log()] userauth is OK
2026-02-14T14:14:02.125 [DEBUG] [Thread-186800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:14:02.125 [DEBUG] [Thread-186800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:14:02.125 [DEBUG] [Thread-186800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:14:02.125 [DEBUG] [Thread-186800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:14:02.139 [INFO] [Thread-186800] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:14:02.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T14:14:02.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:14:03.020 [DEBUG] [Thread-186800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:14:03.020 [DEBUG] [Thread-186800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:14:03.068 [DEBUG] [Thread-186800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:14:03.068 [DEBUG] [Thread-186800] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:14:03.077 [DEBUG] [Thread-186800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:14:03.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:14:03.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-14T14:14:03.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-14T14:14:03.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:14:03.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:14:03.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:14:03.110 [DEBUG] [Thread-186800] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:14:14.246 [DEBUG] [Thread-186802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:14:25.801 [DEBUG] [Thread-186803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:14:29.299 [DEBUG] [Thread-186804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:14:33.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:14:33.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:14:33.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-14T14:14:35.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 14, 15), 15.79, 34.62, 0.0, 35.18, 16.68, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:14:35.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:14:15
2026-02-14T14:14:35.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:14:35.714 [DEBUG] [Thread-186805] [transport.py] [_log()] starting thread (client mode): 0xa2d56b30
2026-02-14T14:14:35.715 [DEBUG] [Thread-186805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:14:35.736 [DEBUG] [Thread-186805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:14:35.736 [INFO] [Thread-186805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:14:35.739 [DEBUG] [Thread-186805] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:14:35.739 [DEBUG] [Thread-186805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:14:35.739 [DEBUG] [Thread-186805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:14:35.739 [DEBUG] [Thread-186805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:14:35.739 [DEBUG] [Thread-186805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:14:35.739 [DEBUG] [Thread-186805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:14:35.739 [DEBUG] [Thread-186805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:14:35.739 [DEBUG] [Thread-186805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:14:35.739 [DEBUG] [Thread-186805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:14:35.739 [DEBUG] [Thread-186805] [transport.py] [_log()] client lang: <none>
2026-02-14T14:14:35.739 [DEBUG] [Thread-186805] [transport.py] [_log()] server lang: <none>
2026-02-14T14:14:35.739 [DEBUG] [Thread-186805] [transport.py] [_log()] kex follows: False
2026-02-14T14:14:35.739 [DEBUG] [Thread-186805] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:14:35.740 [DEBUG] [Thread-186805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:14:35.740 [DEBUG] [Thread-186805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:14:35.740 [DEBUG] [Thread-186805] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:14:35.740 [DEBUG] [Thread-186805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:14:35.740 [DEBUG] [Thread-186805] [transport.py] [_log()] Compression: none
2026-02-14T14:14:35.740 [DEBUG] [Thread-186805] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:14:35.759 [DEBUG] [Thread-186805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:14:35.759 [DEBUG] [Thread-186805] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:14:35.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:14:35.760 [DEBUG] [Thread-186805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:14:35.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:14:35.763 [DEBUG] [Thread-186805] [transport.py] [_log()] userauth is OK
2026-02-14T14:14:35.763 [DEBUG] [Thread-186805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:14:35.763 [DEBUG] [Thread-186805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:14:35.763 [DEBUG] [Thread-186805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:14:35.764 [DEBUG] [Thread-186805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:14:35.787 [INFO] [Thread-186805] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:14:35.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:14:36.406 [DEBUG] [Thread-186805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:14:36.406 [DEBUG] [Thread-186805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:14:36.406 [DEBUG] [Thread-186805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:14:36.446 [DEBUG] [Thread-186805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:14:36.447 [DEBUG] [Thread-186805] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:14:36.450 [DEBUG] [Thread-186805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:14:36.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:14:36.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:14:36.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:14:36.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:14:36.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:14:36.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:14:36.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:14:36.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:14:36.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:14:36.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.509483 -999.00  +16.40  25.11     40   +3.00 1 1 1 1 1   888    0 12.79 -4.16 ----- 26.5 25.1 164.6 39.8 22.5 -27.6 21.5 -25.0 22.4 -25.0 23.5 -25.9
2026-02-14T14:14:36.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:14:36.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:14:36.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.509483
2026-02-14T14:14:36.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:14:36.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:14:36.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:14:36.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:14:36.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:14:36.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:14:15', tmtdew=15.79, humidity=34.62, cloud=0.0, wind=35.18, temperature=16.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:13:39.331', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:14:36.475 [DEBUG] [Thread-186805] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:14:36.523 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:14:36.523 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:14:36.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T14:14:36.585 [DEBUG] [Thread-186808] [transport.py] [_log()] starting thread (client mode): 0xa2d1ae90
2026-02-14T14:14:36.585 [DEBUG] [Thread-186808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:14:36.606 [DEBUG] [Thread-186808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:14:36.607 [INFO] [Thread-186808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:14:36.614 [DEBUG] [Thread-186808] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:14:36.614 [DEBUG] [Thread-186808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:14:36.615 [DEBUG] [Thread-186808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:14:36.615 [DEBUG] [Thread-186808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:14:36.615 [DEBUG] [Thread-186808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:14:36.615 [DEBUG] [Thread-186808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:14:36.615 [DEBUG] [Thread-186808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:14:36.615 [DEBUG] [Thread-186808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:14:36.615 [DEBUG] [Thread-186808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:14:36.615 [DEBUG] [Thread-186808] [transport.py] [_log()] client lang: <none>
2026-02-14T14:14:36.615 [DEBUG] [Thread-186808] [transport.py] [_log()] server lang: <none>
2026-02-14T14:14:36.615 [DEBUG] [Thread-186808] [transport.py] [_log()] kex follows: False
2026-02-14T14:14:36.616 [DEBUG] [Thread-186808] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:14:36.616 [DEBUG] [Thread-186808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:14:36.616 [DEBUG] [Thread-186808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:14:36.616 [DEBUG] [Thread-186808] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:14:36.616 [DEBUG] [Thread-186808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:14:36.616 [DEBUG] [Thread-186808] [transport.py] [_log()] Compression: none
2026-02-14T14:14:36.616 [DEBUG] [Thread-186808] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:14:36.675 [DEBUG] [Thread-186808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:14:36.675 [DEBUG] [Thread-186808] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:14:36.676 [DEBUG] [Thread-186808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:14:36.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:14:36.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:14:36.731 [DEBUG] [Thread-186808] [transport.py] [_log()] userauth is OK
2026-02-14T14:14:36.731 [DEBUG] [Thread-186808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:14:36.731 [DEBUG] [Thread-186808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:14:36.732 [DEBUG] [Thread-186808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:14:36.732 [DEBUG] [Thread-186808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:14:36.750 [INFO] [Thread-186808] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:14:36.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-14T14:14:36.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:14:37.589 [DEBUG] [Thread-186808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:14:37.589 [DEBUG] [Thread-186808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:14:37.639 [DEBUG] [Thread-186808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:14:37.640 [DEBUG] [Thread-186808] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:14:37.650 [DEBUG] [Thread-186808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:14:37.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:14:37.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-14T14:14:37.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:14:37.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:14:37.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:14:37.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:14:37.702 [DEBUG] [Thread-186808] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:14:44.336 [DEBUG] [Thread-186810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:14:59.408 [DEBUG] [Thread-186811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:15:07.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:15:07.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:15:07.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:15:09.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 14, 50), 15.47, 35.04, 0.0, 27.1, 16.23, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:15:09.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:14:50
2026-02-14T14:15:09.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:15:10.044 [DEBUG] [Thread-186812] [transport.py] [_log()] starting thread (client mode): 0xa2d1bcd0
2026-02-14T14:15:10.044 [DEBUG] [Thread-186812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:15:10.063 [DEBUG] [Thread-186812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:15:10.063 [INFO] [Thread-186812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:15:10.066 [DEBUG] [Thread-186812] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:15:10.067 [DEBUG] [Thread-186812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:15:10.067 [DEBUG] [Thread-186812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:15:10.067 [DEBUG] [Thread-186812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:15:10.067 [DEBUG] [Thread-186812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:15:10.067 [DEBUG] [Thread-186812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:15:10.067 [DEBUG] [Thread-186812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:15:10.067 [DEBUG] [Thread-186812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:15:10.067 [DEBUG] [Thread-186812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:15:10.067 [DEBUG] [Thread-186812] [transport.py] [_log()] client lang: <none>
2026-02-14T14:15:10.067 [DEBUG] [Thread-186812] [transport.py] [_log()] server lang: <none>
2026-02-14T14:15:10.067 [DEBUG] [Thread-186812] [transport.py] [_log()] kex follows: False
2026-02-14T14:15:10.067 [DEBUG] [Thread-186812] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:15:10.067 [DEBUG] [Thread-186812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:15:10.068 [DEBUG] [Thread-186812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:15:10.068 [DEBUG] [Thread-186812] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:15:10.068 [DEBUG] [Thread-186812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:15:10.068 [DEBUG] [Thread-186812] [transport.py] [_log()] Compression: none
2026-02-14T14:15:10.068 [DEBUG] [Thread-186812] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:15:10.085 [DEBUG] [Thread-186812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:15:10.086 [DEBUG] [Thread-186812] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:15:10.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:15:10.087 [DEBUG] [Thread-186812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:15:10.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:15:10.089 [DEBUG] [Thread-186812] [transport.py] [_log()] userauth is OK
2026-02-14T14:15:10.089 [DEBUG] [Thread-186812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:15:10.089 [DEBUG] [Thread-186812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:15:10.089 [DEBUG] [Thread-186812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:15:10.089 [DEBUG] [Thread-186812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:15:10.104 [INFO] [Thread-186812] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:15:10.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:15:11.007 [DEBUG] [Thread-186812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:15:11.007 [DEBUG] [Thread-186812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:15:11.007 [DEBUG] [Thread-186812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:15:11.048 [DEBUG] [Thread-186812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:15:11.048 [DEBUG] [Thread-186812] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:15:11.052 [DEBUG] [Thread-186812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:15:11.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:15:11.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:15:11.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:15:11.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:15:11.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:15:11.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:15:11.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:15:11.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:15:11.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:15:11.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.509831 -999.00  +16.00  23.97     41   +2.80 1 1 1 1 1   888    0 12.96 -2.24 ----- 25.8 24.0 142.6 29.3 22.4 -26.6 21.6 -26.2 22.3 -24.2 23.4 -26.7
2026-02-14T14:15:11.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:15:11.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:15:11.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.509831
2026-02-14T14:15:11.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:15:11.080 [DEBUG] [Thread-186812] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:15:11.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:15:11.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:15:11.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:15:11.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:15:11.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:14:50', tmtdew=15.47, humidity=35.04, cloud=0.0, wind=27.1, temperature=16.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:14:09.398', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:15:11.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T14:15:11.176 [DEBUG] [Thread-186815] [transport.py] [_log()] starting thread (client mode): 0xa2d3cf10
2026-02-14T14:15:11.176 [DEBUG] [Thread-186815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:15:11.190 [DEBUG] [Thread-186815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:15:11.190 [INFO] [Thread-186815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:15:11.198 [DEBUG] [Thread-186815] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:15:11.198 [DEBUG] [Thread-186815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:15:11.198 [DEBUG] [Thread-186815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:15:11.199 [DEBUG] [Thread-186815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:15:11.199 [DEBUG] [Thread-186815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:15:11.199 [DEBUG] [Thread-186815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:15:11.199 [DEBUG] [Thread-186815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:15:11.199 [DEBUG] [Thread-186815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:15:11.199 [DEBUG] [Thread-186815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:15:11.199 [DEBUG] [Thread-186815] [transport.py] [_log()] client lang: <none>
2026-02-14T14:15:11.199 [DEBUG] [Thread-186815] [transport.py] [_log()] server lang: <none>
2026-02-14T14:15:11.199 [DEBUG] [Thread-186815] [transport.py] [_log()] kex follows: False
2026-02-14T14:15:11.199 [DEBUG] [Thread-186815] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:15:11.199 [DEBUG] [Thread-186815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:15:11.199 [DEBUG] [Thread-186815] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:15:11.199 [DEBUG] [Thread-186815] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:15:11.199 [DEBUG] [Thread-186815] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:15:11.199 [DEBUG] [Thread-186815] [transport.py] [_log()] Compression: none
2026-02-14T14:15:11.199 [DEBUG] [Thread-186815] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:15:11.255 [DEBUG] [Thread-186815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:15:11.255 [DEBUG] [Thread-186815] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:15:11.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:15:11.257 [DEBUG] [Thread-186815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:15:11.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:15:11.311 [DEBUG] [Thread-186815] [transport.py] [_log()] userauth is OK
2026-02-14T14:15:11.312 [DEBUG] [Thread-186815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:15:11.312 [DEBUG] [Thread-186815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:15:11.312 [DEBUG] [Thread-186815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:15:11.312 [DEBUG] [Thread-186815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:15:11.331 [INFO] [Thread-186815] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:15:11.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-14T14:15:11.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:15:12.150 [DEBUG] [Thread-186815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:15:12.151 [DEBUG] [Thread-186815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:15:12.198 [DEBUG] [Thread-186815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:15:12.198 [DEBUG] [Thread-186815] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:15:12.206 [DEBUG] [Thread-186815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:15:12.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:15:12.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-14T14:15:12.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-14T14:15:12.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:15:12.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:15:12.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:15:12.241 [DEBUG] [Thread-186815] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:15:14.445 [DEBUG] [Thread-186817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:15:25.847 [DEBUG] [Thread-186818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:15:29.507 [DEBUG] [Thread-186819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:15:36.665 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:15:36.666 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:15:42.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:15:42.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:15:42.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-14T14:15:44.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 15, 25), 15.27, 35.43, 0.0, 31.74, 16.02, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:15:44.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:15:25
2026-02-14T14:15:44.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:15:44.542 [DEBUG] [Thread-186820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:15:44.605 [DEBUG] [Thread-186821] [transport.py] [_log()] starting thread (client mode): 0xa5741ba0
2026-02-14T14:15:44.605 [DEBUG] [Thread-186821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:15:44.626 [DEBUG] [Thread-186821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:15:44.626 [INFO] [Thread-186821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:15:44.630 [DEBUG] [Thread-186821] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:15:44.630 [DEBUG] [Thread-186821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:15:44.630 [DEBUG] [Thread-186821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:15:44.630 [DEBUG] [Thread-186821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:15:44.630 [DEBUG] [Thread-186821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:15:44.630 [DEBUG] [Thread-186821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:15:44.630 [DEBUG] [Thread-186821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:15:44.630 [DEBUG] [Thread-186821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:15:44.630 [DEBUG] [Thread-186821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:15:44.630 [DEBUG] [Thread-186821] [transport.py] [_log()] client lang: <none>
2026-02-14T14:15:44.631 [DEBUG] [Thread-186821] [transport.py] [_log()] server lang: <none>
2026-02-14T14:15:44.631 [DEBUG] [Thread-186821] [transport.py] [_log()] kex follows: False
2026-02-14T14:15:44.631 [DEBUG] [Thread-186821] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:15:44.631 [DEBUG] [Thread-186821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:15:44.631 [DEBUG] [Thread-186821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:15:44.631 [DEBUG] [Thread-186821] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:15:44.631 [DEBUG] [Thread-186821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:15:44.631 [DEBUG] [Thread-186821] [transport.py] [_log()] Compression: none
2026-02-14T14:15:44.631 [DEBUG] [Thread-186821] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:15:44.649 [DEBUG] [Thread-186821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:15:44.650 [DEBUG] [Thread-186821] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:15:44.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:15:44.651 [DEBUG] [Thread-186821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:15:44.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:15:44.653 [DEBUG] [Thread-186821] [transport.py] [_log()] userauth is OK
2026-02-14T14:15:44.654 [DEBUG] [Thread-186821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:15:44.654 [DEBUG] [Thread-186821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:15:44.654 [DEBUG] [Thread-186821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:15:44.655 [DEBUG] [Thread-186821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:15:44.675 [INFO] [Thread-186821] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:15:44.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:15:45.435 [DEBUG] [Thread-186821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:15:45.436 [DEBUG] [Thread-186821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:15:45.436 [DEBUG] [Thread-186821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:15:45.476 [DEBUG] [Thread-186821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:15:45.477 [DEBUG] [Thread-186821] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:15:45.479 [DEBUG] [Thread-186821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:15:45.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:15:45.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:15:45.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:15:45.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:15:45.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:15:45.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:15:45.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:15:45.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:15:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:15:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.510525 -999.00  +15.70  30.10     41   +2.60 1 1 2 1 1   888    0 12.99 1.35 ----- 31.1 30.1 159.8 34.7 22.2 -26.4 21.4 -27.2 22.2 -25.6 23.4 -27.3
2026-02-14T14:15:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:15:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:15:45.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.510525
2026-02-14T14:15:45.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:15:45.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:15:45.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:15:45.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:15:45.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:15:45.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:15:25', tmtdew=15.27, humidity=35.43, cloud=0.0, wind=31.74, temperature=16.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:15:09.360', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:15:45.502 [DEBUG] [Thread-186821] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:15:45.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-14T14:15:45.596 [DEBUG] [Thread-186824] [transport.py] [_log()] starting thread (client mode): 0xa2d57430
2026-02-14T14:15:45.597 [DEBUG] [Thread-186824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:15:45.610 [DEBUG] [Thread-186824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:15:45.610 [INFO] [Thread-186824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:15:45.618 [DEBUG] [Thread-186824] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:15:45.618 [DEBUG] [Thread-186824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:15:45.618 [DEBUG] [Thread-186824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:15:45.618 [DEBUG] [Thread-186824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:15:45.618 [DEBUG] [Thread-186824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:15:45.619 [DEBUG] [Thread-186824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:15:45.619 [DEBUG] [Thread-186824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:15:45.619 [DEBUG] [Thread-186824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:15:45.619 [DEBUG] [Thread-186824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:15:45.619 [DEBUG] [Thread-186824] [transport.py] [_log()] client lang: <none>
2026-02-14T14:15:45.619 [DEBUG] [Thread-186824] [transport.py] [_log()] server lang: <none>
2026-02-14T14:15:45.619 [DEBUG] [Thread-186824] [transport.py] [_log()] kex follows: False
2026-02-14T14:15:45.619 [DEBUG] [Thread-186824] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:15:45.619 [DEBUG] [Thread-186824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:15:45.619 [DEBUG] [Thread-186824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:15:45.619 [DEBUG] [Thread-186824] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:15:45.619 [DEBUG] [Thread-186824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:15:45.619 [DEBUG] [Thread-186824] [transport.py] [_log()] Compression: none
2026-02-14T14:15:45.619 [DEBUG] [Thread-186824] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:15:45.676 [DEBUG] [Thread-186824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:15:45.676 [DEBUG] [Thread-186824] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:15:45.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:15:45.676 [DEBUG] [Thread-186824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:15:45.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:15:45.732 [DEBUG] [Thread-186824] [transport.py] [_log()] userauth is OK
2026-02-14T14:15:45.732 [DEBUG] [Thread-186824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:15:45.732 [DEBUG] [Thread-186824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:15:45.732 [DEBUG] [Thread-186824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:15:45.732 [DEBUG] [Thread-186824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:15:45.751 [INFO] [Thread-186824] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:15:45.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-14T14:15:45.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:15:46.558 [DEBUG] [Thread-186824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:15:46.559 [DEBUG] [Thread-186824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:15:46.606 [DEBUG] [Thread-186824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:15:46.607 [DEBUG] [Thread-186824] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:15:46.616 [DEBUG] [Thread-186824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:15:46.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:15:46.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-14T14:15:46.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-14T14:15:46.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:15:46.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:15:46.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:15:46.652 [DEBUG] [Thread-186824] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:15:59.576 [DEBUG] [Thread-186826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:16:14.623 [DEBUG] [Thread-186827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:16:16.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:16:16.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:16:16.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-14T14:16:18.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 16, 1), 15.36, 35.6, 0.0, 34.39, 16.07, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:16:18.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:16:01
2026-02-14T14:16:18.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:16:19.012 [DEBUG] [Thread-186828] [transport.py] [_log()] starting thread (client mode): 0xa2d562f0
2026-02-14T14:16:19.012 [DEBUG] [Thread-186828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:16:19.031 [DEBUG] [Thread-186828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:16:19.031 [INFO] [Thread-186828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:16:19.034 [DEBUG] [Thread-186828] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:16:19.035 [DEBUG] [Thread-186828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:16:19.035 [DEBUG] [Thread-186828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:16:19.035 [DEBUG] [Thread-186828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:16:19.035 [DEBUG] [Thread-186828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:16:19.035 [DEBUG] [Thread-186828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:16:19.035 [DEBUG] [Thread-186828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:16:19.035 [DEBUG] [Thread-186828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:16:19.035 [DEBUG] [Thread-186828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:16:19.035 [DEBUG] [Thread-186828] [transport.py] [_log()] client lang: <none>
2026-02-14T14:16:19.035 [DEBUG] [Thread-186828] [transport.py] [_log()] server lang: <none>
2026-02-14T14:16:19.035 [DEBUG] [Thread-186828] [transport.py] [_log()] kex follows: False
2026-02-14T14:16:19.035 [DEBUG] [Thread-186828] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:16:19.035 [DEBUG] [Thread-186828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:16:19.035 [DEBUG] [Thread-186828] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:16:19.035 [DEBUG] [Thread-186828] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:16:19.035 [DEBUG] [Thread-186828] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:16:19.035 [DEBUG] [Thread-186828] [transport.py] [_log()] Compression: none
2026-02-14T14:16:19.035 [DEBUG] [Thread-186828] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:16:19.051 [DEBUG] [Thread-186828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:16:19.052 [DEBUG] [Thread-186828] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:16:19.053 [DEBUG] [Thread-186828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:16:19.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:16:19.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:16:19.055 [DEBUG] [Thread-186828] [transport.py] [_log()] userauth is OK
2026-02-14T14:16:19.055 [DEBUG] [Thread-186828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:16:19.055 [DEBUG] [Thread-186828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:16:19.055 [DEBUG] [Thread-186828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:16:19.056 [DEBUG] [Thread-186828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:16:19.076 [INFO] [Thread-186828] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:16:19.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:16:19.718 [DEBUG] [Thread-186828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:16:19.718 [DEBUG] [Thread-186828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:16:19.719 [DEBUG] [Thread-186828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:16:19.761 [DEBUG] [Thread-186828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:16:19.762 [DEBUG] [Thread-186828] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:16:19.766 [DEBUG] [Thread-186828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:16:19.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:16:19.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:16:19.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:16:19.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:16:19.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:16:19.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:16:19.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:16:19.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:16:19.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:16:19.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.510872 -999.00  +15.60  30.74     41   +2.40 1 1 2 1 1   888    0 13.08 2.74 ----- 27.9 30.7 154.0 34.2 22.1 -27.7 21.3 -26.0 22.1 -26.0 23.3 -27.7
2026-02-14T14:16:19.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:16:19.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:16:19.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.510872
2026-02-14T14:16:19.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:16:19.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:16:19.790 [DEBUG] [Thread-186828] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:16:19.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:16:19.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:16:19.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:16:19.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:16:01', tmtdew=15.36, humidity=35.6, cloud=0.0, wind=34.39, temperature=16.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:15:39.341', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:16:19.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-14T14:16:19.894 [DEBUG] [Thread-186831] [transport.py] [_log()] starting thread (client mode): 0xa2dc0c40
2026-02-14T14:16:19.895 [DEBUG] [Thread-186831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:16:19.909 [DEBUG] [Thread-186831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:16:19.909 [INFO] [Thread-186831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:16:19.916 [DEBUG] [Thread-186831] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:16:19.917 [DEBUG] [Thread-186831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:16:19.917 [DEBUG] [Thread-186831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:16:19.917 [DEBUG] [Thread-186831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:16:19.917 [DEBUG] [Thread-186831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:16:19.917 [DEBUG] [Thread-186831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:16:19.917 [DEBUG] [Thread-186831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:16:19.917 [DEBUG] [Thread-186831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:16:19.917 [DEBUG] [Thread-186831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:16:19.917 [DEBUG] [Thread-186831] [transport.py] [_log()] client lang: <none>
2026-02-14T14:16:19.917 [DEBUG] [Thread-186831] [transport.py] [_log()] server lang: <none>
2026-02-14T14:16:19.917 [DEBUG] [Thread-186831] [transport.py] [_log()] kex follows: False
2026-02-14T14:16:19.917 [DEBUG] [Thread-186831] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:16:19.917 [DEBUG] [Thread-186831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:16:19.917 [DEBUG] [Thread-186831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:16:19.917 [DEBUG] [Thread-186831] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:16:19.917 [DEBUG] [Thread-186831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:16:19.917 [DEBUG] [Thread-186831] [transport.py] [_log()] Compression: none
2026-02-14T14:16:19.917 [DEBUG] [Thread-186831] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:16:19.976 [DEBUG] [Thread-186831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:16:19.977 [DEBUG] [Thread-186831] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:16:19.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:16:19.978 [DEBUG] [Thread-186831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:16:19.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:16:20.033 [DEBUG] [Thread-186831] [transport.py] [_log()] userauth is OK
2026-02-14T14:16:20.033 [DEBUG] [Thread-186831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:16:20.033 [DEBUG] [Thread-186831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:16:20.033 [DEBUG] [Thread-186831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:16:20.033 [DEBUG] [Thread-186831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:16:20.052 [INFO] [Thread-186831] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:16:20.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-14T14:16:20.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:16:20.825 [DEBUG] [Thread-186831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:16:20.826 [DEBUG] [Thread-186831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:16:20.873 [DEBUG] [Thread-186831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:16:20.874 [DEBUG] [Thread-186831] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:16:20.883 [DEBUG] [Thread-186831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:16:20.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:16:20.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-14T14:16:20.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-14T14:16:20.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:16:20.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:16:20.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:16:20.920 [DEBUG] [Thread-186831] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:16:25.885 [DEBUG] [Thread-186833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:16:29.661 [DEBUG] [Thread-186834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:16:36.804 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:16:36.806 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:16:44.711 [DEBUG] [Thread-186835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:16:50.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:16:50.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:16: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-14T14:16:52.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 16, 37), 17.19, 31.35, 0.0, 29.64, 17.83, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:16:52.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:16:37
2026-02-14T14:16:53.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:16:53.286 [DEBUG] [Thread-186836] [transport.py] [_log()] starting thread (client mode): 0xa2dc5660
2026-02-14T14:16:53.286 [DEBUG] [Thread-186836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:16:53.306 [DEBUG] [Thread-186836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:16:53.306 [INFO] [Thread-186836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:16:53.310 [DEBUG] [Thread-186836] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:16:53.310 [DEBUG] [Thread-186836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:16:53.310 [DEBUG] [Thread-186836] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:16:53.311 [DEBUG] [Thread-186836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:16:53.311 [DEBUG] [Thread-186836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:16:53.311 [DEBUG] [Thread-186836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:16:53.311 [DEBUG] [Thread-186836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:16:53.311 [DEBUG] [Thread-186836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:16:53.311 [DEBUG] [Thread-186836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:16:53.311 [DEBUG] [Thread-186836] [transport.py] [_log()] client lang: <none>
2026-02-14T14:16:53.311 [DEBUG] [Thread-186836] [transport.py] [_log()] server lang: <none>
2026-02-14T14:16:53.311 [DEBUG] [Thread-186836] [transport.py] [_log()] kex follows: False
2026-02-14T14:16:53.311 [DEBUG] [Thread-186836] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:16:53.311 [DEBUG] [Thread-186836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:16:53.311 [DEBUG] [Thread-186836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:16:53.311 [DEBUG] [Thread-186836] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:16:53.311 [DEBUG] [Thread-186836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:16:53.311 [DEBUG] [Thread-186836] [transport.py] [_log()] Compression: none
2026-02-14T14:16:53.311 [DEBUG] [Thread-186836] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:16:53.329 [DEBUG] [Thread-186836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:16:53.330 [DEBUG] [Thread-186836] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:16:53.330 [DEBUG] [Thread-186836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:16:53.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:16:53.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:16:53.332 [DEBUG] [Thread-186836] [transport.py] [_log()] userauth is OK
2026-02-14T14:16:53.332 [DEBUG] [Thread-186836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:16:53.332 [DEBUG] [Thread-186836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:16:53.333 [DEBUG] [Thread-186836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:16:53.333 [DEBUG] [Thread-186836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:16:53.357 [INFO] [Thread-186836] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:16:53.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:16:53.977 [DEBUG] [Thread-186836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:16:53.977 [DEBUG] [Thread-186836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:16:53.978 [DEBUG] [Thread-186836] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:16:54.018 [DEBUG] [Thread-186836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:16:54.019 [DEBUG] [Thread-186836] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:16:54.022 [DEBUG] [Thread-186836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:16:54.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:16:54.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:16:54.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:16:54.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:16:54.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:16:54.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:16:54.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:16:54.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:16:54.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:16:54.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.511567 -999.00  +15.60  22.09     42   +2.70 1 1 1 1 1   888    0 13.25 2.50 ----- 19.6 22.1 167.8 26.4 22.2 -26.2 21.3 -24.3 22.3 -24.2 23.4 -26.1
2026-02-14T14:16:54.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:16:54.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:16:54.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.511567
2026-02-14T14:16:54.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:16:54.059 [DEBUG] [Thread-186836] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:16:54.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:16:54.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:16:54.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:16:54.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:16:54.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:16:37', tmtdew=17.19, humidity=31.35, cloud=0.0, wind=29.64, temperature=17.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:16:39.389', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:16:54.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T14:16:54.160 [DEBUG] [Thread-186839] [transport.py] [_log()] starting thread (client mode): 0xa2de9210
2026-02-14T14:16:54.160 [DEBUG] [Thread-186839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:16:54.175 [DEBUG] [Thread-186839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:16:54.175 [INFO] [Thread-186839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:16:54.183 [DEBUG] [Thread-186839] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:16:54.183 [DEBUG] [Thread-186839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:16:54.183 [DEBUG] [Thread-186839] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:16:54.183 [DEBUG] [Thread-186839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:16:54.183 [DEBUG] [Thread-186839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:16:54.183 [DEBUG] [Thread-186839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:16:54.183 [DEBUG] [Thread-186839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:16:54.183 [DEBUG] [Thread-186839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:16:54.183 [DEBUG] [Thread-186839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:16:54.183 [DEBUG] [Thread-186839] [transport.py] [_log()] client lang: <none>
2026-02-14T14:16:54.183 [DEBUG] [Thread-186839] [transport.py] [_log()] server lang: <none>
2026-02-14T14:16:54.183 [DEBUG] [Thread-186839] [transport.py] [_log()] kex follows: False
2026-02-14T14:16:54.183 [DEBUG] [Thread-186839] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:16:54.183 [DEBUG] [Thread-186839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:16:54.183 [DEBUG] [Thread-186839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:16:54.183 [DEBUG] [Thread-186839] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:16:54.184 [DEBUG] [Thread-186839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:16:54.184 [DEBUG] [Thread-186839] [transport.py] [_log()] Compression: none
2026-02-14T14:16:54.184 [DEBUG] [Thread-186839] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:16:54.241 [DEBUG] [Thread-186839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:16:54.241 [DEBUG] [Thread-186839] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:16:54.242 [DEBUG] [Thread-186839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:16:54.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:16:54.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:16:54.297 [DEBUG] [Thread-186839] [transport.py] [_log()] userauth is OK
2026-02-14T14:16:54.298 [DEBUG] [Thread-186839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:16:54.298 [DEBUG] [Thread-186839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:16:54.298 [DEBUG] [Thread-186839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:16:54.298 [DEBUG] [Thread-186839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:16:54.318 [INFO] [Thread-186839] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:16:54.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-14T14:16:54.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:16:55.158 [DEBUG] [Thread-186839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:16:55.159 [DEBUG] [Thread-186839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:16:55.206 [DEBUG] [Thread-186839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:16:55.207 [DEBUG] [Thread-186839] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:16:55.216 [DEBUG] [Thread-186839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:16:55.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:16:55.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:16:55.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-14T14:16:55.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:16:55.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:16:55.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:16:55.253 [DEBUG] [Thread-186839] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:16:59.750 [DEBUG] [Thread-186841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:17:14.810 [DEBUG] [Thread-186842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:17:25.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:17:25.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:17:25.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:17:25.938 [DEBUG] [Thread-186843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:17:27.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 17, 12), 15.87, 33.87, 0.0, 24.95, 16.27, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:17:27.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:17:12
2026-02-14T14:17:27.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:17:27.572 [DEBUG] [Thread-186844] [transport.py] [_log()] starting thread (client mode): 0xa5740c70
2026-02-14T14:17:27.572 [DEBUG] [Thread-186844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:17:27.585 [DEBUG] [Thread-186844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:17:27.585 [INFO] [Thread-186844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:17:27.587 [DEBUG] [Thread-186844] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:17:27.587 [DEBUG] [Thread-186844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:17:27.587 [DEBUG] [Thread-186844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:17:27.587 [DEBUG] [Thread-186844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:17:27.587 [DEBUG] [Thread-186844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:17:27.587 [DEBUG] [Thread-186844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:17:27.587 [DEBUG] [Thread-186844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:17:27.587 [DEBUG] [Thread-186844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:17:27.587 [DEBUG] [Thread-186844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:17:27.587 [DEBUG] [Thread-186844] [transport.py] [_log()] client lang: <none>
2026-02-14T14:17:27.587 [DEBUG] [Thread-186844] [transport.py] [_log()] server lang: <none>
2026-02-14T14:17:27.587 [DEBUG] [Thread-186844] [transport.py] [_log()] kex follows: False
2026-02-14T14:17:27.587 [DEBUG] [Thread-186844] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:17:27.587 [DEBUG] [Thread-186844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:17:27.587 [DEBUG] [Thread-186844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:17:27.587 [DEBUG] [Thread-186844] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:17:27.587 [DEBUG] [Thread-186844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:17:27.588 [DEBUG] [Thread-186844] [transport.py] [_log()] Compression: none
2026-02-14T14:17:27.588 [DEBUG] [Thread-186844] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:17:27.600 [DEBUG] [Thread-186844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:17:27.601 [DEBUG] [Thread-186844] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:17:27.601 [DEBUG] [Thread-186844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:17:27.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:17:27.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:17:27.602 [DEBUG] [Thread-186844] [transport.py] [_log()] userauth is OK
2026-02-14T14:17:27.602 [DEBUG] [Thread-186844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:17:27.602 [DEBUG] [Thread-186844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:17:27.602 [DEBUG] [Thread-186844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:17:27.602 [DEBUG] [Thread-186844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:17:27.618 [INFO] [Thread-186844] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:17:27.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:17:28.207 [DEBUG] [Thread-186844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:17:28.208 [DEBUG] [Thread-186844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:17:28.208 [DEBUG] [Thread-186844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:17:28.248 [DEBUG] [Thread-186844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:17:28.248 [DEBUG] [Thread-186844] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:17:28.252 [DEBUG] [Thread-186844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:17:28.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:17:28.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:17:28.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:17:28.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:17:28.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:17:28.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:17:28.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:17:28.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:17:28.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:17:28.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.511914 -999.00  +15.90  16.29     41   +2.70 1 1 1 1 1   888    0 13.12 2.13 ----- 25.3 16.3 170.7 28.7 22.4 -27.0 21.4 -26.0 22.4 -24.8 23.5 -25.1
2026-02-14T14:17:28.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:17:28.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:17:28.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.511914
2026-02-14T14:17:28.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:17:28.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:17:28.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:17:28.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:17:28.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:17:28.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:17:12', tmtdew=15.87, humidity=33.87, cloud=0.0, wind=24.95, temperature=16.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:17:09.370', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:17:28.273 [DEBUG] [Thread-186844] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:17:28.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-14T14:17:28.369 [DEBUG] [Thread-186847] [transport.py] [_log()] starting thread (client mode): 0xa2dea140
2026-02-14T14:17:28.369 [DEBUG] [Thread-186847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:17:28.383 [DEBUG] [Thread-186847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:17:28.383 [INFO] [Thread-186847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:17:28.391 [DEBUG] [Thread-186847] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:17:28.392 [DEBUG] [Thread-186847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:17:28.392 [DEBUG] [Thread-186847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:17:28.392 [DEBUG] [Thread-186847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:17:28.392 [DEBUG] [Thread-186847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:17:28.392 [DEBUG] [Thread-186847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:17:28.392 [DEBUG] [Thread-186847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:17:28.392 [DEBUG] [Thread-186847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:17:28.392 [DEBUG] [Thread-186847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:17:28.392 [DEBUG] [Thread-186847] [transport.py] [_log()] client lang: <none>
2026-02-14T14:17:28.392 [DEBUG] [Thread-186847] [transport.py] [_log()] server lang: <none>
2026-02-14T14:17:28.392 [DEBUG] [Thread-186847] [transport.py] [_log()] kex follows: False
2026-02-14T14:17:28.392 [DEBUG] [Thread-186847] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:17:28.392 [DEBUG] [Thread-186847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:17:28.392 [DEBUG] [Thread-186847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:17:28.392 [DEBUG] [Thread-186847] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:17:28.392 [DEBUG] [Thread-186847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:17:28.392 [DEBUG] [Thread-186847] [transport.py] [_log()] Compression: none
2026-02-14T14:17:28.392 [DEBUG] [Thread-186847] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:17:28.450 [DEBUG] [Thread-186847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:17:28.451 [DEBUG] [Thread-186847] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:17:28.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:17:28.452 [DEBUG] [Thread-186847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:17:28.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:17:28.507 [DEBUG] [Thread-186847] [transport.py] [_log()] userauth is OK
2026-02-14T14:17:28.507 [DEBUG] [Thread-186847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:17:28.507 [DEBUG] [Thread-186847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:17:28.507 [DEBUG] [Thread-186847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:17:28.508 [DEBUG] [Thread-186847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:17:28.526 [INFO] [Thread-186847] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:17:28.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T14:17:28.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:17:29.327 [DEBUG] [Thread-186847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:17:29.328 [DEBUG] [Thread-186847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:17:29.375 [DEBUG] [Thread-186847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:17:29.375 [DEBUG] [Thread-186847] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:17:29.388 [DEBUG] [Thread-186847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:17:29.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:17:29.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:17:29.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:17:29.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:17:29.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:17:29.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:17:29.426 [DEBUG] [Thread-186847] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:17:29.848 [DEBUG] [Thread-186849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:17:36.950 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:17:36.951 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:17:44.898 [DEBUG] [Thread-186850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:17:59.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:17:59.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:17:59.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-14T14:17:59.935 [DEBUG] [Thread-186851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:18:01.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 17, 47), 16.27, 33.27, 0.0, 36.33, 16.53, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:18:01.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:17:47
2026-02-14T14:18:01.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:18:01.957 [DEBUG] [Thread-186852] [transport.py] [_log()] starting thread (client mode): 0xa2d11240
2026-02-14T14:18:01.957 [DEBUG] [Thread-186852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:18:01.975 [DEBUG] [Thread-186852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:18:01.975 [INFO] [Thread-186852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:18:01.976 [DEBUG] [Thread-186852] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:18:01.976 [DEBUG] [Thread-186852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:18:01.976 [DEBUG] [Thread-186852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:18:01.976 [DEBUG] [Thread-186852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:18:01.976 [DEBUG] [Thread-186852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:18:01.976 [DEBUG] [Thread-186852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:18:01.976 [DEBUG] [Thread-186852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:18:01.976 [DEBUG] [Thread-186852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:18:01.976 [DEBUG] [Thread-186852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:18:01.976 [DEBUG] [Thread-186852] [transport.py] [_log()] client lang: <none>
2026-02-14T14:18:01.976 [DEBUG] [Thread-186852] [transport.py] [_log()] server lang: <none>
2026-02-14T14:18:01.976 [DEBUG] [Thread-186852] [transport.py] [_log()] kex follows: False
2026-02-14T14:18:01.976 [DEBUG] [Thread-186852] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:18:01.976 [DEBUG] [Thread-186852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:18:01.976 [DEBUG] [Thread-186852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:18:01.976 [DEBUG] [Thread-186852] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:18:01.976 [DEBUG] [Thread-186852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:18:01.976 [DEBUG] [Thread-186852] [transport.py] [_log()] Compression: none
2026-02-14T14:18:01.976 [DEBUG] [Thread-186852] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:18:01.984 [DEBUG] [Thread-186852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:18:01.985 [DEBUG] [Thread-186852] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:18:01.985 [DEBUG] [Thread-186852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:18:01.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:18:01.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:18:01.986 [DEBUG] [Thread-186852] [transport.py] [_log()] userauth is OK
2026-02-14T14:18:01.987 [DEBUG] [Thread-186852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:18:01.987 [DEBUG] [Thread-186852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:18:01.987 [DEBUG] [Thread-186852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:18:01.987 [DEBUG] [Thread-186852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:18:02.005 [INFO] [Thread-186852] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:18:02.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:18:02.665 [DEBUG] [Thread-186852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:18:02.665 [DEBUG] [Thread-186852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:18:02.665 [DEBUG] [Thread-186852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:18:02.705 [DEBUG] [Thread-186852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:18:02.705 [DEBUG] [Thread-186852] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:18:02.708 [DEBUG] [Thread-186852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:18:02.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:18:02.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:18:02.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:18:02.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:18:02.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:18:02.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:18:02.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:18:02.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:18:02.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:18:02.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.512262 -999.00  +16.00  30.48     38   +1.70 1 1 2 1 1   888    0 13.14 5.21 ----- 29.0 30.5 162.9 40.4 22.3 -28.0 21.3 -26.6 22.2 -26.5 23.4 -27.6
2026-02-14T14:18:02.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:18:02.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:18:02.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.512262
2026-02-14T14:18:02.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:18:02.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:18:02.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:18:02.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:18:02.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:18:02.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:17:47', tmtdew=16.27, humidity=33.27, cloud=0.0, wind=36.33, temperature=16.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:17:39.437', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:18:02.728 [DEBUG] [Thread-186852] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:18:02.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-14T14:18:02.812 [DEBUG] [Thread-186855] [transport.py] [_log()] starting thread (client mode): 0xa2d23520
2026-02-14T14:18:02.812 [DEBUG] [Thread-186855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:18:02.827 [DEBUG] [Thread-186855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:18:02.827 [INFO] [Thread-186855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:18:02.834 [DEBUG] [Thread-186855] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:18:02.834 [DEBUG] [Thread-186855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:18:02.834 [DEBUG] [Thread-186855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:18:02.834 [DEBUG] [Thread-186855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:18:02.835 [DEBUG] [Thread-186855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:18:02.835 [DEBUG] [Thread-186855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:18:02.835 [DEBUG] [Thread-186855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:18:02.835 [DEBUG] [Thread-186855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:18:02.835 [DEBUG] [Thread-186855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:18:02.835 [DEBUG] [Thread-186855] [transport.py] [_log()] client lang: <none>
2026-02-14T14:18:02.835 [DEBUG] [Thread-186855] [transport.py] [_log()] server lang: <none>
2026-02-14T14:18:02.835 [DEBUG] [Thread-186855] [transport.py] [_log()] kex follows: False
2026-02-14T14:18:02.835 [DEBUG] [Thread-186855] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:18:02.835 [DEBUG] [Thread-186855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:18:02.835 [DEBUG] [Thread-186855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:18:02.835 [DEBUG] [Thread-186855] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:18:02.835 [DEBUG] [Thread-186855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:18:02.835 [DEBUG] [Thread-186855] [transport.py] [_log()] Compression: none
2026-02-14T14:18:02.835 [DEBUG] [Thread-186855] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:18:02.898 [DEBUG] [Thread-186855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:18:02.898 [DEBUG] [Thread-186855] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:18:02.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:18:02.899 [DEBUG] [Thread-186855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:18:02.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:18:02.954 [DEBUG] [Thread-186855] [transport.py] [_log()] userauth is OK
2026-02-14T14:18:02.954 [DEBUG] [Thread-186855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:18:02.955 [DEBUG] [Thread-186855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:18:02.955 [DEBUG] [Thread-186855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:18:02.955 [DEBUG] [Thread-186855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:18:02.977 [INFO] [Thread-186855] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:18:02.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-14T14:18:02.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:18:03.829 [DEBUG] [Thread-186855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:18:03.829 [DEBUG] [Thread-186855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:18:03.877 [DEBUG] [Thread-186855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:18:03.878 [DEBUG] [Thread-186855] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:18:03.886 [DEBUG] [Thread-186855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:18:03.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:18:03.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:18:03.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-14T14:18:03.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:18:03.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:18:03.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:18:03.922 [DEBUG] [Thread-186855] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:18:14.970 [DEBUG] [Thread-186857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:18:25.980 [DEBUG] [Thread-186858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:18:30.021 [DEBUG] [Thread-186859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:18:33.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:18:33.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:18:33.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:18:36.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 18, 23), 16.31, 33.14, 0.0, 33.59, 16.43, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:18:36.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:18:23
2026-02-14T14:18:36.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:18:36.559 [DEBUG] [Thread-186860] [transport.py] [_log()] starting thread (client mode): 0xa2dc1750
2026-02-14T14:18:36.559 [DEBUG] [Thread-186860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:18:36.575 [DEBUG] [Thread-186860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:18:36.575 [INFO] [Thread-186860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:18:36.578 [DEBUG] [Thread-186860] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:18:36.578 [DEBUG] [Thread-186860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:18:36.578 [DEBUG] [Thread-186860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:18:36.578 [DEBUG] [Thread-186860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:18:36.578 [DEBUG] [Thread-186860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:18:36.578 [DEBUG] [Thread-186860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:18:36.578 [DEBUG] [Thread-186860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:18:36.578 [DEBUG] [Thread-186860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:18:36.578 [DEBUG] [Thread-186860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:18:36.578 [DEBUG] [Thread-186860] [transport.py] [_log()] client lang: <none>
2026-02-14T14:18:36.578 [DEBUG] [Thread-186860] [transport.py] [_log()] server lang: <none>
2026-02-14T14:18:36.578 [DEBUG] [Thread-186860] [transport.py] [_log()] kex follows: False
2026-02-14T14:18:36.578 [DEBUG] [Thread-186860] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:18:36.578 [DEBUG] [Thread-186860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:18:36.578 [DEBUG] [Thread-186860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:18:36.578 [DEBUG] [Thread-186860] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:18:36.578 [DEBUG] [Thread-186860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:18:36.578 [DEBUG] [Thread-186860] [transport.py] [_log()] Compression: none
2026-02-14T14:18:36.578 [DEBUG] [Thread-186860] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:18:36.596 [DEBUG] [Thread-186860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:18:36.596 [DEBUG] [Thread-186860] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:18:36.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:18:36.597 [DEBUG] [Thread-186860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:18:36.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:18:36.599 [DEBUG] [Thread-186860] [transport.py] [_log()] userauth is OK
2026-02-14T14:18:36.599 [DEBUG] [Thread-186860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:18:36.600 [DEBUG] [Thread-186860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:18:36.600 [DEBUG] [Thread-186860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:18:36.600 [DEBUG] [Thread-186860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:18:36.619 [INFO] [Thread-186860] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:18:36.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:18:37.093 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:18:37.094 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:18:37.254 [DEBUG] [Thread-186860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:18:37.255 [DEBUG] [Thread-186860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:18:37.255 [DEBUG] [Thread-186860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:18:37.295 [DEBUG] [Thread-186860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:18:37.295 [DEBUG] [Thread-186860] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:18:37.299 [DEBUG] [Thread-186860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:18:37.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:18:37.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:18:37.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:18:37.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:18:37.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:18:37.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:18:37.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:18:37.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:18:37.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:18:37.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.512608 -999.00  +15.90  29.68     36   +1.10 1 1 1 1 1   888    0 13.38 12.06 ----- 26.1 29.7 162.0 39.8 22.2 -26.8 21.2 -27.3 22.2 -25.7 23.3 -27.1
2026-02-14T14:18:37.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:18:37.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:18:37.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.512608
2026-02-14T14:18:37.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:18:37.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:18:37.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:18:37.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:18:37.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:18:37.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:18:23', tmtdew=16.31, humidity=33.14, cloud=0.0, wind=33.59, temperature=16.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:18:09.331', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:18:37.326 [DEBUG] [Thread-186860] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:18:37.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-14T14:18:37.412 [DEBUG] [Thread-186863] [transport.py] [_log()] starting thread (client mode): 0xa2dc1990
2026-02-14T14:18:37.412 [DEBUG] [Thread-186863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:18:37.427 [DEBUG] [Thread-186863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:18:37.427 [INFO] [Thread-186863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:18:37.435 [DEBUG] [Thread-186863] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:18:37.435 [DEBUG] [Thread-186863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:18:37.435 [DEBUG] [Thread-186863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:18:37.435 [DEBUG] [Thread-186863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:18:37.435 [DEBUG] [Thread-186863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:18:37.435 [DEBUG] [Thread-186863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:18:37.435 [DEBUG] [Thread-186863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:18:37.435 [DEBUG] [Thread-186863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:18:37.435 [DEBUG] [Thread-186863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:18:37.435 [DEBUG] [Thread-186863] [transport.py] [_log()] client lang: <none>
2026-02-14T14:18:37.435 [DEBUG] [Thread-186863] [transport.py] [_log()] server lang: <none>
2026-02-14T14:18:37.435 [DEBUG] [Thread-186863] [transport.py] [_log()] kex follows: False
2026-02-14T14:18:37.435 [DEBUG] [Thread-186863] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:18:37.435 [DEBUG] [Thread-186863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:18:37.436 [DEBUG] [Thread-186863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:18:37.436 [DEBUG] [Thread-186863] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:18:37.436 [DEBUG] [Thread-186863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:18:37.436 [DEBUG] [Thread-186863] [transport.py] [_log()] Compression: none
2026-02-14T14:18:37.436 [DEBUG] [Thread-186863] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:18:37.495 [DEBUG] [Thread-186863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:18:37.496 [DEBUG] [Thread-186863] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:18:37.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:18:37.497 [DEBUG] [Thread-186863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:18:37.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:18:37.551 [DEBUG] [Thread-186863] [transport.py] [_log()] userauth is OK
2026-02-14T14:18:37.552 [DEBUG] [Thread-186863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:18:37.552 [DEBUG] [Thread-186863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:18:37.552 [DEBUG] [Thread-186863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:18:37.552 [DEBUG] [Thread-186863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:18:37.578 [INFO] [Thread-186863] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:18:37.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-14T14:18:37.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:18:38.402 [DEBUG] [Thread-186863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:18:38.402 [DEBUG] [Thread-186863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:18:38.450 [DEBUG] [Thread-186863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:18:38.450 [DEBUG] [Thread-186863] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:18:38.459 [DEBUG] [Thread-186863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:18:38.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:18:38.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-14T14:18:38.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-14T14:18:38.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:18:38.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:18:38.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:18:38.496 [DEBUG] [Thread-186863] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:18:45.059 [DEBUG] [Thread-186865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:19:00.120 [DEBUG] [Thread-186866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:19:08.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:19:08.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:19:08.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-14T14:19:10.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 18, 58), 17.35, 30.44, 0.0, 30.08, 16.6, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:19:10.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:18:58
2026-02-14T14:19:10.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:19:10.910 [DEBUG] [Thread-186867] [transport.py] [_log()] starting thread (client mode): 0xa2d231c0
2026-02-14T14:19:10.910 [DEBUG] [Thread-186867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:19:10.931 [DEBUG] [Thread-186867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:19:10.931 [INFO] [Thread-186867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:19:10.935 [DEBUG] [Thread-186867] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:19:10.935 [DEBUG] [Thread-186867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:19:10.935 [DEBUG] [Thread-186867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:19:10.935 [DEBUG] [Thread-186867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:19:10.936 [DEBUG] [Thread-186867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:19:10.936 [DEBUG] [Thread-186867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:19:10.936 [DEBUG] [Thread-186867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:19:10.936 [DEBUG] [Thread-186867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:19:10.936 [DEBUG] [Thread-186867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:19:10.936 [DEBUG] [Thread-186867] [transport.py] [_log()] client lang: <none>
2026-02-14T14:19:10.936 [DEBUG] [Thread-186867] [transport.py] [_log()] server lang: <none>
2026-02-14T14:19:10.936 [DEBUG] [Thread-186867] [transport.py] [_log()] kex follows: False
2026-02-14T14:19:10.936 [DEBUG] [Thread-186867] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:19:10.936 [DEBUG] [Thread-186867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:19:10.936 [DEBUG] [Thread-186867] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:19:10.936 [DEBUG] [Thread-186867] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:19:10.936 [DEBUG] [Thread-186867] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:19:10.936 [DEBUG] [Thread-186867] [transport.py] [_log()] Compression: none
2026-02-14T14:19:10.936 [DEBUG] [Thread-186867] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:19:10.954 [DEBUG] [Thread-186867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:19:10.955 [DEBUG] [Thread-186867] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:19:10.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:19:10.956 [DEBUG] [Thread-186867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:19:10.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:19:10.958 [DEBUG] [Thread-186867] [transport.py] [_log()] userauth is OK
2026-02-14T14:19:10.958 [DEBUG] [Thread-186867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:19:10.958 [DEBUG] [Thread-186867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:19:10.958 [DEBUG] [Thread-186867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:19:10.958 [DEBUG] [Thread-186867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:19:10.982 [INFO] [Thread-186867] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:19:10.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:19:11.659 [DEBUG] [Thread-186867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:19:11.660 [DEBUG] [Thread-186867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:19:11.660 [DEBUG] [Thread-186867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:19:11.700 [DEBUG] [Thread-186867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:19:11.700 [DEBUG] [Thread-186867] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:19:11.704 [DEBUG] [Thread-186867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:19:11.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:19:11.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:19:11.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:19:11.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:19:11.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:19:11.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:19:11.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:19:11.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:19:11.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:19:11.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.512956 -999.00  +15.70  28.72     36   +1.00 1 1 1 1 1   888    0 13.51 21.27 ----- 29.2 28.7 143.0 33.0 22.2 -27.1 21.3 -27.1 22.3 -25.4 23.3 -27.2
2026-02-14T14:19:11.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:19:11.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:19:11.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.512956
2026-02-14T14:19:11.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:19:11.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:19:11.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:19:11.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:19:11.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:19:11.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:18:58', tmtdew=17.35, humidity=30.44, cloud=0.0, wind=30.08, temperature=16.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:18:39.398', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:19:11.730 [DEBUG] [Thread-186867] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:19:11.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T14:19:11.825 [DEBUG] [Thread-186870] [transport.py] [_log()] starting thread (client mode): 0xa57598a0
2026-02-14T14:19:11.825 [DEBUG] [Thread-186870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:19:11.840 [DEBUG] [Thread-186870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:19:11.840 [INFO] [Thread-186870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:19:11.847 [DEBUG] [Thread-186870] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:19:11.848 [DEBUG] [Thread-186870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:19:11.848 [DEBUG] [Thread-186870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:19:11.848 [DEBUG] [Thread-186870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:19:11.848 [DEBUG] [Thread-186870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:19:11.848 [DEBUG] [Thread-186870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:19:11.848 [DEBUG] [Thread-186870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:19:11.848 [DEBUG] [Thread-186870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:19:11.848 [DEBUG] [Thread-186870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:19:11.848 [DEBUG] [Thread-186870] [transport.py] [_log()] client lang: <none>
2026-02-14T14:19:11.848 [DEBUG] [Thread-186870] [transport.py] [_log()] server lang: <none>
2026-02-14T14:19:11.848 [DEBUG] [Thread-186870] [transport.py] [_log()] kex follows: False
2026-02-14T14:19:11.848 [DEBUG] [Thread-186870] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:19:11.848 [DEBUG] [Thread-186870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:19:11.848 [DEBUG] [Thread-186870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:19:11.848 [DEBUG] [Thread-186870] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:19:11.848 [DEBUG] [Thread-186870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:19:11.848 [DEBUG] [Thread-186870] [transport.py] [_log()] Compression: none
2026-02-14T14:19:11.848 [DEBUG] [Thread-186870] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:19:11.910 [DEBUG] [Thread-186870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:19:11.910 [DEBUG] [Thread-186870] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:19:11.911 [DEBUG] [Thread-186870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:19:11.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:19:11.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:19:11.968 [DEBUG] [Thread-186870] [transport.py] [_log()] userauth is OK
2026-02-14T14:19:11.969 [DEBUG] [Thread-186870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:19:11.969 [DEBUG] [Thread-186870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:19:11.969 [DEBUG] [Thread-186870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:19:11.969 [DEBUG] [Thread-186870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:19:11.987 [INFO] [Thread-186870] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:19:11.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-14T14:19:11.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:19:12.815 [DEBUG] [Thread-186870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:19:12.816 [DEBUG] [Thread-186870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:19:12.864 [DEBUG] [Thread-186870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:19:12.864 [DEBUG] [Thread-186870] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:19:12.873 [DEBUG] [Thread-186870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:19:12.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:19:12.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-14T14:19:12.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-14T14:19:12.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:19:12.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:19:12.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:19:12.906 [DEBUG] [Thread-186870] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:19:15.158 [DEBUG] [Thread-186872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:19:26.017 [DEBUG] [Thread-186873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:19:30.212 [DEBUG] [Thread-186874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:19:37.234 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:19:37.235 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:19:42.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:19:42.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:19:42.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:19:44.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 19, 33), 17.3, 30.53, 0.0, 29.48, 16.48, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:19:44.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:19:33
2026-02-14T14:19:45.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:19:45.246 [DEBUG] [Thread-186875] [transport.py] [_log()] starting thread (client mode): 0xa2d234f0
2026-02-14T14:19:45.247 [DEBUG] [Thread-186875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:19:45.248 [DEBUG] [Thread-186876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:19:45.266 [DEBUG] [Thread-186875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:19:45.266 [INFO] [Thread-186875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:19:45.269 [DEBUG] [Thread-186875] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:19:45.269 [DEBUG] [Thread-186875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:19:45.269 [DEBUG] [Thread-186875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:19:45.269 [DEBUG] [Thread-186875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:19:45.269 [DEBUG] [Thread-186875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:19:45.269 [DEBUG] [Thread-186875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:19:45.270 [DEBUG] [Thread-186875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:19:45.270 [DEBUG] [Thread-186875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:19:45.270 [DEBUG] [Thread-186875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:19:45.270 [DEBUG] [Thread-186875] [transport.py] [_log()] client lang: <none>
2026-02-14T14:19:45.270 [DEBUG] [Thread-186875] [transport.py] [_log()] server lang: <none>
2026-02-14T14:19:45.270 [DEBUG] [Thread-186875] [transport.py] [_log()] kex follows: False
2026-02-14T14:19:45.270 [DEBUG] [Thread-186875] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:19:45.270 [DEBUG] [Thread-186875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:19:45.270 [DEBUG] [Thread-186875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:19:45.270 [DEBUG] [Thread-186875] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:19:45.270 [DEBUG] [Thread-186875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:19:45.270 [DEBUG] [Thread-186875] [transport.py] [_log()] Compression: none
2026-02-14T14:19:45.270 [DEBUG] [Thread-186875] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:19:45.283 [DEBUG] [Thread-186875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:19:45.284 [DEBUG] [Thread-186875] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:19:45.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:19:45.285 [DEBUG] [Thread-186875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:19:45.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:19:45.287 [DEBUG] [Thread-186875] [transport.py] [_log()] userauth is OK
2026-02-14T14:19:45.287 [DEBUG] [Thread-186875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:19:45.287 [DEBUG] [Thread-186875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:19:45.287 [DEBUG] [Thread-186875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:19:45.287 [DEBUG] [Thread-186875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:19:45.306 [INFO] [Thread-186875] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:19:45.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:19:45.903 [DEBUG] [Thread-186875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:19:45.904 [DEBUG] [Thread-186875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:19:45.904 [DEBUG] [Thread-186875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:19:45.944 [DEBUG] [Thread-186875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:19:45.945 [DEBUG] [Thread-186875] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:19:45.948 [DEBUG] [Thread-186875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:19:45.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:19:45.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:19:45.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:19:45.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:19:45.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:19:45.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:19:45.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:19:45.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:19:45.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:19:45.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.513303 -999.00  +15.60  27.31     38   +1.30 1 1 1 1 1   888    0 13.84 31.18 ----- 24.6 27.3 160.2 35.4 22.1 -28.3 21.2 -25.8 22.1 -27.0 23.3 -28.7
2026-02-14T14:19:45.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:19:45.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:19:45.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.513303
2026-02-14T14:19:45.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:19:45.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:19:45.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:19:45.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:19:45.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:19:45.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:19:33', tmtdew=17.3, humidity=30.53, cloud=0.0, wind=29.48, temperature=16.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:19:09.379', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:19:45.975 [DEBUG] [Thread-186875] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:19:46.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-14T14:19:46.074 [DEBUG] [Thread-186879] [transport.py] [_log()] starting thread (client mode): 0xa2d23520
2026-02-14T14:19:46.074 [DEBUG] [Thread-186879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:19:46.089 [DEBUG] [Thread-186879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:19:46.089 [INFO] [Thread-186879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:19:46.096 [DEBUG] [Thread-186879] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:19:46.096 [DEBUG] [Thread-186879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:19:46.096 [DEBUG] [Thread-186879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:19:46.097 [DEBUG] [Thread-186879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:19:46.097 [DEBUG] [Thread-186879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:19:46.097 [DEBUG] [Thread-186879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:19:46.097 [DEBUG] [Thread-186879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:19:46.097 [DEBUG] [Thread-186879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:19:46.097 [DEBUG] [Thread-186879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:19:46.097 [DEBUG] [Thread-186879] [transport.py] [_log()] client lang: <none>
2026-02-14T14:19:46.097 [DEBUG] [Thread-186879] [transport.py] [_log()] server lang: <none>
2026-02-14T14:19:46.098 [DEBUG] [Thread-186879] [transport.py] [_log()] kex follows: False
2026-02-14T14:19:46.098 [DEBUG] [Thread-186879] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:19:46.098 [DEBUG] [Thread-186879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:19:46.098 [DEBUG] [Thread-186879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:19:46.098 [DEBUG] [Thread-186879] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:19:46.098 [DEBUG] [Thread-186879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:19:46.098 [DEBUG] [Thread-186879] [transport.py] [_log()] Compression: none
2026-02-14T14:19:46.098 [DEBUG] [Thread-186879] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:19:46.156 [DEBUG] [Thread-186879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:19:46.157 [DEBUG] [Thread-186879] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:19:46.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:19:46.158 [DEBUG] [Thread-186879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:19:46.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:19:46.213 [DEBUG] [Thread-186879] [transport.py] [_log()] userauth is OK
2026-02-14T14:19:46.213 [DEBUG] [Thread-186879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:19:46.213 [DEBUG] [Thread-186879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:19:46.213 [DEBUG] [Thread-186879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:19:46.213 [DEBUG] [Thread-186879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:19:46.231 [INFO] [Thread-186879] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:19:46.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-14T14:19:46.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:19:47.100 [DEBUG] [Thread-186879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:19:47.100 [DEBUG] [Thread-186879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:19:47.148 [DEBUG] [Thread-186879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:19:47.149 [DEBUG] [Thread-186879] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:19:47.158 [DEBUG] [Thread-186879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:19:47.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:19:47.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:19:47.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-14T14:19:47.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:19:47.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:19:47.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:19:47.194 [DEBUG] [Thread-186879] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:20:00.281 [DEBUG] [Thread-186881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:20:15.330 [DEBUG] [Thread-186882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:20:17.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:20:17.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:20:17.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-14T14:20:19.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 20, 8), 17.13, 30.89, 0.0, 26.87, 16.45, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:20:19.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:20:08
2026-02-14T14:20:19.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:20:19.970 [DEBUG] [Thread-186883] [transport.py] [_log()] starting thread (client mode): 0xa575b0a0
2026-02-14T14:20:19.970 [DEBUG] [Thread-186883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:20:19.989 [DEBUG] [Thread-186883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:20:19.989 [INFO] [Thread-186883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:20:19.991 [DEBUG] [Thread-186883] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:20:19.991 [DEBUG] [Thread-186883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:20:19.991 [DEBUG] [Thread-186883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:20:19.991 [DEBUG] [Thread-186883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:20:19.991 [DEBUG] [Thread-186883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:20:19.991 [DEBUG] [Thread-186883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:20:19.991 [DEBUG] [Thread-186883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:20:19.991 [DEBUG] [Thread-186883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:20:19.991 [DEBUG] [Thread-186883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:20:19.991 [DEBUG] [Thread-186883] [transport.py] [_log()] client lang: <none>
2026-02-14T14:20:19.991 [DEBUG] [Thread-186883] [transport.py] [_log()] server lang: <none>
2026-02-14T14:20:19.991 [DEBUG] [Thread-186883] [transport.py] [_log()] kex follows: False
2026-02-14T14:20:19.991 [DEBUG] [Thread-186883] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:20:19.992 [DEBUG] [Thread-186883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:20:19.992 [DEBUG] [Thread-186883] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:20:19.992 [DEBUG] [Thread-186883] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:20:19.992 [DEBUG] [Thread-186883] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:20:19.992 [DEBUG] [Thread-186883] [transport.py] [_log()] Compression: none
2026-02-14T14:20:19.992 [DEBUG] [Thread-186883] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:20:20.008 [DEBUG] [Thread-186883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:20:20.009 [DEBUG] [Thread-186883] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:20:20.009 [DEBUG] [Thread-186883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:20:20.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:20:20.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:20:20.011 [DEBUG] [Thread-186883] [transport.py] [_log()] userauth is OK
2026-02-14T14:20:20.011 [DEBUG] [Thread-186883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:20:20.011 [DEBUG] [Thread-186883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:20:20.011 [DEBUG] [Thread-186883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:20:20.011 [DEBUG] [Thread-186883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:20:20.035 [INFO] [Thread-186883] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:20:20.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:20:20.600 [DEBUG] [Thread-186883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:20:20.600 [DEBUG] [Thread-186883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:20:20.600 [DEBUG] [Thread-186883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:20:20.641 [DEBUG] [Thread-186883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:20:20.642 [DEBUG] [Thread-186883] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:20:20.644 [DEBUG] [Thread-186883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:20:20.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:20:20.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:20:20.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:20:20.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:20:20.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:20:20.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:20:20.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:20:20.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:20:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:20:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.513650 -999.00  +15.90  17.60     40   +2.30 1 1 1 1 1   888    0 14.04 39.33 ----- 25.1 17.6 160.0 35.2 22.2 -26.2 21.1 -25.8 22.3 -24.4 23.4 -25.7
2026-02-14T14:20:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:20:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:20:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.513650
2026-02-14T14:20:20.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:20:20.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:20:20.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:20:20.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:20:20.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:20:20.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:20:08', tmtdew=17.13, humidity=30.89, cloud=0.0, wind=26.87, temperature=16.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:19:39.360', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:20:20.669 [DEBUG] [Thread-186883] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:20:20.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-14T14:20:20.766 [DEBUG] [Thread-186886] [transport.py] [_log()] starting thread (client mode): 0xa2d10370
2026-02-14T14:20:20.766 [DEBUG] [Thread-186886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:20:20.780 [DEBUG] [Thread-186886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:20:20.780 [INFO] [Thread-186886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:20:20.787 [DEBUG] [Thread-186886] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:20:20.787 [DEBUG] [Thread-186886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:20:20.788 [DEBUG] [Thread-186886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:20:20.788 [DEBUG] [Thread-186886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:20:20.788 [DEBUG] [Thread-186886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:20:20.788 [DEBUG] [Thread-186886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:20:20.788 [DEBUG] [Thread-186886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:20:20.788 [DEBUG] [Thread-186886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:20:20.788 [DEBUG] [Thread-186886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:20:20.788 [DEBUG] [Thread-186886] [transport.py] [_log()] client lang: <none>
2026-02-14T14:20:20.788 [DEBUG] [Thread-186886] [transport.py] [_log()] server lang: <none>
2026-02-14T14:20:20.788 [DEBUG] [Thread-186886] [transport.py] [_log()] kex follows: False
2026-02-14T14:20:20.789 [DEBUG] [Thread-186886] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:20:20.789 [DEBUG] [Thread-186886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:20:20.789 [DEBUG] [Thread-186886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:20:20.789 [DEBUG] [Thread-186886] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:20:20.789 [DEBUG] [Thread-186886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:20:20.789 [DEBUG] [Thread-186886] [transport.py] [_log()] Compression: none
2026-02-14T14:20:20.789 [DEBUG] [Thread-186886] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:20:20.844 [DEBUG] [Thread-186886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:20:20.844 [DEBUG] [Thread-186886] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:20:20.845 [DEBUG] [Thread-186886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:20:20.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:20:20.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:20:20.900 [DEBUG] [Thread-186886] [transport.py] [_log()] userauth is OK
2026-02-14T14:20:20.901 [DEBUG] [Thread-186886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:20:20.901 [DEBUG] [Thread-186886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:20:20.901 [DEBUG] [Thread-186886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:20:20.901 [DEBUG] [Thread-186886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:20:20.923 [INFO] [Thread-186886] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:20:20.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-14T14:20:20.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:20:21.716 [DEBUG] [Thread-186886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:20:21.716 [DEBUG] [Thread-186886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:20:21.764 [DEBUG] [Thread-186886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:20:21.764 [DEBUG] [Thread-186886] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:20:21.773 [DEBUG] [Thread-186886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:20:21.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:20:21.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-14T14:20:21.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-14T14:20:21.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:20:21.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:20:21.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:20:21.806 [DEBUG] [Thread-186886] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:20:26.045 [DEBUG] [Thread-186888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:20:30.362 [DEBUG] [Thread-186889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:20:37.378 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:20:37.380 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:20:45.415 [DEBUG] [Thread-186890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:20:51.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:20:51.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:20:51.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:20:53.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 20, 45), 15.62, 34.79, 0.0, 32.5, 15.98, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:20:53.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:20:45
2026-02-14T14:20:54.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:20:54.176 [DEBUG] [Thread-186891] [transport.py] [_log()] starting thread (client mode): 0xa2d11150
2026-02-14T14:20:54.176 [DEBUG] [Thread-186891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:20:54.195 [DEBUG] [Thread-186891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:20:54.195 [INFO] [Thread-186891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:20:54.198 [DEBUG] [Thread-186891] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:20:54.198 [DEBUG] [Thread-186891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:20:54.198 [DEBUG] [Thread-186891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:20:54.198 [DEBUG] [Thread-186891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:20:54.199 [DEBUG] [Thread-186891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:20:54.199 [DEBUG] [Thread-186891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:20:54.199 [DEBUG] [Thread-186891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:20:54.199 [DEBUG] [Thread-186891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:20:54.199 [DEBUG] [Thread-186891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:20:54.199 [DEBUG] [Thread-186891] [transport.py] [_log()] client lang: <none>
2026-02-14T14:20:54.199 [DEBUG] [Thread-186891] [transport.py] [_log()] server lang: <none>
2026-02-14T14:20:54.199 [DEBUG] [Thread-186891] [transport.py] [_log()] kex follows: False
2026-02-14T14:20:54.199 [DEBUG] [Thread-186891] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:20:54.199 [DEBUG] [Thread-186891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:20:54.199 [DEBUG] [Thread-186891] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:20:54.199 [DEBUG] [Thread-186891] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:20:54.199 [DEBUG] [Thread-186891] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:20:54.199 [DEBUG] [Thread-186891] [transport.py] [_log()] Compression: none
2026-02-14T14:20:54.199 [DEBUG] [Thread-186891] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:20:54.214 [DEBUG] [Thread-186891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:20:54.214 [DEBUG] [Thread-186891] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:20:54.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:20:54.215 [DEBUG] [Thread-186891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:20:54.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:20:54.217 [DEBUG] [Thread-186891] [transport.py] [_log()] userauth is OK
2026-02-14T14:20:54.218 [DEBUG] [Thread-186891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:20:54.218 [DEBUG] [Thread-186891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:20:54.218 [DEBUG] [Thread-186891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:20:54.218 [DEBUG] [Thread-186891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:20:54.237 [INFO] [Thread-186891] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:20:54.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:20:54.877 [DEBUG] [Thread-186891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:20:54.877 [DEBUG] [Thread-186891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:20:54.878 [DEBUG] [Thread-186891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:20:54.918 [DEBUG] [Thread-186891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:20:54.919 [DEBUG] [Thread-186891] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:20:54.922 [DEBUG] [Thread-186891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:20:54.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:20:54.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:20:54.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:20:54.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:20:54.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:20:54.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:20:54.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:20:54.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:20:54.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:20:54.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.514344 -999.00  +16.00  18.63     40   +2.60 1 1 1 1 1   888    0 14.10 39.02 ----- 25.1 18.6 184.4 30.0 22.1 -27.7 20.7 -30.7 22.1 -25.6 23.2 -27.2
2026-02-14T14:20:54.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:20:54.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:20:54.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.514344
2026-02-14T14:20:54.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:20:54.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:20:54.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:20:54.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:20:54.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:20:54.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:20:45', tmtdew=15.62, humidity=34.79, cloud=0.0, wind=32.5, temperature=15.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:20:39.322', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:20:54.949 [DEBUG] [Thread-186891] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:20:55.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-14T14:20:55.049 [DEBUG] [Thread-186894] [transport.py] [_log()] starting thread (client mode): 0xa2dc36a0
2026-02-14T14:20:55.049 [DEBUG] [Thread-186894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:20:55.063 [DEBUG] [Thread-186894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:20:55.063 [INFO] [Thread-186894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:20:55.070 [DEBUG] [Thread-186894] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:20:55.070 [DEBUG] [Thread-186894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:20:55.071 [DEBUG] [Thread-186894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:20:55.071 [DEBUG] [Thread-186894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:20:55.071 [DEBUG] [Thread-186894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:20:55.071 [DEBUG] [Thread-186894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:20:55.071 [DEBUG] [Thread-186894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:20:55.071 [DEBUG] [Thread-186894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:20:55.071 [DEBUG] [Thread-186894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:20:55.071 [DEBUG] [Thread-186894] [transport.py] [_log()] client lang: <none>
2026-02-14T14:20:55.071 [DEBUG] [Thread-186894] [transport.py] [_log()] server lang: <none>
2026-02-14T14:20:55.071 [DEBUG] [Thread-186894] [transport.py] [_log()] kex follows: False
2026-02-14T14:20:55.071 [DEBUG] [Thread-186894] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:20:55.071 [DEBUG] [Thread-186894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:20:55.071 [DEBUG] [Thread-186894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:20:55.071 [DEBUG] [Thread-186894] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:20:55.071 [DEBUG] [Thread-186894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:20:55.071 [DEBUG] [Thread-186894] [transport.py] [_log()] Compression: none
2026-02-14T14:20:55.071 [DEBUG] [Thread-186894] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:20:55.134 [DEBUG] [Thread-186894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:20:55.134 [DEBUG] [Thread-186894] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:20:55.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:20:55.136 [DEBUG] [Thread-186894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:20:55.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:20:55.190 [DEBUG] [Thread-186894] [transport.py] [_log()] userauth is OK
2026-02-14T14:20:55.190 [DEBUG] [Thread-186894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:20:55.190 [DEBUG] [Thread-186894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:20:55.190 [DEBUG] [Thread-186894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:20:55.190 [DEBUG] [Thread-186894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:20:55.209 [INFO] [Thread-186894] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:20:55.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T14:20:55.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:20:56.000 [DEBUG] [Thread-186894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:20:56.001 [DEBUG] [Thread-186894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:20:56.048 [DEBUG] [Thread-186894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:20:56.048 [DEBUG] [Thread-186894] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:20:56.058 [DEBUG] [Thread-186894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:20:56.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:20:56.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-14T14:20:56.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-14T14:20:56.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:20:56.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:20:56.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:20:56.094 [DEBUG] [Thread-186894] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:21:00.452 [DEBUG] [Thread-186896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:21:15.511 [DEBUG] [Thread-186897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:21:26.077 [DEBUG] [Thread-186898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:21:26.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:21:26.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:21:26.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:21:28.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 21, 20), 15.7, 34.67, 0.0, 27.95, 16.18, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:21:28.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:21:20
2026-02-14T14:21:28.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:21:28.521 [DEBUG] [Thread-186899] [transport.py] [_log()] starting thread (client mode): 0xa57598a0
2026-02-14T14:21:28.521 [DEBUG] [Thread-186899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:21:28.542 [DEBUG] [Thread-186899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:21:28.543 [INFO] [Thread-186899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:21:28.546 [DEBUG] [Thread-186899] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:21:28.546 [DEBUG] [Thread-186899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:21:28.546 [DEBUG] [Thread-186899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:21:28.546 [DEBUG] [Thread-186899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:21:28.546 [DEBUG] [Thread-186899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:21:28.546 [DEBUG] [Thread-186899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:21:28.547 [DEBUG] [Thread-186899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:21:28.547 [DEBUG] [Thread-186899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:21:28.547 [DEBUG] [Thread-186899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:21:28.547 [DEBUG] [Thread-186899] [transport.py] [_log()] client lang: <none>
2026-02-14T14:21:28.547 [DEBUG] [Thread-186899] [transport.py] [_log()] server lang: <none>
2026-02-14T14:21:28.547 [DEBUG] [Thread-186899] [transport.py] [_log()] kex follows: False
2026-02-14T14:21:28.547 [DEBUG] [Thread-186899] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:21:28.547 [DEBUG] [Thread-186899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:21:28.547 [DEBUG] [Thread-186899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:21:28.547 [DEBUG] [Thread-186899] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:21:28.548 [DEBUG] [Thread-186899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:21:28.548 [DEBUG] [Thread-186899] [transport.py] [_log()] Compression: none
2026-02-14T14:21:28.548 [DEBUG] [Thread-186899] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:21:28.568 [DEBUG] [Thread-186899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:21:28.569 [DEBUG] [Thread-186899] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:21:28.569 [DEBUG] [Thread-186899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:21:28.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:21:28.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:21:28.571 [DEBUG] [Thread-186899] [transport.py] [_log()] userauth is OK
2026-02-14T14:21:28.572 [DEBUG] [Thread-186899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:21:28.572 [DEBUG] [Thread-186899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:21:28.572 [DEBUG] [Thread-186899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:21:28.572 [DEBUG] [Thread-186899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:21:28.595 [INFO] [Thread-186899] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:21:28.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:21:29.261 [DEBUG] [Thread-186899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:21:29.261 [DEBUG] [Thread-186899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:21:29.261 [DEBUG] [Thread-186899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:21:29.301 [DEBUG] [Thread-186899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:21:29.302 [DEBUG] [Thread-186899] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:21:29.305 [DEBUG] [Thread-186899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:21:29.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:21:29.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:21:29.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:21:29.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:21:29.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:21:29.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:21:29.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:21:29.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:21:29.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:21:29.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.514692 -999.00  +16.20  21.67     39   +2.50 1 1 1 1 1   888    0 14.14 38.25 ----- 28.4 21.7 193.3 28.6 22.0 -27.4 20.9 -26.7 22.1 -25.9 23.2 -27.6
2026-02-14T14:21:29.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:21:29.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:21:29.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.514692
2026-02-14T14:21:29.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:21:29.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:21:29.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:21:29.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:21:29.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:21:29.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:21:20', tmtdew=15.7, humidity=34.67, cloud=0.0, wind=27.95, temperature=16.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:21:09.389', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:21:29.332 [DEBUG] [Thread-186899] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:21:29.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-14T14:21:29.428 [DEBUG] [Thread-186902] [transport.py] [_log()] starting thread (client mode): 0xa2d10e80
2026-02-14T14:21:29.428 [DEBUG] [Thread-186902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:21:29.443 [DEBUG] [Thread-186902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:21:29.443 [INFO] [Thread-186902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:21:29.451 [DEBUG] [Thread-186902] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:21:29.451 [DEBUG] [Thread-186902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:21:29.451 [DEBUG] [Thread-186902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:21:29.451 [DEBUG] [Thread-186902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:21:29.451 [DEBUG] [Thread-186902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:21:29.451 [DEBUG] [Thread-186902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:21:29.451 [DEBUG] [Thread-186902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:21:29.451 [DEBUG] [Thread-186902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:21:29.451 [DEBUG] [Thread-186902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:21:29.451 [DEBUG] [Thread-186902] [transport.py] [_log()] client lang: <none>
2026-02-14T14:21:29.451 [DEBUG] [Thread-186902] [transport.py] [_log()] server lang: <none>
2026-02-14T14:21:29.451 [DEBUG] [Thread-186902] [transport.py] [_log()] kex follows: False
2026-02-14T14:21:29.451 [DEBUG] [Thread-186902] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:21:29.451 [DEBUG] [Thread-186902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:21:29.451 [DEBUG] [Thread-186902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:21:29.452 [DEBUG] [Thread-186902] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:21:29.452 [DEBUG] [Thread-186902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:21:29.452 [DEBUG] [Thread-186902] [transport.py] [_log()] Compression: none
2026-02-14T14:21:29.452 [DEBUG] [Thread-186902] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:21:29.511 [DEBUG] [Thread-186902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:21:29.511 [DEBUG] [Thread-186902] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:21:29.512 [DEBUG] [Thread-186902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:21:29.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:21:29.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:21:29.566 [DEBUG] [Thread-186902] [transport.py] [_log()] userauth is OK
2026-02-14T14:21:29.567 [DEBUG] [Thread-186902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:21:29.567 [DEBUG] [Thread-186902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:21:29.567 [DEBUG] [Thread-186902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:21:29.567 [DEBUG] [Thread-186902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:21:29.585 [INFO] [Thread-186902] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:21:29.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-14T14:21:29.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:21:30.398 [DEBUG] [Thread-186902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:21:30.398 [DEBUG] [Thread-186902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:21:30.446 [DEBUG] [Thread-186902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:21:30.446 [DEBUG] [Thread-186902] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:21:30.455 [DEBUG] [Thread-186902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:21:30.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:21:30.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-14T14:21:30.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:21:30.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:21:30.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:21:30.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:21:30.492 [DEBUG] [Thread-186902] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:21:30.546 [DEBUG] [Thread-186904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:21:37.519 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:21:37.521 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:21:45.597 [DEBUG] [Thread-186905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:22:00.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:22:00.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:22:00.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-14T14:22:00.639 [DEBUG] [Thread-186906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:22:02.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 21, 20), 15.7, 34.67, 0.0, 27.95, 16.18, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:22:02.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:21:20
2026-02-14T14:22:02.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:22:03.017 [DEBUG] [Thread-186907] [transport.py] [_log()] starting thread (client mode): 0xa2dc34f0
2026-02-14T14:22:03.017 [DEBUG] [Thread-186907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:22:03.036 [DEBUG] [Thread-186907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:22:03.036 [INFO] [Thread-186907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:22:03.040 [DEBUG] [Thread-186907] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:22:03.040 [DEBUG] [Thread-186907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:22:03.040 [DEBUG] [Thread-186907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:22:03.040 [DEBUG] [Thread-186907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:22:03.040 [DEBUG] [Thread-186907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:22:03.040 [DEBUG] [Thread-186907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:22:03.040 [DEBUG] [Thread-186907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:22:03.040 [DEBUG] [Thread-186907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:22:03.040 [DEBUG] [Thread-186907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:22:03.040 [DEBUG] [Thread-186907] [transport.py] [_log()] client lang: <none>
2026-02-14T14:22:03.040 [DEBUG] [Thread-186907] [transport.py] [_log()] server lang: <none>
2026-02-14T14:22:03.040 [DEBUG] [Thread-186907] [transport.py] [_log()] kex follows: False
2026-02-14T14:22:03.040 [DEBUG] [Thread-186907] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:22:03.040 [DEBUG] [Thread-186907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:22:03.040 [DEBUG] [Thread-186907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:22:03.040 [DEBUG] [Thread-186907] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:22:03.040 [DEBUG] [Thread-186907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:22:03.040 [DEBUG] [Thread-186907] [transport.py] [_log()] Compression: none
2026-02-14T14:22:03.040 [DEBUG] [Thread-186907] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:22:03.056 [DEBUG] [Thread-186907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:22:03.057 [DEBUG] [Thread-186907] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:22:03.057 [DEBUG] [Thread-186907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:22:03.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:22:03.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:22:03.058 [DEBUG] [Thread-186907] [transport.py] [_log()] userauth is OK
2026-02-14T14:22:03.058 [DEBUG] [Thread-186907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:22:03.058 [DEBUG] [Thread-186907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:22:03.058 [DEBUG] [Thread-186907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:22:03.058 [DEBUG] [Thread-186907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:22:03.072 [INFO] [Thread-186907] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:22:03.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:22:03.693 [DEBUG] [Thread-186907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:22:03.693 [DEBUG] [Thread-186907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:22:03.694 [DEBUG] [Thread-186907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:22:03.734 [DEBUG] [Thread-186907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:22:03.735 [DEBUG] [Thread-186907] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:22:03.738 [DEBUG] [Thread-186907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:22:03.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:22:03.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:22:03.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:22:03.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:22:03.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:22:03.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:22:03.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:22:03.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:22:03.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:22:03.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.515039 -999.00  +16.20  25.20     39   +2.50 1 1 1 1 1   888    0 14.18 41.14 ----- 23.4 25.2 208.5 33.0 21.9 -27.5 20.8 -28.0 22.1 -25.0 23.1 -27.0
2026-02-14T14:22:03.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:22:03.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:22:03.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.515039
2026-02-14T14:22:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:22:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:22:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:22:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:22:03.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:22:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:21:20', tmtdew=15.7, humidity=34.67, cloud=0.0, wind=27.95, temperature=16.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:21:39.370', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:22:03.765 [DEBUG] [Thread-186907] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:22:03.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-14T14:22:03.859 [DEBUG] [Thread-186910] [transport.py] [_log()] starting thread (client mode): 0xa2de9570
2026-02-14T14:22:03.859 [DEBUG] [Thread-186910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:22:03.873 [DEBUG] [Thread-186910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:22:03.873 [INFO] [Thread-186910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:22:03.880 [DEBUG] [Thread-186910] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:22:03.881 [DEBUG] [Thread-186910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:22:03.881 [DEBUG] [Thread-186910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:22:03.881 [DEBUG] [Thread-186910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:22:03.881 [DEBUG] [Thread-186910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:22:03.881 [DEBUG] [Thread-186910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:22:03.881 [DEBUG] [Thread-186910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:22:03.881 [DEBUG] [Thread-186910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:22:03.881 [DEBUG] [Thread-186910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:22:03.882 [DEBUG] [Thread-186910] [transport.py] [_log()] client lang: <none>
2026-02-14T14:22:03.882 [DEBUG] [Thread-186910] [transport.py] [_log()] server lang: <none>
2026-02-14T14:22:03.882 [DEBUG] [Thread-186910] [transport.py] [_log()] kex follows: False
2026-02-14T14:22:03.882 [DEBUG] [Thread-186910] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:22:03.882 [DEBUG] [Thread-186910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:22:03.882 [DEBUG] [Thread-186910] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:22:03.882 [DEBUG] [Thread-186910] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:22:03.882 [DEBUG] [Thread-186910] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:22:03.882 [DEBUG] [Thread-186910] [transport.py] [_log()] Compression: none
2026-02-14T14:22:03.882 [DEBUG] [Thread-186910] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:22:03.943 [DEBUG] [Thread-186910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:22:03.943 [DEBUG] [Thread-186910] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:22:03.944 [DEBUG] [Thread-186910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:22:03.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:22:03.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:22:03.999 [DEBUG] [Thread-186910] [transport.py] [_log()] userauth is OK
2026-02-14T14:22:03.999 [DEBUG] [Thread-186910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:22:04.000 [DEBUG] [Thread-186910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:22:04.000 [DEBUG] [Thread-186910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:22:04.000 [DEBUG] [Thread-186910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:22:04.019 [INFO] [Thread-186910] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:22:04.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-14T14:22:04.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:22:04.849 [DEBUG] [Thread-186910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:22:04.849 [DEBUG] [Thread-186910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:22:04.897 [DEBUG] [Thread-186910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:22:04.897 [DEBUG] [Thread-186910] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:22:04.907 [DEBUG] [Thread-186910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:22:04.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:22:04.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-14T14:22:04.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-14T14:22:04.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:22:04.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:22:04.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:22:04.948 [DEBUG] [Thread-186910] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:22:15.674 [DEBUG] [Thread-186912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:22:26.113 [DEBUG] [Thread-186913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:22:30.721 [DEBUG] [Thread-186914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:22:34.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:22:34.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:22: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-14T14:22:37.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 21, 55), 15.58, 34.67, 0.0, 29.89, 15.91, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:22:37.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:21:55
2026-02-14T14:22:37.662 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:22:37.663 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:22:37.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:22:37.893 [DEBUG] [Thread-186915] [transport.py] [_log()] starting thread (client mode): 0xa2debd90
2026-02-14T14:22:37.893 [DEBUG] [Thread-186915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:22:37.903 [DEBUG] [Thread-186915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:22:37.903 [INFO] [Thread-186915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:22:37.904 [DEBUG] [Thread-186915] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:22:37.904 [DEBUG] [Thread-186915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:22:37.904 [DEBUG] [Thread-186915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:22:37.904 [DEBUG] [Thread-186915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:22:37.904 [DEBUG] [Thread-186915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:22:37.904 [DEBUG] [Thread-186915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:22:37.904 [DEBUG] [Thread-186915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:22:37.904 [DEBUG] [Thread-186915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:22:37.904 [DEBUG] [Thread-186915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:22:37.904 [DEBUG] [Thread-186915] [transport.py] [_log()] client lang: <none>
2026-02-14T14:22:37.904 [DEBUG] [Thread-186915] [transport.py] [_log()] server lang: <none>
2026-02-14T14:22:37.904 [DEBUG] [Thread-186915] [transport.py] [_log()] kex follows: False
2026-02-14T14:22:37.904 [DEBUG] [Thread-186915] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:22:37.904 [DEBUG] [Thread-186915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:22:37.904 [DEBUG] [Thread-186915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:22:37.904 [DEBUG] [Thread-186915] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:22:37.904 [DEBUG] [Thread-186915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:22:37.904 [DEBUG] [Thread-186915] [transport.py] [_log()] Compression: none
2026-02-14T14:22:37.904 [DEBUG] [Thread-186915] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:22:37.911 [DEBUG] [Thread-186915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:22:37.911 [DEBUG] [Thread-186915] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:22:37.912 [DEBUG] [Thread-186915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:22:37.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:22:37.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:22:37.912 [DEBUG] [Thread-186915] [transport.py] [_log()] userauth is OK
2026-02-14T14:22:37.912 [DEBUG] [Thread-186915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:22:37.913 [DEBUG] [Thread-186915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:22:37.913 [DEBUG] [Thread-186915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:22:37.913 [DEBUG] [Thread-186915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:22:37.924 [INFO] [Thread-186915] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:22:37.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:22:38.556 [DEBUG] [Thread-186915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:22:38.556 [DEBUG] [Thread-186915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:22:38.557 [DEBUG] [Thread-186915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:22:38.597 [DEBUG] [Thread-186915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:22:38.598 [DEBUG] [Thread-186915] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:22:38.602 [DEBUG] [Thread-186915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:22:38.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:22:38.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:22:38.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:22:38.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:22:38.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:22:38.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:22:38.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:22:38.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:22:38.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:22:38.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.515386 -999.00  +16.00  16.81     39   +2.40 1 1 1 1 1   888    0 14.25 42.43 ----- 18.8 16.8 180.6 36.0 22.0 -26.1 20.7 -28.0 22.1 -24.0 23.2 -25.6
2026-02-14T14:22:38.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:22:38.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:22:38.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.515386
2026-02-14T14:22:38.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:22:38.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:22:38.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:22:38.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:22:38.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:22:38.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:21:55', tmtdew=15.58, humidity=34.67, cloud=0.0, wind=29.89, temperature=15.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:22:09.350', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:22:38.628 [DEBUG] [Thread-186915] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:22:38.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-14T14:22:38.725 [DEBUG] [Thread-186918] [transport.py] [_log()] starting thread (client mode): 0xa2d221a0
2026-02-14T14:22:38.725 [DEBUG] [Thread-186918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:22:38.740 [DEBUG] [Thread-186918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:22:38.740 [INFO] [Thread-186918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:22:38.748 [DEBUG] [Thread-186918] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:22:38.748 [DEBUG] [Thread-186918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:22:38.749 [DEBUG] [Thread-186918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:22:38.749 [DEBUG] [Thread-186918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:22:38.749 [DEBUG] [Thread-186918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:22:38.749 [DEBUG] [Thread-186918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:22:38.749 [DEBUG] [Thread-186918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:22:38.749 [DEBUG] [Thread-186918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:22:38.749 [DEBUG] [Thread-186918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:22:38.749 [DEBUG] [Thread-186918] [transport.py] [_log()] client lang: <none>
2026-02-14T14:22:38.749 [DEBUG] [Thread-186918] [transport.py] [_log()] server lang: <none>
2026-02-14T14:22:38.749 [DEBUG] [Thread-186918] [transport.py] [_log()] kex follows: False
2026-02-14T14:22:38.749 [DEBUG] [Thread-186918] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:22:38.749 [DEBUG] [Thread-186918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:22:38.749 [DEBUG] [Thread-186918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:22:38.749 [DEBUG] [Thread-186918] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:22:38.749 [DEBUG] [Thread-186918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:22:38.749 [DEBUG] [Thread-186918] [transport.py] [_log()] Compression: none
2026-02-14T14:22:38.749 [DEBUG] [Thread-186918] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:22:38.807 [DEBUG] [Thread-186918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:22:38.808 [DEBUG] [Thread-186918] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:22:38.809 [DEBUG] [Thread-186918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:22:38.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:22:38.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:22:38.863 [DEBUG] [Thread-186918] [transport.py] [_log()] userauth is OK
2026-02-14T14:22:38.864 [DEBUG] [Thread-186918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:22:38.864 [DEBUG] [Thread-186918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:22:38.864 [DEBUG] [Thread-186918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:22:38.864 [DEBUG] [Thread-186918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:22:38.882 [INFO] [Thread-186918] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:22:38.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-14T14:22:38.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:22:39.773 [DEBUG] [Thread-186918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:22:39.774 [DEBUG] [Thread-186918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:22:39.821 [DEBUG] [Thread-186918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:22:39.822 [DEBUG] [Thread-186918] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:22:39.831 [DEBUG] [Thread-186918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:22:39.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:22:39.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:22:39.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:22:39.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:22:39.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:22:39.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:22:39.867 [DEBUG] [Thread-186918] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:22:45.767 [DEBUG] [Thread-186920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:23:00.820 [DEBUG] [Thread-186921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:23:09.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:23:09.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:23:09.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:23:12.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 22, 30), 15.59, 34.66, 0.0, 32.62, 15.93, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:23:12.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:22:30
2026-02-14T14:23:12.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:23:12.733 [DEBUG] [Thread-186922] [transport.py] [_log()] starting thread (client mode): 0xa2dc3e80
2026-02-14T14:23:12.733 [DEBUG] [Thread-186922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:23:12.753 [DEBUG] [Thread-186922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:23:12.753 [INFO] [Thread-186922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:23:12.756 [DEBUG] [Thread-186922] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:23:12.756 [DEBUG] [Thread-186922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:23:12.756 [DEBUG] [Thread-186922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:23:12.756 [DEBUG] [Thread-186922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:23:12.756 [DEBUG] [Thread-186922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:23:12.756 [DEBUG] [Thread-186922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:23:12.756 [DEBUG] [Thread-186922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:23:12.757 [DEBUG] [Thread-186922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:23:12.757 [DEBUG] [Thread-186922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:23:12.757 [DEBUG] [Thread-186922] [transport.py] [_log()] client lang: <none>
2026-02-14T14:23:12.757 [DEBUG] [Thread-186922] [transport.py] [_log()] server lang: <none>
2026-02-14T14:23:12.757 [DEBUG] [Thread-186922] [transport.py] [_log()] kex follows: False
2026-02-14T14:23:12.757 [DEBUG] [Thread-186922] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:23:12.757 [DEBUG] [Thread-186922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:23:12.757 [DEBUG] [Thread-186922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:23:12.757 [DEBUG] [Thread-186922] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:23:12.757 [DEBUG] [Thread-186922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:23:12.757 [DEBUG] [Thread-186922] [transport.py] [_log()] Compression: none
2026-02-14T14:23:12.757 [DEBUG] [Thread-186922] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:23:12.776 [DEBUG] [Thread-186922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:23:12.777 [DEBUG] [Thread-186922] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:23:12.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:23:12.778 [DEBUG] [Thread-186922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:23:12.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:23:12.781 [DEBUG] [Thread-186922] [transport.py] [_log()] userauth is OK
2026-02-14T14:23:12.781 [DEBUG] [Thread-186922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:23:12.781 [DEBUG] [Thread-186922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:23:12.781 [DEBUG] [Thread-186922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:23:12.782 [DEBUG] [Thread-186922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:23:12.805 [INFO] [Thread-186922] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:23:12.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:23:13.412 [DEBUG] [Thread-186922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:23:13.413 [DEBUG] [Thread-186922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:23:13.413 [DEBUG] [Thread-186922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:23:13.454 [DEBUG] [Thread-186922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:23:13.454 [DEBUG] [Thread-186922] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:23:13.457 [DEBUG] [Thread-186922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:23:13.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:23:13.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:23:13.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:23:13.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:23:13.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:23:13.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:23:13.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:23:13.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:23:13.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:23:13.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.515733 -999.00  +16.20  19.74     40   +2.60 1 1 1 1 1   888    0 14.50 48.00 ----- 18.6 19.7 177.5 24.3 22.2 -26.2 20.9 -28.0 22.2 -23.9 23.3 -25.4
2026-02-14T14:23:13.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:23:13.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:23:13.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.515733
2026-02-14T14:23:13.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:23:13.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:23:13.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:23:13.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:23:13.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:23:13.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:22:30', tmtdew=15.59, humidity=34.66, cloud=0.0, wind=32.62, temperature=15.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:22:39.331', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:23:13.483 [DEBUG] [Thread-186922] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:23:13.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-14T14:23:13.578 [DEBUG] [Thread-186925] [transport.py] [_log()] starting thread (client mode): 0xa2dc33d0
2026-02-14T14:23:13.579 [DEBUG] [Thread-186925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:23:13.593 [DEBUG] [Thread-186925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:23:13.593 [INFO] [Thread-186925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:23:13.600 [DEBUG] [Thread-186925] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:23:13.601 [DEBUG] [Thread-186925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:23:13.601 [DEBUG] [Thread-186925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:23:13.601 [DEBUG] [Thread-186925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:23:13.601 [DEBUG] [Thread-186925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:23:13.601 [DEBUG] [Thread-186925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:23:13.601 [DEBUG] [Thread-186925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:23:13.601 [DEBUG] [Thread-186925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:23:13.601 [DEBUG] [Thread-186925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:23:13.601 [DEBUG] [Thread-186925] [transport.py] [_log()] client lang: <none>
2026-02-14T14:23:13.601 [DEBUG] [Thread-186925] [transport.py] [_log()] server lang: <none>
2026-02-14T14:23:13.601 [DEBUG] [Thread-186925] [transport.py] [_log()] kex follows: False
2026-02-14T14:23:13.601 [DEBUG] [Thread-186925] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:23:13.601 [DEBUG] [Thread-186925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:23:13.601 [DEBUG] [Thread-186925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:23:13.601 [DEBUG] [Thread-186925] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:23:13.601 [DEBUG] [Thread-186925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:23:13.601 [DEBUG] [Thread-186925] [transport.py] [_log()] Compression: none
2026-02-14T14:23:13.601 [DEBUG] [Thread-186925] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:23:13.662 [DEBUG] [Thread-186925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:23:13.663 [DEBUG] [Thread-186925] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:23:13.664 [DEBUG] [Thread-186925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:23:13.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:23:13.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:23:13.724 [DEBUG] [Thread-186925] [transport.py] [_log()] userauth is OK
2026-02-14T14:23:13.724 [DEBUG] [Thread-186925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:23:13.725 [DEBUG] [Thread-186925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:23:13.725 [DEBUG] [Thread-186925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:23:13.725 [DEBUG] [Thread-186925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:23:13.743 [INFO] [Thread-186925] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:23:13.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-14T14:23:13.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:23:14.640 [DEBUG] [Thread-186925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:23:14.641 [DEBUG] [Thread-186925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:23:14.688 [DEBUG] [Thread-186925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:23:14.689 [DEBUG] [Thread-186925] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:23:14.699 [DEBUG] [Thread-186925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:23:14.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:23:14.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-14T14:23:14.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-14T14:23:14.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:23:14.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:23:14.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:23:14.736 [DEBUG] [Thread-186925] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:23:15.857 [DEBUG] [Thread-186927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:23:26.147 [DEBUG] [Thread-186928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:23:30.906 [DEBUG] [Thread-186929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:23:37.809 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:23:37.810 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:23:44.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:23:44.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:23:44.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-14T14:23:45.941 [DEBUG] [Thread-186930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:23:46.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 23, 6), 15.71, 34.41, 0.0, 34.81, 15.98, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:23:46.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:23:06
2026-02-14T14:23:47.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:23:47.413 [DEBUG] [Thread-186931] [transport.py] [_log()] starting thread (client mode): 0xa2dc1780
2026-02-14T14:23:47.413 [DEBUG] [Thread-186931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:23:47.432 [DEBUG] [Thread-186931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:23:47.432 [INFO] [Thread-186931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:23:47.433 [DEBUG] [Thread-186931] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:23:47.433 [DEBUG] [Thread-186931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:23:47.433 [DEBUG] [Thread-186931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:23:47.433 [DEBUG] [Thread-186931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:23:47.433 [DEBUG] [Thread-186931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:23:47.433 [DEBUG] [Thread-186931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:23:47.433 [DEBUG] [Thread-186931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:23:47.433 [DEBUG] [Thread-186931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:23:47.433 [DEBUG] [Thread-186931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:23:47.433 [DEBUG] [Thread-186931] [transport.py] [_log()] client lang: <none>
2026-02-14T14:23:47.433 [DEBUG] [Thread-186931] [transport.py] [_log()] server lang: <none>
2026-02-14T14:23:47.433 [DEBUG] [Thread-186931] [transport.py] [_log()] kex follows: False
2026-02-14T14:23:47.433 [DEBUG] [Thread-186931] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:23:47.433 [DEBUG] [Thread-186931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:23:47.433 [DEBUG] [Thread-186931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:23:47.433 [DEBUG] [Thread-186931] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:23:47.433 [DEBUG] [Thread-186931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:23:47.433 [DEBUG] [Thread-186931] [transport.py] [_log()] Compression: none
2026-02-14T14:23:47.433 [DEBUG] [Thread-186931] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:23:47.441 [DEBUG] [Thread-186931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:23:47.442 [DEBUG] [Thread-186931] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:23:47.442 [DEBUG] [Thread-186931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:23:47.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:23:47.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:23:47.444 [DEBUG] [Thread-186931] [transport.py] [_log()] userauth is OK
2026-02-14T14:23:47.444 [DEBUG] [Thread-186931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:23:47.444 [DEBUG] [Thread-186931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:23:47.444 [DEBUG] [Thread-186931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:23:47.444 [DEBUG] [Thread-186931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:23:47.463 [INFO] [Thread-186931] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:23:47.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:23:48.074 [DEBUG] [Thread-186931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:23:48.074 [DEBUG] [Thread-186931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:23:48.074 [DEBUG] [Thread-186931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:23:48.115 [DEBUG] [Thread-186931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:23:48.115 [DEBUG] [Thread-186931] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:23:48.118 [DEBUG] [Thread-186931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:23:48.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:23:48.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:23:48.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:23:48.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:23:48.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:23:48.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:23:48.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:23:48.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:23:48.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:23:48.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.516080 -999.00  +16.60  21.56     39   +2.80 1 1 1 1 1   888    0 14.57 51.93 ----- 25.8 21.6 175.0 27.6 22.3 -25.3 21.0 -26.8 22.4 -23.0 23.4 -25.6
2026-02-14T14:23:48.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:23:48.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:23:48.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.516080
2026-02-14T14:23:48.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:23:48.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:23:48.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:23:48.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:23:48.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:23:48.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:23:06', tmtdew=15.71, humidity=34.41, cloud=0.0, wind=34.81, temperature=15.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:23:09.312', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:23:48.138 [DEBUG] [Thread-186931] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:23:48.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-14T14:23:48.238 [DEBUG] [Thread-186934] [transport.py] [_log()] starting thread (client mode): 0xa2ddc4f0
2026-02-14T14:23:48.238 [DEBUG] [Thread-186934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:23:48.253 [DEBUG] [Thread-186934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:23:48.253 [INFO] [Thread-186934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:23:48.262 [DEBUG] [Thread-186934] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:23:48.262 [DEBUG] [Thread-186934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:23:48.262 [DEBUG] [Thread-186934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:23:48.262 [DEBUG] [Thread-186934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:23:48.263 [DEBUG] [Thread-186934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:23:48.263 [DEBUG] [Thread-186934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:23:48.263 [DEBUG] [Thread-186934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:23:48.263 [DEBUG] [Thread-186934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:23:48.263 [DEBUG] [Thread-186934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:23:48.263 [DEBUG] [Thread-186934] [transport.py] [_log()] client lang: <none>
2026-02-14T14:23:48.263 [DEBUG] [Thread-186934] [transport.py] [_log()] server lang: <none>
2026-02-14T14:23:48.263 [DEBUG] [Thread-186934] [transport.py] [_log()] kex follows: False
2026-02-14T14:23:48.263 [DEBUG] [Thread-186934] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:23:48.263 [DEBUG] [Thread-186934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:23:48.263 [DEBUG] [Thread-186934] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:23:48.263 [DEBUG] [Thread-186934] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:23:48.263 [DEBUG] [Thread-186934] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:23:48.263 [DEBUG] [Thread-186934] [transport.py] [_log()] Compression: none
2026-02-14T14:23:48.263 [DEBUG] [Thread-186934] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:23:48.320 [DEBUG] [Thread-186934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:23:48.321 [DEBUG] [Thread-186934] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:23:48.321 [DEBUG] [Thread-186934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:23:48.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:23:48.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:23:48.376 [DEBUG] [Thread-186934] [transport.py] [_log()] userauth is OK
2026-02-14T14:23:48.376 [DEBUG] [Thread-186934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:23:48.376 [DEBUG] [Thread-186934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:23:48.377 [DEBUG] [Thread-186934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:23:48.377 [DEBUG] [Thread-186934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:23:48.396 [INFO] [Thread-186934] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:23:48.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-14T14:23:48.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:23:49.226 [DEBUG] [Thread-186934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:23:49.227 [DEBUG] [Thread-186934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:23:49.278 [DEBUG] [Thread-186934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:23:49.278 [DEBUG] [Thread-186934] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:23:49.288 [DEBUG] [Thread-186934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:23:49.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:23:49.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-14T14:23:49.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-14T14:23:49.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:23:49.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:23:49.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:23:49.331 [DEBUG] [Thread-186934] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:24:00.979 [DEBUG] [Thread-186936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:24:16.040 [DEBUG] [Thread-186937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:24:19.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:24:19.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:24:19.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-14T14:24:21.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 23, 42), 17.52, 30.62, 0.0, 35.53, 17.89, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:24:21.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:23:42
2026-02-14T14:24:21.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:24:21.735 [DEBUG] [Thread-186938] [transport.py] [_log()] starting thread (client mode): 0xa2d22140
2026-02-14T14:24:21.735 [DEBUG] [Thread-186938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:24:21.756 [DEBUG] [Thread-186938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:24:21.756 [INFO] [Thread-186938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:24:21.757 [DEBUG] [Thread-186938] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:24:21.757 [DEBUG] [Thread-186938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:24:21.757 [DEBUG] [Thread-186938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:24:21.757 [DEBUG] [Thread-186938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:24:21.757 [DEBUG] [Thread-186938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:24:21.757 [DEBUG] [Thread-186938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:24:21.757 [DEBUG] [Thread-186938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:24:21.758 [DEBUG] [Thread-186938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:24:21.758 [DEBUG] [Thread-186938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:24:21.758 [DEBUG] [Thread-186938] [transport.py] [_log()] client lang: <none>
2026-02-14T14:24:21.758 [DEBUG] [Thread-186938] [transport.py] [_log()] server lang: <none>
2026-02-14T14:24:21.758 [DEBUG] [Thread-186938] [transport.py] [_log()] kex follows: False
2026-02-14T14:24:21.758 [DEBUG] [Thread-186938] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:24:21.758 [DEBUG] [Thread-186938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:24:21.758 [DEBUG] [Thread-186938] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:24:21.758 [DEBUG] [Thread-186938] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:24:21.758 [DEBUG] [Thread-186938] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:24:21.758 [DEBUG] [Thread-186938] [transport.py] [_log()] Compression: none
2026-02-14T14:24:21.758 [DEBUG] [Thread-186938] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:24:21.771 [DEBUG] [Thread-186938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:24:21.771 [DEBUG] [Thread-186938] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:24:21.772 [DEBUG] [Thread-186938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:24:21.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:24:21.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:24:21.773 [DEBUG] [Thread-186938] [transport.py] [_log()] userauth is OK
2026-02-14T14:24:21.773 [DEBUG] [Thread-186938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:24:21.774 [DEBUG] [Thread-186938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:24:21.774 [DEBUG] [Thread-186938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:24:21.774 [DEBUG] [Thread-186938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:24:21.798 [INFO] [Thread-186938] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:24:21.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:24:22.410 [DEBUG] [Thread-186938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:24:22.410 [DEBUG] [Thread-186938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:24:22.411 [DEBUG] [Thread-186938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:24:22.451 [DEBUG] [Thread-186938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:24:22.451 [DEBUG] [Thread-186938] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:24:22.455 [DEBUG] [Thread-186938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:24:22.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:24:22.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:24:22.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:24:22.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:24:22.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:24:22.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:24:22.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:24:22.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:24:22.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:24:22.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.516428 -999.00  +16.50  33.30     38   +2.40 1 1 2 1 1   888    0 15.08 60.46 ----- 31.1 33.3 183.8 42.3 22.0 -28.6 21.1 -30.6 22.1 -27.1 23.1 -27.0
2026-02-14T14:24:22.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:24:22.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:24:22.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.516428
2026-02-14T14:24:22.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:24:22.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:24:22.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:24:22.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:24:22.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:24:22.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:23:42', tmtdew=17.52, humidity=30.62, cloud=0.0, wind=35.53, temperature=17.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:23:39.379', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:24:22.484 [DEBUG] [Thread-186938] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:24:22.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-14T14:24:22.579 [DEBUG] [Thread-186941] [transport.py] [_log()] starting thread (client mode): 0xa2dc3400
2026-02-14T14:24:22.579 [DEBUG] [Thread-186941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:24:22.593 [DEBUG] [Thread-186941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:24:22.593 [INFO] [Thread-186941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:24:22.605 [DEBUG] [Thread-186941] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:24:22.605 [DEBUG] [Thread-186941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:24:22.605 [DEBUG] [Thread-186941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:24:22.605 [DEBUG] [Thread-186941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:24:22.605 [DEBUG] [Thread-186941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:24:22.605 [DEBUG] [Thread-186941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:24:22.605 [DEBUG] [Thread-186941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:24:22.605 [DEBUG] [Thread-186941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:24:22.605 [DEBUG] [Thread-186941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:24:22.605 [DEBUG] [Thread-186941] [transport.py] [_log()] client lang: <none>
2026-02-14T14:24:22.605 [DEBUG] [Thread-186941] [transport.py] [_log()] server lang: <none>
2026-02-14T14:24:22.605 [DEBUG] [Thread-186941] [transport.py] [_log()] kex follows: False
2026-02-14T14:24:22.605 [DEBUG] [Thread-186941] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:24:22.606 [DEBUG] [Thread-186941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:24:22.606 [DEBUG] [Thread-186941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:24:22.606 [DEBUG] [Thread-186941] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:24:22.606 [DEBUG] [Thread-186941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:24:22.606 [DEBUG] [Thread-186941] [transport.py] [_log()] Compression: none
2026-02-14T14:24:22.606 [DEBUG] [Thread-186941] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:24:22.665 [DEBUG] [Thread-186941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:24:22.666 [DEBUG] [Thread-186941] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:24:22.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:24:22.667 [DEBUG] [Thread-186941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:24:22.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:24:22.721 [DEBUG] [Thread-186941] [transport.py] [_log()] userauth is OK
2026-02-14T14:24:22.721 [DEBUG] [Thread-186941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:24:22.721 [DEBUG] [Thread-186941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:24:22.722 [DEBUG] [Thread-186941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:24:22.722 [DEBUG] [Thread-186941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:24:22.740 [INFO] [Thread-186941] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:24:22.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-14T14:24:22.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:24:23.561 [DEBUG] [Thread-186941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:24:23.561 [DEBUG] [Thread-186941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:24:23.609 [DEBUG] [Thread-186941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:24:23.609 [DEBUG] [Thread-186941] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:24:23.618 [DEBUG] [Thread-186941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:24:23.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:24:23.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-14T14:24:23.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:24:23.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:24:23.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:24:23.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:24:23.654 [DEBUG] [Thread-186941] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:24:26.212 [DEBUG] [Thread-186943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:24:31.076 [DEBUG] [Thread-186944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:24:37.953 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:24:37.954 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:24:46.129 [DEBUG] [Thread-186945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:24:53.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:24:53.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:24:53.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-14T14:24:56.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 24, 17), 16.74, 32.63, 0.0, 30.84, 17.31, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:24:56.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:24:17
2026-02-14T14:24:56.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:24:56.695 [DEBUG] [Thread-186946] [transport.py] [_log()] starting thread (client mode): 0xa2d1b220
2026-02-14T14:24:56.696 [DEBUG] [Thread-186946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:24:56.716 [DEBUG] [Thread-186946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:24:56.716 [INFO] [Thread-186946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:24:56.720 [DEBUG] [Thread-186946] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:24:56.720 [DEBUG] [Thread-186946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:24:56.720 [DEBUG] [Thread-186946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:24:56.720 [DEBUG] [Thread-186946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:24:56.720 [DEBUG] [Thread-186946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:24:56.720 [DEBUG] [Thread-186946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:24:56.720 [DEBUG] [Thread-186946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:24:56.720 [DEBUG] [Thread-186946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:24:56.720 [DEBUG] [Thread-186946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:24:56.720 [DEBUG] [Thread-186946] [transport.py] [_log()] client lang: <none>
2026-02-14T14:24:56.720 [DEBUG] [Thread-186946] [transport.py] [_log()] server lang: <none>
2026-02-14T14:24:56.720 [DEBUG] [Thread-186946] [transport.py] [_log()] kex follows: False
2026-02-14T14:24:56.720 [DEBUG] [Thread-186946] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:24:56.720 [DEBUG] [Thread-186946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:24:56.720 [DEBUG] [Thread-186946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:24:56.720 [DEBUG] [Thread-186946] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:24:56.720 [DEBUG] [Thread-186946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:24:56.720 [DEBUG] [Thread-186946] [transport.py] [_log()] Compression: none
2026-02-14T14:24:56.720 [DEBUG] [Thread-186946] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:24:56.739 [DEBUG] [Thread-186946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:24:56.740 [DEBUG] [Thread-186946] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:24:56.740 [DEBUG] [Thread-186946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:24:56.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:24:56.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:24:56.742 [DEBUG] [Thread-186946] [transport.py] [_log()] userauth is OK
2026-02-14T14:24:56.742 [DEBUG] [Thread-186946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:24:56.742 [DEBUG] [Thread-186946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:24:56.743 [DEBUG] [Thread-186946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:24:56.743 [DEBUG] [Thread-186946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:24:56.767 [INFO] [Thread-186946] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:24:56.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:24:57.372 [DEBUG] [Thread-186946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:24:57.372 [DEBUG] [Thread-186946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:24:57.372 [DEBUG] [Thread-186946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:24:57.413 [DEBUG] [Thread-186946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:24:57.414 [DEBUG] [Thread-186946] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:24:57.417 [DEBUG] [Thread-186946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:24:57.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:24:57.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:24:57.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:24:57.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:24:57.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:24:57.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:24:57.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:24:57.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:24:57.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:24:57.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.516775 -999.00  +16.00  30.66     40   +2.40 1 1 2 1 1   888    0 14.74 63.52 ----- 32.8 30.7 179.4 43.0 21.8 -27.8 20.7 -32.1 21.8 -27.2 22.9 -27.5
2026-02-14T14:24:57.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:24:57.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:24:57.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.516775
2026-02-14T14:24:57.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:24:57.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:24:57.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:24:57.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:24:57.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:24:57.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:24:17', tmtdew=16.74, humidity=32.63, cloud=0.0, wind=30.84, temperature=17.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:24:09.360', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:24:57.445 [DEBUG] [Thread-186946] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:24:57.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T14:24:57.539 [DEBUG] [Thread-186949] [transport.py] [_log()] starting thread (client mode): 0xa2dc59f0
2026-02-14T14:24:57.539 [DEBUG] [Thread-186949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:24:57.554 [DEBUG] [Thread-186949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:24:57.554 [INFO] [Thread-186949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:24:57.562 [DEBUG] [Thread-186949] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:24:57.562 [DEBUG] [Thread-186949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:24:57.562 [DEBUG] [Thread-186949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:24:57.562 [DEBUG] [Thread-186949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:24:57.563 [DEBUG] [Thread-186949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:24:57.563 [DEBUG] [Thread-186949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:24:57.563 [DEBUG] [Thread-186949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:24:57.563 [DEBUG] [Thread-186949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:24:57.563 [DEBUG] [Thread-186949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:24:57.563 [DEBUG] [Thread-186949] [transport.py] [_log()] client lang: <none>
2026-02-14T14:24:57.563 [DEBUG] [Thread-186949] [transport.py] [_log()] server lang: <none>
2026-02-14T14:24:57.563 [DEBUG] [Thread-186949] [transport.py] [_log()] kex follows: False
2026-02-14T14:24:57.563 [DEBUG] [Thread-186949] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:24:57.564 [DEBUG] [Thread-186949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:24:57.564 [DEBUG] [Thread-186949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:24:57.564 [DEBUG] [Thread-186949] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:24:57.564 [DEBUG] [Thread-186949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:24:57.564 [DEBUG] [Thread-186949] [transport.py] [_log()] Compression: none
2026-02-14T14:24:57.564 [DEBUG] [Thread-186949] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:24:57.622 [DEBUG] [Thread-186949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:24:57.623 [DEBUG] [Thread-186949] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:24:57.624 [DEBUG] [Thread-186949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:24:57.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:24:57.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:24:57.677 [DEBUG] [Thread-186949] [transport.py] [_log()] userauth is OK
2026-02-14T14:24:57.678 [DEBUG] [Thread-186949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:24:57.678 [DEBUG] [Thread-186949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:24:57.678 [DEBUG] [Thread-186949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:24:57.678 [DEBUG] [Thread-186949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:24:57.698 [INFO] [Thread-186949] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:24:57.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T14:24:57.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:24:58.515 [DEBUG] [Thread-186949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:24:58.515 [DEBUG] [Thread-186949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:24:58.563 [DEBUG] [Thread-186949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:24:58.564 [DEBUG] [Thread-186949] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:24:58.573 [DEBUG] [Thread-186949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:24:58.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:24:58.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-14T14:24:58.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-14T14:24:58.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:24:58.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:24:58.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:24:58.608 [DEBUG] [Thread-186949] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:25:01.166 [DEBUG] [Thread-186951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:25:16.220 [DEBUG] [Thread-186952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:25:26.240 [DEBUG] [Thread-186953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:25:28.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:25:28.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:25:28.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-14T14:25:30.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 24, 52), 16.25, 33.6, 0.0, 40.53, 16.59, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:25:30.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:24:52
2026-02-14T14:25:31.258 [DEBUG] [Thread-186954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:25:31.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:25:31.536 [DEBUG] [Thread-186955] [transport.py] [_log()] starting thread (client mode): 0xa2dc2d70
2026-02-14T14:25:31.536 [DEBUG] [Thread-186955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:25:31.556 [DEBUG] [Thread-186955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:25:31.557 [INFO] [Thread-186955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:25:31.558 [DEBUG] [Thread-186955] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:25:31.559 [DEBUG] [Thread-186955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:25:31.559 [DEBUG] [Thread-186955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:25:31.559 [DEBUG] [Thread-186955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:25:31.559 [DEBUG] [Thread-186955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:25:31.559 [DEBUG] [Thread-186955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:25:31.559 [DEBUG] [Thread-186955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:25:31.559 [DEBUG] [Thread-186955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:25:31.559 [DEBUG] [Thread-186955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:25:31.559 [DEBUG] [Thread-186955] [transport.py] [_log()] client lang: <none>
2026-02-14T14:25:31.559 [DEBUG] [Thread-186955] [transport.py] [_log()] server lang: <none>
2026-02-14T14:25:31.559 [DEBUG] [Thread-186955] [transport.py] [_log()] kex follows: False
2026-02-14T14:25:31.559 [DEBUG] [Thread-186955] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:25:31.559 [DEBUG] [Thread-186955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:25:31.559 [DEBUG] [Thread-186955] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:25:31.559 [DEBUG] [Thread-186955] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:25:31.560 [DEBUG] [Thread-186955] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:25:31.560 [DEBUG] [Thread-186955] [transport.py] [_log()] Compression: none
2026-02-14T14:25:31.560 [DEBUG] [Thread-186955] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:25:31.572 [DEBUG] [Thread-186955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:25:31.572 [DEBUG] [Thread-186955] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:25:31.573 [DEBUG] [Thread-186955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:25:31.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:25:31.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:25:31.575 [DEBUG] [Thread-186955] [transport.py] [_log()] userauth is OK
2026-02-14T14:25:31.575 [DEBUG] [Thread-186955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:25:31.575 [DEBUG] [Thread-186955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:25:31.575 [DEBUG] [Thread-186955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:25:31.575 [DEBUG] [Thread-186955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:25:31.593 [INFO] [Thread-186955] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:25:31.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:25:32.269 [DEBUG] [Thread-186955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:25:32.270 [DEBUG] [Thread-186955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:25:32.270 [DEBUG] [Thread-186955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:25:32.311 [DEBUG] [Thread-186955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:25:32.311 [DEBUG] [Thread-186955] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:25:32.314 [DEBUG] [Thread-186955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:25:32.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:25:32.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:25:32.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:25:32.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:25:32.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:25:32.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:25:32.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:25:32.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:25:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:25:32.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.517122 -999.00  +15.90  27.63     41   +2.60 1 1 1 1 1   888    0 15.02 63.16 ----- 31.6 27.6 171.6 36.8 21.9 -27.9 20.4 -30.5 21.9 -25.9 23.1 -26.7
2026-02-14T14:25:32.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:25:32.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:25:32.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.517122
2026-02-14T14:25:32.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:25:32.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:25:32.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:25:32.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:25:32.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:25:32.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:24:52', tmtdew=16.25, humidity=33.6, cloud=0.0, wind=40.53, temperature=16.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:24:39.341', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:25:32.343 [DEBUG] [Thread-186955] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:25:32.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-14T14:25:32.439 [DEBUG] [Thread-186958] [transport.py] [_log()] starting thread (client mode): 0xa2d10f70
2026-02-14T14:25:32.439 [DEBUG] [Thread-186958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:25:32.455 [DEBUG] [Thread-186958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:25:32.455 [INFO] [Thread-186958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:25:32.463 [DEBUG] [Thread-186958] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:25:32.463 [DEBUG] [Thread-186958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:25:32.463 [DEBUG] [Thread-186958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:25:32.463 [DEBUG] [Thread-186958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:25:32.463 [DEBUG] [Thread-186958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:25:32.463 [DEBUG] [Thread-186958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:25:32.463 [DEBUG] [Thread-186958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:25:32.463 [DEBUG] [Thread-186958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:25:32.463 [DEBUG] [Thread-186958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:25:32.463 [DEBUG] [Thread-186958] [transport.py] [_log()] client lang: <none>
2026-02-14T14:25:32.463 [DEBUG] [Thread-186958] [transport.py] [_log()] server lang: <none>
2026-02-14T14:25:32.463 [DEBUG] [Thread-186958] [transport.py] [_log()] kex follows: False
2026-02-14T14:25:32.463 [DEBUG] [Thread-186958] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:25:32.463 [DEBUG] [Thread-186958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:25:32.463 [DEBUG] [Thread-186958] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:25:32.463 [DEBUG] [Thread-186958] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:25:32.463 [DEBUG] [Thread-186958] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:25:32.463 [DEBUG] [Thread-186958] [transport.py] [_log()] Compression: none
2026-02-14T14:25:32.463 [DEBUG] [Thread-186958] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:25:32.522 [DEBUG] [Thread-186958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:25:32.523 [DEBUG] [Thread-186958] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:25:32.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:25:32.524 [DEBUG] [Thread-186958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:25:32.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:25:32.582 [DEBUG] [Thread-186958] [transport.py] [_log()] userauth is OK
2026-02-14T14:25:32.582 [DEBUG] [Thread-186958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:25:32.583 [DEBUG] [Thread-186958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:25:32.583 [DEBUG] [Thread-186958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:25:32.583 [DEBUG] [Thread-186958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:25:32.601 [INFO] [Thread-186958] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:25:32.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-14T14:25:32.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:25:33.413 [DEBUG] [Thread-186958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:25:33.413 [DEBUG] [Thread-186958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:25:33.462 [DEBUG] [Thread-186958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:25:33.462 [DEBUG] [Thread-186958] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:25:33.470 [DEBUG] [Thread-186958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:25:33.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:25:33.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:25: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') -> 00000000
2026-02-14T14:25:33.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:25:33.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:25:33.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:25:33.502 [DEBUG] [Thread-186958] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:25:38.093 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:25:38.095 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:25:46.296 [DEBUG] [Thread-186960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:26:01.349 [DEBUG] [Thread-186961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:26:03.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:26:03.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:26:03.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-14T14:26:05.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 25, 28), 15.82, 34.41, 0.0, 35.01, 16.19, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:26:05.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:25:28
2026-02-14T14:26:06.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:26:06.392 [DEBUG] [Thread-186962] [transport.py] [_log()] starting thread (client mode): 0xa2dddb10
2026-02-14T14:26:06.392 [DEBUG] [Thread-186962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:26:06.412 [DEBUG] [Thread-186962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:26:06.413 [INFO] [Thread-186962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:26:06.416 [DEBUG] [Thread-186962] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:26:06.416 [DEBUG] [Thread-186962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:26:06.416 [DEBUG] [Thread-186962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:26:06.416 [DEBUG] [Thread-186962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:26:06.417 [DEBUG] [Thread-186962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:26:06.417 [DEBUG] [Thread-186962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:26:06.417 [DEBUG] [Thread-186962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:26:06.417 [DEBUG] [Thread-186962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:26:06.417 [DEBUG] [Thread-186962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:26:06.417 [DEBUG] [Thread-186962] [transport.py] [_log()] client lang: <none>
2026-02-14T14:26:06.417 [DEBUG] [Thread-186962] [transport.py] [_log()] server lang: <none>
2026-02-14T14:26:06.417 [DEBUG] [Thread-186962] [transport.py] [_log()] kex follows: False
2026-02-14T14:26:06.417 [DEBUG] [Thread-186962] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:26:06.417 [DEBUG] [Thread-186962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:26:06.417 [DEBUG] [Thread-186962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:26:06.417 [DEBUG] [Thread-186962] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:26:06.417 [DEBUG] [Thread-186962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:26:06.417 [DEBUG] [Thread-186962] [transport.py] [_log()] Compression: none
2026-02-14T14:26:06.417 [DEBUG] [Thread-186962] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:26:06.434 [DEBUG] [Thread-186962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:26:06.435 [DEBUG] [Thread-186962] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:26:06.435 [DEBUG] [Thread-186962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:26:06.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:26:06.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:26:06.437 [DEBUG] [Thread-186962] [transport.py] [_log()] userauth is OK
2026-02-14T14:26:06.438 [DEBUG] [Thread-186962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:26:06.438 [DEBUG] [Thread-186962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:26:06.438 [DEBUG] [Thread-186962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:26:06.438 [DEBUG] [Thread-186962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:26:06.456 [INFO] [Thread-186962] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:26:06.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:26:07.090 [DEBUG] [Thread-186962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:26:07.090 [DEBUG] [Thread-186962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:26:07.091 [DEBUG] [Thread-186962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:26:07.131 [DEBUG] [Thread-186962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:26:07.132 [DEBUG] [Thread-186962] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:26:07.135 [DEBUG] [Thread-186962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:26:07.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:26:07.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:26:07.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:26:07.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:26:07.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:26:07.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:26:07.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:26:07.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:26:07.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:26:07.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.517817 -999.00  +15.30  25.14     42   +2.60 1 1 1 1 1   888    0 15.15 62.97 ----- 22.3 25.1 185.4 30.9 21.8 -26.4 20.6 -28.1 21.7 -25.5 22.8 -27.1
2026-02-14T14:26:07.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:26:07.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:26:07.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.517817
2026-02-14T14:26:07.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:26:07.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:26:07.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:26:07.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:26:07.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:26:07.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:25:28', tmtdew=15.82, humidity=34.41, cloud=0.0, wind=35.01, temperature=16.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:25:39.389', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:26:07.160 [DEBUG] [Thread-186962] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:26:07.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-14T14:26:07.256 [DEBUG] [Thread-186965] [transport.py] [_log()] starting thread (client mode): 0xa2ddc100
2026-02-14T14:26:07.256 [DEBUG] [Thread-186965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:26:07.271 [DEBUG] [Thread-186965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:26:07.271 [INFO] [Thread-186965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:26:07.279 [DEBUG] [Thread-186965] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:26:07.279 [DEBUG] [Thread-186965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:26:07.279 [DEBUG] [Thread-186965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:26:07.279 [DEBUG] [Thread-186965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:26:07.279 [DEBUG] [Thread-186965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:26:07.279 [DEBUG] [Thread-186965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:26:07.279 [DEBUG] [Thread-186965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:26:07.279 [DEBUG] [Thread-186965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:26:07.279 [DEBUG] [Thread-186965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:26:07.279 [DEBUG] [Thread-186965] [transport.py] [_log()] client lang: <none>
2026-02-14T14:26:07.279 [DEBUG] [Thread-186965] [transport.py] [_log()] server lang: <none>
2026-02-14T14:26:07.280 [DEBUG] [Thread-186965] [transport.py] [_log()] kex follows: False
2026-02-14T14:26:07.280 [DEBUG] [Thread-186965] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:26:07.280 [DEBUG] [Thread-186965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:26:07.280 [DEBUG] [Thread-186965] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:26:07.280 [DEBUG] [Thread-186965] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:26:07.280 [DEBUG] [Thread-186965] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:26:07.280 [DEBUG] [Thread-186965] [transport.py] [_log()] Compression: none
2026-02-14T14:26:07.280 [DEBUG] [Thread-186965] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:26:07.342 [DEBUG] [Thread-186965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:26:07.343 [DEBUG] [Thread-186965] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:26:07.343 [DEBUG] [Thread-186965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:26:07.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:26:07.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:26:07.398 [DEBUG] [Thread-186965] [transport.py] [_log()] userauth is OK
2026-02-14T14:26:07.399 [DEBUG] [Thread-186965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:26:07.399 [DEBUG] [Thread-186965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:26:07.399 [DEBUG] [Thread-186965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:26:07.399 [DEBUG] [Thread-186965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:26:07.418 [INFO] [Thread-186965] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:26:07.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T14:26:07.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:26:08.250 [DEBUG] [Thread-186965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:26:08.250 [DEBUG] [Thread-186965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:26:08.297 [DEBUG] [Thread-186965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:26:08.298 [DEBUG] [Thread-186965] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:26:08.307 [DEBUG] [Thread-186965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:26:08.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:26:08.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:26:08.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:26:08.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:26:08.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:26:08.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:26:08.341 [DEBUG] [Thread-186965] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:26:16.389 [DEBUG] [Thread-186967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:26:26.286 [DEBUG] [Thread-186968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:26:31.443 [DEBUG] [Thread-186969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:26:38.232 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:26:38.233 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:26:38.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:26:38.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:26:38.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:26:40.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 26, 4), 15.64, 34.79, 0.0, 32.17, 16.05, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:26:40.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:26:04
2026-02-14T14:26:41.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:26:41.175 [DEBUG] [Thread-186970] [transport.py] [_log()] starting thread (client mode): 0xa2ddd510
2026-02-14T14:26:41.175 [DEBUG] [Thread-186970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:26:41.197 [DEBUG] [Thread-186970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:26:41.197 [INFO] [Thread-186970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:26:41.200 [DEBUG] [Thread-186970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:26:41.200 [DEBUG] [Thread-186970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:26:41.200 [DEBUG] [Thread-186970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:26:41.200 [DEBUG] [Thread-186970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:26:41.200 [DEBUG] [Thread-186970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:26:41.201 [DEBUG] [Thread-186970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:26:41.201 [DEBUG] [Thread-186970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:26:41.201 [DEBUG] [Thread-186970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:26:41.201 [DEBUG] [Thread-186970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:26:41.201 [DEBUG] [Thread-186970] [transport.py] [_log()] client lang: <none>
2026-02-14T14:26:41.201 [DEBUG] [Thread-186970] [transport.py] [_log()] server lang: <none>
2026-02-14T14:26:41.201 [DEBUG] [Thread-186970] [transport.py] [_log()] kex follows: False
2026-02-14T14:26:41.201 [DEBUG] [Thread-186970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:26:41.201 [DEBUG] [Thread-186970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:26:41.201 [DEBUG] [Thread-186970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:26:41.201 [DEBUG] [Thread-186970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:26:41.201 [DEBUG] [Thread-186970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:26:41.201 [DEBUG] [Thread-186970] [transport.py] [_log()] Compression: none
2026-02-14T14:26:41.201 [DEBUG] [Thread-186970] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:26:41.218 [DEBUG] [Thread-186970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:26:41.218 [DEBUG] [Thread-186970] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:26:41.219 [DEBUG] [Thread-186970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:26:41.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:26:41.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:26:41.220 [DEBUG] [Thread-186970] [transport.py] [_log()] userauth is OK
2026-02-14T14:26:41.221 [DEBUG] [Thread-186970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:26:41.221 [DEBUG] [Thread-186970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:26:41.221 [DEBUG] [Thread-186970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:26:41.221 [DEBUG] [Thread-186970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:26:41.245 [INFO] [Thread-186970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:26:41.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:26:41.892 [DEBUG] [Thread-186970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:26:41.892 [DEBUG] [Thread-186970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:26:41.893 [DEBUG] [Thread-186970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:26:41.933 [DEBUG] [Thread-186970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:26:41.933 [DEBUG] [Thread-186970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:26:41.936 [DEBUG] [Thread-186970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:26:41.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:26:41.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:26:41.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:26:41.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:26:41.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:26:41.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:26:41.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:26:41.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:26:41.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:26:41.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.518164 -999.00  +15.30  14.57     43   +2.80 1 1 1 1 1   888    0 14.66 55.67 ----- 19.4 14.6 183.2 35.0 21.8 -26.6 20.4 -31.1 21.9 -24.3 22.9 -27.0
2026-02-14T14:26:41.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:26:41.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:26:41.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.518164
2026-02-14T14:26:41.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:26:41.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:26:41.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:26:41.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:26:41.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:26:41.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:26:04', tmtdew=15.64, humidity=34.79, cloud=0.0, wind=32.17, temperature=16.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:26:09.370', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:26:41.960 [DEBUG] [Thread-186970] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:26:42.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-14T14:26:42.056 [DEBUG] [Thread-186973] [transport.py] [_log()] starting thread (client mode): 0xa5743fa0
2026-02-14T14:26:42.056 [DEBUG] [Thread-186973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:26:42.070 [DEBUG] [Thread-186973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:26:42.070 [INFO] [Thread-186973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:26:42.077 [DEBUG] [Thread-186973] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:26:42.078 [DEBUG] [Thread-186973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:26:42.078 [DEBUG] [Thread-186973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:26:42.078 [DEBUG] [Thread-186973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:26:42.078 [DEBUG] [Thread-186973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:26:42.078 [DEBUG] [Thread-186973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:26:42.079 [DEBUG] [Thread-186973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:26:42.079 [DEBUG] [Thread-186973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:26:42.079 [DEBUG] [Thread-186973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:26:42.079 [DEBUG] [Thread-186973] [transport.py] [_log()] client lang: <none>
2026-02-14T14:26:42.079 [DEBUG] [Thread-186973] [transport.py] [_log()] server lang: <none>
2026-02-14T14:26:42.079 [DEBUG] [Thread-186973] [transport.py] [_log()] kex follows: False
2026-02-14T14:26:42.079 [DEBUG] [Thread-186973] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:26:42.079 [DEBUG] [Thread-186973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:26:42.079 [DEBUG] [Thread-186973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:26:42.079 [DEBUG] [Thread-186973] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:26:42.079 [DEBUG] [Thread-186973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:26:42.079 [DEBUG] [Thread-186973] [transport.py] [_log()] Compression: none
2026-02-14T14:26:42.079 [DEBUG] [Thread-186973] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:26:42.138 [DEBUG] [Thread-186973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:26:42.138 [DEBUG] [Thread-186973] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:26:42.139 [DEBUG] [Thread-186973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:26:42.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:26:42.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:26:42.194 [DEBUG] [Thread-186973] [transport.py] [_log()] userauth is OK
2026-02-14T14:26:42.194 [DEBUG] [Thread-186973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:26:42.194 [DEBUG] [Thread-186973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:26:42.194 [DEBUG] [Thread-186973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:26:42.195 [DEBUG] [Thread-186973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:26:42.218 [INFO] [Thread-186973] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:26:42.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T14:26:42.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:26:43.042 [DEBUG] [Thread-186973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:26:43.042 [DEBUG] [Thread-186973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:26:43.091 [DEBUG] [Thread-186973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:26:43.091 [DEBUG] [Thread-186973] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:26:43.100 [DEBUG] [Thread-186973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:26:43.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:26:43.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:26:43.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-14T14:26:43.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:26:43.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:26:43.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:26:43.133 [DEBUG] [Thread-186973] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:26:46.477 [DEBUG] [Thread-186975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:27:01.529 [DEBUG] [Thread-186976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:27:13.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:27:13.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:27:13.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:27:15.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 26, 39), 16.76, 32.27, 0.0, 29.07, 17.59, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:27:15.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:26:39
2026-02-14T14:27:15.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:27:15.769 [DEBUG] [Thread-186977] [transport.py] [_log()] starting thread (client mode): 0xa2ddf700
2026-02-14T14:27:15.769 [DEBUG] [Thread-186977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:27:15.790 [DEBUG] [Thread-186977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:27:15.790 [INFO] [Thread-186977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:27:15.793 [DEBUG] [Thread-186977] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:27:15.793 [DEBUG] [Thread-186977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:27:15.793 [DEBUG] [Thread-186977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:27:15.793 [DEBUG] [Thread-186977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:27:15.793 [DEBUG] [Thread-186977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:27:15.793 [DEBUG] [Thread-186977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:27:15.793 [DEBUG] [Thread-186977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:27:15.793 [DEBUG] [Thread-186977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:27:15.793 [DEBUG] [Thread-186977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:27:15.793 [DEBUG] [Thread-186977] [transport.py] [_log()] client lang: <none>
2026-02-14T14:27:15.793 [DEBUG] [Thread-186977] [transport.py] [_log()] server lang: <none>
2026-02-14T14:27:15.793 [DEBUG] [Thread-186977] [transport.py] [_log()] kex follows: False
2026-02-14T14:27:15.793 [DEBUG] [Thread-186977] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:27:15.793 [DEBUG] [Thread-186977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:27:15.793 [DEBUG] [Thread-186977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:27:15.794 [DEBUG] [Thread-186977] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:27:15.794 [DEBUG] [Thread-186977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:27:15.794 [DEBUG] [Thread-186977] [transport.py] [_log()] Compression: none
2026-02-14T14:27:15.794 [DEBUG] [Thread-186977] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:27:15.811 [DEBUG] [Thread-186977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:27:15.811 [DEBUG] [Thread-186977] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:27:15.812 [DEBUG] [Thread-186977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:27:15.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:27:15.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:27:15.814 [DEBUG] [Thread-186977] [transport.py] [_log()] userauth is OK
2026-02-14T14:27:15.814 [DEBUG] [Thread-186977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:27:15.814 [DEBUG] [Thread-186977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:27:15.814 [DEBUG] [Thread-186977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:27:15.815 [DEBUG] [Thread-186977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:27:15.837 [INFO] [Thread-186977] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:27:15.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:27:16.570 [DEBUG] [Thread-186979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:27:16.598 [DEBUG] [Thread-186977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:27:16.598 [DEBUG] [Thread-186977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:27:16.599 [DEBUG] [Thread-186977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:27:16.639 [DEBUG] [Thread-186977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:27:16.640 [DEBUG] [Thread-186977] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:27:16.643 [DEBUG] [Thread-186977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:27:16.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:27:16.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:27:16.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:27:16.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:27:16.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:27:16.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:27:16.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:27:16.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:27:16.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:27:16.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.518511 -999.00  +15.60  19.17     42   +2.90 1 1 1 1 1   888    0 14.52 52.78 ----- 19.4 19.2 179.7 27.9 21.9 -25.4 20.7 -26.9 21.9 -23.3 23.0 -24.5
2026-02-14T14:27:16.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:27:16.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:27:16.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.518511
2026-02-14T14:27:16.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:27:16.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:27:16.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:27:16.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:27:16.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:27:16.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:26:39', tmtdew=16.76, humidity=32.27, cloud=0.0, wind=29.07, temperature=17.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:26:39.350', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:27:16.668 [DEBUG] [Thread-186977] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:27:16.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-14T14:27:16.763 [DEBUG] [Thread-186981] [transport.py] [_log()] starting thread (client mode): 0xa2dc40d0
2026-02-14T14:27:16.763 [DEBUG] [Thread-186981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:27:16.777 [DEBUG] [Thread-186981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:27:16.778 [INFO] [Thread-186981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:27:16.785 [DEBUG] [Thread-186981] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:27:16.786 [DEBUG] [Thread-186981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:27:16.786 [DEBUG] [Thread-186981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:27:16.786 [DEBUG] [Thread-186981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:27:16.786 [DEBUG] [Thread-186981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:27:16.786 [DEBUG] [Thread-186981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:27:16.786 [DEBUG] [Thread-186981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:27:16.786 [DEBUG] [Thread-186981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:27:16.786 [DEBUG] [Thread-186981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:27:16.786 [DEBUG] [Thread-186981] [transport.py] [_log()] client lang: <none>
2026-02-14T14:27:16.786 [DEBUG] [Thread-186981] [transport.py] [_log()] server lang: <none>
2026-02-14T14:27:16.786 [DEBUG] [Thread-186981] [transport.py] [_log()] kex follows: False
2026-02-14T14:27:16.786 [DEBUG] [Thread-186981] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:27:16.786 [DEBUG] [Thread-186981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:27:16.786 [DEBUG] [Thread-186981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:27:16.786 [DEBUG] [Thread-186981] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:27:16.786 [DEBUG] [Thread-186981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:27:16.786 [DEBUG] [Thread-186981] [transport.py] [_log()] Compression: none
2026-02-14T14:27:16.786 [DEBUG] [Thread-186981] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:27:16.843 [DEBUG] [Thread-186981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:27:16.844 [DEBUG] [Thread-186981] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:27:16.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:27:16.845 [DEBUG] [Thread-186981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:27:16.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:27:16.899 [DEBUG] [Thread-186981] [transport.py] [_log()] userauth is OK
2026-02-14T14:27:16.899 [DEBUG] [Thread-186981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:27:16.900 [DEBUG] [Thread-186981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:27:16.900 [DEBUG] [Thread-186981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:27:16.900 [DEBUG] [Thread-186981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:27:16.918 [INFO] [Thread-186981] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:27:16.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-14T14:27:16.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:27:17.744 [DEBUG] [Thread-186981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:27:17.744 [DEBUG] [Thread-186981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:27:17.792 [DEBUG] [Thread-186981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:27:17.793 [DEBUG] [Thread-186981] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:27:17.802 [DEBUG] [Thread-186981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:27:17.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:27:17.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-14T14:27:17.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-14T14:27:17.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:27:17.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:27:17.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:27:17.836 [DEBUG] [Thread-186981] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:27:26.336 [DEBUG] [Thread-186983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:27:31.607 [DEBUG] [Thread-186984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:27:38.371 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:27:38.372 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:27:46.659 [DEBUG] [Thread-186985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:27:47.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:27:47.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:27:47.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:27:49.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 27, 16), 15.66, 34.52, 0.0, 26.62, 16.28, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:27:49.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:27:16
2026-02-14T14:27:50.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:27:50.194 [DEBUG] [Thread-186986] [transport.py] [_log()] starting thread (client mode): 0xa2dc7400
2026-02-14T14:27:50.194 [DEBUG] [Thread-186986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:27:50.214 [DEBUG] [Thread-186986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:27:50.214 [INFO] [Thread-186986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:27:50.218 [DEBUG] [Thread-186986] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:27:50.219 [DEBUG] [Thread-186986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:27:50.219 [DEBUG] [Thread-186986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:27:50.219 [DEBUG] [Thread-186986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:27:50.219 [DEBUG] [Thread-186986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:27:50.219 [DEBUG] [Thread-186986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:27:50.219 [DEBUG] [Thread-186986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:27:50.219 [DEBUG] [Thread-186986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:27:50.219 [DEBUG] [Thread-186986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:27:50.219 [DEBUG] [Thread-186986] [transport.py] [_log()] client lang: <none>
2026-02-14T14:27:50.219 [DEBUG] [Thread-186986] [transport.py] [_log()] server lang: <none>
2026-02-14T14:27:50.219 [DEBUG] [Thread-186986] [transport.py] [_log()] kex follows: False
2026-02-14T14:27:50.219 [DEBUG] [Thread-186986] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:27:50.219 [DEBUG] [Thread-186986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:27:50.219 [DEBUG] [Thread-186986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:27:50.219 [DEBUG] [Thread-186986] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:27:50.219 [DEBUG] [Thread-186986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:27:50.219 [DEBUG] [Thread-186986] [transport.py] [_log()] Compression: none
2026-02-14T14:27:50.219 [DEBUG] [Thread-186986] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:27:50.236 [DEBUG] [Thread-186986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:27:50.237 [DEBUG] [Thread-186986] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:27:50.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:27:50.238 [DEBUG] [Thread-186986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:27:50.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:27:50.240 [DEBUG] [Thread-186986] [transport.py] [_log()] userauth is OK
2026-02-14T14:27:50.240 [DEBUG] [Thread-186986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:27:50.240 [DEBUG] [Thread-186986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:27:50.241 [DEBUG] [Thread-186986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:27:50.241 [DEBUG] [Thread-186986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:27:50.276 [INFO] [Thread-186986] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:27:50.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:27:50.936 [DEBUG] [Thread-186986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:27:50.936 [DEBUG] [Thread-186986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:27:50.936 [DEBUG] [Thread-186986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:27:50.977 [DEBUG] [Thread-186986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:27:50.978 [DEBUG] [Thread-186986] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:27:50.981 [DEBUG] [Thread-186986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:27:50.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:27:50.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:27:50.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:27:50.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:27:51.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:27:51.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:27:51.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:27:51.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:27:51.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:27:51.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.518858 -999.00  +15.90  19.14     42   +3.00 1 1 1 1 1   888    0 14.94 52.20 ----- 22.9 19.1 147.8 23.0 22.1 -26.5 20.7 -28.6 22.2 -25.0 23.4 -25.5
2026-02-14T14:27:51.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:27:51.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:27:51.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.518858
2026-02-14T14:27:51.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:27:51.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:27:51.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:27:51.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:27:51.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:27:51.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:27:16', tmtdew=15.66, humidity=34.52, cloud=0.0, wind=26.62, temperature=16.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:27:09.331', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:27:51.008 [DEBUG] [Thread-186986] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:27:51.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-14T14:28:01.696 [DEBUG] [Thread-186989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:28:16.752 [DEBUG] [Thread-186990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:28:26.373 [DEBUG] [Thread-186991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:28:31.791 [DEBUG] [Thread-186992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:28:38.510 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:28:38.511 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:28:46.826 [DEBUG] [Thread-186993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:29:01.861 [DEBUG] [Thread-186994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:29:16.898 [DEBUG] [Thread-186995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:29:26.407 [DEBUG] [Thread-186996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:29:31.936 [DEBUG] [Thread-186997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:29:38.656 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:29:38.658 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:29:46.974 [DEBUG] [Thread-186998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:30:02.011 [DEBUG] [Thread-186999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:30:02.807 [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-14T14:30:17.043 [DEBUG] [Thread-187000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:30:26.448 [DEBUG] [Thread-187001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:30:32.084 [DEBUG] [Thread-187002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:30:32.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:30:32.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:30:32.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-14T14:30:34.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 30, 13), 16.51, 32.52, 0.0, 33.82, 16.71, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:30:34.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:30:13
2026-02-14T14:30:35.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:30:35.448 [DEBUG] [Thread-187003] [transport.py] [_log()] starting thread (client mode): 0xa2d3ca90
2026-02-14T14:30:35.449 [DEBUG] [Thread-187003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:30:35.467 [DEBUG] [Thread-187003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:30:35.468 [INFO] [Thread-187003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:30:35.471 [DEBUG] [Thread-187003] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:30:35.471 [DEBUG] [Thread-187003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:30:35.471 [DEBUG] [Thread-187003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:30:35.471 [DEBUG] [Thread-187003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:30:35.471 [DEBUG] [Thread-187003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:30:35.471 [DEBUG] [Thread-187003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:30:35.471 [DEBUG] [Thread-187003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:30:35.471 [DEBUG] [Thread-187003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:30:35.471 [DEBUG] [Thread-187003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:30:35.471 [DEBUG] [Thread-187003] [transport.py] [_log()] client lang: <none>
2026-02-14T14:30:35.471 [DEBUG] [Thread-187003] [transport.py] [_log()] server lang: <none>
2026-02-14T14:30:35.471 [DEBUG] [Thread-187003] [transport.py] [_log()] kex follows: False
2026-02-14T14:30:35.472 [DEBUG] [Thread-187003] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:30:35.472 [DEBUG] [Thread-187003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:30:35.472 [DEBUG] [Thread-187003] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:30:35.472 [DEBUG] [Thread-187003] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:30:35.472 [DEBUG] [Thread-187003] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:30:35.472 [DEBUG] [Thread-187003] [transport.py] [_log()] Compression: none
2026-02-14T14:30:35.472 [DEBUG] [Thread-187003] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:30:35.493 [DEBUG] [Thread-187003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:30:35.494 [DEBUG] [Thread-187003] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:30:35.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:30:35.495 [DEBUG] [Thread-187003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:30:35.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:30:35.497 [DEBUG] [Thread-187003] [transport.py] [_log()] userauth is OK
2026-02-14T14:30:35.497 [DEBUG] [Thread-187003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:30:35.497 [DEBUG] [Thread-187003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:30:35.497 [DEBUG] [Thread-187003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:30:35.497 [DEBUG] [Thread-187003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:30:35.520 [INFO] [Thread-187003] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:30:35.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:30:36.298 [DEBUG] [Thread-187003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:30:36.299 [DEBUG] [Thread-187003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:30:36.299 [DEBUG] [Thread-187003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:30:36.339 [DEBUG] [Thread-187003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:30:36.340 [DEBUG] [Thread-187003] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:30:36.343 [DEBUG] [Thread-187003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:30:36.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:30:36.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:30:36.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:30:36.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:30:36.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:30:36.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:30:36.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:30:36.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:30:36.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:30:36.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.520594 -999.00  +16.10  27.24     39   +2.20 1 1 1 1 1   888    0 14.63 45.90 ----- 23.1 27.2 180.2 37.0 22.1 -26.4 21.1 -28.7 22.2 -25.7 23.2 -28.3
2026-02-14T14:30:36.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:30:36.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:30:36.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.520594
2026-02-14T14:30:36.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:30:36.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:30:36.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:30:36.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:30:36.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:30:36.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:30:13', tmtdew=16.51, humidity=32.52, cloud=0.0, wind=33.82, temperature=16.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:29:39.322', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:30:36.370 [DEBUG] [Thread-187003] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:30:36.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-14T14:30:36.465 [DEBUG] [Thread-187006] [transport.py] [_log()] starting thread (client mode): 0xa2d114b0
2026-02-14T14:30:36.465 [DEBUG] [Thread-187006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:30:36.479 [DEBUG] [Thread-187006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:30:36.479 [INFO] [Thread-187006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:30:36.487 [DEBUG] [Thread-187006] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:30:36.488 [DEBUG] [Thread-187006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:30:36.488 [DEBUG] [Thread-187006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:30:36.488 [DEBUG] [Thread-187006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:30:36.488 [DEBUG] [Thread-187006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:30:36.488 [DEBUG] [Thread-187006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:30:36.488 [DEBUG] [Thread-187006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:30:36.488 [DEBUG] [Thread-187006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:30:36.488 [DEBUG] [Thread-187006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:30:36.488 [DEBUG] [Thread-187006] [transport.py] [_log()] client lang: <none>
2026-02-14T14:30:36.488 [DEBUG] [Thread-187006] [transport.py] [_log()] server lang: <none>
2026-02-14T14:30:36.488 [DEBUG] [Thread-187006] [transport.py] [_log()] kex follows: False
2026-02-14T14:30:36.488 [DEBUG] [Thread-187006] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:30:36.488 [DEBUG] [Thread-187006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:30:36.488 [DEBUG] [Thread-187006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:30:36.488 [DEBUG] [Thread-187006] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:30:36.488 [DEBUG] [Thread-187006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:30:36.488 [DEBUG] [Thread-187006] [transport.py] [_log()] Compression: none
2026-02-14T14:30:36.488 [DEBUG] [Thread-187006] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:30:36.546 [DEBUG] [Thread-187006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:30:36.546 [DEBUG] [Thread-187006] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:30:36.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:30:36.548 [DEBUG] [Thread-187006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:30:36.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:30:36.602 [DEBUG] [Thread-187006] [transport.py] [_log()] userauth is OK
2026-02-14T14:30:36.602 [DEBUG] [Thread-187006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:30:36.602 [DEBUG] [Thread-187006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:30:36.602 [DEBUG] [Thread-187006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:30:36.602 [DEBUG] [Thread-187006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:30:36.621 [INFO] [Thread-187006] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:30:36.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-14T14:30:36.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:30:37.435 [DEBUG] [Thread-187006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:30:37.436 [DEBUG] [Thread-187006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:30:37.483 [DEBUG] [Thread-187006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:30:37.484 [DEBUG] [Thread-187006] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:30:37.493 [DEBUG] [Thread-187006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:30:37.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:30:37.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-14T14:30:37.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-14T14:30:37.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:30:37.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:30:37.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:30:37.531 [DEBUG] [Thread-187006] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:30:38.810 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:30:38.811 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:30:47.120 [DEBUG] [Thread-187008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:31:02.161 [DEBUG] [Thread-187009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:31:07.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:31:07.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:31:07.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-14T14:31:09.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 30, 48), 16.34, 33.19, 0.0, 32.82, 16.2, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:31:09.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:30:48
2026-02-14T14:31:09.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:31:10.017 [DEBUG] [Thread-187010] [transport.py] [_log()] starting thread (client mode): 0xa5741d80
2026-02-14T14:31:10.017 [DEBUG] [Thread-187010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:31:10.038 [DEBUG] [Thread-187010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:31:10.038 [INFO] [Thread-187010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:31:10.043 [DEBUG] [Thread-187010] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:31:10.043 [DEBUG] [Thread-187010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:31:10.043 [DEBUG] [Thread-187010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:31:10.043 [DEBUG] [Thread-187010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:31:10.043 [DEBUG] [Thread-187010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:31:10.043 [DEBUG] [Thread-187010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:31:10.043 [DEBUG] [Thread-187010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:31:10.043 [DEBUG] [Thread-187010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:31:10.043 [DEBUG] [Thread-187010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:31:10.043 [DEBUG] [Thread-187010] [transport.py] [_log()] client lang: <none>
2026-02-14T14:31:10.043 [DEBUG] [Thread-187010] [transport.py] [_log()] server lang: <none>
2026-02-14T14:31:10.043 [DEBUG] [Thread-187010] [transport.py] [_log()] kex follows: False
2026-02-14T14:31:10.043 [DEBUG] [Thread-187010] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:31:10.043 [DEBUG] [Thread-187010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:31:10.043 [DEBUG] [Thread-187010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:31:10.043 [DEBUG] [Thread-187010] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:31:10.043 [DEBUG] [Thread-187010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:31:10.043 [DEBUG] [Thread-187010] [transport.py] [_log()] Compression: none
2026-02-14T14:31:10.043 [DEBUG] [Thread-187010] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:31:10.059 [DEBUG] [Thread-187010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:31:10.060 [DEBUG] [Thread-187010] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:31:10.060 [DEBUG] [Thread-187010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:31:10.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:31:10.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:31:10.062 [DEBUG] [Thread-187010] [transport.py] [_log()] userauth is OK
2026-02-14T14:31:10.063 [DEBUG] [Thread-187010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:31:10.063 [DEBUG] [Thread-187010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:31:10.063 [DEBUG] [Thread-187010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:31:10.063 [DEBUG] [Thread-187010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:31:10.099 [INFO] [Thread-187010] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:31:10.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:31:10.763 [DEBUG] [Thread-187010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:31:10.764 [DEBUG] [Thread-187010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:31:10.764 [DEBUG] [Thread-187010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:31:10.804 [DEBUG] [Thread-187010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:31:10.804 [DEBUG] [Thread-187010] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:31:10.808 [DEBUG] [Thread-187010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:31:10.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:31:10.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:31:10.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:31:10.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:31:10.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:31:10.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:31:10.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:31:10.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:31:10.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:31:10.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.520941 -999.00  +16.10  27.55     39   +2.20 1 1 1 1 1   888    0 14.50 42.67 ----- 24.3 27.6 183.4 35.4 22.1 -25.9 20.9 -28.3 22.4 -24.4 23.4 -25.2
2026-02-14T14:31:10.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:31:10.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:31:10.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.520941
2026-02-14T14:31:10.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:31:10.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:31:10.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:31:10.834 [DEBUG] [Thread-187010] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:31:10.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:31:10.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:31:10.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:30:48', tmtdew=16.34, humidity=33.19, cloud=0.0, wind=32.82, temperature=16.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:30:09.302', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:31:10.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-14T14:31:10.934 [DEBUG] [Thread-187013] [transport.py] [_log()] starting thread (client mode): 0xa2d3d720
2026-02-14T14:31:10.934 [DEBUG] [Thread-187013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:31:10.948 [DEBUG] [Thread-187013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:31:10.948 [INFO] [Thread-187013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:31:10.956 [DEBUG] [Thread-187013] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:31:10.956 [DEBUG] [Thread-187013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:31:10.956 [DEBUG] [Thread-187013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:31:10.956 [DEBUG] [Thread-187013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:31:10.956 [DEBUG] [Thread-187013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:31:10.956 [DEBUG] [Thread-187013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:31:10.956 [DEBUG] [Thread-187013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:31:10.956 [DEBUG] [Thread-187013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:31:10.956 [DEBUG] [Thread-187013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:31:10.956 [DEBUG] [Thread-187013] [transport.py] [_log()] client lang: <none>
2026-02-14T14:31:10.956 [DEBUG] [Thread-187013] [transport.py] [_log()] server lang: <none>
2026-02-14T14:31:10.956 [DEBUG] [Thread-187013] [transport.py] [_log()] kex follows: False
2026-02-14T14:31:10.956 [DEBUG] [Thread-187013] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:31:10.957 [DEBUG] [Thread-187013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:31:10.957 [DEBUG] [Thread-187013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:31:10.957 [DEBUG] [Thread-187013] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:31:10.957 [DEBUG] [Thread-187013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:31:10.957 [DEBUG] [Thread-187013] [transport.py] [_log()] Compression: none
2026-02-14T14:31:10.957 [DEBUG] [Thread-187013] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:31:11.014 [DEBUG] [Thread-187013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:31:11.014 [DEBUG] [Thread-187013] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:31:11.015 [DEBUG] [Thread-187013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:31:11.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:31:11.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:31:11.070 [DEBUG] [Thread-187013] [transport.py] [_log()] userauth is OK
2026-02-14T14:31:11.070 [DEBUG] [Thread-187013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:31:11.071 [DEBUG] [Thread-187013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:31:11.071 [DEBUG] [Thread-187013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:31:11.071 [DEBUG] [Thread-187013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:31:11.089 [INFO] [Thread-187013] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:31:11.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T14:31:11.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:31:11.904 [DEBUG] [Thread-187013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:31:11.904 [DEBUG] [Thread-187013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:31:11.952 [DEBUG] [Thread-187013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:31:11.953 [DEBUG] [Thread-187013] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:31:11.962 [DEBUG] [Thread-187013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:31:11.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:31:11.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:31:11.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-14T14:31:11.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:31:11.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:31:11.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:31:11.998 [DEBUG] [Thread-187013] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:31:17.199 [DEBUG] [Thread-187015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:31:26.486 [DEBUG] [Thread-187016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:31:32.252 [DEBUG] [Thread-187017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:31:38.954 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:31:38.955 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:31:42.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:31:42.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:31:42.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-14T14:31:44.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 31, 23), 16.52, 32.78, 0.0, 36.35, 16.15, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:31:44.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:31:23
2026-02-14T14:31:44.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:31:44.766 [DEBUG] [Thread-187018] [transport.py] [_log()] starting thread (client mode): 0xa2dc5270
2026-02-14T14:31:44.767 [DEBUG] [Thread-187018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:31:44.781 [DEBUG] [Thread-187018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:31:44.781 [INFO] [Thread-187018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:31:44.785 [DEBUG] [Thread-187018] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:31:44.785 [DEBUG] [Thread-187018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:31:44.785 [DEBUG] [Thread-187018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:31:44.785 [DEBUG] [Thread-187018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:31:44.785 [DEBUG] [Thread-187018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:31:44.785 [DEBUG] [Thread-187018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:31:44.785 [DEBUG] [Thread-187018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:31:44.785 [DEBUG] [Thread-187018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:31:44.785 [DEBUG] [Thread-187018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:31:44.785 [DEBUG] [Thread-187018] [transport.py] [_log()] client lang: <none>
2026-02-14T14:31:44.785 [DEBUG] [Thread-187018] [transport.py] [_log()] server lang: <none>
2026-02-14T14:31:44.785 [DEBUG] [Thread-187018] [transport.py] [_log()] kex follows: False
2026-02-14T14:31:44.785 [DEBUG] [Thread-187018] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:31:44.785 [DEBUG] [Thread-187018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:31:44.785 [DEBUG] [Thread-187018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:31:44.786 [DEBUG] [Thread-187018] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:31:44.786 [DEBUG] [Thread-187018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:31:44.786 [DEBUG] [Thread-187018] [transport.py] [_log()] Compression: none
2026-02-14T14:31:44.786 [DEBUG] [Thread-187018] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:31:44.803 [DEBUG] [Thread-187018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:31:44.804 [DEBUG] [Thread-187018] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:31:44.804 [DEBUG] [Thread-187018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:31:44.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:31:44.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:31:44.806 [DEBUG] [Thread-187018] [transport.py] [_log()] userauth is OK
2026-02-14T14:31:44.806 [DEBUG] [Thread-187018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:31:44.806 [DEBUG] [Thread-187018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:31:44.806 [DEBUG] [Thread-187018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:31:44.806 [DEBUG] [Thread-187018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:31:44.822 [INFO] [Thread-187018] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:31:44.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:31:45.488 [DEBUG] [Thread-187018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:31:45.488 [DEBUG] [Thread-187018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:31:45.488 [DEBUG] [Thread-187018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:31:45.529 [DEBUG] [Thread-187018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:31:45.530 [DEBUG] [Thread-187018] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:31:45.533 [DEBUG] [Thread-187018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:31:45.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:31:45.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:31:45.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:31:45.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:31:45.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:31:45.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:31:45.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:31:45.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:31:45.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:31:45.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.521636 -999.00  +16.00  30.21     38   +1.80 1 1 2 1 1   888    0 14.54 41.28 ----- 28.8 30.2 184.8 38.1 21.9 -28.5 20.9 -31.4 22.0 -26.8 23.1 -29.2
2026-02-14T14:31:45.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:31:45.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:31:45.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.521636
2026-02-14T14:31:45.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:31:45.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:31:45.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:31:45.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:31:45.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:31:45.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:31:23', tmtdew=16.52, humidity=32.78, cloud=0.0, wind=36.35, temperature=16.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:31:09.350', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:31:45.561 [DEBUG] [Thread-187018] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:31:45.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-14T14:31:45.653 [DEBUG] [Thread-187021] [transport.py] [_log()] starting thread (client mode): 0xa2ddc190
2026-02-14T14:31:45.653 [DEBUG] [Thread-187021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:31:45.667 [DEBUG] [Thread-187021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:31:45.667 [INFO] [Thread-187021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:31:45.675 [DEBUG] [Thread-187021] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:31:45.675 [DEBUG] [Thread-187021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:31:45.675 [DEBUG] [Thread-187021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:31:45.675 [DEBUG] [Thread-187021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:31:45.675 [DEBUG] [Thread-187021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:31:45.676 [DEBUG] [Thread-187021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:31:45.676 [DEBUG] [Thread-187021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:31:45.676 [DEBUG] [Thread-187021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:31:45.676 [DEBUG] [Thread-187021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:31:45.676 [DEBUG] [Thread-187021] [transport.py] [_log()] client lang: <none>
2026-02-14T14:31:45.676 [DEBUG] [Thread-187021] [transport.py] [_log()] server lang: <none>
2026-02-14T14:31:45.676 [DEBUG] [Thread-187021] [transport.py] [_log()] kex follows: False
2026-02-14T14:31:45.676 [DEBUG] [Thread-187021] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:31:45.676 [DEBUG] [Thread-187021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:31:45.677 [DEBUG] [Thread-187021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:31:45.677 [DEBUG] [Thread-187021] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:31:45.677 [DEBUG] [Thread-187021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:31:45.677 [DEBUG] [Thread-187021] [transport.py] [_log()] Compression: none
2026-02-14T14:31:45.677 [DEBUG] [Thread-187021] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:31:45.735 [DEBUG] [Thread-187021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:31:45.735 [DEBUG] [Thread-187021] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:31:45.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:31:45.737 [DEBUG] [Thread-187021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:31:45.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:31:45.791 [DEBUG] [Thread-187021] [transport.py] [_log()] userauth is OK
2026-02-14T14:31:45.791 [DEBUG] [Thread-187021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:31:45.791 [DEBUG] [Thread-187021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:31:45.791 [DEBUG] [Thread-187021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:31:45.791 [DEBUG] [Thread-187021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:31:45.810 [INFO] [Thread-187021] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:31:45.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-14T14:31:45.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:31:46.634 [DEBUG] [Thread-187021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:31:46.635 [DEBUG] [Thread-187021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:31:46.682 [DEBUG] [Thread-187021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:31:46.682 [DEBUG] [Thread-187021] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:31:46.692 [DEBUG] [Thread-187021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:31:46.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:31:46.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-14T14:31:46.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-14T14:31:46.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:31:46.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:31:46.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:31:46.728 [DEBUG] [Thread-187021] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:31:47.291 [DEBUG] [Thread-187023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:32:02.342 [DEBUG] [Thread-187024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:32:16.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:32:16.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:32:16.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-14T14:32:17.377 [DEBUG] [Thread-187025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:32:18.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 31, 58), 16.5, 32.77, 0.0, 34.02, 16.26, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:32:18.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:31:58
2026-02-14T14:32:19.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:32:19.372 [DEBUG] [Thread-187026] [transport.py] [_log()] starting thread (client mode): 0xa2d11ed0
2026-02-14T14:32:19.372 [DEBUG] [Thread-187026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:32:19.394 [DEBUG] [Thread-187026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:32:19.394 [INFO] [Thread-187026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:32:19.398 [DEBUG] [Thread-187026] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:32:19.398 [DEBUG] [Thread-187026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:32:19.398 [DEBUG] [Thread-187026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:32:19.398 [DEBUG] [Thread-187026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:32:19.398 [DEBUG] [Thread-187026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:32:19.398 [DEBUG] [Thread-187026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:32:19.398 [DEBUG] [Thread-187026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:32:19.398 [DEBUG] [Thread-187026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:32:19.398 [DEBUG] [Thread-187026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:32:19.398 [DEBUG] [Thread-187026] [transport.py] [_log()] client lang: <none>
2026-02-14T14:32:19.398 [DEBUG] [Thread-187026] [transport.py] [_log()] server lang: <none>
2026-02-14T14:32:19.398 [DEBUG] [Thread-187026] [transport.py] [_log()] kex follows: False
2026-02-14T14:32:19.398 [DEBUG] [Thread-187026] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:32:19.398 [DEBUG] [Thread-187026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:32:19.398 [DEBUG] [Thread-187026] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:32:19.398 [DEBUG] [Thread-187026] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:32:19.398 [DEBUG] [Thread-187026] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:32:19.398 [DEBUG] [Thread-187026] [transport.py] [_log()] Compression: none
2026-02-14T14:32:19.398 [DEBUG] [Thread-187026] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:32:19.418 [DEBUG] [Thread-187026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:32:19.419 [DEBUG] [Thread-187026] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:32:19.419 [DEBUG] [Thread-187026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:32:19.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:32:19.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:32:19.421 [DEBUG] [Thread-187026] [transport.py] [_log()] userauth is OK
2026-02-14T14:32:19.422 [DEBUG] [Thread-187026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:32:19.422 [DEBUG] [Thread-187026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:32:19.422 [DEBUG] [Thread-187026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:32:19.422 [DEBUG] [Thread-187026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:32:19.447 [INFO] [Thread-187026] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:32:19.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:32:20.056 [DEBUG] [Thread-187026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:32:20.056 [DEBUG] [Thread-187026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:32:20.056 [DEBUG] [Thread-187026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:32:20.096 [DEBUG] [Thread-187026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:32:20.097 [DEBUG] [Thread-187026] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:32:20.100 [DEBUG] [Thread-187026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:32:20.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:32:20.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:32:20.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:32:20.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:32:20.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:32:20.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:32:20.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:32:20.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:32:20.132 [DEBUG] [Thread-187026] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:32:20.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:32:20.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.521983 -999.00  +15.60  21.59     39   +1.90 1 1 1 1 1   888    0 14.46 43.34 ----- 16.5 21.6 192.0 34.3 21.9 -27.5 20.6 -29.8 22.1 -24.3 23.1 -26.1
2026-02-14T14:32:20.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:32:20.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:32:20.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.521983
2026-02-14T14:32:20.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:32:20.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:32:20.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:32:20.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:32:20.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:32:20.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:31:58', tmtdew=16.5, humidity=32.77, cloud=0.0, wind=34.02, temperature=16.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:31:39.331', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:32:20.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-14T14:32:20.231 [DEBUG] [Thread-187029] [transport.py] [_log()] starting thread (client mode): 0xa2d57220
2026-02-14T14:32:20.231 [DEBUG] [Thread-187029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:32:20.250 [DEBUG] [Thread-187029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:32:20.250 [INFO] [Thread-187029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:32:20.258 [DEBUG] [Thread-187029] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:32:20.258 [DEBUG] [Thread-187029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:32:20.258 [DEBUG] [Thread-187029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:32:20.258 [DEBUG] [Thread-187029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:32:20.258 [DEBUG] [Thread-187029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:32:20.258 [DEBUG] [Thread-187029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:32:20.258 [DEBUG] [Thread-187029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:32:20.258 [DEBUG] [Thread-187029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:32:20.258 [DEBUG] [Thread-187029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:32:20.258 [DEBUG] [Thread-187029] [transport.py] [_log()] client lang: <none>
2026-02-14T14:32:20.258 [DEBUG] [Thread-187029] [transport.py] [_log()] server lang: <none>
2026-02-14T14:32:20.259 [DEBUG] [Thread-187029] [transport.py] [_log()] kex follows: False
2026-02-14T14:32:20.259 [DEBUG] [Thread-187029] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:32:20.259 [DEBUG] [Thread-187029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:32:20.259 [DEBUG] [Thread-187029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:32:20.259 [DEBUG] [Thread-187029] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:32:20.259 [DEBUG] [Thread-187029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:32:20.259 [DEBUG] [Thread-187029] [transport.py] [_log()] Compression: none
2026-02-14T14:32:20.259 [DEBUG] [Thread-187029] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:32:20.319 [DEBUG] [Thread-187029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:32:20.319 [DEBUG] [Thread-187029] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:32:20.320 [DEBUG] [Thread-187029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:32:20.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:32:20.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:32:20.375 [DEBUG] [Thread-187029] [transport.py] [_log()] userauth is OK
2026-02-14T14:32:20.375 [DEBUG] [Thread-187029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:32:20.375 [DEBUG] [Thread-187029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:32:20.375 [DEBUG] [Thread-187029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:32:20.376 [DEBUG] [Thread-187029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:32:20.394 [INFO] [Thread-187029] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:32:20.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-14T14:32:20.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:32:21.199 [DEBUG] [Thread-187029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:32:21.200 [DEBUG] [Thread-187029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:32:21.247 [DEBUG] [Thread-187029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:32:21.248 [DEBUG] [Thread-187029] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:32:21.257 [DEBUG] [Thread-187029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:32:21.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:32:21.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-14T14:32:21.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-14T14:32:21.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:32:21.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:32:21.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:32:21.295 [DEBUG] [Thread-187029] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:32:26.538 [DEBUG] [Thread-187031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:32:32.416 [DEBUG] [Thread-187032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:32:39.095 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:32:39.096 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:32:47.473 [DEBUG] [Thread-187033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:32:51.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:32:51.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:32:51.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-14T14:32:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 32, 33), 16.48, 32.77, 0.0, 31.58, 17.09, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:32:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:32:33
2026-02-14T14:32:53.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:32:53.649 [DEBUG] [Thread-187034] [transport.py] [_log()] starting thread (client mode): 0xa2d57c10
2026-02-14T14:32:53.649 [DEBUG] [Thread-187034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:32:53.670 [DEBUG] [Thread-187034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:32:53.670 [INFO] [Thread-187034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:32:53.673 [DEBUG] [Thread-187034] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:32:53.673 [DEBUG] [Thread-187034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:32:53.674 [DEBUG] [Thread-187034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:32:53.674 [DEBUG] [Thread-187034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:32:53.674 [DEBUG] [Thread-187034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:32:53.674 [DEBUG] [Thread-187034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:32:53.674 [DEBUG] [Thread-187034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:32:53.674 [DEBUG] [Thread-187034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:32:53.674 [DEBUG] [Thread-187034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:32:53.674 [DEBUG] [Thread-187034] [transport.py] [_log()] client lang: <none>
2026-02-14T14:32:53.674 [DEBUG] [Thread-187034] [transport.py] [_log()] server lang: <none>
2026-02-14T14:32:53.674 [DEBUG] [Thread-187034] [transport.py] [_log()] kex follows: False
2026-02-14T14:32:53.674 [DEBUG] [Thread-187034] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:32:53.674 [DEBUG] [Thread-187034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:32:53.674 [DEBUG] [Thread-187034] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:32:53.675 [DEBUG] [Thread-187034] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:32:53.675 [DEBUG] [Thread-187034] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:32:53.675 [DEBUG] [Thread-187034] [transport.py] [_log()] Compression: none
2026-02-14T14:32:53.675 [DEBUG] [Thread-187034] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:32:53.696 [DEBUG] [Thread-187034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:32:53.696 [DEBUG] [Thread-187034] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:32:53.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:32:53.697 [DEBUG] [Thread-187034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:32:53.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:32:53.699 [DEBUG] [Thread-187034] [transport.py] [_log()] userauth is OK
2026-02-14T14:32:53.700 [DEBUG] [Thread-187034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:32:53.700 [DEBUG] [Thread-187034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:32:53.700 [DEBUG] [Thread-187034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:32:53.700 [DEBUG] [Thread-187034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:32:53.734 [INFO] [Thread-187034] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:32:53.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:32:54.362 [DEBUG] [Thread-187034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:32:54.362 [DEBUG] [Thread-187034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:32:54.363 [DEBUG] [Thread-187034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:32:54.403 [DEBUG] [Thread-187034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:32:54.404 [DEBUG] [Thread-187034] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:32:54.407 [DEBUG] [Thread-187034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:32:54.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:32:54.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:32:54.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:32:54.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:32:54.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:32:54.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:32:54.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:32:54.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:32:54.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:32:54.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.522330 -999.00  +16.10  26.29     38   +2.00 1 1 1 1 1   888    0 14.76 42.13 ----- 20.4 26.3 155.4 29.3 22.1 -25.9 20.7 -27.7 22.3 -24.3 23.4 -26.0
2026-02-14T14:32:54.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:32:54.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:32:54.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.522330
2026-02-14T14:32:54.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:32:54.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:32:54.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:32:54.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:32:54.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:32:54.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:32:33', tmtdew=16.48, humidity=32.77, cloud=0.0, wind=31.58, temperature=17.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:32:09.312', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:32:54.431 [DEBUG] [Thread-187034] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:32:54.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T14:32:54.527 [DEBUG] [Thread-187037] [transport.py] [_log()] starting thread (client mode): 0xa2d57a60
2026-02-14T14:32:54.527 [DEBUG] [Thread-187037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:32:54.541 [DEBUG] [Thread-187037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:32:54.541 [INFO] [Thread-187037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:32:54.549 [DEBUG] [Thread-187037] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:32:54.549 [DEBUG] [Thread-187037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:32:54.549 [DEBUG] [Thread-187037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:32:54.550 [DEBUG] [Thread-187037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:32:54.550 [DEBUG] [Thread-187037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:32:54.550 [DEBUG] [Thread-187037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:32:54.550 [DEBUG] [Thread-187037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:32:54.550 [DEBUG] [Thread-187037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:32:54.550 [DEBUG] [Thread-187037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:32:54.550 [DEBUG] [Thread-187037] [transport.py] [_log()] client lang: <none>
2026-02-14T14:32:54.550 [DEBUG] [Thread-187037] [transport.py] [_log()] server lang: <none>
2026-02-14T14:32:54.550 [DEBUG] [Thread-187037] [transport.py] [_log()] kex follows: False
2026-02-14T14:32:54.550 [DEBUG] [Thread-187037] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:32:54.550 [DEBUG] [Thread-187037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:32:54.550 [DEBUG] [Thread-187037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:32:54.550 [DEBUG] [Thread-187037] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:32:54.550 [DEBUG] [Thread-187037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:32:54.550 [DEBUG] [Thread-187037] [transport.py] [_log()] Compression: none
2026-02-14T14:32:54.550 [DEBUG] [Thread-187037] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:32:54.607 [DEBUG] [Thread-187037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:32:54.608 [DEBUG] [Thread-187037] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:32:54.608 [DEBUG] [Thread-187037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:32:54.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:32:54.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:32:54.663 [DEBUG] [Thread-187037] [transport.py] [_log()] userauth is OK
2026-02-14T14:32:54.664 [DEBUG] [Thread-187037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:32:54.664 [DEBUG] [Thread-187037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:32:54.664 [DEBUG] [Thread-187037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:32:54.664 [DEBUG] [Thread-187037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:32:54.682 [INFO] [Thread-187037] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:32:54.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T14:32:54.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:32:55.533 [DEBUG] [Thread-187037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:32:55.534 [DEBUG] [Thread-187037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:32:55.581 [DEBUG] [Thread-187037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:32:55.582 [DEBUG] [Thread-187037] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:32:55.591 [DEBUG] [Thread-187037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:32:55.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:32:55.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-14T14:32:55.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:32:55.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:32:55.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:32:55.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:32:55.627 [DEBUG] [Thread-187037] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:33:02.510 [DEBUG] [Thread-187039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:33:17.557 [DEBUG] [Thread-187040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:33:25.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:33:25.649 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:33:25.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:33:26.579 [DEBUG] [Thread-187041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:33:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 33, 9), 15.31, 35.7, 0.0, 19.34, 16.05, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:33:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:33:09
2026-02-14T14:33:27.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:33:28.121 [DEBUG] [Thread-187042] [transport.py] [_log()] starting thread (client mode): 0xa5759f90
2026-02-14T14:33:28.122 [DEBUG] [Thread-187042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:33:28.141 [DEBUG] [Thread-187042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:33:28.141 [INFO] [Thread-187042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:33:28.144 [DEBUG] [Thread-187042] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:33:28.144 [DEBUG] [Thread-187042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:33:28.144 [DEBUG] [Thread-187042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:33:28.144 [DEBUG] [Thread-187042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:33:28.144 [DEBUG] [Thread-187042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:33:28.145 [DEBUG] [Thread-187042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:33:28.145 [DEBUG] [Thread-187042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:33:28.145 [DEBUG] [Thread-187042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:33:28.145 [DEBUG] [Thread-187042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:33:28.145 [DEBUG] [Thread-187042] [transport.py] [_log()] client lang: <none>
2026-02-14T14:33:28.145 [DEBUG] [Thread-187042] [transport.py] [_log()] server lang: <none>
2026-02-14T14:33:28.145 [DEBUG] [Thread-187042] [transport.py] [_log()] kex follows: False
2026-02-14T14:33:28.145 [DEBUG] [Thread-187042] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:33:28.145 [DEBUG] [Thread-187042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:33:28.145 [DEBUG] [Thread-187042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:33:28.145 [DEBUG] [Thread-187042] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:33:28.145 [DEBUG] [Thread-187042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:33:28.145 [DEBUG] [Thread-187042] [transport.py] [_log()] Compression: none
2026-02-14T14:33:28.145 [DEBUG] [Thread-187042] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:33:28.161 [DEBUG] [Thread-187042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:33:28.162 [DEBUG] [Thread-187042] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:33:28.162 [DEBUG] [Thread-187042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:33:28.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:33:28.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:33:28.164 [DEBUG] [Thread-187042] [transport.py] [_log()] userauth is OK
2026-02-14T14:33:28.165 [DEBUG] [Thread-187042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:33:28.165 [DEBUG] [Thread-187042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:33:28.165 [DEBUG] [Thread-187042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:33:28.165 [DEBUG] [Thread-187042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:33:28.182 [INFO] [Thread-187042] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:33:28.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:33:28.843 [DEBUG] [Thread-187042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:33:28.844 [DEBUG] [Thread-187042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:33:28.844 [DEBUG] [Thread-187042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:33:28.884 [DEBUG] [Thread-187042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:33:28.884 [DEBUG] [Thread-187042] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:33:28.887 [DEBUG] [Thread-187042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:33:28.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:33:28.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:33:28.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:33:28.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:33:28.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:33:28.911 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:33:28.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:33:28.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:33:28.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:33:28.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.523025 -999.00  +16.30  19.66     37   +1.80 1 1 1 1 1   888    0 14.58 43.34 ----- 20.5 19.7 164.2 27.0 22.3 -26.6 21.4 -25.2 22.5 -25.1 23.6 -27.0
2026-02-14T14:33:28.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:33:28.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:33:28.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.523025
2026-02-14T14:33:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:33:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:33:28.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:33:28.913 [DEBUG] [Thread-187042] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:33:28.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:33:28.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:33:28.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:33:09', tmtdew=15.31, humidity=35.7, cloud=0.0, wind=19.34, temperature=16.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:33:09.360', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:33:28.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-14T14:33:29.009 [DEBUG] [Thread-187045] [transport.py] [_log()] starting thread (client mode): 0xa2d3fd90
2026-02-14T14:33:29.010 [DEBUG] [Thread-187045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:33:29.024 [DEBUG] [Thread-187045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:33:29.024 [INFO] [Thread-187045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:33:29.032 [DEBUG] [Thread-187045] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:33:29.032 [DEBUG] [Thread-187045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:33:29.032 [DEBUG] [Thread-187045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:33:29.032 [DEBUG] [Thread-187045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:33:29.033 [DEBUG] [Thread-187045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:33:29.033 [DEBUG] [Thread-187045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:33:29.033 [DEBUG] [Thread-187045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:33:29.033 [DEBUG] [Thread-187045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:33:29.033 [DEBUG] [Thread-187045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:33:29.033 [DEBUG] [Thread-187045] [transport.py] [_log()] client lang: <none>
2026-02-14T14:33:29.033 [DEBUG] [Thread-187045] [transport.py] [_log()] server lang: <none>
2026-02-14T14:33:29.033 [DEBUG] [Thread-187045] [transport.py] [_log()] kex follows: False
2026-02-14T14:33:29.033 [DEBUG] [Thread-187045] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:33:29.034 [DEBUG] [Thread-187045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:33:29.034 [DEBUG] [Thread-187045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:33:29.034 [DEBUG] [Thread-187045] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:33:29.034 [DEBUG] [Thread-187045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:33:29.034 [DEBUG] [Thread-187045] [transport.py] [_log()] Compression: none
2026-02-14T14:33:29.034 [DEBUG] [Thread-187045] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:33:29.092 [DEBUG] [Thread-187045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:33:29.093 [DEBUG] [Thread-187045] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:33:29.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:33:29.095 [DEBUG] [Thread-187045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:33:29.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:33:29.152 [DEBUG] [Thread-187045] [transport.py] [_log()] userauth is OK
2026-02-14T14:33:29.153 [DEBUG] [Thread-187045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:33:29.153 [DEBUG] [Thread-187045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:33:29.153 [DEBUG] [Thread-187045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:33:29.153 [DEBUG] [Thread-187045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:33:29.172 [INFO] [Thread-187045] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:33:29.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-14T14:33:29.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:33:30.013 [DEBUG] [Thread-187045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:33:30.013 [DEBUG] [Thread-187045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:33:30.061 [DEBUG] [Thread-187045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:33:30.062 [DEBUG] [Thread-187045] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:33:30.071 [DEBUG] [Thread-187045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:33:30.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:33:30.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:33:30.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-14T14:33:30.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:33:30.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:33:30.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:33:30.109 [DEBUG] [Thread-187045] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:33:32.595 [DEBUG] [Thread-187047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:33:39.237 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:33:39.238 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:33:47.647 [DEBUG] [Thread-187048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:34:00.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:34:00.131 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:34:00.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-14T14:34:02.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 33, 44), 16.15, 33.2, 0.0, 21.65, 16.38, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:34:02.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:33:44
2026-02-14T14:34:02.685 [DEBUG] [Thread-187049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:34:02.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:34:03.031 [DEBUG] [Thread-187050] [transport.py] [_log()] starting thread (client mode): 0xa2d3d240
2026-02-14T14:34:03.031 [DEBUG] [Thread-187050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:34:03.049 [DEBUG] [Thread-187050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:34:03.049 [INFO] [Thread-187050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:34:03.051 [DEBUG] [Thread-187050] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:34:03.051 [DEBUG] [Thread-187050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:34:03.051 [DEBUG] [Thread-187050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:34:03.051 [DEBUG] [Thread-187050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:34:03.051 [DEBUG] [Thread-187050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:34:03.051 [DEBUG] [Thread-187050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:34:03.051 [DEBUG] [Thread-187050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:34:03.051 [DEBUG] [Thread-187050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:34:03.051 [DEBUG] [Thread-187050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:34:03.051 [DEBUG] [Thread-187050] [transport.py] [_log()] client lang: <none>
2026-02-14T14:34:03.051 [DEBUG] [Thread-187050] [transport.py] [_log()] server lang: <none>
2026-02-14T14:34:03.051 [DEBUG] [Thread-187050] [transport.py] [_log()] kex follows: False
2026-02-14T14:34:03.051 [DEBUG] [Thread-187050] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:34:03.051 [DEBUG] [Thread-187050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:34:03.051 [DEBUG] [Thread-187050] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:34:03.051 [DEBUG] [Thread-187050] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:34:03.051 [DEBUG] [Thread-187050] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:34:03.051 [DEBUG] [Thread-187050] [transport.py] [_log()] Compression: none
2026-02-14T14:34:03.051 [DEBUG] [Thread-187050] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:34:03.062 [DEBUG] [Thread-187050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:34:03.062 [DEBUG] [Thread-187050] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:34:03.062 [DEBUG] [Thread-187050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:34:03.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:34:03.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:34:03.064 [DEBUG] [Thread-187050] [transport.py] [_log()] userauth is OK
2026-02-14T14:34:03.064 [DEBUG] [Thread-187050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:34:03.064 [DEBUG] [Thread-187050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:34:03.064 [DEBUG] [Thread-187050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:34:03.064 [DEBUG] [Thread-187050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:34:03.081 [INFO] [Thread-187050] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:34:03.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:34:03.713 [DEBUG] [Thread-187050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:34:03.713 [DEBUG] [Thread-187050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:34:03.713 [DEBUG] [Thread-187050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:34:03.753 [DEBUG] [Thread-187050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:34:03.754 [DEBUG] [Thread-187050] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:34:03.757 [DEBUG] [Thread-187050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:34:03.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:34:03.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:34:03.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:34:03.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:34:03.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:34:03.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:34:03.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:34:03.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:34:03.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:34:03.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.523372 -999.00  +16.30  10.85     38   +2.00 1 1 1 1 1   888    0 14.65 45.06 ----- 12.2 10.8 169.6 23.4 22.5 -25.8 21.4 -24.8 22.6 -23.6 23.7 -25.2
2026-02-14T14:34:03.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:34:03.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:34:03.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.523372
2026-02-14T14:34:03.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:34:03.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:34:03.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:34:03.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:34:03.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:34:03.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:33:44', tmtdew=16.15, humidity=33.2, cloud=0.0, wind=21.65, temperature=16.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:33:39.341', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:34:03.784 [DEBUG] [Thread-187050] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:34:03.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T14:34:03.879 [DEBUG] [Thread-187053] [transport.py] [_log()] starting thread (client mode): 0xa5741240
2026-02-14T14:34:03.879 [DEBUG] [Thread-187053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:34:03.894 [DEBUG] [Thread-187053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:34:03.894 [INFO] [Thread-187053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:34:03.901 [DEBUG] [Thread-187053] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:34:03.902 [DEBUG] [Thread-187053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:34:03.902 [DEBUG] [Thread-187053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:34:03.902 [DEBUG] [Thread-187053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:34:03.902 [DEBUG] [Thread-187053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:34:03.902 [DEBUG] [Thread-187053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:34:03.902 [DEBUG] [Thread-187053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:34:03.902 [DEBUG] [Thread-187053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:34:03.902 [DEBUG] [Thread-187053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:34:03.902 [DEBUG] [Thread-187053] [transport.py] [_log()] client lang: <none>
2026-02-14T14:34:03.902 [DEBUG] [Thread-187053] [transport.py] [_log()] server lang: <none>
2026-02-14T14:34:03.902 [DEBUG] [Thread-187053] [transport.py] [_log()] kex follows: False
2026-02-14T14:34:03.902 [DEBUG] [Thread-187053] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:34:03.902 [DEBUG] [Thread-187053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:34:03.902 [DEBUG] [Thread-187053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:34:03.902 [DEBUG] [Thread-187053] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:34:03.902 [DEBUG] [Thread-187053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:34:03.902 [DEBUG] [Thread-187053] [transport.py] [_log()] Compression: none
2026-02-14T14:34:03.902 [DEBUG] [Thread-187053] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:34:03.960 [DEBUG] [Thread-187053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:34:03.961 [DEBUG] [Thread-187053] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:34:03.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:34:03.962 [DEBUG] [Thread-187053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:34:03.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:34:04.016 [DEBUG] [Thread-187053] [transport.py] [_log()] userauth is OK
2026-02-14T14:34:04.016 [DEBUG] [Thread-187053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:34:04.017 [DEBUG] [Thread-187053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:34:04.017 [DEBUG] [Thread-187053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:34:04.017 [DEBUG] [Thread-187053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:34:04.041 [INFO] [Thread-187053] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:34:04.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-14T14:34:04.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:34:04.847 [DEBUG] [Thread-187053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:34:04.847 [DEBUG] [Thread-187053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:34:04.895 [DEBUG] [Thread-187053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:34:04.896 [DEBUG] [Thread-187053] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:34:04.905 [DEBUG] [Thread-187053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:34:04.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:34:04.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-14T14:34:04.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:34:04.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:34:04.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:34:04.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:34:04.941 [DEBUG] [Thread-187053] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:34:17.729 [DEBUG] [Thread-187055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:34:26.617 [DEBUG] [Thread-187056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:34:32.786 [DEBUG] [Thread-187057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:34:34.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:34:34.955 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:34:34.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-14T14:34:36.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 34, 20), 16.57, 32.27, 0.0, 22.34, 16.58, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:34:36.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:34:20
2026-02-14T14:34:37.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:34:37.199 [DEBUG] [Thread-187058] [transport.py] [_log()] starting thread (client mode): 0xa2d3e620
2026-02-14T14:34:37.199 [DEBUG] [Thread-187058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:34:37.220 [DEBUG] [Thread-187058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:34:37.220 [INFO] [Thread-187058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:34:37.221 [DEBUG] [Thread-187058] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:34:37.221 [DEBUG] [Thread-187058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:34:37.221 [DEBUG] [Thread-187058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:34:37.221 [DEBUG] [Thread-187058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:34:37.221 [DEBUG] [Thread-187058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:34:37.221 [DEBUG] [Thread-187058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:34:37.221 [DEBUG] [Thread-187058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:34:37.221 [DEBUG] [Thread-187058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:34:37.221 [DEBUG] [Thread-187058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:34:37.221 [DEBUG] [Thread-187058] [transport.py] [_log()] client lang: <none>
2026-02-14T14:34:37.221 [DEBUG] [Thread-187058] [transport.py] [_log()] server lang: <none>
2026-02-14T14:34:37.221 [DEBUG] [Thread-187058] [transport.py] [_log()] kex follows: False
2026-02-14T14:34:37.221 [DEBUG] [Thread-187058] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:34:37.221 [DEBUG] [Thread-187058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:34:37.221 [DEBUG] [Thread-187058] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:34:37.221 [DEBUG] [Thread-187058] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:34:37.222 [DEBUG] [Thread-187058] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:34:37.222 [DEBUG] [Thread-187058] [transport.py] [_log()] Compression: none
2026-02-14T14:34:37.222 [DEBUG] [Thread-187058] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:34:37.240 [DEBUG] [Thread-187058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:34:37.241 [DEBUG] [Thread-187058] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:34:37.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:34:37.242 [DEBUG] [Thread-187058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:34:37.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:34:37.244 [DEBUG] [Thread-187058] [transport.py] [_log()] userauth is OK
2026-02-14T14:34:37.244 [DEBUG] [Thread-187058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:34:37.244 [DEBUG] [Thread-187058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:34:37.244 [DEBUG] [Thread-187058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:34:37.244 [DEBUG] [Thread-187058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:34:37.270 [INFO] [Thread-187058] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:34:37.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:34:37.896 [DEBUG] [Thread-187058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:34:37.896 [DEBUG] [Thread-187058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:34:37.897 [DEBUG] [Thread-187058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:34:37.937 [DEBUG] [Thread-187058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:34:37.938 [DEBUG] [Thread-187058] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:34:37.941 [DEBUG] [Thread-187058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:34:37.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:34:37.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:34:37.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:34:37.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:34:37.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:34:37.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:34:37.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:34:37.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:34:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:34:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.523719 -999.00  +16.40  17.11     39   +2.50 1 1 1 1 1   888    0 14.91 48.02 ----- 11.5 17.1 168.4 25.5 22.6 -25.7 21.4 -26.1 22.8 -23.5 23.9 -25.9
2026-02-14T14:34:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:34:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:34:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.523719
2026-02-14T14:34:37.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:34:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:34:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:34:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:34:37.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:34:37.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:34:20', tmtdew=16.57, humidity=32.27, cloud=0.0, wind=22.34, temperature=16.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:34:09.322', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:34:37.970 [DEBUG] [Thread-187058] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:34:38.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-14T14:34:38.076 [DEBUG] [Thread-187061] [transport.py] [_log()] starting thread (client mode): 0xa2d3d0f0
2026-02-14T14:34:38.076 [DEBUG] [Thread-187061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:34:38.090 [DEBUG] [Thread-187061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:34:38.090 [INFO] [Thread-187061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:34:38.098 [DEBUG] [Thread-187061] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:34:38.098 [DEBUG] [Thread-187061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:34:38.098 [DEBUG] [Thread-187061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:34:38.099 [DEBUG] [Thread-187061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:34:38.099 [DEBUG] [Thread-187061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:34:38.099 [DEBUG] [Thread-187061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:34:38.099 [DEBUG] [Thread-187061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:34:38.099 [DEBUG] [Thread-187061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:34:38.099 [DEBUG] [Thread-187061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:34:38.099 [DEBUG] [Thread-187061] [transport.py] [_log()] client lang: <none>
2026-02-14T14:34:38.099 [DEBUG] [Thread-187061] [transport.py] [_log()] server lang: <none>
2026-02-14T14:34:38.099 [DEBUG] [Thread-187061] [transport.py] [_log()] kex follows: False
2026-02-14T14:34:38.099 [DEBUG] [Thread-187061] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:34:38.099 [DEBUG] [Thread-187061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:34:38.099 [DEBUG] [Thread-187061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:34:38.099 [DEBUG] [Thread-187061] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:34:38.099 [DEBUG] [Thread-187061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:34:38.099 [DEBUG] [Thread-187061] [transport.py] [_log()] Compression: none
2026-02-14T14:34:38.099 [DEBUG] [Thread-187061] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:34:38.157 [DEBUG] [Thread-187061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:34:38.157 [DEBUG] [Thread-187061] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:34:38.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:34:38.158 [DEBUG] [Thread-187061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:34:38.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:34:38.212 [DEBUG] [Thread-187061] [transport.py] [_log()] userauth is OK
2026-02-14T14:34:38.212 [DEBUG] [Thread-187061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:34:38.212 [DEBUG] [Thread-187061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:34:38.213 [DEBUG] [Thread-187061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:34:38.213 [DEBUG] [Thread-187061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:34:38.235 [INFO] [Thread-187061] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:34:38.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-14T14:34:38.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:34:39.091 [DEBUG] [Thread-187061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:34:39.091 [DEBUG] [Thread-187061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:34:39.139 [DEBUG] [Thread-187061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:34:39.140 [DEBUG] [Thread-187061] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:34:39.149 [DEBUG] [Thread-187061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:34:39.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:34:39.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:34:39.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-14T14:34:39.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:34:39.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:34:39.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:34:39.185 [DEBUG] [Thread-187061] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:34:39.379 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:34:39.380 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:34:47.821 [DEBUG] [Thread-187063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:35:02.868 [DEBUG] [Thread-187064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:35:09.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:35:09.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:35:09.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-14T14:35:11.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 34, 55), 16.13, 33.44, 0.0, 27.49, 16.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:35:11.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:34:55
2026-02-14T14:35:11.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:35:11.893 [DEBUG] [Thread-187065] [transport.py] [_log()] starting thread (client mode): 0xa2d55000
2026-02-14T14:35:11.893 [DEBUG] [Thread-187065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:35:11.912 [DEBUG] [Thread-187065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:35:11.912 [INFO] [Thread-187065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:35:11.915 [DEBUG] [Thread-187065] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:35:11.915 [DEBUG] [Thread-187065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:35:11.916 [DEBUG] [Thread-187065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:35:11.916 [DEBUG] [Thread-187065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:35:11.916 [DEBUG] [Thread-187065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:35:11.916 [DEBUG] [Thread-187065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:35:11.916 [DEBUG] [Thread-187065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:35:11.916 [DEBUG] [Thread-187065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:35:11.916 [DEBUG] [Thread-187065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:35:11.916 [DEBUG] [Thread-187065] [transport.py] [_log()] client lang: <none>
2026-02-14T14:35:11.916 [DEBUG] [Thread-187065] [transport.py] [_log()] server lang: <none>
2026-02-14T14:35:11.916 [DEBUG] [Thread-187065] [transport.py] [_log()] kex follows: False
2026-02-14T14:35:11.916 [DEBUG] [Thread-187065] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:35:11.916 [DEBUG] [Thread-187065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:35:11.916 [DEBUG] [Thread-187065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:35:11.916 [DEBUG] [Thread-187065] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:35:11.916 [DEBUG] [Thread-187065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:35:11.916 [DEBUG] [Thread-187065] [transport.py] [_log()] Compression: none
2026-02-14T14:35:11.917 [DEBUG] [Thread-187065] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:35:11.934 [DEBUG] [Thread-187065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:35:11.935 [DEBUG] [Thread-187065] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:35:11.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:35:11.936 [DEBUG] [Thread-187065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:35:11.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:35:11.938 [DEBUG] [Thread-187065] [transport.py] [_log()] userauth is OK
2026-02-14T14:35:11.938 [DEBUG] [Thread-187065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:35:11.938 [DEBUG] [Thread-187065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:35:11.938 [DEBUG] [Thread-187065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:35:11.938 [DEBUG] [Thread-187065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:35:11.959 [INFO] [Thread-187065] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:35:11.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:35:12.668 [DEBUG] [Thread-187065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:35:12.668 [DEBUG] [Thread-187065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:35:12.669 [DEBUG] [Thread-187065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:35:12.709 [DEBUG] [Thread-187065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:35:12.709 [DEBUG] [Thread-187065] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:35:12.712 [DEBUG] [Thread-187065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:35:12.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:35:12.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:35:12.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:35:12.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:35:12.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:35:12.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:35:12.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:35:12.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:35:12.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:35:12.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.524066 -999.00  +16.80  15.47     39   +3.00 1 1 1 1 1   888    0 14.86 46.65 ----- 24.2 15.5 176.2 23.8 22.8 -25.9 21.6 -28.8 22.9 -24.0 24.0 -26.0
2026-02-14T14:35:12.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:35:12.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:35:12.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.524066
2026-02-14T14:35:12.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:35:12.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:35:12.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:35:12.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:35:12.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:35:12.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:34:55', tmtdew=16.13, humidity=33.44, cloud=0.0, wind=27.49, temperature=16.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:34:39.302', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:35:12.739 [DEBUG] [Thread-187065] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:35:12.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T14:35:12.844 [DEBUG] [Thread-187068] [transport.py] [_log()] starting thread (client mode): 0xa2ddcd60
2026-02-14T14:35:12.844 [DEBUG] [Thread-187068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:35:12.858 [DEBUG] [Thread-187068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:35:12.858 [INFO] [Thread-187068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:35:12.866 [DEBUG] [Thread-187068] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:35:12.866 [DEBUG] [Thread-187068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:35:12.866 [DEBUG] [Thread-187068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:35:12.866 [DEBUG] [Thread-187068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:35:12.866 [DEBUG] [Thread-187068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:35:12.866 [DEBUG] [Thread-187068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:35:12.866 [DEBUG] [Thread-187068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:35:12.866 [DEBUG] [Thread-187068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:35:12.866 [DEBUG] [Thread-187068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:35:12.866 [DEBUG] [Thread-187068] [transport.py] [_log()] client lang: <none>
2026-02-14T14:35:12.866 [DEBUG] [Thread-187068] [transport.py] [_log()] server lang: <none>
2026-02-14T14:35:12.866 [DEBUG] [Thread-187068] [transport.py] [_log()] kex follows: False
2026-02-14T14:35:12.866 [DEBUG] [Thread-187068] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:35:12.866 [DEBUG] [Thread-187068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:35:12.867 [DEBUG] [Thread-187068] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:35:12.867 [DEBUG] [Thread-187068] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:35:12.867 [DEBUG] [Thread-187068] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:35:12.867 [DEBUG] [Thread-187068] [transport.py] [_log()] Compression: none
2026-02-14T14:35:12.867 [DEBUG] [Thread-187068] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:35:12.928 [DEBUG] [Thread-187068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:35:12.928 [DEBUG] [Thread-187068] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:35:12.929 [DEBUG] [Thread-187068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:35:12.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:35:12.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:35:12.988 [DEBUG] [Thread-187068] [transport.py] [_log()] userauth is OK
2026-02-14T14:35:12.989 [DEBUG] [Thread-187068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:35:12.989 [DEBUG] [Thread-187068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:35:12.989 [DEBUG] [Thread-187068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:35:12.989 [DEBUG] [Thread-187068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:35:13.014 [INFO] [Thread-187068] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:35:13.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-14T14:35:13.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:35:13.808 [DEBUG] [Thread-187068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:35:13.808 [DEBUG] [Thread-187068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:35:13.856 [DEBUG] [Thread-187068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:35:13.856 [DEBUG] [Thread-187068] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:35:13.865 [DEBUG] [Thread-187068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:35:13.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:35:13.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-14T14:35:13.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:35:13.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:35:13.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:35:13.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:35:13.898 [DEBUG] [Thread-187068] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:35:17.903 [DEBUG] [Thread-187070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:35:26.662 [DEBUG] [Thread-187071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:35:32.952 [DEBUG] [Thread-187072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:35:39.523 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:35:39.523 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:35:43.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:35:43.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:35:43.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-14T14:35:45.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 35, 30), 15.99, 33.67, 0.0, 23.71, 16.45, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:35:45.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:35:30
2026-02-14T14:35:46.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:35:46.325 [DEBUG] [Thread-187073] [transport.py] [_log()] starting thread (client mode): 0xa2d55e70
2026-02-14T14:35:46.326 [DEBUG] [Thread-187073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:35:46.347 [DEBUG] [Thread-187073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:35:46.347 [INFO] [Thread-187073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:35:46.350 [DEBUG] [Thread-187073] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:35:46.350 [DEBUG] [Thread-187073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:35:46.350 [DEBUG] [Thread-187073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:35:46.350 [DEBUG] [Thread-187073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:35:46.350 [DEBUG] [Thread-187073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:35:46.350 [DEBUG] [Thread-187073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:35:46.351 [DEBUG] [Thread-187073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:35:46.351 [DEBUG] [Thread-187073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:35:46.351 [DEBUG] [Thread-187073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:35:46.351 [DEBUG] [Thread-187073] [transport.py] [_log()] client lang: <none>
2026-02-14T14:35:46.351 [DEBUG] [Thread-187073] [transport.py] [_log()] server lang: <none>
2026-02-14T14:35:46.351 [DEBUG] [Thread-187073] [transport.py] [_log()] kex follows: False
2026-02-14T14:35:46.351 [DEBUG] [Thread-187073] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:35:46.351 [DEBUG] [Thread-187073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:35:46.351 [DEBUG] [Thread-187073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:35:46.351 [DEBUG] [Thread-187073] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:35:46.351 [DEBUG] [Thread-187073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:35:46.351 [DEBUG] [Thread-187073] [transport.py] [_log()] Compression: none
2026-02-14T14:35:46.351 [DEBUG] [Thread-187073] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:35:46.367 [DEBUG] [Thread-187073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:35:46.368 [DEBUG] [Thread-187073] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:35:46.368 [DEBUG] [Thread-187073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:35:46.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:35:46.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:35:46.371 [DEBUG] [Thread-187073] [transport.py] [_log()] userauth is OK
2026-02-14T14:35:46.371 [DEBUG] [Thread-187073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:35:46.371 [DEBUG] [Thread-187073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:35:46.371 [DEBUG] [Thread-187073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:35:46.371 [DEBUG] [Thread-187073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:35:46.397 [INFO] [Thread-187073] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:35:46.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:35:47.063 [DEBUG] [Thread-187073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:35:47.063 [DEBUG] [Thread-187073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:35:47.064 [DEBUG] [Thread-187073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:35:47.104 [DEBUG] [Thread-187073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:35:47.105 [DEBUG] [Thread-187073] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:35:47.108 [DEBUG] [Thread-187073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:35:47.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:35:47.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:35:47.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:35:47.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:35:47.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:35:47.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:35:47.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:35:47.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:35:47.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:35:47.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.524414 -999.00  +16.50  24.10     39   +2.80 1 1 1 1 1   888    0 15.02 49.67 ----- 23.3 24.1 159.6 37.0 22.7 -27.1 21.8 -24.3 22.8 -24.8 24.0 -27.0
2026-02-14T14:35:47.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:35:47.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:35:47.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.524414
2026-02-14T14:35:47.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:35:47.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:35:47.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:35:47.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:35:47.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:35:47.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:35:30', tmtdew=15.99, humidity=33.67, cloud=0.0, wind=23.71, temperature=16.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:35:09.370', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:35:47.137 [DEBUG] [Thread-187073] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:35:47.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-14T14:35:47.232 [DEBUG] [Thread-187076] [transport.py] [_log()] starting thread (client mode): 0xa2d558a0
2026-02-14T14:35:47.233 [DEBUG] [Thread-187076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:35:47.247 [DEBUG] [Thread-187076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:35:47.248 [INFO] [Thread-187076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:35:47.255 [DEBUG] [Thread-187076] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:35:47.256 [DEBUG] [Thread-187076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:35:47.256 [DEBUG] [Thread-187076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:35:47.256 [DEBUG] [Thread-187076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:35:47.256 [DEBUG] [Thread-187076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:35:47.256 [DEBUG] [Thread-187076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:35:47.256 [DEBUG] [Thread-187076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:35:47.256 [DEBUG] [Thread-187076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:35:47.256 [DEBUG] [Thread-187076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:35:47.256 [DEBUG] [Thread-187076] [transport.py] [_log()] client lang: <none>
2026-02-14T14:35:47.256 [DEBUG] [Thread-187076] [transport.py] [_log()] server lang: <none>
2026-02-14T14:35:47.256 [DEBUG] [Thread-187076] [transport.py] [_log()] kex follows: False
2026-02-14T14:35:47.256 [DEBUG] [Thread-187076] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:35:47.256 [DEBUG] [Thread-187076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:35:47.256 [DEBUG] [Thread-187076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:35:47.256 [DEBUG] [Thread-187076] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:35:47.256 [DEBUG] [Thread-187076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:35:47.256 [DEBUG] [Thread-187076] [transport.py] [_log()] Compression: none
2026-02-14T14:35:47.257 [DEBUG] [Thread-187076] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:35:47.313 [DEBUG] [Thread-187076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:35:47.314 [DEBUG] [Thread-187076] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:35:47.315 [DEBUG] [Thread-187076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:35:47.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:35:47.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:35:47.373 [DEBUG] [Thread-187076] [transport.py] [_log()] userauth is OK
2026-02-14T14:35:47.374 [DEBUG] [Thread-187076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:35:47.374 [DEBUG] [Thread-187076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:35:47.374 [DEBUG] [Thread-187076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:35:47.374 [DEBUG] [Thread-187076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:35:47.392 [INFO] [Thread-187076] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:35:47.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-14T14:35:47.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:35:47.988 [DEBUG] [Thread-187078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:35:48.245 [DEBUG] [Thread-187076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:35:48.245 [DEBUG] [Thread-187076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:35:48.293 [DEBUG] [Thread-187076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:35:48.293 [DEBUG] [Thread-187076] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:35:48.302 [DEBUG] [Thread-187076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:35:48.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:35:48.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:35:48.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:35:48.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:35:48.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:35:48.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:35:48.337 [DEBUG] [Thread-187076] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:36:03.038 [DEBUG] [Thread-187079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:36:18.077 [DEBUG] [Thread-187080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:36:18.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:36:18.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:36:18.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-14T14:36:20.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 36, 6), 15.77, 34.17, 0.0, 23.48, 16.4, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:36:20.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:36:06
2026-02-14T14:36:20.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:36:20.986 [DEBUG] [Thread-187081] [transport.py] [_log()] starting thread (client mode): 0xa5742ef0
2026-02-14T14:36:20.986 [DEBUG] [Thread-187081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:36:21.006 [DEBUG] [Thread-187081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:36:21.006 [INFO] [Thread-187081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:36:21.009 [DEBUG] [Thread-187081] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:36:21.009 [DEBUG] [Thread-187081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:36:21.009 [DEBUG] [Thread-187081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:36:21.009 [DEBUG] [Thread-187081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:36:21.009 [DEBUG] [Thread-187081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:36:21.009 [DEBUG] [Thread-187081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:36:21.010 [DEBUG] [Thread-187081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:36:21.010 [DEBUG] [Thread-187081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:36:21.010 [DEBUG] [Thread-187081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:36:21.010 [DEBUG] [Thread-187081] [transport.py] [_log()] client lang: <none>
2026-02-14T14:36:21.010 [DEBUG] [Thread-187081] [transport.py] [_log()] server lang: <none>
2026-02-14T14:36:21.010 [DEBUG] [Thread-187081] [transport.py] [_log()] kex follows: False
2026-02-14T14:36:21.010 [DEBUG] [Thread-187081] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:36:21.010 [DEBUG] [Thread-187081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:36:21.010 [DEBUG] [Thread-187081] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:36:21.010 [DEBUG] [Thread-187081] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:36:21.010 [DEBUG] [Thread-187081] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:36:21.010 [DEBUG] [Thread-187081] [transport.py] [_log()] Compression: none
2026-02-14T14:36:21.010 [DEBUG] [Thread-187081] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:36:21.028 [DEBUG] [Thread-187081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:36:21.029 [DEBUG] [Thread-187081] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:36:21.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:36:21.031 [DEBUG] [Thread-187081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:36:21.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:36:21.032 [DEBUG] [Thread-187081] [transport.py] [_log()] userauth is OK
2026-02-14T14:36:21.033 [DEBUG] [Thread-187081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:36:21.033 [DEBUG] [Thread-187081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:36:21.033 [DEBUG] [Thread-187081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:36:21.033 [DEBUG] [Thread-187081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:36:21.057 [INFO] [Thread-187081] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:36:21.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:36:21.710 [DEBUG] [Thread-187081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:36:21.710 [DEBUG] [Thread-187081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:36:21.710 [DEBUG] [Thread-187081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:36:21.751 [DEBUG] [Thread-187081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:36:21.752 [DEBUG] [Thread-187081] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:36:21.755 [DEBUG] [Thread-187081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:36:21.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:36:21.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:36:21.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:36:21.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:36:21.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:36:21.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:36:21.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:36:21.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:36:21.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:36:21.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.525108 -999.00  +16.40  21.25     39   +2.60 1 1 1 1 1   888    0 15.10 47.09 ----- 21.6 21.2 162.4 36.1 22.6 -28.0 21.6 -29.9 22.8 -26.1 23.9 -27.0
2026-02-14T14:36:21.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:36:21.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:36:21.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.525108
2026-02-14T14:36:21.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:36:21.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:36:21.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:36:21.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:36:21.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:36:21.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:36:06', tmtdew=15.77, humidity=34.17, cloud=0.0, wind=23.48, temperature=16.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:36:09.331', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:36:21.781 [DEBUG] [Thread-187081] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:36:21.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-14T14:36:21.876 [DEBUG] [Thread-187084] [transport.py] [_log()] starting thread (client mode): 0xa5759f90
2026-02-14T14:36:21.877 [DEBUG] [Thread-187084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:36:21.891 [DEBUG] [Thread-187084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:36:21.891 [INFO] [Thread-187084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:36:21.900 [DEBUG] [Thread-187084] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:36:21.900 [DEBUG] [Thread-187084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:36:21.900 [DEBUG] [Thread-187084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:36:21.901 [DEBUG] [Thread-187084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:36:21.901 [DEBUG] [Thread-187084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:36:21.901 [DEBUG] [Thread-187084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:36:21.901 [DEBUG] [Thread-187084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:36:21.901 [DEBUG] [Thread-187084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:36:21.901 [DEBUG] [Thread-187084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:36:21.901 [DEBUG] [Thread-187084] [transport.py] [_log()] client lang: <none>
2026-02-14T14:36:21.901 [DEBUG] [Thread-187084] [transport.py] [_log()] server lang: <none>
2026-02-14T14:36:21.901 [DEBUG] [Thread-187084] [transport.py] [_log()] kex follows: False
2026-02-14T14:36:21.901 [DEBUG] [Thread-187084] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:36:21.901 [DEBUG] [Thread-187084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:36:21.901 [DEBUG] [Thread-187084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:36:21.901 [DEBUG] [Thread-187084] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:36:21.901 [DEBUG] [Thread-187084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:36:21.901 [DEBUG] [Thread-187084] [transport.py] [_log()] Compression: none
2026-02-14T14:36:21.901 [DEBUG] [Thread-187084] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:36:21.958 [DEBUG] [Thread-187084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:36:21.958 [DEBUG] [Thread-187084] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:36:21.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:36:21.960 [DEBUG] [Thread-187084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:36:21.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:36:22.014 [DEBUG] [Thread-187084] [transport.py] [_log()] userauth is OK
2026-02-14T14:36:22.015 [DEBUG] [Thread-187084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:36:22.015 [DEBUG] [Thread-187084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:36:22.015 [DEBUG] [Thread-187084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:36:22.015 [DEBUG] [Thread-187084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:36:22.034 [INFO] [Thread-187084] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:36:22.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-14T14:36:22.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:36:22.862 [DEBUG] [Thread-187084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:36:22.862 [DEBUG] [Thread-187084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:36:22.910 [DEBUG] [Thread-187084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:36:22.910 [DEBUG] [Thread-187084] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:36:22.918 [DEBUG] [Thread-187084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:36:22.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:36:22.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-14T14:36:22.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-14T14:36:22.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:36:22.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:36:22.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:36:22.954 [DEBUG] [Thread-187084] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:36:26.700 [DEBUG] [Thread-187086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:36:33.112 [DEBUG] [Thread-187087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:36:39.663 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:36:39.664 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:36:48.161 [DEBUG] [Thread-187088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:36:52.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:36:52.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:36:52.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-14T14:36:54.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 36, 41), 16.33, 33.17, 0.0, 25.51, 17.19, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:36:54.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:36:41
2026-02-14T14:36:55.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:36:55.316 [DEBUG] [Thread-187089] [transport.py] [_log()] starting thread (client mode): 0xa2dddc60
2026-02-14T14:36:55.317 [DEBUG] [Thread-187089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:36:55.337 [DEBUG] [Thread-187089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:36:55.337 [INFO] [Thread-187089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:36:55.340 [DEBUG] [Thread-187089] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:36:55.341 [DEBUG] [Thread-187089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:36:55.341 [DEBUG] [Thread-187089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:36:55.341 [DEBUG] [Thread-187089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:36:55.341 [DEBUG] [Thread-187089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:36:55.341 [DEBUG] [Thread-187089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:36:55.341 [DEBUG] [Thread-187089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:36:55.341 [DEBUG] [Thread-187089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:36:55.341 [DEBUG] [Thread-187089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:36:55.341 [DEBUG] [Thread-187089] [transport.py] [_log()] client lang: <none>
2026-02-14T14:36:55.341 [DEBUG] [Thread-187089] [transport.py] [_log()] server lang: <none>
2026-02-14T14:36:55.342 [DEBUG] [Thread-187089] [transport.py] [_log()] kex follows: False
2026-02-14T14:36:55.342 [DEBUG] [Thread-187089] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:36:55.342 [DEBUG] [Thread-187089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:36:55.342 [DEBUG] [Thread-187089] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:36:55.342 [DEBUG] [Thread-187089] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:36:55.342 [DEBUG] [Thread-187089] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:36:55.342 [DEBUG] [Thread-187089] [transport.py] [_log()] Compression: none
2026-02-14T14:36:55.342 [DEBUG] [Thread-187089] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:36:55.359 [DEBUG] [Thread-187089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:36:55.360 [DEBUG] [Thread-187089] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:36:55.360 [DEBUG] [Thread-187089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:36:55.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:36:55.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:36:55.362 [DEBUG] [Thread-187089] [transport.py] [_log()] userauth is OK
2026-02-14T14:36:55.362 [DEBUG] [Thread-187089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:36:55.362 [DEBUG] [Thread-187089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:36:55.363 [DEBUG] [Thread-187089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:36:55.363 [DEBUG] [Thread-187089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:36:55.386 [INFO] [Thread-187089] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:36:55.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:36:56.026 [DEBUG] [Thread-187089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:36:56.027 [DEBUG] [Thread-187089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:36:56.027 [DEBUG] [Thread-187089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:36:56.067 [DEBUG] [Thread-187089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:36:56.068 [DEBUG] [Thread-187089] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:36:56.071 [DEBUG] [Thread-187089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:36:56.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:36:56.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:36:56.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:36:56.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:36:56.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:36:56.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:36:56.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:36:56.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:36:56.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:36:56.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.525455 -999.00  +16.30  17.67     40   +2.70 1 1 1 1 1   888    0 14.82 46.40 ----- 10.5 17.7 188.2 26.6 22.7 -26.0 21.4 -26.6 22.9 -24.0 24.0 -26.0
2026-02-14T14:36:56.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:36:56.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:36:56.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.525455
2026-02-14T14:36:56.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:36:56.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:36:56.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:36:56.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:36:56.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:36:56.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:36:41', tmtdew=16.33, humidity=33.17, cloud=0.0, wind=25.51, temperature=17.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:36:39.312', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:36:56.094 [DEBUG] [Thread-187089] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:36:56.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-14T14:36:56.191 [DEBUG] [Thread-187092] [transport.py] [_log()] starting thread (client mode): 0xa2d19f60
2026-02-14T14:36:56.191 [DEBUG] [Thread-187092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:36:56.205 [DEBUG] [Thread-187092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:36:56.205 [INFO] [Thread-187092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:36:56.212 [DEBUG] [Thread-187092] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:36:56.212 [DEBUG] [Thread-187092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:36:56.212 [DEBUG] [Thread-187092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:36:56.212 [DEBUG] [Thread-187092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:36:56.212 [DEBUG] [Thread-187092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:36:56.213 [DEBUG] [Thread-187092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:36:56.213 [DEBUG] [Thread-187092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:36:56.213 [DEBUG] [Thread-187092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:36:56.213 [DEBUG] [Thread-187092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:36:56.213 [DEBUG] [Thread-187092] [transport.py] [_log()] client lang: <none>
2026-02-14T14:36:56.213 [DEBUG] [Thread-187092] [transport.py] [_log()] server lang: <none>
2026-02-14T14:36:56.213 [DEBUG] [Thread-187092] [transport.py] [_log()] kex follows: False
2026-02-14T14:36:56.213 [DEBUG] [Thread-187092] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:36:56.213 [DEBUG] [Thread-187092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:36:56.213 [DEBUG] [Thread-187092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:36:56.213 [DEBUG] [Thread-187092] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:36:56.213 [DEBUG] [Thread-187092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:36:56.213 [DEBUG] [Thread-187092] [transport.py] [_log()] Compression: none
2026-02-14T14:36:56.213 [DEBUG] [Thread-187092] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:36:56.274 [DEBUG] [Thread-187092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:36:56.275 [DEBUG] [Thread-187092] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:36:56.275 [DEBUG] [Thread-187092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:36:56.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:36:56.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:36:56.330 [DEBUG] [Thread-187092] [transport.py] [_log()] userauth is OK
2026-02-14T14:36:56.331 [DEBUG] [Thread-187092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:36:56.331 [DEBUG] [Thread-187092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:36:56.331 [DEBUG] [Thread-187092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:36:56.331 [DEBUG] [Thread-187092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:36:56.349 [INFO] [Thread-187092] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:36:56.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-14T14:36:56.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:36:57.152 [DEBUG] [Thread-187092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:36:57.152 [DEBUG] [Thread-187092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:36:57.200 [DEBUG] [Thread-187092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:36:57.200 [DEBUG] [Thread-187092] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:36:57.210 [DEBUG] [Thread-187092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:36:57.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:36:57.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-14T14:36: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') -> 00000000
2026-02-14T14:36:57.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:36:57.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:36:57.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:36:57.246 [DEBUG] [Thread-187092] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:37:03.196 [DEBUG] [Thread-187094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:37:18.247 [DEBUG] [Thread-187095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:37:26.733 [DEBUG] [Thread-187096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:37:27.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:37:27.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:37:27.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-14T14:37:29.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 37, 16), 15.94, 33.83, 0.0, 22.97, 16.63, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:37:29.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:37:16
2026-02-14T14:37:29.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:37:29.630 [DEBUG] [Thread-187097] [transport.py] [_log()] starting thread (client mode): 0xa2d548e0
2026-02-14T14:37:29.630 [DEBUG] [Thread-187097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:37:29.647 [DEBUG] [Thread-187097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:37:29.647 [INFO] [Thread-187097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:37:29.650 [DEBUG] [Thread-187097] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:37:29.650 [DEBUG] [Thread-187097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:37:29.650 [DEBUG] [Thread-187097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:37:29.650 [DEBUG] [Thread-187097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:37:29.650 [DEBUG] [Thread-187097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:37:29.650 [DEBUG] [Thread-187097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:37:29.650 [DEBUG] [Thread-187097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:37:29.650 [DEBUG] [Thread-187097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:37:29.651 [DEBUG] [Thread-187097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:37:29.651 [DEBUG] [Thread-187097] [transport.py] [_log()] client lang: <none>
2026-02-14T14:37:29.651 [DEBUG] [Thread-187097] [transport.py] [_log()] server lang: <none>
2026-02-14T14:37:29.651 [DEBUG] [Thread-187097] [transport.py] [_log()] kex follows: False
2026-02-14T14:37:29.651 [DEBUG] [Thread-187097] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:37:29.651 [DEBUG] [Thread-187097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:37:29.651 [DEBUG] [Thread-187097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:37:29.651 [DEBUG] [Thread-187097] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:37:29.651 [DEBUG] [Thread-187097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:37:29.651 [DEBUG] [Thread-187097] [transport.py] [_log()] Compression: none
2026-02-14T14:37:29.651 [DEBUG] [Thread-187097] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:37:29.669 [DEBUG] [Thread-187097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:37:29.669 [DEBUG] [Thread-187097] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:37:29.670 [DEBUG] [Thread-187097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:37:29.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:37:29.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:37:29.672 [DEBUG] [Thread-187097] [transport.py] [_log()] userauth is OK
2026-02-14T14:37:29.672 [DEBUG] [Thread-187097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:37:29.672 [DEBUG] [Thread-187097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:37:29.672 [DEBUG] [Thread-187097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:37:29.672 [DEBUG] [Thread-187097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:37:29.696 [INFO] [Thread-187097] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:37:29.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:37:30.322 [DEBUG] [Thread-187097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:37:30.322 [DEBUG] [Thread-187097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:37:30.322 [DEBUG] [Thread-187097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:37:30.362 [DEBUG] [Thread-187097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:37:30.362 [DEBUG] [Thread-187097] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:37:30.366 [DEBUG] [Thread-187097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:37:30.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:37:30.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:37:30.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:37:30.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:37:30.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:37:30.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:37:30.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:37:30.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:37:30.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:37:30.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.525802 -999.00  +16.60  25.93     39   +2.90 1 1 1 1 1   888    0 14.88 43.54 ----- 27.2 25.9 167.0 35.0 22.7 -26.0 21.6 -26.9 22.9 -27.2 24.0 -28.3
2026-02-14T14:37:30.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:37:30.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:37:30.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.525802
2026-02-14T14:37:30.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:37:30.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:37:30.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:37:30.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:37:30.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:37:30.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:37:16', tmtdew=15.94, humidity=33.83, cloud=0.0, wind=22.97, temperature=16.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:37:09.293', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:37:30.394 [DEBUG] [Thread-187097] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:37:30.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-14T14:37:30.502 [DEBUG] [Thread-187100] [transport.py] [_log()] starting thread (client mode): 0xa5741570
2026-02-14T14:37:30.502 [DEBUG] [Thread-187100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:37:30.516 [DEBUG] [Thread-187100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:37:30.517 [INFO] [Thread-187100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:37:30.525 [DEBUG] [Thread-187100] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:37:30.525 [DEBUG] [Thread-187100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:37:30.525 [DEBUG] [Thread-187100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:37:30.525 [DEBUG] [Thread-187100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:37:30.525 [DEBUG] [Thread-187100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:37:30.525 [DEBUG] [Thread-187100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:37:30.525 [DEBUG] [Thread-187100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:37:30.525 [DEBUG] [Thread-187100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:37:30.525 [DEBUG] [Thread-187100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:37:30.525 [DEBUG] [Thread-187100] [transport.py] [_log()] client lang: <none>
2026-02-14T14:37:30.525 [DEBUG] [Thread-187100] [transport.py] [_log()] server lang: <none>
2026-02-14T14:37:30.525 [DEBUG] [Thread-187100] [transport.py] [_log()] kex follows: False
2026-02-14T14:37:30.525 [DEBUG] [Thread-187100] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:37:30.525 [DEBUG] [Thread-187100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:37:30.526 [DEBUG] [Thread-187100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:37:30.526 [DEBUG] [Thread-187100] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:37:30.526 [DEBUG] [Thread-187100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:37:30.526 [DEBUG] [Thread-187100] [transport.py] [_log()] Compression: none
2026-02-14T14:37:30.526 [DEBUG] [Thread-187100] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:37:30.583 [DEBUG] [Thread-187100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:37:30.583 [DEBUG] [Thread-187100] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:37:30.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:37:30.585 [DEBUG] [Thread-187100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:37:30.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:37:30.639 [DEBUG] [Thread-187100] [transport.py] [_log()] userauth is OK
2026-02-14T14:37:30.639 [DEBUG] [Thread-187100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:37:30.639 [DEBUG] [Thread-187100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:37:30.639 [DEBUG] [Thread-187100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:37:30.639 [DEBUG] [Thread-187100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:37:30.663 [INFO] [Thread-187100] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:37:30.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-14T14:37:30.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:37:31.484 [DEBUG] [Thread-187100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:37:31.484 [DEBUG] [Thread-187100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:37:31.532 [DEBUG] [Thread-187100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:37:31.533 [DEBUG] [Thread-187100] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:37:31.542 [DEBUG] [Thread-187100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:37:31.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:37:31.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-14T14:37:31.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:37:31.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:37:31.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:37:31.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:37:31.580 [DEBUG] [Thread-187100] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:37:33.280 [DEBUG] [Thread-187102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:37:39.804 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:37:39.805 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:37:48.337 [DEBUG] [Thread-187103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:38:01.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:38:01.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:38:01.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-14T14:38:03.374 [DEBUG] [Thread-187104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:38:03.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 37, 51), 15.87, 33.95, 0.0, 32.15, 16.48, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:38:03.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:37:51
2026-02-14T14:38:04.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:38:04.258 [DEBUG] [Thread-187105] [transport.py] [_log()] starting thread (client mode): 0xa2d1a680
2026-02-14T14:38:04.258 [DEBUG] [Thread-187105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:38:04.281 [DEBUG] [Thread-187105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:38:04.281 [INFO] [Thread-187105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:38:04.285 [DEBUG] [Thread-187105] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:38:04.285 [DEBUG] [Thread-187105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:38:04.285 [DEBUG] [Thread-187105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:38:04.285 [DEBUG] [Thread-187105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:38:04.285 [DEBUG] [Thread-187105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:38:04.285 [DEBUG] [Thread-187105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:38:04.285 [DEBUG] [Thread-187105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:38:04.285 [DEBUG] [Thread-187105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:38:04.285 [DEBUG] [Thread-187105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:38:04.285 [DEBUG] [Thread-187105] [transport.py] [_log()] client lang: <none>
2026-02-14T14:38:04.285 [DEBUG] [Thread-187105] [transport.py] [_log()] server lang: <none>
2026-02-14T14:38:04.285 [DEBUG] [Thread-187105] [transport.py] [_log()] kex follows: False
2026-02-14T14:38:04.286 [DEBUG] [Thread-187105] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:38:04.286 [DEBUG] [Thread-187105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:38:04.286 [DEBUG] [Thread-187105] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:38:04.286 [DEBUG] [Thread-187105] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:38:04.286 [DEBUG] [Thread-187105] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:38:04.286 [DEBUG] [Thread-187105] [transport.py] [_log()] Compression: none
2026-02-14T14:38:04.286 [DEBUG] [Thread-187105] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:38:04.304 [DEBUG] [Thread-187105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:38:04.305 [DEBUG] [Thread-187105] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:38:04.305 [DEBUG] [Thread-187105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:38:04.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:38:04.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:38:04.308 [DEBUG] [Thread-187105] [transport.py] [_log()] userauth is OK
2026-02-14T14:38:04.308 [DEBUG] [Thread-187105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:38:04.308 [DEBUG] [Thread-187105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:38:04.308 [DEBUG] [Thread-187105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:38:04.309 [DEBUG] [Thread-187105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:38:04.332 [INFO] [Thread-187105] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:38:04.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:38:04.981 [DEBUG] [Thread-187105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:38:04.982 [DEBUG] [Thread-187105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:38:04.982 [DEBUG] [Thread-187105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:38:05.023 [DEBUG] [Thread-187105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:38:05.024 [DEBUG] [Thread-187105] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:38:05.027 [DEBUG] [Thread-187105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:38:05.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:38:05.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:38:05.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:38:05.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:38:05.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:38:05.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:38:05.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:38:05.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:38:05.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:38:05.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.526150 -999.00  +16.20  23.57     39   +2.30 1 1 1 1 1   888    0 14.94 45.69 ----- 26.4 23.6 182.0 40.1 22.7 -30.0 21.3 -33.1 22.6 -27.5 23.7 -28.9
2026-02-14T14:38:05.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:38:05.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:38:05.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.526150
2026-02-14T14:38:05.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:38:05.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:38:05.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:38:05.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:38:05.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:38:05.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:37:51', tmtdew=15.87, humidity=33.95, cloud=0.0, wind=32.15, temperature=16.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:37:39.360', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:38:05.052 [DEBUG] [Thread-187105] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:38:05.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-14T14:38:05.147 [DEBUG] [Thread-187108] [transport.py] [_log()] starting thread (client mode): 0xa57402b0
2026-02-14T14:38:05.147 [DEBUG] [Thread-187108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:38:05.163 [DEBUG] [Thread-187108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:38:05.163 [INFO] [Thread-187108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:38:05.170 [DEBUG] [Thread-187108] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:38:05.171 [DEBUG] [Thread-187108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:38:05.171 [DEBUG] [Thread-187108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:38:05.171 [DEBUG] [Thread-187108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:38:05.171 [DEBUG] [Thread-187108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:38:05.171 [DEBUG] [Thread-187108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:38:05.171 [DEBUG] [Thread-187108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:38:05.171 [DEBUG] [Thread-187108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:38:05.171 [DEBUG] [Thread-187108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:38:05.171 [DEBUG] [Thread-187108] [transport.py] [_log()] client lang: <none>
2026-02-14T14:38:05.171 [DEBUG] [Thread-187108] [transport.py] [_log()] server lang: <none>
2026-02-14T14:38:05.171 [DEBUG] [Thread-187108] [transport.py] [_log()] kex follows: False
2026-02-14T14:38:05.171 [DEBUG] [Thread-187108] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:38:05.171 [DEBUG] [Thread-187108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:38:05.171 [DEBUG] [Thread-187108] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:38:05.171 [DEBUG] [Thread-187108] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:38:05.171 [DEBUG] [Thread-187108] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:38:05.171 [DEBUG] [Thread-187108] [transport.py] [_log()] Compression: none
2026-02-14T14:38:05.172 [DEBUG] [Thread-187108] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:38:05.231 [DEBUG] [Thread-187108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:38:05.231 [DEBUG] [Thread-187108] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:38:05.232 [DEBUG] [Thread-187108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:38:05.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:38:05.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:38:05.287 [DEBUG] [Thread-187108] [transport.py] [_log()] userauth is OK
2026-02-14T14:38:05.287 [DEBUG] [Thread-187108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:38:05.287 [DEBUG] [Thread-187108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:38:05.287 [DEBUG] [Thread-187108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:38:05.287 [DEBUG] [Thread-187108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:38:05.307 [INFO] [Thread-187108] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:38:05.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-14T14:38:05.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:38:06.157 [DEBUG] [Thread-187108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:38:06.157 [DEBUG] [Thread-187108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:38:06.205 [DEBUG] [Thread-187108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:38:06.205 [DEBUG] [Thread-187108] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:38:06.213 [DEBUG] [Thread-187108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:38:06.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:38:06.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-14T14:38:06.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-14T14:38:06.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:38:06.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:38:06.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:38:06.248 [DEBUG] [Thread-187108] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:38:18.411 [DEBUG] [Thread-187110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:38:26.789 [DEBUG] [Thread-187111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:38:33.466 [DEBUG] [Thread-187112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:38:36.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:38:36.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:38:36.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-14T14:38:38.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 38, 27), 15.99, 33.67, 0.0, 35.92, 16.46, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:38:38.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:38:27
2026-02-14T14:38:38.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:38:38.631 [DEBUG] [Thread-187113] [transport.py] [_log()] starting thread (client mode): 0xa2ddff10
2026-02-14T14:38:38.632 [DEBUG] [Thread-187113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:38:38.652 [DEBUG] [Thread-187113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:38:38.652 [INFO] [Thread-187113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:38:38.655 [DEBUG] [Thread-187113] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:38:38.655 [DEBUG] [Thread-187113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:38:38.655 [DEBUG] [Thread-187113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:38:38.656 [DEBUG] [Thread-187113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:38:38.656 [DEBUG] [Thread-187113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:38:38.656 [DEBUG] [Thread-187113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:38:38.656 [DEBUG] [Thread-187113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:38:38.656 [DEBUG] [Thread-187113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:38:38.656 [DEBUG] [Thread-187113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:38:38.656 [DEBUG] [Thread-187113] [transport.py] [_log()] client lang: <none>
2026-02-14T14:38:38.656 [DEBUG] [Thread-187113] [transport.py] [_log()] server lang: <none>
2026-02-14T14:38:38.656 [DEBUG] [Thread-187113] [transport.py] [_log()] kex follows: False
2026-02-14T14:38:38.656 [DEBUG] [Thread-187113] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:38:38.656 [DEBUG] [Thread-187113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:38:38.656 [DEBUG] [Thread-187113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:38:38.656 [DEBUG] [Thread-187113] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:38:38.656 [DEBUG] [Thread-187113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:38:38.656 [DEBUG] [Thread-187113] [transport.py] [_log()] Compression: none
2026-02-14T14:38:38.657 [DEBUG] [Thread-187113] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:38:38.676 [DEBUG] [Thread-187113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:38:38.677 [DEBUG] [Thread-187113] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:38:38.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:38:38.678 [DEBUG] [Thread-187113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:38:38.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:38:38.680 [DEBUG] [Thread-187113] [transport.py] [_log()] userauth is OK
2026-02-14T14:38:38.680 [DEBUG] [Thread-187113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:38:38.681 [DEBUG] [Thread-187113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:38:38.681 [DEBUG] [Thread-187113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:38:38.681 [DEBUG] [Thread-187113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:38:38.706 [INFO] [Thread-187113] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:38:38.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:38:39.301 [DEBUG] [Thread-187113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:38:39.301 [DEBUG] [Thread-187113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:38:39.301 [DEBUG] [Thread-187113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:38:39.342 [DEBUG] [Thread-187113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:38:39.342 [DEBUG] [Thread-187113] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:38:39.346 [DEBUG] [Thread-187113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:38:39.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:38:39.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:38:39.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:38:39.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:38:39.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:38:39.369 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:38:39.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:38:39.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:38:39.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:38:39.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.526497 -999.00  +16.20  26.22     39   +2.20 1 1 1 1 1   888    0 15.19 44.59 ----- 29.8 26.2 188.4 40.7 22.4 -29.6 21.0 -33.2 22.4 -27.3 23.5 -29.5
2026-02-14T14:38:39.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:38:39.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:38:39.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.526497
2026-02-14T14:38:39.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:38:39.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:38:39.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:38:39.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:38:39.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:38:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:38:27', tmtdew=15.99, humidity=33.67, cloud=0.0, wind=35.92, temperature=16.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:38:09.341', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:38:39.372 [DEBUG] [Thread-187113] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:38:39.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-14T14:38:39.468 [DEBUG] [Thread-187116] [transport.py] [_log()] starting thread (client mode): 0xa2d21c90
2026-02-14T14:38:39.468 [DEBUG] [Thread-187116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:38:39.483 [DEBUG] [Thread-187116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:38:39.483 [INFO] [Thread-187116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:38:39.491 [DEBUG] [Thread-187116] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:38:39.491 [DEBUG] [Thread-187116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:38:39.491 [DEBUG] [Thread-187116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:38:39.491 [DEBUG] [Thread-187116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:38:39.491 [DEBUG] [Thread-187116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:38:39.491 [DEBUG] [Thread-187116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:38:39.491 [DEBUG] [Thread-187116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:38:39.491 [DEBUG] [Thread-187116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:38:39.491 [DEBUG] [Thread-187116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:38:39.491 [DEBUG] [Thread-187116] [transport.py] [_log()] client lang: <none>
2026-02-14T14:38:39.491 [DEBUG] [Thread-187116] [transport.py] [_log()] server lang: <none>
2026-02-14T14:38:39.491 [DEBUG] [Thread-187116] [transport.py] [_log()] kex follows: False
2026-02-14T14:38:39.491 [DEBUG] [Thread-187116] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:38:39.491 [DEBUG] [Thread-187116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:38:39.492 [DEBUG] [Thread-187116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:38:39.492 [DEBUG] [Thread-187116] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:38:39.492 [DEBUG] [Thread-187116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:38:39.492 [DEBUG] [Thread-187116] [transport.py] [_log()] Compression: none
2026-02-14T14:38:39.492 [DEBUG] [Thread-187116] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:38:39.551 [DEBUG] [Thread-187116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:38:39.552 [DEBUG] [Thread-187116] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:38:39.552 [DEBUG] [Thread-187116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:38:39.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:38:39.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:38:39.607 [DEBUG] [Thread-187116] [transport.py] [_log()] userauth is OK
2026-02-14T14:38:39.608 [DEBUG] [Thread-187116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:38:39.608 [DEBUG] [Thread-187116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:38:39.608 [DEBUG] [Thread-187116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:38:39.608 [DEBUG] [Thread-187116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:38:39.626 [INFO] [Thread-187116] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:38:39.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-14T14:38:39.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:38:39.944 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:38:39.946 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:38:40.476 [DEBUG] [Thread-187116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:38:40.477 [DEBUG] [Thread-187116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:38:40.525 [DEBUG] [Thread-187116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:38:40.525 [DEBUG] [Thread-187116] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:38:40.535 [DEBUG] [Thread-187116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:38:40.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:38:40.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-14T14:38:40.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-14T14:38:40.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:38:40.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:38:40.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:38:40.574 [DEBUG] [Thread-187116] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:38:48.503 [DEBUG] [Thread-187118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:39:03.557 [DEBUG] [Thread-187119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:39:10.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:39:10.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:39:10.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-14T14:39:12.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 39, 4), 16.16, 33.31, 0.0, 34.23, 16.54, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:39:12.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:39:04
2026-02-14T14:39:12.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:39:13.053 [DEBUG] [Thread-187120] [transport.py] [_log()] starting thread (client mode): 0xa2d3c970
2026-02-14T14:39:13.053 [DEBUG] [Thread-187120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:39:13.073 [DEBUG] [Thread-187120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:39:13.073 [INFO] [Thread-187120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:39:13.077 [DEBUG] [Thread-187120] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:39:13.082 [DEBUG] [Thread-187120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:39:13.082 [DEBUG] [Thread-187120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:39:13.082 [DEBUG] [Thread-187120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:39:13.083 [DEBUG] [Thread-187120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:39:13.083 [DEBUG] [Thread-187120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:39:13.083 [DEBUG] [Thread-187120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:39:13.083 [DEBUG] [Thread-187120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:39:13.083 [DEBUG] [Thread-187120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:39:13.083 [DEBUG] [Thread-187120] [transport.py] [_log()] client lang: <none>
2026-02-14T14:39:13.083 [DEBUG] [Thread-187120] [transport.py] [_log()] server lang: <none>
2026-02-14T14:39:13.083 [DEBUG] [Thread-187120] [transport.py] [_log()] kex follows: False
2026-02-14T14:39:13.083 [DEBUG] [Thread-187120] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:39:13.083 [DEBUG] [Thread-187120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:39:13.083 [DEBUG] [Thread-187120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:39:13.083 [DEBUG] [Thread-187120] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:39:13.083 [DEBUG] [Thread-187120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:39:13.083 [DEBUG] [Thread-187120] [transport.py] [_log()] Compression: none
2026-02-14T14:39:13.083 [DEBUG] [Thread-187120] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:39:13.101 [DEBUG] [Thread-187120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:39:13.101 [DEBUG] [Thread-187120] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:39:13.102 [DEBUG] [Thread-187120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:39:13.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:39:13.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:39:13.104 [DEBUG] [Thread-187120] [transport.py] [_log()] userauth is OK
2026-02-14T14:39:13.104 [DEBUG] [Thread-187120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:39:13.104 [DEBUG] [Thread-187120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:39:13.104 [DEBUG] [Thread-187120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:39:13.104 [DEBUG] [Thread-187120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:39:13.138 [INFO] [Thread-187120] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:39:13.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:39:13.780 [DEBUG] [Thread-187120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:39:13.781 [DEBUG] [Thread-187120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:39:13.781 [DEBUG] [Thread-187120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:39:13.821 [DEBUG] [Thread-187120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:39:13.821 [DEBUG] [Thread-187120] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:39:13.824 [DEBUG] [Thread-187120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:39:13.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:39:13.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:39:13.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:39:13.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:39:13.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:39:13.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:39:13.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:39:13.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:39:13.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:39:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.526844 -999.00  +16.00  26.98     38   +2.00 1 1 1 1 1   888    0 15.04 44.02 ----- 26.9 27.0 165.8 41.0 22.2 -29.0 20.9 -32.7 22.5 -25.9 23.6 -27.1
2026-02-14T14:39:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:39:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:39:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.526844
2026-02-14T14:39:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:39:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:39:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:39:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:39:13.850 [DEBUG] [Thread-187120] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:39:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:39:13.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:39:04', tmtdew=16.16, humidity=33.31, cloud=0.0, wind=34.23, temperature=16.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:38:39.322', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:39:13.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T14:39:13.945 [DEBUG] [Thread-187123] [transport.py] [_log()] starting thread (client mode): 0xa2d3c880
2026-02-14T14:39:13.945 [DEBUG] [Thread-187123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:39:13.959 [DEBUG] [Thread-187123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:39:13.959 [INFO] [Thread-187123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:39:13.966 [DEBUG] [Thread-187123] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:39:13.967 [DEBUG] [Thread-187123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:39:13.967 [DEBUG] [Thread-187123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:39:13.967 [DEBUG] [Thread-187123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:39:13.967 [DEBUG] [Thread-187123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:39:13.967 [DEBUG] [Thread-187123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:39:13.967 [DEBUG] [Thread-187123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:39:13.967 [DEBUG] [Thread-187123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:39:13.967 [DEBUG] [Thread-187123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:39:13.967 [DEBUG] [Thread-187123] [transport.py] [_log()] client lang: <none>
2026-02-14T14:39:13.967 [DEBUG] [Thread-187123] [transport.py] [_log()] server lang: <none>
2026-02-14T14:39:13.967 [DEBUG] [Thread-187123] [transport.py] [_log()] kex follows: False
2026-02-14T14:39:13.967 [DEBUG] [Thread-187123] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:39:13.967 [DEBUG] [Thread-187123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:39:13.967 [DEBUG] [Thread-187123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:39:13.967 [DEBUG] [Thread-187123] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:39:13.967 [DEBUG] [Thread-187123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:39:13.967 [DEBUG] [Thread-187123] [transport.py] [_log()] Compression: none
2026-02-14T14:39:13.967 [DEBUG] [Thread-187123] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:39:14.023 [DEBUG] [Thread-187123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:39:14.024 [DEBUG] [Thread-187123] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:39:14.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:39:14.025 [DEBUG] [Thread-187123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:39:14.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:39:14.080 [DEBUG] [Thread-187123] [transport.py] [_log()] userauth is OK
2026-02-14T14:39:14.080 [DEBUG] [Thread-187123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:39:14.080 [DEBUG] [Thread-187123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:39:14.080 [DEBUG] [Thread-187123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:39:14.080 [DEBUG] [Thread-187123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:39:14.099 [INFO] [Thread-187123] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:39:14.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-14T14:39:14.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:39:14.908 [DEBUG] [Thread-187123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:39:14.909 [DEBUG] [Thread-187123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:39:14.960 [DEBUG] [Thread-187123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:39:14.960 [DEBUG] [Thread-187123] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:39:14.972 [DEBUG] [Thread-187123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:39:14.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:39:14.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:39:14.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:39:15.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:39:15.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:39:15.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:39:15.009 [DEBUG] [Thread-187123] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:39:18.597 [DEBUG] [Thread-187125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:39:26.854 [DEBUG] [Thread-187126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:39:33.648 [DEBUG] [Thread-187127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:39:40.085 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:39:40.086 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:39:45.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:39:45.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:39:45.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-14T14:39:47.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 39, 4), 16.16, 33.31, 0.0, 34.23, 16.54, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:39:47.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:39:04
2026-02-14T14:39:47.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:39:47.639 [DEBUG] [Thread-187128] [transport.py] [_log()] starting thread (client mode): 0xa2d56710
2026-02-14T14:39:47.639 [DEBUG] [Thread-187128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:39:47.660 [DEBUG] [Thread-187128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:39:47.661 [INFO] [Thread-187128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:39:47.662 [DEBUG] [Thread-187128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:39:47.662 [DEBUG] [Thread-187128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:39:47.662 [DEBUG] [Thread-187128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:39:47.662 [DEBUG] [Thread-187128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:39:47.662 [DEBUG] [Thread-187128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:39:47.662 [DEBUG] [Thread-187128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:39:47.662 [DEBUG] [Thread-187128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:39:47.662 [DEBUG] [Thread-187128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:39:47.662 [DEBUG] [Thread-187128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:39:47.662 [DEBUG] [Thread-187128] [transport.py] [_log()] client lang: <none>
2026-02-14T14:39:47.662 [DEBUG] [Thread-187128] [transport.py] [_log()] server lang: <none>
2026-02-14T14:39:47.662 [DEBUG] [Thread-187128] [transport.py] [_log()] kex follows: False
2026-02-14T14:39:47.662 [DEBUG] [Thread-187128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:39:47.662 [DEBUG] [Thread-187128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:39:47.662 [DEBUG] [Thread-187128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:39:47.663 [DEBUG] [Thread-187128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:39:47.663 [DEBUG] [Thread-187128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:39:47.663 [DEBUG] [Thread-187128] [transport.py] [_log()] Compression: none
2026-02-14T14:39:47.663 [DEBUG] [Thread-187128] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:39:47.670 [DEBUG] [Thread-187128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:39:47.670 [DEBUG] [Thread-187128] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:39:47.671 [DEBUG] [Thread-187128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:39:47.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:39:47.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:39:47.672 [DEBUG] [Thread-187128] [transport.py] [_log()] userauth is OK
2026-02-14T14:39:47.672 [DEBUG] [Thread-187128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:39:47.672 [DEBUG] [Thread-187128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:39:47.672 [DEBUG] [Thread-187128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:39:47.672 [DEBUG] [Thread-187128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:39:47.684 [INFO] [Thread-187128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:39:47.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:39:48.336 [DEBUG] [Thread-187128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:39:48.337 [DEBUG] [Thread-187128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:39:48.337 [DEBUG] [Thread-187128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:39:48.377 [DEBUG] [Thread-187128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:39:48.378 [DEBUG] [Thread-187128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:39:48.381 [DEBUG] [Thread-187128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:39:48.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:39:48.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:39:48.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:39:48.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:39:48.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:39:48.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:39:48.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:39:48.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:39:48.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:39:48.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.527191 -999.00  +16.00  30.30     37   +1.40 1 1 2 1 1   888    0 14.73 44.25 ----- 26.2 30.3 183.0 40.9 22.3 -27.2 21.2 -29.2 22.4 -25.3 23.5 -27.8
2026-02-14T14:39:48.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:39:48.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:39:48.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.527191
2026-02-14T14:39:48.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:39:48.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:39:48.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:39:48.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:39:48.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:39:48.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:39:04', tmtdew=16.16, humidity=33.31, cloud=0.0, wind=34.23, temperature=16.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:39:09.302', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:39:48.407 [DEBUG] [Thread-187128] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:39:48.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-14T14:39:48.503 [DEBUG] [Thread-187131] [transport.py] [_log()] starting thread (client mode): 0xa5740970
2026-02-14T14:39:48.503 [DEBUG] [Thread-187131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:39:48.517 [DEBUG] [Thread-187131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:39:48.517 [INFO] [Thread-187131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:39:48.525 [DEBUG] [Thread-187131] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:39:48.525 [DEBUG] [Thread-187131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:39:48.525 [DEBUG] [Thread-187131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:39:48.525 [DEBUG] [Thread-187131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:39:48.525 [DEBUG] [Thread-187131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:39:48.525 [DEBUG] [Thread-187131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:39:48.525 [DEBUG] [Thread-187131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:39:48.525 [DEBUG] [Thread-187131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:39:48.525 [DEBUG] [Thread-187131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:39:48.525 [DEBUG] [Thread-187131] [transport.py] [_log()] client lang: <none>
2026-02-14T14:39:48.525 [DEBUG] [Thread-187131] [transport.py] [_log()] server lang: <none>
2026-02-14T14:39:48.525 [DEBUG] [Thread-187131] [transport.py] [_log()] kex follows: False
2026-02-14T14:39:48.525 [DEBUG] [Thread-187131] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:39:48.525 [DEBUG] [Thread-187131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:39:48.525 [DEBUG] [Thread-187131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:39:48.525 [DEBUG] [Thread-187131] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:39:48.525 [DEBUG] [Thread-187131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:39:48.525 [DEBUG] [Thread-187131] [transport.py] [_log()] Compression: none
2026-02-14T14:39:48.526 [DEBUG] [Thread-187131] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:39:48.586 [DEBUG] [Thread-187131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:39:48.586 [DEBUG] [Thread-187131] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:39:48.586 [DEBUG] [Thread-187131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:39:48.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:39:48.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:39:48.643 [DEBUG] [Thread-187131] [transport.py] [_log()] userauth is OK
2026-02-14T14:39:48.643 [DEBUG] [Thread-187131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:39:48.643 [DEBUG] [Thread-187131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:39:48.643 [DEBUG] [Thread-187131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:39:48.644 [DEBUG] [Thread-187131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:39:48.661 [INFO] [Thread-187131] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:39:48.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-14T14:39:48.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:39:48.684 [DEBUG] [Thread-187133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:39:49.508 [DEBUG] [Thread-187131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:39:49.508 [DEBUG] [Thread-187131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:39:49.556 [DEBUG] [Thread-187131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:39:49.556 [DEBUG] [Thread-187131] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:39:49.565 [DEBUG] [Thread-187131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:39:49.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:39:49.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-14T14:39:49.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-14T14:39:49.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:39:49.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:39:49.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:39:49.602 [DEBUG] [Thread-187131] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:40:03.725 [DEBUG] [Thread-187134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:40:18.759 [DEBUG] [Thread-187135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:40:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:40:19.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:40:19.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-14T14:40:21.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 39, 39), 18.01, 29.65, 0.0, 31.58, 18.22, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:40:21.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:39:39
2026-02-14T14:40:22.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:40:22.484 [DEBUG] [Thread-187136] [transport.py] [_log()] starting thread (client mode): 0xa2ddc040
2026-02-14T14:40:22.484 [DEBUG] [Thread-187136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:40:22.504 [DEBUG] [Thread-187136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:40:22.504 [INFO] [Thread-187136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:40:22.507 [DEBUG] [Thread-187136] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:40:22.507 [DEBUG] [Thread-187136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:40:22.507 [DEBUG] [Thread-187136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:40:22.507 [DEBUG] [Thread-187136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:40:22.507 [DEBUG] [Thread-187136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:40:22.507 [DEBUG] [Thread-187136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:40:22.507 [DEBUG] [Thread-187136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:40:22.508 [DEBUG] [Thread-187136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:40:22.508 [DEBUG] [Thread-187136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:40:22.508 [DEBUG] [Thread-187136] [transport.py] [_log()] client lang: <none>
2026-02-14T14:40:22.508 [DEBUG] [Thread-187136] [transport.py] [_log()] server lang: <none>
2026-02-14T14:40:22.508 [DEBUG] [Thread-187136] [transport.py] [_log()] kex follows: False
2026-02-14T14:40:22.508 [DEBUG] [Thread-187136] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:40:22.508 [DEBUG] [Thread-187136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:40:22.508 [DEBUG] [Thread-187136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:40:22.508 [DEBUG] [Thread-187136] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:40:22.508 [DEBUG] [Thread-187136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:40:22.508 [DEBUG] [Thread-187136] [transport.py] [_log()] Compression: none
2026-02-14T14:40:22.508 [DEBUG] [Thread-187136] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:40:22.525 [DEBUG] [Thread-187136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:40:22.526 [DEBUG] [Thread-187136] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:40:22.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:40:22.527 [DEBUG] [Thread-187136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:40:22.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:40:22.529 [DEBUG] [Thread-187136] [transport.py] [_log()] userauth is OK
2026-02-14T14:40:22.530 [DEBUG] [Thread-187136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:40:22.530 [DEBUG] [Thread-187136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:40:22.530 [DEBUG] [Thread-187136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:40:22.530 [DEBUG] [Thread-187136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:40:22.553 [INFO] [Thread-187136] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:40:22.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:40:23.355 [DEBUG] [Thread-187136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:40:23.355 [DEBUG] [Thread-187136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:40:23.356 [DEBUG] [Thread-187136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:40:23.396 [DEBUG] [Thread-187136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:40:23.396 [DEBUG] [Thread-187136] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:40:23.399 [DEBUG] [Thread-187136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:40:23.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:40:23.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:40:23.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:40:23.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:40:23.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:40:23.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:40:23.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:40:23.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:40:23.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:40:23.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.527538 -999.00  +16.20  26.91     37   +1.60 1 1 1 1 1   888    0 14.89 43.48 ----- 29.0 26.9 180.5 35.9 22.2 -29.1 20.9 -31.9 22.4 -27.8 23.4 -29.8
2026-02-14T14:40:23.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:40:23.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:40:23.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.527538
2026-02-14T14:40:23.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:40:23.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:40:23.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:40:23.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:40:23.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:40:23.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:39:39', tmtdew=18.01, humidity=29.65, cloud=0.0, wind=31.58, temperature=18.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:39:39.283', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:40:23.426 [DEBUG] [Thread-187136] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:40:23.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-14T14:40:23.520 [DEBUG] [Thread-187139] [transport.py] [_log()] starting thread (client mode): 0xa2dded70
2026-02-14T14:40:23.520 [DEBUG] [Thread-187139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:40:23.534 [DEBUG] [Thread-187139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:40:23.535 [INFO] [Thread-187139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:40:23.542 [DEBUG] [Thread-187139] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:40:23.542 [DEBUG] [Thread-187139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:40:23.542 [DEBUG] [Thread-187139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:40:23.542 [DEBUG] [Thread-187139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:40:23.543 [DEBUG] [Thread-187139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:40:23.543 [DEBUG] [Thread-187139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:40:23.543 [DEBUG] [Thread-187139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:40:23.543 [DEBUG] [Thread-187139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:40:23.543 [DEBUG] [Thread-187139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:40:23.543 [DEBUG] [Thread-187139] [transport.py] [_log()] client lang: <none>
2026-02-14T14:40:23.543 [DEBUG] [Thread-187139] [transport.py] [_log()] server lang: <none>
2026-02-14T14:40:23.543 [DEBUG] [Thread-187139] [transport.py] [_log()] kex follows: False
2026-02-14T14:40:23.543 [DEBUG] [Thread-187139] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:40:23.543 [DEBUG] [Thread-187139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:40:23.543 [DEBUG] [Thread-187139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:40:23.543 [DEBUG] [Thread-187139] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:40:23.543 [DEBUG] [Thread-187139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:40:23.543 [DEBUG] [Thread-187139] [transport.py] [_log()] Compression: none
2026-02-14T14:40:23.543 [DEBUG] [Thread-187139] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:40:23.599 [DEBUG] [Thread-187139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:40:23.600 [DEBUG] [Thread-187139] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:40:23.600 [DEBUG] [Thread-187139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:40:23.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:40:23.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:40:23.656 [DEBUG] [Thread-187139] [transport.py] [_log()] userauth is OK
2026-02-14T14:40:23.656 [DEBUG] [Thread-187139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:40:23.656 [DEBUG] [Thread-187139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:40:23.657 [DEBUG] [Thread-187139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:40:23.657 [DEBUG] [Thread-187139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:40:23.675 [INFO] [Thread-187139] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:40:23.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-14T14:40:23.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:40:24.509 [DEBUG] [Thread-187139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:40:24.509 [DEBUG] [Thread-187139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:40:24.557 [DEBUG] [Thread-187139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:40:24.557 [DEBUG] [Thread-187139] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:40:24.567 [DEBUG] [Thread-187139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:40:24.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:40:24.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-14T14:40:24.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-14T14:40:24.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:40:24.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:40:24.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:40:24.603 [DEBUG] [Thread-187139] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:40:26.893 [DEBUG] [Thread-187141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:40:33.796 [DEBUG] [Thread-187142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:40:40.228 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:40:40.229 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:40:48.865 [DEBUG] [Thread-187143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:40:54.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:40:54.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:40:54.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-14T14:40:56.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 40, 15), 16.99, 31.73, 0.0, 33.7, 16.36, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:40:56.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:40:15
2026-02-14T14:40:57.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:40:57.163 [DEBUG] [Thread-187144] [transport.py] [_log()] starting thread (client mode): 0xa2dea200
2026-02-14T14:40:57.163 [DEBUG] [Thread-187144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:40:57.183 [DEBUG] [Thread-187144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:40:57.183 [INFO] [Thread-187144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:40:57.186 [DEBUG] [Thread-187144] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:40:57.186 [DEBUG] [Thread-187144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:40:57.186 [DEBUG] [Thread-187144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:40:57.186 [DEBUG] [Thread-187144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:40:57.187 [DEBUG] [Thread-187144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:40:57.187 [DEBUG] [Thread-187144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:40:57.187 [DEBUG] [Thread-187144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:40:57.187 [DEBUG] [Thread-187144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:40:57.187 [DEBUG] [Thread-187144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:40:57.187 [DEBUG] [Thread-187144] [transport.py] [_log()] client lang: <none>
2026-02-14T14:40:57.187 [DEBUG] [Thread-187144] [transport.py] [_log()] server lang: <none>
2026-02-14T14:40:57.187 [DEBUG] [Thread-187144] [transport.py] [_log()] kex follows: False
2026-02-14T14:40:57.187 [DEBUG] [Thread-187144] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:40:57.187 [DEBUG] [Thread-187144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:40:57.187 [DEBUG] [Thread-187144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:40:57.187 [DEBUG] [Thread-187144] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:40:57.187 [DEBUG] [Thread-187144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:40:57.187 [DEBUG] [Thread-187144] [transport.py] [_log()] Compression: none
2026-02-14T14:40:57.187 [DEBUG] [Thread-187144] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:40:57.204 [DEBUG] [Thread-187144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:40:57.205 [DEBUG] [Thread-187144] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:40:57.205 [DEBUG] [Thread-187144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:40:57.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:40:57.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:40:57.207 [DEBUG] [Thread-187144] [transport.py] [_log()] userauth is OK
2026-02-14T14:40:57.207 [DEBUG] [Thread-187144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:40:57.207 [DEBUG] [Thread-187144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:40:57.208 [DEBUG] [Thread-187144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:40:57.208 [DEBUG] [Thread-187144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:40:57.244 [INFO] [Thread-187144] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:40:57.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:40:57.875 [DEBUG] [Thread-187144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:40:57.876 [DEBUG] [Thread-187144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:40:57.876 [DEBUG] [Thread-187144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:40:57.916 [DEBUG] [Thread-187144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:40:57.917 [DEBUG] [Thread-187144] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:40:57.920 [DEBUG] [Thread-187144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:40:57.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:40:57.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:40:57.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:40:57.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:40:57.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:40:57.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:40:57.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:40:57.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:40:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:40:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.527885 -999.00  +16.20  20.69     37   +1.70 1 1 1 1 1   888    0 15.31 48.86 ----- 23.4 20.7 176.9 34.4 22.1 -28.5 20.8 -31.8 22.5 -27.0 23.5 -27.9
2026-02-14T14:40:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:40:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:40:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.527885
2026-02-14T14:40:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:40:57.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:40:57.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:40:57.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:40:57.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:40:57.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:40:15', tmtdew=16.99, humidity=31.73, cloud=0.0, wind=33.7, temperature=16.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:40:09.264', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:40:57.946 [DEBUG] [Thread-187144] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:40:58.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-14T14:40:58.042 [DEBUG] [Thread-187147] [transport.py] [_log()] starting thread (client mode): 0xa2ddc040
2026-02-14T14:40:58.043 [DEBUG] [Thread-187147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:40:58.057 [DEBUG] [Thread-187147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:40:58.057 [INFO] [Thread-187147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:40:58.064 [DEBUG] [Thread-187147] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:40:58.065 [DEBUG] [Thread-187147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:40:58.065 [DEBUG] [Thread-187147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:40:58.065 [DEBUG] [Thread-187147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:40:58.065 [DEBUG] [Thread-187147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:40:58.065 [DEBUG] [Thread-187147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:40:58.066 [DEBUG] [Thread-187147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:40:58.066 [DEBUG] [Thread-187147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:40:58.066 [DEBUG] [Thread-187147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:40:58.066 [DEBUG] [Thread-187147] [transport.py] [_log()] client lang: <none>
2026-02-14T14:40:58.066 [DEBUG] [Thread-187147] [transport.py] [_log()] server lang: <none>
2026-02-14T14:40:58.066 [DEBUG] [Thread-187147] [transport.py] [_log()] kex follows: False
2026-02-14T14:40:58.066 [DEBUG] [Thread-187147] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:40:58.066 [DEBUG] [Thread-187147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:40:58.066 [DEBUG] [Thread-187147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:40:58.066 [DEBUG] [Thread-187147] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:40:58.066 [DEBUG] [Thread-187147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:40:58.066 [DEBUG] [Thread-187147] [transport.py] [_log()] Compression: none
2026-02-14T14:40:58.066 [DEBUG] [Thread-187147] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:40:58.124 [DEBUG] [Thread-187147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:40:58.125 [DEBUG] [Thread-187147] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:40:58.125 [DEBUG] [Thread-187147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:40:58.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:40:58.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:40:58.180 [DEBUG] [Thread-187147] [transport.py] [_log()] userauth is OK
2026-02-14T14:40:58.180 [DEBUG] [Thread-187147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:40:58.181 [DEBUG] [Thread-187147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:40:58.181 [DEBUG] [Thread-187147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:40:58.181 [DEBUG] [Thread-187147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:40:58.203 [INFO] [Thread-187147] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:40:58.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-14T14:40:58.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:40:59.048 [DEBUG] [Thread-187147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:40:59.049 [DEBUG] [Thread-187147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:40:59.096 [DEBUG] [Thread-187147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:40:59.096 [DEBUG] [Thread-187147] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:40:59.106 [DEBUG] [Thread-187147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:40:59.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:40:59.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-14T14:40:59.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-14T14:40:59.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:40:59.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:40:59.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:40:59.142 [DEBUG] [Thread-187147] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:41:03.903 [DEBUG] [Thread-187149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:41:18.952 [DEBUG] [Thread-187150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:41:26.930 [DEBUG] [Thread-187151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:41:29.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:41:29.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:41:29.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:41:31.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 40, 50), 16.95, 31.51, 0.0, 30.42, 16.56, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:41:31.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:40:50
2026-02-14T14:41:31.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:41:31.884 [DEBUG] [Thread-187152] [transport.py] [_log()] starting thread (client mode): 0xa2dc1540
2026-02-14T14:41:31.885 [DEBUG] [Thread-187152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:41:31.905 [DEBUG] [Thread-187152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:41:31.905 [INFO] [Thread-187152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:41:31.908 [DEBUG] [Thread-187152] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:41:31.908 [DEBUG] [Thread-187152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:41:31.908 [DEBUG] [Thread-187152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:41:31.908 [DEBUG] [Thread-187152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:41:31.908 [DEBUG] [Thread-187152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:41:31.909 [DEBUG] [Thread-187152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:41:31.909 [DEBUG] [Thread-187152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:41:31.909 [DEBUG] [Thread-187152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:41:31.909 [DEBUG] [Thread-187152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:41:31.909 [DEBUG] [Thread-187152] [transport.py] [_log()] client lang: <none>
2026-02-14T14:41:31.909 [DEBUG] [Thread-187152] [transport.py] [_log()] server lang: <none>
2026-02-14T14:41:31.909 [DEBUG] [Thread-187152] [transport.py] [_log()] kex follows: False
2026-02-14T14:41:31.909 [DEBUG] [Thread-187152] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:41:31.909 [DEBUG] [Thread-187152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:41:31.909 [DEBUG] [Thread-187152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:41:31.909 [DEBUG] [Thread-187152] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:41:31.909 [DEBUG] [Thread-187152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:41:31.909 [DEBUG] [Thread-187152] [transport.py] [_log()] Compression: none
2026-02-14T14:41:31.909 [DEBUG] [Thread-187152] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:41:31.925 [DEBUG] [Thread-187152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:41:31.925 [DEBUG] [Thread-187152] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:41:31.926 [DEBUG] [Thread-187152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:41:31.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:41:31.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:41:31.928 [DEBUG] [Thread-187152] [transport.py] [_log()] userauth is OK
2026-02-14T14:41:31.928 [DEBUG] [Thread-187152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:41:31.928 [DEBUG] [Thread-187152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:41:31.928 [DEBUG] [Thread-187152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:41:31.929 [DEBUG] [Thread-187152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:41:31.964 [INFO] [Thread-187152] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:41:31.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:41:32.617 [DEBUG] [Thread-187152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:41:32.617 [DEBUG] [Thread-187152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:41:32.617 [DEBUG] [Thread-187152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:41:32.658 [DEBUG] [Thread-187152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:41:32.658 [DEBUG] [Thread-187152] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:41:32.660 [DEBUG] [Thread-187152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:41:32.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:41:32.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:41:32.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:41:32.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:41:32.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:41:32.681 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:41:32.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:41:32.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:41:32.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:41:32.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.528580 -999.00  +15.90  24.60     39   +2.10 1 1 1 1 1   888    0 14.86 47.32 ----- 22.3 24.6 180.0 36.7 22.1 -27.4 21.0 -27.1 22.3 -25.8 23.5 -27.5
2026-02-14T14:41:32.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:41:32.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:41:32.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.528580
2026-02-14T14:41:32.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:41:32.683 [DEBUG] [Thread-187152] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:41:32.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:41:32.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:41:32.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:41:32.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:41:32.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:40:50', tmtdew=16.95, humidity=31.51, cloud=0.0, wind=30.42, temperature=16.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:41:09.312', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:41:32.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T14:41:33.990 [DEBUG] [Thread-187155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:41:40.370 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:41:40.371 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:41:49.039 [DEBUG] [Thread-187156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:42:04.076 [DEBUG] [Thread-187157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:42:19.114 [DEBUG] [Thread-187158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:42:26.974 [DEBUG] [Thread-187159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:42:34.150 [DEBUG] [Thread-187160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:42:40.511 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:42:40.513 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:42:49.188 [DEBUG] [Thread-187161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:43:04.225 [DEBUG] [Thread-187162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:43:19.264 [DEBUG] [Thread-187163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:43:27.030 [DEBUG] [Thread-187164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:43:34.304 [DEBUG] [Thread-187165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:43:40.652 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:43:40.653 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:43:46.103 [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-14T14:43:49.343 [DEBUG] [Thread-187166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:44:04.381 [DEBUG] [Thread-187167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:44:16.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:44:16.134 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:44:16.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-14T14:44:17.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 43, 47), 16.06, 33.74, 0.0, 34.11, 16.24, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:44:17.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:43:47
2026-02-14T14:44:18.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:44:18.518 [DEBUG] [Thread-187168] [transport.py] [_log()] starting thread (client mode): 0xa2d3c580
2026-02-14T14:44:18.518 [DEBUG] [Thread-187168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:44:18.538 [DEBUG] [Thread-187168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:44:18.538 [INFO] [Thread-187168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:44:18.541 [DEBUG] [Thread-187168] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:44:18.542 [DEBUG] [Thread-187168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:44:18.542 [DEBUG] [Thread-187168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:44:18.542 [DEBUG] [Thread-187168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:44:18.542 [DEBUG] [Thread-187168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:44:18.542 [DEBUG] [Thread-187168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:44:18.542 [DEBUG] [Thread-187168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:44:18.542 [DEBUG] [Thread-187168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:44:18.542 [DEBUG] [Thread-187168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:44:18.542 [DEBUG] [Thread-187168] [transport.py] [_log()] client lang: <none>
2026-02-14T14:44:18.542 [DEBUG] [Thread-187168] [transport.py] [_log()] server lang: <none>
2026-02-14T14:44:18.542 [DEBUG] [Thread-187168] [transport.py] [_log()] kex follows: False
2026-02-14T14:44:18.542 [DEBUG] [Thread-187168] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:44:18.542 [DEBUG] [Thread-187168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:44:18.542 [DEBUG] [Thread-187168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:44:18.542 [DEBUG] [Thread-187168] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:44:18.542 [DEBUG] [Thread-187168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:44:18.542 [DEBUG] [Thread-187168] [transport.py] [_log()] Compression: none
2026-02-14T14:44:18.542 [DEBUG] [Thread-187168] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:44:18.558 [DEBUG] [Thread-187168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:44:18.559 [DEBUG] [Thread-187168] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:44:18.559 [DEBUG] [Thread-187168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:44:18.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:44:18.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:44:18.561 [DEBUG] [Thread-187168] [transport.py] [_log()] userauth is OK
2026-02-14T14:44:18.562 [DEBUG] [Thread-187168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:44:18.562 [DEBUG] [Thread-187168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:44:18.562 [DEBUG] [Thread-187168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:44:18.562 [DEBUG] [Thread-187168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:44:18.587 [INFO] [Thread-187168] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:44:18.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:44:19.205 [DEBUG] [Thread-187168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:44:19.205 [DEBUG] [Thread-187168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:44:19.205 [DEBUG] [Thread-187168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:44:19.246 [DEBUG] [Thread-187168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:44:19.247 [DEBUG] [Thread-187168] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:44:19.250 [DEBUG] [Thread-187168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:44:19.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:44:19.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:44:19.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:44:19.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:44:19.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:44:19.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:44:19.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:44:19.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:44:19.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:44:19.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.530316 -999.00  +15.60  29.53     40   +2.20 1 1 1 1 1   888    0 14.77 29.63 ----- 28.6 29.5 183.0 38.3 21.8 -28.9 20.5 -31.6 22.0 -27.7 -999.0 -999.0
2026-02-14T14:44:19.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:44:19.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:44:19.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.530316
2026-02-14T14:44:19.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:44:19.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:44:19.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:44:19.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:44:19.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:44:19.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:43:47', tmtdew=16.06, humidity=33.74, cloud=0.0, wind=34.11, temperature=16.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:43:39.302', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:44:19.278 [DEBUG] [Thread-187168] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:44:19.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T14:44:19.380 [DEBUG] [Thread-187171] [transport.py] [_log()] starting thread (client mode): 0xa2d19390
2026-02-14T14:44:19.381 [DEBUG] [Thread-187171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:44:19.398 [DEBUG] [Thread-187171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:44:19.398 [INFO] [Thread-187171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:44:19.411 [DEBUG] [Thread-187171] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:44:19.411 [DEBUG] [Thread-187171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:44:19.411 [DEBUG] [Thread-187171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:44:19.411 [DEBUG] [Thread-187171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:44:19.411 [DEBUG] [Thread-187171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:44:19.412 [DEBUG] [Thread-187171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:44:19.412 [DEBUG] [Thread-187171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:44:19.412 [DEBUG] [Thread-187171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:44:19.412 [DEBUG] [Thread-187171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:44:19.412 [DEBUG] [Thread-187171] [transport.py] [_log()] client lang: <none>
2026-02-14T14:44:19.412 [DEBUG] [Thread-187171] [transport.py] [_log()] server lang: <none>
2026-02-14T14:44:19.412 [DEBUG] [Thread-187171] [transport.py] [_log()] kex follows: False
2026-02-14T14:44:19.412 [DEBUG] [Thread-187171] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:44:19.412 [DEBUG] [Thread-187171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:44:19.412 [DEBUG] [Thread-187171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:44:19.412 [DEBUG] [Thread-187171] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:44:19.412 [DEBUG] [Thread-187171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:44:19.412 [DEBUG] [Thread-187171] [transport.py] [_log()] Compression: none
2026-02-14T14:44:19.412 [DEBUG] [Thread-187171] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:44:19.419 [DEBUG] [Thread-187173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:44:19.461 [DEBUG] [Thread-187171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:44:19.462 [DEBUG] [Thread-187171] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:44:19.462 [DEBUG] [Thread-187171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:44:19.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:44:19.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:44:19.519 [DEBUG] [Thread-187171] [transport.py] [_log()] userauth is OK
2026-02-14T14:44:19.519 [DEBUG] [Thread-187171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:44:19.519 [DEBUG] [Thread-187171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:44:19.520 [DEBUG] [Thread-187171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:44:19.520 [DEBUG] [Thread-187171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:44:19.539 [INFO] [Thread-187171] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:44:19.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T14:44:19.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:44:20.424 [DEBUG] [Thread-187171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:44:20.424 [DEBUG] [Thread-187171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:44:20.472 [DEBUG] [Thread-187171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:44:20.473 [DEBUG] [Thread-187171] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:44:20.483 [DEBUG] [Thread-187171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:44:20.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:44:20.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-14T14:44:20.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:44:20.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:44:20.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:44:20.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:44:20.520 [DEBUG] [Thread-187171] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:44:27.063 [DEBUG] [Thread-187174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:44:34.477 [DEBUG] [Thread-187175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:44:40.794 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:44:40.795 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:44:49.510 [DEBUG] [Thread-187176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:44:50.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:44:50.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:44:50.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-14T14:44:52.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 44, 22), 16.27, 33.27, 0.0, 34.6, 16.26, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:44:52.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:44:22
2026-02-14T14:44:52.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:44:52.935 [DEBUG] [Thread-187177] [transport.py] [_log()] starting thread (client mode): 0xa2dc0e20
2026-02-14T14:44:52.935 [DEBUG] [Thread-187177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:44:52.955 [DEBUG] [Thread-187177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:44:52.955 [INFO] [Thread-187177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:44:52.959 [DEBUG] [Thread-187177] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:44:52.959 [DEBUG] [Thread-187177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:44:52.959 [DEBUG] [Thread-187177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:44:52.959 [DEBUG] [Thread-187177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:44:52.959 [DEBUG] [Thread-187177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:44:52.959 [DEBUG] [Thread-187177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:44:52.959 [DEBUG] [Thread-187177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:44:52.960 [DEBUG] [Thread-187177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:44:52.960 [DEBUG] [Thread-187177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:44:52.960 [DEBUG] [Thread-187177] [transport.py] [_log()] client lang: <none>
2026-02-14T14:44:52.960 [DEBUG] [Thread-187177] [transport.py] [_log()] server lang: <none>
2026-02-14T14:44:52.960 [DEBUG] [Thread-187177] [transport.py] [_log()] kex follows: False
2026-02-14T14:44:52.960 [DEBUG] [Thread-187177] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:44:52.960 [DEBUG] [Thread-187177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:44:52.960 [DEBUG] [Thread-187177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:44:52.960 [DEBUG] [Thread-187177] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:44:52.960 [DEBUG] [Thread-187177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:44:52.960 [DEBUG] [Thread-187177] [transport.py] [_log()] Compression: none
2026-02-14T14:44:52.960 [DEBUG] [Thread-187177] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:44:52.976 [DEBUG] [Thread-187177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:44:52.976 [DEBUG] [Thread-187177] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:44:52.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:44:52.978 [DEBUG] [Thread-187177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:44:52.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:44:53.020 [DEBUG] [Thread-187177] [transport.py] [_log()] userauth is OK
2026-02-14T14:44:53.020 [DEBUG] [Thread-187177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:44:53.020 [DEBUG] [Thread-187177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:44:53.020 [DEBUG] [Thread-187177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:44:53.021 [DEBUG] [Thread-187177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:44:53.038 [INFO] [Thread-187177] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:44:53.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:44:53.667 [DEBUG] [Thread-187177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:44:53.667 [DEBUG] [Thread-187177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:44:53.667 [DEBUG] [Thread-187177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:44:53.707 [DEBUG] [Thread-187177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:44:53.708 [DEBUG] [Thread-187177] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:44:53.711 [DEBUG] [Thread-187177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:44:53.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:44:53.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:44:53.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:44:53.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:44:53.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:44:53.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:44:53.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:44:53.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:44:53.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:44:53.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.530663 -999.00  +15.50  17.06     41   +2.60 1 1 1 1 1   888    0 14.43 24.14 ----- 17.4 17.1 202.8 32.6 21.7 -28.8 20.4 -32.3 22.1 -25.7 23.2 -27.2
2026-02-14T14:44:53.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:44:53.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:44:53.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.530663
2026-02-14T14:44:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:44:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:44:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:44:53.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:44:53.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:44:53.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:44:22', tmtdew=16.27, humidity=33.27, cloud=0.0, wind=34.6, temperature=16.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:44:09.283', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:44:53.738 [DEBUG] [Thread-187177] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:44: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-14T14:44:53.835 [DEBUG] [Thread-187180] [transport.py] [_log()] starting thread (client mode): 0xa2de90f0
2026-02-14T14:44:53.836 [DEBUG] [Thread-187180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:44:53.850 [DEBUG] [Thread-187180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:44:53.850 [INFO] [Thread-187180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:44:53.857 [DEBUG] [Thread-187180] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:44:53.858 [DEBUG] [Thread-187180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:44:53.858 [DEBUG] [Thread-187180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:44:53.858 [DEBUG] [Thread-187180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:44:53.858 [DEBUG] [Thread-187180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:44:53.858 [DEBUG] [Thread-187180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:44:53.858 [DEBUG] [Thread-187180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:44:53.858 [DEBUG] [Thread-187180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:44:53.858 [DEBUG] [Thread-187180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:44:53.858 [DEBUG] [Thread-187180] [transport.py] [_log()] client lang: <none>
2026-02-14T14:44:53.858 [DEBUG] [Thread-187180] [transport.py] [_log()] server lang: <none>
2026-02-14T14:44:53.858 [DEBUG] [Thread-187180] [transport.py] [_log()] kex follows: False
2026-02-14T14:44:53.858 [DEBUG] [Thread-187180] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:44:53.858 [DEBUG] [Thread-187180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:44:53.858 [DEBUG] [Thread-187180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:44:53.858 [DEBUG] [Thread-187180] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:44:53.858 [DEBUG] [Thread-187180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:44:53.859 [DEBUG] [Thread-187180] [transport.py] [_log()] Compression: none
2026-02-14T14:44:53.859 [DEBUG] [Thread-187180] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:44:53.919 [DEBUG] [Thread-187180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:44:53.919 [DEBUG] [Thread-187180] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:44:53.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:44:53.920 [DEBUG] [Thread-187180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:44:53.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:44:53.975 [DEBUG] [Thread-187180] [transport.py] [_log()] userauth is OK
2026-02-14T14:44:53.975 [DEBUG] [Thread-187180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:44:53.976 [DEBUG] [Thread-187180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:44:53.976 [DEBUG] [Thread-187180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:44:53.976 [DEBUG] [Thread-187180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:44:53.994 [INFO] [Thread-187180] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:44:53.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-14T14:44:53.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:44:54.799 [DEBUG] [Thread-187180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:44:54.799 [DEBUG] [Thread-187180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:44:54.847 [DEBUG] [Thread-187180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:44:54.848 [DEBUG] [Thread-187180] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:44:54.857 [DEBUG] [Thread-187180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:44:54.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:44:54.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-14T14:44:54.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-14T14:44:54.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:44:54.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:44:54.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:44:54.893 [DEBUG] [Thread-187180] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:45:04.546 [DEBUG] [Thread-187182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:45:19.608 [DEBUG] [Thread-187183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:45:24.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:45:24.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:45:24.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-14T14:45:26.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 44, 58), 15.78, 34.44, 0.0, 26.57, 15.91, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:45:26.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:44:58
2026-02-14T14:45:27.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:45:27.091 [DEBUG] [Thread-187184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:45:27.184 [DEBUG] [Thread-187185] [transport.py] [_log()] starting thread (client mode): 0xa2d3c0d0
2026-02-14T14:45:27.184 [DEBUG] [Thread-187185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:45:27.204 [DEBUG] [Thread-187185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:45:27.204 [INFO] [Thread-187185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:45:27.207 [DEBUG] [Thread-187185] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:45:27.207 [DEBUG] [Thread-187185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:45:27.207 [DEBUG] [Thread-187185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:45:27.207 [DEBUG] [Thread-187185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:45:27.207 [DEBUG] [Thread-187185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:45:27.207 [DEBUG] [Thread-187185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:45:27.207 [DEBUG] [Thread-187185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:45:27.207 [DEBUG] [Thread-187185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:45:27.207 [DEBUG] [Thread-187185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:45:27.207 [DEBUG] [Thread-187185] [transport.py] [_log()] client lang: <none>
2026-02-14T14:45:27.207 [DEBUG] [Thread-187185] [transport.py] [_log()] server lang: <none>
2026-02-14T14:45:27.207 [DEBUG] [Thread-187185] [transport.py] [_log()] kex follows: False
2026-02-14T14:45:27.207 [DEBUG] [Thread-187185] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:45:27.207 [DEBUG] [Thread-187185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:45:27.207 [DEBUG] [Thread-187185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:45:27.207 [DEBUG] [Thread-187185] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:45:27.207 [DEBUG] [Thread-187185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:45:27.208 [DEBUG] [Thread-187185] [transport.py] [_log()] Compression: none
2026-02-14T14:45:27.208 [DEBUG] [Thread-187185] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:45:27.225 [DEBUG] [Thread-187185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:45:27.226 [DEBUG] [Thread-187185] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:45:27.226 [DEBUG] [Thread-187185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:45:27.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:45:27.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:45:27.229 [DEBUG] [Thread-187185] [transport.py] [_log()] userauth is OK
2026-02-14T14:45:27.229 [DEBUG] [Thread-187185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:45:27.229 [DEBUG] [Thread-187185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:45:27.229 [DEBUG] [Thread-187185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:45:27.229 [DEBUG] [Thread-187185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:45:27.247 [INFO] [Thread-187185] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:45:27.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:45:27.827 [DEBUG] [Thread-187185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:45:27.827 [DEBUG] [Thread-187185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:45:27.827 [DEBUG] [Thread-187185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:45:27.868 [DEBUG] [Thread-187185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:45:27.869 [DEBUG] [Thread-187185] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:45:27.872 [DEBUG] [Thread-187185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:45:27.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:45:27.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:45:27.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:45:27.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:45:27.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:45:27.895 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:45:27.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:45:27.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:45:27.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:45:27.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.531011 -999.00  +15.50  22.17     41   +2.30 1 1 1 1 1   888    0 14.64 19.82 ----- 20.8 22.2 168.0 27.8 21.8 -28.0 20.6 -31.2 22.2 -23.3 23.3 -25.9
2026-02-14T14:45:27.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:45:27.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:45:27.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.531011
2026-02-14T14:45:27.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:45:27.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:45:27.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:45:27.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:45:27.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:45:27.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:44:58', tmtdew=15.78, humidity=34.44, cloud=0.0, wind=26.57, temperature=15.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:44:39.350', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:45:27.898 [DEBUG] [Thread-187185] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:45:27.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-14T14:45:27.991 [DEBUG] [Thread-187188] [transport.py] [_log()] starting thread (client mode): 0xa2d57310
2026-02-14T14:45:27.991 [DEBUG] [Thread-187188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:45:28.006 [DEBUG] [Thread-187188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:45:28.006 [INFO] [Thread-187188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:45:28.014 [DEBUG] [Thread-187188] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:45:28.014 [DEBUG] [Thread-187188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:45:28.014 [DEBUG] [Thread-187188] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:45:28.014 [DEBUG] [Thread-187188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:45:28.014 [DEBUG] [Thread-187188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:45:28.015 [DEBUG] [Thread-187188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:45:28.015 [DEBUG] [Thread-187188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:45:28.015 [DEBUG] [Thread-187188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:45:28.015 [DEBUG] [Thread-187188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:45:28.015 [DEBUG] [Thread-187188] [transport.py] [_log()] client lang: <none>
2026-02-14T14:45:28.015 [DEBUG] [Thread-187188] [transport.py] [_log()] server lang: <none>
2026-02-14T14:45:28.015 [DEBUG] [Thread-187188] [transport.py] [_log()] kex follows: False
2026-02-14T14:45:28.015 [DEBUG] [Thread-187188] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:45:28.015 [DEBUG] [Thread-187188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:45:28.015 [DEBUG] [Thread-187188] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:45:28.015 [DEBUG] [Thread-187188] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:45:28.015 [DEBUG] [Thread-187188] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:45:28.015 [DEBUG] [Thread-187188] [transport.py] [_log()] Compression: none
2026-02-14T14:45:28.015 [DEBUG] [Thread-187188] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:45:28.072 [DEBUG] [Thread-187188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:45:28.073 [DEBUG] [Thread-187188] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:45:28.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:45:28.073 [DEBUG] [Thread-187188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:45:28.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:45:28.127 [DEBUG] [Thread-187188] [transport.py] [_log()] userauth is OK
2026-02-14T14:45:28.128 [DEBUG] [Thread-187188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:45:28.128 [DEBUG] [Thread-187188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:45:28.128 [DEBUG] [Thread-187188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:45:28.128 [DEBUG] [Thread-187188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:45:28.146 [INFO] [Thread-187188] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:45:28.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-14T14:45:28.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:45:28.967 [DEBUG] [Thread-187188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:45:28.967 [DEBUG] [Thread-187188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:45:29.014 [DEBUG] [Thread-187188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:45:29.015 [DEBUG] [Thread-187188] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:45:29.024 [DEBUG] [Thread-187188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:45:29.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:45:29.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-14T14:45:29.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-14T14:45:29.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:45:29.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:45:29.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:45:29.061 [DEBUG] [Thread-187188] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:45:34.644 [DEBUG] [Thread-187190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:45:40.937 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:45:40.938 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:45:49.698 [DEBUG] [Thread-187191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:45:59.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:45:59.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:45:59.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-14T14:46:01.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 45, 33), 15.88, 34.24, 0.0, 22.43, 15.98, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:46:01.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:45:33
2026-02-14T14:46:01.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:46:01.910 [DEBUG] [Thread-187192] [transport.py] [_log()] starting thread (client mode): 0xa2deb100
2026-02-14T14:46:01.910 [DEBUG] [Thread-187192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:46:01.930 [DEBUG] [Thread-187192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:46:01.930 [INFO] [Thread-187192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:46:01.933 [DEBUG] [Thread-187192] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:46:01.934 [DEBUG] [Thread-187192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:46:01.934 [DEBUG] [Thread-187192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:46:01.934 [DEBUG] [Thread-187192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:46:01.934 [DEBUG] [Thread-187192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:46:01.934 [DEBUG] [Thread-187192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:46:01.934 [DEBUG] [Thread-187192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:46:01.934 [DEBUG] [Thread-187192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:46:01.934 [DEBUG] [Thread-187192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:46:01.934 [DEBUG] [Thread-187192] [transport.py] [_log()] client lang: <none>
2026-02-14T14:46:01.934 [DEBUG] [Thread-187192] [transport.py] [_log()] server lang: <none>
2026-02-14T14:46:01.934 [DEBUG] [Thread-187192] [transport.py] [_log()] kex follows: False
2026-02-14T14:46:01.934 [DEBUG] [Thread-187192] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:46:01.934 [DEBUG] [Thread-187192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:46:01.934 [DEBUG] [Thread-187192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:46:01.934 [DEBUG] [Thread-187192] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:46:01.934 [DEBUG] [Thread-187192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:46:01.934 [DEBUG] [Thread-187192] [transport.py] [_log()] Compression: none
2026-02-14T14:46:01.934 [DEBUG] [Thread-187192] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:46:01.951 [DEBUG] [Thread-187192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:46:01.952 [DEBUG] [Thread-187192] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:46:01.952 [DEBUG] [Thread-187192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:46:01.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:46:01.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:46:01.955 [DEBUG] [Thread-187192] [transport.py] [_log()] userauth is OK
2026-02-14T14:46:01.955 [DEBUG] [Thread-187192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:46:01.955 [DEBUG] [Thread-187192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:46:01.955 [DEBUG] [Thread-187192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:46:01.955 [DEBUG] [Thread-187192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:46:01.991 [INFO] [Thread-187192] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:46:01.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:46:02.625 [DEBUG] [Thread-187192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:46:02.625 [DEBUG] [Thread-187192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:46:02.625 [DEBUG] [Thread-187192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:46:02.666 [DEBUG] [Thread-187192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:46:02.667 [DEBUG] [Thread-187192] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:46:02.670 [DEBUG] [Thread-187192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:46:02.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:46:02.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:46:02.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:46:02.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:46:02.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:46:02.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:46:02.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:46:02.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:46:02.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:46:02.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.531358 -999.00  +15.60  24.61     41   +2.40 1 1 1 1 1   888    0 14.08 13.65 ----- 25.9 24.6 167.6 28.3 21.9 -26.8 20.9 -29.1 22.1 -25.5 23.3 -26.7
2026-02-14T14:46:02.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:46:02.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:46:02.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.531358
2026-02-14T14:46:02.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:46:02.704 [DEBUG] [Thread-187192] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:46:02.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:46:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:46:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:46:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:46:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:45:33', tmtdew=15.88, humidity=34.24, cloud=0.0, wind=22.43, temperature=15.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:45:09.331', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:46:02.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-14T14:46:02.801 [DEBUG] [Thread-187195] [transport.py] [_log()] starting thread (client mode): 0xa2dc1ea0
2026-02-14T14:46:02.802 [DEBUG] [Thread-187195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:46:02.816 [DEBUG] [Thread-187195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:46:02.816 [INFO] [Thread-187195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:46:02.823 [DEBUG] [Thread-187195] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:46:02.824 [DEBUG] [Thread-187195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:46:02.824 [DEBUG] [Thread-187195] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:46:02.824 [DEBUG] [Thread-187195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:46:02.824 [DEBUG] [Thread-187195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:46:02.824 [DEBUG] [Thread-187195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:46:02.824 [DEBUG] [Thread-187195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:46:02.824 [DEBUG] [Thread-187195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:46:02.824 [DEBUG] [Thread-187195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:46:02.824 [DEBUG] [Thread-187195] [transport.py] [_log()] client lang: <none>
2026-02-14T14:46:02.824 [DEBUG] [Thread-187195] [transport.py] [_log()] server lang: <none>
2026-02-14T14:46:02.824 [DEBUG] [Thread-187195] [transport.py] [_log()] kex follows: False
2026-02-14T14:46:02.824 [DEBUG] [Thread-187195] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:46:02.824 [DEBUG] [Thread-187195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:46:02.825 [DEBUG] [Thread-187195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:46:02.825 [DEBUG] [Thread-187195] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:46:02.825 [DEBUG] [Thread-187195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:46:02.825 [DEBUG] [Thread-187195] [transport.py] [_log()] Compression: none
2026-02-14T14:46:02.825 [DEBUG] [Thread-187195] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:46:02.893 [DEBUG] [Thread-187195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:46:02.896 [DEBUG] [Thread-187195] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:46:02.897 [DEBUG] [Thread-187195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:46:02.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:46:02.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:46:02.951 [DEBUG] [Thread-187195] [transport.py] [_log()] userauth is OK
2026-02-14T14:46:02.951 [DEBUG] [Thread-187195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:46:02.952 [DEBUG] [Thread-187195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:46:02.952 [DEBUG] [Thread-187195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:46:02.952 [DEBUG] [Thread-187195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:46:02.972 [INFO] [Thread-187195] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:46:02.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-14T14:46:02.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:46:03.809 [DEBUG] [Thread-187195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:46:03.810 [DEBUG] [Thread-187195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:46:03.858 [DEBUG] [Thread-187195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:46:03.858 [DEBUG] [Thread-187195] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:46:03.866 [DEBUG] [Thread-187195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:46:03.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:46:03.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-14T14:46:03.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:46:03.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:46:03.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:46:03.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:46:03.900 [DEBUG] [Thread-187195] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:46:04.732 [DEBUG] [Thread-187197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:46:19.782 [DEBUG] [Thread-187198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:46:27.152 [DEBUG] [Thread-187199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:46:33.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:46:33.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:46:33.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-14T14:46:34.821 [DEBUG] [Thread-187200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:46:35.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 46, 8), 15.69, 34.65, 0.0, 23.45, 15.99, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:46:35.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:46:08
2026-02-14T14:46:36.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:46:36.343 [DEBUG] [Thread-187201] [transport.py] [_log()] starting thread (client mode): 0xa2d132e0
2026-02-14T14:46:36.343 [DEBUG] [Thread-187201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:46:36.363 [DEBUG] [Thread-187201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:46:36.364 [INFO] [Thread-187201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:46:36.367 [DEBUG] [Thread-187201] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:46:36.367 [DEBUG] [Thread-187201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:46:36.368 [DEBUG] [Thread-187201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:46:36.368 [DEBUG] [Thread-187201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:46:36.368 [DEBUG] [Thread-187201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:46:36.368 [DEBUG] [Thread-187201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:46:36.368 [DEBUG] [Thread-187201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:46:36.368 [DEBUG] [Thread-187201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:46:36.368 [DEBUG] [Thread-187201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:46:36.368 [DEBUG] [Thread-187201] [transport.py] [_log()] client lang: <none>
2026-02-14T14:46:36.368 [DEBUG] [Thread-187201] [transport.py] [_log()] server lang: <none>
2026-02-14T14:46:36.368 [DEBUG] [Thread-187201] [transport.py] [_log()] kex follows: False
2026-02-14T14:46:36.368 [DEBUG] [Thread-187201] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:46:36.368 [DEBUG] [Thread-187201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:46:36.368 [DEBUG] [Thread-187201] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:46:36.368 [DEBUG] [Thread-187201] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:46:36.368 [DEBUG] [Thread-187201] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:46:36.368 [DEBUG] [Thread-187201] [transport.py] [_log()] Compression: none
2026-02-14T14:46:36.368 [DEBUG] [Thread-187201] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:46:36.386 [DEBUG] [Thread-187201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:46:36.386 [DEBUG] [Thread-187201] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:46:36.387 [DEBUG] [Thread-187201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:46:36.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:46:36.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:46:36.389 [DEBUG] [Thread-187201] [transport.py] [_log()] userauth is OK
2026-02-14T14:46:36.389 [DEBUG] [Thread-187201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:46:36.389 [DEBUG] [Thread-187201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:46:36.389 [DEBUG] [Thread-187201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:46:36.389 [DEBUG] [Thread-187201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:46:36.409 [INFO] [Thread-187201] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:46:36.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:46:37.192 [DEBUG] [Thread-187201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:46:37.193 [DEBUG] [Thread-187201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:46:37.193 [DEBUG] [Thread-187201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:46:37.234 [DEBUG] [Thread-187201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:46:37.234 [DEBUG] [Thread-187201] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:46:37.238 [DEBUG] [Thread-187201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:46:37.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:46:37.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:46:37.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:46:37.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:46:37.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:46:37.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:46:37.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:46:37.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:46:37.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:46:37.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.531705 -999.00  +15.40  23.21     41   +2.40 1 1 1 1 1   888    0 13.86 7.69 ----- 18.7 23.2 179.2 29.9 21.9 -26.3 21.0 -25.0 22.1 -25.5 23.4 -25.8
2026-02-14T14:46:37.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:46:37.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:46:37.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.531705
2026-02-14T14:46:37.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:46:37.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:46:37.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:46:37.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:46:37.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:46:37.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:46:08', tmtdew=15.69, humidity=34.65, cloud=0.0, wind=23.45, temperature=15.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:45:39.312', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:46:37.262 [DEBUG] [Thread-187201] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:46:37.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-14T14:46:37.358 [DEBUG] [Thread-187204] [transport.py] [_log()] starting thread (client mode): 0xa2d133d0
2026-02-14T14:46:37.358 [DEBUG] [Thread-187204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:46:37.372 [DEBUG] [Thread-187204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:46:37.373 [INFO] [Thread-187204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:46:37.381 [DEBUG] [Thread-187204] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:46:37.381 [DEBUG] [Thread-187204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:46:37.382 [DEBUG] [Thread-187204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:46:37.382 [DEBUG] [Thread-187204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:46:37.382 [DEBUG] [Thread-187204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:46:37.382 [DEBUG] [Thread-187204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:46:37.382 [DEBUG] [Thread-187204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:46:37.382 [DEBUG] [Thread-187204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:46:37.382 [DEBUG] [Thread-187204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:46:37.382 [DEBUG] [Thread-187204] [transport.py] [_log()] client lang: <none>
2026-02-14T14:46:37.382 [DEBUG] [Thread-187204] [transport.py] [_log()] server lang: <none>
2026-02-14T14:46:37.382 [DEBUG] [Thread-187204] [transport.py] [_log()] kex follows: False
2026-02-14T14:46:37.382 [DEBUG] [Thread-187204] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:46:37.382 [DEBUG] [Thread-187204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:46:37.382 [DEBUG] [Thread-187204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:46:37.382 [DEBUG] [Thread-187204] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:46:37.382 [DEBUG] [Thread-187204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:46:37.383 [DEBUG] [Thread-187204] [transport.py] [_log()] Compression: none
2026-02-14T14:46:37.383 [DEBUG] [Thread-187204] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:46:37.440 [DEBUG] [Thread-187204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:46:37.441 [DEBUG] [Thread-187204] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:46:37.441 [DEBUG] [Thread-187204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:46:37.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:46:37.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:46:37.496 [DEBUG] [Thread-187204] [transport.py] [_log()] userauth is OK
2026-02-14T14:46:37.497 [DEBUG] [Thread-187204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:46:37.497 [DEBUG] [Thread-187204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:46:37.497 [DEBUG] [Thread-187204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:46:37.497 [DEBUG] [Thread-187204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:46:37.517 [INFO] [Thread-187204] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:46:37.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-14T14:46:37.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:46:38.323 [DEBUG] [Thread-187204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:46:38.324 [DEBUG] [Thread-187204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:46:38.371 [DEBUG] [Thread-187204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:46:38.371 [DEBUG] [Thread-187204] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:46:38.380 [DEBUG] [Thread-187204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:46:38.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:46:38.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:46:38.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-14T14:46:38.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:46:38.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:46:38.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:46:38.417 [DEBUG] [Thread-187204] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:46:41.079 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:46:41.080 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:46:49.860 [DEBUG] [Thread-187206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:47:04.914 [DEBUG] [Thread-187207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:47:08.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:47:08.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:47:08.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:47:10.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 46, 44), 15.69, 34.9, 0.0, 24.23, 16.44, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:47:10.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:46:44
2026-02-14T14:47:10.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:47:10.794 [DEBUG] [Thread-187208] [transport.py] [_log()] starting thread (client mode): 0xa2d10f70
2026-02-14T14:47:10.794 [DEBUG] [Thread-187208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:47:10.815 [DEBUG] [Thread-187208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:47:10.815 [INFO] [Thread-187208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:47:10.818 [DEBUG] [Thread-187208] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:47:10.819 [DEBUG] [Thread-187208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:47:10.819 [DEBUG] [Thread-187208] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:47:10.819 [DEBUG] [Thread-187208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:47:10.819 [DEBUG] [Thread-187208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:47:10.819 [DEBUG] [Thread-187208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:47:10.819 [DEBUG] [Thread-187208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:47:10.819 [DEBUG] [Thread-187208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:47:10.819 [DEBUG] [Thread-187208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:47:10.819 [DEBUG] [Thread-187208] [transport.py] [_log()] client lang: <none>
2026-02-14T14:47:10.819 [DEBUG] [Thread-187208] [transport.py] [_log()] server lang: <none>
2026-02-14T14:47:10.819 [DEBUG] [Thread-187208] [transport.py] [_log()] kex follows: False
2026-02-14T14:47:10.819 [DEBUG] [Thread-187208] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:47:10.819 [DEBUG] [Thread-187208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:47:10.819 [DEBUG] [Thread-187208] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:47:10.819 [DEBUG] [Thread-187208] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:47:10.819 [DEBUG] [Thread-187208] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:47:10.819 [DEBUG] [Thread-187208] [transport.py] [_log()] Compression: none
2026-02-14T14:47:10.819 [DEBUG] [Thread-187208] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:47:10.836 [DEBUG] [Thread-187208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:47:10.837 [DEBUG] [Thread-187208] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:47:10.837 [DEBUG] [Thread-187208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:47:10.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:47:10.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:47:10.839 [DEBUG] [Thread-187208] [transport.py] [_log()] userauth is OK
2026-02-14T14:47:10.840 [DEBUG] [Thread-187208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:47:10.840 [DEBUG] [Thread-187208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:47:10.840 [DEBUG] [Thread-187208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:47:10.840 [DEBUG] [Thread-187208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:47:10.863 [INFO] [Thread-187208] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:47:10.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:47:11.507 [DEBUG] [Thread-187208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:47:11.508 [DEBUG] [Thread-187208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:47:11.508 [DEBUG] [Thread-187208] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:47:11.548 [DEBUG] [Thread-187208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:47:11.549 [DEBUG] [Thread-187208] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:47:11.552 [DEBUG] [Thread-187208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:47:11.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:47:11.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:47:11.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:47:11.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:47:11.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:47:11.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:47:11.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:47:11.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:47:11.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:47:11.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.532400 -999.00  +16.10  20.51     41   +3.00 1 1 1 1 1   888    0 13.47 -7.48 ----- 24.1 20.5 175.0 27.3 22.2 -25.9 21.2 -25.6 22.5 -23.6 23.6 -25.6
2026-02-14T14:47:11.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:47:11.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:47:11.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.532400
2026-02-14T14:47:11.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:47:11.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:47:11.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:47:11.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:47:11.579 [DEBUG] [Thread-187208] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:47:11.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:47:11.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:46:44', tmtdew=15.69, humidity=34.9, cloud=0.0, wind=24.23, temperature=16.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:46:39.360', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:47:11.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-14T14:47:11.683 [DEBUG] [Thread-187211] [transport.py] [_log()] starting thread (client mode): 0xa2dc34f0
2026-02-14T14:47:11.683 [DEBUG] [Thread-187211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:47:11.699 [DEBUG] [Thread-187211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:47:11.699 [INFO] [Thread-187211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:47:11.707 [DEBUG] [Thread-187211] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:47:11.707 [DEBUG] [Thread-187211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:47:11.707 [DEBUG] [Thread-187211] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:47:11.707 [DEBUG] [Thread-187211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:47:11.707 [DEBUG] [Thread-187211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:47:11.707 [DEBUG] [Thread-187211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:47:11.707 [DEBUG] [Thread-187211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:47:11.707 [DEBUG] [Thread-187211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:47:11.707 [DEBUG] [Thread-187211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:47:11.708 [DEBUG] [Thread-187211] [transport.py] [_log()] client lang: <none>
2026-02-14T14:47:11.708 [DEBUG] [Thread-187211] [transport.py] [_log()] server lang: <none>
2026-02-14T14:47:11.708 [DEBUG] [Thread-187211] [transport.py] [_log()] kex follows: False
2026-02-14T14:47:11.708 [DEBUG] [Thread-187211] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:47:11.708 [DEBUG] [Thread-187211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:47:11.708 [DEBUG] [Thread-187211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:47:11.708 [DEBUG] [Thread-187211] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:47:11.708 [DEBUG] [Thread-187211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:47:11.708 [DEBUG] [Thread-187211] [transport.py] [_log()] Compression: none
2026-02-14T14:47:11.708 [DEBUG] [Thread-187211] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:47:11.764 [DEBUG] [Thread-187211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:47:11.765 [DEBUG] [Thread-187211] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:47:11.766 [DEBUG] [Thread-187211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:47:11.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:47:11.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:47:11.821 [DEBUG] [Thread-187211] [transport.py] [_log()] userauth is OK
2026-02-14T14:47:11.821 [DEBUG] [Thread-187211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:47:11.821 [DEBUG] [Thread-187211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:47:11.821 [DEBUG] [Thread-187211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:47:11.821 [DEBUG] [Thread-187211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:47:11.840 [INFO] [Thread-187211] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:47:11.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-14T14:47:11.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:47:12.672 [DEBUG] [Thread-187211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:47:12.673 [DEBUG] [Thread-187211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:47:12.720 [DEBUG] [Thread-187211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:47:12.720 [DEBUG] [Thread-187211] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:47:12.730 [DEBUG] [Thread-187211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:47:12.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:47:12.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:47:12.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:47:12.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:47:12.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:47:12.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:47:12.768 [DEBUG] [Thread-187211] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:47:19.951 [DEBUG] [Thread-187213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:47:27.196 [DEBUG] [Thread-187214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:47:35.002 [DEBUG] [Thread-187215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:47:41.222 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:47:41.223 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:47:42.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:47:42.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:47:42.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:47:45.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 47, 19), 15.67, 34.94, 0.0, 29.29, 16.46, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:47:45.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:47:19
2026-02-14T14:47:45.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:47:45.830 [DEBUG] [Thread-187216] [transport.py] [_log()] starting thread (client mode): 0xa2dddbd0
2026-02-14T14:47:45.830 [DEBUG] [Thread-187216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:47:45.852 [DEBUG] [Thread-187216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:47:45.852 [INFO] [Thread-187216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:47:45.855 [DEBUG] [Thread-187216] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:47:45.855 [DEBUG] [Thread-187216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:47:45.855 [DEBUG] [Thread-187216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:47:45.855 [DEBUG] [Thread-187216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:47:45.855 [DEBUG] [Thread-187216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:47:45.855 [DEBUG] [Thread-187216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:47:45.855 [DEBUG] [Thread-187216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:47:45.856 [DEBUG] [Thread-187216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:47:45.856 [DEBUG] [Thread-187216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:47:45.856 [DEBUG] [Thread-187216] [transport.py] [_log()] client lang: <none>
2026-02-14T14:47:45.856 [DEBUG] [Thread-187216] [transport.py] [_log()] server lang: <none>
2026-02-14T14:47:45.856 [DEBUG] [Thread-187216] [transport.py] [_log()] kex follows: False
2026-02-14T14:47:45.856 [DEBUG] [Thread-187216] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:47:45.856 [DEBUG] [Thread-187216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:47:45.856 [DEBUG] [Thread-187216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:47:45.856 [DEBUG] [Thread-187216] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:47:45.856 [DEBUG] [Thread-187216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:47:45.856 [DEBUG] [Thread-187216] [transport.py] [_log()] Compression: none
2026-02-14T14:47:45.856 [DEBUG] [Thread-187216] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:47:45.873 [DEBUG] [Thread-187216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:47:45.874 [DEBUG] [Thread-187216] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:47:45.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:47:45.875 [DEBUG] [Thread-187216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:47:45.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:47:45.878 [DEBUG] [Thread-187216] [transport.py] [_log()] userauth is OK
2026-02-14T14:47:45.878 [DEBUG] [Thread-187216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:47:45.878 [DEBUG] [Thread-187216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:47:45.878 [DEBUG] [Thread-187216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:47:45.878 [DEBUG] [Thread-187216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:47:45.897 [INFO] [Thread-187216] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:47:45.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:47:46.540 [DEBUG] [Thread-187216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:47:46.540 [DEBUG] [Thread-187216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:47:46.540 [DEBUG] [Thread-187216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:47:46.580 [DEBUG] [Thread-187216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:47:46.581 [DEBUG] [Thread-187216] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:47:46.583 [DEBUG] [Thread-187216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:47:46.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:47:46.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:47:46.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:47:46.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:47:46.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:47:46.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:47:46.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:47:46.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:47:46.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:47:46.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.532747 -999.00  +16.50  26.77     40   +2.90 1 1 1 1 1   888    0 13.47 -12.12 ----- 30.6 26.8 167.5 31.2 22.4 -27.4 21.4 -25.2 22.6 -24.3 23.8 -26.0
2026-02-14T14:47:46.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:47:46.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:47:46.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.532747
2026-02-14T14:47:46.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:47:46.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:47:46.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:47:46.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:47:46.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:47:46.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:47:19', tmtdew=15.67, humidity=34.94, cloud=0.0, wind=29.29, temperature=16.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:47:09.341', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:47:46.601 [DEBUG] [Thread-187216] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:47:46.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-14T14:47:46.686 [DEBUG] [Thread-187219] [transport.py] [_log()] starting thread (client mode): 0xa2ddef80
2026-02-14T14:47:46.686 [DEBUG] [Thread-187219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:47:46.701 [DEBUG] [Thread-187219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:47:46.701 [INFO] [Thread-187219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:47:46.708 [DEBUG] [Thread-187219] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:47:46.708 [DEBUG] [Thread-187219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:47:46.708 [DEBUG] [Thread-187219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:47:46.708 [DEBUG] [Thread-187219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:47:46.708 [DEBUG] [Thread-187219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:47:46.708 [DEBUG] [Thread-187219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:47:46.708 [DEBUG] [Thread-187219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:47:46.708 [DEBUG] [Thread-187219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:47:46.708 [DEBUG] [Thread-187219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:47:46.708 [DEBUG] [Thread-187219] [transport.py] [_log()] client lang: <none>
2026-02-14T14:47:46.708 [DEBUG] [Thread-187219] [transport.py] [_log()] server lang: <none>
2026-02-14T14:47:46.708 [DEBUG] [Thread-187219] [transport.py] [_log()] kex follows: False
2026-02-14T14:47:46.708 [DEBUG] [Thread-187219] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:47:46.709 [DEBUG] [Thread-187219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:47:46.709 [DEBUG] [Thread-187219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:47:46.709 [DEBUG] [Thread-187219] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:47:46.709 [DEBUG] [Thread-187219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:47:46.709 [DEBUG] [Thread-187219] [transport.py] [_log()] Compression: none
2026-02-14T14:47:46.709 [DEBUG] [Thread-187219] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:47:46.767 [DEBUG] [Thread-187219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:47:46.767 [DEBUG] [Thread-187219] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:47:46.768 [DEBUG] [Thread-187219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:47:46.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:47:46.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:47:46.825 [DEBUG] [Thread-187219] [transport.py] [_log()] userauth is OK
2026-02-14T14:47:46.825 [DEBUG] [Thread-187219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:47:46.825 [DEBUG] [Thread-187219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:47:46.825 [DEBUG] [Thread-187219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:47:46.825 [DEBUG] [Thread-187219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:47:46.844 [INFO] [Thread-187219] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:47:46.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-14T14:47:46.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:47:47.697 [DEBUG] [Thread-187219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:47:47.697 [DEBUG] [Thread-187219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:47:47.746 [DEBUG] [Thread-187219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:47:47.746 [DEBUG] [Thread-187219] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:47:47.755 [DEBUG] [Thread-187219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:47:47.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:47:47.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-14T14:47:47.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:47:47.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:47:47.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:47:47.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:47:47.792 [DEBUG] [Thread-187219] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:47:50.040 [DEBUG] [Thread-187221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:48:05.090 [DEBUG] [Thread-187222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:48:17.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:48:17.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:48:17.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:48:19.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 47, 54), 15.79, 34.28, 0.0, 32.2, 16.33, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:48:19.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:47:54
2026-02-14T14:48:20.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:48:20.134 [DEBUG] [Thread-187223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:48:20.149 [DEBUG] [Thread-187224] [transport.py] [_log()] starting thread (client mode): 0xa2d1bd30
2026-02-14T14:48:20.149 [DEBUG] [Thread-187224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:48:20.169 [DEBUG] [Thread-187224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:48:20.169 [INFO] [Thread-187224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:48:20.172 [DEBUG] [Thread-187224] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:48:20.172 [DEBUG] [Thread-187224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:48:20.172 [DEBUG] [Thread-187224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:48:20.172 [DEBUG] [Thread-187224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:48:20.172 [DEBUG] [Thread-187224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:48:20.172 [DEBUG] [Thread-187224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:48:20.172 [DEBUG] [Thread-187224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:48:20.172 [DEBUG] [Thread-187224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:48:20.172 [DEBUG] [Thread-187224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:48:20.172 [DEBUG] [Thread-187224] [transport.py] [_log()] client lang: <none>
2026-02-14T14:48:20.172 [DEBUG] [Thread-187224] [transport.py] [_log()] server lang: <none>
2026-02-14T14:48:20.172 [DEBUG] [Thread-187224] [transport.py] [_log()] kex follows: False
2026-02-14T14:48:20.173 [DEBUG] [Thread-187224] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:48:20.173 [DEBUG] [Thread-187224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:48:20.173 [DEBUG] [Thread-187224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:48:20.173 [DEBUG] [Thread-187224] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:48:20.173 [DEBUG] [Thread-187224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:48:20.173 [DEBUG] [Thread-187224] [transport.py] [_log()] Compression: none
2026-02-14T14:48:20.173 [DEBUG] [Thread-187224] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:48:20.189 [DEBUG] [Thread-187224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:48:20.190 [DEBUG] [Thread-187224] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:48:20.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:48:20.191 [DEBUG] [Thread-187224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:48:20.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:48:20.193 [DEBUG] [Thread-187224] [transport.py] [_log()] userauth is OK
2026-02-14T14:48:20.193 [DEBUG] [Thread-187224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:48:20.194 [DEBUG] [Thread-187224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:48:20.194 [DEBUG] [Thread-187224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:48:20.194 [DEBUG] [Thread-187224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:48:20.218 [INFO] [Thread-187224] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:48:20.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:48:20.864 [DEBUG] [Thread-187224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:48:20.864 [DEBUG] [Thread-187224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:48:20.864 [DEBUG] [Thread-187224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:48:20.906 [DEBUG] [Thread-187224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:48:20.906 [DEBUG] [Thread-187224] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:48:20.909 [DEBUG] [Thread-187224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:48:20.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:48:20.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:48:20.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:48:20.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:48:20.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:48:20.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:48:20.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:48:20.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:48:20.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:48:20.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.533094 -999.00  +16.00  30.36     40   +2.50 1 1 2 1 1   888    0 13.16 -12.00 ----- 30.1 30.4 186.8 41.2 22.3 -27.9 21.3 -30.7 22.5 -25.4 23.7 -27.4
2026-02-14T14:48:20.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:48:20.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:48:20.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.533094
2026-02-14T14:48:20.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:48:20.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:48:20.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:48:20.933 [DEBUG] [Thread-187224] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:48:20.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:48:20.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:48:20.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:47:54', tmtdew=15.79, humidity=34.28, cloud=0.0, wind=32.2, temperature=16.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:47:39.322', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:48:21.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-14T14:48:21.041 [DEBUG] [Thread-187227] [transport.py] [_log()] starting thread (client mode): 0xa2d19390
2026-02-14T14:48:21.041 [DEBUG] [Thread-187227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:48:21.056 [DEBUG] [Thread-187227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:48:21.056 [INFO] [Thread-187227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:48:21.063 [DEBUG] [Thread-187227] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:48:21.064 [DEBUG] [Thread-187227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:48:21.064 [DEBUG] [Thread-187227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:48:21.064 [DEBUG] [Thread-187227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:48:21.064 [DEBUG] [Thread-187227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:48:21.064 [DEBUG] [Thread-187227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:48:21.064 [DEBUG] [Thread-187227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:48:21.064 [DEBUG] [Thread-187227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:48:21.064 [DEBUG] [Thread-187227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:48:21.064 [DEBUG] [Thread-187227] [transport.py] [_log()] client lang: <none>
2026-02-14T14:48:21.064 [DEBUG] [Thread-187227] [transport.py] [_log()] server lang: <none>
2026-02-14T14:48:21.064 [DEBUG] [Thread-187227] [transport.py] [_log()] kex follows: False
2026-02-14T14:48:21.064 [DEBUG] [Thread-187227] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:48:21.064 [DEBUG] [Thread-187227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:48:21.064 [DEBUG] [Thread-187227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:48:21.064 [DEBUG] [Thread-187227] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:48:21.064 [DEBUG] [Thread-187227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:48:21.064 [DEBUG] [Thread-187227] [transport.py] [_log()] Compression: none
2026-02-14T14:48:21.064 [DEBUG] [Thread-187227] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:48:21.121 [DEBUG] [Thread-187227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:48:21.122 [DEBUG] [Thread-187227] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:48:21.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:48:21.123 [DEBUG] [Thread-187227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:48:21.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:48:21.180 [DEBUG] [Thread-187227] [transport.py] [_log()] userauth is OK
2026-02-14T14:48:21.180 [DEBUG] [Thread-187227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:48:21.180 [DEBUG] [Thread-187227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:48:21.180 [DEBUG] [Thread-187227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:48:21.180 [DEBUG] [Thread-187227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:48:21.195 [INFO] [Thread-187227] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:48:21.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-14T14:48:21.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:48:22.052 [DEBUG] [Thread-187227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:48:22.053 [DEBUG] [Thread-187227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:48:22.101 [DEBUG] [Thread-187227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:48:22.101 [DEBUG] [Thread-187227] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:48:22.110 [DEBUG] [Thread-187227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:48:22.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:48:22.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:48:22.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:48:22.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:48:22.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:48:22.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:48:22.147 [DEBUG] [Thread-187227] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:48:27.241 [DEBUG] [Thread-187229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:48:35.167 [DEBUG] [Thread-187230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:48:41.364 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:48:41.365 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:48:50.230 [DEBUG] [Thread-187231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:48:52.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:48:52.169 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:48:52.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-14T14:48:53.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 48, 29), 16.07, 33.74, 0.0, 35.68, 16.63, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:48:53.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:48:29
2026-02-14T14:48:54.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:48:54.504 [DEBUG] [Thread-187232] [transport.py] [_log()] starting thread (client mode): 0xa2d101c0
2026-02-14T14:48:54.505 [DEBUG] [Thread-187232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:48:54.525 [DEBUG] [Thread-187232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:48:54.525 [INFO] [Thread-187232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:48:54.528 [DEBUG] [Thread-187232] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:48:54.528 [DEBUG] [Thread-187232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:48:54.528 [DEBUG] [Thread-187232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:48:54.529 [DEBUG] [Thread-187232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:48:54.529 [DEBUG] [Thread-187232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:48:54.529 [DEBUG] [Thread-187232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:48:54.529 [DEBUG] [Thread-187232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:48:54.529 [DEBUG] [Thread-187232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:48:54.529 [DEBUG] [Thread-187232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:48:54.529 [DEBUG] [Thread-187232] [transport.py] [_log()] client lang: <none>
2026-02-14T14:48:54.529 [DEBUG] [Thread-187232] [transport.py] [_log()] server lang: <none>
2026-02-14T14:48:54.529 [DEBUG] [Thread-187232] [transport.py] [_log()] kex follows: False
2026-02-14T14:48:54.529 [DEBUG] [Thread-187232] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:48:54.529 [DEBUG] [Thread-187232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:48:54.529 [DEBUG] [Thread-187232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:48:54.529 [DEBUG] [Thread-187232] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:48:54.529 [DEBUG] [Thread-187232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:48:54.530 [DEBUG] [Thread-187232] [transport.py] [_log()] Compression: none
2026-02-14T14:48:54.530 [DEBUG] [Thread-187232] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:48:54.548 [DEBUG] [Thread-187232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:48:54.549 [DEBUG] [Thread-187232] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:48:54.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:48:54.551 [DEBUG] [Thread-187232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:48:54.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:48:54.553 [DEBUG] [Thread-187232] [transport.py] [_log()] userauth is OK
2026-02-14T14:48:54.553 [DEBUG] [Thread-187232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:48:54.554 [DEBUG] [Thread-187232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:48:54.554 [DEBUG] [Thread-187232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:48:54.554 [DEBUG] [Thread-187232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:48:54.574 [INFO] [Thread-187232] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:48:54.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:48:55.218 [DEBUG] [Thread-187232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:48:55.218 [DEBUG] [Thread-187232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:48:55.218 [DEBUG] [Thread-187232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:48:55.259 [DEBUG] [Thread-187232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:48:55.259 [DEBUG] [Thread-187232] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:48:55.263 [DEBUG] [Thread-187232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:48:55.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:48:55.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:48:55.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:48:55.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:48:55.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:48:55.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:48:55.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:48:55.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:48:55.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:48:55.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.533441 -999.00  +15.90  20.30     41   +2.70 1 1 1 1 1   888    0 13.26 -9.41 ----- 25.3 20.3 176.8 25.2 22.1 -26.9 20.9 -28.5 22.3 -25.2 23.3 -26.8
2026-02-14T14:48:55.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:48:55.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:48:55.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.533441
2026-02-14T14:48:55.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:48:55.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:48:55.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:48:55.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:48:55.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:48:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:48:29', tmtdew=16.07, humidity=33.74, cloud=0.0, wind=35.68, temperature=16.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:48:09.302', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:48:55.291 [DEBUG] [Thread-187232] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:48:55.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-14T14:48:55.387 [DEBUG] [Thread-187235] [transport.py] [_log()] starting thread (client mode): 0xa57438e0
2026-02-14T14:48:55.387 [DEBUG] [Thread-187235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:48:55.402 [DEBUG] [Thread-187235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:48:55.402 [INFO] [Thread-187235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:48:55.409 [DEBUG] [Thread-187235] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:48:55.410 [DEBUG] [Thread-187235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:48:55.410 [DEBUG] [Thread-187235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:48:55.410 [DEBUG] [Thread-187235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:48:55.410 [DEBUG] [Thread-187235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:48:55.410 [DEBUG] [Thread-187235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:48:55.410 [DEBUG] [Thread-187235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:48:55.410 [DEBUG] [Thread-187235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:48:55.410 [DEBUG] [Thread-187235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:48:55.410 [DEBUG] [Thread-187235] [transport.py] [_log()] client lang: <none>
2026-02-14T14:48:55.410 [DEBUG] [Thread-187235] [transport.py] [_log()] server lang: <none>
2026-02-14T14:48:55.410 [DEBUG] [Thread-187235] [transport.py] [_log()] kex follows: False
2026-02-14T14:48:55.410 [DEBUG] [Thread-187235] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:48:55.410 [DEBUG] [Thread-187235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:48:55.410 [DEBUG] [Thread-187235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:48:55.410 [DEBUG] [Thread-187235] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:48:55.410 [DEBUG] [Thread-187235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:48:55.410 [DEBUG] [Thread-187235] [transport.py] [_log()] Compression: none
2026-02-14T14:48:55.410 [DEBUG] [Thread-187235] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:48:55.470 [DEBUG] [Thread-187235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:48:55.470 [DEBUG] [Thread-187235] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:48:55.471 [DEBUG] [Thread-187235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:48:55.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:48:55.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:48:55.526 [DEBUG] [Thread-187235] [transport.py] [_log()] userauth is OK
2026-02-14T14:48:55.526 [DEBUG] [Thread-187235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:48:55.526 [DEBUG] [Thread-187235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:48:55.526 [DEBUG] [Thread-187235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:48:55.526 [DEBUG] [Thread-187235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:48:55.545 [INFO] [Thread-187235] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:48:55.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-14T14:48:55.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:48:56.390 [DEBUG] [Thread-187235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:48:56.390 [DEBUG] [Thread-187235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:48:56.438 [DEBUG] [Thread-187235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:48:56.439 [DEBUG] [Thread-187235] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:48:56.448 [DEBUG] [Thread-187235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:48:56.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:48:56.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-14T14:48:56.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:48:56.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:48:56.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:48:56.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:48:56.485 [DEBUG] [Thread-187235] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:49:05.266 [DEBUG] [Thread-187237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:49:20.327 [DEBUG] [Thread-187238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:49:26.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:49:26.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:49:26.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-14T14:49:27.274 [DEBUG] [Thread-187239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:49:28.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 49, 5), 16.11, 33.64, 29.3, 35.06, 16.61, 0, 0, 0, 0, 0, 0),)
2026-02-14T14:49:28.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:49:05
2026-02-14T14:49:28.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:49:28.879 [DEBUG] [Thread-187240] [transport.py] [_log()] starting thread (client mode): 0xa2d236d0
2026-02-14T14:49:28.879 [DEBUG] [Thread-187240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:49:28.900 [DEBUG] [Thread-187240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:49:28.901 [INFO] [Thread-187240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:49:28.904 [DEBUG] [Thread-187240] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:49:28.904 [DEBUG] [Thread-187240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:49:28.904 [DEBUG] [Thread-187240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:49:28.905 [DEBUG] [Thread-187240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:49:28.905 [DEBUG] [Thread-187240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:49:28.905 [DEBUG] [Thread-187240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:49:28.905 [DEBUG] [Thread-187240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:49:28.905 [DEBUG] [Thread-187240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:49:28.905 [DEBUG] [Thread-187240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:49:28.905 [DEBUG] [Thread-187240] [transport.py] [_log()] client lang: <none>
2026-02-14T14:49:28.905 [DEBUG] [Thread-187240] [transport.py] [_log()] server lang: <none>
2026-02-14T14:49:28.905 [DEBUG] [Thread-187240] [transport.py] [_log()] kex follows: False
2026-02-14T14:49:28.905 [DEBUG] [Thread-187240] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:49:28.905 [DEBUG] [Thread-187240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:49:28.905 [DEBUG] [Thread-187240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:49:28.905 [DEBUG] [Thread-187240] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:49:28.905 [DEBUG] [Thread-187240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:49:28.905 [DEBUG] [Thread-187240] [transport.py] [_log()] Compression: none
2026-02-14T14:49:28.905 [DEBUG] [Thread-187240] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:49:28.922 [DEBUG] [Thread-187240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:49:28.923 [DEBUG] [Thread-187240] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:49:28.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:49:28.924 [DEBUG] [Thread-187240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:49:28.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:49:28.926 [DEBUG] [Thread-187240] [transport.py] [_log()] userauth is OK
2026-02-14T14:49:28.926 [DEBUG] [Thread-187240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:49:28.927 [DEBUG] [Thread-187240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:49:28.927 [DEBUG] [Thread-187240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:49:28.927 [DEBUG] [Thread-187240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:49:28.945 [INFO] [Thread-187240] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:49:28.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:49:29.715 [DEBUG] [Thread-187240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:49:29.715 [DEBUG] [Thread-187240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:49:29.716 [DEBUG] [Thread-187240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:49:29.756 [DEBUG] [Thread-187240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:49:29.756 [DEBUG] [Thread-187240] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:49:29.759 [DEBUG] [Thread-187240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:49:29.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:49:29.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:49:29.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:49:29.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:49:29.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:49:29.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:49:29.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:49:29.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:49:29.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:49:29.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.533788 -999.00  +16.00  21.95     40   +2.70 1 1 1 1 1   888    0 13.53 -6.96 ----- 18.6 21.9 176.4 31.4 22.1 -27.7 20.8 -30.5 22.3 -25.1 23.4 -28.0
2026-02-14T14:49:29.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:49:29.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:49:29.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.533788
2026-02-14T14:49:29.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:49:29.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:49:29.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:49:29.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:49:29.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:49:29.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:49:05', tmtdew=16.11, humidity=33.64, cloud=29.3, wind=35.06, temperature=16.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:48:39.283', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:49:29.786 [DEBUG] [Thread-187240] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:49:29.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-14T14:49:29.882 [DEBUG] [Thread-187243] [transport.py] [_log()] starting thread (client mode): 0xa5743fa0
2026-02-14T14:49:29.882 [DEBUG] [Thread-187243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:49:29.897 [DEBUG] [Thread-187243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:49:29.897 [INFO] [Thread-187243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:49:29.905 [DEBUG] [Thread-187243] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:49:29.905 [DEBUG] [Thread-187243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:49:29.905 [DEBUG] [Thread-187243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:49:29.905 [DEBUG] [Thread-187243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:49:29.905 [DEBUG] [Thread-187243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:49:29.905 [DEBUG] [Thread-187243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:49:29.905 [DEBUG] [Thread-187243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:49:29.906 [DEBUG] [Thread-187243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:49:29.906 [DEBUG] [Thread-187243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:49:29.906 [DEBUG] [Thread-187243] [transport.py] [_log()] client lang: <none>
2026-02-14T14:49:29.906 [DEBUG] [Thread-187243] [transport.py] [_log()] server lang: <none>
2026-02-14T14:49:29.906 [DEBUG] [Thread-187243] [transport.py] [_log()] kex follows: False
2026-02-14T14:49:29.906 [DEBUG] [Thread-187243] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:49:29.906 [DEBUG] [Thread-187243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:49:29.906 [DEBUG] [Thread-187243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:49:29.906 [DEBUG] [Thread-187243] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:49:29.906 [DEBUG] [Thread-187243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:49:29.906 [DEBUG] [Thread-187243] [transport.py] [_log()] Compression: none
2026-02-14T14:49:29.906 [DEBUG] [Thread-187243] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:49:29.966 [DEBUG] [Thread-187243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:49:29.967 [DEBUG] [Thread-187243] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:49:29.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:49:29.968 [DEBUG] [Thread-187243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:49:29.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:49:30.022 [DEBUG] [Thread-187243] [transport.py] [_log()] userauth is OK
2026-02-14T14:49:30.022 [DEBUG] [Thread-187243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:49:30.022 [DEBUG] [Thread-187243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:49:30.022 [DEBUG] [Thread-187243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:49:30.023 [DEBUG] [Thread-187243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:49:30.041 [INFO] [Thread-187243] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:49:30.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-14T14:49:30.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:49:30.862 [DEBUG] [Thread-187243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:49:30.862 [DEBUG] [Thread-187243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:49:30.910 [DEBUG] [Thread-187243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:49:30.911 [DEBUG] [Thread-187243] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:49:30.923 [DEBUG] [Thread-187243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:49:30.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:49: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-14T14:49: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-14T14:49:30.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:49:30.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:49:30.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:49:30.962 [DEBUG] [Thread-187243] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:49:35.363 [DEBUG] [Thread-187245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:49:41.505 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:49:41.506 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:49:50.436 [DEBUG] [Thread-187246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:50:00.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:50:00.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:50:00.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:50:03.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 49, 40), 17.35, 31.01, 29.3, 33.91, 17.88, 0, 0, 0, 0, 0, 0),)
2026-02-14T14:50:03.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:49:40
2026-02-14T14:50:03.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:50:03.559 [DEBUG] [Thread-187247] [transport.py] [_log()] starting thread (client mode): 0xa2d20220
2026-02-14T14:50:03.559 [DEBUG] [Thread-187247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:50:03.581 [DEBUG] [Thread-187247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:50:03.581 [INFO] [Thread-187247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:50:03.584 [DEBUG] [Thread-187247] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:50:03.584 [DEBUG] [Thread-187247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:50:03.584 [DEBUG] [Thread-187247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:50:03.584 [DEBUG] [Thread-187247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:50:03.584 [DEBUG] [Thread-187247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:50:03.584 [DEBUG] [Thread-187247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:50:03.584 [DEBUG] [Thread-187247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:50:03.584 [DEBUG] [Thread-187247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:50:03.584 [DEBUG] [Thread-187247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:50:03.584 [DEBUG] [Thread-187247] [transport.py] [_log()] client lang: <none>
2026-02-14T14:50:03.584 [DEBUG] [Thread-187247] [transport.py] [_log()] server lang: <none>
2026-02-14T14:50:03.584 [DEBUG] [Thread-187247] [transport.py] [_log()] kex follows: False
2026-02-14T14:50:03.584 [DEBUG] [Thread-187247] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:50:03.585 [DEBUG] [Thread-187247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:50:03.585 [DEBUG] [Thread-187247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:50:03.585 [DEBUG] [Thread-187247] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:50:03.585 [DEBUG] [Thread-187247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:50:03.585 [DEBUG] [Thread-187247] [transport.py] [_log()] Compression: none
2026-02-14T14:50:03.585 [DEBUG] [Thread-187247] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:50:03.599 [DEBUG] [Thread-187247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:50:03.599 [DEBUG] [Thread-187247] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:50:03.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:50:03.600 [DEBUG] [Thread-187247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:50:03.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:50:03.602 [DEBUG] [Thread-187247] [transport.py] [_log()] userauth is OK
2026-02-14T14:50:03.602 [DEBUG] [Thread-187247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:50:03.602 [DEBUG] [Thread-187247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:50:03.602 [DEBUG] [Thread-187247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:50:03.603 [DEBUG] [Thread-187247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:50:03.621 [INFO] [Thread-187247] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:50:03.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:50:04.486 [DEBUG] [Thread-187247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:50:04.487 [DEBUG] [Thread-187247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:50:04.487 [DEBUG] [Thread-187247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:50:04.527 [DEBUG] [Thread-187247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:50:04.527 [DEBUG] [Thread-187247] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:50:04.530 [DEBUG] [Thread-187247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:50:04.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:50:04.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:50:04.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:50:04.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:50:04.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:50:04.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:50:04.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:50:04.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:50:04.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:50:04.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.534136 -999.00  +16.30  17.97     40   +2.90 1 1 1 1 1   888    0 13.56 -4.61 ----- 14.9 18.0 162.8 28.7 22.2 -26.5 21.2 -25.9 22.5 -23.2 23.7 -25.0
2026-02-14T14:50:04.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:50:04.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:50:04.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.534136
2026-02-14T14:50:04.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:50:04.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:50:04.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:50:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:50:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:50:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:49:40', tmtdew=17.35, humidity=31.01, cloud=29.3, wind=33.91, temperature=17.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:49:09.350', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:50:04.569 [DEBUG] [Thread-187247] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:50:04.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-14T14:50:04.666 [DEBUG] [Thread-187250] [transport.py] [_log()] starting thread (client mode): 0xa2dc3af0
2026-02-14T14:50:04.666 [DEBUG] [Thread-187250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:50:04.681 [DEBUG] [Thread-187250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:50:04.681 [INFO] [Thread-187250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:50:04.688 [DEBUG] [Thread-187250] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:50:04.688 [DEBUG] [Thread-187250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:50:04.689 [DEBUG] [Thread-187250] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:50:04.689 [DEBUG] [Thread-187250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:50:04.689 [DEBUG] [Thread-187250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:50:04.689 [DEBUG] [Thread-187250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:50:04.689 [DEBUG] [Thread-187250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:50:04.689 [DEBUG] [Thread-187250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:50:04.689 [DEBUG] [Thread-187250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:50:04.690 [DEBUG] [Thread-187250] [transport.py] [_log()] client lang: <none>
2026-02-14T14:50:04.690 [DEBUG] [Thread-187250] [transport.py] [_log()] server lang: <none>
2026-02-14T14:50:04.690 [DEBUG] [Thread-187250] [transport.py] [_log()] kex follows: False
2026-02-14T14:50:04.690 [DEBUG] [Thread-187250] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:50:04.690 [DEBUG] [Thread-187250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:50:04.690 [DEBUG] [Thread-187250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:50:04.690 [DEBUG] [Thread-187250] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:50:04.690 [DEBUG] [Thread-187250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:50:04.691 [DEBUG] [Thread-187250] [transport.py] [_log()] Compression: none
2026-02-14T14:50:04.691 [DEBUG] [Thread-187250] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:50:04.750 [DEBUG] [Thread-187250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:50:04.750 [DEBUG] [Thread-187250] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:50:04.751 [DEBUG] [Thread-187250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:50:04.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:50:04.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:50:04.807 [DEBUG] [Thread-187250] [transport.py] [_log()] userauth is OK
2026-02-14T14:50:04.807 [DEBUG] [Thread-187250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:50:04.807 [DEBUG] [Thread-187250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:50:04.807 [DEBUG] [Thread-187250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:50:04.807 [DEBUG] [Thread-187250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:50:04.826 [INFO] [Thread-187250] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:50:04.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-14T14:50:04.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:50:05.472 [DEBUG] [Thread-187252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:50:05.654 [DEBUG] [Thread-187250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:50:05.654 [DEBUG] [Thread-187250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:50:05.702 [DEBUG] [Thread-187250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:50:05.702 [DEBUG] [Thread-187250] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:50:05.710 [DEBUG] [Thread-187250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:50:05.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:50:05.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-14T14:50:05.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:50:05.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:50:05.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:50:05.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:50:05.743 [DEBUG] [Thread-187250] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:50:20.519 [DEBUG] [Thread-187253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:50:27.329 [DEBUG] [Thread-187254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:50:35.558 [DEBUG] [Thread-187255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:50:35.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:50:35.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:50:35.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-14T14:50:37.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 50, 15), 16.2, 33.32, 29.3, 23.11, 16.83, 0, 0, 0, 0, 0, 0),)
2026-02-14T14:50:37.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:50:15
2026-02-14T14:50:37.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:50:38.105 [DEBUG] [Thread-187256] [transport.py] [_log()] starting thread (client mode): 0xa2d221a0
2026-02-14T14:50:38.105 [DEBUG] [Thread-187256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:50:38.117 [DEBUG] [Thread-187256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:50:38.117 [INFO] [Thread-187256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:50:38.120 [DEBUG] [Thread-187256] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:50:38.121 [DEBUG] [Thread-187256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:50:38.121 [DEBUG] [Thread-187256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:50:38.121 [DEBUG] [Thread-187256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:50:38.121 [DEBUG] [Thread-187256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:50:38.121 [DEBUG] [Thread-187256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:50:38.121 [DEBUG] [Thread-187256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:50:38.121 [DEBUG] [Thread-187256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:50:38.121 [DEBUG] [Thread-187256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:50:38.121 [DEBUG] [Thread-187256] [transport.py] [_log()] client lang: <none>
2026-02-14T14:50:38.121 [DEBUG] [Thread-187256] [transport.py] [_log()] server lang: <none>
2026-02-14T14:50:38.121 [DEBUG] [Thread-187256] [transport.py] [_log()] kex follows: False
2026-02-14T14:50:38.121 [DEBUG] [Thread-187256] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:50:38.121 [DEBUG] [Thread-187256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:50:38.121 [DEBUG] [Thread-187256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:50:38.121 [DEBUG] [Thread-187256] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:50:38.121 [DEBUG] [Thread-187256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:50:38.121 [DEBUG] [Thread-187256] [transport.py] [_log()] Compression: none
2026-02-14T14:50:38.121 [DEBUG] [Thread-187256] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:50:38.140 [DEBUG] [Thread-187256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:50:38.141 [DEBUG] [Thread-187256] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:50:38.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:50:38.142 [DEBUG] [Thread-187256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:50:38.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:50:38.144 [DEBUG] [Thread-187256] [transport.py] [_log()] userauth is OK
2026-02-14T14:50:38.144 [DEBUG] [Thread-187256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:50:38.144 [DEBUG] [Thread-187256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:50:38.144 [DEBUG] [Thread-187256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:50:38.144 [DEBUG] [Thread-187256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:50:38.179 [INFO] [Thread-187256] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:50:38.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:50:38.795 [DEBUG] [Thread-187256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:50:38.795 [DEBUG] [Thread-187256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:50:38.795 [DEBUG] [Thread-187256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:50:38.836 [DEBUG] [Thread-187256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:50:38.836 [DEBUG] [Thread-187256] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:50:38.842 [DEBUG] [Thread-187256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:50:38.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:50:38.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:50:38.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:50:38.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:50:38.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:50:38.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:50:38.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:50:38.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:50:38.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:50:38.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.534830 -999.00  +17.20  26.73     38   +2.90 1 1 1 1 1   888    0 13.34 -1.11 ----- 31.9 26.7 167.8 36.5 22.6 -24.7 21.7 -23.7 22.9 -22.9 24.0 -24.4
2026-02-14T14:50:38.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:50:38.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:50:38.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.534830
2026-02-14T14:50:38.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:50:38.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:50:38.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:50:38.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:50:38.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:50:38.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:50:15', tmtdew=16.2, humidity=33.32, cloud=29.3, wind=23.11, temperature=16.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:50:09.312', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:50:38.872 [DEBUG] [Thread-187256] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:50:38.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-14T14:50:38.975 [DEBUG] [Thread-187259] [transport.py] [_log()] starting thread (client mode): 0xa5742140
2026-02-14T14:50:38.975 [DEBUG] [Thread-187259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:50:38.990 [DEBUG] [Thread-187259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:50:38.990 [INFO] [Thread-187259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:50:38.998 [DEBUG] [Thread-187259] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:50:38.998 [DEBUG] [Thread-187259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:50:38.998 [DEBUG] [Thread-187259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:50:38.998 [DEBUG] [Thread-187259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:50:38.998 [DEBUG] [Thread-187259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:50:38.998 [DEBUG] [Thread-187259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:50:38.998 [DEBUG] [Thread-187259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:50:38.999 [DEBUG] [Thread-187259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:50:38.999 [DEBUG] [Thread-187259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:50:38.999 [DEBUG] [Thread-187259] [transport.py] [_log()] client lang: <none>
2026-02-14T14:50:38.999 [DEBUG] [Thread-187259] [transport.py] [_log()] server lang: <none>
2026-02-14T14:50:38.999 [DEBUG] [Thread-187259] [transport.py] [_log()] kex follows: False
2026-02-14T14:50:38.999 [DEBUG] [Thread-187259] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:50:38.999 [DEBUG] [Thread-187259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:50:38.999 [DEBUG] [Thread-187259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:50:38.999 [DEBUG] [Thread-187259] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:50:38.999 [DEBUG] [Thread-187259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:50:38.999 [DEBUG] [Thread-187259] [transport.py] [_log()] Compression: none
2026-02-14T14:50:38.999 [DEBUG] [Thread-187259] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:50:39.060 [DEBUG] [Thread-187259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:50:39.060 [DEBUG] [Thread-187259] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:50:39.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:50:39.062 [DEBUG] [Thread-187259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:50:39.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:50:39.119 [DEBUG] [Thread-187259] [transport.py] [_log()] userauth is OK
2026-02-14T14:50:39.119 [DEBUG] [Thread-187259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:50:39.120 [DEBUG] [Thread-187259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:50:39.120 [DEBUG] [Thread-187259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:50:39.120 [DEBUG] [Thread-187259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:50:39.143 [INFO] [Thread-187259] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:50:39.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-14T14:50:39.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:50:39.959 [DEBUG] [Thread-187259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:50:39.960 [DEBUG] [Thread-187259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:50:40.007 [DEBUG] [Thread-187259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:50:40.007 [DEBUG] [Thread-187259] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:50:40.017 [DEBUG] [Thread-187259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:50:40.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:50:40.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-14T14:50:40.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-14T14:50:40.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:50:40.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:50:40.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:50:40.054 [DEBUG] [Thread-187259] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:50:41.649 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:50:41.651 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:50:50.595 [DEBUG] [Thread-187261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:51:05.657 [DEBUG] [Thread-187262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:51:10.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:51:10.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:51:10.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-14T14:51:11.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 50, 50), 16.32, 33.1, 29.3, 27.47, 16.66, 0, 0, 0, 0, 0, 0),)
2026-02-14T14:51:11.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:50:50
2026-02-14T14:51:12.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:51:12.439 [DEBUG] [Thread-187263] [transport.py] [_log()] starting thread (client mode): 0xa2d18850
2026-02-14T14:51:12.440 [DEBUG] [Thread-187263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:51:12.460 [DEBUG] [Thread-187263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:51:12.460 [INFO] [Thread-187263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:51:12.460 [DEBUG] [Thread-187263] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:51:12.461 [DEBUG] [Thread-187263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:51:12.461 [DEBUG] [Thread-187263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:51:12.461 [DEBUG] [Thread-187263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:51:12.461 [DEBUG] [Thread-187263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:51:12.461 [DEBUG] [Thread-187263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:51:12.461 [DEBUG] [Thread-187263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:51:12.461 [DEBUG] [Thread-187263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:51:12.461 [DEBUG] [Thread-187263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:51:12.461 [DEBUG] [Thread-187263] [transport.py] [_log()] client lang: <none>
2026-02-14T14:51:12.461 [DEBUG] [Thread-187263] [transport.py] [_log()] server lang: <none>
2026-02-14T14:51:12.461 [DEBUG] [Thread-187263] [transport.py] [_log()] kex follows: False
2026-02-14T14:51:12.461 [DEBUG] [Thread-187263] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:51:12.461 [DEBUG] [Thread-187263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:51:12.461 [DEBUG] [Thread-187263] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:51:12.461 [DEBUG] [Thread-187263] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:51:12.461 [DEBUG] [Thread-187263] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:51:12.461 [DEBUG] [Thread-187263] [transport.py] [_log()] Compression: none
2026-02-14T14:51:12.461 [DEBUG] [Thread-187263] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:51:12.469 [DEBUG] [Thread-187263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:51:12.469 [DEBUG] [Thread-187263] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:51:12.469 [DEBUG] [Thread-187263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:51:12.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:51:12.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:51:12.471 [DEBUG] [Thread-187263] [transport.py] [_log()] userauth is OK
2026-02-14T14:51:12.471 [DEBUG] [Thread-187263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:51:12.471 [DEBUG] [Thread-187263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:51:12.471 [DEBUG] [Thread-187263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:51:12.471 [DEBUG] [Thread-187263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:51:12.493 [INFO] [Thread-187263] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:51:12.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:51:13.089 [DEBUG] [Thread-187263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:51:13.089 [DEBUG] [Thread-187263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:51:13.089 [DEBUG] [Thread-187263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:51:13.129 [DEBUG] [Thread-187263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:51:13.129 [DEBUG] [Thread-187263] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:51:13.131 [DEBUG] [Thread-187263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:51:13.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:51:13.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:51:13.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:51:13.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:51:13.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:51:13.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:51:13.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:51:13.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:51:13.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:51:13.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.535177 -999.00  +17.00  22.18     38   +2.70 1 1 1 1 1   888    0 13.69 0.57 ----- 24.8 22.2 162.2 29.2 22.7 -25.7 21.8 -25.5 22.9 -24.8 24.1 -27.2
2026-02-14T14:51:13.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:51:13.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:51:13.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.535177
2026-02-14T14:51:13.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:51:13.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:51:13.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:51:13.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:51:13.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:51:13.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:50:50', tmtdew=16.32, humidity=33.1, cloud=29.3, wind=27.47, temperature=16.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:50:39.293', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:51:13.145 [DEBUG] [Thread-187263] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:51:13.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T14:51:13.244 [DEBUG] [Thread-187266] [transport.py] [_log()] starting thread (client mode): 0xa2dc41f0
2026-02-14T14:51:13.244 [DEBUG] [Thread-187266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:51:13.258 [DEBUG] [Thread-187266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:51:13.258 [INFO] [Thread-187266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:51:13.265 [DEBUG] [Thread-187266] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:51:13.265 [DEBUG] [Thread-187266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:51:13.265 [DEBUG] [Thread-187266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:51:13.266 [DEBUG] [Thread-187266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:51:13.266 [DEBUG] [Thread-187266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:51:13.266 [DEBUG] [Thread-187266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:51:13.266 [DEBUG] [Thread-187266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:51:13.266 [DEBUG] [Thread-187266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:51:13.266 [DEBUG] [Thread-187266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:51:13.266 [DEBUG] [Thread-187266] [transport.py] [_log()] client lang: <none>
2026-02-14T14:51:13.266 [DEBUG] [Thread-187266] [transport.py] [_log()] server lang: <none>
2026-02-14T14:51:13.266 [DEBUG] [Thread-187266] [transport.py] [_log()] kex follows: False
2026-02-14T14:51:13.267 [DEBUG] [Thread-187266] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:51:13.267 [DEBUG] [Thread-187266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:51:13.267 [DEBUG] [Thread-187266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:51:13.267 [DEBUG] [Thread-187266] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:51:13.267 [DEBUG] [Thread-187266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:51:13.267 [DEBUG] [Thread-187266] [transport.py] [_log()] Compression: none
2026-02-14T14:51:13.267 [DEBUG] [Thread-187266] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:51:13.323 [DEBUG] [Thread-187266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:51:13.323 [DEBUG] [Thread-187266] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:51:13.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:51:13.324 [DEBUG] [Thread-187266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:51:13.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:51:13.379 [DEBUG] [Thread-187266] [transport.py] [_log()] userauth is OK
2026-02-14T14:51:13.379 [DEBUG] [Thread-187266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:51:13.380 [DEBUG] [Thread-187266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:51:13.380 [DEBUG] [Thread-187266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:51:13.380 [DEBUG] [Thread-187266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:51:13.402 [INFO] [Thread-187266] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:51:13.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-14T14:51:13.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:51:14.229 [DEBUG] [Thread-187266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:51:14.230 [DEBUG] [Thread-187266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:51:14.277 [DEBUG] [Thread-187266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:51:14.278 [DEBUG] [Thread-187266] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:51:14.287 [DEBUG] [Thread-187266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:51:14.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:51:14.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-14T14:51:14.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:51:14.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:51:14.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:51:14.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:51:14.323 [DEBUG] [Thread-187266] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:51:20.695 [DEBUG] [Thread-187268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:51:27.366 [DEBUG] [Thread-187269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:51:35.749 [DEBUG] [Thread-187270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:51:41.809 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:51:41.811 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:51:44.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:51:44.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:51:44.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-14T14:51:46.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 51, 26), 16.44, 32.89, 29.3, 36.05, 16.86, 0, 0, 0, 0, 0, 0),)
2026-02-14T14:51:46.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:51:26
2026-02-14T14:51:47.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:51:47.191 [DEBUG] [Thread-187271] [transport.py] [_log()] starting thread (client mode): 0xa2d195d0
2026-02-14T14:51:47.191 [DEBUG] [Thread-187271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:51:47.211 [DEBUG] [Thread-187271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:51:47.211 [INFO] [Thread-187271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:51:47.212 [DEBUG] [Thread-187271] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:51:47.212 [DEBUG] [Thread-187271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:51:47.212 [DEBUG] [Thread-187271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:51:47.213 [DEBUG] [Thread-187271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:51:47.213 [DEBUG] [Thread-187271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:51:47.213 [DEBUG] [Thread-187271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:51:47.213 [DEBUG] [Thread-187271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:51:47.213 [DEBUG] [Thread-187271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:51:47.213 [DEBUG] [Thread-187271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:51:47.213 [DEBUG] [Thread-187271] [transport.py] [_log()] client lang: <none>
2026-02-14T14:51:47.213 [DEBUG] [Thread-187271] [transport.py] [_log()] server lang: <none>
2026-02-14T14:51:47.213 [DEBUG] [Thread-187271] [transport.py] [_log()] kex follows: False
2026-02-14T14:51:47.213 [DEBUG] [Thread-187271] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:51:47.213 [DEBUG] [Thread-187271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:51:47.213 [DEBUG] [Thread-187271] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:51:47.213 [DEBUG] [Thread-187271] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:51:47.213 [DEBUG] [Thread-187271] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:51:47.213 [DEBUG] [Thread-187271] [transport.py] [_log()] Compression: none
2026-02-14T14:51:47.213 [DEBUG] [Thread-187271] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:51:47.221 [DEBUG] [Thread-187271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:51:47.221 [DEBUG] [Thread-187271] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:51:47.221 [DEBUG] [Thread-187271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:51:47.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:51:47.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:51:47.223 [DEBUG] [Thread-187271] [transport.py] [_log()] userauth is OK
2026-02-14T14:51:47.223 [DEBUG] [Thread-187271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:51:47.223 [DEBUG] [Thread-187271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:51:47.223 [DEBUG] [Thread-187271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:51:47.223 [DEBUG] [Thread-187271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:51:47.246 [INFO] [Thread-187271] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:51:47.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:51:47.874 [DEBUG] [Thread-187271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:51:47.874 [DEBUG] [Thread-187271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:51:47.875 [DEBUG] [Thread-187271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:51:47.915 [DEBUG] [Thread-187271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:51:47.915 [DEBUG] [Thread-187271] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:51:47.918 [DEBUG] [Thread-187271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:51:47.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:51:47.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:51:47.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:51:47.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:51:47.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:51:47.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:51:47.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:51:47.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:51:47.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:51:47.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.535872 -999.00  +16.40  23.23     39   +2.60 1 1 1 1 1   888    0 13.84 2.90 ----- 22.4 23.2 150.4 36.2 22.4 -28.3 21.5 -26.3 22.6 -26.9 23.9 -28.5
2026-02-14T14:51:47.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:51:47.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:51:47.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.535872
2026-02-14T14:51:47.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:51:47.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:51:47.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:51:47.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:51:47.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:51:47.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:51:26', tmtdew=16.44, humidity=32.89, cloud=29.3, wind=36.05, temperature=16.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:51:39.341', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:51:47.942 [DEBUG] [Thread-187271] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:51:48.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-14T14:51:48.038 [DEBUG] [Thread-187274] [transport.py] [_log()] starting thread (client mode): 0xa2d198a0
2026-02-14T14:51:48.038 [DEBUG] [Thread-187274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:51:48.053 [DEBUG] [Thread-187274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:51:48.053 [INFO] [Thread-187274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:51:48.060 [DEBUG] [Thread-187274] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:51:48.060 [DEBUG] [Thread-187274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:51:48.061 [DEBUG] [Thread-187274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:51:48.061 [DEBUG] [Thread-187274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:51:48.061 [DEBUG] [Thread-187274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:51:48.061 [DEBUG] [Thread-187274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:51:48.061 [DEBUG] [Thread-187274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:51:48.061 [DEBUG] [Thread-187274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:51:48.061 [DEBUG] [Thread-187274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:51:48.061 [DEBUG] [Thread-187274] [transport.py] [_log()] client lang: <none>
2026-02-14T14:51:48.061 [DEBUG] [Thread-187274] [transport.py] [_log()] server lang: <none>
2026-02-14T14:51:48.061 [DEBUG] [Thread-187274] [transport.py] [_log()] kex follows: False
2026-02-14T14:51:48.061 [DEBUG] [Thread-187274] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:51:48.061 [DEBUG] [Thread-187274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:51:48.061 [DEBUG] [Thread-187274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:51:48.061 [DEBUG] [Thread-187274] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:51:48.061 [DEBUG] [Thread-187274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:51:48.061 [DEBUG] [Thread-187274] [transport.py] [_log()] Compression: none
2026-02-14T14:51:48.061 [DEBUG] [Thread-187274] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:51:48.119 [DEBUG] [Thread-187274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:51:48.120 [DEBUG] [Thread-187274] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:51:48.120 [DEBUG] [Thread-187274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:51:48.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:51:48.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:51:48.175 [DEBUG] [Thread-187274] [transport.py] [_log()] userauth is OK
2026-02-14T14:51:48.175 [DEBUG] [Thread-187274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:51:48.175 [DEBUG] [Thread-187274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:51:48.176 [DEBUG] [Thread-187274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:51:48.176 [DEBUG] [Thread-187274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:51:48.195 [INFO] [Thread-187274] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:51:48.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-14T14:51:48.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:51:49.019 [DEBUG] [Thread-187274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:51:49.019 [DEBUG] [Thread-187274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:51:49.067 [DEBUG] [Thread-187274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:51:49.068 [DEBUG] [Thread-187274] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:51:49.077 [DEBUG] [Thread-187274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:51:49.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:51: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')
2026-02-14T14:51: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') -> 00000000
2026-02-14T14:51:49.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:51:49.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:51:49.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:51:49.113 [DEBUG] [Thread-187274] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:51:50.783 [DEBUG] [Thread-187276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:52:05.833 [DEBUG] [Thread-187277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:52:19.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:52:19.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:52:19.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-14T14:52:20.870 [DEBUG] [Thread-187278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:52:21.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 52, 1), 16.45, 32.84, 29.3, 33.51, 16.76, 0, 0, 0, 0, 0, 0),)
2026-02-14T14:52:21.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:52:01
2026-02-14T14:52:21.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:52:21.740 [DEBUG] [Thread-187279] [transport.py] [_log()] starting thread (client mode): 0xa2d195d0
2026-02-14T14:52:21.740 [DEBUG] [Thread-187279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:52:21.759 [DEBUG] [Thread-187279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:52:21.759 [INFO] [Thread-187279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:52:21.760 [DEBUG] [Thread-187279] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:52:21.760 [DEBUG] [Thread-187279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:52:21.761 [DEBUG] [Thread-187279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:52:21.761 [DEBUG] [Thread-187279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:52:21.761 [DEBUG] [Thread-187279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:52:21.761 [DEBUG] [Thread-187279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:52:21.761 [DEBUG] [Thread-187279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:52:21.761 [DEBUG] [Thread-187279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:52:21.761 [DEBUG] [Thread-187279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:52:21.761 [DEBUG] [Thread-187279] [transport.py] [_log()] client lang: <none>
2026-02-14T14:52:21.761 [DEBUG] [Thread-187279] [transport.py] [_log()] server lang: <none>
2026-02-14T14:52:21.761 [DEBUG] [Thread-187279] [transport.py] [_log()] kex follows: False
2026-02-14T14:52:21.761 [DEBUG] [Thread-187279] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:52:21.761 [DEBUG] [Thread-187279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:52:21.761 [DEBUG] [Thread-187279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:52:21.761 [DEBUG] [Thread-187279] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:52:21.761 [DEBUG] [Thread-187279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:52:21.761 [DEBUG] [Thread-187279] [transport.py] [_log()] Compression: none
2026-02-14T14:52:21.761 [DEBUG] [Thread-187279] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:52:21.770 [DEBUG] [Thread-187279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:52:21.770 [DEBUG] [Thread-187279] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:52:21.771 [DEBUG] [Thread-187279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:52:21.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:52:21.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:52:21.772 [DEBUG] [Thread-187279] [transport.py] [_log()] userauth is OK
2026-02-14T14:52:21.772 [DEBUG] [Thread-187279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:52:21.772 [DEBUG] [Thread-187279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:52:21.772 [DEBUG] [Thread-187279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:52:21.772 [DEBUG] [Thread-187279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:52:21.789 [INFO] [Thread-187279] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:52:21.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:52:22.432 [DEBUG] [Thread-187279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:52:22.432 [DEBUG] [Thread-187279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:52:22.433 [DEBUG] [Thread-187279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:52:22.473 [DEBUG] [Thread-187279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:52:22.473 [DEBUG] [Thread-187279] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:52:22.477 [DEBUG] [Thread-187279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:52:22.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:52:22.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:52:22.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:52:22.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:52:22.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:52:22.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:52:22.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:52:22.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:52:22.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:52:22.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.536219 -999.00  +16.20  27.68     39   +2.40 1 1 1 1 1   888    0 13.79 3.97 ----- 27.7 27.7 163.6 38.4 22.5 -27.3 21.6 -25.7 22.7 -26.0 23.9 -27.8
2026-02-14T14:52:22.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:52:22.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:52:22.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.536219
2026-02-14T14:52:22.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:52:22.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:52:22.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:52:22.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:52:22.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:52:22.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:52:01', tmtdew=16.45, humidity=32.84, cloud=29.3, wind=33.51, temperature=16.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:52:09.322', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:52:22.506 [DEBUG] [Thread-187279] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:52:22.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-14T14:52:22.601 [DEBUG] [Thread-187282] [transport.py] [_log()] starting thread (client mode): 0xa2dc08b0
2026-02-14T14:52:22.601 [DEBUG] [Thread-187282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:52:22.615 [DEBUG] [Thread-187282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:52:22.615 [INFO] [Thread-187282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:52:22.623 [DEBUG] [Thread-187282] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:52:22.624 [DEBUG] [Thread-187282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:52:22.624 [DEBUG] [Thread-187282] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:52:22.624 [DEBUG] [Thread-187282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:52:22.624 [DEBUG] [Thread-187282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:52:22.624 [DEBUG] [Thread-187282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:52:22.624 [DEBUG] [Thread-187282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:52:22.624 [DEBUG] [Thread-187282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:52:22.624 [DEBUG] [Thread-187282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:52:22.624 [DEBUG] [Thread-187282] [transport.py] [_log()] client lang: <none>
2026-02-14T14:52:22.624 [DEBUG] [Thread-187282] [transport.py] [_log()] server lang: <none>
2026-02-14T14:52:22.624 [DEBUG] [Thread-187282] [transport.py] [_log()] kex follows: False
2026-02-14T14:52:22.624 [DEBUG] [Thread-187282] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:52:22.624 [DEBUG] [Thread-187282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:52:22.624 [DEBUG] [Thread-187282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:52:22.624 [DEBUG] [Thread-187282] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:52:22.624 [DEBUG] [Thread-187282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:52:22.624 [DEBUG] [Thread-187282] [transport.py] [_log()] Compression: none
2026-02-14T14:52:22.625 [DEBUG] [Thread-187282] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:52:22.680 [DEBUG] [Thread-187282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:52:22.681 [DEBUG] [Thread-187282] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:52:22.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:52:22.682 [DEBUG] [Thread-187282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:52:22.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:52:22.736 [DEBUG] [Thread-187282] [transport.py] [_log()] userauth is OK
2026-02-14T14:52:22.736 [DEBUG] [Thread-187282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:52:22.737 [DEBUG] [Thread-187282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:52:22.737 [DEBUG] [Thread-187282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:52:22.737 [DEBUG] [Thread-187282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:52:22.756 [INFO] [Thread-187282] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:52:22.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T14:52:22.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:52:23.597 [DEBUG] [Thread-187282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:52:23.597 [DEBUG] [Thread-187282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:52:23.645 [DEBUG] [Thread-187282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:52:23.645 [DEBUG] [Thread-187282] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:52:23.653 [DEBUG] [Thread-187282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:52:23.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:52:23.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:52:23.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-14T14:52:23.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:52:23.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:52:23.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:52:23.684 [DEBUG] [Thread-187282] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:52:27.399 [DEBUG] [Thread-187284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:52:35.906 [DEBUG] [Thread-187285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:52:41.950 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:52:41.952 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:52:50.967 [DEBUG] [Thread-187286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:52:53.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:52:53.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:52:53.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:52:55.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 52, 36), 17.37, 30.94, 29.3, 29.78, 17.82, 0, 0, 0, 0, 0, 0),)
2026-02-14T14:52:55.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:52:36
2026-02-14T14:52:55.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:52:55.961 [DEBUG] [Thread-187287] [transport.py] [_log()] starting thread (client mode): 0xa2ddd510
2026-02-14T14:52:55.962 [DEBUG] [Thread-187287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:52:55.982 [DEBUG] [Thread-187287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:52:55.983 [INFO] [Thread-187287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:52:55.985 [DEBUG] [Thread-187287] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:52:55.986 [DEBUG] [Thread-187287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:52:55.986 [DEBUG] [Thread-187287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:52:55.986 [DEBUG] [Thread-187287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:52:55.986 [DEBUG] [Thread-187287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:52:55.986 [DEBUG] [Thread-187287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:52:55.986 [DEBUG] [Thread-187287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:52:55.986 [DEBUG] [Thread-187287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:52:55.986 [DEBUG] [Thread-187287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:52:55.986 [DEBUG] [Thread-187287] [transport.py] [_log()] client lang: <none>
2026-02-14T14:52:55.986 [DEBUG] [Thread-187287] [transport.py] [_log()] server lang: <none>
2026-02-14T14:52:55.986 [DEBUG] [Thread-187287] [transport.py] [_log()] kex follows: False
2026-02-14T14:52:55.986 [DEBUG] [Thread-187287] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:52:55.986 [DEBUG] [Thread-187287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:52:55.986 [DEBUG] [Thread-187287] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:52:55.986 [DEBUG] [Thread-187287] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:52:55.986 [DEBUG] [Thread-187287] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:52:55.986 [DEBUG] [Thread-187287] [transport.py] [_log()] Compression: none
2026-02-14T14:52:55.986 [DEBUG] [Thread-187287] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:52:56.004 [DEBUG] [Thread-187287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:52:56.004 [DEBUG] [Thread-187287] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:52:56.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:52:56.005 [DEBUG] [Thread-187287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:52:56.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:52:56.008 [DEBUG] [Thread-187287] [transport.py] [_log()] userauth is OK
2026-02-14T14:52:56.008 [DEBUG] [Thread-187287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:52:56.008 [DEBUG] [Thread-187287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:52:56.008 [DEBUG] [Thread-187287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:52:56.008 [DEBUG] [Thread-187287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:52:56.023 [INFO] [Thread-187287] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:52:56.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:52:56.656 [DEBUG] [Thread-187287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:52:56.656 [DEBUG] [Thread-187287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:52:56.657 [DEBUG] [Thread-187287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:52:56.697 [DEBUG] [Thread-187287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:52:56.698 [DEBUG] [Thread-187287] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:52:56.701 [DEBUG] [Thread-187287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:52:56.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:52:56.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:52:56.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:52:56.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:52:56.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:52:56.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:52:56.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:52:56.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:52:56.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:52:56.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.536566 -999.00  +16.10  25.50     39   +2.30 1 1 1 1 1   888    0 13.89 4.30 ----- 23.3 25.5 157.8 31.9 22.3 -28.1 21.5 -26.5 22.6 -25.8 23.8 -27.5
2026-02-14T14:52:56.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:52:56.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:52:56.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.536566
2026-02-14T14:52:56.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:52:56.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:52:56.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:52:56.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:52:56.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:52:56.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:52:36', tmtdew=17.37, humidity=30.94, cloud=29.3, wind=29.78, temperature=17.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:52:39.302', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:52:56.730 [DEBUG] [Thread-187287] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:52:56.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T14:52:56.825 [DEBUG] [Thread-187290] [transport.py] [_log()] starting thread (client mode): 0xa5743430
2026-02-14T14:52:56.825 [DEBUG] [Thread-187290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:52:56.840 [DEBUG] [Thread-187290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:52:56.840 [INFO] [Thread-187290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:52:56.848 [DEBUG] [Thread-187290] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:52:56.848 [DEBUG] [Thread-187290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:52:56.849 [DEBUG] [Thread-187290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:52:56.849 [DEBUG] [Thread-187290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:52:56.849 [DEBUG] [Thread-187290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:52:56.849 [DEBUG] [Thread-187290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:52:56.849 [DEBUG] [Thread-187290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:52:56.849 [DEBUG] [Thread-187290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:52:56.849 [DEBUG] [Thread-187290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:52:56.849 [DEBUG] [Thread-187290] [transport.py] [_log()] client lang: <none>
2026-02-14T14:52:56.849 [DEBUG] [Thread-187290] [transport.py] [_log()] server lang: <none>
2026-02-14T14:52:56.849 [DEBUG] [Thread-187290] [transport.py] [_log()] kex follows: False
2026-02-14T14:52:56.849 [DEBUG] [Thread-187290] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:52:56.849 [DEBUG] [Thread-187290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:52:56.849 [DEBUG] [Thread-187290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:52:56.849 [DEBUG] [Thread-187290] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:52:56.849 [DEBUG] [Thread-187290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:52:56.849 [DEBUG] [Thread-187290] [transport.py] [_log()] Compression: none
2026-02-14T14:52:56.850 [DEBUG] [Thread-187290] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:52:56.908 [DEBUG] [Thread-187290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:52:56.909 [DEBUG] [Thread-187290] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:52:56.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:52:56.910 [DEBUG] [Thread-187290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:52:56.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:52:56.964 [DEBUG] [Thread-187290] [transport.py] [_log()] userauth is OK
2026-02-14T14:52:56.965 [DEBUG] [Thread-187290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:52:56.965 [DEBUG] [Thread-187290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:52:56.965 [DEBUG] [Thread-187290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:52:56.965 [DEBUG] [Thread-187290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:52:56.985 [INFO] [Thread-187290] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:52:56.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-14T14:52:56.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:52:57.794 [DEBUG] [Thread-187290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:52:57.794 [DEBUG] [Thread-187290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:52:57.842 [DEBUG] [Thread-187290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:52:57.843 [DEBUG] [Thread-187290] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:52:57.852 [DEBUG] [Thread-187290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:52:57.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:52:57.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-14T14:52:57.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-14T14:52:57.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:52:57.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:52:57.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:52:57.889 [DEBUG] [Thread-187290] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:53:06.006 [DEBUG] [Thread-187292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:53:21.059 [DEBUG] [Thread-187293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:53:27.431 [DEBUG] [Thread-187294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:53:27.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:53:27.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:53:27.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T14:53:29.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 53, 11), 16.43, 32.96, 29.3, 27.77, 16.64, 0, 0, 0, 0, 0, 0),)
2026-02-14T14:53:29.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:53:11
2026-02-14T14:53:30.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:53:30.198 [DEBUG] [Thread-187295] [transport.py] [_log()] starting thread (client mode): 0xa2d13880
2026-02-14T14:53:30.198 [DEBUG] [Thread-187295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:53:30.218 [DEBUG] [Thread-187295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:53:30.218 [INFO] [Thread-187295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:53:30.221 [DEBUG] [Thread-187295] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:53:30.222 [DEBUG] [Thread-187295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:53:30.222 [DEBUG] [Thread-187295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:53:30.222 [DEBUG] [Thread-187295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:53:30.222 [DEBUG] [Thread-187295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:53:30.222 [DEBUG] [Thread-187295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:53:30.222 [DEBUG] [Thread-187295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:53:30.222 [DEBUG] [Thread-187295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:53:30.222 [DEBUG] [Thread-187295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:53:30.222 [DEBUG] [Thread-187295] [transport.py] [_log()] client lang: <none>
2026-02-14T14:53:30.222 [DEBUG] [Thread-187295] [transport.py] [_log()] server lang: <none>
2026-02-14T14:53:30.222 [DEBUG] [Thread-187295] [transport.py] [_log()] kex follows: False
2026-02-14T14:53:30.222 [DEBUG] [Thread-187295] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:53:30.222 [DEBUG] [Thread-187295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:53:30.222 [DEBUG] [Thread-187295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:53:30.222 [DEBUG] [Thread-187295] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:53:30.222 [DEBUG] [Thread-187295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:53:30.222 [DEBUG] [Thread-187295] [transport.py] [_log()] Compression: none
2026-02-14T14:53:30.222 [DEBUG] [Thread-187295] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:53:30.239 [DEBUG] [Thread-187295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:53:30.239 [DEBUG] [Thread-187295] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:53:30.240 [DEBUG] [Thread-187295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:53:30.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:53:30.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:53:30.242 [DEBUG] [Thread-187295] [transport.py] [_log()] userauth is OK
2026-02-14T14:53:30.242 [DEBUG] [Thread-187295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:53:30.242 [DEBUG] [Thread-187295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:53:30.242 [DEBUG] [Thread-187295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:53:30.243 [DEBUG] [Thread-187295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:53:30.266 [INFO] [Thread-187295] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:53:30.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:53:30.847 [DEBUG] [Thread-187295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:53:30.848 [DEBUG] [Thread-187295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:53:30.848 [DEBUG] [Thread-187295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:53:30.888 [DEBUG] [Thread-187295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:53:30.889 [DEBUG] [Thread-187295] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:53:30.892 [DEBUG] [Thread-187295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:53:30.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:53:30.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:53:30.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:53:30.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:53:30.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:53:30.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:53:30.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:53:30.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:53:30.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:53:30.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.536913 -999.00  +16.00  29.07     38   +2.00 1 1 1 1 1   888    0 13.87 5.27 ----- 25.3 29.1 169.8 36.2 22.3 -26.8 21.5 -25.8 22.7 -25.6 23.8 -26.9
2026-02-14T14:53:30.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:53:30.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:53:30.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.536913
2026-02-14T14:53:30.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:53:30.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:53:30.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:53:30.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:53:30.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:53:30.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:53:11', tmtdew=16.43, humidity=32.96, cloud=29.3, wind=27.77, temperature=16.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:53:09.283', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:53:30.915 [DEBUG] [Thread-187295] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:53:30.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-14T14:53:31.009 [DEBUG] [Thread-187298] [transport.py] [_log()] starting thread (client mode): 0xa2d18e20
2026-02-14T14:53:31.009 [DEBUG] [Thread-187298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:53:31.024 [DEBUG] [Thread-187298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:53:31.025 [INFO] [Thread-187298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:53:31.033 [DEBUG] [Thread-187298] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:53:31.033 [DEBUG] [Thread-187298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:53:31.033 [DEBUG] [Thread-187298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:53:31.033 [DEBUG] [Thread-187298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:53:31.033 [DEBUG] [Thread-187298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:53:31.033 [DEBUG] [Thread-187298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:53:31.033 [DEBUG] [Thread-187298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:53:31.033 [DEBUG] [Thread-187298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:53:31.033 [DEBUG] [Thread-187298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:53:31.034 [DEBUG] [Thread-187298] [transport.py] [_log()] client lang: <none>
2026-02-14T14:53:31.034 [DEBUG] [Thread-187298] [transport.py] [_log()] server lang: <none>
2026-02-14T14:53:31.034 [DEBUG] [Thread-187298] [transport.py] [_log()] kex follows: False
2026-02-14T14:53:31.034 [DEBUG] [Thread-187298] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:53:31.034 [DEBUG] [Thread-187298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:53:31.034 [DEBUG] [Thread-187298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:53:31.034 [DEBUG] [Thread-187298] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:53:31.034 [DEBUG] [Thread-187298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:53:31.034 [DEBUG] [Thread-187298] [transport.py] [_log()] Compression: none
2026-02-14T14:53:31.034 [DEBUG] [Thread-187298] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:53:31.092 [DEBUG] [Thread-187298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:53:31.093 [DEBUG] [Thread-187298] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:53:31.094 [DEBUG] [Thread-187298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:53:31.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:53:31.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:53:31.149 [DEBUG] [Thread-187298] [transport.py] [_log()] userauth is OK
2026-02-14T14:53:31.149 [DEBUG] [Thread-187298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:53:31.149 [DEBUG] [Thread-187298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:53:31.150 [DEBUG] [Thread-187298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:53:31.150 [DEBUG] [Thread-187298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:53:31.172 [INFO] [Thread-187298] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:53:31.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-14T14:53:31.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:53:32.021 [DEBUG] [Thread-187298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:53:32.021 [DEBUG] [Thread-187298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:53:32.069 [DEBUG] [Thread-187298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:53:32.070 [DEBUG] [Thread-187298] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:53:32.079 [DEBUG] [Thread-187298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:53:32.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:53:32.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:53:32.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-14T14:53:32.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:53:32.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:53:32.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:53:32.118 [DEBUG] [Thread-187298] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:53:36.096 [DEBUG] [Thread-187300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:53:42.095 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:53:42.096 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:53:51.147 [DEBUG] [Thread-187301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:54:02.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:54:02.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:54:02.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-14T14:54:04.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 53, 47), 16.54, 32.41, 0.0, 27.45, 16.51, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:54:04.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:53:47
2026-02-14T14:54:04.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:54:05.121 [DEBUG] [Thread-187302] [transport.py] [_log()] starting thread (client mode): 0xa2d192d0
2026-02-14T14:54:05.121 [DEBUG] [Thread-187302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:54:05.142 [DEBUG] [Thread-187302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:54:05.142 [INFO] [Thread-187302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:54:05.145 [DEBUG] [Thread-187302] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:54:05.145 [DEBUG] [Thread-187302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:54:05.145 [DEBUG] [Thread-187302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:54:05.145 [DEBUG] [Thread-187302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:54:05.146 [DEBUG] [Thread-187302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:54:05.146 [DEBUG] [Thread-187302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:54:05.146 [DEBUG] [Thread-187302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:54:05.146 [DEBUG] [Thread-187302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:54:05.146 [DEBUG] [Thread-187302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:54:05.146 [DEBUG] [Thread-187302] [transport.py] [_log()] client lang: <none>
2026-02-14T14:54:05.146 [DEBUG] [Thread-187302] [transport.py] [_log()] server lang: <none>
2026-02-14T14:54:05.146 [DEBUG] [Thread-187302] [transport.py] [_log()] kex follows: False
2026-02-14T14:54:05.146 [DEBUG] [Thread-187302] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:54:05.146 [DEBUG] [Thread-187302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:54:05.146 [DEBUG] [Thread-187302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:54:05.146 [DEBUG] [Thread-187302] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:54:05.146 [DEBUG] [Thread-187302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:54:05.146 [DEBUG] [Thread-187302] [transport.py] [_log()] Compression: none
2026-02-14T14:54:05.146 [DEBUG] [Thread-187302] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:54:05.164 [DEBUG] [Thread-187302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:54:05.165 [DEBUG] [Thread-187302] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:54:05.165 [DEBUG] [Thread-187302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:54:05.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:54:05.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:54:05.167 [DEBUG] [Thread-187302] [transport.py] [_log()] userauth is OK
2026-02-14T14:54:05.168 [DEBUG] [Thread-187302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:54:05.168 [DEBUG] [Thread-187302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:54:05.168 [DEBUG] [Thread-187302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:54:05.168 [DEBUG] [Thread-187302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:54:05.192 [INFO] [Thread-187302] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:54:05.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:54:05.834 [DEBUG] [Thread-187302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:54:05.835 [DEBUG] [Thread-187302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:54:05.835 [DEBUG] [Thread-187302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:54:05.876 [DEBUG] [Thread-187302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:54:05.876 [DEBUG] [Thread-187302] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:54:05.879 [DEBUG] [Thread-187302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:54:05.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:54:05.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:54:05.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:54:05.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:54:05.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:54:05.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:54:05.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:54:05.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:54:05.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:54:05.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.537261 -999.00  +15.90  22.49     38   +1.70 1 1 1 1 1   888    0 13.70 9.76 ----- 24.5 22.5 170.0 35.0 22.3 -28.6 21.4 -26.0 22.6 -25.7 23.8 -27.7
2026-02-14T14:54:05.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:54:05.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:54:05.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.537261
2026-02-14T14:54:05.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:54:05.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:54:05.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:54:05.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:54:05.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:54:05.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:53:47', tmtdew=16.54, humidity=32.41, cloud=0.0, wind=27.45, temperature=16.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:53:39.350', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:54:05.906 [DEBUG] [Thread-187302] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:54:05.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-14T14:54:06.000 [DEBUG] [Thread-187305] [transport.py] [_log()] starting thread (client mode): 0xa2d56a70
2026-02-14T14:54:06.000 [DEBUG] [Thread-187305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:54:06.015 [DEBUG] [Thread-187305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:54:06.015 [INFO] [Thread-187305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:54:06.023 [DEBUG] [Thread-187305] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:54:06.023 [DEBUG] [Thread-187305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:54:06.023 [DEBUG] [Thread-187305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:54:06.023 [DEBUG] [Thread-187305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:54:06.023 [DEBUG] [Thread-187305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:54:06.023 [DEBUG] [Thread-187305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:54:06.023 [DEBUG] [Thread-187305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:54:06.023 [DEBUG] [Thread-187305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:54:06.023 [DEBUG] [Thread-187305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:54:06.023 [DEBUG] [Thread-187305] [transport.py] [_log()] client lang: <none>
2026-02-14T14:54:06.023 [DEBUG] [Thread-187305] [transport.py] [_log()] server lang: <none>
2026-02-14T14:54:06.023 [DEBUG] [Thread-187305] [transport.py] [_log()] kex follows: False
2026-02-14T14:54:06.024 [DEBUG] [Thread-187305] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:54:06.024 [DEBUG] [Thread-187305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:54:06.024 [DEBUG] [Thread-187305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:54:06.024 [DEBUG] [Thread-187305] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:54:06.024 [DEBUG] [Thread-187305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:54:06.024 [DEBUG] [Thread-187305] [transport.py] [_log()] Compression: none
2026-02-14T14:54:06.024 [DEBUG] [Thread-187305] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:54:06.080 [DEBUG] [Thread-187305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:54:06.081 [DEBUG] [Thread-187305] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:54:06.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:54:06.082 [DEBUG] [Thread-187305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:54:06.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:54:06.137 [DEBUG] [Thread-187305] [transport.py] [_log()] userauth is OK
2026-02-14T14:54:06.138 [DEBUG] [Thread-187305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:54:06.138 [DEBUG] [Thread-187305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:54:06.138 [DEBUG] [Thread-187305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:54:06.138 [DEBUG] [Thread-187305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:54:06.157 [INFO] [Thread-187305] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:54:06.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T14:54:06.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:54:06.184 [DEBUG] [Thread-187307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:54:07.009 [DEBUG] [Thread-187305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:54:07.010 [DEBUG] [Thread-187305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:54:07.057 [DEBUG] [Thread-187305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:54:07.058 [DEBUG] [Thread-187305] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:54:07.067 [DEBUG] [Thread-187305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:54:07.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:54:07.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-14T14:54:07.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:54:07.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:54:07.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:54:07.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:54:07.103 [DEBUG] [Thread-187305] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:54:21.236 [DEBUG] [Thread-187308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:54:27.485 [DEBUG] [Thread-187309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:54:36.272 [DEBUG] [Thread-187310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:54:37.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:54:37.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:54:37.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-14T14:54:39.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 54, 22), 16.68, 32.12, 0.0, 26.15, 16.58, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:54:39.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:54:22
2026-02-14T14:54:39.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:54:39.582 [DEBUG] [Thread-187311] [transport.py] [_log()] starting thread (client mode): 0xa2ddfbe0
2026-02-14T14:54:39.582 [DEBUG] [Thread-187311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:54:39.602 [DEBUG] [Thread-187311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:54:39.602 [INFO] [Thread-187311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:54:39.604 [DEBUG] [Thread-187311] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:54:39.604 [DEBUG] [Thread-187311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:54:39.604 [DEBUG] [Thread-187311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:54:39.604 [DEBUG] [Thread-187311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:54:39.604 [DEBUG] [Thread-187311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:54:39.604 [DEBUG] [Thread-187311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:54:39.604 [DEBUG] [Thread-187311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:54:39.604 [DEBUG] [Thread-187311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:54:39.604 [DEBUG] [Thread-187311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:54:39.604 [DEBUG] [Thread-187311] [transport.py] [_log()] client lang: <none>
2026-02-14T14:54:39.604 [DEBUG] [Thread-187311] [transport.py] [_log()] server lang: <none>
2026-02-14T14:54:39.604 [DEBUG] [Thread-187311] [transport.py] [_log()] kex follows: False
2026-02-14T14:54:39.604 [DEBUG] [Thread-187311] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:54:39.604 [DEBUG] [Thread-187311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:54:39.604 [DEBUG] [Thread-187311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:54:39.604 [DEBUG] [Thread-187311] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:54:39.604 [DEBUG] [Thread-187311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:54:39.604 [DEBUG] [Thread-187311] [transport.py] [_log()] Compression: none
2026-02-14T14:54:39.604 [DEBUG] [Thread-187311] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:54:39.624 [DEBUG] [Thread-187311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:54:39.624 [DEBUG] [Thread-187311] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:54:39.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:54:39.625 [DEBUG] [Thread-187311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:54:39.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:54:39.627 [DEBUG] [Thread-187311] [transport.py] [_log()] userauth is OK
2026-02-14T14:54:39.628 [DEBUG] [Thread-187311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:54:39.628 [DEBUG] [Thread-187311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:54:39.628 [DEBUG] [Thread-187311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:54:39.628 [DEBUG] [Thread-187311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:54:39.662 [INFO] [Thread-187311] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:54:39.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:54:40.297 [DEBUG] [Thread-187311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:54:40.297 [DEBUG] [Thread-187311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:54:40.298 [DEBUG] [Thread-187311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:54:40.338 [DEBUG] [Thread-187311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:54:40.339 [DEBUG] [Thread-187311] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:54:40.342 [DEBUG] [Thread-187311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:54:40.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:54:40.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:54:40.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:54:40.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:54:40.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:54:40.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:54:40.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:54:40.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:54:40.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:54:40.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.537608 -999.00  +16.20  16.75     39   +2.30 1 1 1 1 1   888    0 14.02 12.88 ----- 25.5 16.8 169.6 27.8 22.4 -26.8 21.4 -26.0 22.6 -24.8 23.8 -26.8
2026-02-14T14:54:40.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:54:40.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:54:40.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.537608
2026-02-14T14:54:40.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:54:40.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:54:40.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:54:40.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:54:40.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:54:40.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:54:22', tmtdew=16.68, humidity=32.12, cloud=0.0, wind=26.15, temperature=16.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:54:09.331', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:54:40.369 [DEBUG] [Thread-187311] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:54:40.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-14T14:54:40.465 [DEBUG] [Thread-187314] [transport.py] [_log()] starting thread (client mode): 0xa2dc50c0
2026-02-14T14:54:40.465 [DEBUG] [Thread-187314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:54:40.486 [DEBUG] [Thread-187314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:54:40.486 [INFO] [Thread-187314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:54:40.494 [DEBUG] [Thread-187314] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:54:40.494 [DEBUG] [Thread-187314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:54:40.494 [DEBUG] [Thread-187314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:54:40.494 [DEBUG] [Thread-187314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:54:40.494 [DEBUG] [Thread-187314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:54:40.494 [DEBUG] [Thread-187314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:54:40.494 [DEBUG] [Thread-187314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:54:40.494 [DEBUG] [Thread-187314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:54:40.495 [DEBUG] [Thread-187314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:54:40.495 [DEBUG] [Thread-187314] [transport.py] [_log()] client lang: <none>
2026-02-14T14:54:40.495 [DEBUG] [Thread-187314] [transport.py] [_log()] server lang: <none>
2026-02-14T14:54:40.495 [DEBUG] [Thread-187314] [transport.py] [_log()] kex follows: False
2026-02-14T14:54:40.495 [DEBUG] [Thread-187314] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:54:40.495 [DEBUG] [Thread-187314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:54:40.495 [DEBUG] [Thread-187314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:54:40.495 [DEBUG] [Thread-187314] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:54:40.495 [DEBUG] [Thread-187314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:54:40.495 [DEBUG] [Thread-187314] [transport.py] [_log()] Compression: none
2026-02-14T14:54:40.495 [DEBUG] [Thread-187314] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:54:40.553 [DEBUG] [Thread-187314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:54:40.554 [DEBUG] [Thread-187314] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:54:40.554 [DEBUG] [Thread-187314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:54:40.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:54:40.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:54:40.609 [DEBUG] [Thread-187314] [transport.py] [_log()] userauth is OK
2026-02-14T14:54:40.610 [DEBUG] [Thread-187314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:54:40.610 [DEBUG] [Thread-187314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:54:40.610 [DEBUG] [Thread-187314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:54:40.610 [DEBUG] [Thread-187314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:54:40.629 [INFO] [Thread-187314] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:54:40.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-14T14:54:40.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:54:41.464 [DEBUG] [Thread-187314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:54:41.464 [DEBUG] [Thread-187314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:54:41.512 [DEBUG] [Thread-187314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:54:41.513 [DEBUG] [Thread-187314] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:54:41.522 [DEBUG] [Thread-187314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:54:41.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:54:41.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-14T14:54:41.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:54:41.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:54:41.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:54:41.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:54:41.559 [DEBUG] [Thread-187314] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:54:42.236 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:54:42.238 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:54:51.309 [DEBUG] [Thread-187316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:55:06.356 [DEBUG] [Thread-187317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:55:11.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:55:11.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:55:11.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-14T14:55:13.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 54, 58), 16.54, 32.57, 0.0, 31.8, 16.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:55:13.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:54:58
2026-02-14T14:55:13.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:55:13.897 [DEBUG] [Thread-187318] [transport.py] [_log()] starting thread (client mode): 0xa2d3c940
2026-02-14T14:55:13.897 [DEBUG] [Thread-187318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:55:13.917 [DEBUG] [Thread-187318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:55:13.917 [INFO] [Thread-187318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:55:13.920 [DEBUG] [Thread-187318] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:55:13.920 [DEBUG] [Thread-187318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:55:13.920 [DEBUG] [Thread-187318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:55:13.920 [DEBUG] [Thread-187318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:55:13.920 [DEBUG] [Thread-187318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:55:13.920 [DEBUG] [Thread-187318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:55:13.920 [DEBUG] [Thread-187318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:55:13.920 [DEBUG] [Thread-187318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:55:13.920 [DEBUG] [Thread-187318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:55:13.920 [DEBUG] [Thread-187318] [transport.py] [_log()] client lang: <none>
2026-02-14T14:55:13.920 [DEBUG] [Thread-187318] [transport.py] [_log()] server lang: <none>
2026-02-14T14:55:13.920 [DEBUG] [Thread-187318] [transport.py] [_log()] kex follows: False
2026-02-14T14:55:13.920 [DEBUG] [Thread-187318] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:55:13.920 [DEBUG] [Thread-187318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:55:13.921 [DEBUG] [Thread-187318] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:55:13.921 [DEBUG] [Thread-187318] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:55:13.921 [DEBUG] [Thread-187318] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:55:13.921 [DEBUG] [Thread-187318] [transport.py] [_log()] Compression: none
2026-02-14T14:55:13.921 [DEBUG] [Thread-187318] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:55:13.938 [DEBUG] [Thread-187318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:55:13.938 [DEBUG] [Thread-187318] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:55:13.939 [DEBUG] [Thread-187318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:55:13.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:55:13.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:55:13.941 [DEBUG] [Thread-187318] [transport.py] [_log()] userauth is OK
2026-02-14T14:55:13.941 [DEBUG] [Thread-187318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:55:13.941 [DEBUG] [Thread-187318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:55:13.941 [DEBUG] [Thread-187318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:55:13.941 [DEBUG] [Thread-187318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:55:13.966 [INFO] [Thread-187318] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:55:13.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:55:15.079 [DEBUG] [Thread-187318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:55:15.079 [DEBUG] [Thread-187318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:55:15.080 [DEBUG] [Thread-187318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:55:15.120 [DEBUG] [Thread-187318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:55:15.121 [DEBUG] [Thread-187318] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:55:15.124 [DEBUG] [Thread-187318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:55:15.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:55:15.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:55:15.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:55:15.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:55:15.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:55:15.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:55:15.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:55:15.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:55:15.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:55:15.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.537955 -999.00  +16.50  24.67     39   +2.60 1 1 1 1 1   888    0 13.97 10.78 ----- 20.9 24.7 178.2 31.2 22.4 -27.9 21.3 -27.6 22.7 -25.1 23.9 -26.7
2026-02-14T14:55:15.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:55:15.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:55:15.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.537955
2026-02-14T14:55:15.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:55:15.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:55:15.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:55:15.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:55:15.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:55:15.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:54:58', tmtdew=16.54, humidity=32.57, cloud=0.0, wind=31.8, temperature=16.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:54:39.312', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:55:15.151 [DEBUG] [Thread-187318] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:55:15.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-14T14:55:15.246 [DEBUG] [Thread-187321] [transport.py] [_log()] starting thread (client mode): 0xa2d3cb20
2026-02-14T14:55:15.246 [DEBUG] [Thread-187321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:55:15.260 [DEBUG] [Thread-187321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:55:15.261 [INFO] [Thread-187321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:55:15.268 [DEBUG] [Thread-187321] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:55:15.268 [DEBUG] [Thread-187321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:55:15.268 [DEBUG] [Thread-187321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:55:15.269 [DEBUG] [Thread-187321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:55:15.269 [DEBUG] [Thread-187321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:55:15.269 [DEBUG] [Thread-187321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:55:15.269 [DEBUG] [Thread-187321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:55:15.269 [DEBUG] [Thread-187321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:55:15.269 [DEBUG] [Thread-187321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:55:15.269 [DEBUG] [Thread-187321] [transport.py] [_log()] client lang: <none>
2026-02-14T14:55:15.269 [DEBUG] [Thread-187321] [transport.py] [_log()] server lang: <none>
2026-02-14T14:55:15.269 [DEBUG] [Thread-187321] [transport.py] [_log()] kex follows: False
2026-02-14T14:55:15.269 [DEBUG] [Thread-187321] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:55:15.270 [DEBUG] [Thread-187321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:55:15.270 [DEBUG] [Thread-187321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:55:15.270 [DEBUG] [Thread-187321] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:55:15.270 [DEBUG] [Thread-187321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:55:15.270 [DEBUG] [Thread-187321] [transport.py] [_log()] Compression: none
2026-02-14T14:55:15.270 [DEBUG] [Thread-187321] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:55:15.325 [DEBUG] [Thread-187321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:55:15.325 [DEBUG] [Thread-187321] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:55:15.325 [DEBUG] [Thread-187321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:55:15.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:55:15.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:55:15.382 [DEBUG] [Thread-187321] [transport.py] [_log()] userauth is OK
2026-02-14T14:55:15.382 [DEBUG] [Thread-187321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:55:15.382 [DEBUG] [Thread-187321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:55:15.383 [DEBUG] [Thread-187321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:55:15.383 [DEBUG] [Thread-187321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:55:15.402 [INFO] [Thread-187321] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:55:15.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-14T14:55:15.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:55:16.197 [DEBUG] [Thread-187321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:55:16.197 [DEBUG] [Thread-187321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:55:16.245 [DEBUG] [Thread-187321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:55:16.246 [DEBUG] [Thread-187321] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:55:16.255 [DEBUG] [Thread-187321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:55:16.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:55:16.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T14:55:16.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-14T14:55:16.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:55:16.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:55:16.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:55:16.298 [DEBUG] [Thread-187321] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:55:21.390 [DEBUG] [Thread-187323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:55:27.513 [DEBUG] [Thread-187324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:55:36.438 [DEBUG] [Thread-187325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:55:42.378 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:55:42.379 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:55:46.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:55:46.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:55:46.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-14T14:55:48.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 55, 33), 17.32, 31.01, 0.0, 30.17, 17.68, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:55:48.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:55:33
2026-02-14T14:55:48.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:55:49.142 [DEBUG] [Thread-187326] [transport.py] [_log()] starting thread (client mode): 0xa2dc2e60
2026-02-14T14:55:49.142 [DEBUG] [Thread-187326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:55:49.164 [DEBUG] [Thread-187326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:55:49.164 [INFO] [Thread-187326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:55:49.168 [DEBUG] [Thread-187326] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:55:49.168 [DEBUG] [Thread-187326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:55:49.168 [DEBUG] [Thread-187326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:55:49.168 [DEBUG] [Thread-187326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:55:49.168 [DEBUG] [Thread-187326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:55:49.169 [DEBUG] [Thread-187326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:55:49.169 [DEBUG] [Thread-187326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:55:49.169 [DEBUG] [Thread-187326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:55:49.169 [DEBUG] [Thread-187326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:55:49.169 [DEBUG] [Thread-187326] [transport.py] [_log()] client lang: <none>
2026-02-14T14:55:49.169 [DEBUG] [Thread-187326] [transport.py] [_log()] server lang: <none>
2026-02-14T14:55:49.169 [DEBUG] [Thread-187326] [transport.py] [_log()] kex follows: False
2026-02-14T14:55:49.169 [DEBUG] [Thread-187326] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:55:49.169 [DEBUG] [Thread-187326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:55:49.169 [DEBUG] [Thread-187326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:55:49.169 [DEBUG] [Thread-187326] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:55:49.169 [DEBUG] [Thread-187326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:55:49.170 [DEBUG] [Thread-187326] [transport.py] [_log()] Compression: none
2026-02-14T14:55:49.170 [DEBUG] [Thread-187326] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:55:49.187 [DEBUG] [Thread-187326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:55:49.187 [DEBUG] [Thread-187326] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:55:49.188 [DEBUG] [Thread-187326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:55:49.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:55:49.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:55:49.191 [DEBUG] [Thread-187326] [transport.py] [_log()] userauth is OK
2026-02-14T14:55:49.191 [DEBUG] [Thread-187326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:55:49.191 [DEBUG] [Thread-187326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:55:49.191 [DEBUG] [Thread-187326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:55:49.191 [DEBUG] [Thread-187326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:55:49.214 [INFO] [Thread-187326] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:55:49.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:55:49.849 [DEBUG] [Thread-187326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:55:49.849 [DEBUG] [Thread-187326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:55:49.849 [DEBUG] [Thread-187326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:55:49.891 [DEBUG] [Thread-187326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:55:49.891 [DEBUG] [Thread-187326] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:55:49.894 [DEBUG] [Thread-187326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:55:49.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:55:49.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:55:49.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:55:49.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:55:49.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:55:49.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:55:49.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:55:49.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:55:49.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:55:49.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.538302 -999.00  +16.20  31.98     39   +2.30 1 1 2 1 1   888    0 14.18 10.08 ----- 24.5 32.0 168.0 39.9 22.4 -27.7 21.3 -29.0 22.7 -25.5 23.8 -27.2
2026-02-14T14:55:49.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:55:49.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:55:49.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.538302
2026-02-14T14:55:49.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:55:49.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:55:49.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:55:49.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:55:49.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:55:49.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:55:33', tmtdew=17.32, humidity=31.01, cloud=0.0, wind=30.17, temperature=17.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:55:09.293', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:55:49.921 [DEBUG] [Thread-187326] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:55:50.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-14T14:55:50.017 [DEBUG] [Thread-187329] [transport.py] [_log()] starting thread (client mode): 0xa2deb8e0
2026-02-14T14:55:50.017 [DEBUG] [Thread-187329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:55:50.031 [DEBUG] [Thread-187329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:55:50.031 [INFO] [Thread-187329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:55:50.040 [DEBUG] [Thread-187329] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:55:50.040 [DEBUG] [Thread-187329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:55:50.040 [DEBUG] [Thread-187329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:55:50.040 [DEBUG] [Thread-187329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:55:50.040 [DEBUG] [Thread-187329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:55:50.040 [DEBUG] [Thread-187329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:55:50.040 [DEBUG] [Thread-187329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:55:50.040 [DEBUG] [Thread-187329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:55:50.040 [DEBUG] [Thread-187329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:55:50.040 [DEBUG] [Thread-187329] [transport.py] [_log()] client lang: <none>
2026-02-14T14:55:50.040 [DEBUG] [Thread-187329] [transport.py] [_log()] server lang: <none>
2026-02-14T14:55:50.040 [DEBUG] [Thread-187329] [transport.py] [_log()] kex follows: False
2026-02-14T14:55:50.040 [DEBUG] [Thread-187329] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:55:50.040 [DEBUG] [Thread-187329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:55:50.040 [DEBUG] [Thread-187329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:55:50.041 [DEBUG] [Thread-187329] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:55:50.041 [DEBUG] [Thread-187329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:55:50.041 [DEBUG] [Thread-187329] [transport.py] [_log()] Compression: none
2026-02-14T14:55:50.041 [DEBUG] [Thread-187329] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:55:50.098 [DEBUG] [Thread-187329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:55:50.099 [DEBUG] [Thread-187329] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:55:50.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:55:50.100 [DEBUG] [Thread-187329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:55:50.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:55:50.154 [DEBUG] [Thread-187329] [transport.py] [_log()] userauth is OK
2026-02-14T14:55:50.154 [DEBUG] [Thread-187329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:55:50.154 [DEBUG] [Thread-187329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:55:50.155 [DEBUG] [Thread-187329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:55:50.155 [DEBUG] [Thread-187329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:55:50.173 [INFO] [Thread-187329] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:55:50.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-14T14:55:50.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:55:51.022 [DEBUG] [Thread-187329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:55:51.023 [DEBUG] [Thread-187329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:55:51.070 [DEBUG] [Thread-187329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:55:51.070 [DEBUG] [Thread-187329] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:55:51.080 [DEBUG] [Thread-187329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:55:51.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:55:51.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-14T14:55:51.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-14T14:55:51.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:55:51.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:55:51.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:55:51.116 [DEBUG] [Thread-187329] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:55:51.474 [DEBUG] [Thread-187331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:56:06.527 [DEBUG] [Thread-187332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:56:21.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:56:21.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:56:21.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-14T14:56:21.564 [DEBUG] [Thread-187333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:56:23.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 56, 10), 16.76, 32.08, 0.0, 32.71, 16.54, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:56:23.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:56:10
2026-02-14T14:56:24.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:56:24.165 [DEBUG] [Thread-187334] [transport.py] [_log()] starting thread (client mode): 0xa2d221a0
2026-02-14T14:56:24.165 [DEBUG] [Thread-187334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:56:24.186 [DEBUG] [Thread-187334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:56:24.186 [INFO] [Thread-187334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:56:24.190 [DEBUG] [Thread-187334] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:56:24.190 [DEBUG] [Thread-187334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:56:24.190 [DEBUG] [Thread-187334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:56:24.190 [DEBUG] [Thread-187334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:56:24.190 [DEBUG] [Thread-187334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:56:24.190 [DEBUG] [Thread-187334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:56:24.190 [DEBUG] [Thread-187334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:56:24.190 [DEBUG] [Thread-187334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:56:24.190 [DEBUG] [Thread-187334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:56:24.190 [DEBUG] [Thread-187334] [transport.py] [_log()] client lang: <none>
2026-02-14T14:56:24.190 [DEBUG] [Thread-187334] [transport.py] [_log()] server lang: <none>
2026-02-14T14:56:24.190 [DEBUG] [Thread-187334] [transport.py] [_log()] kex follows: False
2026-02-14T14:56:24.190 [DEBUG] [Thread-187334] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:56:24.190 [DEBUG] [Thread-187334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:56:24.190 [DEBUG] [Thread-187334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:56:24.190 [DEBUG] [Thread-187334] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:56:24.190 [DEBUG] [Thread-187334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:56:24.190 [DEBUG] [Thread-187334] [transport.py] [_log()] Compression: none
2026-02-14T14:56:24.190 [DEBUG] [Thread-187334] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:56:24.209 [DEBUG] [Thread-187334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:56:24.209 [DEBUG] [Thread-187334] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:56:24.209 [DEBUG] [Thread-187334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:56:24.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:56:24.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:56:24.210 [DEBUG] [Thread-187334] [transport.py] [_log()] userauth is OK
2026-02-14T14:56:24.210 [DEBUG] [Thread-187334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:56:24.210 [DEBUG] [Thread-187334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:56:24.210 [DEBUG] [Thread-187334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:56:24.210 [DEBUG] [Thread-187334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:56:24.239 [INFO] [Thread-187334] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:56:24.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:56:24.865 [DEBUG] [Thread-187334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:56:24.865 [DEBUG] [Thread-187334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:56:24.865 [DEBUG] [Thread-187334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:56:24.906 [DEBUG] [Thread-187334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:56:24.907 [DEBUG] [Thread-187334] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:56:24.910 [DEBUG] [Thread-187334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:56:24.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:56:24.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:56:24.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:56:24.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:56:24.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:56:24.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:56:24.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:56:24.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:56:24.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:56:24.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.538649 -999.00  +16.10  21.29     39   +2.20 1 1 1 1 1   888    0 13.72 6.18 ----- 27.8 21.3 161.8 33.5 22.3 -28.1 21.4 -27.2 22.6 -27.6 23.8 -29.0
2026-02-14T14:56:24.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:56:24.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:56:24.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.538649
2026-02-14T14:56:24.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:56:24.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:56:24.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:56:24.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:56:24.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:56:24.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:56:10', tmtdew=16.76, humidity=32.08, cloud=0.0, wind=32.71, temperature=16.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:55:39.274', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:56:24.934 [DEBUG] [Thread-187334] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:56:25.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-14T14:56:25.028 [DEBUG] [Thread-187337] [transport.py] [_log()] starting thread (client mode): 0xa2ddc5b0
2026-02-14T14:56:25.028 [DEBUG] [Thread-187337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:56:25.043 [DEBUG] [Thread-187337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:56:25.043 [INFO] [Thread-187337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:56:25.051 [DEBUG] [Thread-187337] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:56:25.051 [DEBUG] [Thread-187337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:56:25.051 [DEBUG] [Thread-187337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:56:25.052 [DEBUG] [Thread-187337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:56:25.052 [DEBUG] [Thread-187337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:56:25.052 [DEBUG] [Thread-187337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:56:25.052 [DEBUG] [Thread-187337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:56:25.052 [DEBUG] [Thread-187337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:56:25.052 [DEBUG] [Thread-187337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:56:25.052 [DEBUG] [Thread-187337] [transport.py] [_log()] client lang: <none>
2026-02-14T14:56:25.052 [DEBUG] [Thread-187337] [transport.py] [_log()] server lang: <none>
2026-02-14T14:56:25.052 [DEBUG] [Thread-187337] [transport.py] [_log()] kex follows: False
2026-02-14T14:56:25.052 [DEBUG] [Thread-187337] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:56:25.052 [DEBUG] [Thread-187337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:56:25.052 [DEBUG] [Thread-187337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:56:25.052 [DEBUG] [Thread-187337] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:56:25.052 [DEBUG] [Thread-187337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:56:25.052 [DEBUG] [Thread-187337] [transport.py] [_log()] Compression: none
2026-02-14T14:56:25.052 [DEBUG] [Thread-187337] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:56:25.110 [DEBUG] [Thread-187337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:56:25.111 [DEBUG] [Thread-187337] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:56:25.112 [DEBUG] [Thread-187337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:56:25.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:56:25.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:56:25.166 [DEBUG] [Thread-187337] [transport.py] [_log()] userauth is OK
2026-02-14T14:56:25.167 [DEBUG] [Thread-187337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:56:25.167 [DEBUG] [Thread-187337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:56:25.167 [DEBUG] [Thread-187337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:56:25.167 [DEBUG] [Thread-187337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:56:25.186 [INFO] [Thread-187337] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:56:25.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-14T14:56:25.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:56:26.002 [DEBUG] [Thread-187337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:56:26.002 [DEBUG] [Thread-187337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:56:26.050 [DEBUG] [Thread-187337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:56:26.050 [DEBUG] [Thread-187337] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:56:26.058 [DEBUG] [Thread-187337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:56:26.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:56:26.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-14T14:56:26.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:56:26.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:56:26.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:56:26.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:56:26.090 [DEBUG] [Thread-187337] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:56:27.546 [DEBUG] [Thread-187339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:56:36.600 [DEBUG] [Thread-187340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:56:42.518 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:56:42.519 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:56:51.656 [DEBUG] [Thread-187341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:56:56.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:56:56.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:56:56.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-14T14:56:57.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 56, 45), 16.9, 31.61, 0.0, 30.44, 16.67, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:56:57.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:56:45
2026-02-14T14:56:58.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:56:58.491 [DEBUG] [Thread-187342] [transport.py] [_log()] starting thread (client mode): 0xa2d3f310
2026-02-14T14:56:58.492 [DEBUG] [Thread-187342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:56:58.513 [DEBUG] [Thread-187342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:56:58.513 [INFO] [Thread-187342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:56:58.516 [DEBUG] [Thread-187342] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:56:58.516 [DEBUG] [Thread-187342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:56:58.516 [DEBUG] [Thread-187342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:56:58.516 [DEBUG] [Thread-187342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:56:58.516 [DEBUG] [Thread-187342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:56:58.517 [DEBUG] [Thread-187342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:56:58.517 [DEBUG] [Thread-187342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:56:58.517 [DEBUG] [Thread-187342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:56:58.517 [DEBUG] [Thread-187342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:56:58.517 [DEBUG] [Thread-187342] [transport.py] [_log()] client lang: <none>
2026-02-14T14:56:58.517 [DEBUG] [Thread-187342] [transport.py] [_log()] server lang: <none>
2026-02-14T14:56:58.517 [DEBUG] [Thread-187342] [transport.py] [_log()] kex follows: False
2026-02-14T14:56:58.517 [DEBUG] [Thread-187342] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:56:58.517 [DEBUG] [Thread-187342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:56:58.517 [DEBUG] [Thread-187342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:56:58.517 [DEBUG] [Thread-187342] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:56:58.517 [DEBUG] [Thread-187342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:56:58.517 [DEBUG] [Thread-187342] [transport.py] [_log()] Compression: none
2026-02-14T14:56:58.517 [DEBUG] [Thread-187342] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:56:58.534 [DEBUG] [Thread-187342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:56:58.535 [DEBUG] [Thread-187342] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:56:58.535 [DEBUG] [Thread-187342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:56:58.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:56:58.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:56:58.537 [DEBUG] [Thread-187342] [transport.py] [_log()] userauth is OK
2026-02-14T14:56:58.537 [DEBUG] [Thread-187342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:56:58.537 [DEBUG] [Thread-187342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:56:58.538 [DEBUG] [Thread-187342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:56:58.538 [DEBUG] [Thread-187342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:56:58.562 [INFO] [Thread-187342] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:56:58.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:56:59.192 [DEBUG] [Thread-187342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:56:59.192 [DEBUG] [Thread-187342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:56:59.193 [DEBUG] [Thread-187342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:56:59.234 [DEBUG] [Thread-187342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:56:59.234 [DEBUG] [Thread-187342] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:56:59.237 [DEBUG] [Thread-187342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:56:59.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:56:59.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:56:59.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:56:59.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:56:59.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:56:59.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:56:59.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:56:59.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:56:59.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:56:59.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.539344 -999.00  +16.10  23.47     39   +2.20 1 1 1 1 1   888    0 13.76 -3.22 ----- 18.9 23.5 171.4 30.4 22.3 -27.5 21.3 -26.6 22.6 -26.2 23.9 -27.9
2026-02-14T14:56:59.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:56:59.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:56:59.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.539344
2026-02-14T14:56:59.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:56:59.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:56:59.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:56:59.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:56:59.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:56:59.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:56:45', tmtdew=16.9, humidity=31.61, cloud=0.0, wind=30.44, temperature=16.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:56:39.322', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:56:59.266 [DEBUG] [Thread-187342] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:56:59.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-14T14:56:59.362 [DEBUG] [Thread-187345] [transport.py] [_log()] starting thread (client mode): 0xa2ddc190
2026-02-14T14:56:59.362 [DEBUG] [Thread-187345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:56:59.377 [DEBUG] [Thread-187345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:56:59.377 [INFO] [Thread-187345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:56:59.385 [DEBUG] [Thread-187345] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:56:59.385 [DEBUG] [Thread-187345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:56:59.385 [DEBUG] [Thread-187345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:56:59.385 [DEBUG] [Thread-187345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:56:59.385 [DEBUG] [Thread-187345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:56:59.385 [DEBUG] [Thread-187345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:56:59.385 [DEBUG] [Thread-187345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:56:59.385 [DEBUG] [Thread-187345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:56:59.385 [DEBUG] [Thread-187345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:56:59.386 [DEBUG] [Thread-187345] [transport.py] [_log()] client lang: <none>
2026-02-14T14:56:59.386 [DEBUG] [Thread-187345] [transport.py] [_log()] server lang: <none>
2026-02-14T14:56:59.386 [DEBUG] [Thread-187345] [transport.py] [_log()] kex follows: False
2026-02-14T14:56:59.386 [DEBUG] [Thread-187345] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:56:59.386 [DEBUG] [Thread-187345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:56:59.386 [DEBUG] [Thread-187345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:56:59.386 [DEBUG] [Thread-187345] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:56:59.386 [DEBUG] [Thread-187345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:56:59.386 [DEBUG] [Thread-187345] [transport.py] [_log()] Compression: none
2026-02-14T14:56:59.386 [DEBUG] [Thread-187345] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:56:59.443 [DEBUG] [Thread-187345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:56:59.443 [DEBUG] [Thread-187345] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:56:59.444 [DEBUG] [Thread-187345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:56:59.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:56:59.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:56:59.499 [DEBUG] [Thread-187345] [transport.py] [_log()] userauth is OK
2026-02-14T14:56:59.500 [DEBUG] [Thread-187345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:56:59.500 [DEBUG] [Thread-187345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:56:59.500 [DEBUG] [Thread-187345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:56:59.500 [DEBUG] [Thread-187345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:56:59.519 [INFO] [Thread-187345] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:56:59.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-14T14:56:59.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:57:00.349 [DEBUG] [Thread-187345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:57:00.349 [DEBUG] [Thread-187345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:57:00.397 [DEBUG] [Thread-187345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:57:00.398 [DEBUG] [Thread-187345] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:57:00.407 [DEBUG] [Thread-187345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:57:00.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:57:00.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-14T14:57:00.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-14T14:57:00.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:57:00.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:57:00.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:57:00.443 [DEBUG] [Thread-187345] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:57:06.694 [DEBUG] [Thread-187347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:57:21.748 [DEBUG] [Thread-187348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:57:27.588 [DEBUG] [Thread-187349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:57:30.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:57:30.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:57:30.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-14T14:57:32.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 57, 20), 16.87, 31.71, 0.0, 29.66, 16.76, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:57:32.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:57:20
2026-02-14T14:57:32.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:57:32.811 [DEBUG] [Thread-187350] [transport.py] [_log()] starting thread (client mode): 0xa2d3d6f0
2026-02-14T14:57:32.811 [DEBUG] [Thread-187350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:57:32.831 [DEBUG] [Thread-187350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:57:32.831 [INFO] [Thread-187350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:57:32.834 [DEBUG] [Thread-187350] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:57:32.834 [DEBUG] [Thread-187350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:57:32.834 [DEBUG] [Thread-187350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:57:32.834 [DEBUG] [Thread-187350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:57:32.834 [DEBUG] [Thread-187350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:57:32.834 [DEBUG] [Thread-187350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:57:32.834 [DEBUG] [Thread-187350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:57:32.834 [DEBUG] [Thread-187350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:57:32.834 [DEBUG] [Thread-187350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:57:32.834 [DEBUG] [Thread-187350] [transport.py] [_log()] client lang: <none>
2026-02-14T14:57:32.835 [DEBUG] [Thread-187350] [transport.py] [_log()] server lang: <none>
2026-02-14T14:57:32.835 [DEBUG] [Thread-187350] [transport.py] [_log()] kex follows: False
2026-02-14T14:57:32.835 [DEBUG] [Thread-187350] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:57:32.835 [DEBUG] [Thread-187350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:57:32.835 [DEBUG] [Thread-187350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:57:32.835 [DEBUG] [Thread-187350] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:57:32.835 [DEBUG] [Thread-187350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:57:32.835 [DEBUG] [Thread-187350] [transport.py] [_log()] Compression: none
2026-02-14T14:57:32.835 [DEBUG] [Thread-187350] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:57:32.854 [DEBUG] [Thread-187350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:57:32.854 [DEBUG] [Thread-187350] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:57:32.855 [DEBUG] [Thread-187350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:57:32.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:57:32.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:57:32.896 [DEBUG] [Thread-187350] [transport.py] [_log()] userauth is OK
2026-02-14T14:57:32.896 [DEBUG] [Thread-187350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:57:32.896 [DEBUG] [Thread-187350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:57:32.896 [DEBUG] [Thread-187350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:57:32.897 [DEBUG] [Thread-187350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:57:32.918 [INFO] [Thread-187350] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:57:32.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:57:33.501 [DEBUG] [Thread-187350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:57:33.502 [DEBUG] [Thread-187350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:57:33.502 [DEBUG] [Thread-187350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:57:33.542 [DEBUG] [Thread-187350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:57:33.543 [DEBUG] [Thread-187350] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:57:33.546 [DEBUG] [Thread-187350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:57:33.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:57:33.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:57:33.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:57:33.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:57:33.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:57:33.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:57:33.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:57:33.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:57:33.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:57:33.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.539691 -999.00  +16.00  19.12     39   +2.20 1 1 1 1 1   888    0 13.45 -8.67 ----- 18.6 19.1 152.2 26.7 22.3 -27.3 21.4 -26.4 22.6 -25.4 23.8 -27.2
2026-02-14T14:57:33.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:57:33.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:57:33.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.539691
2026-02-14T14:57:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:57:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:57:33.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:57:33.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:57:33.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:57:33.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:57:20', tmtdew=16.87, humidity=31.71, cloud=0.0, wind=29.66, temperature=16.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:57:09.302', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:57:33.574 [DEBUG] [Thread-187350] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:57:33.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-14T14:57:33.669 [DEBUG] [Thread-187353] [transport.py] [_log()] starting thread (client mode): 0xa2debfa0
2026-02-14T14:57:33.669 [DEBUG] [Thread-187353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:57:33.683 [DEBUG] [Thread-187353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:57:33.684 [INFO] [Thread-187353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:57:33.691 [DEBUG] [Thread-187353] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:57:33.692 [DEBUG] [Thread-187353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:57:33.692 [DEBUG] [Thread-187353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:57:33.692 [DEBUG] [Thread-187353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:57:33.692 [DEBUG] [Thread-187353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:57:33.692 [DEBUG] [Thread-187353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:57:33.692 [DEBUG] [Thread-187353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:57:33.692 [DEBUG] [Thread-187353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:57:33.692 [DEBUG] [Thread-187353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:57:33.692 [DEBUG] [Thread-187353] [transport.py] [_log()] client lang: <none>
2026-02-14T14:57:33.692 [DEBUG] [Thread-187353] [transport.py] [_log()] server lang: <none>
2026-02-14T14:57:33.692 [DEBUG] [Thread-187353] [transport.py] [_log()] kex follows: False
2026-02-14T14:57:33.692 [DEBUG] [Thread-187353] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:57:33.692 [DEBUG] [Thread-187353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:57:33.692 [DEBUG] [Thread-187353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:57:33.692 [DEBUG] [Thread-187353] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:57:33.692 [DEBUG] [Thread-187353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:57:33.692 [DEBUG] [Thread-187353] [transport.py] [_log()] Compression: none
2026-02-14T14:57:33.692 [DEBUG] [Thread-187353] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:57:33.751 [DEBUG] [Thread-187353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:57:33.752 [DEBUG] [Thread-187353] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:57:33.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:57:33.753 [DEBUG] [Thread-187353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:57:33.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:57:33.807 [DEBUG] [Thread-187353] [transport.py] [_log()] userauth is OK
2026-02-14T14:57:33.807 [DEBUG] [Thread-187353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:57:33.808 [DEBUG] [Thread-187353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:57:33.808 [DEBUG] [Thread-187353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:57:33.808 [DEBUG] [Thread-187353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:57:33.826 [INFO] [Thread-187353] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:57:33.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-14T14:57:33.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:57:34.648 [DEBUG] [Thread-187353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:57:34.648 [DEBUG] [Thread-187353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:57:34.697 [DEBUG] [Thread-187353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:57:34.697 [DEBUG] [Thread-187353] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:57:34.706 [DEBUG] [Thread-187353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:57:34.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:57:34.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-14T14:57:34.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:57:34.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:57:34.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:57:34.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:57:34.743 [DEBUG] [Thread-187353] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:57:36.786 [DEBUG] [Thread-187355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:57:42.662 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:57:42.663 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:57:51.838 [DEBUG] [Thread-187356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:58:04.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:58:04.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:58:04.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-14T14:58:06.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 57, 55), 16.78, 32.01, 0.0, 22.18, 16.62, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:58:06.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:57:55
2026-02-14T14:58:06.875 [DEBUG] [Thread-187357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:58:07.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:58:07.323 [DEBUG] [Thread-187358] [transport.py] [_log()] starting thread (client mode): 0xa2debb50
2026-02-14T14:58:07.323 [DEBUG] [Thread-187358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:58:07.343 [DEBUG] [Thread-187358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:58:07.343 [INFO] [Thread-187358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:58:07.346 [DEBUG] [Thread-187358] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:58:07.347 [DEBUG] [Thread-187358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:58:07.347 [DEBUG] [Thread-187358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:58:07.347 [DEBUG] [Thread-187358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:58:07.347 [DEBUG] [Thread-187358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:58:07.347 [DEBUG] [Thread-187358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:58:07.347 [DEBUG] [Thread-187358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:58:07.347 [DEBUG] [Thread-187358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:58:07.347 [DEBUG] [Thread-187358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:58:07.347 [DEBUG] [Thread-187358] [transport.py] [_log()] client lang: <none>
2026-02-14T14:58:07.347 [DEBUG] [Thread-187358] [transport.py] [_log()] server lang: <none>
2026-02-14T14:58:07.347 [DEBUG] [Thread-187358] [transport.py] [_log()] kex follows: False
2026-02-14T14:58:07.347 [DEBUG] [Thread-187358] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:58:07.347 [DEBUG] [Thread-187358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:58:07.347 [DEBUG] [Thread-187358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:58:07.348 [DEBUG] [Thread-187358] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:58:07.348 [DEBUG] [Thread-187358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:58:07.348 [DEBUG] [Thread-187358] [transport.py] [_log()] Compression: none
2026-02-14T14:58:07.348 [DEBUG] [Thread-187358] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:58:07.366 [DEBUG] [Thread-187358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:58:07.367 [DEBUG] [Thread-187358] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:58:07.368 [DEBUG] [Thread-187358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:58:07.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:58:07.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:58:07.370 [DEBUG] [Thread-187358] [transport.py] [_log()] userauth is OK
2026-02-14T14:58:07.371 [DEBUG] [Thread-187358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:58:07.371 [DEBUG] [Thread-187358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:58:07.371 [DEBUG] [Thread-187358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:58:07.371 [DEBUG] [Thread-187358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:58:07.402 [INFO] [Thread-187358] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:58:07.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:58:08.186 [DEBUG] [Thread-187358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:58:08.186 [DEBUG] [Thread-187358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:58:08.187 [DEBUG] [Thread-187358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:58:08.227 [DEBUG] [Thread-187358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:58:08.227 [DEBUG] [Thread-187358] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:58:08.230 [DEBUG] [Thread-187358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:58:08.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:58:08.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:58:08.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:58:08.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:58:08.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:58:08.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:58:08.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:58:08.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:58:08.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:58:08.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.540038 -999.00  +15.90  23.59     39   +2.20 1 1 1 1 1   888    0 13.49 -10.83 ----- 19.8 23.6 160.4 30.4 22.3 -26.9 21.4 -26.2 22.7 -25.4 23.8 -27.4
2026-02-14T14:58:08.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:58:08.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:58:08.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.540038
2026-02-14T14:58:08.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:58:08.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:58:08.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:58:08.259 [DEBUG] [Thread-187358] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:58:08.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:58:08.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:58:08.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:57:55', tmtdew=16.78, humidity=32.01, cloud=0.0, wind=22.18, temperature=16.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:57:39.283', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:58:08.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-14T14:58:08.354 [DEBUG] [Thread-187361] [transport.py] [_log()] starting thread (client mode): 0xa2dea020
2026-02-14T14:58:08.354 [DEBUG] [Thread-187361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:58:08.369 [DEBUG] [Thread-187361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:58:08.370 [INFO] [Thread-187361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:58:08.378 [DEBUG] [Thread-187361] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:58:08.378 [DEBUG] [Thread-187361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:58:08.379 [DEBUG] [Thread-187361] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:58:08.379 [DEBUG] [Thread-187361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:58:08.379 [DEBUG] [Thread-187361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:58:08.379 [DEBUG] [Thread-187361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:58:08.379 [DEBUG] [Thread-187361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:58:08.379 [DEBUG] [Thread-187361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:58:08.379 [DEBUG] [Thread-187361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:58:08.379 [DEBUG] [Thread-187361] [transport.py] [_log()] client lang: <none>
2026-02-14T14:58:08.379 [DEBUG] [Thread-187361] [transport.py] [_log()] server lang: <none>
2026-02-14T14:58:08.379 [DEBUG] [Thread-187361] [transport.py] [_log()] kex follows: False
2026-02-14T14:58:08.379 [DEBUG] [Thread-187361] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:58:08.379 [DEBUG] [Thread-187361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:58:08.379 [DEBUG] [Thread-187361] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:58:08.379 [DEBUG] [Thread-187361] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:58:08.379 [DEBUG] [Thread-187361] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:58:08.380 [DEBUG] [Thread-187361] [transport.py] [_log()] Compression: none
2026-02-14T14:58:08.380 [DEBUG] [Thread-187361] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:58:08.436 [DEBUG] [Thread-187361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:58:08.436 [DEBUG] [Thread-187361] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:58:08.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:58:08.438 [DEBUG] [Thread-187361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:58:08.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:58:08.496 [DEBUG] [Thread-187361] [transport.py] [_log()] userauth is OK
2026-02-14T14:58:08.496 [DEBUG] [Thread-187361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:58:08.496 [DEBUG] [Thread-187361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:58:08.496 [DEBUG] [Thread-187361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:58:08.496 [DEBUG] [Thread-187361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:58:08.520 [INFO] [Thread-187361] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:58:08.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-14T14:58:08.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:58:09.360 [DEBUG] [Thread-187361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:58:09.360 [DEBUG] [Thread-187361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:58:09.408 [DEBUG] [Thread-187361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:58:09.408 [DEBUG] [Thread-187361] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:58:09.417 [DEBUG] [Thread-187361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:58:09.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:58:09.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-14T14:58:09.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:58:09.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:58:09.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:58:09.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:58:09.454 [DEBUG] [Thread-187361] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:58:21.912 [DEBUG] [Thread-187363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:58:27.620 [DEBUG] [Thread-187364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:58:36.959 [DEBUG] [Thread-187365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:58:39.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:58:39.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:58:39.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-14T14:58:41.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 58, 30), 16.49, 32.56, 0.0, 26.36, 16.31, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:58:41.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:58:30
2026-02-14T14:58:41.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:58:41.959 [DEBUG] [Thread-187366] [transport.py] [_log()] starting thread (client mode): 0xa2de9300
2026-02-14T14:58:41.959 [DEBUG] [Thread-187366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:58:41.980 [DEBUG] [Thread-187366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:58:41.980 [INFO] [Thread-187366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:58:41.983 [DEBUG] [Thread-187366] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:58:41.983 [DEBUG] [Thread-187366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:58:41.983 [DEBUG] [Thread-187366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:58:41.983 [DEBUG] [Thread-187366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:58:41.983 [DEBUG] [Thread-187366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:58:41.983 [DEBUG] [Thread-187366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:58:41.983 [DEBUG] [Thread-187366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:58:41.983 [DEBUG] [Thread-187366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:58:41.983 [DEBUG] [Thread-187366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:58:41.983 [DEBUG] [Thread-187366] [transport.py] [_log()] client lang: <none>
2026-02-14T14:58:41.983 [DEBUG] [Thread-187366] [transport.py] [_log()] server lang: <none>
2026-02-14T14:58:41.983 [DEBUG] [Thread-187366] [transport.py] [_log()] kex follows: False
2026-02-14T14:58:41.984 [DEBUG] [Thread-187366] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:58:41.984 [DEBUG] [Thread-187366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:58:41.984 [DEBUG] [Thread-187366] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:58:41.984 [DEBUG] [Thread-187366] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:58:41.984 [DEBUG] [Thread-187366] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:58:41.984 [DEBUG] [Thread-187366] [transport.py] [_log()] Compression: none
2026-02-14T14:58:41.984 [DEBUG] [Thread-187366] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:58:41.995 [DEBUG] [Thread-187366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:58:41.996 [DEBUG] [Thread-187366] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:58:41.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:58:41.997 [DEBUG] [Thread-187366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:58:41.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:58:42.000 [DEBUG] [Thread-187366] [transport.py] [_log()] userauth is OK
2026-02-14T14:58:42.000 [DEBUG] [Thread-187366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:58:42.001 [DEBUG] [Thread-187366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:58:42.001 [DEBUG] [Thread-187366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:58:42.001 [DEBUG] [Thread-187366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:58:42.016 [INFO] [Thread-187366] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:58:42.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:58:42.635 [DEBUG] [Thread-187366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:58:42.636 [DEBUG] [Thread-187366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:58:42.636 [DEBUG] [Thread-187366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:58:42.676 [DEBUG] [Thread-187366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:58:42.676 [DEBUG] [Thread-187366] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:58:42.680 [DEBUG] [Thread-187366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:58:42.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:58:42.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:58:42.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:58:42.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:58:42.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:58:42.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:58:42.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:58:42.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:58:42.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:58:42.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.540385 -999.00  +16.30  20.16     39   +2.40 1 1 1 1 1   888    0 13.35 -10.58 ----- 16.4 20.2 170.2 34.2 22.3 -26.9 21.5 -26.1 22.8 -25.1 23.8 -28.1
2026-02-14T14:58:42.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:58:42.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:58:42.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.540385
2026-02-14T14:58:42.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:58:42.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:58:42.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:58:42.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:58:42.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:58:42.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:58:30', tmtdew=16.49, humidity=32.56, cloud=0.0, wind=26.36, temperature=16.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:58:09.264', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:58:42.708 [DEBUG] [Thread-187366] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:58:42.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-14T14:58:42.806 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:58:42.806 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:58:42.814 [DEBUG] [Thread-187369] [transport.py] [_log()] starting thread (client mode): 0xa2ddeb30
2026-02-14T14:58:42.814 [DEBUG] [Thread-187369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:58:42.828 [DEBUG] [Thread-187369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:58:42.829 [INFO] [Thread-187369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:58:42.836 [DEBUG] [Thread-187369] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:58:42.837 [DEBUG] [Thread-187369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:58:42.837 [DEBUG] [Thread-187369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:58:42.837 [DEBUG] [Thread-187369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:58:42.837 [DEBUG] [Thread-187369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:58:42.837 [DEBUG] [Thread-187369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:58:42.837 [DEBUG] [Thread-187369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:58:42.837 [DEBUG] [Thread-187369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:58:42.837 [DEBUG] [Thread-187369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:58:42.837 [DEBUG] [Thread-187369] [transport.py] [_log()] client lang: <none>
2026-02-14T14:58:42.837 [DEBUG] [Thread-187369] [transport.py] [_log()] server lang: <none>
2026-02-14T14:58:42.837 [DEBUG] [Thread-187369] [transport.py] [_log()] kex follows: False
2026-02-14T14:58:42.837 [DEBUG] [Thread-187369] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:58:42.837 [DEBUG] [Thread-187369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:58:42.837 [DEBUG] [Thread-187369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:58:42.837 [DEBUG] [Thread-187369] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:58:42.837 [DEBUG] [Thread-187369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:58:42.837 [DEBUG] [Thread-187369] [transport.py] [_log()] Compression: none
2026-02-14T14:58:42.838 [DEBUG] [Thread-187369] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:58:42.895 [DEBUG] [Thread-187369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:58:42.895 [DEBUG] [Thread-187369] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:58:42.896 [DEBUG] [Thread-187369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:58:42.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:58:42.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:58:42.951 [DEBUG] [Thread-187369] [transport.py] [_log()] userauth is OK
2026-02-14T14:58:42.952 [DEBUG] [Thread-187369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:58:42.952 [DEBUG] [Thread-187369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:58:42.952 [DEBUG] [Thread-187369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:58:42.952 [DEBUG] [Thread-187369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:58:42.976 [INFO] [Thread-187369] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:58:42.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-14T14:58:42.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:58:43.811 [DEBUG] [Thread-187369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:58:43.811 [DEBUG] [Thread-187369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:58:43.859 [DEBUG] [Thread-187369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:58:43.859 [DEBUG] [Thread-187369] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:58:43.868 [DEBUG] [Thread-187369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:58:43.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:58:43.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-14T14:58:43.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-14T14:58:43.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:58:43.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:58:43.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:58:43.902 [DEBUG] [Thread-187369] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:58:51.996 [DEBUG] [Thread-187371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:59:07.051 [DEBUG] [Thread-187372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:59:13.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:59:13.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:59:13.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-14T14:59:15.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 59, 6), 16.56, 32.42, 0.0, 28.26, 16.39, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:59:15.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:59:06
2026-02-14T14:59:16.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:59:16.283 [DEBUG] [Thread-187373] [transport.py] [_log()] starting thread (client mode): 0xa2d55720
2026-02-14T14:59:16.284 [DEBUG] [Thread-187373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:59:16.306 [DEBUG] [Thread-187373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:59:16.306 [INFO] [Thread-187373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:59:16.307 [DEBUG] [Thread-187373] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:59:16.307 [DEBUG] [Thread-187373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:59:16.307 [DEBUG] [Thread-187373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:59:16.308 [DEBUG] [Thread-187373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:59:16.308 [DEBUG] [Thread-187373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:59:16.308 [DEBUG] [Thread-187373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:59:16.308 [DEBUG] [Thread-187373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:59:16.308 [DEBUG] [Thread-187373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:59:16.308 [DEBUG] [Thread-187373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:59:16.308 [DEBUG] [Thread-187373] [transport.py] [_log()] client lang: <none>
2026-02-14T14:59:16.308 [DEBUG] [Thread-187373] [transport.py] [_log()] server lang: <none>
2026-02-14T14:59:16.308 [DEBUG] [Thread-187373] [transport.py] [_log()] kex follows: False
2026-02-14T14:59:16.308 [DEBUG] [Thread-187373] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:59:16.308 [DEBUG] [Thread-187373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:59:16.308 [DEBUG] [Thread-187373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:59:16.308 [DEBUG] [Thread-187373] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:59:16.308 [DEBUG] [Thread-187373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:59:16.308 [DEBUG] [Thread-187373] [transport.py] [_log()] Compression: none
2026-02-14T14:59:16.308 [DEBUG] [Thread-187373] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:59:16.316 [DEBUG] [Thread-187373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:59:16.316 [DEBUG] [Thread-187373] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:59:16.317 [DEBUG] [Thread-187373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:59:16.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:59:16.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:59:16.319 [DEBUG] [Thread-187373] [transport.py] [_log()] userauth is OK
2026-02-14T14:59:16.319 [DEBUG] [Thread-187373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:59:16.319 [DEBUG] [Thread-187373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:59:16.319 [DEBUG] [Thread-187373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:59:16.319 [DEBUG] [Thread-187373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:59:16.344 [INFO] [Thread-187373] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:59:16.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:59:16.973 [DEBUG] [Thread-187373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:59:16.973 [DEBUG] [Thread-187373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:59:16.973 [DEBUG] [Thread-187373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:59:17.014 [DEBUG] [Thread-187373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:59:17.014 [DEBUG] [Thread-187373] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:59:17.018 [DEBUG] [Thread-187373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:59:17.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:59:17.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:59:17.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:59:17.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:59:17.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:59:17.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:59:17.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:59:17.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:59:17.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:59:17.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.540733 -999.00  +16.80  24.82     38   +2.40 1 1 1 1 1   888    0 13.71 -9.24 ----- 28.2 24.8 161.6 34.8 22.4 -27.3 21.6 -25.3 22.9 -24.1 24.0 -26.0
2026-02-14T14:59:17.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:59:17.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:59:17.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.540733
2026-02-14T14:59:17.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:59:17.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:59:17.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:59:17.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:59:17.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:59:17.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:59:06', tmtdew=16.56, humidity=32.42, cloud=0.0, wind=28.26, temperature=16.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:58:39.331', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:59:17.045 [DEBUG] [Thread-187373] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:59:17.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-14T14:59:17.145 [DEBUG] [Thread-187376] [transport.py] [_log()] starting thread (client mode): 0xa2d56200
2026-02-14T14:59:17.145 [DEBUG] [Thread-187376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:59:17.163 [DEBUG] [Thread-187376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:59:17.164 [INFO] [Thread-187376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:59:17.171 [DEBUG] [Thread-187376] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:59:17.171 [DEBUG] [Thread-187376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:59:17.171 [DEBUG] [Thread-187376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:59:17.171 [DEBUG] [Thread-187376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:59:17.171 [DEBUG] [Thread-187376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:59:17.172 [DEBUG] [Thread-187376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:59:17.172 [DEBUG] [Thread-187376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:59:17.172 [DEBUG] [Thread-187376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:59:17.172 [DEBUG] [Thread-187376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:59:17.172 [DEBUG] [Thread-187376] [transport.py] [_log()] client lang: <none>
2026-02-14T14:59:17.172 [DEBUG] [Thread-187376] [transport.py] [_log()] server lang: <none>
2026-02-14T14:59:17.172 [DEBUG] [Thread-187376] [transport.py] [_log()] kex follows: False
2026-02-14T14:59:17.172 [DEBUG] [Thread-187376] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:59:17.172 [DEBUG] [Thread-187376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:59:17.172 [DEBUG] [Thread-187376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:59:17.172 [DEBUG] [Thread-187376] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:59:17.172 [DEBUG] [Thread-187376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:59:17.172 [DEBUG] [Thread-187376] [transport.py] [_log()] Compression: none
2026-02-14T14:59:17.172 [DEBUG] [Thread-187376] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:59:17.232 [DEBUG] [Thread-187376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:59:17.233 [DEBUG] [Thread-187376] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:59:17.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:59:17.234 [DEBUG] [Thread-187376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:59:17.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:59:17.288 [DEBUG] [Thread-187376] [transport.py] [_log()] userauth is OK
2026-02-14T14:59:17.289 [DEBUG] [Thread-187376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:59:17.289 [DEBUG] [Thread-187376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:59:17.289 [DEBUG] [Thread-187376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:59:17.289 [DEBUG] [Thread-187376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:59:17.314 [INFO] [Thread-187376] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:59:17.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-14T14:59:17.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:59:18.142 [DEBUG] [Thread-187376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:59:18.143 [DEBUG] [Thread-187376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:59:18.190 [DEBUG] [Thread-187376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:59:18.191 [DEBUG] [Thread-187376] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:59:18.200 [DEBUG] [Thread-187376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:59:18.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:59:18.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-14T14:59:18.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-14T14:59:18.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:59:18.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:59:18.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:59:18.237 [DEBUG] [Thread-187376] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:59:22.089 [DEBUG] [Thread-187378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:59:27.653 [DEBUG] [Thread-187379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:59:37.140 [DEBUG] [Thread-187380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:59:42.949 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:59:42.950 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:59:48.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T14:59:48.254 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T14:59:48.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-14T14:59:50.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 59, 41), 17.93, 29.65, 0.0, 35.6, 17.65, 0, 0, 0, 2, 0, 0),)
2026-02-14T14:59:50.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:59:41
2026-02-14T14:59:50.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T14:59:51.131 [DEBUG] [Thread-187381] [transport.py] [_log()] starting thread (client mode): 0xa2d18850
2026-02-14T14:59:51.131 [DEBUG] [Thread-187381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:59:51.152 [DEBUG] [Thread-187381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T14:59:51.152 [INFO] [Thread-187381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T14:59:51.155 [DEBUG] [Thread-187381] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:59:51.155 [DEBUG] [Thread-187381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T14:59:51.155 [DEBUG] [Thread-187381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:59:51.155 [DEBUG] [Thread-187381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:59:51.155 [DEBUG] [Thread-187381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:59:51.155 [DEBUG] [Thread-187381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:59:51.155 [DEBUG] [Thread-187381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:59:51.155 [DEBUG] [Thread-187381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:59:51.155 [DEBUG] [Thread-187381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:59:51.155 [DEBUG] [Thread-187381] [transport.py] [_log()] client lang: <none>
2026-02-14T14:59:51.155 [DEBUG] [Thread-187381] [transport.py] [_log()] server lang: <none>
2026-02-14T14:59:51.155 [DEBUG] [Thread-187381] [transport.py] [_log()] kex follows: False
2026-02-14T14:59:51.155 [DEBUG] [Thread-187381] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:59:51.155 [DEBUG] [Thread-187381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:59:51.155 [DEBUG] [Thread-187381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:59:51.155 [DEBUG] [Thread-187381] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:59:51.155 [DEBUG] [Thread-187381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:59:51.155 [DEBUG] [Thread-187381] [transport.py] [_log()] Compression: none
2026-02-14T14:59:51.155 [DEBUG] [Thread-187381] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:59:51.172 [DEBUG] [Thread-187381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:59:51.173 [DEBUG] [Thread-187381] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:59:51.173 [DEBUG] [Thread-187381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T14:59:51.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T14:59:51.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:59:51.175 [DEBUG] [Thread-187381] [transport.py] [_log()] userauth is OK
2026-02-14T14:59:51.175 [DEBUG] [Thread-187381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:59:51.175 [DEBUG] [Thread-187381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:59:51.175 [DEBUG] [Thread-187381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T14:59:51.175 [DEBUG] [Thread-187381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:59:51.192 [INFO] [Thread-187381] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:59:51.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:59:51.833 [DEBUG] [Thread-187381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:59:51.834 [DEBUG] [Thread-187381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:59:51.834 [DEBUG] [Thread-187381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T14:59:51.874 [DEBUG] [Thread-187381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:59:51.875 [DEBUG] [Thread-187381] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:59:51.878 [DEBUG] [Thread-187381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:59:51.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:59:51.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T14:59:51.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T14:59:51.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T14:59:51.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:59:51.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T14:59:51.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:59:51.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:59:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T14:59:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.541080 -999.00  +16.50  25.35     36   +1.60 1 1 1 1 1   888    0 13.61 -5.79 ----- 20.9 25.4 155.5 34.5 22.3 -27.8 21.6 -27.3 22.8 -26.9 23.9 -28.4
2026-02-14T14:59:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T14:59:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T14:59:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.541080
2026-02-14T14:59:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T14:59:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T14:59:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T14:59:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T14:59:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T14:59:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:59:41', tmtdew=17.93, humidity=29.65, cloud=0.0, wind=35.6, temperature=17.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:59:09.312', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T14:59:51.904 [DEBUG] [Thread-187381] [transport.py] [_log()] EOF in transport thread
2026-02-14T14:59:51.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-14T14:59:52.000 [DEBUG] [Thread-187384] [transport.py] [_log()] starting thread (client mode): 0xa2d1aa10
2026-02-14T14:59:52.000 [DEBUG] [Thread-187384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T14:59:52.017 [DEBUG] [Thread-187384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T14:59:52.017 [INFO] [Thread-187384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T14:59:52.024 [DEBUG] [Thread-187384] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T14:59:52.025 [DEBUG] [Thread-187384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T14:59:52.025 [DEBUG] [Thread-187384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T14:59:52.025 [DEBUG] [Thread-187384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:59:52.025 [DEBUG] [Thread-187384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T14:59:52.025 [DEBUG] [Thread-187384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:59:52.025 [DEBUG] [Thread-187384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T14:59:52.025 [DEBUG] [Thread-187384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T14:59:52.025 [DEBUG] [Thread-187384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T14:59:52.025 [DEBUG] [Thread-187384] [transport.py] [_log()] client lang: <none>
2026-02-14T14:59:52.025 [DEBUG] [Thread-187384] [transport.py] [_log()] server lang: <none>
2026-02-14T14:59:52.025 [DEBUG] [Thread-187384] [transport.py] [_log()] kex follows: False
2026-02-14T14:59:52.025 [DEBUG] [Thread-187384] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T14:59:52.025 [DEBUG] [Thread-187384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T14:59:52.026 [DEBUG] [Thread-187384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T14:59:52.026 [DEBUG] [Thread-187384] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T14:59:52.026 [DEBUG] [Thread-187384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T14:59:52.026 [DEBUG] [Thread-187384] [transport.py] [_log()] Compression: none
2026-02-14T14:59:52.026 [DEBUG] [Thread-187384] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T14:59:52.085 [DEBUG] [Thread-187384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T14:59:52.085 [DEBUG] [Thread-187384] [transport.py] [_log()] Switch to new keys ...
2026-02-14T14:59:52.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T14:59:52.086 [DEBUG] [Thread-187384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T14:59:52.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T14:59:52.141 [DEBUG] [Thread-187384] [transport.py] [_log()] userauth is OK
2026-02-14T14:59:52.141 [DEBUG] [Thread-187384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T14:59:52.141 [DEBUG] [Thread-187384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T14:59:52.141 [DEBUG] [Thread-187384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T14:59:52.141 [DEBUG] [Thread-187384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T14:59:52.161 [INFO] [Thread-187384] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T14:59:52.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T14:59:52.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T14:59:52.177 [DEBUG] [Thread-187386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T14:59:53.002 [DEBUG] [Thread-187384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T14:59:53.002 [DEBUG] [Thread-187384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T14:59:53.050 [DEBUG] [Thread-187384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T14:59:53.050 [DEBUG] [Thread-187384] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T14:59:53.059 [DEBUG] [Thread-187384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T14:59:53.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T14:59:53.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-14T14:59:53.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T14:59:53.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T14:59:53.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T14:59:53.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T14:59:53.091 [DEBUG] [Thread-187384] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:00:07.229 [DEBUG] [Thread-187387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:00:22.266 [DEBUG] [Thread-187388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:00:23.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:00:23.113 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:00:23.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-14T15:00:25.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 14, 59, 41), 17.93, 29.65, 0.0, 35.6, 17.65, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:00:25.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 14:59:41
2026-02-14T15:00:25.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:00:25.904 [DEBUG] [Thread-187389] [transport.py] [_log()] starting thread (client mode): 0xa2d18a30
2026-02-14T15:00:25.904 [DEBUG] [Thread-187389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:00:25.924 [DEBUG] [Thread-187389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:00:25.924 [INFO] [Thread-187389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:00:25.925 [DEBUG] [Thread-187389] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:00:25.925 [DEBUG] [Thread-187389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:00:25.925 [DEBUG] [Thread-187389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:00:25.925 [DEBUG] [Thread-187389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:00:25.925 [DEBUG] [Thread-187389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:00:25.926 [DEBUG] [Thread-187389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:00:25.926 [DEBUG] [Thread-187389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:00:25.926 [DEBUG] [Thread-187389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:00:25.926 [DEBUG] [Thread-187389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:00:25.926 [DEBUG] [Thread-187389] [transport.py] [_log()] client lang: <none>
2026-02-14T15:00:25.926 [DEBUG] [Thread-187389] [transport.py] [_log()] server lang: <none>
2026-02-14T15:00:25.926 [DEBUG] [Thread-187389] [transport.py] [_log()] kex follows: False
2026-02-14T15:00:25.926 [DEBUG] [Thread-187389] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:00:25.926 [DEBUG] [Thread-187389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:00:25.926 [DEBUG] [Thread-187389] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:00:25.926 [DEBUG] [Thread-187389] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:00:25.926 [DEBUG] [Thread-187389] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:00:25.926 [DEBUG] [Thread-187389] [transport.py] [_log()] Compression: none
2026-02-14T15:00:25.926 [DEBUG] [Thread-187389] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:00:25.943 [DEBUG] [Thread-187389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:00:25.944 [DEBUG] [Thread-187389] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:00:25.944 [DEBUG] [Thread-187389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:00:25.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:00:25.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:00:25.946 [DEBUG] [Thread-187389] [transport.py] [_log()] userauth is OK
2026-02-14T15:00:25.946 [DEBUG] [Thread-187389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:00:25.946 [DEBUG] [Thread-187389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:00:25.947 [DEBUG] [Thread-187389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:00:25.947 [DEBUG] [Thread-187389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:00:25.971 [INFO] [Thread-187389] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:00:25.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:00:26.591 [DEBUG] [Thread-187389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:00:26.591 [DEBUG] [Thread-187389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:00:26.592 [DEBUG] [Thread-187389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:00:26.632 [DEBUG] [Thread-187389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:00:26.632 [DEBUG] [Thread-187389] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:00:26.636 [DEBUG] [Thread-187389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:00:26.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:00:26.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:00:26.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:00:26.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:00:26.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:00:26.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:00:26.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:00:26.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:00:26.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:00:26.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.541427 -999.00  +16.40  25.63     36   +1.50 1 1 1 1 1   888    0 13.89 -1.33 ----- 24.1 25.6 149.8 31.4 22.4 -28.6 21.6 -26.1 22.8 -25.4 23.9 -27.1
2026-02-14T15:00:26.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:00:26.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:00:26.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.541427
2026-02-14T15:00:26.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:00:26.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:00:26.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:00:26.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:00:26.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:00:26.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T14:59:41', tmtdew=17.93, humidity=29.65, cloud=0.0, wind=35.6, temperature=17.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T12:59:39.293', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:00:26.663 [DEBUG] [Thread-187389] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:00:26.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-14T15:00:26.759 [DEBUG] [Thread-187392] [transport.py] [_log()] starting thread (client mode): 0xa2d19fc0
2026-02-14T15:00:26.760 [DEBUG] [Thread-187392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:00:26.774 [DEBUG] [Thread-187392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:00:26.774 [INFO] [Thread-187392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:00:26.781 [DEBUG] [Thread-187392] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:00:26.781 [DEBUG] [Thread-187392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:00:26.782 [DEBUG] [Thread-187392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:00:26.782 [DEBUG] [Thread-187392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:00:26.782 [DEBUG] [Thread-187392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:00:26.782 [DEBUG] [Thread-187392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:00:26.782 [DEBUG] [Thread-187392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:00:26.782 [DEBUG] [Thread-187392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:00:26.782 [DEBUG] [Thread-187392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:00:26.782 [DEBUG] [Thread-187392] [transport.py] [_log()] client lang: <none>
2026-02-14T15:00:26.783 [DEBUG] [Thread-187392] [transport.py] [_log()] server lang: <none>
2026-02-14T15:00:26.783 [DEBUG] [Thread-187392] [transport.py] [_log()] kex follows: False
2026-02-14T15:00:26.783 [DEBUG] [Thread-187392] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:00:26.783 [DEBUG] [Thread-187392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:00:26.783 [DEBUG] [Thread-187392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:00:26.783 [DEBUG] [Thread-187392] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:00:26.783 [DEBUG] [Thread-187392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:00:26.783 [DEBUG] [Thread-187392] [transport.py] [_log()] Compression: none
2026-02-14T15:00:26.783 [DEBUG] [Thread-187392] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:00:26.840 [DEBUG] [Thread-187392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:00:26.841 [DEBUG] [Thread-187392] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:00:26.842 [DEBUG] [Thread-187392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:00:26.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:00:26.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:00:26.897 [DEBUG] [Thread-187392] [transport.py] [_log()] userauth is OK
2026-02-14T15:00:26.897 [DEBUG] [Thread-187392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:00:26.897 [DEBUG] [Thread-187392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:00:26.897 [DEBUG] [Thread-187392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:00:26.897 [DEBUG] [Thread-187392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:00:26.915 [INFO] [Thread-187392] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:00:26.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-14T15:00:26.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:00:27.696 [DEBUG] [Thread-187394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:00:27.716 [DEBUG] [Thread-187392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:00:27.717 [DEBUG] [Thread-187392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:00:27.766 [DEBUG] [Thread-187392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:00:27.766 [DEBUG] [Thread-187392] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:00:27.776 [DEBUG] [Thread-187392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:00:27.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:00:27.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-14T15:00:27.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:00:27.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:00:27.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:00:27.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:00:27.813 [DEBUG] [Thread-187392] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:00:37.302 [DEBUG] [Thread-187395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:00:43.093 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:00:43.093 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:00:52.361 [DEBUG] [Thread-187396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:00:57.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:00:57.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:00:57.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-14T15:00:59.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 0, 17), 17.74, 30.09, 0.0, 28.39, 17.14, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:00:59.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:00:17
2026-02-14T15:01:00.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:01:00.454 [DEBUG] [Thread-187397] [transport.py] [_log()] starting thread (client mode): 0xa2ddd390
2026-02-14T15:01:00.454 [DEBUG] [Thread-187397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:01:00.475 [DEBUG] [Thread-187397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:01:00.475 [INFO] [Thread-187397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:01:00.478 [DEBUG] [Thread-187397] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:01:00.478 [DEBUG] [Thread-187397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:01:00.478 [DEBUG] [Thread-187397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:01:00.478 [DEBUG] [Thread-187397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:01:00.478 [DEBUG] [Thread-187397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:01:00.478 [DEBUG] [Thread-187397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:01:00.478 [DEBUG] [Thread-187397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:01:00.479 [DEBUG] [Thread-187397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:01:00.479 [DEBUG] [Thread-187397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:01:00.479 [DEBUG] [Thread-187397] [transport.py] [_log()] client lang: <none>
2026-02-14T15:01:00.479 [DEBUG] [Thread-187397] [transport.py] [_log()] server lang: <none>
2026-02-14T15:01:00.479 [DEBUG] [Thread-187397] [transport.py] [_log()] kex follows: False
2026-02-14T15:01:00.479 [DEBUG] [Thread-187397] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:01:00.479 [DEBUG] [Thread-187397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:01:00.479 [DEBUG] [Thread-187397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:01:00.479 [DEBUG] [Thread-187397] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:01:00.479 [DEBUG] [Thread-187397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:01:00.479 [DEBUG] [Thread-187397] [transport.py] [_log()] Compression: none
2026-02-14T15:01:00.479 [DEBUG] [Thread-187397] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:01:00.497 [DEBUG] [Thread-187397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:01:00.497 [DEBUG] [Thread-187397] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:01:00.498 [DEBUG] [Thread-187397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:01:00.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:01:00.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:01:00.500 [DEBUG] [Thread-187397] [transport.py] [_log()] userauth is OK
2026-02-14T15:01:00.500 [DEBUG] [Thread-187397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:01:00.500 [DEBUG] [Thread-187397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:01:00.500 [DEBUG] [Thread-187397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:01:00.500 [DEBUG] [Thread-187397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:01:00.515 [INFO] [Thread-187397] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:01:00.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:01:01.322 [DEBUG] [Thread-187397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:01:01.323 [DEBUG] [Thread-187397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:01:01.323 [DEBUG] [Thread-187397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:01:01.363 [DEBUG] [Thread-187397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:01:01.364 [DEBUG] [Thread-187397] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:01:01.367 [DEBUG] [Thread-187397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:01:01.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:01:01.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:01:01.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:01:01.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:01:01.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:01:01.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:01:01.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:01:01.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:01:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:01:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.541774 -999.00  +16.20  16.23     38   +1.90 1 1 1 1 1   888    0 13.97 2.32 ----- 24.0 16.2 151.5 33.8 22.4 -27.5 21.5 -27.4 22.8 -25.8 23.8 -27.1
2026-02-14T15:01:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:01:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:01:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.541774
2026-02-14T15:01:01.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:01:01.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:01:01.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:01:01.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:01:01.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:01:01.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:00:17', tmtdew=17.74, humidity=30.09, cloud=0.0, wind=28.39, temperature=17.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:00:09.274', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:01:01.393 [DEBUG] [Thread-187397] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:01:01.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-14T15:01:01.488 [DEBUG] [Thread-187400] [transport.py] [_log()] starting thread (client mode): 0xa2d55c90
2026-02-14T15:01:01.488 [DEBUG] [Thread-187400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:01:01.503 [DEBUG] [Thread-187400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:01:01.503 [INFO] [Thread-187400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:01:01.510 [DEBUG] [Thread-187400] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:01:01.511 [DEBUG] [Thread-187400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:01:01.511 [DEBUG] [Thread-187400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:01:01.511 [DEBUG] [Thread-187400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:01:01.511 [DEBUG] [Thread-187400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:01:01.512 [DEBUG] [Thread-187400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:01:01.512 [DEBUG] [Thread-187400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:01:01.512 [DEBUG] [Thread-187400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:01:01.512 [DEBUG] [Thread-187400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:01:01.512 [DEBUG] [Thread-187400] [transport.py] [_log()] client lang: <none>
2026-02-14T15:01:01.512 [DEBUG] [Thread-187400] [transport.py] [_log()] server lang: <none>
2026-02-14T15:01:01.512 [DEBUG] [Thread-187400] [transport.py] [_log()] kex follows: False
2026-02-14T15:01:01.512 [DEBUG] [Thread-187400] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:01:01.512 [DEBUG] [Thread-187400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:01:01.512 [DEBUG] [Thread-187400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:01:01.512 [DEBUG] [Thread-187400] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:01:01.512 [DEBUG] [Thread-187400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:01:01.512 [DEBUG] [Thread-187400] [transport.py] [_log()] Compression: none
2026-02-14T15:01:01.512 [DEBUG] [Thread-187400] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:01:01.574 [DEBUG] [Thread-187400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:01:01.575 [DEBUG] [Thread-187400] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:01:01.575 [DEBUG] [Thread-187400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:01:01.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:01:01.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:01:01.633 [DEBUG] [Thread-187400] [transport.py] [_log()] userauth is OK
2026-02-14T15:01:01.633 [DEBUG] [Thread-187400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:01:01.633 [DEBUG] [Thread-187400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:01:01.634 [DEBUG] [Thread-187400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:01:01.634 [DEBUG] [Thread-187400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:01:01.652 [INFO] [Thread-187400] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:01:01.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-14T15:01:01.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:01:02.503 [DEBUG] [Thread-187400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:01:02.504 [DEBUG] [Thread-187400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:01:02.551 [DEBUG] [Thread-187400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:01:02.551 [DEBUG] [Thread-187400] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:01:02.560 [DEBUG] [Thread-187400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:01:02.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:01:02.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-14T15:01:02.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-14T15:01:02.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:01:02.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:01:02.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:01:02.596 [DEBUG] [Thread-187400] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:01:07.401 [DEBUG] [Thread-187402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:01:22.463 [DEBUG] [Thread-187403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:01:27.739 [DEBUG] [Thread-187404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:01:32.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:01:32.620 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:01:32.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-14T15:01:34.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 0, 54), 17.18, 31.24, 0.0, 30.72, 16.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:01:34.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:00:54
2026-02-14T15:01:34.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:01:34.968 [DEBUG] [Thread-187405] [transport.py] [_log()] starting thread (client mode): 0xa2ddfe50
2026-02-14T15:01:34.968 [DEBUG] [Thread-187405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:01:34.988 [DEBUG] [Thread-187405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:01:34.988 [INFO] [Thread-187405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:01:34.991 [DEBUG] [Thread-187405] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:01:34.991 [DEBUG] [Thread-187405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:01:34.991 [DEBUG] [Thread-187405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:01:34.991 [DEBUG] [Thread-187405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:01:34.991 [DEBUG] [Thread-187405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:01:34.991 [DEBUG] [Thread-187405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:01:34.991 [DEBUG] [Thread-187405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:01:34.991 [DEBUG] [Thread-187405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:01:34.992 [DEBUG] [Thread-187405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:01:34.992 [DEBUG] [Thread-187405] [transport.py] [_log()] client lang: <none>
2026-02-14T15:01:34.992 [DEBUG] [Thread-187405] [transport.py] [_log()] server lang: <none>
2026-02-14T15:01:34.992 [DEBUG] [Thread-187405] [transport.py] [_log()] kex follows: False
2026-02-14T15:01:34.992 [DEBUG] [Thread-187405] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:01:34.992 [DEBUG] [Thread-187405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:01:34.992 [DEBUG] [Thread-187405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:01:34.992 [DEBUG] [Thread-187405] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:01:34.992 [DEBUG] [Thread-187405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:01:34.992 [DEBUG] [Thread-187405] [transport.py] [_log()] Compression: none
2026-02-14T15:01:34.992 [DEBUG] [Thread-187405] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:01:35.009 [DEBUG] [Thread-187405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:01:35.009 [DEBUG] [Thread-187405] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:01:35.010 [DEBUG] [Thread-187405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:01:35.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:01:35.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:01:35.012 [DEBUG] [Thread-187405] [transport.py] [_log()] userauth is OK
2026-02-14T15:01:35.012 [DEBUG] [Thread-187405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:01:35.012 [DEBUG] [Thread-187405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:01:35.012 [DEBUG] [Thread-187405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:01:35.012 [DEBUG] [Thread-187405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:01:35.033 [INFO] [Thread-187405] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:01:35.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:01:35.658 [DEBUG] [Thread-187405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:01:35.658 [DEBUG] [Thread-187405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:01:35.658 [DEBUG] [Thread-187405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:01:35.699 [DEBUG] [Thread-187405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:01:35.699 [DEBUG] [Thread-187405] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:01:35.702 [DEBUG] [Thread-187405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:01:35.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:01:35.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:01:35.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:01:35.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:01:35.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:01:35.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:01:35.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:01:35.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:01:35.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:01:35.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.542121 -999.00  +16.10  19.89     38   +1.80 1 1 1 1 1   888    0 13.89 4.08 ----- 17.5 19.9 152.6 33.4 22.3 -27.5 21.6 -26.5 22.8 -26.3 23.9 -28.3
2026-02-14T15:01:35.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:01:35.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:01:35.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.542121
2026-02-14T15:01:35.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:01:35.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:01:35.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:01:35.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:01:35.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:01:35.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:00:54', tmtdew=17.18, humidity=31.24, cloud=0.0, wind=30.72, temperature=16.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:00:39.254', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:01:35.730 [DEBUG] [Thread-187405] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:01:35.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-14T15:01:35.828 [DEBUG] [Thread-187408] [transport.py] [_log()] starting thread (client mode): 0xa2dddb10
2026-02-14T15:01:35.828 [DEBUG] [Thread-187408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:01:35.843 [DEBUG] [Thread-187408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:01:35.843 [INFO] [Thread-187408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:01:35.851 [DEBUG] [Thread-187408] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:01:35.851 [DEBUG] [Thread-187408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:01:35.851 [DEBUG] [Thread-187408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:01:35.851 [DEBUG] [Thread-187408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:01:35.851 [DEBUG] [Thread-187408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:01:35.851 [DEBUG] [Thread-187408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:01:35.852 [DEBUG] [Thread-187408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:01:35.852 [DEBUG] [Thread-187408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:01:35.852 [DEBUG] [Thread-187408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:01:35.852 [DEBUG] [Thread-187408] [transport.py] [_log()] client lang: <none>
2026-02-14T15:01:35.852 [DEBUG] [Thread-187408] [transport.py] [_log()] server lang: <none>
2026-02-14T15:01:35.852 [DEBUG] [Thread-187408] [transport.py] [_log()] kex follows: False
2026-02-14T15:01:35.852 [DEBUG] [Thread-187408] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:01:35.852 [DEBUG] [Thread-187408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:01:35.853 [DEBUG] [Thread-187408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:01:35.853 [DEBUG] [Thread-187408] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:01:35.853 [DEBUG] [Thread-187408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:01:35.853 [DEBUG] [Thread-187408] [transport.py] [_log()] Compression: none
2026-02-14T15:01:35.853 [DEBUG] [Thread-187408] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:01:35.910 [DEBUG] [Thread-187408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:01:35.911 [DEBUG] [Thread-187408] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:01:35.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:01:35.912 [DEBUG] [Thread-187408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:01:35.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:01:35.965 [DEBUG] [Thread-187408] [transport.py] [_log()] userauth is OK
2026-02-14T15:01:35.965 [DEBUG] [Thread-187408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:01:35.965 [DEBUG] [Thread-187408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:01:35.965 [DEBUG] [Thread-187408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:01:35.965 [DEBUG] [Thread-187408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:01:35.980 [INFO] [Thread-187408] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:01:35.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-14T15:01:35.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:01:36.784 [DEBUG] [Thread-187408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:01:36.784 [DEBUG] [Thread-187408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:01:36.832 [DEBUG] [Thread-187408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:01:36.833 [DEBUG] [Thread-187408] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:01:36.842 [DEBUG] [Thread-187408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:01:36.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:01:36.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-14T15:01:36.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-14T15:01:36.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:01:36.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:01:36.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:01:36.878 [DEBUG] [Thread-187408] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:01:37.500 [DEBUG] [Thread-187410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:01:43.234 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:01:43.235 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:01:52.548 [DEBUG] [Thread-187411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:02:06.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:02:06.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:02:06.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-14T15:02:07.584 [DEBUG] [Thread-187412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:02:08.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 1, 29), 17.06, 31.56, 0.0, 30.44, 16.92, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:02:08.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:01:29
2026-02-14T15:02:09.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:02:09.556 [DEBUG] [Thread-187413] [transport.py] [_log()] starting thread (client mode): 0xa2d3d4e0
2026-02-14T15:02:09.556 [DEBUG] [Thread-187413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:02:09.577 [DEBUG] [Thread-187413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:02:09.577 [INFO] [Thread-187413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:02:09.578 [DEBUG] [Thread-187413] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:02:09.578 [DEBUG] [Thread-187413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:02:09.579 [DEBUG] [Thread-187413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:02:09.579 [DEBUG] [Thread-187413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:02:09.579 [DEBUG] [Thread-187413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:02:09.579 [DEBUG] [Thread-187413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:02:09.579 [DEBUG] [Thread-187413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:02:09.579 [DEBUG] [Thread-187413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:02:09.579 [DEBUG] [Thread-187413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:02:09.579 [DEBUG] [Thread-187413] [transport.py] [_log()] client lang: <none>
2026-02-14T15:02:09.579 [DEBUG] [Thread-187413] [transport.py] [_log()] server lang: <none>
2026-02-14T15:02:09.579 [DEBUG] [Thread-187413] [transport.py] [_log()] kex follows: False
2026-02-14T15:02:09.579 [DEBUG] [Thread-187413] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:02:09.579 [DEBUG] [Thread-187413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:02:09.579 [DEBUG] [Thread-187413] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:02:09.579 [DEBUG] [Thread-187413] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:02:09.579 [DEBUG] [Thread-187413] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:02:09.579 [DEBUG] [Thread-187413] [transport.py] [_log()] Compression: none
2026-02-14T15:02:09.579 [DEBUG] [Thread-187413] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:02:09.596 [DEBUG] [Thread-187413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:02:09.597 [DEBUG] [Thread-187413] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:02:09.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:02:09.598 [DEBUG] [Thread-187413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:02:09.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:02:09.600 [DEBUG] [Thread-187413] [transport.py] [_log()] userauth is OK
2026-02-14T15:02:09.600 [DEBUG] [Thread-187413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:02:09.600 [DEBUG] [Thread-187413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:02:09.600 [DEBUG] [Thread-187413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:02:09.600 [DEBUG] [Thread-187413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:02:09.625 [INFO] [Thread-187413] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:02:09.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:02:10.213 [DEBUG] [Thread-187413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:02:10.213 [DEBUG] [Thread-187413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:02:10.213 [DEBUG] [Thread-187413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:02:10.255 [DEBUG] [Thread-187413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:02:10.255 [DEBUG] [Thread-187413] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:02:10.259 [DEBUG] [Thread-187413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:02:10.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:02:10.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:02:10.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:02:10.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:02:10.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:02:10.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:02:10.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:02:10.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:02:10.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:02:10.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.542469 -999.00  +16.60  23.05     38   +2.40 1 1 1 1 1   888    0 14.13 7.83 ----- 24.0 23.1 131.2 27.8 22.4 -26.4 21.6 -25.7 22.9 -24.9 23.9 -27.5
2026-02-14T15:02:10.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:02:10.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:02:10.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.542469
2026-02-14T15:02:10.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:02:10.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:02:10.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:02:10.286 [DEBUG] [Thread-187413] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:02:10.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:02:10.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:02:10.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:01:29', tmtdew=17.06, humidity=31.56, cloud=0.0, wind=30.44, temperature=16.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:01:09.322', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:02:10.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T15:02:10.382 [DEBUG] [Thread-187416] [transport.py] [_log()] starting thread (client mode): 0xa2d57c40
2026-02-14T15:02:10.382 [DEBUG] [Thread-187416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:02:10.397 [DEBUG] [Thread-187416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:02:10.397 [INFO] [Thread-187416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:02:10.404 [DEBUG] [Thread-187416] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:02:10.405 [DEBUG] [Thread-187416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:02:10.405 [DEBUG] [Thread-187416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:02:10.405 [DEBUG] [Thread-187416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:02:10.405 [DEBUG] [Thread-187416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:02:10.405 [DEBUG] [Thread-187416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:02:10.406 [DEBUG] [Thread-187416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:02:10.406 [DEBUG] [Thread-187416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:02:10.406 [DEBUG] [Thread-187416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:02:10.406 [DEBUG] [Thread-187416] [transport.py] [_log()] client lang: <none>
2026-02-14T15:02:10.406 [DEBUG] [Thread-187416] [transport.py] [_log()] server lang: <none>
2026-02-14T15:02:10.406 [DEBUG] [Thread-187416] [transport.py] [_log()] kex follows: False
2026-02-14T15:02:10.406 [DEBUG] [Thread-187416] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:02:10.406 [DEBUG] [Thread-187416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:02:10.406 [DEBUG] [Thread-187416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:02:10.406 [DEBUG] [Thread-187416] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:02:10.406 [DEBUG] [Thread-187416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:02:10.406 [DEBUG] [Thread-187416] [transport.py] [_log()] Compression: none
2026-02-14T15:02:10.406 [DEBUG] [Thread-187416] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:02:10.462 [DEBUG] [Thread-187416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:02:10.462 [DEBUG] [Thread-187416] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:02:10.463 [DEBUG] [Thread-187416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:02:10.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:02:10.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:02:10.518 [DEBUG] [Thread-187416] [transport.py] [_log()] userauth is OK
2026-02-14T15:02:10.518 [DEBUG] [Thread-187416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:02:10.518 [DEBUG] [Thread-187416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:02:10.518 [DEBUG] [Thread-187416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:02:10.519 [DEBUG] [Thread-187416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:02:10.538 [INFO] [Thread-187416] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:02:10.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-14T15:02:10.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:02:11.371 [DEBUG] [Thread-187416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:02:11.371 [DEBUG] [Thread-187416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:02:11.419 [DEBUG] [Thread-187416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:02:11.420 [DEBUG] [Thread-187416] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:02:11.429 [DEBUG] [Thread-187416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:02:11.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:02:11.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-14T15:02:11.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:02:11.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:02:11.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:02:11.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:02:11.466 [DEBUG] [Thread-187416] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:02:22.625 [DEBUG] [Thread-187418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:02:27.775 [DEBUG] [Thread-187419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:02:37.678 [DEBUG] [Thread-187420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:02:41.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:02:41.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:02:41.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-14T15:02:43.373 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:02:43.374 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:02:43.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 2, 4), 17.09, 31.49, 0.0, 29.41, 16.97, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:02:43.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:02:04
2026-02-14T15:02:44.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:02:44.552 [DEBUG] [Thread-187421] [transport.py] [_log()] starting thread (client mode): 0xa2dc4490
2026-02-14T15:02:44.552 [DEBUG] [Thread-187421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:02:44.574 [DEBUG] [Thread-187421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:02:44.574 [INFO] [Thread-187421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:02:44.577 [DEBUG] [Thread-187421] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:02:44.578 [DEBUG] [Thread-187421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:02:44.578 [DEBUG] [Thread-187421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:02:44.578 [DEBUG] [Thread-187421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:02:44.578 [DEBUG] [Thread-187421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:02:44.578 [DEBUG] [Thread-187421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:02:44.578 [DEBUG] [Thread-187421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:02:44.578 [DEBUG] [Thread-187421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:02:44.578 [DEBUG] [Thread-187421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:02:44.578 [DEBUG] [Thread-187421] [transport.py] [_log()] client lang: <none>
2026-02-14T15:02:44.578 [DEBUG] [Thread-187421] [transport.py] [_log()] server lang: <none>
2026-02-14T15:02:44.579 [DEBUG] [Thread-187421] [transport.py] [_log()] kex follows: False
2026-02-14T15:02:44.579 [DEBUG] [Thread-187421] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:02:44.579 [DEBUG] [Thread-187421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:02:44.579 [DEBUG] [Thread-187421] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:02:44.579 [DEBUG] [Thread-187421] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:02:44.579 [DEBUG] [Thread-187421] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:02:44.579 [DEBUG] [Thread-187421] [transport.py] [_log()] Compression: none
2026-02-14T15:02:44.579 [DEBUG] [Thread-187421] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:02:44.599 [DEBUG] [Thread-187421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:02:44.599 [DEBUG] [Thread-187421] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:02:44.600 [DEBUG] [Thread-187421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:02:44.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:02:44.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:02:44.602 [DEBUG] [Thread-187421] [transport.py] [_log()] userauth is OK
2026-02-14T15:02:44.603 [DEBUG] [Thread-187421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:02:44.603 [DEBUG] [Thread-187421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:02:44.603 [DEBUG] [Thread-187421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:02:44.603 [DEBUG] [Thread-187421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:02:44.627 [INFO] [Thread-187421] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:02:44.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:02:45.271 [DEBUG] [Thread-187421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:02:45.271 [DEBUG] [Thread-187421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:02:45.271 [DEBUG] [Thread-187421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:02:45.312 [DEBUG] [Thread-187421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:02:45.312 [DEBUG] [Thread-187421] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:02:45.315 [DEBUG] [Thread-187421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:02:45.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:02:45.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:02:45.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:02:45.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:02:45.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:02:45.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:02:45.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:02:45.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:02:45.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:02:45.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.543163 -999.00  +16.60  20.27     37   +2.10 1 1 1 1 1   888    0 14.28 12.57 ----- 26.1 20.3 164.0 31.5 22.5 -27.2 21.7 -27.7 22.9 -26.3 24.0 -28.6
2026-02-14T15:02:45.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:02:45.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:02:45.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.543163
2026-02-14T15:02:45.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:02:45.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:02:45.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:02:45.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:02:45.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:02:45.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:02:04', tmtdew=17.09, humidity=31.49, cloud=0.0, wind=29.41, temperature=16.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:02:09.283', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:02:45.340 [DEBUG] [Thread-187421] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:02:45.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-14T15:02:45.437 [DEBUG] [Thread-187424] [transport.py] [_log()] starting thread (client mode): 0xa2d54850
2026-02-14T15:02:45.438 [DEBUG] [Thread-187424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:02:45.452 [DEBUG] [Thread-187424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:02:45.453 [INFO] [Thread-187424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:02:45.460 [DEBUG] [Thread-187424] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:02:45.461 [DEBUG] [Thread-187424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:02:45.461 [DEBUG] [Thread-187424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:02:45.461 [DEBUG] [Thread-187424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:02:45.461 [DEBUG] [Thread-187424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:02:45.461 [DEBUG] [Thread-187424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:02:45.461 [DEBUG] [Thread-187424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:02:45.461 [DEBUG] [Thread-187424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:02:45.461 [DEBUG] [Thread-187424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:02:45.462 [DEBUG] [Thread-187424] [transport.py] [_log()] client lang: <none>
2026-02-14T15:02:45.462 [DEBUG] [Thread-187424] [transport.py] [_log()] server lang: <none>
2026-02-14T15:02:45.462 [DEBUG] [Thread-187424] [transport.py] [_log()] kex follows: False
2026-02-14T15:02:45.462 [DEBUG] [Thread-187424] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:02:45.462 [DEBUG] [Thread-187424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:02:45.462 [DEBUG] [Thread-187424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:02:45.463 [DEBUG] [Thread-187424] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:02:45.463 [DEBUG] [Thread-187424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:02:45.463 [DEBUG] [Thread-187424] [transport.py] [_log()] Compression: none
2026-02-14T15:02:45.463 [DEBUG] [Thread-187424] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:02:45.519 [DEBUG] [Thread-187424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:02:45.519 [DEBUG] [Thread-187424] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:02:45.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:02:45.520 [DEBUG] [Thread-187424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:02:45.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:02:45.574 [DEBUG] [Thread-187424] [transport.py] [_log()] userauth is OK
2026-02-14T15:02:45.575 [DEBUG] [Thread-187424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:02:45.575 [DEBUG] [Thread-187424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:02:45.575 [DEBUG] [Thread-187424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:02:45.575 [DEBUG] [Thread-187424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:02:45.594 [INFO] [Thread-187424] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:02:45.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-14T15:02:45.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:02:46.452 [DEBUG] [Thread-187424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:02:46.452 [DEBUG] [Thread-187424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:02:46.500 [DEBUG] [Thread-187424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:02:46.500 [DEBUG] [Thread-187424] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:02:46.510 [DEBUG] [Thread-187424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:02:46.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:02:46.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-14T15:02:46.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:02:46.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:02:46.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:02:46.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:02:46.546 [DEBUG] [Thread-187424] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:02:52.713 [DEBUG] [Thread-187426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:03:07.770 [DEBUG] [Thread-187427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:03:16.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:03:16.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:03:16.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-14T15:03:18.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 2, 40), 18.81, 27.99, 0.0, 32.67, 18.31, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:03:18.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:02:40
2026-02-14T15:03:18.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:03:19.116 [DEBUG] [Thread-187428] [transport.py] [_log()] starting thread (client mode): 0xa2deab90
2026-02-14T15:03:19.116 [DEBUG] [Thread-187428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:03:19.138 [DEBUG] [Thread-187428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:03:19.138 [INFO] [Thread-187428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:03:19.139 [DEBUG] [Thread-187428] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:03:19.139 [DEBUG] [Thread-187428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:03:19.139 [DEBUG] [Thread-187428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:03:19.139 [DEBUG] [Thread-187428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:03:19.139 [DEBUG] [Thread-187428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:03:19.139 [DEBUG] [Thread-187428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:03:19.139 [DEBUG] [Thread-187428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:03:19.140 [DEBUG] [Thread-187428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:03:19.140 [DEBUG] [Thread-187428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:03:19.140 [DEBUG] [Thread-187428] [transport.py] [_log()] client lang: <none>
2026-02-14T15:03:19.140 [DEBUG] [Thread-187428] [transport.py] [_log()] server lang: <none>
2026-02-14T15:03:19.140 [DEBUG] [Thread-187428] [transport.py] [_log()] kex follows: False
2026-02-14T15:03:19.140 [DEBUG] [Thread-187428] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:03:19.140 [DEBUG] [Thread-187428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:03:19.140 [DEBUG] [Thread-187428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:03:19.140 [DEBUG] [Thread-187428] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:03:19.140 [DEBUG] [Thread-187428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:03:19.140 [DEBUG] [Thread-187428] [transport.py] [_log()] Compression: none
2026-02-14T15:03:19.140 [DEBUG] [Thread-187428] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:03:19.157 [DEBUG] [Thread-187428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:03:19.157 [DEBUG] [Thread-187428] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:03:19.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:03:19.158 [DEBUG] [Thread-187428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:03:19.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:03:19.160 [DEBUG] [Thread-187428] [transport.py] [_log()] userauth is OK
2026-02-14T15:03:19.161 [DEBUG] [Thread-187428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:03:19.161 [DEBUG] [Thread-187428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:03:19.161 [DEBUG] [Thread-187428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:03:19.161 [DEBUG] [Thread-187428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:03:19.185 [INFO] [Thread-187428] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:03:19.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:03:19.845 [DEBUG] [Thread-187428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:03:19.845 [DEBUG] [Thread-187428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:03:19.846 [DEBUG] [Thread-187428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:03:19.886 [DEBUG] [Thread-187428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:03:19.887 [DEBUG] [Thread-187428] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:03:19.890 [DEBUG] [Thread-187428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:03:19.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:03:19.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:03:19.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:03:19.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:03:19.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:03:19.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:03:19.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:03:19.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:03:19.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:03:19.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.543510 -999.00  +16.50  23.03     37   +1.90 1 1 1 1 1   888    0 14.48 21.72 ----- 17.1 23.0 169.4 31.3 22.6 -28.3 21.6 -27.2 23.0 -26.4 24.1 -28.2
2026-02-14T15:03:19.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:03:19.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:03:19.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.543510
2026-02-14T15:03:19.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:03:19.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:03:19.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:03:19.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:03:19.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:03:19.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:02:40', tmtdew=18.81, humidity=27.99, cloud=0.0, wind=32.67, temperature=18.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:02:39.264', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:03:19.916 [DEBUG] [Thread-187428] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:03:19.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-14T15:03:20.010 [DEBUG] [Thread-187431] [transport.py] [_log()] starting thread (client mode): 0xa2dea500
2026-02-14T15:03:20.010 [DEBUG] [Thread-187431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:03:20.024 [DEBUG] [Thread-187431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:03:20.024 [INFO] [Thread-187431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:03:20.032 [DEBUG] [Thread-187431] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:03:20.032 [DEBUG] [Thread-187431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:03:20.032 [DEBUG] [Thread-187431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:03:20.032 [DEBUG] [Thread-187431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:03:20.032 [DEBUG] [Thread-187431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:03:20.032 [DEBUG] [Thread-187431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:03:20.032 [DEBUG] [Thread-187431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:03:20.032 [DEBUG] [Thread-187431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:03:20.032 [DEBUG] [Thread-187431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:03:20.032 [DEBUG] [Thread-187431] [transport.py] [_log()] client lang: <none>
2026-02-14T15:03:20.032 [DEBUG] [Thread-187431] [transport.py] [_log()] server lang: <none>
2026-02-14T15:03:20.032 [DEBUG] [Thread-187431] [transport.py] [_log()] kex follows: False
2026-02-14T15:03:20.032 [DEBUG] [Thread-187431] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:03:20.032 [DEBUG] [Thread-187431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:03:20.032 [DEBUG] [Thread-187431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:03:20.032 [DEBUG] [Thread-187431] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:03:20.032 [DEBUG] [Thread-187431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:03:20.033 [DEBUG] [Thread-187431] [transport.py] [_log()] Compression: none
2026-02-14T15:03:20.033 [DEBUG] [Thread-187431] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:03:20.091 [DEBUG] [Thread-187431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:03:20.092 [DEBUG] [Thread-187431] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:03:20.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:03:20.092 [DEBUG] [Thread-187431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:03:20.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:03:20.147 [DEBUG] [Thread-187431] [transport.py] [_log()] userauth is OK
2026-02-14T15:03:20.147 [DEBUG] [Thread-187431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:03:20.147 [DEBUG] [Thread-187431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:03:20.147 [DEBUG] [Thread-187431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:03:20.147 [DEBUG] [Thread-187431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:03:20.172 [INFO] [Thread-187431] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:03:20.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-14T15:03:20.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:03:20.974 [DEBUG] [Thread-187431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:03:20.974 [DEBUG] [Thread-187431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:03:21.021 [DEBUG] [Thread-187431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:03:21.021 [DEBUG] [Thread-187431] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:03:21.031 [DEBUG] [Thread-187431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:03:21.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:03:21.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-14T15:03:21.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-14T15:03:21.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:03:21.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:03:21.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:03:21.068 [DEBUG] [Thread-187431] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:03:22.808 [DEBUG] [Thread-187433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:03:27.803 [DEBUG] [Thread-187434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:03:37.865 [DEBUG] [Thread-187435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:03:43.517 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:03:43.519 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:03:51.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:03:51.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:03:51.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-14T15:03:52.900 [DEBUG] [Thread-187436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:03:53.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 3, 16), 17.24, 30.99, 0.0, 29.47, 16.64, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:03:53.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:03:16
2026-02-14T15:03:53.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:03:54.045 [DEBUG] [Thread-187437] [transport.py] [_log()] starting thread (client mode): 0xa2ddc0d0
2026-02-14T15:03:54.045 [DEBUG] [Thread-187437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:03:54.065 [DEBUG] [Thread-187437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:03:54.065 [INFO] [Thread-187437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:03:54.068 [DEBUG] [Thread-187437] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:03:54.069 [DEBUG] [Thread-187437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:03:54.069 [DEBUG] [Thread-187437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:03:54.069 [DEBUG] [Thread-187437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:03:54.069 [DEBUG] [Thread-187437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:03:54.069 [DEBUG] [Thread-187437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:03:54.069 [DEBUG] [Thread-187437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:03:54.069 [DEBUG] [Thread-187437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:03:54.069 [DEBUG] [Thread-187437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:03:54.069 [DEBUG] [Thread-187437] [transport.py] [_log()] client lang: <none>
2026-02-14T15:03:54.069 [DEBUG] [Thread-187437] [transport.py] [_log()] server lang: <none>
2026-02-14T15:03:54.069 [DEBUG] [Thread-187437] [transport.py] [_log()] kex follows: False
2026-02-14T15:03:54.069 [DEBUG] [Thread-187437] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:03:54.069 [DEBUG] [Thread-187437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:03:54.070 [DEBUG] [Thread-187437] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:03:54.070 [DEBUG] [Thread-187437] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:03:54.070 [DEBUG] [Thread-187437] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:03:54.070 [DEBUG] [Thread-187437] [transport.py] [_log()] Compression: none
2026-02-14T15:03:54.070 [DEBUG] [Thread-187437] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:03:54.088 [DEBUG] [Thread-187437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:03:54.089 [DEBUG] [Thread-187437] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:03:54.090 [DEBUG] [Thread-187437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:03:54.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:03:54.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:03:54.092 [DEBUG] [Thread-187437] [transport.py] [_log()] userauth is OK
2026-02-14T15:03:54.092 [DEBUG] [Thread-187437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:03:54.092 [DEBUG] [Thread-187437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:03:54.092 [DEBUG] [Thread-187437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:03:54.092 [DEBUG] [Thread-187437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:03:54.116 [INFO] [Thread-187437] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:03:54.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:03:54.727 [DEBUG] [Thread-187437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:03:54.727 [DEBUG] [Thread-187437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:03:54.728 [DEBUG] [Thread-187437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:03:54.768 [DEBUG] [Thread-187437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:03:54.769 [DEBUG] [Thread-187437] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:03:54.772 [DEBUG] [Thread-187437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:03:54.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:03:54.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:03:54.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:03:54.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:03:54.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:03:54.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:03:54.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:03:54.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:03:54.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:03:54.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.544205 -999.00  +16.40  30.02     39   +2.40 1 1 2 1 1   888    0 14.76 30.71 ----- 26.7 30.0 139.2 33.8 22.6 -26.9 21.8 -27.0 23.1 -25.8 24.1 -27.8
2026-02-14T15:03:54.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:03:54.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:03:54.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.544205
2026-02-14T15:03:54.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:03:54.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:03:54.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:03:54.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:03:54.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:03:54.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:03:16', tmtdew=17.24, humidity=30.99, cloud=0.0, wind=29.47, temperature=16.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:03:39.312', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:03:54.797 [DEBUG] [Thread-187437] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:03:54.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-14T15:03:54.890 [DEBUG] [Thread-187440] [transport.py] [_log()] starting thread (client mode): 0xa2d3c880
2026-02-14T15:03:54.890 [DEBUG] [Thread-187440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:03:54.905 [DEBUG] [Thread-187440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:03:54.905 [INFO] [Thread-187440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:03:54.912 [DEBUG] [Thread-187440] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:03:54.913 [DEBUG] [Thread-187440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:03:54.913 [DEBUG] [Thread-187440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:03:54.913 [DEBUG] [Thread-187440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:03:54.913 [DEBUG] [Thread-187440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:03:54.913 [DEBUG] [Thread-187440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:03:54.913 [DEBUG] [Thread-187440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:03:54.914 [DEBUG] [Thread-187440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:03:54.914 [DEBUG] [Thread-187440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:03:54.914 [DEBUG] [Thread-187440] [transport.py] [_log()] client lang: <none>
2026-02-14T15:03:54.914 [DEBUG] [Thread-187440] [transport.py] [_log()] server lang: <none>
2026-02-14T15:03:54.914 [DEBUG] [Thread-187440] [transport.py] [_log()] kex follows: False
2026-02-14T15:03:54.914 [DEBUG] [Thread-187440] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:03:54.914 [DEBUG] [Thread-187440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:03:54.914 [DEBUG] [Thread-187440] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:03:54.915 [DEBUG] [Thread-187440] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:03:54.915 [DEBUG] [Thread-187440] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:03:54.915 [DEBUG] [Thread-187440] [transport.py] [_log()] Compression: none
2026-02-14T15:03:54.915 [DEBUG] [Thread-187440] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:03:54.972 [DEBUG] [Thread-187440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:03:54.973 [DEBUG] [Thread-187440] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:03:54.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:03:54.975 [DEBUG] [Thread-187440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:03:54.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:03:55.031 [DEBUG] [Thread-187440] [transport.py] [_log()] userauth is OK
2026-02-14T15:03:55.032 [DEBUG] [Thread-187440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:03:55.032 [DEBUG] [Thread-187440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:03:55.032 [DEBUG] [Thread-187440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:03:55.032 [DEBUG] [Thread-187440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:03:55.054 [INFO] [Thread-187440] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:03:55.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-14T15:03:55.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:03:55.873 [DEBUG] [Thread-187440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:03:55.874 [DEBUG] [Thread-187440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:03:55.922 [DEBUG] [Thread-187440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:03:55.922 [DEBUG] [Thread-187440] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:03:55.932 [DEBUG] [Thread-187440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:03:55.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:03:55.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:03:55.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:03:55.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:03:55.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:03:55.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:03:55.968 [DEBUG] [Thread-187440] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:04:07.936 [DEBUG] [Thread-187442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:04:22.991 [DEBUG] [Thread-187443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:04:25.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:04:25.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:04:25.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T15:04:27.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 3, 51), 16.84, 32.04, 0.0, 35.02, 17.02, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:04:27.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:03:51
2026-02-14T15:04:27.837 [DEBUG] [Thread-187444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:04:28.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:04:28.352 [DEBUG] [Thread-187445] [transport.py] [_log()] starting thread (client mode): 0xa2d56320
2026-02-14T15:04:28.352 [DEBUG] [Thread-187445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:04:28.371 [DEBUG] [Thread-187445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:04:28.371 [INFO] [Thread-187445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:04:28.374 [DEBUG] [Thread-187445] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:04:28.375 [DEBUG] [Thread-187445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:04:28.375 [DEBUG] [Thread-187445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:04:28.375 [DEBUG] [Thread-187445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:04:28.375 [DEBUG] [Thread-187445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:04:28.375 [DEBUG] [Thread-187445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:04:28.375 [DEBUG] [Thread-187445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:04:28.375 [DEBUG] [Thread-187445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:04:28.375 [DEBUG] [Thread-187445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:04:28.375 [DEBUG] [Thread-187445] [transport.py] [_log()] client lang: <none>
2026-02-14T15:04:28.375 [DEBUG] [Thread-187445] [transport.py] [_log()] server lang: <none>
2026-02-14T15:04:28.375 [DEBUG] [Thread-187445] [transport.py] [_log()] kex follows: False
2026-02-14T15:04:28.375 [DEBUG] [Thread-187445] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:04:28.375 [DEBUG] [Thread-187445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:04:28.375 [DEBUG] [Thread-187445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:04:28.375 [DEBUG] [Thread-187445] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:04:28.375 [DEBUG] [Thread-187445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:04:28.375 [DEBUG] [Thread-187445] [transport.py] [_log()] Compression: none
2026-02-14T15:04:28.375 [DEBUG] [Thread-187445] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:04:28.396 [DEBUG] [Thread-187445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:04:28.397 [DEBUG] [Thread-187445] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:04:28.397 [DEBUG] [Thread-187445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:04:28.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:04:28.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:04:28.399 [DEBUG] [Thread-187445] [transport.py] [_log()] userauth is OK
2026-02-14T15:04:28.400 [DEBUG] [Thread-187445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:04:28.400 [DEBUG] [Thread-187445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:04:28.400 [DEBUG] [Thread-187445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:04:28.400 [DEBUG] [Thread-187445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:04:28.418 [INFO] [Thread-187445] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:04:28.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:04:29.014 [DEBUG] [Thread-187445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:04:29.014 [DEBUG] [Thread-187445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:04:29.015 [DEBUG] [Thread-187445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:04:29.055 [DEBUG] [Thread-187445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:04:29.056 [DEBUG] [Thread-187445] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:04:29.059 [DEBUG] [Thread-187445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:04:29.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:04:29.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:04:29.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:04:29.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:04:29.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:04:29.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:04:29.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:04:29.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:04:29.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:04:29.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.544552 -999.00  +16.40  28.86     38   +2.30 1 1 1 1 1   888    0 14.83 32.92 ----- 35.7 28.9 159.2 35.3 22.6 -27.6 21.9 -26.8 23.1 -25.4 24.1 -27.8
2026-02-14T15:04:29.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:04:29.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:04:29.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.544552
2026-02-14T15:04:29.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:04:29.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:04:29.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:04:29.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:04:29.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:04:29.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:03:51', tmtdew=16.84, humidity=32.04, cloud=0.0, wind=35.02, temperature=17.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:04:09.293', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:04:29.081 [DEBUG] [Thread-187445] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:04:29.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-14T15:04:29.176 [DEBUG] [Thread-187448] [transport.py] [_log()] starting thread (client mode): 0xa2d550c0
2026-02-14T15:04:29.176 [DEBUG] [Thread-187448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:04:29.193 [DEBUG] [Thread-187448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:04:29.193 [INFO] [Thread-187448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:04:29.201 [DEBUG] [Thread-187448] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:04:29.201 [DEBUG] [Thread-187448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:04:29.201 [DEBUG] [Thread-187448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:04:29.201 [DEBUG] [Thread-187448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:04:29.202 [DEBUG] [Thread-187448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:04:29.202 [DEBUG] [Thread-187448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:04:29.202 [DEBUG] [Thread-187448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:04:29.202 [DEBUG] [Thread-187448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:04:29.202 [DEBUG] [Thread-187448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:04:29.202 [DEBUG] [Thread-187448] [transport.py] [_log()] client lang: <none>
2026-02-14T15:04:29.202 [DEBUG] [Thread-187448] [transport.py] [_log()] server lang: <none>
2026-02-14T15:04:29.202 [DEBUG] [Thread-187448] [transport.py] [_log()] kex follows: False
2026-02-14T15:04:29.203 [DEBUG] [Thread-187448] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:04:29.203 [DEBUG] [Thread-187448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:04:29.203 [DEBUG] [Thread-187448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:04:29.203 [DEBUG] [Thread-187448] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:04:29.203 [DEBUG] [Thread-187448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:04:29.203 [DEBUG] [Thread-187448] [transport.py] [_log()] Compression: none
2026-02-14T15:04:29.203 [DEBUG] [Thread-187448] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:04:29.269 [DEBUG] [Thread-187448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:04:29.270 [DEBUG] [Thread-187448] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:04:29.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:04:29.271 [DEBUG] [Thread-187448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:04:29.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:04:29.327 [DEBUG] [Thread-187448] [transport.py] [_log()] userauth is OK
2026-02-14T15:04:29.327 [DEBUG] [Thread-187448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:04:29.327 [DEBUG] [Thread-187448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:04:29.327 [DEBUG] [Thread-187448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:04:29.327 [DEBUG] [Thread-187448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:04:29.346 [INFO] [Thread-187448] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:04:29.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-14T15:04:29.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:04:30.234 [DEBUG] [Thread-187448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:04:30.234 [DEBUG] [Thread-187448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:04:30.283 [DEBUG] [Thread-187448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:04:30.283 [DEBUG] [Thread-187448] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:04:30.293 [DEBUG] [Thread-187448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:04:30.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:04:30.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-14T15:04:30.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:04:30.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:04:30.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:04:30.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:04:30.329 [DEBUG] [Thread-187448] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:04:38.027 [DEBUG] [Thread-187450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:04:43.662 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:04:43.663 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:04:53.074 [DEBUG] [Thread-187451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:05:00.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:05:00.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:05:00.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-14T15:05:02.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 4, 29), 16.75, 32.27, 0.0, 33.37, 17.09, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:05:02.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:04:29
2026-02-14T15:05:02.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:05:02.767 [DEBUG] [Thread-187452] [transport.py] [_log()] starting thread (client mode): 0xa2d554b0
2026-02-14T15:05:02.768 [DEBUG] [Thread-187452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:05:02.783 [DEBUG] [Thread-187452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:05:02.783 [INFO] [Thread-187452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:05:02.785 [DEBUG] [Thread-187452] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:05:02.785 [DEBUG] [Thread-187452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:05:02.785 [DEBUG] [Thread-187452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:05:02.785 [DEBUG] [Thread-187452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:05:02.785 [DEBUG] [Thread-187452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:05:02.785 [DEBUG] [Thread-187452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:05:02.785 [DEBUG] [Thread-187452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:05:02.785 [DEBUG] [Thread-187452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:05:02.785 [DEBUG] [Thread-187452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:05:02.785 [DEBUG] [Thread-187452] [transport.py] [_log()] client lang: <none>
2026-02-14T15:05:02.785 [DEBUG] [Thread-187452] [transport.py] [_log()] server lang: <none>
2026-02-14T15:05:02.785 [DEBUG] [Thread-187452] [transport.py] [_log()] kex follows: False
2026-02-14T15:05:02.785 [DEBUG] [Thread-187452] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:05:02.785 [DEBUG] [Thread-187452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:05:02.785 [DEBUG] [Thread-187452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:05:02.786 [DEBUG] [Thread-187452] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:05:02.786 [DEBUG] [Thread-187452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:05:02.786 [DEBUG] [Thread-187452] [transport.py] [_log()] Compression: none
2026-02-14T15:05:02.786 [DEBUG] [Thread-187452] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:05:02.794 [DEBUG] [Thread-187452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:05:02.794 [DEBUG] [Thread-187452] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:05:02.795 [DEBUG] [Thread-187452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:05:02.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:05:02.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:05:02.796 [DEBUG] [Thread-187452] [transport.py] [_log()] userauth is OK
2026-02-14T15:05:02.797 [DEBUG] [Thread-187452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:05:02.797 [DEBUG] [Thread-187452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:05:02.797 [DEBUG] [Thread-187452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:05:02.797 [DEBUG] [Thread-187452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:05:02.826 [INFO] [Thread-187452] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:05:02.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:05:03.538 [DEBUG] [Thread-187452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:05:03.538 [DEBUG] [Thread-187452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:05:03.538 [DEBUG] [Thread-187452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:05:03.579 [DEBUG] [Thread-187452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:05:03.579 [DEBUG] [Thread-187452] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:05:03.582 [DEBUG] [Thread-187452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:05:03.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:05:03.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:05:03.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:05:03.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:05:03.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:05:03.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:05:03.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:05:03.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:05:03.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:05:03.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.544899 -999.00  +15.90  19.59     40   +2.40 1 1 1 1 1   888    0 14.67 29.43 ----- 18.7 19.6 187.0 30.8 22.4 -27.7 21.8 -26.9 23.0 -26.3 23.9 -29.0
2026-02-14T15:05:03.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:05:03.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:05:03.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.544899
2026-02-14T15:05:03.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:05:03.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:05:03.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:05:03.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:05:03.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:05:03.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:04:29', tmtdew=16.75, humidity=32.27, cloud=0.0, wind=33.37, temperature=17.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:04:39.274', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:05:03.629 [DEBUG] [Thread-187452] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:05:03.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-14T15:05:03.735 [DEBUG] [Thread-187455] [transport.py] [_log()] starting thread (client mode): 0xa2d3eef0
2026-02-14T15:05:03.735 [DEBUG] [Thread-187455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:05:03.750 [DEBUG] [Thread-187455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:05:03.750 [INFO] [Thread-187455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:05:03.757 [DEBUG] [Thread-187455] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:05:03.757 [DEBUG] [Thread-187455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:05:03.757 [DEBUG] [Thread-187455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:05:03.757 [DEBUG] [Thread-187455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:05:03.757 [DEBUG] [Thread-187455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:05:03.758 [DEBUG] [Thread-187455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:05:03.758 [DEBUG] [Thread-187455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:05:03.758 [DEBUG] [Thread-187455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:05:03.758 [DEBUG] [Thread-187455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:05:03.758 [DEBUG] [Thread-187455] [transport.py] [_log()] client lang: <none>
2026-02-14T15:05:03.758 [DEBUG] [Thread-187455] [transport.py] [_log()] server lang: <none>
2026-02-14T15:05:03.758 [DEBUG] [Thread-187455] [transport.py] [_log()] kex follows: False
2026-02-14T15:05:03.758 [DEBUG] [Thread-187455] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:05:03.758 [DEBUG] [Thread-187455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:05:03.758 [DEBUG] [Thread-187455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:05:03.758 [DEBUG] [Thread-187455] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:05:03.758 [DEBUG] [Thread-187455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:05:03.758 [DEBUG] [Thread-187455] [transport.py] [_log()] Compression: none
2026-02-14T15:05:03.758 [DEBUG] [Thread-187455] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:05:03.815 [DEBUG] [Thread-187455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:05:03.816 [DEBUG] [Thread-187455] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:05:03.816 [DEBUG] [Thread-187455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:05:03.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:05:03.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:05:03.871 [DEBUG] [Thread-187455] [transport.py] [_log()] userauth is OK
2026-02-14T15:05:03.871 [DEBUG] [Thread-187455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:05:03.872 [DEBUG] [Thread-187455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:05:03.872 [DEBUG] [Thread-187455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:05:03.872 [DEBUG] [Thread-187455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:05:03.894 [INFO] [Thread-187455] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:05:03.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-14T15:05:03.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:05:04.728 [DEBUG] [Thread-187455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:05:04.728 [DEBUG] [Thread-187455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:05:04.776 [DEBUG] [Thread-187455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:05:04.777 [DEBUG] [Thread-187455] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:05:04.786 [DEBUG] [Thread-187455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:05:04.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:05:04.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-14T15:05:04.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-14T15:05:04.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:05:04.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:05:04.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:05:04.823 [DEBUG] [Thread-187455] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:05:08.110 [DEBUG] [Thread-187457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:05:23.162 [DEBUG] [Thread-187458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:05:27.876 [DEBUG] [Thread-187459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:05:34.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:05:34.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:05:34.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T15:05:36.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 5, 4), 16.62, 32.49, 0.0, 30.51, 16.84, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:05:36.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:05:04
2026-02-14T15:05:37.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:05:37.352 [DEBUG] [Thread-187460] [transport.py] [_log()] starting thread (client mode): 0xa2d3ca90
2026-02-14T15:05:37.353 [DEBUG] [Thread-187460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:05:37.367 [DEBUG] [Thread-187460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:05:37.368 [INFO] [Thread-187460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:05:37.371 [DEBUG] [Thread-187460] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:05:37.371 [DEBUG] [Thread-187460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:05:37.371 [DEBUG] [Thread-187460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:05:37.371 [DEBUG] [Thread-187460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:05:37.371 [DEBUG] [Thread-187460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:05:37.371 [DEBUG] [Thread-187460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:05:37.371 [DEBUG] [Thread-187460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:05:37.371 [DEBUG] [Thread-187460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:05:37.371 [DEBUG] [Thread-187460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:05:37.371 [DEBUG] [Thread-187460] [transport.py] [_log()] client lang: <none>
2026-02-14T15:05:37.371 [DEBUG] [Thread-187460] [transport.py] [_log()] server lang: <none>
2026-02-14T15:05:37.371 [DEBUG] [Thread-187460] [transport.py] [_log()] kex follows: False
2026-02-14T15:05:37.371 [DEBUG] [Thread-187460] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:05:37.371 [DEBUG] [Thread-187460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:05:37.372 [DEBUG] [Thread-187460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:05:37.372 [DEBUG] [Thread-187460] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:05:37.372 [DEBUG] [Thread-187460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:05:37.372 [DEBUG] [Thread-187460] [transport.py] [_log()] Compression: none
2026-02-14T15:05:37.372 [DEBUG] [Thread-187460] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:05:37.388 [DEBUG] [Thread-187460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:05:37.389 [DEBUG] [Thread-187460] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:05:37.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:05:37.390 [DEBUG] [Thread-187460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:05:37.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:05:37.393 [DEBUG] [Thread-187460] [transport.py] [_log()] userauth is OK
2026-02-14T15:05:37.393 [DEBUG] [Thread-187460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:05:37.393 [DEBUG] [Thread-187460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:05:37.393 [DEBUG] [Thread-187460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:05:37.393 [DEBUG] [Thread-187460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:05:37.419 [INFO] [Thread-187460] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:05:37.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:05:38.010 [DEBUG] [Thread-187460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:05:38.011 [DEBUG] [Thread-187460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:05:38.011 [DEBUG] [Thread-187460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:05:38.051 [DEBUG] [Thread-187460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:05:38.052 [DEBUG] [Thread-187460] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:05:38.054 [DEBUG] [Thread-187460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:05:38.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:05:38.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:05:38.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:05:38.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:05:38.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:05:38.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:05:38.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:05:38.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:05:38.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:05:38.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.545246 -999.00  +16.20  18.71     39   +2.40 1 1 1 1 1   888    0 14.63 29.20 ----- 23.3 18.7 195.1 31.7 22.4 -28.5 21.7 -28.1 23.2 -26.9 24.1 -27.6
2026-02-14T15:05:38.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:05:38.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:05:38.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.545246
2026-02-14T15:05:38.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:05:38.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:05:38.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:05:38.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:05:38.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:05:38.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:05:04', tmtdew=16.62, humidity=32.49, cloud=0.0, wind=30.51, temperature=16.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:05:09.254', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:05:38.082 [DEBUG] [Thread-187460] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:05:38.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-14T15:05:38.180 [DEBUG] [Thread-187463] [transport.py] [_log()] starting thread (client mode): 0xa2d23130
2026-02-14T15:05:38.180 [DEBUG] [Thread-187463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:05:38.194 [DEBUG] [Thread-187463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:05:38.194 [INFO] [Thread-187463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:05:38.199 [DEBUG] [Thread-187465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:05:38.201 [DEBUG] [Thread-187463] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:05:38.202 [DEBUG] [Thread-187463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:05:38.202 [DEBUG] [Thread-187463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:05:38.202 [DEBUG] [Thread-187463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:05:38.202 [DEBUG] [Thread-187463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:05:38.202 [DEBUG] [Thread-187463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:05:38.202 [DEBUG] [Thread-187463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:05:38.202 [DEBUG] [Thread-187463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:05:38.202 [DEBUG] [Thread-187463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:05:38.203 [DEBUG] [Thread-187463] [transport.py] [_log()] client lang: <none>
2026-02-14T15:05:38.203 [DEBUG] [Thread-187463] [transport.py] [_log()] server lang: <none>
2026-02-14T15:05:38.203 [DEBUG] [Thread-187463] [transport.py] [_log()] kex follows: False
2026-02-14T15:05:38.203 [DEBUG] [Thread-187463] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:05:38.203 [DEBUG] [Thread-187463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:05:38.203 [DEBUG] [Thread-187463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:05:38.203 [DEBUG] [Thread-187463] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:05:38.203 [DEBUG] [Thread-187463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:05:38.204 [DEBUG] [Thread-187463] [transport.py] [_log()] Compression: none
2026-02-14T15:05:38.204 [DEBUG] [Thread-187463] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:05:38.260 [DEBUG] [Thread-187463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:05:38.260 [DEBUG] [Thread-187463] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:05:38.261 [DEBUG] [Thread-187463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:05:38.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:05:38.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:05:38.316 [DEBUG] [Thread-187463] [transport.py] [_log()] userauth is OK
2026-02-14T15:05:38.316 [DEBUG] [Thread-187463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:05:38.317 [DEBUG] [Thread-187463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:05:38.317 [DEBUG] [Thread-187463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:05:38.317 [DEBUG] [Thread-187463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:05:38.335 [INFO] [Thread-187463] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:05:38.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T15:05:38.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:05:39.119 [DEBUG] [Thread-187463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:05:39.119 [DEBUG] [Thread-187463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:05:39.167 [DEBUG] [Thread-187463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:05:39.168 [DEBUG] [Thread-187463] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:05:39.177 [DEBUG] [Thread-187463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:05:39.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:05:39.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-14T15:05:39.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:05:39.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:05:39.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:05:39.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:05:39.214 [DEBUG] [Thread-187463] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:05:43.804 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:05:43.805 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:05:53.254 [DEBUG] [Thread-187466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:06:08.292 [DEBUG] [Thread-187467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:06:09.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:06:09.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:06:09.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-14T15:06:11.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 5, 39), 17.3, 31.01, 0.0, 26.75, 17.52, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:06:11.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:05:39
2026-02-14T15:06:11.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:06:11.963 [DEBUG] [Thread-187468] [transport.py] [_log()] starting thread (client mode): 0xa2de9a20
2026-02-14T15:06:11.963 [DEBUG] [Thread-187468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:06:11.983 [DEBUG] [Thread-187468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:06:11.983 [INFO] [Thread-187468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:06:11.986 [DEBUG] [Thread-187468] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:06:11.987 [DEBUG] [Thread-187468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:06:11.987 [DEBUG] [Thread-187468] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:06:11.987 [DEBUG] [Thread-187468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:06:11.987 [DEBUG] [Thread-187468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:06:11.987 [DEBUG] [Thread-187468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:06:11.987 [DEBUG] [Thread-187468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:06:11.987 [DEBUG] [Thread-187468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:06:11.987 [DEBUG] [Thread-187468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:06:11.987 [DEBUG] [Thread-187468] [transport.py] [_log()] client lang: <none>
2026-02-14T15:06:11.987 [DEBUG] [Thread-187468] [transport.py] [_log()] server lang: <none>
2026-02-14T15:06:11.987 [DEBUG] [Thread-187468] [transport.py] [_log()] kex follows: False
2026-02-14T15:06:11.987 [DEBUG] [Thread-187468] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:06:11.987 [DEBUG] [Thread-187468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:06:11.987 [DEBUG] [Thread-187468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:06:11.987 [DEBUG] [Thread-187468] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:06:11.987 [DEBUG] [Thread-187468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:06:11.987 [DEBUG] [Thread-187468] [transport.py] [_log()] Compression: none
2026-02-14T15:06:11.987 [DEBUG] [Thread-187468] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:06:12.007 [DEBUG] [Thread-187468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:06:12.008 [DEBUG] [Thread-187468] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:06:12.008 [DEBUG] [Thread-187468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:06:12.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:06:12.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:06:12.011 [DEBUG] [Thread-187468] [transport.py] [_log()] userauth is OK
2026-02-14T15:06:12.011 [DEBUG] [Thread-187468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:06:12.011 [DEBUG] [Thread-187468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:06:12.011 [DEBUG] [Thread-187468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:06:12.011 [DEBUG] [Thread-187468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:06:12.035 [INFO] [Thread-187468] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:06:12.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:06:12.666 [DEBUG] [Thread-187468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:06:12.666 [DEBUG] [Thread-187468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:06:12.666 [DEBUG] [Thread-187468] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:06:12.706 [DEBUG] [Thread-187468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:06:12.707 [DEBUG] [Thread-187468] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:06:12.710 [DEBUG] [Thread-187468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:06:12.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:06:12.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:06:12.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:06:12.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:06:12.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:06:12.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:06:12.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:06:12.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:06:12.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:06:12.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.545594 -999.00  +16.30  30.49     39   +2.30 1 1 2 1 1   888    0 14.74 27.03 ----- 26.3 30.5 184.2 36.4 22.4 -28.4 21.4 -29.7 23.0 -26.4 23.9 -28.6
2026-02-14T15:06:12.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:06:12.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:06:12.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.545594
2026-02-14T15:06:12.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:06:12.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:06:12.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:06:12.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:06:12.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:06:12.735 [DEBUG] [Thread-187468] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:06:12.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:05:39', tmtdew=17.3, humidity=31.01, cloud=0.0, wind=26.75, temperature=17.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:05:39.322', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:06:12.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-14T15:06:12.832 [DEBUG] [Thread-187471] [transport.py] [_log()] starting thread (client mode): 0xa2dc4100
2026-02-14T15:06:12.832 [DEBUG] [Thread-187471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:06:12.847 [DEBUG] [Thread-187471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:06:12.847 [INFO] [Thread-187471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:06:12.855 [DEBUG] [Thread-187471] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:06:12.855 [DEBUG] [Thread-187471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:06:12.855 [DEBUG] [Thread-187471] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:06:12.855 [DEBUG] [Thread-187471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:06:12.855 [DEBUG] [Thread-187471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:06:12.855 [DEBUG] [Thread-187471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:06:12.855 [DEBUG] [Thread-187471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:06:12.855 [DEBUG] [Thread-187471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:06:12.855 [DEBUG] [Thread-187471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:06:12.855 [DEBUG] [Thread-187471] [transport.py] [_log()] client lang: <none>
2026-02-14T15:06:12.855 [DEBUG] [Thread-187471] [transport.py] [_log()] server lang: <none>
2026-02-14T15:06:12.855 [DEBUG] [Thread-187471] [transport.py] [_log()] kex follows: False
2026-02-14T15:06:12.855 [DEBUG] [Thread-187471] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:06:12.855 [DEBUG] [Thread-187471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:06:12.855 [DEBUG] [Thread-187471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:06:12.855 [DEBUG] [Thread-187471] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:06:12.855 [DEBUG] [Thread-187471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:06:12.855 [DEBUG] [Thread-187471] [transport.py] [_log()] Compression: none
2026-02-14T15:06:12.855 [DEBUG] [Thread-187471] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:06:12.913 [DEBUG] [Thread-187471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:06:12.914 [DEBUG] [Thread-187471] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:06:12.914 [DEBUG] [Thread-187471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:06:12.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:06:12.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:06:12.972 [DEBUG] [Thread-187471] [transport.py] [_log()] userauth is OK
2026-02-14T15:06:12.972 [DEBUG] [Thread-187471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:06:12.972 [DEBUG] [Thread-187471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:06:12.972 [DEBUG] [Thread-187471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:06:12.972 [DEBUG] [Thread-187471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:06:12.994 [INFO] [Thread-187471] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:06:12.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-14T15:06:12.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:06:13.869 [DEBUG] [Thread-187471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:06:13.869 [DEBUG] [Thread-187471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:06:13.920 [DEBUG] [Thread-187471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:06:13.920 [DEBUG] [Thread-187471] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:06:13.931 [DEBUG] [Thread-187471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:06:13.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:06:13.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:06:13.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-14T15:06:13.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:06:13.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:06:13.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:06:13.976 [DEBUG] [Thread-187471] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:06:23.328 [DEBUG] [Thread-187473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:06:27.910 [DEBUG] [Thread-187474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:06:38.379 [DEBUG] [Thread-187475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:06:43.954 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:06:43.955 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:06:43.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:06:43.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:06:43.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-14T15:06:45.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 6, 14), 16.35, 33.16, 0.0, 33.65, 16.56, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:06:45.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:06:14
2026-02-14T15:06:46.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:06:46.360 [DEBUG] [Thread-187476] [transport.py] [_log()] starting thread (client mode): 0xa5742c80
2026-02-14T15:06:46.360 [DEBUG] [Thread-187476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:06:46.381 [DEBUG] [Thread-187476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:06:46.381 [INFO] [Thread-187476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:06:46.384 [DEBUG] [Thread-187476] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:06:46.384 [DEBUG] [Thread-187476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:06:46.384 [DEBUG] [Thread-187476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:06:46.384 [DEBUG] [Thread-187476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:06:46.384 [DEBUG] [Thread-187476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:06:46.384 [DEBUG] [Thread-187476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:06:46.384 [DEBUG] [Thread-187476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:06:46.384 [DEBUG] [Thread-187476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:06:46.384 [DEBUG] [Thread-187476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:06:46.384 [DEBUG] [Thread-187476] [transport.py] [_log()] client lang: <none>
2026-02-14T15:06:46.384 [DEBUG] [Thread-187476] [transport.py] [_log()] server lang: <none>
2026-02-14T15:06:46.384 [DEBUG] [Thread-187476] [transport.py] [_log()] kex follows: False
2026-02-14T15:06:46.384 [DEBUG] [Thread-187476] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:06:46.384 [DEBUG] [Thread-187476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:06:46.384 [DEBUG] [Thread-187476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:06:46.384 [DEBUG] [Thread-187476] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:06:46.384 [DEBUG] [Thread-187476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:06:46.384 [DEBUG] [Thread-187476] [transport.py] [_log()] Compression: none
2026-02-14T15:06:46.384 [DEBUG] [Thread-187476] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:06:46.401 [DEBUG] [Thread-187476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:06:46.402 [DEBUG] [Thread-187476] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:06:46.402 [DEBUG] [Thread-187476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:06:46.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:06:46.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:06:46.404 [DEBUG] [Thread-187476] [transport.py] [_log()] userauth is OK
2026-02-14T15:06:46.404 [DEBUG] [Thread-187476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:06:46.405 [DEBUG] [Thread-187476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:06:46.405 [DEBUG] [Thread-187476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:06:46.405 [DEBUG] [Thread-187476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:06:46.437 [INFO] [Thread-187476] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:06:46.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:06:47.096 [DEBUG] [Thread-187476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:06:47.097 [DEBUG] [Thread-187476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:06:47.097 [DEBUG] [Thread-187476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:06:47.137 [DEBUG] [Thread-187476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:06:47.137 [DEBUG] [Thread-187476] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:06:47.141 [DEBUG] [Thread-187476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:06:47.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:06:47.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:06:47.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:06:47.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:06:47.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:06:47.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:06:47.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:06:47.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:06:47.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:06:47.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.545941 -999.00  +16.20  19.21     39   +2.30 1 1 1 1 1   888    0 14.85 27.38 ----- 21.8 19.2 187.8 33.7 22.2 -28.8 21.2 -32.6 22.9 -27.1 23.8 -29.3
2026-02-14T15:06:47.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:06:47.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:06:47.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.545941
2026-02-14T15:06:47.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:06:47.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:06:47.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:06:47.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:06:47.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:06:47.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:06:14', tmtdew=16.35, humidity=33.16, cloud=0.0, wind=33.65, temperature=16.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:06:09.302', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:06:47.166 [DEBUG] [Thread-187476] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:06:47.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-14T15:06:47.262 [DEBUG] [Thread-187479] [transport.py] [_log()] starting thread (client mode): 0xa2dc2a40
2026-02-14T15:06:47.262 [DEBUG] [Thread-187479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:06:47.277 [DEBUG] [Thread-187479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:06:47.277 [INFO] [Thread-187479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:06:47.284 [DEBUG] [Thread-187479] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:06:47.285 [DEBUG] [Thread-187479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:06:47.285 [DEBUG] [Thread-187479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:06:47.285 [DEBUG] [Thread-187479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:06:47.285 [DEBUG] [Thread-187479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:06:47.285 [DEBUG] [Thread-187479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:06:47.285 [DEBUG] [Thread-187479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:06:47.285 [DEBUG] [Thread-187479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:06:47.285 [DEBUG] [Thread-187479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:06:47.285 [DEBUG] [Thread-187479] [transport.py] [_log()] client lang: <none>
2026-02-14T15:06:47.285 [DEBUG] [Thread-187479] [transport.py] [_log()] server lang: <none>
2026-02-14T15:06:47.285 [DEBUG] [Thread-187479] [transport.py] [_log()] kex follows: False
2026-02-14T15:06:47.285 [DEBUG] [Thread-187479] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:06:47.285 [DEBUG] [Thread-187479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:06:47.285 [DEBUG] [Thread-187479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:06:47.285 [DEBUG] [Thread-187479] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:06:47.285 [DEBUG] [Thread-187479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:06:47.286 [DEBUG] [Thread-187479] [transport.py] [_log()] Compression: none
2026-02-14T15:06:47.286 [DEBUG] [Thread-187479] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:06:47.345 [DEBUG] [Thread-187479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:06:47.345 [DEBUG] [Thread-187479] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:06:47.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:06:47.347 [DEBUG] [Thread-187479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:06:47.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:06:47.401 [DEBUG] [Thread-187479] [transport.py] [_log()] userauth is OK
2026-02-14T15:06:47.401 [DEBUG] [Thread-187479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:06:47.401 [DEBUG] [Thread-187479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:06:47.401 [DEBUG] [Thread-187479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:06:47.401 [DEBUG] [Thread-187479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:06:47.420 [INFO] [Thread-187479] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:06:47.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-14T15:06:47.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:06:48.257 [DEBUG] [Thread-187479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:06:48.257 [DEBUG] [Thread-187479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:06:48.305 [DEBUG] [Thread-187479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:06:48.306 [DEBUG] [Thread-187479] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:06:48.315 [DEBUG] [Thread-187479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:06:48.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:06:48.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:06:48.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-14T15:06:48.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:06:48.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:06:48.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:06:48.350 [DEBUG] [Thread-187479] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:06:53.417 [DEBUG] [Thread-187481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:07:08.470 [DEBUG] [Thread-187482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:07:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:07:18.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:07:18.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-14T15:07:20.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 6, 50), 16.31, 33.21, 0.0, 24.49, 16.36, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:07:20.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:06:50
2026-02-14T15:07:20.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:07:20.711 [DEBUG] [Thread-187483] [transport.py] [_log()] starting thread (client mode): 0xa2d204f0
2026-02-14T15:07:20.712 [DEBUG] [Thread-187483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:07:20.733 [DEBUG] [Thread-187483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:07:20.733 [INFO] [Thread-187483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:07:20.736 [DEBUG] [Thread-187483] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:07:20.736 [DEBUG] [Thread-187483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:07:20.737 [DEBUG] [Thread-187483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:07:20.737 [DEBUG] [Thread-187483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:07:20.737 [DEBUG] [Thread-187483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:07:20.737 [DEBUG] [Thread-187483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:07:20.737 [DEBUG] [Thread-187483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:07:20.737 [DEBUG] [Thread-187483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:07:20.737 [DEBUG] [Thread-187483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:07:20.737 [DEBUG] [Thread-187483] [transport.py] [_log()] client lang: <none>
2026-02-14T15:07:20.737 [DEBUG] [Thread-187483] [transport.py] [_log()] server lang: <none>
2026-02-14T15:07:20.737 [DEBUG] [Thread-187483] [transport.py] [_log()] kex follows: False
2026-02-14T15:07:20.737 [DEBUG] [Thread-187483] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:07:20.737 [DEBUG] [Thread-187483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:07:20.746 [DEBUG] [Thread-187483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:07:20.746 [DEBUG] [Thread-187483] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:07:20.746 [DEBUG] [Thread-187483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:07:20.746 [DEBUG] [Thread-187483] [transport.py] [_log()] Compression: none
2026-02-14T15:07:20.746 [DEBUG] [Thread-187483] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:07:20.764 [DEBUG] [Thread-187483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:07:20.765 [DEBUG] [Thread-187483] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:07:20.765 [DEBUG] [Thread-187483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:07:20.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:07:20.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:07:20.767 [DEBUG] [Thread-187483] [transport.py] [_log()] userauth is OK
2026-02-14T15:07:20.767 [DEBUG] [Thread-187483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:07:20.768 [DEBUG] [Thread-187483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:07:20.768 [DEBUG] [Thread-187483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:07:20.768 [DEBUG] [Thread-187483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:07:20.792 [INFO] [Thread-187483] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:07:20.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:07:21.432 [DEBUG] [Thread-187483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:07:21.432 [DEBUG] [Thread-187483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:07:21.433 [DEBUG] [Thread-187483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:07:21.473 [DEBUG] [Thread-187483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:07:21.474 [DEBUG] [Thread-187483] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:07:21.477 [DEBUG] [Thread-187483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:07:21.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:07:21.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:07:21.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:07:21.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:07:21.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:07:21.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:07:21.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:07:21.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:07:21.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:07:21.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.546288 -999.00  +16.30  20.31     38   +2.20 1 1 1 1 1   888    0 14.64 25.43 ----- 19.8 20.3 176.6 34.8 22.2 -27.8 21.2 -28.3 22.8 -25.9 23.8 -27.3
2026-02-14T15:07:21.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:07:21.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:07:21.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.546288
2026-02-14T15:07:21.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:07:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:07:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:07:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:07:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:07:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:06:50', tmtdew=16.31, humidity=33.21, cloud=0.0, wind=24.49, temperature=16.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:06:39.283', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:07:21.507 [DEBUG] [Thread-187483] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:07:21.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-14T15:07:21.601 [DEBUG] [Thread-187486] [transport.py] [_log()] starting thread (client mode): 0xa2d3ff40
2026-02-14T15:07:21.601 [DEBUG] [Thread-187486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:07:21.615 [DEBUG] [Thread-187486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:07:21.615 [INFO] [Thread-187486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:07:21.623 [DEBUG] [Thread-187486] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:07:21.623 [DEBUG] [Thread-187486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:07:21.623 [DEBUG] [Thread-187486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:07:21.623 [DEBUG] [Thread-187486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:07:21.623 [DEBUG] [Thread-187486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:07:21.623 [DEBUG] [Thread-187486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:07:21.623 [DEBUG] [Thread-187486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:07:21.623 [DEBUG] [Thread-187486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:07:21.624 [DEBUG] [Thread-187486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:07:21.624 [DEBUG] [Thread-187486] [transport.py] [_log()] client lang: <none>
2026-02-14T15:07:21.624 [DEBUG] [Thread-187486] [transport.py] [_log()] server lang: <none>
2026-02-14T15:07:21.624 [DEBUG] [Thread-187486] [transport.py] [_log()] kex follows: False
2026-02-14T15:07:21.624 [DEBUG] [Thread-187486] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:07:21.624 [DEBUG] [Thread-187486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:07:21.624 [DEBUG] [Thread-187486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:07:21.624 [DEBUG] [Thread-187486] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:07:21.624 [DEBUG] [Thread-187486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:07:21.625 [DEBUG] [Thread-187486] [transport.py] [_log()] Compression: none
2026-02-14T15:07:21.625 [DEBUG] [Thread-187486] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:07:21.685 [DEBUG] [Thread-187486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:07:21.685 [DEBUG] [Thread-187486] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:07:21.686 [DEBUG] [Thread-187486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:07:21.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:07:21.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:07:21.741 [DEBUG] [Thread-187486] [transport.py] [_log()] userauth is OK
2026-02-14T15:07:21.742 [DEBUG] [Thread-187486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:07:21.742 [DEBUG] [Thread-187486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:07:21.742 [DEBUG] [Thread-187486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:07:21.742 [DEBUG] [Thread-187486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:07:21.762 [INFO] [Thread-187486] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:07:21.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-14T15:07:21.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:07:22.556 [DEBUG] [Thread-187486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:07:22.556 [DEBUG] [Thread-187486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:07:22.604 [DEBUG] [Thread-187486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:07:22.604 [DEBUG] [Thread-187486] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:07:22.613 [DEBUG] [Thread-187486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:07:22.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:07:22.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:07:22.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-14T15:07:22.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:07:22.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:07:22.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:07:22.650 [DEBUG] [Thread-187486] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:07:23.506 [DEBUG] [Thread-187488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:07:27.940 [DEBUG] [Thread-187489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:07:38.565 [DEBUG] [Thread-187490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:07:44.096 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:07:44.097 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:07:52.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:07:52.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:07:52.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-14T15:07:53.602 [DEBUG] [Thread-187491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:07:54.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 7, 25), 16.21, 33.4, 0.0, 24.37, 16.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:07:54.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:07:25
2026-02-14T15:07:55.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:07:55.244 [DEBUG] [Thread-187492] [transport.py] [_log()] starting thread (client mode): 0xa2dc5960
2026-02-14T15:07:55.244 [DEBUG] [Thread-187492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:07:55.255 [DEBUG] [Thread-187492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:07:55.255 [INFO] [Thread-187492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:07:55.257 [DEBUG] [Thread-187492] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:07:55.257 [DEBUG] [Thread-187492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:07:55.257 [DEBUG] [Thread-187492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:07:55.257 [DEBUG] [Thread-187492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:07:55.257 [DEBUG] [Thread-187492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:07:55.257 [DEBUG] [Thread-187492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:07:55.257 [DEBUG] [Thread-187492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:07:55.257 [DEBUG] [Thread-187492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:07:55.257 [DEBUG] [Thread-187492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:07:55.257 [DEBUG] [Thread-187492] [transport.py] [_log()] client lang: <none>
2026-02-14T15:07:55.257 [DEBUG] [Thread-187492] [transport.py] [_log()] server lang: <none>
2026-02-14T15:07:55.257 [DEBUG] [Thread-187492] [transport.py] [_log()] kex follows: False
2026-02-14T15:07:55.257 [DEBUG] [Thread-187492] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:07:55.258 [DEBUG] [Thread-187492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:07:55.258 [DEBUG] [Thread-187492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:07:55.258 [DEBUG] [Thread-187492] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:07:55.258 [DEBUG] [Thread-187492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:07:55.258 [DEBUG] [Thread-187492] [transport.py] [_log()] Compression: none
2026-02-14T15:07:55.258 [DEBUG] [Thread-187492] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:07:55.270 [DEBUG] [Thread-187492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:07:55.270 [DEBUG] [Thread-187492] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:07:55.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:07:55.271 [DEBUG] [Thread-187492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:07:55.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:07:55.271 [DEBUG] [Thread-187492] [transport.py] [_log()] userauth is OK
2026-02-14T15:07:55.271 [DEBUG] [Thread-187492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:07:55.271 [DEBUG] [Thread-187492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:07:55.272 [DEBUG] [Thread-187492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:07:55.272 [DEBUG] [Thread-187492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:07:55.283 [INFO] [Thread-187492] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:07:55.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:07:55.916 [DEBUG] [Thread-187492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:07:55.916 [DEBUG] [Thread-187492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:07:55.917 [DEBUG] [Thread-187492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:07:55.958 [DEBUG] [Thread-187492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:07:55.958 [DEBUG] [Thread-187492] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:07:55.961 [DEBUG] [Thread-187492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:07:55.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:07:55.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:07:55.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:07:55.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:07:55.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:07:55.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:07:55.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:07:55.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:07:55.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:07:55.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.546982 -999.00  +16.60  19.90     38   +2.40 1 1 1 1 1   888    0 14.77 26.12 ----- 22.6 19.9 159.6 23.3 22.3 -26.6 21.3 -29.8 22.9 -25.1 23.9 -27.9
2026-02-14T15:07:55.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:07:55.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:07:55.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.546982
2026-02-14T15:07:55.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:07:55.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:07:55.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:07:55.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:07:55.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:07:55.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:07:25', tmtdew=16.21, humidity=33.4, cloud=0.0, wind=24.37, temperature=16.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:07:39.245', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:07:55.990 [DEBUG] [Thread-187492] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:07:56.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-14T15:07:56.087 [DEBUG] [Thread-187495] [transport.py] [_log()] starting thread (client mode): 0xa2dea8c0
2026-02-14T15:07:56.087 [DEBUG] [Thread-187495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:07:56.101 [DEBUG] [Thread-187495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:07:56.101 [INFO] [Thread-187495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:07:56.109 [DEBUG] [Thread-187495] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:07:56.109 [DEBUG] [Thread-187495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:07:56.110 [DEBUG] [Thread-187495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:07:56.110 [DEBUG] [Thread-187495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:07:56.110 [DEBUG] [Thread-187495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:07:56.110 [DEBUG] [Thread-187495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:07:56.110 [DEBUG] [Thread-187495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:07:56.110 [DEBUG] [Thread-187495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:07:56.110 [DEBUG] [Thread-187495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:07:56.110 [DEBUG] [Thread-187495] [transport.py] [_log()] client lang: <none>
2026-02-14T15:07:56.110 [DEBUG] [Thread-187495] [transport.py] [_log()] server lang: <none>
2026-02-14T15:07:56.110 [DEBUG] [Thread-187495] [transport.py] [_log()] kex follows: False
2026-02-14T15:07:56.110 [DEBUG] [Thread-187495] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:07:56.110 [DEBUG] [Thread-187495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:07:56.110 [DEBUG] [Thread-187495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:07:56.110 [DEBUG] [Thread-187495] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:07:56.110 [DEBUG] [Thread-187495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:07:56.110 [DEBUG] [Thread-187495] [transport.py] [_log()] Compression: none
2026-02-14T15:07:56.110 [DEBUG] [Thread-187495] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:07:56.169 [DEBUG] [Thread-187495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:07:56.170 [DEBUG] [Thread-187495] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:07:56.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:07:56.171 [DEBUG] [Thread-187495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:07:56.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:07:56.226 [DEBUG] [Thread-187495] [transport.py] [_log()] userauth is OK
2026-02-14T15:07:56.226 [DEBUG] [Thread-187495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:07:56.226 [DEBUG] [Thread-187495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:07:56.226 [DEBUG] [Thread-187495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:07:56.226 [DEBUG] [Thread-187495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:07:56.244 [INFO] [Thread-187495] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:07:56.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-14T15:07:56.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:07:57.088 [DEBUG] [Thread-187495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:07:57.088 [DEBUG] [Thread-187495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:07:57.136 [DEBUG] [Thread-187495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:07:57.137 [DEBUG] [Thread-187495] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:07:57.145 [DEBUG] [Thread-187495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:07:57.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:07:57.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:07:57.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-14T15:07:57.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:07:57.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:07:57.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:07:57.182 [DEBUG] [Thread-187495] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:08:08.642 [DEBUG] [Thread-187497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:08:23.694 [DEBUG] [Thread-187498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:08:27.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:08:27.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:08:27.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-14T15:08:27.978 [DEBUG] [Thread-187499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:08:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 8), 16.67, 32.49, 0.0, 23.17, 16.82, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:08:29.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:08:00
2026-02-14T15:08:29.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:08:29.601 [DEBUG] [Thread-187500] [transport.py] [_log()] starting thread (client mode): 0xa2d54850
2026-02-14T15:08:29.601 [DEBUG] [Thread-187500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:08:29.623 [DEBUG] [Thread-187500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:08:29.623 [INFO] [Thread-187500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:08:29.627 [DEBUG] [Thread-187500] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:08:29.628 [DEBUG] [Thread-187500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:08:29.628 [DEBUG] [Thread-187500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:08:29.628 [DEBUG] [Thread-187500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:08:29.628 [DEBUG] [Thread-187500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:08:29.628 [DEBUG] [Thread-187500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:08:29.628 [DEBUG] [Thread-187500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:08:29.628 [DEBUG] [Thread-187500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:08:29.628 [DEBUG] [Thread-187500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:08:29.628 [DEBUG] [Thread-187500] [transport.py] [_log()] client lang: <none>
2026-02-14T15:08:29.628 [DEBUG] [Thread-187500] [transport.py] [_log()] server lang: <none>
2026-02-14T15:08:29.628 [DEBUG] [Thread-187500] [transport.py] [_log()] kex follows: False
2026-02-14T15:08:29.628 [DEBUG] [Thread-187500] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:08:29.628 [DEBUG] [Thread-187500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:08:29.628 [DEBUG] [Thread-187500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:08:29.628 [DEBUG] [Thread-187500] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:08:29.628 [DEBUG] [Thread-187500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:08:29.628 [DEBUG] [Thread-187500] [transport.py] [_log()] Compression: none
2026-02-14T15:08:29.628 [DEBUG] [Thread-187500] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:08:29.647 [DEBUG] [Thread-187500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:08:29.647 [DEBUG] [Thread-187500] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:08:29.648 [DEBUG] [Thread-187500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:08:29.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:08:29.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:08:29.650 [DEBUG] [Thread-187500] [transport.py] [_log()] userauth is OK
2026-02-14T15:08:29.651 [DEBUG] [Thread-187500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:08:29.651 [DEBUG] [Thread-187500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:08:29.651 [DEBUG] [Thread-187500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:08:29.651 [DEBUG] [Thread-187500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:08:29.687 [INFO] [Thread-187500] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:08:29.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:08:30.333 [DEBUG] [Thread-187500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:08:30.334 [DEBUG] [Thread-187500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:08:30.334 [DEBUG] [Thread-187500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:08:30.374 [DEBUG] [Thread-187500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:08:30.375 [DEBUG] [Thread-187500] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:08:30.378 [DEBUG] [Thread-187500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:08:30.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:08:30.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:08:30.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:08:30.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:08:30.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:08:30.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:08:30.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:08:30.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:08:30.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:08:30.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.547330 -999.00  +16.60  21.14     38   +2.20 1 1 1 1 1   888    0 14.54 26.76 ----- 28.2 21.1 176.8 46.0 22.4 -28.3 21.4 -30.0 23.0 -26.0 24.0 -28.0
2026-02-14T15:08:30.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:08:30.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:08:30.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.547330
2026-02-14T15:08:30.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:08:30.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:08:30.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:08:30.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:08:30.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:08:30.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:08:00', tmtdew=16.67, humidity=32.49, cloud=0.0, wind=23.17, temperature=16.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:08:09.312', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:08:30.420 [DEBUG] [Thread-187500] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:08:30.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-14T15:08:30.517 [DEBUG] [Thread-187503] [transport.py] [_log()] starting thread (client mode): 0xa2deb490
2026-02-14T15:08:30.517 [DEBUG] [Thread-187503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:08:30.532 [DEBUG] [Thread-187503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:08:30.532 [INFO] [Thread-187503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:08:30.540 [DEBUG] [Thread-187503] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:08:30.540 [DEBUG] [Thread-187503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:08:30.540 [DEBUG] [Thread-187503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:08:30.540 [DEBUG] [Thread-187503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:08:30.540 [DEBUG] [Thread-187503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:08:30.540 [DEBUG] [Thread-187503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:08:30.540 [DEBUG] [Thread-187503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:08:30.540 [DEBUG] [Thread-187503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:08:30.540 [DEBUG] [Thread-187503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:08:30.540 [DEBUG] [Thread-187503] [transport.py] [_log()] client lang: <none>
2026-02-14T15:08:30.540 [DEBUG] [Thread-187503] [transport.py] [_log()] server lang: <none>
2026-02-14T15:08:30.540 [DEBUG] [Thread-187503] [transport.py] [_log()] kex follows: False
2026-02-14T15:08:30.540 [DEBUG] [Thread-187503] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:08:30.541 [DEBUG] [Thread-187503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:08:30.541 [DEBUG] [Thread-187503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:08:30.541 [DEBUG] [Thread-187503] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:08:30.541 [DEBUG] [Thread-187503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:08:30.541 [DEBUG] [Thread-187503] [transport.py] [_log()] Compression: none
2026-02-14T15:08:30.541 [DEBUG] [Thread-187503] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:08:30.597 [DEBUG] [Thread-187503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:08:30.598 [DEBUG] [Thread-187503] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:08:30.599 [DEBUG] [Thread-187503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:08:30.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:08:30.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:08:30.654 [DEBUG] [Thread-187503] [transport.py] [_log()] userauth is OK
2026-02-14T15:08:30.654 [DEBUG] [Thread-187503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:08:30.655 [DEBUG] [Thread-187503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:08:30.655 [DEBUG] [Thread-187503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:08:30.655 [DEBUG] [Thread-187503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:08:30.672 [INFO] [Thread-187503] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:08:30.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-14T15:08:30.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:08:31.582 [DEBUG] [Thread-187503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:08:31.583 [DEBUG] [Thread-187503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:08:31.630 [DEBUG] [Thread-187503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:08:31.631 [DEBUG] [Thread-187503] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:08:31.640 [DEBUG] [Thread-187503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:08:31.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:08:31.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-14T15:08:31.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-14T15:08:31.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:08:31.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:08:31.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:08:31.677 [DEBUG] [Thread-187503] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:08:38.732 [DEBUG] [Thread-187505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:08:44.238 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:08:44.240 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:08:53.792 [DEBUG] [Thread-187506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:09:01.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:09:01.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:09:01.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-14T15:09:03.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 8, 35), 17.66, 30.38, 0.0, 26.82, 18.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:09:03.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:08:35
2026-02-14T15:09:03.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:09:04.090 [DEBUG] [Thread-187507] [transport.py] [_log()] starting thread (client mode): 0xa2decbb0
2026-02-14T15:09:04.091 [DEBUG] [Thread-187507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:09:04.110 [DEBUG] [Thread-187507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:09:04.110 [INFO] [Thread-187507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:09:04.111 [DEBUG] [Thread-187507] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:09:04.111 [DEBUG] [Thread-187507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:09:04.112 [DEBUG] [Thread-187507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:09:04.112 [DEBUG] [Thread-187507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:09:04.112 [DEBUG] [Thread-187507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:09:04.112 [DEBUG] [Thread-187507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:09:04.112 [DEBUG] [Thread-187507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:09:04.112 [DEBUG] [Thread-187507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:09:04.112 [DEBUG] [Thread-187507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:09:04.112 [DEBUG] [Thread-187507] [transport.py] [_log()] client lang: <none>
2026-02-14T15:09:04.112 [DEBUG] [Thread-187507] [transport.py] [_log()] server lang: <none>
2026-02-14T15:09:04.112 [DEBUG] [Thread-187507] [transport.py] [_log()] kex follows: False
2026-02-14T15:09:04.112 [DEBUG] [Thread-187507] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:09:04.112 [DEBUG] [Thread-187507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:09:04.112 [DEBUG] [Thread-187507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:09:04.112 [DEBUG] [Thread-187507] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:09:04.112 [DEBUG] [Thread-187507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:09:04.112 [DEBUG] [Thread-187507] [transport.py] [_log()] Compression: none
2026-02-14T15:09:04.112 [DEBUG] [Thread-187507] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:09:04.120 [DEBUG] [Thread-187507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:09:04.120 [DEBUG] [Thread-187507] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:09:04.121 [DEBUG] [Thread-187507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:09:04.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:09:04.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:09:04.122 [DEBUG] [Thread-187507] [transport.py] [_log()] userauth is OK
2026-02-14T15:09:04.123 [DEBUG] [Thread-187507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:09:04.123 [DEBUG] [Thread-187507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:09:04.123 [DEBUG] [Thread-187507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:09:04.123 [DEBUG] [Thread-187507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:09:04.147 [INFO] [Thread-187507] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:09:04.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:09:04.780 [DEBUG] [Thread-187507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:09:04.780 [DEBUG] [Thread-187507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:09:04.780 [DEBUG] [Thread-187507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:09:04.820 [DEBUG] [Thread-187507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:09:04.821 [DEBUG] [Thread-187507] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:09:04.824 [DEBUG] [Thread-187507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:09:04.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:09:04.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:09:04.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:09:04.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:09:04.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:09:04.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:09:04.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:09:04.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:09:04.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:09:04.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.547677 -999.00  +16.50  28.56     38   +2.20 1 1 1 1 1   888    0 14.83 29.27 ----- 23.5 28.6 185.0 40.2 22.3 -28.0 21.1 -29.4 22.8 -25.5 23.8 -26.8
2026-02-14T15:09:04.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:09:04.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:09:04.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.547677
2026-02-14T15:09:04.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:09:04.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:09:04.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:09:04.853 [DEBUG] [Thread-187507] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:09:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:09:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:09:04.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:08:35', tmtdew=17.66, humidity=30.38, cloud=0.0, wind=26.82, 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-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:08:39.293', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:09:04.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-14T15:09:04.948 [DEBUG] [Thread-187510] [transport.py] [_log()] starting thread (client mode): 0xa2d12e60
2026-02-14T15:09:04.948 [DEBUG] [Thread-187510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:09:04.965 [DEBUG] [Thread-187510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:09:04.965 [INFO] [Thread-187510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:09:04.972 [DEBUG] [Thread-187510] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:09:04.973 [DEBUG] [Thread-187510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:09:04.973 [DEBUG] [Thread-187510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:09:04.973 [DEBUG] [Thread-187510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:09:04.973 [DEBUG] [Thread-187510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:09:04.973 [DEBUG] [Thread-187510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:09:04.974 [DEBUG] [Thread-187510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:09:04.974 [DEBUG] [Thread-187510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:09:04.974 [DEBUG] [Thread-187510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:09:04.974 [DEBUG] [Thread-187510] [transport.py] [_log()] client lang: <none>
2026-02-14T15:09:04.974 [DEBUG] [Thread-187510] [transport.py] [_log()] server lang: <none>
2026-02-14T15:09:04.974 [DEBUG] [Thread-187510] [transport.py] [_log()] kex follows: False
2026-02-14T15:09:04.974 [DEBUG] [Thread-187510] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:09:04.975 [DEBUG] [Thread-187510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:09:04.975 [DEBUG] [Thread-187510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:09:04.975 [DEBUG] [Thread-187510] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:09:04.975 [DEBUG] [Thread-187510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:09:04.975 [DEBUG] [Thread-187510] [transport.py] [_log()] Compression: none
2026-02-14T15:09:04.975 [DEBUG] [Thread-187510] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:09:05.040 [DEBUG] [Thread-187510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:09:05.041 [DEBUG] [Thread-187510] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:09:05.041 [DEBUG] [Thread-187510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:09:05.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:09:05.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:09:05.098 [DEBUG] [Thread-187510] [transport.py] [_log()] userauth is OK
2026-02-14T15:09:05.098 [DEBUG] [Thread-187510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:09:05.099 [DEBUG] [Thread-187510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:09:05.099 [DEBUG] [Thread-187510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:09:05.099 [DEBUG] [Thread-187510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:09:05.119 [INFO] [Thread-187510] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:09:05.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-14T15:09:05.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:09:05.988 [DEBUG] [Thread-187510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:09:05.989 [DEBUG] [Thread-187510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:09:06.036 [DEBUG] [Thread-187510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:09:06.037 [DEBUG] [Thread-187510] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:09:06.046 [DEBUG] [Thread-187510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:09:06.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:09:06.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-14T15:09:06.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:09:06.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:09:06.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:09:06.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:09:06.083 [DEBUG] [Thread-187510] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:09:08.834 [DEBUG] [Thread-187512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:09:23.883 [DEBUG] [Thread-187513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:09:28.021 [DEBUG] [Thread-187514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:09:36.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:09:36.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:09:36.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-14T15:09:38.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 9, 11), 16.52, 32.74, 0.0, 25.94, 16.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:09:38.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:09:11
2026-02-14T15:09:38.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:09:38.789 [DEBUG] [Thread-187515] [transport.py] [_log()] starting thread (client mode): 0xa2dec220
2026-02-14T15:09:38.790 [DEBUG] [Thread-187515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:09:38.810 [DEBUG] [Thread-187515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:09:38.810 [INFO] [Thread-187515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:09:38.813 [DEBUG] [Thread-187515] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:09:38.813 [DEBUG] [Thread-187515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:09:38.813 [DEBUG] [Thread-187515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:09:38.813 [DEBUG] [Thread-187515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:09:38.813 [DEBUG] [Thread-187515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:09:38.813 [DEBUG] [Thread-187515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:09:38.813 [DEBUG] [Thread-187515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:09:38.813 [DEBUG] [Thread-187515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:09:38.813 [DEBUG] [Thread-187515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:09:38.813 [DEBUG] [Thread-187515] [transport.py] [_log()] client lang: <none>
2026-02-14T15:09:38.813 [DEBUG] [Thread-187515] [transport.py] [_log()] server lang: <none>
2026-02-14T15:09:38.813 [DEBUG] [Thread-187515] [transport.py] [_log()] kex follows: False
2026-02-14T15:09:38.813 [DEBUG] [Thread-187515] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:09:38.813 [DEBUG] [Thread-187515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:09:38.813 [DEBUG] [Thread-187515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:09:38.813 [DEBUG] [Thread-187515] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:09:38.813 [DEBUG] [Thread-187515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:09:38.813 [DEBUG] [Thread-187515] [transport.py] [_log()] Compression: none
2026-02-14T15:09:38.813 [DEBUG] [Thread-187515] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:09:38.831 [DEBUG] [Thread-187515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:09:38.831 [DEBUG] [Thread-187515] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:09:38.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:09:38.832 [DEBUG] [Thread-187515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:09:38.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:09:38.835 [DEBUG] [Thread-187515] [transport.py] [_log()] userauth is OK
2026-02-14T15:09:38.835 [DEBUG] [Thread-187515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:09:38.835 [DEBUG] [Thread-187515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:09:38.835 [DEBUG] [Thread-187515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:09:38.835 [DEBUG] [Thread-187515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:09:38.860 [INFO] [Thread-187515] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:09:38.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:09:38.921 [DEBUG] [Thread-187517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:09:39.649 [DEBUG] [Thread-187515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:09:39.649 [DEBUG] [Thread-187515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:09:39.650 [DEBUG] [Thread-187515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:09:39.690 [DEBUG] [Thread-187515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:09:39.691 [DEBUG] [Thread-187515] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:09:39.694 [DEBUG] [Thread-187515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:09:39.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:09:39.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:09:39.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:09:39.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:09:39.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:09:39.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:09:39.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:09:39.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:09:39.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:09:39.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.548024 -999.00  +16.70  24.60     38   +2.40 1 1 1 1 1   888    0 14.83 30.63 ----- 30.6 24.6 184.2 32.9 22.3 -27.5 21.3 -27.0 22.9 -24.7 23.9 -27.0
2026-02-14T15:09:39.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:09:39.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:09:39.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.548024
2026-02-14T15:09:39.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:09:39.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:09:39.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:09:39.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:09:39.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:09:39.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:09:11', tmtdew=16.52, humidity=32.74, cloud=0.0, wind=25.94, temperature=16.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:09:09.274', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:09:39.721 [DEBUG] [Thread-187515] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:09:39.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-14T15:09:39.819 [DEBUG] [Thread-187519] [transport.py] [_log()] starting thread (client mode): 0xa2defdc0
2026-02-14T15:09:39.819 [DEBUG] [Thread-187519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:09:39.834 [DEBUG] [Thread-187519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:09:39.834 [INFO] [Thread-187519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:09:39.843 [DEBUG] [Thread-187519] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:09:39.843 [DEBUG] [Thread-187519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:09:39.843 [DEBUG] [Thread-187519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:09:39.843 [DEBUG] [Thread-187519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:09:39.843 [DEBUG] [Thread-187519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:09:39.843 [DEBUG] [Thread-187519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:09:39.843 [DEBUG] [Thread-187519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:09:39.843 [DEBUG] [Thread-187519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:09:39.843 [DEBUG] [Thread-187519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:09:39.843 [DEBUG] [Thread-187519] [transport.py] [_log()] client lang: <none>
2026-02-14T15:09:39.843 [DEBUG] [Thread-187519] [transport.py] [_log()] server lang: <none>
2026-02-14T15:09:39.843 [DEBUG] [Thread-187519] [transport.py] [_log()] kex follows: False
2026-02-14T15:09:39.843 [DEBUG] [Thread-187519] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:09:39.843 [DEBUG] [Thread-187519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:09:39.843 [DEBUG] [Thread-187519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:09:39.843 [DEBUG] [Thread-187519] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:09:39.843 [DEBUG] [Thread-187519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:09:39.843 [DEBUG] [Thread-187519] [transport.py] [_log()] Compression: none
2026-02-14T15:09:39.843 [DEBUG] [Thread-187519] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:09:39.897 [DEBUG] [Thread-187519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:09:39.897 [DEBUG] [Thread-187519] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:09:39.898 [DEBUG] [Thread-187519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:09:39.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:09:39.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:09:39.954 [DEBUG] [Thread-187519] [transport.py] [_log()] userauth is OK
2026-02-14T15:09:39.954 [DEBUG] [Thread-187519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:09:39.954 [DEBUG] [Thread-187519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:09:39.954 [DEBUG] [Thread-187519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:09:39.954 [DEBUG] [Thread-187519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:09:39.968 [INFO] [Thread-187519] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:09:39.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T15:09:39.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:09:40.797 [DEBUG] [Thread-187519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:09:40.798 [DEBUG] [Thread-187519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:09:40.845 [DEBUG] [Thread-187519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:09:40.846 [DEBUG] [Thread-187519] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:09:40.855 [DEBUG] [Thread-187519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:09:40.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:09:40.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-14T15:09: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') -> 00000000
2026-02-14T15:09:40.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:09:40.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:09:40.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:09:40.891 [DEBUG] [Thread-187519] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:09:44.380 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:09:44.381 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:09:53.957 [DEBUG] [Thread-187521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:10:09.012 [DEBUG] [Thread-187522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:10:10.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:10:10.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:10:10.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-14T15:10:13.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 9, 46), 16.52, 32.59, 0.0, 34.44, 16.69, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:10:13.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:09:46
2026-02-14T15:10:13.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:10:13.677 [DEBUG] [Thread-187523] [transport.py] [_log()] starting thread (client mode): 0xa2dc0f10
2026-02-14T15:10:13.677 [DEBUG] [Thread-187523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:10:13.698 [DEBUG] [Thread-187523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:10:13.698 [INFO] [Thread-187523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:10:13.701 [DEBUG] [Thread-187523] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:10:13.702 [DEBUG] [Thread-187523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:10:13.702 [DEBUG] [Thread-187523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:10:13.702 [DEBUG] [Thread-187523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:10:13.702 [DEBUG] [Thread-187523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:10:13.702 [DEBUG] [Thread-187523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:10:13.702 [DEBUG] [Thread-187523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:10:13.702 [DEBUG] [Thread-187523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:10:13.702 [DEBUG] [Thread-187523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:10:13.702 [DEBUG] [Thread-187523] [transport.py] [_log()] client lang: <none>
2026-02-14T15:10:13.703 [DEBUG] [Thread-187523] [transport.py] [_log()] server lang: <none>
2026-02-14T15:10:13.703 [DEBUG] [Thread-187523] [transport.py] [_log()] kex follows: False
2026-02-14T15:10:13.703 [DEBUG] [Thread-187523] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:10:13.703 [DEBUG] [Thread-187523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:10:13.703 [DEBUG] [Thread-187523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:10:13.703 [DEBUG] [Thread-187523] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:10:13.703 [DEBUG] [Thread-187523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:10:13.703 [DEBUG] [Thread-187523] [transport.py] [_log()] Compression: none
2026-02-14T15:10:13.703 [DEBUG] [Thread-187523] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:10:13.723 [DEBUG] [Thread-187523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:10:13.724 [DEBUG] [Thread-187523] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:10:13.725 [DEBUG] [Thread-187523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:10:13.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:10:13.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:10:13.727 [DEBUG] [Thread-187523] [transport.py] [_log()] userauth is OK
2026-02-14T15:10:13.727 [DEBUG] [Thread-187523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:10:13.727 [DEBUG] [Thread-187523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:10:13.727 [DEBUG] [Thread-187523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:10:13.727 [DEBUG] [Thread-187523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:10:13.751 [INFO] [Thread-187523] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:10:14.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:10:14.471 [DEBUG] [Thread-187523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:10:14.471 [DEBUG] [Thread-187523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:10:14.471 [DEBUG] [Thread-187523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:10:14.472 [DEBUG] [Thread-187523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:10:14.472 [DEBUG] [Thread-187523] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:10:14.476 [DEBUG] [Thread-187523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:10:14.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:10:14.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:10:14.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:10:14.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:10:14.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:10:14.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:10:14.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:10:14.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:10:14.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:10:14.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.548371 -999.00  +16.50  27.35     38   +2.40 1 1 1 1 1   888    0 15.37 36.76 ----- 31.4 27.4 185.0 39.3 22.2 -27.8 21.2 -28.4 22.8 -25.3 23.7 -27.4
2026-02-14T15:10:14.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:10:14.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:10:14.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.548371
2026-02-14T15:10:14.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:10:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:10:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:10:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:10:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:10:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:09:46', tmtdew=16.52, humidity=32.59, cloud=0.0, wind=34.44, temperature=16.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:09:39.254', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:10:14.501 [DEBUG] [Thread-187523] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:10:14.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-14T15:10:14.604 [DEBUG] [Thread-187526] [transport.py] [_log()] starting thread (client mode): 0xa2dee140
2026-02-14T15:10:14.604 [DEBUG] [Thread-187526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:10:14.618 [DEBUG] [Thread-187526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:10:14.618 [INFO] [Thread-187526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:10:14.626 [DEBUG] [Thread-187526] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:10:14.626 [DEBUG] [Thread-187526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:10:14.626 [DEBUG] [Thread-187526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:10:14.627 [DEBUG] [Thread-187526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:10:14.627 [DEBUG] [Thread-187526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:10:14.627 [DEBUG] [Thread-187526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:10:14.627 [DEBUG] [Thread-187526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:10:14.627 [DEBUG] [Thread-187526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:10:14.627 [DEBUG] [Thread-187526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:10:14.627 [DEBUG] [Thread-187526] [transport.py] [_log()] client lang: <none>
2026-02-14T15:10:14.627 [DEBUG] [Thread-187526] [transport.py] [_log()] server lang: <none>
2026-02-14T15:10:14.627 [DEBUG] [Thread-187526] [transport.py] [_log()] kex follows: False
2026-02-14T15:10:14.628 [DEBUG] [Thread-187526] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:10:14.628 [DEBUG] [Thread-187526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:10:14.628 [DEBUG] [Thread-187526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:10:14.628 [DEBUG] [Thread-187526] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:10:14.628 [DEBUG] [Thread-187526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:10:14.628 [DEBUG] [Thread-187526] [transport.py] [_log()] Compression: none
2026-02-14T15:10:14.628 [DEBUG] [Thread-187526] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:10:14.686 [DEBUG] [Thread-187526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:10:14.687 [DEBUG] [Thread-187526] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:10:14.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:10:14.688 [DEBUG] [Thread-187526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:10:14.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:10:14.742 [DEBUG] [Thread-187526] [transport.py] [_log()] userauth is OK
2026-02-14T15:10:14.742 [DEBUG] [Thread-187526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:10:14.742 [DEBUG] [Thread-187526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:10:14.742 [DEBUG] [Thread-187526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:10:14.742 [DEBUG] [Thread-187526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:10:14.762 [INFO] [Thread-187526] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:10:14.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-14T15:10:14.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:10:15.629 [DEBUG] [Thread-187526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:10:15.629 [DEBUG] [Thread-187526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:10:15.676 [DEBUG] [Thread-187526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:10:15.677 [DEBUG] [Thread-187526] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:10:15.686 [DEBUG] [Thread-187526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:10:15.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:10:15.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-14T15:10:15.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-14T15:10:15.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:10:15.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:10:15.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:10:15.722 [DEBUG] [Thread-187526] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:10:24.048 [DEBUG] [Thread-187528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:10:28.057 [DEBUG] [Thread-187529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:10:39.098 [DEBUG] [Thread-187530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:10:44.522 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:10:44.523 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:10:45.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:10:45.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:10:45.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-14T15:10:47.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 10, 21), 16.46, 32.69, 0.0, 34.65, 16.52, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:10:47.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:10:21
2026-02-14T15:10:47.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:10:48.117 [DEBUG] [Thread-187531] [transport.py] [_log()] starting thread (client mode): 0xa2def340
2026-02-14T15:10:48.117 [DEBUG] [Thread-187531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:10:48.131 [DEBUG] [Thread-187531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:10:48.131 [INFO] [Thread-187531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:10:48.134 [DEBUG] [Thread-187531] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:10:48.134 [DEBUG] [Thread-187531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:10:48.134 [DEBUG] [Thread-187531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:10:48.134 [DEBUG] [Thread-187531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:10:48.134 [DEBUG] [Thread-187531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:10:48.134 [DEBUG] [Thread-187531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:10:48.134 [DEBUG] [Thread-187531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:10:48.134 [DEBUG] [Thread-187531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:10:48.134 [DEBUG] [Thread-187531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:10:48.134 [DEBUG] [Thread-187531] [transport.py] [_log()] client lang: <none>
2026-02-14T15:10:48.134 [DEBUG] [Thread-187531] [transport.py] [_log()] server lang: <none>
2026-02-14T15:10:48.134 [DEBUG] [Thread-187531] [transport.py] [_log()] kex follows: False
2026-02-14T15:10:48.134 [DEBUG] [Thread-187531] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:10:48.134 [DEBUG] [Thread-187531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:10:48.134 [DEBUG] [Thread-187531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:10:48.134 [DEBUG] [Thread-187531] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:10:48.134 [DEBUG] [Thread-187531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:10:48.134 [DEBUG] [Thread-187531] [transport.py] [_log()] Compression: none
2026-02-14T15:10:48.134 [DEBUG] [Thread-187531] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:10:48.145 [DEBUG] [Thread-187531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:10:48.146 [DEBUG] [Thread-187531] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:10:48.146 [DEBUG] [Thread-187531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:10:48.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:10:48.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:10:48.147 [DEBUG] [Thread-187531] [transport.py] [_log()] userauth is OK
2026-02-14T15:10:48.147 [DEBUG] [Thread-187531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:10:48.147 [DEBUG] [Thread-187531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:10:48.147 [DEBUG] [Thread-187531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:10:48.147 [DEBUG] [Thread-187531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:10:48.164 [INFO] [Thread-187531] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:10:48.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:10:48.815 [DEBUG] [Thread-187531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:10:48.816 [DEBUG] [Thread-187531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:10:48.816 [DEBUG] [Thread-187531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:10:48.856 [DEBUG] [Thread-187531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:10:48.856 [DEBUG] [Thread-187531] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:10:48.859 [DEBUG] [Thread-187531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:10:48.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:10:48.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:10:48.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:10:48.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:10:48.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:10:48.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:10:48.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:10:48.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:10:48.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:10:48.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.548719 -999.00  +16.40  23.39     39   +2.50 1 1 1 1 1   888    0 15.26 39.24 ----- 21.4 23.4 192.6 37.9 22.1 -28.5 21.0 -31.5 22.6 -27.5 23.6 -28.6
2026-02-14T15:10:48.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:10:48.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:10:48.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.548719
2026-02-14T15:10:48.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:10:48.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:10:48.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:10:48.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:10:48.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:10:48.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:10:21', tmtdew=16.46, humidity=32.69, cloud=0.0, wind=34.65, temperature=16.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:10:09.322', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:10:48.887 [DEBUG] [Thread-187531] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:10:48.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-14T15:10:48.983 [DEBUG] [Thread-187534] [transport.py] [_log()] starting thread (client mode): 0xa2decac0
2026-02-14T15:10:48.983 [DEBUG] [Thread-187534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:10:48.998 [DEBUG] [Thread-187534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:10:48.998 [INFO] [Thread-187534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:10:49.007 [DEBUG] [Thread-187534] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:10:49.007 [DEBUG] [Thread-187534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:10:49.007 [DEBUG] [Thread-187534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:10:49.007 [DEBUG] [Thread-187534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:10:49.007 [DEBUG] [Thread-187534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:10:49.008 [DEBUG] [Thread-187534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:10:49.008 [DEBUG] [Thread-187534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:10:49.008 [DEBUG] [Thread-187534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:10:49.008 [DEBUG] [Thread-187534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:10:49.008 [DEBUG] [Thread-187534] [transport.py] [_log()] client lang: <none>
2026-02-14T15:10:49.008 [DEBUG] [Thread-187534] [transport.py] [_log()] server lang: <none>
2026-02-14T15:10:49.008 [DEBUG] [Thread-187534] [transport.py] [_log()] kex follows: False
2026-02-14T15:10:49.008 [DEBUG] [Thread-187534] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:10:49.008 [DEBUG] [Thread-187534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:10:49.008 [DEBUG] [Thread-187534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:10:49.008 [DEBUG] [Thread-187534] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:10:49.008 [DEBUG] [Thread-187534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:10:49.008 [DEBUG] [Thread-187534] [transport.py] [_log()] Compression: none
2026-02-14T15:10:49.008 [DEBUG] [Thread-187534] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:10:49.063 [DEBUG] [Thread-187534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:10:49.064 [DEBUG] [Thread-187534] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:10:49.065 [DEBUG] [Thread-187534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:10:49.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:10:49.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:10:49.119 [DEBUG] [Thread-187534] [transport.py] [_log()] userauth is OK
2026-02-14T15:10:49.119 [DEBUG] [Thread-187534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:10:49.119 [DEBUG] [Thread-187534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:10:49.119 [DEBUG] [Thread-187534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:10:49.119 [DEBUG] [Thread-187534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:10:49.139 [INFO] [Thread-187534] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:10:49.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T15:10:49.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:10:49.954 [DEBUG] [Thread-187534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:10:49.954 [DEBUG] [Thread-187534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:10:50.002 [DEBUG] [Thread-187534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:10:50.003 [DEBUG] [Thread-187534] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:10:50.012 [DEBUG] [Thread-187534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:10:50.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:10:50.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-14T15:10:50.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:10:50.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:10:50.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:10:50.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:10:50.048 [DEBUG] [Thread-187534] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:10:54.132 [DEBUG] [Thread-187536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:11:09.186 [DEBUG] [Thread-187537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:11:20.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:11:20.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:11:20.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T15:11:21.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 10, 57), 16.13, 33.69, 0.0, 29.48, 16.51, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:11:21.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:10:57
2026-02-14T15:11:22.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:11:22.378 [DEBUG] [Thread-187538] [transport.py] [_log()] starting thread (client mode): 0xa2defb50
2026-02-14T15:11:22.378 [DEBUG] [Thread-187538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:11:22.398 [DEBUG] [Thread-187538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:11:22.398 [INFO] [Thread-187538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:11:22.401 [DEBUG] [Thread-187538] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:11:22.402 [DEBUG] [Thread-187538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:11:22.402 [DEBUG] [Thread-187538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:11:22.402 [DEBUG] [Thread-187538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:11:22.402 [DEBUG] [Thread-187538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:11:22.402 [DEBUG] [Thread-187538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:11:22.402 [DEBUG] [Thread-187538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:11:22.402 [DEBUG] [Thread-187538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:11:22.402 [DEBUG] [Thread-187538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:11:22.402 [DEBUG] [Thread-187538] [transport.py] [_log()] client lang: <none>
2026-02-14T15:11:22.402 [DEBUG] [Thread-187538] [transport.py] [_log()] server lang: <none>
2026-02-14T15:11:22.402 [DEBUG] [Thread-187538] [transport.py] [_log()] kex follows: False
2026-02-14T15:11:22.402 [DEBUG] [Thread-187538] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:11:22.402 [DEBUG] [Thread-187538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:11:22.402 [DEBUG] [Thread-187538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:11:22.402 [DEBUG] [Thread-187538] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:11:22.402 [DEBUG] [Thread-187538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:11:22.402 [DEBUG] [Thread-187538] [transport.py] [_log()] Compression: none
2026-02-14T15:11:22.402 [DEBUG] [Thread-187538] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:11:22.418 [DEBUG] [Thread-187538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:11:22.419 [DEBUG] [Thread-187538] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:11:22.419 [DEBUG] [Thread-187538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:11:22.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:11:22.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:11:22.421 [DEBUG] [Thread-187538] [transport.py] [_log()] userauth is OK
2026-02-14T15:11:22.421 [DEBUG] [Thread-187538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:11:22.421 [DEBUG] [Thread-187538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:11:22.421 [DEBUG] [Thread-187538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:11:22.422 [DEBUG] [Thread-187538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:11:22.439 [INFO] [Thread-187538] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:11:22.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:11:23.075 [DEBUG] [Thread-187538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:11:23.075 [DEBUG] [Thread-187538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:11:23.076 [DEBUG] [Thread-187538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:11:23.116 [DEBUG] [Thread-187538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:11:23.117 [DEBUG] [Thread-187538] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:11:23.119 [DEBUG] [Thread-187538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:11:23.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:11:23.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:11:23.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:11:23.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:11:23.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:11:23.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:11:23.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:11:23.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:11:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:11:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.549066 -999.00  +16.40  21.66     39   +2.50 1 1 1 1 1   888    0 15.10 40.98 ----- 24.0 21.7 190.2 32.3 22.1 -26.9 21.1 -28.8 22.7 -24.9 23.7 -27.5
2026-02-14T15:11:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:11:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:11:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.549066
2026-02-14T15:11:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:11:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:11:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:11:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:11:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:11:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:10:57', tmtdew=16.13, humidity=33.69, cloud=0.0, wind=29.48, temperature=16.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:10:39.302', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:11:23.136 [DEBUG] [Thread-187538] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:11: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-14T15:11:23.229 [DEBUG] [Thread-187541] [transport.py] [_log()] starting thread (client mode): 0xa2dee920
2026-02-14T15:11:23.229 [DEBUG] [Thread-187541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:11:23.247 [DEBUG] [Thread-187541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:11:23.247 [INFO] [Thread-187541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:11:23.255 [DEBUG] [Thread-187541] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:11:23.255 [DEBUG] [Thread-187541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:11:23.255 [DEBUG] [Thread-187541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:11:23.255 [DEBUG] [Thread-187541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:11:23.256 [DEBUG] [Thread-187541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:11:23.256 [DEBUG] [Thread-187541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:11:23.256 [DEBUG] [Thread-187541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:11:23.256 [DEBUG] [Thread-187541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:11:23.256 [DEBUG] [Thread-187541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:11:23.256 [DEBUG] [Thread-187541] [transport.py] [_log()] client lang: <none>
2026-02-14T15:11:23.256 [DEBUG] [Thread-187541] [transport.py] [_log()] server lang: <none>
2026-02-14T15:11:23.256 [DEBUG] [Thread-187541] [transport.py] [_log()] kex follows: False
2026-02-14T15:11:23.256 [DEBUG] [Thread-187541] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:11:23.256 [DEBUG] [Thread-187541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:11:23.257 [DEBUG] [Thread-187541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:11:23.257 [DEBUG] [Thread-187541] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:11:23.257 [DEBUG] [Thread-187541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:11:23.257 [DEBUG] [Thread-187541] [transport.py] [_log()] Compression: none
2026-02-14T15:11:23.257 [DEBUG] [Thread-187541] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:11:23.315 [DEBUG] [Thread-187541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:11:23.315 [DEBUG] [Thread-187541] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:11:23.316 [DEBUG] [Thread-187541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:11:23.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:11:23.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:11:23.373 [DEBUG] [Thread-187541] [transport.py] [_log()] userauth is OK
2026-02-14T15:11:23.373 [DEBUG] [Thread-187541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:11:23.373 [DEBUG] [Thread-187541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:11:23.373 [DEBUG] [Thread-187541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:11:23.373 [DEBUG] [Thread-187541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:11:23.395 [INFO] [Thread-187541] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:11:23.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-14T15:11:23.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:11:24.218 [DEBUG] [Thread-187541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:11:24.218 [DEBUG] [Thread-187541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:11:24.232 [DEBUG] [Thread-187543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:11:24.266 [DEBUG] [Thread-187541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:11:24.266 [DEBUG] [Thread-187541] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:11:24.275 [DEBUG] [Thread-187541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:11:24.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:11: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')
2026-02-14T15:11:24.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-14T15:11:24.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:11:24.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:11:24.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:11:24.309 [DEBUG] [Thread-187541] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:11:28.095 [DEBUG] [Thread-187544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:11:39.279 [DEBUG] [Thread-187545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:11:44.667 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:11:44.668 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:11:54.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:11:54.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:11:54.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-14T15:11:54.316 [DEBUG] [Thread-187546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:11:56.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 11, 32), 16.48, 32.94, 0.0, 27.93, 16.66, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:11:56.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:11:32
2026-02-14T15:11:56.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:11:56.785 [DEBUG] [Thread-187547] [transport.py] [_log()] starting thread (client mode): 0xa2def370
2026-02-14T15:11:56.785 [DEBUG] [Thread-187547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:11:56.806 [DEBUG] [Thread-187547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:11:56.806 [INFO] [Thread-187547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:11:56.809 [DEBUG] [Thread-187547] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:11:56.810 [DEBUG] [Thread-187547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:11:56.810 [DEBUG] [Thread-187547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:11:56.810 [DEBUG] [Thread-187547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:11:56.810 [DEBUG] [Thread-187547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:11:56.810 [DEBUG] [Thread-187547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:11:56.810 [DEBUG] [Thread-187547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:11:56.810 [DEBUG] [Thread-187547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:11:56.810 [DEBUG] [Thread-187547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:11:56.810 [DEBUG] [Thread-187547] [transport.py] [_log()] client lang: <none>
2026-02-14T15:11:56.810 [DEBUG] [Thread-187547] [transport.py] [_log()] server lang: <none>
2026-02-14T15:11:56.810 [DEBUG] [Thread-187547] [transport.py] [_log()] kex follows: False
2026-02-14T15:11:56.811 [DEBUG] [Thread-187547] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:11:56.811 [DEBUG] [Thread-187547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:11:56.811 [DEBUG] [Thread-187547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:11:56.811 [DEBUG] [Thread-187547] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:11:56.811 [DEBUG] [Thread-187547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:11:56.811 [DEBUG] [Thread-187547] [transport.py] [_log()] Compression: none
2026-02-14T15:11:56.811 [DEBUG] [Thread-187547] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:11:56.828 [DEBUG] [Thread-187547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:11:56.829 [DEBUG] [Thread-187547] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:11:56.829 [DEBUG] [Thread-187547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:11:56.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:11:56.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:11:56.831 [DEBUG] [Thread-187547] [transport.py] [_log()] userauth is OK
2026-02-14T15:11:56.832 [DEBUG] [Thread-187547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:11:56.832 [DEBUG] [Thread-187547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:11:56.832 [DEBUG] [Thread-187547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:11:56.832 [DEBUG] [Thread-187547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:11:56.847 [INFO] [Thread-187547] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:11:56.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:11:57.465 [DEBUG] [Thread-187547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:11:57.465 [DEBUG] [Thread-187547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:11:57.465 [DEBUG] [Thread-187547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:11:57.506 [DEBUG] [Thread-187547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:11:57.506 [DEBUG] [Thread-187547] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:11:57.510 [DEBUG] [Thread-187547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:11:57.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:11:57.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:11:57.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:11:57.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:11:57.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:11:57.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:11:57.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:11:57.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:11:57.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:11:57.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.549413 -999.00  +16.50  24.77     39   +2.60 1 1 1 1 1   888    0 15.08 40.58 ----- 24.8 24.8 186.4 31.4 22.1 -28.3 21.1 -27.9 22.8 -25.6 23.6 -26.6
2026-02-14T15:11:57.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:11:57.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:11:57.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.549413
2026-02-14T15:11:57.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:11:57.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:11:57.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:11:57.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:11:57.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:11:57.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:11:32', tmtdew=16.48, humidity=32.94, cloud=0.0, wind=27.93, temperature=16.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:11:09.283', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:11:57.536 [DEBUG] [Thread-187547] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:11:57.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-14T15:11:57.633 [DEBUG] [Thread-187550] [transport.py] [_log()] starting thread (client mode): 0xa2dec970
2026-02-14T15:11:57.633 [DEBUG] [Thread-187550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:11:57.647 [DEBUG] [Thread-187550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:11:57.648 [INFO] [Thread-187550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:11:57.655 [DEBUG] [Thread-187550] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:11:57.656 [DEBUG] [Thread-187550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:11:57.656 [DEBUG] [Thread-187550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:11:57.656 [DEBUG] [Thread-187550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:11:57.656 [DEBUG] [Thread-187550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:11:57.656 [DEBUG] [Thread-187550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:11:57.656 [DEBUG] [Thread-187550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:11:57.656 [DEBUG] [Thread-187550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:11:57.656 [DEBUG] [Thread-187550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:11:57.656 [DEBUG] [Thread-187550] [transport.py] [_log()] client lang: <none>
2026-02-14T15:11:57.657 [DEBUG] [Thread-187550] [transport.py] [_log()] server lang: <none>
2026-02-14T15:11:57.657 [DEBUG] [Thread-187550] [transport.py] [_log()] kex follows: False
2026-02-14T15:11:57.657 [DEBUG] [Thread-187550] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:11:57.657 [DEBUG] [Thread-187550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:11:57.657 [DEBUG] [Thread-187550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:11:57.657 [DEBUG] [Thread-187550] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:11:57.657 [DEBUG] [Thread-187550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:11:57.658 [DEBUG] [Thread-187550] [transport.py] [_log()] Compression: none
2026-02-14T15:11:57.658 [DEBUG] [Thread-187550] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:11:57.715 [DEBUG] [Thread-187550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:11:57.716 [DEBUG] [Thread-187550] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:11:57.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:11:57.717 [DEBUG] [Thread-187550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:11:57.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:11:57.774 [DEBUG] [Thread-187550] [transport.py] [_log()] userauth is OK
2026-02-14T15:11:57.775 [DEBUG] [Thread-187550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:11:57.775 [DEBUG] [Thread-187550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:11:57.775 [DEBUG] [Thread-187550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:11:57.775 [DEBUG] [Thread-187550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:11:57.793 [INFO] [Thread-187550] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:11:57.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T15:11:57.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:11:58.628 [DEBUG] [Thread-187550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:11:58.628 [DEBUG] [Thread-187550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:11:58.676 [DEBUG] [Thread-187550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:11:58.677 [DEBUG] [Thread-187550] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:11:58.689 [DEBUG] [Thread-187550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:11:58.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:11:58.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-14T15:11:58.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-14T15:11:58.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:11:58.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:11:58.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:11:58.733 [DEBUG] [Thread-187550] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:12:09.355 [DEBUG] [Thread-187552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:12:24.409 [DEBUG] [Thread-187553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:12:28.129 [DEBUG] [Thread-187554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:12:28.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:12:28.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:12:28.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-14T15:12:30.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 12, 8), 16.48, 33.02, 0.0, 28.88, 16.9, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:12:30.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:12:08
2026-02-14T15:12:30.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:12:31.081 [DEBUG] [Thread-187555] [transport.py] [_log()] starting thread (client mode): 0xa2dee8c0
2026-02-14T15:12:31.081 [DEBUG] [Thread-187555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:12:31.100 [DEBUG] [Thread-187555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:12:31.100 [INFO] [Thread-187555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:12:31.104 [DEBUG] [Thread-187555] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:12:31.104 [DEBUG] [Thread-187555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:12:31.104 [DEBUG] [Thread-187555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:12:31.104 [DEBUG] [Thread-187555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:12:31.104 [DEBUG] [Thread-187555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:12:31.104 [DEBUG] [Thread-187555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:12:31.104 [DEBUG] [Thread-187555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:12:31.104 [DEBUG] [Thread-187555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:12:31.104 [DEBUG] [Thread-187555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:12:31.104 [DEBUG] [Thread-187555] [transport.py] [_log()] client lang: <none>
2026-02-14T15:12:31.104 [DEBUG] [Thread-187555] [transport.py] [_log()] server lang: <none>
2026-02-14T15:12:31.105 [DEBUG] [Thread-187555] [transport.py] [_log()] kex follows: False
2026-02-14T15:12:31.105 [DEBUG] [Thread-187555] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:12:31.105 [DEBUG] [Thread-187555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:12:31.105 [DEBUG] [Thread-187555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:12:31.105 [DEBUG] [Thread-187555] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:12:31.105 [DEBUG] [Thread-187555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:12:31.105 [DEBUG] [Thread-187555] [transport.py] [_log()] Compression: none
2026-02-14T15:12:31.105 [DEBUG] [Thread-187555] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:12:31.128 [DEBUG] [Thread-187555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:12:31.129 [DEBUG] [Thread-187555] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:12:31.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:12:31.130 [DEBUG] [Thread-187555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:12:31.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:12:31.132 [DEBUG] [Thread-187555] [transport.py] [_log()] userauth is OK
2026-02-14T15:12:31.132 [DEBUG] [Thread-187555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:12:31.132 [DEBUG] [Thread-187555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:12:31.132 [DEBUG] [Thread-187555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:12:31.132 [DEBUG] [Thread-187555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:12:31.155 [INFO] [Thread-187555] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:12:31.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:12:31.944 [DEBUG] [Thread-187555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:12:31.944 [DEBUG] [Thread-187555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:12:31.945 [DEBUG] [Thread-187555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:12:31.985 [DEBUG] [Thread-187555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:12:31.985 [DEBUG] [Thread-187555] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:12:31.989 [DEBUG] [Thread-187555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:12:32.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:12:32.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:12:32.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:12:32.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:12:32.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:12:32.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:12:32.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:12:32.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:12:32.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:12:32.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.549760 -999.00  +16.10  26.28     39   +2.50 1 1 1 1 1   888    0 15.07 38.53 ----- 17.2 26.3 179.6 33.4 22.0 -28.7 20.9 -32.5 22.5 -27.5 23.5 -28.8
2026-02-14T15:12:32.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:12:32.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:12:32.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.549760
2026-02-14T15:12:32.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:12:32.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:12:32.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:12:32.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:12:32.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:12:32.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:12:08', tmtdew=16.48, humidity=33.02, cloud=0.0, wind=28.88, temperature=16.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:11:39.264', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:12:32.014 [DEBUG] [Thread-187555] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:12:32.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-14T15:12:32.115 [DEBUG] [Thread-187558] [transport.py] [_log()] starting thread (client mode): 0xa2dee170
2026-02-14T15:12:32.116 [DEBUG] [Thread-187558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:12:32.130 [DEBUG] [Thread-187558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:12:32.130 [INFO] [Thread-187558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:12:32.138 [DEBUG] [Thread-187558] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:12:32.138 [DEBUG] [Thread-187558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:12:32.138 [DEBUG] [Thread-187558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:12:32.138 [DEBUG] [Thread-187558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:12:32.138 [DEBUG] [Thread-187558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:12:32.138 [DEBUG] [Thread-187558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:12:32.138 [DEBUG] [Thread-187558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:12:32.138 [DEBUG] [Thread-187558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:12:32.138 [DEBUG] [Thread-187558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:12:32.138 [DEBUG] [Thread-187558] [transport.py] [_log()] client lang: <none>
2026-02-14T15:12:32.138 [DEBUG] [Thread-187558] [transport.py] [_log()] server lang: <none>
2026-02-14T15:12:32.138 [DEBUG] [Thread-187558] [transport.py] [_log()] kex follows: False
2026-02-14T15:12:32.138 [DEBUG] [Thread-187558] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:12:32.139 [DEBUG] [Thread-187558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:12:32.139 [DEBUG] [Thread-187558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:12:32.139 [DEBUG] [Thread-187558] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:12:32.139 [DEBUG] [Thread-187558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:12:32.139 [DEBUG] [Thread-187558] [transport.py] [_log()] Compression: none
2026-02-14T15:12:32.139 [DEBUG] [Thread-187558] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:12:32.196 [DEBUG] [Thread-187558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:12:32.197 [DEBUG] [Thread-187558] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:12:32.198 [DEBUG] [Thread-187558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:12:32.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:12:32.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:12:32.253 [DEBUG] [Thread-187558] [transport.py] [_log()] userauth is OK
2026-02-14T15:12:32.253 [DEBUG] [Thread-187558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:12:32.253 [DEBUG] [Thread-187558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:12:32.253 [DEBUG] [Thread-187558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:12:32.253 [DEBUG] [Thread-187558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:12:32.271 [INFO] [Thread-187558] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:12:32.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-14T15:12:32.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:12:33.085 [DEBUG] [Thread-187558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:12:33.085 [DEBUG] [Thread-187558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:12:33.133 [DEBUG] [Thread-187558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:12:33.133 [DEBUG] [Thread-187558] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:12:33.142 [DEBUG] [Thread-187558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:12:33.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:12:33.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-14T15:12:33.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:12:33.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:12:33.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:12:33.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:12:33.176 [DEBUG] [Thread-187558] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:12:39.445 [DEBUG] [Thread-187560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:12:44.808 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:12:44.809 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:12:54.497 [DEBUG] [Thread-187561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:13:03.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:13:03.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:13:03.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-14T15:13:05.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 12, 44), 16.7, 32.47, 0.0, 24.91, 17.19, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:13:05.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:12:44
2026-02-14T15:13:05.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:13:05.548 [DEBUG] [Thread-187562] [transport.py] [_log()] starting thread (client mode): 0xa2dee170
2026-02-14T15:13:05.548 [DEBUG] [Thread-187562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:13:05.570 [DEBUG] [Thread-187562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:13:05.571 [INFO] [Thread-187562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:13:05.574 [DEBUG] [Thread-187562] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:13:05.574 [DEBUG] [Thread-187562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:13:05.574 [DEBUG] [Thread-187562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:13:05.574 [DEBUG] [Thread-187562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:13:05.574 [DEBUG] [Thread-187562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:13:05.574 [DEBUG] [Thread-187562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:13:05.574 [DEBUG] [Thread-187562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:13:05.574 [DEBUG] [Thread-187562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:13:05.574 [DEBUG] [Thread-187562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:13:05.574 [DEBUG] [Thread-187562] [transport.py] [_log()] client lang: <none>
2026-02-14T15:13:05.574 [DEBUG] [Thread-187562] [transport.py] [_log()] server lang: <none>
2026-02-14T15:13:05.574 [DEBUG] [Thread-187562] [transport.py] [_log()] kex follows: False
2026-02-14T15:13:05.574 [DEBUG] [Thread-187562] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:13:05.574 [DEBUG] [Thread-187562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:13:05.574 [DEBUG] [Thread-187562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:13:05.574 [DEBUG] [Thread-187562] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:13:05.574 [DEBUG] [Thread-187562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:13:05.575 [DEBUG] [Thread-187562] [transport.py] [_log()] Compression: none
2026-02-14T15:13:05.575 [DEBUG] [Thread-187562] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:13:05.592 [DEBUG] [Thread-187562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:13:05.592 [DEBUG] [Thread-187562] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:13:05.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:13:05.594 [DEBUG] [Thread-187562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:13:05.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:13:05.596 [DEBUG] [Thread-187562] [transport.py] [_log()] userauth is OK
2026-02-14T15:13:05.596 [DEBUG] [Thread-187562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:13:05.596 [DEBUG] [Thread-187562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:13:05.597 [DEBUG] [Thread-187562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:13:05.597 [DEBUG] [Thread-187562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:13:05.622 [INFO] [Thread-187562] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:13:05.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:13:06.255 [DEBUG] [Thread-187562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:13:06.255 [DEBUG] [Thread-187562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:13:06.255 [DEBUG] [Thread-187562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:13:06.295 [DEBUG] [Thread-187562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:13:06.296 [DEBUG] [Thread-187562] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:13:06.299 [DEBUG] [Thread-187562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:13:06.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:13:06.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:13:06.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:13:06.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:13:06.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:13:06.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:13:06.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:13:06.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:13:06.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:13:06.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.550455 -999.00  +16.00  23.00     40   +2.50 1 1 1 1 1   888    0 15.11 35.16 ----- 26.9 23.0 174.4 34.4 21.9 -27.8 20.8 -30.1 22.4 -27.5 23.4 -28.2
2026-02-14T15:13:06.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:13:06.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:13:06.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.550455
2026-02-14T15:13:06.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:13:06.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:13:06.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:13:06.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:13:06.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:13:06.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:12:44', tmtdew=16.7, humidity=32.47, cloud=0.0, wind=24.91, temperature=17.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:12:39.312', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:13:06.328 [DEBUG] [Thread-187562] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:13:06.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-14T15:13:06.422 [DEBUG] [Thread-187565] [transport.py] [_log()] starting thread (client mode): 0xa2defa60
2026-02-14T15:13:06.423 [DEBUG] [Thread-187565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:13:06.438 [DEBUG] [Thread-187565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:13:06.438 [INFO] [Thread-187565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:13:06.446 [DEBUG] [Thread-187565] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:13:06.446 [DEBUG] [Thread-187565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:13:06.446 [DEBUG] [Thread-187565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:13:06.446 [DEBUG] [Thread-187565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:13:06.447 [DEBUG] [Thread-187565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:13:06.447 [DEBUG] [Thread-187565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:13:06.447 [DEBUG] [Thread-187565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:13:06.447 [DEBUG] [Thread-187565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:13:06.447 [DEBUG] [Thread-187565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:13:06.447 [DEBUG] [Thread-187565] [transport.py] [_log()] client lang: <none>
2026-02-14T15:13:06.447 [DEBUG] [Thread-187565] [transport.py] [_log()] server lang: <none>
2026-02-14T15:13:06.447 [DEBUG] [Thread-187565] [transport.py] [_log()] kex follows: False
2026-02-14T15:13:06.447 [DEBUG] [Thread-187565] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:13:06.447 [DEBUG] [Thread-187565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:13:06.448 [DEBUG] [Thread-187565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:13:06.448 [DEBUG] [Thread-187565] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:13:06.448 [DEBUG] [Thread-187565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:13:06.448 [DEBUG] [Thread-187565] [transport.py] [_log()] Compression: none
2026-02-14T15:13:06.448 [DEBUG] [Thread-187565] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:13:06.507 [DEBUG] [Thread-187565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:13:06.508 [DEBUG] [Thread-187565] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:13:06.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:13:06.510 [DEBUG] [Thread-187565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:13:06.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:13:06.566 [DEBUG] [Thread-187565] [transport.py] [_log()] userauth is OK
2026-02-14T15:13:06.567 [DEBUG] [Thread-187565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:13:06.567 [DEBUG] [Thread-187565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:13:06.567 [DEBUG] [Thread-187565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:13:06.567 [DEBUG] [Thread-187565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:13:06.589 [INFO] [Thread-187565] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:13:06.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-14T15:13:06.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:13:07.436 [DEBUG] [Thread-187565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:13:07.436 [DEBUG] [Thread-187565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:13:07.484 [DEBUG] [Thread-187565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:13:07.484 [DEBUG] [Thread-187565] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:13:07.492 [DEBUG] [Thread-187565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:13:07.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:13:07.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:13:07.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-14T15:13:07.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:13:07.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:13:07.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:13:07.525 [DEBUG] [Thread-187565] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:13:09.535 [DEBUG] [Thread-187567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:13:24.585 [DEBUG] [Thread-187568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:13:28.167 [DEBUG] [Thread-187569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:13:37.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:13:37.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:13:37.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-14T15:13:39.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 13, 19), 16.63, 32.57, 0.0, 31.21, 17.06, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:13:39.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:13:19
2026-02-14T15:13:39.621 [DEBUG] [Thread-187570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:13:39.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:13:40.052 [DEBUG] [Thread-187571] [transport.py] [_log()] starting thread (client mode): 0xa2defdf0
2026-02-14T15:13:40.052 [DEBUG] [Thread-187571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:13:40.062 [DEBUG] [Thread-187571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:13:40.062 [INFO] [Thread-187571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:13:40.065 [DEBUG] [Thread-187571] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:13:40.066 [DEBUG] [Thread-187571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:13:40.066 [DEBUG] [Thread-187571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:13:40.066 [DEBUG] [Thread-187571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:13:40.066 [DEBUG] [Thread-187571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:13:40.066 [DEBUG] [Thread-187571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:13:40.066 [DEBUG] [Thread-187571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:13:40.066 [DEBUG] [Thread-187571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:13:40.066 [DEBUG] [Thread-187571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:13:40.066 [DEBUG] [Thread-187571] [transport.py] [_log()] client lang: <none>
2026-02-14T15:13:40.066 [DEBUG] [Thread-187571] [transport.py] [_log()] server lang: <none>
2026-02-14T15:13:40.066 [DEBUG] [Thread-187571] [transport.py] [_log()] kex follows: False
2026-02-14T15:13:40.066 [DEBUG] [Thread-187571] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:13:40.066 [DEBUG] [Thread-187571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:13:40.066 [DEBUG] [Thread-187571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:13:40.066 [DEBUG] [Thread-187571] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:13:40.066 [DEBUG] [Thread-187571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:13:40.066 [DEBUG] [Thread-187571] [transport.py] [_log()] Compression: none
2026-02-14T15:13:40.066 [DEBUG] [Thread-187571] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:13:40.085 [DEBUG] [Thread-187571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:13:40.086 [DEBUG] [Thread-187571] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:13:40.086 [DEBUG] [Thread-187571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:13:40.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:13:40.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:13:40.088 [DEBUG] [Thread-187571] [transport.py] [_log()] userauth is OK
2026-02-14T15:13:40.088 [DEBUG] [Thread-187571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:13:40.088 [DEBUG] [Thread-187571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:13:40.088 [DEBUG] [Thread-187571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:13:40.088 [DEBUG] [Thread-187571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:13:40.113 [INFO] [Thread-187571] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:13:40.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:13:40.738 [DEBUG] [Thread-187571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:13:40.738 [DEBUG] [Thread-187571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:13:40.738 [DEBUG] [Thread-187571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:13:40.779 [DEBUG] [Thread-187571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:13:40.779 [DEBUG] [Thread-187571] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:13:40.782 [DEBUG] [Thread-187571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:13:40.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:13:40.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:13:40.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:13:40.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:13:40.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:13:40.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:13:40.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:13:40.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:13:40.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:13:40.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.550802 -999.00  +16.00  22.69     40   +2.50 1 1 1 1 1   888    0 14.82 34.88 ----- 24.4 22.7 183.2 32.6 21.9 -27.1 20.7 -27.0 22.4 -25.3 23.5 -26.9
2026-02-14T15:13:40.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:13:40.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:13:40.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.550802
2026-02-14T15:13:40.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:13:40.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:13:40.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:13:40.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:13:40.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:13:40.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:13:19', tmtdew=16.63, humidity=32.57, cloud=0.0, wind=31.21, temperature=17.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:13:09.293', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:13:40.806 [DEBUG] [Thread-187571] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:13:40.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T15:13:40.914 [DEBUG] [Thread-187574] [transport.py] [_log()] starting thread (client mode): 0xa2deccd0
2026-02-14T15:13:40.914 [DEBUG] [Thread-187574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:13:40.927 [DEBUG] [Thread-187574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:13:40.928 [INFO] [Thread-187574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:13:40.936 [DEBUG] [Thread-187574] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:13:40.936 [DEBUG] [Thread-187574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:13:40.936 [DEBUG] [Thread-187574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:13:40.936 [DEBUG] [Thread-187574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:13:40.936 [DEBUG] [Thread-187574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:13:40.936 [DEBUG] [Thread-187574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:13:40.936 [DEBUG] [Thread-187574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:13:40.936 [DEBUG] [Thread-187574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:13:40.936 [DEBUG] [Thread-187574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:13:40.936 [DEBUG] [Thread-187574] [transport.py] [_log()] client lang: <none>
2026-02-14T15:13:40.936 [DEBUG] [Thread-187574] [transport.py] [_log()] server lang: <none>
2026-02-14T15:13:40.937 [DEBUG] [Thread-187574] [transport.py] [_log()] kex follows: False
2026-02-14T15:13:40.937 [DEBUG] [Thread-187574] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:13:40.937 [DEBUG] [Thread-187574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:13:40.937 [DEBUG] [Thread-187574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:13:40.937 [DEBUG] [Thread-187574] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:13:40.937 [DEBUG] [Thread-187574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:13:40.937 [DEBUG] [Thread-187574] [transport.py] [_log()] Compression: none
2026-02-14T15:13:40.937 [DEBUG] [Thread-187574] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:13:40.990 [DEBUG] [Thread-187574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:13:40.990 [DEBUG] [Thread-187574] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:13:40.991 [DEBUG] [Thread-187574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:13:40.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:13:40.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:13:41.047 [DEBUG] [Thread-187574] [transport.py] [_log()] userauth is OK
2026-02-14T15:13:41.048 [DEBUG] [Thread-187574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:13:41.048 [DEBUG] [Thread-187574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:13:41.048 [DEBUG] [Thread-187574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:13:41.048 [DEBUG] [Thread-187574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:13:41.061 [INFO] [Thread-187574] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:13:41.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T15:13:41.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:13:41.880 [DEBUG] [Thread-187574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:13:41.880 [DEBUG] [Thread-187574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:13:41.928 [DEBUG] [Thread-187574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:13:41.929 [DEBUG] [Thread-187574] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:13:41.938 [DEBUG] [Thread-187574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:13:41.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:13:41.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-14T15:13:41.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-14T15:13:41.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:13:41.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:13:41.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:13:41.974 [DEBUG] [Thread-187574] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:13:44.951 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:13:44.953 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:13:54.657 [DEBUG] [Thread-187576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:14:09.714 [DEBUG] [Thread-187577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:14:11.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:14:11.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:14:12.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-14T15:14:14.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 13, 54), 16.09, 33.69, 0.0, 29.5, 16.59, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:14:14.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:13:54
2026-02-14T15:14:14.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:14:14.588 [DEBUG] [Thread-187578] [transport.py] [_log()] starting thread (client mode): 0xa2ded540
2026-02-14T15:14:14.588 [DEBUG] [Thread-187578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:14:14.608 [DEBUG] [Thread-187578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:14:14.608 [INFO] [Thread-187578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:14:14.611 [DEBUG] [Thread-187578] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:14:14.611 [DEBUG] [Thread-187578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:14:14.611 [DEBUG] [Thread-187578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:14:14.612 [DEBUG] [Thread-187578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:14:14.612 [DEBUG] [Thread-187578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:14:14.612 [DEBUG] [Thread-187578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:14:14.612 [DEBUG] [Thread-187578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:14:14.612 [DEBUG] [Thread-187578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:14:14.612 [DEBUG] [Thread-187578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:14:14.612 [DEBUG] [Thread-187578] [transport.py] [_log()] client lang: <none>
2026-02-14T15:14:14.612 [DEBUG] [Thread-187578] [transport.py] [_log()] server lang: <none>
2026-02-14T15:14:14.612 [DEBUG] [Thread-187578] [transport.py] [_log()] kex follows: False
2026-02-14T15:14:14.612 [DEBUG] [Thread-187578] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:14:14.612 [DEBUG] [Thread-187578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:14:14.612 [DEBUG] [Thread-187578] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:14:14.612 [DEBUG] [Thread-187578] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:14:14.612 [DEBUG] [Thread-187578] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:14:14.612 [DEBUG] [Thread-187578] [transport.py] [_log()] Compression: none
2026-02-14T15:14:14.612 [DEBUG] [Thread-187578] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:14:14.631 [DEBUG] [Thread-187578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:14:14.632 [DEBUG] [Thread-187578] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:14:14.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:14:14.633 [DEBUG] [Thread-187578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:14:14.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:14:14.635 [DEBUG] [Thread-187578] [transport.py] [_log()] userauth is OK
2026-02-14T15:14:14.635 [DEBUG] [Thread-187578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:14:14.635 [DEBUG] [Thread-187578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:14:14.636 [DEBUG] [Thread-187578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:14:14.636 [DEBUG] [Thread-187578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:14:14.659 [INFO] [Thread-187578] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:14:14.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:14:15.302 [DEBUG] [Thread-187578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:14:15.302 [DEBUG] [Thread-187578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:14:15.303 [DEBUG] [Thread-187578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:14:15.343 [DEBUG] [Thread-187578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:14:15.344 [DEBUG] [Thread-187578] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:14:15.347 [DEBUG] [Thread-187578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:14:15.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:14:15.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:14:15.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:14:15.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:14:15.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:14:15.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:14:15.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:14:15.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:14:15.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:14:15.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.551149 -999.00  +15.90  22.69     40   +2.50 1 1 1 1 1   888    0 14.87 31.96 ----- 20.7 22.7 167.4 34.6 21.8 -28.7 20.6 -31.0 22.3 -26.1 23.3 -28.0
2026-02-14T15:14:15.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:14:15.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:14:15.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.551149
2026-02-14T15:14:15.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:14:15.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:14:15.373 [DEBUG] [Thread-187578] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:14:15.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:14:15.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:14:15.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:14:15.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:13:54', tmtdew=16.09, humidity=33.69, cloud=0.0, wind=29.5, temperature=16.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:13:39.274', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:14:15.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-14T15:14:15.469 [DEBUG] [Thread-187581] [transport.py] [_log()] starting thread (client mode): 0xa2dee170
2026-02-14T15:14:15.469 [DEBUG] [Thread-187581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:14:15.483 [DEBUG] [Thread-187581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:14:15.483 [INFO] [Thread-187581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:14:15.491 [DEBUG] [Thread-187581] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:14:15.491 [DEBUG] [Thread-187581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:14:15.492 [DEBUG] [Thread-187581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:14:15.492 [DEBUG] [Thread-187581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:14:15.492 [DEBUG] [Thread-187581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:14:15.492 [DEBUG] [Thread-187581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:14:15.492 [DEBUG] [Thread-187581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:14:15.492 [DEBUG] [Thread-187581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:14:15.492 [DEBUG] [Thread-187581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:14:15.492 [DEBUG] [Thread-187581] [transport.py] [_log()] client lang: <none>
2026-02-14T15:14:15.492 [DEBUG] [Thread-187581] [transport.py] [_log()] server lang: <none>
2026-02-14T15:14:15.492 [DEBUG] [Thread-187581] [transport.py] [_log()] kex follows: False
2026-02-14T15:14:15.492 [DEBUG] [Thread-187581] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:14:15.492 [DEBUG] [Thread-187581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:14:15.492 [DEBUG] [Thread-187581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:14:15.492 [DEBUG] [Thread-187581] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:14:15.492 [DEBUG] [Thread-187581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:14:15.492 [DEBUG] [Thread-187581] [transport.py] [_log()] Compression: none
2026-02-14T15:14:15.492 [DEBUG] [Thread-187581] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:14:15.549 [DEBUG] [Thread-187581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:14:15.549 [DEBUG] [Thread-187581] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:14:15.549 [DEBUG] [Thread-187581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:14:15.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:14:15.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:14:15.606 [DEBUG] [Thread-187581] [transport.py] [_log()] userauth is OK
2026-02-14T15:14:15.607 [DEBUG] [Thread-187581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:14:15.607 [DEBUG] [Thread-187581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:14:15.607 [DEBUG] [Thread-187581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:14:15.607 [DEBUG] [Thread-187581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:14:15.625 [INFO] [Thread-187581] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:14:15.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-14T15:14:15.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:14:16.441 [DEBUG] [Thread-187581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:14:16.441 [DEBUG] [Thread-187581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:14:16.493 [DEBUG] [Thread-187581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:14:16.493 [DEBUG] [Thread-187581] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:14:16.505 [DEBUG] [Thread-187581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:14:16.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:14:16.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-14T15:14:16.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-14T15:14:16.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:14:16.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:14:16.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:14:16.541 [DEBUG] [Thread-187581] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:14:24.753 [DEBUG] [Thread-187583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:14:28.212 [DEBUG] [Thread-187584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:14:39.807 [DEBUG] [Thread-187585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:14:45.110 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:14:45.111 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:14:46.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:14:46.564 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:14:46.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-14T15:14:48.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 14, 29), 15.59, 34.7, 0.0, 22.46, 16.06, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:14:48.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:14:29
2026-02-14T15:14:48.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:14:48.891 [DEBUG] [Thread-187586] [transport.py] [_log()] starting thread (client mode): 0xa2defac0
2026-02-14T15:14:48.891 [DEBUG] [Thread-187586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:14:48.912 [DEBUG] [Thread-187586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:14:48.913 [INFO] [Thread-187586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:14:48.916 [DEBUG] [Thread-187586] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:14:48.916 [DEBUG] [Thread-187586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:14:48.916 [DEBUG] [Thread-187586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:14:48.917 [DEBUG] [Thread-187586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:14:48.917 [DEBUG] [Thread-187586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:14:48.917 [DEBUG] [Thread-187586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:14:48.917 [DEBUG] [Thread-187586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:14:48.917 [DEBUG] [Thread-187586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:14:48.917 [DEBUG] [Thread-187586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:14:48.917 [DEBUG] [Thread-187586] [transport.py] [_log()] client lang: <none>
2026-02-14T15:14:48.917 [DEBUG] [Thread-187586] [transport.py] [_log()] server lang: <none>
2026-02-14T15:14:48.917 [DEBUG] [Thread-187586] [transport.py] [_log()] kex follows: False
2026-02-14T15:14:48.917 [DEBUG] [Thread-187586] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:14:48.917 [DEBUG] [Thread-187586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:14:48.917 [DEBUG] [Thread-187586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:14:48.917 [DEBUG] [Thread-187586] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:14:48.917 [DEBUG] [Thread-187586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:14:48.917 [DEBUG] [Thread-187586] [transport.py] [_log()] Compression: none
2026-02-14T15:14:48.917 [DEBUG] [Thread-187586] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:14:48.935 [DEBUG] [Thread-187586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:14:48.935 [DEBUG] [Thread-187586] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:14:48.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:14:48.937 [DEBUG] [Thread-187586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:14:48.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:14:48.939 [DEBUG] [Thread-187586] [transport.py] [_log()] userauth is OK
2026-02-14T15:14:48.939 [DEBUG] [Thread-187586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:14:48.939 [DEBUG] [Thread-187586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:14:48.939 [DEBUG] [Thread-187586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:14:48.940 [DEBUG] [Thread-187586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:14:48.960 [INFO] [Thread-187586] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:14:48.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:14:49.596 [DEBUG] [Thread-187586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:14:49.597 [DEBUG] [Thread-187586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:14:49.597 [DEBUG] [Thread-187586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:14:49.637 [DEBUG] [Thread-187586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:14:49.638 [DEBUG] [Thread-187586] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:14:49.641 [DEBUG] [Thread-187586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:14:49.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:14:49.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:14:49.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:14:49.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:14:49.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:14:49.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:14:49.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:14:49.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:14:49.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:14:49.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.551496 -999.00  +16.10  17.10     40   +2.70 1 1 1 1 1   888    0 14.76 27.00 ----- 19.2 17.1 180.0 25.3 21.9 -26.9 21.0 -28.2 22.5 -25.5 23.5 -26.6
2026-02-14T15:14:49.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:14:49.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:14:49.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.551496
2026-02-14T15:14:49.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:14:49.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:14:49.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:14:49.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:14:49.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:14:49.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:14:29', tmtdew=15.59, humidity=34.7, cloud=0.0, wind=22.46, temperature=16.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:14:09.254', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:14:49.670 [DEBUG] [Thread-187586] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:14:49.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-14T15:14:49.767 [DEBUG] [Thread-187589] [transport.py] [_log()] starting thread (client mode): 0xa2def910
2026-02-14T15:14:49.767 [DEBUG] [Thread-187589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:14:49.782 [DEBUG] [Thread-187589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:14:49.782 [INFO] [Thread-187589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:14:49.789 [DEBUG] [Thread-187589] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:14:49.790 [DEBUG] [Thread-187589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:14:49.790 [DEBUG] [Thread-187589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:14:49.790 [DEBUG] [Thread-187589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:14:49.790 [DEBUG] [Thread-187589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:14:49.790 [DEBUG] [Thread-187589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:14:49.790 [DEBUG] [Thread-187589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:14:49.790 [DEBUG] [Thread-187589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:14:49.790 [DEBUG] [Thread-187589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:14:49.790 [DEBUG] [Thread-187589] [transport.py] [_log()] client lang: <none>
2026-02-14T15:14:49.790 [DEBUG] [Thread-187589] [transport.py] [_log()] server lang: <none>
2026-02-14T15:14:49.790 [DEBUG] [Thread-187589] [transport.py] [_log()] kex follows: False
2026-02-14T15:14:49.790 [DEBUG] [Thread-187589] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:14:49.790 [DEBUG] [Thread-187589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:14:49.790 [DEBUG] [Thread-187589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:14:49.790 [DEBUG] [Thread-187589] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:14:49.790 [DEBUG] [Thread-187589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:14:49.791 [DEBUG] [Thread-187589] [transport.py] [_log()] Compression: none
2026-02-14T15:14:49.791 [DEBUG] [Thread-187589] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:14:49.849 [DEBUG] [Thread-187589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:14:49.850 [DEBUG] [Thread-187589] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:14:49.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:14:49.851 [DEBUG] [Thread-187589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:14:49.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:14:49.909 [DEBUG] [Thread-187589] [transport.py] [_log()] userauth is OK
2026-02-14T15:14:49.909 [DEBUG] [Thread-187589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:14:49.909 [DEBUG] [Thread-187589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:14:49.909 [DEBUG] [Thread-187589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:14:49.909 [DEBUG] [Thread-187589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:14:49.927 [INFO] [Thread-187589] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:14:49.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-14T15:14:49.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:14:50.744 [DEBUG] [Thread-187589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:14:50.744 [DEBUG] [Thread-187589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:14:50.792 [DEBUG] [Thread-187589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:14:50.792 [DEBUG] [Thread-187589] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:14:50.801 [DEBUG] [Thread-187589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:14:50.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:14:50.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:14:50.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-14T15:14:50.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:14:50.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:14:50.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:14:50.835 [DEBUG] [Thread-187589] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:14:54.843 [DEBUG] [Thread-187591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:15:09.894 [DEBUG] [Thread-187592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:15:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:15:20.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:15:20.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T15:15:22.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 15, 4), 15.69, 34.53, 0.0, 25.94, 16.24, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:15:22.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:15:04
2026-02-14T15:15:23.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:15:23.201 [DEBUG] [Thread-187593] [transport.py] [_log()] starting thread (client mode): 0xa2d21e40
2026-02-14T15:15:23.201 [DEBUG] [Thread-187593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:15:23.221 [DEBUG] [Thread-187593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:15:23.221 [INFO] [Thread-187593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:15:23.224 [DEBUG] [Thread-187593] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:15:23.224 [DEBUG] [Thread-187593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:15:23.224 [DEBUG] [Thread-187593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:15:23.224 [DEBUG] [Thread-187593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:15:23.224 [DEBUG] [Thread-187593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:15:23.224 [DEBUG] [Thread-187593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:15:23.224 [DEBUG] [Thread-187593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:15:23.224 [DEBUG] [Thread-187593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:15:23.224 [DEBUG] [Thread-187593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:15:23.224 [DEBUG] [Thread-187593] [transport.py] [_log()] client lang: <none>
2026-02-14T15:15:23.224 [DEBUG] [Thread-187593] [transport.py] [_log()] server lang: <none>
2026-02-14T15:15:23.224 [DEBUG] [Thread-187593] [transport.py] [_log()] kex follows: False
2026-02-14T15:15:23.225 [DEBUG] [Thread-187593] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:15:23.225 [DEBUG] [Thread-187593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:15:23.225 [DEBUG] [Thread-187593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:15:23.225 [DEBUG] [Thread-187593] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:15:23.225 [DEBUG] [Thread-187593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:15:23.225 [DEBUG] [Thread-187593] [transport.py] [_log()] Compression: none
2026-02-14T15:15:23.225 [DEBUG] [Thread-187593] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:15:23.244 [DEBUG] [Thread-187593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:15:23.244 [DEBUG] [Thread-187593] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:15:23.245 [DEBUG] [Thread-187593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:15:23.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:15:23.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:15:23.247 [DEBUG] [Thread-187593] [transport.py] [_log()] userauth is OK
2026-02-14T15:15:23.247 [DEBUG] [Thread-187593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:15:23.247 [DEBUG] [Thread-187593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:15:23.248 [DEBUG] [Thread-187593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:15:23.248 [DEBUG] [Thread-187593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:15:23.271 [INFO] [Thread-187593] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:15:23.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:15:23.899 [DEBUG] [Thread-187593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:15:23.899 [DEBUG] [Thread-187593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:15:23.899 [DEBUG] [Thread-187593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:15:23.940 [DEBUG] [Thread-187593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:15:23.941 [DEBUG] [Thread-187593] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:15:23.944 [DEBUG] [Thread-187593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:15:23.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:15:23.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:15:23.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:15:23.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:15:23.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:15:23.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:15:23.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:15:23.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:15:23.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:15:23.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.551843 -999.00  +16.40  20.83     39   +2.60 1 1 1 1 1   888    0 14.61 23.56 ----- 13.7 20.8 171.4 32.0 21.9 -27.6 20.9 -31.0 22.5 -25.9 23.5 -27.7
2026-02-14T15:15:23.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:15:23.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:15:23.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.551843
2026-02-14T15:15:23.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:15:23.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:15:23.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:15:23.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:15:23.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:15:23.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:15:04', tmtdew=15.69, humidity=34.53, cloud=0.0, wind=25.94, temperature=16.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:14:39.235', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:15:23.973 [DEBUG] [Thread-187593] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:15:24.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-14T15:15:24.066 [DEBUG] [Thread-187596] [transport.py] [_log()] starting thread (client mode): 0xa2d21150
2026-02-14T15:15:24.066 [DEBUG] [Thread-187596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:15:24.080 [DEBUG] [Thread-187596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:15:24.080 [INFO] [Thread-187596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:15:24.088 [DEBUG] [Thread-187596] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:15:24.088 [DEBUG] [Thread-187596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:15:24.088 [DEBUG] [Thread-187596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:15:24.088 [DEBUG] [Thread-187596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:15:24.088 [DEBUG] [Thread-187596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:15:24.088 [DEBUG] [Thread-187596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:15:24.088 [DEBUG] [Thread-187596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:15:24.088 [DEBUG] [Thread-187596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:15:24.088 [DEBUG] [Thread-187596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:15:24.088 [DEBUG] [Thread-187596] [transport.py] [_log()] client lang: <none>
2026-02-14T15:15:24.088 [DEBUG] [Thread-187596] [transport.py] [_log()] server lang: <none>
2026-02-14T15:15:24.088 [DEBUG] [Thread-187596] [transport.py] [_log()] kex follows: False
2026-02-14T15:15:24.088 [DEBUG] [Thread-187596] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:15:24.088 [DEBUG] [Thread-187596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:15:24.088 [DEBUG] [Thread-187596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:15:24.088 [DEBUG] [Thread-187596] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:15:24.088 [DEBUG] [Thread-187596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:15:24.088 [DEBUG] [Thread-187596] [transport.py] [_log()] Compression: none
2026-02-14T15:15:24.088 [DEBUG] [Thread-187596] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:15:24.145 [DEBUG] [Thread-187596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:15:24.146 [DEBUG] [Thread-187596] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:15:24.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:15:24.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:15:24.146 [DEBUG] [Thread-187596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:15:24.203 [DEBUG] [Thread-187596] [transport.py] [_log()] userauth is OK
2026-02-14T15:15:24.203 [DEBUG] [Thread-187596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:15:24.203 [DEBUG] [Thread-187596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:15:24.203 [DEBUG] [Thread-187596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:15:24.203 [DEBUG] [Thread-187596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:15:24.217 [INFO] [Thread-187596] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:15:24.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T15:15:24.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:15:24.931 [DEBUG] [Thread-187598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:15:25.020 [DEBUG] [Thread-187596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:15:25.021 [DEBUG] [Thread-187596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:15:25.070 [DEBUG] [Thread-187596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:15:25.070 [DEBUG] [Thread-187596] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:15:25.079 [DEBUG] [Thread-187596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:15:25.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:15: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-14T15:15:25.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:15:25.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:15:25.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:15:25.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:15:25.116 [DEBUG] [Thread-187596] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:15:28.246 [DEBUG] [Thread-187599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:15:39.981 [DEBUG] [Thread-187600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:15:45.254 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:15:45.255 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:15:55.016 [DEBUG] [Thread-187601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:15:55.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:15:55.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:15: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-14T15:15:56.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 15, 40), 17.28, 31.24, 0.0, 43.82, 18.14, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:15:56.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:15:40
2026-02-14T15:15:57.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:15:57.382 [DEBUG] [Thread-187602] [transport.py] [_log()] starting thread (client mode): 0xa2d211b0
2026-02-14T15:15:57.382 [DEBUG] [Thread-187602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:15:57.401 [DEBUG] [Thread-187602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:15:57.401 [INFO] [Thread-187602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:15:57.404 [DEBUG] [Thread-187602] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:15:57.405 [DEBUG] [Thread-187602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:15:57.405 [DEBUG] [Thread-187602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:15:57.405 [DEBUG] [Thread-187602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:15:57.405 [DEBUG] [Thread-187602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:15:57.405 [DEBUG] [Thread-187602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:15:57.405 [DEBUG] [Thread-187602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:15:57.405 [DEBUG] [Thread-187602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:15:57.405 [DEBUG] [Thread-187602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:15:57.405 [DEBUG] [Thread-187602] [transport.py] [_log()] client lang: <none>
2026-02-14T15:15:57.405 [DEBUG] [Thread-187602] [transport.py] [_log()] server lang: <none>
2026-02-14T15:15:57.405 [DEBUG] [Thread-187602] [transport.py] [_log()] kex follows: False
2026-02-14T15:15:57.405 [DEBUG] [Thread-187602] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:15:57.405 [DEBUG] [Thread-187602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:15:57.406 [DEBUG] [Thread-187602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:15:57.406 [DEBUG] [Thread-187602] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:15:57.406 [DEBUG] [Thread-187602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:15:57.406 [DEBUG] [Thread-187602] [transport.py] [_log()] Compression: none
2026-02-14T15:15:57.406 [DEBUG] [Thread-187602] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:15:57.425 [DEBUG] [Thread-187602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:15:57.426 [DEBUG] [Thread-187602] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:15:57.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:15:57.427 [DEBUG] [Thread-187602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:15:57.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:15:57.429 [DEBUG] [Thread-187602] [transport.py] [_log()] userauth is OK
2026-02-14T15:15:57.429 [DEBUG] [Thread-187602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:15:57.430 [DEBUG] [Thread-187602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:15:57.430 [DEBUG] [Thread-187602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:15:57.430 [DEBUG] [Thread-187602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:15:57.466 [INFO] [Thread-187602] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:15:57.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:15:58.078 [DEBUG] [Thread-187602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:15:58.078 [DEBUG] [Thread-187602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:15:58.078 [DEBUG] [Thread-187602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:15:58.119 [DEBUG] [Thread-187602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:15:58.119 [DEBUG] [Thread-187602] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:15:58.122 [DEBUG] [Thread-187602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:15:58.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:15:58.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:15:58.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:15:58.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:15:58.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:15:58.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:15:58.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:15:58.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:15:58.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:15:58.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.552190 -999.00  +16.30  27.01     40   +2.70 1 1 1 1 1   888    0 14.26 16.92 ----- 32.4 27.0 165.0 45.0 22.0 -27.8 21.1 -28.2 22.6 -25.4 23.6 -27.5
2026-02-14T15:15:58.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:15:58.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:15:58.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.552190
2026-02-14T15:15:58.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:15:58.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:15:58.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:15:58.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:15:58.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:15:58.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:15:40', tmtdew=17.28, humidity=31.24, cloud=0.0, wind=43.82, temperature=18.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:15:09.216', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:15:58.146 [DEBUG] [Thread-187602] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:15:58.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-14T15:15:58.242 [DEBUG] [Thread-187605] [transport.py] [_log()] starting thread (client mode): 0xa2d20d30
2026-02-14T15:15:58.242 [DEBUG] [Thread-187605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:15:58.257 [DEBUG] [Thread-187605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:15:58.257 [INFO] [Thread-187605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:15:58.264 [DEBUG] [Thread-187605] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:15:58.265 [DEBUG] [Thread-187605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:15:58.265 [DEBUG] [Thread-187605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:15:58.265 [DEBUG] [Thread-187605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:15:58.265 [DEBUG] [Thread-187605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:15:58.265 [DEBUG] [Thread-187605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:15:58.265 [DEBUG] [Thread-187605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:15:58.265 [DEBUG] [Thread-187605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:15:58.265 [DEBUG] [Thread-187605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:15:58.265 [DEBUG] [Thread-187605] [transport.py] [_log()] client lang: <none>
2026-02-14T15:15:58.265 [DEBUG] [Thread-187605] [transport.py] [_log()] server lang: <none>
2026-02-14T15:15:58.265 [DEBUG] [Thread-187605] [transport.py] [_log()] kex follows: False
2026-02-14T15:15:58.265 [DEBUG] [Thread-187605] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:15:58.265 [DEBUG] [Thread-187605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:15:58.265 [DEBUG] [Thread-187605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:15:58.265 [DEBUG] [Thread-187605] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:15:58.265 [DEBUG] [Thread-187605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:15:58.265 [DEBUG] [Thread-187605] [transport.py] [_log()] Compression: none
2026-02-14T15:15:58.265 [DEBUG] [Thread-187605] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:15:58.327 [DEBUG] [Thread-187605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:15:58.328 [DEBUG] [Thread-187605] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:15:58.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:15:58.329 [DEBUG] [Thread-187605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:15:58.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:15:58.385 [DEBUG] [Thread-187605] [transport.py] [_log()] userauth is OK
2026-02-14T15:15:58.386 [DEBUG] [Thread-187605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:15:58.386 [DEBUG] [Thread-187605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:15:58.386 [DEBUG] [Thread-187605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:15:58.386 [DEBUG] [Thread-187605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:15:58.409 [INFO] [Thread-187605] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:15:58.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-14T15:15:58.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:15:59.234 [DEBUG] [Thread-187605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:15:59.234 [DEBUG] [Thread-187605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:15:59.282 [DEBUG] [Thread-187605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:15:59.282 [DEBUG] [Thread-187605] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:15:59.291 [DEBUG] [Thread-187605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:15:59.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:15:59.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-14T15:15:59.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-14T15:15:59.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:15:59.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:15:59.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:15:59.328 [DEBUG] [Thread-187605] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:16:10.052 [DEBUG] [Thread-187607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:16:25.113 [DEBUG] [Thread-187608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:16:28.299 [DEBUG] [Thread-187609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:16:29.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:16:29.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:16:29.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-14T15:16:31.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 16, 15), 16.19, 33.57, 0.0, 34.41, 16.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:16:31.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:16:15
2026-02-14T15:16:31.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:16:31.697 [DEBUG] [Thread-187610] [transport.py] [_log()] starting thread (client mode): 0xa2d20a60
2026-02-14T15:16:31.697 [DEBUG] [Thread-187610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:16:31.711 [DEBUG] [Thread-187610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:16:31.711 [INFO] [Thread-187610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:16:31.714 [DEBUG] [Thread-187610] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:16:31.714 [DEBUG] [Thread-187610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:16:31.714 [DEBUG] [Thread-187610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:16:31.714 [DEBUG] [Thread-187610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:16:31.714 [DEBUG] [Thread-187610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:16:31.714 [DEBUG] [Thread-187610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:16:31.714 [DEBUG] [Thread-187610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:16:31.714 [DEBUG] [Thread-187610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:16:31.714 [DEBUG] [Thread-187610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:16:31.714 [DEBUG] [Thread-187610] [transport.py] [_log()] client lang: <none>
2026-02-14T15:16:31.714 [DEBUG] [Thread-187610] [transport.py] [_log()] server lang: <none>
2026-02-14T15:16:31.714 [DEBUG] [Thread-187610] [transport.py] [_log()] kex follows: False
2026-02-14T15:16:31.714 [DEBUG] [Thread-187610] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:16:31.714 [DEBUG] [Thread-187610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:16:31.714 [DEBUG] [Thread-187610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:16:31.714 [DEBUG] [Thread-187610] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:16:31.714 [DEBUG] [Thread-187610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:16:31.714 [DEBUG] [Thread-187610] [transport.py] [_log()] Compression: none
2026-02-14T15:16:31.714 [DEBUG] [Thread-187610] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:16:31.731 [DEBUG] [Thread-187610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:16:31.732 [DEBUG] [Thread-187610] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:16:31.732 [DEBUG] [Thread-187610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:16:31.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:16:31.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:16:31.734 [DEBUG] [Thread-187610] [transport.py] [_log()] userauth is OK
2026-02-14T15:16:31.734 [DEBUG] [Thread-187610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:16:31.734 [DEBUG] [Thread-187610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:16:31.734 [DEBUG] [Thread-187610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:16:31.734 [DEBUG] [Thread-187610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:16:31.754 [INFO] [Thread-187610] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:16:31.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:16:32.548 [DEBUG] [Thread-187610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:16:32.548 [DEBUG] [Thread-187610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:16:32.549 [DEBUG] [Thread-187610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:16:32.589 [DEBUG] [Thread-187610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:16:32.590 [DEBUG] [Thread-187610] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:16:32.593 [DEBUG] [Thread-187610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:16:32.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:16:32.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:16:32.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:16:32.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:16:32.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:16:32.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:16:32.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:16:32.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:16:32.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:16:32.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.552538 -999.00  +16.20  19.48     40   +2.80 1 1 1 1 1   888    0 14.31 10.55 ----- 23.5 19.5 177.8 36.4 22.0 -26.8 20.9 -30.5 22.4 -26.0 23.4 -27.9
2026-02-14T15:16:32.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:16:32.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:16:32.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.552538
2026-02-14T15:16:32.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:16:32.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:16:32.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:16:32.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:16:32.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:16:32.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:16:15', tmtdew=16.19, humidity=33.57, cloud=0.0, wind=34.41, temperature=16.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:15:39.283', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:16:32.617 [DEBUG] [Thread-187610] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:16:32.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-14T15:16:32.713 [DEBUG] [Thread-187613] [transport.py] [_log()] starting thread (client mode): 0xa2d21510
2026-02-14T15:16:32.713 [DEBUG] [Thread-187613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:16:32.727 [DEBUG] [Thread-187613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:16:32.728 [INFO] [Thread-187613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:16:32.735 [DEBUG] [Thread-187613] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:16:32.736 [DEBUG] [Thread-187613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:16:32.736 [DEBUG] [Thread-187613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:16:32.736 [DEBUG] [Thread-187613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:16:32.736 [DEBUG] [Thread-187613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:16:32.736 [DEBUG] [Thread-187613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:16:32.736 [DEBUG] [Thread-187613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:16:32.737 [DEBUG] [Thread-187613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:16:32.737 [DEBUG] [Thread-187613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:16:32.737 [DEBUG] [Thread-187613] [transport.py] [_log()] client lang: <none>
2026-02-14T15:16:32.737 [DEBUG] [Thread-187613] [transport.py] [_log()] server lang: <none>
2026-02-14T15:16:32.737 [DEBUG] [Thread-187613] [transport.py] [_log()] kex follows: False
2026-02-14T15:16:32.737 [DEBUG] [Thread-187613] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:16:32.737 [DEBUG] [Thread-187613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:16:32.737 [DEBUG] [Thread-187613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:16:32.737 [DEBUG] [Thread-187613] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:16:32.738 [DEBUG] [Thread-187613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:16:32.738 [DEBUG] [Thread-187613] [transport.py] [_log()] Compression: none
2026-02-14T15:16:32.738 [DEBUG] [Thread-187613] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:16:32.796 [DEBUG] [Thread-187613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:16:32.797 [DEBUG] [Thread-187613] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:16:32.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:16:32.798 [DEBUG] [Thread-187613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:16:32.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:16:32.852 [DEBUG] [Thread-187613] [transport.py] [_log()] userauth is OK
2026-02-14T15:16:32.852 [DEBUG] [Thread-187613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:16:32.852 [DEBUG] [Thread-187613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:16:32.853 [DEBUG] [Thread-187613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:16:32.853 [DEBUG] [Thread-187613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:16:32.871 [INFO] [Thread-187613] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:16:32.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-14T15:16:32.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:16:33.673 [DEBUG] [Thread-187613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:16:33.674 [DEBUG] [Thread-187613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:16:33.721 [DEBUG] [Thread-187613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:16:33.721 [DEBUG] [Thread-187613] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:16:33.730 [DEBUG] [Thread-187613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:16:33.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:16:33.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-14T15:16:33.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:16:33.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:16:33.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:16:33.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:16:33.764 [DEBUG] [Thread-187613] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:16:40.151 [DEBUG] [Thread-187615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:16:45.398 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:16:45.400 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:16:55.201 [DEBUG] [Thread-187616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:17:03.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:17:03.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:17:03.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-14T15:17:05.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 16, 50), 16.16, 33.64, 0.0, 31.35, 16.76, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:17:05.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:16:50
2026-02-14T15:17:05.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:17:06.144 [DEBUG] [Thread-187617] [transport.py] [_log()] starting thread (client mode): 0xa2d229b0
2026-02-14T15:17:06.144 [DEBUG] [Thread-187617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:17:06.163 [DEBUG] [Thread-187617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:17:06.163 [INFO] [Thread-187617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:17:06.166 [DEBUG] [Thread-187617] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:17:06.167 [DEBUG] [Thread-187617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:17:06.167 [DEBUG] [Thread-187617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:17:06.167 [DEBUG] [Thread-187617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:17:06.167 [DEBUG] [Thread-187617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:17:06.167 [DEBUG] [Thread-187617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:17:06.167 [DEBUG] [Thread-187617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:17:06.167 [DEBUG] [Thread-187617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:17:06.167 [DEBUG] [Thread-187617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:17:06.167 [DEBUG] [Thread-187617] [transport.py] [_log()] client lang: <none>
2026-02-14T15:17:06.167 [DEBUG] [Thread-187617] [transport.py] [_log()] server lang: <none>
2026-02-14T15:17:06.167 [DEBUG] [Thread-187617] [transport.py] [_log()] kex follows: False
2026-02-14T15:17:06.167 [DEBUG] [Thread-187617] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:17:06.168 [DEBUG] [Thread-187617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:17:06.168 [DEBUG] [Thread-187617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:17:06.168 [DEBUG] [Thread-187617] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:17:06.168 [DEBUG] [Thread-187617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:17:06.168 [DEBUG] [Thread-187617] [transport.py] [_log()] Compression: none
2026-02-14T15:17:06.168 [DEBUG] [Thread-187617] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:17:06.185 [DEBUG] [Thread-187617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:17:06.185 [DEBUG] [Thread-187617] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:17:06.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:17:06.186 [DEBUG] [Thread-187617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:17:06.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:17:06.188 [DEBUG] [Thread-187617] [transport.py] [_log()] userauth is OK
2026-02-14T15:17:06.188 [DEBUG] [Thread-187617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:17:06.188 [DEBUG] [Thread-187617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:17:06.188 [DEBUG] [Thread-187617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:17:06.189 [DEBUG] [Thread-187617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:17:06.225 [INFO] [Thread-187617] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:17:06.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:17:06.873 [DEBUG] [Thread-187617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:17:06.874 [DEBUG] [Thread-187617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:17:06.874 [DEBUG] [Thread-187617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:17:06.914 [DEBUG] [Thread-187617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:17:06.915 [DEBUG] [Thread-187617] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:17:06.918 [DEBUG] [Thread-187617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:17:06.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:17:06.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:17:06.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:17:06.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:17:06.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:17:06.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:17:06.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:17:06.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:17:06.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:17:06.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.552885 -999.00  +16.30  19.30     39   +2.50 1 1 1 1 1   888    0 13.91 5.20 ----- 13.9 19.3 160.4 30.3 22.1 -27.6 21.1 -25.7 22.6 -23.8 23.7 -25.9
2026-02-14T15:17:06.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:17:06.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:17:06.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.552885
2026-02-14T15:17:06.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:17:06.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:17:06.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:17:06.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:17:06.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:17:06.946 [DEBUG] [Thread-187617] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:17:06.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:16:50', tmtdew=16.16, humidity=33.64, cloud=0.0, wind=31.35, temperature=16.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:16:09.264', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:17:07.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-14T15:17:07.050 [DEBUG] [Thread-187620] [transport.py] [_log()] starting thread (client mode): 0xa2d22ef0
2026-02-14T15:17:07.050 [DEBUG] [Thread-187620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:17:07.064 [DEBUG] [Thread-187620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:17:07.065 [INFO] [Thread-187620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:17:07.072 [DEBUG] [Thread-187620] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:17:07.072 [DEBUG] [Thread-187620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:17:07.072 [DEBUG] [Thread-187620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:17:07.072 [DEBUG] [Thread-187620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:17:07.073 [DEBUG] [Thread-187620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:17:07.073 [DEBUG] [Thread-187620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:17:07.073 [DEBUG] [Thread-187620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:17:07.073 [DEBUG] [Thread-187620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:17:07.073 [DEBUG] [Thread-187620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:17:07.073 [DEBUG] [Thread-187620] [transport.py] [_log()] client lang: <none>
2026-02-14T15:17:07.073 [DEBUG] [Thread-187620] [transport.py] [_log()] server lang: <none>
2026-02-14T15:17:07.073 [DEBUG] [Thread-187620] [transport.py] [_log()] kex follows: False
2026-02-14T15:17:07.073 [DEBUG] [Thread-187620] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:17:07.073 [DEBUG] [Thread-187620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:17:07.073 [DEBUG] [Thread-187620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:17:07.073 [DEBUG] [Thread-187620] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:17:07.073 [DEBUG] [Thread-187620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:17:07.073 [DEBUG] [Thread-187620] [transport.py] [_log()] Compression: none
2026-02-14T15:17:07.073 [DEBUG] [Thread-187620] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:17:07.131 [DEBUG] [Thread-187620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:17:07.131 [DEBUG] [Thread-187620] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:17:07.132 [DEBUG] [Thread-187620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:17:07.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:17:07.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:17:07.187 [DEBUG] [Thread-187620] [transport.py] [_log()] userauth is OK
2026-02-14T15:17:07.187 [DEBUG] [Thread-187620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:17:07.188 [DEBUG] [Thread-187620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:17:07.188 [DEBUG] [Thread-187620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:17:07.188 [DEBUG] [Thread-187620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:17:07.207 [INFO] [Thread-187620] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:17:07.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-14T15:17:07.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:17:08.057 [DEBUG] [Thread-187620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:17:08.057 [DEBUG] [Thread-187620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:17:08.105 [DEBUG] [Thread-187620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:17:08.105 [DEBUG] [Thread-187620] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:17:08.114 [DEBUG] [Thread-187620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:17:08.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:17: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')
2026-02-14T15:17:08.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:17:08.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:17:08.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:17:08.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:17:08.148 [DEBUG] [Thread-187620] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:17:10.236 [DEBUG] [Thread-187622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:17:25.289 [DEBUG] [Thread-187623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:17:28.341 [DEBUG] [Thread-187624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:17:38.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:17:38.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:17:38.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T15:17:40.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 17, 25), 16.24, 33.52, 0.0, 28.73, 16.94, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:17:40.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:17:25
2026-02-14T15:17:40.326 [DEBUG] [Thread-187625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:17:40.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:17:40.600 [DEBUG] [Thread-187626] [transport.py] [_log()] starting thread (client mode): 0xa2dc3340
2026-02-14T15:17:40.600 [DEBUG] [Thread-187626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:17:40.621 [DEBUG] [Thread-187626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:17:40.621 [INFO] [Thread-187626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:17:40.623 [DEBUG] [Thread-187626] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:17:40.623 [DEBUG] [Thread-187626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:17:40.623 [DEBUG] [Thread-187626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:17:40.623 [DEBUG] [Thread-187626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:17:40.623 [DEBUG] [Thread-187626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:17:40.623 [DEBUG] [Thread-187626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:17:40.623 [DEBUG] [Thread-187626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:17:40.623 [DEBUG] [Thread-187626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:17:40.623 [DEBUG] [Thread-187626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:17:40.623 [DEBUG] [Thread-187626] [transport.py] [_log()] client lang: <none>
2026-02-14T15:17:40.623 [DEBUG] [Thread-187626] [transport.py] [_log()] server lang: <none>
2026-02-14T15:17:40.623 [DEBUG] [Thread-187626] [transport.py] [_log()] kex follows: False
2026-02-14T15:17:40.623 [DEBUG] [Thread-187626] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:17:40.623 [DEBUG] [Thread-187626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:17:40.624 [DEBUG] [Thread-187626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:17:40.624 [DEBUG] [Thread-187626] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:17:40.624 [DEBUG] [Thread-187626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:17:40.624 [DEBUG] [Thread-187626] [transport.py] [_log()] Compression: none
2026-02-14T15:17:40.624 [DEBUG] [Thread-187626] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:17:40.637 [DEBUG] [Thread-187626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:17:40.638 [DEBUG] [Thread-187626] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:17:40.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:17:40.640 [DEBUG] [Thread-187626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:17:40.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:17:40.642 [DEBUG] [Thread-187626] [transport.py] [_log()] userauth is OK
2026-02-14T15:17:40.643 [DEBUG] [Thread-187626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:17:40.643 [DEBUG] [Thread-187626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:17:40.643 [DEBUG] [Thread-187626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:17:40.643 [DEBUG] [Thread-187626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:17:40.668 [INFO] [Thread-187626] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:17:40.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:17:41.270 [DEBUG] [Thread-187626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:17:41.270 [DEBUG] [Thread-187626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:17:41.271 [DEBUG] [Thread-187626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:17:41.311 [DEBUG] [Thread-187626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:17:41.312 [DEBUG] [Thread-187626] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:17:41.315 [DEBUG] [Thread-187626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:17:41.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:17:41.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:17:41.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:17:41.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:17:41.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:17:41.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:17:41.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:17:41.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:17:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:17:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.553579 -999.00  +16.50  26.72     39   +2.70 1 1 1 1 1   888    0 14.03 -4.90 ----- 27.7 26.7 177.2 34.0 22.1 -28.4 21.2 -28.6 22.7 -24.7 23.7 -28.6
2026-02-14T15:17:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:17:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:17:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.553579
2026-02-14T15:17:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:17:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:17:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:17:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:17:41.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:17:41.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:17:25', tmtdew=16.24, humidity=33.52, cloud=0.0, wind=28.73, temperature=16.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:17:09.226', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:17:41.345 [DEBUG] [Thread-187626] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:17:41.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T15:17:41.440 [DEBUG] [Thread-187629] [transport.py] [_log()] starting thread (client mode): 0xa2dc0700
2026-02-14T15:17:41.440 [DEBUG] [Thread-187629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:17:41.455 [DEBUG] [Thread-187629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:17:41.455 [INFO] [Thread-187629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:17:41.464 [DEBUG] [Thread-187629] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:17:41.464 [DEBUG] [Thread-187629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:17:41.464 [DEBUG] [Thread-187629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:17:41.464 [DEBUG] [Thread-187629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:17:41.464 [DEBUG] [Thread-187629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:17:41.464 [DEBUG] [Thread-187629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:17:41.464 [DEBUG] [Thread-187629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:17:41.464 [DEBUG] [Thread-187629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:17:41.464 [DEBUG] [Thread-187629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:17:41.464 [DEBUG] [Thread-187629] [transport.py] [_log()] client lang: <none>
2026-02-14T15:17:41.464 [DEBUG] [Thread-187629] [transport.py] [_log()] server lang: <none>
2026-02-14T15:17:41.464 [DEBUG] [Thread-187629] [transport.py] [_log()] kex follows: False
2026-02-14T15:17:41.464 [DEBUG] [Thread-187629] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:17:41.464 [DEBUG] [Thread-187629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:17:41.464 [DEBUG] [Thread-187629] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:17:41.464 [DEBUG] [Thread-187629] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:17:41.464 [DEBUG] [Thread-187629] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:17:41.464 [DEBUG] [Thread-187629] [transport.py] [_log()] Compression: none
2026-02-14T15:17:41.464 [DEBUG] [Thread-187629] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:17:41.521 [DEBUG] [Thread-187629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:17:41.521 [DEBUG] [Thread-187629] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:17:41.521 [DEBUG] [Thread-187629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:17:41.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:17:41.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:17:41.581 [DEBUG] [Thread-187629] [transport.py] [_log()] userauth is OK
2026-02-14T15:17:41.581 [DEBUG] [Thread-187629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:17:41.581 [DEBUG] [Thread-187629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:17:41.581 [DEBUG] [Thread-187629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:17:41.581 [DEBUG] [Thread-187629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:17:41.595 [INFO] [Thread-187629] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:17:41.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-14T15:17:41.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:17:42.432 [DEBUG] [Thread-187629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:17:42.432 [DEBUG] [Thread-187629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:17:42.479 [DEBUG] [Thread-187629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:17:42.480 [DEBUG] [Thread-187629] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:17:42.489 [DEBUG] [Thread-187629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:17:42.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:17:42.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')
2026-02-14T15:17:42.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:17:42.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:17:42.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:17:42.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:17:42.525 [DEBUG] [Thread-187629] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:17:45.542 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:17:45.544 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:17:55.363 [DEBUG] [Thread-187631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:18:10.424 [DEBUG] [Thread-187632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:18:12.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:18:12.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:18:12.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-14T15:18:14.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 18, 1), 16.31, 33.16, 0.0, 33.28, 16.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:18:14.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:18:01
2026-02-14T15:18:14.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:18:15.071 [DEBUG] [Thread-187633] [transport.py] [_log()] starting thread (client mode): 0xa2dc1030
2026-02-14T15:18:15.071 [DEBUG] [Thread-187633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:18:15.092 [DEBUG] [Thread-187633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:18:15.092 [INFO] [Thread-187633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:18:15.094 [DEBUG] [Thread-187633] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:18:15.094 [DEBUG] [Thread-187633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:18:15.094 [DEBUG] [Thread-187633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:18:15.094 [DEBUG] [Thread-187633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:18:15.094 [DEBUG] [Thread-187633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:18:15.095 [DEBUG] [Thread-187633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:18:15.095 [DEBUG] [Thread-187633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:18:15.095 [DEBUG] [Thread-187633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:18:15.095 [DEBUG] [Thread-187633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:18:15.095 [DEBUG] [Thread-187633] [transport.py] [_log()] client lang: <none>
2026-02-14T15:18:15.095 [DEBUG] [Thread-187633] [transport.py] [_log()] server lang: <none>
2026-02-14T15:18:15.095 [DEBUG] [Thread-187633] [transport.py] [_log()] kex follows: False
2026-02-14T15:18:15.095 [DEBUG] [Thread-187633] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:18:15.095 [DEBUG] [Thread-187633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:18:15.095 [DEBUG] [Thread-187633] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:18:15.095 [DEBUG] [Thread-187633] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:18:15.095 [DEBUG] [Thread-187633] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:18:15.095 [DEBUG] [Thread-187633] [transport.py] [_log()] Compression: none
2026-02-14T15:18:15.095 [DEBUG] [Thread-187633] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:18:15.104 [DEBUG] [Thread-187633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:18:15.104 [DEBUG] [Thread-187633] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:18:15.105 [DEBUG] [Thread-187633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:18:15.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:18:15.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:18:15.106 [DEBUG] [Thread-187633] [transport.py] [_log()] userauth is OK
2026-02-14T15:18:15.106 [DEBUG] [Thread-187633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:18:15.106 [DEBUG] [Thread-187633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:18:15.107 [DEBUG] [Thread-187633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:18:15.107 [DEBUG] [Thread-187633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:18:15.124 [INFO] [Thread-187633] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:18:15.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:18:15.724 [DEBUG] [Thread-187633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:18:15.724 [DEBUG] [Thread-187633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:18:15.725 [DEBUG] [Thread-187633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:18:15.765 [DEBUG] [Thread-187633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:18:15.766 [DEBUG] [Thread-187633] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:18:15.768 [DEBUG] [Thread-187633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:18:15.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:18:15.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:18:15.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:18:15.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:18:15.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:18:15.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:18:15.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:18:15.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:18:15.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:18:15.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.554274 -999.00  +16.60  21.96     39   +2.90 1 1 1 1 1   888    0 13.82 -12.12 ----- 28.0 22.0 166.2 36.7 22.1 -28.0 21.1 -28.6 22.6 -26.3 23.7 -27.7
2026-02-14T15:18:15.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:18:15.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:18:15.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.554274
2026-02-14T15:18:15.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:18:15.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:18:15.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:18:15.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:18:15.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:18:15.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:18:01', tmtdew=16.31, humidity=33.16, cloud=0.0, wind=33.28, temperature=16.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:18:09.274', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:18:15.794 [DEBUG] [Thread-187633] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:18:15.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-14T15:18:15.888 [DEBUG] [Thread-187636] [transport.py] [_log()] starting thread (client mode): 0xa2d20910
2026-02-14T15:18:15.889 [DEBUG] [Thread-187636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:18:15.903 [DEBUG] [Thread-187636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:18:15.903 [INFO] [Thread-187636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:18:15.910 [DEBUG] [Thread-187636] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:18:15.911 [DEBUG] [Thread-187636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:18:15.911 [DEBUG] [Thread-187636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:18:15.911 [DEBUG] [Thread-187636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:18:15.911 [DEBUG] [Thread-187636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:18:15.911 [DEBUG] [Thread-187636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:18:15.911 [DEBUG] [Thread-187636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:18:15.911 [DEBUG] [Thread-187636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:18:15.911 [DEBUG] [Thread-187636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:18:15.911 [DEBUG] [Thread-187636] [transport.py] [_log()] client lang: <none>
2026-02-14T15:18:15.911 [DEBUG] [Thread-187636] [transport.py] [_log()] server lang: <none>
2026-02-14T15:18:15.911 [DEBUG] [Thread-187636] [transport.py] [_log()] kex follows: False
2026-02-14T15:18:15.911 [DEBUG] [Thread-187636] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:18:15.911 [DEBUG] [Thread-187636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:18:15.911 [DEBUG] [Thread-187636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:18:15.911 [DEBUG] [Thread-187636] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:18:15.911 [DEBUG] [Thread-187636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:18:15.911 [DEBUG] [Thread-187636] [transport.py] [_log()] Compression: none
2026-02-14T15:18:15.911 [DEBUG] [Thread-187636] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:18:15.969 [DEBUG] [Thread-187636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:18:15.969 [DEBUG] [Thread-187636] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:18:15.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:18:15.970 [DEBUG] [Thread-187636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:18:15.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:18:16.025 [DEBUG] [Thread-187636] [transport.py] [_log()] userauth is OK
2026-02-14T15:18:16.025 [DEBUG] [Thread-187636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:18:16.025 [DEBUG] [Thread-187636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:18:16.025 [DEBUG] [Thread-187636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:18:16.025 [DEBUG] [Thread-187636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:18:16.044 [INFO] [Thread-187636] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:18:16.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-14T15:18:16.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:18:16.878 [DEBUG] [Thread-187636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:18:16.878 [DEBUG] [Thread-187636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:18:16.926 [DEBUG] [Thread-187636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:18:16.926 [DEBUG] [Thread-187636] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:18:16.936 [DEBUG] [Thread-187636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:18:16.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:18:16.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-14T15:18:16.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-14T15:18:16.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:18:16.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:18:16.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:18:16.972 [DEBUG] [Thread-187636] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:18:25.464 [DEBUG] [Thread-187638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:18:28.394 [DEBUG] [Thread-187639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:18:40.524 [DEBUG] [Thread-187640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:18:45.685 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:18:45.687 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:18:46.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:18:46.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:18:46.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-14T15:18:49.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 18, 36), 17.81, 30.15, 0.0, 48.37, 18.44, 0, 0, 0, 2, 1, 0),)
2026-02-14T15:18:49.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:18:36
2026-02-14T15:18:49.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:18:49.593 [DEBUG] [Thread-187641] [transport.py] [_log()] starting thread (client mode): 0xa2dc02e0
2026-02-14T15:18:49.593 [DEBUG] [Thread-187641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:18:49.613 [DEBUG] [Thread-187641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:18:49.613 [INFO] [Thread-187641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:18:49.614 [DEBUG] [Thread-187641] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:18:49.615 [DEBUG] [Thread-187641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:18:49.615 [DEBUG] [Thread-187641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:18:49.615 [DEBUG] [Thread-187641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:18:49.615 [DEBUG] [Thread-187641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:18:49.615 [DEBUG] [Thread-187641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:18:49.615 [DEBUG] [Thread-187641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:18:49.615 [DEBUG] [Thread-187641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:18:49.615 [DEBUG] [Thread-187641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:18:49.615 [DEBUG] [Thread-187641] [transport.py] [_log()] client lang: <none>
2026-02-14T15:18:49.615 [DEBUG] [Thread-187641] [transport.py] [_log()] server lang: <none>
2026-02-14T15:18:49.615 [DEBUG] [Thread-187641] [transport.py] [_log()] kex follows: False
2026-02-14T15:18:49.615 [DEBUG] [Thread-187641] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:18:49.615 [DEBUG] [Thread-187641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:18:49.615 [DEBUG] [Thread-187641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:18:49.615 [DEBUG] [Thread-187641] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:18:49.615 [DEBUG] [Thread-187641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:18:49.615 [DEBUG] [Thread-187641] [transport.py] [_log()] Compression: none
2026-02-14T15:18:49.615 [DEBUG] [Thread-187641] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:18:49.623 [DEBUG] [Thread-187641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:18:49.624 [DEBUG] [Thread-187641] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:18:49.624 [DEBUG] [Thread-187641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:18:49.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:18:49.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:18:49.626 [DEBUG] [Thread-187641] [transport.py] [_log()] userauth is OK
2026-02-14T15:18:49.626 [DEBUG] [Thread-187641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:18:49.626 [DEBUG] [Thread-187641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:18:49.626 [DEBUG] [Thread-187641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:18:49.626 [DEBUG] [Thread-187641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:18:49.650 [INFO] [Thread-187641] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:18:49.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:18:50.238 [DEBUG] [Thread-187641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:18:50.239 [DEBUG] [Thread-187641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:18:50.239 [DEBUG] [Thread-187641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:18:50.279 [DEBUG] [Thread-187641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:18:50.280 [DEBUG] [Thread-187641] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:18:50.283 [DEBUG] [Thread-187641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:18:50.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:18:50.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:18:50.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:18:50.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:18:50.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:18:50.309 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:18:50.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:18:50.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:18:50.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:18:50.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.554621 -999.00  +16.80  22.38     38   +2.70 1 1 1 1 1   888    0 13.67 -15.10 ----- 23.8 22.4 149.6 36.1 22.2 -28.2 21.4 -27.5 22.8 -25.8 23.8 -28.1
2026-02-14T15:18:50.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:18:50.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:18:50.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.554621
2026-02-14T15:18:50.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:18:50.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:18:50.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:18:50.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:18:50.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:18:50.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:18:36', tmtdew=17.81, humidity=30.15, cloud=0.0, wind=48.37, temperature=18.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:18:39.254', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:18:50.312 [DEBUG] [Thread-187641] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:18:50.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-14T15:18:50.418 [DEBUG] [Thread-187644] [transport.py] [_log()] starting thread (client mode): 0xa2dc2fb0
2026-02-14T15:18:50.418 [DEBUG] [Thread-187644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:18:50.432 [DEBUG] [Thread-187644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:18:50.432 [INFO] [Thread-187644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:18:50.440 [DEBUG] [Thread-187644] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:18:50.440 [DEBUG] [Thread-187644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:18:50.440 [DEBUG] [Thread-187644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:18:50.440 [DEBUG] [Thread-187644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:18:50.440 [DEBUG] [Thread-187644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:18:50.440 [DEBUG] [Thread-187644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:18:50.440 [DEBUG] [Thread-187644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:18:50.440 [DEBUG] [Thread-187644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:18:50.440 [DEBUG] [Thread-187644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:18:50.440 [DEBUG] [Thread-187644] [transport.py] [_log()] client lang: <none>
2026-02-14T15:18:50.440 [DEBUG] [Thread-187644] [transport.py] [_log()] server lang: <none>
2026-02-14T15:18:50.440 [DEBUG] [Thread-187644] [transport.py] [_log()] kex follows: False
2026-02-14T15:18:50.440 [DEBUG] [Thread-187644] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:18:50.440 [DEBUG] [Thread-187644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:18:50.440 [DEBUG] [Thread-187644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:18:50.440 [DEBUG] [Thread-187644] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:18:50.440 [DEBUG] [Thread-187644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:18:50.440 [DEBUG] [Thread-187644] [transport.py] [_log()] Compression: none
2026-02-14T15:18:50.440 [DEBUG] [Thread-187644] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:18:50.497 [DEBUG] [Thread-187644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:18:50.498 [DEBUG] [Thread-187644] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:18:50.498 [DEBUG] [Thread-187644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:18:50.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:18:50.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:18:50.555 [DEBUG] [Thread-187644] [transport.py] [_log()] userauth is OK
2026-02-14T15:18:50.555 [DEBUG] [Thread-187644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:18:50.555 [DEBUG] [Thread-187644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:18:50.555 [DEBUG] [Thread-187644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:18:50.555 [DEBUG] [Thread-187644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:18:50.568 [INFO] [Thread-187644] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:18:50.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-14T15:18:50.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:18:51.407 [DEBUG] [Thread-187644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:18:51.407 [DEBUG] [Thread-187644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:18:51.455 [DEBUG] [Thread-187644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:18:51.456 [DEBUG] [Thread-187644] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:18:51.465 [DEBUG] [Thread-187644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:18:51.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:18:51.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-14T15:18:51.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-14T15:18:51.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:18:51.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:18:51.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:18:51.501 [DEBUG] [Thread-187644] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:18:55.562 [DEBUG] [Thread-187646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:19:10.616 [DEBUG] [Thread-187647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:19:21.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:19:21.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:19:21.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-14T15:19:23.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 19, 11), 16.57, 32.81, 0.0, 37.21, 16.97, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:19:23.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:19:11
2026-02-14T15:19:23.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:19:23.881 [DEBUG] [Thread-187648] [transport.py] [_log()] starting thread (client mode): 0xa2dc12d0
2026-02-14T15:19:23.881 [DEBUG] [Thread-187648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:19:23.901 [DEBUG] [Thread-187648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:19:23.901 [INFO] [Thread-187648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:19:23.904 [DEBUG] [Thread-187648] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:19:23.905 [DEBUG] [Thread-187648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:19:23.905 [DEBUG] [Thread-187648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:19:23.905 [DEBUG] [Thread-187648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:19:23.905 [DEBUG] [Thread-187648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:19:23.905 [DEBUG] [Thread-187648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:19:23.905 [DEBUG] [Thread-187648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:19:23.905 [DEBUG] [Thread-187648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:19:23.905 [DEBUG] [Thread-187648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:19:23.905 [DEBUG] [Thread-187648] [transport.py] [_log()] client lang: <none>
2026-02-14T15:19:23.905 [DEBUG] [Thread-187648] [transport.py] [_log()] server lang: <none>
2026-02-14T15:19:23.905 [DEBUG] [Thread-187648] [transport.py] [_log()] kex follows: False
2026-02-14T15:19:23.905 [DEBUG] [Thread-187648] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:19:23.905 [DEBUG] [Thread-187648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:19:23.905 [DEBUG] [Thread-187648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:19:23.905 [DEBUG] [Thread-187648] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:19:23.905 [DEBUG] [Thread-187648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:19:23.905 [DEBUG] [Thread-187648] [transport.py] [_log()] Compression: none
2026-02-14T15:19:23.905 [DEBUG] [Thread-187648] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:19:23.920 [DEBUG] [Thread-187648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:19:23.921 [DEBUG] [Thread-187648] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:19:23.921 [DEBUG] [Thread-187648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:19:23.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:19:23.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:19:23.923 [DEBUG] [Thread-187648] [transport.py] [_log()] userauth is OK
2026-02-14T15:19:23.923 [DEBUG] [Thread-187648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:19:23.923 [DEBUG] [Thread-187648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:19:23.923 [DEBUG] [Thread-187648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:19:23.923 [DEBUG] [Thread-187648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:19:23.948 [INFO] [Thread-187648] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:19:23.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:19:24.579 [DEBUG] [Thread-187648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:19:24.579 [DEBUG] [Thread-187648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:19:24.579 [DEBUG] [Thread-187648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:19:24.620 [DEBUG] [Thread-187648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:19:24.620 [DEBUG] [Thread-187648] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:19:24.623 [DEBUG] [Thread-187648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:19:24.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:19:24.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:19:24.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:19:24.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:19:24.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:19:24.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:19:24.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:19:24.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:19:24.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:19:24.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.554968 -999.00  +16.60  23.95     38   +2.50 1 1 1 1 1   888    0 13.84 -16.38 ----- 24.9 23.9 159.8 44.1 22.1 -27.3 21.4 -27.1 22.7 -26.1 23.7 -27.5
2026-02-14T15:19:24.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:19:24.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:19:24.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.554968
2026-02-14T15:19:24.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:19:24.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:19:24.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:19:24.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:19:24.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:19:24.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:19:11', tmtdew=16.57, humidity=32.81, cloud=0.0, wind=37.21, temperature=16.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:19:09.235', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:19:24.651 [DEBUG] [Thread-187648] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:19:24.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-14T15:19:25.657 [DEBUG] [Thread-187651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:19:28.440 [DEBUG] [Thread-187652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:19:40.711 [DEBUG] [Thread-187653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:19:45.830 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:19:45.831 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:19:55.744 [DEBUG] [Thread-187654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:20:10.783 [DEBUG] [Thread-187655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:20:25.822 [DEBUG] [Thread-187656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:20:28.494 [DEBUG] [Thread-187657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:20:40.861 [DEBUG] [Thread-187658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:20:45.972 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:20:45.973 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:20:55.895 [DEBUG] [Thread-187659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:21:10.929 [DEBUG] [Thread-187660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:21:25.965 [DEBUG] [Thread-187661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:21:28.536 [DEBUG] [Thread-187662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:21:39.383 [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-14T15:21:41.004 [DEBUG] [Thread-187663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:21:46.113 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:21:46.114 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:21:56.039 [DEBUG] [Thread-187664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:22:09.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:22:09.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:22:09.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-14T15:22:11.074 [DEBUG] [Thread-187665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:22:11.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 21, 33), 16.87, 31.68, 0.0, 33.86, 16.84, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:22:11.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:21:33
2026-02-14T15:22:11.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:22:12.148 [DEBUG] [Thread-187666] [transport.py] [_log()] starting thread (client mode): 0xa2d226b0
2026-02-14T15:22:12.148 [DEBUG] [Thread-187666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:22:12.169 [DEBUG] [Thread-187666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:22:12.169 [INFO] [Thread-187666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:22:12.172 [DEBUG] [Thread-187666] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:22:12.172 [DEBUG] [Thread-187666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:22:12.172 [DEBUG] [Thread-187666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:22:12.172 [DEBUG] [Thread-187666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:22:12.172 [DEBUG] [Thread-187666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:22:12.173 [DEBUG] [Thread-187666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:22:12.173 [DEBUG] [Thread-187666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:22:12.173 [DEBUG] [Thread-187666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:22:12.173 [DEBUG] [Thread-187666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:22:12.173 [DEBUG] [Thread-187666] [transport.py] [_log()] client lang: <none>
2026-02-14T15:22:12.173 [DEBUG] [Thread-187666] [transport.py] [_log()] server lang: <none>
2026-02-14T15:22:12.173 [DEBUG] [Thread-187666] [transport.py] [_log()] kex follows: False
2026-02-14T15:22:12.173 [DEBUG] [Thread-187666] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:22:12.173 [DEBUG] [Thread-187666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:22:12.173 [DEBUG] [Thread-187666] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:22:12.173 [DEBUG] [Thread-187666] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:22:12.173 [DEBUG] [Thread-187666] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:22:12.173 [DEBUG] [Thread-187666] [transport.py] [_log()] Compression: none
2026-02-14T15:22:12.173 [DEBUG] [Thread-187666] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:22:12.191 [DEBUG] [Thread-187666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:22:12.192 [DEBUG] [Thread-187666] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:22:12.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:22:12.193 [DEBUG] [Thread-187666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:22:12.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:22:12.195 [DEBUG] [Thread-187666] [transport.py] [_log()] userauth is OK
2026-02-14T15:22:12.195 [DEBUG] [Thread-187666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:22:12.195 [DEBUG] [Thread-187666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:22:12.195 [DEBUG] [Thread-187666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:22:12.196 [DEBUG] [Thread-187666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:22:12.221 [INFO] [Thread-187666] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:22:12.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:22:12.885 [DEBUG] [Thread-187666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:22:12.886 [DEBUG] [Thread-187666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:22:12.886 [DEBUG] [Thread-187666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:22:12.928 [DEBUG] [Thread-187666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:22:12.928 [DEBUG] [Thread-187666] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:22:12.931 [DEBUG] [Thread-187666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:22:12.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:22:12.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:22:12.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:22:12.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:22:12.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:22:12.950 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:22:12.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:22:12.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:22:12.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:22:12.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.556704 -999.00  +17.00  25.71     37   +2.20 1 1 1 1 1   888    0 13.83 -10.33 ----- 23.1 25.7 167.7 30.9 22.3 -26.7 21.3 -32.1 22.8 -26.8 23.9 -28.1
2026-02-14T15:22:12.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:22:12.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:22:12.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.556704
2026-02-14T15:22:12.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:22:12.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:22:12.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:22:12.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:22:12.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:22:12.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:21:33', tmtdew=16.87, humidity=31.68, cloud=0.0, wind=33.86, temperature=16.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:21:39.226', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:22:12.952 [DEBUG] [Thread-187666] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:22:13.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-14T15:22:13.050 [DEBUG] [Thread-187669] [transport.py] [_log()] starting thread (client mode): 0xa2d200a0
2026-02-14T15:22:13.050 [DEBUG] [Thread-187669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:22:13.065 [DEBUG] [Thread-187669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:22:13.065 [INFO] [Thread-187669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:22:13.072 [DEBUG] [Thread-187669] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:22:13.072 [DEBUG] [Thread-187669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:22:13.072 [DEBUG] [Thread-187669] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:22:13.072 [DEBUG] [Thread-187669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:22:13.072 [DEBUG] [Thread-187669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:22:13.072 [DEBUG] [Thread-187669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:22:13.072 [DEBUG] [Thread-187669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:22:13.072 [DEBUG] [Thread-187669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:22:13.072 [DEBUG] [Thread-187669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:22:13.072 [DEBUG] [Thread-187669] [transport.py] [_log()] client lang: <none>
2026-02-14T15:22:13.072 [DEBUG] [Thread-187669] [transport.py] [_log()] server lang: <none>
2026-02-14T15:22:13.072 [DEBUG] [Thread-187669] [transport.py] [_log()] kex follows: False
2026-02-14T15:22:13.072 [DEBUG] [Thread-187669] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:22:13.072 [DEBUG] [Thread-187669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:22:13.072 [DEBUG] [Thread-187669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:22:13.072 [DEBUG] [Thread-187669] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:22:13.072 [DEBUG] [Thread-187669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:22:13.072 [DEBUG] [Thread-187669] [transport.py] [_log()] Compression: none
2026-02-14T15:22:13.072 [DEBUG] [Thread-187669] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:22:13.129 [DEBUG] [Thread-187669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:22:13.129 [DEBUG] [Thread-187669] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:22:13.130 [DEBUG] [Thread-187669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:22:13.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:22:13.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:22:13.186 [DEBUG] [Thread-187669] [transport.py] [_log()] userauth is OK
2026-02-14T15:22:13.187 [DEBUG] [Thread-187669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:22:13.187 [DEBUG] [Thread-187669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:22:13.187 [DEBUG] [Thread-187669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:22:13.187 [DEBUG] [Thread-187669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:22:13.209 [INFO] [Thread-187669] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:22:13.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-14T15:22:13.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:22:14.088 [DEBUG] [Thread-187669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:22:14.088 [DEBUG] [Thread-187669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:22:14.136 [DEBUG] [Thread-187669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:22:14.136 [DEBUG] [Thread-187669] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:22:14.145 [DEBUG] [Thread-187669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:22:14.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:22:14.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:22:14.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-14T15:22:14.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:22:14.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:22:14.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:22:14.183 [DEBUG] [Thread-187669] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:22:26.116 [DEBUG] [Thread-187671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:22:28.579 [DEBUG] [Thread-187672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:22:41.167 [DEBUG] [Thread-187673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:22:44.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:22:44.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:22:44.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-14T15:22:45.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 22, 9), 16.94, 31.51, 0.0, 31.87, 16.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:22:46.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:22:09
2026-02-14T15:22:46.258 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:22:46.259 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:22:46.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:22:46.531 [DEBUG] [Thread-187674] [transport.py] [_log()] starting thread (client mode): 0xa2dc3e80
2026-02-14T15:22:46.531 [DEBUG] [Thread-187674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:22:46.543 [DEBUG] [Thread-187674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:22:46.543 [INFO] [Thread-187674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:22:46.547 [DEBUG] [Thread-187674] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:22:46.547 [DEBUG] [Thread-187674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:22:46.547 [DEBUG] [Thread-187674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:22:46.547 [DEBUG] [Thread-187674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:22:46.547 [DEBUG] [Thread-187674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:22:46.547 [DEBUG] [Thread-187674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:22:46.547 [DEBUG] [Thread-187674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:22:46.547 [DEBUG] [Thread-187674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:22:46.547 [DEBUG] [Thread-187674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:22:46.547 [DEBUG] [Thread-187674] [transport.py] [_log()] client lang: <none>
2026-02-14T15:22:46.547 [DEBUG] [Thread-187674] [transport.py] [_log()] server lang: <none>
2026-02-14T15:22:46.547 [DEBUG] [Thread-187674] [transport.py] [_log()] kex follows: False
2026-02-14T15:22:46.547 [DEBUG] [Thread-187674] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:22:46.547 [DEBUG] [Thread-187674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:22:46.547 [DEBUG] [Thread-187674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:22:46.547 [DEBUG] [Thread-187674] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:22:46.547 [DEBUG] [Thread-187674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:22:46.547 [DEBUG] [Thread-187674] [transport.py] [_log()] Compression: none
2026-02-14T15:22:46.547 [DEBUG] [Thread-187674] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:22:46.565 [DEBUG] [Thread-187674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:22:46.566 [DEBUG] [Thread-187674] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:22:46.566 [DEBUG] [Thread-187674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:22:46.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:22:46.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:22:46.568 [DEBUG] [Thread-187674] [transport.py] [_log()] userauth is OK
2026-02-14T15:22:46.569 [DEBUG] [Thread-187674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:22:46.569 [DEBUG] [Thread-187674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:22:46.569 [DEBUG] [Thread-187674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:22:46.569 [DEBUG] [Thread-187674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:22:46.582 [INFO] [Thread-187674] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:22:46.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:22:47.234 [DEBUG] [Thread-187674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:22:47.234 [DEBUG] [Thread-187674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:22:47.235 [DEBUG] [Thread-187674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:22:47.275 [DEBUG] [Thread-187674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:22:47.276 [DEBUG] [Thread-187674] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:22:47.279 [DEBUG] [Thread-187674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:22:47.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:22:47.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:22:47.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:22:47.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:22:47.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:22:47.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:22:47.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:22:47.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:22:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:22:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.557052 -999.00  +16.80  22.48     37   +2.10 1 1 1 1 1   888    0 13.82 -7.66 ----- 27.1 22.5 151.8 35.7 22.3 -28.5 21.6 -26.6 22.9 -26.4 24.0 -27.9
2026-02-14T15:22:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:22:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:22:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.557052
2026-02-14T15:22:47.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:22:47.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:22:47.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:22:47.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:22:47.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:22:47.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:22:09', tmtdew=16.94, humidity=31.51, cloud=0.0, wind=31.87, temperature=16.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:22:09.293', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:22:47.306 [DEBUG] [Thread-187674] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:22:47.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-14T15:22:47.401 [DEBUG] [Thread-187677] [transport.py] [_log()] starting thread (client mode): 0xa2dc0e20
2026-02-14T15:22:47.401 [DEBUG] [Thread-187677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:22:47.416 [DEBUG] [Thread-187677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:22:47.417 [INFO] [Thread-187677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:22:47.425 [DEBUG] [Thread-187677] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:22:47.425 [DEBUG] [Thread-187677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:22:47.425 [DEBUG] [Thread-187677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:22:47.425 [DEBUG] [Thread-187677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:22:47.425 [DEBUG] [Thread-187677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:22:47.425 [DEBUG] [Thread-187677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:22:47.425 [DEBUG] [Thread-187677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:22:47.425 [DEBUG] [Thread-187677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:22:47.425 [DEBUG] [Thread-187677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:22:47.425 [DEBUG] [Thread-187677] [transport.py] [_log()] client lang: <none>
2026-02-14T15:22:47.425 [DEBUG] [Thread-187677] [transport.py] [_log()] server lang: <none>
2026-02-14T15:22:47.425 [DEBUG] [Thread-187677] [transport.py] [_log()] kex follows: False
2026-02-14T15:22:47.425 [DEBUG] [Thread-187677] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:22:47.425 [DEBUG] [Thread-187677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:22:47.425 [DEBUG] [Thread-187677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:22:47.426 [DEBUG] [Thread-187677] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:22:47.426 [DEBUG] [Thread-187677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:22:47.426 [DEBUG] [Thread-187677] [transport.py] [_log()] Compression: none
2026-02-14T15:22:47.426 [DEBUG] [Thread-187677] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:22:47.481 [DEBUG] [Thread-187677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:22:47.482 [DEBUG] [Thread-187677] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:22:47.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:22:47.483 [DEBUG] [Thread-187677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:22:47.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:22:47.537 [DEBUG] [Thread-187677] [transport.py] [_log()] userauth is OK
2026-02-14T15:22:47.538 [DEBUG] [Thread-187677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:22:47.538 [DEBUG] [Thread-187677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:22:47.538 [DEBUG] [Thread-187677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:22:47.538 [DEBUG] [Thread-187677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:22:47.557 [INFO] [Thread-187677] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:22:47.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-14T15:22:47.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:22:48.423 [DEBUG] [Thread-187677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:22:48.424 [DEBUG] [Thread-187677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:22:48.471 [DEBUG] [Thread-187677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:22:48.471 [DEBUG] [Thread-187677] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:22:48.481 [DEBUG] [Thread-187677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:22:48.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:22: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')
2026-02-14T15:22:48.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-14T15:22:48.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:22:48.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:22:48.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:22:48.518 [DEBUG] [Thread-187677] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:22:56.206 [DEBUG] [Thread-187679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:23:11.268 [DEBUG] [Thread-187680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:23:18.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:23:18.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:23:18.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T15:23:20.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 22, 45), 16.83, 32.03, 0.0, 31.0, 16.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:23:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:22:45
2026-02-14T15:23:20.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:23:21.078 [DEBUG] [Thread-187681] [transport.py] [_log()] starting thread (client mode): 0xa2dc0cd0
2026-02-14T15:23:21.079 [DEBUG] [Thread-187681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:23:21.099 [DEBUG] [Thread-187681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:23:21.099 [INFO] [Thread-187681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:23:21.102 [DEBUG] [Thread-187681] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:23:21.102 [DEBUG] [Thread-187681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:23:21.102 [DEBUG] [Thread-187681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:23:21.102 [DEBUG] [Thread-187681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:23:21.102 [DEBUG] [Thread-187681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:23:21.102 [DEBUG] [Thread-187681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:23:21.102 [DEBUG] [Thread-187681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:23:21.103 [DEBUG] [Thread-187681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:23:21.103 [DEBUG] [Thread-187681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:23:21.103 [DEBUG] [Thread-187681] [transport.py] [_log()] client lang: <none>
2026-02-14T15:23:21.103 [DEBUG] [Thread-187681] [transport.py] [_log()] server lang: <none>
2026-02-14T15:23:21.103 [DEBUG] [Thread-187681] [transport.py] [_log()] kex follows: False
2026-02-14T15:23:21.103 [DEBUG] [Thread-187681] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:23:21.103 [DEBUG] [Thread-187681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:23:21.103 [DEBUG] [Thread-187681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:23:21.103 [DEBUG] [Thread-187681] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:23:21.103 [DEBUG] [Thread-187681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:23:21.103 [DEBUG] [Thread-187681] [transport.py] [_log()] Compression: none
2026-02-14T15:23:21.103 [DEBUG] [Thread-187681] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:23:21.121 [DEBUG] [Thread-187681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:23:21.122 [DEBUG] [Thread-187681] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:23:21.122 [DEBUG] [Thread-187681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:23:21.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:23:21.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:23:21.124 [DEBUG] [Thread-187681] [transport.py] [_log()] userauth is OK
2026-02-14T15:23:21.124 [DEBUG] [Thread-187681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:23:21.125 [DEBUG] [Thread-187681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:23:21.125 [DEBUG] [Thread-187681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:23:21.125 [DEBUG] [Thread-187681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:23:21.149 [INFO] [Thread-187681] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:23:21.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:23:21.799 [DEBUG] [Thread-187681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:23:21.799 [DEBUG] [Thread-187681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:23:21.800 [DEBUG] [Thread-187681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:23:21.840 [DEBUG] [Thread-187681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:23:21.841 [DEBUG] [Thread-187681] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:23:21.844 [DEBUG] [Thread-187681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:23:21.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:23:21.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:23:21.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:23:21.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:23:21.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:23:21.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:23:21.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:23:21.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:23:21.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:23:21.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.557399 -999.00  +16.10  23.06     37   +1.60 1 1 1 1 1   888    0 13.73 -6.25 ----- 17.7 23.1 147.0 37.2 22.2 -27.9 21.6 -27.3 22.9 -27.1 23.8 -29.5
2026-02-14T15:23:21.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:23:21.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:23:21.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.557399
2026-02-14T15:23:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:23:21.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:23:21.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:23:21.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:23:21.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:23:21.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:22:45', tmtdew=16.83, humidity=32.03, cloud=0.0, wind=31.0, temperature=16.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:22:39.274', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:23:21.872 [DEBUG] [Thread-187681] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:23:21.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-14T15:23:21.970 [DEBUG] [Thread-187684] [transport.py] [_log()] starting thread (client mode): 0xa2dc1b70
2026-02-14T15:23:21.970 [DEBUG] [Thread-187684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:23:21.985 [DEBUG] [Thread-187684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:23:21.985 [INFO] [Thread-187684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:23:21.993 [DEBUG] [Thread-187684] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:23:21.993 [DEBUG] [Thread-187684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:23:21.993 [DEBUG] [Thread-187684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:23:21.993 [DEBUG] [Thread-187684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:23:21.993 [DEBUG] [Thread-187684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:23:21.993 [DEBUG] [Thread-187684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:23:21.993 [DEBUG] [Thread-187684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:23:21.993 [DEBUG] [Thread-187684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:23:21.993 [DEBUG] [Thread-187684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:23:21.993 [DEBUG] [Thread-187684] [transport.py] [_log()] client lang: <none>
2026-02-14T15:23:21.993 [DEBUG] [Thread-187684] [transport.py] [_log()] server lang: <none>
2026-02-14T15:23:21.993 [DEBUG] [Thread-187684] [transport.py] [_log()] kex follows: False
2026-02-14T15:23:21.993 [DEBUG] [Thread-187684] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:23:21.993 [DEBUG] [Thread-187684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:23:21.993 [DEBUG] [Thread-187684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:23:21.994 [DEBUG] [Thread-187684] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:23:21.994 [DEBUG] [Thread-187684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:23:21.994 [DEBUG] [Thread-187684] [transport.py] [_log()] Compression: none
2026-02-14T15:23:21.994 [DEBUG] [Thread-187684] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:23:22.053 [DEBUG] [Thread-187684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:23:22.053 [DEBUG] [Thread-187684] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:23:22.054 [DEBUG] [Thread-187684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:23:22.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:23:22.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:23:22.109 [DEBUG] [Thread-187684] [transport.py] [_log()] userauth is OK
2026-02-14T15:23:22.109 [DEBUG] [Thread-187684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:23:22.109 [DEBUG] [Thread-187684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:23:22.109 [DEBUG] [Thread-187684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:23:22.109 [DEBUG] [Thread-187684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:23:22.128 [INFO] [Thread-187684] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:23:22.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T15:23:22.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:23:22.961 [DEBUG] [Thread-187684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:23:22.961 [DEBUG] [Thread-187684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:23:23.009 [DEBUG] [Thread-187684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:23:23.009 [DEBUG] [Thread-187684] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:23:23.017 [DEBUG] [Thread-187684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:23:23.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:23:23.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-14T15:23:23.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-14T15:23:23.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:23:23.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:23:23.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:23:23.049 [DEBUG] [Thread-187684] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:23:26.306 [DEBUG] [Thread-187686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:23:28.623 [DEBUG] [Thread-187687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:23:41.366 [DEBUG] [Thread-187688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:23:46.400 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:23:46.401 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:23:53.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:23:53.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:23:53.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T15:23:54.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 23, 20), 16.77, 32.18, 0.0, 30.51, 16.67, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:23:54.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:23:20
2026-02-14T15:23:55.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:23:55.549 [DEBUG] [Thread-187689] [transport.py] [_log()] starting thread (client mode): 0xa57b2f50
2026-02-14T15:23:55.550 [DEBUG] [Thread-187689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:23:55.570 [DEBUG] [Thread-187689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:23:55.570 [INFO] [Thread-187689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:23:55.573 [DEBUG] [Thread-187689] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:23:55.573 [DEBUG] [Thread-187689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:23:55.574 [DEBUG] [Thread-187689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:23:55.574 [DEBUG] [Thread-187689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:23:55.574 [DEBUG] [Thread-187689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:23:55.574 [DEBUG] [Thread-187689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:23:55.574 [DEBUG] [Thread-187689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:23:55.574 [DEBUG] [Thread-187689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:23:55.574 [DEBUG] [Thread-187689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:23:55.574 [DEBUG] [Thread-187689] [transport.py] [_log()] client lang: <none>
2026-02-14T15:23:55.574 [DEBUG] [Thread-187689] [transport.py] [_log()] server lang: <none>
2026-02-14T15:23:55.574 [DEBUG] [Thread-187689] [transport.py] [_log()] kex follows: False
2026-02-14T15:23:55.574 [DEBUG] [Thread-187689] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:23:55.574 [DEBUG] [Thread-187689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:23:55.574 [DEBUG] [Thread-187689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:23:55.574 [DEBUG] [Thread-187689] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:23:55.574 [DEBUG] [Thread-187689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:23:55.574 [DEBUG] [Thread-187689] [transport.py] [_log()] Compression: none
2026-02-14T15:23:55.574 [DEBUG] [Thread-187689] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:23:55.592 [DEBUG] [Thread-187689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:23:55.592 [DEBUG] [Thread-187689] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:23:55.593 [DEBUG] [Thread-187689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:23:55.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:23:55.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:23:55.595 [DEBUG] [Thread-187689] [transport.py] [_log()] userauth is OK
2026-02-14T15:23:55.595 [DEBUG] [Thread-187689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:23:55.596 [DEBUG] [Thread-187689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:23:55.596 [DEBUG] [Thread-187689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:23:55.596 [DEBUG] [Thread-187689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:23:55.629 [INFO] [Thread-187689] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:23:55.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:23:56.267 [DEBUG] [Thread-187689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:23:56.267 [DEBUG] [Thread-187689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:23:56.267 [DEBUG] [Thread-187689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:23:56.309 [DEBUG] [Thread-187689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:23:56.309 [DEBUG] [Thread-187689] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:23:56.311 [DEBUG] [Thread-187689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:23:56.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:23:56.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:23:56.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:23:56.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:23:56.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:23:56.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:23:56.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:23:56.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:23:56.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:23:56.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.558093 -999.00  +16.80  21.29     38   +2.50 1 1 1 1 1   888    0 13.90 -5.03 ----- 19.6 21.3 153.2 35.0 22.3 -27.4 21.7 -26.8 23.1 -24.5 24.1 -27.8
2026-02-14T15:23:56.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:23:56.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:23:56.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.558093
2026-02-14T15:23:56.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:23:56.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:23:56.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:23:56.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:23:56.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:23:56.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:23:20', tmtdew=16.77, humidity=32.18, cloud=0.0, wind=30.51, temperature=16.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:23:39.235', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:23:56.336 [DEBUG] [Thread-187689] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:23:56.404 [DEBUG] [Thread-187692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:23:56.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-14T15:23:56.431 [DEBUG] [Thread-187693] [transport.py] [_log()] starting thread (client mode): 0xa57b27d0
2026-02-14T15:23:56.431 [DEBUG] [Thread-187693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:23:56.451 [DEBUG] [Thread-187693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:23:56.451 [INFO] [Thread-187693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:23:56.458 [DEBUG] [Thread-187693] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:23:56.459 [DEBUG] [Thread-187693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:23:56.459 [DEBUG] [Thread-187693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:23:56.459 [DEBUG] [Thread-187693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:23:56.459 [DEBUG] [Thread-187693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:23:56.459 [DEBUG] [Thread-187693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:23:56.459 [DEBUG] [Thread-187693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:23:56.459 [DEBUG] [Thread-187693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:23:56.459 [DEBUG] [Thread-187693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:23:56.459 [DEBUG] [Thread-187693] [transport.py] [_log()] client lang: <none>
2026-02-14T15:23:56.459 [DEBUG] [Thread-187693] [transport.py] [_log()] server lang: <none>
2026-02-14T15:23:56.459 [DEBUG] [Thread-187693] [transport.py] [_log()] kex follows: False
2026-02-14T15:23:56.459 [DEBUG] [Thread-187693] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:23:56.459 [DEBUG] [Thread-187693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:23:56.460 [DEBUG] [Thread-187693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:23:56.460 [DEBUG] [Thread-187693] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:23:56.460 [DEBUG] [Thread-187693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:23:56.460 [DEBUG] [Thread-187693] [transport.py] [_log()] Compression: none
2026-02-14T15:23:56.460 [DEBUG] [Thread-187693] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:23:56.516 [DEBUG] [Thread-187693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:23:56.517 [DEBUG] [Thread-187693] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:23:56.517 [DEBUG] [Thread-187693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:23:56.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:23:56.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:23:56.572 [DEBUG] [Thread-187693] [transport.py] [_log()] userauth is OK
2026-02-14T15:23:56.572 [DEBUG] [Thread-187693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:23:56.573 [DEBUG] [Thread-187693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:23:56.573 [DEBUG] [Thread-187693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:23:56.573 [DEBUG] [Thread-187693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:23:56.592 [INFO] [Thread-187693] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:23:56.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-14T15:23:56.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:23:57.407 [DEBUG] [Thread-187693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:23:57.408 [DEBUG] [Thread-187693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:23:57.455 [DEBUG] [Thread-187693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:23:57.456 [DEBUG] [Thread-187693] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:23:57.465 [DEBUG] [Thread-187693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:23:57.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:23:57.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-14T15:23:57.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-14T15:23:57.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:23:57.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:23:57.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:23:57.502 [DEBUG] [Thread-187693] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:24:11.444 [DEBUG] [Thread-187695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:24:26.484 [DEBUG] [Thread-187696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:24:27.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:24:27.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:24:27.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-14T15:24:28.656 [DEBUG] [Thread-187697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:24:29.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 23, 55), 16.75, 32.36, 0.0, 34.57, 17.12, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:24:29.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:23:55
2026-02-14T15:24:29.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:24:29.873 [DEBUG] [Thread-187698] [transport.py] [_log()] starting thread (client mode): 0xa57b2dd0
2026-02-14T15:24:29.874 [DEBUG] [Thread-187698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:24:29.895 [DEBUG] [Thread-187698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:24:29.895 [INFO] [Thread-187698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:24:29.898 [DEBUG] [Thread-187698] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:24:29.899 [DEBUG] [Thread-187698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:24:29.899 [DEBUG] [Thread-187698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:24:29.899 [DEBUG] [Thread-187698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:24:29.899 [DEBUG] [Thread-187698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:24:29.899 [DEBUG] [Thread-187698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:24:29.899 [DEBUG] [Thread-187698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:24:29.899 [DEBUG] [Thread-187698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:24:29.899 [DEBUG] [Thread-187698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:24:29.899 [DEBUG] [Thread-187698] [transport.py] [_log()] client lang: <none>
2026-02-14T15:24:29.899 [DEBUG] [Thread-187698] [transport.py] [_log()] server lang: <none>
2026-02-14T15:24:29.900 [DEBUG] [Thread-187698] [transport.py] [_log()] kex follows: False
2026-02-14T15:24:29.900 [DEBUG] [Thread-187698] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:24:29.900 [DEBUG] [Thread-187698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:24:29.900 [DEBUG] [Thread-187698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:24:29.900 [DEBUG] [Thread-187698] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:24:29.900 [DEBUG] [Thread-187698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:24:29.900 [DEBUG] [Thread-187698] [transport.py] [_log()] Compression: none
2026-02-14T15:24:29.900 [DEBUG] [Thread-187698] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:24:29.921 [DEBUG] [Thread-187698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:24:29.922 [DEBUG] [Thread-187698] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:24:29.922 [DEBUG] [Thread-187698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:24:29.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:24:29.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:24:29.924 [DEBUG] [Thread-187698] [transport.py] [_log()] userauth is OK
2026-02-14T15:24:29.925 [DEBUG] [Thread-187698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:24:29.925 [DEBUG] [Thread-187698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:24:29.925 [DEBUG] [Thread-187698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:24:29.925 [DEBUG] [Thread-187698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:24:29.943 [INFO] [Thread-187698] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:24:29.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:24:30.547 [DEBUG] [Thread-187698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:24:30.547 [DEBUG] [Thread-187698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:24:30.547 [DEBUG] [Thread-187698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:24:30.588 [DEBUG] [Thread-187698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:24:30.588 [DEBUG] [Thread-187698] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:24:30.592 [DEBUG] [Thread-187698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:24:30.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:24:30.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:24:30.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:24:30.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:24:30.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:24:30.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:24:30.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:24:30.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:24:30.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:24:30.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.558440 -999.00  +16.60  22.49     38   +2.50 1 1 1 1 1   888    0 14.17 -4.61 ----- 27.1 22.5 139.6 31.2 22.4 -27.4 21.8 -27.6 23.1 -25.2 24.1 -28.7
2026-02-14T15:24:30.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:24:30.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:24:30.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.558440
2026-02-14T15:24:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:24:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:24:30.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:24:30.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:24:30.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:24:30.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:23:55', tmtdew=16.75, humidity=32.36, cloud=0.0, wind=34.57, temperature=17.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:24:09.216', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:24:30.616 [DEBUG] [Thread-187698] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:24:30.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-14T15:24:30.722 [DEBUG] [Thread-187701] [transport.py] [_log()] starting thread (client mode): 0xa57b39d0
2026-02-14T15:24:30.723 [DEBUG] [Thread-187701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:24:30.737 [DEBUG] [Thread-187701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:24:30.738 [INFO] [Thread-187701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:24:30.745 [DEBUG] [Thread-187701] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:24:30.746 [DEBUG] [Thread-187701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:24:30.746 [DEBUG] [Thread-187701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:24:30.746 [DEBUG] [Thread-187701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:24:30.746 [DEBUG] [Thread-187701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:24:30.746 [DEBUG] [Thread-187701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:24:30.746 [DEBUG] [Thread-187701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:24:30.746 [DEBUG] [Thread-187701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:24:30.747 [DEBUG] [Thread-187701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:24:30.747 [DEBUG] [Thread-187701] [transport.py] [_log()] client lang: <none>
2026-02-14T15:24:30.747 [DEBUG] [Thread-187701] [transport.py] [_log()] server lang: <none>
2026-02-14T15:24:30.747 [DEBUG] [Thread-187701] [transport.py] [_log()] kex follows: False
2026-02-14T15:24:30.747 [DEBUG] [Thread-187701] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:24:30.747 [DEBUG] [Thread-187701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:24:30.747 [DEBUG] [Thread-187701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:24:30.747 [DEBUG] [Thread-187701] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:24:30.748 [DEBUG] [Thread-187701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:24:30.748 [DEBUG] [Thread-187701] [transport.py] [_log()] Compression: none
2026-02-14T15:24:30.748 [DEBUG] [Thread-187701] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:24:30.812 [DEBUG] [Thread-187701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:24:30.813 [DEBUG] [Thread-187701] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:24:30.813 [DEBUG] [Thread-187701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:24:30.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:24:30.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:24:30.878 [DEBUG] [Thread-187701] [transport.py] [_log()] userauth is OK
2026-02-14T15:24:30.879 [DEBUG] [Thread-187701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:24:30.879 [DEBUG] [Thread-187701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:24:30.879 [DEBUG] [Thread-187701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:24:30.879 [DEBUG] [Thread-187701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:24:30.902 [INFO] [Thread-187701] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:24:30.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-14T15:24:30.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:24:31.755 [DEBUG] [Thread-187701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:24:31.755 [DEBUG] [Thread-187701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:24:31.803 [DEBUG] [Thread-187701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:24:31.803 [DEBUG] [Thread-187701] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:24:31.812 [DEBUG] [Thread-187701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:24:31.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:24:31.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:24:31.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-14T15:24:31.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:24:31.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:24:31.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:24:31.846 [DEBUG] [Thread-187701] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:24:41.524 [DEBUG] [Thread-187703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:24:46.539 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:24:46.540 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:24:56.576 [DEBUG] [Thread-187704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:25:01.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:25:01.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:25:01.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-14T15:25:03.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 24, 31), 16.44, 32.97, 0.0, 32.77, 16.86, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:25:03.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:24:31
2026-02-14T15:25:03.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:25:04.146 [DEBUG] [Thread-187705] [transport.py] [_log()] starting thread (client mode): 0xa57b3e80
2026-02-14T15:25:04.146 [DEBUG] [Thread-187705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:25:04.165 [DEBUG] [Thread-187705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:25:04.165 [INFO] [Thread-187705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:25:04.169 [DEBUG] [Thread-187705] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:25:04.169 [DEBUG] [Thread-187705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:25:04.169 [DEBUG] [Thread-187705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:25:04.169 [DEBUG] [Thread-187705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:25:04.169 [DEBUG] [Thread-187705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:25:04.169 [DEBUG] [Thread-187705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:25:04.169 [DEBUG] [Thread-187705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:25:04.169 [DEBUG] [Thread-187705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:25:04.169 [DEBUG] [Thread-187705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:25:04.169 [DEBUG] [Thread-187705] [transport.py] [_log()] client lang: <none>
2026-02-14T15:25:04.169 [DEBUG] [Thread-187705] [transport.py] [_log()] server lang: <none>
2026-02-14T15:25:04.169 [DEBUG] [Thread-187705] [transport.py] [_log()] kex follows: False
2026-02-14T15:25:04.169 [DEBUG] [Thread-187705] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:25:04.169 [DEBUG] [Thread-187705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:25:04.169 [DEBUG] [Thread-187705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:25:04.169 [DEBUG] [Thread-187705] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:25:04.169 [DEBUG] [Thread-187705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:25:04.169 [DEBUG] [Thread-187705] [transport.py] [_log()] Compression: none
2026-02-14T15:25:04.169 [DEBUG] [Thread-187705] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:25:04.185 [DEBUG] [Thread-187705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:25:04.186 [DEBUG] [Thread-187705] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:25:04.186 [DEBUG] [Thread-187705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:25:04.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:25:04.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:25:04.188 [DEBUG] [Thread-187705] [transport.py] [_log()] userauth is OK
2026-02-14T15:25:04.189 [DEBUG] [Thread-187705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:25:04.189 [DEBUG] [Thread-187705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:25:04.189 [DEBUG] [Thread-187705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:25:04.189 [DEBUG] [Thread-187705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:25:04.213 [INFO] [Thread-187705] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:25:04.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:25:05.107 [DEBUG] [Thread-187705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:25:05.108 [DEBUG] [Thread-187705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:25:05.108 [DEBUG] [Thread-187705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:25:05.148 [DEBUG] [Thread-187705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:25:05.149 [DEBUG] [Thread-187705] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:25:05.152 [DEBUG] [Thread-187705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:25:05.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:25:05.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:25:05.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:25:05.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:25:05.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:25:05.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:25:05.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:25:05.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:25:05.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:25:05.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.558788 -999.00  +16.70  20.37     39   +2.90 1 1 1 1 1   888    0 13.99 -7.00 ----- 23.2 20.4 154.8 27.8 22.4 -26.1 21.8 -27.7 23.1 -24.8 24.1 -26.8
2026-02-14T15:25:05.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:25:05.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:25:05.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.558788
2026-02-14T15:25:05.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:25:05.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:25:05.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:25:05.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:25:05.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:25:05.183 [DEBUG] [Thread-187705] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:25:05.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:24:31', tmtdew=16.44, humidity=32.97, cloud=0.0, wind=32.77, temperature=16.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:24:39.283', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:25:05.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-14T15:25:11.613 [DEBUG] [Thread-187708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:25:26.666 [DEBUG] [Thread-187709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:25:28.704 [DEBUG] [Thread-187710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:25:41.706 [DEBUG] [Thread-187711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:25:46.683 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:25:46.685 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:25:56.746 [DEBUG] [Thread-187712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:26:11.783 [DEBUG] [Thread-187713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:26:26.820 [DEBUG] [Thread-187714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:26:28.738 [DEBUG] [Thread-187715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:26:41.861 [DEBUG] [Thread-187716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:26:46.824 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:26:46.825 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:26:56.897 [DEBUG] [Thread-187717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:27:11.935 [DEBUG] [Thread-187718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:27:19.352 [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-14T15:27:26.976 [DEBUG] [Thread-187719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:27:28.773 [DEBUG] [Thread-187720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:27:42.013 [DEBUG] [Thread-187721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:27:46.967 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:27:46.968 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:27:49.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:27:49.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:27:49.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-14T15:27:51.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 27, 27), 16.26, 33.44, 0.0, 28.94, 16.82, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:27:51.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:27:27
2026-02-14T15:27:51.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:27:51.801 [DEBUG] [Thread-187722] [transport.py] [_log()] starting thread (client mode): 0xa57b07f0
2026-02-14T15:27:51.801 [DEBUG] [Thread-187722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:27:51.814 [DEBUG] [Thread-187722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:27:51.814 [INFO] [Thread-187722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:27:51.816 [DEBUG] [Thread-187722] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:27:51.816 [DEBUG] [Thread-187722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:27:51.816 [DEBUG] [Thread-187722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:27:51.816 [DEBUG] [Thread-187722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:27:51.816 [DEBUG] [Thread-187722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:27:51.816 [DEBUG] [Thread-187722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:27:51.816 [DEBUG] [Thread-187722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:27:51.816 [DEBUG] [Thread-187722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:27:51.816 [DEBUG] [Thread-187722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:27:51.816 [DEBUG] [Thread-187722] [transport.py] [_log()] client lang: <none>
2026-02-14T15:27:51.816 [DEBUG] [Thread-187722] [transport.py] [_log()] server lang: <none>
2026-02-14T15:27:51.816 [DEBUG] [Thread-187722] [transport.py] [_log()] kex follows: False
2026-02-14T15:27:51.816 [DEBUG] [Thread-187722] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:27:51.816 [DEBUG] [Thread-187722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:27:51.816 [DEBUG] [Thread-187722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:27:51.816 [DEBUG] [Thread-187722] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:27:51.816 [DEBUG] [Thread-187722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:27:51.816 [DEBUG] [Thread-187722] [transport.py] [_log()] Compression: none
2026-02-14T15:27:51.816 [DEBUG] [Thread-187722] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:27:51.828 [DEBUG] [Thread-187722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:27:51.828 [DEBUG] [Thread-187722] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:27:51.828 [DEBUG] [Thread-187722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:27:51.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:27:51.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:27:51.830 [DEBUG] [Thread-187722] [transport.py] [_log()] userauth is OK
2026-02-14T15:27:51.830 [DEBUG] [Thread-187722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:27:51.830 [DEBUG] [Thread-187722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:27:51.830 [DEBUG] [Thread-187722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:27:51.830 [DEBUG] [Thread-187722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:27:51.845 [INFO] [Thread-187722] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:27:51.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:27:52.446 [DEBUG] [Thread-187722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:27:52.446 [DEBUG] [Thread-187722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:27:52.446 [DEBUG] [Thread-187722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:27:52.487 [DEBUG] [Thread-187722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:27:52.488 [DEBUG] [Thread-187722] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:27:52.490 [DEBUG] [Thread-187722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:27:52.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:27:52.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:27:52.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:27:52.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:27:52.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:27:52.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:27:52.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:27:52.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:27:52.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:27:52.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.560524 -999.00  +17.00  23.22     38   +2.90 1 1 1 1 1   888    0 13.32 -16.24 ----- 21.6 23.2 166.0 30.9 22.6 -26.8 22.0 -25.7 23.6 -25.8 24.4 -27.0
2026-02-14T15:27:52.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:27:52.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:27:52.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.560524
2026-02-14T15:27:52.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:27:52.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:27:52.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:27:52.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:27:52.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:27:52.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:27:27', tmtdew=16.26, humidity=33.44, cloud=0.0, wind=28.94, temperature=16.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:27:09.274', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:27:52.517 [DEBUG] [Thread-187722] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:27:52.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-14T15:27:52.613 [DEBUG] [Thread-187725] [transport.py] [_log()] starting thread (client mode): 0xa57b0460
2026-02-14T15:27:52.614 [DEBUG] [Thread-187725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:27:52.627 [DEBUG] [Thread-187725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:27:52.628 [INFO] [Thread-187725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:27:52.635 [DEBUG] [Thread-187725] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:27:52.635 [DEBUG] [Thread-187725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:27:52.635 [DEBUG] [Thread-187725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:27:52.635 [DEBUG] [Thread-187725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:27:52.635 [DEBUG] [Thread-187725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:27:52.635 [DEBUG] [Thread-187725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:27:52.635 [DEBUG] [Thread-187725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:27:52.635 [DEBUG] [Thread-187725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:27:52.635 [DEBUG] [Thread-187725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:27:52.635 [DEBUG] [Thread-187725] [transport.py] [_log()] client lang: <none>
2026-02-14T15:27:52.635 [DEBUG] [Thread-187725] [transport.py] [_log()] server lang: <none>
2026-02-14T15:27:52.635 [DEBUG] [Thread-187725] [transport.py] [_log()] kex follows: False
2026-02-14T15:27:52.635 [DEBUG] [Thread-187725] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:27:52.635 [DEBUG] [Thread-187725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:27:52.635 [DEBUG] [Thread-187725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:27:52.636 [DEBUG] [Thread-187725] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:27:52.636 [DEBUG] [Thread-187725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:27:52.636 [DEBUG] [Thread-187725] [transport.py] [_log()] Compression: none
2026-02-14T15:27:52.636 [DEBUG] [Thread-187725] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:27:52.691 [DEBUG] [Thread-187725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:27:52.691 [DEBUG] [Thread-187725] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:27:52.691 [DEBUG] [Thread-187725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:27:52.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:27:52.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:27:52.748 [DEBUG] [Thread-187725] [transport.py] [_log()] userauth is OK
2026-02-14T15:27:52.749 [DEBUG] [Thread-187725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:27:52.749 [DEBUG] [Thread-187725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:27:52.749 [DEBUG] [Thread-187725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:27:52.749 [DEBUG] [Thread-187725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:27:52.767 [INFO] [Thread-187725] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:27:52.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-14T15:27:52.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:27:53.582 [DEBUG] [Thread-187725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:27:53.582 [DEBUG] [Thread-187725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:27:53.630 [DEBUG] [Thread-187725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:27:53.631 [DEBUG] [Thread-187725] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:27:53.640 [DEBUG] [Thread-187725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:27:53.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:27:53.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-14T15:27:53.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-14T15:27:53.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:27:53.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:27:53.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:27:53.676 [DEBUG] [Thread-187725] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:27:57.049 [DEBUG] [Thread-187727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:28:12.104 [DEBUG] [Thread-187728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:28:23.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:28:23.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:28:23.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-14T15:28:25.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 28, 3), 16.27, 33.39, 0.0, 29.29, 16.76, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:28:25.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:28:03
2026-02-14T15:28:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:28:26.106 [DEBUG] [Thread-187729] [transport.py] [_log()] starting thread (client mode): 0xa57b1c90
2026-02-14T15:28:26.107 [DEBUG] [Thread-187729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:28:26.127 [DEBUG] [Thread-187729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:28:26.127 [INFO] [Thread-187729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:28:26.130 [DEBUG] [Thread-187729] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:28:26.130 [DEBUG] [Thread-187729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:28:26.130 [DEBUG] [Thread-187729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:28:26.130 [DEBUG] [Thread-187729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:28:26.130 [DEBUG] [Thread-187729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:28:26.130 [DEBUG] [Thread-187729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:28:26.130 [DEBUG] [Thread-187729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:28:26.130 [DEBUG] [Thread-187729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:28:26.130 [DEBUG] [Thread-187729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:28:26.130 [DEBUG] [Thread-187729] [transport.py] [_log()] client lang: <none>
2026-02-14T15:28:26.130 [DEBUG] [Thread-187729] [transport.py] [_log()] server lang: <none>
2026-02-14T15:28:26.130 [DEBUG] [Thread-187729] [transport.py] [_log()] kex follows: False
2026-02-14T15:28:26.130 [DEBUG] [Thread-187729] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:28:26.131 [DEBUG] [Thread-187729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:28:26.131 [DEBUG] [Thread-187729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:28:26.131 [DEBUG] [Thread-187729] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:28:26.131 [DEBUG] [Thread-187729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:28:26.131 [DEBUG] [Thread-187729] [transport.py] [_log()] Compression: none
2026-02-14T15:28:26.131 [DEBUG] [Thread-187729] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:28:26.147 [DEBUG] [Thread-187729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:28:26.147 [DEBUG] [Thread-187729] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:28:26.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:28:26.148 [DEBUG] [Thread-187729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:28:26.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:28:26.150 [DEBUG] [Thread-187729] [transport.py] [_log()] userauth is OK
2026-02-14T15:28:26.150 [DEBUG] [Thread-187729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:28:26.151 [DEBUG] [Thread-187729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:28:26.151 [DEBUG] [Thread-187729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:28:26.151 [DEBUG] [Thread-187729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:28:26.174 [INFO] [Thread-187729] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:28:26.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:28:26.817 [DEBUG] [Thread-187729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:28:26.817 [DEBUG] [Thread-187729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:28:26.817 [DEBUG] [Thread-187729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:28:26.859 [DEBUG] [Thread-187729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:28:26.859 [DEBUG] [Thread-187729] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:28:26.862 [DEBUG] [Thread-187729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:28:26.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:28:26.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:28:26.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:28:26.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:28:26.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:28:26.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:28:26.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:28:26.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:28:26.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:28:26.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.560871 -999.00  +17.10  22.87     38   +2.70 1 1 1 1 1   888    0 13.50 -17.19 ----- 23.1 22.9 130.6 29.3 22.7 -26.5 22.1 -26.3 23.5 -24.4 24.5 -26.5
2026-02-14T15:28:26.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:28:26.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:28:26.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.560871
2026-02-14T15:28:26.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:28:26.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:28:26.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:28:26.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:28:26.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:28:26.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:28:03', tmtdew=16.27, humidity=33.39, cloud=0.0, wind=29.29, temperature=16.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:27:39.254', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:28:26.886 [DEBUG] [Thread-187729] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:28:26.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-14T15:28:26.992 [DEBUG] [Thread-187732] [transport.py] [_log()] starting thread (client mode): 0xa57b3460
2026-02-14T15:28:26.992 [DEBUG] [Thread-187732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:28:27.007 [DEBUG] [Thread-187732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:28:27.007 [INFO] [Thread-187732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:28:27.014 [DEBUG] [Thread-187732] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:28:27.014 [DEBUG] [Thread-187732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:28:27.014 [DEBUG] [Thread-187732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:28:27.014 [DEBUG] [Thread-187732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:28:27.014 [DEBUG] [Thread-187732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:28:27.014 [DEBUG] [Thread-187732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:28:27.014 [DEBUG] [Thread-187732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:28:27.014 [DEBUG] [Thread-187732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:28:27.014 [DEBUG] [Thread-187732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:28:27.014 [DEBUG] [Thread-187732] [transport.py] [_log()] client lang: <none>
2026-02-14T15:28:27.015 [DEBUG] [Thread-187732] [transport.py] [_log()] server lang: <none>
2026-02-14T15:28:27.015 [DEBUG] [Thread-187732] [transport.py] [_log()] kex follows: False
2026-02-14T15:28:27.015 [DEBUG] [Thread-187732] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:28:27.015 [DEBUG] [Thread-187732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:28:27.015 [DEBUG] [Thread-187732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:28:27.015 [DEBUG] [Thread-187732] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:28:27.015 [DEBUG] [Thread-187732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:28:27.015 [DEBUG] [Thread-187732] [transport.py] [_log()] Compression: none
2026-02-14T15:28:27.015 [DEBUG] [Thread-187732] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:28:27.075 [DEBUG] [Thread-187732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:28:27.076 [DEBUG] [Thread-187732] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:28:27.076 [DEBUG] [Thread-187732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:28:27.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:28:27.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:28:27.132 [DEBUG] [Thread-187732] [transport.py] [_log()] userauth is OK
2026-02-14T15:28:27.132 [DEBUG] [Thread-187732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:28:27.132 [DEBUG] [Thread-187732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:28:27.132 [DEBUG] [Thread-187732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:28:27.132 [DEBUG] [Thread-187732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:28:27.149 [DEBUG] [Thread-187734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:28:27.161 [INFO] [Thread-187732] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:28:27.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-14T15:28:27.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:28:27.997 [DEBUG] [Thread-187732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:28:27.997 [DEBUG] [Thread-187732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:28:28.046 [DEBUG] [Thread-187732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:28:28.046 [DEBUG] [Thread-187732] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:28:28.055 [DEBUG] [Thread-187732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:28:28.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:28:28.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-14T15:28: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') -> 00000000
2026-02-14T15:28:28.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:28:28.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:28:28.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:28:28.088 [DEBUG] [Thread-187732] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:28:28.805 [DEBUG] [Thread-187735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:28:42.201 [DEBUG] [Thread-187736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:28:47.110 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:28:47.111 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:28:57.237 [DEBUG] [Thread-187737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:28:58.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:28:58.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:28:58.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-14T15:29:00.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 28, 40), 17.28, 31.14, 0.0, 30.84, 17.78, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:29:00.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:28:40
2026-02-14T15:29:00.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:29:01.083 [DEBUG] [Thread-187738] [transport.py] [_log()] starting thread (client mode): 0xa2dc0880
2026-02-14T15:29:01.084 [DEBUG] [Thread-187738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:29:01.101 [DEBUG] [Thread-187738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:29:01.101 [INFO] [Thread-187738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:29:01.104 [DEBUG] [Thread-187738] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:29:01.105 [DEBUG] [Thread-187738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:29:01.105 [DEBUG] [Thread-187738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:29:01.105 [DEBUG] [Thread-187738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:29:01.105 [DEBUG] [Thread-187738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:29:01.105 [DEBUG] [Thread-187738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:29:01.105 [DEBUG] [Thread-187738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:29:01.105 [DEBUG] [Thread-187738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:29:01.105 [DEBUG] [Thread-187738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:29:01.105 [DEBUG] [Thread-187738] [transport.py] [_log()] client lang: <none>
2026-02-14T15:29:01.105 [DEBUG] [Thread-187738] [transport.py] [_log()] server lang: <none>
2026-02-14T15:29:01.105 [DEBUG] [Thread-187738] [transport.py] [_log()] kex follows: False
2026-02-14T15:29:01.105 [DEBUG] [Thread-187738] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:29:01.106 [DEBUG] [Thread-187738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:29:01.106 [DEBUG] [Thread-187738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:29:01.106 [DEBUG] [Thread-187738] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:29:01.106 [DEBUG] [Thread-187738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:29:01.106 [DEBUG] [Thread-187738] [transport.py] [_log()] Compression: none
2026-02-14T15:29:01.106 [DEBUG] [Thread-187738] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:29:01.123 [DEBUG] [Thread-187738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:29:01.123 [DEBUG] [Thread-187738] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:29:01.124 [DEBUG] [Thread-187738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:29:01.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:29:01.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:29:01.126 [DEBUG] [Thread-187738] [transport.py] [_log()] userauth is OK
2026-02-14T15:29:01.126 [DEBUG] [Thread-187738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:29:01.127 [DEBUG] [Thread-187738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:29:01.127 [DEBUG] [Thread-187738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:29:01.127 [DEBUG] [Thread-187738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:29:01.152 [INFO] [Thread-187738] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:29:01.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:29:01.798 [DEBUG] [Thread-187738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:29:01.798 [DEBUG] [Thread-187738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:29:01.799 [DEBUG] [Thread-187738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:29:01.840 [DEBUG] [Thread-187738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:29:01.840 [DEBUG] [Thread-187738] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:29:01.844 [DEBUG] [Thread-187738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:29:01.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:29:01.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:29:01.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:29:01.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:29:01.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:29:01.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:29:01.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:29:01.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:29:01.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:29:01.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.561565 -999.00  +17.80  17.91     38   +3.30 1 1 1 1 1   888    0 13.48 -13.60 ----- 21.9 17.9 170.6 28.9 22.9 -26.7 22.4 -25.7 23.8 -24.2 24.8 -26.8
2026-02-14T15:29:01.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:29:01.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:29:01.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.561565
2026-02-14T15:29:01.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:29:01.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:29:01.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:29:01.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:29:01.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:29:01.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:28:40', tmtdew=17.28, humidity=31.14, cloud=0.0, wind=30.84, temperature=17.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:28:39.216', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:29:01.870 [DEBUG] [Thread-187738] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:29:01.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-14T15:29:01.981 [DEBUG] [Thread-187741] [transport.py] [_log()] starting thread (client mode): 0xa57b04c0
2026-02-14T15:29:01.981 [DEBUG] [Thread-187741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:29:01.996 [DEBUG] [Thread-187741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:29:01.996 [INFO] [Thread-187741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:29:02.003 [DEBUG] [Thread-187741] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:29:02.003 [DEBUG] [Thread-187741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:29:02.003 [DEBUG] [Thread-187741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:29:02.004 [DEBUG] [Thread-187741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:29:02.004 [DEBUG] [Thread-187741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:29:02.004 [DEBUG] [Thread-187741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:29:02.004 [DEBUG] [Thread-187741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:29:02.004 [DEBUG] [Thread-187741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:29:02.004 [DEBUG] [Thread-187741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:29:02.004 [DEBUG] [Thread-187741] [transport.py] [_log()] client lang: <none>
2026-02-14T15:29:02.004 [DEBUG] [Thread-187741] [transport.py] [_log()] server lang: <none>
2026-02-14T15:29:02.005 [DEBUG] [Thread-187741] [transport.py] [_log()] kex follows: False
2026-02-14T15:29:02.005 [DEBUG] [Thread-187741] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:29:02.005 [DEBUG] [Thread-187741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:29:02.005 [DEBUG] [Thread-187741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:29:02.005 [DEBUG] [Thread-187741] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:29:02.005 [DEBUG] [Thread-187741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:29:02.005 [DEBUG] [Thread-187741] [transport.py] [_log()] Compression: none
2026-02-14T15:29:02.005 [DEBUG] [Thread-187741] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:29:02.068 [DEBUG] [Thread-187741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:29:02.069 [DEBUG] [Thread-187741] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:29:02.069 [DEBUG] [Thread-187741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:29:02.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:29:02.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:29:02.128 [DEBUG] [Thread-187741] [transport.py] [_log()] userauth is OK
2026-02-14T15:29:02.128 [DEBUG] [Thread-187741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:29:02.128 [DEBUG] [Thread-187741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:29:02.128 [DEBUG] [Thread-187741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:29:02.129 [DEBUG] [Thread-187741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:29:02.147 [INFO] [Thread-187741] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:29:02.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-14T15:29:02.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:29:02.964 [DEBUG] [Thread-187741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:29:02.964 [DEBUG] [Thread-187741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:29:03.013 [DEBUG] [Thread-187741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:29:03.013 [DEBUG] [Thread-187741] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:29:03.021 [DEBUG] [Thread-187741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:29:03.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:29:03.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')
2026-02-14T15:29:03.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:29:03.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:29:03.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:29:03.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:29:03.054 [DEBUG] [Thread-187741] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:29:12.274 [DEBUG] [Thread-187743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:29:27.329 [DEBUG] [Thread-187744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:29:28.840 [DEBUG] [Thread-187745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:29:33.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:29:33.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:29:33.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-14T15:29:35.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 29, 15), 16.65, 32.28, 0.0, 26.68, 17.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:29:35.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:29:15
2026-02-14T15:29:35.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:29:35.864 [DEBUG] [Thread-187746] [transport.py] [_log()] starting thread (client mode): 0xa57b20e0
2026-02-14T15:29:35.864 [DEBUG] [Thread-187746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:29:35.884 [DEBUG] [Thread-187746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:29:35.884 [INFO] [Thread-187746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:29:35.887 [DEBUG] [Thread-187746] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:29:35.887 [DEBUG] [Thread-187746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:29:35.887 [DEBUG] [Thread-187746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:29:35.888 [DEBUG] [Thread-187746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:29:35.888 [DEBUG] [Thread-187746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:29:35.888 [DEBUG] [Thread-187746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:29:35.888 [DEBUG] [Thread-187746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:29:35.888 [DEBUG] [Thread-187746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:29:35.888 [DEBUG] [Thread-187746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:29:35.888 [DEBUG] [Thread-187746] [transport.py] [_log()] client lang: <none>
2026-02-14T15:29:35.888 [DEBUG] [Thread-187746] [transport.py] [_log()] server lang: <none>
2026-02-14T15:29:35.888 [DEBUG] [Thread-187746] [transport.py] [_log()] kex follows: False
2026-02-14T15:29:35.888 [DEBUG] [Thread-187746] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:29:35.888 [DEBUG] [Thread-187746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:29:35.888 [DEBUG] [Thread-187746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:29:35.889 [DEBUG] [Thread-187746] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:29:35.889 [DEBUG] [Thread-187746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:29:35.889 [DEBUG] [Thread-187746] [transport.py] [_log()] Compression: none
2026-02-14T15:29:35.889 [DEBUG] [Thread-187746] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:29:35.908 [DEBUG] [Thread-187746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:29:35.909 [DEBUG] [Thread-187746] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:29:35.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:29:35.910 [DEBUG] [Thread-187746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:29:35.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:29:35.912 [DEBUG] [Thread-187746] [transport.py] [_log()] userauth is OK
2026-02-14T15:29:35.912 [DEBUG] [Thread-187746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:29:35.913 [DEBUG] [Thread-187746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:29:35.913 [DEBUG] [Thread-187746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:29:35.913 [DEBUG] [Thread-187746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:29:35.936 [INFO] [Thread-187746] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:29:35.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:29:36.706 [DEBUG] [Thread-187746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:29:36.706 [DEBUG] [Thread-187746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:29:36.706 [DEBUG] [Thread-187746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:29:36.746 [DEBUG] [Thread-187746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:29:36.747 [DEBUG] [Thread-187746] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:29:36.750 [DEBUG] [Thread-187746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:29:36.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:29:36.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:29:36.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:29:36.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:29:36.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:29:36.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:29:36.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:29:36.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:29:36.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:29:36.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.561913 -999.00  +17.30  22.72     37   +2.60 1 1 1 1 1   888    0 13.87 -5.78 ----- 21.0 22.7 175.2 38.7 22.8 -29.1 22.2 -31.7 23.7 -27.0 24.6 -29.9
2026-02-14T15:29:36.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:29:36.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:29:36.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.561913
2026-02-14T15:29:36.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:29:36.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:29:36.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:29:36.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:29:36.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:29:36.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:29:15', tmtdew=16.65, humidity=32.28, cloud=0.0, wind=26.68, temperature=17.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:29:09.283', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:29:36.775 [DEBUG] [Thread-187746] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:29:36.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-14T15:29:36.871 [DEBUG] [Thread-187749] [transport.py] [_log()] starting thread (client mode): 0xa2dc0a90
2026-02-14T15:29:36.871 [DEBUG] [Thread-187749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:29:36.891 [DEBUG] [Thread-187749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:29:36.891 [INFO] [Thread-187749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:29:36.899 [DEBUG] [Thread-187749] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:29:36.899 [DEBUG] [Thread-187749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:29:36.899 [DEBUG] [Thread-187749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:29:36.899 [DEBUG] [Thread-187749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:29:36.899 [DEBUG] [Thread-187749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:29:36.899 [DEBUG] [Thread-187749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:29:36.899 [DEBUG] [Thread-187749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:29:36.899 [DEBUG] [Thread-187749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:29:36.899 [DEBUG] [Thread-187749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:29:36.899 [DEBUG] [Thread-187749] [transport.py] [_log()] client lang: <none>
2026-02-14T15:29:36.899 [DEBUG] [Thread-187749] [transport.py] [_log()] server lang: <none>
2026-02-14T15:29:36.899 [DEBUG] [Thread-187749] [transport.py] [_log()] kex follows: False
2026-02-14T15:29:36.900 [DEBUG] [Thread-187749] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:29:36.900 [DEBUG] [Thread-187749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:29:36.900 [DEBUG] [Thread-187749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:29:36.900 [DEBUG] [Thread-187749] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:29:36.900 [DEBUG] [Thread-187749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:29:36.900 [DEBUG] [Thread-187749] [transport.py] [_log()] Compression: none
2026-02-14T15:29:36.900 [DEBUG] [Thread-187749] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:29:36.956 [DEBUG] [Thread-187749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:29:36.956 [DEBUG] [Thread-187749] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:29:36.957 [DEBUG] [Thread-187749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:29:36.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:29:36.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:29:37.011 [DEBUG] [Thread-187749] [transport.py] [_log()] userauth is OK
2026-02-14T15:29:37.012 [DEBUG] [Thread-187749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:29:37.012 [DEBUG] [Thread-187749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:29:37.012 [DEBUG] [Thread-187749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:29:37.012 [DEBUG] [Thread-187749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:29:37.032 [INFO] [Thread-187749] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:29:37.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-14T15:29:37.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:29:37.849 [DEBUG] [Thread-187749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:29:37.850 [DEBUG] [Thread-187749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:29:37.897 [DEBUG] [Thread-187749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:29:37.898 [DEBUG] [Thread-187749] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:29:37.907 [DEBUG] [Thread-187749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:29:37.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:29:37.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:29:37.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:29:37.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:29:37.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:29:37.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:29:37.944 [DEBUG] [Thread-187749] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:29:42.370 [DEBUG] [Thread-187751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:29:47.250 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:29:47.251 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:29:57.425 [DEBUG] [Thread-187752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:30:07.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:30:07.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:30:07.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-14T15:30:10.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 29, 51), 17.07, 31.3, 0.0, 28.58, 17.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:30:10.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:29:51
2026-02-14T15:30:10.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:30:10.679 [DEBUG] [Thread-187753] [transport.py] [_log()] starting thread (client mode): 0xa2dc16f0
2026-02-14T15:30:10.679 [DEBUG] [Thread-187753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:30:10.700 [DEBUG] [Thread-187753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:30:10.700 [INFO] [Thread-187753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:30:10.703 [DEBUG] [Thread-187753] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:30:10.703 [DEBUG] [Thread-187753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:30:10.703 [DEBUG] [Thread-187753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:30:10.703 [DEBUG] [Thread-187753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:30:10.703 [DEBUG] [Thread-187753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:30:10.703 [DEBUG] [Thread-187753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:30:10.704 [DEBUG] [Thread-187753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:30:10.704 [DEBUG] [Thread-187753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:30:10.704 [DEBUG] [Thread-187753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:30:10.704 [DEBUG] [Thread-187753] [transport.py] [_log()] client lang: <none>
2026-02-14T15:30:10.704 [DEBUG] [Thread-187753] [transport.py] [_log()] server lang: <none>
2026-02-14T15:30:10.704 [DEBUG] [Thread-187753] [transport.py] [_log()] kex follows: False
2026-02-14T15:30:10.704 [DEBUG] [Thread-187753] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:30:10.704 [DEBUG] [Thread-187753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:30:10.704 [DEBUG] [Thread-187753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:30:10.704 [DEBUG] [Thread-187753] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:30:10.704 [DEBUG] [Thread-187753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:30:10.704 [DEBUG] [Thread-187753] [transport.py] [_log()] Compression: none
2026-02-14T15:30:10.704 [DEBUG] [Thread-187753] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:30:10.722 [DEBUG] [Thread-187753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:30:10.722 [DEBUG] [Thread-187753] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:30:10.723 [DEBUG] [Thread-187753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:30:10.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:30:10.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:30:10.725 [DEBUG] [Thread-187753] [transport.py] [_log()] userauth is OK
2026-02-14T15:30:10.725 [DEBUG] [Thread-187753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:30:10.725 [DEBUG] [Thread-187753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:30:10.725 [DEBUG] [Thread-187753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:30:10.725 [DEBUG] [Thread-187753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:30:10.743 [INFO] [Thread-187753] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:30:10.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:30:11.845 [DEBUG] [Thread-187753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:30:11.845 [DEBUG] [Thread-187753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:30:11.846 [DEBUG] [Thread-187753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:30:11.886 [DEBUG] [Thread-187753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:30:11.887 [DEBUG] [Thread-187753] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:30:11.890 [DEBUG] [Thread-187753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:30:11.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:30:11.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:30:11.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:30:11.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:30:11.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:30:11.915 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:30:11.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:30:11.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:30:11.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:30:11.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.562260 -999.00  +16.70  19.97     38   +2.70 1 1 1 1 1   888    0 14.34 -0.72 ----- 24.9 20.0 172.8 33.2 22.8 -28.8 22.0 -26.4 23.6 -26.9 24.5 -28.4
2026-02-14T15:30:11.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:30:11.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:30:11.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.562260
2026-02-14T15:30:11.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:30:11.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:30:11.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:30:11.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:30:11.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:30:11.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:29:51', tmtdew=17.07, humidity=31.3, cloud=0.0, wind=28.58, temperature=17.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:29:39.264', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:30:11.918 [DEBUG] [Thread-187753] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:30:12.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-14T15:30:12.020 [DEBUG] [Thread-187756] [transport.py] [_log()] starting thread (client mode): 0xa2dc1960
2026-02-14T15:30:12.020 [DEBUG] [Thread-187756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:30:12.036 [DEBUG] [Thread-187756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:30:12.037 [INFO] [Thread-187756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:30:12.044 [DEBUG] [Thread-187756] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:30:12.045 [DEBUG] [Thread-187756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:30:12.045 [DEBUG] [Thread-187756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:30:12.045 [DEBUG] [Thread-187756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:30:12.045 [DEBUG] [Thread-187756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:30:12.045 [DEBUG] [Thread-187756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:30:12.046 [DEBUG] [Thread-187756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:30:12.046 [DEBUG] [Thread-187756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:30:12.046 [DEBUG] [Thread-187756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:30:12.046 [DEBUG] [Thread-187756] [transport.py] [_log()] client lang: <none>
2026-02-14T15:30:12.046 [DEBUG] [Thread-187756] [transport.py] [_log()] server lang: <none>
2026-02-14T15:30:12.046 [DEBUG] [Thread-187756] [transport.py] [_log()] kex follows: False
2026-02-14T15:30:12.046 [DEBUG] [Thread-187756] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:30:12.046 [DEBUG] [Thread-187756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:30:12.046 [DEBUG] [Thread-187756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:30:12.047 [DEBUG] [Thread-187756] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:30:12.047 [DEBUG] [Thread-187756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:30:12.047 [DEBUG] [Thread-187756] [transport.py] [_log()] Compression: none
2026-02-14T15:30:12.047 [DEBUG] [Thread-187756] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:30:12.103 [DEBUG] [Thread-187756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:30:12.104 [DEBUG] [Thread-187756] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:30:12.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:30:12.106 [DEBUG] [Thread-187756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:30:12.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:30:12.159 [DEBUG] [Thread-187756] [transport.py] [_log()] userauth is OK
2026-02-14T15:30:12.160 [DEBUG] [Thread-187756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:30:12.160 [DEBUG] [Thread-187756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:30:12.160 [DEBUG] [Thread-187756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:30:12.160 [DEBUG] [Thread-187756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:30:12.182 [INFO] [Thread-187756] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:30:12.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-14T15:30:12.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:30:12.461 [DEBUG] [Thread-187758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:30:13.042 [DEBUG] [Thread-187756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:30:13.042 [DEBUG] [Thread-187756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:30:13.091 [DEBUG] [Thread-187756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:30:13.091 [DEBUG] [Thread-187756] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:30:13.100 [DEBUG] [Thread-187756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:30:13.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:30:13.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-14T15:30:13.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-14T15:30:13.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:30:13.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:30:13.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:30:13.134 [DEBUG] [Thread-187756] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:30:27.516 [DEBUG] [Thread-187759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:30:28.883 [DEBUG] [Thread-187760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:30:42.555 [DEBUG] [Thread-187761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:30:43.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:30:43.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:30:43.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-14T15:30:45.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 30, 26), 16.85, 31.77, 0.0, 23.79, 17.27, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:30:45.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:30:26
2026-02-14T15:30:45.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:30:45.532 [DEBUG] [Thread-187762] [transport.py] [_log()] starting thread (client mode): 0xa2dc2d70
2026-02-14T15:30:45.532 [DEBUG] [Thread-187762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:30:45.553 [DEBUG] [Thread-187762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:30:45.553 [INFO] [Thread-187762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:30:45.556 [DEBUG] [Thread-187762] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:30:45.556 [DEBUG] [Thread-187762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:30:45.556 [DEBUG] [Thread-187762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:30:45.556 [DEBUG] [Thread-187762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:30:45.556 [DEBUG] [Thread-187762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:30:45.556 [DEBUG] [Thread-187762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:30:45.556 [DEBUG] [Thread-187762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:30:45.556 [DEBUG] [Thread-187762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:30:45.556 [DEBUG] [Thread-187762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:30:45.556 [DEBUG] [Thread-187762] [transport.py] [_log()] client lang: <none>
2026-02-14T15:30:45.556 [DEBUG] [Thread-187762] [transport.py] [_log()] server lang: <none>
2026-02-14T15:30:45.557 [DEBUG] [Thread-187762] [transport.py] [_log()] kex follows: False
2026-02-14T15:30:45.557 [DEBUG] [Thread-187762] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:30:45.557 [DEBUG] [Thread-187762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:30:45.557 [DEBUG] [Thread-187762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:30:45.557 [DEBUG] [Thread-187762] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:30:45.557 [DEBUG] [Thread-187762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:30:45.557 [DEBUG] [Thread-187762] [transport.py] [_log()] Compression: none
2026-02-14T15:30:45.557 [DEBUG] [Thread-187762] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:30:45.576 [DEBUG] [Thread-187762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:30:45.577 [DEBUG] [Thread-187762] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:30:45.578 [DEBUG] [Thread-187762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:30:45.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:30:45.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:30:45.580 [DEBUG] [Thread-187762] [transport.py] [_log()] userauth is OK
2026-02-14T15:30:45.580 [DEBUG] [Thread-187762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:30:45.580 [DEBUG] [Thread-187762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:30:45.580 [DEBUG] [Thread-187762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:30:45.580 [DEBUG] [Thread-187762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:30:45.597 [INFO] [Thread-187762] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:30:45.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:30:46.233 [DEBUG] [Thread-187762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:30:46.234 [DEBUG] [Thread-187762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:30:46.234 [DEBUG] [Thread-187762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:30:46.274 [DEBUG] [Thread-187762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:30:46.275 [DEBUG] [Thread-187762] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:30:46.278 [DEBUG] [Thread-187762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:30:46.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:30:46.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:30:46.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:30:46.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:30:46.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:30:46.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:30:46.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:30:46.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:30:46.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:30:46.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.562607 -999.00  +16.60  20.94     39   +2.80 1 1 1 1 1   888    0 13.91 1.55 ----- 18.0 20.9 184.9 23.9 22.9 -27.1 22.0 -28.4 23.6 -24.4 24.6 -26.8
2026-02-14T15:30:46.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:30:46.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:30:46.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.562607
2026-02-14T15:30:46.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:30:46.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:30:46.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:30:46.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:30:46.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:30:46.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:30:26', tmtdew=16.85, humidity=31.77, cloud=0.0, wind=23.79, temperature=17.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:30:09.245', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:30:46.305 [DEBUG] [Thread-187762] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:30:46.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-14T15:30:46.403 [DEBUG] [Thread-187765] [transport.py] [_log()] starting thread (client mode): 0xa57b3460
2026-02-14T15:30:46.403 [DEBUG] [Thread-187765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:30:46.418 [DEBUG] [Thread-187765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:30:46.419 [INFO] [Thread-187765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:30:46.426 [DEBUG] [Thread-187765] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:30:46.426 [DEBUG] [Thread-187765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:30:46.426 [DEBUG] [Thread-187765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:30:46.427 [DEBUG] [Thread-187765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:30:46.427 [DEBUG] [Thread-187765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:30:46.427 [DEBUG] [Thread-187765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:30:46.427 [DEBUG] [Thread-187765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:30:46.427 [DEBUG] [Thread-187765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:30:46.427 [DEBUG] [Thread-187765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:30:46.427 [DEBUG] [Thread-187765] [transport.py] [_log()] client lang: <none>
2026-02-14T15:30:46.427 [DEBUG] [Thread-187765] [transport.py] [_log()] server lang: <none>
2026-02-14T15:30:46.427 [DEBUG] [Thread-187765] [transport.py] [_log()] kex follows: False
2026-02-14T15:30:46.427 [DEBUG] [Thread-187765] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:30:46.427 [DEBUG] [Thread-187765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:30:46.427 [DEBUG] [Thread-187765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:30:46.427 [DEBUG] [Thread-187765] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:30:46.427 [DEBUG] [Thread-187765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:30:46.427 [DEBUG] [Thread-187765] [transport.py] [_log()] Compression: none
2026-02-14T15:30:46.427 [DEBUG] [Thread-187765] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:30:46.486 [DEBUG] [Thread-187765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:30:46.486 [DEBUG] [Thread-187765] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:30:46.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:30:46.488 [DEBUG] [Thread-187765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:30:46.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:30:46.543 [DEBUG] [Thread-187765] [transport.py] [_log()] userauth is OK
2026-02-14T15:30:46.543 [DEBUG] [Thread-187765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:30:46.543 [DEBUG] [Thread-187765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:30:46.544 [DEBUG] [Thread-187765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:30:46.544 [DEBUG] [Thread-187765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:30:46.562 [INFO] [Thread-187765] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:30:46.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-14T15:30:46.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:30:47.365 [DEBUG] [Thread-187765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:30:47.365 [DEBUG] [Thread-187765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:30:47.394 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:30:47.395 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:30:47.413 [DEBUG] [Thread-187765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:30:47.413 [DEBUG] [Thread-187765] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:30:47.421 [DEBUG] [Thread-187765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:30:47.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:30:47.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-14T15:30:47.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-14T15:30:47.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:30:47.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:30:47.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:30:47.456 [DEBUG] [Thread-187765] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:30:57.596 [DEBUG] [Thread-187767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:31:12.655 [DEBUG] [Thread-187768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:31:17.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:31:17.451 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:31:17.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-14T15:31:19.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 31, 1), 16.2, 33.42, 0.0, 30.33, 17.09, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:31:19.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:31:01
2026-02-14T15:31:19.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:31:19.989 [DEBUG] [Thread-187769] [transport.py] [_log()] starting thread (client mode): 0xa57b0880
2026-02-14T15:31:19.989 [DEBUG] [Thread-187769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:31:20.010 [DEBUG] [Thread-187769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:31:20.010 [INFO] [Thread-187769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:31:20.014 [DEBUG] [Thread-187769] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:31:20.014 [DEBUG] [Thread-187769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:31:20.014 [DEBUG] [Thread-187769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:31:20.014 [DEBUG] [Thread-187769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:31:20.014 [DEBUG] [Thread-187769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:31:20.014 [DEBUG] [Thread-187769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:31:20.014 [DEBUG] [Thread-187769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:31:20.014 [DEBUG] [Thread-187769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:31:20.014 [DEBUG] [Thread-187769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:31:20.014 [DEBUG] [Thread-187769] [transport.py] [_log()] client lang: <none>
2026-02-14T15:31:20.014 [DEBUG] [Thread-187769] [transport.py] [_log()] server lang: <none>
2026-02-14T15:31:20.014 [DEBUG] [Thread-187769] [transport.py] [_log()] kex follows: False
2026-02-14T15:31:20.014 [DEBUG] [Thread-187769] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:31:20.015 [DEBUG] [Thread-187769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:31:20.015 [DEBUG] [Thread-187769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:31:20.015 [DEBUG] [Thread-187769] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:31:20.015 [DEBUG] [Thread-187769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:31:20.015 [DEBUG] [Thread-187769] [transport.py] [_log()] Compression: none
2026-02-14T15:31:20.015 [DEBUG] [Thread-187769] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:31:20.032 [DEBUG] [Thread-187769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:31:20.032 [DEBUG] [Thread-187769] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:31:20.033 [DEBUG] [Thread-187769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:31:20.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:31:20.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:31:20.035 [DEBUG] [Thread-187769] [transport.py] [_log()] userauth is OK
2026-02-14T15:31:20.035 [DEBUG] [Thread-187769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:31:20.035 [DEBUG] [Thread-187769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:31:20.036 [DEBUG] [Thread-187769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:31:20.036 [DEBUG] [Thread-187769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:31:20.061 [INFO] [Thread-187769] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:31:20.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:31:20.691 [DEBUG] [Thread-187769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:31:20.691 [DEBUG] [Thread-187769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:31:20.692 [DEBUG] [Thread-187769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:31:20.732 [DEBUG] [Thread-187769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:31:20.733 [DEBUG] [Thread-187769] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:31:20.736 [DEBUG] [Thread-187769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:31:20.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:31:20.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:31:20.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:31:20.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:31:20.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:31:20.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:31:20.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:31:20.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:31:20.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:31:20.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.562954 -999.00  +16.60  24.27     39   +2.90 1 1 1 1 1   888    0 13.89 1.76 ----- 20.1 24.3 181.6 37.4 22.7 -30.9 21.9 -32.3 23.5 -26.9 24.4 -29.0
2026-02-14T15:31:20.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:31:20.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:31:20.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.562954
2026-02-14T15:31:20.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:31:20.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:31:20.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:31:20.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:31:20.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:31:20.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:31:01', tmtdew=16.2, humidity=33.42, cloud=0.0, wind=30.33, temperature=17.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:30:39.226', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:31:20.764 [DEBUG] [Thread-187769] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:31:20.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-14T15:31:20.857 [DEBUG] [Thread-187772] [transport.py] [_log()] starting thread (client mode): 0xa2dc2dd0
2026-02-14T15:31:20.857 [DEBUG] [Thread-187772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:31:20.871 [DEBUG] [Thread-187772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:31:20.871 [INFO] [Thread-187772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:31:20.879 [DEBUG] [Thread-187772] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:31:20.879 [DEBUG] [Thread-187772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:31:20.879 [DEBUG] [Thread-187772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:31:20.879 [DEBUG] [Thread-187772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:31:20.879 [DEBUG] [Thread-187772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:31:20.879 [DEBUG] [Thread-187772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:31:20.879 [DEBUG] [Thread-187772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:31:20.879 [DEBUG] [Thread-187772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:31:20.879 [DEBUG] [Thread-187772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:31:20.879 [DEBUG] [Thread-187772] [transport.py] [_log()] client lang: <none>
2026-02-14T15:31:20.879 [DEBUG] [Thread-187772] [transport.py] [_log()] server lang: <none>
2026-02-14T15:31:20.879 [DEBUG] [Thread-187772] [transport.py] [_log()] kex follows: False
2026-02-14T15:31:20.879 [DEBUG] [Thread-187772] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:31:20.879 [DEBUG] [Thread-187772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:31:20.879 [DEBUG] [Thread-187772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:31:20.880 [DEBUG] [Thread-187772] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:31:20.880 [DEBUG] [Thread-187772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:31:20.880 [DEBUG] [Thread-187772] [transport.py] [_log()] Compression: none
2026-02-14T15:31:20.880 [DEBUG] [Thread-187772] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:31:20.938 [DEBUG] [Thread-187772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:31:20.939 [DEBUG] [Thread-187772] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:31:20.939 [DEBUG] [Thread-187772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:31:20.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:31:20.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:31:20.994 [DEBUG] [Thread-187772] [transport.py] [_log()] userauth is OK
2026-02-14T15:31:20.994 [DEBUG] [Thread-187772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:31:20.995 [DEBUG] [Thread-187772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:31:20.995 [DEBUG] [Thread-187772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:31:20.995 [DEBUG] [Thread-187772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:31:21.015 [INFO] [Thread-187772] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:31:21.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T15:31:21.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:31:21.835 [DEBUG] [Thread-187772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:31:21.835 [DEBUG] [Thread-187772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:31:21.883 [DEBUG] [Thread-187772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:31:21.884 [DEBUG] [Thread-187772] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:31:21.893 [DEBUG] [Thread-187772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:31:21.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:31: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')
2026-02-14T15:31:21.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:31:21.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:31:21.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:31:21.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:31:21.929 [DEBUG] [Thread-187772] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:31:27.692 [DEBUG] [Thread-187774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:31:28.932 [DEBUG] [Thread-187775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:31:42.742 [DEBUG] [Thread-187776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:31:47.534 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:31:47.535 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:31:51.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:31:51.952 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:31:51.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-14T15:31:53.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 31, 36), 17.39, 31.11, 0.0, 34.23, 18.57, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:31:53.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:31:36
2026-02-14T15:31:54.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:31:54.310 [DEBUG] [Thread-187777] [transport.py] [_log()] starting thread (client mode): 0xa2dc2410
2026-02-14T15:31:54.310 [DEBUG] [Thread-187777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:31:54.330 [DEBUG] [Thread-187777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:31:54.330 [INFO] [Thread-187777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:31:54.333 [DEBUG] [Thread-187777] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:31:54.333 [DEBUG] [Thread-187777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:31:54.333 [DEBUG] [Thread-187777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:31:54.333 [DEBUG] [Thread-187777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:31:54.333 [DEBUG] [Thread-187777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:31:54.334 [DEBUG] [Thread-187777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:31:54.334 [DEBUG] [Thread-187777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:31:54.334 [DEBUG] [Thread-187777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:31:54.334 [DEBUG] [Thread-187777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:31:54.334 [DEBUG] [Thread-187777] [transport.py] [_log()] client lang: <none>
2026-02-14T15:31:54.334 [DEBUG] [Thread-187777] [transport.py] [_log()] server lang: <none>
2026-02-14T15:31:54.334 [DEBUG] [Thread-187777] [transport.py] [_log()] kex follows: False
2026-02-14T15:31:54.334 [DEBUG] [Thread-187777] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:31:54.334 [DEBUG] [Thread-187777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:31:54.334 [DEBUG] [Thread-187777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:31:54.334 [DEBUG] [Thread-187777] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:31:54.334 [DEBUG] [Thread-187777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:31:54.334 [DEBUG] [Thread-187777] [transport.py] [_log()] Compression: none
2026-02-14T15:31:54.334 [DEBUG] [Thread-187777] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:31:54.349 [DEBUG] [Thread-187777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:31:54.349 [DEBUG] [Thread-187777] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:31:54.349 [DEBUG] [Thread-187777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:31:54.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:31:54.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:31:54.350 [DEBUG] [Thread-187777] [transport.py] [_log()] userauth is OK
2026-02-14T15:31:54.350 [DEBUG] [Thread-187777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:31:54.350 [DEBUG] [Thread-187777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:31:54.350 [DEBUG] [Thread-187777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:31:54.350 [DEBUG] [Thread-187777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:31:54.367 [INFO] [Thread-187777] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:31:54.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:31:54.978 [DEBUG] [Thread-187777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:31:54.978 [DEBUG] [Thread-187777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:31:54.979 [DEBUG] [Thread-187777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:31:55.020 [DEBUG] [Thread-187777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:31:55.020 [DEBUG] [Thread-187777] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:31:55.023 [DEBUG] [Thread-187777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:31:55.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:31:55.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:31:55.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:31:55.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:31:55.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:31:55.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:31:55.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:31:55.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:31:55.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:31:55.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.563302 -999.00  +16.80  27.53     39   +3.00 1 1 1 1 1   888    0 14.15 1.50 ----- 25.2 27.5 175.2 31.6 22.7 -28.6 21.8 -29.5 23.4 -26.3 24.4 -27.3
2026-02-14T15:31:55.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:31:55.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:31:55.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.563302
2026-02-14T15:31:55.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:31:55.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:31:55.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:31:55.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:31:55.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:31:55.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:31:36', tmtdew=17.39, humidity=31.11, cloud=0.0, wind=34.23, temperature=18.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:31:09.293', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:31:55.052 [DEBUG] [Thread-187777] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:31:55.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-14T15:31:55.149 [DEBUG] [Thread-187780] [transport.py] [_log()] starting thread (client mode): 0xa2dc1db0
2026-02-14T15:31:55.149 [DEBUG] [Thread-187780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:31:55.164 [DEBUG] [Thread-187780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:31:55.164 [INFO] [Thread-187780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:31:55.172 [DEBUG] [Thread-187780] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:31:55.172 [DEBUG] [Thread-187780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:31:55.172 [DEBUG] [Thread-187780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:31:55.172 [DEBUG] [Thread-187780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:31:55.172 [DEBUG] [Thread-187780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:31:55.172 [DEBUG] [Thread-187780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:31:55.172 [DEBUG] [Thread-187780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:31:55.172 [DEBUG] [Thread-187780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:31:55.173 [DEBUG] [Thread-187780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:31:55.173 [DEBUG] [Thread-187780] [transport.py] [_log()] client lang: <none>
2026-02-14T15:31:55.173 [DEBUG] [Thread-187780] [transport.py] [_log()] server lang: <none>
2026-02-14T15:31:55.173 [DEBUG] [Thread-187780] [transport.py] [_log()] kex follows: False
2026-02-14T15:31:55.173 [DEBUG] [Thread-187780] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:31:55.173 [DEBUG] [Thread-187780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:31:55.173 [DEBUG] [Thread-187780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:31:55.173 [DEBUG] [Thread-187780] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:31:55.173 [DEBUG] [Thread-187780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:31:55.173 [DEBUG] [Thread-187780] [transport.py] [_log()] Compression: none
2026-02-14T15:31:55.173 [DEBUG] [Thread-187780] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:31:55.230 [DEBUG] [Thread-187780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:31:55.230 [DEBUG] [Thread-187780] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:31:55.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:31:55.232 [DEBUG] [Thread-187780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:31:55.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:31:55.286 [DEBUG] [Thread-187780] [transport.py] [_log()] userauth is OK
2026-02-14T15:31:55.287 [DEBUG] [Thread-187780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:31:55.287 [DEBUG] [Thread-187780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:31:55.287 [DEBUG] [Thread-187780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:31:55.287 [DEBUG] [Thread-187780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:31:55.306 [INFO] [Thread-187780] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:31:55.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-14T15:31:55.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:31:56.122 [DEBUG] [Thread-187780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:31:56.122 [DEBUG] [Thread-187780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:31:56.170 [DEBUG] [Thread-187780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:31:56.171 [DEBUG] [Thread-187780] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:31:56.180 [DEBUG] [Thread-187780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:31:56.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:31:56.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-14T15:31:56.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-14T15:31:56.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:31:56.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:31:56.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:31:56.217 [DEBUG] [Thread-187780] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:31:57.777 [DEBUG] [Thread-187782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:32:12.829 [DEBUG] [Thread-187783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:32:26.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:32:26.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:32:26.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-14T15:32:27.864 [DEBUG] [Thread-187784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:32:28.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 32, 11), 16.25, 33.52, 0.0, 32.25, 17.2, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:32:28.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:32:11
2026-02-14T15:32:28.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:32:28.590 [DEBUG] [Thread-187785] [transport.py] [_log()] starting thread (client mode): 0xa2dc2980
2026-02-14T15:32:28.590 [DEBUG] [Thread-187785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:32:28.611 [DEBUG] [Thread-187785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:32:28.611 [INFO] [Thread-187785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:32:28.615 [DEBUG] [Thread-187785] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:32:28.615 [DEBUG] [Thread-187785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:32:28.615 [DEBUG] [Thread-187785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:32:28.615 [DEBUG] [Thread-187785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:32:28.615 [DEBUG] [Thread-187785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:32:28.615 [DEBUG] [Thread-187785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:32:28.615 [DEBUG] [Thread-187785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:32:28.615 [DEBUG] [Thread-187785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:32:28.615 [DEBUG] [Thread-187785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:32:28.615 [DEBUG] [Thread-187785] [transport.py] [_log()] client lang: <none>
2026-02-14T15:32:28.616 [DEBUG] [Thread-187785] [transport.py] [_log()] server lang: <none>
2026-02-14T15:32:28.616 [DEBUG] [Thread-187785] [transport.py] [_log()] kex follows: False
2026-02-14T15:32:28.616 [DEBUG] [Thread-187785] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:32:28.616 [DEBUG] [Thread-187785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:32:28.616 [DEBUG] [Thread-187785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:32:28.616 [DEBUG] [Thread-187785] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:32:28.616 [DEBUG] [Thread-187785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:32:28.616 [DEBUG] [Thread-187785] [transport.py] [_log()] Compression: none
2026-02-14T15:32:28.616 [DEBUG] [Thread-187785] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:32:28.633 [DEBUG] [Thread-187785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:32:28.634 [DEBUG] [Thread-187785] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:32:28.634 [DEBUG] [Thread-187785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:32:28.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:32:28.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:32:28.636 [DEBUG] [Thread-187785] [transport.py] [_log()] userauth is OK
2026-02-14T15:32:28.636 [DEBUG] [Thread-187785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:32:28.636 [DEBUG] [Thread-187785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:32:28.636 [DEBUG] [Thread-187785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:32:28.636 [DEBUG] [Thread-187785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:32:28.654 [INFO] [Thread-187785] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:32:28.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:32:28.964 [DEBUG] [Thread-187787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:32:29.479 [DEBUG] [Thread-187785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:32:29.480 [DEBUG] [Thread-187785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:32:29.480 [DEBUG] [Thread-187785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:32:29.520 [DEBUG] [Thread-187785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:32:29.521 [DEBUG] [Thread-187785] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:32:29.524 [DEBUG] [Thread-187785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:32:29.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:32:29.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:32:29.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:32:29.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:32:29.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:32:29.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:32:29.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:32:29.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:32:29.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:32:29.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.563649 -999.00  +16.80  18.86     39   +3.10 1 1 1 1 1   888    0 14.00 1.63 ----- 27.2 18.9 171.2 24.4 22.8 -27.3 21.8 -26.1 23.5 -24.3 24.6 -26.6
2026-02-14T15:32:29.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:32:29.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:32:29.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.563649
2026-02-14T15:32:29.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:32:29.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:32:29.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:32:29.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:32:29.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:32:29.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:32:11', tmtdew=16.25, humidity=33.52, cloud=0.0, wind=32.25, temperature=17.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:31:39.274', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:32:29.554 [DEBUG] [Thread-187785] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:32:29.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-14T15:32:29.648 [DEBUG] [Thread-187789] [transport.py] [_log()] starting thread (client mode): 0xa2dc3b20
2026-02-14T15:32:29.649 [DEBUG] [Thread-187789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:32:29.665 [DEBUG] [Thread-187789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:32:29.665 [INFO] [Thread-187789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:32:29.673 [DEBUG] [Thread-187789] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:32:29.673 [DEBUG] [Thread-187789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:32:29.673 [DEBUG] [Thread-187789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:32:29.673 [DEBUG] [Thread-187789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:32:29.673 [DEBUG] [Thread-187789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:32:29.673 [DEBUG] [Thread-187789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:32:29.673 [DEBUG] [Thread-187789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:32:29.674 [DEBUG] [Thread-187789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:32:29.674 [DEBUG] [Thread-187789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:32:29.674 [DEBUG] [Thread-187789] [transport.py] [_log()] client lang: <none>
2026-02-14T15:32:29.674 [DEBUG] [Thread-187789] [transport.py] [_log()] server lang: <none>
2026-02-14T15:32:29.674 [DEBUG] [Thread-187789] [transport.py] [_log()] kex follows: False
2026-02-14T15:32:29.674 [DEBUG] [Thread-187789] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:32:29.674 [DEBUG] [Thread-187789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:32:29.674 [DEBUG] [Thread-187789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:32:29.674 [DEBUG] [Thread-187789] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:32:29.674 [DEBUG] [Thread-187789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:32:29.674 [DEBUG] [Thread-187789] [transport.py] [_log()] Compression: none
2026-02-14T15:32:29.674 [DEBUG] [Thread-187789] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:32:29.734 [DEBUG] [Thread-187789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:32:29.734 [DEBUG] [Thread-187789] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:32:29.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:32:29.735 [DEBUG] [Thread-187789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:32:29.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:32:29.790 [DEBUG] [Thread-187789] [transport.py] [_log()] userauth is OK
2026-02-14T15:32:29.790 [DEBUG] [Thread-187789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:32:29.790 [DEBUG] [Thread-187789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:32:29.790 [DEBUG] [Thread-187789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:32:29.790 [DEBUG] [Thread-187789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:32:29.814 [INFO] [Thread-187789] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:32:29.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-14T15:32:29.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:32:30.621 [DEBUG] [Thread-187789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:32:30.622 [DEBUG] [Thread-187789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:32:30.670 [DEBUG] [Thread-187789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:32:30.670 [DEBUG] [Thread-187789] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:32:30.679 [DEBUG] [Thread-187789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:32:30.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:32:30.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-14T15:32:30.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-14T15:32:30.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:32:30.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:32:30.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:32:30.716 [DEBUG] [Thread-187789] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:32:42.897 [DEBUG] [Thread-187791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:32:47.675 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:32:47.676 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:32:57.941 [DEBUG] [Thread-187792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:33:00.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:33:00.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:33:00.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-14T15:33:02.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 32, 46), 16.41, 32.87, 0.0, 32.54, 17.17, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:33:02.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:32:46
2026-02-14T15:33:02.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:33:03.106 [DEBUG] [Thread-187793] [transport.py] [_log()] starting thread (client mode): 0xa57b1240
2026-02-14T15:33:03.106 [DEBUG] [Thread-187793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:33:03.126 [DEBUG] [Thread-187793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:33:03.126 [INFO] [Thread-187793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:33:03.129 [DEBUG] [Thread-187793] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:33:03.135 [DEBUG] [Thread-187793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:33:03.135 [DEBUG] [Thread-187793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:33:03.136 [DEBUG] [Thread-187793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:33:03.136 [DEBUG] [Thread-187793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:33:03.136 [DEBUG] [Thread-187793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:33:03.136 [DEBUG] [Thread-187793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:33:03.136 [DEBUG] [Thread-187793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:33:03.136 [DEBUG] [Thread-187793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:33:03.136 [DEBUG] [Thread-187793] [transport.py] [_log()] client lang: <none>
2026-02-14T15:33:03.136 [DEBUG] [Thread-187793] [transport.py] [_log()] server lang: <none>
2026-02-14T15:33:03.136 [DEBUG] [Thread-187793] [transport.py] [_log()] kex follows: False
2026-02-14T15:33:03.136 [DEBUG] [Thread-187793] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:33:03.136 [DEBUG] [Thread-187793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:33:03.136 [DEBUG] [Thread-187793] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:33:03.136 [DEBUG] [Thread-187793] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:33:03.136 [DEBUG] [Thread-187793] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:33:03.136 [DEBUG] [Thread-187793] [transport.py] [_log()] Compression: none
2026-02-14T15:33:03.136 [DEBUG] [Thread-187793] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:33:03.156 [DEBUG] [Thread-187793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:33:03.157 [DEBUG] [Thread-187793] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:33:03.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:33:03.157 [DEBUG] [Thread-187793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:33:03.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:33:03.160 [DEBUG] [Thread-187793] [transport.py] [_log()] userauth is OK
2026-02-14T15:33:03.160 [DEBUG] [Thread-187793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:33:03.160 [DEBUG] [Thread-187793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:33:03.160 [DEBUG] [Thread-187793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:33:03.160 [DEBUG] [Thread-187793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:33:03.184 [INFO] [Thread-187793] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:33:03.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:33:03.820 [DEBUG] [Thread-187793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:33:03.820 [DEBUG] [Thread-187793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:33:03.820 [DEBUG] [Thread-187793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:33:03.860 [DEBUG] [Thread-187793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:33:03.860 [DEBUG] [Thread-187793] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:33:03.863 [DEBUG] [Thread-187793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:33:03.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:33:03.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:33:03.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:33:03.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:33:03.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:33:03.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:33:03.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:33:03.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:33:03.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:33:03.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.563996 -999.00  +16.80  23.33     39   +2.90 1 1 1 1 1   888    0 14.09 3.08 ----- 14.3 23.3 163.6 32.3 22.7 -28.0 21.9 -27.1 23.4 -26.8 24.5 -28.3
2026-02-14T15:33:03.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:33:03.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:33:03.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.563996
2026-02-14T15:33:03.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:33:03.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:33:03.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:33:03.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:33:03.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:33:03.890 [DEBUG] [Thread-187793] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:33:03.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:32:46', tmtdew=16.41, humidity=32.87, cloud=0.0, wind=32.54, temperature=17.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:32:09.254', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:33:03.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-14T15:33:03.987 [DEBUG] [Thread-187796] [transport.py] [_log()] starting thread (client mode): 0xa2d208e0
2026-02-14T15:33:03.987 [DEBUG] [Thread-187796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:33:04.002 [DEBUG] [Thread-187796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:33:04.003 [INFO] [Thread-187796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:33:04.010 [DEBUG] [Thread-187796] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:33:04.011 [DEBUG] [Thread-187796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:33:04.011 [DEBUG] [Thread-187796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:33:04.011 [DEBUG] [Thread-187796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:33:04.011 [DEBUG] [Thread-187796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:33:04.011 [DEBUG] [Thread-187796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:33:04.011 [DEBUG] [Thread-187796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:33:04.012 [DEBUG] [Thread-187796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:33:04.012 [DEBUG] [Thread-187796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:33:04.012 [DEBUG] [Thread-187796] [transport.py] [_log()] client lang: <none>
2026-02-14T15:33:04.012 [DEBUG] [Thread-187796] [transport.py] [_log()] server lang: <none>
2026-02-14T15:33:04.012 [DEBUG] [Thread-187796] [transport.py] [_log()] kex follows: False
2026-02-14T15:33:04.012 [DEBUG] [Thread-187796] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:33:04.012 [DEBUG] [Thread-187796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:33:04.012 [DEBUG] [Thread-187796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:33:04.013 [DEBUG] [Thread-187796] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:33:04.013 [DEBUG] [Thread-187796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:33:04.013 [DEBUG] [Thread-187796] [transport.py] [_log()] Compression: none
2026-02-14T15:33:04.013 [DEBUG] [Thread-187796] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:33:04.071 [DEBUG] [Thread-187796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:33:04.072 [DEBUG] [Thread-187796] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:33:04.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:33:04.073 [DEBUG] [Thread-187796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:33:04.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:33:04.130 [DEBUG] [Thread-187796] [transport.py] [_log()] userauth is OK
2026-02-14T15:33:04.130 [DEBUG] [Thread-187796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:33:04.130 [DEBUG] [Thread-187796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:33:04.130 [DEBUG] [Thread-187796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:33:04.130 [DEBUG] [Thread-187796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:33:04.149 [INFO] [Thread-187796] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:33: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-14T15:33:04.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:33:04.971 [DEBUG] [Thread-187796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:33:04.971 [DEBUG] [Thread-187796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:33:05.018 [DEBUG] [Thread-187796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:33:05.019 [DEBUG] [Thread-187796] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:33:05.028 [DEBUG] [Thread-187796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:33:05.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:33:05.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-14T15:33:05.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-14T15:33:05.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:33:05.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:33:05.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:33:05.065 [DEBUG] [Thread-187796] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:33:12.981 [DEBUG] [Thread-187798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:33:28.037 [DEBUG] [Thread-187799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:33:28.995 [DEBUG] [Thread-187800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:33:35.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:33:35.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:33:35.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-14T15:33:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 33, 21), 16.43, 32.87, 0.0, 35.43, 17.3, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:33:37.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:33:21
2026-02-14T15:33:37.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:33:37.629 [DEBUG] [Thread-187801] [transport.py] [_log()] starting thread (client mode): 0xa2d23f40
2026-02-14T15:33:37.629 [DEBUG] [Thread-187801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:33:37.654 [DEBUG] [Thread-187801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:33:37.654 [INFO] [Thread-187801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:33:37.655 [DEBUG] [Thread-187801] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:33:37.655 [DEBUG] [Thread-187801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:33:37.655 [DEBUG] [Thread-187801] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:33:37.655 [DEBUG] [Thread-187801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:33:37.656 [DEBUG] [Thread-187801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:33:37.656 [DEBUG] [Thread-187801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:33:37.656 [DEBUG] [Thread-187801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:33:37.656 [DEBUG] [Thread-187801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:33:37.656 [DEBUG] [Thread-187801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:33:37.656 [DEBUG] [Thread-187801] [transport.py] [_log()] client lang: <none>
2026-02-14T15:33:37.656 [DEBUG] [Thread-187801] [transport.py] [_log()] server lang: <none>
2026-02-14T15:33:37.656 [DEBUG] [Thread-187801] [transport.py] [_log()] kex follows: False
2026-02-14T15:33:37.656 [DEBUG] [Thread-187801] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:33:37.656 [DEBUG] [Thread-187801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:33:37.656 [DEBUG] [Thread-187801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:33:37.656 [DEBUG] [Thread-187801] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:33:37.656 [DEBUG] [Thread-187801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:33:37.656 [DEBUG] [Thread-187801] [transport.py] [_log()] Compression: none
2026-02-14T15:33:37.656 [DEBUG] [Thread-187801] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:33:37.671 [DEBUG] [Thread-187801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:33:37.671 [DEBUG] [Thread-187801] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:33:37.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:33:37.672 [DEBUG] [Thread-187801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:33:37.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:33:37.674 [DEBUG] [Thread-187801] [transport.py] [_log()] userauth is OK
2026-02-14T15:33:37.674 [DEBUG] [Thread-187801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:33:37.675 [DEBUG] [Thread-187801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:33:37.675 [DEBUG] [Thread-187801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:33:37.675 [DEBUG] [Thread-187801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:33:37.698 [INFO] [Thread-187801] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:33:37.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:33:38.333 [DEBUG] [Thread-187801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:33:38.333 [DEBUG] [Thread-187801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:33:38.333 [DEBUG] [Thread-187801] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:33:38.374 [DEBUG] [Thread-187801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:33:38.374 [DEBUG] [Thread-187801] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:33:38.377 [DEBUG] [Thread-187801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:33:38.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:33:38.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:33:38.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:33:38.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:33:38.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:33:38.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:33:38.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:33:38.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:33:38.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:33:38.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.564343 -999.00  +16.90  25.86     39   +3.10 1 1 1 1 1   888    0 14.08 5.25 ----- 26.5 25.9 173.0 35.6 22.8 -29.2 22.0 -26.0 23.5 -25.3 24.6 -27.3
2026-02-14T15:33:38.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:33:38.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:33:38.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.564343
2026-02-14T15:33:38.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:33:38.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:33:38.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:33:38.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:33:38.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:33:38.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:33:21', tmtdew=16.43, humidity=32.87, cloud=0.0, wind=35.43, temperature=17.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:32:39.235', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:33:38.402 [DEBUG] [Thread-187801] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:33:38.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-14T15:33:38.498 [DEBUG] [Thread-187804] [transport.py] [_log()] starting thread (client mode): 0xa2dc0580
2026-02-14T15:33:38.498 [DEBUG] [Thread-187804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:33:38.513 [DEBUG] [Thread-187804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:33:38.513 [INFO] [Thread-187804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:33:38.521 [DEBUG] [Thread-187804] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:33:38.521 [DEBUG] [Thread-187804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:33:38.521 [DEBUG] [Thread-187804] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:33:38.521 [DEBUG] [Thread-187804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:33:38.521 [DEBUG] [Thread-187804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:33:38.521 [DEBUG] [Thread-187804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:33:38.522 [DEBUG] [Thread-187804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:33:38.522 [DEBUG] [Thread-187804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:33:38.522 [DEBUG] [Thread-187804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:33:38.522 [DEBUG] [Thread-187804] [transport.py] [_log()] client lang: <none>
2026-02-14T15:33:38.522 [DEBUG] [Thread-187804] [transport.py] [_log()] server lang: <none>
2026-02-14T15:33:38.522 [DEBUG] [Thread-187804] [transport.py] [_log()] kex follows: False
2026-02-14T15:33:38.522 [DEBUG] [Thread-187804] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:33:38.522 [DEBUG] [Thread-187804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:33:38.523 [DEBUG] [Thread-187804] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:33:38.523 [DEBUG] [Thread-187804] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:33:38.523 [DEBUG] [Thread-187804] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:33:38.523 [DEBUG] [Thread-187804] [transport.py] [_log()] Compression: none
2026-02-14T15:33:38.523 [DEBUG] [Thread-187804] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:33:38.582 [DEBUG] [Thread-187804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:33:38.583 [DEBUG] [Thread-187804] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:33:38.584 [DEBUG] [Thread-187804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:33:38.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:33:38.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:33:38.641 [DEBUG] [Thread-187804] [transport.py] [_log()] userauth is OK
2026-02-14T15:33:38.641 [DEBUG] [Thread-187804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:33:38.642 [DEBUG] [Thread-187804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:33:38.642 [DEBUG] [Thread-187804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:33:38.642 [DEBUG] [Thread-187804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:33:38.661 [INFO] [Thread-187804] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:33:38.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-14T15:33:38.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:33:39.466 [DEBUG] [Thread-187804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:33:39.466 [DEBUG] [Thread-187804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:33:39.514 [DEBUG] [Thread-187804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:33:39.515 [DEBUG] [Thread-187804] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:33:39.524 [DEBUG] [Thread-187804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:33:39.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:33:39.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-14T15:33:39.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-14T15:33:39.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:33:39.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:33:39.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:33:39.560 [DEBUG] [Thread-187804] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:33:43.073 [DEBUG] [Thread-187806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:33:47.818 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:33:47.819 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:33:58.124 [DEBUG] [Thread-187807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:34:09.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:34:09.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:34:09.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-14T15:34:11.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 33, 57), 16.42, 32.99, 0.0, 39.24, 17.27, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:34:11.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:33:57
2026-02-14T15:34:11.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:34:12.092 [DEBUG] [Thread-187808] [transport.py] [_log()] starting thread (client mode): 0xa2dc1e40
2026-02-14T15:34:12.092 [DEBUG] [Thread-187808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:34:12.113 [DEBUG] [Thread-187808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:34:12.113 [INFO] [Thread-187808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:34:12.116 [DEBUG] [Thread-187808] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:34:12.116 [DEBUG] [Thread-187808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:34:12.116 [DEBUG] [Thread-187808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:34:12.116 [DEBUG] [Thread-187808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:34:12.116 [DEBUG] [Thread-187808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:34:12.116 [DEBUG] [Thread-187808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:34:12.116 [DEBUG] [Thread-187808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:34:12.116 [DEBUG] [Thread-187808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:34:12.116 [DEBUG] [Thread-187808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:34:12.117 [DEBUG] [Thread-187808] [transport.py] [_log()] client lang: <none>
2026-02-14T15:34:12.117 [DEBUG] [Thread-187808] [transport.py] [_log()] server lang: <none>
2026-02-14T15:34:12.117 [DEBUG] [Thread-187808] [transport.py] [_log()] kex follows: False
2026-02-14T15:34:12.117 [DEBUG] [Thread-187808] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:34:12.117 [DEBUG] [Thread-187808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:34:12.117 [DEBUG] [Thread-187808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:34:12.117 [DEBUG] [Thread-187808] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:34:12.117 [DEBUG] [Thread-187808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:34:12.117 [DEBUG] [Thread-187808] [transport.py] [_log()] Compression: none
2026-02-14T15:34:12.117 [DEBUG] [Thread-187808] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:34:12.135 [DEBUG] [Thread-187808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:34:12.136 [DEBUG] [Thread-187808] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:34:12.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:34:12.137 [DEBUG] [Thread-187808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:34:12.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:34:12.139 [DEBUG] [Thread-187808] [transport.py] [_log()] userauth is OK
2026-02-14T15:34:12.140 [DEBUG] [Thread-187808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:34:12.140 [DEBUG] [Thread-187808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:34:12.140 [DEBUG] [Thread-187808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:34:12.140 [DEBUG] [Thread-187808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:34:12.158 [INFO] [Thread-187808] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:34:12.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:34:12.803 [DEBUG] [Thread-187808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:34:12.804 [DEBUG] [Thread-187808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:34:12.804 [DEBUG] [Thread-187808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:34:12.844 [DEBUG] [Thread-187808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:34:12.845 [DEBUG] [Thread-187808] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:34:12.848 [DEBUG] [Thread-187808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:34:12.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:34:12.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:34:12.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:34:12.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:34:12.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:34:12.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:34:12.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:34:12.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:34:12.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:34:12.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.564690 -999.00  +17.00  29.26     39   +3.00 1 1 1 1 1   888    0 14.24 7.22 ----- 30.6 29.3 169.4 45.4 22.8 -28.0 22.1 -26.2 23.5 -27.3 24.6 -28.1
2026-02-14T15:34:12.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:34:12.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:34:12.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.564690
2026-02-14T15:34:12.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:34:12.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:34:12.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:34:12.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:34:12.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:34:12.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:33:57', tmtdew=16.42, humidity=32.99, cloud=0.0, wind=39.24, temperature=17.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:33:09.216', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:34:12.872 [DEBUG] [Thread-187808] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:34:12.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-14T15:34:13.161 [DEBUG] [Thread-187811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:34:28.212 [DEBUG] [Thread-187812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:34:29.029 [DEBUG] [Thread-187813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:34:43.250 [DEBUG] [Thread-187814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:34:47.958 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:34:47.959 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:34:58.281 [DEBUG] [Thread-187815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:35:13.314 [DEBUG] [Thread-187816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:35:28.350 [DEBUG] [Thread-187817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:35:29.071 [DEBUG] [Thread-187818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:35:43.389 [DEBUG] [Thread-187819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:35:48.103 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:35:48.104 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:35:58.425 [DEBUG] [Thread-187820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:36:13.466 [DEBUG] [Thread-187821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:36:28.215 [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-14T15:36:28.505 [DEBUG] [Thread-187822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:36:29.106 [DEBUG] [Thread-187823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:36:43.543 [DEBUG] [Thread-187824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:36:48.253 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:36:48.254 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:36:58.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:36:58.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:36:58.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-14T15:36:58.581 [DEBUG] [Thread-187825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:37:00.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 36, 19), 16.68, 32.67, 0.0, 35.71, 17.52, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:37:00.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:36:19
2026-02-14T15:37:00.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:37:00.689 [DEBUG] [Thread-187826] [transport.py] [_log()] starting thread (client mode): 0xa2dc2890
2026-02-14T15:37:00.690 [DEBUG] [Thread-187826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:37:00.710 [DEBUG] [Thread-187826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:37:00.710 [INFO] [Thread-187826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:37:00.711 [DEBUG] [Thread-187826] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:37:00.711 [DEBUG] [Thread-187826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:37:00.711 [DEBUG] [Thread-187826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:37:00.711 [DEBUG] [Thread-187826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:37:00.711 [DEBUG] [Thread-187826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:37:00.711 [DEBUG] [Thread-187826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:37:00.711 [DEBUG] [Thread-187826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:37:00.711 [DEBUG] [Thread-187826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:37:00.711 [DEBUG] [Thread-187826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:37:00.711 [DEBUG] [Thread-187826] [transport.py] [_log()] client lang: <none>
2026-02-14T15:37:00.711 [DEBUG] [Thread-187826] [transport.py] [_log()] server lang: <none>
2026-02-14T15:37:00.711 [DEBUG] [Thread-187826] [transport.py] [_log()] kex follows: False
2026-02-14T15:37:00.711 [DEBUG] [Thread-187826] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:37:00.711 [DEBUG] [Thread-187826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:37:00.712 [DEBUG] [Thread-187826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:37:00.712 [DEBUG] [Thread-187826] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:37:00.712 [DEBUG] [Thread-187826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:37:00.712 [DEBUG] [Thread-187826] [transport.py] [_log()] Compression: none
2026-02-14T15:37:00.712 [DEBUG] [Thread-187826] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:37:00.720 [DEBUG] [Thread-187826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:37:00.720 [DEBUG] [Thread-187826] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:37:00.721 [DEBUG] [Thread-187826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:37:00.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:37:00.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:37:00.723 [DEBUG] [Thread-187826] [transport.py] [_log()] userauth is OK
2026-02-14T15:37:00.723 [DEBUG] [Thread-187826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:37:00.723 [DEBUG] [Thread-187826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:37:00.723 [DEBUG] [Thread-187826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:37:00.723 [DEBUG] [Thread-187826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:37:00.741 [INFO] [Thread-187826] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:37:00.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:37:01.371 [DEBUG] [Thread-187826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:37:01.371 [DEBUG] [Thread-187826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:37:01.372 [DEBUG] [Thread-187826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:37:01.412 [DEBUG] [Thread-187826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:37:01.412 [DEBUG] [Thread-187826] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:37:01.416 [DEBUG] [Thread-187826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:37:01.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:37:01.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:37:01.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:37:01.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:37:01.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:37:01.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:37:01.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:37:01.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:37:01.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:37:01.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.567121 -999.00  +16.80  16.76     39   +2.70 1 1 1 1 1   888    0 13.88 2.81 ----- 14.6 16.8 170.1 34.6 22.4 -28.8 21.4 -31.8 23.1 -27.1 24.1 -30.3
2026-02-14T15:37:01.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:37:01.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:37:01.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.567121
2026-02-14T15:37:01.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:37:01.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:37:01.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:37:01.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:37:01.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:37:01.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:36:19', tmtdew=16.68, humidity=32.67, cloud=0.0, wind=35.71, temperature=17.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:36:39.254', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:37:01.442 [DEBUG] [Thread-187826] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:37:01.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-14T15:37:01.539 [DEBUG] [Thread-187829] [transport.py] [_log()] starting thread (client mode): 0xa2d23d30
2026-02-14T15:37:01.540 [DEBUG] [Thread-187829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:37:01.557 [DEBUG] [Thread-187829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:37:01.558 [INFO] [Thread-187829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:37:01.568 [DEBUG] [Thread-187829] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:37:01.568 [DEBUG] [Thread-187829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:37:01.568 [DEBUG] [Thread-187829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:37:01.568 [DEBUG] [Thread-187829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:37:01.568 [DEBUG] [Thread-187829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:37:01.568 [DEBUG] [Thread-187829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:37:01.569 [DEBUG] [Thread-187829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:37:01.569 [DEBUG] [Thread-187829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:37:01.569 [DEBUG] [Thread-187829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:37:01.569 [DEBUG] [Thread-187829] [transport.py] [_log()] client lang: <none>
2026-02-14T15:37:01.569 [DEBUG] [Thread-187829] [transport.py] [_log()] server lang: <none>
2026-02-14T15:37:01.569 [DEBUG] [Thread-187829] [transport.py] [_log()] kex follows: False
2026-02-14T15:37:01.569 [DEBUG] [Thread-187829] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:37:01.569 [DEBUG] [Thread-187829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:37:01.570 [DEBUG] [Thread-187829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:37:01.570 [DEBUG] [Thread-187829] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:37:01.570 [DEBUG] [Thread-187829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:37:01.570 [DEBUG] [Thread-187829] [transport.py] [_log()] Compression: none
2026-02-14T15:37:01.570 [DEBUG] [Thread-187829] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:37:01.628 [DEBUG] [Thread-187829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:37:01.628 [DEBUG] [Thread-187829] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:37:01.628 [DEBUG] [Thread-187829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:37:01.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:37:01.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:37:01.690 [DEBUG] [Thread-187829] [transport.py] [_log()] userauth is OK
2026-02-14T15:37:01.690 [DEBUG] [Thread-187829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:37:01.690 [DEBUG] [Thread-187829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:37:01.690 [DEBUG] [Thread-187829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:37:01.690 [DEBUG] [Thread-187829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:37:01.712 [INFO] [Thread-187829] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:37:01.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-14T15:37:01.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:37:02.566 [DEBUG] [Thread-187829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:37:02.566 [DEBUG] [Thread-187829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:37:02.614 [DEBUG] [Thread-187829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:37:02.615 [DEBUG] [Thread-187829] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:37:02.624 [DEBUG] [Thread-187829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:37:02.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:37:02.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:37:02.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:37:02.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:37:02.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:37:02.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:37:02.660 [DEBUG] [Thread-187829] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:37:13.618 [DEBUG] [Thread-187831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:37:28.673 [DEBUG] [Thread-187832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:37:29.139 [DEBUG] [Thread-187833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:37:32.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:37:32.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:37:32.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-14T15:37:34.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 36, 54), 16.8, 32.24, 0.0, 36.59, 17.12, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:37:34.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:36:54
2026-02-14T15:37:35.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:37:35.265 [DEBUG] [Thread-187834] [transport.py] [_log()] starting thread (client mode): 0xa2d21d80
2026-02-14T15:37:35.265 [DEBUG] [Thread-187834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:37:35.281 [DEBUG] [Thread-187834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:37:35.282 [INFO] [Thread-187834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:37:35.284 [DEBUG] [Thread-187834] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:37:35.285 [DEBUG] [Thread-187834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:37:35.285 [DEBUG] [Thread-187834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:37:35.285 [DEBUG] [Thread-187834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:37:35.285 [DEBUG] [Thread-187834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:37:35.285 [DEBUG] [Thread-187834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:37:35.285 [DEBUG] [Thread-187834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:37:35.285 [DEBUG] [Thread-187834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:37:35.285 [DEBUG] [Thread-187834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:37:35.285 [DEBUG] [Thread-187834] [transport.py] [_log()] client lang: <none>
2026-02-14T15:37:35.285 [DEBUG] [Thread-187834] [transport.py] [_log()] server lang: <none>
2026-02-14T15:37:35.285 [DEBUG] [Thread-187834] [transport.py] [_log()] kex follows: False
2026-02-14T15:37:35.285 [DEBUG] [Thread-187834] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:37:35.285 [DEBUG] [Thread-187834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:37:35.285 [DEBUG] [Thread-187834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:37:35.285 [DEBUG] [Thread-187834] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:37:35.286 [DEBUG] [Thread-187834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:37:35.286 [DEBUG] [Thread-187834] [transport.py] [_log()] Compression: none
2026-02-14T15:37:35.286 [DEBUG] [Thread-187834] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:37:35.303 [DEBUG] [Thread-187834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:37:35.304 [DEBUG] [Thread-187834] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:37:35.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:37:35.305 [DEBUG] [Thread-187834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:37:35.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:37:35.307 [DEBUG] [Thread-187834] [transport.py] [_log()] userauth is OK
2026-02-14T15:37:35.308 [DEBUG] [Thread-187834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:37:35.308 [DEBUG] [Thread-187834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:37:35.308 [DEBUG] [Thread-187834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:37:35.308 [DEBUG] [Thread-187834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:37:35.328 [INFO] [Thread-187834] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:37:35.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:37:35.888 [DEBUG] [Thread-187834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:37:35.889 [DEBUG] [Thread-187834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:37:35.889 [DEBUG] [Thread-187834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:37:35.929 [DEBUG] [Thread-187834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:37:35.929 [DEBUG] [Thread-187834] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:37:35.932 [DEBUG] [Thread-187834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:37:35.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:37:35.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:37:35.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:37:35.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:37:35.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:37:35.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:37:35.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:37:35.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:37:35.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:37:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.567468 -999.00  +16.90  25.39     38   +2.60 1 1 1 1 1   888    0 14.00 4.47 ----- 27.3 25.4 179.8 32.1 22.4 -28.9 21.4 -29.4 23.2 -26.6 24.1 -28.8
2026-02-14T15:37:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:37:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:37:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.567468
2026-02-14T15:37:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:37:35.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:37:35.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:37:35.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:37:35.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:37:35.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:36:54', tmtdew=16.8, humidity=32.24, cloud=0.0, wind=36.59, temperature=17.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:37:09.235', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:37:35.962 [DEBUG] [Thread-187834] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:37:36.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-14T15:37:36.058 [DEBUG] [Thread-187837] [transport.py] [_log()] starting thread (client mode): 0xa2d21600
2026-02-14T15:37:36.058 [DEBUG] [Thread-187837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:37:36.072 [DEBUG] [Thread-187837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:37:36.073 [INFO] [Thread-187837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:37:36.080 [DEBUG] [Thread-187837] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:37:36.081 [DEBUG] [Thread-187837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:37:36.081 [DEBUG] [Thread-187837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:37:36.081 [DEBUG] [Thread-187837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:37:36.081 [DEBUG] [Thread-187837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:37:36.081 [DEBUG] [Thread-187837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:37:36.082 [DEBUG] [Thread-187837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:37:36.082 [DEBUG] [Thread-187837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:37:36.082 [DEBUG] [Thread-187837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:37:36.082 [DEBUG] [Thread-187837] [transport.py] [_log()] client lang: <none>
2026-02-14T15:37:36.082 [DEBUG] [Thread-187837] [transport.py] [_log()] server lang: <none>
2026-02-14T15:37:36.082 [DEBUG] [Thread-187837] [transport.py] [_log()] kex follows: False
2026-02-14T15:37:36.082 [DEBUG] [Thread-187837] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:37:36.082 [DEBUG] [Thread-187837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:37:36.083 [DEBUG] [Thread-187837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:37:36.083 [DEBUG] [Thread-187837] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:37:36.083 [DEBUG] [Thread-187837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:37:36.083 [DEBUG] [Thread-187837] [transport.py] [_log()] Compression: none
2026-02-14T15:37:36.083 [DEBUG] [Thread-187837] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:37:36.140 [DEBUG] [Thread-187837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:37:36.141 [DEBUG] [Thread-187837] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:37:36.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:37:36.143 [DEBUG] [Thread-187837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:37:36.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:37:36.200 [DEBUG] [Thread-187837] [transport.py] [_log()] userauth is OK
2026-02-14T15:37:36.201 [DEBUG] [Thread-187837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:37:36.201 [DEBUG] [Thread-187837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:37:36.201 [DEBUG] [Thread-187837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:37:36.201 [DEBUG] [Thread-187837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:37:36.220 [INFO] [Thread-187837] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:37:36.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-14T15:37:36.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:37:37.034 [DEBUG] [Thread-187837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:37:37.035 [DEBUG] [Thread-187837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:37:37.082 [DEBUG] [Thread-187837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:37:37.082 [DEBUG] [Thread-187837] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:37:37.091 [DEBUG] [Thread-187837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:37:37.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:37:37.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-14T15:37:37.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:37:37.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:37:37.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:37:37.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:37:37.128 [DEBUG] [Thread-187837] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:37:43.712 [DEBUG] [Thread-187839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:37:48.393 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:37:48.394 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:37:58.775 [DEBUG] [Thread-187840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:38:07.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:38:07.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:38:07.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-14T15:38:09.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 37, 29), 16.55, 32.69, 0.0, 31.62, 16.88, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:38:09.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:37:29
2026-02-14T15:38:09.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:38:09.794 [DEBUG] [Thread-187841] [transport.py] [_log()] starting thread (client mode): 0xa2d218a0
2026-02-14T15:38:09.794 [DEBUG] [Thread-187841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:38:09.814 [DEBUG] [Thread-187841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:38:09.814 [INFO] [Thread-187841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:38:09.817 [DEBUG] [Thread-187841] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:38:09.817 [DEBUG] [Thread-187841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:38:09.817 [DEBUG] [Thread-187841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:38:09.817 [DEBUG] [Thread-187841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:38:09.817 [DEBUG] [Thread-187841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:38:09.817 [DEBUG] [Thread-187841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:38:09.817 [DEBUG] [Thread-187841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:38:09.817 [DEBUG] [Thread-187841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:38:09.817 [DEBUG] [Thread-187841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:38:09.817 [DEBUG] [Thread-187841] [transport.py] [_log()] client lang: <none>
2026-02-14T15:38:09.817 [DEBUG] [Thread-187841] [transport.py] [_log()] server lang: <none>
2026-02-14T15:38:09.817 [DEBUG] [Thread-187841] [transport.py] [_log()] kex follows: False
2026-02-14T15:38:09.817 [DEBUG] [Thread-187841] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:38:09.817 [DEBUG] [Thread-187841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:38:09.817 [DEBUG] [Thread-187841] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:38:09.817 [DEBUG] [Thread-187841] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:38:09.817 [DEBUG] [Thread-187841] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:38:09.817 [DEBUG] [Thread-187841] [transport.py] [_log()] Compression: none
2026-02-14T15:38:09.818 [DEBUG] [Thread-187841] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:38:09.834 [DEBUG] [Thread-187841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:38:09.835 [DEBUG] [Thread-187841] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:38:09.835 [DEBUG] [Thread-187841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:38:09.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:38:09.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:38:09.836 [DEBUG] [Thread-187841] [transport.py] [_log()] userauth is OK
2026-02-14T15:38:09.837 [DEBUG] [Thread-187841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:38:09.837 [DEBUG] [Thread-187841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:38:09.837 [DEBUG] [Thread-187841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:38:09.837 [DEBUG] [Thread-187841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:38:09.852 [INFO] [Thread-187841] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:38:09.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:38:10.447 [DEBUG] [Thread-187841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:38:10.447 [DEBUG] [Thread-187841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:38:10.448 [DEBUG] [Thread-187841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:38:10.488 [DEBUG] [Thread-187841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:38:10.489 [DEBUG] [Thread-187841] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:38:10.492 [DEBUG] [Thread-187841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:38:10.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:38:10.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:38:10.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:38:10.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:38:10.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:38:10.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:38:10.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:38:10.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:38:10.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:38:10.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.567815 -999.00  +16.80  25.06     38   +2.70 1 1 1 1 1   888    0 14.27 6.00 ----- 23.9 25.1 193.0 33.0 22.4 -29.1 21.6 -25.8 23.2 -25.3 24.2 -26.7
2026-02-14T15:38:10.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:38:10.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:38:10.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.567815
2026-02-14T15:38:10.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:38:10.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:38:10.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:38:10.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:38:10.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:38:10.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:37:29', tmtdew=16.55, humidity=32.69, cloud=0.0, wind=31.62, temperature=16.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:37:39.216', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:38:10.518 [DEBUG] [Thread-187841] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:38:10.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-14T15:38:10.615 [DEBUG] [Thread-187844] [transport.py] [_log()] starting thread (client mode): 0xa2d20e80
2026-02-14T15:38:10.615 [DEBUG] [Thread-187844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:38:10.631 [DEBUG] [Thread-187844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:38:10.631 [INFO] [Thread-187844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:38:10.638 [DEBUG] [Thread-187844] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:38:10.638 [DEBUG] [Thread-187844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:38:10.639 [DEBUG] [Thread-187844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:38:10.639 [DEBUG] [Thread-187844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:38:10.639 [DEBUG] [Thread-187844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:38:10.639 [DEBUG] [Thread-187844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:38:10.639 [DEBUG] [Thread-187844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:38:10.639 [DEBUG] [Thread-187844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:38:10.639 [DEBUG] [Thread-187844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:38:10.639 [DEBUG] [Thread-187844] [transport.py] [_log()] client lang: <none>
2026-02-14T15:38:10.639 [DEBUG] [Thread-187844] [transport.py] [_log()] server lang: <none>
2026-02-14T15:38:10.639 [DEBUG] [Thread-187844] [transport.py] [_log()] kex follows: False
2026-02-14T15:38:10.639 [DEBUG] [Thread-187844] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:38:10.639 [DEBUG] [Thread-187844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:38:10.639 [DEBUG] [Thread-187844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:38:10.639 [DEBUG] [Thread-187844] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:38:10.639 [DEBUG] [Thread-187844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:38:10.639 [DEBUG] [Thread-187844] [transport.py] [_log()] Compression: none
2026-02-14T15:38:10.639 [DEBUG] [Thread-187844] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:38:10.695 [DEBUG] [Thread-187844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:38:10.695 [DEBUG] [Thread-187844] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:38:10.696 [DEBUG] [Thread-187844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:38:10.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:38:10.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:38:10.751 [DEBUG] [Thread-187844] [transport.py] [_log()] userauth is OK
2026-02-14T15:38:10.752 [DEBUG] [Thread-187844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:38:10.752 [DEBUG] [Thread-187844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:38:10.752 [DEBUG] [Thread-187844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:38:10.752 [DEBUG] [Thread-187844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:38:10.771 [INFO] [Thread-187844] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:38:10.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-14T15:38:10.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:38:11.617 [DEBUG] [Thread-187844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:38:11.618 [DEBUG] [Thread-187844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:38:11.666 [DEBUG] [Thread-187844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:38:11.666 [DEBUG] [Thread-187844] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:38:11.676 [DEBUG] [Thread-187844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:38:11.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:38: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-14T15:38: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-14T15:38:11.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:38:11.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:38:11.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:38:11.712 [DEBUG] [Thread-187844] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:38:13.814 [DEBUG] [Thread-187846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:38:28.869 [DEBUG] [Thread-187847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:38:29.184 [DEBUG] [Thread-187848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:38:41.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:38:41.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:38:41.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T15:38:43.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 38, 4), 16.63, 32.54, 0.0, 32.48, 16.93, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:38:43.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:38:04
2026-02-14T15:38:43.906 [DEBUG] [Thread-187849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:38:44.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:38:44.234 [DEBUG] [Thread-187850] [transport.py] [_log()] starting thread (client mode): 0xa2dc1e40
2026-02-14T15:38:44.234 [DEBUG] [Thread-187850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:38:44.251 [DEBUG] [Thread-187850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:38:44.252 [INFO] [Thread-187850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:38:44.254 [DEBUG] [Thread-187850] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:38:44.254 [DEBUG] [Thread-187850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:38:44.254 [DEBUG] [Thread-187850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:38:44.254 [DEBUG] [Thread-187850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:38:44.255 [DEBUG] [Thread-187850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:38:44.255 [DEBUG] [Thread-187850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:38:44.255 [DEBUG] [Thread-187850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:38:44.255 [DEBUG] [Thread-187850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:38:44.255 [DEBUG] [Thread-187850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:38:44.255 [DEBUG] [Thread-187850] [transport.py] [_log()] client lang: <none>
2026-02-14T15:38:44.255 [DEBUG] [Thread-187850] [transport.py] [_log()] server lang: <none>
2026-02-14T15:38:44.255 [DEBUG] [Thread-187850] [transport.py] [_log()] kex follows: False
2026-02-14T15:38:44.255 [DEBUG] [Thread-187850] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:38:44.255 [DEBUG] [Thread-187850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:38:44.255 [DEBUG] [Thread-187850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:38:44.255 [DEBUG] [Thread-187850] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:38:44.255 [DEBUG] [Thread-187850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:38:44.255 [DEBUG] [Thread-187850] [transport.py] [_log()] Compression: none
2026-02-14T15:38:44.255 [DEBUG] [Thread-187850] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:38:44.273 [DEBUG] [Thread-187850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:38:44.273 [DEBUG] [Thread-187850] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:38:44.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:38:44.275 [DEBUG] [Thread-187850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:38:44.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:38:44.277 [DEBUG] [Thread-187850] [transport.py] [_log()] userauth is OK
2026-02-14T15:38:44.277 [DEBUG] [Thread-187850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:38:44.277 [DEBUG] [Thread-187850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:38:44.277 [DEBUG] [Thread-187850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:38:44.277 [DEBUG] [Thread-187850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:38:44.302 [INFO] [Thread-187850] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:38:44.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:38:44.863 [DEBUG] [Thread-187850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:38:44.864 [DEBUG] [Thread-187850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:38:44.864 [DEBUG] [Thread-187850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:38:44.904 [DEBUG] [Thread-187850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:38:44.904 [DEBUG] [Thread-187850] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:38:44.908 [DEBUG] [Thread-187850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:38:44.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:38:44.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:38:44.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:38:44.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:38:44.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:38:44.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:38:44.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:38:44.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:38:44.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:38:44.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.568163 -999.00  +16.80  23.56     39   +2.80 1 1 1 1 1   888    0 14.26 7.71 ----- 24.6 23.6 176.3 33.1 22.4 -28.3 21.4 -26.3 23.2 -26.6 24.2 -28.0
2026-02-14T15:38:44.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:38:44.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:38:44.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.568163
2026-02-14T15:38:44.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:38:44.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:38:44.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:38:44.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:38:44.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:38:44.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:38:04', tmtdew=16.63, humidity=32.54, cloud=0.0, wind=32.48, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:38:09.283', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:38:44.943 [DEBUG] [Thread-187850] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:38:45.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-14T15:38:45.038 [DEBUG] [Thread-187853] [transport.py] [_log()] starting thread (client mode): 0xa2d22ef0
2026-02-14T15:38:45.038 [DEBUG] [Thread-187853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:38:45.052 [DEBUG] [Thread-187853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:38:45.052 [INFO] [Thread-187853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:38:45.060 [DEBUG] [Thread-187853] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:38:45.060 [DEBUG] [Thread-187853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:38:45.061 [DEBUG] [Thread-187853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:38:45.061 [DEBUG] [Thread-187853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:38:45.061 [DEBUG] [Thread-187853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:38:45.061 [DEBUG] [Thread-187853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:38:45.061 [DEBUG] [Thread-187853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:38:45.061 [DEBUG] [Thread-187853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:38:45.061 [DEBUG] [Thread-187853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:38:45.061 [DEBUG] [Thread-187853] [transport.py] [_log()] client lang: <none>
2026-02-14T15:38:45.061 [DEBUG] [Thread-187853] [transport.py] [_log()] server lang: <none>
2026-02-14T15:38:45.061 [DEBUG] [Thread-187853] [transport.py] [_log()] kex follows: False
2026-02-14T15:38:45.061 [DEBUG] [Thread-187853] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:38:45.061 [DEBUG] [Thread-187853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:38:45.061 [DEBUG] [Thread-187853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:38:45.061 [DEBUG] [Thread-187853] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:38:45.061 [DEBUG] [Thread-187853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:38:45.061 [DEBUG] [Thread-187853] [transport.py] [_log()] Compression: none
2026-02-14T15:38:45.061 [DEBUG] [Thread-187853] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:38:45.119 [DEBUG] [Thread-187853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:38:45.120 [DEBUG] [Thread-187853] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:38:45.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:38:45.121 [DEBUG] [Thread-187853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:38:45.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:38:45.175 [DEBUG] [Thread-187853] [transport.py] [_log()] userauth is OK
2026-02-14T15:38:45.176 [DEBUG] [Thread-187853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:38:45.176 [DEBUG] [Thread-187853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:38:45.176 [DEBUG] [Thread-187853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:38:45.176 [DEBUG] [Thread-187853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:38:45.194 [INFO] [Thread-187853] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:38:45.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-14T15:38:45.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:38:46.024 [DEBUG] [Thread-187853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:38:46.024 [DEBUG] [Thread-187853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:38:46.072 [DEBUG] [Thread-187853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:38:46.072 [DEBUG] [Thread-187853] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:38:46.082 [DEBUG] [Thread-187853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:38:46.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:38:46.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-14T15:38:46.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-14T15:38:46.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:38:46.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:38:46.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:38:46.118 [DEBUG] [Thread-187853] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:38:48.535 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:38:48.536 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:38:58.946 [DEBUG] [Thread-187855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:39:14.004 [DEBUG] [Thread-187856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:39:16.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:39:16.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:39:16.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-14T15:39:18.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 38, 39), 18.31, 29.22, 0.0, 29.04, 18.97, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:39:18.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:38:39
2026-02-14T15:39:19.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:39:19.263 [DEBUG] [Thread-187857] [transport.py] [_log()] starting thread (client mode): 0xa2defdc0
2026-02-14T15:39:19.263 [DEBUG] [Thread-187857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:39:19.283 [DEBUG] [Thread-187857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:39:19.283 [INFO] [Thread-187857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:39:19.286 [DEBUG] [Thread-187857] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:39:19.286 [DEBUG] [Thread-187857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:39:19.286 [DEBUG] [Thread-187857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:39:19.286 [DEBUG] [Thread-187857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:39:19.286 [DEBUG] [Thread-187857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:39:19.286 [DEBUG] [Thread-187857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:39:19.286 [DEBUG] [Thread-187857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:39:19.286 [DEBUG] [Thread-187857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:39:19.286 [DEBUG] [Thread-187857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:39:19.286 [DEBUG] [Thread-187857] [transport.py] [_log()] client lang: <none>
2026-02-14T15:39:19.286 [DEBUG] [Thread-187857] [transport.py] [_log()] server lang: <none>
2026-02-14T15:39:19.286 [DEBUG] [Thread-187857] [transport.py] [_log()] kex follows: False
2026-02-14T15:39:19.286 [DEBUG] [Thread-187857] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:39:19.286 [DEBUG] [Thread-187857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:39:19.287 [DEBUG] [Thread-187857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:39:19.287 [DEBUG] [Thread-187857] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:39:19.287 [DEBUG] [Thread-187857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:39:19.287 [DEBUG] [Thread-187857] [transport.py] [_log()] Compression: none
2026-02-14T15:39:19.287 [DEBUG] [Thread-187857] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:39:19.304 [DEBUG] [Thread-187857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:39:19.305 [DEBUG] [Thread-187857] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:39:19.305 [DEBUG] [Thread-187857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:39:19.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:39:19.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:39:19.348 [DEBUG] [Thread-187857] [transport.py] [_log()] userauth is OK
2026-02-14T15:39:19.349 [DEBUG] [Thread-187857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:39:19.349 [DEBUG] [Thread-187857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:39:19.349 [DEBUG] [Thread-187857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:39:19.349 [DEBUG] [Thread-187857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:39:19.381 [INFO] [Thread-187857] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:39:19.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:39:19.996 [DEBUG] [Thread-187857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:39:19.997 [DEBUG] [Thread-187857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:39:19.997 [DEBUG] [Thread-187857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:39:20.037 [DEBUG] [Thread-187857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:39:20.038 [DEBUG] [Thread-187857] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:39:20.041 [DEBUG] [Thread-187857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:39:20.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:39:20.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:39:20.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:39:20.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:39:20.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:39:20.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:39:20.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:39:20.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:39:20.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:39:20.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.568510 -999.00  +16.70  28.05     39   +2.90 1 1 1 1 1   888    0 14.26 8.71 ----- 26.9 28.1 170.6 33.0 22.3 -28.5 21.6 -28.2 23.1 -26.4 24.1 -27.7
2026-02-14T15:39:20.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:39:20.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:39:20.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.568510
2026-02-14T15:39:20.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:39:20.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:39:20.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:39:20.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:39:20.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:39:20.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:38:39', tmtdew=18.31, humidity=29.22, cloud=0.0, wind=29.04, temperature=18.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:38:39.264', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:39:20.069 [DEBUG] [Thread-187857] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:39:20.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-14T15:39:20.174 [DEBUG] [Thread-187860] [transport.py] [_log()] starting thread (client mode): 0xa2defd00
2026-02-14T15:39:20.174 [DEBUG] [Thread-187860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:39:20.189 [DEBUG] [Thread-187860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:39:20.189 [INFO] [Thread-187860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:39:20.196 [DEBUG] [Thread-187860] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:39:20.197 [DEBUG] [Thread-187860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:39:20.197 [DEBUG] [Thread-187860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:39:20.197 [DEBUG] [Thread-187860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:39:20.197 [DEBUG] [Thread-187860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:39:20.197 [DEBUG] [Thread-187860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:39:20.197 [DEBUG] [Thread-187860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:39:20.197 [DEBUG] [Thread-187860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:39:20.197 [DEBUG] [Thread-187860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:39:20.197 [DEBUG] [Thread-187860] [transport.py] [_log()] client lang: <none>
2026-02-14T15:39:20.197 [DEBUG] [Thread-187860] [transport.py] [_log()] server lang: <none>
2026-02-14T15:39:20.197 [DEBUG] [Thread-187860] [transport.py] [_log()] kex follows: False
2026-02-14T15:39:20.197 [DEBUG] [Thread-187860] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:39:20.197 [DEBUG] [Thread-187860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:39:20.197 [DEBUG] [Thread-187860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:39:20.197 [DEBUG] [Thread-187860] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:39:20.197 [DEBUG] [Thread-187860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:39:20.197 [DEBUG] [Thread-187860] [transport.py] [_log()] Compression: none
2026-02-14T15:39:20.197 [DEBUG] [Thread-187860] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:39:20.254 [DEBUG] [Thread-187860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:39:20.255 [DEBUG] [Thread-187860] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:39:20.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:39:20.255 [DEBUG] [Thread-187860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:39:20.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:39:20.310 [DEBUG] [Thread-187860] [transport.py] [_log()] userauth is OK
2026-02-14T15:39:20.310 [DEBUG] [Thread-187860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:39:20.310 [DEBUG] [Thread-187860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:39:20.310 [DEBUG] [Thread-187860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:39:20.310 [DEBUG] [Thread-187860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:39:20.324 [INFO] [Thread-187860] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:39:20.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-14T15:39:20.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:39:21.140 [DEBUG] [Thread-187860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:39:21.140 [DEBUG] [Thread-187860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:39:21.190 [DEBUG] [Thread-187860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:39:21.190 [DEBUG] [Thread-187860] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:39:21.199 [DEBUG] [Thread-187860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:39:21.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:39:21.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:39:21.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-14T15:39:21.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:39:21.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:39:21.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:39:21.236 [DEBUG] [Thread-187860] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:39:29.040 [DEBUG] [Thread-187862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:39:29.214 [DEBUG] [Thread-187863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:39:44.080 [DEBUG] [Thread-187864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:39:48.676 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:39:48.677 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:39:51.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:39:51.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:39: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-14T15:39:53.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 39, 15), 16.36, 33.17, 0.0, 28.88, 17.12, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:39:53.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:39:15
2026-02-14T15:39:53.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:39:53.843 [DEBUG] [Thread-187865] [transport.py] [_log()] starting thread (client mode): 0xa2dee530
2026-02-14T15:39:53.844 [DEBUG] [Thread-187865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:39:53.864 [DEBUG] [Thread-187865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:39:53.865 [INFO] [Thread-187865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:39:53.868 [DEBUG] [Thread-187865] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:39:53.868 [DEBUG] [Thread-187865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:39:53.868 [DEBUG] [Thread-187865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:39:53.868 [DEBUG] [Thread-187865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:39:53.868 [DEBUG] [Thread-187865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:39:53.868 [DEBUG] [Thread-187865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:39:53.868 [DEBUG] [Thread-187865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:39:53.869 [DEBUG] [Thread-187865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:39:53.869 [DEBUG] [Thread-187865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:39:53.869 [DEBUG] [Thread-187865] [transport.py] [_log()] client lang: <none>
2026-02-14T15:39:53.869 [DEBUG] [Thread-187865] [transport.py] [_log()] server lang: <none>
2026-02-14T15:39:53.869 [DEBUG] [Thread-187865] [transport.py] [_log()] kex follows: False
2026-02-14T15:39:53.869 [DEBUG] [Thread-187865] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:39:53.869 [DEBUG] [Thread-187865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:39:53.869 [DEBUG] [Thread-187865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:39:53.869 [DEBUG] [Thread-187865] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:39:53.869 [DEBUG] [Thread-187865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:39:53.869 [DEBUG] [Thread-187865] [transport.py] [_log()] Compression: none
2026-02-14T15:39:53.869 [DEBUG] [Thread-187865] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:39:53.885 [DEBUG] [Thread-187865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:39:53.885 [DEBUG] [Thread-187865] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:39:53.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:39:53.886 [DEBUG] [Thread-187865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:39:53.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:39:53.888 [DEBUG] [Thread-187865] [transport.py] [_log()] userauth is OK
2026-02-14T15:39:53.888 [DEBUG] [Thread-187865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:39:53.888 [DEBUG] [Thread-187865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:39:53.888 [DEBUG] [Thread-187865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:39:53.888 [DEBUG] [Thread-187865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:39:53.903 [INFO] [Thread-187865] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:39:53.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:39:54.560 [DEBUG] [Thread-187865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:39:54.560 [DEBUG] [Thread-187865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:39:54.561 [DEBUG] [Thread-187865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:39:54.601 [DEBUG] [Thread-187865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:39:54.602 [DEBUG] [Thread-187865] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:39:54.605 [DEBUG] [Thread-187865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:39:54.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:39:54.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:39:54.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:39:54.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:39:54.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:39:54.632 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:39:54.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:39:54.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:39:54.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:39:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.569204 -999.00  +16.20  25.91     40   +2.80 1 1 1 1 1   888    0 14.14 9.03 ----- 25.6 25.9 165.9 43.0 22.2 -28.7 21.6 -27.7 23.0 -26.2 23.9 -28.3
2026-02-14T15:39:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:39:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:39:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.569204
2026-02-14T15:39:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:39:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:39:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:39:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:39:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:39:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:39:15', tmtdew=16.36, humidity=33.17, cloud=0.0, wind=28.88, temperature=17.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:39:39.226', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:39:54.635 [DEBUG] [Thread-187865] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:39:54.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-14T15:39:54.731 [DEBUG] [Thread-187868] [transport.py] [_log()] starting thread (client mode): 0xa2d227d0
2026-02-14T15:39:54.731 [DEBUG] [Thread-187868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:39:54.748 [DEBUG] [Thread-187868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:39:54.748 [INFO] [Thread-187868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:39:54.756 [DEBUG] [Thread-187868] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:39:54.756 [DEBUG] [Thread-187868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:39:54.756 [DEBUG] [Thread-187868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:39:54.757 [DEBUG] [Thread-187868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:39:54.757 [DEBUG] [Thread-187868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:39:54.757 [DEBUG] [Thread-187868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:39:54.757 [DEBUG] [Thread-187868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:39:54.757 [DEBUG] [Thread-187868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:39:54.757 [DEBUG] [Thread-187868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:39:54.757 [DEBUG] [Thread-187868] [transport.py] [_log()] client lang: <none>
2026-02-14T15:39:54.757 [DEBUG] [Thread-187868] [transport.py] [_log()] server lang: <none>
2026-02-14T15:39:54.757 [DEBUG] [Thread-187868] [transport.py] [_log()] kex follows: False
2026-02-14T15:39:54.757 [DEBUG] [Thread-187868] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:39:54.757 [DEBUG] [Thread-187868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:39:54.757 [DEBUG] [Thread-187868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:39:54.757 [DEBUG] [Thread-187868] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:39:54.757 [DEBUG] [Thread-187868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:39:54.757 [DEBUG] [Thread-187868] [transport.py] [_log()] Compression: none
2026-02-14T15:39:54.757 [DEBUG] [Thread-187868] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:39:54.819 [DEBUG] [Thread-187868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:39:54.820 [DEBUG] [Thread-187868] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:39:54.821 [DEBUG] [Thread-187868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:39:54.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:39:54.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:39:54.875 [DEBUG] [Thread-187868] [transport.py] [_log()] userauth is OK
2026-02-14T15:39:54.875 [DEBUG] [Thread-187868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:39:54.875 [DEBUG] [Thread-187868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:39:54.875 [DEBUG] [Thread-187868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:39:54.875 [DEBUG] [Thread-187868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:39:54.894 [INFO] [Thread-187868] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:39:54.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-14T15:39:54.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:39:55.724 [DEBUG] [Thread-187868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:39:55.724 [DEBUG] [Thread-187868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:39:55.772 [DEBUG] [Thread-187868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:39:55.773 [DEBUG] [Thread-187868] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:39:55.782 [DEBUG] [Thread-187868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:39:55.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:39:55.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-14T15:39:55.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:39:55.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:39:55.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:39:55.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:39:55.817 [DEBUG] [Thread-187868] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:39:59.117 [DEBUG] [Thread-187870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:40:14.177 [DEBUG] [Thread-187871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:40:25.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:40:25.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:40:25.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-14T15:40:27.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 39, 51), 16.42, 33.37, 0.0, 31.28, 17.32, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:40:27.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:39:51
2026-02-14T15:40:28.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:40:28.270 [DEBUG] [Thread-187872] [transport.py] [_log()] starting thread (client mode): 0xa2dc1f90
2026-02-14T15:40:28.270 [DEBUG] [Thread-187872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:40:28.293 [DEBUG] [Thread-187872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:40:28.293 [INFO] [Thread-187872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:40:28.296 [DEBUG] [Thread-187872] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:40:28.296 [DEBUG] [Thread-187872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:40:28.296 [DEBUG] [Thread-187872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:40:28.296 [DEBUG] [Thread-187872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:40:28.296 [DEBUG] [Thread-187872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:40:28.296 [DEBUG] [Thread-187872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:40:28.296 [DEBUG] [Thread-187872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:40:28.296 [DEBUG] [Thread-187872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:40:28.296 [DEBUG] [Thread-187872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:40:28.296 [DEBUG] [Thread-187872] [transport.py] [_log()] client lang: <none>
2026-02-14T15:40:28.296 [DEBUG] [Thread-187872] [transport.py] [_log()] server lang: <none>
2026-02-14T15:40:28.297 [DEBUG] [Thread-187872] [transport.py] [_log()] kex follows: False
2026-02-14T15:40:28.297 [DEBUG] [Thread-187872] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:40:28.297 [DEBUG] [Thread-187872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:40:28.297 [DEBUG] [Thread-187872] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:40:28.297 [DEBUG] [Thread-187872] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:40:28.297 [DEBUG] [Thread-187872] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:40:28.297 [DEBUG] [Thread-187872] [transport.py] [_log()] Compression: none
2026-02-14T15:40:28.297 [DEBUG] [Thread-187872] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:40:28.317 [DEBUG] [Thread-187872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:40:28.317 [DEBUG] [Thread-187872] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:40:28.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:40:28.319 [DEBUG] [Thread-187872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:40:28.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:40:28.321 [DEBUG] [Thread-187872] [transport.py] [_log()] userauth is OK
2026-02-14T15:40:28.321 [DEBUG] [Thread-187872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:40:28.321 [DEBUG] [Thread-187872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:40:28.321 [DEBUG] [Thread-187872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:40:28.321 [DEBUG] [Thread-187872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:40:28.345 [INFO] [Thread-187872] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:40:28.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:40:28.977 [DEBUG] [Thread-187872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:40:28.978 [DEBUG] [Thread-187872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:40:28.978 [DEBUG] [Thread-187872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:40:29.018 [DEBUG] [Thread-187872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:40:29.019 [DEBUG] [Thread-187872] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:40:29.022 [DEBUG] [Thread-187872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:40:29.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:40:29.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:40:29.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:40:29.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:40:29.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:40:29.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:40:29.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:40:29.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:40:29.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:40:29.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.569551 -999.00  +16.50  14.28     40   +3.10 1 1 1 1 1   888    0 14.04 7.10 ----- 13.0 14.3 154.8 25.7 22.3 -26.0 21.6 -25.6 23.1 -24.8 24.1 -26.0
2026-02-14T15:40:29.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:40:29.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:40:29.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.569551
2026-02-14T15:40:29.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:40:29.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:40:29.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:40:29.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:40:29.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:40:29.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:39:51', tmtdew=16.42, humidity=33.37, cloud=0.0, wind=31.28, temperature=17.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:40:09.206', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:40:29.049 [DEBUG] [Thread-187872] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:40:29.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-14T15:40:29.155 [DEBUG] [Thread-187875] [transport.py] [_log()] starting thread (client mode): 0xa2dc1240
2026-02-14T15:40:29.155 [DEBUG] [Thread-187875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:40:29.170 [DEBUG] [Thread-187875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:40:29.170 [INFO] [Thread-187875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:40:29.178 [DEBUG] [Thread-187875] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:40:29.178 [DEBUG] [Thread-187875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:40:29.178 [DEBUG] [Thread-187875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:40:29.179 [DEBUG] [Thread-187875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:40:29.179 [DEBUG] [Thread-187875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:40:29.179 [DEBUG] [Thread-187875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:40:29.179 [DEBUG] [Thread-187875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:40:29.179 [DEBUG] [Thread-187875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:40:29.179 [DEBUG] [Thread-187875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:40:29.179 [DEBUG] [Thread-187875] [transport.py] [_log()] client lang: <none>
2026-02-14T15:40:29.179 [DEBUG] [Thread-187875] [transport.py] [_log()] server lang: <none>
2026-02-14T15:40:29.179 [DEBUG] [Thread-187875] [transport.py] [_log()] kex follows: False
2026-02-14T15:40:29.179 [DEBUG] [Thread-187875] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:40:29.179 [DEBUG] [Thread-187875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:40:29.179 [DEBUG] [Thread-187875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:40:29.179 [DEBUG] [Thread-187875] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:40:29.179 [DEBUG] [Thread-187875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:40:29.179 [DEBUG] [Thread-187875] [transport.py] [_log()] Compression: none
2026-02-14T15:40:29.179 [DEBUG] [Thread-187875] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:40:29.215 [DEBUG] [Thread-187877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:40:29.236 [DEBUG] [Thread-187875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:40:29.236 [DEBUG] [Thread-187875] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:40:29.236 [DEBUG] [Thread-187875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:40:29.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:40:29.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:40:29.252 [DEBUG] [Thread-187878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:40:29.295 [DEBUG] [Thread-187875] [transport.py] [_log()] userauth is OK
2026-02-14T15:40:29.295 [DEBUG] [Thread-187875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:40:29.295 [DEBUG] [Thread-187875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:40:29.296 [DEBUG] [Thread-187875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:40:29.296 [DEBUG] [Thread-187875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:40:29.315 [INFO] [Thread-187875] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:40:29.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-14T15:40:29.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:40:30.148 [DEBUG] [Thread-187875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:40:30.148 [DEBUG] [Thread-187875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:40:30.196 [DEBUG] [Thread-187875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:40:30.196 [DEBUG] [Thread-187875] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:40:30.206 [DEBUG] [Thread-187875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:40:30.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:40:30.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:40:30.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-14T15:40:30.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:40:30.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:40:30.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:40:30.243 [DEBUG] [Thread-187875] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:40:44.264 [DEBUG] [Thread-187879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:40:48.818 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:40:48.819 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:40:59.299 [DEBUG] [Thread-187880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:41:00.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:41:00.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:41:00.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T15:41:02.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 40, 26), 16.64, 32.96, 0.0, 34.28, 17.55, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:41:02.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:40:26
2026-02-14T15:41:02.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:41:02.717 [DEBUG] [Thread-187881] [transport.py] [_log()] starting thread (client mode): 0xa2dc3a00
2026-02-14T15:41:02.717 [DEBUG] [Thread-187881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:41:02.738 [DEBUG] [Thread-187881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:41:02.738 [INFO] [Thread-187881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:41:02.741 [DEBUG] [Thread-187881] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:41:02.741 [DEBUG] [Thread-187881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:41:02.741 [DEBUG] [Thread-187881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:41:02.741 [DEBUG] [Thread-187881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:41:02.741 [DEBUG] [Thread-187881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:41:02.741 [DEBUG] [Thread-187881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:41:02.742 [DEBUG] [Thread-187881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:41:02.742 [DEBUG] [Thread-187881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:41:02.742 [DEBUG] [Thread-187881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:41:02.742 [DEBUG] [Thread-187881] [transport.py] [_log()] client lang: <none>
2026-02-14T15:41:02.742 [DEBUG] [Thread-187881] [transport.py] [_log()] server lang: <none>
2026-02-14T15:41:02.742 [DEBUG] [Thread-187881] [transport.py] [_log()] kex follows: False
2026-02-14T15:41:02.742 [DEBUG] [Thread-187881] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:41:02.742 [DEBUG] [Thread-187881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:41:02.742 [DEBUG] [Thread-187881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:41:02.742 [DEBUG] [Thread-187881] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:41:02.742 [DEBUG] [Thread-187881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:41:02.742 [DEBUG] [Thread-187881] [transport.py] [_log()] Compression: none
2026-02-14T15:41:02.742 [DEBUG] [Thread-187881] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:41:02.758 [DEBUG] [Thread-187881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:41:02.759 [DEBUG] [Thread-187881] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:41:02.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:41:02.760 [DEBUG] [Thread-187881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:41:02.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:41:02.762 [DEBUG] [Thread-187881] [transport.py] [_log()] userauth is OK
2026-02-14T15:41:02.762 [DEBUG] [Thread-187881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:41:02.762 [DEBUG] [Thread-187881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:41:02.762 [DEBUG] [Thread-187881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:41:02.762 [DEBUG] [Thread-187881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:41:02.800 [INFO] [Thread-187881] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:41:02.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:41:03.457 [DEBUG] [Thread-187881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:41:03.458 [DEBUG] [Thread-187881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:41:03.458 [DEBUG] [Thread-187881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:41:03.498 [DEBUG] [Thread-187881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:41:03.499 [DEBUG] [Thread-187881] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:41:03.502 [DEBUG] [Thread-187881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:41:03.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:41:03.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:41:03.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:41:03.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:41:03.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:41:03.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:41:03.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:41:03.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:41:03.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:41:03.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.569899 -999.00  +17.00  24.56     39   +3.10 1 1 1 1 1   888    0 14.01 5.30 ----- 25.2 24.6 156.2 32.5 22.4 -27.0 21.7 -27.6 23.2 -25.5 24.2 -26.8
2026-02-14T15:41:03.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:41:03.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:41:03.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.569899
2026-02-14T15:41:03.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:41:03.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:41:03.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:41:03.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:41:03.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:41:03.529 [DEBUG] [Thread-187881] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:41:03.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:40:26', tmtdew=16.64, humidity=32.96, cloud=0.0, wind=34.28, temperature=17.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:40:39.274', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:41:03.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-14T15:41:03.636 [DEBUG] [Thread-187884] [transport.py] [_log()] starting thread (client mode): 0xa2dc02b0
2026-02-14T15:41:03.636 [DEBUG] [Thread-187884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:41:03.650 [DEBUG] [Thread-187884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:41:03.650 [INFO] [Thread-187884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:41:03.658 [DEBUG] [Thread-187884] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:41:03.658 [DEBUG] [Thread-187884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:41:03.658 [DEBUG] [Thread-187884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:41:03.658 [DEBUG] [Thread-187884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:41:03.658 [DEBUG] [Thread-187884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:41:03.658 [DEBUG] [Thread-187884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:41:03.658 [DEBUG] [Thread-187884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:41:03.658 [DEBUG] [Thread-187884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:41:03.658 [DEBUG] [Thread-187884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:41:03.658 [DEBUG] [Thread-187884] [transport.py] [_log()] client lang: <none>
2026-02-14T15:41:03.658 [DEBUG] [Thread-187884] [transport.py] [_log()] server lang: <none>
2026-02-14T15:41:03.659 [DEBUG] [Thread-187884] [transport.py] [_log()] kex follows: False
2026-02-14T15:41:03.659 [DEBUG] [Thread-187884] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:41:03.659 [DEBUG] [Thread-187884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:41:03.659 [DEBUG] [Thread-187884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:41:03.659 [DEBUG] [Thread-187884] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:41:03.659 [DEBUG] [Thread-187884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:41:03.659 [DEBUG] [Thread-187884] [transport.py] [_log()] Compression: none
2026-02-14T15:41:03.659 [DEBUG] [Thread-187884] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:41:03.719 [DEBUG] [Thread-187884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:41:03.719 [DEBUG] [Thread-187884] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:41:03.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:41:03.720 [DEBUG] [Thread-187884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:41:03.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:41:03.774 [DEBUG] [Thread-187884] [transport.py] [_log()] userauth is OK
2026-02-14T15:41:03.775 [DEBUG] [Thread-187884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:41:03.775 [DEBUG] [Thread-187884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:41:03.775 [DEBUG] [Thread-187884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:41:03.775 [DEBUG] [Thread-187884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:41:03.794 [INFO] [Thread-187884] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:41:03.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T15:41:03.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:41:04.631 [DEBUG] [Thread-187884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:41:04.631 [DEBUG] [Thread-187884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:41:04.679 [DEBUG] [Thread-187884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:41:04.679 [DEBUG] [Thread-187884] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:41:04.687 [DEBUG] [Thread-187884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:41:04.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:41:04.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-14T15:41:04.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:41:04.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:41:04.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:41:04.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:41:04.719 [DEBUG] [Thread-187884] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:41:14.332 [DEBUG] [Thread-187886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:41:29.288 [DEBUG] [Thread-187887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:41:29.381 [DEBUG] [Thread-187888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:41:34.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:41:34.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:41:34.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-14T15:41:36.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 41, 1), 16.67, 32.86, 0.0, 32.8, 17.45, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:41:36.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:41:01
2026-02-14T15:41:36.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:41:37.105 [DEBUG] [Thread-187889] [transport.py] [_log()] starting thread (client mode): 0xa2dc3be0
2026-02-14T15:41:37.106 [DEBUG] [Thread-187889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:41:37.120 [DEBUG] [Thread-187889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:41:37.120 [INFO] [Thread-187889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:41:37.123 [DEBUG] [Thread-187889] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:41:37.123 [DEBUG] [Thread-187889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:41:37.123 [DEBUG] [Thread-187889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:41:37.124 [DEBUG] [Thread-187889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:41:37.124 [DEBUG] [Thread-187889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:41:37.124 [DEBUG] [Thread-187889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:41:37.124 [DEBUG] [Thread-187889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:41:37.124 [DEBUG] [Thread-187889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:41:37.124 [DEBUG] [Thread-187889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:41:37.124 [DEBUG] [Thread-187889] [transport.py] [_log()] client lang: <none>
2026-02-14T15:41:37.124 [DEBUG] [Thread-187889] [transport.py] [_log()] server lang: <none>
2026-02-14T15:41:37.124 [DEBUG] [Thread-187889] [transport.py] [_log()] kex follows: False
2026-02-14T15:41:37.124 [DEBUG] [Thread-187889] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:41:37.124 [DEBUG] [Thread-187889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:41:37.124 [DEBUG] [Thread-187889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:41:37.124 [DEBUG] [Thread-187889] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:41:37.124 [DEBUG] [Thread-187889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:41:37.124 [DEBUG] [Thread-187889] [transport.py] [_log()] Compression: none
2026-02-14T15:41:37.124 [DEBUG] [Thread-187889] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:41:37.144 [DEBUG] [Thread-187889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:41:37.144 [DEBUG] [Thread-187889] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:41:37.145 [DEBUG] [Thread-187889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:41:37.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:41:37.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:41:37.146 [DEBUG] [Thread-187889] [transport.py] [_log()] userauth is OK
2026-02-14T15:41:37.147 [DEBUG] [Thread-187889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:41:37.147 [DEBUG] [Thread-187889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:41:37.147 [DEBUG] [Thread-187889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:41:37.147 [DEBUG] [Thread-187889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:41:37.172 [INFO] [Thread-187889] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:41:37.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:41:37.777 [DEBUG] [Thread-187889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:41:37.778 [DEBUG] [Thread-187889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:41:37.778 [DEBUG] [Thread-187889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:41:37.818 [DEBUG] [Thread-187889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:41:37.819 [DEBUG] [Thread-187889] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:41:37.822 [DEBUG] [Thread-187889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:41:37.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:41:37.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:41:37.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:41:37.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:41:37.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:41:37.847 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:41:37.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:41:37.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:41:37.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:41:37.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.570246 -999.00  +17.40  32.17     38   +3.20 1 1 2 1 1   888    0 14.13 5.32 ----- 29.0 32.2 157.1 36.7 22.5 -27.1 21.8 -25.4 23.4 -23.6 24.4 -26.3
2026-02-14T15:41:37.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:41:37.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:41:37.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.570246
2026-02-14T15:41:37.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:41:37.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:41:37.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:41:37.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:41:37.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:41:37.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:41:01', tmtdew=16.67, humidity=32.86, cloud=0.0, wind=32.8, temperature=17.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:41:09.254', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:41:37.850 [DEBUG] [Thread-187889] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:41:37.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-14T15:41:37.950 [DEBUG] [Thread-187892] [transport.py] [_log()] starting thread (client mode): 0xa2dc28f0
2026-02-14T15:41:37.950 [DEBUG] [Thread-187892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:41:37.965 [DEBUG] [Thread-187892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:41:37.965 [INFO] [Thread-187892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:41:37.972 [DEBUG] [Thread-187892] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:41:37.973 [DEBUG] [Thread-187892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:41:37.973 [DEBUG] [Thread-187892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:41:37.973 [DEBUG] [Thread-187892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:41:37.973 [DEBUG] [Thread-187892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:41:37.973 [DEBUG] [Thread-187892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:41:37.973 [DEBUG] [Thread-187892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:41:37.973 [DEBUG] [Thread-187892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:41:37.973 [DEBUG] [Thread-187892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:41:37.973 [DEBUG] [Thread-187892] [transport.py] [_log()] client lang: <none>
2026-02-14T15:41:37.973 [DEBUG] [Thread-187892] [transport.py] [_log()] server lang: <none>
2026-02-14T15:41:37.973 [DEBUG] [Thread-187892] [transport.py] [_log()] kex follows: False
2026-02-14T15:41:37.973 [DEBUG] [Thread-187892] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:41:37.973 [DEBUG] [Thread-187892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:41:37.973 [DEBUG] [Thread-187892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:41:37.973 [DEBUG] [Thread-187892] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:41:37.973 [DEBUG] [Thread-187892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:41:37.974 [DEBUG] [Thread-187892] [transport.py] [_log()] Compression: none
2026-02-14T15:41:37.974 [DEBUG] [Thread-187892] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:41:38.030 [DEBUG] [Thread-187892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:41:38.031 [DEBUG] [Thread-187892] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:41:38.031 [DEBUG] [Thread-187892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:41:38.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:41:38.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:41:38.086 [DEBUG] [Thread-187892] [transport.py] [_log()] userauth is OK
2026-02-14T15:41:38.086 [DEBUG] [Thread-187892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:41:38.086 [DEBUG] [Thread-187892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:41:38.086 [DEBUG] [Thread-187892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:41:38.087 [DEBUG] [Thread-187892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:41:38.109 [INFO] [Thread-187892] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:41:38.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-14T15:41:38.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:41:38.948 [DEBUG] [Thread-187892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:41:38.949 [DEBUG] [Thread-187892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:41:38.996 [DEBUG] [Thread-187892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:41:38.997 [DEBUG] [Thread-187892] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:41:39.006 [DEBUG] [Thread-187892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:41:39.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:41:39.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:41:39.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:41:39.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:41:39.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:41:39.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:41:39.042 [DEBUG] [Thread-187892] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:41:44.420 [DEBUG] [Thread-187894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:41:48.967 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:41:48.968 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:41:59.482 [DEBUG] [Thread-187895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:42:09.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:42:09.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:42:09.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T15:42:10.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 41, 36), 17.32, 31.17, 0.0, 27.7, 18.27, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:42:10.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:41:36
2026-02-14T15:42:11.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:42:11.529 [DEBUG] [Thread-187896] [transport.py] [_log()] starting thread (client mode): 0xa57b2290
2026-02-14T15:42:11.529 [DEBUG] [Thread-187896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:42:11.549 [DEBUG] [Thread-187896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:42:11.549 [INFO] [Thread-187896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:42:11.552 [DEBUG] [Thread-187896] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:42:11.553 [DEBUG] [Thread-187896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:42:11.553 [DEBUG] [Thread-187896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:42:11.553 [DEBUG] [Thread-187896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:42:11.553 [DEBUG] [Thread-187896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:42:11.553 [DEBUG] [Thread-187896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:42:11.553 [DEBUG] [Thread-187896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:42:11.553 [DEBUG] [Thread-187896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:42:11.553 [DEBUG] [Thread-187896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:42:11.553 [DEBUG] [Thread-187896] [transport.py] [_log()] client lang: <none>
2026-02-14T15:42:11.553 [DEBUG] [Thread-187896] [transport.py] [_log()] server lang: <none>
2026-02-14T15:42:11.553 [DEBUG] [Thread-187896] [transport.py] [_log()] kex follows: False
2026-02-14T15:42:11.553 [DEBUG] [Thread-187896] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:42:11.553 [DEBUG] [Thread-187896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:42:11.553 [DEBUG] [Thread-187896] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:42:11.553 [DEBUG] [Thread-187896] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:42:11.553 [DEBUG] [Thread-187896] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:42:11.553 [DEBUG] [Thread-187896] [transport.py] [_log()] Compression: none
2026-02-14T15:42:11.553 [DEBUG] [Thread-187896] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:42:11.570 [DEBUG] [Thread-187896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:42:11.571 [DEBUG] [Thread-187896] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:42:11.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:42:11.572 [DEBUG] [Thread-187896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:42:11.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:42:11.574 [DEBUG] [Thread-187896] [transport.py] [_log()] userauth is OK
2026-02-14T15:42:11.574 [DEBUG] [Thread-187896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:42:11.574 [DEBUG] [Thread-187896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:42:11.574 [DEBUG] [Thread-187896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:42:11.574 [DEBUG] [Thread-187896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:42:11.593 [INFO] [Thread-187896] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:42:11.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:42:12.220 [DEBUG] [Thread-187896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:42:12.220 [DEBUG] [Thread-187896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:42:12.220 [DEBUG] [Thread-187896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:42:12.260 [DEBUG] [Thread-187896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:42:12.261 [DEBUG] [Thread-187896] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:42:12.264 [DEBUG] [Thread-187896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:42:12.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:42:12.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:42:12.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:42:12.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:42:12.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:42:12.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:42:12.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:42:12.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:42:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:42:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.570593 -999.00  +17.30  21.79     38   +3.00 1 1 1 1 1   888    0 14.14 6.28 ----- 20.4 21.8 153.2 37.4 22.6 -27.6 21.9 -26.8 23.4 -24.7 24.4 -26.2
2026-02-14T15:42:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:42:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:42:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.570593
2026-02-14T15:42:12.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:42:12.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:42:12.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:42:12.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:42:12.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:42:12.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:41:36', tmtdew=17.32, humidity=31.17, cloud=0.0, wind=27.7, temperature=18.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:41:39.235', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:42:12.290 [DEBUG] [Thread-187896] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:42:12.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T15:42:12.385 [DEBUG] [Thread-187899] [transport.py] [_log()] starting thread (client mode): 0xa57b2440
2026-02-14T15:42:12.385 [DEBUG] [Thread-187899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:42:12.399 [DEBUG] [Thread-187899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:42:12.400 [INFO] [Thread-187899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:42:12.407 [DEBUG] [Thread-187899] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:42:12.408 [DEBUG] [Thread-187899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:42:12.408 [DEBUG] [Thread-187899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:42:12.408 [DEBUG] [Thread-187899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:42:12.408 [DEBUG] [Thread-187899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:42:12.408 [DEBUG] [Thread-187899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:42:12.408 [DEBUG] [Thread-187899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:42:12.408 [DEBUG] [Thread-187899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:42:12.408 [DEBUG] [Thread-187899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:42:12.408 [DEBUG] [Thread-187899] [transport.py] [_log()] client lang: <none>
2026-02-14T15:42:12.409 [DEBUG] [Thread-187899] [transport.py] [_log()] server lang: <none>
2026-02-14T15:42:12.409 [DEBUG] [Thread-187899] [transport.py] [_log()] kex follows: False
2026-02-14T15:42:12.409 [DEBUG] [Thread-187899] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:42:12.409 [DEBUG] [Thread-187899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:42:12.409 [DEBUG] [Thread-187899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:42:12.409 [DEBUG] [Thread-187899] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:42:12.409 [DEBUG] [Thread-187899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:42:12.410 [DEBUG] [Thread-187899] [transport.py] [_log()] Compression: none
2026-02-14T15:42:12.410 [DEBUG] [Thread-187899] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:42:12.467 [DEBUG] [Thread-187899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:42:12.468 [DEBUG] [Thread-187899] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:42:12.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:42:12.469 [DEBUG] [Thread-187899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:42:12.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:42:12.526 [DEBUG] [Thread-187899] [transport.py] [_log()] userauth is OK
2026-02-14T15:42:12.527 [DEBUG] [Thread-187899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:42:12.527 [DEBUG] [Thread-187899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:42:12.527 [DEBUG] [Thread-187899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:42:12.527 [DEBUG] [Thread-187899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:42:12.545 [INFO] [Thread-187899] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:42:12.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-14T15:42:12.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:42:13.350 [DEBUG] [Thread-187899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:42:13.350 [DEBUG] [Thread-187899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:42:13.398 [DEBUG] [Thread-187899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:42:13.398 [DEBUG] [Thread-187899] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:42:13.407 [DEBUG] [Thread-187899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:42:13.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:42:13.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-14T15:42:13.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-14T15:42:13.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:42:13.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:42:13.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:42:13.440 [DEBUG] [Thread-187899] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:42:14.523 [DEBUG] [Thread-187901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:42:29.322 [DEBUG] [Thread-187902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:42:29.577 [DEBUG] [Thread-187903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:42:43.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:42:43.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:42:43.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T15:42:44.616 [DEBUG] [Thread-187904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:42:45.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 42, 12), 16.41, 33.15, 0.0, 31.27, 17.17, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:42:45.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:42:12
2026-02-14T15:42:45.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:42:45.848 [DEBUG] [Thread-187905] [transport.py] [_log()] starting thread (client mode): 0xa57b1c00
2026-02-14T15:42:45.849 [DEBUG] [Thread-187905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:42:45.869 [DEBUG] [Thread-187905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:42:45.870 [INFO] [Thread-187905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:42:45.873 [DEBUG] [Thread-187905] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:42:45.873 [DEBUG] [Thread-187905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:42:45.873 [DEBUG] [Thread-187905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:42:45.873 [DEBUG] [Thread-187905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:42:45.873 [DEBUG] [Thread-187905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:42:45.873 [DEBUG] [Thread-187905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:42:45.873 [DEBUG] [Thread-187905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:42:45.873 [DEBUG] [Thread-187905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:42:45.873 [DEBUG] [Thread-187905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:42:45.873 [DEBUG] [Thread-187905] [transport.py] [_log()] client lang: <none>
2026-02-14T15:42:45.873 [DEBUG] [Thread-187905] [transport.py] [_log()] server lang: <none>
2026-02-14T15:42:45.873 [DEBUG] [Thread-187905] [transport.py] [_log()] kex follows: False
2026-02-14T15:42:45.873 [DEBUG] [Thread-187905] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:42:45.873 [DEBUG] [Thread-187905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:42:45.873 [DEBUG] [Thread-187905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:42:45.873 [DEBUG] [Thread-187905] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:42:45.873 [DEBUG] [Thread-187905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:42:45.873 [DEBUG] [Thread-187905] [transport.py] [_log()] Compression: none
2026-02-14T15:42:45.873 [DEBUG] [Thread-187905] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:42:45.892 [DEBUG] [Thread-187905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:42:45.892 [DEBUG] [Thread-187905] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:42:45.893 [DEBUG] [Thread-187905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:42:45.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:42:45.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:42:45.896 [DEBUG] [Thread-187905] [transport.py] [_log()] userauth is OK
2026-02-14T15:42:45.896 [DEBUG] [Thread-187905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:42:45.896 [DEBUG] [Thread-187905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:42:45.896 [DEBUG] [Thread-187905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:42:45.896 [DEBUG] [Thread-187905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:42:45.931 [INFO] [Thread-187905] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:42:45.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:42:46.579 [DEBUG] [Thread-187905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:42:46.580 [DEBUG] [Thread-187905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:42:46.580 [DEBUG] [Thread-187905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:42:46.620 [DEBUG] [Thread-187905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:42:46.621 [DEBUG] [Thread-187905] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:42:46.624 [DEBUG] [Thread-187905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:42:46.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:42:46.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:42:46.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:42:46.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:42:46.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:42:46.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:42:46.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:42:46.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:42:46.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:42:46.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.570940 -999.00  +17.30  26.42     38   +2.90 1 1 1 1 1   888    0 13.99 5.97 ----- 22.2 26.4 156.4 33.2 22.6 -28.4 22.1 -25.6 23.5 -24.6 24.5 -27.9
2026-02-14T15:42:46.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:42:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:42:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.570940
2026-02-14T15:42:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:42:46.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:42:46.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:42:46.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:42:46.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:42:46.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:42:12', tmtdew=16.41, humidity=33.15, cloud=0.0, wind=31.27, temperature=17.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:42:09.216', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:42:46.651 [DEBUG] [Thread-187905] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:42:46.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-14T15:42:46.750 [DEBUG] [Thread-187908] [transport.py] [_log()] starting thread (client mode): 0xa57b1060
2026-02-14T15:42:46.750 [DEBUG] [Thread-187908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:42:46.765 [DEBUG] [Thread-187908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:42:46.766 [INFO] [Thread-187908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:42:46.773 [DEBUG] [Thread-187908] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:42:46.773 [DEBUG] [Thread-187908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:42:46.773 [DEBUG] [Thread-187908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:42:46.773 [DEBUG] [Thread-187908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:42:46.774 [DEBUG] [Thread-187908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:42:46.774 [DEBUG] [Thread-187908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:42:46.774 [DEBUG] [Thread-187908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:42:46.774 [DEBUG] [Thread-187908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:42:46.774 [DEBUG] [Thread-187908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:42:46.774 [DEBUG] [Thread-187908] [transport.py] [_log()] client lang: <none>
2026-02-14T15:42:46.774 [DEBUG] [Thread-187908] [transport.py] [_log()] server lang: <none>
2026-02-14T15:42:46.774 [DEBUG] [Thread-187908] [transport.py] [_log()] kex follows: False
2026-02-14T15:42:46.774 [DEBUG] [Thread-187908] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:42:46.774 [DEBUG] [Thread-187908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:42:46.774 [DEBUG] [Thread-187908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:42:46.774 [DEBUG] [Thread-187908] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:42:46.774 [DEBUG] [Thread-187908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:42:46.774 [DEBUG] [Thread-187908] [transport.py] [_log()] Compression: none
2026-02-14T15:42:46.774 [DEBUG] [Thread-187908] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:42:46.835 [DEBUG] [Thread-187908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:42:46.835 [DEBUG] [Thread-187908] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:42:46.836 [DEBUG] [Thread-187908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:42:46.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:42:46.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:42:46.890 [DEBUG] [Thread-187908] [transport.py] [_log()] userauth is OK
2026-02-14T15:42:46.890 [DEBUG] [Thread-187908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:42:46.890 [DEBUG] [Thread-187908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:42:46.890 [DEBUG] [Thread-187908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:42:46.891 [DEBUG] [Thread-187908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:42:46.909 [INFO] [Thread-187908] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:42:46.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-14T15:42:46.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:42:47.729 [DEBUG] [Thread-187908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:42:47.729 [DEBUG] [Thread-187908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:42:47.777 [DEBUG] [Thread-187908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:42:47.778 [DEBUG] [Thread-187908] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:42:47.787 [DEBUG] [Thread-187908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:42:47.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:42:47.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-14T15:42:47.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:42:47.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:42:47.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:42:47.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:42:47.823 [DEBUG] [Thread-187908] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:42:49.109 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:42:49.110 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:42:59.652 [DEBUG] [Thread-187910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:43:14.708 [DEBUG] [Thread-187911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:43:17.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:43:17.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:43:17.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-14T15:43:20.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 42, 47), 16.78, 31.99, 0.0, 30.33, 17.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:43:20.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:42:47
2026-02-14T15:43:20.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:43:21.115 [DEBUG] [Thread-187912] [transport.py] [_log()] starting thread (client mode): 0xa57b3fa0
2026-02-14T15:43:21.115 [DEBUG] [Thread-187912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:43:21.135 [DEBUG] [Thread-187912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:43:21.135 [INFO] [Thread-187912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:43:21.138 [DEBUG] [Thread-187912] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:43:21.138 [DEBUG] [Thread-187912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:43:21.138 [DEBUG] [Thread-187912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:43:21.138 [DEBUG] [Thread-187912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:43:21.139 [DEBUG] [Thread-187912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:43:21.139 [DEBUG] [Thread-187912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:43:21.139 [DEBUG] [Thread-187912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:43:21.139 [DEBUG] [Thread-187912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:43:21.139 [DEBUG] [Thread-187912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:43:21.139 [DEBUG] [Thread-187912] [transport.py] [_log()] client lang: <none>
2026-02-14T15:43:21.139 [DEBUG] [Thread-187912] [transport.py] [_log()] server lang: <none>
2026-02-14T15:43:21.139 [DEBUG] [Thread-187912] [transport.py] [_log()] kex follows: False
2026-02-14T15:43:21.139 [DEBUG] [Thread-187912] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:43:21.139 [DEBUG] [Thread-187912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:43:21.139 [DEBUG] [Thread-187912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:43:21.139 [DEBUG] [Thread-187912] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:43:21.139 [DEBUG] [Thread-187912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:43:21.139 [DEBUG] [Thread-187912] [transport.py] [_log()] Compression: none
2026-02-14T15:43:21.139 [DEBUG] [Thread-187912] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:43:21.150 [DEBUG] [Thread-187912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:43:21.150 [DEBUG] [Thread-187912] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:43:21.151 [DEBUG] [Thread-187912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:43:21.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:43:21.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:43:21.192 [DEBUG] [Thread-187912] [transport.py] [_log()] userauth is OK
2026-02-14T15:43:21.192 [DEBUG] [Thread-187912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:43:21.192 [DEBUG] [Thread-187912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:43:21.193 [DEBUG] [Thread-187912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:43:21.193 [DEBUG] [Thread-187912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:43:21.224 [INFO] [Thread-187912] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:43:21.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:43:22.056 [DEBUG] [Thread-187912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:43:22.056 [DEBUG] [Thread-187912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:43:22.057 [DEBUG] [Thread-187912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:43:22.097 [DEBUG] [Thread-187912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:43:22.097 [DEBUG] [Thread-187912] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:43:22.100 [DEBUG] [Thread-187912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:43:22.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:43:22.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:43:22.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:43:22.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:43:22.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:43:22.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:43:22.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:43:22.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:43:22.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:43:22.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.571287 -999.00  +16.80  25.19     38   +2.60 1 1 1 1 1   888    0 14.17 6.37 ----- 34.9 25.2 152.6 40.5 22.5 -28.9 22.0 -26.7 23.4 -27.4 24.2 -29.0
2026-02-14T15:43:22.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:43:22.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:43:22.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.571287
2026-02-14T15:43:22.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:43:22.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:43:22.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:43:22.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:43:22.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:43:22.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:42:47', tmtdew=16.78, humidity=31.99, cloud=0.0, wind=30.33, temperature=17.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:42:39.197', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:43:22.124 [DEBUG] [Thread-187912] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:43:22.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-14T15:43:22.229 [DEBUG] [Thread-187915] [transport.py] [_log()] starting thread (client mode): 0xa57b15d0
2026-02-14T15:43:22.229 [DEBUG] [Thread-187915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:43:22.244 [DEBUG] [Thread-187915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:43:22.244 [INFO] [Thread-187915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:43:22.252 [DEBUG] [Thread-187915] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:43:22.252 [DEBUG] [Thread-187915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:43:22.252 [DEBUG] [Thread-187915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:43:22.252 [DEBUG] [Thread-187915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:43:22.252 [DEBUG] [Thread-187915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:43:22.252 [DEBUG] [Thread-187915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:43:22.252 [DEBUG] [Thread-187915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:43:22.252 [DEBUG] [Thread-187915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:43:22.253 [DEBUG] [Thread-187915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:43:22.253 [DEBUG] [Thread-187915] [transport.py] [_log()] client lang: <none>
2026-02-14T15:43:22.253 [DEBUG] [Thread-187915] [transport.py] [_log()] server lang: <none>
2026-02-14T15:43:22.253 [DEBUG] [Thread-187915] [transport.py] [_log()] kex follows: False
2026-02-14T15:43:22.253 [DEBUG] [Thread-187915] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:43:22.253 [DEBUG] [Thread-187915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:43:22.253 [DEBUG] [Thread-187915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:43:22.253 [DEBUG] [Thread-187915] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:43:22.253 [DEBUG] [Thread-187915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:43:22.254 [DEBUG] [Thread-187915] [transport.py] [_log()] Compression: none
2026-02-14T15:43:22.254 [DEBUG] [Thread-187915] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:43:22.309 [DEBUG] [Thread-187915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:43:22.310 [DEBUG] [Thread-187915] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:43:22.310 [DEBUG] [Thread-187915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:43:22.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:43:22.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:43:22.365 [DEBUG] [Thread-187915] [transport.py] [_log()] userauth is OK
2026-02-14T15:43:22.366 [DEBUG] [Thread-187915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:43:22.366 [DEBUG] [Thread-187915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:43:22.366 [DEBUG] [Thread-187915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:43:22.366 [DEBUG] [Thread-187915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:43:22.384 [INFO] [Thread-187915] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:43:22.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T15:43:22.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:43:23.210 [DEBUG] [Thread-187915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:43:23.210 [DEBUG] [Thread-187915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:43:23.259 [DEBUG] [Thread-187915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:43:23.259 [DEBUG] [Thread-187915] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:43:23.267 [DEBUG] [Thread-187915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:43:23.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:43:23.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:43:23.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:43:23.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:43:23.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:43:23.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:43:23.301 [DEBUG] [Thread-187915] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:43:29.355 [DEBUG] [Thread-187917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:43:29.742 [DEBUG] [Thread-187918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:43:44.797 [DEBUG] [Thread-187919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:43:49.252 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:43:49.253 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:43:53.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:43:53.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:43:53.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-14T15:43:55.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 43, 22), 16.75, 32.04, 0.0, 29.17, 17.4, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:43:55.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:43:22
2026-02-14T15:43:55.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:43:55.743 [DEBUG] [Thread-187920] [transport.py] [_log()] starting thread (client mode): 0xa57b13f0
2026-02-14T15:43:55.743 [DEBUG] [Thread-187920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:43:55.764 [DEBUG] [Thread-187920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:43:55.764 [INFO] [Thread-187920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:43:55.768 [DEBUG] [Thread-187920] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:43:55.768 [DEBUG] [Thread-187920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:43:55.768 [DEBUG] [Thread-187920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:43:55.768 [DEBUG] [Thread-187920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:43:55.768 [DEBUG] [Thread-187920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:43:55.768 [DEBUG] [Thread-187920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:43:55.768 [DEBUG] [Thread-187920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:43:55.768 [DEBUG] [Thread-187920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:43:55.768 [DEBUG] [Thread-187920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:43:55.768 [DEBUG] [Thread-187920] [transport.py] [_log()] client lang: <none>
2026-02-14T15:43:55.768 [DEBUG] [Thread-187920] [transport.py] [_log()] server lang: <none>
2026-02-14T15:43:55.768 [DEBUG] [Thread-187920] [transport.py] [_log()] kex follows: False
2026-02-14T15:43:55.768 [DEBUG] [Thread-187920] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:43:55.768 [DEBUG] [Thread-187920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:43:55.768 [DEBUG] [Thread-187920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:43:55.768 [DEBUG] [Thread-187920] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:43:55.768 [DEBUG] [Thread-187920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:43:55.768 [DEBUG] [Thread-187920] [transport.py] [_log()] Compression: none
2026-02-14T15:43:55.768 [DEBUG] [Thread-187920] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:43:55.786 [DEBUG] [Thread-187920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:43:55.786 [DEBUG] [Thread-187920] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:43:55.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:43:55.787 [DEBUG] [Thread-187920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:43:55.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:43:55.789 [DEBUG] [Thread-187920] [transport.py] [_log()] userauth is OK
2026-02-14T15:43:55.790 [DEBUG] [Thread-187920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:43:55.790 [DEBUG] [Thread-187920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:43:55.790 [DEBUG] [Thread-187920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:43:55.790 [DEBUG] [Thread-187920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:43:55.809 [INFO] [Thread-187920] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:43:55.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:43:56.456 [DEBUG] [Thread-187920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:43:56.456 [DEBUG] [Thread-187920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:43:56.457 [DEBUG] [Thread-187920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:43:56.497 [DEBUG] [Thread-187920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:43:56.498 [DEBUG] [Thread-187920] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:43:56.501 [DEBUG] [Thread-187920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:43:56.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:43:56.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:43:56.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:43:56.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:43:56.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:43:56.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:43:56.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:43:56.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:43:56.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:43:56.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.571635 -999.00  +16.40  25.33     39   +2.60 1 1 1 1 1   888    0 14.03 4.68 ----- 23.7 25.3 140.8 39.4 22.3 -28.3 21.9 -27.6 23.3 -26.5 24.1 -28.7
2026-02-14T15:43:56.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:43:56.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:43:56.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.571635
2026-02-14T15:43:56.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:43:56.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:43:56.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:43:56.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:43:56.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:43:56.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:43:22', tmtdew=16.75, humidity=32.04, cloud=0.0, wind=29.17, temperature=17.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:43:09.264', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:43:56.530 [DEBUG] [Thread-187920] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:43:56.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-14T15:43:56.625 [DEBUG] [Thread-187923] [transport.py] [_log()] starting thread (client mode): 0xa2dc2ec0
2026-02-14T15:43:56.626 [DEBUG] [Thread-187923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:43:56.640 [DEBUG] [Thread-187923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:43:56.640 [INFO] [Thread-187923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:43:56.648 [DEBUG] [Thread-187923] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:43:56.648 [DEBUG] [Thread-187923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:43:56.648 [DEBUG] [Thread-187923] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:43:56.648 [DEBUG] [Thread-187923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:43:56.648 [DEBUG] [Thread-187923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:43:56.648 [DEBUG] [Thread-187923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:43:56.648 [DEBUG] [Thread-187923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:43:56.648 [DEBUG] [Thread-187923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:43:56.648 [DEBUG] [Thread-187923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:43:56.648 [DEBUG] [Thread-187923] [transport.py] [_log()] client lang: <none>
2026-02-14T15:43:56.648 [DEBUG] [Thread-187923] [transport.py] [_log()] server lang: <none>
2026-02-14T15:43:56.648 [DEBUG] [Thread-187923] [transport.py] [_log()] kex follows: False
2026-02-14T15:43:56.648 [DEBUG] [Thread-187923] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:43:56.649 [DEBUG] [Thread-187923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:43:56.649 [DEBUG] [Thread-187923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:43:56.649 [DEBUG] [Thread-187923] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:43:56.649 [DEBUG] [Thread-187923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:43:56.649 [DEBUG] [Thread-187923] [transport.py] [_log()] Compression: none
2026-02-14T15:43:56.649 [DEBUG] [Thread-187923] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:43:56.706 [DEBUG] [Thread-187923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:43:56.706 [DEBUG] [Thread-187923] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:43:56.707 [DEBUG] [Thread-187923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:43:56.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:43:56.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:43:56.762 [DEBUG] [Thread-187923] [transport.py] [_log()] userauth is OK
2026-02-14T15:43:56.762 [DEBUG] [Thread-187923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:43:56.762 [DEBUG] [Thread-187923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:43:56.763 [DEBUG] [Thread-187923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:43:56.763 [DEBUG] [Thread-187923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:43:56.782 [INFO] [Thread-187923] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:43:56.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-14T15:43:56.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:43:57.567 [DEBUG] [Thread-187923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:43:57.567 [DEBUG] [Thread-187923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:43:57.615 [DEBUG] [Thread-187923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:43:57.616 [DEBUG] [Thread-187923] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:43:57.625 [DEBUG] [Thread-187923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:43:57.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:43:57.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:43:57.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-14T15:43:57.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:43:57.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:43:57.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:43:57.661 [DEBUG] [Thread-187923] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:43:59.833 [DEBUG] [Thread-187925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:44:14.885 [DEBUG] [Thread-187926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:44:27.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:44:27.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:44:27.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T15:44:29.388 [DEBUG] [Thread-187927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:44:29.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 43, 59), 17.28, 31.4, 0.0, 32.89, 17.75, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:44:29.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:43:59
2026-02-14T15:44:29.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:44:29.921 [DEBUG] [Thread-187928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:44:30.065 [DEBUG] [Thread-187929] [transport.py] [_log()] starting thread (client mode): 0xa2dc2800
2026-02-14T15:44:30.065 [DEBUG] [Thread-187929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:44:30.081 [DEBUG] [Thread-187929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:44:30.081 [INFO] [Thread-187929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:44:30.084 [DEBUG] [Thread-187929] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:44:30.084 [DEBUG] [Thread-187929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:44:30.084 [DEBUG] [Thread-187929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:44:30.084 [DEBUG] [Thread-187929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:44:30.084 [DEBUG] [Thread-187929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:44:30.084 [DEBUG] [Thread-187929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:44:30.084 [DEBUG] [Thread-187929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:44:30.084 [DEBUG] [Thread-187929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:44:30.084 [DEBUG] [Thread-187929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:44:30.084 [DEBUG] [Thread-187929] [transport.py] [_log()] client lang: <none>
2026-02-14T15:44:30.084 [DEBUG] [Thread-187929] [transport.py] [_log()] server lang: <none>
2026-02-14T15:44:30.084 [DEBUG] [Thread-187929] [transport.py] [_log()] kex follows: False
2026-02-14T15:44:30.084 [DEBUG] [Thread-187929] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:44:30.084 [DEBUG] [Thread-187929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:44:30.084 [DEBUG] [Thread-187929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:44:30.084 [DEBUG] [Thread-187929] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:44:30.084 [DEBUG] [Thread-187929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:44:30.084 [DEBUG] [Thread-187929] [transport.py] [_log()] Compression: none
2026-02-14T15:44:30.084 [DEBUG] [Thread-187929] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:44:30.097 [DEBUG] [Thread-187929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:44:30.098 [DEBUG] [Thread-187929] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:44:30.098 [DEBUG] [Thread-187929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:44:30.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:44:30.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:44:30.100 [DEBUG] [Thread-187929] [transport.py] [_log()] userauth is OK
2026-02-14T15:44:30.100 [DEBUG] [Thread-187929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:44:30.100 [DEBUG] [Thread-187929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:44:30.100 [DEBUG] [Thread-187929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:44:30.100 [DEBUG] [Thread-187929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:44:30.124 [INFO] [Thread-187929] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:44:30.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:44:30.755 [DEBUG] [Thread-187929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:44:30.756 [DEBUG] [Thread-187929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:44:30.756 [DEBUG] [Thread-187929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:44:30.796 [DEBUG] [Thread-187929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:44:30.797 [DEBUG] [Thread-187929] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:44:30.800 [DEBUG] [Thread-187929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:44:30.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:44:30.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:44:30.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:44:30.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:44:30.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:44:30.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:44:30.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:44:30.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:44:30.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:44:30.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.571982 -999.00  +16.40  24.52     39   +2.70 1 1 1 1 1   888    0 14.15 1.70 ----- 23.6 24.5 153.3 36.8 22.3 -28.2 21.9 -26.7 23.2 -25.1 24.1 -26.8
2026-02-14T15:44:30.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:44:30.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:44:30.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.571982
2026-02-14T15:44:30.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:44:30.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:44:30.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:44:30.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:44:30.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:44:30.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:43:59', tmtdew=17.28, humidity=31.4, cloud=0.0, wind=32.89, temperature=17.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:43:39.245', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:44:30.838 [DEBUG] [Thread-187929] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:44:30.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T15:44:30.933 [DEBUG] [Thread-187932] [transport.py] [_log()] starting thread (client mode): 0xa57b3940
2026-02-14T15:44:30.934 [DEBUG] [Thread-187932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:44:30.948 [DEBUG] [Thread-187932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:44:30.948 [INFO] [Thread-187932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:44:30.955 [DEBUG] [Thread-187932] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:44:30.956 [DEBUG] [Thread-187932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:44:30.956 [DEBUG] [Thread-187932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:44:30.956 [DEBUG] [Thread-187932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:44:30.956 [DEBUG] [Thread-187932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:44:30.956 [DEBUG] [Thread-187932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:44:30.956 [DEBUG] [Thread-187932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:44:30.957 [DEBUG] [Thread-187932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:44:30.957 [DEBUG] [Thread-187932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:44:30.957 [DEBUG] [Thread-187932] [transport.py] [_log()] client lang: <none>
2026-02-14T15:44:30.957 [DEBUG] [Thread-187932] [transport.py] [_log()] server lang: <none>
2026-02-14T15:44:30.957 [DEBUG] [Thread-187932] [transport.py] [_log()] kex follows: False
2026-02-14T15:44:30.957 [DEBUG] [Thread-187932] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:44:30.957 [DEBUG] [Thread-187932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:44:30.957 [DEBUG] [Thread-187932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:44:30.958 [DEBUG] [Thread-187932] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:44:30.958 [DEBUG] [Thread-187932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:44:30.958 [DEBUG] [Thread-187932] [transport.py] [_log()] Compression: none
2026-02-14T15:44:30.958 [DEBUG] [Thread-187932] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:44:31.013 [DEBUG] [Thread-187932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:44:31.014 [DEBUG] [Thread-187932] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:44:31.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:44:31.015 [DEBUG] [Thread-187932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:44:31.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:44:31.069 [DEBUG] [Thread-187932] [transport.py] [_log()] userauth is OK
2026-02-14T15:44:31.070 [DEBUG] [Thread-187932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:44:31.070 [DEBUG] [Thread-187932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:44:31.070 [DEBUG] [Thread-187932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:44:31.070 [DEBUG] [Thread-187932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:44:31.089 [INFO] [Thread-187932] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:44:31.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T15:44:31.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:44:31.931 [DEBUG] [Thread-187932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:44:31.932 [DEBUG] [Thread-187932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:44:31.980 [DEBUG] [Thread-187932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:44:31.980 [DEBUG] [Thread-187932] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:44:31.989 [DEBUG] [Thread-187932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:44:31.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:44:31.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-14T15:44: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-14T15:44:32.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:44:32.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:44:32.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:44:32.026 [DEBUG] [Thread-187932] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:44:44.954 [DEBUG] [Thread-187934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:44:49.394 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:44:49.395 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:44:59.999 [DEBUG] [Thread-187935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:45:02.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:45:02.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:45:02.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-14T15:45:04.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 44, 34), 17.43, 30.91, 0.0, 31.61, 18.17, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:45:04.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:44:34
2026-02-14T15:45:04.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:45:04.596 [DEBUG] [Thread-187936] [transport.py] [_log()] starting thread (client mode): 0xa2d20a00
2026-02-14T15:45:04.596 [DEBUG] [Thread-187936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:45:04.616 [DEBUG] [Thread-187936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:45:04.616 [INFO] [Thread-187936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:45:04.619 [DEBUG] [Thread-187936] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:45:04.619 [DEBUG] [Thread-187936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:45:04.619 [DEBUG] [Thread-187936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:45:04.619 [DEBUG] [Thread-187936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:45:04.619 [DEBUG] [Thread-187936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:45:04.619 [DEBUG] [Thread-187936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:45:04.620 [DEBUG] [Thread-187936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:45:04.620 [DEBUG] [Thread-187936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:45:04.620 [DEBUG] [Thread-187936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:45:04.620 [DEBUG] [Thread-187936] [transport.py] [_log()] client lang: <none>
2026-02-14T15:45:04.620 [DEBUG] [Thread-187936] [transport.py] [_log()] server lang: <none>
2026-02-14T15:45:04.620 [DEBUG] [Thread-187936] [transport.py] [_log()] kex follows: False
2026-02-14T15:45:04.620 [DEBUG] [Thread-187936] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:45:04.620 [DEBUG] [Thread-187936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:45:04.620 [DEBUG] [Thread-187936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:45:04.620 [DEBUG] [Thread-187936] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:45:04.620 [DEBUG] [Thread-187936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:45:04.620 [DEBUG] [Thread-187936] [transport.py] [_log()] Compression: none
2026-02-14T15:45:04.620 [DEBUG] [Thread-187936] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:45:04.638 [DEBUG] [Thread-187936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:45:04.639 [DEBUG] [Thread-187936] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:45:04.639 [DEBUG] [Thread-187936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:45:04.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:45:04.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:45:04.641 [DEBUG] [Thread-187936] [transport.py] [_log()] userauth is OK
2026-02-14T15:45:04.641 [DEBUG] [Thread-187936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:45:04.642 [DEBUG] [Thread-187936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:45:04.642 [DEBUG] [Thread-187936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:45:04.642 [DEBUG] [Thread-187936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:45:04.666 [INFO] [Thread-187936] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:45:04.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:45:05.449 [DEBUG] [Thread-187936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:45:05.449 [DEBUG] [Thread-187936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:45:05.449 [DEBUG] [Thread-187936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:45:05.490 [DEBUG] [Thread-187936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:45:05.490 [DEBUG] [Thread-187936] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:45:05.494 [DEBUG] [Thread-187936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:45:05.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:45:05.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:45:05.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:45:05.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:45:05.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:45:05.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:45:05.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:45:05.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:45:05.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:45:05.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.572676 -999.00  +16.20  23.07     40   +2.80 1 1 1 1 1   888    0 13.75 -4.99 ----- 18.9 23.1 177.0 39.0 22.2 -27.8 21.7 -26.4 23.1 -25.3 24.1 -27.7
2026-02-14T15:45:05.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:45:05.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:45:05.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.572676
2026-02-14T15:45:05.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:45:05.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:45:05.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:45:05.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:45:05.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:45:05.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:44:34', tmtdew=17.43, humidity=30.91, cloud=0.0, wind=31.61, temperature=18.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:44:39.206', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:45:05.522 [DEBUG] [Thread-187936] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:45:05.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-14T15:45:05.617 [DEBUG] [Thread-187939] [transport.py] [_log()] starting thread (client mode): 0xa2d218a0
2026-02-14T15:45:05.617 [DEBUG] [Thread-187939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:45:05.631 [DEBUG] [Thread-187939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:45:05.631 [INFO] [Thread-187939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:45:05.639 [DEBUG] [Thread-187939] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:45:05.640 [DEBUG] [Thread-187939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:45:05.640 [DEBUG] [Thread-187939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:45:05.640 [DEBUG] [Thread-187939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:45:05.640 [DEBUG] [Thread-187939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:45:05.640 [DEBUG] [Thread-187939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:45:05.640 [DEBUG] [Thread-187939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:45:05.640 [DEBUG] [Thread-187939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:45:05.640 [DEBUG] [Thread-187939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:45:05.640 [DEBUG] [Thread-187939] [transport.py] [_log()] client lang: <none>
2026-02-14T15:45:05.640 [DEBUG] [Thread-187939] [transport.py] [_log()] server lang: <none>
2026-02-14T15:45:05.640 [DEBUG] [Thread-187939] [transport.py] [_log()] kex follows: False
2026-02-14T15:45:05.640 [DEBUG] [Thread-187939] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:45:05.640 [DEBUG] [Thread-187939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:45:05.640 [DEBUG] [Thread-187939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:45:05.640 [DEBUG] [Thread-187939] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:45:05.640 [DEBUG] [Thread-187939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:45:05.640 [DEBUG] [Thread-187939] [transport.py] [_log()] Compression: none
2026-02-14T15:45:05.640 [DEBUG] [Thread-187939] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:45:05.700 [DEBUG] [Thread-187939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:45:05.700 [DEBUG] [Thread-187939] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:45:05.701 [DEBUG] [Thread-187939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:45:05.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:45:05.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:45:05.759 [DEBUG] [Thread-187939] [transport.py] [_log()] userauth is OK
2026-02-14T15:45:05.759 [DEBUG] [Thread-187939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:45:05.759 [DEBUG] [Thread-187939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:45:05.759 [DEBUG] [Thread-187939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:45:05.759 [DEBUG] [Thread-187939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:45:05.782 [INFO] [Thread-187939] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:45:05.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-14T15:45:05.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:45:06.589 [DEBUG] [Thread-187939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:45:06.589 [DEBUG] [Thread-187939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:45:06.638 [DEBUG] [Thread-187939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:45:06.638 [DEBUG] [Thread-187939] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:45:06.647 [DEBUG] [Thread-187939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:45:06.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:45:06.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:45:06.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:45:06.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:45:06.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:45:06.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:45:06.684 [DEBUG] [Thread-187939] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:45:15.033 [DEBUG] [Thread-187941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:45:29.432 [DEBUG] [Thread-187942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:45:30.084 [DEBUG] [Thread-187943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:45:36.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:45:36.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:45:36.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T15:45:38.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 45, 9), 16.46, 33.03, 0.0, 33.29, 17.05, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:45:38.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:45:09
2026-02-14T15:45:38.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:45:39.089 [DEBUG] [Thread-187944] [transport.py] [_log()] starting thread (client mode): 0xa57b3ca0
2026-02-14T15:45:39.089 [DEBUG] [Thread-187944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:45:39.111 [DEBUG] [Thread-187944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:45:39.111 [INFO] [Thread-187944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:45:39.114 [DEBUG] [Thread-187944] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:45:39.114 [DEBUG] [Thread-187944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:45:39.114 [DEBUG] [Thread-187944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:45:39.114 [DEBUG] [Thread-187944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:45:39.114 [DEBUG] [Thread-187944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:45:39.114 [DEBUG] [Thread-187944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:45:39.114 [DEBUG] [Thread-187944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:45:39.114 [DEBUG] [Thread-187944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:45:39.114 [DEBUG] [Thread-187944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:45:39.115 [DEBUG] [Thread-187944] [transport.py] [_log()] client lang: <none>
2026-02-14T15:45:39.115 [DEBUG] [Thread-187944] [transport.py] [_log()] server lang: <none>
2026-02-14T15:45:39.115 [DEBUG] [Thread-187944] [transport.py] [_log()] kex follows: False
2026-02-14T15:45:39.115 [DEBUG] [Thread-187944] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:45:39.115 [DEBUG] [Thread-187944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:45:39.115 [DEBUG] [Thread-187944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:45:39.115 [DEBUG] [Thread-187944] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:45:39.115 [DEBUG] [Thread-187944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:45:39.115 [DEBUG] [Thread-187944] [transport.py] [_log()] Compression: none
2026-02-14T15:45:39.115 [DEBUG] [Thread-187944] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:45:39.134 [DEBUG] [Thread-187944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:45:39.135 [DEBUG] [Thread-187944] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:45:39.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:45:39.137 [DEBUG] [Thread-187944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:45:39.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:45:39.139 [DEBUG] [Thread-187944] [transport.py] [_log()] userauth is OK
2026-02-14T15:45:39.139 [DEBUG] [Thread-187944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:45:39.139 [DEBUG] [Thread-187944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:45:39.139 [DEBUG] [Thread-187944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:45:39.139 [DEBUG] [Thread-187944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:45:39.163 [INFO] [Thread-187944] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:45:39.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:45:39.798 [DEBUG] [Thread-187944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:45:39.798 [DEBUG] [Thread-187944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:45:39.799 [DEBUG] [Thread-187944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:45:39.840 [DEBUG] [Thread-187944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:45:39.840 [DEBUG] [Thread-187944] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:45:39.843 [DEBUG] [Thread-187944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:45:39.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:45:39.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:45:39.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:45:39.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:45:39.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:45:39.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:45:39.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:45:39.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:45:39.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:45:39.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.573023 -999.00  +16.20  21.19     40   +2.90 1 1 1 1 1   888    0 13.77 -8.09 ----- 22.9 21.2 179.7 37.5 22.1 -27.3 21.3 -30.4 23.1 -27.3 23.9 -29.0
2026-02-14T15:45:39.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:45:39.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:45:39.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.573023
2026-02-14T15:45:39.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:45:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:45:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:45:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:45:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:45:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:45:09', tmtdew=16.46, humidity=33.03, cloud=0.0, wind=33.29, temperature=17.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:45:09.187', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:45:39.869 [DEBUG] [Thread-187944] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:45:39.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-14T15:45:39.965 [DEBUG] [Thread-187947] [transport.py] [_log()] starting thread (client mode): 0xa2dc2260
2026-02-14T15:45:39.966 [DEBUG] [Thread-187947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:45:39.980 [DEBUG] [Thread-187947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:45:39.981 [INFO] [Thread-187947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:45:39.988 [DEBUG] [Thread-187947] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:45:39.988 [DEBUG] [Thread-187947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:45:39.988 [DEBUG] [Thread-187947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:45:39.988 [DEBUG] [Thread-187947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:45:39.988 [DEBUG] [Thread-187947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:45:39.988 [DEBUG] [Thread-187947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:45:39.988 [DEBUG] [Thread-187947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:45:39.989 [DEBUG] [Thread-187947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:45:39.989 [DEBUG] [Thread-187947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:45:39.989 [DEBUG] [Thread-187947] [transport.py] [_log()] client lang: <none>
2026-02-14T15:45:39.989 [DEBUG] [Thread-187947] [transport.py] [_log()] server lang: <none>
2026-02-14T15:45:39.989 [DEBUG] [Thread-187947] [transport.py] [_log()] kex follows: False
2026-02-14T15:45:39.989 [DEBUG] [Thread-187947] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:45:39.989 [DEBUG] [Thread-187947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:45:39.989 [DEBUG] [Thread-187947] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:45:39.989 [DEBUG] [Thread-187947] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:45:39.989 [DEBUG] [Thread-187947] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:45:39.989 [DEBUG] [Thread-187947] [transport.py] [_log()] Compression: none
2026-02-14T15:45:39.989 [DEBUG] [Thread-187947] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:45:40.049 [DEBUG] [Thread-187947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:45:40.049 [DEBUG] [Thread-187947] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:45:40.050 [DEBUG] [Thread-187947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:45:40.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:45:40.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:45:40.105 [DEBUG] [Thread-187947] [transport.py] [_log()] userauth is OK
2026-02-14T15:45:40.106 [DEBUG] [Thread-187947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:45:40.106 [DEBUG] [Thread-187947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:45:40.106 [DEBUG] [Thread-187947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:45:40.106 [DEBUG] [Thread-187947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:45:40.134 [INFO] [Thread-187947] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:45:40.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-14T15:45:40.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:45:40.946 [DEBUG] [Thread-187947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:45:40.946 [DEBUG] [Thread-187947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:45:40.994 [DEBUG] [Thread-187947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:45:40.995 [DEBUG] [Thread-187947] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:45:41.004 [DEBUG] [Thread-187947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:45:41.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:45:41.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-14T15:45:41.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-14T15:45:41.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:45:41.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:45:41.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:45:41.041 [DEBUG] [Thread-187947] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:45:45.120 [DEBUG] [Thread-187949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:45:49.534 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:45:49.535 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:46:00.178 [DEBUG] [Thread-187950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:46:11.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:46:11.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:46:11.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-14T15:46:12.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 45, 45), 16.02, 33.8, 0.0, 35.08, 16.9, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:46:12.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:45:45
2026-02-14T15:46:13.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:46:13.374 [DEBUG] [Thread-187951] [transport.py] [_log()] starting thread (client mode): 0xa2d23940
2026-02-14T15:46:13.374 [DEBUG] [Thread-187951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:46:13.394 [DEBUG] [Thread-187951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:46:13.394 [INFO] [Thread-187951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:46:13.396 [DEBUG] [Thread-187951] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:46:13.396 [DEBUG] [Thread-187951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:46:13.396 [DEBUG] [Thread-187951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:46:13.396 [DEBUG] [Thread-187951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:46:13.396 [DEBUG] [Thread-187951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:46:13.396 [DEBUG] [Thread-187951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:46:13.396 [DEBUG] [Thread-187951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:46:13.396 [DEBUG] [Thread-187951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:46:13.396 [DEBUG] [Thread-187951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:46:13.396 [DEBUG] [Thread-187951] [transport.py] [_log()] client lang: <none>
2026-02-14T15:46:13.396 [DEBUG] [Thread-187951] [transport.py] [_log()] server lang: <none>
2026-02-14T15:46:13.396 [DEBUG] [Thread-187951] [transport.py] [_log()] kex follows: False
2026-02-14T15:46:13.396 [DEBUG] [Thread-187951] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:46:13.396 [DEBUG] [Thread-187951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:46:13.396 [DEBUG] [Thread-187951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:46:13.396 [DEBUG] [Thread-187951] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:46:13.397 [DEBUG] [Thread-187951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:46:13.397 [DEBUG] [Thread-187951] [transport.py] [_log()] Compression: none
2026-02-14T15:46:13.397 [DEBUG] [Thread-187951] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:46:13.415 [DEBUG] [Thread-187951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:46:13.415 [DEBUG] [Thread-187951] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:46:13.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:46:13.416 [DEBUG] [Thread-187951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:46:13.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:46:13.418 [DEBUG] [Thread-187951] [transport.py] [_log()] userauth is OK
2026-02-14T15:46:13.418 [DEBUG] [Thread-187951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:46:13.418 [DEBUG] [Thread-187951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:46:13.418 [DEBUG] [Thread-187951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:46:13.419 [DEBUG] [Thread-187951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:46:13.436 [INFO] [Thread-187951] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:46:13.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:46:14.072 [DEBUG] [Thread-187951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:46:14.073 [DEBUG] [Thread-187951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:46:14.073 [DEBUG] [Thread-187951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:46:14.113 [DEBUG] [Thread-187951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:46:14.114 [DEBUG] [Thread-187951] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:46:14.117 [DEBUG] [Thread-187951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:46:14.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:46:14.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:46:14.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:46:14.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:46:14.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:46:14.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:46:14.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:46:14.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:46:14.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:46:14.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.573370 -999.00  +16.50  25.00     40   +2.90 1 1 1 1 1   888    0 13.49 -12.16 ----- 18.3 25.0 194.2 33.6 22.1 -29.0 21.4 -27.3 23.1 -26.0 23.9 -28.1
2026-02-14T15:46:14.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:46:14.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:46:14.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.573370
2026-02-14T15:46:14.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:46:14.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:46:14.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:46:14.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:46:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:46:14.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:45:45', tmtdew=16.02, humidity=33.8, cloud=0.0, wind=35.08, temperature=16.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:45:39.168', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:46:14.143 [DEBUG] [Thread-187951] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:46:14.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-14T15:46:14.243 [DEBUG] [Thread-187954] [transport.py] [_log()] starting thread (client mode): 0xa2d23700
2026-02-14T15:46:14.244 [DEBUG] [Thread-187954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:46:14.259 [DEBUG] [Thread-187954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:46:14.259 [INFO] [Thread-187954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:46:14.267 [DEBUG] [Thread-187954] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:46:14.267 [DEBUG] [Thread-187954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:46:14.267 [DEBUG] [Thread-187954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:46:14.267 [DEBUG] [Thread-187954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:46:14.267 [DEBUG] [Thread-187954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:46:14.267 [DEBUG] [Thread-187954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:46:14.267 [DEBUG] [Thread-187954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:46:14.267 [DEBUG] [Thread-187954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:46:14.267 [DEBUG] [Thread-187954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:46:14.267 [DEBUG] [Thread-187954] [transport.py] [_log()] client lang: <none>
2026-02-14T15:46:14.267 [DEBUG] [Thread-187954] [transport.py] [_log()] server lang: <none>
2026-02-14T15:46:14.268 [DEBUG] [Thread-187954] [transport.py] [_log()] kex follows: False
2026-02-14T15:46:14.268 [DEBUG] [Thread-187954] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:46:14.268 [DEBUG] [Thread-187954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:46:14.268 [DEBUG] [Thread-187954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:46:14.268 [DEBUG] [Thread-187954] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:46:14.268 [DEBUG] [Thread-187954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:46:14.268 [DEBUG] [Thread-187954] [transport.py] [_log()] Compression: none
2026-02-14T15:46:14.268 [DEBUG] [Thread-187954] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:46:14.327 [DEBUG] [Thread-187954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:46:14.328 [DEBUG] [Thread-187954] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:46:14.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:46:14.329 [DEBUG] [Thread-187954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:46:14.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:46:14.384 [DEBUG] [Thread-187954] [transport.py] [_log()] userauth is OK
2026-02-14T15:46:14.384 [DEBUG] [Thread-187954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:46:14.384 [DEBUG] [Thread-187954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:46:14.384 [DEBUG] [Thread-187954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:46:14.384 [DEBUG] [Thread-187954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:46:14.402 [INFO] [Thread-187954] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:46:14.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-14T15:46:14.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:46:15.215 [DEBUG] [Thread-187956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:46:15.242 [DEBUG] [Thread-187954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:46:15.243 [DEBUG] [Thread-187954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:46:15.290 [DEBUG] [Thread-187954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:46:15.290 [DEBUG] [Thread-187954] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:46:15.300 [DEBUG] [Thread-187954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:46:15.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:46:15.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-14T15:46:15.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:46:15.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:46:15.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:46:15.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:46:15.336 [DEBUG] [Thread-187954] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:46:29.473 [DEBUG] [Thread-187957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:46:30.275 [DEBUG] [Thread-187958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:46:45.312 [DEBUG] [Thread-187959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:46:45.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:46:45.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:46:45.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T15:46:47.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 46, 20), 16.21, 33.44, 0.0, 34.41, 17.12, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:46:47.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:46:20
2026-02-14T15:46:47.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:46:47.695 [DEBUG] [Thread-187960] [transport.py] [_log()] starting thread (client mode): 0xa2d20400
2026-02-14T15:46:47.695 [DEBUG] [Thread-187960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:46:47.715 [DEBUG] [Thread-187960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:46:47.716 [INFO] [Thread-187960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:46:47.719 [DEBUG] [Thread-187960] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:46:47.719 [DEBUG] [Thread-187960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:46:47.719 [DEBUG] [Thread-187960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:46:47.719 [DEBUG] [Thread-187960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:46:47.719 [DEBUG] [Thread-187960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:46:47.719 [DEBUG] [Thread-187960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:46:47.719 [DEBUG] [Thread-187960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:46:47.719 [DEBUG] [Thread-187960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:46:47.719 [DEBUG] [Thread-187960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:46:47.719 [DEBUG] [Thread-187960] [transport.py] [_log()] client lang: <none>
2026-02-14T15:46:47.719 [DEBUG] [Thread-187960] [transport.py] [_log()] server lang: <none>
2026-02-14T15:46:47.719 [DEBUG] [Thread-187960] [transport.py] [_log()] kex follows: False
2026-02-14T15:46:47.719 [DEBUG] [Thread-187960] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:46:47.719 [DEBUG] [Thread-187960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:46:47.719 [DEBUG] [Thread-187960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:46:47.719 [DEBUG] [Thread-187960] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:46:47.719 [DEBUG] [Thread-187960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:46:47.719 [DEBUG] [Thread-187960] [transport.py] [_log()] Compression: none
2026-02-14T15:46:47.719 [DEBUG] [Thread-187960] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:46:47.736 [DEBUG] [Thread-187960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:46:47.737 [DEBUG] [Thread-187960] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:46:47.737 [DEBUG] [Thread-187960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:46:47.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:46:47.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:46:47.739 [DEBUG] [Thread-187960] [transport.py] [_log()] userauth is OK
2026-02-14T15:46:47.740 [DEBUG] [Thread-187960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:46:47.740 [DEBUG] [Thread-187960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:46:47.740 [DEBUG] [Thread-187960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:46:47.740 [DEBUG] [Thread-187960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:46:47.758 [INFO] [Thread-187960] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:46:47.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:46:48.356 [DEBUG] [Thread-187960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:46:48.357 [DEBUG] [Thread-187960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:46:48.357 [DEBUG] [Thread-187960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:46:48.397 [DEBUG] [Thread-187960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:46:48.398 [DEBUG] [Thread-187960] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:46:48.401 [DEBUG] [Thread-187960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:46:48.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:46:48.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:46:48.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:46:48.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:46:48.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:46:48.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:46:48.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:46:48.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:46:48.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:46:48.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.573718 -999.00  +16.70  27.97     40   +3.00 1 1 1 1 1   888    0 13.43 -15.10 ----- 32.5 28.0 175.4 39.0 22.2 -28.3 21.4 -27.9 23.2 -24.8 24.0 -27.2
2026-02-14T15:46:48.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:46:48.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:46:48.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.573718
2026-02-14T15:46:48.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:46:48.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:46:48.429 [DEBUG] [Thread-187960] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:46:48.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:46:48.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:46:48.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:46:48.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:46:20', tmtdew=16.21, humidity=33.44, cloud=0.0, wind=34.41, temperature=17.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:46:09.235', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:46:48.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-14T15:46:48.525 [DEBUG] [Thread-187963] [transport.py] [_log()] starting thread (client mode): 0xa2d22590
2026-02-14T15:46:48.526 [DEBUG] [Thread-187963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:46:48.540 [DEBUG] [Thread-187963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:46:48.541 [INFO] [Thread-187963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:46:48.548 [DEBUG] [Thread-187963] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:46:48.548 [DEBUG] [Thread-187963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:46:48.548 [DEBUG] [Thread-187963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:46:48.548 [DEBUG] [Thread-187963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:46:48.548 [DEBUG] [Thread-187963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:46:48.549 [DEBUG] [Thread-187963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:46:48.549 [DEBUG] [Thread-187963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:46:48.549 [DEBUG] [Thread-187963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:46:48.549 [DEBUG] [Thread-187963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:46:48.549 [DEBUG] [Thread-187963] [transport.py] [_log()] client lang: <none>
2026-02-14T15:46:48.549 [DEBUG] [Thread-187963] [transport.py] [_log()] server lang: <none>
2026-02-14T15:46:48.549 [DEBUG] [Thread-187963] [transport.py] [_log()] kex follows: False
2026-02-14T15:46:48.549 [DEBUG] [Thread-187963] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:46:48.549 [DEBUG] [Thread-187963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:46:48.549 [DEBUG] [Thread-187963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:46:48.549 [DEBUG] [Thread-187963] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:46:48.549 [DEBUG] [Thread-187963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:46:48.549 [DEBUG] [Thread-187963] [transport.py] [_log()] Compression: none
2026-02-14T15:46:48.549 [DEBUG] [Thread-187963] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:46:48.606 [DEBUG] [Thread-187963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:46:48.607 [DEBUG] [Thread-187963] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:46:48.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:46:48.608 [DEBUG] [Thread-187963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:46:48.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:46:48.662 [DEBUG] [Thread-187963] [transport.py] [_log()] userauth is OK
2026-02-14T15:46:48.662 [DEBUG] [Thread-187963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:46:48.663 [DEBUG] [Thread-187963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:46:48.663 [DEBUG] [Thread-187963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:46:48.663 [DEBUG] [Thread-187963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:46:48.683 [INFO] [Thread-187963] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:46:48.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T15:46:48.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:46:49.564 [DEBUG] [Thread-187963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:46:49.564 [DEBUG] [Thread-187963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:46:49.612 [DEBUG] [Thread-187963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:46:49.613 [DEBUG] [Thread-187963] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:46:49.622 [DEBUG] [Thread-187963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:46:49.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:46:49.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-14T15:46:49.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-14T15:46:49.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:46:49.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:46:49.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:46:49.659 [DEBUG] [Thread-187963] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:46:49.675 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:46:49.677 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:47:00.348 [DEBUG] [Thread-187965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:47:15.404 [DEBUG] [Thread-187966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:47:19.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:47:19.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:47:19.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-14T15:47:21.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 46, 55), 16.54, 32.77, 0.0, 36.1, 17.33, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:47:21.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:46:55
2026-02-14T15:47:21.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:47:21.936 [DEBUG] [Thread-187967] [transport.py] [_log()] starting thread (client mode): 0xa57b3a90
2026-02-14T15:47:21.936 [DEBUG] [Thread-187967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:47:21.956 [DEBUG] [Thread-187967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:47:21.956 [INFO] [Thread-187967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:47:21.959 [DEBUG] [Thread-187967] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:47:21.959 [DEBUG] [Thread-187967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:47:21.959 [DEBUG] [Thread-187967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:47:21.960 [DEBUG] [Thread-187967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:47:21.960 [DEBUG] [Thread-187967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:47:21.960 [DEBUG] [Thread-187967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:47:21.960 [DEBUG] [Thread-187967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:47:21.960 [DEBUG] [Thread-187967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:47:21.960 [DEBUG] [Thread-187967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:47:21.960 [DEBUG] [Thread-187967] [transport.py] [_log()] client lang: <none>
2026-02-14T15:47:21.960 [DEBUG] [Thread-187967] [transport.py] [_log()] server lang: <none>
2026-02-14T15:47:21.960 [DEBUG] [Thread-187967] [transport.py] [_log()] kex follows: False
2026-02-14T15:47:21.960 [DEBUG] [Thread-187967] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:47:21.960 [DEBUG] [Thread-187967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:47:21.960 [DEBUG] [Thread-187967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:47:21.960 [DEBUG] [Thread-187967] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:47:21.960 [DEBUG] [Thread-187967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:47:21.961 [DEBUG] [Thread-187967] [transport.py] [_log()] Compression: none
2026-02-14T15:47:21.961 [DEBUG] [Thread-187967] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:47:21.979 [DEBUG] [Thread-187967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:47:21.980 [DEBUG] [Thread-187967] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:47:21.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:47:21.981 [DEBUG] [Thread-187967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:47:21.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:47:21.983 [DEBUG] [Thread-187967] [transport.py] [_log()] userauth is OK
2026-02-14T15:47:21.983 [DEBUG] [Thread-187967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:47:21.983 [DEBUG] [Thread-187967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:47:21.983 [DEBUG] [Thread-187967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:47:21.983 [DEBUG] [Thread-187967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:47:22.005 [INFO] [Thread-187967] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:47:22.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:47:22.755 [DEBUG] [Thread-187967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:47:22.756 [DEBUG] [Thread-187967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:47:22.756 [DEBUG] [Thread-187967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:47:22.796 [DEBUG] [Thread-187967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:47:22.796 [DEBUG] [Thread-187967] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:47:22.799 [DEBUG] [Thread-187967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:47:22.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:47:22.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:47:22.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:47:22.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:47:22.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:47:22.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:47:22.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:47:22.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:47:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:47:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.574065 -999.00  +16.50  26.42     39   +2.80 1 1 1 1 1   888    0 13.29 -16.74 ----- 30.5 26.4 160.2 37.1 22.1 -28.7 21.4 -27.9 23.0 -27.0 23.9 -29.2
2026-02-14T15:47:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:47:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:47:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.574065
2026-02-14T15:47:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:47:22.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:47:22.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:47:22.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:47:22.823 [DEBUG] [Thread-187967] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:47:22.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:47:22.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:46:55', tmtdew=16.54, humidity=32.77, cloud=0.0, wind=36.1, temperature=17.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:46:39.216', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:47:22.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-14T15:47:22.924 [DEBUG] [Thread-187970] [transport.py] [_log()] starting thread (client mode): 0xa57b0760
2026-02-14T15:47:22.924 [DEBUG] [Thread-187970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:47:22.939 [DEBUG] [Thread-187970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:47:22.940 [INFO] [Thread-187970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:47:22.947 [DEBUG] [Thread-187970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:47:22.947 [DEBUG] [Thread-187970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:47:22.947 [DEBUG] [Thread-187970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:47:22.947 [DEBUG] [Thread-187970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:47:22.947 [DEBUG] [Thread-187970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:47:22.947 [DEBUG] [Thread-187970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:47:22.947 [DEBUG] [Thread-187970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:47:22.947 [DEBUG] [Thread-187970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:47:22.947 [DEBUG] [Thread-187970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:47:22.947 [DEBUG] [Thread-187970] [transport.py] [_log()] client lang: <none>
2026-02-14T15:47:22.947 [DEBUG] [Thread-187970] [transport.py] [_log()] server lang: <none>
2026-02-14T15:47:22.947 [DEBUG] [Thread-187970] [transport.py] [_log()] kex follows: False
2026-02-14T15:47:22.947 [DEBUG] [Thread-187970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:47:22.947 [DEBUG] [Thread-187970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:47:22.947 [DEBUG] [Thread-187970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:47:22.947 [DEBUG] [Thread-187970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:47:22.947 [DEBUG] [Thread-187970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:47:22.947 [DEBUG] [Thread-187970] [transport.py] [_log()] Compression: none
2026-02-14T15:47:22.947 [DEBUG] [Thread-187970] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:47:23.005 [DEBUG] [Thread-187970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:47:23.005 [DEBUG] [Thread-187970] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:47:23.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:47:23.007 [DEBUG] [Thread-187970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:47:23.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:47:23.060 [DEBUG] [Thread-187970] [transport.py] [_log()] userauth is OK
2026-02-14T15:47:23.060 [DEBUG] [Thread-187970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:47:23.060 [DEBUG] [Thread-187970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:47:23.060 [DEBUG] [Thread-187970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:47:23.060 [DEBUG] [Thread-187970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:47:23.080 [INFO] [Thread-187970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:47: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-14T15:47:23.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:47:23.904 [DEBUG] [Thread-187970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:47:23.904 [DEBUG] [Thread-187970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:47:23.952 [DEBUG] [Thread-187970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:47:23.952 [DEBUG] [Thread-187970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:47:23.962 [DEBUG] [Thread-187970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:47:23.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:47:23.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-14T15:47:23.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:47:23.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:47:23.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:47:23.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:47:23.998 [DEBUG] [Thread-187970] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:47:29.519 [DEBUG] [Thread-187972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:47:30.441 [DEBUG] [Thread-187973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:47:45.492 [DEBUG] [Thread-187974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:47:49.820 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:47:49.821 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:47:54.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:47:54.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:47:54.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T15:47:55.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 47, 30), 16.34, 33.14, 0.0, 36.31, 17.13, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:47:55.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:47:30
2026-02-14T15:47:56.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:47:56.472 [DEBUG] [Thread-187975] [transport.py] [_log()] starting thread (client mode): 0xa2dc3df0
2026-02-14T15:47:56.473 [DEBUG] [Thread-187975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:47:56.491 [DEBUG] [Thread-187975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:47:56.491 [INFO] [Thread-187975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:47:56.494 [DEBUG] [Thread-187975] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:47:56.495 [DEBUG] [Thread-187975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:47:56.495 [DEBUG] [Thread-187975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:47:56.495 [DEBUG] [Thread-187975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:47:56.495 [DEBUG] [Thread-187975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:47:56.495 [DEBUG] [Thread-187975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:47:56.495 [DEBUG] [Thread-187975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:47:56.495 [DEBUG] [Thread-187975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:47:56.495 [DEBUG] [Thread-187975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:47:56.496 [DEBUG] [Thread-187975] [transport.py] [_log()] client lang: <none>
2026-02-14T15:47:56.496 [DEBUG] [Thread-187975] [transport.py] [_log()] server lang: <none>
2026-02-14T15:47:56.496 [DEBUG] [Thread-187975] [transport.py] [_log()] kex follows: False
2026-02-14T15:47:56.496 [DEBUG] [Thread-187975] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:47:56.496 [DEBUG] [Thread-187975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:47:56.496 [DEBUG] [Thread-187975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:47:56.496 [DEBUG] [Thread-187975] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:47:56.496 [DEBUG] [Thread-187975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:47:56.496 [DEBUG] [Thread-187975] [transport.py] [_log()] Compression: none
2026-02-14T15:47:56.496 [DEBUG] [Thread-187975] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:47:56.512 [DEBUG] [Thread-187975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:47:56.513 [DEBUG] [Thread-187975] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:47:56.513 [DEBUG] [Thread-187975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:47:56.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:47:56.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:47:56.515 [DEBUG] [Thread-187975] [transport.py] [_log()] userauth is OK
2026-02-14T15:47:56.516 [DEBUG] [Thread-187975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:47:56.516 [DEBUG] [Thread-187975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:47:56.516 [DEBUG] [Thread-187975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:47:56.516 [DEBUG] [Thread-187975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:47:56.541 [INFO] [Thread-187975] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:47:56.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:47:57.180 [DEBUG] [Thread-187975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:47:57.181 [DEBUG] [Thread-187975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:47:57.181 [DEBUG] [Thread-187975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:47:57.221 [DEBUG] [Thread-187975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:47:57.222 [DEBUG] [Thread-187975] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:47:57.225 [DEBUG] [Thread-187975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:47:57.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:47:57.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:47:57.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:47:57.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:47:57.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:47:57.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:47:57.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:47:57.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:47:57.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:47:57.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.574412 -999.00  +16.60  20.14     40   +2.90 1 1 1 1 1   888    0 13.42 -19.43 ----- 22.9 20.1 164.3 33.0 22.1 -27.6 21.5 -26.2 23.0 -24.6 24.0 -26.8
2026-02-14T15:47:57.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:47:57.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:47:57.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.574412
2026-02-14T15:47:57.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:47:57.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:47:57.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:47:57.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:47:57.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:47:57.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:47:30', tmtdew=16.34, humidity=33.14, cloud=0.0, wind=36.31, temperature=17.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:47:09.197', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:47:57.255 [DEBUG] [Thread-187975] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:47:57.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-14T15:47:57.351 [DEBUG] [Thread-187978] [transport.py] [_log()] starting thread (client mode): 0xa2def9a0
2026-02-14T15:47:57.351 [DEBUG] [Thread-187978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:47:57.365 [DEBUG] [Thread-187978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:47:57.365 [INFO] [Thread-187978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:47:57.373 [DEBUG] [Thread-187978] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:47:57.373 [DEBUG] [Thread-187978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:47:57.373 [DEBUG] [Thread-187978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:47:57.373 [DEBUG] [Thread-187978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:47:57.373 [DEBUG] [Thread-187978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:47:57.374 [DEBUG] [Thread-187978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:47:57.374 [DEBUG] [Thread-187978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:47:57.374 [DEBUG] [Thread-187978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:47:57.374 [DEBUG] [Thread-187978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:47:57.374 [DEBUG] [Thread-187978] [transport.py] [_log()] client lang: <none>
2026-02-14T15:47:57.374 [DEBUG] [Thread-187978] [transport.py] [_log()] server lang: <none>
2026-02-14T15:47:57.374 [DEBUG] [Thread-187978] [transport.py] [_log()] kex follows: False
2026-02-14T15:47:57.374 [DEBUG] [Thread-187978] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:47:57.374 [DEBUG] [Thread-187978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:47:57.374 [DEBUG] [Thread-187978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:47:57.374 [DEBUG] [Thread-187978] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:47:57.374 [DEBUG] [Thread-187978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:47:57.374 [DEBUG] [Thread-187978] [transport.py] [_log()] Compression: none
2026-02-14T15:47:57.374 [DEBUG] [Thread-187978] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:47:57.431 [DEBUG] [Thread-187978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:47:57.432 [DEBUG] [Thread-187978] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:47:57.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:47:57.433 [DEBUG] [Thread-187978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:47:57.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:47:57.487 [DEBUG] [Thread-187978] [transport.py] [_log()] userauth is OK
2026-02-14T15:47:57.488 [DEBUG] [Thread-187978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:47:57.488 [DEBUG] [Thread-187978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:47:57.488 [DEBUG] [Thread-187978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:47:57.488 [DEBUG] [Thread-187978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:47:57.506 [INFO] [Thread-187978] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:47:57.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-14T15:47:57.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:47:58.327 [DEBUG] [Thread-187978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:47:58.328 [DEBUG] [Thread-187978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:47:58.375 [DEBUG] [Thread-187978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:47:58.376 [DEBUG] [Thread-187978] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:47:58.385 [DEBUG] [Thread-187978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:47:58.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:47:58.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:47:58.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-14T15:47:58.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:47:58.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:47:58.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:47:58.422 [DEBUG] [Thread-187978] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:48:00.529 [DEBUG] [Thread-187980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:48:15.582 [DEBUG] [Thread-187981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:48:28.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:48:28.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:48:28.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-14T15:48:29.557 [DEBUG] [Thread-187982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:48:30.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 48, 5), 16.24, 33.34, 0.0, 33.15, 17.05, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:48:30.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:48:05
2026-02-14T15:48:30.617 [DEBUG] [Thread-187983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:48:30.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:48:30.835 [DEBUG] [Thread-187984] [transport.py] [_log()] starting thread (client mode): 0xa2decb80
2026-02-14T15:48:30.835 [DEBUG] [Thread-187984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:48:30.855 [DEBUG] [Thread-187984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:48:30.855 [INFO] [Thread-187984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:48:30.858 [DEBUG] [Thread-187984] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:48:30.858 [DEBUG] [Thread-187984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:48:30.858 [DEBUG] [Thread-187984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:48:30.858 [DEBUG] [Thread-187984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:48:30.859 [DEBUG] [Thread-187984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:48:30.859 [DEBUG] [Thread-187984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:48:30.859 [DEBUG] [Thread-187984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:48:30.859 [DEBUG] [Thread-187984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:48:30.859 [DEBUG] [Thread-187984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:48:30.859 [DEBUG] [Thread-187984] [transport.py] [_log()] client lang: <none>
2026-02-14T15:48:30.859 [DEBUG] [Thread-187984] [transport.py] [_log()] server lang: <none>
2026-02-14T15:48:30.859 [DEBUG] [Thread-187984] [transport.py] [_log()] kex follows: False
2026-02-14T15:48:30.859 [DEBUG] [Thread-187984] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:48:30.859 [DEBUG] [Thread-187984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:48:30.859 [DEBUG] [Thread-187984] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:48:30.859 [DEBUG] [Thread-187984] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:48:30.859 [DEBUG] [Thread-187984] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:48:30.859 [DEBUG] [Thread-187984] [transport.py] [_log()] Compression: none
2026-02-14T15:48:30.859 [DEBUG] [Thread-187984] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:48:30.876 [DEBUG] [Thread-187984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:48:30.876 [DEBUG] [Thread-187984] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:48:30.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:48:30.877 [DEBUG] [Thread-187984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:48:30.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:48:30.880 [DEBUG] [Thread-187984] [transport.py] [_log()] userauth is OK
2026-02-14T15:48:30.880 [DEBUG] [Thread-187984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:48:30.880 [DEBUG] [Thread-187984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:48:30.881 [DEBUG] [Thread-187984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:48:30.881 [DEBUG] [Thread-187984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:48:30.901 [INFO] [Thread-187984] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:48:30.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:48:31.496 [DEBUG] [Thread-187984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:48:31.496 [DEBUG] [Thread-187984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:48:31.497 [DEBUG] [Thread-187984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:48:31.537 [DEBUG] [Thread-187984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:48:31.538 [DEBUG] [Thread-187984] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:48:31.541 [DEBUG] [Thread-187984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:48:31.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:48:31.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:48:31.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:48:31.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:48:31.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:48:31.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:48:31.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:48:31.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:48:31.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:48:31.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.574760 -999.00  +16.70  29.06     39   +3.00 1 1 1 1 1   888    0 13.24 -20.91 ----- 25.5 29.1 169.2 47.8 22.1 -27.7 21.6 -27.1 22.9 -27.7 23.9 -28.7
2026-02-14T15:48:31.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:48:31.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:48:31.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.574760
2026-02-14T15:48:31.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:48:31.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:48:31.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:48:31.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:48:31.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:48:31.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:48:05', tmtdew=16.24, humidity=33.34, cloud=0.0, wind=33.15, temperature=17.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:47:39.264', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:48:31.567 [DEBUG] [Thread-187984] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:48:31.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-14T15:48:31.663 [DEBUG] [Thread-187987] [transport.py] [_log()] starting thread (client mode): 0xa2d22a40
2026-02-14T15:48:31.664 [DEBUG] [Thread-187987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:48:31.679 [DEBUG] [Thread-187987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:48:31.680 [INFO] [Thread-187987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:48:31.687 [DEBUG] [Thread-187987] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:48:31.687 [DEBUG] [Thread-187987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:48:31.687 [DEBUG] [Thread-187987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:48:31.687 [DEBUG] [Thread-187987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:48:31.687 [DEBUG] [Thread-187987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:48:31.687 [DEBUG] [Thread-187987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:48:31.687 [DEBUG] [Thread-187987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:48:31.687 [DEBUG] [Thread-187987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:48:31.687 [DEBUG] [Thread-187987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:48:31.687 [DEBUG] [Thread-187987] [transport.py] [_log()] client lang: <none>
2026-02-14T15:48:31.688 [DEBUG] [Thread-187987] [transport.py] [_log()] server lang: <none>
2026-02-14T15:48:31.688 [DEBUG] [Thread-187987] [transport.py] [_log()] kex follows: False
2026-02-14T15:48:31.688 [DEBUG] [Thread-187987] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:48:31.688 [DEBUG] [Thread-187987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:48:31.688 [DEBUG] [Thread-187987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:48:31.688 [DEBUG] [Thread-187987] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:48:31.688 [DEBUG] [Thread-187987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:48:31.688 [DEBUG] [Thread-187987] [transport.py] [_log()] Compression: none
2026-02-14T15:48:31.688 [DEBUG] [Thread-187987] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:48:31.746 [DEBUG] [Thread-187987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:48:31.746 [DEBUG] [Thread-187987] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:48:31.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:48:31.747 [DEBUG] [Thread-187987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:48:31.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:48:31.802 [DEBUG] [Thread-187987] [transport.py] [_log()] userauth is OK
2026-02-14T15:48:31.802 [DEBUG] [Thread-187987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:48:31.802 [DEBUG] [Thread-187987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:48:31.803 [DEBUG] [Thread-187987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:48:31.803 [DEBUG] [Thread-187987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:48:31.822 [INFO] [Thread-187987] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:48:31.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-14T15:48:31.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:48:32.645 [DEBUG] [Thread-187987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:48:32.645 [DEBUG] [Thread-187987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:48:32.693 [DEBUG] [Thread-187987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:48:32.694 [DEBUG] [Thread-187987] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:48:32.703 [DEBUG] [Thread-187987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:48:32.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:48:32.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-14T15:48:32.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:48:32.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:48:32.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:48:32.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:48:32.742 [DEBUG] [Thread-187987] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:48:45.656 [DEBUG] [Thread-187989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:48:49.962 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:48:49.963 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:49:00.719 [DEBUG] [Thread-187990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:49:02.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:49:02.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:49:02.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T15:49:04.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 48, 41), 17.78, 30.28, 0.0, 30.17, 18.63, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:49:04.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:48:41
2026-02-14T15:49:05.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:49:05.183 [DEBUG] [Thread-187991] [transport.py] [_log()] starting thread (client mode): 0xa2deeb60
2026-02-14T15:49:05.183 [DEBUG] [Thread-187991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:49:05.206 [DEBUG] [Thread-187991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:49:05.206 [INFO] [Thread-187991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:49:05.209 [DEBUG] [Thread-187991] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:49:05.209 [DEBUG] [Thread-187991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:49:05.209 [DEBUG] [Thread-187991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:49:05.209 [DEBUG] [Thread-187991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:49:05.210 [DEBUG] [Thread-187991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:49:05.210 [DEBUG] [Thread-187991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:49:05.210 [DEBUG] [Thread-187991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:49:05.210 [DEBUG] [Thread-187991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:49:05.210 [DEBUG] [Thread-187991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:49:05.210 [DEBUG] [Thread-187991] [transport.py] [_log()] client lang: <none>
2026-02-14T15:49:05.210 [DEBUG] [Thread-187991] [transport.py] [_log()] server lang: <none>
2026-02-14T15:49:05.210 [DEBUG] [Thread-187991] [transport.py] [_log()] kex follows: False
2026-02-14T15:49:05.210 [DEBUG] [Thread-187991] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:49:05.210 [DEBUG] [Thread-187991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:49:05.210 [DEBUG] [Thread-187991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:49:05.210 [DEBUG] [Thread-187991] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:49:05.211 [DEBUG] [Thread-187991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:49:05.211 [DEBUG] [Thread-187991] [transport.py] [_log()] Compression: none
2026-02-14T15:49:05.211 [DEBUG] [Thread-187991] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:49:05.232 [DEBUG] [Thread-187991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:49:05.232 [DEBUG] [Thread-187991] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:49:05.233 [DEBUG] [Thread-187991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:49:05.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:49:05.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:49:05.235 [DEBUG] [Thread-187991] [transport.py] [_log()] userauth is OK
2026-02-14T15:49:05.235 [DEBUG] [Thread-187991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:49:05.235 [DEBUG] [Thread-187991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:49:05.235 [DEBUG] [Thread-187991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:49:05.235 [DEBUG] [Thread-187991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:49:05.262 [INFO] [Thread-187991] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:49:05.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:49:05.918 [DEBUG] [Thread-187991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:49:05.919 [DEBUG] [Thread-187991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:49:05.919 [DEBUG] [Thread-187991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:49:05.960 [DEBUG] [Thread-187991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:49:05.960 [DEBUG] [Thread-187991] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:49:05.963 [DEBUG] [Thread-187991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:49:05.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:49:05.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:49:05.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:49:05.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:49:05.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:49:05.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:49:05.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:49:05.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:49:05.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:49:05.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.575107 -999.00  +16.50  30.84     39   +2.80 1 1 2 1 1   888    0 13.17 -22.43 ----- 23.8 30.8 182.2 42.2 22.0 -28.8 21.4 -27.9 22.9 -26.9 23.8 -29.2
2026-02-14T15:49:05.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:49:05.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:49:05.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.575107
2026-02-14T15:49:05.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:49:05.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:49:05.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:49:05.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:49:05.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:49:05.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:48:41', tmtdew=17.78, humidity=30.28, cloud=0.0, wind=30.17, temperature=18.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:48:09.245', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:49:05.989 [DEBUG] [Thread-187991] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:49:06.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-14T15:49:06.085 [DEBUG] [Thread-187994] [transport.py] [_log()] starting thread (client mode): 0xa2dec430
2026-02-14T15:49:06.085 [DEBUG] [Thread-187994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:49:06.100 [DEBUG] [Thread-187994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:49:06.100 [INFO] [Thread-187994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:49:06.107 [DEBUG] [Thread-187994] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:49:06.107 [DEBUG] [Thread-187994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:49:06.107 [DEBUG] [Thread-187994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:49:06.107 [DEBUG] [Thread-187994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:49:06.107 [DEBUG] [Thread-187994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:49:06.107 [DEBUG] [Thread-187994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:49:06.108 [DEBUG] [Thread-187994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:49:06.108 [DEBUG] [Thread-187994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:49:06.108 [DEBUG] [Thread-187994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:49:06.108 [DEBUG] [Thread-187994] [transport.py] [_log()] client lang: <none>
2026-02-14T15:49:06.108 [DEBUG] [Thread-187994] [transport.py] [_log()] server lang: <none>
2026-02-14T15:49:06.108 [DEBUG] [Thread-187994] [transport.py] [_log()] kex follows: False
2026-02-14T15:49:06.108 [DEBUG] [Thread-187994] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:49:06.108 [DEBUG] [Thread-187994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:49:06.108 [DEBUG] [Thread-187994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:49:06.108 [DEBUG] [Thread-187994] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:49:06.108 [DEBUG] [Thread-187994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:49:06.108 [DEBUG] [Thread-187994] [transport.py] [_log()] Compression: none
2026-02-14T15:49:06.108 [DEBUG] [Thread-187994] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:49:06.165 [DEBUG] [Thread-187994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:49:06.165 [DEBUG] [Thread-187994] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:49:06.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:49:06.166 [DEBUG] [Thread-187994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:49:06.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:49:06.225 [DEBUG] [Thread-187994] [transport.py] [_log()] userauth is OK
2026-02-14T15:49:06.225 [DEBUG] [Thread-187994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:49:06.225 [DEBUG] [Thread-187994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:49:06.225 [DEBUG] [Thread-187994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:49:06.225 [DEBUG] [Thread-187994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:49:06.246 [INFO] [Thread-187994] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:49:06.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-14T15:49:06.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:49:07.079 [DEBUG] [Thread-187994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:49:07.079 [DEBUG] [Thread-187994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:49:07.127 [DEBUG] [Thread-187994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:49:07.127 [DEBUG] [Thread-187994] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:49:07.137 [DEBUG] [Thread-187994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:49:07.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:49:07.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-14T15:49:07.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-14T15:49:07.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:49:07.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:49:07.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:49:07.175 [DEBUG] [Thread-187994] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:49:15.757 [DEBUG] [Thread-187996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:49:29.612 [DEBUG] [Thread-187997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:49:30.812 [DEBUG] [Thread-187998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:49:37.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:49:37.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:49: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-14T15:49:39.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 49, 16), 16.29, 33.32, 0.0, 30.28, 16.92, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:49:39.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:49:16
2026-02-14T15:49:39.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:49:39.580 [DEBUG] [Thread-187999] [transport.py] [_log()] starting thread (client mode): 0xa57b2ce0
2026-02-14T15:49:39.580 [DEBUG] [Thread-187999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:49:39.600 [DEBUG] [Thread-187999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:49:39.600 [INFO] [Thread-187999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:49:39.603 [DEBUG] [Thread-187999] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:49:39.603 [DEBUG] [Thread-187999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:49:39.604 [DEBUG] [Thread-187999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:49:39.604 [DEBUG] [Thread-187999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:49:39.604 [DEBUG] [Thread-187999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:49:39.604 [DEBUG] [Thread-187999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:49:39.604 [DEBUG] [Thread-187999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:49:39.604 [DEBUG] [Thread-187999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:49:39.604 [DEBUG] [Thread-187999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:49:39.604 [DEBUG] [Thread-187999] [transport.py] [_log()] client lang: <none>
2026-02-14T15:49:39.604 [DEBUG] [Thread-187999] [transport.py] [_log()] server lang: <none>
2026-02-14T15:49:39.604 [DEBUG] [Thread-187999] [transport.py] [_log()] kex follows: False
2026-02-14T15:49:39.604 [DEBUG] [Thread-187999] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:49:39.604 [DEBUG] [Thread-187999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:49:39.604 [DEBUG] [Thread-187999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:49:39.604 [DEBUG] [Thread-187999] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:49:39.604 [DEBUG] [Thread-187999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:49:39.605 [DEBUG] [Thread-187999] [transport.py] [_log()] Compression: none
2026-02-14T15:49:39.605 [DEBUG] [Thread-187999] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:49:39.622 [DEBUG] [Thread-187999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:49:39.623 [DEBUG] [Thread-187999] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:49:39.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:49:39.624 [DEBUG] [Thread-187999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:49:39.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:49:39.626 [DEBUG] [Thread-187999] [transport.py] [_log()] userauth is OK
2026-02-14T15:49:39.627 [DEBUG] [Thread-187999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:49:39.627 [DEBUG] [Thread-187999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:49:39.627 [DEBUG] [Thread-187999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:49:39.627 [DEBUG] [Thread-187999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:49:39.651 [INFO] [Thread-187999] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:49:39.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:49:40.300 [DEBUG] [Thread-187999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:49:40.300 [DEBUG] [Thread-187999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:49:40.301 [DEBUG] [Thread-187999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:49:40.341 [DEBUG] [Thread-187999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:49:40.341 [DEBUG] [Thread-187999] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:49:40.344 [DEBUG] [Thread-187999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:49:40.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:49:40.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:49:40.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:49:40.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:49:40.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:49:40.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:49:40.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:49:40.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:49:40.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:49:40.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.575454 -999.00  +16.20  18.27     40   +2.80 1 1 1 1 1   888    0 13.31 -24.02 ----- 18.7 18.3 177.8 36.3 21.8 -28.3 20.8 -33.2 22.6 -27.5 23.5 -29.1
2026-02-14T15:49:40.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:49:40.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:49:40.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.575454
2026-02-14T15:49:40.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:49:40.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:49:40.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:49:40.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:49:40.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:49:40.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:49:16', tmtdew=16.29, humidity=33.32, cloud=0.0, wind=30.28, temperature=16.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:48:39.226', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:49:40.369 [DEBUG] [Thread-187999] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:49:40.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-14T15:49:40.468 [DEBUG] [Thread-188002] [transport.py] [_log()] starting thread (client mode): 0xa57b27d0
2026-02-14T15:49:40.468 [DEBUG] [Thread-188002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:49:40.485 [DEBUG] [Thread-188002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:49:40.485 [INFO] [Thread-188002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:49:40.492 [DEBUG] [Thread-188002] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:49:40.493 [DEBUG] [Thread-188002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:49:40.493 [DEBUG] [Thread-188002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:49:40.493 [DEBUG] [Thread-188002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:49:40.493 [DEBUG] [Thread-188002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:49:40.493 [DEBUG] [Thread-188002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:49:40.493 [DEBUG] [Thread-188002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:49:40.493 [DEBUG] [Thread-188002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:49:40.493 [DEBUG] [Thread-188002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:49:40.493 [DEBUG] [Thread-188002] [transport.py] [_log()] client lang: <none>
2026-02-14T15:49:40.493 [DEBUG] [Thread-188002] [transport.py] [_log()] server lang: <none>
2026-02-14T15:49:40.493 [DEBUG] [Thread-188002] [transport.py] [_log()] kex follows: False
2026-02-14T15:49:40.493 [DEBUG] [Thread-188002] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:49:40.493 [DEBUG] [Thread-188002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:49:40.493 [DEBUG] [Thread-188002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:49:40.493 [DEBUG] [Thread-188002] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:49:40.493 [DEBUG] [Thread-188002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:49:40.494 [DEBUG] [Thread-188002] [transport.py] [_log()] Compression: none
2026-02-14T15:49:40.494 [DEBUG] [Thread-188002] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:49:40.554 [DEBUG] [Thread-188002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:49:40.555 [DEBUG] [Thread-188002] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:49:40.555 [DEBUG] [Thread-188002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:49:40.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:49:40.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:49:40.611 [DEBUG] [Thread-188002] [transport.py] [_log()] userauth is OK
2026-02-14T15:49:40.611 [DEBUG] [Thread-188002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:49:40.611 [DEBUG] [Thread-188002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:49:40.611 [DEBUG] [Thread-188002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:49:40.611 [DEBUG] [Thread-188002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:49:40.633 [INFO] [Thread-188002] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:49:40.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-14T15:49:40.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:49:41.439 [DEBUG] [Thread-188002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:49:41.439 [DEBUG] [Thread-188002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:49:41.488 [DEBUG] [Thread-188002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:49:41.488 [DEBUG] [Thread-188002] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:49:41.497 [DEBUG] [Thread-188002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:49:41.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:49:41.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-14T15:49:41.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-14T15:49:41.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:49:41.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:49:41.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:49:41.530 [DEBUG] [Thread-188002] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:49:45.844 [DEBUG] [Thread-188004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:49:50.102 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:49:50.103 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:50:00.894 [DEBUG] [Thread-188005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:50:11.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:50:11.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:50: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-14T15:50:13.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 49, 51), 16.16, 33.47, 0.0, 39.44, 16.94, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:50:13.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:49:51
2026-02-14T15:50:13.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:50:14.029 [DEBUG] [Thread-188006] [transport.py] [_log()] starting thread (client mode): 0xa2dec880
2026-02-14T15:50:14.029 [DEBUG] [Thread-188006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:50:14.050 [DEBUG] [Thread-188006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:50:14.050 [INFO] [Thread-188006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:50:14.052 [DEBUG] [Thread-188006] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:50:14.052 [DEBUG] [Thread-188006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:50:14.052 [DEBUG] [Thread-188006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:50:14.052 [DEBUG] [Thread-188006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:50:14.053 [DEBUG] [Thread-188006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:50:14.053 [DEBUG] [Thread-188006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:50:14.053 [DEBUG] [Thread-188006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:50:14.053 [DEBUG] [Thread-188006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:50:14.053 [DEBUG] [Thread-188006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:50:14.053 [DEBUG] [Thread-188006] [transport.py] [_log()] client lang: <none>
2026-02-14T15:50:14.053 [DEBUG] [Thread-188006] [transport.py] [_log()] server lang: <none>
2026-02-14T15:50:14.053 [DEBUG] [Thread-188006] [transport.py] [_log()] kex follows: False
2026-02-14T15:50:14.053 [DEBUG] [Thread-188006] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:50:14.053 [DEBUG] [Thread-188006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:50:14.053 [DEBUG] [Thread-188006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:50:14.053 [DEBUG] [Thread-188006] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:50:14.053 [DEBUG] [Thread-188006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:50:14.053 [DEBUG] [Thread-188006] [transport.py] [_log()] Compression: none
2026-02-14T15:50:14.053 [DEBUG] [Thread-188006] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:50:14.061 [DEBUG] [Thread-188006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:50:14.061 [DEBUG] [Thread-188006] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:50:14.061 [DEBUG] [Thread-188006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:50:14.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:50:14.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:50:14.062 [DEBUG] [Thread-188006] [transport.py] [_log()] userauth is OK
2026-02-14T15:50:14.062 [DEBUG] [Thread-188006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:50:14.062 [DEBUG] [Thread-188006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:50:14.062 [DEBUG] [Thread-188006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:50:14.062 [DEBUG] [Thread-188006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:50:14.080 [INFO] [Thread-188006] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:50:14.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:50:15.160 [DEBUG] [Thread-188006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:50:15.161 [DEBUG] [Thread-188006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:50:15.161 [DEBUG] [Thread-188006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:50:15.202 [DEBUG] [Thread-188006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:50:15.202 [DEBUG] [Thread-188006] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:50:15.205 [DEBUG] [Thread-188006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:50:15.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:50:15.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:50:15.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:50:15.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:50:15.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:50:15.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:50:15.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:50:15.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:50:15.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:50:15.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.576495 -999.00  +16.40  31.03     40   +2.90 1 1 2 1 1   888    0 12.90 -30.06 ----- 29.4 31.0 173.8 41.1 21.9 -28.2 21.2 -26.3 22.8 -25.8 23.7 -26.9
2026-02-14T15:50:15.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:50:15.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:50:15.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.576495
2026-02-14T15:50:15.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:50:15.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:50:15.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:50:15.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:50:15.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:50:15.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:49:51', tmtdew=16.16, humidity=33.47, cloud=0.0, wind=39.44, temperature=16.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:50:09.168', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:50:15.232 [DEBUG] [Thread-188006] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:50:15.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-14T15:50:15.329 [DEBUG] [Thread-188009] [transport.py] [_log()] starting thread (client mode): 0xa2dedd20
2026-02-14T15:50:15.329 [DEBUG] [Thread-188009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:50:15.343 [DEBUG] [Thread-188009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:50:15.343 [INFO] [Thread-188009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:50:15.351 [DEBUG] [Thread-188009] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:50:15.351 [DEBUG] [Thread-188009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:50:15.351 [DEBUG] [Thread-188009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:50:15.351 [DEBUG] [Thread-188009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:50:15.351 [DEBUG] [Thread-188009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:50:15.352 [DEBUG] [Thread-188009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:50:15.352 [DEBUG] [Thread-188009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:50:15.352 [DEBUG] [Thread-188009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:50:15.352 [DEBUG] [Thread-188009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:50:15.352 [DEBUG] [Thread-188009] [transport.py] [_log()] client lang: <none>
2026-02-14T15:50:15.352 [DEBUG] [Thread-188009] [transport.py] [_log()] server lang: <none>
2026-02-14T15:50:15.352 [DEBUG] [Thread-188009] [transport.py] [_log()] kex follows: False
2026-02-14T15:50:15.352 [DEBUG] [Thread-188009] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:50:15.352 [DEBUG] [Thread-188009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:50:15.353 [DEBUG] [Thread-188009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:50:15.353 [DEBUG] [Thread-188009] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:50:15.353 [DEBUG] [Thread-188009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:50:15.353 [DEBUG] [Thread-188009] [transport.py] [_log()] Compression: none
2026-02-14T15:50:15.353 [DEBUG] [Thread-188009] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:50:15.412 [DEBUG] [Thread-188009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:50:15.413 [DEBUG] [Thread-188009] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:50:15.413 [DEBUG] [Thread-188009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:50:15.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:50:15.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:50:15.471 [DEBUG] [Thread-188009] [transport.py] [_log()] userauth is OK
2026-02-14T15:50:15.471 [DEBUG] [Thread-188009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:50:15.471 [DEBUG] [Thread-188009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:50:15.471 [DEBUG] [Thread-188009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:50:15.471 [DEBUG] [Thread-188009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:50:15.490 [INFO] [Thread-188009] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:50:15.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-14T15:50:15.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:50:15.932 [DEBUG] [Thread-188011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:50:16.325 [DEBUG] [Thread-188009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:50:16.326 [DEBUG] [Thread-188009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:50:16.376 [DEBUG] [Thread-188009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:50:16.376 [DEBUG] [Thread-188009] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:50:16.385 [DEBUG] [Thread-188009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:50:16.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:50:16.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-14T15:50:16.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-14T15:50:16.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:50:16.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:50:16.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:50:16.422 [DEBUG] [Thread-188009] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:50:29.657 [DEBUG] [Thread-188012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:50:30.990 [DEBUG] [Thread-188013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:50:46.028 [DEBUG] [Thread-188014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:50:46.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:50:46.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:50:46.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-14T15:50:48.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 50, 26), 16.19, 33.42, 0.0, 39.73, 16.97, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:50:48.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:50:26
2026-02-14T15:50:48.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:50:48.800 [DEBUG] [Thread-188015] [transport.py] [_log()] starting thread (client mode): 0xa81d63e0
2026-02-14T15:50:48.800 [DEBUG] [Thread-188015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:50:48.815 [DEBUG] [Thread-188015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:50:48.815 [INFO] [Thread-188015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:50:48.818 [DEBUG] [Thread-188015] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:50:48.818 [DEBUG] [Thread-188015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:50:48.818 [DEBUG] [Thread-188015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:50:48.818 [DEBUG] [Thread-188015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:50:48.818 [DEBUG] [Thread-188015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:50:48.818 [DEBUG] [Thread-188015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:50:48.818 [DEBUG] [Thread-188015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:50:48.818 [DEBUG] [Thread-188015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:50:48.819 [DEBUG] [Thread-188015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:50:48.819 [DEBUG] [Thread-188015] [transport.py] [_log()] client lang: <none>
2026-02-14T15:50:48.819 [DEBUG] [Thread-188015] [transport.py] [_log()] server lang: <none>
2026-02-14T15:50:48.819 [DEBUG] [Thread-188015] [transport.py] [_log()] kex follows: False
2026-02-14T15:50:48.819 [DEBUG] [Thread-188015] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:50:48.819 [DEBUG] [Thread-188015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:50:48.819 [DEBUG] [Thread-188015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:50:48.819 [DEBUG] [Thread-188015] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:50:48.819 [DEBUG] [Thread-188015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:50:48.819 [DEBUG] [Thread-188015] [transport.py] [_log()] Compression: none
2026-02-14T15:50:48.819 [DEBUG] [Thread-188015] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:50:48.838 [DEBUG] [Thread-188015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:50:48.838 [DEBUG] [Thread-188015] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:50:48.839 [DEBUG] [Thread-188015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:50:48.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:50:48.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:50:48.841 [DEBUG] [Thread-188015] [transport.py] [_log()] userauth is OK
2026-02-14T15:50:48.841 [DEBUG] [Thread-188015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:50:48.841 [DEBUG] [Thread-188015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:50:48.841 [DEBUG] [Thread-188015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:50:48.841 [DEBUG] [Thread-188015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:50:48.860 [INFO] [Thread-188015] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:50:48.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:50:49.466 [DEBUG] [Thread-188015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:50:49.467 [DEBUG] [Thread-188015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:50:49.467 [DEBUG] [Thread-188015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:50:49.507 [DEBUG] [Thread-188015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:50:49.507 [DEBUG] [Thread-188015] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:50:49.510 [DEBUG] [Thread-188015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:50:49.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:50:49.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:50:49.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:50:49.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:50:49.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:50:49.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:50:49.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:50:49.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:50:49.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:50:49.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.576843 -999.00  +16.50  28.53     40   +3.00 1 1 1 1 1   888    0 12.92 -32.99 ----- 28.1 28.5 171.4 34.1 21.9 -27.8 21.1 -30.1 22.7 -25.5 23.7 -27.9
2026-02-14T15:50:49.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:50:49.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:50:49.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.576843
2026-02-14T15:50:49.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:50:49.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:50:49.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:50:49.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:50:49.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:50:49.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:50:26', tmtdew=16.19, humidity=33.42, cloud=0.0, wind=39.73, temperature=16.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:50:39.235', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:50:49.536 [DEBUG] [Thread-188015] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:50:49.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-14T15:50:49.631 [DEBUG] [Thread-188018] [transport.py] [_log()] starting thread (client mode): 0xa81d78e0
2026-02-14T15:50:49.631 [DEBUG] [Thread-188018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:50:49.646 [DEBUG] [Thread-188018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:50:49.646 [INFO] [Thread-188018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:50:49.653 [DEBUG] [Thread-188018] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:50:49.654 [DEBUG] [Thread-188018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:50:49.654 [DEBUG] [Thread-188018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:50:49.654 [DEBUG] [Thread-188018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:50:49.654 [DEBUG] [Thread-188018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:50:49.654 [DEBUG] [Thread-188018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:50:49.654 [DEBUG] [Thread-188018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:50:49.654 [DEBUG] [Thread-188018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:50:49.654 [DEBUG] [Thread-188018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:50:49.654 [DEBUG] [Thread-188018] [transport.py] [_log()] client lang: <none>
2026-02-14T15:50:49.654 [DEBUG] [Thread-188018] [transport.py] [_log()] server lang: <none>
2026-02-14T15:50:49.654 [DEBUG] [Thread-188018] [transport.py] [_log()] kex follows: False
2026-02-14T15:50:49.654 [DEBUG] [Thread-188018] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:50:49.654 [DEBUG] [Thread-188018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:50:49.654 [DEBUG] [Thread-188018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:50:49.654 [DEBUG] [Thread-188018] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:50:49.654 [DEBUG] [Thread-188018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:50:49.654 [DEBUG] [Thread-188018] [transport.py] [_log()] Compression: none
2026-02-14T15:50:49.654 [DEBUG] [Thread-188018] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:50:49.713 [DEBUG] [Thread-188018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:50:49.714 [DEBUG] [Thread-188018] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:50:49.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:50:49.715 [DEBUG] [Thread-188018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:50:49.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:50:49.769 [DEBUG] [Thread-188018] [transport.py] [_log()] userauth is OK
2026-02-14T15:50:49.770 [DEBUG] [Thread-188018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:50:49.770 [DEBUG] [Thread-188018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:50:49.770 [DEBUG] [Thread-188018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:50:49.770 [DEBUG] [Thread-188018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:50:49.788 [INFO] [Thread-188018] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:50:49.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-14T15:50:49.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:50:50.242 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:50:50.243 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:50:50.604 [DEBUG] [Thread-188018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:50:50.604 [DEBUG] [Thread-188018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:50:50.652 [DEBUG] [Thread-188018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:50:50.652 [DEBUG] [Thread-188018] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:50:50.661 [DEBUG] [Thread-188018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:50:50.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:50:50.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-14T15:50:50.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:50:50.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:50:50.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:50:50.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:50:50.698 [DEBUG] [Thread-188018] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:51:01.065 [DEBUG] [Thread-188020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:51:16.117 [DEBUG] [Thread-188021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:51:20.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:51:20.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:51:20.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-14T15:51:22.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 51, 1), 16.09, 33.6, 0.0, 39.19, 16.82, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:51:22.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:51:01
2026-02-14T15:51:23.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:51:23.359 [DEBUG] [Thread-188022] [transport.py] [_log()] starting thread (client mode): 0xa81d4d00
2026-02-14T15:51:23.359 [DEBUG] [Thread-188022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:51:23.379 [DEBUG] [Thread-188022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:51:23.379 [INFO] [Thread-188022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:51:23.382 [DEBUG] [Thread-188022] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:51:23.382 [DEBUG] [Thread-188022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:51:23.382 [DEBUG] [Thread-188022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:51:23.382 [DEBUG] [Thread-188022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:51:23.382 [DEBUG] [Thread-188022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:51:23.382 [DEBUG] [Thread-188022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:51:23.383 [DEBUG] [Thread-188022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:51:23.383 [DEBUG] [Thread-188022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:51:23.383 [DEBUG] [Thread-188022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:51:23.383 [DEBUG] [Thread-188022] [transport.py] [_log()] client lang: <none>
2026-02-14T15:51:23.383 [DEBUG] [Thread-188022] [transport.py] [_log()] server lang: <none>
2026-02-14T15:51:23.383 [DEBUG] [Thread-188022] [transport.py] [_log()] kex follows: False
2026-02-14T15:51:23.383 [DEBUG] [Thread-188022] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:51:23.383 [DEBUG] [Thread-188022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:51:23.383 [DEBUG] [Thread-188022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:51:23.383 [DEBUG] [Thread-188022] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:51:23.383 [DEBUG] [Thread-188022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:51:23.383 [DEBUG] [Thread-188022] [transport.py] [_log()] Compression: none
2026-02-14T15:51:23.383 [DEBUG] [Thread-188022] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:51:23.399 [DEBUG] [Thread-188022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:51:23.399 [DEBUG] [Thread-188022] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:51:23.400 [DEBUG] [Thread-188022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:51:23.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:51:23.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:51:23.441 [DEBUG] [Thread-188022] [transport.py] [_log()] userauth is OK
2026-02-14T15:51:23.441 [DEBUG] [Thread-188022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:51:23.441 [DEBUG] [Thread-188022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:51:23.441 [DEBUG] [Thread-188022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:51:23.441 [DEBUG] [Thread-188022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:51:23.473 [INFO] [Thread-188022] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:51:23.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:51:24.102 [DEBUG] [Thread-188022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:51:24.103 [DEBUG] [Thread-188022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:51:24.103 [DEBUG] [Thread-188022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:51:24.143 [DEBUG] [Thread-188022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:51:24.143 [DEBUG] [Thread-188022] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:51:24.145 [DEBUG] [Thread-188022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:51:24.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:51:24.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:51:24.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:51:24.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:51:24.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:51:24.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:51:24.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:51:24.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:51:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:51:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.577190 -999.00  +16.50  28.42     40   +2.90 1 1 1 1 1   888    0 12.78 -34.41 ----- 27.9 28.4 170.2 34.6 22.0 -27.5 21.2 -28.7 22.8 -26.2 23.7 -27.9
2026-02-14T15:51:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:51:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:51:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.577190
2026-02-14T15:51:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:51:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:51:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:51:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:51:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:51:24.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:51:01', tmtdew=16.09, humidity=33.6, cloud=0.0, wind=39.19, temperature=16.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:51:09.216', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:51:24.167 [DEBUG] [Thread-188022] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:51:24.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-14T15:51:24.248 [DEBUG] [Thread-188025] [transport.py] [_log()] starting thread (client mode): 0xa2dec340
2026-02-14T15:51:24.249 [DEBUG] [Thread-188025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:51:24.263 [DEBUG] [Thread-188025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:51:24.263 [INFO] [Thread-188025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:51:24.271 [DEBUG] [Thread-188025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:51:24.271 [DEBUG] [Thread-188025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:51:24.271 [DEBUG] [Thread-188025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:51:24.271 [DEBUG] [Thread-188025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:51:24.271 [DEBUG] [Thread-188025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:51:24.271 [DEBUG] [Thread-188025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:51:24.271 [DEBUG] [Thread-188025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:51:24.271 [DEBUG] [Thread-188025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:51:24.271 [DEBUG] [Thread-188025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:51:24.271 [DEBUG] [Thread-188025] [transport.py] [_log()] client lang: <none>
2026-02-14T15:51:24.271 [DEBUG] [Thread-188025] [transport.py] [_log()] server lang: <none>
2026-02-14T15:51:24.271 [DEBUG] [Thread-188025] [transport.py] [_log()] kex follows: False
2026-02-14T15:51:24.271 [DEBUG] [Thread-188025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:51:24.271 [DEBUG] [Thread-188025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:51:24.271 [DEBUG] [Thread-188025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:51:24.271 [DEBUG] [Thread-188025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:51:24.271 [DEBUG] [Thread-188025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:51:24.271 [DEBUG] [Thread-188025] [transport.py] [_log()] Compression: none
2026-02-14T15:51:24.271 [DEBUG] [Thread-188025] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:51:24.328 [DEBUG] [Thread-188025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:51:24.328 [DEBUG] [Thread-188025] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:51:24.329 [DEBUG] [Thread-188025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:51:24.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:51:24.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:51:24.387 [DEBUG] [Thread-188025] [transport.py] [_log()] userauth is OK
2026-02-14T15:51:24.388 [DEBUG] [Thread-188025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:51:24.388 [DEBUG] [Thread-188025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:51:24.388 [DEBUG] [Thread-188025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:51:24.388 [DEBUG] [Thread-188025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:51:24.409 [INFO] [Thread-188025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:51:24.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-14T15:51:24.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:51:25.235 [DEBUG] [Thread-188025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:51:25.236 [DEBUG] [Thread-188025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:51:25.283 [DEBUG] [Thread-188025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:51:25.283 [DEBUG] [Thread-188025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:51:25.291 [DEBUG] [Thread-188025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:51:25.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:51:25.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:51:25.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-14T15:51:25.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:51:25.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:51:25.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:51:25.324 [DEBUG] [Thread-188025] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:51:29.697 [DEBUG] [Thread-188027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:51:31.156 [DEBUG] [Thread-188028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:51:46.206 [DEBUG] [Thread-188029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:51:50.385 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:51:50.386 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:51:55.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:51:55.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:51:55.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T15:51:57.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 51, 36), 16.98, 31.87, 0.0, 35.5, 17.94, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:51:57.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:51:36
2026-02-14T15:51:57.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:51:57.697 [DEBUG] [Thread-188030] [transport.py] [_log()] starting thread (client mode): 0xa81d5720
2026-02-14T15:51:57.697 [DEBUG] [Thread-188030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:51:57.717 [DEBUG] [Thread-188030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:51:57.718 [INFO] [Thread-188030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:51:57.721 [DEBUG] [Thread-188030] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:51:57.721 [DEBUG] [Thread-188030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:51:57.721 [DEBUG] [Thread-188030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:51:57.721 [DEBUG] [Thread-188030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:51:57.721 [DEBUG] [Thread-188030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:51:57.721 [DEBUG] [Thread-188030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:51:57.721 [DEBUG] [Thread-188030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:51:57.721 [DEBUG] [Thread-188030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:51:57.721 [DEBUG] [Thread-188030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:51:57.721 [DEBUG] [Thread-188030] [transport.py] [_log()] client lang: <none>
2026-02-14T15:51:57.721 [DEBUG] [Thread-188030] [transport.py] [_log()] server lang: <none>
2026-02-14T15:51:57.721 [DEBUG] [Thread-188030] [transport.py] [_log()] kex follows: False
2026-02-14T15:51:57.721 [DEBUG] [Thread-188030] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:51:57.721 [DEBUG] [Thread-188030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:51:57.721 [DEBUG] [Thread-188030] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:51:57.721 [DEBUG] [Thread-188030] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:51:57.721 [DEBUG] [Thread-188030] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:51:57.721 [DEBUG] [Thread-188030] [transport.py] [_log()] Compression: none
2026-02-14T15:51:57.721 [DEBUG] [Thread-188030] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:51:57.738 [DEBUG] [Thread-188030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:51:57.739 [DEBUG] [Thread-188030] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:51:57.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:51:57.740 [DEBUG] [Thread-188030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:51:57.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:51:57.742 [DEBUG] [Thread-188030] [transport.py] [_log()] userauth is OK
2026-02-14T15:51:57.742 [DEBUG] [Thread-188030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:51:57.743 [DEBUG] [Thread-188030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:51:57.743 [DEBUG] [Thread-188030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:51:57.743 [DEBUG] [Thread-188030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:51:57.767 [INFO] [Thread-188030] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:51:57.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:51:58.352 [DEBUG] [Thread-188030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:51:58.352 [DEBUG] [Thread-188030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:51:58.352 [DEBUG] [Thread-188030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:51:58.392 [DEBUG] [Thread-188030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:51:58.393 [DEBUG] [Thread-188030] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:51:58.396 [DEBUG] [Thread-188030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:51:58.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:51:58.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:51:58.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:51:58.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:51:58.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:51:58.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:51:58.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:51:58.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:51:58.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:51:58.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.577537 -999.00  +16.80  15.75     39   +3.00 1 1 1 1 1   888    0 13.00 -30.72 ----- 24.3 15.8 162.4 34.5 22.1 -26.5 21.3 -25.1 22.9 -24.9 23.9 -26.4
2026-02-14T15:51:58.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:51:58.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:51:58.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.577537
2026-02-14T15:51:58.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:51:58.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:51:58.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:51:58.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:51:58.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:51:58.426 [DEBUG] [Thread-188030] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:51:58.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:51:36', tmtdew=16.98, humidity=31.87, cloud=0.0, wind=35.5, 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-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:51:39.197', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:51:58.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-14T15:51:58.520 [DEBUG] [Thread-188033] [transport.py] [_log()] starting thread (client mode): 0xa81d7eb0
2026-02-14T15:51:58.520 [DEBUG] [Thread-188033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:51:58.534 [DEBUG] [Thread-188033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:51:58.534 [INFO] [Thread-188033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:51:58.541 [DEBUG] [Thread-188033] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:51:58.542 [DEBUG] [Thread-188033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:51:58.542 [DEBUG] [Thread-188033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:51:58.542 [DEBUG] [Thread-188033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:51:58.542 [DEBUG] [Thread-188033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:51:58.542 [DEBUG] [Thread-188033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:51:58.542 [DEBUG] [Thread-188033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:51:58.542 [DEBUG] [Thread-188033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:51:58.542 [DEBUG] [Thread-188033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:51:58.542 [DEBUG] [Thread-188033] [transport.py] [_log()] client lang: <none>
2026-02-14T15:51:58.542 [DEBUG] [Thread-188033] [transport.py] [_log()] server lang: <none>
2026-02-14T15:51:58.542 [DEBUG] [Thread-188033] [transport.py] [_log()] kex follows: False
2026-02-14T15:51:58.543 [DEBUG] [Thread-188033] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:51:58.543 [DEBUG] [Thread-188033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:51:58.543 [DEBUG] [Thread-188033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:51:58.543 [DEBUG] [Thread-188033] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:51:58.543 [DEBUG] [Thread-188033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:51:58.543 [DEBUG] [Thread-188033] [transport.py] [_log()] Compression: none
2026-02-14T15:51:58.543 [DEBUG] [Thread-188033] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:51:58.598 [DEBUG] [Thread-188033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:51:58.599 [DEBUG] [Thread-188033] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:51:58.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:51:58.600 [DEBUG] [Thread-188033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:51:58.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:51:58.655 [DEBUG] [Thread-188033] [transport.py] [_log()] userauth is OK
2026-02-14T15:51:58.656 [DEBUG] [Thread-188033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:51:58.656 [DEBUG] [Thread-188033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:51:58.656 [DEBUG] [Thread-188033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:51:58.656 [DEBUG] [Thread-188033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:51:58.675 [INFO] [Thread-188033] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:51:58.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-14T15:51:58.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:51:59.465 [DEBUG] [Thread-188033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:51:59.465 [DEBUG] [Thread-188033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:51:59.513 [DEBUG] [Thread-188033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:51:59.514 [DEBUG] [Thread-188033] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:51:59.523 [DEBUG] [Thread-188033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:51:59.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:51:59.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-14T15:51:59.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-14T15:51:59.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:51:59.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:51:59.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:51:59.559 [DEBUG] [Thread-188033] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:52:01.237 [DEBUG] [Thread-188035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:52:16.299 [DEBUG] [Thread-188036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:52:29.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:52:29.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:52:29.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-14T15:52:29.729 [DEBUG] [Thread-188037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:52:31.339 [DEBUG] [Thread-188038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:52:31.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 52, 12), 16.13, 33.5, 0.0, 33.15, 16.89, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:52:31.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:52:12
2026-02-14T15:52:31.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:52:32.138 [DEBUG] [Thread-188039] [transport.py] [_log()] starting thread (client mode): 0xa81d6050
2026-02-14T15:52:32.138 [DEBUG] [Thread-188039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:52:32.158 [DEBUG] [Thread-188039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:52:32.158 [INFO] [Thread-188039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:52:32.161 [DEBUG] [Thread-188039] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:52:32.161 [DEBUG] [Thread-188039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:52:32.161 [DEBUG] [Thread-188039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:52:32.161 [DEBUG] [Thread-188039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:52:32.161 [DEBUG] [Thread-188039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:52:32.161 [DEBUG] [Thread-188039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:52:32.161 [DEBUG] [Thread-188039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:52:32.161 [DEBUG] [Thread-188039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:52:32.161 [DEBUG] [Thread-188039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:52:32.161 [DEBUG] [Thread-188039] [transport.py] [_log()] client lang: <none>
2026-02-14T15:52:32.161 [DEBUG] [Thread-188039] [transport.py] [_log()] server lang: <none>
2026-02-14T15:52:32.161 [DEBUG] [Thread-188039] [transport.py] [_log()] kex follows: False
2026-02-14T15:52:32.161 [DEBUG] [Thread-188039] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:52:32.162 [DEBUG] [Thread-188039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:52:32.162 [DEBUG] [Thread-188039] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:52:32.162 [DEBUG] [Thread-188039] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:52:32.162 [DEBUG] [Thread-188039] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:52:32.162 [DEBUG] [Thread-188039] [transport.py] [_log()] Compression: none
2026-02-14T15:52:32.162 [DEBUG] [Thread-188039] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:52:32.179 [DEBUG] [Thread-188039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:52:32.180 [DEBUG] [Thread-188039] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:52:32.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:52:32.181 [DEBUG] [Thread-188039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:52:32.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:52:32.184 [DEBUG] [Thread-188039] [transport.py] [_log()] userauth is OK
2026-02-14T15:52:32.184 [DEBUG] [Thread-188039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:52:32.184 [DEBUG] [Thread-188039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:52:32.184 [DEBUG] [Thread-188039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:52:32.184 [DEBUG] [Thread-188039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:52:32.221 [INFO] [Thread-188039] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:52:32.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:52:32.870 [DEBUG] [Thread-188039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:52:32.870 [DEBUG] [Thread-188039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:52:32.870 [DEBUG] [Thread-188039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:52:32.911 [DEBUG] [Thread-188039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:52:32.911 [DEBUG] [Thread-188039] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:52:32.914 [DEBUG] [Thread-188039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:52:32.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:52:32.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:52:32.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:52:32.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:52:32.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:52:32.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:52:32.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:52:32.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:52:32.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:52:32.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.577885 -999.00  +17.10  26.67     38   +2.90 1 1 1 1 1   888    0 12.80 -28.72 ----- 30.5 26.7 183.0 38.2 22.2 -29.5 21.5 -27.3 23.1 -25.8 24.0 -27.1
2026-02-14T15:52:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:52:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:52:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.577885
2026-02-14T15:52:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:52:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:52:32.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:52:32.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:52:32.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:52:32.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:52:12', tmtdew=16.13, humidity=33.5, cloud=0.0, wind=33.15, temperature=16.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:52:09.264', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:52:32.936 [DEBUG] [Thread-188039] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:52:33.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-14T15:52:33.032 [DEBUG] [Thread-188042] [transport.py] [_log()] starting thread (client mode): 0xa2d22500
2026-02-14T15:52:33.032 [DEBUG] [Thread-188042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:52:33.046 [DEBUG] [Thread-188042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:52:33.047 [INFO] [Thread-188042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:52:33.054 [DEBUG] [Thread-188042] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:52:33.054 [DEBUG] [Thread-188042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:52:33.054 [DEBUG] [Thread-188042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:52:33.054 [DEBUG] [Thread-188042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:52:33.054 [DEBUG] [Thread-188042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:52:33.054 [DEBUG] [Thread-188042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:52:33.055 [DEBUG] [Thread-188042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:52:33.055 [DEBUG] [Thread-188042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:52:33.055 [DEBUG] [Thread-188042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:52:33.055 [DEBUG] [Thread-188042] [transport.py] [_log()] client lang: <none>
2026-02-14T15:52:33.055 [DEBUG] [Thread-188042] [transport.py] [_log()] server lang: <none>
2026-02-14T15:52:33.055 [DEBUG] [Thread-188042] [transport.py] [_log()] kex follows: False
2026-02-14T15:52:33.055 [DEBUG] [Thread-188042] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:52:33.055 [DEBUG] [Thread-188042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:52:33.055 [DEBUG] [Thread-188042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:52:33.055 [DEBUG] [Thread-188042] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:52:33.055 [DEBUG] [Thread-188042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:52:33.055 [DEBUG] [Thread-188042] [transport.py] [_log()] Compression: none
2026-02-14T15:52:33.055 [DEBUG] [Thread-188042] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:52:33.113 [DEBUG] [Thread-188042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:52:33.114 [DEBUG] [Thread-188042] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:52:33.114 [DEBUG] [Thread-188042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:52:33.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:52:33.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:52:33.170 [DEBUG] [Thread-188042] [transport.py] [_log()] userauth is OK
2026-02-14T15:52:33.170 [DEBUG] [Thread-188042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:52:33.170 [DEBUG] [Thread-188042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:52:33.171 [DEBUG] [Thread-188042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:52:33.171 [DEBUG] [Thread-188042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:52:33.190 [INFO] [Thread-188042] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:52:33.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-14T15:52:33.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:52:34.018 [DEBUG] [Thread-188042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:52:34.018 [DEBUG] [Thread-188042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:52:34.066 [DEBUG] [Thread-188042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:52:34.067 [DEBUG] [Thread-188042] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:52:34.076 [DEBUG] [Thread-188042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:52:34.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:52:34.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-14T15:52:34.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-14T15:52:34.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:52:34.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:52:34.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:52:34.112 [DEBUG] [Thread-188042] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:52:46.379 [DEBUG] [Thread-188044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:52:50.528 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:52:50.529 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:53:01.440 [DEBUG] [Thread-188045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:53:04.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:53:04.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:53:04.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-14T15:53:06.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 52, 47), 16.53, 32.63, 0.0, 29.94, 17.17, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:53:06.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:52:47
2026-02-14T15:53:06.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:53:06.629 [DEBUG] [Thread-188046] [transport.py] [_log()] starting thread (client mode): 0xa2d23d00
2026-02-14T15:53:06.629 [DEBUG] [Thread-188046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:53:06.650 [DEBUG] [Thread-188046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:53:06.650 [INFO] [Thread-188046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:53:06.653 [DEBUG] [Thread-188046] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:53:06.653 [DEBUG] [Thread-188046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:53:06.653 [DEBUG] [Thread-188046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:53:06.653 [DEBUG] [Thread-188046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:53:06.653 [DEBUG] [Thread-188046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:53:06.653 [DEBUG] [Thread-188046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:53:06.653 [DEBUG] [Thread-188046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:53:06.653 [DEBUG] [Thread-188046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:53:06.654 [DEBUG] [Thread-188046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:53:06.654 [DEBUG] [Thread-188046] [transport.py] [_log()] client lang: <none>
2026-02-14T15:53:06.654 [DEBUG] [Thread-188046] [transport.py] [_log()] server lang: <none>
2026-02-14T15:53:06.654 [DEBUG] [Thread-188046] [transport.py] [_log()] kex follows: False
2026-02-14T15:53:06.654 [DEBUG] [Thread-188046] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:53:06.654 [DEBUG] [Thread-188046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:53:06.654 [DEBUG] [Thread-188046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:53:06.654 [DEBUG] [Thread-188046] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:53:06.654 [DEBUG] [Thread-188046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:53:06.654 [DEBUG] [Thread-188046] [transport.py] [_log()] Compression: none
2026-02-14T15:53:06.654 [DEBUG] [Thread-188046] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:53:06.670 [DEBUG] [Thread-188046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:53:06.671 [DEBUG] [Thread-188046] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:53:06.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:53:06.672 [DEBUG] [Thread-188046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:53:06.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:53:06.674 [DEBUG] [Thread-188046] [transport.py] [_log()] userauth is OK
2026-02-14T15:53:06.674 [DEBUG] [Thread-188046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:53:06.674 [DEBUG] [Thread-188046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:53:06.674 [DEBUG] [Thread-188046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:53:06.674 [DEBUG] [Thread-188046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:53:06.697 [INFO] [Thread-188046] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:53:06.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:53:07.323 [DEBUG] [Thread-188046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:53:07.323 [DEBUG] [Thread-188046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:53:07.323 [DEBUG] [Thread-188046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:53:07.364 [DEBUG] [Thread-188046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:53:07.364 [DEBUG] [Thread-188046] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:53:07.366 [DEBUG] [Thread-188046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:53:07.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:53:07.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:53:07.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:53:07.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:53:07.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:53:07.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:53:07.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:53:07.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:53:07.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:53:07.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.578232 -999.00  +16.70  27.58     39   +2.90 1 1 1 1 1   888    0 13.30 -24.34 ----- 31.5 27.6 171.2 38.4 22.1 -28.0 21.1 -28.8 22.9 -25.3 23.9 -27.7
2026-02-14T15:53:07.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:53:07.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:53:07.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.578232
2026-02-14T15:53:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:53:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:53:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:53:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:53:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:53:07.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:52:47', tmtdew=16.53, humidity=32.63, cloud=0.0, wind=29.94, temperature=17.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:52:39.245', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:53:07.387 [DEBUG] [Thread-188046] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:53:07.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-14T15:53:07.471 [DEBUG] [Thread-188049] [transport.py] [_log()] starting thread (client mode): 0xa81d7d00
2026-02-14T15:53:07.471 [DEBUG] [Thread-188049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:53:07.489 [DEBUG] [Thread-188049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:53:07.489 [INFO] [Thread-188049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:53:07.497 [DEBUG] [Thread-188049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:53:07.497 [DEBUG] [Thread-188049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:53:07.497 [DEBUG] [Thread-188049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:53:07.497 [DEBUG] [Thread-188049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:53:07.497 [DEBUG] [Thread-188049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:53:07.497 [DEBUG] [Thread-188049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:53:07.497 [DEBUG] [Thread-188049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:53:07.497 [DEBUG] [Thread-188049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:53:07.497 [DEBUG] [Thread-188049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:53:07.497 [DEBUG] [Thread-188049] [transport.py] [_log()] client lang: <none>
2026-02-14T15:53:07.497 [DEBUG] [Thread-188049] [transport.py] [_log()] server lang: <none>
2026-02-14T15:53:07.498 [DEBUG] [Thread-188049] [transport.py] [_log()] kex follows: False
2026-02-14T15:53:07.498 [DEBUG] [Thread-188049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:53:07.498 [DEBUG] [Thread-188049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:53:07.498 [DEBUG] [Thread-188049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:53:07.498 [DEBUG] [Thread-188049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:53:07.498 [DEBUG] [Thread-188049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:53:07.498 [DEBUG] [Thread-188049] [transport.py] [_log()] Compression: none
2026-02-14T15:53:07.498 [DEBUG] [Thread-188049] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:53:07.561 [DEBUG] [Thread-188049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:53:07.562 [DEBUG] [Thread-188049] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:53:07.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:53:07.563 [DEBUG] [Thread-188049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:53:07.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:53:07.618 [DEBUG] [Thread-188049] [transport.py] [_log()] userauth is OK
2026-02-14T15:53:07.618 [DEBUG] [Thread-188049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:53:07.618 [DEBUG] [Thread-188049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:53:07.618 [DEBUG] [Thread-188049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:53:07.618 [DEBUG] [Thread-188049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:53:07.637 [INFO] [Thread-188049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:53:07.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-14T15:53:07.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:53:08.512 [DEBUG] [Thread-188049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:53:08.512 [DEBUG] [Thread-188049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:53:08.564 [DEBUG] [Thread-188049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:53:08.564 [DEBUG] [Thread-188049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:53:08.573 [DEBUG] [Thread-188049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:53:08.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:53:08.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')
2026-02-14T15:53:08.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-14T15:53:08.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:53:08.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:53:08.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:53:08.611 [DEBUG] [Thread-188049] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:53:16.474 [DEBUG] [Thread-188051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:53:29.772 [DEBUG] [Thread-188052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:53:31.520 [DEBUG] [Thread-188053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:53:38.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:53:38.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:53:38.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-14T15:53:40.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 53, 22), 16.56, 32.57, 0.0, 28.88, 17.22, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:53:40.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:53:22
2026-02-14T15:53:40.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:53:41.063 [DEBUG] [Thread-188054] [transport.py] [_log()] starting thread (client mode): 0xa2dc3c10
2026-02-14T15:53:41.063 [DEBUG] [Thread-188054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:53:41.083 [DEBUG] [Thread-188054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:53:41.083 [INFO] [Thread-188054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:53:41.086 [DEBUG] [Thread-188054] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:53:41.086 [DEBUG] [Thread-188054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:53:41.087 [DEBUG] [Thread-188054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:53:41.087 [DEBUG] [Thread-188054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:53:41.087 [DEBUG] [Thread-188054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:53:41.087 [DEBUG] [Thread-188054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:53:41.087 [DEBUG] [Thread-188054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:53:41.087 [DEBUG] [Thread-188054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:53:41.087 [DEBUG] [Thread-188054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:53:41.087 [DEBUG] [Thread-188054] [transport.py] [_log()] client lang: <none>
2026-02-14T15:53:41.087 [DEBUG] [Thread-188054] [transport.py] [_log()] server lang: <none>
2026-02-14T15:53:41.087 [DEBUG] [Thread-188054] [transport.py] [_log()] kex follows: False
2026-02-14T15:53:41.087 [DEBUG] [Thread-188054] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:53:41.088 [DEBUG] [Thread-188054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:53:41.088 [DEBUG] [Thread-188054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:53:41.088 [DEBUG] [Thread-188054] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:53:41.088 [DEBUG] [Thread-188054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:53:41.088 [DEBUG] [Thread-188054] [transport.py] [_log()] Compression: none
2026-02-14T15:53:41.088 [DEBUG] [Thread-188054] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:53:41.105 [DEBUG] [Thread-188054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:53:41.105 [DEBUG] [Thread-188054] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:53:41.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:53:41.106 [DEBUG] [Thread-188054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:53:41.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:53:41.108 [DEBUG] [Thread-188054] [transport.py] [_log()] userauth is OK
2026-02-14T15:53:41.108 [DEBUG] [Thread-188054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:53:41.108 [DEBUG] [Thread-188054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:53:41.109 [DEBUG] [Thread-188054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:53:41.109 [DEBUG] [Thread-188054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:53:41.133 [INFO] [Thread-188054] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:53:41.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:53:41.722 [DEBUG] [Thread-188054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:53:41.722 [DEBUG] [Thread-188054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:53:41.722 [DEBUG] [Thread-188054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:53:41.762 [DEBUG] [Thread-188054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:53:41.763 [DEBUG] [Thread-188054] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:53:41.766 [DEBUG] [Thread-188054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:53:41.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:53:41.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:53:41.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:53:41.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:53:41.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:53:41.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:53:41.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:53:41.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:53:41.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:53:41.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.578579 -999.00  +16.60  26.47     39   +2.90 1 1 1 1 1   888    0 13.12 -22.15 ----- 23.4 26.5 166.8 39.1 21.9 -28.5 20.9 -30.5 22.7 -26.7 23.6 -28.6
2026-02-14T15:53:41.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:53:41.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:53:41.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.578579
2026-02-14T15:53:41.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:53:41.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:53:41.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:53:41.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:53:41.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:53:41.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:53:22', tmtdew=16.56, humidity=32.57, cloud=0.0, wind=28.88, temperature=17.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:53:09.226', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:53:41.795 [DEBUG] [Thread-188054] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:53:41.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-14T15:53:41.884 [DEBUG] [Thread-188057] [transport.py] [_log()] starting thread (client mode): 0xa2dc0a60
2026-02-14T15:53:41.884 [DEBUG] [Thread-188057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:53:41.899 [DEBUG] [Thread-188057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:53:41.899 [INFO] [Thread-188057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:53:41.907 [DEBUG] [Thread-188057] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:53:41.907 [DEBUG] [Thread-188057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:53:41.908 [DEBUG] [Thread-188057] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:53:41.908 [DEBUG] [Thread-188057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:53:41.908 [DEBUG] [Thread-188057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:53:41.908 [DEBUG] [Thread-188057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:53:41.908 [DEBUG] [Thread-188057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:53:41.908 [DEBUG] [Thread-188057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:53:41.908 [DEBUG] [Thread-188057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:53:41.908 [DEBUG] [Thread-188057] [transport.py] [_log()] client lang: <none>
2026-02-14T15:53:41.908 [DEBUG] [Thread-188057] [transport.py] [_log()] server lang: <none>
2026-02-14T15:53:41.909 [DEBUG] [Thread-188057] [transport.py] [_log()] kex follows: False
2026-02-14T15:53:41.909 [DEBUG] [Thread-188057] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:53:41.909 [DEBUG] [Thread-188057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:53:41.909 [DEBUG] [Thread-188057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:53:41.909 [DEBUG] [Thread-188057] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:53:41.909 [DEBUG] [Thread-188057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:53:41.909 [DEBUG] [Thread-188057] [transport.py] [_log()] Compression: none
2026-02-14T15:53:41.909 [DEBUG] [Thread-188057] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:53:41.969 [DEBUG] [Thread-188057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:53:41.970 [DEBUG] [Thread-188057] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:53:41.971 [DEBUG] [Thread-188057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:53:41.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:53:41.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:53:42.024 [DEBUG] [Thread-188057] [transport.py] [_log()] userauth is OK
2026-02-14T15:53:42.025 [DEBUG] [Thread-188057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:53:42.025 [DEBUG] [Thread-188057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:53:42.025 [DEBUG] [Thread-188057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:53:42.025 [DEBUG] [Thread-188057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:53:42.047 [INFO] [Thread-188057] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:53:42.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-14T15:53:42.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:53:42.852 [DEBUG] [Thread-188057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:53:42.853 [DEBUG] [Thread-188057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:53:42.901 [DEBUG] [Thread-188057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:53:42.901 [DEBUG] [Thread-188057] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:53:42.910 [DEBUG] [Thread-188057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:53:42.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:53:42.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-14T15:53:42.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-14T15:53:42.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:53:42.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:53:42.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:53:42.942 [DEBUG] [Thread-188057] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:53:46.558 [DEBUG] [Thread-188059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:53:50.672 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:53:50.674 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:54:01.613 [DEBUG] [Thread-188060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:54:12.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:54:12.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:54:12.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-14T15:54:14.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 53, 57), 16.39, 33.24, 0.0, 36.52, 17.28, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:54:14.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:53:57
2026-02-14T15:54:15.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:54:15.323 [DEBUG] [Thread-188061] [transport.py] [_log()] starting thread (client mode): 0xa81d6860
2026-02-14T15:54:15.323 [DEBUG] [Thread-188061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:54:15.345 [DEBUG] [Thread-188061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:54:15.345 [INFO] [Thread-188061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:54:15.348 [DEBUG] [Thread-188061] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:54:15.348 [DEBUG] [Thread-188061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:54:15.348 [DEBUG] [Thread-188061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:54:15.349 [DEBUG] [Thread-188061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:54:15.349 [DEBUG] [Thread-188061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:54:15.349 [DEBUG] [Thread-188061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:54:15.349 [DEBUG] [Thread-188061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:54:15.349 [DEBUG] [Thread-188061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:54:15.349 [DEBUG] [Thread-188061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:54:15.349 [DEBUG] [Thread-188061] [transport.py] [_log()] client lang: <none>
2026-02-14T15:54:15.349 [DEBUG] [Thread-188061] [transport.py] [_log()] server lang: <none>
2026-02-14T15:54:15.349 [DEBUG] [Thread-188061] [transport.py] [_log()] kex follows: False
2026-02-14T15:54:15.349 [DEBUG] [Thread-188061] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:54:15.349 [DEBUG] [Thread-188061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:54:15.350 [DEBUG] [Thread-188061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:54:15.350 [DEBUG] [Thread-188061] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:54:15.350 [DEBUG] [Thread-188061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:54:15.350 [DEBUG] [Thread-188061] [transport.py] [_log()] Compression: none
2026-02-14T15:54:15.350 [DEBUG] [Thread-188061] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:54:15.368 [DEBUG] [Thread-188061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:54:15.368 [DEBUG] [Thread-188061] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:54:15.369 [DEBUG] [Thread-188061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:54:15.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:54:15.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:54:15.371 [DEBUG] [Thread-188061] [transport.py] [_log()] userauth is OK
2026-02-14T15:54:15.371 [DEBUG] [Thread-188061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:54:15.371 [DEBUG] [Thread-188061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:54:15.371 [DEBUG] [Thread-188061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:54:15.371 [DEBUG] [Thread-188061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:54:15.396 [INFO] [Thread-188061] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:54:15.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:54:16.036 [DEBUG] [Thread-188061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:54:16.036 [DEBUG] [Thread-188061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:54:16.037 [DEBUG] [Thread-188061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:54:16.077 [DEBUG] [Thread-188061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:54:16.078 [DEBUG] [Thread-188061] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:54:16.081 [DEBUG] [Thread-188061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:54:16.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:54:16.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:54:16.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:54:16.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:54:16.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:54:16.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:54:16.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:54:16.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:54:16.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:54:16.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.578926 -999.00  +16.40  30.59     40   +2.90 1 1 2 1 1   888    0 12.97 -22.93 ----- 26.4 30.6 152.7 35.2 21.9 -27.8 21.3 -27.3 22.7 -26.8 23.7 -28.4
2026-02-14T15:54:16.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:54:16.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:54:16.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.578926
2026-02-14T15:54:16.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:54:16.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:54:16.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:54:16.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:54:16.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:54:16.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:53:57', tmtdew=16.39, humidity=33.24, cloud=0.0, wind=36.52, temperature=17.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:53:39.206', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:54:16.109 [DEBUG] [Thread-188061] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:54:16.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-14T15:54:16.201 [DEBUG] [Thread-188064] [transport.py] [_log()] starting thread (client mode): 0xa81d69b0
2026-02-14T15:54:16.201 [DEBUG] [Thread-188064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:54:16.216 [DEBUG] [Thread-188064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:54:16.216 [INFO] [Thread-188064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:54:16.223 [DEBUG] [Thread-188064] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:54:16.224 [DEBUG] [Thread-188064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:54:16.224 [DEBUG] [Thread-188064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:54:16.224 [DEBUG] [Thread-188064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:54:16.224 [DEBUG] [Thread-188064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:54:16.224 [DEBUG] [Thread-188064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:54:16.224 [DEBUG] [Thread-188064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:54:16.225 [DEBUG] [Thread-188064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:54:16.225 [DEBUG] [Thread-188064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:54:16.225 [DEBUG] [Thread-188064] [transport.py] [_log()] client lang: <none>
2026-02-14T15:54:16.225 [DEBUG] [Thread-188064] [transport.py] [_log()] server lang: <none>
2026-02-14T15:54:16.225 [DEBUG] [Thread-188064] [transport.py] [_log()] kex follows: False
2026-02-14T15:54:16.225 [DEBUG] [Thread-188064] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:54:16.225 [DEBUG] [Thread-188064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:54:16.225 [DEBUG] [Thread-188064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:54:16.226 [DEBUG] [Thread-188064] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:54:16.226 [DEBUG] [Thread-188064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:54:16.226 [DEBUG] [Thread-188064] [transport.py] [_log()] Compression: none
2026-02-14T15:54:16.226 [DEBUG] [Thread-188064] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:54:16.285 [DEBUG] [Thread-188064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:54:16.285 [DEBUG] [Thread-188064] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:54:16.286 [DEBUG] [Thread-188064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:54:16.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:54:16.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:54:16.344 [DEBUG] [Thread-188064] [transport.py] [_log()] userauth is OK
2026-02-14T15:54:16.344 [DEBUG] [Thread-188064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:54:16.345 [DEBUG] [Thread-188064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:54:16.345 [DEBUG] [Thread-188064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:54:16.345 [DEBUG] [Thread-188064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:54:16.363 [INFO] [Thread-188064] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:54:16.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-14T15:54:16.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:54:16.649 [DEBUG] [Thread-188066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:54:17.185 [DEBUG] [Thread-188064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:54:17.185 [DEBUG] [Thread-188064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:54:17.233 [DEBUG] [Thread-188064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:54:17.234 [DEBUG] [Thread-188064] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:54:17.243 [DEBUG] [Thread-188064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:54:17.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:54:17.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-14T15:54: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-14T15:54:17.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:54:17.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:54:17.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:54:17.280 [DEBUG] [Thread-188064] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:54:29.840 [DEBUG] [Thread-188067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:54:31.700 [DEBUG] [Thread-188068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:54:46.737 [DEBUG] [Thread-188069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:54:47.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:54:47.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:54:47.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-14T15:54:49.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 54, 32), 16.16, 33.68, 0.0, 33.44, 17.04, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:54:49.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:54:32
2026-02-14T15:54:49.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:54:49.611 [DEBUG] [Thread-188070] [transport.py] [_log()] starting thread (client mode): 0xa81d7370
2026-02-14T15:54:49.612 [DEBUG] [Thread-188070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:54:49.630 [DEBUG] [Thread-188070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:54:49.630 [INFO] [Thread-188070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:54:49.634 [DEBUG] [Thread-188070] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:54:49.634 [DEBUG] [Thread-188070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:54:49.634 [DEBUG] [Thread-188070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:54:49.634 [DEBUG] [Thread-188070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:54:49.634 [DEBUG] [Thread-188070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:54:49.634 [DEBUG] [Thread-188070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:54:49.634 [DEBUG] [Thread-188070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:54:49.634 [DEBUG] [Thread-188070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:54:49.634 [DEBUG] [Thread-188070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:54:49.634 [DEBUG] [Thread-188070] [transport.py] [_log()] client lang: <none>
2026-02-14T15:54:49.634 [DEBUG] [Thread-188070] [transport.py] [_log()] server lang: <none>
2026-02-14T15:54:49.634 [DEBUG] [Thread-188070] [transport.py] [_log()] kex follows: False
2026-02-14T15:54:49.634 [DEBUG] [Thread-188070] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:54:49.634 [DEBUG] [Thread-188070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:54:49.634 [DEBUG] [Thread-188070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:54:49.634 [DEBUG] [Thread-188070] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:54:49.634 [DEBUG] [Thread-188070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:54:49.634 [DEBUG] [Thread-188070] [transport.py] [_log()] Compression: none
2026-02-14T15:54:49.634 [DEBUG] [Thread-188070] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:54:49.650 [DEBUG] [Thread-188070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:54:49.650 [DEBUG] [Thread-188070] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:54:49.651 [DEBUG] [Thread-188070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:54:49.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:54:49.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:54:49.652 [DEBUG] [Thread-188070] [transport.py] [_log()] userauth is OK
2026-02-14T15:54:49.653 [DEBUG] [Thread-188070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:54:49.653 [DEBUG] [Thread-188070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:54:49.653 [DEBUG] [Thread-188070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:54:49.653 [DEBUG] [Thread-188070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:54:49.679 [INFO] [Thread-188070] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:54:49.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:54:50.340 [DEBUG] [Thread-188070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:54:50.340 [DEBUG] [Thread-188070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:54:50.340 [DEBUG] [Thread-188070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:54:50.381 [DEBUG] [Thread-188070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:54:50.382 [DEBUG] [Thread-188070] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:54:50.385 [DEBUG] [Thread-188070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:54:50.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:54:50.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:54:50.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:54:50.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:54:50.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:54:50.410 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:54:50.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:54:50.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:54:50.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:54:50.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.579273 -999.00  +16.30  24.04     40   +2.90 1 1 1 1 1   888    0 12.81 -22.91 ----- 27.4 24.0 160.7 41.5 21.9 -27.8 21.2 -27.9 22.7 -25.2 23.7 -26.8
2026-02-14T15:54:50.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:54:50.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:54:50.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.579273
2026-02-14T15:54:50.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:54:50.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:54:50.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:54:50.413 [DEBUG] [Thread-188070] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:54:50.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:54:50.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:54:50.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:54:32', tmtdew=16.16, humidity=33.68, cloud=0.0, wind=33.44, temperature=17.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:54:09.187', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:54:50.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-14T15:54:50.510 [DEBUG] [Thread-188073] [transport.py] [_log()] starting thread (client mode): 0xa81d4b80
2026-02-14T15:54:50.510 [DEBUG] [Thread-188073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:54:50.525 [DEBUG] [Thread-188073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:54:50.525 [INFO] [Thread-188073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:54:50.533 [DEBUG] [Thread-188073] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:54:50.533 [DEBUG] [Thread-188073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:54:50.533 [DEBUG] [Thread-188073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:54:50.533 [DEBUG] [Thread-188073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:54:50.533 [DEBUG] [Thread-188073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:54:50.533 [DEBUG] [Thread-188073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:54:50.533 [DEBUG] [Thread-188073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:54:50.533 [DEBUG] [Thread-188073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:54:50.533 [DEBUG] [Thread-188073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:54:50.533 [DEBUG] [Thread-188073] [transport.py] [_log()] client lang: <none>
2026-02-14T15:54:50.533 [DEBUG] [Thread-188073] [transport.py] [_log()] server lang: <none>
2026-02-14T15:54:50.533 [DEBUG] [Thread-188073] [transport.py] [_log()] kex follows: False
2026-02-14T15:54:50.533 [DEBUG] [Thread-188073] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:54:50.533 [DEBUG] [Thread-188073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:54:50.533 [DEBUG] [Thread-188073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:54:50.533 [DEBUG] [Thread-188073] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:54:50.533 [DEBUG] [Thread-188073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:54:50.533 [DEBUG] [Thread-188073] [transport.py] [_log()] Compression: none
2026-02-14T15:54:50.533 [DEBUG] [Thread-188073] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:54:50.589 [DEBUG] [Thread-188073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:54:50.589 [DEBUG] [Thread-188073] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:54:50.590 [DEBUG] [Thread-188073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:54:50.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:54:50.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:54:50.646 [DEBUG] [Thread-188073] [transport.py] [_log()] userauth is OK
2026-02-14T15:54:50.646 [DEBUG] [Thread-188073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:54:50.647 [DEBUG] [Thread-188073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:54:50.647 [DEBUG] [Thread-188073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:54:50.647 [DEBUG] [Thread-188073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:54:50.667 [INFO] [Thread-188073] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:54:50.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-14T15:54:50.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:54:50.814 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:54:50.816 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:54:51.501 [DEBUG] [Thread-188073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:54:51.502 [DEBUG] [Thread-188073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:54:51.549 [DEBUG] [Thread-188073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:54:51.549 [DEBUG] [Thread-188073] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:54:51.559 [DEBUG] [Thread-188073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:54:51.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:54:51.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-14T15:54:51.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-14T15:54:51.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:54:51.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:54:51.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:54:51.595 [DEBUG] [Thread-188073] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:55:01.775 [DEBUG] [Thread-188075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:55:16.835 [DEBUG] [Thread-188076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:55:21.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:55:21.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:55:21.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T15:55:23.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 55, 7), 15.98, 34.03, 0.0, 27.28, 16.79, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:55:23.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:55:07
2026-02-14T15:55:23.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:55:23.807 [DEBUG] [Thread-188077] [transport.py] [_log()] starting thread (client mode): 0xa2d21090
2026-02-14T15:55:23.807 [DEBUG] [Thread-188077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:55:23.827 [DEBUG] [Thread-188077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:55:23.827 [INFO] [Thread-188077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:55:23.830 [DEBUG] [Thread-188077] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:55:23.830 [DEBUG] [Thread-188077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:55:23.830 [DEBUG] [Thread-188077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:55:23.831 [DEBUG] [Thread-188077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:55:23.831 [DEBUG] [Thread-188077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:55:23.831 [DEBUG] [Thread-188077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:55:23.831 [DEBUG] [Thread-188077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:55:23.831 [DEBUG] [Thread-188077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:55:23.831 [DEBUG] [Thread-188077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:55:23.831 [DEBUG] [Thread-188077] [transport.py] [_log()] client lang: <none>
2026-02-14T15:55:23.831 [DEBUG] [Thread-188077] [transport.py] [_log()] server lang: <none>
2026-02-14T15:55:23.831 [DEBUG] [Thread-188077] [transport.py] [_log()] kex follows: False
2026-02-14T15:55:23.831 [DEBUG] [Thread-188077] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:55:23.831 [DEBUG] [Thread-188077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:55:23.832 [DEBUG] [Thread-188077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:55:23.832 [DEBUG] [Thread-188077] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:55:23.832 [DEBUG] [Thread-188077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:55:23.832 [DEBUG] [Thread-188077] [transport.py] [_log()] Compression: none
2026-02-14T15:55:23.832 [DEBUG] [Thread-188077] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:55:23.849 [DEBUG] [Thread-188077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:55:23.849 [DEBUG] [Thread-188077] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:55:23.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:55:23.850 [DEBUG] [Thread-188077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:55:23.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:55:23.852 [DEBUG] [Thread-188077] [transport.py] [_log()] userauth is OK
2026-02-14T15:55:23.852 [DEBUG] [Thread-188077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:55:23.852 [DEBUG] [Thread-188077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:55:23.852 [DEBUG] [Thread-188077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:55:23.853 [DEBUG] [Thread-188077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:55:23.874 [INFO] [Thread-188077] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:55:23.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:55:24.498 [DEBUG] [Thread-188077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:55:24.499 [DEBUG] [Thread-188077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:55:24.499 [DEBUG] [Thread-188077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:55:24.539 [DEBUG] [Thread-188077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:55:24.539 [DEBUG] [Thread-188077] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:55:24.543 [DEBUG] [Thread-188077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:55:24.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:55:24.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:55:24.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:55:24.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:55:24.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:55:24.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:55:24.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:55:24.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:55:24.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:55:24.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.579968 -999.00  +16.70  23.90     40   +3.10 1 1 1 1 1   888    0 13.05 -28.82 ----- 21.0 23.9 161.2 36.7 21.9 -28.1 21.4 -27.8 22.8 -25.8 23.7 -27.7
2026-02-14T15:55:24.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:55:24.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:55:24.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.579968
2026-02-14T15:55:24.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:55:24.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:55:24.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:55:24.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:55:24.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:55:24.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:55:07', tmtdew=15.98, humidity=34.03, cloud=0.0, wind=27.28, temperature=16.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:55:09.235', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:55:24.569 [DEBUG] [Thread-188077] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:55:24.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-14T15:55:24.662 [DEBUG] [Thread-188080] [transport.py] [_log()] starting thread (client mode): 0xa81d52a0
2026-02-14T15:55:24.663 [DEBUG] [Thread-188080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:55:24.677 [DEBUG] [Thread-188080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:55:24.678 [INFO] [Thread-188080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:55:24.685 [DEBUG] [Thread-188080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:55:24.685 [DEBUG] [Thread-188080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:55:24.685 [DEBUG] [Thread-188080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:55:24.686 [DEBUG] [Thread-188080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:55:24.686 [DEBUG] [Thread-188080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:55:24.686 [DEBUG] [Thread-188080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:55:24.686 [DEBUG] [Thread-188080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:55:24.686 [DEBUG] [Thread-188080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:55:24.686 [DEBUG] [Thread-188080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:55:24.686 [DEBUG] [Thread-188080] [transport.py] [_log()] client lang: <none>
2026-02-14T15:55:24.686 [DEBUG] [Thread-188080] [transport.py] [_log()] server lang: <none>
2026-02-14T15:55:24.686 [DEBUG] [Thread-188080] [transport.py] [_log()] kex follows: False
2026-02-14T15:55:24.686 [DEBUG] [Thread-188080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:55:24.687 [DEBUG] [Thread-188080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:55:24.687 [DEBUG] [Thread-188080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:55:24.687 [DEBUG] [Thread-188080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:55:24.687 [DEBUG] [Thread-188080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:55:24.687 [DEBUG] [Thread-188080] [transport.py] [_log()] Compression: none
2026-02-14T15:55:24.687 [DEBUG] [Thread-188080] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:55:24.742 [DEBUG] [Thread-188080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:55:24.743 [DEBUG] [Thread-188080] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:55:24.743 [DEBUG] [Thread-188080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:55:24.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:55:24.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:55:24.798 [DEBUG] [Thread-188080] [transport.py] [_log()] userauth is OK
2026-02-14T15:55:24.799 [DEBUG] [Thread-188080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:55:24.799 [DEBUG] [Thread-188080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:55:24.799 [DEBUG] [Thread-188080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:55:24.799 [DEBUG] [Thread-188080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:55:24.818 [INFO] [Thread-188080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:55:24.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-14T15:55:24.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:55:25.657 [DEBUG] [Thread-188080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:55:25.657 [DEBUG] [Thread-188080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:55:25.705 [DEBUG] [Thread-188080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:55:25.706 [DEBUG] [Thread-188080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:55:25.715 [DEBUG] [Thread-188080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:55:25.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:55:25.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:55:25.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-14T15:55:25.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:55:25.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:55:25.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:55:25.751 [DEBUG] [Thread-188080] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:55:29.903 [DEBUG] [Thread-188082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:55:31.872 [DEBUG] [Thread-188083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:55:46.926 [DEBUG] [Thread-188084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:55:50.956 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:55:50.957 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:55:55.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:55:55.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:55:55.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-14T15:55:57.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 55, 43), 15.53, 34.83, 0.0, 28.88, 16.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:55:57.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:55:43
2026-02-14T15:55:57.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:55:58.128 [DEBUG] [Thread-188085] [transport.py] [_log()] starting thread (client mode): 0xa2dc25c0
2026-02-14T15:55:58.128 [DEBUG] [Thread-188085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:55:58.148 [DEBUG] [Thread-188085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:55:58.148 [INFO] [Thread-188085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:55:58.151 [DEBUG] [Thread-188085] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:55:58.151 [DEBUG] [Thread-188085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:55:58.151 [DEBUG] [Thread-188085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:55:58.151 [DEBUG] [Thread-188085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:55:58.152 [DEBUG] [Thread-188085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:55:58.152 [DEBUG] [Thread-188085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:55:58.152 [DEBUG] [Thread-188085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:55:58.152 [DEBUG] [Thread-188085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:55:58.152 [DEBUG] [Thread-188085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:55:58.152 [DEBUG] [Thread-188085] [transport.py] [_log()] client lang: <none>
2026-02-14T15:55:58.152 [DEBUG] [Thread-188085] [transport.py] [_log()] server lang: <none>
2026-02-14T15:55:58.152 [DEBUG] [Thread-188085] [transport.py] [_log()] kex follows: False
2026-02-14T15:55:58.152 [DEBUG] [Thread-188085] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:55:58.152 [DEBUG] [Thread-188085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:55:58.152 [DEBUG] [Thread-188085] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:55:58.152 [DEBUG] [Thread-188085] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:55:58.152 [DEBUG] [Thread-188085] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:55:58.153 [DEBUG] [Thread-188085] [transport.py] [_log()] Compression: none
2026-02-14T15:55:58.153 [DEBUG] [Thread-188085] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:55:58.171 [DEBUG] [Thread-188085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:55:58.172 [DEBUG] [Thread-188085] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:55:58.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:55:58.173 [DEBUG] [Thread-188085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:55:58.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:55:58.175 [DEBUG] [Thread-188085] [transport.py] [_log()] userauth is OK
2026-02-14T15:55:58.175 [DEBUG] [Thread-188085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:55:58.175 [DEBUG] [Thread-188085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:55:58.175 [DEBUG] [Thread-188085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:55:58.175 [DEBUG] [Thread-188085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:55:58.193 [INFO] [Thread-188085] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:55:58.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:55:58.833 [DEBUG] [Thread-188085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:55:58.834 [DEBUG] [Thread-188085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:55:58.834 [DEBUG] [Thread-188085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:55:58.874 [DEBUG] [Thread-188085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:55:58.875 [DEBUG] [Thread-188085] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:55:58.878 [DEBUG] [Thread-188085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:55:58.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:55:58.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:55:58.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:55:58.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:55:58.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:55:58.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:55:58.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:55:58.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:55:58.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:55:58.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.580315 -999.00  +16.50  18.54     40   +3.00 1 1 1 1 1   888    0 12.96 -27.83 ----- 22.5 18.5 167.2 33.8 21.9 -27.4 21.3 -26.3 22.8 -26.5 23.6 -27.4
2026-02-14T15:55:58.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:55:58.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:55:58.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.580315
2026-02-14T15:55:58.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:55:58.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:55:58.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:55:58.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:55:58.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:55:58.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:55:43', tmtdew=15.53, humidity=34.83, cloud=0.0, wind=28.88, temperature=16.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:55:39.216', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:55:58.902 [DEBUG] [Thread-188085] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:55:58.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-14T15:55:58.992 [DEBUG] [Thread-188088] [transport.py] [_log()] starting thread (client mode): 0xa2dc3520
2026-02-14T15:55:58.992 [DEBUG] [Thread-188088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:55:59.005 [DEBUG] [Thread-188088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:55:59.006 [INFO] [Thread-188088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:55:59.013 [DEBUG] [Thread-188088] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:55:59.013 [DEBUG] [Thread-188088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:55:59.014 [DEBUG] [Thread-188088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:55:59.014 [DEBUG] [Thread-188088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:55:59.014 [DEBUG] [Thread-188088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:55:59.014 [DEBUG] [Thread-188088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:55:59.014 [DEBUG] [Thread-188088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:55:59.014 [DEBUG] [Thread-188088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:55:59.014 [DEBUG] [Thread-188088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:55:59.014 [DEBUG] [Thread-188088] [transport.py] [_log()] client lang: <none>
2026-02-14T15:55:59.014 [DEBUG] [Thread-188088] [transport.py] [_log()] server lang: <none>
2026-02-14T15:55:59.014 [DEBUG] [Thread-188088] [transport.py] [_log()] kex follows: False
2026-02-14T15:55:59.014 [DEBUG] [Thread-188088] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:55:59.014 [DEBUG] [Thread-188088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:55:59.014 [DEBUG] [Thread-188088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:55:59.014 [DEBUG] [Thread-188088] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:55:59.014 [DEBUG] [Thread-188088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:55:59.014 [DEBUG] [Thread-188088] [transport.py] [_log()] Compression: none
2026-02-14T15:55:59.014 [DEBUG] [Thread-188088] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:55:59.074 [DEBUG] [Thread-188088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:55:59.075 [DEBUG] [Thread-188088] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:55:59.075 [DEBUG] [Thread-188088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:55:59.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:55:59.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:55:59.129 [DEBUG] [Thread-188088] [transport.py] [_log()] userauth is OK
2026-02-14T15:55:59.130 [DEBUG] [Thread-188088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:55:59.130 [DEBUG] [Thread-188088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:55:59.130 [DEBUG] [Thread-188088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:55:59.130 [DEBUG] [Thread-188088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:55:59.150 [INFO] [Thread-188088] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:55:59.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-14T15:55:59.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:55:59.981 [DEBUG] [Thread-188088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:55:59.981 [DEBUG] [Thread-188088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:56:00.029 [DEBUG] [Thread-188088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:56:00.029 [DEBUG] [Thread-188088] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:56:00.038 [DEBUG] [Thread-188088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:56:00.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:56:00.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-14T15:56:00.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-14T15:56:00.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:56:00.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:56:00.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:56:00.072 [DEBUG] [Thread-188088] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:56:01.962 [DEBUG] [Thread-188090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:56:17.007 [DEBUG] [Thread-188091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:56:29.952 [DEBUG] [Thread-188092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:56:30.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:56:30.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:56:30.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-14T15:56:31.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 56, 18), 15.69, 34.57, 0.0, 37.53, 16.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:56:31.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:56:18
2026-02-14T15:56:32.045 [DEBUG] [Thread-188093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:56:32.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:56:32.416 [DEBUG] [Thread-188094] [transport.py] [_log()] starting thread (client mode): 0xa81d5de0
2026-02-14T15:56:32.416 [DEBUG] [Thread-188094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:56:32.437 [DEBUG] [Thread-188094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:56:32.437 [INFO] [Thread-188094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:56:32.441 [DEBUG] [Thread-188094] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:56:32.441 [DEBUG] [Thread-188094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:56:32.441 [DEBUG] [Thread-188094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:56:32.441 [DEBUG] [Thread-188094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:56:32.441 [DEBUG] [Thread-188094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:56:32.441 [DEBUG] [Thread-188094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:56:32.441 [DEBUG] [Thread-188094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:56:32.441 [DEBUG] [Thread-188094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:56:32.442 [DEBUG] [Thread-188094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:56:32.442 [DEBUG] [Thread-188094] [transport.py] [_log()] client lang: <none>
2026-02-14T15:56:32.442 [DEBUG] [Thread-188094] [transport.py] [_log()] server lang: <none>
2026-02-14T15:56:32.442 [DEBUG] [Thread-188094] [transport.py] [_log()] kex follows: False
2026-02-14T15:56:32.442 [DEBUG] [Thread-188094] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:56:32.442 [DEBUG] [Thread-188094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:56:32.442 [DEBUG] [Thread-188094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:56:32.442 [DEBUG] [Thread-188094] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:56:32.442 [DEBUG] [Thread-188094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:56:32.442 [DEBUG] [Thread-188094] [transport.py] [_log()] Compression: none
2026-02-14T15:56:32.442 [DEBUG] [Thread-188094] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:56:32.464 [DEBUG] [Thread-188094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:56:32.464 [DEBUG] [Thread-188094] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:56:32.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:56:32.465 [DEBUG] [Thread-188094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:56:32.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:56:32.467 [DEBUG] [Thread-188094] [transport.py] [_log()] userauth is OK
2026-02-14T15:56:32.468 [DEBUG] [Thread-188094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:56:32.468 [DEBUG] [Thread-188094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:56:32.468 [DEBUG] [Thread-188094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:56:32.468 [DEBUG] [Thread-188094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:56:32.492 [INFO] [Thread-188094] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:56:32.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:56:33.118 [DEBUG] [Thread-188094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:56:33.118 [DEBUG] [Thread-188094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:56:33.118 [DEBUG] [Thread-188094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:56:33.159 [DEBUG] [Thread-188094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:56:33.159 [DEBUG] [Thread-188094] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:56:33.161 [DEBUG] [Thread-188094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:56:33.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:56:33.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:56:33.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:56:33.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:56:33.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:56:33.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:56:33.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:56:33.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:56:33.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:56:33.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.580662 -999.00  +16.40  25.91     40   +3.10 1 1 1 1 1   888    0 12.77 -31.27 ----- 32.4 25.9 166.6 41.9 21.8 -27.8 21.3 -27.7 22.7 -25.9 23.6 -27.2
2026-02-14T15:56:33.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:56:33.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:56:33.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.580662
2026-02-14T15:56:33.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:56:33.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:56:33.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:56:33.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:56:33.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:56:33.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:56:18', tmtdew=15.69, humidity=34.57, cloud=0.0, wind=37.53, temperature=16.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:56:09.197', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:56:33.187 [DEBUG] [Thread-188094] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:56:33.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-14T15:56:33.285 [DEBUG] [Thread-188097] [transport.py] [_log()] starting thread (client mode): 0xa81d79a0
2026-02-14T15:56:33.285 [DEBUG] [Thread-188097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:56:33.300 [DEBUG] [Thread-188097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:56:33.300 [INFO] [Thread-188097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:56:33.307 [DEBUG] [Thread-188097] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:56:33.307 [DEBUG] [Thread-188097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:56:33.308 [DEBUG] [Thread-188097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:56:33.308 [DEBUG] [Thread-188097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:56:33.308 [DEBUG] [Thread-188097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:56:33.308 [DEBUG] [Thread-188097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:56:33.308 [DEBUG] [Thread-188097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:56:33.308 [DEBUG] [Thread-188097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:56:33.308 [DEBUG] [Thread-188097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:56:33.308 [DEBUG] [Thread-188097] [transport.py] [_log()] client lang: <none>
2026-02-14T15:56:33.309 [DEBUG] [Thread-188097] [transport.py] [_log()] server lang: <none>
2026-02-14T15:56:33.309 [DEBUG] [Thread-188097] [transport.py] [_log()] kex follows: False
2026-02-14T15:56:33.309 [DEBUG] [Thread-188097] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:56:33.309 [DEBUG] [Thread-188097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:56:33.309 [DEBUG] [Thread-188097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:56:33.309 [DEBUG] [Thread-188097] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:56:33.309 [DEBUG] [Thread-188097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:56:33.309 [DEBUG] [Thread-188097] [transport.py] [_log()] Compression: none
2026-02-14T15:56:33.309 [DEBUG] [Thread-188097] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:56:33.368 [DEBUG] [Thread-188097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:56:33.369 [DEBUG] [Thread-188097] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:56:33.369 [DEBUG] [Thread-188097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:56:33.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:56:33.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:56:33.425 [DEBUG] [Thread-188097] [transport.py] [_log()] userauth is OK
2026-02-14T15:56:33.425 [DEBUG] [Thread-188097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:56:33.426 [DEBUG] [Thread-188097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:56:33.426 [DEBUG] [Thread-188097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:56:33.426 [DEBUG] [Thread-188097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:56:33.445 [INFO] [Thread-188097] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:56:33.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-14T15:56:33.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:56:34.261 [DEBUG] [Thread-188097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:56:34.261 [DEBUG] [Thread-188097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:56:34.312 [DEBUG] [Thread-188097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:56:34.313 [DEBUG] [Thread-188097] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:56:34.321 [DEBUG] [Thread-188097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:56:34.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:56:34.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-14T15:56:34.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-14T15:56:34.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:56:34.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:56:34.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:56:34.359 [DEBUG] [Thread-188097] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:56:47.086 [DEBUG] [Thread-188099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:56:51.098 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:56:51.099 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:57:02.140 [DEBUG] [Thread-188100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:57:04.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:57:04.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:57:04.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-14T15:57:06.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 56, 54), 16.3, 33.43, 0.0, 38.38, 17.3, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:57:06.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:56:54
2026-02-14T15:57:06.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:57:06.937 [DEBUG] [Thread-188101] [transport.py] [_log()] starting thread (client mode): 0xa2dc2110
2026-02-14T15:57:06.937 [DEBUG] [Thread-188101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:57:06.957 [DEBUG] [Thread-188101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:57:06.957 [INFO] [Thread-188101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:57:06.961 [DEBUG] [Thread-188101] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:57:06.961 [DEBUG] [Thread-188101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:57:06.961 [DEBUG] [Thread-188101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:57:06.961 [DEBUG] [Thread-188101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:57:06.961 [DEBUG] [Thread-188101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:57:06.961 [DEBUG] [Thread-188101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:57:06.961 [DEBUG] [Thread-188101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:57:06.961 [DEBUG] [Thread-188101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:57:06.961 [DEBUG] [Thread-188101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:57:06.961 [DEBUG] [Thread-188101] [transport.py] [_log()] client lang: <none>
2026-02-14T15:57:06.961 [DEBUG] [Thread-188101] [transport.py] [_log()] server lang: <none>
2026-02-14T15:57:06.961 [DEBUG] [Thread-188101] [transport.py] [_log()] kex follows: False
2026-02-14T15:57:06.961 [DEBUG] [Thread-188101] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:57:06.962 [DEBUG] [Thread-188101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:57:06.962 [DEBUG] [Thread-188101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:57:06.962 [DEBUG] [Thread-188101] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:57:06.962 [DEBUG] [Thread-188101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:57:06.962 [DEBUG] [Thread-188101] [transport.py] [_log()] Compression: none
2026-02-14T15:57:06.962 [DEBUG] [Thread-188101] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:57:06.981 [DEBUG] [Thread-188101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:57:06.982 [DEBUG] [Thread-188101] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:57:06.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:57:06.983 [DEBUG] [Thread-188101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:57:06.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:57:06.986 [DEBUG] [Thread-188101] [transport.py] [_log()] userauth is OK
2026-02-14T15:57:06.986 [DEBUG] [Thread-188101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:57:06.986 [DEBUG] [Thread-188101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:57:06.986 [DEBUG] [Thread-188101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:57:06.986 [DEBUG] [Thread-188101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:57:07.024 [INFO] [Thread-188101] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:57:07.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:57:07.624 [DEBUG] [Thread-188101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:57:07.624 [DEBUG] [Thread-188101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:57:07.624 [DEBUG] [Thread-188101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:57:07.666 [DEBUG] [Thread-188101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:57:07.666 [DEBUG] [Thread-188101] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:57:07.668 [DEBUG] [Thread-188101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:57:07.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:57:07.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:57:07.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:57:07.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:57:07.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:57:07.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:57:07.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:57:07.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:57:07.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:57:07.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.581009 -999.00  +16.60  24.74     40   +3.10 1 1 1 1 1   888    0 12.73 -36.82 ----- 29.5 24.7 177.2 42.0 21.8 -27.5 21.2 -26.2 22.7 -26.6 23.6 -27.7
2026-02-14T15:57:07.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:57:07.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:57:07.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.581009
2026-02-14T15:57:07.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:57:07.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:57:07.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:57:07.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:57:07.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:57:07.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:56:54', tmtdew=16.3, humidity=33.43, cloud=0.0, wind=38.38, temperature=17.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:56:39.178', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:57:07.686 [DEBUG] [Thread-188101] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:57:07.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-14T15:57:07.770 [DEBUG] [Thread-188104] [transport.py] [_log()] starting thread (client mode): 0xa2d22800
2026-02-14T15:57:07.770 [DEBUG] [Thread-188104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:57:07.785 [DEBUG] [Thread-188104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:57:07.785 [INFO] [Thread-188104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:57:07.792 [DEBUG] [Thread-188104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:57:07.792 [DEBUG] [Thread-188104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:57:07.792 [DEBUG] [Thread-188104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:57:07.792 [DEBUG] [Thread-188104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:57:07.792 [DEBUG] [Thread-188104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:57:07.793 [DEBUG] [Thread-188104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:57:07.793 [DEBUG] [Thread-188104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:57:07.793 [DEBUG] [Thread-188104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:57:07.793 [DEBUG] [Thread-188104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:57:07.793 [DEBUG] [Thread-188104] [transport.py] [_log()] client lang: <none>
2026-02-14T15:57:07.793 [DEBUG] [Thread-188104] [transport.py] [_log()] server lang: <none>
2026-02-14T15:57:07.793 [DEBUG] [Thread-188104] [transport.py] [_log()] kex follows: False
2026-02-14T15:57:07.793 [DEBUG] [Thread-188104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:57:07.793 [DEBUG] [Thread-188104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:57:07.793 [DEBUG] [Thread-188104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:57:07.793 [DEBUG] [Thread-188104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:57:07.793 [DEBUG] [Thread-188104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:57:07.793 [DEBUG] [Thread-188104] [transport.py] [_log()] Compression: none
2026-02-14T15:57:07.793 [DEBUG] [Thread-188104] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:57:07.852 [DEBUG] [Thread-188104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:57:07.852 [DEBUG] [Thread-188104] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:57:07.853 [DEBUG] [Thread-188104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:57:07.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:57:07.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:57:07.909 [DEBUG] [Thread-188104] [transport.py] [_log()] userauth is OK
2026-02-14T15:57:07.909 [DEBUG] [Thread-188104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:57:07.909 [DEBUG] [Thread-188104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:57:07.909 [DEBUG] [Thread-188104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:57:07.909 [DEBUG] [Thread-188104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:57:07.924 [INFO] [Thread-188104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:57:07.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-14T15:57:07.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:57:08.737 [DEBUG] [Thread-188104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:57:08.737 [DEBUG] [Thread-188104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:57:08.785 [DEBUG] [Thread-188104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:57:08.785 [DEBUG] [Thread-188104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:57:08.795 [DEBUG] [Thread-188104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:57:08.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:57:08.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T15:57:08.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-14T15:57:08.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:57:08.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:57:08.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:57:08.833 [DEBUG] [Thread-188104] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:57:17.178 [DEBUG] [Thread-188106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:57:30.008 [DEBUG] [Thread-188107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:57:32.230 [DEBUG] [Thread-188108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:57:38.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:57:38.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:57:38.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-14T15:57:40.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 57, 29), 16.27, 33.5, 0.0, 40.35, 17.32, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:57:40.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:57:29
2026-02-14T15:57:41.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:57:41.264 [DEBUG] [Thread-188109] [transport.py] [_log()] starting thread (client mode): 0xa2ded4b0
2026-02-14T15:57:41.265 [DEBUG] [Thread-188109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:57:41.287 [DEBUG] [Thread-188109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:57:41.287 [INFO] [Thread-188109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:57:41.290 [DEBUG] [Thread-188109] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:57:41.290 [DEBUG] [Thread-188109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:57:41.290 [DEBUG] [Thread-188109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:57:41.290 [DEBUG] [Thread-188109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:57:41.290 [DEBUG] [Thread-188109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:57:41.290 [DEBUG] [Thread-188109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:57:41.290 [DEBUG] [Thread-188109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:57:41.290 [DEBUG] [Thread-188109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:57:41.290 [DEBUG] [Thread-188109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:57:41.290 [DEBUG] [Thread-188109] [transport.py] [_log()] client lang: <none>
2026-02-14T15:57:41.291 [DEBUG] [Thread-188109] [transport.py] [_log()] server lang: <none>
2026-02-14T15:57:41.291 [DEBUG] [Thread-188109] [transport.py] [_log()] kex follows: False
2026-02-14T15:57:41.291 [DEBUG] [Thread-188109] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:57:41.291 [DEBUG] [Thread-188109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:57:41.291 [DEBUG] [Thread-188109] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:57:41.291 [DEBUG] [Thread-188109] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:57:41.291 [DEBUG] [Thread-188109] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:57:41.291 [DEBUG] [Thread-188109] [transport.py] [_log()] Compression: none
2026-02-14T15:57:41.291 [DEBUG] [Thread-188109] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:57:41.310 [DEBUG] [Thread-188109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:57:41.311 [DEBUG] [Thread-188109] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:57:41.311 [DEBUG] [Thread-188109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:57:41.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:57:41.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:57:41.314 [DEBUG] [Thread-188109] [transport.py] [_log()] userauth is OK
2026-02-14T15:57:41.314 [DEBUG] [Thread-188109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:57:41.314 [DEBUG] [Thread-188109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:57:41.314 [DEBUG] [Thread-188109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:57:41.315 [DEBUG] [Thread-188109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:57:41.339 [INFO] [Thread-188109] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:57:41.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:57:41.968 [DEBUG] [Thread-188109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:57:41.968 [DEBUG] [Thread-188109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:57:41.968 [DEBUG] [Thread-188109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:57:42.010 [DEBUG] [Thread-188109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:57:42.010 [DEBUG] [Thread-188109] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:57:42.014 [DEBUG] [Thread-188109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:57:42.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:57:42.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:57:42.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:57:42.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:57:42.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:57:42.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:57:42.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:57:42.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:57:42.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:57:42.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.581357 -999.00  +16.50  30.05     40   +3.10 1 1 2 1 1   888    0 12.39 -35.19 ----- 28.6 30.1 174.4 41.7 21.8 -28.1 21.2 -26.8 22.7 -25.2 23.6 -28.5
2026-02-14T15:57:42.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:57:42.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:57:42.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.581357
2026-02-14T15:57:42.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:57:42.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:57:42.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:57:42.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:57:42.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:57:42.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:57:29', tmtdew=16.27, humidity=33.5, cloud=0.0, wind=40.35, temperature=17.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:57:09.245', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:57:42.042 [DEBUG] [Thread-188109] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:57:42.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-14T15:57:42.138 [DEBUG] [Thread-188112] [transport.py] [_log()] starting thread (client mode): 0xa2deca90
2026-02-14T15:57:42.138 [DEBUG] [Thread-188112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:57:42.153 [DEBUG] [Thread-188112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:57:42.153 [INFO] [Thread-188112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:57:42.161 [DEBUG] [Thread-188112] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:57:42.161 [DEBUG] [Thread-188112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:57:42.161 [DEBUG] [Thread-188112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:57:42.161 [DEBUG] [Thread-188112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:57:42.161 [DEBUG] [Thread-188112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:57:42.161 [DEBUG] [Thread-188112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:57:42.161 [DEBUG] [Thread-188112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:57:42.161 [DEBUG] [Thread-188112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:57:42.161 [DEBUG] [Thread-188112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:57:42.161 [DEBUG] [Thread-188112] [transport.py] [_log()] client lang: <none>
2026-02-14T15:57:42.161 [DEBUG] [Thread-188112] [transport.py] [_log()] server lang: <none>
2026-02-14T15:57:42.161 [DEBUG] [Thread-188112] [transport.py] [_log()] kex follows: False
2026-02-14T15:57:42.161 [DEBUG] [Thread-188112] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:57:42.161 [DEBUG] [Thread-188112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:57:42.161 [DEBUG] [Thread-188112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:57:42.161 [DEBUG] [Thread-188112] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:57:42.161 [DEBUG] [Thread-188112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:57:42.162 [DEBUG] [Thread-188112] [transport.py] [_log()] Compression: none
2026-02-14T15:57:42.162 [DEBUG] [Thread-188112] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:57:42.218 [DEBUG] [Thread-188112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:57:42.219 [DEBUG] [Thread-188112] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:57:42.219 [DEBUG] [Thread-188112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:57:42.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:57:42.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:57:42.275 [DEBUG] [Thread-188112] [transport.py] [_log()] userauth is OK
2026-02-14T15:57:42.276 [DEBUG] [Thread-188112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:57:42.276 [DEBUG] [Thread-188112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:57:42.276 [DEBUG] [Thread-188112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:57:42.276 [DEBUG] [Thread-188112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:57:42.295 [INFO] [Thread-188112] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:57:42.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-14T15:57:42.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:57:43.104 [DEBUG] [Thread-188112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:57:43.104 [DEBUG] [Thread-188112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:57:43.152 [DEBUG] [Thread-188112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:57:43.152 [DEBUG] [Thread-188112] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:57:43.160 [DEBUG] [Thread-188112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:57:43.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:57:43.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-14T15:57:43.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:57:43.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:57:43.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:57:43.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:57:43.193 [DEBUG] [Thread-188112] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:57:47.270 [DEBUG] [Thread-188114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:57:51.254 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:57:51.255 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:58:02.320 [DEBUG] [Thread-188115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:58:13.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:58:13.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:58:13.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-14T15:58:15.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 58, 4), 16.36, 33.3, 0.0, 40.03, 17.32, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:58:15.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:58:04
2026-02-14T15:58:15.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:58:15.553 [DEBUG] [Thread-188116] [transport.py] [_log()] starting thread (client mode): 0xa2def250
2026-02-14T15:58:15.554 [DEBUG] [Thread-188116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:58:15.575 [DEBUG] [Thread-188116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:58:15.575 [INFO] [Thread-188116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:58:15.579 [DEBUG] [Thread-188116] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:58:15.579 [DEBUG] [Thread-188116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:58:15.579 [DEBUG] [Thread-188116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:58:15.579 [DEBUG] [Thread-188116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:58:15.579 [DEBUG] [Thread-188116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:58:15.579 [DEBUG] [Thread-188116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:58:15.579 [DEBUG] [Thread-188116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:58:15.579 [DEBUG] [Thread-188116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:58:15.579 [DEBUG] [Thread-188116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:58:15.579 [DEBUG] [Thread-188116] [transport.py] [_log()] client lang: <none>
2026-02-14T15:58:15.579 [DEBUG] [Thread-188116] [transport.py] [_log()] server lang: <none>
2026-02-14T15:58:15.580 [DEBUG] [Thread-188116] [transport.py] [_log()] kex follows: False
2026-02-14T15:58:15.580 [DEBUG] [Thread-188116] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:58:15.580 [DEBUG] [Thread-188116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:58:15.580 [DEBUG] [Thread-188116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:58:15.580 [DEBUG] [Thread-188116] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:58:15.580 [DEBUG] [Thread-188116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:58:15.580 [DEBUG] [Thread-188116] [transport.py] [_log()] Compression: none
2026-02-14T15:58:15.580 [DEBUG] [Thread-188116] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:58:15.598 [DEBUG] [Thread-188116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:58:15.599 [DEBUG] [Thread-188116] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:58:15.600 [DEBUG] [Thread-188116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:58:15.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:58:15.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:58:15.602 [DEBUG] [Thread-188116] [transport.py] [_log()] userauth is OK
2026-02-14T15:58:15.602 [DEBUG] [Thread-188116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:58:15.602 [DEBUG] [Thread-188116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:58:15.603 [DEBUG] [Thread-188116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:58:15.603 [DEBUG] [Thread-188116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:58:15.638 [INFO] [Thread-188116] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:58:15.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:58:16.272 [DEBUG] [Thread-188116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:58:16.272 [DEBUG] [Thread-188116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:58:16.272 [DEBUG] [Thread-188116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:58:16.313 [DEBUG] [Thread-188116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:58:16.313 [DEBUG] [Thread-188116] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:58:16.316 [DEBUG] [Thread-188116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:58:16.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:58:16.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:58:16.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:58:16.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:58:16.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:58:16.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:58:16.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:58:16.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:58:16.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:58:16.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.581704 -999.00  +16.50  34.91     40   +3.00 1 1 2 1 1   888    0 12.56 -34.08 ----- 35.3 34.9 170.2 44.6 21.8 -27.9 21.1 -27.3 22.7 -24.9 23.6 -28.1
2026-02-14T15:58:16.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:58:16.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:58:16.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.581704
2026-02-14T15:58:16.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:58:16.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:58:16.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:58:16.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:58:16.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:58:16.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:58:04', tmtdew=16.36, humidity=33.3, cloud=0.0, wind=40.03, temperature=17.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:57:39.226', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:58:16.340 [DEBUG] [Thread-188116] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:58:16.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-14T15:58:16.445 [DEBUG] [Thread-188119] [transport.py] [_log()] starting thread (client mode): 0xa2dc0a90
2026-02-14T15:58:16.446 [DEBUG] [Thread-188119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:58:16.466 [DEBUG] [Thread-188119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:58:16.466 [INFO] [Thread-188119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:58:16.473 [DEBUG] [Thread-188119] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:58:16.474 [DEBUG] [Thread-188119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:58:16.474 [DEBUG] [Thread-188119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:58:16.474 [DEBUG] [Thread-188119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:58:16.474 [DEBUG] [Thread-188119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:58:16.474 [DEBUG] [Thread-188119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:58:16.474 [DEBUG] [Thread-188119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:58:16.474 [DEBUG] [Thread-188119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:58:16.475 [DEBUG] [Thread-188119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:58:16.475 [DEBUG] [Thread-188119] [transport.py] [_log()] client lang: <none>
2026-02-14T15:58:16.475 [DEBUG] [Thread-188119] [transport.py] [_log()] server lang: <none>
2026-02-14T15:58:16.475 [DEBUG] [Thread-188119] [transport.py] [_log()] kex follows: False
2026-02-14T15:58:16.475 [DEBUG] [Thread-188119] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:58:16.475 [DEBUG] [Thread-188119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:58:16.475 [DEBUG] [Thread-188119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:58:16.475 [DEBUG] [Thread-188119] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:58:16.475 [DEBUG] [Thread-188119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:58:16.475 [DEBUG] [Thread-188119] [transport.py] [_log()] Compression: none
2026-02-14T15:58:16.475 [DEBUG] [Thread-188119] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:58:16.530 [DEBUG] [Thread-188119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:58:16.530 [DEBUG] [Thread-188119] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:58:16.531 [DEBUG] [Thread-188119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:58:16.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:58:16.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:58:16.586 [DEBUG] [Thread-188119] [transport.py] [_log()] userauth is OK
2026-02-14T15:58:16.586 [DEBUG] [Thread-188119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:58:16.587 [DEBUG] [Thread-188119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:58:16.587 [DEBUG] [Thread-188119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:58:16.587 [DEBUG] [Thread-188119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:58:16.606 [INFO] [Thread-188119] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:58:16.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-14T15:58:16.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:58:17.353 [DEBUG] [Thread-188121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:58:17.464 [DEBUG] [Thread-188119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:58:17.464 [DEBUG] [Thread-188119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:58:17.511 [DEBUG] [Thread-188119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:58:17.512 [DEBUG] [Thread-188119] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:58:17.521 [DEBUG] [Thread-188119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:58:17.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:58:17.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')
2026-02-14T15:58:17.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:58:17.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:58:17.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:58:17.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:58:17.565 [DEBUG] [Thread-188119] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:58:30.049 [DEBUG] [Thread-188122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:58:32.405 [DEBUG] [Thread-188123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:58:47.444 [DEBUG] [Thread-188124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:58:47.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:58:47.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:58:47.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-14T15:58:49.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 58, 39), 17.21, 31.47, 0.0, 46.57, 18.4, 0, 0, 0, 2, 1, 0),)
2026-02-14T15:58:49.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:58:39
2026-02-14T15:58:49.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:58:49.916 [DEBUG] [Thread-188125] [transport.py] [_log()] starting thread (client mode): 0xa2decdf0
2026-02-14T15:58:49.917 [DEBUG] [Thread-188125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:58:49.937 [DEBUG] [Thread-188125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:58:49.938 [INFO] [Thread-188125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:58:49.941 [DEBUG] [Thread-188125] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:58:49.941 [DEBUG] [Thread-188125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:58:49.941 [DEBUG] [Thread-188125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:58:49.941 [DEBUG] [Thread-188125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:58:49.941 [DEBUG] [Thread-188125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:58:49.941 [DEBUG] [Thread-188125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:58:49.941 [DEBUG] [Thread-188125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:58:49.941 [DEBUG] [Thread-188125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:58:49.941 [DEBUG] [Thread-188125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:58:49.941 [DEBUG] [Thread-188125] [transport.py] [_log()] client lang: <none>
2026-02-14T15:58:49.941 [DEBUG] [Thread-188125] [transport.py] [_log()] server lang: <none>
2026-02-14T15:58:49.941 [DEBUG] [Thread-188125] [transport.py] [_log()] kex follows: False
2026-02-14T15:58:49.941 [DEBUG] [Thread-188125] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:58:49.941 [DEBUG] [Thread-188125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:58:49.941 [DEBUG] [Thread-188125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:58:49.941 [DEBUG] [Thread-188125] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:58:49.941 [DEBUG] [Thread-188125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:58:49.941 [DEBUG] [Thread-188125] [transport.py] [_log()] Compression: none
2026-02-14T15:58:49.941 [DEBUG] [Thread-188125] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:58:49.959 [DEBUG] [Thread-188125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:58:49.960 [DEBUG] [Thread-188125] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:58:49.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:58:49.961 [DEBUG] [Thread-188125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:58:49.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:58:49.963 [DEBUG] [Thread-188125] [transport.py] [_log()] userauth is OK
2026-02-14T15:58:49.963 [DEBUG] [Thread-188125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:58:49.963 [DEBUG] [Thread-188125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:58:49.963 [DEBUG] [Thread-188125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:58:49.963 [DEBUG] [Thread-188125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:58:49.983 [INFO] [Thread-188125] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:58:49.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:58:50.770 [DEBUG] [Thread-188125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:58:50.771 [DEBUG] [Thread-188125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:58:50.771 [DEBUG] [Thread-188125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:58:50.811 [DEBUG] [Thread-188125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:58:50.811 [DEBUG] [Thread-188125] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:58:50.815 [DEBUG] [Thread-188125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:58:50.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:58:50.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:58:50.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:58:50.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:58:50.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:58:50.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:58:50.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:58:50.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:58:50.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:58:50.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.582051 -999.00  +16.70  26.57     39   +3.00 1 1 1 1 1   888    0 13.03 -31.83 ----- 27.1 26.6 181.8 36.2 21.8 -27.7 21.0 -28.6 22.8 -25.1 23.7 -27.2
2026-02-14T15:58:50.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:58:50.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:58:50.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.582051
2026-02-14T15:58:50.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:58:50.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:58:50.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:58:50.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:58:50.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:58:50.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:58:39', tmtdew=17.21, humidity=31.47, cloud=0.0, wind=46.57, temperature=18.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:58:09.206', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:58:50.836 [DEBUG] [Thread-188125] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:58:50.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-14T15:58:50.930 [DEBUG] [Thread-188128] [transport.py] [_log()] starting thread (client mode): 0xa2dec910
2026-02-14T15:58:50.930 [DEBUG] [Thread-188128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:58:50.945 [DEBUG] [Thread-188128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:58:50.945 [INFO] [Thread-188128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:58:50.952 [DEBUG] [Thread-188128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:58:50.952 [DEBUG] [Thread-188128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:58:50.952 [DEBUG] [Thread-188128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:58:50.952 [DEBUG] [Thread-188128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:58:50.953 [DEBUG] [Thread-188128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:58:50.953 [DEBUG] [Thread-188128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:58:50.953 [DEBUG] [Thread-188128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:58:50.953 [DEBUG] [Thread-188128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:58:50.953 [DEBUG] [Thread-188128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:58:50.953 [DEBUG] [Thread-188128] [transport.py] [_log()] client lang: <none>
2026-02-14T15:58:50.953 [DEBUG] [Thread-188128] [transport.py] [_log()] server lang: <none>
2026-02-14T15:58:50.953 [DEBUG] [Thread-188128] [transport.py] [_log()] kex follows: False
2026-02-14T15:58:50.953 [DEBUG] [Thread-188128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:58:50.953 [DEBUG] [Thread-188128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:58:50.953 [DEBUG] [Thread-188128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:58:50.953 [DEBUG] [Thread-188128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:58:50.953 [DEBUG] [Thread-188128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:58:50.953 [DEBUG] [Thread-188128] [transport.py] [_log()] Compression: none
2026-02-14T15:58:50.953 [DEBUG] [Thread-188128] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:58:51.013 [DEBUG] [Thread-188128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:58:51.014 [DEBUG] [Thread-188128] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:58:51.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:58:51.014 [DEBUG] [Thread-188128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:58:51.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:58:51.074 [DEBUG] [Thread-188128] [transport.py] [_log()] userauth is OK
2026-02-14T15:58:51.074 [DEBUG] [Thread-188128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:58:51.074 [DEBUG] [Thread-188128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:58:51.074 [DEBUG] [Thread-188128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:58:51.074 [DEBUG] [Thread-188128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:58:51.096 [INFO] [Thread-188128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:58:51.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-14T15:58:51.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:58:51.395 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:58:51.396 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:58:51.907 [DEBUG] [Thread-188128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:58:51.908 [DEBUG] [Thread-188128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:58:51.955 [DEBUG] [Thread-188128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:58:51.956 [DEBUG] [Thread-188128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:58:51.965 [DEBUG] [Thread-188128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:58:51.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:58:51.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-14T15:58:51.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T15:58:51.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:58:51.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:58:51.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:58:52.001 [DEBUG] [Thread-188128] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:59:02.485 [DEBUG] [Thread-188130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:59:17.547 [DEBUG] [Thread-188131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:59:22.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:59:22.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:59:22.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-14T15:59:24.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 59, 15), 16.17, 33.39, 0.0, 35.43, 17.08, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:59:24.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:59:15
2026-02-14T15:59:24.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:59:24.652 [DEBUG] [Thread-188132] [transport.py] [_log()] starting thread (client mode): 0xa57b2fe0
2026-02-14T15:59:24.653 [DEBUG] [Thread-188132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:59:24.674 [DEBUG] [Thread-188132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:59:24.674 [INFO] [Thread-188132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:59:24.677 [DEBUG] [Thread-188132] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:59:24.678 [DEBUG] [Thread-188132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:59:24.678 [DEBUG] [Thread-188132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:59:24.678 [DEBUG] [Thread-188132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:59:24.678 [DEBUG] [Thread-188132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:59:24.678 [DEBUG] [Thread-188132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:59:24.678 [DEBUG] [Thread-188132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:59:24.678 [DEBUG] [Thread-188132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:59:24.678 [DEBUG] [Thread-188132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:59:24.678 [DEBUG] [Thread-188132] [transport.py] [_log()] client lang: <none>
2026-02-14T15:59:24.678 [DEBUG] [Thread-188132] [transport.py] [_log()] server lang: <none>
2026-02-14T15:59:24.678 [DEBUG] [Thread-188132] [transport.py] [_log()] kex follows: False
2026-02-14T15:59:24.678 [DEBUG] [Thread-188132] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:59:24.678 [DEBUG] [Thread-188132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:59:24.678 [DEBUG] [Thread-188132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:59:24.678 [DEBUG] [Thread-188132] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:59:24.678 [DEBUG] [Thread-188132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:59:24.678 [DEBUG] [Thread-188132] [transport.py] [_log()] Compression: none
2026-02-14T15:59:24.678 [DEBUG] [Thread-188132] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:59:24.696 [DEBUG] [Thread-188132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:59:24.697 [DEBUG] [Thread-188132] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:59:24.697 [DEBUG] [Thread-188132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:59:24.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:59:24.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:59:24.700 [DEBUG] [Thread-188132] [transport.py] [_log()] userauth is OK
2026-02-14T15:59:24.701 [DEBUG] [Thread-188132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:59:24.701 [DEBUG] [Thread-188132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:59:24.701 [DEBUG] [Thread-188132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:59:24.701 [DEBUG] [Thread-188132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:59:24.722 [INFO] [Thread-188132] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:59:24.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:59:25.356 [DEBUG] [Thread-188132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:59:25.356 [DEBUG] [Thread-188132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:59:25.357 [DEBUG] [Thread-188132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:59:25.397 [DEBUG] [Thread-188132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:59:25.398 [DEBUG] [Thread-188132] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:59:25.401 [DEBUG] [Thread-188132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:59:25.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:59:25.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:59:25.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:59:25.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:59:25.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:59:25.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:59:25.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:59:25.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:59:25.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:59:25.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.582398 -999.00  +16.80  29.43     39   +3.00 1 1 1 1 1   888    0 12.70 -27.65 ----- 22.5 29.4 162.4 43.7 21.9 -26.9 20.9 -31.3 22.7 -25.0 23.6 -27.8
2026-02-14T15:59:25.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:59:25.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:59:25.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.582398
2026-02-14T15:59:25.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:59:25.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:59:25.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:59:25.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:59:25.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:59:25.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:59:15', tmtdew=16.17, humidity=33.39, cloud=0.0, wind=35.43, temperature=17.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:58:39.187', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:59:25.428 [DEBUG] [Thread-188132] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:59:25.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T15:59:25.525 [DEBUG] [Thread-188135] [transport.py] [_log()] starting thread (client mode): 0xa57b2020
2026-02-14T15:59:25.525 [DEBUG] [Thread-188135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:59:25.541 [DEBUG] [Thread-188135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:59:25.541 [INFO] [Thread-188135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:59:25.549 [DEBUG] [Thread-188135] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:59:25.549 [DEBUG] [Thread-188135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:59:25.549 [DEBUG] [Thread-188135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:59:25.549 [DEBUG] [Thread-188135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:59:25.549 [DEBUG] [Thread-188135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:59:25.549 [DEBUG] [Thread-188135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:59:25.549 [DEBUG] [Thread-188135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:59:25.549 [DEBUG] [Thread-188135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:59:25.549 [DEBUG] [Thread-188135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:59:25.549 [DEBUG] [Thread-188135] [transport.py] [_log()] client lang: <none>
2026-02-14T15:59:25.549 [DEBUG] [Thread-188135] [transport.py] [_log()] server lang: <none>
2026-02-14T15:59:25.549 [DEBUG] [Thread-188135] [transport.py] [_log()] kex follows: False
2026-02-14T15:59:25.549 [DEBUG] [Thread-188135] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:59:25.549 [DEBUG] [Thread-188135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:59:25.550 [DEBUG] [Thread-188135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:59:25.550 [DEBUG] [Thread-188135] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:59:25.550 [DEBUG] [Thread-188135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:59:25.550 [DEBUG] [Thread-188135] [transport.py] [_log()] Compression: none
2026-02-14T15:59:25.550 [DEBUG] [Thread-188135] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:59:25.614 [DEBUG] [Thread-188135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:59:25.615 [DEBUG] [Thread-188135] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:59:25.615 [DEBUG] [Thread-188135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:59:25.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:59:25.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:59:25.670 [DEBUG] [Thread-188135] [transport.py] [_log()] userauth is OK
2026-02-14T15:59:25.670 [DEBUG] [Thread-188135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:59:25.671 [DEBUG] [Thread-188135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:59:25.671 [DEBUG] [Thread-188135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:59:25.671 [DEBUG] [Thread-188135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:59:25.695 [INFO] [Thread-188135] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:59:25.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-14T15:59:25.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:59:26.491 [DEBUG] [Thread-188135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:59:26.491 [DEBUG] [Thread-188135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:59:26.539 [DEBUG] [Thread-188135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:59:26.539 [DEBUG] [Thread-188135] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:59:26.548 [DEBUG] [Thread-188135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:59:26.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:59:26.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-14T15:59:26.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-14T15:59:26.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:59:26.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:59:26.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:59:26.584 [DEBUG] [Thread-188135] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:59:30.082 [DEBUG] [Thread-188137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:59:32.583 [DEBUG] [Thread-188138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:59:47.635 [DEBUG] [Thread-188139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:59:51.536 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:59:51.537 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T15:59:56.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T15:59:56.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T15:59:56.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-14T15:59:58.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 59, 50), 16.45, 32.94, 0.0, 42.59, 17.38, 0, 0, 0, 2, 0, 0),)
2026-02-14T15:59:58.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:59:50
2026-02-14T15:59:58.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T15:59:58.983 [DEBUG] [Thread-188140] [transport.py] [_log()] starting thread (client mode): 0xa2dedd80
2026-02-14T15:59:58.983 [DEBUG] [Thread-188140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:59:59.003 [DEBUG] [Thread-188140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T15:59:59.003 [INFO] [Thread-188140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T15:59:59.005 [DEBUG] [Thread-188140] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:59:59.005 [DEBUG] [Thread-188140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T15:59:59.005 [DEBUG] [Thread-188140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:59:59.005 [DEBUG] [Thread-188140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:59:59.005 [DEBUG] [Thread-188140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:59:59.005 [DEBUG] [Thread-188140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:59:59.005 [DEBUG] [Thread-188140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:59:59.005 [DEBUG] [Thread-188140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:59:59.005 [DEBUG] [Thread-188140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:59:59.005 [DEBUG] [Thread-188140] [transport.py] [_log()] client lang: <none>
2026-02-14T15:59:59.005 [DEBUG] [Thread-188140] [transport.py] [_log()] server lang: <none>
2026-02-14T15:59:59.006 [DEBUG] [Thread-188140] [transport.py] [_log()] kex follows: False
2026-02-14T15:59:59.006 [DEBUG] [Thread-188140] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:59:59.006 [DEBUG] [Thread-188140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:59:59.006 [DEBUG] [Thread-188140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:59:59.006 [DEBUG] [Thread-188140] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:59:59.006 [DEBUG] [Thread-188140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:59:59.006 [DEBUG] [Thread-188140] [transport.py] [_log()] Compression: none
2026-02-14T15:59:59.006 [DEBUG] [Thread-188140] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:59:59.016 [DEBUG] [Thread-188140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:59:59.017 [DEBUG] [Thread-188140] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:59:59.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T15:59:59.018 [DEBUG] [Thread-188140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T15:59:59.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:59:59.020 [DEBUG] [Thread-188140] [transport.py] [_log()] userauth is OK
2026-02-14T15:59:59.021 [DEBUG] [Thread-188140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:59:59.021 [DEBUG] [Thread-188140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:59:59.021 [DEBUG] [Thread-188140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T15:59:59.021 [DEBUG] [Thread-188140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T15:59:59.037 [INFO] [Thread-188140] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T15:59:59.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T15:59:59.672 [DEBUG] [Thread-188140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T15:59:59.673 [DEBUG] [Thread-188140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T15:59:59.673 [DEBUG] [Thread-188140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T15:59:59.713 [DEBUG] [Thread-188140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T15:59:59.714 [DEBUG] [Thread-188140] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T15:59:59.717 [DEBUG] [Thread-188140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T15:59:59.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T15:59:59.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T15:59:59.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T15:59:59.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T15:59:59.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T15:59:59.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T15:59:59.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T15:59:59.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T15:59:59.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T15:59:59.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.582746 -999.00  +16.90  32.85     39   +3.00 1 1 2 1 1   888    0 13.10 -22.15 ----- 25.5 32.9 171.2 41.0 21.9 -27.9 21.2 -26.6 22.8 -25.4 23.7 -28.1
2026-02-14T15:59:59.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T15:59:59.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T15:59:59.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.582746
2026-02-14T15:59:59.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T15:59:59.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T15:59:59.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T15:59:59.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T15:59:59.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T15:59:59.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:59:50', tmtdew=16.45, humidity=32.94, cloud=0.0, wind=42.59, temperature=17.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:59:09.254', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T15:59:59.745 [DEBUG] [Thread-188140] [transport.py] [_log()] EOF in transport thread
2026-02-14T15:59:59.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-14T15:59:59.839 [DEBUG] [Thread-188143] [transport.py] [_log()] starting thread (client mode): 0xa2decdf0
2026-02-14T15:59:59.840 [DEBUG] [Thread-188143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T15:59:59.859 [DEBUG] [Thread-188143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T15:59:59.859 [INFO] [Thread-188143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T15:59:59.866 [DEBUG] [Thread-188143] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T15:59:59.866 [DEBUG] [Thread-188143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T15:59:59.867 [DEBUG] [Thread-188143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T15:59:59.867 [DEBUG] [Thread-188143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:59:59.867 [DEBUG] [Thread-188143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T15:59:59.867 [DEBUG] [Thread-188143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:59:59.867 [DEBUG] [Thread-188143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T15:59:59.867 [DEBUG] [Thread-188143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T15:59:59.867 [DEBUG] [Thread-188143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T15:59:59.867 [DEBUG] [Thread-188143] [transport.py] [_log()] client lang: <none>
2026-02-14T15:59:59.868 [DEBUG] [Thread-188143] [transport.py] [_log()] server lang: <none>
2026-02-14T15:59:59.868 [DEBUG] [Thread-188143] [transport.py] [_log()] kex follows: False
2026-02-14T15:59:59.868 [DEBUG] [Thread-188143] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T15:59:59.868 [DEBUG] [Thread-188143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T15:59:59.868 [DEBUG] [Thread-188143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T15:59:59.868 [DEBUG] [Thread-188143] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T15:59:59.868 [DEBUG] [Thread-188143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T15:59:59.869 [DEBUG] [Thread-188143] [transport.py] [_log()] Compression: none
2026-02-14T15:59:59.869 [DEBUG] [Thread-188143] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T15:59:59.925 [DEBUG] [Thread-188143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T15:59:59.925 [DEBUG] [Thread-188143] [transport.py] [_log()] Switch to new keys ...
2026-02-14T15:59:59.926 [DEBUG] [Thread-188143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T15:59:59.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T15:59:59.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T15:59:59.981 [DEBUG] [Thread-188143] [transport.py] [_log()] userauth is OK
2026-02-14T15:59:59.981 [DEBUG] [Thread-188143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T15:59:59.982 [DEBUG] [Thread-188143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T15:59:59.982 [DEBUG] [Thread-188143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T15:59:59.982 [DEBUG] [Thread-188143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:00:00.001 [INFO] [Thread-188143] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:00:00.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-14T16:00:00.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:00:00.808 [DEBUG] [Thread-188143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:00:00.808 [DEBUG] [Thread-188143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:00:00.855 [DEBUG] [Thread-188143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:00:00.855 [DEBUG] [Thread-188143] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:00:00.864 [DEBUG] [Thread-188143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:00:00.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:00:00.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:00:00.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:00:00.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:00:00.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:00:00.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:00:00.901 [DEBUG] [Thread-188143] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:00:02.671 [DEBUG] [Thread-188145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:00:17.735 [DEBUG] [Thread-188146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:00:30.126 [DEBUG] [Thread-188147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:00:30.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:00:30.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:00:30.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-14T16:00:32.769 [DEBUG] [Thread-188148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:00:32.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 15, 59, 50), 16.45, 32.94, 0.0, 42.59, 17.38, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:00:32.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 15:59:50
2026-02-14T16:00:33.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:00:33.292 [DEBUG] [Thread-188149] [transport.py] [_log()] starting thread (client mode): 0xa2dc3820
2026-02-14T16:00:33.292 [DEBUG] [Thread-188149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:00:33.313 [DEBUG] [Thread-188149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:00:33.313 [INFO] [Thread-188149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:00:33.316 [DEBUG] [Thread-188149] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:00:33.316 [DEBUG] [Thread-188149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:00:33.316 [DEBUG] [Thread-188149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:00:33.316 [DEBUG] [Thread-188149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:00:33.316 [DEBUG] [Thread-188149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:00:33.316 [DEBUG] [Thread-188149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:00:33.316 [DEBUG] [Thread-188149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:00:33.316 [DEBUG] [Thread-188149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:00:33.317 [DEBUG] [Thread-188149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:00:33.317 [DEBUG] [Thread-188149] [transport.py] [_log()] client lang: <none>
2026-02-14T16:00:33.317 [DEBUG] [Thread-188149] [transport.py] [_log()] server lang: <none>
2026-02-14T16:00:33.317 [DEBUG] [Thread-188149] [transport.py] [_log()] kex follows: False
2026-02-14T16:00:33.317 [DEBUG] [Thread-188149] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:00:33.317 [DEBUG] [Thread-188149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:00:33.317 [DEBUG] [Thread-188149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:00:33.317 [DEBUG] [Thread-188149] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:00:33.317 [DEBUG] [Thread-188149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:00:33.317 [DEBUG] [Thread-188149] [transport.py] [_log()] Compression: none
2026-02-14T16:00:33.317 [DEBUG] [Thread-188149] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:00:33.335 [DEBUG] [Thread-188149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:00:33.335 [DEBUG] [Thread-188149] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:00:33.336 [DEBUG] [Thread-188149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:00:33.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:00:33.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:00:33.338 [DEBUG] [Thread-188149] [transport.py] [_log()] userauth is OK
2026-02-14T16:00:33.339 [DEBUG] [Thread-188149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:00:33.339 [DEBUG] [Thread-188149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:00:33.339 [DEBUG] [Thread-188149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:00:33.339 [DEBUG] [Thread-188149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:00:33.364 [INFO] [Thread-188149] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:00:33.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:00:33.984 [DEBUG] [Thread-188149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:00:33.985 [DEBUG] [Thread-188149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:00:33.985 [DEBUG] [Thread-188149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:00:34.025 [DEBUG] [Thread-188149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:00:34.026 [DEBUG] [Thread-188149] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:00:34.029 [DEBUG] [Thread-188149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:00:34.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:00:34.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:00:34.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:00:34.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:00:34.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:00:34.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:00:34.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:00:34.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:00:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:00:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.583093 -999.00  +16.70  27.68     39   +3.00 1 1 1 1 1   888    0 13.29 -19.22 ----- 29.1 27.7 164.5 39.6 21.8 -28.2 21.1 -28.1 22.6 -26.8 23.6 -28.1
2026-02-14T16:00:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:00:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:00:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.583093
2026-02-14T16:00:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:00:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:00:34.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:00:34.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:00:34.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:00:34.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T15:59:50', tmtdew=16.45, humidity=32.94, cloud=0.0, wind=42.59, temperature=17.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T13:59:39.235', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:00:34.057 [DEBUG] [Thread-188149] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:00:34.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T16:00:34.154 [DEBUG] [Thread-188152] [transport.py] [_log()] starting thread (client mode): 0xa2d23be0
2026-02-14T16:00:34.154 [DEBUG] [Thread-188152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:00:34.170 [DEBUG] [Thread-188152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:00:34.170 [INFO] [Thread-188152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:00:34.177 [DEBUG] [Thread-188152] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:00:34.177 [DEBUG] [Thread-188152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:00:34.178 [DEBUG] [Thread-188152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:00:34.178 [DEBUG] [Thread-188152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:00:34.178 [DEBUG] [Thread-188152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:00:34.178 [DEBUG] [Thread-188152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:00:34.178 [DEBUG] [Thread-188152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:00:34.178 [DEBUG] [Thread-188152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:00:34.178 [DEBUG] [Thread-188152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:00:34.178 [DEBUG] [Thread-188152] [transport.py] [_log()] client lang: <none>
2026-02-14T16:00:34.178 [DEBUG] [Thread-188152] [transport.py] [_log()] server lang: <none>
2026-02-14T16:00:34.178 [DEBUG] [Thread-188152] [transport.py] [_log()] kex follows: False
2026-02-14T16:00:34.178 [DEBUG] [Thread-188152] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:00:34.178 [DEBUG] [Thread-188152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:00:34.178 [DEBUG] [Thread-188152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:00:34.178 [DEBUG] [Thread-188152] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:00:34.178 [DEBUG] [Thread-188152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:00:34.178 [DEBUG] [Thread-188152] [transport.py] [_log()] Compression: none
2026-02-14T16:00:34.178 [DEBUG] [Thread-188152] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:00:34.235 [DEBUG] [Thread-188152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:00:34.236 [DEBUG] [Thread-188152] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:00:34.236 [DEBUG] [Thread-188152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:00:34.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:00:34.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:00:34.293 [DEBUG] [Thread-188152] [transport.py] [_log()] userauth is OK
2026-02-14T16:00:34.293 [DEBUG] [Thread-188152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:00:34.294 [DEBUG] [Thread-188152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:00:34.294 [DEBUG] [Thread-188152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:00:34.294 [DEBUG] [Thread-188152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:00:34.313 [INFO] [Thread-188152] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:00:34.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-14T16:00:34.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:00:35.203 [DEBUG] [Thread-188152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:00:35.203 [DEBUG] [Thread-188152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:00:35.251 [DEBUG] [Thread-188152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:00:35.251 [DEBUG] [Thread-188152] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:00:35.261 [DEBUG] [Thread-188152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:00:35.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:00:35.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:00:35.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-14T16:00:35.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:00:35.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:00:35.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:00:35.298 [DEBUG] [Thread-188152] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:00:47.810 [DEBUG] [Thread-188154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:00:51.692 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:00:51.693 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:01:02.868 [DEBUG] [Thread-188155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:01:05.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:01:05.304 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:01:05.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-14T16:01:07.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 0, 25), 16.43, 32.97, 0.0, 39.96, 17.33, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:01:07.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:00:25
2026-02-14T16:01:07.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:01:07.979 [DEBUG] [Thread-188156] [transport.py] [_log()] starting thread (client mode): 0xa2dec370
2026-02-14T16:01:07.979 [DEBUG] [Thread-188156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:01:07.999 [DEBUG] [Thread-188156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:01:07.999 [INFO] [Thread-188156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:01:08.002 [DEBUG] [Thread-188156] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:01:08.002 [DEBUG] [Thread-188156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:01:08.002 [DEBUG] [Thread-188156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:01:08.002 [DEBUG] [Thread-188156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:01:08.002 [DEBUG] [Thread-188156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:01:08.002 [DEBUG] [Thread-188156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:01:08.002 [DEBUG] [Thread-188156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:01:08.002 [DEBUG] [Thread-188156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:01:08.002 [DEBUG] [Thread-188156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:01:08.002 [DEBUG] [Thread-188156] [transport.py] [_log()] client lang: <none>
2026-02-14T16:01:08.002 [DEBUG] [Thread-188156] [transport.py] [_log()] server lang: <none>
2026-02-14T16:01:08.003 [DEBUG] [Thread-188156] [transport.py] [_log()] kex follows: False
2026-02-14T16:01:08.003 [DEBUG] [Thread-188156] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:01:08.003 [DEBUG] [Thread-188156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:01:08.003 [DEBUG] [Thread-188156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:01:08.003 [DEBUG] [Thread-188156] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:01:08.003 [DEBUG] [Thread-188156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:01:08.003 [DEBUG] [Thread-188156] [transport.py] [_log()] Compression: none
2026-02-14T16:01:08.003 [DEBUG] [Thread-188156] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:01:08.020 [DEBUG] [Thread-188156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:01:08.021 [DEBUG] [Thread-188156] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:01:08.021 [DEBUG] [Thread-188156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:01:08.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:01:08.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:01:08.065 [DEBUG] [Thread-188156] [transport.py] [_log()] userauth is OK
2026-02-14T16:01:08.065 [DEBUG] [Thread-188156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:01:08.065 [DEBUG] [Thread-188156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:01:08.065 [DEBUG] [Thread-188156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:01:08.065 [DEBUG] [Thread-188156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:01:08.102 [INFO] [Thread-188156] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:01:08.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:01:08.769 [DEBUG] [Thread-188156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:01:08.769 [DEBUG] [Thread-188156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:01:08.769 [DEBUG] [Thread-188156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:01:08.809 [DEBUG] [Thread-188156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:01:08.809 [DEBUG] [Thread-188156] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:01:08.813 [DEBUG] [Thread-188156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:01:08.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:01:08.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:01:08.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:01:08.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:01:08.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:01:08.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:01:08.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:01:08.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:01:08.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:01:08.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.583787 -999.00  +16.40  34.86     40   +2.90 1 1 2 1 1   888    0 13.29 -19.21 ----- 34.1 34.9 176.6 40.6 21.8 -27.9 21.1 -27.3 22.6 -27.4 23.5 -28.6
2026-02-14T16:01:08.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:01:08.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:01:08.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.583787
2026-02-14T16:01:08.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:01:08.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:01:08.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:01:08.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:01:08.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:01:08.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:00:25', tmtdew=16.43, humidity=32.97, cloud=0.0, wind=39.96, temperature=17.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:00:39.197', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:01:08.840 [DEBUG] [Thread-188156] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:01:08.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-14T16:01:08.936 [DEBUG] [Thread-188159] [transport.py] [_log()] starting thread (client mode): 0xa2defbe0
2026-02-14T16:01:08.936 [DEBUG] [Thread-188159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:01:08.951 [DEBUG] [Thread-188159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:01:08.951 [INFO] [Thread-188159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:01:08.959 [DEBUG] [Thread-188159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:01:08.959 [DEBUG] [Thread-188159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:01:08.959 [DEBUG] [Thread-188159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:01:08.959 [DEBUG] [Thread-188159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:01:08.959 [DEBUG] [Thread-188159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:01:08.959 [DEBUG] [Thread-188159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:01:08.959 [DEBUG] [Thread-188159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:01:08.959 [DEBUG] [Thread-188159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:01:08.959 [DEBUG] [Thread-188159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:01:08.959 [DEBUG] [Thread-188159] [transport.py] [_log()] client lang: <none>
2026-02-14T16:01:08.959 [DEBUG] [Thread-188159] [transport.py] [_log()] server lang: <none>
2026-02-14T16:01:08.959 [DEBUG] [Thread-188159] [transport.py] [_log()] kex follows: False
2026-02-14T16:01:08.959 [DEBUG] [Thread-188159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:01:08.959 [DEBUG] [Thread-188159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:01:08.959 [DEBUG] [Thread-188159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:01:08.959 [DEBUG] [Thread-188159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:01:08.959 [DEBUG] [Thread-188159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:01:08.959 [DEBUG] [Thread-188159] [transport.py] [_log()] Compression: none
2026-02-14T16:01:08.959 [DEBUG] [Thread-188159] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:01:09.014 [DEBUG] [Thread-188159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:01:09.014 [DEBUG] [Thread-188159] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:01:09.014 [DEBUG] [Thread-188159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:01:09.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:01:09.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:01:09.072 [DEBUG] [Thread-188159] [transport.py] [_log()] userauth is OK
2026-02-14T16:01:09.072 [DEBUG] [Thread-188159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:01:09.072 [DEBUG] [Thread-188159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:01:09.072 [DEBUG] [Thread-188159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:01:09.072 [DEBUG] [Thread-188159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:01:09.089 [INFO] [Thread-188159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:01:09.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:01:09.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:01:09.938 [DEBUG] [Thread-188159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:01:09.939 [DEBUG] [Thread-188159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:01:09.986 [DEBUG] [Thread-188159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:01:09.987 [DEBUG] [Thread-188159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:01:09.996 [DEBUG] [Thread-188159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:01:10.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:01:10.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:01:10.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:01:10.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:01:10.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:01:10.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:01:10.032 [DEBUG] [Thread-188159] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:01:17.904 [DEBUG] [Thread-188161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:01:30.171 [DEBUG] [Thread-188162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:01:32.955 [DEBUG] [Thread-188163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:01:40.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:01:40.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:01:40.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-14T16:01:42.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 1), 15.97, 34.17, 0.0, 33.58, 16.92, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:01:42.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:01:00
2026-02-14T16:01:42.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:01:42.802 [DEBUG] [Thread-188164] [transport.py] [_log()] starting thread (client mode): 0xa57b0a00
2026-02-14T16:01:42.802 [DEBUG] [Thread-188164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:01:42.824 [DEBUG] [Thread-188164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:01:42.824 [INFO] [Thread-188164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:01:42.827 [DEBUG] [Thread-188164] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:01:42.827 [DEBUG] [Thread-188164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:01:42.827 [DEBUG] [Thread-188164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:01:42.827 [DEBUG] [Thread-188164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:01:42.827 [DEBUG] [Thread-188164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:01:42.827 [DEBUG] [Thread-188164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:01:42.828 [DEBUG] [Thread-188164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:01:42.828 [DEBUG] [Thread-188164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:01:42.828 [DEBUG] [Thread-188164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:01:42.828 [DEBUG] [Thread-188164] [transport.py] [_log()] client lang: <none>
2026-02-14T16:01:42.828 [DEBUG] [Thread-188164] [transport.py] [_log()] server lang: <none>
2026-02-14T16:01:42.828 [DEBUG] [Thread-188164] [transport.py] [_log()] kex follows: False
2026-02-14T16:01:42.828 [DEBUG] [Thread-188164] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:01:42.828 [DEBUG] [Thread-188164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:01:42.828 [DEBUG] [Thread-188164] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:01:42.828 [DEBUG] [Thread-188164] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:01:42.828 [DEBUG] [Thread-188164] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:01:42.828 [DEBUG] [Thread-188164] [transport.py] [_log()] Compression: none
2026-02-14T16:01:42.828 [DEBUG] [Thread-188164] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:01:42.845 [DEBUG] [Thread-188164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:01:42.846 [DEBUG] [Thread-188164] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:01:42.847 [DEBUG] [Thread-188164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:01:42.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:01:42.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:01:42.849 [DEBUG] [Thread-188164] [transport.py] [_log()] userauth is OK
2026-02-14T16:01:42.849 [DEBUG] [Thread-188164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:01:42.849 [DEBUG] [Thread-188164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:01:42.850 [DEBUG] [Thread-188164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:01:42.850 [DEBUG] [Thread-188164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:01:42.863 [INFO] [Thread-188164] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:01:42.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:01:43.483 [DEBUG] [Thread-188164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:01:43.483 [DEBUG] [Thread-188164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:01:43.483 [DEBUG] [Thread-188164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:01:43.525 [DEBUG] [Thread-188164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:01:43.525 [DEBUG] [Thread-188164] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:01:43.528 [DEBUG] [Thread-188164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:01:43.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:01:43.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:01:43.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:01:43.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:01:43.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:01:43.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:01:43.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:01:43.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:01:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:01:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.584134 -999.00  +16.30  26.94     40   +2.90 1 1 1 1 1   888    0 13.10 -21.35 ----- 25.4 26.9 153.8 39.0 21.7 -28.8 21.0 -29.3 22.6 -26.3 23.5 -28.8
2026-02-14T16:01:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:01:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:01:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.584134
2026-02-14T16:01:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:01:43.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:01:43.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:01:43.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:01:43.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:01:43.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:01:00', tmtdew=15.97, humidity=34.17, cloud=0.0, wind=33.58, temperature=16.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:01:09.178', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:01:43.559 [DEBUG] [Thread-188164] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:01:43.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-14T16:01:43.654 [DEBUG] [Thread-188167] [transport.py] [_log()] starting thread (client mode): 0xa57b2350
2026-02-14T16:01:43.654 [DEBUG] [Thread-188167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:01:43.668 [DEBUG] [Thread-188167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:01:43.668 [INFO] [Thread-188167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:01:43.676 [DEBUG] [Thread-188167] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:01:43.676 [DEBUG] [Thread-188167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:01:43.676 [DEBUG] [Thread-188167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:01:43.676 [DEBUG] [Thread-188167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:01:43.676 [DEBUG] [Thread-188167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:01:43.676 [DEBUG] [Thread-188167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:01:43.677 [DEBUG] [Thread-188167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:01:43.677 [DEBUG] [Thread-188167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:01:43.677 [DEBUG] [Thread-188167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:01:43.677 [DEBUG] [Thread-188167] [transport.py] [_log()] client lang: <none>
2026-02-14T16:01:43.677 [DEBUG] [Thread-188167] [transport.py] [_log()] server lang: <none>
2026-02-14T16:01:43.677 [DEBUG] [Thread-188167] [transport.py] [_log()] kex follows: False
2026-02-14T16:01:43.677 [DEBUG] [Thread-188167] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:01:43.677 [DEBUG] [Thread-188167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:01:43.677 [DEBUG] [Thread-188167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:01:43.677 [DEBUG] [Thread-188167] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:01:43.677 [DEBUG] [Thread-188167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:01:43.677 [DEBUG] [Thread-188167] [transport.py] [_log()] Compression: none
2026-02-14T16:01:43.677 [DEBUG] [Thread-188167] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:01:43.735 [DEBUG] [Thread-188167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:01:43.736 [DEBUG] [Thread-188167] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:01:43.736 [DEBUG] [Thread-188167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:01:43.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:01:43.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:01:43.792 [DEBUG] [Thread-188167] [transport.py] [_log()] userauth is OK
2026-02-14T16:01:43.792 [DEBUG] [Thread-188167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:01:43.792 [DEBUG] [Thread-188167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:01:43.792 [DEBUG] [Thread-188167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:01:43.792 [DEBUG] [Thread-188167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:01:43.811 [INFO] [Thread-188167] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:01:43.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-14T16:01:43.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:01:44.611 [DEBUG] [Thread-188167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:01:44.612 [DEBUG] [Thread-188167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:01:44.659 [DEBUG] [Thread-188167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:01:44.659 [DEBUG] [Thread-188167] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:01:44.668 [DEBUG] [Thread-188167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:01:44.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:01:44.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-14T16:01:44.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:01:44.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:01:44.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:01:44.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:01:44.705 [DEBUG] [Thread-188167] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:01:47.992 [DEBUG] [Thread-188169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:01:51.833 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:01:51.834 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:02:03.050 [DEBUG] [Thread-188170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:02:14.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:02:14.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:02:14.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:02:16.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 1, 37), 17.33, 31.17, 0.0, 33.27, 18.3, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:02:16.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:01:37
2026-02-14T16:02:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:02:17.131 [DEBUG] [Thread-188171] [transport.py] [_log()] starting thread (client mode): 0xa57b2710
2026-02-14T16:02:17.132 [DEBUG] [Thread-188171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:02:17.153 [DEBUG] [Thread-188171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:02:17.153 [INFO] [Thread-188171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:02:17.156 [DEBUG] [Thread-188171] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:02:17.157 [DEBUG] [Thread-188171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:02:17.157 [DEBUG] [Thread-188171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:02:17.157 [DEBUG] [Thread-188171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:02:17.157 [DEBUG] [Thread-188171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:02:17.157 [DEBUG] [Thread-188171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:02:17.157 [DEBUG] [Thread-188171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:02:17.157 [DEBUG] [Thread-188171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:02:17.158 [DEBUG] [Thread-188171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:02:17.158 [DEBUG] [Thread-188171] [transport.py] [_log()] client lang: <none>
2026-02-14T16:02:17.158 [DEBUG] [Thread-188171] [transport.py] [_log()] server lang: <none>
2026-02-14T16:02:17.158 [DEBUG] [Thread-188171] [transport.py] [_log()] kex follows: False
2026-02-14T16:02:17.158 [DEBUG] [Thread-188171] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:02:17.158 [DEBUG] [Thread-188171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:02:17.158 [DEBUG] [Thread-188171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:02:17.158 [DEBUG] [Thread-188171] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:02:17.158 [DEBUG] [Thread-188171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:02:17.158 [DEBUG] [Thread-188171] [transport.py] [_log()] Compression: none
2026-02-14T16:02:17.158 [DEBUG] [Thread-188171] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:02:17.176 [DEBUG] [Thread-188171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:02:17.176 [DEBUG] [Thread-188171] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:02:17.177 [DEBUG] [Thread-188171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:02:17.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:02:17.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:02:17.179 [DEBUG] [Thread-188171] [transport.py] [_log()] userauth is OK
2026-02-14T16:02:17.179 [DEBUG] [Thread-188171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:02:17.179 [DEBUG] [Thread-188171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:02:17.179 [DEBUG] [Thread-188171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:02:17.180 [DEBUG] [Thread-188171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:02:17.204 [INFO] [Thread-188171] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:02:17.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:02:17.839 [DEBUG] [Thread-188171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:02:17.839 [DEBUG] [Thread-188171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:02:17.840 [DEBUG] [Thread-188171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:02:17.880 [DEBUG] [Thread-188171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:02:17.881 [DEBUG] [Thread-188171] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:02:17.884 [DEBUG] [Thread-188171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:02:17.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:02:17.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:02:17.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:02:17.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:02:17.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:02:17.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:02:17.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:02:17.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:02:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:02:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.584482 -999.00  +16.40  20.58     40   +2.90 1 1 1 1 1   888    0 12.85 -22.61 ----- 20.9 20.6 156.8 27.4 21.8 -28.3 21.1 -26.7 22.6 -26.3 23.6 -28.1
2026-02-14T16:02:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:02:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:02:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.584482
2026-02-14T16:02:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:02:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:02:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:02:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:02:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:02:17.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:01:37', tmtdew=17.33, humidity=31.17, cloud=0.0, wind=33.27, temperature=18.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:01:39.245', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:02:17.909 [DEBUG] [Thread-188171] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:02:17.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-14T16:02:18.004 [DEBUG] [Thread-188174] [transport.py] [_log()] starting thread (client mode): 0xa57b35e0
2026-02-14T16:02:18.004 [DEBUG] [Thread-188174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:02:18.018 [DEBUG] [Thread-188174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:02:18.018 [INFO] [Thread-188174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:02:18.026 [DEBUG] [Thread-188174] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:02:18.026 [DEBUG] [Thread-188174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:02:18.026 [DEBUG] [Thread-188174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:02:18.026 [DEBUG] [Thread-188174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:02:18.026 [DEBUG] [Thread-188174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:02:18.027 [DEBUG] [Thread-188174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:02:18.027 [DEBUG] [Thread-188174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:02:18.027 [DEBUG] [Thread-188174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:02:18.027 [DEBUG] [Thread-188174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:02:18.027 [DEBUG] [Thread-188174] [transport.py] [_log()] client lang: <none>
2026-02-14T16:02:18.027 [DEBUG] [Thread-188174] [transport.py] [_log()] server lang: <none>
2026-02-14T16:02:18.027 [DEBUG] [Thread-188174] [transport.py] [_log()] kex follows: False
2026-02-14T16:02:18.027 [DEBUG] [Thread-188174] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:02:18.027 [DEBUG] [Thread-188174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:02:18.027 [DEBUG] [Thread-188174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:02:18.027 [DEBUG] [Thread-188174] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:02:18.027 [DEBUG] [Thread-188174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:02:18.027 [DEBUG] [Thread-188174] [transport.py] [_log()] Compression: none
2026-02-14T16:02:18.027 [DEBUG] [Thread-188174] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:02:18.086 [DEBUG] [Thread-188176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:02:18.088 [DEBUG] [Thread-188174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:02:18.089 [DEBUG] [Thread-188174] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:02:18.089 [DEBUG] [Thread-188174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:02:18.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:02:18.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:02:18.147 [DEBUG] [Thread-188174] [transport.py] [_log()] userauth is OK
2026-02-14T16:02:18.147 [DEBUG] [Thread-188174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:02:18.147 [DEBUG] [Thread-188174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:02:18.148 [DEBUG] [Thread-188174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:02:18.148 [DEBUG] [Thread-188174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:02:18.166 [INFO] [Thread-188174] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:02:18.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-14T16:02:18.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:02:18.998 [DEBUG] [Thread-188174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:02:18.999 [DEBUG] [Thread-188174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:02:19.046 [DEBUG] [Thread-188174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:02:19.047 [DEBUG] [Thread-188174] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:02:19.056 [DEBUG] [Thread-188174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:02:19.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:02:19.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-14T16:02:19.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:02:19.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:02:19.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:02:19.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:02:19.091 [DEBUG] [Thread-188174] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:02:30.222 [DEBUG] [Thread-188177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:02:33.131 [DEBUG] [Thread-188178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:02:48.170 [DEBUG] [Thread-188179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:02:49.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:02:49.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:02:49.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-14T16:02:51.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 2, 12), 15.86, 34.7, 0.0, 28.97, 16.8, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:02:51.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:02:12
2026-02-14T16:02:51.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:02:51.666 [DEBUG] [Thread-188180] [transport.py] [_log()] starting thread (client mode): 0xa5758dc0
2026-02-14T16:02:51.667 [DEBUG] [Thread-188180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:02:51.687 [DEBUG] [Thread-188180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:02:51.687 [INFO] [Thread-188180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:02:51.690 [DEBUG] [Thread-188180] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:02:51.690 [DEBUG] [Thread-188180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:02:51.691 [DEBUG] [Thread-188180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:02:51.691 [DEBUG] [Thread-188180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:02:51.691 [DEBUG] [Thread-188180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:02:51.691 [DEBUG] [Thread-188180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:02:51.691 [DEBUG] [Thread-188180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:02:51.691 [DEBUG] [Thread-188180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:02:51.691 [DEBUG] [Thread-188180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:02:51.691 [DEBUG] [Thread-188180] [transport.py] [_log()] client lang: <none>
2026-02-14T16:02:51.691 [DEBUG] [Thread-188180] [transport.py] [_log()] server lang: <none>
2026-02-14T16:02:51.691 [DEBUG] [Thread-188180] [transport.py] [_log()] kex follows: False
2026-02-14T16:02:51.691 [DEBUG] [Thread-188180] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:02:51.691 [DEBUG] [Thread-188180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:02:51.691 [DEBUG] [Thread-188180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:02:51.691 [DEBUG] [Thread-188180] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:02:51.692 [DEBUG] [Thread-188180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:02:51.692 [DEBUG] [Thread-188180] [transport.py] [_log()] Compression: none
2026-02-14T16:02:51.692 [DEBUG] [Thread-188180] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:02:51.710 [DEBUG] [Thread-188180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:02:51.711 [DEBUG] [Thread-188180] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:02:51.712 [DEBUG] [Thread-188180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:02:51.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:02:51.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:02:51.714 [DEBUG] [Thread-188180] [transport.py] [_log()] userauth is OK
2026-02-14T16:02:51.715 [DEBUG] [Thread-188180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:02:51.715 [DEBUG] [Thread-188180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:02:51.715 [DEBUG] [Thread-188180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:02:51.715 [DEBUG] [Thread-188180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:02:51.749 [INFO] [Thread-188180] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:02:51.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:02:51.975 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:02:51.976 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:02:52.406 [DEBUG] [Thread-188180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:02:52.407 [DEBUG] [Thread-188180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:02:52.407 [DEBUG] [Thread-188180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:02:52.447 [DEBUG] [Thread-188180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:02:52.448 [DEBUG] [Thread-188180] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:02:52.451 [DEBUG] [Thread-188180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:02:52.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:02:52.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:02:52.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:02:52.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:02:52.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:02:52.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:02:52.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:02:52.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:02:52.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:02:52.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.584829 -999.00  +16.30  18.89     40   +2.80 1 1 1 1 1   888    0 13.11 -21.25 ----- 19.0 18.9 172.6 31.0 21.8 -27.4 21.1 -26.9 22.6 -26.2 23.6 -27.2
2026-02-14T16:02:52.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:02:52.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:02:52.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.584829
2026-02-14T16:02:52.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:02:52.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:02:52.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:02:52.479 [DEBUG] [Thread-188180] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:02:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:02:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:02:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:02:12', tmtdew=15.86, humidity=34.7, cloud=0.0, wind=28.97, temperature=16.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:02:09.226', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:02:52.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-14T16:02:52.587 [DEBUG] [Thread-188183] [transport.py] [_log()] starting thread (client mode): 0xa575a890
2026-02-14T16:02:52.587 [DEBUG] [Thread-188183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:02:52.601 [DEBUG] [Thread-188183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:02:52.601 [INFO] [Thread-188183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:02:52.609 [DEBUG] [Thread-188183] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:02:52.609 [DEBUG] [Thread-188183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:02:52.609 [DEBUG] [Thread-188183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:02:52.609 [DEBUG] [Thread-188183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:02:52.609 [DEBUG] [Thread-188183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:02:52.609 [DEBUG] [Thread-188183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:02:52.609 [DEBUG] [Thread-188183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:02:52.609 [DEBUG] [Thread-188183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:02:52.610 [DEBUG] [Thread-188183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:02:52.610 [DEBUG] [Thread-188183] [transport.py] [_log()] client lang: <none>
2026-02-14T16:02:52.610 [DEBUG] [Thread-188183] [transport.py] [_log()] server lang: <none>
2026-02-14T16:02:52.610 [DEBUG] [Thread-188183] [transport.py] [_log()] kex follows: False
2026-02-14T16:02:52.610 [DEBUG] [Thread-188183] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:02:52.610 [DEBUG] [Thread-188183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:02:52.610 [DEBUG] [Thread-188183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:02:52.610 [DEBUG] [Thread-188183] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:02:52.610 [DEBUG] [Thread-188183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:02:52.610 [DEBUG] [Thread-188183] [transport.py] [_log()] Compression: none
2026-02-14T16:02:52.610 [DEBUG] [Thread-188183] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:02:52.671 [DEBUG] [Thread-188183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:02:52.672 [DEBUG] [Thread-188183] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:02:52.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:02:52.673 [DEBUG] [Thread-188183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:02:52.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:02:52.727 [DEBUG] [Thread-188183] [transport.py] [_log()] userauth is OK
2026-02-14T16:02:52.727 [DEBUG] [Thread-188183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:02:52.727 [DEBUG] [Thread-188183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:02:52.727 [DEBUG] [Thread-188183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:02:52.727 [DEBUG] [Thread-188183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:02:52.745 [INFO] [Thread-188183] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:02:52.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-14T16:02:52.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:02:53.561 [DEBUG] [Thread-188183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:02:53.561 [DEBUG] [Thread-188183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:02:53.609 [DEBUG] [Thread-188183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:02:53.610 [DEBUG] [Thread-188183] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:02:53.618 [DEBUG] [Thread-188183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:02:53.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:02:53.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-14T16:02: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') -> 00000000
2026-02-14T16:02:53.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:02:53.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:02:53.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:02:53.655 [DEBUG] [Thread-188183] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:03:03.204 [DEBUG] [Thread-188185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:03:18.251 [DEBUG] [Thread-188186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:03:23.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:03:23.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:03:23.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-14T16:03:25.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 2, 47), 15.88, 34.32, 0.0, 25.2, 16.67, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:03:25.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:02:47
2026-02-14T16:03:25.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:03:26.043 [DEBUG] [Thread-188187] [transport.py] [_log()] starting thread (client mode): 0xa2dc1120
2026-02-14T16:03:26.043 [DEBUG] [Thread-188187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:03:26.066 [DEBUG] [Thread-188187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:03:26.066 [INFO] [Thread-188187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:03:26.069 [DEBUG] [Thread-188187] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:03:26.069 [DEBUG] [Thread-188187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:03:26.069 [DEBUG] [Thread-188187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:03:26.069 [DEBUG] [Thread-188187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:03:26.069 [DEBUG] [Thread-188187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:03:26.069 [DEBUG] [Thread-188187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:03:26.069 [DEBUG] [Thread-188187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:03:26.069 [DEBUG] [Thread-188187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:03:26.069 [DEBUG] [Thread-188187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:03:26.069 [DEBUG] [Thread-188187] [transport.py] [_log()] client lang: <none>
2026-02-14T16:03:26.069 [DEBUG] [Thread-188187] [transport.py] [_log()] server lang: <none>
2026-02-14T16:03:26.069 [DEBUG] [Thread-188187] [transport.py] [_log()] kex follows: False
2026-02-14T16:03:26.069 [DEBUG] [Thread-188187] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:03:26.070 [DEBUG] [Thread-188187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:03:26.070 [DEBUG] [Thread-188187] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:03:26.070 [DEBUG] [Thread-188187] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:03:26.070 [DEBUG] [Thread-188187] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:03:26.070 [DEBUG] [Thread-188187] [transport.py] [_log()] Compression: none
2026-02-14T16:03:26.070 [DEBUG] [Thread-188187] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:03:26.089 [DEBUG] [Thread-188187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:03:26.089 [DEBUG] [Thread-188187] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:03:26.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:03:26.091 [DEBUG] [Thread-188187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:03:26.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:03:26.093 [DEBUG] [Thread-188187] [transport.py] [_log()] userauth is OK
2026-02-14T16:03:26.093 [DEBUG] [Thread-188187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:03:26.094 [DEBUG] [Thread-188187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:03:26.094 [DEBUG] [Thread-188187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:03:26.094 [DEBUG] [Thread-188187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:03:26.130 [INFO] [Thread-188187] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:03:26.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:03:26.775 [DEBUG] [Thread-188187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:03:26.775 [DEBUG] [Thread-188187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:03:26.775 [DEBUG] [Thread-188187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:03:26.816 [DEBUG] [Thread-188187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:03:26.817 [DEBUG] [Thread-188187] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:03:26.820 [DEBUG] [Thread-188187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:03:26.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:03:26.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:03:26.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:03:26.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:03:26.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:03:26.847 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:03:26.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:03:26.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:03:26.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:03:26.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.585176 -999.00  +16.50  13.82     40   +3.00 1 1 1 1 1   888    0 13.11 -20.80 ----- 15.2 13.8 163.4 20.5 21.9 -26.3 21.2 -26.1 22.9 -24.2 23.9 -26.2
2026-02-14T16:03:26.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:03:26.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:03:26.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.585176
2026-02-14T16:03:26.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:03:26.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:03:26.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:03:26.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:03:26.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:03:26.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:02:47', tmtdew=15.88, humidity=34.32, cloud=0.0, wind=25.2, temperature=16.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:02:39.206', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:03:26.850 [DEBUG] [Thread-188187] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:03:26.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-14T16:03:26.948 [DEBUG] [Thread-188190] [transport.py] [_log()] starting thread (client mode): 0xa2dc2260
2026-02-14T16:03:26.948 [DEBUG] [Thread-188190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:03:26.962 [DEBUG] [Thread-188190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:03:26.962 [INFO] [Thread-188190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:03:26.970 [DEBUG] [Thread-188190] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:03:26.970 [DEBUG] [Thread-188190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:03:26.970 [DEBUG] [Thread-188190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:03:26.970 [DEBUG] [Thread-188190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:03:26.970 [DEBUG] [Thread-188190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:03:26.970 [DEBUG] [Thread-188190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:03:26.970 [DEBUG] [Thread-188190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:03:26.970 [DEBUG] [Thread-188190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:03:26.970 [DEBUG] [Thread-188190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:03:26.970 [DEBUG] [Thread-188190] [transport.py] [_log()] client lang: <none>
2026-02-14T16:03:26.970 [DEBUG] [Thread-188190] [transport.py] [_log()] server lang: <none>
2026-02-14T16:03:26.970 [DEBUG] [Thread-188190] [transport.py] [_log()] kex follows: False
2026-02-14T16:03:26.970 [DEBUG] [Thread-188190] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:03:26.970 [DEBUG] [Thread-188190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:03:26.971 [DEBUG] [Thread-188190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:03:26.971 [DEBUG] [Thread-188190] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:03:26.971 [DEBUG] [Thread-188190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:03:26.971 [DEBUG] [Thread-188190] [transport.py] [_log()] Compression: none
2026-02-14T16:03:26.971 [DEBUG] [Thread-188190] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:03:27.031 [DEBUG] [Thread-188190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:03:27.032 [DEBUG] [Thread-188190] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:03:27.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:03:27.033 [DEBUG] [Thread-188190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:03:27.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:03:27.090 [DEBUG] [Thread-188190] [transport.py] [_log()] userauth is OK
2026-02-14T16:03:27.090 [DEBUG] [Thread-188190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:03:27.091 [DEBUG] [Thread-188190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:03:27.091 [DEBUG] [Thread-188190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:03:27.091 [DEBUG] [Thread-188190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:03:27.116 [INFO] [Thread-188190] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:03:27.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-14T16:03:27.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:03:27.936 [DEBUG] [Thread-188190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:03:27.936 [DEBUG] [Thread-188190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:03:27.985 [DEBUG] [Thread-188190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:03:27.985 [DEBUG] [Thread-188190] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:03:27.994 [DEBUG] [Thread-188190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:03:28.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:03:28.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:03:28.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:03:28.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:03:28.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:03:28.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:03:28.031 [DEBUG] [Thread-188190] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:03:30.253 [DEBUG] [Thread-188192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:03:33.288 [DEBUG] [Thread-188193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:03:48.339 [DEBUG] [Thread-188194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:03:52.118 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:03:52.119 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:03:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:03:58.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:03:58.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-14T16:03:59.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 3, 23), 15.82, 34.45, 0.0, 28.42, 16.65, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:03:59.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:03:23
2026-02-14T16:04:00.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:04:00.441 [DEBUG] [Thread-188195] [transport.py] [_log()] starting thread (client mode): 0xa57b12d0
2026-02-14T16:04:00.441 [DEBUG] [Thread-188195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:04:00.461 [DEBUG] [Thread-188195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:04:00.461 [INFO] [Thread-188195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:04:00.464 [DEBUG] [Thread-188195] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:04:00.464 [DEBUG] [Thread-188195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:04:00.464 [DEBUG] [Thread-188195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:04:00.464 [DEBUG] [Thread-188195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:04:00.464 [DEBUG] [Thread-188195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:04:00.464 [DEBUG] [Thread-188195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:04:00.464 [DEBUG] [Thread-188195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:04:00.464 [DEBUG] [Thread-188195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:04:00.464 [DEBUG] [Thread-188195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:04:00.464 [DEBUG] [Thread-188195] [transport.py] [_log()] client lang: <none>
2026-02-14T16:04:00.464 [DEBUG] [Thread-188195] [transport.py] [_log()] server lang: <none>
2026-02-14T16:04:00.464 [DEBUG] [Thread-188195] [transport.py] [_log()] kex follows: False
2026-02-14T16:04:00.464 [DEBUG] [Thread-188195] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:04:00.464 [DEBUG] [Thread-188195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:04:00.464 [DEBUG] [Thread-188195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:04:00.464 [DEBUG] [Thread-188195] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:04:00.464 [DEBUG] [Thread-188195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:04:00.464 [DEBUG] [Thread-188195] [transport.py] [_log()] Compression: none
2026-02-14T16:04:00.464 [DEBUG] [Thread-188195] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:04:00.483 [DEBUG] [Thread-188195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:04:00.484 [DEBUG] [Thread-188195] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:04:00.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:04:00.485 [DEBUG] [Thread-188195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:04:00.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:04:00.487 [DEBUG] [Thread-188195] [transport.py] [_log()] userauth is OK
2026-02-14T16:04:00.487 [DEBUG] [Thread-188195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:04:00.487 [DEBUG] [Thread-188195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:04:00.488 [DEBUG] [Thread-188195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:04:00.488 [DEBUG] [Thread-188195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:04:00.512 [INFO] [Thread-188195] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:04:00.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:04:01.150 [DEBUG] [Thread-188195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:04:01.150 [DEBUG] [Thread-188195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:04:01.150 [DEBUG] [Thread-188195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:04:01.191 [DEBUG] [Thread-188195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:04:01.191 [DEBUG] [Thread-188195] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:04:01.193 [DEBUG] [Thread-188195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:04:01.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:04:01.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:04:01.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:04:01.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:04:01.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:04:01.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:04:01.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:04:01.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:04:01.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:04:01.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.585871 -999.00  +17.00  34.45     39   +2.90 1 1 2 1 1   888    0 12.83 -16.39 ----- 30.4 34.5 144.2 37.1 21.9 -28.6 21.3 -26.3 22.9 -26.4 23.8 -27.7
2026-02-14T16:04:01.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:04:01.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:04:01.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.585871
2026-02-14T16:04:01.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:04:01.213 [DEBUG] [Thread-188195] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:04:01.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:04:01.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:04:01.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:04:01.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:04:01.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:03:23', tmtdew=15.82, humidity=34.45, cloud=0.0, wind=28.42, temperature=16.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:03:39.254', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:04:01.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-14T16:04:01.309 [DEBUG] [Thread-188198] [transport.py] [_log()] starting thread (client mode): 0xa2dc0bb0
2026-02-14T16:04:01.309 [DEBUG] [Thread-188198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:04:01.323 [DEBUG] [Thread-188198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:04:01.323 [INFO] [Thread-188198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:04:01.331 [DEBUG] [Thread-188198] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:04:01.331 [DEBUG] [Thread-188198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:04:01.331 [DEBUG] [Thread-188198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:04:01.331 [DEBUG] [Thread-188198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:04:01.332 [DEBUG] [Thread-188198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:04:01.332 [DEBUG] [Thread-188198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:04:01.332 [DEBUG] [Thread-188198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:04:01.332 [DEBUG] [Thread-188198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:04:01.332 [DEBUG] [Thread-188198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:04:01.332 [DEBUG] [Thread-188198] [transport.py] [_log()] client lang: <none>
2026-02-14T16:04:01.332 [DEBUG] [Thread-188198] [transport.py] [_log()] server lang: <none>
2026-02-14T16:04:01.332 [DEBUG] [Thread-188198] [transport.py] [_log()] kex follows: False
2026-02-14T16:04:01.332 [DEBUG] [Thread-188198] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:04:01.333 [DEBUG] [Thread-188198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:04:01.333 [DEBUG] [Thread-188198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:04:01.333 [DEBUG] [Thread-188198] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:04:01.333 [DEBUG] [Thread-188198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:04:01.333 [DEBUG] [Thread-188198] [transport.py] [_log()] Compression: none
2026-02-14T16:04:01.333 [DEBUG] [Thread-188198] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:04:01.391 [DEBUG] [Thread-188198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:04:01.392 [DEBUG] [Thread-188198] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:04:01.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:04:01.393 [DEBUG] [Thread-188198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:04:01.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:04:01.450 [DEBUG] [Thread-188198] [transport.py] [_log()] userauth is OK
2026-02-14T16:04:01.450 [DEBUG] [Thread-188198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:04:01.451 [DEBUG] [Thread-188198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:04:01.451 [DEBUG] [Thread-188198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:04:01.451 [DEBUG] [Thread-188198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:04:01.470 [INFO] [Thread-188198] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:04:01.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-14T16:04:01.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:04:02.311 [DEBUG] [Thread-188198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:04:02.312 [DEBUG] [Thread-188198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:04:02.359 [DEBUG] [Thread-188198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:04:02.360 [DEBUG] [Thread-188198] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:04:02.369 [DEBUG] [Thread-188198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:04:02.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:04:02.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-14T16:04:02.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-14T16:04:02.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:04:02.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:04:02.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:04:02.405 [DEBUG] [Thread-188198] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:04:03.377 [DEBUG] [Thread-188200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:04:18.437 [DEBUG] [Thread-188201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:04:30.286 [DEBUG] [Thread-188202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:04:32.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:04:32.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:04:32.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-14T16:04:33.470 [DEBUG] [Thread-188203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:04:34.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 3, 58), 16.05, 33.9, 0.0, 25.58, 16.87, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:04:34.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:03:58
2026-02-14T16:04:34.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:04:34.773 [DEBUG] [Thread-188204] [transport.py] [_log()] starting thread (client mode): 0xa2dc2920
2026-02-14T16:04:34.773 [DEBUG] [Thread-188204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:04:34.793 [DEBUG] [Thread-188204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:04:34.793 [INFO] [Thread-188204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:04:34.796 [DEBUG] [Thread-188204] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:04:34.796 [DEBUG] [Thread-188204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:04:34.796 [DEBUG] [Thread-188204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:04:34.796 [DEBUG] [Thread-188204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:04:34.796 [DEBUG] [Thread-188204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:04:34.796 [DEBUG] [Thread-188204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:04:34.796 [DEBUG] [Thread-188204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:04:34.796 [DEBUG] [Thread-188204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:04:34.797 [DEBUG] [Thread-188204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:04:34.797 [DEBUG] [Thread-188204] [transport.py] [_log()] client lang: <none>
2026-02-14T16:04:34.797 [DEBUG] [Thread-188204] [transport.py] [_log()] server lang: <none>
2026-02-14T16:04:34.797 [DEBUG] [Thread-188204] [transport.py] [_log()] kex follows: False
2026-02-14T16:04:34.797 [DEBUG] [Thread-188204] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:04:34.797 [DEBUG] [Thread-188204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:04:34.797 [DEBUG] [Thread-188204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:04:34.797 [DEBUG] [Thread-188204] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:04:34.797 [DEBUG] [Thread-188204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:04:34.797 [DEBUG] [Thread-188204] [transport.py] [_log()] Compression: none
2026-02-14T16:04:34.797 [DEBUG] [Thread-188204] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:04:34.819 [DEBUG] [Thread-188204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:04:34.820 [DEBUG] [Thread-188204] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:04:34.820 [DEBUG] [Thread-188204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:04:34.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:04:34.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:04:34.823 [DEBUG] [Thread-188204] [transport.py] [_log()] userauth is OK
2026-02-14T16:04:34.823 [DEBUG] [Thread-188204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:04:34.823 [DEBUG] [Thread-188204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:04:34.823 [DEBUG] [Thread-188204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:04:34.823 [DEBUG] [Thread-188204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:04:34.844 [INFO] [Thread-188204] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:04:34.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:04:35.646 [DEBUG] [Thread-188204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:04:35.647 [DEBUG] [Thread-188204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:04:35.647 [DEBUG] [Thread-188204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:04:35.687 [DEBUG] [Thread-188204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:04:35.687 [DEBUG] [Thread-188204] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:04:35.689 [DEBUG] [Thread-188204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:04:35.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:04:35.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:04:35.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:04:35.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:04:35.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:04:35.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:04:35.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:04:35.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:04:35.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:04:35.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.586218 -999.00  +16.70  23.95     39   +3.00 1 1 1 1 1   888    0 13.30 -15.11 ----- 25.7 23.9 149.5 41.3 21.9 -29.0 21.4 -27.3 22.9 -25.6 23.9 -28.7
2026-02-14T16:04:35.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:04:35.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:04:35.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.586218
2026-02-14T16:04:35.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:04:35.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:04:35.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:04:35.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:04:35.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:04:35.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:03:58', tmtdew=16.05, humidity=33.9, cloud=0.0, wind=25.58, temperature=16.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:04:09.235', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:04:35.706 [DEBUG] [Thread-188204] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:04:35.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T16:04:35.794 [DEBUG] [Thread-188207] [transport.py] [_log()] starting thread (client mode): 0xa57b2a70
2026-02-14T16:04:35.794 [DEBUG] [Thread-188207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:04:35.808 [DEBUG] [Thread-188207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:04:35.808 [INFO] [Thread-188207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:04:35.816 [DEBUG] [Thread-188207] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:04:35.816 [DEBUG] [Thread-188207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:04:35.816 [DEBUG] [Thread-188207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:04:35.816 [DEBUG] [Thread-188207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:04:35.816 [DEBUG] [Thread-188207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:04:35.817 [DEBUG] [Thread-188207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:04:35.817 [DEBUG] [Thread-188207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:04:35.817 [DEBUG] [Thread-188207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:04:35.817 [DEBUG] [Thread-188207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:04:35.817 [DEBUG] [Thread-188207] [transport.py] [_log()] client lang: <none>
2026-02-14T16:04:35.817 [DEBUG] [Thread-188207] [transport.py] [_log()] server lang: <none>
2026-02-14T16:04:35.817 [DEBUG] [Thread-188207] [transport.py] [_log()] kex follows: False
2026-02-14T16:04:35.817 [DEBUG] [Thread-188207] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:04:35.817 [DEBUG] [Thread-188207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:04:35.817 [DEBUG] [Thread-188207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:04:35.818 [DEBUG] [Thread-188207] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:04:35.818 [DEBUG] [Thread-188207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:04:35.818 [DEBUG] [Thread-188207] [transport.py] [_log()] Compression: none
2026-02-14T16:04:35.818 [DEBUG] [Thread-188207] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:04:35.873 [DEBUG] [Thread-188207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:04:35.874 [DEBUG] [Thread-188207] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:04:35.874 [DEBUG] [Thread-188207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:04:35.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:04:35.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:04:35.929 [DEBUG] [Thread-188207] [transport.py] [_log()] userauth is OK
2026-02-14T16:04:35.929 [DEBUG] [Thread-188207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:04:35.930 [DEBUG] [Thread-188207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:04:35.930 [DEBUG] [Thread-188207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:04:35.930 [DEBUG] [Thread-188207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:04:35.951 [INFO] [Thread-188207] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:04:35.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-14T16:04:35.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:04:36.786 [DEBUG] [Thread-188207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:04:36.786 [DEBUG] [Thread-188207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:04:36.834 [DEBUG] [Thread-188207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:04:36.834 [DEBUG] [Thread-188207] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:04:36.843 [DEBUG] [Thread-188207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:04:36.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:04:36.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-14T16:04:36.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-14T16:04:36.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:04:36.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:04:36.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:04:36.878 [DEBUG] [Thread-188207] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:04:48.504 [DEBUG] [Thread-188209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:04:52.267 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:04:52.268 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:05:03.564 [DEBUG] [Thread-188210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:05:06.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:05:06.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:05:06.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:05:08.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 4, 34), 17.5, 30.74, 0.0, 38.85, 18.17, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:05:08.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:04:34
2026-02-14T16:05:09.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:05:09.226 [DEBUG] [Thread-188211] [transport.py] [_log()] starting thread (client mode): 0xa2deed40
2026-02-14T16:05:09.227 [DEBUG] [Thread-188211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:05:09.247 [DEBUG] [Thread-188211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:05:09.247 [INFO] [Thread-188211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:05:09.251 [DEBUG] [Thread-188211] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:05:09.251 [DEBUG] [Thread-188211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:05:09.251 [DEBUG] [Thread-188211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:05:09.252 [DEBUG] [Thread-188211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:05:09.252 [DEBUG] [Thread-188211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:05:09.252 [DEBUG] [Thread-188211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:05:09.252 [DEBUG] [Thread-188211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:05:09.252 [DEBUG] [Thread-188211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:05:09.252 [DEBUG] [Thread-188211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:05:09.252 [DEBUG] [Thread-188211] [transport.py] [_log()] client lang: <none>
2026-02-14T16:05:09.252 [DEBUG] [Thread-188211] [transport.py] [_log()] server lang: <none>
2026-02-14T16:05:09.252 [DEBUG] [Thread-188211] [transport.py] [_log()] kex follows: False
2026-02-14T16:05:09.252 [DEBUG] [Thread-188211] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:05:09.252 [DEBUG] [Thread-188211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:05:09.252 [DEBUG] [Thread-188211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:05:09.252 [DEBUG] [Thread-188211] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:05:09.252 [DEBUG] [Thread-188211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:05:09.252 [DEBUG] [Thread-188211] [transport.py] [_log()] Compression: none
2026-02-14T16:05:09.252 [DEBUG] [Thread-188211] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:05:09.268 [DEBUG] [Thread-188211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:05:09.269 [DEBUG] [Thread-188211] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:05:09.269 [DEBUG] [Thread-188211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:05:09.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:05:09.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:05:09.271 [DEBUG] [Thread-188211] [transport.py] [_log()] userauth is OK
2026-02-14T16:05:09.272 [DEBUG] [Thread-188211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:05:09.272 [DEBUG] [Thread-188211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:05:09.272 [DEBUG] [Thread-188211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:05:09.272 [DEBUG] [Thread-188211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:05:09.296 [INFO] [Thread-188211] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:05:09.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:05:13.091 [DEBUG] [Thread-188211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:05:13.091 [DEBUG] [Thread-188211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:05:13.091 [DEBUG] [Thread-188211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:05:13.132 [DEBUG] [Thread-188211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:05:13.132 [DEBUG] [Thread-188211] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:05:13.134 [DEBUG] [Thread-188211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:05:13.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:05:13.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:05:13.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:05:13.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:05:13.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:05:13.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:05:13.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:05:13.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:05:13.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:05:13.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.586565 -999.00  +16.70  28.49     40   +3.10 1 1 1 1 1   888    0 12.99 -16.29 ----- 25.0 28.5 157.0 35.7 21.9 -29.4 21.4 -27.7 22.8 -27.0 23.8 -28.4
2026-02-14T16:05:13.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:05:13.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:05:13.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.586565
2026-02-14T16:05:13.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:05:13.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:05:13.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:05:13.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:05:13.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:05:13.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:04:34', tmtdew=17.5, humidity=30.74, cloud=0.0, wind=38.85, temperature=18.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:04:39.216', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:05:13.153 [DEBUG] [Thread-188211] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:05:13.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-14T16:05:13.248 [DEBUG] [Thread-188214] [transport.py] [_log()] starting thread (client mode): 0xa2dee230
2026-02-14T16:05:13.249 [DEBUG] [Thread-188214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:05:13.263 [DEBUG] [Thread-188214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:05:13.263 [INFO] [Thread-188214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:05:13.271 [DEBUG] [Thread-188214] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:05:13.272 [DEBUG] [Thread-188214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:05:13.272 [DEBUG] [Thread-188214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:05:13.272 [DEBUG] [Thread-188214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:05:13.272 [DEBUG] [Thread-188214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:05:13.273 [DEBUG] [Thread-188214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:05:13.273 [DEBUG] [Thread-188214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:05:13.273 [DEBUG] [Thread-188214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:05:13.273 [DEBUG] [Thread-188214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:05:13.273 [DEBUG] [Thread-188214] [transport.py] [_log()] client lang: <none>
2026-02-14T16:05:13.273 [DEBUG] [Thread-188214] [transport.py] [_log()] server lang: <none>
2026-02-14T16:05:13.273 [DEBUG] [Thread-188214] [transport.py] [_log()] kex follows: False
2026-02-14T16:05:13.273 [DEBUG] [Thread-188214] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:05:13.273 [DEBUG] [Thread-188214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:05:13.273 [DEBUG] [Thread-188214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:05:13.273 [DEBUG] [Thread-188214] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:05:13.273 [DEBUG] [Thread-188214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:05:13.273 [DEBUG] [Thread-188214] [transport.py] [_log()] Compression: none
2026-02-14T16:05:13.273 [DEBUG] [Thread-188214] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:05:13.329 [DEBUG] [Thread-188214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:05:13.330 [DEBUG] [Thread-188214] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:05:13.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:05:13.331 [DEBUG] [Thread-188214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:05:13.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:05:13.389 [DEBUG] [Thread-188214] [transport.py] [_log()] userauth is OK
2026-02-14T16:05:13.389 [DEBUG] [Thread-188214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:05:13.390 [DEBUG] [Thread-188214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:05:13.390 [DEBUG] [Thread-188214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:05:13.390 [DEBUG] [Thread-188214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:05:13.409 [INFO] [Thread-188214] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:05:13.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-14T16:05:13.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:05:14.228 [DEBUG] [Thread-188214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:05:14.229 [DEBUG] [Thread-188214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:05:14.276 [DEBUG] [Thread-188214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:05:14.276 [DEBUG] [Thread-188214] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:05:14.286 [DEBUG] [Thread-188214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:05:14.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:05:14.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-14T16:05:14.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-14T16:05:14.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:05:14.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:05:14.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:05:14.322 [DEBUG] [Thread-188214] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:05:18.603 [DEBUG] [Thread-188216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:05:30.319 [DEBUG] [Thread-188217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:05:33.654 [DEBUG] [Thread-188218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:05:44.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:05:44.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:05:44.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:05:46.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 5, 9), 16.3, 33.49, 0.0, 38.96, 16.99, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:05:46.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:05:09
2026-02-14T16:05:46.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:05:46.799 [DEBUG] [Thread-188219] [transport.py] [_log()] starting thread (client mode): 0xa57b0520
2026-02-14T16:05:46.799 [DEBUG] [Thread-188219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:05:46.821 [DEBUG] [Thread-188219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:05:46.821 [INFO] [Thread-188219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:05:46.824 [DEBUG] [Thread-188219] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:05:46.824 [DEBUG] [Thread-188219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:05:46.824 [DEBUG] [Thread-188219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:05:46.824 [DEBUG] [Thread-188219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:05:46.824 [DEBUG] [Thread-188219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:05:46.824 [DEBUG] [Thread-188219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:05:46.824 [DEBUG] [Thread-188219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:05:46.824 [DEBUG] [Thread-188219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:05:46.824 [DEBUG] [Thread-188219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:05:46.825 [DEBUG] [Thread-188219] [transport.py] [_log()] client lang: <none>
2026-02-14T16:05:46.825 [DEBUG] [Thread-188219] [transport.py] [_log()] server lang: <none>
2026-02-14T16:05:46.825 [DEBUG] [Thread-188219] [transport.py] [_log()] kex follows: False
2026-02-14T16:05:46.825 [DEBUG] [Thread-188219] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:05:46.825 [DEBUG] [Thread-188219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:05:46.825 [DEBUG] [Thread-188219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:05:46.825 [DEBUG] [Thread-188219] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:05:46.825 [DEBUG] [Thread-188219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:05:46.825 [DEBUG] [Thread-188219] [transport.py] [_log()] Compression: none
2026-02-14T16:05:46.825 [DEBUG] [Thread-188219] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:05:46.844 [DEBUG] [Thread-188219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:05:46.844 [DEBUG] [Thread-188219] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:05:46.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:05:46.845 [DEBUG] [Thread-188219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:05:46.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:05:46.848 [DEBUG] [Thread-188219] [transport.py] [_log()] userauth is OK
2026-02-14T16:05:46.848 [DEBUG] [Thread-188219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:05:46.848 [DEBUG] [Thread-188219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:05:46.848 [DEBUG] [Thread-188219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:05:46.848 [DEBUG] [Thread-188219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:05:46.885 [INFO] [Thread-188219] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:05:46.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:05:47.517 [DEBUG] [Thread-188219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:05:47.518 [DEBUG] [Thread-188219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:05:47.518 [DEBUG] [Thread-188219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:05:47.558 [DEBUG] [Thread-188219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:05:47.559 [DEBUG] [Thread-188219] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:05:47.562 [DEBUG] [Thread-188219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:05:47.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:05:47.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:05:47.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:05:47.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:05:47.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:05:47.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:05:47.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:05:47.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:05:47.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:05:47.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.586912 -999.00  +16.30  23.46     40   +3.00 1 1 1 1 1   888    0 13.04 -19.74 ----- 20.5 23.5 145.0 34.5 21.8 -29.8 21.2 -27.3 22.8 -26.0 23.7 -29.1
2026-02-14T16:05:47.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:05:47.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:05:47.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.586912
2026-02-14T16:05:47.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:05:47.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:05:47.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:05:47.588 [DEBUG] [Thread-188219] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:05:47.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:05:47.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:05:47.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:05:09', tmtdew=16.3, humidity=33.49, cloud=0.0, wind=38.96, temperature=16.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:05:09.197', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:05:47.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-14T16:05:47.684 [DEBUG] [Thread-188222] [transport.py] [_log()] starting thread (client mode): 0xa2dc03d0
2026-02-14T16:05:47.684 [DEBUG] [Thread-188222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:05:47.699 [DEBUG] [Thread-188222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:05:47.699 [INFO] [Thread-188222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:05:47.707 [DEBUG] [Thread-188222] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:05:47.707 [DEBUG] [Thread-188222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:05:47.707 [DEBUG] [Thread-188222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:05:47.707 [DEBUG] [Thread-188222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:05:47.707 [DEBUG] [Thread-188222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:05:47.707 [DEBUG] [Thread-188222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:05:47.707 [DEBUG] [Thread-188222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:05:47.707 [DEBUG] [Thread-188222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:05:47.707 [DEBUG] [Thread-188222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:05:47.707 [DEBUG] [Thread-188222] [transport.py] [_log()] client lang: <none>
2026-02-14T16:05:47.707 [DEBUG] [Thread-188222] [transport.py] [_log()] server lang: <none>
2026-02-14T16:05:47.707 [DEBUG] [Thread-188222] [transport.py] [_log()] kex follows: False
2026-02-14T16:05:47.707 [DEBUG] [Thread-188222] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:05:47.707 [DEBUG] [Thread-188222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:05:47.707 [DEBUG] [Thread-188222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:05:47.707 [DEBUG] [Thread-188222] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:05:47.707 [DEBUG] [Thread-188222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:05:47.708 [DEBUG] [Thread-188222] [transport.py] [_log()] Compression: none
2026-02-14T16:05:47.708 [DEBUG] [Thread-188222] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:05:47.764 [DEBUG] [Thread-188222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:05:47.765 [DEBUG] [Thread-188222] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:05:47.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:05:47.766 [DEBUG] [Thread-188222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:05:47.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:05:47.821 [DEBUG] [Thread-188222] [transport.py] [_log()] userauth is OK
2026-02-14T16:05:47.821 [DEBUG] [Thread-188222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:05:47.821 [DEBUG] [Thread-188222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:05:47.821 [DEBUG] [Thread-188222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:05:47.821 [DEBUG] [Thread-188222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:05:47.840 [INFO] [Thread-188222] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:05:47.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-14T16:05:47.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:05:48.662 [DEBUG] [Thread-188222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:05:48.662 [DEBUG] [Thread-188222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:05:48.692 [DEBUG] [Thread-188224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:05:48.709 [DEBUG] [Thread-188222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:05:48.709 [DEBUG] [Thread-188222] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:05:48.718 [DEBUG] [Thread-188222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:05:48.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:05:48.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-14T16:05:48.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:05:48.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:05:48.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:05:48.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:05:48.751 [DEBUG] [Thread-188222] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:05:52.411 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:05:52.412 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:06:03.744 [DEBUG] [Thread-188225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:06:18.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:06:18.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:06:18.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-14T16:06:18.782 [DEBUG] [Thread-188226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:06:21.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 5, 44), 16.02, 34.05, 0.0, 27.21, 17.02, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:06:21.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:05:44
2026-02-14T16:06:21.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:06:21.664 [DEBUG] [Thread-188227] [transport.py] [_log()] starting thread (client mode): 0xa2dc2380
2026-02-14T16:06:21.665 [DEBUG] [Thread-188227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:06:21.684 [DEBUG] [Thread-188227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:06:21.684 [INFO] [Thread-188227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:06:21.685 [DEBUG] [Thread-188227] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:06:21.685 [DEBUG] [Thread-188227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:06:21.685 [DEBUG] [Thread-188227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:06:21.686 [DEBUG] [Thread-188227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:06:21.686 [DEBUG] [Thread-188227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:06:21.686 [DEBUG] [Thread-188227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:06:21.686 [DEBUG] [Thread-188227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:06:21.686 [DEBUG] [Thread-188227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:06:21.686 [DEBUG] [Thread-188227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:06:21.686 [DEBUG] [Thread-188227] [transport.py] [_log()] client lang: <none>
2026-02-14T16:06:21.686 [DEBUG] [Thread-188227] [transport.py] [_log()] server lang: <none>
2026-02-14T16:06:21.686 [DEBUG] [Thread-188227] [transport.py] [_log()] kex follows: False
2026-02-14T16:06:21.686 [DEBUG] [Thread-188227] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:06:21.686 [DEBUG] [Thread-188227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:06:21.686 [DEBUG] [Thread-188227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:06:21.686 [DEBUG] [Thread-188227] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:06:21.686 [DEBUG] [Thread-188227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:06:21.686 [DEBUG] [Thread-188227] [transport.py] [_log()] Compression: none
2026-02-14T16:06:21.686 [DEBUG] [Thread-188227] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:06:21.698 [DEBUG] [Thread-188227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:06:21.699 [DEBUG] [Thread-188227] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:06:21.699 [DEBUG] [Thread-188227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:06:21.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:06:21.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:06:21.701 [DEBUG] [Thread-188227] [transport.py] [_log()] userauth is OK
2026-02-14T16:06:21.701 [DEBUG] [Thread-188227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:06:21.701 [DEBUG] [Thread-188227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:06:21.702 [DEBUG] [Thread-188227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:06:21.702 [DEBUG] [Thread-188227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:06:21.726 [INFO] [Thread-188227] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:06:21.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:06:22.459 [DEBUG] [Thread-188227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:06:22.460 [DEBUG] [Thread-188227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:06:22.460 [DEBUG] [Thread-188227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:06:22.500 [DEBUG] [Thread-188227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:06:22.501 [DEBUG] [Thread-188227] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:06:22.504 [DEBUG] [Thread-188227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:06:22.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:06:22.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:06:22.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:06:22.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:06:22.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:06:22.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:06:22.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:06:22.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:06:22.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:06:22.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.587259 -999.00  +16.30  18.37     41   +3.10 1 1 1 1 1   888    0 12.74 -22.82 ----- 21.9 18.4 156.8 29.8 21.8 -29.0 21.2 -27.3 22.8 -25.1 23.7 -27.9
2026-02-14T16:06:22.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:06:22.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:06:22.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.587259
2026-02-14T16:06:22.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:06:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:06:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:06:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:06:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:06:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:05:44', tmtdew=16.02, humidity=34.05, cloud=0.0, wind=27.21, temperature=17.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:05:39.178', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:06:22.532 [DEBUG] [Thread-188227] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:06:22.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-14T16:06:22.627 [DEBUG] [Thread-188230] [transport.py] [_log()] starting thread (client mode): 0xa2deee90
2026-02-14T16:06:22.628 [DEBUG] [Thread-188230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:06:22.643 [DEBUG] [Thread-188230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:06:22.643 [INFO] [Thread-188230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:06:22.651 [DEBUG] [Thread-188230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:06:22.651 [DEBUG] [Thread-188230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:06:22.651 [DEBUG] [Thread-188230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:06:22.652 [DEBUG] [Thread-188230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:06:22.652 [DEBUG] [Thread-188230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:06:22.652 [DEBUG] [Thread-188230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:06:22.652 [DEBUG] [Thread-188230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:06:22.652 [DEBUG] [Thread-188230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:06:22.652 [DEBUG] [Thread-188230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:06:22.652 [DEBUG] [Thread-188230] [transport.py] [_log()] client lang: <none>
2026-02-14T16:06:22.652 [DEBUG] [Thread-188230] [transport.py] [_log()] server lang: <none>
2026-02-14T16:06:22.653 [DEBUG] [Thread-188230] [transport.py] [_log()] kex follows: False
2026-02-14T16:06:22.653 [DEBUG] [Thread-188230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:06:22.653 [DEBUG] [Thread-188230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:06:22.653 [DEBUG] [Thread-188230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:06:22.653 [DEBUG] [Thread-188230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:06:22.653 [DEBUG] [Thread-188230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:06:22.653 [DEBUG] [Thread-188230] [transport.py] [_log()] Compression: none
2026-02-14T16:06:22.653 [DEBUG] [Thread-188230] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:06:22.712 [DEBUG] [Thread-188230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:06:22.713 [DEBUG] [Thread-188230] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:06:22.713 [DEBUG] [Thread-188230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:06:22.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:06:22.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:06:22.768 [DEBUG] [Thread-188230] [transport.py] [_log()] userauth is OK
2026-02-14T16:06:22.768 [DEBUG] [Thread-188230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:06:22.768 [DEBUG] [Thread-188230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:06:22.769 [DEBUG] [Thread-188230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:06:22.769 [DEBUG] [Thread-188230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:06:22.787 [INFO] [Thread-188230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:06:22.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-14T16:06:22.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:06:23.633 [DEBUG] [Thread-188230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:06:23.633 [DEBUG] [Thread-188230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:06:23.693 [DEBUG] [Thread-188230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:06:23.693 [DEBUG] [Thread-188230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:06:23.711 [DEBUG] [Thread-188230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:06:23.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:06:23.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:06:23.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:06:23.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:06:23.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:06:23.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:06:23.778 [DEBUG] [Thread-188230] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:06:30.364 [DEBUG] [Thread-188232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:06:33.822 [DEBUG] [Thread-188233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:06:48.878 [DEBUG] [Thread-188234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:06:52.552 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:06:52.553 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:06:53.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:06:53.785 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:06:53.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-14T16:06:55.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 6, 20), 16.04, 34.0, 0.0, 26.94, 17.04, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:06:55.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:06:20
2026-02-14T16:06:56.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:06:56.227 [DEBUG] [Thread-188235] [transport.py] [_log()] starting thread (client mode): 0xa57b0340
2026-02-14T16:06:56.228 [DEBUG] [Thread-188235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:06:56.248 [DEBUG] [Thread-188235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:06:56.248 [INFO] [Thread-188235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:06:56.251 [DEBUG] [Thread-188235] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:06:56.251 [DEBUG] [Thread-188235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:06:56.251 [DEBUG] [Thread-188235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:06:56.251 [DEBUG] [Thread-188235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:06:56.251 [DEBUG] [Thread-188235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:06:56.251 [DEBUG] [Thread-188235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:06:56.251 [DEBUG] [Thread-188235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:06:56.251 [DEBUG] [Thread-188235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:06:56.251 [DEBUG] [Thread-188235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:06:56.251 [DEBUG] [Thread-188235] [transport.py] [_log()] client lang: <none>
2026-02-14T16:06:56.251 [DEBUG] [Thread-188235] [transport.py] [_log()] server lang: <none>
2026-02-14T16:06:56.251 [DEBUG] [Thread-188235] [transport.py] [_log()] kex follows: False
2026-02-14T16:06:56.251 [DEBUG] [Thread-188235] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:06:56.251 [DEBUG] [Thread-188235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:06:56.251 [DEBUG] [Thread-188235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:06:56.252 [DEBUG] [Thread-188235] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:06:56.252 [DEBUG] [Thread-188235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:06:56.252 [DEBUG] [Thread-188235] [transport.py] [_log()] Compression: none
2026-02-14T16:06:56.252 [DEBUG] [Thread-188235] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:06:56.270 [DEBUG] [Thread-188235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:06:56.270 [DEBUG] [Thread-188235] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:06:56.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:06:56.272 [DEBUG] [Thread-188235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:06:56.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:06:56.274 [DEBUG] [Thread-188235] [transport.py] [_log()] userauth is OK
2026-02-14T16:06:56.274 [DEBUG] [Thread-188235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:06:56.275 [DEBUG] [Thread-188235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:06:56.275 [DEBUG] [Thread-188235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:06:56.275 [DEBUG] [Thread-188235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:06:56.300 [INFO] [Thread-188235] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:06:56.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:06:56.947 [DEBUG] [Thread-188235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:06:56.948 [DEBUG] [Thread-188235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:06:56.948 [DEBUG] [Thread-188235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:06:56.988 [DEBUG] [Thread-188235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:06:56.988 [DEBUG] [Thread-188235] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:06:56.992 [DEBUG] [Thread-188235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:06:57.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:06:57.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:06:57.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:06:57.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:06:57.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:06:57.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:06:57.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:06:57.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:06:57.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:06:57.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.587607 -999.00  +16.40  21.16     40   +3.00 1 1 1 1 1   888    0 13.05 -24.18 ----- 19.4 21.2 150.4 37.0 21.8 -28.9 21.2 -26.6 22.7 -25.6 23.7 -28.0
2026-02-14T16:06:57.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:06:57.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:06:57.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.587607
2026-02-14T16:06:57.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:06:57.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:06:57.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:06:57.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:06:57.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:06:57.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:06:20', tmtdew=16.04, humidity=34.0, cloud=0.0, wind=26.94, temperature=17.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:06:09.245', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:06:57.021 [DEBUG] [Thread-188235] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:06:57.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-14T16:06:57.117 [DEBUG] [Thread-188238] [transport.py] [_log()] starting thread (client mode): 0xa81d75b0
2026-02-14T16:06:57.117 [DEBUG] [Thread-188238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:06:57.132 [DEBUG] [Thread-188238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:06:57.132 [INFO] [Thread-188238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:06:57.139 [DEBUG] [Thread-188238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:06:57.140 [DEBUG] [Thread-188238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:06:57.140 [DEBUG] [Thread-188238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:06:57.140 [DEBUG] [Thread-188238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:06:57.140 [DEBUG] [Thread-188238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:06:57.140 [DEBUG] [Thread-188238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:06:57.140 [DEBUG] [Thread-188238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:06:57.141 [DEBUG] [Thread-188238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:06:57.141 [DEBUG] [Thread-188238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:06:57.141 [DEBUG] [Thread-188238] [transport.py] [_log()] client lang: <none>
2026-02-14T16:06:57.141 [DEBUG] [Thread-188238] [transport.py] [_log()] server lang: <none>
2026-02-14T16:06:57.141 [DEBUG] [Thread-188238] [transport.py] [_log()] kex follows: False
2026-02-14T16:06:57.141 [DEBUG] [Thread-188238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:06:57.141 [DEBUG] [Thread-188238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:06:57.142 [DEBUG] [Thread-188238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:06:57.142 [DEBUG] [Thread-188238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:06:57.142 [DEBUG] [Thread-188238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:06:57.142 [DEBUG] [Thread-188238] [transport.py] [_log()] Compression: none
2026-02-14T16:06:57.142 [DEBUG] [Thread-188238] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:06:57.200 [DEBUG] [Thread-188238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:06:57.201 [DEBUG] [Thread-188238] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:06:57.201 [DEBUG] [Thread-188238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:06:57.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:06:57.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:06:57.255 [DEBUG] [Thread-188238] [transport.py] [_log()] userauth is OK
2026-02-14T16:06:57.256 [DEBUG] [Thread-188238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:06:57.256 [DEBUG] [Thread-188238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:06:57.256 [DEBUG] [Thread-188238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:06:57.256 [DEBUG] [Thread-188238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:06:57.275 [INFO] [Thread-188238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:06:57.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-14T16:06:57.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:06:58.084 [DEBUG] [Thread-188238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:06:58.084 [DEBUG] [Thread-188238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:06:58.132 [DEBUG] [Thread-188238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:06:58.132 [DEBUG] [Thread-188238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:06:58.141 [DEBUG] [Thread-188238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:06:58.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:06:58.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-14T16:06:58.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-14T16:06:58.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:06:58.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:06:58.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:06:58.178 [DEBUG] [Thread-188238] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:07:03.914 [DEBUG] [Thread-188240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:07:18.965 [DEBUG] [Thread-188241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:07:28.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:07:28.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:07:28.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-14T16:07:30.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 6, 55), 16.54, 32.79, 0.0, 32.5, 17.19, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:07:30.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:06:55
2026-02-14T16:07:30.404 [DEBUG] [Thread-188242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:07:30.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:07:30.566 [DEBUG] [Thread-188243] [transport.py] [_log()] starting thread (client mode): 0xa8197bb0
2026-02-14T16:07:30.566 [DEBUG] [Thread-188243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:07:30.585 [DEBUG] [Thread-188243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:07:30.585 [INFO] [Thread-188243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:07:30.588 [DEBUG] [Thread-188243] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:07:30.588 [DEBUG] [Thread-188243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:07:30.588 [DEBUG] [Thread-188243] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:07:30.588 [DEBUG] [Thread-188243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:07:30.589 [DEBUG] [Thread-188243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:07:30.589 [DEBUG] [Thread-188243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:07:30.589 [DEBUG] [Thread-188243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:07:30.589 [DEBUG] [Thread-188243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:07:30.589 [DEBUG] [Thread-188243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:07:30.589 [DEBUG] [Thread-188243] [transport.py] [_log()] client lang: <none>
2026-02-14T16:07:30.589 [DEBUG] [Thread-188243] [transport.py] [_log()] server lang: <none>
2026-02-14T16:07:30.589 [DEBUG] [Thread-188243] [transport.py] [_log()] kex follows: False
2026-02-14T16:07:30.589 [DEBUG] [Thread-188243] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:07:30.589 [DEBUG] [Thread-188243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:07:30.589 [DEBUG] [Thread-188243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:07:30.589 [DEBUG] [Thread-188243] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:07:30.589 [DEBUG] [Thread-188243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:07:30.589 [DEBUG] [Thread-188243] [transport.py] [_log()] Compression: none
2026-02-14T16:07:30.589 [DEBUG] [Thread-188243] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:07:30.606 [DEBUG] [Thread-188243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:07:30.606 [DEBUG] [Thread-188243] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:07:30.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:07:30.607 [DEBUG] [Thread-188243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:07:30.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:07:30.609 [DEBUG] [Thread-188243] [transport.py] [_log()] userauth is OK
2026-02-14T16:07:30.609 [DEBUG] [Thread-188243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:07:30.609 [DEBUG] [Thread-188243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:07:30.609 [DEBUG] [Thread-188243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:07:30.609 [DEBUG] [Thread-188243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:07:30.625 [INFO] [Thread-188243] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:07:30.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:07:31.234 [DEBUG] [Thread-188243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:07:31.235 [DEBUG] [Thread-188243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:07:31.235 [DEBUG] [Thread-188243] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:07:31.276 [DEBUG] [Thread-188243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:07:31.276 [DEBUG] [Thread-188243] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:07:31.280 [DEBUG] [Thread-188243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:07:31.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:07:31.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:07:31.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:07:31.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:07:31.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:07:31.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:07:31.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:07:31.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:07:31.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:07:31.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.587954 -999.00  +16.40  28.76     40   +2.90 1 1 1 1 1   888    0 13.16 -22.95 ----- 24.4 28.8 142.2 36.0 21.8 -27.3 21.2 -26.9 22.7 -25.9 23.6 -28.6
2026-02-14T16:07:31.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:07:31.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:07:31.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.587954
2026-02-14T16:07:31.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:07:31.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:07:31.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:07:31.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:07:31.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:07:31.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:06:55', tmtdew=16.54, humidity=32.79, cloud=0.0, wind=32.5, temperature=17.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:06:39.226', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:07:31.309 [DEBUG] [Thread-188243] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:07:31.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-14T16:07:31.416 [DEBUG] [Thread-188246] [transport.py] [_log()] starting thread (client mode): 0xa57b3d00
2026-02-14T16:07:31.416 [DEBUG] [Thread-188246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:07:31.430 [DEBUG] [Thread-188246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:07:31.431 [INFO] [Thread-188246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:07:31.438 [DEBUG] [Thread-188246] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:07:31.438 [DEBUG] [Thread-188246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:07:31.439 [DEBUG] [Thread-188246] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:07:31.439 [DEBUG] [Thread-188246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:07:31.439 [DEBUG] [Thread-188246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:07:31.439 [DEBUG] [Thread-188246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:07:31.439 [DEBUG] [Thread-188246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:07:31.439 [DEBUG] [Thread-188246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:07:31.439 [DEBUG] [Thread-188246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:07:31.439 [DEBUG] [Thread-188246] [transport.py] [_log()] client lang: <none>
2026-02-14T16:07:31.439 [DEBUG] [Thread-188246] [transport.py] [_log()] server lang: <none>
2026-02-14T16:07:31.439 [DEBUG] [Thread-188246] [transport.py] [_log()] kex follows: False
2026-02-14T16:07:31.439 [DEBUG] [Thread-188246] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:07:31.439 [DEBUG] [Thread-188246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:07:31.439 [DEBUG] [Thread-188246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:07:31.439 [DEBUG] [Thread-188246] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:07:31.439 [DEBUG] [Thread-188246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:07:31.439 [DEBUG] [Thread-188246] [transport.py] [_log()] Compression: none
2026-02-14T16:07:31.439 [DEBUG] [Thread-188246] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:07:31.495 [DEBUG] [Thread-188246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:07:31.496 [DEBUG] [Thread-188246] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:07:31.496 [DEBUG] [Thread-188246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:07:31.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:07:31.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:07:31.551 [DEBUG] [Thread-188246] [transport.py] [_log()] userauth is OK
2026-02-14T16:07:31.552 [DEBUG] [Thread-188246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:07:31.552 [DEBUG] [Thread-188246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:07:31.552 [DEBUG] [Thread-188246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:07:31.552 [DEBUG] [Thread-188246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:07:31.571 [INFO] [Thread-188246] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:07:31.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-14T16:07:31.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:07:32.407 [DEBUG] [Thread-188246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:07:32.407 [DEBUG] [Thread-188246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:07:32.455 [DEBUG] [Thread-188246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:07:32.456 [DEBUG] [Thread-188246] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:07:32.465 [DEBUG] [Thread-188246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:07:32.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:07:32.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-14T16:07:32.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-14T16:07:32.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:07:32.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:07:32.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:07:32.501 [DEBUG] [Thread-188246] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:07:34.001 [DEBUG] [Thread-188248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:07:49.056 [DEBUG] [Thread-188249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:07:52.693 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:07:52.694 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:08:02.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:08:02.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:08:02.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-14T16:08:04.094 [DEBUG] [Thread-188250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:08:04.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 7, 32), 16.47, 32.97, 0.0, 28.13, 17.25, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:08:04.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:07:32
2026-02-14T16:08:05.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:08:05.509 [DEBUG] [Thread-188251] [transport.py] [_log()] starting thread (client mode): 0xa2d237c0
2026-02-14T16:08:05.509 [DEBUG] [Thread-188251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:08:05.531 [DEBUG] [Thread-188251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:08:05.531 [INFO] [Thread-188251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:08:05.534 [DEBUG] [Thread-188251] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:08:05.534 [DEBUG] [Thread-188251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:08:05.534 [DEBUG] [Thread-188251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:08:05.534 [DEBUG] [Thread-188251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:08:05.534 [DEBUG] [Thread-188251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:08:05.534 [DEBUG] [Thread-188251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:08:05.534 [DEBUG] [Thread-188251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:08:05.534 [DEBUG] [Thread-188251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:08:05.534 [DEBUG] [Thread-188251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:08:05.534 [DEBUG] [Thread-188251] [transport.py] [_log()] client lang: <none>
2026-02-14T16:08:05.534 [DEBUG] [Thread-188251] [transport.py] [_log()] server lang: <none>
2026-02-14T16:08:05.534 [DEBUG] [Thread-188251] [transport.py] [_log()] kex follows: False
2026-02-14T16:08:05.534 [DEBUG] [Thread-188251] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:08:05.534 [DEBUG] [Thread-188251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:08:05.534 [DEBUG] [Thread-188251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:08:05.534 [DEBUG] [Thread-188251] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:08:05.535 [DEBUG] [Thread-188251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:08:05.535 [DEBUG] [Thread-188251] [transport.py] [_log()] Compression: none
2026-02-14T16:08:05.535 [DEBUG] [Thread-188251] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:08:05.552 [DEBUG] [Thread-188251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:08:05.552 [DEBUG] [Thread-188251] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:08:05.553 [DEBUG] [Thread-188251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:08:05.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:08:05.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:08:05.555 [DEBUG] [Thread-188251] [transport.py] [_log()] userauth is OK
2026-02-14T16:08:05.555 [DEBUG] [Thread-188251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:08:05.555 [DEBUG] [Thread-188251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:08:05.555 [DEBUG] [Thread-188251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:08:05.555 [DEBUG] [Thread-188251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:08:05.577 [INFO] [Thread-188251] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:08:05.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:08:06.244 [DEBUG] [Thread-188251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:08:06.245 [DEBUG] [Thread-188251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:08:06.245 [DEBUG] [Thread-188251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:08:06.285 [DEBUG] [Thread-188251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:08:06.286 [DEBUG] [Thread-188251] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:08:06.289 [DEBUG] [Thread-188251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:08:06.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:08:06.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:08:06.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:08:06.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:08:06.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:08:06.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:08:06.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:08:06.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:08:06.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:08:06.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.588301 -999.00  +16.40  26.32     39   +2.80 1 1 1 1 1   888    0 12.90 -18.90 ----- 26.1 26.3 130.6 34.1 21.7 -27.6 21.4 -26.7 22.9 -26.6 23.6 -27.9
2026-02-14T16:08:06.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:08:06.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:08:06.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.588301
2026-02-14T16:08:06.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:08:06.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:08:06.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:08:06.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:08:06.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:08:06.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:07:32', tmtdew=16.47, humidity=32.97, cloud=0.0, wind=28.13, temperature=17.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:07:09.206', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:08:06.315 [DEBUG] [Thread-188251] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:08:06.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T16:08:06.408 [DEBUG] [Thread-188254] [transport.py] [_log()] starting thread (client mode): 0xa2d22740
2026-02-14T16:08:06.408 [DEBUG] [Thread-188254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:08:06.423 [DEBUG] [Thread-188254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:08:06.423 [INFO] [Thread-188254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:08:06.430 [DEBUG] [Thread-188254] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:08:06.430 [DEBUG] [Thread-188254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:08:06.430 [DEBUG] [Thread-188254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:08:06.430 [DEBUG] [Thread-188254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:08:06.431 [DEBUG] [Thread-188254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:08:06.431 [DEBUG] [Thread-188254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:08:06.431 [DEBUG] [Thread-188254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:08:06.431 [DEBUG] [Thread-188254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:08:06.431 [DEBUG] [Thread-188254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:08:06.431 [DEBUG] [Thread-188254] [transport.py] [_log()] client lang: <none>
2026-02-14T16:08:06.431 [DEBUG] [Thread-188254] [transport.py] [_log()] server lang: <none>
2026-02-14T16:08:06.431 [DEBUG] [Thread-188254] [transport.py] [_log()] kex follows: False
2026-02-14T16:08:06.431 [DEBUG] [Thread-188254] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:08:06.431 [DEBUG] [Thread-188254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:08:06.431 [DEBUG] [Thread-188254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:08:06.431 [DEBUG] [Thread-188254] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:08:06.431 [DEBUG] [Thread-188254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:08:06.431 [DEBUG] [Thread-188254] [transport.py] [_log()] Compression: none
2026-02-14T16:08:06.431 [DEBUG] [Thread-188254] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:08:06.491 [DEBUG] [Thread-188254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:08:06.491 [DEBUG] [Thread-188254] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:08:06.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:08:06.493 [DEBUG] [Thread-188254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:08:06.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:08:06.547 [DEBUG] [Thread-188254] [transport.py] [_log()] userauth is OK
2026-02-14T16:08:06.548 [DEBUG] [Thread-188254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:08:06.548 [DEBUG] [Thread-188254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:08:06.548 [DEBUG] [Thread-188254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:08:06.548 [DEBUG] [Thread-188254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:08:06.566 [INFO] [Thread-188254] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:08:06.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:08:06.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:08:07.419 [DEBUG] [Thread-188254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:08:07.419 [DEBUG] [Thread-188254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:08:07.467 [DEBUG] [Thread-188254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:08:07.467 [DEBUG] [Thread-188254] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:08:07.477 [DEBUG] [Thread-188254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:08:07.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:08:07.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-14T16:08:07.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-14T16:08:07.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:08:07.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:08:07.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:08:07.513 [DEBUG] [Thread-188254] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:08:19.131 [DEBUG] [Thread-188256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:08:30.452 [DEBUG] [Thread-188257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:08:34.180 [DEBUG] [Thread-188258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:08:37.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:08:37.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:08:37.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-14T16:08:39.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 8, 8), 16.56, 32.77, 0.0, 29.61, 17.28, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:08:39.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:08:08
2026-02-14T16:08:39.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:08:39.913 [DEBUG] [Thread-188259] [transport.py] [_log()] starting thread (client mode): 0xa57b2ec0
2026-02-14T16:08:39.913 [DEBUG] [Thread-188259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:08:39.928 [DEBUG] [Thread-188259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:08:39.929 [INFO] [Thread-188259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:08:39.932 [DEBUG] [Thread-188259] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:08:39.932 [DEBUG] [Thread-188259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:08:39.932 [DEBUG] [Thread-188259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:08:39.932 [DEBUG] [Thread-188259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:08:39.932 [DEBUG] [Thread-188259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:08:39.932 [DEBUG] [Thread-188259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:08:39.932 [DEBUG] [Thread-188259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:08:39.932 [DEBUG] [Thread-188259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:08:39.932 [DEBUG] [Thread-188259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:08:39.932 [DEBUG] [Thread-188259] [transport.py] [_log()] client lang: <none>
2026-02-14T16:08:39.932 [DEBUG] [Thread-188259] [transport.py] [_log()] server lang: <none>
2026-02-14T16:08:39.932 [DEBUG] [Thread-188259] [transport.py] [_log()] kex follows: False
2026-02-14T16:08:39.932 [DEBUG] [Thread-188259] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:08:39.932 [DEBUG] [Thread-188259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:08:39.932 [DEBUG] [Thread-188259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:08:39.932 [DEBUG] [Thread-188259] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:08:39.933 [DEBUG] [Thread-188259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:08:39.933 [DEBUG] [Thread-188259] [transport.py] [_log()] Compression: none
2026-02-14T16:08:39.933 [DEBUG] [Thread-188259] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:08:39.951 [DEBUG] [Thread-188259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:08:39.952 [DEBUG] [Thread-188259] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:08:39.952 [DEBUG] [Thread-188259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:08:39.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:08:39.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:08:39.954 [DEBUG] [Thread-188259] [transport.py] [_log()] userauth is OK
2026-02-14T16:08:39.954 [DEBUG] [Thread-188259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:08:39.955 [DEBUG] [Thread-188259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:08:39.955 [DEBUG] [Thread-188259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:08:39.955 [DEBUG] [Thread-188259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:08:39.976 [INFO] [Thread-188259] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:08:39.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:08:40.606 [DEBUG] [Thread-188259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:08:40.606 [DEBUG] [Thread-188259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:08:40.607 [DEBUG] [Thread-188259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:08:40.647 [DEBUG] [Thread-188259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:08:40.648 [DEBUG] [Thread-188259] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:08:40.651 [DEBUG] [Thread-188259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:08:40.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:08:40.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:08:40.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:08:40.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:08:40.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:08:40.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:08:40.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:08:40.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:08:40.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:08:40.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.588648 -999.00  +16.60  25.56     39   +2.90 1 1 1 1 1   888    0 13.26 -14.63 ----- 22.6 25.6 131.0 30.4 21.8 -26.9 21.5 -26.6 23.0 -25.5 23.7 -28.7
2026-02-14T16:08:40.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:08:40.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:08:40.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.588648
2026-02-14T16:08:40.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:08:40.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:08:40.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:08:40.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:08:40.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:08:40.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:08:08', tmtdew=16.56, humidity=32.77, cloud=0.0, wind=29.61, temperature=17.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:07:39.187', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:08:40.677 [DEBUG] [Thread-188259] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:08:40.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-14T16:08:40.775 [DEBUG] [Thread-188262] [transport.py] [_log()] starting thread (client mode): 0xa2dec910
2026-02-14T16:08:40.775 [DEBUG] [Thread-188262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:08:40.789 [DEBUG] [Thread-188262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:08:40.789 [INFO] [Thread-188262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:08:40.797 [DEBUG] [Thread-188262] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:08:40.797 [DEBUG] [Thread-188262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:08:40.797 [DEBUG] [Thread-188262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:08:40.797 [DEBUG] [Thread-188262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:08:40.797 [DEBUG] [Thread-188262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:08:40.798 [DEBUG] [Thread-188262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:08:40.798 [DEBUG] [Thread-188262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:08:40.798 [DEBUG] [Thread-188262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:08:40.798 [DEBUG] [Thread-188262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:08:40.798 [DEBUG] [Thread-188262] [transport.py] [_log()] client lang: <none>
2026-02-14T16:08:40.798 [DEBUG] [Thread-188262] [transport.py] [_log()] server lang: <none>
2026-02-14T16:08:40.798 [DEBUG] [Thread-188262] [transport.py] [_log()] kex follows: False
2026-02-14T16:08:40.798 [DEBUG] [Thread-188262] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:08:40.798 [DEBUG] [Thread-188262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:08:40.798 [DEBUG] [Thread-188262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:08:40.798 [DEBUG] [Thread-188262] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:08:40.798 [DEBUG] [Thread-188262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:08:40.798 [DEBUG] [Thread-188262] [transport.py] [_log()] Compression: none
2026-02-14T16:08:40.798 [DEBUG] [Thread-188262] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:08:40.854 [DEBUG] [Thread-188262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:08:40.855 [DEBUG] [Thread-188262] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:08:40.855 [DEBUG] [Thread-188262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:08:40.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:08:40.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:08:40.910 [DEBUG] [Thread-188262] [transport.py] [_log()] userauth is OK
2026-02-14T16:08:40.911 [DEBUG] [Thread-188262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:08:40.911 [DEBUG] [Thread-188262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:08:40.911 [DEBUG] [Thread-188262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:08:40.911 [DEBUG] [Thread-188262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:08:40.929 [INFO] [Thread-188262] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:08:40.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-14T16:08:40.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:08:41.764 [DEBUG] [Thread-188262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:08:41.765 [DEBUG] [Thread-188262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:08:41.812 [DEBUG] [Thread-188262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:08:41.813 [DEBUG] [Thread-188262] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:08:41.822 [DEBUG] [Thread-188262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:08:41.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:08:41.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:08:41.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:08:41.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:08:41.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:08:41.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:08:41.860 [DEBUG] [Thread-188262] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:08:49.216 [DEBUG] [Thread-188264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:08:52.834 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:08:52.835 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:09:04.273 [DEBUG] [Thread-188265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:09:11.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:09:11.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:09:11.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:09:13.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 8, 43), 16.35, 33.19, 0.0, 31.04, 16.98, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:09:13.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:08:43
2026-02-14T16:09:14.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:09:14.227 [DEBUG] [Thread-188266] [transport.py] [_log()] starting thread (client mode): 0xa2d23640
2026-02-14T16:09:14.227 [DEBUG] [Thread-188266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:09:14.248 [DEBUG] [Thread-188266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:09:14.248 [INFO] [Thread-188266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:09:14.250 [DEBUG] [Thread-188266] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:09:14.250 [DEBUG] [Thread-188266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:09:14.251 [DEBUG] [Thread-188266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:09:14.251 [DEBUG] [Thread-188266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:09:14.251 [DEBUG] [Thread-188266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:09:14.251 [DEBUG] [Thread-188266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:09:14.251 [DEBUG] [Thread-188266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:09:14.251 [DEBUG] [Thread-188266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:09:14.251 [DEBUG] [Thread-188266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:09:14.251 [DEBUG] [Thread-188266] [transport.py] [_log()] client lang: <none>
2026-02-14T16:09:14.251 [DEBUG] [Thread-188266] [transport.py] [_log()] server lang: <none>
2026-02-14T16:09:14.251 [DEBUG] [Thread-188266] [transport.py] [_log()] kex follows: False
2026-02-14T16:09:14.252 [DEBUG] [Thread-188266] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:09:14.252 [DEBUG] [Thread-188266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:09:14.252 [DEBUG] [Thread-188266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:09:14.252 [DEBUG] [Thread-188266] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:09:14.252 [DEBUG] [Thread-188266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:09:14.252 [DEBUG] [Thread-188266] [transport.py] [_log()] Compression: none
2026-02-14T16:09:14.252 [DEBUG] [Thread-188266] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:09:14.269 [DEBUG] [Thread-188266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:09:14.269 [DEBUG] [Thread-188266] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:09:14.270 [DEBUG] [Thread-188266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:09:14.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:09:14.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:09:14.313 [DEBUG] [Thread-188266] [transport.py] [_log()] userauth is OK
2026-02-14T16:09:14.313 [DEBUG] [Thread-188266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:09:14.313 [DEBUG] [Thread-188266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:09:14.313 [DEBUG] [Thread-188266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:09:14.313 [DEBUG] [Thread-188266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:09:14.337 [INFO] [Thread-188266] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:09:14.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:09:15.140 [DEBUG] [Thread-188266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:09:15.141 [DEBUG] [Thread-188266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:09:15.141 [DEBUG] [Thread-188266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:09:15.181 [DEBUG] [Thread-188266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:09:15.182 [DEBUG] [Thread-188266] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:09:15.185 [DEBUG] [Thread-188266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:09:15.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:09:15.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:09:15.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:09:15.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:09:15.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:09:15.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:09:15.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:09:15.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:09:15.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:09:15.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.588995 -999.00  +16.80  34.24     39   +2.80 1 1 2 1 1   888    0 13.33 -12.07 ----- 25.2 34.2 135.0 43.5 21.8 -28.1 21.6 -27.2 23.0 -26.4 23.8 -28.2
2026-02-14T16:09:15.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:09:15.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:09:15.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.588995
2026-02-14T16:09:15.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:09:15.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:09:15.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:09:15.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:09:15.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:09:15.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:08:43', tmtdew=16.35, humidity=33.19, cloud=0.0, wind=31.04, temperature=16.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:08:09.168', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:09:15.214 [DEBUG] [Thread-188266] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:09:15.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-14T16:09:15.309 [DEBUG] [Thread-188269] [transport.py] [_log()] starting thread (client mode): 0xa2d21810
2026-02-14T16:09:15.309 [DEBUG] [Thread-188269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:09:15.323 [DEBUG] [Thread-188269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:09:15.324 [INFO] [Thread-188269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:09:15.331 [DEBUG] [Thread-188269] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:09:15.331 [DEBUG] [Thread-188269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:09:15.332 [DEBUG] [Thread-188269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:09:15.332 [DEBUG] [Thread-188269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:09:15.332 [DEBUG] [Thread-188269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:09:15.332 [DEBUG] [Thread-188269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:09:15.332 [DEBUG] [Thread-188269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:09:15.332 [DEBUG] [Thread-188269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:09:15.332 [DEBUG] [Thread-188269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:09:15.332 [DEBUG] [Thread-188269] [transport.py] [_log()] client lang: <none>
2026-02-14T16:09:15.332 [DEBUG] [Thread-188269] [transport.py] [_log()] server lang: <none>
2026-02-14T16:09:15.332 [DEBUG] [Thread-188269] [transport.py] [_log()] kex follows: False
2026-02-14T16:09:15.332 [DEBUG] [Thread-188269] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:09:15.332 [DEBUG] [Thread-188269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:09:15.332 [DEBUG] [Thread-188269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:09:15.332 [DEBUG] [Thread-188269] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:09:15.332 [DEBUG] [Thread-188269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:09:15.332 [DEBUG] [Thread-188269] [transport.py] [_log()] Compression: none
2026-02-14T16:09:15.332 [DEBUG] [Thread-188269] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:09:15.394 [DEBUG] [Thread-188269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:09:15.395 [DEBUG] [Thread-188269] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:09:15.395 [DEBUG] [Thread-188269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:09:15.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:09:15.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:09:15.450 [DEBUG] [Thread-188269] [transport.py] [_log()] userauth is OK
2026-02-14T16:09:15.450 [DEBUG] [Thread-188269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:09:15.451 [DEBUG] [Thread-188269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:09:15.451 [DEBUG] [Thread-188269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:09:15.451 [DEBUG] [Thread-188269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:09:15.469 [INFO] [Thread-188269] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:09:15.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-14T16:09:15.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:09:16.290 [DEBUG] [Thread-188269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:09:16.290 [DEBUG] [Thread-188269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:09:16.338 [DEBUG] [Thread-188269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:09:16.339 [DEBUG] [Thread-188269] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:09:16.348 [DEBUG] [Thread-188269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:09:16.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:09:16.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:09:16.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:09:16.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:09:16.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:09:16.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:09:16.383 [DEBUG] [Thread-188269] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:09:19.312 [DEBUG] [Thread-188271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:09:30.513 [DEBUG] [Thread-188272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:09:34.364 [DEBUG] [Thread-188273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:09:46.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:09:46.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:09:46.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-14T16:09:48.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 9, 19), 16.3, 33.29, 0.0, 32.29, 16.95, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:09:48.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:09:19
2026-02-14T16:09:48.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:09:48.848 [DEBUG] [Thread-188274] [transport.py] [_log()] starting thread (client mode): 0xa57b3400
2026-02-14T16:09:48.849 [DEBUG] [Thread-188274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:09:48.868 [DEBUG] [Thread-188274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:09:48.869 [INFO] [Thread-188274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:09:48.871 [DEBUG] [Thread-188274] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:09:48.872 [DEBUG] [Thread-188274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:09:48.872 [DEBUG] [Thread-188274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:09:48.872 [DEBUG] [Thread-188274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:09:48.872 [DEBUG] [Thread-188274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:09:48.872 [DEBUG] [Thread-188274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:09:48.872 [DEBUG] [Thread-188274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:09:48.872 [DEBUG] [Thread-188274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:09:48.872 [DEBUG] [Thread-188274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:09:48.872 [DEBUG] [Thread-188274] [transport.py] [_log()] client lang: <none>
2026-02-14T16:09:48.872 [DEBUG] [Thread-188274] [transport.py] [_log()] server lang: <none>
2026-02-14T16:09:48.872 [DEBUG] [Thread-188274] [transport.py] [_log()] kex follows: False
2026-02-14T16:09:48.872 [DEBUG] [Thread-188274] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:09:48.872 [DEBUG] [Thread-188274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:09:48.872 [DEBUG] [Thread-188274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:09:48.872 [DEBUG] [Thread-188274] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:09:48.872 [DEBUG] [Thread-188274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:09:48.872 [DEBUG] [Thread-188274] [transport.py] [_log()] Compression: none
2026-02-14T16:09:48.872 [DEBUG] [Thread-188274] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:09:48.890 [DEBUG] [Thread-188274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:09:48.891 [DEBUG] [Thread-188274] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:09:48.891 [DEBUG] [Thread-188274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:09:48.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:09:48.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:09:48.893 [DEBUG] [Thread-188274] [transport.py] [_log()] userauth is OK
2026-02-14T16:09:48.893 [DEBUG] [Thread-188274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:09:48.893 [DEBUG] [Thread-188274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:09:48.893 [DEBUG] [Thread-188274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:09:48.894 [DEBUG] [Thread-188274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:09:48.916 [INFO] [Thread-188274] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:09:48.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:09:49.401 [DEBUG] [Thread-188276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:09:49.494 [DEBUG] [Thread-188274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:09:49.495 [DEBUG] [Thread-188274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:09:49.495 [DEBUG] [Thread-188274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:09:49.535 [DEBUG] [Thread-188274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:09:49.535 [DEBUG] [Thread-188274] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:09:49.537 [DEBUG] [Thread-188274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:09:49.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:09:49.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:09:49.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:09:49.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:09:49.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:09:49.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:09:49.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:09:49.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:09:49.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:09:49.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.590037 -999.00  +16.80  17.88     39   +2.90 1 1 1 1 1   888    0 13.42 -8.92 ----- 15.2 17.9 169.8 29.2 21.8 -28.0 21.3 -31.3 22.9 -27.4 23.7 -28.5
2026-02-14T16:09:49.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:09:49.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:09:49.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.590037
2026-02-14T16:09:49.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:09:49.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:09:49.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:09:49.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:09:49.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:09:49.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:09:19', tmtdew=16.3, humidity=33.29, cloud=0.0, wind=32.29, temperature=16.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:09:39.197', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:09:49.559 [DEBUG] [Thread-188274] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:09:49.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-14T16:09:49.654 [DEBUG] [Thread-188278] [transport.py] [_log()] starting thread (client mode): 0xa2dec730
2026-02-14T16:09:49.654 [DEBUG] [Thread-188278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:09:49.669 [DEBUG] [Thread-188278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:09:49.669 [INFO] [Thread-188278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:09:49.677 [DEBUG] [Thread-188278] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:09:49.677 [DEBUG] [Thread-188278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:09:49.677 [DEBUG] [Thread-188278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:09:49.677 [DEBUG] [Thread-188278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:09:49.677 [DEBUG] [Thread-188278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:09:49.677 [DEBUG] [Thread-188278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:09:49.677 [DEBUG] [Thread-188278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:09:49.677 [DEBUG] [Thread-188278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:09:49.678 [DEBUG] [Thread-188278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:09:49.678 [DEBUG] [Thread-188278] [transport.py] [_log()] client lang: <none>
2026-02-14T16:09:49.678 [DEBUG] [Thread-188278] [transport.py] [_log()] server lang: <none>
2026-02-14T16:09:49.678 [DEBUG] [Thread-188278] [transport.py] [_log()] kex follows: False
2026-02-14T16:09:49.678 [DEBUG] [Thread-188278] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:09:49.678 [DEBUG] [Thread-188278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:09:49.678 [DEBUG] [Thread-188278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:09:49.678 [DEBUG] [Thread-188278] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:09:49.678 [DEBUG] [Thread-188278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:09:49.678 [DEBUG] [Thread-188278] [transport.py] [_log()] Compression: none
2026-02-14T16:09:49.678 [DEBUG] [Thread-188278] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:09:49.734 [DEBUG] [Thread-188278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:09:49.734 [DEBUG] [Thread-188278] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:09:49.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:09:49.736 [DEBUG] [Thread-188278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:09:49.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:09:49.789 [DEBUG] [Thread-188278] [transport.py] [_log()] userauth is OK
2026-02-14T16:09:49.790 [DEBUG] [Thread-188278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:09:49.790 [DEBUG] [Thread-188278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:09:49.790 [DEBUG] [Thread-188278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:09:49.790 [DEBUG] [Thread-188278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:09:49.810 [INFO] [Thread-188278] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:09:49.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:09:49.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:09:50.690 [DEBUG] [Thread-188278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:09:50.691 [DEBUG] [Thread-188278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:09:50.738 [DEBUG] [Thread-188278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:09:50.738 [DEBUG] [Thread-188278] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:09:50.746 [DEBUG] [Thread-188278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:09:50.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:09:50.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-14T16:09:50.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-14T16:09:50.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:09:50.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:09:50.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:09:50.779 [DEBUG] [Thread-188278] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:09:52.973 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:09:52.974 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:10:04.440 [DEBUG] [Thread-188280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:10:19.495 [DEBUG] [Thread-188281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:10:20.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:10:20.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:10:20.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:10:22.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 9, 54), 16.14, 33.6, 0.0, 29.22, 16.84, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:10:22.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:09:54
2026-02-14T16:10:22.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:10:23.136 [DEBUG] [Thread-188282] [transport.py] [_log()] starting thread (client mode): 0xa57b0460
2026-02-14T16:10:23.136 [DEBUG] [Thread-188282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:10:23.156 [DEBUG] [Thread-188282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:10:23.156 [INFO] [Thread-188282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:10:23.159 [DEBUG] [Thread-188282] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:10:23.159 [DEBUG] [Thread-188282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:10:23.160 [DEBUG] [Thread-188282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:10:23.160 [DEBUG] [Thread-188282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:10:23.160 [DEBUG] [Thread-188282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:10:23.160 [DEBUG] [Thread-188282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:10:23.160 [DEBUG] [Thread-188282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:10:23.160 [DEBUG] [Thread-188282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:10:23.160 [DEBUG] [Thread-188282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:10:23.160 [DEBUG] [Thread-188282] [transport.py] [_log()] client lang: <none>
2026-02-14T16:10:23.160 [DEBUG] [Thread-188282] [transport.py] [_log()] server lang: <none>
2026-02-14T16:10:23.160 [DEBUG] [Thread-188282] [transport.py] [_log()] kex follows: False
2026-02-14T16:10:23.160 [DEBUG] [Thread-188282] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:10:23.160 [DEBUG] [Thread-188282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:10:23.160 [DEBUG] [Thread-188282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:10:23.160 [DEBUG] [Thread-188282] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:10:23.160 [DEBUG] [Thread-188282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:10:23.160 [DEBUG] [Thread-188282] [transport.py] [_log()] Compression: none
2026-02-14T16:10:23.160 [DEBUG] [Thread-188282] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:10:23.176 [DEBUG] [Thread-188282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:10:23.176 [DEBUG] [Thread-188282] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:10:23.177 [DEBUG] [Thread-188282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:10:23.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:10:23.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:10:23.178 [DEBUG] [Thread-188282] [transport.py] [_log()] userauth is OK
2026-02-14T16:10:23.179 [DEBUG] [Thread-188282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:10:23.179 [DEBUG] [Thread-188282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:10:23.179 [DEBUG] [Thread-188282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:10:23.179 [DEBUG] [Thread-188282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:10:23.202 [INFO] [Thread-188282] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:10:23.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:10:23.835 [DEBUG] [Thread-188282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:10:23.836 [DEBUG] [Thread-188282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:10:23.836 [DEBUG] [Thread-188282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:10:23.876 [DEBUG] [Thread-188282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:10:23.876 [DEBUG] [Thread-188282] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:10:23.879 [DEBUG] [Thread-188282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:10:23.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:10:23.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:10:23.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:10:23.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:10:23.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:10:23.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:10:23.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:10:23.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:10:23.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:10:23.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.590384 -999.00  +16.80  18.17     39   +2.90 1 1 1 1 1   888    0 13.37 -8.69 ----- 18.6 18.2 166.1 29.7 22.0 -27.0 21.2 -28.2 23.1 -24.8 23.9 -26.9
2026-02-14T16:10:23.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:10:23.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:10:23.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.590384
2026-02-14T16:10:23.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:10:23.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:10:23.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:10:23.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:10:23.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:10:23.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:09:54', tmtdew=16.14, humidity=33.6, cloud=0.0, wind=29.22, temperature=16.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:10:09.178', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:10:23.904 [DEBUG] [Thread-188282] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:10:23.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-14T16:10:24.000 [DEBUG] [Thread-188285] [transport.py] [_log()] starting thread (client mode): 0xa57b2020
2026-02-14T16:10:24.000 [DEBUG] [Thread-188285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:10:24.017 [DEBUG] [Thread-188285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:10:24.017 [INFO] [Thread-188285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:10:24.025 [DEBUG] [Thread-188285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:10:24.025 [DEBUG] [Thread-188285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:10:24.025 [DEBUG] [Thread-188285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:10:24.025 [DEBUG] [Thread-188285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:10:24.025 [DEBUG] [Thread-188285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:10:24.025 [DEBUG] [Thread-188285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:10:24.026 [DEBUG] [Thread-188285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:10:24.026 [DEBUG] [Thread-188285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:10:24.026 [DEBUG] [Thread-188285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:10:24.026 [DEBUG] [Thread-188285] [transport.py] [_log()] client lang: <none>
2026-02-14T16:10:24.026 [DEBUG] [Thread-188285] [transport.py] [_log()] server lang: <none>
2026-02-14T16:10:24.026 [DEBUG] [Thread-188285] [transport.py] [_log()] kex follows: False
2026-02-14T16:10:24.026 [DEBUG] [Thread-188285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:10:24.026 [DEBUG] [Thread-188285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:10:24.026 [DEBUG] [Thread-188285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:10:24.026 [DEBUG] [Thread-188285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:10:24.026 [DEBUG] [Thread-188285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:10:24.026 [DEBUG] [Thread-188285] [transport.py] [_log()] Compression: none
2026-02-14T16:10:24.026 [DEBUG] [Thread-188285] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:10:24.086 [DEBUG] [Thread-188285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:10:24.086 [DEBUG] [Thread-188285] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:10:24.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:10:24.088 [DEBUG] [Thread-188285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:10:24.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:10:24.145 [DEBUG] [Thread-188285] [transport.py] [_log()] userauth is OK
2026-02-14T16:10:24.145 [DEBUG] [Thread-188285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:10:24.145 [DEBUG] [Thread-188285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:10:24.145 [DEBUG] [Thread-188285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:10:24.145 [DEBUG] [Thread-188285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:10:24.158 [INFO] [Thread-188285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:10:24.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:10:24.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:10:24.990 [DEBUG] [Thread-188285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:10:24.991 [DEBUG] [Thread-188285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:10:25.038 [DEBUG] [Thread-188285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:10:25.039 [DEBUG] [Thread-188285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:10:25.049 [DEBUG] [Thread-188285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:10:25.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:10:25.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:10:25.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-14T16:10:25.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:10:25.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:10:25.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:10:25.086 [DEBUG] [Thread-188285] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:10:30.548 [DEBUG] [Thread-188287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:10:34.530 [DEBUG] [Thread-188288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:10:49.582 [DEBUG] [Thread-188289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:10:53.117 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:10:53.118 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:10:55.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:10:55.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:10:55.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-14T16:10:57.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 10, 29), 16.02, 33.85, 0.0, 27.93, 16.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:10:57.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:10:29
2026-02-14T16:10:57.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:10:57.921 [DEBUG] [Thread-188290] [transport.py] [_log()] starting thread (client mode): 0xa57b1420
2026-02-14T16:10:57.921 [DEBUG] [Thread-188290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:10:57.940 [DEBUG] [Thread-188290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:10:57.940 [INFO] [Thread-188290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:10:57.944 [DEBUG] [Thread-188290] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:10:57.944 [DEBUG] [Thread-188290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:10:57.944 [DEBUG] [Thread-188290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:10:57.944 [DEBUG] [Thread-188290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:10:57.944 [DEBUG] [Thread-188290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:10:57.944 [DEBUG] [Thread-188290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:10:57.944 [DEBUG] [Thread-188290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:10:57.944 [DEBUG] [Thread-188290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:10:57.944 [DEBUG] [Thread-188290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:10:57.944 [DEBUG] [Thread-188290] [transport.py] [_log()] client lang: <none>
2026-02-14T16:10:57.944 [DEBUG] [Thread-188290] [transport.py] [_log()] server lang: <none>
2026-02-14T16:10:57.944 [DEBUG] [Thread-188290] [transport.py] [_log()] kex follows: False
2026-02-14T16:10:57.944 [DEBUG] [Thread-188290] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:10:57.944 [DEBUG] [Thread-188290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:10:57.945 [DEBUG] [Thread-188290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:10:57.945 [DEBUG] [Thread-188290] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:10:57.945 [DEBUG] [Thread-188290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:10:57.945 [DEBUG] [Thread-188290] [transport.py] [_log()] Compression: none
2026-02-14T16:10:57.945 [DEBUG] [Thread-188290] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:10:57.962 [DEBUG] [Thread-188290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:10:57.962 [DEBUG] [Thread-188290] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:10:57.963 [DEBUG] [Thread-188290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:10:57.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:10:57.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:10:57.965 [DEBUG] [Thread-188290] [transport.py] [_log()] userauth is OK
2026-02-14T16:10:57.965 [DEBUG] [Thread-188290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:10:57.965 [DEBUG] [Thread-188290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:10:57.965 [DEBUG] [Thread-188290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:10:57.965 [DEBUG] [Thread-188290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:10:57.986 [INFO] [Thread-188290] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:10:57.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:10:58.624 [DEBUG] [Thread-188290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:10:58.624 [DEBUG] [Thread-188290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:10:58.624 [DEBUG] [Thread-188290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:10:58.665 [DEBUG] [Thread-188290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:10:58.665 [DEBUG] [Thread-188290] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:10:58.669 [DEBUG] [Thread-188290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:10:58.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:10:58.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:10:58.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:10:58.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:10:58.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:10:58.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:10:58.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:10:58.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:10:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:10:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.590732 -999.00  +17.00  26.28     39   +3.00 1 1 1 1 1   888    0 13.32 -7.21 ----- 28.3 26.3 158.6 30.1 22.0 -29.0 21.5 -26.2 23.1 -27.2 23.9 -28.5
2026-02-14T16:10:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:10:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:10:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.590732
2026-02-14T16:10:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:10:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:10:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:10:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:10:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:10:58.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:10:29', tmtdew=16.02, humidity=33.85, cloud=0.0, wind=27.93, temperature=16.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:10:39.245', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:10:58.687 [DEBUG] [Thread-188290] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:10:58.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-14T16:10:58.774 [DEBUG] [Thread-188293] [transport.py] [_log()] starting thread (client mode): 0xa57b3a00
2026-02-14T16:10:58.774 [DEBUG] [Thread-188293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:10:58.791 [DEBUG] [Thread-188293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:10:58.791 [INFO] [Thread-188293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:10:58.798 [DEBUG] [Thread-188293] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:10:58.799 [DEBUG] [Thread-188293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:10:58.799 [DEBUG] [Thread-188293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:10:58.799 [DEBUG] [Thread-188293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:10:58.799 [DEBUG] [Thread-188293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:10:58.799 [DEBUG] [Thread-188293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:10:58.799 [DEBUG] [Thread-188293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:10:58.799 [DEBUG] [Thread-188293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:10:58.799 [DEBUG] [Thread-188293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:10:58.799 [DEBUG] [Thread-188293] [transport.py] [_log()] client lang: <none>
2026-02-14T16:10:58.800 [DEBUG] [Thread-188293] [transport.py] [_log()] server lang: <none>
2026-02-14T16:10:58.800 [DEBUG] [Thread-188293] [transport.py] [_log()] kex follows: False
2026-02-14T16:10:58.800 [DEBUG] [Thread-188293] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:10:58.800 [DEBUG] [Thread-188293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:10:58.800 [DEBUG] [Thread-188293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:10:58.800 [DEBUG] [Thread-188293] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:10:58.801 [DEBUG] [Thread-188293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:10:58.801 [DEBUG] [Thread-188293] [transport.py] [_log()] Compression: none
2026-02-14T16:10:58.801 [DEBUG] [Thread-188293] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:10:58.860 [DEBUG] [Thread-188293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:10:58.861 [DEBUG] [Thread-188293] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:10:58.861 [DEBUG] [Thread-188293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:10:58.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:10:58.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:10:58.916 [DEBUG] [Thread-188293] [transport.py] [_log()] userauth is OK
2026-02-14T16:10:58.916 [DEBUG] [Thread-188293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:10:58.916 [DEBUG] [Thread-188293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:10:58.917 [DEBUG] [Thread-188293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:10:58.917 [DEBUG] [Thread-188293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:10:58.936 [INFO] [Thread-188293] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:10:58.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-14T16:10:58.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:10:59.772 [DEBUG] [Thread-188293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:10:59.776 [DEBUG] [Thread-188293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:10:59.821 [DEBUG] [Thread-188293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:10:59.821 [DEBUG] [Thread-188293] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:10:59.830 [DEBUG] [Thread-188293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:10:59.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:10:59.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-14T16:10:59.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-14T16:10:59.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:10:59.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:10:59.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:10:59.864 [DEBUG] [Thread-188293] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:11:04.615 [DEBUG] [Thread-188295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:11:19.669 [DEBUG] [Thread-188296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:11:29.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:11:29.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:11:29.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-14T16:11:30.585 [DEBUG] [Thread-188297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:11:31.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 11, 4), 16.05, 33.83, 0.0, 27.65, 16.93, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:11:31.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:11:04
2026-02-14T16:11:32.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:11:32.258 [DEBUG] [Thread-188298] [transport.py] [_log()] starting thread (client mode): 0xa2dee4d0
2026-02-14T16:11:32.258 [DEBUG] [Thread-188298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:11:32.279 [DEBUG] [Thread-188298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:11:32.279 [INFO] [Thread-188298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:11:32.282 [DEBUG] [Thread-188298] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:11:32.283 [DEBUG] [Thread-188298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:11:32.283 [DEBUG] [Thread-188298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:11:32.283 [DEBUG] [Thread-188298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:11:32.283 [DEBUG] [Thread-188298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:11:32.283 [DEBUG] [Thread-188298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:11:32.283 [DEBUG] [Thread-188298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:11:32.283 [DEBUG] [Thread-188298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:11:32.283 [DEBUG] [Thread-188298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:11:32.283 [DEBUG] [Thread-188298] [transport.py] [_log()] client lang: <none>
2026-02-14T16:11:32.283 [DEBUG] [Thread-188298] [transport.py] [_log()] server lang: <none>
2026-02-14T16:11:32.283 [DEBUG] [Thread-188298] [transport.py] [_log()] kex follows: False
2026-02-14T16:11:32.283 [DEBUG] [Thread-188298] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:11:32.283 [DEBUG] [Thread-188298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:11:32.283 [DEBUG] [Thread-188298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:11:32.283 [DEBUG] [Thread-188298] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:11:32.283 [DEBUG] [Thread-188298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:11:32.283 [DEBUG] [Thread-188298] [transport.py] [_log()] Compression: none
2026-02-14T16:11:32.283 [DEBUG] [Thread-188298] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:11:32.301 [DEBUG] [Thread-188298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:11:32.301 [DEBUG] [Thread-188298] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:11:32.302 [DEBUG] [Thread-188298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:11:32.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:11:32.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:11:32.304 [DEBUG] [Thread-188298] [transport.py] [_log()] userauth is OK
2026-02-14T16:11:32.304 [DEBUG] [Thread-188298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:11:32.304 [DEBUG] [Thread-188298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:11:32.304 [DEBUG] [Thread-188298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:11:32.304 [DEBUG] [Thread-188298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:11:32.329 [INFO] [Thread-188298] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:11:32.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:11:32.958 [DEBUG] [Thread-188298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:11:32.958 [DEBUG] [Thread-188298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:11:32.958 [DEBUG] [Thread-188298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:11:33.001 [DEBUG] [Thread-188298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:11:33.001 [DEBUG] [Thread-188298] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:11:33.004 [DEBUG] [Thread-188298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:11:33.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:11:33.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:11:33.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:11:33.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:11:33.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:11:33.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:11:33.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:11:33.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:11:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:11:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.591079 -999.00  +16.90  20.26     38   +2.80 1 1 1 1 1   888    0 13.45 -4.11 ----- 28.2 20.3 161.6 36.3 21.9 -28.9 21.4 -28.3 23.0 -25.7 23.9 -28.3
2026-02-14T16:11:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:11:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:11:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.591079
2026-02-14T16:11:33.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:11:33.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:11:33.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:11:33.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:11:33.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:11:33.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:11:04', tmtdew=16.05, humidity=33.83, cloud=0.0, wind=27.65, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:11:09.226', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:11:33.027 [DEBUG] [Thread-188298] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:11:33.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-14T16:11:33.122 [DEBUG] [Thread-188301] [transport.py] [_log()] starting thread (client mode): 0xa2d22e90
2026-02-14T16:11:33.122 [DEBUG] [Thread-188301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:11:33.139 [DEBUG] [Thread-188301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:11:33.139 [INFO] [Thread-188301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:11:33.146 [DEBUG] [Thread-188301] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:11:33.146 [DEBUG] [Thread-188301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:11:33.146 [DEBUG] [Thread-188301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:11:33.146 [DEBUG] [Thread-188301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:11:33.147 [DEBUG] [Thread-188301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:11:33.147 [DEBUG] [Thread-188301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:11:33.147 [DEBUG] [Thread-188301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:11:33.147 [DEBUG] [Thread-188301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:11:33.147 [DEBUG] [Thread-188301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:11:33.147 [DEBUG] [Thread-188301] [transport.py] [_log()] client lang: <none>
2026-02-14T16:11:33.147 [DEBUG] [Thread-188301] [transport.py] [_log()] server lang: <none>
2026-02-14T16:11:33.147 [DEBUG] [Thread-188301] [transport.py] [_log()] kex follows: False
2026-02-14T16:11:33.147 [DEBUG] [Thread-188301] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:11:33.147 [DEBUG] [Thread-188301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:11:33.147 [DEBUG] [Thread-188301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:11:33.147 [DEBUG] [Thread-188301] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:11:33.147 [DEBUG] [Thread-188301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:11:33.147 [DEBUG] [Thread-188301] [transport.py] [_log()] Compression: none
2026-02-14T16:11:33.147 [DEBUG] [Thread-188301] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:11:33.204 [DEBUG] [Thread-188301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:11:33.205 [DEBUG] [Thread-188301] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:11:33.205 [DEBUG] [Thread-188301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:11:33.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:11:33.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:11:33.261 [DEBUG] [Thread-188301] [transport.py] [_log()] userauth is OK
2026-02-14T16:11:33.261 [DEBUG] [Thread-188301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:11:33.261 [DEBUG] [Thread-188301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:11:33.261 [DEBUG] [Thread-188301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:11:33.261 [DEBUG] [Thread-188301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:11:33.280 [INFO] [Thread-188301] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:11:33.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-14T16:11:33.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:11:34.106 [DEBUG] [Thread-188301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:11:34.106 [DEBUG] [Thread-188301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:11:34.154 [DEBUG] [Thread-188301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:11:34.154 [DEBUG] [Thread-188301] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:11:34.163 [DEBUG] [Thread-188301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:11:34.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:11:34.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:11: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') -> 00000000
2026-02-14T16:11:34.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:11:34.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:11:34.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:11:34.198 [DEBUG] [Thread-188301] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:11:34.709 [DEBUG] [Thread-188303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:11:49.762 [DEBUG] [Thread-188304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:11:53.258 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:11:53.259 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:12:04.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:12:04.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:12:04.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-14T16:12:04.803 [DEBUG] [Thread-188305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:12:06.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 11, 40), 17.85, 30.14, 0.0, 32.85, 18.7, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:12:06.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:11:40
2026-02-14T16:12:06.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:12:07.015 [DEBUG] [Thread-188306] [transport.py] [_log()] starting thread (client mode): 0xa2deda20
2026-02-14T16:12:07.015 [DEBUG] [Thread-188306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:12:07.036 [DEBUG] [Thread-188306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:12:07.036 [INFO] [Thread-188306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:12:07.040 [DEBUG] [Thread-188306] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:12:07.040 [DEBUG] [Thread-188306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:12:07.040 [DEBUG] [Thread-188306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:12:07.040 [DEBUG] [Thread-188306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:12:07.040 [DEBUG] [Thread-188306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:12:07.040 [DEBUG] [Thread-188306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:12:07.040 [DEBUG] [Thread-188306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:12:07.040 [DEBUG] [Thread-188306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:12:07.040 [DEBUG] [Thread-188306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:12:07.040 [DEBUG] [Thread-188306] [transport.py] [_log()] client lang: <none>
2026-02-14T16:12:07.040 [DEBUG] [Thread-188306] [transport.py] [_log()] server lang: <none>
2026-02-14T16:12:07.040 [DEBUG] [Thread-188306] [transport.py] [_log()] kex follows: False
2026-02-14T16:12:07.040 [DEBUG] [Thread-188306] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:12:07.040 [DEBUG] [Thread-188306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:12:07.040 [DEBUG] [Thread-188306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:12:07.040 [DEBUG] [Thread-188306] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:12:07.040 [DEBUG] [Thread-188306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:12:07.040 [DEBUG] [Thread-188306] [transport.py] [_log()] Compression: none
2026-02-14T16:12:07.040 [DEBUG] [Thread-188306] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:12:07.058 [DEBUG] [Thread-188306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:12:07.059 [DEBUG] [Thread-188306] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:12:07.059 [DEBUG] [Thread-188306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:12:07.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:12:07.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:12:07.061 [DEBUG] [Thread-188306] [transport.py] [_log()] userauth is OK
2026-02-14T16:12:07.062 [DEBUG] [Thread-188306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:12:07.062 [DEBUG] [Thread-188306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:12:07.062 [DEBUG] [Thread-188306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:12:07.062 [DEBUG] [Thread-188306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:12:07.102 [INFO] [Thread-188306] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:12:07.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:12:07.689 [DEBUG] [Thread-188306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:12:07.690 [DEBUG] [Thread-188306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:12:07.690 [DEBUG] [Thread-188306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:12:07.730 [DEBUG] [Thread-188306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:12:07.731 [DEBUG] [Thread-188306] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:12:07.734 [DEBUG] [Thread-188306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:12:07.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:12:07.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:12:07.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:12:07.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:12:07.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:12:07.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:12:07.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:12:07.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:12:07.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:12:07.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.591426 -999.00  +16.60  24.74     39   +2.90 1 1 1 1 1   888    0 13.57 -0.32 ----- 20.8 24.7 189.6 33.5 21.8 -28.6 21.0 -29.3 22.8 -27.9 23.6 -29.7
2026-02-14T16:12:07.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:12:07.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:12:07.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.591426
2026-02-14T16:12:07.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:12:07.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:12:07.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:12:07.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:12:07.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:12:07.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:11:40', tmtdew=17.85, humidity=30.14, cloud=0.0, wind=32.85, temperature=18.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:11:39.206', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:12:07.762 [DEBUG] [Thread-188306] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:12:07.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T16:12:07.859 [DEBUG] [Thread-188309] [transport.py] [_log()] starting thread (client mode): 0xa81d7f70
2026-02-14T16:12:07.859 [DEBUG] [Thread-188309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:12:07.875 [DEBUG] [Thread-188309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:12:07.875 [INFO] [Thread-188309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:12:07.882 [DEBUG] [Thread-188309] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:12:07.883 [DEBUG] [Thread-188309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:12:07.883 [DEBUG] [Thread-188309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:12:07.883 [DEBUG] [Thread-188309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:12:07.883 [DEBUG] [Thread-188309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:12:07.883 [DEBUG] [Thread-188309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:12:07.883 [DEBUG] [Thread-188309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:12:07.884 [DEBUG] [Thread-188309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:12:07.884 [DEBUG] [Thread-188309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:12:07.884 [DEBUG] [Thread-188309] [transport.py] [_log()] client lang: <none>
2026-02-14T16:12:07.884 [DEBUG] [Thread-188309] [transport.py] [_log()] server lang: <none>
2026-02-14T16:12:07.884 [DEBUG] [Thread-188309] [transport.py] [_log()] kex follows: False
2026-02-14T16:12:07.884 [DEBUG] [Thread-188309] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:12:07.884 [DEBUG] [Thread-188309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:12:07.884 [DEBUG] [Thread-188309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:12:07.885 [DEBUG] [Thread-188309] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:12:07.885 [DEBUG] [Thread-188309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:12:07.885 [DEBUG] [Thread-188309] [transport.py] [_log()] Compression: none
2026-02-14T16:12:07.885 [DEBUG] [Thread-188309] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:12:07.941 [DEBUG] [Thread-188309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:12:07.942 [DEBUG] [Thread-188309] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:12:07.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:12:07.944 [DEBUG] [Thread-188309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:12:07.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:12:08.000 [DEBUG] [Thread-188309] [transport.py] [_log()] userauth is OK
2026-02-14T16:12:08.001 [DEBUG] [Thread-188309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:12:08.001 [DEBUG] [Thread-188309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:12:08.001 [DEBUG] [Thread-188309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:12:08.001 [DEBUG] [Thread-188309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:12:08.024 [INFO] [Thread-188309] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:12:08.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-14T16:12:08.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:12:08.865 [DEBUG] [Thread-188309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:12:08.865 [DEBUG] [Thread-188309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:12:08.913 [DEBUG] [Thread-188309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:12:08.913 [DEBUG] [Thread-188309] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:12:08.922 [DEBUG] [Thread-188309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:12:08.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:12:08.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:12:08.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:12:08.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:12:08.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:12:08.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:12:08.956 [DEBUG] [Thread-188309] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:12:19.843 [DEBUG] [Thread-188311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:12:30.620 [DEBUG] [Thread-188312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:12:34.895 [DEBUG] [Thread-188313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:12:38.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:12:38.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:12:38.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-14T16:12:40.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 12, 16), 16.77, 32.09, 0.0, 35.75, 17.45, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:12:40.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:12:16
2026-02-14T16:12:41.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:12:41.453 [DEBUG] [Thread-188314] [transport.py] [_log()] starting thread (client mode): 0xa57b2860
2026-02-14T16:12:41.453 [DEBUG] [Thread-188314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:12:41.473 [DEBUG] [Thread-188314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:12:41.473 [INFO] [Thread-188314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:12:41.476 [DEBUG] [Thread-188314] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:12:41.477 [DEBUG] [Thread-188314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:12:41.477 [DEBUG] [Thread-188314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:12:41.477 [DEBUG] [Thread-188314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:12:41.477 [DEBUG] [Thread-188314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:12:41.477 [DEBUG] [Thread-188314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:12:41.477 [DEBUG] [Thread-188314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:12:41.477 [DEBUG] [Thread-188314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:12:41.477 [DEBUG] [Thread-188314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:12:41.477 [DEBUG] [Thread-188314] [transport.py] [_log()] client lang: <none>
2026-02-14T16:12:41.477 [DEBUG] [Thread-188314] [transport.py] [_log()] server lang: <none>
2026-02-14T16:12:41.477 [DEBUG] [Thread-188314] [transport.py] [_log()] kex follows: False
2026-02-14T16:12:41.477 [DEBUG] [Thread-188314] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:12:41.478 [DEBUG] [Thread-188314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:12:41.478 [DEBUG] [Thread-188314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:12:41.478 [DEBUG] [Thread-188314] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:12:41.478 [DEBUG] [Thread-188314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:12:41.478 [DEBUG] [Thread-188314] [transport.py] [_log()] Compression: none
2026-02-14T16:12:41.478 [DEBUG] [Thread-188314] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:12:41.496 [DEBUG] [Thread-188314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:12:41.497 [DEBUG] [Thread-188314] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:12:41.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:12:41.499 [DEBUG] [Thread-188314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:12:41.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:12:41.502 [DEBUG] [Thread-188314] [transport.py] [_log()] userauth is OK
2026-02-14T16:12:41.502 [DEBUG] [Thread-188314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:12:41.502 [DEBUG] [Thread-188314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:12:41.502 [DEBUG] [Thread-188314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:12:41.502 [DEBUG] [Thread-188314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:12:41.526 [INFO] [Thread-188314] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:12:41.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:12:42.170 [DEBUG] [Thread-188314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:12:42.170 [DEBUG] [Thread-188314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:12:42.170 [DEBUG] [Thread-188314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:12:42.211 [DEBUG] [Thread-188314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:12:42.212 [DEBUG] [Thread-188314] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:12:42.215 [DEBUG] [Thread-188314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:12:42.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:12:42.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:12:42.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:12:42.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:12:42.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:12:42.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:12:42.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:12:42.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:12:42.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:12:42.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.591773 -999.00  +16.50  23.72     40   +2.90 1 1 1 1 1   888    0 13.87 2.52 ----- 21.1 23.7 179.6 27.3 21.8 -27.6 20.8 -30.4 22.8 -27.0 23.6 -28.2
2026-02-14T16:12:42.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:12:42.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:12:42.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.591773
2026-02-14T16:12:42.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:12:42.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:12:42.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:12:42.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:12:42.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:12:42.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:12:16', tmtdew=16.77, humidity=32.09, cloud=0.0, wind=35.75, temperature=17.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:12:09.187', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:12:42.243 [DEBUG] [Thread-188314] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:12:42.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-14T16:12:42.339 [DEBUG] [Thread-188317] [transport.py] [_log()] starting thread (client mode): 0xa57b0fa0
2026-02-14T16:12:42.340 [DEBUG] [Thread-188317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:12:42.354 [DEBUG] [Thread-188317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:12:42.354 [INFO] [Thread-188317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:12:42.361 [DEBUG] [Thread-188317] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:12:42.362 [DEBUG] [Thread-188317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:12:42.362 [DEBUG] [Thread-188317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:12:42.362 [DEBUG] [Thread-188317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:12:42.362 [DEBUG] [Thread-188317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:12:42.362 [DEBUG] [Thread-188317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:12:42.362 [DEBUG] [Thread-188317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:12:42.362 [DEBUG] [Thread-188317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:12:42.363 [DEBUG] [Thread-188317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:12:42.363 [DEBUG] [Thread-188317] [transport.py] [_log()] client lang: <none>
2026-02-14T16:12:42.363 [DEBUG] [Thread-188317] [transport.py] [_log()] server lang: <none>
2026-02-14T16:12:42.363 [DEBUG] [Thread-188317] [transport.py] [_log()] kex follows: False
2026-02-14T16:12:42.363 [DEBUG] [Thread-188317] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:12:42.363 [DEBUG] [Thread-188317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:12:42.363 [DEBUG] [Thread-188317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:12:42.363 [DEBUG] [Thread-188317] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:12:42.363 [DEBUG] [Thread-188317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:12:42.364 [DEBUG] [Thread-188317] [transport.py] [_log()] Compression: none
2026-02-14T16:12:42.364 [DEBUG] [Thread-188317] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:12:42.420 [DEBUG] [Thread-188317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:12:42.421 [DEBUG] [Thread-188317] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:12:42.421 [DEBUG] [Thread-188317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:12:42.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:12:42.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:12:42.478 [DEBUG] [Thread-188317] [transport.py] [_log()] userauth is OK
2026-02-14T16:12:42.478 [DEBUG] [Thread-188317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:12:42.478 [DEBUG] [Thread-188317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:12:42.478 [DEBUG] [Thread-188317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:12:42.479 [DEBUG] [Thread-188317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:12:42.497 [INFO] [Thread-188317] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:12:42.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:12:42.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:12:43.317 [DEBUG] [Thread-188317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:12:43.317 [DEBUG] [Thread-188317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:12:43.365 [DEBUG] [Thread-188317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:12:43.365 [DEBUG] [Thread-188317] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:12:43.374 [DEBUG] [Thread-188317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:12:43.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:12:43.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:12:43.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-14T16:12:43.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:12:43.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:12:43.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:12:43.408 [DEBUG] [Thread-188317] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:12:49.929 [DEBUG] [Thread-188319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:12:53.398 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:12:53.400 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:13:04.968 [DEBUG] [Thread-188320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:13:13.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:13:13.431 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:13:13.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:13:15.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 12, 51), 16.2, 33.74, 0.0, 30.84, 17.2, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:13:15.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:12:51
2026-02-14T16:13:15.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:13:15.751 [DEBUG] [Thread-188321] [transport.py] [_log()] starting thread (client mode): 0xa5758ca0
2026-02-14T16:13:15.751 [DEBUG] [Thread-188321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:13:15.771 [DEBUG] [Thread-188321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:13:15.771 [INFO] [Thread-188321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:13:15.774 [DEBUG] [Thread-188321] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:13:15.774 [DEBUG] [Thread-188321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:13:15.774 [DEBUG] [Thread-188321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:13:15.774 [DEBUG] [Thread-188321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:13:15.774 [DEBUG] [Thread-188321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:13:15.774 [DEBUG] [Thread-188321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:13:15.774 [DEBUG] [Thread-188321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:13:15.774 [DEBUG] [Thread-188321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:13:15.774 [DEBUG] [Thread-188321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:13:15.774 [DEBUG] [Thread-188321] [transport.py] [_log()] client lang: <none>
2026-02-14T16:13:15.775 [DEBUG] [Thread-188321] [transport.py] [_log()] server lang: <none>
2026-02-14T16:13:15.775 [DEBUG] [Thread-188321] [transport.py] [_log()] kex follows: False
2026-02-14T16:13:15.775 [DEBUG] [Thread-188321] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:13:15.775 [DEBUG] [Thread-188321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:13:15.775 [DEBUG] [Thread-188321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:13:15.775 [DEBUG] [Thread-188321] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:13:15.775 [DEBUG] [Thread-188321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:13:15.775 [DEBUG] [Thread-188321] [transport.py] [_log()] Compression: none
2026-02-14T16:13:15.775 [DEBUG] [Thread-188321] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:13:15.792 [DEBUG] [Thread-188321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:13:15.793 [DEBUG] [Thread-188321] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:13:15.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:13:15.794 [DEBUG] [Thread-188321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:13:15.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:13:15.796 [DEBUG] [Thread-188321] [transport.py] [_log()] userauth is OK
2026-02-14T16:13:15.797 [DEBUG] [Thread-188321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:13:15.797 [DEBUG] [Thread-188321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:13:15.797 [DEBUG] [Thread-188321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:13:15.797 [DEBUG] [Thread-188321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:13:15.816 [INFO] [Thread-188321] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:13:15.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:13:16.464 [DEBUG] [Thread-188321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:13:16.464 [DEBUG] [Thread-188321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:13:16.464 [DEBUG] [Thread-188321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:13:16.505 [DEBUG] [Thread-188321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:13:16.505 [DEBUG] [Thread-188321] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:13:16.507 [DEBUG] [Thread-188321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:13:16.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:13:16.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:13:16.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:13:16.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:13:16.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:13:16.532 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:13:16.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:13:16.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:13:16.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:13:16.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.592120 -999.00  +16.50  27.55     40   +3.10 1 1 1 1 1   888    0 13.97 5.32 ----- 28.6 27.6 172.0 39.0 21.8 -28.2 21.1 -28.2 22.7 -25.9 23.6 -27.8
2026-02-14T16:13:16.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:13:16.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:13:16.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.592120
2026-02-14T16:13:16.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:13:16.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:13:16.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:13:16.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:13:16.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:13:16.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:12:51', tmtdew=16.2, humidity=33.74, cloud=0.0, wind=30.84, temperature=17.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:12:39.168', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:13:16.535 [DEBUG] [Thread-188321] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:13:16.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-14T16:13:16.629 [DEBUG] [Thread-188324] [transport.py] [_log()] starting thread (client mode): 0xa2deda20
2026-02-14T16:13:16.630 [DEBUG] [Thread-188324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:13:16.644 [DEBUG] [Thread-188324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:13:16.644 [INFO] [Thread-188324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:13:16.652 [DEBUG] [Thread-188324] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:13:16.652 [DEBUG] [Thread-188324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:13:16.652 [DEBUG] [Thread-188324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:13:16.652 [DEBUG] [Thread-188324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:13:16.652 [DEBUG] [Thread-188324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:13:16.652 [DEBUG] [Thread-188324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:13:16.653 [DEBUG] [Thread-188324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:13:16.653 [DEBUG] [Thread-188324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:13:16.653 [DEBUG] [Thread-188324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:13:16.653 [DEBUG] [Thread-188324] [transport.py] [_log()] client lang: <none>
2026-02-14T16:13:16.653 [DEBUG] [Thread-188324] [transport.py] [_log()] server lang: <none>
2026-02-14T16:13:16.653 [DEBUG] [Thread-188324] [transport.py] [_log()] kex follows: False
2026-02-14T16:13:16.653 [DEBUG] [Thread-188324] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:13:16.653 [DEBUG] [Thread-188324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:13:16.653 [DEBUG] [Thread-188324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:13:16.653 [DEBUG] [Thread-188324] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:13:16.653 [DEBUG] [Thread-188324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:13:16.653 [DEBUG] [Thread-188324] [transport.py] [_log()] Compression: none
2026-02-14T16:13:16.653 [DEBUG] [Thread-188324] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:13:16.712 [DEBUG] [Thread-188324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:13:16.712 [DEBUG] [Thread-188324] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:13:16.713 [DEBUG] [Thread-188324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:13:16.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:13:16.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:13:16.768 [DEBUG] [Thread-188324] [transport.py] [_log()] userauth is OK
2026-02-14T16:13:16.768 [DEBUG] [Thread-188324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:13:16.768 [DEBUG] [Thread-188324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:13:16.768 [DEBUG] [Thread-188324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:13:16.768 [DEBUG] [Thread-188324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:13:16.788 [INFO] [Thread-188324] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:13:16.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-14T16:13:16.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:13:17.609 [DEBUG] [Thread-188324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:13:17.609 [DEBUG] [Thread-188324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:13:17.657 [DEBUG] [Thread-188324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:13:17.658 [DEBUG] [Thread-188324] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:13:17.667 [DEBUG] [Thread-188324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:13:17.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:13:17.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:13:17.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:13:17.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:13:17.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:13:17.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:13:17.703 [DEBUG] [Thread-188324] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:13:20.003 [DEBUG] [Thread-188326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:13:30.653 [DEBUG] [Thread-188327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:13:35.057 [DEBUG] [Thread-188328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:13:47.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:13:47.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:13:47.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:13:49.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 13, 27), 16.12, 33.92, 0.0, 29.92, 17.28, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:13:49.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:13:27
2026-02-14T16:13:50.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:13:50.093 [DEBUG] [Thread-188329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:13:50.208 [DEBUG] [Thread-188330] [transport.py] [_log()] starting thread (client mode): 0xa2d21720
2026-02-14T16:13:50.208 [DEBUG] [Thread-188330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:13:50.227 [DEBUG] [Thread-188330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:13:50.227 [INFO] [Thread-188330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:13:50.231 [DEBUG] [Thread-188330] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:13:50.231 [DEBUG] [Thread-188330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:13:50.231 [DEBUG] [Thread-188330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:13:50.232 [DEBUG] [Thread-188330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:13:50.232 [DEBUG] [Thread-188330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:13:50.232 [DEBUG] [Thread-188330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:13:50.232 [DEBUG] [Thread-188330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:13:50.232 [DEBUG] [Thread-188330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:13:50.232 [DEBUG] [Thread-188330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:13:50.232 [DEBUG] [Thread-188330] [transport.py] [_log()] client lang: <none>
2026-02-14T16:13:50.232 [DEBUG] [Thread-188330] [transport.py] [_log()] server lang: <none>
2026-02-14T16:13:50.232 [DEBUG] [Thread-188330] [transport.py] [_log()] kex follows: False
2026-02-14T16:13:50.232 [DEBUG] [Thread-188330] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:13:50.232 [DEBUG] [Thread-188330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:13:50.232 [DEBUG] [Thread-188330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:13:50.232 [DEBUG] [Thread-188330] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:13:50.232 [DEBUG] [Thread-188330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:13:50.232 [DEBUG] [Thread-188330] [transport.py] [_log()] Compression: none
2026-02-14T16:13:50.232 [DEBUG] [Thread-188330] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:13:50.251 [DEBUG] [Thread-188330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:13:50.252 [DEBUG] [Thread-188330] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:13:50.253 [DEBUG] [Thread-188330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:13:50.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:13:50.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:13:50.255 [DEBUG] [Thread-188330] [transport.py] [_log()] userauth is OK
2026-02-14T16:13:50.256 [DEBUG] [Thread-188330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:13:50.256 [DEBUG] [Thread-188330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:13:50.256 [DEBUG] [Thread-188330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:13:50.256 [DEBUG] [Thread-188330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:13:50.282 [INFO] [Thread-188330] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:13:50.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:13:50.921 [DEBUG] [Thread-188330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:13:50.921 [DEBUG] [Thread-188330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:13:50.922 [DEBUG] [Thread-188330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:13:50.962 [DEBUG] [Thread-188330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:13:50.962 [DEBUG] [Thread-188330] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:13:50.965 [DEBUG] [Thread-188330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:13:50.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:13:50.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:13:50.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:13:50.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:13:50.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:13:50.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:13:50.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:13:50.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:13:50.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:13:50.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.592468 -999.00  +16.60  21.38     40   +3.10 1 1 1 1 1   888    0 13.76 6.56 ----- 22.5 21.4 151.0 32.1 21.7 -27.7 21.1 -28.3 22.7 -25.8 23.6 -28.5
2026-02-14T16:13:50.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:13:50.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:13:50.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.592468
2026-02-14T16:13:50.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:13:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:13:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:13:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:13:50.990 [DEBUG] [Thread-188330] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:13:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:13:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:13:27', tmtdew=16.12, humidity=33.92, cloud=0.0, wind=29.92, temperature=17.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:13:09.235', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:13:51.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-14T16:13:51.086 [DEBUG] [Thread-188333] [transport.py] [_log()] starting thread (client mode): 0xa57b2770
2026-02-14T16:13:51.086 [DEBUG] [Thread-188333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:13:51.100 [DEBUG] [Thread-188333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:13:51.101 [INFO] [Thread-188333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:13:51.108 [DEBUG] [Thread-188333] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:13:51.108 [DEBUG] [Thread-188333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:13:51.108 [DEBUG] [Thread-188333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:13:51.108 [DEBUG] [Thread-188333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:13:51.109 [DEBUG] [Thread-188333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:13:51.109 [DEBUG] [Thread-188333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:13:51.109 [DEBUG] [Thread-188333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:13:51.109 [DEBUG] [Thread-188333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:13:51.109 [DEBUG] [Thread-188333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:13:51.109 [DEBUG] [Thread-188333] [transport.py] [_log()] client lang: <none>
2026-02-14T16:13:51.109 [DEBUG] [Thread-188333] [transport.py] [_log()] server lang: <none>
2026-02-14T16:13:51.109 [DEBUG] [Thread-188333] [transport.py] [_log()] kex follows: False
2026-02-14T16:13:51.109 [DEBUG] [Thread-188333] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:13:51.109 [DEBUG] [Thread-188333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:13:51.109 [DEBUG] [Thread-188333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:13:51.109 [DEBUG] [Thread-188333] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:13:51.109 [DEBUG] [Thread-188333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:13:51.109 [DEBUG] [Thread-188333] [transport.py] [_log()] Compression: none
2026-02-14T16:13:51.109 [DEBUG] [Thread-188333] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:13:51.167 [DEBUG] [Thread-188333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:13:51.168 [DEBUG] [Thread-188333] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:13:51.168 [DEBUG] [Thread-188333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:13:51.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:13:51.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:13:51.223 [DEBUG] [Thread-188333] [transport.py] [_log()] userauth is OK
2026-02-14T16:13:51.223 [DEBUG] [Thread-188333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:13:51.223 [DEBUG] [Thread-188333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:13:51.224 [DEBUG] [Thread-188333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:13:51.224 [DEBUG] [Thread-188333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:13:51.242 [INFO] [Thread-188333] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:13:51.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-14T16:13:51.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:13:52.069 [DEBUG] [Thread-188333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:13:52.070 [DEBUG] [Thread-188333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:13:52.117 [DEBUG] [Thread-188333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:13:52.118 [DEBUG] [Thread-188333] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:13:52.127 [DEBUG] [Thread-188333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:13:52.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:13:52.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-14T16:13:52.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-14T16:13:52.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:13:52.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:13:52.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:13:52.163 [DEBUG] [Thread-188333] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:13:53.539 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:13:53.540 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:14:05.125 [DEBUG] [Thread-188335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:14:20.178 [DEBUG] [Thread-188336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:14:22.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:14:22.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:14:22.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:14:24.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 14, 2), 16.23, 33.7, 0.0, 27.63, 17.33, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:14:24.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:14:02
2026-02-14T16:14:24.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:14:24.542 [DEBUG] [Thread-188337] [transport.py] [_log()] starting thread (client mode): 0xa57b0400
2026-02-14T16:14:24.542 [DEBUG] [Thread-188337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:14:24.553 [DEBUG] [Thread-188337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:14:24.553 [INFO] [Thread-188337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:14:24.555 [DEBUG] [Thread-188337] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:14:24.555 [DEBUG] [Thread-188337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:14:24.555 [DEBUG] [Thread-188337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:14:24.555 [DEBUG] [Thread-188337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:14:24.555 [DEBUG] [Thread-188337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:14:24.555 [DEBUG] [Thread-188337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:14:24.555 [DEBUG] [Thread-188337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:14:24.555 [DEBUG] [Thread-188337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:14:24.555 [DEBUG] [Thread-188337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:14:24.555 [DEBUG] [Thread-188337] [transport.py] [_log()] client lang: <none>
2026-02-14T16:14:24.555 [DEBUG] [Thread-188337] [transport.py] [_log()] server lang: <none>
2026-02-14T16:14:24.555 [DEBUG] [Thread-188337] [transport.py] [_log()] kex follows: False
2026-02-14T16:14:24.555 [DEBUG] [Thread-188337] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:14:24.555 [DEBUG] [Thread-188337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:14:24.555 [DEBUG] [Thread-188337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:14:24.555 [DEBUG] [Thread-188337] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:14:24.555 [DEBUG] [Thread-188337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:14:24.555 [DEBUG] [Thread-188337] [transport.py] [_log()] Compression: none
2026-02-14T16:14:24.555 [DEBUG] [Thread-188337] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:14:24.566 [DEBUG] [Thread-188337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:14:24.566 [DEBUG] [Thread-188337] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:14:24.566 [DEBUG] [Thread-188337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:14:24.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:14:24.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:14:24.567 [DEBUG] [Thread-188337] [transport.py] [_log()] userauth is OK
2026-02-14T16:14:24.567 [DEBUG] [Thread-188337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:14:24.567 [DEBUG] [Thread-188337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:14:24.567 [DEBUG] [Thread-188337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:14:24.568 [DEBUG] [Thread-188337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:14:24.585 [INFO] [Thread-188337] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:14:24.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:14:25.234 [DEBUG] [Thread-188337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:14:25.234 [DEBUG] [Thread-188337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:14:25.235 [DEBUG] [Thread-188337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:14:25.275 [DEBUG] [Thread-188337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:14:25.276 [DEBUG] [Thread-188337] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:14:25.279 [DEBUG] [Thread-188337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:14:25.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:14:25.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:14:25.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:14:25.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:14:25.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:14:25.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:14:25.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:14:25.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:14:25.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:14:25.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.593162 -999.00  +16.70  16.17     40   +3.30 1 1 1 1 1   888    0 13.72 5.55 ----- 15.4 16.2 160.0 26.3 21.8 -27.9 20.9 -28.2 22.8 -25.1 23.7 -27.3
2026-02-14T16:14:25.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:14:25.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:14:25.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.593162
2026-02-14T16:14:25.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:14:25.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:14:25.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:14:25.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:14:25.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:14:25.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:14:02', tmtdew=16.23, humidity=33.7, cloud=0.0, wind=27.63, temperature=17.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:14:09.197', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:14:25.308 [DEBUG] [Thread-188337] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:14:25.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-14T16:14:25.404 [DEBUG] [Thread-188340] [transport.py] [_log()] starting thread (client mode): 0xa575ab30
2026-02-14T16:14:25.404 [DEBUG] [Thread-188340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:14:25.419 [DEBUG] [Thread-188340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:14:25.419 [INFO] [Thread-188340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:14:25.427 [DEBUG] [Thread-188340] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:14:25.427 [DEBUG] [Thread-188340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:14:25.427 [DEBUG] [Thread-188340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:14:25.427 [DEBUG] [Thread-188340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:14:25.427 [DEBUG] [Thread-188340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:14:25.427 [DEBUG] [Thread-188340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:14:25.427 [DEBUG] [Thread-188340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:14:25.427 [DEBUG] [Thread-188340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:14:25.427 [DEBUG] [Thread-188340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:14:25.427 [DEBUG] [Thread-188340] [transport.py] [_log()] client lang: <none>
2026-02-14T16:14:25.427 [DEBUG] [Thread-188340] [transport.py] [_log()] server lang: <none>
2026-02-14T16:14:25.427 [DEBUG] [Thread-188340] [transport.py] [_log()] kex follows: False
2026-02-14T16:14:25.427 [DEBUG] [Thread-188340] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:14:25.427 [DEBUG] [Thread-188340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:14:25.427 [DEBUG] [Thread-188340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:14:25.428 [DEBUG] [Thread-188340] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:14:25.428 [DEBUG] [Thread-188340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:14:25.428 [DEBUG] [Thread-188340] [transport.py] [_log()] Compression: none
2026-02-14T16:14:25.428 [DEBUG] [Thread-188340] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:14:25.488 [DEBUG] [Thread-188340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:14:25.488 [DEBUG] [Thread-188340] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:14:25.489 [DEBUG] [Thread-188340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:14:25.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:14:25.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:14:25.547 [DEBUG] [Thread-188340] [transport.py] [_log()] userauth is OK
2026-02-14T16:14:25.547 [DEBUG] [Thread-188340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:14:25.548 [DEBUG] [Thread-188340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:14:25.548 [DEBUG] [Thread-188340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:14:25.548 [DEBUG] [Thread-188340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:14:25.567 [INFO] [Thread-188340] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:14:25.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:14:25.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:14:26.376 [DEBUG] [Thread-188340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:14:26.377 [DEBUG] [Thread-188340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:14:26.424 [DEBUG] [Thread-188340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:14:26.424 [DEBUG] [Thread-188340] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:14:26.433 [DEBUG] [Thread-188340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:14:26.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:14:26.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:14:26.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:14:26.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:14:26.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:14:26.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:14:26.467 [DEBUG] [Thread-188340] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:14:30.699 [DEBUG] [Thread-188342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:14:35.217 [DEBUG] [Thread-188343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:14:50.268 [DEBUG] [Thread-188344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:14:53.684 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:14:53.685 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:14:56.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:14:56.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:14:56.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:14:58.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 14, 37), 17.73, 30.37, 0.0, 41.95, 18.67, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:14:58.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:14:37
2026-02-14T16:14:58.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:14:58.940 [DEBUG] [Thread-188345] [transport.py] [_log()] starting thread (client mode): 0xa5759ea0
2026-02-14T16:14:58.940 [DEBUG] [Thread-188345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:14:58.960 [DEBUG] [Thread-188345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:14:58.960 [INFO] [Thread-188345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:14:58.963 [DEBUG] [Thread-188345] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:14:58.963 [DEBUG] [Thread-188345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:14:58.964 [DEBUG] [Thread-188345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:14:58.964 [DEBUG] [Thread-188345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:14:58.964 [DEBUG] [Thread-188345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:14:58.964 [DEBUG] [Thread-188345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:14:58.964 [DEBUG] [Thread-188345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:14:58.964 [DEBUG] [Thread-188345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:14:58.964 [DEBUG] [Thread-188345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:14:58.964 [DEBUG] [Thread-188345] [transport.py] [_log()] client lang: <none>
2026-02-14T16:14:58.964 [DEBUG] [Thread-188345] [transport.py] [_log()] server lang: <none>
2026-02-14T16:14:58.964 [DEBUG] [Thread-188345] [transport.py] [_log()] kex follows: False
2026-02-14T16:14:58.964 [DEBUG] [Thread-188345] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:14:58.964 [DEBUG] [Thread-188345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:14:58.964 [DEBUG] [Thread-188345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:14:58.964 [DEBUG] [Thread-188345] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:14:58.964 [DEBUG] [Thread-188345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:14:58.964 [DEBUG] [Thread-188345] [transport.py] [_log()] Compression: none
2026-02-14T16:14:58.964 [DEBUG] [Thread-188345] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:14:58.984 [DEBUG] [Thread-188345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:14:58.985 [DEBUG] [Thread-188345] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:14:58.985 [DEBUG] [Thread-188345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:14:58.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:14:58.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:14:58.987 [DEBUG] [Thread-188345] [transport.py] [_log()] userauth is OK
2026-02-14T16:14:58.987 [DEBUG] [Thread-188345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:14:58.988 [DEBUG] [Thread-188345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:14:58.988 [DEBUG] [Thread-188345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:14:58.988 [DEBUG] [Thread-188345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:14:59.014 [INFO] [Thread-188345] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:14:59.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:14:59.649 [DEBUG] [Thread-188345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:14:59.650 [DEBUG] [Thread-188345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:14:59.650 [DEBUG] [Thread-188345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:14:59.690 [DEBUG] [Thread-188345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:14:59.691 [DEBUG] [Thread-188345] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:14:59.694 [DEBUG] [Thread-188345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:14:59.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:14:59.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:14:59.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:14:59.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:14:59.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:14:59.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:14:59.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:14:59.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:14:59.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:14:59.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.593509 -999.00  +16.80  23.00     40   +3.30 1 1 1 1 1   888    0 13.68 4.27 ----- 20.9 23.0 169.0 27.8 21.8 -28.1 21.2 -27.5 22.8 -25.9 23.7 -27.8
2026-02-14T16:14:59.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:14:59.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:14:59.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.593509
2026-02-14T16:14:59.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:14:59.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:14:59.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:14:59.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:14:59.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:14:59.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:14:37', tmtdew=17.73, humidity=30.37, cloud=0.0, wind=41.95, temperature=18.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:14:39.178', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:14:59.720 [DEBUG] [Thread-188345] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:14:59.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-14T16:14:59.815 [DEBUG] [Thread-188348] [transport.py] [_log()] starting thread (client mode): 0xa5759720
2026-02-14T16:14:59.816 [DEBUG] [Thread-188348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:14:59.830 [DEBUG] [Thread-188348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:14:59.830 [INFO] [Thread-188348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:14:59.838 [DEBUG] [Thread-188348] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:14:59.838 [DEBUG] [Thread-188348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:14:59.838 [DEBUG] [Thread-188348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:14:59.839 [DEBUG] [Thread-188348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:14:59.839 [DEBUG] [Thread-188348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:14:59.839 [DEBUG] [Thread-188348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:14:59.839 [DEBUG] [Thread-188348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:14:59.839 [DEBUG] [Thread-188348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:14:59.840 [DEBUG] [Thread-188348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:14:59.840 [DEBUG] [Thread-188348] [transport.py] [_log()] client lang: <none>
2026-02-14T16:14:59.840 [DEBUG] [Thread-188348] [transport.py] [_log()] server lang: <none>
2026-02-14T16:14:59.840 [DEBUG] [Thread-188348] [transport.py] [_log()] kex follows: False
2026-02-14T16:14:59.840 [DEBUG] [Thread-188348] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:14:59.840 [DEBUG] [Thread-188348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:14:59.840 [DEBUG] [Thread-188348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:14:59.840 [DEBUG] [Thread-188348] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:14:59.840 [DEBUG] [Thread-188348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:14:59.841 [DEBUG] [Thread-188348] [transport.py] [_log()] Compression: none
2026-02-14T16:14:59.841 [DEBUG] [Thread-188348] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:14:59.898 [DEBUG] [Thread-188348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:14:59.899 [DEBUG] [Thread-188348] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:14:59.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:14:59.900 [DEBUG] [Thread-188348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:14:59.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:14:59.955 [DEBUG] [Thread-188348] [transport.py] [_log()] userauth is OK
2026-02-14T16:14:59.955 [DEBUG] [Thread-188348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:14:59.955 [DEBUG] [Thread-188348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:14:59.955 [DEBUG] [Thread-188348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:14:59.955 [DEBUG] [Thread-188348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:14:59.980 [INFO] [Thread-188348] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:14:59.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-14T16:14:59.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:15:00.795 [DEBUG] [Thread-188348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:15:00.795 [DEBUG] [Thread-188348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:15:00.843 [DEBUG] [Thread-188348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:15:00.844 [DEBUG] [Thread-188348] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:15:00.853 [DEBUG] [Thread-188348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:15:00.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:15:00.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-14T16:15:00.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-14T16:15:00.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:15:00.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:15:00.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:15:00.890 [DEBUG] [Thread-188348] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:15:05.305 [DEBUG] [Thread-188350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:15:20.366 [DEBUG] [Thread-188351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:15:30.768 [DEBUG] [Thread-188352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:15:30.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:15:30.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:15:30.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:15:33.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 15, 12), 15.61, 35.03, 0.0, 30.35, 16.87, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:15:33.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:15:12
2026-02-14T16:15:33.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:15:33.809 [DEBUG] [Thread-188353] [transport.py] [_log()] starting thread (client mode): 0xa2d20c10
2026-02-14T16:15:33.809 [DEBUG] [Thread-188353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:15:33.831 [DEBUG] [Thread-188353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:15:33.831 [INFO] [Thread-188353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:15:33.834 [DEBUG] [Thread-188353] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:15:33.834 [DEBUG] [Thread-188353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:15:33.834 [DEBUG] [Thread-188353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:15:33.834 [DEBUG] [Thread-188353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:15:33.834 [DEBUG] [Thread-188353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:15:33.834 [DEBUG] [Thread-188353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:15:33.834 [DEBUG] [Thread-188353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:15:33.834 [DEBUG] [Thread-188353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:15:33.834 [DEBUG] [Thread-188353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:15:33.834 [DEBUG] [Thread-188353] [transport.py] [_log()] client lang: <none>
2026-02-14T16:15:33.834 [DEBUG] [Thread-188353] [transport.py] [_log()] server lang: <none>
2026-02-14T16:15:33.834 [DEBUG] [Thread-188353] [transport.py] [_log()] kex follows: False
2026-02-14T16:15:33.834 [DEBUG] [Thread-188353] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:15:33.835 [DEBUG] [Thread-188353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:15:33.835 [DEBUG] [Thread-188353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:15:33.835 [DEBUG] [Thread-188353] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:15:33.835 [DEBUG] [Thread-188353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:15:33.835 [DEBUG] [Thread-188353] [transport.py] [_log()] Compression: none
2026-02-14T16:15:33.835 [DEBUG] [Thread-188353] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:15:33.853 [DEBUG] [Thread-188353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:15:33.853 [DEBUG] [Thread-188353] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:15:33.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:15:33.854 [DEBUG] [Thread-188353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:15:33.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:15:33.856 [DEBUG] [Thread-188353] [transport.py] [_log()] userauth is OK
2026-02-14T16:15:33.856 [DEBUG] [Thread-188353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:15:33.857 [DEBUG] [Thread-188353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:15:33.857 [DEBUG] [Thread-188353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:15:33.857 [DEBUG] [Thread-188353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:15:33.892 [INFO] [Thread-188353] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:15:33.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:15:34.511 [DEBUG] [Thread-188353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:15:34.512 [DEBUG] [Thread-188353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:15:34.512 [DEBUG] [Thread-188353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:15:34.552 [DEBUG] [Thread-188353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:15:34.553 [DEBUG] [Thread-188353] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:15:34.556 [DEBUG] [Thread-188353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:15:34.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:15:34.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:15:34.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:15:34.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:15:34.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:15:34.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:15:34.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:15:34.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:15:34.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:15:34.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.593856 -999.00  +17.00  21.12     40   +3.40 1 1 1 1 1   888    0 13.73 2.94 ----- 24.5 21.1 139.0 27.6 21.9 -27.6 21.3 -26.3 22.9 -24.8 23.8 -26.7
2026-02-14T16:15:34.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:15:34.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:15:34.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.593856
2026-02-14T16:15:34.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:15:34.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:15:34.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:15:34.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:15:34.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:15:34.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:15:12', tmtdew=15.61, humidity=35.03, cloud=0.0, wind=30.35, temperature=16.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:15:09.158', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:15:34.584 [DEBUG] [Thread-188353] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:15:34.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T16:15:34.680 [DEBUG] [Thread-188356] [transport.py] [_log()] starting thread (client mode): 0xa2d23490
2026-02-14T16:15:34.680 [DEBUG] [Thread-188356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:15:34.695 [DEBUG] [Thread-188356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:15:34.695 [INFO] [Thread-188356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:15:34.703 [DEBUG] [Thread-188356] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:15:34.703 [DEBUG] [Thread-188356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:15:34.703 [DEBUG] [Thread-188356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:15:34.703 [DEBUG] [Thread-188356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:15:34.703 [DEBUG] [Thread-188356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:15:34.704 [DEBUG] [Thread-188356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:15:34.704 [DEBUG] [Thread-188356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:15:34.704 [DEBUG] [Thread-188356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:15:34.704 [DEBUG] [Thread-188356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:15:34.704 [DEBUG] [Thread-188356] [transport.py] [_log()] client lang: <none>
2026-02-14T16:15:34.704 [DEBUG] [Thread-188356] [transport.py] [_log()] server lang: <none>
2026-02-14T16:15:34.704 [DEBUG] [Thread-188356] [transport.py] [_log()] kex follows: False
2026-02-14T16:15:34.704 [DEBUG] [Thread-188356] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:15:34.704 [DEBUG] [Thread-188356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:15:34.704 [DEBUG] [Thread-188356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:15:34.704 [DEBUG] [Thread-188356] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:15:34.704 [DEBUG] [Thread-188356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:15:34.704 [DEBUG] [Thread-188356] [transport.py] [_log()] Compression: none
2026-02-14T16:15:34.704 [DEBUG] [Thread-188356] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:15:34.762 [DEBUG] [Thread-188356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:15:34.763 [DEBUG] [Thread-188356] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:15:34.763 [DEBUG] [Thread-188356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:15:34.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:15:34.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:15:34.825 [DEBUG] [Thread-188356] [transport.py] [_log()] userauth is OK
2026-02-14T16:15:34.825 [DEBUG] [Thread-188356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:15:34.825 [DEBUG] [Thread-188356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:15:34.825 [DEBUG] [Thread-188356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:15:34.825 [DEBUG] [Thread-188356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:15:34.847 [INFO] [Thread-188356] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:15:34.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-14T16:15:34.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:15:35.402 [DEBUG] [Thread-188358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:15:35.687 [DEBUG] [Thread-188356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:15:35.687 [DEBUG] [Thread-188356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:15:35.735 [DEBUG] [Thread-188356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:15:35.736 [DEBUG] [Thread-188356] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:15:35.745 [DEBUG] [Thread-188356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:15:35.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:15:35.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:15:35.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-14T16:15:35.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:15:35.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:15:35.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:15:35.782 [DEBUG] [Thread-188356] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:15:50.464 [DEBUG] [Thread-188359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:15:53.825 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:15:53.826 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:16:05.501 [DEBUG] [Thread-188360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:16:05.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:16:05.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:16:05.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-14T16:16:08.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 15, 48), 15.85, 34.35, 0.0, 26.77, 17.14, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:16:08.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:15:48
2026-02-14T16:16:08.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:16:08.692 [DEBUG] [Thread-188361] [transport.py] [_log()] starting thread (client mode): 0xa57598a0
2026-02-14T16:16:08.692 [DEBUG] [Thread-188361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:16:08.712 [DEBUG] [Thread-188361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:16:08.712 [INFO] [Thread-188361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:16:08.715 [DEBUG] [Thread-188361] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:16:08.715 [DEBUG] [Thread-188361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:16:08.715 [DEBUG] [Thread-188361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:16:08.715 [DEBUG] [Thread-188361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:16:08.715 [DEBUG] [Thread-188361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:16:08.715 [DEBUG] [Thread-188361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:16:08.715 [DEBUG] [Thread-188361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:16:08.715 [DEBUG] [Thread-188361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:16:08.716 [DEBUG] [Thread-188361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:16:08.716 [DEBUG] [Thread-188361] [transport.py] [_log()] client lang: <none>
2026-02-14T16:16:08.716 [DEBUG] [Thread-188361] [transport.py] [_log()] server lang: <none>
2026-02-14T16:16:08.716 [DEBUG] [Thread-188361] [transport.py] [_log()] kex follows: False
2026-02-14T16:16:08.716 [DEBUG] [Thread-188361] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:16:08.716 [DEBUG] [Thread-188361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:16:08.716 [DEBUG] [Thread-188361] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:16:08.716 [DEBUG] [Thread-188361] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:16:08.716 [DEBUG] [Thread-188361] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:16:08.716 [DEBUG] [Thread-188361] [transport.py] [_log()] Compression: none
2026-02-14T16:16:08.716 [DEBUG] [Thread-188361] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:16:08.734 [DEBUG] [Thread-188361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:16:08.735 [DEBUG] [Thread-188361] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:16:08.735 [DEBUG] [Thread-188361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:16:08.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:16:08.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:16:08.737 [DEBUG] [Thread-188361] [transport.py] [_log()] userauth is OK
2026-02-14T16:16:08.737 [DEBUG] [Thread-188361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:16:08.738 [DEBUG] [Thread-188361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:16:08.738 [DEBUG] [Thread-188361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:16:08.738 [DEBUG] [Thread-188361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:16:08.762 [INFO] [Thread-188361] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:16:08.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:16:09.561 [DEBUG] [Thread-188361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:16:09.561 [DEBUG] [Thread-188361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:16:09.561 [DEBUG] [Thread-188361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:16:09.601 [DEBUG] [Thread-188361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:16:09.601 [DEBUG] [Thread-188361] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:16:09.605 [DEBUG] [Thread-188361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:16:09.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:16:09.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:16:09.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:16:09.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:16:09.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:16:09.629 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:16:09.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:16:09.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:16:09.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:16:09.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.594204 -999.00  +17.00  25.25     40   +3.30 1 1 1 1 1   888    0 13.63 2.18 ----- 24.4 25.2 137.2 34.6 21.8 -28.8 21.4 -27.3 22.9 -25.7 23.8 -27.3
2026-02-14T16:16:09.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:16:09.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:16:09.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.594204
2026-02-14T16:16:09.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:16:09.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:16:09.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:16:09.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:16:09.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:16:09.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:15:48', tmtdew=15.85, humidity=34.35, cloud=0.0, wind=26.77, temperature=17.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:15:39.226', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:16:09.632 [DEBUG] [Thread-188361] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:16:09.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-14T16:16:09.728 [DEBUG] [Thread-188364] [transport.py] [_log()] starting thread (client mode): 0xa5758a00
2026-02-14T16:16:09.728 [DEBUG] [Thread-188364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:16:09.742 [DEBUG] [Thread-188364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:16:09.742 [INFO] [Thread-188364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:16:09.750 [DEBUG] [Thread-188364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:16:09.750 [DEBUG] [Thread-188364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:16:09.750 [DEBUG] [Thread-188364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:16:09.750 [DEBUG] [Thread-188364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:16:09.750 [DEBUG] [Thread-188364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:16:09.750 [DEBUG] [Thread-188364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:16:09.750 [DEBUG] [Thread-188364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:16:09.750 [DEBUG] [Thread-188364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:16:09.750 [DEBUG] [Thread-188364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:16:09.750 [DEBUG] [Thread-188364] [transport.py] [_log()] client lang: <none>
2026-02-14T16:16:09.750 [DEBUG] [Thread-188364] [transport.py] [_log()] server lang: <none>
2026-02-14T16:16:09.750 [DEBUG] [Thread-188364] [transport.py] [_log()] kex follows: False
2026-02-14T16:16:09.750 [DEBUG] [Thread-188364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:16:09.750 [DEBUG] [Thread-188364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:16:09.750 [DEBUG] [Thread-188364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:16:09.751 [DEBUG] [Thread-188364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:16:09.751 [DEBUG] [Thread-188364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:16:09.751 [DEBUG] [Thread-188364] [transport.py] [_log()] Compression: none
2026-02-14T16:16:09.751 [DEBUG] [Thread-188364] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:16:09.810 [DEBUG] [Thread-188364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:16:09.811 [DEBUG] [Thread-188364] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:16:09.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:16:09.812 [DEBUG] [Thread-188364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:16:09.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:16:09.866 [DEBUG] [Thread-188364] [transport.py] [_log()] userauth is OK
2026-02-14T16:16:09.867 [DEBUG] [Thread-188364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:16:09.867 [DEBUG] [Thread-188364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:16:09.867 [DEBUG] [Thread-188364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:16:09.867 [DEBUG] [Thread-188364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:16:09.887 [INFO] [Thread-188364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:16:09.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-14T16:16:09.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:16:10.676 [DEBUG] [Thread-188364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:16:10.676 [DEBUG] [Thread-188364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:16:10.725 [DEBUG] [Thread-188364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:16:10.726 [DEBUG] [Thread-188364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:16:10.735 [DEBUG] [Thread-188364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:16:10.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:16:10.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-14T16:16:10.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-14T16:16:10.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:16:10.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:16:10.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:16:10.773 [DEBUG] [Thread-188364] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:16:20.537 [DEBUG] [Thread-188366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:16:30.803 [DEBUG] [Thread-188367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:16:35.600 [DEBUG] [Thread-188368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:16:40.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:16:40.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:16:40.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:16:42.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 16, 23), 15.94, 34.18, 0.0, 29.32, 17.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:16:42.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:16:23
2026-02-14T16:16:43.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:16:43.210 [DEBUG] [Thread-188369] [transport.py] [_log()] starting thread (client mode): 0xa2d21930
2026-02-14T16:16:43.210 [DEBUG] [Thread-188369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:16:43.230 [DEBUG] [Thread-188369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:16:43.230 [INFO] [Thread-188369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:16:43.233 [DEBUG] [Thread-188369] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:16:43.233 [DEBUG] [Thread-188369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:16:43.233 [DEBUG] [Thread-188369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:16:43.233 [DEBUG] [Thread-188369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:16:43.233 [DEBUG] [Thread-188369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:16:43.233 [DEBUG] [Thread-188369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:16:43.233 [DEBUG] [Thread-188369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:16:43.233 [DEBUG] [Thread-188369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:16:43.233 [DEBUG] [Thread-188369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:16:43.233 [DEBUG] [Thread-188369] [transport.py] [_log()] client lang: <none>
2026-02-14T16:16:43.233 [DEBUG] [Thread-188369] [transport.py] [_log()] server lang: <none>
2026-02-14T16:16:43.234 [DEBUG] [Thread-188369] [transport.py] [_log()] kex follows: False
2026-02-14T16:16:43.234 [DEBUG] [Thread-188369] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:16:43.234 [DEBUG] [Thread-188369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:16:43.234 [DEBUG] [Thread-188369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:16:43.234 [DEBUG] [Thread-188369] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:16:43.234 [DEBUG] [Thread-188369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:16:43.234 [DEBUG] [Thread-188369] [transport.py] [_log()] Compression: none
2026-02-14T16:16:43.234 [DEBUG] [Thread-188369] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:16:43.248 [DEBUG] [Thread-188369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:16:43.249 [DEBUG] [Thread-188369] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:16:43.249 [DEBUG] [Thread-188369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:16:43.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:16:43.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:16:43.251 [DEBUG] [Thread-188369] [transport.py] [_log()] userauth is OK
2026-02-14T16:16:43.252 [DEBUG] [Thread-188369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:16:43.252 [DEBUG] [Thread-188369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:16:43.252 [DEBUG] [Thread-188369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:16:43.252 [DEBUG] [Thread-188369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:16:43.271 [INFO] [Thread-188369] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:16:43.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:16:43.829 [DEBUG] [Thread-188369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:16:43.830 [DEBUG] [Thread-188369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:16:43.830 [DEBUG] [Thread-188369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:16:43.871 [DEBUG] [Thread-188369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:16:43.871 [DEBUG] [Thread-188369] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:16:43.873 [DEBUG] [Thread-188369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:16:43.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:16:43.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:16:43.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:16:43.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:16:43.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:16:43.895 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:16:43.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:16:43.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:16:43.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:16:43.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.594551 -999.00  +16.80  20.17     40   +3.40 1 1 1 1 1   888    0 13.69 1.66 ----- 20.9 20.2 162.4 42.0 21.9 -27.8 21.3 -27.9 22.9 -24.4 23.9 -27.1
2026-02-14T16:16:43.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:16:43.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:16:43.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.594551
2026-02-14T16:16:43.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:16:43.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:16:43.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:16:43.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:16:43.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:16:43.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:16:23', tmtdew=15.94, humidity=34.18, cloud=0.0, wind=29.32, temperature=17.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:16:09.206', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:16:43.898 [DEBUG] [Thread-188369] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:16:43.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-14T16:16:43.992 [DEBUG] [Thread-188372] [transport.py] [_log()] starting thread (client mode): 0xa2d23550
2026-02-14T16:16:43.992 [DEBUG] [Thread-188372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:16:44.006 [DEBUG] [Thread-188372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:16:44.006 [INFO] [Thread-188372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:16:44.014 [DEBUG] [Thread-188372] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:16:44.014 [DEBUG] [Thread-188372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:16:44.014 [DEBUG] [Thread-188372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:16:44.014 [DEBUG] [Thread-188372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:16:44.014 [DEBUG] [Thread-188372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:16:44.014 [DEBUG] [Thread-188372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:16:44.014 [DEBUG] [Thread-188372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:16:44.014 [DEBUG] [Thread-188372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:16:44.014 [DEBUG] [Thread-188372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:16:44.014 [DEBUG] [Thread-188372] [transport.py] [_log()] client lang: <none>
2026-02-14T16:16:44.014 [DEBUG] [Thread-188372] [transport.py] [_log()] server lang: <none>
2026-02-14T16:16:44.014 [DEBUG] [Thread-188372] [transport.py] [_log()] kex follows: False
2026-02-14T16:16:44.014 [DEBUG] [Thread-188372] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:16:44.014 [DEBUG] [Thread-188372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:16:44.014 [DEBUG] [Thread-188372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:16:44.015 [DEBUG] [Thread-188372] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:16:44.015 [DEBUG] [Thread-188372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:16:44.015 [DEBUG] [Thread-188372] [transport.py] [_log()] Compression: none
2026-02-14T16:16:44.015 [DEBUG] [Thread-188372] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:16:44.073 [DEBUG] [Thread-188372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:16:44.074 [DEBUG] [Thread-188372] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:16:44.074 [DEBUG] [Thread-188372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:16:44.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:16:44.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:16:44.130 [DEBUG] [Thread-188372] [transport.py] [_log()] userauth is OK
2026-02-14T16:16:44.130 [DEBUG] [Thread-188372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:16:44.130 [DEBUG] [Thread-188372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:16:44.130 [DEBUG] [Thread-188372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:16:44.131 [DEBUG] [Thread-188372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:16:44.149 [INFO] [Thread-188372] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:16:44.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-14T16:16:44.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:16:44.981 [DEBUG] [Thread-188372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:16:44.981 [DEBUG] [Thread-188372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:16:45.029 [DEBUG] [Thread-188372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:16:45.030 [DEBUG] [Thread-188372] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:16:45.039 [DEBUG] [Thread-188372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:16:45.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:16:45.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-14T16:16:45.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:16:45.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:16:45.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:16:45.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:16:45.075 [DEBUG] [Thread-188372] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:16:50.639 [DEBUG] [Thread-188374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:16:53.967 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:16:53.968 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:17:05.679 [DEBUG] [Thread-188375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:17:15.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:17:15.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:17:15.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-14T16:17:17.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 16, 58), 15.9, 34.36, 0.0, 32.66, 17.05, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:17:17.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:16:58
2026-02-14T16:17:17.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:17:17.491 [DEBUG] [Thread-188376] [transport.py] [_log()] starting thread (client mode): 0xa575acb0
2026-02-14T16:17:17.492 [DEBUG] [Thread-188376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:17:17.511 [DEBUG] [Thread-188376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:17:17.512 [INFO] [Thread-188376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:17:17.515 [DEBUG] [Thread-188376] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:17:17.515 [DEBUG] [Thread-188376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:17:17.515 [DEBUG] [Thread-188376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:17:17.515 [DEBUG] [Thread-188376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:17:17.515 [DEBUG] [Thread-188376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:17:17.515 [DEBUG] [Thread-188376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:17:17.515 [DEBUG] [Thread-188376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:17:17.515 [DEBUG] [Thread-188376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:17:17.515 [DEBUG] [Thread-188376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:17:17.516 [DEBUG] [Thread-188376] [transport.py] [_log()] client lang: <none>
2026-02-14T16:17:17.516 [DEBUG] [Thread-188376] [transport.py] [_log()] server lang: <none>
2026-02-14T16:17:17.516 [DEBUG] [Thread-188376] [transport.py] [_log()] kex follows: False
2026-02-14T16:17:17.516 [DEBUG] [Thread-188376] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:17:17.516 [DEBUG] [Thread-188376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:17:17.516 [DEBUG] [Thread-188376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:17:17.516 [DEBUG] [Thread-188376] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:17:17.516 [DEBUG] [Thread-188376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:17:17.516 [DEBUG] [Thread-188376] [transport.py] [_log()] Compression: none
2026-02-14T16:17:17.516 [DEBUG] [Thread-188376] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:17:17.533 [DEBUG] [Thread-188376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:17:17.534 [DEBUG] [Thread-188376] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:17:17.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:17:17.536 [DEBUG] [Thread-188376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:17:17.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:17:17.577 [DEBUG] [Thread-188376] [transport.py] [_log()] userauth is OK
2026-02-14T16:17:17.578 [DEBUG] [Thread-188376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:17:17.578 [DEBUG] [Thread-188376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:17:17.578 [DEBUG] [Thread-188376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:17:17.578 [DEBUG] [Thread-188376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:17:17.611 [INFO] [Thread-188376] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:17:17.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:17:18.240 [DEBUG] [Thread-188376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:17:18.241 [DEBUG] [Thread-188376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:17:18.241 [DEBUG] [Thread-188376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:17:18.281 [DEBUG] [Thread-188376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:17:18.281 [DEBUG] [Thread-188376] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:17:18.284 [DEBUG] [Thread-188376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:17:18.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:17:18.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:17:18.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:17:18.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:17:18.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:17:18.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:17:18.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:17:18.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:17:18.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:17:18.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.594898 -999.00  +16.90  31.13     40   +3.50 1 1 2 1 1   888    0 13.62 1.05 ----- 21.2 31.1 176.0 43.0 21.9 -27.2 21.2 -27.7 22.8 -26.0 23.8 -27.1
2026-02-14T16:17:18.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:17:18.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:17:18.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.594898
2026-02-14T16:17:18.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:17:18.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:17:18.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:17:18.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:17:18.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:17:18.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:16:58', tmtdew=15.9, humidity=34.36, cloud=0.0, wind=32.66, temperature=17.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:16:39.187', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:17:18.309 [DEBUG] [Thread-188376] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:17:18.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-14T16:17:18.404 [DEBUG] [Thread-188379] [transport.py] [_log()] starting thread (client mode): 0xa2d22200
2026-02-14T16:17:18.404 [DEBUG] [Thread-188379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:17:18.419 [DEBUG] [Thread-188379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:17:18.419 [INFO] [Thread-188379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:17:18.426 [DEBUG] [Thread-188379] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:17:18.426 [DEBUG] [Thread-188379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:17:18.426 [DEBUG] [Thread-188379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:17:18.427 [DEBUG] [Thread-188379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:17:18.427 [DEBUG] [Thread-188379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:17:18.427 [DEBUG] [Thread-188379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:17:18.427 [DEBUG] [Thread-188379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:17:18.427 [DEBUG] [Thread-188379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:17:18.427 [DEBUG] [Thread-188379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:17:18.427 [DEBUG] [Thread-188379] [transport.py] [_log()] client lang: <none>
2026-02-14T16:17:18.427 [DEBUG] [Thread-188379] [transport.py] [_log()] server lang: <none>
2026-02-14T16:17:18.427 [DEBUG] [Thread-188379] [transport.py] [_log()] kex follows: False
2026-02-14T16:17:18.427 [DEBUG] [Thread-188379] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:17:18.427 [DEBUG] [Thread-188379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:17:18.427 [DEBUG] [Thread-188379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:17:18.427 [DEBUG] [Thread-188379] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:17:18.427 [DEBUG] [Thread-188379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:17:18.427 [DEBUG] [Thread-188379] [transport.py] [_log()] Compression: none
2026-02-14T16:17:18.427 [DEBUG] [Thread-188379] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:17:18.485 [DEBUG] [Thread-188379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:17:18.486 [DEBUG] [Thread-188379] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:17:18.487 [DEBUG] [Thread-188379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:17:18.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:17:18.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:17:18.541 [DEBUG] [Thread-188379] [transport.py] [_log()] userauth is OK
2026-02-14T16:17:18.542 [DEBUG] [Thread-188379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:17:18.542 [DEBUG] [Thread-188379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:17:18.542 [DEBUG] [Thread-188379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:17:18.542 [DEBUG] [Thread-188379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:17:18.560 [INFO] [Thread-188379] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:17:18.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-14T16:17:18.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:17:19.335 [DEBUG] [Thread-188379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:17:19.336 [DEBUG] [Thread-188379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:17:19.383 [DEBUG] [Thread-188379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:17:19.383 [DEBUG] [Thread-188379] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:17:19.391 [DEBUG] [Thread-188379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:17:19.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:17:19.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-14T16:17:19.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-14T16:17:19.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:17:19.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:17:19.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:17:19.425 [DEBUG] [Thread-188379] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:17:20.716 [DEBUG] [Thread-188381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:17:30.836 [DEBUG] [Thread-188382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:17:35.765 [DEBUG] [Thread-188383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:17:49.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:17:49.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:17:49.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:17:50.802 [DEBUG] [Thread-188384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:17:51.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 17, 34), 17.1, 31.8, 0.0, 42.55, 18.67, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:17:51.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:17:34
2026-02-14T16:17:51.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:17:51.823 [DEBUG] [Thread-188385] [transport.py] [_log()] starting thread (client mode): 0xa2d22a40
2026-02-14T16:17:51.824 [DEBUG] [Thread-188385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:17:51.843 [DEBUG] [Thread-188385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:17:51.843 [INFO] [Thread-188385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:17:51.846 [DEBUG] [Thread-188385] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:17:51.847 [DEBUG] [Thread-188385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:17:51.847 [DEBUG] [Thread-188385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:17:51.847 [DEBUG] [Thread-188385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:17:51.847 [DEBUG] [Thread-188385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:17:51.847 [DEBUG] [Thread-188385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:17:51.847 [DEBUG] [Thread-188385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:17:51.847 [DEBUG] [Thread-188385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:17:51.847 [DEBUG] [Thread-188385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:17:51.847 [DEBUG] [Thread-188385] [transport.py] [_log()] client lang: <none>
2026-02-14T16:17:51.847 [DEBUG] [Thread-188385] [transport.py] [_log()] server lang: <none>
2026-02-14T16:17:51.847 [DEBUG] [Thread-188385] [transport.py] [_log()] kex follows: False
2026-02-14T16:17:51.847 [DEBUG] [Thread-188385] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:17:51.847 [DEBUG] [Thread-188385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:17:51.848 [DEBUG] [Thread-188385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:17:51.848 [DEBUG] [Thread-188385] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:17:51.848 [DEBUG] [Thread-188385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:17:51.848 [DEBUG] [Thread-188385] [transport.py] [_log()] Compression: none
2026-02-14T16:17:51.848 [DEBUG] [Thread-188385] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:17:51.864 [DEBUG] [Thread-188385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:17:51.864 [DEBUG] [Thread-188385] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:17:51.865 [DEBUG] [Thread-188385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:17:51.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:17:51.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:17:51.909 [DEBUG] [Thread-188385] [transport.py] [_log()] userauth is OK
2026-02-14T16:17:51.909 [DEBUG] [Thread-188385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:17:51.909 [DEBUG] [Thread-188385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:17:51.909 [DEBUG] [Thread-188385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:17:51.909 [DEBUG] [Thread-188385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:17:51.940 [INFO] [Thread-188385] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:17:51.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:17:52.576 [DEBUG] [Thread-188385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:17:52.577 [DEBUG] [Thread-188385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:17:52.577 [DEBUG] [Thread-188385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:17:52.617 [DEBUG] [Thread-188385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:17:52.617 [DEBUG] [Thread-188385] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:17:52.621 [DEBUG] [Thread-188385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:17:52.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:17:52.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:17:52.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:17:52.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:17:52.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:17:52.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:17:52.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:17:52.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:17:52.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:17:52.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.595245 -999.00  +17.30  28.54     40   +3.60 1 1 1 1 1   888    0 13.80 1.19 ----- 28.6 28.5 174.8 34.0 21.9 -27.2 21.4 -27.5 23.0 -26.1 23.9 -28.1
2026-02-14T16:17:52.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:17:52.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:17:52.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.595245
2026-02-14T16:17:52.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:17:52.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:17:52.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:17:52.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:17:52.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:17:52.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:17:34', tmtdew=17.1, humidity=31.8, cloud=0.0, wind=42.55, temperature=18.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:17:09.168', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:17:52.649 [DEBUG] [Thread-188385] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:17:52.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T16:17:52.744 [DEBUG] [Thread-188388] [transport.py] [_log()] starting thread (client mode): 0xa81d5990
2026-02-14T16:17:52.745 [DEBUG] [Thread-188388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:17:52.759 [DEBUG] [Thread-188388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:17:52.759 [INFO] [Thread-188388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:17:52.767 [DEBUG] [Thread-188388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:17:52.767 [DEBUG] [Thread-188388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:17:52.767 [DEBUG] [Thread-188388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:17:52.767 [DEBUG] [Thread-188388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:17:52.767 [DEBUG] [Thread-188388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:17:52.768 [DEBUG] [Thread-188388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:17:52.768 [DEBUG] [Thread-188388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:17:52.768 [DEBUG] [Thread-188388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:17:52.768 [DEBUG] [Thread-188388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:17:52.768 [DEBUG] [Thread-188388] [transport.py] [_log()] client lang: <none>
2026-02-14T16:17:52.768 [DEBUG] [Thread-188388] [transport.py] [_log()] server lang: <none>
2026-02-14T16:17:52.768 [DEBUG] [Thread-188388] [transport.py] [_log()] kex follows: False
2026-02-14T16:17:52.768 [DEBUG] [Thread-188388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:17:52.769 [DEBUG] [Thread-188388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:17:52.769 [DEBUG] [Thread-188388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:17:52.769 [DEBUG] [Thread-188388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:17:52.769 [DEBUG] [Thread-188388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:17:52.769 [DEBUG] [Thread-188388] [transport.py] [_log()] Compression: none
2026-02-14T16:17:52.769 [DEBUG] [Thread-188388] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:17:52.826 [DEBUG] [Thread-188388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:17:52.826 [DEBUG] [Thread-188388] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:17:52.827 [DEBUG] [Thread-188388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:17:52.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:17:52.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:17:52.884 [DEBUG] [Thread-188388] [transport.py] [_log()] userauth is OK
2026-02-14T16:17:52.885 [DEBUG] [Thread-188388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:17:52.885 [DEBUG] [Thread-188388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:17:52.885 [DEBUG] [Thread-188388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:17:52.885 [DEBUG] [Thread-188388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:17:52.907 [INFO] [Thread-188388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:17: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-14T16:17:52.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:17:53.692 [DEBUG] [Thread-188388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:17:53.692 [DEBUG] [Thread-188388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:17:53.740 [DEBUG] [Thread-188388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:17:53.741 [DEBUG] [Thread-188388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:17:53.750 [DEBUG] [Thread-188388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:17:53.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:17:53.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:17:53.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-14T16:17:53.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:17:53.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:17:53.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:17:53.786 [DEBUG] [Thread-188388] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:17:54.107 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:17:54.109 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:18:05.838 [DEBUG] [Thread-188390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:18:20.890 [DEBUG] [Thread-188391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:18:23.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:18:23.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:18:23.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-14T16:18:25.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 18, 9), 15.96, 34.15, 0.0, 41.2, 17.17, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:18:25.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:18:09
2026-02-14T16:18:26.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:18:26.334 [DEBUG] [Thread-188392] [transport.py] [_log()] starting thread (client mode): 0xa2dc1120
2026-02-14T16:18:26.335 [DEBUG] [Thread-188392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:18:26.355 [DEBUG] [Thread-188392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:18:26.355 [INFO] [Thread-188392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:18:26.358 [DEBUG] [Thread-188392] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:18:26.358 [DEBUG] [Thread-188392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:18:26.358 [DEBUG] [Thread-188392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:18:26.359 [DEBUG] [Thread-188392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:18:26.359 [DEBUG] [Thread-188392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:18:26.359 [DEBUG] [Thread-188392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:18:26.359 [DEBUG] [Thread-188392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:18:26.359 [DEBUG] [Thread-188392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:18:26.359 [DEBUG] [Thread-188392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:18:26.359 [DEBUG] [Thread-188392] [transport.py] [_log()] client lang: <none>
2026-02-14T16:18:26.359 [DEBUG] [Thread-188392] [transport.py] [_log()] server lang: <none>
2026-02-14T16:18:26.359 [DEBUG] [Thread-188392] [transport.py] [_log()] kex follows: False
2026-02-14T16:18:26.359 [DEBUG] [Thread-188392] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:18:26.359 [DEBUG] [Thread-188392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:18:26.359 [DEBUG] [Thread-188392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:18:26.360 [DEBUG] [Thread-188392] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:18:26.360 [DEBUG] [Thread-188392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:18:26.360 [DEBUG] [Thread-188392] [transport.py] [_log()] Compression: none
2026-02-14T16:18:26.360 [DEBUG] [Thread-188392] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:18:26.379 [DEBUG] [Thread-188392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:18:26.380 [DEBUG] [Thread-188392] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:18:26.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:18:26.381 [DEBUG] [Thread-188392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:18:26.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:18:26.383 [DEBUG] [Thread-188392] [transport.py] [_log()] userauth is OK
2026-02-14T16:18:26.383 [DEBUG] [Thread-188392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:18:26.383 [DEBUG] [Thread-188392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:18:26.383 [DEBUG] [Thread-188392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:18:26.383 [DEBUG] [Thread-188392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:18:26.408 [INFO] [Thread-188392] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:18:26.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:18:27.050 [DEBUG] [Thread-188392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:18:27.051 [DEBUG] [Thread-188392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:18:27.051 [DEBUG] [Thread-188392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:18:27.091 [DEBUG] [Thread-188392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:18:27.091 [DEBUG] [Thread-188392] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:18:27.094 [DEBUG] [Thread-188392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:18:27.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:18:27.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:18:27.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:18:27.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:18:27.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:18:27.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:18:27.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:18:27.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:18:27.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:18:27.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.595592 -999.00  +17.00  39.24     39   +3.20 1 1 2 1 1   888    0 13.59 2.17 ----- 35.1 39.2 180.6 44.8 21.9 -28.2 21.0 -33.8 22.8 -29.0 23.5 -28.2
2026-02-14T16:18:27.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:18:27.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:18:27.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.595592
2026-02-14T16:18:27.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:18:27.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:18:27.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:18:27.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:18:27.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:18:27.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:18:09', tmtdew=15.96, humidity=34.15, cloud=0.0, wind=41.2, temperature=17.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:17:39.149', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:18:27.113 [DEBUG] [Thread-188392] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:18:27.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-14T16:18:27.197 [DEBUG] [Thread-188395] [transport.py] [_log()] starting thread (client mode): 0xa2dc33d0
2026-02-14T16:18:27.197 [DEBUG] [Thread-188395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:18:27.215 [DEBUG] [Thread-188395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:18:27.216 [INFO] [Thread-188395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:18:27.223 [DEBUG] [Thread-188395] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:18:27.223 [DEBUG] [Thread-188395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:18:27.223 [DEBUG] [Thread-188395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:18:27.223 [DEBUG] [Thread-188395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:18:27.223 [DEBUG] [Thread-188395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:18:27.223 [DEBUG] [Thread-188395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:18:27.223 [DEBUG] [Thread-188395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:18:27.223 [DEBUG] [Thread-188395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:18:27.223 [DEBUG] [Thread-188395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:18:27.223 [DEBUG] [Thread-188395] [transport.py] [_log()] client lang: <none>
2026-02-14T16:18:27.223 [DEBUG] [Thread-188395] [transport.py] [_log()] server lang: <none>
2026-02-14T16:18:27.223 [DEBUG] [Thread-188395] [transport.py] [_log()] kex follows: False
2026-02-14T16:18:27.224 [DEBUG] [Thread-188395] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:18:27.224 [DEBUG] [Thread-188395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:18:27.224 [DEBUG] [Thread-188395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:18:27.224 [DEBUG] [Thread-188395] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:18:27.224 [DEBUG] [Thread-188395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:18:27.224 [DEBUG] [Thread-188395] [transport.py] [_log()] Compression: none
2026-02-14T16:18:27.224 [DEBUG] [Thread-188395] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:18:27.281 [DEBUG] [Thread-188395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:18:27.282 [DEBUG] [Thread-188395] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:18:27.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:18:27.283 [DEBUG] [Thread-188395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:18:27.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:18:27.337 [DEBUG] [Thread-188395] [transport.py] [_log()] userauth is OK
2026-02-14T16:18:27.338 [DEBUG] [Thread-188395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:18:27.338 [DEBUG] [Thread-188395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:18:27.338 [DEBUG] [Thread-188395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:18:27.338 [DEBUG] [Thread-188395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:18:27.362 [INFO] [Thread-188395] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:18:27.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-14T16:18:27.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:18:28.196 [DEBUG] [Thread-188395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:18:28.196 [DEBUG] [Thread-188395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:18:28.244 [DEBUG] [Thread-188395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:18:28.244 [DEBUG] [Thread-188395] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:18:28.254 [DEBUG] [Thread-188395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:18:28.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:18:28.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-14T16:18:28.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-14T16:18:28.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:18:28.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:18:28.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:18:28.290 [DEBUG] [Thread-188395] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:18:30.876 [DEBUG] [Thread-188397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:18:35.925 [DEBUG] [Thread-188398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:18:50.975 [DEBUG] [Thread-188399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:18:54.250 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:18:54.253 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:18:58.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:18:58.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:18:58.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-14T16:19:00.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 18, 45), 15.71, 34.85, 0.0, 37.46, 16.95, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:19:00.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:18:45
2026-02-14T16:19:00.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:19:00.733 [DEBUG] [Thread-188400] [transport.py] [_log()] starting thread (client mode): 0xa575b760
2026-02-14T16:19:00.733 [DEBUG] [Thread-188400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:19:00.755 [DEBUG] [Thread-188400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:19:00.755 [INFO] [Thread-188400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:19:00.758 [DEBUG] [Thread-188400] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:19:00.758 [DEBUG] [Thread-188400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:19:00.758 [DEBUG] [Thread-188400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:19:00.758 [DEBUG] [Thread-188400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:19:00.758 [DEBUG] [Thread-188400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:19:00.758 [DEBUG] [Thread-188400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:19:00.758 [DEBUG] [Thread-188400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:19:00.758 [DEBUG] [Thread-188400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:19:00.758 [DEBUG] [Thread-188400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:19:00.758 [DEBUG] [Thread-188400] [transport.py] [_log()] client lang: <none>
2026-02-14T16:19:00.759 [DEBUG] [Thread-188400] [transport.py] [_log()] server lang: <none>
2026-02-14T16:19:00.759 [DEBUG] [Thread-188400] [transport.py] [_log()] kex follows: False
2026-02-14T16:19:00.759 [DEBUG] [Thread-188400] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:19:00.759 [DEBUG] [Thread-188400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:19:00.759 [DEBUG] [Thread-188400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:19:00.759 [DEBUG] [Thread-188400] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:19:00.759 [DEBUG] [Thread-188400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:19:00.759 [DEBUG] [Thread-188400] [transport.py] [_log()] Compression: none
2026-02-14T16:19:00.759 [DEBUG] [Thread-188400] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:19:00.777 [DEBUG] [Thread-188400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:19:00.777 [DEBUG] [Thread-188400] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:19:00.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:19:00.778 [DEBUG] [Thread-188400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:19:00.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:19:00.781 [DEBUG] [Thread-188400] [transport.py] [_log()] userauth is OK
2026-02-14T16:19:00.781 [DEBUG] [Thread-188400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:19:00.781 [DEBUG] [Thread-188400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:19:00.781 [DEBUG] [Thread-188400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:19:00.781 [DEBUG] [Thread-188400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:19:00.799 [INFO] [Thread-188400] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:19:00.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:19:01.597 [DEBUG] [Thread-188400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:19:01.597 [DEBUG] [Thread-188400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:19:01.598 [DEBUG] [Thread-188400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:19:01.638 [DEBUG] [Thread-188400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:19:01.638 [DEBUG] [Thread-188400] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:19:01.641 [DEBUG] [Thread-188400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:19:01.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:19:01.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:19:01.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:19:01.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:19:01.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:19:01.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:19:01.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:19:01.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:19:01.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:19:01.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.595940 -999.00  +16.90  35.88     40   +3.30 1 1 2 1 1   888    0 13.52 3.05 ----- 27.7 35.9 178.8 42.4 21.7 -28.6 20.9 -30.9 22.6 -27.3 23.4 -28.3
2026-02-14T16:19:01.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:19:01.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:19:01.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.595940
2026-02-14T16:19:01.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:19:01.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:19:01.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:19:01.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:19:01.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:19:01.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:18:45', tmtdew=15.71, humidity=34.85, cloud=0.0, wind=37.46, temperature=16.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:18:09.216', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:19:01.662 [DEBUG] [Thread-188400] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:19:01.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-14T16:19:06.011 [DEBUG] [Thread-188403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:19:21.064 [DEBUG] [Thread-188404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:19:30.932 [DEBUG] [Thread-188405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:19:36.097 [DEBUG] [Thread-188406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:19:51.137 [DEBUG] [Thread-188407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:19:54.406 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:19:54.407 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:20:06.174 [DEBUG] [Thread-188408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:20:21.215 [DEBUG] [Thread-188409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:20:30.996 [DEBUG] [Thread-188410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:20:36.251 [DEBUG] [Thread-188411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:20:51.290 [DEBUG] [Thread-188412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:20:54.552 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:20:54.553 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:21:06.327 [DEBUG] [Thread-188413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:21:15.192 [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-14T16:21:21.364 [DEBUG] [Thread-188414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:21:31.059 [DEBUG] [Thread-188415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:21:36.399 [DEBUG] [Thread-188416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:21:45.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:21:45.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:21:45.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-14T16:21:47.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 21, 8), 15.85, 34.48, 0.0, 31.62, 17.12, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:21:47.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:21:08
2026-02-14T16:21:48.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:21:48.381 [DEBUG] [Thread-188417] [transport.py] [_log()] starting thread (client mode): 0xa81d7370
2026-02-14T16:21:48.382 [DEBUG] [Thread-188417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:21:48.404 [DEBUG] [Thread-188417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:21:48.404 [INFO] [Thread-188417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:21:48.408 [DEBUG] [Thread-188417] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:21:48.408 [DEBUG] [Thread-188417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:21:48.408 [DEBUG] [Thread-188417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:21:48.408 [DEBUG] [Thread-188417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:21:48.408 [DEBUG] [Thread-188417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:21:48.408 [DEBUG] [Thread-188417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:21:48.409 [DEBUG] [Thread-188417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:21:48.409 [DEBUG] [Thread-188417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:21:48.409 [DEBUG] [Thread-188417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:21:48.409 [DEBUG] [Thread-188417] [transport.py] [_log()] client lang: <none>
2026-02-14T16:21:48.409 [DEBUG] [Thread-188417] [transport.py] [_log()] server lang: <none>
2026-02-14T16:21:48.409 [DEBUG] [Thread-188417] [transport.py] [_log()] kex follows: False
2026-02-14T16:21:48.409 [DEBUG] [Thread-188417] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:21:48.409 [DEBUG] [Thread-188417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:21:48.409 [DEBUG] [Thread-188417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:21:48.409 [DEBUG] [Thread-188417] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:21:48.409 [DEBUG] [Thread-188417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:21:48.409 [DEBUG] [Thread-188417] [transport.py] [_log()] Compression: none
2026-02-14T16:21:48.409 [DEBUG] [Thread-188417] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:21:48.425 [DEBUG] [Thread-188417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:21:48.426 [DEBUG] [Thread-188417] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:21:48.427 [DEBUG] [Thread-188417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:21:48.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:21:48.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:21:48.429 [DEBUG] [Thread-188417] [transport.py] [_log()] userauth is OK
2026-02-14T16:21:48.429 [DEBUG] [Thread-188417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:21:48.429 [DEBUG] [Thread-188417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:21:48.429 [DEBUG] [Thread-188417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:21:48.429 [DEBUG] [Thread-188417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:21:48.447 [INFO] [Thread-188417] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:21:48.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:21:49.087 [DEBUG] [Thread-188417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:21:49.087 [DEBUG] [Thread-188417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:21:49.088 [DEBUG] [Thread-188417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:21:49.128 [DEBUG] [Thread-188417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:21:49.129 [DEBUG] [Thread-188417] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:21:49.132 [DEBUG] [Thread-188417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:21:49.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:21:49.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:21:49.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:21:49.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:21:49.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:21:49.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:21:49.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:21:49.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:21:49.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:21:49.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.598023 -999.00  +16.40  19.35     41   +3.20 1 1 1 1 1   888    0 13.32 -10.35 ----- 22.3 19.4 156.8 27.7 21.4 -28.9 20.9 -26.8 22.5 -25.4 23.4 -27.7
2026-02-14T16:21:49.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:21:49.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:21:49.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.598023
2026-02-14T16:21:49.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:21:49.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:21:49.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:21:49.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:21:49.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:21:49.157 [DEBUG] [Thread-188417] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:21:49.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:21:08', tmtdew=15.85, humidity=34.48, cloud=0.0, wind=31.62, temperature=17.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:21:09.187', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:21:49.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-14T16:21:49.252 [DEBUG] [Thread-188420] [transport.py] [_log()] starting thread (client mode): 0xa57b3730
2026-02-14T16:21:49.253 [DEBUG] [Thread-188420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:21:49.267 [DEBUG] [Thread-188420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:21:49.267 [INFO] [Thread-188420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:21:49.274 [DEBUG] [Thread-188420] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:21:49.274 [DEBUG] [Thread-188420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:21:49.274 [DEBUG] [Thread-188420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:21:49.274 [DEBUG] [Thread-188420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:21:49.275 [DEBUG] [Thread-188420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:21:49.275 [DEBUG] [Thread-188420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:21:49.275 [DEBUG] [Thread-188420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:21:49.275 [DEBUG] [Thread-188420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:21:49.275 [DEBUG] [Thread-188420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:21:49.275 [DEBUG] [Thread-188420] [transport.py] [_log()] client lang: <none>
2026-02-14T16:21:49.275 [DEBUG] [Thread-188420] [transport.py] [_log()] server lang: <none>
2026-02-14T16:21:49.275 [DEBUG] [Thread-188420] [transport.py] [_log()] kex follows: False
2026-02-14T16:21:49.275 [DEBUG] [Thread-188420] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:21:49.275 [DEBUG] [Thread-188420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:21:49.275 [DEBUG] [Thread-188420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:21:49.275 [DEBUG] [Thread-188420] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:21:49.275 [DEBUG] [Thread-188420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:21:49.275 [DEBUG] [Thread-188420] [transport.py] [_log()] Compression: none
2026-02-14T16:21:49.275 [DEBUG] [Thread-188420] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:21:49.334 [DEBUG] [Thread-188420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:21:49.334 [DEBUG] [Thread-188420] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:21:49.335 [DEBUG] [Thread-188420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:21:49.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:21:49.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:21:49.390 [DEBUG] [Thread-188420] [transport.py] [_log()] userauth is OK
2026-02-14T16:21:49.390 [DEBUG] [Thread-188420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:21:49.390 [DEBUG] [Thread-188420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:21:49.390 [DEBUG] [Thread-188420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:21:49.390 [DEBUG] [Thread-188420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:21:49.410 [INFO] [Thread-188420] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:21:49.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-14T16:21:49.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:21:50.241 [DEBUG] [Thread-188420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:21:50.241 [DEBUG] [Thread-188420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:21:50.291 [DEBUG] [Thread-188420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:21:50.291 [DEBUG] [Thread-188420] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:21:50.300 [DEBUG] [Thread-188420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:21:50.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:21:50.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-14T16:21:50.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-14T16:21:50.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:21:50.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:21:50.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:21:50.337 [DEBUG] [Thread-188420] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:21:51.429 [DEBUG] [Thread-188422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:21:54.692 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:21:54.693 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:22:06.482 [DEBUG] [Thread-188423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:22:20.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:22:20.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:22:20.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-14T16:22:21.521 [DEBUG] [Thread-188424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:22:22.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 21, 43), 15.69, 34.59, 0.0, 28.2, 16.92, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:22:22.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:21:43
2026-02-14T16:22:22.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:22:22.923 [DEBUG] [Thread-188425] [transport.py] [_log()] starting thread (client mode): 0xa2dc2800
2026-02-14T16:22:22.923 [DEBUG] [Thread-188425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:22:22.938 [DEBUG] [Thread-188425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:22:22.938 [INFO] [Thread-188425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:22:22.941 [DEBUG] [Thread-188425] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:22:22.941 [DEBUG] [Thread-188425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:22:22.941 [DEBUG] [Thread-188425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:22:22.941 [DEBUG] [Thread-188425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:22:22.941 [DEBUG] [Thread-188425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:22:22.941 [DEBUG] [Thread-188425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:22:22.941 [DEBUG] [Thread-188425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:22:22.941 [DEBUG] [Thread-188425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:22:22.941 [DEBUG] [Thread-188425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:22:22.941 [DEBUG] [Thread-188425] [transport.py] [_log()] client lang: <none>
2026-02-14T16:22:22.941 [DEBUG] [Thread-188425] [transport.py] [_log()] server lang: <none>
2026-02-14T16:22:22.941 [DEBUG] [Thread-188425] [transport.py] [_log()] kex follows: False
2026-02-14T16:22:22.941 [DEBUG] [Thread-188425] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:22:22.941 [DEBUG] [Thread-188425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:22:22.941 [DEBUG] [Thread-188425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:22:22.941 [DEBUG] [Thread-188425] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:22:22.941 [DEBUG] [Thread-188425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:22:22.942 [DEBUG] [Thread-188425] [transport.py] [_log()] Compression: none
2026-02-14T16:22:22.942 [DEBUG] [Thread-188425] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:22:22.955 [DEBUG] [Thread-188425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:22:22.955 [DEBUG] [Thread-188425] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:22:22.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:22:22.955 [DEBUG] [Thread-188425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:22:22.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:22:22.956 [DEBUG] [Thread-188425] [transport.py] [_log()] userauth is OK
2026-02-14T16:22:22.956 [DEBUG] [Thread-188425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:22:22.956 [DEBUG] [Thread-188425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:22:22.956 [DEBUG] [Thread-188425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:22:22.957 [DEBUG] [Thread-188425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:22:22.991 [INFO] [Thread-188425] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:22:22.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:22:23.631 [DEBUG] [Thread-188425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:22:23.631 [DEBUG] [Thread-188425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:22:23.632 [DEBUG] [Thread-188425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:22:23.672 [DEBUG] [Thread-188425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:22:23.672 [DEBUG] [Thread-188425] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:22:23.675 [DEBUG] [Thread-188425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:22:23.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:22:23.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:22:23.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:22:23.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:22:23.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:22:23.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:22:23.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:22:23.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:22:23.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:22:23.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.598370 -999.00  +16.50  20.62     41   +3.40 1 1 1 1 1   888    0 13.32 -11.72 ----- 20.3 20.6 165.4 26.4 21.6 -27.6 21.0 -26.0 22.6 -24.6 23.6 -27.2
2026-02-14T16:22:23.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:22:23.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:22:23.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.598370
2026-02-14T16:22:23.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:22:23.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:22:23.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:22:23.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:22:23.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:22:23.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:21:43', tmtdew=15.69, humidity=34.59, cloud=0.0, wind=28.2, temperature=16.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:21:39.168', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:22:23.700 [DEBUG] [Thread-188425] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:22:23.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-14T16:22:23.794 [DEBUG] [Thread-188428] [transport.py] [_log()] starting thread (client mode): 0xa57b28c0
2026-02-14T16:22:23.794 [DEBUG] [Thread-188428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:22:23.808 [DEBUG] [Thread-188428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:22:23.808 [INFO] [Thread-188428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:22:23.816 [DEBUG] [Thread-188428] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:22:23.816 [DEBUG] [Thread-188428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:22:23.816 [DEBUG] [Thread-188428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:22:23.816 [DEBUG] [Thread-188428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:22:23.816 [DEBUG] [Thread-188428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:22:23.816 [DEBUG] [Thread-188428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:22:23.816 [DEBUG] [Thread-188428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:22:23.816 [DEBUG] [Thread-188428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:22:23.816 [DEBUG] [Thread-188428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:22:23.816 [DEBUG] [Thread-188428] [transport.py] [_log()] client lang: <none>
2026-02-14T16:22:23.816 [DEBUG] [Thread-188428] [transport.py] [_log()] server lang: <none>
2026-02-14T16:22:23.816 [DEBUG] [Thread-188428] [transport.py] [_log()] kex follows: False
2026-02-14T16:22:23.817 [DEBUG] [Thread-188428] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:22:23.817 [DEBUG] [Thread-188428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:22:23.817 [DEBUG] [Thread-188428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:22:23.817 [DEBUG] [Thread-188428] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:22:23.817 [DEBUG] [Thread-188428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:22:23.817 [DEBUG] [Thread-188428] [transport.py] [_log()] Compression: none
2026-02-14T16:22:23.817 [DEBUG] [Thread-188428] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:22:23.875 [DEBUG] [Thread-188428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:22:23.875 [DEBUG] [Thread-188428] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:22:23.876 [DEBUG] [Thread-188428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:22:23.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:22:23.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:22:23.931 [DEBUG] [Thread-188428] [transport.py] [_log()] userauth is OK
2026-02-14T16:22:23.931 [DEBUG] [Thread-188428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:22:23.932 [DEBUG] [Thread-188428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:22:23.932 [DEBUG] [Thread-188428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:22:23.932 [DEBUG] [Thread-188428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:22:23.950 [INFO] [Thread-188428] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:22:23.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-14T16:22:23.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:22:24.837 [DEBUG] [Thread-188428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:22:24.837 [DEBUG] [Thread-188428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:22:24.886 [DEBUG] [Thread-188428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:22:24.887 [DEBUG] [Thread-188428] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:22:24.896 [DEBUG] [Thread-188428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:22:24.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:22:24.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-14T16:22:24.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-14T16:22:24.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:22:24.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:22:24.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:22:24.932 [DEBUG] [Thread-188428] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:22:31.105 [DEBUG] [Thread-188430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:22:36.558 [DEBUG] [Thread-188431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:22:51.618 [DEBUG] [Thread-188432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:22:54.834 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:22:54.835 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:22:54.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:22:54.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:22:54.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:22:56.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 22, 20), 15.98, 34.0, 0.0, 36.33, 17.15, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:22:56.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:22:20
2026-02-14T16:22:57.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:22:57.408 [DEBUG] [Thread-188433] [transport.py] [_log()] starting thread (client mode): 0xa5758400
2026-02-14T16:22:57.408 [DEBUG] [Thread-188433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:22:57.429 [DEBUG] [Thread-188433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:22:57.429 [INFO] [Thread-188433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:22:57.431 [DEBUG] [Thread-188433] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:22:57.431 [DEBUG] [Thread-188433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:22:57.431 [DEBUG] [Thread-188433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:22:57.431 [DEBUG] [Thread-188433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:22:57.431 [DEBUG] [Thread-188433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:22:57.431 [DEBUG] [Thread-188433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:22:57.431 [DEBUG] [Thread-188433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:22:57.431 [DEBUG] [Thread-188433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:22:57.431 [DEBUG] [Thread-188433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:22:57.431 [DEBUG] [Thread-188433] [transport.py] [_log()] client lang: <none>
2026-02-14T16:22:57.431 [DEBUG] [Thread-188433] [transport.py] [_log()] server lang: <none>
2026-02-14T16:22:57.431 [DEBUG] [Thread-188433] [transport.py] [_log()] kex follows: False
2026-02-14T16:22:57.431 [DEBUG] [Thread-188433] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:22:57.431 [DEBUG] [Thread-188433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:22:57.432 [DEBUG] [Thread-188433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:22:57.432 [DEBUG] [Thread-188433] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:22:57.432 [DEBUG] [Thread-188433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:22:57.432 [DEBUG] [Thread-188433] [transport.py] [_log()] Compression: none
2026-02-14T16:22:57.432 [DEBUG] [Thread-188433] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:22:57.445 [DEBUG] [Thread-188433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:22:57.446 [DEBUG] [Thread-188433] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:22:57.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:22:57.447 [DEBUG] [Thread-188433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:22:57.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:22:57.449 [DEBUG] [Thread-188433] [transport.py] [_log()] userauth is OK
2026-02-14T16:22:57.449 [DEBUG] [Thread-188433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:22:57.449 [DEBUG] [Thread-188433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:22:57.449 [DEBUG] [Thread-188433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:22:57.449 [DEBUG] [Thread-188433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:22:57.475 [INFO] [Thread-188433] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:22:57.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:22:58.123 [DEBUG] [Thread-188433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:22:58.123 [DEBUG] [Thread-188433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:22:58.124 [DEBUG] [Thread-188433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:22:58.165 [DEBUG] [Thread-188433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:22:58.166 [DEBUG] [Thread-188433] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:22:58.169 [DEBUG] [Thread-188433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:22:58.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:22:58.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:22:58.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:22:58.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:22:58.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:22:58.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:22:58.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:22:58.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:22:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:22:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.598717 -999.00  +16.80  26.94     40   +3.40 1 1 1 1 1   888    0 13.08 -11.74 ----- 23.9 26.9 165.8 31.0 21.7 -27.1 21.1 -25.7 22.7 -26.2 23.6 -27.3
2026-02-14T16:22:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:22:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:22:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.598717
2026-02-14T16:22:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:22:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:22:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:22:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:22:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:22:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:22:20', tmtdew=15.98, humidity=34.0, cloud=0.0, wind=36.33, temperature=17.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:22:09.149', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:22:58.189 [DEBUG] [Thread-188433] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:22:58.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-14T16:22:58.273 [DEBUG] [Thread-188436] [transport.py] [_log()] starting thread (client mode): 0xa57593c0
2026-02-14T16:22:58.273 [DEBUG] [Thread-188436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:22:58.290 [DEBUG] [Thread-188436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:22:58.290 [INFO] [Thread-188436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:22:58.298 [DEBUG] [Thread-188436] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:22:58.298 [DEBUG] [Thread-188436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:22:58.298 [DEBUG] [Thread-188436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:22:58.298 [DEBUG] [Thread-188436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:22:58.298 [DEBUG] [Thread-188436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:22:58.298 [DEBUG] [Thread-188436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:22:58.298 [DEBUG] [Thread-188436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:22:58.298 [DEBUG] [Thread-188436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:22:58.298 [DEBUG] [Thread-188436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:22:58.298 [DEBUG] [Thread-188436] [transport.py] [_log()] client lang: <none>
2026-02-14T16:22:58.298 [DEBUG] [Thread-188436] [transport.py] [_log()] server lang: <none>
2026-02-14T16:22:58.298 [DEBUG] [Thread-188436] [transport.py] [_log()] kex follows: False
2026-02-14T16:22:58.298 [DEBUG] [Thread-188436] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:22:58.299 [DEBUG] [Thread-188436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:22:58.299 [DEBUG] [Thread-188436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:22:58.299 [DEBUG] [Thread-188436] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:22:58.299 [DEBUG] [Thread-188436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:22:58.299 [DEBUG] [Thread-188436] [transport.py] [_log()] Compression: none
2026-02-14T16:22:58.299 [DEBUG] [Thread-188436] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:22:58.358 [DEBUG] [Thread-188436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:22:58.358 [DEBUG] [Thread-188436] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:22:58.359 [DEBUG] [Thread-188436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:22:58.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:22:58.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:22:58.413 [DEBUG] [Thread-188436] [transport.py] [_log()] userauth is OK
2026-02-14T16:22:58.414 [DEBUG] [Thread-188436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:22:58.414 [DEBUG] [Thread-188436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:22:58.414 [DEBUG] [Thread-188436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:22:58.414 [DEBUG] [Thread-188436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:22:58.432 [INFO] [Thread-188436] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:22:58.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-14T16:22:58.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:22:59.243 [DEBUG] [Thread-188436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:22:59.243 [DEBUG] [Thread-188436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:22:59.291 [DEBUG] [Thread-188436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:22:59.292 [DEBUG] [Thread-188436] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:22:59.301 [DEBUG] [Thread-188436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:22:59.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:22:59.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-14T16:22:59.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-14T16:22:59.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:22:59.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:22:59.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:22:59.337 [DEBUG] [Thread-188436] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:23:06.660 [DEBUG] [Thread-188438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:23:21.714 [DEBUG] [Thread-188439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:23:29.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:23:29.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:23:29.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-14T16:23:31.145 [DEBUG] [Thread-188440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:23:31.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 22, 55), 15.72, 34.6, 0.0, 35.9, 17.03, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:23:31.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:22:55
2026-02-14T16:23:31.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:23:32.032 [DEBUG] [Thread-188441] [transport.py] [_log()] starting thread (client mode): 0xa2d23760
2026-02-14T16:23:32.032 [DEBUG] [Thread-188441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:23:32.051 [DEBUG] [Thread-188441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:23:32.051 [INFO] [Thread-188441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:23:32.054 [DEBUG] [Thread-188441] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:23:32.054 [DEBUG] [Thread-188441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:23:32.054 [DEBUG] [Thread-188441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:23:32.054 [DEBUG] [Thread-188441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:23:32.055 [DEBUG] [Thread-188441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:23:32.055 [DEBUG] [Thread-188441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:23:32.055 [DEBUG] [Thread-188441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:23:32.055 [DEBUG] [Thread-188441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:23:32.055 [DEBUG] [Thread-188441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:23:32.055 [DEBUG] [Thread-188441] [transport.py] [_log()] client lang: <none>
2026-02-14T16:23:32.055 [DEBUG] [Thread-188441] [transport.py] [_log()] server lang: <none>
2026-02-14T16:23:32.055 [DEBUG] [Thread-188441] [transport.py] [_log()] kex follows: False
2026-02-14T16:23:32.055 [DEBUG] [Thread-188441] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:23:32.055 [DEBUG] [Thread-188441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:23:32.055 [DEBUG] [Thread-188441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:23:32.055 [DEBUG] [Thread-188441] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:23:32.055 [DEBUG] [Thread-188441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:23:32.055 [DEBUG] [Thread-188441] [transport.py] [_log()] Compression: none
2026-02-14T16:23:32.055 [DEBUG] [Thread-188441] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:23:32.075 [DEBUG] [Thread-188441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:23:32.076 [DEBUG] [Thread-188441] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:23:32.077 [DEBUG] [Thread-188441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:23:32.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:23:32.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:23:32.079 [DEBUG] [Thread-188441] [transport.py] [_log()] userauth is OK
2026-02-14T16:23:32.080 [DEBUG] [Thread-188441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:23:32.080 [DEBUG] [Thread-188441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:23:32.080 [DEBUG] [Thread-188441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:23:32.080 [DEBUG] [Thread-188441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:23:32.107 [INFO] [Thread-188441] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:23:32.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:23:32.726 [DEBUG] [Thread-188441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:23:32.726 [DEBUG] [Thread-188441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:23:32.727 [DEBUG] [Thread-188441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:23:32.767 [DEBUG] [Thread-188441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:23:32.768 [DEBUG] [Thread-188441] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:23:32.771 [DEBUG] [Thread-188441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:23:32.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:23:32.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:23:32.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:23:32.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:23:32.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:23:32.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:23:32.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:23:32.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:23:32.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:23:32.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.599065 -999.00  +17.00  25.39     40   +3.40 1 1 1 1 1   888    0 13.13 -9.36 ----- 28.1 25.4 168.6 37.6 21.6 -27.7 21.1 -25.9 22.8 -25.8 23.7 -27.2
2026-02-14T16:23:32.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:23:32.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:23:32.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.599065
2026-02-14T16:23:32.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:23:32.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:23:32.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:23:32.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:23:32.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:23:32.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:22:55', tmtdew=15.72, humidity=34.6, cloud=0.0, wind=35.9, temperature=17.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:22:39.216', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:23:32.799 [DEBUG] [Thread-188441] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:23:32.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-14T16:23:32.896 [DEBUG] [Thread-188444] [transport.py] [_log()] starting thread (client mode): 0xa2d211e0
2026-02-14T16:23:32.896 [DEBUG] [Thread-188444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:23:32.910 [DEBUG] [Thread-188444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:23:32.910 [INFO] [Thread-188444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:23:32.918 [DEBUG] [Thread-188444] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:23:32.918 [DEBUG] [Thread-188444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:23:32.918 [DEBUG] [Thread-188444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:23:32.918 [DEBUG] [Thread-188444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:23:32.918 [DEBUG] [Thread-188444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:23:32.918 [DEBUG] [Thread-188444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:23:32.918 [DEBUG] [Thread-188444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:23:32.918 [DEBUG] [Thread-188444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:23:32.918 [DEBUG] [Thread-188444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:23:32.918 [DEBUG] [Thread-188444] [transport.py] [_log()] client lang: <none>
2026-02-14T16:23:32.919 [DEBUG] [Thread-188444] [transport.py] [_log()] server lang: <none>
2026-02-14T16:23:32.919 [DEBUG] [Thread-188444] [transport.py] [_log()] kex follows: False
2026-02-14T16:23:32.919 [DEBUG] [Thread-188444] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:23:32.919 [DEBUG] [Thread-188444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:23:32.919 [DEBUG] [Thread-188444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:23:32.919 [DEBUG] [Thread-188444] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:23:32.919 [DEBUG] [Thread-188444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:23:32.919 [DEBUG] [Thread-188444] [transport.py] [_log()] Compression: none
2026-02-14T16:23:32.919 [DEBUG] [Thread-188444] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:23:32.974 [DEBUG] [Thread-188444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:23:32.975 [DEBUG] [Thread-188444] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:23:32.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:23:32.976 [DEBUG] [Thread-188444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:23:32.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:23:33.031 [DEBUG] [Thread-188444] [transport.py] [_log()] userauth is OK
2026-02-14T16:23:33.031 [DEBUG] [Thread-188444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:23:33.031 [DEBUG] [Thread-188444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:23:33.031 [DEBUG] [Thread-188444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:23:33.031 [DEBUG] [Thread-188444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:23:33.053 [INFO] [Thread-188444] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:23:33.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:23:33.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:23:33.853 [DEBUG] [Thread-188444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:23:33.853 [DEBUG] [Thread-188444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:23:33.900 [DEBUG] [Thread-188444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:23:33.900 [DEBUG] [Thread-188444] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:23:33.909 [DEBUG] [Thread-188444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:23:33.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:23:33.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-14T16:23:33.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-14T16:23:33.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:23:33.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:23:33.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:23:33.944 [DEBUG] [Thread-188444] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:23:36.752 [DEBUG] [Thread-188446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:23:51.800 [DEBUG] [Thread-188447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:23:54.978 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:23:54.979 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:24:03.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:24:03.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:24:03.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-14T16:24:05.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 23, 30), 15.98, 34.1, 0.0, 31.34, 17.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:24:05.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:23:30
2026-02-14T16:24:06.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:24:06.392 [DEBUG] [Thread-188448] [transport.py] [_log()] starting thread (client mode): 0xa5759ed0
2026-02-14T16:24:06.392 [DEBUG] [Thread-188448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:24:06.412 [DEBUG] [Thread-188448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:24:06.412 [INFO] [Thread-188448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:24:06.415 [DEBUG] [Thread-188448] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:24:06.415 [DEBUG] [Thread-188448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:24:06.415 [DEBUG] [Thread-188448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:24:06.415 [DEBUG] [Thread-188448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:24:06.415 [DEBUG] [Thread-188448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:24:06.415 [DEBUG] [Thread-188448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:24:06.415 [DEBUG] [Thread-188448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:24:06.415 [DEBUG] [Thread-188448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:24:06.416 [DEBUG] [Thread-188448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:24:06.416 [DEBUG] [Thread-188448] [transport.py] [_log()] client lang: <none>
2026-02-14T16:24:06.416 [DEBUG] [Thread-188448] [transport.py] [_log()] server lang: <none>
2026-02-14T16:24:06.416 [DEBUG] [Thread-188448] [transport.py] [_log()] kex follows: False
2026-02-14T16:24:06.416 [DEBUG] [Thread-188448] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:24:06.416 [DEBUG] [Thread-188448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:24:06.416 [DEBUG] [Thread-188448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:24:06.416 [DEBUG] [Thread-188448] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:24:06.416 [DEBUG] [Thread-188448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:24:06.416 [DEBUG] [Thread-188448] [transport.py] [_log()] Compression: none
2026-02-14T16:24:06.416 [DEBUG] [Thread-188448] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:24:06.433 [DEBUG] [Thread-188448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:24:06.433 [DEBUG] [Thread-188448] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:24:06.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:24:06.434 [DEBUG] [Thread-188448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:24:06.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:24:06.436 [DEBUG] [Thread-188448] [transport.py] [_log()] userauth is OK
2026-02-14T16:24:06.436 [DEBUG] [Thread-188448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:24:06.436 [DEBUG] [Thread-188448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:24:06.437 [DEBUG] [Thread-188448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:24:06.437 [DEBUG] [Thread-188448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:24:06.461 [INFO] [Thread-188448] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:24:06.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:24:06.836 [DEBUG] [Thread-188450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:24:07.247 [DEBUG] [Thread-188448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:24:07.247 [DEBUG] [Thread-188448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:24:07.248 [DEBUG] [Thread-188448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:24:07.288 [DEBUG] [Thread-188448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:24:07.288 [DEBUG] [Thread-188448] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:24:07.292 [DEBUG] [Thread-188448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:24:07.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:24:07.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:24:07.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:24:07.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:24:07.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:24:07.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:24:07.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:24:07.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:24:07.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:24:07.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.599412 -999.00  +17.00  30.08     39   +3.20 1 1 2 1 1   888    0 13.42 -7.33 ----- 30.9 30.1 184.2 45.1 21.8 -29.7 20.9 -31.6 22.5 -27.6 23.3 -30.6
2026-02-14T16:24:07.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:24:07.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:24:07.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.599412
2026-02-14T16:24:07.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:24:07.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:24:07.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:24:07.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:24:07.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:24:07.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:23:30', tmtdew=15.98, humidity=34.1, cloud=0.0, wind=31.34, temperature=17.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:23:09.197', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:24:07.318 [DEBUG] [Thread-188448] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:24:07.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-14T16:24:07.416 [DEBUG] [Thread-188452] [transport.py] [_log()] starting thread (client mode): 0xa57b1690
2026-02-14T16:24:07.416 [DEBUG] [Thread-188452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:24:07.431 [DEBUG] [Thread-188452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:24:07.431 [INFO] [Thread-188452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:24:07.438 [DEBUG] [Thread-188452] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:24:07.439 [DEBUG] [Thread-188452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:24:07.439 [DEBUG] [Thread-188452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:24:07.439 [DEBUG] [Thread-188452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:24:07.439 [DEBUG] [Thread-188452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:24:07.439 [DEBUG] [Thread-188452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:24:07.439 [DEBUG] [Thread-188452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:24:07.439 [DEBUG] [Thread-188452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:24:07.439 [DEBUG] [Thread-188452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:24:07.440 [DEBUG] [Thread-188452] [transport.py] [_log()] client lang: <none>
2026-02-14T16:24:07.440 [DEBUG] [Thread-188452] [transport.py] [_log()] server lang: <none>
2026-02-14T16:24:07.440 [DEBUG] [Thread-188452] [transport.py] [_log()] kex follows: False
2026-02-14T16:24:07.440 [DEBUG] [Thread-188452] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:24:07.440 [DEBUG] [Thread-188452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:24:07.440 [DEBUG] [Thread-188452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:24:07.440 [DEBUG] [Thread-188452] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:24:07.440 [DEBUG] [Thread-188452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:24:07.441 [DEBUG] [Thread-188452] [transport.py] [_log()] Compression: none
2026-02-14T16:24:07.441 [DEBUG] [Thread-188452] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:24:07.502 [DEBUG] [Thread-188452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:24:07.503 [DEBUG] [Thread-188452] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:24:07.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:24:07.504 [DEBUG] [Thread-188452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:24:07.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:24:07.558 [DEBUG] [Thread-188452] [transport.py] [_log()] userauth is OK
2026-02-14T16:24:07.558 [DEBUG] [Thread-188452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:24:07.558 [DEBUG] [Thread-188452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:24:07.558 [DEBUG] [Thread-188452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:24:07.558 [DEBUG] [Thread-188452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:24:07.577 [INFO] [Thread-188452] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:24:07.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-14T16:24:07.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:24:08.389 [DEBUG] [Thread-188452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:24:08.389 [DEBUG] [Thread-188452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:24:08.437 [DEBUG] [Thread-188452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:24:08.437 [DEBUG] [Thread-188452] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:24:08.447 [DEBUG] [Thread-188452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:24:08.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:24:08.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-14T16:24:08.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:24:08.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:24:08.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:24:08.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:24:08.482 [DEBUG] [Thread-188452] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:24:21.873 [DEBUG] [Thread-188454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:24:31.178 [DEBUG] [Thread-188455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:24:36.924 [DEBUG] [Thread-188456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:24:38.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:24:38.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:24:38.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:24:40.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 24, 7), 16.26, 33.54, 0.0, 28.83, 17.5, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:24:40.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:24:07
2026-02-14T16:24:40.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:24:40.806 [DEBUG] [Thread-188457] [transport.py] [_log()] starting thread (client mode): 0xa575a6e0
2026-02-14T16:24:40.806 [DEBUG] [Thread-188457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:24:40.827 [DEBUG] [Thread-188457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:24:40.827 [INFO] [Thread-188457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:24:40.830 [DEBUG] [Thread-188457] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:24:40.830 [DEBUG] [Thread-188457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:24:40.830 [DEBUG] [Thread-188457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:24:40.830 [DEBUG] [Thread-188457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:24:40.831 [DEBUG] [Thread-188457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:24:40.831 [DEBUG] [Thread-188457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:24:40.831 [DEBUG] [Thread-188457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:24:40.831 [DEBUG] [Thread-188457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:24:40.831 [DEBUG] [Thread-188457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:24:40.831 [DEBUG] [Thread-188457] [transport.py] [_log()] client lang: <none>
2026-02-14T16:24:40.831 [DEBUG] [Thread-188457] [transport.py] [_log()] server lang: <none>
2026-02-14T16:24:40.831 [DEBUG] [Thread-188457] [transport.py] [_log()] kex follows: False
2026-02-14T16:24:40.831 [DEBUG] [Thread-188457] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:24:40.831 [DEBUG] [Thread-188457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:24:40.831 [DEBUG] [Thread-188457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:24:40.831 [DEBUG] [Thread-188457] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:24:40.831 [DEBUG] [Thread-188457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:24:40.832 [DEBUG] [Thread-188457] [transport.py] [_log()] Compression: none
2026-02-14T16:24:40.832 [DEBUG] [Thread-188457] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:24:40.850 [DEBUG] [Thread-188457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:24:40.851 [DEBUG] [Thread-188457] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:24:40.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:24:40.853 [DEBUG] [Thread-188457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:24:40.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:24:40.855 [DEBUG] [Thread-188457] [transport.py] [_log()] userauth is OK
2026-02-14T16:24:40.855 [DEBUG] [Thread-188457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:24:40.855 [DEBUG] [Thread-188457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:24:40.855 [DEBUG] [Thread-188457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:24:40.855 [DEBUG] [Thread-188457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:24:40.879 [INFO] [Thread-188457] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:24:40.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:24:41.489 [DEBUG] [Thread-188457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:24:41.489 [DEBUG] [Thread-188457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:24:41.498 [DEBUG] [Thread-188457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:24:41.530 [DEBUG] [Thread-188457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:24:41.531 [DEBUG] [Thread-188457] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:24:41.534 [DEBUG] [Thread-188457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:24:41.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:24:41.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:24:41.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:24:41.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:24:41.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:24:41.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:24:41.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:24:41.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:24:41.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:24:41.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.599759 -999.00  +16.50  27.81     40   +3.10 1 1 1 1 1   888    0 13.29 -7.12 ----- 30.3 27.8 180.4 39.5 21.5 -30.5 20.4 -32.4 22.4 -26.6 23.2 -29.3
2026-02-14T16:24:41.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:24:41.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:24:41.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.599759
2026-02-14T16:24:41.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:24:41.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:24:41.556 [DEBUG] [Thread-188457] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:24:41.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:24:41.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:24:41.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:24:41.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:24:07', tmtdew=16.26, humidity=33.54, cloud=0.0, wind=28.83, temperature=17.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:23:39.178', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:24:41.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T16:24:41.653 [DEBUG] [Thread-188460] [transport.py] [_log()] starting thread (client mode): 0xa5758af0
2026-02-14T16:24:41.653 [DEBUG] [Thread-188460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:24:41.667 [DEBUG] [Thread-188460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:24:41.667 [INFO] [Thread-188460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:24:41.675 [DEBUG] [Thread-188460] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:24:41.675 [DEBUG] [Thread-188460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:24:41.675 [DEBUG] [Thread-188460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:24:41.675 [DEBUG] [Thread-188460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:24:41.675 [DEBUG] [Thread-188460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:24:41.675 [DEBUG] [Thread-188460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:24:41.675 [DEBUG] [Thread-188460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:24:41.675 [DEBUG] [Thread-188460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:24:41.675 [DEBUG] [Thread-188460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:24:41.675 [DEBUG] [Thread-188460] [transport.py] [_log()] client lang: <none>
2026-02-14T16:24:41.675 [DEBUG] [Thread-188460] [transport.py] [_log()] server lang: <none>
2026-02-14T16:24:41.675 [DEBUG] [Thread-188460] [transport.py] [_log()] kex follows: False
2026-02-14T16:24:41.675 [DEBUG] [Thread-188460] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:24:41.675 [DEBUG] [Thread-188460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:24:41.675 [DEBUG] [Thread-188460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:24:41.675 [DEBUG] [Thread-188460] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:24:41.675 [DEBUG] [Thread-188460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:24:41.675 [DEBUG] [Thread-188460] [transport.py] [_log()] Compression: none
2026-02-14T16:24:41.675 [DEBUG] [Thread-188460] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:24:41.736 [DEBUG] [Thread-188460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:24:41.736 [DEBUG] [Thread-188460] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:24:41.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:24:41.737 [DEBUG] [Thread-188460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:24:41.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:24:41.795 [DEBUG] [Thread-188460] [transport.py] [_log()] userauth is OK
2026-02-14T16:24:41.796 [DEBUG] [Thread-188460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:24:41.796 [DEBUG] [Thread-188460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:24:41.796 [DEBUG] [Thread-188460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:24:41.796 [DEBUG] [Thread-188460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:24:41.815 [INFO] [Thread-188460] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:24:41.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-14T16:24:41.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:24:42.609 [DEBUG] [Thread-188460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:24:42.609 [DEBUG] [Thread-188460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:24:42.656 [DEBUG] [Thread-188460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:24:42.657 [DEBUG] [Thread-188460] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:24:42.666 [DEBUG] [Thread-188460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:24:42.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:24:42.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:24:42.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:24:42.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:24:42.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:24:42.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:24:42.703 [DEBUG] [Thread-188460] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:24:51.960 [DEBUG] [Thread-188462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:24:55.122 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:24:55.123 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:25:07.013 [DEBUG] [Thread-188463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:25:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:25:12.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:25:12.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-14T16:25:14.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 24, 43), 16.48, 33.09, 0.0, 41.87, 17.53, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:25:14.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:24:43
2026-02-14T16:25:14.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:25:15.081 [DEBUG] [Thread-188464] [transport.py] [_log()] starting thread (client mode): 0xa2dedb10
2026-02-14T16:25:15.081 [DEBUG] [Thread-188464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:25:15.095 [DEBUG] [Thread-188464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:25:15.095 [INFO] [Thread-188464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:25:15.096 [DEBUG] [Thread-188464] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:25:15.096 [DEBUG] [Thread-188464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:25:15.096 [DEBUG] [Thread-188464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:25:15.096 [DEBUG] [Thread-188464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:25:15.097 [DEBUG] [Thread-188464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:25:15.097 [DEBUG] [Thread-188464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:25:15.097 [DEBUG] [Thread-188464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:25:15.097 [DEBUG] [Thread-188464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:25:15.097 [DEBUG] [Thread-188464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:25:15.097 [DEBUG] [Thread-188464] [transport.py] [_log()] client lang: <none>
2026-02-14T16:25:15.097 [DEBUG] [Thread-188464] [transport.py] [_log()] server lang: <none>
2026-02-14T16:25:15.097 [DEBUG] [Thread-188464] [transport.py] [_log()] kex follows: False
2026-02-14T16:25:15.097 [DEBUG] [Thread-188464] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:25:15.097 [DEBUG] [Thread-188464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:25:15.097 [DEBUG] [Thread-188464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:25:15.097 [DEBUG] [Thread-188464] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:25:15.097 [DEBUG] [Thread-188464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:25:15.097 [DEBUG] [Thread-188464] [transport.py] [_log()] Compression: none
2026-02-14T16:25:15.097 [DEBUG] [Thread-188464] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:25:15.108 [DEBUG] [Thread-188464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:25:15.108 [DEBUG] [Thread-188464] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:25:15.108 [DEBUG] [Thread-188464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:25:15.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:25:15.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:25:15.109 [DEBUG] [Thread-188464] [transport.py] [_log()] userauth is OK
2026-02-14T16:25:15.109 [DEBUG] [Thread-188464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:25:15.109 [DEBUG] [Thread-188464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:25:15.109 [DEBUG] [Thread-188464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:25:15.109 [DEBUG] [Thread-188464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:25:15.123 [INFO] [Thread-188464] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:25:15.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:25:15.742 [DEBUG] [Thread-188464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:25:15.743 [DEBUG] [Thread-188464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:25:15.743 [DEBUG] [Thread-188464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:25:15.783 [DEBUG] [Thread-188464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:25:15.783 [DEBUG] [Thread-188464] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:25:15.785 [DEBUG] [Thread-188464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:25:15.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:25:15.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:25:15.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:25:15.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:25:15.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:25:15.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:25:15.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:25:15.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:25:15.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:25:15.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.600801 -999.00  +16.70  26.78     40   +3.20 1 1 1 1 1   888    0 13.22 -9.22 ----- 23.9 26.8 150.0 37.1 21.3 -27.7 20.8 -26.9 22.4 -25.5 23.2 -28.3
2026-02-14T16:25:15.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:25:15.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:25:15.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.600801
2026-02-14T16:25:15.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:25:15.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:25:15.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:25:15.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:25:15.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:25:15.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:24:43', tmtdew=16.48, humidity=33.09, cloud=0.0, wind=41.87, temperature=17.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:25:09.206', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:25:15.808 [DEBUG] [Thread-188464] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:25:15.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-14T16:25:22.048 [DEBUG] [Thread-188467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:25:31.223 [DEBUG] [Thread-188468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:25:37.100 [DEBUG] [Thread-188469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:25:52.136 [DEBUG] [Thread-188470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:25:55.265 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:25:55.266 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:26:07.171 [DEBUG] [Thread-188471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:26:22.208 [DEBUG] [Thread-188472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:26:31.267 [DEBUG] [Thread-188473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:26:37.242 [DEBUG] [Thread-188474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:26:52.278 [DEBUG] [Thread-188475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:26:55.415 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:26:55.416 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:27:07.318 [DEBUG] [Thread-188476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:27:22.356 [DEBUG] [Thread-188477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:27:27.927 [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-14T16:27:31.303 [DEBUG] [Thread-188478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:27:37.394 [DEBUG] [Thread-188479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:27:52.430 [DEBUG] [Thread-188480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:27:55.558 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:27:55.559 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:27:57.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:27:57.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:27:57.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-14T16:27:59.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 27, 39), 17.08, 31.67, 0.0, 41.1, 18.07, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:27:59.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:27:39
2026-02-14T16:28:00.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:28:00.325 [DEBUG] [Thread-188481] [transport.py] [_log()] starting thread (client mode): 0xa575b910
2026-02-14T16:28:00.325 [DEBUG] [Thread-188481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:28:00.344 [DEBUG] [Thread-188481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:28:00.344 [INFO] [Thread-188481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:28:00.347 [DEBUG] [Thread-188481] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:28:00.347 [DEBUG] [Thread-188481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:28:00.348 [DEBUG] [Thread-188481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:28:00.348 [DEBUG] [Thread-188481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:28:00.348 [DEBUG] [Thread-188481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:28:00.348 [DEBUG] [Thread-188481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:28:00.348 [DEBUG] [Thread-188481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:28:00.348 [DEBUG] [Thread-188481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:28:00.348 [DEBUG] [Thread-188481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:28:00.348 [DEBUG] [Thread-188481] [transport.py] [_log()] client lang: <none>
2026-02-14T16:28:00.348 [DEBUG] [Thread-188481] [transport.py] [_log()] server lang: <none>
2026-02-14T16:28:00.348 [DEBUG] [Thread-188481] [transport.py] [_log()] kex follows: False
2026-02-14T16:28:00.348 [DEBUG] [Thread-188481] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:28:00.348 [DEBUG] [Thread-188481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:28:00.348 [DEBUG] [Thread-188481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:28:00.348 [DEBUG] [Thread-188481] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:28:00.348 [DEBUG] [Thread-188481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:28:00.349 [DEBUG] [Thread-188481] [transport.py] [_log()] Compression: none
2026-02-14T16:28:00.349 [DEBUG] [Thread-188481] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:28:00.367 [DEBUG] [Thread-188481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:28:00.367 [DEBUG] [Thread-188481] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:28:00.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:28:00.368 [DEBUG] [Thread-188481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:28:00.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:28:00.370 [DEBUG] [Thread-188481] [transport.py] [_log()] userauth is OK
2026-02-14T16:28:00.370 [DEBUG] [Thread-188481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:28:00.370 [DEBUG] [Thread-188481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:28:00.370 [DEBUG] [Thread-188481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:28:00.371 [DEBUG] [Thread-188481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:28:00.406 [INFO] [Thread-188481] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:28:00.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:28:00.996 [DEBUG] [Thread-188481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:28:00.996 [DEBUG] [Thread-188481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:28:00.996 [DEBUG] [Thread-188481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:28:01.037 [DEBUG] [Thread-188481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:28:01.037 [DEBUG] [Thread-188481] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:28:01.041 [DEBUG] [Thread-188481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:28:01.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:28:01.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:28:01.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:28:01.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:28:01.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:28:01.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:28:01.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:28:01.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:28:01.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:28:01.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.602190 -999.00  +17.00  36.51     40   +3.40 1 1 2 1 1   888    0 13.03 -10.92 ----- 32.9 36.5 141.0 44.4 21.4 -27.4 20.9 -26.8 22.4 -26.7 23.1 -28.0
2026-02-14T16:28:01.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:28:01.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:28:01.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.602190
2026-02-14T16:28:01.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:28:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:28:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:28:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:28:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:28:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:27:39', tmtdew=17.08, humidity=31.67, cloud=0.0, wind=41.1, temperature=18.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:27:09.216', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:28:01.068 [DEBUG] [Thread-188481] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:28:01.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-14T16:28:01.162 [DEBUG] [Thread-188484] [transport.py] [_log()] starting thread (client mode): 0xa2ded6c0
2026-02-14T16:28:01.162 [DEBUG] [Thread-188484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:28:01.177 [DEBUG] [Thread-188484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:28:01.178 [INFO] [Thread-188484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:28:01.185 [DEBUG] [Thread-188484] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:28:01.185 [DEBUG] [Thread-188484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:28:01.185 [DEBUG] [Thread-188484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:28:01.185 [DEBUG] [Thread-188484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:28:01.185 [DEBUG] [Thread-188484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:28:01.186 [DEBUG] [Thread-188484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:28:01.186 [DEBUG] [Thread-188484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:28:01.186 [DEBUG] [Thread-188484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:28:01.186 [DEBUG] [Thread-188484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:28:01.186 [DEBUG] [Thread-188484] [transport.py] [_log()] client lang: <none>
2026-02-14T16:28:01.186 [DEBUG] [Thread-188484] [transport.py] [_log()] server lang: <none>
2026-02-14T16:28:01.186 [DEBUG] [Thread-188484] [transport.py] [_log()] kex follows: False
2026-02-14T16:28:01.186 [DEBUG] [Thread-188484] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:28:01.186 [DEBUG] [Thread-188484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:28:01.187 [DEBUG] [Thread-188484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:28:01.187 [DEBUG] [Thread-188484] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:28:01.187 [DEBUG] [Thread-188484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:28:01.187 [DEBUG] [Thread-188484] [transport.py] [_log()] Compression: none
2026-02-14T16:28:01.187 [DEBUG] [Thread-188484] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:28:01.243 [DEBUG] [Thread-188484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:28:01.244 [DEBUG] [Thread-188484] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:28:01.245 [DEBUG] [Thread-188484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:28:01.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:28:01.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:28:01.299 [DEBUG] [Thread-188484] [transport.py] [_log()] userauth is OK
2026-02-14T16:28:01.299 [DEBUG] [Thread-188484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:28:01.300 [DEBUG] [Thread-188484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:28:01.300 [DEBUG] [Thread-188484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:28:01.300 [DEBUG] [Thread-188484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:28:01.320 [INFO] [Thread-188484] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:28:01.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-14T16:28:01.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:28:02.149 [DEBUG] [Thread-188484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:28:02.149 [DEBUG] [Thread-188484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:28:02.197 [DEBUG] [Thread-188484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:28:02.197 [DEBUG] [Thread-188484] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:28:02.206 [DEBUG] [Thread-188484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:28:02.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:28:02.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-14T16:28:02.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-14T16:28:02.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:28:02.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:28:02.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:28:02.240 [DEBUG] [Thread-188484] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:28:07.464 [DEBUG] [Thread-188486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:28:22.514 [DEBUG] [Thread-188487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:28:31.336 [DEBUG] [Thread-188488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:28:32.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:28:32.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:28:32.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-14T16:28:34.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 28, 14), 16.02, 33.85, 0.0, 39.24, 17.32, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:28:34.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:28:14
2026-02-14T16:28:34.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:28:34.622 [DEBUG] [Thread-188489] [transport.py] [_log()] starting thread (client mode): 0xa2d21810
2026-02-14T16:28:34.622 [DEBUG] [Thread-188489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:28:34.637 [DEBUG] [Thread-188489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:28:34.637 [INFO] [Thread-188489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:28:34.638 [DEBUG] [Thread-188489] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:28:34.638 [DEBUG] [Thread-188489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:28:34.638 [DEBUG] [Thread-188489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:28:34.638 [DEBUG] [Thread-188489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:28:34.638 [DEBUG] [Thread-188489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:28:34.638 [DEBUG] [Thread-188489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:28:34.638 [DEBUG] [Thread-188489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:28:34.638 [DEBUG] [Thread-188489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:28:34.638 [DEBUG] [Thread-188489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:28:34.638 [DEBUG] [Thread-188489] [transport.py] [_log()] client lang: <none>
2026-02-14T16:28:34.638 [DEBUG] [Thread-188489] [transport.py] [_log()] server lang: <none>
2026-02-14T16:28:34.638 [DEBUG] [Thread-188489] [transport.py] [_log()] kex follows: False
2026-02-14T16:28:34.638 [DEBUG] [Thread-188489] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:28:34.638 [DEBUG] [Thread-188489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:28:34.639 [DEBUG] [Thread-188489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:28:34.639 [DEBUG] [Thread-188489] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:28:34.639 [DEBUG] [Thread-188489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:28:34.639 [DEBUG] [Thread-188489] [transport.py] [_log()] Compression: none
2026-02-14T16:28:34.639 [DEBUG] [Thread-188489] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:28:34.648 [DEBUG] [Thread-188489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:28:34.648 [DEBUG] [Thread-188489] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:28:34.648 [DEBUG] [Thread-188489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:28:34.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:28:34.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:28:34.652 [DEBUG] [Thread-188489] [transport.py] [_log()] userauth is OK
2026-02-14T16:28:34.652 [DEBUG] [Thread-188489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:28:34.652 [DEBUG] [Thread-188489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:28:34.652 [DEBUG] [Thread-188489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:28:34.652 [DEBUG] [Thread-188489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:28:34.664 [INFO] [Thread-188489] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:28:34.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:28:35.237 [DEBUG] [Thread-188489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:28:35.237 [DEBUG] [Thread-188489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:28:35.237 [DEBUG] [Thread-188489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:28:35.278 [DEBUG] [Thread-188489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:28:35.278 [DEBUG] [Thread-188489] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:28:35.281 [DEBUG] [Thread-188489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:28:35.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:28:35.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:28:35.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:28:35.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:28:35.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:28:35.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:28:35.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:28:35.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:28:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:28:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.602884 -999.00  +16.70  32.03     41   +3.50 1 1 2 1 1   888    0 13.02 -13.01 ----- 34.5 32.0 146.6 45.5 21.2 -28.4 20.9 -27.9 22.2 -27.7 23.0 -29.5
2026-02-14T16:28:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:28:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:28:35.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.602884
2026-02-14T16:28:35.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:28:35.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:28:35.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:28:35.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:28:35.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:28:35.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:28:14', tmtdew=16.02, humidity=33.85, cloud=0.0, wind=39.24, temperature=17.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:28:09.178', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:28:35.301 [DEBUG] [Thread-188489] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:28:35.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T16:28:35.408 [DEBUG] [Thread-188492] [transport.py] [_log()] starting thread (client mode): 0xa5758520
2026-02-14T16:28:35.409 [DEBUG] [Thread-188492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:28:35.423 [DEBUG] [Thread-188492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:28:35.424 [INFO] [Thread-188492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:28:35.431 [DEBUG] [Thread-188492] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:28:35.432 [DEBUG] [Thread-188492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:28:35.432 [DEBUG] [Thread-188492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:28:35.432 [DEBUG] [Thread-188492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:28:35.432 [DEBUG] [Thread-188492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:28:35.432 [DEBUG] [Thread-188492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:28:35.432 [DEBUG] [Thread-188492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:28:35.433 [DEBUG] [Thread-188492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:28:35.433 [DEBUG] [Thread-188492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:28:35.433 [DEBUG] [Thread-188492] [transport.py] [_log()] client lang: <none>
2026-02-14T16:28:35.433 [DEBUG] [Thread-188492] [transport.py] [_log()] server lang: <none>
2026-02-14T16:28:35.433 [DEBUG] [Thread-188492] [transport.py] [_log()] kex follows: False
2026-02-14T16:28:35.433 [DEBUG] [Thread-188492] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:28:35.433 [DEBUG] [Thread-188492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:28:35.433 [DEBUG] [Thread-188492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:28:35.434 [DEBUG] [Thread-188492] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:28:35.434 [DEBUG] [Thread-188492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:28:35.434 [DEBUG] [Thread-188492] [transport.py] [_log()] Compression: none
2026-02-14T16:28:35.434 [DEBUG] [Thread-188492] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:28:35.493 [DEBUG] [Thread-188492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:28:35.494 [DEBUG] [Thread-188492] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:28:35.494 [DEBUG] [Thread-188492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:28:35.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:28:35.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:28:35.549 [DEBUG] [Thread-188492] [transport.py] [_log()] userauth is OK
2026-02-14T16:28:35.549 [DEBUG] [Thread-188492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:28:35.549 [DEBUG] [Thread-188492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:28:35.550 [DEBUG] [Thread-188492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:28:35.550 [DEBUG] [Thread-188492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:28:35.568 [INFO] [Thread-188492] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:28:35.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:28:35.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:28:36.384 [DEBUG] [Thread-188492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:28:36.384 [DEBUG] [Thread-188492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:28:36.432 [DEBUG] [Thread-188492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:28:36.432 [DEBUG] [Thread-188492] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:28:36.441 [DEBUG] [Thread-188492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:28:36.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:28:36.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-14T16:28:36.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-14T16:28:36.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:28:36.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:28:36.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:28:36.479 [DEBUG] [Thread-188492] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:28:37.554 [DEBUG] [Thread-188494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:28:52.606 [DEBUG] [Thread-188495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:28:55.698 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:28:55.699 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:29:06.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:29:06.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:29:06.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:29:07.644 [DEBUG] [Thread-188496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:29:08.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 28, 49), 15.6, 34.9, 0.0, 45.58, 17.0, 0, 0, 0, 2, 1, 0),)
2026-02-14T16:29:08.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:28:49
2026-02-14T16:29:09.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:29:09.173 [DEBUG] [Thread-188497] [transport.py] [_log()] starting thread (client mode): 0xa2d20730
2026-02-14T16:29:09.174 [DEBUG] [Thread-188497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:29:09.194 [DEBUG] [Thread-188497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:29:09.195 [INFO] [Thread-188497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:29:09.197 [DEBUG] [Thread-188497] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:29:09.197 [DEBUG] [Thread-188497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:29:09.197 [DEBUG] [Thread-188497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:29:09.197 [DEBUG] [Thread-188497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:29:09.197 [DEBUG] [Thread-188497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:29:09.197 [DEBUG] [Thread-188497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:29:09.197 [DEBUG] [Thread-188497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:29:09.197 [DEBUG] [Thread-188497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:29:09.197 [DEBUG] [Thread-188497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:29:09.197 [DEBUG] [Thread-188497] [transport.py] [_log()] client lang: <none>
2026-02-14T16:29:09.198 [DEBUG] [Thread-188497] [transport.py] [_log()] server lang: <none>
2026-02-14T16:29:09.198 [DEBUG] [Thread-188497] [transport.py] [_log()] kex follows: False
2026-02-14T16:29:09.198 [DEBUG] [Thread-188497] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:29:09.198 [DEBUG] [Thread-188497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:29:09.198 [DEBUG] [Thread-188497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:29:09.198 [DEBUG] [Thread-188497] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:29:09.198 [DEBUG] [Thread-188497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:29:09.198 [DEBUG] [Thread-188497] [transport.py] [_log()] Compression: none
2026-02-14T16:29:09.198 [DEBUG] [Thread-188497] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:29:09.215 [DEBUG] [Thread-188497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:29:09.215 [DEBUG] [Thread-188497] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:29:09.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:29:09.216 [DEBUG] [Thread-188497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:29:09.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:29:09.218 [DEBUG] [Thread-188497] [transport.py] [_log()] userauth is OK
2026-02-14T16:29:09.219 [DEBUG] [Thread-188497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:29:09.219 [DEBUG] [Thread-188497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:29:09.219 [DEBUG] [Thread-188497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:29:09.219 [DEBUG] [Thread-188497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:29:09.243 [INFO] [Thread-188497] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:29:09.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:29:09.817 [DEBUG] [Thread-188497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:29:09.817 [DEBUG] [Thread-188497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:29:09.818 [DEBUG] [Thread-188497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:29:09.858 [DEBUG] [Thread-188497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:29:09.859 [DEBUG] [Thread-188497] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:29:09.862 [DEBUG] [Thread-188497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:29:09.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:29:09.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:29:09.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:29:09.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:29:09.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:29:09.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:29:09.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:29:09.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:29:09.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:29:09.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.603231 -999.00  +16.50  36.42     41   +3.30 1 1 2 1 1   888    0 13.23 -14.57 ----- 37.5 36.4 162.8 46.0 21.1 -29.0 20.7 -28.8 22.1 -26.9 22.9 -28.4
2026-02-14T16:29:09.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:29:09.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:29:09.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.603231
2026-02-14T16:29:09.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:29:09.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:29:09.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:29:09.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:29:09.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:29:09.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:28:49', tmtdew=15.6, humidity=34.9, cloud=0.0, wind=45.58, temperature=17.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:28:39.158', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:29:09.891 [DEBUG] [Thread-188497] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:29:09.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-14T16:29:09.988 [DEBUG] [Thread-188500] [transport.py] [_log()] starting thread (client mode): 0xa57b3730
2026-02-14T16:29:09.988 [DEBUG] [Thread-188500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:29:10.003 [DEBUG] [Thread-188500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:29:10.003 [INFO] [Thread-188500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:29:10.010 [DEBUG] [Thread-188500] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:29:10.011 [DEBUG] [Thread-188500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:29:10.011 [DEBUG] [Thread-188500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:29:10.011 [DEBUG] [Thread-188500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:29:10.011 [DEBUG] [Thread-188500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:29:10.011 [DEBUG] [Thread-188500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:29:10.011 [DEBUG] [Thread-188500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:29:10.011 [DEBUG] [Thread-188500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:29:10.011 [DEBUG] [Thread-188500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:29:10.011 [DEBUG] [Thread-188500] [transport.py] [_log()] client lang: <none>
2026-02-14T16:29:10.011 [DEBUG] [Thread-188500] [transport.py] [_log()] server lang: <none>
2026-02-14T16:29:10.011 [DEBUG] [Thread-188500] [transport.py] [_log()] kex follows: False
2026-02-14T16:29:10.011 [DEBUG] [Thread-188500] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:29:10.011 [DEBUG] [Thread-188500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:29:10.011 [DEBUG] [Thread-188500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:29:10.012 [DEBUG] [Thread-188500] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:29:10.012 [DEBUG] [Thread-188500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:29:10.012 [DEBUG] [Thread-188500] [transport.py] [_log()] Compression: none
2026-02-14T16:29:10.012 [DEBUG] [Thread-188500] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:29:10.070 [DEBUG] [Thread-188500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:29:10.071 [DEBUG] [Thread-188500] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:29:10.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:29:10.072 [DEBUG] [Thread-188500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:29:10.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:29:10.126 [DEBUG] [Thread-188500] [transport.py] [_log()] userauth is OK
2026-02-14T16:29:10.126 [DEBUG] [Thread-188500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:29:10.126 [DEBUG] [Thread-188500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:29:10.126 [DEBUG] [Thread-188500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:29:10.127 [DEBUG] [Thread-188500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:29:10.145 [INFO] [Thread-188500] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:29:10.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-14T16:29:10.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:29:10.979 [DEBUG] [Thread-188500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:29:10.979 [DEBUG] [Thread-188500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:29:11.027 [DEBUG] [Thread-188500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:29:11.028 [DEBUG] [Thread-188500] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:29:11.037 [DEBUG] [Thread-188500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:29:11.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:29:11.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-14T16:29:11.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-14T16:29:11.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:29:11.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:29:11.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:29:11.073 [DEBUG] [Thread-188500] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:29:22.682 [DEBUG] [Thread-188502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:29:31.382 [DEBUG] [Thread-188503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:29:37.736 [DEBUG] [Thread-188504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:29:41.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:29:41.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:29:41.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:29:42.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 29, 24), 15.55, 35.0, 0.0, 41.61, 16.92, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:29:42.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:29:24
2026-02-14T16:29:43.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:29:43.402 [DEBUG] [Thread-188505] [transport.py] [_log()] starting thread (client mode): 0xa2db7fd0
2026-02-14T16:29:43.402 [DEBUG] [Thread-188505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:29:43.423 [DEBUG] [Thread-188505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:29:43.423 [INFO] [Thread-188505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:29:43.426 [DEBUG] [Thread-188505] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:29:43.426 [DEBUG] [Thread-188505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:29:43.426 [DEBUG] [Thread-188505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:29:43.426 [DEBUG] [Thread-188505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:29:43.426 [DEBUG] [Thread-188505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:29:43.426 [DEBUG] [Thread-188505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:29:43.426 [DEBUG] [Thread-188505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:29:43.426 [DEBUG] [Thread-188505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:29:43.426 [DEBUG] [Thread-188505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:29:43.426 [DEBUG] [Thread-188505] [transport.py] [_log()] client lang: <none>
2026-02-14T16:29:43.426 [DEBUG] [Thread-188505] [transport.py] [_log()] server lang: <none>
2026-02-14T16:29:43.426 [DEBUG] [Thread-188505] [transport.py] [_log()] kex follows: False
2026-02-14T16:29:43.426 [DEBUG] [Thread-188505] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:29:43.426 [DEBUG] [Thread-188505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:29:43.426 [DEBUG] [Thread-188505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:29:43.426 [DEBUG] [Thread-188505] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:29:43.426 [DEBUG] [Thread-188505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:29:43.426 [DEBUG] [Thread-188505] [transport.py] [_log()] Compression: none
2026-02-14T16:29:43.426 [DEBUG] [Thread-188505] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:29:43.445 [DEBUG] [Thread-188505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:29:43.446 [DEBUG] [Thread-188505] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:29:43.446 [DEBUG] [Thread-188505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:29:43.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:29:43.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:29:43.448 [DEBUG] [Thread-188505] [transport.py] [_log()] userauth is OK
2026-02-14T16:29:43.449 [DEBUG] [Thread-188505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:29:43.449 [DEBUG] [Thread-188505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:29:43.449 [DEBUG] [Thread-188505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:29:43.449 [DEBUG] [Thread-188505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:29:43.472 [INFO] [Thread-188505] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:29:43.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:29:44.139 [DEBUG] [Thread-188505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:29:44.139 [DEBUG] [Thread-188505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:29:44.140 [DEBUG] [Thread-188505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:29:44.180 [DEBUG] [Thread-188505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:29:44.180 [DEBUG] [Thread-188505] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:29:44.183 [DEBUG] [Thread-188505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:29:44.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:29:44.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:29:44.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:29:44.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:29:44.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:29:44.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:29:44.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:29:44.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:29:44.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:29:44.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.603578 -999.00  +16.50  23.32     41   +3.50 1 1 1 1 1   888    0 13.19 -14.97 ----- 22.7 23.3 161.2 32.7 21.0 -28.2 20.7 -26.9 22.2 -25.6 23.0 -27.6
2026-02-14T16:29:44.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:29:44.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:29:44.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.603578
2026-02-14T16:29:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:29:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:29:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:29:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:29:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:29:44.210 [DEBUG] [Thread-188505] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:29:44.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:29:24', tmtdew=15.55, humidity=35.0, cloud=0.0, wind=41.61, temperature=16.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:29:09.139', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:29:44.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-14T16:29:44.316 [DEBUG] [Thread-188508] [transport.py] [_log()] starting thread (client mode): 0xa2db5510
2026-02-14T16:29:44.316 [DEBUG] [Thread-188508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:29:44.330 [DEBUG] [Thread-188508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:29:44.330 [INFO] [Thread-188508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:29:44.338 [DEBUG] [Thread-188508] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:29:44.338 [DEBUG] [Thread-188508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:29:44.338 [DEBUG] [Thread-188508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:29:44.338 [DEBUG] [Thread-188508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:29:44.338 [DEBUG] [Thread-188508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:29:44.338 [DEBUG] [Thread-188508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:29:44.338 [DEBUG] [Thread-188508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:29:44.338 [DEBUG] [Thread-188508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:29:44.338 [DEBUG] [Thread-188508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:29:44.338 [DEBUG] [Thread-188508] [transport.py] [_log()] client lang: <none>
2026-02-14T16:29:44.338 [DEBUG] [Thread-188508] [transport.py] [_log()] server lang: <none>
2026-02-14T16:29:44.338 [DEBUG] [Thread-188508] [transport.py] [_log()] kex follows: False
2026-02-14T16:29:44.338 [DEBUG] [Thread-188508] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:29:44.338 [DEBUG] [Thread-188508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:29:44.338 [DEBUG] [Thread-188508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:29:44.338 [DEBUG] [Thread-188508] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:29:44.338 [DEBUG] [Thread-188508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:29:44.338 [DEBUG] [Thread-188508] [transport.py] [_log()] Compression: none
2026-02-14T16:29:44.338 [DEBUG] [Thread-188508] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:29:44.395 [DEBUG] [Thread-188508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:29:44.395 [DEBUG] [Thread-188508] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:29:44.396 [DEBUG] [Thread-188508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:29:44.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:29:44.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:29:44.451 [DEBUG] [Thread-188508] [transport.py] [_log()] userauth is OK
2026-02-14T16:29:44.451 [DEBUG] [Thread-188508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:29:44.452 [DEBUG] [Thread-188508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:29:44.452 [DEBUG] [Thread-188508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:29:44.452 [DEBUG] [Thread-188508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:29:44.471 [INFO] [Thread-188508] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:29: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-14T16:29:44.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:29:45.273 [DEBUG] [Thread-188508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:29:45.273 [DEBUG] [Thread-188508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:29:45.321 [DEBUG] [Thread-188508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:29:45.321 [DEBUG] [Thread-188508] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:29:45.330 [DEBUG] [Thread-188508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:29:45.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:29:45.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:29:45.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-14T16:29:45.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:29:45.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:29:45.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:29:45.367 [DEBUG] [Thread-188508] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:29:52.775 [DEBUG] [Thread-188510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:29:55.839 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:29:55.841 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:30:07.834 [DEBUG] [Thread-188511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:30:15.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:30:15.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:30:15.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-14T16:30:17.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 29, 24), 15.55, 35.0, 0.0, 41.61, 16.92, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:30:17.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:29:24
2026-02-14T16:30:17.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:30:17.709 [DEBUG] [Thread-188512] [transport.py] [_log()] starting thread (client mode): 0xa81d61d0
2026-02-14T16:30:17.709 [DEBUG] [Thread-188512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:30:17.729 [DEBUG] [Thread-188512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:30:17.729 [INFO] [Thread-188512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:30:17.732 [DEBUG] [Thread-188512] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:30:17.732 [DEBUG] [Thread-188512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:30:17.732 [DEBUG] [Thread-188512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:30:17.732 [DEBUG] [Thread-188512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:30:17.732 [DEBUG] [Thread-188512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:30:17.732 [DEBUG] [Thread-188512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:30:17.733 [DEBUG] [Thread-188512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:30:17.733 [DEBUG] [Thread-188512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:30:17.733 [DEBUG] [Thread-188512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:30:17.733 [DEBUG] [Thread-188512] [transport.py] [_log()] client lang: <none>
2026-02-14T16:30:17.733 [DEBUG] [Thread-188512] [transport.py] [_log()] server lang: <none>
2026-02-14T16:30:17.733 [DEBUG] [Thread-188512] [transport.py] [_log()] kex follows: False
2026-02-14T16:30:17.733 [DEBUG] [Thread-188512] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:30:17.733 [DEBUG] [Thread-188512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:30:17.733 [DEBUG] [Thread-188512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:30:17.733 [DEBUG] [Thread-188512] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:30:17.733 [DEBUG] [Thread-188512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:30:17.733 [DEBUG] [Thread-188512] [transport.py] [_log()] Compression: none
2026-02-14T16:30:17.733 [DEBUG] [Thread-188512] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:30:17.749 [DEBUG] [Thread-188512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:30:17.750 [DEBUG] [Thread-188512] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:30:17.750 [DEBUG] [Thread-188512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:30:17.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:30:17.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:30:17.753 [DEBUG] [Thread-188512] [transport.py] [_log()] userauth is OK
2026-02-14T16:30:17.753 [DEBUG] [Thread-188512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:30:17.753 [DEBUG] [Thread-188512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:30:17.753 [DEBUG] [Thread-188512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:30:17.753 [DEBUG] [Thread-188512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:30:17.786 [INFO] [Thread-188512] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:30:17.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:30:18.423 [DEBUG] [Thread-188512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:30:18.424 [DEBUG] [Thread-188512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:30:18.424 [DEBUG] [Thread-188512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:30:18.464 [DEBUG] [Thread-188512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:30:18.465 [DEBUG] [Thread-188512] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:30:18.468 [DEBUG] [Thread-188512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:30:18.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:30:18.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:30:18.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:30:18.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:30:18.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:30:18.492 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:30:18.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:30:18.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:30:18.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:30:18.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.604272 -999.00  +16.50  35.84     41   +3.50 1 1 2 1 1   888    0 12.96 -16.85 ----- 31.7 35.8 173.6 39.3 21.2 -27.5 20.8 -26.5 22.2 -26.4 23.1 -27.8
2026-02-14T16:30:18.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:30:18.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:30:18.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.604272
2026-02-14T16:30:18.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:30:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:30:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:30:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:30:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:30:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:29:24', tmtdew=15.55, humidity=35.0, cloud=0.0, wind=41.61, temperature=16.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:30:09.101', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:30:18.495 [DEBUG] [Thread-188512] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:30:18.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-14T16:30:18.592 [DEBUG] [Thread-188515] [transport.py] [_log()] starting thread (client mode): 0xa575bf10
2026-02-14T16:30:18.592 [DEBUG] [Thread-188515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:30:18.608 [DEBUG] [Thread-188515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:30:18.608 [INFO] [Thread-188515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:30:18.615 [DEBUG] [Thread-188515] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:30:18.616 [DEBUG] [Thread-188515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:30:18.616 [DEBUG] [Thread-188515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:30:18.616 [DEBUG] [Thread-188515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:30:18.616 [DEBUG] [Thread-188515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:30:18.616 [DEBUG] [Thread-188515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:30:18.616 [DEBUG] [Thread-188515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:30:18.616 [DEBUG] [Thread-188515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:30:18.616 [DEBUG] [Thread-188515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:30:18.616 [DEBUG] [Thread-188515] [transport.py] [_log()] client lang: <none>
2026-02-14T16:30:18.616 [DEBUG] [Thread-188515] [transport.py] [_log()] server lang: <none>
2026-02-14T16:30:18.616 [DEBUG] [Thread-188515] [transport.py] [_log()] kex follows: False
2026-02-14T16:30:18.616 [DEBUG] [Thread-188515] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:30:18.617 [DEBUG] [Thread-188515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:30:18.617 [DEBUG] [Thread-188515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:30:18.617 [DEBUG] [Thread-188515] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:30:18.617 [DEBUG] [Thread-188515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:30:18.617 [DEBUG] [Thread-188515] [transport.py] [_log()] Compression: none
2026-02-14T16:30:18.617 [DEBUG] [Thread-188515] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:30:18.676 [DEBUG] [Thread-188515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:30:18.677 [DEBUG] [Thread-188515] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:30:18.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:30:18.678 [DEBUG] [Thread-188515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:30:18.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:30:18.732 [DEBUG] [Thread-188515] [transport.py] [_log()] userauth is OK
2026-02-14T16:30:18.733 [DEBUG] [Thread-188515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:30:18.733 [DEBUG] [Thread-188515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:30:18.733 [DEBUG] [Thread-188515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:30:18.733 [DEBUG] [Thread-188515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:30:18.751 [INFO] [Thread-188515] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:30:18.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:30:18.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:30:19.560 [DEBUG] [Thread-188515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:30:19.560 [DEBUG] [Thread-188515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:30:19.607 [DEBUG] [Thread-188515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:30:19.608 [DEBUG] [Thread-188515] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:30:19.617 [DEBUG] [Thread-188515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:30:19.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:30: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-14T16:30:19.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:30:19.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:30:19.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:30:19.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:30:19.654 [DEBUG] [Thread-188515] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:30:22.868 [DEBUG] [Thread-188517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:30:31.413 [DEBUG] [Thread-188518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:30:37.912 [DEBUG] [Thread-188519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:30:49.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:30:49.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:30:49.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-14T16:30:51.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 30, 35), 16.19, 33.69, 0.0, 33.66, 17.8, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:30:51.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:30:35
2026-02-14T16:30:51.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:30:52.006 [DEBUG] [Thread-188520] [transport.py] [_log()] starting thread (client mode): 0xa2dee6b0
2026-02-14T16:30:52.006 [DEBUG] [Thread-188520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:30:52.027 [DEBUG] [Thread-188520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:30:52.027 [INFO] [Thread-188520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:30:52.030 [DEBUG] [Thread-188520] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:30:52.031 [DEBUG] [Thread-188520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:30:52.031 [DEBUG] [Thread-188520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:30:52.031 [DEBUG] [Thread-188520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:30:52.031 [DEBUG] [Thread-188520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:30:52.031 [DEBUG] [Thread-188520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:30:52.031 [DEBUG] [Thread-188520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:30:52.031 [DEBUG] [Thread-188520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:30:52.031 [DEBUG] [Thread-188520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:30:52.031 [DEBUG] [Thread-188520] [transport.py] [_log()] client lang: <none>
2026-02-14T16:30:52.031 [DEBUG] [Thread-188520] [transport.py] [_log()] server lang: <none>
2026-02-14T16:30:52.031 [DEBUG] [Thread-188520] [transport.py] [_log()] kex follows: False
2026-02-14T16:30:52.031 [DEBUG] [Thread-188520] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:30:52.032 [DEBUG] [Thread-188520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:30:52.032 [DEBUG] [Thread-188520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:30:52.032 [DEBUG] [Thread-188520] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:30:52.032 [DEBUG] [Thread-188520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:30:52.032 [DEBUG] [Thread-188520] [transport.py] [_log()] Compression: none
2026-02-14T16:30:52.032 [DEBUG] [Thread-188520] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:30:52.049 [DEBUG] [Thread-188520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:30:52.049 [DEBUG] [Thread-188520] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:30:52.050 [DEBUG] [Thread-188520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:30:52.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:30:52.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:30:52.052 [DEBUG] [Thread-188520] [transport.py] [_log()] userauth is OK
2026-02-14T16:30:52.052 [DEBUG] [Thread-188520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:30:52.052 [DEBUG] [Thread-188520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:30:52.052 [DEBUG] [Thread-188520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:30:52.052 [DEBUG] [Thread-188520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:30:52.067 [INFO] [Thread-188520] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:30:52.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:30:52.691 [DEBUG] [Thread-188520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:30:52.691 [DEBUG] [Thread-188520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:30:52.691 [DEBUG] [Thread-188520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:30:52.732 [DEBUG] [Thread-188520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:30:52.732 [DEBUG] [Thread-188520] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:30:52.735 [DEBUG] [Thread-188520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:30:52.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:30:52.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:30:52.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:30:52.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:30:52.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:30:52.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:30:52.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:30:52.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:30:52.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:30:52.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.604620 -999.00  +16.60  24.40     41   +3.60 1 1 1 1 1   888    0 12.88 -18.96 ----- 30.3 24.4 170.6 34.0 21.1 -28.7 20.7 -26.1 22.2 -26.6 23.0 -28.1
2026-02-14T16:30:52.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:30:52.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:30:52.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.604620
2026-02-14T16:30:52.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:30:52.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:30:52.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:30:52.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:30:52.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:30:52.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:30:35', tmtdew=16.19, humidity=33.69, cloud=0.0, wind=33.66, temperature=17.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:30:39.168', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:30:52.764 [DEBUG] [Thread-188520] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:30:52.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T16:30:52.865 [DEBUG] [Thread-188523] [transport.py] [_log()] starting thread (client mode): 0xa2db6800
2026-02-14T16:30:52.865 [DEBUG] [Thread-188523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:30:52.879 [DEBUG] [Thread-188523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:30:52.879 [INFO] [Thread-188523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:30:52.887 [DEBUG] [Thread-188523] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:30:52.887 [DEBUG] [Thread-188523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:30:52.887 [DEBUG] [Thread-188523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:30:52.887 [DEBUG] [Thread-188523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:30:52.887 [DEBUG] [Thread-188523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:30:52.887 [DEBUG] [Thread-188523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:30:52.887 [DEBUG] [Thread-188523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:30:52.887 [DEBUG] [Thread-188523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:30:52.887 [DEBUG] [Thread-188523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:30:52.887 [DEBUG] [Thread-188523] [transport.py] [_log()] client lang: <none>
2026-02-14T16:30:52.888 [DEBUG] [Thread-188523] [transport.py] [_log()] server lang: <none>
2026-02-14T16:30:52.888 [DEBUG] [Thread-188523] [transport.py] [_log()] kex follows: False
2026-02-14T16:30:52.888 [DEBUG] [Thread-188523] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:30:52.888 [DEBUG] [Thread-188523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:30:52.888 [DEBUG] [Thread-188523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:30:52.888 [DEBUG] [Thread-188523] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:30:52.888 [DEBUG] [Thread-188523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:30:52.888 [DEBUG] [Thread-188523] [transport.py] [_log()] Compression: none
2026-02-14T16:30:52.888 [DEBUG] [Thread-188523] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:30:52.944 [DEBUG] [Thread-188523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:30:52.944 [DEBUG] [Thread-188523] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:30:52.945 [DEBUG] [Thread-188523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:30:52.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:30:52.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:30:52.947 [DEBUG] [Thread-188525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:30:53.000 [DEBUG] [Thread-188523] [transport.py] [_log()] userauth is OK
2026-02-14T16:30:53.001 [DEBUG] [Thread-188523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:30:53.001 [DEBUG] [Thread-188523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:30:53.001 [DEBUG] [Thread-188523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:30:53.001 [DEBUG] [Thread-188523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:30:53.023 [INFO] [Thread-188523] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:30:53.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:30:53.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:30:53.836 [DEBUG] [Thread-188523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:30:53.836 [DEBUG] [Thread-188523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:30:53.884 [DEBUG] [Thread-188523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:30:53.884 [DEBUG] [Thread-188523] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:30:53.897 [DEBUG] [Thread-188523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:30:53.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:30:53.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-14T16:30:53.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-14T16:30:53.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:30:53.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:30:53.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:30:53.931 [DEBUG] [Thread-188523] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:30:55.981 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:30:55.982 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:31:07.996 [DEBUG] [Thread-188526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:31:23.029 [DEBUG] [Thread-188527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:31:23.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:31:23.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:31:23.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-14T16:31:25.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 31, 10), 15.3, 35.74, 0.0, 40.1, 16.85, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:31:25.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:31:10
2026-02-14T16:31:26.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:31:26.242 [DEBUG] [Thread-188528] [transport.py] [_log()] starting thread (client mode): 0xa2db5e10
2026-02-14T16:31:26.243 [DEBUG] [Thread-188528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:31:26.263 [DEBUG] [Thread-188528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:31:26.264 [INFO] [Thread-188528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:31:26.267 [DEBUG] [Thread-188528] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:31:26.267 [DEBUG] [Thread-188528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:31:26.267 [DEBUG] [Thread-188528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:31:26.267 [DEBUG] [Thread-188528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:31:26.267 [DEBUG] [Thread-188528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:31:26.268 [DEBUG] [Thread-188528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:31:26.268 [DEBUG] [Thread-188528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:31:26.268 [DEBUG] [Thread-188528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:31:26.268 [DEBUG] [Thread-188528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:31:26.268 [DEBUG] [Thread-188528] [transport.py] [_log()] client lang: <none>
2026-02-14T16:31:26.268 [DEBUG] [Thread-188528] [transport.py] [_log()] server lang: <none>
2026-02-14T16:31:26.268 [DEBUG] [Thread-188528] [transport.py] [_log()] kex follows: False
2026-02-14T16:31:26.268 [DEBUG] [Thread-188528] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:31:26.268 [DEBUG] [Thread-188528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:31:26.268 [DEBUG] [Thread-188528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:31:26.268 [DEBUG] [Thread-188528] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:31:26.268 [DEBUG] [Thread-188528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:31:26.268 [DEBUG] [Thread-188528] [transport.py] [_log()] Compression: none
2026-02-14T16:31:26.268 [DEBUG] [Thread-188528] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:31:26.285 [DEBUG] [Thread-188528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:31:26.286 [DEBUG] [Thread-188528] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:31:26.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:31:26.287 [DEBUG] [Thread-188528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:31:26.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:31:26.289 [DEBUG] [Thread-188528] [transport.py] [_log()] userauth is OK
2026-02-14T16:31:26.289 [DEBUG] [Thread-188528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:31:26.289 [DEBUG] [Thread-188528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:31:26.289 [DEBUG] [Thread-188528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:31:26.289 [DEBUG] [Thread-188528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:31:26.308 [INFO] [Thread-188528] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:31:26.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:31:26.956 [DEBUG] [Thread-188528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:31:26.957 [DEBUG] [Thread-188528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:31:26.957 [DEBUG] [Thread-188528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:31:26.997 [DEBUG] [Thread-188528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:31:26.997 [DEBUG] [Thread-188528] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:31:27.001 [DEBUG] [Thread-188528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:31:27.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:31:27.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:31:27.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:31:27.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:31:27.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:31:27.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:31:27.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:31:27.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:31:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:31:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.604967 -999.00  +16.80  33.54     41   +3.50 1 1 2 1 1   888    0 12.99 -21.73 ----- 34.4 33.5 165.8 41.4 21.2 -27.1 20.7 -26.8 22.1 -27.3 23.0 -29.1
2026-02-14T16:31:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:31:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:31:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.604967
2026-02-14T16:31:27.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:31:27.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:31:27.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:31:27.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:31:27.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:31:27.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:31:10', tmtdew=15.3, humidity=35.74, cloud=0.0, wind=40.1, temperature=16.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:31:09.149', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:31:27.026 [DEBUG] [Thread-188528] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:31:27.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-14T16:31:27.124 [DEBUG] [Thread-188531] [transport.py] [_log()] starting thread (client mode): 0xa2db5420
2026-02-14T16:31:27.124 [DEBUG] [Thread-188531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:31:27.138 [DEBUG] [Thread-188531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:31:27.139 [INFO] [Thread-188531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:31:27.146 [DEBUG] [Thread-188531] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:31:27.146 [DEBUG] [Thread-188531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:31:27.146 [DEBUG] [Thread-188531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:31:27.146 [DEBUG] [Thread-188531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:31:27.146 [DEBUG] [Thread-188531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:31:27.146 [DEBUG] [Thread-188531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:31:27.146 [DEBUG] [Thread-188531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:31:27.147 [DEBUG] [Thread-188531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:31:27.147 [DEBUG] [Thread-188531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:31:27.147 [DEBUG] [Thread-188531] [transport.py] [_log()] client lang: <none>
2026-02-14T16:31:27.147 [DEBUG] [Thread-188531] [transport.py] [_log()] server lang: <none>
2026-02-14T16:31:27.147 [DEBUG] [Thread-188531] [transport.py] [_log()] kex follows: False
2026-02-14T16:31:27.147 [DEBUG] [Thread-188531] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:31:27.147 [DEBUG] [Thread-188531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:31:27.147 [DEBUG] [Thread-188531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:31:27.147 [DEBUG] [Thread-188531] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:31:27.147 [DEBUG] [Thread-188531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:31:27.147 [DEBUG] [Thread-188531] [transport.py] [_log()] Compression: none
2026-02-14T16:31:27.147 [DEBUG] [Thread-188531] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:31:27.206 [DEBUG] [Thread-188531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:31:27.207 [DEBUG] [Thread-188531] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:31:27.207 [DEBUG] [Thread-188531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:31:27.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:31:27.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:31:27.263 [DEBUG] [Thread-188531] [transport.py] [_log()] userauth is OK
2026-02-14T16:31:27.263 [DEBUG] [Thread-188531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:31:27.264 [DEBUG] [Thread-188531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:31:27.264 [DEBUG] [Thread-188531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:31:27.264 [DEBUG] [Thread-188531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:31:27.282 [INFO] [Thread-188531] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:31:27.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-14T16:31:27.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:31:28.104 [DEBUG] [Thread-188531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:31:28.104 [DEBUG] [Thread-188531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:31:28.152 [DEBUG] [Thread-188531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:31:28.152 [DEBUG] [Thread-188531] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:31:28.161 [DEBUG] [Thread-188531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:31:28.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:31: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')
2026-02-14T16:31:28.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-14T16:31:28.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:31:28.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:31:28.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:31:28.198 [DEBUG] [Thread-188531] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:31:31.459 [DEBUG] [Thread-188533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:31:38.069 [DEBUG] [Thread-188534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:31:53.127 [DEBUG] [Thread-188535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:31:56.122 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:31:56.123 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:31:58.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:31:58.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:31:58.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:32:00.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 31, 45), 15.49, 35.0, 0.0, 39.79, 16.83, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:32:00.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:31:45
2026-02-14T16:32:00.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:32:00.552 [DEBUG] [Thread-188536] [transport.py] [_log()] starting thread (client mode): 0xa57b1420
2026-02-14T16:32:00.552 [DEBUG] [Thread-188536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:32:00.570 [DEBUG] [Thread-188536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:32:00.570 [INFO] [Thread-188536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:32:00.573 [DEBUG] [Thread-188536] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:32:00.573 [DEBUG] [Thread-188536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:32:00.573 [DEBUG] [Thread-188536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:32:00.573 [DEBUG] [Thread-188536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:32:00.573 [DEBUG] [Thread-188536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:32:00.573 [DEBUG] [Thread-188536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:32:00.574 [DEBUG] [Thread-188536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:32:00.574 [DEBUG] [Thread-188536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:32:00.574 [DEBUG] [Thread-188536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:32:00.574 [DEBUG] [Thread-188536] [transport.py] [_log()] client lang: <none>
2026-02-14T16:32:00.574 [DEBUG] [Thread-188536] [transport.py] [_log()] server lang: <none>
2026-02-14T16:32:00.574 [DEBUG] [Thread-188536] [transport.py] [_log()] kex follows: False
2026-02-14T16:32:00.574 [DEBUG] [Thread-188536] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:32:00.574 [DEBUG] [Thread-188536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:32:00.574 [DEBUG] [Thread-188536] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:32:00.574 [DEBUG] [Thread-188536] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:32:00.574 [DEBUG] [Thread-188536] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:32:00.574 [DEBUG] [Thread-188536] [transport.py] [_log()] Compression: none
2026-02-14T16:32:00.574 [DEBUG] [Thread-188536] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:32:00.591 [DEBUG] [Thread-188536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:32:00.591 [DEBUG] [Thread-188536] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:32:00.592 [DEBUG] [Thread-188536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:32:00.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:32:00.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:32:00.594 [DEBUG] [Thread-188536] [transport.py] [_log()] userauth is OK
2026-02-14T16:32:00.594 [DEBUG] [Thread-188536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:32:00.594 [DEBUG] [Thread-188536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:32:00.594 [DEBUG] [Thread-188536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:32:00.595 [DEBUG] [Thread-188536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:32:00.619 [INFO] [Thread-188536] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:32:00.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:32:01.241 [DEBUG] [Thread-188536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:32:01.242 [DEBUG] [Thread-188536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:32:01.242 [DEBUG] [Thread-188536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:32:01.282 [DEBUG] [Thread-188536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:32:01.283 [DEBUG] [Thread-188536] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:32:01.286 [DEBUG] [Thread-188536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:32:01.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:32:01.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:32:01.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:32:01.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:32:01.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:32:01.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:32:01.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:32:01.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:32:01.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:32:01.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.605315 -999.00  +16.50  26.01     41   +3.40 1 1 1 1 1   888    0 12.81 -23.87 ----- 24.3 26.0 154.8 43.0 21.0 -29.1 20.6 -27.0 22.2 -25.0 23.0 -29.1
2026-02-14T16:32:01.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:32:01.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:32:01.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.605315
2026-02-14T16:32:01.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:32:01.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:32:01.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:32:01.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:32:01.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:32:01.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:31:45', tmtdew=15.49, humidity=35.0, cloud=0.0, wind=39.79, temperature=16.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:31:39.216', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:32:01.313 [DEBUG] [Thread-188536] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:32:01.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T16:32:01.408 [DEBUG] [Thread-188539] [transport.py] [_log()] starting thread (client mode): 0xa57b3250
2026-02-14T16:32:01.408 [DEBUG] [Thread-188539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:32:01.422 [DEBUG] [Thread-188539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:32:01.422 [INFO] [Thread-188539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:32:01.430 [DEBUG] [Thread-188539] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:32:01.430 [DEBUG] [Thread-188539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:32:01.430 [DEBUG] [Thread-188539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:32:01.430 [DEBUG] [Thread-188539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:32:01.430 [DEBUG] [Thread-188539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:32:01.430 [DEBUG] [Thread-188539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:32:01.430 [DEBUG] [Thread-188539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:32:01.430 [DEBUG] [Thread-188539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:32:01.430 [DEBUG] [Thread-188539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:32:01.430 [DEBUG] [Thread-188539] [transport.py] [_log()] client lang: <none>
2026-02-14T16:32:01.430 [DEBUG] [Thread-188539] [transport.py] [_log()] server lang: <none>
2026-02-14T16:32:01.430 [DEBUG] [Thread-188539] [transport.py] [_log()] kex follows: False
2026-02-14T16:32:01.431 [DEBUG] [Thread-188539] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:32:01.431 [DEBUG] [Thread-188539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:32:01.431 [DEBUG] [Thread-188539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:32:01.431 [DEBUG] [Thread-188539] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:32:01.431 [DEBUG] [Thread-188539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:32:01.431 [DEBUG] [Thread-188539] [transport.py] [_log()] Compression: none
2026-02-14T16:32:01.431 [DEBUG] [Thread-188539] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:32:01.487 [DEBUG] [Thread-188539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:32:01.487 [DEBUG] [Thread-188539] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:32:01.488 [DEBUG] [Thread-188539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:32:01.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:32:01.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:32:01.549 [DEBUG] [Thread-188539] [transport.py] [_log()] userauth is OK
2026-02-14T16:32:01.550 [DEBUG] [Thread-188539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:32:01.550 [DEBUG] [Thread-188539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:32:01.550 [DEBUG] [Thread-188539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:32:01.550 [DEBUG] [Thread-188539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:32:01.569 [INFO] [Thread-188539] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:32:01.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:32:01.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:32:02.393 [DEBUG] [Thread-188539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:32:02.394 [DEBUG] [Thread-188539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:32:02.441 [DEBUG] [Thread-188539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:32:02.442 [DEBUG] [Thread-188539] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:32:02.451 [DEBUG] [Thread-188539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:32:02.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:32:02.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-14T16:32:02.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:32:02.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:32:02.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:32:02.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:32:02.488 [DEBUG] [Thread-188539] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:32:08.167 [DEBUG] [Thread-188541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:32:23.214 [DEBUG] [Thread-188542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:32:31.491 [DEBUG] [Thread-188543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:32:32.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:32:32.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:32:32.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-14T16:32:34.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 32, 21), 15.36, 35.28, 0.0, 37.55, 16.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:32:34.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:32:21
2026-02-14T16:32:34.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:32:34.820 [DEBUG] [Thread-188544] [transport.py] [_log()] starting thread (client mode): 0xa2db4c70
2026-02-14T16:32:34.820 [DEBUG] [Thread-188544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:32:34.840 [DEBUG] [Thread-188544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:32:34.841 [INFO] [Thread-188544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:32:34.843 [DEBUG] [Thread-188544] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:32:34.843 [DEBUG] [Thread-188544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:32:34.843 [DEBUG] [Thread-188544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:32:34.843 [DEBUG] [Thread-188544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:32:34.844 [DEBUG] [Thread-188544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:32:34.844 [DEBUG] [Thread-188544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:32:34.844 [DEBUG] [Thread-188544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:32:34.844 [DEBUG] [Thread-188544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:32:34.844 [DEBUG] [Thread-188544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:32:34.844 [DEBUG] [Thread-188544] [transport.py] [_log()] client lang: <none>
2026-02-14T16:32:34.844 [DEBUG] [Thread-188544] [transport.py] [_log()] server lang: <none>
2026-02-14T16:32:34.844 [DEBUG] [Thread-188544] [transport.py] [_log()] kex follows: False
2026-02-14T16:32:34.844 [DEBUG] [Thread-188544] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:32:34.844 [DEBUG] [Thread-188544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:32:34.844 [DEBUG] [Thread-188544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:32:34.844 [DEBUG] [Thread-188544] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:32:34.844 [DEBUG] [Thread-188544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:32:34.844 [DEBUG] [Thread-188544] [transport.py] [_log()] Compression: none
2026-02-14T16:32:34.844 [DEBUG] [Thread-188544] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:32:34.862 [DEBUG] [Thread-188544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:32:34.862 [DEBUG] [Thread-188544] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:32:34.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:32:34.864 [DEBUG] [Thread-188544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:32:34.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:32:34.866 [DEBUG] [Thread-188544] [transport.py] [_log()] userauth is OK
2026-02-14T16:32:34.867 [DEBUG] [Thread-188544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:32:34.867 [DEBUG] [Thread-188544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:32:34.867 [DEBUG] [Thread-188544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:32:34.867 [DEBUG] [Thread-188544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:32:34.904 [INFO] [Thread-188544] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:32:34.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:32:35.532 [DEBUG] [Thread-188544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:32:35.532 [DEBUG] [Thread-188544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:32:35.532 [DEBUG] [Thread-188544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:32:35.573 [DEBUG] [Thread-188544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:32:35.574 [DEBUG] [Thread-188544] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:32:35.577 [DEBUG] [Thread-188544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:32:35.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:32:35.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:32:35.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:32:35.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:32:35.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:32:35.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:32:35.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:32:35.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:32:35.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:32:35.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.605662 -999.00  +16.60  23.93     41   +3.50 1 1 1 1 1   888    0 12.90 -25.76 ----- 20.4 23.9 151.6 37.0 21.2 -27.9 20.6 -28.2 22.2 -25.2 23.1 -26.8
2026-02-14T16:32:35.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:32:35.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:32:35.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.605662
2026-02-14T16:32:35.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:32:35.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:32:35.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:32:35.606 [DEBUG] [Thread-188544] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:32:35.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:32:35.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:32:35.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:32:21', tmtdew=15.36, humidity=35.28, cloud=0.0, wind=37.55, temperature=16.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:32:09.197', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:32:35.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-14T16:32:35.702 [DEBUG] [Thread-188547] [transport.py] [_log()] starting thread (client mode): 0xa2db45e0
2026-02-14T16:32:35.703 [DEBUG] [Thread-188547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:32:35.726 [DEBUG] [Thread-188547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:32:35.727 [INFO] [Thread-188547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:32:35.734 [DEBUG] [Thread-188547] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:32:35.734 [DEBUG] [Thread-188547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:32:35.734 [DEBUG] [Thread-188547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:32:35.735 [DEBUG] [Thread-188547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:32:35.735 [DEBUG] [Thread-188547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:32:35.735 [DEBUG] [Thread-188547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:32:35.735 [DEBUG] [Thread-188547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:32:35.735 [DEBUG] [Thread-188547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:32:35.735 [DEBUG] [Thread-188547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:32:35.735 [DEBUG] [Thread-188547] [transport.py] [_log()] client lang: <none>
2026-02-14T16:32:35.735 [DEBUG] [Thread-188547] [transport.py] [_log()] server lang: <none>
2026-02-14T16:32:35.735 [DEBUG] [Thread-188547] [transport.py] [_log()] kex follows: False
2026-02-14T16:32:35.735 [DEBUG] [Thread-188547] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:32:35.735 [DEBUG] [Thread-188547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:32:35.735 [DEBUG] [Thread-188547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:32:35.736 [DEBUG] [Thread-188547] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:32:35.736 [DEBUG] [Thread-188547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:32:35.736 [DEBUG] [Thread-188547] [transport.py] [_log()] Compression: none
2026-02-14T16:32:35.736 [DEBUG] [Thread-188547] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:32:35.792 [DEBUG] [Thread-188547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:32:35.792 [DEBUG] [Thread-188547] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:32:35.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:32:35.793 [DEBUG] [Thread-188547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:32:35.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:32:35.851 [DEBUG] [Thread-188547] [transport.py] [_log()] userauth is OK
2026-02-14T16:32:35.852 [DEBUG] [Thread-188547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:32:35.852 [DEBUG] [Thread-188547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:32:35.852 [DEBUG] [Thread-188547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:32:35.852 [DEBUG] [Thread-188547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:32:35.876 [INFO] [Thread-188547] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:32:35.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-14T16:32:35.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:32:36.683 [DEBUG] [Thread-188547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:32:36.683 [DEBUG] [Thread-188547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:32:36.731 [DEBUG] [Thread-188547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:32:36.732 [DEBUG] [Thread-188547] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:32:36.740 [DEBUG] [Thread-188547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:32:36.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:32:36.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-14T16:32:36.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:32:36.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:32:36.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:32:36.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:32:36.777 [DEBUG] [Thread-188547] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:32:38.251 [DEBUG] [Thread-188549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:32:53.301 [DEBUG] [Thread-188550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:32:56.275 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:32:56.276 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:33:06.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:33:06.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:33:06.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:33:08.335 [DEBUG] [Thread-188551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:33:09.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 32, 56), 15.09, 35.96, 0.0, 35.48, 16.63, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:33:09.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:32:56
2026-02-14T16:33:09.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:33:09.700 [DEBUG] [Thread-188552] [transport.py] [_log()] starting thread (client mode): 0xa57b0a60
2026-02-14T16:33:09.700 [DEBUG] [Thread-188552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:33:09.719 [DEBUG] [Thread-188552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:33:09.720 [INFO] [Thread-188552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:33:09.722 [DEBUG] [Thread-188552] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:33:09.723 [DEBUG] [Thread-188552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:33:09.723 [DEBUG] [Thread-188552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:33:09.723 [DEBUG] [Thread-188552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:33:09.723 [DEBUG] [Thread-188552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:33:09.723 [DEBUG] [Thread-188552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:33:09.723 [DEBUG] [Thread-188552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:33:09.723 [DEBUG] [Thread-188552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:33:09.723 [DEBUG] [Thread-188552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:33:09.723 [DEBUG] [Thread-188552] [transport.py] [_log()] client lang: <none>
2026-02-14T16:33:09.723 [DEBUG] [Thread-188552] [transport.py] [_log()] server lang: <none>
2026-02-14T16:33:09.723 [DEBUG] [Thread-188552] [transport.py] [_log()] kex follows: False
2026-02-14T16:33:09.723 [DEBUG] [Thread-188552] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:33:09.723 [DEBUG] [Thread-188552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:33:09.724 [DEBUG] [Thread-188552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:33:09.724 [DEBUG] [Thread-188552] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:33:09.724 [DEBUG] [Thread-188552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:33:09.724 [DEBUG] [Thread-188552] [transport.py] [_log()] Compression: none
2026-02-14T16:33:09.724 [DEBUG] [Thread-188552] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:33:09.741 [DEBUG] [Thread-188552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:33:09.741 [DEBUG] [Thread-188552] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:33:09.742 [DEBUG] [Thread-188552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:33:09.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:33:09.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:33:09.744 [DEBUG] [Thread-188552] [transport.py] [_log()] userauth is OK
2026-02-14T16:33:09.744 [DEBUG] [Thread-188552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:33:09.744 [DEBUG] [Thread-188552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:33:09.744 [DEBUG] [Thread-188552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:33:09.744 [DEBUG] [Thread-188552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:33:09.763 [INFO] [Thread-188552] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:33:09.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:33:10.369 [DEBUG] [Thread-188552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:33:10.370 [DEBUG] [Thread-188552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:33:10.370 [DEBUG] [Thread-188552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:33:10.410 [DEBUG] [Thread-188552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:33:10.410 [DEBUG] [Thread-188552] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:33:10.412 [DEBUG] [Thread-188552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:33:10.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:33:10.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:33:10.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:33:10.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:33:10.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:33:10.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:33:10.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:33:10.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:33:10.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:33:10.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.606009 -999.00  +16.80  28.39     41   +3.60 1 1 1 1 1   888    0 12.70 -25.16 ----- 28.8 28.4 175.6 31.4 21.2 -26.9 20.8 -26.1 22.3 -25.8 23.1 -26.8
2026-02-14T16:33:10.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:33:10.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:33:10.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.606009
2026-02-14T16:33:10.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:33:10.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:33:10.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:33:10.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:33:10.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:33:10.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:32:56', tmtdew=15.09, humidity=35.96, cloud=0.0, wind=35.48, temperature=16.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:32:39.178', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:33:10.429 [DEBUG] [Thread-188552] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:33:10.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T16:33:10.524 [DEBUG] [Thread-188555] [transport.py] [_log()] starting thread (client mode): 0xa57b23b0
2026-02-14T16:33:10.524 [DEBUG] [Thread-188555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:33:10.538 [DEBUG] [Thread-188555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:33:10.538 [INFO] [Thread-188555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:33:10.546 [DEBUG] [Thread-188555] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:33:10.546 [DEBUG] [Thread-188555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:33:10.546 [DEBUG] [Thread-188555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:33:10.547 [DEBUG] [Thread-188555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:33:10.547 [DEBUG] [Thread-188555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:33:10.547 [DEBUG] [Thread-188555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:33:10.547 [DEBUG] [Thread-188555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:33:10.547 [DEBUG] [Thread-188555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:33:10.547 [DEBUG] [Thread-188555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:33:10.547 [DEBUG] [Thread-188555] [transport.py] [_log()] client lang: <none>
2026-02-14T16:33:10.547 [DEBUG] [Thread-188555] [transport.py] [_log()] server lang: <none>
2026-02-14T16:33:10.547 [DEBUG] [Thread-188555] [transport.py] [_log()] kex follows: False
2026-02-14T16:33:10.547 [DEBUG] [Thread-188555] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:33:10.547 [DEBUG] [Thread-188555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:33:10.547 [DEBUG] [Thread-188555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:33:10.547 [DEBUG] [Thread-188555] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:33:10.547 [DEBUG] [Thread-188555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:33:10.547 [DEBUG] [Thread-188555] [transport.py] [_log()] Compression: none
2026-02-14T16:33:10.547 [DEBUG] [Thread-188555] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:33:10.604 [DEBUG] [Thread-188555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:33:10.605 [DEBUG] [Thread-188555] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:33:10.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:33:10.606 [DEBUG] [Thread-188555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:33:10.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:33:10.661 [DEBUG] [Thread-188555] [transport.py] [_log()] userauth is OK
2026-02-14T16:33:10.661 [DEBUG] [Thread-188555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:33:10.661 [DEBUG] [Thread-188555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:33:10.661 [DEBUG] [Thread-188555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:33:10.662 [DEBUG] [Thread-188555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:33:10.680 [INFO] [Thread-188555] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:33:10.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-14T16:33:10.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:33:11.495 [DEBUG] [Thread-188555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:33:11.495 [DEBUG] [Thread-188555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:33:11.543 [DEBUG] [Thread-188555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:33:11.543 [DEBUG] [Thread-188555] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:33:11.551 [DEBUG] [Thread-188555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:33:11.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:33:11.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-14T16:33:11.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:33:11.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:33:11.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:33:11.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:33:11.583 [DEBUG] [Thread-188555] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:33:23.370 [DEBUG] [Thread-188557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:33:31.525 [DEBUG] [Thread-188558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:33:38.423 [DEBUG] [Thread-188559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:33:41.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:33:41.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:33:41.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:33:43.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 33, 32), 15.13, 35.88, 0.0, 37.16, 16.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:33:43.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:33:32
2026-02-14T16:33:43.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:33:44.104 [DEBUG] [Thread-188560] [transport.py] [_log()] starting thread (client mode): 0xa2db4730
2026-02-14T16:33:44.104 [DEBUG] [Thread-188560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:33:44.125 [DEBUG] [Thread-188560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:33:44.125 [INFO] [Thread-188560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:33:44.127 [DEBUG] [Thread-188560] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:33:44.127 [DEBUG] [Thread-188560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:33:44.127 [DEBUG] [Thread-188560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:33:44.127 [DEBUG] [Thread-188560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:33:44.128 [DEBUG] [Thread-188560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:33:44.128 [DEBUG] [Thread-188560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:33:44.128 [DEBUG] [Thread-188560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:33:44.128 [DEBUG] [Thread-188560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:33:44.128 [DEBUG] [Thread-188560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:33:44.128 [DEBUG] [Thread-188560] [transport.py] [_log()] client lang: <none>
2026-02-14T16:33:44.128 [DEBUG] [Thread-188560] [transport.py] [_log()] server lang: <none>
2026-02-14T16:33:44.128 [DEBUG] [Thread-188560] [transport.py] [_log()] kex follows: False
2026-02-14T16:33:44.128 [DEBUG] [Thread-188560] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:33:44.128 [DEBUG] [Thread-188560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:33:44.128 [DEBUG] [Thread-188560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:33:44.128 [DEBUG] [Thread-188560] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:33:44.128 [DEBUG] [Thread-188560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:33:44.128 [DEBUG] [Thread-188560] [transport.py] [_log()] Compression: none
2026-02-14T16:33:44.128 [DEBUG] [Thread-188560] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:33:44.145 [DEBUG] [Thread-188560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:33:44.145 [DEBUG] [Thread-188560] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:33:44.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:33:44.146 [DEBUG] [Thread-188560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:33:44.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:33:44.148 [DEBUG] [Thread-188560] [transport.py] [_log()] userauth is OK
2026-02-14T16:33:44.149 [DEBUG] [Thread-188560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:33:44.149 [DEBUG] [Thread-188560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:33:44.149 [DEBUG] [Thread-188560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:33:44.149 [DEBUG] [Thread-188560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:33:44.173 [INFO] [Thread-188560] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:33:44.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:33:44.807 [DEBUG] [Thread-188560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:33:44.807 [DEBUG] [Thread-188560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:33:44.808 [DEBUG] [Thread-188560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:33:44.848 [DEBUG] [Thread-188560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:33:44.849 [DEBUG] [Thread-188560] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:33:44.852 [DEBUG] [Thread-188560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:33:44.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:33:44.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:33:44.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:33:44.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:33:44.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:33:44.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:33:44.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:33:44.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:33:44.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:33:44.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.606357 -999.00  +16.70  22.23     41   +3.50 1 1 1 1 1   888    0 12.73 -25.38 ----- 22.4 22.2 167.4 39.3 21.3 -28.2 -999.0 -999.0 22.3 -25.3 23.2 -27.0
2026-02-14T16:33:44.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:33:44.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:33:44.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.606357
2026-02-14T16:33:44.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:33:44.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:33:44.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:33:44.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:33:44.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:33:44.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:33:32', tmtdew=15.13, humidity=35.88, cloud=0.0, wind=37.16, temperature=16.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:33:09.245', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:33:44.881 [DEBUG] [Thread-188560] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:33:44.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-14T16:33:44.977 [DEBUG] [Thread-188563] [transport.py] [_log()] starting thread (client mode): 0xa2deea10
2026-02-14T16:33:44.977 [DEBUG] [Thread-188563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:33:44.992 [DEBUG] [Thread-188563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:33:44.992 [INFO] [Thread-188563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:33:45.000 [DEBUG] [Thread-188563] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:33:45.000 [DEBUG] [Thread-188563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:33:45.000 [DEBUG] [Thread-188563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:33:45.000 [DEBUG] [Thread-188563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:33:45.000 [DEBUG] [Thread-188563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:33:45.001 [DEBUG] [Thread-188563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:33:45.001 [DEBUG] [Thread-188563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:33:45.001 [DEBUG] [Thread-188563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:33:45.001 [DEBUG] [Thread-188563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:33:45.001 [DEBUG] [Thread-188563] [transport.py] [_log()] client lang: <none>
2026-02-14T16:33:45.001 [DEBUG] [Thread-188563] [transport.py] [_log()] server lang: <none>
2026-02-14T16:33:45.001 [DEBUG] [Thread-188563] [transport.py] [_log()] kex follows: False
2026-02-14T16:33:45.001 [DEBUG] [Thread-188563] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:33:45.001 [DEBUG] [Thread-188563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:33:45.002 [DEBUG] [Thread-188563] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:33:45.002 [DEBUG] [Thread-188563] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:33:45.002 [DEBUG] [Thread-188563] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:33:45.002 [DEBUG] [Thread-188563] [transport.py] [_log()] Compression: none
2026-02-14T16:33:45.002 [DEBUG] [Thread-188563] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:33:45.061 [DEBUG] [Thread-188563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:33:45.062 [DEBUG] [Thread-188563] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:33:45.062 [DEBUG] [Thread-188563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:33:45.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:33:45.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:33:45.117 [DEBUG] [Thread-188563] [transport.py] [_log()] userauth is OK
2026-02-14T16:33:45.118 [DEBUG] [Thread-188563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:33:45.118 [DEBUG] [Thread-188563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:33:45.118 [DEBUG] [Thread-188563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:33:45.118 [DEBUG] [Thread-188563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:33:45.143 [INFO] [Thread-188563] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:33: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-14T16:33:45.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:33:45.997 [DEBUG] [Thread-188563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:33:45.997 [DEBUG] [Thread-188563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:33:46.044 [DEBUG] [Thread-188563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:33:46.045 [DEBUG] [Thread-188563] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:33:46.054 [DEBUG] [Thread-188563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:33:46.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:33:46.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-14T16:33:46.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:33:46.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:33:46.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:33:46.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:33:46.091 [DEBUG] [Thread-188563] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:33:53.465 [DEBUG] [Thread-188565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:33:56.417 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:33:56.418 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:34:08.521 [DEBUG] [Thread-188566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:34:16.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:34:16.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:34:16.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:34:17.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 34, 7), 14.95, 36.26, 0.0, 31.25, 16.5, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:34:17.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:34:07
2026-02-14T16:34:18.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:34:18.491 [DEBUG] [Thread-188567] [transport.py] [_log()] starting thread (client mode): 0xa2dec490
2026-02-14T16:34:18.491 [DEBUG] [Thread-188567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:34:18.507 [DEBUG] [Thread-188567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:34:18.507 [INFO] [Thread-188567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:34:18.510 [DEBUG] [Thread-188567] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:34:18.510 [DEBUG] [Thread-188567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:34:18.510 [DEBUG] [Thread-188567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:34:18.510 [DEBUG] [Thread-188567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:34:18.510 [DEBUG] [Thread-188567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:34:18.510 [DEBUG] [Thread-188567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:34:18.510 [DEBUG] [Thread-188567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:34:18.510 [DEBUG] [Thread-188567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:34:18.510 [DEBUG] [Thread-188567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:34:18.510 [DEBUG] [Thread-188567] [transport.py] [_log()] client lang: <none>
2026-02-14T16:34:18.510 [DEBUG] [Thread-188567] [transport.py] [_log()] server lang: <none>
2026-02-14T16:34:18.510 [DEBUG] [Thread-188567] [transport.py] [_log()] kex follows: False
2026-02-14T16:34:18.510 [DEBUG] [Thread-188567] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:34:18.510 [DEBUG] [Thread-188567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:34:18.510 [DEBUG] [Thread-188567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:34:18.510 [DEBUG] [Thread-188567] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:34:18.510 [DEBUG] [Thread-188567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:34:18.510 [DEBUG] [Thread-188567] [transport.py] [_log()] Compression: none
2026-02-14T16:34:18.510 [DEBUG] [Thread-188567] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:34:18.527 [DEBUG] [Thread-188567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:34:18.528 [DEBUG] [Thread-188567] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:34:18.529 [DEBUG] [Thread-188567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:34:18.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:34:18.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:34:18.531 [DEBUG] [Thread-188567] [transport.py] [_log()] userauth is OK
2026-02-14T16:34:18.532 [DEBUG] [Thread-188567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:34:18.532 [DEBUG] [Thread-188567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:34:18.532 [DEBUG] [Thread-188567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:34:18.532 [DEBUG] [Thread-188567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:34:18.551 [INFO] [Thread-188567] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:34:18.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:34:19.349 [DEBUG] [Thread-188567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:34:19.350 [DEBUG] [Thread-188567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:34:19.350 [DEBUG] [Thread-188567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:34:19.391 [DEBUG] [Thread-188567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:34:19.391 [DEBUG] [Thread-188567] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:34:19.394 [DEBUG] [Thread-188567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:34:19.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:34:19.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:34:19.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:34:19.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:34:19.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:34:19.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:34:19.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:34:19.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:34:19.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:34:19.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.606703 -999.00  +16.70  20.90     41   +3.60 1 1 1 1 1   888    0 12.65 -26.32 ----- 23.5 20.9 171.4 33.5 21.3 -27.6 20.6 -30.0 22.3 -26.8 23.2 -28.1
2026-02-14T16:34:19.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:34:19.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:34:19.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.606703
2026-02-14T16:34:19.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:34:19.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:34:19.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:34:19.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:34:19.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:34:19.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:34:07', tmtdew=14.95, humidity=36.26, cloud=0.0, wind=31.25, temperature=16.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:33:39.139', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:34:19.421 [DEBUG] [Thread-188567] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:34: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-14T16:34:19.515 [DEBUG] [Thread-188570] [transport.py] [_log()] starting thread (client mode): 0xa2decc40
2026-02-14T16:34:19.515 [DEBUG] [Thread-188570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:34:19.530 [DEBUG] [Thread-188570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:34:19.530 [INFO] [Thread-188570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:34:19.537 [DEBUG] [Thread-188570] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:34:19.537 [DEBUG] [Thread-188570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:34:19.537 [DEBUG] [Thread-188570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:34:19.537 [DEBUG] [Thread-188570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:34:19.538 [DEBUG] [Thread-188570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:34:19.538 [DEBUG] [Thread-188570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:34:19.538 [DEBUG] [Thread-188570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:34:19.538 [DEBUG] [Thread-188570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:34:19.538 [DEBUG] [Thread-188570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:34:19.538 [DEBUG] [Thread-188570] [transport.py] [_log()] client lang: <none>
2026-02-14T16:34:19.538 [DEBUG] [Thread-188570] [transport.py] [_log()] server lang: <none>
2026-02-14T16:34:19.538 [DEBUG] [Thread-188570] [transport.py] [_log()] kex follows: False
2026-02-14T16:34:19.538 [DEBUG] [Thread-188570] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:34:19.538 [DEBUG] [Thread-188570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:34:19.538 [DEBUG] [Thread-188570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:34:19.538 [DEBUG] [Thread-188570] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:34:19.538 [DEBUG] [Thread-188570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:34:19.538 [DEBUG] [Thread-188570] [transport.py] [_log()] Compression: none
2026-02-14T16:34:19.538 [DEBUG] [Thread-188570] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:34:19.602 [DEBUG] [Thread-188570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:34:19.603 [DEBUG] [Thread-188570] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:34:19.603 [DEBUG] [Thread-188570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:34:19.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:34:19.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:34:19.665 [DEBUG] [Thread-188570] [transport.py] [_log()] userauth is OK
2026-02-14T16:34:19.665 [DEBUG] [Thread-188570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:34:19.665 [DEBUG] [Thread-188570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:34:19.665 [DEBUG] [Thread-188570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:34:19.666 [DEBUG] [Thread-188570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:34:19.684 [INFO] [Thread-188570] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:34:19.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-14T16:34:19.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:34:20.485 [DEBUG] [Thread-188570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:34:20.486 [DEBUG] [Thread-188570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:34:20.533 [DEBUG] [Thread-188570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:34:20.533 [DEBUG] [Thread-188570] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:34:20.543 [DEBUG] [Thread-188570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:34:20.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:34:20.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-14T16:34:20.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:34:20.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:34:20.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:34:20.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:34:20.580 [DEBUG] [Thread-188570] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:34:23.556 [DEBUG] [Thread-188572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:34:31.568 [DEBUG] [Thread-188573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:34:38.605 [DEBUG] [Thread-188574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:34:50.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:34:50.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:34:50.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-14T16:34:52.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 34, 42), 15.74, 34.65, 0.0, 41.67, 17.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:34:52.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:34:42
2026-02-14T16:34:52.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:34:52.991 [DEBUG] [Thread-188575] [transport.py] [_log()] starting thread (client mode): 0xa81d5510
2026-02-14T16:34:52.992 [DEBUG] [Thread-188575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:34:53.012 [DEBUG] [Thread-188575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:34:53.012 [INFO] [Thread-188575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:34:53.015 [DEBUG] [Thread-188575] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:34:53.015 [DEBUG] [Thread-188575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:34:53.015 [DEBUG] [Thread-188575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:34:53.015 [DEBUG] [Thread-188575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:34:53.015 [DEBUG] [Thread-188575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:34:53.015 [DEBUG] [Thread-188575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:34:53.015 [DEBUG] [Thread-188575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:34:53.015 [DEBUG] [Thread-188575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:34:53.015 [DEBUG] [Thread-188575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:34:53.015 [DEBUG] [Thread-188575] [transport.py] [_log()] client lang: <none>
2026-02-14T16:34:53.015 [DEBUG] [Thread-188575] [transport.py] [_log()] server lang: <none>
2026-02-14T16:34:53.015 [DEBUG] [Thread-188575] [transport.py] [_log()] kex follows: False
2026-02-14T16:34:53.015 [DEBUG] [Thread-188575] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:34:53.015 [DEBUG] [Thread-188575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:34:53.015 [DEBUG] [Thread-188575] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:34:53.015 [DEBUG] [Thread-188575] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:34:53.015 [DEBUG] [Thread-188575] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:34:53.015 [DEBUG] [Thread-188575] [transport.py] [_log()] Compression: none
2026-02-14T16:34:53.015 [DEBUG] [Thread-188575] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:34:53.033 [DEBUG] [Thread-188575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:34:53.034 [DEBUG] [Thread-188575] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:34:53.034 [DEBUG] [Thread-188575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:34:53.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:34:53.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:34:53.037 [DEBUG] [Thread-188575] [transport.py] [_log()] userauth is OK
2026-02-14T16:34:53.037 [DEBUG] [Thread-188575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:34:53.037 [DEBUG] [Thread-188575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:34:53.037 [DEBUG] [Thread-188575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:34:53.037 [DEBUG] [Thread-188575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:34:53.053 [INFO] [Thread-188575] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:34:53.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:34:53.644 [DEBUG] [Thread-188577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:34:53.677 [DEBUG] [Thread-188575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:34:53.677 [DEBUG] [Thread-188575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:34:53.678 [DEBUG] [Thread-188575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:34:53.718 [DEBUG] [Thread-188575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:34:53.718 [DEBUG] [Thread-188575] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:34:53.722 [DEBUG] [Thread-188575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:34:53.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:34:53.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:34:53.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:34:53.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:34:53.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:34:53.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:34:53.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:34:53.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:34:53.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:34:53.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.607051 -999.00  +16.70  30.43     41   +3.60 1 1 2 1 1   888    0 12.77 -26.27 ----- 26.0 30.4 164.8 35.8 21.2 -28.7 20.6 -26.8 22.3 -26.1 23.0 -29.7
2026-02-14T16:34:53.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:34:53.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:34:53.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.607051
2026-02-14T16:34:53.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:34:53.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:34:53.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:34:53.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:34:53.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:34:53.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:34:42', tmtdew=15.74, humidity=34.65, cloud=0.0, wind=41.67, temperature=17.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:34:09.206', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:34:53.750 [DEBUG] [Thread-188575] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:34:53.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T16:34:53.845 [DEBUG] [Thread-188579] [transport.py] [_log()] starting thread (client mode): 0xa81d7640
2026-02-14T16:34:53.846 [DEBUG] [Thread-188579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:34:53.860 [DEBUG] [Thread-188579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:34:53.860 [INFO] [Thread-188579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:34:53.867 [DEBUG] [Thread-188579] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:34:53.868 [DEBUG] [Thread-188579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:34:53.868 [DEBUG] [Thread-188579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:34:53.868 [DEBUG] [Thread-188579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:34:53.868 [DEBUG] [Thread-188579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:34:53.868 [DEBUG] [Thread-188579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:34:53.868 [DEBUG] [Thread-188579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:34:53.868 [DEBUG] [Thread-188579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:34:53.868 [DEBUG] [Thread-188579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:34:53.868 [DEBUG] [Thread-188579] [transport.py] [_log()] client lang: <none>
2026-02-14T16:34:53.868 [DEBUG] [Thread-188579] [transport.py] [_log()] server lang: <none>
2026-02-14T16:34:53.868 [DEBUG] [Thread-188579] [transport.py] [_log()] kex follows: False
2026-02-14T16:34:53.868 [DEBUG] [Thread-188579] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:34:53.868 [DEBUG] [Thread-188579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:34:53.868 [DEBUG] [Thread-188579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:34:53.868 [DEBUG] [Thread-188579] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:34:53.868 [DEBUG] [Thread-188579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:34:53.868 [DEBUG] [Thread-188579] [transport.py] [_log()] Compression: none
2026-02-14T16:34:53.868 [DEBUG] [Thread-188579] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:34:53.925 [DEBUG] [Thread-188579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:34:53.925 [DEBUG] [Thread-188579] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:34:53.925 [DEBUG] [Thread-188579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:34:53.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:34:53.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:34:53.983 [DEBUG] [Thread-188579] [transport.py] [_log()] userauth is OK
2026-02-14T16:34:53.983 [DEBUG] [Thread-188579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:34:53.983 [DEBUG] [Thread-188579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:34:53.983 [DEBUG] [Thread-188579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:34:53.983 [DEBUG] [Thread-188579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:34:54.007 [INFO] [Thread-188579] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:34:54.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-14T16:34:54.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:34:54.865 [DEBUG] [Thread-188579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:34:54.865 [DEBUG] [Thread-188579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:34:54.912 [DEBUG] [Thread-188579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:34:54.913 [DEBUG] [Thread-188579] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:34:54.922 [DEBUG] [Thread-188579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:34:54.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:34:54.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-14T16:34:54.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-14T16:34:54.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:34:54.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:34:54.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:34:54.959 [DEBUG] [Thread-188579] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:34:56.558 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:34:56.559 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:35:08.684 [DEBUG] [Thread-188581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:35:23.734 [DEBUG] [Thread-188582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:35:24.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:35:24.954 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:35:24.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-14T16:35:26.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 35, 18), 15.0, 36.57, 0.0, 37.85, 16.78, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:35:26.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:35:18
2026-02-14T16:35:27.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:35:27.466 [DEBUG] [Thread-188583] [transport.py] [_log()] starting thread (client mode): 0xa2db7640
2026-02-14T16:35:27.466 [DEBUG] [Thread-188583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:35:27.486 [DEBUG] [Thread-188583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:35:27.486 [INFO] [Thread-188583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:35:27.489 [DEBUG] [Thread-188583] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:35:27.489 [DEBUG] [Thread-188583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:35:27.489 [DEBUG] [Thread-188583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:35:27.489 [DEBUG] [Thread-188583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:35:27.489 [DEBUG] [Thread-188583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:35:27.489 [DEBUG] [Thread-188583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:35:27.489 [DEBUG] [Thread-188583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:35:27.489 [DEBUG] [Thread-188583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:35:27.489 [DEBUG] [Thread-188583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:35:27.489 [DEBUG] [Thread-188583] [transport.py] [_log()] client lang: <none>
2026-02-14T16:35:27.489 [DEBUG] [Thread-188583] [transport.py] [_log()] server lang: <none>
2026-02-14T16:35:27.489 [DEBUG] [Thread-188583] [transport.py] [_log()] kex follows: False
2026-02-14T16:35:27.489 [DEBUG] [Thread-188583] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:35:27.489 [DEBUG] [Thread-188583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:35:27.489 [DEBUG] [Thread-188583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:35:27.489 [DEBUG] [Thread-188583] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:35:27.489 [DEBUG] [Thread-188583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:35:27.489 [DEBUG] [Thread-188583] [transport.py] [_log()] Compression: none
2026-02-14T16:35:27.489 [DEBUG] [Thread-188583] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:35:27.507 [DEBUG] [Thread-188583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:35:27.508 [DEBUG] [Thread-188583] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:35:27.508 [DEBUG] [Thread-188583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:35:27.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:35:27.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:35:27.511 [DEBUG] [Thread-188583] [transport.py] [_log()] userauth is OK
2026-02-14T16:35:27.511 [DEBUG] [Thread-188583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:35:27.511 [DEBUG] [Thread-188583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:35:27.511 [DEBUG] [Thread-188583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:35:27.512 [DEBUG] [Thread-188583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:35:27.546 [INFO] [Thread-188583] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:35:27.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:35:28.200 [DEBUG] [Thread-188583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:35:28.200 [DEBUG] [Thread-188583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:35:28.200 [DEBUG] [Thread-188583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:35:28.240 [DEBUG] [Thread-188583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:35:28.241 [DEBUG] [Thread-188583] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:35:28.244 [DEBUG] [Thread-188583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:35:28.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:35:28.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:35:28.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:35:28.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:35:28.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:35:28.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:35:28.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:35:28.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:35:28.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:35:28.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.607398 -999.00  +16.80  29.75     41   +3.80 1 1 1 1 1   888    0 12.59 -28.78 ----- 37.2 29.8 171.8 42.6 21.2 -28.3 20.7 -27.3 22.3 -26.5 23.1 -27.3
2026-02-14T16:35:28.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:35:28.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:35:28.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.607398
2026-02-14T16:35:28.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:35:28.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:35:28.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:35:28.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:35:28.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:35:28.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:35:18', tmtdew=15.0, humidity=36.57, cloud=0.0, wind=37.85, temperature=16.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:34:39.187', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:35:28.273 [DEBUG] [Thread-188583] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:35:28.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-14T16:35:28.369 [DEBUG] [Thread-188586] [transport.py] [_log()] starting thread (client mode): 0xa2db6d10
2026-02-14T16:35:28.369 [DEBUG] [Thread-188586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:35:28.386 [DEBUG] [Thread-188586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:35:28.386 [INFO] [Thread-188586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:35:28.394 [DEBUG] [Thread-188586] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:35:28.394 [DEBUG] [Thread-188586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:35:28.394 [DEBUG] [Thread-188586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:35:28.394 [DEBUG] [Thread-188586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:35:28.394 [DEBUG] [Thread-188586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:35:28.394 [DEBUG] [Thread-188586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:35:28.394 [DEBUG] [Thread-188586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:35:28.394 [DEBUG] [Thread-188586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:35:28.395 [DEBUG] [Thread-188586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:35:28.395 [DEBUG] [Thread-188586] [transport.py] [_log()] client lang: <none>
2026-02-14T16:35:28.395 [DEBUG] [Thread-188586] [transport.py] [_log()] server lang: <none>
2026-02-14T16:35:28.395 [DEBUG] [Thread-188586] [transport.py] [_log()] kex follows: False
2026-02-14T16:35:28.395 [DEBUG] [Thread-188586] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:35:28.395 [DEBUG] [Thread-188586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:35:28.395 [DEBUG] [Thread-188586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:35:28.395 [DEBUG] [Thread-188586] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:35:28.395 [DEBUG] [Thread-188586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:35:28.396 [DEBUG] [Thread-188586] [transport.py] [_log()] Compression: none
2026-02-14T16:35:28.396 [DEBUG] [Thread-188586] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:35:28.454 [DEBUG] [Thread-188586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:35:28.455 [DEBUG] [Thread-188586] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:35:28.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:35:28.456 [DEBUG] [Thread-188586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:35:28.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:35:28.518 [DEBUG] [Thread-188586] [transport.py] [_log()] userauth is OK
2026-02-14T16:35:28.518 [DEBUG] [Thread-188586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:35:28.518 [DEBUG] [Thread-188586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:35:28.518 [DEBUG] [Thread-188586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:35:28.518 [DEBUG] [Thread-188586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:35:28.537 [INFO] [Thread-188586] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:35:28.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-14T16:35:28.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:35:29.358 [DEBUG] [Thread-188586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:35:29.359 [DEBUG] [Thread-188586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:35:29.408 [DEBUG] [Thread-188586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:35:29.409 [DEBUG] [Thread-188586] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:35:29.421 [DEBUG] [Thread-188586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:35:29.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:35:29.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-14T16:35:29.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-14T16:35:29.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:35:29.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:35:29.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:35:29.470 [DEBUG] [Thread-188586] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:35:31.602 [DEBUG] [Thread-188588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:35:38.772 [DEBUG] [Thread-188589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:35:53.823 [DEBUG] [Thread-188590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:35:56.699 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:35:56.701 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:35:59.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:35:59.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:35:59.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:36:01.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 35, 18), 15.0, 36.57, 0.0, 37.85, 16.78, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:36:01.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:35:18
2026-02-14T16:36:01.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:36:02.079 [DEBUG] [Thread-188591] [transport.py] [_log()] starting thread (client mode): 0xa2db75b0
2026-02-14T16:36:02.079 [DEBUG] [Thread-188591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:36:02.100 [DEBUG] [Thread-188591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:36:02.100 [INFO] [Thread-188591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:36:02.103 [DEBUG] [Thread-188591] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:36:02.103 [DEBUG] [Thread-188591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:36:02.103 [DEBUG] [Thread-188591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:36:02.103 [DEBUG] [Thread-188591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:36:02.103 [DEBUG] [Thread-188591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:36:02.103 [DEBUG] [Thread-188591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:36:02.103 [DEBUG] [Thread-188591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:36:02.103 [DEBUG] [Thread-188591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:36:02.103 [DEBUG] [Thread-188591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:36:02.103 [DEBUG] [Thread-188591] [transport.py] [_log()] client lang: <none>
2026-02-14T16:36:02.103 [DEBUG] [Thread-188591] [transport.py] [_log()] server lang: <none>
2026-02-14T16:36:02.104 [DEBUG] [Thread-188591] [transport.py] [_log()] kex follows: False
2026-02-14T16:36:02.104 [DEBUG] [Thread-188591] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:36:02.104 [DEBUG] [Thread-188591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:36:02.104 [DEBUG] [Thread-188591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:36:02.104 [DEBUG] [Thread-188591] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:36:02.104 [DEBUG] [Thread-188591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:36:02.104 [DEBUG] [Thread-188591] [transport.py] [_log()] Compression: none
2026-02-14T16:36:02.104 [DEBUG] [Thread-188591] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:36:02.121 [DEBUG] [Thread-188591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:36:02.122 [DEBUG] [Thread-188591] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:36:02.122 [DEBUG] [Thread-188591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:36:02.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:36:02.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:36:02.124 [DEBUG] [Thread-188591] [transport.py] [_log()] userauth is OK
2026-02-14T16:36:02.125 [DEBUG] [Thread-188591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:36:02.125 [DEBUG] [Thread-188591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:36:02.125 [DEBUG] [Thread-188591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:36:02.125 [DEBUG] [Thread-188591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:36:02.150 [INFO] [Thread-188591] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:36:02.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:36:02.717 [DEBUG] [Thread-188591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:36:02.717 [DEBUG] [Thread-188591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:36:02.717 [DEBUG] [Thread-188591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:36:02.758 [DEBUG] [Thread-188591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:36:02.758 [DEBUG] [Thread-188591] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:36:02.760 [DEBUG] [Thread-188591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:36:02.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:36:02.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:36:02.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:36:02.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:36:02.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:36:02.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:36:02.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:36:02.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:36:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:36:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.608092 -999.00  +16.50  36.91     42   +3.70 1 1 2 1 1   888    0 12.38 -36.12 ----- 37.7 36.9 167.6 46.3 21.1 -28.0 20.6 -26.8 22.1 -26.4 23.0 -28.5
2026-02-14T16:36:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:36:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:36:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.608092
2026-02-14T16:36:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:36:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:36:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:36:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:36:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:36:02.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:35:18', tmtdew=15.0, humidity=36.57, cloud=0.0, wind=37.85, temperature=16.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:35:39.149', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:36:02.778 [DEBUG] [Thread-188591] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:36:02.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-14T16:36:02.861 [DEBUG] [Thread-188594] [transport.py] [_log()] starting thread (client mode): 0xa2db4c40
2026-02-14T16:36:02.861 [DEBUG] [Thread-188594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:36:02.875 [DEBUG] [Thread-188594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:36:02.875 [INFO] [Thread-188594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:36:02.883 [DEBUG] [Thread-188594] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:36:02.883 [DEBUG] [Thread-188594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:36:02.883 [DEBUG] [Thread-188594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:36:02.883 [DEBUG] [Thread-188594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:36:02.883 [DEBUG] [Thread-188594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:36:02.883 [DEBUG] [Thread-188594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:36:02.883 [DEBUG] [Thread-188594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:36:02.883 [DEBUG] [Thread-188594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:36:02.883 [DEBUG] [Thread-188594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:36:02.883 [DEBUG] [Thread-188594] [transport.py] [_log()] client lang: <none>
2026-02-14T16:36:02.883 [DEBUG] [Thread-188594] [transport.py] [_log()] server lang: <none>
2026-02-14T16:36:02.883 [DEBUG] [Thread-188594] [transport.py] [_log()] kex follows: False
2026-02-14T16:36:02.883 [DEBUG] [Thread-188594] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:36:02.883 [DEBUG] [Thread-188594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:36:02.883 [DEBUG] [Thread-188594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:36:02.883 [DEBUG] [Thread-188594] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:36:02.883 [DEBUG] [Thread-188594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:36:02.883 [DEBUG] [Thread-188594] [transport.py] [_log()] Compression: none
2026-02-14T16:36:02.883 [DEBUG] [Thread-188594] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:36:02.938 [DEBUG] [Thread-188594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:36:02.939 [DEBUG] [Thread-188594] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:36:02.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:36:02.939 [DEBUG] [Thread-188594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:36:02.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:36:02.995 [DEBUG] [Thread-188594] [transport.py] [_log()] userauth is OK
2026-02-14T16:36:02.995 [DEBUG] [Thread-188594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:36:02.995 [DEBUG] [Thread-188594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:36:02.996 [DEBUG] [Thread-188594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:36:02.996 [DEBUG] [Thread-188594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:36:03.013 [INFO] [Thread-188594] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:36:03.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-14T16:36:03.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:36:03.825 [DEBUG] [Thread-188594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:36:03.826 [DEBUG] [Thread-188594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:36:03.873 [DEBUG] [Thread-188594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:36:03.873 [DEBUG] [Thread-188594] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:36:03.882 [DEBUG] [Thread-188594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:36:03.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:36:03.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-14T16:36:03.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-14T16:36:03.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:36:03.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:36:03.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:36:03.916 [DEBUG] [Thread-188594] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:36:08.861 [DEBUG] [Thread-188596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:36:23.919 [DEBUG] [Thread-188597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:36:31.634 [DEBUG] [Thread-188598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:36:33.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:36:33.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:36:33.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-14T16:36:36.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 35, 54), 15.38, 35.41, 0.0, 36.24, 17.07, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:36:36.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:35:54
2026-02-14T16:36:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:36:36.619 [DEBUG] [Thread-188599] [transport.py] [_log()] starting thread (client mode): 0xa2db4370
2026-02-14T16:36:36.619 [DEBUG] [Thread-188599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:36:36.640 [DEBUG] [Thread-188599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:36:36.641 [INFO] [Thread-188599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:36:36.643 [DEBUG] [Thread-188599] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:36:36.643 [DEBUG] [Thread-188599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:36:36.643 [DEBUG] [Thread-188599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:36:36.643 [DEBUG] [Thread-188599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:36:36.643 [DEBUG] [Thread-188599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:36:36.643 [DEBUG] [Thread-188599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:36:36.644 [DEBUG] [Thread-188599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:36:36.644 [DEBUG] [Thread-188599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:36:36.644 [DEBUG] [Thread-188599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:36:36.644 [DEBUG] [Thread-188599] [transport.py] [_log()] client lang: <none>
2026-02-14T16:36:36.644 [DEBUG] [Thread-188599] [transport.py] [_log()] server lang: <none>
2026-02-14T16:36:36.644 [DEBUG] [Thread-188599] [transport.py] [_log()] kex follows: False
2026-02-14T16:36:36.644 [DEBUG] [Thread-188599] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:36:36.644 [DEBUG] [Thread-188599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:36:36.644 [DEBUG] [Thread-188599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:36:36.644 [DEBUG] [Thread-188599] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:36:36.644 [DEBUG] [Thread-188599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:36:36.644 [DEBUG] [Thread-188599] [transport.py] [_log()] Compression: none
2026-02-14T16:36:36.644 [DEBUG] [Thread-188599] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:36:36.663 [DEBUG] [Thread-188599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:36:36.663 [DEBUG] [Thread-188599] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:36:36.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:36:36.664 [DEBUG] [Thread-188599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:36:36.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:36:36.667 [DEBUG] [Thread-188599] [transport.py] [_log()] userauth is OK
2026-02-14T16:36:36.667 [DEBUG] [Thread-188599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:36:36.667 [DEBUG] [Thread-188599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:36:36.668 [DEBUG] [Thread-188599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:36:36.668 [DEBUG] [Thread-188599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:36:36.701 [INFO] [Thread-188599] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:36:36.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:36:37.325 [DEBUG] [Thread-188599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:36:37.325 [DEBUG] [Thread-188599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:36:37.325 [DEBUG] [Thread-188599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:36:37.366 [DEBUG] [Thread-188599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:36:37.367 [DEBUG] [Thread-188599] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:36:37.370 [DEBUG] [Thread-188599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:36:37.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:36:37.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:36:37.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:36:37.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:36:37.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:36:37.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:36:37.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:36:37.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:36:37.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:36:37.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.608439 -999.00  +16.30  28.27     42   +3.70 1 1 1 1 1   888    0 12.52 -38.60 ----- 27.9 28.3 174.4 44.3 21.0 -29.2 20.3 -27.8 22.1 -25.5 22.9 -29.0
2026-02-14T16:36:37.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:36:37.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:36:37.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.608439
2026-02-14T16:36:37.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:36:37.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:36:37.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:36:37.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:36:37.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:36:37.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:35:54', tmtdew=15.38, humidity=35.41, cloud=0.0, wind=36.24, temperature=17.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:36:09.130', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:36:37.398 [DEBUG] [Thread-188599] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:36:37.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-14T16:36:37.498 [DEBUG] [Thread-188602] [transport.py] [_log()] starting thread (client mode): 0xa2dec2e0
2026-02-14T16:36:37.498 [DEBUG] [Thread-188602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:36:37.513 [DEBUG] [Thread-188602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:36:37.513 [INFO] [Thread-188602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:36:37.521 [DEBUG] [Thread-188602] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:36:37.522 [DEBUG] [Thread-188602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:36:37.522 [DEBUG] [Thread-188602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:36:37.522 [DEBUG] [Thread-188602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:36:37.522 [DEBUG] [Thread-188602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:36:37.522 [DEBUG] [Thread-188602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:36:37.522 [DEBUG] [Thread-188602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:36:37.522 [DEBUG] [Thread-188602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:36:37.522 [DEBUG] [Thread-188602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:36:37.522 [DEBUG] [Thread-188602] [transport.py] [_log()] client lang: <none>
2026-02-14T16:36:37.522 [DEBUG] [Thread-188602] [transport.py] [_log()] server lang: <none>
2026-02-14T16:36:37.523 [DEBUG] [Thread-188602] [transport.py] [_log()] kex follows: False
2026-02-14T16:36:37.523 [DEBUG] [Thread-188602] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:36:37.523 [DEBUG] [Thread-188602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:36:37.523 [DEBUG] [Thread-188602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:36:37.523 [DEBUG] [Thread-188602] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:36:37.523 [DEBUG] [Thread-188602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:36:37.524 [DEBUG] [Thread-188602] [transport.py] [_log()] Compression: none
2026-02-14T16:36:37.524 [DEBUG] [Thread-188602] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:36:37.581 [DEBUG] [Thread-188602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:36:37.581 [DEBUG] [Thread-188602] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:36:37.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:36:37.582 [DEBUG] [Thread-188602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:36:37.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:36:37.637 [DEBUG] [Thread-188602] [transport.py] [_log()] userauth is OK
2026-02-14T16:36:37.637 [DEBUG] [Thread-188602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:36:37.637 [DEBUG] [Thread-188602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:36:37.638 [DEBUG] [Thread-188602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:36:37.638 [DEBUG] [Thread-188602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:36:37.657 [INFO] [Thread-188602] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:36:37.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-14T16:36:37.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:36:38.473 [DEBUG] [Thread-188602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:36:38.473 [DEBUG] [Thread-188602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:36:38.521 [DEBUG] [Thread-188602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:36:38.522 [DEBUG] [Thread-188602] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:36:38.531 [DEBUG] [Thread-188602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:36:38.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:36:38.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:36:38.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:36:38.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:36:38.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:36:38.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:36:38.568 [DEBUG] [Thread-188602] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:36:38.950 [DEBUG] [Thread-188604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:36:54.010 [DEBUG] [Thread-188605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:36:56.841 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:36:56.842 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:37:08.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:37:08.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:37:08.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-14T16:37:09.048 [DEBUG] [Thread-188606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:37:11.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 36, 29), 15.34, 35.49, 0.0, 38.59, 17.05, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:37:11.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:36:29
2026-02-14T16:37:11.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:37:11.722 [DEBUG] [Thread-188607] [transport.py] [_log()] starting thread (client mode): 0xa2defe20
2026-02-14T16:37:11.722 [DEBUG] [Thread-188607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:37:11.741 [DEBUG] [Thread-188607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:37:11.741 [INFO] [Thread-188607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:37:11.745 [DEBUG] [Thread-188607] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:37:11.745 [DEBUG] [Thread-188607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:37:11.745 [DEBUG] [Thread-188607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:37:11.745 [DEBUG] [Thread-188607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:37:11.745 [DEBUG] [Thread-188607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:37:11.745 [DEBUG] [Thread-188607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:37:11.745 [DEBUG] [Thread-188607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:37:11.745 [DEBUG] [Thread-188607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:37:11.745 [DEBUG] [Thread-188607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:37:11.745 [DEBUG] [Thread-188607] [transport.py] [_log()] client lang: <none>
2026-02-14T16:37:11.745 [DEBUG] [Thread-188607] [transport.py] [_log()] server lang: <none>
2026-02-14T16:37:11.746 [DEBUG] [Thread-188607] [transport.py] [_log()] kex follows: False
2026-02-14T16:37:11.746 [DEBUG] [Thread-188607] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:37:11.746 [DEBUG] [Thread-188607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:37:11.746 [DEBUG] [Thread-188607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:37:11.746 [DEBUG] [Thread-188607] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:37:11.746 [DEBUG] [Thread-188607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:37:11.746 [DEBUG] [Thread-188607] [transport.py] [_log()] Compression: none
2026-02-14T16:37:11.746 [DEBUG] [Thread-188607] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:37:11.764 [DEBUG] [Thread-188607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:37:11.764 [DEBUG] [Thread-188607] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:37:11.765 [DEBUG] [Thread-188607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:37:11.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:37:11.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:37:11.767 [DEBUG] [Thread-188607] [transport.py] [_log()] userauth is OK
2026-02-14T16:37:11.768 [DEBUG] [Thread-188607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:37:11.768 [DEBUG] [Thread-188607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:37:11.768 [DEBUG] [Thread-188607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:37:11.768 [DEBUG] [Thread-188607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:37:11.794 [INFO] [Thread-188607] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:37:11.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:37:12.573 [DEBUG] [Thread-188607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:37:12.573 [DEBUG] [Thread-188607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:37:12.573 [DEBUG] [Thread-188607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:37:12.615 [DEBUG] [Thread-188607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:37:12.615 [DEBUG] [Thread-188607] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:37:12.618 [DEBUG] [Thread-188607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:37:12.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:37:12.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:37:12.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:37:12.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:37:12.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:37:12.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:37:12.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:37:12.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:37:12.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:37:12.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.608787 -999.00  +16.30  28.41     42   +3.70 1 1 1 1 1   888    0 12.26 -42.45 ----- 34.2 28.4 184.4 42.6 21.0 -27.5 20.2 -31.5 21.9 -26.4 22.8 -29.3
2026-02-14T16:37:12.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:37:12.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:37:12.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.608787
2026-02-14T16:37:12.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:37:12.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:37:12.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:37:12.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:37:12.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:37:12.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:36:29', tmtdew=15.34, humidity=35.49, cloud=0.0, wind=38.59, temperature=17.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:36:39.197', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:37:12.647 [DEBUG] [Thread-188607] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:37:12.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-14T16:37:12.742 [DEBUG] [Thread-188610] [transport.py] [_log()] starting thread (client mode): 0xa2db7400
2026-02-14T16:37:12.743 [DEBUG] [Thread-188610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:37:12.757 [DEBUG] [Thread-188610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:37:12.757 [INFO] [Thread-188610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:37:12.765 [DEBUG] [Thread-188610] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:37:12.765 [DEBUG] [Thread-188610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:37:12.765 [DEBUG] [Thread-188610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:37:12.766 [DEBUG] [Thread-188610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:37:12.766 [DEBUG] [Thread-188610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:37:12.766 [DEBUG] [Thread-188610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:37:12.766 [DEBUG] [Thread-188610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:37:12.766 [DEBUG] [Thread-188610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:37:12.766 [DEBUG] [Thread-188610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:37:12.766 [DEBUG] [Thread-188610] [transport.py] [_log()] client lang: <none>
2026-02-14T16:37:12.766 [DEBUG] [Thread-188610] [transport.py] [_log()] server lang: <none>
2026-02-14T16:37:12.766 [DEBUG] [Thread-188610] [transport.py] [_log()] kex follows: False
2026-02-14T16:37:12.766 [DEBUG] [Thread-188610] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:37:12.766 [DEBUG] [Thread-188610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:37:12.766 [DEBUG] [Thread-188610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:37:12.766 [DEBUG] [Thread-188610] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:37:12.766 [DEBUG] [Thread-188610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:37:12.766 [DEBUG] [Thread-188610] [transport.py] [_log()] Compression: none
2026-02-14T16:37:12.766 [DEBUG] [Thread-188610] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:37:12.821 [DEBUG] [Thread-188610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:37:12.822 [DEBUG] [Thread-188610] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:37:12.823 [DEBUG] [Thread-188610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:37:12.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:37:12.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:37:12.877 [DEBUG] [Thread-188610] [transport.py] [_log()] userauth is OK
2026-02-14T16:37:12.877 [DEBUG] [Thread-188610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:37:12.877 [DEBUG] [Thread-188610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:37:12.877 [DEBUG] [Thread-188610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:37:12.878 [DEBUG] [Thread-188610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:37:12.901 [INFO] [Thread-188610] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:37:12.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:37:12.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:37:13.756 [DEBUG] [Thread-188610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:37:13.756 [DEBUG] [Thread-188610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:37:13.804 [DEBUG] [Thread-188610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:37:13.805 [DEBUG] [Thread-188610] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:37:13.814 [DEBUG] [Thread-188610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:37:13.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:37:13.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-14T16:37:13.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-14T16:37:13.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:37:13.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:37:13.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:37:13.850 [DEBUG] [Thread-188610] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:37:24.087 [DEBUG] [Thread-188612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:37:31.675 [DEBUG] [Thread-188613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:37:39.141 [DEBUG] [Thread-188614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:37:43.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:37:43.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:37:43.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-14T16:37:46.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 37, 5), 15.42, 35.31, 0.0, 42.22, 17.08, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:37:46.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:37:05
2026-02-14T16:37:47.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:37:47.206 [DEBUG] [Thread-188615] [transport.py] [_log()] starting thread (client mode): 0xa81d59f0
2026-02-14T16:37:47.206 [DEBUG] [Thread-188615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:37:47.226 [DEBUG] [Thread-188615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:37:47.226 [INFO] [Thread-188615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:37:47.229 [DEBUG] [Thread-188615] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:37:47.229 [DEBUG] [Thread-188615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:37:47.230 [DEBUG] [Thread-188615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:37:47.230 [DEBUG] [Thread-188615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:37:47.230 [DEBUG] [Thread-188615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:37:47.230 [DEBUG] [Thread-188615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:37:47.230 [DEBUG] [Thread-188615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:37:47.230 [DEBUG] [Thread-188615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:37:47.230 [DEBUG] [Thread-188615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:37:47.230 [DEBUG] [Thread-188615] [transport.py] [_log()] client lang: <none>
2026-02-14T16:37:47.230 [DEBUG] [Thread-188615] [transport.py] [_log()] server lang: <none>
2026-02-14T16:37:47.230 [DEBUG] [Thread-188615] [transport.py] [_log()] kex follows: False
2026-02-14T16:37:47.230 [DEBUG] [Thread-188615] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:37:47.230 [DEBUG] [Thread-188615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:37:47.231 [DEBUG] [Thread-188615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:37:47.231 [DEBUG] [Thread-188615] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:37:47.231 [DEBUG] [Thread-188615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:37:47.231 [DEBUG] [Thread-188615] [transport.py] [_log()] Compression: none
2026-02-14T16:37:47.231 [DEBUG] [Thread-188615] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:37:47.250 [DEBUG] [Thread-188615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:37:47.251 [DEBUG] [Thread-188615] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:37:47.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:37:47.252 [DEBUG] [Thread-188615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:37:47.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:37:47.255 [DEBUG] [Thread-188615] [transport.py] [_log()] userauth is OK
2026-02-14T16:37:47.256 [DEBUG] [Thread-188615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:37:47.256 [DEBUG] [Thread-188615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:37:47.256 [DEBUG] [Thread-188615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:37:47.256 [DEBUG] [Thread-188615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:37:47.281 [INFO] [Thread-188615] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:37:47.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:37:47.899 [DEBUG] [Thread-188615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:37:47.899 [DEBUG] [Thread-188615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:37:47.900 [DEBUG] [Thread-188615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:37:47.941 [DEBUG] [Thread-188615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:37:47.941 [DEBUG] [Thread-188615] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:37:47.944 [DEBUG] [Thread-188615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:37:47.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:37:47.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:37:47.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:37:47.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:37:47.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:37:47.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:37:47.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:37:47.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:37:47.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:37:47.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.609134 -999.00  +16.20  30.51     43   +3.70 1 1 2 1 1   888    0 11.95 -45.69 ----- 30.0 30.5 193.4 46.2 20.9 -29.4 20.1 -29.5 21.8 -26.3 22.7 -29.5
2026-02-14T16:37:47.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:37:47.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:37:47.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.609134
2026-02-14T16:37:47.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:37:47.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:37:47.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:37:47.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:37:47.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:37:47.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:37:05', tmtdew=15.42, humidity=35.31, cloud=0.0, wind=42.22, temperature=17.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:37:09.178', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:37:47.969 [DEBUG] [Thread-188615] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:37:48.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-14T16:37:48.074 [DEBUG] [Thread-188618] [transport.py] [_log()] starting thread (client mode): 0xa81d5b40
2026-02-14T16:37:48.074 [DEBUG] [Thread-188618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:37:48.088 [DEBUG] [Thread-188618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:37:48.088 [INFO] [Thread-188618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:37:48.096 [DEBUG] [Thread-188618] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:37:48.096 [DEBUG] [Thread-188618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:37:48.096 [DEBUG] [Thread-188618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:37:48.096 [DEBUG] [Thread-188618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:37:48.097 [DEBUG] [Thread-188618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:37:48.097 [DEBUG] [Thread-188618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:37:48.097 [DEBUG] [Thread-188618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:37:48.097 [DEBUG] [Thread-188618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:37:48.097 [DEBUG] [Thread-188618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:37:48.097 [DEBUG] [Thread-188618] [transport.py] [_log()] client lang: <none>
2026-02-14T16:37:48.097 [DEBUG] [Thread-188618] [transport.py] [_log()] server lang: <none>
2026-02-14T16:37:48.097 [DEBUG] [Thread-188618] [transport.py] [_log()] kex follows: False
2026-02-14T16:37:48.097 [DEBUG] [Thread-188618] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:37:48.097 [DEBUG] [Thread-188618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:37:48.097 [DEBUG] [Thread-188618] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:37:48.097 [DEBUG] [Thread-188618] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:37:48.097 [DEBUG] [Thread-188618] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:37:48.097 [DEBUG] [Thread-188618] [transport.py] [_log()] Compression: none
2026-02-14T16:37:48.097 [DEBUG] [Thread-188618] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:37:48.153 [DEBUG] [Thread-188618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:37:48.153 [DEBUG] [Thread-188618] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:37:48.154 [DEBUG] [Thread-188618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:37:48.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:37:48.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:37:48.209 [DEBUG] [Thread-188618] [transport.py] [_log()] userauth is OK
2026-02-14T16:37:48.209 [DEBUG] [Thread-188618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:37:48.209 [DEBUG] [Thread-188618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:37:48.209 [DEBUG] [Thread-188618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:37:48.209 [DEBUG] [Thread-188618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:37:48.223 [INFO] [Thread-188618] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:37:48.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-14T16:37:48.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:37:49.054 [DEBUG] [Thread-188618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:37:49.054 [DEBUG] [Thread-188618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:37:49.102 [DEBUG] [Thread-188618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:37:49.103 [DEBUG] [Thread-188618] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:37:49.112 [DEBUG] [Thread-188618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:37:49.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:37:49.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:37:49.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:37:49.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:37:49.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:37:49.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:37:49.149 [DEBUG] [Thread-188618] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:37:54.177 [DEBUG] [Thread-188620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:37:56.984 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:37:56.985 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:38:09.229 [DEBUG] [Thread-188621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:38:19.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:38:19.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:38:19.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-14T16:38:21.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 37, 41), 15.77, 34.61, 0.0, 43.86, 17.5, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:38:21.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:37:41
2026-02-14T16:38:22.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:38:22.528 [DEBUG] [Thread-188622] [transport.py] [_log()] starting thread (client mode): 0xa2db6d40
2026-02-14T16:38:22.529 [DEBUG] [Thread-188622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:38:22.548 [DEBUG] [Thread-188622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:38:22.548 [INFO] [Thread-188622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:38:22.552 [DEBUG] [Thread-188622] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:38:22.552 [DEBUG] [Thread-188622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:38:22.552 [DEBUG] [Thread-188622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:38:22.552 [DEBUG] [Thread-188622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:38:22.552 [DEBUG] [Thread-188622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:38:22.552 [DEBUG] [Thread-188622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:38:22.552 [DEBUG] [Thread-188622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:38:22.552 [DEBUG] [Thread-188622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:38:22.552 [DEBUG] [Thread-188622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:38:22.552 [DEBUG] [Thread-188622] [transport.py] [_log()] client lang: <none>
2026-02-14T16:38:22.552 [DEBUG] [Thread-188622] [transport.py] [_log()] server lang: <none>
2026-02-14T16:38:22.552 [DEBUG] [Thread-188622] [transport.py] [_log()] kex follows: False
2026-02-14T16:38:22.552 [DEBUG] [Thread-188622] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:38:22.552 [DEBUG] [Thread-188622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:38:22.552 [DEBUG] [Thread-188622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:38:22.552 [DEBUG] [Thread-188622] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:38:22.552 [DEBUG] [Thread-188622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:38:22.552 [DEBUG] [Thread-188622] [transport.py] [_log()] Compression: none
2026-02-14T16:38:22.552 [DEBUG] [Thread-188622] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:38:22.568 [DEBUG] [Thread-188622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:38:22.569 [DEBUG] [Thread-188622] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:38:22.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:38:22.570 [DEBUG] [Thread-188622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:38:22.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:38:22.572 [DEBUG] [Thread-188622] [transport.py] [_log()] userauth is OK
2026-02-14T16:38:22.572 [DEBUG] [Thread-188622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:38:22.572 [DEBUG] [Thread-188622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:38:22.572 [DEBUG] [Thread-188622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:38:22.572 [DEBUG] [Thread-188622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:38:22.592 [INFO] [Thread-188622] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:38:22.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:38:23.226 [DEBUG] [Thread-188622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:38:23.226 [DEBUG] [Thread-188622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:38:23.227 [DEBUG] [Thread-188622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:38:23.267 [DEBUG] [Thread-188622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:38:23.267 [DEBUG] [Thread-188622] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:38:23.269 [DEBUG] [Thread-188622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:38:23.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:38:23.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:38:23.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:38:23.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:38:23.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:38:23.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:38:23.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:38:23.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:38:23.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:38:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.609481 -999.00  +16.50  25.02     43   +3.90 1 1 1 1 1   888    0 11.81 -53.16 ----- 24.0 25.0 181.0 34.6 20.8 -27.2 20.2 -26.4 22.0 -26.8 22.6 -28.4
2026-02-14T16:38:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:38:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:38:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.609481
2026-02-14T16:38:23.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:38:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:38:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:38:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:38:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:38:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:37:41', tmtdew=15.77, humidity=34.61, cloud=0.0, wind=43.86, temperature=17.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:37:39.158', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:38:23.296 [DEBUG] [Thread-188622] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:38:23.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-14T16:38:23.390 [DEBUG] [Thread-188625] [transport.py] [_log()] starting thread (client mode): 0xa2deefb0
2026-02-14T16:38:23.390 [DEBUG] [Thread-188625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:38:23.406 [DEBUG] [Thread-188625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:38:23.406 [INFO] [Thread-188625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:38:23.413 [DEBUG] [Thread-188625] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:38:23.413 [DEBUG] [Thread-188625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:38:23.413 [DEBUG] [Thread-188625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:38:23.414 [DEBUG] [Thread-188625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:38:23.414 [DEBUG] [Thread-188625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:38:23.414 [DEBUG] [Thread-188625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:38:23.414 [DEBUG] [Thread-188625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:38:23.414 [DEBUG] [Thread-188625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:38:23.414 [DEBUG] [Thread-188625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:38:23.414 [DEBUG] [Thread-188625] [transport.py] [_log()] client lang: <none>
2026-02-14T16:38:23.414 [DEBUG] [Thread-188625] [transport.py] [_log()] server lang: <none>
2026-02-14T16:38:23.414 [DEBUG] [Thread-188625] [transport.py] [_log()] kex follows: False
2026-02-14T16:38:23.414 [DEBUG] [Thread-188625] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:38:23.414 [DEBUG] [Thread-188625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:38:23.414 [DEBUG] [Thread-188625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:38:23.415 [DEBUG] [Thread-188625] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:38:23.415 [DEBUG] [Thread-188625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:38:23.415 [DEBUG] [Thread-188625] [transport.py] [_log()] Compression: none
2026-02-14T16:38:23.415 [DEBUG] [Thread-188625] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:38:23.470 [DEBUG] [Thread-188625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:38:23.471 [DEBUG] [Thread-188625] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:38:23.472 [DEBUG] [Thread-188625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:38:23.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:38:23.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:38:23.526 [DEBUG] [Thread-188625] [transport.py] [_log()] userauth is OK
2026-02-14T16:38:23.527 [DEBUG] [Thread-188625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:38:23.527 [DEBUG] [Thread-188625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:38:23.527 [DEBUG] [Thread-188625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:38:23.527 [DEBUG] [Thread-188625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:38:23.547 [INFO] [Thread-188625] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:38:23.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:38:23.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:38:24.265 [DEBUG] [Thread-188627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:38:24.376 [DEBUG] [Thread-188625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:38:24.376 [DEBUG] [Thread-188625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:38:24.424 [DEBUG] [Thread-188625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:38:24.424 [DEBUG] [Thread-188625] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:38:24.432 [DEBUG] [Thread-188625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:38:24.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:38:24.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:38:24.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:38:24.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:38:24.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:38:24.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:38:24.467 [DEBUG] [Thread-188625] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:38:31.719 [DEBUG] [Thread-188628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:38:39.303 [DEBUG] [Thread-188629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:38:54.338 [DEBUG] [Thread-188630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:38:54.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:38:54.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:38:54.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-14T16:38:56.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 38, 18), 14.64, 37.44, 0.0, 36.81, 16.43, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:38:56.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:38:18
2026-02-14T16:38:56.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:38:57.127 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:38:57.128 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:38:57.132 [DEBUG] [Thread-188631] [transport.py] [_log()] starting thread (client mode): 0xa575beb0
2026-02-14T16:38:57.132 [DEBUG] [Thread-188631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:38:57.152 [DEBUG] [Thread-188631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:38:57.152 [INFO] [Thread-188631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:38:57.155 [DEBUG] [Thread-188631] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:38:57.156 [DEBUG] [Thread-188631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:38:57.156 [DEBUG] [Thread-188631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:38:57.156 [DEBUG] [Thread-188631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:38:57.156 [DEBUG] [Thread-188631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:38:57.156 [DEBUG] [Thread-188631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:38:57.156 [DEBUG] [Thread-188631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:38:57.156 [DEBUG] [Thread-188631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:38:57.156 [DEBUG] [Thread-188631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:38:57.156 [DEBUG] [Thread-188631] [transport.py] [_log()] client lang: <none>
2026-02-14T16:38:57.156 [DEBUG] [Thread-188631] [transport.py] [_log()] server lang: <none>
2026-02-14T16:38:57.156 [DEBUG] [Thread-188631] [transport.py] [_log()] kex follows: False
2026-02-14T16:38:57.156 [DEBUG] [Thread-188631] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:38:57.157 [DEBUG] [Thread-188631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:38:57.157 [DEBUG] [Thread-188631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:38:57.157 [DEBUG] [Thread-188631] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:38:57.157 [DEBUG] [Thread-188631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:38:57.157 [DEBUG] [Thread-188631] [transport.py] [_log()] Compression: none
2026-02-14T16:38:57.157 [DEBUG] [Thread-188631] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:38:57.176 [DEBUG] [Thread-188631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:38:57.177 [DEBUG] [Thread-188631] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:38:57.177 [DEBUG] [Thread-188631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:38:57.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:38:57.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:38:57.179 [DEBUG] [Thread-188631] [transport.py] [_log()] userauth is OK
2026-02-14T16:38:57.179 [DEBUG] [Thread-188631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:38:57.179 [DEBUG] [Thread-188631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:38:57.180 [DEBUG] [Thread-188631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:38:57.180 [DEBUG] [Thread-188631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:38:57.205 [INFO] [Thread-188631] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:38:57.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:38:57.987 [DEBUG] [Thread-188631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:38:57.987 [DEBUG] [Thread-188631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:38:57.988 [DEBUG] [Thread-188631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:38:58.029 [DEBUG] [Thread-188631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:38:58.029 [DEBUG] [Thread-188631] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:38:58.032 [DEBUG] [Thread-188631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:38:58.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:38:58.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:38:58.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:38:58.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:38:58.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:38:58.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:38:58.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:38:58.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:38:58.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:38:58.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.609828 -999.00  +16.60  22.71     42   +3.80 1 1 1 1 1   888    0 11.55 -53.36 ----- 26.7 22.7 190.4 31.8 20.9 -27.8 20.3 -28.4 22.0 -25.7 22.7 -27.7
2026-02-14T16:38:58.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:38:58.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:38:58.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.609828
2026-02-14T16:38:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:38:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:38:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:38:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:38:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:38:58.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:38:18', tmtdew=14.64, humidity=37.44, cloud=0.0, wind=36.81, temperature=16.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:38:09.139', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:38:58.057 [DEBUG] [Thread-188631] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:38:58.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T16:38:58.153 [DEBUG] [Thread-188634] [transport.py] [_log()] starting thread (client mode): 0xa575b400
2026-02-14T16:38:58.153 [DEBUG] [Thread-188634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:38:58.167 [DEBUG] [Thread-188634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:38:58.167 [INFO] [Thread-188634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:38:58.175 [DEBUG] [Thread-188634] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:38:58.175 [DEBUG] [Thread-188634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:38:58.175 [DEBUG] [Thread-188634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:38:58.175 [DEBUG] [Thread-188634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:38:58.175 [DEBUG] [Thread-188634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:38:58.175 [DEBUG] [Thread-188634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:38:58.175 [DEBUG] [Thread-188634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:38:58.175 [DEBUG] [Thread-188634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:38:58.175 [DEBUG] [Thread-188634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:38:58.175 [DEBUG] [Thread-188634] [transport.py] [_log()] client lang: <none>
2026-02-14T16:38:58.175 [DEBUG] [Thread-188634] [transport.py] [_log()] server lang: <none>
2026-02-14T16:38:58.175 [DEBUG] [Thread-188634] [transport.py] [_log()] kex follows: False
2026-02-14T16:38:58.175 [DEBUG] [Thread-188634] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:38:58.175 [DEBUG] [Thread-188634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:38:58.175 [DEBUG] [Thread-188634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:38:58.175 [DEBUG] [Thread-188634] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:38:58.176 [DEBUG] [Thread-188634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:38:58.176 [DEBUG] [Thread-188634] [transport.py] [_log()] Compression: none
2026-02-14T16:38:58.176 [DEBUG] [Thread-188634] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:38:58.235 [DEBUG] [Thread-188634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:38:58.236 [DEBUG] [Thread-188634] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:38:58.236 [DEBUG] [Thread-188634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:38:58.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:38:58.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:38:58.292 [DEBUG] [Thread-188634] [transport.py] [_log()] userauth is OK
2026-02-14T16:38:58.292 [DEBUG] [Thread-188634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:38:58.292 [DEBUG] [Thread-188634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:38:58.292 [DEBUG] [Thread-188634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:38:58.292 [DEBUG] [Thread-188634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:38:58.317 [INFO] [Thread-188634] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:38:58.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-14T16:38:58.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:38:59.095 [DEBUG] [Thread-188634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:38:59.095 [DEBUG] [Thread-188634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:38:59.143 [DEBUG] [Thread-188634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:38:59.143 [DEBUG] [Thread-188634] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:38:59.152 [DEBUG] [Thread-188634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:38:59.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:38:59.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-14T16:38:59.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-14T16:38:59.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:38:59.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:38:59.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:38:59.186 [DEBUG] [Thread-188634] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:39:09.376 [DEBUG] [Thread-188636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:39:24.427 [DEBUG] [Thread-188637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:39:29.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:39:29.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:39:29.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-14T16:39:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 38, 54), 14.72, 37.26, 0.0, 31.97, 16.55, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:39:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:38:54
2026-02-14T16:39:31.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:39:31.415 [DEBUG] [Thread-188638] [transport.py] [_log()] starting thread (client mode): 0xa2db6950
2026-02-14T16:39:31.416 [DEBUG] [Thread-188638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:39:31.436 [DEBUG] [Thread-188638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:39:31.436 [INFO] [Thread-188638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:39:31.439 [DEBUG] [Thread-188638] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:39:31.439 [DEBUG] [Thread-188638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:39:31.439 [DEBUG] [Thread-188638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:39:31.439 [DEBUG] [Thread-188638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:39:31.439 [DEBUG] [Thread-188638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:39:31.439 [DEBUG] [Thread-188638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:39:31.439 [DEBUG] [Thread-188638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:39:31.439 [DEBUG] [Thread-188638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:39:31.439 [DEBUG] [Thread-188638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:39:31.439 [DEBUG] [Thread-188638] [transport.py] [_log()] client lang: <none>
2026-02-14T16:39:31.439 [DEBUG] [Thread-188638] [transport.py] [_log()] server lang: <none>
2026-02-14T16:39:31.439 [DEBUG] [Thread-188638] [transport.py] [_log()] kex follows: False
2026-02-14T16:39:31.439 [DEBUG] [Thread-188638] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:39:31.439 [DEBUG] [Thread-188638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:39:31.439 [DEBUG] [Thread-188638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:39:31.439 [DEBUG] [Thread-188638] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:39:31.439 [DEBUG] [Thread-188638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:39:31.439 [DEBUG] [Thread-188638] [transport.py] [_log()] Compression: none
2026-02-14T16:39:31.439 [DEBUG] [Thread-188638] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:39:31.457 [DEBUG] [Thread-188638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:39:31.457 [DEBUG] [Thread-188638] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:39:31.458 [DEBUG] [Thread-188638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:39:31.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:39:31.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:39:31.460 [DEBUG] [Thread-188638] [transport.py] [_log()] userauth is OK
2026-02-14T16:39:31.460 [DEBUG] [Thread-188638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:39:31.460 [DEBUG] [Thread-188638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:39:31.460 [DEBUG] [Thread-188638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:39:31.460 [DEBUG] [Thread-188638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:39:31.485 [INFO] [Thread-188638] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:39:31.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:39:31.753 [DEBUG] [Thread-188640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:39:32.124 [DEBUG] [Thread-188638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:39:32.125 [DEBUG] [Thread-188638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:39:32.125 [DEBUG] [Thread-188638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:39:32.166 [DEBUG] [Thread-188638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:39:32.166 [DEBUG] [Thread-188638] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:39:32.169 [DEBUG] [Thread-188638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:39:32.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:39:32.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:39:32.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:39:32.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:39:32.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:39:32.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:39:32.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:39:32.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:39:32.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:39:32.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.610176 -999.00  +16.30  20.19     42   +3.70 1 1 1 1 1   888    0 11.58 -55.21 ----- 19.5 20.2 182.8 37.8 20.8 -29.6 20.0 -30.7 21.9 -25.4 22.7 -29.9
2026-02-14T16:39:32.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:39:32.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:39:32.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.610176
2026-02-14T16:39:32.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:39:32.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:39:32.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:39:32.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:39:32.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:39:32.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:38:54', tmtdew=14.72, humidity=37.26, cloud=0.0, wind=31.97, temperature=16.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:38:39.206', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:39:32.196 [DEBUG] [Thread-188638] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:39:32.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-14T16:39:32.291 [DEBUG] [Thread-188642] [transport.py] [_log()] starting thread (client mode): 0xa2dec580
2026-02-14T16:39:32.291 [DEBUG] [Thread-188642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:39:32.305 [DEBUG] [Thread-188642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:39:32.306 [INFO] [Thread-188642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:39:32.313 [DEBUG] [Thread-188642] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:39:32.314 [DEBUG] [Thread-188642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:39:32.314 [DEBUG] [Thread-188642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:39:32.314 [DEBUG] [Thread-188642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:39:32.314 [DEBUG] [Thread-188642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:39:32.315 [DEBUG] [Thread-188642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:39:32.315 [DEBUG] [Thread-188642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:39:32.315 [DEBUG] [Thread-188642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:39:32.315 [DEBUG] [Thread-188642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:39:32.315 [DEBUG] [Thread-188642] [transport.py] [_log()] client lang: <none>
2026-02-14T16:39:32.315 [DEBUG] [Thread-188642] [transport.py] [_log()] server lang: <none>
2026-02-14T16:39:32.315 [DEBUG] [Thread-188642] [transport.py] [_log()] kex follows: False
2026-02-14T16:39:32.315 [DEBUG] [Thread-188642] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:39:32.315 [DEBUG] [Thread-188642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:39:32.315 [DEBUG] [Thread-188642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:39:32.315 [DEBUG] [Thread-188642] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:39:32.315 [DEBUG] [Thread-188642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:39:32.315 [DEBUG] [Thread-188642] [transport.py] [_log()] Compression: none
2026-02-14T16:39:32.315 [DEBUG] [Thread-188642] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:39:32.371 [DEBUG] [Thread-188642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:39:32.372 [DEBUG] [Thread-188642] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:39:32.373 [DEBUG] [Thread-188642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:39:32.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:39:32.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:39:32.428 [DEBUG] [Thread-188642] [transport.py] [_log()] userauth is OK
2026-02-14T16:39:32.428 [DEBUG] [Thread-188642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:39:32.429 [DEBUG] [Thread-188642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:39:32.429 [DEBUG] [Thread-188642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:39:32.429 [DEBUG] [Thread-188642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:39:32.453 [INFO] [Thread-188642] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:39:32.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:39:32.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:39:33.273 [DEBUG] [Thread-188642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:39:33.273 [DEBUG] [Thread-188642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:39:33.321 [DEBUG] [Thread-188642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:39:33.322 [DEBUG] [Thread-188642] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:39:33.331 [DEBUG] [Thread-188642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:39:33.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:39:33.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:39:33.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-14T16:39:33.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:39:33.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:39:33.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:39:33.368 [DEBUG] [Thread-188642] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:39:39.463 [DEBUG] [Thread-188644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:39:54.506 [DEBUG] [Thread-188645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:39:57.270 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:39:57.271 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:40:03.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:40:03.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:40:03.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-14T16:40:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 39, 29), 14.74, 37.22, 0.0, 31.27, 16.6, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:40:05.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:39:29
2026-02-14T16:40:05.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:40:05.822 [DEBUG] [Thread-188646] [transport.py] [_log()] starting thread (client mode): 0xa2d21930
2026-02-14T16:40:05.823 [DEBUG] [Thread-188646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:40:05.843 [DEBUG] [Thread-188646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:40:05.843 [INFO] [Thread-188646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:40:05.844 [DEBUG] [Thread-188646] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:40:05.844 [DEBUG] [Thread-188646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:40:05.844 [DEBUG] [Thread-188646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:40:05.844 [DEBUG] [Thread-188646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:40:05.845 [DEBUG] [Thread-188646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:40:05.845 [DEBUG] [Thread-188646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:40:05.845 [DEBUG] [Thread-188646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:40:05.845 [DEBUG] [Thread-188646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:40:05.845 [DEBUG] [Thread-188646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:40:05.845 [DEBUG] [Thread-188646] [transport.py] [_log()] client lang: <none>
2026-02-14T16:40:05.845 [DEBUG] [Thread-188646] [transport.py] [_log()] server lang: <none>
2026-02-14T16:40:05.845 [DEBUG] [Thread-188646] [transport.py] [_log()] kex follows: False
2026-02-14T16:40:05.845 [DEBUG] [Thread-188646] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:40:05.845 [DEBUG] [Thread-188646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:40:05.845 [DEBUG] [Thread-188646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:40:05.845 [DEBUG] [Thread-188646] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:40:05.845 [DEBUG] [Thread-188646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:40:05.845 [DEBUG] [Thread-188646] [transport.py] [_log()] Compression: none
2026-02-14T16:40:05.845 [DEBUG] [Thread-188646] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:40:05.853 [DEBUG] [Thread-188646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:40:05.853 [DEBUG] [Thread-188646] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:40:05.854 [DEBUG] [Thread-188646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:40:05.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:40:05.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:40:05.855 [DEBUG] [Thread-188646] [transport.py] [_log()] userauth is OK
2026-02-14T16:40:05.855 [DEBUG] [Thread-188646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:40:05.856 [DEBUG] [Thread-188646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:40:05.856 [DEBUG] [Thread-188646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:40:05.856 [DEBUG] [Thread-188646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:40:05.874 [INFO] [Thread-188646] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:40:05.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:40:06.582 [DEBUG] [Thread-188646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:40:06.582 [DEBUG] [Thread-188646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:40:06.582 [DEBUG] [Thread-188646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:40:06.623 [DEBUG] [Thread-188646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:40:06.624 [DEBUG] [Thread-188646] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:40:06.627 [DEBUG] [Thread-188646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:40:06.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:40:06.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:40:06.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:40:06.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:40:06.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:40:06.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:40:06.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:40:06.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:40:06.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:40:06.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.610523 -999.00  +16.60  16.98     42   +3.90 1 1 1 1 1   888    0 11.76 -55.42 ----- 15.3 17.0 169.8 22.9 20.9 -26.8 20.2 -28.4 22.0 -25.0 22.6 -27.5
2026-02-14T16:40:06.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:40:06.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:40:06.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.610523
2026-02-14T16:40:06.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:40:06.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:40:06.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:40:06.656 [DEBUG] [Thread-188646] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:40:06.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:40:06.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:40:06.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:39:29', tmtdew=14.74, humidity=37.22, cloud=0.0, wind=31.27, temperature=16.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:39:09.187', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:40:06.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-14T16:40:06.761 [DEBUG] [Thread-188649] [transport.py] [_log()] starting thread (client mode): 0xa2db5f00
2026-02-14T16:40:06.761 [DEBUG] [Thread-188649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:40:06.776 [DEBUG] [Thread-188649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:40:06.776 [INFO] [Thread-188649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:40:06.784 [DEBUG] [Thread-188649] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:40:06.784 [DEBUG] [Thread-188649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:40:06.784 [DEBUG] [Thread-188649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:40:06.784 [DEBUG] [Thread-188649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:40:06.785 [DEBUG] [Thread-188649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:40:06.785 [DEBUG] [Thread-188649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:40:06.785 [DEBUG] [Thread-188649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:40:06.785 [DEBUG] [Thread-188649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:40:06.785 [DEBUG] [Thread-188649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:40:06.785 [DEBUG] [Thread-188649] [transport.py] [_log()] client lang: <none>
2026-02-14T16:40:06.785 [DEBUG] [Thread-188649] [transport.py] [_log()] server lang: <none>
2026-02-14T16:40:06.785 [DEBUG] [Thread-188649] [transport.py] [_log()] kex follows: False
2026-02-14T16:40:06.785 [DEBUG] [Thread-188649] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:40:06.786 [DEBUG] [Thread-188649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:40:06.786 [DEBUG] [Thread-188649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:40:06.786 [DEBUG] [Thread-188649] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:40:06.786 [DEBUG] [Thread-188649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:40:06.786 [DEBUG] [Thread-188649] [transport.py] [_log()] Compression: none
2026-02-14T16:40:06.786 [DEBUG] [Thread-188649] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:40:06.846 [DEBUG] [Thread-188649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:40:06.846 [DEBUG] [Thread-188649] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:40:06.848 [DEBUG] [Thread-188649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:40:06.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:40:06.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:40:06.905 [DEBUG] [Thread-188649] [transport.py] [_log()] userauth is OK
2026-02-14T16:40:06.905 [DEBUG] [Thread-188649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:40:06.905 [DEBUG] [Thread-188649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:40:06.905 [DEBUG] [Thread-188649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:40:06.905 [DEBUG] [Thread-188649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:40:06.923 [INFO] [Thread-188649] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:40:06.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-14T16:40:06.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:40:07.726 [DEBUG] [Thread-188649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:40:07.726 [DEBUG] [Thread-188649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:40:07.774 [DEBUG] [Thread-188649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:40:07.775 [DEBUG] [Thread-188649] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:40:07.783 [DEBUG] [Thread-188649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:40:07.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:40:07.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-14T16:40:07.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-14T16:40:07.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:40:07.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:40:07.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:40:07.819 [DEBUG] [Thread-188649] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:40:09.543 [DEBUG] [Thread-188651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:40:24.595 [DEBUG] [Thread-188652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:40:31.786 [DEBUG] [Thread-188653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:40:37.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:40:37.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:40:37.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-14T16:40:39.632 [DEBUG] [Thread-188654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:40:40.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 40, 4), 14.72, 37.26, 0.0, 28.92, 16.53, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:40:40.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:40:04
2026-02-14T16:40:40.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:40:40.915 [DEBUG] [Thread-188655] [transport.py] [_log()] starting thread (client mode): 0xa57b0fd0
2026-02-14T16:40:40.915 [DEBUG] [Thread-188655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:40:40.936 [DEBUG] [Thread-188655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:40:40.936 [INFO] [Thread-188655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:40:40.939 [DEBUG] [Thread-188655] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:40:40.939 [DEBUG] [Thread-188655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:40:40.939 [DEBUG] [Thread-188655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:40:40.939 [DEBUG] [Thread-188655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:40:40.939 [DEBUG] [Thread-188655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:40:40.939 [DEBUG] [Thread-188655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:40:40.939 [DEBUG] [Thread-188655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:40:40.939 [DEBUG] [Thread-188655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:40:40.939 [DEBUG] [Thread-188655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:40:40.940 [DEBUG] [Thread-188655] [transport.py] [_log()] client lang: <none>
2026-02-14T16:40:40.940 [DEBUG] [Thread-188655] [transport.py] [_log()] server lang: <none>
2026-02-14T16:40:40.940 [DEBUG] [Thread-188655] [transport.py] [_log()] kex follows: False
2026-02-14T16:40:40.940 [DEBUG] [Thread-188655] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:40:40.940 [DEBUG] [Thread-188655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:40:40.940 [DEBUG] [Thread-188655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:40:40.940 [DEBUG] [Thread-188655] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:40:40.940 [DEBUG] [Thread-188655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:40:40.940 [DEBUG] [Thread-188655] [transport.py] [_log()] Compression: none
2026-02-14T16:40:40.940 [DEBUG] [Thread-188655] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:40:40.958 [DEBUG] [Thread-188655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:40:40.958 [DEBUG] [Thread-188655] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:40:40.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:40:40.959 [DEBUG] [Thread-188655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:40:40.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:40:40.961 [DEBUG] [Thread-188655] [transport.py] [_log()] userauth is OK
2026-02-14T16:40:40.962 [DEBUG] [Thread-188655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:40:40.962 [DEBUG] [Thread-188655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:40:40.962 [DEBUG] [Thread-188655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:40:40.962 [DEBUG] [Thread-188655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:40:40.987 [INFO] [Thread-188655] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:40:40.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:40:41.599 [DEBUG] [Thread-188655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:40:41.599 [DEBUG] [Thread-188655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:40:41.599 [DEBUG] [Thread-188655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:40:41.640 [DEBUG] [Thread-188655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:40:41.640 [DEBUG] [Thread-188655] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:40:41.644 [DEBUG] [Thread-188655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:40:41.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:40:41.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:40:41.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:40:41.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:40:41.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:40:41.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:40:41.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:40:41.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:40:41.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:40:41.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.610870 -999.00  +17.10  24.13     41   +4.00 1 1 1 1 1   888    0 11.61 -55.38 ----- 24.5 24.1 167.0 28.5 21.0 -26.2 20.5 -25.4 22.2 -24.2 22.8 -26.8
2026-02-14T16:40:41.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:40:41.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:40:41.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.610870
2026-02-14T16:40:41.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:40:41.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:40:41.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:40:41.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:40:41.669 [DEBUG] [Thread-188655] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:40:41.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:40:41.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:40:04', tmtdew=14.72, humidity=37.26, cloud=0.0, wind=28.92, temperature=16.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:39:39.168', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:40:41.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-14T16:40:41.765 [DEBUG] [Thread-188658] [transport.py] [_log()] starting thread (client mode): 0xa2db6cb0
2026-02-14T16:40:41.765 [DEBUG] [Thread-188658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:40:41.779 [DEBUG] [Thread-188658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:40:41.780 [INFO] [Thread-188658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:40:41.787 [DEBUG] [Thread-188658] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:40:41.788 [DEBUG] [Thread-188658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:40:41.788 [DEBUG] [Thread-188658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:40:41.788 [DEBUG] [Thread-188658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:40:41.788 [DEBUG] [Thread-188658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:40:41.788 [DEBUG] [Thread-188658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:40:41.788 [DEBUG] [Thread-188658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:40:41.788 [DEBUG] [Thread-188658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:40:41.788 [DEBUG] [Thread-188658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:40:41.788 [DEBUG] [Thread-188658] [transport.py] [_log()] client lang: <none>
2026-02-14T16:40:41.788 [DEBUG] [Thread-188658] [transport.py] [_log()] server lang: <none>
2026-02-14T16:40:41.788 [DEBUG] [Thread-188658] [transport.py] [_log()] kex follows: False
2026-02-14T16:40:41.788 [DEBUG] [Thread-188658] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:40:41.788 [DEBUG] [Thread-188658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:40:41.788 [DEBUG] [Thread-188658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:40:41.788 [DEBUG] [Thread-188658] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:40:41.788 [DEBUG] [Thread-188658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:40:41.788 [DEBUG] [Thread-188658] [transport.py] [_log()] Compression: none
2026-02-14T16:40:41.788 [DEBUG] [Thread-188658] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:40:41.845 [DEBUG] [Thread-188658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:40:41.846 [DEBUG] [Thread-188658] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:40:41.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:40:41.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:40:41.849 [DEBUG] [Thread-188658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:40:41.905 [DEBUG] [Thread-188658] [transport.py] [_log()] userauth is OK
2026-02-14T16:40:41.905 [DEBUG] [Thread-188658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:40:41.905 [DEBUG] [Thread-188658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:40:41.905 [DEBUG] [Thread-188658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:40:41.905 [DEBUG] [Thread-188658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:40:41.928 [INFO] [Thread-188658] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:40:41.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-14T16:40:41.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:40:42.724 [DEBUG] [Thread-188658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:40:42.724 [DEBUG] [Thread-188658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:40:42.772 [DEBUG] [Thread-188658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:40:42.773 [DEBUG] [Thread-188658] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:40:42.782 [DEBUG] [Thread-188658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:40:42.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:40:42.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-14T16:40:42.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-14T16:40:42.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:40:42.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:40:42.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:40:42.818 [DEBUG] [Thread-188658] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:40:54.665 [DEBUG] [Thread-188660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:40:57.412 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:40:57.414 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:41:09.715 [DEBUG] [Thread-188661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:41:12.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:41:12.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:41:12.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-14T16:41:14.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 40, 39), 15.95, 34.31, 0.0, 36.77, 17.97, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:41:15.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:40:39
2026-02-14T16:41:15.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:41:15.506 [DEBUG] [Thread-188662] [transport.py] [_log()] starting thread (client mode): 0xa57c2f50
2026-02-14T16:41:15.507 [DEBUG] [Thread-188662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:41:15.527 [DEBUG] [Thread-188662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:41:15.527 [INFO] [Thread-188662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:41:15.530 [DEBUG] [Thread-188662] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:41:15.530 [DEBUG] [Thread-188662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:41:15.530 [DEBUG] [Thread-188662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:41:15.531 [DEBUG] [Thread-188662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:41:15.531 [DEBUG] [Thread-188662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:41:15.531 [DEBUG] [Thread-188662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:41:15.531 [DEBUG] [Thread-188662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:41:15.531 [DEBUG] [Thread-188662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:41:15.531 [DEBUG] [Thread-188662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:41:15.531 [DEBUG] [Thread-188662] [transport.py] [_log()] client lang: <none>
2026-02-14T16:41:15.531 [DEBUG] [Thread-188662] [transport.py] [_log()] server lang: <none>
2026-02-14T16:41:15.531 [DEBUG] [Thread-188662] [transport.py] [_log()] kex follows: False
2026-02-14T16:41:15.531 [DEBUG] [Thread-188662] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:41:15.531 [DEBUG] [Thread-188662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:41:15.531 [DEBUG] [Thread-188662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:41:15.531 [DEBUG] [Thread-188662] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:41:15.531 [DEBUG] [Thread-188662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:41:15.531 [DEBUG] [Thread-188662] [transport.py] [_log()] Compression: none
2026-02-14T16:41:15.531 [DEBUG] [Thread-188662] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:41:15.541 [DEBUG] [Thread-188662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:41:15.542 [DEBUG] [Thread-188662] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:41:15.542 [DEBUG] [Thread-188662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:41:15.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:41:15.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:41:15.544 [DEBUG] [Thread-188662] [transport.py] [_log()] userauth is OK
2026-02-14T16:41:15.544 [DEBUG] [Thread-188662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:41:15.545 [DEBUG] [Thread-188662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:41:15.545 [DEBUG] [Thread-188662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:41:15.545 [DEBUG] [Thread-188662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:41:15.569 [INFO] [Thread-188662] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:41:15.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:41:16.246 [DEBUG] [Thread-188662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:41:16.246 [DEBUG] [Thread-188662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:41:16.246 [DEBUG] [Thread-188662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:41:16.287 [DEBUG] [Thread-188662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:41:16.287 [DEBUG] [Thread-188662] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:41:16.290 [DEBUG] [Thread-188662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:41:16.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:41:16.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:41:16.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:41:16.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:41:16.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:41:16.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:41:16.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:41:16.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:41:16.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:41:16.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.611564 -999.00  +17.10  29.35     41   +3.80 1 1 1 1 1   888    0 11.79 -45.62 ----- 37.2 29.4 170.6 42.5 21.1 -27.7 20.7 -27.5 22.1 -26.6 23.1 -26.9
2026-02-14T16:41:16.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:41:16.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:41:16.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.611564
2026-02-14T16:41:16.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:41:16.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:41:16.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:41:16.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:41:16.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:41:16.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:40:39', tmtdew=15.95, humidity=34.31, cloud=0.0, wind=36.77, temperature=17.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:40:39.130', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:41:16.314 [DEBUG] [Thread-188662] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:41:16.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T16:41:16.409 [DEBUG] [Thread-188665] [transport.py] [_log()] starting thread (client mode): 0xa57c09d0
2026-02-14T16:41:16.410 [DEBUG] [Thread-188665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:41:16.424 [DEBUG] [Thread-188665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:41:16.424 [INFO] [Thread-188665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:41:16.432 [DEBUG] [Thread-188665] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:41:16.433 [DEBUG] [Thread-188665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:41:16.434 [DEBUG] [Thread-188665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:41:16.434 [DEBUG] [Thread-188665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:41:16.434 [DEBUG] [Thread-188665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:41:16.434 [DEBUG] [Thread-188665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:41:16.434 [DEBUG] [Thread-188665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:41:16.434 [DEBUG] [Thread-188665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:41:16.434 [DEBUG] [Thread-188665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:41:16.435 [DEBUG] [Thread-188665] [transport.py] [_log()] client lang: <none>
2026-02-14T16:41:16.435 [DEBUG] [Thread-188665] [transport.py] [_log()] server lang: <none>
2026-02-14T16:41:16.435 [DEBUG] [Thread-188665] [transport.py] [_log()] kex follows: False
2026-02-14T16:41:16.435 [DEBUG] [Thread-188665] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:41:16.435 [DEBUG] [Thread-188665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:41:16.435 [DEBUG] [Thread-188665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:41:16.435 [DEBUG] [Thread-188665] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:41:16.436 [DEBUG] [Thread-188665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:41:16.436 [DEBUG] [Thread-188665] [transport.py] [_log()] Compression: none
2026-02-14T16:41:16.436 [DEBUG] [Thread-188665] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:41:16.490 [DEBUG] [Thread-188665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:41:16.491 [DEBUG] [Thread-188665] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:41:16.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:41:16.493 [DEBUG] [Thread-188665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:41:16.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:41:16.550 [DEBUG] [Thread-188665] [transport.py] [_log()] userauth is OK
2026-02-14T16:41:16.550 [DEBUG] [Thread-188665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:41:16.550 [DEBUG] [Thread-188665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:41:16.550 [DEBUG] [Thread-188665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:41:16.551 [DEBUG] [Thread-188665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:41:16.576 [INFO] [Thread-188665] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:41:16.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:41:16.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:41:17.399 [DEBUG] [Thread-188665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:41:17.400 [DEBUG] [Thread-188665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:41:17.447 [DEBUG] [Thread-188665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:41:17.448 [DEBUG] [Thread-188665] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:41:17.457 [DEBUG] [Thread-188665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:41:17.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:41:17.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-14T16:41:17.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-14T16:41:17.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:41:17.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:41:17.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:41:17.494 [DEBUG] [Thread-188665] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:41:24.753 [DEBUG] [Thread-188667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:41:31.820 [DEBUG] [Thread-188668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:41:39.806 [DEBUG] [Thread-188669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:41:47.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:41:47.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:41:47.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-14T16:41:49.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 41, 15), 15.56, 35.03, 0.0, 39.24, 17.5, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:41:49.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:41:15
2026-02-14T16:41:50.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:41:50.369 [DEBUG] [Thread-188670] [transport.py] [_log()] starting thread (client mode): 0xa2db51e0
2026-02-14T16:41:50.369 [DEBUG] [Thread-188670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:41:50.388 [DEBUG] [Thread-188670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:41:50.389 [INFO] [Thread-188670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:41:50.392 [DEBUG] [Thread-188670] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:41:50.392 [DEBUG] [Thread-188670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:41:50.392 [DEBUG] [Thread-188670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:41:50.392 [DEBUG] [Thread-188670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:41:50.392 [DEBUG] [Thread-188670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:41:50.392 [DEBUG] [Thread-188670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:41:50.393 [DEBUG] [Thread-188670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:41:50.393 [DEBUG] [Thread-188670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:41:50.393 [DEBUG] [Thread-188670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:41:50.393 [DEBUG] [Thread-188670] [transport.py] [_log()] client lang: <none>
2026-02-14T16:41:50.393 [DEBUG] [Thread-188670] [transport.py] [_log()] server lang: <none>
2026-02-14T16:41:50.393 [DEBUG] [Thread-188670] [transport.py] [_log()] kex follows: False
2026-02-14T16:41:50.393 [DEBUG] [Thread-188670] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:41:50.393 [DEBUG] [Thread-188670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:41:50.393 [DEBUG] [Thread-188670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:41:50.393 [DEBUG] [Thread-188670] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:41:50.393 [DEBUG] [Thread-188670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:41:50.394 [DEBUG] [Thread-188670] [transport.py] [_log()] Compression: none
2026-02-14T16:41:50.394 [DEBUG] [Thread-188670] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:41:50.412 [DEBUG] [Thread-188670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:41:50.413 [DEBUG] [Thread-188670] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:41:50.413 [DEBUG] [Thread-188670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:41:50.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:41:50.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:41:50.415 [DEBUG] [Thread-188670] [transport.py] [_log()] userauth is OK
2026-02-14T16:41:50.415 [DEBUG] [Thread-188670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:41:50.415 [DEBUG] [Thread-188670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:41:50.415 [DEBUG] [Thread-188670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:41:50.415 [DEBUG] [Thread-188670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:41:50.433 [INFO] [Thread-188670] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:41:50.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:41:51.059 [DEBUG] [Thread-188670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:41:51.059 [DEBUG] [Thread-188670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:41:51.060 [DEBUG] [Thread-188670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:41:51.100 [DEBUG] [Thread-188670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:41:51.100 [DEBUG] [Thread-188670] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:41:51.102 [DEBUG] [Thread-188670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:41:51.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:41:51.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:41:51.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:41:51.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:41:51.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:41:51.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:41:51.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:41:51.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:41:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:41:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.612259 -999.00  +16.70  30.56     42   +3.80 1 1 2 1 1   888    0 11.85 -40.46 ----- 29.1 30.6 156.8 39.5 21.0 -28.9 20.5 -28.0 -999.0 -999.0 22.9 -28.4
2026-02-14T16:41:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:41:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:41:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.612259
2026-02-14T16:41:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:41:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:41:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:41:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:41:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:41:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:41:15', tmtdew=15.56, humidity=35.03, cloud=0.0, wind=39.24, temperature=17.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:41:39.178', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:41:51.126 [DEBUG] [Thread-188670] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:41:51.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-14T16:41:51.209 [DEBUG] [Thread-188673] [transport.py] [_log()] starting thread (client mode): 0xa2db43a0
2026-02-14T16:41:51.210 [DEBUG] [Thread-188673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:41:51.224 [DEBUG] [Thread-188673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:41:51.224 [INFO] [Thread-188673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:41:51.231 [DEBUG] [Thread-188673] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:41:51.231 [DEBUG] [Thread-188673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:41:51.231 [DEBUG] [Thread-188673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:41:51.231 [DEBUG] [Thread-188673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:41:51.232 [DEBUG] [Thread-188673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:41:51.232 [DEBUG] [Thread-188673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:41:51.232 [DEBUG] [Thread-188673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:41:51.232 [DEBUG] [Thread-188673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:41:51.232 [DEBUG] [Thread-188673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:41:51.232 [DEBUG] [Thread-188673] [transport.py] [_log()] client lang: <none>
2026-02-14T16:41:51.232 [DEBUG] [Thread-188673] [transport.py] [_log()] server lang: <none>
2026-02-14T16:41:51.232 [DEBUG] [Thread-188673] [transport.py] [_log()] kex follows: False
2026-02-14T16:41:51.232 [DEBUG] [Thread-188673] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:41:51.232 [DEBUG] [Thread-188673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:41:51.232 [DEBUG] [Thread-188673] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:41:51.232 [DEBUG] [Thread-188673] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:41:51.232 [DEBUG] [Thread-188673] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:41:51.232 [DEBUG] [Thread-188673] [transport.py] [_log()] Compression: none
2026-02-14T16:41:51.232 [DEBUG] [Thread-188673] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:41:51.288 [DEBUG] [Thread-188673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:41:51.288 [DEBUG] [Thread-188673] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:41:51.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:41:51.288 [DEBUG] [Thread-188673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:41:51.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:41:51.346 [DEBUG] [Thread-188673] [transport.py] [_log()] userauth is OK
2026-02-14T16:41:51.346 [DEBUG] [Thread-188673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:41:51.346 [DEBUG] [Thread-188673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:41:51.346 [DEBUG] [Thread-188673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:41:51.346 [DEBUG] [Thread-188673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:41:51.365 [INFO] [Thread-188673] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:41:51.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-14T16:41:51.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:41:52.205 [DEBUG] [Thread-188673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:41:52.205 [DEBUG] [Thread-188673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:41:52.253 [DEBUG] [Thread-188673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:41:52.253 [DEBUG] [Thread-188673] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:41:52.263 [DEBUG] [Thread-188673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:41:52.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:41:52.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-14T16:41: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-14T16:41:52.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:41:52.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:41:52.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:41:52.299 [DEBUG] [Thread-188673] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:41:54.848 [DEBUG] [Thread-188675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:41:57.572 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:41:57.573 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:42:09.914 [DEBUG] [Thread-188676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:42:22.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:42:22.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:42:22.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:42:24.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 41, 52), 15.29, 35.99, 0.0, 44.62, 17.0, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:42:24.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:41:52
2026-02-14T16:42:24.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:42:24.666 [DEBUG] [Thread-188677] [transport.py] [_log()] starting thread (client mode): 0xa57c0f70
2026-02-14T16:42:24.666 [DEBUG] [Thread-188677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:42:24.688 [DEBUG] [Thread-188677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:42:24.688 [INFO] [Thread-188677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:42:24.690 [DEBUG] [Thread-188677] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:42:24.691 [DEBUG] [Thread-188677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:42:24.691 [DEBUG] [Thread-188677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:42:24.691 [DEBUG] [Thread-188677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:42:24.691 [DEBUG] [Thread-188677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:42:24.691 [DEBUG] [Thread-188677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:42:24.691 [DEBUG] [Thread-188677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:42:24.691 [DEBUG] [Thread-188677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:42:24.691 [DEBUG] [Thread-188677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:42:24.691 [DEBUG] [Thread-188677] [transport.py] [_log()] client lang: <none>
2026-02-14T16:42:24.691 [DEBUG] [Thread-188677] [transport.py] [_log()] server lang: <none>
2026-02-14T16:42:24.691 [DEBUG] [Thread-188677] [transport.py] [_log()] kex follows: False
2026-02-14T16:42:24.691 [DEBUG] [Thread-188677] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:42:24.691 [DEBUG] [Thread-188677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:42:24.691 [DEBUG] [Thread-188677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:42:24.691 [DEBUG] [Thread-188677] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:42:24.691 [DEBUG] [Thread-188677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:42:24.691 [DEBUG] [Thread-188677] [transport.py] [_log()] Compression: none
2026-02-14T16:42:24.691 [DEBUG] [Thread-188677] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:42:24.704 [DEBUG] [Thread-188677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:42:24.704 [DEBUG] [Thread-188677] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:42:24.705 [DEBUG] [Thread-188677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:42:24.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:42:24.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:42:24.706 [DEBUG] [Thread-188677] [transport.py] [_log()] userauth is OK
2026-02-14T16:42:24.706 [DEBUG] [Thread-188677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:42:24.706 [DEBUG] [Thread-188677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:42:24.706 [DEBUG] [Thread-188677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:42:24.707 [DEBUG] [Thread-188677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:42:24.720 [INFO] [Thread-188677] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:42:24.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:42:24.950 [DEBUG] [Thread-188679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:42:25.284 [DEBUG] [Thread-188677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:42:25.284 [DEBUG] [Thread-188677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:42:25.285 [DEBUG] [Thread-188677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:42:25.325 [DEBUG] [Thread-188677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:42:25.325 [DEBUG] [Thread-188677] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:42:25.328 [DEBUG] [Thread-188677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:42:25.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:42:25.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:42:25.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:42:25.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:42:25.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:42:25.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:42:25.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:42:25.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:42:25.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:42:25.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.612606 -999.00  +16.70  26.83     42   +3.90 1 1 1 1 1   888    0 12.00 -38.39 ----- 25.6 26.8 154.6 37.0 20.9 -28.5 20.4 -26.7 21.9 -26.4 22.7 -28.0
2026-02-14T16:42:25.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:42:25.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:42:25.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.612606
2026-02-14T16:42:25.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:42:25.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:42:25.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:42:25.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:42:25.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:42:25.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:41:52', tmtdew=15.29, humidity=35.99, cloud=0.0, wind=44.62, temperature=17.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:42:09.158', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:42:25.349 [DEBUG] [Thread-188677] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:42:25.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-14T16:42:25.444 [DEBUG] [Thread-188681] [transport.py] [_log()] starting thread (client mode): 0xa81d7520
2026-02-14T16:42:25.444 [DEBUG] [Thread-188681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:42:25.459 [DEBUG] [Thread-188681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:42:25.459 [INFO] [Thread-188681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:42:25.467 [DEBUG] [Thread-188681] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:42:25.467 [DEBUG] [Thread-188681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:42:25.467 [DEBUG] [Thread-188681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:42:25.467 [DEBUG] [Thread-188681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:42:25.467 [DEBUG] [Thread-188681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:42:25.467 [DEBUG] [Thread-188681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:42:25.467 [DEBUG] [Thread-188681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:42:25.467 [DEBUG] [Thread-188681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:42:25.467 [DEBUG] [Thread-188681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:42:25.467 [DEBUG] [Thread-188681] [transport.py] [_log()] client lang: <none>
2026-02-14T16:42:25.467 [DEBUG] [Thread-188681] [transport.py] [_log()] server lang: <none>
2026-02-14T16:42:25.467 [DEBUG] [Thread-188681] [transport.py] [_log()] kex follows: False
2026-02-14T16:42:25.468 [DEBUG] [Thread-188681] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:42:25.468 [DEBUG] [Thread-188681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:42:25.468 [DEBUG] [Thread-188681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:42:25.468 [DEBUG] [Thread-188681] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:42:25.468 [DEBUG] [Thread-188681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:42:25.468 [DEBUG] [Thread-188681] [transport.py] [_log()] Compression: none
2026-02-14T16:42:25.468 [DEBUG] [Thread-188681] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:42:25.526 [DEBUG] [Thread-188681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:42:25.527 [DEBUG] [Thread-188681] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:42:25.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:42:25.528 [DEBUG] [Thread-188681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:42:25.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:42:25.582 [DEBUG] [Thread-188681] [transport.py] [_log()] userauth is OK
2026-02-14T16:42:25.582 [DEBUG] [Thread-188681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:42:25.582 [DEBUG] [Thread-188681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:42:25.582 [DEBUG] [Thread-188681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:42:25.582 [DEBUG] [Thread-188681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:42:25.603 [INFO] [Thread-188681] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:42:25.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-14T16:42:25.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:42:26.411 [DEBUG] [Thread-188681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:42:26.411 [DEBUG] [Thread-188681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:42:26.459 [DEBUG] [Thread-188681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:42:26.460 [DEBUG] [Thread-188681] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:42:26.469 [DEBUG] [Thread-188681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:42:26.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:42:26.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:42:26.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-14T16:42:26.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:42:26.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:42:26.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:42:26.509 [DEBUG] [Thread-188681] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:42:31.853 [DEBUG] [Thread-188683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:42:39.991 [DEBUG] [Thread-188684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:42:55.041 [DEBUG] [Thread-188685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:42:56.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:42:56.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:42:56.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:42:57.716 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:42:57.717 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:42:58.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 42, 28), 15.14, 36.34, 0.0, 46.07, 16.93, 0, 0, 0, 2, 1, 0),)
2026-02-14T16:42:58.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:42:28
2026-02-14T16:42:58.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:42:58.832 [DEBUG] [Thread-188686] [transport.py] [_log()] starting thread (client mode): 0xa81d7fd0
2026-02-14T16:42:58.832 [DEBUG] [Thread-188686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:42:58.852 [DEBUG] [Thread-188686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:42:58.852 [INFO] [Thread-188686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:42:58.855 [DEBUG] [Thread-188686] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:42:58.855 [DEBUG] [Thread-188686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:42:58.855 [DEBUG] [Thread-188686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:42:58.855 [DEBUG] [Thread-188686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:42:58.855 [DEBUG] [Thread-188686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:42:58.855 [DEBUG] [Thread-188686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:42:58.855 [DEBUG] [Thread-188686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:42:58.855 [DEBUG] [Thread-188686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:42:58.855 [DEBUG] [Thread-188686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:42:58.855 [DEBUG] [Thread-188686] [transport.py] [_log()] client lang: <none>
2026-02-14T16:42:58.855 [DEBUG] [Thread-188686] [transport.py] [_log()] server lang: <none>
2026-02-14T16:42:58.855 [DEBUG] [Thread-188686] [transport.py] [_log()] kex follows: False
2026-02-14T16:42:58.855 [DEBUG] [Thread-188686] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:42:58.855 [DEBUG] [Thread-188686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:42:58.856 [DEBUG] [Thread-188686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:42:58.856 [DEBUG] [Thread-188686] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:42:58.856 [DEBUG] [Thread-188686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:42:58.856 [DEBUG] [Thread-188686] [transport.py] [_log()] Compression: none
2026-02-14T16:42:58.856 [DEBUG] [Thread-188686] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:42:58.871 [DEBUG] [Thread-188686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:42:58.871 [DEBUG] [Thread-188686] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:42:58.872 [DEBUG] [Thread-188686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:42:58.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:42:58.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:42:58.874 [DEBUG] [Thread-188686] [transport.py] [_log()] userauth is OK
2026-02-14T16:42:58.874 [DEBUG] [Thread-188686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:42:58.874 [DEBUG] [Thread-188686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:42:58.874 [DEBUG] [Thread-188686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:42:58.874 [DEBUG] [Thread-188686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:42:58.898 [INFO] [Thread-188686] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:42:58.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:42:59.531 [DEBUG] [Thread-188686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:42:59.531 [DEBUG] [Thread-188686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:42:59.531 [DEBUG] [Thread-188686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:42:59.572 [DEBUG] [Thread-188686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:42:59.572 [DEBUG] [Thread-188686] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:42:59.574 [DEBUG] [Thread-188686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:42:59.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:42:59.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:42:59.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:42:59.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:42:59.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:42:59.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:42:59.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:42:59.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:42:59.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:42:59.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.612953 -999.00  +16.80  27.98     42   +3.90 1 1 1 1 1   888    0 12.01 -35.67 ----- 28.7 28.0 154.7 42.8 20.9 -27.6 20.4 -27.4 21.9 -27.4 22.8 -28.1
2026-02-14T16:42:59.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:42:59.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:42:59.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.612953
2026-02-14T16:42:59.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:42:59.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:42:59.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:42:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:42:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:42:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:42:28', tmtdew=15.14, humidity=36.34, cloud=0.0, wind=46.07, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:42:39.139', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:42:59.601 [DEBUG] [Thread-188686] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:42:59.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-14T16:42:59.687 [DEBUG] [Thread-188689] [transport.py] [_log()] starting thread (client mode): 0xa57c03a0
2026-02-14T16:42:59.687 [DEBUG] [Thread-188689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:42:59.701 [DEBUG] [Thread-188689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:42:59.701 [INFO] [Thread-188689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:42:59.709 [DEBUG] [Thread-188689] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:42:59.709 [DEBUG] [Thread-188689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:42:59.709 [DEBUG] [Thread-188689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:42:59.709 [DEBUG] [Thread-188689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:42:59.709 [DEBUG] [Thread-188689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:42:59.709 [DEBUG] [Thread-188689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:42:59.709 [DEBUG] [Thread-188689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:42:59.709 [DEBUG] [Thread-188689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:42:59.709 [DEBUG] [Thread-188689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:42:59.709 [DEBUG] [Thread-188689] [transport.py] [_log()] client lang: <none>
2026-02-14T16:42:59.709 [DEBUG] [Thread-188689] [transport.py] [_log()] server lang: <none>
2026-02-14T16:42:59.710 [DEBUG] [Thread-188689] [transport.py] [_log()] kex follows: False
2026-02-14T16:42:59.710 [DEBUG] [Thread-188689] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:42:59.710 [DEBUG] [Thread-188689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:42:59.710 [DEBUG] [Thread-188689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:42:59.710 [DEBUG] [Thread-188689] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:42:59.710 [DEBUG] [Thread-188689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:42:59.710 [DEBUG] [Thread-188689] [transport.py] [_log()] Compression: none
2026-02-14T16:42:59.710 [DEBUG] [Thread-188689] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:42:59.767 [DEBUG] [Thread-188689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:42:59.767 [DEBUG] [Thread-188689] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:42:59.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:42:59.769 [DEBUG] [Thread-188689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:42:59.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:42:59.823 [DEBUG] [Thread-188689] [transport.py] [_log()] userauth is OK
2026-02-14T16:42:59.823 [DEBUG] [Thread-188689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:42:59.823 [DEBUG] [Thread-188689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:42:59.823 [DEBUG] [Thread-188689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:42:59.823 [DEBUG] [Thread-188689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:42:59.842 [INFO] [Thread-188689] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:42:59.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-14T16:42:59.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:43:00.661 [DEBUG] [Thread-188689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:43:00.662 [DEBUG] [Thread-188689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:43:00.709 [DEBUG] [Thread-188689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:43:00.709 [DEBUG] [Thread-188689] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:43:00.718 [DEBUG] [Thread-188689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:43:00.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:43:00.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-14T16:43:00.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-14T16:43:00.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:43:00.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:43:00.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:43:00.754 [DEBUG] [Thread-188689] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:43:10.076 [DEBUG] [Thread-188691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:43:25.129 [DEBUG] [Thread-188692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:43:30.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:43:30.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:43:30.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-14T16:43:31.898 [DEBUG] [Thread-188693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:43:32.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 43, 4), 15.07, 36.47, 0.0, 43.55, 16.85, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:43:32.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:43:04
2026-02-14T16:43:33.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:43:33.204 [DEBUG] [Thread-188694] [transport.py] [_log()] starting thread (client mode): 0xa57c34f0
2026-02-14T16:43:33.204 [DEBUG] [Thread-188694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:43:33.224 [DEBUG] [Thread-188694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:43:33.224 [INFO] [Thread-188694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:43:33.227 [DEBUG] [Thread-188694] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:43:33.227 [DEBUG] [Thread-188694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:43:33.227 [DEBUG] [Thread-188694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:43:33.227 [DEBUG] [Thread-188694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:43:33.228 [DEBUG] [Thread-188694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:43:33.228 [DEBUG] [Thread-188694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:43:33.228 [DEBUG] [Thread-188694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:43:33.228 [DEBUG] [Thread-188694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:43:33.228 [DEBUG] [Thread-188694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:43:33.228 [DEBUG] [Thread-188694] [transport.py] [_log()] client lang: <none>
2026-02-14T16:43:33.228 [DEBUG] [Thread-188694] [transport.py] [_log()] server lang: <none>
2026-02-14T16:43:33.228 [DEBUG] [Thread-188694] [transport.py] [_log()] kex follows: False
2026-02-14T16:43:33.228 [DEBUG] [Thread-188694] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:43:33.228 [DEBUG] [Thread-188694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:43:33.228 [DEBUG] [Thread-188694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:43:33.228 [DEBUG] [Thread-188694] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:43:33.228 [DEBUG] [Thread-188694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:43:33.228 [DEBUG] [Thread-188694] [transport.py] [_log()] Compression: none
2026-02-14T16:43:33.228 [DEBUG] [Thread-188694] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:43:33.249 [DEBUG] [Thread-188694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:43:33.250 [DEBUG] [Thread-188694] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:43:33.250 [DEBUG] [Thread-188694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:43:33.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:43:33.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:43:33.252 [DEBUG] [Thread-188694] [transport.py] [_log()] userauth is OK
2026-02-14T16:43:33.253 [DEBUG] [Thread-188694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:43:33.253 [DEBUG] [Thread-188694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:43:33.253 [DEBUG] [Thread-188694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:43:33.253 [DEBUG] [Thread-188694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:43:33.277 [INFO] [Thread-188694] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:43:33.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:43:33.917 [DEBUG] [Thread-188694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:43:33.918 [DEBUG] [Thread-188694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:43:33.918 [DEBUG] [Thread-188694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:43:33.958 [DEBUG] [Thread-188694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:43:33.958 [DEBUG] [Thread-188694] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:43:33.962 [DEBUG] [Thread-188694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:43:33.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:43:33.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:43:33.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:43:33.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:43:33.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:43:33.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:43:33.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:43:33.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:43:33.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:43:33.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.613300 -999.00  +16.50  31.15     42   +3.80 1 1 2 1 1   888    0 12.15 -35.50 ----- 29.4 31.1 167.0 38.7 20.8 -27.9 20.4 -26.8 21.8 -26.0 22.6 -29.1
2026-02-14T16:43:33.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:43:33.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:43:33.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.613300
2026-02-14T16:43:33.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:43:33.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:43:33.987 [DEBUG] [Thread-188694] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:43:33.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:43:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:43:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:43:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:43:04', tmtdew=15.07, humidity=36.47, cloud=0.0, wind=43.55, temperature=16.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:43:09.120', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:43:34.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T16:43:34.079 [DEBUG] [Thread-188697] [transport.py] [_log()] starting thread (client mode): 0xa57c38e0
2026-02-14T16:43:34.079 [DEBUG] [Thread-188697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:43:34.094 [DEBUG] [Thread-188697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:43:34.094 [INFO] [Thread-188697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:43:34.101 [DEBUG] [Thread-188697] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:43:34.102 [DEBUG] [Thread-188697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:43:34.102 [DEBUG] [Thread-188697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:43:34.102 [DEBUG] [Thread-188697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:43:34.102 [DEBUG] [Thread-188697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:43:34.102 [DEBUG] [Thread-188697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:43:34.102 [DEBUG] [Thread-188697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:43:34.103 [DEBUG] [Thread-188697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:43:34.103 [DEBUG] [Thread-188697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:43:34.103 [DEBUG] [Thread-188697] [transport.py] [_log()] client lang: <none>
2026-02-14T16:43:34.103 [DEBUG] [Thread-188697] [transport.py] [_log()] server lang: <none>
2026-02-14T16:43:34.103 [DEBUG] [Thread-188697] [transport.py] [_log()] kex follows: False
2026-02-14T16:43:34.103 [DEBUG] [Thread-188697] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:43:34.103 [DEBUG] [Thread-188697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:43:34.103 [DEBUG] [Thread-188697] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:43:34.104 [DEBUG] [Thread-188697] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:43:34.104 [DEBUG] [Thread-188697] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:43:34.104 [DEBUG] [Thread-188697] [transport.py] [_log()] Compression: none
2026-02-14T16:43:34.104 [DEBUG] [Thread-188697] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:43:34.160 [DEBUG] [Thread-188697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:43:34.161 [DEBUG] [Thread-188697] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:43:34.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:43:34.162 [DEBUG] [Thread-188697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:43:34.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:43:34.220 [DEBUG] [Thread-188697] [transport.py] [_log()] userauth is OK
2026-02-14T16:43:34.220 [DEBUG] [Thread-188697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:43:34.220 [DEBUG] [Thread-188697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:43:34.220 [DEBUG] [Thread-188697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:43:34.220 [DEBUG] [Thread-188697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:43:34.239 [INFO] [Thread-188697] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:43:34.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-14T16:43:34.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:43:35.017 [DEBUG] [Thread-188697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:43:35.017 [DEBUG] [Thread-188697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:43:35.066 [DEBUG] [Thread-188697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:43:35.066 [DEBUG] [Thread-188697] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:43:35.074 [DEBUG] [Thread-188697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:43:35.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:43:35.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-14T16:43:35.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-14T16:43:35.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:43:35.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:43:35.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:43:35.106 [DEBUG] [Thread-188697] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:43:40.165 [DEBUG] [Thread-188699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:43:55.216 [DEBUG] [Thread-188700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:43:57.858 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:43:57.860 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:44:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:44:05.118 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:44:05.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:44:06.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 43, 39), 15.27, 35.81, 0.0, 40.36, 17.24, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:44:06.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:43:39
2026-02-14T16:44:07.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:44:07.475 [DEBUG] [Thread-188701] [transport.py] [_log()] starting thread (client mode): 0xa57c2cb0
2026-02-14T16:44:07.475 [DEBUG] [Thread-188701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:44:07.495 [DEBUG] [Thread-188701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:44:07.495 [INFO] [Thread-188701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:44:07.498 [DEBUG] [Thread-188701] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:44:07.499 [DEBUG] [Thread-188701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:44:07.499 [DEBUG] [Thread-188701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:44:07.499 [DEBUG] [Thread-188701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:44:07.499 [DEBUG] [Thread-188701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:44:07.499 [DEBUG] [Thread-188701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:44:07.499 [DEBUG] [Thread-188701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:44:07.499 [DEBUG] [Thread-188701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:44:07.499 [DEBUG] [Thread-188701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:44:07.499 [DEBUG] [Thread-188701] [transport.py] [_log()] client lang: <none>
2026-02-14T16:44:07.499 [DEBUG] [Thread-188701] [transport.py] [_log()] server lang: <none>
2026-02-14T16:44:07.499 [DEBUG] [Thread-188701] [transport.py] [_log()] kex follows: False
2026-02-14T16:44:07.499 [DEBUG] [Thread-188701] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:44:07.499 [DEBUG] [Thread-188701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:44:07.499 [DEBUG] [Thread-188701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:44:07.499 [DEBUG] [Thread-188701] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:44:07.499 [DEBUG] [Thread-188701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:44:07.499 [DEBUG] [Thread-188701] [transport.py] [_log()] Compression: none
2026-02-14T16:44:07.499 [DEBUG] [Thread-188701] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:44:07.513 [DEBUG] [Thread-188701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:44:07.514 [DEBUG] [Thread-188701] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:44:07.514 [DEBUG] [Thread-188701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:44:07.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:44:07.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:44:07.515 [DEBUG] [Thread-188701] [transport.py] [_log()] userauth is OK
2026-02-14T16:44:07.515 [DEBUG] [Thread-188701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:44:07.515 [DEBUG] [Thread-188701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:44:07.515 [DEBUG] [Thread-188701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:44:07.515 [DEBUG] [Thread-188701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:44:07.525 [INFO] [Thread-188701] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:44:07.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:44:08.142 [DEBUG] [Thread-188701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:44:08.142 [DEBUG] [Thread-188701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:44:08.142 [DEBUG] [Thread-188701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:44:08.183 [DEBUG] [Thread-188701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:44:08.183 [DEBUG] [Thread-188701] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:44:08.186 [DEBUG] [Thread-188701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:44:08.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:44:08.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:44:08.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:44:08.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:44:08.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:44:08.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:44:08.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:44:08.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:44:08.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:44:08.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.613648 -999.00  +16.50  30.61     43   +3.90 1 1 2 1 1   888    0 12.07 -36.60 ----- 30.8 30.6 159.8 37.8 20.8 -28.5 20.4 -26.9 21.8 -25.5 22.7 -27.4
2026-02-14T16:44:08.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:44:08.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:44:08.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.613648
2026-02-14T16:44:08.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:44:08.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:44:08.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:44:08.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:44:08.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:44:08.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:43:39', tmtdew=15.27, humidity=35.81, cloud=0.0, wind=40.36, temperature=17.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:43:39.187', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:44:08.209 [DEBUG] [Thread-188701] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:44:08.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-14T16:44:08.298 [DEBUG] [Thread-188704] [transport.py] [_log()] starting thread (client mode): 0xa81d4ac0
2026-02-14T16:44:08.298 [DEBUG] [Thread-188704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:44:08.312 [DEBUG] [Thread-188704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:44:08.313 [INFO] [Thread-188704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:44:08.320 [DEBUG] [Thread-188704] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:44:08.321 [DEBUG] [Thread-188704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:44:08.321 [DEBUG] [Thread-188704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:44:08.321 [DEBUG] [Thread-188704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:44:08.321 [DEBUG] [Thread-188704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:44:08.321 [DEBUG] [Thread-188704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:44:08.321 [DEBUG] [Thread-188704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:44:08.321 [DEBUG] [Thread-188704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:44:08.321 [DEBUG] [Thread-188704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:44:08.321 [DEBUG] [Thread-188704] [transport.py] [_log()] client lang: <none>
2026-02-14T16:44:08.321 [DEBUG] [Thread-188704] [transport.py] [_log()] server lang: <none>
2026-02-14T16:44:08.321 [DEBUG] [Thread-188704] [transport.py] [_log()] kex follows: False
2026-02-14T16:44:08.321 [DEBUG] [Thread-188704] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:44:08.321 [DEBUG] [Thread-188704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:44:08.321 [DEBUG] [Thread-188704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:44:08.321 [DEBUG] [Thread-188704] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:44:08.322 [DEBUG] [Thread-188704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:44:08.322 [DEBUG] [Thread-188704] [transport.py] [_log()] Compression: none
2026-02-14T16:44:08.322 [DEBUG] [Thread-188704] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:44:08.379 [DEBUG] [Thread-188704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:44:08.380 [DEBUG] [Thread-188704] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:44:08.381 [DEBUG] [Thread-188704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:44:08.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:44:08.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:44:08.436 [DEBUG] [Thread-188704] [transport.py] [_log()] userauth is OK
2026-02-14T16:44:08.436 [DEBUG] [Thread-188704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:44:08.436 [DEBUG] [Thread-188704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:44:08.436 [DEBUG] [Thread-188704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:44:08.437 [DEBUG] [Thread-188704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:44:08.456 [INFO] [Thread-188704] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:44:08.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-14T16:44:08.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:44:09.264 [DEBUG] [Thread-188704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:44:09.264 [DEBUG] [Thread-188704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:44:09.312 [DEBUG] [Thread-188704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:44:09.312 [DEBUG] [Thread-188704] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:44:09.321 [DEBUG] [Thread-188704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:44:09.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:44: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')
2026-02-14T16:44:09.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-14T16:44:09.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:44:09.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:44:09.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:44:09.356 [DEBUG] [Thread-188704] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:44:10.255 [DEBUG] [Thread-188706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:44:25.312 [DEBUG] [Thread-188707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:44:31.944 [DEBUG] [Thread-188708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:44:39.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:44:39.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:44:39.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-14T16:44:40.347 [DEBUG] [Thread-188709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:44:41.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 44, 14), 14.37, 37.84, 0.0, 32.59, 16.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:44:41.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:44:14
2026-02-14T16:44:41.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:44:42.044 [DEBUG] [Thread-188710] [transport.py] [_log()] starting thread (client mode): 0xa81d6050
2026-02-14T16:44:42.044 [DEBUG] [Thread-188710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:44:42.066 [DEBUG] [Thread-188710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:44:42.066 [INFO] [Thread-188710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:44:42.069 [DEBUG] [Thread-188710] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:44:42.070 [DEBUG] [Thread-188710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:44:42.070 [DEBUG] [Thread-188710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:44:42.070 [DEBUG] [Thread-188710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:44:42.070 [DEBUG] [Thread-188710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:44:42.070 [DEBUG] [Thread-188710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:44:42.070 [DEBUG] [Thread-188710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:44:42.070 [DEBUG] [Thread-188710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:44:42.070 [DEBUG] [Thread-188710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:44:42.070 [DEBUG] [Thread-188710] [transport.py] [_log()] client lang: <none>
2026-02-14T16:44:42.070 [DEBUG] [Thread-188710] [transport.py] [_log()] server lang: <none>
2026-02-14T16:44:42.070 [DEBUG] [Thread-188710] [transport.py] [_log()] kex follows: False
2026-02-14T16:44:42.070 [DEBUG] [Thread-188710] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:44:42.071 [DEBUG] [Thread-188710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:44:42.071 [DEBUG] [Thread-188710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:44:42.071 [DEBUG] [Thread-188710] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:44:42.071 [DEBUG] [Thread-188710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:44:42.071 [DEBUG] [Thread-188710] [transport.py] [_log()] Compression: none
2026-02-14T16:44:42.071 [DEBUG] [Thread-188710] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:44:42.090 [DEBUG] [Thread-188710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:44:42.090 [DEBUG] [Thread-188710] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:44:42.091 [DEBUG] [Thread-188710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:44:42.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:44:42.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:44:42.093 [DEBUG] [Thread-188710] [transport.py] [_log()] userauth is OK
2026-02-14T16:44:42.094 [DEBUG] [Thread-188710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:44:42.094 [DEBUG] [Thread-188710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:44:42.094 [DEBUG] [Thread-188710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:44:42.094 [DEBUG] [Thread-188710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:44:42.119 [INFO] [Thread-188710] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:44:42.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:44:42.762 [DEBUG] [Thread-188710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:44:42.762 [DEBUG] [Thread-188710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:44:42.763 [DEBUG] [Thread-188710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:44:42.803 [DEBUG] [Thread-188710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:44:42.804 [DEBUG] [Thread-188710] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:44:42.807 [DEBUG] [Thread-188710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:44:42.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:44:42.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:44:42.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:44:42.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:44:42.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:44:42.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:44:42.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:44:42.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:44:42.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:44:42.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.613995 -999.00  +16.50  35.08     43   +3.90 1 1 2 1 1   888    0 11.88 -39.11 ----- 27.3 35.1 165.8 46.8 20.8 -29.1 20.1 -27.6 21.8 -25.7 22.7 -28.6
2026-02-14T16:44:42.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:44:42.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:44:42.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.613995
2026-02-14T16:44:42.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:44:42.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:44:42.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:44:42.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:44:42.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:44:42.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:44:14', tmtdew=14.37, humidity=37.84, cloud=0.0, wind=32.59, temperature=16.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:44:09.168', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:44:42.834 [DEBUG] [Thread-188710] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:44:42.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-14T16:44:42.934 [DEBUG] [Thread-188713] [transport.py] [_log()] starting thread (client mode): 0xa57c0c40
2026-02-14T16:44:42.934 [DEBUG] [Thread-188713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:44:42.949 [DEBUG] [Thread-188713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:44:42.949 [INFO] [Thread-188713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:44:42.956 [DEBUG] [Thread-188713] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:44:42.957 [DEBUG] [Thread-188713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:44:42.957 [DEBUG] [Thread-188713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:44:42.957 [DEBUG] [Thread-188713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:44:42.957 [DEBUG] [Thread-188713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:44:42.957 [DEBUG] [Thread-188713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:44:42.957 [DEBUG] [Thread-188713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:44:42.957 [DEBUG] [Thread-188713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:44:42.957 [DEBUG] [Thread-188713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:44:42.957 [DEBUG] [Thread-188713] [transport.py] [_log()] client lang: <none>
2026-02-14T16:44:42.957 [DEBUG] [Thread-188713] [transport.py] [_log()] server lang: <none>
2026-02-14T16:44:42.957 [DEBUG] [Thread-188713] [transport.py] [_log()] kex follows: False
2026-02-14T16:44:42.957 [DEBUG] [Thread-188713] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:44:42.958 [DEBUG] [Thread-188713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:44:42.958 [DEBUG] [Thread-188713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:44:42.958 [DEBUG] [Thread-188713] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:44:42.958 [DEBUG] [Thread-188713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:44:42.958 [DEBUG] [Thread-188713] [transport.py] [_log()] Compression: none
2026-02-14T16:44:42.958 [DEBUG] [Thread-188713] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:44:43.015 [DEBUG] [Thread-188713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:44:43.016 [DEBUG] [Thread-188713] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:44:43.016 [DEBUG] [Thread-188713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:44:43.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:44:43.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:44:43.071 [DEBUG] [Thread-188713] [transport.py] [_log()] userauth is OK
2026-02-14T16:44:43.072 [DEBUG] [Thread-188713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:44:43.072 [DEBUG] [Thread-188713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:44:43.072 [DEBUG] [Thread-188713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:44:43.072 [DEBUG] [Thread-188713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:44:43.094 [INFO] [Thread-188713] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:44:43.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-14T16:44:43.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:44:43.917 [DEBUG] [Thread-188713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:44:43.917 [DEBUG] [Thread-188713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:44:43.965 [DEBUG] [Thread-188713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:44:43.966 [DEBUG] [Thread-188713] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:44:43.974 [DEBUG] [Thread-188713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:44:43.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:44:43.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-14T16:44:43.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:44:44.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:44:44.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:44:44.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:44:44.010 [DEBUG] [Thread-188713] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:44:55.379 [DEBUG] [Thread-188715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:44:58.000 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:44:58.001 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:45:10.427 [DEBUG] [Thread-188716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:45:14.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:45:14.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:45:14.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-14T16:45:15.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 44, 51), 14.68, 37.37, 0.0, 44.3, 16.75, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:45:15.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:44:51
2026-02-14T16:45:16.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:45:16.366 [DEBUG] [Thread-188717] [transport.py] [_log()] starting thread (client mode): 0xa57c19c0
2026-02-14T16:45:16.366 [DEBUG] [Thread-188717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:45:16.386 [DEBUG] [Thread-188717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:45:16.386 [INFO] [Thread-188717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:45:16.389 [DEBUG] [Thread-188717] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:45:16.390 [DEBUG] [Thread-188717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:45:16.390 [DEBUG] [Thread-188717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:45:16.390 [DEBUG] [Thread-188717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:45:16.390 [DEBUG] [Thread-188717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:45:16.390 [DEBUG] [Thread-188717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:45:16.390 [DEBUG] [Thread-188717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:45:16.390 [DEBUG] [Thread-188717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:45:16.390 [DEBUG] [Thread-188717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:45:16.390 [DEBUG] [Thread-188717] [transport.py] [_log()] client lang: <none>
2026-02-14T16:45:16.390 [DEBUG] [Thread-188717] [transport.py] [_log()] server lang: <none>
2026-02-14T16:45:16.390 [DEBUG] [Thread-188717] [transport.py] [_log()] kex follows: False
2026-02-14T16:45:16.390 [DEBUG] [Thread-188717] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:45:16.391 [DEBUG] [Thread-188717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:45:16.391 [DEBUG] [Thread-188717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:45:16.391 [DEBUG] [Thread-188717] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:45:16.391 [DEBUG] [Thread-188717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:45:16.391 [DEBUG] [Thread-188717] [transport.py] [_log()] Compression: none
2026-02-14T16:45:16.391 [DEBUG] [Thread-188717] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:45:16.410 [DEBUG] [Thread-188717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:45:16.411 [DEBUG] [Thread-188717] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:45:16.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:45:16.412 [DEBUG] [Thread-188717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:45:16.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:45:16.414 [DEBUG] [Thread-188717] [transport.py] [_log()] userauth is OK
2026-02-14T16:45:16.415 [DEBUG] [Thread-188717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:45:16.415 [DEBUG] [Thread-188717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:45:16.415 [DEBUG] [Thread-188717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:45:16.416 [DEBUG] [Thread-188717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:45:16.432 [INFO] [Thread-188717] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:45:16.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:45:17.016 [DEBUG] [Thread-188717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:45:17.016 [DEBUG] [Thread-188717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:45:17.016 [DEBUG] [Thread-188717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:45:17.057 [DEBUG] [Thread-188717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:45:17.058 [DEBUG] [Thread-188717] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:45:17.061 [DEBUG] [Thread-188717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:45:17.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:45:17.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:45:17.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:45:17.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:45:17.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:45:17.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:45:17.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:45:17.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:45:17.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:45:17.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.614342 -999.00  +16.60  26.98     42   +3.80 1 1 1 1 1   888    0 12.05 -39.59 ----- 31.4 27.0 163.0 39.4 20.8 -27.3 20.3 -26.9 21.7 -26.0 22.6 -28.4
2026-02-14T16:45:17.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:45:17.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:45:17.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.614342
2026-02-14T16:45:17.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:45:17.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:45:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:45:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:45:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:45:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:44:51', tmtdew=14.68, humidity=37.37, cloud=0.0, wind=44.3, temperature=16.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:44:39.149', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:45:17.090 [DEBUG] [Thread-188717] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:45:17.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T16:45:17.183 [DEBUG] [Thread-188720] [transport.py] [_log()] starting thread (client mode): 0xa5758fa0
2026-02-14T16:45:17.184 [DEBUG] [Thread-188720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:45:17.200 [DEBUG] [Thread-188720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:45:17.200 [INFO] [Thread-188720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:45:17.211 [DEBUG] [Thread-188720] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:45:17.212 [DEBUG] [Thread-188720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:45:17.212 [DEBUG] [Thread-188720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:45:17.212 [DEBUG] [Thread-188720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:45:17.212 [DEBUG] [Thread-188720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:45:17.212 [DEBUG] [Thread-188720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:45:17.212 [DEBUG] [Thread-188720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:45:17.212 [DEBUG] [Thread-188720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:45:17.212 [DEBUG] [Thread-188720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:45:17.212 [DEBUG] [Thread-188720] [transport.py] [_log()] client lang: <none>
2026-02-14T16:45:17.212 [DEBUG] [Thread-188720] [transport.py] [_log()] server lang: <none>
2026-02-14T16:45:17.212 [DEBUG] [Thread-188720] [transport.py] [_log()] kex follows: False
2026-02-14T16:45:17.212 [DEBUG] [Thread-188720] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:45:17.212 [DEBUG] [Thread-188720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:45:17.213 [DEBUG] [Thread-188720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:45:17.213 [DEBUG] [Thread-188720] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:45:17.213 [DEBUG] [Thread-188720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:45:17.213 [DEBUG] [Thread-188720] [transport.py] [_log()] Compression: none
2026-02-14T16:45:17.213 [DEBUG] [Thread-188720] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:45:17.268 [DEBUG] [Thread-188720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:45:17.269 [DEBUG] [Thread-188720] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:45:17.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:45:17.270 [DEBUG] [Thread-188720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:45:17.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:45:17.324 [DEBUG] [Thread-188720] [transport.py] [_log()] userauth is OK
2026-02-14T16:45:17.325 [DEBUG] [Thread-188720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:45:17.325 [DEBUG] [Thread-188720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:45:17.325 [DEBUG] [Thread-188720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:45:17.325 [DEBUG] [Thread-188720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:45:17.343 [INFO] [Thread-188720] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:45:17.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-14T16:45:17.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:45:18.185 [DEBUG] [Thread-188720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:45:18.185 [DEBUG] [Thread-188720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:45:18.234 [DEBUG] [Thread-188720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:45:18.234 [DEBUG] [Thread-188720] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:45:18.243 [DEBUG] [Thread-188720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:45:18.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:45:18.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-14T16:45:18.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-14T16:45:18.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:45:18.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:45:18.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:45:18.278 [DEBUG] [Thread-188720] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:45:25.465 [DEBUG] [Thread-188722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:45:31.989 [DEBUG] [Thread-188723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:45:40.518 [DEBUG] [Thread-188724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:45:48.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:45:48.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:45:48.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:45:50.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 45, 26), 14.58, 37.59, 0.0, 45.08, 16.58, 0, 0, 0, 2, 1, 0),)
2026-02-14T16:45:50.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:45:26
2026-02-14T16:45:50.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:45:51.013 [DEBUG] [Thread-188725] [transport.py] [_log()] starting thread (client mode): 0xa57c3580
2026-02-14T16:45:51.013 [DEBUG] [Thread-188725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:45:51.033 [DEBUG] [Thread-188725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:45:51.033 [INFO] [Thread-188725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:45:51.036 [DEBUG] [Thread-188725] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:45:51.036 [DEBUG] [Thread-188725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:45:51.036 [DEBUG] [Thread-188725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:45:51.036 [DEBUG] [Thread-188725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:45:51.036 [DEBUG] [Thread-188725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:45:51.036 [DEBUG] [Thread-188725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:45:51.036 [DEBUG] [Thread-188725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:45:51.036 [DEBUG] [Thread-188725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:45:51.036 [DEBUG] [Thread-188725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:45:51.036 [DEBUG] [Thread-188725] [transport.py] [_log()] client lang: <none>
2026-02-14T16:45:51.037 [DEBUG] [Thread-188725] [transport.py] [_log()] server lang: <none>
2026-02-14T16:45:51.037 [DEBUG] [Thread-188725] [transport.py] [_log()] kex follows: False
2026-02-14T16:45:51.037 [DEBUG] [Thread-188725] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:45:51.037 [DEBUG] [Thread-188725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:45:51.037 [DEBUG] [Thread-188725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:45:51.037 [DEBUG] [Thread-188725] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:45:51.037 [DEBUG] [Thread-188725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:45:51.037 [DEBUG] [Thread-188725] [transport.py] [_log()] Compression: none
2026-02-14T16:45:51.037 [DEBUG] [Thread-188725] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:45:51.051 [DEBUG] [Thread-188725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:45:51.052 [DEBUG] [Thread-188725] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:45:51.052 [DEBUG] [Thread-188725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:45:51.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:45:51.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:45:51.054 [DEBUG] [Thread-188725] [transport.py] [_log()] userauth is OK
2026-02-14T16:45:51.054 [DEBUG] [Thread-188725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:45:51.054 [DEBUG] [Thread-188725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:45:51.054 [DEBUG] [Thread-188725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:45:51.054 [DEBUG] [Thread-188725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:45:51.072 [INFO] [Thread-188725] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:45:51.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:45:51.673 [DEBUG] [Thread-188725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:45:51.673 [DEBUG] [Thread-188725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:45:51.674 [DEBUG] [Thread-188725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:45:51.714 [DEBUG] [Thread-188725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:45:51.715 [DEBUG] [Thread-188725] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:45:51.718 [DEBUG] [Thread-188725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:45:51.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:45:51.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:45:51.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:45:51.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:45:51.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:45:51.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:45:51.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:45:51.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:45:51.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:45:51.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.614689 -999.00  +16.70  24.49     42   +3.90 1 1 1 1 1   888    0 11.91 -39.09 ----- 25.7 24.5 150.8 42.6 20.8 -28.4 20.2 -27.3 21.8 -25.5 22.6 -27.2
2026-02-14T16:45:51.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:45:51.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:45:51.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.614689
2026-02-14T16:45:51.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:45:51.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:45:51.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:45:51.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:45:51.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:45:51.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:45:26', tmtdew=14.58, humidity=37.59, cloud=0.0, wind=45.08, temperature=16.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:45:09.130', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:45:51.748 [DEBUG] [Thread-188725] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:45:51.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T16:45:51.846 [DEBUG] [Thread-188728] [transport.py] [_log()] starting thread (client mode): 0xa57c03d0
2026-02-14T16:45:51.847 [DEBUG] [Thread-188728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:45:51.865 [DEBUG] [Thread-188728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:45:51.865 [INFO] [Thread-188728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:45:51.872 [DEBUG] [Thread-188728] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:45:51.873 [DEBUG] [Thread-188728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:45:51.873 [DEBUG] [Thread-188728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:45:51.873 [DEBUG] [Thread-188728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:45:51.873 [DEBUG] [Thread-188728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:45:51.873 [DEBUG] [Thread-188728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:45:51.873 [DEBUG] [Thread-188728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:45:51.873 [DEBUG] [Thread-188728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:45:51.873 [DEBUG] [Thread-188728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:45:51.873 [DEBUG] [Thread-188728] [transport.py] [_log()] client lang: <none>
2026-02-14T16:45:51.873 [DEBUG] [Thread-188728] [transport.py] [_log()] server lang: <none>
2026-02-14T16:45:51.873 [DEBUG] [Thread-188728] [transport.py] [_log()] kex follows: False
2026-02-14T16:45:51.873 [DEBUG] [Thread-188728] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:45:51.873 [DEBUG] [Thread-188728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:45:51.873 [DEBUG] [Thread-188728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:45:51.874 [DEBUG] [Thread-188728] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:45:51.874 [DEBUG] [Thread-188728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:45:51.874 [DEBUG] [Thread-188728] [transport.py] [_log()] Compression: none
2026-02-14T16:45:51.874 [DEBUG] [Thread-188728] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:45:51.934 [DEBUG] [Thread-188728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:45:51.934 [DEBUG] [Thread-188728] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:45:51.935 [DEBUG] [Thread-188728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:45:51.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:45:51.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:45:51.992 [DEBUG] [Thread-188728] [transport.py] [_log()] userauth is OK
2026-02-14T16:45:51.993 [DEBUG] [Thread-188728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:45:51.993 [DEBUG] [Thread-188728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:45:51.993 [DEBUG] [Thread-188728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:45:51.993 [DEBUG] [Thread-188728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:45:52.012 [INFO] [Thread-188728] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:45:52.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-14T16:45:52.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:45:52.826 [DEBUG] [Thread-188728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:45:52.827 [DEBUG] [Thread-188728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:45:52.874 [DEBUG] [Thread-188728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:45:52.874 [DEBUG] [Thread-188728] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:45:52.883 [DEBUG] [Thread-188728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:45:52.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:45:52.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:45:52.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-14T16:45:52.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:45:52.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:45:52.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:45:52.916 [DEBUG] [Thread-188728] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:45:55.555 [DEBUG] [Thread-188730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:45:58.142 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:45:58.143 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:46:10.608 [DEBUG] [Thread-188731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:46:22.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:46:22.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:46:22.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-14T16:46:24.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 46, 1), 14.81, 37.01, 0.0, 38.64, 16.65, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:46:24.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:46:01
2026-02-14T16:46:25.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:46:25.267 [DEBUG] [Thread-188732] [transport.py] [_log()] starting thread (client mode): 0xa2dc1bd0
2026-02-14T16:46:25.268 [DEBUG] [Thread-188732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:46:25.286 [DEBUG] [Thread-188732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:46:25.287 [INFO] [Thread-188732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:46:25.289 [DEBUG] [Thread-188732] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:46:25.290 [DEBUG] [Thread-188732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:46:25.290 [DEBUG] [Thread-188732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:46:25.290 [DEBUG] [Thread-188732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:46:25.290 [DEBUG] [Thread-188732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:46:25.290 [DEBUG] [Thread-188732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:46:25.290 [DEBUG] [Thread-188732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:46:25.290 [DEBUG] [Thread-188732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:46:25.290 [DEBUG] [Thread-188732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:46:25.290 [DEBUG] [Thread-188732] [transport.py] [_log()] client lang: <none>
2026-02-14T16:46:25.290 [DEBUG] [Thread-188732] [transport.py] [_log()] server lang: <none>
2026-02-14T16:46:25.290 [DEBUG] [Thread-188732] [transport.py] [_log()] kex follows: False
2026-02-14T16:46:25.290 [DEBUG] [Thread-188732] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:46:25.290 [DEBUG] [Thread-188732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:46:25.290 [DEBUG] [Thread-188732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:46:25.291 [DEBUG] [Thread-188732] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:46:25.291 [DEBUG] [Thread-188732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:46:25.291 [DEBUG] [Thread-188732] [transport.py] [_log()] Compression: none
2026-02-14T16:46:25.291 [DEBUG] [Thread-188732] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:46:25.306 [DEBUG] [Thread-188732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:46:25.306 [DEBUG] [Thread-188732] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:46:25.306 [DEBUG] [Thread-188732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:46:25.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:46:25.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:46:25.307 [DEBUG] [Thread-188732] [transport.py] [_log()] userauth is OK
2026-02-14T16:46:25.307 [DEBUG] [Thread-188732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:46:25.307 [DEBUG] [Thread-188732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:46:25.307 [DEBUG] [Thread-188732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:46:25.307 [DEBUG] [Thread-188732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:46:25.326 [INFO] [Thread-188732] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:46:25.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:46:25.648 [DEBUG] [Thread-188734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:46:25.948 [DEBUG] [Thread-188732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:46:25.948 [DEBUG] [Thread-188732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:46:25.948 [DEBUG] [Thread-188732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:46:25.989 [DEBUG] [Thread-188732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:46:25.989 [DEBUG] [Thread-188732] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:46:25.992 [DEBUG] [Thread-188732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:46:26.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:46:26.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:46:26.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:46:26.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:46:26.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:46:26.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:46:26.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:46:26.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:46:26.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:46:26.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.615384 -999.00  +16.60  26.45     42   +3.80 1 1 1 1 1   888    0 11.79 -39.14 ----- 33.6 26.4 167.2 37.6 20.8 -27.3 20.3 -26.2 21.7 -26.8 22.6 -27.7
2026-02-14T16:46:26.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:46:26.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:46:26.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.615384
2026-02-14T16:46:26.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:46:26.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:46:26.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:46:26.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:46:26.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:46:26.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:46:01', tmtdew=14.81, humidity=37.01, cloud=0.0, wind=38.64, temperature=16.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:46:09.178', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:46:26.020 [DEBUG] [Thread-188732] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:46:26.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-14T16:46:26.115 [DEBUG] [Thread-188736] [transport.py] [_log()] starting thread (client mode): 0xa2d23490
2026-02-14T16:46:26.115 [DEBUG] [Thread-188736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:46:26.130 [DEBUG] [Thread-188736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:46:26.130 [INFO] [Thread-188736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:46:26.137 [DEBUG] [Thread-188736] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:46:26.137 [DEBUG] [Thread-188736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:46:26.137 [DEBUG] [Thread-188736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:46:26.137 [DEBUG] [Thread-188736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:46:26.138 [DEBUG] [Thread-188736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:46:26.138 [DEBUG] [Thread-188736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:46:26.138 [DEBUG] [Thread-188736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:46:26.138 [DEBUG] [Thread-188736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:46:26.138 [DEBUG] [Thread-188736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:46:26.138 [DEBUG] [Thread-188736] [transport.py] [_log()] client lang: <none>
2026-02-14T16:46:26.138 [DEBUG] [Thread-188736] [transport.py] [_log()] server lang: <none>
2026-02-14T16:46:26.138 [DEBUG] [Thread-188736] [transport.py] [_log()] kex follows: False
2026-02-14T16:46:26.138 [DEBUG] [Thread-188736] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:46:26.138 [DEBUG] [Thread-188736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:46:26.138 [DEBUG] [Thread-188736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:46:26.138 [DEBUG] [Thread-188736] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:46:26.138 [DEBUG] [Thread-188736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:46:26.138 [DEBUG] [Thread-188736] [transport.py] [_log()] Compression: none
2026-02-14T16:46:26.138 [DEBUG] [Thread-188736] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:46:26.197 [DEBUG] [Thread-188736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:46:26.198 [DEBUG] [Thread-188736] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:46:26.198 [DEBUG] [Thread-188736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:46:26.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:46:26.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:46:26.257 [DEBUG] [Thread-188736] [transport.py] [_log()] userauth is OK
2026-02-14T16:46:26.258 [DEBUG] [Thread-188736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:46:26.258 [DEBUG] [Thread-188736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:46:26.258 [DEBUG] [Thread-188736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:46:26.258 [DEBUG] [Thread-188736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:46:26.282 [INFO] [Thread-188736] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:46:26.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-14T16:46:26.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:46:27.123 [DEBUG] [Thread-188736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:46:27.123 [DEBUG] [Thread-188736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:46:27.172 [DEBUG] [Thread-188736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:46:27.172 [DEBUG] [Thread-188736] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:46:27.183 [DEBUG] [Thread-188736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:46:27.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:46:27.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:46:27.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-14T16:46:27.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:46:27.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:46:27.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:46:27.222 [DEBUG] [Thread-188736] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:46:32.036 [DEBUG] [Thread-188738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:46:40.690 [DEBUG] [Thread-188739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:46:55.751 [DEBUG] [Thread-188740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:46:57.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:46:57.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:46:57.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:46:58.281 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:46:58.283 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:46:59.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 46, 37), 15.68, 34.84, 0.0, 41.78, 17.54, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:46:59.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:46:37
2026-02-14T16:46:59.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:46:59.569 [DEBUG] [Thread-188741] [transport.py] [_log()] starting thread (client mode): 0xa57c2680
2026-02-14T16:46:59.569 [DEBUG] [Thread-188741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:46:59.588 [DEBUG] [Thread-188741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:46:59.589 [INFO] [Thread-188741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:46:59.592 [DEBUG] [Thread-188741] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:46:59.592 [DEBUG] [Thread-188741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:46:59.592 [DEBUG] [Thread-188741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:46:59.592 [DEBUG] [Thread-188741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:46:59.593 [DEBUG] [Thread-188741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:46:59.593 [DEBUG] [Thread-188741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:46:59.593 [DEBUG] [Thread-188741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:46:59.593 [DEBUG] [Thread-188741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:46:59.593 [DEBUG] [Thread-188741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:46:59.593 [DEBUG] [Thread-188741] [transport.py] [_log()] client lang: <none>
2026-02-14T16:46:59.593 [DEBUG] [Thread-188741] [transport.py] [_log()] server lang: <none>
2026-02-14T16:46:59.593 [DEBUG] [Thread-188741] [transport.py] [_log()] kex follows: False
2026-02-14T16:46:59.593 [DEBUG] [Thread-188741] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:46:59.593 [DEBUG] [Thread-188741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:46:59.593 [DEBUG] [Thread-188741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:46:59.593 [DEBUG] [Thread-188741] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:46:59.593 [DEBUG] [Thread-188741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:46:59.593 [DEBUG] [Thread-188741] [transport.py] [_log()] Compression: none
2026-02-14T16:46:59.594 [DEBUG] [Thread-188741] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:46:59.617 [DEBUG] [Thread-188741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:46:59.618 [DEBUG] [Thread-188741] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:46:59.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:46:59.619 [DEBUG] [Thread-188741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:46:59.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:46:59.621 [DEBUG] [Thread-188741] [transport.py] [_log()] userauth is OK
2026-02-14T16:46:59.622 [DEBUG] [Thread-188741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:46:59.622 [DEBUG] [Thread-188741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:46:59.622 [DEBUG] [Thread-188741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:46:59.622 [DEBUG] [Thread-188741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:46:59.658 [INFO] [Thread-188741] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:46:59.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:47:00.313 [DEBUG] [Thread-188741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:47:00.313 [DEBUG] [Thread-188741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:47:00.313 [DEBUG] [Thread-188741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:47:00.353 [DEBUG] [Thread-188741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:47:00.354 [DEBUG] [Thread-188741] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:47:00.357 [DEBUG] [Thread-188741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:47:00.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:47:00.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:47:00.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:47:00.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:47:00.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:47:00.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:47:00.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:47:00.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:47:00.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:47:00.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.615731 -999.00  +16.50  30.22     42   +3.70 1 1 2 1 1   888    0 11.71 -39.75 ----- 28.9 30.2 155.9 46.0 20.7 -27.8 20.2 -27.2 21.6 -27.6 22.5 -28.8
2026-02-14T16:47:00.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:47:00.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:47:00.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.615731
2026-02-14T16:47:00.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:47:00.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:47:00.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:47:00.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:47:00.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:47:00.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:46:37', tmtdew=15.68, humidity=34.84, cloud=0.0, wind=41.78, temperature=17.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:46:39.158', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:47:00.382 [DEBUG] [Thread-188741] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:47:00.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-14T16:47:00.477 [DEBUG] [Thread-188744] [transport.py] [_log()] starting thread (client mode): 0xa575af50
2026-02-14T16:47:00.477 [DEBUG] [Thread-188744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:47:00.491 [DEBUG] [Thread-188744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:47:00.492 [INFO] [Thread-188744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:47:00.499 [DEBUG] [Thread-188744] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:47:00.500 [DEBUG] [Thread-188744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:47:00.500 [DEBUG] [Thread-188744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:47:00.500 [DEBUG] [Thread-188744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:47:00.500 [DEBUG] [Thread-188744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:47:00.500 [DEBUG] [Thread-188744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:47:00.500 [DEBUG] [Thread-188744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:47:00.500 [DEBUG] [Thread-188744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:47:00.501 [DEBUG] [Thread-188744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:47:00.501 [DEBUG] [Thread-188744] [transport.py] [_log()] client lang: <none>
2026-02-14T16:47:00.501 [DEBUG] [Thread-188744] [transport.py] [_log()] server lang: <none>
2026-02-14T16:47:00.501 [DEBUG] [Thread-188744] [transport.py] [_log()] kex follows: False
2026-02-14T16:47:00.501 [DEBUG] [Thread-188744] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:47:00.501 [DEBUG] [Thread-188744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:47:00.501 [DEBUG] [Thread-188744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:47:00.501 [DEBUG] [Thread-188744] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:47:00.502 [DEBUG] [Thread-188744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:47:00.503 [DEBUG] [Thread-188744] [transport.py] [_log()] Compression: none
2026-02-14T16:47:00.503 [DEBUG] [Thread-188744] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:47:00.558 [DEBUG] [Thread-188744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:47:00.559 [DEBUG] [Thread-188744] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:47:00.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:47:00.560 [DEBUG] [Thread-188744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:47:00.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:47:00.618 [DEBUG] [Thread-188744] [transport.py] [_log()] userauth is OK
2026-02-14T16:47:00.618 [DEBUG] [Thread-188744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:47:00.618 [DEBUG] [Thread-188744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:47:00.618 [DEBUG] [Thread-188744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:47:00.618 [DEBUG] [Thread-188744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:47:00.637 [INFO] [Thread-188744] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:47:00.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-14T16:47:00.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:47:01.464 [DEBUG] [Thread-188744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:47:01.464 [DEBUG] [Thread-188744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:47:01.512 [DEBUG] [Thread-188744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:47:01.513 [DEBUG] [Thread-188744] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:47:01.522 [DEBUG] [Thread-188744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:47:01.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:47:01.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-14T16:47:01.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-14T16:47:01.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:47:01.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:47:01.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:47:01.559 [DEBUG] [Thread-188744] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:47:10.783 [DEBUG] [Thread-188746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:47:25.832 [DEBUG] [Thread-188747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:47:31.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:47:31.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:47:31.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-14T16:47:32.071 [DEBUG] [Thread-188748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:47:33.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 47, 12), 15.0, 36.59, 0.0, 41.89, 16.87, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:47:33.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:47:12
2026-02-14T16:47:34.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:47:34.206 [DEBUG] [Thread-188749] [transport.py] [_log()] starting thread (client mode): 0xa81d5fc0
2026-02-14T16:47:34.206 [DEBUG] [Thread-188749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:47:34.225 [DEBUG] [Thread-188749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:47:34.226 [INFO] [Thread-188749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:47:34.229 [DEBUG] [Thread-188749] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:47:34.229 [DEBUG] [Thread-188749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:47:34.229 [DEBUG] [Thread-188749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:47:34.229 [DEBUG] [Thread-188749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:47:34.229 [DEBUG] [Thread-188749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:47:34.229 [DEBUG] [Thread-188749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:47:34.229 [DEBUG] [Thread-188749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:47:34.229 [DEBUG] [Thread-188749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:47:34.229 [DEBUG] [Thread-188749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:47:34.229 [DEBUG] [Thread-188749] [transport.py] [_log()] client lang: <none>
2026-02-14T16:47:34.230 [DEBUG] [Thread-188749] [transport.py] [_log()] server lang: <none>
2026-02-14T16:47:34.230 [DEBUG] [Thread-188749] [transport.py] [_log()] kex follows: False
2026-02-14T16:47:34.230 [DEBUG] [Thread-188749] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:47:34.230 [DEBUG] [Thread-188749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:47:34.230 [DEBUG] [Thread-188749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:47:34.230 [DEBUG] [Thread-188749] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:47:34.230 [DEBUG] [Thread-188749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:47:34.230 [DEBUG] [Thread-188749] [transport.py] [_log()] Compression: none
2026-02-14T16:47:34.230 [DEBUG] [Thread-188749] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:47:34.250 [DEBUG] [Thread-188749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:47:34.251 [DEBUG] [Thread-188749] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:47:34.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:47:34.252 [DEBUG] [Thread-188749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:47:34.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:47:34.254 [DEBUG] [Thread-188749] [transport.py] [_log()] userauth is OK
2026-02-14T16:47:34.255 [DEBUG] [Thread-188749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:47:34.255 [DEBUG] [Thread-188749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:47:34.255 [DEBUG] [Thread-188749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:47:34.255 [DEBUG] [Thread-188749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:47:34.281 [INFO] [Thread-188749] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:47:34.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:47:34.919 [DEBUG] [Thread-188749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:47:34.919 [DEBUG] [Thread-188749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:47:34.920 [DEBUG] [Thread-188749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:47:34.960 [DEBUG] [Thread-188749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:47:34.961 [DEBUG] [Thread-188749] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:47:34.965 [DEBUG] [Thread-188749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:47:34.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:47:34.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:47:34.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:47:34.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:47:34.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:47:34.982 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:47:34.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:47:34.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:47:34.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:47:34.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.616078 -999.00  +16.30  27.02     43   +3.70 1 1 1 1 1   888    0 11.85 -40.87 ----- 27.5 27.0 163.4 36.7 20.6 -27.9 20.1 -28.4 21.7 -25.2 22.5 -28.2
2026-02-14T16:47:34.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:47:34.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:47:34.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.616078
2026-02-14T16:47:34.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:47:34.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:47:34.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:47:34.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:47:34.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:47:34.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:47:12', tmtdew=15.0, humidity=36.59, cloud=0.0, wind=41.89, temperature=16.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:47:09.139', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:47:34.984 [DEBUG] [Thread-188749] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:47:35.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-14T16:47:35.099 [DEBUG] [Thread-188752] [transport.py] [_log()] starting thread (client mode): 0xa2dc1c30
2026-02-14T16:47:35.099 [DEBUG] [Thread-188752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:47:35.113 [DEBUG] [Thread-188752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:47:35.113 [INFO] [Thread-188752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:47:35.121 [DEBUG] [Thread-188752] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:47:35.122 [DEBUG] [Thread-188752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:47:35.122 [DEBUG] [Thread-188752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:47:35.122 [DEBUG] [Thread-188752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:47:35.122 [DEBUG] [Thread-188752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:47:35.122 [DEBUG] [Thread-188752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:47:35.122 [DEBUG] [Thread-188752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:47:35.122 [DEBUG] [Thread-188752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:47:35.122 [DEBUG] [Thread-188752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:47:35.122 [DEBUG] [Thread-188752] [transport.py] [_log()] client lang: <none>
2026-02-14T16:47:35.123 [DEBUG] [Thread-188752] [transport.py] [_log()] server lang: <none>
2026-02-14T16:47:35.123 [DEBUG] [Thread-188752] [transport.py] [_log()] kex follows: False
2026-02-14T16:47:35.123 [DEBUG] [Thread-188752] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:47:35.123 [DEBUG] [Thread-188752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:47:35.123 [DEBUG] [Thread-188752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:47:35.123 [DEBUG] [Thread-188752] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:47:35.123 [DEBUG] [Thread-188752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:47:35.124 [DEBUG] [Thread-188752] [transport.py] [_log()] Compression: none
2026-02-14T16:47:35.124 [DEBUG] [Thread-188752] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:47:35.182 [DEBUG] [Thread-188752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:47:35.183 [DEBUG] [Thread-188752] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:47:35.183 [DEBUG] [Thread-188752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:47:35.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:47:35.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:47:35.238 [DEBUG] [Thread-188752] [transport.py] [_log()] userauth is OK
2026-02-14T16:47:35.238 [DEBUG] [Thread-188752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:47:35.239 [DEBUG] [Thread-188752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:47:35.239 [DEBUG] [Thread-188752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:47:35.239 [DEBUG] [Thread-188752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:47:35.258 [INFO] [Thread-188752] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:47:35.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-14T16:47:35.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:47:36.112 [DEBUG] [Thread-188752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:47:36.112 [DEBUG] [Thread-188752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:47:36.160 [DEBUG] [Thread-188752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:47:36.160 [DEBUG] [Thread-188752] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:47:36.170 [DEBUG] [Thread-188752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:47:36.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:47:36.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-14T16:47:36.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-14T16:47:36.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:47:36.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:47:36.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:47:36.206 [DEBUG] [Thread-188752] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:47:40.869 [DEBUG] [Thread-188754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:47:55.918 [DEBUG] [Thread-188755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:47:58.426 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:47:58.427 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:48:06.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:48:06.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:48:06.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-14T16:48:08.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 47, 48), 14.7, 37.26, 0.0, 41.36, 16.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:48:08.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:47:48
2026-02-14T16:48:08.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:48:08.691 [DEBUG] [Thread-188756] [transport.py] [_log()] starting thread (client mode): 0xa57c1d50
2026-02-14T16:48:08.691 [DEBUG] [Thread-188756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:48:08.711 [DEBUG] [Thread-188756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:48:08.712 [INFO] [Thread-188756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:48:08.713 [DEBUG] [Thread-188756] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:48:08.713 [DEBUG] [Thread-188756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:48:08.713 [DEBUG] [Thread-188756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:48:08.714 [DEBUG] [Thread-188756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:48:08.714 [DEBUG] [Thread-188756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:48:08.714 [DEBUG] [Thread-188756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:48:08.714 [DEBUG] [Thread-188756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:48:08.714 [DEBUG] [Thread-188756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:48:08.714 [DEBUG] [Thread-188756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:48:08.714 [DEBUG] [Thread-188756] [transport.py] [_log()] client lang: <none>
2026-02-14T16:48:08.714 [DEBUG] [Thread-188756] [transport.py] [_log()] server lang: <none>
2026-02-14T16:48:08.714 [DEBUG] [Thread-188756] [transport.py] [_log()] kex follows: False
2026-02-14T16:48:08.714 [DEBUG] [Thread-188756] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:48:08.714 [DEBUG] [Thread-188756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:48:08.714 [DEBUG] [Thread-188756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:48:08.714 [DEBUG] [Thread-188756] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:48:08.714 [DEBUG] [Thread-188756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:48:08.714 [DEBUG] [Thread-188756] [transport.py] [_log()] Compression: none
2026-02-14T16:48:08.714 [DEBUG] [Thread-188756] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:48:08.733 [DEBUG] [Thread-188756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:48:08.733 [DEBUG] [Thread-188756] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:48:08.734 [DEBUG] [Thread-188756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:48:08.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:48:08.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:48:08.736 [DEBUG] [Thread-188756] [transport.py] [_log()] userauth is OK
2026-02-14T16:48:08.736 [DEBUG] [Thread-188756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:48:08.736 [DEBUG] [Thread-188756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:48:08.736 [DEBUG] [Thread-188756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:48:08.736 [DEBUG] [Thread-188756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:48:08.757 [INFO] [Thread-188756] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:48:08.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:48:09.400 [DEBUG] [Thread-188756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:48:09.400 [DEBUG] [Thread-188756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:48:09.401 [DEBUG] [Thread-188756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:48:09.442 [DEBUG] [Thread-188756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:48:09.442 [DEBUG] [Thread-188756] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:48:09.445 [DEBUG] [Thread-188756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:48:09.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:48:09.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:48:09.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:48:09.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:48:09.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:48:09.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:48:09.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:48:09.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:48:09.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:48:09.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.616425 -999.00  +16.30  32.27     43   +3.80 1 1 2 1 1   888    0 11.78 -39.77 ----- 31.4 32.3 168.4 37.6 20.7 -28.2 20.1 -27.0 21.7 -26.7 22.5 -27.8
2026-02-14T16:48:09.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:48:09.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:48:09.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.616425
2026-02-14T16:48:09.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:48:09.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:48:09.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:48:09.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:48:09.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:48:09.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:47:48', tmtdew=14.7, humidity=37.26, cloud=0.0, wind=41.36, temperature=16.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:47:39.120', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:48:09.470 [DEBUG] [Thread-188756] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:48:09.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-14T16:48:09.566 [DEBUG] [Thread-188759] [transport.py] [_log()] starting thread (client mode): 0xa2ded240
2026-02-14T16:48:09.567 [DEBUG] [Thread-188759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:48:09.581 [DEBUG] [Thread-188759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:48:09.581 [INFO] [Thread-188759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:48:09.589 [DEBUG] [Thread-188759] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:48:09.589 [DEBUG] [Thread-188759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:48:09.589 [DEBUG] [Thread-188759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:48:09.589 [DEBUG] [Thread-188759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:48:09.589 [DEBUG] [Thread-188759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:48:09.589 [DEBUG] [Thread-188759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:48:09.589 [DEBUG] [Thread-188759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:48:09.589 [DEBUG] [Thread-188759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:48:09.589 [DEBUG] [Thread-188759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:48:09.589 [DEBUG] [Thread-188759] [transport.py] [_log()] client lang: <none>
2026-02-14T16:48:09.589 [DEBUG] [Thread-188759] [transport.py] [_log()] server lang: <none>
2026-02-14T16:48:09.590 [DEBUG] [Thread-188759] [transport.py] [_log()] kex follows: False
2026-02-14T16:48:09.590 [DEBUG] [Thread-188759] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:48:09.590 [DEBUG] [Thread-188759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:48:09.590 [DEBUG] [Thread-188759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:48:09.590 [DEBUG] [Thread-188759] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:48:09.590 [DEBUG] [Thread-188759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:48:09.590 [DEBUG] [Thread-188759] [transport.py] [_log()] Compression: none
2026-02-14T16:48:09.590 [DEBUG] [Thread-188759] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:48:09.647 [DEBUG] [Thread-188759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:48:09.647 [DEBUG] [Thread-188759] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:48:09.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:48:09.648 [DEBUG] [Thread-188759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:48:09.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:48:09.702 [DEBUG] [Thread-188759] [transport.py] [_log()] userauth is OK
2026-02-14T16:48:09.703 [DEBUG] [Thread-188759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:48:09.703 [DEBUG] [Thread-188759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:48:09.703 [DEBUG] [Thread-188759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:48:09.703 [DEBUG] [Thread-188759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:48:09.728 [INFO] [Thread-188759] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:48:09.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:48:09.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:48:10.518 [DEBUG] [Thread-188759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:48:10.518 [DEBUG] [Thread-188759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:48:10.566 [DEBUG] [Thread-188759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:48:10.567 [DEBUG] [Thread-188759] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:48:10.576 [DEBUG] [Thread-188759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:48:10.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:48:10.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-14T16:48:10.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-14T16:48:10.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:48:10.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:48:10.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:48:10.613 [DEBUG] [Thread-188759] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:48:10.957 [DEBUG] [Thread-188761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:48:26.009 [DEBUG] [Thread-188762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:48:32.111 [DEBUG] [Thread-188763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:48:40.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:48:40.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:48:40.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-14T16:48:41.047 [DEBUG] [Thread-188764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:48:42.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 48, 23), 14.58, 37.55, 0.0, 41.62, 16.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:48:42.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:48:23
2026-02-14T16:48:42.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:48:42.943 [DEBUG] [Thread-188765] [transport.py] [_log()] starting thread (client mode): 0xa2dc1b10
2026-02-14T16:48:42.943 [DEBUG] [Thread-188765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:48:42.964 [DEBUG] [Thread-188765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:48:42.964 [INFO] [Thread-188765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:48:42.967 [DEBUG] [Thread-188765] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:48:42.967 [DEBUG] [Thread-188765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:48:42.967 [DEBUG] [Thread-188765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:48:42.967 [DEBUG] [Thread-188765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:48:42.967 [DEBUG] [Thread-188765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:48:42.967 [DEBUG] [Thread-188765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:48:42.967 [DEBUG] [Thread-188765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:48:42.967 [DEBUG] [Thread-188765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:48:42.967 [DEBUG] [Thread-188765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:48:42.967 [DEBUG] [Thread-188765] [transport.py] [_log()] client lang: <none>
2026-02-14T16:48:42.968 [DEBUG] [Thread-188765] [transport.py] [_log()] server lang: <none>
2026-02-14T16:48:42.968 [DEBUG] [Thread-188765] [transport.py] [_log()] kex follows: False
2026-02-14T16:48:42.968 [DEBUG] [Thread-188765] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:48:42.968 [DEBUG] [Thread-188765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:48:42.968 [DEBUG] [Thread-188765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:48:42.968 [DEBUG] [Thread-188765] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:48:42.968 [DEBUG] [Thread-188765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:48:42.968 [DEBUG] [Thread-188765] [transport.py] [_log()] Compression: none
2026-02-14T16:48:42.968 [DEBUG] [Thread-188765] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:48:42.984 [DEBUG] [Thread-188765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:48:42.984 [DEBUG] [Thread-188765] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:48:42.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:48:42.985 [DEBUG] [Thread-188765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:48:42.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:48:42.986 [DEBUG] [Thread-188765] [transport.py] [_log()] userauth is OK
2026-02-14T16:48:42.986 [DEBUG] [Thread-188765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:48:42.986 [DEBUG] [Thread-188765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:48:42.986 [DEBUG] [Thread-188765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:48:42.986 [DEBUG] [Thread-188765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:48:43.001 [INFO] [Thread-188765] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:48:43.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:48:43.729 [DEBUG] [Thread-188765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:48:43.729 [DEBUG] [Thread-188765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:48:43.729 [DEBUG] [Thread-188765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:48:43.771 [DEBUG] [Thread-188765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:48:43.771 [DEBUG] [Thread-188765] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:48:43.774 [DEBUG] [Thread-188765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:48:43.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:48:43.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:48:43.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:48:43.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:48:43.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:48:43.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:48:43.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:48:43.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:48:43.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:48:43.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.616773 -999.00  +16.30  27.57     43   +3.80 1 1 1 1 1   888    0 11.68 -38.15 ----- 21.8 27.6 168.6 36.0 20.6 -28.1 20.2 -26.7 21.7 -26.7 22.5 -28.1
2026-02-14T16:48:43.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:48:43.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:48:43.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.616773
2026-02-14T16:48:43.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:48:43.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:48:43.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:48:43.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:48:43.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:48:43.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:48:23', tmtdew=14.58, humidity=37.55, cloud=0.0, wind=41.62, temperature=16.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:48:09.187', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:48:43.801 [DEBUG] [Thread-188765] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:48:43.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-14T16:48:43.897 [DEBUG] [Thread-188768] [transport.py] [_log()] starting thread (client mode): 0xa57c0c40
2026-02-14T16:48:43.897 [DEBUG] [Thread-188768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:48:43.913 [DEBUG] [Thread-188768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:48:43.914 [INFO] [Thread-188768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:48:43.921 [DEBUG] [Thread-188768] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:48:43.921 [DEBUG] [Thread-188768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:48:43.921 [DEBUG] [Thread-188768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:48:43.922 [DEBUG] [Thread-188768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:48:43.922 [DEBUG] [Thread-188768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:48:43.922 [DEBUG] [Thread-188768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:48:43.922 [DEBUG] [Thread-188768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:48:43.922 [DEBUG] [Thread-188768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:48:43.922 [DEBUG] [Thread-188768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:48:43.922 [DEBUG] [Thread-188768] [transport.py] [_log()] client lang: <none>
2026-02-14T16:48:43.922 [DEBUG] [Thread-188768] [transport.py] [_log()] server lang: <none>
2026-02-14T16:48:43.922 [DEBUG] [Thread-188768] [transport.py] [_log()] kex follows: False
2026-02-14T16:48:43.922 [DEBUG] [Thread-188768] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:48:43.923 [DEBUG] [Thread-188768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:48:43.923 [DEBUG] [Thread-188768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:48:43.923 [DEBUG] [Thread-188768] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:48:43.923 [DEBUG] [Thread-188768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:48:43.923 [DEBUG] [Thread-188768] [transport.py] [_log()] Compression: none
2026-02-14T16:48:43.923 [DEBUG] [Thread-188768] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:48:43.986 [DEBUG] [Thread-188768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:48:43.987 [DEBUG] [Thread-188768] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:48:43.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:48:43.988 [DEBUG] [Thread-188768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:48:43.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:48:44.043 [DEBUG] [Thread-188768] [transport.py] [_log()] userauth is OK
2026-02-14T16:48:44.043 [DEBUG] [Thread-188768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:48:44.043 [DEBUG] [Thread-188768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:48:44.043 [DEBUG] [Thread-188768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:48:44.043 [DEBUG] [Thread-188768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:48:44.063 [INFO] [Thread-188768] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:48:44.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-14T16:48:44.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:48:44.898 [DEBUG] [Thread-188768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:48:44.899 [DEBUG] [Thread-188768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:48:44.946 [DEBUG] [Thread-188768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:48:44.947 [DEBUG] [Thread-188768] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:48:44.956 [DEBUG] [Thread-188768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:48:44.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:48:44.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-14T16:48:44.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:48:44.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:48:44.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:48:44.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:48:44.993 [DEBUG] [Thread-188768] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:48:56.087 [DEBUG] [Thread-188770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:48:58.568 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:48:58.569 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:49:11.139 [DEBUG] [Thread-188771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:49:15.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:49:15.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:49:15.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-14T16:49:17.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 48, 59), 14.59, 37.17, 0.0, 36.65, 16.43, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:49:17.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:48:59
2026-02-14T16:49:17.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:49:17.619 [DEBUG] [Thread-188772] [transport.py] [_log()] starting thread (client mode): 0xa2def9a0
2026-02-14T16:49:17.619 [DEBUG] [Thread-188772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:49:17.638 [DEBUG] [Thread-188772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:49:17.639 [INFO] [Thread-188772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:49:17.642 [DEBUG] [Thread-188772] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:49:17.642 [DEBUG] [Thread-188772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:49:17.642 [DEBUG] [Thread-188772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:49:17.642 [DEBUG] [Thread-188772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:49:17.642 [DEBUG] [Thread-188772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:49:17.642 [DEBUG] [Thread-188772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:49:17.642 [DEBUG] [Thread-188772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:49:17.642 [DEBUG] [Thread-188772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:49:17.642 [DEBUG] [Thread-188772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:49:17.642 [DEBUG] [Thread-188772] [transport.py] [_log()] client lang: <none>
2026-02-14T16:49:17.642 [DEBUG] [Thread-188772] [transport.py] [_log()] server lang: <none>
2026-02-14T16:49:17.642 [DEBUG] [Thread-188772] [transport.py] [_log()] kex follows: False
2026-02-14T16:49:17.643 [DEBUG] [Thread-188772] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:49:17.643 [DEBUG] [Thread-188772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:49:17.643 [DEBUG] [Thread-188772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:49:17.643 [DEBUG] [Thread-188772] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:49:17.643 [DEBUG] [Thread-188772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:49:17.643 [DEBUG] [Thread-188772] [transport.py] [_log()] Compression: none
2026-02-14T16:49:17.643 [DEBUG] [Thread-188772] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:49:17.651 [DEBUG] [Thread-188772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:49:17.652 [DEBUG] [Thread-188772] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:49:17.652 [DEBUG] [Thread-188772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:49:17.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:49:17.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:49:17.654 [DEBUG] [Thread-188772] [transport.py] [_log()] userauth is OK
2026-02-14T16:49:17.654 [DEBUG] [Thread-188772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:49:17.654 [DEBUG] [Thread-188772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:49:17.654 [DEBUG] [Thread-188772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:49:17.654 [DEBUG] [Thread-188772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:49:17.671 [INFO] [Thread-188772] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:49:17.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:49:18.293 [DEBUG] [Thread-188772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:49:18.293 [DEBUG] [Thread-188772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:49:18.293 [DEBUG] [Thread-188772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:49:18.334 [DEBUG] [Thread-188772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:49:18.334 [DEBUG] [Thread-188772] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:49:18.337 [DEBUG] [Thread-188772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:49:18.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:49:18.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:49:18.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:49:18.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:49:18.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:49:18.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:49:18.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:49:18.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:49:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:49:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.617120 -999.00  +16.60  24.71     42   +3.80 1 1 1 1 1   888    0 11.72 -37.63 ----- 27.2 24.7 152.6 33.4 20.6 -28.1 20.1 -28.8 21.8 -25.2 22.5 -28.5
2026-02-14T16:49:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:49:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:49:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.617120
2026-02-14T16:49:18.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:49:18.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:49:18.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:49:18.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:49:18.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:49:18.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:48:59', tmtdew=14.59, humidity=37.17, cloud=0.0, wind=36.65, temperature=16.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:48:39.168', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:49:18.362 [DEBUG] [Thread-188772] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:49:18.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-14T16:49:18.456 [DEBUG] [Thread-188775] [transport.py] [_log()] starting thread (client mode): 0xa57c3af0
2026-02-14T16:49:18.456 [DEBUG] [Thread-188775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:49:18.472 [DEBUG] [Thread-188775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:49:18.472 [INFO] [Thread-188775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:49:18.479 [DEBUG] [Thread-188775] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:49:18.479 [DEBUG] [Thread-188775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:49:18.480 [DEBUG] [Thread-188775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:49:18.480 [DEBUG] [Thread-188775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:49:18.480 [DEBUG] [Thread-188775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:49:18.480 [DEBUG] [Thread-188775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:49:18.480 [DEBUG] [Thread-188775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:49:18.480 [DEBUG] [Thread-188775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:49:18.480 [DEBUG] [Thread-188775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:49:18.480 [DEBUG] [Thread-188775] [transport.py] [_log()] client lang: <none>
2026-02-14T16:49:18.480 [DEBUG] [Thread-188775] [transport.py] [_log()] server lang: <none>
2026-02-14T16:49:18.480 [DEBUG] [Thread-188775] [transport.py] [_log()] kex follows: False
2026-02-14T16:49:18.481 [DEBUG] [Thread-188775] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:49:18.481 [DEBUG] [Thread-188775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:49:18.481 [DEBUG] [Thread-188775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:49:18.481 [DEBUG] [Thread-188775] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:49:18.481 [DEBUG] [Thread-188775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:49:18.481 [DEBUG] [Thread-188775] [transport.py] [_log()] Compression: none
2026-02-14T16:49:18.481 [DEBUG] [Thread-188775] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:49:18.538 [DEBUG] [Thread-188775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:49:18.539 [DEBUG] [Thread-188775] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:49:18.539 [DEBUG] [Thread-188775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:49:18.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:49:18.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:49:18.595 [DEBUG] [Thread-188775] [transport.py] [_log()] userauth is OK
2026-02-14T16:49:18.595 [DEBUG] [Thread-188775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:49:18.595 [DEBUG] [Thread-188775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:49:18.595 [DEBUG] [Thread-188775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:49:18.595 [DEBUG] [Thread-188775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:49:18.614 [INFO] [Thread-188775] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:49:18.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-14T16:49:18.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:49:19.415 [DEBUG] [Thread-188775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:49:19.415 [DEBUG] [Thread-188775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:49:19.463 [DEBUG] [Thread-188775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:49:19.463 [DEBUG] [Thread-188775] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:49:19.472 [DEBUG] [Thread-188775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:49:19.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:49:19.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-14T16:49:19.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-14T16:49:19.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:49:19.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:49:19.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:49:19.506 [DEBUG] [Thread-188775] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:49:26.174 [DEBUG] [Thread-188777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:49:32.146 [DEBUG] [Thread-188778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:49:41.235 [DEBUG] [Thread-188779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:49:49.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:49:49.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:49:49.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:49:51.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 49, 34), 15.75, 34.71, 0.0, 48.23, 17.67, 0, 0, 0, 2, 1, 0),)
2026-02-14T16:49:51.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:49:34
2026-02-14T16:49:51.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:49:51.860 [DEBUG] [Thread-188780] [transport.py] [_log()] starting thread (client mode): 0xa2dc2cb0
2026-02-14T16:49:51.860 [DEBUG] [Thread-188780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:49:51.880 [DEBUG] [Thread-188780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:49:51.880 [INFO] [Thread-188780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:49:51.883 [DEBUG] [Thread-188780] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:49:51.884 [DEBUG] [Thread-188780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:49:51.884 [DEBUG] [Thread-188780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:49:51.884 [DEBUG] [Thread-188780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:49:51.884 [DEBUG] [Thread-188780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:49:51.884 [DEBUG] [Thread-188780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:49:51.884 [DEBUG] [Thread-188780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:49:51.884 [DEBUG] [Thread-188780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:49:51.884 [DEBUG] [Thread-188780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:49:51.884 [DEBUG] [Thread-188780] [transport.py] [_log()] client lang: <none>
2026-02-14T16:49:51.885 [DEBUG] [Thread-188780] [transport.py] [_log()] server lang: <none>
2026-02-14T16:49:51.885 [DEBUG] [Thread-188780] [transport.py] [_log()] kex follows: False
2026-02-14T16:49:51.885 [DEBUG] [Thread-188780] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:49:51.885 [DEBUG] [Thread-188780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:49:51.885 [DEBUG] [Thread-188780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:49:51.885 [DEBUG] [Thread-188780] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:49:51.885 [DEBUG] [Thread-188780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:49:51.885 [DEBUG] [Thread-188780] [transport.py] [_log()] Compression: none
2026-02-14T16:49:51.885 [DEBUG] [Thread-188780] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:49:51.902 [DEBUG] [Thread-188780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:49:51.903 [DEBUG] [Thread-188780] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:49:51.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:49:51.904 [DEBUG] [Thread-188780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:49:51.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:49:51.907 [DEBUG] [Thread-188780] [transport.py] [_log()] userauth is OK
2026-02-14T16:49:51.907 [DEBUG] [Thread-188780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:49:51.907 [DEBUG] [Thread-188780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:49:51.907 [DEBUG] [Thread-188780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:49:51.907 [DEBUG] [Thread-188780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:49:51.943 [INFO] [Thread-188780] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:49:51.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:49:52.562 [DEBUG] [Thread-188780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:49:52.562 [DEBUG] [Thread-188780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:49:52.562 [DEBUG] [Thread-188780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:49:52.603 [DEBUG] [Thread-188780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:49:52.603 [DEBUG] [Thread-188780] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:49:52.607 [DEBUG] [Thread-188780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:49:52.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:49:52.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:49:52.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:49:52.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:49:52.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:49:52.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:49:52.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:49:52.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:49:52.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:49:52.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.617467 -999.00  +16.60  35.43     42   +3.60 1 1 2 1 1   888    0 11.82 -39.32 ----- 29.7 35.4 174.0 43.2 20.7 -28.2 20.2 -27.3 21.8 -26.9 22.6 -28.0
2026-02-14T16:49:52.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:49:52.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:49:52.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.617467
2026-02-14T16:49:52.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:49:52.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:49:52.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:49:52.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:49:52.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:49:52.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:49:34', tmtdew=15.75, humidity=34.71, cloud=0.0, wind=48.23, temperature=17.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:49:09.149', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:49:52.634 [DEBUG] [Thread-188780] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:49:52.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-14T16:49:52.734 [DEBUG] [Thread-188783] [transport.py] [_log()] starting thread (client mode): 0xa57c2830
2026-02-14T16:49:52.734 [DEBUG] [Thread-188783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:49:52.749 [DEBUG] [Thread-188783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:49:52.749 [INFO] [Thread-188783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:49:52.757 [DEBUG] [Thread-188783] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:49:52.757 [DEBUG] [Thread-188783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:49:52.757 [DEBUG] [Thread-188783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:49:52.757 [DEBUG] [Thread-188783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:49:52.757 [DEBUG] [Thread-188783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:49:52.757 [DEBUG] [Thread-188783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:49:52.757 [DEBUG] [Thread-188783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:49:52.757 [DEBUG] [Thread-188783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:49:52.757 [DEBUG] [Thread-188783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:49:52.757 [DEBUG] [Thread-188783] [transport.py] [_log()] client lang: <none>
2026-02-14T16:49:52.757 [DEBUG] [Thread-188783] [transport.py] [_log()] server lang: <none>
2026-02-14T16:49:52.757 [DEBUG] [Thread-188783] [transport.py] [_log()] kex follows: False
2026-02-14T16:49:52.758 [DEBUG] [Thread-188783] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:49:52.758 [DEBUG] [Thread-188783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:49:52.758 [DEBUG] [Thread-188783] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:49:52.758 [DEBUG] [Thread-188783] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:49:52.758 [DEBUG] [Thread-188783] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:49:52.758 [DEBUG] [Thread-188783] [transport.py] [_log()] Compression: none
2026-02-14T16:49:52.758 [DEBUG] [Thread-188783] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:49:52.815 [DEBUG] [Thread-188783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:49:52.815 [DEBUG] [Thread-188783] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:49:52.816 [DEBUG] [Thread-188783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:49:52.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:49:52.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:49:52.871 [DEBUG] [Thread-188783] [transport.py] [_log()] userauth is OK
2026-02-14T16:49:52.871 [DEBUG] [Thread-188783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:49:52.871 [DEBUG] [Thread-188783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:49:52.871 [DEBUG] [Thread-188783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:49:52.871 [DEBUG] [Thread-188783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:49:52.888 [INFO] [Thread-188783] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:49:52.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:49:52.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:49:53.742 [DEBUG] [Thread-188783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:49:53.742 [DEBUG] [Thread-188783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:49:53.790 [DEBUG] [Thread-188783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:49:53.790 [DEBUG] [Thread-188783] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:49:53.799 [DEBUG] [Thread-188783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:49:53.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:49:53.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-14T16:49:53.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-14T16:49:53.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:49:53.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:49:53.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:49:53.836 [DEBUG] [Thread-188783] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:49:56.271 [DEBUG] [Thread-188785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:49:58.708 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:49:58.710 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:50:11.331 [DEBUG] [Thread-188786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:50:23.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:50:23.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:50:23.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-14T16:50:25.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 50, 9), 14.97, 36.32, 0.0, 40.35, 16.49, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:50:25.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:50:09
2026-02-14T16:50:26.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:50:26.219 [DEBUG] [Thread-188787] [transport.py] [_log()] starting thread (client mode): 0xa2dec820
2026-02-14T16:50:26.219 [DEBUG] [Thread-188787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:50:26.240 [DEBUG] [Thread-188787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:50:26.240 [INFO] [Thread-188787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:50:26.243 [DEBUG] [Thread-188787] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:50:26.244 [DEBUG] [Thread-188787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:50:26.244 [DEBUG] [Thread-188787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:50:26.244 [DEBUG] [Thread-188787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:50:26.244 [DEBUG] [Thread-188787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:50:26.244 [DEBUG] [Thread-188787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:50:26.244 [DEBUG] [Thread-188787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:50:26.244 [DEBUG] [Thread-188787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:50:26.244 [DEBUG] [Thread-188787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:50:26.244 [DEBUG] [Thread-188787] [transport.py] [_log()] client lang: <none>
2026-02-14T16:50:26.244 [DEBUG] [Thread-188787] [transport.py] [_log()] server lang: <none>
2026-02-14T16:50:26.244 [DEBUG] [Thread-188787] [transport.py] [_log()] kex follows: False
2026-02-14T16:50:26.244 [DEBUG] [Thread-188787] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:50:26.244 [DEBUG] [Thread-188787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:50:26.244 [DEBUG] [Thread-188787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:50:26.244 [DEBUG] [Thread-188787] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:50:26.244 [DEBUG] [Thread-188787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:50:26.244 [DEBUG] [Thread-188787] [transport.py] [_log()] Compression: none
2026-02-14T16:50:26.244 [DEBUG] [Thread-188787] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:50:26.262 [DEBUG] [Thread-188787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:50:26.263 [DEBUG] [Thread-188787] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:50:26.263 [DEBUG] [Thread-188787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:50:26.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:50:26.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:50:26.266 [DEBUG] [Thread-188787] [transport.py] [_log()] userauth is OK
2026-02-14T16:50:26.266 [DEBUG] [Thread-188787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:50:26.266 [DEBUG] [Thread-188787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:50:26.266 [DEBUG] [Thread-188787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:50:26.266 [DEBUG] [Thread-188787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:50:26.290 [INFO] [Thread-188787] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:50:26.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:50:26.368 [DEBUG] [Thread-188789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:50:26.937 [DEBUG] [Thread-188787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:50:26.937 [DEBUG] [Thread-188787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:50:26.937 [DEBUG] [Thread-188787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:50:26.979 [DEBUG] [Thread-188787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:50:26.979 [DEBUG] [Thread-188787] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:50:26.982 [DEBUG] [Thread-188787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:50:26.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:50:26.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:50:26.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:50:26.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:50:27.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:50:27.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:50:27.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:50:27.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:50:27.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:50:27.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.617814 -999.00  +16.40  22.52     42   +3.60 1 1 1 1 1   888    0 11.63 -39.50 ----- 29.5 22.5 163.2 43.3 20.6 -29.1 20.1 -27.4 21.6 -28.0 22.4 -28.8
2026-02-14T16:50:27.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:50:27.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:50:27.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.617814
2026-02-14T16:50:27.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:50:27.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:50:27.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:50:27.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:50:27.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:50:27.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:50:09', tmtdew=14.97, humidity=36.32, cloud=0.0, wind=40.35, temperature=16.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:49:39.130', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:50:27.008 [DEBUG] [Thread-188787] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:50:27.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T16:50:27.105 [DEBUG] [Thread-188791] [transport.py] [_log()] starting thread (client mode): 0xa57c07c0
2026-02-14T16:50:27.105 [DEBUG] [Thread-188791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:50:27.120 [DEBUG] [Thread-188791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:50:27.121 [INFO] [Thread-188791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:50:27.128 [DEBUG] [Thread-188791] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:50:27.128 [DEBUG] [Thread-188791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:50:27.128 [DEBUG] [Thread-188791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:50:27.128 [DEBUG] [Thread-188791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:50:27.128 [DEBUG] [Thread-188791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:50:27.128 [DEBUG] [Thread-188791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:50:27.128 [DEBUG] [Thread-188791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:50:27.128 [DEBUG] [Thread-188791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:50:27.128 [DEBUG] [Thread-188791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:50:27.128 [DEBUG] [Thread-188791] [transport.py] [_log()] client lang: <none>
2026-02-14T16:50:27.129 [DEBUG] [Thread-188791] [transport.py] [_log()] server lang: <none>
2026-02-14T16:50:27.129 [DEBUG] [Thread-188791] [transport.py] [_log()] kex follows: False
2026-02-14T16:50:27.129 [DEBUG] [Thread-188791] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:50:27.129 [DEBUG] [Thread-188791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:50:27.129 [DEBUG] [Thread-188791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:50:27.129 [DEBUG] [Thread-188791] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:50:27.129 [DEBUG] [Thread-188791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:50:27.129 [DEBUG] [Thread-188791] [transport.py] [_log()] Compression: none
2026-02-14T16:50:27.129 [DEBUG] [Thread-188791] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:50:27.188 [DEBUG] [Thread-188791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:50:27.189 [DEBUG] [Thread-188791] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:50:27.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:50:27.190 [DEBUG] [Thread-188791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:50:27.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:50:27.244 [DEBUG] [Thread-188791] [transport.py] [_log()] userauth is OK
2026-02-14T16:50:27.244 [DEBUG] [Thread-188791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:50:27.244 [DEBUG] [Thread-188791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:50:27.244 [DEBUG] [Thread-188791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:50:27.244 [DEBUG] [Thread-188791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:50:27.264 [INFO] [Thread-188791] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:50:27.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-14T16:50:27.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:50:28.082 [DEBUG] [Thread-188791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:50:28.082 [DEBUG] [Thread-188791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:50:28.130 [DEBUG] [Thread-188791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:50:28.130 [DEBUG] [Thread-188791] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:50:28.139 [DEBUG] [Thread-188791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:50:28.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:50:28.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-14T16:50:28.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-14T16:50:28.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:50:28.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:50:28.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:50:28.174 [DEBUG] [Thread-188791] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:50:32.194 [DEBUG] [Thread-188793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:50:41.408 [DEBUG] [Thread-188794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:50:56.479 [DEBUG] [Thread-188795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:50:58.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:50:58.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:50:58.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:50:58.852 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:50:58.853 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:51:00.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 50, 44), 14.66, 37.09, 0.0, 33.79, 16.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:51:00.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:50:44
2026-02-14T16:51:00.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:51:00.531 [DEBUG] [Thread-188796] [transport.py] [_log()] starting thread (client mode): 0xa2db7fa0
2026-02-14T16:51:00.532 [DEBUG] [Thread-188796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:51:00.551 [DEBUG] [Thread-188796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:51:00.551 [INFO] [Thread-188796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:51:00.555 [DEBUG] [Thread-188796] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:51:00.555 [DEBUG] [Thread-188796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:51:00.555 [DEBUG] [Thread-188796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:51:00.555 [DEBUG] [Thread-188796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:51:00.555 [DEBUG] [Thread-188796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:51:00.555 [DEBUG] [Thread-188796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:51:00.555 [DEBUG] [Thread-188796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:51:00.555 [DEBUG] [Thread-188796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:51:00.555 [DEBUG] [Thread-188796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:51:00.556 [DEBUG] [Thread-188796] [transport.py] [_log()] client lang: <none>
2026-02-14T16:51:00.556 [DEBUG] [Thread-188796] [transport.py] [_log()] server lang: <none>
2026-02-14T16:51:00.556 [DEBUG] [Thread-188796] [transport.py] [_log()] kex follows: False
2026-02-14T16:51:00.556 [DEBUG] [Thread-188796] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:51:00.556 [DEBUG] [Thread-188796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:51:00.556 [DEBUG] [Thread-188796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:51:00.556 [DEBUG] [Thread-188796] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:51:00.556 [DEBUG] [Thread-188796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:51:00.556 [DEBUG] [Thread-188796] [transport.py] [_log()] Compression: none
2026-02-14T16:51:00.556 [DEBUG] [Thread-188796] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:51:00.573 [DEBUG] [Thread-188796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:51:00.573 [DEBUG] [Thread-188796] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:51:00.574 [DEBUG] [Thread-188796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:51:00.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:51:00.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:51:00.576 [DEBUG] [Thread-188796] [transport.py] [_log()] userauth is OK
2026-02-14T16:51:00.576 [DEBUG] [Thread-188796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:51:00.576 [DEBUG] [Thread-188796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:51:00.576 [DEBUG] [Thread-188796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:51:00.577 [DEBUG] [Thread-188796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:51:00.601 [INFO] [Thread-188796] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:51:00.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:51:01.186 [DEBUG] [Thread-188796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:51:01.186 [DEBUG] [Thread-188796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:51:01.186 [DEBUG] [Thread-188796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:51:01.228 [DEBUG] [Thread-188796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:51:01.228 [DEBUG] [Thread-188796] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:51:01.230 [DEBUG] [Thread-188796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:51:01.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:51:01.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:51:01.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:51:01.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:51:01.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:51:01.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:51:01.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:51:01.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:51:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:51:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.618161 -999.00  +16.40  18.54     42   +3.60 1 1 1 1 1   888    0 11.76 -42.47 ----- 23.7 18.5 152.4 28.1 20.6 -28.0 20.1 -26.4 21.6 -25.9 22.4 -29.0
2026-02-14T16:51:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:51:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:51:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.618161
2026-02-14T16:51:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:51:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:51:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:51:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:51:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:51:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:50:44', tmtdew=14.66, humidity=37.09, cloud=0.0, wind=33.79, temperature=16.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:50:09.110', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:51:01.250 [DEBUG] [Thread-188796] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:51:01.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-14T16:51:01.342 [DEBUG] [Thread-188799] [transport.py] [_log()] starting thread (client mode): 0xa2deda20
2026-02-14T16:51:01.343 [DEBUG] [Thread-188799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:51:01.358 [DEBUG] [Thread-188799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:51:01.358 [INFO] [Thread-188799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:51:01.365 [DEBUG] [Thread-188799] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:51:01.366 [DEBUG] [Thread-188799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:51:01.366 [DEBUG] [Thread-188799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:51:01.366 [DEBUG] [Thread-188799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:51:01.366 [DEBUG] [Thread-188799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:51:01.366 [DEBUG] [Thread-188799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:51:01.366 [DEBUG] [Thread-188799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:51:01.367 [DEBUG] [Thread-188799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:51:01.367 [DEBUG] [Thread-188799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:51:01.367 [DEBUG] [Thread-188799] [transport.py] [_log()] client lang: <none>
2026-02-14T16:51:01.367 [DEBUG] [Thread-188799] [transport.py] [_log()] server lang: <none>
2026-02-14T16:51:01.367 [DEBUG] [Thread-188799] [transport.py] [_log()] kex follows: False
2026-02-14T16:51:01.367 [DEBUG] [Thread-188799] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:51:01.367 [DEBUG] [Thread-188799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:51:01.367 [DEBUG] [Thread-188799] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:51:01.368 [DEBUG] [Thread-188799] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:51:01.368 [DEBUG] [Thread-188799] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:51:01.368 [DEBUG] [Thread-188799] [transport.py] [_log()] Compression: none
2026-02-14T16:51:01.368 [DEBUG] [Thread-188799] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:51:01.424 [DEBUG] [Thread-188799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:51:01.425 [DEBUG] [Thread-188799] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:51:01.426 [DEBUG] [Thread-188799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:51:01.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:51:01.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:51:01.480 [DEBUG] [Thread-188799] [transport.py] [_log()] userauth is OK
2026-02-14T16:51:01.481 [DEBUG] [Thread-188799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:51:01.481 [DEBUG] [Thread-188799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:51:01.481 [DEBUG] [Thread-188799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:51:01.481 [DEBUG] [Thread-188799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:51:01.502 [INFO] [Thread-188799] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:51:01.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-14T16:51:01.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:51:02.316 [DEBUG] [Thread-188799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:51:02.316 [DEBUG] [Thread-188799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:51:02.365 [DEBUG] [Thread-188799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:51:02.365 [DEBUG] [Thread-188799] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:51:02.374 [DEBUG] [Thread-188799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:51:02.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:51:02.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:51:02.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-14T16:51:02.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:51:02.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:51:02.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:51:02.411 [DEBUG] [Thread-188799] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:51:11.515 [DEBUG] [Thread-188801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:51:26.564 [DEBUG] [Thread-188802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:51:32.228 [DEBUG] [Thread-188803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:51:32.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:51:32.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:51:32.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-14T16:51:34.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 51, 20), 14.62, 37.19, 0.0, 35.78, 16.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:51:34.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:51:20
2026-02-14T16:51:34.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:51:35.160 [DEBUG] [Thread-188804] [transport.py] [_log()] starting thread (client mode): 0xa2db6e60
2026-02-14T16:51:35.161 [DEBUG] [Thread-188804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:51:35.183 [DEBUG] [Thread-188804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:51:35.183 [INFO] [Thread-188804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:51:35.185 [DEBUG] [Thread-188804] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:51:35.186 [DEBUG] [Thread-188804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:51:35.186 [DEBUG] [Thread-188804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:51:35.186 [DEBUG] [Thread-188804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:51:35.186 [DEBUG] [Thread-188804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:51:35.186 [DEBUG] [Thread-188804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:51:35.186 [DEBUG] [Thread-188804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:51:35.186 [DEBUG] [Thread-188804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:51:35.186 [DEBUG] [Thread-188804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:51:35.186 [DEBUG] [Thread-188804] [transport.py] [_log()] client lang: <none>
2026-02-14T16:51:35.186 [DEBUG] [Thread-188804] [transport.py] [_log()] server lang: <none>
2026-02-14T16:51:35.186 [DEBUG] [Thread-188804] [transport.py] [_log()] kex follows: False
2026-02-14T16:51:35.187 [DEBUG] [Thread-188804] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:51:35.187 [DEBUG] [Thread-188804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:51:35.187 [DEBUG] [Thread-188804] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:51:35.187 [DEBUG] [Thread-188804] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:51:35.187 [DEBUG] [Thread-188804] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:51:35.187 [DEBUG] [Thread-188804] [transport.py] [_log()] Compression: none
2026-02-14T16:51:35.187 [DEBUG] [Thread-188804] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:51:35.208 [DEBUG] [Thread-188804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:51:35.208 [DEBUG] [Thread-188804] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:51:35.209 [DEBUG] [Thread-188804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:51:35.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:51:35.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:51:35.211 [DEBUG] [Thread-188804] [transport.py] [_log()] userauth is OK
2026-02-14T16:51:35.212 [DEBUG] [Thread-188804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:51:35.212 [DEBUG] [Thread-188804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:51:35.212 [DEBUG] [Thread-188804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:51:35.212 [DEBUG] [Thread-188804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:51:35.237 [INFO] [Thread-188804] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:51:35.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:51:35.970 [DEBUG] [Thread-188804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:51:35.970 [DEBUG] [Thread-188804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:51:35.970 [DEBUG] [Thread-188804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:51:36.010 [DEBUG] [Thread-188804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:51:36.010 [DEBUG] [Thread-188804] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:51:36.013 [DEBUG] [Thread-188804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:51:36.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:51:36.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:51:36.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:51:36.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:51:36.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:51:36.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:51:36.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:51:36.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:51:36.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:51:36.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.618856 -999.00  +16.00  33.02     43   +3.60 1 1 2 1 1   888    0 11.71 -50.47 ----- 31.3 33.0 167.6 43.6 20.5 -29.3 20.0 -27.3 21.6 -25.0 22.4 -28.3
2026-02-14T16:51:36.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:51:36.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:51:36.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.618856
2026-02-14T16:51:36.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:51:36.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:51:36.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:51:36.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:51:36.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:51:36.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:51:20', tmtdew=14.62, humidity=37.19, cloud=0.0, wind=35.78, temperature=16.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:51:09.158', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:51:36.032 [DEBUG] [Thread-188804] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:51:36.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-14T16:51:36.119 [DEBUG] [Thread-188807] [transport.py] [_log()] starting thread (client mode): 0xa2db4580
2026-02-14T16:51:36.119 [DEBUG] [Thread-188807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:51:36.134 [DEBUG] [Thread-188807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:51:36.134 [INFO] [Thread-188807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:51:36.141 [DEBUG] [Thread-188807] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:51:36.142 [DEBUG] [Thread-188807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:51:36.142 [DEBUG] [Thread-188807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:51:36.142 [DEBUG] [Thread-188807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:51:36.142 [DEBUG] [Thread-188807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:51:36.142 [DEBUG] [Thread-188807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:51:36.142 [DEBUG] [Thread-188807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:51:36.142 [DEBUG] [Thread-188807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:51:36.142 [DEBUG] [Thread-188807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:51:36.142 [DEBUG] [Thread-188807] [transport.py] [_log()] client lang: <none>
2026-02-14T16:51:36.142 [DEBUG] [Thread-188807] [transport.py] [_log()] server lang: <none>
2026-02-14T16:51:36.142 [DEBUG] [Thread-188807] [transport.py] [_log()] kex follows: False
2026-02-14T16:51:36.142 [DEBUG] [Thread-188807] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:51:36.142 [DEBUG] [Thread-188807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:51:36.142 [DEBUG] [Thread-188807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:51:36.142 [DEBUG] [Thread-188807] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:51:36.143 [DEBUG] [Thread-188807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:51:36.143 [DEBUG] [Thread-188807] [transport.py] [_log()] Compression: none
2026-02-14T16:51:36.143 [DEBUG] [Thread-188807] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:51:36.201 [DEBUG] [Thread-188807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:51:36.201 [DEBUG] [Thread-188807] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:51:36.202 [DEBUG] [Thread-188807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:51:36.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:51:36.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:51:36.256 [DEBUG] [Thread-188807] [transport.py] [_log()] userauth is OK
2026-02-14T16:51:36.257 [DEBUG] [Thread-188807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:51:36.257 [DEBUG] [Thread-188807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:51:36.257 [DEBUG] [Thread-188807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:51:36.257 [DEBUG] [Thread-188807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:51:36.275 [INFO] [Thread-188807] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:51:36.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:51:36.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:51:37.075 [DEBUG] [Thread-188807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:51:37.075 [DEBUG] [Thread-188807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:51:37.123 [DEBUG] [Thread-188807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:51:37.124 [DEBUG] [Thread-188807] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:51:37.133 [DEBUG] [Thread-188807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:51:37.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:51:37.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-14T16:51:37.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-14T16:51:37.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:51:37.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:51:37.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:51:37.169 [DEBUG] [Thread-188807] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:51:41.598 [DEBUG] [Thread-188809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:51:56.658 [DEBUG] [Thread-188810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:51:58.995 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:51:58.997 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:52:07.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:52:07.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:52:07.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-14T16:52:09.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 51, 55), 14.77, 36.87, 0.0, 40.3, 16.57, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:52:09.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:51:55
2026-02-14T16:52:09.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:52:09.735 [DEBUG] [Thread-188811] [transport.py] [_log()] starting thread (client mode): 0xa57c15a0
2026-02-14T16:52:09.735 [DEBUG] [Thread-188811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:52:09.756 [DEBUG] [Thread-188811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:52:09.756 [INFO] [Thread-188811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:52:09.759 [DEBUG] [Thread-188811] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:52:09.760 [DEBUG] [Thread-188811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:52:09.760 [DEBUG] [Thread-188811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:52:09.760 [DEBUG] [Thread-188811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:52:09.760 [DEBUG] [Thread-188811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:52:09.760 [DEBUG] [Thread-188811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:52:09.760 [DEBUG] [Thread-188811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:52:09.760 [DEBUG] [Thread-188811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:52:09.760 [DEBUG] [Thread-188811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:52:09.760 [DEBUG] [Thread-188811] [transport.py] [_log()] client lang: <none>
2026-02-14T16:52:09.760 [DEBUG] [Thread-188811] [transport.py] [_log()] server lang: <none>
2026-02-14T16:52:09.760 [DEBUG] [Thread-188811] [transport.py] [_log()] kex follows: False
2026-02-14T16:52:09.760 [DEBUG] [Thread-188811] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:52:09.760 [DEBUG] [Thread-188811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:52:09.760 [DEBUG] [Thread-188811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:52:09.760 [DEBUG] [Thread-188811] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:52:09.760 [DEBUG] [Thread-188811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:52:09.760 [DEBUG] [Thread-188811] [transport.py] [_log()] Compression: none
2026-02-14T16:52:09.760 [DEBUG] [Thread-188811] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:52:09.778 [DEBUG] [Thread-188811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:52:09.778 [DEBUG] [Thread-188811] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:52:09.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:52:09.779 [DEBUG] [Thread-188811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:52:09.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:52:09.821 [DEBUG] [Thread-188811] [transport.py] [_log()] userauth is OK
2026-02-14T16:52:09.821 [DEBUG] [Thread-188811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:52:09.821 [DEBUG] [Thread-188811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:52:09.821 [DEBUG] [Thread-188811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:52:09.822 [DEBUG] [Thread-188811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:52:09.841 [INFO] [Thread-188811] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:52:09.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:52:10.426 [DEBUG] [Thread-188811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:52:10.427 [DEBUG] [Thread-188811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:52:10.427 [DEBUG] [Thread-188811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:52:10.468 [DEBUG] [Thread-188811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:52:10.468 [DEBUG] [Thread-188811] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:52:10.471 [DEBUG] [Thread-188811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:52:10.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:52:10.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:52:10.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:52:10.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:52:10.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:52:10.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:52:10.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:52:10.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:52:10.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:52:10.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.619203 -999.00  +15.90  36.19     43   +3.60 1 1 2 1 1   888    0 11.14 -55.93 ----- 29.1 36.2 162.2 43.2 20.4 -29.2 19.9 -26.7 21.4 -25.7 22.3 -28.6
2026-02-14T16:52:10.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:52:10.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:52:10.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.619203
2026-02-14T16:52:10.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:52:10.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:52:10.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:52:10.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:52:10.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:52:10.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:51:55', tmtdew=14.77, humidity=36.87, cloud=0.0, wind=40.3, temperature=16.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:51:39.139', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:52:10.500 [DEBUG] [Thread-188811] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:52:10.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-14T16:52:10.598 [DEBUG] [Thread-188814] [transport.py] [_log()] starting thread (client mode): 0xa57c2200
2026-02-14T16:52:10.599 [DEBUG] [Thread-188814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:52:10.613 [DEBUG] [Thread-188814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:52:10.613 [INFO] [Thread-188814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:52:10.621 [DEBUG] [Thread-188814] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:52:10.621 [DEBUG] [Thread-188814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:52:10.621 [DEBUG] [Thread-188814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:52:10.621 [DEBUG] [Thread-188814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:52:10.621 [DEBUG] [Thread-188814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:52:10.622 [DEBUG] [Thread-188814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:52:10.622 [DEBUG] [Thread-188814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:52:10.622 [DEBUG] [Thread-188814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:52:10.622 [DEBUG] [Thread-188814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:52:10.622 [DEBUG] [Thread-188814] [transport.py] [_log()] client lang: <none>
2026-02-14T16:52:10.622 [DEBUG] [Thread-188814] [transport.py] [_log()] server lang: <none>
2026-02-14T16:52:10.622 [DEBUG] [Thread-188814] [transport.py] [_log()] kex follows: False
2026-02-14T16:52:10.622 [DEBUG] [Thread-188814] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:52:10.623 [DEBUG] [Thread-188814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:52:10.623 [DEBUG] [Thread-188814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:52:10.623 [DEBUG] [Thread-188814] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:52:10.623 [DEBUG] [Thread-188814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:52:10.623 [DEBUG] [Thread-188814] [transport.py] [_log()] Compression: none
2026-02-14T16:52:10.623 [DEBUG] [Thread-188814] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:52:10.681 [DEBUG] [Thread-188814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:52:10.682 [DEBUG] [Thread-188814] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:52:10.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:52:10.683 [DEBUG] [Thread-188814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:52:10.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:52:10.737 [DEBUG] [Thread-188814] [transport.py] [_log()] userauth is OK
2026-02-14T16:52:10.737 [DEBUG] [Thread-188814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:52:10.737 [DEBUG] [Thread-188814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:52:10.738 [DEBUG] [Thread-188814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:52:10.738 [DEBUG] [Thread-188814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:52:10.756 [INFO] [Thread-188814] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:52:10.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-14T16:52:10.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:52:11.548 [DEBUG] [Thread-188814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:52:11.549 [DEBUG] [Thread-188814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:52:11.596 [DEBUG] [Thread-188814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:52:11.596 [DEBUG] [Thread-188814] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:52:11.605 [DEBUG] [Thread-188814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:52:11.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:52:11.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-14T16:52:11.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-14T16:52:11.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:52:11.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:52:11.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:52:11.640 [DEBUG] [Thread-188814] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:52:11.694 [DEBUG] [Thread-188816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:52:26.748 [DEBUG] [Thread-188817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:52:32.290 [DEBUG] [Thread-188818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:52:41.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:52:41.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:52:41.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:52:41.785 [DEBUG] [Thread-188819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:52:43.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 52, 30), 14.71, 36.97, 0.0, 36.42, 16.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:52:43.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:52:30
2026-02-14T16:52:43.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:52:44.086 [DEBUG] [Thread-188820] [transport.py] [_log()] starting thread (client mode): 0xa2db7ee0
2026-02-14T16:52:44.087 [DEBUG] [Thread-188820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:52:44.107 [DEBUG] [Thread-188820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:52:44.107 [INFO] [Thread-188820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:52:44.111 [DEBUG] [Thread-188820] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:52:44.111 [DEBUG] [Thread-188820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:52:44.111 [DEBUG] [Thread-188820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:52:44.111 [DEBUG] [Thread-188820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:52:44.111 [DEBUG] [Thread-188820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:52:44.111 [DEBUG] [Thread-188820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:52:44.111 [DEBUG] [Thread-188820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:52:44.111 [DEBUG] [Thread-188820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:52:44.111 [DEBUG] [Thread-188820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:52:44.111 [DEBUG] [Thread-188820] [transport.py] [_log()] client lang: <none>
2026-02-14T16:52:44.111 [DEBUG] [Thread-188820] [transport.py] [_log()] server lang: <none>
2026-02-14T16:52:44.111 [DEBUG] [Thread-188820] [transport.py] [_log()] kex follows: False
2026-02-14T16:52:44.111 [DEBUG] [Thread-188820] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:52:44.112 [DEBUG] [Thread-188820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:52:44.112 [DEBUG] [Thread-188820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:52:44.112 [DEBUG] [Thread-188820] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:52:44.112 [DEBUG] [Thread-188820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:52:44.112 [DEBUG] [Thread-188820] [transport.py] [_log()] Compression: none
2026-02-14T16:52:44.112 [DEBUG] [Thread-188820] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:52:44.128 [DEBUG] [Thread-188820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:52:44.129 [DEBUG] [Thread-188820] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:52:44.129 [DEBUG] [Thread-188820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:52:44.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:52:44.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:52:44.131 [DEBUG] [Thread-188820] [transport.py] [_log()] userauth is OK
2026-02-14T16:52:44.131 [DEBUG] [Thread-188820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:52:44.131 [DEBUG] [Thread-188820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:52:44.132 [DEBUG] [Thread-188820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:52:44.132 [DEBUG] [Thread-188820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:52:44.155 [INFO] [Thread-188820] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:52:44.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:52:44.751 [DEBUG] [Thread-188820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:52:44.751 [DEBUG] [Thread-188820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:52:44.751 [DEBUG] [Thread-188820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:52:44.791 [DEBUG] [Thread-188820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:52:44.791 [DEBUG] [Thread-188820] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:52:44.795 [DEBUG] [Thread-188820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:52:44.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:52:44.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:52:44.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:52:44.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:52:44.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:52:44.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:52:44.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:52:44.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:52:44.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:52:44.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.619550 -999.00  +16.10  22.67     43   +3.70 1 1 1 1 1   888    0 11.52 -57.30 ----- 31.1 22.7 158.0 35.7 20.4 -28.7 19.9 -27.2 21.4 -25.3 22.3 -28.1
2026-02-14T16:52:44.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:52:44.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:52:44.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.619550
2026-02-14T16:52:44.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:52:44.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:52:44.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:52:44.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:52:44.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:52:44.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:52:30', tmtdew=14.71, humidity=36.97, cloud=0.0, wind=36.42, temperature=16.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:52:09.120', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:52:44.824 [DEBUG] [Thread-188820] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:52:44.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-14T16:52:44.918 [DEBUG] [Thread-188823] [transport.py] [_log()] starting thread (client mode): 0xa2dee5c0
2026-02-14T16:52:44.918 [DEBUG] [Thread-188823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:52:44.932 [DEBUG] [Thread-188823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:52:44.932 [INFO] [Thread-188823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:52:44.939 [DEBUG] [Thread-188823] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:52:44.940 [DEBUG] [Thread-188823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:52:44.940 [DEBUG] [Thread-188823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:52:44.940 [DEBUG] [Thread-188823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:52:44.940 [DEBUG] [Thread-188823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:52:44.940 [DEBUG] [Thread-188823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:52:44.940 [DEBUG] [Thread-188823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:52:44.940 [DEBUG] [Thread-188823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:52:44.940 [DEBUG] [Thread-188823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:52:44.940 [DEBUG] [Thread-188823] [transport.py] [_log()] client lang: <none>
2026-02-14T16:52:44.941 [DEBUG] [Thread-188823] [transport.py] [_log()] server lang: <none>
2026-02-14T16:52:44.941 [DEBUG] [Thread-188823] [transport.py] [_log()] kex follows: False
2026-02-14T16:52:44.941 [DEBUG] [Thread-188823] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:52:44.941 [DEBUG] [Thread-188823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:52:44.941 [DEBUG] [Thread-188823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:52:44.941 [DEBUG] [Thread-188823] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:52:44.942 [DEBUG] [Thread-188823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:52:44.942 [DEBUG] [Thread-188823] [transport.py] [_log()] Compression: none
2026-02-14T16:52:44.942 [DEBUG] [Thread-188823] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:52:44.999 [DEBUG] [Thread-188823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:52:45.000 [DEBUG] [Thread-188823] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:52:45.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:52:45.001 [DEBUG] [Thread-188823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:52:45.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:52:45.056 [DEBUG] [Thread-188823] [transport.py] [_log()] userauth is OK
2026-02-14T16:52:45.056 [DEBUG] [Thread-188823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:52:45.056 [DEBUG] [Thread-188823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:52:45.056 [DEBUG] [Thread-188823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:52:45.057 [DEBUG] [Thread-188823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:52:45.076 [INFO] [Thread-188823] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:52:45.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-14T16:52:45.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:52:45.885 [DEBUG] [Thread-188823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:52:45.886 [DEBUG] [Thread-188823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:52:45.933 [DEBUG] [Thread-188823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:52:45.934 [DEBUG] [Thread-188823] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:52:45.943 [DEBUG] [Thread-188823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:52:45.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:52:45.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:52:45.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:52:45.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:52:45.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:52:45.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:52:45.980 [DEBUG] [Thread-188823] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:52:56.821 [DEBUG] [Thread-188825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:52:59.137 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:52:59.138 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:53:11.868 [DEBUG] [Thread-188826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:53:16.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:53:16.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:53:16.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-14T16:53:18.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 53, 6), 14.65, 37.1, 0.0, 35.85, 16.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:53:18.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:53:06
2026-02-14T16:53:18.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:53:19.095 [DEBUG] [Thread-188827] [transport.py] [_log()] starting thread (client mode): 0xa2db62c0
2026-02-14T16:53:19.095 [DEBUG] [Thread-188827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:53:19.116 [DEBUG] [Thread-188827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:53:19.116 [INFO] [Thread-188827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:53:19.121 [DEBUG] [Thread-188827] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:53:19.121 [DEBUG] [Thread-188827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:53:19.122 [DEBUG] [Thread-188827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:53:19.122 [DEBUG] [Thread-188827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:53:19.122 [DEBUG] [Thread-188827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:53:19.122 [DEBUG] [Thread-188827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:53:19.122 [DEBUG] [Thread-188827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:53:19.122 [DEBUG] [Thread-188827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:53:19.122 [DEBUG] [Thread-188827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:53:19.122 [DEBUG] [Thread-188827] [transport.py] [_log()] client lang: <none>
2026-02-14T16:53:19.122 [DEBUG] [Thread-188827] [transport.py] [_log()] server lang: <none>
2026-02-14T16:53:19.122 [DEBUG] [Thread-188827] [transport.py] [_log()] kex follows: False
2026-02-14T16:53:19.122 [DEBUG] [Thread-188827] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:53:19.122 [DEBUG] [Thread-188827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:53:19.123 [DEBUG] [Thread-188827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:53:19.123 [DEBUG] [Thread-188827] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:53:19.123 [DEBUG] [Thread-188827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:53:19.123 [DEBUG] [Thread-188827] [transport.py] [_log()] Compression: none
2026-02-14T16:53:19.123 [DEBUG] [Thread-188827] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:53:19.141 [DEBUG] [Thread-188827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:53:19.141 [DEBUG] [Thread-188827] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:53:19.142 [DEBUG] [Thread-188827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:53:19.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:53:19.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:53:19.144 [DEBUG] [Thread-188827] [transport.py] [_log()] userauth is OK
2026-02-14T16:53:19.144 [DEBUG] [Thread-188827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:53:19.144 [DEBUG] [Thread-188827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:53:19.145 [DEBUG] [Thread-188827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:53:19.145 [DEBUG] [Thread-188827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:53:19.161 [INFO] [Thread-188827] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:53:19.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:53:19.934 [DEBUG] [Thread-188827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:53:19.934 [DEBUG] [Thread-188827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:53:19.935 [DEBUG] [Thread-188827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:53:19.975 [DEBUG] [Thread-188827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:53:19.976 [DEBUG] [Thread-188827] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:53:19.979 [DEBUG] [Thread-188827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:53:19.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:53:19.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:53:19.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:53:19.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:53:20.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:53:20.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:53:20.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:53:20.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:53:20.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:53:20.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.619898 -999.00  +16.00  32.68     43   +3.60 1 1 2 1 1   887    0 10.95 -55.83 ----- 33.4 32.7 161.2 38.9 20.3 -29.9 19.9 -27.7 21.4 -26.2 22.2 -30.3
2026-02-14T16:53:20.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:53:20.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:53:20.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.619898
2026-02-14T16:53:20.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:53:20.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:53:20.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:53:20.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:53:20.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:53:20.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:53:06', tmtdew=14.65, humidity=37.1, cloud=0.0, wind=35.85, temperature=16.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:52:39.187', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:53:20.005 [DEBUG] [Thread-188827] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:53:20.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-14T16:53:20.100 [DEBUG] [Thread-188830] [transport.py] [_log()] starting thread (client mode): 0xa2db4e20
2026-02-14T16:53:20.100 [DEBUG] [Thread-188830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:53:20.114 [DEBUG] [Thread-188830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:53:20.115 [INFO] [Thread-188830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:53:20.122 [DEBUG] [Thread-188830] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:53:20.122 [DEBUG] [Thread-188830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:53:20.123 [DEBUG] [Thread-188830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:53:20.123 [DEBUG] [Thread-188830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:53:20.123 [DEBUG] [Thread-188830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:53:20.123 [DEBUG] [Thread-188830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:53:20.123 [DEBUG] [Thread-188830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:53:20.123 [DEBUG] [Thread-188830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:53:20.123 [DEBUG] [Thread-188830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:53:20.123 [DEBUG] [Thread-188830] [transport.py] [_log()] client lang: <none>
2026-02-14T16:53:20.123 [DEBUG] [Thread-188830] [transport.py] [_log()] server lang: <none>
2026-02-14T16:53:20.123 [DEBUG] [Thread-188830] [transport.py] [_log()] kex follows: False
2026-02-14T16:53:20.123 [DEBUG] [Thread-188830] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:53:20.124 [DEBUG] [Thread-188830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:53:20.124 [DEBUG] [Thread-188830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:53:20.124 [DEBUG] [Thread-188830] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:53:20.124 [DEBUG] [Thread-188830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:53:20.124 [DEBUG] [Thread-188830] [transport.py] [_log()] Compression: none
2026-02-14T16:53:20.124 [DEBUG] [Thread-188830] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:53:20.181 [DEBUG] [Thread-188830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:53:20.182 [DEBUG] [Thread-188830] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:53:20.182 [DEBUG] [Thread-188830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:53:20.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:53:20.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:53:20.244 [DEBUG] [Thread-188830] [transport.py] [_log()] userauth is OK
2026-02-14T16:53:20.244 [DEBUG] [Thread-188830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:53:20.244 [DEBUG] [Thread-188830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:53:20.245 [DEBUG] [Thread-188830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:53:20.245 [DEBUG] [Thread-188830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:53:20.266 [INFO] [Thread-188830] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:53:20.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-14T16:53:20.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:53:21.064 [DEBUG] [Thread-188830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:53:21.064 [DEBUG] [Thread-188830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:53:21.113 [DEBUG] [Thread-188830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:53:21.113 [DEBUG] [Thread-188830] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:53:21.121 [DEBUG] [Thread-188830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:53:21.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:53:21.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:53:21.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:53:21.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:53:21.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:53:21.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:53:21.153 [DEBUG] [Thread-188830] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:53:26.906 [DEBUG] [Thread-188832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:53:32.330 [DEBUG] [Thread-188833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:53:41.955 [DEBUG] [Thread-188834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:53:51.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:53:51.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:53:51.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-14T16:53:53.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 53, 42), 15.32, 35.64, 0.0, 46.64, 17.14, 0, 0, 0, 2, 1, 0),)
2026-02-14T16:53:53.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:53:42
2026-02-14T16:53:53.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:53:53.679 [DEBUG] [Thread-188835] [transport.py] [_log()] starting thread (client mode): 0xa2db5030
2026-02-14T16:53:53.679 [DEBUG] [Thread-188835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:53:53.700 [DEBUG] [Thread-188835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:53:53.700 [INFO] [Thread-188835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:53:53.703 [DEBUG] [Thread-188835] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:53:53.703 [DEBUG] [Thread-188835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:53:53.703 [DEBUG] [Thread-188835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:53:53.703 [DEBUG] [Thread-188835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:53:53.703 [DEBUG] [Thread-188835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:53:53.703 [DEBUG] [Thread-188835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:53:53.703 [DEBUG] [Thread-188835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:53:53.703 [DEBUG] [Thread-188835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:53:53.703 [DEBUG] [Thread-188835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:53:53.703 [DEBUG] [Thread-188835] [transport.py] [_log()] client lang: <none>
2026-02-14T16:53:53.703 [DEBUG] [Thread-188835] [transport.py] [_log()] server lang: <none>
2026-02-14T16:53:53.703 [DEBUG] [Thread-188835] [transport.py] [_log()] kex follows: False
2026-02-14T16:53:53.703 [DEBUG] [Thread-188835] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:53:53.703 [DEBUG] [Thread-188835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:53:53.703 [DEBUG] [Thread-188835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:53:53.703 [DEBUG] [Thread-188835] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:53:53.703 [DEBUG] [Thread-188835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:53:53.703 [DEBUG] [Thread-188835] [transport.py] [_log()] Compression: none
2026-02-14T16:53:53.703 [DEBUG] [Thread-188835] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:53:53.720 [DEBUG] [Thread-188835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:53:53.721 [DEBUG] [Thread-188835] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:53:53.721 [DEBUG] [Thread-188835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:53:53.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:53:53.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:53:53.723 [DEBUG] [Thread-188835] [transport.py] [_log()] userauth is OK
2026-02-14T16:53:53.723 [DEBUG] [Thread-188835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:53:53.723 [DEBUG] [Thread-188835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:53:53.724 [DEBUG] [Thread-188835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:53:53.724 [DEBUG] [Thread-188835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:53:53.742 [INFO] [Thread-188835] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:53:53.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:53:54.377 [DEBUG] [Thread-188835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:53:54.377 [DEBUG] [Thread-188835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:53:54.378 [DEBUG] [Thread-188835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:53:54.418 [DEBUG] [Thread-188835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:53:54.418 [DEBUG] [Thread-188835] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:53:54.421 [DEBUG] [Thread-188835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:53:54.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:53:54.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:53:54.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:53:54.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:53:54.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:53:54.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:53:54.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:53:54.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:53:54.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:53:54.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.620245 -999.00  +16.00  19.89     44   +3.70 1 1 1 1 1   887    0 11.26 -57.03 ----- 25.4 19.9 165.8 38.6 20.2 -28.0 19.8 -28.9 21.3 -27.1 22.0 -28.4
2026-02-14T16:53:54.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:53:54.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:53:54.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.620245
2026-02-14T16:53:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:53:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:53:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:53:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:53:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:53:54.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:53:42', tmtdew=15.32, humidity=35.64, cloud=0.0, wind=46.64, temperature=17.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:53:09.168', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:53:54.448 [DEBUG] [Thread-188835] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:53:54.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-14T16:53:54.544 [DEBUG] [Thread-188838] [transport.py] [_log()] starting thread (client mode): 0xa2d7a1a0
2026-02-14T16:53:54.544 [DEBUG] [Thread-188838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:53:54.559 [DEBUG] [Thread-188838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:53:54.559 [INFO] [Thread-188838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:53:54.567 [DEBUG] [Thread-188838] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:53:54.567 [DEBUG] [Thread-188838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:53:54.568 [DEBUG] [Thread-188838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:53:54.568 [DEBUG] [Thread-188838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:53:54.568 [DEBUG] [Thread-188838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:53:54.568 [DEBUG] [Thread-188838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:53:54.568 [DEBUG] [Thread-188838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:53:54.568 [DEBUG] [Thread-188838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:53:54.568 [DEBUG] [Thread-188838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:53:54.568 [DEBUG] [Thread-188838] [transport.py] [_log()] client lang: <none>
2026-02-14T16:53:54.568 [DEBUG] [Thread-188838] [transport.py] [_log()] server lang: <none>
2026-02-14T16:53:54.568 [DEBUG] [Thread-188838] [transport.py] [_log()] kex follows: False
2026-02-14T16:53:54.568 [DEBUG] [Thread-188838] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:53:54.568 [DEBUG] [Thread-188838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:53:54.568 [DEBUG] [Thread-188838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:53:54.568 [DEBUG] [Thread-188838] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:53:54.568 [DEBUG] [Thread-188838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:53:54.568 [DEBUG] [Thread-188838] [transport.py] [_log()] Compression: none
2026-02-14T16:53:54.568 [DEBUG] [Thread-188838] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:53:54.626 [DEBUG] [Thread-188838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:53:54.626 [DEBUG] [Thread-188838] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:53:54.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:53:54.628 [DEBUG] [Thread-188838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:53:54.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:53:54.682 [DEBUG] [Thread-188838] [transport.py] [_log()] userauth is OK
2026-02-14T16:53:54.682 [DEBUG] [Thread-188838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:53:54.682 [DEBUG] [Thread-188838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:53:54.682 [DEBUG] [Thread-188838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:53:54.683 [DEBUG] [Thread-188838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:53:54.702 [INFO] [Thread-188838] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:53:54.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-14T16:53:54.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:53:55.514 [DEBUG] [Thread-188838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:53:55.514 [DEBUG] [Thread-188838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:53:55.562 [DEBUG] [Thread-188838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:53:55.562 [DEBUG] [Thread-188838] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:53:55.570 [DEBUG] [Thread-188838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:53:55.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:53:55.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-14T16:53:55.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-14T16:53:55.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:53:55.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:53:55.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:53:55.604 [DEBUG] [Thread-188838] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:53:56.993 [DEBUG] [Thread-188840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:53:59.279 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:53:59.281 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:54:12.045 [DEBUG] [Thread-188841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:54:25.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:54:25.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:54:25.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-14T16:54:27.080 [DEBUG] [Thread-188842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:54:27.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 54, 18), 14.44, 37.97, 0.0, 33.42, 16.2, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:54:27.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:54:18
2026-02-14T16:54:27.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:54:27.941 [DEBUG] [Thread-188843] [transport.py] [_log()] starting thread (client mode): 0xa2d79b70
2026-02-14T16:54:27.941 [DEBUG] [Thread-188843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:54:27.960 [DEBUG] [Thread-188843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:54:27.960 [INFO] [Thread-188843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:54:27.962 [DEBUG] [Thread-188843] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:54:27.962 [DEBUG] [Thread-188843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:54:27.962 [DEBUG] [Thread-188843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:54:27.962 [DEBUG] [Thread-188843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:54:27.962 [DEBUG] [Thread-188843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:54:27.962 [DEBUG] [Thread-188843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:54:27.962 [DEBUG] [Thread-188843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:54:27.962 [DEBUG] [Thread-188843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:54:27.962 [DEBUG] [Thread-188843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:54:27.962 [DEBUG] [Thread-188843] [transport.py] [_log()] client lang: <none>
2026-02-14T16:54:27.962 [DEBUG] [Thread-188843] [transport.py] [_log()] server lang: <none>
2026-02-14T16:54:27.962 [DEBUG] [Thread-188843] [transport.py] [_log()] kex follows: False
2026-02-14T16:54:27.962 [DEBUG] [Thread-188843] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:54:27.962 [DEBUG] [Thread-188843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:54:27.962 [DEBUG] [Thread-188843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:54:27.962 [DEBUG] [Thread-188843] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:54:27.962 [DEBUG] [Thread-188843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:54:27.962 [DEBUG] [Thread-188843] [transport.py] [_log()] Compression: none
2026-02-14T16:54:27.962 [DEBUG] [Thread-188843] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:54:27.987 [DEBUG] [Thread-188843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:54:27.988 [DEBUG] [Thread-188843] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:54:27.988 [DEBUG] [Thread-188843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:54:27.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:54:27.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:54:27.992 [DEBUG] [Thread-188843] [transport.py] [_log()] userauth is OK
2026-02-14T16:54:27.992 [DEBUG] [Thread-188843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:54:27.992 [DEBUG] [Thread-188843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:54:27.992 [DEBUG] [Thread-188843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:54:27.992 [DEBUG] [Thread-188843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:54:28.011 [INFO] [Thread-188843] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:54:28.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:54:28.577 [DEBUG] [Thread-188843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:54:28.577 [DEBUG] [Thread-188843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:54:28.577 [DEBUG] [Thread-188843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:54:28.617 [DEBUG] [Thread-188843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:54:28.618 [DEBUG] [Thread-188843] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:54:28.621 [DEBUG] [Thread-188843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:54:28.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:54:28.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:54:28.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:54:28.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:54:28.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:54:28.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:54:28.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:54:28.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:54:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:54:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.620592 -999.00  +15.90  26.96     43   +3.60 1 1 1 1 1   887    0 11.53 -54.74 ----- 29.5 27.0 163.2 39.8 20.3 -28.1 19.8 -27.0 21.3 -26.1 22.1 -28.4
2026-02-14T16:54:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:54:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:54:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.620592
2026-02-14T16:54:28.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:54:28.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:54:28.647 [DEBUG] [Thread-188843] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:54:28.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:54:28.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:54:28.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:54:28.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:54:18', tmtdew=14.44, humidity=37.97, cloud=0.0, wind=33.42, temperature=16.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:53:39.149', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:54:28.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-14T16:54:28.743 [DEBUG] [Thread-188846] [transport.py] [_log()] starting thread (client mode): 0xa2d7a230
2026-02-14T16:54:28.744 [DEBUG] [Thread-188846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:54:28.759 [DEBUG] [Thread-188846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:54:28.759 [INFO] [Thread-188846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:54:28.766 [DEBUG] [Thread-188846] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:54:28.767 [DEBUG] [Thread-188846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:54:28.767 [DEBUG] [Thread-188846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:54:28.767 [DEBUG] [Thread-188846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:54:28.767 [DEBUG] [Thread-188846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:54:28.767 [DEBUG] [Thread-188846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:54:28.767 [DEBUG] [Thread-188846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:54:28.767 [DEBUG] [Thread-188846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:54:28.767 [DEBUG] [Thread-188846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:54:28.767 [DEBUG] [Thread-188846] [transport.py] [_log()] client lang: <none>
2026-02-14T16:54:28.767 [DEBUG] [Thread-188846] [transport.py] [_log()] server lang: <none>
2026-02-14T16:54:28.767 [DEBUG] [Thread-188846] [transport.py] [_log()] kex follows: False
2026-02-14T16:54:28.767 [DEBUG] [Thread-188846] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:54:28.767 [DEBUG] [Thread-188846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:54:28.767 [DEBUG] [Thread-188846] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:54:28.767 [DEBUG] [Thread-188846] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:54:28.768 [DEBUG] [Thread-188846] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:54:28.768 [DEBUG] [Thread-188846] [transport.py] [_log()] Compression: none
2026-02-14T16:54:28.768 [DEBUG] [Thread-188846] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:54:28.827 [DEBUG] [Thread-188846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:54:28.827 [DEBUG] [Thread-188846] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:54:28.828 [DEBUG] [Thread-188846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:54:28.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:54:28.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:54:28.882 [DEBUG] [Thread-188846] [transport.py] [_log()] userauth is OK
2026-02-14T16:54:28.883 [DEBUG] [Thread-188846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:54:28.883 [DEBUG] [Thread-188846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:54:28.883 [DEBUG] [Thread-188846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:54:28.883 [DEBUG] [Thread-188846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:54:28.901 [INFO] [Thread-188846] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:54:28.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:54:28.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:54:29.723 [DEBUG] [Thread-188846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:54:29.724 [DEBUG] [Thread-188846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:54:29.771 [DEBUG] [Thread-188846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:54:29.771 [DEBUG] [Thread-188846] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:54:29.780 [DEBUG] [Thread-188846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:54:29.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:54:29.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-14T16:54:29.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-14T16:54:29.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:54:29.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:54:29.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:54:29.816 [DEBUG] [Thread-188846] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:54:32.380 [DEBUG] [Thread-188848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:54:42.117 [DEBUG] [Thread-188849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:54:57.167 [DEBUG] [Thread-188850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:54:59.419 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:54:59.420 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:54:59.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:54:59.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:54:59.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T16:55:01.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 54, 53), 14.46, 37.78, 0.0, 35.91, 16.24, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:55:01.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:54:53
2026-02-14T16:55:02.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:55:02.245 [DEBUG] [Thread-188851] [transport.py] [_log()] starting thread (client mode): 0xa2dc14b0
2026-02-14T16:55:02.246 [DEBUG] [Thread-188851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:55:02.264 [DEBUG] [Thread-188851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:55:02.265 [INFO] [Thread-188851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:55:02.268 [DEBUG] [Thread-188851] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:55:02.268 [DEBUG] [Thread-188851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:55:02.268 [DEBUG] [Thread-188851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:55:02.268 [DEBUG] [Thread-188851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:55:02.268 [DEBUG] [Thread-188851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:55:02.268 [DEBUG] [Thread-188851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:55:02.268 [DEBUG] [Thread-188851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:55:02.268 [DEBUG] [Thread-188851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:55:02.268 [DEBUG] [Thread-188851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:55:02.268 [DEBUG] [Thread-188851] [transport.py] [_log()] client lang: <none>
2026-02-14T16:55:02.268 [DEBUG] [Thread-188851] [transport.py] [_log()] server lang: <none>
2026-02-14T16:55:02.268 [DEBUG] [Thread-188851] [transport.py] [_log()] kex follows: False
2026-02-14T16:55:02.268 [DEBUG] [Thread-188851] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:55:02.268 [DEBUG] [Thread-188851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:55:02.268 [DEBUG] [Thread-188851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:55:02.268 [DEBUG] [Thread-188851] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:55:02.268 [DEBUG] [Thread-188851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:55:02.268 [DEBUG] [Thread-188851] [transport.py] [_log()] Compression: none
2026-02-14T16:55:02.268 [DEBUG] [Thread-188851] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:55:02.276 [DEBUG] [Thread-188851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:55:02.277 [DEBUG] [Thread-188851] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:55:02.277 [DEBUG] [Thread-188851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:55:02.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:55:02.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:55:02.279 [DEBUG] [Thread-188851] [transport.py] [_log()] userauth is OK
2026-02-14T16:55:02.279 [DEBUG] [Thread-188851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:55:02.279 [DEBUG] [Thread-188851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:55:02.279 [DEBUG] [Thread-188851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:55:02.279 [DEBUG] [Thread-188851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:55:02.297 [INFO] [Thread-188851] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:55:02.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:55:02.974 [DEBUG] [Thread-188851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:55:02.974 [DEBUG] [Thread-188851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:55:02.975 [DEBUG] [Thread-188851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:55:03.015 [DEBUG] [Thread-188851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:55:03.015 [DEBUG] [Thread-188851] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:55:03.018 [DEBUG] [Thread-188851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:55:03.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:55:03.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:55:03.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:55:03.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:55:03.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:55:03.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:55:03.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:55:03.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:55:03.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:55:03.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.620939 -999.00  +15.80  28.63     44   +3.60 1 1 1 1 1   887    0 11.21 -51.41 ----- 28.9 28.6 167.9 37.7 20.1 -28.7 19.7 -26.8 21.2 -26.2 21.9 -29.3
2026-02-14T16:55:03.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:55:03.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:55:03.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.620939
2026-02-14T16:55:03.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:55:03.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:55:03.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:55:03.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:55:03.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:55:03.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:54:53', tmtdew=14.46, humidity=37.78, cloud=0.0, wind=35.91, temperature=16.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:54:09.130', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:55:03.045 [DEBUG] [Thread-188851] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:55:03.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-14T16:55:03.144 [DEBUG] [Thread-188854] [transport.py] [_log()] starting thread (client mode): 0xa2db7940
2026-02-14T16:55:03.144 [DEBUG] [Thread-188854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:55:03.158 [DEBUG] [Thread-188854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:55:03.158 [INFO] [Thread-188854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:55:03.166 [DEBUG] [Thread-188854] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:55:03.166 [DEBUG] [Thread-188854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:55:03.166 [DEBUG] [Thread-188854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:55:03.166 [DEBUG] [Thread-188854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:55:03.166 [DEBUG] [Thread-188854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:55:03.166 [DEBUG] [Thread-188854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:55:03.166 [DEBUG] [Thread-188854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:55:03.166 [DEBUG] [Thread-188854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:55:03.166 [DEBUG] [Thread-188854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:55:03.167 [DEBUG] [Thread-188854] [transport.py] [_log()] client lang: <none>
2026-02-14T16:55:03.167 [DEBUG] [Thread-188854] [transport.py] [_log()] server lang: <none>
2026-02-14T16:55:03.167 [DEBUG] [Thread-188854] [transport.py] [_log()] kex follows: False
2026-02-14T16:55:03.167 [DEBUG] [Thread-188854] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:55:03.167 [DEBUG] [Thread-188854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:55:03.167 [DEBUG] [Thread-188854] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:55:03.167 [DEBUG] [Thread-188854] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:55:03.167 [DEBUG] [Thread-188854] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:55:03.167 [DEBUG] [Thread-188854] [transport.py] [_log()] Compression: none
2026-02-14T16:55:03.167 [DEBUG] [Thread-188854] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:55:03.233 [DEBUG] [Thread-188854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:55:03.233 [DEBUG] [Thread-188854] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:55:03.234 [DEBUG] [Thread-188854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:55:03.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:55:03.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:55:03.288 [DEBUG] [Thread-188854] [transport.py] [_log()] userauth is OK
2026-02-14T16:55:03.289 [DEBUG] [Thread-188854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:55:03.289 [DEBUG] [Thread-188854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:55:03.289 [DEBUG] [Thread-188854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:55:03.289 [DEBUG] [Thread-188854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:55:03.308 [INFO] [Thread-188854] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:55:03.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:55:03.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:55:04.118 [DEBUG] [Thread-188854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:55:04.118 [DEBUG] [Thread-188854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:55:04.167 [DEBUG] [Thread-188854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:55:04.167 [DEBUG] [Thread-188854] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:55:04.177 [DEBUG] [Thread-188854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:55:04.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:55:04.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:55:04.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-14T16:55:04.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:55:04.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:55:04.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:55:04.230 [DEBUG] [Thread-188854] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:55:12.205 [DEBUG] [Thread-188856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:55:27.258 [DEBUG] [Thread-188857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:55:32.425 [DEBUG] [Thread-188858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:55:34.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:55:34.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:55:34.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-14T16:55:36.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 54, 53), 14.46, 37.78, 0.0, 35.91, 16.24, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:55:36.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:54:53
2026-02-14T16:55:36.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:55:36.856 [DEBUG] [Thread-188859] [transport.py] [_log()] starting thread (client mode): 0xa2d78310
2026-02-14T16:55:36.856 [DEBUG] [Thread-188859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:55:36.878 [DEBUG] [Thread-188859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:55:36.878 [INFO] [Thread-188859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:55:36.881 [DEBUG] [Thread-188859] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:55:36.881 [DEBUG] [Thread-188859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:55:36.882 [DEBUG] [Thread-188859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:55:36.882 [DEBUG] [Thread-188859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:55:36.882 [DEBUG] [Thread-188859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:55:36.882 [DEBUG] [Thread-188859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:55:36.882 [DEBUG] [Thread-188859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:55:36.882 [DEBUG] [Thread-188859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:55:36.882 [DEBUG] [Thread-188859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:55:36.882 [DEBUG] [Thread-188859] [transport.py] [_log()] client lang: <none>
2026-02-14T16:55:36.882 [DEBUG] [Thread-188859] [transport.py] [_log()] server lang: <none>
2026-02-14T16:55:36.882 [DEBUG] [Thread-188859] [transport.py] [_log()] kex follows: False
2026-02-14T16:55:36.882 [DEBUG] [Thread-188859] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:55:36.883 [DEBUG] [Thread-188859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:55:36.883 [DEBUG] [Thread-188859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:55:36.883 [DEBUG] [Thread-188859] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:55:36.883 [DEBUG] [Thread-188859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:55:36.883 [DEBUG] [Thread-188859] [transport.py] [_log()] Compression: none
2026-02-14T16:55:36.883 [DEBUG] [Thread-188859] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:55:36.903 [DEBUG] [Thread-188859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:55:36.904 [DEBUG] [Thread-188859] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:55:36.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:55:36.905 [DEBUG] [Thread-188859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:55:36.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:55:36.907 [DEBUG] [Thread-188859] [transport.py] [_log()] userauth is OK
2026-02-14T16:55:36.907 [DEBUG] [Thread-188859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:55:36.908 [DEBUG] [Thread-188859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:55:36.908 [DEBUG] [Thread-188859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:55:36.908 [DEBUG] [Thread-188859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:55:36.928 [INFO] [Thread-188859] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:55:36.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:55:37.552 [DEBUG] [Thread-188859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:55:37.552 [DEBUG] [Thread-188859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:55:37.553 [DEBUG] [Thread-188859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:55:37.593 [DEBUG] [Thread-188859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:55:37.594 [DEBUG] [Thread-188859] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:55:37.597 [DEBUG] [Thread-188859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:55:37.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:55:37.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:55:37.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:55:37.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:55:37.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:55:37.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:55:37.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:55:37.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:55:37.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:55:37.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.621286 -999.00  +15.90  24.16     44   +3.70 1 1 1 1 1   887    0 11.19 -54.61 ----- 28.2 24.2 185.2 39.4 20.0 -28.9 19.3 -29.3 21.1 -27.1 21.9 -29.6
2026-02-14T16:55:37.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:55:37.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:55:37.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.621286
2026-02-14T16:55:37.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:55:37.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:55:37.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:55:37.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:55:37.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:55:37.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:54:53', tmtdew=14.46, humidity=37.78, cloud=0.0, wind=35.91, temperature=16.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:54:39.110', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:55:37.622 [DEBUG] [Thread-188859] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:55:37.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-14T16:55:37.718 [DEBUG] [Thread-188862] [transport.py] [_log()] starting thread (client mode): 0xa2d79a80
2026-02-14T16:55:37.718 [DEBUG] [Thread-188862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:55:37.733 [DEBUG] [Thread-188862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:55:37.734 [INFO] [Thread-188862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:55:37.741 [DEBUG] [Thread-188862] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:55:37.742 [DEBUG] [Thread-188862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:55:37.742 [DEBUG] [Thread-188862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:55:37.742 [DEBUG] [Thread-188862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:55:37.742 [DEBUG] [Thread-188862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:55:37.742 [DEBUG] [Thread-188862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:55:37.742 [DEBUG] [Thread-188862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:55:37.742 [DEBUG] [Thread-188862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:55:37.742 [DEBUG] [Thread-188862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:55:37.743 [DEBUG] [Thread-188862] [transport.py] [_log()] client lang: <none>
2026-02-14T16:55:37.743 [DEBUG] [Thread-188862] [transport.py] [_log()] server lang: <none>
2026-02-14T16:55:37.743 [DEBUG] [Thread-188862] [transport.py] [_log()] kex follows: False
2026-02-14T16:55:37.743 [DEBUG] [Thread-188862] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:55:37.743 [DEBUG] [Thread-188862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:55:37.743 [DEBUG] [Thread-188862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:55:37.743 [DEBUG] [Thread-188862] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:55:37.744 [DEBUG] [Thread-188862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:55:37.744 [DEBUG] [Thread-188862] [transport.py] [_log()] Compression: none
2026-02-14T16:55:37.744 [DEBUG] [Thread-188862] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:55:37.803 [DEBUG] [Thread-188862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:55:37.803 [DEBUG] [Thread-188862] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:55:37.804 [DEBUG] [Thread-188862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:55:37.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:55:37.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:55:37.862 [DEBUG] [Thread-188862] [transport.py] [_log()] userauth is OK
2026-02-14T16:55:37.863 [DEBUG] [Thread-188862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:55:37.863 [DEBUG] [Thread-188862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:55:37.863 [DEBUG] [Thread-188862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:55:37.863 [DEBUG] [Thread-188862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:55:37.886 [INFO] [Thread-188862] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:55:37.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-14T16:55:37.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:55:38.694 [DEBUG] [Thread-188862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:55:38.694 [DEBUG] [Thread-188862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:55:38.742 [DEBUG] [Thread-188862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:55:38.742 [DEBUG] [Thread-188862] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:55:38.752 [DEBUG] [Thread-188862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:55:38.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:55:38.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-14T16:55:38.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-14T16:55:38.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:55:38.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:55:38.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:55:38.785 [DEBUG] [Thread-188862] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:55:42.295 [DEBUG] [Thread-188864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:55:57.343 [DEBUG] [Thread-188865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:55:59.559 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:55:59.560 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:56:08.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:56:08.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:56:08.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-14T16:56:10.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 55, 28), 14.62, 37.44, 0.0, 34.74, 16.5, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:56:10.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:55:28
2026-02-14T16:56:11.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:56:11.257 [DEBUG] [Thread-188866] [transport.py] [_log()] starting thread (client mode): 0xa2d7bfd0
2026-02-14T16:56:11.257 [DEBUG] [Thread-188866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:56:11.277 [DEBUG] [Thread-188866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:56:11.278 [INFO] [Thread-188866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:56:11.280 [DEBUG] [Thread-188866] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:56:11.281 [DEBUG] [Thread-188866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:56:11.281 [DEBUG] [Thread-188866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:56:11.281 [DEBUG] [Thread-188866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:56:11.281 [DEBUG] [Thread-188866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:56:11.281 [DEBUG] [Thread-188866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:56:11.281 [DEBUG] [Thread-188866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:56:11.281 [DEBUG] [Thread-188866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:56:11.281 [DEBUG] [Thread-188866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:56:11.281 [DEBUG] [Thread-188866] [transport.py] [_log()] client lang: <none>
2026-02-14T16:56:11.281 [DEBUG] [Thread-188866] [transport.py] [_log()] server lang: <none>
2026-02-14T16:56:11.281 [DEBUG] [Thread-188866] [transport.py] [_log()] kex follows: False
2026-02-14T16:56:11.281 [DEBUG] [Thread-188866] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:56:11.281 [DEBUG] [Thread-188866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:56:11.281 [DEBUG] [Thread-188866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:56:11.281 [DEBUG] [Thread-188866] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:56:11.281 [DEBUG] [Thread-188866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:56:11.281 [DEBUG] [Thread-188866] [transport.py] [_log()] Compression: none
2026-02-14T16:56:11.281 [DEBUG] [Thread-188866] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:56:11.298 [DEBUG] [Thread-188866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:56:11.299 [DEBUG] [Thread-188866] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:56:11.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:56:11.300 [DEBUG] [Thread-188866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:56:11.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:56:11.302 [DEBUG] [Thread-188866] [transport.py] [_log()] userauth is OK
2026-02-14T16:56:11.302 [DEBUG] [Thread-188866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:56:11.302 [DEBUG] [Thread-188866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:56:11.303 [DEBUG] [Thread-188866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:56:11.303 [DEBUG] [Thread-188866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:56:11.326 [INFO] [Thread-188866] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:56:11.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:56:11.978 [DEBUG] [Thread-188866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:56:11.978 [DEBUG] [Thread-188866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:56:11.979 [DEBUG] [Thread-188866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:56:12.019 [DEBUG] [Thread-188866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:56:12.020 [DEBUG] [Thread-188866] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:56:12.023 [DEBUG] [Thread-188866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:56:12.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:56:12.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:56:12.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:56:12.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:56:12.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:56:12.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:56:12.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:56:12.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:56:12.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:56:12.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.621634 -999.00  +15.80  24.78     44   +3.60 1 1 1 1 1   887    0 10.71 -55.44 ----- 25.6 24.8 194.4 44.5 20.0 -29.0 19.3 -30.9 21.2 -26.5 21.9 -30.3
2026-02-14T16:56:12.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:56:12.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:56:12.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.621634
2026-02-14T16:56:12.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:56:12.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:56:12.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:56:12.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:56:12.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:56:12.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:55:28', tmtdew=14.62, humidity=37.44, cloud=0.0, wind=34.74, temperature=16.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:55:09.178', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:56:12.053 [DEBUG] [Thread-188866] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:56:12.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-14T16:56:12.148 [DEBUG] [Thread-188869] [transport.py] [_log()] starting thread (client mode): 0xa2d79330
2026-02-14T16:56:12.148 [DEBUG] [Thread-188869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:56:12.162 [DEBUG] [Thread-188869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:56:12.162 [INFO] [Thread-188869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:56:12.170 [DEBUG] [Thread-188869] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:56:12.170 [DEBUG] [Thread-188869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:56:12.170 [DEBUG] [Thread-188869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:56:12.170 [DEBUG] [Thread-188869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:56:12.170 [DEBUG] [Thread-188869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:56:12.170 [DEBUG] [Thread-188869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:56:12.171 [DEBUG] [Thread-188869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:56:12.171 [DEBUG] [Thread-188869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:56:12.171 [DEBUG] [Thread-188869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:56:12.171 [DEBUG] [Thread-188869] [transport.py] [_log()] client lang: <none>
2026-02-14T16:56:12.171 [DEBUG] [Thread-188869] [transport.py] [_log()] server lang: <none>
2026-02-14T16:56:12.171 [DEBUG] [Thread-188869] [transport.py] [_log()] kex follows: False
2026-02-14T16:56:12.171 [DEBUG] [Thread-188869] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:56:12.171 [DEBUG] [Thread-188869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:56:12.171 [DEBUG] [Thread-188869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:56:12.171 [DEBUG] [Thread-188869] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:56:12.171 [DEBUG] [Thread-188869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:56:12.171 [DEBUG] [Thread-188869] [transport.py] [_log()] Compression: none
2026-02-14T16:56:12.171 [DEBUG] [Thread-188869] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:56:12.227 [DEBUG] [Thread-188869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:56:12.228 [DEBUG] [Thread-188869] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:56:12.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:56:12.229 [DEBUG] [Thread-188869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:56:12.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:56:12.283 [DEBUG] [Thread-188869] [transport.py] [_log()] userauth is OK
2026-02-14T16:56:12.284 [DEBUG] [Thread-188869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:56:12.284 [DEBUG] [Thread-188869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:56:12.284 [DEBUG] [Thread-188869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:56:12.284 [DEBUG] [Thread-188869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:56:12.303 [INFO] [Thread-188869] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:56:12.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-14T16:56:12.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:56:12.379 [DEBUG] [Thread-188871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:56:13.085 [DEBUG] [Thread-188869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:56:13.085 [DEBUG] [Thread-188869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:56:13.133 [DEBUG] [Thread-188869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:56:13.133 [DEBUG] [Thread-188869] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:56:13.142 [DEBUG] [Thread-188869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:56:13.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:56:13.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-14T16:56:13.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:56:13.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:56:13.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:56:13.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:56:13.175 [DEBUG] [Thread-188869] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:56:27.430 [DEBUG] [Thread-188872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:56:32.458 [DEBUG] [Thread-188873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:56:42.470 [DEBUG] [Thread-188874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:56:43.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:56:43.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:56:43.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-14T16:56:45.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 56, 4), 14.85, 36.94, 0.0, 40.7, 16.75, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:56:45.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:56:04
2026-02-14T16:56:45.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:56:45.659 [DEBUG] [Thread-188875] [transport.py] [_log()] starting thread (client mode): 0xa2d7ad70
2026-02-14T16:56:45.660 [DEBUG] [Thread-188875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:56:45.678 [DEBUG] [Thread-188875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:56:45.678 [INFO] [Thread-188875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:56:45.682 [DEBUG] [Thread-188875] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:56:45.682 [DEBUG] [Thread-188875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:56:45.682 [DEBUG] [Thread-188875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:56:45.682 [DEBUG] [Thread-188875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:56:45.682 [DEBUG] [Thread-188875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:56:45.682 [DEBUG] [Thread-188875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:56:45.682 [DEBUG] [Thread-188875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:56:45.682 [DEBUG] [Thread-188875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:56:45.682 [DEBUG] [Thread-188875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:56:45.682 [DEBUG] [Thread-188875] [transport.py] [_log()] client lang: <none>
2026-02-14T16:56:45.682 [DEBUG] [Thread-188875] [transport.py] [_log()] server lang: <none>
2026-02-14T16:56:45.682 [DEBUG] [Thread-188875] [transport.py] [_log()] kex follows: False
2026-02-14T16:56:45.682 [DEBUG] [Thread-188875] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:56:45.682 [DEBUG] [Thread-188875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:56:45.682 [DEBUG] [Thread-188875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:56:45.682 [DEBUG] [Thread-188875] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:56:45.682 [DEBUG] [Thread-188875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:56:45.682 [DEBUG] [Thread-188875] [transport.py] [_log()] Compression: none
2026-02-14T16:56:45.682 [DEBUG] [Thread-188875] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:56:45.697 [DEBUG] [Thread-188875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:56:45.697 [DEBUG] [Thread-188875] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:56:45.698 [DEBUG] [Thread-188875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:56:45.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:56:45.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:56:45.699 [DEBUG] [Thread-188875] [transport.py] [_log()] userauth is OK
2026-02-14T16:56:45.700 [DEBUG] [Thread-188875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:56:45.700 [DEBUG] [Thread-188875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:56:45.700 [DEBUG] [Thread-188875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:56:45.700 [DEBUG] [Thread-188875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:56:45.722 [INFO] [Thread-188875] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:56:45.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:56:46.311 [DEBUG] [Thread-188875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:56:46.311 [DEBUG] [Thread-188875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:56:46.311 [DEBUG] [Thread-188875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:56:46.352 [DEBUG] [Thread-188875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:56:46.352 [DEBUG] [Thread-188875] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:56:46.356 [DEBUG] [Thread-188875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:56:46.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:56:46.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:56:46.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:56:46.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:56:46.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:56:46.377 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:56:46.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:56:46.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:56:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:56:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.622328 -999.00  +15.80  34.14     44   +3.70 1 1 2 1 1   887    0 11.11 -56.14 ----- 29.1 34.1 173.4 48.2 19.8 -28.0 19.3 -27.3 20.9 -25.8 21.6 -31.2
2026-02-14T16:56:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:56:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:56:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.622328
2026-02-14T16:56:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:56:46.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:56:46.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:56:46.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:56:46.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:56:46.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:56:04', tmtdew=14.85, humidity=36.94, cloud=0.0, wind=40.7, temperature=16.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:56:09.139', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:56:46.380 [DEBUG] [Thread-188875] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:56:46.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-14T16:56:46.478 [DEBUG] [Thread-188878] [transport.py] [_log()] starting thread (client mode): 0xa2deebc0
2026-02-14T16:56:46.479 [DEBUG] [Thread-188878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:56:46.493 [DEBUG] [Thread-188878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:56:46.493 [INFO] [Thread-188878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:56:46.501 [DEBUG] [Thread-188878] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:56:46.501 [DEBUG] [Thread-188878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:56:46.501 [DEBUG] [Thread-188878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:56:46.501 [DEBUG] [Thread-188878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:56:46.501 [DEBUG] [Thread-188878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:56:46.501 [DEBUG] [Thread-188878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:56:46.501 [DEBUG] [Thread-188878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:56:46.501 [DEBUG] [Thread-188878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:56:46.501 [DEBUG] [Thread-188878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:56:46.501 [DEBUG] [Thread-188878] [transport.py] [_log()] client lang: <none>
2026-02-14T16:56:46.501 [DEBUG] [Thread-188878] [transport.py] [_log()] server lang: <none>
2026-02-14T16:56:46.501 [DEBUG] [Thread-188878] [transport.py] [_log()] kex follows: False
2026-02-14T16:56:46.501 [DEBUG] [Thread-188878] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:56:46.501 [DEBUG] [Thread-188878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:56:46.502 [DEBUG] [Thread-188878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:56:46.502 [DEBUG] [Thread-188878] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:56:46.502 [DEBUG] [Thread-188878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:56:46.502 [DEBUG] [Thread-188878] [transport.py] [_log()] Compression: none
2026-02-14T16:56:46.502 [DEBUG] [Thread-188878] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:56:46.557 [DEBUG] [Thread-188878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:56:46.558 [DEBUG] [Thread-188878] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:56:46.559 [DEBUG] [Thread-188878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:56:46.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:56:46.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:56:46.614 [DEBUG] [Thread-188878] [transport.py] [_log()] userauth is OK
2026-02-14T16:56:46.614 [DEBUG] [Thread-188878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:56:46.614 [DEBUG] [Thread-188878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:56:46.614 [DEBUG] [Thread-188878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:56:46.614 [DEBUG] [Thread-188878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:56:46.634 [INFO] [Thread-188878] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:56:46.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-14T16:56:46.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:56:47.536 [DEBUG] [Thread-188878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:56:47.536 [DEBUG] [Thread-188878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:56:47.584 [DEBUG] [Thread-188878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:56:47.585 [DEBUG] [Thread-188878] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:56:47.594 [DEBUG] [Thread-188878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:56:47.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:56:47.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-14T16:56:47.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-14T16:56:47.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:56:47.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:56:47.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:56:47.631 [DEBUG] [Thread-188878] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:56:57.507 [DEBUG] [Thread-188880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:56:59.702 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:56:59.703 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:57:12.565 [DEBUG] [Thread-188881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:57:17.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:57:17.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:57:17.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-14T16:57:19.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 56, 39), 15.64, 34.91, 0.0, 44.74, 17.4, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:57:19.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:56:39
2026-02-14T16:57:20.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:57:20.285 [DEBUG] [Thread-188882] [transport.py] [_log()] starting thread (client mode): 0xa2d78eb0
2026-02-14T16:57:20.285 [DEBUG] [Thread-188882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:57:20.304 [DEBUG] [Thread-188882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:57:20.304 [INFO] [Thread-188882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:57:20.307 [DEBUG] [Thread-188882] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:57:20.308 [DEBUG] [Thread-188882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:57:20.308 [DEBUG] [Thread-188882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:57:20.308 [DEBUG] [Thread-188882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:57:20.308 [DEBUG] [Thread-188882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:57:20.308 [DEBUG] [Thread-188882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:57:20.308 [DEBUG] [Thread-188882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:57:20.308 [DEBUG] [Thread-188882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:57:20.308 [DEBUG] [Thread-188882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:57:20.308 [DEBUG] [Thread-188882] [transport.py] [_log()] client lang: <none>
2026-02-14T16:57:20.308 [DEBUG] [Thread-188882] [transport.py] [_log()] server lang: <none>
2026-02-14T16:57:20.308 [DEBUG] [Thread-188882] [transport.py] [_log()] kex follows: False
2026-02-14T16:57:20.308 [DEBUG] [Thread-188882] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:57:20.308 [DEBUG] [Thread-188882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:57:20.308 [DEBUG] [Thread-188882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:57:20.308 [DEBUG] [Thread-188882] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:57:20.308 [DEBUG] [Thread-188882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:57:20.308 [DEBUG] [Thread-188882] [transport.py] [_log()] Compression: none
2026-02-14T16:57:20.308 [DEBUG] [Thread-188882] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:57:20.317 [DEBUG] [Thread-188882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:57:20.317 [DEBUG] [Thread-188882] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:57:20.317 [DEBUG] [Thread-188882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:57:20.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:57:20.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:57:20.319 [DEBUG] [Thread-188882] [transport.py] [_log()] userauth is OK
2026-02-14T16:57:20.319 [DEBUG] [Thread-188882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:57:20.320 [DEBUG] [Thread-188882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:57:20.320 [DEBUG] [Thread-188882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:57:20.320 [DEBUG] [Thread-188882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:57:20.345 [INFO] [Thread-188882] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:57:20.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:57:20.933 [DEBUG] [Thread-188882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:57:20.933 [DEBUG] [Thread-188882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:57:20.933 [DEBUG] [Thread-188882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:57:20.974 [DEBUG] [Thread-188882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:57:20.975 [DEBUG] [Thread-188882] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:57:20.981 [DEBUG] [Thread-188882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:57:20.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:57:20.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:57:20.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:57:21.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:57:21.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:57:21.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:57:21.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:57:21.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:57:21.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:57:21.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.623022 -999.00  +16.00  24.47     43   +3.70 1 1 1 1 1   887    0 11.39 -50.60 ----- 21.0 24.5 162.4 37.8 19.9 -27.2 19.4 -26.5 20.8 -25.4 21.6 -27.1
2026-02-14T16:57:21.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:57:21.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:57:21.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.623022
2026-02-14T16:57:21.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:57:21.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:57:21.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:57:21.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:57:21.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:57:21.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:56:39', tmtdew=15.64, humidity=34.91, cloud=0.0, wind=44.74, temperature=17.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:57:09.101', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:57:21.017 [DEBUG] [Thread-188882] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:57:21.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-14T16:57:21.126 [DEBUG] [Thread-188885] [transport.py] [_log()] starting thread (client mode): 0xa2d7a4a0
2026-02-14T16:57:21.127 [DEBUG] [Thread-188885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:57:21.142 [DEBUG] [Thread-188885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:57:21.142 [INFO] [Thread-188885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:57:21.150 [DEBUG] [Thread-188885] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:57:21.151 [DEBUG] [Thread-188885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:57:21.151 [DEBUG] [Thread-188885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:57:21.151 [DEBUG] [Thread-188885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:57:21.151 [DEBUG] [Thread-188885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:57:21.151 [DEBUG] [Thread-188885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:57:21.151 [DEBUG] [Thread-188885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:57:21.151 [DEBUG] [Thread-188885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:57:21.151 [DEBUG] [Thread-188885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:57:21.151 [DEBUG] [Thread-188885] [transport.py] [_log()] client lang: <none>
2026-02-14T16:57:21.151 [DEBUG] [Thread-188885] [transport.py] [_log()] server lang: <none>
2026-02-14T16:57:21.151 [DEBUG] [Thread-188885] [transport.py] [_log()] kex follows: False
2026-02-14T16:57:21.152 [DEBUG] [Thread-188885] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:57:21.152 [DEBUG] [Thread-188885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:57:21.152 [DEBUG] [Thread-188885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:57:21.152 [DEBUG] [Thread-188885] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:57:21.152 [DEBUG] [Thread-188885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:57:21.152 [DEBUG] [Thread-188885] [transport.py] [_log()] Compression: none
2026-02-14T16:57:21.152 [DEBUG] [Thread-188885] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:57:21.207 [DEBUG] [Thread-188885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:57:21.208 [DEBUG] [Thread-188885] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:57:21.209 [DEBUG] [Thread-188885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:57:21.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:57:21.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:57:21.264 [DEBUG] [Thread-188885] [transport.py] [_log()] userauth is OK
2026-02-14T16:57:21.264 [DEBUG] [Thread-188885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:57:21.265 [DEBUG] [Thread-188885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:57:21.265 [DEBUG] [Thread-188885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:57:21.265 [DEBUG] [Thread-188885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:57:21.284 [INFO] [Thread-188885] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:57:21.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-14T16:57:21.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:57:22.102 [DEBUG] [Thread-188885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:57:22.102 [DEBUG] [Thread-188885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:57:22.150 [DEBUG] [Thread-188885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:57:22.150 [DEBUG] [Thread-188885] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:57:22.159 [DEBUG] [Thread-188885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:57:22.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:57:22.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:57:22.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T16:57:22.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:57:22.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:57:22.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:57:22.193 [DEBUG] [Thread-188885] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:57:27.605 [DEBUG] [Thread-188887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:57:32.490 [DEBUG] [Thread-188888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:57:42.657 [DEBUG] [Thread-188889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:57:52.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:57:52.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:57:52.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-14T16:57:54.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 57, 14), 14.4, 38.12, 0.0, 42.94, 16.17, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:57:54.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:57:14
2026-02-14T16:57:55.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:57:55.269 [DEBUG] [Thread-188890] [transport.py] [_log()] starting thread (client mode): 0xa2d7bf40
2026-02-14T16:57:55.269 [DEBUG] [Thread-188890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:57:55.288 [DEBUG] [Thread-188890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:57:55.288 [INFO] [Thread-188890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:57:55.291 [DEBUG] [Thread-188890] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:57:55.292 [DEBUG] [Thread-188890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:57:55.292 [DEBUG] [Thread-188890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:57:55.292 [DEBUG] [Thread-188890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:57:55.292 [DEBUG] [Thread-188890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:57:55.292 [DEBUG] [Thread-188890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:57:55.292 [DEBUG] [Thread-188890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:57:55.292 [DEBUG] [Thread-188890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:57:55.292 [DEBUG] [Thread-188890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:57:55.293 [DEBUG] [Thread-188890] [transport.py] [_log()] client lang: <none>
2026-02-14T16:57:55.293 [DEBUG] [Thread-188890] [transport.py] [_log()] server lang: <none>
2026-02-14T16:57:55.293 [DEBUG] [Thread-188890] [transport.py] [_log()] kex follows: False
2026-02-14T16:57:55.293 [DEBUG] [Thread-188890] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:57:55.293 [DEBUG] [Thread-188890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:57:55.293 [DEBUG] [Thread-188890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:57:55.293 [DEBUG] [Thread-188890] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:57:55.293 [DEBUG] [Thread-188890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:57:55.293 [DEBUG] [Thread-188890] [transport.py] [_log()] Compression: none
2026-02-14T16:57:55.293 [DEBUG] [Thread-188890] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:57:55.312 [DEBUG] [Thread-188890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:57:55.313 [DEBUG] [Thread-188890] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:57:55.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:57:55.314 [DEBUG] [Thread-188890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:57:55.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:57:55.316 [DEBUG] [Thread-188890] [transport.py] [_log()] userauth is OK
2026-02-14T16:57:55.316 [DEBUG] [Thread-188890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:57:55.316 [DEBUG] [Thread-188890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:57:55.316 [DEBUG] [Thread-188890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:57:55.316 [DEBUG] [Thread-188890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:57:55.353 [INFO] [Thread-188890] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:57:55.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:57:55.972 [DEBUG] [Thread-188890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:57:55.972 [DEBUG] [Thread-188890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:57:55.972 [DEBUG] [Thread-188890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:57:56.012 [DEBUG] [Thread-188890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:57:56.012 [DEBUG] [Thread-188890] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:57:56.015 [DEBUG] [Thread-188890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:57:56.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:57:56.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:57:56.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:57:56.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:57:56.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:57:56.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:57:56.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:57:56.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:57:56.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:57:56.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.623370 -999.00  +16.00  30.56     43   +3.60 1 1 2 1 1   887    0 11.28 -47.11 ----- 29.7 30.6 158.4 41.8 19.9 -28.6 19.5 -26.8 20.9 -25.0 21.7 -28.0
2026-02-14T16:57:56.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:57:56.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:57:56.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.623370
2026-02-14T16:57:56.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:57:56.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:57:56.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:57:56.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:57:56.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:57:56.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:57:14', tmtdew=14.4, humidity=38.12, cloud=0.0, wind=42.94, temperature=16.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:57:39.168', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:57:56.043 [DEBUG] [Thread-188890] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:57:56.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-14T16:57:56.139 [DEBUG] [Thread-188893] [transport.py] [_log()] starting thread (client mode): 0xa575b790
2026-02-14T16:57:56.139 [DEBUG] [Thread-188893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:57:56.154 [DEBUG] [Thread-188893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:57:56.154 [INFO] [Thread-188893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:57:56.161 [DEBUG] [Thread-188893] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:57:56.162 [DEBUG] [Thread-188893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:57:56.162 [DEBUG] [Thread-188893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:57:56.162 [DEBUG] [Thread-188893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:57:56.162 [DEBUG] [Thread-188893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:57:56.162 [DEBUG] [Thread-188893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:57:56.162 [DEBUG] [Thread-188893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:57:56.163 [DEBUG] [Thread-188893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:57:56.163 [DEBUG] [Thread-188893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:57:56.163 [DEBUG] [Thread-188893] [transport.py] [_log()] client lang: <none>
2026-02-14T16:57:56.163 [DEBUG] [Thread-188893] [transport.py] [_log()] server lang: <none>
2026-02-14T16:57:56.163 [DEBUG] [Thread-188893] [transport.py] [_log()] kex follows: False
2026-02-14T16:57:56.163 [DEBUG] [Thread-188893] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:57:56.163 [DEBUG] [Thread-188893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:57:56.163 [DEBUG] [Thread-188893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:57:56.164 [DEBUG] [Thread-188893] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:57:56.164 [DEBUG] [Thread-188893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:57:56.164 [DEBUG] [Thread-188893] [transport.py] [_log()] Compression: none
2026-02-14T16:57:56.164 [DEBUG] [Thread-188893] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:57:56.222 [DEBUG] [Thread-188893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:57:56.222 [DEBUG] [Thread-188893] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:57:56.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:57:56.224 [DEBUG] [Thread-188893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:57:56.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:57:56.279 [DEBUG] [Thread-188893] [transport.py] [_log()] userauth is OK
2026-02-14T16:57:56.279 [DEBUG] [Thread-188893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:57:56.279 [DEBUG] [Thread-188893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:57:56.279 [DEBUG] [Thread-188893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:57:56.279 [DEBUG] [Thread-188893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:57:56.298 [INFO] [Thread-188893] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:57:56.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T16:57:56.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:57:57.084 [DEBUG] [Thread-188893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:57:57.085 [DEBUG] [Thread-188893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:57:57.132 [DEBUG] [Thread-188893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:57:57.133 [DEBUG] [Thread-188893] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:57:57.142 [DEBUG] [Thread-188893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:57:57.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:57:57.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-14T16:57:57.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-14T16:57:57.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:57:57.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:57:57.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:57:57.178 [DEBUG] [Thread-188893] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:57:57.688 [DEBUG] [Thread-188895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:57:59.843 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:57:59.844 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:58:12.748 [DEBUG] [Thread-188896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:58:27.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:58:27.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:58:27.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-14T16:58:27.789 [DEBUG] [Thread-188897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:58:29.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 57, 50), 14.59, 37.62, 0.0, 36.88, 16.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:58:29.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:57:50
2026-02-14T16:58:30.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:58:30.365 [DEBUG] [Thread-188898] [transport.py] [_log()] starting thread (client mode): 0xa2d7a860
2026-02-14T16:58:30.365 [DEBUG] [Thread-188898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:58:30.386 [DEBUG] [Thread-188898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:58:30.386 [INFO] [Thread-188898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:58:30.389 [DEBUG] [Thread-188898] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:58:30.389 [DEBUG] [Thread-188898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:58:30.389 [DEBUG] [Thread-188898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:58:30.389 [DEBUG] [Thread-188898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:58:30.389 [DEBUG] [Thread-188898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:58:30.389 [DEBUG] [Thread-188898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:58:30.389 [DEBUG] [Thread-188898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:58:30.389 [DEBUG] [Thread-188898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:58:30.389 [DEBUG] [Thread-188898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:58:30.389 [DEBUG] [Thread-188898] [transport.py] [_log()] client lang: <none>
2026-02-14T16:58:30.389 [DEBUG] [Thread-188898] [transport.py] [_log()] server lang: <none>
2026-02-14T16:58:30.389 [DEBUG] [Thread-188898] [transport.py] [_log()] kex follows: False
2026-02-14T16:58:30.389 [DEBUG] [Thread-188898] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:58:30.389 [DEBUG] [Thread-188898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:58:30.389 [DEBUG] [Thread-188898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:58:30.389 [DEBUG] [Thread-188898] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:58:30.389 [DEBUG] [Thread-188898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:58:30.389 [DEBUG] [Thread-188898] [transport.py] [_log()] Compression: none
2026-02-14T16:58:30.389 [DEBUG] [Thread-188898] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:58:30.397 [DEBUG] [Thread-188898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:58:30.397 [DEBUG] [Thread-188898] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:58:30.398 [DEBUG] [Thread-188898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:58:30.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:58:30.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:58:30.399 [DEBUG] [Thread-188898] [transport.py] [_log()] userauth is OK
2026-02-14T16:58:30.399 [DEBUG] [Thread-188898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:58:30.399 [DEBUG] [Thread-188898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:58:30.399 [DEBUG] [Thread-188898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:58:30.399 [DEBUG] [Thread-188898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:58:30.421 [INFO] [Thread-188898] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:58:30.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:58:31.056 [DEBUG] [Thread-188898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:58:31.056 [DEBUG] [Thread-188898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:58:31.056 [DEBUG] [Thread-188898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:58:31.097 [DEBUG] [Thread-188898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:58:31.098 [DEBUG] [Thread-188898] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:58:31.101 [DEBUG] [Thread-188898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:58:31.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:58:31.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:58:31.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:58:31.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:58:31.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:58:31.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:58:31.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:58:31.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:58:31.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:58:31.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.623717 -999.00  +15.80  29.35     43   +3.50 1 1 1 1 1   887    0 11.18 -46.34 ----- 32.5 29.4 145.2 42.2 19.8 -28.0 19.4 -26.3 20.9 -25.8 21.6 -26.9
2026-02-14T16:58:31.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:58:31.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:58:31.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.623717
2026-02-14T16:58:31.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:58:31.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:58:31.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:58:31.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:58:31.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:58:31.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:57:50', tmtdew=14.59, humidity=37.62, cloud=0.0, wind=36.88, temperature=16.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:58:09.149', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:58:31.130 [DEBUG] [Thread-188898] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:58:31.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-14T16:58:31.226 [DEBUG] [Thread-188901] [transport.py] [_log()] starting thread (client mode): 0xa2db4bb0
2026-02-14T16:58:31.227 [DEBUG] [Thread-188901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:58:31.244 [DEBUG] [Thread-188901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:58:31.244 [INFO] [Thread-188901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:58:31.252 [DEBUG] [Thread-188901] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:58:31.252 [DEBUG] [Thread-188901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:58:31.252 [DEBUG] [Thread-188901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:58:31.252 [DEBUG] [Thread-188901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:58:31.252 [DEBUG] [Thread-188901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:58:31.253 [DEBUG] [Thread-188901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:58:31.253 [DEBUG] [Thread-188901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:58:31.253 [DEBUG] [Thread-188901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:58:31.253 [DEBUG] [Thread-188901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:58:31.253 [DEBUG] [Thread-188901] [transport.py] [_log()] client lang: <none>
2026-02-14T16:58:31.253 [DEBUG] [Thread-188901] [transport.py] [_log()] server lang: <none>
2026-02-14T16:58:31.253 [DEBUG] [Thread-188901] [transport.py] [_log()] kex follows: False
2026-02-14T16:58:31.253 [DEBUG] [Thread-188901] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:58:31.253 [DEBUG] [Thread-188901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:58:31.254 [DEBUG] [Thread-188901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:58:31.254 [DEBUG] [Thread-188901] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:58:31.254 [DEBUG] [Thread-188901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:58:31.254 [DEBUG] [Thread-188901] [transport.py] [_log()] Compression: none
2026-02-14T16:58:31.254 [DEBUG] [Thread-188901] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:58:31.313 [DEBUG] [Thread-188901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:58:31.314 [DEBUG] [Thread-188901] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:58:31.314 [DEBUG] [Thread-188901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:58:31.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:58:31.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:58:31.372 [DEBUG] [Thread-188901] [transport.py] [_log()] userauth is OK
2026-02-14T16:58:31.373 [DEBUG] [Thread-188901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:58:31.373 [DEBUG] [Thread-188901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:58:31.373 [DEBUG] [Thread-188901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:58:31.373 [DEBUG] [Thread-188901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:58:31.392 [INFO] [Thread-188901] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:58:31.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-14T16:58:31.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:58:32.215 [DEBUG] [Thread-188901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:58:32.215 [DEBUG] [Thread-188901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:58:32.263 [DEBUG] [Thread-188901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:58:32.264 [DEBUG] [Thread-188901] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:58:32.273 [DEBUG] [Thread-188901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:58:32.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:58:32.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-14T16:58:32.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-14T16:58:32.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:58:32.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:58:32.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:58:32.309 [DEBUG] [Thread-188901] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:58:32.547 [DEBUG] [Thread-188903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:58:42.826 [DEBUG] [Thread-188904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:58:57.882 [DEBUG] [Thread-188905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:58:59.983 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:58:59.985 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:59:02.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:59:02.332 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:59:02.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-14T16:59:04.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 58, 26), 14.72, 37.36, 0.0, 33.28, 16.5, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:59:04.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:58:26
2026-02-14T16:59:04.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:59:04.768 [DEBUG] [Thread-188906] [transport.py] [_log()] starting thread (client mode): 0xa2deebc0
2026-02-14T16:59:04.768 [DEBUG] [Thread-188906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:59:04.787 [DEBUG] [Thread-188906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:59:04.788 [INFO] [Thread-188906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:59:04.791 [DEBUG] [Thread-188906] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:59:04.791 [DEBUG] [Thread-188906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:59:04.791 [DEBUG] [Thread-188906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:59:04.791 [DEBUG] [Thread-188906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:59:04.791 [DEBUG] [Thread-188906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:59:04.791 [DEBUG] [Thread-188906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:59:04.791 [DEBUG] [Thread-188906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:59:04.791 [DEBUG] [Thread-188906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:59:04.791 [DEBUG] [Thread-188906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:59:04.791 [DEBUG] [Thread-188906] [transport.py] [_log()] client lang: <none>
2026-02-14T16:59:04.791 [DEBUG] [Thread-188906] [transport.py] [_log()] server lang: <none>
2026-02-14T16:59:04.791 [DEBUG] [Thread-188906] [transport.py] [_log()] kex follows: False
2026-02-14T16:59:04.791 [DEBUG] [Thread-188906] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:59:04.791 [DEBUG] [Thread-188906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:59:04.791 [DEBUG] [Thread-188906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:59:04.791 [DEBUG] [Thread-188906] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:59:04.791 [DEBUG] [Thread-188906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:59:04.791 [DEBUG] [Thread-188906] [transport.py] [_log()] Compression: none
2026-02-14T16:59:04.791 [DEBUG] [Thread-188906] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:59:04.810 [DEBUG] [Thread-188906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:59:04.811 [DEBUG] [Thread-188906] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:59:04.811 [DEBUG] [Thread-188906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:59:04.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:59:04.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:59:04.813 [DEBUG] [Thread-188906] [transport.py] [_log()] userauth is OK
2026-02-14T16:59:04.813 [DEBUG] [Thread-188906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:59:04.813 [DEBUG] [Thread-188906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:59:04.814 [DEBUG] [Thread-188906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:59:04.814 [DEBUG] [Thread-188906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:59:04.830 [INFO] [Thread-188906] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:59:04.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:59:05.468 [DEBUG] [Thread-188906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:59:05.468 [DEBUG] [Thread-188906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:59:05.469 [DEBUG] [Thread-188906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:59:05.509 [DEBUG] [Thread-188906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:59:05.509 [DEBUG] [Thread-188906] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:59:05.511 [DEBUG] [Thread-188906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:59:05.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:59:05.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:59:05.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:59:05.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:59:05.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:59:05.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:59:05.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:59:05.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:59:05.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:59:05.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.624064 -999.00  +15.70  28.52     44   +3.60 1 1 1 1 1   887    0 11.30 -47.15 ----- 34.0 28.5 163.8 41.4 19.7 -28.3 19.4 -26.7 20.9 -26.8 21.5 -28.4
2026-02-14T16:59:05.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:59:05.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:59:05.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.624064
2026-02-14T16:59:05.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:59:05.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:59:05.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:59:05.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:59:05.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:59:05.533 [DEBUG] [Thread-188906] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:59:05.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:58:26', tmtdew=14.72, humidity=37.36, cloud=0.0, wind=33.28, temperature=16.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:58:39.130', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:59:05.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-14T16:59:05.626 [DEBUG] [Thread-188909] [transport.py] [_log()] starting thread (client mode): 0xa57b1300
2026-02-14T16:59:05.627 [DEBUG] [Thread-188909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:59:05.640 [DEBUG] [Thread-188909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:59:05.641 [INFO] [Thread-188909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:59:05.648 [DEBUG] [Thread-188909] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:59:05.648 [DEBUG] [Thread-188909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:59:05.649 [DEBUG] [Thread-188909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:59:05.649 [DEBUG] [Thread-188909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:59:05.649 [DEBUG] [Thread-188909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:59:05.649 [DEBUG] [Thread-188909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:59:05.649 [DEBUG] [Thread-188909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:59:05.649 [DEBUG] [Thread-188909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:59:05.650 [DEBUG] [Thread-188909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:59:05.650 [DEBUG] [Thread-188909] [transport.py] [_log()] client lang: <none>
2026-02-14T16:59:05.650 [DEBUG] [Thread-188909] [transport.py] [_log()] server lang: <none>
2026-02-14T16:59:05.650 [DEBUG] [Thread-188909] [transport.py] [_log()] kex follows: False
2026-02-14T16:59:05.650 [DEBUG] [Thread-188909] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:59:05.650 [DEBUG] [Thread-188909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:59:05.650 [DEBUG] [Thread-188909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:59:05.650 [DEBUG] [Thread-188909] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:59:05.650 [DEBUG] [Thread-188909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:59:05.650 [DEBUG] [Thread-188909] [transport.py] [_log()] Compression: none
2026-02-14T16:59:05.650 [DEBUG] [Thread-188909] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:59:05.708 [DEBUG] [Thread-188909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:59:05.708 [DEBUG] [Thread-188909] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:59:05.709 [DEBUG] [Thread-188909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:59:05.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:59:05.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:59:05.767 [DEBUG] [Thread-188909] [transport.py] [_log()] userauth is OK
2026-02-14T16:59:05.767 [DEBUG] [Thread-188909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:59:05.768 [DEBUG] [Thread-188909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:59:05.768 [DEBUG] [Thread-188909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:59:05.768 [DEBUG] [Thread-188909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:59:05.787 [INFO] [Thread-188909] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:59:05.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-14T16:59:05.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:59:06.592 [DEBUG] [Thread-188909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:59:06.593 [DEBUG] [Thread-188909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:59:06.641 [DEBUG] [Thread-188909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:59:06.641 [DEBUG] [Thread-188909] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:59:06.649 [DEBUG] [Thread-188909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:59:06.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:59:06.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T16:59:06.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-14T16:59:06.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:59:06.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:59:06.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:59:06.683 [DEBUG] [Thread-188909] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:59:12.916 [DEBUG] [Thread-188911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:59:27.972 [DEBUG] [Thread-188912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:59:32.579 [DEBUG] [Thread-188913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:59:36.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T16:59:36.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T16:59:36.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-14T16:59:38.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 59, 2), 14.82, 37.12, 0.0, 37.19, 16.58, 0, 0, 0, 2, 0, 0),)
2026-02-14T16:59:38.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:59:02
2026-02-14T16:59:39.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T16:59:39.411 [DEBUG] [Thread-188914] [transport.py] [_log()] starting thread (client mode): 0xa2d21540
2026-02-14T16:59:39.411 [DEBUG] [Thread-188914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:59:39.430 [DEBUG] [Thread-188914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T16:59:39.431 [INFO] [Thread-188914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T16:59:39.434 [DEBUG] [Thread-188914] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:59:39.434 [DEBUG] [Thread-188914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T16:59:39.434 [DEBUG] [Thread-188914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:59:39.434 [DEBUG] [Thread-188914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:59:39.434 [DEBUG] [Thread-188914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:59:39.434 [DEBUG] [Thread-188914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:59:39.434 [DEBUG] [Thread-188914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:59:39.434 [DEBUG] [Thread-188914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:59:39.434 [DEBUG] [Thread-188914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:59:39.434 [DEBUG] [Thread-188914] [transport.py] [_log()] client lang: <none>
2026-02-14T16:59:39.434 [DEBUG] [Thread-188914] [transport.py] [_log()] server lang: <none>
2026-02-14T16:59:39.434 [DEBUG] [Thread-188914] [transport.py] [_log()] kex follows: False
2026-02-14T16:59:39.434 [DEBUG] [Thread-188914] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:59:39.434 [DEBUG] [Thread-188914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:59:39.434 [DEBUG] [Thread-188914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:59:39.434 [DEBUG] [Thread-188914] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:59:39.434 [DEBUG] [Thread-188914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:59:39.434 [DEBUG] [Thread-188914] [transport.py] [_log()] Compression: none
2026-02-14T16:59:39.435 [DEBUG] [Thread-188914] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:59:39.451 [DEBUG] [Thread-188914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:59:39.451 [DEBUG] [Thread-188914] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:59:39.451 [DEBUG] [Thread-188914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T16:59:39.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T16:59:39.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:59:39.452 [DEBUG] [Thread-188914] [transport.py] [_log()] userauth is OK
2026-02-14T16:59:39.452 [DEBUG] [Thread-188914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:59:39.452 [DEBUG] [Thread-188914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:59:39.452 [DEBUG] [Thread-188914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T16:59:39.452 [DEBUG] [Thread-188914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:59:39.470 [INFO] [Thread-188914] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:59:39.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:59:40.047 [DEBUG] [Thread-188914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:59:40.048 [DEBUG] [Thread-188914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:59:40.048 [DEBUG] [Thread-188914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T16:59:40.088 [DEBUG] [Thread-188914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:59:40.089 [DEBUG] [Thread-188914] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:59:40.092 [DEBUG] [Thread-188914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:59:40.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:59:40.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T16:59:40.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T16:59:40.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T16:59:40.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:59:40.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T16:59:40.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:59:40.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:59:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T16:59:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.624411 -999.00  +15.70  28.63     44   +3.70 1 1 1 1 1   887    0 11.23 -50.08 ----- 28.5 28.6 151.0 36.7 19.7 -27.8 19.4 -26.3 20.7 -26.0 21.5 -28.0
2026-02-14T16:59:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T16:59:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T16:59:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.624411
2026-02-14T16:59:40.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T16:59:40.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T16:59:40.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T16:59:40.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T16:59:40.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T16:59:40.120 [DEBUG] [Thread-188914] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:59:40.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:59:02', tmtdew=14.82, humidity=37.12, cloud=0.0, wind=37.19, temperature=16.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:59:09.110', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T16:59:40.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-14T16:59:40.210 [DEBUG] [Thread-188917] [transport.py] [_log()] starting thread (client mode): 0xa2db60e0
2026-02-14T16:59:40.210 [DEBUG] [Thread-188917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T16:59:40.224 [DEBUG] [Thread-188917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T16:59:40.224 [INFO] [Thread-188917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T16:59:40.231 [DEBUG] [Thread-188917] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T16:59:40.231 [DEBUG] [Thread-188917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T16:59:40.232 [DEBUG] [Thread-188917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T16:59:40.232 [DEBUG] [Thread-188917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:59:40.232 [DEBUG] [Thread-188917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T16:59:40.232 [DEBUG] [Thread-188917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:59:40.232 [DEBUG] [Thread-188917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T16:59:40.232 [DEBUG] [Thread-188917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T16:59:40.232 [DEBUG] [Thread-188917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T16:59:40.232 [DEBUG] [Thread-188917] [transport.py] [_log()] client lang: <none>
2026-02-14T16:59:40.232 [DEBUG] [Thread-188917] [transport.py] [_log()] server lang: <none>
2026-02-14T16:59:40.232 [DEBUG] [Thread-188917] [transport.py] [_log()] kex follows: False
2026-02-14T16:59:40.232 [DEBUG] [Thread-188917] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T16:59:40.232 [DEBUG] [Thread-188917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T16:59:40.232 [DEBUG] [Thread-188917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T16:59:40.232 [DEBUG] [Thread-188917] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T16:59:40.232 [DEBUG] [Thread-188917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T16:59:40.232 [DEBUG] [Thread-188917] [transport.py] [_log()] Compression: none
2026-02-14T16:59:40.232 [DEBUG] [Thread-188917] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T16:59:40.289 [DEBUG] [Thread-188917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T16:59:40.290 [DEBUG] [Thread-188917] [transport.py] [_log()] Switch to new keys ...
2026-02-14T16:59:40.290 [DEBUG] [Thread-188917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T16:59:40.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T16:59:40.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T16:59:40.345 [DEBUG] [Thread-188917] [transport.py] [_log()] userauth is OK
2026-02-14T16:59:40.346 [DEBUG] [Thread-188917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T16:59:40.346 [DEBUG] [Thread-188917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T16:59:40.346 [DEBUG] [Thread-188917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T16:59:40.346 [DEBUG] [Thread-188917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T16:59:40.364 [INFO] [Thread-188917] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T16:59:40.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-14T16:59:40.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T16:59:41.147 [DEBUG] [Thread-188917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T16:59:41.147 [DEBUG] [Thread-188917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T16:59:41.195 [DEBUG] [Thread-188917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T16:59:41.195 [DEBUG] [Thread-188917] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T16:59:41.205 [DEBUG] [Thread-188917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T16:59:41.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T16:59:41.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-14T16:59:41.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-14T16:59:41.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T16:59:41.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T16:59:41.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T16:59:41.241 [DEBUG] [Thread-188917] [transport.py] [_log()] EOF in transport thread
2026-02-14T16:59:43.009 [DEBUG] [Thread-188919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T16:59:58.055 [DEBUG] [Thread-188920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:00:00.129 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:00:00.130 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:00:11.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:00:11.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:00:11.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-14T17:00:13.090 [DEBUG] [Thread-188921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:00:13.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 16, 59, 37), 15.56, 35.11, 0.0, 35.78, 17.4, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:00:13.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 16:59:37
2026-02-14T17:00:13.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:00:13.653 [DEBUG] [Thread-188922] [transport.py] [_log()] starting thread (client mode): 0xa2d21480
2026-02-14T17:00:13.653 [DEBUG] [Thread-188922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:00:13.675 [DEBUG] [Thread-188922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:00:13.675 [INFO] [Thread-188922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:00:13.678 [DEBUG] [Thread-188922] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:00:13.678 [DEBUG] [Thread-188922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:00:13.678 [DEBUG] [Thread-188922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:00:13.678 [DEBUG] [Thread-188922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:00:13.678 [DEBUG] [Thread-188922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:00:13.678 [DEBUG] [Thread-188922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:00:13.678 [DEBUG] [Thread-188922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:00:13.678 [DEBUG] [Thread-188922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:00:13.678 [DEBUG] [Thread-188922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:00:13.678 [DEBUG] [Thread-188922] [transport.py] [_log()] client lang: <none>
2026-02-14T17:00:13.678 [DEBUG] [Thread-188922] [transport.py] [_log()] server lang: <none>
2026-02-14T17:00:13.678 [DEBUG] [Thread-188922] [transport.py] [_log()] kex follows: False
2026-02-14T17:00:13.678 [DEBUG] [Thread-188922] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:00:13.678 [DEBUG] [Thread-188922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:00:13.679 [DEBUG] [Thread-188922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:00:13.679 [DEBUG] [Thread-188922] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:00:13.679 [DEBUG] [Thread-188922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:00:13.679 [DEBUG] [Thread-188922] [transport.py] [_log()] Compression: none
2026-02-14T17:00:13.679 [DEBUG] [Thread-188922] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:00:13.696 [DEBUG] [Thread-188922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:00:13.697 [DEBUG] [Thread-188922] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:00:13.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:00:13.698 [DEBUG] [Thread-188922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:00:13.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:00:13.699 [DEBUG] [Thread-188922] [transport.py] [_log()] userauth is OK
2026-02-14T17:00:13.699 [DEBUG] [Thread-188922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:00:13.699 [DEBUG] [Thread-188922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:00:13.699 [DEBUG] [Thread-188922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:00:13.699 [DEBUG] [Thread-188922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:00:13.719 [INFO] [Thread-188922] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:00:13.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:00:14.664 [DEBUG] [Thread-188922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:00:14.664 [DEBUG] [Thread-188922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:00:14.664 [DEBUG] [Thread-188922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:00:14.705 [DEBUG] [Thread-188922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:00:14.706 [DEBUG] [Thread-188922] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:00:14.709 [DEBUG] [Thread-188922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:00:14.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:00:14.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:00:14.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:00:14.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:00:14.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:00:14.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:00:14.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:00:14.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:00:14.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:00:14.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.624759 -999.00  +15.80  30.28     44   +3.70 1 1 2 1 1   887    0 10.90 -51.57 ----- 30.6 30.3 162.1 43.7 19.7 -27.5 19.4 -25.9 20.9 -26.0 21.5 -28.5
2026-02-14T17:00:14.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:00:14.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:00:14.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.624759
2026-02-14T17:00:14.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:00:14.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:00:14.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:00:14.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:00:14.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:00:14.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T16:59:37', tmtdew=15.56, humidity=35.11, cloud=0.0, wind=35.78, temperature=17.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T14:59:39.178', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:00:14.817 [DEBUG] [Thread-188922] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:00:14.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-14T17:00:14.905 [DEBUG] [Thread-188925] [transport.py] [_log()] starting thread (client mode): 0xa57b2380
2026-02-14T17:00:14.905 [DEBUG] [Thread-188925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:00:14.919 [DEBUG] [Thread-188925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:00:14.919 [INFO] [Thread-188925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:00:14.927 [DEBUG] [Thread-188925] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:00:14.927 [DEBUG] [Thread-188925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:00:14.927 [DEBUG] [Thread-188925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:00:14.927 [DEBUG] [Thread-188925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:00:14.927 [DEBUG] [Thread-188925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:00:14.927 [DEBUG] [Thread-188925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:00:14.927 [DEBUG] [Thread-188925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:00:14.927 [DEBUG] [Thread-188925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:00:14.927 [DEBUG] [Thread-188925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:00:14.928 [DEBUG] [Thread-188925] [transport.py] [_log()] client lang: <none>
2026-02-14T17:00:14.928 [DEBUG] [Thread-188925] [transport.py] [_log()] server lang: <none>
2026-02-14T17:00:14.928 [DEBUG] [Thread-188925] [transport.py] [_log()] kex follows: False
2026-02-14T17:00:14.928 [DEBUG] [Thread-188925] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:00:14.928 [DEBUG] [Thread-188925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:00:14.928 [DEBUG] [Thread-188925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:00:14.928 [DEBUG] [Thread-188925] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:00:14.928 [DEBUG] [Thread-188925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:00:14.928 [DEBUG] [Thread-188925] [transport.py] [_log()] Compression: none
2026-02-14T17:00:14.928 [DEBUG] [Thread-188925] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:00:14.988 [DEBUG] [Thread-188925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:00:14.989 [DEBUG] [Thread-188925] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:00:14.989 [DEBUG] [Thread-188925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:00:14.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:00:14.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:00:15.044 [DEBUG] [Thread-188925] [transport.py] [_log()] userauth is OK
2026-02-14T17:00:15.044 [DEBUG] [Thread-188925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:00:15.045 [DEBUG] [Thread-188925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:00:15.045 [DEBUG] [Thread-188925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:00:15.045 [DEBUG] [Thread-188925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:00:15.064 [INFO] [Thread-188925] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:00:15.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-14T17:00:15.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:00:15.869 [DEBUG] [Thread-188925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:00:15.869 [DEBUG] [Thread-188925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:00:15.917 [DEBUG] [Thread-188925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:00:15.918 [DEBUG] [Thread-188925] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:00:15.926 [DEBUG] [Thread-188925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:00:15.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:00:15.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-14T17:00:15.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-14T17:00:15.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:00:15.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:00:15.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:00:15.966 [DEBUG] [Thread-188925] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:00:28.125 [DEBUG] [Thread-188927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:00:32.614 [DEBUG] [Thread-188928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:00:43.178 [DEBUG] [Thread-188929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:00:45.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:00:45.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:00:45.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-14T17:00:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 0, 14), 14.7, 37.41, 0.0, 28.53, 16.63, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:00:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:00:14
2026-02-14T17:00:48.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:00:48.393 [DEBUG] [Thread-188930] [transport.py] [_log()] starting thread (client mode): 0xa2d782e0
2026-02-14T17:00:48.393 [DEBUG] [Thread-188930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:00:48.417 [DEBUG] [Thread-188930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:00:48.417 [INFO] [Thread-188930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:00:48.420 [DEBUG] [Thread-188930] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:00:48.420 [DEBUG] [Thread-188930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:00:48.421 [DEBUG] [Thread-188930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:00:48.421 [DEBUG] [Thread-188930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:00:48.421 [DEBUG] [Thread-188930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:00:48.421 [DEBUG] [Thread-188930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:00:48.421 [DEBUG] [Thread-188930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:00:48.421 [DEBUG] [Thread-188930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:00:48.421 [DEBUG] [Thread-188930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:00:48.421 [DEBUG] [Thread-188930] [transport.py] [_log()] client lang: <none>
2026-02-14T17:00:48.421 [DEBUG] [Thread-188930] [transport.py] [_log()] server lang: <none>
2026-02-14T17:00:48.421 [DEBUG] [Thread-188930] [transport.py] [_log()] kex follows: False
2026-02-14T17:00:48.421 [DEBUG] [Thread-188930] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:00:48.421 [DEBUG] [Thread-188930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:00:48.421 [DEBUG] [Thread-188930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:00:48.421 [DEBUG] [Thread-188930] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:00:48.421 [DEBUG] [Thread-188930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:00:48.421 [DEBUG] [Thread-188930] [transport.py] [_log()] Compression: none
2026-02-14T17:00:48.421 [DEBUG] [Thread-188930] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:00:48.439 [DEBUG] [Thread-188930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:00:48.439 [DEBUG] [Thread-188930] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:00:48.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:00:48.441 [DEBUG] [Thread-188930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:00:48.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:00:48.443 [DEBUG] [Thread-188930] [transport.py] [_log()] userauth is OK
2026-02-14T17:00:48.443 [DEBUG] [Thread-188930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:00:48.443 [DEBUG] [Thread-188930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:00:48.443 [DEBUG] [Thread-188930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:00:48.443 [DEBUG] [Thread-188930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:00:48.468 [INFO] [Thread-188930] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:00:48.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:00:49.096 [DEBUG] [Thread-188930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:00:49.096 [DEBUG] [Thread-188930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:00:49.097 [DEBUG] [Thread-188930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:00:49.137 [DEBUG] [Thread-188930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:00:49.138 [DEBUG] [Thread-188930] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:00:49.141 [DEBUG] [Thread-188930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:00:49.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:00:49.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:00:49.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:00:49.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:00:49.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:00:49.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:00:49.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:00:49.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:00:49.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:00:49.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.625105 -999.00  +16.00  22.87     44   +3.80 1 1 1 1 1   887    0 11.06 -54.47 ----- 42.3 22.9 171.2 33.8 19.8 -26.8 19.4 -25.6 20.8 -25.4 21.5 -27.5
2026-02-14T17:00:49.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:00:49.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:00:49.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.625105
2026-02-14T17:00:49.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:00:49.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:00:49.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:00:49.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:00:49.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:00:49.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:00:14', tmtdew=14.7, humidity=37.41, cloud=0.0, wind=28.53, temperature=16.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:00:09.072', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:00:49.169 [DEBUG] [Thread-188930] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:00:49.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-14T17:00:49.263 [DEBUG] [Thread-188933] [transport.py] [_log()] starting thread (client mode): 0xa81d65f0
2026-02-14T17:00:49.263 [DEBUG] [Thread-188933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:00:49.282 [DEBUG] [Thread-188933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:00:49.282 [INFO] [Thread-188933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:00:49.290 [DEBUG] [Thread-188933] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:00:49.290 [DEBUG] [Thread-188933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:00:49.290 [DEBUG] [Thread-188933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:00:49.290 [DEBUG] [Thread-188933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:00:49.291 [DEBUG] [Thread-188933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:00:49.291 [DEBUG] [Thread-188933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:00:49.291 [DEBUG] [Thread-188933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:00:49.291 [DEBUG] [Thread-188933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:00:49.291 [DEBUG] [Thread-188933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:00:49.291 [DEBUG] [Thread-188933] [transport.py] [_log()] client lang: <none>
2026-02-14T17:00:49.291 [DEBUG] [Thread-188933] [transport.py] [_log()] server lang: <none>
2026-02-14T17:00:49.291 [DEBUG] [Thread-188933] [transport.py] [_log()] kex follows: False
2026-02-14T17:00:49.291 [DEBUG] [Thread-188933] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:00:49.291 [DEBUG] [Thread-188933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:00:49.291 [DEBUG] [Thread-188933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:00:49.291 [DEBUG] [Thread-188933] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:00:49.291 [DEBUG] [Thread-188933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:00:49.291 [DEBUG] [Thread-188933] [transport.py] [_log()] Compression: none
2026-02-14T17:00:49.291 [DEBUG] [Thread-188933] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:00:49.350 [DEBUG] [Thread-188933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:00:49.351 [DEBUG] [Thread-188933] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:00:49.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:00:49.352 [DEBUG] [Thread-188933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:00:49.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:00:49.406 [DEBUG] [Thread-188933] [transport.py] [_log()] userauth is OK
2026-02-14T17:00:49.407 [DEBUG] [Thread-188933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:00:49.407 [DEBUG] [Thread-188933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:00:49.407 [DEBUG] [Thread-188933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:00:49.407 [DEBUG] [Thread-188933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:00:49.425 [INFO] [Thread-188933] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:00:49.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-14T17:00:49.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:00:50.252 [DEBUG] [Thread-188933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:00:50.252 [DEBUG] [Thread-188933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:00:50.300 [DEBUG] [Thread-188933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:00:50.300 [DEBUG] [Thread-188933] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:00:50.310 [DEBUG] [Thread-188933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:00:50.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:00:50.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:00: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') -> 00000000
2026-02-14T17:00:50.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:00:50.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:00:50.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:00:50.344 [DEBUG] [Thread-188933] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:00:58.219 [DEBUG] [Thread-188935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:01:00.271 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:01:00.272 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:01:13.277 [DEBUG] [Thread-188936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:01:20.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:01:20.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:01:20.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-14T17:01:22.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 0, 50), 15.09, 36.46, 0.0, 36.5, 17.07, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:01:22.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:00:50
2026-02-14T17:01:22.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:01:22.833 [DEBUG] [Thread-188937] [transport.py] [_log()] starting thread (client mode): 0xa5758fa0
2026-02-14T17:01:22.833 [DEBUG] [Thread-188937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:01:22.852 [DEBUG] [Thread-188937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:01:22.852 [INFO] [Thread-188937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:01:22.855 [DEBUG] [Thread-188937] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:01:22.855 [DEBUG] [Thread-188937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:01:22.855 [DEBUG] [Thread-188937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:01:22.855 [DEBUG] [Thread-188937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:01:22.855 [DEBUG] [Thread-188937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:01:22.855 [DEBUG] [Thread-188937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:01:22.855 [DEBUG] [Thread-188937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:01:22.855 [DEBUG] [Thread-188937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:01:22.855 [DEBUG] [Thread-188937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:01:22.855 [DEBUG] [Thread-188937] [transport.py] [_log()] client lang: <none>
2026-02-14T17:01:22.855 [DEBUG] [Thread-188937] [transport.py] [_log()] server lang: <none>
2026-02-14T17:01:22.856 [DEBUG] [Thread-188937] [transport.py] [_log()] kex follows: False
2026-02-14T17:01:22.856 [DEBUG] [Thread-188937] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:01:22.856 [DEBUG] [Thread-188937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:01:22.856 [DEBUG] [Thread-188937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:01:22.856 [DEBUG] [Thread-188937] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:01:22.856 [DEBUG] [Thread-188937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:01:22.856 [DEBUG] [Thread-188937] [transport.py] [_log()] Compression: none
2026-02-14T17:01:22.856 [DEBUG] [Thread-188937] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:01:22.870 [DEBUG] [Thread-188937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:01:22.871 [DEBUG] [Thread-188937] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:01:22.871 [DEBUG] [Thread-188937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:01:22.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:01:22.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:01:22.872 [DEBUG] [Thread-188937] [transport.py] [_log()] userauth is OK
2026-02-14T17:01:22.872 [DEBUG] [Thread-188937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:01:22.872 [DEBUG] [Thread-188937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:01:22.872 [DEBUG] [Thread-188937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:01:22.872 [DEBUG] [Thread-188937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:01:22.892 [INFO] [Thread-188937] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:01:22.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:01:23.515 [DEBUG] [Thread-188937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:01:23.516 [DEBUG] [Thread-188937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:01:23.516 [DEBUG] [Thread-188937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:01:23.556 [DEBUG] [Thread-188937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:01:23.556 [DEBUG] [Thread-188937] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:01:23.559 [DEBUG] [Thread-188937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:01:23.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:01:23.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:01:23.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:01:23.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:01:23.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:01:23.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:01:23.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:01:23.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:01:23.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:01:23.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.625453 -999.00  +16.10  22.68     44   +3.80 1 1 1 1 1   887    0 11.08 -52.14 ----- 27.5 22.7 165.0 42.2 19.8 -27.2 19.4 -26.2 20.9 -24.9 21.6 -27.7
2026-02-14T17:01:23.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:01:23.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:01:23.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.625453
2026-02-14T17:01:23.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:01:23.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:01:23.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:01:23.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:01:23.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:01:23.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:00:50', tmtdew=15.09, humidity=36.46, cloud=0.0, wind=36.5, temperature=17.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:00:39.139', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:01:23.583 [DEBUG] [Thread-188937] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:01:23.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-14T17:01:23.677 [DEBUG] [Thread-188940] [transport.py] [_log()] starting thread (client mode): 0xa575acb0
2026-02-14T17:01:23.677 [DEBUG] [Thread-188940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:01:23.692 [DEBUG] [Thread-188940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:01:23.692 [INFO] [Thread-188940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:01:23.700 [DEBUG] [Thread-188940] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:01:23.700 [DEBUG] [Thread-188940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:01:23.700 [DEBUG] [Thread-188940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:01:23.700 [DEBUG] [Thread-188940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:01:23.701 [DEBUG] [Thread-188940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:01:23.701 [DEBUG] [Thread-188940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:01:23.701 [DEBUG] [Thread-188940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:01:23.701 [DEBUG] [Thread-188940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:01:23.701 [DEBUG] [Thread-188940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:01:23.701 [DEBUG] [Thread-188940] [transport.py] [_log()] client lang: <none>
2026-02-14T17:01:23.701 [DEBUG] [Thread-188940] [transport.py] [_log()] server lang: <none>
2026-02-14T17:01:23.702 [DEBUG] [Thread-188940] [transport.py] [_log()] kex follows: False
2026-02-14T17:01:23.702 [DEBUG] [Thread-188940] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:01:23.702 [DEBUG] [Thread-188940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:01:23.702 [DEBUG] [Thread-188940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:01:23.702 [DEBUG] [Thread-188940] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:01:23.703 [DEBUG] [Thread-188940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:01:23.704 [DEBUG] [Thread-188940] [transport.py] [_log()] Compression: none
2026-02-14T17:01:23.704 [DEBUG] [Thread-188940] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:01:23.756 [DEBUG] [Thread-188940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:01:23.756 [DEBUG] [Thread-188940] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:01:23.756 [DEBUG] [Thread-188940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:01:23.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:01:23.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:01:23.813 [DEBUG] [Thread-188940] [transport.py] [_log()] userauth is OK
2026-02-14T17:01:23.813 [DEBUG] [Thread-188940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:01:23.814 [DEBUG] [Thread-188940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:01:23.814 [DEBUG] [Thread-188940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:01:23.814 [DEBUG] [Thread-188940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:01:23.836 [INFO] [Thread-188940] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:01:23.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-14T17:01:23.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:01:24.691 [DEBUG] [Thread-188940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:01:24.691 [DEBUG] [Thread-188940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:01:24.739 [DEBUG] [Thread-188940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:01:24.739 [DEBUG] [Thread-188940] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:01:24.748 [DEBUG] [Thread-188940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:01:24.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:01: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')
2026-02-14T17:01:24.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-14T17:01:24.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:01:24.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:01:24.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:01:24.785 [DEBUG] [Thread-188940] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:01:28.317 [DEBUG] [Thread-188942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:01:32.659 [DEBUG] [Thread-188943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:01:43.369 [DEBUG] [Thread-188944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:01:54.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:01:54.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:01:54.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-14T17:01:56.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 1, 25), 15.15, 36.31, 0.0, 37.74, 17.05, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:01:56.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:01:25
2026-02-14T17:01:57.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:01:57.472 [DEBUG] [Thread-188945] [transport.py] [_log()] starting thread (client mode): 0xa81d7370
2026-02-14T17:01:57.472 [DEBUG] [Thread-188945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:01:57.493 [DEBUG] [Thread-188945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:01:57.493 [INFO] [Thread-188945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:01:57.496 [DEBUG] [Thread-188945] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:01:57.496 [DEBUG] [Thread-188945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:01:57.496 [DEBUG] [Thread-188945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:01:57.496 [DEBUG] [Thread-188945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:01:57.497 [DEBUG] [Thread-188945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:01:57.497 [DEBUG] [Thread-188945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:01:57.497 [DEBUG] [Thread-188945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:01:57.497 [DEBUG] [Thread-188945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:01:57.497 [DEBUG] [Thread-188945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:01:57.497 [DEBUG] [Thread-188945] [transport.py] [_log()] client lang: <none>
2026-02-14T17:01:57.497 [DEBUG] [Thread-188945] [transport.py] [_log()] server lang: <none>
2026-02-14T17:01:57.497 [DEBUG] [Thread-188945] [transport.py] [_log()] kex follows: False
2026-02-14T17:01:57.497 [DEBUG] [Thread-188945] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:01:57.497 [DEBUG] [Thread-188945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:01:57.497 [DEBUG] [Thread-188945] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:01:57.497 [DEBUG] [Thread-188945] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:01:57.497 [DEBUG] [Thread-188945] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:01:57.497 [DEBUG] [Thread-188945] [transport.py] [_log()] Compression: none
2026-02-14T17:01:57.497 [DEBUG] [Thread-188945] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:01:57.514 [DEBUG] [Thread-188945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:01:57.515 [DEBUG] [Thread-188945] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:01:57.515 [DEBUG] [Thread-188945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:01:57.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:01:57.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:01:57.518 [DEBUG] [Thread-188945] [transport.py] [_log()] userauth is OK
2026-02-14T17:01:57.518 [DEBUG] [Thread-188945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:01:57.518 [DEBUG] [Thread-188945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:01:57.518 [DEBUG] [Thread-188945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:01:57.518 [DEBUG] [Thread-188945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:01:57.537 [INFO] [Thread-188945] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:01:57.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:01:58.155 [DEBUG] [Thread-188945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:01:58.155 [DEBUG] [Thread-188945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:01:58.156 [DEBUG] [Thread-188945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:01:58.196 [DEBUG] [Thread-188945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:01:58.197 [DEBUG] [Thread-188945] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:01:58.200 [DEBUG] [Thread-188945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:01:58.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:01:58.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:01:58.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:01:58.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:01:58.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:01:58.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:01:58.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:01:58.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:01:58.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:01:58.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.626147 -999.00  +16.20  27.66     43   +3.90 1 1 1 1 1   887    0 11.22 -51.50 ----- 23.9 27.7 150.8 34.3 19.9 -27.4 19.5 -26.2 20.9 -26.1 21.7 -26.8
2026-02-14T17:01:58.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:01:58.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:01:58.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.626147
2026-02-14T17:01:58.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:01:58.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:01:58.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:01:58.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:01:58.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:01:58.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:01:25', tmtdew=15.15, humidity=36.31, cloud=0.0, wind=37.74, temperature=17.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:01:39.101', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:01:58.226 [DEBUG] [Thread-188945] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:01:58.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-14T17:01:58.322 [DEBUG] [Thread-188948] [transport.py] [_log()] starting thread (client mode): 0xa2dc2c50
2026-02-14T17:01:58.322 [DEBUG] [Thread-188948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:01:58.337 [DEBUG] [Thread-188948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:01:58.337 [INFO] [Thread-188948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:01:58.345 [DEBUG] [Thread-188948] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:01:58.345 [DEBUG] [Thread-188948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:01:58.345 [DEBUG] [Thread-188948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:01:58.345 [DEBUG] [Thread-188948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:01:58.345 [DEBUG] [Thread-188948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:01:58.345 [DEBUG] [Thread-188948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:01:58.345 [DEBUG] [Thread-188948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:01:58.345 [DEBUG] [Thread-188948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:01:58.345 [DEBUG] [Thread-188948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:01:58.345 [DEBUG] [Thread-188948] [transport.py] [_log()] client lang: <none>
2026-02-14T17:01:58.345 [DEBUG] [Thread-188948] [transport.py] [_log()] server lang: <none>
2026-02-14T17:01:58.345 [DEBUG] [Thread-188948] [transport.py] [_log()] kex follows: False
2026-02-14T17:01:58.345 [DEBUG] [Thread-188948] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:01:58.345 [DEBUG] [Thread-188948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:01:58.345 [DEBUG] [Thread-188948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:01:58.346 [DEBUG] [Thread-188948] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:01:58.346 [DEBUG] [Thread-188948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:01:58.346 [DEBUG] [Thread-188948] [transport.py] [_log()] Compression: none
2026-02-14T17:01:58.346 [DEBUG] [Thread-188948] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:01:58.404 [DEBUG] [Thread-188950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:01:58.405 [DEBUG] [Thread-188948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:01:58.406 [DEBUG] [Thread-188948] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:01:58.407 [DEBUG] [Thread-188948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:01:58.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:01:58.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:01:58.472 [DEBUG] [Thread-188948] [transport.py] [_log()] userauth is OK
2026-02-14T17:01:58.472 [DEBUG] [Thread-188948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:01:58.472 [DEBUG] [Thread-188948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:01:58.472 [DEBUG] [Thread-188948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:01:58.472 [DEBUG] [Thread-188948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:01:58.494 [INFO] [Thread-188948] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:01:58.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-14T17:01:58.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:01:59.302 [DEBUG] [Thread-188948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:01:59.303 [DEBUG] [Thread-188948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:01:59.350 [DEBUG] [Thread-188948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:01:59.350 [DEBUG] [Thread-188948] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:01:59.359 [DEBUG] [Thread-188948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:01:59.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:01:59.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:01:59.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:01:59.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:01:59.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:01:59.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:01:59.396 [DEBUG] [Thread-188948] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:02:00.412 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:02:00.413 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:02:13.452 [DEBUG] [Thread-188951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:02:28.490 [DEBUG] [Thread-188952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:02:29.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:02:29.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:02:29.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-14T17:02:31.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 1, 25), 15.1, 36.31, 0.0, 34.14, 17.05, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:02:31.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:01:25
2026-02-14T17:02:31.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:02:32.028 [DEBUG] [Thread-188953] [transport.py] [_log()] starting thread (client mode): 0xa2d23d30
2026-02-14T17:02:32.028 [DEBUG] [Thread-188953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:02:32.050 [DEBUG] [Thread-188953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:02:32.050 [INFO] [Thread-188953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:02:32.054 [DEBUG] [Thread-188953] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:02:32.054 [DEBUG] [Thread-188953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:02:32.054 [DEBUG] [Thread-188953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:02:32.054 [DEBUG] [Thread-188953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:02:32.054 [DEBUG] [Thread-188953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:02:32.054 [DEBUG] [Thread-188953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:02:32.054 [DEBUG] [Thread-188953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:02:32.054 [DEBUG] [Thread-188953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:02:32.054 [DEBUG] [Thread-188953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:02:32.054 [DEBUG] [Thread-188953] [transport.py] [_log()] client lang: <none>
2026-02-14T17:02:32.054 [DEBUG] [Thread-188953] [transport.py] [_log()] server lang: <none>
2026-02-14T17:02:32.054 [DEBUG] [Thread-188953] [transport.py] [_log()] kex follows: False
2026-02-14T17:02:32.054 [DEBUG] [Thread-188953] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:02:32.054 [DEBUG] [Thread-188953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:02:32.055 [DEBUG] [Thread-188953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:02:32.055 [DEBUG] [Thread-188953] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:02:32.055 [DEBUG] [Thread-188953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:02:32.055 [DEBUG] [Thread-188953] [transport.py] [_log()] Compression: none
2026-02-14T17:02:32.055 [DEBUG] [Thread-188953] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:02:32.071 [DEBUG] [Thread-188953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:02:32.072 [DEBUG] [Thread-188953] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:02:32.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:02:32.073 [DEBUG] [Thread-188953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:02:32.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:02:32.075 [DEBUG] [Thread-188953] [transport.py] [_log()] userauth is OK
2026-02-14T17:02:32.075 [DEBUG] [Thread-188953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:02:32.075 [DEBUG] [Thread-188953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:02:32.075 [DEBUG] [Thread-188953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:02:32.075 [DEBUG] [Thread-188953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:02:32.101 [INFO] [Thread-188953] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:02:32.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:02:32.719 [DEBUG] [Thread-188955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:02:32.740 [DEBUG] [Thread-188953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:02:32.740 [DEBUG] [Thread-188953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:02:32.740 [DEBUG] [Thread-188953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:02:32.781 [DEBUG] [Thread-188953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:02:32.782 [DEBUG] [Thread-188953] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:02:32.785 [DEBUG] [Thread-188953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:02:32.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:02:32.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:02:32.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:02:32.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:02:32.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:02:32.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:02:32.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:02:32.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:02:32.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:02:32.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.626495 -999.00  +16.60  22.63     43   +4.00 1 1 1 1 1   887    0 11.14 -52.09 ----- 21.2 22.6 160.6 33.5 20.0 -26.9 19.6 -26.1 21.1 -24.0 21.8 -26.6
2026-02-14T17:02:32.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:02:32.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:02:32.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.626495
2026-02-14T17:02:32.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:02:32.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:02:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:02:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:02:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:02:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:01:25', tmtdew=15.1, humidity=36.31, cloud=0.0, wind=34.14, temperature=17.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:02:09.168', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:02:32.811 [DEBUG] [Thread-188953] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:02:32.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-14T17:02:43.527 [DEBUG] [Thread-188957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:02:58.576 [DEBUG] [Thread-188958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:03:00.553 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:03:00.554 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:03:13.615 [DEBUG] [Thread-188959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:03:28.654 [DEBUG] [Thread-188960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:03:32.769 [DEBUG] [Thread-188961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:03:43.695 [DEBUG] [Thread-188962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:03:58.736 [DEBUG] [Thread-188963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:04:00.711 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:04:00.712 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:04:13.772 [DEBUG] [Thread-188964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:04:28.810 [DEBUG] [Thread-188965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:04:32.801 [DEBUG] [Thread-188966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:04:43.848 [DEBUG] [Thread-188967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:04:44.343 [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-14T17:04:58.885 [DEBUG] [Thread-188968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:05:00.855 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:05:00.856 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:05:13.921 [DEBUG] [Thread-188969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:05:14.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:05:14.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:05:14.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-14T17:05:16.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 4, 56), 14.52, 37.47, 0.0, 40.41, 16.55, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:05:16.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:04:56
2026-02-14T17:05:17.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:05:17.260 [DEBUG] [Thread-188970] [transport.py] [_log()] starting thread (client mode): 0xa575b040
2026-02-14T17:05:17.260 [DEBUG] [Thread-188970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:05:17.280 [DEBUG] [Thread-188970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:05:17.281 [INFO] [Thread-188970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:05:17.284 [DEBUG] [Thread-188970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:05:17.284 [DEBUG] [Thread-188970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:05:17.284 [DEBUG] [Thread-188970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:05:17.284 [DEBUG] [Thread-188970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:05:17.284 [DEBUG] [Thread-188970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:05:17.284 [DEBUG] [Thread-188970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:05:17.284 [DEBUG] [Thread-188970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:05:17.285 [DEBUG] [Thread-188970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:05:17.285 [DEBUG] [Thread-188970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:05:17.285 [DEBUG] [Thread-188970] [transport.py] [_log()] client lang: <none>
2026-02-14T17:05:17.285 [DEBUG] [Thread-188970] [transport.py] [_log()] server lang: <none>
2026-02-14T17:05:17.285 [DEBUG] [Thread-188970] [transport.py] [_log()] kex follows: False
2026-02-14T17:05:17.285 [DEBUG] [Thread-188970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:05:17.285 [DEBUG] [Thread-188970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:05:17.285 [DEBUG] [Thread-188970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:05:17.285 [DEBUG] [Thread-188970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:05:17.285 [DEBUG] [Thread-188970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:05:17.285 [DEBUG] [Thread-188970] [transport.py] [_log()] Compression: none
2026-02-14T17:05:17.285 [DEBUG] [Thread-188970] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:05:17.302 [DEBUG] [Thread-188970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:05:17.303 [DEBUG] [Thread-188970] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:05:17.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:05:17.304 [DEBUG] [Thread-188970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:05:17.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:05:17.306 [DEBUG] [Thread-188970] [transport.py] [_log()] userauth is OK
2026-02-14T17:05:17.306 [DEBUG] [Thread-188970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:05:17.306 [DEBUG] [Thread-188970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:05:17.306 [DEBUG] [Thread-188970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:05:17.307 [DEBUG] [Thread-188970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:05:17.328 [INFO] [Thread-188970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:05:17.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:05:18.244 [DEBUG] [Thread-188970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:05:18.244 [DEBUG] [Thread-188970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:05:18.244 [DEBUG] [Thread-188970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:05:18.285 [DEBUG] [Thread-188970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:05:18.286 [DEBUG] [Thread-188970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:05:18.289 [DEBUG] [Thread-188970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:05:18.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:05:18.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:05:18.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:05:18.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:05:18.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:05:18.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:05:18.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:05:18.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:05:18.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:05:18.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.628231 -999.00  +16.40  22.59     43   +3.90 1 1 1 1 1   887    0 11.59 -35.07 ----- 25.4 22.6 166.8 37.6 20.0 -27.2 19.6 -25.7 21.1 -26.3 21.8 -26.8
2026-02-14T17:05:18.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:05:18.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:05:18.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.628231
2026-02-14T17:05:18.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:05:18.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:05:18.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:05:18.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:05:18.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:05:18.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:04:56', tmtdew=14.52, humidity=37.47, cloud=0.0, wind=40.41, temperature=16.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:04:39.158', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:05:18.315 [DEBUG] [Thread-188970] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:05:18.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T17:05:18.411 [DEBUG] [Thread-188973] [transport.py] [_log()] starting thread (client mode): 0xa2d21fc0
2026-02-14T17:05:18.411 [DEBUG] [Thread-188973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:05:18.427 [DEBUG] [Thread-188973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:05:18.427 [INFO] [Thread-188973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:05:18.434 [DEBUG] [Thread-188973] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:05:18.434 [DEBUG] [Thread-188973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:05:18.434 [DEBUG] [Thread-188973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:05:18.435 [DEBUG] [Thread-188973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:05:18.435 [DEBUG] [Thread-188973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:05:18.435 [DEBUG] [Thread-188973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:05:18.435 [DEBUG] [Thread-188973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:05:18.435 [DEBUG] [Thread-188973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:05:18.435 [DEBUG] [Thread-188973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:05:18.435 [DEBUG] [Thread-188973] [transport.py] [_log()] client lang: <none>
2026-02-14T17:05:18.435 [DEBUG] [Thread-188973] [transport.py] [_log()] server lang: <none>
2026-02-14T17:05:18.435 [DEBUG] [Thread-188973] [transport.py] [_log()] kex follows: False
2026-02-14T17:05:18.435 [DEBUG] [Thread-188973] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:05:18.435 [DEBUG] [Thread-188973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:05:18.435 [DEBUG] [Thread-188973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:05:18.435 [DEBUG] [Thread-188973] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:05:18.435 [DEBUG] [Thread-188973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:05:18.435 [DEBUG] [Thread-188973] [transport.py] [_log()] Compression: none
2026-02-14T17:05:18.435 [DEBUG] [Thread-188973] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:05:18.495 [DEBUG] [Thread-188973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:05:18.496 [DEBUG] [Thread-188973] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:05:18.496 [DEBUG] [Thread-188973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:05:18.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:05:18.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:05:18.551 [DEBUG] [Thread-188973] [transport.py] [_log()] userauth is OK
2026-02-14T17:05:18.551 [DEBUG] [Thread-188973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:05:18.551 [DEBUG] [Thread-188973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:05:18.551 [DEBUG] [Thread-188973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:05:18.552 [DEBUG] [Thread-188973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:05:18.570 [INFO] [Thread-188973] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:05:18.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-14T17:05:18.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:05:19.383 [DEBUG] [Thread-188973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:05:19.384 [DEBUG] [Thread-188973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:05:19.431 [DEBUG] [Thread-188973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:05:19.432 [DEBUG] [Thread-188973] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:05:19.441 [DEBUG] [Thread-188973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:05:19.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:05:19.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:05:19.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:05:19.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:05:19.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:05:19.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:05:19.477 [DEBUG] [Thread-188973] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:05:28.957 [DEBUG] [Thread-188975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:05:32.860 [DEBUG] [Thread-188976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:05:44.014 [DEBUG] [Thread-188977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:05:49.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:05:49.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:05:49.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-14T17:05:51.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 5, 31), 14.67, 37.12, 0.0, 44.18, 16.62, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:05:51.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:05:31
2026-02-14T17:05:51.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:05:51.846 [DEBUG] [Thread-188978] [transport.py] [_log()] starting thread (client mode): 0xa2d22a10
2026-02-14T17:05:51.846 [DEBUG] [Thread-188978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:05:51.866 [DEBUG] [Thread-188978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:05:51.866 [INFO] [Thread-188978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:05:51.869 [DEBUG] [Thread-188978] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:05:51.870 [DEBUG] [Thread-188978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:05:51.870 [DEBUG] [Thread-188978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:05:51.870 [DEBUG] [Thread-188978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:05:51.870 [DEBUG] [Thread-188978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:05:51.870 [DEBUG] [Thread-188978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:05:51.870 [DEBUG] [Thread-188978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:05:51.870 [DEBUG] [Thread-188978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:05:51.870 [DEBUG] [Thread-188978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:05:51.870 [DEBUG] [Thread-188978] [transport.py] [_log()] client lang: <none>
2026-02-14T17:05:51.870 [DEBUG] [Thread-188978] [transport.py] [_log()] server lang: <none>
2026-02-14T17:05:51.870 [DEBUG] [Thread-188978] [transport.py] [_log()] kex follows: False
2026-02-14T17:05:51.870 [DEBUG] [Thread-188978] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:05:51.870 [DEBUG] [Thread-188978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:05:51.871 [DEBUG] [Thread-188978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:05:51.871 [DEBUG] [Thread-188978] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:05:51.871 [DEBUG] [Thread-188978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:05:51.871 [DEBUG] [Thread-188978] [transport.py] [_log()] Compression: none
2026-02-14T17:05:51.871 [DEBUG] [Thread-188978] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:05:51.891 [DEBUG] [Thread-188978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:05:51.892 [DEBUG] [Thread-188978] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:05:51.893 [DEBUG] [Thread-188978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:05:51.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:05:51.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:05:51.895 [DEBUG] [Thread-188978] [transport.py] [_log()] userauth is OK
2026-02-14T17:05:51.895 [DEBUG] [Thread-188978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:05:51.895 [DEBUG] [Thread-188978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:05:51.895 [DEBUG] [Thread-188978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:05:51.895 [DEBUG] [Thread-188978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:05:51.920 [INFO] [Thread-188978] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:05:51.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:05:52.552 [DEBUG] [Thread-188978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:05:52.552 [DEBUG] [Thread-188978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:05:52.553 [DEBUG] [Thread-188978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:05:52.593 [DEBUG] [Thread-188978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:05:52.593 [DEBUG] [Thread-188978] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:05:52.595 [DEBUG] [Thread-188978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:05:52.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:05:52.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:05:52.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:05:52.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:05:52.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:05:52.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:05:52.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:05:52.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:05:52.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:05:52.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.628577 -999.00  +16.40  33.47     43   +3.90 1 1 2 1 1   887    0 11.17 -35.03 ----- 25.4 33.5 167.4 41.6 20.1 -28.4 19.6 -27.4 21.2 -25.9 21.9 -27.1
2026-02-14T17:05:52.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:05:52.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:05:52.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.628577
2026-02-14T17:05:52.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:05:52.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:05:52.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:05:52.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:05:52.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:05:52.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:05:31', tmtdew=14.67, humidity=37.12, cloud=0.0, wind=44.18, temperature=16.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:05:09.053', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:05:52.616 [DEBUG] [Thread-188978] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:05:52.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-14T17:05:52.702 [DEBUG] [Thread-188981] [transport.py] [_log()] starting thread (client mode): 0xa2dc3520
2026-02-14T17:05:52.702 [DEBUG] [Thread-188981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:05:52.717 [DEBUG] [Thread-188981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:05:52.718 [INFO] [Thread-188981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:05:52.725 [DEBUG] [Thread-188981] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:05:52.726 [DEBUG] [Thread-188981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:05:52.726 [DEBUG] [Thread-188981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:05:52.726 [DEBUG] [Thread-188981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:05:52.726 [DEBUG] [Thread-188981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:05:52.726 [DEBUG] [Thread-188981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:05:52.726 [DEBUG] [Thread-188981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:05:52.727 [DEBUG] [Thread-188981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:05:52.727 [DEBUG] [Thread-188981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:05:52.727 [DEBUG] [Thread-188981] [transport.py] [_log()] client lang: <none>
2026-02-14T17:05:52.727 [DEBUG] [Thread-188981] [transport.py] [_log()] server lang: <none>
2026-02-14T17:05:52.727 [DEBUG] [Thread-188981] [transport.py] [_log()] kex follows: False
2026-02-14T17:05:52.727 [DEBUG] [Thread-188981] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:05:52.727 [DEBUG] [Thread-188981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:05:52.727 [DEBUG] [Thread-188981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:05:52.728 [DEBUG] [Thread-188981] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:05:52.728 [DEBUG] [Thread-188981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:05:52.728 [DEBUG] [Thread-188981] [transport.py] [_log()] Compression: none
2026-02-14T17:05:52.728 [DEBUG] [Thread-188981] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:05:52.791 [DEBUG] [Thread-188981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:05:52.791 [DEBUG] [Thread-188981] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:05:52.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:05:52.793 [DEBUG] [Thread-188981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:05:52.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:05:52.849 [DEBUG] [Thread-188981] [transport.py] [_log()] userauth is OK
2026-02-14T17:05:52.850 [DEBUG] [Thread-188981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:05:52.850 [DEBUG] [Thread-188981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:05:52.850 [DEBUG] [Thread-188981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:05:52.850 [DEBUG] [Thread-188981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:05:52.870 [INFO] [Thread-188981] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:05: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-14T17:05:52.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:05:53.660 [DEBUG] [Thread-188981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:05:53.660 [DEBUG] [Thread-188981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:05:53.708 [DEBUG] [Thread-188981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:05:53.708 [DEBUG] [Thread-188981] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:05:53.718 [DEBUG] [Thread-188981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:05:53.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:05:53.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:05:53.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-14T17:05:53.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:05:53.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:05:53.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:05:53.754 [DEBUG] [Thread-188981] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:05:59.052 [DEBUG] [Thread-188983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:06:00.994 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:06:00.995 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:06:14.103 [DEBUG] [Thread-188984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:06:23.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:06:23.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:06:23.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-14T17:06:25.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 6, 6), 14.52, 37.44, 0.0, 39.24, 16.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:06:25.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:06:06
2026-02-14T17:06:26.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:06:26.499 [DEBUG] [Thread-188985] [transport.py] [_log()] starting thread (client mode): 0xa57b1480
2026-02-14T17:06:26.499 [DEBUG] [Thread-188985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:06:26.519 [DEBUG] [Thread-188985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:06:26.519 [INFO] [Thread-188985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:06:26.522 [DEBUG] [Thread-188985] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:06:26.523 [DEBUG] [Thread-188985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:06:26.523 [DEBUG] [Thread-188985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:06:26.523 [DEBUG] [Thread-188985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:06:26.523 [DEBUG] [Thread-188985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:06:26.523 [DEBUG] [Thread-188985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:06:26.523 [DEBUG] [Thread-188985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:06:26.523 [DEBUG] [Thread-188985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:06:26.523 [DEBUG] [Thread-188985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:06:26.523 [DEBUG] [Thread-188985] [transport.py] [_log()] client lang: <none>
2026-02-14T17:06:26.523 [DEBUG] [Thread-188985] [transport.py] [_log()] server lang: <none>
2026-02-14T17:06:26.523 [DEBUG] [Thread-188985] [transport.py] [_log()] kex follows: False
2026-02-14T17:06:26.523 [DEBUG] [Thread-188985] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:06:26.523 [DEBUG] [Thread-188985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:06:26.523 [DEBUG] [Thread-188985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:06:26.523 [DEBUG] [Thread-188985] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:06:26.523 [DEBUG] [Thread-188985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:06:26.523 [DEBUG] [Thread-188985] [transport.py] [_log()] Compression: none
2026-02-14T17:06:26.523 [DEBUG] [Thread-188985] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:06:26.540 [DEBUG] [Thread-188985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:06:26.541 [DEBUG] [Thread-188985] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:06:26.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:06:26.542 [DEBUG] [Thread-188985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:06:26.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:06:26.543 [DEBUG] [Thread-188985] [transport.py] [_log()] userauth is OK
2026-02-14T17:06:26.543 [DEBUG] [Thread-188985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:06:26.543 [DEBUG] [Thread-188985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:06:26.543 [DEBUG] [Thread-188985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:06:26.543 [DEBUG] [Thread-188985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:06:26.558 [INFO] [Thread-188985] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:06:26.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:06:27.353 [DEBUG] [Thread-188985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:06:27.354 [DEBUG] [Thread-188985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:06:27.354 [DEBUG] [Thread-188985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:06:27.394 [DEBUG] [Thread-188985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:06:27.395 [DEBUG] [Thread-188985] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:06:27.397 [DEBUG] [Thread-188985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:06:27.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:06:27.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:06:27.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:06:27.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:06:27.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:06:27.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:06:27.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:06:27.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:06:27.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:06:27.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.628925 -999.00  +16.30  28.27     43   +3.90 1 1 1 1 1   887    0 11.63 -31.10 ----- 27.4 28.3 168.6 36.2 20.1 -28.6 19.7 -26.8 21.2 -25.4 21.9 -28.0
2026-02-14T17:06:27.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:06:27.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:06:27.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.628925
2026-02-14T17:06:27.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:06:27.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:06:27.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:06:27.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:06:27.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:06:27.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:06:06', tmtdew=14.52, humidity=37.44, cloud=0.0, wind=39.24, temperature=16.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:05:39.120', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:06:27.421 [DEBUG] [Thread-188985] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:06:27.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-14T17:06:27.514 [DEBUG] [Thread-188988] [transport.py] [_log()] starting thread (client mode): 0xa57c3910
2026-02-14T17:06:27.515 [DEBUG] [Thread-188988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:06:27.529 [DEBUG] [Thread-188988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:06:27.529 [INFO] [Thread-188988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:06:27.536 [DEBUG] [Thread-188988] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:06:27.537 [DEBUG] [Thread-188988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:06:27.537 [DEBUG] [Thread-188988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:06:27.537 [DEBUG] [Thread-188988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:06:27.537 [DEBUG] [Thread-188988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:06:27.537 [DEBUG] [Thread-188988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:06:27.538 [DEBUG] [Thread-188988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:06:27.538 [DEBUG] [Thread-188988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:06:27.538 [DEBUG] [Thread-188988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:06:27.538 [DEBUG] [Thread-188988] [transport.py] [_log()] client lang: <none>
2026-02-14T17:06:27.538 [DEBUG] [Thread-188988] [transport.py] [_log()] server lang: <none>
2026-02-14T17:06:27.538 [DEBUG] [Thread-188988] [transport.py] [_log()] kex follows: False
2026-02-14T17:06:27.538 [DEBUG] [Thread-188988] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:06:27.538 [DEBUG] [Thread-188988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:06:27.538 [DEBUG] [Thread-188988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:06:27.539 [DEBUG] [Thread-188988] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:06:27.539 [DEBUG] [Thread-188988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:06:27.539 [DEBUG] [Thread-188988] [transport.py] [_log()] Compression: none
2026-02-14T17:06:27.539 [DEBUG] [Thread-188988] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:06:27.597 [DEBUG] [Thread-188988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:06:27.598 [DEBUG] [Thread-188988] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:06:27.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:06:27.599 [DEBUG] [Thread-188988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:06:27.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:06:27.658 [DEBUG] [Thread-188988] [transport.py] [_log()] userauth is OK
2026-02-14T17:06:27.659 [DEBUG] [Thread-188988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:06:27.659 [DEBUG] [Thread-188988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:06:27.659 [DEBUG] [Thread-188988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:06:27.659 [DEBUG] [Thread-188988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:06:27.681 [INFO] [Thread-188988] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:06:27.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-14T17:06:27.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:06:28.474 [DEBUG] [Thread-188988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:06:28.474 [DEBUG] [Thread-188988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:06:28.522 [DEBUG] [Thread-188988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:06:28.522 [DEBUG] [Thread-188988] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:06:28.532 [DEBUG] [Thread-188988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:06:28.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:06:28.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:06:28.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:06:28.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:06:28.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:06:28.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:06:28.568 [DEBUG] [Thread-188988] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:06:29.138 [DEBUG] [Thread-188990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:06:32.914 [DEBUG] [Thread-188991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:06:44.188 [DEBUG] [Thread-188992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:06:58.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:06:58.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:06:58.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-14T17:06:59.224 [DEBUG] [Thread-188993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:07:00.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 6, 41), 15.27, 35.84, 0.0, 35.14, 17.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:07:00.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:06:41
2026-02-14T17:07:00.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:07:01.051 [DEBUG] [Thread-188994] [transport.py] [_log()] starting thread (client mode): 0xa57b0340
2026-02-14T17:07:01.051 [DEBUG] [Thread-188994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:07:01.072 [DEBUG] [Thread-188994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:07:01.072 [INFO] [Thread-188994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:07:01.075 [DEBUG] [Thread-188994] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:07:01.076 [DEBUG] [Thread-188994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:07:01.076 [DEBUG] [Thread-188994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:07:01.076 [DEBUG] [Thread-188994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:07:01.076 [DEBUG] [Thread-188994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:07:01.076 [DEBUG] [Thread-188994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:07:01.076 [DEBUG] [Thread-188994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:07:01.076 [DEBUG] [Thread-188994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:07:01.076 [DEBUG] [Thread-188994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:07:01.076 [DEBUG] [Thread-188994] [transport.py] [_log()] client lang: <none>
2026-02-14T17:07:01.076 [DEBUG] [Thread-188994] [transport.py] [_log()] server lang: <none>
2026-02-14T17:07:01.076 [DEBUG] [Thread-188994] [transport.py] [_log()] kex follows: False
2026-02-14T17:07:01.076 [DEBUG] [Thread-188994] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:07:01.077 [DEBUG] [Thread-188994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:07:01.077 [DEBUG] [Thread-188994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:07:01.077 [DEBUG] [Thread-188994] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:07:01.077 [DEBUG] [Thread-188994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:07:01.077 [DEBUG] [Thread-188994] [transport.py] [_log()] Compression: none
2026-02-14T17:07:01.077 [DEBUG] [Thread-188994] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:07:01.096 [DEBUG] [Thread-188994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:07:01.096 [DEBUG] [Thread-188994] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:07:01.097 [DEBUG] [Thread-188994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:07:01.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:07:01.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:07:01.100 [DEBUG] [Thread-188994] [transport.py] [_log()] userauth is OK
2026-02-14T17:07:01.100 [DEBUG] [Thread-188994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:07:01.100 [DEBUG] [Thread-188994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:07:01.101 [DEBUG] [Thread-188994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:07:01.101 [DEBUG] [Thread-188994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:07:01.142 [INFO] [Thread-188994] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:07:01.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:07:01.150 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:07:01.151 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:07:01.796 [DEBUG] [Thread-188994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:07:01.797 [DEBUG] [Thread-188994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:07:01.797 [DEBUG] [Thread-188994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:07:01.837 [DEBUG] [Thread-188994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:07:01.838 [DEBUG] [Thread-188994] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:07:01.841 [DEBUG] [Thread-188994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:07:01.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:07:01.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:07:01.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:07:01.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:07:01.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:07:01.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:07:01.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:07:01.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:07:01.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:07:01.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.629272 -999.00  +16.00  25.45     44   +3.80 1 1 1 1 1   887    0 11.44 -30.55 ----- 29.8 25.4 161.0 38.2 20.0 -29.0 19.6 -26.9 21.2 -26.2 21.9 -28.9
2026-02-14T17:07:01.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:07:01.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:07:01.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.629272
2026-02-14T17:07:01.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:07:01.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:07:01.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:07:01.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:07:01.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:07:01.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:06:41', tmtdew=15.27, humidity=35.84, cloud=0.0, wind=35.14, temperature=17.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:06:09.101', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:07:01.868 [DEBUG] [Thread-188994] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:07: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-14T17:07:01.963 [DEBUG] [Thread-188997] [transport.py] [_log()] starting thread (client mode): 0xa575b040
2026-02-14T17:07:01.963 [DEBUG] [Thread-188997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:07:01.977 [DEBUG] [Thread-188997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:07:01.977 [INFO] [Thread-188997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:07:01.985 [DEBUG] [Thread-188997] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:07:01.985 [DEBUG] [Thread-188997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:07:01.985 [DEBUG] [Thread-188997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:07:01.985 [DEBUG] [Thread-188997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:07:01.985 [DEBUG] [Thread-188997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:07:01.985 [DEBUG] [Thread-188997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:07:01.985 [DEBUG] [Thread-188997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:07:01.985 [DEBUG] [Thread-188997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:07:01.985 [DEBUG] [Thread-188997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:07:01.985 [DEBUG] [Thread-188997] [transport.py] [_log()] client lang: <none>
2026-02-14T17:07:01.985 [DEBUG] [Thread-188997] [transport.py] [_log()] server lang: <none>
2026-02-14T17:07:01.985 [DEBUG] [Thread-188997] [transport.py] [_log()] kex follows: False
2026-02-14T17:07:01.985 [DEBUG] [Thread-188997] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:07:01.985 [DEBUG] [Thread-188997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:07:01.985 [DEBUG] [Thread-188997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:07:01.985 [DEBUG] [Thread-188997] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:07:01.985 [DEBUG] [Thread-188997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:07:01.985 [DEBUG] [Thread-188997] [transport.py] [_log()] Compression: none
2026-02-14T17:07:01.985 [DEBUG] [Thread-188997] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:07:02.043 [DEBUG] [Thread-188997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:07:02.043 [DEBUG] [Thread-188997] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:07:02.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:07:02.044 [DEBUG] [Thread-188997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:07:02.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:07:02.100 [DEBUG] [Thread-188997] [transport.py] [_log()] userauth is OK
2026-02-14T17:07:02.101 [DEBUG] [Thread-188997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:07:02.101 [DEBUG] [Thread-188997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:07:02.101 [DEBUG] [Thread-188997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:07:02.101 [DEBUG] [Thread-188997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:07:02.120 [INFO] [Thread-188997] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:07:02.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-14T17:07:02.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:07:02.938 [DEBUG] [Thread-188997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:07:02.939 [DEBUG] [Thread-188997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:07:02.986 [DEBUG] [Thread-188997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:07:02.986 [DEBUG] [Thread-188997] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:07:02.995 [DEBUG] [Thread-188997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:07:03.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:07:03.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-14T17:07:03.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-14T17:07:03.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:07:03.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:07:03.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:07:03.036 [DEBUG] [Thread-188997] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:07:14.264 [DEBUG] [Thread-188999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:07:29.317 [DEBUG] [Thread-189000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:07:32.960 [DEBUG] [Thread-189001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:07:33.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:07:33.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:07:33.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-14T17:07:34.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 7, 17), 14.01, 38.72, 0.0, 32.27, 16.12, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:07:34.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:07:17
2026-02-14T17:07:35.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:07:35.516 [DEBUG] [Thread-189002] [transport.py] [_log()] starting thread (client mode): 0xa5771b70
2026-02-14T17:07:35.516 [DEBUG] [Thread-189002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:07:35.536 [DEBUG] [Thread-189002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:07:35.536 [INFO] [Thread-189002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:07:35.540 [DEBUG] [Thread-189002] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:07:35.540 [DEBUG] [Thread-189002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:07:35.540 [DEBUG] [Thread-189002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:07:35.541 [DEBUG] [Thread-189002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:07:35.541 [DEBUG] [Thread-189002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:07:35.541 [DEBUG] [Thread-189002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:07:35.541 [DEBUG] [Thread-189002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:07:35.541 [DEBUG] [Thread-189002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:07:35.541 [DEBUG] [Thread-189002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:07:35.541 [DEBUG] [Thread-189002] [transport.py] [_log()] client lang: <none>
2026-02-14T17:07:35.541 [DEBUG] [Thread-189002] [transport.py] [_log()] server lang: <none>
2026-02-14T17:07:35.541 [DEBUG] [Thread-189002] [transport.py] [_log()] kex follows: False
2026-02-14T17:07:35.541 [DEBUG] [Thread-189002] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:07:35.541 [DEBUG] [Thread-189002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:07:35.541 [DEBUG] [Thread-189002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:07:35.541 [DEBUG] [Thread-189002] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:07:35.541 [DEBUG] [Thread-189002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:07:35.541 [DEBUG] [Thread-189002] [transport.py] [_log()] Compression: none
2026-02-14T17:07:35.541 [DEBUG] [Thread-189002] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:07:35.559 [DEBUG] [Thread-189002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:07:35.560 [DEBUG] [Thread-189002] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:07:35.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:07:35.561 [DEBUG] [Thread-189002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:07:35.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:07:35.563 [DEBUG] [Thread-189002] [transport.py] [_log()] userauth is OK
2026-02-14T17:07:35.564 [DEBUG] [Thread-189002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:07:35.564 [DEBUG] [Thread-189002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:07:35.564 [DEBUG] [Thread-189002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:07:35.564 [DEBUG] [Thread-189002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:07:35.584 [INFO] [Thread-189002] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:07:35.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:07:36.216 [DEBUG] [Thread-189002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:07:36.216 [DEBUG] [Thread-189002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:07:36.217 [DEBUG] [Thread-189002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:07:36.257 [DEBUG] [Thread-189002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:07:36.258 [DEBUG] [Thread-189002] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:07:36.261 [DEBUG] [Thread-189002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:07:36.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:07:36.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:07:36.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:07:36.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:07:36.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:07:36.284 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:07:36.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:07:36.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:07:36.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:07:36.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.629967 -999.00  +16.00  27.35     44   +3.90 1 1 1 1 1   887    0 11.64 -34.17 ----- 37.4 27.4 165.1 37.6 19.9 -27.6 19.6 -28.2 21.0 -26.1 21.8 -28.6
2026-02-14T17:07:36.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:07:36.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:07:36.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.629967
2026-02-14T17:07:36.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:07:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:07:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:07:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:07:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:07:36.287 [DEBUG] [Thread-189002] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:07:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:07:17', tmtdew=14.01, humidity=38.72, cloud=0.0, wind=32.27, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:07:09.149', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:07:36.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T17:07:36.386 [DEBUG] [Thread-189005] [transport.py] [_log()] starting thread (client mode): 0xa2d225c0
2026-02-14T17:07:36.386 [DEBUG] [Thread-189005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:07:36.401 [DEBUG] [Thread-189005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:07:36.401 [INFO] [Thread-189005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:07:36.408 [DEBUG] [Thread-189005] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:07:36.408 [DEBUG] [Thread-189005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:07:36.409 [DEBUG] [Thread-189005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:07:36.409 [DEBUG] [Thread-189005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:07:36.409 [DEBUG] [Thread-189005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:07:36.409 [DEBUG] [Thread-189005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:07:36.409 [DEBUG] [Thread-189005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:07:36.409 [DEBUG] [Thread-189005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:07:36.409 [DEBUG] [Thread-189005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:07:36.409 [DEBUG] [Thread-189005] [transport.py] [_log()] client lang: <none>
2026-02-14T17:07:36.409 [DEBUG] [Thread-189005] [transport.py] [_log()] server lang: <none>
2026-02-14T17:07:36.410 [DEBUG] [Thread-189005] [transport.py] [_log()] kex follows: False
2026-02-14T17:07:36.410 [DEBUG] [Thread-189005] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:07:36.410 [DEBUG] [Thread-189005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:07:36.410 [DEBUG] [Thread-189005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:07:36.410 [DEBUG] [Thread-189005] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:07:36.410 [DEBUG] [Thread-189005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:07:36.410 [DEBUG] [Thread-189005] [transport.py] [_log()] Compression: none
2026-02-14T17:07:36.411 [DEBUG] [Thread-189005] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:07:36.469 [DEBUG] [Thread-189005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:07:36.469 [DEBUG] [Thread-189005] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:07:36.470 [DEBUG] [Thread-189005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:07:36.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:07:36.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:07:36.528 [DEBUG] [Thread-189005] [transport.py] [_log()] userauth is OK
2026-02-14T17:07:36.528 [DEBUG] [Thread-189005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:07:36.529 [DEBUG] [Thread-189005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:07:36.529 [DEBUG] [Thread-189005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:07:36.529 [DEBUG] [Thread-189005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:07:36.547 [INFO] [Thread-189005] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:07:36.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T17:07:36.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:07:37.329 [DEBUG] [Thread-189005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:07:37.329 [DEBUG] [Thread-189005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:07:37.378 [DEBUG] [Thread-189005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:07:37.378 [DEBUG] [Thread-189005] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:07:37.388 [DEBUG] [Thread-189005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:07:37.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:07:37.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:07:37.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:07:37.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:07:37.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:07:37.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:07:37.424 [DEBUG] [Thread-189005] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:07:44.353 [DEBUG] [Thread-189007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:07:59.406 [DEBUG] [Thread-189008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:08:01.293 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:08:01.294 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:08:07.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:08:07.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:08:07.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T17:08:09.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 7, 52), 14.37, 37.85, 0.0, 43.51, 16.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:08:09.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:07:52
2026-02-14T17:08:09.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:08:09.791 [DEBUG] [Thread-189009] [transport.py] [_log()] starting thread (client mode): 0xa2d21ff0
2026-02-14T17:08:09.792 [DEBUG] [Thread-189009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:08:09.811 [DEBUG] [Thread-189009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:08:09.812 [INFO] [Thread-189009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:08:09.814 [DEBUG] [Thread-189009] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:08:09.815 [DEBUG] [Thread-189009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:08:09.815 [DEBUG] [Thread-189009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:08:09.815 [DEBUG] [Thread-189009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:08:09.815 [DEBUG] [Thread-189009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:08:09.815 [DEBUG] [Thread-189009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:08:09.815 [DEBUG] [Thread-189009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:08:09.815 [DEBUG] [Thread-189009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:08:09.815 [DEBUG] [Thread-189009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:08:09.815 [DEBUG] [Thread-189009] [transport.py] [_log()] client lang: <none>
2026-02-14T17:08:09.815 [DEBUG] [Thread-189009] [transport.py] [_log()] server lang: <none>
2026-02-14T17:08:09.815 [DEBUG] [Thread-189009] [transport.py] [_log()] kex follows: False
2026-02-14T17:08:09.815 [DEBUG] [Thread-189009] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:08:09.815 [DEBUG] [Thread-189009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:08:09.815 [DEBUG] [Thread-189009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:08:09.815 [DEBUG] [Thread-189009] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:08:09.815 [DEBUG] [Thread-189009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:08:09.815 [DEBUG] [Thread-189009] [transport.py] [_log()] Compression: none
2026-02-14T17:08:09.815 [DEBUG] [Thread-189009] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:08:09.833 [DEBUG] [Thread-189009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:08:09.833 [DEBUG] [Thread-189009] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:08:09.834 [DEBUG] [Thread-189009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:08:09.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:08:09.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:08:09.836 [DEBUG] [Thread-189009] [transport.py] [_log()] userauth is OK
2026-02-14T17:08:09.836 [DEBUG] [Thread-189009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:08:09.836 [DEBUG] [Thread-189009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:08:09.836 [DEBUG] [Thread-189009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:08:09.836 [DEBUG] [Thread-189009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:08:09.861 [INFO] [Thread-189009] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:08:09.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:08:10.456 [DEBUG] [Thread-189009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:08:10.457 [DEBUG] [Thread-189009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:08:10.457 [DEBUG] [Thread-189009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:08:10.498 [DEBUG] [Thread-189009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:08:10.498 [DEBUG] [Thread-189009] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:08:10.500 [DEBUG] [Thread-189009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:08:10.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:08:10.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:08:10.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:08:10.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:08:10.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:08:10.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:08:10.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:08:10.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:08:10.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:08:10.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.630314 -999.00  +16.00  30.36     44   +3.80 1 1 2 1 1   887    0 11.50 -36.38 ----- 25.8 30.4 165.6 47.3 19.8 -28.2 19.3 -28.3 21.0 -25.9 21.6 -31.6
2026-02-14T17:08:10.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:08:10.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:08:10.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.630314
2026-02-14T17:08:10.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:08:10.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:08:10.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:08:10.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:08:10.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:08:10.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:07:52', tmtdew=14.37, humidity=37.85, cloud=0.0, wind=43.51, temperature=16.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:07:39.130', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:08:10.526 [DEBUG] [Thread-189009] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:08:10.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-14T17:08:10.622 [DEBUG] [Thread-189012] [transport.py] [_log()] starting thread (client mode): 0xa5758f40
2026-02-14T17:08:10.622 [DEBUG] [Thread-189012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:08:10.636 [DEBUG] [Thread-189012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:08:10.636 [INFO] [Thread-189012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:08:10.644 [DEBUG] [Thread-189012] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:08:10.644 [DEBUG] [Thread-189012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:08:10.644 [DEBUG] [Thread-189012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:08:10.645 [DEBUG] [Thread-189012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:08:10.645 [DEBUG] [Thread-189012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:08:10.645 [DEBUG] [Thread-189012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:08:10.645 [DEBUG] [Thread-189012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:08:10.645 [DEBUG] [Thread-189012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:08:10.645 [DEBUG] [Thread-189012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:08:10.645 [DEBUG] [Thread-189012] [transport.py] [_log()] client lang: <none>
2026-02-14T17:08:10.645 [DEBUG] [Thread-189012] [transport.py] [_log()] server lang: <none>
2026-02-14T17:08:10.645 [DEBUG] [Thread-189012] [transport.py] [_log()] kex follows: False
2026-02-14T17:08:10.646 [DEBUG] [Thread-189012] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:08:10.646 [DEBUG] [Thread-189012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:08:10.646 [DEBUG] [Thread-189012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:08:10.646 [DEBUG] [Thread-189012] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:08:10.646 [DEBUG] [Thread-189012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:08:10.646 [DEBUG] [Thread-189012] [transport.py] [_log()] Compression: none
2026-02-14T17:08:10.646 [DEBUG] [Thread-189012] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:08:10.704 [DEBUG] [Thread-189012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:08:10.704 [DEBUG] [Thread-189012] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:08:10.705 [DEBUG] [Thread-189012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:08:10.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:08:10.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:08:10.759 [DEBUG] [Thread-189012] [transport.py] [_log()] userauth is OK
2026-02-14T17:08:10.759 [DEBUG] [Thread-189012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:08:10.760 [DEBUG] [Thread-189012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:08:10.760 [DEBUG] [Thread-189012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:08:10.760 [DEBUG] [Thread-189012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:08:10.778 [INFO] [Thread-189012] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:08:10.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-14T17:08:10.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:08:11.569 [DEBUG] [Thread-189012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:08:11.569 [DEBUG] [Thread-189012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:08:11.617 [DEBUG] [Thread-189012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:08:11.617 [DEBUG] [Thread-189012] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:08:11.627 [DEBUG] [Thread-189012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:08:11.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:08:11.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:08: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') -> 00000000
2026-02-14T17:08:11.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:08:11.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:08:11.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:08:11.663 [DEBUG] [Thread-189012] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:08:14.446 [DEBUG] [Thread-189014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:08:29.497 [DEBUG] [Thread-189015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:08:32.996 [DEBUG] [Thread-189016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:08:41.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:08:41.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:08:41.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T17:08:43.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 8, 27), 14.55, 37.42, 0.0, 45.12, 16.42, 0, 0, 0, 2, 1, 0),)
2026-02-14T17:08:43.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:08:27
2026-02-14T17:08:43.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:08:43.950 [DEBUG] [Thread-189017] [transport.py] [_log()] starting thread (client mode): 0xa575bd00
2026-02-14T17:08:43.950 [DEBUG] [Thread-189017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:08:43.970 [DEBUG] [Thread-189017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:08:43.970 [INFO] [Thread-189017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:08:43.973 [DEBUG] [Thread-189017] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:08:43.973 [DEBUG] [Thread-189017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:08:43.974 [DEBUG] [Thread-189017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:08:43.974 [DEBUG] [Thread-189017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:08:43.974 [DEBUG] [Thread-189017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:08:43.974 [DEBUG] [Thread-189017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:08:43.974 [DEBUG] [Thread-189017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:08:43.974 [DEBUG] [Thread-189017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:08:43.974 [DEBUG] [Thread-189017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:08:43.974 [DEBUG] [Thread-189017] [transport.py] [_log()] client lang: <none>
2026-02-14T17:08:43.974 [DEBUG] [Thread-189017] [transport.py] [_log()] server lang: <none>
2026-02-14T17:08:43.974 [DEBUG] [Thread-189017] [transport.py] [_log()] kex follows: False
2026-02-14T17:08:43.974 [DEBUG] [Thread-189017] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:08:43.974 [DEBUG] [Thread-189017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:08:43.974 [DEBUG] [Thread-189017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:08:43.974 [DEBUG] [Thread-189017] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:08:43.974 [DEBUG] [Thread-189017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:08:43.974 [DEBUG] [Thread-189017] [transport.py] [_log()] Compression: none
2026-02-14T17:08:43.974 [DEBUG] [Thread-189017] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:08:43.992 [DEBUG] [Thread-189017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:08:43.992 [DEBUG] [Thread-189017] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:08:43.993 [DEBUG] [Thread-189017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:08:43.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:08:43.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:08:43.994 [DEBUG] [Thread-189017] [transport.py] [_log()] userauth is OK
2026-02-14T17:08:43.995 [DEBUG] [Thread-189017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:08:43.995 [DEBUG] [Thread-189017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:08:43.995 [DEBUG] [Thread-189017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:08:43.995 [DEBUG] [Thread-189017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:08:44.015 [INFO] [Thread-189017] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:08:44.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:08:44.534 [DEBUG] [Thread-189019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:08:44.646 [DEBUG] [Thread-189017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:08:44.647 [DEBUG] [Thread-189017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:08:44.647 [DEBUG] [Thread-189017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:08:44.688 [DEBUG] [Thread-189017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:08:44.688 [DEBUG] [Thread-189017] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:08:44.691 [DEBUG] [Thread-189017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:08:44.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:08:44.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:08:44.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:08:44.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:08:44.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:08:44.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:08:44.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:08:44.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:08:44.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:08:44.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.630661 -999.00  +15.80  33.30     44   +3.80 1 1 2 1 1   887    0 11.35 -36.63 ----- 31.9 33.3 160.4 48.9 19.7 -28.9 19.4 -27.1 20.9 -27.4 21.6 -28.8
2026-02-14T17:08:44.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:08:44.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:08:44.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.630661
2026-02-14T17:08:44.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:08:44.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:08:44.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:08:44.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:08:44.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:08:44.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:08:27', tmtdew=14.55, humidity=37.42, cloud=0.0, wind=45.12, temperature=16.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:08:09.110', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:08:44.721 [DEBUG] [Thread-189017] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:08:44.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-14T17:08:44.817 [DEBUG] [Thread-189021] [transport.py] [_log()] starting thread (client mode): 0xa2d7b8b0
2026-02-14T17:08:44.817 [DEBUG] [Thread-189021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:08:44.832 [DEBUG] [Thread-189021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:08:44.832 [INFO] [Thread-189021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:08:44.839 [DEBUG] [Thread-189021] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:08:44.840 [DEBUG] [Thread-189021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:08:44.840 [DEBUG] [Thread-189021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:08:44.840 [DEBUG] [Thread-189021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:08:44.840 [DEBUG] [Thread-189021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:08:44.840 [DEBUG] [Thread-189021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:08:44.840 [DEBUG] [Thread-189021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:08:44.841 [DEBUG] [Thread-189021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:08:44.841 [DEBUG] [Thread-189021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:08:44.841 [DEBUG] [Thread-189021] [transport.py] [_log()] client lang: <none>
2026-02-14T17:08:44.841 [DEBUG] [Thread-189021] [transport.py] [_log()] server lang: <none>
2026-02-14T17:08:44.841 [DEBUG] [Thread-189021] [transport.py] [_log()] kex follows: False
2026-02-14T17:08:44.841 [DEBUG] [Thread-189021] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:08:44.841 [DEBUG] [Thread-189021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:08:44.841 [DEBUG] [Thread-189021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:08:44.842 [DEBUG] [Thread-189021] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:08:44.842 [DEBUG] [Thread-189021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:08:44.842 [DEBUG] [Thread-189021] [transport.py] [_log()] Compression: none
2026-02-14T17:08:44.842 [DEBUG] [Thread-189021] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:08:44.899 [DEBUG] [Thread-189021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:08:44.899 [DEBUG] [Thread-189021] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:08:44.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:08:44.901 [DEBUG] [Thread-189021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:08:44.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:08:44.956 [DEBUG] [Thread-189021] [transport.py] [_log()] userauth is OK
2026-02-14T17:08:44.956 [DEBUG] [Thread-189021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:08:44.956 [DEBUG] [Thread-189021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:08:44.956 [DEBUG] [Thread-189021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:08:44.956 [DEBUG] [Thread-189021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:08:44.975 [INFO] [Thread-189021] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:08:44.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-14T17:08:44.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:08:45.763 [DEBUG] [Thread-189021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:08:45.763 [DEBUG] [Thread-189021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:08:45.811 [DEBUG] [Thread-189021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:08:45.812 [DEBUG] [Thread-189021] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:08:45.821 [DEBUG] [Thread-189021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:08:45.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:08: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')
2026-02-14T17:08: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') -> 00000000
2026-02-14T17:08:45.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:08:45.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:08:45.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:08:45.857 [DEBUG] [Thread-189021] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:08:59.573 [DEBUG] [Thread-189023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:09:01.433 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:09:01.434 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:09:14.626 [DEBUG] [Thread-189024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:09:15.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:09:15.865 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:09:15.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-14T17:09:17.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 9, 3), 14.47, 37.59, 0.0, 40.65, 16.3, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:09:17.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:09:03
2026-02-14T17:09:18.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:09:18.338 [DEBUG] [Thread-189025] [transport.py] [_log()] starting thread (client mode): 0xa575ad40
2026-02-14T17:09:18.338 [DEBUG] [Thread-189025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:09:18.358 [DEBUG] [Thread-189025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:09:18.359 [INFO] [Thread-189025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:09:18.361 [DEBUG] [Thread-189025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:09:18.361 [DEBUG] [Thread-189025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:09:18.362 [DEBUG] [Thread-189025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:09:18.362 [DEBUG] [Thread-189025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:09:18.362 [DEBUG] [Thread-189025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:09:18.362 [DEBUG] [Thread-189025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:09:18.362 [DEBUG] [Thread-189025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:09:18.362 [DEBUG] [Thread-189025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:09:18.362 [DEBUG] [Thread-189025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:09:18.362 [DEBUG] [Thread-189025] [transport.py] [_log()] client lang: <none>
2026-02-14T17:09:18.362 [DEBUG] [Thread-189025] [transport.py] [_log()] server lang: <none>
2026-02-14T17:09:18.362 [DEBUG] [Thread-189025] [transport.py] [_log()] kex follows: False
2026-02-14T17:09:18.362 [DEBUG] [Thread-189025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:09:18.362 [DEBUG] [Thread-189025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:09:18.362 [DEBUG] [Thread-189025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:09:18.362 [DEBUG] [Thread-189025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:09:18.362 [DEBUG] [Thread-189025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:09:18.362 [DEBUG] [Thread-189025] [transport.py] [_log()] Compression: none
2026-02-14T17:09:18.362 [DEBUG] [Thread-189025] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:09:18.381 [DEBUG] [Thread-189025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:09:18.381 [DEBUG] [Thread-189025] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:09:18.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:09:18.382 [DEBUG] [Thread-189025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:09:18.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:09:18.384 [DEBUG] [Thread-189025] [transport.py] [_log()] userauth is OK
2026-02-14T17:09:18.384 [DEBUG] [Thread-189025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:09:18.384 [DEBUG] [Thread-189025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:09:18.384 [DEBUG] [Thread-189025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:09:18.384 [DEBUG] [Thread-189025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:09:18.408 [INFO] [Thread-189025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:09:18.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:09:19.214 [DEBUG] [Thread-189025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:09:19.214 [DEBUG] [Thread-189025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:09:19.214 [DEBUG] [Thread-189025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:09:19.255 [DEBUG] [Thread-189025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:09:19.256 [DEBUG] [Thread-189025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:09:19.259 [DEBUG] [Thread-189025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:09:19.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:09:19.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:09:19.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:09:19.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:09:19.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:09:19.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:09:19.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:09:19.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:09:19.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:09:19.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.631008 -999.00  +16.00  17.45     44   +3.90 1 1 1 1 1   887    0 11.21 -42.31 ----- 23.8 17.4 156.5 35.4 19.7 -27.2 19.4 -26.1 20.9 -26.1 21.6 -27.5
2026-02-14T17:09:19.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:09:19.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:09:19.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.631008
2026-02-14T17:09:19.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:09:19.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:09:19.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:09:19.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:09:19.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:09:19.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:09:03', tmtdew=14.47, humidity=37.59, cloud=0.0, wind=40.65, temperature=16.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:08:39.091', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:09:19.285 [DEBUG] [Thread-189025] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:09:19.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-14T17:09:19.380 [DEBUG] [Thread-189028] [transport.py] [_log()] starting thread (client mode): 0xa57593f0
2026-02-14T17:09:19.380 [DEBUG] [Thread-189028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:09:19.395 [DEBUG] [Thread-189028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:09:19.395 [INFO] [Thread-189028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:09:19.403 [DEBUG] [Thread-189028] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:09:19.404 [DEBUG] [Thread-189028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:09:19.404 [DEBUG] [Thread-189028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:09:19.404 [DEBUG] [Thread-189028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:09:19.404 [DEBUG] [Thread-189028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:09:19.404 [DEBUG] [Thread-189028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:09:19.404 [DEBUG] [Thread-189028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:09:19.404 [DEBUG] [Thread-189028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:09:19.404 [DEBUG] [Thread-189028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:09:19.404 [DEBUG] [Thread-189028] [transport.py] [_log()] client lang: <none>
2026-02-14T17:09:19.404 [DEBUG] [Thread-189028] [transport.py] [_log()] server lang: <none>
2026-02-14T17:09:19.404 [DEBUG] [Thread-189028] [transport.py] [_log()] kex follows: False
2026-02-14T17:09:19.404 [DEBUG] [Thread-189028] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:09:19.404 [DEBUG] [Thread-189028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:09:19.404 [DEBUG] [Thread-189028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:09:19.404 [DEBUG] [Thread-189028] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:09:19.404 [DEBUG] [Thread-189028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:09:19.404 [DEBUG] [Thread-189028] [transport.py] [_log()] Compression: none
2026-02-14T17:09:19.404 [DEBUG] [Thread-189028] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:09:19.462 [DEBUG] [Thread-189028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:09:19.463 [DEBUG] [Thread-189028] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:09:19.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:09:19.464 [DEBUG] [Thread-189028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:09:19.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:09:19.520 [DEBUG] [Thread-189028] [transport.py] [_log()] userauth is OK
2026-02-14T17:09:19.520 [DEBUG] [Thread-189028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:09:19.520 [DEBUG] [Thread-189028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:09:19.520 [DEBUG] [Thread-189028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:09:19.520 [DEBUG] [Thread-189028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:09:19.541 [INFO] [Thread-189028] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:09:19.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-14T17:09:19.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:09:20.343 [DEBUG] [Thread-189028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:09:20.343 [DEBUG] [Thread-189028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:09:20.395 [DEBUG] [Thread-189028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:09:20.396 [DEBUG] [Thread-189028] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:09:20.412 [DEBUG] [Thread-189028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:09:20.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:09:20.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:09:20.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:09:20.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:09:20.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:09:20.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:09:20.473 [DEBUG] [Thread-189028] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:09:29.664 [DEBUG] [Thread-189030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:09:33.036 [DEBUG] [Thread-189031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:09:44.715 [DEBUG] [Thread-189032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:09:50.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:09:50.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:09:50.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T17:09:52.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 9, 39), 14.93, 36.57, 0.0, 46.08, 16.91, 0, 0, 0, 2, 1, 0),)
2026-02-14T17:09:52.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:09:39
2026-02-14T17:09:52.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:09:52.797 [DEBUG] [Thread-189033] [transport.py] [_log()] starting thread (client mode): 0xa5759660
2026-02-14T17:09:52.797 [DEBUG] [Thread-189033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:09:52.819 [DEBUG] [Thread-189033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:09:52.819 [INFO] [Thread-189033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:09:52.822 [DEBUG] [Thread-189033] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:09:52.822 [DEBUG] [Thread-189033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:09:52.822 [DEBUG] [Thread-189033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:09:52.823 [DEBUG] [Thread-189033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:09:52.823 [DEBUG] [Thread-189033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:09:52.823 [DEBUG] [Thread-189033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:09:52.823 [DEBUG] [Thread-189033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:09:52.823 [DEBUG] [Thread-189033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:09:52.823 [DEBUG] [Thread-189033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:09:52.823 [DEBUG] [Thread-189033] [transport.py] [_log()] client lang: <none>
2026-02-14T17:09:52.823 [DEBUG] [Thread-189033] [transport.py] [_log()] server lang: <none>
2026-02-14T17:09:52.823 [DEBUG] [Thread-189033] [transport.py] [_log()] kex follows: False
2026-02-14T17:09:52.823 [DEBUG] [Thread-189033] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:09:52.823 [DEBUG] [Thread-189033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:09:52.823 [DEBUG] [Thread-189033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:09:52.824 [DEBUG] [Thread-189033] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:09:52.824 [DEBUG] [Thread-189033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:09:52.824 [DEBUG] [Thread-189033] [transport.py] [_log()] Compression: none
2026-02-14T17:09:52.824 [DEBUG] [Thread-189033] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:09:52.844 [DEBUG] [Thread-189033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:09:52.845 [DEBUG] [Thread-189033] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:09:52.845 [DEBUG] [Thread-189033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:09:52.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:09:52.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:09:52.847 [DEBUG] [Thread-189033] [transport.py] [_log()] userauth is OK
2026-02-14T17:09:52.847 [DEBUG] [Thread-189033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:09:52.848 [DEBUG] [Thread-189033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:09:52.848 [DEBUG] [Thread-189033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:09:52.848 [DEBUG] [Thread-189033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:09:52.861 [INFO] [Thread-189033] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:09:52.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:09:53.519 [DEBUG] [Thread-189033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:09:53.519 [DEBUG] [Thread-189033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:09:53.520 [DEBUG] [Thread-189033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:09:53.560 [DEBUG] [Thread-189033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:09:53.560 [DEBUG] [Thread-189033] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:09:53.564 [DEBUG] [Thread-189033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:09:53.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:09:53.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:09:53.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:09:53.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:09:53.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:09:53.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:09:53.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:09:53.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:09:53.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:09:53.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.631356 -999.00  +16.10  32.31     44   +3.90 1 1 2 1 1   887    0 11.45 -41.11 ----- 37.2 32.3 171.2 40.0 19.8 -28.9 19.4 -27.3 20.9 -25.4 21.6 -27.8
2026-02-14T17:09:53.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:09:53.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:09:53.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.631356
2026-02-14T17:09:53.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:09:53.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:09:53.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:09:53.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:09:53.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:09:53.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:09:39', tmtdew=14.93, humidity=36.57, cloud=0.0, wind=46.08, temperature=16.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:09:09.158', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:09:53.591 [DEBUG] [Thread-189033] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:09:53.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-14T17:09:53.687 [DEBUG] [Thread-189036] [transport.py] [_log()] starting thread (client mode): 0xa57584f0
2026-02-14T17:09:53.688 [DEBUG] [Thread-189036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:09:53.702 [DEBUG] [Thread-189036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:09:53.702 [INFO] [Thread-189036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:09:53.710 [DEBUG] [Thread-189036] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:09:53.710 [DEBUG] [Thread-189036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:09:53.710 [DEBUG] [Thread-189036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:09:53.710 [DEBUG] [Thread-189036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:09:53.710 [DEBUG] [Thread-189036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:09:53.711 [DEBUG] [Thread-189036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:09:53.711 [DEBUG] [Thread-189036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:09:53.711 [DEBUG] [Thread-189036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:09:53.711 [DEBUG] [Thread-189036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:09:53.711 [DEBUG] [Thread-189036] [transport.py] [_log()] client lang: <none>
2026-02-14T17:09:53.711 [DEBUG] [Thread-189036] [transport.py] [_log()] server lang: <none>
2026-02-14T17:09:53.712 [DEBUG] [Thread-189036] [transport.py] [_log()] kex follows: False
2026-02-14T17:09:53.712 [DEBUG] [Thread-189036] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:09:53.712 [DEBUG] [Thread-189036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:09:53.712 [DEBUG] [Thread-189036] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:09:53.712 [DEBUG] [Thread-189036] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:09:53.712 [DEBUG] [Thread-189036] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:09:53.712 [DEBUG] [Thread-189036] [transport.py] [_log()] Compression: none
2026-02-14T17:09:53.712 [DEBUG] [Thread-189036] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:09:53.770 [DEBUG] [Thread-189036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:09:53.770 [DEBUG] [Thread-189036] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:09:53.771 [DEBUG] [Thread-189036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:09:53.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:09:53.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:09:53.825 [DEBUG] [Thread-189036] [transport.py] [_log()] userauth is OK
2026-02-14T17:09:53.825 [DEBUG] [Thread-189036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:09:53.826 [DEBUG] [Thread-189036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:09:53.826 [DEBUG] [Thread-189036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:09:53.826 [DEBUG] [Thread-189036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:09:53.844 [INFO] [Thread-189036] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:09:53.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-14T17:09:53.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:09:54.628 [DEBUG] [Thread-189036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:09:54.629 [DEBUG] [Thread-189036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:09:54.676 [DEBUG] [Thread-189036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:09:54.677 [DEBUG] [Thread-189036] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:09:54.686 [DEBUG] [Thread-189036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:09:54.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:09:54.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-14T17:09:54.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-14T17:09:54.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:09:54.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:09:54.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:09:54.723 [DEBUG] [Thread-189036] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:09:59.756 [DEBUG] [Thread-189038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:10:01.574 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:10:01.575 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:10:14.819 [DEBUG] [Thread-189039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:10:24.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:10:24.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:10:24.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-14T17:10:26.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 10, 14), 14.17, 38.7, 0.0, 40.88, 16.19, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:10:26.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:10:14
2026-02-14T17:10:26.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:10:27.052 [DEBUG] [Thread-189040] [transport.py] [_log()] starting thread (client mode): 0xa2deec20
2026-02-14T17:10:27.053 [DEBUG] [Thread-189040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:10:27.072 [DEBUG] [Thread-189040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:10:27.073 [INFO] [Thread-189040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:10:27.076 [DEBUG] [Thread-189040] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:10:27.076 [DEBUG] [Thread-189040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:10:27.076 [DEBUG] [Thread-189040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:10:27.076 [DEBUG] [Thread-189040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:10:27.076 [DEBUG] [Thread-189040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:10:27.077 [DEBUG] [Thread-189040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:10:27.077 [DEBUG] [Thread-189040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:10:27.077 [DEBUG] [Thread-189040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:10:27.077 [DEBUG] [Thread-189040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:10:27.077 [DEBUG] [Thread-189040] [transport.py] [_log()] client lang: <none>
2026-02-14T17:10:27.077 [DEBUG] [Thread-189040] [transport.py] [_log()] server lang: <none>
2026-02-14T17:10:27.077 [DEBUG] [Thread-189040] [transport.py] [_log()] kex follows: False
2026-02-14T17:10:27.077 [DEBUG] [Thread-189040] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:10:27.077 [DEBUG] [Thread-189040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:10:27.077 [DEBUG] [Thread-189040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:10:27.077 [DEBUG] [Thread-189040] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:10:27.077 [DEBUG] [Thread-189040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:10:27.078 [DEBUG] [Thread-189040] [transport.py] [_log()] Compression: none
2026-02-14T17:10:27.078 [DEBUG] [Thread-189040] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:10:27.094 [DEBUG] [Thread-189040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:10:27.095 [DEBUG] [Thread-189040] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:10:27.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:10:27.096 [DEBUG] [Thread-189040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:10:27.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:10:27.099 [DEBUG] [Thread-189040] [transport.py] [_log()] userauth is OK
2026-02-14T17:10:27.099 [DEBUG] [Thread-189040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:10:27.099 [DEBUG] [Thread-189040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:10:27.099 [DEBUG] [Thread-189040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:10:27.100 [DEBUG] [Thread-189040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:10:27.113 [INFO] [Thread-189040] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:10:27.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:10:27.705 [DEBUG] [Thread-189040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:10:27.706 [DEBUG] [Thread-189040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:10:27.706 [DEBUG] [Thread-189040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:10:27.747 [DEBUG] [Thread-189040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:10:27.747 [DEBUG] [Thread-189040] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:10:27.750 [DEBUG] [Thread-189040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:10:27.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:10:27.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:10:27.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:10:27.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:10:27.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:10:27.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:10:27.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:10:27.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:10:27.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:10:27.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.631703 -999.00  +15.80  36.53     44   +3.80 1 1 2 1 1   887    0 11.02 -39.25 ----- 33.5 36.5 180.2 47.8 19.6 -29.6 19.0 -31.1 20.7 -27.2 21.4 -28.6
2026-02-14T17:10:27.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:10:27.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:10:27.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.631703
2026-02-14T17:10:27.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:10:27.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:10:27.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:10:27.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:10:27.778 [DEBUG] [Thread-189040] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:10:27.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:10:27.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:10:14', tmtdew=14.17, humidity=38.7, cloud=0.0, wind=40.88, temperature=16.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:09:39.139', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:10:27.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-14T17:10:27.874 [DEBUG] [Thread-189043] [transport.py] [_log()] starting thread (client mode): 0xa2dec1c0
2026-02-14T17:10:27.875 [DEBUG] [Thread-189043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:10:27.889 [DEBUG] [Thread-189043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:10:27.889 [INFO] [Thread-189043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:10:27.897 [DEBUG] [Thread-189043] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:10:27.897 [DEBUG] [Thread-189043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:10:27.897 [DEBUG] [Thread-189043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:10:27.897 [DEBUG] [Thread-189043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:10:27.897 [DEBUG] [Thread-189043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:10:27.897 [DEBUG] [Thread-189043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:10:27.897 [DEBUG] [Thread-189043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:10:27.897 [DEBUG] [Thread-189043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:10:27.897 [DEBUG] [Thread-189043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:10:27.897 [DEBUG] [Thread-189043] [transport.py] [_log()] client lang: <none>
2026-02-14T17:10:27.897 [DEBUG] [Thread-189043] [transport.py] [_log()] server lang: <none>
2026-02-14T17:10:27.898 [DEBUG] [Thread-189043] [transport.py] [_log()] kex follows: False
2026-02-14T17:10:27.898 [DEBUG] [Thread-189043] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:10:27.898 [DEBUG] [Thread-189043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:10:27.898 [DEBUG] [Thread-189043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:10:27.898 [DEBUG] [Thread-189043] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:10:27.898 [DEBUG] [Thread-189043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:10:27.898 [DEBUG] [Thread-189043] [transport.py] [_log()] Compression: none
2026-02-14T17:10:27.898 [DEBUG] [Thread-189043] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:10:27.957 [DEBUG] [Thread-189043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:10:27.958 [DEBUG] [Thread-189043] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:10:27.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:10:27.959 [DEBUG] [Thread-189043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:10:27.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:10:28.013 [DEBUG] [Thread-189043] [transport.py] [_log()] userauth is OK
2026-02-14T17:10:28.013 [DEBUG] [Thread-189043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:10:28.014 [DEBUG] [Thread-189043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:10:28.014 [DEBUG] [Thread-189043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:10:28.014 [DEBUG] [Thread-189043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:10:28.038 [INFO] [Thread-189043] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:10:28.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-14T17:10:28.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:10:28.843 [DEBUG] [Thread-189043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:10:28.843 [DEBUG] [Thread-189043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:10:28.892 [DEBUG] [Thread-189043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:10:28.892 [DEBUG] [Thread-189043] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:10:28.900 [DEBUG] [Thread-189043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:10:28.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:10:28.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-14T17:10:28.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-14T17:10:28.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:10:28.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:10:28.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:10:28.934 [DEBUG] [Thread-189043] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:10:29.856 [DEBUG] [Thread-189045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:10:33.090 [DEBUG] [Thread-189046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:10:44.904 [DEBUG] [Thread-189047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:10:58.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:10:58.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:10:58.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-14T17:10:59.941 [DEBUG] [Thread-189048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:11:01.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 10, 50), 13.75, 39.72, 0.0, 36.49, 15.82, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:11:01.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:10:50
2026-02-14T17:11:01.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:11:01.728 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:11:01.729 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:11:01.749 [DEBUG] [Thread-189049] [transport.py] [_log()] starting thread (client mode): 0xa2deead0
2026-02-14T17:11:01.750 [DEBUG] [Thread-189049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:11:01.770 [DEBUG] [Thread-189049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:11:01.770 [INFO] [Thread-189049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:11:01.773 [DEBUG] [Thread-189049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:11:01.773 [DEBUG] [Thread-189049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:11:01.773 [DEBUG] [Thread-189049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:11:01.773 [DEBUG] [Thread-189049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:11:01.773 [DEBUG] [Thread-189049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:11:01.773 [DEBUG] [Thread-189049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:11:01.774 [DEBUG] [Thread-189049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:11:01.774 [DEBUG] [Thread-189049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:11:01.774 [DEBUG] [Thread-189049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:11:01.774 [DEBUG] [Thread-189049] [transport.py] [_log()] client lang: <none>
2026-02-14T17:11:01.774 [DEBUG] [Thread-189049] [transport.py] [_log()] server lang: <none>
2026-02-14T17:11:01.774 [DEBUG] [Thread-189049] [transport.py] [_log()] kex follows: False
2026-02-14T17:11:01.774 [DEBUG] [Thread-189049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:11:01.774 [DEBUG] [Thread-189049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:11:01.774 [DEBUG] [Thread-189049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:11:01.774 [DEBUG] [Thread-189049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:11:01.774 [DEBUG] [Thread-189049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:11:01.774 [DEBUG] [Thread-189049] [transport.py] [_log()] Compression: none
2026-02-14T17:11:01.775 [DEBUG] [Thread-189049] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:11:01.795 [DEBUG] [Thread-189049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:11:01.795 [DEBUG] [Thread-189049] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:11:01.796 [DEBUG] [Thread-189049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:11:01.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:11:01.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:11:01.798 [DEBUG] [Thread-189049] [transport.py] [_log()] userauth is OK
2026-02-14T17:11:01.798 [DEBUG] [Thread-189049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:11:01.798 [DEBUG] [Thread-189049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:11:01.799 [DEBUG] [Thread-189049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:11:01.799 [DEBUG] [Thread-189049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:11:01.833 [INFO] [Thread-189049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:11:01.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:11:02.408 [DEBUG] [Thread-189049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:11:02.408 [DEBUG] [Thread-189049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:11:02.409 [DEBUG] [Thread-189049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:11:02.449 [DEBUG] [Thread-189049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:11:02.450 [DEBUG] [Thread-189049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:11:02.453 [DEBUG] [Thread-189049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:11:02.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:11:02.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:11:02.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:11:02.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:11:02.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:11:02.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:11:02.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:11:02.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:11:02.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:11:02.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.632050 -999.00  +15.40  33.09     45   +3.70 1 1 2 1 1   887    0 11.14 -39.12 ----- 28.5 33.1 170.0 48.7 19.3 -29.1 18.7 -30.5 20.4 -28.1 21.1 -30.8
2026-02-14T17:11:02.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:11:02.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:11:02.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.632050
2026-02-14T17:11:02.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:11:02.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:11:02.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:11:02.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:11:02.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:11:02.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:10:50', tmtdew=13.75, humidity=39.72, cloud=0.0, wind=36.49, temperature=15.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:10:09.120', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:11:02.481 [DEBUG] [Thread-189049] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:11:02.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T17:11:02.575 [DEBUG] [Thread-189052] [transport.py] [_log()] starting thread (client mode): 0xa2dec370
2026-02-14T17:11:02.575 [DEBUG] [Thread-189052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:11:02.589 [DEBUG] [Thread-189052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:11:02.589 [INFO] [Thread-189052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:11:02.597 [DEBUG] [Thread-189052] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:11:02.597 [DEBUG] [Thread-189052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:11:02.598 [DEBUG] [Thread-189052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:11:02.598 [DEBUG] [Thread-189052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:11:02.598 [DEBUG] [Thread-189052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:11:02.598 [DEBUG] [Thread-189052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:11:02.598 [DEBUG] [Thread-189052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:11:02.598 [DEBUG] [Thread-189052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:11:02.598 [DEBUG] [Thread-189052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:11:02.598 [DEBUG] [Thread-189052] [transport.py] [_log()] client lang: <none>
2026-02-14T17:11:02.598 [DEBUG] [Thread-189052] [transport.py] [_log()] server lang: <none>
2026-02-14T17:11:02.598 [DEBUG] [Thread-189052] [transport.py] [_log()] kex follows: False
2026-02-14T17:11:02.598 [DEBUG] [Thread-189052] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:11:02.598 [DEBUG] [Thread-189052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:11:02.598 [DEBUG] [Thread-189052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:11:02.598 [DEBUG] [Thread-189052] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:11:02.598 [DEBUG] [Thread-189052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:11:02.598 [DEBUG] [Thread-189052] [transport.py] [_log()] Compression: none
2026-02-14T17:11:02.598 [DEBUG] [Thread-189052] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:11:02.657 [DEBUG] [Thread-189052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:11:02.657 [DEBUG] [Thread-189052] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:11:02.658 [DEBUG] [Thread-189052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:11:02.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:11:02.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:11:02.713 [DEBUG] [Thread-189052] [transport.py] [_log()] userauth is OK
2026-02-14T17:11:02.714 [DEBUG] [Thread-189052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:11:02.714 [DEBUG] [Thread-189052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:11:02.714 [DEBUG] [Thread-189052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:11:02.714 [DEBUG] [Thread-189052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:11:02.736 [INFO] [Thread-189052] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:11:02.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T17:11:02.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:11:03.564 [DEBUG] [Thread-189052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:11:03.564 [DEBUG] [Thread-189052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:11:03.612 [DEBUG] [Thread-189052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:11:03.613 [DEBUG] [Thread-189052] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:11:03.622 [DEBUG] [Thread-189052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:11:03.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:11: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-14T17:11: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-14T17:11:03.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:11:03.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:11:03.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:11:03.657 [DEBUG] [Thread-189052] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:11:14.977 [DEBUG] [Thread-189054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:11:30.040 [DEBUG] [Thread-189055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:11:33.144 [DEBUG] [Thread-189056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:11:33.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:11:33.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:11:33.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-14T17:11:35.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 11, 25), 13.67, 39.93, 0.0, 36.12, 15.8, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:11:35.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:11:25
2026-02-14T17:11:36.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:11:36.194 [DEBUG] [Thread-189057] [transport.py] [_log()] starting thread (client mode): 0xa2db4700
2026-02-14T17:11:36.194 [DEBUG] [Thread-189057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:11:36.214 [DEBUG] [Thread-189057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:11:36.214 [INFO] [Thread-189057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:11:36.218 [DEBUG] [Thread-189057] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:11:36.218 [DEBUG] [Thread-189057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:11:36.218 [DEBUG] [Thread-189057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:11:36.218 [DEBUG] [Thread-189057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:11:36.218 [DEBUG] [Thread-189057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:11:36.218 [DEBUG] [Thread-189057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:11:36.218 [DEBUG] [Thread-189057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:11:36.218 [DEBUG] [Thread-189057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:11:36.218 [DEBUG] [Thread-189057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:11:36.219 [DEBUG] [Thread-189057] [transport.py] [_log()] client lang: <none>
2026-02-14T17:11:36.219 [DEBUG] [Thread-189057] [transport.py] [_log()] server lang: <none>
2026-02-14T17:11:36.219 [DEBUG] [Thread-189057] [transport.py] [_log()] kex follows: False
2026-02-14T17:11:36.219 [DEBUG] [Thread-189057] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:11:36.219 [DEBUG] [Thread-189057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:11:36.219 [DEBUG] [Thread-189057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:11:36.219 [DEBUG] [Thread-189057] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:11:36.219 [DEBUG] [Thread-189057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:11:36.219 [DEBUG] [Thread-189057] [transport.py] [_log()] Compression: none
2026-02-14T17:11:36.219 [DEBUG] [Thread-189057] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:11:36.236 [DEBUG] [Thread-189057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:11:36.237 [DEBUG] [Thread-189057] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:11:36.237 [DEBUG] [Thread-189057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:11:36.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:11:36.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:11:36.239 [DEBUG] [Thread-189057] [transport.py] [_log()] userauth is OK
2026-02-14T17:11:36.240 [DEBUG] [Thread-189057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:11:36.240 [DEBUG] [Thread-189057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:11:36.240 [DEBUG] [Thread-189057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:11:36.240 [DEBUG] [Thread-189057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:11:36.258 [INFO] [Thread-189057] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:11:36.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:11:36.907 [DEBUG] [Thread-189057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:11:36.907 [DEBUG] [Thread-189057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:11:36.907 [DEBUG] [Thread-189057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:11:36.948 [DEBUG] [Thread-189057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:11:36.948 [DEBUG] [Thread-189057] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:11:36.952 [DEBUG] [Thread-189057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:11:36.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:11:36.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:11:36.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:11:36.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:11:36.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:11:36.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:11:36.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:11:36.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:11:36.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:11:36.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.632397 -999.00  +15.40  34.26     45   +3.80 1 1 2 1 1   887    0 10.94 -42.40 ----- 30.8 34.3 186.4 41.3 19.3 -29.1 18.8 -31.1 20.4 -26.8 21.1 -28.7
2026-02-14T17:11:36.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:11:36.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:11:36.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.632397
2026-02-14T17:11:36.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:11:36.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:11:36.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:11:36.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:11:36.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:11:36.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:11:25', tmtdew=13.67, humidity=39.93, cloud=0.0, wind=36.12, temperature=15.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:10:39.101', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:11:36.979 [DEBUG] [Thread-189057] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:11:37.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-14T17:11:37.083 [DEBUG] [Thread-189060] [transport.py] [_log()] starting thread (client mode): 0xa2d79540
2026-02-14T17:11:37.083 [DEBUG] [Thread-189060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:11:37.098 [DEBUG] [Thread-189060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:11:37.098 [INFO] [Thread-189060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:11:37.106 [DEBUG] [Thread-189060] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:11:37.106 [DEBUG] [Thread-189060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:11:37.107 [DEBUG] [Thread-189060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:11:37.107 [DEBUG] [Thread-189060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:11:37.107 [DEBUG] [Thread-189060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:11:37.107 [DEBUG] [Thread-189060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:11:37.107 [DEBUG] [Thread-189060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:11:37.107 [DEBUG] [Thread-189060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:11:37.107 [DEBUG] [Thread-189060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:11:37.107 [DEBUG] [Thread-189060] [transport.py] [_log()] client lang: <none>
2026-02-14T17:11:37.107 [DEBUG] [Thread-189060] [transport.py] [_log()] server lang: <none>
2026-02-14T17:11:37.107 [DEBUG] [Thread-189060] [transport.py] [_log()] kex follows: False
2026-02-14T17:11:37.107 [DEBUG] [Thread-189060] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:11:37.107 [DEBUG] [Thread-189060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:11:37.107 [DEBUG] [Thread-189060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:11:37.107 [DEBUG] [Thread-189060] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:11:37.107 [DEBUG] [Thread-189060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:11:37.107 [DEBUG] [Thread-189060] [transport.py] [_log()] Compression: none
2026-02-14T17:11:37.107 [DEBUG] [Thread-189060] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:11:37.164 [DEBUG] [Thread-189060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:11:37.165 [DEBUG] [Thread-189060] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:11:37.165 [DEBUG] [Thread-189060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:11:37.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:11:37.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:11:37.220 [DEBUG] [Thread-189060] [transport.py] [_log()] userauth is OK
2026-02-14T17:11:37.220 [DEBUG] [Thread-189060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:11:37.221 [DEBUG] [Thread-189060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:11:37.221 [DEBUG] [Thread-189060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:11:37.221 [DEBUG] [Thread-189060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:11:37.240 [INFO] [Thread-189060] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:11: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-14T17:11:37.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:11:38.071 [DEBUG] [Thread-189060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:11:38.071 [DEBUG] [Thread-189060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:11:38.119 [DEBUG] [Thread-189060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:11:38.119 [DEBUG] [Thread-189060] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:11:38.128 [DEBUG] [Thread-189060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:11:38.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:11: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')
2026-02-14T17:11:38.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:11:38.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:11:38.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:11:38.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:11:38.164 [DEBUG] [Thread-189060] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:11:45.075 [DEBUG] [Thread-189062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:12:00.126 [DEBUG] [Thread-189063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:12:01.870 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:12:01.871 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:12:08.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:12:08.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:12: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-14T17:12:10.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 12, 1), 13.79, 39.38, 0.0, 32.64, 15.87, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:12:10.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:12:01
2026-02-14T17:12:10.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:12:10.525 [DEBUG] [Thread-189064] [transport.py] [_log()] starting thread (client mode): 0xa2d79210
2026-02-14T17:12:10.525 [DEBUG] [Thread-189064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:12:10.545 [DEBUG] [Thread-189064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:12:10.545 [INFO] [Thread-189064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:12:10.548 [DEBUG] [Thread-189064] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:12:10.548 [DEBUG] [Thread-189064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:12:10.549 [DEBUG] [Thread-189064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:12:10.549 [DEBUG] [Thread-189064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:12:10.549 [DEBUG] [Thread-189064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:12:10.549 [DEBUG] [Thread-189064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:12:10.549 [DEBUG] [Thread-189064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:12:10.549 [DEBUG] [Thread-189064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:12:10.549 [DEBUG] [Thread-189064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:12:10.549 [DEBUG] [Thread-189064] [transport.py] [_log()] client lang: <none>
2026-02-14T17:12:10.549 [DEBUG] [Thread-189064] [transport.py] [_log()] server lang: <none>
2026-02-14T17:12:10.549 [DEBUG] [Thread-189064] [transport.py] [_log()] kex follows: False
2026-02-14T17:12:10.549 [DEBUG] [Thread-189064] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:12:10.549 [DEBUG] [Thread-189064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:12:10.549 [DEBUG] [Thread-189064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:12:10.549 [DEBUG] [Thread-189064] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:12:10.549 [DEBUG] [Thread-189064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:12:10.549 [DEBUG] [Thread-189064] [transport.py] [_log()] Compression: none
2026-02-14T17:12:10.549 [DEBUG] [Thread-189064] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:12:10.565 [DEBUG] [Thread-189064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:12:10.565 [DEBUG] [Thread-189064] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:12:10.566 [DEBUG] [Thread-189064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:12:10.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:12:10.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:12:10.568 [DEBUG] [Thread-189064] [transport.py] [_log()] userauth is OK
2026-02-14T17:12:10.568 [DEBUG] [Thread-189064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:12:10.568 [DEBUG] [Thread-189064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:12:10.568 [DEBUG] [Thread-189064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:12:10.568 [DEBUG] [Thread-189064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:12:10.587 [INFO] [Thread-189064] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:12:10.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:12:11.221 [DEBUG] [Thread-189064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:12:11.221 [DEBUG] [Thread-189064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:12:11.222 [DEBUG] [Thread-189064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:12:11.262 [DEBUG] [Thread-189064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:12:11.262 [DEBUG] [Thread-189064] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:12:11.266 [DEBUG] [Thread-189064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:12:11.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:12:11.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:12:11.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:12:11.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:12:11.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:12:11.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:12:11.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:12:11.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:12:11.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:12:11.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.632745 -999.00  +15.30  30.43     46   +3.80 1 1 2 1 1   887    0 11.10 -44.50 ----- 25.2 30.4 183.0 38.6 19.3 -27.7 18.7 -27.7 20.4 -26.2 21.0 -28.2
2026-02-14T17:12:11.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:12:11.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:12:11.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.632745
2026-02-14T17:12:11.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:12:11.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:12:11.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:12:11.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:12:11.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:12:11.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:12:01', tmtdew=13.79, humidity=39.38, cloud=0.0, wind=32.64, temperature=15.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:11:09.168', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:12:11.292 [DEBUG] [Thread-189064] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:12:11.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-14T17:12:11.397 [DEBUG] [Thread-189067] [transport.py] [_log()] starting thread (client mode): 0xa2d790f0
2026-02-14T17:12:11.397 [DEBUG] [Thread-189067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:12:11.412 [DEBUG] [Thread-189067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:12:11.412 [INFO] [Thread-189067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:12:11.419 [DEBUG] [Thread-189067] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:12:11.420 [DEBUG] [Thread-189067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:12:11.420 [DEBUG] [Thread-189067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:12:11.420 [DEBUG] [Thread-189067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:12:11.420 [DEBUG] [Thread-189067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:12:11.420 [DEBUG] [Thread-189067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:12:11.420 [DEBUG] [Thread-189067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:12:11.420 [DEBUG] [Thread-189067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:12:11.420 [DEBUG] [Thread-189067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:12:11.420 [DEBUG] [Thread-189067] [transport.py] [_log()] client lang: <none>
2026-02-14T17:12:11.420 [DEBUG] [Thread-189067] [transport.py] [_log()] server lang: <none>
2026-02-14T17:12:11.420 [DEBUG] [Thread-189067] [transport.py] [_log()] kex follows: False
2026-02-14T17:12:11.420 [DEBUG] [Thread-189067] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:12:11.420 [DEBUG] [Thread-189067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:12:11.420 [DEBUG] [Thread-189067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:12:11.420 [DEBUG] [Thread-189067] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:12:11.420 [DEBUG] [Thread-189067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:12:11.420 [DEBUG] [Thread-189067] [transport.py] [_log()] Compression: none
2026-02-14T17:12:11.420 [DEBUG] [Thread-189067] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:12:11.480 [DEBUG] [Thread-189067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:12:11.481 [DEBUG] [Thread-189067] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:12:11.481 [DEBUG] [Thread-189067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:12:11.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:12:11.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:12:11.540 [DEBUG] [Thread-189067] [transport.py] [_log()] userauth is OK
2026-02-14T17:12:11.541 [DEBUG] [Thread-189067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:12:11.541 [DEBUG] [Thread-189067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:12:11.541 [DEBUG] [Thread-189067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:12:11.541 [DEBUG] [Thread-189067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:12:11.559 [INFO] [Thread-189067] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:12:11.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-14T17:12:11.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:12:12.399 [DEBUG] [Thread-189067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:12:12.399 [DEBUG] [Thread-189067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:12:12.447 [DEBUG] [Thread-189067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:12:12.447 [DEBUG] [Thread-189067] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:12:12.457 [DEBUG] [Thread-189067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:12:12.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:12:12.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:12:12.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:12:12.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:12:12.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:12:12.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:12:12.494 [DEBUG] [Thread-189067] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:12:15.163 [DEBUG] [Thread-189069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:12:30.216 [DEBUG] [Thread-189070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:12:33.203 [DEBUG] [Thread-189071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:12:42.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:12:42.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:12:42.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-14T17:12:44.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 12, 36), 15.09, 36.27, 0.0, 34.61, 17.31, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:12:44.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:12:36
2026-02-14T17:12:44.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:12:44.791 [DEBUG] [Thread-189072] [transport.py] [_log()] starting thread (client mode): 0xa2d228c0
2026-02-14T17:12:44.791 [DEBUG] [Thread-189072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:12:44.811 [DEBUG] [Thread-189072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:12:44.811 [INFO] [Thread-189072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:12:44.813 [DEBUG] [Thread-189072] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:12:44.813 [DEBUG] [Thread-189072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:12:44.813 [DEBUG] [Thread-189072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:12:44.813 [DEBUG] [Thread-189072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:12:44.813 [DEBUG] [Thread-189072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:12:44.813 [DEBUG] [Thread-189072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:12:44.813 [DEBUG] [Thread-189072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:12:44.813 [DEBUG] [Thread-189072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:12:44.813 [DEBUG] [Thread-189072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:12:44.813 [DEBUG] [Thread-189072] [transport.py] [_log()] client lang: <none>
2026-02-14T17:12:44.813 [DEBUG] [Thread-189072] [transport.py] [_log()] server lang: <none>
2026-02-14T17:12:44.813 [DEBUG] [Thread-189072] [transport.py] [_log()] kex follows: False
2026-02-14T17:12:44.813 [DEBUG] [Thread-189072] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:12:44.814 [DEBUG] [Thread-189072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:12:44.814 [DEBUG] [Thread-189072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:12:44.814 [DEBUG] [Thread-189072] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:12:44.814 [DEBUG] [Thread-189072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:12:44.814 [DEBUG] [Thread-189072] [transport.py] [_log()] Compression: none
2026-02-14T17:12:44.814 [DEBUG] [Thread-189072] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:12:44.831 [DEBUG] [Thread-189072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:12:44.831 [DEBUG] [Thread-189072] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:12:44.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:12:44.832 [DEBUG] [Thread-189072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:12:44.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:12:44.835 [DEBUG] [Thread-189072] [transport.py] [_log()] userauth is OK
2026-02-14T17:12:44.835 [DEBUG] [Thread-189072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:12:44.835 [DEBUG] [Thread-189072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:12:44.835 [DEBUG] [Thread-189072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:12:44.835 [DEBUG] [Thread-189072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:12:44.859 [INFO] [Thread-189072] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:12:44.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:12:45.250 [DEBUG] [Thread-189074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:12:45.498 [DEBUG] [Thread-189072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:12:45.498 [DEBUG] [Thread-189072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:12:45.498 [DEBUG] [Thread-189072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:12:45.539 [DEBUG] [Thread-189072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:12:45.539 [DEBUG] [Thread-189072] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:12:45.542 [DEBUG] [Thread-189072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:12:45.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:12:45.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:12:45.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:12:45.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:12:45.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:12:45.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:12:45.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:12:45.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:12:45.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:12:45.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.633092 -999.00  +15.40  34.57     45   +3.80 1 1 2 1 1   887    0 10.99 -44.45 ----- 31.7 34.6 185.2 38.6 19.2 -28.9 18.7 -29.2 20.4 -26.8 21.0 -29.3
2026-02-14T17:12:45.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:12:45.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:12:45.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.633092
2026-02-14T17:12:45.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:12:45.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:12:45.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:12:45.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:12:45.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:12:45.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:12:36', tmtdew=15.09, humidity=36.27, cloud=0.0, wind=34.61, temperature=17.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:11:39.149', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:12:45.567 [DEBUG] [Thread-189072] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:12:45.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-14T17:12:45.660 [DEBUG] [Thread-189076] [transport.py] [_log()] starting thread (client mode): 0xa57c09d0
2026-02-14T17:12:45.660 [DEBUG] [Thread-189076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:12:45.674 [DEBUG] [Thread-189076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:12:45.674 [INFO] [Thread-189076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:12:45.682 [DEBUG] [Thread-189076] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:12:45.682 [DEBUG] [Thread-189076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:12:45.682 [DEBUG] [Thread-189076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:12:45.682 [DEBUG] [Thread-189076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:12:45.682 [DEBUG] [Thread-189076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:12:45.683 [DEBUG] [Thread-189076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:12:45.683 [DEBUG] [Thread-189076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:12:45.683 [DEBUG] [Thread-189076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:12:45.683 [DEBUG] [Thread-189076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:12:45.683 [DEBUG] [Thread-189076] [transport.py] [_log()] client lang: <none>
2026-02-14T17:12:45.683 [DEBUG] [Thread-189076] [transport.py] [_log()] server lang: <none>
2026-02-14T17:12:45.683 [DEBUG] [Thread-189076] [transport.py] [_log()] kex follows: False
2026-02-14T17:12:45.683 [DEBUG] [Thread-189076] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:12:45.683 [DEBUG] [Thread-189076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:12:45.683 [DEBUG] [Thread-189076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:12:45.684 [DEBUG] [Thread-189076] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:12:45.684 [DEBUG] [Thread-189076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:12:45.684 [DEBUG] [Thread-189076] [transport.py] [_log()] Compression: none
2026-02-14T17:12:45.684 [DEBUG] [Thread-189076] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:12:45.739 [DEBUG] [Thread-189076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:12:45.739 [DEBUG] [Thread-189076] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:12:45.740 [DEBUG] [Thread-189076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:12:45.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:12:45.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:12:45.795 [DEBUG] [Thread-189076] [transport.py] [_log()] userauth is OK
2026-02-14T17:12:45.795 [DEBUG] [Thread-189076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:12:45.795 [DEBUG] [Thread-189076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:12:45.795 [DEBUG] [Thread-189076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:12:45.795 [DEBUG] [Thread-189076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:12:45.814 [INFO] [Thread-189076] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:12:45.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-14T17:12:45.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:12:46.619 [DEBUG] [Thread-189076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:12:46.619 [DEBUG] [Thread-189076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:12:46.667 [DEBUG] [Thread-189076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:12:46.667 [DEBUG] [Thread-189076] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:12:46.676 [DEBUG] [Thread-189076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:12:46.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:12:46.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-14T17:12:46.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-14T17:12:46.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:12:46.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:12:46.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:12:46.710 [DEBUG] [Thread-189076] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:13:00.286 [DEBUG] [Thread-189078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:13:02.013 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:13:02.015 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:13:15.337 [DEBUG] [Thread-189079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:13:16.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:13:16.733 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:13:16.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T17:13:18.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 12, 36), 15.09, 36.27, 0.0, 34.61, 17.31, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:13:18.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:12:36
2026-02-14T17:13:19.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:13:19.316 [DEBUG] [Thread-189080] [transport.py] [_log()] starting thread (client mode): 0xa2db49a0
2026-02-14T17:13:19.316 [DEBUG] [Thread-189080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:13:19.333 [DEBUG] [Thread-189080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:13:19.334 [INFO] [Thread-189080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:13:19.337 [DEBUG] [Thread-189080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:13:19.337 [DEBUG] [Thread-189080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:13:19.337 [DEBUG] [Thread-189080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:13:19.337 [DEBUG] [Thread-189080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:13:19.337 [DEBUG] [Thread-189080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:13:19.337 [DEBUG] [Thread-189080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:13:19.337 [DEBUG] [Thread-189080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:13:19.337 [DEBUG] [Thread-189080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:13:19.337 [DEBUG] [Thread-189080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:13:19.337 [DEBUG] [Thread-189080] [transport.py] [_log()] client lang: <none>
2026-02-14T17:13:19.337 [DEBUG] [Thread-189080] [transport.py] [_log()] server lang: <none>
2026-02-14T17:13:19.337 [DEBUG] [Thread-189080] [transport.py] [_log()] kex follows: False
2026-02-14T17:13:19.337 [DEBUG] [Thread-189080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:13:19.337 [DEBUG] [Thread-189080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:13:19.338 [DEBUG] [Thread-189080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:13:19.338 [DEBUG] [Thread-189080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:13:19.338 [DEBUG] [Thread-189080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:13:19.338 [DEBUG] [Thread-189080] [transport.py] [_log()] Compression: none
2026-02-14T17:13:19.338 [DEBUG] [Thread-189080] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:13:19.354 [DEBUG] [Thread-189080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:13:19.355 [DEBUG] [Thread-189080] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:13:19.355 [DEBUG] [Thread-189080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:13:19.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:13:19.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:13:19.357 [DEBUG] [Thread-189080] [transport.py] [_log()] userauth is OK
2026-02-14T17:13:19.357 [DEBUG] [Thread-189080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:13:19.357 [DEBUG] [Thread-189080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:13:19.357 [DEBUG] [Thread-189080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:13:19.357 [DEBUG] [Thread-189080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:13:19.382 [INFO] [Thread-189080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:13:19.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:13:19.957 [DEBUG] [Thread-189080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:13:19.957 [DEBUG] [Thread-189080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:13:19.958 [DEBUG] [Thread-189080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:13:19.998 [DEBUG] [Thread-189080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:13:19.999 [DEBUG] [Thread-189080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:13:20.002 [DEBUG] [Thread-189080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:13:20.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:13:20.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:13:20.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:13:20.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:13:20.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:13:20.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:13:20.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:13:20.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:13:20.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:13:20.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.634133 -999.00  +15.60  37.25     44   +3.60 1 1 2 1 1   887    0 10.77 -46.50 ----- 29.6 37.2 182.2 44.8 19.2 -28.6 18.7 -29.7 20.4 -26.4 20.9 -27.9
2026-02-14T17:13:20.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:13:20.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:13:20.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.634133
2026-02-14T17:13:20.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:13:20.024 [DEBUG] [Thread-189080] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:13:20.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:13:20.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:13:20.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:13:20.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:13:20.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:12:36', tmtdew=15.09, humidity=36.27, cloud=0.0, wind=34.61, temperature=17.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:13:09.091', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:13:20.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-14T17:13:20.122 [DEBUG] [Thread-189083] [transport.py] [_log()] starting thread (client mode): 0xa57b3d90
2026-02-14T17:13:20.122 [DEBUG] [Thread-189083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:13:20.140 [DEBUG] [Thread-189083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:13:20.140 [INFO] [Thread-189083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:13:20.152 [DEBUG] [Thread-189083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:13:20.153 [DEBUG] [Thread-189083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:13:20.153 [DEBUG] [Thread-189083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:13:20.153 [DEBUG] [Thread-189083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:13:20.153 [DEBUG] [Thread-189083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:13:20.153 [DEBUG] [Thread-189083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:13:20.153 [DEBUG] [Thread-189083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:13:20.153 [DEBUG] [Thread-189083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:13:20.153 [DEBUG] [Thread-189083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:13:20.153 [DEBUG] [Thread-189083] [transport.py] [_log()] client lang: <none>
2026-02-14T17:13:20.153 [DEBUG] [Thread-189083] [transport.py] [_log()] server lang: <none>
2026-02-14T17:13:20.153 [DEBUG] [Thread-189083] [transport.py] [_log()] kex follows: False
2026-02-14T17:13:20.153 [DEBUG] [Thread-189083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:13:20.153 [DEBUG] [Thread-189083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:13:20.154 [DEBUG] [Thread-189083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:13:20.154 [DEBUG] [Thread-189083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:13:20.154 [DEBUG] [Thread-189083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:13:20.154 [DEBUG] [Thread-189083] [transport.py] [_log()] Compression: none
2026-02-14T17:13:20.155 [DEBUG] [Thread-189083] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:13:20.207 [DEBUG] [Thread-189083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:13:20.207 [DEBUG] [Thread-189083] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:13:20.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:13:20.209 [DEBUG] [Thread-189083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:13:20.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:13:20.263 [DEBUG] [Thread-189083] [transport.py] [_log()] userauth is OK
2026-02-14T17:13:20.263 [DEBUG] [Thread-189083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:13:20.263 [DEBUG] [Thread-189083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:13:20.263 [DEBUG] [Thread-189083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:13:20.264 [DEBUG] [Thread-189083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:13:20.282 [INFO] [Thread-189083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:13:20.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-14T17:13:20.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:13:21.096 [DEBUG] [Thread-189083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:13:21.096 [DEBUG] [Thread-189083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:13:21.145 [DEBUG] [Thread-189083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:13:21.145 [DEBUG] [Thread-189083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:13:21.153 [DEBUG] [Thread-189083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:13:21.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:13:21.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-14T17:13:21.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-14T17:13:21.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:13:21.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:13:21.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:13:21.187 [DEBUG] [Thread-189083] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:13:30.372 [DEBUG] [Thread-189085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:13:33.244 [DEBUG] [Thread-189086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:13:45.424 [DEBUG] [Thread-189087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:13:51.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:13:51.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:13:51.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T17:13:53.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 13, 11), 14.38, 38.19, 0.0, 38.41, 16.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:13:53.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:13:11
2026-02-14T17:13:53.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:13:53.663 [DEBUG] [Thread-189088] [transport.py] [_log()] starting thread (client mode): 0xa57c08e0
2026-02-14T17:13:53.664 [DEBUG] [Thread-189088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:13:53.676 [DEBUG] [Thread-189088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:13:53.676 [INFO] [Thread-189088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:13:53.677 [DEBUG] [Thread-189088] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:13:53.677 [DEBUG] [Thread-189088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:13:53.677 [DEBUG] [Thread-189088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:13:53.677 [DEBUG] [Thread-189088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:13:53.677 [DEBUG] [Thread-189088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:13:53.677 [DEBUG] [Thread-189088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:13:53.677 [DEBUG] [Thread-189088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:13:53.677 [DEBUG] [Thread-189088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:13:53.677 [DEBUG] [Thread-189088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:13:53.677 [DEBUG] [Thread-189088] [transport.py] [_log()] client lang: <none>
2026-02-14T17:13:53.677 [DEBUG] [Thread-189088] [transport.py] [_log()] server lang: <none>
2026-02-14T17:13:53.677 [DEBUG] [Thread-189088] [transport.py] [_log()] kex follows: False
2026-02-14T17:13:53.677 [DEBUG] [Thread-189088] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:13:53.677 [DEBUG] [Thread-189088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:13:53.677 [DEBUG] [Thread-189088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:13:53.677 [DEBUG] [Thread-189088] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:13:53.677 [DEBUG] [Thread-189088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:13:53.677 [DEBUG] [Thread-189088] [transport.py] [_log()] Compression: none
2026-02-14T17:13:53.677 [DEBUG] [Thread-189088] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:13:53.685 [DEBUG] [Thread-189088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:13:53.686 [DEBUG] [Thread-189088] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:13:53.686 [DEBUG] [Thread-189088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:13:53.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:13:53.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:13:53.687 [DEBUG] [Thread-189088] [transport.py] [_log()] userauth is OK
2026-02-14T17:13:53.687 [DEBUG] [Thread-189088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:13:53.687 [DEBUG] [Thread-189088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:13:53.688 [DEBUG] [Thread-189088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:13:53.688 [DEBUG] [Thread-189088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:13:53.708 [INFO] [Thread-189088] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:13:53.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:13:54.323 [DEBUG] [Thread-189088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:13:54.323 [DEBUG] [Thread-189088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:13:54.323 [DEBUG] [Thread-189088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:13:54.364 [DEBUG] [Thread-189088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:13:54.365 [DEBUG] [Thread-189088] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:13:54.369 [DEBUG] [Thread-189088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:13:54.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:13:54.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:13:54.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:13:54.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:13:54.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:13:54.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:13:54.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:13:54.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:13:54.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:13:54.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.634481 -999.00  +15.50  33.66     45   +3.60 1 1 2 1 1   887    0 11.07 -45.37 ----- 29.6 33.7 180.8 42.5 19.1 -27.1 18.5 -27.4 20.2 -27.9 20.8 -29.3
2026-02-14T17:13:54.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:13:54.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:13:54.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.634481
2026-02-14T17:13:54.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:13:54.390 [DEBUG] [Thread-189088] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:13:54.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:13:54.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:13:54.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:13:54.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:13:54.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:13:11', tmtdew=14.38, humidity=38.19, cloud=0.0, wind=38.41, temperature=16.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:13:39.158', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:13:54.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-14T17:13:54.487 [DEBUG] [Thread-189091] [transport.py] [_log()] starting thread (client mode): 0xa57c1c90
2026-02-14T17:13:54.487 [DEBUG] [Thread-189091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:13:54.503 [DEBUG] [Thread-189091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:13:54.504 [INFO] [Thread-189091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:13:54.511 [DEBUG] [Thread-189091] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:13:54.512 [DEBUG] [Thread-189091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:13:54.512 [DEBUG] [Thread-189091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:13:54.512 [DEBUG] [Thread-189091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:13:54.512 [DEBUG] [Thread-189091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:13:54.512 [DEBUG] [Thread-189091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:13:54.512 [DEBUG] [Thread-189091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:13:54.512 [DEBUG] [Thread-189091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:13:54.513 [DEBUG] [Thread-189091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:13:54.513 [DEBUG] [Thread-189091] [transport.py] [_log()] client lang: <none>
2026-02-14T17:13:54.513 [DEBUG] [Thread-189091] [transport.py] [_log()] server lang: <none>
2026-02-14T17:13:54.513 [DEBUG] [Thread-189091] [transport.py] [_log()] kex follows: False
2026-02-14T17:13:54.513 [DEBUG] [Thread-189091] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:13:54.513 [DEBUG] [Thread-189091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:13:54.513 [DEBUG] [Thread-189091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:13:54.513 [DEBUG] [Thread-189091] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:13:54.514 [DEBUG] [Thread-189091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:13:54.514 [DEBUG] [Thread-189091] [transport.py] [_log()] Compression: none
2026-02-14T17:13:54.514 [DEBUG] [Thread-189091] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:13:54.570 [DEBUG] [Thread-189091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:13:54.570 [DEBUG] [Thread-189091] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:13:54.571 [DEBUG] [Thread-189091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:13:54.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:13:54.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:13:54.627 [DEBUG] [Thread-189091] [transport.py] [_log()] userauth is OK
2026-02-14T17:13:54.627 [DEBUG] [Thread-189091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:13:54.627 [DEBUG] [Thread-189091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:13:54.627 [DEBUG] [Thread-189091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:13:54.627 [DEBUG] [Thread-189091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:13:54.646 [INFO] [Thread-189091] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:13:54.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-14T17:13:54.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:13:55.465 [DEBUG] [Thread-189091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:13:55.466 [DEBUG] [Thread-189091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:13:55.513 [DEBUG] [Thread-189091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:13:55.514 [DEBUG] [Thread-189091] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:13:55.523 [DEBUG] [Thread-189091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:13:55.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:13:55.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-14T17:13:55.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:13:55.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:13:55.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:13:55.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:13:55.559 [DEBUG] [Thread-189091] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:14:00.464 [DEBUG] [Thread-189093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:14:02.155 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:14:02.156 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:14:15.525 [DEBUG] [Thread-189094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:14:25.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:14:25.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:14:25.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-14T17:14:27.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 13, 47), 14.35, 37.85, 0.0, 36.51, 16.15, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:14:27.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:13:47
2026-02-14T17:14:28.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:14:28.478 [DEBUG] [Thread-189095] [transport.py] [_log()] starting thread (client mode): 0xa2db6ec0
2026-02-14T17:14:28.479 [DEBUG] [Thread-189095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:14:28.499 [DEBUG] [Thread-189095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:14:28.499 [INFO] [Thread-189095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:14:28.502 [DEBUG] [Thread-189095] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:14:28.502 [DEBUG] [Thread-189095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:14:28.502 [DEBUG] [Thread-189095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:14:28.502 [DEBUG] [Thread-189095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:14:28.502 [DEBUG] [Thread-189095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:14:28.502 [DEBUG] [Thread-189095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:14:28.502 [DEBUG] [Thread-189095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:14:28.502 [DEBUG] [Thread-189095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:14:28.502 [DEBUG] [Thread-189095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:14:28.502 [DEBUG] [Thread-189095] [transport.py] [_log()] client lang: <none>
2026-02-14T17:14:28.503 [DEBUG] [Thread-189095] [transport.py] [_log()] server lang: <none>
2026-02-14T17:14:28.503 [DEBUG] [Thread-189095] [transport.py] [_log()] kex follows: False
2026-02-14T17:14:28.503 [DEBUG] [Thread-189095] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:14:28.503 [DEBUG] [Thread-189095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:14:28.503 [DEBUG] [Thread-189095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:14:28.503 [DEBUG] [Thread-189095] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:14:28.503 [DEBUG] [Thread-189095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:14:28.503 [DEBUG] [Thread-189095] [transport.py] [_log()] Compression: none
2026-02-14T17:14:28.503 [DEBUG] [Thread-189095] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:14:28.521 [DEBUG] [Thread-189095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:14:28.522 [DEBUG] [Thread-189095] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:14:28.522 [DEBUG] [Thread-189095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:14:28.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:14:28.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:14:28.525 [DEBUG] [Thread-189095] [transport.py] [_log()] userauth is OK
2026-02-14T17:14:28.525 [DEBUG] [Thread-189095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:14:28.526 [DEBUG] [Thread-189095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:14:28.526 [DEBUG] [Thread-189095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:14:28.526 [DEBUG] [Thread-189095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:14:28.551 [INFO] [Thread-189095] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:14:28.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:14:29.224 [DEBUG] [Thread-189095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:14:29.224 [DEBUG] [Thread-189095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:14:29.224 [DEBUG] [Thread-189095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:14:29.265 [DEBUG] [Thread-189095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:14:29.266 [DEBUG] [Thread-189095] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:14:29.269 [DEBUG] [Thread-189095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:14:29.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:14:29.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:14:29.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:14:29.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:14:29.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:14:29.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:14:29.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:14:29.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:14:29.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:14:29.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.634828 -999.00  +15.60  25.96     45   +3.70 1 1 1 1 1   887    0 10.95 -44.32 ----- 21.4 26.0 157.2 47.2 19.1 -27.6 18.6 -26.1 20.3 -25.1 20.8 -28.7
2026-02-14T17:14:29.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:14:29.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:14:29.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.634828
2026-02-14T17:14:29.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:14:29.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:14:29.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:14:29.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:14:29.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:14:29.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:13:47', tmtdew=14.35, humidity=37.85, cloud=0.0, wind=36.51, temperature=16.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:14:09.139', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:14:29.299 [DEBUG] [Thread-189095] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:14:29.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-14T17:14:30.560 [DEBUG] [Thread-189098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:14:33.305 [DEBUG] [Thread-189099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:14:45.615 [DEBUG] [Thread-189100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:15:00.651 [DEBUG] [Thread-189101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:15:02.295 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:15:02.296 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:15:15.689 [DEBUG] [Thread-189102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:15:30.728 [DEBUG] [Thread-189103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:15:33.352 [DEBUG] [Thread-189104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:15:45.767 [DEBUG] [Thread-189105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:16:00.804 [DEBUG] [Thread-189106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:16:02.438 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:16:02.439 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:16:15.841 [DEBUG] [Thread-189107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:16:30.880 [DEBUG] [Thread-189108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:16:33.395 [DEBUG] [Thread-189109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:16:41.144 [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-14T17:16:45.917 [DEBUG] [Thread-189110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:17:00.950 [DEBUG] [Thread-189111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:17:02.578 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:17:02.579 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:17:11.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:17:11.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:17:11.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-14T17:17:13.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 16, 44), 14.31, 37.94, 0.0, 42.22, 16.09, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:17:13.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:16:44
2026-02-14T17:17:13.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:17:13.617 [DEBUG] [Thread-189112] [transport.py] [_log()] starting thread (client mode): 0xa2d7aa10
2026-02-14T17:17:13.618 [DEBUG] [Thread-189112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:17:13.638 [DEBUG] [Thread-189112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:17:13.638 [INFO] [Thread-189112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:17:13.639 [DEBUG] [Thread-189112] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:17:13.639 [DEBUG] [Thread-189112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:17:13.639 [DEBUG] [Thread-189112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:17:13.639 [DEBUG] [Thread-189112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:17:13.639 [DEBUG] [Thread-189112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:17:13.639 [DEBUG] [Thread-189112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:17:13.640 [DEBUG] [Thread-189112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:17:13.640 [DEBUG] [Thread-189112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:17:13.640 [DEBUG] [Thread-189112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:17:13.640 [DEBUG] [Thread-189112] [transport.py] [_log()] client lang: <none>
2026-02-14T17:17:13.640 [DEBUG] [Thread-189112] [transport.py] [_log()] server lang: <none>
2026-02-14T17:17:13.640 [DEBUG] [Thread-189112] [transport.py] [_log()] kex follows: False
2026-02-14T17:17:13.640 [DEBUG] [Thread-189112] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:17:13.640 [DEBUG] [Thread-189112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:17:13.640 [DEBUG] [Thread-189112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:17:13.640 [DEBUG] [Thread-189112] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:17:13.640 [DEBUG] [Thread-189112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:17:13.640 [DEBUG] [Thread-189112] [transport.py] [_log()] Compression: none
2026-02-14T17:17:13.640 [DEBUG] [Thread-189112] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:17:13.650 [DEBUG] [Thread-189112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:17:13.651 [DEBUG] [Thread-189112] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:17:13.651 [DEBUG] [Thread-189112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:17:13.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:17:13.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:17:13.653 [DEBUG] [Thread-189112] [transport.py] [_log()] userauth is OK
2026-02-14T17:17:13.653 [DEBUG] [Thread-189112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:17:13.653 [DEBUG] [Thread-189112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:17:13.653 [DEBUG] [Thread-189112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:17:13.653 [DEBUG] [Thread-189112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:17:13.672 [INFO] [Thread-189112] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:17:13.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:17:14.335 [DEBUG] [Thread-189112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:17:14.335 [DEBUG] [Thread-189112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:17:14.335 [DEBUG] [Thread-189112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:17:14.376 [DEBUG] [Thread-189112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:17:14.376 [DEBUG] [Thread-189112] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:17:14.378 [DEBUG] [Thread-189112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:17:14.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:17:14.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:17:14.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:17:14.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:17:14.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:17:14.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:17:14.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:17:14.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:17:14.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:17:14.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.636564 -999.00  +15.80  35.86     44   +3.70 1 1 2 1 1   887    0 11.11 -34.25 ----- 35.6 35.9 157.2 41.4 19.3 -28.9 19.1 -27.2 20.5 -26.1 21.2 -28.9
2026-02-14T17:17:14.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:17:14.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:17:14.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.636564
2026-02-14T17:17:14.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:17:14.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:17:14.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:17:14.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:17:14.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:17:14.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:16:44', tmtdew=14.31, humidity=37.94, cloud=0.0, wind=42.22, temperature=16.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:16:39.130', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:17:14.399 [DEBUG] [Thread-189112] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:17:14.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-14T17:17:14.483 [DEBUG] [Thread-189115] [transport.py] [_log()] starting thread (client mode): 0xa81d5690
2026-02-14T17:17:14.483 [DEBUG] [Thread-189115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:17:14.502 [DEBUG] [Thread-189115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:17:14.502 [INFO] [Thread-189115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:17:14.510 [DEBUG] [Thread-189115] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:17:14.510 [DEBUG] [Thread-189115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:17:14.510 [DEBUG] [Thread-189115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:17:14.510 [DEBUG] [Thread-189115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:17:14.510 [DEBUG] [Thread-189115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:17:14.510 [DEBUG] [Thread-189115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:17:14.510 [DEBUG] [Thread-189115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:17:14.510 [DEBUG] [Thread-189115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:17:14.510 [DEBUG] [Thread-189115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:17:14.510 [DEBUG] [Thread-189115] [transport.py] [_log()] client lang: <none>
2026-02-14T17:17:14.510 [DEBUG] [Thread-189115] [transport.py] [_log()] server lang: <none>
2026-02-14T17:17:14.510 [DEBUG] [Thread-189115] [transport.py] [_log()] kex follows: False
2026-02-14T17:17:14.510 [DEBUG] [Thread-189115] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:17:14.510 [DEBUG] [Thread-189115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:17:14.510 [DEBUG] [Thread-189115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:17:14.510 [DEBUG] [Thread-189115] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:17:14.510 [DEBUG] [Thread-189115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:17:14.510 [DEBUG] [Thread-189115] [transport.py] [_log()] Compression: none
2026-02-14T17:17:14.510 [DEBUG] [Thread-189115] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:17:14.569 [DEBUG] [Thread-189115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:17:14.569 [DEBUG] [Thread-189115] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:17:14.570 [DEBUG] [Thread-189115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:17:14.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:17:14.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:17:14.625 [DEBUG] [Thread-189115] [transport.py] [_log()] userauth is OK
2026-02-14T17:17:14.625 [DEBUG] [Thread-189115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:17:14.625 [DEBUG] [Thread-189115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:17:14.626 [DEBUG] [Thread-189115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:17:14.626 [DEBUG] [Thread-189115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:17:14.646 [INFO] [Thread-189115] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:17:14.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-14T17:17:14.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:17:15.473 [DEBUG] [Thread-189115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:17:15.474 [DEBUG] [Thread-189115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:17:15.522 [DEBUG] [Thread-189115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:17:15.522 [DEBUG] [Thread-189115] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:17:15.531 [DEBUG] [Thread-189115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:17:15.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:17:15.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-14T17:17:15.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:17:15.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:17:15.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:17:15.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:17:15.568 [DEBUG] [Thread-189115] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:17:15.990 [DEBUG] [Thread-189117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:17:31.046 [DEBUG] [Thread-189118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:17:33.440 [DEBUG] [Thread-189119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:17:45.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:17:45.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:17: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-14T17:17:46.085 [DEBUG] [Thread-189120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:17:47.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 17, 19), 14.21, 38.18, 0.0, 42.51, 16.12, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:17:47.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:17:19
2026-02-14T17:17:47.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:17:47.972 [DEBUG] [Thread-189121] [transport.py] [_log()] starting thread (client mode): 0xa5758d90
2026-02-14T17:17:47.972 [DEBUG] [Thread-189121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:17:47.993 [DEBUG] [Thread-189121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:17:47.993 [INFO] [Thread-189121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:17:47.996 [DEBUG] [Thread-189121] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:17:47.996 [DEBUG] [Thread-189121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:17:47.996 [DEBUG] [Thread-189121] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:17:47.997 [DEBUG] [Thread-189121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:17:47.997 [DEBUG] [Thread-189121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:17:47.997 [DEBUG] [Thread-189121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:17:47.997 [DEBUG] [Thread-189121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:17:47.997 [DEBUG] [Thread-189121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:17:47.997 [DEBUG] [Thread-189121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:17:47.997 [DEBUG] [Thread-189121] [transport.py] [_log()] client lang: <none>
2026-02-14T17:17:47.997 [DEBUG] [Thread-189121] [transport.py] [_log()] server lang: <none>
2026-02-14T17:17:47.997 [DEBUG] [Thread-189121] [transport.py] [_log()] kex follows: False
2026-02-14T17:17:47.997 [DEBUG] [Thread-189121] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:17:47.997 [DEBUG] [Thread-189121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:17:47.997 [DEBUG] [Thread-189121] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:17:47.997 [DEBUG] [Thread-189121] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:17:47.997 [DEBUG] [Thread-189121] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:17:47.997 [DEBUG] [Thread-189121] [transport.py] [_log()] Compression: none
2026-02-14T17:17:47.997 [DEBUG] [Thread-189121] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:17:48.014 [DEBUG] [Thread-189121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:17:48.015 [DEBUG] [Thread-189121] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:17:48.015 [DEBUG] [Thread-189121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:17:48.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:17:48.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:17:48.018 [DEBUG] [Thread-189121] [transport.py] [_log()] userauth is OK
2026-02-14T17:17:48.018 [DEBUG] [Thread-189121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:17:48.018 [DEBUG] [Thread-189121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:17:48.018 [DEBUG] [Thread-189121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:17:48.018 [DEBUG] [Thread-189121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:17:48.039 [INFO] [Thread-189121] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:17:48.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:17:48.610 [DEBUG] [Thread-189121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:17:48.611 [DEBUG] [Thread-189121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:17:48.611 [DEBUG] [Thread-189121] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:17:48.651 [DEBUG] [Thread-189121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:17:48.652 [DEBUG] [Thread-189121] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:17:48.655 [DEBUG] [Thread-189121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:17:48.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:17:48.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:17:48.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:17:48.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:17:48.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:17:48.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:17:48.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:17:48.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:17:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:17:48.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.637258 -999.00  +15.70  31.31     44   +3.70 1 1 2 1 1   887    0 11.06 -31.94 ----- 27.8 31.3 162.4 38.7 19.3 -28.4 19.1 -27.1 20.4 -25.8 21.2 -27.6
2026-02-14T17:17:48.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:17:48.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:17:48.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.637258
2026-02-14T17:17:48.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:17:48.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:17:48.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:17:48.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:17:48.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:17:48.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:17:19', tmtdew=14.21, humidity=38.18, cloud=0.0, wind=42.51, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:17:39.091', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:17:48.682 [DEBUG] [Thread-189121] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:17:48.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-14T17:17:48.779 [DEBUG] [Thread-189124] [transport.py] [_log()] starting thread (client mode): 0xa57b1270
2026-02-14T17:17:48.779 [DEBUG] [Thread-189124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:17:48.794 [DEBUG] [Thread-189124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:17:48.794 [INFO] [Thread-189124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:17:48.802 [DEBUG] [Thread-189124] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:17:48.802 [DEBUG] [Thread-189124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:17:48.802 [DEBUG] [Thread-189124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:17:48.802 [DEBUG] [Thread-189124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:17:48.802 [DEBUG] [Thread-189124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:17:48.802 [DEBUG] [Thread-189124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:17:48.803 [DEBUG] [Thread-189124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:17:48.803 [DEBUG] [Thread-189124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:17:48.803 [DEBUG] [Thread-189124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:17:48.803 [DEBUG] [Thread-189124] [transport.py] [_log()] client lang: <none>
2026-02-14T17:17:48.803 [DEBUG] [Thread-189124] [transport.py] [_log()] server lang: <none>
2026-02-14T17:17:48.803 [DEBUG] [Thread-189124] [transport.py] [_log()] kex follows: False
2026-02-14T17:17:48.803 [DEBUG] [Thread-189124] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:17:48.803 [DEBUG] [Thread-189124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:17:48.803 [DEBUG] [Thread-189124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:17:48.803 [DEBUG] [Thread-189124] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:17:48.803 [DEBUG] [Thread-189124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:17:48.803 [DEBUG] [Thread-189124] [transport.py] [_log()] Compression: none
2026-02-14T17:17:48.803 [DEBUG] [Thread-189124] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:17:48.860 [DEBUG] [Thread-189124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:17:48.861 [DEBUG] [Thread-189124] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:17:48.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:17:48.862 [DEBUG] [Thread-189124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:17:48.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:17:48.916 [DEBUG] [Thread-189124] [transport.py] [_log()] userauth is OK
2026-02-14T17:17:48.917 [DEBUG] [Thread-189124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:17:48.917 [DEBUG] [Thread-189124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:17:48.917 [DEBUG] [Thread-189124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:17:48.917 [DEBUG] [Thread-189124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:17:48.936 [INFO] [Thread-189124] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:17:48.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-14T17:17:48.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:17:49.798 [DEBUG] [Thread-189124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:17:49.798 [DEBUG] [Thread-189124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:17:49.846 [DEBUG] [Thread-189124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:17:49.846 [DEBUG] [Thread-189124] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:17:49.855 [DEBUG] [Thread-189124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:17:49.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:17:49.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')
2026-02-14T17:17:49.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:17:49.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:17:49.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:17:49.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:17:49.892 [DEBUG] [Thread-189124] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:18:01.118 [DEBUG] [Thread-189126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:18:02.721 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:18:02.722 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:18:16.161 [DEBUG] [Thread-189127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:18:19.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:18:19.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:18:19.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-14T17:18:21.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 17, 55), 14.13, 38.52, 0.0, 36.98, 15.99, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:18:21.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:17:55
2026-02-14T17:18:22.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:18:22.374 [DEBUG] [Thread-189128] [transport.py] [_log()] starting thread (client mode): 0xa57c23e0
2026-02-14T17:18:22.374 [DEBUG] [Thread-189128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:18:22.395 [DEBUG] [Thread-189128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:18:22.395 [INFO] [Thread-189128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:18:22.398 [DEBUG] [Thread-189128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:18:22.398 [DEBUG] [Thread-189128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:18:22.398 [DEBUG] [Thread-189128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:18:22.399 [DEBUG] [Thread-189128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:18:22.399 [DEBUG] [Thread-189128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:18:22.399 [DEBUG] [Thread-189128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:18:22.399 [DEBUG] [Thread-189128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:18:22.399 [DEBUG] [Thread-189128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:18:22.399 [DEBUG] [Thread-189128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:18:22.399 [DEBUG] [Thread-189128] [transport.py] [_log()] client lang: <none>
2026-02-14T17:18:22.399 [DEBUG] [Thread-189128] [transport.py] [_log()] server lang: <none>
2026-02-14T17:18:22.399 [DEBUG] [Thread-189128] [transport.py] [_log()] kex follows: False
2026-02-14T17:18:22.399 [DEBUG] [Thread-189128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:18:22.399 [DEBUG] [Thread-189128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:18:22.399 [DEBUG] [Thread-189128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:18:22.399 [DEBUG] [Thread-189128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:18:22.400 [DEBUG] [Thread-189128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:18:22.400 [DEBUG] [Thread-189128] [transport.py] [_log()] Compression: none
2026-02-14T17:18:22.400 [DEBUG] [Thread-189128] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:18:22.420 [DEBUG] [Thread-189128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:18:22.421 [DEBUG] [Thread-189128] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:18:22.422 [DEBUG] [Thread-189128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:18:22.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:18:22.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:18:22.424 [DEBUG] [Thread-189128] [transport.py] [_log()] userauth is OK
2026-02-14T17:18:22.425 [DEBUG] [Thread-189128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:18:22.425 [DEBUG] [Thread-189128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:18:22.425 [DEBUG] [Thread-189128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:18:22.425 [DEBUG] [Thread-189128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:18:22.459 [INFO] [Thread-189128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:18:22.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:18:23.116 [DEBUG] [Thread-189128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:18:23.116 [DEBUG] [Thread-189128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:18:23.116 [DEBUG] [Thread-189128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:18:23.157 [DEBUG] [Thread-189128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:18:23.157 [DEBUG] [Thread-189128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:18:23.160 [DEBUG] [Thread-189128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:18:23.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:18:23.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:18:23.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:18:23.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:18:23.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:18:23.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:18:23.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:18:23.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:18:23.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:18:23.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.637605 -999.00  +15.60  31.98     44   +3.70 1 1 2 1 1   887    0 11.07 -31.19 ----- 28.8 32.0 169.2 42.7 19.3 -28.0 18.9 -26.8 20.3 -26.3 21.1 -27.4
2026-02-14T17:18:23.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:18:23.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:18:23.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.637605
2026-02-14T17:18:23.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:18:23.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:18:23.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:18:23.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:18:23.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:18:23.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:17:55', tmtdew=14.13, humidity=38.52, cloud=0.0, wind=36.98, temperature=15.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:18:09.072', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:18:23.183 [DEBUG] [Thread-189128] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:18:23.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-14T17:18:23.278 [DEBUG] [Thread-189131] [transport.py] [_log()] starting thread (client mode): 0xa2d79de0
2026-02-14T17:18:23.278 [DEBUG] [Thread-189131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:18:23.293 [DEBUG] [Thread-189131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:18:23.293 [INFO] [Thread-189131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:18:23.300 [DEBUG] [Thread-189131] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:18:23.300 [DEBUG] [Thread-189131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:18:23.300 [DEBUG] [Thread-189131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:18:23.301 [DEBUG] [Thread-189131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:18:23.301 [DEBUG] [Thread-189131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:18:23.301 [DEBUG] [Thread-189131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:18:23.301 [DEBUG] [Thread-189131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:18:23.301 [DEBUG] [Thread-189131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:18:23.301 [DEBUG] [Thread-189131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:18:23.301 [DEBUG] [Thread-189131] [transport.py] [_log()] client lang: <none>
2026-02-14T17:18:23.301 [DEBUG] [Thread-189131] [transport.py] [_log()] server lang: <none>
2026-02-14T17:18:23.301 [DEBUG] [Thread-189131] [transport.py] [_log()] kex follows: False
2026-02-14T17:18:23.301 [DEBUG] [Thread-189131] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:18:23.301 [DEBUG] [Thread-189131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:18:23.301 [DEBUG] [Thread-189131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:18:23.301 [DEBUG] [Thread-189131] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:18:23.301 [DEBUG] [Thread-189131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:18:23.301 [DEBUG] [Thread-189131] [transport.py] [_log()] Compression: none
2026-02-14T17:18:23.301 [DEBUG] [Thread-189131] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:18:23.359 [DEBUG] [Thread-189131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:18:23.360 [DEBUG] [Thread-189131] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:18:23.360 [DEBUG] [Thread-189131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:18:23.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:18:23.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:18:23.416 [DEBUG] [Thread-189131] [transport.py] [_log()] userauth is OK
2026-02-14T17:18:23.416 [DEBUG] [Thread-189131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:18:23.416 [DEBUG] [Thread-189131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:18:23.416 [DEBUG] [Thread-189131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:18:23.416 [DEBUG] [Thread-189131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:18:23.434 [INFO] [Thread-189131] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:18:23.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-14T17:18:23.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:18:24.248 [DEBUG] [Thread-189131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:18:24.248 [DEBUG] [Thread-189131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:18:24.296 [DEBUG] [Thread-189131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:18:24.296 [DEBUG] [Thread-189131] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:18:24.304 [DEBUG] [Thread-189131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:18:24.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:18:24.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-14T17:18:24.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-14T17:18:24.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:18:24.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:18:24.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:18:24.337 [DEBUG] [Thread-189131] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:18:31.199 [DEBUG] [Thread-189133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:18:33.495 [DEBUG] [Thread-189134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:18:46.258 [DEBUG] [Thread-189135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:18:54.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:18:54.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:18:54.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-14T17:18:56.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 18, 31), 14.16, 38.47, 0.0, 33.97, 16.07, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:18:56.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:18:31
2026-02-14T17:18:57.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:18:57.341 [DEBUG] [Thread-189136] [transport.py] [_log()] starting thread (client mode): 0xa57b2d10
2026-02-14T17:18:57.341 [DEBUG] [Thread-189136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:18:57.362 [DEBUG] [Thread-189136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:18:57.362 [INFO] [Thread-189136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:18:57.365 [DEBUG] [Thread-189136] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:18:57.365 [DEBUG] [Thread-189136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:18:57.365 [DEBUG] [Thread-189136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:18:57.365 [DEBUG] [Thread-189136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:18:57.365 [DEBUG] [Thread-189136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:18:57.365 [DEBUG] [Thread-189136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:18:57.365 [DEBUG] [Thread-189136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:18:57.365 [DEBUG] [Thread-189136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:18:57.365 [DEBUG] [Thread-189136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:18:57.365 [DEBUG] [Thread-189136] [transport.py] [_log()] client lang: <none>
2026-02-14T17:18:57.365 [DEBUG] [Thread-189136] [transport.py] [_log()] server lang: <none>
2026-02-14T17:18:57.365 [DEBUG] [Thread-189136] [transport.py] [_log()] kex follows: False
2026-02-14T17:18:57.365 [DEBUG] [Thread-189136] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:18:57.365 [DEBUG] [Thread-189136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:18:57.365 [DEBUG] [Thread-189136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:18:57.365 [DEBUG] [Thread-189136] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:18:57.365 [DEBUG] [Thread-189136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:18:57.365 [DEBUG] [Thread-189136] [transport.py] [_log()] Compression: none
2026-02-14T17:18:57.366 [DEBUG] [Thread-189136] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:18:57.383 [DEBUG] [Thread-189136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:18:57.384 [DEBUG] [Thread-189136] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:18:57.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:18:57.385 [DEBUG] [Thread-189136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:18:57.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:18:57.388 [DEBUG] [Thread-189136] [transport.py] [_log()] userauth is OK
2026-02-14T17:18:57.388 [DEBUG] [Thread-189136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:18:57.388 [DEBUG] [Thread-189136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:18:57.388 [DEBUG] [Thread-189136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:18:57.388 [DEBUG] [Thread-189136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:18:57.420 [INFO] [Thread-189136] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:18:57.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:18:58.030 [DEBUG] [Thread-189136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:18:58.030 [DEBUG] [Thread-189136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:18:58.031 [DEBUG] [Thread-189136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:18:58.071 [DEBUG] [Thread-189136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:18:58.071 [DEBUG] [Thread-189136] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:18:58.074 [DEBUG] [Thread-189136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:18:58.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:18:58.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:18:58.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:18:58.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:18:58.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:18:58.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:18:58.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:18:58.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:18:58.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:18:58.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.637953 -999.00  +15.60  28.96     44   +3.70 1 1 1 1 1   887    0 11.14 -31.94 ----- 28.2 29.0 167.0 41.0 19.3 -27.6 19.0 -26.5 20.4 -26.1 21.1 -27.7
2026-02-14T17:18:58.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:18:58.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:18:58.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.637953
2026-02-14T17:18:58.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:18:58.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:18:58.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:18:58.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:18:58.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:18:58.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:18:31', tmtdew=14.16, humidity=38.47, cloud=0.0, wind=33.97, temperature=16.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:18:39.139', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:18:58.095 [DEBUG] [Thread-189136] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:18:58.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-14T17:18:58.191 [DEBUG] [Thread-189139] [transport.py] [_log()] starting thread (client mode): 0xa5770850
2026-02-14T17:18:58.192 [DEBUG] [Thread-189139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:18:58.206 [DEBUG] [Thread-189139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:18:58.207 [INFO] [Thread-189139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:18:58.214 [DEBUG] [Thread-189139] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:18:58.214 [DEBUG] [Thread-189139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:18:58.214 [DEBUG] [Thread-189139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:18:58.214 [DEBUG] [Thread-189139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:18:58.214 [DEBUG] [Thread-189139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:18:58.214 [DEBUG] [Thread-189139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:18:58.214 [DEBUG] [Thread-189139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:18:58.214 [DEBUG] [Thread-189139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:18:58.214 [DEBUG] [Thread-189139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:18:58.214 [DEBUG] [Thread-189139] [transport.py] [_log()] client lang: <none>
2026-02-14T17:18:58.214 [DEBUG] [Thread-189139] [transport.py] [_log()] server lang: <none>
2026-02-14T17:18:58.214 [DEBUG] [Thread-189139] [transport.py] [_log()] kex follows: False
2026-02-14T17:18:58.214 [DEBUG] [Thread-189139] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:18:58.214 [DEBUG] [Thread-189139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:18:58.214 [DEBUG] [Thread-189139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:18:58.214 [DEBUG] [Thread-189139] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:18:58.214 [DEBUG] [Thread-189139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:18:58.214 [DEBUG] [Thread-189139] [transport.py] [_log()] Compression: none
2026-02-14T17:18:58.214 [DEBUG] [Thread-189139] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:18:58.271 [DEBUG] [Thread-189139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:18:58.271 [DEBUG] [Thread-189139] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:18:58.271 [DEBUG] [Thread-189139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:18:58.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:18:58.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:18:58.327 [DEBUG] [Thread-189139] [transport.py] [_log()] userauth is OK
2026-02-14T17:18:58.327 [DEBUG] [Thread-189139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:18:58.327 [DEBUG] [Thread-189139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:18:58.327 [DEBUG] [Thread-189139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:18:58.328 [DEBUG] [Thread-189139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:18:58.341 [INFO] [Thread-189139] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:18:58.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-14T17:18:58.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:18:59.159 [DEBUG] [Thread-189139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:18:59.160 [DEBUG] [Thread-189139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:18:59.207 [DEBUG] [Thread-189139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:18:59.207 [DEBUG] [Thread-189139] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:18:59.216 [DEBUG] [Thread-189139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:18:59.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:18:59.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-14T17:18:59.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-14T17:18:59.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:18:59.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:18:59.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:18:59.254 [DEBUG] [Thread-189139] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:19:01.294 [DEBUG] [Thread-189141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:19:02.862 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:19:02.863 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:19:16.347 [DEBUG] [Thread-189142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:19:29.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:19:29.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:19:29.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-14T17:19:31.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 19, 6), 14.31, 38.14, 0.0, 38.96, 16.25, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:19:31.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:19:06
2026-02-14T17:19:31.383 [DEBUG] [Thread-189143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:19:31.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:19:31.924 [DEBUG] [Thread-189144] [transport.py] [_log()] starting thread (client mode): 0xa5770f10
2026-02-14T17:19:31.924 [DEBUG] [Thread-189144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:19:31.944 [DEBUG] [Thread-189144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:19:31.944 [INFO] [Thread-189144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:19:31.947 [DEBUG] [Thread-189144] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:19:31.947 [DEBUG] [Thread-189144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:19:31.947 [DEBUG] [Thread-189144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:19:31.947 [DEBUG] [Thread-189144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:19:31.947 [DEBUG] [Thread-189144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:19:31.947 [DEBUG] [Thread-189144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:19:31.948 [DEBUG] [Thread-189144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:19:31.948 [DEBUG] [Thread-189144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:19:31.948 [DEBUG] [Thread-189144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:19:31.948 [DEBUG] [Thread-189144] [transport.py] [_log()] client lang: <none>
2026-02-14T17:19:31.948 [DEBUG] [Thread-189144] [transport.py] [_log()] server lang: <none>
2026-02-14T17:19:31.948 [DEBUG] [Thread-189144] [transport.py] [_log()] kex follows: False
2026-02-14T17:19:31.948 [DEBUG] [Thread-189144] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:19:31.948 [DEBUG] [Thread-189144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:19:31.948 [DEBUG] [Thread-189144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:19:31.948 [DEBUG] [Thread-189144] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:19:31.948 [DEBUG] [Thread-189144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:19:31.948 [DEBUG] [Thread-189144] [transport.py] [_log()] Compression: none
2026-02-14T17:19:31.948 [DEBUG] [Thread-189144] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:19:31.966 [DEBUG] [Thread-189144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:19:31.966 [DEBUG] [Thread-189144] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:19:31.967 [DEBUG] [Thread-189144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:19:31.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:19:31.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:19:31.969 [DEBUG] [Thread-189144] [transport.py] [_log()] userauth is OK
2026-02-14T17:19:31.970 [DEBUG] [Thread-189144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:19:31.970 [DEBUG] [Thread-189144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:19:31.970 [DEBUG] [Thread-189144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:19:31.970 [DEBUG] [Thread-189144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:19:32.007 [INFO] [Thread-189144] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:19:32.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:19:32.651 [DEBUG] [Thread-189144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:19:32.652 [DEBUG] [Thread-189144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:19:32.652 [DEBUG] [Thread-189144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:19:32.692 [DEBUG] [Thread-189144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:19:32.693 [DEBUG] [Thread-189144] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:19:32.696 [DEBUG] [Thread-189144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:19:32.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:19:32.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:19:32.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:19:32.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:19:32.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:19:32.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:19:32.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:19:32.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:19:32.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:19:32.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.638300 -999.00  +15.70  30.28     44   +3.80 1 1 2 1 1   887    0 11.30 -32.74 ----- 24.1 30.3 161.2 31.5 19.4 -28.1 19.0 -26.6 20.5 -25.3 21.1 -27.9
2026-02-14T17:19:32.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:19:32.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:19:32.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.638300
2026-02-14T17:19:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:19:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:19:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:19:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:19:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:19:32.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:19:06', tmtdew=14.31, humidity=38.14, cloud=0.0, wind=38.96, temperature=16.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:19:09.120', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:19:32.725 [DEBUG] [Thread-189144] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:19:32.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-14T17:19:32.821 [DEBUG] [Thread-189147] [transport.py] [_log()] starting thread (client mode): 0xa2db49a0
2026-02-14T17:19:32.821 [DEBUG] [Thread-189147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:19:32.835 [DEBUG] [Thread-189147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:19:32.835 [INFO] [Thread-189147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:19:32.843 [DEBUG] [Thread-189147] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:19:32.843 [DEBUG] [Thread-189147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:19:32.844 [DEBUG] [Thread-189147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:19:32.844 [DEBUG] [Thread-189147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:19:32.844 [DEBUG] [Thread-189147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:19:32.844 [DEBUG] [Thread-189147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:19:32.844 [DEBUG] [Thread-189147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:19:32.844 [DEBUG] [Thread-189147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:19:32.845 [DEBUG] [Thread-189147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:19:32.845 [DEBUG] [Thread-189147] [transport.py] [_log()] client lang: <none>
2026-02-14T17:19:32.845 [DEBUG] [Thread-189147] [transport.py] [_log()] server lang: <none>
2026-02-14T17:19:32.845 [DEBUG] [Thread-189147] [transport.py] [_log()] kex follows: False
2026-02-14T17:19:32.845 [DEBUG] [Thread-189147] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:19:32.845 [DEBUG] [Thread-189147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:19:32.845 [DEBUG] [Thread-189147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:19:32.845 [DEBUG] [Thread-189147] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:19:32.845 [DEBUG] [Thread-189147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:19:32.845 [DEBUG] [Thread-189147] [transport.py] [_log()] Compression: none
2026-02-14T17:19:32.845 [DEBUG] [Thread-189147] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:19:32.902 [DEBUG] [Thread-189147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:19:32.902 [DEBUG] [Thread-189147] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:19:32.903 [DEBUG] [Thread-189147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:19:32.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:19:32.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:19:32.959 [DEBUG] [Thread-189147] [transport.py] [_log()] userauth is OK
2026-02-14T17:19:32.959 [DEBUG] [Thread-189147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:19:32.959 [DEBUG] [Thread-189147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:19:32.959 [DEBUG] [Thread-189147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:19:32.959 [DEBUG] [Thread-189147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:19:32.981 [INFO] [Thread-189147] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:19:32.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-14T17:19:32.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:19:33.523 [DEBUG] [Thread-189149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:19:33.774 [DEBUG] [Thread-189147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:19:33.775 [DEBUG] [Thread-189147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:19:33.822 [DEBUG] [Thread-189147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:19:33.822 [DEBUG] [Thread-189147] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:19:33.830 [DEBUG] [Thread-189147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:19:33.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:19:33.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-14T17:19:33.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-14T17:19:33.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:19:33.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:19:33.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:19:33.863 [DEBUG] [Thread-189147] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:19:46.420 [DEBUG] [Thread-189150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:20:01.478 [DEBUG] [Thread-189151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:20:03.003 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:20:03.004 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:20:03.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:20:03.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:20:03.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-14T17:20:05.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 19, 42), 15.36, 35.57, 0.0, 42.76, 17.31, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:20:05.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:19:42
2026-02-14T17:20:06.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:20:06.331 [DEBUG] [Thread-189152] [transport.py] [_log()] starting thread (client mode): 0xa81d5fc0
2026-02-14T17:20:06.331 [DEBUG] [Thread-189152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:20:06.350 [DEBUG] [Thread-189152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:20:06.350 [INFO] [Thread-189152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:20:06.353 [DEBUG] [Thread-189152] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:20:06.354 [DEBUG] [Thread-189152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:20:06.354 [DEBUG] [Thread-189152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:20:06.354 [DEBUG] [Thread-189152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:20:06.354 [DEBUG] [Thread-189152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:20:06.354 [DEBUG] [Thread-189152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:20:06.354 [DEBUG] [Thread-189152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:20:06.354 [DEBUG] [Thread-189152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:20:06.354 [DEBUG] [Thread-189152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:20:06.354 [DEBUG] [Thread-189152] [transport.py] [_log()] client lang: <none>
2026-02-14T17:20:06.354 [DEBUG] [Thread-189152] [transport.py] [_log()] server lang: <none>
2026-02-14T17:20:06.354 [DEBUG] [Thread-189152] [transport.py] [_log()] kex follows: False
2026-02-14T17:20:06.354 [DEBUG] [Thread-189152] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:20:06.354 [DEBUG] [Thread-189152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:20:06.354 [DEBUG] [Thread-189152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:20:06.354 [DEBUG] [Thread-189152] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:20:06.354 [DEBUG] [Thread-189152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:20:06.354 [DEBUG] [Thread-189152] [transport.py] [_log()] Compression: none
2026-02-14T17:20:06.354 [DEBUG] [Thread-189152] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:20:06.361 [DEBUG] [Thread-189152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:20:06.362 [DEBUG] [Thread-189152] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:20:06.362 [DEBUG] [Thread-189152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:20:06.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:20:06.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:20:06.363 [DEBUG] [Thread-189152] [transport.py] [_log()] userauth is OK
2026-02-14T17:20:06.363 [DEBUG] [Thread-189152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:20:06.363 [DEBUG] [Thread-189152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:20:06.363 [DEBUG] [Thread-189152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:20:06.363 [DEBUG] [Thread-189152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:20:06.375 [INFO] [Thread-189152] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:20:06.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:20:07.285 [DEBUG] [Thread-189152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:20:07.285 [DEBUG] [Thread-189152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:20:07.286 [DEBUG] [Thread-189152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:20:07.326 [DEBUG] [Thread-189152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:20:07.327 [DEBUG] [Thread-189152] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:20:07.330 [DEBUG] [Thread-189152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:20:07.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:20:07.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:20:07.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:20:07.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:20:07.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:20:07.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:20:07.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:20:07.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:20:07.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:20:07.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.638647 -999.00  +15.70  26.86     44   +3.70 1 1 1 1 1   887    0 11.31 -27.06 ----- 24.1 26.9 161.4 44.5 19.3 -28.1 18.9 -26.7 20.4 -26.5 21.0 -29.2
2026-02-14T17:20:07.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:20:07.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:20:07.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.638647
2026-02-14T17:20:07.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:20:07.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:20:07.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:20:07.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:20:07.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:20:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:19:42', tmtdew=15.36, humidity=35.57, cloud=0.0, wind=42.76, temperature=17.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:19:39.101', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:20:07.359 [DEBUG] [Thread-189152] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:20:07.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-14T17:20:07.454 [DEBUG] [Thread-189155] [transport.py] [_log()] starting thread (client mode): 0xa5758eb0
2026-02-14T17:20:07.454 [DEBUG] [Thread-189155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:20:07.474 [DEBUG] [Thread-189155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:20:07.474 [INFO] [Thread-189155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:20:07.481 [DEBUG] [Thread-189155] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:20:07.482 [DEBUG] [Thread-189155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:20:07.482 [DEBUG] [Thread-189155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:20:07.482 [DEBUG] [Thread-189155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:20:07.482 [DEBUG] [Thread-189155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:20:07.482 [DEBUG] [Thread-189155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:20:07.482 [DEBUG] [Thread-189155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:20:07.482 [DEBUG] [Thread-189155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:20:07.482 [DEBUG] [Thread-189155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:20:07.483 [DEBUG] [Thread-189155] [transport.py] [_log()] client lang: <none>
2026-02-14T17:20:07.483 [DEBUG] [Thread-189155] [transport.py] [_log()] server lang: <none>
2026-02-14T17:20:07.483 [DEBUG] [Thread-189155] [transport.py] [_log()] kex follows: False
2026-02-14T17:20:07.483 [DEBUG] [Thread-189155] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:20:07.483 [DEBUG] [Thread-189155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:20:07.483 [DEBUG] [Thread-189155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:20:07.483 [DEBUG] [Thread-189155] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:20:07.484 [DEBUG] [Thread-189155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:20:07.484 [DEBUG] [Thread-189155] [transport.py] [_log()] Compression: none
2026-02-14T17:20:07.484 [DEBUG] [Thread-189155] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:20:07.543 [DEBUG] [Thread-189155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:20:07.543 [DEBUG] [Thread-189155] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:20:07.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:20:07.545 [DEBUG] [Thread-189155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:20:07.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:20:07.600 [DEBUG] [Thread-189155] [transport.py] [_log()] userauth is OK
2026-02-14T17:20:07.600 [DEBUG] [Thread-189155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:20:07.600 [DEBUG] [Thread-189155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:20:07.600 [DEBUG] [Thread-189155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:20:07.600 [DEBUG] [Thread-189155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:20:07.619 [INFO] [Thread-189155] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:20:07.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-14T17:20:07.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:20:08.490 [DEBUG] [Thread-189155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:20:08.491 [DEBUG] [Thread-189155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:20:08.538 [DEBUG] [Thread-189155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:20:08.539 [DEBUG] [Thread-189155] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:20:08.547 [DEBUG] [Thread-189155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:20:08.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:20: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-14T17:20:08.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:20:08.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:20:08.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:20:08.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:20:08.588 [DEBUG] [Thread-189155] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:20:16.519 [DEBUG] [Thread-189157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:20:31.580 [DEBUG] [Thread-189158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:20:33.562 [DEBUG] [Thread-189159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:20:38.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:20:38.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:20:38.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-14T17:20:40.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 20, 17), 14.29, 38.0, 0.0, 40.6, 16.14, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:20:40.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:20:17
2026-02-14T17:20:40.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:20:40.872 [DEBUG] [Thread-189160] [transport.py] [_log()] starting thread (client mode): 0xa575ab30
2026-02-14T17:20:40.872 [DEBUG] [Thread-189160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:20:40.891 [DEBUG] [Thread-189160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:20:40.892 [INFO] [Thread-189160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:20:40.895 [DEBUG] [Thread-189160] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:20:40.895 [DEBUG] [Thread-189160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:20:40.895 [DEBUG] [Thread-189160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:20:40.895 [DEBUG] [Thread-189160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:20:40.895 [DEBUG] [Thread-189160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:20:40.895 [DEBUG] [Thread-189160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:20:40.895 [DEBUG] [Thread-189160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:20:40.895 [DEBUG] [Thread-189160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:20:40.895 [DEBUG] [Thread-189160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:20:40.895 [DEBUG] [Thread-189160] [transport.py] [_log()] client lang: <none>
2026-02-14T17:20:40.895 [DEBUG] [Thread-189160] [transport.py] [_log()] server lang: <none>
2026-02-14T17:20:40.895 [DEBUG] [Thread-189160] [transport.py] [_log()] kex follows: False
2026-02-14T17:20:40.895 [DEBUG] [Thread-189160] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:20:40.895 [DEBUG] [Thread-189160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:20:40.895 [DEBUG] [Thread-189160] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:20:40.895 [DEBUG] [Thread-189160] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:20:40.895 [DEBUG] [Thread-189160] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:20:40.895 [DEBUG] [Thread-189160] [transport.py] [_log()] Compression: none
2026-02-14T17:20:40.895 [DEBUG] [Thread-189160] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:20:40.903 [DEBUG] [Thread-189160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:20:40.904 [DEBUG] [Thread-189160] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:20:40.904 [DEBUG] [Thread-189160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:20:40.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:20:40.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:20:40.906 [DEBUG] [Thread-189160] [transport.py] [_log()] userauth is OK
2026-02-14T17:20:40.906 [DEBUG] [Thread-189160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:20:40.906 [DEBUG] [Thread-189160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:20:40.906 [DEBUG] [Thread-189160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:20:40.906 [DEBUG] [Thread-189160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:20:40.923 [INFO] [Thread-189160] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:20:40.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:20:41.558 [DEBUG] [Thread-189160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:20:41.559 [DEBUG] [Thread-189160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:20:41.559 [DEBUG] [Thread-189160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:20:41.599 [DEBUG] [Thread-189160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:20:41.599 [DEBUG] [Thread-189160] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:20:41.602 [DEBUG] [Thread-189160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:20:41.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:20:41.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:20:41.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:20:41.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:20:41.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:20:41.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:20:41.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:20:41.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:20:41.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:20:41.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.638994 -999.00  +15.60  31.82     44   +3.60 1 1 2 1 1   887    0 11.44 -25.18 ----- 28.3 31.8 163.8 40.5 19.2 -28.4 18.9 -26.9 20.4 -26.7 21.1 -28.8
2026-02-14T17:20:41.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:20:41.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:20:41.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.638994
2026-02-14T17:20:41.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:20:41.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:20:41.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:20:41.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:20:41.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:20:41.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:20:17', tmtdew=14.29, humidity=38.0, cloud=0.0, wind=40.6, temperature=16.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:20:09.082', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:20:41.631 [DEBUG] [Thread-189160] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:20:41.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-14T17:20:41.728 [DEBUG] [Thread-189163] [transport.py] [_log()] starting thread (client mode): 0xa57c3ee0
2026-02-14T17:20:41.728 [DEBUG] [Thread-189163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:20:41.743 [DEBUG] [Thread-189163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:20:41.743 [INFO] [Thread-189163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:20:41.750 [DEBUG] [Thread-189163] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:20:41.751 [DEBUG] [Thread-189163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:20:41.751 [DEBUG] [Thread-189163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:20:41.751 [DEBUG] [Thread-189163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:20:41.751 [DEBUG] [Thread-189163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:20:41.751 [DEBUG] [Thread-189163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:20:41.751 [DEBUG] [Thread-189163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:20:41.751 [DEBUG] [Thread-189163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:20:41.751 [DEBUG] [Thread-189163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:20:41.751 [DEBUG] [Thread-189163] [transport.py] [_log()] client lang: <none>
2026-02-14T17:20:41.751 [DEBUG] [Thread-189163] [transport.py] [_log()] server lang: <none>
2026-02-14T17:20:41.751 [DEBUG] [Thread-189163] [transport.py] [_log()] kex follows: False
2026-02-14T17:20:41.751 [DEBUG] [Thread-189163] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:20:41.751 [DEBUG] [Thread-189163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:20:41.751 [DEBUG] [Thread-189163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:20:41.751 [DEBUG] [Thread-189163] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:20:41.752 [DEBUG] [Thread-189163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:20:41.752 [DEBUG] [Thread-189163] [transport.py] [_log()] Compression: none
2026-02-14T17:20:41.752 [DEBUG] [Thread-189163] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:20:41.811 [DEBUG] [Thread-189163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:20:41.812 [DEBUG] [Thread-189163] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:20:41.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:20:41.813 [DEBUG] [Thread-189163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:20:41.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:20:41.867 [DEBUG] [Thread-189163] [transport.py] [_log()] userauth is OK
2026-02-14T17:20:41.867 [DEBUG] [Thread-189163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:20:41.868 [DEBUG] [Thread-189163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:20:41.868 [DEBUG] [Thread-189163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:20:41.868 [DEBUG] [Thread-189163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:20:41.891 [INFO] [Thread-189163] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:20:41.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-14T17:20:41.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:20:42.694 [DEBUG] [Thread-189163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:20:42.694 [DEBUG] [Thread-189163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:20:42.742 [DEBUG] [Thread-189163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:20:42.743 [DEBUG] [Thread-189163] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:20:42.752 [DEBUG] [Thread-189163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:20:42.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:20:42.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-14T17:20:42.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-14T17:20:42.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:20:42.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:20:42.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:20:42.788 [DEBUG] [Thread-189163] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:20:46.621 [DEBUG] [Thread-189165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:21:01.672 [DEBUG] [Thread-189166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:21:03.144 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:21:03.145 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:21:12.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:21:12.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:21:12.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-14T17:21:15.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 20, 53), 14.04, 38.83, 0.0, 32.87, 15.95, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:21:15.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:20:53
2026-02-14T17:21:15.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:21:15.684 [DEBUG] [Thread-189167] [transport.py] [_log()] starting thread (client mode): 0xa5770df0
2026-02-14T17:21:15.685 [DEBUG] [Thread-189167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:21:15.706 [DEBUG] [Thread-189167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:21:15.706 [INFO] [Thread-189167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:21:15.709 [DEBUG] [Thread-189167] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:21:15.709 [DEBUG] [Thread-189167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:21:15.709 [DEBUG] [Thread-189167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:21:15.709 [DEBUG] [Thread-189167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:21:15.710 [DEBUG] [Thread-189167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:21:15.710 [DEBUG] [Thread-189167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:21:15.710 [DEBUG] [Thread-189167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:21:15.710 [DEBUG] [Thread-189167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:21:15.710 [DEBUG] [Thread-189167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:21:15.710 [DEBUG] [Thread-189167] [transport.py] [_log()] client lang: <none>
2026-02-14T17:21:15.710 [DEBUG] [Thread-189167] [transport.py] [_log()] server lang: <none>
2026-02-14T17:21:15.710 [DEBUG] [Thread-189167] [transport.py] [_log()] kex follows: False
2026-02-14T17:21:15.710 [DEBUG] [Thread-189167] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:21:15.710 [DEBUG] [Thread-189167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:21:15.710 [DEBUG] [Thread-189167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:21:15.710 [DEBUG] [Thread-189167] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:21:15.710 [DEBUG] [Thread-189167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:21:15.710 [DEBUG] [Thread-189167] [transport.py] [_log()] Compression: none
2026-02-14T17:21:15.710 [DEBUG] [Thread-189167] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:21:15.726 [DEBUG] [Thread-189167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:21:15.726 [DEBUG] [Thread-189167] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:21:15.727 [DEBUG] [Thread-189167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:21:15.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:21:15.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:21:15.729 [DEBUG] [Thread-189167] [transport.py] [_log()] userauth is OK
2026-02-14T17:21:15.730 [DEBUG] [Thread-189167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:21:15.730 [DEBUG] [Thread-189167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:21:15.730 [DEBUG] [Thread-189167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:21:15.730 [DEBUG] [Thread-189167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:21:15.765 [INFO] [Thread-189167] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:21:15.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:21:16.402 [DEBUG] [Thread-189167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:21:16.403 [DEBUG] [Thread-189167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:21:16.403 [DEBUG] [Thread-189167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:21:16.443 [DEBUG] [Thread-189167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:21:16.443 [DEBUG] [Thread-189167] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:21:16.447 [DEBUG] [Thread-189167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:21:16.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:21:16.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:21:16.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:21:16.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:21:16.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:21:16.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:21:16.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:21:16.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:21:16.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:21:16.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.639342 -999.00  +15.50  32.38     45   +3.70 1 1 2 1 1   887    0 11.32 -27.87 ----- 23.3 32.4 159.7 44.3 19.2 -28.3 18.9 -26.6 20.2 -26.6 21.0 -28.3
2026-02-14T17:21:16.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:21:16.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:21:16.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.639342
2026-02-14T17:21:16.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:21:16.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:21:16.472 [DEBUG] [Thread-189167] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:21:16.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:21:16.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:21:16.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:21:16.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:20:53', tmtdew=14.04, humidity=38.83, cloud=0.0, wind=32.87, temperature=15.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:20:39.149', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:21:16.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-14T17:21:16.567 [DEBUG] [Thread-189170] [transport.py] [_log()] starting thread (client mode): 0xa2db4a30
2026-02-14T17:21:16.567 [DEBUG] [Thread-189170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:21:16.581 [DEBUG] [Thread-189170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:21:16.581 [INFO] [Thread-189170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:21:16.589 [DEBUG] [Thread-189170] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:21:16.589 [DEBUG] [Thread-189170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:21:16.589 [DEBUG] [Thread-189170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:21:16.589 [DEBUG] [Thread-189170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:21:16.589 [DEBUG] [Thread-189170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:21:16.590 [DEBUG] [Thread-189170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:21:16.590 [DEBUG] [Thread-189170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:21:16.590 [DEBUG] [Thread-189170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:21:16.590 [DEBUG] [Thread-189170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:21:16.590 [DEBUG] [Thread-189170] [transport.py] [_log()] client lang: <none>
2026-02-14T17:21:16.590 [DEBUG] [Thread-189170] [transport.py] [_log()] server lang: <none>
2026-02-14T17:21:16.590 [DEBUG] [Thread-189170] [transport.py] [_log()] kex follows: False
2026-02-14T17:21:16.590 [DEBUG] [Thread-189170] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:21:16.590 [DEBUG] [Thread-189170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:21:16.590 [DEBUG] [Thread-189170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:21:16.590 [DEBUG] [Thread-189170] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:21:16.590 [DEBUG] [Thread-189170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:21:16.590 [DEBUG] [Thread-189170] [transport.py] [_log()] Compression: none
2026-02-14T17:21:16.590 [DEBUG] [Thread-189170] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:21:16.649 [DEBUG] [Thread-189170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:21:16.650 [DEBUG] [Thread-189170] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:21:16.650 [DEBUG] [Thread-189170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:21:16.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:21:16.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:21:16.705 [DEBUG] [Thread-189172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:21:16.706 [DEBUG] [Thread-189170] [transport.py] [_log()] userauth is OK
2026-02-14T17:21:16.706 [DEBUG] [Thread-189170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:21:16.707 [DEBUG] [Thread-189170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:21:16.707 [DEBUG] [Thread-189170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:21:16.707 [DEBUG] [Thread-189170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:21:16.725 [INFO] [Thread-189170] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:21:16.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-14T17:21:16.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:21:17.534 [DEBUG] [Thread-189170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:21:17.534 [DEBUG] [Thread-189170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:21:17.582 [DEBUG] [Thread-189170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:21:17.582 [DEBUG] [Thread-189170] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:21:17.591 [DEBUG] [Thread-189170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:21:17.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:21:17.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-14T17:21:17.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:21:17.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:21:17.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:21:17.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:21:17.626 [DEBUG] [Thread-189170] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:21:31.754 [DEBUG] [Thread-189173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:21:33.595 [DEBUG] [Thread-189174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:21:46.793 [DEBUG] [Thread-189175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:21:47.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:21:47.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:21:47.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-14T17:21:49.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 21, 29), 14.11, 38.67, 0.0, 31.72, 15.97, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:21:49.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:21:29
2026-02-14T17:21:49.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:21:49.983 [DEBUG] [Thread-189176] [transport.py] [_log()] starting thread (client mode): 0xa2d02e30
2026-02-14T17:21:49.983 [DEBUG] [Thread-189176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:21:50.003 [DEBUG] [Thread-189176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:21:50.003 [INFO] [Thread-189176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:21:50.006 [DEBUG] [Thread-189176] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:21:50.006 [DEBUG] [Thread-189176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:21:50.006 [DEBUG] [Thread-189176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:21:50.006 [DEBUG] [Thread-189176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:21:50.006 [DEBUG] [Thread-189176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:21:50.006 [DEBUG] [Thread-189176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:21:50.006 [DEBUG] [Thread-189176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:21:50.006 [DEBUG] [Thread-189176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:21:50.006 [DEBUG] [Thread-189176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:21:50.006 [DEBUG] [Thread-189176] [transport.py] [_log()] client lang: <none>
2026-02-14T17:21:50.006 [DEBUG] [Thread-189176] [transport.py] [_log()] server lang: <none>
2026-02-14T17:21:50.006 [DEBUG] [Thread-189176] [transport.py] [_log()] kex follows: False
2026-02-14T17:21:50.006 [DEBUG] [Thread-189176] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:21:50.006 [DEBUG] [Thread-189176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:21:50.006 [DEBUG] [Thread-189176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:21:50.006 [DEBUG] [Thread-189176] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:21:50.006 [DEBUG] [Thread-189176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:21:50.006 [DEBUG] [Thread-189176] [transport.py] [_log()] Compression: none
2026-02-14T17:21:50.006 [DEBUG] [Thread-189176] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:21:50.024 [DEBUG] [Thread-189176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:21:50.024 [DEBUG] [Thread-189176] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:21:50.024 [DEBUG] [Thread-189176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:21:50.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:21:50.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:21:50.027 [DEBUG] [Thread-189176] [transport.py] [_log()] userauth is OK
2026-02-14T17:21:50.027 [DEBUG] [Thread-189176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:21:50.027 [DEBUG] [Thread-189176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:21:50.027 [DEBUG] [Thread-189176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:21:50.027 [DEBUG] [Thread-189176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:21:50.063 [INFO] [Thread-189176] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:21:50.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:21:50.714 [DEBUG] [Thread-189176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:21:50.714 [DEBUG] [Thread-189176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:21:50.714 [DEBUG] [Thread-189176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:21:50.755 [DEBUG] [Thread-189176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:21:50.755 [DEBUG] [Thread-189176] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:21:50.758 [DEBUG] [Thread-189176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:21:50.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:21:50.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:21:50.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:21:50.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:21:50.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:21:50.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:21:50.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:21:50.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:21:50.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:21:50.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.639689 -999.00  +15.70  26.45     44   +3.70 1 1 1 1 1   887    0 11.43 -28.88 ----- 31.9 26.4 185.0 35.6 19.1 -28.3 18.6 -29.4 20.2 -25.9 20.9 -27.9
2026-02-14T17:21:50.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:21:50.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:21:50.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.639689
2026-02-14T17:21:50.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:21:50.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:21:50.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:21:50.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:21:50.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:21:50.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:21:29', tmtdew=14.11, humidity=38.67, cloud=0.0, wind=31.72, temperature=15.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:21:09.130', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:21:50.784 [DEBUG] [Thread-189176] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:21:50.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-14T17:21:50.880 [DEBUG] [Thread-189179] [transport.py] [_log()] starting thread (client mode): 0xa2db7d00
2026-02-14T17:21:50.880 [DEBUG] [Thread-189179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:21:50.895 [DEBUG] [Thread-189179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:21:50.895 [INFO] [Thread-189179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:21:50.903 [DEBUG] [Thread-189179] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:21:50.903 [DEBUG] [Thread-189179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:21:50.903 [DEBUG] [Thread-189179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:21:50.903 [DEBUG] [Thread-189179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:21:50.904 [DEBUG] [Thread-189179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:21:50.904 [DEBUG] [Thread-189179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:21:50.904 [DEBUG] [Thread-189179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:21:50.904 [DEBUG] [Thread-189179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:21:50.904 [DEBUG] [Thread-189179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:21:50.904 [DEBUG] [Thread-189179] [transport.py] [_log()] client lang: <none>
2026-02-14T17:21:50.904 [DEBUG] [Thread-189179] [transport.py] [_log()] server lang: <none>
2026-02-14T17:21:50.904 [DEBUG] [Thread-189179] [transport.py] [_log()] kex follows: False
2026-02-14T17:21:50.904 [DEBUG] [Thread-189179] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:21:50.904 [DEBUG] [Thread-189179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:21:50.904 [DEBUG] [Thread-189179] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:21:50.904 [DEBUG] [Thread-189179] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:21:50.904 [DEBUG] [Thread-189179] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:21:50.904 [DEBUG] [Thread-189179] [transport.py] [_log()] Compression: none
2026-02-14T17:21:50.905 [DEBUG] [Thread-189179] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:21:50.962 [DEBUG] [Thread-189179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:21:50.963 [DEBUG] [Thread-189179] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:21:50.963 [DEBUG] [Thread-189179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:21:50.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:21:50.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:21:51.022 [DEBUG] [Thread-189179] [transport.py] [_log()] userauth is OK
2026-02-14T17:21:51.023 [DEBUG] [Thread-189179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:21:51.023 [DEBUG] [Thread-189179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:21:51.023 [DEBUG] [Thread-189179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:21:51.023 [DEBUG] [Thread-189179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:21:51.046 [INFO] [Thread-189179] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:21:51.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-14T17:21:51.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:21:51.874 [DEBUG] [Thread-189179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:21:51.875 [DEBUG] [Thread-189179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:21:51.922 [DEBUG] [Thread-189179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:21:51.922 [DEBUG] [Thread-189179] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:21:51.931 [DEBUG] [Thread-189179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:21:51.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:21:51.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-14T17:21:51.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-14T17:21:51.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:21:51.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:21:51.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:21:51.972 [DEBUG] [Thread-189179] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:22:01.832 [DEBUG] [Thread-189181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:22:03.289 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:22:03.289 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:22:16.884 [DEBUG] [Thread-189182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:22:21.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:22:21.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:22:22.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-14T17:22:23.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 22, 5), 14.19, 38.52, 0.0, 33.54, 16.15, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:22:23.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:22:05
2026-02-14T17:22:24.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:22:24.607 [DEBUG] [Thread-189183] [transport.py] [_log()] starting thread (client mode): 0xa81d5780
2026-02-14T17:22:24.608 [DEBUG] [Thread-189183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:22:24.622 [DEBUG] [Thread-189183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:22:24.622 [INFO] [Thread-189183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:22:24.625 [DEBUG] [Thread-189183] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:22:24.626 [DEBUG] [Thread-189183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:22:24.626 [DEBUG] [Thread-189183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:22:24.626 [DEBUG] [Thread-189183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:22:24.626 [DEBUG] [Thread-189183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:22:24.626 [DEBUG] [Thread-189183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:22:24.626 [DEBUG] [Thread-189183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:22:24.626 [DEBUG] [Thread-189183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:22:24.626 [DEBUG] [Thread-189183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:22:24.626 [DEBUG] [Thread-189183] [transport.py] [_log()] client lang: <none>
2026-02-14T17:22:24.626 [DEBUG] [Thread-189183] [transport.py] [_log()] server lang: <none>
2026-02-14T17:22:24.626 [DEBUG] [Thread-189183] [transport.py] [_log()] kex follows: False
2026-02-14T17:22:24.626 [DEBUG] [Thread-189183] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:22:24.626 [DEBUG] [Thread-189183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:22:24.626 [DEBUG] [Thread-189183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:22:24.626 [DEBUG] [Thread-189183] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:22:24.627 [DEBUG] [Thread-189183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:22:24.627 [DEBUG] [Thread-189183] [transport.py] [_log()] Compression: none
2026-02-14T17:22:24.627 [DEBUG] [Thread-189183] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:22:24.642 [DEBUG] [Thread-189183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:22:24.643 [DEBUG] [Thread-189183] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:22:24.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:22:24.644 [DEBUG] [Thread-189183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:22:24.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:22:24.684 [DEBUG] [Thread-189183] [transport.py] [_log()] userauth is OK
2026-02-14T17:22:24.685 [DEBUG] [Thread-189183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:22:24.685 [DEBUG] [Thread-189183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:22:24.685 [DEBUG] [Thread-189183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:22:24.685 [DEBUG] [Thread-189183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:22:24.714 [INFO] [Thread-189183] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:22:24.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:22:25.540 [DEBUG] [Thread-189183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:22:25.540 [DEBUG] [Thread-189183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:22:25.541 [DEBUG] [Thread-189183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:22:25.582 [DEBUG] [Thread-189183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:22:25.582 [DEBUG] [Thread-189183] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:22:25.584 [DEBUG] [Thread-189183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:22:25.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:22:25.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:22:25.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:22:25.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:22:25.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:22:25.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:22:25.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:22:25.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:22:25.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:22:25.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.640036 -999.00  +15.60  31.20     45   +3.80 1 1 2 1 1   887    0 11.50 -27.44 ----- 29.8 31.2 171.2 38.0 19.1 -27.6 18.6 -28.2 20.1 -26.7 20.9 -28.1
2026-02-14T17:22:25.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:22:25.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:22:25.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.640036
2026-02-14T17:22:25.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:22:25.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:22:25.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:22:25.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:22:25.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:22:25.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:22:05', tmtdew=14.19, humidity=38.52, cloud=0.0, wind=33.54, temperature=16.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:21:39.110', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:22:25.610 [DEBUG] [Thread-189183] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:22:25.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-14T17:22:25.706 [DEBUG] [Thread-189186] [transport.py] [_log()] starting thread (client mode): 0xa81d5ae0
2026-02-14T17:22:25.706 [DEBUG] [Thread-189186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:22:25.726 [DEBUG] [Thread-189186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:22:25.726 [INFO] [Thread-189186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:22:25.734 [DEBUG] [Thread-189186] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:22:25.734 [DEBUG] [Thread-189186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:22:25.734 [DEBUG] [Thread-189186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:22:25.734 [DEBUG] [Thread-189186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:22:25.734 [DEBUG] [Thread-189186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:22:25.735 [DEBUG] [Thread-189186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:22:25.735 [DEBUG] [Thread-189186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:22:25.735 [DEBUG] [Thread-189186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:22:25.735 [DEBUG] [Thread-189186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:22:25.735 [DEBUG] [Thread-189186] [transport.py] [_log()] client lang: <none>
2026-02-14T17:22:25.735 [DEBUG] [Thread-189186] [transport.py] [_log()] server lang: <none>
2026-02-14T17:22:25.735 [DEBUG] [Thread-189186] [transport.py] [_log()] kex follows: False
2026-02-14T17:22:25.735 [DEBUG] [Thread-189186] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:22:25.735 [DEBUG] [Thread-189186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:22:25.735 [DEBUG] [Thread-189186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:22:25.735 [DEBUG] [Thread-189186] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:22:25.735 [DEBUG] [Thread-189186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:22:25.735 [DEBUG] [Thread-189186] [transport.py] [_log()] Compression: none
2026-02-14T17:22:25.735 [DEBUG] [Thread-189186] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:22:25.795 [DEBUG] [Thread-189186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:22:25.795 [DEBUG] [Thread-189186] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:22:25.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:22:25.797 [DEBUG] [Thread-189186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:22:25.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:22:25.850 [DEBUG] [Thread-189186] [transport.py] [_log()] userauth is OK
2026-02-14T17:22:25.851 [DEBUG] [Thread-189186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:22:25.851 [DEBUG] [Thread-189186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:22:25.852 [DEBUG] [Thread-189186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:22:25.852 [DEBUG] [Thread-189186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:22:25.871 [INFO] [Thread-189186] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:22:25.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-14T17:22:25.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:22:26.715 [DEBUG] [Thread-189186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:22:26.715 [DEBUG] [Thread-189186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:22:26.763 [DEBUG] [Thread-189186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:22:26.763 [DEBUG] [Thread-189186] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:22:26.772 [DEBUG] [Thread-189186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:22:26.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:22:26.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-14T17:22:26.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-14T17:22:26.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:22:26.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:22:26.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:22:26.808 [DEBUG] [Thread-189186] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:22:31.921 [DEBUG] [Thread-189188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:22:33.641 [DEBUG] [Thread-189189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:22:46.986 [DEBUG] [Thread-189190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:22:56.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:22:56.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:22:56.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-14T17:22:59.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 22, 41), 15.14, 36.1, 0.0, 40.4, 17.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:22:59.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:22:41
2026-02-14T17:22:59.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:22:59.783 [DEBUG] [Thread-189191] [transport.py] [_log()] starting thread (client mode): 0xa2db5c60
2026-02-14T17:22:59.783 [DEBUG] [Thread-189191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:22:59.803 [DEBUG] [Thread-189191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:22:59.803 [INFO] [Thread-189191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:22:59.806 [DEBUG] [Thread-189191] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:22:59.806 [DEBUG] [Thread-189191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:22:59.806 [DEBUG] [Thread-189191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:22:59.806 [DEBUG] [Thread-189191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:22:59.806 [DEBUG] [Thread-189191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:22:59.806 [DEBUG] [Thread-189191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:22:59.806 [DEBUG] [Thread-189191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:22:59.806 [DEBUG] [Thread-189191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:22:59.806 [DEBUG] [Thread-189191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:22:59.806 [DEBUG] [Thread-189191] [transport.py] [_log()] client lang: <none>
2026-02-14T17:22:59.806 [DEBUG] [Thread-189191] [transport.py] [_log()] server lang: <none>
2026-02-14T17:22:59.806 [DEBUG] [Thread-189191] [transport.py] [_log()] kex follows: False
2026-02-14T17:22:59.806 [DEBUG] [Thread-189191] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:22:59.806 [DEBUG] [Thread-189191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:22:59.806 [DEBUG] [Thread-189191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:22:59.806 [DEBUG] [Thread-189191] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:22:59.806 [DEBUG] [Thread-189191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:22:59.806 [DEBUG] [Thread-189191] [transport.py] [_log()] Compression: none
2026-02-14T17:22:59.806 [DEBUG] [Thread-189191] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:22:59.823 [DEBUG] [Thread-189191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:22:59.823 [DEBUG] [Thread-189191] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:22:59.823 [DEBUG] [Thread-189191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:22:59.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:22:59.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:22:59.869 [DEBUG] [Thread-189191] [transport.py] [_log()] userauth is OK
2026-02-14T17:22:59.869 [DEBUG] [Thread-189191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:22:59.869 [DEBUG] [Thread-189191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:22:59.869 [DEBUG] [Thread-189191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:22:59.870 [DEBUG] [Thread-189191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:22:59.902 [INFO] [Thread-189191] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:22:59.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:23:00.553 [DEBUG] [Thread-189191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:23:00.554 [DEBUG] [Thread-189191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:23:00.554 [DEBUG] [Thread-189191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:23:00.594 [DEBUG] [Thread-189191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:23:00.594 [DEBUG] [Thread-189191] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:23:00.597 [DEBUG] [Thread-189191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:23:00.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:23:00.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:23:00.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:23:00.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:23:00.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:23:00.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:23:00.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:23:00.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:23:00.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:23:00.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.640383 -999.00  +15.50  30.19     45   +3.80 1 1 2 1 1   887    0 11.28 -29.07 ----- 31.6 30.2 171.4 41.9 19.1 -28.1 18.8 -26.5 20.3 -25.3 20.9 -29.7
2026-02-14T17:23:00.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:23:00.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:23:00.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.640383
2026-02-14T17:23:00.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:23:00.619 [DEBUG] [Thread-189191] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:23:00.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:23:00.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:23:00.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:23:00.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:23:00.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:22:41', tmtdew=15.14, humidity=36.1, cloud=0.0, wind=40.4, temperature=17.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:22:09.091', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:23:00.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-14T17:23:00.716 [DEBUG] [Thread-189194] [transport.py] [_log()] starting thread (client mode): 0xa2db5db0
2026-02-14T17:23:00.716 [DEBUG] [Thread-189194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:23:00.731 [DEBUG] [Thread-189194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:23:00.731 [INFO] [Thread-189194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:23:00.739 [DEBUG] [Thread-189194] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:23:00.739 [DEBUG] [Thread-189194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:23:00.739 [DEBUG] [Thread-189194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:23:00.739 [DEBUG] [Thread-189194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:23:00.739 [DEBUG] [Thread-189194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:23:00.739 [DEBUG] [Thread-189194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:23:00.739 [DEBUG] [Thread-189194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:23:00.739 [DEBUG] [Thread-189194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:23:00.739 [DEBUG] [Thread-189194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:23:00.739 [DEBUG] [Thread-189194] [transport.py] [_log()] client lang: <none>
2026-02-14T17:23:00.739 [DEBUG] [Thread-189194] [transport.py] [_log()] server lang: <none>
2026-02-14T17:23:00.739 [DEBUG] [Thread-189194] [transport.py] [_log()] kex follows: False
2026-02-14T17:23:00.739 [DEBUG] [Thread-189194] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:23:00.739 [DEBUG] [Thread-189194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:23:00.740 [DEBUG] [Thread-189194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:23:00.740 [DEBUG] [Thread-189194] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:23:00.740 [DEBUG] [Thread-189194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:23:00.740 [DEBUG] [Thread-189194] [transport.py] [_log()] Compression: none
2026-02-14T17:23:00.740 [DEBUG] [Thread-189194] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:23:00.798 [DEBUG] [Thread-189194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:23:00.799 [DEBUG] [Thread-189194] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:23:00.800 [DEBUG] [Thread-189194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:23:00.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:23:00.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:23:00.854 [DEBUG] [Thread-189194] [transport.py] [_log()] userauth is OK
2026-02-14T17:23:00.855 [DEBUG] [Thread-189194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:23:00.855 [DEBUG] [Thread-189194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:23:00.855 [DEBUG] [Thread-189194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:23:00.855 [DEBUG] [Thread-189194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:23:00.874 [INFO] [Thread-189194] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:23:00.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T17:23:00.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:23:01.715 [DEBUG] [Thread-189194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:23:01.715 [DEBUG] [Thread-189194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:23:01.763 [DEBUG] [Thread-189194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:23:01.763 [DEBUG] [Thread-189194] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:23:01.773 [DEBUG] [Thread-189194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:23:01.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:23:01.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-14T17:23:01.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:23:01.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:23:01.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:23:01.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:23:01.809 [DEBUG] [Thread-189194] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:23:02.021 [DEBUG] [Thread-189196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:23:03.428 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:23:03.429 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:23:17.072 [DEBUG] [Thread-189197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:23:31.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:23:31.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:23:31.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-14T17:23:32.105 [DEBUG] [Thread-189198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:23:33.698 [DEBUG] [Thread-189199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:23:33.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 23, 16), 13.61, 39.78, 0.0, 32.02, 15.67, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:23:33.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:23:16
2026-02-14T17:23:34.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:23:34.446 [DEBUG] [Thread-189200] [transport.py] [_log()] starting thread (client mode): 0xa57594e0
2026-02-14T17:23:34.446 [DEBUG] [Thread-189200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:23:34.467 [DEBUG] [Thread-189200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:23:34.467 [INFO] [Thread-189200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:23:34.470 [DEBUG] [Thread-189200] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:23:34.470 [DEBUG] [Thread-189200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:23:34.470 [DEBUG] [Thread-189200] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:23:34.470 [DEBUG] [Thread-189200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:23:34.470 [DEBUG] [Thread-189200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:23:34.470 [DEBUG] [Thread-189200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:23:34.470 [DEBUG] [Thread-189200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:23:34.470 [DEBUG] [Thread-189200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:23:34.470 [DEBUG] [Thread-189200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:23:34.470 [DEBUG] [Thread-189200] [transport.py] [_log()] client lang: <none>
2026-02-14T17:23:34.470 [DEBUG] [Thread-189200] [transport.py] [_log()] server lang: <none>
2026-02-14T17:23:34.470 [DEBUG] [Thread-189200] [transport.py] [_log()] kex follows: False
2026-02-14T17:23:34.470 [DEBUG] [Thread-189200] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:23:34.470 [DEBUG] [Thread-189200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:23:34.470 [DEBUG] [Thread-189200] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:23:34.470 [DEBUG] [Thread-189200] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:23:34.470 [DEBUG] [Thread-189200] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:23:34.470 [DEBUG] [Thread-189200] [transport.py] [_log()] Compression: none
2026-02-14T17:23:34.470 [DEBUG] [Thread-189200] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:23:34.487 [DEBUG] [Thread-189200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:23:34.488 [DEBUG] [Thread-189200] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:23:34.488 [DEBUG] [Thread-189200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:23:34.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:23:34.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:23:34.490 [DEBUG] [Thread-189200] [transport.py] [_log()] userauth is OK
2026-02-14T17:23:34.490 [DEBUG] [Thread-189200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:23:34.490 [DEBUG] [Thread-189200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:23:34.490 [DEBUG] [Thread-189200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:23:34.490 [DEBUG] [Thread-189200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:23:34.511 [INFO] [Thread-189200] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:23:34.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:23:35.150 [DEBUG] [Thread-189200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:23:35.151 [DEBUG] [Thread-189200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:23:35.151 [DEBUG] [Thread-189200] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:23:35.192 [DEBUG] [Thread-189200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:23:35.192 [DEBUG] [Thread-189200] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:23:35.194 [DEBUG] [Thread-189200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:23:35.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:23:35.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:23:35.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:23:35.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:23:35.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:23:35.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:23:35.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:23:35.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:23:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:23:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.641078 -999.00  +15.50  20.42     45   +3.90 1 1 1 1 1   887    0 10.87 -29.61 ----- 24.5 20.4 166.4 36.8 19.1 -27.6 18.8 -28.2 20.2 -25.4 20.9 -27.6
2026-02-14T17:23:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:23:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:23:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.641078
2026-02-14T17:23:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:23:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:23:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:23:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:23:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:23:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:23:16', tmtdew=13.61, humidity=39.78, cloud=0.0, wind=32.02, temperature=15.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:23:09.139', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:23:35.217 [DEBUG] [Thread-189200] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:23:35.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-14T17:23:35.301 [DEBUG] [Thread-189203] [transport.py] [_log()] starting thread (client mode): 0xa2db68c0
2026-02-14T17:23:35.301 [DEBUG] [Thread-189203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:23:35.317 [DEBUG] [Thread-189203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:23:35.317 [INFO] [Thread-189203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:23:35.325 [DEBUG] [Thread-189203] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:23:35.325 [DEBUG] [Thread-189203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:23:35.325 [DEBUG] [Thread-189203] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:23:35.325 [DEBUG] [Thread-189203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:23:35.325 [DEBUG] [Thread-189203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:23:35.325 [DEBUG] [Thread-189203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:23:35.325 [DEBUG] [Thread-189203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:23:35.325 [DEBUG] [Thread-189203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:23:35.325 [DEBUG] [Thread-189203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:23:35.325 [DEBUG] [Thread-189203] [transport.py] [_log()] client lang: <none>
2026-02-14T17:23:35.325 [DEBUG] [Thread-189203] [transport.py] [_log()] server lang: <none>
2026-02-14T17:23:35.325 [DEBUG] [Thread-189203] [transport.py] [_log()] kex follows: False
2026-02-14T17:23:35.325 [DEBUG] [Thread-189203] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:23:35.325 [DEBUG] [Thread-189203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:23:35.325 [DEBUG] [Thread-189203] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:23:35.325 [DEBUG] [Thread-189203] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:23:35.325 [DEBUG] [Thread-189203] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:23:35.325 [DEBUG] [Thread-189203] [transport.py] [_log()] Compression: none
2026-02-14T17:23:35.325 [DEBUG] [Thread-189203] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:23:35.382 [DEBUG] [Thread-189203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:23:35.383 [DEBUG] [Thread-189203] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:23:35.383 [DEBUG] [Thread-189203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:23:35.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:23:35.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:23:35.440 [DEBUG] [Thread-189203] [transport.py] [_log()] userauth is OK
2026-02-14T17:23:35.441 [DEBUG] [Thread-189203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:23:35.441 [DEBUG] [Thread-189203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:23:35.441 [DEBUG] [Thread-189203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:23:35.441 [DEBUG] [Thread-189203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:23:35.460 [INFO] [Thread-189203] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:23:35.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-14T17:23:35.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:23:36.282 [DEBUG] [Thread-189203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:23:36.282 [DEBUG] [Thread-189203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:23:36.330 [DEBUG] [Thread-189203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:23:36.331 [DEBUG] [Thread-189203] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:23:36.342 [DEBUG] [Thread-189203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:23:36.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:23:36.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-14T17:23:36.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-14T17:23:36.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:23:36.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:23:36.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:23:36.380 [DEBUG] [Thread-189203] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:23:47.141 [DEBUG] [Thread-189205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:24:02.190 [DEBUG] [Thread-189206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:24:03.570 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:24:03.571 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:24:06.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:24:06.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:24:06.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-14T17:24:08.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 23, 52), 13.72, 39.42, 0.0, 31.34, 15.9, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:24:08.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:23:52
2026-02-14T17:24:08.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:24:08.783 [DEBUG] [Thread-189207] [transport.py] [_log()] starting thread (client mode): 0xa2db67a0
2026-02-14T17:24:08.783 [DEBUG] [Thread-189207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:24:08.803 [DEBUG] [Thread-189207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:24:08.803 [INFO] [Thread-189207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:24:08.806 [DEBUG] [Thread-189207] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:24:08.806 [DEBUG] [Thread-189207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:24:08.806 [DEBUG] [Thread-189207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:24:08.806 [DEBUG] [Thread-189207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:24:08.806 [DEBUG] [Thread-189207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:24:08.806 [DEBUG] [Thread-189207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:24:08.806 [DEBUG] [Thread-189207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:24:08.807 [DEBUG] [Thread-189207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:24:08.807 [DEBUG] [Thread-189207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:24:08.807 [DEBUG] [Thread-189207] [transport.py] [_log()] client lang: <none>
2026-02-14T17:24:08.807 [DEBUG] [Thread-189207] [transport.py] [_log()] server lang: <none>
2026-02-14T17:24:08.807 [DEBUG] [Thread-189207] [transport.py] [_log()] kex follows: False
2026-02-14T17:24:08.807 [DEBUG] [Thread-189207] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:24:08.807 [DEBUG] [Thread-189207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:24:08.807 [DEBUG] [Thread-189207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:24:08.807 [DEBUG] [Thread-189207] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:24:08.807 [DEBUG] [Thread-189207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:24:08.807 [DEBUG] [Thread-189207] [transport.py] [_log()] Compression: none
2026-02-14T17:24:08.807 [DEBUG] [Thread-189207] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:24:08.827 [DEBUG] [Thread-189207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:24:08.827 [DEBUG] [Thread-189207] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:24:08.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:24:08.828 [DEBUG] [Thread-189207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:24:08.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:24:08.869 [DEBUG] [Thread-189207] [transport.py] [_log()] userauth is OK
2026-02-14T17:24:08.869 [DEBUG] [Thread-189207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:24:08.869 [DEBUG] [Thread-189207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:24:08.869 [DEBUG] [Thread-189207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:24:08.869 [DEBUG] [Thread-189207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:24:08.895 [INFO] [Thread-189207] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:24:08.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:24:09.543 [DEBUG] [Thread-189207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:24:09.543 [DEBUG] [Thread-189207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:24:09.543 [DEBUG] [Thread-189207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:24:09.584 [DEBUG] [Thread-189207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:24:09.585 [DEBUG] [Thread-189207] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:24:09.588 [DEBUG] [Thread-189207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:24:09.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:24:09.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:24:09.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:24:09.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:24:09.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:24:09.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:24:09.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:24:09.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:24:09.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:24:09.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.641425 -999.00  +15.60  24.86     45   +3.80 1 1 1 1 1   887    0 10.78 -31.75 ----- 31.7 24.9 157.4 36.6 19.1 -28.0 18.9 -26.9 20.3 -25.6 21.0 -27.0
2026-02-14T17:24:09.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:24:09.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:24:09.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.641425
2026-02-14T17:24:09.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:24:09.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:24:09.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:24:09.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:24:09.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:24:09.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:23:52', tmtdew=13.72, humidity=39.42, cloud=0.0, wind=31.34, temperature=15.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:23:39.120', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:24:09.616 [DEBUG] [Thread-189207] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:24:09.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T17:24:09.711 [DEBUG] [Thread-189210] [transport.py] [_log()] starting thread (client mode): 0xa5770400
2026-02-14T17:24:09.711 [DEBUG] [Thread-189210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:24:09.725 [DEBUG] [Thread-189210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:24:09.725 [INFO] [Thread-189210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:24:09.732 [DEBUG] [Thread-189210] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:24:09.733 [DEBUG] [Thread-189210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:24:09.733 [DEBUG] [Thread-189210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:24:09.733 [DEBUG] [Thread-189210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:24:09.733 [DEBUG] [Thread-189210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:24:09.733 [DEBUG] [Thread-189210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:24:09.733 [DEBUG] [Thread-189210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:24:09.733 [DEBUG] [Thread-189210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:24:09.733 [DEBUG] [Thread-189210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:24:09.733 [DEBUG] [Thread-189210] [transport.py] [_log()] client lang: <none>
2026-02-14T17:24:09.733 [DEBUG] [Thread-189210] [transport.py] [_log()] server lang: <none>
2026-02-14T17:24:09.733 [DEBUG] [Thread-189210] [transport.py] [_log()] kex follows: False
2026-02-14T17:24:09.733 [DEBUG] [Thread-189210] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:24:09.733 [DEBUG] [Thread-189210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:24:09.733 [DEBUG] [Thread-189210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:24:09.733 [DEBUG] [Thread-189210] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:24:09.733 [DEBUG] [Thread-189210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:24:09.733 [DEBUG] [Thread-189210] [transport.py] [_log()] Compression: none
2026-02-14T17:24:09.733 [DEBUG] [Thread-189210] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:24:09.789 [DEBUG] [Thread-189210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:24:09.790 [DEBUG] [Thread-189210] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:24:09.791 [DEBUG] [Thread-189210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:24:09.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:24:09.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:24:09.846 [DEBUG] [Thread-189210] [transport.py] [_log()] userauth is OK
2026-02-14T17:24:09.846 [DEBUG] [Thread-189210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:24:09.846 [DEBUG] [Thread-189210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:24:09.847 [DEBUG] [Thread-189210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:24:09.847 [DEBUG] [Thread-189210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:24:09.866 [INFO] [Thread-189210] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:24:09.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-14T17:24:09.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:24:10.656 [DEBUG] [Thread-189210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:24:10.657 [DEBUG] [Thread-189210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:24:10.704 [DEBUG] [Thread-189210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:24:10.704 [DEBUG] [Thread-189210] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:24:10.713 [DEBUG] [Thread-189210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:24:10.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:24:10.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-14T17:24:10.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-14T17:24:10.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:24:10.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:24:10.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:24:10.748 [DEBUG] [Thread-189210] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:24:17.225 [DEBUG] [Thread-189212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:24:32.276 [DEBUG] [Thread-189213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:24:33.731 [DEBUG] [Thread-189214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:24:40.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:24:40.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:24:40.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-14T17:24:42.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 24, 27), 13.82, 39.17, 0.0, 34.72, 15.95, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:24:42.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:24:27
2026-02-14T17:24:42.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:24:42.990 [DEBUG] [Thread-189215] [transport.py] [_log()] starting thread (client mode): 0xa57c1270
2026-02-14T17:24:42.990 [DEBUG] [Thread-189215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:24:43.010 [DEBUG] [Thread-189215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:24:43.010 [INFO] [Thread-189215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:24:43.014 [DEBUG] [Thread-189215] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:24:43.014 [DEBUG] [Thread-189215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:24:43.014 [DEBUG] [Thread-189215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:24:43.014 [DEBUG] [Thread-189215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:24:43.014 [DEBUG] [Thread-189215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:24:43.014 [DEBUG] [Thread-189215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:24:43.014 [DEBUG] [Thread-189215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:24:43.014 [DEBUG] [Thread-189215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:24:43.014 [DEBUG] [Thread-189215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:24:43.014 [DEBUG] [Thread-189215] [transport.py] [_log()] client lang: <none>
2026-02-14T17:24:43.014 [DEBUG] [Thread-189215] [transport.py] [_log()] server lang: <none>
2026-02-14T17:24:43.014 [DEBUG] [Thread-189215] [transport.py] [_log()] kex follows: False
2026-02-14T17:24:43.014 [DEBUG] [Thread-189215] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:24:43.015 [DEBUG] [Thread-189215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:24:43.015 [DEBUG] [Thread-189215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:24:43.015 [DEBUG] [Thread-189215] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:24:43.015 [DEBUG] [Thread-189215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:24:43.015 [DEBUG] [Thread-189215] [transport.py] [_log()] Compression: none
2026-02-14T17:24:43.015 [DEBUG] [Thread-189215] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:24:43.032 [DEBUG] [Thread-189215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:24:43.032 [DEBUG] [Thread-189215] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:24:43.033 [DEBUG] [Thread-189215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:24:43.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:24:43.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:24:43.035 [DEBUG] [Thread-189215] [transport.py] [_log()] userauth is OK
2026-02-14T17:24:43.035 [DEBUG] [Thread-189215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:24:43.035 [DEBUG] [Thread-189215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:24:43.035 [DEBUG] [Thread-189215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:24:43.035 [DEBUG] [Thread-189215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:24:43.058 [INFO] [Thread-189215] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:24:43.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:24:43.712 [DEBUG] [Thread-189215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:24:43.712 [DEBUG] [Thread-189215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:24:43.713 [DEBUG] [Thread-189215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:24:43.753 [DEBUG] [Thread-189215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:24:43.754 [DEBUG] [Thread-189215] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:24:43.757 [DEBUG] [Thread-189215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:24:43.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:24:43.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:24:43.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:24:43.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:24:43.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:24:43.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:24:43.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:24:43.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:24:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:24:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.641772 -999.00  +15.50  31.31     45   +3.70 1 1 2 1 1   887    0 11.07 -33.36 ----- 29.1 31.3 168.4 43.5 19.1 -28.2 18.8 -26.6 20.2 -26.5 20.9 -27.8
2026-02-14T17:24:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:24:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:24:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.641772
2026-02-14T17:24:43.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:24:43.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:24:43.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:24:43.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:24:43.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:24:43.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:24:27', tmtdew=13.82, humidity=39.17, cloud=0.0, wind=34.72, temperature=15.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:24:09.101', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:24:43.788 [DEBUG] [Thread-189215] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:24:43.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T17:24:43.884 [DEBUG] [Thread-189218] [transport.py] [_log()] starting thread (client mode): 0xa2dc14b0
2026-02-14T17:24:43.884 [DEBUG] [Thread-189218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:24:43.898 [DEBUG] [Thread-189218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:24:43.898 [INFO] [Thread-189218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:24:43.905 [DEBUG] [Thread-189218] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:24:43.905 [DEBUG] [Thread-189218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:24:43.906 [DEBUG] [Thread-189218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:24:43.906 [DEBUG] [Thread-189218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:24:43.906 [DEBUG] [Thread-189218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:24:43.906 [DEBUG] [Thread-189218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:24:43.906 [DEBUG] [Thread-189218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:24:43.906 [DEBUG] [Thread-189218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:24:43.906 [DEBUG] [Thread-189218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:24:43.906 [DEBUG] [Thread-189218] [transport.py] [_log()] client lang: <none>
2026-02-14T17:24:43.906 [DEBUG] [Thread-189218] [transport.py] [_log()] server lang: <none>
2026-02-14T17:24:43.906 [DEBUG] [Thread-189218] [transport.py] [_log()] kex follows: False
2026-02-14T17:24:43.906 [DEBUG] [Thread-189218] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:24:43.906 [DEBUG] [Thread-189218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:24:43.906 [DEBUG] [Thread-189218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:24:43.906 [DEBUG] [Thread-189218] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:24:43.906 [DEBUG] [Thread-189218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:24:43.906 [DEBUG] [Thread-189218] [transport.py] [_log()] Compression: none
2026-02-14T17:24:43.906 [DEBUG] [Thread-189218] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:24:43.965 [DEBUG] [Thread-189218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:24:43.966 [DEBUG] [Thread-189218] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:24:43.966 [DEBUG] [Thread-189218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:24:43.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:24:43.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:24:44.021 [DEBUG] [Thread-189218] [transport.py] [_log()] userauth is OK
2026-02-14T17:24:44.022 [DEBUG] [Thread-189218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:24:44.022 [DEBUG] [Thread-189218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:24:44.022 [DEBUG] [Thread-189218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:24:44.022 [DEBUG] [Thread-189218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:24:44.044 [INFO] [Thread-189218] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:24:44.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-14T17:24:44.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:24:44.868 [DEBUG] [Thread-189218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:24:44.868 [DEBUG] [Thread-189218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:24:44.916 [DEBUG] [Thread-189218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:24:44.917 [DEBUG] [Thread-189218] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:24:44.926 [DEBUG] [Thread-189218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:24:44.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:24:44.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-14T17:24:44.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-14T17:24:44.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:24:44.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:24:44.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:24:44.962 [DEBUG] [Thread-189218] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:24:47.315 [DEBUG] [Thread-189220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:25:02.364 [DEBUG] [Thread-189221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:25:03.718 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:25:03.719 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:25:14.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:25:14.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:25:14.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-14T17:25:17.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 25, 3), 13.76, 39.3, 0.0, 34.67, 15.87, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:25:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:25:03
2026-02-14T17:25:17.398 [DEBUG] [Thread-189222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:25:17.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:25:17.913 [DEBUG] [Thread-189223] [transport.py] [_log()] starting thread (client mode): 0xa57584f0
2026-02-14T17:25:17.913 [DEBUG] [Thread-189223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:25:17.933 [DEBUG] [Thread-189223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:25:17.933 [INFO] [Thread-189223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:25:17.937 [DEBUG] [Thread-189223] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:25:17.937 [DEBUG] [Thread-189223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:25:17.937 [DEBUG] [Thread-189223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:25:17.937 [DEBUG] [Thread-189223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:25:17.937 [DEBUG] [Thread-189223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:25:17.937 [DEBUG] [Thread-189223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:25:17.937 [DEBUG] [Thread-189223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:25:17.937 [DEBUG] [Thread-189223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:25:17.937 [DEBUG] [Thread-189223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:25:17.937 [DEBUG] [Thread-189223] [transport.py] [_log()] client lang: <none>
2026-02-14T17:25:17.937 [DEBUG] [Thread-189223] [transport.py] [_log()] server lang: <none>
2026-02-14T17:25:17.937 [DEBUG] [Thread-189223] [transport.py] [_log()] kex follows: False
2026-02-14T17:25:17.937 [DEBUG] [Thread-189223] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:25:17.937 [DEBUG] [Thread-189223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:25:17.937 [DEBUG] [Thread-189223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:25:17.937 [DEBUG] [Thread-189223] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:25:17.937 [DEBUG] [Thread-189223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:25:17.937 [DEBUG] [Thread-189223] [transport.py] [_log()] Compression: none
2026-02-14T17:25:17.937 [DEBUG] [Thread-189223] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:25:17.959 [DEBUG] [Thread-189223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:25:17.959 [DEBUG] [Thread-189223] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:25:17.960 [DEBUG] [Thread-189223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:25:17.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:25:17.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:25:17.962 [DEBUG] [Thread-189223] [transport.py] [_log()] userauth is OK
2026-02-14T17:25:17.963 [DEBUG] [Thread-189223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:25:17.963 [DEBUG] [Thread-189223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:25:17.963 [DEBUG] [Thread-189223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:25:17.963 [DEBUG] [Thread-189223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:25:17.986 [INFO] [Thread-189223] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:25:17.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:25:19.158 [DEBUG] [Thread-189223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:25:19.159 [DEBUG] [Thread-189223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:25:19.159 [DEBUG] [Thread-189223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:25:19.200 [DEBUG] [Thread-189223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:25:19.200 [DEBUG] [Thread-189223] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:25:19.204 [DEBUG] [Thread-189223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:25:19.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:25:19.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:25:19.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:25:19.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:25:19.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:25:19.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:25:19.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:25:19.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:25:19.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:25:19.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.642119 -999.00  +15.50  23.16     45   +3.80 1 1 1 1 1   887    0 10.93 -32.75 ----- 33.1 23.2 171.8 38.2 19.1 -28.0 18.8 -27.9 20.3 -26.2 20.9 -27.6
2026-02-14T17:25:19.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:25:19.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:25:19.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.642119
2026-02-14T17:25:19.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:25:19.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:25:19.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:25:19.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:25:19.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:25:19.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:25:03', tmtdew=13.76, humidity=39.3, cloud=0.0, wind=34.67, temperature=15.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:24:39.082', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:25:19.230 [DEBUG] [Thread-189223] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:25:19.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-14T17:25:19.325 [DEBUG] [Thread-189226] [transport.py] [_log()] starting thread (client mode): 0xa5773d60
2026-02-14T17:25:19.325 [DEBUG] [Thread-189226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:25:19.340 [DEBUG] [Thread-189226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:25:19.340 [INFO] [Thread-189226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:25:19.348 [DEBUG] [Thread-189226] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:25:19.348 [DEBUG] [Thread-189226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:25:19.348 [DEBUG] [Thread-189226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:25:19.348 [DEBUG] [Thread-189226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:25:19.348 [DEBUG] [Thread-189226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:25:19.348 [DEBUG] [Thread-189226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:25:19.348 [DEBUG] [Thread-189226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:25:19.349 [DEBUG] [Thread-189226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:25:19.349 [DEBUG] [Thread-189226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:25:19.349 [DEBUG] [Thread-189226] [transport.py] [_log()] client lang: <none>
2026-02-14T17:25:19.349 [DEBUG] [Thread-189226] [transport.py] [_log()] server lang: <none>
2026-02-14T17:25:19.349 [DEBUG] [Thread-189226] [transport.py] [_log()] kex follows: False
2026-02-14T17:25:19.349 [DEBUG] [Thread-189226] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:25:19.349 [DEBUG] [Thread-189226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:25:19.349 [DEBUG] [Thread-189226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:25:19.349 [DEBUG] [Thread-189226] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:25:19.349 [DEBUG] [Thread-189226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:25:19.350 [DEBUG] [Thread-189226] [transport.py] [_log()] Compression: none
2026-02-14T17:25:19.350 [DEBUG] [Thread-189226] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:25:19.405 [DEBUG] [Thread-189226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:25:19.406 [DEBUG] [Thread-189226] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:25:19.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:25:19.407 [DEBUG] [Thread-189226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:25:19.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:25:19.462 [DEBUG] [Thread-189226] [transport.py] [_log()] userauth is OK
2026-02-14T17:25:19.462 [DEBUG] [Thread-189226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:25:19.462 [DEBUG] [Thread-189226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:25:19.462 [DEBUG] [Thread-189226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:25:19.462 [DEBUG] [Thread-189226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:25:19.481 [INFO] [Thread-189226] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:25:19.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-14T17:25:19.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:25:20.300 [DEBUG] [Thread-189226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:25:20.300 [DEBUG] [Thread-189226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:25:20.348 [DEBUG] [Thread-189226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:25:20.348 [DEBUG] [Thread-189226] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:25:20.357 [DEBUG] [Thread-189226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:25:20.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:25:20.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-14T17:25:20.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-14T17:25:20.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:25:20.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:25:20.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:25:20.394 [DEBUG] [Thread-189226] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:25:32.431 [DEBUG] [Thread-189228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:25:33.771 [DEBUG] [Thread-189229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:25:47.481 [DEBUG] [Thread-189230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:25:50.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:25:50.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:25:50.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-14T17:25:52.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 25, 38), 15.06, 36.27, 0.0, 41.18, 17.04, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:25:52.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:25:38
2026-02-14T17:25:52.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:25:52.812 [DEBUG] [Thread-189231] [transport.py] [_log()] starting thread (client mode): 0xa5772aa0
2026-02-14T17:25:52.812 [DEBUG] [Thread-189231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:25:52.834 [DEBUG] [Thread-189231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:25:52.834 [INFO] [Thread-189231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:25:52.838 [DEBUG] [Thread-189231] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:25:52.838 [DEBUG] [Thread-189231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:25:52.838 [DEBUG] [Thread-189231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:25:52.838 [DEBUG] [Thread-189231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:25:52.838 [DEBUG] [Thread-189231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:25:52.838 [DEBUG] [Thread-189231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:25:52.838 [DEBUG] [Thread-189231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:25:52.838 [DEBUG] [Thread-189231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:25:52.838 [DEBUG] [Thread-189231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:25:52.838 [DEBUG] [Thread-189231] [transport.py] [_log()] client lang: <none>
2026-02-14T17:25:52.838 [DEBUG] [Thread-189231] [transport.py] [_log()] server lang: <none>
2026-02-14T17:25:52.838 [DEBUG] [Thread-189231] [transport.py] [_log()] kex follows: False
2026-02-14T17:25:52.838 [DEBUG] [Thread-189231] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:25:52.838 [DEBUG] [Thread-189231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:25:52.838 [DEBUG] [Thread-189231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:25:52.839 [DEBUG] [Thread-189231] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:25:52.839 [DEBUG] [Thread-189231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:25:52.839 [DEBUG] [Thread-189231] [transport.py] [_log()] Compression: none
2026-02-14T17:25:52.839 [DEBUG] [Thread-189231] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:25:52.855 [DEBUG] [Thread-189231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:25:52.856 [DEBUG] [Thread-189231] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:25:52.856 [DEBUG] [Thread-189231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:25:52.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:25:52.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:25:52.859 [DEBUG] [Thread-189231] [transport.py] [_log()] userauth is OK
2026-02-14T17:25:52.859 [DEBUG] [Thread-189231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:25:52.859 [DEBUG] [Thread-189231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:25:52.859 [DEBUG] [Thread-189231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:25:52.859 [DEBUG] [Thread-189231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:25:52.877 [INFO] [Thread-189231] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:25:52.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:25:53.547 [DEBUG] [Thread-189231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:25:53.547 [DEBUG] [Thread-189231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:25:53.547 [DEBUG] [Thread-189231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:25:53.587 [DEBUG] [Thread-189231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:25:53.588 [DEBUG] [Thread-189231] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:25:53.591 [DEBUG] [Thread-189231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:25:53.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:25:53.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:25:53.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:25:53.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:25:53.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:25:53.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:25:53.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:25:53.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:25:53.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:25:53.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.642466 -999.00  +15.60  24.83     45   +3.70 1 1 1 1 1   887    0 10.93 -31.33 ----- 23.1 24.8 164.0 39.5 19.1 -27.9 18.8 -26.3 20.2 -26.3 20.9 -27.2
2026-02-14T17:25:53.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:25:53.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:25:53.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.642466
2026-02-14T17:25:53.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:25:53.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:25:53.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:25:53.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:25:53.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:25:53.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:25:38', tmtdew=15.06, humidity=36.27, cloud=0.0, wind=41.18, temperature=17.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:25:09.062', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:25:53.622 [DEBUG] [Thread-189231] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:25:53.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-14T17:25:53.717 [DEBUG] [Thread-189234] [transport.py] [_log()] starting thread (client mode): 0xa5771f90
2026-02-14T17:25:53.718 [DEBUG] [Thread-189234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:25:53.733 [DEBUG] [Thread-189234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:25:53.734 [INFO] [Thread-189234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:25:53.741 [DEBUG] [Thread-189234] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:25:53.741 [DEBUG] [Thread-189234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:25:53.741 [DEBUG] [Thread-189234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:25:53.742 [DEBUG] [Thread-189234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:25:53.742 [DEBUG] [Thread-189234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:25:53.742 [DEBUG] [Thread-189234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:25:53.742 [DEBUG] [Thread-189234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:25:53.742 [DEBUG] [Thread-189234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:25:53.742 [DEBUG] [Thread-189234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:25:53.742 [DEBUG] [Thread-189234] [transport.py] [_log()] client lang: <none>
2026-02-14T17:25:53.742 [DEBUG] [Thread-189234] [transport.py] [_log()] server lang: <none>
2026-02-14T17:25:53.742 [DEBUG] [Thread-189234] [transport.py] [_log()] kex follows: False
2026-02-14T17:25:53.742 [DEBUG] [Thread-189234] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:25:53.742 [DEBUG] [Thread-189234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:25:53.742 [DEBUG] [Thread-189234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:25:53.742 [DEBUG] [Thread-189234] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:25:53.742 [DEBUG] [Thread-189234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:25:53.742 [DEBUG] [Thread-189234] [transport.py] [_log()] Compression: none
2026-02-14T17:25:53.742 [DEBUG] [Thread-189234] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:25:53.802 [DEBUG] [Thread-189234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:25:53.802 [DEBUG] [Thread-189234] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:25:53.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:25:53.804 [DEBUG] [Thread-189234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:25:53.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:25:53.857 [DEBUG] [Thread-189234] [transport.py] [_log()] userauth is OK
2026-02-14T17:25:53.858 [DEBUG] [Thread-189234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:25:53.858 [DEBUG] [Thread-189234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:25:53.858 [DEBUG] [Thread-189234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:25:53.858 [DEBUG] [Thread-189234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:25:53.877 [INFO] [Thread-189234] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:25:53.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-14T17:25:53.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:25:54.705 [DEBUG] [Thread-189234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:25:54.705 [DEBUG] [Thread-189234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:25:54.753 [DEBUG] [Thread-189234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:25:54.754 [DEBUG] [Thread-189234] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:25:54.763 [DEBUG] [Thread-189234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:25:54.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:25:54.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-14T17:25:54.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-14T17:25:54.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:25:54.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:25:54.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:25:54.799 [DEBUG] [Thread-189234] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:26:02.518 [DEBUG] [Thread-189236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:26:03.860 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:26:03.862 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:26:17.572 [DEBUG] [Thread-189237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:26:24.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:26:24.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:26:24.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-14T17:26:26.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 26, 13), 13.76, 39.38, 0.0, 39.63, 15.62, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:26:26.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:26:13
2026-02-14T17:26:27.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:26:27.298 [DEBUG] [Thread-189238] [transport.py] [_log()] starting thread (client mode): 0xa2db5690
2026-02-14T17:26:27.299 [DEBUG] [Thread-189238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:26:27.319 [DEBUG] [Thread-189238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:26:27.319 [INFO] [Thread-189238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:26:27.322 [DEBUG] [Thread-189238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:26:27.322 [DEBUG] [Thread-189238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:26:27.322 [DEBUG] [Thread-189238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:26:27.322 [DEBUG] [Thread-189238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:26:27.322 [DEBUG] [Thread-189238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:26:27.322 [DEBUG] [Thread-189238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:26:27.322 [DEBUG] [Thread-189238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:26:27.322 [DEBUG] [Thread-189238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:26:27.322 [DEBUG] [Thread-189238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:26:27.322 [DEBUG] [Thread-189238] [transport.py] [_log()] client lang: <none>
2026-02-14T17:26:27.322 [DEBUG] [Thread-189238] [transport.py] [_log()] server lang: <none>
2026-02-14T17:26:27.322 [DEBUG] [Thread-189238] [transport.py] [_log()] kex follows: False
2026-02-14T17:26:27.322 [DEBUG] [Thread-189238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:26:27.322 [DEBUG] [Thread-189238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:26:27.322 [DEBUG] [Thread-189238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:26:27.322 [DEBUG] [Thread-189238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:26:27.322 [DEBUG] [Thread-189238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:26:27.322 [DEBUG] [Thread-189238] [transport.py] [_log()] Compression: none
2026-02-14T17:26:27.322 [DEBUG] [Thread-189238] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:26:27.339 [DEBUG] [Thread-189238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:26:27.340 [DEBUG] [Thread-189238] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:26:27.340 [DEBUG] [Thread-189238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:26:27.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:26:27.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:26:27.342 [DEBUG] [Thread-189238] [transport.py] [_log()] userauth is OK
2026-02-14T17:26:27.343 [DEBUG] [Thread-189238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:26:27.343 [DEBUG] [Thread-189238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:26:27.343 [DEBUG] [Thread-189238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:26:27.343 [DEBUG] [Thread-189238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:26:27.368 [INFO] [Thread-189238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:26:27.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:26:28.001 [DEBUG] [Thread-189238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:26:28.001 [DEBUG] [Thread-189238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:26:28.001 [DEBUG] [Thread-189238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:26:28.041 [DEBUG] [Thread-189238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:26:28.042 [DEBUG] [Thread-189238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:26:28.045 [DEBUG] [Thread-189238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:26:28.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:26:28.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:26:28.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:26:28.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:26:28.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:26:28.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:26:28.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:26:28.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:26:28.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:26:28.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.642814 -999.00  +15.50  35.61     45   +3.60 1 1 2 1 1   887    0 10.80 -33.72 ----- 27.2 35.6 157.0 40.1 19.1 -28.3 18.9 -26.8 20.3 -28.2 20.9 -28.3
2026-02-14T17:26:28.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:26:28.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:26:28.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.642814
2026-02-14T17:26:28.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:26:28.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:26:28.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:26:28.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:26:28.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:26:28.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:26:13', tmtdew=13.76, humidity=39.38, cloud=0.0, wind=39.63, temperature=15.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:25:39.130', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:26:28.072 [DEBUG] [Thread-189238] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:26:28.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-14T17:26:28.168 [DEBUG] [Thread-189241] [transport.py] [_log()] starting thread (client mode): 0xa57b2800
2026-02-14T17:26:28.168 [DEBUG] [Thread-189241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:26:28.183 [DEBUG] [Thread-189241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:26:28.183 [INFO] [Thread-189241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:26:28.191 [DEBUG] [Thread-189241] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:26:28.191 [DEBUG] [Thread-189241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:26:28.191 [DEBUG] [Thread-189241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:26:28.191 [DEBUG] [Thread-189241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:26:28.191 [DEBUG] [Thread-189241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:26:28.191 [DEBUG] [Thread-189241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:26:28.191 [DEBUG] [Thread-189241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:26:28.191 [DEBUG] [Thread-189241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:26:28.191 [DEBUG] [Thread-189241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:26:28.191 [DEBUG] [Thread-189241] [transport.py] [_log()] client lang: <none>
2026-02-14T17:26:28.191 [DEBUG] [Thread-189241] [transport.py] [_log()] server lang: <none>
2026-02-14T17:26:28.191 [DEBUG] [Thread-189241] [transport.py] [_log()] kex follows: False
2026-02-14T17:26:28.191 [DEBUG] [Thread-189241] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:26:28.191 [DEBUG] [Thread-189241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:26:28.192 [DEBUG] [Thread-189241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:26:28.192 [DEBUG] [Thread-189241] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:26:28.192 [DEBUG] [Thread-189241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:26:28.192 [DEBUG] [Thread-189241] [transport.py] [_log()] Compression: none
2026-02-14T17:26:28.192 [DEBUG] [Thread-189241] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:26:28.250 [DEBUG] [Thread-189241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:26:28.250 [DEBUG] [Thread-189241] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:26:28.251 [DEBUG] [Thread-189241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:26:28.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:26:28.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:26:28.309 [DEBUG] [Thread-189241] [transport.py] [_log()] userauth is OK
2026-02-14T17:26:28.309 [DEBUG] [Thread-189241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:26:28.309 [DEBUG] [Thread-189241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:26:28.309 [DEBUG] [Thread-189241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:26:28.309 [DEBUG] [Thread-189241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:26:28.330 [INFO] [Thread-189241] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:26:28.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-14T17:26:28.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:26:29.171 [DEBUG] [Thread-189241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:26:29.172 [DEBUG] [Thread-189241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:26:29.219 [DEBUG] [Thread-189241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:26:29.220 [DEBUG] [Thread-189241] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:26:29.229 [DEBUG] [Thread-189241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:26:29.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:26:29.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:26:29.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-14T17:26:29.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:26:29.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:26:29.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:26:29.266 [DEBUG] [Thread-189241] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:26:32.608 [DEBUG] [Thread-189243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:26:33.821 [DEBUG] [Thread-189244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:26:47.662 [DEBUG] [Thread-189245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:26:59.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:26:59.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:26:59.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T17:27:01.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 26, 50), 14.0, 38.9, 0.0, 38.83, 15.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:27:01.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:26:50
2026-02-14T17:27:01.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:27:01.606 [DEBUG] [Thread-189246] [transport.py] [_log()] starting thread (client mode): 0xa2dc2cb0
2026-02-14T17:27:01.606 [DEBUG] [Thread-189246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:27:01.627 [DEBUG] [Thread-189246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:27:01.627 [INFO] [Thread-189246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:27:01.628 [DEBUG] [Thread-189246] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:27:01.628 [DEBUG] [Thread-189246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:27:01.629 [DEBUG] [Thread-189246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:27:01.629 [DEBUG] [Thread-189246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:27:01.629 [DEBUG] [Thread-189246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:27:01.629 [DEBUG] [Thread-189246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:27:01.629 [DEBUG] [Thread-189246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:27:01.629 [DEBUG] [Thread-189246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:27:01.629 [DEBUG] [Thread-189246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:27:01.629 [DEBUG] [Thread-189246] [transport.py] [_log()] client lang: <none>
2026-02-14T17:27:01.629 [DEBUG] [Thread-189246] [transport.py] [_log()] server lang: <none>
2026-02-14T17:27:01.629 [DEBUG] [Thread-189246] [transport.py] [_log()] kex follows: False
2026-02-14T17:27:01.629 [DEBUG] [Thread-189246] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:27:01.629 [DEBUG] [Thread-189246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:27:01.629 [DEBUG] [Thread-189246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:27:01.629 [DEBUG] [Thread-189246] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:27:01.629 [DEBUG] [Thread-189246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:27:01.629 [DEBUG] [Thread-189246] [transport.py] [_log()] Compression: none
2026-02-14T17:27:01.629 [DEBUG] [Thread-189246] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:27:01.648 [DEBUG] [Thread-189246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:27:01.649 [DEBUG] [Thread-189246] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:27:01.649 [DEBUG] [Thread-189246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:27:01.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:27:01.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:27:01.651 [DEBUG] [Thread-189246] [transport.py] [_log()] userauth is OK
2026-02-14T17:27:01.651 [DEBUG] [Thread-189246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:27:01.651 [DEBUG] [Thread-189246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:27:01.652 [DEBUG] [Thread-189246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:27:01.652 [DEBUG] [Thread-189246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:27:01.671 [INFO] [Thread-189246] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:27:01.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:27:02.349 [DEBUG] [Thread-189246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:27:02.349 [DEBUG] [Thread-189246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:27:02.350 [DEBUG] [Thread-189246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:27:02.391 [DEBUG] [Thread-189246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:27:02.391 [DEBUG] [Thread-189246] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:27:02.394 [DEBUG] [Thread-189246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:27:02.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:27:02.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:27:02.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:27:02.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:27:02.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:27:02.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:27:02.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:27:02.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:27:02.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:27:02.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.643161 -999.00  +15.50  25.78     45   +3.60 1 1 1 1 1   887    0 10.91 -35.48 ----- 32.1 25.8 164.1 39.5 19.1 -28.7 18.9 -27.5 20.2 -25.8 20.9 -28.8
2026-02-14T17:27:02.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:27:02.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:27:02.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.643161
2026-02-14T17:27:02.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:27:02.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:27:02.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:27:02.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:27:02.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:27:02.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:26:50', tmtdew=14.0, humidity=38.9, cloud=0.0, wind=38.83, temperature=15.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:26:09.110', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:27:02.421 [DEBUG] [Thread-189246] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:27:02.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-14T17:27:02.517 [DEBUG] [Thread-189249] [transport.py] [_log()] starting thread (client mode): 0xa5770b50
2026-02-14T17:27:02.518 [DEBUG] [Thread-189249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:27:02.532 [DEBUG] [Thread-189249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:27:02.532 [INFO] [Thread-189249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:27:02.540 [DEBUG] [Thread-189249] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:27:02.541 [DEBUG] [Thread-189249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:27:02.541 [DEBUG] [Thread-189249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:27:02.541 [DEBUG] [Thread-189249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:27:02.541 [DEBUG] [Thread-189249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:27:02.541 [DEBUG] [Thread-189249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:27:02.541 [DEBUG] [Thread-189249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:27:02.541 [DEBUG] [Thread-189249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:27:02.541 [DEBUG] [Thread-189249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:27:02.541 [DEBUG] [Thread-189249] [transport.py] [_log()] client lang: <none>
2026-02-14T17:27:02.541 [DEBUG] [Thread-189249] [transport.py] [_log()] server lang: <none>
2026-02-14T17:27:02.541 [DEBUG] [Thread-189249] [transport.py] [_log()] kex follows: False
2026-02-14T17:27:02.541 [DEBUG] [Thread-189249] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:27:02.541 [DEBUG] [Thread-189249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:27:02.541 [DEBUG] [Thread-189249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:27:02.541 [DEBUG] [Thread-189249] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:27:02.541 [DEBUG] [Thread-189249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:27:02.541 [DEBUG] [Thread-189249] [transport.py] [_log()] Compression: none
2026-02-14T17:27:02.541 [DEBUG] [Thread-189249] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:27:02.598 [DEBUG] [Thread-189249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:27:02.598 [DEBUG] [Thread-189249] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:27:02.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:27:02.600 [DEBUG] [Thread-189249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:27:02.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:27:02.654 [DEBUG] [Thread-189249] [transport.py] [_log()] userauth is OK
2026-02-14T17:27:02.654 [DEBUG] [Thread-189249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:27:02.654 [DEBUG] [Thread-189249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:27:02.654 [DEBUG] [Thread-189249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:27:02.654 [DEBUG] [Thread-189249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:27:02.673 [INFO] [Thread-189249] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:27:02.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-14T17:27:02.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:27:02.699 [DEBUG] [Thread-189251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:27:03.549 [DEBUG] [Thread-189249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:27:03.549 [DEBUG] [Thread-189249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:27:03.598 [DEBUG] [Thread-189249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:27:03.598 [DEBUG] [Thread-189249] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:27:03.611 [DEBUG] [Thread-189249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:27:03.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:27:03.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-14T17:27:03.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-14T17:27:03.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:27:03.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:27:03.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:27:03.658 [DEBUG] [Thread-189249] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:27:04.008 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:27:04.009 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:27:17.755 [DEBUG] [Thread-189252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:27:32.792 [DEBUG] [Thread-189253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:27:33.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:27:33.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:27:33.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-14T17:27:33.854 [DEBUG] [Thread-189254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:27:35.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 27, 25), 13.94, 39.05, 0.0, 41.8, 15.67, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:27:35.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:27:25
2026-02-14T17:27:36.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:27:36.570 [DEBUG] [Thread-189255] [transport.py] [_log()] starting thread (client mode): 0xa2d7ae60
2026-02-14T17:27:36.570 [DEBUG] [Thread-189255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:27:36.590 [DEBUG] [Thread-189255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:27:36.590 [INFO] [Thread-189255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:27:36.593 [DEBUG] [Thread-189255] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:27:36.593 [DEBUG] [Thread-189255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:27:36.593 [DEBUG] [Thread-189255] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:27:36.593 [DEBUG] [Thread-189255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:27:36.593 [DEBUG] [Thread-189255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:27:36.593 [DEBUG] [Thread-189255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:27:36.593 [DEBUG] [Thread-189255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:27:36.593 [DEBUG] [Thread-189255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:27:36.593 [DEBUG] [Thread-189255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:27:36.593 [DEBUG] [Thread-189255] [transport.py] [_log()] client lang: <none>
2026-02-14T17:27:36.593 [DEBUG] [Thread-189255] [transport.py] [_log()] server lang: <none>
2026-02-14T17:27:36.593 [DEBUG] [Thread-189255] [transport.py] [_log()] kex follows: False
2026-02-14T17:27:36.593 [DEBUG] [Thread-189255] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:27:36.593 [DEBUG] [Thread-189255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:27:36.594 [DEBUG] [Thread-189255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:27:36.594 [DEBUG] [Thread-189255] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:27:36.594 [DEBUG] [Thread-189255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:27:36.594 [DEBUG] [Thread-189255] [transport.py] [_log()] Compression: none
2026-02-14T17:27:36.594 [DEBUG] [Thread-189255] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:27:36.610 [DEBUG] [Thread-189255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:27:36.610 [DEBUG] [Thread-189255] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:27:36.610 [DEBUG] [Thread-189255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:27:36.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:27:36.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:27:36.612 [DEBUG] [Thread-189255] [transport.py] [_log()] userauth is OK
2026-02-14T17:27:36.612 [DEBUG] [Thread-189255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:27:36.612 [DEBUG] [Thread-189255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:27:36.612 [DEBUG] [Thread-189255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:27:36.612 [DEBUG] [Thread-189255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:27:36.636 [INFO] [Thread-189255] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:27:36.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:27:37.299 [DEBUG] [Thread-189255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:27:37.299 [DEBUG] [Thread-189255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:27:37.299 [DEBUG] [Thread-189255] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:27:37.340 [DEBUG] [Thread-189255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:27:37.341 [DEBUG] [Thread-189255] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:27:37.344 [DEBUG] [Thread-189255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:27:37.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:27:37.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:27:37.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:27:37.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:27:37.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:27:37.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:27:37.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:27:37.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:27:37.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:27:37.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.643508 -999.00  +15.30  27.11     45   +3.60 1 1 1 1 1   887    0 10.81 -36.91 ----- 30.1 27.1 162.0 40.0 18.9 -29.0 18.8 -27.5 20.1 -26.0 20.8 -28.8
2026-02-14T17:27:37.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:27:37.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:27:37.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.643508
2026-02-14T17:27:37.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:27:37.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:27:37.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:27:37.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:27:37.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:27:37.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:27:25', tmtdew=13.94, humidity=39.05, cloud=0.0, wind=41.8, temperature=15.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:26:39.091', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:27:37.367 [DEBUG] [Thread-189255] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:27:37.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-14T17:27:37.464 [DEBUG] [Thread-189258] [transport.py] [_log()] starting thread (client mode): 0xa2d799c0
2026-02-14T17:27:37.465 [DEBUG] [Thread-189258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:27:37.479 [DEBUG] [Thread-189258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:27:37.479 [INFO] [Thread-189258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:27:37.487 [DEBUG] [Thread-189258] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:27:37.487 [DEBUG] [Thread-189258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:27:37.487 [DEBUG] [Thread-189258] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:27:37.487 [DEBUG] [Thread-189258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:27:37.487 [DEBUG] [Thread-189258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:27:37.487 [DEBUG] [Thread-189258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:27:37.487 [DEBUG] [Thread-189258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:27:37.487 [DEBUG] [Thread-189258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:27:37.487 [DEBUG] [Thread-189258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:27:37.488 [DEBUG] [Thread-189258] [transport.py] [_log()] client lang: <none>
2026-02-14T17:27:37.488 [DEBUG] [Thread-189258] [transport.py] [_log()] server lang: <none>
2026-02-14T17:27:37.488 [DEBUG] [Thread-189258] [transport.py] [_log()] kex follows: False
2026-02-14T17:27:37.488 [DEBUG] [Thread-189258] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:27:37.488 [DEBUG] [Thread-189258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:27:37.488 [DEBUG] [Thread-189258] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:27:37.488 [DEBUG] [Thread-189258] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:27:37.488 [DEBUG] [Thread-189258] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:27:37.488 [DEBUG] [Thread-189258] [transport.py] [_log()] Compression: none
2026-02-14T17:27:37.488 [DEBUG] [Thread-189258] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:27:37.545 [DEBUG] [Thread-189258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:27:37.546 [DEBUG] [Thread-189258] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:27:37.546 [DEBUG] [Thread-189258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:27:37.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:27:37.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:27:37.601 [DEBUG] [Thread-189258] [transport.py] [_log()] userauth is OK
2026-02-14T17:27:37.602 [DEBUG] [Thread-189258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:27:37.602 [DEBUG] [Thread-189258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:27:37.602 [DEBUG] [Thread-189258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:27:37.602 [DEBUG] [Thread-189258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:27:37.620 [INFO] [Thread-189258] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:27:37.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-14T17:27:37.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:27:38.429 [DEBUG] [Thread-189258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:27:38.429 [DEBUG] [Thread-189258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:27:38.478 [DEBUG] [Thread-189258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:27:38.478 [DEBUG] [Thread-189258] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:27:38.487 [DEBUG] [Thread-189258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:27:38.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:27:38.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-14T17:27:38.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-14T17:27:38.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:27:38.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:27:38.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:27:38.523 [DEBUG] [Thread-189258] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:27:47.826 [DEBUG] [Thread-189260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:28:02.880 [DEBUG] [Thread-189261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:28:04.149 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:28:04.150 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:28:08.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:28:08.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:28:08.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-14T17:28:10.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 28), 13.87, 38.86, 0.0, 30.51, 15.79, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:28:10.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:28:00
2026-02-14T17:28:10.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:28:11.026 [DEBUG] [Thread-189262] [transport.py] [_log()] starting thread (client mode): 0xa2d7b4f0
2026-02-14T17:28:11.026 [DEBUG] [Thread-189262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:28:11.042 [DEBUG] [Thread-189262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:28:11.042 [INFO] [Thread-189262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:28:11.046 [DEBUG] [Thread-189262] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:28:11.046 [DEBUG] [Thread-189262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:28:11.046 [DEBUG] [Thread-189262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:28:11.046 [DEBUG] [Thread-189262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:28:11.046 [DEBUG] [Thread-189262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:28:11.046 [DEBUG] [Thread-189262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:28:11.046 [DEBUG] [Thread-189262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:28:11.046 [DEBUG] [Thread-189262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:28:11.046 [DEBUG] [Thread-189262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:28:11.046 [DEBUG] [Thread-189262] [transport.py] [_log()] client lang: <none>
2026-02-14T17:28:11.046 [DEBUG] [Thread-189262] [transport.py] [_log()] server lang: <none>
2026-02-14T17:28:11.046 [DEBUG] [Thread-189262] [transport.py] [_log()] kex follows: False
2026-02-14T17:28:11.046 [DEBUG] [Thread-189262] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:28:11.046 [DEBUG] [Thread-189262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:28:11.046 [DEBUG] [Thread-189262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:28:11.046 [DEBUG] [Thread-189262] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:28:11.046 [DEBUG] [Thread-189262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:28:11.047 [DEBUG] [Thread-189262] [transport.py] [_log()] Compression: none
2026-02-14T17:28:11.047 [DEBUG] [Thread-189262] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:28:11.064 [DEBUG] [Thread-189262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:28:11.064 [DEBUG] [Thread-189262] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:28:11.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:28:11.065 [DEBUG] [Thread-189262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:28:11.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:28:11.068 [DEBUG] [Thread-189262] [transport.py] [_log()] userauth is OK
2026-02-14T17:28:11.068 [DEBUG] [Thread-189262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:28:11.068 [DEBUG] [Thread-189262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:28:11.068 [DEBUG] [Thread-189262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:28:11.068 [DEBUG] [Thread-189262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:28:11.106 [INFO] [Thread-189262] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:28:11.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:28:11.891 [DEBUG] [Thread-189262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:28:11.891 [DEBUG] [Thread-189262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:28:11.892 [DEBUG] [Thread-189262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:28:11.932 [DEBUG] [Thread-189262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:28:11.933 [DEBUG] [Thread-189262] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:28:11.936 [DEBUG] [Thread-189262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:28:11.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:28:11.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:28:11.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:28:11.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:28:11.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:28:11.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:28:11.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:28:11.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:28:11.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:28:11.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.643855 -999.00  +15.40  22.43     45   +3.70 1 1 1 1 1   887    0 11.01 -40.18 ----- 19.5 22.4 156.2 39.6 19.1 -27.8 18.7 -26.3 20.1 -26.2 20.9 -27.5
2026-02-14T17:28:11.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:28:11.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:28:11.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.643855
2026-02-14T17:28:11.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:28:11.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:28:11.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:28:11.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:28:11.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:28:11.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:28:00', tmtdew=13.87, humidity=38.86, cloud=0.0, wind=30.51, temperature=15.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:27:09.072', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:28:11.962 [DEBUG] [Thread-189262] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:28:12.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-14T17:28:12.067 [DEBUG] [Thread-189265] [transport.py] [_log()] starting thread (client mode): 0xa5770160
2026-02-14T17:28:12.067 [DEBUG] [Thread-189265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:28:12.080 [DEBUG] [Thread-189265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:28:12.081 [INFO] [Thread-189265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:28:12.088 [DEBUG] [Thread-189265] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:28:12.088 [DEBUG] [Thread-189265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:28:12.088 [DEBUG] [Thread-189265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:28:12.088 [DEBUG] [Thread-189265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:28:12.088 [DEBUG] [Thread-189265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:28:12.088 [DEBUG] [Thread-189265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:28:12.088 [DEBUG] [Thread-189265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:28:12.088 [DEBUG] [Thread-189265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:28:12.088 [DEBUG] [Thread-189265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:28:12.088 [DEBUG] [Thread-189265] [transport.py] [_log()] client lang: <none>
2026-02-14T17:28:12.088 [DEBUG] [Thread-189265] [transport.py] [_log()] server lang: <none>
2026-02-14T17:28:12.088 [DEBUG] [Thread-189265] [transport.py] [_log()] kex follows: False
2026-02-14T17:28:12.088 [DEBUG] [Thread-189265] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:28:12.089 [DEBUG] [Thread-189265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:28:12.089 [DEBUG] [Thread-189265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:28:12.089 [DEBUG] [Thread-189265] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:28:12.089 [DEBUG] [Thread-189265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:28:12.089 [DEBUG] [Thread-189265] [transport.py] [_log()] Compression: none
2026-02-14T17:28:12.089 [DEBUG] [Thread-189265] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:28:12.146 [DEBUG] [Thread-189265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:28:12.147 [DEBUG] [Thread-189265] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:28:12.148 [DEBUG] [Thread-189265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:28:12.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:28:12.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:28:12.202 [DEBUG] [Thread-189265] [transport.py] [_log()] userauth is OK
2026-02-14T17:28:12.203 [DEBUG] [Thread-189265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:28:12.203 [DEBUG] [Thread-189265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:28:12.203 [DEBUG] [Thread-189265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:28:12.203 [DEBUG] [Thread-189265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:28:12.222 [INFO] [Thread-189265] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:28:12.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-14T17:28:12.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:28:13.044 [DEBUG] [Thread-189265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:28:13.044 [DEBUG] [Thread-189265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:28:13.097 [DEBUG] [Thread-189265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:28:13.097 [DEBUG] [Thread-189265] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:28:13.106 [DEBUG] [Thread-189265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:28:13.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:28:13.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-14T17:28:13.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:28:13.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:28:13.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:28:13.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:28:13.147 [DEBUG] [Thread-189265] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:28:17.918 [DEBUG] [Thread-189267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:28:32.960 [DEBUG] [Thread-189268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:28:33.899 [DEBUG] [Thread-189269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:28:43.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:28:43.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:28:43.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-14T17:28:45.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 28, 36), 14.56, 37.46, 0.0, 44.63, 16.58, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:28:45.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:28:36
2026-02-14T17:28:45.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:28:46.116 [DEBUG] [Thread-189270] [transport.py] [_log()] starting thread (client mode): 0xa57b18d0
2026-02-14T17:28:46.117 [DEBUG] [Thread-189270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:28:46.137 [DEBUG] [Thread-189270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:28:46.137 [INFO] [Thread-189270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:28:46.140 [DEBUG] [Thread-189270] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:28:46.140 [DEBUG] [Thread-189270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:28:46.140 [DEBUG] [Thread-189270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:28:46.141 [DEBUG] [Thread-189270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:28:46.141 [DEBUG] [Thread-189270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:28:46.141 [DEBUG] [Thread-189270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:28:46.141 [DEBUG] [Thread-189270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:28:46.141 [DEBUG] [Thread-189270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:28:46.141 [DEBUG] [Thread-189270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:28:46.141 [DEBUG] [Thread-189270] [transport.py] [_log()] client lang: <none>
2026-02-14T17:28:46.141 [DEBUG] [Thread-189270] [transport.py] [_log()] server lang: <none>
2026-02-14T17:28:46.141 [DEBUG] [Thread-189270] [transport.py] [_log()] kex follows: False
2026-02-14T17:28:46.141 [DEBUG] [Thread-189270] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:28:46.141 [DEBUG] [Thread-189270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:28:46.141 [DEBUG] [Thread-189270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:28:46.141 [DEBUG] [Thread-189270] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:28:46.141 [DEBUG] [Thread-189270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:28:46.141 [DEBUG] [Thread-189270] [transport.py] [_log()] Compression: none
2026-02-14T17:28:46.141 [DEBUG] [Thread-189270] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:28:46.157 [DEBUG] [Thread-189270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:28:46.158 [DEBUG] [Thread-189270] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:28:46.158 [DEBUG] [Thread-189270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:28:46.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:28:46.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:28:46.160 [DEBUG] [Thread-189270] [transport.py] [_log()] userauth is OK
2026-02-14T17:28:46.161 [DEBUG] [Thread-189270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:28:46.161 [DEBUG] [Thread-189270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:28:46.161 [DEBUG] [Thread-189270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:28:46.161 [DEBUG] [Thread-189270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:28:46.180 [INFO] [Thread-189270] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:28:46.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:28:46.748 [DEBUG] [Thread-189270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:28:46.748 [DEBUG] [Thread-189270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:28:46.748 [DEBUG] [Thread-189270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:28:46.790 [DEBUG] [Thread-189270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:28:46.790 [DEBUG] [Thread-189270] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:28:46.792 [DEBUG] [Thread-189270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:28:46.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:28:46.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:28:46.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:28:46.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:28:46.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:28:46.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:28:46.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:28:46.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:28:46.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:28:46.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.644897 -999.00  +15.70  20.46     44   +3.70 1 1 1 1 1   887    0 10.84 -35.36 ----- 30.4 20.5 171.7 29.2 19.1 -27.8 18.8 -27.2 20.3 -24.4 21.0 -27.1
2026-02-14T17:28:46.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:28:46.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:28:46.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.644897
2026-02-14T17:28:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:28:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:28:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:28:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:28:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:28:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:28:36', tmtdew=14.56, humidity=37.46, cloud=0.0, wind=44.63, temperature=16.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:28:39.101', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:28:46.811 [DEBUG] [Thread-189270] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:28:46.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-14T17:28:46.904 [DEBUG] [Thread-189273] [transport.py] [_log()] starting thread (client mode): 0xa5770520
2026-02-14T17:28:46.905 [DEBUG] [Thread-189273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:28:46.920 [DEBUG] [Thread-189273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:28:46.920 [INFO] [Thread-189273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:28:46.928 [DEBUG] [Thread-189273] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:28:46.928 [DEBUG] [Thread-189273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:28:46.928 [DEBUG] [Thread-189273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:28:46.928 [DEBUG] [Thread-189273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:28:46.928 [DEBUG] [Thread-189273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:28:46.928 [DEBUG] [Thread-189273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:28:46.928 [DEBUG] [Thread-189273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:28:46.928 [DEBUG] [Thread-189273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:28:46.928 [DEBUG] [Thread-189273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:28:46.928 [DEBUG] [Thread-189273] [transport.py] [_log()] client lang: <none>
2026-02-14T17:28:46.928 [DEBUG] [Thread-189273] [transport.py] [_log()] server lang: <none>
2026-02-14T17:28:46.928 [DEBUG] [Thread-189273] [transport.py] [_log()] kex follows: False
2026-02-14T17:28:46.929 [DEBUG] [Thread-189273] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:28:46.929 [DEBUG] [Thread-189273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:28:46.929 [DEBUG] [Thread-189273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:28:46.929 [DEBUG] [Thread-189273] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:28:46.929 [DEBUG] [Thread-189273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:28:46.929 [DEBUG] [Thread-189273] [transport.py] [_log()] Compression: none
2026-02-14T17:28:46.929 [DEBUG] [Thread-189273] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:28:46.987 [DEBUG] [Thread-189273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:28:46.987 [DEBUG] [Thread-189273] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:28:46.988 [DEBUG] [Thread-189273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:28:46.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:28:46.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:28:47.043 [DEBUG] [Thread-189273] [transport.py] [_log()] userauth is OK
2026-02-14T17:28:47.043 [DEBUG] [Thread-189273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:28:47.043 [DEBUG] [Thread-189273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:28:47.043 [DEBUG] [Thread-189273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:28:47.044 [DEBUG] [Thread-189273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:28:47.063 [INFO] [Thread-189273] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:28:47.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-14T17:28:47.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:28:47.884 [DEBUG] [Thread-189273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:28:47.884 [DEBUG] [Thread-189273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:28:47.932 [DEBUG] [Thread-189273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:28:47.932 [DEBUG] [Thread-189273] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:28:47.942 [DEBUG] [Thread-189273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:28:47.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:28:47.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:28:47.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:28:47.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:28:47.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:28:47.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:28:47.979 [DEBUG] [Thread-189273] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:28:47.998 [DEBUG] [Thread-189275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:29:03.055 [DEBUG] [Thread-189276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:29:04.291 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:29:04.292 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:29:18.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:29:18.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:29:18.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-14T17:29:18.092 [DEBUG] [Thread-189277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:29:19.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 28, 36), 14.56, 37.46, 0.0, 44.63, 16.58, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:29:19.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:28:36
2026-02-14T17:29:20.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:29:20.554 [DEBUG] [Thread-189278] [transport.py] [_log()] starting thread (client mode): 0xa2db5bd0
2026-02-14T17:29:20.554 [DEBUG] [Thread-189278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:29:20.579 [DEBUG] [Thread-189278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:29:20.580 [INFO] [Thread-189278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:29:20.582 [DEBUG] [Thread-189278] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:29:20.582 [DEBUG] [Thread-189278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:29:20.582 [DEBUG] [Thread-189278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:29:20.582 [DEBUG] [Thread-189278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:29:20.582 [DEBUG] [Thread-189278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:29:20.583 [DEBUG] [Thread-189278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:29:20.583 [DEBUG] [Thread-189278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:29:20.583 [DEBUG] [Thread-189278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:29:20.583 [DEBUG] [Thread-189278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:29:20.583 [DEBUG] [Thread-189278] [transport.py] [_log()] client lang: <none>
2026-02-14T17:29:20.583 [DEBUG] [Thread-189278] [transport.py] [_log()] server lang: <none>
2026-02-14T17:29:20.583 [DEBUG] [Thread-189278] [transport.py] [_log()] kex follows: False
2026-02-14T17:29:20.583 [DEBUG] [Thread-189278] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:29:20.583 [DEBUG] [Thread-189278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:29:20.583 [DEBUG] [Thread-189278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:29:20.584 [DEBUG] [Thread-189278] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:29:20.584 [DEBUG] [Thread-189278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:29:20.584 [DEBUG] [Thread-189278] [transport.py] [_log()] Compression: none
2026-02-14T17:29:20.584 [DEBUG] [Thread-189278] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:29:20.600 [DEBUG] [Thread-189278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:29:20.601 [DEBUG] [Thread-189278] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:29:20.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:29:20.602 [DEBUG] [Thread-189278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:29:20.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:29:20.605 [DEBUG] [Thread-189278] [transport.py] [_log()] userauth is OK
2026-02-14T17:29:20.605 [DEBUG] [Thread-189278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:29:20.605 [DEBUG] [Thread-189278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:29:20.605 [DEBUG] [Thread-189278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:29:20.605 [DEBUG] [Thread-189278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:29:20.624 [INFO] [Thread-189278] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:29:20.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:29:21.198 [DEBUG] [Thread-189278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:29:21.198 [DEBUG] [Thread-189278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:29:21.198 [DEBUG] [Thread-189278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:29:21.240 [DEBUG] [Thread-189278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:29:21.240 [DEBUG] [Thread-189278] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:29:21.243 [DEBUG] [Thread-189278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:29:21.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:29:21.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:29:21.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:29:21.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:29:21.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:29:21.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:29:21.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:29:21.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:29:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:29:21.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.645244 -999.00  +15.60  31.51     44   +3.70 1 1 2 1 1   887    0 10.90 -33.64 ----- 35.9 31.5 177.6 46.3 18.9 -29.2 18.4 -30.4 20.1 -26.9 20.6 -30.0
2026-02-14T17:29:21.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:29:21.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:29:21.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.645244
2026-02-14T17:29:21.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:29:21.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:29:21.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:29:21.271 [DEBUG] [Thread-189278] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:29:21.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:29:21.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:29:21.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:28:36', tmtdew=14.56, humidity=37.46, cloud=0.0, wind=44.63, temperature=16.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:29:09.082', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:29:21.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-14T17:29:21.366 [DEBUG] [Thread-189281] [transport.py] [_log()] starting thread (client mode): 0xa2dec070
2026-02-14T17:29:21.367 [DEBUG] [Thread-189281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:29:21.381 [DEBUG] [Thread-189281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:29:21.382 [INFO] [Thread-189281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:29:21.389 [DEBUG] [Thread-189281] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:29:21.390 [DEBUG] [Thread-189281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:29:21.390 [DEBUG] [Thread-189281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:29:21.390 [DEBUG] [Thread-189281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:29:21.390 [DEBUG] [Thread-189281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:29:21.390 [DEBUG] [Thread-189281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:29:21.390 [DEBUG] [Thread-189281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:29:21.390 [DEBUG] [Thread-189281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:29:21.390 [DEBUG] [Thread-189281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:29:21.390 [DEBUG] [Thread-189281] [transport.py] [_log()] client lang: <none>
2026-02-14T17:29:21.390 [DEBUG] [Thread-189281] [transport.py] [_log()] server lang: <none>
2026-02-14T17:29:21.390 [DEBUG] [Thread-189281] [transport.py] [_log()] kex follows: False
2026-02-14T17:29:21.390 [DEBUG] [Thread-189281] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:29:21.390 [DEBUG] [Thread-189281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:29:21.390 [DEBUG] [Thread-189281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:29:21.390 [DEBUG] [Thread-189281] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:29:21.390 [DEBUG] [Thread-189281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:29:21.390 [DEBUG] [Thread-189281] [transport.py] [_log()] Compression: none
2026-02-14T17:29:21.391 [DEBUG] [Thread-189281] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:29:21.447 [DEBUG] [Thread-189281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:29:21.448 [DEBUG] [Thread-189281] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:29:21.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:29:21.449 [DEBUG] [Thread-189281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:29:21.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:29:21.503 [DEBUG] [Thread-189281] [transport.py] [_log()] userauth is OK
2026-02-14T17:29:21.504 [DEBUG] [Thread-189281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:29:21.504 [DEBUG] [Thread-189281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:29:21.504 [DEBUG] [Thread-189281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:29:21.504 [DEBUG] [Thread-189281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:29:21.522 [INFO] [Thread-189281] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:29:21.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-14T17:29:21.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:29:22.346 [DEBUG] [Thread-189281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:29:22.346 [DEBUG] [Thread-189281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:29:22.394 [DEBUG] [Thread-189281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:29:22.395 [DEBUG] [Thread-189281] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:29:22.404 [DEBUG] [Thread-189281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:29:22.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:29:22.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-14T17:29:22.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-14T17:29:22.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:29:22.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:29:22.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:29:22.439 [DEBUG] [Thread-189281] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:29:33.130 [DEBUG] [Thread-189283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:29:33.932 [DEBUG] [Thread-189284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:29:48.183 [DEBUG] [Thread-189285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:29:52.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:29:52.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:29:52.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-14T17:29:54.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 29, 12), 14.06, 38.43, 0.0, 34.85, 15.87, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:29:54.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:29:12
2026-02-14T17:29:54.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:29:55.124 [DEBUG] [Thread-189286] [transport.py] [_log()] starting thread (client mode): 0xa2d7a7d0
2026-02-14T17:29:55.124 [DEBUG] [Thread-189286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:29:55.143 [DEBUG] [Thread-189286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:29:55.144 [INFO] [Thread-189286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:29:55.147 [DEBUG] [Thread-189286] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:29:55.147 [DEBUG] [Thread-189286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:29:55.147 [DEBUG] [Thread-189286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:29:55.147 [DEBUG] [Thread-189286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:29:55.147 [DEBUG] [Thread-189286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:29:55.147 [DEBUG] [Thread-189286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:29:55.147 [DEBUG] [Thread-189286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:29:55.147 [DEBUG] [Thread-189286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:29:55.147 [DEBUG] [Thread-189286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:29:55.147 [DEBUG] [Thread-189286] [transport.py] [_log()] client lang: <none>
2026-02-14T17:29:55.147 [DEBUG] [Thread-189286] [transport.py] [_log()] server lang: <none>
2026-02-14T17:29:55.147 [DEBUG] [Thread-189286] [transport.py] [_log()] kex follows: False
2026-02-14T17:29:55.147 [DEBUG] [Thread-189286] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:29:55.147 [DEBUG] [Thread-189286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:29:55.147 [DEBUG] [Thread-189286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:29:55.147 [DEBUG] [Thread-189286] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:29:55.147 [DEBUG] [Thread-189286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:29:55.147 [DEBUG] [Thread-189286] [transport.py] [_log()] Compression: none
2026-02-14T17:29:55.147 [DEBUG] [Thread-189286] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:29:55.157 [DEBUG] [Thread-189286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:29:55.158 [DEBUG] [Thread-189286] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:29:55.158 [DEBUG] [Thread-189286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:29:55.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:29:55.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:29:55.161 [DEBUG] [Thread-189286] [transport.py] [_log()] userauth is OK
2026-02-14T17:29:55.161 [DEBUG] [Thread-189286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:29:55.161 [DEBUG] [Thread-189286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:29:55.161 [DEBUG] [Thread-189286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:29:55.161 [DEBUG] [Thread-189286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:29:55.179 [INFO] [Thread-189286] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:29:55.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:29:55.796 [DEBUG] [Thread-189286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:29:55.796 [DEBUG] [Thread-189286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:29:55.797 [DEBUG] [Thread-189286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:29:55.837 [DEBUG] [Thread-189286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:29:55.838 [DEBUG] [Thread-189286] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:29:55.841 [DEBUG] [Thread-189286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:29:55.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:29:55.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:29:55.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:29:55.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:29:55.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:29:55.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:29:55.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:29:55.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:29:55.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:29:55.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.645591 -999.00  +15.20  38.84     45   +3.60 1 1 2 1 1   887    0 10.89 -35.07 ----- 38.8 38.8 187.2 44.6 18.7 -29.7 18.2 -32.2 19.9 -27.8 20.5 -31.4
2026-02-14T17:29:55.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:29:55.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:29:55.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.645591
2026-02-14T17:29:55.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:29:55.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:29:55.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:29:55.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:29:55.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:29:55.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:29:12', tmtdew=14.06, humidity=38.43, cloud=0.0, wind=34.85, temperature=15.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:29:39.062', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:29:55.870 [DEBUG] [Thread-189286] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:29:55.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-14T17:29:55.966 [DEBUG] [Thread-189289] [transport.py] [_log()] starting thread (client mode): 0xa5770400
2026-02-14T17:29:55.966 [DEBUG] [Thread-189289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:29:55.981 [DEBUG] [Thread-189289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:29:55.981 [INFO] [Thread-189289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:29:55.988 [DEBUG] [Thread-189289] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:29:55.989 [DEBUG] [Thread-189289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:29:55.989 [DEBUG] [Thread-189289] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:29:55.989 [DEBUG] [Thread-189289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:29:55.989 [DEBUG] [Thread-189289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:29:55.989 [DEBUG] [Thread-189289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:29:55.989 [DEBUG] [Thread-189289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:29:55.989 [DEBUG] [Thread-189289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:29:55.989 [DEBUG] [Thread-189289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:29:55.989 [DEBUG] [Thread-189289] [transport.py] [_log()] client lang: <none>
2026-02-14T17:29:55.989 [DEBUG] [Thread-189289] [transport.py] [_log()] server lang: <none>
2026-02-14T17:29:55.989 [DEBUG] [Thread-189289] [transport.py] [_log()] kex follows: False
2026-02-14T17:29:55.989 [DEBUG] [Thread-189289] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:29:55.989 [DEBUG] [Thread-189289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:29:55.989 [DEBUG] [Thread-189289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:29:55.989 [DEBUG] [Thread-189289] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:29:55.989 [DEBUG] [Thread-189289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:29:55.989 [DEBUG] [Thread-189289] [transport.py] [_log()] Compression: none
2026-02-14T17:29:55.990 [DEBUG] [Thread-189289] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:29:56.047 [DEBUG] [Thread-189289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:29:56.047 [DEBUG] [Thread-189289] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:29:56.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:29:56.049 [DEBUG] [Thread-189289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:29:56.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:29:56.103 [DEBUG] [Thread-189289] [transport.py] [_log()] userauth is OK
2026-02-14T17:29:56.103 [DEBUG] [Thread-189289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:29:56.103 [DEBUG] [Thread-189289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:29:56.103 [DEBUG] [Thread-189289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:29:56.103 [DEBUG] [Thread-189289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:29:56.126 [INFO] [Thread-189289] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:29:56.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T17:29:56.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:29:56.945 [DEBUG] [Thread-189289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:29:56.945 [DEBUG] [Thread-189289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:29:56.993 [DEBUG] [Thread-189289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:29:56.994 [DEBUG] [Thread-189289] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:29:57.003 [DEBUG] [Thread-189289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:29:57.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:29:57.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-14T17:29:57.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-14T17:29:57.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:29:57.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:29:57.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:29:57.040 [DEBUG] [Thread-189289] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:30:03.217 [DEBUG] [Thread-189291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:30:04.432 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:30:04.433 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:30:18.259 [DEBUG] [Thread-189292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:30:27.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:30:27.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:30:27.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-14T17:30:29.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 29, 47), 13.93, 39.12, 0.0, 35.31, 15.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:30:29.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:29:47
2026-02-14T17:30:29.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:30:29.710 [DEBUG] [Thread-189293] [transport.py] [_log()] starting thread (client mode): 0xa2db6890
2026-02-14T17:30:29.710 [DEBUG] [Thread-189293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:30:29.729 [DEBUG] [Thread-189293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:30:29.729 [INFO] [Thread-189293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:30:29.732 [DEBUG] [Thread-189293] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:30:29.733 [DEBUG] [Thread-189293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:30:29.733 [DEBUG] [Thread-189293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:30:29.733 [DEBUG] [Thread-189293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:30:29.733 [DEBUG] [Thread-189293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:30:29.733 [DEBUG] [Thread-189293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:30:29.733 [DEBUG] [Thread-189293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:30:29.733 [DEBUG] [Thread-189293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:30:29.733 [DEBUG] [Thread-189293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:30:29.733 [DEBUG] [Thread-189293] [transport.py] [_log()] client lang: <none>
2026-02-14T17:30:29.733 [DEBUG] [Thread-189293] [transport.py] [_log()] server lang: <none>
2026-02-14T17:30:29.733 [DEBUG] [Thread-189293] [transport.py] [_log()] kex follows: False
2026-02-14T17:30:29.733 [DEBUG] [Thread-189293] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:30:29.733 [DEBUG] [Thread-189293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:30:29.733 [DEBUG] [Thread-189293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:30:29.733 [DEBUG] [Thread-189293] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:30:29.733 [DEBUG] [Thread-189293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:30:29.733 [DEBUG] [Thread-189293] [transport.py] [_log()] Compression: none
2026-02-14T17:30:29.734 [DEBUG] [Thread-189293] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:30:29.752 [DEBUG] [Thread-189293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:30:29.752 [DEBUG] [Thread-189293] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:30:29.753 [DEBUG] [Thread-189293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:30:29.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:30:29.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:30:29.755 [DEBUG] [Thread-189293] [transport.py] [_log()] userauth is OK
2026-02-14T17:30:29.755 [DEBUG] [Thread-189293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:30:29.755 [DEBUG] [Thread-189293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:30:29.755 [DEBUG] [Thread-189293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:30:29.755 [DEBUG] [Thread-189293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:30:29.793 [INFO] [Thread-189293] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:30:29.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:30:30.441 [DEBUG] [Thread-189293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:30:30.442 [DEBUG] [Thread-189293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:30:30.442 [DEBUG] [Thread-189293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:30:30.483 [DEBUG] [Thread-189293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:30:30.483 [DEBUG] [Thread-189293] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:30:30.487 [DEBUG] [Thread-189293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:30:30.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:30:30.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:30:30.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:30:30.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:30:30.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:30:30.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:30:30.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:30:30.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:30:30.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:30:30.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.645938 -999.00  +15.10  30.96     46   +3.70 1 1 2 1 1   887    0 10.96 -36.28 ----- 33.9 31.0 187.4 40.2 18.6 -29.4 18.1 -31.0 19.9 -26.6 20.4 -30.0
2026-02-14T17:30:30.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:30:30.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:30:30.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.645938
2026-02-14T17:30:30.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:30:30.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:30:30.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:30:30.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:30:30.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:30:30.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:29:47', tmtdew=13.93, humidity=39.12, cloud=0.0, wind=35.31, temperature=15.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:30:09.043', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:30:30.515 [DEBUG] [Thread-189293] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:30:30.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-14T17:30:30.609 [DEBUG] [Thread-189296] [transport.py] [_log()] starting thread (client mode): 0xa57709d0
2026-02-14T17:30:30.609 [DEBUG] [Thread-189296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:30:30.625 [DEBUG] [Thread-189296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:30:30.625 [INFO] [Thread-189296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:30:30.633 [DEBUG] [Thread-189296] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:30:30.633 [DEBUG] [Thread-189296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:30:30.633 [DEBUG] [Thread-189296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:30:30.633 [DEBUG] [Thread-189296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:30:30.633 [DEBUG] [Thread-189296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:30:30.633 [DEBUG] [Thread-189296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:30:30.633 [DEBUG] [Thread-189296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:30:30.633 [DEBUG] [Thread-189296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:30:30.633 [DEBUG] [Thread-189296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:30:30.633 [DEBUG] [Thread-189296] [transport.py] [_log()] client lang: <none>
2026-02-14T17:30:30.633 [DEBUG] [Thread-189296] [transport.py] [_log()] server lang: <none>
2026-02-14T17:30:30.633 [DEBUG] [Thread-189296] [transport.py] [_log()] kex follows: False
2026-02-14T17:30:30.633 [DEBUG] [Thread-189296] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:30:30.634 [DEBUG] [Thread-189296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:30:30.634 [DEBUG] [Thread-189296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:30:30.634 [DEBUG] [Thread-189296] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:30:30.634 [DEBUG] [Thread-189296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:30:30.634 [DEBUG] [Thread-189296] [transport.py] [_log()] Compression: none
2026-02-14T17:30:30.634 [DEBUG] [Thread-189296] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:30:30.692 [DEBUG] [Thread-189296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:30:30.693 [DEBUG] [Thread-189296] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:30:30.693 [DEBUG] [Thread-189296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:30:30.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:30:30.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:30:30.748 [DEBUG] [Thread-189296] [transport.py] [_log()] userauth is OK
2026-02-14T17:30:30.748 [DEBUG] [Thread-189296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:30:30.748 [DEBUG] [Thread-189296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:30:30.749 [DEBUG] [Thread-189296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:30:30.749 [DEBUG] [Thread-189296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:30:30.773 [INFO] [Thread-189296] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:30:30.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-14T17:30:30.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:30:31.609 [DEBUG] [Thread-189296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:30:31.609 [DEBUG] [Thread-189296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:30:31.657 [DEBUG] [Thread-189296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:30:31.657 [DEBUG] [Thread-189296] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:30:31.666 [DEBUG] [Thread-189296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:30:31.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:30:31.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-14T17:30:31.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:30:31.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:30:31.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:30:31.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:30:31.702 [DEBUG] [Thread-189296] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:30:33.298 [DEBUG] [Thread-189298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:30:33.981 [DEBUG] [Thread-189299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:30:48.348 [DEBUG] [Thread-189300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:31:01.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:31:01.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:31:01.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-14T17:31:03.385 [DEBUG] [Thread-189301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:31:04.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 30, 23), 13.85, 39.32, 0.0, 42.57, 15.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:31:04.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:30:23
2026-02-14T17:31:04.571 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:31:04.573 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:31:04.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:31:04.891 [DEBUG] [Thread-189302] [transport.py] [_log()] starting thread (client mode): 0xa57b02b0
2026-02-14T17:31:04.891 [DEBUG] [Thread-189302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:31:04.904 [DEBUG] [Thread-189302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:31:04.904 [INFO] [Thread-189302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:31:04.905 [DEBUG] [Thread-189302] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:31:04.905 [DEBUG] [Thread-189302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:31:04.905 [DEBUG] [Thread-189302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:31:04.905 [DEBUG] [Thread-189302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:31:04.905 [DEBUG] [Thread-189302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:31:04.905 [DEBUG] [Thread-189302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:31:04.905 [DEBUG] [Thread-189302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:31:04.905 [DEBUG] [Thread-189302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:31:04.905 [DEBUG] [Thread-189302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:31:04.905 [DEBUG] [Thread-189302] [transport.py] [_log()] client lang: <none>
2026-02-14T17:31:04.905 [DEBUG] [Thread-189302] [transport.py] [_log()] server lang: <none>
2026-02-14T17:31:04.905 [DEBUG] [Thread-189302] [transport.py] [_log()] kex follows: False
2026-02-14T17:31:04.905 [DEBUG] [Thread-189302] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:31:04.905 [DEBUG] [Thread-189302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:31:04.905 [DEBUG] [Thread-189302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:31:04.905 [DEBUG] [Thread-189302] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:31:04.905 [DEBUG] [Thread-189302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:31:04.905 [DEBUG] [Thread-189302] [transport.py] [_log()] Compression: none
2026-02-14T17:31:04.905 [DEBUG] [Thread-189302] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:31:04.912 [DEBUG] [Thread-189302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:31:04.913 [DEBUG] [Thread-189302] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:31:04.913 [DEBUG] [Thread-189302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:31:04.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:31:04.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:31:04.914 [DEBUG] [Thread-189302] [transport.py] [_log()] userauth is OK
2026-02-14T17:31:04.914 [DEBUG] [Thread-189302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:31:04.914 [DEBUG] [Thread-189302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:31:04.914 [DEBUG] [Thread-189302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:31:04.914 [DEBUG] [Thread-189302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:31:04.927 [INFO] [Thread-189302] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:31:04.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:31:05.580 [DEBUG] [Thread-189302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:31:05.581 [DEBUG] [Thread-189302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:31:05.581 [DEBUG] [Thread-189302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:31:05.621 [DEBUG] [Thread-189302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:31:05.622 [DEBUG] [Thread-189302] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:31:05.625 [DEBUG] [Thread-189302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:31:05.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:31:05.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:31:05.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:31:05.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:31:05.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:31:05.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:31:05.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:31:05.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:31:05.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:31:05.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.646286 -999.00  +15.10  25.50     46   +3.70 1 1 1 1 1   887    0 10.75 -38.43 ----- 30.9 25.5 166.4 38.6 18.6 -27.9 18.2 -27.0 19.8 -27.0 20.4 -27.7
2026-02-14T17:31:05.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:31:05.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:31:05.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.646286
2026-02-14T17:31:05.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:31:05.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:31:05.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:31:05.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:31:05.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:31:05.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:30:23', tmtdew=13.85, humidity=39.32, cloud=0.0, wind=42.57, temperature=15.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:30:39.110', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:31:05.653 [DEBUG] [Thread-189302] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:31:05.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T17:31:05.747 [DEBUG] [Thread-189305] [transport.py] [_log()] starting thread (client mode): 0xa5772680
2026-02-14T17:31:05.748 [DEBUG] [Thread-189305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:31:05.762 [DEBUG] [Thread-189305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:31:05.763 [INFO] [Thread-189305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:31:05.770 [DEBUG] [Thread-189305] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:31:05.770 [DEBUG] [Thread-189305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:31:05.770 [DEBUG] [Thread-189305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:31:05.770 [DEBUG] [Thread-189305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:31:05.770 [DEBUG] [Thread-189305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:31:05.770 [DEBUG] [Thread-189305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:31:05.770 [DEBUG] [Thread-189305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:31:05.770 [DEBUG] [Thread-189305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:31:05.770 [DEBUG] [Thread-189305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:31:05.770 [DEBUG] [Thread-189305] [transport.py] [_log()] client lang: <none>
2026-02-14T17:31:05.771 [DEBUG] [Thread-189305] [transport.py] [_log()] server lang: <none>
2026-02-14T17:31:05.771 [DEBUG] [Thread-189305] [transport.py] [_log()] kex follows: False
2026-02-14T17:31:05.771 [DEBUG] [Thread-189305] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:31:05.771 [DEBUG] [Thread-189305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:31:05.771 [DEBUG] [Thread-189305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:31:05.771 [DEBUG] [Thread-189305] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:31:05.771 [DEBUG] [Thread-189305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:31:05.771 [DEBUG] [Thread-189305] [transport.py] [_log()] Compression: none
2026-02-14T17:31:05.771 [DEBUG] [Thread-189305] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:31:05.828 [DEBUG] [Thread-189305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:31:05.829 [DEBUG] [Thread-189305] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:31:05.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:31:05.830 [DEBUG] [Thread-189305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:31:05.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:31:05.884 [DEBUG] [Thread-189305] [transport.py] [_log()] userauth is OK
2026-02-14T17:31:05.884 [DEBUG] [Thread-189305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:31:05.884 [DEBUG] [Thread-189305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:31:05.885 [DEBUG] [Thread-189305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:31:05.885 [DEBUG] [Thread-189305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:31:05.909 [INFO] [Thread-189305] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:31:05.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T17:31:05.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:31:06.727 [DEBUG] [Thread-189305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:31:06.727 [DEBUG] [Thread-189305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:31:06.777 [DEBUG] [Thread-189305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:31:06.777 [DEBUG] [Thread-189305] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:31:06.791 [DEBUG] [Thread-189305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:31:06.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:31:06.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-14T17:31:06.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-14T17:31:06.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:31:06.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:31:06.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:31:06.827 [DEBUG] [Thread-189305] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:31:18.422 [DEBUG] [Thread-189307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:31:33.477 [DEBUG] [Thread-189308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:31:34.014 [DEBUG] [Thread-189309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:31:36.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:31:36.847 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:31:36.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-14T17:31:39.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 30, 58), 13.66, 39.92, 0.0, 43.62, 15.59, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:31:39.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:30:58
2026-02-14T17:31:39.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:31:39.578 [DEBUG] [Thread-189310] [transport.py] [_log()] starting thread (client mode): 0xa5771780
2026-02-14T17:31:39.578 [DEBUG] [Thread-189310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:31:39.597 [DEBUG] [Thread-189310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:31:39.598 [INFO] [Thread-189310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:31:39.600 [DEBUG] [Thread-189310] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:31:39.601 [DEBUG] [Thread-189310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:31:39.601 [DEBUG] [Thread-189310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:31:39.601 [DEBUG] [Thread-189310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:31:39.601 [DEBUG] [Thread-189310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:31:39.601 [DEBUG] [Thread-189310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:31:39.601 [DEBUG] [Thread-189310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:31:39.601 [DEBUG] [Thread-189310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:31:39.601 [DEBUG] [Thread-189310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:31:39.601 [DEBUG] [Thread-189310] [transport.py] [_log()] client lang: <none>
2026-02-14T17:31:39.601 [DEBUG] [Thread-189310] [transport.py] [_log()] server lang: <none>
2026-02-14T17:31:39.601 [DEBUG] [Thread-189310] [transport.py] [_log()] kex follows: False
2026-02-14T17:31:39.601 [DEBUG] [Thread-189310] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:31:39.602 [DEBUG] [Thread-189310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:31:39.602 [DEBUG] [Thread-189310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:31:39.602 [DEBUG] [Thread-189310] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:31:39.602 [DEBUG] [Thread-189310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:31:39.602 [DEBUG] [Thread-189310] [transport.py] [_log()] Compression: none
2026-02-14T17:31:39.602 [DEBUG] [Thread-189310] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:31:39.621 [DEBUG] [Thread-189310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:31:39.621 [DEBUG] [Thread-189310] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:31:39.622 [DEBUG] [Thread-189310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:31:39.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:31:39.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:31:39.624 [DEBUG] [Thread-189310] [transport.py] [_log()] userauth is OK
2026-02-14T17:31:39.624 [DEBUG] [Thread-189310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:31:39.624 [DEBUG] [Thread-189310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:31:39.624 [DEBUG] [Thread-189310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:31:39.624 [DEBUG] [Thread-189310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:31:39.651 [INFO] [Thread-189310] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:31:39.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:31:40.318 [DEBUG] [Thread-189310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:31:40.318 [DEBUG] [Thread-189310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:31:40.319 [DEBUG] [Thread-189310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:31:40.359 [DEBUG] [Thread-189310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:31:40.360 [DEBUG] [Thread-189310] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:31:40.363 [DEBUG] [Thread-189310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:31:40.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:31:40.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:31:40.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:31:40.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:31:40.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:31:40.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:31:40.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:31:40.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:31:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:31:40.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.646633 -999.00  +15.10  31.14     46   +3.60 1 1 2 1 1   887    0 10.71 -38.48 ----- 37.5 31.1 173.5 40.2 18.6 -28.2 18.2 -30.8 19.9 -25.8 20.4 -29.6
2026-02-14T17:31:40.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:31:40.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:31:40.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.646633
2026-02-14T17:31:40.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:31:40.392 [DEBUG] [Thread-189310] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:31:40.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:31:40.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:31:40.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:31:40.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:31:40.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:30:58', tmtdew=13.66, humidity=39.92, cloud=0.0, wind=43.62, temperature=15.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:31:09.091', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:31:40.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-14T17:31:40.488 [DEBUG] [Thread-189313] [transport.py] [_log()] starting thread (client mode): 0xa2d792d0
2026-02-14T17:31:40.488 [DEBUG] [Thread-189313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:31:40.502 [DEBUG] [Thread-189313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:31:40.503 [INFO] [Thread-189313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:31:40.510 [DEBUG] [Thread-189313] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:31:40.510 [DEBUG] [Thread-189313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:31:40.510 [DEBUG] [Thread-189313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:31:40.510 [DEBUG] [Thread-189313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:31:40.510 [DEBUG] [Thread-189313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:31:40.510 [DEBUG] [Thread-189313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:31:40.510 [DEBUG] [Thread-189313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:31:40.511 [DEBUG] [Thread-189313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:31:40.511 [DEBUG] [Thread-189313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:31:40.511 [DEBUG] [Thread-189313] [transport.py] [_log()] client lang: <none>
2026-02-14T17:31:40.511 [DEBUG] [Thread-189313] [transport.py] [_log()] server lang: <none>
2026-02-14T17:31:40.511 [DEBUG] [Thread-189313] [transport.py] [_log()] kex follows: False
2026-02-14T17:31:40.511 [DEBUG] [Thread-189313] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:31:40.511 [DEBUG] [Thread-189313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:31:40.511 [DEBUG] [Thread-189313] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:31:40.511 [DEBUG] [Thread-189313] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:31:40.511 [DEBUG] [Thread-189313] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:31:40.511 [DEBUG] [Thread-189313] [transport.py] [_log()] Compression: none
2026-02-14T17:31:40.511 [DEBUG] [Thread-189313] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:31:40.569 [DEBUG] [Thread-189313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:31:40.569 [DEBUG] [Thread-189313] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:31:40.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:31:40.570 [DEBUG] [Thread-189313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:31:40.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:31:40.625 [DEBUG] [Thread-189313] [transport.py] [_log()] userauth is OK
2026-02-14T17:31:40.625 [DEBUG] [Thread-189313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:31:40.625 [DEBUG] [Thread-189313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:31:40.625 [DEBUG] [Thread-189313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:31:40.625 [DEBUG] [Thread-189313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:31:40.644 [INFO] [Thread-189313] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:31:40.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-14T17:31:40.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:31:41.457 [DEBUG] [Thread-189313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:31:41.457 [DEBUG] [Thread-189313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:31:41.505 [DEBUG] [Thread-189313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:31:41.505 [DEBUG] [Thread-189313] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:31:41.516 [DEBUG] [Thread-189313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:31:41.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:31:41.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:31:41.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:31:41.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:31:41.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:31:41.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:31:41.554 [DEBUG] [Thread-189313] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:31:48.514 [DEBUG] [Thread-189315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:32:03.575 [DEBUG] [Thread-189316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:32:04.714 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:32:04.715 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:32:11.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:32:11.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:32:11.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-14T17:32:14.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 31, 35), 14.7, 37.13, 0.0, 44.0, 16.71, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:32:14.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:31:35
2026-02-14T17:32:14.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:32:15.055 [DEBUG] [Thread-189317] [transport.py] [_log()] starting thread (client mode): 0xa2d78d00
2026-02-14T17:32:15.055 [DEBUG] [Thread-189317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:32:15.075 [DEBUG] [Thread-189317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:32:15.075 [INFO] [Thread-189317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:32:15.079 [DEBUG] [Thread-189317] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:32:15.079 [DEBUG] [Thread-189317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:32:15.079 [DEBUG] [Thread-189317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:32:15.079 [DEBUG] [Thread-189317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:32:15.079 [DEBUG] [Thread-189317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:32:15.079 [DEBUG] [Thread-189317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:32:15.079 [DEBUG] [Thread-189317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:32:15.079 [DEBUG] [Thread-189317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:32:15.079 [DEBUG] [Thread-189317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:32:15.079 [DEBUG] [Thread-189317] [transport.py] [_log()] client lang: <none>
2026-02-14T17:32:15.080 [DEBUG] [Thread-189317] [transport.py] [_log()] server lang: <none>
2026-02-14T17:32:15.080 [DEBUG] [Thread-189317] [transport.py] [_log()] kex follows: False
2026-02-14T17:32:15.080 [DEBUG] [Thread-189317] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:32:15.080 [DEBUG] [Thread-189317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:32:15.080 [DEBUG] [Thread-189317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:32:15.080 [DEBUG] [Thread-189317] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:32:15.080 [DEBUG] [Thread-189317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:32:15.080 [DEBUG] [Thread-189317] [transport.py] [_log()] Compression: none
2026-02-14T17:32:15.080 [DEBUG] [Thread-189317] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:32:15.098 [DEBUG] [Thread-189317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:32:15.098 [DEBUG] [Thread-189317] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:32:15.099 [DEBUG] [Thread-189317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:32:15.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:32:15.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:32:15.101 [DEBUG] [Thread-189317] [transport.py] [_log()] userauth is OK
2026-02-14T17:32:15.101 [DEBUG] [Thread-189317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:32:15.101 [DEBUG] [Thread-189317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:32:15.101 [DEBUG] [Thread-189317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:32:15.101 [DEBUG] [Thread-189317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:32:15.137 [INFO] [Thread-189317] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:32:15.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:32:15.749 [DEBUG] [Thread-189317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:32:15.749 [DEBUG] [Thread-189317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:32:15.749 [DEBUG] [Thread-189317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:32:15.789 [DEBUG] [Thread-189317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:32:15.790 [DEBUG] [Thread-189317] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:32:15.793 [DEBUG] [Thread-189317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:32:15.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:32:15.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:32:15.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:32:15.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:32:15.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:32:15.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:32:15.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:32:15.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:32:15.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:32:15.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.646980 -999.00  +15.00  26.40     46   +3.60 1 1 1 1 1   887    0 10.92 -40.12 ----- 24.9 26.4 174.2 45.7 18.6 -28.2 18.2 -28.1 19.8 -27.1 20.4 -28.3
2026-02-14T17:32:15.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:32:15.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:32:15.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.646980
2026-02-14T17:32:15.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:32:15.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:32:15.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:32:15.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:32:15.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:32:15.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:31:35', tmtdew=14.7, humidity=37.13, cloud=0.0, wind=44.0, temperature=16.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:31:39.072', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:32:15.824 [DEBUG] [Thread-189317] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:32:15.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-14T17:32:15.919 [DEBUG] [Thread-189320] [transport.py] [_log()] starting thread (client mode): 0xa5770430
2026-02-14T17:32:15.919 [DEBUG] [Thread-189320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:32:15.933 [DEBUG] [Thread-189320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:32:15.933 [INFO] [Thread-189320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:32:15.941 [DEBUG] [Thread-189320] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:32:15.941 [DEBUG] [Thread-189320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:32:15.941 [DEBUG] [Thread-189320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:32:15.941 [DEBUG] [Thread-189320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:32:15.941 [DEBUG] [Thread-189320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:32:15.941 [DEBUG] [Thread-189320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:32:15.941 [DEBUG] [Thread-189320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:32:15.941 [DEBUG] [Thread-189320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:32:15.941 [DEBUG] [Thread-189320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:32:15.941 [DEBUG] [Thread-189320] [transport.py] [_log()] client lang: <none>
2026-02-14T17:32:15.941 [DEBUG] [Thread-189320] [transport.py] [_log()] server lang: <none>
2026-02-14T17:32:15.941 [DEBUG] [Thread-189320] [transport.py] [_log()] kex follows: False
2026-02-14T17:32:15.941 [DEBUG] [Thread-189320] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:32:15.941 [DEBUG] [Thread-189320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:32:15.941 [DEBUG] [Thread-189320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:32:15.941 [DEBUG] [Thread-189320] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:32:15.941 [DEBUG] [Thread-189320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:32:15.942 [DEBUG] [Thread-189320] [transport.py] [_log()] Compression: none
2026-02-14T17:32:15.942 [DEBUG] [Thread-189320] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:32:16.001 [DEBUG] [Thread-189320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:32:16.001 [DEBUG] [Thread-189320] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:32:16.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:32:16.003 [DEBUG] [Thread-189320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:32:16.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:32:16.057 [DEBUG] [Thread-189320] [transport.py] [_log()] userauth is OK
2026-02-14T17:32:16.057 [DEBUG] [Thread-189320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:32:16.057 [DEBUG] [Thread-189320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:32:16.057 [DEBUG] [Thread-189320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:32:16.057 [DEBUG] [Thread-189320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:32:16.075 [INFO] [Thread-189320] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:32:16.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-14T17:32:16.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:32:16.877 [DEBUG] [Thread-189320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:32:16.877 [DEBUG] [Thread-189320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:32:16.925 [DEBUG] [Thread-189320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:32:16.926 [DEBUG] [Thread-189320] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:32:16.935 [DEBUG] [Thread-189320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:32:16.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:32:16.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-14T17:32:16.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-14T17:32:16.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:32:16.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:32:16.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:32:16.972 [DEBUG] [Thread-189320] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:32:18.614 [DEBUG] [Thread-189322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:32:33.665 [DEBUG] [Thread-189323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:32:34.059 [DEBUG] [Thread-189324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:32:46.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:32:46.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:32:47.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-14T17:32:48.704 [DEBUG] [Thread-189325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:32:49.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 32, 11), 13.6, 40.07, 0.0, 34.72, 15.52, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:32:49.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:32:11
2026-02-14T17:32:50.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:32:50.285 [DEBUG] [Thread-189326] [transport.py] [_log()] starting thread (client mode): 0xa57b1f60
2026-02-14T17:32:50.286 [DEBUG] [Thread-189326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:32:50.306 [DEBUG] [Thread-189326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:32:50.306 [INFO] [Thread-189326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:32:50.310 [DEBUG] [Thread-189326] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:32:50.310 [DEBUG] [Thread-189326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:32:50.310 [DEBUG] [Thread-189326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:32:50.310 [DEBUG] [Thread-189326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:32:50.310 [DEBUG] [Thread-189326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:32:50.310 [DEBUG] [Thread-189326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:32:50.310 [DEBUG] [Thread-189326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:32:50.310 [DEBUG] [Thread-189326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:32:50.310 [DEBUG] [Thread-189326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:32:50.310 [DEBUG] [Thread-189326] [transport.py] [_log()] client lang: <none>
2026-02-14T17:32:50.310 [DEBUG] [Thread-189326] [transport.py] [_log()] server lang: <none>
2026-02-14T17:32:50.310 [DEBUG] [Thread-189326] [transport.py] [_log()] kex follows: False
2026-02-14T17:32:50.310 [DEBUG] [Thread-189326] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:32:50.310 [DEBUG] [Thread-189326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:32:50.310 [DEBUG] [Thread-189326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:32:50.310 [DEBUG] [Thread-189326] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:32:50.310 [DEBUG] [Thread-189326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:32:50.310 [DEBUG] [Thread-189326] [transport.py] [_log()] Compression: none
2026-02-14T17:32:50.310 [DEBUG] [Thread-189326] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:32:50.327 [DEBUG] [Thread-189326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:32:50.328 [DEBUG] [Thread-189326] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:32:50.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:32:50.329 [DEBUG] [Thread-189326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:32:50.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:32:50.331 [DEBUG] [Thread-189326] [transport.py] [_log()] userauth is OK
2026-02-14T17:32:50.331 [DEBUG] [Thread-189326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:32:50.331 [DEBUG] [Thread-189326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:32:50.331 [DEBUG] [Thread-189326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:32:50.332 [DEBUG] [Thread-189326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:32:50.346 [INFO] [Thread-189326] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:32:50.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:32:51.008 [DEBUG] [Thread-189326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:32:51.008 [DEBUG] [Thread-189326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:32:51.008 [DEBUG] [Thread-189326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:32:51.049 [DEBUG] [Thread-189326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:32:51.049 [DEBUG] [Thread-189326] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:32:51.052 [DEBUG] [Thread-189326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:32:51.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:32:51.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:32:51.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:32:51.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:32:51.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:32:51.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:32:51.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:32:51.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:32:51.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:32:51.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.647328 -999.00  +15.10  23.47     46   +3.70 1 1 1 1 1   887    0 10.69 -42.15 ----- 25.2 23.5 162.8 30.4 18.6 -27.5 18.4 -26.4 19.8 -25.2 20.4 -28.2
2026-02-14T17:32:51.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:32:51.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:32:51.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.647328
2026-02-14T17:32:51.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:32:51.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:32:51.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:32:51.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:32:51.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:32:51.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:32:11', tmtdew=13.6, humidity=40.07, cloud=0.0, wind=34.72, temperature=15.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:32:09.139', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:32:51.080 [DEBUG] [Thread-189326] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:32:51.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-14T17:32:51.175 [DEBUG] [Thread-189329] [transport.py] [_log()] starting thread (client mode): 0xa2d01870
2026-02-14T17:32:51.175 [DEBUG] [Thread-189329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:32:51.189 [DEBUG] [Thread-189329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:32:51.189 [INFO] [Thread-189329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:32:51.197 [DEBUG] [Thread-189329] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:32:51.197 [DEBUG] [Thread-189329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:32:51.197 [DEBUG] [Thread-189329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:32:51.197 [DEBUG] [Thread-189329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:32:51.197 [DEBUG] [Thread-189329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:32:51.197 [DEBUG] [Thread-189329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:32:51.197 [DEBUG] [Thread-189329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:32:51.197 [DEBUG] [Thread-189329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:32:51.197 [DEBUG] [Thread-189329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:32:51.197 [DEBUG] [Thread-189329] [transport.py] [_log()] client lang: <none>
2026-02-14T17:32:51.197 [DEBUG] [Thread-189329] [transport.py] [_log()] server lang: <none>
2026-02-14T17:32:51.197 [DEBUG] [Thread-189329] [transport.py] [_log()] kex follows: False
2026-02-14T17:32:51.197 [DEBUG] [Thread-189329] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:32:51.197 [DEBUG] [Thread-189329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:32:51.197 [DEBUG] [Thread-189329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:32:51.198 [DEBUG] [Thread-189329] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:32:51.198 [DEBUG] [Thread-189329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:32:51.198 [DEBUG] [Thread-189329] [transport.py] [_log()] Compression: none
2026-02-14T17:32:51.198 [DEBUG] [Thread-189329] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:32:51.257 [DEBUG] [Thread-189329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:32:51.257 [DEBUG] [Thread-189329] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:32:51.258 [DEBUG] [Thread-189329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:32:51.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:32:51.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:32:51.313 [DEBUG] [Thread-189329] [transport.py] [_log()] userauth is OK
2026-02-14T17:32:51.313 [DEBUG] [Thread-189329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:32:51.313 [DEBUG] [Thread-189329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:32:51.313 [DEBUG] [Thread-189329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:32:51.314 [DEBUG] [Thread-189329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:32:51.331 [INFO] [Thread-189329] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:32:51.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-14T17:32:51.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:32:52.144 [DEBUG] [Thread-189329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:32:52.145 [DEBUG] [Thread-189329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:32:52.192 [DEBUG] [Thread-189329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:32:52.193 [DEBUG] [Thread-189329] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:32:52.202 [DEBUG] [Thread-189329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:32:52.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:32:52.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:32:52.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:32:52.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:32:52.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:32:52.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:32:52.239 [DEBUG] [Thread-189329] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:33:03.742 [DEBUG] [Thread-189331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:33:04.857 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:33:04.858 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:33:18.794 [DEBUG] [Thread-189332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:33:22.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:33:22.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:33:22.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-14T17:33:24.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 32, 47), 13.87, 39.02, 0.0, 40.33, 15.84, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:33:24.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:32:47
2026-02-14T17:33:24.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:33:25.084 [DEBUG] [Thread-189333] [transport.py] [_log()] starting thread (client mode): 0xa575b550
2026-02-14T17:33:25.084 [DEBUG] [Thread-189333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:33:25.103 [DEBUG] [Thread-189333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:33:25.104 [INFO] [Thread-189333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:33:25.107 [DEBUG] [Thread-189333] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:33:25.107 [DEBUG] [Thread-189333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:33:25.107 [DEBUG] [Thread-189333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:33:25.107 [DEBUG] [Thread-189333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:33:25.107 [DEBUG] [Thread-189333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:33:25.107 [DEBUG] [Thread-189333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:33:25.107 [DEBUG] [Thread-189333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:33:25.107 [DEBUG] [Thread-189333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:33:25.107 [DEBUG] [Thread-189333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:33:25.108 [DEBUG] [Thread-189333] [transport.py] [_log()] client lang: <none>
2026-02-14T17:33:25.108 [DEBUG] [Thread-189333] [transport.py] [_log()] server lang: <none>
2026-02-14T17:33:25.108 [DEBUG] [Thread-189333] [transport.py] [_log()] kex follows: False
2026-02-14T17:33:25.108 [DEBUG] [Thread-189333] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:33:25.108 [DEBUG] [Thread-189333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:33:25.108 [DEBUG] [Thread-189333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:33:25.108 [DEBUG] [Thread-189333] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:33:25.108 [DEBUG] [Thread-189333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:33:25.108 [DEBUG] [Thread-189333] [transport.py] [_log()] Compression: none
2026-02-14T17:33:25.108 [DEBUG] [Thread-189333] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:33:25.126 [DEBUG] [Thread-189333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:33:25.127 [DEBUG] [Thread-189333] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:33:25.128 [DEBUG] [Thread-189333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:33:25.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:33:25.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:33:25.130 [DEBUG] [Thread-189333] [transport.py] [_log()] userauth is OK
2026-02-14T17:33:25.130 [DEBUG] [Thread-189333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:33:25.130 [DEBUG] [Thread-189333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:33:25.130 [DEBUG] [Thread-189333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:33:25.130 [DEBUG] [Thread-189333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:33:25.150 [INFO] [Thread-189333] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:33:25.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:33:25.785 [DEBUG] [Thread-189333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:33:25.786 [DEBUG] [Thread-189333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:33:25.786 [DEBUG] [Thread-189333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:33:25.826 [DEBUG] [Thread-189333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:33:25.827 [DEBUG] [Thread-189333] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:33:25.829 [DEBUG] [Thread-189333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:33:25.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:33:25.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:33:25.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:33:25.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:33:25.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:33:25.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:33:25.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:33:25.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:33:25.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:33:25.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.647675 -999.00  +15.10  27.76     46   +3.70 1 1 1 1 1   887    0 10.60 -38.85 ----- 27.7 27.8 177.6 39.0 18.7 -28.3 18.3 -28.5 19.9 -24.6 20.5 -27.7
2026-02-14T17:33:25.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:33:25.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:33:25.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.647675
2026-02-14T17:33:25.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:33:25.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:33:25.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:33:25.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:33:25.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:33:25.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:32:47', tmtdew=13.87, humidity=39.02, cloud=0.0, wind=40.33, temperature=15.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:32:39.120', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:33:25.857 [DEBUG] [Thread-189333] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:33:25.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-14T17:33:25.952 [DEBUG] [Thread-189336] [transport.py] [_log()] starting thread (client mode): 0xa2d7ba90
2026-02-14T17:33:25.952 [DEBUG] [Thread-189336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:33:25.966 [DEBUG] [Thread-189336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:33:25.966 [INFO] [Thread-189336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:33:25.974 [DEBUG] [Thread-189336] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:33:25.974 [DEBUG] [Thread-189336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:33:25.974 [DEBUG] [Thread-189336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:33:25.974 [DEBUG] [Thread-189336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:33:25.974 [DEBUG] [Thread-189336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:33:25.974 [DEBUG] [Thread-189336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:33:25.974 [DEBUG] [Thread-189336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:33:25.975 [DEBUG] [Thread-189336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:33:25.975 [DEBUG] [Thread-189336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:33:25.975 [DEBUG] [Thread-189336] [transport.py] [_log()] client lang: <none>
2026-02-14T17:33:25.975 [DEBUG] [Thread-189336] [transport.py] [_log()] server lang: <none>
2026-02-14T17:33:25.975 [DEBUG] [Thread-189336] [transport.py] [_log()] kex follows: False
2026-02-14T17:33:25.975 [DEBUG] [Thread-189336] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:33:25.975 [DEBUG] [Thread-189336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:33:25.975 [DEBUG] [Thread-189336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:33:25.975 [DEBUG] [Thread-189336] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:33:25.975 [DEBUG] [Thread-189336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:33:25.975 [DEBUG] [Thread-189336] [transport.py] [_log()] Compression: none
2026-02-14T17:33:25.975 [DEBUG] [Thread-189336] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:33:26.033 [DEBUG] [Thread-189336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:33:26.033 [DEBUG] [Thread-189336] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:33:26.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:33:26.034 [DEBUG] [Thread-189336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:33:26.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:33:26.089 [DEBUG] [Thread-189336] [transport.py] [_log()] userauth is OK
2026-02-14T17:33:26.089 [DEBUG] [Thread-189336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:33:26.089 [DEBUG] [Thread-189336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:33:26.090 [DEBUG] [Thread-189336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:33:26.090 [DEBUG] [Thread-189336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:33:26.109 [INFO] [Thread-189336] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:33:26.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T17:33:26.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:33:26.943 [DEBUG] [Thread-189336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:33:26.943 [DEBUG] [Thread-189336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:33:26.991 [DEBUG] [Thread-189336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:33:26.992 [DEBUG] [Thread-189336] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:33:27.001 [DEBUG] [Thread-189336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:33:27.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:33:27.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:33:27.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:33:27.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:33:27.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:33:27.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:33:27.038 [DEBUG] [Thread-189336] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:33:33.834 [DEBUG] [Thread-189338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:33:34.104 [DEBUG] [Thread-189339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:33:48.896 [DEBUG] [Thread-189340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:33:57.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:33:57.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:33:57.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-14T17:33:59.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 33, 23), 13.87, 39.0, 0.0, 37.69, 15.81, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:33:59.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:33:23
2026-02-14T17:33:59.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:33:59.546 [DEBUG] [Thread-189341] [transport.py] [_log()] starting thread (client mode): 0xa2d02680
2026-02-14T17:33:59.546 [DEBUG] [Thread-189341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:33:59.567 [DEBUG] [Thread-189341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:33:59.567 [INFO] [Thread-189341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:33:59.570 [DEBUG] [Thread-189341] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:33:59.570 [DEBUG] [Thread-189341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:33:59.570 [DEBUG] [Thread-189341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:33:59.571 [DEBUG] [Thread-189341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:33:59.571 [DEBUG] [Thread-189341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:33:59.571 [DEBUG] [Thread-189341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:33:59.571 [DEBUG] [Thread-189341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:33:59.571 [DEBUG] [Thread-189341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:33:59.571 [DEBUG] [Thread-189341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:33:59.571 [DEBUG] [Thread-189341] [transport.py] [_log()] client lang: <none>
2026-02-14T17:33:59.571 [DEBUG] [Thread-189341] [transport.py] [_log()] server lang: <none>
2026-02-14T17:33:59.571 [DEBUG] [Thread-189341] [transport.py] [_log()] kex follows: False
2026-02-14T17:33:59.571 [DEBUG] [Thread-189341] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:33:59.571 [DEBUG] [Thread-189341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:33:59.571 [DEBUG] [Thread-189341] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:33:59.571 [DEBUG] [Thread-189341] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:33:59.571 [DEBUG] [Thread-189341] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:33:59.571 [DEBUG] [Thread-189341] [transport.py] [_log()] Compression: none
2026-02-14T17:33:59.571 [DEBUG] [Thread-189341] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:33:59.582 [DEBUG] [Thread-189341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:33:59.582 [DEBUG] [Thread-189341] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:33:59.583 [DEBUG] [Thread-189341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:33:59.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:33:59.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:33:59.584 [DEBUG] [Thread-189341] [transport.py] [_log()] userauth is OK
2026-02-14T17:33:59.584 [DEBUG] [Thread-189341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:33:59.585 [DEBUG] [Thread-189341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:33:59.585 [DEBUG] [Thread-189341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:33:59.585 [DEBUG] [Thread-189341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:33:59.607 [INFO] [Thread-189341] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:33:59.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:34:00.230 [DEBUG] [Thread-189341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:34:00.230 [DEBUG] [Thread-189341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:34:00.230 [DEBUG] [Thread-189341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:34:00.271 [DEBUG] [Thread-189341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:34:00.272 [DEBUG] [Thread-189341] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:34:00.275 [DEBUG] [Thread-189341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:34:00.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:34:00.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:34:00.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:34:00.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:34:00.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:34:00.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:34:00.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:34:00.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:34:00.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:34:00.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.648369 -999.00  +15.20  30.23     45   +3.60 1 1 2 1 1   887    0 10.82 -30.35 ----- 28.7 30.2 165.8 44.8 18.6 -28.3 18.4 -26.4 19.8 -25.8 20.4 -27.8
2026-02-14T17:34:00.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:34:00.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:34:00.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.648369
2026-02-14T17:34:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:34:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:34:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:34:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:34:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:34:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:33:23', tmtdew=13.87, humidity=39.0, cloud=0.0, wind=37.69, temperature=15.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:33:39.082', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:34:00.301 [DEBUG] [Thread-189341] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:34:00.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-14T17:34:00.402 [DEBUG] [Thread-189344] [transport.py] [_log()] starting thread (client mode): 0xa2d03b20
2026-02-14T17:34:00.403 [DEBUG] [Thread-189344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:34:00.418 [DEBUG] [Thread-189344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:34:00.418 [INFO] [Thread-189344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:34:00.425 [DEBUG] [Thread-189344] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:34:00.425 [DEBUG] [Thread-189344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:34:00.425 [DEBUG] [Thread-189344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:34:00.425 [DEBUG] [Thread-189344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:34:00.425 [DEBUG] [Thread-189344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:34:00.426 [DEBUG] [Thread-189344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:34:00.426 [DEBUG] [Thread-189344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:34:00.426 [DEBUG] [Thread-189344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:34:00.426 [DEBUG] [Thread-189344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:34:00.426 [DEBUG] [Thread-189344] [transport.py] [_log()] client lang: <none>
2026-02-14T17:34:00.426 [DEBUG] [Thread-189344] [transport.py] [_log()] server lang: <none>
2026-02-14T17:34:00.426 [DEBUG] [Thread-189344] [transport.py] [_log()] kex follows: False
2026-02-14T17:34:00.426 [DEBUG] [Thread-189344] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:34:00.426 [DEBUG] [Thread-189344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:34:00.426 [DEBUG] [Thread-189344] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:34:00.426 [DEBUG] [Thread-189344] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:34:00.426 [DEBUG] [Thread-189344] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:34:00.427 [DEBUG] [Thread-189344] [transport.py] [_log()] Compression: none
2026-02-14T17:34:00.427 [DEBUG] [Thread-189344] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:34:00.484 [DEBUG] [Thread-189344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:34:00.485 [DEBUG] [Thread-189344] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:34:00.485 [DEBUG] [Thread-189344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:34:00.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:34:00.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:34:00.541 [DEBUG] [Thread-189344] [transport.py] [_log()] userauth is OK
2026-02-14T17:34:00.541 [DEBUG] [Thread-189344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:34:00.541 [DEBUG] [Thread-189344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:34:00.541 [DEBUG] [Thread-189344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:34:00.541 [DEBUG] [Thread-189344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:34:00.564 [INFO] [Thread-189344] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:34:00.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-14T17:34:00.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:34:01.388 [DEBUG] [Thread-189344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:34:01.388 [DEBUG] [Thread-189344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:34:01.436 [DEBUG] [Thread-189344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:34:01.436 [DEBUG] [Thread-189344] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:34:01.445 [DEBUG] [Thread-189344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:34:01.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:34:01.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-14T17:34:01.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:34:01.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:34:01.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:34:01.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:34:01.478 [DEBUG] [Thread-189344] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:34:03.930 [DEBUG] [Thread-189346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:34:05.000 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:34:05.001 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:34:18.981 [DEBUG] [Thread-189347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:34:31.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:34:31.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:34:31.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T17:34:33.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 33, 23), 13.87, 39.0, 0.0, 37.69, 15.81, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:34:33.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:33:23
2026-02-14T17:34:33.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:34:33.970 [DEBUG] [Thread-189348] [transport.py] [_log()] starting thread (client mode): 0xa2d7a500
2026-02-14T17:34:33.970 [DEBUG] [Thread-189348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:34:33.990 [DEBUG] [Thread-189348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:34:33.990 [INFO] [Thread-189348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:34:33.993 [DEBUG] [Thread-189348] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:34:33.993 [DEBUG] [Thread-189348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:34:33.993 [DEBUG] [Thread-189348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:34:33.993 [DEBUG] [Thread-189348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:34:33.993 [DEBUG] [Thread-189348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:34:33.993 [DEBUG] [Thread-189348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:34:33.993 [DEBUG] [Thread-189348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:34:33.993 [DEBUG] [Thread-189348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:34:33.993 [DEBUG] [Thread-189348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:34:33.993 [DEBUG] [Thread-189348] [transport.py] [_log()] client lang: <none>
2026-02-14T17:34:33.993 [DEBUG] [Thread-189348] [transport.py] [_log()] server lang: <none>
2026-02-14T17:34:33.994 [DEBUG] [Thread-189348] [transport.py] [_log()] kex follows: False
2026-02-14T17:34:33.994 [DEBUG] [Thread-189348] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:34:33.994 [DEBUG] [Thread-189348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:34:33.994 [DEBUG] [Thread-189348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:34:33.994 [DEBUG] [Thread-189348] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:34:33.994 [DEBUG] [Thread-189348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:34:33.994 [DEBUG] [Thread-189348] [transport.py] [_log()] Compression: none
2026-02-14T17:34:33.994 [DEBUG] [Thread-189348] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:34:34.011 [DEBUG] [Thread-189348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:34:34.012 [DEBUG] [Thread-189348] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:34:34.013 [DEBUG] [Thread-189348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:34:34.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:34:34.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:34:34.015 [DEBUG] [Thread-189348] [transport.py] [_log()] userauth is OK
2026-02-14T17:34:34.015 [DEBUG] [Thread-189348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:34:34.015 [DEBUG] [Thread-189348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:34:34.015 [DEBUG] [Thread-189348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:34:34.015 [DEBUG] [Thread-189348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:34:34.018 [DEBUG] [Thread-189350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:34:34.040 [INFO] [Thread-189348] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:34:34.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:34:34.148 [DEBUG] [Thread-189351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:34:34.680 [DEBUG] [Thread-189348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:34:34.680 [DEBUG] [Thread-189348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:34:34.681 [DEBUG] [Thread-189348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:34:34.722 [DEBUG] [Thread-189348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:34:34.722 [DEBUG] [Thread-189348] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:34:34.726 [DEBUG] [Thread-189348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:34:34.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:34:34.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:34:34.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:34:34.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:34:34.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:34:34.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:34:34.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:34:34.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:34:34.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:34:34.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.648716 -999.00  +15.20  20.17     45   +3.50 1 1 1 1 1   887    0 11.33 -28.05 ----- 21.4 20.2 156.6 31.7 18.6 -28.3 18.3 -26.7 19.8 -25.5 20.4 -28.0
2026-02-14T17:34:34.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:34:34.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:34:34.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.648716
2026-02-14T17:34:34.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:34:34.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:34:34.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:34:34.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:34:34.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:34:34.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:33:23', tmtdew=13.87, humidity=39.0, cloud=0.0, wind=37.69, temperature=15.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:34:09.062', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:34:34.746 [DEBUG] [Thread-189348] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:34:34.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T17:34:34.843 [DEBUG] [Thread-189353] [transport.py] [_log()] starting thread (client mode): 0xa2d7b5b0
2026-02-14T17:34:34.843 [DEBUG] [Thread-189353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:34:34.859 [DEBUG] [Thread-189353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:34:34.859 [INFO] [Thread-189353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:34:34.868 [DEBUG] [Thread-189353] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:34:34.868 [DEBUG] [Thread-189353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:34:34.868 [DEBUG] [Thread-189353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:34:34.868 [DEBUG] [Thread-189353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:34:34.868 [DEBUG] [Thread-189353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:34:34.868 [DEBUG] [Thread-189353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:34:34.868 [DEBUG] [Thread-189353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:34:34.868 [DEBUG] [Thread-189353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:34:34.868 [DEBUG] [Thread-189353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:34:34.868 [DEBUG] [Thread-189353] [transport.py] [_log()] client lang: <none>
2026-02-14T17:34:34.868 [DEBUG] [Thread-189353] [transport.py] [_log()] server lang: <none>
2026-02-14T17:34:34.868 [DEBUG] [Thread-189353] [transport.py] [_log()] kex follows: False
2026-02-14T17:34:34.868 [DEBUG] [Thread-189353] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:34:34.868 [DEBUG] [Thread-189353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:34:34.868 [DEBUG] [Thread-189353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:34:34.869 [DEBUG] [Thread-189353] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:34:34.869 [DEBUG] [Thread-189353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:34:34.869 [DEBUG] [Thread-189353] [transport.py] [_log()] Compression: none
2026-02-14T17:34:34.869 [DEBUG] [Thread-189353] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:34:34.926 [DEBUG] [Thread-189353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:34:34.926 [DEBUG] [Thread-189353] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:34:34.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:34:34.928 [DEBUG] [Thread-189353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:34:34.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:34:34.982 [DEBUG] [Thread-189353] [transport.py] [_log()] userauth is OK
2026-02-14T17:34:34.982 [DEBUG] [Thread-189353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:34:34.983 [DEBUG] [Thread-189353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:34:34.983 [DEBUG] [Thread-189353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:34:34.983 [DEBUG] [Thread-189353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:34:35.002 [INFO] [Thread-189353] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:34:35.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-14T17:34:35.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:34:35.856 [DEBUG] [Thread-189353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:34:35.856 [DEBUG] [Thread-189353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:34:35.904 [DEBUG] [Thread-189353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:34:35.905 [DEBUG] [Thread-189353] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:34:35.914 [DEBUG] [Thread-189353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:34:35.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:34:35.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-14T17:34:35.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-14T17:34:35.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:34:35.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:34:35.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:34:35.950 [DEBUG] [Thread-189353] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:34:49.061 [DEBUG] [Thread-189355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:35:04.113 [DEBUG] [Thread-189356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:35:05.143 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:35:05.144 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:35:05.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:35:05.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:35:05.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-14T17:35:08.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 34, 35), 14.67, 37.2, 0.0, 35.6, 16.65, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:35:08.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:34:35
2026-02-14T17:35:08.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:35:08.827 [DEBUG] [Thread-189357] [transport.py] [_log()] starting thread (client mode): 0xa575a0e0
2026-02-14T17:35:08.827 [DEBUG] [Thread-189357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:35:08.846 [DEBUG] [Thread-189357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:35:08.846 [INFO] [Thread-189357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:35:08.849 [DEBUG] [Thread-189357] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:35:08.849 [DEBUG] [Thread-189357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:35:08.849 [DEBUG] [Thread-189357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:35:08.849 [DEBUG] [Thread-189357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:35:08.849 [DEBUG] [Thread-189357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:35:08.849 [DEBUG] [Thread-189357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:35:08.850 [DEBUG] [Thread-189357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:35:08.850 [DEBUG] [Thread-189357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:35:08.850 [DEBUG] [Thread-189357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:35:08.850 [DEBUG] [Thread-189357] [transport.py] [_log()] client lang: <none>
2026-02-14T17:35:08.850 [DEBUG] [Thread-189357] [transport.py] [_log()] server lang: <none>
2026-02-14T17:35:08.850 [DEBUG] [Thread-189357] [transport.py] [_log()] kex follows: False
2026-02-14T17:35:08.850 [DEBUG] [Thread-189357] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:35:08.850 [DEBUG] [Thread-189357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:35:08.850 [DEBUG] [Thread-189357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:35:08.850 [DEBUG] [Thread-189357] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:35:08.850 [DEBUG] [Thread-189357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:35:08.850 [DEBUG] [Thread-189357] [transport.py] [_log()] Compression: none
2026-02-14T17:35:08.850 [DEBUG] [Thread-189357] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:35:08.868 [DEBUG] [Thread-189357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:35:08.869 [DEBUG] [Thread-189357] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:35:08.869 [DEBUG] [Thread-189357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:35:08.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:35:08.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:35:08.871 [DEBUG] [Thread-189357] [transport.py] [_log()] userauth is OK
2026-02-14T17:35:08.871 [DEBUG] [Thread-189357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:35:08.871 [DEBUG] [Thread-189357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:35:08.871 [DEBUG] [Thread-189357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:35:08.871 [DEBUG] [Thread-189357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:35:08.887 [INFO] [Thread-189357] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:35:08.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:35:15.909 [DEBUG] [Thread-189357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:35:15.910 [DEBUG] [Thread-189357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:35:15.910 [DEBUG] [Thread-189357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:35:15.950 [DEBUG] [Thread-189357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:35:15.951 [DEBUG] [Thread-189357] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:35:15.954 [DEBUG] [Thread-189357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:35:16.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:35:16.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:35:16.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:35:16.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:35:16.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:35:16.034 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:35:16.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:35:16.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:35:16.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:35:16.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.649064 -999.00  +15.20  33.98     46   +3.60 1 1 2 1 1   887    0 10.98 -25.80 ----- 37.2 34.0 158.4 49.1 18.6 -28.1 18.3 -26.4 19.7 -25.4 20.3 -27.9
2026-02-14T17:35:16.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:35:16.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:35:16.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.649064
2026-02-14T17:35:16.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:35:16.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:35:16.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:35:16.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:35:16.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:35:16.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:34:35', tmtdew=14.67, humidity=37.2, cloud=0.0, wind=35.6, temperature=16.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:34:39.130', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:35:16.038 [DEBUG] [Thread-189357] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:35:16.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T17:35:16.133 [DEBUG] [Thread-189360] [transport.py] [_log()] starting thread (client mode): 0xa2d7b8b0
2026-02-14T17:35:16.134 [DEBUG] [Thread-189360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:35:16.156 [DEBUG] [Thread-189360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:35:16.156 [INFO] [Thread-189360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:35:16.164 [DEBUG] [Thread-189360] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:35:16.164 [DEBUG] [Thread-189360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:35:16.164 [DEBUG] [Thread-189360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:35:16.165 [DEBUG] [Thread-189360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:35:16.165 [DEBUG] [Thread-189360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:35:16.165 [DEBUG] [Thread-189360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:35:16.165 [DEBUG] [Thread-189360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:35:16.165 [DEBUG] [Thread-189360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:35:16.165 [DEBUG] [Thread-189360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:35:16.165 [DEBUG] [Thread-189360] [transport.py] [_log()] client lang: <none>
2026-02-14T17:35:16.165 [DEBUG] [Thread-189360] [transport.py] [_log()] server lang: <none>
2026-02-14T17:35:16.165 [DEBUG] [Thread-189360] [transport.py] [_log()] kex follows: False
2026-02-14T17:35:16.165 [DEBUG] [Thread-189360] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:35:16.165 [DEBUG] [Thread-189360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:35:16.165 [DEBUG] [Thread-189360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:35:16.165 [DEBUG] [Thread-189360] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:35:16.165 [DEBUG] [Thread-189360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:35:16.165 [DEBUG] [Thread-189360] [transport.py] [_log()] Compression: none
2026-02-14T17:35:16.165 [DEBUG] [Thread-189360] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:35:16.224 [DEBUG] [Thread-189360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:35:16.225 [DEBUG] [Thread-189360] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:35:16.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:35:16.226 [DEBUG] [Thread-189360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:35:16.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:35:16.286 [DEBUG] [Thread-189360] [transport.py] [_log()] userauth is OK
2026-02-14T17:35:16.286 [DEBUG] [Thread-189360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:35:16.286 [DEBUG] [Thread-189360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:35:16.286 [DEBUG] [Thread-189360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:35:16.286 [DEBUG] [Thread-189360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:35:16.306 [INFO] [Thread-189360] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:35:16.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-14T17:35:16.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:35:17.096 [DEBUG] [Thread-189360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:35:17.096 [DEBUG] [Thread-189360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:35:17.144 [DEBUG] [Thread-189360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:35:17.144 [DEBUG] [Thread-189360] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:35:17.156 [DEBUG] [Thread-189360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:35:17.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:35:17.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-14T17:35:17.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:35:17.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:35:17.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:35:17.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:35:17.196 [DEBUG] [Thread-189360] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:35:19.151 [DEBUG] [Thread-189362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:35:34.193 [DEBUG] [Thread-189363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:35:34.201 [DEBUG] [Thread-189364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:35:47.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:35:47.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:35:47.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-14T17:35:49.235 [DEBUG] [Thread-189365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:35:49.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 35, 11), 13.99, 38.87, 0.0, 35.2, 15.86, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:35:49.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:35:11
2026-02-14T17:35:49.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:35:49.912 [DEBUG] [Thread-189366] [transport.py] [_log()] starting thread (client mode): 0xa2d7a7d0
2026-02-14T17:35:49.912 [DEBUG] [Thread-189366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:35:49.927 [DEBUG] [Thread-189366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:35:49.928 [INFO] [Thread-189366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:35:49.930 [DEBUG] [Thread-189366] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:35:49.930 [DEBUG] [Thread-189366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:35:49.930 [DEBUG] [Thread-189366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:35:49.930 [DEBUG] [Thread-189366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:35:49.930 [DEBUG] [Thread-189366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:35:49.930 [DEBUG] [Thread-189366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:35:49.930 [DEBUG] [Thread-189366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:35:49.930 [DEBUG] [Thread-189366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:35:49.930 [DEBUG] [Thread-189366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:35:49.930 [DEBUG] [Thread-189366] [transport.py] [_log()] client lang: <none>
2026-02-14T17:35:49.930 [DEBUG] [Thread-189366] [transport.py] [_log()] server lang: <none>
2026-02-14T17:35:49.930 [DEBUG] [Thread-189366] [transport.py] [_log()] kex follows: False
2026-02-14T17:35:49.930 [DEBUG] [Thread-189366] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:35:49.930 [DEBUG] [Thread-189366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:35:49.930 [DEBUG] [Thread-189366] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:35:49.930 [DEBUG] [Thread-189366] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:35:49.930 [DEBUG] [Thread-189366] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:35:49.931 [DEBUG] [Thread-189366] [transport.py] [_log()] Compression: none
2026-02-14T17:35:49.931 [DEBUG] [Thread-189366] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:35:49.948 [DEBUG] [Thread-189366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:35:49.949 [DEBUG] [Thread-189366] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:35:49.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:35:49.950 [DEBUG] [Thread-189366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:35:49.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:35:49.952 [DEBUG] [Thread-189366] [transport.py] [_log()] userauth is OK
2026-02-14T17:35:49.952 [DEBUG] [Thread-189366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:35:49.952 [DEBUG] [Thread-189366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:35:49.952 [DEBUG] [Thread-189366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:35:49.953 [DEBUG] [Thread-189366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:35:49.972 [INFO] [Thread-189366] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:35:49.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:35:50.612 [DEBUG] [Thread-189366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:35:50.612 [DEBUG] [Thread-189366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:35:50.612 [DEBUG] [Thread-189366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:35:50.653 [DEBUG] [Thread-189366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:35:50.653 [DEBUG] [Thread-189366] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:35:50.655 [DEBUG] [Thread-189366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:35:50.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:35:50.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:35:50.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:35:50.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:35:50.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:35:50.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:35:50.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:35:50.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:35:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:35:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.649411 -999.00  +15.20  24.98     46   +3.70 1 1 1 1 1   887    0 10.91 -24.31 ----- 31.8 25.0 170.2 41.0 18.6 -27.8 18.3 -26.6 19.7 -25.0 20.4 -27.7
2026-02-14T17:35:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:35:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:35:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.649411
2026-02-14T17:35:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:35:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:35:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:35:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:35:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:35:50.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:35:11', tmtdew=13.99, humidity=38.87, cloud=0.0, wind=35.2, temperature=15.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:35:09.110', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:35:50.676 [DEBUG] [Thread-189366] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:35:50.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-14T17:35:50.760 [DEBUG] [Thread-189369] [transport.py] [_log()] starting thread (client mode): 0xa2db6560
2026-02-14T17:35:50.760 [DEBUG] [Thread-189369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:35:50.775 [DEBUG] [Thread-189369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:35:50.775 [INFO] [Thread-189369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:35:50.782 [DEBUG] [Thread-189369] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:35:50.783 [DEBUG] [Thread-189369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:35:50.783 [DEBUG] [Thread-189369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:35:50.783 [DEBUG] [Thread-189369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:35:50.783 [DEBUG] [Thread-189369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:35:50.783 [DEBUG] [Thread-189369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:35:50.783 [DEBUG] [Thread-189369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:35:50.783 [DEBUG] [Thread-189369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:35:50.783 [DEBUG] [Thread-189369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:35:50.783 [DEBUG] [Thread-189369] [transport.py] [_log()] client lang: <none>
2026-02-14T17:35:50.783 [DEBUG] [Thread-189369] [transport.py] [_log()] server lang: <none>
2026-02-14T17:35:50.783 [DEBUG] [Thread-189369] [transport.py] [_log()] kex follows: False
2026-02-14T17:35:50.783 [DEBUG] [Thread-189369] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:35:50.783 [DEBUG] [Thread-189369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:35:50.783 [DEBUG] [Thread-189369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:35:50.783 [DEBUG] [Thread-189369] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:35:50.784 [DEBUG] [Thread-189369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:35:50.784 [DEBUG] [Thread-189369] [transport.py] [_log()] Compression: none
2026-02-14T17:35:50.784 [DEBUG] [Thread-189369] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:35:50.842 [DEBUG] [Thread-189369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:35:50.843 [DEBUG] [Thread-189369] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:35:50.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:35:50.844 [DEBUG] [Thread-189369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:35:50.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:35:50.897 [DEBUG] [Thread-189369] [transport.py] [_log()] userauth is OK
2026-02-14T17:35:50.897 [DEBUG] [Thread-189369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:35:50.898 [DEBUG] [Thread-189369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:35:50.898 [DEBUG] [Thread-189369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:35:50.898 [DEBUG] [Thread-189369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:35:50.919 [INFO] [Thread-189369] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:35:50.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-14T17:35:50.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:35:51.725 [DEBUG] [Thread-189369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:35:51.725 [DEBUG] [Thread-189369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:35:51.773 [DEBUG] [Thread-189369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:35:51.773 [DEBUG] [Thread-189369] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:35:51.782 [DEBUG] [Thread-189369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:35:51.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:35:51.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-14T17:35:51.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-14T17:35:51.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:35:51.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:35:51.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:35:51.817 [DEBUG] [Thread-189369] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:36:04.273 [DEBUG] [Thread-189371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:36:05.286 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:36:05.287 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:36:19.323 [DEBUG] [Thread-189372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:36:21.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:36:21.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:36:21.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-14T17:36:23.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 35, 47), 13.86, 39.42, 0.0, 39.47, 15.76, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:36:23.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:35:47
2026-02-14T17:36:24.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:36:24.273 [DEBUG] [Thread-189373] [transport.py] [_log()] starting thread (client mode): 0xa57b2350
2026-02-14T17:36:24.273 [DEBUG] [Thread-189373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:36:24.294 [DEBUG] [Thread-189373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:36:24.294 [INFO] [Thread-189373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:36:24.297 [DEBUG] [Thread-189373] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:36:24.297 [DEBUG] [Thread-189373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:36:24.297 [DEBUG] [Thread-189373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:36:24.297 [DEBUG] [Thread-189373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:36:24.297 [DEBUG] [Thread-189373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:36:24.297 [DEBUG] [Thread-189373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:36:24.297 [DEBUG] [Thread-189373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:36:24.297 [DEBUG] [Thread-189373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:36:24.297 [DEBUG] [Thread-189373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:36:24.297 [DEBUG] [Thread-189373] [transport.py] [_log()] client lang: <none>
2026-02-14T17:36:24.297 [DEBUG] [Thread-189373] [transport.py] [_log()] server lang: <none>
2026-02-14T17:36:24.297 [DEBUG] [Thread-189373] [transport.py] [_log()] kex follows: False
2026-02-14T17:36:24.297 [DEBUG] [Thread-189373] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:36:24.297 [DEBUG] [Thread-189373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:36:24.297 [DEBUG] [Thread-189373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:36:24.297 [DEBUG] [Thread-189373] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:36:24.297 [DEBUG] [Thread-189373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:36:24.297 [DEBUG] [Thread-189373] [transport.py] [_log()] Compression: none
2026-02-14T17:36:24.297 [DEBUG] [Thread-189373] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:36:24.304 [DEBUG] [Thread-189373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:36:24.304 [DEBUG] [Thread-189373] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:36:24.304 [DEBUG] [Thread-189373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:36:24.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:36:24.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:36:24.305 [DEBUG] [Thread-189373] [transport.py] [_log()] userauth is OK
2026-02-14T17:36:24.305 [DEBUG] [Thread-189373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:36:24.305 [DEBUG] [Thread-189373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:36:24.305 [DEBUG] [Thread-189373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:36:24.305 [DEBUG] [Thread-189373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:36:24.322 [INFO] [Thread-189373] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:36:24.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:36:24.911 [DEBUG] [Thread-189373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:36:24.911 [DEBUG] [Thread-189373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:36:24.911 [DEBUG] [Thread-189373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:36:24.951 [DEBUG] [Thread-189373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:36:24.952 [DEBUG] [Thread-189373] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:36:24.955 [DEBUG] [Thread-189373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:36:24.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:36:24.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:36:24.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:36:24.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:36:24.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:36:24.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:36:24.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:36:24.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:36:24.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:36:24.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.649758 -999.00  +15.10  29.30     46   +3.60 1 1 1 1 1   887    0 11.01 -26.65 ----- 33.5 29.3 162.0 41.6 18.6 -28.5 18.3 -26.4 19.7 -26.4 20.4 -28.3
2026-02-14T17:36:24.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:36:24.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:36:24.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.649758
2026-02-14T17:36:24.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:36:24.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:36:24.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:36:24.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:36:24.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:36:24.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:35:47', tmtdew=13.86, humidity=39.42, cloud=0.0, wind=39.47, temperature=15.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:35:39.091', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:36:24.983 [DEBUG] [Thread-189373] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:36:25.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T17:36:25.077 [DEBUG] [Thread-189376] [transport.py] [_log()] starting thread (client mode): 0xa57b2530
2026-02-14T17:36:25.077 [DEBUG] [Thread-189376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:36:25.092 [DEBUG] [Thread-189376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:36:25.092 [INFO] [Thread-189376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:36:25.099 [DEBUG] [Thread-189376] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:36:25.100 [DEBUG] [Thread-189376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:36:25.100 [DEBUG] [Thread-189376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:36:25.100 [DEBUG] [Thread-189376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:36:25.100 [DEBUG] [Thread-189376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:36:25.100 [DEBUG] [Thread-189376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:36:25.100 [DEBUG] [Thread-189376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:36:25.100 [DEBUG] [Thread-189376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:36:25.100 [DEBUG] [Thread-189376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:36:25.100 [DEBUG] [Thread-189376] [transport.py] [_log()] client lang: <none>
2026-02-14T17:36:25.101 [DEBUG] [Thread-189376] [transport.py] [_log()] server lang: <none>
2026-02-14T17:36:25.101 [DEBUG] [Thread-189376] [transport.py] [_log()] kex follows: False
2026-02-14T17:36:25.101 [DEBUG] [Thread-189376] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:36:25.101 [DEBUG] [Thread-189376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:36:25.101 [DEBUG] [Thread-189376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:36:25.102 [DEBUG] [Thread-189376] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:36:25.102 [DEBUG] [Thread-189376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:36:25.102 [DEBUG] [Thread-189376] [transport.py] [_log()] Compression: none
2026-02-14T17:36:25.102 [DEBUG] [Thread-189376] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:36:25.159 [DEBUG] [Thread-189376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:36:25.159 [DEBUG] [Thread-189376] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:36:25.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:36:25.161 [DEBUG] [Thread-189376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:36:25.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:36:25.217 [DEBUG] [Thread-189376] [transport.py] [_log()] userauth is OK
2026-02-14T17:36:25.218 [DEBUG] [Thread-189376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:36:25.218 [DEBUG] [Thread-189376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:36:25.218 [DEBUG] [Thread-189376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:36:25.218 [DEBUG] [Thread-189376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:36:25.236 [INFO] [Thread-189376] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:36:25.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-14T17:36:25.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:36:26.067 [DEBUG] [Thread-189376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:36:26.068 [DEBUG] [Thread-189376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:36:26.115 [DEBUG] [Thread-189376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:36:26.115 [DEBUG] [Thread-189376] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:36:26.124 [DEBUG] [Thread-189376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:36:26.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:36:26.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-14T17:36:26.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-14T17:36:26.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:36:26.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:36:26.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:36:26.161 [DEBUG] [Thread-189376] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:36:34.230 [DEBUG] [Thread-189378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:36:34.359 [DEBUG] [Thread-189379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:36:49.423 [DEBUG] [Thread-189380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:36:56.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:36:56.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:36:56.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-14T17:36:58.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 36, 23), 13.91, 39.28, 0.0, 36.61, 15.76, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:36:58.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:36:23
2026-02-14T17:36:58.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:36:58.856 [DEBUG] [Thread-189381] [transport.py] [_log()] starting thread (client mode): 0xa2d022f0
2026-02-14T17:36:58.856 [DEBUG] [Thread-189381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:36:58.879 [DEBUG] [Thread-189381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:36:58.879 [INFO] [Thread-189381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:36:58.882 [DEBUG] [Thread-189381] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:36:58.882 [DEBUG] [Thread-189381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:36:58.882 [DEBUG] [Thread-189381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:36:58.882 [DEBUG] [Thread-189381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:36:58.882 [DEBUG] [Thread-189381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:36:58.883 [DEBUG] [Thread-189381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:36:58.883 [DEBUG] [Thread-189381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:36:58.883 [DEBUG] [Thread-189381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:36:58.883 [DEBUG] [Thread-189381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:36:58.883 [DEBUG] [Thread-189381] [transport.py] [_log()] client lang: <none>
2026-02-14T17:36:58.883 [DEBUG] [Thread-189381] [transport.py] [_log()] server lang: <none>
2026-02-14T17:36:58.883 [DEBUG] [Thread-189381] [transport.py] [_log()] kex follows: False
2026-02-14T17:36:58.883 [DEBUG] [Thread-189381] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:36:58.883 [DEBUG] [Thread-189381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:36:58.883 [DEBUG] [Thread-189381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:36:58.883 [DEBUG] [Thread-189381] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:36:58.883 [DEBUG] [Thread-189381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:36:58.883 [DEBUG] [Thread-189381] [transport.py] [_log()] Compression: none
2026-02-14T17:36:58.883 [DEBUG] [Thread-189381] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:36:58.903 [DEBUG] [Thread-189381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:36:58.903 [DEBUG] [Thread-189381] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:36:58.904 [DEBUG] [Thread-189381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:36:58.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:36:58.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:36:58.906 [DEBUG] [Thread-189381] [transport.py] [_log()] userauth is OK
2026-02-14T17:36:58.906 [DEBUG] [Thread-189381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:36:58.906 [DEBUG] [Thread-189381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:36:58.906 [DEBUG] [Thread-189381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:36:58.906 [DEBUG] [Thread-189381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:36:58.943 [INFO] [Thread-189381] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:36:58.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:36:59.603 [DEBUG] [Thread-189381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:36:59.603 [DEBUG] [Thread-189381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:36:59.603 [DEBUG] [Thread-189381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:36:59.644 [DEBUG] [Thread-189381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:36:59.645 [DEBUG] [Thread-189381] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:36:59.648 [DEBUG] [Thread-189381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:36:59.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:36:59.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:36:59.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:36:59.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:36:59.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:36:59.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:36:59.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:36:59.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:36:59.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:36:59.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.650105 -999.00  +15.10  33.55     46   +3.70 1 1 2 1 1   887    0 10.94 -24.93 ----- 24.7 33.5 169.2 40.9 18.6 -28.0 18.2 -26.4 19.7 -25.7 20.3 -28.9
2026-02-14T17:36:59.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:36:59.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:36:59.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.650105
2026-02-14T17:36:59.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:36:59.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:36:59.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:36:59.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:36:59.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:36:59.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:36:23', tmtdew=13.91, humidity=39.28, cloud=0.0, wind=36.61, temperature=15.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:36:09.072', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:36:59.675 [DEBUG] [Thread-189381] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:36:59.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-14T17:36:59.771 [DEBUG] [Thread-189384] [transport.py] [_log()] starting thread (client mode): 0xa2db6c20
2026-02-14T17:36:59.772 [DEBUG] [Thread-189384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:36:59.786 [DEBUG] [Thread-189384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:36:59.786 [INFO] [Thread-189384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:36:59.794 [DEBUG] [Thread-189384] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:36:59.794 [DEBUG] [Thread-189384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:36:59.794 [DEBUG] [Thread-189384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:36:59.794 [DEBUG] [Thread-189384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:36:59.794 [DEBUG] [Thread-189384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:36:59.794 [DEBUG] [Thread-189384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:36:59.794 [DEBUG] [Thread-189384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:36:59.794 [DEBUG] [Thread-189384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:36:59.794 [DEBUG] [Thread-189384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:36:59.794 [DEBUG] [Thread-189384] [transport.py] [_log()] client lang: <none>
2026-02-14T17:36:59.794 [DEBUG] [Thread-189384] [transport.py] [_log()] server lang: <none>
2026-02-14T17:36:59.794 [DEBUG] [Thread-189384] [transport.py] [_log()] kex follows: False
2026-02-14T17:36:59.794 [DEBUG] [Thread-189384] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:36:59.794 [DEBUG] [Thread-189384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:36:59.794 [DEBUG] [Thread-189384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:36:59.794 [DEBUG] [Thread-189384] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:36:59.794 [DEBUG] [Thread-189384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:36:59.795 [DEBUG] [Thread-189384] [transport.py] [_log()] Compression: none
2026-02-14T17:36:59.795 [DEBUG] [Thread-189384] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:36:59.852 [DEBUG] [Thread-189384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:36:59.852 [DEBUG] [Thread-189384] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:36:59.852 [DEBUG] [Thread-189384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:36:59.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:36:59.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:36:59.910 [DEBUG] [Thread-189384] [transport.py] [_log()] userauth is OK
2026-02-14T17:36:59.911 [DEBUG] [Thread-189384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:36:59.911 [DEBUG] [Thread-189384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:36:59.911 [DEBUG] [Thread-189384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:36:59.911 [DEBUG] [Thread-189384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:36:59.929 [INFO] [Thread-189384] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:36:59.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-14T17:36:59.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:37:00.717 [DEBUG] [Thread-189384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:37:00.717 [DEBUG] [Thread-189384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:37:00.765 [DEBUG] [Thread-189384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:37:00.765 [DEBUG] [Thread-189384] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:37:00.774 [DEBUG] [Thread-189384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:37:00.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:37:00.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-14T17:37:00.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-14T17:37:00.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:37:00.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:37:00.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:37:00.810 [DEBUG] [Thread-189384] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:37:04.464 [DEBUG] [Thread-189386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:37:05.426 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:37:05.428 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:37:19.520 [DEBUG] [Thread-189387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:37:30.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:37:30.824 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:37:30.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-14T17:37:33.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 36, 58), 13.56, 39.77, 0.0, 34.16, 15.49, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:37:33.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:36:58
2026-02-14T17:37:33.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:37:33.611 [DEBUG] [Thread-189388] [transport.py] [_log()] starting thread (client mode): 0xa2db7b20
2026-02-14T17:37:33.611 [DEBUG] [Thread-189388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:37:33.632 [DEBUG] [Thread-189388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:37:33.632 [INFO] [Thread-189388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:37:33.636 [DEBUG] [Thread-189388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:37:33.636 [DEBUG] [Thread-189388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:37:33.636 [DEBUG] [Thread-189388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:37:33.636 [DEBUG] [Thread-189388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:37:33.636 [DEBUG] [Thread-189388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:37:33.636 [DEBUG] [Thread-189388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:37:33.636 [DEBUG] [Thread-189388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:37:33.637 [DEBUG] [Thread-189388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:37:33.637 [DEBUG] [Thread-189388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:37:33.637 [DEBUG] [Thread-189388] [transport.py] [_log()] client lang: <none>
2026-02-14T17:37:33.637 [DEBUG] [Thread-189388] [transport.py] [_log()] server lang: <none>
2026-02-14T17:37:33.637 [DEBUG] [Thread-189388] [transport.py] [_log()] kex follows: False
2026-02-14T17:37:33.637 [DEBUG] [Thread-189388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:37:33.637 [DEBUG] [Thread-189388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:37:33.637 [DEBUG] [Thread-189388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:37:33.637 [DEBUG] [Thread-189388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:37:33.637 [DEBUG] [Thread-189388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:37:33.637 [DEBUG] [Thread-189388] [transport.py] [_log()] Compression: none
2026-02-14T17:37:33.637 [DEBUG] [Thread-189388] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:37:33.655 [DEBUG] [Thread-189388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:37:33.655 [DEBUG] [Thread-189388] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:37:33.656 [DEBUG] [Thread-189388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:37:33.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:37:33.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:37:33.658 [DEBUG] [Thread-189388] [transport.py] [_log()] userauth is OK
2026-02-14T17:37:33.658 [DEBUG] [Thread-189388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:37:33.658 [DEBUG] [Thread-189388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:37:33.658 [DEBUG] [Thread-189388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:37:33.658 [DEBUG] [Thread-189388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:37:33.682 [INFO] [Thread-189388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:37:33.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:37:34.265 [DEBUG] [Thread-189390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:37:34.292 [DEBUG] [Thread-189388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:37:34.292 [DEBUG] [Thread-189388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:37:34.292 [DEBUG] [Thread-189388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:37:34.333 [DEBUG] [Thread-189388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:37:34.333 [DEBUG] [Thread-189388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:37:34.335 [DEBUG] [Thread-189388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:37:34.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:37:34.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:37:34.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:37:34.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:37:34.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:37:34.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:37:34.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:37:34.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:37:34.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:37:34.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.650452 -999.00  +15.10  22.38     46   +3.70 1 1 1 1 1   887    0 10.92 -26.74 ----- 27.4 22.4 161.8 42.0 18.5 -28.6 18.3 -26.8 19.6 -25.3 20.3 -27.5
2026-02-14T17:37:34.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:37:34.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:37:34.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.650452
2026-02-14T17:37:34.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:37:34.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:37:34.357 [DEBUG] [Thread-189388] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:37:34.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:37:34.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:37:34.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:37:34.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:36:58', tmtdew=13.56, humidity=39.77, cloud=0.0, wind=34.16, temperature=15.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:36:39.053', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:37:34.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-14T17:37:34.451 [DEBUG] [Thread-189392] [transport.py] [_log()] starting thread (client mode): 0xa57b23b0
2026-02-14T17:37:34.451 [DEBUG] [Thread-189392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:37:34.465 [DEBUG] [Thread-189392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:37:34.466 [INFO] [Thread-189392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:37:34.473 [DEBUG] [Thread-189392] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:37:34.474 [DEBUG] [Thread-189392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:37:34.474 [DEBUG] [Thread-189392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:37:34.474 [DEBUG] [Thread-189392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:37:34.474 [DEBUG] [Thread-189392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:37:34.474 [DEBUG] [Thread-189392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:37:34.474 [DEBUG] [Thread-189392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:37:34.475 [DEBUG] [Thread-189392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:37:34.475 [DEBUG] [Thread-189392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:37:34.475 [DEBUG] [Thread-189392] [transport.py] [_log()] client lang: <none>
2026-02-14T17:37:34.475 [DEBUG] [Thread-189392] [transport.py] [_log()] server lang: <none>
2026-02-14T17:37:34.475 [DEBUG] [Thread-189392] [transport.py] [_log()] kex follows: False
2026-02-14T17:37:34.475 [DEBUG] [Thread-189392] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:37:34.475 [DEBUG] [Thread-189392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:37:34.475 [DEBUG] [Thread-189392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:37:34.476 [DEBUG] [Thread-189392] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:37:34.476 [DEBUG] [Thread-189392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:37:34.476 [DEBUG] [Thread-189392] [transport.py] [_log()] Compression: none
2026-02-14T17:37:34.476 [DEBUG] [Thread-189392] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:37:34.531 [DEBUG] [Thread-189392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:37:34.532 [DEBUG] [Thread-189392] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:37:34.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:37:34.534 [DEBUG] [Thread-189392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:37:34.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:37:34.557 [DEBUG] [Thread-189394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:37:34.590 [DEBUG] [Thread-189392] [transport.py] [_log()] userauth is OK
2026-02-14T17:37:34.590 [DEBUG] [Thread-189392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:37:34.591 [DEBUG] [Thread-189392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:37:34.591 [DEBUG] [Thread-189392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:37:34.591 [DEBUG] [Thread-189392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:37:34.611 [INFO] [Thread-189392] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:37:34.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-14T17:37:34.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:37:35.428 [DEBUG] [Thread-189392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:37:35.429 [DEBUG] [Thread-189392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:37:35.476 [DEBUG] [Thread-189392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:37:35.476 [DEBUG] [Thread-189392] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:37:35.486 [DEBUG] [Thread-189392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:37:35.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:37:35.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:37:35.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-14T17:37:35.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:37:35.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:37:35.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:37:35.523 [DEBUG] [Thread-189392] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:37:49.609 [DEBUG] [Thread-189395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:38:04.645 [DEBUG] [Thread-189396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:38:05.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:38:05.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:38:05.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-14T17:38:05.567 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:38:05.568 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:38:07.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 37, 34), 14.33, 38.03, 0.0, 33.59, 16.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:38:07.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:37:34
2026-02-14T17:38:07.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:38:07.966 [DEBUG] [Thread-189397] [transport.py] [_log()] starting thread (client mode): 0xa2d02d70
2026-02-14T17:38:07.966 [DEBUG] [Thread-189397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:38:07.987 [DEBUG] [Thread-189397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:38:07.988 [INFO] [Thread-189397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:38:07.989 [DEBUG] [Thread-189397] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:38:07.989 [DEBUG] [Thread-189397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:38:07.989 [DEBUG] [Thread-189397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:38:07.989 [DEBUG] [Thread-189397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:38:07.989 [DEBUG] [Thread-189397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:38:07.989 [DEBUG] [Thread-189397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:38:07.989 [DEBUG] [Thread-189397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:38:07.989 [DEBUG] [Thread-189397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:38:07.989 [DEBUG] [Thread-189397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:38:07.989 [DEBUG] [Thread-189397] [transport.py] [_log()] client lang: <none>
2026-02-14T17:38:07.989 [DEBUG] [Thread-189397] [transport.py] [_log()] server lang: <none>
2026-02-14T17:38:07.989 [DEBUG] [Thread-189397] [transport.py] [_log()] kex follows: False
2026-02-14T17:38:07.989 [DEBUG] [Thread-189397] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:38:07.989 [DEBUG] [Thread-189397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:38:07.989 [DEBUG] [Thread-189397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:38:07.989 [DEBUG] [Thread-189397] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:38:07.989 [DEBUG] [Thread-189397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:38:07.989 [DEBUG] [Thread-189397] [transport.py] [_log()] Compression: none
2026-02-14T17:38:07.989 [DEBUG] [Thread-189397] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:38:08.004 [DEBUG] [Thread-189397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:38:08.005 [DEBUG] [Thread-189397] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:38:08.005 [DEBUG] [Thread-189397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:38:08.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:38:08.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:38:08.007 [DEBUG] [Thread-189397] [transport.py] [_log()] userauth is OK
2026-02-14T17:38:08.008 [DEBUG] [Thread-189397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:38:08.008 [DEBUG] [Thread-189397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:38:08.008 [DEBUG] [Thread-189397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:38:08.008 [DEBUG] [Thread-189397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:38:08.027 [INFO] [Thread-189397] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:38:08.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:38:08.762 [DEBUG] [Thread-189397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:38:08.762 [DEBUG] [Thread-189397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:38:08.762 [DEBUG] [Thread-189397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:38:08.802 [DEBUG] [Thread-189397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:38:08.802 [DEBUG] [Thread-189397] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:38:08.803 [DEBUG] [Thread-189397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:38:08.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:38:08.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:38:08.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:38:08.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:38:08.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:38:08.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:38:08.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:38:08.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:38:08.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:38:08.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.650800 -999.00  +15.10  33.10     46   +3.70 1 1 2 1 1   887    0 11.28 -25.18 ----- 35.8 33.1 185.2 41.4 18.4 -28.6 18.1 -31.2 19.8 -25.4 20.2 -30.2
2026-02-14T17:38:08.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:38:08.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:38:08.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.650800
2026-02-14T17:38:08.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:38:08.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:38:08.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:38:08.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:38:08.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:38:08.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:37:34', tmtdew=14.33, humidity=38.03, cloud=0.0, wind=33.59, temperature=16.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:37:09.120', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:38:08.813 [DEBUG] [Thread-189397] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:38:08.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-14T17:38:08.900 [DEBUG] [Thread-189400] [transport.py] [_log()] starting thread (client mode): 0xa2decaf0
2026-02-14T17:38:08.900 [DEBUG] [Thread-189400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:38:08.918 [DEBUG] [Thread-189400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:38:08.919 [INFO] [Thread-189400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:38:08.926 [DEBUG] [Thread-189400] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:38:08.927 [DEBUG] [Thread-189400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:38:08.927 [DEBUG] [Thread-189400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:38:08.927 [DEBUG] [Thread-189400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:38:08.927 [DEBUG] [Thread-189400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:38:08.927 [DEBUG] [Thread-189400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:38:08.927 [DEBUG] [Thread-189400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:38:08.927 [DEBUG] [Thread-189400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:38:08.928 [DEBUG] [Thread-189400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:38:08.928 [DEBUG] [Thread-189400] [transport.py] [_log()] client lang: <none>
2026-02-14T17:38:08.928 [DEBUG] [Thread-189400] [transport.py] [_log()] server lang: <none>
2026-02-14T17:38:08.928 [DEBUG] [Thread-189400] [transport.py] [_log()] kex follows: False
2026-02-14T17:38:08.928 [DEBUG] [Thread-189400] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:38:08.928 [DEBUG] [Thread-189400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:38:08.928 [DEBUG] [Thread-189400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:38:08.928 [DEBUG] [Thread-189400] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:38:08.929 [DEBUG] [Thread-189400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:38:08.929 [DEBUG] [Thread-189400] [transport.py] [_log()] Compression: none
2026-02-14T17:38:08.929 [DEBUG] [Thread-189400] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:38:08.987 [DEBUG] [Thread-189400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:38:08.988 [DEBUG] [Thread-189400] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:38:08.988 [DEBUG] [Thread-189400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:38:08.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:38:08.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:38:09.046 [DEBUG] [Thread-189400] [transport.py] [_log()] userauth is OK
2026-02-14T17:38:09.047 [DEBUG] [Thread-189400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:38:09.047 [DEBUG] [Thread-189400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:38:09.047 [DEBUG] [Thread-189400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:38:09.047 [DEBUG] [Thread-189400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:38:09.066 [INFO] [Thread-189400] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:38:09.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-14T17:38:09.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:38:09.909 [DEBUG] [Thread-189400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:38:09.910 [DEBUG] [Thread-189400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:38:09.957 [DEBUG] [Thread-189400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:38:09.957 [DEBUG] [Thread-189400] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:38:09.967 [DEBUG] [Thread-189400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:38:09.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:38:09.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:38:09.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-14T17:38:09.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:38:09.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:38:09.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:38:10.003 [DEBUG] [Thread-189400] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:38:19.678 [DEBUG] [Thread-189402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:38:34.298 [DEBUG] [Thread-189403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:38:34.729 [DEBUG] [Thread-189404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:38:40.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:38:40.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:38:40.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-14T17:38:41.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 38, 10), 13.57, 39.9, 0.0, 34.51, 15.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:38:41.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:38:10
2026-02-14T17:38:42.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:38:42.394 [DEBUG] [Thread-189405] [transport.py] [_log()] starting thread (client mode): 0xa2d03520
2026-02-14T17:38:42.394 [DEBUG] [Thread-189405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:38:42.415 [DEBUG] [Thread-189405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:38:42.415 [INFO] [Thread-189405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:38:42.418 [DEBUG] [Thread-189405] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:38:42.418 [DEBUG] [Thread-189405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:38:42.418 [DEBUG] [Thread-189405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:38:42.418 [DEBUG] [Thread-189405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:38:42.418 [DEBUG] [Thread-189405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:38:42.419 [DEBUG] [Thread-189405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:38:42.419 [DEBUG] [Thread-189405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:38:42.419 [DEBUG] [Thread-189405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:38:42.419 [DEBUG] [Thread-189405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:38:42.419 [DEBUG] [Thread-189405] [transport.py] [_log()] client lang: <none>
2026-02-14T17:38:42.419 [DEBUG] [Thread-189405] [transport.py] [_log()] server lang: <none>
2026-02-14T17:38:42.419 [DEBUG] [Thread-189405] [transport.py] [_log()] kex follows: False
2026-02-14T17:38:42.419 [DEBUG] [Thread-189405] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:38:42.419 [DEBUG] [Thread-189405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:38:42.419 [DEBUG] [Thread-189405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:38:42.419 [DEBUG] [Thread-189405] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:38:42.419 [DEBUG] [Thread-189405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:38:42.419 [DEBUG] [Thread-189405] [transport.py] [_log()] Compression: none
2026-02-14T17:38:42.419 [DEBUG] [Thread-189405] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:38:42.428 [DEBUG] [Thread-189405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:38:42.428 [DEBUG] [Thread-189405] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:38:42.428 [DEBUG] [Thread-189405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:38:42.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:38:42.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:38:42.430 [DEBUG] [Thread-189405] [transport.py] [_log()] userauth is OK
2026-02-14T17:38:42.430 [DEBUG] [Thread-189405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:38:42.431 [DEBUG] [Thread-189405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:38:42.431 [DEBUG] [Thread-189405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:38:42.431 [DEBUG] [Thread-189405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:38:42.444 [INFO] [Thread-189405] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:38:42.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:38:43.054 [DEBUG] [Thread-189405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:38:43.055 [DEBUG] [Thread-189405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:38:43.055 [DEBUG] [Thread-189405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:38:43.095 [DEBUG] [Thread-189405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:38:43.095 [DEBUG] [Thread-189405] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:38:43.097 [DEBUG] [Thread-189405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:38:43.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:38:43.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:38:43.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:38:43.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:38:43.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:38:43.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:38:43.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:38:43.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:38:43.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:38:43.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.651494 -999.00  +15.10  29.53     46   +3.70 1 1 1 1 1   887    0 10.89 -26.69 ----- 34.2 29.5 181.2 33.5 18.4 -27.9 18.1 -26.7 19.6 -25.4 20.2 -27.4
2026-02-14T17:38:43.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:38:43.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:38:43.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.651494
2026-02-14T17:38:43.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:38:43.114 [DEBUG] [Thread-189405] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:38:43.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:38:43.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:38:43.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:38:43.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:38:43.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:38:10', tmtdew=13.57, humidity=39.9, cloud=0.0, wind=34.51, temperature=15.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:38:09.082', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:38:43.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-14T17:38:43.215 [DEBUG] [Thread-189408] [transport.py] [_log()] starting thread (client mode): 0xa2d00790
2026-02-14T17:38:43.215 [DEBUG] [Thread-189408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:38:43.229 [DEBUG] [Thread-189408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:38:43.229 [INFO] [Thread-189408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:38:43.237 [DEBUG] [Thread-189408] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:38:43.237 [DEBUG] [Thread-189408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:38:43.237 [DEBUG] [Thread-189408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:38:43.237 [DEBUG] [Thread-189408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:38:43.237 [DEBUG] [Thread-189408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:38:43.238 [DEBUG] [Thread-189408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:38:43.238 [DEBUG] [Thread-189408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:38:43.238 [DEBUG] [Thread-189408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:38:43.238 [DEBUG] [Thread-189408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:38:43.238 [DEBUG] [Thread-189408] [transport.py] [_log()] client lang: <none>
2026-02-14T17:38:43.238 [DEBUG] [Thread-189408] [transport.py] [_log()] server lang: <none>
2026-02-14T17:38:43.238 [DEBUG] [Thread-189408] [transport.py] [_log()] kex follows: False
2026-02-14T17:38:43.238 [DEBUG] [Thread-189408] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:38:43.238 [DEBUG] [Thread-189408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:38:43.239 [DEBUG] [Thread-189408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:38:43.239 [DEBUG] [Thread-189408] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:38:43.239 [DEBUG] [Thread-189408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:38:43.239 [DEBUG] [Thread-189408] [transport.py] [_log()] Compression: none
2026-02-14T17:38:43.239 [DEBUG] [Thread-189408] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:38:43.295 [DEBUG] [Thread-189408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:38:43.296 [DEBUG] [Thread-189408] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:38:43.296 [DEBUG] [Thread-189408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:38:43.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:38:43.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:38:43.355 [DEBUG] [Thread-189408] [transport.py] [_log()] userauth is OK
2026-02-14T17:38:43.355 [DEBUG] [Thread-189408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:38:43.355 [DEBUG] [Thread-189408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:38:43.355 [DEBUG] [Thread-189408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:38:43.356 [DEBUG] [Thread-189408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:38:43.374 [INFO] [Thread-189408] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:38:43.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-14T17:38:43.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:38:44.188 [DEBUG] [Thread-189408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:38:44.188 [DEBUG] [Thread-189408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:38:44.236 [DEBUG] [Thread-189408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:38:44.236 [DEBUG] [Thread-189408] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:38:44.246 [DEBUG] [Thread-189408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:38:44.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:38:44.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:38:44.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-14T17:38:44.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:38:44.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:38:44.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:38:44.283 [DEBUG] [Thread-189408] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:38:49.768 [DEBUG] [Thread-189410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:39:04.831 [DEBUG] [Thread-189411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:39:05.710 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:39:05.711 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:39:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:39:14.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:39:14.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T17:39:16.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 38, 46), 13.62, 40.03, 0.0, 33.59, 15.71, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:39:16.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:38:46
2026-02-14T17:39:16.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:39:16.755 [DEBUG] [Thread-189412] [transport.py] [_log()] starting thread (client mode): 0xa2db7ca0
2026-02-14T17:39:16.755 [DEBUG] [Thread-189412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:39:16.776 [DEBUG] [Thread-189412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:39:16.776 [INFO] [Thread-189412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:39:16.777 [DEBUG] [Thread-189412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:39:16.777 [DEBUG] [Thread-189412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:39:16.777 [DEBUG] [Thread-189412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:39:16.777 [DEBUG] [Thread-189412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:39:16.777 [DEBUG] [Thread-189412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:39:16.778 [DEBUG] [Thread-189412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:39:16.778 [DEBUG] [Thread-189412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:39:16.778 [DEBUG] [Thread-189412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:39:16.778 [DEBUG] [Thread-189412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:39:16.778 [DEBUG] [Thread-189412] [transport.py] [_log()] client lang: <none>
2026-02-14T17:39:16.778 [DEBUG] [Thread-189412] [transport.py] [_log()] server lang: <none>
2026-02-14T17:39:16.778 [DEBUG] [Thread-189412] [transport.py] [_log()] kex follows: False
2026-02-14T17:39:16.778 [DEBUG] [Thread-189412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:39:16.778 [DEBUG] [Thread-189412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:39:16.778 [DEBUG] [Thread-189412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:39:16.778 [DEBUG] [Thread-189412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:39:16.778 [DEBUG] [Thread-189412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:39:16.778 [DEBUG] [Thread-189412] [transport.py] [_log()] Compression: none
2026-02-14T17:39:16.778 [DEBUG] [Thread-189412] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:39:16.788 [DEBUG] [Thread-189412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:39:16.788 [DEBUG] [Thread-189412] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:39:16.788 [DEBUG] [Thread-189412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:39:16.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:39:16.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:39:16.791 [DEBUG] [Thread-189412] [transport.py] [_log()] userauth is OK
2026-02-14T17:39:16.791 [DEBUG] [Thread-189412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:39:16.791 [DEBUG] [Thread-189412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:39:16.791 [DEBUG] [Thread-189412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:39:16.791 [DEBUG] [Thread-189412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:39:16.806 [INFO] [Thread-189412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:39:16.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:39:17.411 [DEBUG] [Thread-189412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:39:17.411 [DEBUG] [Thread-189412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:39:17.412 [DEBUG] [Thread-189412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:39:17.452 [DEBUG] [Thread-189412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:39:17.452 [DEBUG] [Thread-189412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:39:17.458 [DEBUG] [Thread-189412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:39:17.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:39:17.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:39:17.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:39:17.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:39:17.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:39:17.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:39:17.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:39:17.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:39:17.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:39:17.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.652188 -999.00  +15.10  23.16     46   +3.70 1 1 1 1 1   887    0 10.86 -26.71 ----- 24.4 23.2 164.4 39.0 18.4 -26.8 18.1 -26.4 19.5 -25.3 20.2 -26.3
2026-02-14T17:39:17.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:39:17.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:39:17.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.652188
2026-02-14T17:39:17.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:39:17.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:39:17.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:39:17.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:39:17.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:39:17.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:38:46', tmtdew=13.62, humidity=40.03, cloud=0.0, wind=33.59, temperature=15.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:39:09.043', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:39:17.482 [DEBUG] [Thread-189412] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:39:17.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-14T17:39:17.578 [DEBUG] [Thread-189415] [transport.py] [_log()] starting thread (client mode): 0xa2d03b80
2026-02-14T17:39:17.578 [DEBUG] [Thread-189415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:39:17.592 [DEBUG] [Thread-189415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:39:17.592 [INFO] [Thread-189415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:39:17.600 [DEBUG] [Thread-189415] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:39:17.600 [DEBUG] [Thread-189415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:39:17.600 [DEBUG] [Thread-189415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:39:17.600 [DEBUG] [Thread-189415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:39:17.600 [DEBUG] [Thread-189415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:39:17.601 [DEBUG] [Thread-189415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:39:17.601 [DEBUG] [Thread-189415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:39:17.601 [DEBUG] [Thread-189415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:39:17.601 [DEBUG] [Thread-189415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:39:17.601 [DEBUG] [Thread-189415] [transport.py] [_log()] client lang: <none>
2026-02-14T17:39:17.601 [DEBUG] [Thread-189415] [transport.py] [_log()] server lang: <none>
2026-02-14T17:39:17.601 [DEBUG] [Thread-189415] [transport.py] [_log()] kex follows: False
2026-02-14T17:39:17.601 [DEBUG] [Thread-189415] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:39:17.601 [DEBUG] [Thread-189415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:39:17.601 [DEBUG] [Thread-189415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:39:17.601 [DEBUG] [Thread-189415] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:39:17.601 [DEBUG] [Thread-189415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:39:17.601 [DEBUG] [Thread-189415] [transport.py] [_log()] Compression: none
2026-02-14T17:39:17.601 [DEBUG] [Thread-189415] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:39:17.660 [DEBUG] [Thread-189415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:39:17.661 [DEBUG] [Thread-189415] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:39:17.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:39:17.662 [DEBUG] [Thread-189415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:39:17.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:39:17.719 [DEBUG] [Thread-189415] [transport.py] [_log()] userauth is OK
2026-02-14T17:39:17.719 [DEBUG] [Thread-189415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:39:17.719 [DEBUG] [Thread-189415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:39:17.719 [DEBUG] [Thread-189415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:39:17.719 [DEBUG] [Thread-189415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:39:17.738 [INFO] [Thread-189415] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:39:17.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-14T17:39:17.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:39:18.566 [DEBUG] [Thread-189415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:39:18.566 [DEBUG] [Thread-189415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:39:18.614 [DEBUG] [Thread-189415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:39:18.615 [DEBUG] [Thread-189415] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:39:18.624 [DEBUG] [Thread-189415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:39:18.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:39:18.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:39:18.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:39:18.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:39:18.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:39:18.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:39:18.661 [DEBUG] [Thread-189415] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:39:19.867 [DEBUG] [Thread-189417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:39:34.341 [DEBUG] [Thread-189418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:39:34.917 [DEBUG] [Thread-189419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:39:48.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:39:48.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:39:48.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-14T17:39:49.957 [DEBUG] [Thread-189420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:39:50.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 39, 21), 13.71, 39.78, 0.0, 35.75, 15.71, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:39:50.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:39:21
2026-02-14T17:39:50.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:39:51.079 [DEBUG] [Thread-189421] [transport.py] [_log()] starting thread (client mode): 0xa2d022f0
2026-02-14T17:39:51.080 [DEBUG] [Thread-189421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:39:51.099 [DEBUG] [Thread-189421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:39:51.099 [INFO] [Thread-189421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:39:51.103 [DEBUG] [Thread-189421] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:39:51.103 [DEBUG] [Thread-189421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:39:51.103 [DEBUG] [Thread-189421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:39:51.103 [DEBUG] [Thread-189421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:39:51.103 [DEBUG] [Thread-189421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:39:51.103 [DEBUG] [Thread-189421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:39:51.103 [DEBUG] [Thread-189421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:39:51.104 [DEBUG] [Thread-189421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:39:51.104 [DEBUG] [Thread-189421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:39:51.104 [DEBUG] [Thread-189421] [transport.py] [_log()] client lang: <none>
2026-02-14T17:39:51.104 [DEBUG] [Thread-189421] [transport.py] [_log()] server lang: <none>
2026-02-14T17:39:51.104 [DEBUG] [Thread-189421] [transport.py] [_log()] kex follows: False
2026-02-14T17:39:51.104 [DEBUG] [Thread-189421] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:39:51.104 [DEBUG] [Thread-189421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:39:51.104 [DEBUG] [Thread-189421] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:39:51.104 [DEBUG] [Thread-189421] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:39:51.104 [DEBUG] [Thread-189421] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:39:51.104 [DEBUG] [Thread-189421] [transport.py] [_log()] Compression: none
2026-02-14T17:39:51.104 [DEBUG] [Thread-189421] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:39:51.119 [DEBUG] [Thread-189421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:39:51.120 [DEBUG] [Thread-189421] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:39:51.120 [DEBUG] [Thread-189421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:39:51.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:39:51.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:39:51.122 [DEBUG] [Thread-189421] [transport.py] [_log()] userauth is OK
2026-02-14T17:39:51.123 [DEBUG] [Thread-189421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:39:51.123 [DEBUG] [Thread-189421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:39:51.123 [DEBUG] [Thread-189421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:39:51.123 [DEBUG] [Thread-189421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:39:51.143 [INFO] [Thread-189421] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:39:51.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:39:51.793 [DEBUG] [Thread-189421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:39:51.794 [DEBUG] [Thread-189421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:39:51.794 [DEBUG] [Thread-189421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:39:51.834 [DEBUG] [Thread-189421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:39:51.835 [DEBUG] [Thread-189421] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:39:51.838 [DEBUG] [Thread-189421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:39:51.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:39:51.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:39:51.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:39:51.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:39:51.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:39:51.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:39:51.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:39:51.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:39:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:39:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.652536 -999.00  +15.30  25.11     45   +3.70 1 1 1 1 1   887    0 11.01 -26.07 ----- 26.5 25.1 171.4 43.1 18.5 -27.7 18.2 -26.3 19.6 -24.7 20.2 -27.0
2026-02-14T17:39:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:39:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:39:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.652536
2026-02-14T17:39:51.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:39:51.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:39:51.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:39:51.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:39:51.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:39:51.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:39:21', tmtdew=13.71, humidity=39.78, cloud=0.0, wind=35.75, temperature=15.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:39:39.110', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:39:51.866 [DEBUG] [Thread-189421] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:39:51.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-14T17:39:51.972 [DEBUG] [Thread-189424] [transport.py] [_log()] starting thread (client mode): 0xa57b0880
2026-02-14T17:39:51.972 [DEBUG] [Thread-189424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:39:51.986 [DEBUG] [Thread-189424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:39:51.986 [INFO] [Thread-189424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:39:51.994 [DEBUG] [Thread-189424] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:39:51.994 [DEBUG] [Thread-189424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:39:51.994 [DEBUG] [Thread-189424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:39:51.994 [DEBUG] [Thread-189424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:39:51.994 [DEBUG] [Thread-189424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:39:51.994 [DEBUG] [Thread-189424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:39:51.994 [DEBUG] [Thread-189424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:39:51.994 [DEBUG] [Thread-189424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:39:51.994 [DEBUG] [Thread-189424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:39:51.994 [DEBUG] [Thread-189424] [transport.py] [_log()] client lang: <none>
2026-02-14T17:39:51.994 [DEBUG] [Thread-189424] [transport.py] [_log()] server lang: <none>
2026-02-14T17:39:51.994 [DEBUG] [Thread-189424] [transport.py] [_log()] kex follows: False
2026-02-14T17:39:51.994 [DEBUG] [Thread-189424] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:39:51.995 [DEBUG] [Thread-189424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:39:51.995 [DEBUG] [Thread-189424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:39:51.995 [DEBUG] [Thread-189424] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:39:51.995 [DEBUG] [Thread-189424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:39:51.995 [DEBUG] [Thread-189424] [transport.py] [_log()] Compression: none
2026-02-14T17:39:51.995 [DEBUG] [Thread-189424] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:39:52.050 [DEBUG] [Thread-189424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:39:52.051 [DEBUG] [Thread-189424] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:39:52.051 [DEBUG] [Thread-189424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:39:52.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:39:52.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:39:52.107 [DEBUG] [Thread-189424] [transport.py] [_log()] userauth is OK
2026-02-14T17:39:52.107 [DEBUG] [Thread-189424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:39:52.107 [DEBUG] [Thread-189424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:39:52.107 [DEBUG] [Thread-189424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:39:52.108 [DEBUG] [Thread-189424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:39:52.131 [INFO] [Thread-189424] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:39:52.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-14T17:39:52.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:39:52.957 [DEBUG] [Thread-189424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:39:52.957 [DEBUG] [Thread-189424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:39:53.005 [DEBUG] [Thread-189424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:39:53.005 [DEBUG] [Thread-189424] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:39:53.014 [DEBUG] [Thread-189424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:39:53.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:39:53.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-14T17:39:53.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-14T17:39:53.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:39:53.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:39:53.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:39:53.049 [DEBUG] [Thread-189424] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:40:04.993 [DEBUG] [Thread-189426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:40:05.852 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:40:05.854 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:40:20.051 [DEBUG] [Thread-189427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:40:23.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:40:23.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:40:23.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-14T17:40:25.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 39, 56), 13.75, 39.43, 0.0, 32.62, 15.71, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:40:25.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:39:56
2026-02-14T17:40:25.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:40:25.532 [DEBUG] [Thread-189428] [transport.py] [_log()] starting thread (client mode): 0xa57c3df0
2026-02-14T17:40:25.532 [DEBUG] [Thread-189428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:40:25.552 [DEBUG] [Thread-189428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:40:25.553 [INFO] [Thread-189428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:40:25.554 [DEBUG] [Thread-189428] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:40:25.554 [DEBUG] [Thread-189428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:40:25.554 [DEBUG] [Thread-189428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:40:25.554 [DEBUG] [Thread-189428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:40:25.554 [DEBUG] [Thread-189428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:40:25.554 [DEBUG] [Thread-189428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:40:25.554 [DEBUG] [Thread-189428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:40:25.554 [DEBUG] [Thread-189428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:40:25.554 [DEBUG] [Thread-189428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:40:25.554 [DEBUG] [Thread-189428] [transport.py] [_log()] client lang: <none>
2026-02-14T17:40:25.554 [DEBUG] [Thread-189428] [transport.py] [_log()] server lang: <none>
2026-02-14T17:40:25.554 [DEBUG] [Thread-189428] [transport.py] [_log()] kex follows: False
2026-02-14T17:40:25.554 [DEBUG] [Thread-189428] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:40:25.554 [DEBUG] [Thread-189428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:40:25.554 [DEBUG] [Thread-189428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:40:25.554 [DEBUG] [Thread-189428] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:40:25.554 [DEBUG] [Thread-189428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:40:25.554 [DEBUG] [Thread-189428] [transport.py] [_log()] Compression: none
2026-02-14T17:40:25.554 [DEBUG] [Thread-189428] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:40:25.563 [DEBUG] [Thread-189428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:40:25.563 [DEBUG] [Thread-189428] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:40:25.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:40:25.563 [DEBUG] [Thread-189428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:40:25.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:40:25.565 [DEBUG] [Thread-189428] [transport.py] [_log()] userauth is OK
2026-02-14T17:40:25.565 [DEBUG] [Thread-189428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:40:25.565 [DEBUG] [Thread-189428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:40:25.565 [DEBUG] [Thread-189428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:40:25.565 [DEBUG] [Thread-189428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:40:25.577 [INFO] [Thread-189428] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:40:25.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:40:26.222 [DEBUG] [Thread-189428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:40:26.222 [DEBUG] [Thread-189428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:40:26.223 [DEBUG] [Thread-189428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:40:26.264 [DEBUG] [Thread-189428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:40:26.264 [DEBUG] [Thread-189428] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:40:26.267 [DEBUG] [Thread-189428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:40:26.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:40:26.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:40:26.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:40:26.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:40:26.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:40:26.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:40:26.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:40:26.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:40:26.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:40:26.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.652882 -999.00  +15.30  28.92     45   +3.60 1 1 1 1 1   887    0 10.96 -25.57 ----- 32.2 28.9 158.8 46.3 18.4 -28.0 18.2 -26.2 19.6 -26.3 20.1 -27.5
2026-02-14T17:40:26.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:40:26.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:40:26.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.652882
2026-02-14T17:40:26.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:40:26.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:40:26.294 [DEBUG] [Thread-189428] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:40:26.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:40:26.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:40:26.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:40:26.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:39:56', tmtdew=13.75, humidity=39.43, cloud=0.0, wind=32.62, temperature=15.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:40:09.005', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:40:26.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-14T17:40:26.392 [DEBUG] [Thread-189431] [transport.py] [_log()] starting thread (client mode): 0xa2dee5c0
2026-02-14T17:40:26.392 [DEBUG] [Thread-189431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:40:26.406 [DEBUG] [Thread-189431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:40:26.407 [INFO] [Thread-189431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:40:26.414 [DEBUG] [Thread-189431] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:40:26.414 [DEBUG] [Thread-189431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:40:26.414 [DEBUG] [Thread-189431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:40:26.414 [DEBUG] [Thread-189431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:40:26.415 [DEBUG] [Thread-189431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:40:26.415 [DEBUG] [Thread-189431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:40:26.415 [DEBUG] [Thread-189431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:40:26.415 [DEBUG] [Thread-189431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:40:26.415 [DEBUG] [Thread-189431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:40:26.415 [DEBUG] [Thread-189431] [transport.py] [_log()] client lang: <none>
2026-02-14T17:40:26.415 [DEBUG] [Thread-189431] [transport.py] [_log()] server lang: <none>
2026-02-14T17:40:26.415 [DEBUG] [Thread-189431] [transport.py] [_log()] kex follows: False
2026-02-14T17:40:26.415 [DEBUG] [Thread-189431] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:40:26.415 [DEBUG] [Thread-189431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:40:26.416 [DEBUG] [Thread-189431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:40:26.416 [DEBUG] [Thread-189431] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:40:26.416 [DEBUG] [Thread-189431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:40:26.416 [DEBUG] [Thread-189431] [transport.py] [_log()] Compression: none
2026-02-14T17:40:26.416 [DEBUG] [Thread-189431] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:40:26.474 [DEBUG] [Thread-189431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:40:26.475 [DEBUG] [Thread-189431] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:40:26.475 [DEBUG] [Thread-189431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:40:26.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:40:26.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:40:26.530 [DEBUG] [Thread-189431] [transport.py] [_log()] userauth is OK
2026-02-14T17:40:26.530 [DEBUG] [Thread-189431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:40:26.530 [DEBUG] [Thread-189431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:40:26.530 [DEBUG] [Thread-189431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:40:26.531 [DEBUG] [Thread-189431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:40:26.549 [INFO] [Thread-189431] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:40:26.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-14T17:40:26.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:40:27.398 [DEBUG] [Thread-189431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:40:27.398 [DEBUG] [Thread-189431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:40:27.446 [DEBUG] [Thread-189431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:40:27.446 [DEBUG] [Thread-189431] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:40:27.455 [DEBUG] [Thread-189431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:40:27.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:40:27.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-14T17:40:27.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-14T17:40:27.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:40:27.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:40:27.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:40:27.490 [DEBUG] [Thread-189431] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:40:34.375 [DEBUG] [Thread-189433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:40:35.084 [DEBUG] [Thread-189434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:40:50.137 [DEBUG] [Thread-189435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:40:57.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:40:57.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:40:57.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-14T17:40:59.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 40, 32), 13.78, 39.35, 0.0, 36.35, 15.71, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:40:59.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:40:32
2026-02-14T17:40:59.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:40:59.889 [DEBUG] [Thread-189436] [transport.py] [_log()] starting thread (client mode): 0xa2d00af0
2026-02-14T17:40:59.889 [DEBUG] [Thread-189436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:40:59.909 [DEBUG] [Thread-189436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:40:59.910 [INFO] [Thread-189436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:40:59.913 [DEBUG] [Thread-189436] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:40:59.913 [DEBUG] [Thread-189436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:40:59.913 [DEBUG] [Thread-189436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:40:59.913 [DEBUG] [Thread-189436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:40:59.913 [DEBUG] [Thread-189436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:40:59.913 [DEBUG] [Thread-189436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:40:59.913 [DEBUG] [Thread-189436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:40:59.913 [DEBUG] [Thread-189436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:40:59.913 [DEBUG] [Thread-189436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:40:59.914 [DEBUG] [Thread-189436] [transport.py] [_log()] client lang: <none>
2026-02-14T17:40:59.914 [DEBUG] [Thread-189436] [transport.py] [_log()] server lang: <none>
2026-02-14T17:40:59.914 [DEBUG] [Thread-189436] [transport.py] [_log()] kex follows: False
2026-02-14T17:40:59.914 [DEBUG] [Thread-189436] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:40:59.914 [DEBUG] [Thread-189436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:40:59.914 [DEBUG] [Thread-189436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:40:59.914 [DEBUG] [Thread-189436] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:40:59.914 [DEBUG] [Thread-189436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:40:59.914 [DEBUG] [Thread-189436] [transport.py] [_log()] Compression: none
2026-02-14T17:40:59.914 [DEBUG] [Thread-189436] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:40:59.931 [DEBUG] [Thread-189436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:40:59.931 [DEBUG] [Thread-189436] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:40:59.932 [DEBUG] [Thread-189436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:40:59.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:40:59.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:40:59.934 [DEBUG] [Thread-189436] [transport.py] [_log()] userauth is OK
2026-02-14T17:40:59.934 [DEBUG] [Thread-189436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:40:59.934 [DEBUG] [Thread-189436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:40:59.934 [DEBUG] [Thread-189436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:40:59.934 [DEBUG] [Thread-189436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:40:59.955 [INFO] [Thread-189436] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:40:59.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:41:00.623 [DEBUG] [Thread-189436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:41:00.624 [DEBUG] [Thread-189436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:41:00.624 [DEBUG] [Thread-189436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:41:00.664 [DEBUG] [Thread-189436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:41:00.665 [DEBUG] [Thread-189436] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:41:00.668 [DEBUG] [Thread-189436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:41:00.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:41:00.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:41:00.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:41:00.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:41:00.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:41:00.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:41:00.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:41:00.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:41:00.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:41:00.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.653230 -999.00  +15.10  25.91     46   +3.60 1 1 1 1 1   887    0 10.91 -29.97 ----- 24.1 25.9 156.5 41.6 18.4 -28.2 18.2 -27.1 19.5 -25.4 20.1 -27.2
2026-02-14T17:41:00.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:41:00.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:41:00.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.653230
2026-02-14T17:41:00.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:41:00.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:41:00.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:41:00.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:41:00.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:41:00.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:40:32', tmtdew=13.78, humidity=39.35, cloud=0.0, wind=36.35, temperature=15.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:40:39.072', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:41:00.696 [DEBUG] [Thread-189436] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:41:00.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-14T17:41:00.791 [DEBUG] [Thread-189439] [transport.py] [_log()] starting thread (client mode): 0xa57b3a90
2026-02-14T17:41:00.792 [DEBUG] [Thread-189439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:41:00.806 [DEBUG] [Thread-189439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:41:00.806 [INFO] [Thread-189439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:41:00.814 [DEBUG] [Thread-189439] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:41:00.814 [DEBUG] [Thread-189439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:41:00.814 [DEBUG] [Thread-189439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:41:00.814 [DEBUG] [Thread-189439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:41:00.814 [DEBUG] [Thread-189439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:41:00.814 [DEBUG] [Thread-189439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:41:00.814 [DEBUG] [Thread-189439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:41:00.815 [DEBUG] [Thread-189439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:41:00.815 [DEBUG] [Thread-189439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:41:00.815 [DEBUG] [Thread-189439] [transport.py] [_log()] client lang: <none>
2026-02-14T17:41:00.815 [DEBUG] [Thread-189439] [transport.py] [_log()] server lang: <none>
2026-02-14T17:41:00.815 [DEBUG] [Thread-189439] [transport.py] [_log()] kex follows: False
2026-02-14T17:41:00.815 [DEBUG] [Thread-189439] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:41:00.815 [DEBUG] [Thread-189439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:41:00.815 [DEBUG] [Thread-189439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:41:00.815 [DEBUG] [Thread-189439] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:41:00.815 [DEBUG] [Thread-189439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:41:00.815 [DEBUG] [Thread-189439] [transport.py] [_log()] Compression: none
2026-02-14T17:41:00.815 [DEBUG] [Thread-189439] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:41:00.870 [DEBUG] [Thread-189439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:41:00.871 [DEBUG] [Thread-189439] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:41:00.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:41:00.872 [DEBUG] [Thread-189439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:41:00.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:41:00.927 [DEBUG] [Thread-189439] [transport.py] [_log()] userauth is OK
2026-02-14T17:41:00.927 [DEBUG] [Thread-189439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:41:00.927 [DEBUG] [Thread-189439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:41:00.927 [DEBUG] [Thread-189439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:41:00.927 [DEBUG] [Thread-189439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:41:00.946 [INFO] [Thread-189439] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:41: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-14T17:41:00.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:41:01.746 [DEBUG] [Thread-189439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:41:01.747 [DEBUG] [Thread-189439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:41:01.794 [DEBUG] [Thread-189439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:41:01.795 [DEBUG] [Thread-189439] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:41:01.804 [DEBUG] [Thread-189439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:41:01.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:41:01.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-14T17:41:01.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-14T17:41:01.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:41:01.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:41:01.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:41:01.842 [DEBUG] [Thread-189439] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:41:05.173 [DEBUG] [Thread-189441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:41:05.991 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:41:05.993 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:41:20.230 [DEBUG] [Thread-189442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:41:31.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:41:31.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:41:31.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-14T17:41:34.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 41, 7), 13.6, 39.8, 0.0, 37.51, 15.59, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:41:34.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:41:07
2026-02-14T17:41:34.408 [DEBUG] [Thread-189443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:41:34.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:41:34.941 [DEBUG] [Thread-189444] [transport.py] [_log()] starting thread (client mode): 0xa57c09d0
2026-02-14T17:41:34.941 [DEBUG] [Thread-189444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:41:34.961 [DEBUG] [Thread-189444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:41:34.961 [INFO] [Thread-189444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:41:34.964 [DEBUG] [Thread-189444] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:41:34.964 [DEBUG] [Thread-189444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:41:34.964 [DEBUG] [Thread-189444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:41:34.964 [DEBUG] [Thread-189444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:41:34.964 [DEBUG] [Thread-189444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:41:34.964 [DEBUG] [Thread-189444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:41:34.964 [DEBUG] [Thread-189444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:41:34.964 [DEBUG] [Thread-189444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:41:34.964 [DEBUG] [Thread-189444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:41:34.964 [DEBUG] [Thread-189444] [transport.py] [_log()] client lang: <none>
2026-02-14T17:41:34.964 [DEBUG] [Thread-189444] [transport.py] [_log()] server lang: <none>
2026-02-14T17:41:34.964 [DEBUG] [Thread-189444] [transport.py] [_log()] kex follows: False
2026-02-14T17:41:34.965 [DEBUG] [Thread-189444] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:41:34.965 [DEBUG] [Thread-189444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:41:34.965 [DEBUG] [Thread-189444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:41:34.965 [DEBUG] [Thread-189444] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:41:34.965 [DEBUG] [Thread-189444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:41:34.965 [DEBUG] [Thread-189444] [transport.py] [_log()] Compression: none
2026-02-14T17:41:34.965 [DEBUG] [Thread-189444] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:41:34.975 [DEBUG] [Thread-189444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:41:34.976 [DEBUG] [Thread-189444] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:41:34.977 [DEBUG] [Thread-189444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:41:34.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:41:34.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:41:34.980 [DEBUG] [Thread-189444] [transport.py] [_log()] userauth is OK
2026-02-14T17:41:34.981 [DEBUG] [Thread-189444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:41:34.981 [DEBUG] [Thread-189444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:41:34.981 [DEBUG] [Thread-189444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:41:34.981 [DEBUG] [Thread-189444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:41:35.013 [INFO] [Thread-189444] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:41:35.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:41:35.266 [DEBUG] [Thread-189446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:41:35.668 [DEBUG] [Thread-189444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:41:35.669 [DEBUG] [Thread-189444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:41:35.669 [DEBUG] [Thread-189444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:41:35.709 [DEBUG] [Thread-189444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:41:35.710 [DEBUG] [Thread-189444] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:41:35.713 [DEBUG] [Thread-189444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:41:35.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:41:35.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:41:35.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:41:35.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:41:35.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:41:35.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:41:35.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:41:35.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:41:35.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:41:35.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.653577 -999.00  +15.10  35.68     46   +3.60 1 1 2 1 1   887    0 10.86 -28.29 ----- 33.7 35.7 167.2 39.3 18.4 -28.6 18.1 -27.9 19.5 -25.3 20.1 -28.4
2026-02-14T17:41:35.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:41:35.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:41:35.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.653577
2026-02-14T17:41:35.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:41:35.737 [DEBUG] [Thread-189444] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:41:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:41:35.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:41:35.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:41:35.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:41:35.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:41:07', tmtdew=13.6, humidity=39.8, cloud=0.0, wind=37.51, temperature=15.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:41:09.053', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:41:35.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-14T17:41:35.832 [DEBUG] [Thread-189448] [transport.py] [_log()] starting thread (client mode): 0xa2d018d0
2026-02-14T17:41:35.832 [DEBUG] [Thread-189448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:41:35.847 [DEBUG] [Thread-189448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:41:35.847 [INFO] [Thread-189448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:41:35.855 [DEBUG] [Thread-189448] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:41:35.855 [DEBUG] [Thread-189448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:41:35.855 [DEBUG] [Thread-189448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:41:35.855 [DEBUG] [Thread-189448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:41:35.855 [DEBUG] [Thread-189448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:41:35.855 [DEBUG] [Thread-189448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:41:35.855 [DEBUG] [Thread-189448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:41:35.855 [DEBUG] [Thread-189448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:41:35.855 [DEBUG] [Thread-189448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:41:35.855 [DEBUG] [Thread-189448] [transport.py] [_log()] client lang: <none>
2026-02-14T17:41:35.855 [DEBUG] [Thread-189448] [transport.py] [_log()] server lang: <none>
2026-02-14T17:41:35.855 [DEBUG] [Thread-189448] [transport.py] [_log()] kex follows: False
2026-02-14T17:41:35.855 [DEBUG] [Thread-189448] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:41:35.855 [DEBUG] [Thread-189448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:41:35.855 [DEBUG] [Thread-189448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:41:35.855 [DEBUG] [Thread-189448] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:41:35.855 [DEBUG] [Thread-189448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:41:35.855 [DEBUG] [Thread-189448] [transport.py] [_log()] Compression: none
2026-02-14T17:41:35.855 [DEBUG] [Thread-189448] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:41:35.915 [DEBUG] [Thread-189448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:41:35.916 [DEBUG] [Thread-189448] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:41:35.916 [DEBUG] [Thread-189448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:41:35.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:41:35.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:41:35.971 [DEBUG] [Thread-189448] [transport.py] [_log()] userauth is OK
2026-02-14T17:41:35.972 [DEBUG] [Thread-189448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:41:35.972 [DEBUG] [Thread-189448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:41:35.972 [DEBUG] [Thread-189448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:41:35.972 [DEBUG] [Thread-189448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:41:35.997 [INFO] [Thread-189448] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:41:35.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-14T17:41:35.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:41:36.827 [DEBUG] [Thread-189448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:41:36.827 [DEBUG] [Thread-189448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:41:36.875 [DEBUG] [Thread-189448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:41:36.876 [DEBUG] [Thread-189448] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:41:36.885 [DEBUG] [Thread-189448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:41:36.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:41:36.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-14T17:41:36.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:41:36.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:41:36.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:41:36.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:41:36.922 [DEBUG] [Thread-189448] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:41:50.304 [DEBUG] [Thread-189450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:42:05.365 [DEBUG] [Thread-189451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:42:06.135 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:42:06.136 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:42:06.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:42:06.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:42:06.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T17:42:08.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 41, 42), 14.47, 37.63, 0.0, 41.67, 16.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:42:08.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:41:42
2026-02-14T17:42:09.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:42:09.391 [DEBUG] [Thread-189452] [transport.py] [_log()] starting thread (client mode): 0xa57c0850
2026-02-14T17:42:09.391 [DEBUG] [Thread-189452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:42:09.411 [DEBUG] [Thread-189452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:42:09.411 [INFO] [Thread-189452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:42:09.413 [DEBUG] [Thread-189452] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:42:09.413 [DEBUG] [Thread-189452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:42:09.413 [DEBUG] [Thread-189452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:42:09.413 [DEBUG] [Thread-189452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:42:09.413 [DEBUG] [Thread-189452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:42:09.413 [DEBUG] [Thread-189452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:42:09.413 [DEBUG] [Thread-189452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:42:09.414 [DEBUG] [Thread-189452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:42:09.414 [DEBUG] [Thread-189452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:42:09.414 [DEBUG] [Thread-189452] [transport.py] [_log()] client lang: <none>
2026-02-14T17:42:09.414 [DEBUG] [Thread-189452] [transport.py] [_log()] server lang: <none>
2026-02-14T17:42:09.414 [DEBUG] [Thread-189452] [transport.py] [_log()] kex follows: False
2026-02-14T17:42:09.414 [DEBUG] [Thread-189452] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:42:09.414 [DEBUG] [Thread-189452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:42:09.414 [DEBUG] [Thread-189452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:42:09.414 [DEBUG] [Thread-189452] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:42:09.414 [DEBUG] [Thread-189452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:42:09.414 [DEBUG] [Thread-189452] [transport.py] [_log()] Compression: none
2026-02-14T17:42:09.414 [DEBUG] [Thread-189452] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:42:09.425 [DEBUG] [Thread-189452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:42:09.426 [DEBUG] [Thread-189452] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:42:09.426 [DEBUG] [Thread-189452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:42:09.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:42:09.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:42:09.428 [DEBUG] [Thread-189452] [transport.py] [_log()] userauth is OK
2026-02-14T17:42:09.428 [DEBUG] [Thread-189452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:42:09.428 [DEBUG] [Thread-189452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:42:09.428 [DEBUG] [Thread-189452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:42:09.428 [DEBUG] [Thread-189452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:42:09.453 [INFO] [Thread-189452] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:42:09.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:42:10.060 [DEBUG] [Thread-189452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:42:10.061 [DEBUG] [Thread-189452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:42:10.061 [DEBUG] [Thread-189452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:42:10.101 [DEBUG] [Thread-189452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:42:10.101 [DEBUG] [Thread-189452] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:42:10.104 [DEBUG] [Thread-189452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:42:10.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:42:10.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:42:10.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:42:10.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:42:10.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:42:10.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:42:10.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:42:10.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:42:10.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:42:10.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.653925 -999.00  +15.10  29.27     46   +3.80 1 1 1 1 1   887    0 10.82 -34.97 ----- 24.7 29.3 164.6 41.3 18.4 -27.6 18.1 -26.3 19.4 -25.2 20.1 -27.0
2026-02-14T17:42:10.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:42:10.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:42:10.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.653925
2026-02-14T17:42:10.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:42:10.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:42:10.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:42:10.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:42:10.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:42:10.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:41:42', tmtdew=14.47, humidity=37.63, cloud=0.0, wind=41.67, temperature=16.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:41:39.120', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:42:10.129 [DEBUG] [Thread-189452] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:42:10.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-14T17:42:10.224 [DEBUG] [Thread-189455] [transport.py] [_log()] starting thread (client mode): 0xa81d6050
2026-02-14T17:42:10.224 [DEBUG] [Thread-189455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:42:10.238 [DEBUG] [Thread-189455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:42:10.238 [INFO] [Thread-189455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:42:10.246 [DEBUG] [Thread-189455] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:42:10.246 [DEBUG] [Thread-189455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:42:10.246 [DEBUG] [Thread-189455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:42:10.246 [DEBUG] [Thread-189455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:42:10.246 [DEBUG] [Thread-189455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:42:10.246 [DEBUG] [Thread-189455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:42:10.247 [DEBUG] [Thread-189455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:42:10.247 [DEBUG] [Thread-189455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:42:10.247 [DEBUG] [Thread-189455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:42:10.247 [DEBUG] [Thread-189455] [transport.py] [_log()] client lang: <none>
2026-02-14T17:42:10.247 [DEBUG] [Thread-189455] [transport.py] [_log()] server lang: <none>
2026-02-14T17:42:10.247 [DEBUG] [Thread-189455] [transport.py] [_log()] kex follows: False
2026-02-14T17:42:10.247 [DEBUG] [Thread-189455] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:42:10.247 [DEBUG] [Thread-189455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:42:10.247 [DEBUG] [Thread-189455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:42:10.248 [DEBUG] [Thread-189455] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:42:10.248 [DEBUG] [Thread-189455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:42:10.248 [DEBUG] [Thread-189455] [transport.py] [_log()] Compression: none
2026-02-14T17:42:10.248 [DEBUG] [Thread-189455] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:42:10.303 [DEBUG] [Thread-189455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:42:10.304 [DEBUG] [Thread-189455] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:42:10.304 [DEBUG] [Thread-189455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:42:10.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:42:10.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:42:10.359 [DEBUG] [Thread-189455] [transport.py] [_log()] userauth is OK
2026-02-14T17:42:10.359 [DEBUG] [Thread-189455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:42:10.359 [DEBUG] [Thread-189455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:42:10.359 [DEBUG] [Thread-189455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:42:10.360 [DEBUG] [Thread-189455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:42:10.383 [INFO] [Thread-189455] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:42:10.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T17:42:10.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:42:11.169 [DEBUG] [Thread-189455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:42:11.170 [DEBUG] [Thread-189455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:42:11.217 [DEBUG] [Thread-189455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:42:11.217 [DEBUG] [Thread-189455] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:42:11.227 [DEBUG] [Thread-189455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:42:11.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:42:11.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:42: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') -> 00000000
2026-02-14T17:42:11.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:42:11.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:42:11.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:42:11.264 [DEBUG] [Thread-189455] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:42:20.403 [DEBUG] [Thread-189457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:42:34.441 [DEBUG] [Thread-189458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:42:35.460 [DEBUG] [Thread-189459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:42:41.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:42:41.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:42:41.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-14T17:42:43.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 42, 18), 13.54, 39.81, 0.0, 32.41, 15.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:42:43.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:42:18
2026-02-14T17:42:43.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:42:43.691 [DEBUG] [Thread-189460] [transport.py] [_log()] starting thread (client mode): 0xa5770790
2026-02-14T17:42:43.691 [DEBUG] [Thread-189460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:42:43.711 [DEBUG] [Thread-189460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:42:43.711 [INFO] [Thread-189460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:42:43.714 [DEBUG] [Thread-189460] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:42:43.715 [DEBUG] [Thread-189460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:42:43.715 [DEBUG] [Thread-189460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:42:43.715 [DEBUG] [Thread-189460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:42:43.715 [DEBUG] [Thread-189460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:42:43.715 [DEBUG] [Thread-189460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:42:43.715 [DEBUG] [Thread-189460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:42:43.715 [DEBUG] [Thread-189460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:42:43.715 [DEBUG] [Thread-189460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:42:43.715 [DEBUG] [Thread-189460] [transport.py] [_log()] client lang: <none>
2026-02-14T17:42:43.715 [DEBUG] [Thread-189460] [transport.py] [_log()] server lang: <none>
2026-02-14T17:42:43.716 [DEBUG] [Thread-189460] [transport.py] [_log()] kex follows: False
2026-02-14T17:42:43.716 [DEBUG] [Thread-189460] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:42:43.716 [DEBUG] [Thread-189460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:42:43.716 [DEBUG] [Thread-189460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:42:43.716 [DEBUG] [Thread-189460] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:42:43.716 [DEBUG] [Thread-189460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:42:43.716 [DEBUG] [Thread-189460] [transport.py] [_log()] Compression: none
2026-02-14T17:42:43.716 [DEBUG] [Thread-189460] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:42:43.733 [DEBUG] [Thread-189460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:42:43.733 [DEBUG] [Thread-189460] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:42:43.734 [DEBUG] [Thread-189460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:42:43.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:42:43.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:42:43.777 [DEBUG] [Thread-189460] [transport.py] [_log()] userauth is OK
2026-02-14T17:42:43.777 [DEBUG] [Thread-189460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:42:43.778 [DEBUG] [Thread-189460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:42:43.778 [DEBUG] [Thread-189460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:42:43.778 [DEBUG] [Thread-189460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:42:43.810 [INFO] [Thread-189460] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:42:43.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:42:44.442 [DEBUG] [Thread-189460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:42:44.443 [DEBUG] [Thread-189460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:42:44.443 [DEBUG] [Thread-189460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:42:44.483 [DEBUG] [Thread-189460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:42:44.484 [DEBUG] [Thread-189460] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:42:44.487 [DEBUG] [Thread-189460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:42:44.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:42:44.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:42:44.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:42:44.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:42:44.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:42:44.511 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:42:44.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:42:44.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:42:44.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:42:44.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.654272 -999.00  +15.10  24.94     46   +3.80 1 1 1 1 1   887    0 10.49 -37.04 ----- 24.2 24.9 162.6 35.0 18.3 -27.6 18.1 -26.3 19.4 -25.3 20.0 -27.8
2026-02-14T17:42:44.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:42:44.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:42:44.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.654272
2026-02-14T17:42:44.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:42:44.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:42:44.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:42:44.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:42:44.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:42:44.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:42:18', tmtdew=13.54, humidity=39.81, cloud=0.0, wind=32.41, temperature=15.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:42:09.101', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:42:44.514 [DEBUG] [Thread-189460] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:42:44.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T17:42:44.610 [DEBUG] [Thread-189463] [transport.py] [_log()] starting thread (client mode): 0xa2d03b80
2026-02-14T17:42:44.610 [DEBUG] [Thread-189463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:42:44.624 [DEBUG] [Thread-189463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:42:44.624 [INFO] [Thread-189463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:42:44.632 [DEBUG] [Thread-189463] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:42:44.632 [DEBUG] [Thread-189463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:42:44.632 [DEBUG] [Thread-189463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:42:44.632 [DEBUG] [Thread-189463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:42:44.632 [DEBUG] [Thread-189463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:42:44.632 [DEBUG] [Thread-189463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:42:44.632 [DEBUG] [Thread-189463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:42:44.632 [DEBUG] [Thread-189463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:42:44.632 [DEBUG] [Thread-189463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:42:44.633 [DEBUG] [Thread-189463] [transport.py] [_log()] client lang: <none>
2026-02-14T17:42:44.633 [DEBUG] [Thread-189463] [transport.py] [_log()] server lang: <none>
2026-02-14T17:42:44.633 [DEBUG] [Thread-189463] [transport.py] [_log()] kex follows: False
2026-02-14T17:42:44.633 [DEBUG] [Thread-189463] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:42:44.633 [DEBUG] [Thread-189463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:42:44.633 [DEBUG] [Thread-189463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:42:44.633 [DEBUG] [Thread-189463] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:42:44.633 [DEBUG] [Thread-189463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:42:44.633 [DEBUG] [Thread-189463] [transport.py] [_log()] Compression: none
2026-02-14T17:42:44.634 [DEBUG] [Thread-189463] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:42:44.691 [DEBUG] [Thread-189463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:42:44.691 [DEBUG] [Thread-189463] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:42:44.692 [DEBUG] [Thread-189463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:42:44.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:42:44.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:42:44.747 [DEBUG] [Thread-189463] [transport.py] [_log()] userauth is OK
2026-02-14T17:42:44.747 [DEBUG] [Thread-189463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:42:44.747 [DEBUG] [Thread-189463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:42:44.748 [DEBUG] [Thread-189463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:42:44.748 [DEBUG] [Thread-189463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:42:44.766 [INFO] [Thread-189463] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:42:44.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-14T17:42:44.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:42:45.562 [DEBUG] [Thread-189463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:42:45.563 [DEBUG] [Thread-189463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:42:45.610 [DEBUG] [Thread-189463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:42:45.610 [DEBUG] [Thread-189463] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:42:45.620 [DEBUG] [Thread-189463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:42:45.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:42:45.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-14T17:42:45.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-14T17:42:45.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:42:45.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:42:45.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:42:45.657 [DEBUG] [Thread-189463] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:42:50.498 [DEBUG] [Thread-189465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:43:05.549 [DEBUG] [Thread-189466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:43:06.277 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:43:06.279 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:43:15.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:43:15.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:43:15.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-14T17:43:17.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 42, 53), 13.55, 39.93, 0.0, 28.99, 15.52, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:43:17.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:42:53
2026-02-14T17:43:18.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:43:18.190 [DEBUG] [Thread-189467] [transport.py] [_log()] starting thread (client mode): 0xa2d00a60
2026-02-14T17:43:18.190 [DEBUG] [Thread-189467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:43:18.210 [DEBUG] [Thread-189467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:43:18.210 [INFO] [Thread-189467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:43:18.213 [DEBUG] [Thread-189467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:43:18.213 [DEBUG] [Thread-189467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:43:18.213 [DEBUG] [Thread-189467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:43:18.214 [DEBUG] [Thread-189467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:43:18.214 [DEBUG] [Thread-189467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:43:18.214 [DEBUG] [Thread-189467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:43:18.214 [DEBUG] [Thread-189467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:43:18.214 [DEBUG] [Thread-189467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:43:18.214 [DEBUG] [Thread-189467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:43:18.214 [DEBUG] [Thread-189467] [transport.py] [_log()] client lang: <none>
2026-02-14T17:43:18.214 [DEBUG] [Thread-189467] [transport.py] [_log()] server lang: <none>
2026-02-14T17:43:18.214 [DEBUG] [Thread-189467] [transport.py] [_log()] kex follows: False
2026-02-14T17:43:18.214 [DEBUG] [Thread-189467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:43:18.214 [DEBUG] [Thread-189467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:43:18.214 [DEBUG] [Thread-189467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:43:18.214 [DEBUG] [Thread-189467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:43:18.214 [DEBUG] [Thread-189467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:43:18.214 [DEBUG] [Thread-189467] [transport.py] [_log()] Compression: none
2026-02-14T17:43:18.214 [DEBUG] [Thread-189467] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:43:18.231 [DEBUG] [Thread-189467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:43:18.231 [DEBUG] [Thread-189467] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:43:18.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:43:18.232 [DEBUG] [Thread-189467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:43:18.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:43:18.234 [DEBUG] [Thread-189467] [transport.py] [_log()] userauth is OK
2026-02-14T17:43:18.235 [DEBUG] [Thread-189467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:43:18.235 [DEBUG] [Thread-189467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:43:18.235 [DEBUG] [Thread-189467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:43:18.235 [DEBUG] [Thread-189467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:43:18.259 [INFO] [Thread-189467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:43:18.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:43:18.910 [DEBUG] [Thread-189467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:43:18.910 [DEBUG] [Thread-189467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:43:18.911 [DEBUG] [Thread-189467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:43:18.951 [DEBUG] [Thread-189467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:43:18.952 [DEBUG] [Thread-189467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:43:18.955 [DEBUG] [Thread-189467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:43:18.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:43:18.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:43:18.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:43:18.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:43:18.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:43:18.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:43:18.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:43:18.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:43:18.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:43:18.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.654619 -999.00  +15.10  25.02     46   +3.80 1 1 1 1 1   887    0 10.90 -37.83 ----- 25.4 25.0 160.0 40.1 18.3 -27.0 18.1 -26.2 19.4 -25.8 20.1 -27.0
2026-02-14T17:43:18.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:43:18.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:43:18.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.654619
2026-02-14T17:43:18.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:43:18.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:43:18.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:43:18.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:43:18.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:43:18.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:42:53', tmtdew=13.55, humidity=39.93, cloud=0.0, wind=28.99, temperature=15.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:42:39.082', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:43:18.983 [DEBUG] [Thread-189467] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:43:19.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-14T17:43:19.084 [DEBUG] [Thread-189470] [transport.py] [_log()] starting thread (client mode): 0xa2d00850
2026-02-14T17:43:19.084 [DEBUG] [Thread-189470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:43:19.099 [DEBUG] [Thread-189470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:43:19.099 [INFO] [Thread-189470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:43:19.107 [DEBUG] [Thread-189470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:43:19.107 [DEBUG] [Thread-189470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:43:19.107 [DEBUG] [Thread-189470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:43:19.107 [DEBUG] [Thread-189470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:43:19.108 [DEBUG] [Thread-189470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:43:19.108 [DEBUG] [Thread-189470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:43:19.108 [DEBUG] [Thread-189470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:43:19.108 [DEBUG] [Thread-189470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:43:19.108 [DEBUG] [Thread-189470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:43:19.108 [DEBUG] [Thread-189470] [transport.py] [_log()] client lang: <none>
2026-02-14T17:43:19.108 [DEBUG] [Thread-189470] [transport.py] [_log()] server lang: <none>
2026-02-14T17:43:19.108 [DEBUG] [Thread-189470] [transport.py] [_log()] kex follows: False
2026-02-14T17:43:19.109 [DEBUG] [Thread-189470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:43:19.109 [DEBUG] [Thread-189470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:43:19.109 [DEBUG] [Thread-189470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:43:19.109 [DEBUG] [Thread-189470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:43:19.109 [DEBUG] [Thread-189470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:43:19.109 [DEBUG] [Thread-189470] [transport.py] [_log()] Compression: none
2026-02-14T17:43:19.109 [DEBUG] [Thread-189470] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:43:19.168 [DEBUG] [Thread-189470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:43:19.168 [DEBUG] [Thread-189470] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:43:19.169 [DEBUG] [Thread-189470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:43:19.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:43:19.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:43:19.227 [DEBUG] [Thread-189470] [transport.py] [_log()] userauth is OK
2026-02-14T17:43:19.227 [DEBUG] [Thread-189470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:43:19.227 [DEBUG] [Thread-189470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:43:19.227 [DEBUG] [Thread-189470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:43:19.227 [DEBUG] [Thread-189470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:43:19.246 [INFO] [Thread-189470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:43:19.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-14T17:43:19.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:43:20.061 [DEBUG] [Thread-189470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:43:20.061 [DEBUG] [Thread-189470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:43:20.109 [DEBUG] [Thread-189470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:43:20.110 [DEBUG] [Thread-189470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:43:20.119 [DEBUG] [Thread-189470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:43:20.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:43:20.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-14T17:43:20.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:43:20.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:43:20.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:43:20.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:43:20.153 [DEBUG] [Thread-189470] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:43:20.586 [DEBUG] [Thread-189472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:43:34.482 [DEBUG] [Thread-189473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:43:35.640 [DEBUG] [Thread-189474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:43:50.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:43:50.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:43:50.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-14T17:43:50.680 [DEBUG] [Thread-189475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:43:52.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 43, 29), 13.69, 39.57, 0.0, 36.43, 15.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:43:52.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:43:29
2026-02-14T17:43:52.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:43:52.519 [DEBUG] [Thread-189476] [transport.py] [_log()] starting thread (client mode): 0xa2d03310
2026-02-14T17:43:52.520 [DEBUG] [Thread-189476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:43:52.541 [DEBUG] [Thread-189476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:43:52.541 [INFO] [Thread-189476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:43:52.544 [DEBUG] [Thread-189476] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:43:52.544 [DEBUG] [Thread-189476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:43:52.544 [DEBUG] [Thread-189476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:43:52.544 [DEBUG] [Thread-189476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:43:52.544 [DEBUG] [Thread-189476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:43:52.544 [DEBUG] [Thread-189476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:43:52.545 [DEBUG] [Thread-189476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:43:52.545 [DEBUG] [Thread-189476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:43:52.545 [DEBUG] [Thread-189476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:43:52.545 [DEBUG] [Thread-189476] [transport.py] [_log()] client lang: <none>
2026-02-14T17:43:52.545 [DEBUG] [Thread-189476] [transport.py] [_log()] server lang: <none>
2026-02-14T17:43:52.545 [DEBUG] [Thread-189476] [transport.py] [_log()] kex follows: False
2026-02-14T17:43:52.545 [DEBUG] [Thread-189476] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:43:52.545 [DEBUG] [Thread-189476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:43:52.545 [DEBUG] [Thread-189476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:43:52.545 [DEBUG] [Thread-189476] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:43:52.545 [DEBUG] [Thread-189476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:43:52.545 [DEBUG] [Thread-189476] [transport.py] [_log()] Compression: none
2026-02-14T17:43:52.545 [DEBUG] [Thread-189476] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:43:52.558 [DEBUG] [Thread-189476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:43:52.558 [DEBUG] [Thread-189476] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:43:52.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:43:52.559 [DEBUG] [Thread-189476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:43:52.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:43:52.561 [DEBUG] [Thread-189476] [transport.py] [_log()] userauth is OK
2026-02-14T17:43:52.561 [DEBUG] [Thread-189476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:43:52.561 [DEBUG] [Thread-189476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:43:52.561 [DEBUG] [Thread-189476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:43:52.561 [DEBUG] [Thread-189476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:43:52.579 [INFO] [Thread-189476] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:43:52.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:43:53.211 [DEBUG] [Thread-189476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:43:53.211 [DEBUG] [Thread-189476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:43:53.212 [DEBUG] [Thread-189476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:43:53.252 [DEBUG] [Thread-189476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:43:53.252 [DEBUG] [Thread-189476] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:43:53.256 [DEBUG] [Thread-189476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:43:53.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:43:53.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:43:53.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:43:53.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:43:53.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:43:53.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:43:53.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:43:53.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:43:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:43:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.654966 -999.00  +15.10  27.86     46   +3.70 1 1 1 1 1   887    0 10.62 -36.50 ----- 26.6 27.9 174.8 35.9 18.4 -27.5 18.0 -26.1 19.4 -24.8 20.1 -27.3
2026-02-14T17:43:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:43:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:43:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.654966
2026-02-14T17:43:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:43:53.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:43:53.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:43:53.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:43:53.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:43:53.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:43:29', tmtdew=13.69, humidity=39.57, cloud=0.0, wind=36.43, temperature=15.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:43:09.062', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:43:53.280 [DEBUG] [Thread-189476] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:43:53.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-14T17:43:53.375 [DEBUG] [Thread-189479] [transport.py] [_log()] starting thread (client mode): 0xa57c0850
2026-02-14T17:43:53.375 [DEBUG] [Thread-189479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:43:53.389 [DEBUG] [Thread-189479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:43:53.389 [INFO] [Thread-189479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:43:53.397 [DEBUG] [Thread-189479] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:43:53.397 [DEBUG] [Thread-189479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:43:53.397 [DEBUG] [Thread-189479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:43:53.397 [DEBUG] [Thread-189479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:43:53.397 [DEBUG] [Thread-189479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:43:53.397 [DEBUG] [Thread-189479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:43:53.397 [DEBUG] [Thread-189479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:43:53.397 [DEBUG] [Thread-189479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:43:53.397 [DEBUG] [Thread-189479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:43:53.397 [DEBUG] [Thread-189479] [transport.py] [_log()] client lang: <none>
2026-02-14T17:43:53.397 [DEBUG] [Thread-189479] [transport.py] [_log()] server lang: <none>
2026-02-14T17:43:53.397 [DEBUG] [Thread-189479] [transport.py] [_log()] kex follows: False
2026-02-14T17:43:53.397 [DEBUG] [Thread-189479] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:43:53.397 [DEBUG] [Thread-189479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:43:53.397 [DEBUG] [Thread-189479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:43:53.397 [DEBUG] [Thread-189479] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:43:53.398 [DEBUG] [Thread-189479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:43:53.398 [DEBUG] [Thread-189479] [transport.py] [_log()] Compression: none
2026-02-14T17:43:53.398 [DEBUG] [Thread-189479] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:43:53.455 [DEBUG] [Thread-189479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:43:53.455 [DEBUG] [Thread-189479] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:43:53.456 [DEBUG] [Thread-189479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:43:53.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:43:53.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:43:53.511 [DEBUG] [Thread-189479] [transport.py] [_log()] userauth is OK
2026-02-14T17:43:53.512 [DEBUG] [Thread-189479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:43:53.512 [DEBUG] [Thread-189479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:43:53.512 [DEBUG] [Thread-189479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:43:53.512 [DEBUG] [Thread-189479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:43:53.530 [INFO] [Thread-189479] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:43:53.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-14T17:43:53.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:43:54.339 [DEBUG] [Thread-189479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:43:54.339 [DEBUG] [Thread-189479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:43:54.387 [DEBUG] [Thread-189479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:43:54.388 [DEBUG] [Thread-189479] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:43:54.397 [DEBUG] [Thread-189479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:43:54.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:43:54.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:43:54.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:43:54.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:43:54.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:43:54.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:43:54.433 [DEBUG] [Thread-189479] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:44:05.714 [DEBUG] [Thread-189481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:44:06.423 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:44:06.424 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:44:20.769 [DEBUG] [Thread-189482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:44:24.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:44:24.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:44:24.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-14T17:44:26.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 44, 4), 13.67, 39.62, 0.0, 31.42, 15.52, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:44:26.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:44:04
2026-02-14T17:44:26.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:44:26.993 [DEBUG] [Thread-189483] [transport.py] [_log()] starting thread (client mode): 0xa57719f0
2026-02-14T17:44:26.993 [DEBUG] [Thread-189483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:44:27.013 [DEBUG] [Thread-189483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:44:27.013 [INFO] [Thread-189483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:44:27.016 [DEBUG] [Thread-189483] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:44:27.016 [DEBUG] [Thread-189483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:44:27.016 [DEBUG] [Thread-189483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:44:27.016 [DEBUG] [Thread-189483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:44:27.016 [DEBUG] [Thread-189483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:44:27.016 [DEBUG] [Thread-189483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:44:27.016 [DEBUG] [Thread-189483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:44:27.016 [DEBUG] [Thread-189483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:44:27.016 [DEBUG] [Thread-189483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:44:27.016 [DEBUG] [Thread-189483] [transport.py] [_log()] client lang: <none>
2026-02-14T17:44:27.016 [DEBUG] [Thread-189483] [transport.py] [_log()] server lang: <none>
2026-02-14T17:44:27.016 [DEBUG] [Thread-189483] [transport.py] [_log()] kex follows: False
2026-02-14T17:44:27.016 [DEBUG] [Thread-189483] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:44:27.016 [DEBUG] [Thread-189483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:44:27.016 [DEBUG] [Thread-189483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:44:27.016 [DEBUG] [Thread-189483] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:44:27.016 [DEBUG] [Thread-189483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:44:27.017 [DEBUG] [Thread-189483] [transport.py] [_log()] Compression: none
2026-02-14T17:44:27.017 [DEBUG] [Thread-189483] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:44:27.036 [DEBUG] [Thread-189483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:44:27.036 [DEBUG] [Thread-189483] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:44:27.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:44:27.037 [DEBUG] [Thread-189483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:44:27.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:44:27.040 [DEBUG] [Thread-189483] [transport.py] [_log()] userauth is OK
2026-02-14T17:44:27.040 [DEBUG] [Thread-189483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:44:27.040 [DEBUG] [Thread-189483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:44:27.041 [DEBUG] [Thread-189483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:44:27.041 [DEBUG] [Thread-189483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:44:27.065 [INFO] [Thread-189483] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:44:27.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:44:27.723 [DEBUG] [Thread-189483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:44:27.723 [DEBUG] [Thread-189483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:44:27.723 [DEBUG] [Thread-189483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:44:27.764 [DEBUG] [Thread-189483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:44:27.765 [DEBUG] [Thread-189483] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:44:27.768 [DEBUG] [Thread-189483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:44:27.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:44:27.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:44:27.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:44:27.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:44:27.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:44:27.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:44:27.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:44:27.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:44:27.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:44:27.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.655661 -999.00  +15.10  29.95     46   +3.70 1 1 1 1 1   887    0 10.58 -35.75 ----- 30.3 29.9 183.6 42.8 18.2 -28.1 17.8 -28.1 19.3 -27.1 19.9 -29.3
2026-02-14T17:44:27.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:44:27.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:44:27.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.655661
2026-02-14T17:44:27.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:44:27.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:44:27.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:44:27.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:44:27.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:44:27.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:44:04', tmtdew=13.67, humidity=39.62, cloud=0.0, wind=31.42, temperature=15.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:44:09.110', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:44:27.794 [DEBUG] [Thread-189483] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:44:27.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-14T17:44:27.896 [DEBUG] [Thread-189486] [transport.py] [_log()] starting thread (client mode): 0xa5773f70
2026-02-14T17:44:27.896 [DEBUG] [Thread-189486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:44:27.911 [DEBUG] [Thread-189486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:44:27.911 [INFO] [Thread-189486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:44:27.919 [DEBUG] [Thread-189486] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:44:27.919 [DEBUG] [Thread-189486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:44:27.919 [DEBUG] [Thread-189486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:44:27.919 [DEBUG] [Thread-189486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:44:27.919 [DEBUG] [Thread-189486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:44:27.919 [DEBUG] [Thread-189486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:44:27.920 [DEBUG] [Thread-189486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:44:27.920 [DEBUG] [Thread-189486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:44:27.920 [DEBUG] [Thread-189486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:44:27.920 [DEBUG] [Thread-189486] [transport.py] [_log()] client lang: <none>
2026-02-14T17:44:27.920 [DEBUG] [Thread-189486] [transport.py] [_log()] server lang: <none>
2026-02-14T17:44:27.920 [DEBUG] [Thread-189486] [transport.py] [_log()] kex follows: False
2026-02-14T17:44:27.920 [DEBUG] [Thread-189486] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:44:27.920 [DEBUG] [Thread-189486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:44:27.920 [DEBUG] [Thread-189486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:44:27.920 [DEBUG] [Thread-189486] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:44:27.920 [DEBUG] [Thread-189486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:44:27.920 [DEBUG] [Thread-189486] [transport.py] [_log()] Compression: none
2026-02-14T17:44:27.920 [DEBUG] [Thread-189486] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:44:27.980 [DEBUG] [Thread-189486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:44:27.980 [DEBUG] [Thread-189486] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:44:27.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:44:27.981 [DEBUG] [Thread-189486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:44:27.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:44:28.035 [DEBUG] [Thread-189486] [transport.py] [_log()] userauth is OK
2026-02-14T17:44:28.036 [DEBUG] [Thread-189486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:44:28.036 [DEBUG] [Thread-189486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:44:28.036 [DEBUG] [Thread-189486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:44:28.036 [DEBUG] [Thread-189486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:44:28.055 [INFO] [Thread-189486] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:44:28.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-14T17:44:28.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:44:28.878 [DEBUG] [Thread-189486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:44:28.878 [DEBUG] [Thread-189486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:44:28.926 [DEBUG] [Thread-189486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:44:28.926 [DEBUG] [Thread-189486] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:44:28.935 [DEBUG] [Thread-189486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:44:28.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:44:28.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-14T17:44:28.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-14T17:44:28.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:44:28.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:44:28.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:44:28.972 [DEBUG] [Thread-189486] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:44:34.524 [DEBUG] [Thread-189488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:44:35.805 [DEBUG] [Thread-189489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:44:50.850 [DEBUG] [Thread-189490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:44:58.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:44:58.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:44:58.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-14T17:45:00.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 44, 40), 14.55, 37.43, 0.0, 41.07, 16.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:45:00.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:44:40
2026-02-14T17:45:01.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:45:01.441 [DEBUG] [Thread-189491] [transport.py] [_log()] starting thread (client mode): 0xa2d22a10
2026-02-14T17:45:01.442 [DEBUG] [Thread-189491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:45:01.467 [DEBUG] [Thread-189491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:45:01.467 [INFO] [Thread-189491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:45:01.470 [DEBUG] [Thread-189491] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:45:01.471 [DEBUG] [Thread-189491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:45:01.471 [DEBUG] [Thread-189491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:45:01.471 [DEBUG] [Thread-189491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:45:01.471 [DEBUG] [Thread-189491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:45:01.471 [DEBUG] [Thread-189491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:45:01.471 [DEBUG] [Thread-189491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:45:01.471 [DEBUG] [Thread-189491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:45:01.471 [DEBUG] [Thread-189491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:45:01.471 [DEBUG] [Thread-189491] [transport.py] [_log()] client lang: <none>
2026-02-14T17:45:01.471 [DEBUG] [Thread-189491] [transport.py] [_log()] server lang: <none>
2026-02-14T17:45:01.471 [DEBUG] [Thread-189491] [transport.py] [_log()] kex follows: False
2026-02-14T17:45:01.471 [DEBUG] [Thread-189491] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:45:01.471 [DEBUG] [Thread-189491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:45:01.471 [DEBUG] [Thread-189491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:45:01.471 [DEBUG] [Thread-189491] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:45:01.471 [DEBUG] [Thread-189491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:45:01.471 [DEBUG] [Thread-189491] [transport.py] [_log()] Compression: none
2026-02-14T17:45:01.471 [DEBUG] [Thread-189491] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:45:01.487 [DEBUG] [Thread-189491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:45:01.487 [DEBUG] [Thread-189491] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:45:01.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:45:01.489 [DEBUG] [Thread-189491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:45:01.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:45:01.491 [DEBUG] [Thread-189491] [transport.py] [_log()] userauth is OK
2026-02-14T17:45:01.491 [DEBUG] [Thread-189491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:45:01.491 [DEBUG] [Thread-189491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:45:01.491 [DEBUG] [Thread-189491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:45:01.491 [DEBUG] [Thread-189491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:45:01.516 [INFO] [Thread-189491] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:45:01.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:45:02.123 [DEBUG] [Thread-189491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:45:02.123 [DEBUG] [Thread-189491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:45:02.123 [DEBUG] [Thread-189491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:45:02.164 [DEBUG] [Thread-189491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:45:02.164 [DEBUG] [Thread-189491] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:45:02.165 [DEBUG] [Thread-189491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:45:02.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:45:02.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:45:02.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:45:02.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:45:02.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:45:02.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:45:02.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:45:02.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:45:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:45:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.656008 -999.00  +15.10  26.55     46   +3.80 1 1 1 1 1   887    0 10.70 -38.86 ----- 25.0 26.6 175.0 35.4 18.2 -27.4 17.9 -25.6 19.3 -25.6 19.9 -26.8
2026-02-14T17:45:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:45:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:45:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.656008
2026-02-14T17:45:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:45:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:45:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:45:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:45:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:45:02.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:44:40', tmtdew=14.55, humidity=37.43, cloud=0.0, wind=41.07, temperature=16.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:44:39.091', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:45:02.175 [DEBUG] [Thread-189491] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:45:02.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-14T17:45:02.260 [DEBUG] [Thread-189494] [transport.py] [_log()] starting thread (client mode): 0xa5772890
2026-02-14T17:45:02.260 [DEBUG] [Thread-189494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:45:02.276 [DEBUG] [Thread-189494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:45:02.276 [INFO] [Thread-189494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:45:02.284 [DEBUG] [Thread-189494] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:45:02.284 [DEBUG] [Thread-189494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:45:02.284 [DEBUG] [Thread-189494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:45:02.284 [DEBUG] [Thread-189494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:45:02.284 [DEBUG] [Thread-189494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:45:02.285 [DEBUG] [Thread-189494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:45:02.285 [DEBUG] [Thread-189494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:45:02.285 [DEBUG] [Thread-189494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:45:02.285 [DEBUG] [Thread-189494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:45:02.285 [DEBUG] [Thread-189494] [transport.py] [_log()] client lang: <none>
2026-02-14T17:45:02.285 [DEBUG] [Thread-189494] [transport.py] [_log()] server lang: <none>
2026-02-14T17:45:02.285 [DEBUG] [Thread-189494] [transport.py] [_log()] kex follows: False
2026-02-14T17:45:02.285 [DEBUG] [Thread-189494] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:45:02.285 [DEBUG] [Thread-189494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:45:02.285 [DEBUG] [Thread-189494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:45:02.285 [DEBUG] [Thread-189494] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:45:02.285 [DEBUG] [Thread-189494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:45:02.285 [DEBUG] [Thread-189494] [transport.py] [_log()] Compression: none
2026-02-14T17:45:02.285 [DEBUG] [Thread-189494] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:45:02.347 [DEBUG] [Thread-189494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:45:02.348 [DEBUG] [Thread-189494] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:45:02.348 [DEBUG] [Thread-189494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:45:02.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:45:02.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:45:02.403 [DEBUG] [Thread-189494] [transport.py] [_log()] userauth is OK
2026-02-14T17:45:02.404 [DEBUG] [Thread-189494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:45:02.404 [DEBUG] [Thread-189494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:45:02.404 [DEBUG] [Thread-189494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:45:02.404 [DEBUG] [Thread-189494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:45:02.424 [INFO] [Thread-189494] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:45:02.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-14T17:45:02.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:45:03.297 [DEBUG] [Thread-189494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:45:03.297 [DEBUG] [Thread-189494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:45:03.345 [DEBUG] [Thread-189494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:45:03.346 [DEBUG] [Thread-189494] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:45:03.355 [DEBUG] [Thread-189494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:45:03.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:45:03.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-14T17:45:03.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-14T17:45:03.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:45:03.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:45:03.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:45:03.393 [DEBUG] [Thread-189494] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:45:05.889 [DEBUG] [Thread-189496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:45:06.563 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:45:06.565 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:45:20.953 [DEBUG] [Thread-189497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:45:33.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:45:33.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:45:33.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-14T17:45:34.567 [DEBUG] [Thread-189498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:45:35.991 [DEBUG] [Thread-189499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:45:36.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 45, 16), 13.42, 40.5, 0.0, 34.1, 15.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:45:36.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:45:16
2026-02-14T17:45:36.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:45:36.583 [DEBUG] [Thread-189500] [transport.py] [_log()] starting thread (client mode): 0xa5771a50
2026-02-14T17:45:36.584 [DEBUG] [Thread-189500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:45:36.603 [DEBUG] [Thread-189500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:45:36.603 [INFO] [Thread-189500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:45:36.606 [DEBUG] [Thread-189500] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:45:36.607 [DEBUG] [Thread-189500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:45:36.607 [DEBUG] [Thread-189500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:45:36.607 [DEBUG] [Thread-189500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:45:36.607 [DEBUG] [Thread-189500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:45:36.607 [DEBUG] [Thread-189500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:45:36.607 [DEBUG] [Thread-189500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:45:36.607 [DEBUG] [Thread-189500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:45:36.607 [DEBUG] [Thread-189500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:45:36.607 [DEBUG] [Thread-189500] [transport.py] [_log()] client lang: <none>
2026-02-14T17:45:36.607 [DEBUG] [Thread-189500] [transport.py] [_log()] server lang: <none>
2026-02-14T17:45:36.607 [DEBUG] [Thread-189500] [transport.py] [_log()] kex follows: False
2026-02-14T17:45:36.607 [DEBUG] [Thread-189500] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:45:36.607 [DEBUG] [Thread-189500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:45:36.608 [DEBUG] [Thread-189500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:45:36.608 [DEBUG] [Thread-189500] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:45:36.608 [DEBUG] [Thread-189500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:45:36.608 [DEBUG] [Thread-189500] [transport.py] [_log()] Compression: none
2026-02-14T17:45:36.608 [DEBUG] [Thread-189500] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:45:36.627 [DEBUG] [Thread-189500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:45:36.628 [DEBUG] [Thread-189500] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:45:36.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:45:36.629 [DEBUG] [Thread-189500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:45:36.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:45:36.631 [DEBUG] [Thread-189500] [transport.py] [_log()] userauth is OK
2026-02-14T17:45:36.631 [DEBUG] [Thread-189500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:45:36.631 [DEBUG] [Thread-189500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:45:36.631 [DEBUG] [Thread-189500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:45:36.631 [DEBUG] [Thread-189500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:45:36.654 [INFO] [Thread-189500] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:45:36.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:45:37.294 [DEBUG] [Thread-189500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:45:37.294 [DEBUG] [Thread-189500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:45:37.294 [DEBUG] [Thread-189500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:45:37.335 [DEBUG] [Thread-189500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:45:37.336 [DEBUG] [Thread-189500] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:45:37.339 [DEBUG] [Thread-189500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:45:37.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:45:37.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:45:37.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:45:37.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:45:37.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:45:37.361 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:45:37.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:45:37.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:45:37.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:45:37.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.656355 -999.00  +15.10  39.44     46   +3.70 1 1 2 1 1   887    0 10.81 -36.85 ----- 39.5 39.4 183.2 42.6 18.1 -29.0 17.8 -29.7 19.4 -26.1 19.8 -29.5
2026-02-14T17:45:37.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:45:37.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:45:37.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.656355
2026-02-14T17:45:37.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:45:37.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:45:37.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:45:37.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:45:37.364 [DEBUG] [Thread-189500] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:45:37.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:45:37.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:45:16', tmtdew=13.42, humidity=40.5, cloud=0.0, wind=34.1, temperature=15.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:45:09.072', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:45:37.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-14T17:45:37.459 [DEBUG] [Thread-189503] [transport.py] [_log()] starting thread (client mode): 0xa57b1300
2026-02-14T17:45:37.460 [DEBUG] [Thread-189503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:45:37.473 [DEBUG] [Thread-189503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:45:37.473 [INFO] [Thread-189503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:45:37.481 [DEBUG] [Thread-189503] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:45:37.481 [DEBUG] [Thread-189503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:45:37.481 [DEBUG] [Thread-189503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:45:37.481 [DEBUG] [Thread-189503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:45:37.481 [DEBUG] [Thread-189503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:45:37.481 [DEBUG] [Thread-189503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:45:37.481 [DEBUG] [Thread-189503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:45:37.482 [DEBUG] [Thread-189503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:45:37.482 [DEBUG] [Thread-189503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:45:37.482 [DEBUG] [Thread-189503] [transport.py] [_log()] client lang: <none>
2026-02-14T17:45:37.482 [DEBUG] [Thread-189503] [transport.py] [_log()] server lang: <none>
2026-02-14T17:45:37.482 [DEBUG] [Thread-189503] [transport.py] [_log()] kex follows: False
2026-02-14T17:45:37.482 [DEBUG] [Thread-189503] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:45:37.482 [DEBUG] [Thread-189503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:45:37.482 [DEBUG] [Thread-189503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:45:37.482 [DEBUG] [Thread-189503] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:45:37.483 [DEBUG] [Thread-189503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:45:37.483 [DEBUG] [Thread-189503] [transport.py] [_log()] Compression: none
2026-02-14T17:45:37.484 [DEBUG] [Thread-189503] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:45:37.539 [DEBUG] [Thread-189503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:45:37.540 [DEBUG] [Thread-189503] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:45:37.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:45:37.541 [DEBUG] [Thread-189503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:45:37.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:45:37.595 [DEBUG] [Thread-189503] [transport.py] [_log()] userauth is OK
2026-02-14T17:45:37.595 [DEBUG] [Thread-189503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:45:37.595 [DEBUG] [Thread-189503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:45:37.595 [DEBUG] [Thread-189503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:45:37.595 [DEBUG] [Thread-189503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:45:37.615 [INFO] [Thread-189503] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:45:37.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-14T17:45:37.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:45:38.449 [DEBUG] [Thread-189503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:45:38.449 [DEBUG] [Thread-189503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:45:38.496 [DEBUG] [Thread-189503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:45:38.496 [DEBUG] [Thread-189503] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:45:38.506 [DEBUG] [Thread-189503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:45:38.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:45:38.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:45:38.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-14T17:45:38.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:45:38.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:45:38.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:45:38.543 [DEBUG] [Thread-189503] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:45:51.030 [DEBUG] [Thread-189505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:46:06.090 [DEBUG] [Thread-189506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:46:06.706 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:46:06.707 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:46:08.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:46:08.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:46:08.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T17:46:10.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 45, 51), 13.5, 40.3, 0.0, 36.68, 15.36, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:46:10.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:45:51
2026-02-14T17:46:11.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:46:11.397 [DEBUG] [Thread-189507] [transport.py] [_log()] starting thread (client mode): 0xa57b1840
2026-02-14T17:46:11.397 [DEBUG] [Thread-189507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:46:11.417 [DEBUG] [Thread-189507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:46:11.417 [INFO] [Thread-189507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:46:11.419 [DEBUG] [Thread-189507] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:46:11.419 [DEBUG] [Thread-189507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:46:11.419 [DEBUG] [Thread-189507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:46:11.420 [DEBUG] [Thread-189507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:46:11.420 [DEBUG] [Thread-189507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:46:11.420 [DEBUG] [Thread-189507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:46:11.420 [DEBUG] [Thread-189507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:46:11.420 [DEBUG] [Thread-189507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:46:11.420 [DEBUG] [Thread-189507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:46:11.420 [DEBUG] [Thread-189507] [transport.py] [_log()] client lang: <none>
2026-02-14T17:46:11.420 [DEBUG] [Thread-189507] [transport.py] [_log()] server lang: <none>
2026-02-14T17:46:11.420 [DEBUG] [Thread-189507] [transport.py] [_log()] kex follows: False
2026-02-14T17:46:11.420 [DEBUG] [Thread-189507] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:46:11.420 [DEBUG] [Thread-189507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:46:11.420 [DEBUG] [Thread-189507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:46:11.420 [DEBUG] [Thread-189507] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:46:11.420 [DEBUG] [Thread-189507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:46:11.420 [DEBUG] [Thread-189507] [transport.py] [_log()] Compression: none
2026-02-14T17:46:11.421 [DEBUG] [Thread-189507] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:46:11.438 [DEBUG] [Thread-189507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:46:11.439 [DEBUG] [Thread-189507] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:46:11.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:46:11.440 [DEBUG] [Thread-189507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:46:11.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:46:11.443 [DEBUG] [Thread-189507] [transport.py] [_log()] userauth is OK
2026-02-14T17:46:11.443 [DEBUG] [Thread-189507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:46:11.444 [DEBUG] [Thread-189507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:46:11.444 [DEBUG] [Thread-189507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:46:11.444 [DEBUG] [Thread-189507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:46:11.465 [INFO] [Thread-189507] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:46:11.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:46:12.071 [DEBUG] [Thread-189507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:46:12.071 [DEBUG] [Thread-189507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:46:12.072 [DEBUG] [Thread-189507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:46:12.111 [DEBUG] [Thread-189507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:46:12.112 [DEBUG] [Thread-189507] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:46:12.115 [DEBUG] [Thread-189507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:46:12.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:46:12.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:46:12.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:46:12.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:46:12.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:46:12.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:46:12.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:46:12.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:46:12.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:46:12.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.656702 -999.00  +14.90  28.65     47   +3.70 1 1 1 1 1   887    0 10.53 -39.10 ----- 37.4 28.6 191.2 43.9 18.0 -28.7 17.7 -28.4 19.1 -26.7 19.7 -29.5
2026-02-14T17:46:12.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:46:12.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:46:12.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.656702
2026-02-14T17:46:12.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:46:12.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:46:12.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:46:12.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:46:12.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:46:12.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:45:51', tmtdew=13.5, humidity=40.3, cloud=0.0, wind=36.68, temperature=15.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:45:39.053', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:46:12.143 [DEBUG] [Thread-189507] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:46:12.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-14T17:46:12.238 [DEBUG] [Thread-189510] [transport.py] [_log()] starting thread (client mode): 0xa5772590
2026-02-14T17:46:12.238 [DEBUG] [Thread-189510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:46:12.252 [DEBUG] [Thread-189510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:46:12.252 [INFO] [Thread-189510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:46:12.260 [DEBUG] [Thread-189510] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:46:12.260 [DEBUG] [Thread-189510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:46:12.260 [DEBUG] [Thread-189510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:46:12.260 [DEBUG] [Thread-189510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:46:12.260 [DEBUG] [Thread-189510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:46:12.260 [DEBUG] [Thread-189510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:46:12.260 [DEBUG] [Thread-189510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:46:12.260 [DEBUG] [Thread-189510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:46:12.260 [DEBUG] [Thread-189510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:46:12.260 [DEBUG] [Thread-189510] [transport.py] [_log()] client lang: <none>
2026-02-14T17:46:12.260 [DEBUG] [Thread-189510] [transport.py] [_log()] server lang: <none>
2026-02-14T17:46:12.260 [DEBUG] [Thread-189510] [transport.py] [_log()] kex follows: False
2026-02-14T17:46:12.260 [DEBUG] [Thread-189510] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:46:12.260 [DEBUG] [Thread-189510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:46:12.260 [DEBUG] [Thread-189510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:46:12.260 [DEBUG] [Thread-189510] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:46:12.260 [DEBUG] [Thread-189510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:46:12.260 [DEBUG] [Thread-189510] [transport.py] [_log()] Compression: none
2026-02-14T17:46:12.260 [DEBUG] [Thread-189510] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:46:12.319 [DEBUG] [Thread-189510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:46:12.319 [DEBUG] [Thread-189510] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:46:12.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:46:12.320 [DEBUG] [Thread-189510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:46:12.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:46:12.375 [DEBUG] [Thread-189510] [transport.py] [_log()] userauth is OK
2026-02-14T17:46:12.375 [DEBUG] [Thread-189510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:46:12.375 [DEBUG] [Thread-189510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:46:12.375 [DEBUG] [Thread-189510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:46:12.375 [DEBUG] [Thread-189510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:46:12.394 [INFO] [Thread-189510] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:46:12.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T17:46:12.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:46:13.227 [DEBUG] [Thread-189510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:46:13.228 [DEBUG] [Thread-189510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:46:13.276 [DEBUG] [Thread-189510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:46:13.276 [DEBUG] [Thread-189510] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:46:13.285 [DEBUG] [Thread-189510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:46:13.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:46:13.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-14T17:46:13.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-14T17:46:13.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:46:13.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:46:13.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:46:13.318 [DEBUG] [Thread-189510] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:46:21.129 [DEBUG] [Thread-189512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:46:34.609 [DEBUG] [Thread-189513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:46:36.180 [DEBUG] [Thread-189514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:46:43.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:46:43.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:46:43.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-14T17:46:45.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 46, 26), 13.47, 40.36, 0.0, 35.69, 15.36, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:46:45.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:46:26
2026-02-14T17:46:45.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:46:45.732 [DEBUG] [Thread-189515] [transport.py] [_log()] starting thread (client mode): 0xa57727d0
2026-02-14T17:46:45.732 [DEBUG] [Thread-189515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:46:45.751 [DEBUG] [Thread-189515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:46:45.751 [INFO] [Thread-189515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:46:45.755 [DEBUG] [Thread-189515] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:46:45.755 [DEBUG] [Thread-189515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:46:45.755 [DEBUG] [Thread-189515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:46:45.755 [DEBUG] [Thread-189515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:46:45.755 [DEBUG] [Thread-189515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:46:45.755 [DEBUG] [Thread-189515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:46:45.755 [DEBUG] [Thread-189515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:46:45.755 [DEBUG] [Thread-189515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:46:45.755 [DEBUG] [Thread-189515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:46:45.755 [DEBUG] [Thread-189515] [transport.py] [_log()] client lang: <none>
2026-02-14T17:46:45.755 [DEBUG] [Thread-189515] [transport.py] [_log()] server lang: <none>
2026-02-14T17:46:45.755 [DEBUG] [Thread-189515] [transport.py] [_log()] kex follows: False
2026-02-14T17:46:45.755 [DEBUG] [Thread-189515] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:46:45.755 [DEBUG] [Thread-189515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:46:45.756 [DEBUG] [Thread-189515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:46:45.756 [DEBUG] [Thread-189515] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:46:45.756 [DEBUG] [Thread-189515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:46:45.756 [DEBUG] [Thread-189515] [transport.py] [_log()] Compression: none
2026-02-14T17:46:45.756 [DEBUG] [Thread-189515] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:46:45.772 [DEBUG] [Thread-189515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:46:45.772 [DEBUG] [Thread-189515] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:46:45.772 [DEBUG] [Thread-189515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:46:45.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:46:45.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:46:45.774 [DEBUG] [Thread-189515] [transport.py] [_log()] userauth is OK
2026-02-14T17:46:45.774 [DEBUG] [Thread-189515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:46:45.774 [DEBUG] [Thread-189515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:46:45.774 [DEBUG] [Thread-189515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:46:45.775 [DEBUG] [Thread-189515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:46:45.788 [INFO] [Thread-189515] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:46:45.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:46:46.386 [DEBUG] [Thread-189515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:46:46.387 [DEBUG] [Thread-189515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:46:46.387 [DEBUG] [Thread-189515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:46:46.427 [DEBUG] [Thread-189515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:46:46.428 [DEBUG] [Thread-189515] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:46:46.430 [DEBUG] [Thread-189515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:46:46.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:46:46.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:46:46.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:46:46.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:46:46.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:46:46.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:46:46.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:46:46.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:46:46.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:46:46.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.657049 -999.00  +14.80  33.45     47   +3.70 1 1 2 1 1   887    0 10.61 -35.14 ----- 31.3 33.5 183.0 42.8 18.0 -28.2 17.6 -29.1 19.2 -26.9 19.7 -27.7
2026-02-14T17:46:46.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:46:46.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:46:46.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.657049
2026-02-14T17:46:46.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:46:46.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:46:46.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:46:46.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:46:46.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:46:46.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:46:26', tmtdew=13.47, humidity=40.36, cloud=0.0, wind=35.69, temperature=15.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:46:09.034', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:46:46.454 [DEBUG] [Thread-189515] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:46:46.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-14T17:46:46.547 [DEBUG] [Thread-189518] [transport.py] [_log()] starting thread (client mode): 0xa2dedf90
2026-02-14T17:46:46.547 [DEBUG] [Thread-189518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:46:46.565 [DEBUG] [Thread-189518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:46:46.566 [INFO] [Thread-189518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:46:46.573 [DEBUG] [Thread-189518] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:46:46.573 [DEBUG] [Thread-189518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:46:46.574 [DEBUG] [Thread-189518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:46:46.574 [DEBUG] [Thread-189518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:46:46.574 [DEBUG] [Thread-189518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:46:46.574 [DEBUG] [Thread-189518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:46:46.574 [DEBUG] [Thread-189518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:46:46.574 [DEBUG] [Thread-189518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:46:46.574 [DEBUG] [Thread-189518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:46:46.574 [DEBUG] [Thread-189518] [transport.py] [_log()] client lang: <none>
2026-02-14T17:46:46.574 [DEBUG] [Thread-189518] [transport.py] [_log()] server lang: <none>
2026-02-14T17:46:46.574 [DEBUG] [Thread-189518] [transport.py] [_log()] kex follows: False
2026-02-14T17:46:46.574 [DEBUG] [Thread-189518] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:46:46.574 [DEBUG] [Thread-189518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:46:46.574 [DEBUG] [Thread-189518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:46:46.574 [DEBUG] [Thread-189518] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:46:46.574 [DEBUG] [Thread-189518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:46:46.574 [DEBUG] [Thread-189518] [transport.py] [_log()] Compression: none
2026-02-14T17:46:46.575 [DEBUG] [Thread-189518] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:46:46.634 [DEBUG] [Thread-189518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:46:46.634 [DEBUG] [Thread-189518] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:46:46.635 [DEBUG] [Thread-189518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:46:46.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:46:46.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:46:46.691 [DEBUG] [Thread-189518] [transport.py] [_log()] userauth is OK
2026-02-14T17:46:46.691 [DEBUG] [Thread-189518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:46:46.691 [DEBUG] [Thread-189518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:46:46.691 [DEBUG] [Thread-189518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:46:46.691 [DEBUG] [Thread-189518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:46:46.713 [INFO] [Thread-189518] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:46:46.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-14T17:46:46.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:46:47.533 [DEBUG] [Thread-189518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:46:47.534 [DEBUG] [Thread-189518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:46:47.583 [DEBUG] [Thread-189518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:46:47.583 [DEBUG] [Thread-189518] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:46:47.591 [DEBUG] [Thread-189518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:46:47.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:46:47.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:46:47.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:46:47.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:46:47.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:46:47.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:46:47.625 [DEBUG] [Thread-189518] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:46:51.213 [DEBUG] [Thread-189520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:47:06.263 [DEBUG] [Thread-189521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:47:06.846 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:47:06.847 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:47:17.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:47:17.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:47:17.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T17:47:19.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 47, 2), 13.47, 40.38, 0.0, 36.15, 15.39, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:47:19.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:47:02
2026-02-14T17:47:20.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:47:20.594 [DEBUG] [Thread-189522] [transport.py] [_log()] starting thread (client mode): 0xa57b1840
2026-02-14T17:47:20.594 [DEBUG] [Thread-189522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:47:20.614 [DEBUG] [Thread-189522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:47:20.614 [INFO] [Thread-189522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:47:20.617 [DEBUG] [Thread-189522] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:47:20.617 [DEBUG] [Thread-189522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:47:20.617 [DEBUG] [Thread-189522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:47:20.617 [DEBUG] [Thread-189522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:47:20.617 [DEBUG] [Thread-189522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:47:20.617 [DEBUG] [Thread-189522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:47:20.617 [DEBUG] [Thread-189522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:47:20.617 [DEBUG] [Thread-189522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:47:20.617 [DEBUG] [Thread-189522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:47:20.617 [DEBUG] [Thread-189522] [transport.py] [_log()] client lang: <none>
2026-02-14T17:47:20.617 [DEBUG] [Thread-189522] [transport.py] [_log()] server lang: <none>
2026-02-14T17:47:20.617 [DEBUG] [Thread-189522] [transport.py] [_log()] kex follows: False
2026-02-14T17:47:20.618 [DEBUG] [Thread-189522] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:47:20.618 [DEBUG] [Thread-189522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:47:20.618 [DEBUG] [Thread-189522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:47:20.618 [DEBUG] [Thread-189522] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:47:20.618 [DEBUG] [Thread-189522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:47:20.618 [DEBUG] [Thread-189522] [transport.py] [_log()] Compression: none
2026-02-14T17:47:20.618 [DEBUG] [Thread-189522] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:47:20.636 [DEBUG] [Thread-189522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:47:20.637 [DEBUG] [Thread-189522] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:47:20.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:47:20.638 [DEBUG] [Thread-189522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:47:20.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:47:20.640 [DEBUG] [Thread-189522] [transport.py] [_log()] userauth is OK
2026-02-14T17:47:20.640 [DEBUG] [Thread-189522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:47:20.641 [DEBUG] [Thread-189522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:47:20.641 [DEBUG] [Thread-189522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:47:20.641 [DEBUG] [Thread-189522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:47:20.678 [INFO] [Thread-189522] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:47:20.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:47:21.300 [DEBUG] [Thread-189524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:47:21.311 [DEBUG] [Thread-189522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:47:21.312 [DEBUG] [Thread-189522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:47:21.312 [DEBUG] [Thread-189522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:47:21.352 [DEBUG] [Thread-189522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:47:21.352 [DEBUG] [Thread-189522] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:47:21.355 [DEBUG] [Thread-189522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:47:21.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:47:21.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:47:21.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:47:21.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:47:21.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:47:21.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:47:21.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:47:21.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:47:21.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:47:21.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.657397 -999.00  +14.70  23.77     47   +3.70 1 1 1 1 1   887    0 10.72 -34.83 ----- 24.0 23.8 186.2 46.4 18.0 -27.1 17.6 -28.5 19.1 -25.4 19.6 -27.4
2026-02-14T17:47:21.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:47:21.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:47:21.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.657397
2026-02-14T17:47:21.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:47:21.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:47:21.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:47:21.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:47:21.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:47:21.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:47:02', tmtdew=13.47, humidity=40.38, cloud=0.0, wind=36.15, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:46:39.101', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:47:21.384 [DEBUG] [Thread-189522] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:47:21.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-14T17:47:21.479 [DEBUG] [Thread-189526] [transport.py] [_log()] starting thread (client mode): 0xa57701f0
2026-02-14T17:47:21.480 [DEBUG] [Thread-189526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:47:21.494 [DEBUG] [Thread-189526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:47:21.495 [INFO] [Thread-189526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:47:21.502 [DEBUG] [Thread-189526] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:47:21.502 [DEBUG] [Thread-189526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:47:21.502 [DEBUG] [Thread-189526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:47:21.502 [DEBUG] [Thread-189526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:47:21.503 [DEBUG] [Thread-189526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:47:21.503 [DEBUG] [Thread-189526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:47:21.503 [DEBUG] [Thread-189526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:47:21.503 [DEBUG] [Thread-189526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:47:21.503 [DEBUG] [Thread-189526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:47:21.503 [DEBUG] [Thread-189526] [transport.py] [_log()] client lang: <none>
2026-02-14T17:47:21.503 [DEBUG] [Thread-189526] [transport.py] [_log()] server lang: <none>
2026-02-14T17:47:21.503 [DEBUG] [Thread-189526] [transport.py] [_log()] kex follows: False
2026-02-14T17:47:21.503 [DEBUG] [Thread-189526] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:47:21.503 [DEBUG] [Thread-189526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:47:21.503 [DEBUG] [Thread-189526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:47:21.503 [DEBUG] [Thread-189526] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:47:21.503 [DEBUG] [Thread-189526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:47:21.503 [DEBUG] [Thread-189526] [transport.py] [_log()] Compression: none
2026-02-14T17:47:21.504 [DEBUG] [Thread-189526] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:47:21.568 [DEBUG] [Thread-189526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:47:21.569 [DEBUG] [Thread-189526] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:47:21.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:47:21.570 [DEBUG] [Thread-189526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:47:21.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:47:21.627 [DEBUG] [Thread-189526] [transport.py] [_log()] userauth is OK
2026-02-14T17:47:21.628 [DEBUG] [Thread-189526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:47:21.628 [DEBUG] [Thread-189526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:47:21.628 [DEBUG] [Thread-189526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:47:21.628 [DEBUG] [Thread-189526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:47:21.653 [INFO] [Thread-189526] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:47: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-14T17:47:21.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:47:22.479 [DEBUG] [Thread-189526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:47:22.479 [DEBUG] [Thread-189526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:47:22.527 [DEBUG] [Thread-189526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:47:22.528 [DEBUG] [Thread-189526] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:47:22.537 [DEBUG] [Thread-189526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:47:22.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:47:22.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-14T17:47:22.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-14T17:47:22.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:47:22.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:47:22.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:47:22.573 [DEBUG] [Thread-189526] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:47:34.654 [DEBUG] [Thread-189528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:47:36.336 [DEBUG] [Thread-189529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:47:51.383 [DEBUG] [Thread-189530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:47:52.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:47:52.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:47:52.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T17:47:54.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 47, 38), 14.62, 37.33, 0.0, 38.99, 16.68, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:47:54.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:47:38
2026-02-14T17:47:54.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:47:55.006 [DEBUG] [Thread-189531] [transport.py] [_log()] starting thread (client mode): 0xa2dc1fc0
2026-02-14T17:47:55.006 [DEBUG] [Thread-189531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:47:55.026 [DEBUG] [Thread-189531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:47:55.026 [INFO] [Thread-189531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:47:55.029 [DEBUG] [Thread-189531] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:47:55.029 [DEBUG] [Thread-189531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:47:55.029 [DEBUG] [Thread-189531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:47:55.030 [DEBUG] [Thread-189531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:47:55.030 [DEBUG] [Thread-189531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:47:55.030 [DEBUG] [Thread-189531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:47:55.030 [DEBUG] [Thread-189531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:47:55.030 [DEBUG] [Thread-189531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:47:55.030 [DEBUG] [Thread-189531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:47:55.030 [DEBUG] [Thread-189531] [transport.py] [_log()] client lang: <none>
2026-02-14T17:47:55.030 [DEBUG] [Thread-189531] [transport.py] [_log()] server lang: <none>
2026-02-14T17:47:55.030 [DEBUG] [Thread-189531] [transport.py] [_log()] kex follows: False
2026-02-14T17:47:55.030 [DEBUG] [Thread-189531] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:47:55.030 [DEBUG] [Thread-189531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:47:55.030 [DEBUG] [Thread-189531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:47:55.030 [DEBUG] [Thread-189531] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:47:55.030 [DEBUG] [Thread-189531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:47:55.030 [DEBUG] [Thread-189531] [transport.py] [_log()] Compression: none
2026-02-14T17:47:55.030 [DEBUG] [Thread-189531] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:47:55.049 [DEBUG] [Thread-189531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:47:55.050 [DEBUG] [Thread-189531] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:47:55.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:47:55.051 [DEBUG] [Thread-189531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:47:55.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:47:55.053 [DEBUG] [Thread-189531] [transport.py] [_log()] userauth is OK
2026-02-14T17:47:55.054 [DEBUG] [Thread-189531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:47:55.054 [DEBUG] [Thread-189531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:47:55.054 [DEBUG] [Thread-189531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:47:55.054 [DEBUG] [Thread-189531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:47:55.088 [INFO] [Thread-189531] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:47:55.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:47:55.711 [DEBUG] [Thread-189531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:47:55.711 [DEBUG] [Thread-189531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:47:55.712 [DEBUG] [Thread-189531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:47:55.752 [DEBUG] [Thread-189531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:47:55.752 [DEBUG] [Thread-189531] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:47:55.754 [DEBUG] [Thread-189531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:47:55.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:47:55.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:47:55.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:47:55.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:47:55.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:47:55.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:47:55.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:47:55.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:47:55.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:47:55.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.657744 -999.00  +14.90  31.71     47   +3.70 1 1 2 1 1   887    0 10.65 -33.94 ----- 38.1 31.7 181.8 42.3 17.9 -28.7 17.6 -28.1 19.1 -26.6 19.6 -28.3
2026-02-14T17:47:55.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:47:55.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:47:55.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.657744
2026-02-14T17:47:55.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:47:55.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:47:55.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:47:55.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:47:55.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:47:55.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:47:38', tmtdew=14.62, humidity=37.33, cloud=0.0, wind=38.99, temperature=16.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:47:09.082', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:47:55.776 [DEBUG] [Thread-189531] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:47:55.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T17:47:55.881 [DEBUG] [Thread-189534] [transport.py] [_log()] starting thread (client mode): 0xa5773d60
2026-02-14T17:47:55.882 [DEBUG] [Thread-189534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:47:55.896 [DEBUG] [Thread-189534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:47:55.896 [INFO] [Thread-189534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:47:55.904 [DEBUG] [Thread-189534] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:47:55.904 [DEBUG] [Thread-189534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:47:55.904 [DEBUG] [Thread-189534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:47:55.904 [DEBUG] [Thread-189534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:47:55.904 [DEBUG] [Thread-189534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:47:55.904 [DEBUG] [Thread-189534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:47:55.904 [DEBUG] [Thread-189534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:47:55.904 [DEBUG] [Thread-189534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:47:55.904 [DEBUG] [Thread-189534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:47:55.904 [DEBUG] [Thread-189534] [transport.py] [_log()] client lang: <none>
2026-02-14T17:47:55.904 [DEBUG] [Thread-189534] [transport.py] [_log()] server lang: <none>
2026-02-14T17:47:55.904 [DEBUG] [Thread-189534] [transport.py] [_log()] kex follows: False
2026-02-14T17:47:55.904 [DEBUG] [Thread-189534] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:47:55.904 [DEBUG] [Thread-189534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:47:55.905 [DEBUG] [Thread-189534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:47:55.905 [DEBUG] [Thread-189534] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:47:55.905 [DEBUG] [Thread-189534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:47:55.905 [DEBUG] [Thread-189534] [transport.py] [_log()] Compression: none
2026-02-14T17:47:55.905 [DEBUG] [Thread-189534] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:47:55.963 [DEBUG] [Thread-189534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:47:55.964 [DEBUG] [Thread-189534] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:47:55.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:47:55.965 [DEBUG] [Thread-189534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:47:55.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:47:56.020 [DEBUG] [Thread-189534] [transport.py] [_log()] userauth is OK
2026-02-14T17:47:56.020 [DEBUG] [Thread-189534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:47:56.020 [DEBUG] [Thread-189534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:47:56.020 [DEBUG] [Thread-189534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:47:56.020 [DEBUG] [Thread-189534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:47:56.038 [INFO] [Thread-189534] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:47:56.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T17:47:56.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:47:56.836 [DEBUG] [Thread-189534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:47:56.836 [DEBUG] [Thread-189534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:47:56.884 [DEBUG] [Thread-189534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:47:56.885 [DEBUG] [Thread-189534] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:47:56.894 [DEBUG] [Thread-189534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:47:56.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:47:56.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:47:56.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:47:56.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:47:56.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:47:56.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:47:56.929 [DEBUG] [Thread-189534] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:48:06.421 [DEBUG] [Thread-189536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:48:06.998 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:48:06.999 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:48:21.474 [DEBUG] [Thread-189537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:48:26.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:48:26.952 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:48:26.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-14T17:48:28.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 48, 13), 13.47, 40.52, 0.0, 40.25, 15.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:48:28.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:48:13
2026-02-14T17:48:29.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:48:29.332 [DEBUG] [Thread-189538] [transport.py] [_log()] starting thread (client mode): 0xa57c22c0
2026-02-14T17:48:29.332 [DEBUG] [Thread-189538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:48:29.353 [DEBUG] [Thread-189538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:48:29.353 [INFO] [Thread-189538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:48:29.356 [DEBUG] [Thread-189538] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:48:29.356 [DEBUG] [Thread-189538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:48:29.356 [DEBUG] [Thread-189538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:48:29.356 [DEBUG] [Thread-189538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:48:29.356 [DEBUG] [Thread-189538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:48:29.356 [DEBUG] [Thread-189538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:48:29.356 [DEBUG] [Thread-189538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:48:29.357 [DEBUG] [Thread-189538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:48:29.357 [DEBUG] [Thread-189538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:48:29.357 [DEBUG] [Thread-189538] [transport.py] [_log()] client lang: <none>
2026-02-14T17:48:29.357 [DEBUG] [Thread-189538] [transport.py] [_log()] server lang: <none>
2026-02-14T17:48:29.357 [DEBUG] [Thread-189538] [transport.py] [_log()] kex follows: False
2026-02-14T17:48:29.357 [DEBUG] [Thread-189538] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:48:29.357 [DEBUG] [Thread-189538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:48:29.357 [DEBUG] [Thread-189538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:48:29.357 [DEBUG] [Thread-189538] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:48:29.357 [DEBUG] [Thread-189538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:48:29.357 [DEBUG] [Thread-189538] [transport.py] [_log()] Compression: none
2026-02-14T17:48:29.357 [DEBUG] [Thread-189538] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:48:29.374 [DEBUG] [Thread-189538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:48:29.375 [DEBUG] [Thread-189538] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:48:29.375 [DEBUG] [Thread-189538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:48:29.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:48:29.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:48:29.377 [DEBUG] [Thread-189538] [transport.py] [_log()] userauth is OK
2026-02-14T17:48:29.378 [DEBUG] [Thread-189538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:48:29.378 [DEBUG] [Thread-189538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:48:29.378 [DEBUG] [Thread-189538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:48:29.378 [DEBUG] [Thread-189538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:48:29.403 [INFO] [Thread-189538] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:48:29.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:48:30.215 [DEBUG] [Thread-189538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:48:30.215 [DEBUG] [Thread-189538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:48:30.215 [DEBUG] [Thread-189538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:48:30.256 [DEBUG] [Thread-189538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:48:30.256 [DEBUG] [Thread-189538] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:48:30.259 [DEBUG] [Thread-189538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:48:30.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:48:30.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:48:30.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:48:30.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:48:30.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:48:30.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:48:30.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:48:30.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:48:30.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:48:30.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.658091 -999.00  +14.80  30.05     47   +3.70 1 1 2 1 1   887    0 10.64 -34.53 ----- 25.8 30.1 178.0 47.2 17.9 -27.7 17.5 -27.9 19.0 -26.9 19.4 -28.3
2026-02-14T17:48:30.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:48:30.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:48:30.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.658091
2026-02-14T17:48:30.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:48:30.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:48:30.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:48:30.286 [DEBUG] [Thread-189538] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:48:30.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:48:30.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:48:30.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:48:13', tmtdew=13.47, humidity=40.52, cloud=0.0, wind=40.25, temperature=15.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:47:39.062', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:48:30.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-14T17:48:30.383 [DEBUG] [Thread-189541] [transport.py] [_log()] starting thread (client mode): 0xa57c3df0
2026-02-14T17:48:30.383 [DEBUG] [Thread-189541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:48:30.398 [DEBUG] [Thread-189541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:48:30.398 [INFO] [Thread-189541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:48:30.405 [DEBUG] [Thread-189541] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:48:30.406 [DEBUG] [Thread-189541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:48:30.406 [DEBUG] [Thread-189541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:48:30.406 [DEBUG] [Thread-189541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:48:30.406 [DEBUG] [Thread-189541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:48:30.406 [DEBUG] [Thread-189541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:48:30.406 [DEBUG] [Thread-189541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:48:30.406 [DEBUG] [Thread-189541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:48:30.406 [DEBUG] [Thread-189541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:48:30.406 [DEBUG] [Thread-189541] [transport.py] [_log()] client lang: <none>
2026-02-14T17:48:30.406 [DEBUG] [Thread-189541] [transport.py] [_log()] server lang: <none>
2026-02-14T17:48:30.406 [DEBUG] [Thread-189541] [transport.py] [_log()] kex follows: False
2026-02-14T17:48:30.406 [DEBUG] [Thread-189541] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:48:30.406 [DEBUG] [Thread-189541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:48:30.406 [DEBUG] [Thread-189541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:48:30.406 [DEBUG] [Thread-189541] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:48:30.406 [DEBUG] [Thread-189541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:48:30.406 [DEBUG] [Thread-189541] [transport.py] [_log()] Compression: none
2026-02-14T17:48:30.407 [DEBUG] [Thread-189541] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:48:30.463 [DEBUG] [Thread-189541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:48:30.464 [DEBUG] [Thread-189541] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:48:30.464 [DEBUG] [Thread-189541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:48:30.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:48:30.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:48:30.519 [DEBUG] [Thread-189541] [transport.py] [_log()] userauth is OK
2026-02-14T17:48:30.520 [DEBUG] [Thread-189541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:48:30.520 [DEBUG] [Thread-189541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:48:30.520 [DEBUG] [Thread-189541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:48:30.520 [DEBUG] [Thread-189541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:48:30.541 [INFO] [Thread-189541] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:48:30.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-14T17:48:30.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:48:31.373 [DEBUG] [Thread-189541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:48:31.373 [DEBUG] [Thread-189541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:48:31.421 [DEBUG] [Thread-189541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:48:31.422 [DEBUG] [Thread-189541] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:48:31.431 [DEBUG] [Thread-189541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:48:31.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:48:31.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:48:31.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:48:31.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:48:31.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:48:31.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:48:31.469 [DEBUG] [Thread-189541] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:48:34.687 [DEBUG] [Thread-189543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:48:36.510 [DEBUG] [Thread-189544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:48:51.564 [DEBUG] [Thread-189545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:49:01.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:49:01.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:49:01.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-14T17:49:03.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 48, 48), 13.46, 40.53, 0.0, 33.08, 15.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:49:03.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:48:48
2026-02-14T17:49:03.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:49:03.872 [DEBUG] [Thread-189546] [transport.py] [_log()] starting thread (client mode): 0xa57b3640
2026-02-14T17:49:03.872 [DEBUG] [Thread-189546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:49:03.893 [DEBUG] [Thread-189546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:49:03.893 [INFO] [Thread-189546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:49:03.896 [DEBUG] [Thread-189546] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:49:03.896 [DEBUG] [Thread-189546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:49:03.896 [DEBUG] [Thread-189546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:49:03.896 [DEBUG] [Thread-189546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:49:03.896 [DEBUG] [Thread-189546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:49:03.896 [DEBUG] [Thread-189546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:49:03.896 [DEBUG] [Thread-189546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:49:03.896 [DEBUG] [Thread-189546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:49:03.896 [DEBUG] [Thread-189546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:49:03.896 [DEBUG] [Thread-189546] [transport.py] [_log()] client lang: <none>
2026-02-14T17:49:03.896 [DEBUG] [Thread-189546] [transport.py] [_log()] server lang: <none>
2026-02-14T17:49:03.896 [DEBUG] [Thread-189546] [transport.py] [_log()] kex follows: False
2026-02-14T17:49:03.896 [DEBUG] [Thread-189546] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:49:03.896 [DEBUG] [Thread-189546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:49:03.896 [DEBUG] [Thread-189546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:49:03.896 [DEBUG] [Thread-189546] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:49:03.896 [DEBUG] [Thread-189546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:49:03.896 [DEBUG] [Thread-189546] [transport.py] [_log()] Compression: none
2026-02-14T17:49:03.896 [DEBUG] [Thread-189546] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:49:03.913 [DEBUG] [Thread-189546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:49:03.914 [DEBUG] [Thread-189546] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:49:03.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:49:03.914 [DEBUG] [Thread-189546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:49:03.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:49:03.917 [DEBUG] [Thread-189546] [transport.py] [_log()] userauth is OK
2026-02-14T17:49:03.917 [DEBUG] [Thread-189546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:49:03.917 [DEBUG] [Thread-189546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:49:03.917 [DEBUG] [Thread-189546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:49:03.917 [DEBUG] [Thread-189546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:49:03.942 [INFO] [Thread-189546] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:49:03.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:49:04.542 [DEBUG] [Thread-189546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:49:04.543 [DEBUG] [Thread-189546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:49:04.543 [DEBUG] [Thread-189546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:49:04.583 [DEBUG] [Thread-189546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:49:04.584 [DEBUG] [Thread-189546] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:49:04.587 [DEBUG] [Thread-189546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:49:04.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:49:04.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:49:04.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:49:04.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:49:04.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:49:04.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:49:04.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:49:04.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:49:04.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:49:04.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.658785 -999.00  +15.10  25.61     46   +3.80 1 1 1 1 1   887    0 10.57 -36.42 ----- 20.7 25.6 165.0 34.9 18.0 -27.0 17.6 -25.6 19.1 -26.6 19.6 -27.1
2026-02-14T17:49:04.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:49:04.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:49:04.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.658785
2026-02-14T17:49:04.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:49:04.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:49:04.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:49:04.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:49:04.615 [DEBUG] [Thread-189546] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:49:04.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:49:04.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:48:48', tmtdew=13.46, humidity=40.53, cloud=0.0, wind=33.08, temperature=15.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:48:39.024', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:49:04.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-14T17:49:04.711 [DEBUG] [Thread-189549] [transport.py] [_log()] starting thread (client mode): 0xa2def7c0
2026-02-14T17:49:04.712 [DEBUG] [Thread-189549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:49:04.726 [DEBUG] [Thread-189549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:49:04.726 [INFO] [Thread-189549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:49:04.733 [DEBUG] [Thread-189549] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:49:04.734 [DEBUG] [Thread-189549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:49:04.734 [DEBUG] [Thread-189549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:49:04.734 [DEBUG] [Thread-189549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:49:04.734 [DEBUG] [Thread-189549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:49:04.734 [DEBUG] [Thread-189549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:49:04.734 [DEBUG] [Thread-189549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:49:04.734 [DEBUG] [Thread-189549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:49:04.734 [DEBUG] [Thread-189549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:49:04.734 [DEBUG] [Thread-189549] [transport.py] [_log()] client lang: <none>
2026-02-14T17:49:04.734 [DEBUG] [Thread-189549] [transport.py] [_log()] server lang: <none>
2026-02-14T17:49:04.734 [DEBUG] [Thread-189549] [transport.py] [_log()] kex follows: False
2026-02-14T17:49:04.734 [DEBUG] [Thread-189549] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:49:04.734 [DEBUG] [Thread-189549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:49:04.734 [DEBUG] [Thread-189549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:49:04.734 [DEBUG] [Thread-189549] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:49:04.734 [DEBUG] [Thread-189549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:49:04.735 [DEBUG] [Thread-189549] [transport.py] [_log()] Compression: none
2026-02-14T17:49:04.735 [DEBUG] [Thread-189549] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:49:04.791 [DEBUG] [Thread-189549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:49:04.792 [DEBUG] [Thread-189549] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:49:04.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:49:04.793 [DEBUG] [Thread-189549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:49:04.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:49:04.847 [DEBUG] [Thread-189549] [transport.py] [_log()] userauth is OK
2026-02-14T17:49:04.847 [DEBUG] [Thread-189549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:49:04.848 [DEBUG] [Thread-189549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:49:04.848 [DEBUG] [Thread-189549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:49:04.848 [DEBUG] [Thread-189549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:49:04.866 [INFO] [Thread-189549] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:49:04.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-14T17:49:04.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:49:05.670 [DEBUG] [Thread-189549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:49:05.670 [DEBUG] [Thread-189549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:49:05.718 [DEBUG] [Thread-189549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:49:05.719 [DEBUG] [Thread-189549] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:49:05.728 [DEBUG] [Thread-189549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:49:05.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:49:05.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:49:05.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:49:05.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:49:05.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:49:05.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:49:05.767 [DEBUG] [Thread-189549] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:49:06.600 [DEBUG] [Thread-189551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:49:07.138 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:49:07.139 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:49:21.654 [DEBUG] [Thread-189552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:49:34.741 [DEBUG] [Thread-189553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:49:35.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:49:35.785 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:49:35.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-14T17:49:36.694 [DEBUG] [Thread-189554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:49:38.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 49, 24), 13.45, 40.53, 0.0, 32.62, 15.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:49:38.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:49:24
2026-02-14T17:49:38.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:49:38.660 [DEBUG] [Thread-189555] [transport.py] [_log()] starting thread (client mode): 0xa57c3940
2026-02-14T17:49:38.660 [DEBUG] [Thread-189555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:49:38.678 [DEBUG] [Thread-189555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:49:38.679 [INFO] [Thread-189555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:49:38.682 [DEBUG] [Thread-189555] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:49:38.682 [DEBUG] [Thread-189555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:49:38.682 [DEBUG] [Thread-189555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:49:38.682 [DEBUG] [Thread-189555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:49:38.682 [DEBUG] [Thread-189555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:49:38.682 [DEBUG] [Thread-189555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:49:38.682 [DEBUG] [Thread-189555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:49:38.682 [DEBUG] [Thread-189555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:49:38.682 [DEBUG] [Thread-189555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:49:38.682 [DEBUG] [Thread-189555] [transport.py] [_log()] client lang: <none>
2026-02-14T17:49:38.683 [DEBUG] [Thread-189555] [transport.py] [_log()] server lang: <none>
2026-02-14T17:49:38.683 [DEBUG] [Thread-189555] [transport.py] [_log()] kex follows: False
2026-02-14T17:49:38.683 [DEBUG] [Thread-189555] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:49:38.683 [DEBUG] [Thread-189555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:49:38.683 [DEBUG] [Thread-189555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:49:38.683 [DEBUG] [Thread-189555] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:49:38.683 [DEBUG] [Thread-189555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:49:38.683 [DEBUG] [Thread-189555] [transport.py] [_log()] Compression: none
2026-02-14T17:49:38.683 [DEBUG] [Thread-189555] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:49:38.700 [DEBUG] [Thread-189555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:49:38.701 [DEBUG] [Thread-189555] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:49:38.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:49:38.702 [DEBUG] [Thread-189555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:49:38.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:49:38.704 [DEBUG] [Thread-189555] [transport.py] [_log()] userauth is OK
2026-02-14T17:49:38.705 [DEBUG] [Thread-189555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:49:38.705 [DEBUG] [Thread-189555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:49:38.705 [DEBUG] [Thread-189555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:49:38.705 [DEBUG] [Thread-189555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:49:38.728 [INFO] [Thread-189555] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:49:38.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:49:39.370 [DEBUG] [Thread-189555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:49:39.370 [DEBUG] [Thread-189555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:49:39.370 [DEBUG] [Thread-189555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:49:39.411 [DEBUG] [Thread-189555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:49:39.411 [DEBUG] [Thread-189555] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:49:39.415 [DEBUG] [Thread-189555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:49:39.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:49:39.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:49:39.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:49:39.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:49:39.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:49:39.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:49:39.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:49:39.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:49:39.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:49:39.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.659133 -999.00  +15.10  33.75     46   +3.60 1 1 2 1 1   887    0 10.13 -35.90 ----- 35.4 33.8 176.0 41.9 18.0 -28.2 17.7 -26.6 19.1 -25.1 19.6 -27.9
2026-02-14T17:49:39.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:49:39.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:49:39.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.659133
2026-02-14T17:49:39.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:49:39.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:49:39.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:49:39.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:49:39.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:49:39.444 [DEBUG] [Thread-189555] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:49:39.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:49:24', tmtdew=13.45, humidity=40.53, cloud=0.0, wind=32.62, temperature=15.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:49:09.091', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:49:39.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-14T17:49:39.553 [DEBUG] [Thread-189558] [transport.py] [_log()] starting thread (client mode): 0xa2d78640
2026-02-14T17:49:39.553 [DEBUG] [Thread-189558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:49:39.568 [DEBUG] [Thread-189558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:49:39.568 [INFO] [Thread-189558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:49:39.576 [DEBUG] [Thread-189558] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:49:39.576 [DEBUG] [Thread-189558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:49:39.576 [DEBUG] [Thread-189558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:49:39.576 [DEBUG] [Thread-189558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:49:39.576 [DEBUG] [Thread-189558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:49:39.576 [DEBUG] [Thread-189558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:49:39.576 [DEBUG] [Thread-189558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:49:39.577 [DEBUG] [Thread-189558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:49:39.577 [DEBUG] [Thread-189558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:49:39.577 [DEBUG] [Thread-189558] [transport.py] [_log()] client lang: <none>
2026-02-14T17:49:39.577 [DEBUG] [Thread-189558] [transport.py] [_log()] server lang: <none>
2026-02-14T17:49:39.577 [DEBUG] [Thread-189558] [transport.py] [_log()] kex follows: False
2026-02-14T17:49:39.577 [DEBUG] [Thread-189558] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:49:39.577 [DEBUG] [Thread-189558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:49:39.577 [DEBUG] [Thread-189558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:49:39.578 [DEBUG] [Thread-189558] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:49:39.578 [DEBUG] [Thread-189558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:49:39.578 [DEBUG] [Thread-189558] [transport.py] [_log()] Compression: none
2026-02-14T17:49:39.578 [DEBUG] [Thread-189558] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:49:39.639 [DEBUG] [Thread-189558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:49:39.639 [DEBUG] [Thread-189558] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:49:39.640 [DEBUG] [Thread-189558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:49:39.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:49:39.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:49:39.695 [DEBUG] [Thread-189558] [transport.py] [_log()] userauth is OK
2026-02-14T17:49:39.695 [DEBUG] [Thread-189558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:49:39.695 [DEBUG] [Thread-189558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:49:39.695 [DEBUG] [Thread-189558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:49:39.695 [DEBUG] [Thread-189558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:49:39.714 [INFO] [Thread-189558] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:49:39.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T17:49:39.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:49:40.526 [DEBUG] [Thread-189558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:49:40.526 [DEBUG] [Thread-189558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:49:40.574 [DEBUG] [Thread-189558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:49:40.574 [DEBUG] [Thread-189558] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:49:40.583 [DEBUG] [Thread-189558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:49:40.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:49:40.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-14T17:49:40.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:49:40.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:49:40.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:49:40.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:49:40.620 [DEBUG] [Thread-189558] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:49:51.732 [DEBUG] [Thread-189560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:50:06.782 [DEBUG] [Thread-189561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:50:07.282 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:50:07.283 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:50:10.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:50:10.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:50:10.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-14T17:50:12.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 50), 13.47, 40.23, 0.0, 35.99, 15.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:50:12.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:50:00
2026-02-14T17:50:12.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:50:13.034 [DEBUG] [Thread-189562] [transport.py] [_log()] starting thread (client mode): 0xa2d7a620
2026-02-14T17:50:13.034 [DEBUG] [Thread-189562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:50:13.054 [DEBUG] [Thread-189562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:50:13.054 [INFO] [Thread-189562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:50:13.058 [DEBUG] [Thread-189562] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:50:13.058 [DEBUG] [Thread-189562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:50:13.058 [DEBUG] [Thread-189562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:50:13.058 [DEBUG] [Thread-189562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:50:13.058 [DEBUG] [Thread-189562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:50:13.058 [DEBUG] [Thread-189562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:50:13.058 [DEBUG] [Thread-189562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:50:13.059 [DEBUG] [Thread-189562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:50:13.059 [DEBUG] [Thread-189562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:50:13.059 [DEBUG] [Thread-189562] [transport.py] [_log()] client lang: <none>
2026-02-14T17:50:13.059 [DEBUG] [Thread-189562] [transport.py] [_log()] server lang: <none>
2026-02-14T17:50:13.059 [DEBUG] [Thread-189562] [transport.py] [_log()] kex follows: False
2026-02-14T17:50:13.059 [DEBUG] [Thread-189562] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:50:13.059 [DEBUG] [Thread-189562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:50:13.059 [DEBUG] [Thread-189562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:50:13.059 [DEBUG] [Thread-189562] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:50:13.059 [DEBUG] [Thread-189562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:50:13.059 [DEBUG] [Thread-189562] [transport.py] [_log()] Compression: none
2026-02-14T17:50:13.059 [DEBUG] [Thread-189562] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:50:13.075 [DEBUG] [Thread-189562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:50:13.075 [DEBUG] [Thread-189562] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:50:13.076 [DEBUG] [Thread-189562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:50:13.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:50:13.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:50:13.078 [DEBUG] [Thread-189562] [transport.py] [_log()] userauth is OK
2026-02-14T17:50:13.078 [DEBUG] [Thread-189562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:50:13.078 [DEBUG] [Thread-189562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:50:13.078 [DEBUG] [Thread-189562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:50:13.078 [DEBUG] [Thread-189562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:50:13.102 [INFO] [Thread-189562] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:50:13.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:50:18.473 [DEBUG] [Thread-189562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:50:18.473 [DEBUG] [Thread-189562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:50:18.473 [DEBUG] [Thread-189562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:50:18.514 [DEBUG] [Thread-189562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:50:18.515 [DEBUG] [Thread-189562] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:50:18.519 [DEBUG] [Thread-189562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:50:18.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:50:18.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:50:18.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:50:18.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:50:18.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:50:18.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:50:18.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:50:18.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:50:18.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:50:18.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.659480 -999.00  +15.00  31.13     46   +3.60 1 1 2 1 1   887    0 10.43 -38.45 ----- 35.0 31.1 169.4 44.4 17.9 -27.8 17.7 -26.6 19.1 -26.5 19.6 -28.1
2026-02-14T17:50:18.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:50:18.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:50:18.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.659480
2026-02-14T17:50:18.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:50:18.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:50:18.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:50:18.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:50:18.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:50:18.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:50:00', tmtdew=13.47, humidity=40.23, cloud=0.0, wind=35.99, temperature=15.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:49:39.072', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:50:18.633 [DEBUG] [Thread-189562] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:50:18.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-14T17:50:18.728 [DEBUG] [Thread-189565] [transport.py] [_log()] starting thread (client mode): 0xa5772c50
2026-02-14T17:50:18.728 [DEBUG] [Thread-189565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:50:18.743 [DEBUG] [Thread-189565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:50:18.743 [INFO] [Thread-189565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:50:18.751 [DEBUG] [Thread-189565] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:50:18.751 [DEBUG] [Thread-189565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:50:18.751 [DEBUG] [Thread-189565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:50:18.751 [DEBUG] [Thread-189565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:50:18.751 [DEBUG] [Thread-189565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:50:18.751 [DEBUG] [Thread-189565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:50:18.751 [DEBUG] [Thread-189565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:50:18.751 [DEBUG] [Thread-189565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:50:18.751 [DEBUG] [Thread-189565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:50:18.751 [DEBUG] [Thread-189565] [transport.py] [_log()] client lang: <none>
2026-02-14T17:50:18.751 [DEBUG] [Thread-189565] [transport.py] [_log()] server lang: <none>
2026-02-14T17:50:18.751 [DEBUG] [Thread-189565] [transport.py] [_log()] kex follows: False
2026-02-14T17:50:18.751 [DEBUG] [Thread-189565] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:50:18.751 [DEBUG] [Thread-189565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:50:18.752 [DEBUG] [Thread-189565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:50:18.752 [DEBUG] [Thread-189565] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:50:18.752 [DEBUG] [Thread-189565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:50:18.752 [DEBUG] [Thread-189565] [transport.py] [_log()] Compression: none
2026-02-14T17:50:18.752 [DEBUG] [Thread-189565] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:50:18.817 [DEBUG] [Thread-189565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:50:18.817 [DEBUG] [Thread-189565] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:50:18.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:50:18.819 [DEBUG] [Thread-189565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:50:18.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:50:18.875 [DEBUG] [Thread-189565] [transport.py] [_log()] userauth is OK
2026-02-14T17:50:18.875 [DEBUG] [Thread-189565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:50:18.876 [DEBUG] [Thread-189565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:50:18.876 [DEBUG] [Thread-189565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:50:18.876 [DEBUG] [Thread-189565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:50:18.895 [INFO] [Thread-189565] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:50:18.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T17:50:18.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:50:19.702 [DEBUG] [Thread-189565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:50:19.702 [DEBUG] [Thread-189565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:50:19.751 [DEBUG] [Thread-189565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:50:19.751 [DEBUG] [Thread-189565] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:50:19.760 [DEBUG] [Thread-189565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:50:19.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:50: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-14T17:50:19.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:50:19.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:50:19.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:50:19.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:50:19.797 [DEBUG] [Thread-189565] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:50:21.822 [DEBUG] [Thread-189567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:50:34.774 [DEBUG] [Thread-189568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:50:36.873 [DEBUG] [Thread-189569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:50:49.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:50:49.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:50:49.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T17:50:51.908 [DEBUG] [Thread-189570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:50:52.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 50, 36), 14.38, 37.83, 0.0, 44.24, 16.15, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:50:52.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:50:36
2026-02-14T17:50:52.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:50:52.742 [DEBUG] [Thread-189571] [transport.py] [_log()] starting thread (client mode): 0xa2d7b340
2026-02-14T17:50:52.742 [DEBUG] [Thread-189571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:50:52.756 [DEBUG] [Thread-189571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:50:52.756 [INFO] [Thread-189571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:50:52.759 [DEBUG] [Thread-189571] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:50:52.759 [DEBUG] [Thread-189571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:50:52.759 [DEBUG] [Thread-189571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:50:52.759 [DEBUG] [Thread-189571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:50:52.760 [DEBUG] [Thread-189571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:50:52.760 [DEBUG] [Thread-189571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:50:52.760 [DEBUG] [Thread-189571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:50:52.760 [DEBUG] [Thread-189571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:50:52.760 [DEBUG] [Thread-189571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:50:52.760 [DEBUG] [Thread-189571] [transport.py] [_log()] client lang: <none>
2026-02-14T17:50:52.760 [DEBUG] [Thread-189571] [transport.py] [_log()] server lang: <none>
2026-02-14T17:50:52.760 [DEBUG] [Thread-189571] [transport.py] [_log()] kex follows: False
2026-02-14T17:50:52.760 [DEBUG] [Thread-189571] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:50:52.760 [DEBUG] [Thread-189571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:50:52.760 [DEBUG] [Thread-189571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:50:52.760 [DEBUG] [Thread-189571] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:50:52.760 [DEBUG] [Thread-189571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:50:52.760 [DEBUG] [Thread-189571] [transport.py] [_log()] Compression: none
2026-02-14T17:50:52.760 [DEBUG] [Thread-189571] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:50:52.776 [DEBUG] [Thread-189571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:50:52.777 [DEBUG] [Thread-189571] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:50:52.777 [DEBUG] [Thread-189571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:50:52.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:50:52.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:50:52.779 [DEBUG] [Thread-189571] [transport.py] [_log()] userauth is OK
2026-02-14T17:50:52.780 [DEBUG] [Thread-189571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:50:52.780 [DEBUG] [Thread-189571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:50:52.780 [DEBUG] [Thread-189571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:50:52.780 [DEBUG] [Thread-189571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:50:52.804 [INFO] [Thread-189571] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:50:52.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:50:53.445 [DEBUG] [Thread-189571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:50:53.445 [DEBUG] [Thread-189571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:50:53.446 [DEBUG] [Thread-189571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:50:53.487 [DEBUG] [Thread-189571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:50:53.487 [DEBUG] [Thread-189571] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:50:53.490 [DEBUG] [Thread-189571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:50:53.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:50:53.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:50:53.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:50:53.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:50:53.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:50:53.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:50:53.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:50:53.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:50:53.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:50:53.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.659827 -999.00  +14.90  31.00     46   +3.60 1 1 2 1 1   887    0 10.58 -33.45 ----- 32.7 31.0 166.1 39.6 17.9 -28.0 17.7 -26.4 19.0 -25.5 19.6 -27.1
2026-02-14T17:50:53.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:50:53.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:50:53.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.659827
2026-02-14T17:50:53.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:50:53.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:50:53.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:50:53.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:50:53.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:50:53.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:50:36', tmtdew=14.38, humidity=37.83, cloud=0.0, wind=44.24, temperature=16.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:50:09.053', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:50:53.517 [DEBUG] [Thread-189571] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:50:53.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T17:50:53.614 [DEBUG] [Thread-189574] [transport.py] [_log()] starting thread (client mode): 0xa5772410
2026-02-14T17:50:53.614 [DEBUG] [Thread-189574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:50:53.629 [DEBUG] [Thread-189574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:50:53.629 [INFO] [Thread-189574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:50:53.636 [DEBUG] [Thread-189574] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:50:53.637 [DEBUG] [Thread-189574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:50:53.637 [DEBUG] [Thread-189574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:50:53.637 [DEBUG] [Thread-189574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:50:53.637 [DEBUG] [Thread-189574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:50:53.637 [DEBUG] [Thread-189574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:50:53.637 [DEBUG] [Thread-189574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:50:53.637 [DEBUG] [Thread-189574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:50:53.637 [DEBUG] [Thread-189574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:50:53.637 [DEBUG] [Thread-189574] [transport.py] [_log()] client lang: <none>
2026-02-14T17:50:53.637 [DEBUG] [Thread-189574] [transport.py] [_log()] server lang: <none>
2026-02-14T17:50:53.637 [DEBUG] [Thread-189574] [transport.py] [_log()] kex follows: False
2026-02-14T17:50:53.637 [DEBUG] [Thread-189574] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:50:53.637 [DEBUG] [Thread-189574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:50:53.637 [DEBUG] [Thread-189574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:50:53.637 [DEBUG] [Thread-189574] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:50:53.637 [DEBUG] [Thread-189574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:50:53.637 [DEBUG] [Thread-189574] [transport.py] [_log()] Compression: none
2026-02-14T17:50:53.638 [DEBUG] [Thread-189574] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:50:53.695 [DEBUG] [Thread-189574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:50:53.696 [DEBUG] [Thread-189574] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:50:53.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:50:53.697 [DEBUG] [Thread-189574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:50:53.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:50:53.751 [DEBUG] [Thread-189574] [transport.py] [_log()] userauth is OK
2026-02-14T17:50:53.752 [DEBUG] [Thread-189574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:50:53.752 [DEBUG] [Thread-189574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:50:53.752 [DEBUG] [Thread-189574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:50:53.752 [DEBUG] [Thread-189574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:50:53.770 [INFO] [Thread-189574] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:50:53.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-14T17:50:53.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:50:54.574 [DEBUG] [Thread-189574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:50:54.575 [DEBUG] [Thread-189574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:50:54.622 [DEBUG] [Thread-189574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:50:54.623 [DEBUG] [Thread-189574] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:50:54.632 [DEBUG] [Thread-189574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:50:54.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:50:54.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-14T17:50:54.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-14T17:50:54.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:50:54.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:50:54.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:50:54.669 [DEBUG] [Thread-189574] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:51:06.943 [DEBUG] [Thread-189576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:51:07.422 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:51:07.423 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:51:21.994 [DEBUG] [Thread-189577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:51:24.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:51:24.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:51:24.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-14T17:51:26.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 51, 11), 13.56, 40.0, 0.0, 38.71, 15.38, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:51:26.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:51:11
2026-02-14T17:51:27.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:51:27.485 [DEBUG] [Thread-189578] [transport.py] [_log()] starting thread (client mode): 0xa2d799c0
2026-02-14T17:51:27.485 [DEBUG] [Thread-189578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:51:27.506 [DEBUG] [Thread-189578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:51:27.506 [INFO] [Thread-189578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:51:27.509 [DEBUG] [Thread-189578] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:51:27.509 [DEBUG] [Thread-189578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:51:27.509 [DEBUG] [Thread-189578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:51:27.510 [DEBUG] [Thread-189578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:51:27.510 [DEBUG] [Thread-189578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:51:27.510 [DEBUG] [Thread-189578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:51:27.510 [DEBUG] [Thread-189578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:51:27.510 [DEBUG] [Thread-189578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:51:27.510 [DEBUG] [Thread-189578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:51:27.510 [DEBUG] [Thread-189578] [transport.py] [_log()] client lang: <none>
2026-02-14T17:51:27.510 [DEBUG] [Thread-189578] [transport.py] [_log()] server lang: <none>
2026-02-14T17:51:27.510 [DEBUG] [Thread-189578] [transport.py] [_log()] kex follows: False
2026-02-14T17:51:27.510 [DEBUG] [Thread-189578] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:51:27.510 [DEBUG] [Thread-189578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:51:27.510 [DEBUG] [Thread-189578] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:51:27.511 [DEBUG] [Thread-189578] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:51:27.511 [DEBUG] [Thread-189578] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:51:27.511 [DEBUG] [Thread-189578] [transport.py] [_log()] Compression: none
2026-02-14T17:51:27.511 [DEBUG] [Thread-189578] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:51:27.530 [DEBUG] [Thread-189578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:51:27.530 [DEBUG] [Thread-189578] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:51:27.531 [DEBUG] [Thread-189578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:51:27.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:51:27.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:51:27.533 [DEBUG] [Thread-189578] [transport.py] [_log()] userauth is OK
2026-02-14T17:51:27.533 [DEBUG] [Thread-189578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:51:27.534 [DEBUG] [Thread-189578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:51:27.534 [DEBUG] [Thread-189578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:51:27.534 [DEBUG] [Thread-189578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:51:27.571 [INFO] [Thread-189578] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:51:27.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:51:28.191 [DEBUG] [Thread-189578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:51:28.191 [DEBUG] [Thread-189578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:51:28.192 [DEBUG] [Thread-189578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:51:28.232 [DEBUG] [Thread-189578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:51:28.232 [DEBUG] [Thread-189578] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:51:28.236 [DEBUG] [Thread-189578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:51:28.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:51:28.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:51:28.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:51:28.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:51:28.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:51:28.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:51:28.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:51:28.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:51:28.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:51:28.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.660174 -999.00  +15.00  28.43     46   +3.70 1 1 1 1 1   887    0 10.58 -33.99 ----- 35.4 28.4 171.4 39.1 17.9 -28.1 17.7 -26.7 19.1 -25.4 19.6 -28.0
2026-02-14T17:51:28.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:51:28.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:51:28.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.660174
2026-02-14T17:51:28.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:51:28.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:51:28.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:51:28.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:51:28.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:51:28.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:51:11', tmtdew=13.56, humidity=40.0, cloud=0.0, wind=38.71, temperature=15.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:50:39.034', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:51:28.263 [DEBUG] [Thread-189578] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:51:28.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-14T17:51:28.359 [DEBUG] [Thread-189581] [transport.py] [_log()] starting thread (client mode): 0xa2d7a9b0
2026-02-14T17:51:28.359 [DEBUG] [Thread-189581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:51:28.374 [DEBUG] [Thread-189581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:51:28.374 [INFO] [Thread-189581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:51:28.382 [DEBUG] [Thread-189581] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:51:28.382 [DEBUG] [Thread-189581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:51:28.382 [DEBUG] [Thread-189581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:51:28.382 [DEBUG] [Thread-189581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:51:28.382 [DEBUG] [Thread-189581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:51:28.382 [DEBUG] [Thread-189581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:51:28.382 [DEBUG] [Thread-189581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:51:28.383 [DEBUG] [Thread-189581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:51:28.383 [DEBUG] [Thread-189581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:51:28.383 [DEBUG] [Thread-189581] [transport.py] [_log()] client lang: <none>
2026-02-14T17:51:28.383 [DEBUG] [Thread-189581] [transport.py] [_log()] server lang: <none>
2026-02-14T17:51:28.383 [DEBUG] [Thread-189581] [transport.py] [_log()] kex follows: False
2026-02-14T17:51:28.383 [DEBUG] [Thread-189581] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:51:28.383 [DEBUG] [Thread-189581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:51:28.383 [DEBUG] [Thread-189581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:51:28.383 [DEBUG] [Thread-189581] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:51:28.384 [DEBUG] [Thread-189581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:51:28.384 [DEBUG] [Thread-189581] [transport.py] [_log()] Compression: none
2026-02-14T17:51:28.384 [DEBUG] [Thread-189581] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:51:28.440 [DEBUG] [Thread-189581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:51:28.440 [DEBUG] [Thread-189581] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:51:28.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:51:28.441 [DEBUG] [Thread-189581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:51:28.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:51:28.495 [DEBUG] [Thread-189581] [transport.py] [_log()] userauth is OK
2026-02-14T17:51:28.495 [DEBUG] [Thread-189581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:51:28.496 [DEBUG] [Thread-189581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:51:28.496 [DEBUG] [Thread-189581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:51:28.496 [DEBUG] [Thread-189581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:51:28.515 [INFO] [Thread-189581] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:51:28.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-14T17:51:28.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:51:29.332 [DEBUG] [Thread-189581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:51:29.332 [DEBUG] [Thread-189581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:51:29.380 [DEBUG] [Thread-189581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:51:29.381 [DEBUG] [Thread-189581] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:51:29.390 [DEBUG] [Thread-189581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:51:29.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:51:29.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-14T17:51:29.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-14T17:51:29.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:51:29.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:51:29.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:51:29.426 [DEBUG] [Thread-189581] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:51:34.807 [DEBUG] [Thread-189583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:51:37.030 [DEBUG] [Thread-189584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:51:52.093 [DEBUG] [Thread-189585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:51:59.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:51:59.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:51:59.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-14T17:52:01.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 51, 48), 13.43, 40.45, 0.0, 39.06, 15.26, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:52:01.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:51:48
2026-02-14T17:52:01.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:52:01.849 [DEBUG] [Thread-189586] [transport.py] [_log()] starting thread (client mode): 0xa2ded4b0
2026-02-14T17:52:01.849 [DEBUG] [Thread-189586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:52:01.871 [DEBUG] [Thread-189586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:52:01.872 [INFO] [Thread-189586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:52:01.873 [DEBUG] [Thread-189586] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:52:01.873 [DEBUG] [Thread-189586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:52:01.873 [DEBUG] [Thread-189586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:52:01.873 [DEBUG] [Thread-189586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:52:01.873 [DEBUG] [Thread-189586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:52:01.873 [DEBUG] [Thread-189586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:52:01.873 [DEBUG] [Thread-189586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:52:01.873 [DEBUG] [Thread-189586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:52:01.873 [DEBUG] [Thread-189586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:52:01.873 [DEBUG] [Thread-189586] [transport.py] [_log()] client lang: <none>
2026-02-14T17:52:01.873 [DEBUG] [Thread-189586] [transport.py] [_log()] server lang: <none>
2026-02-14T17:52:01.873 [DEBUG] [Thread-189586] [transport.py] [_log()] kex follows: False
2026-02-14T17:52:01.873 [DEBUG] [Thread-189586] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:52:01.874 [DEBUG] [Thread-189586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:52:01.874 [DEBUG] [Thread-189586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:52:01.874 [DEBUG] [Thread-189586] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:52:01.874 [DEBUG] [Thread-189586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:52:01.874 [DEBUG] [Thread-189586] [transport.py] [_log()] Compression: none
2026-02-14T17:52:01.874 [DEBUG] [Thread-189586] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:52:01.888 [DEBUG] [Thread-189586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:52:01.888 [DEBUG] [Thread-189586] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:52:01.889 [DEBUG] [Thread-189586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:52:01.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:52:01.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:52:01.891 [DEBUG] [Thread-189586] [transport.py] [_log()] userauth is OK
2026-02-14T17:52:01.891 [DEBUG] [Thread-189586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:52:01.891 [DEBUG] [Thread-189586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:52:01.891 [DEBUG] [Thread-189586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:52:01.891 [DEBUG] [Thread-189586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:52:01.910 [INFO] [Thread-189586] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:52:01.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:52:02.715 [DEBUG] [Thread-189586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:52:02.715 [DEBUG] [Thread-189586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:52:02.716 [DEBUG] [Thread-189586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:52:02.756 [DEBUG] [Thread-189586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:52:02.756 [DEBUG] [Thread-189586] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:52:02.760 [DEBUG] [Thread-189586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:52:02.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:52:02.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:52:02.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:52:02.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:52:02.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:52:02.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:52:02.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:52:02.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:52:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:52:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.660522 -999.00  +15.00  27.44     46   +3.70 1 1 1 1 1   887    0 10.50 -31.81 ----- 31.5 27.4 172.4 37.0 18.0 -27.5 17.7 -27.3 19.1 -24.8 19.6 -27.4
2026-02-14T17:52:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:52:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:52:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.660522
2026-02-14T17:52:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:52:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:52:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:52:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:52:02.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:52:02.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:51:48', tmtdew=13.43, humidity=40.45, cloud=0.0, wind=39.06, temperature=15.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:51:09.101', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:52:02.787 [DEBUG] [Thread-189586] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:52:02.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-14T17:52:02.880 [DEBUG] [Thread-189589] [transport.py] [_log()] starting thread (client mode): 0xa2d02500
2026-02-14T17:52:02.880 [DEBUG] [Thread-189589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:52:02.895 [DEBUG] [Thread-189589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:52:02.896 [INFO] [Thread-189589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:52:02.903 [DEBUG] [Thread-189589] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:52:02.903 [DEBUG] [Thread-189589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:52:02.903 [DEBUG] [Thread-189589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:52:02.904 [DEBUG] [Thread-189589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:52:02.904 [DEBUG] [Thread-189589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:52:02.904 [DEBUG] [Thread-189589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:52:02.904 [DEBUG] [Thread-189589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:52:02.904 [DEBUG] [Thread-189589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:52:02.904 [DEBUG] [Thread-189589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:52:02.904 [DEBUG] [Thread-189589] [transport.py] [_log()] client lang: <none>
2026-02-14T17:52:02.904 [DEBUG] [Thread-189589] [transport.py] [_log()] server lang: <none>
2026-02-14T17:52:02.904 [DEBUG] [Thread-189589] [transport.py] [_log()] kex follows: False
2026-02-14T17:52:02.905 [DEBUG] [Thread-189589] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:52:02.905 [DEBUG] [Thread-189589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:52:02.905 [DEBUG] [Thread-189589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:52:02.905 [DEBUG] [Thread-189589] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:52:02.905 [DEBUG] [Thread-189589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:52:02.905 [DEBUG] [Thread-189589] [transport.py] [_log()] Compression: none
2026-02-14T17:52:02.906 [DEBUG] [Thread-189589] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:52:02.961 [DEBUG] [Thread-189589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:52:02.961 [DEBUG] [Thread-189589] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:52:02.962 [DEBUG] [Thread-189589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:52:02.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:52:02.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:52:03.018 [DEBUG] [Thread-189589] [transport.py] [_log()] userauth is OK
2026-02-14T17:52:03.019 [DEBUG] [Thread-189589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:52:03.019 [DEBUG] [Thread-189589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:52:03.019 [DEBUG] [Thread-189589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:52:03.019 [DEBUG] [Thread-189589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:52:03.034 [INFO] [Thread-189589] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:52:03.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-14T17:52:03.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:52:03.846 [DEBUG] [Thread-189589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:52:03.846 [DEBUG] [Thread-189589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:52:03.893 [DEBUG] [Thread-189589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:52:03.893 [DEBUG] [Thread-189589] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:52:03.902 [DEBUG] [Thread-189589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:52:03.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:52:03.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:52:03.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-14T17:52:03.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:52:03.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:52:03.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:52:03.936 [DEBUG] [Thread-189589] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:52:07.135 [DEBUG] [Thread-189591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:52:07.567 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:52:07.568 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:52:22.186 [DEBUG] [Thread-189592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:52:33.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:52:33.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:52:33.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T17:52:34.850 [DEBUG] [Thread-189593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:52:35.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 52, 23), 13.41, 40.5, 0.0, 39.26, 15.24, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:52:35.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:52:23
2026-02-14T17:52:36.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:52:36.441 [DEBUG] [Thread-189594] [transport.py] [_log()] starting thread (client mode): 0xa57728f0
2026-02-14T17:52:36.442 [DEBUG] [Thread-189594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:52:36.452 [DEBUG] [Thread-189594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:52:36.452 [INFO] [Thread-189594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:52:36.453 [DEBUG] [Thread-189594] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:52:36.453 [DEBUG] [Thread-189594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:52:36.453 [DEBUG] [Thread-189594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:52:36.453 [DEBUG] [Thread-189594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:52:36.453 [DEBUG] [Thread-189594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:52:36.453 [DEBUG] [Thread-189594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:52:36.453 [DEBUG] [Thread-189594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:52:36.453 [DEBUG] [Thread-189594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:52:36.453 [DEBUG] [Thread-189594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:52:36.453 [DEBUG] [Thread-189594] [transport.py] [_log()] client lang: <none>
2026-02-14T17:52:36.453 [DEBUG] [Thread-189594] [transport.py] [_log()] server lang: <none>
2026-02-14T17:52:36.453 [DEBUG] [Thread-189594] [transport.py] [_log()] kex follows: False
2026-02-14T17:52:36.453 [DEBUG] [Thread-189594] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:52:36.453 [DEBUG] [Thread-189594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:52:36.453 [DEBUG] [Thread-189594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:52:36.453 [DEBUG] [Thread-189594] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:52:36.453 [DEBUG] [Thread-189594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:52:36.453 [DEBUG] [Thread-189594] [transport.py] [_log()] Compression: none
2026-02-14T17:52:36.453 [DEBUG] [Thread-189594] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:52:36.460 [DEBUG] [Thread-189594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:52:36.461 [DEBUG] [Thread-189594] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:52:36.461 [DEBUG] [Thread-189594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:52:36.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:52:36.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:52:36.462 [DEBUG] [Thread-189594] [transport.py] [_log()] userauth is OK
2026-02-14T17:52:36.462 [DEBUG] [Thread-189594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:52:36.462 [DEBUG] [Thread-189594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:52:36.462 [DEBUG] [Thread-189594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:52:36.462 [DEBUG] [Thread-189594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:52:36.473 [INFO] [Thread-189594] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:52:36.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:52:37.020 [DEBUG] [Thread-189594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:52:37.021 [DEBUG] [Thread-189594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:52:37.021 [DEBUG] [Thread-189594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:52:37.061 [DEBUG] [Thread-189594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:52:37.062 [DEBUG] [Thread-189594] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:52:37.065 [DEBUG] [Thread-189594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:52:37.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:52:37.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:52:37.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:52:37.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:52:37.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:52:37.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:52:37.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:52:37.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:52:37.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:52:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.661216 -999.00  +15.10  22.23     46   +3.70 1 1 1 1 1   887    0 10.87 -29.93 ----- 27.2 22.2 170.4 33.2 18.0 -27.8 17.8 -27.8 19.1 -25.0 19.7 -27.1
2026-02-14T17:52:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:52:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:52:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.661216
2026-02-14T17:52:37.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:52:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:52:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:52:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:52:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:52:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:52:23', tmtdew=13.41, humidity=40.5, cloud=0.0, wind=39.26, temperature=15.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:52:09.062', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:52:37.091 [DEBUG] [Thread-189594] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:52:37.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-14T17:52:37.187 [DEBUG] [Thread-189597] [transport.py] [_log()] starting thread (client mode): 0xa5771690
2026-02-14T17:52:37.187 [DEBUG] [Thread-189597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:52:37.201 [DEBUG] [Thread-189597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:52:37.202 [INFO] [Thread-189597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:52:37.209 [DEBUG] [Thread-189597] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:52:37.209 [DEBUG] [Thread-189597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:52:37.210 [DEBUG] [Thread-189597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:52:37.210 [DEBUG] [Thread-189597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:52:37.210 [DEBUG] [Thread-189597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:52:37.210 [DEBUG] [Thread-189597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:52:37.210 [DEBUG] [Thread-189597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:52:37.210 [DEBUG] [Thread-189597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:52:37.210 [DEBUG] [Thread-189597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:52:37.210 [DEBUG] [Thread-189597] [transport.py] [_log()] client lang: <none>
2026-02-14T17:52:37.210 [DEBUG] [Thread-189597] [transport.py] [_log()] server lang: <none>
2026-02-14T17:52:37.210 [DEBUG] [Thread-189597] [transport.py] [_log()] kex follows: False
2026-02-14T17:52:37.210 [DEBUG] [Thread-189597] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:52:37.210 [DEBUG] [Thread-189597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:52:37.210 [DEBUG] [Thread-189597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:52:37.210 [DEBUG] [Thread-189597] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:52:37.210 [DEBUG] [Thread-189597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:52:37.210 [DEBUG] [Thread-189597] [transport.py] [_log()] Compression: none
2026-02-14T17:52:37.210 [DEBUG] [Thread-189597] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:52:37.224 [DEBUG] [Thread-189599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:52:37.267 [DEBUG] [Thread-189597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:52:37.267 [DEBUG] [Thread-189597] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:52:37.268 [DEBUG] [Thread-189597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:52:37.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:52:37.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:52:37.323 [DEBUG] [Thread-189597] [transport.py] [_log()] userauth is OK
2026-02-14T17:52:37.324 [DEBUG] [Thread-189597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:52:37.324 [DEBUG] [Thread-189597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:52:37.324 [DEBUG] [Thread-189597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:52:37.324 [DEBUG] [Thread-189597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:52:37.343 [INFO] [Thread-189597] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:52:37.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T17:52:37.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:52:38.165 [DEBUG] [Thread-189597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:52:38.165 [DEBUG] [Thread-189597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:52:38.213 [DEBUG] [Thread-189597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:52:38.214 [DEBUG] [Thread-189597] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:52:38.223 [DEBUG] [Thread-189597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:52:38.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:52:38.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:52:38.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-14T17:52:38.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:52:38.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:52:38.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:52:38.264 [DEBUG] [Thread-189597] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:52:52.277 [DEBUG] [Thread-189600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:53:07.312 [DEBUG] [Thread-189601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:53:07.706 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:53:07.707 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:53:08.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:53:08.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:53:08.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-14T17:53:10.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 52, 58), 13.33, 40.3, 0.0, 33.56, 15.14, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:53:10.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:52:58
2026-02-14T17:53:10.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:53:10.750 [DEBUG] [Thread-189602] [transport.py] [_log()] starting thread (client mode): 0xa2dec8b0
2026-02-14T17:53:10.750 [DEBUG] [Thread-189602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:53:10.770 [DEBUG] [Thread-189602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:53:10.771 [INFO] [Thread-189602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:53:10.772 [DEBUG] [Thread-189602] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:53:10.772 [DEBUG] [Thread-189602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:53:10.772 [DEBUG] [Thread-189602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:53:10.772 [DEBUG] [Thread-189602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:53:10.772 [DEBUG] [Thread-189602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:53:10.772 [DEBUG] [Thread-189602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:53:10.772 [DEBUG] [Thread-189602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:53:10.772 [DEBUG] [Thread-189602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:53:10.772 [DEBUG] [Thread-189602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:53:10.772 [DEBUG] [Thread-189602] [transport.py] [_log()] client lang: <none>
2026-02-14T17:53:10.772 [DEBUG] [Thread-189602] [transport.py] [_log()] server lang: <none>
2026-02-14T17:53:10.772 [DEBUG] [Thread-189602] [transport.py] [_log()] kex follows: False
2026-02-14T17:53:10.772 [DEBUG] [Thread-189602] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:53:10.773 [DEBUG] [Thread-189602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:53:10.773 [DEBUG] [Thread-189602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:53:10.773 [DEBUG] [Thread-189602] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:53:10.773 [DEBUG] [Thread-189602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:53:10.773 [DEBUG] [Thread-189602] [transport.py] [_log()] Compression: none
2026-02-14T17:53:10.773 [DEBUG] [Thread-189602] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:53:10.780 [DEBUG] [Thread-189602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:53:10.781 [DEBUG] [Thread-189602] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:53:10.781 [DEBUG] [Thread-189602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:53:10.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:53:10.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:53:10.783 [DEBUG] [Thread-189602] [transport.py] [_log()] userauth is OK
2026-02-14T17:53:10.783 [DEBUG] [Thread-189602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:53:10.783 [DEBUG] [Thread-189602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:53:10.783 [DEBUG] [Thread-189602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:53:10.783 [DEBUG] [Thread-189602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:53:10.800 [INFO] [Thread-189602] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:53:10.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:53:11.383 [DEBUG] [Thread-189602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:53:11.383 [DEBUG] [Thread-189602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:53:11.384 [DEBUG] [Thread-189602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:53:11.424 [DEBUG] [Thread-189602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:53:11.424 [DEBUG] [Thread-189602] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:53:11.427 [DEBUG] [Thread-189602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:53:11.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:53:11.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:53:11.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:53:11.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:53:11.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:53:11.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:53:11.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:53:11.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:53:11.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:53:11.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.661563 -999.00  +15.10  27.58     46   +3.60 1 1 1 1 1   887    0 10.77 -28.79 ----- 27.5 27.6 184.2 40.2 17.9 -28.2 17.8 -29.8 19.1 -25.2 19.6 -29.8
2026-02-14T17:53:11.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:53:11.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:53:11.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.661563
2026-02-14T17:53:11.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:53:11.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:53:11.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:53:11.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:53:11.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:53:11.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:52:58', tmtdew=13.33, humidity=40.3, cloud=0.0, wind=33.56, temperature=15.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:52:39.043', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:53:11.442 [DEBUG] [Thread-189602] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:53:11.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-14T17:53:11.548 [DEBUG] [Thread-189605] [transport.py] [_log()] starting thread (client mode): 0xa2d00f10
2026-02-14T17:53:11.548 [DEBUG] [Thread-189605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:53:11.562 [DEBUG] [Thread-189605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:53:11.562 [INFO] [Thread-189605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:53:11.569 [DEBUG] [Thread-189605] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:53:11.569 [DEBUG] [Thread-189605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:53:11.569 [DEBUG] [Thread-189605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:53:11.570 [DEBUG] [Thread-189605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:53:11.570 [DEBUG] [Thread-189605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:53:11.570 [DEBUG] [Thread-189605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:53:11.570 [DEBUG] [Thread-189605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:53:11.570 [DEBUG] [Thread-189605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:53:11.570 [DEBUG] [Thread-189605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:53:11.570 [DEBUG] [Thread-189605] [transport.py] [_log()] client lang: <none>
2026-02-14T17:53:11.570 [DEBUG] [Thread-189605] [transport.py] [_log()] server lang: <none>
2026-02-14T17:53:11.570 [DEBUG] [Thread-189605] [transport.py] [_log()] kex follows: False
2026-02-14T17:53:11.570 [DEBUG] [Thread-189605] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:53:11.571 [DEBUG] [Thread-189605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:53:11.571 [DEBUG] [Thread-189605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:53:11.571 [DEBUG] [Thread-189605] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:53:11.571 [DEBUG] [Thread-189605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:53:11.571 [DEBUG] [Thread-189605] [transport.py] [_log()] Compression: none
2026-02-14T17:53:11.571 [DEBUG] [Thread-189605] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:53:11.627 [DEBUG] [Thread-189605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:53:11.628 [DEBUG] [Thread-189605] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:53:11.628 [DEBUG] [Thread-189605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:53:11.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:53:11.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:53:11.683 [DEBUG] [Thread-189605] [transport.py] [_log()] userauth is OK
2026-02-14T17:53:11.683 [DEBUG] [Thread-189605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:53:11.683 [DEBUG] [Thread-189605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:53:11.683 [DEBUG] [Thread-189605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:53:11.683 [DEBUG] [Thread-189605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:53:11.701 [INFO] [Thread-189605] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:53:11.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-14T17:53:11.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:53:12.508 [DEBUG] [Thread-189605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:53:12.508 [DEBUG] [Thread-189605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:53:12.560 [DEBUG] [Thread-189605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:53:12.560 [DEBUG] [Thread-189605] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:53:12.568 [DEBUG] [Thread-189605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:53:12.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:53:12.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-14T17:53:12.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-14T17:53:12.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:53:12.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:53:12.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:53:12.602 [DEBUG] [Thread-189605] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:53:22.349 [DEBUG] [Thread-189607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:53:34.886 [DEBUG] [Thread-189608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:53:37.394 [DEBUG] [Thread-189609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:53:42.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:53:42.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:53:42.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-14T17:53:44.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 53, 34), 14.28, 38.09, 0.0, 42.02, 16.18, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:53:44.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:53:34
2026-02-14T17:53:45.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:53:45.473 [DEBUG] [Thread-189610] [transport.py] [_log()] starting thread (client mode): 0xa2deda20
2026-02-14T17:53:45.473 [DEBUG] [Thread-189610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:53:45.492 [DEBUG] [Thread-189610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:53:45.492 [INFO] [Thread-189610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:53:45.494 [DEBUG] [Thread-189610] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:53:45.494 [DEBUG] [Thread-189610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:53:45.494 [DEBUG] [Thread-189610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:53:45.494 [DEBUG] [Thread-189610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:53:45.494 [DEBUG] [Thread-189610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:53:45.494 [DEBUG] [Thread-189610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:53:45.494 [DEBUG] [Thread-189610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:53:45.494 [DEBUG] [Thread-189610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:53:45.494 [DEBUG] [Thread-189610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:53:45.494 [DEBUG] [Thread-189610] [transport.py] [_log()] client lang: <none>
2026-02-14T17:53:45.494 [DEBUG] [Thread-189610] [transport.py] [_log()] server lang: <none>
2026-02-14T17:53:45.495 [DEBUG] [Thread-189610] [transport.py] [_log()] kex follows: False
2026-02-14T17:53:45.495 [DEBUG] [Thread-189610] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:53:45.495 [DEBUG] [Thread-189610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:53:45.495 [DEBUG] [Thread-189610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:53:45.495 [DEBUG] [Thread-189610] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:53:45.495 [DEBUG] [Thread-189610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:53:45.495 [DEBUG] [Thread-189610] [transport.py] [_log()] Compression: none
2026-02-14T17:53:45.495 [DEBUG] [Thread-189610] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:53:45.509 [DEBUG] [Thread-189610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:53:45.510 [DEBUG] [Thread-189610] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:53:45.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:53:45.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:53:45.512 [DEBUG] [Thread-189610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:53:45.513 [DEBUG] [Thread-189610] [transport.py] [_log()] userauth is OK
2026-02-14T17:53:45.513 [DEBUG] [Thread-189610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:53:45.513 [DEBUG] [Thread-189610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:53:45.514 [DEBUG] [Thread-189610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:53:45.514 [DEBUG] [Thread-189610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:53:45.552 [INFO] [Thread-189610] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:53:45.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:53:46.197 [DEBUG] [Thread-189610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:53:46.197 [DEBUG] [Thread-189610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:53:46.198 [DEBUG] [Thread-189610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:53:46.238 [DEBUG] [Thread-189610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:53:46.239 [DEBUG] [Thread-189610] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:53:46.243 [DEBUG] [Thread-189610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:53:46.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:53:46.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:53:46.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:53:46.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:53:46.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:53:46.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:53:46.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:53:46.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:53:46.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:53:46.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.661910 -999.00  +14.90  23.37     46   +3.50 1 1 1 1 1   887    0 10.79 -27.35 ----- 23.7 23.4 178.4 40.3 17.9 -27.5 17.5 -27.9 18.9 -26.1 19.5 -27.3
2026-02-14T17:53:46.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:53:46.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:53:46.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.661910
2026-02-14T17:53:46.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:53:46.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:53:46.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:53:46.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:53:46.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:53:46.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:53:34', tmtdew=14.28, humidity=38.09, cloud=0.0, wind=42.02, temperature=16.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:53:09.024', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:53:46.271 [DEBUG] [Thread-189610] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:53:46.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-14T17:53:46.367 [DEBUG] [Thread-189613] [transport.py] [_log()] starting thread (client mode): 0xa2d02b60
2026-02-14T17:53:46.367 [DEBUG] [Thread-189613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:53:46.381 [DEBUG] [Thread-189613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:53:46.382 [INFO] [Thread-189613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:53:46.389 [DEBUG] [Thread-189613] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:53:46.389 [DEBUG] [Thread-189613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:53:46.389 [DEBUG] [Thread-189613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:53:46.389 [DEBUG] [Thread-189613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:53:46.389 [DEBUG] [Thread-189613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:53:46.390 [DEBUG] [Thread-189613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:53:46.390 [DEBUG] [Thread-189613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:53:46.390 [DEBUG] [Thread-189613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:53:46.390 [DEBUG] [Thread-189613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:53:46.390 [DEBUG] [Thread-189613] [transport.py] [_log()] client lang: <none>
2026-02-14T17:53:46.390 [DEBUG] [Thread-189613] [transport.py] [_log()] server lang: <none>
2026-02-14T17:53:46.390 [DEBUG] [Thread-189613] [transport.py] [_log()] kex follows: False
2026-02-14T17:53:46.390 [DEBUG] [Thread-189613] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:53:46.390 [DEBUG] [Thread-189613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:53:46.391 [DEBUG] [Thread-189613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:53:46.391 [DEBUG] [Thread-189613] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:53:46.391 [DEBUG] [Thread-189613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:53:46.391 [DEBUG] [Thread-189613] [transport.py] [_log()] Compression: none
2026-02-14T17:53:46.391 [DEBUG] [Thread-189613] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:53:46.448 [DEBUG] [Thread-189613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:53:46.448 [DEBUG] [Thread-189613] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:53:46.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:53:46.449 [DEBUG] [Thread-189613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:53:46.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:53:46.508 [DEBUG] [Thread-189613] [transport.py] [_log()] userauth is OK
2026-02-14T17:53:46.509 [DEBUG] [Thread-189613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:53:46.509 [DEBUG] [Thread-189613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:53:46.509 [DEBUG] [Thread-189613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:53:46.509 [DEBUG] [Thread-189613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:53:46.533 [INFO] [Thread-189613] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:53:46.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T17:53:46.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:53:47.387 [DEBUG] [Thread-189613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:53:47.387 [DEBUG] [Thread-189613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:53:47.434 [DEBUG] [Thread-189613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:53:47.434 [DEBUG] [Thread-189613] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:53:47.444 [DEBUG] [Thread-189613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:53:47.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:53:47.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-14T17:53:47.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:53:47.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:53:47.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:53:47.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:53:47.480 [DEBUG] [Thread-189613] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:53:52.434 [DEBUG] [Thread-189615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:54:07.487 [DEBUG] [Thread-189616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:54:07.846 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:54:07.847 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:54:17.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:54:17.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:54:17.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T17:54:19.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 54, 9), 13.43, 40.43, 0.0, 35.99, 15.18, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:54:19.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:54:09
2026-02-14T17:54:19.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:54:19.877 [DEBUG] [Thread-189617] [transport.py] [_log()] starting thread (client mode): 0xa5772500
2026-02-14T17:54:19.877 [DEBUG] [Thread-189617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:54:19.898 [DEBUG] [Thread-189617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:54:19.899 [INFO] [Thread-189617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:54:19.902 [DEBUG] [Thread-189617] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:54:19.902 [DEBUG] [Thread-189617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:54:19.902 [DEBUG] [Thread-189617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:54:19.902 [DEBUG] [Thread-189617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:54:19.902 [DEBUG] [Thread-189617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:54:19.902 [DEBUG] [Thread-189617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:54:19.902 [DEBUG] [Thread-189617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:54:19.902 [DEBUG] [Thread-189617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:54:19.902 [DEBUG] [Thread-189617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:54:19.902 [DEBUG] [Thread-189617] [transport.py] [_log()] client lang: <none>
2026-02-14T17:54:19.902 [DEBUG] [Thread-189617] [transport.py] [_log()] server lang: <none>
2026-02-14T17:54:19.902 [DEBUG] [Thread-189617] [transport.py] [_log()] kex follows: False
2026-02-14T17:54:19.902 [DEBUG] [Thread-189617] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:54:19.902 [DEBUG] [Thread-189617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:54:19.902 [DEBUG] [Thread-189617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:54:19.902 [DEBUG] [Thread-189617] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:54:19.902 [DEBUG] [Thread-189617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:54:19.902 [DEBUG] [Thread-189617] [transport.py] [_log()] Compression: none
2026-02-14T17:54:19.902 [DEBUG] [Thread-189617] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:54:19.918 [DEBUG] [Thread-189617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:54:19.919 [DEBUG] [Thread-189617] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:54:19.919 [DEBUG] [Thread-189617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:54:19.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:54:19.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:54:19.921 [DEBUG] [Thread-189617] [transport.py] [_log()] userauth is OK
2026-02-14T17:54:19.922 [DEBUG] [Thread-189617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:54:19.922 [DEBUG] [Thread-189617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:54:19.922 [DEBUG] [Thread-189617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:54:19.922 [DEBUG] [Thread-189617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:54:19.938 [INFO] [Thread-189617] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:54:19.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:54:20.580 [DEBUG] [Thread-189617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:54:20.580 [DEBUG] [Thread-189617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:54:20.581 [DEBUG] [Thread-189617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:54:20.621 [DEBUG] [Thread-189617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:54:20.622 [DEBUG] [Thread-189617] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:54:20.625 [DEBUG] [Thread-189617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:54:20.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:54:20.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:54:20.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:54:20.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:54:20.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:54:20.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:54:20.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:54:20.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:54:20.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:54:20.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.662605 -999.00  +14.90  29.31     46   +3.50 1 1 1 1 1   887    0 10.56 -24.70 ----- 23.5 29.3 166.4 41.1 17.9 -27.3 17.7 -27.3 19.1 -25.8 19.6 -27.6
2026-02-14T17:54:20.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:54:20.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:54:20.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.662605
2026-02-14T17:54:20.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:54:20.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:54:20.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:54:20.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:54:20.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:54:20.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:54:09', tmtdew=13.43, humidity=40.43, cloud=0.0, wind=35.99, temperature=15.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:54:09.072', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:54:20.654 [DEBUG] [Thread-189617] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:54:20.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-14T17:54:20.748 [DEBUG] [Thread-189620] [transport.py] [_log()] starting thread (client mode): 0xa2d798d0
2026-02-14T17:54:20.748 [DEBUG] [Thread-189620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:54:20.763 [DEBUG] [Thread-189620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:54:20.763 [INFO] [Thread-189620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:54:20.771 [DEBUG] [Thread-189620] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:54:20.771 [DEBUG] [Thread-189620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:54:20.772 [DEBUG] [Thread-189620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:54:20.772 [DEBUG] [Thread-189620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:54:20.772 [DEBUG] [Thread-189620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:54:20.772 [DEBUG] [Thread-189620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:54:20.772 [DEBUG] [Thread-189620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:54:20.772 [DEBUG] [Thread-189620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:54:20.772 [DEBUG] [Thread-189620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:54:20.772 [DEBUG] [Thread-189620] [transport.py] [_log()] client lang: <none>
2026-02-14T17:54:20.772 [DEBUG] [Thread-189620] [transport.py] [_log()] server lang: <none>
2026-02-14T17:54:20.772 [DEBUG] [Thread-189620] [transport.py] [_log()] kex follows: False
2026-02-14T17:54:20.772 [DEBUG] [Thread-189620] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:54:20.772 [DEBUG] [Thread-189620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:54:20.772 [DEBUG] [Thread-189620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:54:20.772 [DEBUG] [Thread-189620] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:54:20.772 [DEBUG] [Thread-189620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:54:20.772 [DEBUG] [Thread-189620] [transport.py] [_log()] Compression: none
2026-02-14T17:54:20.772 [DEBUG] [Thread-189620] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:54:20.831 [DEBUG] [Thread-189620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:54:20.832 [DEBUG] [Thread-189620] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:54:20.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:54:20.833 [DEBUG] [Thread-189620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:54:20.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:54:20.887 [DEBUG] [Thread-189620] [transport.py] [_log()] userauth is OK
2026-02-14T17:54:20.888 [DEBUG] [Thread-189620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:54:20.888 [DEBUG] [Thread-189620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:54:20.888 [DEBUG] [Thread-189620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:54:20.888 [DEBUG] [Thread-189620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:54:20.906 [INFO] [Thread-189620] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:54:20.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-14T17:54:20.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:54:21.713 [DEBUG] [Thread-189620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:54:21.713 [DEBUG] [Thread-189620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:54:21.761 [DEBUG] [Thread-189620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:54:21.762 [DEBUG] [Thread-189620] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:54:21.771 [DEBUG] [Thread-189620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:54:21.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:54: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')
2026-02-14T17:54:21.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-14T17:54:21.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:54:21.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:54:21.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:54:21.807 [DEBUG] [Thread-189620] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:54:22.525 [DEBUG] [Thread-189622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:54:34.921 [DEBUG] [Thread-189623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:54:37.578 [DEBUG] [Thread-189624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:54:51.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:54:51.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:54:51.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-14T17:54:52.618 [DEBUG] [Thread-189625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:54:53.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 54, 44), 13.39, 40.3, 0.0, 34.69, 15.16, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:54:53.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:54:44
2026-02-14T17:54:54.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:54:54.170 [DEBUG] [Thread-189626] [transport.py] [_log()] starting thread (client mode): 0xa2ded5d0
2026-02-14T17:54:54.170 [DEBUG] [Thread-189626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:54:54.191 [DEBUG] [Thread-189626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:54:54.191 [INFO] [Thread-189626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:54:54.194 [DEBUG] [Thread-189626] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:54:54.194 [DEBUG] [Thread-189626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:54:54.194 [DEBUG] [Thread-189626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:54:54.194 [DEBUG] [Thread-189626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:54:54.194 [DEBUG] [Thread-189626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:54:54.194 [DEBUG] [Thread-189626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:54:54.194 [DEBUG] [Thread-189626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:54:54.195 [DEBUG] [Thread-189626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:54:54.195 [DEBUG] [Thread-189626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:54:54.195 [DEBUG] [Thread-189626] [transport.py] [_log()] client lang: <none>
2026-02-14T17:54:54.195 [DEBUG] [Thread-189626] [transport.py] [_log()] server lang: <none>
2026-02-14T17:54:54.195 [DEBUG] [Thread-189626] [transport.py] [_log()] kex follows: False
2026-02-14T17:54:54.195 [DEBUG] [Thread-189626] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:54:54.195 [DEBUG] [Thread-189626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:54:54.195 [DEBUG] [Thread-189626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:54:54.195 [DEBUG] [Thread-189626] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:54:54.195 [DEBUG] [Thread-189626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:54:54.195 [DEBUG] [Thread-189626] [transport.py] [_log()] Compression: none
2026-02-14T17:54:54.195 [DEBUG] [Thread-189626] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:54:54.212 [DEBUG] [Thread-189626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:54:54.213 [DEBUG] [Thread-189626] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:54:54.214 [DEBUG] [Thread-189626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:54:54.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:54:54.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:54:54.215 [DEBUG] [Thread-189626] [transport.py] [_log()] userauth is OK
2026-02-14T17:54:54.216 [DEBUG] [Thread-189626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:54:54.216 [DEBUG] [Thread-189626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:54:54.216 [DEBUG] [Thread-189626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:54:54.216 [DEBUG] [Thread-189626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:54:54.232 [INFO] [Thread-189626] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:54:54.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:54:54.874 [DEBUG] [Thread-189626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:54:54.875 [DEBUG] [Thread-189626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:54:54.875 [DEBUG] [Thread-189626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:54:54.915 [DEBUG] [Thread-189626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:54:54.916 [DEBUG] [Thread-189626] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:54:54.919 [DEBUG] [Thread-189626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:54:54.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:54:54.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:54:54.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:54:54.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:54:54.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:54:54.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:54:54.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:54:54.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:54:54.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:54:54.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.662952 -999.00  +15.00  24.61     46   +3.60 1 1 1 1 1   887    0 10.92 -23.23 ----- 24.3 24.6 175.4 40.6 17.9 -28.6 17.7 -28.2 19.1 -26.2 19.6 -28.7
2026-02-14T17:54:54.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:54:54.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:54:54.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.662952
2026-02-14T17:54:54.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:54:54.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:54:54.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:54:54.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:54:54.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:54:54.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:54:44', tmtdew=13.39, humidity=40.3, cloud=0.0, wind=34.69, temperature=15.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:54:39.053', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:54:54.948 [DEBUG] [Thread-189626] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:54:55.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T17:54:55.045 [DEBUG] [Thread-189629] [transport.py] [_log()] starting thread (client mode): 0xa57726b0
2026-02-14T17:54:55.045 [DEBUG] [Thread-189629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:54:55.059 [DEBUG] [Thread-189629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:54:55.059 [INFO] [Thread-189629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:54:55.067 [DEBUG] [Thread-189629] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:54:55.067 [DEBUG] [Thread-189629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:54:55.067 [DEBUG] [Thread-189629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:54:55.067 [DEBUG] [Thread-189629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:54:55.068 [DEBUG] [Thread-189629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:54:55.068 [DEBUG] [Thread-189629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:54:55.068 [DEBUG] [Thread-189629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:54:55.068 [DEBUG] [Thread-189629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:54:55.068 [DEBUG] [Thread-189629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:54:55.068 [DEBUG] [Thread-189629] [transport.py] [_log()] client lang: <none>
2026-02-14T17:54:55.068 [DEBUG] [Thread-189629] [transport.py] [_log()] server lang: <none>
2026-02-14T17:54:55.068 [DEBUG] [Thread-189629] [transport.py] [_log()] kex follows: False
2026-02-14T17:54:55.068 [DEBUG] [Thread-189629] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:54:55.068 [DEBUG] [Thread-189629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:54:55.068 [DEBUG] [Thread-189629] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:54:55.068 [DEBUG] [Thread-189629] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:54:55.068 [DEBUG] [Thread-189629] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:54:55.068 [DEBUG] [Thread-189629] [transport.py] [_log()] Compression: none
2026-02-14T17:54:55.068 [DEBUG] [Thread-189629] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:54:55.127 [DEBUG] [Thread-189629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:54:55.127 [DEBUG] [Thread-189629] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:54:55.128 [DEBUG] [Thread-189629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:54:55.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:54:55.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:54:55.183 [DEBUG] [Thread-189629] [transport.py] [_log()] userauth is OK
2026-02-14T17:54:55.183 [DEBUG] [Thread-189629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:54:55.183 [DEBUG] [Thread-189629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:54:55.184 [DEBUG] [Thread-189629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:54:55.184 [DEBUG] [Thread-189629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:54:55.209 [INFO] [Thread-189629] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:54:55.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T17:54:55.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:54:56.024 [DEBUG] [Thread-189629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:54:56.024 [DEBUG] [Thread-189629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:54:56.072 [DEBUG] [Thread-189629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:54:56.073 [DEBUG] [Thread-189629] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:54:56.082 [DEBUG] [Thread-189629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:54:56.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:54:56.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-14T17:54:56.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-14T17:54:56.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:54:56.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:54:56.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:54:56.118 [DEBUG] [Thread-189629] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:55:07.653 [DEBUG] [Thread-189631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:55:07.990 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:55:07.991 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:55:22.703 [DEBUG] [Thread-189632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:55:26.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:55:26.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:55:26.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-14T17:55:27.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 55, 20), 13.34, 40.41, 0.0, 31.44, 15.06, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:55:27.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:55:20
2026-02-14T17:55:28.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:55:28.455 [DEBUG] [Thread-189633] [transport.py] [_log()] starting thread (client mode): 0xa57701f0
2026-02-14T17:55:28.456 [DEBUG] [Thread-189633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:55:28.476 [DEBUG] [Thread-189633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:55:28.476 [INFO] [Thread-189633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:55:28.479 [DEBUG] [Thread-189633] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:55:28.480 [DEBUG] [Thread-189633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:55:28.480 [DEBUG] [Thread-189633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:55:28.480 [DEBUG] [Thread-189633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:55:28.480 [DEBUG] [Thread-189633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:55:28.480 [DEBUG] [Thread-189633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:55:28.480 [DEBUG] [Thread-189633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:55:28.480 [DEBUG] [Thread-189633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:55:28.481 [DEBUG] [Thread-189633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:55:28.481 [DEBUG] [Thread-189633] [transport.py] [_log()] client lang: <none>
2026-02-14T17:55:28.481 [DEBUG] [Thread-189633] [transport.py] [_log()] server lang: <none>
2026-02-14T17:55:28.481 [DEBUG] [Thread-189633] [transport.py] [_log()] kex follows: False
2026-02-14T17:55:28.481 [DEBUG] [Thread-189633] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:55:28.481 [DEBUG] [Thread-189633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:55:28.482 [DEBUG] [Thread-189633] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:55:28.482 [DEBUG] [Thread-189633] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:55:28.482 [DEBUG] [Thread-189633] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:55:28.482 [DEBUG] [Thread-189633] [transport.py] [_log()] Compression: none
2026-02-14T17:55:28.482 [DEBUG] [Thread-189633] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:55:28.502 [DEBUG] [Thread-189633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:55:28.503 [DEBUG] [Thread-189633] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:55:28.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:55:28.504 [DEBUG] [Thread-189633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:55:28.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:55:28.545 [DEBUG] [Thread-189633] [transport.py] [_log()] userauth is OK
2026-02-14T17:55:28.545 [DEBUG] [Thread-189633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:55:28.546 [DEBUG] [Thread-189633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:55:28.546 [DEBUG] [Thread-189633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:55:28.546 [DEBUG] [Thread-189633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:55:28.566 [INFO] [Thread-189633] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:55:28.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:55:29.139 [DEBUG] [Thread-189633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:55:29.139 [DEBUG] [Thread-189633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:55:29.140 [DEBUG] [Thread-189633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:55:29.180 [DEBUG] [Thread-189633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:55:29.181 [DEBUG] [Thread-189633] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:55:29.184 [DEBUG] [Thread-189633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:55:29.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:55:29.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:55:29.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:55:29.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:55:29.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:55:29.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:55:29.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:55:29.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:55:29.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:55:29.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.663299 -999.00  +14.80  23.23     46   +3.50 1 1 1 1 1   887    0 10.71 -23.49 ----- 26.7 23.2 175.0 37.1 17.8 -27.6 17.4 -27.7 18.9 -27.6 19.4 -28.0
2026-02-14T17:55:29.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:55:29.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:55:29.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.663299
2026-02-14T17:55:29.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:55:29.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:55:29.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:55:29.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:55:29.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:55:29.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:55:20', tmtdew=13.34, humidity=40.41, cloud=0.0, wind=31.44, temperature=15.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:55:09.034', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:55:29.213 [DEBUG] [Thread-189633] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:55:29.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-14T17:55:29.307 [DEBUG] [Thread-189636] [transport.py] [_log()] starting thread (client mode): 0xa2d7b8b0
2026-02-14T17:55:29.307 [DEBUG] [Thread-189636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:55:29.322 [DEBUG] [Thread-189636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:55:29.322 [INFO] [Thread-189636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:55:29.330 [DEBUG] [Thread-189636] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:55:29.330 [DEBUG] [Thread-189636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:55:29.330 [DEBUG] [Thread-189636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:55:29.330 [DEBUG] [Thread-189636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:55:29.330 [DEBUG] [Thread-189636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:55:29.330 [DEBUG] [Thread-189636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:55:29.330 [DEBUG] [Thread-189636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:55:29.330 [DEBUG] [Thread-189636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:55:29.330 [DEBUG] [Thread-189636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:55:29.330 [DEBUG] [Thread-189636] [transport.py] [_log()] client lang: <none>
2026-02-14T17:55:29.330 [DEBUG] [Thread-189636] [transport.py] [_log()] server lang: <none>
2026-02-14T17:55:29.330 [DEBUG] [Thread-189636] [transport.py] [_log()] kex follows: False
2026-02-14T17:55:29.330 [DEBUG] [Thread-189636] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:55:29.330 [DEBUG] [Thread-189636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:55:29.330 [DEBUG] [Thread-189636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:55:29.330 [DEBUG] [Thread-189636] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:55:29.331 [DEBUG] [Thread-189636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:55:29.331 [DEBUG] [Thread-189636] [transport.py] [_log()] Compression: none
2026-02-14T17:55:29.331 [DEBUG] [Thread-189636] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:55:29.387 [DEBUG] [Thread-189636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:55:29.388 [DEBUG] [Thread-189636] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:55:29.388 [DEBUG] [Thread-189636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:55:29.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:55:29.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:55:29.443 [DEBUG] [Thread-189636] [transport.py] [_log()] userauth is OK
2026-02-14T17:55:29.443 [DEBUG] [Thread-189636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:55:29.444 [DEBUG] [Thread-189636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:55:29.444 [DEBUG] [Thread-189636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:55:29.444 [DEBUG] [Thread-189636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:55:29.462 [INFO] [Thread-189636] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:55:29.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-14T17:55:29.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:55:30.283 [DEBUG] [Thread-189636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:55:30.283 [DEBUG] [Thread-189636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:55:30.331 [DEBUG] [Thread-189636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:55:30.332 [DEBUG] [Thread-189636] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:55:30.341 [DEBUG] [Thread-189636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:55:30.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:55:30.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-14T17:55:30.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:55:30.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:55:30.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:55:30.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:55:30.376 [DEBUG] [Thread-189636] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:55:34.948 [DEBUG] [Thread-189638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:55:37.739 [DEBUG] [Thread-189639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:55:52.789 [DEBUG] [Thread-189640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:56:00.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:56:00.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:56:00.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-14T17:56:02.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 55, 20), 13.34, 40.41, 0.0, 31.44, 15.06, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:56:02.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:55:20
2026-02-14T17:56:02.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:56:02.790 [DEBUG] [Thread-189641] [transport.py] [_log()] starting thread (client mode): 0xa57c20b0
2026-02-14T17:56:02.791 [DEBUG] [Thread-189641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:56:02.810 [DEBUG] [Thread-189641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:56:02.811 [INFO] [Thread-189641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:56:02.813 [DEBUG] [Thread-189641] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:56:02.813 [DEBUG] [Thread-189641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:56:02.813 [DEBUG] [Thread-189641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:56:02.813 [DEBUG] [Thread-189641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:56:02.814 [DEBUG] [Thread-189641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:56:02.814 [DEBUG] [Thread-189641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:56:02.814 [DEBUG] [Thread-189641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:56:02.814 [DEBUG] [Thread-189641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:56:02.814 [DEBUG] [Thread-189641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:56:02.814 [DEBUG] [Thread-189641] [transport.py] [_log()] client lang: <none>
2026-02-14T17:56:02.814 [DEBUG] [Thread-189641] [transport.py] [_log()] server lang: <none>
2026-02-14T17:56:02.814 [DEBUG] [Thread-189641] [transport.py] [_log()] kex follows: False
2026-02-14T17:56:02.814 [DEBUG] [Thread-189641] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:56:02.814 [DEBUG] [Thread-189641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:56:02.814 [DEBUG] [Thread-189641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:56:02.814 [DEBUG] [Thread-189641] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:56:02.814 [DEBUG] [Thread-189641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:56:02.814 [DEBUG] [Thread-189641] [transport.py] [_log()] Compression: none
2026-02-14T17:56:02.814 [DEBUG] [Thread-189641] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:56:02.831 [DEBUG] [Thread-189641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:56:02.831 [DEBUG] [Thread-189641] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:56:02.832 [DEBUG] [Thread-189641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:56:02.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:56:02.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:56:02.834 [DEBUG] [Thread-189641] [transport.py] [_log()] userauth is OK
2026-02-14T17:56:02.834 [DEBUG] [Thread-189641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:56:02.834 [DEBUG] [Thread-189641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:56:02.834 [DEBUG] [Thread-189641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:56:02.834 [DEBUG] [Thread-189641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:56:02.857 [INFO] [Thread-189641] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:56:02.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:56:03.538 [DEBUG] [Thread-189641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:56:03.539 [DEBUG] [Thread-189641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:56:03.539 [DEBUG] [Thread-189641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:56:03.579 [DEBUG] [Thread-189641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:56:03.580 [DEBUG] [Thread-189641] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:56:03.583 [DEBUG] [Thread-189641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:56:03.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:56:03.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:56:03.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:56:03.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:56:03.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:56:03.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:56:03.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:56:03.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:56:03.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:56:03.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.663647 -999.00  +14.90  25.83     46   +3.50 1 1 1 1 1   887    0 10.69 -20.10 ----- 24.2 25.8 164.6 35.6 17.9 -27.6 17.6 -26.6 18.9 -25.0 19.5 -27.5
2026-02-14T17:56:03.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:56:03.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:56:03.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.663647
2026-02-14T17:56:03.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:56:03.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:56:03.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:56:03.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:56:03.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:56:03.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:55:20', tmtdew=13.34, humidity=40.41, cloud=0.0, wind=31.44, temperature=15.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:55:39.101', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:56:03.608 [DEBUG] [Thread-189641] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:56:03.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T17:56:07.824 [DEBUG] [Thread-189644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:56:08.132 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:56:08.133 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:56:22.873 [DEBUG] [Thread-189645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:56:34.992 [DEBUG] [Thread-189646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:56:37.908 [DEBUG] [Thread-189647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:56:52.940 [DEBUG] [Thread-189648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:57:07.980 [DEBUG] [Thread-189649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:57:08.272 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:57:08.273 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:57:23.016 [DEBUG] [Thread-189650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:57:35.026 [DEBUG] [Thread-189651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:57:38.049 [DEBUG] [Thread-189652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:57:53.085 [DEBUG] [Thread-189653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:58:08.122 [DEBUG] [Thread-189654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:58:08.415 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:58:08.416 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:58:15.608 [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-14T17:58:23.161 [DEBUG] [Thread-189655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:58:35.068 [DEBUG] [Thread-189656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:58:38.193 [DEBUG] [Thread-189657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:58:45.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:58:45.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:58:45.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-14T17:58:47.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 58, 16), 13.42, 40.1, 0.0, 34.42, 15.19, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:58:47.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:58:16
2026-02-14T17:58:48.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:58:48.281 [DEBUG] [Thread-189658] [transport.py] [_log()] starting thread (client mode): 0xa2d7a1a0
2026-02-14T17:58:48.281 [DEBUG] [Thread-189658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:58:48.302 [DEBUG] [Thread-189658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:58:48.302 [INFO] [Thread-189658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:58:48.305 [DEBUG] [Thread-189658] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:58:48.305 [DEBUG] [Thread-189658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:58:48.305 [DEBUG] [Thread-189658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:58:48.305 [DEBUG] [Thread-189658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:58:48.305 [DEBUG] [Thread-189658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:58:48.305 [DEBUG] [Thread-189658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:58:48.305 [DEBUG] [Thread-189658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:58:48.305 [DEBUG] [Thread-189658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:58:48.305 [DEBUG] [Thread-189658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:58:48.305 [DEBUG] [Thread-189658] [transport.py] [_log()] client lang: <none>
2026-02-14T17:58:48.305 [DEBUG] [Thread-189658] [transport.py] [_log()] server lang: <none>
2026-02-14T17:58:48.305 [DEBUG] [Thread-189658] [transport.py] [_log()] kex follows: False
2026-02-14T17:58:48.305 [DEBUG] [Thread-189658] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:58:48.305 [DEBUG] [Thread-189658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:58:48.305 [DEBUG] [Thread-189658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:58:48.305 [DEBUG] [Thread-189658] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:58:48.305 [DEBUG] [Thread-189658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:58:48.305 [DEBUG] [Thread-189658] [transport.py] [_log()] Compression: none
2026-02-14T17:58:48.305 [DEBUG] [Thread-189658] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:58:48.321 [DEBUG] [Thread-189658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:58:48.322 [DEBUG] [Thread-189658] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:58:48.323 [DEBUG] [Thread-189658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:58:48.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:58:48.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:58:48.324 [DEBUG] [Thread-189658] [transport.py] [_log()] userauth is OK
2026-02-14T17:58:48.324 [DEBUG] [Thread-189658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:58:48.324 [DEBUG] [Thread-189658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:58:48.324 [DEBUG] [Thread-189658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:58:48.324 [DEBUG] [Thread-189658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:58:48.351 [INFO] [Thread-189658] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:58:48.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:58:48.950 [DEBUG] [Thread-189658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:58:48.950 [DEBUG] [Thread-189658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:58:48.951 [DEBUG] [Thread-189658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:58:48.992 [DEBUG] [Thread-189658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:58:48.992 [DEBUG] [Thread-189658] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:58:48.995 [DEBUG] [Thread-189658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:58:49.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:58:49.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:58:49.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:58:49.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:58:49.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:58:49.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:58:49.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:58:49.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:58:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:58:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.665383 -999.00  +15.10  22.31     46   +3.80 1 1 1 1 1   887    0 11.08 -14.19 ----- 18.0 22.3 168.0 36.6 17.9 -27.1 17.7 -27.2 19.1 -25.6 19.6 -27.7
2026-02-14T17:58:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:58:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:58:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.665383
2026-02-14T17:58:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:58:49.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:58:49.019 [DEBUG] [Thread-189658] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:58:49.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:58:49.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:58:49.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:58:49.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:58:16', tmtdew=13.42, humidity=40.1, cloud=0.0, wind=34.42, temperature=15.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:58:09.091', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:58:49.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-14T17:58:49.116 [DEBUG] [Thread-189661] [transport.py] [_log()] starting thread (client mode): 0xa2dc2cb0
2026-02-14T17:58:49.116 [DEBUG] [Thread-189661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:58:49.131 [DEBUG] [Thread-189661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:58:49.131 [INFO] [Thread-189661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:58:49.139 [DEBUG] [Thread-189661] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:58:49.139 [DEBUG] [Thread-189661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:58:49.139 [DEBUG] [Thread-189661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:58:49.139 [DEBUG] [Thread-189661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:58:49.139 [DEBUG] [Thread-189661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:58:49.139 [DEBUG] [Thread-189661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:58:49.139 [DEBUG] [Thread-189661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:58:49.139 [DEBUG] [Thread-189661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:58:49.139 [DEBUG] [Thread-189661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:58:49.139 [DEBUG] [Thread-189661] [transport.py] [_log()] client lang: <none>
2026-02-14T17:58:49.139 [DEBUG] [Thread-189661] [transport.py] [_log()] server lang: <none>
2026-02-14T17:58:49.139 [DEBUG] [Thread-189661] [transport.py] [_log()] kex follows: False
2026-02-14T17:58:49.139 [DEBUG] [Thread-189661] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:58:49.140 [DEBUG] [Thread-189661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:58:49.140 [DEBUG] [Thread-189661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:58:49.140 [DEBUG] [Thread-189661] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:58:49.140 [DEBUG] [Thread-189661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:58:49.140 [DEBUG] [Thread-189661] [transport.py] [_log()] Compression: none
2026-02-14T17:58:49.140 [DEBUG] [Thread-189661] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:58:49.199 [DEBUG] [Thread-189661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:58:49.200 [DEBUG] [Thread-189661] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:58:49.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:58:49.201 [DEBUG] [Thread-189661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:58:49.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:58:49.255 [DEBUG] [Thread-189661] [transport.py] [_log()] userauth is OK
2026-02-14T17:58:49.255 [DEBUG] [Thread-189661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:58:49.255 [DEBUG] [Thread-189661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:58:49.255 [DEBUG] [Thread-189661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:58:49.255 [DEBUG] [Thread-189661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:58:49.274 [INFO] [Thread-189661] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:58:49.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T17:58:49.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:58:50.108 [DEBUG] [Thread-189661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:58:50.108 [DEBUG] [Thread-189661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:58:50.156 [DEBUG] [Thread-189661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:58:50.156 [DEBUG] [Thread-189661] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:58:50.165 [DEBUG] [Thread-189661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:58:50.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:58:50.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-14T17:58:50.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-14T17:58:50.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:58:50.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:58:50.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:58:50.200 [DEBUG] [Thread-189661] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:58:53.228 [DEBUG] [Thread-189663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:59:08.280 [DEBUG] [Thread-189664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:59:08.555 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:59:08.556 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:59:20.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:59:20.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:59:20.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T17:59:22.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 58, 51), 13.3, 40.68, 0.0, 28.6, 15.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:59:22.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:58:51
2026-02-14T17:59:22.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:59:22.651 [DEBUG] [Thread-189665] [transport.py] [_log()] starting thread (client mode): 0xa57d5cc0
2026-02-14T17:59:22.651 [DEBUG] [Thread-189665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:59:22.672 [DEBUG] [Thread-189665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:59:22.672 [INFO] [Thread-189665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:59:22.675 [DEBUG] [Thread-189665] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:59:22.675 [DEBUG] [Thread-189665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:59:22.675 [DEBUG] [Thread-189665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:59:22.675 [DEBUG] [Thread-189665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:59:22.675 [DEBUG] [Thread-189665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:59:22.675 [DEBUG] [Thread-189665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:59:22.675 [DEBUG] [Thread-189665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:59:22.675 [DEBUG] [Thread-189665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:59:22.675 [DEBUG] [Thread-189665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:59:22.675 [DEBUG] [Thread-189665] [transport.py] [_log()] client lang: <none>
2026-02-14T17:59:22.675 [DEBUG] [Thread-189665] [transport.py] [_log()] server lang: <none>
2026-02-14T17:59:22.675 [DEBUG] [Thread-189665] [transport.py] [_log()] kex follows: False
2026-02-14T17:59:22.675 [DEBUG] [Thread-189665] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:59:22.675 [DEBUG] [Thread-189665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:59:22.675 [DEBUG] [Thread-189665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:59:22.675 [DEBUG] [Thread-189665] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:59:22.675 [DEBUG] [Thread-189665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:59:22.675 [DEBUG] [Thread-189665] [transport.py] [_log()] Compression: none
2026-02-14T17:59:22.675 [DEBUG] [Thread-189665] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:59:22.692 [DEBUG] [Thread-189665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:59:22.693 [DEBUG] [Thread-189665] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:59:22.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:59:22.694 [DEBUG] [Thread-189665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:59:22.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:59:22.736 [DEBUG] [Thread-189665] [transport.py] [_log()] userauth is OK
2026-02-14T17:59:22.737 [DEBUG] [Thread-189665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:59:22.737 [DEBUG] [Thread-189665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:59:22.737 [DEBUG] [Thread-189665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:59:22.737 [DEBUG] [Thread-189665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:59:22.772 [INFO] [Thread-189665] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:59:22.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:59:23.316 [DEBUG] [Thread-189667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:59:23.389 [DEBUG] [Thread-189665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:59:23.389 [DEBUG] [Thread-189665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:59:23.390 [DEBUG] [Thread-189665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:59:23.430 [DEBUG] [Thread-189665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:59:23.430 [DEBUG] [Thread-189665] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:59:23.433 [DEBUG] [Thread-189665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:59:23.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:59:23.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:59:23.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:59:23.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:59:23.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:59:23.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:59:23.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:59:23.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:59:23.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:59:23.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.666077 -999.00  +14.90  29.72     47   +3.70 1 1 1 1 1   887    0 11.15 -10.28 ----- 24.1 29.7 185.2 39.1 17.9 -27.1 17.4 -29.5 18.9 -27.1 19.4 -28.6
2026-02-14T17:59:23.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:59:23.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:59:23.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.666077
2026-02-14T17:59:23.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:59:23.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:59:23.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:59:23.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:59:23.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:59:23.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:58:51', tmtdew=13.3, humidity=40.68, cloud=0.0, wind=28.6, temperature=15.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:59:09.053', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:59:23.459 [DEBUG] [Thread-189665] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:59:23.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-14T17:59:23.553 [DEBUG] [Thread-189669] [transport.py] [_log()] starting thread (client mode): 0xa57d4280
2026-02-14T17:59:23.553 [DEBUG] [Thread-189669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:59:23.568 [DEBUG] [Thread-189669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:59:23.568 [INFO] [Thread-189669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:59:23.575 [DEBUG] [Thread-189669] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:59:23.575 [DEBUG] [Thread-189669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:59:23.575 [DEBUG] [Thread-189669] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:59:23.575 [DEBUG] [Thread-189669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:59:23.575 [DEBUG] [Thread-189669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:59:23.575 [DEBUG] [Thread-189669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:59:23.575 [DEBUG] [Thread-189669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:59:23.575 [DEBUG] [Thread-189669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:59:23.576 [DEBUG] [Thread-189669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:59:23.576 [DEBUG] [Thread-189669] [transport.py] [_log()] client lang: <none>
2026-02-14T17:59:23.576 [DEBUG] [Thread-189669] [transport.py] [_log()] server lang: <none>
2026-02-14T17:59:23.576 [DEBUG] [Thread-189669] [transport.py] [_log()] kex follows: False
2026-02-14T17:59:23.576 [DEBUG] [Thread-189669] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:59:23.576 [DEBUG] [Thread-189669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:59:23.576 [DEBUG] [Thread-189669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:59:23.576 [DEBUG] [Thread-189669] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:59:23.576 [DEBUG] [Thread-189669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:59:23.576 [DEBUG] [Thread-189669] [transport.py] [_log()] Compression: none
2026-02-14T17:59:23.576 [DEBUG] [Thread-189669] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:59:23.635 [DEBUG] [Thread-189669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:59:23.635 [DEBUG] [Thread-189669] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:59:23.636 [DEBUG] [Thread-189669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:59:23.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:59:23.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:59:23.691 [DEBUG] [Thread-189669] [transport.py] [_log()] userauth is OK
2026-02-14T17:59:23.691 [DEBUG] [Thread-189669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:59:23.691 [DEBUG] [Thread-189669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:59:23.691 [DEBUG] [Thread-189669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:59:23.691 [DEBUG] [Thread-189669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:59:23.709 [INFO] [Thread-189669] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:59:23.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-14T17:59:23.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:59:24.528 [DEBUG] [Thread-189669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:59:24.528 [DEBUG] [Thread-189669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:59:24.576 [DEBUG] [Thread-189669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:59:24.576 [DEBUG] [Thread-189669] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:59:24.584 [DEBUG] [Thread-189669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:59:24.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:59:24.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-14T17:59:24.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T17:59:24.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:59:24.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:59:24.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:59:24.618 [DEBUG] [Thread-189669] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:59:35.105 [DEBUG] [Thread-189671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:59:38.352 [DEBUG] [Thread-189672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:59:53.404 [DEBUG] [Thread-189673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T17:59:54.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T17:59:54.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T17:59:54.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T17:59:56.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 17, 59, 26), 13.35, 40.55, 0.0, 32.46, 15.31, 0, 0, 0, 2, 0, 0),)
2026-02-14T17:59:56.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 17:59:26
2026-02-14T17:59:56.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T17:59:57.081 [DEBUG] [Thread-189674] [transport.py] [_log()] starting thread (client mode): 0xa57d5360
2026-02-14T17:59:57.082 [DEBUG] [Thread-189674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:59:57.101 [DEBUG] [Thread-189674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T17:59:57.101 [INFO] [Thread-189674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T17:59:57.103 [DEBUG] [Thread-189674] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:59:57.103 [DEBUG] [Thread-189674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T17:59:57.103 [DEBUG] [Thread-189674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:59:57.103 [DEBUG] [Thread-189674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:59:57.103 [DEBUG] [Thread-189674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:59:57.103 [DEBUG] [Thread-189674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:59:57.103 [DEBUG] [Thread-189674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:59:57.103 [DEBUG] [Thread-189674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:59:57.103 [DEBUG] [Thread-189674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:59:57.103 [DEBUG] [Thread-189674] [transport.py] [_log()] client lang: <none>
2026-02-14T17:59:57.103 [DEBUG] [Thread-189674] [transport.py] [_log()] server lang: <none>
2026-02-14T17:59:57.103 [DEBUG] [Thread-189674] [transport.py] [_log()] kex follows: False
2026-02-14T17:59:57.103 [DEBUG] [Thread-189674] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:59:57.103 [DEBUG] [Thread-189674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:59:57.103 [DEBUG] [Thread-189674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:59:57.103 [DEBUG] [Thread-189674] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:59:57.103 [DEBUG] [Thread-189674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:59:57.103 [DEBUG] [Thread-189674] [transport.py] [_log()] Compression: none
2026-02-14T17:59:57.103 [DEBUG] [Thread-189674] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:59:57.114 [DEBUG] [Thread-189674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:59:57.115 [DEBUG] [Thread-189674] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:59:57.115 [DEBUG] [Thread-189674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T17:59:57.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T17:59:57.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:59:57.117 [DEBUG] [Thread-189674] [transport.py] [_log()] userauth is OK
2026-02-14T17:59:57.117 [DEBUG] [Thread-189674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:59:57.117 [DEBUG] [Thread-189674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:59:57.117 [DEBUG] [Thread-189674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T17:59:57.117 [DEBUG] [Thread-189674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:59:57.141 [INFO] [Thread-189674] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:59:57.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:59:57.800 [DEBUG] [Thread-189674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:59:57.800 [DEBUG] [Thread-189674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:59:57.801 [DEBUG] [Thread-189674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T17:59:57.841 [DEBUG] [Thread-189674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:59:57.842 [DEBUG] [Thread-189674] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:59:57.845 [DEBUG] [Thread-189674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:59:57.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:59:57.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T17:59:57.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T17:59:57.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T17:59:57.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:59:57.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T17:59:57.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:59:57.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:59:57.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T17:59:57.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.666424 -999.00  +14.70  28.17     47   +3.70 1 1 1 1 1   887    0 11.21 -9.13 ----- 27.1 28.2 185.2 33.8 17.8 -28.1 17.4 -28.7 18.9 -26.1 19.4 -28.3
2026-02-14T17:59:57.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T17:59:57.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T17:59:57.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.666424
2026-02-14T17:59:57.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T17:59:57.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T17:59:57.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T17:59:57.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T17:59:57.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T17:59:57.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T17:59:26', tmtdew=13.35, humidity=40.55, cloud=0.0, wind=32.46, temperature=15.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T15:59:39.034', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T17:59:57.879 [DEBUG] [Thread-189674] [transport.py] [_log()] EOF in transport thread
2026-02-14T17:59:57.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-14T17:59:57.973 [DEBUG] [Thread-189677] [transport.py] [_log()] starting thread (client mode): 0xa57d76a0
2026-02-14T17:59:57.974 [DEBUG] [Thread-189677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T17:59:57.989 [DEBUG] [Thread-189677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T17:59:57.989 [INFO] [Thread-189677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T17:59:57.996 [DEBUG] [Thread-189677] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T17:59:57.997 [DEBUG] [Thread-189677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T17:59:57.997 [DEBUG] [Thread-189677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T17:59:57.997 [DEBUG] [Thread-189677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:59:57.997 [DEBUG] [Thread-189677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T17:59:57.997 [DEBUG] [Thread-189677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:59:57.997 [DEBUG] [Thread-189677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T17:59:57.997 [DEBUG] [Thread-189677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T17:59:57.997 [DEBUG] [Thread-189677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T17:59:57.997 [DEBUG] [Thread-189677] [transport.py] [_log()] client lang: <none>
2026-02-14T17:59:57.997 [DEBUG] [Thread-189677] [transport.py] [_log()] server lang: <none>
2026-02-14T17:59:57.997 [DEBUG] [Thread-189677] [transport.py] [_log()] kex follows: False
2026-02-14T17:59:57.997 [DEBUG] [Thread-189677] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T17:59:57.997 [DEBUG] [Thread-189677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T17:59:57.997 [DEBUG] [Thread-189677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T17:59:57.997 [DEBUG] [Thread-189677] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T17:59:57.997 [DEBUG] [Thread-189677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T17:59:57.997 [DEBUG] [Thread-189677] [transport.py] [_log()] Compression: none
2026-02-14T17:59:57.997 [DEBUG] [Thread-189677] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T17:59:58.055 [DEBUG] [Thread-189677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T17:59:58.055 [DEBUG] [Thread-189677] [transport.py] [_log()] Switch to new keys ...
2026-02-14T17:59:58.056 [DEBUG] [Thread-189677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T17:59:58.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T17:59:58.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T17:59:58.111 [DEBUG] [Thread-189677] [transport.py] [_log()] userauth is OK
2026-02-14T17:59:58.111 [DEBUG] [Thread-189677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T17:59:58.111 [DEBUG] [Thread-189677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T17:59:58.111 [DEBUG] [Thread-189677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T17:59:58.112 [DEBUG] [Thread-189677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T17:59:58.135 [INFO] [Thread-189677] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T17:59:58.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-14T17:59:58.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T17:59:58.967 [DEBUG] [Thread-189677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T17:59:58.967 [DEBUG] [Thread-189677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T17:59:59.018 [DEBUG] [Thread-189677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T17:59:59.018 [DEBUG] [Thread-189677] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T17:59:59.030 [DEBUG] [Thread-189677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T17:59:59.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T17:59:59.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T17:59:59.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-14T17:59:59.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T17:59:59.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T17:59:59.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T17:59:59.073 [DEBUG] [Thread-189677] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:00:08.442 [DEBUG] [Thread-189679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:00:08.698 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:00:08.699 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:00:23.496 [DEBUG] [Thread-189680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:00:29.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:00:29.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:00:29.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-14T18:00:30.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 0, 1), 13.35, 40.53, 0.0, 31.14, 15.28, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:00:30.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:00:01
2026-02-14T18:00:31.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:00:31.432 [DEBUG] [Thread-189681] [transport.py] [_log()] starting thread (client mode): 0xa57d5690
2026-02-14T18:00:31.432 [DEBUG] [Thread-189681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:00:31.445 [DEBUG] [Thread-189681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:00:31.445 [INFO] [Thread-189681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:00:31.448 [DEBUG] [Thread-189681] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:00:31.449 [DEBUG] [Thread-189681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:00:31.449 [DEBUG] [Thread-189681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:00:31.449 [DEBUG] [Thread-189681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:00:31.449 [DEBUG] [Thread-189681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:00:31.449 [DEBUG] [Thread-189681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:00:31.449 [DEBUG] [Thread-189681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:00:31.449 [DEBUG] [Thread-189681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:00:31.449 [DEBUG] [Thread-189681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:00:31.449 [DEBUG] [Thread-189681] [transport.py] [_log()] client lang: <none>
2026-02-14T18:00:31.449 [DEBUG] [Thread-189681] [transport.py] [_log()] server lang: <none>
2026-02-14T18:00:31.449 [DEBUG] [Thread-189681] [transport.py] [_log()] kex follows: False
2026-02-14T18:00:31.449 [DEBUG] [Thread-189681] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:00:31.449 [DEBUG] [Thread-189681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:00:31.449 [DEBUG] [Thread-189681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:00:31.449 [DEBUG] [Thread-189681] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:00:31.449 [DEBUG] [Thread-189681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:00:31.449 [DEBUG] [Thread-189681] [transport.py] [_log()] Compression: none
2026-02-14T18:00:31.449 [DEBUG] [Thread-189681] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:00:31.466 [DEBUG] [Thread-189681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:00:31.467 [DEBUG] [Thread-189681] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:00:31.468 [DEBUG] [Thread-189681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:00:31.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:00:31.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:00:31.471 [DEBUG] [Thread-189681] [transport.py] [_log()] userauth is OK
2026-02-14T18:00:31.471 [DEBUG] [Thread-189681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:00:31.471 [DEBUG] [Thread-189681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:00:31.471 [DEBUG] [Thread-189681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:00:31.471 [DEBUG] [Thread-189681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:00:31.485 [INFO] [Thread-189681] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:00:31.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:00:32.141 [DEBUG] [Thread-189681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:00:32.141 [DEBUG] [Thread-189681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:00:32.141 [DEBUG] [Thread-189681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:00:32.182 [DEBUG] [Thread-189681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:00:32.183 [DEBUG] [Thread-189681] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:00:32.186 [DEBUG] [Thread-189681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:00:32.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:00:32.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:00:32.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:00:32.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:00:32.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:00:32.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:00:32.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:00:32.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:00:32.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:00:32.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.666771 -999.00  +14.70  33.00     47   +3.60 1 1 2 1 1   887    0 10.89 -10.34 ----- 25.5 33.0 183.6 37.9 17.7 -27.6 17.4 -28.8 18.9 -25.4 19.3 -28.0
2026-02-14T18:00:32.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:00:32.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:00:32.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.666771
2026-02-14T18:00:32.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:00:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:00:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:00:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:00:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:00:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:00:01', tmtdew=13.35, humidity=40.53, cloud=0.0, wind=31.14, temperature=15.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:00:09.014', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:00:32.212 [DEBUG] [Thread-189681] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:00:32.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-14T18:00:32.322 [DEBUG] [Thread-189684] [transport.py] [_log()] starting thread (client mode): 0xa57d5900
2026-02-14T18:00:32.322 [DEBUG] [Thread-189684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:00:32.337 [DEBUG] [Thread-189684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:00:32.337 [INFO] [Thread-189684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:00:32.344 [DEBUG] [Thread-189684] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:00:32.345 [DEBUG] [Thread-189684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:00:32.345 [DEBUG] [Thread-189684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:00:32.345 [DEBUG] [Thread-189684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:00:32.345 [DEBUG] [Thread-189684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:00:32.345 [DEBUG] [Thread-189684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:00:32.345 [DEBUG] [Thread-189684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:00:32.345 [DEBUG] [Thread-189684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:00:32.345 [DEBUG] [Thread-189684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:00:32.346 [DEBUG] [Thread-189684] [transport.py] [_log()] client lang: <none>
2026-02-14T18:00:32.346 [DEBUG] [Thread-189684] [transport.py] [_log()] server lang: <none>
2026-02-14T18:00:32.346 [DEBUG] [Thread-189684] [transport.py] [_log()] kex follows: False
2026-02-14T18:00:32.346 [DEBUG] [Thread-189684] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:00:32.346 [DEBUG] [Thread-189684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:00:32.346 [DEBUG] [Thread-189684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:00:32.346 [DEBUG] [Thread-189684] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:00:32.346 [DEBUG] [Thread-189684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:00:32.347 [DEBUG] [Thread-189684] [transport.py] [_log()] Compression: none
2026-02-14T18:00:32.347 [DEBUG] [Thread-189684] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:00:32.403 [DEBUG] [Thread-189684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:00:32.404 [DEBUG] [Thread-189684] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:00:32.404 [DEBUG] [Thread-189684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:00:32.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:00:32.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:00:32.459 [DEBUG] [Thread-189684] [transport.py] [_log()] userauth is OK
2026-02-14T18:00:32.459 [DEBUG] [Thread-189684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:00:32.459 [DEBUG] [Thread-189684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:00:32.460 [DEBUG] [Thread-189684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:00:32.460 [DEBUG] [Thread-189684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:00:32.478 [INFO] [Thread-189684] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:00:32.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-14T18:00:32.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:00:33.305 [DEBUG] [Thread-189684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:00:33.306 [DEBUG] [Thread-189684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:00:33.353 [DEBUG] [Thread-189684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:00:33.353 [DEBUG] [Thread-189684] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:00:33.362 [DEBUG] [Thread-189684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:00:33.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:00:33.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-14T18:00:33.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:00:33.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:00:33.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:00:33.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:00:33.395 [DEBUG] [Thread-189684] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:00:35.150 [DEBUG] [Thread-189686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:00:38.535 [DEBUG] [Thread-189687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:00:53.596 [DEBUG] [Thread-189688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:01:03.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:01:03.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:01:03.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:01:05.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 0, 37), 14.35, 37.9, 0.0, 36.73, 16.15, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:01:05.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:00:37
2026-02-14T18:01:05.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:01:05.775 [DEBUG] [Thread-189689] [transport.py] [_log()] starting thread (client mode): 0xa57594e0
2026-02-14T18:01:05.775 [DEBUG] [Thread-189689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:01:05.795 [DEBUG] [Thread-189689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:01:05.796 [INFO] [Thread-189689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:01:05.797 [DEBUG] [Thread-189689] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:01:05.797 [DEBUG] [Thread-189689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:01:05.797 [DEBUG] [Thread-189689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:01:05.797 [DEBUG] [Thread-189689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:01:05.797 [DEBUG] [Thread-189689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:01:05.797 [DEBUG] [Thread-189689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:01:05.797 [DEBUG] [Thread-189689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:01:05.797 [DEBUG] [Thread-189689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:01:05.797 [DEBUG] [Thread-189689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:01:05.797 [DEBUG] [Thread-189689] [transport.py] [_log()] client lang: <none>
2026-02-14T18:01:05.797 [DEBUG] [Thread-189689] [transport.py] [_log()] server lang: <none>
2026-02-14T18:01:05.797 [DEBUG] [Thread-189689] [transport.py] [_log()] kex follows: False
2026-02-14T18:01:05.798 [DEBUG] [Thread-189689] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:01:05.798 [DEBUG] [Thread-189689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:01:05.798 [DEBUG] [Thread-189689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:01:05.798 [DEBUG] [Thread-189689] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:01:05.798 [DEBUG] [Thread-189689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:01:05.798 [DEBUG] [Thread-189689] [transport.py] [_log()] Compression: none
2026-02-14T18:01:05.798 [DEBUG] [Thread-189689] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:01:05.807 [DEBUG] [Thread-189689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:01:05.808 [DEBUG] [Thread-189689] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:01:05.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:01:05.810 [DEBUG] [Thread-189689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:01:05.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:01:05.812 [DEBUG] [Thread-189689] [transport.py] [_log()] userauth is OK
2026-02-14T18:01:05.812 [DEBUG] [Thread-189689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:01:05.812 [DEBUG] [Thread-189689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:01:05.812 [DEBUG] [Thread-189689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:01:05.813 [DEBUG] [Thread-189689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:01:05.844 [INFO] [Thread-189689] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:01:05.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:01:06.518 [DEBUG] [Thread-189689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:01:06.518 [DEBUG] [Thread-189689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:01:06.519 [DEBUG] [Thread-189689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:01:06.560 [DEBUG] [Thread-189689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:01:06.560 [DEBUG] [Thread-189689] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:01:06.563 [DEBUG] [Thread-189689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:01:06.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:01:06.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:01:06.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:01:06.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:01:06.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:01:06.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:01:06.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:01:06.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:01:06.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:01:06.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.667119 -999.00  +14.70  25.31     47   +3.50 1 1 1 1 1   887    0 10.92 -11.11 ----- 21.4 25.3 169.4 43.8 17.7 -27.7 17.5 -26.3 18.9 -25.2 19.4 -27.6
2026-02-14T18:01:06.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:01:06.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:01:06.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.667119
2026-02-14T18:01:06.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:01:06.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:01:06.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:01:06.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:01:06.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:01:06.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:00:37', tmtdew=14.35, humidity=37.9, cloud=0.0, wind=36.73, temperature=16.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:00:39.082', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:01:06.590 [DEBUG] [Thread-189689] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:01:06.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-14T18:01:06.686 [DEBUG] [Thread-189692] [transport.py] [_log()] starting thread (client mode): 0xa575ad70
2026-02-14T18:01:06.686 [DEBUG] [Thread-189692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:01:06.701 [DEBUG] [Thread-189692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:01:06.701 [INFO] [Thread-189692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:01:06.709 [DEBUG] [Thread-189692] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:01:06.709 [DEBUG] [Thread-189692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:01:06.709 [DEBUG] [Thread-189692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:01:06.709 [DEBUG] [Thread-189692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:01:06.709 [DEBUG] [Thread-189692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:01:06.709 [DEBUG] [Thread-189692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:01:06.709 [DEBUG] [Thread-189692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:01:06.709 [DEBUG] [Thread-189692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:01:06.709 [DEBUG] [Thread-189692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:01:06.709 [DEBUG] [Thread-189692] [transport.py] [_log()] client lang: <none>
2026-02-14T18:01:06.709 [DEBUG] [Thread-189692] [transport.py] [_log()] server lang: <none>
2026-02-14T18:01:06.709 [DEBUG] [Thread-189692] [transport.py] [_log()] kex follows: False
2026-02-14T18:01:06.709 [DEBUG] [Thread-189692] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:01:06.709 [DEBUG] [Thread-189692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:01:06.710 [DEBUG] [Thread-189692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:01:06.710 [DEBUG] [Thread-189692] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:01:06.710 [DEBUG] [Thread-189692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:01:06.710 [DEBUG] [Thread-189692] [transport.py] [_log()] Compression: none
2026-02-14T18:01:06.710 [DEBUG] [Thread-189692] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:01:06.767 [DEBUG] [Thread-189692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:01:06.768 [DEBUG] [Thread-189692] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:01:06.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:01:06.769 [DEBUG] [Thread-189692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:01:06.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:01:06.823 [DEBUG] [Thread-189692] [transport.py] [_log()] userauth is OK
2026-02-14T18:01:06.823 [DEBUG] [Thread-189692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:01:06.823 [DEBUG] [Thread-189692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:01:06.823 [DEBUG] [Thread-189692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:01:06.824 [DEBUG] [Thread-189692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:01:06.844 [INFO] [Thread-189692] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:01:06.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-14T18:01:06.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:01:07.671 [DEBUG] [Thread-189692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:01:07.671 [DEBUG] [Thread-189692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:01:07.719 [DEBUG] [Thread-189692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:01:07.719 [DEBUG] [Thread-189692] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:01:07.727 [DEBUG] [Thread-189692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:01:07.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:01:07.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:01:07.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-14T18:01:07.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:01:07.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:01:07.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:01:07.761 [DEBUG] [Thread-189692] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:01:08.630 [DEBUG] [Thread-189694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:01:08.841 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:01:08.843 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:01:23.669 [DEBUG] [Thread-189695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:01:35.193 [DEBUG] [Thread-189696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:01:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:01:37.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:01:37.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-14T18:01:38.704 [DEBUG] [Thread-189697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:01:39.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 1, 12), 13.28, 40.82, 0.0, 39.56, 15.04, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:01:39.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:01:12
2026-02-14T18:01:40.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:01:40.399 [DEBUG] [Thread-189698] [transport.py] [_log()] starting thread (client mode): 0xa2dc1c30
2026-02-14T18:01:40.400 [DEBUG] [Thread-189698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:01:40.419 [DEBUG] [Thread-189698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:01:40.419 [INFO] [Thread-189698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:01:40.423 [DEBUG] [Thread-189698] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:01:40.423 [DEBUG] [Thread-189698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:01:40.423 [DEBUG] [Thread-189698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:01:40.423 [DEBUG] [Thread-189698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:01:40.423 [DEBUG] [Thread-189698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:01:40.423 [DEBUG] [Thread-189698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:01:40.423 [DEBUG] [Thread-189698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:01:40.423 [DEBUG] [Thread-189698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:01:40.423 [DEBUG] [Thread-189698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:01:40.423 [DEBUG] [Thread-189698] [transport.py] [_log()] client lang: <none>
2026-02-14T18:01:40.423 [DEBUG] [Thread-189698] [transport.py] [_log()] server lang: <none>
2026-02-14T18:01:40.423 [DEBUG] [Thread-189698] [transport.py] [_log()] kex follows: False
2026-02-14T18:01:40.423 [DEBUG] [Thread-189698] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:01:40.423 [DEBUG] [Thread-189698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:01:40.423 [DEBUG] [Thread-189698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:01:40.424 [DEBUG] [Thread-189698] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:01:40.424 [DEBUG] [Thread-189698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:01:40.424 [DEBUG] [Thread-189698] [transport.py] [_log()] Compression: none
2026-02-14T18:01:40.424 [DEBUG] [Thread-189698] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:01:40.440 [DEBUG] [Thread-189698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:01:40.441 [DEBUG] [Thread-189698] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:01:40.441 [DEBUG] [Thread-189698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:01:40.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:01:40.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:01:40.443 [DEBUG] [Thread-189698] [transport.py] [_log()] userauth is OK
2026-02-14T18:01:40.443 [DEBUG] [Thread-189698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:01:40.444 [DEBUG] [Thread-189698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:01:40.444 [DEBUG] [Thread-189698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:01:40.444 [DEBUG] [Thread-189698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:01:40.468 [INFO] [Thread-189698] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:01:40.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:01:41.099 [DEBUG] [Thread-189698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:01:41.099 [DEBUG] [Thread-189698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:01:41.099 [DEBUG] [Thread-189698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:01:41.140 [DEBUG] [Thread-189698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:01:41.140 [DEBUG] [Thread-189698] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:01:41.142 [DEBUG] [Thread-189698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:01:41.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:01:41.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:01:41.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:01:41.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:01:41.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:01:41.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:01:41.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:01:41.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:01:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:01:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.667466 -999.00  +14.80  28.52     46   +3.60 1 1 1 1 1   887    0 10.91 -11.18 ----- 24.2 28.5 158.2 35.1 17.7 -27.0 17.6 -26.0 18.9 -25.9 19.3 -27.7
2026-02-14T18:01:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:01:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:01:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.667466
2026-02-14T18:01:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:01:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:01:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:01:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:01:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:01:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:01:12', tmtdew=13.28, humidity=40.82, cloud=0.0, wind=39.56, temperature=15.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:01:09.062', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:01:41.163 [DEBUG] [Thread-189698] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:01:41.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-14T18:01:41.246 [DEBUG] [Thread-189701] [transport.py] [_log()] starting thread (client mode): 0xa57594e0
2026-02-14T18:01:41.246 [DEBUG] [Thread-189701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:01:41.260 [DEBUG] [Thread-189701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:01:41.260 [INFO] [Thread-189701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:01:41.268 [DEBUG] [Thread-189701] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:01:41.268 [DEBUG] [Thread-189701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:01:41.268 [DEBUG] [Thread-189701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:01:41.268 [DEBUG] [Thread-189701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:01:41.268 [DEBUG] [Thread-189701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:01:41.268 [DEBUG] [Thread-189701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:01:41.268 [DEBUG] [Thread-189701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:01:41.268 [DEBUG] [Thread-189701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:01:41.268 [DEBUG] [Thread-189701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:01:41.268 [DEBUG] [Thread-189701] [transport.py] [_log()] client lang: <none>
2026-02-14T18:01:41.268 [DEBUG] [Thread-189701] [transport.py] [_log()] server lang: <none>
2026-02-14T18:01:41.268 [DEBUG] [Thread-189701] [transport.py] [_log()] kex follows: False
2026-02-14T18:01:41.268 [DEBUG] [Thread-189701] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:01:41.268 [DEBUG] [Thread-189701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:01:41.268 [DEBUG] [Thread-189701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:01:41.268 [DEBUG] [Thread-189701] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:01:41.268 [DEBUG] [Thread-189701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:01:41.268 [DEBUG] [Thread-189701] [transport.py] [_log()] Compression: none
2026-02-14T18:01:41.268 [DEBUG] [Thread-189701] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:01:41.325 [DEBUG] [Thread-189701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:01:41.325 [DEBUG] [Thread-189701] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:01:41.326 [DEBUG] [Thread-189701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:01:41.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:01:41.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:01:41.382 [DEBUG] [Thread-189701] [transport.py] [_log()] userauth is OK
2026-02-14T18:01:41.382 [DEBUG] [Thread-189701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:01:41.383 [DEBUG] [Thread-189701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:01:41.383 [DEBUG] [Thread-189701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:01:41.383 [DEBUG] [Thread-189701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:01:41.400 [INFO] [Thread-189701] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:01:41.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-14T18:01:41.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:01:42.217 [DEBUG] [Thread-189701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:01:42.217 [DEBUG] [Thread-189701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:01:42.265 [DEBUG] [Thread-189701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:01:42.265 [DEBUG] [Thread-189701] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:01:42.274 [DEBUG] [Thread-189701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:01:42.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:01:42.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-14T18:01:42.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-14T18:01:42.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:01:42.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:01:42.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:01:42.309 [DEBUG] [Thread-189701] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:01:53.737 [DEBUG] [Thread-189703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:02:08.801 [DEBUG] [Thread-189704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:02:08.987 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:02:08.988 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:02:12.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:02:12.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:02:12.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-14T18:02:14.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 1, 47), 13.37, 40.6, 0.0, 40.17, 15.18, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:02:14.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:01:47
2026-02-14T18:02:14.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:02:14.676 [DEBUG] [Thread-189705] [transport.py] [_log()] starting thread (client mode): 0xa2d7a7a0
2026-02-14T18:02:14.677 [DEBUG] [Thread-189705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:02:14.697 [DEBUG] [Thread-189705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:02:14.697 [INFO] [Thread-189705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:02:14.700 [DEBUG] [Thread-189705] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:02:14.700 [DEBUG] [Thread-189705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:02:14.701 [DEBUG] [Thread-189705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:02:14.701 [DEBUG] [Thread-189705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:02:14.701 [DEBUG] [Thread-189705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:02:14.701 [DEBUG] [Thread-189705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:02:14.701 [DEBUG] [Thread-189705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:02:14.701 [DEBUG] [Thread-189705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:02:14.701 [DEBUG] [Thread-189705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:02:14.701 [DEBUG] [Thread-189705] [transport.py] [_log()] client lang: <none>
2026-02-14T18:02:14.701 [DEBUG] [Thread-189705] [transport.py] [_log()] server lang: <none>
2026-02-14T18:02:14.701 [DEBUG] [Thread-189705] [transport.py] [_log()] kex follows: False
2026-02-14T18:02:14.701 [DEBUG] [Thread-189705] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:02:14.701 [DEBUG] [Thread-189705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:02:14.701 [DEBUG] [Thread-189705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:02:14.701 [DEBUG] [Thread-189705] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:02:14.701 [DEBUG] [Thread-189705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:02:14.701 [DEBUG] [Thread-189705] [transport.py] [_log()] Compression: none
2026-02-14T18:02:14.701 [DEBUG] [Thread-189705] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:02:14.719 [DEBUG] [Thread-189705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:02:14.719 [DEBUG] [Thread-189705] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:02:14.720 [DEBUG] [Thread-189705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:02:14.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:02:14.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:02:14.721 [DEBUG] [Thread-189705] [transport.py] [_log()] userauth is OK
2026-02-14T18:02:14.722 [DEBUG] [Thread-189705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:02:14.722 [DEBUG] [Thread-189705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:02:14.722 [DEBUG] [Thread-189705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:02:14.722 [DEBUG] [Thread-189705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:02:14.754 [INFO] [Thread-189705] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:02:14.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:02:15.365 [DEBUG] [Thread-189705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:02:15.366 [DEBUG] [Thread-189705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:02:15.366 [DEBUG] [Thread-189705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:02:15.407 [DEBUG] [Thread-189705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:02:15.408 [DEBUG] [Thread-189705] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:02:15.411 [DEBUG] [Thread-189705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:02:15.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:02:15.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:02:15.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:02:15.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:02:15.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:02:15.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:02:15.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:02:15.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:02:15.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:02:15.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.667813 -999.00  +14.90  25.13     46   +3.50 1 1 1 1 1   887    0 10.85 -12.16 ----- 21.6 25.1 163.0 40.8 17.7 -27.6 17.6 -25.9 18.9 -25.0 19.4 -27.3
2026-02-14T18:02:15.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:02:15.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:02:15.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.667813
2026-02-14T18:02:15.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:02:15.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:02:15.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:02:15.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:02:15.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:02:15.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:01:47', tmtdew=13.37, humidity=40.6, cloud=0.0, wind=40.17, temperature=15.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:01:39.043', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:02:15.438 [DEBUG] [Thread-189705] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:02:15.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-14T18:02:15.532 [DEBUG] [Thread-189708] [transport.py] [_log()] starting thread (client mode): 0xa57728f0
2026-02-14T18:02:15.533 [DEBUG] [Thread-189708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:02:15.547 [DEBUG] [Thread-189708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:02:15.547 [INFO] [Thread-189708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:02:15.554 [DEBUG] [Thread-189708] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:02:15.555 [DEBUG] [Thread-189708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:02:15.555 [DEBUG] [Thread-189708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:02:15.555 [DEBUG] [Thread-189708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:02:15.555 [DEBUG] [Thread-189708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:02:15.555 [DEBUG] [Thread-189708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:02:15.555 [DEBUG] [Thread-189708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:02:15.555 [DEBUG] [Thread-189708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:02:15.555 [DEBUG] [Thread-189708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:02:15.555 [DEBUG] [Thread-189708] [transport.py] [_log()] client lang: <none>
2026-02-14T18:02:15.555 [DEBUG] [Thread-189708] [transport.py] [_log()] server lang: <none>
2026-02-14T18:02:15.555 [DEBUG] [Thread-189708] [transport.py] [_log()] kex follows: False
2026-02-14T18:02:15.555 [DEBUG] [Thread-189708] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:02:15.555 [DEBUG] [Thread-189708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:02:15.555 [DEBUG] [Thread-189708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:02:15.555 [DEBUG] [Thread-189708] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:02:15.555 [DEBUG] [Thread-189708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:02:15.555 [DEBUG] [Thread-189708] [transport.py] [_log()] Compression: none
2026-02-14T18:02:15.555 [DEBUG] [Thread-189708] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:02:15.615 [DEBUG] [Thread-189708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:02:15.615 [DEBUG] [Thread-189708] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:02:15.616 [DEBUG] [Thread-189708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:02:15.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:02:15.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:02:15.671 [DEBUG] [Thread-189708] [transport.py] [_log()] userauth is OK
2026-02-14T18:02:15.672 [DEBUG] [Thread-189708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:02:15.672 [DEBUG] [Thread-189708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:02:15.672 [DEBUG] [Thread-189708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:02:15.672 [DEBUG] [Thread-189708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:02:15.690 [INFO] [Thread-189708] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:02:15.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T18:02:15.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:02:16.537 [DEBUG] [Thread-189708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:02:16.538 [DEBUG] [Thread-189708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:02:16.585 [DEBUG] [Thread-189708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:02:16.585 [DEBUG] [Thread-189708] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:02:16.595 [DEBUG] [Thread-189708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:02:16.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:02:16.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-14T18:02:16.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-14T18:02:16.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:02:16.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:02:16.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:02:16.631 [DEBUG] [Thread-189708] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:02:23.839 [DEBUG] [Thread-189710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:02:35.225 [DEBUG] [Thread-189711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:02:38.888 [DEBUG] [Thread-189712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:02:46.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:02:46.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:02:46.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-14T18:02:48.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 2, 24), 13.27, 40.83, 0.0, 39.13, 15.08, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:02:48.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:02:24
2026-02-14T18:02:48.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:02:48.937 [DEBUG] [Thread-189713] [transport.py] [_log()] starting thread (client mode): 0xa57d78b0
2026-02-14T18:02:48.937 [DEBUG] [Thread-189713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:02:48.957 [DEBUG] [Thread-189713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:02:48.957 [INFO] [Thread-189713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:02:48.961 [DEBUG] [Thread-189713] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:02:48.961 [DEBUG] [Thread-189713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:02:48.961 [DEBUG] [Thread-189713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:02:48.961 [DEBUG] [Thread-189713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:02:48.961 [DEBUG] [Thread-189713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:02:48.961 [DEBUG] [Thread-189713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:02:48.961 [DEBUG] [Thread-189713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:02:48.961 [DEBUG] [Thread-189713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:02:48.961 [DEBUG] [Thread-189713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:02:48.961 [DEBUG] [Thread-189713] [transport.py] [_log()] client lang: <none>
2026-02-14T18:02:48.961 [DEBUG] [Thread-189713] [transport.py] [_log()] server lang: <none>
2026-02-14T18:02:48.961 [DEBUG] [Thread-189713] [transport.py] [_log()] kex follows: False
2026-02-14T18:02:48.961 [DEBUG] [Thread-189713] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:02:48.961 [DEBUG] [Thread-189713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:02:48.961 [DEBUG] [Thread-189713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:02:48.961 [DEBUG] [Thread-189713] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:02:48.961 [DEBUG] [Thread-189713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:02:48.961 [DEBUG] [Thread-189713] [transport.py] [_log()] Compression: none
2026-02-14T18:02:48.961 [DEBUG] [Thread-189713] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:02:48.978 [DEBUG] [Thread-189713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:02:48.979 [DEBUG] [Thread-189713] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:02:48.980 [DEBUG] [Thread-189713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:02:48.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:02:48.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:02:48.982 [DEBUG] [Thread-189713] [transport.py] [_log()] userauth is OK
2026-02-14T18:02:48.982 [DEBUG] [Thread-189713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:02:48.983 [DEBUG] [Thread-189713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:02:48.983 [DEBUG] [Thread-189713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:02:48.983 [DEBUG] [Thread-189713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:02:49.008 [INFO] [Thread-189713] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:02:49.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:02:49.655 [DEBUG] [Thread-189713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:02:49.655 [DEBUG] [Thread-189713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:02:49.655 [DEBUG] [Thread-189713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:02:49.695 [DEBUG] [Thread-189713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:02:49.695 [DEBUG] [Thread-189713] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:02:49.699 [DEBUG] [Thread-189713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:02:49.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:02:49.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:02:49.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:02:49.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:02:49.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:02:49.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:02:49.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:02:49.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:02:49.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:02:49.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.668160 -999.00  +15.10  24.55     46   +3.60 1 1 1 1 1   887    0 11.16 -11.57 ----- 29.2 24.6 148.2 28.1 17.8 -27.3 17.7 -26.3 18.9 -24.8 19.4 -28.1
2026-02-14T18:02:49.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:02:49.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:02:49.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.668160
2026-02-14T18:02:49.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:02:49.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:02:49.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:02:49.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:02:49.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:02:49.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:02:24', tmtdew=13.27, humidity=40.83, cloud=0.0, wind=39.13, temperature=15.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:02:09.024', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:02:49.726 [DEBUG] [Thread-189713] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:02:49.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-14T18:02:49.822 [DEBUG] [Thread-189716] [transport.py] [_log()] starting thread (client mode): 0xa2d7a080
2026-02-14T18:02:49.822 [DEBUG] [Thread-189716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:02:49.836 [DEBUG] [Thread-189716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:02:49.837 [INFO] [Thread-189716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:02:49.844 [DEBUG] [Thread-189716] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:02:49.844 [DEBUG] [Thread-189716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:02:49.844 [DEBUG] [Thread-189716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:02:49.845 [DEBUG] [Thread-189716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:02:49.845 [DEBUG] [Thread-189716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:02:49.845 [DEBUG] [Thread-189716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:02:49.845 [DEBUG] [Thread-189716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:02:49.845 [DEBUG] [Thread-189716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:02:49.846 [DEBUG] [Thread-189716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:02:49.846 [DEBUG] [Thread-189716] [transport.py] [_log()] client lang: <none>
2026-02-14T18:02:49.846 [DEBUG] [Thread-189716] [transport.py] [_log()] server lang: <none>
2026-02-14T18:02:49.846 [DEBUG] [Thread-189716] [transport.py] [_log()] kex follows: False
2026-02-14T18:02:49.846 [DEBUG] [Thread-189716] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:02:49.846 [DEBUG] [Thread-189716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:02:49.846 [DEBUG] [Thread-189716] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:02:49.846 [DEBUG] [Thread-189716] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:02:49.846 [DEBUG] [Thread-189716] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:02:49.846 [DEBUG] [Thread-189716] [transport.py] [_log()] Compression: none
2026-02-14T18:02:49.846 [DEBUG] [Thread-189716] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:02:49.903 [DEBUG] [Thread-189716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:02:49.904 [DEBUG] [Thread-189716] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:02:49.905 [DEBUG] [Thread-189716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:02:49.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:02:49.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:02:49.959 [DEBUG] [Thread-189716] [transport.py] [_log()] userauth is OK
2026-02-14T18:02:49.960 [DEBUG] [Thread-189716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:02:49.960 [DEBUG] [Thread-189716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:02:49.960 [DEBUG] [Thread-189716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:02:49.960 [DEBUG] [Thread-189716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:02:49.978 [INFO] [Thread-189716] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:02:49.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-14T18:02:49.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:02:50.863 [DEBUG] [Thread-189716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:02:50.863 [DEBUG] [Thread-189716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:02:50.911 [DEBUG] [Thread-189716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:02:50.911 [DEBUG] [Thread-189716] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:02:50.920 [DEBUG] [Thread-189716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:02:50.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:02:50.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:02:50.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-14T18:02:50.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:02:50.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:02:50.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:02:50.955 [DEBUG] [Thread-189716] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:02:53.926 [DEBUG] [Thread-189718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:03:08.977 [DEBUG] [Thread-189719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:03:09.131 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:03:09.132 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:03:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:03:20.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:03:20.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:03:22.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 3), 13.25, 41.01, 0.0, 34.32, 14.93, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:03:22.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:03:00
2026-02-14T18:03:23.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:03:23.498 [DEBUG] [Thread-189720] [transport.py] [_log()] starting thread (client mode): 0xa57d7850
2026-02-14T18:03:23.498 [DEBUG] [Thread-189720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:03:23.518 [DEBUG] [Thread-189720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:03:23.519 [INFO] [Thread-189720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:03:23.522 [DEBUG] [Thread-189720] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:03:23.522 [DEBUG] [Thread-189720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:03:23.522 [DEBUG] [Thread-189720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:03:23.522 [DEBUG] [Thread-189720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:03:23.522 [DEBUG] [Thread-189720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:03:23.522 [DEBUG] [Thread-189720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:03:23.522 [DEBUG] [Thread-189720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:03:23.522 [DEBUG] [Thread-189720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:03:23.522 [DEBUG] [Thread-189720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:03:23.523 [DEBUG] [Thread-189720] [transport.py] [_log()] client lang: <none>
2026-02-14T18:03:23.523 [DEBUG] [Thread-189720] [transport.py] [_log()] server lang: <none>
2026-02-14T18:03:23.523 [DEBUG] [Thread-189720] [transport.py] [_log()] kex follows: False
2026-02-14T18:03:23.523 [DEBUG] [Thread-189720] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:03:23.523 [DEBUG] [Thread-189720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:03:23.523 [DEBUG] [Thread-189720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:03:23.523 [DEBUG] [Thread-189720] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:03:23.523 [DEBUG] [Thread-189720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:03:23.523 [DEBUG] [Thread-189720] [transport.py] [_log()] Compression: none
2026-02-14T18:03:23.523 [DEBUG] [Thread-189720] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:03:23.544 [DEBUG] [Thread-189720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:03:23.544 [DEBUG] [Thread-189720] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:03:23.544 [DEBUG] [Thread-189720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:03:23.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:03:23.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:03:23.546 [DEBUG] [Thread-189720] [transport.py] [_log()] userauth is OK
2026-02-14T18:03:23.547 [DEBUG] [Thread-189720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:03:23.547 [DEBUG] [Thread-189720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:03:23.547 [DEBUG] [Thread-189720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:03:23.547 [DEBUG] [Thread-189720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:03:23.570 [INFO] [Thread-189720] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:03:23.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:03:24.013 [DEBUG] [Thread-189722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:03:24.217 [DEBUG] [Thread-189720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:03:24.217 [DEBUG] [Thread-189720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:03:24.218 [DEBUG] [Thread-189720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:03:24.258 [DEBUG] [Thread-189720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:03:24.258 [DEBUG] [Thread-189720] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:03:24.260 [DEBUG] [Thread-189720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:03:24.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:03:24.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:03:24.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:03:24.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:03:24.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:03:24.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:03:24.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:03:24.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:03:24.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:03:24.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.668508 -999.00  +14.80  28.74     46   +3.50 1 1 1 1 1   887    0 11.28 -10.97 ----- 22.8 28.7 154.4 38.2 17.8 -27.8 17.6 -26.5 18.9 -26.1 19.3 -27.8
2026-02-14T18:03:24.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:03:24.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:03:24.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.668508
2026-02-14T18:03:24.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:03:24.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:03:24.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:03:24.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:03:24.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:03:24.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:03:00', tmtdew=13.25, humidity=41.01, cloud=0.0, wind=34.32, temperature=14.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:02:39.091', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:03:24.282 [DEBUG] [Thread-189720] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:03:24.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-14T18:03:24.365 [DEBUG] [Thread-189724] [transport.py] [_log()] starting thread (client mode): 0xa5771f90
2026-02-14T18:03:24.365 [DEBUG] [Thread-189724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:03:24.379 [DEBUG] [Thread-189724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:03:24.379 [INFO] [Thread-189724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:03:24.386 [DEBUG] [Thread-189724] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:03:24.386 [DEBUG] [Thread-189724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:03:24.386 [DEBUG] [Thread-189724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:03:24.387 [DEBUG] [Thread-189724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:03:24.387 [DEBUG] [Thread-189724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:03:24.387 [DEBUG] [Thread-189724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:03:24.387 [DEBUG] [Thread-189724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:03:24.387 [DEBUG] [Thread-189724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:03:24.387 [DEBUG] [Thread-189724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:03:24.387 [DEBUG] [Thread-189724] [transport.py] [_log()] client lang: <none>
2026-02-14T18:03:24.387 [DEBUG] [Thread-189724] [transport.py] [_log()] server lang: <none>
2026-02-14T18:03:24.387 [DEBUG] [Thread-189724] [transport.py] [_log()] kex follows: False
2026-02-14T18:03:24.387 [DEBUG] [Thread-189724] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:03:24.387 [DEBUG] [Thread-189724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:03:24.387 [DEBUG] [Thread-189724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:03:24.387 [DEBUG] [Thread-189724] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:03:24.387 [DEBUG] [Thread-189724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:03:24.387 [DEBUG] [Thread-189724] [transport.py] [_log()] Compression: none
2026-02-14T18:03:24.387 [DEBUG] [Thread-189724] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:03:24.442 [DEBUG] [Thread-189724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:03:24.443 [DEBUG] [Thread-189724] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:03:24.443 [DEBUG] [Thread-189724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:03:24.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:03:24.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:03:24.499 [DEBUG] [Thread-189724] [transport.py] [_log()] userauth is OK
2026-02-14T18:03:24.499 [DEBUG] [Thread-189724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:03:24.500 [DEBUG] [Thread-189724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:03:24.500 [DEBUG] [Thread-189724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:03:24.500 [DEBUG] [Thread-189724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:03:24.519 [INFO] [Thread-189724] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:03:24.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-14T18:03:24.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:03:25.373 [DEBUG] [Thread-189724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:03:25.373 [DEBUG] [Thread-189724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:03:25.421 [DEBUG] [Thread-189724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:03:25.421 [DEBUG] [Thread-189724] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:03:25.429 [DEBUG] [Thread-189724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:03:25.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:03:25.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-14T18:03:25.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-14T18:03:25.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:03:25.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:03:25.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:03:25.462 [DEBUG] [Thread-189724] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:03:35.271 [DEBUG] [Thread-189726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:03:39.049 [DEBUG] [Thread-189727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:03:54.098 [DEBUG] [Thread-189728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:03:55.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:03:55.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:03:55.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-14T18:03:57.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 3, 36), 13.9, 39.02, 0.0, 40.12, 15.75, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:03:57.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:03:36
2026-02-14T18:03:57.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:03:58.141 [DEBUG] [Thread-189729] [transport.py] [_log()] starting thread (client mode): 0xa5770f40
2026-02-14T18:03:58.141 [DEBUG] [Thread-189729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:03:58.161 [DEBUG] [Thread-189729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:03:58.161 [INFO] [Thread-189729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:03:58.164 [DEBUG] [Thread-189729] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:03:58.164 [DEBUG] [Thread-189729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:03:58.164 [DEBUG] [Thread-189729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:03:58.164 [DEBUG] [Thread-189729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:03:58.164 [DEBUG] [Thread-189729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:03:58.164 [DEBUG] [Thread-189729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:03:58.164 [DEBUG] [Thread-189729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:03:58.165 [DEBUG] [Thread-189729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:03:58.165 [DEBUG] [Thread-189729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:03:58.165 [DEBUG] [Thread-189729] [transport.py] [_log()] client lang: <none>
2026-02-14T18:03:58.165 [DEBUG] [Thread-189729] [transport.py] [_log()] server lang: <none>
2026-02-14T18:03:58.165 [DEBUG] [Thread-189729] [transport.py] [_log()] kex follows: False
2026-02-14T18:03:58.165 [DEBUG] [Thread-189729] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:03:58.165 [DEBUG] [Thread-189729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:03:58.165 [DEBUG] [Thread-189729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:03:58.165 [DEBUG] [Thread-189729] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:03:58.165 [DEBUG] [Thread-189729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:03:58.165 [DEBUG] [Thread-189729] [transport.py] [_log()] Compression: none
2026-02-14T18:03:58.165 [DEBUG] [Thread-189729] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:03:58.181 [DEBUG] [Thread-189729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:03:58.181 [DEBUG] [Thread-189729] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:03:58.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:03:58.182 [DEBUG] [Thread-189729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:03:58.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:03:58.184 [DEBUG] [Thread-189729] [transport.py] [_log()] userauth is OK
2026-02-14T18:03:58.184 [DEBUG] [Thread-189729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:03:58.185 [DEBUG] [Thread-189729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:03:58.185 [DEBUG] [Thread-189729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:03:58.185 [DEBUG] [Thread-189729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:03:58.220 [INFO] [Thread-189729] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:03:58.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:03:59.019 [DEBUG] [Thread-189729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:03:59.019 [DEBUG] [Thread-189729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:03:59.020 [DEBUG] [Thread-189729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:03:59.060 [DEBUG] [Thread-189729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:03:59.061 [DEBUG] [Thread-189729] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:03:59.064 [DEBUG] [Thread-189729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:03:59.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:03:59.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:03:59.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:03:59.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:03:59.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:03:59.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:03:59.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:03:59.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:03:59.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:03:59.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.668855 -999.00  +14.70  22.61     47   +3.50 1 1 1 1 1   887    0 10.95 -11.40 ----- 18.7 22.6 160.4 35.5 17.7 -28.3 17.6 -26.3 18.8 -25.1 19.4 -27.2
2026-02-14T18:03:59.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:03:59.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:03:59.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.668855
2026-02-14T18:03:59.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:03:59.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:03:59.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:03:59.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:03:59.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:03:59.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:03:36', tmtdew=13.9, humidity=39.02, cloud=0.0, wind=40.12, temperature=15.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:03:09.072', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:03:59.091 [DEBUG] [Thread-189729] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:03:59.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-14T18:03:59.188 [DEBUG] [Thread-189732] [transport.py] [_log()] starting thread (client mode): 0xa57d4460
2026-02-14T18:03:59.189 [DEBUG] [Thread-189732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:03:59.203 [DEBUG] [Thread-189732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:03:59.203 [INFO] [Thread-189732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:03:59.211 [DEBUG] [Thread-189732] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:03:59.211 [DEBUG] [Thread-189732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:03:59.211 [DEBUG] [Thread-189732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:03:59.211 [DEBUG] [Thread-189732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:03:59.211 [DEBUG] [Thread-189732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:03:59.211 [DEBUG] [Thread-189732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:03:59.212 [DEBUG] [Thread-189732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:03:59.212 [DEBUG] [Thread-189732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:03:59.212 [DEBUG] [Thread-189732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:03:59.212 [DEBUG] [Thread-189732] [transport.py] [_log()] client lang: <none>
2026-02-14T18:03:59.212 [DEBUG] [Thread-189732] [transport.py] [_log()] server lang: <none>
2026-02-14T18:03:59.212 [DEBUG] [Thread-189732] [transport.py] [_log()] kex follows: False
2026-02-14T18:03:59.212 [DEBUG] [Thread-189732] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:03:59.212 [DEBUG] [Thread-189732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:03:59.213 [DEBUG] [Thread-189732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:03:59.213 [DEBUG] [Thread-189732] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:03:59.213 [DEBUG] [Thread-189732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:03:59.213 [DEBUG] [Thread-189732] [transport.py] [_log()] Compression: none
2026-02-14T18:03:59.213 [DEBUG] [Thread-189732] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:03:59.272 [DEBUG] [Thread-189732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:03:59.273 [DEBUG] [Thread-189732] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:03:59.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:03:59.274 [DEBUG] [Thread-189732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:03:59.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:03:59.327 [DEBUG] [Thread-189732] [transport.py] [_log()] userauth is OK
2026-02-14T18:03:59.327 [DEBUG] [Thread-189732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:03:59.327 [DEBUG] [Thread-189732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:03:59.327 [DEBUG] [Thread-189732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:03:59.327 [DEBUG] [Thread-189732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:03:59.347 [INFO] [Thread-189732] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:03:59.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-14T18:03:59.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:04:00.135 [DEBUG] [Thread-189732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:04:00.136 [DEBUG] [Thread-189732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:04:00.183 [DEBUG] [Thread-189732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:04:00.183 [DEBUG] [Thread-189732] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:04:00.192 [DEBUG] [Thread-189732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:04:00.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:04: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')
2026-02-14T18:04:00.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-14T18:04:00.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:04:00.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:04:00.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:04:00.228 [DEBUG] [Thread-189732] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:04:09.133 [DEBUG] [Thread-189734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:04:09.277 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:04:09.278 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:04:24.185 [DEBUG] [Thread-189735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:04:30.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:04:30.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:04:30.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:04:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 4, 11), 13.22, 40.96, 0.0, 37.63, 15.03, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:04:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:04:11
2026-02-14T18:04:32.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:04:32.554 [DEBUG] [Thread-189736] [transport.py] [_log()] starting thread (client mode): 0xa2dc0e50
2026-02-14T18:04:32.554 [DEBUG] [Thread-189736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:04:32.575 [DEBUG] [Thread-189736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:04:32.575 [INFO] [Thread-189736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:04:32.578 [DEBUG] [Thread-189736] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:04:32.578 [DEBUG] [Thread-189736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:04:32.579 [DEBUG] [Thread-189736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:04:32.579 [DEBUG] [Thread-189736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:04:32.579 [DEBUG] [Thread-189736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:04:32.579 [DEBUG] [Thread-189736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:04:32.579 [DEBUG] [Thread-189736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:04:32.579 [DEBUG] [Thread-189736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:04:32.579 [DEBUG] [Thread-189736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:04:32.579 [DEBUG] [Thread-189736] [transport.py] [_log()] client lang: <none>
2026-02-14T18:04:32.579 [DEBUG] [Thread-189736] [transport.py] [_log()] server lang: <none>
2026-02-14T18:04:32.579 [DEBUG] [Thread-189736] [transport.py] [_log()] kex follows: False
2026-02-14T18:04:32.579 [DEBUG] [Thread-189736] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:04:32.579 [DEBUG] [Thread-189736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:04:32.579 [DEBUG] [Thread-189736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:04:32.579 [DEBUG] [Thread-189736] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:04:32.579 [DEBUG] [Thread-189736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:04:32.579 [DEBUG] [Thread-189736] [transport.py] [_log()] Compression: none
2026-02-14T18:04:32.579 [DEBUG] [Thread-189736] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:04:32.597 [DEBUG] [Thread-189736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:04:32.597 [DEBUG] [Thread-189736] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:04:32.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:04:32.598 [DEBUG] [Thread-189736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:04:32.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:04:32.600 [DEBUG] [Thread-189736] [transport.py] [_log()] userauth is OK
2026-02-14T18:04:32.601 [DEBUG] [Thread-189736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:04:32.601 [DEBUG] [Thread-189736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:04:32.601 [DEBUG] [Thread-189736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:04:32.601 [DEBUG] [Thread-189736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:04:32.625 [INFO] [Thread-189736] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:04:32.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:04:33.227 [DEBUG] [Thread-189736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:04:33.227 [DEBUG] [Thread-189736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:04:33.227 [DEBUG] [Thread-189736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:04:33.268 [DEBUG] [Thread-189736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:04:33.268 [DEBUG] [Thread-189736] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:04:33.270 [DEBUG] [Thread-189736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:04:33.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:04:33.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:04:33.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:04:33.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:04:33.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:04:33.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:04:33.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:04:33.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:04:33.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:04:33.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.669202 -999.00  +14.70  29.84     47   +3.50 1 1 1 1 1   887    0 11.03 -10.89 ----- 20.9 29.8 157.9 38.5 17.7 -27.4 17.6 -26.4 18.8 -26.3 19.3 -27.8
2026-02-14T18:04:33.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:04:33.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:04:33.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.669202
2026-02-14T18:04:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:04:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:04:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:04:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:04:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:04:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:04:11', tmtdew=13.22, humidity=40.96, cloud=0.0, wind=37.63, temperature=15.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:03:39.053', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:04:33.292 [DEBUG] [Thread-189736] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:04:33.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-14T18:04:33.386 [DEBUG] [Thread-189739] [transport.py] [_log()] starting thread (client mode): 0xa2db5690
2026-02-14T18:04:33.386 [DEBUG] [Thread-189739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:04:33.401 [DEBUG] [Thread-189739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:04:33.401 [INFO] [Thread-189739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:04:33.408 [DEBUG] [Thread-189739] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:04:33.409 [DEBUG] [Thread-189739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:04:33.409 [DEBUG] [Thread-189739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:04:33.409 [DEBUG] [Thread-189739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:04:33.409 [DEBUG] [Thread-189739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:04:33.409 [DEBUG] [Thread-189739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:04:33.409 [DEBUG] [Thread-189739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:04:33.410 [DEBUG] [Thread-189739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:04:33.410 [DEBUG] [Thread-189739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:04:33.410 [DEBUG] [Thread-189739] [transport.py] [_log()] client lang: <none>
2026-02-14T18:04:33.410 [DEBUG] [Thread-189739] [transport.py] [_log()] server lang: <none>
2026-02-14T18:04:33.410 [DEBUG] [Thread-189739] [transport.py] [_log()] kex follows: False
2026-02-14T18:04:33.410 [DEBUG] [Thread-189739] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:04:33.410 [DEBUG] [Thread-189739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:04:33.410 [DEBUG] [Thread-189739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:04:33.411 [DEBUG] [Thread-189739] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:04:33.411 [DEBUG] [Thread-189739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:04:33.411 [DEBUG] [Thread-189739] [transport.py] [_log()] Compression: none
2026-02-14T18:04:33.411 [DEBUG] [Thread-189739] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:04:33.468 [DEBUG] [Thread-189739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:04:33.469 [DEBUG] [Thread-189739] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:04:33.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:04:33.470 [DEBUG] [Thread-189739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:04:33.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:04:33.524 [DEBUG] [Thread-189739] [transport.py] [_log()] userauth is OK
2026-02-14T18:04:33.524 [DEBUG] [Thread-189739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:04:33.525 [DEBUG] [Thread-189739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:04:33.525 [DEBUG] [Thread-189739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:04:33.525 [DEBUG] [Thread-189739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:04:33.543 [INFO] [Thread-189739] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:04:33.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-14T18:04:33.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:04:34.353 [DEBUG] [Thread-189739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:04:34.353 [DEBUG] [Thread-189739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:04:34.401 [DEBUG] [Thread-189739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:04:34.402 [DEBUG] [Thread-189739] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:04:34.411 [DEBUG] [Thread-189739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:04:34.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:04:34.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-14T18:04:34.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-14T18:04:34.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:04:34.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:04:34.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:04:34.447 [DEBUG] [Thread-189739] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:04:35.319 [DEBUG] [Thread-189741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:04:39.222 [DEBUG] [Thread-189742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:04:54.282 [DEBUG] [Thread-189744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:04:55.686 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:05:04.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:05:04.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:05:04.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-14T18:05:06.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 4, 46), 13.08, 41.04, 0.0, 34.6, 14.88, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:05:06.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:04:46
2026-02-14T18:05:06.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:05:06.821 [DEBUG] [Thread-189745] [transport.py] [_log()] starting thread (client mode): 0xa2d03640
2026-02-14T18:05:06.821 [DEBUG] [Thread-189745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:05:06.842 [DEBUG] [Thread-189745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:05:06.842 [INFO] [Thread-189745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:05:06.845 [DEBUG] [Thread-189745] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:05:06.845 [DEBUG] [Thread-189745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:05:06.845 [DEBUG] [Thread-189745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:05:06.845 [DEBUG] [Thread-189745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:05:06.845 [DEBUG] [Thread-189745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:05:06.845 [DEBUG] [Thread-189745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:05:06.846 [DEBUG] [Thread-189745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:05:06.846 [DEBUG] [Thread-189745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:05:06.846 [DEBUG] [Thread-189745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:05:06.846 [DEBUG] [Thread-189745] [transport.py] [_log()] client lang: <none>
2026-02-14T18:05:06.846 [DEBUG] [Thread-189745] [transport.py] [_log()] server lang: <none>
2026-02-14T18:05:06.846 [DEBUG] [Thread-189745] [transport.py] [_log()] kex follows: False
2026-02-14T18:05:06.846 [DEBUG] [Thread-189745] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:05:06.846 [DEBUG] [Thread-189745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:05:06.846 [DEBUG] [Thread-189745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:05:06.846 [DEBUG] [Thread-189745] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:05:06.846 [DEBUG] [Thread-189745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:05:06.846 [DEBUG] [Thread-189745] [transport.py] [_log()] Compression: none
2026-02-14T18:05:06.846 [DEBUG] [Thread-189745] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:05:06.862 [DEBUG] [Thread-189745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:05:06.863 [DEBUG] [Thread-189745] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:05:06.863 [DEBUG] [Thread-189745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:05:06.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:05:06.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:05:06.865 [DEBUG] [Thread-189745] [transport.py] [_log()] userauth is OK
2026-02-14T18:05:06.866 [DEBUG] [Thread-189745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:05:06.866 [DEBUG] [Thread-189745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:05:06.866 [DEBUG] [Thread-189745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:05:06.866 [DEBUG] [Thread-189745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:05:06.890 [INFO] [Thread-189745] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:05:06.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:05:07.488 [DEBUG] [Thread-189745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:05:07.496 [DEBUG] [Thread-189745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:05:07.497 [DEBUG] [Thread-189745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:05:07.529 [DEBUG] [Thread-189745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:05:07.529 [DEBUG] [Thread-189745] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:05:07.532 [DEBUG] [Thread-189745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:05:07.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:05:07.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:05:07.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:05:07.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:05:07.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:05:07.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:05:07.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:05:07.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:05:07.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:05:07.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.669896 -999.00  +14.70  21.79     47   +3.60 1 1 1 1 1   887    0 11.30 -10.30 ----- 23.3 21.8 159.6 32.9 17.6 -27.6 17.5 -26.4 18.8 -25.4 19.3 -27.7
2026-02-14T18:05:07.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:05:07.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:05:07.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.669896
2026-02-14T18:05:07.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:05:07.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:05:07.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:05:07.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:05:07.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:05:07.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:04:46', tmtdew=13.08, humidity=41.04, cloud=0.0, wind=34.6, temperature=14.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:04:39.014', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:05:07.548 [DEBUG] [Thread-189745] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:05:07.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-14T18:05:07.644 [DEBUG] [Thread-189748] [transport.py] [_log()] starting thread (client mode): 0xa2d01480
2026-02-14T18:05:07.644 [DEBUG] [Thread-189748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:05:07.660 [DEBUG] [Thread-189748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:05:07.660 [INFO] [Thread-189748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:05:07.667 [DEBUG] [Thread-189748] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:05:07.668 [DEBUG] [Thread-189748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:05:07.668 [DEBUG] [Thread-189748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:05:07.668 [DEBUG] [Thread-189748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:05:07.668 [DEBUG] [Thread-189748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:05:07.668 [DEBUG] [Thread-189748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:05:07.668 [DEBUG] [Thread-189748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:05:07.668 [DEBUG] [Thread-189748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:05:07.668 [DEBUG] [Thread-189748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:05:07.668 [DEBUG] [Thread-189748] [transport.py] [_log()] client lang: <none>
2026-02-14T18:05:07.668 [DEBUG] [Thread-189748] [transport.py] [_log()] server lang: <none>
2026-02-14T18:05:07.668 [DEBUG] [Thread-189748] [transport.py] [_log()] kex follows: False
2026-02-14T18:05:07.668 [DEBUG] [Thread-189748] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:05:07.668 [DEBUG] [Thread-189748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:05:07.668 [DEBUG] [Thread-189748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:05:07.668 [DEBUG] [Thread-189748] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:05:07.668 [DEBUG] [Thread-189748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:05:07.668 [DEBUG] [Thread-189748] [transport.py] [_log()] Compression: none
2026-02-14T18:05:07.669 [DEBUG] [Thread-189748] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:05:07.727 [DEBUG] [Thread-189748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:05:07.728 [DEBUG] [Thread-189748] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:05:07.729 [DEBUG] [Thread-189748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:05:07.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:05:07.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:05:07.784 [DEBUG] [Thread-189748] [transport.py] [_log()] userauth is OK
2026-02-14T18:05:07.785 [DEBUG] [Thread-189748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:05:07.785 [DEBUG] [Thread-189748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:05:07.785 [DEBUG] [Thread-189748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:05:07.785 [DEBUG] [Thread-189748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:05:07.805 [INFO] [Thread-189748] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:05:07.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-14T18:05:07.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:05:08.651 [DEBUG] [Thread-189748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:05:08.652 [DEBUG] [Thread-189748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:05:08.699 [DEBUG] [Thread-189748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:05:08.700 [DEBUG] [Thread-189748] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:05:08.709 [DEBUG] [Thread-189748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:05:08.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:05:08.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-14T18:05:08.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-14T18:05:08.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:05:08.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:05:08.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:05:08.746 [DEBUG] [Thread-189748] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:05:09.319 [DEBUG] [Thread-189750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:05:09.425 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:05:09.426 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:05:24.378 [DEBUG] [Thread-189751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:05:35.370 [DEBUG] [Thread-189752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:05:36.222 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:05:38.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:05:38.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:05:38.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-14T18:05:39.414 [DEBUG] [Thread-189753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:05:40.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 5, 21), 13.0, 41.26, 0.0, 32.57, 14.83, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:05:40.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:05:21
2026-02-14T18:05:41.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:05:41.379 [DEBUG] [Thread-189754] [transport.py] [_log()] starting thread (client mode): 0xa57c3610
2026-02-14T18:05:41.379 [DEBUG] [Thread-189754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:05:41.399 [DEBUG] [Thread-189754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:05:41.399 [INFO] [Thread-189754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:05:41.403 [DEBUG] [Thread-189754] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:05:41.403 [DEBUG] [Thread-189754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:05:41.403 [DEBUG] [Thread-189754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:05:41.403 [DEBUG] [Thread-189754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:05:41.403 [DEBUG] [Thread-189754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:05:41.403 [DEBUG] [Thread-189754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:05:41.403 [DEBUG] [Thread-189754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:05:41.403 [DEBUG] [Thread-189754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:05:41.403 [DEBUG] [Thread-189754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:05:41.403 [DEBUG] [Thread-189754] [transport.py] [_log()] client lang: <none>
2026-02-14T18:05:41.403 [DEBUG] [Thread-189754] [transport.py] [_log()] server lang: <none>
2026-02-14T18:05:41.403 [DEBUG] [Thread-189754] [transport.py] [_log()] kex follows: False
2026-02-14T18:05:41.403 [DEBUG] [Thread-189754] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:05:41.403 [DEBUG] [Thread-189754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:05:41.403 [DEBUG] [Thread-189754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:05:41.403 [DEBUG] [Thread-189754] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:05:41.403 [DEBUG] [Thread-189754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:05:41.403 [DEBUG] [Thread-189754] [transport.py] [_log()] Compression: none
2026-02-14T18:05:41.403 [DEBUG] [Thread-189754] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:05:41.422 [DEBUG] [Thread-189754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:05:41.422 [DEBUG] [Thread-189754] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:05:41.423 [DEBUG] [Thread-189754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:05:41.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:05:41.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:05:41.465 [DEBUG] [Thread-189754] [transport.py] [_log()] userauth is OK
2026-02-14T18:05:41.466 [DEBUG] [Thread-189754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:05:41.466 [DEBUG] [Thread-189754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:05:41.466 [DEBUG] [Thread-189754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:05:41.466 [DEBUG] [Thread-189754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:05:41.498 [INFO] [Thread-189754] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:05:41.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:05:42.121 [DEBUG] [Thread-189754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:05:42.121 [DEBUG] [Thread-189754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:05:42.122 [DEBUG] [Thread-189754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:05:42.163 [DEBUG] [Thread-189754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:05:42.163 [DEBUG] [Thread-189754] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:05:42.166 [DEBUG] [Thread-189754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:05:42.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:05:42.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:05:42.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:05:42.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:05:42.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:05:42.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:05:42.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:05:42.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:05:42.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:05:42.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.670255 -999.00  +14.70  19.81     47   +3.60 1 1 1 1 1   887    0 10.91 -11.11 ----- 18.0 19.8 174.2 33.2 17.7 -27.1 17.5 -25.9 18.8 -25.4 19.3 -27.6
2026-02-14T18:05:42.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:05:42.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:05:42.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.670255
2026-02-14T18:05:42.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:05:42.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:05:42.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:05:42.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:05:42.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:05:42.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:05:21', tmtdew=13.0, humidity=41.26, cloud=0.0, wind=32.57, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:05:10.032', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:05:42.192 [DEBUG] [Thread-189754] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:05:42.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-14T18:05:42.287 [DEBUG] [Thread-189757] [transport.py] [_log()] starting thread (client mode): 0xa57c1420
2026-02-14T18:05:42.287 [DEBUG] [Thread-189757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:05:42.300 [DEBUG] [Thread-189757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:05:42.301 [INFO] [Thread-189757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:05:42.308 [DEBUG] [Thread-189757] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:05:42.309 [DEBUG] [Thread-189757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:05:42.309 [DEBUG] [Thread-189757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:05:42.309 [DEBUG] [Thread-189757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:05:42.309 [DEBUG] [Thread-189757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:05:42.309 [DEBUG] [Thread-189757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:05:42.309 [DEBUG] [Thread-189757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:05:42.309 [DEBUG] [Thread-189757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:05:42.309 [DEBUG] [Thread-189757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:05:42.310 [DEBUG] [Thread-189757] [transport.py] [_log()] client lang: <none>
2026-02-14T18:05:42.310 [DEBUG] [Thread-189757] [transport.py] [_log()] server lang: <none>
2026-02-14T18:05:42.310 [DEBUG] [Thread-189757] [transport.py] [_log()] kex follows: False
2026-02-14T18:05:42.310 [DEBUG] [Thread-189757] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:05:42.310 [DEBUG] [Thread-189757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:05:42.310 [DEBUG] [Thread-189757] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:05:42.310 [DEBUG] [Thread-189757] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:05:42.310 [DEBUG] [Thread-189757] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:05:42.311 [DEBUG] [Thread-189757] [transport.py] [_log()] Compression: none
2026-02-14T18:05:42.311 [DEBUG] [Thread-189757] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:05:42.367 [DEBUG] [Thread-189757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:05:42.368 [DEBUG] [Thread-189757] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:05:42.368 [DEBUG] [Thread-189757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:05:42.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:05:42.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:05:42.423 [DEBUG] [Thread-189757] [transport.py] [_log()] userauth is OK
2026-02-14T18:05:42.423 [DEBUG] [Thread-189757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:05:42.423 [DEBUG] [Thread-189757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:05:42.423 [DEBUG] [Thread-189757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:05:42.423 [DEBUG] [Thread-189757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:05:42.442 [INFO] [Thread-189757] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:05:42.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-14T18:05:42.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:05:43.252 [DEBUG] [Thread-189757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:05:43.252 [DEBUG] [Thread-189757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:05:43.300 [DEBUG] [Thread-189757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:05:43.300 [DEBUG] [Thread-189757] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:05:43.309 [DEBUG] [Thread-189757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:05:43.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:05: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-14T18:05: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-14T18:05:43.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:05:43.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:05:43.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:05:43.342 [DEBUG] [Thread-189757] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:05:54.451 [DEBUG] [Thread-189759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:06:09.500 [DEBUG] [Thread-189760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:06:09.568 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:06:09.569 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:06:13.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:06:13.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:06:13.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:06:15.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 5, 56), 13.05, 41.28, 0.0, 30.35, 14.91, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:06:15.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:05:56
2026-02-14T18:06:15.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:06:15.688 [DEBUG] [Thread-189761] [transport.py] [_log()] starting thread (client mode): 0xa57c3b50
2026-02-14T18:06:15.689 [DEBUG] [Thread-189761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:06:15.708 [DEBUG] [Thread-189761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:06:15.708 [INFO] [Thread-189761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:06:15.711 [DEBUG] [Thread-189761] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:06:15.711 [DEBUG] [Thread-189761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:06:15.712 [DEBUG] [Thread-189761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:06:15.712 [DEBUG] [Thread-189761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:06:15.712 [DEBUG] [Thread-189761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:06:15.712 [DEBUG] [Thread-189761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:06:15.712 [DEBUG] [Thread-189761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:06:15.712 [DEBUG] [Thread-189761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:06:15.712 [DEBUG] [Thread-189761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:06:15.712 [DEBUG] [Thread-189761] [transport.py] [_log()] client lang: <none>
2026-02-14T18:06:15.712 [DEBUG] [Thread-189761] [transport.py] [_log()] server lang: <none>
2026-02-14T18:06:15.712 [DEBUG] [Thread-189761] [transport.py] [_log()] kex follows: False
2026-02-14T18:06:15.712 [DEBUG] [Thread-189761] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:06:15.712 [DEBUG] [Thread-189761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:06:15.712 [DEBUG] [Thread-189761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:06:15.712 [DEBUG] [Thread-189761] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:06:15.713 [DEBUG] [Thread-189761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:06:15.713 [DEBUG] [Thread-189761] [transport.py] [_log()] Compression: none
2026-02-14T18:06:15.713 [DEBUG] [Thread-189761] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:06:15.732 [DEBUG] [Thread-189761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:06:15.732 [DEBUG] [Thread-189761] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:06:15.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:06:15.733 [DEBUG] [Thread-189761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:06:15.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:06:15.735 [DEBUG] [Thread-189761] [transport.py] [_log()] userauth is OK
2026-02-14T18:06:15.736 [DEBUG] [Thread-189761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:06:15.736 [DEBUG] [Thread-189761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:06:15.736 [DEBUG] [Thread-189761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:06:15.736 [DEBUG] [Thread-189761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:06:15.781 [INFO] [Thread-189761] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:06:15.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:06:16.422 [DEBUG] [Thread-189761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:06:16.422 [DEBUG] [Thread-189761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:06:16.423 [DEBUG] [Thread-189761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:06:16.463 [DEBUG] [Thread-189761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:06:16.464 [DEBUG] [Thread-189761] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:06:16.467 [DEBUG] [Thread-189761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:06:16.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:06:16.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:06:16.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:06:16.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:06:16.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:06:16.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:06:16.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:06:16.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:06:16.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:06:16.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.670602 -999.00  +14.90  22.49     46   +3.60 1 1 1 1 1   887    0 11.02 -11.86 ----- 29.8 22.5 161.8 24.7 17.7 -27.1 17.6 -26.3 18.9 -25.3 19.4 -28.3
2026-02-14T18:06:16.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:06:16.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:06:16.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.670602
2026-02-14T18:06:16.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:06:16.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:06:16.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:06:16.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:06:16.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:06:16.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:05:56', tmtdew=13.05, humidity=41.28, cloud=0.0, wind=30.35, temperature=14.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:05:40.013', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:06:16.494 [DEBUG] [Thread-189761] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:06:16.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-14T18:06:16.589 [DEBUG] [Thread-189764] [transport.py] [_log()] starting thread (client mode): 0xa2d00eb0
2026-02-14T18:06:16.589 [DEBUG] [Thread-189764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:06:16.603 [DEBUG] [Thread-189764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:06:16.604 [INFO] [Thread-189764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:06:16.611 [DEBUG] [Thread-189764] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:06:16.611 [DEBUG] [Thread-189764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:06:16.611 [DEBUG] [Thread-189764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:06:16.611 [DEBUG] [Thread-189764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:06:16.611 [DEBUG] [Thread-189764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:06:16.611 [DEBUG] [Thread-189764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:06:16.611 [DEBUG] [Thread-189764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:06:16.611 [DEBUG] [Thread-189764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:06:16.611 [DEBUG] [Thread-189764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:06:16.611 [DEBUG] [Thread-189764] [transport.py] [_log()] client lang: <none>
2026-02-14T18:06:16.611 [DEBUG] [Thread-189764] [transport.py] [_log()] server lang: <none>
2026-02-14T18:06:16.612 [DEBUG] [Thread-189764] [transport.py] [_log()] kex follows: False
2026-02-14T18:06:16.612 [DEBUG] [Thread-189764] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:06:16.612 [DEBUG] [Thread-189764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:06:16.612 [DEBUG] [Thread-189764] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:06:16.612 [DEBUG] [Thread-189764] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:06:16.612 [DEBUG] [Thread-189764] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:06:16.612 [DEBUG] [Thread-189764] [transport.py] [_log()] Compression: none
2026-02-14T18:06:16.612 [DEBUG] [Thread-189764] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:06:16.672 [DEBUG] [Thread-189764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:06:16.672 [DEBUG] [Thread-189764] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:06:16.673 [DEBUG] [Thread-189764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:06:16.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:06:16.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:06:16.728 [DEBUG] [Thread-189764] [transport.py] [_log()] userauth is OK
2026-02-14T18:06:16.728 [DEBUG] [Thread-189764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:06:16.728 [DEBUG] [Thread-189764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:06:16.729 [DEBUG] [Thread-189764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:06:16.729 [DEBUG] [Thread-189764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:06:16.748 [INFO] [Thread-189764] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:06:16.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-14T18:06:16.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:06:17.581 [DEBUG] [Thread-189764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:06:17.581 [DEBUG] [Thread-189764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:06:17.629 [DEBUG] [Thread-189764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:06:17.630 [DEBUG] [Thread-189764] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:06:17.639 [DEBUG] [Thread-189764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:06:17.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:06:17.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-14T18:06:17.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-14T18:06:17.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:06:17.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:06:17.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:06:17.676 [DEBUG] [Thread-189764] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:06:24.538 [DEBUG] [Thread-189766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:06:35.404 [DEBUG] [Thread-189767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:06:39.590 [DEBUG] [Thread-189768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:06:39.838 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:06:47.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:06:47.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:06:47.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-14T18:06:49.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 6, 32), 13.22, 40.83, 0.0, 29.77, 15.06, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:06:49.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:06:32
2026-02-14T18:06:49.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:06:50.113 [DEBUG] [Thread-189769] [transport.py] [_log()] starting thread (client mode): 0xa57d6cb0
2026-02-14T18:06:50.113 [DEBUG] [Thread-189769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:06:50.133 [DEBUG] [Thread-189769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:06:50.134 [INFO] [Thread-189769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:06:50.137 [DEBUG] [Thread-189769] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:06:50.137 [DEBUG] [Thread-189769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:06:50.137 [DEBUG] [Thread-189769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:06:50.137 [DEBUG] [Thread-189769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:06:50.138 [DEBUG] [Thread-189769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:06:50.138 [DEBUG] [Thread-189769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:06:50.138 [DEBUG] [Thread-189769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:06:50.138 [DEBUG] [Thread-189769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:06:50.138 [DEBUG] [Thread-189769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:06:50.138 [DEBUG] [Thread-189769] [transport.py] [_log()] client lang: <none>
2026-02-14T18:06:50.138 [DEBUG] [Thread-189769] [transport.py] [_log()] server lang: <none>
2026-02-14T18:06:50.138 [DEBUG] [Thread-189769] [transport.py] [_log()] kex follows: False
2026-02-14T18:06:50.138 [DEBUG] [Thread-189769] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:06:50.138 [DEBUG] [Thread-189769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:06:50.138 [DEBUG] [Thread-189769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:06:50.138 [DEBUG] [Thread-189769] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:06:50.138 [DEBUG] [Thread-189769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:06:50.138 [DEBUG] [Thread-189769] [transport.py] [_log()] Compression: none
2026-02-14T18:06:50.138 [DEBUG] [Thread-189769] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:06:50.156 [DEBUG] [Thread-189769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:06:50.156 [DEBUG] [Thread-189769] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:06:50.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:06:50.157 [DEBUG] [Thread-189769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:06:50.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:06:50.160 [DEBUG] [Thread-189769] [transport.py] [_log()] userauth is OK
2026-02-14T18:06:50.160 [DEBUG] [Thread-189769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:06:50.160 [DEBUG] [Thread-189769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:06:50.160 [DEBUG] [Thread-189769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:06:50.160 [DEBUG] [Thread-189769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:06:50.187 [INFO] [Thread-189769] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:06:50.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:06:50.829 [DEBUG] [Thread-189769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:06:50.829 [DEBUG] [Thread-189769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:06:50.830 [DEBUG] [Thread-189769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:06:50.871 [DEBUG] [Thread-189769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:06:50.871 [DEBUG] [Thread-189769] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:06:50.874 [DEBUG] [Thread-189769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:06:50.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:06:50.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:06:50.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:06:50.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:06:50.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:06:50.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:06:50.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:06:50.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:06:50.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:06:50.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.670938 -999.00  +15.00  18.50     46   +3.70 1 1 1 1 1   887    0 10.88 -10.76 ----- 21.6 18.5 147.6 26.8 17.7 -27.6 17.6 -26.2 18.9 -25.8 19.4 -27.7
2026-02-14T18:06:50.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:06:50.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:06:50.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.670938
2026-02-14T18:06:50.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:06:50.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:06:50.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:06:50.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:06:50.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:06:50.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:06:32', tmtdew=13.22, humidity=40.83, cloud=0.0, wind=29.77, temperature=15.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:06:09.043', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:06:50.901 [DEBUG] [Thread-189769] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:06:50.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-14T18:06:51.004 [DEBUG] [Thread-189772] [transport.py] [_log()] starting thread (client mode): 0xa57c38e0
2026-02-14T18:06:51.004 [DEBUG] [Thread-189772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:06:51.019 [DEBUG] [Thread-189772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:06:51.019 [INFO] [Thread-189772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:06:51.026 [DEBUG] [Thread-189772] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:06:51.026 [DEBUG] [Thread-189772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:06:51.026 [DEBUG] [Thread-189772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:06:51.026 [DEBUG] [Thread-189772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:06:51.026 [DEBUG] [Thread-189772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:06:51.026 [DEBUG] [Thread-189772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:06:51.026 [DEBUG] [Thread-189772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:06:51.027 [DEBUG] [Thread-189772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:06:51.027 [DEBUG] [Thread-189772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:06:51.027 [DEBUG] [Thread-189772] [transport.py] [_log()] client lang: <none>
2026-02-14T18:06:51.027 [DEBUG] [Thread-189772] [transport.py] [_log()] server lang: <none>
2026-02-14T18:06:51.027 [DEBUG] [Thread-189772] [transport.py] [_log()] kex follows: False
2026-02-14T18:06:51.027 [DEBUG] [Thread-189772] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:06:51.027 [DEBUG] [Thread-189772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:06:51.027 [DEBUG] [Thread-189772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:06:51.027 [DEBUG] [Thread-189772] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:06:51.027 [DEBUG] [Thread-189772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:06:51.027 [DEBUG] [Thread-189772] [transport.py] [_log()] Compression: none
2026-02-14T18:06:51.027 [DEBUG] [Thread-189772] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:06:51.083 [DEBUG] [Thread-189772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:06:51.083 [DEBUG] [Thread-189772] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:06:51.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:06:51.084 [DEBUG] [Thread-189772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:06:51.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:06:51.139 [DEBUG] [Thread-189772] [transport.py] [_log()] userauth is OK
2026-02-14T18:06:51.139 [DEBUG] [Thread-189772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:06:51.139 [DEBUG] [Thread-189772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:06:51.139 [DEBUG] [Thread-189772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:06:51.139 [DEBUG] [Thread-189772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:06:51.158 [INFO] [Thread-189772] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:06:51.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-14T18:06:51.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:06:52.006 [DEBUG] [Thread-189772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:06:52.007 [DEBUG] [Thread-189772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:06:52.054 [DEBUG] [Thread-189772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:06:52.055 [DEBUG] [Thread-189772] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:06:52.063 [DEBUG] [Thread-189772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:06:52.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:06:52.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-14T18:06:52.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-14T18:06:52.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:06:52.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:06:52.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:06:52.099 [DEBUG] [Thread-189772] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:06:54.627 [DEBUG] [Thread-189774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:07:04.322 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:07:09.682 [DEBUG] [Thread-189775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:07:09.710 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:07:09.711 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:07:22.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:07:22.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:07:22.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-14T18:07:24.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 7, 8), 13.28, 40.7, 0.0, 32.01, 15.09, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:07:24.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:07:08
2026-02-14T18:07:24.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:07:24.537 [DEBUG] [Thread-189776] [transport.py] [_log()] starting thread (client mode): 0xa57d6920
2026-02-14T18:07:24.537 [DEBUG] [Thread-189776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:07:24.557 [DEBUG] [Thread-189776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:07:24.557 [INFO] [Thread-189776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:07:24.560 [DEBUG] [Thread-189776] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:07:24.560 [DEBUG] [Thread-189776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:07:24.560 [DEBUG] [Thread-189776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:07:24.560 [DEBUG] [Thread-189776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:07:24.560 [DEBUG] [Thread-189776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:07:24.560 [DEBUG] [Thread-189776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:07:24.560 [DEBUG] [Thread-189776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:07:24.560 [DEBUG] [Thread-189776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:07:24.561 [DEBUG] [Thread-189776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:07:24.561 [DEBUG] [Thread-189776] [transport.py] [_log()] client lang: <none>
2026-02-14T18:07:24.561 [DEBUG] [Thread-189776] [transport.py] [_log()] server lang: <none>
2026-02-14T18:07:24.561 [DEBUG] [Thread-189776] [transport.py] [_log()] kex follows: False
2026-02-14T18:07:24.561 [DEBUG] [Thread-189776] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:07:24.561 [DEBUG] [Thread-189776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:07:24.561 [DEBUG] [Thread-189776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:07:24.561 [DEBUG] [Thread-189776] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:07:24.561 [DEBUG] [Thread-189776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:07:24.561 [DEBUG] [Thread-189776] [transport.py] [_log()] Compression: none
2026-02-14T18:07:24.561 [DEBUG] [Thread-189776] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:07:24.577 [DEBUG] [Thread-189776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:07:24.578 [DEBUG] [Thread-189776] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:07:24.578 [DEBUG] [Thread-189776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:07:24.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:07:24.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:07:24.581 [DEBUG] [Thread-189776] [transport.py] [_log()] userauth is OK
2026-02-14T18:07:24.581 [DEBUG] [Thread-189776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:07:24.581 [DEBUG] [Thread-189776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:07:24.581 [DEBUG] [Thread-189776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:07:24.581 [DEBUG] [Thread-189776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:07:24.599 [INFO] [Thread-189776] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:07:24.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:07:24.719 [DEBUG] [Thread-189778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:07:25.230 [DEBUG] [Thread-189776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:07:25.230 [DEBUG] [Thread-189776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:07:25.230 [DEBUG] [Thread-189776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:07:25.270 [DEBUG] [Thread-189776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:07:25.271 [DEBUG] [Thread-189776] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:07:25.274 [DEBUG] [Thread-189776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:07:25.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:07:25.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:07:25.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:07:25.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:07:25.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:07:25.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:07:25.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:07:25.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:07:25.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:07:25.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.671285 -999.00  +15.00  19.35     46   +3.60 1 1 1 1 1   887    0 11.03 -11.07 ----- 21.2 19.4 158.6 36.4 17.7 -27.6 17.6 -26.7 18.8 -25.1 19.4 -27.3
2026-02-14T18:07:25.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:07:25.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:07:25.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.671285
2026-02-14T18:07:25.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:07:25.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:07:25.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:07:25.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:07:25.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:07:25.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:07:08', tmtdew=13.28, humidity=40.7, cloud=0.0, wind=32.01, temperature=15.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:06:39.024', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:07:25.304 [DEBUG] [Thread-189776] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:07:25.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-14T18:07:25.399 [DEBUG] [Thread-189780] [transport.py] [_log()] starting thread (client mode): 0xa2d79420
2026-02-14T18:07:25.399 [DEBUG] [Thread-189780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:07:25.415 [DEBUG] [Thread-189780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:07:25.415 [INFO] [Thread-189780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:07:25.422 [DEBUG] [Thread-189780] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:07:25.423 [DEBUG] [Thread-189780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:07:25.423 [DEBUG] [Thread-189780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:07:25.423 [DEBUG] [Thread-189780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:07:25.423 [DEBUG] [Thread-189780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:07:25.423 [DEBUG] [Thread-189780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:07:25.423 [DEBUG] [Thread-189780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:07:25.423 [DEBUG] [Thread-189780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:07:25.423 [DEBUG] [Thread-189780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:07:25.423 [DEBUG] [Thread-189780] [transport.py] [_log()] client lang: <none>
2026-02-14T18:07:25.424 [DEBUG] [Thread-189780] [transport.py] [_log()] server lang: <none>
2026-02-14T18:07:25.424 [DEBUG] [Thread-189780] [transport.py] [_log()] kex follows: False
2026-02-14T18:07:25.424 [DEBUG] [Thread-189780] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:07:25.424 [DEBUG] [Thread-189780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:07:25.424 [DEBUG] [Thread-189780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:07:25.424 [DEBUG] [Thread-189780] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:07:25.424 [DEBUG] [Thread-189780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:07:25.424 [DEBUG] [Thread-189780] [transport.py] [_log()] Compression: none
2026-02-14T18:07:25.425 [DEBUG] [Thread-189780] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:07:25.483 [DEBUG] [Thread-189780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:07:25.483 [DEBUG] [Thread-189780] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:07:25.484 [DEBUG] [Thread-189780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:07:25.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:07:25.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:07:25.540 [DEBUG] [Thread-189780] [transport.py] [_log()] userauth is OK
2026-02-14T18:07:25.540 [DEBUG] [Thread-189780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:07:25.540 [DEBUG] [Thread-189780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:07:25.540 [DEBUG] [Thread-189780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:07:25.540 [DEBUG] [Thread-189780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:07:25.559 [INFO] [Thread-189780] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:07:25.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-14T18:07:25.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:07:26.369 [DEBUG] [Thread-189780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:07:26.369 [DEBUG] [Thread-189780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:07:26.418 [DEBUG] [Thread-189780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:07:26.419 [DEBUG] [Thread-189780] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:07:26.428 [DEBUG] [Thread-189780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:07:26.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:07:26.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-14T18:07:26.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-14T18:07:26.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:07:26.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:07:26.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:07:26.468 [DEBUG] [Thread-189780] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:07:27.105 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:07:35.447 [DEBUG] [Thread-189782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:07:39.756 [DEBUG] [Thread-189783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:07:49.646 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:07:54.819 [DEBUG] [Thread-189784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:07:56.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:07:56.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:07:56.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:07:58.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 7, 43), 13.39, 40.16, 0.0, 34.23, 15.21, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:07:58.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:07:43
2026-02-14T18:07:58.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:07:59.086 [DEBUG] [Thread-189785] [transport.py] [_log()] starting thread (client mode): 0xa57d7580
2026-02-14T18:07:59.086 [DEBUG] [Thread-189785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:07:59.107 [DEBUG] [Thread-189785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:07:59.107 [INFO] [Thread-189785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:07:59.110 [DEBUG] [Thread-189785] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:07:59.111 [DEBUG] [Thread-189785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:07:59.111 [DEBUG] [Thread-189785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:07:59.111 [DEBUG] [Thread-189785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:07:59.111 [DEBUG] [Thread-189785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:07:59.111 [DEBUG] [Thread-189785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:07:59.111 [DEBUG] [Thread-189785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:07:59.111 [DEBUG] [Thread-189785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:07:59.111 [DEBUG] [Thread-189785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:07:59.111 [DEBUG] [Thread-189785] [transport.py] [_log()] client lang: <none>
2026-02-14T18:07:59.111 [DEBUG] [Thread-189785] [transport.py] [_log()] server lang: <none>
2026-02-14T18:07:59.111 [DEBUG] [Thread-189785] [transport.py] [_log()] kex follows: False
2026-02-14T18:07:59.111 [DEBUG] [Thread-189785] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:07:59.111 [DEBUG] [Thread-189785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:07:59.111 [DEBUG] [Thread-189785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:07:59.111 [DEBUG] [Thread-189785] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:07:59.111 [DEBUG] [Thread-189785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:07:59.111 [DEBUG] [Thread-189785] [transport.py] [_log()] Compression: none
2026-02-14T18:07:59.111 [DEBUG] [Thread-189785] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:07:59.127 [DEBUG] [Thread-189785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:07:59.128 [DEBUG] [Thread-189785] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:07:59.128 [DEBUG] [Thread-189785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:07:59.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:07:59.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:07:59.130 [DEBUG] [Thread-189785] [transport.py] [_log()] userauth is OK
2026-02-14T18:07:59.130 [DEBUG] [Thread-189785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:07:59.131 [DEBUG] [Thread-189785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:07:59.131 [DEBUG] [Thread-189785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:07:59.131 [DEBUG] [Thread-189785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:07:59.149 [INFO] [Thread-189785] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:07:59.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:07:59.913 [DEBUG] [Thread-189785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:07:59.914 [DEBUG] [Thread-189785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:07:59.914 [DEBUG] [Thread-189785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:07:59.954 [DEBUG] [Thread-189785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:07:59.955 [DEBUG] [Thread-189785] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:07:59.958 [DEBUG] [Thread-189785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:07:59.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:07:59.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:07:59.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:07:59.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:07:59.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:07:59.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:07:59.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:07:59.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:07:59.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:07:59.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.671632 -999.00  +14.90  26.37     46   +3.50 1 1 1 1 1   887    0 11.34 -8.97 ----- 26.7 26.4 155.2 39.5 17.7 -27.8 17.6 -26.8 18.8 -26.7 19.3 -27.9
2026-02-14T18:07:59.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:07:59.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:07:59.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.671632
2026-02-14T18:07:59.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:07:59.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:07:59.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:07:59.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:07:59.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:07:59.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:07:43', tmtdew=13.39, humidity=40.16, cloud=0.0, wind=34.23, temperature=15.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:07:09.005', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:07:59.982 [DEBUG] [Thread-189785] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:08:00.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T18:08:00.079 [DEBUG] [Thread-189788] [transport.py] [_log()] starting thread (client mode): 0xa2d01ae0
2026-02-14T18:08:00.079 [DEBUG] [Thread-189788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:08:00.098 [DEBUG] [Thread-189788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:08:00.098 [INFO] [Thread-189788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:08:00.105 [DEBUG] [Thread-189788] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:08:00.105 [DEBUG] [Thread-189788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:08:00.105 [DEBUG] [Thread-189788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:08:00.105 [DEBUG] [Thread-189788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:08:00.105 [DEBUG] [Thread-189788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:08:00.106 [DEBUG] [Thread-189788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:08:00.106 [DEBUG] [Thread-189788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:08:00.106 [DEBUG] [Thread-189788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:08:00.106 [DEBUG] [Thread-189788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:08:00.106 [DEBUG] [Thread-189788] [transport.py] [_log()] client lang: <none>
2026-02-14T18:08:00.106 [DEBUG] [Thread-189788] [transport.py] [_log()] server lang: <none>
2026-02-14T18:08:00.106 [DEBUG] [Thread-189788] [transport.py] [_log()] kex follows: False
2026-02-14T18:08:00.106 [DEBUG] [Thread-189788] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:08:00.106 [DEBUG] [Thread-189788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:08:00.106 [DEBUG] [Thread-189788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:08:00.106 [DEBUG] [Thread-189788] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:08:00.106 [DEBUG] [Thread-189788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:08:00.106 [DEBUG] [Thread-189788] [transport.py] [_log()] Compression: none
2026-02-14T18:08:00.106 [DEBUG] [Thread-189788] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:08:00.163 [DEBUG] [Thread-189788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:08:00.163 [DEBUG] [Thread-189788] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:08:00.163 [DEBUG] [Thread-189788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:08:00.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:08:00.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:08:00.220 [DEBUG] [Thread-189788] [transport.py] [_log()] userauth is OK
2026-02-14T18:08:00.220 [DEBUG] [Thread-189788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:08:00.221 [DEBUG] [Thread-189788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:08:00.221 [DEBUG] [Thread-189788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:08:00.221 [DEBUG] [Thread-189788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:08:00.241 [INFO] [Thread-189788] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:08:00.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-14T18:08:00.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:08:01.063 [DEBUG] [Thread-189788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:08:01.063 [DEBUG] [Thread-189788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:08:01.111 [DEBUG] [Thread-189788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:08:01.111 [DEBUG] [Thread-189788] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:08:01.120 [DEBUG] [Thread-189788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:08:01.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:08:01.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-14T18:08:01.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-14T18:08:01.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:08:01.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:08:01.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:08:01.157 [DEBUG] [Thread-189788] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:08:09.851 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:08:09.852 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:08:09.855 [DEBUG] [Thread-189790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:08:12.135 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:08:24.902 [DEBUG] [Thread-189791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:08:31.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:08:31.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:08:31.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-14T18:08:33.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 8, 18), 13.27, 40.45, 0.0, 31.87, 15.06, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:08:33.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:08:18
2026-02-14T18:08:33.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:08:33.871 [DEBUG] [Thread-189792] [transport.py] [_log()] starting thread (client mode): 0xa2d03640
2026-02-14T18:08:33.871 [DEBUG] [Thread-189792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:08:33.892 [DEBUG] [Thread-189792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:08:33.892 [INFO] [Thread-189792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:08:33.894 [DEBUG] [Thread-189792] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:08:33.894 [DEBUG] [Thread-189792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:08:33.894 [DEBUG] [Thread-189792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:08:33.894 [DEBUG] [Thread-189792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:08:33.895 [DEBUG] [Thread-189792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:08:33.895 [DEBUG] [Thread-189792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:08:33.895 [DEBUG] [Thread-189792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:08:33.895 [DEBUG] [Thread-189792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:08:33.895 [DEBUG] [Thread-189792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:08:33.895 [DEBUG] [Thread-189792] [transport.py] [_log()] client lang: <none>
2026-02-14T18:08:33.895 [DEBUG] [Thread-189792] [transport.py] [_log()] server lang: <none>
2026-02-14T18:08:33.895 [DEBUG] [Thread-189792] [transport.py] [_log()] kex follows: False
2026-02-14T18:08:33.895 [DEBUG] [Thread-189792] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:08:33.895 [DEBUG] [Thread-189792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:08:33.895 [DEBUG] [Thread-189792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:08:33.895 [DEBUG] [Thread-189792] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:08:33.895 [DEBUG] [Thread-189792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:08:33.895 [DEBUG] [Thread-189792] [transport.py] [_log()] Compression: none
2026-02-14T18:08:33.895 [DEBUG] [Thread-189792] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:08:33.912 [DEBUG] [Thread-189792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:08:33.912 [DEBUG] [Thread-189792] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:08:33.913 [DEBUG] [Thread-189792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:08:33.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:08:33.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:08:33.958 [DEBUG] [Thread-189792] [transport.py] [_log()] userauth is OK
2026-02-14T18:08:33.958 [DEBUG] [Thread-189792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:08:33.958 [DEBUG] [Thread-189792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:08:33.958 [DEBUG] [Thread-189792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:08:33.958 [DEBUG] [Thread-189792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:08:33.984 [INFO] [Thread-189792] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:08:33.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:08:34.622 [DEBUG] [Thread-189792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:08:34.622 [DEBUG] [Thread-189792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:08:34.623 [DEBUG] [Thread-189792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:08:34.664 [DEBUG] [Thread-189792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:08:34.664 [DEBUG] [Thread-189792] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:08:34.668 [DEBUG] [Thread-189792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:08:34.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:08:34.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:08:34.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:08:34.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:08:34.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:08:34.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:08:34.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:08:34.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:08:34.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:08:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.671980 -999.00  +14.80  30.72     46   +3.60 1 1 2 1 1   887    0 10.89 -9.07 ----- 29.4 30.7 165.6 38.1 17.6 -27.6 17.5 -26.8 18.8 -25.2 19.3 -28.7
2026-02-14T18:08:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:08:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:08:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.671980
2026-02-14T18:08:34.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:08:34.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:08:34.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:08:34.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:08:34.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:08:34.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:08:18', tmtdew=13.27, humidity=40.45, cloud=0.0, wind=31.87, temperature=15.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:07:39.072', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:08:34.694 [DEBUG] [Thread-189792] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:08:34.720 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:08: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-14T18:08:34.789 [DEBUG] [Thread-189795] [transport.py] [_log()] starting thread (client mode): 0xa2d037c0
2026-02-14T18:08:34.789 [DEBUG] [Thread-189795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:08:34.804 [DEBUG] [Thread-189795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:08:34.804 [INFO] [Thread-189795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:08:34.812 [DEBUG] [Thread-189795] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:08:34.812 [DEBUG] [Thread-189795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:08:34.812 [DEBUG] [Thread-189795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:08:34.812 [DEBUG] [Thread-189795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:08:34.812 [DEBUG] [Thread-189795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:08:34.812 [DEBUG] [Thread-189795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:08:34.812 [DEBUG] [Thread-189795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:08:34.812 [DEBUG] [Thread-189795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:08:34.812 [DEBUG] [Thread-189795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:08:34.812 [DEBUG] [Thread-189795] [transport.py] [_log()] client lang: <none>
2026-02-14T18:08:34.813 [DEBUG] [Thread-189795] [transport.py] [_log()] server lang: <none>
2026-02-14T18:08:34.813 [DEBUG] [Thread-189795] [transport.py] [_log()] kex follows: False
2026-02-14T18:08:34.813 [DEBUG] [Thread-189795] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:08:34.813 [DEBUG] [Thread-189795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:08:34.813 [DEBUG] [Thread-189795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:08:34.813 [DEBUG] [Thread-189795] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:08:34.813 [DEBUG] [Thread-189795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:08:34.813 [DEBUG] [Thread-189795] [transport.py] [_log()] Compression: none
2026-02-14T18:08:34.813 [DEBUG] [Thread-189795] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:08:34.871 [DEBUG] [Thread-189795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:08:34.871 [DEBUG] [Thread-189795] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:08:34.872 [DEBUG] [Thread-189795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:08:34.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:08:34.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:08:34.928 [DEBUG] [Thread-189795] [transport.py] [_log()] userauth is OK
2026-02-14T18:08:34.928 [DEBUG] [Thread-189795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:08:34.928 [DEBUG] [Thread-189795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:08:34.928 [DEBUG] [Thread-189795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:08:34.928 [DEBUG] [Thread-189795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:08:34.951 [INFO] [Thread-189795] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:08:34.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T18:08:34.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:08:35.480 [DEBUG] [Thread-189797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:08:35.753 [DEBUG] [Thread-189795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:08:35.753 [DEBUG] [Thread-189795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:08:35.801 [DEBUG] [Thread-189795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:08:35.802 [DEBUG] [Thread-189795] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:08:35.811 [DEBUG] [Thread-189795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:08:35.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:08:35.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:08:35.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:08:35.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:08:35.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:08:35.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:08:35.848 [DEBUG] [Thread-189795] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:08:39.942 [DEBUG] [Thread-189798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:08:55.004 [DEBUG] [Thread-189799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:08:57.224 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:09:05.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:09:05.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:09:05.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-14T18:09:07.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 8, 53), 13.17, 40.98, 0.0, 39.45, 15.03, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:09:07.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:08:53
2026-02-14T18:09:08.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:09:08.184 [DEBUG] [Thread-189800] [transport.py] [_log()] starting thread (client mode): 0xa57c1ba0
2026-02-14T18:09:08.184 [DEBUG] [Thread-189800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:09:08.204 [DEBUG] [Thread-189800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:09:08.204 [INFO] [Thread-189800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:09:08.207 [DEBUG] [Thread-189800] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:09:08.207 [DEBUG] [Thread-189800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:09:08.207 [DEBUG] [Thread-189800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:09:08.207 [DEBUG] [Thread-189800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:09:08.207 [DEBUG] [Thread-189800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:09:08.208 [DEBUG] [Thread-189800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:09:08.208 [DEBUG] [Thread-189800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:09:08.208 [DEBUG] [Thread-189800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:09:08.208 [DEBUG] [Thread-189800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:09:08.208 [DEBUG] [Thread-189800] [transport.py] [_log()] client lang: <none>
2026-02-14T18:09:08.208 [DEBUG] [Thread-189800] [transport.py] [_log()] server lang: <none>
2026-02-14T18:09:08.208 [DEBUG] [Thread-189800] [transport.py] [_log()] kex follows: False
2026-02-14T18:09:08.208 [DEBUG] [Thread-189800] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:09:08.208 [DEBUG] [Thread-189800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:09:08.208 [DEBUG] [Thread-189800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:09:08.208 [DEBUG] [Thread-189800] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:09:08.208 [DEBUG] [Thread-189800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:09:08.208 [DEBUG] [Thread-189800] [transport.py] [_log()] Compression: none
2026-02-14T18:09:08.208 [DEBUG] [Thread-189800] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:09:08.224 [DEBUG] [Thread-189800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:09:08.225 [DEBUG] [Thread-189800] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:09:08.225 [DEBUG] [Thread-189800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:09:08.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:09:08.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:09:08.227 [DEBUG] [Thread-189800] [transport.py] [_log()] userauth is OK
2026-02-14T18:09:08.227 [DEBUG] [Thread-189800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:09:08.228 [DEBUG] [Thread-189800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:09:08.228 [DEBUG] [Thread-189800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:09:08.228 [DEBUG] [Thread-189800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:09:08.252 [INFO] [Thread-189800] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:09:08.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:09:08.835 [DEBUG] [Thread-189800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:09:08.836 [DEBUG] [Thread-189800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:09:08.836 [DEBUG] [Thread-189800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:09:08.876 [DEBUG] [Thread-189800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:09:08.877 [DEBUG] [Thread-189800] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:09:08.880 [DEBUG] [Thread-189800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:09:08.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:09:08.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:09:08.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:09:08.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:09:08.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:09:08.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:09:08.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:09:08.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:09:08.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:09:08.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.672327 -999.00  +14.80  32.97     47   +3.60 1 1 2 1 1   887    0 10.73 -9.22 ----- 21.9 33.0 179.2 39.6 17.6 -28.3 17.4 -28.6 18.8 -26.7 19.2 -27.7
2026-02-14T18:09:08.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:09:08.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:09:08.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.672327
2026-02-14T18:09:08.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:09:08.910 [DEBUG] [Thread-189800] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:09:08.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:09:08.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:09:08.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:09:08.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:09:08.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:08:53', tmtdew=13.17, humidity=40.98, cloud=0.0, wind=39.45, temperature=15.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:08:09.053', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:09:09.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-14T18:09:09.014 [DEBUG] [Thread-189803] [transport.py] [_log()] starting thread (client mode): 0xa57d7550
2026-02-14T18:09:09.014 [DEBUG] [Thread-189803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:09:09.028 [DEBUG] [Thread-189803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:09:09.029 [INFO] [Thread-189803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:09:09.036 [DEBUG] [Thread-189803] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:09:09.036 [DEBUG] [Thread-189803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:09:09.036 [DEBUG] [Thread-189803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:09:09.036 [DEBUG] [Thread-189803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:09:09.036 [DEBUG] [Thread-189803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:09:09.037 [DEBUG] [Thread-189803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:09:09.037 [DEBUG] [Thread-189803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:09:09.037 [DEBUG] [Thread-189803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:09:09.037 [DEBUG] [Thread-189803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:09:09.037 [DEBUG] [Thread-189803] [transport.py] [_log()] client lang: <none>
2026-02-14T18:09:09.037 [DEBUG] [Thread-189803] [transport.py] [_log()] server lang: <none>
2026-02-14T18:09:09.037 [DEBUG] [Thread-189803] [transport.py] [_log()] kex follows: False
2026-02-14T18:09:09.037 [DEBUG] [Thread-189803] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:09:09.037 [DEBUG] [Thread-189803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:09:09.037 [DEBUG] [Thread-189803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:09:09.037 [DEBUG] [Thread-189803] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:09:09.037 [DEBUG] [Thread-189803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:09:09.037 [DEBUG] [Thread-189803] [transport.py] [_log()] Compression: none
2026-02-14T18:09:09.037 [DEBUG] [Thread-189803] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:09:09.095 [DEBUG] [Thread-189803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:09:09.096 [DEBUG] [Thread-189803] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:09:09.097 [DEBUG] [Thread-189803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:09:09.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:09:09.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:09:09.152 [DEBUG] [Thread-189803] [transport.py] [_log()] userauth is OK
2026-02-14T18:09:09.153 [DEBUG] [Thread-189803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:09:09.153 [DEBUG] [Thread-189803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:09:09.153 [DEBUG] [Thread-189803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:09:09.153 [DEBUG] [Thread-189803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:09:09.187 [INFO] [Thread-189803] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:09:09.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-14T18:09:09.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:09:09.985 [DEBUG] [Thread-189803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:09:09.985 [DEBUG] [Thread-189803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:09:09.993 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:09:09.994 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:09:10.032 [DEBUG] [Thread-189803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:09:10.032 [DEBUG] [Thread-189803] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:09:10.041 [DEBUG] [Thread-189805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:09:10.041 [DEBUG] [Thread-189803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:09:10.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:09:10.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:09:10.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:09:10.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:09:10.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:09:10.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:09:10.077 [DEBUG] [Thread-189803] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:09:19.751 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:09:25.102 [DEBUG] [Thread-189806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:09:35.526 [DEBUG] [Thread-189807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:09:40.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:09:40.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:09:40.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-14T18:09:40.138 [DEBUG] [Thread-189808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:09:42.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 9, 28), 13.14, 41.04, 0.0, 32.55, 15.03, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:09:42.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:09:28
2026-02-14T18:09:42.532 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:09:42.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:09:42.725 [DEBUG] [Thread-189809] [transport.py] [_log()] starting thread (client mode): 0xa2d7ba60
2026-02-14T18:09:42.725 [DEBUG] [Thread-189809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:09:42.745 [DEBUG] [Thread-189809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:09:42.745 [INFO] [Thread-189809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:09:42.748 [DEBUG] [Thread-189809] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:09:42.748 [DEBUG] [Thread-189809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:09:42.748 [DEBUG] [Thread-189809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:09:42.748 [DEBUG] [Thread-189809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:09:42.748 [DEBUG] [Thread-189809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:09:42.749 [DEBUG] [Thread-189809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:09:42.749 [DEBUG] [Thread-189809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:09:42.749 [DEBUG] [Thread-189809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:09:42.749 [DEBUG] [Thread-189809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:09:42.749 [DEBUG] [Thread-189809] [transport.py] [_log()] client lang: <none>
2026-02-14T18:09:42.749 [DEBUG] [Thread-189809] [transport.py] [_log()] server lang: <none>
2026-02-14T18:09:42.749 [DEBUG] [Thread-189809] [transport.py] [_log()] kex follows: False
2026-02-14T18:09:42.749 [DEBUG] [Thread-189809] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:09:42.749 [DEBUG] [Thread-189809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:09:42.749 [DEBUG] [Thread-189809] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:09:42.749 [DEBUG] [Thread-189809] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:09:42.749 [DEBUG] [Thread-189809] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:09:42.749 [DEBUG] [Thread-189809] [transport.py] [_log()] Compression: none
2026-02-14T18:09:42.749 [DEBUG] [Thread-189809] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:09:42.768 [DEBUG] [Thread-189809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:09:42.769 [DEBUG] [Thread-189809] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:09:42.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:09:42.770 [DEBUG] [Thread-189809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:09:42.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:09:42.772 [DEBUG] [Thread-189809] [transport.py] [_log()] userauth is OK
2026-02-14T18:09:42.772 [DEBUG] [Thread-189809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:09:42.773 [DEBUG] [Thread-189809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:09:42.773 [DEBUG] [Thread-189809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:09:42.773 [DEBUG] [Thread-189809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:09:42.796 [INFO] [Thread-189809] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:09:42.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:09:43.419 [DEBUG] [Thread-189809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:09:43.419 [DEBUG] [Thread-189809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:09:43.419 [DEBUG] [Thread-189809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:09:43.460 [DEBUG] [Thread-189809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:09:43.460 [DEBUG] [Thread-189809] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:09:43.464 [DEBUG] [Thread-189809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:09:43.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:09:43.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:09:43.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:09:43.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:09:43.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:09:43.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:09:43.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:09:43.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:09:43.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:09:43.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.672674 -999.00  +14.80  24.82     47   +3.60 1 1 1 1 1   887    0 11.27 -9.22 ----- 34.4 24.8 180.6 39.7 17.6 -27.7 17.4 -28.2 18.7 -25.7 19.1 -29.5
2026-02-14T18:09:43.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:09:43.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:09:43.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.672674
2026-02-14T18:09:43.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:09:43.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:09:43.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:09:43.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:09:43.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:09:43.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:09:28', tmtdew=13.14, humidity=41.04, cloud=0.0, wind=32.55, temperature=15.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:08:39.034', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:09:43.490 [DEBUG] [Thread-189809] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:09:43.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-14T18:09:43.586 [DEBUG] [Thread-189812] [transport.py] [_log()] starting thread (client mode): 0xa2deeaa0
2026-02-14T18:09:43.586 [DEBUG] [Thread-189812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:09:43.601 [DEBUG] [Thread-189812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:09:43.601 [INFO] [Thread-189812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:09:43.608 [DEBUG] [Thread-189812] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:09:43.608 [DEBUG] [Thread-189812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:09:43.609 [DEBUG] [Thread-189812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:09:43.609 [DEBUG] [Thread-189812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:09:43.609 [DEBUG] [Thread-189812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:09:43.609 [DEBUG] [Thread-189812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:09:43.609 [DEBUG] [Thread-189812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:09:43.609 [DEBUG] [Thread-189812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:09:43.609 [DEBUG] [Thread-189812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:09:43.609 [DEBUG] [Thread-189812] [transport.py] [_log()] client lang: <none>
2026-02-14T18:09:43.610 [DEBUG] [Thread-189812] [transport.py] [_log()] server lang: <none>
2026-02-14T18:09:43.610 [DEBUG] [Thread-189812] [transport.py] [_log()] kex follows: False
2026-02-14T18:09:43.610 [DEBUG] [Thread-189812] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:09:43.610 [DEBUG] [Thread-189812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:09:43.610 [DEBUG] [Thread-189812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:09:43.611 [DEBUG] [Thread-189812] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:09:43.611 [DEBUG] [Thread-189812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:09:43.611 [DEBUG] [Thread-189812] [transport.py] [_log()] Compression: none
2026-02-14T18:09:43.611 [DEBUG] [Thread-189812] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:09:43.668 [DEBUG] [Thread-189812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:09:43.668 [DEBUG] [Thread-189812] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:09:43.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:09:43.670 [DEBUG] [Thread-189812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:09:43.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:09:43.724 [DEBUG] [Thread-189812] [transport.py] [_log()] userauth is OK
2026-02-14T18:09:43.724 [DEBUG] [Thread-189812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:09:43.724 [DEBUG] [Thread-189812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:09:43.725 [DEBUG] [Thread-189812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:09:43.725 [DEBUG] [Thread-189812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:09:43.743 [INFO] [Thread-189812] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:09:43.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-14T18:09:43.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:09:44.577 [DEBUG] [Thread-189812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:09:44.586 [DEBUG] [Thread-189812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:09:44.625 [DEBUG] [Thread-189812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:09:44.626 [DEBUG] [Thread-189812] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:09:44.635 [DEBUG] [Thread-189812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:09:44.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:09:44.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:09:44.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:09:44.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:09:44.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:09:44.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:09:44.672 [DEBUG] [Thread-189812] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:09:55.174 [DEBUG] [Thread-189814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:05.422 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:10.147 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:10.148 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:10.222 [DEBUG] [Thread-189815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:14.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:10:14.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:10:14.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-14T18:10:16.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 10, 3), 13.19, 40.93, 0.0, 36.61, 15.06, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:10:16.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:10:03
2026-02-14T18:10:16.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:10:17.071 [DEBUG] [Thread-189816] [transport.py] [_log()] starting thread (client mode): 0xa57c0a30
2026-02-14T18:10:17.071 [DEBUG] [Thread-189816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:10:17.091 [DEBUG] [Thread-189816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:10:17.091 [INFO] [Thread-189816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:10:17.101 [DEBUG] [Thread-189816] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:10:17.102 [DEBUG] [Thread-189816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:10:17.102 [DEBUG] [Thread-189816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:10:17.102 [DEBUG] [Thread-189816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:10:17.102 [DEBUG] [Thread-189816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:10:17.102 [DEBUG] [Thread-189816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:10:17.102 [DEBUG] [Thread-189816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:10:17.102 [DEBUG] [Thread-189816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:10:17.102 [DEBUG] [Thread-189816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:10:17.102 [DEBUG] [Thread-189816] [transport.py] [_log()] client lang: <none>
2026-02-14T18:10:17.102 [DEBUG] [Thread-189816] [transport.py] [_log()] server lang: <none>
2026-02-14T18:10:17.102 [DEBUG] [Thread-189816] [transport.py] [_log()] kex follows: False
2026-02-14T18:10:17.102 [DEBUG] [Thread-189816] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:10:17.102 [DEBUG] [Thread-189816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:10:17.102 [DEBUG] [Thread-189816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:10:17.102 [DEBUG] [Thread-189816] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:10:17.102 [DEBUG] [Thread-189816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:10:17.102 [DEBUG] [Thread-189816] [transport.py] [_log()] Compression: none
2026-02-14T18:10:17.102 [DEBUG] [Thread-189816] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:10:17.121 [DEBUG] [Thread-189816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:10:17.122 [DEBUG] [Thread-189816] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:10:17.122 [DEBUG] [Thread-189816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:10:17.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:10:17.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:10:17.124 [DEBUG] [Thread-189816] [transport.py] [_log()] userauth is OK
2026-02-14T18:10:17.124 [DEBUG] [Thread-189816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:10:17.124 [DEBUG] [Thread-189816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:10:17.124 [DEBUG] [Thread-189816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:10:17.125 [DEBUG] [Thread-189816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:10:17.148 [INFO] [Thread-189816] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:10:17.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:10:17.719 [DEBUG] [Thread-189816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:10:17.720 [DEBUG] [Thread-189816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:10:17.720 [DEBUG] [Thread-189816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:10:17.761 [DEBUG] [Thread-189816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:10:17.761 [DEBUG] [Thread-189816] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:10:17.764 [DEBUG] [Thread-189816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:10:17.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:10:17.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:10:17.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:10:17.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:10:17.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:10:17.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:10:17.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:10:17.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:10:17.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:10:17.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.673727 -999.00  +14.30  21.56     48   +3.60 1 1 1 1 1   887    0 10.81 -12.55 ----- 18.2 21.6 164.8 35.0 17.3 -28.1 17.1 -26.2 18.4 -24.9 19.0 -27.4
2026-02-14T18:10:17.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:10:17.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:10:17.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.673727
2026-02-14T18:10:17.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:10:17.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:10:17.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:10:17.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:10:17.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:10:17.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:10:03', tmtdew=13.19, humidity=40.93, cloud=0.0, wind=36.61, temperature=15.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:10:10.013', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:10:17.787 [DEBUG] [Thread-189816] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:10:17.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T18:10:17.885 [DEBUG] [Thread-189819] [transport.py] [_log()] starting thread (client mode): 0xa5759db0
2026-02-14T18:10:17.885 [DEBUG] [Thread-189819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:10:17.900 [DEBUG] [Thread-189819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:10:17.900 [INFO] [Thread-189819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:10:17.907 [DEBUG] [Thread-189819] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:10:17.907 [DEBUG] [Thread-189819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:10:17.908 [DEBUG] [Thread-189819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:10:17.908 [DEBUG] [Thread-189819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:10:17.908 [DEBUG] [Thread-189819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:10:17.908 [DEBUG] [Thread-189819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:10:17.908 [DEBUG] [Thread-189819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:10:17.908 [DEBUG] [Thread-189819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:10:17.908 [DEBUG] [Thread-189819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:10:17.908 [DEBUG] [Thread-189819] [transport.py] [_log()] client lang: <none>
2026-02-14T18:10:17.908 [DEBUG] [Thread-189819] [transport.py] [_log()] server lang: <none>
2026-02-14T18:10:17.908 [DEBUG] [Thread-189819] [transport.py] [_log()] kex follows: False
2026-02-14T18:10:17.908 [DEBUG] [Thread-189819] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:10:17.908 [DEBUG] [Thread-189819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:10:17.908 [DEBUG] [Thread-189819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:10:17.908 [DEBUG] [Thread-189819] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:10:17.908 [DEBUG] [Thread-189819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:10:17.908 [DEBUG] [Thread-189819] [transport.py] [_log()] Compression: none
2026-02-14T18:10:17.908 [DEBUG] [Thread-189819] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:10:17.967 [DEBUG] [Thread-189819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:10:17.967 [DEBUG] [Thread-189819] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:10:17.968 [DEBUG] [Thread-189819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:10:17.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:10:17.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:10:18.023 [DEBUG] [Thread-189819] [transport.py] [_log()] userauth is OK
2026-02-14T18:10:18.024 [DEBUG] [Thread-189819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:10:18.024 [DEBUG] [Thread-189819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:10:18.024 [DEBUG] [Thread-189819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:10:18.024 [DEBUG] [Thread-189819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:10:18.042 [INFO] [Thread-189819] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:10:18.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-14T18:10:18.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:10:18.870 [DEBUG] [Thread-189819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:10:18.870 [DEBUG] [Thread-189819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:10:18.917 [DEBUG] [Thread-189819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:10:18.918 [DEBUG] [Thread-189819] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:10:18.927 [DEBUG] [Thread-189819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:10:18.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:10:18.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:10:18.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:10:18.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:10:18.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:10:18.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:10:18.964 [DEBUG] [Thread-189819] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:10:25.256 [DEBUG] [Thread-189821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:28.168 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:28.678 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:31.061 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:31.814 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:32.496 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:33.072 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:34.456 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:35.559 [DEBUG] [Thread-189822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:36.084 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:36.473 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:36.887 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:38.328 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:38.948 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:40.204 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:40.320 [DEBUG] [Thread-189823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:48.765 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:48.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:10:48.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:10:48.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-14T18:10:50.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 10, 39), 13.88, 39.09, 0.0, 28.51, 15.76, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:10:50.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:10:39
2026-02-14T18:10:51.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:10:51.361 [DEBUG] [Thread-189824] [transport.py] [_log()] starting thread (client mode): 0xa57c0160
2026-02-14T18:10:51.361 [DEBUG] [Thread-189824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:10:51.375 [DEBUG] [Thread-189824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:10:51.376 [INFO] [Thread-189824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:10:51.379 [DEBUG] [Thread-189824] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:10:51.379 [DEBUG] [Thread-189824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:10:51.379 [DEBUG] [Thread-189824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:10:51.379 [DEBUG] [Thread-189824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:10:51.379 [DEBUG] [Thread-189824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:10:51.379 [DEBUG] [Thread-189824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:10:51.379 [DEBUG] [Thread-189824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:10:51.379 [DEBUG] [Thread-189824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:10:51.379 [DEBUG] [Thread-189824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:10:51.379 [DEBUG] [Thread-189824] [transport.py] [_log()] client lang: <none>
2026-02-14T18:10:51.379 [DEBUG] [Thread-189824] [transport.py] [_log()] server lang: <none>
2026-02-14T18:10:51.379 [DEBUG] [Thread-189824] [transport.py] [_log()] kex follows: False
2026-02-14T18:10:51.379 [DEBUG] [Thread-189824] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:10:51.379 [DEBUG] [Thread-189824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:10:51.379 [DEBUG] [Thread-189824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:10:51.379 [DEBUG] [Thread-189824] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:10:51.379 [DEBUG] [Thread-189824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:10:51.379 [DEBUG] [Thread-189824] [transport.py] [_log()] Compression: none
2026-02-14T18:10:51.379 [DEBUG] [Thread-189824] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:10:51.395 [DEBUG] [Thread-189824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:10:51.395 [DEBUG] [Thread-189824] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:10:51.395 [DEBUG] [Thread-189824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:10:51.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:10:51.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:10:51.396 [DEBUG] [Thread-189824] [transport.py] [_log()] userauth is OK
2026-02-14T18:10:51.396 [DEBUG] [Thread-189824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:10:51.396 [DEBUG] [Thread-189824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:10:51.396 [DEBUG] [Thread-189824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:10:51.396 [DEBUG] [Thread-189824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:10:51.417 [INFO] [Thread-189824] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:10:51.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:10:52.017 [DEBUG] [Thread-189824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:10:52.018 [DEBUG] [Thread-189824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:10:52.018 [DEBUG] [Thread-189824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:10:52.058 [DEBUG] [Thread-189824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:10:52.059 [DEBUG] [Thread-189824] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:10:52.061 [DEBUG] [Thread-189824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:10:52.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:10:52.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:10:52.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:10:52.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:10:52.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:10:52.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:10:52.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:10:52.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:10:52.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:10:52.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.674063 -999.00  +14.50  20.43     48   +3.70 1 1 1 1 1   887    0 10.91 -12.10 ----- 22.4 20.4 155.8 33.1 17.3 -27.7 17.1 -25.9 18.4 -25.4 18.9 -26.9
2026-02-14T18:10:52.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:10:52.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:10:52.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.674063
2026-02-14T18:10:52.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:10:52.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:10:52.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:10:52.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:10:52.080 [DEBUG] [Thread-189824] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:10:52.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:10:52.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:10:39', tmtdew=13.88, humidity=39.09, cloud=0.0, wind=28.51, temperature=15.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:10:39.043', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:10:52.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T18:10:52.173 [DEBUG] [Thread-189827] [transport.py] [_log()] starting thread (client mode): 0xa57b25c0
2026-02-14T18:10:52.173 [DEBUG] [Thread-189827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:10:52.187 [DEBUG] [Thread-189827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:10:52.188 [INFO] [Thread-189827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:10:52.195 [DEBUG] [Thread-189827] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:10:52.195 [DEBUG] [Thread-189827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:10:52.195 [DEBUG] [Thread-189827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:10:52.195 [DEBUG] [Thread-189827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:10:52.196 [DEBUG] [Thread-189827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:10:52.196 [DEBUG] [Thread-189827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:10:52.196 [DEBUG] [Thread-189827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:10:52.196 [DEBUG] [Thread-189827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:10:52.196 [DEBUG] [Thread-189827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:10:52.196 [DEBUG] [Thread-189827] [transport.py] [_log()] client lang: <none>
2026-02-14T18:10:52.196 [DEBUG] [Thread-189827] [transport.py] [_log()] server lang: <none>
2026-02-14T18:10:52.196 [DEBUG] [Thread-189827] [transport.py] [_log()] kex follows: False
2026-02-14T18:10:52.196 [DEBUG] [Thread-189827] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:10:52.197 [DEBUG] [Thread-189827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:10:52.197 [DEBUG] [Thread-189827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:10:52.197 [DEBUG] [Thread-189827] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:10:52.197 [DEBUG] [Thread-189827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:10:52.197 [DEBUG] [Thread-189827] [transport.py] [_log()] Compression: none
2026-02-14T18:10:52.197 [DEBUG] [Thread-189827] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:10:52.256 [DEBUG] [Thread-189827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:10:52.257 [DEBUG] [Thread-189827] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:10:52.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:10:52.258 [DEBUG] [Thread-189827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:10:52.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:10:52.312 [DEBUG] [Thread-189827] [transport.py] [_log()] userauth is OK
2026-02-14T18:10:52.312 [DEBUG] [Thread-189827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:10:52.312 [DEBUG] [Thread-189827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:10:52.312 [DEBUG] [Thread-189827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:10:52.312 [DEBUG] [Thread-189827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:10:52.331 [INFO] [Thread-189827] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:10:52.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-14T18:10:52.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:10:53.134 [DEBUG] [Thread-189827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:10:53.134 [DEBUG] [Thread-189827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:10:53.182 [DEBUG] [Thread-189827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:10:53.182 [DEBUG] [Thread-189827] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:10:53.190 [DEBUG] [Thread-189827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:10:53.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:10:53.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:10:53.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:10:53.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:10:53.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:10:53.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:10:53.223 [DEBUG] [Thread-189827] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:10:55.358 [DEBUG] [Thread-189829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:10:55.472 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:02.030 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:08.747 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:10.287 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:10.288 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:10.411 [DEBUG] [Thread-189830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:15.177 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:21.817 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:23.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:11:23.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:11:23.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-14T18:11:25.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 11, 14), 12.95, 41.53, 0.0, 38.45, 14.88, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:11:25.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:11:14
2026-02-14T18:11:25.448 [DEBUG] [Thread-189831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:25.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:11:25.810 [DEBUG] [Thread-189832] [transport.py] [_log()] starting thread (client mode): 0xa57b2890
2026-02-14T18:11:25.810 [DEBUG] [Thread-189832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:11:25.831 [DEBUG] [Thread-189832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:11:25.831 [INFO] [Thread-189832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:11:25.834 [DEBUG] [Thread-189832] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:11:25.834 [DEBUG] [Thread-189832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:11:25.834 [DEBUG] [Thread-189832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:11:25.834 [DEBUG] [Thread-189832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:11:25.834 [DEBUG] [Thread-189832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:11:25.834 [DEBUG] [Thread-189832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:11:25.834 [DEBUG] [Thread-189832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:11:25.834 [DEBUG] [Thread-189832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:11:25.834 [DEBUG] [Thread-189832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:11:25.834 [DEBUG] [Thread-189832] [transport.py] [_log()] client lang: <none>
2026-02-14T18:11:25.834 [DEBUG] [Thread-189832] [transport.py] [_log()] server lang: <none>
2026-02-14T18:11:25.834 [DEBUG] [Thread-189832] [transport.py] [_log()] kex follows: False
2026-02-14T18:11:25.834 [DEBUG] [Thread-189832] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:11:25.834 [DEBUG] [Thread-189832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:11:25.834 [DEBUG] [Thread-189832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:11:25.835 [DEBUG] [Thread-189832] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:11:25.835 [DEBUG] [Thread-189832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:11:25.835 [DEBUG] [Thread-189832] [transport.py] [_log()] Compression: none
2026-02-14T18:11:25.835 [DEBUG] [Thread-189832] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:11:25.851 [DEBUG] [Thread-189832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:11:25.852 [DEBUG] [Thread-189832] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:11:25.852 [DEBUG] [Thread-189832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:11:25.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:11:25.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:11:25.854 [DEBUG] [Thread-189832] [transport.py] [_log()] userauth is OK
2026-02-14T18:11:25.855 [DEBUG] [Thread-189832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:11:25.855 [DEBUG] [Thread-189832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:11:25.855 [DEBUG] [Thread-189832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:11:25.855 [DEBUG] [Thread-189832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:11:25.879 [INFO] [Thread-189832] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:11:25.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:11:26.554 [DEBUG] [Thread-189832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:11:26.555 [DEBUG] [Thread-189832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:11:26.555 [DEBUG] [Thread-189832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:11:26.596 [DEBUG] [Thread-189832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:11:26.596 [DEBUG] [Thread-189832] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:11:26.599 [DEBUG] [Thread-189832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:11:26.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:11:26.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:11:26.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:11:26.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:11:26.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:11:26.626 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:11:26.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:11:26.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:11:26.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:11:26.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.674410 -999.00  +14.50  33.14     47   +3.50 1 1 2 1 1   887    0 10.95 -12.84 ----- 38.1 33.1 167.8 38.7 17.3 -27.8 17.1 -26.4 18.4 -25.3 18.9 -27.9
2026-02-14T18:11:26.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:11:26.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:11:26.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.674410
2026-02-14T18:11:26.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:11:26.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:11:26.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:11:26.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:11:26.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:11:26.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:11:14', tmtdew=12.95, humidity=41.53, cloud=0.0, wind=38.45, temperature=14.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:11:09.024', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:11:26.629 [DEBUG] [Thread-189832] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:11:26.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-14T18:11:26.719 [DEBUG] [Thread-189835] [transport.py] [_log()] starting thread (client mode): 0xa57b2350
2026-02-14T18:11:26.719 [DEBUG] [Thread-189835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:11:26.734 [DEBUG] [Thread-189835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:11:26.734 [INFO] [Thread-189835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:11:26.741 [DEBUG] [Thread-189835] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:11:26.742 [DEBUG] [Thread-189835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:11:26.742 [DEBUG] [Thread-189835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:11:26.742 [DEBUG] [Thread-189835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:11:26.742 [DEBUG] [Thread-189835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:11:26.742 [DEBUG] [Thread-189835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:11:26.742 [DEBUG] [Thread-189835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:11:26.742 [DEBUG] [Thread-189835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:11:26.742 [DEBUG] [Thread-189835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:11:26.742 [DEBUG] [Thread-189835] [transport.py] [_log()] client lang: <none>
2026-02-14T18:11:26.742 [DEBUG] [Thread-189835] [transport.py] [_log()] server lang: <none>
2026-02-14T18:11:26.742 [DEBUG] [Thread-189835] [transport.py] [_log()] kex follows: False
2026-02-14T18:11:26.742 [DEBUG] [Thread-189835] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:11:26.742 [DEBUG] [Thread-189835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:11:26.742 [DEBUG] [Thread-189835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:11:26.742 [DEBUG] [Thread-189835] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:11:26.742 [DEBUG] [Thread-189835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:11:26.742 [DEBUG] [Thread-189835] [transport.py] [_log()] Compression: none
2026-02-14T18:11:26.742 [DEBUG] [Thread-189835] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:11:26.804 [DEBUG] [Thread-189835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:11:26.804 [DEBUG] [Thread-189835] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:11:26.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:11:26.806 [DEBUG] [Thread-189835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:11:26.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:11:26.860 [DEBUG] [Thread-189835] [transport.py] [_log()] userauth is OK
2026-02-14T18:11:26.860 [DEBUG] [Thread-189835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:11:26.860 [DEBUG] [Thread-189835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:11:26.861 [DEBUG] [Thread-189835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:11:26.861 [DEBUG] [Thread-189835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:11:26.879 [INFO] [Thread-189835] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:11:26.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-14T18:11:26.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:11:27.732 [DEBUG] [Thread-189835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:11:27.732 [DEBUG] [Thread-189835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:11:27.779 [DEBUG] [Thread-189835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:11:27.779 [DEBUG] [Thread-189835] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:11:27.788 [DEBUG] [Thread-189835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:11:27.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:11:27.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-14T18:11:27.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-14T18:11:27.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:11:27.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:11:27.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:11:27.822 [DEBUG] [Thread-189835] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:11:28.220 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:34.892 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:35.591 [DEBUG] [Thread-189837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:40.488 [DEBUG] [Thread-189838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:41.294 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:48.114 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:48.811 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:50.377 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:50.783 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:51.485 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:52.274 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:52.958 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:53.390 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:54.040 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:54.581 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:55.296 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:55.541 [DEBUG] [Thread-189839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:55.710 [DEBUG] [Thread-189743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:11:57.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:11:57.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:11:57.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-14T18:11:59.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 11, 50), 13.14, 41.04, 0.0, 28.11, 15.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:11:59.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:11:50
2026-02-14T18:12:00.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:12:00.211 [DEBUG] [Thread-189840] [transport.py] [_log()] starting thread (client mode): 0xa57c0250
2026-02-14T18:12:00.212 [DEBUG] [Thread-189840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:12:00.232 [DEBUG] [Thread-189840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:12:00.233 [INFO] [Thread-189840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:12:00.235 [DEBUG] [Thread-189840] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:12:00.235 [DEBUG] [Thread-189840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:12:00.235 [DEBUG] [Thread-189840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:12:00.235 [DEBUG] [Thread-189840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:12:00.235 [DEBUG] [Thread-189840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:12:00.235 [DEBUG] [Thread-189840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:12:00.235 [DEBUG] [Thread-189840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:12:00.235 [DEBUG] [Thread-189840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:12:00.235 [DEBUG] [Thread-189840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:12:00.236 [DEBUG] [Thread-189840] [transport.py] [_log()] client lang: <none>
2026-02-14T18:12:00.236 [DEBUG] [Thread-189840] [transport.py] [_log()] server lang: <none>
2026-02-14T18:12:00.236 [DEBUG] [Thread-189840] [transport.py] [_log()] kex follows: False
2026-02-14T18:12:00.236 [DEBUG] [Thread-189840] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:12:00.236 [DEBUG] [Thread-189840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:12:00.236 [DEBUG] [Thread-189840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:12:00.236 [DEBUG] [Thread-189840] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:12:00.236 [DEBUG] [Thread-189840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:12:00.236 [DEBUG] [Thread-189840] [transport.py] [_log()] Compression: none
2026-02-14T18:12:00.236 [DEBUG] [Thread-189840] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:12:00.252 [DEBUG] [Thread-189840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:12:00.252 [DEBUG] [Thread-189840] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:12:00.253 [DEBUG] [Thread-189840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:12:00.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:12:00.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:12:00.253 [DEBUG] [Thread-189840] [transport.py] [_log()] userauth is OK
2026-02-14T18:12:00.253 [DEBUG] [Thread-189840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:12:00.253 [DEBUG] [Thread-189840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:12:00.253 [DEBUG] [Thread-189840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:12:00.253 [DEBUG] [Thread-189840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:12:00.262 [INFO] [Thread-189840] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:12:00.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:12:00.863 [DEBUG] [Thread-189840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:12:00.864 [DEBUG] [Thread-189840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:12:00.864 [DEBUG] [Thread-189840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:12:00.904 [DEBUG] [Thread-189840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:12:00.904 [DEBUG] [Thread-189840] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:12:00.908 [DEBUG] [Thread-189840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:12:00.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:12:00.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:12:00.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:12:00.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:12:00.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:12:00.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:12:00.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:12:00.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:12:00.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:12:00.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.674757 -999.00  +14.50  21.32     47   +3.60 1 1 1 1 1   887    0 10.81 -13.30 ----- 29.2 21.3 177.0 35.3 17.3 -28.0 17.1 -28.0 18.4 -25.4 18.9 -27.5
2026-02-14T18:12:00.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:12:00.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:12:00.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.674757
2026-02-14T18:12:00.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:12:00.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:12:00.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:12:00.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:12:00.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:12:00.932 [DEBUG] [Thread-189840] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:12:00.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:11:50', tmtdew=13.14, humidity=41.04, cloud=0.0, wind=28.11, temperature=15.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:11:39.005', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:12:01.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-14T18:12:01.032 [DEBUG] [Thread-189843] [transport.py] [_log()] starting thread (client mode): 0xa57b23b0
2026-02-14T18:12:01.033 [DEBUG] [Thread-189843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:12:01.052 [DEBUG] [Thread-189843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:12:01.052 [INFO] [Thread-189843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:12:01.062 [DEBUG] [Thread-189843] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:12:01.063 [DEBUG] [Thread-189843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:12:01.063 [DEBUG] [Thread-189843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:12:01.063 [DEBUG] [Thread-189843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:12:01.063 [DEBUG] [Thread-189843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:12:01.063 [DEBUG] [Thread-189843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:12:01.063 [DEBUG] [Thread-189843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:12:01.063 [DEBUG] [Thread-189843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:12:01.063 [DEBUG] [Thread-189843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:12:01.063 [DEBUG] [Thread-189843] [transport.py] [_log()] client lang: <none>
2026-02-14T18:12:01.063 [DEBUG] [Thread-189843] [transport.py] [_log()] server lang: <none>
2026-02-14T18:12:01.063 [DEBUG] [Thread-189843] [transport.py] [_log()] kex follows: False
2026-02-14T18:12:01.063 [DEBUG] [Thread-189843] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:12:01.063 [DEBUG] [Thread-189843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:12:01.063 [DEBUG] [Thread-189843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:12:01.064 [DEBUG] [Thread-189843] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:12:01.064 [DEBUG] [Thread-189843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:12:01.064 [DEBUG] [Thread-189843] [transport.py] [_log()] Compression: none
2026-02-14T18:12:01.064 [DEBUG] [Thread-189843] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:12:01.130 [DEBUG] [Thread-189843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:12:01.130 [DEBUG] [Thread-189843] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:12:01.131 [DEBUG] [Thread-189843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:12:01.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:12:01.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:12:01.192 [DEBUG] [Thread-189843] [transport.py] [_log()] userauth is OK
2026-02-14T18:12:01.192 [DEBUG] [Thread-189843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:12:01.192 [DEBUG] [Thread-189843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:12:01.192 [DEBUG] [Thread-189843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:12:01.192 [DEBUG] [Thread-189843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:12:01.214 [INFO] [Thread-189843] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:12:01.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-14T18:12:01.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:12:02.090 [DEBUG] [Thread-189843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:12:02.090 [DEBUG] [Thread-189843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:12:02.141 [DEBUG] [Thread-189843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:12:02.142 [DEBUG] [Thread-189843] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:12:02.155 [DEBUG] [Thread-189843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:12:02.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:12: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')
2026-02-14T18:12:02.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-14T18:12:02.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:12:02.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:12:02.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:12:02.201 [DEBUG] [Thread-189843] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:12:10.430 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:12:10.431 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:12:10.576 [DEBUG] [Thread-189845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:12:25.624 [DEBUG] [Thread-189846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:12:32.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:12:32.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:12:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:12:34.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 12, 25), 13.1, 41.13, 0.0, 32.36, 14.91, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:12:34.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:12:25
2026-02-14T18:12:34.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:12:34.773 [DEBUG] [Thread-189847] [transport.py] [_log()] starting thread (client mode): 0xa57c2c80
2026-02-14T18:12:34.773 [DEBUG] [Thread-189847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:12:34.793 [DEBUG] [Thread-189847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:12:34.793 [INFO] [Thread-189847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:12:34.796 [DEBUG] [Thread-189847] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:12:34.797 [DEBUG] [Thread-189847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:12:34.797 [DEBUG] [Thread-189847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:12:34.797 [DEBUG] [Thread-189847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:12:34.797 [DEBUG] [Thread-189847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:12:34.797 [DEBUG] [Thread-189847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:12:34.797 [DEBUG] [Thread-189847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:12:34.797 [DEBUG] [Thread-189847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:12:34.797 [DEBUG] [Thread-189847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:12:34.797 [DEBUG] [Thread-189847] [transport.py] [_log()] client lang: <none>
2026-02-14T18:12:34.797 [DEBUG] [Thread-189847] [transport.py] [_log()] server lang: <none>
2026-02-14T18:12:34.797 [DEBUG] [Thread-189847] [transport.py] [_log()] kex follows: False
2026-02-14T18:12:34.797 [DEBUG] [Thread-189847] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:12:34.797 [DEBUG] [Thread-189847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:12:34.797 [DEBUG] [Thread-189847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:12:34.797 [DEBUG] [Thread-189847] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:12:34.797 [DEBUG] [Thread-189847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:12:34.797 [DEBUG] [Thread-189847] [transport.py] [_log()] Compression: none
2026-02-14T18:12:34.797 [DEBUG] [Thread-189847] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:12:34.812 [DEBUG] [Thread-189847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:12:34.812 [DEBUG] [Thread-189847] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:12:34.812 [DEBUG] [Thread-189847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:12:34.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:12:34.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:12:34.813 [DEBUG] [Thread-189847] [transport.py] [_log()] userauth is OK
2026-02-14T18:12:34.813 [DEBUG] [Thread-189847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:12:34.813 [DEBUG] [Thread-189847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:12:34.813 [DEBUG] [Thread-189847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:12:34.813 [DEBUG] [Thread-189847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:12:34.828 [INFO] [Thread-189847] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:12:34.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:12:35.485 [DEBUG] [Thread-189847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:12:35.485 [DEBUG] [Thread-189847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:12:35.486 [DEBUG] [Thread-189847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:12:35.526 [DEBUG] [Thread-189847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:12:35.527 [DEBUG] [Thread-189847] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:12:35.530 [DEBUG] [Thread-189847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:12:35.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:12:35.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:12:35.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:12:35.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:12:35.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:12:35.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:12:35.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:12:35.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:12:35.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:12:35.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.675105 -999.00  +14.50  23.66     47   +3.50 1 1 1 1 1   887    0 10.74 -13.93 ----- 29.9 23.7 179.8 29.2 17.3 -27.4 17.1 -28.9 18.4 -27.1 18.8 -29.0
2026-02-14T18:12:35.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:12:35.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:12:35.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.675105
2026-02-14T18:12:35.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:12:35.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:12:35.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:12:35.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:12:35.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:12:35.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:12:25', tmtdew=13.1, humidity=41.13, cloud=0.0, wind=32.36, temperature=14.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:12:09.072', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:12:35.558 [DEBUG] [Thread-189847] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:12:35.621 [DEBUG] [Thread-189850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:12:35.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T18:12:35.655 [DEBUG] [Thread-189851] [transport.py] [_log()] starting thread (client mode): 0xa57b2350
2026-02-14T18:12:35.655 [DEBUG] [Thread-189851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:12:35.669 [DEBUG] [Thread-189851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:12:35.669 [INFO] [Thread-189851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:12:35.677 [DEBUG] [Thread-189851] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:12:35.677 [DEBUG] [Thread-189851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:12:35.677 [DEBUG] [Thread-189851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:12:35.677 [DEBUG] [Thread-189851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:12:35.677 [DEBUG] [Thread-189851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:12:35.677 [DEBUG] [Thread-189851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:12:35.677 [DEBUG] [Thread-189851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:12:35.677 [DEBUG] [Thread-189851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:12:35.677 [DEBUG] [Thread-189851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:12:35.677 [DEBUG] [Thread-189851] [transport.py] [_log()] client lang: <none>
2026-02-14T18:12:35.677 [DEBUG] [Thread-189851] [transport.py] [_log()] server lang: <none>
2026-02-14T18:12:35.677 [DEBUG] [Thread-189851] [transport.py] [_log()] kex follows: False
2026-02-14T18:12:35.677 [DEBUG] [Thread-189851] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:12:35.677 [DEBUG] [Thread-189851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:12:35.677 [DEBUG] [Thread-189851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:12:35.678 [DEBUG] [Thread-189851] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:12:35.678 [DEBUG] [Thread-189851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:12:35.678 [DEBUG] [Thread-189851] [transport.py] [_log()] Compression: none
2026-02-14T18:12:35.678 [DEBUG] [Thread-189851] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:12:35.735 [DEBUG] [Thread-189851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:12:35.736 [DEBUG] [Thread-189851] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:12:35.737 [DEBUG] [Thread-189851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:12:35.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:12:35.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:12:35.792 [DEBUG] [Thread-189851] [transport.py] [_log()] userauth is OK
2026-02-14T18:12:35.792 [DEBUG] [Thread-189851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:12:35.793 [DEBUG] [Thread-189851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:12:35.793 [DEBUG] [Thread-189851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:12:35.793 [DEBUG] [Thread-189851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:12:35.811 [INFO] [Thread-189851] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:12:35.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-14T18:12:35.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:12:36.635 [DEBUG] [Thread-189851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:12:36.636 [DEBUG] [Thread-189851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:12:36.683 [DEBUG] [Thread-189851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:12:36.684 [DEBUG] [Thread-189851] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:12:36.693 [DEBUG] [Thread-189851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:12:36.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:12:36.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-14T18:12:36.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:12:36.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:12:36.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:12:36.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:12:36.727 [DEBUG] [Thread-189851] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:12:40.660 [DEBUG] [Thread-189853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:12:55.712 [DEBUG] [Thread-189854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:13:06.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:13:06.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:13:06.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-14T18:13:08.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 13, 1), 13.21, 40.98, 0.0, 31.48, 14.93, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:13:08.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:13:01
2026-02-14T18:13:08.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:13:09.108 [DEBUG] [Thread-189855] [transport.py] [_log()] starting thread (client mode): 0xa57b2950
2026-02-14T18:13:09.108 [DEBUG] [Thread-189855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:13:09.128 [DEBUG] [Thread-189855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:13:09.129 [INFO] [Thread-189855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:13:09.132 [DEBUG] [Thread-189855] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:13:09.132 [DEBUG] [Thread-189855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:13:09.132 [DEBUG] [Thread-189855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:13:09.132 [DEBUG] [Thread-189855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:13:09.132 [DEBUG] [Thread-189855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:13:09.132 [DEBUG] [Thread-189855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:13:09.132 [DEBUG] [Thread-189855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:13:09.132 [DEBUG] [Thread-189855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:13:09.132 [DEBUG] [Thread-189855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:13:09.132 [DEBUG] [Thread-189855] [transport.py] [_log()] client lang: <none>
2026-02-14T18:13:09.132 [DEBUG] [Thread-189855] [transport.py] [_log()] server lang: <none>
2026-02-14T18:13:09.132 [DEBUG] [Thread-189855] [transport.py] [_log()] kex follows: False
2026-02-14T18:13:09.132 [DEBUG] [Thread-189855] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:13:09.132 [DEBUG] [Thread-189855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:13:09.132 [DEBUG] [Thread-189855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:13:09.132 [DEBUG] [Thread-189855] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:13:09.132 [DEBUG] [Thread-189855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:13:09.132 [DEBUG] [Thread-189855] [transport.py] [_log()] Compression: none
2026-02-14T18:13:09.132 [DEBUG] [Thread-189855] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:13:09.149 [DEBUG] [Thread-189855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:13:09.150 [DEBUG] [Thread-189855] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:13:09.150 [DEBUG] [Thread-189855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:13:09.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:13:09.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:13:09.152 [DEBUG] [Thread-189855] [transport.py] [_log()] userauth is OK
2026-02-14T18:13:09.152 [DEBUG] [Thread-189855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:13:09.152 [DEBUG] [Thread-189855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:13:09.153 [DEBUG] [Thread-189855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:13:09.153 [DEBUG] [Thread-189855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:13:09.188 [INFO] [Thread-189855] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:13:09.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:13:09.856 [DEBUG] [Thread-189855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:13:09.856 [DEBUG] [Thread-189855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:13:09.857 [DEBUG] [Thread-189855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:13:09.897 [DEBUG] [Thread-189855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:13:09.898 [DEBUG] [Thread-189855] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:13:09.901 [DEBUG] [Thread-189855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:13:09.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:13:09.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:13:09.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:13:09.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:13:09.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:13:09.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:13:09.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:13:09.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:13:09.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:13:09.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.675452 -999.00  +14.40  21.59     47   +3.50 1 1 1 1 1   887    0 10.66 -13.89 ----- 27.8 21.6 181.6 36.1 17.2 -27.5 17.1 -27.9 18.4 -25.6 18.8 -28.8
2026-02-14T18:13:09.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:13:09.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:13:09.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.675452
2026-02-14T18:13:09.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:13:09.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:13:09.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:13:09.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:13:09.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:13:09.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:13:01', tmtdew=13.21, humidity=40.98, cloud=0.0, wind=31.48, temperature=14.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:12:39.053', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:13:09.927 [DEBUG] [Thread-189855] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:13:10.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-14T18:13:10.015 [DEBUG] [Thread-189858] [transport.py] [_log()] starting thread (client mode): 0xa2db5660
2026-02-14T18:13:10.016 [DEBUG] [Thread-189858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:13:10.030 [DEBUG] [Thread-189858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:13:10.030 [INFO] [Thread-189858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:13:10.037 [DEBUG] [Thread-189858] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:13:10.038 [DEBUG] [Thread-189858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:13:10.038 [DEBUG] [Thread-189858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:13:10.038 [DEBUG] [Thread-189858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:13:10.038 [DEBUG] [Thread-189858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:13:10.038 [DEBUG] [Thread-189858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:13:10.038 [DEBUG] [Thread-189858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:13:10.038 [DEBUG] [Thread-189858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:13:10.038 [DEBUG] [Thread-189858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:13:10.038 [DEBUG] [Thread-189858] [transport.py] [_log()] client lang: <none>
2026-02-14T18:13:10.038 [DEBUG] [Thread-189858] [transport.py] [_log()] server lang: <none>
2026-02-14T18:13:10.038 [DEBUG] [Thread-189858] [transport.py] [_log()] kex follows: False
2026-02-14T18:13:10.038 [DEBUG] [Thread-189858] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:13:10.038 [DEBUG] [Thread-189858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:13:10.038 [DEBUG] [Thread-189858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:13:10.039 [DEBUG] [Thread-189858] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:13:10.039 [DEBUG] [Thread-189858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:13:10.039 [DEBUG] [Thread-189858] [transport.py] [_log()] Compression: none
2026-02-14T18:13:10.039 [DEBUG] [Thread-189858] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:13:10.097 [DEBUG] [Thread-189858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:13:10.098 [DEBUG] [Thread-189858] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:13:10.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:13:10.099 [DEBUG] [Thread-189858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:13:10.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:13:10.155 [DEBUG] [Thread-189858] [transport.py] [_log()] userauth is OK
2026-02-14T18:13:10.156 [DEBUG] [Thread-189858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:13:10.156 [DEBUG] [Thread-189858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:13:10.156 [DEBUG] [Thread-189858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:13:10.156 [DEBUG] [Thread-189858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:13:10.178 [INFO] [Thread-189858] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:13:10.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-14T18:13:10.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:13:10.570 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:13:10.571 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:13:10.747 [DEBUG] [Thread-189860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:13:11.010 [DEBUG] [Thread-189858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:13:11.011 [DEBUG] [Thread-189858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:13:11.062 [DEBUG] [Thread-189858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:13:11.063 [DEBUG] [Thread-189858] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:13:11.073 [DEBUG] [Thread-189858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:13:11.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:13:11.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-14T18:13:11.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-14T18:13:11.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:13:11.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:13:11.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:13:11.109 [DEBUG] [Thread-189858] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:13:25.790 [DEBUG] [Thread-189861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:13:35.671 [DEBUG] [Thread-189862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:13:40.828 [DEBUG] [Thread-189863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:13:41.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:13:41.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:13:41.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-14T18:13:43.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 13, 1), 13.21, 40.98, 0.0, 31.48, 14.93, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:13:43.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:13:01
2026-02-14T18:13:43.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:13:43.719 [DEBUG] [Thread-189864] [transport.py] [_log()] starting thread (client mode): 0xa2dc0040
2026-02-14T18:13:43.719 [DEBUG] [Thread-189864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:13:43.739 [DEBUG] [Thread-189864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:13:43.739 [INFO] [Thread-189864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:13:43.742 [DEBUG] [Thread-189864] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:13:43.742 [DEBUG] [Thread-189864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:13:43.742 [DEBUG] [Thread-189864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:13:43.742 [DEBUG] [Thread-189864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:13:43.742 [DEBUG] [Thread-189864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:13:43.742 [DEBUG] [Thread-189864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:13:43.742 [DEBUG] [Thread-189864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:13:43.742 [DEBUG] [Thread-189864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:13:43.742 [DEBUG] [Thread-189864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:13:43.742 [DEBUG] [Thread-189864] [transport.py] [_log()] client lang: <none>
2026-02-14T18:13:43.742 [DEBUG] [Thread-189864] [transport.py] [_log()] server lang: <none>
2026-02-14T18:13:43.742 [DEBUG] [Thread-189864] [transport.py] [_log()] kex follows: False
2026-02-14T18:13:43.742 [DEBUG] [Thread-189864] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:13:43.742 [DEBUG] [Thread-189864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:13:43.743 [DEBUG] [Thread-189864] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:13:43.743 [DEBUG] [Thread-189864] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:13:43.743 [DEBUG] [Thread-189864] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:13:43.743 [DEBUG] [Thread-189864] [transport.py] [_log()] Compression: none
2026-02-14T18:13:43.743 [DEBUG] [Thread-189864] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:13:43.761 [DEBUG] [Thread-189864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:13:43.762 [DEBUG] [Thread-189864] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:13:43.762 [DEBUG] [Thread-189864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:13:43.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:13:43.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:13:43.764 [DEBUG] [Thread-189864] [transport.py] [_log()] userauth is OK
2026-02-14T18:13:43.765 [DEBUG] [Thread-189864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:13:43.765 [DEBUG] [Thread-189864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:13:43.765 [DEBUG] [Thread-189864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:13:43.765 [DEBUG] [Thread-189864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:13:43.779 [INFO] [Thread-189864] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:13:43.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:13:44.409 [DEBUG] [Thread-189864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:13:44.409 [DEBUG] [Thread-189864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:13:44.409 [DEBUG] [Thread-189864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:13:44.450 [DEBUG] [Thread-189864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:13:44.451 [DEBUG] [Thread-189864] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:13:44.454 [DEBUG] [Thread-189864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:13:44.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:13:44.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:13:44.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:13:44.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:13:44.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:13:44.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:13:44.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:13:44.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:13:44.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:13:44.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.675799 -999.00  +14.40  36.24     47   +3.40 1 1 2 1 1   887    0 10.66 -15.12 ----- 24.7 36.2 179.4 45.9 17.2 -27.7 16.9 -27.8 18.2 -27.1 18.7 -28.1
2026-02-14T18:13:44.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:13:44.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:13:44.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.675799
2026-02-14T18:13:44.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:13:44.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:13:44.479 [DEBUG] [Thread-189864] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:13:44.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:13:44.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:13:44.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:13:44.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:13:01', tmtdew=13.21, humidity=40.98, cloud=0.0, wind=31.48, temperature=14.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:13:09.034', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:13:44.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-14T18:13:44.580 [DEBUG] [Thread-189867] [transport.py] [_log()] starting thread (client mode): 0xa2d024a0
2026-02-14T18:13:44.581 [DEBUG] [Thread-189867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:13:44.595 [DEBUG] [Thread-189867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:13:44.595 [INFO] [Thread-189867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:13:44.602 [DEBUG] [Thread-189867] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:13:44.603 [DEBUG] [Thread-189867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:13:44.603 [DEBUG] [Thread-189867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:13:44.603 [DEBUG] [Thread-189867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:13:44.603 [DEBUG] [Thread-189867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:13:44.603 [DEBUG] [Thread-189867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:13:44.603 [DEBUG] [Thread-189867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:13:44.603 [DEBUG] [Thread-189867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:13:44.603 [DEBUG] [Thread-189867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:13:44.603 [DEBUG] [Thread-189867] [transport.py] [_log()] client lang: <none>
2026-02-14T18:13:44.603 [DEBUG] [Thread-189867] [transport.py] [_log()] server lang: <none>
2026-02-14T18:13:44.603 [DEBUG] [Thread-189867] [transport.py] [_log()] kex follows: False
2026-02-14T18:13:44.603 [DEBUG] [Thread-189867] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:13:44.603 [DEBUG] [Thread-189867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:13:44.603 [DEBUG] [Thread-189867] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:13:44.603 [DEBUG] [Thread-189867] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:13:44.604 [DEBUG] [Thread-189867] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:13:44.604 [DEBUG] [Thread-189867] [transport.py] [_log()] Compression: none
2026-02-14T18:13:44.604 [DEBUG] [Thread-189867] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:13:44.661 [DEBUG] [Thread-189867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:13:44.661 [DEBUG] [Thread-189867] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:13:44.662 [DEBUG] [Thread-189867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:13:44.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:13:44.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:13:44.720 [DEBUG] [Thread-189867] [transport.py] [_log()] userauth is OK
2026-02-14T18:13:44.720 [DEBUG] [Thread-189867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:13:44.721 [DEBUG] [Thread-189867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:13:44.721 [DEBUG] [Thread-189867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:13:44.721 [DEBUG] [Thread-189867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:13:44.742 [INFO] [Thread-189867] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:13:44.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-14T18:13:44.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:13:45.565 [DEBUG] [Thread-189867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:13:45.566 [DEBUG] [Thread-189867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:13:45.613 [DEBUG] [Thread-189867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:13:45.613 [DEBUG] [Thread-189867] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:13:45.622 [DEBUG] [Thread-189867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:13:45.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:13:45.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:13:45.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-14T18:13:45.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:13:45.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:13:45.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:13:45.657 [DEBUG] [Thread-189867] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:13:55.866 [DEBUG] [Thread-189869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:14:10.712 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:14:10.713 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:14:10.912 [DEBUG] [Thread-189870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:14:15.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:14:15.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:14:15.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-14T18:14:17.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 13, 36), 13.87, 39.06, 0.0, 42.9, 15.62, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:14:17.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:13:36
2026-02-14T18:14:17.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:14:18.034 [DEBUG] [Thread-189871] [transport.py] [_log()] starting thread (client mode): 0xa2d00dc0
2026-02-14T18:14:18.034 [DEBUG] [Thread-189871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:14:18.054 [DEBUG] [Thread-189871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:14:18.055 [INFO] [Thread-189871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:14:18.058 [DEBUG] [Thread-189871] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:14:18.058 [DEBUG] [Thread-189871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:14:18.058 [DEBUG] [Thread-189871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:14:18.058 [DEBUG] [Thread-189871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:14:18.058 [DEBUG] [Thread-189871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:14:18.058 [DEBUG] [Thread-189871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:14:18.058 [DEBUG] [Thread-189871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:14:18.058 [DEBUG] [Thread-189871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:14:18.058 [DEBUG] [Thread-189871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:14:18.058 [DEBUG] [Thread-189871] [transport.py] [_log()] client lang: <none>
2026-02-14T18:14:18.058 [DEBUG] [Thread-189871] [transport.py] [_log()] server lang: <none>
2026-02-14T18:14:18.059 [DEBUG] [Thread-189871] [transport.py] [_log()] kex follows: False
2026-02-14T18:14:18.059 [DEBUG] [Thread-189871] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:14:18.059 [DEBUG] [Thread-189871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:14:18.059 [DEBUG] [Thread-189871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:14:18.059 [DEBUG] [Thread-189871] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:14:18.059 [DEBUG] [Thread-189871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:14:18.059 [DEBUG] [Thread-189871] [transport.py] [_log()] Compression: none
2026-02-14T18:14:18.059 [DEBUG] [Thread-189871] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:14:18.076 [DEBUG] [Thread-189871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:14:18.077 [DEBUG] [Thread-189871] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:14:18.077 [DEBUG] [Thread-189871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:14:18.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:14:18.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:14:18.080 [DEBUG] [Thread-189871] [transport.py] [_log()] userauth is OK
2026-02-14T18:14:18.080 [DEBUG] [Thread-189871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:14:18.080 [DEBUG] [Thread-189871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:14:18.080 [DEBUG] [Thread-189871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:14:18.080 [DEBUG] [Thread-189871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:14:18.105 [INFO] [Thread-189871] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:14:18.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:14:18.738 [DEBUG] [Thread-189871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:14:18.738 [DEBUG] [Thread-189871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:14:18.738 [DEBUG] [Thread-189871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:14:18.778 [DEBUG] [Thread-189871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:14:18.778 [DEBUG] [Thread-189871] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:14:18.781 [DEBUG] [Thread-189871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:14:18.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:14:18.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:14:18.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:14:18.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:14:18.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:14:18.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:14:18.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:14:18.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:14:18.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:14:18.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.676146 -999.00  +14.50  19.20     47   +3.50 1 1 1 1 1   887    0 10.75 -16.25 ----- 19.6 19.2 163.0 36.6 17.2 -27.8 17.0 -27.4 18.3 -25.0 18.8 -27.5
2026-02-14T18:14:18.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:14:18.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:14:18.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.676146
2026-02-14T18:14:18.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:14:18.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:14:18.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:14:18.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:14:18.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:14:18.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:13:36', tmtdew=13.87, humidity=39.06, cloud=0.0, wind=42.9, temperature=15.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:13:39.014', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:14:18.809 [DEBUG] [Thread-189871] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:14:18.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-14T18:14:25.951 [DEBUG] [Thread-189874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:14:35.714 [DEBUG] [Thread-189875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:14:41.001 [DEBUG] [Thread-189876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:14:56.036 [DEBUG] [Thread-189877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:15:10.854 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:15:10.855 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:15:11.075 [DEBUG] [Thread-189878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:15:26.114 [DEBUG] [Thread-189879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:15:35.747 [DEBUG] [Thread-189880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:15:41.151 [DEBUG] [Thread-189881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:15:56.187 [DEBUG] [Thread-189882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:16:10.996 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:16:10.998 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:16:11.223 [DEBUG] [Thread-189883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:16:26.264 [DEBUG] [Thread-189884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:16:33.335 [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-14T18:16:35.789 [DEBUG] [Thread-189885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:16:41.299 [DEBUG] [Thread-189886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:16:56.337 [DEBUG] [Thread-189887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:17:03.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:17:03.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:17:03.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:17:05.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 16, 33), 13.16, 40.74, 0.0, 34.58, 15.05, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:17:05.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:16:33
2026-02-14T18:17:05.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:17:05.984 [DEBUG] [Thread-189888] [transport.py] [_log()] starting thread (client mode): 0xa5770910
2026-02-14T18:17:05.984 [DEBUG] [Thread-189888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:17:06.005 [DEBUG] [Thread-189888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:17:06.005 [INFO] [Thread-189888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:17:06.008 [DEBUG] [Thread-189888] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:17:06.008 [DEBUG] [Thread-189888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:17:06.009 [DEBUG] [Thread-189888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:17:06.009 [DEBUG] [Thread-189888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:17:06.009 [DEBUG] [Thread-189888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:17:06.009 [DEBUG] [Thread-189888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:17:06.009 [DEBUG] [Thread-189888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:17:06.009 [DEBUG] [Thread-189888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:17:06.009 [DEBUG] [Thread-189888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:17:06.009 [DEBUG] [Thread-189888] [transport.py] [_log()] client lang: <none>
2026-02-14T18:17:06.009 [DEBUG] [Thread-189888] [transport.py] [_log()] server lang: <none>
2026-02-14T18:17:06.009 [DEBUG] [Thread-189888] [transport.py] [_log()] kex follows: False
2026-02-14T18:17:06.009 [DEBUG] [Thread-189888] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:17:06.009 [DEBUG] [Thread-189888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:17:06.009 [DEBUG] [Thread-189888] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:17:06.009 [DEBUG] [Thread-189888] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:17:06.009 [DEBUG] [Thread-189888] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:17:06.009 [DEBUG] [Thread-189888] [transport.py] [_log()] Compression: none
2026-02-14T18:17:06.009 [DEBUG] [Thread-189888] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:17:06.028 [DEBUG] [Thread-189888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:17:06.028 [DEBUG] [Thread-189888] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:17:06.029 [DEBUG] [Thread-189888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:17:06.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:17:06.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:17:06.031 [DEBUG] [Thread-189888] [transport.py] [_log()] userauth is OK
2026-02-14T18:17:06.031 [DEBUG] [Thread-189888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:17:06.031 [DEBUG] [Thread-189888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:17:06.032 [DEBUG] [Thread-189888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:17:06.032 [DEBUG] [Thread-189888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:17:06.046 [INFO] [Thread-189888] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:17:06.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:17:06.663 [DEBUG] [Thread-189888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:17:06.663 [DEBUG] [Thread-189888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:17:06.663 [DEBUG] [Thread-189888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:17:06.704 [DEBUG] [Thread-189888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:17:06.705 [DEBUG] [Thread-189888] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:17:06.708 [DEBUG] [Thread-189888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:17:06.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:17:06.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:17:06.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:17:06.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:17:06.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:17:06.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:17:06.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:17:06.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:17:06.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:17:06.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.678229 -999.00  +14.70  21.10     47   +3.60 1 1 1 1 1   887    0 10.57 -18.47 ----- 24.2 21.1 171.2 39.1 17.4 -27.4 17.1 -27.9 18.5 -26.2 18.8 -27.3
2026-02-14T18:17:06.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:17:06.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:17:06.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.678229
2026-02-14T18:17:06.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:17:06.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:17:06.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:17:06.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:17:06.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:17:06.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:16:33', tmtdew=13.16, humidity=40.74, cloud=0.0, wind=34.58, temperature=15.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:16:38.986', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:17:06.735 [DEBUG] [Thread-189888] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:17:06.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-14T18:17:06.831 [DEBUG] [Thread-189891] [transport.py] [_log()] starting thread (client mode): 0xa2dc2260
2026-02-14T18:17:06.831 [DEBUG] [Thread-189891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:17:06.846 [DEBUG] [Thread-189891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:17:06.846 [INFO] [Thread-189891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:17:06.854 [DEBUG] [Thread-189891] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:17:06.854 [DEBUG] [Thread-189891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:17:06.854 [DEBUG] [Thread-189891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:17:06.854 [DEBUG] [Thread-189891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:17:06.854 [DEBUG] [Thread-189891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:17:06.854 [DEBUG] [Thread-189891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:17:06.854 [DEBUG] [Thread-189891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:17:06.854 [DEBUG] [Thread-189891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:17:06.854 [DEBUG] [Thread-189891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:17:06.854 [DEBUG] [Thread-189891] [transport.py] [_log()] client lang: <none>
2026-02-14T18:17:06.854 [DEBUG] [Thread-189891] [transport.py] [_log()] server lang: <none>
2026-02-14T18:17:06.854 [DEBUG] [Thread-189891] [transport.py] [_log()] kex follows: False
2026-02-14T18:17:06.854 [DEBUG] [Thread-189891] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:17:06.855 [DEBUG] [Thread-189891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:17:06.855 [DEBUG] [Thread-189891] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:17:06.855 [DEBUG] [Thread-189891] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:17:06.855 [DEBUG] [Thread-189891] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:17:06.855 [DEBUG] [Thread-189891] [transport.py] [_log()] Compression: none
2026-02-14T18:17:06.855 [DEBUG] [Thread-189891] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:17:06.912 [DEBUG] [Thread-189891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:17:06.912 [DEBUG] [Thread-189891] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:17:06.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:17:06.913 [DEBUG] [Thread-189891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:17:06.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:17:06.968 [DEBUG] [Thread-189891] [transport.py] [_log()] userauth is OK
2026-02-14T18:17:06.968 [DEBUG] [Thread-189891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:17:06.969 [DEBUG] [Thread-189891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:17:06.969 [DEBUG] [Thread-189891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:17:06.969 [DEBUG] [Thread-189891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:17:06.988 [INFO] [Thread-189891] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:17:06.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-14T18:17:06.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:17:07.857 [DEBUG] [Thread-189891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:17:07.857 [DEBUG] [Thread-189891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:17:07.904 [DEBUG] [Thread-189891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:17:07.905 [DEBUG] [Thread-189891] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:17:07.914 [DEBUG] [Thread-189891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:17:07.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:17:07.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-14T18:17:07.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-14T18:17:07.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:17:07.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:17:07.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:17:07.951 [DEBUG] [Thread-189891] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:17:11.137 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:17:11.138 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:17:11.376 [DEBUG] [Thread-189893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:17:26.439 [DEBUG] [Thread-189894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:17:35.833 [DEBUG] [Thread-189895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:17:37.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:17:37.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:17:37.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-14T18:17:40.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 17, 8), 13.14, 40.81, 0.0, 34.16, 15.03, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:17:40.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:17:08
2026-02-14T18:17:40.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:17:41.030 [DEBUG] [Thread-189896] [transport.py] [_log()] starting thread (client mode): 0xa2dc1120
2026-02-14T18:17:41.030 [DEBUG] [Thread-189896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:17:41.049 [DEBUG] [Thread-189896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:17:41.050 [INFO] [Thread-189896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:17:41.053 [DEBUG] [Thread-189896] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:17:41.053 [DEBUG] [Thread-189896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:17:41.053 [DEBUG] [Thread-189896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:17:41.053 [DEBUG] [Thread-189896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:17:41.054 [DEBUG] [Thread-189896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:17:41.054 [DEBUG] [Thread-189896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:17:41.054 [DEBUG] [Thread-189896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:17:41.054 [DEBUG] [Thread-189896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:17:41.054 [DEBUG] [Thread-189896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:17:41.054 [DEBUG] [Thread-189896] [transport.py] [_log()] client lang: <none>
2026-02-14T18:17:41.054 [DEBUG] [Thread-189896] [transport.py] [_log()] server lang: <none>
2026-02-14T18:17:41.054 [DEBUG] [Thread-189896] [transport.py] [_log()] kex follows: False
2026-02-14T18:17:41.054 [DEBUG] [Thread-189896] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:17:41.054 [DEBUG] [Thread-189896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:17:41.054 [DEBUG] [Thread-189896] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:17:41.054 [DEBUG] [Thread-189896] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:17:41.054 [DEBUG] [Thread-189896] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:17:41.054 [DEBUG] [Thread-189896] [transport.py] [_log()] Compression: none
2026-02-14T18:17:41.054 [DEBUG] [Thread-189896] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:17:41.071 [DEBUG] [Thread-189896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:17:41.071 [DEBUG] [Thread-189896] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:17:41.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:17:41.073 [DEBUG] [Thread-189896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:17:41.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:17:41.075 [DEBUG] [Thread-189896] [transport.py] [_log()] userauth is OK
2026-02-14T18:17:41.076 [DEBUG] [Thread-189896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:17:41.076 [DEBUG] [Thread-189896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:17:41.076 [DEBUG] [Thread-189896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:17:41.076 [DEBUG] [Thread-189896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:17:41.100 [INFO] [Thread-189896] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:17:41.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:17:41.476 [DEBUG] [Thread-189898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:17:41.695 [DEBUG] [Thread-189896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:17:41.695 [DEBUG] [Thread-189896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:17:41.695 [DEBUG] [Thread-189896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:17:41.737 [DEBUG] [Thread-189896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:17:41.737 [DEBUG] [Thread-189896] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:17:41.740 [DEBUG] [Thread-189896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:17:41.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:17:41.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:17:41.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:17:41.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:17:41.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:17:41.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:17:41.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:17:41.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:17:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:17:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.678577 -999.00  +14.70  24.44     47   +3.60 1 1 1 1 1   887    0 10.57 -19.89 ----- 25.7 24.4 171.2 32.9 17.3 -27.6 17.2 -26.7 18.5 -25.1 18.8 -29.2
2026-02-14T18:17:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:17:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:17:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.678577
2026-02-14T18:17:41.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:17:41.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:17:41.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:17:41.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:17:41.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:17:41.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:17:08', tmtdew=13.14, humidity=40.81, cloud=0.0, wind=34.16, temperature=15.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:17:09.053', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:17:41.769 [DEBUG] [Thread-189896] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:17:41.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-14T18:17:41.876 [DEBUG] [Thread-189900] [transport.py] [_log()] starting thread (client mode): 0xa2db49d0
2026-02-14T18:17:41.876 [DEBUG] [Thread-189900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:17:41.891 [DEBUG] [Thread-189900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:17:41.891 [INFO] [Thread-189900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:17:41.899 [DEBUG] [Thread-189900] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:17:41.899 [DEBUG] [Thread-189900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:17:41.900 [DEBUG] [Thread-189900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:17:41.900 [DEBUG] [Thread-189900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:17:41.900 [DEBUG] [Thread-189900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:17:41.900 [DEBUG] [Thread-189900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:17:41.900 [DEBUG] [Thread-189900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:17:41.900 [DEBUG] [Thread-189900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:17:41.900 [DEBUG] [Thread-189900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:17:41.900 [DEBUG] [Thread-189900] [transport.py] [_log()] client lang: <none>
2026-02-14T18:17:41.901 [DEBUG] [Thread-189900] [transport.py] [_log()] server lang: <none>
2026-02-14T18:17:41.901 [DEBUG] [Thread-189900] [transport.py] [_log()] kex follows: False
2026-02-14T18:17:41.901 [DEBUG] [Thread-189900] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:17:41.901 [DEBUG] [Thread-189900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:17:41.901 [DEBUG] [Thread-189900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:17:41.901 [DEBUG] [Thread-189900] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:17:41.901 [DEBUG] [Thread-189900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:17:41.902 [DEBUG] [Thread-189900] [transport.py] [_log()] Compression: none
2026-02-14T18:17:41.902 [DEBUG] [Thread-189900] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:17:41.956 [DEBUG] [Thread-189900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:17:41.956 [DEBUG] [Thread-189900] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:17:41.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:17:41.958 [DEBUG] [Thread-189900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:17:41.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:17:42.011 [DEBUG] [Thread-189900] [transport.py] [_log()] userauth is OK
2026-02-14T18:17:42.012 [DEBUG] [Thread-189900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:17:42.012 [DEBUG] [Thread-189900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:17:42.012 [DEBUG] [Thread-189900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:17:42.012 [DEBUG] [Thread-189900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:17:42.032 [INFO] [Thread-189900] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:17: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-14T18:17:42.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:17:42.868 [DEBUG] [Thread-189900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:17:42.869 [DEBUG] [Thread-189900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:17:42.917 [DEBUG] [Thread-189900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:17:42.918 [DEBUG] [Thread-189900] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:17:42.927 [DEBUG] [Thread-189900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:17:42.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:17:42.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-14T18:17:42.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-14T18:17:42.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:17:42.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:17:42.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:17:42.963 [DEBUG] [Thread-189900] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:17:56.513 [DEBUG] [Thread-189902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:18:11.280 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:18:11.281 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:18:11.567 [DEBUG] [Thread-189903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:18:12.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:18:12.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:18: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-14T18:18:14.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 17, 44), 12.88, 41.96, 0.0, 32.41, 14.81, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:18:14.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:17:44
2026-02-14T18:18:15.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:18:15.342 [DEBUG] [Thread-189904] [transport.py] [_log()] starting thread (client mode): 0xa5770c40
2026-02-14T18:18:15.342 [DEBUG] [Thread-189904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:18:15.362 [DEBUG] [Thread-189904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:18:15.362 [INFO] [Thread-189904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:18:15.365 [DEBUG] [Thread-189904] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:18:15.365 [DEBUG] [Thread-189904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:18:15.365 [DEBUG] [Thread-189904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:18:15.365 [DEBUG] [Thread-189904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:18:15.365 [DEBUG] [Thread-189904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:18:15.365 [DEBUG] [Thread-189904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:18:15.365 [DEBUG] [Thread-189904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:18:15.366 [DEBUG] [Thread-189904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:18:15.366 [DEBUG] [Thread-189904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:18:15.366 [DEBUG] [Thread-189904] [transport.py] [_log()] client lang: <none>
2026-02-14T18:18:15.366 [DEBUG] [Thread-189904] [transport.py] [_log()] server lang: <none>
2026-02-14T18:18:15.366 [DEBUG] [Thread-189904] [transport.py] [_log()] kex follows: False
2026-02-14T18:18:15.366 [DEBUG] [Thread-189904] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:18:15.366 [DEBUG] [Thread-189904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:18:15.366 [DEBUG] [Thread-189904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:18:15.366 [DEBUG] [Thread-189904] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:18:15.366 [DEBUG] [Thread-189904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:18:15.366 [DEBUG] [Thread-189904] [transport.py] [_log()] Compression: none
2026-02-14T18:18:15.366 [DEBUG] [Thread-189904] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:18:15.384 [DEBUG] [Thread-189904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:18:15.384 [DEBUG] [Thread-189904] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:18:15.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:18:15.386 [DEBUG] [Thread-189904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:18:15.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:18:15.388 [DEBUG] [Thread-189904] [transport.py] [_log()] userauth is OK
2026-02-14T18:18:15.389 [DEBUG] [Thread-189904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:18:15.389 [DEBUG] [Thread-189904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:18:15.389 [DEBUG] [Thread-189904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:18:15.389 [DEBUG] [Thread-189904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:18:15.412 [INFO] [Thread-189904] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:18:15.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:18:16.057 [DEBUG] [Thread-189904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:18:16.057 [DEBUG] [Thread-189904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:18:16.057 [DEBUG] [Thread-189904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:18:16.098 [DEBUG] [Thread-189904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:18:16.099 [DEBUG] [Thread-189904] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:18:16.102 [DEBUG] [Thread-189904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:18:16.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:18:16.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:18:16.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:18:16.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:18:16.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:18:16.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:18:16.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:18:16.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:18:16.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:18:16.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.678935 -999.00  +14.70  25.74     47   +3.60 1 1 1 1 1   887    0 10.60 -21.24 ----- 23.3 25.7 178.4 33.7 17.3 -27.5 17.2 -27.8 18.5 -25.9 18.9 -27.6
2026-02-14T18:18:16.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:18:16.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:18:16.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.678935
2026-02-14T18:18:16.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:18:16.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:18:16.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:18:16.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:18:16.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:18:16.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:17:44', tmtdew=12.88, humidity=41.96, cloud=0.0, wind=32.41, temperature=14.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:17:39.984', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:18:16.131 [DEBUG] [Thread-189904] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:18:16.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-14T18:18:16.229 [DEBUG] [Thread-189907] [transport.py] [_log()] starting thread (client mode): 0xa2deca00
2026-02-14T18:18:16.229 [DEBUG] [Thread-189907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:18:16.244 [DEBUG] [Thread-189907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:18:16.244 [INFO] [Thread-189907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:18:16.252 [DEBUG] [Thread-189907] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:18:16.252 [DEBUG] [Thread-189907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:18:16.252 [DEBUG] [Thread-189907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:18:16.252 [DEBUG] [Thread-189907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:18:16.252 [DEBUG] [Thread-189907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:18:16.252 [DEBUG] [Thread-189907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:18:16.252 [DEBUG] [Thread-189907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:18:16.252 [DEBUG] [Thread-189907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:18:16.253 [DEBUG] [Thread-189907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:18:16.253 [DEBUG] [Thread-189907] [transport.py] [_log()] client lang: <none>
2026-02-14T18:18:16.253 [DEBUG] [Thread-189907] [transport.py] [_log()] server lang: <none>
2026-02-14T18:18:16.253 [DEBUG] [Thread-189907] [transport.py] [_log()] kex follows: False
2026-02-14T18:18:16.253 [DEBUG] [Thread-189907] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:18:16.253 [DEBUG] [Thread-189907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:18:16.253 [DEBUG] [Thread-189907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:18:16.253 [DEBUG] [Thread-189907] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:18:16.253 [DEBUG] [Thread-189907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:18:16.253 [DEBUG] [Thread-189907] [transport.py] [_log()] Compression: none
2026-02-14T18:18:16.253 [DEBUG] [Thread-189907] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:18:16.312 [DEBUG] [Thread-189907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:18:16.313 [DEBUG] [Thread-189907] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:18:16.314 [DEBUG] [Thread-189907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:18:16.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:18:16.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:18:16.372 [DEBUG] [Thread-189907] [transport.py] [_log()] userauth is OK
2026-02-14T18:18:16.373 [DEBUG] [Thread-189907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:18:16.373 [DEBUG] [Thread-189907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:18:16.373 [DEBUG] [Thread-189907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:18:16.373 [DEBUG] [Thread-189907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:18:16.391 [INFO] [Thread-189907] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:18:16.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-14T18:18:16.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:18:17.234 [DEBUG] [Thread-189907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:18:17.235 [DEBUG] [Thread-189907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:18:17.282 [DEBUG] [Thread-189907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:18:17.282 [DEBUG] [Thread-189907] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:18:17.292 [DEBUG] [Thread-189907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:18:17.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:18:17.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-14T18:18:17.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-14T18:18:17.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:18:17.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:18:17.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:18:17.328 [DEBUG] [Thread-189907] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:18:26.607 [DEBUG] [Thread-189909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:18:35.878 [DEBUG] [Thread-189910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:18:41.658 [DEBUG] [Thread-189911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:18:47.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:18:47.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:18:47.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-14T18:18:49.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 18, 20), 12.86, 42.01, 0.0, 29.55, 14.8, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:18:49.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:18:20
2026-02-14T18:18:49.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:18:50.127 [DEBUG] [Thread-189912] [transport.py] [_log()] starting thread (client mode): 0xa2d02a70
2026-02-14T18:18:50.127 [DEBUG] [Thread-189912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:18:50.147 [DEBUG] [Thread-189912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:18:50.147 [INFO] [Thread-189912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:18:50.150 [DEBUG] [Thread-189912] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:18:50.150 [DEBUG] [Thread-189912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:18:50.150 [DEBUG] [Thread-189912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:18:50.150 [DEBUG] [Thread-189912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:18:50.150 [DEBUG] [Thread-189912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:18:50.150 [DEBUG] [Thread-189912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:18:50.150 [DEBUG] [Thread-189912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:18:50.150 [DEBUG] [Thread-189912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:18:50.150 [DEBUG] [Thread-189912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:18:50.150 [DEBUG] [Thread-189912] [transport.py] [_log()] client lang: <none>
2026-02-14T18:18:50.150 [DEBUG] [Thread-189912] [transport.py] [_log()] server lang: <none>
2026-02-14T18:18:50.150 [DEBUG] [Thread-189912] [transport.py] [_log()] kex follows: False
2026-02-14T18:18:50.150 [DEBUG] [Thread-189912] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:18:50.151 [DEBUG] [Thread-189912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:18:50.151 [DEBUG] [Thread-189912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:18:50.151 [DEBUG] [Thread-189912] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:18:50.151 [DEBUG] [Thread-189912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:18:50.151 [DEBUG] [Thread-189912] [transport.py] [_log()] Compression: none
2026-02-14T18:18:50.151 [DEBUG] [Thread-189912] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:18:50.167 [DEBUG] [Thread-189912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:18:50.167 [DEBUG] [Thread-189912] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:18:50.168 [DEBUG] [Thread-189912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:18:50.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:18:50.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:18:50.208 [DEBUG] [Thread-189912] [transport.py] [_log()] userauth is OK
2026-02-14T18:18:50.209 [DEBUG] [Thread-189912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:18:50.209 [DEBUG] [Thread-189912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:18:50.209 [DEBUG] [Thread-189912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:18:50.209 [DEBUG] [Thread-189912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:18:50.241 [INFO] [Thread-189912] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:18:50.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:18:50.882 [DEBUG] [Thread-189912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:18:50.882 [DEBUG] [Thread-189912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:18:50.882 [DEBUG] [Thread-189912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:18:50.923 [DEBUG] [Thread-189912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:18:50.924 [DEBUG] [Thread-189912] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:18:50.927 [DEBUG] [Thread-189912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:18:50.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:18:50.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:18:50.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:18:50.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:18:50.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:18:50.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:18:50.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:18:50.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:18:50.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:18:50.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.679271 -999.00  +14.50  19.87     48   +3.60 1 1 1 1 1   887    0 10.24 -25.09 ----- 27.9 19.9 178.6 32.8 17.2 -28.4 17.0 -27.0 18.4 -25.4 18.8 -28.0
2026-02-14T18:18:50.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:18:50.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:18:50.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.679271
2026-02-14T18:18:50.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:18:50.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:18:50.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:18:50.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:18:50.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:18:50.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:18:20', tmtdew=12.86, humidity=42.01, cloud=0.0, wind=29.55, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:18:09.014', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:18:50.952 [DEBUG] [Thread-189912] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:18:51.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-14T18:18:51.048 [DEBUG] [Thread-189915] [transport.py] [_log()] starting thread (client mode): 0xa5773d90
2026-02-14T18:18:51.048 [DEBUG] [Thread-189915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:18:51.063 [DEBUG] [Thread-189915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:18:51.063 [INFO] [Thread-189915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:18:51.071 [DEBUG] [Thread-189915] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:18:51.071 [DEBUG] [Thread-189915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:18:51.071 [DEBUG] [Thread-189915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:18:51.071 [DEBUG] [Thread-189915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:18:51.072 [DEBUG] [Thread-189915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:18:51.072 [DEBUG] [Thread-189915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:18:51.072 [DEBUG] [Thread-189915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:18:51.072 [DEBUG] [Thread-189915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:18:51.072 [DEBUG] [Thread-189915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:18:51.072 [DEBUG] [Thread-189915] [transport.py] [_log()] client lang: <none>
2026-02-14T18:18:51.072 [DEBUG] [Thread-189915] [transport.py] [_log()] server lang: <none>
2026-02-14T18:18:51.073 [DEBUG] [Thread-189915] [transport.py] [_log()] kex follows: False
2026-02-14T18:18:51.073 [DEBUG] [Thread-189915] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:18:51.073 [DEBUG] [Thread-189915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:18:51.073 [DEBUG] [Thread-189915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:18:51.073 [DEBUG] [Thread-189915] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:18:51.073 [DEBUG] [Thread-189915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:18:51.073 [DEBUG] [Thread-189915] [transport.py] [_log()] Compression: none
2026-02-14T18:18:51.073 [DEBUG] [Thread-189915] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:18:51.127 [DEBUG] [Thread-189915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:18:51.127 [DEBUG] [Thread-189915] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:18:51.128 [DEBUG] [Thread-189915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:18:51.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:18:51.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:18:51.184 [DEBUG] [Thread-189915] [transport.py] [_log()] userauth is OK
2026-02-14T18:18:51.184 [DEBUG] [Thread-189915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:18:51.184 [DEBUG] [Thread-189915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:18:51.184 [DEBUG] [Thread-189915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:18:51.184 [DEBUG] [Thread-189915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:18:51.202 [INFO] [Thread-189915] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:18:51.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-14T18:18:51.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:18:52.036 [DEBUG] [Thread-189915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:18:52.037 [DEBUG] [Thread-189915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:18:52.084 [DEBUG] [Thread-189915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:18:52.084 [DEBUG] [Thread-189915] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:18:52.093 [DEBUG] [Thread-189915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:18:52.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:18:52.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:18:52.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-14T18:18:52.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:18:52.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:18:52.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:18:52.130 [DEBUG] [Thread-189915] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:18:56.696 [DEBUG] [Thread-189917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:19:11.419 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:19:11.421 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:19:11.760 [DEBUG] [Thread-189918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:19:22.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:19:22.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:19:22.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:19:24.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 18, 55), 12.74, 42.08, 0.0, 36.22, 14.73, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:19:24.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:18:55
2026-02-14T18:19:25.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:19:25.279 [DEBUG] [Thread-189919] [transport.py] [_log()] starting thread (client mode): 0xa2d003a0
2026-02-14T18:19:25.279 [DEBUG] [Thread-189919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:19:25.298 [DEBUG] [Thread-189919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:19:25.298 [INFO] [Thread-189919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:19:25.302 [DEBUG] [Thread-189919] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:19:25.302 [DEBUG] [Thread-189919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:19:25.302 [DEBUG] [Thread-189919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:19:25.302 [DEBUG] [Thread-189919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:19:25.302 [DEBUG] [Thread-189919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:19:25.302 [DEBUG] [Thread-189919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:19:25.302 [DEBUG] [Thread-189919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:19:25.302 [DEBUG] [Thread-189919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:19:25.302 [DEBUG] [Thread-189919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:19:25.303 [DEBUG] [Thread-189919] [transport.py] [_log()] client lang: <none>
2026-02-14T18:19:25.303 [DEBUG] [Thread-189919] [transport.py] [_log()] server lang: <none>
2026-02-14T18:19:25.303 [DEBUG] [Thread-189919] [transport.py] [_log()] kex follows: False
2026-02-14T18:19:25.303 [DEBUG] [Thread-189919] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:19:25.303 [DEBUG] [Thread-189919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:19:25.303 [DEBUG] [Thread-189919] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:19:25.303 [DEBUG] [Thread-189919] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:19:25.303 [DEBUG] [Thread-189919] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:19:25.303 [DEBUG] [Thread-189919] [transport.py] [_log()] Compression: none
2026-02-14T18:19:25.303 [DEBUG] [Thread-189919] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:19:25.322 [DEBUG] [Thread-189919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:19:25.322 [DEBUG] [Thread-189919] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:19:25.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:19:25.323 [DEBUG] [Thread-189919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:19:25.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:19:25.365 [DEBUG] [Thread-189919] [transport.py] [_log()] userauth is OK
2026-02-14T18:19:25.365 [DEBUG] [Thread-189919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:19:25.365 [DEBUG] [Thread-189919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:19:25.365 [DEBUG] [Thread-189919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:19:25.365 [DEBUG] [Thread-189919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:19:25.385 [INFO] [Thread-189919] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:19:25.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:19:26.026 [DEBUG] [Thread-189919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:19:26.027 [DEBUG] [Thread-189919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:19:26.027 [DEBUG] [Thread-189919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:19:26.067 [DEBUG] [Thread-189919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:19:26.067 [DEBUG] [Thread-189919] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:19:26.071 [DEBUG] [Thread-189919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:19:26.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:19:26.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:19:26.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:19:26.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:19:26.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:19:26.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:19:26.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:19:26.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:19:26.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:19:26.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.679618 -999.00  +14.50  20.41     48   +3.60 1 1 1 1 1   887    0 10.23 -26.08 ----- 24.7 20.4 171.6 34.1 17.2 -27.6 17.1 -27.0 18.3 -25.4 18.8 -28.6
2026-02-14T18:19:26.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:19:26.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:19:26.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.679618
2026-02-14T18:19:26.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:19:26.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:19:26.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:19:26.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:19:26.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:19:26.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:18:55', tmtdew=12.74, humidity=42.08, cloud=0.0, wind=36.22, temperature=14.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:18:38.995', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:19:26.097 [DEBUG] [Thread-189919] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:19:26.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-14T18:19:26.199 [DEBUG] [Thread-189922] [transport.py] [_log()] starting thread (client mode): 0xa2db4a90
2026-02-14T18:19:26.200 [DEBUG] [Thread-189922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:19:26.215 [DEBUG] [Thread-189922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:19:26.216 [INFO] [Thread-189922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:19:26.223 [DEBUG] [Thread-189922] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:19:26.223 [DEBUG] [Thread-189922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:19:26.223 [DEBUG] [Thread-189922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:19:26.223 [DEBUG] [Thread-189922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:19:26.223 [DEBUG] [Thread-189922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:19:26.223 [DEBUG] [Thread-189922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:19:26.223 [DEBUG] [Thread-189922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:19:26.224 [DEBUG] [Thread-189922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:19:26.224 [DEBUG] [Thread-189922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:19:26.224 [DEBUG] [Thread-189922] [transport.py] [_log()] client lang: <none>
2026-02-14T18:19:26.224 [DEBUG] [Thread-189922] [transport.py] [_log()] server lang: <none>
2026-02-14T18:19:26.224 [DEBUG] [Thread-189922] [transport.py] [_log()] kex follows: False
2026-02-14T18:19:26.224 [DEBUG] [Thread-189922] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:19:26.224 [DEBUG] [Thread-189922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:19:26.224 [DEBUG] [Thread-189922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:19:26.224 [DEBUG] [Thread-189922] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:19:26.224 [DEBUG] [Thread-189922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:19:26.224 [DEBUG] [Thread-189922] [transport.py] [_log()] Compression: none
2026-02-14T18:19:26.224 [DEBUG] [Thread-189922] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:19:26.284 [DEBUG] [Thread-189922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:19:26.285 [DEBUG] [Thread-189922] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:19:26.285 [DEBUG] [Thread-189922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:19:26.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:19:26.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:19:26.343 [DEBUG] [Thread-189922] [transport.py] [_log()] userauth is OK
2026-02-14T18:19:26.343 [DEBUG] [Thread-189922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:19:26.343 [DEBUG] [Thread-189922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:19:26.343 [DEBUG] [Thread-189922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:19:26.343 [DEBUG] [Thread-189922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:19:26.363 [INFO] [Thread-189922] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:19:26.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-14T18:19:26.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:19:26.799 [DEBUG] [Thread-189924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:19:27.163 [DEBUG] [Thread-189922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:19:27.163 [DEBUG] [Thread-189922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:19:27.213 [DEBUG] [Thread-189922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:19:27.214 [DEBUG] [Thread-189922] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:19:27.226 [DEBUG] [Thread-189922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:19:27.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:19:27.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:19:27.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-14T18:19:27.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:19:27.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:19:27.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:19:27.274 [DEBUG] [Thread-189922] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:19:35.920 [DEBUG] [Thread-189925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:19:41.856 [DEBUG] [Thread-189926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:19:56.893 [DEBUG] [Thread-189927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:19:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:19:57.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:19:57.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-14T18:19:59.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 19, 30), 12.81, 41.88, 0.0, 37.93, 14.7, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:19:59.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:19:30
2026-02-14T18:19:59.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:19:59.692 [DEBUG] [Thread-189928] [transport.py] [_log()] starting thread (client mode): 0xa2d02110
2026-02-14T18:19:59.692 [DEBUG] [Thread-189928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:19:59.709 [DEBUG] [Thread-189928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:19:59.710 [INFO] [Thread-189928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:19:59.712 [DEBUG] [Thread-189928] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:19:59.712 [DEBUG] [Thread-189928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:19:59.712 [DEBUG] [Thread-189928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:19:59.712 [DEBUG] [Thread-189928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:19:59.712 [DEBUG] [Thread-189928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:19:59.712 [DEBUG] [Thread-189928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:19:59.712 [DEBUG] [Thread-189928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:19:59.712 [DEBUG] [Thread-189928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:19:59.712 [DEBUG] [Thread-189928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:19:59.712 [DEBUG] [Thread-189928] [transport.py] [_log()] client lang: <none>
2026-02-14T18:19:59.712 [DEBUG] [Thread-189928] [transport.py] [_log()] server lang: <none>
2026-02-14T18:19:59.712 [DEBUG] [Thread-189928] [transport.py] [_log()] kex follows: False
2026-02-14T18:19:59.712 [DEBUG] [Thread-189928] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:19:59.712 [DEBUG] [Thread-189928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:19:59.712 [DEBUG] [Thread-189928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:19:59.712 [DEBUG] [Thread-189928] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:19:59.712 [DEBUG] [Thread-189928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:19:59.712 [DEBUG] [Thread-189928] [transport.py] [_log()] Compression: none
2026-02-14T18:19:59.712 [DEBUG] [Thread-189928] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:19:59.729 [DEBUG] [Thread-189928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:19:59.730 [DEBUG] [Thread-189928] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:19:59.731 [DEBUG] [Thread-189928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:19:59.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:19:59.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:19:59.733 [DEBUG] [Thread-189928] [transport.py] [_log()] userauth is OK
2026-02-14T18:19:59.733 [DEBUG] [Thread-189928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:19:59.734 [DEBUG] [Thread-189928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:19:59.734 [DEBUG] [Thread-189928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:19:59.734 [DEBUG] [Thread-189928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:19:59.753 [INFO] [Thread-189928] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:19:59.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:20:00.414 [DEBUG] [Thread-189928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:20:00.414 [DEBUG] [Thread-189928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:20:00.414 [DEBUG] [Thread-189928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:20:00.454 [DEBUG] [Thread-189928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:20:00.455 [DEBUG] [Thread-189928] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:20:00.458 [DEBUG] [Thread-189928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:20:00.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:20:00.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:20:00.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:20:00.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:20:00.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:20:00.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:20:00.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:20:00.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:20:00.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:20:00.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.679966 -999.00  +14.60  27.87     47   +3.60 1 1 1 1 1   887    0 10.39 -27.43 ----- 23.8 27.9 165.6 34.9 17.2 -27.4 17.1 -26.6 18.4 -25.3 18.8 -27.5
2026-02-14T18:20:00.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:20:00.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:20:00.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.679966
2026-02-14T18:20:00.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:20:00.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:20:00.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:20:00.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:20:00.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:20:00.485 [DEBUG] [Thread-189928] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:20:00.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:19:30', tmtdew=12.81, humidity=41.88, cloud=0.0, wind=37.93, temperature=14.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:19:09.062', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:20:00.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-14T18:20:00.584 [DEBUG] [Thread-189931] [transport.py] [_log()] starting thread (client mode): 0xa2d03310
2026-02-14T18:20:00.584 [DEBUG] [Thread-189931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:20:00.600 [DEBUG] [Thread-189931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:20:00.600 [INFO] [Thread-189931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:20:00.608 [DEBUG] [Thread-189931] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:20:00.608 [DEBUG] [Thread-189931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:20:00.608 [DEBUG] [Thread-189931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:20:00.608 [DEBUG] [Thread-189931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:20:00.608 [DEBUG] [Thread-189931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:20:00.608 [DEBUG] [Thread-189931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:20:00.608 [DEBUG] [Thread-189931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:20:00.608 [DEBUG] [Thread-189931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:20:00.608 [DEBUG] [Thread-189931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:20:00.609 [DEBUG] [Thread-189931] [transport.py] [_log()] client lang: <none>
2026-02-14T18:20:00.609 [DEBUG] [Thread-189931] [transport.py] [_log()] server lang: <none>
2026-02-14T18:20:00.609 [DEBUG] [Thread-189931] [transport.py] [_log()] kex follows: False
2026-02-14T18:20:00.609 [DEBUG] [Thread-189931] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:20:00.609 [DEBUG] [Thread-189931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:20:00.609 [DEBUG] [Thread-189931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:20:00.609 [DEBUG] [Thread-189931] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:20:00.609 [DEBUG] [Thread-189931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:20:00.609 [DEBUG] [Thread-189931] [transport.py] [_log()] Compression: none
2026-02-14T18:20:00.609 [DEBUG] [Thread-189931] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:20:00.670 [DEBUG] [Thread-189931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:20:00.671 [DEBUG] [Thread-189931] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:20:00.671 [DEBUG] [Thread-189931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:20:00.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:20:00.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:20:00.729 [DEBUG] [Thread-189931] [transport.py] [_log()] userauth is OK
2026-02-14T18:20:00.730 [DEBUG] [Thread-189931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:20:00.730 [DEBUG] [Thread-189931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:20:00.730 [DEBUG] [Thread-189931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:20:00.730 [DEBUG] [Thread-189931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:20:00.748 [INFO] [Thread-189931] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:20:00.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-14T18:20:00.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:20:01.585 [DEBUG] [Thread-189931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:20:01.585 [DEBUG] [Thread-189931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:20:01.633 [DEBUG] [Thread-189931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:20:01.633 [DEBUG] [Thread-189931] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:20:01.641 [DEBUG] [Thread-189931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:20:01.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:20:01.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-14T18:20:01.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-14T18:20:01.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:20:01.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:20:01.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:20:01.685 [DEBUG] [Thread-189931] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:20:11.569 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:20:11.570 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:20:11.935 [DEBUG] [Thread-189933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:20:26.990 [DEBUG] [Thread-189934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:20:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:20:31.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:20:31.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-14T18:20:33.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 20, 5), 12.81, 41.86, 0.0, 35.48, 14.66, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:20:33.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:20:05
2026-02-14T18:20:33.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:20:34.090 [DEBUG] [Thread-189935] [transport.py] [_log()] starting thread (client mode): 0xa2db7f70
2026-02-14T18:20:34.090 [DEBUG] [Thread-189935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:20:34.111 [DEBUG] [Thread-189935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:20:34.111 [INFO] [Thread-189935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:20:34.114 [DEBUG] [Thread-189935] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:20:34.114 [DEBUG] [Thread-189935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:20:34.114 [DEBUG] [Thread-189935] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:20:34.114 [DEBUG] [Thread-189935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:20:34.114 [DEBUG] [Thread-189935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:20:34.114 [DEBUG] [Thread-189935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:20:34.114 [DEBUG] [Thread-189935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:20:34.114 [DEBUG] [Thread-189935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:20:34.115 [DEBUG] [Thread-189935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:20:34.115 [DEBUG] [Thread-189935] [transport.py] [_log()] client lang: <none>
2026-02-14T18:20:34.115 [DEBUG] [Thread-189935] [transport.py] [_log()] server lang: <none>
2026-02-14T18:20:34.115 [DEBUG] [Thread-189935] [transport.py] [_log()] kex follows: False
2026-02-14T18:20:34.115 [DEBUG] [Thread-189935] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:20:34.115 [DEBUG] [Thread-189935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:20:34.115 [DEBUG] [Thread-189935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:20:34.115 [DEBUG] [Thread-189935] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:20:34.115 [DEBUG] [Thread-189935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:20:34.115 [DEBUG] [Thread-189935] [transport.py] [_log()] Compression: none
2026-02-14T18:20:34.116 [DEBUG] [Thread-189935] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:20:34.134 [DEBUG] [Thread-189935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:20:34.135 [DEBUG] [Thread-189935] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:20:34.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:20:34.137 [DEBUG] [Thread-189935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:20:34.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:20:34.140 [DEBUG] [Thread-189935] [transport.py] [_log()] userauth is OK
2026-02-14T18:20:34.140 [DEBUG] [Thread-189935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:20:34.140 [DEBUG] [Thread-189935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:20:34.140 [DEBUG] [Thread-189935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:20:34.140 [DEBUG] [Thread-189935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:20:34.161 [INFO] [Thread-189935] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:20:34.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:20:34.796 [DEBUG] [Thread-189935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:20:34.796 [DEBUG] [Thread-189935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:20:34.796 [DEBUG] [Thread-189935] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:20:34.838 [DEBUG] [Thread-189935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:20:34.838 [DEBUG] [Thread-189935] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:20:34.841 [DEBUG] [Thread-189935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:20:34.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:20:34.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:20:34.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:20:34.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:20:34.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:20:34.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:20:34.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:20:34.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:20:34.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:20:34.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.680313 -999.00  +14.60  27.35     47   +3.50 1 1 1 1 1   887    0 10.56 -26.00 ----- 24.4 27.4 177.8 41.3 17.3 -27.6 17.0 -28.1 18.2 -26.5 18.8 -27.2
2026-02-14T18:20:34.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:20:34.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:20:34.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.680313
2026-02-14T18:20:34.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:20:34.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:20:34.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:20:34.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:20:34.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:20:34.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:20:05', tmtdew=12.81, humidity=41.86, cloud=0.0, wind=35.48, temperature=14.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:19:39.043', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:20:34.869 [DEBUG] [Thread-189935] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:20:34.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-14T18:20:34.966 [DEBUG] [Thread-189938] [transport.py] [_log()] starting thread (client mode): 0xa57d5390
2026-02-14T18:20:34.967 [DEBUG] [Thread-189938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:20:34.986 [DEBUG] [Thread-189938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:20:34.986 [INFO] [Thread-189938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:20:34.993 [DEBUG] [Thread-189938] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:20:34.993 [DEBUG] [Thread-189938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:20:34.993 [DEBUG] [Thread-189938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:20:34.994 [DEBUG] [Thread-189938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:20:34.994 [DEBUG] [Thread-189938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:20:34.994 [DEBUG] [Thread-189938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:20:34.994 [DEBUG] [Thread-189938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:20:34.994 [DEBUG] [Thread-189938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:20:34.994 [DEBUG] [Thread-189938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:20:34.994 [DEBUG] [Thread-189938] [transport.py] [_log()] client lang: <none>
2026-02-14T18:20:34.994 [DEBUG] [Thread-189938] [transport.py] [_log()] server lang: <none>
2026-02-14T18:20:34.994 [DEBUG] [Thread-189938] [transport.py] [_log()] kex follows: False
2026-02-14T18:20:34.994 [DEBUG] [Thread-189938] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:20:34.994 [DEBUG] [Thread-189938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:20:34.994 [DEBUG] [Thread-189938] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:20:34.994 [DEBUG] [Thread-189938] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:20:34.994 [DEBUG] [Thread-189938] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:20:34.994 [DEBUG] [Thread-189938] [transport.py] [_log()] Compression: none
2026-02-14T18:20:34.994 [DEBUG] [Thread-189938] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:20:35.051 [DEBUG] [Thread-189938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:20:35.052 [DEBUG] [Thread-189938] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:20:35.052 [DEBUG] [Thread-189938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:20:35.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:20:35.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:20:35.107 [DEBUG] [Thread-189938] [transport.py] [_log()] userauth is OK
2026-02-14T18:20:35.108 [DEBUG] [Thread-189938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:20:35.108 [DEBUG] [Thread-189938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:20:35.108 [DEBUG] [Thread-189938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:20:35.108 [DEBUG] [Thread-189938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:20:35.127 [INFO] [Thread-189938] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:20:35.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-14T18:20:35.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:20:35.934 [DEBUG] [Thread-189938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:20:35.934 [DEBUG] [Thread-189938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:20:35.950 [DEBUG] [Thread-189940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:20:35.985 [DEBUG] [Thread-189938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:20:35.985 [DEBUG] [Thread-189938] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:20:35.994 [DEBUG] [Thread-189938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:20:36.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:20:36.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:20:36.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:20:36.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:20:36.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:20:36.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:20:36.029 [DEBUG] [Thread-189938] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:20:42.026 [DEBUG] [Thread-189941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:20:57.076 [DEBUG] [Thread-189942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:21:06.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:21:06.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:21:06.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-14T18:21:07.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 20, 40), 13.65, 39.65, 0.0, 36.06, 15.49, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:21:07.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:20:40
2026-02-14T18:21:08.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:21:08.432 [DEBUG] [Thread-189943] [transport.py] [_log()] starting thread (client mode): 0xa57d7490
2026-02-14T18:21:08.432 [DEBUG] [Thread-189943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:21:08.452 [DEBUG] [Thread-189943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:21:08.452 [INFO] [Thread-189943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:21:08.455 [DEBUG] [Thread-189943] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:21:08.455 [DEBUG] [Thread-189943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:21:08.455 [DEBUG] [Thread-189943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:21:08.455 [DEBUG] [Thread-189943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:21:08.455 [DEBUG] [Thread-189943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:21:08.455 [DEBUG] [Thread-189943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:21:08.455 [DEBUG] [Thread-189943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:21:08.455 [DEBUG] [Thread-189943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:21:08.455 [DEBUG] [Thread-189943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:21:08.455 [DEBUG] [Thread-189943] [transport.py] [_log()] client lang: <none>
2026-02-14T18:21:08.455 [DEBUG] [Thread-189943] [transport.py] [_log()] server lang: <none>
2026-02-14T18:21:08.455 [DEBUG] [Thread-189943] [transport.py] [_log()] kex follows: False
2026-02-14T18:21:08.455 [DEBUG] [Thread-189943] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:21:08.455 [DEBUG] [Thread-189943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:21:08.455 [DEBUG] [Thread-189943] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:21:08.455 [DEBUG] [Thread-189943] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:21:08.455 [DEBUG] [Thread-189943] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:21:08.455 [DEBUG] [Thread-189943] [transport.py] [_log()] Compression: none
2026-02-14T18:21:08.455 [DEBUG] [Thread-189943] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:21:08.472 [DEBUG] [Thread-189943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:21:08.473 [DEBUG] [Thread-189943] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:21:08.473 [DEBUG] [Thread-189943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:21:08.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:21:08.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:21:08.475 [DEBUG] [Thread-189943] [transport.py] [_log()] userauth is OK
2026-02-14T18:21:08.475 [DEBUG] [Thread-189943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:21:08.476 [DEBUG] [Thread-189943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:21:08.476 [DEBUG] [Thread-189943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:21:08.476 [DEBUG] [Thread-189943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:21:08.500 [INFO] [Thread-189943] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:21:08.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:21:09.136 [DEBUG] [Thread-189943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:21:09.137 [DEBUG] [Thread-189943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:21:09.137 [DEBUG] [Thread-189943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:21:09.177 [DEBUG] [Thread-189943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:21:09.178 [DEBUG] [Thread-189943] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:21:09.181 [DEBUG] [Thread-189943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:21:09.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:21:09.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:21:09.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:21:09.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:21:09.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:21:09.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:21:09.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:21:09.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:21:09.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:21:09.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.681007 -999.00  +14.40  19.67     47   +3.50 1 1 1 1 1   887    0 10.21 -27.44 ----- 28.6 19.7 157.6 34.8 17.2 -28.5 17.1 -26.5 18.2 -25.4 18.7 -27.6
2026-02-14T18:21:09.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:21:09.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:21:09.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.681007
2026-02-14T18:21:09.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:21:09.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:21:09.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:21:09.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:21:09.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:21:09.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:20:40', tmtdew=13.65, humidity=39.65, cloud=0.0, wind=36.06, temperature=15.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:20:39.005', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:21:09.205 [DEBUG] [Thread-189943] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:21:09.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-14T18:21:09.306 [DEBUG] [Thread-189946] [transport.py] [_log()] starting thread (client mode): 0xa57d76a0
2026-02-14T18:21:09.306 [DEBUG] [Thread-189946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:21:09.321 [DEBUG] [Thread-189946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:21:09.321 [INFO] [Thread-189946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:21:09.328 [DEBUG] [Thread-189946] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:21:09.328 [DEBUG] [Thread-189946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:21:09.329 [DEBUG] [Thread-189946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:21:09.329 [DEBUG] [Thread-189946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:21:09.329 [DEBUG] [Thread-189946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:21:09.329 [DEBUG] [Thread-189946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:21:09.329 [DEBUG] [Thread-189946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:21:09.329 [DEBUG] [Thread-189946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:21:09.329 [DEBUG] [Thread-189946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:21:09.329 [DEBUG] [Thread-189946] [transport.py] [_log()] client lang: <none>
2026-02-14T18:21:09.330 [DEBUG] [Thread-189946] [transport.py] [_log()] server lang: <none>
2026-02-14T18:21:09.330 [DEBUG] [Thread-189946] [transport.py] [_log()] kex follows: False
2026-02-14T18:21:09.330 [DEBUG] [Thread-189946] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:21:09.330 [DEBUG] [Thread-189946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:21:09.330 [DEBUG] [Thread-189946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:21:09.330 [DEBUG] [Thread-189946] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:21:09.330 [DEBUG] [Thread-189946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:21:09.330 [DEBUG] [Thread-189946] [transport.py] [_log()] Compression: none
2026-02-14T18:21:09.331 [DEBUG] [Thread-189946] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:21:09.388 [DEBUG] [Thread-189946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:21:09.389 [DEBUG] [Thread-189946] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:21:09.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:21:09.391 [DEBUG] [Thread-189946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:21:09.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:21:09.444 [DEBUG] [Thread-189946] [transport.py] [_log()] userauth is OK
2026-02-14T18:21:09.445 [DEBUG] [Thread-189946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:21:09.445 [DEBUG] [Thread-189946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:21:09.445 [DEBUG] [Thread-189946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:21:09.445 [DEBUG] [Thread-189946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:21:09.464 [INFO] [Thread-189946] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:21:09.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-14T18:21:09.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:21:10.276 [DEBUG] [Thread-189946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:21:10.277 [DEBUG] [Thread-189946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:21:10.324 [DEBUG] [Thread-189946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:21:10.324 [DEBUG] [Thread-189946] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:21:10.333 [DEBUG] [Thread-189946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:21:10.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:21:10.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:21:10.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-14T18:21:10.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:21:10.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:21:10.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:21:10.370 [DEBUG] [Thread-189946] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:21:11.730 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:21:11.731 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:21:12.112 [DEBUG] [Thread-189948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:21:27.172 [DEBUG] [Thread-189949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:21:36.004 [DEBUG] [Thread-189950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:21:40.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:21:40.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:21:40.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-14T18:21:42.208 [DEBUG] [Thread-189951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:21:42.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 21, 15), 12.83, 41.83, 0.0, 33.91, 14.66, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:21:42.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:21:15
2026-02-14T18:21:42.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:21:43.007 [DEBUG] [Thread-189952] [transport.py] [_log()] starting thread (client mode): 0xa57c0f10
2026-02-14T18:21:43.007 [DEBUG] [Thread-189952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:21:43.027 [DEBUG] [Thread-189952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:21:43.027 [INFO] [Thread-189952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:21:43.030 [DEBUG] [Thread-189952] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:21:43.030 [DEBUG] [Thread-189952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:21:43.031 [DEBUG] [Thread-189952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:21:43.031 [DEBUG] [Thread-189952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:21:43.031 [DEBUG] [Thread-189952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:21:43.031 [DEBUG] [Thread-189952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:21:43.031 [DEBUG] [Thread-189952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:21:43.031 [DEBUG] [Thread-189952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:21:43.031 [DEBUG] [Thread-189952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:21:43.031 [DEBUG] [Thread-189952] [transport.py] [_log()] client lang: <none>
2026-02-14T18:21:43.031 [DEBUG] [Thread-189952] [transport.py] [_log()] server lang: <none>
2026-02-14T18:21:43.031 [DEBUG] [Thread-189952] [transport.py] [_log()] kex follows: False
2026-02-14T18:21:43.031 [DEBUG] [Thread-189952] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:21:43.031 [DEBUG] [Thread-189952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:21:43.031 [DEBUG] [Thread-189952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:21:43.031 [DEBUG] [Thread-189952] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:21:43.031 [DEBUG] [Thread-189952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:21:43.031 [DEBUG] [Thread-189952] [transport.py] [_log()] Compression: none
2026-02-14T18:21:43.031 [DEBUG] [Thread-189952] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:21:43.048 [DEBUG] [Thread-189952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:21:43.048 [DEBUG] [Thread-189952] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:21:43.049 [DEBUG] [Thread-189952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:21:43.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:21:43.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:21:43.050 [DEBUG] [Thread-189952] [transport.py] [_log()] userauth is OK
2026-02-14T18:21:43.050 [DEBUG] [Thread-189952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:21:43.050 [DEBUG] [Thread-189952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:21:43.051 [DEBUG] [Thread-189952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:21:43.051 [DEBUG] [Thread-189952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:21:43.064 [INFO] [Thread-189952] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:21:43.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:21:43.835 [DEBUG] [Thread-189952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:21:43.835 [DEBUG] [Thread-189952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:21:43.836 [DEBUG] [Thread-189952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:21:43.876 [DEBUG] [Thread-189952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:21:43.876 [DEBUG] [Thread-189952] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:21:43.879 [DEBUG] [Thread-189952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:21:43.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:21:43.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:21:43.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:21:43.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:21:43.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:21:43.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:21:43.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:21:43.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:21:43.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:21:43.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.681354 -999.00  +14.40  32.46     48   +3.50 1 1 2 1 1   887    0 10.13 -29.45 ----- 33.9 32.5 159.0 44.2 17.1 -27.8 17.0 -26.6 18.2 -26.6 18.7 -28.0
2026-02-14T18:21:43.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:21:43.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:21:43.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.681354
2026-02-14T18:21:43.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:21:43.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:21:43.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:21:43.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:21:43.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:21:43.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:21:15', tmtdew=12.83, humidity=41.83, cloud=0.0, wind=33.91, temperature=14.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:21:08.986', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:21:43.906 [DEBUG] [Thread-189952] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:21:43.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-14T18:21:44.003 [DEBUG] [Thread-189955] [transport.py] [_log()] starting thread (client mode): 0xa2d7bc10
2026-02-14T18:21:44.003 [DEBUG] [Thread-189955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:21:44.017 [DEBUG] [Thread-189955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:21:44.017 [INFO] [Thread-189955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:21:44.025 [DEBUG] [Thread-189955] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:21:44.025 [DEBUG] [Thread-189955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:21:44.025 [DEBUG] [Thread-189955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:21:44.025 [DEBUG] [Thread-189955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:21:44.026 [DEBUG] [Thread-189955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:21:44.026 [DEBUG] [Thread-189955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:21:44.026 [DEBUG] [Thread-189955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:21:44.026 [DEBUG] [Thread-189955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:21:44.026 [DEBUG] [Thread-189955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:21:44.026 [DEBUG] [Thread-189955] [transport.py] [_log()] client lang: <none>
2026-02-14T18:21:44.026 [DEBUG] [Thread-189955] [transport.py] [_log()] server lang: <none>
2026-02-14T18:21:44.026 [DEBUG] [Thread-189955] [transport.py] [_log()] kex follows: False
2026-02-14T18:21:44.026 [DEBUG] [Thread-189955] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:21:44.027 [DEBUG] [Thread-189955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:21:44.027 [DEBUG] [Thread-189955] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:21:44.027 [DEBUG] [Thread-189955] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:21:44.027 [DEBUG] [Thread-189955] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:21:44.027 [DEBUG] [Thread-189955] [transport.py] [_log()] Compression: none
2026-02-14T18:21:44.027 [DEBUG] [Thread-189955] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:21:44.084 [DEBUG] [Thread-189955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:21:44.085 [DEBUG] [Thread-189955] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:21:44.085 [DEBUG] [Thread-189955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:21:44.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:21:44.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:21:44.140 [DEBUG] [Thread-189955] [transport.py] [_log()] userauth is OK
2026-02-14T18:21:44.140 [DEBUG] [Thread-189955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:21:44.140 [DEBUG] [Thread-189955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:21:44.140 [DEBUG] [Thread-189955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:21:44.141 [DEBUG] [Thread-189955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:21:44.159 [INFO] [Thread-189955] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:21:44.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T18:21:44.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:21:44.959 [DEBUG] [Thread-189955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:21:44.960 [DEBUG] [Thread-189955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:21:45.007 [DEBUG] [Thread-189955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:21:45.007 [DEBUG] [Thread-189955] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:21:45.016 [DEBUG] [Thread-189955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:21:45.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:21:45.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:21:45.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-14T18:21:45.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:21:45.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:21:45.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:21:45.053 [DEBUG] [Thread-189955] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:21:57.249 [DEBUG] [Thread-189957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:22:11.873 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:22:11.874 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:22:12.303 [DEBUG] [Thread-189958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:22:15.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:22:15.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:22:15.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-14T18:22:16.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 21, 50), 12.91, 41.63, 0.0, 41.59, 14.8, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:22:16.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:21:50
2026-02-14T18:22:17.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:22:17.437 [DEBUG] [Thread-189959] [transport.py] [_log()] starting thread (client mode): 0xa2d01d20
2026-02-14T18:22:17.437 [DEBUG] [Thread-189959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:22:17.457 [DEBUG] [Thread-189959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:22:17.457 [INFO] [Thread-189959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:22:17.461 [DEBUG] [Thread-189959] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:22:17.461 [DEBUG] [Thread-189959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:22:17.461 [DEBUG] [Thread-189959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:22:17.461 [DEBUG] [Thread-189959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:22:17.461 [DEBUG] [Thread-189959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:22:17.461 [DEBUG] [Thread-189959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:22:17.461 [DEBUG] [Thread-189959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:22:17.461 [DEBUG] [Thread-189959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:22:17.461 [DEBUG] [Thread-189959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:22:17.461 [DEBUG] [Thread-189959] [transport.py] [_log()] client lang: <none>
2026-02-14T18:22:17.461 [DEBUG] [Thread-189959] [transport.py] [_log()] server lang: <none>
2026-02-14T18:22:17.461 [DEBUG] [Thread-189959] [transport.py] [_log()] kex follows: False
2026-02-14T18:22:17.461 [DEBUG] [Thread-189959] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:22:17.461 [DEBUG] [Thread-189959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:22:17.461 [DEBUG] [Thread-189959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:22:17.461 [DEBUG] [Thread-189959] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:22:17.461 [DEBUG] [Thread-189959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:22:17.461 [DEBUG] [Thread-189959] [transport.py] [_log()] Compression: none
2026-02-14T18:22:17.461 [DEBUG] [Thread-189959] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:22:17.480 [DEBUG] [Thread-189959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:22:17.480 [DEBUG] [Thread-189959] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:22:17.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:22:17.481 [DEBUG] [Thread-189959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:22:17.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:22:17.484 [DEBUG] [Thread-189959] [transport.py] [_log()] userauth is OK
2026-02-14T18:22:17.484 [DEBUG] [Thread-189959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:22:17.484 [DEBUG] [Thread-189959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:22:17.484 [DEBUG] [Thread-189959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:22:17.484 [DEBUG] [Thread-189959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:22:17.508 [INFO] [Thread-189959] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:22:17.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:22:18.163 [DEBUG] [Thread-189959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:22:18.163 [DEBUG] [Thread-189959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:22:18.163 [DEBUG] [Thread-189959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:22:18.204 [DEBUG] [Thread-189959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:22:18.205 [DEBUG] [Thread-189959] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:22:18.208 [DEBUG] [Thread-189959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:22:18.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:22:18.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:22:18.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:22:18.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:22:18.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:22:18.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:22:18.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:22:18.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:22:18.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:22:18.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.681702 -999.00  +14.20  29.53     48   +3.50 1 1 1 1 1   887    0 10.31 -31.48 ----- 34.6 29.5 161.0 42.1 17.1 -28.1 16.9 -26.9 18.0 -26.9 18.6 -29.4
2026-02-14T18:22:18.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:22:18.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:22:18.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.681702
2026-02-14T18:22:18.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:22:18.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:22:18.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:22:18.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:22:18.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:22:18.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:21:50', tmtdew=12.91, humidity=41.63, cloud=0.0, wind=41.59, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:21:39.053', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:22:18.235 [DEBUG] [Thread-189959] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:22:18.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-14T18:22:18.328 [DEBUG] [Thread-189962] [transport.py] [_log()] starting thread (client mode): 0xa57d4d00
2026-02-14T18:22:18.328 [DEBUG] [Thread-189962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:22:18.343 [DEBUG] [Thread-189962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:22:18.343 [INFO] [Thread-189962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:22:18.351 [DEBUG] [Thread-189962] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:22:18.351 [DEBUG] [Thread-189962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:22:18.351 [DEBUG] [Thread-189962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:22:18.351 [DEBUG] [Thread-189962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:22:18.351 [DEBUG] [Thread-189962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:22:18.351 [DEBUG] [Thread-189962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:22:18.351 [DEBUG] [Thread-189962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:22:18.351 [DEBUG] [Thread-189962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:22:18.351 [DEBUG] [Thread-189962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:22:18.351 [DEBUG] [Thread-189962] [transport.py] [_log()] client lang: <none>
2026-02-14T18:22:18.351 [DEBUG] [Thread-189962] [transport.py] [_log()] server lang: <none>
2026-02-14T18:22:18.352 [DEBUG] [Thread-189962] [transport.py] [_log()] kex follows: False
2026-02-14T18:22:18.352 [DEBUG] [Thread-189962] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:22:18.352 [DEBUG] [Thread-189962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:22:18.352 [DEBUG] [Thread-189962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:22:18.352 [DEBUG] [Thread-189962] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:22:18.352 [DEBUG] [Thread-189962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:22:18.352 [DEBUG] [Thread-189962] [transport.py] [_log()] Compression: none
2026-02-14T18:22:18.352 [DEBUG] [Thread-189962] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:22:18.408 [DEBUG] [Thread-189962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:22:18.408 [DEBUG] [Thread-189962] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:22:18.409 [DEBUG] [Thread-189962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:22:18.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:22:18.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:22:18.464 [DEBUG] [Thread-189962] [transport.py] [_log()] userauth is OK
2026-02-14T18:22:18.464 [DEBUG] [Thread-189962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:22:18.464 [DEBUG] [Thread-189962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:22:18.465 [DEBUG] [Thread-189962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:22:18.465 [DEBUG] [Thread-189962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:22:18.483 [INFO] [Thread-189962] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:22:18.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-14T18:22:18.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:22:19.310 [DEBUG] [Thread-189962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:22:19.310 [DEBUG] [Thread-189962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:22:19.358 [DEBUG] [Thread-189962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:22:19.359 [DEBUG] [Thread-189962] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:22:19.368 [DEBUG] [Thread-189962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:22:19.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:22:19.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-14T18:22:19.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-14T18:22:19.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:22:19.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:22:19.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:22:19.404 [DEBUG] [Thread-189962] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:22:27.340 [DEBUG] [Thread-189964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:22:36.036 [DEBUG] [Thread-189965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:22:42.389 [DEBUG] [Thread-189966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:22:49.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:22:49.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:22:49.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-14T18:22:51.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 22, 26), 12.81, 41.84, 0.0, 40.62, 14.56, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:22:51.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:22:26
2026-02-14T18:22:51.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:22:51.810 [DEBUG] [Thread-189967] [transport.py] [_log()] starting thread (client mode): 0xa2d00730
2026-02-14T18:22:51.810 [DEBUG] [Thread-189967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:22:51.823 [DEBUG] [Thread-189967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:22:51.823 [INFO] [Thread-189967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:22:51.826 [DEBUG] [Thread-189967] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:22:51.826 [DEBUG] [Thread-189967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:22:51.826 [DEBUG] [Thread-189967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:22:51.826 [DEBUG] [Thread-189967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:22:51.826 [DEBUG] [Thread-189967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:22:51.826 [DEBUG] [Thread-189967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:22:51.826 [DEBUG] [Thread-189967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:22:51.826 [DEBUG] [Thread-189967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:22:51.826 [DEBUG] [Thread-189967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:22:51.826 [DEBUG] [Thread-189967] [transport.py] [_log()] client lang: <none>
2026-02-14T18:22:51.826 [DEBUG] [Thread-189967] [transport.py] [_log()] server lang: <none>
2026-02-14T18:22:51.826 [DEBUG] [Thread-189967] [transport.py] [_log()] kex follows: False
2026-02-14T18:22:51.826 [DEBUG] [Thread-189967] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:22:51.827 [DEBUG] [Thread-189967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:22:51.827 [DEBUG] [Thread-189967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:22:51.827 [DEBUG] [Thread-189967] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:22:51.827 [DEBUG] [Thread-189967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:22:51.827 [DEBUG] [Thread-189967] [transport.py] [_log()] Compression: none
2026-02-14T18:22:51.827 [DEBUG] [Thread-189967] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:22:51.838 [DEBUG] [Thread-189967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:22:51.839 [DEBUG] [Thread-189967] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:22:51.839 [DEBUG] [Thread-189967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:22:51.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:22:51.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:22:51.840 [DEBUG] [Thread-189967] [transport.py] [_log()] userauth is OK
2026-02-14T18:22:51.840 [DEBUG] [Thread-189967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:22:51.840 [DEBUG] [Thread-189967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:22:51.840 [DEBUG] [Thread-189967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:22:51.840 [DEBUG] [Thread-189967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:22:51.853 [INFO] [Thread-189967] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:22:51.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:22:52.453 [DEBUG] [Thread-189967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:22:52.453 [DEBUG] [Thread-189967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:22:52.454 [DEBUG] [Thread-189967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:22:52.494 [DEBUG] [Thread-189967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:22:52.495 [DEBUG] [Thread-189967] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:22:52.498 [DEBUG] [Thread-189967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:22:52.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:22:52.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:22:52.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:22:52.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:22:52.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:22:52.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:22:52.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:22:52.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:22:52.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:22:52.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.682049 -999.00  +14.20  25.54     48   +3.60 1 1 1 1 1   887    0 9.99 -31.18 ----- 26.2 25.5 160.8 34.1 17.0 -28.0 16.9 -26.5 18.0 -25.5 18.5 -28.7
2026-02-14T18:22:52.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:22:52.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:22:52.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.682049
2026-02-14T18:22:52.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:22:52.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:22:52.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:22:52.529 [DEBUG] [Thread-189967] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:22:52.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:22:52.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:22:52.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:22:26', tmtdew=12.81, humidity=41.84, cloud=0.0, wind=40.62, temperature=14.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:22:09.034', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:22:52.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T18:22:52.626 [DEBUG] [Thread-189970] [transport.py] [_log()] starting thread (client mode): 0xa2d02830
2026-02-14T18:22:52.626 [DEBUG] [Thread-189970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:22:52.641 [DEBUG] [Thread-189970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:22:52.641 [INFO] [Thread-189970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:22:52.648 [DEBUG] [Thread-189970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:22:52.649 [DEBUG] [Thread-189970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:22:52.649 [DEBUG] [Thread-189970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:22:52.649 [DEBUG] [Thread-189970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:22:52.649 [DEBUG] [Thread-189970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:22:52.649 [DEBUG] [Thread-189970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:22:52.650 [DEBUG] [Thread-189970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:22:52.650 [DEBUG] [Thread-189970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:22:52.650 [DEBUG] [Thread-189970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:22:52.650 [DEBUG] [Thread-189970] [transport.py] [_log()] client lang: <none>
2026-02-14T18:22:52.650 [DEBUG] [Thread-189970] [transport.py] [_log()] server lang: <none>
2026-02-14T18:22:52.650 [DEBUG] [Thread-189970] [transport.py] [_log()] kex follows: False
2026-02-14T18:22:52.650 [DEBUG] [Thread-189970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:22:52.650 [DEBUG] [Thread-189970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:22:52.651 [DEBUG] [Thread-189970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:22:52.651 [DEBUG] [Thread-189970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:22:52.651 [DEBUG] [Thread-189970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:22:52.651 [DEBUG] [Thread-189970] [transport.py] [_log()] Compression: none
2026-02-14T18:22:52.651 [DEBUG] [Thread-189970] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:22:52.709 [DEBUG] [Thread-189970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:22:52.710 [DEBUG] [Thread-189970] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:22:52.710 [DEBUG] [Thread-189970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:22:52.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:22:52.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:22:52.768 [DEBUG] [Thread-189970] [transport.py] [_log()] userauth is OK
2026-02-14T18:22:52.768 [DEBUG] [Thread-189970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:22:52.769 [DEBUG] [Thread-189970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:22:52.769 [DEBUG] [Thread-189970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:22:52.769 [DEBUG] [Thread-189970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:22:52.788 [INFO] [Thread-189970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:22: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-14T18:22:52.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:22:53.603 [DEBUG] [Thread-189970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:22:53.603 [DEBUG] [Thread-189970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:22:53.651 [DEBUG] [Thread-189970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:22:53.652 [DEBUG] [Thread-189970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:22:53.661 [DEBUG] [Thread-189970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:22:53.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:22:53.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-14T18:22:53.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-14T18:22:53.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:22:53.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:22:53.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:22:53.697 [DEBUG] [Thread-189970] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:22:57.424 [DEBUG] [Thread-189972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:23:12.015 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:23:12.016 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:23:12.475 [DEBUG] [Thread-189973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:23:23.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:23:23.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:23: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-14T18:23:25.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 23, 3), 12.74, 42.03, 0.0, 39.72, 14.55, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:23:25.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:23:03
2026-02-14T18:23:25.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:23:26.161 [DEBUG] [Thread-189974] [transport.py] [_log()] starting thread (client mode): 0xa57d7f70
2026-02-14T18:23:26.162 [DEBUG] [Thread-189974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:23:26.173 [DEBUG] [Thread-189974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:23:26.173 [INFO] [Thread-189974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:23:26.176 [DEBUG] [Thread-189974] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:23:26.177 [DEBUG] [Thread-189974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:23:26.177 [DEBUG] [Thread-189974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:23:26.177 [DEBUG] [Thread-189974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:23:26.177 [DEBUG] [Thread-189974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:23:26.177 [DEBUG] [Thread-189974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:23:26.177 [DEBUG] [Thread-189974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:23:26.177 [DEBUG] [Thread-189974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:23:26.177 [DEBUG] [Thread-189974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:23:26.177 [DEBUG] [Thread-189974] [transport.py] [_log()] client lang: <none>
2026-02-14T18:23:26.177 [DEBUG] [Thread-189974] [transport.py] [_log()] server lang: <none>
2026-02-14T18:23:26.177 [DEBUG] [Thread-189974] [transport.py] [_log()] kex follows: False
2026-02-14T18:23:26.177 [DEBUG] [Thread-189974] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:23:26.177 [DEBUG] [Thread-189974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:23:26.177 [DEBUG] [Thread-189974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:23:26.177 [DEBUG] [Thread-189974] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:23:26.177 [DEBUG] [Thread-189974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:23:26.177 [DEBUG] [Thread-189974] [transport.py] [_log()] Compression: none
2026-02-14T18:23:26.177 [DEBUG] [Thread-189974] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:23:26.197 [DEBUG] [Thread-189974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:23:26.197 [DEBUG] [Thread-189974] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:23:26.198 [DEBUG] [Thread-189974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:23:26.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:23:26.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:23:26.200 [DEBUG] [Thread-189974] [transport.py] [_log()] userauth is OK
2026-02-14T18:23:26.200 [DEBUG] [Thread-189974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:23:26.200 [DEBUG] [Thread-189974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:23:26.200 [DEBUG] [Thread-189974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:23:26.200 [DEBUG] [Thread-189974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:23:26.233 [INFO] [Thread-189974] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:23:26.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:23:26.872 [DEBUG] [Thread-189974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:23:26.873 [DEBUG] [Thread-189974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:23:26.873 [DEBUG] [Thread-189974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:23:26.913 [DEBUG] [Thread-189974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:23:26.914 [DEBUG] [Thread-189974] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:23:26.917 [DEBUG] [Thread-189974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:23:26.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:23:26.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:23:26.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:23:26.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:23:26.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:23:26.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:23:26.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:23:26.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:23:26.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:23:26.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.682396 -999.00  +14.30  26.79     48   +3.60 1 1 1 1 1   887    0 10.05 -34.21 ----- 25.0 26.8 166.6 32.4 17.0 -27.8 16.9 -27.2 18.1 -25.6 18.5 -27.5
2026-02-14T18:23:26.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:23:26.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:23:26.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.682396
2026-02-14T18:23:26.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:23:26.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:23:26.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:23:26.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:23:26.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:23:26.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:23:03', tmtdew=12.74, humidity=42.03, cloud=0.0, wind=39.72, temperature=14.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:22:39.014', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:23:26.944 [DEBUG] [Thread-189974] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:23:27.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T18:23:27.041 [DEBUG] [Thread-189977] [transport.py] [_log()] starting thread (client mode): 0xa57e1f90
2026-02-14T18:23:27.041 [DEBUG] [Thread-189977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:23:27.055 [DEBUG] [Thread-189977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:23:27.055 [INFO] [Thread-189977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:23:27.063 [DEBUG] [Thread-189977] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:23:27.063 [DEBUG] [Thread-189977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:23:27.063 [DEBUG] [Thread-189977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:23:27.063 [DEBUG] [Thread-189977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:23:27.063 [DEBUG] [Thread-189977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:23:27.063 [DEBUG] [Thread-189977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:23:27.064 [DEBUG] [Thread-189977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:23:27.064 [DEBUG] [Thread-189977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:23:27.064 [DEBUG] [Thread-189977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:23:27.064 [DEBUG] [Thread-189977] [transport.py] [_log()] client lang: <none>
2026-02-14T18:23:27.064 [DEBUG] [Thread-189977] [transport.py] [_log()] server lang: <none>
2026-02-14T18:23:27.064 [DEBUG] [Thread-189977] [transport.py] [_log()] kex follows: False
2026-02-14T18:23:27.064 [DEBUG] [Thread-189977] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:23:27.064 [DEBUG] [Thread-189977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:23:27.064 [DEBUG] [Thread-189977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:23:27.065 [DEBUG] [Thread-189977] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:23:27.065 [DEBUG] [Thread-189977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:23:27.065 [DEBUG] [Thread-189977] [transport.py] [_log()] Compression: none
2026-02-14T18:23:27.065 [DEBUG] [Thread-189977] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:23:27.120 [DEBUG] [Thread-189977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:23:27.120 [DEBUG] [Thread-189977] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:23:27.121 [DEBUG] [Thread-189977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:23:27.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:23:27.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:23:27.176 [DEBUG] [Thread-189977] [transport.py] [_log()] userauth is OK
2026-02-14T18:23:27.177 [DEBUG] [Thread-189977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:23:27.177 [DEBUG] [Thread-189977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:23:27.177 [DEBUG] [Thread-189977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:23:27.177 [DEBUG] [Thread-189977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:23:27.196 [INFO] [Thread-189977] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:23:27.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-14T18:23:27.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:23:27.513 [DEBUG] [Thread-189979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:23:28.051 [DEBUG] [Thread-189977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:23:28.052 [DEBUG] [Thread-189977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:23:28.099 [DEBUG] [Thread-189977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:23:28.099 [DEBUG] [Thread-189977] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:23:28.108 [DEBUG] [Thread-189977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:23:28.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:23: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')
2026-02-14T18:23:28.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-14T18:23:28.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:23:28.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:23:28.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:23:28.142 [DEBUG] [Thread-189977] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:23:36.081 [DEBUG] [Thread-189980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:23:42.574 [DEBUG] [Thread-189981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:23:57.611 [DEBUG] [Thread-189982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:23:58.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:23:58.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:23:58.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:24:00.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 23, 39), 13.31, 40.58, 0.0, 38.28, 15.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:24:00.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:23:39
2026-02-14T18:24:00.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:24:00.604 [DEBUG] [Thread-189983] [transport.py] [_log()] starting thread (client mode): 0xa57c39a0
2026-02-14T18:24:00.604 [DEBUG] [Thread-189983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:24:00.625 [DEBUG] [Thread-189983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:24:00.626 [INFO] [Thread-189983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:24:00.629 [DEBUG] [Thread-189983] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:24:00.629 [DEBUG] [Thread-189983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:24:00.629 [DEBUG] [Thread-189983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:24:00.629 [DEBUG] [Thread-189983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:24:00.629 [DEBUG] [Thread-189983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:24:00.629 [DEBUG] [Thread-189983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:24:00.629 [DEBUG] [Thread-189983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:24:00.629 [DEBUG] [Thread-189983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:24:00.629 [DEBUG] [Thread-189983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:24:00.629 [DEBUG] [Thread-189983] [transport.py] [_log()] client lang: <none>
2026-02-14T18:24:00.629 [DEBUG] [Thread-189983] [transport.py] [_log()] server lang: <none>
2026-02-14T18:24:00.629 [DEBUG] [Thread-189983] [transport.py] [_log()] kex follows: False
2026-02-14T18:24:00.629 [DEBUG] [Thread-189983] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:24:00.629 [DEBUG] [Thread-189983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:24:00.629 [DEBUG] [Thread-189983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:24:00.629 [DEBUG] [Thread-189983] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:24:00.629 [DEBUG] [Thread-189983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:24:00.629 [DEBUG] [Thread-189983] [transport.py] [_log()] Compression: none
2026-02-14T18:24:00.629 [DEBUG] [Thread-189983] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:24:00.647 [DEBUG] [Thread-189983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:24:00.647 [DEBUG] [Thread-189983] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:24:00.648 [DEBUG] [Thread-189983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:24:00.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:24:00.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:24:00.650 [DEBUG] [Thread-189983] [transport.py] [_log()] userauth is OK
2026-02-14T18:24:00.650 [DEBUG] [Thread-189983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:24:00.650 [DEBUG] [Thread-189983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:24:00.650 [DEBUG] [Thread-189983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:24:00.650 [DEBUG] [Thread-189983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:24:00.668 [INFO] [Thread-189983] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:24:00.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:24:01.322 [DEBUG] [Thread-189983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:24:01.322 [DEBUG] [Thread-189983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:24:01.323 [DEBUG] [Thread-189983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:24:01.364 [DEBUG] [Thread-189983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:24:01.364 [DEBUG] [Thread-189983] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:24:01.367 [DEBUG] [Thread-189983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:24:01.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:24:01.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:24:01.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:24:01.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:24:01.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:24:01.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:24:01.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:24:01.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:24:01.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:24:01.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.682743 -999.00  +14.40  32.58     48   +3.60 1 1 2 1 1   887    0 10.13 -31.57 ----- 27.6 32.6 162.1 36.9 17.0 -27.9 16.9 -27.0 18.0 -25.9 18.5 -27.1
2026-02-14T18:24:01.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:24:01.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:24:01.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.682743
2026-02-14T18:24:01.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:24:01.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:24:01.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:24:01.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:24:01.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:24:01.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:23:39', tmtdew=13.31, humidity=40.58, cloud=0.0, wind=38.28, temperature=15.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:23:08.995', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:24:01.394 [DEBUG] [Thread-189983] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:24:01.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-14T18:24:01.490 [DEBUG] [Thread-189986] [transport.py] [_log()] starting thread (client mode): 0xa2d01060
2026-02-14T18:24:01.490 [DEBUG] [Thread-189986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:24:01.504 [DEBUG] [Thread-189986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:24:01.505 [INFO] [Thread-189986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:24:01.512 [DEBUG] [Thread-189986] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:24:01.512 [DEBUG] [Thread-189986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:24:01.513 [DEBUG] [Thread-189986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:24:01.513 [DEBUG] [Thread-189986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:24:01.513 [DEBUG] [Thread-189986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:24:01.513 [DEBUG] [Thread-189986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:24:01.513 [DEBUG] [Thread-189986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:24:01.513 [DEBUG] [Thread-189986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:24:01.513 [DEBUG] [Thread-189986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:24:01.513 [DEBUG] [Thread-189986] [transport.py] [_log()] client lang: <none>
2026-02-14T18:24:01.514 [DEBUG] [Thread-189986] [transport.py] [_log()] server lang: <none>
2026-02-14T18:24:01.514 [DEBUG] [Thread-189986] [transport.py] [_log()] kex follows: False
2026-02-14T18:24:01.514 [DEBUG] [Thread-189986] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:24:01.514 [DEBUG] [Thread-189986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:24:01.514 [DEBUG] [Thread-189986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:24:01.514 [DEBUG] [Thread-189986] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:24:01.514 [DEBUG] [Thread-189986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:24:01.514 [DEBUG] [Thread-189986] [transport.py] [_log()] Compression: none
2026-02-14T18:24:01.515 [DEBUG] [Thread-189986] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:24:01.572 [DEBUG] [Thread-189986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:24:01.573 [DEBUG] [Thread-189986] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:24:01.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:24:01.574 [DEBUG] [Thread-189986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:24:01.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:24:01.628 [DEBUG] [Thread-189986] [transport.py] [_log()] userauth is OK
2026-02-14T18:24:01.629 [DEBUG] [Thread-189986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:24:01.629 [DEBUG] [Thread-189986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:24:01.629 [DEBUG] [Thread-189986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:24:01.629 [DEBUG] [Thread-189986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:24:01.652 [INFO] [Thread-189986] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:24:01.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-14T18:24:01.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:24:02.465 [DEBUG] [Thread-189986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:24:02.466 [DEBUG] [Thread-189986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:24:02.517 [DEBUG] [Thread-189986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:24:02.518 [DEBUG] [Thread-189986] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:24:02.527 [DEBUG] [Thread-189986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:24:02.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:24:02.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-14T18:24:02.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-14T18:24:02.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:24:02.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:24:02.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:24:02.572 [DEBUG] [Thread-189986] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:24:12.159 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:24:12.161 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:24:12.647 [DEBUG] [Thread-189988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:24:27.707 [DEBUG] [Thread-189989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:24:32.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:24:32.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:24:32.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-14T18:24:34.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 24, 14), 12.63, 42.36, 0.0, 36.26, 14.53, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:24:34.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:24:14
2026-02-14T18:24:34.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:24:34.937 [DEBUG] [Thread-189990] [transport.py] [_log()] starting thread (client mode): 0xa2d03fa0
2026-02-14T18:24:34.937 [DEBUG] [Thread-189990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:24:34.957 [DEBUG] [Thread-189990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:24:34.957 [INFO] [Thread-189990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:24:34.960 [DEBUG] [Thread-189990] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:24:34.961 [DEBUG] [Thread-189990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:24:34.961 [DEBUG] [Thread-189990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:24:34.961 [DEBUG] [Thread-189990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:24:34.961 [DEBUG] [Thread-189990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:24:34.961 [DEBUG] [Thread-189990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:24:34.961 [DEBUG] [Thread-189990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:24:34.961 [DEBUG] [Thread-189990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:24:34.961 [DEBUG] [Thread-189990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:24:34.961 [DEBUG] [Thread-189990] [transport.py] [_log()] client lang: <none>
2026-02-14T18:24:34.961 [DEBUG] [Thread-189990] [transport.py] [_log()] server lang: <none>
2026-02-14T18:24:34.961 [DEBUG] [Thread-189990] [transport.py] [_log()] kex follows: False
2026-02-14T18:24:34.961 [DEBUG] [Thread-189990] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:24:34.961 [DEBUG] [Thread-189990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:24:34.961 [DEBUG] [Thread-189990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:24:34.962 [DEBUG] [Thread-189990] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:24:34.962 [DEBUG] [Thread-189990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:24:34.962 [DEBUG] [Thread-189990] [transport.py] [_log()] Compression: none
2026-02-14T18:24:34.962 [DEBUG] [Thread-189990] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:24:34.980 [DEBUG] [Thread-189990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:24:34.980 [DEBUG] [Thread-189990] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:24:34.981 [DEBUG] [Thread-189990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:24:34.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:24:34.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:24:34.983 [DEBUG] [Thread-189990] [transport.py] [_log()] userauth is OK
2026-02-14T18:24:34.983 [DEBUG] [Thread-189990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:24:34.984 [DEBUG] [Thread-189990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:24:34.984 [DEBUG] [Thread-189990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:24:34.984 [DEBUG] [Thread-189990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:24:35.007 [INFO] [Thread-189990] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:24:35.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:24:35.620 [DEBUG] [Thread-189990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:24:35.620 [DEBUG] [Thread-189990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:24:35.621 [DEBUG] [Thread-189990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:24:35.661 [DEBUG] [Thread-189990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:24:35.661 [DEBUG] [Thread-189990] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:24:35.665 [DEBUG] [Thread-189990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:24:35.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:24:35.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:24:35.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:24:35.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:24:35.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:24:35.690 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:24:35.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:24:35.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:24:35.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:24:35.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.683090 -999.00  +14.30  29.89     48   +3.60 1 1 1 1 1   887    0 10.00 -33.28 ----- 28.0 29.9 156.8 39.1 17.0 -28.1 16.9 -26.9 17.9 -26.2 18.4 -28.3
2026-02-14T18:24:35.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:24:35.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:24:35.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.683090
2026-02-14T18:24:35.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:24:35.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:24:35.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:24:35.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:24:35.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:24:35.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:24:14', tmtdew=12.63, humidity=42.36, cloud=0.0, wind=36.26, temperature=14.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:23:38.976', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:24:35.693 [DEBUG] [Thread-189990] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:24:35.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-14T18:24:35.789 [DEBUG] [Thread-189993] [transport.py] [_log()] starting thread (client mode): 0xa57e00d0
2026-02-14T18:24:35.789 [DEBUG] [Thread-189993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:24:35.803 [DEBUG] [Thread-189993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:24:35.803 [INFO] [Thread-189993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:24:35.811 [DEBUG] [Thread-189993] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:24:35.812 [DEBUG] [Thread-189993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:24:35.812 [DEBUG] [Thread-189993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:24:35.812 [DEBUG] [Thread-189993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:24:35.812 [DEBUG] [Thread-189993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:24:35.812 [DEBUG] [Thread-189993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:24:35.812 [DEBUG] [Thread-189993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:24:35.812 [DEBUG] [Thread-189993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:24:35.812 [DEBUG] [Thread-189993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:24:35.812 [DEBUG] [Thread-189993] [transport.py] [_log()] client lang: <none>
2026-02-14T18:24:35.812 [DEBUG] [Thread-189993] [transport.py] [_log()] server lang: <none>
2026-02-14T18:24:35.813 [DEBUG] [Thread-189993] [transport.py] [_log()] kex follows: False
2026-02-14T18:24:35.813 [DEBUG] [Thread-189993] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:24:35.813 [DEBUG] [Thread-189993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:24:35.813 [DEBUG] [Thread-189993] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:24:35.813 [DEBUG] [Thread-189993] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:24:35.813 [DEBUG] [Thread-189993] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:24:35.813 [DEBUG] [Thread-189993] [transport.py] [_log()] Compression: none
2026-02-14T18:24:35.813 [DEBUG] [Thread-189993] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:24:35.872 [DEBUG] [Thread-189993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:24:35.873 [DEBUG] [Thread-189993] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:24:35.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:24:35.874 [DEBUG] [Thread-189993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:24:35.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:24:35.928 [DEBUG] [Thread-189993] [transport.py] [_log()] userauth is OK
2026-02-14T18:24:35.929 [DEBUG] [Thread-189993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:24:35.929 [DEBUG] [Thread-189993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:24:35.929 [DEBUG] [Thread-189993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:24:35.929 [DEBUG] [Thread-189993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:24:35.955 [INFO] [Thread-189993] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:24:35.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-14T18:24:35.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:24:36.138 [DEBUG] [Thread-189995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:24:36.769 [DEBUG] [Thread-189993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:24:36.769 [DEBUG] [Thread-189993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:24:36.817 [DEBUG] [Thread-189993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:24:36.818 [DEBUG] [Thread-189993] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:24:36.827 [DEBUG] [Thread-189993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:24:36.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:24:36.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:24:36.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:24:36.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:24:36.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:24:36.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:24:36.864 [DEBUG] [Thread-189993] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:24:42.742 [DEBUG] [Thread-189996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:24:57.794 [DEBUG] [Thread-189997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:25:06.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:25:06.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:25:06.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-14T18:25:08.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 24, 50), 12.4, 42.94, 0.0, 31.02, 14.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:25:08.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:24:50
2026-02-14T18:25:09.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:25:09.443 [DEBUG] [Thread-189998] [transport.py] [_log()] starting thread (client mode): 0xa2d7aa10
2026-02-14T18:25:09.443 [DEBUG] [Thread-189998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:25:09.460 [DEBUG] [Thread-189998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:25:09.460 [INFO] [Thread-189998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:25:09.463 [DEBUG] [Thread-189998] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:25:09.463 [DEBUG] [Thread-189998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:25:09.463 [DEBUG] [Thread-189998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:25:09.463 [DEBUG] [Thread-189998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:25:09.463 [DEBUG] [Thread-189998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:25:09.463 [DEBUG] [Thread-189998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:25:09.463 [DEBUG] [Thread-189998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:25:09.463 [DEBUG] [Thread-189998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:25:09.463 [DEBUG] [Thread-189998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:25:09.463 [DEBUG] [Thread-189998] [transport.py] [_log()] client lang: <none>
2026-02-14T18:25:09.463 [DEBUG] [Thread-189998] [transport.py] [_log()] server lang: <none>
2026-02-14T18:25:09.463 [DEBUG] [Thread-189998] [transport.py] [_log()] kex follows: False
2026-02-14T18:25:09.463 [DEBUG] [Thread-189998] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:25:09.463 [DEBUG] [Thread-189998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:25:09.463 [DEBUG] [Thread-189998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:25:09.463 [DEBUG] [Thread-189998] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:25:09.463 [DEBUG] [Thread-189998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:25:09.463 [DEBUG] [Thread-189998] [transport.py] [_log()] Compression: none
2026-02-14T18:25:09.463 [DEBUG] [Thread-189998] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:25:09.481 [DEBUG] [Thread-189998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:25:09.481 [DEBUG] [Thread-189998] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:25:09.482 [DEBUG] [Thread-189998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:25:09.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:25:09.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:25:09.483 [DEBUG] [Thread-189998] [transport.py] [_log()] userauth is OK
2026-02-14T18:25:09.484 [DEBUG] [Thread-189998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:25:09.484 [DEBUG] [Thread-189998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:25:09.484 [DEBUG] [Thread-189998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:25:09.484 [DEBUG] [Thread-189998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:25:09.508 [INFO] [Thread-189998] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:25:09.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:25:10.337 [DEBUG] [Thread-189998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:25:10.337 [DEBUG] [Thread-189998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:25:10.338 [DEBUG] [Thread-189998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:25:10.379 [DEBUG] [Thread-189998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:25:10.379 [DEBUG] [Thread-189998] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:25:10.381 [DEBUG] [Thread-189998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:25:10.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:25:10.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:25:10.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:25:10.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:25:10.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:25:10.403 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:25:10.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:25:10.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:25:10.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:25:10.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.683438 -999.00  +14.10  29.75     49   +3.60 1 1 1 1 1   887    0 9.84 -34.47 ----- 28.3 29.8 159.4 43.4 16.9 -28.4 16.7 -26.6 17.8 -26.5 18.4 -28.4
2026-02-14T18:25:10.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:25:10.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:25:10.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.683438
2026-02-14T18:25:10.404 [DEBUG] [Thread-189998] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:25:10.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:25:10.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:25:10.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:25:10.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:25:10.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:25:10.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:24:50', tmtdew=12.4, humidity=42.94, cloud=0.0, wind=31.02, temperature=14.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:24:09.043', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:25:10.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T18:25:10.494 [DEBUG] [Thread-190001] [transport.py] [_log()] starting thread (client mode): 0xa2defd60
2026-02-14T18:25:10.494 [DEBUG] [Thread-190001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:25:10.512 [DEBUG] [Thread-190001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:25:10.512 [INFO] [Thread-190001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:25:10.519 [DEBUG] [Thread-190001] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:25:10.520 [DEBUG] [Thread-190001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:25:10.520 [DEBUG] [Thread-190001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:25:10.520 [DEBUG] [Thread-190001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:25:10.520 [DEBUG] [Thread-190001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:25:10.520 [DEBUG] [Thread-190001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:25:10.520 [DEBUG] [Thread-190001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:25:10.520 [DEBUG] [Thread-190001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:25:10.520 [DEBUG] [Thread-190001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:25:10.520 [DEBUG] [Thread-190001] [transport.py] [_log()] client lang: <none>
2026-02-14T18:25:10.520 [DEBUG] [Thread-190001] [transport.py] [_log()] server lang: <none>
2026-02-14T18:25:10.520 [DEBUG] [Thread-190001] [transport.py] [_log()] kex follows: False
2026-02-14T18:25:10.520 [DEBUG] [Thread-190001] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:25:10.520 [DEBUG] [Thread-190001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:25:10.520 [DEBUG] [Thread-190001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:25:10.521 [DEBUG] [Thread-190001] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:25:10.521 [DEBUG] [Thread-190001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:25:10.521 [DEBUG] [Thread-190001] [transport.py] [_log()] Compression: none
2026-02-14T18:25:10.521 [DEBUG] [Thread-190001] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:25:10.579 [DEBUG] [Thread-190001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:25:10.579 [DEBUG] [Thread-190001] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:25:10.580 [DEBUG] [Thread-190001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:25:10.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:25:10.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:25:10.636 [DEBUG] [Thread-190001] [transport.py] [_log()] userauth is OK
2026-02-14T18:25:10.637 [DEBUG] [Thread-190001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:25:10.637 [DEBUG] [Thread-190001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:25:10.637 [DEBUG] [Thread-190001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:25:10.637 [DEBUG] [Thread-190001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:25:10.654 [INFO] [Thread-190001] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:25:10.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-14T18:25:10.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:25:11.460 [DEBUG] [Thread-190001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:25:11.460 [DEBUG] [Thread-190001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:25:11.508 [DEBUG] [Thread-190001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:25:11.508 [DEBUG] [Thread-190001] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:25:11.517 [DEBUG] [Thread-190001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:25:11.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:25:11.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:25:11.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:25:11.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:25:11.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:25:11.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:25:11.551 [DEBUG] [Thread-190001] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:25:12.300 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:25:12.301 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:25:12.829 [DEBUG] [Thread-190003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:25:27.890 [DEBUG] [Thread-190004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:25:36.171 [DEBUG] [Thread-190005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:25:41.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:25:41.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:25:41.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-14T18:25:42.925 [DEBUG] [Thread-190006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:25:43.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 25, 26), 12.39, 42.97, 0.0, 31.99, 14.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:25:43.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:25:26
2026-02-14T18:25:43.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:25:44.032 [DEBUG] [Thread-190007] [transport.py] [_log()] starting thread (client mode): 0xa2d7b190
2026-02-14T18:25:44.032 [DEBUG] [Thread-190007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:25:44.052 [DEBUG] [Thread-190007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:25:44.052 [INFO] [Thread-190007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:25:44.055 [DEBUG] [Thread-190007] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:25:44.055 [DEBUG] [Thread-190007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:25:44.055 [DEBUG] [Thread-190007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:25:44.055 [DEBUG] [Thread-190007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:25:44.055 [DEBUG] [Thread-190007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:25:44.055 [DEBUG] [Thread-190007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:25:44.056 [DEBUG] [Thread-190007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:25:44.056 [DEBUG] [Thread-190007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:25:44.056 [DEBUG] [Thread-190007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:25:44.056 [DEBUG] [Thread-190007] [transport.py] [_log()] client lang: <none>
2026-02-14T18:25:44.056 [DEBUG] [Thread-190007] [transport.py] [_log()] server lang: <none>
2026-02-14T18:25:44.056 [DEBUG] [Thread-190007] [transport.py] [_log()] kex follows: False
2026-02-14T18:25:44.056 [DEBUG] [Thread-190007] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:25:44.056 [DEBUG] [Thread-190007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:25:44.056 [DEBUG] [Thread-190007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:25:44.056 [DEBUG] [Thread-190007] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:25:44.056 [DEBUG] [Thread-190007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:25:44.056 [DEBUG] [Thread-190007] [transport.py] [_log()] Compression: none
2026-02-14T18:25:44.056 [DEBUG] [Thread-190007] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:25:44.074 [DEBUG] [Thread-190007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:25:44.075 [DEBUG] [Thread-190007] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:25:44.075 [DEBUG] [Thread-190007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:25:44.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:25:44.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:25:44.077 [DEBUG] [Thread-190007] [transport.py] [_log()] userauth is OK
2026-02-14T18:25:44.077 [DEBUG] [Thread-190007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:25:44.077 [DEBUG] [Thread-190007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:25:44.077 [DEBUG] [Thread-190007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:25:44.078 [DEBUG] [Thread-190007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:25:44.102 [INFO] [Thread-190007] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:25:44.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:25:44.694 [DEBUG] [Thread-190007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:25:44.694 [DEBUG] [Thread-190007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:25:44.695 [DEBUG] [Thread-190007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:25:44.735 [DEBUG] [Thread-190007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:25:44.736 [DEBUG] [Thread-190007] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:25:44.740 [DEBUG] [Thread-190007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:25:44.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:25:44.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:25:44.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:25:44.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:25:44.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:25:44.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:25:44.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:25:44.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:25:44.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:25:44.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.684479 -999.00  +14.10  26.75     49   +3.60 1 1 1 1 1   887    0 10.00 -34.66 ----- 22.4 26.8 176.6 35.7 16.8 -27.5 16.4 -27.1 17.7 -25.5 18.2 -28.1
2026-02-14T18:25:44.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:25:44.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:25:44.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.684479
2026-02-14T18:25:44.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:25:44.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:25:44.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:25:44.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:25:44.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:25:44.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:25:26', tmtdew=12.39, humidity=42.97, cloud=0.0, wind=31.99, temperature=14.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:25:38.986', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:25:44.767 [DEBUG] [Thread-190007] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:25:44.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-14T18:25:44.864 [DEBUG] [Thread-190010] [transport.py] [_log()] starting thread (client mode): 0xa2ded150
2026-02-14T18:25:44.865 [DEBUG] [Thread-190010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:25:44.879 [DEBUG] [Thread-190010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:25:44.879 [INFO] [Thread-190010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:25:44.887 [DEBUG] [Thread-190010] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:25:44.887 [DEBUG] [Thread-190010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:25:44.887 [DEBUG] [Thread-190010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:25:44.887 [DEBUG] [Thread-190010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:25:44.887 [DEBUG] [Thread-190010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:25:44.887 [DEBUG] [Thread-190010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:25:44.887 [DEBUG] [Thread-190010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:25:44.887 [DEBUG] [Thread-190010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:25:44.887 [DEBUG] [Thread-190010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:25:44.887 [DEBUG] [Thread-190010] [transport.py] [_log()] client lang: <none>
2026-02-14T18:25:44.888 [DEBUG] [Thread-190010] [transport.py] [_log()] server lang: <none>
2026-02-14T18:25:44.888 [DEBUG] [Thread-190010] [transport.py] [_log()] kex follows: False
2026-02-14T18:25:44.888 [DEBUG] [Thread-190010] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:25:44.888 [DEBUG] [Thread-190010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:25:44.888 [DEBUG] [Thread-190010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:25:44.888 [DEBUG] [Thread-190010] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:25:44.888 [DEBUG] [Thread-190010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:25:44.888 [DEBUG] [Thread-190010] [transport.py] [_log()] Compression: none
2026-02-14T18:25:44.888 [DEBUG] [Thread-190010] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:25:44.943 [DEBUG] [Thread-190010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:25:44.944 [DEBUG] [Thread-190010] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:25:44.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:25:44.945 [DEBUG] [Thread-190010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:25:44.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:25:44.999 [DEBUG] [Thread-190010] [transport.py] [_log()] userauth is OK
2026-02-14T18:25:45.000 [DEBUG] [Thread-190010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:25:45.000 [DEBUG] [Thread-190010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:25:45.000 [DEBUG] [Thread-190010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:25:45.000 [DEBUG] [Thread-190010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:25:45.018 [INFO] [Thread-190010] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:25:45.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-14T18:25:45.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:25:45.814 [DEBUG] [Thread-190010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:25:45.814 [DEBUG] [Thread-190010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:25:45.862 [DEBUG] [Thread-190010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:25:45.862 [DEBUG] [Thread-190010] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:25:45.871 [DEBUG] [Thread-190010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:25:45.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:25:45.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-14T18:25: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') -> 00000000
2026-02-14T18:25:45.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:25:45.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:25:45.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:25:45.907 [DEBUG] [Thread-190010] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:25:57.961 [DEBUG] [Thread-190012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:26:12.441 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:26:12.442 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:26:13.013 [DEBUG] [Thread-190013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:26:15.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:26:15.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:26:15.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-14T18:26:17.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 26, 1), 12.42, 43.01, 0.0, 32.69, 14.38, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:26:17.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:26:01
2026-02-14T18:26:18.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:26:18.248 [DEBUG] [Thread-190014] [transport.py] [_log()] starting thread (client mode): 0xa2dec8b0
2026-02-14T18:26:18.248 [DEBUG] [Thread-190014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:26:18.268 [DEBUG] [Thread-190014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:26:18.268 [INFO] [Thread-190014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:26:18.271 [DEBUG] [Thread-190014] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:26:18.271 [DEBUG] [Thread-190014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:26:18.271 [DEBUG] [Thread-190014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:26:18.271 [DEBUG] [Thread-190014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:26:18.272 [DEBUG] [Thread-190014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:26:18.272 [DEBUG] [Thread-190014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:26:18.272 [DEBUG] [Thread-190014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:26:18.272 [DEBUG] [Thread-190014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:26:18.272 [DEBUG] [Thread-190014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:26:18.272 [DEBUG] [Thread-190014] [transport.py] [_log()] client lang: <none>
2026-02-14T18:26:18.272 [DEBUG] [Thread-190014] [transport.py] [_log()] server lang: <none>
2026-02-14T18:26:18.272 [DEBUG] [Thread-190014] [transport.py] [_log()] kex follows: False
2026-02-14T18:26:18.272 [DEBUG] [Thread-190014] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:26:18.272 [DEBUG] [Thread-190014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:26:18.272 [DEBUG] [Thread-190014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:26:18.272 [DEBUG] [Thread-190014] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:26:18.272 [DEBUG] [Thread-190014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:26:18.272 [DEBUG] [Thread-190014] [transport.py] [_log()] Compression: none
2026-02-14T18:26:18.272 [DEBUG] [Thread-190014] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:26:18.280 [DEBUG] [Thread-190014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:26:18.280 [DEBUG] [Thread-190014] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:26:18.281 [DEBUG] [Thread-190014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:26:18.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:26:18.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:26:18.283 [DEBUG] [Thread-190014] [transport.py] [_log()] userauth is OK
2026-02-14T18:26:18.283 [DEBUG] [Thread-190014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:26:18.283 [DEBUG] [Thread-190014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:26:18.284 [DEBUG] [Thread-190014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:26:18.284 [DEBUG] [Thread-190014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:26:18.307 [INFO] [Thread-190014] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:26:18.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:26:18.921 [DEBUG] [Thread-190014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:26:18.922 [DEBUG] [Thread-190014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:26:18.922 [DEBUG] [Thread-190014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:26:18.962 [DEBUG] [Thread-190014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:26:18.963 [DEBUG] [Thread-190014] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:26:18.966 [DEBUG] [Thread-190014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:26:18.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:26:18.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:26:18.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:26:18.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:26:18.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:26:18.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:26:18.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:26:18.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:26:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:26:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.684827 -999.00  +14.20  28.58     48   +3.50 1 1 1 1 1   887    0 9.91 -34.34 ----- 26.2 28.6 157.2 34.4 16.8 -27.4 16.6 -26.7 17.7 -25.4 18.1 -27.6
2026-02-14T18:26:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:26:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:26:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.684827
2026-02-14T18:26:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:26:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:26:18.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:26:18.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:26:18.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:26:18.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:26:01', tmtdew=12.42, humidity=43.01, cloud=0.0, wind=32.69, temperature=14.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:26:09.053', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:26:18.996 [DEBUG] [Thread-190014] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:26:19.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-14T18:26:19.086 [DEBUG] [Thread-190017] [transport.py] [_log()] starting thread (client mode): 0xa2d798d0
2026-02-14T18:26:19.087 [DEBUG] [Thread-190017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:26:19.101 [DEBUG] [Thread-190017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:26:19.101 [INFO] [Thread-190017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:26:19.109 [DEBUG] [Thread-190017] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:26:19.109 [DEBUG] [Thread-190017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:26:19.109 [DEBUG] [Thread-190017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:26:19.109 [DEBUG] [Thread-190017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:26:19.109 [DEBUG] [Thread-190017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:26:19.109 [DEBUG] [Thread-190017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:26:19.109 [DEBUG] [Thread-190017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:26:19.109 [DEBUG] [Thread-190017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:26:19.109 [DEBUG] [Thread-190017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:26:19.110 [DEBUG] [Thread-190017] [transport.py] [_log()] client lang: <none>
2026-02-14T18:26:19.110 [DEBUG] [Thread-190017] [transport.py] [_log()] server lang: <none>
2026-02-14T18:26:19.110 [DEBUG] [Thread-190017] [transport.py] [_log()] kex follows: False
2026-02-14T18:26:19.110 [DEBUG] [Thread-190017] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:26:19.110 [DEBUG] [Thread-190017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:26:19.110 [DEBUG] [Thread-190017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:26:19.110 [DEBUG] [Thread-190017] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:26:19.110 [DEBUG] [Thread-190017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:26:19.110 [DEBUG] [Thread-190017] [transport.py] [_log()] Compression: none
2026-02-14T18:26:19.110 [DEBUG] [Thread-190017] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:26:19.168 [DEBUG] [Thread-190017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:26:19.168 [DEBUG] [Thread-190017] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:26:19.169 [DEBUG] [Thread-190017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:26:19.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:26:19.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:26:19.224 [DEBUG] [Thread-190017] [transport.py] [_log()] userauth is OK
2026-02-14T18:26:19.224 [DEBUG] [Thread-190017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:26:19.224 [DEBUG] [Thread-190017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:26:19.224 [DEBUG] [Thread-190017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:26:19.224 [DEBUG] [Thread-190017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:26:19.242 [INFO] [Thread-190017] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:26:19.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-14T18:26:19.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:26:20.048 [DEBUG] [Thread-190017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:26:20.048 [DEBUG] [Thread-190017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:26:20.096 [DEBUG] [Thread-190017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:26:20.097 [DEBUG] [Thread-190017] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:26:20.106 [DEBUG] [Thread-190017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:26:20.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:26:20.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-14T18:26:20.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:26:20.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:26:20.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:26:20.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:26:20.143 [DEBUG] [Thread-190017] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:26:28.047 [DEBUG] [Thread-190019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:26:36.204 [DEBUG] [Thread-190020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:26:43.106 [DEBUG] [Thread-190021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:26:50.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:26:50.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:26:50.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-14T18:26:52.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 26, 36), 13.35, 40.45, 0.0, 45.55, 15.26, 0, 0, 0, 2, 1, 0),)
2026-02-14T18:26:52.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:26:36
2026-02-14T18:26:52.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:26:52.577 [DEBUG] [Thread-190022] [transport.py] [_log()] starting thread (client mode): 0xa2dc0e50
2026-02-14T18:26:52.577 [DEBUG] [Thread-190022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:26:52.596 [DEBUG] [Thread-190022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:26:52.596 [INFO] [Thread-190022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:26:52.599 [DEBUG] [Thread-190022] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:26:52.599 [DEBUG] [Thread-190022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:26:52.599 [DEBUG] [Thread-190022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:26:52.599 [DEBUG] [Thread-190022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:26:52.599 [DEBUG] [Thread-190022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:26:52.599 [DEBUG] [Thread-190022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:26:52.599 [DEBUG] [Thread-190022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:26:52.599 [DEBUG] [Thread-190022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:26:52.599 [DEBUG] [Thread-190022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:26:52.599 [DEBUG] [Thread-190022] [transport.py] [_log()] client lang: <none>
2026-02-14T18:26:52.599 [DEBUG] [Thread-190022] [transport.py] [_log()] server lang: <none>
2026-02-14T18:26:52.599 [DEBUG] [Thread-190022] [transport.py] [_log()] kex follows: False
2026-02-14T18:26:52.599 [DEBUG] [Thread-190022] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:26:52.599 [DEBUG] [Thread-190022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:26:52.599 [DEBUG] [Thread-190022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:26:52.599 [DEBUG] [Thread-190022] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:26:52.599 [DEBUG] [Thread-190022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:26:52.599 [DEBUG] [Thread-190022] [transport.py] [_log()] Compression: none
2026-02-14T18:26:52.599 [DEBUG] [Thread-190022] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:26:52.616 [DEBUG] [Thread-190022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:26:52.616 [DEBUG] [Thread-190022] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:26:52.617 [DEBUG] [Thread-190022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:26:52.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:26:52.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:26:52.619 [DEBUG] [Thread-190022] [transport.py] [_log()] userauth is OK
2026-02-14T18:26:52.619 [DEBUG] [Thread-190022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:26:52.619 [DEBUG] [Thread-190022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:26:52.619 [DEBUG] [Thread-190022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:26:52.619 [DEBUG] [Thread-190022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:26:52.638 [INFO] [Thread-190022] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:26:52.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:26:53.283 [DEBUG] [Thread-190022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:26:53.283 [DEBUG] [Thread-190022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:26:53.284 [DEBUG] [Thread-190022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:26:53.325 [DEBUG] [Thread-190022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:26:53.325 [DEBUG] [Thread-190022] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:26:53.328 [DEBUG] [Thread-190022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:26:53.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:26:53.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:26:53.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:26:53.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:26:53.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:26:53.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:26:53.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:26:53.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:26:53.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:26:53.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.685174 -999.00  +14.20  31.80     48   +3.40 1 1 2 1 1   887    0 10.15 -35.76 ----- 33.7 31.8 163.4 47.2 16.7 -27.7 16.6 -26.8 17.7 -26.3 18.1 -27.7
2026-02-14T18:26:53.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:26:53.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:26:53.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.685174
2026-02-14T18:26:53.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:26:53.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:26:53.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:26:53.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:26:53.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:26:53.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:26:36', tmtdew=13.35, humidity=40.45, cloud=0.0, wind=45.55, temperature=15.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:26:39.034', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:26:53.351 [DEBUG] [Thread-190022] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:26: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-14T18:26:53.455 [DEBUG] [Thread-190025] [transport.py] [_log()] starting thread (client mode): 0xa57e0bb0
2026-02-14T18:26:53.456 [DEBUG] [Thread-190025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:26:53.471 [DEBUG] [Thread-190025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:26:53.471 [INFO] [Thread-190025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:26:53.478 [DEBUG] [Thread-190025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:26:53.478 [DEBUG] [Thread-190025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:26:53.478 [DEBUG] [Thread-190025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:26:53.478 [DEBUG] [Thread-190025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:26:53.478 [DEBUG] [Thread-190025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:26:53.479 [DEBUG] [Thread-190025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:26:53.479 [DEBUG] [Thread-190025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:26:53.479 [DEBUG] [Thread-190025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:26:53.479 [DEBUG] [Thread-190025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:26:53.479 [DEBUG] [Thread-190025] [transport.py] [_log()] client lang: <none>
2026-02-14T18:26:53.479 [DEBUG] [Thread-190025] [transport.py] [_log()] server lang: <none>
2026-02-14T18:26:53.479 [DEBUG] [Thread-190025] [transport.py] [_log()] kex follows: False
2026-02-14T18:26:53.479 [DEBUG] [Thread-190025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:26:53.479 [DEBUG] [Thread-190025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:26:53.479 [DEBUG] [Thread-190025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:26:53.479 [DEBUG] [Thread-190025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:26:53.479 [DEBUG] [Thread-190025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:26:53.479 [DEBUG] [Thread-190025] [transport.py] [_log()] Compression: none
2026-02-14T18:26:53.479 [DEBUG] [Thread-190025] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:26:53.535 [DEBUG] [Thread-190025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:26:53.536 [DEBUG] [Thread-190025] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:26:53.536 [DEBUG] [Thread-190025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:26:53.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:26:53.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:26:53.592 [DEBUG] [Thread-190025] [transport.py] [_log()] userauth is OK
2026-02-14T18:26:53.592 [DEBUG] [Thread-190025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:26:53.592 [DEBUG] [Thread-190025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:26:53.592 [DEBUG] [Thread-190025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:26:53.592 [DEBUG] [Thread-190025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:26:53.610 [INFO] [Thread-190025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:26:53.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-14T18:26:53.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:26:54.437 [DEBUG] [Thread-190025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:26:54.438 [DEBUG] [Thread-190025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:26:54.485 [DEBUG] [Thread-190025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:26:54.485 [DEBUG] [Thread-190025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:26:54.494 [DEBUG] [Thread-190025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:26:54.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:26: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-14T18:26: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-14T18:26:54.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:26:54.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:26:54.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:26:54.531 [DEBUG] [Thread-190025] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:26:58.143 [DEBUG] [Thread-190027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:27:12.581 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:27:12.582 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:27:13.193 [DEBUG] [Thread-190028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:27:24.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:27:24.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:27:24.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-14T18:27:26.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 27, 12), 12.69, 42.16, 0.0, 41.55, 14.45, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:27:26.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:27:12
2026-02-14T18:27:27.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:27:27.231 [DEBUG] [Thread-190029] [transport.py] [_log()] starting thread (client mode): 0xa2d7b8b0
2026-02-14T18:27:27.231 [DEBUG] [Thread-190029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:27:27.251 [DEBUG] [Thread-190029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:27:27.252 [INFO] [Thread-190029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:27:27.255 [DEBUG] [Thread-190029] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:27:27.255 [DEBUG] [Thread-190029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:27:27.255 [DEBUG] [Thread-190029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:27:27.255 [DEBUG] [Thread-190029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:27:27.255 [DEBUG] [Thread-190029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:27:27.255 [DEBUG] [Thread-190029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:27:27.255 [DEBUG] [Thread-190029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:27:27.255 [DEBUG] [Thread-190029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:27:27.255 [DEBUG] [Thread-190029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:27:27.255 [DEBUG] [Thread-190029] [transport.py] [_log()] client lang: <none>
2026-02-14T18:27:27.255 [DEBUG] [Thread-190029] [transport.py] [_log()] server lang: <none>
2026-02-14T18:27:27.255 [DEBUG] [Thread-190029] [transport.py] [_log()] kex follows: False
2026-02-14T18:27:27.255 [DEBUG] [Thread-190029] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:27:27.255 [DEBUG] [Thread-190029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:27:27.255 [DEBUG] [Thread-190029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:27:27.256 [DEBUG] [Thread-190029] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:27:27.256 [DEBUG] [Thread-190029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:27:27.256 [DEBUG] [Thread-190029] [transport.py] [_log()] Compression: none
2026-02-14T18:27:27.256 [DEBUG] [Thread-190029] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:27:27.271 [DEBUG] [Thread-190029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:27:27.272 [DEBUG] [Thread-190029] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:27:27.272 [DEBUG] [Thread-190029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:27:27.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:27:27.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:27:27.317 [DEBUG] [Thread-190029] [transport.py] [_log()] userauth is OK
2026-02-14T18:27:27.317 [DEBUG] [Thread-190029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:27:27.317 [DEBUG] [Thread-190029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:27:27.317 [DEBUG] [Thread-190029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:27:27.317 [DEBUG] [Thread-190029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:27:27.338 [INFO] [Thread-190029] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:27:27.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:27:27.988 [DEBUG] [Thread-190029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:27:27.989 [DEBUG] [Thread-190029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:27:27.989 [DEBUG] [Thread-190029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:27:28.030 [DEBUG] [Thread-190029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:27:28.030 [DEBUG] [Thread-190029] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:27:28.034 [DEBUG] [Thread-190029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:27:28.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:27:28.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:27:28.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:27:28.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:27:28.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:27:28.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:27:28.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:27:28.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:27:28.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:27:28.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.685521 -999.00  +14.10  36.95     48   +3.30 1 1 2 1 1   887    0 10.05 -33.76 ----- 29.2 37.0 159.6 47.4 16.6 -28.0 16.6 -28.0 17.6 -26.3 18.1 -28.3
2026-02-14T18:27:28.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:27:28.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:27:28.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.685521
2026-02-14T18:27:28.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:27:28.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:27:28.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:27:28.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:27:28.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:27:28.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:27:12', tmtdew=12.69, humidity=42.16, cloud=0.0, wind=41.55, temperature=14.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:27:09.014', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:27:28.060 [DEBUG] [Thread-190029] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:27:28.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-14T18:27:28.159 [DEBUG] [Thread-190032] [transport.py] [_log()] starting thread (client mode): 0xa57d40d0
2026-02-14T18:27:28.160 [DEBUG] [Thread-190032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:27:28.175 [DEBUG] [Thread-190032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:27:28.175 [INFO] [Thread-190032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:27:28.182 [DEBUG] [Thread-190032] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:27:28.183 [DEBUG] [Thread-190032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:27:28.183 [DEBUG] [Thread-190032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:27:28.183 [DEBUG] [Thread-190032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:27:28.183 [DEBUG] [Thread-190032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:27:28.183 [DEBUG] [Thread-190032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:27:28.183 [DEBUG] [Thread-190032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:27:28.183 [DEBUG] [Thread-190032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:27:28.183 [DEBUG] [Thread-190032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:27:28.183 [DEBUG] [Thread-190032] [transport.py] [_log()] client lang: <none>
2026-02-14T18:27:28.183 [DEBUG] [Thread-190032] [transport.py] [_log()] server lang: <none>
2026-02-14T18:27:28.183 [DEBUG] [Thread-190032] [transport.py] [_log()] kex follows: False
2026-02-14T18:27:28.183 [DEBUG] [Thread-190032] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:27:28.183 [DEBUG] [Thread-190032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:27:28.183 [DEBUG] [Thread-190032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:27:28.184 [DEBUG] [Thread-190032] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:27:28.184 [DEBUG] [Thread-190032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:27:28.184 [DEBUG] [Thread-190032] [transport.py] [_log()] Compression: none
2026-02-14T18:27:28.184 [DEBUG] [Thread-190032] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:27:28.226 [DEBUG] [Thread-190034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:27:28.240 [DEBUG] [Thread-190032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:27:28.240 [DEBUG] [Thread-190032] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:27:28.241 [DEBUG] [Thread-190032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:27:28.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:27:28.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:27:28.296 [DEBUG] [Thread-190032] [transport.py] [_log()] userauth is OK
2026-02-14T18:27:28.296 [DEBUG] [Thread-190032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:27:28.296 [DEBUG] [Thread-190032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:27:28.297 [DEBUG] [Thread-190032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:27:28.297 [DEBUG] [Thread-190032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:27:28.317 [INFO] [Thread-190032] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:27:28.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-14T18:27:28.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:27:29.145 [DEBUG] [Thread-190032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:27:29.146 [DEBUG] [Thread-190032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:27:29.193 [DEBUG] [Thread-190032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:27:29.193 [DEBUG] [Thread-190032] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:27:29.203 [DEBUG] [Thread-190032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:27:29.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:27:29.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-14T18:27:29.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:27:29.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:27:29.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:27:29.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:27:29.239 [DEBUG] [Thread-190032] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:27:36.270 [DEBUG] [Thread-190035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:27:43.277 [DEBUG] [Thread-190036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:27:58.313 [DEBUG] [Thread-190037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:27:59.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:27:59.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:27:59.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-14T18:28:01.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 27, 47), 12.72, 42.09, 0.0, 39.89, 14.4, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:28:01.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:27:47
2026-02-14T18:28:01.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:28:01.730 [DEBUG] [Thread-190038] [transport.py] [_log()] starting thread (client mode): 0xa57d4880
2026-02-14T18:28:01.730 [DEBUG] [Thread-190038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:28:01.750 [DEBUG] [Thread-190038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:28:01.750 [INFO] [Thread-190038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:28:01.753 [DEBUG] [Thread-190038] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:28:01.754 [DEBUG] [Thread-190038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:28:01.754 [DEBUG] [Thread-190038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:28:01.754 [DEBUG] [Thread-190038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:28:01.754 [DEBUG] [Thread-190038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:28:01.754 [DEBUG] [Thread-190038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:28:01.754 [DEBUG] [Thread-190038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:28:01.754 [DEBUG] [Thread-190038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:28:01.754 [DEBUG] [Thread-190038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:28:01.754 [DEBUG] [Thread-190038] [transport.py] [_log()] client lang: <none>
2026-02-14T18:28:01.754 [DEBUG] [Thread-190038] [transport.py] [_log()] server lang: <none>
2026-02-14T18:28:01.754 [DEBUG] [Thread-190038] [transport.py] [_log()] kex follows: False
2026-02-14T18:28:01.754 [DEBUG] [Thread-190038] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:28:01.754 [DEBUG] [Thread-190038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:28:01.754 [DEBUG] [Thread-190038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:28:01.755 [DEBUG] [Thread-190038] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:28:01.755 [DEBUG] [Thread-190038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:28:01.755 [DEBUG] [Thread-190038] [transport.py] [_log()] Compression: none
2026-02-14T18:28:01.755 [DEBUG] [Thread-190038] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:28:01.773 [DEBUG] [Thread-190038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:28:01.774 [DEBUG] [Thread-190038] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:28:01.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:28:01.775 [DEBUG] [Thread-190038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:28:01.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:28:01.778 [DEBUG] [Thread-190038] [transport.py] [_log()] userauth is OK
2026-02-14T18:28:01.778 [DEBUG] [Thread-190038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:28:01.778 [DEBUG] [Thread-190038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:28:01.778 [DEBUG] [Thread-190038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:28:01.778 [DEBUG] [Thread-190038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:28:01.804 [INFO] [Thread-190038] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:28:01.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:28:02.422 [DEBUG] [Thread-190038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:28:02.422 [DEBUG] [Thread-190038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:28:02.423 [DEBUG] [Thread-190038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:28:02.464 [DEBUG] [Thread-190038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:28:02.464 [DEBUG] [Thread-190038] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:28:02.467 [DEBUG] [Thread-190038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:28:02.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:28:02.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:28:02.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:28:02.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:28:02.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:28:02.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:28:02.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:28:02.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:28:02.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:28:02.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.685868 -999.00  +14.00  28.83     48   +3.40 1 1 1 1 1   887    0 10.11 -32.96 ----- 27.4 28.8 159.2 44.7 16.6 -27.9 16.5 -27.2 17.5 -26.4 18.0 -29.0
2026-02-14T18:28:02.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:28:02.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:28:02.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.685868
2026-02-14T18:28:02.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:28:02.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:28:02.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:28:02.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:28:02.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:28:02.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:27:47', tmtdew=12.72, humidity=42.09, cloud=0.0, wind=39.89, temperature=14.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:27:38.995', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:28:02.498 [DEBUG] [Thread-190038] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:28:02.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T18:28:02.593 [DEBUG] [Thread-190041] [transport.py] [_log()] starting thread (client mode): 0xa57e3a00
2026-02-14T18:28:02.593 [DEBUG] [Thread-190041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:28:02.608 [DEBUG] [Thread-190041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:28:02.608 [INFO] [Thread-190041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:28:02.615 [DEBUG] [Thread-190041] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:28:02.615 [DEBUG] [Thread-190041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:28:02.615 [DEBUG] [Thread-190041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:28:02.615 [DEBUG] [Thread-190041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:28:02.616 [DEBUG] [Thread-190041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:28:02.616 [DEBUG] [Thread-190041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:28:02.616 [DEBUG] [Thread-190041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:28:02.616 [DEBUG] [Thread-190041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:28:02.616 [DEBUG] [Thread-190041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:28:02.616 [DEBUG] [Thread-190041] [transport.py] [_log()] client lang: <none>
2026-02-14T18:28:02.616 [DEBUG] [Thread-190041] [transport.py] [_log()] server lang: <none>
2026-02-14T18:28:02.616 [DEBUG] [Thread-190041] [transport.py] [_log()] kex follows: False
2026-02-14T18:28:02.616 [DEBUG] [Thread-190041] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:28:02.616 [DEBUG] [Thread-190041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:28:02.616 [DEBUG] [Thread-190041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:28:02.616 [DEBUG] [Thread-190041] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:28:02.616 [DEBUG] [Thread-190041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:28:02.616 [DEBUG] [Thread-190041] [transport.py] [_log()] Compression: none
2026-02-14T18:28:02.616 [DEBUG] [Thread-190041] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:28:02.676 [DEBUG] [Thread-190041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:28:02.676 [DEBUG] [Thread-190041] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:28:02.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:28:02.677 [DEBUG] [Thread-190041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:28:02.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:28:02.732 [DEBUG] [Thread-190041] [transport.py] [_log()] userauth is OK
2026-02-14T18:28:02.732 [DEBUG] [Thread-190041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:28:02.733 [DEBUG] [Thread-190041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:28:02.733 [DEBUG] [Thread-190041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:28:02.733 [DEBUG] [Thread-190041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:28:02.752 [INFO] [Thread-190041] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:28:02.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T18:28:02.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:28:03.556 [DEBUG] [Thread-190041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:28:03.556 [DEBUG] [Thread-190041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:28:03.604 [DEBUG] [Thread-190041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:28:03.605 [DEBUG] [Thread-190041] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:28:03.614 [DEBUG] [Thread-190041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:28:03.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:28:03.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')
2026-02-14T18:28:03.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-14T18:28:03.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:28:03.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:28:03.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:28:03.650 [DEBUG] [Thread-190041] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:28:12.723 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:28:12.724 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:28:13.354 [DEBUG] [Thread-190043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:28:28.407 [DEBUG] [Thread-190044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:28:33.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:28:33.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:28:33.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-14T18:28:35.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 28, 23), 12.7, 42.13, 0.0, 41.83, 14.36, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:28:35.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:28:23
2026-02-14T18:28:35.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:28:35.990 [DEBUG] [Thread-190045] [transport.py] [_log()] starting thread (client mode): 0xa2deca60
2026-02-14T18:28:35.991 [DEBUG] [Thread-190045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:28:36.014 [DEBUG] [Thread-190045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:28:36.014 [INFO] [Thread-190045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:28:36.018 [DEBUG] [Thread-190045] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:28:36.018 [DEBUG] [Thread-190045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:28:36.018 [DEBUG] [Thread-190045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:28:36.018 [DEBUG] [Thread-190045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:28:36.018 [DEBUG] [Thread-190045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:28:36.019 [DEBUG] [Thread-190045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:28:36.019 [DEBUG] [Thread-190045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:28:36.019 [DEBUG] [Thread-190045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:28:36.019 [DEBUG] [Thread-190045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:28:36.019 [DEBUG] [Thread-190045] [transport.py] [_log()] client lang: <none>
2026-02-14T18:28:36.019 [DEBUG] [Thread-190045] [transport.py] [_log()] server lang: <none>
2026-02-14T18:28:36.019 [DEBUG] [Thread-190045] [transport.py] [_log()] kex follows: False
2026-02-14T18:28:36.019 [DEBUG] [Thread-190045] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:28:36.019 [DEBUG] [Thread-190045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:28:36.020 [DEBUG] [Thread-190045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:28:36.020 [DEBUG] [Thread-190045] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:28:36.020 [DEBUG] [Thread-190045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:28:36.020 [DEBUG] [Thread-190045] [transport.py] [_log()] Compression: none
2026-02-14T18:28:36.020 [DEBUG] [Thread-190045] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:28:36.042 [DEBUG] [Thread-190045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:28:36.043 [DEBUG] [Thread-190045] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:28:36.043 [DEBUG] [Thread-190045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:28:36.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:28:36.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:28:36.046 [DEBUG] [Thread-190045] [transport.py] [_log()] userauth is OK
2026-02-14T18:28:36.046 [DEBUG] [Thread-190045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:28:36.046 [DEBUG] [Thread-190045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:28:36.047 [DEBUG] [Thread-190045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:28:36.047 [DEBUG] [Thread-190045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:28:36.086 [INFO] [Thread-190045] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:28:36.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:28:36.315 [DEBUG] [Thread-190047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:28:36.737 [DEBUG] [Thread-190045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:28:36.738 [DEBUG] [Thread-190045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:28:36.738 [DEBUG] [Thread-190045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:28:36.778 [DEBUG] [Thread-190045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:28:36.778 [DEBUG] [Thread-190045] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:28:36.782 [DEBUG] [Thread-190045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:28:36.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:28:36.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:28:36.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:28:36.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:28:36.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:28:36.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:28:36.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:28:36.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:28:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:28:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.686215 -999.00  +14.00  29.38     48   +3.40 1 1 1 1 1   887    0 9.78 -31.96 ----- 32.5 29.4 166.2 38.4 16.5 -27.8 16.4 -26.6 17.5 -25.9 18.0 -27.8
2026-02-14T18:28:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:28:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:28:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.686215
2026-02-14T18:28:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:28:36.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:28:36.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:28:36.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:28:36.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:28:36.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:28:23', tmtdew=12.7, humidity=42.13, cloud=0.0, wind=41.83, temperature=14.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:28:08.976', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:28:36.809 [DEBUG] [Thread-190045] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:28:36.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-14T18:28:36.916 [DEBUG] [Thread-190049] [transport.py] [_log()] starting thread (client mode): 0xa57e1e10
2026-02-14T18:28:36.916 [DEBUG] [Thread-190049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:28:36.931 [DEBUG] [Thread-190049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:28:36.931 [INFO] [Thread-190049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:28:36.939 [DEBUG] [Thread-190049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:28:36.939 [DEBUG] [Thread-190049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:28:36.940 [DEBUG] [Thread-190049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:28:36.940 [DEBUG] [Thread-190049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:28:36.940 [DEBUG] [Thread-190049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:28:36.940 [DEBUG] [Thread-190049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:28:36.940 [DEBUG] [Thread-190049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:28:36.940 [DEBUG] [Thread-190049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:28:36.940 [DEBUG] [Thread-190049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:28:36.940 [DEBUG] [Thread-190049] [transport.py] [_log()] client lang: <none>
2026-02-14T18:28:36.940 [DEBUG] [Thread-190049] [transport.py] [_log()] server lang: <none>
2026-02-14T18:28:36.940 [DEBUG] [Thread-190049] [transport.py] [_log()] kex follows: False
2026-02-14T18:28:36.940 [DEBUG] [Thread-190049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:28:36.940 [DEBUG] [Thread-190049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:28:36.940 [DEBUG] [Thread-190049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:28:36.940 [DEBUG] [Thread-190049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:28:36.941 [DEBUG] [Thread-190049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:28:36.941 [DEBUG] [Thread-190049] [transport.py] [_log()] Compression: none
2026-02-14T18:28:36.941 [DEBUG] [Thread-190049] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:28:36.996 [DEBUG] [Thread-190049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:28:36.997 [DEBUG] [Thread-190049] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:28:36.997 [DEBUG] [Thread-190049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:28:36.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:28:36.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:28:37.056 [DEBUG] [Thread-190049] [transport.py] [_log()] userauth is OK
2026-02-14T18:28:37.056 [DEBUG] [Thread-190049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:28:37.056 [DEBUG] [Thread-190049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:28:37.056 [DEBUG] [Thread-190049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:28:37.056 [DEBUG] [Thread-190049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:28:37.080 [INFO] [Thread-190049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:28:37.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-14T18:28:37.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:28:37.896 [DEBUG] [Thread-190049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:28:37.896 [DEBUG] [Thread-190049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:28:37.944 [DEBUG] [Thread-190049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:28:37.944 [DEBUG] [Thread-190049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:28:37.954 [DEBUG] [Thread-190049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:28:37.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:28:37.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-14T18:28:37.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:28:37.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:28:37.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:28:37.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:28:37.990 [DEBUG] [Thread-190049] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:28:43.444 [DEBUG] [Thread-190051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:28:58.499 [DEBUG] [Thread-190052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:29:08.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:29:08.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:29:08.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:29:09.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 28, 57), 12.65, 42.27, 0.0, 36.49, 14.41, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:29:09.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:28:57
2026-02-14T18:29:10.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:29:10.650 [DEBUG] [Thread-190053] [transport.py] [_log()] starting thread (client mode): 0xa57d75b0
2026-02-14T18:29:10.651 [DEBUG] [Thread-190053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:29:10.670 [DEBUG] [Thread-190053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:29:10.670 [INFO] [Thread-190053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:29:10.673 [DEBUG] [Thread-190053] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:29:10.674 [DEBUG] [Thread-190053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:29:10.674 [DEBUG] [Thread-190053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:29:10.674 [DEBUG] [Thread-190053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:29:10.674 [DEBUG] [Thread-190053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:29:10.674 [DEBUG] [Thread-190053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:29:10.674 [DEBUG] [Thread-190053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:29:10.674 [DEBUG] [Thread-190053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:29:10.674 [DEBUG] [Thread-190053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:29:10.674 [DEBUG] [Thread-190053] [transport.py] [_log()] client lang: <none>
2026-02-14T18:29:10.674 [DEBUG] [Thread-190053] [transport.py] [_log()] server lang: <none>
2026-02-14T18:29:10.674 [DEBUG] [Thread-190053] [transport.py] [_log()] kex follows: False
2026-02-14T18:29:10.674 [DEBUG] [Thread-190053] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:29:10.674 [DEBUG] [Thread-190053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:29:10.674 [DEBUG] [Thread-190053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:29:10.674 [DEBUG] [Thread-190053] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:29:10.674 [DEBUG] [Thread-190053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:29:10.674 [DEBUG] [Thread-190053] [transport.py] [_log()] Compression: none
2026-02-14T18:29:10.674 [DEBUG] [Thread-190053] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:29:10.690 [DEBUG] [Thread-190053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:29:10.690 [DEBUG] [Thread-190053] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:29:10.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:29:10.692 [DEBUG] [Thread-190053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:29:10.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:29:10.693 [DEBUG] [Thread-190053] [transport.py] [_log()] userauth is OK
2026-02-14T18:29:10.694 [DEBUG] [Thread-190053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:29:10.694 [DEBUG] [Thread-190053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:29:10.694 [DEBUG] [Thread-190053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:29:10.694 [DEBUG] [Thread-190053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:29:10.713 [INFO] [Thread-190053] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:29:10.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:29:11.353 [DEBUG] [Thread-190053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:29:11.353 [DEBUG] [Thread-190053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:29:11.354 [DEBUG] [Thread-190053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:29:11.395 [DEBUG] [Thread-190053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:29:11.395 [DEBUG] [Thread-190053] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:29:11.398 [DEBUG] [Thread-190053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:29:11.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:29:11.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:29:11.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:29:11.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:29:11.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:29:11.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:29:11.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:29:11.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:29:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:29:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.686563 -999.00  +14.00  30.84     48   +3.40 1 1 2 1 1   887    0 10.18 -30.47 ----- 33.3 30.8 161.4 42.9 16.5 -27.7 16.4 -26.6 17.4 -26.1 17.9 -28.9
2026-02-14T18:29:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:29:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:29:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.686563
2026-02-14T18:29:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:29:11.422 [DEBUG] [Thread-190053] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:29:11.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:29:11.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:29:11.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:29:11.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:29:11.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:28:57', tmtdew=12.65, humidity=42.27, cloud=0.0, wind=36.49, temperature=14.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:28:39.043', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:29:11.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T18:29:11.519 [DEBUG] [Thread-190056] [transport.py] [_log()] starting thread (client mode): 0xa5773610
2026-02-14T18:29:11.519 [DEBUG] [Thread-190056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:29:11.534 [DEBUG] [Thread-190056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:29:11.534 [INFO] [Thread-190056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:29:11.541 [DEBUG] [Thread-190056] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:29:11.542 [DEBUG] [Thread-190056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:29:11.542 [DEBUG] [Thread-190056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:29:11.542 [DEBUG] [Thread-190056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:29:11.542 [DEBUG] [Thread-190056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:29:11.542 [DEBUG] [Thread-190056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:29:11.542 [DEBUG] [Thread-190056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:29:11.542 [DEBUG] [Thread-190056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:29:11.542 [DEBUG] [Thread-190056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:29:11.542 [DEBUG] [Thread-190056] [transport.py] [_log()] client lang: <none>
2026-02-14T18:29:11.542 [DEBUG] [Thread-190056] [transport.py] [_log()] server lang: <none>
2026-02-14T18:29:11.542 [DEBUG] [Thread-190056] [transport.py] [_log()] kex follows: False
2026-02-14T18:29:11.542 [DEBUG] [Thread-190056] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:29:11.542 [DEBUG] [Thread-190056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:29:11.542 [DEBUG] [Thread-190056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:29:11.542 [DEBUG] [Thread-190056] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:29:11.543 [DEBUG] [Thread-190056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:29:11.543 [DEBUG] [Thread-190056] [transport.py] [_log()] Compression: none
2026-02-14T18:29:11.543 [DEBUG] [Thread-190056] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:29:11.599 [DEBUG] [Thread-190056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:29:11.600 [DEBUG] [Thread-190056] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:29:11.601 [DEBUG] [Thread-190056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:29:11.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:29:11.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:29:11.656 [DEBUG] [Thread-190056] [transport.py] [_log()] userauth is OK
2026-02-14T18:29:11.656 [DEBUG] [Thread-190056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:29:11.656 [DEBUG] [Thread-190056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:29:11.656 [DEBUG] [Thread-190056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:29:11.656 [DEBUG] [Thread-190056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:29:11.681 [INFO] [Thread-190056] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:29:11.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-14T18:29:11.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:29:12.512 [DEBUG] [Thread-190056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:29:12.512 [DEBUG] [Thread-190056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:29:12.560 [DEBUG] [Thread-190056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:29:12.560 [DEBUG] [Thread-190056] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:29:12.568 [DEBUG] [Thread-190056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:29:12.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:29:12.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:29:12.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-14T18:29:12.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:29:12.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:29:12.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:29:12.600 [DEBUG] [Thread-190056] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:29:12.863 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:29:12.864 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:29:13.535 [DEBUG] [Thread-190058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:29:28.584 [DEBUG] [Thread-190059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:29:36.348 [DEBUG] [Thread-190060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:29:42.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:29:42.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:29:42.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-14T18:29:43.621 [DEBUG] [Thread-190061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:29:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 29, 33), 13.37, 40.32, 0.0, 50.77, 15.06, 0, 0, 0, 2, 1, 0),)
2026-02-14T18:29:44.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:29:33
2026-02-14T18:29:44.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:29:45.071 [DEBUG] [Thread-190062] [transport.py] [_log()] starting thread (client mode): 0xa2dec880
2026-02-14T18:29:45.071 [DEBUG] [Thread-190062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:29:45.091 [DEBUG] [Thread-190062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:29:45.091 [INFO] [Thread-190062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:29:45.094 [DEBUG] [Thread-190062] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:29:45.095 [DEBUG] [Thread-190062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:29:45.095 [DEBUG] [Thread-190062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:29:45.095 [DEBUG] [Thread-190062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:29:45.095 [DEBUG] [Thread-190062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:29:45.095 [DEBUG] [Thread-190062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:29:45.095 [DEBUG] [Thread-190062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:29:45.095 [DEBUG] [Thread-190062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:29:45.095 [DEBUG] [Thread-190062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:29:45.095 [DEBUG] [Thread-190062] [transport.py] [_log()] client lang: <none>
2026-02-14T18:29:45.095 [DEBUG] [Thread-190062] [transport.py] [_log()] server lang: <none>
2026-02-14T18:29:45.095 [DEBUG] [Thread-190062] [transport.py] [_log()] kex follows: False
2026-02-14T18:29:45.095 [DEBUG] [Thread-190062] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:29:45.095 [DEBUG] [Thread-190062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:29:45.095 [DEBUG] [Thread-190062] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:29:45.095 [DEBUG] [Thread-190062] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:29:45.095 [DEBUG] [Thread-190062] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:29:45.095 [DEBUG] [Thread-190062] [transport.py] [_log()] Compression: none
2026-02-14T18:29:45.095 [DEBUG] [Thread-190062] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:29:45.111 [DEBUG] [Thread-190062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:29:45.112 [DEBUG] [Thread-190062] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:29:45.112 [DEBUG] [Thread-190062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:29:45.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:29:45.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:29:45.114 [DEBUG] [Thread-190062] [transport.py] [_log()] userauth is OK
2026-02-14T18:29:45.114 [DEBUG] [Thread-190062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:29:45.114 [DEBUG] [Thread-190062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:29:45.114 [DEBUG] [Thread-190062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:29:45.115 [DEBUG] [Thread-190062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:29:45.152 [INFO] [Thread-190062] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:29:45.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:29:45.731 [DEBUG] [Thread-190062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:29:45.731 [DEBUG] [Thread-190062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:29:45.732 [DEBUG] [Thread-190062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:29:45.773 [DEBUG] [Thread-190062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:29:45.773 [DEBUG] [Thread-190062] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:29:45.776 [DEBUG] [Thread-190062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:29:45.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:29:45.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:29:45.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:29:45.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:29:45.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:29:45.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:29:45.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:29:45.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:29:45.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:29:45.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.686910 -999.00  +14.00  35.73     48   +3.40 1 1 2 1 1   887    0 10.12 -30.05 ----- 26.7 35.7 166.0 42.9 16.4 -28.1 16.4 -26.5 17.4 -26.3 17.9 -27.9
2026-02-14T18:29:45.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:29:45.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:29:45.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.686910
2026-02-14T18:29:45.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:29:45.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:29:45.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:29:45.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:29:45.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:29:45.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:29:33', tmtdew=13.37, humidity=40.32, cloud=0.0, wind=50.77, temperature=15.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:29:09.024', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:29:45.803 [DEBUG] [Thread-190062] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:29:45.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-14T18:29:45.899 [DEBUG] [Thread-190065] [transport.py] [_log()] starting thread (client mode): 0xa57708b0
2026-02-14T18:29:45.900 [DEBUG] [Thread-190065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:29:45.914 [DEBUG] [Thread-190065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:29:45.914 [INFO] [Thread-190065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:29:45.922 [DEBUG] [Thread-190065] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:29:45.922 [DEBUG] [Thread-190065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:29:45.922 [DEBUG] [Thread-190065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:29:45.922 [DEBUG] [Thread-190065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:29:45.922 [DEBUG] [Thread-190065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:29:45.922 [DEBUG] [Thread-190065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:29:45.923 [DEBUG] [Thread-190065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:29:45.923 [DEBUG] [Thread-190065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:29:45.923 [DEBUG] [Thread-190065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:29:45.923 [DEBUG] [Thread-190065] [transport.py] [_log()] client lang: <none>
2026-02-14T18:29:45.923 [DEBUG] [Thread-190065] [transport.py] [_log()] server lang: <none>
2026-02-14T18:29:45.923 [DEBUG] [Thread-190065] [transport.py] [_log()] kex follows: False
2026-02-14T18:29:45.923 [DEBUG] [Thread-190065] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:29:45.923 [DEBUG] [Thread-190065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:29:45.923 [DEBUG] [Thread-190065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:29:45.923 [DEBUG] [Thread-190065] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:29:45.923 [DEBUG] [Thread-190065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:29:45.923 [DEBUG] [Thread-190065] [transport.py] [_log()] Compression: none
2026-02-14T18:29:45.923 [DEBUG] [Thread-190065] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:29:45.984 [DEBUG] [Thread-190065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:29:45.985 [DEBUG] [Thread-190065] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:29:45.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:29:45.986 [DEBUG] [Thread-190065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:29:45.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:29:46.040 [DEBUG] [Thread-190065] [transport.py] [_log()] userauth is OK
2026-02-14T18:29:46.040 [DEBUG] [Thread-190065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:29:46.040 [DEBUG] [Thread-190065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:29:46.040 [DEBUG] [Thread-190065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:29:46.041 [DEBUG] [Thread-190065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:29:46.060 [INFO] [Thread-190065] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:29:46.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-14T18:29:46.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:29:46.883 [DEBUG] [Thread-190065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:29:46.884 [DEBUG] [Thread-190065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:29:46.931 [DEBUG] [Thread-190065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:29:46.932 [DEBUG] [Thread-190065] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:29:46.942 [DEBUG] [Thread-190065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:29:46.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:29:46.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-14T18:29:46.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:29:46.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:29:46.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:29:46.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:29:46.979 [DEBUG] [Thread-190065] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:29:58.659 [DEBUG] [Thread-190067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:30:13.003 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:30:13.004 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:30:13.712 [DEBUG] [Thread-190068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:30:17.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:30:17.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:30:17.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-14T18:30:18.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 30, 8), 12.56, 42.37, 0.0, 43.58, 14.25, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:30:18.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:30:08
2026-02-14T18:30:19.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:30:19.377 [DEBUG] [Thread-190069] [transport.py] [_log()] starting thread (client mode): 0xa57709a0
2026-02-14T18:30:19.377 [DEBUG] [Thread-190069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:30:19.396 [DEBUG] [Thread-190069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:30:19.396 [INFO] [Thread-190069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:30:19.400 [DEBUG] [Thread-190069] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:30:19.400 [DEBUG] [Thread-190069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:30:19.400 [DEBUG] [Thread-190069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:30:19.400 [DEBUG] [Thread-190069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:30:19.400 [DEBUG] [Thread-190069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:30:19.400 [DEBUG] [Thread-190069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:30:19.400 [DEBUG] [Thread-190069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:30:19.400 [DEBUG] [Thread-190069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:30:19.400 [DEBUG] [Thread-190069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:30:19.400 [DEBUG] [Thread-190069] [transport.py] [_log()] client lang: <none>
2026-02-14T18:30:19.400 [DEBUG] [Thread-190069] [transport.py] [_log()] server lang: <none>
2026-02-14T18:30:19.400 [DEBUG] [Thread-190069] [transport.py] [_log()] kex follows: False
2026-02-14T18:30:19.400 [DEBUG] [Thread-190069] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:30:19.400 [DEBUG] [Thread-190069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:30:19.400 [DEBUG] [Thread-190069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:30:19.400 [DEBUG] [Thread-190069] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:30:19.400 [DEBUG] [Thread-190069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:30:19.400 [DEBUG] [Thread-190069] [transport.py] [_log()] Compression: none
2026-02-14T18:30:19.400 [DEBUG] [Thread-190069] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:30:19.416 [DEBUG] [Thread-190069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:30:19.417 [DEBUG] [Thread-190069] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:30:19.417 [DEBUG] [Thread-190069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:30:19.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:30:19.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:30:19.419 [DEBUG] [Thread-190069] [transport.py] [_log()] userauth is OK
2026-02-14T18:30:19.420 [DEBUG] [Thread-190069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:30:19.420 [DEBUG] [Thread-190069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:30:19.420 [DEBUG] [Thread-190069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:30:19.420 [DEBUG] [Thread-190069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:30:19.453 [INFO] [Thread-190069] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:30:19.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:30:20.088 [DEBUG] [Thread-190069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:30:20.089 [DEBUG] [Thread-190069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:30:20.089 [DEBUG] [Thread-190069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:30:20.129 [DEBUG] [Thread-190069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:30:20.130 [DEBUG] [Thread-190069] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:30:20.133 [DEBUG] [Thread-190069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:30:20.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:30:20.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:30:20.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:30:20.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:30:20.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:30:20.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:30:20.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:30:20.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:30:20.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:30:20.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.687257 -999.00  +13.90  31.01     49   +3.40 1 1 2 1 1   887    0 10.00 -31.05 ----- 33.3 31.0 160.6 41.0 16.4 -28.1 16.3 -26.6 17.4 -26.4 17.9 -28.5
2026-02-14T18:30:20.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:30:20.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:30:20.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.687257
2026-02-14T18:30:20.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:30:20.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:30:20.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:30:20.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:30:20.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:30:20.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:30:08', tmtdew=12.56, humidity=42.37, cloud=0.0, wind=43.58, temperature=14.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:29:39.005', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:30:20.160 [DEBUG] [Thread-190069] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:30:20.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-14T18:30:20.254 [DEBUG] [Thread-190072] [transport.py] [_log()] starting thread (client mode): 0xa57c3670
2026-02-14T18:30:20.255 [DEBUG] [Thread-190072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:30:20.269 [DEBUG] [Thread-190072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:30:20.269 [INFO] [Thread-190072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:30:20.276 [DEBUG] [Thread-190072] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:30:20.277 [DEBUG] [Thread-190072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:30:20.277 [DEBUG] [Thread-190072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:30:20.277 [DEBUG] [Thread-190072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:30:20.277 [DEBUG] [Thread-190072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:30:20.277 [DEBUG] [Thread-190072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:30:20.277 [DEBUG] [Thread-190072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:30:20.277 [DEBUG] [Thread-190072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:30:20.277 [DEBUG] [Thread-190072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:30:20.278 [DEBUG] [Thread-190072] [transport.py] [_log()] client lang: <none>
2026-02-14T18:30:20.278 [DEBUG] [Thread-190072] [transport.py] [_log()] server lang: <none>
2026-02-14T18:30:20.278 [DEBUG] [Thread-190072] [transport.py] [_log()] kex follows: False
2026-02-14T18:30:20.278 [DEBUG] [Thread-190072] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:30:20.278 [DEBUG] [Thread-190072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:30:20.278 [DEBUG] [Thread-190072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:30:20.278 [DEBUG] [Thread-190072] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:30:20.278 [DEBUG] [Thread-190072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:30:20.279 [DEBUG] [Thread-190072] [transport.py] [_log()] Compression: none
2026-02-14T18:30:20.279 [DEBUG] [Thread-190072] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:30:20.336 [DEBUG] [Thread-190072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:30:20.337 [DEBUG] [Thread-190072] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:30:20.338 [DEBUG] [Thread-190072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:30:20.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:30:20.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:30:20.396 [DEBUG] [Thread-190072] [transport.py] [_log()] userauth is OK
2026-02-14T18:30:20.396 [DEBUG] [Thread-190072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:30:20.397 [DEBUG] [Thread-190072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:30:20.397 [DEBUG] [Thread-190072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:30:20.397 [DEBUG] [Thread-190072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:30:20.418 [INFO] [Thread-190072] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:30:20.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T18:30:20.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:30:21.245 [DEBUG] [Thread-190072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:30:21.245 [DEBUG] [Thread-190072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:30:21.293 [DEBUG] [Thread-190072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:30:21.294 [DEBUG] [Thread-190072] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:30:21.303 [DEBUG] [Thread-190072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:30:21.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:30:21.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-14T18:30:21.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-14T18:30:21.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:30:21.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:30:21.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:30:21.340 [DEBUG] [Thread-190072] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:30:28.751 [DEBUG] [Thread-190074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:30:36.381 [DEBUG] [Thread-190075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:30:43.798 [DEBUG] [Thread-190076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:30:51.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:30:51.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:30:51.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-14T18:30:53.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 30, 43), 12.51, 42.87, 0.0, 39.08, 14.2, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:30:53.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:30:43
2026-02-14T18:30:53.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:30:53.697 [DEBUG] [Thread-190077] [transport.py] [_log()] starting thread (client mode): 0xa57d76a0
2026-02-14T18:30:53.697 [DEBUG] [Thread-190077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:30:53.718 [DEBUG] [Thread-190077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:30:53.718 [INFO] [Thread-190077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:30:53.721 [DEBUG] [Thread-190077] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:30:53.722 [DEBUG] [Thread-190077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:30:53.722 [DEBUG] [Thread-190077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:30:53.722 [DEBUG] [Thread-190077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:30:53.722 [DEBUG] [Thread-190077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:30:53.722 [DEBUG] [Thread-190077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:30:53.722 [DEBUG] [Thread-190077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:30:53.722 [DEBUG] [Thread-190077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:30:53.722 [DEBUG] [Thread-190077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:30:53.722 [DEBUG] [Thread-190077] [transport.py] [_log()] client lang: <none>
2026-02-14T18:30:53.722 [DEBUG] [Thread-190077] [transport.py] [_log()] server lang: <none>
2026-02-14T18:30:53.722 [DEBUG] [Thread-190077] [transport.py] [_log()] kex follows: False
2026-02-14T18:30:53.722 [DEBUG] [Thread-190077] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:30:53.722 [DEBUG] [Thread-190077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:30:53.722 [DEBUG] [Thread-190077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:30:53.722 [DEBUG] [Thread-190077] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:30:53.722 [DEBUG] [Thread-190077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:30:53.722 [DEBUG] [Thread-190077] [transport.py] [_log()] Compression: none
2026-02-14T18:30:53.722 [DEBUG] [Thread-190077] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:30:53.740 [DEBUG] [Thread-190077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:30:53.740 [DEBUG] [Thread-190077] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:30:53.741 [DEBUG] [Thread-190077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:30:53.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:30:53.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:30:53.743 [DEBUG] [Thread-190077] [transport.py] [_log()] userauth is OK
2026-02-14T18:30:53.743 [DEBUG] [Thread-190077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:30:53.744 [DEBUG] [Thread-190077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:30:53.744 [DEBUG] [Thread-190077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:30:53.744 [DEBUG] [Thread-190077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:30:53.768 [INFO] [Thread-190077] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:30:53.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:30:54.412 [DEBUG] [Thread-190077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:30:54.412 [DEBUG] [Thread-190077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:30:54.412 [DEBUG] [Thread-190077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:30:54.453 [DEBUG] [Thread-190077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:30:54.453 [DEBUG] [Thread-190077] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:30:54.457 [DEBUG] [Thread-190077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:30:54.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:30:54.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:30:54.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:30:54.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:30:54.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:30:54.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:30:54.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:30:54.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:30:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:30:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.687615 -999.00  +13.90  30.02     49   +3.40 1 1 2 1 1   887    0 10.09 -31.23 ----- 28.6 30.0 166.2 42.8 16.4 -27.8 16.3 -26.5 17.3 -26.1 17.7 -28.2
2026-02-14T18:30:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:30:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:30:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.687615
2026-02-14T18:30:54.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:30:54.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:30:54.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:30:54.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:30:54.484 [DEBUG] [Thread-190077] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:30:54.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:30:54.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:30:43', tmtdew=12.51, humidity=42.87, cloud=0.0, wind=39.08, temperature=14.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:30:09.936', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:30:54.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-14T18:30:54.591 [DEBUG] [Thread-190080] [transport.py] [_log()] starting thread (client mode): 0xa2ded240
2026-02-14T18:30:54.592 [DEBUG] [Thread-190080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:30:54.605 [DEBUG] [Thread-190080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:30:54.605 [INFO] [Thread-190080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:30:54.613 [DEBUG] [Thread-190080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:30:54.613 [DEBUG] [Thread-190080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:30:54.613 [DEBUG] [Thread-190080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:30:54.613 [DEBUG] [Thread-190080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:30:54.613 [DEBUG] [Thread-190080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:30:54.613 [DEBUG] [Thread-190080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:30:54.613 [DEBUG] [Thread-190080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:30:54.613 [DEBUG] [Thread-190080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:30:54.613 [DEBUG] [Thread-190080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:30:54.613 [DEBUG] [Thread-190080] [transport.py] [_log()] client lang: <none>
2026-02-14T18:30:54.613 [DEBUG] [Thread-190080] [transport.py] [_log()] server lang: <none>
2026-02-14T18:30:54.613 [DEBUG] [Thread-190080] [transport.py] [_log()] kex follows: False
2026-02-14T18:30:54.613 [DEBUG] [Thread-190080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:30:54.613 [DEBUG] [Thread-190080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:30:54.614 [DEBUG] [Thread-190080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:30:54.614 [DEBUG] [Thread-190080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:30:54.614 [DEBUG] [Thread-190080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:30:54.614 [DEBUG] [Thread-190080] [transport.py] [_log()] Compression: none
2026-02-14T18:30:54.614 [DEBUG] [Thread-190080] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:30:54.671 [DEBUG] [Thread-190080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:30:54.671 [DEBUG] [Thread-190080] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:30:54.672 [DEBUG] [Thread-190080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:30:54.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:30:54.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:30:54.728 [DEBUG] [Thread-190080] [transport.py] [_log()] userauth is OK
2026-02-14T18:30:54.728 [DEBUG] [Thread-190080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:30:54.728 [DEBUG] [Thread-190080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:30:54.728 [DEBUG] [Thread-190080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:30:54.728 [DEBUG] [Thread-190080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:30:54.747 [INFO] [Thread-190080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:30:54.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-14T18:30:54.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:30:55.554 [DEBUG] [Thread-190080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:30:55.554 [DEBUG] [Thread-190080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:30:55.603 [DEBUG] [Thread-190080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:30:55.603 [DEBUG] [Thread-190080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:30:55.612 [DEBUG] [Thread-190080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:30:55.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:30:55.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-14T18:30:55.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:30:55.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:30:55.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:30:55.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:30:55.649 [DEBUG] [Thread-190080] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:30:58.835 [DEBUG] [Thread-190082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:31:13.143 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:31:13.144 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:31:13.885 [DEBUG] [Thread-190083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:31:25.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:31:25.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:31:25.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-14T18:31:27.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 31, 19), 12.52, 42.86, 0.0, 37.69, 14.22, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:31:27.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:31:19
2026-02-14T18:31:28.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:31:28.193 [DEBUG] [Thread-190084] [transport.py] [_log()] starting thread (client mode): 0xa5772e00
2026-02-14T18:31:28.193 [DEBUG] [Thread-190084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:31:28.212 [DEBUG] [Thread-190084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:31:28.213 [INFO] [Thread-190084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:31:28.216 [DEBUG] [Thread-190084] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:31:28.216 [DEBUG] [Thread-190084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:31:28.216 [DEBUG] [Thread-190084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:31:28.216 [DEBUG] [Thread-190084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:31:28.217 [DEBUG] [Thread-190084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:31:28.217 [DEBUG] [Thread-190084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:31:28.217 [DEBUG] [Thread-190084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:31:28.217 [DEBUG] [Thread-190084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:31:28.217 [DEBUG] [Thread-190084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:31:28.217 [DEBUG] [Thread-190084] [transport.py] [_log()] client lang: <none>
2026-02-14T18:31:28.217 [DEBUG] [Thread-190084] [transport.py] [_log()] server lang: <none>
2026-02-14T18:31:28.217 [DEBUG] [Thread-190084] [transport.py] [_log()] kex follows: False
2026-02-14T18:31:28.217 [DEBUG] [Thread-190084] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:31:28.217 [DEBUG] [Thread-190084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:31:28.217 [DEBUG] [Thread-190084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:31:28.217 [DEBUG] [Thread-190084] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:31:28.218 [DEBUG] [Thread-190084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:31:28.218 [DEBUG] [Thread-190084] [transport.py] [_log()] Compression: none
2026-02-14T18:31:28.218 [DEBUG] [Thread-190084] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:31:28.236 [DEBUG] [Thread-190084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:31:28.237 [DEBUG] [Thread-190084] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:31:28.237 [DEBUG] [Thread-190084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:31:28.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:31:28.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:31:28.239 [DEBUG] [Thread-190084] [transport.py] [_log()] userauth is OK
2026-02-14T18:31:28.239 [DEBUG] [Thread-190084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:31:28.239 [DEBUG] [Thread-190084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:31:28.239 [DEBUG] [Thread-190084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:31:28.239 [DEBUG] [Thread-190084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:31:28.275 [INFO] [Thread-190084] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:31:28.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:31:28.895 [DEBUG] [Thread-190084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:31:28.895 [DEBUG] [Thread-190084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:31:28.895 [DEBUG] [Thread-190084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:31:28.921 [DEBUG] [Thread-190086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:31:28.937 [DEBUG] [Thread-190084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:31:28.937 [DEBUG] [Thread-190084] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:31:28.940 [DEBUG] [Thread-190084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:31:28.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:31:28.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:31:28.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:31:28.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:31:28.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:31:28.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:31:28.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:31:28.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:31:28.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:31:28.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.688299 -999.00  +14.00  27.48     48   +3.40 1 1 1 1 1   887    0 9.89 -32.16 ----- 28.5 27.5 160.8 35.4 16.4 -27.6 16.3 -26.6 17.4 -26.0 17.8 -27.8
2026-02-14T18:31:28.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:31:28.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:31:28.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.688299
2026-02-14T18:31:28.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:31:28.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:31:28.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:31:28.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:31:28.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:31:28.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:31:19', tmtdew=12.52, humidity=42.86, cloud=0.0, wind=37.69, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:31:09.034', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:31:28.960 [DEBUG] [Thread-190084] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:31:29.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T18:31:29.066 [DEBUG] [Thread-190088] [transport.py] [_log()] starting thread (client mode): 0xa57e0460
2026-02-14T18:31:29.066 [DEBUG] [Thread-190088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:31:29.084 [DEBUG] [Thread-190088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:31:29.084 [INFO] [Thread-190088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:31:29.091 [DEBUG] [Thread-190088] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:31:29.091 [DEBUG] [Thread-190088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:31:29.091 [DEBUG] [Thread-190088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:31:29.092 [DEBUG] [Thread-190088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:31:29.092 [DEBUG] [Thread-190088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:31:29.092 [DEBUG] [Thread-190088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:31:29.092 [DEBUG] [Thread-190088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:31:29.092 [DEBUG] [Thread-190088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:31:29.092 [DEBUG] [Thread-190088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:31:29.092 [DEBUG] [Thread-190088] [transport.py] [_log()] client lang: <none>
2026-02-14T18:31:29.092 [DEBUG] [Thread-190088] [transport.py] [_log()] server lang: <none>
2026-02-14T18:31:29.092 [DEBUG] [Thread-190088] [transport.py] [_log()] kex follows: False
2026-02-14T18:31:29.093 [DEBUG] [Thread-190088] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:31:29.093 [DEBUG] [Thread-190088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:31:29.093 [DEBUG] [Thread-190088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:31:29.093 [DEBUG] [Thread-190088] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:31:29.093 [DEBUG] [Thread-190088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:31:29.093 [DEBUG] [Thread-190088] [transport.py] [_log()] Compression: none
2026-02-14T18:31:29.093 [DEBUG] [Thread-190088] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:31:29.152 [DEBUG] [Thread-190088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:31:29.152 [DEBUG] [Thread-190088] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:31:29.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:31:29.153 [DEBUG] [Thread-190088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:31:29.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:31:29.207 [DEBUG] [Thread-190088] [transport.py] [_log()] userauth is OK
2026-02-14T18:31:29.207 [DEBUG] [Thread-190088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:31:29.207 [DEBUG] [Thread-190088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:31:29.207 [DEBUG] [Thread-190088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:31:29.208 [DEBUG] [Thread-190088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:31:29.230 [INFO] [Thread-190088] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:31:29.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T18:31:29.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:31:30.106 [DEBUG] [Thread-190088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:31:30.107 [DEBUG] [Thread-190088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:31:30.154 [DEBUG] [Thread-190088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:31:30.154 [DEBUG] [Thread-190088] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:31:30.162 [DEBUG] [Thread-190088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:31:30.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:31:30.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-14T18:31:30.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-14T18:31:30.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:31:30.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:31:30.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:31:30.196 [DEBUG] [Thread-190088] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:31:36.434 [DEBUG] [Thread-190090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:31:43.953 [DEBUG] [Thread-190091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:31:59.013 [DEBUG] [Thread-190092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:32:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:32:00.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:32:00.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-14T18:32:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 31, 19), 12.52, 42.86, 0.0, 37.69, 14.22, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:32:02.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:31:19
2026-02-14T18:32:02.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:32:02.617 [DEBUG] [Thread-190093] [transport.py] [_log()] starting thread (client mode): 0xa57b0940
2026-02-14T18:32:02.617 [DEBUG] [Thread-190093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:32:02.637 [DEBUG] [Thread-190093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:32:02.637 [INFO] [Thread-190093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:32:02.640 [DEBUG] [Thread-190093] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:32:02.640 [DEBUG] [Thread-190093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:32:02.640 [DEBUG] [Thread-190093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:32:02.640 [DEBUG] [Thread-190093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:32:02.640 [DEBUG] [Thread-190093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:32:02.640 [DEBUG] [Thread-190093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:32:02.640 [DEBUG] [Thread-190093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:32:02.640 [DEBUG] [Thread-190093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:32:02.640 [DEBUG] [Thread-190093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:32:02.640 [DEBUG] [Thread-190093] [transport.py] [_log()] client lang: <none>
2026-02-14T18:32:02.640 [DEBUG] [Thread-190093] [transport.py] [_log()] server lang: <none>
2026-02-14T18:32:02.640 [DEBUG] [Thread-190093] [transport.py] [_log()] kex follows: False
2026-02-14T18:32:02.640 [DEBUG] [Thread-190093] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:32:02.640 [DEBUG] [Thread-190093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:32:02.640 [DEBUG] [Thread-190093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:32:02.640 [DEBUG] [Thread-190093] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:32:02.640 [DEBUG] [Thread-190093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:32:02.640 [DEBUG] [Thread-190093] [transport.py] [_log()] Compression: none
2026-02-14T18:32:02.640 [DEBUG] [Thread-190093] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:32:02.658 [DEBUG] [Thread-190093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:32:02.658 [DEBUG] [Thread-190093] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:32:02.658 [DEBUG] [Thread-190093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:32:02.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:32:02.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:32:02.659 [DEBUG] [Thread-190093] [transport.py] [_log()] userauth is OK
2026-02-14T18:32:02.659 [DEBUG] [Thread-190093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:32:02.659 [DEBUG] [Thread-190093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:32:02.659 [DEBUG] [Thread-190093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:32:02.659 [DEBUG] [Thread-190093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:32:02.668 [INFO] [Thread-190093] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:32:02.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:32:03.229 [DEBUG] [Thread-190093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:32:03.229 [DEBUG] [Thread-190093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:32:03.229 [DEBUG] [Thread-190093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:32:03.270 [DEBUG] [Thread-190093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:32:03.270 [DEBUG] [Thread-190093] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:32:03.273 [DEBUG] [Thread-190093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:32:03.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:32:03.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:32:03.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:32:03.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:32:03.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:32:03.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:32:03.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:32:03.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:32:03.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:32:03.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.688646 -999.00  +14.00  28.04     48   +3.30 1 1 1 1 1   887    0 9.98 -31.51 ----- 26.6 28.0 161.8 34.7 16.4 -28.0 16.3 -26.9 17.3 -25.9 17.7 -28.5
2026-02-14T18:32:03.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:32:03.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:32:03.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.688646
2026-02-14T18:32:03.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:32:03.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:32:03.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:32:03.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:32:03.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:32:03.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:31:19', tmtdew=12.52, humidity=42.86, cloud=0.0, wind=37.69, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:31:39.014', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:32:03.294 [DEBUG] [Thread-190093] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:32:03.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-14T18:32:03.389 [DEBUG] [Thread-190096] [transport.py] [_log()] starting thread (client mode): 0xa2db4a90
2026-02-14T18:32:03.390 [DEBUG] [Thread-190096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:32:03.404 [DEBUG] [Thread-190096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:32:03.404 [INFO] [Thread-190096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:32:03.412 [DEBUG] [Thread-190096] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:32:03.412 [DEBUG] [Thread-190096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:32:03.412 [DEBUG] [Thread-190096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:32:03.412 [DEBUG] [Thread-190096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:32:03.412 [DEBUG] [Thread-190096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:32:03.412 [DEBUG] [Thread-190096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:32:03.412 [DEBUG] [Thread-190096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:32:03.412 [DEBUG] [Thread-190096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:32:03.412 [DEBUG] [Thread-190096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:32:03.412 [DEBUG] [Thread-190096] [transport.py] [_log()] client lang: <none>
2026-02-14T18:32:03.413 [DEBUG] [Thread-190096] [transport.py] [_log()] server lang: <none>
2026-02-14T18:32:03.413 [DEBUG] [Thread-190096] [transport.py] [_log()] kex follows: False
2026-02-14T18:32:03.413 [DEBUG] [Thread-190096] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:32:03.413 [DEBUG] [Thread-190096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:32:03.413 [DEBUG] [Thread-190096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:32:03.413 [DEBUG] [Thread-190096] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:32:03.413 [DEBUG] [Thread-190096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:32:03.413 [DEBUG] [Thread-190096] [transport.py] [_log()] Compression: none
2026-02-14T18:32:03.413 [DEBUG] [Thread-190096] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:32:03.476 [DEBUG] [Thread-190096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:32:03.476 [DEBUG] [Thread-190096] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:32:03.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:32:03.477 [DEBUG] [Thread-190096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:32:03.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:32:03.535 [DEBUG] [Thread-190096] [transport.py] [_log()] userauth is OK
2026-02-14T18:32:03.536 [DEBUG] [Thread-190096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:32:03.536 [DEBUG] [Thread-190096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:32:03.536 [DEBUG] [Thread-190096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:32:03.536 [DEBUG] [Thread-190096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:32:03.554 [INFO] [Thread-190096] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:32:03.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-14T18:32:03.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:32:04.391 [DEBUG] [Thread-190096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:32:04.392 [DEBUG] [Thread-190096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:32:04.440 [DEBUG] [Thread-190096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:32:04.440 [DEBUG] [Thread-190096] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:32:04.449 [DEBUG] [Thread-190096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:32:04.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:32:04.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-14T18:32:04.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:32:04.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:32:04.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:32:04.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:32:04.485 [DEBUG] [Thread-190096] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:32:13.297 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:32:13.298 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:32:14.052 [DEBUG] [Thread-190098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:32:29.109 [DEBUG] [Thread-190099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:32:34.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:32:34.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:32:34.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-14T18:32:36.476 [DEBUG] [Thread-190100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:32:36.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 31, 54), 12.7, 42.13, 0.0, 34.56, 14.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:32:36.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:31:54
2026-02-14T18:32:36.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:32:37.097 [DEBUG] [Thread-190101] [transport.py] [_log()] starting thread (client mode): 0xa81d65f0
2026-02-14T18:32:37.097 [DEBUG] [Thread-190101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:32:37.115 [DEBUG] [Thread-190101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:32:37.115 [INFO] [Thread-190101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:32:37.118 [DEBUG] [Thread-190101] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:32:37.118 [DEBUG] [Thread-190101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:32:37.118 [DEBUG] [Thread-190101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:32:37.118 [DEBUG] [Thread-190101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:32:37.118 [DEBUG] [Thread-190101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:32:37.119 [DEBUG] [Thread-190101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:32:37.119 [DEBUG] [Thread-190101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:32:37.119 [DEBUG] [Thread-190101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:32:37.119 [DEBUG] [Thread-190101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:32:37.119 [DEBUG] [Thread-190101] [transport.py] [_log()] client lang: <none>
2026-02-14T18:32:37.119 [DEBUG] [Thread-190101] [transport.py] [_log()] server lang: <none>
2026-02-14T18:32:37.119 [DEBUG] [Thread-190101] [transport.py] [_log()] kex follows: False
2026-02-14T18:32:37.119 [DEBUG] [Thread-190101] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:32:37.119 [DEBUG] [Thread-190101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:32:37.119 [DEBUG] [Thread-190101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:32:37.119 [DEBUG] [Thread-190101] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:32:37.119 [DEBUG] [Thread-190101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:32:37.119 [DEBUG] [Thread-190101] [transport.py] [_log()] Compression: none
2026-02-14T18:32:37.119 [DEBUG] [Thread-190101] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:32:37.127 [DEBUG] [Thread-190101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:32:37.127 [DEBUG] [Thread-190101] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:32:37.128 [DEBUG] [Thread-190101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:32:37.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:32:37.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:32:37.129 [DEBUG] [Thread-190101] [transport.py] [_log()] userauth is OK
2026-02-14T18:32:37.129 [DEBUG] [Thread-190101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:32:37.129 [DEBUG] [Thread-190101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:32:37.130 [DEBUG] [Thread-190101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:32:37.130 [DEBUG] [Thread-190101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:32:37.148 [INFO] [Thread-190101] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:32:37.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:32:37.910 [DEBUG] [Thread-190101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:32:37.910 [DEBUG] [Thread-190101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:32:37.911 [DEBUG] [Thread-190101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:32:37.952 [DEBUG] [Thread-190101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:32:37.952 [DEBUG] [Thread-190101] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:32:37.954 [DEBUG] [Thread-190101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:32:37.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:32:37.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:32:37.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:32:37.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:32:37.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:32:37.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:32:37.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:32:37.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:32:37.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:32:37.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.688993 -999.00  +13.90  27.12     48   +3.30 1 1 1 1 1   887    0 9.90 -32.91 ----- 24.8 27.1 165.4 35.5 16.3 -27.7 16.2 -26.3 17.2 -25.8 17.7 -28.2
2026-02-14T18:32:37.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:32:37.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:32:37.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.688993
2026-02-14T18:32:37.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:32:37.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:32:37.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:32:37.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:32:37.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:32:37.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:31:54', tmtdew=12.7, humidity=42.13, cloud=0.0, wind=34.56, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:32:08.995', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:32:37.980 [DEBUG] [Thread-190101] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:32:38.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T18:32:38.074 [DEBUG] [Thread-190104] [transport.py] [_log()] starting thread (client mode): 0xa5771660
2026-02-14T18:32:38.074 [DEBUG] [Thread-190104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:32:38.089 [DEBUG] [Thread-190104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:32:38.089 [INFO] [Thread-190104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:32:38.097 [DEBUG] [Thread-190104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:32:38.097 [DEBUG] [Thread-190104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:32:38.097 [DEBUG] [Thread-190104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:32:38.097 [DEBUG] [Thread-190104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:32:38.097 [DEBUG] [Thread-190104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:32:38.097 [DEBUG] [Thread-190104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:32:38.097 [DEBUG] [Thread-190104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:32:38.097 [DEBUG] [Thread-190104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:32:38.098 [DEBUG] [Thread-190104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:32:38.098 [DEBUG] [Thread-190104] [transport.py] [_log()] client lang: <none>
2026-02-14T18:32:38.098 [DEBUG] [Thread-190104] [transport.py] [_log()] server lang: <none>
2026-02-14T18:32:38.098 [DEBUG] [Thread-190104] [transport.py] [_log()] kex follows: False
2026-02-14T18:32:38.098 [DEBUG] [Thread-190104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:32:38.098 [DEBUG] [Thread-190104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:32:38.098 [DEBUG] [Thread-190104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:32:38.098 [DEBUG] [Thread-190104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:32:38.099 [DEBUG] [Thread-190104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:32:38.099 [DEBUG] [Thread-190104] [transport.py] [_log()] Compression: none
2026-02-14T18:32:38.099 [DEBUG] [Thread-190104] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:32:38.156 [DEBUG] [Thread-190104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:32:38.156 [DEBUG] [Thread-190104] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:32:38.157 [DEBUG] [Thread-190104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:32:38.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:32:38.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:32:38.212 [DEBUG] [Thread-190104] [transport.py] [_log()] userauth is OK
2026-02-14T18:32:38.213 [DEBUG] [Thread-190104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:32:38.213 [DEBUG] [Thread-190104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:32:38.213 [DEBUG] [Thread-190104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:32:38.213 [DEBUG] [Thread-190104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:32:38.233 [INFO] [Thread-190104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:32:38.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T18:32:38.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:32:39.046 [DEBUG] [Thread-190104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:32:39.055 [DEBUG] [Thread-190104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:32:39.094 [DEBUG] [Thread-190104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:32:39.094 [DEBUG] [Thread-190104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:32:39.105 [DEBUG] [Thread-190104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:32:39.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:32:39.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-14T18:32:39.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-14T18:32:39.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:32:39.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:32:39.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:32:39.142 [DEBUG] [Thread-190104] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:32:44.145 [DEBUG] [Thread-190106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:32:59.199 [DEBUG] [Thread-190107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:33:09.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:33:09.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:33:09.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-14T18:33:11.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 32, 30), 12.66, 42.23, 0.0, 34.86, 14.27, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:33:11.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:32:30
2026-02-14T18:33:11.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:33:11.733 [DEBUG] [Thread-190108] [transport.py] [_log()] starting thread (client mode): 0xa5771900
2026-02-14T18:33:11.733 [DEBUG] [Thread-190108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:33:11.746 [DEBUG] [Thread-190108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:33:11.746 [INFO] [Thread-190108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:33:11.750 [DEBUG] [Thread-190108] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:33:11.750 [DEBUG] [Thread-190108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:33:11.750 [DEBUG] [Thread-190108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:33:11.750 [DEBUG] [Thread-190108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:33:11.750 [DEBUG] [Thread-190108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:33:11.750 [DEBUG] [Thread-190108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:33:11.750 [DEBUG] [Thread-190108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:33:11.750 [DEBUG] [Thread-190108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:33:11.750 [DEBUG] [Thread-190108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:33:11.750 [DEBUG] [Thread-190108] [transport.py] [_log()] client lang: <none>
2026-02-14T18:33:11.750 [DEBUG] [Thread-190108] [transport.py] [_log()] server lang: <none>
2026-02-14T18:33:11.750 [DEBUG] [Thread-190108] [transport.py] [_log()] kex follows: False
2026-02-14T18:33:11.750 [DEBUG] [Thread-190108] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:33:11.750 [DEBUG] [Thread-190108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:33:11.751 [DEBUG] [Thread-190108] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:33:11.751 [DEBUG] [Thread-190108] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:33:11.751 [DEBUG] [Thread-190108] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:33:11.751 [DEBUG] [Thread-190108] [transport.py] [_log()] Compression: none
2026-02-14T18:33:11.751 [DEBUG] [Thread-190108] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:33:11.772 [DEBUG] [Thread-190108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:33:11.772 [DEBUG] [Thread-190108] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:33:11.773 [DEBUG] [Thread-190108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:33:11.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:33:11.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:33:11.775 [DEBUG] [Thread-190108] [transport.py] [_log()] userauth is OK
2026-02-14T18:33:11.775 [DEBUG] [Thread-190108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:33:11.775 [DEBUG] [Thread-190108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:33:11.775 [DEBUG] [Thread-190108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:33:11.775 [DEBUG] [Thread-190108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:33:11.812 [INFO] [Thread-190108] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:33:11.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:33:12.475 [DEBUG] [Thread-190108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:33:12.475 [DEBUG] [Thread-190108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:33:12.475 [DEBUG] [Thread-190108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:33:12.516 [DEBUG] [Thread-190108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:33:12.516 [DEBUG] [Thread-190108] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:33:12.520 [DEBUG] [Thread-190108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:33:12.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:33:12.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:33:12.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:33:12.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:33:12.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:33:12.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:33:12.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:33:12.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:33:12.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:33:12.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.689352 -999.00  +13.90  33.13     48   +3.30 1 1 2 1 1   887    0 10.10 -30.93 ----- 24.2 33.1 168.2 40.4 16.3 -27.4 16.2 -26.6 17.3 -25.7 17.7 -27.8
2026-02-14T18:33:12.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:33:12.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:33:12.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.689352
2026-02-14T18:33:12.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:33:12.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:33:12.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:33:12.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:33:12.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:33:12.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:32:30', tmtdew=12.66, humidity=42.23, cloud=0.0, wind=34.86, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:32:40.013', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:33:12.547 [DEBUG] [Thread-190108] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:33:12.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-14T18:33:12.642 [DEBUG] [Thread-190111] [transport.py] [_log()] starting thread (client mode): 0xa57708b0
2026-02-14T18:33:12.642 [DEBUG] [Thread-190111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:33:12.657 [DEBUG] [Thread-190111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:33:12.657 [INFO] [Thread-190111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:33:12.665 [DEBUG] [Thread-190111] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:33:12.665 [DEBUG] [Thread-190111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:33:12.665 [DEBUG] [Thread-190111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:33:12.665 [DEBUG] [Thread-190111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:33:12.666 [DEBUG] [Thread-190111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:33:12.666 [DEBUG] [Thread-190111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:33:12.666 [DEBUG] [Thread-190111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:33:12.666 [DEBUG] [Thread-190111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:33:12.666 [DEBUG] [Thread-190111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:33:12.666 [DEBUG] [Thread-190111] [transport.py] [_log()] client lang: <none>
2026-02-14T18:33:12.666 [DEBUG] [Thread-190111] [transport.py] [_log()] server lang: <none>
2026-02-14T18:33:12.666 [DEBUG] [Thread-190111] [transport.py] [_log()] kex follows: False
2026-02-14T18:33:12.666 [DEBUG] [Thread-190111] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:33:12.667 [DEBUG] [Thread-190111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:33:12.667 [DEBUG] [Thread-190111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:33:12.667 [DEBUG] [Thread-190111] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:33:12.667 [DEBUG] [Thread-190111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:33:12.667 [DEBUG] [Thread-190111] [transport.py] [_log()] Compression: none
2026-02-14T18:33:12.667 [DEBUG] [Thread-190111] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:33:12.727 [DEBUG] [Thread-190111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:33:12.728 [DEBUG] [Thread-190111] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:33:12.729 [DEBUG] [Thread-190111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:33:12.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:33:12.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:33:12.784 [DEBUG] [Thread-190111] [transport.py] [_log()] userauth is OK
2026-02-14T18:33:12.784 [DEBUG] [Thread-190111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:33:12.784 [DEBUG] [Thread-190111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:33:12.784 [DEBUG] [Thread-190111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:33:12.784 [DEBUG] [Thread-190111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:33:12.803 [INFO] [Thread-190111] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:33:12.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-14T18:33:12.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:33:13.441 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:33:13.442 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:33:13.636 [DEBUG] [Thread-190111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:33:13.637 [DEBUG] [Thread-190111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:33:13.684 [DEBUG] [Thread-190111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:33:13.685 [DEBUG] [Thread-190111] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:33:13.693 [DEBUG] [Thread-190111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:33:13.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:33:13.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-14T18:33:13.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:33:13.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:33:13.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:33:13.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:33:13.734 [DEBUG] [Thread-190111] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:33:14.236 [DEBUG] [Thread-190113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:33:29.288 [DEBUG] [Thread-190114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:33:36.509 [DEBUG] [Thread-190115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:33:43.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:33:43.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:33:43.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-14T18:33:44.321 [DEBUG] [Thread-190116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:33:46.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 33, 5), 12.58, 42.44, 0.0, 32.06, 14.22, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:33:46.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:33:05
2026-02-14T18:33:46.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:33:46.741 [DEBUG] [Thread-190117] [transport.py] [_log()] starting thread (client mode): 0xa5771510
2026-02-14T18:33:46.741 [DEBUG] [Thread-190117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:33:46.762 [DEBUG] [Thread-190117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:33:46.762 [INFO] [Thread-190117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:33:46.765 [DEBUG] [Thread-190117] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:33:46.765 [DEBUG] [Thread-190117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:33:46.765 [DEBUG] [Thread-190117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:33:46.765 [DEBUG] [Thread-190117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:33:46.765 [DEBUG] [Thread-190117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:33:46.765 [DEBUG] [Thread-190117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:33:46.765 [DEBUG] [Thread-190117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:33:46.765 [DEBUG] [Thread-190117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:33:46.766 [DEBUG] [Thread-190117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:33:46.766 [DEBUG] [Thread-190117] [transport.py] [_log()] client lang: <none>
2026-02-14T18:33:46.766 [DEBUG] [Thread-190117] [transport.py] [_log()] server lang: <none>
2026-02-14T18:33:46.766 [DEBUG] [Thread-190117] [transport.py] [_log()] kex follows: False
2026-02-14T18:33:46.766 [DEBUG] [Thread-190117] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:33:46.766 [DEBUG] [Thread-190117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:33:46.766 [DEBUG] [Thread-190117] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:33:46.766 [DEBUG] [Thread-190117] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:33:46.766 [DEBUG] [Thread-190117] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:33:46.766 [DEBUG] [Thread-190117] [transport.py] [_log()] Compression: none
2026-02-14T18:33:46.766 [DEBUG] [Thread-190117] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:33:46.784 [DEBUG] [Thread-190117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:33:46.784 [DEBUG] [Thread-190117] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:33:46.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:33:46.785 [DEBUG] [Thread-190117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:33:46.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:33:46.788 [DEBUG] [Thread-190117] [transport.py] [_log()] userauth is OK
2026-02-14T18:33:46.788 [DEBUG] [Thread-190117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:33:46.788 [DEBUG] [Thread-190117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:33:46.789 [DEBUG] [Thread-190117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:33:46.789 [DEBUG] [Thread-190117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:33:46.813 [INFO] [Thread-190117] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:33:46.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:33:47.429 [DEBUG] [Thread-190117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:33:47.429 [DEBUG] [Thread-190117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:33:47.429 [DEBUG] [Thread-190117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:33:47.470 [DEBUG] [Thread-190117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:33:47.471 [DEBUG] [Thread-190117] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:33:47.475 [DEBUG] [Thread-190117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:33:47.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:33:47.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:33:47.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:33:47.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:33:47.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:33:47.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:33:47.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:33:47.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:33:47.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:33:47.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.689699 -999.00  +14.00  15.58     48   +3.40 1 1 1 1 1   887    0 10.03 -31.05 ----- 19.2 15.6 175.2 30.5 16.3 -27.3 16.2 -27.3 17.4 -25.2 17.6 -27.4
2026-02-14T18:33:47.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:33:47.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:33:47.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.689699
2026-02-14T18:33:47.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:33:47.503 [DEBUG] [Thread-190117] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:33:47.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:33:47.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:33:47.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:33:47.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:33:47.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:33:05', tmtdew=12.58, humidity=42.44, cloud=0.0, wind=32.06, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:33:09.994', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:33:47.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T18:33:47.600 [DEBUG] [Thread-190120] [transport.py] [_log()] starting thread (client mode): 0xa57c1690
2026-02-14T18:33:47.600 [DEBUG] [Thread-190120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:33:47.616 [DEBUG] [Thread-190120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:33:47.616 [INFO] [Thread-190120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:33:47.623 [DEBUG] [Thread-190120] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:33:47.623 [DEBUG] [Thread-190120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:33:47.623 [DEBUG] [Thread-190120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:33:47.624 [DEBUG] [Thread-190120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:33:47.624 [DEBUG] [Thread-190120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:33:47.624 [DEBUG] [Thread-190120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:33:47.624 [DEBUG] [Thread-190120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:33:47.624 [DEBUG] [Thread-190120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:33:47.624 [DEBUG] [Thread-190120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:33:47.624 [DEBUG] [Thread-190120] [transport.py] [_log()] client lang: <none>
2026-02-14T18:33:47.624 [DEBUG] [Thread-190120] [transport.py] [_log()] server lang: <none>
2026-02-14T18:33:47.624 [DEBUG] [Thread-190120] [transport.py] [_log()] kex follows: False
2026-02-14T18:33:47.624 [DEBUG] [Thread-190120] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:33:47.624 [DEBUG] [Thread-190120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:33:47.624 [DEBUG] [Thread-190120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:33:47.624 [DEBUG] [Thread-190120] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:33:47.624 [DEBUG] [Thread-190120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:33:47.624 [DEBUG] [Thread-190120] [transport.py] [_log()] Compression: none
2026-02-14T18:33:47.624 [DEBUG] [Thread-190120] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:33:47.683 [DEBUG] [Thread-190120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:33:47.684 [DEBUG] [Thread-190120] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:33:47.684 [DEBUG] [Thread-190120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:33:47.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:33:47.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:33:47.740 [DEBUG] [Thread-190120] [transport.py] [_log()] userauth is OK
2026-02-14T18:33:47.740 [DEBUG] [Thread-190120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:33:47.740 [DEBUG] [Thread-190120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:33:47.740 [DEBUG] [Thread-190120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:33:47.740 [DEBUG] [Thread-190120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:33:47.759 [INFO] [Thread-190120] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:33:47.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-14T18:33:47.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:33:48.566 [DEBUG] [Thread-190120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:33:48.566 [DEBUG] [Thread-190120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:33:48.613 [DEBUG] [Thread-190120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:33:48.613 [DEBUG] [Thread-190120] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:33:48.623 [DEBUG] [Thread-190120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:33:48.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:33:48.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:33:48.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-14T18:33:48.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:33:48.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:33:48.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:33:48.659 [DEBUG] [Thread-190120] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:33:59.361 [DEBUG] [Thread-190122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:34:13.588 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:34:13.589 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:34:14.413 [DEBUG] [Thread-190123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:34:18.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:34:18.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:34:18.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-14T18:34:20.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 33, 41), 13.12, 40.98, 0.0, 37.22, 14.8, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:34:20.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:33:41
2026-02-14T18:34:21.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:34:21.248 [DEBUG] [Thread-190124] [transport.py] [_log()] starting thread (client mode): 0xa57c2f80
2026-02-14T18:34:21.248 [DEBUG] [Thread-190124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:34:21.268 [DEBUG] [Thread-190124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:34:21.269 [INFO] [Thread-190124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:34:21.271 [DEBUG] [Thread-190124] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:34:21.271 [DEBUG] [Thread-190124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:34:21.271 [DEBUG] [Thread-190124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:34:21.271 [DEBUG] [Thread-190124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:34:21.271 [DEBUG] [Thread-190124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:34:21.271 [DEBUG] [Thread-190124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:34:21.271 [DEBUG] [Thread-190124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:34:21.271 [DEBUG] [Thread-190124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:34:21.271 [DEBUG] [Thread-190124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:34:21.271 [DEBUG] [Thread-190124] [transport.py] [_log()] client lang: <none>
2026-02-14T18:34:21.271 [DEBUG] [Thread-190124] [transport.py] [_log()] server lang: <none>
2026-02-14T18:34:21.271 [DEBUG] [Thread-190124] [transport.py] [_log()] kex follows: False
2026-02-14T18:34:21.271 [DEBUG] [Thread-190124] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:34:21.271 [DEBUG] [Thread-190124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:34:21.272 [DEBUG] [Thread-190124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:34:21.272 [DEBUG] [Thread-190124] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:34:21.272 [DEBUG] [Thread-190124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:34:21.272 [DEBUG] [Thread-190124] [transport.py] [_log()] Compression: none
2026-02-14T18:34:21.272 [DEBUG] [Thread-190124] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:34:21.285 [DEBUG] [Thread-190124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:34:21.286 [DEBUG] [Thread-190124] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:34:21.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:34:21.287 [DEBUG] [Thread-190124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:34:21.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:34:21.290 [DEBUG] [Thread-190124] [transport.py] [_log()] userauth is OK
2026-02-14T18:34:21.290 [DEBUG] [Thread-190124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:34:21.290 [DEBUG] [Thread-190124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:34:21.291 [DEBUG] [Thread-190124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:34:21.291 [DEBUG] [Thread-190124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:34:21.305 [INFO] [Thread-190124] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:34:21.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:34:21.947 [DEBUG] [Thread-190124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:34:21.948 [DEBUG] [Thread-190124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:34:21.948 [DEBUG] [Thread-190124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:34:21.988 [DEBUG] [Thread-190124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:34:21.988 [DEBUG] [Thread-190124] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:34:21.992 [DEBUG] [Thread-190124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:34:22.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:34:22.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:34:22.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:34:22.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:34:22.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:34:22.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:34:22.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:34:22.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:34:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:34:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.690046 -999.00  +14.00  28.34     48   +3.40 1 1 1 1 1   887    0 10.11 -31.55 ----- 22.8 28.3 163.4 38.1 16.3 -27.5 16.2 -27.6 17.2 -26.0 17.7 -28.0
2026-02-14T18:34:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:34:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:34:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.690046
2026-02-14T18:34:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:34:22.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:34:22.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:34:22.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:34:22.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:34:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:33:41', tmtdew=13.12, humidity=40.98, cloud=0.0, wind=37.22, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:33:39.974', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:34:22.021 [DEBUG] [Thread-190124] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:34:22.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-14T18:34:22.113 [DEBUG] [Thread-190127] [transport.py] [_log()] starting thread (client mode): 0xa81d7bb0
2026-02-14T18:34:22.114 [DEBUG] [Thread-190127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:34:22.128 [DEBUG] [Thread-190127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:34:22.128 [INFO] [Thread-190127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:34:22.136 [DEBUG] [Thread-190127] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:34:22.136 [DEBUG] [Thread-190127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:34:22.136 [DEBUG] [Thread-190127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:34:22.136 [DEBUG] [Thread-190127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:34:22.136 [DEBUG] [Thread-190127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:34:22.136 [DEBUG] [Thread-190127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:34:22.136 [DEBUG] [Thread-190127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:34:22.136 [DEBUG] [Thread-190127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:34:22.136 [DEBUG] [Thread-190127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:34:22.136 [DEBUG] [Thread-190127] [transport.py] [_log()] client lang: <none>
2026-02-14T18:34:22.136 [DEBUG] [Thread-190127] [transport.py] [_log()] server lang: <none>
2026-02-14T18:34:22.136 [DEBUG] [Thread-190127] [transport.py] [_log()] kex follows: False
2026-02-14T18:34:22.137 [DEBUG] [Thread-190127] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:34:22.137 [DEBUG] [Thread-190127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:34:22.137 [DEBUG] [Thread-190127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:34:22.137 [DEBUG] [Thread-190127] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:34:22.137 [DEBUG] [Thread-190127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:34:22.137 [DEBUG] [Thread-190127] [transport.py] [_log()] Compression: none
2026-02-14T18:34:22.137 [DEBUG] [Thread-190127] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:34:22.203 [DEBUG] [Thread-190127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:34:22.203 [DEBUG] [Thread-190127] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:34:22.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:34:22.205 [DEBUG] [Thread-190127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:34:22.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:34:22.260 [DEBUG] [Thread-190127] [transport.py] [_log()] userauth is OK
2026-02-14T18:34:22.260 [DEBUG] [Thread-190127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:34:22.260 [DEBUG] [Thread-190127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:34:22.260 [DEBUG] [Thread-190127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:34:22.260 [DEBUG] [Thread-190127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:34:22.279 [INFO] [Thread-190127] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:34:22.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-14T18:34:22.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:34:23.099 [DEBUG] [Thread-190127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:34:23.100 [DEBUG] [Thread-190127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:34:23.148 [DEBUG] [Thread-190127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:34:23.148 [DEBUG] [Thread-190127] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:34:23.157 [DEBUG] [Thread-190127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:34:23.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:34:23.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-14T18:34:23.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-14T18:34:23.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:34:23.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:34:23.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:34:23.188 [DEBUG] [Thread-190127] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:34:29.455 [DEBUG] [Thread-190129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:34:36.540 [DEBUG] [Thread-190130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:34:44.517 [DEBUG] [Thread-190131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:34:53.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:34:53.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:34:53.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-14T18:34:55.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 34, 17), 12.61, 42.51, 0.0, 29.27, 14.3, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:34:55.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:34:17
2026-02-14T18:34:55.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:34:55.721 [DEBUG] [Thread-190132] [transport.py] [_log()] starting thread (client mode): 0xa2d00ac0
2026-02-14T18:34:55.722 [DEBUG] [Thread-190132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:34:55.742 [DEBUG] [Thread-190132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:34:55.742 [INFO] [Thread-190132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:34:55.745 [DEBUG] [Thread-190132] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:34:55.745 [DEBUG] [Thread-190132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:34:55.745 [DEBUG] [Thread-190132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:34:55.745 [DEBUG] [Thread-190132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:34:55.745 [DEBUG] [Thread-190132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:34:55.746 [DEBUG] [Thread-190132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:34:55.746 [DEBUG] [Thread-190132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:34:55.746 [DEBUG] [Thread-190132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:34:55.746 [DEBUG] [Thread-190132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:34:55.746 [DEBUG] [Thread-190132] [transport.py] [_log()] client lang: <none>
2026-02-14T18:34:55.746 [DEBUG] [Thread-190132] [transport.py] [_log()] server lang: <none>
2026-02-14T18:34:55.746 [DEBUG] [Thread-190132] [transport.py] [_log()] kex follows: False
2026-02-14T18:34:55.746 [DEBUG] [Thread-190132] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:34:55.746 [DEBUG] [Thread-190132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:34:55.746 [DEBUG] [Thread-190132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:34:55.746 [DEBUG] [Thread-190132] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:34:55.746 [DEBUG] [Thread-190132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:34:55.746 [DEBUG] [Thread-190132] [transport.py] [_log()] Compression: none
2026-02-14T18:34:55.746 [DEBUG] [Thread-190132] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:34:55.764 [DEBUG] [Thread-190132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:34:55.764 [DEBUG] [Thread-190132] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:34:55.765 [DEBUG] [Thread-190132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:34:55.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:34:55.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:34:55.767 [DEBUG] [Thread-190132] [transport.py] [_log()] userauth is OK
2026-02-14T18:34:55.767 [DEBUG] [Thread-190132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:34:55.767 [DEBUG] [Thread-190132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:34:55.767 [DEBUG] [Thread-190132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:34:55.767 [DEBUG] [Thread-190132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:34:55.792 [INFO] [Thread-190132] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:34:55.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:34:56.430 [DEBUG] [Thread-190132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:34:56.431 [DEBUG] [Thread-190132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:34:56.431 [DEBUG] [Thread-190132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:34:56.471 [DEBUG] [Thread-190132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:34:56.471 [DEBUG] [Thread-190132] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:34:56.475 [DEBUG] [Thread-190132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:34:56.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:34:56.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:34:56.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:34:56.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:34:56.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:34:56.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:34:56.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:34:56.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:34:56.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:34:56.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.690393 -999.00  +14.10  18.40     48   +3.40 1 1 1 1 1   887    0 9.97 -29.44 ----- 33.3 18.4 171.0 34.1 16.3 -27.7 16.1 -26.2 17.2 -25.7 17.6 -27.8
2026-02-14T18:34:56.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:34:56.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:34:56.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.690393
2026-02-14T18:34:56.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:34:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:34:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:34:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:34:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:34:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:34:17', tmtdew=12.61, humidity=42.51, cloud=0.0, wind=29.27, temperature=14.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:34:09.955', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:34:56.505 [DEBUG] [Thread-190132] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:34:56.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-14T18:34:56.603 [DEBUG] [Thread-190135] [transport.py] [_log()] starting thread (client mode): 0xa57c3be0
2026-02-14T18:34:56.603 [DEBUG] [Thread-190135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:34:56.617 [DEBUG] [Thread-190135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:34:56.617 [INFO] [Thread-190135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:34:56.624 [DEBUG] [Thread-190135] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:34:56.625 [DEBUG] [Thread-190135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:34:56.625 [DEBUG] [Thread-190135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:34:56.625 [DEBUG] [Thread-190135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:34:56.625 [DEBUG] [Thread-190135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:34:56.625 [DEBUG] [Thread-190135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:34:56.625 [DEBUG] [Thread-190135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:34:56.625 [DEBUG] [Thread-190135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:34:56.625 [DEBUG] [Thread-190135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:34:56.625 [DEBUG] [Thread-190135] [transport.py] [_log()] client lang: <none>
2026-02-14T18:34:56.625 [DEBUG] [Thread-190135] [transport.py] [_log()] server lang: <none>
2026-02-14T18:34:56.625 [DEBUG] [Thread-190135] [transport.py] [_log()] kex follows: False
2026-02-14T18:34:56.625 [DEBUG] [Thread-190135] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:34:56.625 [DEBUG] [Thread-190135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:34:56.625 [DEBUG] [Thread-190135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:34:56.625 [DEBUG] [Thread-190135] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:34:56.625 [DEBUG] [Thread-190135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:34:56.625 [DEBUG] [Thread-190135] [transport.py] [_log()] Compression: none
2026-02-14T18:34:56.625 [DEBUG] [Thread-190135] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:34:56.684 [DEBUG] [Thread-190135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:34:56.685 [DEBUG] [Thread-190135] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:34:56.685 [DEBUG] [Thread-190135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:34:56.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:34:56.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:34:56.740 [DEBUG] [Thread-190135] [transport.py] [_log()] userauth is OK
2026-02-14T18:34:56.740 [DEBUG] [Thread-190135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:34:56.741 [DEBUG] [Thread-190135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:34:56.741 [DEBUG] [Thread-190135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:34:56.741 [DEBUG] [Thread-190135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:34:56.760 [INFO] [Thread-190135] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:34:56.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-14T18:34:56.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:34:57.599 [DEBUG] [Thread-190135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:34:57.599 [DEBUG] [Thread-190135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:34:57.647 [DEBUG] [Thread-190135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:34:57.648 [DEBUG] [Thread-190135] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:34:57.657 [DEBUG] [Thread-190135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:34:57.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:34:57.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:34: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-14T18:34:57.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:34:57.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:34:57.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:34:57.693 [DEBUG] [Thread-190135] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:34:59.557 [DEBUG] [Thread-190137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:35:13.727 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:35:13.728 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:35:14.619 [DEBUG] [Thread-190138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:35:27.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:35:27.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:35:27.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-14T18:35:29.654 [DEBUG] [Thread-190139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:35:29.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 34, 53), 12.63, 42.32, 0.0, 28.83, 14.3, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:35:29.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:34:53
2026-02-14T18:35:30.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:35:30.277 [DEBUG] [Thread-190140] [transport.py] [_log()] starting thread (client mode): 0xa2db7370
2026-02-14T18:35:30.277 [DEBUG] [Thread-190140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:35:30.295 [DEBUG] [Thread-190140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:35:30.295 [INFO] [Thread-190140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:35:30.296 [DEBUG] [Thread-190140] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:35:30.296 [DEBUG] [Thread-190140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:35:30.296 [DEBUG] [Thread-190140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:35:30.296 [DEBUG] [Thread-190140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:35:30.296 [DEBUG] [Thread-190140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:35:30.297 [DEBUG] [Thread-190140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:35:30.297 [DEBUG] [Thread-190140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:35:30.297 [DEBUG] [Thread-190140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:35:30.297 [DEBUG] [Thread-190140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:35:30.297 [DEBUG] [Thread-190140] [transport.py] [_log()] client lang: <none>
2026-02-14T18:35:30.297 [DEBUG] [Thread-190140] [transport.py] [_log()] server lang: <none>
2026-02-14T18:35:30.297 [DEBUG] [Thread-190140] [transport.py] [_log()] kex follows: False
2026-02-14T18:35:30.297 [DEBUG] [Thread-190140] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:35:30.297 [DEBUG] [Thread-190140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:35:30.297 [DEBUG] [Thread-190140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:35:30.297 [DEBUG] [Thread-190140] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:35:30.297 [DEBUG] [Thread-190140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:35:30.297 [DEBUG] [Thread-190140] [transport.py] [_log()] Compression: none
2026-02-14T18:35:30.297 [DEBUG] [Thread-190140] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:35:30.308 [DEBUG] [Thread-190140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:35:30.309 [DEBUG] [Thread-190140] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:35:30.310 [DEBUG] [Thread-190140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:35:30.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:35:30.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:35:30.312 [DEBUG] [Thread-190140] [transport.py] [_log()] userauth is OK
2026-02-14T18:35:30.312 [DEBUG] [Thread-190140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:35:30.312 [DEBUG] [Thread-190140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:35:30.312 [DEBUG] [Thread-190140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:35:30.313 [DEBUG] [Thread-190140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:35:30.340 [INFO] [Thread-190140] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:35:30.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:35:31.048 [DEBUG] [Thread-190140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:35:31.048 [DEBUG] [Thread-190140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:35:31.049 [DEBUG] [Thread-190140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:35:31.089 [DEBUG] [Thread-190140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:35:31.090 [DEBUG] [Thread-190140] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:35:31.093 [DEBUG] [Thread-190140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:35:31.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:35:31.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:35:31.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:35:31.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:35:31.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:35:31.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:35:31.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:35:31.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:35:31.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:35:31.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.690729 -999.00  +14.10  30.46     48   +3.40 1 1 2 1 1   887    0 10.06 -30.34 ----- 24.1 30.5 173.8 37.5 16.2 -27.3 16.2 -26.7 17.3 -25.6 17.6 -28.1
2026-02-14T18:35:31.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:35:31.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:35:31.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.690729
2026-02-14T18:35:31.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:35:31.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:35:31.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:35:31.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:35:31.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:35:31.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:34:53', tmtdew=12.63, humidity=42.32, cloud=0.0, wind=28.83, temperature=14.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:34:38.986', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:35:31.119 [DEBUG] [Thread-190140] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:35:31.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T18:35:31.217 [DEBUG] [Thread-190143] [transport.py] [_log()] starting thread (client mode): 0xa57d58d0
2026-02-14T18:35:31.217 [DEBUG] [Thread-190143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:35:31.234 [DEBUG] [Thread-190143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:35:31.235 [INFO] [Thread-190143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:35:31.242 [DEBUG] [Thread-190143] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:35:31.243 [DEBUG] [Thread-190143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:35:31.243 [DEBUG] [Thread-190143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:35:31.243 [DEBUG] [Thread-190143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:35:31.243 [DEBUG] [Thread-190143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:35:31.243 [DEBUG] [Thread-190143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:35:31.243 [DEBUG] [Thread-190143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:35:31.243 [DEBUG] [Thread-190143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:35:31.243 [DEBUG] [Thread-190143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:35:31.243 [DEBUG] [Thread-190143] [transport.py] [_log()] client lang: <none>
2026-02-14T18:35:31.243 [DEBUG] [Thread-190143] [transport.py] [_log()] server lang: <none>
2026-02-14T18:35:31.243 [DEBUG] [Thread-190143] [transport.py] [_log()] kex follows: False
2026-02-14T18:35:31.243 [DEBUG] [Thread-190143] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:35:31.243 [DEBUG] [Thread-190143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:35:31.243 [DEBUG] [Thread-190143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:35:31.243 [DEBUG] [Thread-190143] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:35:31.244 [DEBUG] [Thread-190143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:35:31.244 [DEBUG] [Thread-190143] [transport.py] [_log()] Compression: none
2026-02-14T18:35:31.244 [DEBUG] [Thread-190143] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:35:31.315 [DEBUG] [Thread-190143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:35:31.316 [DEBUG] [Thread-190143] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:35:31.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:35:31.317 [DEBUG] [Thread-190143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:35:31.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:35:31.374 [DEBUG] [Thread-190143] [transport.py] [_log()] userauth is OK
2026-02-14T18:35:31.375 [DEBUG] [Thread-190143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:35:31.375 [DEBUG] [Thread-190143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:35:31.375 [DEBUG] [Thread-190143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:35:31.375 [DEBUG] [Thread-190143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:35:31.394 [INFO] [Thread-190143] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:35:31.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-14T18:35:31.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:35:32.220 [DEBUG] [Thread-190143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:35:32.221 [DEBUG] [Thread-190143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:35:32.268 [DEBUG] [Thread-190143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:35:32.268 [DEBUG] [Thread-190143] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:35:32.277 [DEBUG] [Thread-190143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:35:32.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:35:32.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-14T18:35:32.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-14T18:35:32.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:35:32.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:35:32.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:35:32.313 [DEBUG] [Thread-190143] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:35:36.591 [DEBUG] [Thread-190145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:35:44.691 [DEBUG] [Thread-190146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:35:59.738 [DEBUG] [Thread-190147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:36:02.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:36:02.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:36:02.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-14T18:36:04.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 35, 28), 12.61, 42.36, 0.0, 33.77, 14.28, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:36:04.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:35:28
2026-02-14T18:36:04.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:36:04.688 [DEBUG] [Thread-190148] [transport.py] [_log()] starting thread (client mode): 0xa81d56f0
2026-02-14T18:36:04.688 [DEBUG] [Thread-190148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:36:04.709 [DEBUG] [Thread-190148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:36:04.709 [INFO] [Thread-190148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:36:04.712 [DEBUG] [Thread-190148] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:36:04.712 [DEBUG] [Thread-190148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:36:04.712 [DEBUG] [Thread-190148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:36:04.712 [DEBUG] [Thread-190148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:36:04.712 [DEBUG] [Thread-190148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:36:04.712 [DEBUG] [Thread-190148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:36:04.712 [DEBUG] [Thread-190148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:36:04.712 [DEBUG] [Thread-190148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:36:04.712 [DEBUG] [Thread-190148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:36:04.713 [DEBUG] [Thread-190148] [transport.py] [_log()] client lang: <none>
2026-02-14T18:36:04.713 [DEBUG] [Thread-190148] [transport.py] [_log()] server lang: <none>
2026-02-14T18:36:04.713 [DEBUG] [Thread-190148] [transport.py] [_log()] kex follows: False
2026-02-14T18:36:04.713 [DEBUG] [Thread-190148] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:36:04.713 [DEBUG] [Thread-190148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:36:04.713 [DEBUG] [Thread-190148] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:36:04.713 [DEBUG] [Thread-190148] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:36:04.713 [DEBUG] [Thread-190148] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:36:04.713 [DEBUG] [Thread-190148] [transport.py] [_log()] Compression: none
2026-02-14T18:36:04.713 [DEBUG] [Thread-190148] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:36:04.729 [DEBUG] [Thread-190148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:36:04.729 [DEBUG] [Thread-190148] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:36:04.730 [DEBUG] [Thread-190148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:36:04.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:36:04.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:36:04.732 [DEBUG] [Thread-190148] [transport.py] [_log()] userauth is OK
2026-02-14T18:36:04.733 [DEBUG] [Thread-190148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:36:04.733 [DEBUG] [Thread-190148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:36:04.733 [DEBUG] [Thread-190148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:36:04.733 [DEBUG] [Thread-190148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:36:04.765 [INFO] [Thread-190148] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:36:04.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:36:05.368 [DEBUG] [Thread-190148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:36:05.369 [DEBUG] [Thread-190148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:36:05.369 [DEBUG] [Thread-190148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:36:05.410 [DEBUG] [Thread-190148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:36:05.410 [DEBUG] [Thread-190148] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:36:05.413 [DEBUG] [Thread-190148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:36:05.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:36:05.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:36:05.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:36:05.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:36:05.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:36:05.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:36:05.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:36:05.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:36:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:36:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.691319 -999.00  +14.00  35.09     49   +3.40 1 1 2 1 1   887    0 9.71 -32.84 ----- 28.1 35.1 177.8 45.9 16.2 -27.9 16.1 -28.9 17.1 -26.1 17.5 -29.1
2026-02-14T18:36:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:36:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:36:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.691319
2026-02-14T18:36:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:36:05.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:36:05.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:36:05.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:36:05.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:36:05.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:35:28', tmtdew=12.61, humidity=42.36, cloud=0.0, wind=33.77, temperature=14.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:35:29.962', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:36:05.441 [DEBUG] [Thread-190148] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:36:05.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-14T18:36:05.535 [DEBUG] [Thread-190151] [transport.py] [_log()] starting thread (client mode): 0xa2d014e0
2026-02-14T18:36:05.535 [DEBUG] [Thread-190151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:36:05.549 [DEBUG] [Thread-190151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:36:05.549 [INFO] [Thread-190151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:36:05.557 [DEBUG] [Thread-190151] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:36:05.557 [DEBUG] [Thread-190151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:36:05.557 [DEBUG] [Thread-190151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:36:05.557 [DEBUG] [Thread-190151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:36:05.557 [DEBUG] [Thread-190151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:36:05.557 [DEBUG] [Thread-190151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:36:05.557 [DEBUG] [Thread-190151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:36:05.558 [DEBUG] [Thread-190151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:36:05.558 [DEBUG] [Thread-190151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:36:05.558 [DEBUG] [Thread-190151] [transport.py] [_log()] client lang: <none>
2026-02-14T18:36:05.558 [DEBUG] [Thread-190151] [transport.py] [_log()] server lang: <none>
2026-02-14T18:36:05.558 [DEBUG] [Thread-190151] [transport.py] [_log()] kex follows: False
2026-02-14T18:36:05.558 [DEBUG] [Thread-190151] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:36:05.558 [DEBUG] [Thread-190151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:36:05.558 [DEBUG] [Thread-190151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:36:05.558 [DEBUG] [Thread-190151] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:36:05.559 [DEBUG] [Thread-190151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:36:05.559 [DEBUG] [Thread-190151] [transport.py] [_log()] Compression: none
2026-02-14T18:36:05.559 [DEBUG] [Thread-190151] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:36:05.617 [DEBUG] [Thread-190151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:36:05.618 [DEBUG] [Thread-190151] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:36:05.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:36:05.619 [DEBUG] [Thread-190151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:36:05.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:36:05.676 [DEBUG] [Thread-190151] [transport.py] [_log()] userauth is OK
2026-02-14T18:36:05.676 [DEBUG] [Thread-190151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:36:05.677 [DEBUG] [Thread-190151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:36:05.677 [DEBUG] [Thread-190151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:36:05.677 [DEBUG] [Thread-190151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:36:05.695 [INFO] [Thread-190151] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:36:05.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-14T18:36:05.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:36:06.513 [DEBUG] [Thread-190151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:36:06.513 [DEBUG] [Thread-190151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:36:06.561 [DEBUG] [Thread-190151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:36:06.562 [DEBUG] [Thread-190151] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:36:06.571 [DEBUG] [Thread-190151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:36:06.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:36:06.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:36:06.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-14T18:36:06.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:36:06.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:36:06.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:36:06.610 [DEBUG] [Thread-190151] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:36:13.869 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:36:13.870 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:36:14.777 [DEBUG] [Thread-190153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:36:29.839 [DEBUG] [Thread-190154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:36:36.625 [DEBUG] [Thread-190155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:36:36.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:36:36.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:36:36.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-14T18:36:38.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 36, 4), 12.64, 42.29, 0.0, 30.91, 14.32, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:36:38.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:36:04
2026-02-14T18:36:38.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:36:38.919 [DEBUG] [Thread-190156] [transport.py] [_log()] starting thread (client mode): 0xa2d00730
2026-02-14T18:36:38.920 [DEBUG] [Thread-190156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:36:38.940 [DEBUG] [Thread-190156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:36:38.940 [INFO] [Thread-190156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:36:38.943 [DEBUG] [Thread-190156] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:36:38.943 [DEBUG] [Thread-190156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:36:38.943 [DEBUG] [Thread-190156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:36:38.943 [DEBUG] [Thread-190156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:36:38.944 [DEBUG] [Thread-190156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:36:38.944 [DEBUG] [Thread-190156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:36:38.944 [DEBUG] [Thread-190156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:36:38.944 [DEBUG] [Thread-190156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:36:38.944 [DEBUG] [Thread-190156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:36:38.944 [DEBUG] [Thread-190156] [transport.py] [_log()] client lang: <none>
2026-02-14T18:36:38.944 [DEBUG] [Thread-190156] [transport.py] [_log()] server lang: <none>
2026-02-14T18:36:38.944 [DEBUG] [Thread-190156] [transport.py] [_log()] kex follows: False
2026-02-14T18:36:38.944 [DEBUG] [Thread-190156] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:36:38.944 [DEBUG] [Thread-190156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:36:38.944 [DEBUG] [Thread-190156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:36:38.944 [DEBUG] [Thread-190156] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:36:38.944 [DEBUG] [Thread-190156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:36:38.944 [DEBUG] [Thread-190156] [transport.py] [_log()] Compression: none
2026-02-14T18:36:38.944 [DEBUG] [Thread-190156] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:36:38.961 [DEBUG] [Thread-190156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:36:38.962 [DEBUG] [Thread-190156] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:36:38.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:36:38.963 [DEBUG] [Thread-190156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:36:38.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:36:38.965 [DEBUG] [Thread-190156] [transport.py] [_log()] userauth is OK
2026-02-14T18:36:38.966 [DEBUG] [Thread-190156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:36:38.966 [DEBUG] [Thread-190156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:36:38.966 [DEBUG] [Thread-190156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:36:38.966 [DEBUG] [Thread-190156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:36:39.002 [INFO] [Thread-190156] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:36:39.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:36:39.648 [DEBUG] [Thread-190156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:36:39.649 [DEBUG] [Thread-190156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:36:39.649 [DEBUG] [Thread-190156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:36:39.690 [DEBUG] [Thread-190156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:36:39.690 [DEBUG] [Thread-190156] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:36:39.693 [DEBUG] [Thread-190156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:36:39.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:36:39.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:36:39.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:36:39.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:36:39.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:36:39.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:36:39.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:36:39.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:36:39.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:36:39.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.691435 -999.00  +13.90  31.56     49   +3.40 1 1 2 1 1   887    0 9.69 -34.53 ----- 29.6 31.6 173.2 45.9 16.2 -27.9 16.0 -28.5 17.1 -25.7 17.5 -29.1
2026-02-14T18:36:39.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:36:39.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:36:39.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.691435
2026-02-14T18:36:39.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:36:39.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:36:39.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:36:39.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:36:39.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:36:39.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:36:04', tmtdew=12.64, humidity=42.29, cloud=0.0, wind=30.91, temperature=14.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:35:39.984', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:36:39.723 [DEBUG] [Thread-190156] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:36:39.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-14T18:36:39.817 [DEBUG] [Thread-190159] [transport.py] [_log()] starting thread (client mode): 0xa2d008b0
2026-02-14T18:36:39.817 [DEBUG] [Thread-190159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:36:39.832 [DEBUG] [Thread-190159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:36:39.832 [INFO] [Thread-190159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:36:39.839 [DEBUG] [Thread-190159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:36:39.840 [DEBUG] [Thread-190159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:36:39.840 [DEBUG] [Thread-190159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:36:39.840 [DEBUG] [Thread-190159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:36:39.840 [DEBUG] [Thread-190159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:36:39.840 [DEBUG] [Thread-190159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:36:39.840 [DEBUG] [Thread-190159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:36:39.840 [DEBUG] [Thread-190159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:36:39.840 [DEBUG] [Thread-190159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:36:39.840 [DEBUG] [Thread-190159] [transport.py] [_log()] client lang: <none>
2026-02-14T18:36:39.840 [DEBUG] [Thread-190159] [transport.py] [_log()] server lang: <none>
2026-02-14T18:36:39.840 [DEBUG] [Thread-190159] [transport.py] [_log()] kex follows: False
2026-02-14T18:36:39.840 [DEBUG] [Thread-190159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:36:39.840 [DEBUG] [Thread-190159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:36:39.840 [DEBUG] [Thread-190159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:36:39.840 [DEBUG] [Thread-190159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:36:39.840 [DEBUG] [Thread-190159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:36:39.840 [DEBUG] [Thread-190159] [transport.py] [_log()] Compression: none
2026-02-14T18:36:39.840 [DEBUG] [Thread-190159] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:36:39.898 [DEBUG] [Thread-190159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:36:39.899 [DEBUG] [Thread-190159] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:36:39.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:36:39.900 [DEBUG] [Thread-190159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:36:39.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:36:39.954 [DEBUG] [Thread-190159] [transport.py] [_log()] userauth is OK
2026-02-14T18:36:39.954 [DEBUG] [Thread-190159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:36:39.955 [DEBUG] [Thread-190159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:36:39.955 [DEBUG] [Thread-190159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:36:39.955 [DEBUG] [Thread-190159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:36:39.980 [INFO] [Thread-190159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:36:39.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-14T18:36:39.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:36:40.787 [DEBUG] [Thread-190159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:36:40.787 [DEBUG] [Thread-190159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:36:40.835 [DEBUG] [Thread-190159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:36:40.836 [DEBUG] [Thread-190159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:36:40.845 [DEBUG] [Thread-190159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:36:40.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:36:40.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-14T18:36:40.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-14T18:36:40.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:36:40.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:36:40.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:36:40.886 [DEBUG] [Thread-190159] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:36:44.875 [DEBUG] [Thread-190161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:36:59.936 [DEBUG] [Thread-190162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:37:10.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:37:10.903 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:37:10.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-14T18:37:12.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 36, 39), 13.39, 40.32, 0.0, 36.91, 15.2, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:37:12.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:36:39
2026-02-14T18:37:13.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:37:13.284 [DEBUG] [Thread-190163] [transport.py] [_log()] starting thread (client mode): 0xa57b0d90
2026-02-14T18:37:13.284 [DEBUG] [Thread-190163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:37:13.304 [DEBUG] [Thread-190163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:37:13.304 [INFO] [Thread-190163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:37:13.307 [DEBUG] [Thread-190163] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:37:13.307 [DEBUG] [Thread-190163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:37:13.307 [DEBUG] [Thread-190163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:37:13.308 [DEBUG] [Thread-190163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:37:13.308 [DEBUG] [Thread-190163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:37:13.308 [DEBUG] [Thread-190163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:37:13.308 [DEBUG] [Thread-190163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:37:13.308 [DEBUG] [Thread-190163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:37:13.308 [DEBUG] [Thread-190163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:37:13.308 [DEBUG] [Thread-190163] [transport.py] [_log()] client lang: <none>
2026-02-14T18:37:13.308 [DEBUG] [Thread-190163] [transport.py] [_log()] server lang: <none>
2026-02-14T18:37:13.308 [DEBUG] [Thread-190163] [transport.py] [_log()] kex follows: False
2026-02-14T18:37:13.308 [DEBUG] [Thread-190163] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:37:13.308 [DEBUG] [Thread-190163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:37:13.308 [DEBUG] [Thread-190163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:37:13.308 [DEBUG] [Thread-190163] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:37:13.308 [DEBUG] [Thread-190163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:37:13.308 [DEBUG] [Thread-190163] [transport.py] [_log()] Compression: none
2026-02-14T18:37:13.308 [DEBUG] [Thread-190163] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:37:13.328 [DEBUG] [Thread-190163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:37:13.329 [DEBUG] [Thread-190163] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:37:13.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:37:13.330 [DEBUG] [Thread-190163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:37:13.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:37:13.332 [DEBUG] [Thread-190163] [transport.py] [_log()] userauth is OK
2026-02-14T18:37:13.333 [DEBUG] [Thread-190163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:37:13.333 [DEBUG] [Thread-190163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:37:13.333 [DEBUG] [Thread-190163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:37:13.333 [DEBUG] [Thread-190163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:37:13.368 [INFO] [Thread-190163] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:37:13.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:37:13.986 [DEBUG] [Thread-190163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:37:13.987 [DEBUG] [Thread-190163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:37:13.987 [DEBUG] [Thread-190163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:37:14.010 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:37:14.011 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:37:14.028 [DEBUG] [Thread-190163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:37:14.028 [DEBUG] [Thread-190163] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:37:14.032 [DEBUG] [Thread-190163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:37:14.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:37:14.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:37:14.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:37:14.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:37:14.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:37:14.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:37:14.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:37:14.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:37:14.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:37:14.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.692130 -999.00  +14.00  30.10     49   +3.40 1 1 2 1 1   887    0 9.67 -32.69 ----- 30.1 30.1 171.1 36.5 16.1 -27.7 16.0 -27.8 17.1 -26.2 17.6 -27.0
2026-02-14T18:37:14.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:37:14.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:37:14.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.692130
2026-02-14T18:37:14.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:37:14.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:37:14.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:37:14.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:37:14.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:37:14.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:36:39', tmtdew=13.39, humidity=40.32, cloud=0.0, wind=36.91, temperature=15.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:36:40.032', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:37:14.060 [DEBUG] [Thread-190163] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:37:14.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-14T18:37:14.155 [DEBUG] [Thread-190166] [transport.py] [_log()] starting thread (client mode): 0xa57b2890
2026-02-14T18:37:14.155 [DEBUG] [Thread-190166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:37:14.172 [DEBUG] [Thread-190166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:37:14.172 [INFO] [Thread-190166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:37:14.187 [DEBUG] [Thread-190166] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:37:14.187 [DEBUG] [Thread-190166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:37:14.187 [DEBUG] [Thread-190166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:37:14.187 [DEBUG] [Thread-190166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:37:14.187 [DEBUG] [Thread-190166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:37:14.187 [DEBUG] [Thread-190166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:37:14.188 [DEBUG] [Thread-190166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:37:14.188 [DEBUG] [Thread-190166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:37:14.188 [DEBUG] [Thread-190166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:37:14.188 [DEBUG] [Thread-190166] [transport.py] [_log()] client lang: <none>
2026-02-14T18:37:14.188 [DEBUG] [Thread-190166] [transport.py] [_log()] server lang: <none>
2026-02-14T18:37:14.188 [DEBUG] [Thread-190166] [transport.py] [_log()] kex follows: False
2026-02-14T18:37:14.188 [DEBUG] [Thread-190166] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:37:14.188 [DEBUG] [Thread-190166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:37:14.188 [DEBUG] [Thread-190166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:37:14.188 [DEBUG] [Thread-190166] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:37:14.188 [DEBUG] [Thread-190166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:37:14.188 [DEBUG] [Thread-190166] [transport.py] [_log()] Compression: none
2026-02-14T18:37:14.188 [DEBUG] [Thread-190166] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:37:14.240 [DEBUG] [Thread-190166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:37:14.240 [DEBUG] [Thread-190166] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:37:14.241 [DEBUG] [Thread-190166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:37:14.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:37:14.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:37:14.296 [DEBUG] [Thread-190166] [transport.py] [_log()] userauth is OK
2026-02-14T18:37:14.297 [DEBUG] [Thread-190166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:37:14.297 [DEBUG] [Thread-190166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:37:14.297 [DEBUG] [Thread-190166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:37:14.297 [DEBUG] [Thread-190166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:37:14.315 [INFO] [Thread-190166] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:37:14.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-14T18:37:14.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:37:14.973 [DEBUG] [Thread-190168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:37:15.150 [DEBUG] [Thread-190166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:37:15.150 [DEBUG] [Thread-190166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:37:15.198 [DEBUG] [Thread-190166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:37:15.199 [DEBUG] [Thread-190166] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:37:15.208 [DEBUG] [Thread-190166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:37:15.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:37:15.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:37:15.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-14T18:37:15.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:37:15.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:37:15.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:37:15.247 [DEBUG] [Thread-190166] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:37:30.025 [DEBUG] [Thread-190169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:37:36.670 [DEBUG] [Thread-190170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:37:45.065 [DEBUG] [Thread-190171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:37:45.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:37:45.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:37:45.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-14T18:37:47.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 37, 14), 12.67, 42.09, 0.0, 35.66, 14.43, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:37:47.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:37:14
2026-02-14T18:37:47.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:37:47.919 [DEBUG] [Thread-190172] [transport.py] [_log()] starting thread (client mode): 0xa2db6c20
2026-02-14T18:37:47.928 [DEBUG] [Thread-190172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:37:47.939 [DEBUG] [Thread-190172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:37:47.939 [INFO] [Thread-190172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:37:47.942 [DEBUG] [Thread-190172] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:37:47.942 [DEBUG] [Thread-190172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:37:47.942 [DEBUG] [Thread-190172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:37:47.942 [DEBUG] [Thread-190172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:37:47.942 [DEBUG] [Thread-190172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:37:47.942 [DEBUG] [Thread-190172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:37:47.943 [DEBUG] [Thread-190172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:37:47.943 [DEBUG] [Thread-190172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:37:47.943 [DEBUG] [Thread-190172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:37:47.943 [DEBUG] [Thread-190172] [transport.py] [_log()] client lang: <none>
2026-02-14T18:37:47.943 [DEBUG] [Thread-190172] [transport.py] [_log()] server lang: <none>
2026-02-14T18:37:47.943 [DEBUG] [Thread-190172] [transport.py] [_log()] kex follows: False
2026-02-14T18:37:47.943 [DEBUG] [Thread-190172] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:37:47.943 [DEBUG] [Thread-190172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:37:47.943 [DEBUG] [Thread-190172] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:37:47.943 [DEBUG] [Thread-190172] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:37:47.943 [DEBUG] [Thread-190172] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:37:47.943 [DEBUG] [Thread-190172] [transport.py] [_log()] Compression: none
2026-02-14T18:37:47.943 [DEBUG] [Thread-190172] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:37:47.960 [DEBUG] [Thread-190172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:37:47.960 [DEBUG] [Thread-190172] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:37:47.961 [DEBUG] [Thread-190172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:37:47.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:37:47.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:37:48.005 [DEBUG] [Thread-190172] [transport.py] [_log()] userauth is OK
2026-02-14T18:37:48.005 [DEBUG] [Thread-190172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:37:48.005 [DEBUG] [Thread-190172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:37:48.005 [DEBUG] [Thread-190172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:37:48.005 [DEBUG] [Thread-190172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:37:48.031 [INFO] [Thread-190172] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:37:48.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:37:48.659 [DEBUG] [Thread-190172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:37:48.660 [DEBUG] [Thread-190172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:37:48.660 [DEBUG] [Thread-190172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:37:48.701 [DEBUG] [Thread-190172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:37:48.701 [DEBUG] [Thread-190172] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:37:48.705 [DEBUG] [Thread-190172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:37:48.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:37:48.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:37:48.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:37:48.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:37:48.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:37:48.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:37:48.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:37:48.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:37:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:37:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.692477 -999.00  +14.00  27.68     49   +3.40 1 1 1 1 1   887    0 9.71 -31.24 ----- 29.4 27.7 184.7 43.6 16.1 -27.4 15.9 -28.6 17.0 -26.3 17.4 -28.1
2026-02-14T18:37:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:37:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:37:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.692477
2026-02-14T18:37:48.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:37:48.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:37:48.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:37:48.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:37:48.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:37:48.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:37:14', tmtdew=12.67, humidity=42.09, cloud=0.0, wind=35.66, temperature=14.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:37:10.013', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:37:48.732 [DEBUG] [Thread-190172] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:37:48.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T18:37:48.829 [DEBUG] [Thread-190175] [transport.py] [_log()] starting thread (client mode): 0xa57e3fd0
2026-02-14T18:37:48.829 [DEBUG] [Thread-190175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:37:48.843 [DEBUG] [Thread-190175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:37:48.843 [INFO] [Thread-190175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:37:48.851 [DEBUG] [Thread-190175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:37:48.851 [DEBUG] [Thread-190175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:37:48.851 [DEBUG] [Thread-190175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:37:48.851 [DEBUG] [Thread-190175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:37:48.851 [DEBUG] [Thread-190175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:37:48.852 [DEBUG] [Thread-190175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:37:48.852 [DEBUG] [Thread-190175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:37:48.852 [DEBUG] [Thread-190175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:37:48.852 [DEBUG] [Thread-190175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:37:48.852 [DEBUG] [Thread-190175] [transport.py] [_log()] client lang: <none>
2026-02-14T18:37:48.852 [DEBUG] [Thread-190175] [transport.py] [_log()] server lang: <none>
2026-02-14T18:37:48.852 [DEBUG] [Thread-190175] [transport.py] [_log()] kex follows: False
2026-02-14T18:37:48.852 [DEBUG] [Thread-190175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:37:48.852 [DEBUG] [Thread-190175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:37:48.853 [DEBUG] [Thread-190175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:37:48.853 [DEBUG] [Thread-190175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:37:48.853 [DEBUG] [Thread-190175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:37:48.853 [DEBUG] [Thread-190175] [transport.py] [_log()] Compression: none
2026-02-14T18:37:48.853 [DEBUG] [Thread-190175] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:37:48.911 [DEBUG] [Thread-190175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:37:48.912 [DEBUG] [Thread-190175] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:37:48.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:37:48.913 [DEBUG] [Thread-190175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:37:48.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:37:48.970 [DEBUG] [Thread-190175] [transport.py] [_log()] userauth is OK
2026-02-14T18:37:48.970 [DEBUG] [Thread-190175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:37:48.971 [DEBUG] [Thread-190175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:37:48.971 [DEBUG] [Thread-190175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:37:48.971 [DEBUG] [Thread-190175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:37:48.989 [INFO] [Thread-190175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:37:48.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-14T18:37:48.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:37:49.819 [DEBUG] [Thread-190175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:37:49.820 [DEBUG] [Thread-190175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:37:49.867 [DEBUG] [Thread-190175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:37:49.867 [DEBUG] [Thread-190175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:37:49.875 [DEBUG] [Thread-190175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:37:49.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:37:49.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:37:49.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-14T18:37:49.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:37:49.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:37:49.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:37:49.909 [DEBUG] [Thread-190175] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:38:00.100 [DEBUG] [Thread-190177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:38:14.152 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:38:14.153 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:38:15.151 [DEBUG] [Thread-190178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:38:19.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:38:19.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:38:19.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:38:22.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 37, 49), 12.6, 42.63, 0.0, 43.23, 14.28, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:38:22.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:37:49
2026-02-14T18:38:22.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:38:22.732 [DEBUG] [Thread-190179] [transport.py] [_log()] starting thread (client mode): 0xa57c36a0
2026-02-14T18:38:22.733 [DEBUG] [Thread-190179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:38:22.752 [DEBUG] [Thread-190179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:38:22.752 [INFO] [Thread-190179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:38:22.755 [DEBUG] [Thread-190179] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:38:22.755 [DEBUG] [Thread-190179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:38:22.755 [DEBUG] [Thread-190179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:38:22.755 [DEBUG] [Thread-190179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:38:22.756 [DEBUG] [Thread-190179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:38:22.756 [DEBUG] [Thread-190179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:38:22.756 [DEBUG] [Thread-190179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:38:22.756 [DEBUG] [Thread-190179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:38:22.756 [DEBUG] [Thread-190179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:38:22.756 [DEBUG] [Thread-190179] [transport.py] [_log()] client lang: <none>
2026-02-14T18:38:22.756 [DEBUG] [Thread-190179] [transport.py] [_log()] server lang: <none>
2026-02-14T18:38:22.756 [DEBUG] [Thread-190179] [transport.py] [_log()] kex follows: False
2026-02-14T18:38:22.756 [DEBUG] [Thread-190179] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:38:22.756 [DEBUG] [Thread-190179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:38:22.756 [DEBUG] [Thread-190179] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:38:22.756 [DEBUG] [Thread-190179] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:38:22.756 [DEBUG] [Thread-190179] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:38:22.756 [DEBUG] [Thread-190179] [transport.py] [_log()] Compression: none
2026-02-14T18:38:22.756 [DEBUG] [Thread-190179] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:38:22.773 [DEBUG] [Thread-190179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:38:22.774 [DEBUG] [Thread-190179] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:38:22.774 [DEBUG] [Thread-190179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:38:22.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:38:22.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:38:22.776 [DEBUG] [Thread-190179] [transport.py] [_log()] userauth is OK
2026-02-14T18:38:22.777 [DEBUG] [Thread-190179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:38:22.777 [DEBUG] [Thread-190179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:38:22.777 [DEBUG] [Thread-190179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:38:22.777 [DEBUG] [Thread-190179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:38:22.802 [INFO] [Thread-190179] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:38:22.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:38:23.517 [DEBUG] [Thread-190179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:38:23.517 [DEBUG] [Thread-190179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:38:23.517 [DEBUG] [Thread-190179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:38:23.558 [DEBUG] [Thread-190179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:38:23.558 [DEBUG] [Thread-190179] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:38:23.561 [DEBUG] [Thread-190179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:38:23.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:38:23.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:38:23.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:38:23.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:38:23.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:38:23.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:38:23.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:38:23.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:38:23.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:38:23.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.692824 -999.00  +13.90  25.60     49   +3.40 1 1 1 1 1   887    0 9.57 -30.05 ----- 27.0 25.6 168.2 40.6 16.1 -27.6 15.9 -27.1 17.0 -25.5 17.3 -28.7
2026-02-14T18:38:23.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:38:23.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:38:23.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.692824
2026-02-14T18:38:23.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:38:23.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:38:23.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:38:23.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:38:23.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:38:23.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:37:49', tmtdew=12.6, humidity=42.63, cloud=0.0, wind=43.23, temperature=14.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:37:39.994', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:38:23.587 [DEBUG] [Thread-190179] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:38:23.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-14T18:38:23.679 [DEBUG] [Thread-190182] [transport.py] [_log()] starting thread (client mode): 0xa57b23b0
2026-02-14T18:38:23.679 [DEBUG] [Thread-190182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:38:23.693 [DEBUG] [Thread-190182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:38:23.693 [INFO] [Thread-190182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:38:23.701 [DEBUG] [Thread-190182] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:38:23.701 [DEBUG] [Thread-190182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:38:23.701 [DEBUG] [Thread-190182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:38:23.701 [DEBUG] [Thread-190182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:38:23.701 [DEBUG] [Thread-190182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:38:23.701 [DEBUG] [Thread-190182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:38:23.701 [DEBUG] [Thread-190182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:38:23.702 [DEBUG] [Thread-190182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:38:23.702 [DEBUG] [Thread-190182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:38:23.702 [DEBUG] [Thread-190182] [transport.py] [_log()] client lang: <none>
2026-02-14T18:38:23.702 [DEBUG] [Thread-190182] [transport.py] [_log()] server lang: <none>
2026-02-14T18:38:23.702 [DEBUG] [Thread-190182] [transport.py] [_log()] kex follows: False
2026-02-14T18:38:23.702 [DEBUG] [Thread-190182] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:38:23.702 [DEBUG] [Thread-190182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:38:23.702 [DEBUG] [Thread-190182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:38:23.702 [DEBUG] [Thread-190182] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:38:23.703 [DEBUG] [Thread-190182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:38:23.703 [DEBUG] [Thread-190182] [transport.py] [_log()] Compression: none
2026-02-14T18:38:23.703 [DEBUG] [Thread-190182] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:38:23.757 [DEBUG] [Thread-190182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:38:23.758 [DEBUG] [Thread-190182] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:38:23.758 [DEBUG] [Thread-190182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:38:23.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:38:23.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:38:23.816 [DEBUG] [Thread-190182] [transport.py] [_log()] userauth is OK
2026-02-14T18:38:23.817 [DEBUG] [Thread-190182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:38:23.817 [DEBUG] [Thread-190182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:38:23.817 [DEBUG] [Thread-190182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:38:23.817 [DEBUG] [Thread-190182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:38:23.840 [INFO] [Thread-190182] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:38:23.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-14T18:38:23.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:38:24.685 [DEBUG] [Thread-190182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:38:24.686 [DEBUG] [Thread-190182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:38:24.733 [DEBUG] [Thread-190182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:38:24.733 [DEBUG] [Thread-190182] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:38:24.742 [DEBUG] [Thread-190182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:38:24.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:38:24.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-14T18:38:24.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-14T18:38:24.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:38:24.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:38:24.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:38:24.776 [DEBUG] [Thread-190182] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:38:30.190 [DEBUG] [Thread-190184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:38:36.712 [DEBUG] [Thread-190185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:38:45.244 [DEBUG] [Thread-190186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:38:54.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:38:54.783 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:38:54.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-14T18:38:56.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 38, 25), 12.56, 42.71, 0.0, 40.86, 14.18, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:38:56.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:38:25
2026-02-14T18:38:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:38:57.123 [DEBUG] [Thread-190187] [transport.py] [_log()] starting thread (client mode): 0xa57c0be0
2026-02-14T18:38:57.123 [DEBUG] [Thread-190187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:38:57.145 [DEBUG] [Thread-190187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:38:57.145 [INFO] [Thread-190187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:38:57.148 [DEBUG] [Thread-190187] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:38:57.148 [DEBUG] [Thread-190187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:38:57.148 [DEBUG] [Thread-190187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:38:57.148 [DEBUG] [Thread-190187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:38:57.149 [DEBUG] [Thread-190187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:38:57.149 [DEBUG] [Thread-190187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:38:57.149 [DEBUG] [Thread-190187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:38:57.149 [DEBUG] [Thread-190187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:38:57.149 [DEBUG] [Thread-190187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:38:57.149 [DEBUG] [Thread-190187] [transport.py] [_log()] client lang: <none>
2026-02-14T18:38:57.149 [DEBUG] [Thread-190187] [transport.py] [_log()] server lang: <none>
2026-02-14T18:38:57.149 [DEBUG] [Thread-190187] [transport.py] [_log()] kex follows: False
2026-02-14T18:38:57.149 [DEBUG] [Thread-190187] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:38:57.149 [DEBUG] [Thread-190187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:38:57.149 [DEBUG] [Thread-190187] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:38:57.150 [DEBUG] [Thread-190187] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:38:57.150 [DEBUG] [Thread-190187] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:38:57.150 [DEBUG] [Thread-190187] [transport.py] [_log()] Compression: none
2026-02-14T18:38:57.150 [DEBUG] [Thread-190187] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:38:57.169 [DEBUG] [Thread-190187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:38:57.170 [DEBUG] [Thread-190187] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:38:57.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:38:57.171 [DEBUG] [Thread-190187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:38:57.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:38:57.174 [DEBUG] [Thread-190187] [transport.py] [_log()] userauth is OK
2026-02-14T18:38:57.174 [DEBUG] [Thread-190187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:38:57.174 [DEBUG] [Thread-190187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:38:57.174 [DEBUG] [Thread-190187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:38:57.174 [DEBUG] [Thread-190187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:38:57.211 [INFO] [Thread-190187] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:38:57.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:38:57.785 [DEBUG] [Thread-190187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:38:57.785 [DEBUG] [Thread-190187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:38:57.785 [DEBUG] [Thread-190187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:38:57.826 [DEBUG] [Thread-190187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:38:57.827 [DEBUG] [Thread-190187] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:38:57.830 [DEBUG] [Thread-190187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:38:57.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:38:57.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:38:57.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:38:57.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:38:57.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:38:57.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:38:57.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:38:57.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:38:57.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:38:57.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.693171 -999.00  +13.90  25.43     49   +3.40 1 1 1 1 1   887    0 9.93 -26.93 ----- 42.0 25.4 177.8 37.9 16.1 -27.5 15.9 -27.6 16.9 -26.6 17.4 -28.2
2026-02-14T18:38:57.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:38:57.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:38:57.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.693171
2026-02-14T18:38:57.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:38:57.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:38:57.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:38:57.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:38:57.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:38:57.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:38:25', tmtdew=12.56, humidity=42.71, cloud=0.0, wind=40.86, temperature=14.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:38:09.974', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:38:57.860 [DEBUG] [Thread-190187] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:38:57.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-14T18:38:57.957 [DEBUG] [Thread-190190] [transport.py] [_log()] starting thread (client mode): 0xa2d01180
2026-02-14T18:38:57.957 [DEBUG] [Thread-190190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:38:57.972 [DEBUG] [Thread-190190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:38:57.972 [INFO] [Thread-190190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:38:57.980 [DEBUG] [Thread-190190] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:38:57.980 [DEBUG] [Thread-190190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:38:57.980 [DEBUG] [Thread-190190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:38:57.980 [DEBUG] [Thread-190190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:38:57.980 [DEBUG] [Thread-190190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:38:57.981 [DEBUG] [Thread-190190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:38:57.981 [DEBUG] [Thread-190190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:38:57.981 [DEBUG] [Thread-190190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:38:57.981 [DEBUG] [Thread-190190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:38:57.981 [DEBUG] [Thread-190190] [transport.py] [_log()] client lang: <none>
2026-02-14T18:38:57.981 [DEBUG] [Thread-190190] [transport.py] [_log()] server lang: <none>
2026-02-14T18:38:57.981 [DEBUG] [Thread-190190] [transport.py] [_log()] kex follows: False
2026-02-14T18:38:57.981 [DEBUG] [Thread-190190] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:38:57.981 [DEBUG] [Thread-190190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:38:57.982 [DEBUG] [Thread-190190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:38:57.982 [DEBUG] [Thread-190190] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:38:57.982 [DEBUG] [Thread-190190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:38:57.982 [DEBUG] [Thread-190190] [transport.py] [_log()] Compression: none
2026-02-14T18:38:57.982 [DEBUG] [Thread-190190] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:38:58.038 [DEBUG] [Thread-190190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:38:58.038 [DEBUG] [Thread-190190] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:38:58.039 [DEBUG] [Thread-190190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:38:58.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:38:58.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:38:58.094 [DEBUG] [Thread-190190] [transport.py] [_log()] userauth is OK
2026-02-14T18:38:58.094 [DEBUG] [Thread-190190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:38:58.094 [DEBUG] [Thread-190190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:38:58.094 [DEBUG] [Thread-190190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:38:58.094 [DEBUG] [Thread-190190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:38:58.117 [INFO] [Thread-190190] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:38:58.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-14T18:38:58.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:38:58.941 [DEBUG] [Thread-190190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:38:58.942 [DEBUG] [Thread-190190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:38:58.989 [DEBUG] [Thread-190190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:38:58.990 [DEBUG] [Thread-190190] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:38:58.999 [DEBUG] [Thread-190190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:38:59.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:38:59.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:38:59.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:38:59.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:38:59.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:38:59.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:38:59.035 [DEBUG] [Thread-190190] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:39:00.283 [DEBUG] [Thread-190192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:39:14.295 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:39:14.296 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:39:15.344 [DEBUG] [Thread-190193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:39:29.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:39:29.036 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:39:29.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-14T18:39:30.386 [DEBUG] [Thread-190194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:39:30.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 38, 25), 12.56, 42.71, 0.0, 37.26, 14.23, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:39:30.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:38:25
2026-02-14T18:39:31.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:39:31.485 [DEBUG] [Thread-190195] [transport.py] [_log()] starting thread (client mode): 0xa57b2bc0
2026-02-14T18:39:31.485 [DEBUG] [Thread-190195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:39:31.495 [DEBUG] [Thread-190195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:39:31.495 [INFO] [Thread-190195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:39:31.496 [DEBUG] [Thread-190195] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:39:31.497 [DEBUG] [Thread-190195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:39:31.497 [DEBUG] [Thread-190195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:39:31.497 [DEBUG] [Thread-190195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:39:31.497 [DEBUG] [Thread-190195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:39:31.497 [DEBUG] [Thread-190195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:39:31.497 [DEBUG] [Thread-190195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:39:31.497 [DEBUG] [Thread-190195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:39:31.497 [DEBUG] [Thread-190195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:39:31.497 [DEBUG] [Thread-190195] [transport.py] [_log()] client lang: <none>
2026-02-14T18:39:31.497 [DEBUG] [Thread-190195] [transport.py] [_log()] server lang: <none>
2026-02-14T18:39:31.497 [DEBUG] [Thread-190195] [transport.py] [_log()] kex follows: False
2026-02-14T18:39:31.497 [DEBUG] [Thread-190195] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:39:31.497 [DEBUG] [Thread-190195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:39:31.497 [DEBUG] [Thread-190195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:39:31.497 [DEBUG] [Thread-190195] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:39:31.497 [DEBUG] [Thread-190195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:39:31.497 [DEBUG] [Thread-190195] [transport.py] [_log()] Compression: none
2026-02-14T18:39:31.497 [DEBUG] [Thread-190195] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:39:31.506 [DEBUG] [Thread-190195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:39:31.507 [DEBUG] [Thread-190195] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:39:31.507 [DEBUG] [Thread-190195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:39:31.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:39:31.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:39:31.508 [DEBUG] [Thread-190195] [transport.py] [_log()] userauth is OK
2026-02-14T18:39:31.508 [DEBUG] [Thread-190195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:39:31.508 [DEBUG] [Thread-190195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:39:31.508 [DEBUG] [Thread-190195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:39:31.508 [DEBUG] [Thread-190195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:39:31.521 [INFO] [Thread-190195] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:39:31.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:39:32.105 [DEBUG] [Thread-190195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:39:32.105 [DEBUG] [Thread-190195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:39:32.106 [DEBUG] [Thread-190195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:39:32.146 [DEBUG] [Thread-190195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:39:32.146 [DEBUG] [Thread-190195] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:39:32.150 [DEBUG] [Thread-190195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:39:32.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:39:32.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:39:32.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:39:32.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:39:32.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:39:32.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:39:32.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:39:32.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:39:32.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:39:32.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.693866 -999.00  +13.80  36.24     49   +3.30 1 1 2 1 1   887    0 9.79 -28.64 ----- 31.8 36.2 173.2 52.8 16.0 -27.2 15.9 -26.8 16.8 -26.2 17.2 -27.4
2026-02-14T18:39:32.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:39:32.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:39:32.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.693866
2026-02-14T18:39:32.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:39:32.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:39:32.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:39:32.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:39:32.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:39:32.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:38:25', tmtdew=12.56, humidity=42.71, cloud=0.0, wind=37.26, temperature=14.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:39:10.022', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:39:32.170 [DEBUG] [Thread-190195] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:39:32.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-14T18:39:32.266 [DEBUG] [Thread-190198] [transport.py] [_log()] starting thread (client mode): 0xa57c17e0
2026-02-14T18:39:32.266 [DEBUG] [Thread-190198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:39:32.280 [DEBUG] [Thread-190198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:39:32.280 [INFO] [Thread-190198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:39:32.288 [DEBUG] [Thread-190198] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:39:32.288 [DEBUG] [Thread-190198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:39:32.288 [DEBUG] [Thread-190198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:39:32.288 [DEBUG] [Thread-190198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:39:32.288 [DEBUG] [Thread-190198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:39:32.289 [DEBUG] [Thread-190198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:39:32.289 [DEBUG] [Thread-190198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:39:32.289 [DEBUG] [Thread-190198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:39:32.289 [DEBUG] [Thread-190198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:39:32.289 [DEBUG] [Thread-190198] [transport.py] [_log()] client lang: <none>
2026-02-14T18:39:32.289 [DEBUG] [Thread-190198] [transport.py] [_log()] server lang: <none>
2026-02-14T18:39:32.289 [DEBUG] [Thread-190198] [transport.py] [_log()] kex follows: False
2026-02-14T18:39:32.289 [DEBUG] [Thread-190198] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:39:32.289 [DEBUG] [Thread-190198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:39:32.289 [DEBUG] [Thread-190198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:39:32.289 [DEBUG] [Thread-190198] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:39:32.289 [DEBUG] [Thread-190198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:39:32.289 [DEBUG] [Thread-190198] [transport.py] [_log()] Compression: none
2026-02-14T18:39:32.289 [DEBUG] [Thread-190198] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:39:32.347 [DEBUG] [Thread-190198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:39:32.348 [DEBUG] [Thread-190198] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:39:32.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:39:32.349 [DEBUG] [Thread-190198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:39:32.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:39:32.403 [DEBUG] [Thread-190198] [transport.py] [_log()] userauth is OK
2026-02-14T18:39:32.403 [DEBUG] [Thread-190198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:39:32.404 [DEBUG] [Thread-190198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:39:32.404 [DEBUG] [Thread-190198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:39:32.404 [DEBUG] [Thread-190198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:39:32.423 [INFO] [Thread-190198] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:39:32.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-14T18:39:32.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:39:33.259 [DEBUG] [Thread-190198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:39:33.259 [DEBUG] [Thread-190198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:39:33.307 [DEBUG] [Thread-190198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:39:33.307 [DEBUG] [Thread-190198] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:39:33.315 [DEBUG] [Thread-190198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:39:33.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:39:33.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:39:33.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-14T18:39:33.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:39:33.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:39:33.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:39:33.349 [DEBUG] [Thread-190198] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:39:36.757 [DEBUG] [Thread-190200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:39:45.424 [DEBUG] [Thread-190201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:40:00.472 [DEBUG] [Thread-190202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:40:03.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:40:03.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:40: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-14T18:40:05.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 39, 35), 13.3, 40.52, 0.0, 52.04, 15.0, 0, 0, 0, 2, 1, 0),)
2026-02-14T18:40:05.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:39:35
2026-02-14T18:40:05.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:40:05.751 [DEBUG] [Thread-190203] [transport.py] [_log()] starting thread (client mode): 0xa57b2d10
2026-02-14T18:40:05.751 [DEBUG] [Thread-190203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:40:05.770 [DEBUG] [Thread-190203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:40:05.770 [INFO] [Thread-190203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:40:05.773 [DEBUG] [Thread-190203] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:40:05.774 [DEBUG] [Thread-190203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:40:05.774 [DEBUG] [Thread-190203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:40:05.774 [DEBUG] [Thread-190203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:40:05.774 [DEBUG] [Thread-190203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:40:05.774 [DEBUG] [Thread-190203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:40:05.774 [DEBUG] [Thread-190203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:40:05.774 [DEBUG] [Thread-190203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:40:05.774 [DEBUG] [Thread-190203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:40:05.774 [DEBUG] [Thread-190203] [transport.py] [_log()] client lang: <none>
2026-02-14T18:40:05.774 [DEBUG] [Thread-190203] [transport.py] [_log()] server lang: <none>
2026-02-14T18:40:05.774 [DEBUG] [Thread-190203] [transport.py] [_log()] kex follows: False
2026-02-14T18:40:05.774 [DEBUG] [Thread-190203] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:40:05.774 [DEBUG] [Thread-190203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:40:05.774 [DEBUG] [Thread-190203] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:40:05.775 [DEBUG] [Thread-190203] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:40:05.775 [DEBUG] [Thread-190203] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:40:05.775 [DEBUG] [Thread-190203] [transport.py] [_log()] Compression: none
2026-02-14T18:40:05.775 [DEBUG] [Thread-190203] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:40:05.791 [DEBUG] [Thread-190203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:40:05.792 [DEBUG] [Thread-190203] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:40:05.792 [DEBUG] [Thread-190203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:40:05.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:40:05.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:40:05.794 [DEBUG] [Thread-190203] [transport.py] [_log()] userauth is OK
2026-02-14T18:40:05.795 [DEBUG] [Thread-190203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:40:05.795 [DEBUG] [Thread-190203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:40:05.795 [DEBUG] [Thread-190203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:40:05.795 [DEBUG] [Thread-190203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:40:05.831 [INFO] [Thread-190203] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:40:05.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:40:06.435 [DEBUG] [Thread-190203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:40:06.435 [DEBUG] [Thread-190203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:40:06.435 [DEBUG] [Thread-190203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:40:06.476 [DEBUG] [Thread-190203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:40:06.476 [DEBUG] [Thread-190203] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:40:06.479 [DEBUG] [Thread-190203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:40:06.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:40:06.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:40:06.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:40:06.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:40:06.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:40:06.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:40:06.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:40:06.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:40:06.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:40:06.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.694213 -999.00  +13.80  32.08     49   +3.30 1 1 2 1 1   887    0 9.95 -30.14 ----- 28.3 32.1 171.0 43.6 16.0 -27.6 15.8 -27.9 16.8 -25.1 17.2 -27.6
2026-02-14T18:40:06.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:40:06.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:40:06.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.694213
2026-02-14T18:40:06.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:40:06.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:40:06.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:40:06.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:40:06.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:40:06.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:39:35', tmtdew=13.3, humidity=40.52, cloud=0.0, wind=52.04, temperature=15.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:39:40.003', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:40:06.503 [DEBUG] [Thread-190203] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:40:06.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T18:40:06.609 [DEBUG] [Thread-190206] [transport.py] [_log()] starting thread (client mode): 0xa57e0af0
2026-02-14T18:40:06.609 [DEBUG] [Thread-190206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:40:06.626 [DEBUG] [Thread-190206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:40:06.627 [INFO] [Thread-190206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:40:06.634 [DEBUG] [Thread-190206] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:40:06.634 [DEBUG] [Thread-190206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:40:06.634 [DEBUG] [Thread-190206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:40:06.634 [DEBUG] [Thread-190206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:40:06.634 [DEBUG] [Thread-190206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:40:06.635 [DEBUG] [Thread-190206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:40:06.635 [DEBUG] [Thread-190206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:40:06.635 [DEBUG] [Thread-190206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:40:06.635 [DEBUG] [Thread-190206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:40:06.635 [DEBUG] [Thread-190206] [transport.py] [_log()] client lang: <none>
2026-02-14T18:40:06.635 [DEBUG] [Thread-190206] [transport.py] [_log()] server lang: <none>
2026-02-14T18:40:06.635 [DEBUG] [Thread-190206] [transport.py] [_log()] kex follows: False
2026-02-14T18:40:06.635 [DEBUG] [Thread-190206] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:40:06.635 [DEBUG] [Thread-190206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:40:06.635 [DEBUG] [Thread-190206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:40:06.635 [DEBUG] [Thread-190206] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:40:06.635 [DEBUG] [Thread-190206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:40:06.635 [DEBUG] [Thread-190206] [transport.py] [_log()] Compression: none
2026-02-14T18:40:06.635 [DEBUG] [Thread-190206] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:40:06.693 [DEBUG] [Thread-190206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:40:06.693 [DEBUG] [Thread-190206] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:40:06.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:40:06.695 [DEBUG] [Thread-190206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:40:06.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:40:06.748 [DEBUG] [Thread-190206] [transport.py] [_log()] userauth is OK
2026-02-14T18:40:06.748 [DEBUG] [Thread-190206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:40:06.748 [DEBUG] [Thread-190206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:40:06.748 [DEBUG] [Thread-190206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:40:06.748 [DEBUG] [Thread-190206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:40:06.762 [INFO] [Thread-190206] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:40:06.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-14T18:40:06.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:40:07.548 [DEBUG] [Thread-190206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:40:07.549 [DEBUG] [Thread-190206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:40:07.596 [DEBUG] [Thread-190206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:40:07.597 [DEBUG] [Thread-190206] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:40:07.606 [DEBUG] [Thread-190206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:40:07.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:40:07.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:40:07.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:40:07.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:40:07.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:40:07.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:40:07.641 [DEBUG] [Thread-190206] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:40:14.437 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:40:14.438 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:40:15.509 [DEBUG] [Thread-190208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:40:30.572 [DEBUG] [Thread-190209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:40:36.790 [DEBUG] [Thread-190210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:40:37.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:40:37.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:40:37.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-14T18:40:39.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 40, 10), 12.58, 42.42, 0.0, 42.05, 14.15, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:40:39.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:40:10
2026-02-14T18:40:39.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:40:39.996 [DEBUG] [Thread-190211] [transport.py] [_log()] starting thread (client mode): 0xa57c25c0
2026-02-14T18:40:39.996 [DEBUG] [Thread-190211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:40:40.013 [DEBUG] [Thread-190211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:40:40.013 [INFO] [Thread-190211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:40:40.016 [DEBUG] [Thread-190211] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:40:40.016 [DEBUG] [Thread-190211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:40:40.016 [DEBUG] [Thread-190211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:40:40.016 [DEBUG] [Thread-190211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:40:40.016 [DEBUG] [Thread-190211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:40:40.016 [DEBUG] [Thread-190211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:40:40.016 [DEBUG] [Thread-190211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:40:40.016 [DEBUG] [Thread-190211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:40:40.016 [DEBUG] [Thread-190211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:40:40.016 [DEBUG] [Thread-190211] [transport.py] [_log()] client lang: <none>
2026-02-14T18:40:40.016 [DEBUG] [Thread-190211] [transport.py] [_log()] server lang: <none>
2026-02-14T18:40:40.016 [DEBUG] [Thread-190211] [transport.py] [_log()] kex follows: False
2026-02-14T18:40:40.016 [DEBUG] [Thread-190211] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:40:40.016 [DEBUG] [Thread-190211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:40:40.016 [DEBUG] [Thread-190211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:40:40.016 [DEBUG] [Thread-190211] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:40:40.017 [DEBUG] [Thread-190211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:40:40.017 [DEBUG] [Thread-190211] [transport.py] [_log()] Compression: none
2026-02-14T18:40:40.017 [DEBUG] [Thread-190211] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:40:40.034 [DEBUG] [Thread-190211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:40:40.034 [DEBUG] [Thread-190211] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:40:40.034 [DEBUG] [Thread-190211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:40:40.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:40:40.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:40:40.036 [DEBUG] [Thread-190211] [transport.py] [_log()] userauth is OK
2026-02-14T18:40:40.036 [DEBUG] [Thread-190211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:40:40.037 [DEBUG] [Thread-190211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:40:40.037 [DEBUG] [Thread-190211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:40:40.037 [DEBUG] [Thread-190211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:40:40.052 [INFO] [Thread-190211] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:40:40.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:40:40.669 [DEBUG] [Thread-190211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:40:40.669 [DEBUG] [Thread-190211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:40:40.670 [DEBUG] [Thread-190211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:40:40.710 [DEBUG] [Thread-190211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:40:40.711 [DEBUG] [Thread-190211] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:40:40.714 [DEBUG] [Thread-190211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:40:40.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:40:40.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:40:40.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:40:40.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:40:40.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:40:40.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:40:40.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:40:40.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:40:40.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:40:40.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.694560 -999.00  +13.80  28.35     49   +3.30 1 1 1 1 1   887    0 9.73 -34.18 ----- 26.8 28.4 156.0 41.2 15.9 -27.7 15.9 -26.2 16.8 -26.0 17.2 -27.1
2026-02-14T18:40:40.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:40:40.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:40:40.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.694560
2026-02-14T18:40:40.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:40:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:40:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:40:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:40:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:40:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:40:10', tmtdew=12.58, humidity=42.42, cloud=0.0, wind=42.05, temperature=14.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:40:09.984', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:40:40.734 [DEBUG] [Thread-190211] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:40:40.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-14T18:40:40.827 [DEBUG] [Thread-190214] [transport.py] [_log()] starting thread (client mode): 0xa57c2620
2026-02-14T18:40:40.827 [DEBUG] [Thread-190214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:40:40.842 [DEBUG] [Thread-190214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:40:40.842 [INFO] [Thread-190214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:40:40.849 [DEBUG] [Thread-190214] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:40:40.850 [DEBUG] [Thread-190214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:40:40.850 [DEBUG] [Thread-190214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:40:40.850 [DEBUG] [Thread-190214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:40:40.850 [DEBUG] [Thread-190214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:40:40.850 [DEBUG] [Thread-190214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:40:40.850 [DEBUG] [Thread-190214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:40:40.850 [DEBUG] [Thread-190214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:40:40.850 [DEBUG] [Thread-190214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:40:40.851 [DEBUG] [Thread-190214] [transport.py] [_log()] client lang: <none>
2026-02-14T18:40:40.851 [DEBUG] [Thread-190214] [transport.py] [_log()] server lang: <none>
2026-02-14T18:40:40.851 [DEBUG] [Thread-190214] [transport.py] [_log()] kex follows: False
2026-02-14T18:40:40.851 [DEBUG] [Thread-190214] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:40:40.851 [DEBUG] [Thread-190214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:40:40.851 [DEBUG] [Thread-190214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:40:40.851 [DEBUG] [Thread-190214] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:40:40.851 [DEBUG] [Thread-190214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:40:40.852 [DEBUG] [Thread-190214] [transport.py] [_log()] Compression: none
2026-02-14T18:40:40.852 [DEBUG] [Thread-190214] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:40:40.910 [DEBUG] [Thread-190214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:40:40.911 [DEBUG] [Thread-190214] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:40:40.911 [DEBUG] [Thread-190214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:40:40.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:40:40.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:40:40.966 [DEBUG] [Thread-190214] [transport.py] [_log()] userauth is OK
2026-02-14T18:40:40.966 [DEBUG] [Thread-190214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:40:40.966 [DEBUG] [Thread-190214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:40:40.966 [DEBUG] [Thread-190214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:40:40.966 [DEBUG] [Thread-190214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:40:40.985 [INFO] [Thread-190214] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:40:40.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-14T18:40:40.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:40:41.778 [DEBUG] [Thread-190214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:40:41.778 [DEBUG] [Thread-190214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:40:41.826 [DEBUG] [Thread-190214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:40:41.826 [DEBUG] [Thread-190214] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:40:41.835 [DEBUG] [Thread-190214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:40:41.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:40:41.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-14T18:40:41.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:40:41.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:40:41.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:40:41.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:40:41.870 [DEBUG] [Thread-190214] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:40:45.614 [DEBUG] [Thread-190216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:41:00.675 [DEBUG] [Thread-190217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:41:11.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:41:11.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:41:11.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-14T18:41:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 40, 46), 12.64, 42.41, 0.0, 36.54, 14.22, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:41:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:40:46
2026-02-14T18:41:14.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:41:14.204 [DEBUG] [Thread-190218] [transport.py] [_log()] starting thread (client mode): 0xa57721d0
2026-02-14T18:41:14.204 [DEBUG] [Thread-190218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:41:14.224 [DEBUG] [Thread-190218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:41:14.224 [INFO] [Thread-190218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:41:14.226 [DEBUG] [Thread-190218] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:41:14.226 [DEBUG] [Thread-190218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:41:14.227 [DEBUG] [Thread-190218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:41:14.227 [DEBUG] [Thread-190218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:41:14.227 [DEBUG] [Thread-190218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:41:14.227 [DEBUG] [Thread-190218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:41:14.227 [DEBUG] [Thread-190218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:41:14.227 [DEBUG] [Thread-190218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:41:14.227 [DEBUG] [Thread-190218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:41:14.227 [DEBUG] [Thread-190218] [transport.py] [_log()] client lang: <none>
2026-02-14T18:41:14.227 [DEBUG] [Thread-190218] [transport.py] [_log()] server lang: <none>
2026-02-14T18:41:14.227 [DEBUG] [Thread-190218] [transport.py] [_log()] kex follows: False
2026-02-14T18:41:14.227 [DEBUG] [Thread-190218] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:41:14.228 [DEBUG] [Thread-190218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:41:14.228 [DEBUG] [Thread-190218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:41:14.228 [DEBUG] [Thread-190218] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:41:14.228 [DEBUG] [Thread-190218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:41:14.228 [DEBUG] [Thread-190218] [transport.py] [_log()] Compression: none
2026-02-14T18:41:14.228 [DEBUG] [Thread-190218] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:41:14.245 [DEBUG] [Thread-190218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:41:14.245 [DEBUG] [Thread-190218] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:41:14.246 [DEBUG] [Thread-190218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:41:14.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:41:14.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:41:14.248 [DEBUG] [Thread-190218] [transport.py] [_log()] userauth is OK
2026-02-14T18:41:14.248 [DEBUG] [Thread-190218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:41:14.248 [DEBUG] [Thread-190218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:41:14.249 [DEBUG] [Thread-190218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:41:14.249 [DEBUG] [Thread-190218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:41:14.272 [INFO] [Thread-190218] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:41:14.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:41:14.578 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:41:14.579 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:41:14.915 [DEBUG] [Thread-190218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:41:14.924 [DEBUG] [Thread-190218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:41:14.924 [DEBUG] [Thread-190218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:41:14.956 [DEBUG] [Thread-190218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:41:14.956 [DEBUG] [Thread-190218] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:41:14.960 [DEBUG] [Thread-190218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:41:14.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:41:14.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:41:14.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:41:14.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:41:14.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:41:14.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:41:14.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:41:14.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:41:14.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:41:14.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.694907 -999.00  +13.80  28.02     48   +3.20 1 1 1 1 1   887    0 9.47 -34.46 ----- 23.1 28.0 174.4 38.8 15.9 -27.4 15.9 -26.8 16.8 -25.9 17.2 -27.5
2026-02-14T18:41:14.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:41:14.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:41:14.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.694907
2026-02-14T18:41:14.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:41:14.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:41:14.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:41:14.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:41:14.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:41:14.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:40:46', tmtdew=12.64, humidity=42.41, cloud=0.0, wind=36.54, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:40:39.965', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:41:14.986 [DEBUG] [Thread-190218] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:41:15.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-14T18:41:15.083 [DEBUG] [Thread-190221] [transport.py] [_log()] starting thread (client mode): 0xa5773640
2026-02-14T18:41:15.084 [DEBUG] [Thread-190221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:41:15.098 [DEBUG] [Thread-190221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:41:15.098 [INFO] [Thread-190221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:41:15.106 [DEBUG] [Thread-190221] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:41:15.106 [DEBUG] [Thread-190221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:41:15.106 [DEBUG] [Thread-190221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:41:15.106 [DEBUG] [Thread-190221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:41:15.106 [DEBUG] [Thread-190221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:41:15.107 [DEBUG] [Thread-190221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:41:15.107 [DEBUG] [Thread-190221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:41:15.107 [DEBUG] [Thread-190221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:41:15.107 [DEBUG] [Thread-190221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:41:15.107 [DEBUG] [Thread-190221] [transport.py] [_log()] client lang: <none>
2026-02-14T18:41:15.107 [DEBUG] [Thread-190221] [transport.py] [_log()] server lang: <none>
2026-02-14T18:41:15.107 [DEBUG] [Thread-190221] [transport.py] [_log()] kex follows: False
2026-02-14T18:41:15.107 [DEBUG] [Thread-190221] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:41:15.107 [DEBUG] [Thread-190221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:41:15.107 [DEBUG] [Thread-190221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:41:15.107 [DEBUG] [Thread-190221] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:41:15.107 [DEBUG] [Thread-190221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:41:15.107 [DEBUG] [Thread-190221] [transport.py] [_log()] Compression: none
2026-02-14T18:41:15.107 [DEBUG] [Thread-190221] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:41:15.162 [DEBUG] [Thread-190221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:41:15.163 [DEBUG] [Thread-190221] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:41:15.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:41:15.164 [DEBUG] [Thread-190221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:41:15.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:41:15.220 [DEBUG] [Thread-190221] [transport.py] [_log()] userauth is OK
2026-02-14T18:41:15.220 [DEBUG] [Thread-190221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:41:15.220 [DEBUG] [Thread-190221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:41:15.220 [DEBUG] [Thread-190221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:41:15.220 [DEBUG] [Thread-190221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:41:15.245 [INFO] [Thread-190221] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:41:15.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-14T18:41:15.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:41:15.711 [DEBUG] [Thread-190223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:41:16.120 [DEBUG] [Thread-190221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:41:16.121 [DEBUG] [Thread-190221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:41:16.169 [DEBUG] [Thread-190221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:41:16.169 [DEBUG] [Thread-190221] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:41:16.178 [DEBUG] [Thread-190221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:41:16.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:41:16.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:41:16.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-14T18:41:16.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:41:16.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:41:16.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:41:16.215 [DEBUG] [Thread-190221] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:41:30.763 [DEBUG] [Thread-190224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:41:36.861 [DEBUG] [Thread-190225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:41:45.800 [DEBUG] [Thread-190226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:41:46.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:41:46.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:41:46.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:41:48.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 41, 21), 12.61, 42.49, 0.0, 33.21, 14.17, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:41:48.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:41:21
2026-02-14T18:41:49.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:41:49.276 [DEBUG] [Thread-190227] [transport.py] [_log()] starting thread (client mode): 0xa5773610
2026-02-14T18:41:49.276 [DEBUG] [Thread-190227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:41:49.297 [DEBUG] [Thread-190227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:41:49.297 [INFO] [Thread-190227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:41:49.301 [DEBUG] [Thread-190227] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:41:49.301 [DEBUG] [Thread-190227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:41:49.301 [DEBUG] [Thread-190227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:41:49.301 [DEBUG] [Thread-190227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:41:49.301 [DEBUG] [Thread-190227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:41:49.301 [DEBUG] [Thread-190227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:41:49.301 [DEBUG] [Thread-190227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:41:49.301 [DEBUG] [Thread-190227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:41:49.301 [DEBUG] [Thread-190227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:41:49.301 [DEBUG] [Thread-190227] [transport.py] [_log()] client lang: <none>
2026-02-14T18:41:49.301 [DEBUG] [Thread-190227] [transport.py] [_log()] server lang: <none>
2026-02-14T18:41:49.301 [DEBUG] [Thread-190227] [transport.py] [_log()] kex follows: False
2026-02-14T18:41:49.301 [DEBUG] [Thread-190227] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:41:49.301 [DEBUG] [Thread-190227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:41:49.301 [DEBUG] [Thread-190227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:41:49.301 [DEBUG] [Thread-190227] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:41:49.301 [DEBUG] [Thread-190227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:41:49.301 [DEBUG] [Thread-190227] [transport.py] [_log()] Compression: none
2026-02-14T18:41:49.301 [DEBUG] [Thread-190227] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:41:49.320 [DEBUG] [Thread-190227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:41:49.320 [DEBUG] [Thread-190227] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:41:49.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:41:49.321 [DEBUG] [Thread-190227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:41:49.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:41:49.324 [DEBUG] [Thread-190227] [transport.py] [_log()] userauth is OK
2026-02-14T18:41:49.324 [DEBUG] [Thread-190227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:41:49.324 [DEBUG] [Thread-190227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:41:49.324 [DEBUG] [Thread-190227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:41:49.325 [DEBUG] [Thread-190227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:41:49.349 [INFO] [Thread-190227] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:41:49.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:41:49.979 [DEBUG] [Thread-190227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:41:49.979 [DEBUG] [Thread-190227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:41:49.980 [DEBUG] [Thread-190227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:41:50.021 [DEBUG] [Thread-190227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:41:50.022 [DEBUG] [Thread-190227] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:41:50.025 [DEBUG] [Thread-190227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:41:50.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:41:50.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:41:50.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:41:50.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:41:50.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:41:50.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:41:50.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:41:50.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:41:50.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:41:50.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.695601 -999.00  +13.80  27.22     48   +3.20 1 1 1 1 1   887    0 10.01 -31.71 ----- 24.1 27.2 168.6 41.0 15.9 -27.8 15.8 -27.5 16.8 -25.1 17.1 -27.5
2026-02-14T18:41:50.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:41:50.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:41:50.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.695601
2026-02-14T18:41:50.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:41:50.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:41:50.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:41:50.051 [DEBUG] [Thread-190227] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:41:50.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:41:50.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:41:50.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:41:21', tmtdew=12.61, humidity=42.49, cloud=0.0, wind=33.21, temperature=14.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:41:39.926', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:41:50.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-14T18:41:50.159 [DEBUG] [Thread-190230] [transport.py] [_log()] starting thread (client mode): 0xa2d033a0
2026-02-14T18:41:50.159 [DEBUG] [Thread-190230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:41:50.174 [DEBUG] [Thread-190230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:41:50.174 [INFO] [Thread-190230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:41:50.182 [DEBUG] [Thread-190230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:41:50.182 [DEBUG] [Thread-190230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:41:50.182 [DEBUG] [Thread-190230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:41:50.182 [DEBUG] [Thread-190230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:41:50.182 [DEBUG] [Thread-190230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:41:50.182 [DEBUG] [Thread-190230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:41:50.182 [DEBUG] [Thread-190230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:41:50.182 [DEBUG] [Thread-190230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:41:50.182 [DEBUG] [Thread-190230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:41:50.182 [DEBUG] [Thread-190230] [transport.py] [_log()] client lang: <none>
2026-02-14T18:41:50.182 [DEBUG] [Thread-190230] [transport.py] [_log()] server lang: <none>
2026-02-14T18:41:50.183 [DEBUG] [Thread-190230] [transport.py] [_log()] kex follows: False
2026-02-14T18:41:50.183 [DEBUG] [Thread-190230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:41:50.183 [DEBUG] [Thread-190230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:41:50.183 [DEBUG] [Thread-190230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:41:50.183 [DEBUG] [Thread-190230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:41:50.183 [DEBUG] [Thread-190230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:41:50.183 [DEBUG] [Thread-190230] [transport.py] [_log()] Compression: none
2026-02-14T18:41:50.183 [DEBUG] [Thread-190230] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:41:50.242 [DEBUG] [Thread-190230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:41:50.243 [DEBUG] [Thread-190230] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:41:50.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:41:50.244 [DEBUG] [Thread-190230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:41:50.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:41:50.300 [DEBUG] [Thread-190230] [transport.py] [_log()] userauth is OK
2026-02-14T18:41:50.301 [DEBUG] [Thread-190230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:41:50.301 [DEBUG] [Thread-190230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:41:50.301 [DEBUG] [Thread-190230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:41:50.301 [DEBUG] [Thread-190230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:41:50.321 [INFO] [Thread-190230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:41:50.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T18:41:50.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:41:51.228 [DEBUG] [Thread-190230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:41:51.229 [DEBUG] [Thread-190230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:41:51.276 [DEBUG] [Thread-190230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:41:51.276 [DEBUG] [Thread-190230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:41:51.284 [DEBUG] [Thread-190230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:41:51.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:41:51.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:41:51.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-14T18:41:51.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:41:51.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:41:51.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:41:51.320 [DEBUG] [Thread-190230] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:42:00.837 [DEBUG] [Thread-190232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:42:14.720 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:42:14.722 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:42:15.885 [DEBUG] [Thread-190233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:42:21.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:42:21.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:42:21.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-14T18:42:23.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 41, 56), 12.55, 42.49, 0.0, 43.99, 14.05, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:42:23.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:41:56
2026-02-14T18:42:23.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:42:23.712 [DEBUG] [Thread-190234] [transport.py] [_log()] starting thread (client mode): 0xa57b2bc0
2026-02-14T18:42:23.712 [DEBUG] [Thread-190234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:42:23.732 [DEBUG] [Thread-190234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:42:23.733 [INFO] [Thread-190234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:42:23.736 [DEBUG] [Thread-190234] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:42:23.736 [DEBUG] [Thread-190234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:42:23.736 [DEBUG] [Thread-190234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:42:23.736 [DEBUG] [Thread-190234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:42:23.736 [DEBUG] [Thread-190234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:42:23.736 [DEBUG] [Thread-190234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:42:23.737 [DEBUG] [Thread-190234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:42:23.737 [DEBUG] [Thread-190234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:42:23.737 [DEBUG] [Thread-190234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:42:23.737 [DEBUG] [Thread-190234] [transport.py] [_log()] client lang: <none>
2026-02-14T18:42:23.737 [DEBUG] [Thread-190234] [transport.py] [_log()] server lang: <none>
2026-02-14T18:42:23.737 [DEBUG] [Thread-190234] [transport.py] [_log()] kex follows: False
2026-02-14T18:42:23.737 [DEBUG] [Thread-190234] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:42:23.737 [DEBUG] [Thread-190234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:42:23.737 [DEBUG] [Thread-190234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:42:23.737 [DEBUG] [Thread-190234] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:42:23.737 [DEBUG] [Thread-190234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:42:23.737 [DEBUG] [Thread-190234] [transport.py] [_log()] Compression: none
2026-02-14T18:42:23.737 [DEBUG] [Thread-190234] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:42:23.755 [DEBUG] [Thread-190234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:42:23.755 [DEBUG] [Thread-190234] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:42:23.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:42:23.756 [DEBUG] [Thread-190234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:42:23.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:42:23.758 [DEBUG] [Thread-190234] [transport.py] [_log()] userauth is OK
2026-02-14T18:42:23.759 [DEBUG] [Thread-190234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:42:23.759 [DEBUG] [Thread-190234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:42:23.759 [DEBUG] [Thread-190234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:42:23.759 [DEBUG] [Thread-190234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:42:23.782 [INFO] [Thread-190234] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:42:23.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:42:24.410 [DEBUG] [Thread-190234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:42:24.411 [DEBUG] [Thread-190234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:42:24.411 [DEBUG] [Thread-190234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:42:24.452 [DEBUG] [Thread-190234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:42:24.452 [DEBUG] [Thread-190234] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:42:24.455 [DEBUG] [Thread-190234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:42:24.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:42:24.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:42:24.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:42:24.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:42:24.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:42:24.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:42:24.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:42:24.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:42:24.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:42:24.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.695949 -999.00  +13.80  26.44     48   +3.20 1 1 1 1 1   887    0 9.70 -31.40 ----- 29.0 26.4 173.8 41.6 15.9 -27.2 15.8 -26.1 16.7 -25.9 17.1 -27.4
2026-02-14T18:42:24.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:42:24.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:42:24.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.695949
2026-02-14T18:42:24.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:42:24.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:42:24.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:42:24.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:42:24.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:42:24.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:41:56', tmtdew=12.55, humidity=42.49, cloud=0.0, wind=43.99, temperature=14.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:42:09.994', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:42:24.481 [DEBUG] [Thread-190234] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:42:24.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-14T18:42:24.573 [DEBUG] [Thread-190237] [transport.py] [_log()] starting thread (client mode): 0xa57c1480
2026-02-14T18:42:24.573 [DEBUG] [Thread-190237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:42:24.588 [DEBUG] [Thread-190237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:42:24.588 [INFO] [Thread-190237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:42:24.599 [DEBUG] [Thread-190237] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:42:24.599 [DEBUG] [Thread-190237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:42:24.599 [DEBUG] [Thread-190237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:42:24.599 [DEBUG] [Thread-190237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:42:24.599 [DEBUG] [Thread-190237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:42:24.600 [DEBUG] [Thread-190237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:42:24.600 [DEBUG] [Thread-190237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:42:24.600 [DEBUG] [Thread-190237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:42:24.600 [DEBUG] [Thread-190237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:42:24.600 [DEBUG] [Thread-190237] [transport.py] [_log()] client lang: <none>
2026-02-14T18:42:24.600 [DEBUG] [Thread-190237] [transport.py] [_log()] server lang: <none>
2026-02-14T18:42:24.600 [DEBUG] [Thread-190237] [transport.py] [_log()] kex follows: False
2026-02-14T18:42:24.600 [DEBUG] [Thread-190237] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:42:24.600 [DEBUG] [Thread-190237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:42:24.600 [DEBUG] [Thread-190237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:42:24.600 [DEBUG] [Thread-190237] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:42:24.600 [DEBUG] [Thread-190237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:42:24.600 [DEBUG] [Thread-190237] [transport.py] [_log()] Compression: none
2026-02-14T18:42:24.600 [DEBUG] [Thread-190237] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:42:24.657 [DEBUG] [Thread-190237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:42:24.657 [DEBUG] [Thread-190237] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:42:24.658 [DEBUG] [Thread-190237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:42:24.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:42:24.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:42:24.713 [DEBUG] [Thread-190237] [transport.py] [_log()] userauth is OK
2026-02-14T18:42:24.713 [DEBUG] [Thread-190237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:42:24.713 [DEBUG] [Thread-190237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:42:24.713 [DEBUG] [Thread-190237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:42:24.713 [DEBUG] [Thread-190237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:42:24.732 [INFO] [Thread-190237] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:42:24.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T18:42:24.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:42:25.615 [DEBUG] [Thread-190237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:42:25.616 [DEBUG] [Thread-190237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:42:25.664 [DEBUG] [Thread-190237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:42:25.664 [DEBUG] [Thread-190237] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:42:25.673 [DEBUG] [Thread-190237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:42:25.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:42:25.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-14T18:42:25.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-14T18:42:25.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:42:25.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:42:25.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:42:25.710 [DEBUG] [Thread-190237] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:42:30.923 [DEBUG] [Thread-190239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:42:36.918 [DEBUG] [Thread-190240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:42:45.984 [DEBUG] [Thread-190241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:42:55.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:42:55.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:42:55.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-14T18:42:57.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 42, 32), 12.48, 42.71, 0.0, 40.67, 14.03, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:42:57.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:42:32
2026-02-14T18:42:58.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:42:58.283 [DEBUG] [Thread-190242] [transport.py] [_log()] starting thread (client mode): 0xa57725f0
2026-02-14T18:42:58.284 [DEBUG] [Thread-190242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:42:58.303 [DEBUG] [Thread-190242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:42:58.304 [INFO] [Thread-190242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:42:58.307 [DEBUG] [Thread-190242] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:42:58.307 [DEBUG] [Thread-190242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:42:58.307 [DEBUG] [Thread-190242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:42:58.307 [DEBUG] [Thread-190242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:42:58.307 [DEBUG] [Thread-190242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:42:58.307 [DEBUG] [Thread-190242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:42:58.307 [DEBUG] [Thread-190242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:42:58.307 [DEBUG] [Thread-190242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:42:58.307 [DEBUG] [Thread-190242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:42:58.307 [DEBUG] [Thread-190242] [transport.py] [_log()] client lang: <none>
2026-02-14T18:42:58.307 [DEBUG] [Thread-190242] [transport.py] [_log()] server lang: <none>
2026-02-14T18:42:58.307 [DEBUG] [Thread-190242] [transport.py] [_log()] kex follows: False
2026-02-14T18:42:58.307 [DEBUG] [Thread-190242] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:42:58.307 [DEBUG] [Thread-190242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:42:58.307 [DEBUG] [Thread-190242] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:42:58.307 [DEBUG] [Thread-190242] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:42:58.307 [DEBUG] [Thread-190242] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:42:58.307 [DEBUG] [Thread-190242] [transport.py] [_log()] Compression: none
2026-02-14T18:42:58.307 [DEBUG] [Thread-190242] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:42:58.324 [DEBUG] [Thread-190242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:42:58.324 [DEBUG] [Thread-190242] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:42:58.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:42:58.325 [DEBUG] [Thread-190242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:42:58.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:42:58.327 [DEBUG] [Thread-190242] [transport.py] [_log()] userauth is OK
2026-02-14T18:42:58.328 [DEBUG] [Thread-190242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:42:58.328 [DEBUG] [Thread-190242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:42:58.328 [DEBUG] [Thread-190242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:42:58.328 [DEBUG] [Thread-190242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:42:58.354 [INFO] [Thread-190242] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:42:58.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:42:58.949 [DEBUG] [Thread-190242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:42:58.949 [DEBUG] [Thread-190242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:42:58.950 [DEBUG] [Thread-190242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:42:58.990 [DEBUG] [Thread-190242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:42:58.990 [DEBUG] [Thread-190242] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:42:58.993 [DEBUG] [Thread-190242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:42:59.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:42:59.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:42:59.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:42:59.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:42:59.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:42:59.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:42:59.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:42:59.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:42:59.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:42:59.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.696296 -999.00  +13.80  31.82     49   +3.30 1 1 2 1 1   887    0 9.73 -31.38 ----- 35.3 31.8 159.0 37.5 15.9 -27.3 15.8 -27.3 16.6 -25.6 17.1 -27.2
2026-02-14T18:42:59.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:42:59.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:42:59.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.696296
2026-02-14T18:42:59.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:42:59.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:42:59.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:42:59.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:42:59.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:42:59.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:42:32', tmtdew=12.48, humidity=42.71, cloud=0.0, wind=40.67, temperature=14.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:42:39.974', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:42:59.020 [DEBUG] [Thread-190242] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:42:59.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-14T18:42:59.117 [DEBUG] [Thread-190245] [transport.py] [_log()] starting thread (client mode): 0xa2d02dd0
2026-02-14T18:42:59.117 [DEBUG] [Thread-190245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:42:59.136 [DEBUG] [Thread-190245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:42:59.136 [INFO] [Thread-190245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:42:59.143 [DEBUG] [Thread-190245] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:42:59.144 [DEBUG] [Thread-190245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:42:59.144 [DEBUG] [Thread-190245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:42:59.144 [DEBUG] [Thread-190245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:42:59.144 [DEBUG] [Thread-190245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:42:59.144 [DEBUG] [Thread-190245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:42:59.144 [DEBUG] [Thread-190245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:42:59.144 [DEBUG] [Thread-190245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:42:59.144 [DEBUG] [Thread-190245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:42:59.144 [DEBUG] [Thread-190245] [transport.py] [_log()] client lang: <none>
2026-02-14T18:42:59.144 [DEBUG] [Thread-190245] [transport.py] [_log()] server lang: <none>
2026-02-14T18:42:59.144 [DEBUG] [Thread-190245] [transport.py] [_log()] kex follows: False
2026-02-14T18:42:59.144 [DEBUG] [Thread-190245] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:42:59.144 [DEBUG] [Thread-190245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:42:59.144 [DEBUG] [Thread-190245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:42:59.145 [DEBUG] [Thread-190245] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:42:59.145 [DEBUG] [Thread-190245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:42:59.145 [DEBUG] [Thread-190245] [transport.py] [_log()] Compression: none
2026-02-14T18:42:59.145 [DEBUG] [Thread-190245] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:42:59.202 [DEBUG] [Thread-190245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:42:59.202 [DEBUG] [Thread-190245] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:42:59.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:42:59.203 [DEBUG] [Thread-190245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:42:59.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:42:59.259 [DEBUG] [Thread-190245] [transport.py] [_log()] userauth is OK
2026-02-14T18:42:59.259 [DEBUG] [Thread-190245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:42:59.259 [DEBUG] [Thread-190245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:42:59.259 [DEBUG] [Thread-190245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:42:59.259 [DEBUG] [Thread-190245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:42:59.278 [INFO] [Thread-190245] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:42:59.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-14T18:42:59.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:43:00.104 [DEBUG] [Thread-190245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:43:00.104 [DEBUG] [Thread-190245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:43:00.153 [DEBUG] [Thread-190245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:43:00.153 [DEBUG] [Thread-190245] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:43:00.162 [DEBUG] [Thread-190245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:43:00.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:43:00.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-14T18:43:00.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-14T18:43:00.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:43:00.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:43:00.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:43:00.198 [DEBUG] [Thread-190245] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:43:01.020 [DEBUG] [Thread-190247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:43:14.863 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:43:14.864 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:43:16.076 [DEBUG] [Thread-190248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:43:30.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:43:30.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:43:30.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-14T18:43:31.114 [DEBUG] [Thread-190249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:43:32.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 43, 7), 12.45, 42.79, 0.0, 41.25, 14.0, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:43:32.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:43:07
2026-02-14T18:43:32.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:43:32.670 [DEBUG] [Thread-190250] [transport.py] [_log()] starting thread (client mode): 0xa57c35e0
2026-02-14T18:43:32.670 [DEBUG] [Thread-190250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:43:32.689 [DEBUG] [Thread-190250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:43:32.689 [INFO] [Thread-190250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:43:32.692 [DEBUG] [Thread-190250] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:43:32.693 [DEBUG] [Thread-190250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:43:32.693 [DEBUG] [Thread-190250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:43:32.693 [DEBUG] [Thread-190250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:43:32.693 [DEBUG] [Thread-190250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:43:32.693 [DEBUG] [Thread-190250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:43:32.693 [DEBUG] [Thread-190250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:43:32.693 [DEBUG] [Thread-190250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:43:32.693 [DEBUG] [Thread-190250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:43:32.693 [DEBUG] [Thread-190250] [transport.py] [_log()] client lang: <none>
2026-02-14T18:43:32.693 [DEBUG] [Thread-190250] [transport.py] [_log()] server lang: <none>
2026-02-14T18:43:32.693 [DEBUG] [Thread-190250] [transport.py] [_log()] kex follows: False
2026-02-14T18:43:32.693 [DEBUG] [Thread-190250] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:43:32.693 [DEBUG] [Thread-190250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:43:32.694 [DEBUG] [Thread-190250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:43:32.694 [DEBUG] [Thread-190250] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:43:32.694 [DEBUG] [Thread-190250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:43:32.694 [DEBUG] [Thread-190250] [transport.py] [_log()] Compression: none
2026-02-14T18:43:32.694 [DEBUG] [Thread-190250] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:43:32.712 [DEBUG] [Thread-190250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:43:32.713 [DEBUG] [Thread-190250] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:43:32.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:43:32.714 [DEBUG] [Thread-190250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:43:32.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:43:32.716 [DEBUG] [Thread-190250] [transport.py] [_log()] userauth is OK
2026-02-14T18:43:32.716 [DEBUG] [Thread-190250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:43:32.716 [DEBUG] [Thread-190250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:43:32.716 [DEBUG] [Thread-190250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:43:32.716 [DEBUG] [Thread-190250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:43:32.753 [INFO] [Thread-190250] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:43:32.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:43:33.342 [DEBUG] [Thread-190250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:43:33.343 [DEBUG] [Thread-190250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:43:33.343 [DEBUG] [Thread-190250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:43:33.384 [DEBUG] [Thread-190250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:43:33.384 [DEBUG] [Thread-190250] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:43:33.387 [DEBUG] [Thread-190250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:43:33.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:43:33.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:43:33.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:43:33.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:43:33.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:43:33.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:43:33.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:43:33.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:43:33.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:43:33.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.696643 -999.00  +13.70  26.59     49   +3.20 1 1 1 1 1   887    0 9.64 -28.04 ----- 29.9 26.6 171.2 41.4 15.8 -27.4 15.7 -26.4 16.7 -25.9 17.1 -26.9
2026-02-14T18:43:33.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:43:33.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:43:33.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.696643
2026-02-14T18:43:33.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:43:33.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:43:33.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:43:33.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:43:33.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:43:33.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:43:07', tmtdew=12.45, humidity=42.79, cloud=0.0, wind=41.25, temperature=14.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:43:09.955', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:43:33.411 [DEBUG] [Thread-190250] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:43:33.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-14T18:43:33.506 [DEBUG] [Thread-190253] [transport.py] [_log()] starting thread (client mode): 0xa2db7eb0
2026-02-14T18:43:33.507 [DEBUG] [Thread-190253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:43:33.521 [DEBUG] [Thread-190253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:43:33.521 [INFO] [Thread-190253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:43:33.529 [DEBUG] [Thread-190253] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:43:33.529 [DEBUG] [Thread-190253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:43:33.529 [DEBUG] [Thread-190253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:43:33.529 [DEBUG] [Thread-190253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:43:33.529 [DEBUG] [Thread-190253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:43:33.529 [DEBUG] [Thread-190253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:43:33.529 [DEBUG] [Thread-190253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:43:33.530 [DEBUG] [Thread-190253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:43:33.530 [DEBUG] [Thread-190253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:43:33.530 [DEBUG] [Thread-190253] [transport.py] [_log()] client lang: <none>
2026-02-14T18:43:33.530 [DEBUG] [Thread-190253] [transport.py] [_log()] server lang: <none>
2026-02-14T18:43:33.530 [DEBUG] [Thread-190253] [transport.py] [_log()] kex follows: False
2026-02-14T18:43:33.530 [DEBUG] [Thread-190253] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:43:33.530 [DEBUG] [Thread-190253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:43:33.530 [DEBUG] [Thread-190253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:43:33.530 [DEBUG] [Thread-190253] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:43:33.530 [DEBUG] [Thread-190253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:43:33.530 [DEBUG] [Thread-190253] [transport.py] [_log()] Compression: none
2026-02-14T18:43:33.530 [DEBUG] [Thread-190253] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:43:33.588 [DEBUG] [Thread-190253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:43:33.589 [DEBUG] [Thread-190253] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:43:33.589 [DEBUG] [Thread-190253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:43:33.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:43:33.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:43:33.645 [DEBUG] [Thread-190253] [transport.py] [_log()] userauth is OK
2026-02-14T18:43:33.645 [DEBUG] [Thread-190253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:43:33.645 [DEBUG] [Thread-190253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:43:33.645 [DEBUG] [Thread-190253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:43:33.645 [DEBUG] [Thread-190253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:43:33.663 [INFO] [Thread-190253] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:43:33.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-14T18:43:33.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:43:34.498 [DEBUG] [Thread-190253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:43:34.498 [DEBUG] [Thread-190253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:43:34.547 [DEBUG] [Thread-190253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:43:34.547 [DEBUG] [Thread-190253] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:43:34.559 [DEBUG] [Thread-190253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:43:34.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:43:34.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-14T18:43:34.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-14T18:43:34.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:43:34.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:43:34.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:43:34.601 [DEBUG] [Thread-190253] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:43:36.962 [DEBUG] [Thread-190255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:43:46.153 [DEBUG] [Thread-190256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:44:01.210 [DEBUG] [Thread-190257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:44:04.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:44:04.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:44:04.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-14T18:44:06.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 43, 42), 12.91, 41.55, 0.0, 35.28, 14.6, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:44:06.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:43:42
2026-02-14T18:44:06.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:44:07.051 [DEBUG] [Thread-190258] [transport.py] [_log()] starting thread (client mode): 0xa57d5b70
2026-02-14T18:44:07.051 [DEBUG] [Thread-190258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:44:07.071 [DEBUG] [Thread-190258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:44:07.071 [INFO] [Thread-190258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:44:07.075 [DEBUG] [Thread-190258] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:44:07.075 [DEBUG] [Thread-190258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:44:07.075 [DEBUG] [Thread-190258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:44:07.075 [DEBUG] [Thread-190258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:44:07.075 [DEBUG] [Thread-190258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:44:07.075 [DEBUG] [Thread-190258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:44:07.075 [DEBUG] [Thread-190258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:44:07.075 [DEBUG] [Thread-190258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:44:07.075 [DEBUG] [Thread-190258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:44:07.075 [DEBUG] [Thread-190258] [transport.py] [_log()] client lang: <none>
2026-02-14T18:44:07.075 [DEBUG] [Thread-190258] [transport.py] [_log()] server lang: <none>
2026-02-14T18:44:07.075 [DEBUG] [Thread-190258] [transport.py] [_log()] kex follows: False
2026-02-14T18:44:07.075 [DEBUG] [Thread-190258] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:44:07.075 [DEBUG] [Thread-190258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:44:07.075 [DEBUG] [Thread-190258] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:44:07.075 [DEBUG] [Thread-190258] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:44:07.075 [DEBUG] [Thread-190258] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:44:07.075 [DEBUG] [Thread-190258] [transport.py] [_log()] Compression: none
2026-02-14T18:44:07.075 [DEBUG] [Thread-190258] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:44:07.094 [DEBUG] [Thread-190258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:44:07.095 [DEBUG] [Thread-190258] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:44:07.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:44:07.096 [DEBUG] [Thread-190258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:44:07.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:44:07.137 [DEBUG] [Thread-190258] [transport.py] [_log()] userauth is OK
2026-02-14T18:44:07.137 [DEBUG] [Thread-190258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:44:07.137 [DEBUG] [Thread-190258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:44:07.137 [DEBUG] [Thread-190258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:44:07.138 [DEBUG] [Thread-190258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:44:07.164 [INFO] [Thread-190258] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:44:07.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:44:07.784 [DEBUG] [Thread-190258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:44:07.784 [DEBUG] [Thread-190258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:44:07.785 [DEBUG] [Thread-190258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:44:07.825 [DEBUG] [Thread-190258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:44:07.825 [DEBUG] [Thread-190258] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:44:07.828 [DEBUG] [Thread-190258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:44:07.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:44:07.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:44:07.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:44:07.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:44:07.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:44:07.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:44:07.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:44:07.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:44:07.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:44:07.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.696991 -999.00  +13.80  16.29     49   +3.30 1 1 1 1 1   887    0 9.96 -27.00 ----- 19.8 16.3 162.4 34.4 15.8 -27.0 15.8 -26.1 16.7 -24.9 17.1 -27.3
2026-02-14T18:44:07.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:44:07.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:44:07.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.696991
2026-02-14T18:44:07.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:44:07.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:44:07.851 [DEBUG] [Thread-190258] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:44:07.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:44:07.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:44:07.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:44:07.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:43:42', tmtdew=12.91, humidity=41.55, cloud=0.0, wind=35.28, temperature=14.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:43:40.022', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:44:07.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-14T18:44:07.952 [DEBUG] [Thread-190261] [transport.py] [_log()] starting thread (client mode): 0xa57d52d0
2026-02-14T18:44:07.953 [DEBUG] [Thread-190261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:44:07.968 [DEBUG] [Thread-190261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:44:07.968 [INFO] [Thread-190261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:44:07.976 [DEBUG] [Thread-190261] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:44:07.976 [DEBUG] [Thread-190261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:44:07.976 [DEBUG] [Thread-190261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:44:07.976 [DEBUG] [Thread-190261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:44:07.976 [DEBUG] [Thread-190261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:44:07.976 [DEBUG] [Thread-190261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:44:07.976 [DEBUG] [Thread-190261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:44:07.976 [DEBUG] [Thread-190261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:44:07.977 [DEBUG] [Thread-190261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:44:07.977 [DEBUG] [Thread-190261] [transport.py] [_log()] client lang: <none>
2026-02-14T18:44:07.977 [DEBUG] [Thread-190261] [transport.py] [_log()] server lang: <none>
2026-02-14T18:44:07.977 [DEBUG] [Thread-190261] [transport.py] [_log()] kex follows: False
2026-02-14T18:44:07.977 [DEBUG] [Thread-190261] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:44:07.977 [DEBUG] [Thread-190261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:44:07.977 [DEBUG] [Thread-190261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:44:07.977 [DEBUG] [Thread-190261] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:44:07.977 [DEBUG] [Thread-190261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:44:07.977 [DEBUG] [Thread-190261] [transport.py] [_log()] Compression: none
2026-02-14T18:44:07.977 [DEBUG] [Thread-190261] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:44:08.041 [DEBUG] [Thread-190261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:44:08.042 [DEBUG] [Thread-190261] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:44:08.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:44:08.043 [DEBUG] [Thread-190261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:44:08.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:44:08.097 [DEBUG] [Thread-190261] [transport.py] [_log()] userauth is OK
2026-02-14T18:44:08.097 [DEBUG] [Thread-190261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:44:08.098 [DEBUG] [Thread-190261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:44:08.098 [DEBUG] [Thread-190261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:44:08.098 [DEBUG] [Thread-190261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:44:08.121 [INFO] [Thread-190261] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:44:08.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-14T18:44:08.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:44:08.941 [DEBUG] [Thread-190261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:44:08.941 [DEBUG] [Thread-190261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:44:08.989 [DEBUG] [Thread-190261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:44:08.989 [DEBUG] [Thread-190261] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:44:08.998 [DEBUG] [Thread-190261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:44:09.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:44:09.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-14T18:44:09.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-14T18:44:09.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:44:09.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:44:09.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:44:09.034 [DEBUG] [Thread-190261] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:44:15.008 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:44:15.009 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:44:16.245 [DEBUG] [Thread-190263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:44:31.300 [DEBUG] [Thread-190264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:44:36.995 [DEBUG] [Thread-190265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:44:39.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:44:39.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:44:39.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:44:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 44, 17), 12.43, 42.69, 0.0, 31.19, 14.02, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:44:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:44:17
2026-02-14T18:44:41.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:44:41.366 [DEBUG] [Thread-190266] [transport.py] [_log()] starting thread (client mode): 0xa2dedc60
2026-02-14T18:44:41.366 [DEBUG] [Thread-190266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:44:41.386 [DEBUG] [Thread-190266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:44:41.386 [INFO] [Thread-190266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:44:41.389 [DEBUG] [Thread-190266] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:44:41.390 [DEBUG] [Thread-190266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:44:41.390 [DEBUG] [Thread-190266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:44:41.390 [DEBUG] [Thread-190266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:44:41.390 [DEBUG] [Thread-190266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:44:41.390 [DEBUG] [Thread-190266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:44:41.390 [DEBUG] [Thread-190266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:44:41.390 [DEBUG] [Thread-190266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:44:41.390 [DEBUG] [Thread-190266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:44:41.390 [DEBUG] [Thread-190266] [transport.py] [_log()] client lang: <none>
2026-02-14T18:44:41.390 [DEBUG] [Thread-190266] [transport.py] [_log()] server lang: <none>
2026-02-14T18:44:41.390 [DEBUG] [Thread-190266] [transport.py] [_log()] kex follows: False
2026-02-14T18:44:41.390 [DEBUG] [Thread-190266] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:44:41.390 [DEBUG] [Thread-190266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:44:41.390 [DEBUG] [Thread-190266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:44:41.390 [DEBUG] [Thread-190266] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:44:41.390 [DEBUG] [Thread-190266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:44:41.390 [DEBUG] [Thread-190266] [transport.py] [_log()] Compression: none
2026-02-14T18:44:41.390 [DEBUG] [Thread-190266] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:44:41.398 [DEBUG] [Thread-190266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:44:41.399 [DEBUG] [Thread-190266] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:44:41.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:44:41.399 [DEBUG] [Thread-190266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:44:41.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:44:41.400 [DEBUG] [Thread-190266] [transport.py] [_log()] userauth is OK
2026-02-14T18:44:41.401 [DEBUG] [Thread-190266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:44:41.401 [DEBUG] [Thread-190266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:44:41.401 [DEBUG] [Thread-190266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:44:41.401 [DEBUG] [Thread-190266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:44:41.425 [INFO] [Thread-190266] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:44:41.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:44:42.039 [DEBUG] [Thread-190266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:44:42.040 [DEBUG] [Thread-190266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:44:42.040 [DEBUG] [Thread-190266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:44:42.080 [DEBUG] [Thread-190266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:44:42.081 [DEBUG] [Thread-190266] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:44:42.084 [DEBUG] [Thread-190266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:44:42.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:44:42.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:44:42.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:44:42.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:44:42.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:44:42.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:44:42.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:44:42.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:44:42.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:44:42.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.697338 -999.00  +13.80  19.58     48   +3.30 1 1 1 1 1   887    0 10.14 -26.56 ----- 21.7 19.6 153.2 29.1 15.9 -27.0 15.8 -26.4 16.8 -25.3 17.1 -27.2
2026-02-14T18:44:42.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:44:42.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:44:42.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.697338
2026-02-14T18:44:42.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:44:42.107 [DEBUG] [Thread-190266] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:44:42.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:44:42.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:44:42.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:44:42.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:44:42.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:44:17', tmtdew=12.43, humidity=42.69, cloud=0.0, wind=31.19, temperature=14.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:44:10.003', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:44:42.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T18:44:42.203 [DEBUG] [Thread-190269] [transport.py] [_log()] starting thread (client mode): 0xa2ded5d0
2026-02-14T18:44:42.204 [DEBUG] [Thread-190269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:44:42.218 [DEBUG] [Thread-190269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:44:42.218 [INFO] [Thread-190269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:44:42.226 [DEBUG] [Thread-190269] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:44:42.227 [DEBUG] [Thread-190269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:44:42.227 [DEBUG] [Thread-190269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:44:42.227 [DEBUG] [Thread-190269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:44:42.227 [DEBUG] [Thread-190269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:44:42.227 [DEBUG] [Thread-190269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:44:42.227 [DEBUG] [Thread-190269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:44:42.227 [DEBUG] [Thread-190269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:44:42.227 [DEBUG] [Thread-190269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:44:42.228 [DEBUG] [Thread-190269] [transport.py] [_log()] client lang: <none>
2026-02-14T18:44:42.228 [DEBUG] [Thread-190269] [transport.py] [_log()] server lang: <none>
2026-02-14T18:44:42.228 [DEBUG] [Thread-190269] [transport.py] [_log()] kex follows: False
2026-02-14T18:44:42.228 [DEBUG] [Thread-190269] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:44:42.228 [DEBUG] [Thread-190269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:44:42.228 [DEBUG] [Thread-190269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:44:42.228 [DEBUG] [Thread-190269] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:44:42.229 [DEBUG] [Thread-190269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:44:42.229 [DEBUG] [Thread-190269] [transport.py] [_log()] Compression: none
2026-02-14T18:44:42.229 [DEBUG] [Thread-190269] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:44:42.286 [DEBUG] [Thread-190269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:44:42.287 [DEBUG] [Thread-190269] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:44:42.288 [DEBUG] [Thread-190269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:44:42.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:44:42.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:44:42.343 [DEBUG] [Thread-190269] [transport.py] [_log()] userauth is OK
2026-02-14T18:44:42.343 [DEBUG] [Thread-190269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:44:42.344 [DEBUG] [Thread-190269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:44:42.344 [DEBUG] [Thread-190269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:44:42.344 [DEBUG] [Thread-190269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:44:42.363 [INFO] [Thread-190269] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:44:42.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T18:44:42.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:44:43.188 [DEBUG] [Thread-190269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:44:43.188 [DEBUG] [Thread-190269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:44:43.236 [DEBUG] [Thread-190269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:44:43.236 [DEBUG] [Thread-190269] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:44:43.245 [DEBUG] [Thread-190269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:44:43.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:44:43.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-14T18:44:43.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:44:43.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:44:43.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:44:43.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:44:43.279 [DEBUG] [Thread-190269] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:44:46.343 [DEBUG] [Thread-190271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:45:01.398 [DEBUG] [Thread-190272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:45:13.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:45:13.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:45:13.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-14T18:45:15.150 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:45:15.150 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:45:15.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 44, 54), 12.49, 42.69, 0.0, 35.55, 14.12, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:45:15.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:44:54
2026-02-14T18:45:15.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:45:15.688 [DEBUG] [Thread-190273] [transport.py] [_log()] starting thread (client mode): 0xa57d7f10
2026-02-14T18:45:15.688 [DEBUG] [Thread-190273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:45:15.710 [DEBUG] [Thread-190273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:45:15.710 [INFO] [Thread-190273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:45:15.713 [DEBUG] [Thread-190273] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:45:15.713 [DEBUG] [Thread-190273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:45:15.713 [DEBUG] [Thread-190273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:45:15.713 [DEBUG] [Thread-190273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:45:15.713 [DEBUG] [Thread-190273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:45:15.713 [DEBUG] [Thread-190273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:45:15.713 [DEBUG] [Thread-190273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:45:15.713 [DEBUG] [Thread-190273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:45:15.713 [DEBUG] [Thread-190273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:45:15.713 [DEBUG] [Thread-190273] [transport.py] [_log()] client lang: <none>
2026-02-14T18:45:15.713 [DEBUG] [Thread-190273] [transport.py] [_log()] server lang: <none>
2026-02-14T18:45:15.713 [DEBUG] [Thread-190273] [transport.py] [_log()] kex follows: False
2026-02-14T18:45:15.713 [DEBUG] [Thread-190273] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:45:15.713 [DEBUG] [Thread-190273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:45:15.714 [DEBUG] [Thread-190273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:45:15.714 [DEBUG] [Thread-190273] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:45:15.714 [DEBUG] [Thread-190273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:45:15.714 [DEBUG] [Thread-190273] [transport.py] [_log()] Compression: none
2026-02-14T18:45:15.714 [DEBUG] [Thread-190273] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:45:15.730 [DEBUG] [Thread-190273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:45:15.730 [DEBUG] [Thread-190273] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:45:15.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:45:15.731 [DEBUG] [Thread-190273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:45:15.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:45:15.733 [DEBUG] [Thread-190273] [transport.py] [_log()] userauth is OK
2026-02-14T18:45:15.733 [DEBUG] [Thread-190273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:45:15.734 [DEBUG] [Thread-190273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:45:15.734 [DEBUG] [Thread-190273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:45:15.734 [DEBUG] [Thread-190273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:45:15.751 [INFO] [Thread-190273] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:45:15.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:45:16.440 [DEBUG] [Thread-190275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:45:16.896 [DEBUG] [Thread-190273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:45:16.896 [DEBUG] [Thread-190273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:45:16.897 [DEBUG] [Thread-190273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:45:16.937 [DEBUG] [Thread-190273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:45:16.938 [DEBUG] [Thread-190273] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:45:16.941 [DEBUG] [Thread-190273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:45:16.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:45:16.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:45:16.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:45:16.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:45:16.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:45:16.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:45:16.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:45:16.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:45:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:45:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.697685 -999.00  +13.80  24.52     49   +3.30 1 1 1 1 1   887    0 9.83 -25.27 ----- 27.6 24.5 155.4 38.6 15.9 -27.4 15.8 -26.3 16.6 -25.5 17.0 -27.4
2026-02-14T18:45:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:45:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:45:16.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.697685
2026-02-14T18:45:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:45:16.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:45:16.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:45:16.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:45:16.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:45:16.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:44:54', tmtdew=12.49, humidity=42.69, cloud=0.0, wind=35.55, temperature=14.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:44:39.984', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:45:16.973 [DEBUG] [Thread-190273] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:45:17.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-14T18:45:17.065 [DEBUG] [Thread-190277] [transport.py] [_log()] starting thread (client mode): 0xa57727d0
2026-02-14T18:45:17.065 [DEBUG] [Thread-190277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:45:17.080 [DEBUG] [Thread-190277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:45:17.080 [INFO] [Thread-190277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:45:17.088 [DEBUG] [Thread-190277] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:45:17.088 [DEBUG] [Thread-190277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:45:17.088 [DEBUG] [Thread-190277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:45:17.088 [DEBUG] [Thread-190277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:45:17.088 [DEBUG] [Thread-190277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:45:17.088 [DEBUG] [Thread-190277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:45:17.088 [DEBUG] [Thread-190277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:45:17.088 [DEBUG] [Thread-190277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:45:17.088 [DEBUG] [Thread-190277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:45:17.088 [DEBUG] [Thread-190277] [transport.py] [_log()] client lang: <none>
2026-02-14T18:45:17.088 [DEBUG] [Thread-190277] [transport.py] [_log()] server lang: <none>
2026-02-14T18:45:17.088 [DEBUG] [Thread-190277] [transport.py] [_log()] kex follows: False
2026-02-14T18:45:17.088 [DEBUG] [Thread-190277] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:45:17.088 [DEBUG] [Thread-190277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:45:17.088 [DEBUG] [Thread-190277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:45:17.089 [DEBUG] [Thread-190277] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:45:17.089 [DEBUG] [Thread-190277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:45:17.089 [DEBUG] [Thread-190277] [transport.py] [_log()] Compression: none
2026-02-14T18:45:17.089 [DEBUG] [Thread-190277] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:45:17.147 [DEBUG] [Thread-190277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:45:17.147 [DEBUG] [Thread-190277] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:45:17.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:45:17.149 [DEBUG] [Thread-190277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:45:17.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:45:17.203 [DEBUG] [Thread-190277] [transport.py] [_log()] userauth is OK
2026-02-14T18:45:17.203 [DEBUG] [Thread-190277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:45:17.203 [DEBUG] [Thread-190277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:45:17.203 [DEBUG] [Thread-190277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:45:17.203 [DEBUG] [Thread-190277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:45:17.222 [INFO] [Thread-190277] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:45:17.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-14T18:45:17.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:45:18.099 [DEBUG] [Thread-190277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:45:18.100 [DEBUG] [Thread-190277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:45:18.148 [DEBUG] [Thread-190277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:45:18.148 [DEBUG] [Thread-190277] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:45:18.157 [DEBUG] [Thread-190277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:45:18.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:45:18.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:45:18.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:45:18.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:45:18.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:45:18.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:45:18.194 [DEBUG] [Thread-190277] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:45:31.477 [DEBUG] [Thread-190279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:45:37.028 [DEBUG] [Thread-190280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:45:46.528 [DEBUG] [Thread-190281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:45:48.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:45:48.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:45:48.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-14T18:45:50.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 45, 30), 12.49, 42.66, 0.0, 36.19, 14.05, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:45:50.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:45:30
2026-02-14T18:45:51.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:45:51.161 [DEBUG] [Thread-190282] [transport.py] [_log()] starting thread (client mode): 0xa2d794e0
2026-02-14T18:45:51.161 [DEBUG] [Thread-190282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:45:51.181 [DEBUG] [Thread-190282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:45:51.182 [INFO] [Thread-190282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:45:51.183 [DEBUG] [Thread-190282] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:45:51.183 [DEBUG] [Thread-190282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:45:51.183 [DEBUG] [Thread-190282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:45:51.184 [DEBUG] [Thread-190282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:45:51.184 [DEBUG] [Thread-190282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:45:51.184 [DEBUG] [Thread-190282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:45:51.184 [DEBUG] [Thread-190282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:45:51.184 [DEBUG] [Thread-190282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:45:51.184 [DEBUG] [Thread-190282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:45:51.184 [DEBUG] [Thread-190282] [transport.py] [_log()] client lang: <none>
2026-02-14T18:45:51.184 [DEBUG] [Thread-190282] [transport.py] [_log()] server lang: <none>
2026-02-14T18:45:51.184 [DEBUG] [Thread-190282] [transport.py] [_log()] kex follows: False
2026-02-14T18:45:51.184 [DEBUG] [Thread-190282] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:45:51.184 [DEBUG] [Thread-190282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:45:51.184 [DEBUG] [Thread-190282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:45:51.184 [DEBUG] [Thread-190282] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:45:51.185 [DEBUG] [Thread-190282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:45:51.185 [DEBUG] [Thread-190282] [transport.py] [_log()] Compression: none
2026-02-14T18:45:51.185 [DEBUG] [Thread-190282] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:45:51.194 [DEBUG] [Thread-190282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:45:51.194 [DEBUG] [Thread-190282] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:45:51.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:45:51.195 [DEBUG] [Thread-190282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:45:51.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:45:51.197 [DEBUG] [Thread-190282] [transport.py] [_log()] userauth is OK
2026-02-14T18:45:51.197 [DEBUG] [Thread-190282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:45:51.197 [DEBUG] [Thread-190282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:45:51.197 [DEBUG] [Thread-190282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:45:51.197 [DEBUG] [Thread-190282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:45:51.221 [INFO] [Thread-190282] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:45:51.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:45:51.875 [DEBUG] [Thread-190282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:45:51.875 [DEBUG] [Thread-190282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:45:51.876 [DEBUG] [Thread-190282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:45:51.916 [DEBUG] [Thread-190282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:45:51.917 [DEBUG] [Thread-190282] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:45:51.921 [DEBUG] [Thread-190282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:45:51.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:45:51.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:45:51.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:45:51.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:45:51.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:45:51.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:45:51.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:45:51.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:45:51.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:45:51.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.698032 -999.00  +13.80  24.17     48   +3.20 1 1 1 1 1   887    0 10.10 -24.57 ----- 31.8 24.2 165.6 37.4 15.8 -27.5 15.8 -27.0 16.6 -25.7 17.0 -27.7
2026-02-14T18:45:51.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:45:51.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:45:51.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.698032
2026-02-14T18:45:51.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:45:51.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:45:51.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:45:51.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:45:51.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:45:51.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:45:30', tmtdew=12.49, humidity=42.66, cloud=0.0, wind=36.19, temperature=14.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:45:09.965', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:45:51.949 [DEBUG] [Thread-190282] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:45:52.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-14T18:45:52.034 [DEBUG] [Thread-190285] [transport.py] [_log()] starting thread (client mode): 0xa5770e80
2026-02-14T18:45:52.035 [DEBUG] [Thread-190285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:45:52.050 [DEBUG] [Thread-190285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:45:52.050 [INFO] [Thread-190285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:45:52.058 [DEBUG] [Thread-190285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:45:52.058 [DEBUG] [Thread-190285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:45:52.058 [DEBUG] [Thread-190285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:45:52.058 [DEBUG] [Thread-190285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:45:52.058 [DEBUG] [Thread-190285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:45:52.059 [DEBUG] [Thread-190285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:45:52.059 [DEBUG] [Thread-190285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:45:52.059 [DEBUG] [Thread-190285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:45:52.059 [DEBUG] [Thread-190285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:45:52.059 [DEBUG] [Thread-190285] [transport.py] [_log()] client lang: <none>
2026-02-14T18:45:52.059 [DEBUG] [Thread-190285] [transport.py] [_log()] server lang: <none>
2026-02-14T18:45:52.059 [DEBUG] [Thread-190285] [transport.py] [_log()] kex follows: False
2026-02-14T18:45:52.059 [DEBUG] [Thread-190285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:45:52.059 [DEBUG] [Thread-190285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:45:52.059 [DEBUG] [Thread-190285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:45:52.059 [DEBUG] [Thread-190285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:45:52.059 [DEBUG] [Thread-190285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:45:52.059 [DEBUG] [Thread-190285] [transport.py] [_log()] Compression: none
2026-02-14T18:45:52.059 [DEBUG] [Thread-190285] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:45:52.115 [DEBUG] [Thread-190285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:45:52.116 [DEBUG] [Thread-190285] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:45:52.116 [DEBUG] [Thread-190285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:45:52.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:45:52.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:45:52.171 [DEBUG] [Thread-190285] [transport.py] [_log()] userauth is OK
2026-02-14T18:45:52.172 [DEBUG] [Thread-190285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:45:52.172 [DEBUG] [Thread-190285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:45:52.172 [DEBUG] [Thread-190285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:45:52.172 [DEBUG] [Thread-190285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:45:52.191 [INFO] [Thread-190285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:45:52.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-14T18:45:52.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:45:53.018 [DEBUG] [Thread-190285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:45:53.019 [DEBUG] [Thread-190285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:45:53.068 [DEBUG] [Thread-190285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:45:53.068 [DEBUG] [Thread-190285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:45:53.077 [DEBUG] [Thread-190285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:45:53.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:45:53.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-14T18:45:53.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-14T18:45:53.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:45:53.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:45:53.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:45:53.110 [DEBUG] [Thread-190285] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:46:01.566 [DEBUG] [Thread-190287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:46:15.290 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:46:15.291 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:46:16.619 [DEBUG] [Thread-190288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:46:23.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:46:23.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:46:23.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-14T18:46:25.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 46, 7), 12.44, 42.81, 0.0, 38.83, 14.07, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:46:25.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:46:07
2026-02-14T18:46:25.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:46:25.548 [DEBUG] [Thread-190289] [transport.py] [_log()] starting thread (client mode): 0xa2d7aa10
2026-02-14T18:46:25.548 [DEBUG] [Thread-190289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:46:25.569 [DEBUG] [Thread-190289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:46:25.569 [INFO] [Thread-190289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:46:25.571 [DEBUG] [Thread-190289] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:46:25.572 [DEBUG] [Thread-190289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:46:25.572 [DEBUG] [Thread-190289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:46:25.572 [DEBUG] [Thread-190289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:46:25.572 [DEBUG] [Thread-190289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:46:25.572 [DEBUG] [Thread-190289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:46:25.572 [DEBUG] [Thread-190289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:46:25.572 [DEBUG] [Thread-190289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:46:25.572 [DEBUG] [Thread-190289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:46:25.572 [DEBUG] [Thread-190289] [transport.py] [_log()] client lang: <none>
2026-02-14T18:46:25.572 [DEBUG] [Thread-190289] [transport.py] [_log()] server lang: <none>
2026-02-14T18:46:25.572 [DEBUG] [Thread-190289] [transport.py] [_log()] kex follows: False
2026-02-14T18:46:25.572 [DEBUG] [Thread-190289] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:46:25.572 [DEBUG] [Thread-190289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:46:25.572 [DEBUG] [Thread-190289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:46:25.572 [DEBUG] [Thread-190289] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:46:25.572 [DEBUG] [Thread-190289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:46:25.572 [DEBUG] [Thread-190289] [transport.py] [_log()] Compression: none
2026-02-14T18:46:25.572 [DEBUG] [Thread-190289] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:46:25.589 [DEBUG] [Thread-190289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:46:25.590 [DEBUG] [Thread-190289] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:46:25.590 [DEBUG] [Thread-190289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:46:25.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:46:25.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:46:25.592 [DEBUG] [Thread-190289] [transport.py] [_log()] userauth is OK
2026-02-14T18:46:25.592 [DEBUG] [Thread-190289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:46:25.592 [DEBUG] [Thread-190289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:46:25.592 [DEBUG] [Thread-190289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:46:25.592 [DEBUG] [Thread-190289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:46:25.628 [INFO] [Thread-190289] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:46:25.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:46:26.271 [DEBUG] [Thread-190289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:46:26.272 [DEBUG] [Thread-190289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:46:26.272 [DEBUG] [Thread-190289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:46:26.312 [DEBUG] [Thread-190289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:46:26.312 [DEBUG] [Thread-190289] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:46:26.315 [DEBUG] [Thread-190289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:46:26.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:46:26.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:46:26.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:46:26.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:46:26.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:46:26.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:46:26.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:46:26.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:46:26.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:46:26.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.698379 -999.00  +13.80  29.12     49   +3.30 1 1 1 1 1   887    0 9.90 -24.23 ----- 32.4 29.1 153.4 38.8 15.8 -27.5 15.8 -26.4 16.6 -25.8 17.0 -28.0
2026-02-14T18:46:26.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:46:26.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:46:26.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.698379
2026-02-14T18:46:26.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:46:26.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:46:26.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:46:26.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:46:26.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:46:26.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:46:07', tmtdew=12.44, humidity=42.81, cloud=0.0, wind=38.83, temperature=14.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:45:39.946', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:46:26.338 [DEBUG] [Thread-190289] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:46:26.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-14T18:46:26.434 [DEBUG] [Thread-190292] [transport.py] [_log()] starting thread (client mode): 0xa2d7b4f0
2026-02-14T18:46:26.434 [DEBUG] [Thread-190292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:46:26.449 [DEBUG] [Thread-190292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:46:26.449 [INFO] [Thread-190292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:46:26.457 [DEBUG] [Thread-190292] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:46:26.457 [DEBUG] [Thread-190292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:46:26.457 [DEBUG] [Thread-190292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:46:26.457 [DEBUG] [Thread-190292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:46:26.457 [DEBUG] [Thread-190292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:46:26.457 [DEBUG] [Thread-190292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:46:26.457 [DEBUG] [Thread-190292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:46:26.457 [DEBUG] [Thread-190292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:46:26.457 [DEBUG] [Thread-190292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:46:26.457 [DEBUG] [Thread-190292] [transport.py] [_log()] client lang: <none>
2026-02-14T18:46:26.457 [DEBUG] [Thread-190292] [transport.py] [_log()] server lang: <none>
2026-02-14T18:46:26.457 [DEBUG] [Thread-190292] [transport.py] [_log()] kex follows: False
2026-02-14T18:46:26.457 [DEBUG] [Thread-190292] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:46:26.457 [DEBUG] [Thread-190292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:46:26.457 [DEBUG] [Thread-190292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:46:26.458 [DEBUG] [Thread-190292] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:46:26.458 [DEBUG] [Thread-190292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:46:26.458 [DEBUG] [Thread-190292] [transport.py] [_log()] Compression: none
2026-02-14T18:46:26.458 [DEBUG] [Thread-190292] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:46:26.517 [DEBUG] [Thread-190292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:46:26.517 [DEBUG] [Thread-190292] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:46:26.518 [DEBUG] [Thread-190292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:46:26.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:46:26.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:46:26.572 [DEBUG] [Thread-190292] [transport.py] [_log()] userauth is OK
2026-02-14T18:46:26.572 [DEBUG] [Thread-190292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:46:26.572 [DEBUG] [Thread-190292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:46:26.572 [DEBUG] [Thread-190292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:46:26.572 [DEBUG] [Thread-190292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:46:26.594 [INFO] [Thread-190292] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:46:26.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-14T18:46:26.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:46:27.394 [DEBUG] [Thread-190292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:46:27.394 [DEBUG] [Thread-190292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:46:27.442 [DEBUG] [Thread-190292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:46:27.442 [DEBUG] [Thread-190292] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:46:27.452 [DEBUG] [Thread-190292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:46:27.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:46:27.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:46:27.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-14T18:46:27.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:46:27.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:46:27.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:46:27.499 [DEBUG] [Thread-190292] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:46:31.651 [DEBUG] [Thread-190294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:46:37.062 [DEBUG] [Thread-190295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:46:46.704 [DEBUG] [Thread-190296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:46:57.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:46:57.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:46:57.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:46:59.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 46, 42), 12.82, 41.78, 0.0, 44.03, 14.54, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:46:59.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:46:42
2026-02-14T18:47:00.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:47:00.205 [DEBUG] [Thread-190297] [transport.py] [_log()] starting thread (client mode): 0xa2d02500
2026-02-14T18:47:00.205 [DEBUG] [Thread-190297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:47:00.226 [DEBUG] [Thread-190297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:47:00.226 [INFO] [Thread-190297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:47:00.230 [DEBUG] [Thread-190297] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:47:00.230 [DEBUG] [Thread-190297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:47:00.230 [DEBUG] [Thread-190297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:47:00.230 [DEBUG] [Thread-190297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:47:00.230 [DEBUG] [Thread-190297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:47:00.230 [DEBUG] [Thread-190297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:47:00.230 [DEBUG] [Thread-190297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:47:00.230 [DEBUG] [Thread-190297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:47:00.230 [DEBUG] [Thread-190297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:47:00.230 [DEBUG] [Thread-190297] [transport.py] [_log()] client lang: <none>
2026-02-14T18:47:00.230 [DEBUG] [Thread-190297] [transport.py] [_log()] server lang: <none>
2026-02-14T18:47:00.230 [DEBUG] [Thread-190297] [transport.py] [_log()] kex follows: False
2026-02-14T18:47:00.230 [DEBUG] [Thread-190297] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:47:00.230 [DEBUG] [Thread-190297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:47:00.230 [DEBUG] [Thread-190297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:47:00.230 [DEBUG] [Thread-190297] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:47:00.230 [DEBUG] [Thread-190297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:47:00.230 [DEBUG] [Thread-190297] [transport.py] [_log()] Compression: none
2026-02-14T18:47:00.230 [DEBUG] [Thread-190297] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:47:00.248 [DEBUG] [Thread-190297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:47:00.249 [DEBUG] [Thread-190297] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:47:00.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:47:00.250 [DEBUG] [Thread-190297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:47:00.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:47:00.252 [DEBUG] [Thread-190297] [transport.py] [_log()] userauth is OK
2026-02-14T18:47:00.252 [DEBUG] [Thread-190297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:47:00.253 [DEBUG] [Thread-190297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:47:00.253 [DEBUG] [Thread-190297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:47:00.253 [DEBUG] [Thread-190297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:47:00.277 [INFO] [Thread-190297] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:47:00.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:47:01.030 [DEBUG] [Thread-190297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:47:01.039 [DEBUG] [Thread-190297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:47:01.040 [DEBUG] [Thread-190297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:47:01.072 [DEBUG] [Thread-190297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:47:01.072 [DEBUG] [Thread-190297] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:47:01.075 [DEBUG] [Thread-190297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:47:01.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:47:01.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:47:01.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:47:01.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:47:01.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:47:01.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:47:01.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:47:01.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:47:01.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:47:01.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.699074 -999.00  +13.60  30.67     49   +3.30 1 1 2 1 1   887    0 9.91 -23.21 ----- 25.8 30.7 148.8 44.7 15.7 -27.5 15.7 -26.6 16.5 -25.9 16.9 -27.9
2026-02-14T18:47:01.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:47:01.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:47:01.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.699074
2026-02-14T18:47:01.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:47:01.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:47:01.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:47:01.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:47:01.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:47:01.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:46:42', tmtdew=12.82, humidity=41.78, cloud=0.0, wind=44.03, temperature=14.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:46:39.994', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:47:01.107 [DEBUG] [Thread-190297] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:47:01.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T18:47:01.202 [DEBUG] [Thread-190300] [transport.py] [_log()] starting thread (client mode): 0xa57d6e90
2026-02-14T18:47:01.202 [DEBUG] [Thread-190300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:47:01.216 [DEBUG] [Thread-190300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:47:01.217 [INFO] [Thread-190300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:47:01.224 [DEBUG] [Thread-190300] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:47:01.224 [DEBUG] [Thread-190300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:47:01.225 [DEBUG] [Thread-190300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:47:01.225 [DEBUG] [Thread-190300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:47:01.225 [DEBUG] [Thread-190300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:47:01.225 [DEBUG] [Thread-190300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:47:01.225 [DEBUG] [Thread-190300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:47:01.225 [DEBUG] [Thread-190300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:47:01.225 [DEBUG] [Thread-190300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:47:01.225 [DEBUG] [Thread-190300] [transport.py] [_log()] client lang: <none>
2026-02-14T18:47:01.225 [DEBUG] [Thread-190300] [transport.py] [_log()] server lang: <none>
2026-02-14T18:47:01.225 [DEBUG] [Thread-190300] [transport.py] [_log()] kex follows: False
2026-02-14T18:47:01.225 [DEBUG] [Thread-190300] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:47:01.225 [DEBUG] [Thread-190300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:47:01.225 [DEBUG] [Thread-190300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:47:01.225 [DEBUG] [Thread-190300] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:47:01.225 [DEBUG] [Thread-190300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:47:01.225 [DEBUG] [Thread-190300] [transport.py] [_log()] Compression: none
2026-02-14T18:47:01.225 [DEBUG] [Thread-190300] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:47:01.286 [DEBUG] [Thread-190300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:47:01.286 [DEBUG] [Thread-190300] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:47:01.287 [DEBUG] [Thread-190300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:47:01.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:47:01.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:47:01.342 [DEBUG] [Thread-190300] [transport.py] [_log()] userauth is OK
2026-02-14T18:47:01.342 [DEBUG] [Thread-190300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:47:01.342 [DEBUG] [Thread-190300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:47:01.342 [DEBUG] [Thread-190300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:47:01.342 [DEBUG] [Thread-190300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:47:01.361 [INFO] [Thread-190300] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:47:01.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-14T18:47:01.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:47:01.745 [DEBUG] [Thread-190302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:47:02.250 [DEBUG] [Thread-190300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:47:02.250 [DEBUG] [Thread-190300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:47:02.299 [DEBUG] [Thread-190300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:47:02.299 [DEBUG] [Thread-190300] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:47:02.308 [DEBUG] [Thread-190300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:47:02.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:47:02.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-14T18:47:02.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-14T18:47:02.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:47:02.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:47:02.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:47:02.342 [DEBUG] [Thread-190300] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:47:15.433 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:47:15.434 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:47:16.804 [DEBUG] [Thread-190303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:47:31.841 [DEBUG] [Thread-190304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:47:32.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:47:32.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:47:32.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-14T18:47:34.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 47, 18), 12.25, 43.55, 0.0, 43.46, 13.94, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:47:34.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:47:18
2026-02-14T18:47:34.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:47:35.139 [DEBUG] [Thread-190305] [transport.py] [_log()] starting thread (client mode): 0xa2d6f5b0
2026-02-14T18:47:35.139 [DEBUG] [Thread-190305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:47:35.149 [DEBUG] [Thread-190305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:47:35.149 [INFO] [Thread-190305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:47:35.152 [DEBUG] [Thread-190305] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:47:35.152 [DEBUG] [Thread-190305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:47:35.152 [DEBUG] [Thread-190305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:47:35.152 [DEBUG] [Thread-190305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:47:35.152 [DEBUG] [Thread-190305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:47:35.153 [DEBUG] [Thread-190305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:47:35.153 [DEBUG] [Thread-190305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:47:35.153 [DEBUG] [Thread-190305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:47:35.153 [DEBUG] [Thread-190305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:47:35.153 [DEBUG] [Thread-190305] [transport.py] [_log()] client lang: <none>
2026-02-14T18:47:35.153 [DEBUG] [Thread-190305] [transport.py] [_log()] server lang: <none>
2026-02-14T18:47:35.153 [DEBUG] [Thread-190305] [transport.py] [_log()] kex follows: False
2026-02-14T18:47:35.153 [DEBUG] [Thread-190305] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:47:35.153 [DEBUG] [Thread-190305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:47:35.153 [DEBUG] [Thread-190305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:47:35.153 [DEBUG] [Thread-190305] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:47:35.153 [DEBUG] [Thread-190305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:47:35.153 [DEBUG] [Thread-190305] [transport.py] [_log()] Compression: none
2026-02-14T18:47:35.153 [DEBUG] [Thread-190305] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:47:35.170 [DEBUG] [Thread-190305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:47:35.171 [DEBUG] [Thread-190305] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:47:35.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:47:35.172 [DEBUG] [Thread-190305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:47:35.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:47:35.174 [DEBUG] [Thread-190305] [transport.py] [_log()] userauth is OK
2026-02-14T18:47:35.174 [DEBUG] [Thread-190305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:47:35.174 [DEBUG] [Thread-190305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:47:35.175 [DEBUG] [Thread-190305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:47:35.175 [DEBUG] [Thread-190305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:47:35.199 [INFO] [Thread-190305] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:47:35.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:47:35.833 [DEBUG] [Thread-190305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:47:35.833 [DEBUG] [Thread-190305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:47:35.834 [DEBUG] [Thread-190305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:47:35.875 [DEBUG] [Thread-190305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:47:35.875 [DEBUG] [Thread-190305] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:47:35.878 [DEBUG] [Thread-190305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:47:35.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:47:35.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:47:35.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:47:35.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:47:35.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:47:35.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:47:35.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:47:35.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:47:35.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:47:35.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.699421 -999.00  +13.60  26.68     50   +3.30 1 1 1 1 1   887    0 9.91 -21.81 ----- 35.9 26.7 145.5 38.3 15.6 -27.7 15.6 -26.5 16.4 -26.1 16.8 -27.4
2026-02-14T18:47:35.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:47:35.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:47:35.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.699421
2026-02-14T18:47:35.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:47:35.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:47:35.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:47:35.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:47:35.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:47:35.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:47:18', tmtdew=12.25, humidity=43.55, cloud=0.0, wind=43.46, temperature=13.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:47:09.974', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:47:35.906 [DEBUG] [Thread-190305] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:47:35.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-14T18:47:36.001 [DEBUG] [Thread-190308] [transport.py] [_log()] starting thread (client mode): 0xa57b2320
2026-02-14T18:47:36.001 [DEBUG] [Thread-190308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:47:36.016 [DEBUG] [Thread-190308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:47:36.016 [INFO] [Thread-190308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:47:36.023 [DEBUG] [Thread-190308] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:47:36.024 [DEBUG] [Thread-190308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:47:36.024 [DEBUG] [Thread-190308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:47:36.024 [DEBUG] [Thread-190308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:47:36.024 [DEBUG] [Thread-190308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:47:36.024 [DEBUG] [Thread-190308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:47:36.024 [DEBUG] [Thread-190308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:47:36.025 [DEBUG] [Thread-190308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:47:36.025 [DEBUG] [Thread-190308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:47:36.025 [DEBUG] [Thread-190308] [transport.py] [_log()] client lang: <none>
2026-02-14T18:47:36.025 [DEBUG] [Thread-190308] [transport.py] [_log()] server lang: <none>
2026-02-14T18:47:36.025 [DEBUG] [Thread-190308] [transport.py] [_log()] kex follows: False
2026-02-14T18:47:36.025 [DEBUG] [Thread-190308] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:47:36.025 [DEBUG] [Thread-190308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:47:36.025 [DEBUG] [Thread-190308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:47:36.026 [DEBUG] [Thread-190308] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:47:36.026 [DEBUG] [Thread-190308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:47:36.026 [DEBUG] [Thread-190308] [transport.py] [_log()] Compression: none
2026-02-14T18:47:36.026 [DEBUG] [Thread-190308] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:47:36.083 [DEBUG] [Thread-190308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:47:36.084 [DEBUG] [Thread-190308] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:47:36.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:47:36.085 [DEBUG] [Thread-190308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:47:36.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:47:36.142 [DEBUG] [Thread-190308] [transport.py] [_log()] userauth is OK
2026-02-14T18:47:36.143 [DEBUG] [Thread-190308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:47:36.143 [DEBUG] [Thread-190308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:47:36.143 [DEBUG] [Thread-190308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:47:36.143 [DEBUG] [Thread-190308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:47:36.161 [INFO] [Thread-190308] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:47:36.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T18:47:36.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:47:36.993 [DEBUG] [Thread-190308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:47:36.993 [DEBUG] [Thread-190308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:47:37.040 [DEBUG] [Thread-190308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:47:37.041 [DEBUG] [Thread-190308] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:47:37.050 [DEBUG] [Thread-190308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:47:37.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:47:37.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:47:37.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-14T18:47:37.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:47:37.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:47:37.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:47:37.084 [DEBUG] [Thread-190308] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:47:37.108 [DEBUG] [Thread-190310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:47:46.874 [DEBUG] [Thread-190311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:48:01.936 [DEBUG] [Thread-190312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:48:07.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:48:07.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:48:07.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:48:09.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 47, 53), 12.12, 43.65, 0.0, 39.75, 13.9, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:48:09.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:47:53
2026-02-14T18:48:09.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:48:09.553 [DEBUG] [Thread-190313] [transport.py] [_log()] starting thread (client mode): 0xa2d6c700
2026-02-14T18:48:09.554 [DEBUG] [Thread-190313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:48:09.573 [DEBUG] [Thread-190313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:48:09.574 [INFO] [Thread-190313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:48:09.577 [DEBUG] [Thread-190313] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:48:09.577 [DEBUG] [Thread-190313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:48:09.577 [DEBUG] [Thread-190313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:48:09.577 [DEBUG] [Thread-190313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:48:09.577 [DEBUG] [Thread-190313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:48:09.577 [DEBUG] [Thread-190313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:48:09.577 [DEBUG] [Thread-190313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:48:09.577 [DEBUG] [Thread-190313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:48:09.577 [DEBUG] [Thread-190313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:48:09.577 [DEBUG] [Thread-190313] [transport.py] [_log()] client lang: <none>
2026-02-14T18:48:09.577 [DEBUG] [Thread-190313] [transport.py] [_log()] server lang: <none>
2026-02-14T18:48:09.577 [DEBUG] [Thread-190313] [transport.py] [_log()] kex follows: False
2026-02-14T18:48:09.577 [DEBUG] [Thread-190313] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:48:09.577 [DEBUG] [Thread-190313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:48:09.577 [DEBUG] [Thread-190313] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:48:09.577 [DEBUG] [Thread-190313] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:48:09.577 [DEBUG] [Thread-190313] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:48:09.577 [DEBUG] [Thread-190313] [transport.py] [_log()] Compression: none
2026-02-14T18:48:09.577 [DEBUG] [Thread-190313] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:48:09.595 [DEBUG] [Thread-190313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:48:09.595 [DEBUG] [Thread-190313] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:48:09.596 [DEBUG] [Thread-190313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:48:09.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:48:09.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:48:09.598 [DEBUG] [Thread-190313] [transport.py] [_log()] userauth is OK
2026-02-14T18:48:09.599 [DEBUG] [Thread-190313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:48:09.599 [DEBUG] [Thread-190313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:48:09.599 [DEBUG] [Thread-190313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:48:09.599 [DEBUG] [Thread-190313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:48:09.613 [INFO] [Thread-190313] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:48:09.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:48:10.243 [DEBUG] [Thread-190313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:48:10.243 [DEBUG] [Thread-190313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:48:10.243 [DEBUG] [Thread-190313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:48:10.284 [DEBUG] [Thread-190313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:48:10.284 [DEBUG] [Thread-190313] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:48:10.287 [DEBUG] [Thread-190313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:48:10.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:48:10.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:48:10.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:48:10.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:48:10.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:48:10.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:48:10.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:48:10.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:48:10.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:48:10.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.699768 -999.00  +13.50  29.23     50   +3.40 1 1 1 1 1   887    0 9.72 -22.62 ----- 27.0 29.2 142.8 45.7 15.7 -27.5 15.6 -26.5 16.4 -25.6 16.8 -27.7
2026-02-14T18:48:10.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:48:10.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:48:10.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.699768
2026-02-14T18:48:10.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:48:10.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:48:10.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:48:10.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:48:10.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:48:10.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:47:53', tmtdew=12.12, humidity=43.65, cloud=0.0, wind=39.75, temperature=13.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:47:39.955', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:48:10.307 [DEBUG] [Thread-190313] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:48:10.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-14T18:48:10.402 [DEBUG] [Thread-190316] [transport.py] [_log()] starting thread (client mode): 0xa2d6fa00
2026-02-14T18:48:10.402 [DEBUG] [Thread-190316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:48:10.417 [DEBUG] [Thread-190316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:48:10.417 [INFO] [Thread-190316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:48:10.425 [DEBUG] [Thread-190316] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:48:10.425 [DEBUG] [Thread-190316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:48:10.425 [DEBUG] [Thread-190316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:48:10.425 [DEBUG] [Thread-190316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:48:10.425 [DEBUG] [Thread-190316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:48:10.425 [DEBUG] [Thread-190316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:48:10.425 [DEBUG] [Thread-190316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:48:10.425 [DEBUG] [Thread-190316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:48:10.425 [DEBUG] [Thread-190316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:48:10.425 [DEBUG] [Thread-190316] [transport.py] [_log()] client lang: <none>
2026-02-14T18:48:10.425 [DEBUG] [Thread-190316] [transport.py] [_log()] server lang: <none>
2026-02-14T18:48:10.426 [DEBUG] [Thread-190316] [transport.py] [_log()] kex follows: False
2026-02-14T18:48:10.426 [DEBUG] [Thread-190316] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:48:10.426 [DEBUG] [Thread-190316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:48:10.426 [DEBUG] [Thread-190316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:48:10.426 [DEBUG] [Thread-190316] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:48:10.426 [DEBUG] [Thread-190316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:48:10.426 [DEBUG] [Thread-190316] [transport.py] [_log()] Compression: none
2026-02-14T18:48:10.426 [DEBUG] [Thread-190316] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:48:10.483 [DEBUG] [Thread-190316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:48:10.484 [DEBUG] [Thread-190316] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:48:10.484 [DEBUG] [Thread-190316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:48:10.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:48:10.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:48:10.539 [DEBUG] [Thread-190316] [transport.py] [_log()] userauth is OK
2026-02-14T18:48:10.540 [DEBUG] [Thread-190316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:48:10.540 [DEBUG] [Thread-190316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:48:10.540 [DEBUG] [Thread-190316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:48:10.540 [DEBUG] [Thread-190316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:48:10.565 [INFO] [Thread-190316] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:48:10.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T18:48:10.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:48:11.397 [DEBUG] [Thread-190316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:48:11.397 [DEBUG] [Thread-190316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:48:11.445 [DEBUG] [Thread-190316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:48:11.445 [DEBUG] [Thread-190316] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:48:11.455 [DEBUG] [Thread-190316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:48:11.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:48:11.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:48:11.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:48:11.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:48:11.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:48:11.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:48:11.491 [DEBUG] [Thread-190316] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:48:15.574 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:48:15.576 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:48:16.974 [DEBUG] [Thread-190318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:48:32.033 [DEBUG] [Thread-190319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:48:37.142 [DEBUG] [Thread-190320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:48:41.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:48:41.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:48:41.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-14T18:48:43.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 48, 28), 12.11, 43.67, 0.0, 42.31, 13.82, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:48:43.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:48:28
2026-02-14T18:48:43.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:48:43.949 [DEBUG] [Thread-190321] [transport.py] [_log()] starting thread (client mode): 0xa2d6ff40
2026-02-14T18:48:43.949 [DEBUG] [Thread-190321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:48:43.969 [DEBUG] [Thread-190321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:48:43.970 [INFO] [Thread-190321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:48:43.972 [DEBUG] [Thread-190321] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:48:43.972 [DEBUG] [Thread-190321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:48:43.973 [DEBUG] [Thread-190321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:48:43.973 [DEBUG] [Thread-190321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:48:43.973 [DEBUG] [Thread-190321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:48:43.973 [DEBUG] [Thread-190321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:48:43.973 [DEBUG] [Thread-190321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:48:43.973 [DEBUG] [Thread-190321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:48:43.973 [DEBUG] [Thread-190321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:48:43.973 [DEBUG] [Thread-190321] [transport.py] [_log()] client lang: <none>
2026-02-14T18:48:43.973 [DEBUG] [Thread-190321] [transport.py] [_log()] server lang: <none>
2026-02-14T18:48:43.973 [DEBUG] [Thread-190321] [transport.py] [_log()] kex follows: False
2026-02-14T18:48:43.973 [DEBUG] [Thread-190321] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:48:43.973 [DEBUG] [Thread-190321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:48:43.973 [DEBUG] [Thread-190321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:48:43.973 [DEBUG] [Thread-190321] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:48:43.973 [DEBUG] [Thread-190321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:48:43.974 [DEBUG] [Thread-190321] [transport.py] [_log()] Compression: none
2026-02-14T18:48:43.974 [DEBUG] [Thread-190321] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:48:43.994 [DEBUG] [Thread-190321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:48:43.994 [DEBUG] [Thread-190321] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:48:43.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:48:43.995 [DEBUG] [Thread-190321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:48:43.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:48:43.997 [DEBUG] [Thread-190321] [transport.py] [_log()] userauth is OK
2026-02-14T18:48:43.998 [DEBUG] [Thread-190321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:48:43.998 [DEBUG] [Thread-190321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:48:43.998 [DEBUG] [Thread-190321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:48:43.998 [DEBUG] [Thread-190321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:48:44.034 [INFO] [Thread-190321] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:48:44.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:48:44.670 [DEBUG] [Thread-190321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:48:44.671 [DEBUG] [Thread-190321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:48:44.671 [DEBUG] [Thread-190321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:48:44.711 [DEBUG] [Thread-190321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:48:44.712 [DEBUG] [Thread-190321] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:48:44.715 [DEBUG] [Thread-190321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:48:44.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:48:44.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:48:44.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:48:44.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:48:44.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:48:44.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:48:44.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:48:44.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:48:44.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:48:44.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.700116 -999.00  +13.50  26.05     50   +3.30 1 1 1 1 1   887    0 10.01 -22.76 ----- 29.3 26.1 154.8 41.2 15.6 -27.2 15.6 -27.5 16.3 -25.7 16.7 -27.5
2026-02-14T18:48:44.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:48:44.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:48:44.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.700116
2026-02-14T18:48:44.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:48:44.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:48:44.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:48:44.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:48:44.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:48:44.741 [DEBUG] [Thread-190321] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:48:44.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:48:28', tmtdew=12.11, humidity=43.67, cloud=0.0, wind=42.31, temperature=13.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:48:10.022', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:48:44.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-14T18:48:44.837 [DEBUG] [Thread-190324] [transport.py] [_log()] starting thread (client mode): 0xa2d6e2c0
2026-02-14T18:48:44.837 [DEBUG] [Thread-190324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:48:44.852 [DEBUG] [Thread-190324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:48:44.852 [INFO] [Thread-190324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:48:44.859 [DEBUG] [Thread-190324] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:48:44.860 [DEBUG] [Thread-190324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:48:44.860 [DEBUG] [Thread-190324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:48:44.860 [DEBUG] [Thread-190324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:48:44.860 [DEBUG] [Thread-190324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:48:44.860 [DEBUG] [Thread-190324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:48:44.860 [DEBUG] [Thread-190324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:48:44.860 [DEBUG] [Thread-190324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:48:44.860 [DEBUG] [Thread-190324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:48:44.861 [DEBUG] [Thread-190324] [transport.py] [_log()] client lang: <none>
2026-02-14T18:48:44.861 [DEBUG] [Thread-190324] [transport.py] [_log()] server lang: <none>
2026-02-14T18:48:44.861 [DEBUG] [Thread-190324] [transport.py] [_log()] kex follows: False
2026-02-14T18:48:44.861 [DEBUG] [Thread-190324] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:48:44.861 [DEBUG] [Thread-190324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:48:44.861 [DEBUG] [Thread-190324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:48:44.861 [DEBUG] [Thread-190324] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:48:44.861 [DEBUG] [Thread-190324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:48:44.861 [DEBUG] [Thread-190324] [transport.py] [_log()] Compression: none
2026-02-14T18:48:44.861 [DEBUG] [Thread-190324] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:48:44.922 [DEBUG] [Thread-190324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:48:44.922 [DEBUG] [Thread-190324] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:48:44.922 [DEBUG] [Thread-190324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:48:44.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:48:44.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:48:44.980 [DEBUG] [Thread-190324] [transport.py] [_log()] userauth is OK
2026-02-14T18:48:44.980 [DEBUG] [Thread-190324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:48:44.981 [DEBUG] [Thread-190324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:48:44.981 [DEBUG] [Thread-190324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:48:44.981 [DEBUG] [Thread-190324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:48:45.002 [INFO] [Thread-190324] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:48:45.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-14T18:48:45.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:48:45.829 [DEBUG] [Thread-190324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:48:45.829 [DEBUG] [Thread-190324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:48:45.878 [DEBUG] [Thread-190324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:48:45.878 [DEBUG] [Thread-190324] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:48:45.887 [DEBUG] [Thread-190324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:48:45.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:48:45.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-14T18:48:45.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:48:45.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:48:45.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:48:45.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:48:45.924 [DEBUG] [Thread-190324] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:48:47.068 [DEBUG] [Thread-190326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:49:02.117 [DEBUG] [Thread-190327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:49:15.715 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:49:15.716 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:49:15.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:49:15.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:49:15.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-14T18:49:17.151 [DEBUG] [Thread-190328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:49:18.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 49, 4), 12.1, 43.72, 0.0, 40.3, 13.87, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:49:18.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:49:04
2026-02-14T18:49:18.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:49:18.818 [DEBUG] [Thread-190329] [transport.py] [_log()] starting thread (client mode): 0xa2d6e080
2026-02-14T18:49:18.818 [DEBUG] [Thread-190329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:49:18.839 [DEBUG] [Thread-190329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:49:18.839 [INFO] [Thread-190329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:49:18.842 [DEBUG] [Thread-190329] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:49:18.842 [DEBUG] [Thread-190329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:49:18.842 [DEBUG] [Thread-190329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:49:18.842 [DEBUG] [Thread-190329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:49:18.842 [DEBUG] [Thread-190329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:49:18.842 [DEBUG] [Thread-190329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:49:18.842 [DEBUG] [Thread-190329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:49:18.842 [DEBUG] [Thread-190329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:49:18.842 [DEBUG] [Thread-190329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:49:18.842 [DEBUG] [Thread-190329] [transport.py] [_log()] client lang: <none>
2026-02-14T18:49:18.843 [DEBUG] [Thread-190329] [transport.py] [_log()] server lang: <none>
2026-02-14T18:49:18.843 [DEBUG] [Thread-190329] [transport.py] [_log()] kex follows: False
2026-02-14T18:49:18.843 [DEBUG] [Thread-190329] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:49:18.843 [DEBUG] [Thread-190329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:49:18.843 [DEBUG] [Thread-190329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:49:18.843 [DEBUG] [Thread-190329] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:49:18.843 [DEBUG] [Thread-190329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:49:18.843 [DEBUG] [Thread-190329] [transport.py] [_log()] Compression: none
2026-02-14T18:49:18.843 [DEBUG] [Thread-190329] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:49:18.860 [DEBUG] [Thread-190329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:49:18.860 [DEBUG] [Thread-190329] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:49:18.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:49:18.861 [DEBUG] [Thread-190329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:49:18.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:49:18.863 [DEBUG] [Thread-190329] [transport.py] [_log()] userauth is OK
2026-02-14T18:49:18.864 [DEBUG] [Thread-190329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:49:18.864 [DEBUG] [Thread-190329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:49:18.864 [DEBUG] [Thread-190329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:49:18.864 [DEBUG] [Thread-190329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:49:18.889 [INFO] [Thread-190329] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:49:18.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:49:19.510 [DEBUG] [Thread-190329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:49:19.510 [DEBUG] [Thread-190329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:49:19.511 [DEBUG] [Thread-190329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:49:19.551 [DEBUG] [Thread-190329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:49:19.551 [DEBUG] [Thread-190329] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:49:19.554 [DEBUG] [Thread-190329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:49:19.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:49:19.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:49:19.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:49:19.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:49:19.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:49:19.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:49:19.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:49:19.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:49:19.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:49:19.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.700463 -999.00  +13.50  31.05     50   +3.30 1 1 2 1 1   887    0 9.58 -25.52 ----- 26.4 31.1 154.4 40.3 15.5 -27.3 15.4 -26.1 16.2 -25.7 16.7 -28.0
2026-02-14T18:49:19.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:49:19.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:49:19.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.700463
2026-02-14T18:49:19.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:49:19.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:49:19.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:49:19.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:49:19.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:49:19.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:49:04', tmtdew=12.1, humidity=43.72, cloud=0.0, wind=40.3, temperature=13.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:48:40.003', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:49:19.578 [DEBUG] [Thread-190329] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:49:19.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-14T18:49:19.661 [DEBUG] [Thread-190332] [transport.py] [_log()] starting thread (client mode): 0xa2decbb0
2026-02-14T18:49:19.662 [DEBUG] [Thread-190332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:49:19.677 [DEBUG] [Thread-190332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:49:19.677 [INFO] [Thread-190332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:49:19.684 [DEBUG] [Thread-190332] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:49:19.685 [DEBUG] [Thread-190332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:49:19.685 [DEBUG] [Thread-190332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:49:19.685 [DEBUG] [Thread-190332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:49:19.685 [DEBUG] [Thread-190332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:49:19.685 [DEBUG] [Thread-190332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:49:19.685 [DEBUG] [Thread-190332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:49:19.686 [DEBUG] [Thread-190332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:49:19.686 [DEBUG] [Thread-190332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:49:19.686 [DEBUG] [Thread-190332] [transport.py] [_log()] client lang: <none>
2026-02-14T18:49:19.686 [DEBUG] [Thread-190332] [transport.py] [_log()] server lang: <none>
2026-02-14T18:49:19.686 [DEBUG] [Thread-190332] [transport.py] [_log()] kex follows: False
2026-02-14T18:49:19.686 [DEBUG] [Thread-190332] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:49:19.686 [DEBUG] [Thread-190332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:49:19.686 [DEBUG] [Thread-190332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:49:19.687 [DEBUG] [Thread-190332] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:49:19.687 [DEBUG] [Thread-190332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:49:19.687 [DEBUG] [Thread-190332] [transport.py] [_log()] Compression: none
2026-02-14T18:49:19.687 [DEBUG] [Thread-190332] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:49:19.745 [DEBUG] [Thread-190332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:49:19.745 [DEBUG] [Thread-190332] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:49:19.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:49:19.746 [DEBUG] [Thread-190332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:49:19.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:49:19.801 [DEBUG] [Thread-190332] [transport.py] [_log()] userauth is OK
2026-02-14T18:49:19.801 [DEBUG] [Thread-190332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:49:19.801 [DEBUG] [Thread-190332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:49:19.801 [DEBUG] [Thread-190332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:49:19.801 [DEBUG] [Thread-190332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:49:19.822 [INFO] [Thread-190332] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:49:19.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-14T18:49:19.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:49:20.675 [DEBUG] [Thread-190332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:49:20.675 [DEBUG] [Thread-190332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:49:20.723 [DEBUG] [Thread-190332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:49:20.723 [DEBUG] [Thread-190332] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:49:20.731 [DEBUG] [Thread-190332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:49:20.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:49:20.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-14T18:49:20.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:49:20.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:49:20.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:49:20.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:49:20.769 [DEBUG] [Thread-190332] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:49:32.191 [DEBUG] [Thread-190334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:49:37.174 [DEBUG] [Thread-190335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:49:47.254 [DEBUG] [Thread-190336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:49:50.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:49:50.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:49:50.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-14T18:49:52.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 49, 41), 12.59, 42.44, 0.0, 47.31, 14.37, 0, 0, 0, 2, 1, 0),)
2026-02-14T18:49:52.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:49:41
2026-02-14T18:49:53.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:49:53.276 [DEBUG] [Thread-190337] [transport.py] [_log()] starting thread (client mode): 0xa2d6d0c0
2026-02-14T18:49:53.276 [DEBUG] [Thread-190337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:49:53.295 [DEBUG] [Thread-190337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:49:53.296 [INFO] [Thread-190337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:49:53.299 [DEBUG] [Thread-190337] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:49:53.299 [DEBUG] [Thread-190337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:49:53.299 [DEBUG] [Thread-190337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:49:53.299 [DEBUG] [Thread-190337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:49:53.299 [DEBUG] [Thread-190337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:49:53.299 [DEBUG] [Thread-190337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:49:53.299 [DEBUG] [Thread-190337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:49:53.300 [DEBUG] [Thread-190337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:49:53.300 [DEBUG] [Thread-190337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:49:53.300 [DEBUG] [Thread-190337] [transport.py] [_log()] client lang: <none>
2026-02-14T18:49:53.300 [DEBUG] [Thread-190337] [transport.py] [_log()] server lang: <none>
2026-02-14T18:49:53.300 [DEBUG] [Thread-190337] [transport.py] [_log()] kex follows: False
2026-02-14T18:49:53.300 [DEBUG] [Thread-190337] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:49:53.300 [DEBUG] [Thread-190337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:49:53.300 [DEBUG] [Thread-190337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:49:53.300 [DEBUG] [Thread-190337] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:49:53.300 [DEBUG] [Thread-190337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:49:53.300 [DEBUG] [Thread-190337] [transport.py] [_log()] Compression: none
2026-02-14T18:49:53.300 [DEBUG] [Thread-190337] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:49:53.319 [DEBUG] [Thread-190337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:49:53.320 [DEBUG] [Thread-190337] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:49:53.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:49:53.321 [DEBUG] [Thread-190337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:49:53.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:49:53.323 [DEBUG] [Thread-190337] [transport.py] [_log()] userauth is OK
2026-02-14T18:49:53.323 [DEBUG] [Thread-190337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:49:53.323 [DEBUG] [Thread-190337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:49:53.323 [DEBUG] [Thread-190337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:49:53.323 [DEBUG] [Thread-190337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:49:53.348 [INFO] [Thread-190337] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:49:53.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:49:54.175 [DEBUG] [Thread-190337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:49:54.175 [DEBUG] [Thread-190337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:49:54.176 [DEBUG] [Thread-190337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:49:54.217 [DEBUG] [Thread-190337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:49:54.217 [DEBUG] [Thread-190337] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:49:54.220 [DEBUG] [Thread-190337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:49:54.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:49:54.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:49:54.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:49:54.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:49:54.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:49:54.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:49:54.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:49:54.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:49:54.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:49:54.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.700810 -999.00  +13.50  23.57     50   +3.30 1 1 1 1 1   887    0 9.66 -26.27 ----- 26.4 23.6 158.6 40.7 15.5 -27.1 15.4 -26.4 16.3 -25.6 16.7 -27.3
2026-02-14T18:49:54.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:49:54.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:49:54.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.700810
2026-02-14T18:49:54.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:49:54.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:49:54.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:49:54.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:49:54.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:49:54.244 [DEBUG] [Thread-190337] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:49:54.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:49:41', tmtdew=12.59, humidity=42.44, cloud=0.0, wind=47.31, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:49:09.984', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:49:54.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-14T18:49:54.351 [DEBUG] [Thread-190340] [transport.py] [_log()] starting thread (client mode): 0xa2d6ece0
2026-02-14T18:49:54.352 [DEBUG] [Thread-190340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:49:54.368 [DEBUG] [Thread-190340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:49:54.368 [INFO] [Thread-190340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:49:54.376 [DEBUG] [Thread-190340] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:49:54.376 [DEBUG] [Thread-190340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:49:54.376 [DEBUG] [Thread-190340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:49:54.376 [DEBUG] [Thread-190340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:49:54.376 [DEBUG] [Thread-190340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:49:54.377 [DEBUG] [Thread-190340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:49:54.377 [DEBUG] [Thread-190340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:49:54.377 [DEBUG] [Thread-190340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:49:54.377 [DEBUG] [Thread-190340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:49:54.377 [DEBUG] [Thread-190340] [transport.py] [_log()] client lang: <none>
2026-02-14T18:49:54.377 [DEBUG] [Thread-190340] [transport.py] [_log()] server lang: <none>
2026-02-14T18:49:54.377 [DEBUG] [Thread-190340] [transport.py] [_log()] kex follows: False
2026-02-14T18:49:54.377 [DEBUG] [Thread-190340] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:49:54.378 [DEBUG] [Thread-190340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:49:54.378 [DEBUG] [Thread-190340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:49:54.378 [DEBUG] [Thread-190340] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:49:54.378 [DEBUG] [Thread-190340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:49:54.378 [DEBUG] [Thread-190340] [transport.py] [_log()] Compression: none
2026-02-14T18:49:54.378 [DEBUG] [Thread-190340] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:49:54.433 [DEBUG] [Thread-190340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:49:54.434 [DEBUG] [Thread-190340] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:49:54.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:49:54.435 [DEBUG] [Thread-190340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:49:54.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:49:54.489 [DEBUG] [Thread-190340] [transport.py] [_log()] userauth is OK
2026-02-14T18:49:54.490 [DEBUG] [Thread-190340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:49:54.490 [DEBUG] [Thread-190340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:49:54.490 [DEBUG] [Thread-190340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:49:54.490 [DEBUG] [Thread-190340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:49:54.509 [INFO] [Thread-190340] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:49:54.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T18:49:54.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:49:55.338 [DEBUG] [Thread-190340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:49:55.338 [DEBUG] [Thread-190340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:49:55.385 [DEBUG] [Thread-190340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:49:55.386 [DEBUG] [Thread-190340] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:49:55.395 [DEBUG] [Thread-190340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:49:55.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:49:55.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-14T18:49:55.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-14T18:49:55.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:49:55.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:49:55.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:49:55.432 [DEBUG] [Thread-190340] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:50:02.289 [DEBUG] [Thread-190342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:50:15.857 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:50:15.858 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:50:17.350 [DEBUG] [Thread-190343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:50:25.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:50:25.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:50:25.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:50:27.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 50, 16), 12.06, 43.82, 0.0, 33.33, 13.77, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:50:27.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:50:16
2026-02-14T18:50:27.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:50:27.906 [DEBUG] [Thread-190344] [transport.py] [_log()] starting thread (client mode): 0xa2d6dae0
2026-02-14T18:50:27.907 [DEBUG] [Thread-190344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:50:27.926 [DEBUG] [Thread-190344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:50:27.926 [INFO] [Thread-190344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:50:27.929 [DEBUG] [Thread-190344] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:50:27.929 [DEBUG] [Thread-190344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:50:27.929 [DEBUG] [Thread-190344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:50:27.929 [DEBUG] [Thread-190344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:50:27.929 [DEBUG] [Thread-190344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:50:27.929 [DEBUG] [Thread-190344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:50:27.929 [DEBUG] [Thread-190344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:50:27.929 [DEBUG] [Thread-190344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:50:27.929 [DEBUG] [Thread-190344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:50:27.929 [DEBUG] [Thread-190344] [transport.py] [_log()] client lang: <none>
2026-02-14T18:50:27.929 [DEBUG] [Thread-190344] [transport.py] [_log()] server lang: <none>
2026-02-14T18:50:27.929 [DEBUG] [Thread-190344] [transport.py] [_log()] kex follows: False
2026-02-14T18:50:27.929 [DEBUG] [Thread-190344] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:50:27.930 [DEBUG] [Thread-190344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:50:27.930 [DEBUG] [Thread-190344] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:50:27.930 [DEBUG] [Thread-190344] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:50:27.930 [DEBUG] [Thread-190344] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:50:27.930 [DEBUG] [Thread-190344] [transport.py] [_log()] Compression: none
2026-02-14T18:50:27.930 [DEBUG] [Thread-190344] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:50:27.947 [DEBUG] [Thread-190344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:50:27.948 [DEBUG] [Thread-190344] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:50:27.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:50:27.949 [DEBUG] [Thread-190344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:50:27.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:50:27.951 [DEBUG] [Thread-190344] [transport.py] [_log()] userauth is OK
2026-02-14T18:50:27.952 [DEBUG] [Thread-190344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:50:27.952 [DEBUG] [Thread-190344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:50:27.952 [DEBUG] [Thread-190344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:50:27.952 [DEBUG] [Thread-190344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:50:27.979 [INFO] [Thread-190344] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:50:27.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:50:28.614 [DEBUG] [Thread-190344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:50:28.614 [DEBUG] [Thread-190344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:50:28.615 [DEBUG] [Thread-190344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:50:28.655 [DEBUG] [Thread-190344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:50:28.656 [DEBUG] [Thread-190344] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:50:28.659 [DEBUG] [Thread-190344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:50:28.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:50:28.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:50:28.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:50:28.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:50:28.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:50:28.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:50:28.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:50:28.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:50:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:50:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.701157 -999.00  +13.60  20.80     50   +3.30 1 1 1 1 1   887    0 9.93 -24.27 ----- 28.6 20.8 148.2 30.9 15.5 -27.1 15.4 -26.2 16.3 -25.6 16.6 -27.2
2026-02-14T18:50:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:50:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:50:28.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.701157
2026-02-14T18:50:28.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:50:28.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:50:28.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:50:28.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:50:28.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:50:28.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:50:16', tmtdew=12.06, humidity=43.82, cloud=0.0, wind=33.33, temperature=13.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:49:39.965', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:50:28.690 [DEBUG] [Thread-190344] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:50:28.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-14T18:50:28.785 [DEBUG] [Thread-190347] [transport.py] [_log()] starting thread (client mode): 0xa2d6ed40
2026-02-14T18:50:28.786 [DEBUG] [Thread-190347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:50:28.800 [DEBUG] [Thread-190347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:50:28.800 [INFO] [Thread-190347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:50:28.807 [DEBUG] [Thread-190347] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:50:28.807 [DEBUG] [Thread-190347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:50:28.807 [DEBUG] [Thread-190347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:50:28.807 [DEBUG] [Thread-190347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:50:28.808 [DEBUG] [Thread-190347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:50:28.808 [DEBUG] [Thread-190347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:50:28.808 [DEBUG] [Thread-190347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:50:28.808 [DEBUG] [Thread-190347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:50:28.808 [DEBUG] [Thread-190347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:50:28.808 [DEBUG] [Thread-190347] [transport.py] [_log()] client lang: <none>
2026-02-14T18:50:28.808 [DEBUG] [Thread-190347] [transport.py] [_log()] server lang: <none>
2026-02-14T18:50:28.808 [DEBUG] [Thread-190347] [transport.py] [_log()] kex follows: False
2026-02-14T18:50:28.808 [DEBUG] [Thread-190347] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:50:28.808 [DEBUG] [Thread-190347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:50:28.808 [DEBUG] [Thread-190347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:50:28.808 [DEBUG] [Thread-190347] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:50:28.808 [DEBUG] [Thread-190347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:50:28.808 [DEBUG] [Thread-190347] [transport.py] [_log()] Compression: none
2026-02-14T18:50:28.808 [DEBUG] [Thread-190347] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:50:28.867 [DEBUG] [Thread-190347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:50:28.867 [DEBUG] [Thread-190347] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:50:28.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:50:28.869 [DEBUG] [Thread-190347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:50:28.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:50:28.926 [DEBUG] [Thread-190347] [transport.py] [_log()] userauth is OK
2026-02-14T18:50:28.926 [DEBUG] [Thread-190347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:50:28.926 [DEBUG] [Thread-190347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:50:28.927 [DEBUG] [Thread-190347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:50:28.927 [DEBUG] [Thread-190347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:50:28.945 [INFO] [Thread-190347] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:50:28.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-14T18:50:28.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:50:29.777 [DEBUG] [Thread-190347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:50:29.777 [DEBUG] [Thread-190347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:50:29.825 [DEBUG] [Thread-190347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:50:29.825 [DEBUG] [Thread-190347] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:50:29.835 [DEBUG] [Thread-190347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:50:29.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:50:29.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-14T18:50:29.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-14T18:50:29.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:50:29.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:50:29.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:50:29.871 [DEBUG] [Thread-190347] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:50:32.386 [DEBUG] [Thread-190349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:50:37.208 [DEBUG] [Thread-190350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:50:47.434 [DEBUG] [Thread-190351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:50:59.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:50:59.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:50:59.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:51:01.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 50, 52), 12.04, 43.85, 0.0, 37.6, 13.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:51:01.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:50:52
2026-02-14T18:51:02.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:51:02.162 [DEBUG] [Thread-190352] [transport.py] [_log()] starting thread (client mode): 0xa2d6f910
2026-02-14T18:51:02.162 [DEBUG] [Thread-190352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:51:02.179 [DEBUG] [Thread-190352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:51:02.179 [INFO] [Thread-190352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:51:02.182 [DEBUG] [Thread-190352] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:51:02.182 [DEBUG] [Thread-190352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:51:02.182 [DEBUG] [Thread-190352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:51:02.182 [DEBUG] [Thread-190352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:51:02.182 [DEBUG] [Thread-190352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:51:02.182 [DEBUG] [Thread-190352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:51:02.182 [DEBUG] [Thread-190352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:51:02.182 [DEBUG] [Thread-190352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:51:02.182 [DEBUG] [Thread-190352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:51:02.182 [DEBUG] [Thread-190352] [transport.py] [_log()] client lang: <none>
2026-02-14T18:51:02.182 [DEBUG] [Thread-190352] [transport.py] [_log()] server lang: <none>
2026-02-14T18:51:02.182 [DEBUG] [Thread-190352] [transport.py] [_log()] kex follows: False
2026-02-14T18:51:02.182 [DEBUG] [Thread-190352] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:51:02.182 [DEBUG] [Thread-190352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:51:02.182 [DEBUG] [Thread-190352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:51:02.182 [DEBUG] [Thread-190352] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:51:02.182 [DEBUG] [Thread-190352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:51:02.182 [DEBUG] [Thread-190352] [transport.py] [_log()] Compression: none
2026-02-14T18:51:02.182 [DEBUG] [Thread-190352] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:51:02.190 [DEBUG] [Thread-190352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:51:02.190 [DEBUG] [Thread-190352] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:51:02.190 [DEBUG] [Thread-190352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:51:02.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:51:02.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:51:02.191 [DEBUG] [Thread-190352] [transport.py] [_log()] userauth is OK
2026-02-14T18:51:02.191 [DEBUG] [Thread-190352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:51:02.191 [DEBUG] [Thread-190352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:51:02.191 [DEBUG] [Thread-190352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:51:02.191 [DEBUG] [Thread-190352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:51:02.208 [INFO] [Thread-190352] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:51:02.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:51:02.478 [DEBUG] [Thread-190354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:51:02.846 [DEBUG] [Thread-190352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:51:02.846 [DEBUG] [Thread-190352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:51:02.847 [DEBUG] [Thread-190352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:51:02.888 [DEBUG] [Thread-190352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:51:02.888 [DEBUG] [Thread-190352] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:51:02.891 [DEBUG] [Thread-190352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:51:02.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:51:02.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:51:02.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:51:02.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:51:02.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:51:02.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:51:02.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:51:02.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:51:02.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:51:02.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.701504 -999.00  +13.60  24.62     49   +3.30 1 1 1 1 1   887    0 9.96 -22.82 ----- 28.1 24.6 164.2 37.1 15.5 -27.2 15.5 -26.2 16.2 -26.0 16.6 -27.4
2026-02-14T18:51:02.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:51:02.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:51:02.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.701504
2026-02-14T18:51:02.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:51:02.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:51:02.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:51:02.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:51:02.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:51:02.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:50:52', tmtdew=12.04, humidity=43.85, cloud=0.0, wind=37.6, temperature=13.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:50:09.946', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:51:02.915 [DEBUG] [Thread-190352] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:51:02.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-14T18:51:03.010 [DEBUG] [Thread-190356] [transport.py] [_log()] starting thread (client mode): 0xa2d78430
2026-02-14T18:51:03.010 [DEBUG] [Thread-190356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:51:03.027 [DEBUG] [Thread-190356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:51:03.027 [INFO] [Thread-190356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:51:03.034 [DEBUG] [Thread-190356] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:51:03.034 [DEBUG] [Thread-190356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:51:03.034 [DEBUG] [Thread-190356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:51:03.034 [DEBUG] [Thread-190356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:51:03.034 [DEBUG] [Thread-190356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:51:03.034 [DEBUG] [Thread-190356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:51:03.035 [DEBUG] [Thread-190356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:51:03.035 [DEBUG] [Thread-190356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:51:03.035 [DEBUG] [Thread-190356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:51:03.035 [DEBUG] [Thread-190356] [transport.py] [_log()] client lang: <none>
2026-02-14T18:51:03.035 [DEBUG] [Thread-190356] [transport.py] [_log()] server lang: <none>
2026-02-14T18:51:03.035 [DEBUG] [Thread-190356] [transport.py] [_log()] kex follows: False
2026-02-14T18:51:03.035 [DEBUG] [Thread-190356] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:51:03.035 [DEBUG] [Thread-190356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:51:03.035 [DEBUG] [Thread-190356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:51:03.035 [DEBUG] [Thread-190356] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:51:03.035 [DEBUG] [Thread-190356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:51:03.035 [DEBUG] [Thread-190356] [transport.py] [_log()] Compression: none
2026-02-14T18:51:03.035 [DEBUG] [Thread-190356] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:51:03.093 [DEBUG] [Thread-190356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:51:03.093 [DEBUG] [Thread-190356] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:51:03.093 [DEBUG] [Thread-190356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:51:03.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:51:03.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:51:03.150 [DEBUG] [Thread-190356] [transport.py] [_log()] userauth is OK
2026-02-14T18:51:03.150 [DEBUG] [Thread-190356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:51:03.151 [DEBUG] [Thread-190356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:51:03.151 [DEBUG] [Thread-190356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:51:03.151 [DEBUG] [Thread-190356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:51:03.173 [INFO] [Thread-190356] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:51:03.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-14T18:51:03.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:51:04.043 [DEBUG] [Thread-190356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:51:04.043 [DEBUG] [Thread-190356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:51:04.092 [DEBUG] [Thread-190356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:51:04.092 [DEBUG] [Thread-190356] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:51:04.101 [DEBUG] [Thread-190356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:51:04.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:51:04.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:51:04.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-14T18:51:04.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:51:04.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:51:04.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:51:04.138 [DEBUG] [Thread-190356] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:51:15.998 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:51:15.999 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:51:17.516 [DEBUG] [Thread-190358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:51:32.571 [DEBUG] [Thread-190359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:51:34.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:51:34.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:51:34.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-14T18:51:36.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 51, 27), 12.05, 43.84, 0.0, 37.14, 13.77, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:51:36.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:51:27
2026-02-14T18:51:36.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:51:36.519 [DEBUG] [Thread-190360] [transport.py] [_log()] starting thread (client mode): 0xa2deea10
2026-02-14T18:51:36.520 [DEBUG] [Thread-190360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:51:36.538 [DEBUG] [Thread-190360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:51:36.539 [INFO] [Thread-190360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:51:36.542 [DEBUG] [Thread-190360] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:51:36.542 [DEBUG] [Thread-190360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:51:36.542 [DEBUG] [Thread-190360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:51:36.542 [DEBUG] [Thread-190360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:51:36.542 [DEBUG] [Thread-190360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:51:36.542 [DEBUG] [Thread-190360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:51:36.542 [DEBUG] [Thread-190360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:51:36.542 [DEBUG] [Thread-190360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:51:36.542 [DEBUG] [Thread-190360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:51:36.542 [DEBUG] [Thread-190360] [transport.py] [_log()] client lang: <none>
2026-02-14T18:51:36.542 [DEBUG] [Thread-190360] [transport.py] [_log()] server lang: <none>
2026-02-14T18:51:36.542 [DEBUG] [Thread-190360] [transport.py] [_log()] kex follows: False
2026-02-14T18:51:36.542 [DEBUG] [Thread-190360] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:51:36.542 [DEBUG] [Thread-190360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:51:36.542 [DEBUG] [Thread-190360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:51:36.542 [DEBUG] [Thread-190360] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:51:36.542 [DEBUG] [Thread-190360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:51:36.542 [DEBUG] [Thread-190360] [transport.py] [_log()] Compression: none
2026-02-14T18:51:36.542 [DEBUG] [Thread-190360] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:51:36.559 [DEBUG] [Thread-190360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:51:36.560 [DEBUG] [Thread-190360] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:51:36.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:51:36.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:51:36.562 [DEBUG] [Thread-190360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:51:36.563 [DEBUG] [Thread-190360] [transport.py] [_log()] userauth is OK
2026-02-14T18:51:36.563 [DEBUG] [Thread-190360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:51:36.563 [DEBUG] [Thread-190360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:51:36.563 [DEBUG] [Thread-190360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:51:36.563 [DEBUG] [Thread-190360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:51:36.588 [INFO] [Thread-190360] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:51:36.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:51:37.220 [DEBUG] [Thread-190360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:51:37.220 [DEBUG] [Thread-190360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:51:37.221 [DEBUG] [Thread-190360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:51:37.255 [DEBUG] [Thread-190362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:51:37.261 [DEBUG] [Thread-190360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:51:37.261 [DEBUG] [Thread-190360] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:51:37.263 [DEBUG] [Thread-190360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:51:37.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:51:37.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:51:37.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:51:37.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:51:37.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:51:37.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:51:37.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:51:37.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:51:37.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:51:37.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.701852 -999.00  +13.50  29.27     50   +3.30 1 1 1 1 1   887    0 9.53 -23.16 ----- 29.0 29.3 155.6 47.3 15.4 -27.6 15.4 -26.8 16.2 -26.0 16.6 -28.0
2026-02-14T18:51:37.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:51:37.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:51:37.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.701852
2026-02-14T18:51:37.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:51:37.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:51:37.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:51:37.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:51:37.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:51:37.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:51:27', tmtdew=12.05, humidity=43.84, cloud=0.0, wind=37.14, temperature=13.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:50:40.013', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:51:37.288 [DEBUG] [Thread-190360] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:51:37.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-14T18:51:37.388 [DEBUG] [Thread-190364] [transport.py] [_log()] starting thread (client mode): 0xa2d79060
2026-02-14T18:51:37.389 [DEBUG] [Thread-190364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:51:37.408 [DEBUG] [Thread-190364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:51:37.408 [INFO] [Thread-190364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:51:37.416 [DEBUG] [Thread-190364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:51:37.416 [DEBUG] [Thread-190364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:51:37.416 [DEBUG] [Thread-190364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:51:37.416 [DEBUG] [Thread-190364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:51:37.416 [DEBUG] [Thread-190364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:51:37.416 [DEBUG] [Thread-190364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:51:37.417 [DEBUG] [Thread-190364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:51:37.417 [DEBUG] [Thread-190364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:51:37.417 [DEBUG] [Thread-190364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:51:37.417 [DEBUG] [Thread-190364] [transport.py] [_log()] client lang: <none>
2026-02-14T18:51:37.417 [DEBUG] [Thread-190364] [transport.py] [_log()] server lang: <none>
2026-02-14T18:51:37.417 [DEBUG] [Thread-190364] [transport.py] [_log()] kex follows: False
2026-02-14T18:51:37.417 [DEBUG] [Thread-190364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:51:37.417 [DEBUG] [Thread-190364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:51:37.417 [DEBUG] [Thread-190364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:51:37.418 [DEBUG] [Thread-190364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:51:37.418 [DEBUG] [Thread-190364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:51:37.418 [DEBUG] [Thread-190364] [transport.py] [_log()] Compression: none
2026-02-14T18:51:37.418 [DEBUG] [Thread-190364] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:51:37.479 [DEBUG] [Thread-190364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:51:37.480 [DEBUG] [Thread-190364] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:51:37.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:51:37.481 [DEBUG] [Thread-190364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:51:37.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:51:37.543 [DEBUG] [Thread-190364] [transport.py] [_log()] userauth is OK
2026-02-14T18:51:37.543 [DEBUG] [Thread-190364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:51:37.544 [DEBUG] [Thread-190364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:51:37.544 [DEBUG] [Thread-190364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:51:37.544 [DEBUG] [Thread-190364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:51:37.563 [INFO] [Thread-190364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:51:37.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-14T18:51:37.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:51:38.396 [DEBUG] [Thread-190364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:51:38.396 [DEBUG] [Thread-190364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:51:38.444 [DEBUG] [Thread-190364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:51:38.445 [DEBUG] [Thread-190364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:51:38.454 [DEBUG] [Thread-190364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:51:38.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:51:38.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-14T18:51:38.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-14T18:51:38.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:51:38.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:51:38.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:51:38.490 [DEBUG] [Thread-190364] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:51:47.609 [DEBUG] [Thread-190366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:52:02.671 [DEBUG] [Thread-190367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:52:08.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:52:08.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:52:08.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-14T18:52:10.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 52, 2), 12.04, 43.85, 0.0, 37.93, 13.7, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:52:10.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:52:02
2026-02-14T18:52:10.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:52:10.938 [DEBUG] [Thread-190368] [transport.py] [_log()] starting thread (client mode): 0xa2d6c850
2026-02-14T18:52:10.938 [DEBUG] [Thread-190368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:52:10.958 [DEBUG] [Thread-190368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:52:10.958 [INFO] [Thread-190368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:52:10.962 [DEBUG] [Thread-190368] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:52:10.962 [DEBUG] [Thread-190368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:52:10.962 [DEBUG] [Thread-190368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:52:10.962 [DEBUG] [Thread-190368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:52:10.962 [DEBUG] [Thread-190368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:52:10.962 [DEBUG] [Thread-190368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:52:10.962 [DEBUG] [Thread-190368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:52:10.962 [DEBUG] [Thread-190368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:52:10.962 [DEBUG] [Thread-190368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:52:10.962 [DEBUG] [Thread-190368] [transport.py] [_log()] client lang: <none>
2026-02-14T18:52:10.962 [DEBUG] [Thread-190368] [transport.py] [_log()] server lang: <none>
2026-02-14T18:52:10.963 [DEBUG] [Thread-190368] [transport.py] [_log()] kex follows: False
2026-02-14T18:52:10.963 [DEBUG] [Thread-190368] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:52:10.963 [DEBUG] [Thread-190368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:52:10.963 [DEBUG] [Thread-190368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:52:10.963 [DEBUG] [Thread-190368] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:52:10.963 [DEBUG] [Thread-190368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:52:10.963 [DEBUG] [Thread-190368] [transport.py] [_log()] Compression: none
2026-02-14T18:52:10.963 [DEBUG] [Thread-190368] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:52:10.983 [DEBUG] [Thread-190368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:52:10.983 [DEBUG] [Thread-190368] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:52:10.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:52:10.985 [DEBUG] [Thread-190368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:52:10.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:52:10.987 [DEBUG] [Thread-190368] [transport.py] [_log()] userauth is OK
2026-02-14T18:52:10.988 [DEBUG] [Thread-190368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:52:10.988 [DEBUG] [Thread-190368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:52:10.988 [DEBUG] [Thread-190368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:52:10.988 [DEBUG] [Thread-190368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:52:11.011 [INFO] [Thread-190368] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:52:11.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:52:11.674 [DEBUG] [Thread-190368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:52:11.674 [DEBUG] [Thread-190368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:52:11.674 [DEBUG] [Thread-190368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:52:11.715 [DEBUG] [Thread-190368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:52:11.715 [DEBUG] [Thread-190368] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:52:11.719 [DEBUG] [Thread-190368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:52:11.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:52:11.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:52:11.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:52:11.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:52:11.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:52:11.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:52:11.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:52:11.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:52:11.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:52:11.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.702199 -999.00  +13.50  25.65     50   +3.30 1 1 1 1 1   887    0 9.59 -23.30 ----- 29.3 25.6 157.2 35.7 15.4 -27.5 15.3 -26.0 16.1 -26.2 16.5 -27.5
2026-02-14T18:52:11.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:52:11.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:52:11.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.702199
2026-02-14T18:52:11.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:52:11.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:52:11.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:52:11.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:52:11.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:52:11.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:52:02', tmtdew=12.04, humidity=43.85, cloud=0.0, wind=37.93, temperature=13.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:51:09.994', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:52:11.744 [DEBUG] [Thread-190368] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:52:11.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-14T18:52:11.839 [DEBUG] [Thread-190371] [transport.py] [_log()] starting thread (client mode): 0xa2deefb0
2026-02-14T18:52:11.839 [DEBUG] [Thread-190371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:52:11.854 [DEBUG] [Thread-190371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:52:11.855 [INFO] [Thread-190371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:52:11.863 [DEBUG] [Thread-190371] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:52:11.863 [DEBUG] [Thread-190371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:52:11.863 [DEBUG] [Thread-190371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:52:11.863 [DEBUG] [Thread-190371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:52:11.864 [DEBUG] [Thread-190371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:52:11.864 [DEBUG] [Thread-190371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:52:11.864 [DEBUG] [Thread-190371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:52:11.864 [DEBUG] [Thread-190371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:52:11.864 [DEBUG] [Thread-190371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:52:11.864 [DEBUG] [Thread-190371] [transport.py] [_log()] client lang: <none>
2026-02-14T18:52:11.864 [DEBUG] [Thread-190371] [transport.py] [_log()] server lang: <none>
2026-02-14T18:52:11.864 [DEBUG] [Thread-190371] [transport.py] [_log()] kex follows: False
2026-02-14T18:52:11.864 [DEBUG] [Thread-190371] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:52:11.864 [DEBUG] [Thread-190371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:52:11.864 [DEBUG] [Thread-190371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:52:11.864 [DEBUG] [Thread-190371] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:52:11.864 [DEBUG] [Thread-190371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:52:11.864 [DEBUG] [Thread-190371] [transport.py] [_log()] Compression: none
2026-02-14T18:52:11.864 [DEBUG] [Thread-190371] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:52:11.920 [DEBUG] [Thread-190371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:52:11.921 [DEBUG] [Thread-190371] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:52:11.921 [DEBUG] [Thread-190371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:52:11.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:52:11.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:52:11.976 [DEBUG] [Thread-190371] [transport.py] [_log()] userauth is OK
2026-02-14T18:52:11.976 [DEBUG] [Thread-190371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:52:11.977 [DEBUG] [Thread-190371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:52:11.977 [DEBUG] [Thread-190371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:52:11.977 [DEBUG] [Thread-190371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:52:11.995 [INFO] [Thread-190371] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:52:11.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-14T18:52:11.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:52:12.808 [DEBUG] [Thread-190371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:52:12.809 [DEBUG] [Thread-190371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:52:12.856 [DEBUG] [Thread-190371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:52:12.857 [DEBUG] [Thread-190371] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:52:12.866 [DEBUG] [Thread-190371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:52:12.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:52:12.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-14T18:52: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') -> 00000000
2026-02-14T18:52:12.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:52:12.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:52:12.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:52:12.900 [DEBUG] [Thread-190371] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:52:16.146 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:52:16.147 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:52:17.706 [DEBUG] [Thread-190373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:52:32.759 [DEBUG] [Thread-190374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:52:37.303 [DEBUG] [Thread-190375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:52:42.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:52:42.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:52:42.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-14T18:52:45.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 52, 2), 12.04, 43.85, 0.0, 37.93, 13.7, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:52:45.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:52:02
2026-02-14T18:52:45.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:52:45.536 [DEBUG] [Thread-190376] [transport.py] [_log()] starting thread (client mode): 0xa2d6f040
2026-02-14T18:52:45.536 [DEBUG] [Thread-190376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:52:45.555 [DEBUG] [Thread-190376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:52:45.555 [INFO] [Thread-190376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:52:45.559 [DEBUG] [Thread-190376] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:52:45.559 [DEBUG] [Thread-190376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:52:45.559 [DEBUG] [Thread-190376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:52:45.559 [DEBUG] [Thread-190376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:52:45.559 [DEBUG] [Thread-190376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:52:45.559 [DEBUG] [Thread-190376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:52:45.559 [DEBUG] [Thread-190376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:52:45.559 [DEBUG] [Thread-190376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:52:45.559 [DEBUG] [Thread-190376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:52:45.559 [DEBUG] [Thread-190376] [transport.py] [_log()] client lang: <none>
2026-02-14T18:52:45.559 [DEBUG] [Thread-190376] [transport.py] [_log()] server lang: <none>
2026-02-14T18:52:45.559 [DEBUG] [Thread-190376] [transport.py] [_log()] kex follows: False
2026-02-14T18:52:45.559 [DEBUG] [Thread-190376] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:52:45.559 [DEBUG] [Thread-190376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:52:45.559 [DEBUG] [Thread-190376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:52:45.559 [DEBUG] [Thread-190376] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:52:45.559 [DEBUG] [Thread-190376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:52:45.559 [DEBUG] [Thread-190376] [transport.py] [_log()] Compression: none
2026-02-14T18:52:45.559 [DEBUG] [Thread-190376] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:52:45.574 [DEBUG] [Thread-190376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:52:45.575 [DEBUG] [Thread-190376] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:52:45.575 [DEBUG] [Thread-190376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:52:45.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:52:45.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:52:45.578 [DEBUG] [Thread-190376] [transport.py] [_log()] userauth is OK
2026-02-14T18:52:45.578 [DEBUG] [Thread-190376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:52:45.578 [DEBUG] [Thread-190376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:52:45.578 [DEBUG] [Thread-190376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:52:45.578 [DEBUG] [Thread-190376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:52:45.598 [INFO] [Thread-190376] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:52:45.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:52:46.220 [DEBUG] [Thread-190376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:52:46.220 [DEBUG] [Thread-190376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:52:46.220 [DEBUG] [Thread-190376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:52:46.261 [DEBUG] [Thread-190376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:52:46.261 [DEBUG] [Thread-190376] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:52:46.264 [DEBUG] [Thread-190376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:52:46.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:52:46.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:52:46.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:52:46.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:52:46.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:52:46.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:52:46.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:52:46.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:52:46.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:52:46.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.702893 -999.00  +13.50  30.90     50   +3.30 1 1 2 1 1   887    0 9.77 -23.48 ----- 24.8 30.9 162.2 37.6 15.4 -27.1 15.3 -26.3 16.1 -25.1 16.5 -27.1
2026-02-14T18:52:46.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:52:46.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:52:46.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.702893
2026-02-14T18:52:46.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:52:46.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:52:46.286 [DEBUG] [Thread-190376] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:52:46.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:52:46.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:52:46.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:52:46.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:52:02', tmtdew=12.04, humidity=43.85, cloud=0.0, wind=37.93, temperature=13.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:52:09.955', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:52: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-14T18:52:46.391 [DEBUG] [Thread-190379] [transport.py] [_log()] starting thread (client mode): 0xa2d6f430
2026-02-14T18:52:46.391 [DEBUG] [Thread-190379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:52:46.405 [DEBUG] [Thread-190379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:52:46.405 [INFO] [Thread-190379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:52:46.412 [DEBUG] [Thread-190379] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:52:46.412 [DEBUG] [Thread-190379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:52:46.413 [DEBUG] [Thread-190379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:52:46.413 [DEBUG] [Thread-190379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:52:46.413 [DEBUG] [Thread-190379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:52:46.413 [DEBUG] [Thread-190379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:52:46.413 [DEBUG] [Thread-190379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:52:46.413 [DEBUG] [Thread-190379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:52:46.413 [DEBUG] [Thread-190379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:52:46.413 [DEBUG] [Thread-190379] [transport.py] [_log()] client lang: <none>
2026-02-14T18:52:46.414 [DEBUG] [Thread-190379] [transport.py] [_log()] server lang: <none>
2026-02-14T18:52:46.414 [DEBUG] [Thread-190379] [transport.py] [_log()] kex follows: False
2026-02-14T18:52:46.414 [DEBUG] [Thread-190379] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:52:46.414 [DEBUG] [Thread-190379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:52:46.414 [DEBUG] [Thread-190379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:52:46.414 [DEBUG] [Thread-190379] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:52:46.414 [DEBUG] [Thread-190379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:52:46.414 [DEBUG] [Thread-190379] [transport.py] [_log()] Compression: none
2026-02-14T18:52:46.414 [DEBUG] [Thread-190379] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:52:46.471 [DEBUG] [Thread-190379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:52:46.472 [DEBUG] [Thread-190379] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:52:46.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:52:46.473 [DEBUG] [Thread-190379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:52:46.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:52:46.528 [DEBUG] [Thread-190379] [transport.py] [_log()] userauth is OK
2026-02-14T18:52:46.528 [DEBUG] [Thread-190379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:52:46.528 [DEBUG] [Thread-190379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:52:46.528 [DEBUG] [Thread-190379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:52:46.528 [DEBUG] [Thread-190379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:52:46.547 [INFO] [Thread-190379] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:52:46.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T18:52:46.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:52:47.404 [DEBUG] [Thread-190379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:52:47.404 [DEBUG] [Thread-190379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:52:47.452 [DEBUG] [Thread-190379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:52:47.452 [DEBUG] [Thread-190379] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:52:47.461 [DEBUG] [Thread-190379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:52:47.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:52:47.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')
2026-02-14T18:52:47.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:52:47.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:52:47.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:52:47.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:52:47.496 [DEBUG] [Thread-190379] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:52:47.793 [DEBUG] [Thread-190381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:53:02.841 [DEBUG] [Thread-190382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:53:16.287 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:53:16.288 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:53:17.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:53:17.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:53: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-14T18:53:17.880 [DEBUG] [Thread-190383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:53:19.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 52, 38), 12.39, 43.01, 0.0, 35.85, 14.21, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:53:19.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:52:38
2026-02-14T18:53:19.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:53:20.076 [DEBUG] [Thread-190384] [transport.py] [_log()] starting thread (client mode): 0xa57b39d0
2026-02-14T18:53:20.076 [DEBUG] [Thread-190384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:53:20.095 [DEBUG] [Thread-190384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:53:20.095 [INFO] [Thread-190384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:53:20.098 [DEBUG] [Thread-190384] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:53:20.098 [DEBUG] [Thread-190384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:53:20.098 [DEBUG] [Thread-190384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:53:20.098 [DEBUG] [Thread-190384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:53:20.098 [DEBUG] [Thread-190384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:53:20.098 [DEBUG] [Thread-190384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:53:20.098 [DEBUG] [Thread-190384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:53:20.098 [DEBUG] [Thread-190384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:53:20.098 [DEBUG] [Thread-190384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:53:20.098 [DEBUG] [Thread-190384] [transport.py] [_log()] client lang: <none>
2026-02-14T18:53:20.098 [DEBUG] [Thread-190384] [transport.py] [_log()] server lang: <none>
2026-02-14T18:53:20.098 [DEBUG] [Thread-190384] [transport.py] [_log()] kex follows: False
2026-02-14T18:53:20.098 [DEBUG] [Thread-190384] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:53:20.098 [DEBUG] [Thread-190384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:53:20.099 [DEBUG] [Thread-190384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:53:20.099 [DEBUG] [Thread-190384] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:53:20.099 [DEBUG] [Thread-190384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:53:20.099 [DEBUG] [Thread-190384] [transport.py] [_log()] Compression: none
2026-02-14T18:53:20.099 [DEBUG] [Thread-190384] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:53:20.118 [DEBUG] [Thread-190384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:53:20.120 [DEBUG] [Thread-190384] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:53:20.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:53:20.121 [DEBUG] [Thread-190384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:53:20.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:53:20.123 [DEBUG] [Thread-190384] [transport.py] [_log()] userauth is OK
2026-02-14T18:53:20.124 [DEBUG] [Thread-190384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:53:20.124 [DEBUG] [Thread-190384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:53:20.124 [DEBUG] [Thread-190384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:53:20.124 [DEBUG] [Thread-190384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:53:20.142 [INFO] [Thread-190384] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:53:20.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:53:20.730 [DEBUG] [Thread-190384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:53:20.731 [DEBUG] [Thread-190384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:53:20.731 [DEBUG] [Thread-190384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:53:20.771 [DEBUG] [Thread-190384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:53:20.771 [DEBUG] [Thread-190384] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:53:20.774 [DEBUG] [Thread-190384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:53:20.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:53:20.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:53:20.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:53:20.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:53:20.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:53:20.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:53:20.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:53:20.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:53:20.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:53:20.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.703588 -999.00  +13.50  23.26     50   +3.30 1 1 1 1 1   887    0 9.69 -23.97 ----- 26.5 23.3 152.4 35.0 15.4 -27.0 15.2 -26.4 16.0 -24.9 16.4 -26.6
2026-02-14T18:53:20.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:53:20.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:53:20.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.703588
2026-02-14T18:53:20.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:53:20.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:53:20.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:53:20.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:53:20.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:53:20.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:52:38', tmtdew=12.39, humidity=43.01, cloud=0.0, wind=35.85, temperature=14.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:53:10.003', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:53:20.800 [DEBUG] [Thread-190384] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:53:20.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-14T18:53:21.054 [DEBUG] [Thread-190387] [transport.py] [_log()] starting thread (client mode): 0xa57c1840
2026-02-14T18:53:21.055 [DEBUG] [Thread-190387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:53:21.068 [DEBUG] [Thread-190387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:53:21.068 [INFO] [Thread-190387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:53:21.076 [DEBUG] [Thread-190387] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:53:21.076 [DEBUG] [Thread-190387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:53:21.076 [DEBUG] [Thread-190387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:53:21.076 [DEBUG] [Thread-190387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:53:21.076 [DEBUG] [Thread-190387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:53:21.077 [DEBUG] [Thread-190387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:53:21.077 [DEBUG] [Thread-190387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:53:21.077 [DEBUG] [Thread-190387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:53:21.077 [DEBUG] [Thread-190387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:53:21.077 [DEBUG] [Thread-190387] [transport.py] [_log()] client lang: <none>
2026-02-14T18:53:21.077 [DEBUG] [Thread-190387] [transport.py] [_log()] server lang: <none>
2026-02-14T18:53:21.077 [DEBUG] [Thread-190387] [transport.py] [_log()] kex follows: False
2026-02-14T18:53:21.077 [DEBUG] [Thread-190387] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:53:21.078 [DEBUG] [Thread-190387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:53:21.078 [DEBUG] [Thread-190387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:53:21.078 [DEBUG] [Thread-190387] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:53:21.078 [DEBUG] [Thread-190387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:53:21.078 [DEBUG] [Thread-190387] [transport.py] [_log()] Compression: none
2026-02-14T18:53:21.078 [DEBUG] [Thread-190387] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:53:21.138 [DEBUG] [Thread-190387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:53:21.138 [DEBUG] [Thread-190387] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:53:21.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:53:21.140 [DEBUG] [Thread-190387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:53:21.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:53:21.197 [DEBUG] [Thread-190387] [transport.py] [_log()] userauth is OK
2026-02-14T18:53:21.198 [DEBUG] [Thread-190387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:53:21.198 [DEBUG] [Thread-190387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:53:21.198 [DEBUG] [Thread-190387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:53:21.198 [DEBUG] [Thread-190387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:53:21.216 [INFO] [Thread-190387] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:53:21.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T18:53:21.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:53:22.027 [DEBUG] [Thread-190387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:53:22.028 [DEBUG] [Thread-190387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:53:22.075 [DEBUG] [Thread-190387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:53:22.076 [DEBUG] [Thread-190387] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:53:22.085 [DEBUG] [Thread-190387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:53:22.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:53:22.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-14T18:53:22.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:53:22.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:53:22.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:53:22.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:53:22.122 [DEBUG] [Thread-190387] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:53:32.914 [DEBUG] [Thread-190389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:53:37.338 [DEBUG] [Thread-190390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:53:47.973 [DEBUG] [Thread-190391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:53:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:53:52.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:53:52.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:53:54.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 53, 13), 11.93, 44.55, 0.0, 36.7, 13.71, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:53:54.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:53:13
2026-02-14T18:53:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:53:54.781 [DEBUG] [Thread-190392] [transport.py] [_log()] starting thread (client mode): 0xa57d7f40
2026-02-14T18:53:54.781 [DEBUG] [Thread-190392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:53:54.792 [DEBUG] [Thread-190392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:53:54.792 [INFO] [Thread-190392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:53:54.793 [DEBUG] [Thread-190392] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:53:54.794 [DEBUG] [Thread-190392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:53:54.794 [DEBUG] [Thread-190392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:53:54.794 [DEBUG] [Thread-190392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:53:54.794 [DEBUG] [Thread-190392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:53:54.794 [DEBUG] [Thread-190392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:53:54.794 [DEBUG] [Thread-190392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:53:54.794 [DEBUG] [Thread-190392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:53:54.794 [DEBUG] [Thread-190392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:53:54.794 [DEBUG] [Thread-190392] [transport.py] [_log()] client lang: <none>
2026-02-14T18:53:54.794 [DEBUG] [Thread-190392] [transport.py] [_log()] server lang: <none>
2026-02-14T18:53:54.794 [DEBUG] [Thread-190392] [transport.py] [_log()] kex follows: False
2026-02-14T18:53:54.794 [DEBUG] [Thread-190392] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:53:54.794 [DEBUG] [Thread-190392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:53:54.794 [DEBUG] [Thread-190392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:53:54.794 [DEBUG] [Thread-190392] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:53:54.794 [DEBUG] [Thread-190392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:53:54.794 [DEBUG] [Thread-190392] [transport.py] [_log()] Compression: none
2026-02-14T18:53:54.794 [DEBUG] [Thread-190392] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:53:54.801 [DEBUG] [Thread-190392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:53:54.801 [DEBUG] [Thread-190392] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:53:54.801 [DEBUG] [Thread-190392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:53:54.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:53:54.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:53:54.802 [DEBUG] [Thread-190392] [transport.py] [_log()] userauth is OK
2026-02-14T18:53:54.802 [DEBUG] [Thread-190392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:53:54.802 [DEBUG] [Thread-190392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:53:54.802 [DEBUG] [Thread-190392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:53:54.802 [DEBUG] [Thread-190392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:53:54.820 [INFO] [Thread-190392] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:53:54.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:53:55.401 [DEBUG] [Thread-190392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:53:55.401 [DEBUG] [Thread-190392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:53:55.402 [DEBUG] [Thread-190392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:53:55.442 [DEBUG] [Thread-190392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:53:55.443 [DEBUG] [Thread-190392] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:53:55.445 [DEBUG] [Thread-190392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:53:55.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:53:55.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:53:55.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:53:55.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:53:55.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:53:55.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:53:55.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:53:55.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:53:55.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:53:55.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.703935 -999.00  +13.40  25.27     50   +3.30 1 1 1 1 1   887    0 9.75 -21.95 ----- 31.7 25.3 155.9 45.4 15.3 -27.0 15.2 -25.8 16.0 -25.0 16.3 -27.3
2026-02-14T18:53:55.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:53:55.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:53:55.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.703935
2026-02-14T18:53:55.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:53:55.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:53:55.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:53:55.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:53:55.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:53:55.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:53:13', tmtdew=11.93, humidity=44.55, cloud=0.0, wind=36.7, temperature=13.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:53:39.984', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:53:55.464 [DEBUG] [Thread-190392] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:53:55.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-14T18:53:55.566 [DEBUG] [Thread-190395] [transport.py] [_log()] starting thread (client mode): 0xa57d5060
2026-02-14T18:53:55.566 [DEBUG] [Thread-190395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:53:55.580 [DEBUG] [Thread-190395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:53:55.581 [INFO] [Thread-190395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:53:55.588 [DEBUG] [Thread-190395] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:53:55.589 [DEBUG] [Thread-190395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:53:55.589 [DEBUG] [Thread-190395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:53:55.589 [DEBUG] [Thread-190395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:53:55.589 [DEBUG] [Thread-190395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:53:55.589 [DEBUG] [Thread-190395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:53:55.589 [DEBUG] [Thread-190395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:53:55.589 [DEBUG] [Thread-190395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:53:55.590 [DEBUG] [Thread-190395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:53:55.590 [DEBUG] [Thread-190395] [transport.py] [_log()] client lang: <none>
2026-02-14T18:53:55.590 [DEBUG] [Thread-190395] [transport.py] [_log()] server lang: <none>
2026-02-14T18:53:55.590 [DEBUG] [Thread-190395] [transport.py] [_log()] kex follows: False
2026-02-14T18:53:55.590 [DEBUG] [Thread-190395] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:53:55.590 [DEBUG] [Thread-190395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:53:55.590 [DEBUG] [Thread-190395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:53:55.590 [DEBUG] [Thread-190395] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:53:55.591 [DEBUG] [Thread-190395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:53:55.591 [DEBUG] [Thread-190395] [transport.py] [_log()] Compression: none
2026-02-14T18:53:55.591 [DEBUG] [Thread-190395] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:53:55.646 [DEBUG] [Thread-190395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:53:55.646 [DEBUG] [Thread-190395] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:53:55.647 [DEBUG] [Thread-190395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:53:55.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:53:55.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:53:55.702 [DEBUG] [Thread-190395] [transport.py] [_log()] userauth is OK
2026-02-14T18:53:55.702 [DEBUG] [Thread-190395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:53:55.703 [DEBUG] [Thread-190395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:53:55.703 [DEBUG] [Thread-190395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:53:55.703 [DEBUG] [Thread-190395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:53:55.722 [INFO] [Thread-190395] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:53:55.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-14T18:53:55.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:53:56.532 [DEBUG] [Thread-190395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:53:56.532 [DEBUG] [Thread-190395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:53:56.580 [DEBUG] [Thread-190395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:53:56.581 [DEBUG] [Thread-190395] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:53:56.590 [DEBUG] [Thread-190395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:53:56.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:53:56.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:53:56.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:53:56.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:53:56.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:53:56.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:53:56.627 [DEBUG] [Thread-190395] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:54:03.008 [DEBUG] [Thread-190397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:54:16.439 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:54:16.440 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:54:18.063 [DEBUG] [Thread-190398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:54:26.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:54:26.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:54:26.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-14T18:54:28.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 53, 49), 11.89, 44.52, 0.0, 39.31, 13.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:54:28.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:53:49
2026-02-14T18:54:29.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:54:29.318 [DEBUG] [Thread-190399] [transport.py] [_log()] starting thread (client mode): 0xa2deea10
2026-02-14T18:54:29.318 [DEBUG] [Thread-190399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:54:29.338 [DEBUG] [Thread-190399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:54:29.338 [INFO] [Thread-190399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:54:29.341 [DEBUG] [Thread-190399] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:54:29.342 [DEBUG] [Thread-190399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:54:29.342 [DEBUG] [Thread-190399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:54:29.342 [DEBUG] [Thread-190399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:54:29.342 [DEBUG] [Thread-190399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:54:29.342 [DEBUG] [Thread-190399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:54:29.342 [DEBUG] [Thread-190399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:54:29.342 [DEBUG] [Thread-190399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:54:29.342 [DEBUG] [Thread-190399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:54:29.342 [DEBUG] [Thread-190399] [transport.py] [_log()] client lang: <none>
2026-02-14T18:54:29.342 [DEBUG] [Thread-190399] [transport.py] [_log()] server lang: <none>
2026-02-14T18:54:29.342 [DEBUG] [Thread-190399] [transport.py] [_log()] kex follows: False
2026-02-14T18:54:29.342 [DEBUG] [Thread-190399] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:54:29.342 [DEBUG] [Thread-190399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:54:29.342 [DEBUG] [Thread-190399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:54:29.342 [DEBUG] [Thread-190399] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:54:29.342 [DEBUG] [Thread-190399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:54:29.342 [DEBUG] [Thread-190399] [transport.py] [_log()] Compression: none
2026-02-14T18:54:29.342 [DEBUG] [Thread-190399] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:54:29.362 [DEBUG] [Thread-190399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:54:29.362 [DEBUG] [Thread-190399] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:54:29.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:54:29.363 [DEBUG] [Thread-190399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:54:29.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:54:29.366 [DEBUG] [Thread-190399] [transport.py] [_log()] userauth is OK
2026-02-14T18:54:29.366 [DEBUG] [Thread-190399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:54:29.366 [DEBUG] [Thread-190399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:54:29.366 [DEBUG] [Thread-190399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:54:29.366 [DEBUG] [Thread-190399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:54:29.390 [INFO] [Thread-190399] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:54:29.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:54:30.034 [DEBUG] [Thread-190399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:54:30.034 [DEBUG] [Thread-190399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:54:30.035 [DEBUG] [Thread-190399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:54:30.075 [DEBUG] [Thread-190399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:54:30.076 [DEBUG] [Thread-190399] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:54:30.079 [DEBUG] [Thread-190399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:54:30.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:54:30.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:54:30.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:54:30.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:54:30.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:54:30.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:54:30.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:54:30.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:54:30.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:54:30.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.704282 -999.00  +13.40  23.97     50   +3.30 1 1 1 1 1   887    0 9.56 -23.67 ----- 24.0 24.0 163.2 45.5 15.2 -27.1 15.2 -26.2 15.9 -25.4 16.3 -27.2
2026-02-14T18:54:30.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:54:30.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:54:30.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.704282
2026-02-14T18:54:30.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:54:30.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:54:30.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:54:30.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:54:30.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:54:30.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:53:49', tmtdew=11.89, humidity=44.52, cloud=0.0, wind=39.31, temperature=13.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:54:09.965', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:54:30.108 [DEBUG] [Thread-190399] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:54:30.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-14T18:54:30.213 [DEBUG] [Thread-190402] [transport.py] [_log()] starting thread (client mode): 0xa57d4bb0
2026-02-14T18:54:30.213 [DEBUG] [Thread-190402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:54:30.228 [DEBUG] [Thread-190402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:54:30.228 [INFO] [Thread-190402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:54:30.236 [DEBUG] [Thread-190402] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:54:30.236 [DEBUG] [Thread-190402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:54:30.236 [DEBUG] [Thread-190402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:54:30.236 [DEBUG] [Thread-190402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:54:30.236 [DEBUG] [Thread-190402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:54:30.236 [DEBUG] [Thread-190402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:54:30.236 [DEBUG] [Thread-190402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:54:30.236 [DEBUG] [Thread-190402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:54:30.236 [DEBUG] [Thread-190402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:54:30.236 [DEBUG] [Thread-190402] [transport.py] [_log()] client lang: <none>
2026-02-14T18:54:30.237 [DEBUG] [Thread-190402] [transport.py] [_log()] server lang: <none>
2026-02-14T18:54:30.237 [DEBUG] [Thread-190402] [transport.py] [_log()] kex follows: False
2026-02-14T18:54:30.237 [DEBUG] [Thread-190402] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:54:30.237 [DEBUG] [Thread-190402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:54:30.237 [DEBUG] [Thread-190402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:54:30.237 [DEBUG] [Thread-190402] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:54:30.237 [DEBUG] [Thread-190402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:54:30.237 [DEBUG] [Thread-190402] [transport.py] [_log()] Compression: none
2026-02-14T18:54:30.237 [DEBUG] [Thread-190402] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:54:30.295 [DEBUG] [Thread-190402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:54:30.295 [DEBUG] [Thread-190402] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:54:30.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:54:30.296 [DEBUG] [Thread-190402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:54:30.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:54:30.351 [DEBUG] [Thread-190402] [transport.py] [_log()] userauth is OK
2026-02-14T18:54:30.351 [DEBUG] [Thread-190402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:54:30.351 [DEBUG] [Thread-190402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:54:30.351 [DEBUG] [Thread-190402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:54:30.351 [DEBUG] [Thread-190402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:54:30.372 [INFO] [Thread-190402] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:54:30.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-14T18:54:30.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:54:31.213 [DEBUG] [Thread-190402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:54:31.214 [DEBUG] [Thread-190402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:54:31.261 [DEBUG] [Thread-190402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:54:31.262 [DEBUG] [Thread-190402] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:54:31.271 [DEBUG] [Thread-190402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:54:31.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:54:31.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-14T18:54:31.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:54:31.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:54:31.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:54:31.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:54:31.308 [DEBUG] [Thread-190402] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:54:33.097 [DEBUG] [Thread-190404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:54:37.392 [DEBUG] [Thread-190405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:54:48.150 [DEBUG] [Thread-190406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:55:01.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:55:01.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:55:01.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-14T18:55:03.184 [DEBUG] [Thread-190407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:55:04.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 54, 25), 11.88, 44.55, 0.0, 37.03, 13.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:55:04.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:54:25
2026-02-14T18:55:04.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:55:04.683 [DEBUG] [Thread-190408] [transport.py] [_log()] starting thread (client mode): 0xa2d7b5b0
2026-02-14T18:55:04.684 [DEBUG] [Thread-190408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:55:04.705 [DEBUG] [Thread-190408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:55:04.705 [INFO] [Thread-190408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:55:04.709 [DEBUG] [Thread-190408] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:55:04.709 [DEBUG] [Thread-190408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:55:04.709 [DEBUG] [Thread-190408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:55:04.709 [DEBUG] [Thread-190408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:55:04.709 [DEBUG] [Thread-190408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:55:04.709 [DEBUG] [Thread-190408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:55:04.709 [DEBUG] [Thread-190408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:55:04.709 [DEBUG] [Thread-190408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:55:04.709 [DEBUG] [Thread-190408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:55:04.709 [DEBUG] [Thread-190408] [transport.py] [_log()] client lang: <none>
2026-02-14T18:55:04.709 [DEBUG] [Thread-190408] [transport.py] [_log()] server lang: <none>
2026-02-14T18:55:04.709 [DEBUG] [Thread-190408] [transport.py] [_log()] kex follows: False
2026-02-14T18:55:04.709 [DEBUG] [Thread-190408] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:55:04.709 [DEBUG] [Thread-190408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:55:04.709 [DEBUG] [Thread-190408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:55:04.709 [DEBUG] [Thread-190408] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:55:04.709 [DEBUG] [Thread-190408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:55:04.709 [DEBUG] [Thread-190408] [transport.py] [_log()] Compression: none
2026-02-14T18:55:04.709 [DEBUG] [Thread-190408] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:55:04.727 [DEBUG] [Thread-190408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:55:04.727 [DEBUG] [Thread-190408] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:55:04.728 [DEBUG] [Thread-190408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:55:04.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:55:04.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:55:04.730 [DEBUG] [Thread-190408] [transport.py] [_log()] userauth is OK
2026-02-14T18:55:04.730 [DEBUG] [Thread-190408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:55:04.730 [DEBUG] [Thread-190408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:55:04.730 [DEBUG] [Thread-190408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:55:04.730 [DEBUG] [Thread-190408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:55:04.755 [INFO] [Thread-190408] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:55:04.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:55:05.497 [DEBUG] [Thread-190408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:55:05.497 [DEBUG] [Thread-190408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:55:05.497 [DEBUG] [Thread-190408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:55:05.538 [DEBUG] [Thread-190408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:55:05.538 [DEBUG] [Thread-190408] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:55:05.542 [DEBUG] [Thread-190408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:55:05.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:55:05.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:55:05.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:55:05.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:55:05.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:55:05.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:55:05.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:55:05.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:55:05.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:55:05.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.704629 -999.00  +13.40  29.08     50   +3.30 1 1 1 1 1   887    0 9.82 -23.99 ----- 40.5 29.1 167.2 47.3 15.2 -27.2 15.1 -26.8 15.9 -25.5 16.3 -27.7
2026-02-14T18:55:05.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:55:05.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:55:05.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.704629
2026-02-14T18:55:05.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:55:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:55:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:55:05.571 [DEBUG] [Thread-190408] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:55:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:55:05.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:55:05.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:54:25', tmtdew=11.88, humidity=44.55, cloud=0.0, wind=37.03, temperature=13.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:54:39.946', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:55: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-14T18:55:05.667 [DEBUG] [Thread-190411] [transport.py] [_log()] starting thread (client mode): 0xa57703a0
2026-02-14T18:55:05.667 [DEBUG] [Thread-190411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:55:05.681 [DEBUG] [Thread-190411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:55:05.681 [INFO] [Thread-190411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:55:05.689 [DEBUG] [Thread-190411] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:55:05.689 [DEBUG] [Thread-190411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:55:05.690 [DEBUG] [Thread-190411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:55:05.690 [DEBUG] [Thread-190411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:55:05.690 [DEBUG] [Thread-190411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:55:05.690 [DEBUG] [Thread-190411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:55:05.690 [DEBUG] [Thread-190411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:55:05.690 [DEBUG] [Thread-190411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:55:05.690 [DEBUG] [Thread-190411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:55:05.690 [DEBUG] [Thread-190411] [transport.py] [_log()] client lang: <none>
2026-02-14T18:55:05.690 [DEBUG] [Thread-190411] [transport.py] [_log()] server lang: <none>
2026-02-14T18:55:05.690 [DEBUG] [Thread-190411] [transport.py] [_log()] kex follows: False
2026-02-14T18:55:05.690 [DEBUG] [Thread-190411] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:55:05.690 [DEBUG] [Thread-190411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:55:05.690 [DEBUG] [Thread-190411] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:55:05.690 [DEBUG] [Thread-190411] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:55:05.690 [DEBUG] [Thread-190411] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:55:05.690 [DEBUG] [Thread-190411] [transport.py] [_log()] Compression: none
2026-02-14T18:55:05.690 [DEBUG] [Thread-190411] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:55:05.748 [DEBUG] [Thread-190411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:55:05.749 [DEBUG] [Thread-190411] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:55:05.749 [DEBUG] [Thread-190411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:55:05.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:55:05.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:55:05.813 [DEBUG] [Thread-190411] [transport.py] [_log()] userauth is OK
2026-02-14T18:55:05.813 [DEBUG] [Thread-190411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:55:05.813 [DEBUG] [Thread-190411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:55:05.813 [DEBUG] [Thread-190411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:55:05.814 [DEBUG] [Thread-190411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:55:05.839 [INFO] [Thread-190411] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:55:05.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-14T18:55:05.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:55:06.645 [DEBUG] [Thread-190411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:55:06.646 [DEBUG] [Thread-190411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:55:06.693 [DEBUG] [Thread-190411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:55:06.693 [DEBUG] [Thread-190411] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:55:06.703 [DEBUG] [Thread-190411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:55:06.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:55: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-14T18:55: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-14T18:55:06.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:55:06.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:55:06.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:55:06.741 [DEBUG] [Thread-190411] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:55:16.582 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:55:16.583 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:55:18.225 [DEBUG] [Thread-190413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:55:33.274 [DEBUG] [Thread-190414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:55:36.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:55:36.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:55:36.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:55:37.436 [DEBUG] [Thread-190415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:55:39.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 55), 11.89, 44.5, 0.0, 43.26, 13.66, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:55:39.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:55:00
2026-02-14T18:55:39.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:55:39.841 [DEBUG] [Thread-190416] [transport.py] [_log()] starting thread (client mode): 0xa57727d0
2026-02-14T18:55:39.841 [DEBUG] [Thread-190416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:55:39.862 [DEBUG] [Thread-190416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:55:39.862 [INFO] [Thread-190416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:55:39.865 [DEBUG] [Thread-190416] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:55:39.865 [DEBUG] [Thread-190416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:55:39.865 [DEBUG] [Thread-190416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:55:39.865 [DEBUG] [Thread-190416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:55:39.866 [DEBUG] [Thread-190416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:55:39.866 [DEBUG] [Thread-190416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:55:39.866 [DEBUG] [Thread-190416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:55:39.866 [DEBUG] [Thread-190416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:55:39.866 [DEBUG] [Thread-190416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:55:39.866 [DEBUG] [Thread-190416] [transport.py] [_log()] client lang: <none>
2026-02-14T18:55:39.866 [DEBUG] [Thread-190416] [transport.py] [_log()] server lang: <none>
2026-02-14T18:55:39.866 [DEBUG] [Thread-190416] [transport.py] [_log()] kex follows: False
2026-02-14T18:55:39.866 [DEBUG] [Thread-190416] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:55:39.866 [DEBUG] [Thread-190416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:55:39.866 [DEBUG] [Thread-190416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:55:39.866 [DEBUG] [Thread-190416] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:55:39.866 [DEBUG] [Thread-190416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:55:39.866 [DEBUG] [Thread-190416] [transport.py] [_log()] Compression: none
2026-02-14T18:55:39.867 [DEBUG] [Thread-190416] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:55:39.884 [DEBUG] [Thread-190416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:55:39.885 [DEBUG] [Thread-190416] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:55:39.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:55:39.886 [DEBUG] [Thread-190416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:55:39.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:55:39.888 [DEBUG] [Thread-190416] [transport.py] [_log()] userauth is OK
2026-02-14T18:55:39.888 [DEBUG] [Thread-190416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:55:39.889 [DEBUG] [Thread-190416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:55:39.889 [DEBUG] [Thread-190416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:55:39.889 [DEBUG] [Thread-190416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:55:39.924 [INFO] [Thread-190416] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:55:39.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:55:40.542 [DEBUG] [Thread-190416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:55:40.542 [DEBUG] [Thread-190416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:55:40.542 [DEBUG] [Thread-190416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:55:40.583 [DEBUG] [Thread-190416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:55:40.584 [DEBUG] [Thread-190416] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:55:40.587 [DEBUG] [Thread-190416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:55:40.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:55:40.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:55:40.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:55:40.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:55:40.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:55:40.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:55:40.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:55:40.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:55:40.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:55:40.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.704976 -999.00  +13.30  31.56     50   +3.20 1 1 2 1 1   887    0 9.69 -26.84 ----- 35.4 31.6 160.8 46.6 15.2 -27.3 15.1 -26.0 15.8 -25.9 16.1 -27.7
2026-02-14T18:55:40.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:55:40.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:55:40.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.704976
2026-02-14T18:55:40.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:55:40.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:55:40.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:55:40.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:55:40.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:55:40.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:55:00', tmtdew=11.89, humidity=44.5, cloud=0.0, wind=43.26, temperature=13.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:55:09.926', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:55:40.614 [DEBUG] [Thread-190416] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:55:40.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T18:55:40.714 [DEBUG] [Thread-190419] [transport.py] [_log()] starting thread (client mode): 0xa2d6c1c0
2026-02-14T18:55:40.714 [DEBUG] [Thread-190419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:55:40.729 [DEBUG] [Thread-190419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:55:40.729 [INFO] [Thread-190419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:55:40.737 [DEBUG] [Thread-190419] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:55:40.737 [DEBUG] [Thread-190419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:55:40.737 [DEBUG] [Thread-190419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:55:40.737 [DEBUG] [Thread-190419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:55:40.737 [DEBUG] [Thread-190419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:55:40.737 [DEBUG] [Thread-190419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:55:40.737 [DEBUG] [Thread-190419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:55:40.737 [DEBUG] [Thread-190419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:55:40.737 [DEBUG] [Thread-190419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:55:40.737 [DEBUG] [Thread-190419] [transport.py] [_log()] client lang: <none>
2026-02-14T18:55:40.737 [DEBUG] [Thread-190419] [transport.py] [_log()] server lang: <none>
2026-02-14T18:55:40.738 [DEBUG] [Thread-190419] [transport.py] [_log()] kex follows: False
2026-02-14T18:55:40.738 [DEBUG] [Thread-190419] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:55:40.738 [DEBUG] [Thread-190419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:55:40.738 [DEBUG] [Thread-190419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:55:40.738 [DEBUG] [Thread-190419] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:55:40.738 [DEBUG] [Thread-190419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:55:40.738 [DEBUG] [Thread-190419] [transport.py] [_log()] Compression: none
2026-02-14T18:55:40.738 [DEBUG] [Thread-190419] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:55:40.795 [DEBUG] [Thread-190419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:55:40.796 [DEBUG] [Thread-190419] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:55:40.797 [DEBUG] [Thread-190419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:55:40.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:55:40.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:55:40.851 [DEBUG] [Thread-190419] [transport.py] [_log()] userauth is OK
2026-02-14T18:55:40.852 [DEBUG] [Thread-190419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:55:40.852 [DEBUG] [Thread-190419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:55:40.852 [DEBUG] [Thread-190419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:55:40.852 [DEBUG] [Thread-190419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:55:40.871 [INFO] [Thread-190419] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:55:40.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T18:55:40.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:55:41.700 [DEBUG] [Thread-190419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:55:41.700 [DEBUG] [Thread-190419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:55:41.748 [DEBUG] [Thread-190419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:55:41.749 [DEBUG] [Thread-190419] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:55:41.758 [DEBUG] [Thread-190419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:55:41.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:55:41.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:55:41.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:55:41.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:55:41.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:55:41.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:55:41.794 [DEBUG] [Thread-190419] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:55:48.308 [DEBUG] [Thread-190421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:56:03.349 [DEBUG] [Thread-190422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:56:11.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:56:11.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:56:11.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-14T18:56:13.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 55, 36), 12.36, 43.07, 0.0, 46.11, 14.18, 0, 0, 0, 2, 1, 0),)
2026-02-14T18:56:13.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:55:36
2026-02-14T18:56:14.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:56:14.500 [DEBUG] [Thread-190423] [transport.py] [_log()] starting thread (client mode): 0xa2d782e0
2026-02-14T18:56:14.500 [DEBUG] [Thread-190423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:56:14.520 [DEBUG] [Thread-190423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:56:14.520 [INFO] [Thread-190423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:56:14.523 [DEBUG] [Thread-190423] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:56:14.523 [DEBUG] [Thread-190423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:56:14.523 [DEBUG] [Thread-190423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:56:14.523 [DEBUG] [Thread-190423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:56:14.523 [DEBUG] [Thread-190423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:56:14.523 [DEBUG] [Thread-190423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:56:14.523 [DEBUG] [Thread-190423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:56:14.523 [DEBUG] [Thread-190423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:56:14.523 [DEBUG] [Thread-190423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:56:14.523 [DEBUG] [Thread-190423] [transport.py] [_log()] client lang: <none>
2026-02-14T18:56:14.523 [DEBUG] [Thread-190423] [transport.py] [_log()] server lang: <none>
2026-02-14T18:56:14.523 [DEBUG] [Thread-190423] [transport.py] [_log()] kex follows: False
2026-02-14T18:56:14.523 [DEBUG] [Thread-190423] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:56:14.523 [DEBUG] [Thread-190423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:56:14.523 [DEBUG] [Thread-190423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:56:14.524 [DEBUG] [Thread-190423] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:56:14.524 [DEBUG] [Thread-190423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:56:14.524 [DEBUG] [Thread-190423] [transport.py] [_log()] Compression: none
2026-02-14T18:56:14.524 [DEBUG] [Thread-190423] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:56:14.540 [DEBUG] [Thread-190423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:56:14.541 [DEBUG] [Thread-190423] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:56:14.541 [DEBUG] [Thread-190423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:56:14.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:56:14.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:56:14.543 [DEBUG] [Thread-190423] [transport.py] [_log()] userauth is OK
2026-02-14T18:56:14.544 [DEBUG] [Thread-190423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:56:14.544 [DEBUG] [Thread-190423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:56:14.544 [DEBUG] [Thread-190423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:56:14.544 [DEBUG] [Thread-190423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:56:14.560 [INFO] [Thread-190423] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:56:14.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:56:15.203 [DEBUG] [Thread-190423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:56:15.203 [DEBUG] [Thread-190423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:56:15.204 [DEBUG] [Thread-190423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:56:15.244 [DEBUG] [Thread-190423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:56:15.244 [DEBUG] [Thread-190423] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:56:15.247 [DEBUG] [Thread-190423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:56:15.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:56:15.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:56:15.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:56:15.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:56:15.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:56:15.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:56:15.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:56:15.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:56:15.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:56:15.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.705324 -999.00  +13.30  25.61     50   +3.30 1 1 1 1 1   887    0 9.83 -27.28 ----- 23.8 25.6 162.2 39.0 15.2 -27.0 15.1 -26.5 15.8 -25.7 16.1 -27.3
2026-02-14T18:56:15.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:56:15.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:56:15.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.705324
2026-02-14T18:56:15.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:56:15.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:56:15.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:56:15.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:56:15.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:56:15.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:55:36', tmtdew=12.36, humidity=43.07, cloud=0.0, wind=46.11, temperature=14.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:55:39.994', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:56:15.276 [DEBUG] [Thread-190423] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:56:15.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-14T18:56:15.371 [DEBUG] [Thread-190426] [transport.py] [_log()] starting thread (client mode): 0xa57e24a0
2026-02-14T18:56:15.371 [DEBUG] [Thread-190426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:56:15.386 [DEBUG] [Thread-190426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:56:15.386 [INFO] [Thread-190426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:56:15.394 [DEBUG] [Thread-190426] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:56:15.394 [DEBUG] [Thread-190426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:56:15.394 [DEBUG] [Thread-190426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:56:15.394 [DEBUG] [Thread-190426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:56:15.394 [DEBUG] [Thread-190426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:56:15.394 [DEBUG] [Thread-190426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:56:15.395 [DEBUG] [Thread-190426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:56:15.395 [DEBUG] [Thread-190426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:56:15.395 [DEBUG] [Thread-190426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:56:15.395 [DEBUG] [Thread-190426] [transport.py] [_log()] client lang: <none>
2026-02-14T18:56:15.395 [DEBUG] [Thread-190426] [transport.py] [_log()] server lang: <none>
2026-02-14T18:56:15.395 [DEBUG] [Thread-190426] [transport.py] [_log()] kex follows: False
2026-02-14T18:56:15.395 [DEBUG] [Thread-190426] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:56:15.395 [DEBUG] [Thread-190426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:56:15.395 [DEBUG] [Thread-190426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:56:15.395 [DEBUG] [Thread-190426] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:56:15.395 [DEBUG] [Thread-190426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:56:15.395 [DEBUG] [Thread-190426] [transport.py] [_log()] Compression: none
2026-02-14T18:56:15.395 [DEBUG] [Thread-190426] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:56:15.452 [DEBUG] [Thread-190426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:56:15.453 [DEBUG] [Thread-190426] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:56:15.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:56:15.454 [DEBUG] [Thread-190426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:56:15.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:56:15.508 [DEBUG] [Thread-190426] [transport.py] [_log()] userauth is OK
2026-02-14T18:56:15.508 [DEBUG] [Thread-190426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:56:15.509 [DEBUG] [Thread-190426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:56:15.509 [DEBUG] [Thread-190426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:56:15.509 [DEBUG] [Thread-190426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:56:15.527 [INFO] [Thread-190426] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:56:15.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-14T18:56:15.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:56:16.352 [DEBUG] [Thread-190426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:56:16.353 [DEBUG] [Thread-190426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:56:16.400 [DEBUG] [Thread-190426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:56:16.400 [DEBUG] [Thread-190426] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:56:16.410 [DEBUG] [Thread-190426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:56:16.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:56:16.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-14T18:56:16.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:56:16.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:56:16.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:56:16.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:56:16.447 [DEBUG] [Thread-190426] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:56:16.728 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:56:16.729 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:56:18.386 [DEBUG] [Thread-190428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:56:33.438 [DEBUG] [Thread-190429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:56:37.477 [DEBUG] [Thread-190430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:56:46.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:56:46.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:56:46.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-14T18:56:48.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 56, 13), 11.96, 44.47, 0.0, 41.39, 13.67, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:56:48.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:56:13
2026-02-14T18:56:48.481 [DEBUG] [Thread-190431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:56:48.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:56:48.907 [DEBUG] [Thread-190432] [transport.py] [_log()] starting thread (client mode): 0xa57e2c50
2026-02-14T18:56:48.907 [DEBUG] [Thread-190432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:56:48.927 [DEBUG] [Thread-190432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:56:48.927 [INFO] [Thread-190432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:56:48.930 [DEBUG] [Thread-190432] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:56:48.930 [DEBUG] [Thread-190432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:56:48.930 [DEBUG] [Thread-190432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:56:48.930 [DEBUG] [Thread-190432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:56:48.930 [DEBUG] [Thread-190432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:56:48.930 [DEBUG] [Thread-190432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:56:48.931 [DEBUG] [Thread-190432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:56:48.931 [DEBUG] [Thread-190432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:56:48.931 [DEBUG] [Thread-190432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:56:48.931 [DEBUG] [Thread-190432] [transport.py] [_log()] client lang: <none>
2026-02-14T18:56:48.931 [DEBUG] [Thread-190432] [transport.py] [_log()] server lang: <none>
2026-02-14T18:56:48.931 [DEBUG] [Thread-190432] [transport.py] [_log()] kex follows: False
2026-02-14T18:56:48.931 [DEBUG] [Thread-190432] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:56:48.931 [DEBUG] [Thread-190432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:56:48.931 [DEBUG] [Thread-190432] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:56:48.931 [DEBUG] [Thread-190432] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:56:48.931 [DEBUG] [Thread-190432] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:56:48.931 [DEBUG] [Thread-190432] [transport.py] [_log()] Compression: none
2026-02-14T18:56:48.931 [DEBUG] [Thread-190432] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:56:48.947 [DEBUG] [Thread-190432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:56:48.948 [DEBUG] [Thread-190432] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:56:48.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:56:48.949 [DEBUG] [Thread-190432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:56:48.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:56:48.993 [DEBUG] [Thread-190432] [transport.py] [_log()] userauth is OK
2026-02-14T18:56:48.993 [DEBUG] [Thread-190432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:56:48.994 [DEBUG] [Thread-190432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:56:48.994 [DEBUG] [Thread-190432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:56:48.994 [DEBUG] [Thread-190432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:56:49.020 [INFO] [Thread-190432] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:56:49.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:56:49.641 [DEBUG] [Thread-190432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:56:49.641 [DEBUG] [Thread-190432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:56:49.642 [DEBUG] [Thread-190432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:56:49.682 [DEBUG] [Thread-190432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:56:49.682 [DEBUG] [Thread-190432] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:56:49.685 [DEBUG] [Thread-190432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:56:49.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:56:49.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:56:49.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:56:49.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:56:49.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:56:49.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:56:49.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:56:49.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:56:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:56:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.705671 -999.00  +13.30  25.60     50   +3.30 1 1 1 1 1   887    0 9.46 -28.96 ----- 23.1 25.6 159.0 38.5 15.2 -26.8 15.0 -26.3 15.8 -25.2 16.1 -27.6
2026-02-14T18:56:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:56:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:56:49.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.705671
2026-02-14T18:56:49.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:56:49.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:56:49.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:56:49.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:56:49.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:56:49.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:56:13', tmtdew=11.96, humidity=44.47, cloud=0.0, wind=41.39, temperature=13.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:56:09.974', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:56:49.710 [DEBUG] [Thread-190432] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:56:49.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-14T18:56:49.806 [DEBUG] [Thread-190435] [transport.py] [_log()] starting thread (client mode): 0xa57d6260
2026-02-14T18:56:49.806 [DEBUG] [Thread-190435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:56:49.820 [DEBUG] [Thread-190435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:56:49.820 [INFO] [Thread-190435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:56:49.828 [DEBUG] [Thread-190435] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:56:49.828 [DEBUG] [Thread-190435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:56:49.828 [DEBUG] [Thread-190435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:56:49.828 [DEBUG] [Thread-190435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:56:49.828 [DEBUG] [Thread-190435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:56:49.828 [DEBUG] [Thread-190435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:56:49.828 [DEBUG] [Thread-190435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:56:49.828 [DEBUG] [Thread-190435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:56:49.828 [DEBUG] [Thread-190435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:56:49.828 [DEBUG] [Thread-190435] [transport.py] [_log()] client lang: <none>
2026-02-14T18:56:49.828 [DEBUG] [Thread-190435] [transport.py] [_log()] server lang: <none>
2026-02-14T18:56:49.828 [DEBUG] [Thread-190435] [transport.py] [_log()] kex follows: False
2026-02-14T18:56:49.828 [DEBUG] [Thread-190435] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:56:49.828 [DEBUG] [Thread-190435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:56:49.829 [DEBUG] [Thread-190435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:56:49.829 [DEBUG] [Thread-190435] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:56:49.829 [DEBUG] [Thread-190435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:56:49.829 [DEBUG] [Thread-190435] [transport.py] [_log()] Compression: none
2026-02-14T18:56:49.829 [DEBUG] [Thread-190435] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:56:49.893 [DEBUG] [Thread-190435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:56:49.893 [DEBUG] [Thread-190435] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:56:49.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:56:49.895 [DEBUG] [Thread-190435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:56:49.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:56:49.953 [DEBUG] [Thread-190435] [transport.py] [_log()] userauth is OK
2026-02-14T18:56:49.953 [DEBUG] [Thread-190435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:56:49.953 [DEBUG] [Thread-190435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:56:49.953 [DEBUG] [Thread-190435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:56:49.953 [DEBUG] [Thread-190435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:56:49.971 [INFO] [Thread-190435] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:56:49.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-14T18:56:49.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:56:50.758 [DEBUG] [Thread-190435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:56:50.758 [DEBUG] [Thread-190435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:56:50.806 [DEBUG] [Thread-190435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:56:50.806 [DEBUG] [Thread-190435] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:56:50.814 [DEBUG] [Thread-190435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:56:50.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:56:50.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:56:50.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:56:50.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:56:50.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:56:50.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:56:50.848 [DEBUG] [Thread-190435] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:57:03.515 [DEBUG] [Thread-190437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:57:16.870 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:57:16.871 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:57:18.566 [DEBUG] [Thread-190438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:57:20.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:57:20.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:57:20.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T18:57:23.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 56, 49), 11.9, 44.47, 0.0, 36.45, 13.66, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:57:23.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:56:49
2026-02-14T18:57:23.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:57:23.756 [DEBUG] [Thread-190439] [transport.py] [_log()] starting thread (client mode): 0xa57d7280
2026-02-14T18:57:23.756 [DEBUG] [Thread-190439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:57:23.776 [DEBUG] [Thread-190439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:57:23.776 [INFO] [Thread-190439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:57:23.779 [DEBUG] [Thread-190439] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:57:23.779 [DEBUG] [Thread-190439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:57:23.779 [DEBUG] [Thread-190439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:57:23.779 [DEBUG] [Thread-190439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:57:23.779 [DEBUG] [Thread-190439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:57:23.779 [DEBUG] [Thread-190439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:57:23.779 [DEBUG] [Thread-190439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:57:23.779 [DEBUG] [Thread-190439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:57:23.779 [DEBUG] [Thread-190439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:57:23.779 [DEBUG] [Thread-190439] [transport.py] [_log()] client lang: <none>
2026-02-14T18:57:23.780 [DEBUG] [Thread-190439] [transport.py] [_log()] server lang: <none>
2026-02-14T18:57:23.780 [DEBUG] [Thread-190439] [transport.py] [_log()] kex follows: False
2026-02-14T18:57:23.780 [DEBUG] [Thread-190439] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:57:23.780 [DEBUG] [Thread-190439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:57:23.780 [DEBUG] [Thread-190439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:57:23.780 [DEBUG] [Thread-190439] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:57:23.780 [DEBUG] [Thread-190439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:57:23.780 [DEBUG] [Thread-190439] [transport.py] [_log()] Compression: none
2026-02-14T18:57:23.780 [DEBUG] [Thread-190439] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:57:23.796 [DEBUG] [Thread-190439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:57:23.796 [DEBUG] [Thread-190439] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:57:23.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:57:23.797 [DEBUG] [Thread-190439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:57:23.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:57:23.800 [DEBUG] [Thread-190439] [transport.py] [_log()] userauth is OK
2026-02-14T18:57:23.800 [DEBUG] [Thread-190439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:57:23.800 [DEBUG] [Thread-190439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:57:23.800 [DEBUG] [Thread-190439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:57:23.800 [DEBUG] [Thread-190439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:57:23.832 [INFO] [Thread-190439] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:57:23.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:57:24.453 [DEBUG] [Thread-190439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:57:24.454 [DEBUG] [Thread-190439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:57:24.454 [DEBUG] [Thread-190439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:57:24.494 [DEBUG] [Thread-190439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:57:24.495 [DEBUG] [Thread-190439] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:57:24.497 [DEBUG] [Thread-190439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:57:24.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:57:24.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:57:24.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:57:24.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:57:24.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:57:24.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:57:24.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:57:24.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:57:24.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:57:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.706018 -999.00  +13.30  26.05     50   +3.30 1 1 1 1 1   887    0 9.64 -27.72 ----- 21.1 26.1 145.6 37.8 15.1 -26.9 15.1 -25.8 15.7 -25.4 16.1 -27.3
2026-02-14T18:57:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:57:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:57:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.706018
2026-02-14T18:57:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:57:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:57:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:57:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:57:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:57:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:56:49', tmtdew=11.9, humidity=44.47, cloud=0.0, wind=36.45, temperature=13.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:56:39.955', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:57:24.522 [DEBUG] [Thread-190439] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:57: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-14T18:57:24.615 [DEBUG] [Thread-190442] [transport.py] [_log()] starting thread (client mode): 0xa5771e10
2026-02-14T18:57:24.615 [DEBUG] [Thread-190442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:57:24.629 [DEBUG] [Thread-190442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:57:24.629 [INFO] [Thread-190442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:57:24.637 [DEBUG] [Thread-190442] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:57:24.637 [DEBUG] [Thread-190442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:57:24.637 [DEBUG] [Thread-190442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:57:24.637 [DEBUG] [Thread-190442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:57:24.637 [DEBUG] [Thread-190442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:57:24.637 [DEBUG] [Thread-190442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:57:24.637 [DEBUG] [Thread-190442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:57:24.637 [DEBUG] [Thread-190442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:57:24.637 [DEBUG] [Thread-190442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:57:24.637 [DEBUG] [Thread-190442] [transport.py] [_log()] client lang: <none>
2026-02-14T18:57:24.637 [DEBUG] [Thread-190442] [transport.py] [_log()] server lang: <none>
2026-02-14T18:57:24.637 [DEBUG] [Thread-190442] [transport.py] [_log()] kex follows: False
2026-02-14T18:57:24.637 [DEBUG] [Thread-190442] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:57:24.637 [DEBUG] [Thread-190442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:57:24.637 [DEBUG] [Thread-190442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:57:24.637 [DEBUG] [Thread-190442] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:57:24.637 [DEBUG] [Thread-190442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:57:24.637 [DEBUG] [Thread-190442] [transport.py] [_log()] Compression: none
2026-02-14T18:57:24.637 [DEBUG] [Thread-190442] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:57:24.695 [DEBUG] [Thread-190442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:57:24.695 [DEBUG] [Thread-190442] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:57:24.695 [DEBUG] [Thread-190442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:57:24.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:57:24.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:57:24.752 [DEBUG] [Thread-190442] [transport.py] [_log()] userauth is OK
2026-02-14T18:57:24.752 [DEBUG] [Thread-190442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:57:24.752 [DEBUG] [Thread-190442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:57:24.752 [DEBUG] [Thread-190442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:57:24.752 [DEBUG] [Thread-190442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:57:24.766 [INFO] [Thread-190442] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:57:24.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-14T18:57:24.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:57:25.580 [DEBUG] [Thread-190442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:57:25.580 [DEBUG] [Thread-190442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:57:25.628 [DEBUG] [Thread-190442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:57:25.629 [DEBUG] [Thread-190442] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:57:25.639 [DEBUG] [Thread-190442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:57:25.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:57:25.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-14T18:57:25.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-14T18:57:25.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:57:25.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:57:25.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:57:25.677 [DEBUG] [Thread-190442] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:57:33.603 [DEBUG] [Thread-190444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:57:37.521 [DEBUG] [Thread-190445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:57:48.656 [DEBUG] [Thread-190446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:57:55.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:57:55.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:57:55.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-14T18:57:57.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 57, 25), 11.89, 44.52, 0.0, 35.55, 13.67, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:57:57.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:57:25
2026-02-14T18:57:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:57:58.346 [DEBUG] [Thread-190447] [transport.py] [_log()] starting thread (client mode): 0xa57e3df0
2026-02-14T18:57:58.346 [DEBUG] [Thread-190447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:57:58.367 [DEBUG] [Thread-190447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:57:58.367 [INFO] [Thread-190447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:57:58.370 [DEBUG] [Thread-190447] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:57:58.371 [DEBUG] [Thread-190447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:57:58.371 [DEBUG] [Thread-190447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:57:58.371 [DEBUG] [Thread-190447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:57:58.371 [DEBUG] [Thread-190447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:57:58.371 [DEBUG] [Thread-190447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:57:58.371 [DEBUG] [Thread-190447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:57:58.371 [DEBUG] [Thread-190447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:57:58.371 [DEBUG] [Thread-190447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:57:58.371 [DEBUG] [Thread-190447] [transport.py] [_log()] client lang: <none>
2026-02-14T18:57:58.371 [DEBUG] [Thread-190447] [transport.py] [_log()] server lang: <none>
2026-02-14T18:57:58.372 [DEBUG] [Thread-190447] [transport.py] [_log()] kex follows: False
2026-02-14T18:57:58.372 [DEBUG] [Thread-190447] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:57:58.372 [DEBUG] [Thread-190447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:57:58.372 [DEBUG] [Thread-190447] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:57:58.372 [DEBUG] [Thread-190447] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:57:58.372 [DEBUG] [Thread-190447] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:57:58.372 [DEBUG] [Thread-190447] [transport.py] [_log()] Compression: none
2026-02-14T18:57:58.372 [DEBUG] [Thread-190447] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:57:58.389 [DEBUG] [Thread-190447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:57:58.390 [DEBUG] [Thread-190447] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:57:58.390 [DEBUG] [Thread-190447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:57:58.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:57:58.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:57:58.392 [DEBUG] [Thread-190447] [transport.py] [_log()] userauth is OK
2026-02-14T18:57:58.393 [DEBUG] [Thread-190447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:57:58.393 [DEBUG] [Thread-190447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:57:58.393 [DEBUG] [Thread-190447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:57:58.393 [DEBUG] [Thread-190447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:57:58.417 [INFO] [Thread-190447] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:57:58.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:57:59.065 [DEBUG] [Thread-190447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:57:59.065 [DEBUG] [Thread-190447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:57:59.066 [DEBUG] [Thread-190447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:57:59.106 [DEBUG] [Thread-190447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:57:59.107 [DEBUG] [Thread-190447] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:57:59.110 [DEBUG] [Thread-190447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:57:59.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:57:59.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:57:59.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:57:59.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:57:59.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:57:59.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:57:59.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:57:59.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:57:59.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:57:59.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.706713 -999.00  +13.30  30.10     50   +3.30 1 1 2 1 1   887    0 9.49 -31.25 ----- 28.2 30.1 170.8 39.5 15.1 -26.7 15.0 -26.0 15.7 -25.5 16.0 -27.3
2026-02-14T18:57:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:57:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:57:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.706713
2026-02-14T18:57:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:57:59.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:57:59.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:57:59.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:57:59.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:57:59.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:57:25', tmtdew=11.89, humidity=44.52, cloud=0.0, wind=35.55, temperature=13.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:57:40.003', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:57:59.137 [DEBUG] [Thread-190447] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:57:59.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-14T18:57:59.241 [DEBUG] [Thread-190450] [transport.py] [_log()] starting thread (client mode): 0xa57d4760
2026-02-14T18:57:59.242 [DEBUG] [Thread-190450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:57:59.256 [DEBUG] [Thread-190450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:57:59.256 [INFO] [Thread-190450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:57:59.264 [DEBUG] [Thread-190450] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:57:59.264 [DEBUG] [Thread-190450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:57:59.264 [DEBUG] [Thread-190450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:57:59.264 [DEBUG] [Thread-190450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:57:59.264 [DEBUG] [Thread-190450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:57:59.264 [DEBUG] [Thread-190450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:57:59.264 [DEBUG] [Thread-190450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:57:59.265 [DEBUG] [Thread-190450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:57:59.265 [DEBUG] [Thread-190450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:57:59.265 [DEBUG] [Thread-190450] [transport.py] [_log()] client lang: <none>
2026-02-14T18:57:59.265 [DEBUG] [Thread-190450] [transport.py] [_log()] server lang: <none>
2026-02-14T18:57:59.265 [DEBUG] [Thread-190450] [transport.py] [_log()] kex follows: False
2026-02-14T18:57:59.265 [DEBUG] [Thread-190450] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:57:59.265 [DEBUG] [Thread-190450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:57:59.265 [DEBUG] [Thread-190450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:57:59.266 [DEBUG] [Thread-190450] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:57:59.266 [DEBUG] [Thread-190450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:57:59.266 [DEBUG] [Thread-190450] [transport.py] [_log()] Compression: none
2026-02-14T18:57:59.266 [DEBUG] [Thread-190450] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:57:59.322 [DEBUG] [Thread-190450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:57:59.323 [DEBUG] [Thread-190450] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:57:59.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:57:59.325 [DEBUG] [Thread-190450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:57:59.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:57:59.382 [DEBUG] [Thread-190450] [transport.py] [_log()] userauth is OK
2026-02-14T18:57:59.382 [DEBUG] [Thread-190450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:57:59.382 [DEBUG] [Thread-190450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:57:59.383 [DEBUG] [Thread-190450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:57:59.383 [DEBUG] [Thread-190450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:57:59.402 [INFO] [Thread-190450] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:57:59.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-14T18:57:59.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:58:00.231 [DEBUG] [Thread-190450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:58:00.232 [DEBUG] [Thread-190450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:58:00.279 [DEBUG] [Thread-190450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:58:00.280 [DEBUG] [Thread-190450] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:58:00.290 [DEBUG] [Thread-190450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:58:00.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:58:00.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:58:00.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-14T18:58:00.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:58:00.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:58:00.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:58:00.326 [DEBUG] [Thread-190450] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:58:03.695 [DEBUG] [Thread-190452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:58:17.012 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:58:17.013 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:58:18.749 [DEBUG] [Thread-190453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:58:30.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:58:30.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:58:30.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-14T18:58:32.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 58, 1), 11.84, 44.52, 0.0, 44.85, 13.59, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:58:32.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:58:01
2026-02-14T18:58:32.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:58:32.817 [DEBUG] [Thread-190454] [transport.py] [_log()] starting thread (client mode): 0xa5773190
2026-02-14T18:58:32.817 [DEBUG] [Thread-190454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:58:32.837 [DEBUG] [Thread-190454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:58:32.837 [INFO] [Thread-190454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:58:32.840 [DEBUG] [Thread-190454] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:58:32.841 [DEBUG] [Thread-190454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:58:32.841 [DEBUG] [Thread-190454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:58:32.841 [DEBUG] [Thread-190454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:58:32.841 [DEBUG] [Thread-190454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:58:32.841 [DEBUG] [Thread-190454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:58:32.841 [DEBUG] [Thread-190454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:58:32.841 [DEBUG] [Thread-190454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:58:32.841 [DEBUG] [Thread-190454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:58:32.841 [DEBUG] [Thread-190454] [transport.py] [_log()] client lang: <none>
2026-02-14T18:58:32.841 [DEBUG] [Thread-190454] [transport.py] [_log()] server lang: <none>
2026-02-14T18:58:32.841 [DEBUG] [Thread-190454] [transport.py] [_log()] kex follows: False
2026-02-14T18:58:32.841 [DEBUG] [Thread-190454] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:58:32.841 [DEBUG] [Thread-190454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:58:32.841 [DEBUG] [Thread-190454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:58:32.841 [DEBUG] [Thread-190454] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:58:32.841 [DEBUG] [Thread-190454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:58:32.841 [DEBUG] [Thread-190454] [transport.py] [_log()] Compression: none
2026-02-14T18:58:32.841 [DEBUG] [Thread-190454] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:58:32.858 [DEBUG] [Thread-190454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:58:32.859 [DEBUG] [Thread-190454] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:58:32.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:58:32.860 [DEBUG] [Thread-190454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:58:32.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:58:32.862 [DEBUG] [Thread-190454] [transport.py] [_log()] userauth is OK
2026-02-14T18:58:32.862 [DEBUG] [Thread-190454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:58:32.862 [DEBUG] [Thread-190454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:58:32.862 [DEBUG] [Thread-190454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:58:32.862 [DEBUG] [Thread-190454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:58:32.884 [INFO] [Thread-190454] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:58:32.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:58:33.691 [DEBUG] [Thread-190454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:58:33.691 [DEBUG] [Thread-190454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:58:33.692 [DEBUG] [Thread-190454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:58:33.732 [DEBUG] [Thread-190454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:58:33.733 [DEBUG] [Thread-190454] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:58:33.736 [DEBUG] [Thread-190454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:58:33.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:58:33.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:58:33.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:58:33.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:58:33.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:58:33.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:58:33.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:58:33.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:58:33.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:58:33.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.707060 -999.00  +13.30  33.91     50   +3.30 1 1 2 1 1   887    0 9.39 -32.95 ----- 32.8 33.9 163.6 42.7 15.0 -27.1 15.0 -26.0 15.7 -25.7 16.0 -27.2
2026-02-14T18:58:33.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:58:33.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:58:33.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.707060
2026-02-14T18:58:33.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:58:33.770 [DEBUG] [Thread-190454] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:58:33.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:58:33.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:58:33.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:58:33.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:58:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:58:01', tmtdew=11.84, humidity=44.52, cloud=0.0, wind=44.85, temperature=13.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:58:09.984', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:58:33.785 [DEBUG] [Thread-190457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:58:33.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-14T18:58:33.876 [DEBUG] [Thread-190458] [transport.py] [_log()] starting thread (client mode): 0xa2db7eb0
2026-02-14T18:58:33.876 [DEBUG] [Thread-190458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:58:33.891 [DEBUG] [Thread-190458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:58:33.891 [INFO] [Thread-190458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:58:33.898 [DEBUG] [Thread-190458] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:58:33.898 [DEBUG] [Thread-190458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:58:33.899 [DEBUG] [Thread-190458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:58:33.899 [DEBUG] [Thread-190458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:58:33.899 [DEBUG] [Thread-190458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:58:33.899 [DEBUG] [Thread-190458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:58:33.899 [DEBUG] [Thread-190458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:58:33.899 [DEBUG] [Thread-190458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:58:33.899 [DEBUG] [Thread-190458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:58:33.899 [DEBUG] [Thread-190458] [transport.py] [_log()] client lang: <none>
2026-02-14T18:58:33.899 [DEBUG] [Thread-190458] [transport.py] [_log()] server lang: <none>
2026-02-14T18:58:33.899 [DEBUG] [Thread-190458] [transport.py] [_log()] kex follows: False
2026-02-14T18:58:33.899 [DEBUG] [Thread-190458] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:58:33.899 [DEBUG] [Thread-190458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:58:33.899 [DEBUG] [Thread-190458] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:58:33.899 [DEBUG] [Thread-190458] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:58:33.899 [DEBUG] [Thread-190458] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:58:33.899 [DEBUG] [Thread-190458] [transport.py] [_log()] Compression: none
2026-02-14T18:58:33.899 [DEBUG] [Thread-190458] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:58:33.957 [DEBUG] [Thread-190458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:58:33.958 [DEBUG] [Thread-190458] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:58:33.958 [DEBUG] [Thread-190458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:58:33.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:58:33.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:58:34.014 [DEBUG] [Thread-190458] [transport.py] [_log()] userauth is OK
2026-02-14T18:58:34.014 [DEBUG] [Thread-190458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:58:34.014 [DEBUG] [Thread-190458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:58:34.015 [DEBUG] [Thread-190458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:58:34.015 [DEBUG] [Thread-190458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:58:34.042 [INFO] [Thread-190458] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:58:34.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-14T18:58:34.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:58:34.852 [DEBUG] [Thread-190458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:58:34.852 [DEBUG] [Thread-190458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:58:34.900 [DEBUG] [Thread-190458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:58:34.901 [DEBUG] [Thread-190458] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:58:34.910 [DEBUG] [Thread-190458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:58:34.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:58:34.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-14T18:58:34.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-14T18:58:34.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:58:34.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:58:34.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:58:34.946 [DEBUG] [Thread-190458] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:58:37.558 [DEBUG] [Thread-190460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:58:48.835 [DEBUG] [Thread-190461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:59:03.870 [DEBUG] [Thread-190462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:59:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:59:04.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:59:04.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-14T18:59:06.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 58, 37), 12.29, 43.3, 0.0, 49.25, 14.15, 0, 0, 0, 2, 1, 0),)
2026-02-14T18:59:06.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:58:37
2026-02-14T18:59:07.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:59:07.476 [DEBUG] [Thread-190463] [transport.py] [_log()] starting thread (client mode): 0xa57e11b0
2026-02-14T18:59:07.476 [DEBUG] [Thread-190463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:59:07.497 [DEBUG] [Thread-190463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:59:07.498 [INFO] [Thread-190463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:59:07.501 [DEBUG] [Thread-190463] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:59:07.501 [DEBUG] [Thread-190463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:59:07.501 [DEBUG] [Thread-190463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:59:07.501 [DEBUG] [Thread-190463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:59:07.501 [DEBUG] [Thread-190463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:59:07.501 [DEBUG] [Thread-190463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:59:07.501 [DEBUG] [Thread-190463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:59:07.501 [DEBUG] [Thread-190463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:59:07.501 [DEBUG] [Thread-190463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:59:07.501 [DEBUG] [Thread-190463] [transport.py] [_log()] client lang: <none>
2026-02-14T18:59:07.502 [DEBUG] [Thread-190463] [transport.py] [_log()] server lang: <none>
2026-02-14T18:59:07.502 [DEBUG] [Thread-190463] [transport.py] [_log()] kex follows: False
2026-02-14T18:59:07.502 [DEBUG] [Thread-190463] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:59:07.502 [DEBUG] [Thread-190463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:59:07.502 [DEBUG] [Thread-190463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:59:07.502 [DEBUG] [Thread-190463] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:59:07.502 [DEBUG] [Thread-190463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:59:07.502 [DEBUG] [Thread-190463] [transport.py] [_log()] Compression: none
2026-02-14T18:59:07.502 [DEBUG] [Thread-190463] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:59:07.521 [DEBUG] [Thread-190463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:59:07.522 [DEBUG] [Thread-190463] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:59:07.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:59:07.523 [DEBUG] [Thread-190463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:59:07.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:59:07.525 [DEBUG] [Thread-190463] [transport.py] [_log()] userauth is OK
2026-02-14T18:59:07.525 [DEBUG] [Thread-190463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:59:07.525 [DEBUG] [Thread-190463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:59:07.526 [DEBUG] [Thread-190463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:59:07.526 [DEBUG] [Thread-190463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:59:07.548 [INFO] [Thread-190463] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:59:07.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:59:08.177 [DEBUG] [Thread-190463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:59:08.177 [DEBUG] [Thread-190463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:59:08.178 [DEBUG] [Thread-190463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:59:08.219 [DEBUG] [Thread-190463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:59:08.219 [DEBUG] [Thread-190463] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:59:08.221 [DEBUG] [Thread-190463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:59:08.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:59:08.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:59:08.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:59:08.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:59:08.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:59:08.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:59:08.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:59:08.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:59:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:59:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.707407 -999.00  +13.20  29.40     51   +3.30 1 1 1 1 1   887    0 9.41 -35.23 ----- 34.3 29.4 171.8 41.8 15.0 -27.0 14.9 -26.0 15.5 -25.5 16.0 -27.3
2026-02-14T18:59:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:59:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:59:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.707407
2026-02-14T18:59:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:59:08.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:59:08.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:59:08.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:59:08.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:59:08.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:58:37', tmtdew=12.29, humidity=43.3, cloud=0.0, wind=49.25, temperature=14.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:58:39.965', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:59:08.244 [DEBUG] [Thread-190463] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:59:08.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-14T18:59:08.336 [DEBUG] [Thread-190466] [transport.py] [_log()] starting thread (client mode): 0xa2dec310
2026-02-14T18:59:08.337 [DEBUG] [Thread-190466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:59:08.351 [DEBUG] [Thread-190466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:59:08.351 [INFO] [Thread-190466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:59:08.359 [DEBUG] [Thread-190466] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:59:08.359 [DEBUG] [Thread-190466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:59:08.359 [DEBUG] [Thread-190466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:59:08.359 [DEBUG] [Thread-190466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:59:08.359 [DEBUG] [Thread-190466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:59:08.359 [DEBUG] [Thread-190466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:59:08.359 [DEBUG] [Thread-190466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:59:08.360 [DEBUG] [Thread-190466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:59:08.360 [DEBUG] [Thread-190466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:59:08.360 [DEBUG] [Thread-190466] [transport.py] [_log()] client lang: <none>
2026-02-14T18:59:08.360 [DEBUG] [Thread-190466] [transport.py] [_log()] server lang: <none>
2026-02-14T18:59:08.360 [DEBUG] [Thread-190466] [transport.py] [_log()] kex follows: False
2026-02-14T18:59:08.360 [DEBUG] [Thread-190466] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:59:08.360 [DEBUG] [Thread-190466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:59:08.360 [DEBUG] [Thread-190466] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:59:08.360 [DEBUG] [Thread-190466] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:59:08.361 [DEBUG] [Thread-190466] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:59:08.361 [DEBUG] [Thread-190466] [transport.py] [_log()] Compression: none
2026-02-14T18:59:08.361 [DEBUG] [Thread-190466] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:59:08.422 [DEBUG] [Thread-190466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:59:08.422 [DEBUG] [Thread-190466] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:59:08.423 [DEBUG] [Thread-190466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:59:08.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:59:08.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:59:08.487 [DEBUG] [Thread-190466] [transport.py] [_log()] userauth is OK
2026-02-14T18:59:08.488 [DEBUG] [Thread-190466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:59:08.488 [DEBUG] [Thread-190466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:59:08.488 [DEBUG] [Thread-190466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:59:08.488 [DEBUG] [Thread-190466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:59:08.506 [INFO] [Thread-190466] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:59:08.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-14T18:59:08.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:59:09.316 [DEBUG] [Thread-190466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:59:09.317 [DEBUG] [Thread-190466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:59:09.364 [DEBUG] [Thread-190466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:59:09.364 [DEBUG] [Thread-190466] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:59:09.373 [DEBUG] [Thread-190466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:59:09.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:59:09.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-14T18:59:09.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T18:59:09.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:59:09.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:59:09.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:59:09.407 [DEBUG] [Thread-190466] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:59:17.154 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:59:17.155 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:59:18.905 [DEBUG] [Thread-190468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:59:33.959 [DEBUG] [Thread-190469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:59:37.604 [DEBUG] [Thread-190470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T18:59:39.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T18:59:39.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T18:59:39.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-14T18:59:41.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 59, 12), 11.75, 44.77, 0.0, 38.62, 13.49, 0, 0, 0, 2, 0, 0),)
2026-02-14T18:59:41.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:59:12
2026-02-14T18:59:41.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T18:59:41.841 [DEBUG] [Thread-190471] [transport.py] [_log()] starting thread (client mode): 0xa2d01570
2026-02-14T18:59:41.841 [DEBUG] [Thread-190471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:59:41.861 [DEBUG] [Thread-190471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T18:59:41.861 [INFO] [Thread-190471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T18:59:41.864 [DEBUG] [Thread-190471] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:59:41.864 [DEBUG] [Thread-190471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T18:59:41.864 [DEBUG] [Thread-190471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:59:41.865 [DEBUG] [Thread-190471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:59:41.865 [DEBUG] [Thread-190471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:59:41.865 [DEBUG] [Thread-190471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:59:41.865 [DEBUG] [Thread-190471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:59:41.865 [DEBUG] [Thread-190471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:59:41.865 [DEBUG] [Thread-190471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:59:41.865 [DEBUG] [Thread-190471] [transport.py] [_log()] client lang: <none>
2026-02-14T18:59:41.865 [DEBUG] [Thread-190471] [transport.py] [_log()] server lang: <none>
2026-02-14T18:59:41.865 [DEBUG] [Thread-190471] [transport.py] [_log()] kex follows: False
2026-02-14T18:59:41.865 [DEBUG] [Thread-190471] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:59:41.865 [DEBUG] [Thread-190471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:59:41.865 [DEBUG] [Thread-190471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:59:41.865 [DEBUG] [Thread-190471] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:59:41.865 [DEBUG] [Thread-190471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:59:41.865 [DEBUG] [Thread-190471] [transport.py] [_log()] Compression: none
2026-02-14T18:59:41.866 [DEBUG] [Thread-190471] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:59:41.884 [DEBUG] [Thread-190471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:59:41.885 [DEBUG] [Thread-190471] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:59:41.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T18:59:41.886 [DEBUG] [Thread-190471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T18:59:41.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:59:41.888 [DEBUG] [Thread-190471] [transport.py] [_log()] userauth is OK
2026-02-14T18:59:41.888 [DEBUG] [Thread-190471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:59:41.888 [DEBUG] [Thread-190471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:59:41.888 [DEBUG] [Thread-190471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T18:59:41.889 [DEBUG] [Thread-190471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:59:41.903 [INFO] [Thread-190471] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:59:41.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:59:42.497 [DEBUG] [Thread-190471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:59:42.497 [DEBUG] [Thread-190471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:59:42.498 [DEBUG] [Thread-190471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T18:59:42.538 [DEBUG] [Thread-190471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:59:42.538 [DEBUG] [Thread-190471] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:59:42.542 [DEBUG] [Thread-190471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:59:42.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:59:42.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T18:59:42.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T18:59:42.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T18:59:42.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:59:42.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T18:59:42.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:59:42.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:59:42.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T18:59:42.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.707754 -999.00  +13.20  31.98     51   +3.30 1 1 2 1 1   887    0 9.18 -37.52 ----- 32.2 32.0 169.6 41.6 15.0 -27.3 14.9 -27.0 15.5 -25.5 15.9 -27.2
2026-02-14T18:59:42.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T18:59:42.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T18:59:42.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.707754
2026-02-14T18:59:42.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T18:59:42.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T18:59:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T18:59:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T18:59:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T18:59:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:59:12', tmtdew=11.75, humidity=44.77, cloud=0.0, wind=38.62, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:59:09.946', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T18:59:42.567 [DEBUG] [Thread-190471] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:59:42.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-14T18:59:42.674 [DEBUG] [Thread-190474] [transport.py] [_log()] starting thread (client mode): 0xa2d03b20
2026-02-14T18:59:42.674 [DEBUG] [Thread-190474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T18:59:42.689 [DEBUG] [Thread-190474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T18:59:42.689 [INFO] [Thread-190474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T18:59:42.696 [DEBUG] [Thread-190474] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T18:59:42.696 [DEBUG] [Thread-190474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T18:59:42.697 [DEBUG] [Thread-190474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T18:59:42.697 [DEBUG] [Thread-190474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:59:42.697 [DEBUG] [Thread-190474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T18:59:42.697 [DEBUG] [Thread-190474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:59:42.697 [DEBUG] [Thread-190474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T18:59:42.697 [DEBUG] [Thread-190474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T18:59:42.697 [DEBUG] [Thread-190474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T18:59:42.697 [DEBUG] [Thread-190474] [transport.py] [_log()] client lang: <none>
2026-02-14T18:59:42.697 [DEBUG] [Thread-190474] [transport.py] [_log()] server lang: <none>
2026-02-14T18:59:42.697 [DEBUG] [Thread-190474] [transport.py] [_log()] kex follows: False
2026-02-14T18:59:42.697 [DEBUG] [Thread-190474] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T18:59:42.697 [DEBUG] [Thread-190474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T18:59:42.697 [DEBUG] [Thread-190474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T18:59:42.697 [DEBUG] [Thread-190474] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T18:59:42.697 [DEBUG] [Thread-190474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T18:59:42.697 [DEBUG] [Thread-190474] [transport.py] [_log()] Compression: none
2026-02-14T18:59:42.697 [DEBUG] [Thread-190474] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T18:59:42.755 [DEBUG] [Thread-190474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T18:59:42.755 [DEBUG] [Thread-190474] [transport.py] [_log()] Switch to new keys ...
2026-02-14T18:59:42.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T18:59:42.757 [DEBUG] [Thread-190474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T18:59:42.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T18:59:42.811 [DEBUG] [Thread-190474] [transport.py] [_log()] userauth is OK
2026-02-14T18:59:42.811 [DEBUG] [Thread-190474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T18:59:42.811 [DEBUG] [Thread-190474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T18:59:42.811 [DEBUG] [Thread-190474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T18:59:42.812 [DEBUG] [Thread-190474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T18:59:42.830 [INFO] [Thread-190474] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T18:59:42.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-14T18:59:42.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T18:59:43.642 [DEBUG] [Thread-190474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T18:59:43.642 [DEBUG] [Thread-190474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T18:59:43.690 [DEBUG] [Thread-190474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T18:59:43.691 [DEBUG] [Thread-190474] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T18:59:43.700 [DEBUG] [Thread-190474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T18:59:43.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T18:59:43.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T18:59:43.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-14T18:59:43.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T18:59:43.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T18:59:43.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T18:59:43.737 [DEBUG] [Thread-190474] [transport.py] [_log()] EOF in transport thread
2026-02-14T18:59:48.996 [DEBUG] [Thread-190476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:00:04.058 [DEBUG] [Thread-190477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:00:13.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:00:13.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:00:13.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-14T19:00:16.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 59, 44), 11.72, 44.87, 0.0, 37.79, 13.49, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:00:16.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:59:44
2026-02-14T19:00:16.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:00:16.833 [DEBUG] [Thread-190478] [transport.py] [_log()] starting thread (client mode): 0xa2dec310
2026-02-14T19:00:16.833 [DEBUG] [Thread-190478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:00:16.854 [DEBUG] [Thread-190478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:00:16.854 [INFO] [Thread-190478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:00:16.857 [DEBUG] [Thread-190478] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:00:16.857 [DEBUG] [Thread-190478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:00:16.857 [DEBUG] [Thread-190478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:00:16.857 [DEBUG] [Thread-190478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:00:16.857 [DEBUG] [Thread-190478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:00:16.857 [DEBUG] [Thread-190478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:00:16.857 [DEBUG] [Thread-190478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:00:16.858 [DEBUG] [Thread-190478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:00:16.858 [DEBUG] [Thread-190478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:00:16.858 [DEBUG] [Thread-190478] [transport.py] [_log()] client lang: <none>
2026-02-14T19:00:16.858 [DEBUG] [Thread-190478] [transport.py] [_log()] server lang: <none>
2026-02-14T19:00:16.858 [DEBUG] [Thread-190478] [transport.py] [_log()] kex follows: False
2026-02-14T19:00:16.858 [DEBUG] [Thread-190478] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:00:16.858 [DEBUG] [Thread-190478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:00:16.858 [DEBUG] [Thread-190478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:00:16.858 [DEBUG] [Thread-190478] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:00:16.858 [DEBUG] [Thread-190478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:00:16.858 [DEBUG] [Thread-190478] [transport.py] [_log()] Compression: none
2026-02-14T19:00:16.858 [DEBUG] [Thread-190478] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:00:16.878 [DEBUG] [Thread-190478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:00:16.878 [DEBUG] [Thread-190478] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:00:16.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:00:16.879 [DEBUG] [Thread-190478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:00:16.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:00:16.882 [DEBUG] [Thread-190478] [transport.py] [_log()] userauth is OK
2026-02-14T19:00:16.882 [DEBUG] [Thread-190478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:00:16.882 [DEBUG] [Thread-190478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:00:16.882 [DEBUG] [Thread-190478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:00:16.882 [DEBUG] [Thread-190478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:00:16.908 [INFO] [Thread-190478] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:00:16.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:00:17.296 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:00:17.298 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:00:17.590 [DEBUG] [Thread-190478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:00:17.590 [DEBUG] [Thread-190478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:00:17.591 [DEBUG] [Thread-190478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:00:17.631 [DEBUG] [Thread-190478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:00:17.632 [DEBUG] [Thread-190478] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:00:17.635 [DEBUG] [Thread-190478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:00:17.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:00:17.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:00:17.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:00:17.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:00:17.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:00:17.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:00:17.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:00:17.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:00:17.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:00:17.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.708102 -999.00  +13.20  28.33     51   +3.30 1 1 1 1 1   887    0 9.31 -37.85 ----- 21.3 28.3 172.8 43.5 14.9 -27.1 14.8 -26.5 15.5 -25.1 15.9 -27.7
2026-02-14T19:00:17.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:00:17.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:00:17.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.708102
2026-02-14T19:00:17.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:00:17.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:00:17.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:00:17.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:00:17.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:00:17.663 [DEBUG] [Thread-190478] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:00:17.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:59:44', tmtdew=11.72, humidity=44.87, cloud=0.0, wind=37.79, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T16:59:40.013', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:00:17.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-14T19:00:17.757 [DEBUG] [Thread-190481] [transport.py] [_log()] starting thread (client mode): 0xa2d000a0
2026-02-14T19:00:17.758 [DEBUG] [Thread-190481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:00:17.772 [DEBUG] [Thread-190481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:00:17.772 [INFO] [Thread-190481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:00:17.783 [DEBUG] [Thread-190481] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:00:17.784 [DEBUG] [Thread-190481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:00:17.784 [DEBUG] [Thread-190481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:00:17.784 [DEBUG] [Thread-190481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:00:17.784 [DEBUG] [Thread-190481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:00:17.784 [DEBUG] [Thread-190481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:00:17.784 [DEBUG] [Thread-190481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:00:17.784 [DEBUG] [Thread-190481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:00:17.784 [DEBUG] [Thread-190481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:00:17.784 [DEBUG] [Thread-190481] [transport.py] [_log()] client lang: <none>
2026-02-14T19:00:17.784 [DEBUG] [Thread-190481] [transport.py] [_log()] server lang: <none>
2026-02-14T19:00:17.784 [DEBUG] [Thread-190481] [transport.py] [_log()] kex follows: False
2026-02-14T19:00:17.784 [DEBUG] [Thread-190481] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:00:17.784 [DEBUG] [Thread-190481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:00:17.784 [DEBUG] [Thread-190481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:00:17.784 [DEBUG] [Thread-190481] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:00:17.785 [DEBUG] [Thread-190481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:00:17.785 [DEBUG] [Thread-190481] [transport.py] [_log()] Compression: none
2026-02-14T19:00:17.785 [DEBUG] [Thread-190481] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:00:17.840 [DEBUG] [Thread-190481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:00:17.841 [DEBUG] [Thread-190481] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:00:17.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:00:17.842 [DEBUG] [Thread-190481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:00:17.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:00:17.899 [DEBUG] [Thread-190481] [transport.py] [_log()] userauth is OK
2026-02-14T19:00:17.899 [DEBUG] [Thread-190481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:00:17.899 [DEBUG] [Thread-190481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:00:17.899 [DEBUG] [Thread-190481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:00:17.899 [DEBUG] [Thread-190481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:00:17.917 [INFO] [Thread-190481] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:00:17.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-14T19:00:17.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:00:18.751 [DEBUG] [Thread-190481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:00:18.751 [DEBUG] [Thread-190481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:00:18.799 [DEBUG] [Thread-190481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:00:18.799 [DEBUG] [Thread-190481] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:00:18.808 [DEBUG] [Thread-190481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:00:18.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:00:18.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-14T19:00:18.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-14T19:00:18.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:00:18.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:00:18.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:00:18.845 [DEBUG] [Thread-190481] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:00:19.097 [DEBUG] [Thread-190483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:00:34.156 [DEBUG] [Thread-190484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:00:37.651 [DEBUG] [Thread-190485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:00:48.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:00:48.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:00:48.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T19:00:49.194 [DEBUG] [Thread-190486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:00:50.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 59, 44), 11.72, 44.87, 0.0, 37.79, 13.49, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:00:50.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:59:44
2026-02-14T19:00:51.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:00:51.212 [DEBUG] [Thread-190487] [transport.py] [_log()] starting thread (client mode): 0xa2defd60
2026-02-14T19:00:51.212 [DEBUG] [Thread-190487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:00:51.231 [DEBUG] [Thread-190487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:00:51.231 [INFO] [Thread-190487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:00:51.234 [DEBUG] [Thread-190487] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:00:51.235 [DEBUG] [Thread-190487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:00:51.235 [DEBUG] [Thread-190487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:00:51.235 [DEBUG] [Thread-190487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:00:51.235 [DEBUG] [Thread-190487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:00:51.235 [DEBUG] [Thread-190487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:00:51.235 [DEBUG] [Thread-190487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:00:51.235 [DEBUG] [Thread-190487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:00:51.235 [DEBUG] [Thread-190487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:00:51.235 [DEBUG] [Thread-190487] [transport.py] [_log()] client lang: <none>
2026-02-14T19:00:51.235 [DEBUG] [Thread-190487] [transport.py] [_log()] server lang: <none>
2026-02-14T19:00:51.235 [DEBUG] [Thread-190487] [transport.py] [_log()] kex follows: False
2026-02-14T19:00:51.235 [DEBUG] [Thread-190487] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:00:51.235 [DEBUG] [Thread-190487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:00:51.235 [DEBUG] [Thread-190487] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:00:51.235 [DEBUG] [Thread-190487] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:00:51.236 [DEBUG] [Thread-190487] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:00:51.236 [DEBUG] [Thread-190487] [transport.py] [_log()] Compression: none
2026-02-14T19:00:51.236 [DEBUG] [Thread-190487] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:00:51.255 [DEBUG] [Thread-190487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:00:51.256 [DEBUG] [Thread-190487] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:00:51.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:00:51.258 [DEBUG] [Thread-190487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:00:51.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:00:51.260 [DEBUG] [Thread-190487] [transport.py] [_log()] userauth is OK
2026-02-14T19:00:51.260 [DEBUG] [Thread-190487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:00:51.260 [DEBUG] [Thread-190487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:00:51.260 [DEBUG] [Thread-190487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:00:51.260 [DEBUG] [Thread-190487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:00:51.275 [INFO] [Thread-190487] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:00:51.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:00:51.920 [DEBUG] [Thread-190487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:00:51.920 [DEBUG] [Thread-190487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:00:51.921 [DEBUG] [Thread-190487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:00:51.961 [DEBUG] [Thread-190487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:00:51.962 [DEBUG] [Thread-190487] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:00:51.965 [DEBUG] [Thread-190487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:00:51.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:00:51.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:00:51.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:00:51.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:00:51.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:00:51.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:00:51.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:00:51.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:00:51.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:00:51.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.708448 -999.00  +13.20  26.88     51   +3.40 1 1 1 1 1   887    0 9.31 -39.32 ----- 31.5 26.9 158.2 38.8 14.9 -26.7 14.8 -25.9 15.6 -25.0 15.8 -26.8
2026-02-14T19:00:51.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:00:51.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:00:51.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.708448
2026-02-14T19:00:51.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:00:51.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:00:51.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:00:51.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:00:51.993 [DEBUG] [Thread-190487] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:00:51.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:00:51.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:59:44', tmtdew=11.72, humidity=44.87, cloud=0.0, wind=37.79, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:00:09.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:00:52.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-14T19:00:52.096 [DEBUG] [Thread-190490] [transport.py] [_log()] starting thread (client mode): 0xa2ded150
2026-02-14T19:00:52.096 [DEBUG] [Thread-190490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:00:52.111 [DEBUG] [Thread-190490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:00:52.111 [INFO] [Thread-190490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:00:52.119 [DEBUG] [Thread-190490] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:00:52.119 [DEBUG] [Thread-190490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:00:52.119 [DEBUG] [Thread-190490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:00:52.119 [DEBUG] [Thread-190490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:00:52.119 [DEBUG] [Thread-190490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:00:52.120 [DEBUG] [Thread-190490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:00:52.120 [DEBUG] [Thread-190490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:00:52.120 [DEBUG] [Thread-190490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:00:52.120 [DEBUG] [Thread-190490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:00:52.120 [DEBUG] [Thread-190490] [transport.py] [_log()] client lang: <none>
2026-02-14T19:00:52.120 [DEBUG] [Thread-190490] [transport.py] [_log()] server lang: <none>
2026-02-14T19:00:52.120 [DEBUG] [Thread-190490] [transport.py] [_log()] kex follows: False
2026-02-14T19:00:52.120 [DEBUG] [Thread-190490] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:00:52.121 [DEBUG] [Thread-190490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:00:52.121 [DEBUG] [Thread-190490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:00:52.121 [DEBUG] [Thread-190490] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:00:52.121 [DEBUG] [Thread-190490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:00:52.121 [DEBUG] [Thread-190490] [transport.py] [_log()] Compression: none
2026-02-14T19:00:52.121 [DEBUG] [Thread-190490] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:00:52.176 [DEBUG] [Thread-190490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:00:52.177 [DEBUG] [Thread-190490] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:00:52.177 [DEBUG] [Thread-190490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:00:52.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:00:52.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:00:52.232 [DEBUG] [Thread-190490] [transport.py] [_log()] userauth is OK
2026-02-14T19:00:52.232 [DEBUG] [Thread-190490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:00:52.233 [DEBUG] [Thread-190490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:00:52.233 [DEBUG] [Thread-190490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:00:52.233 [DEBUG] [Thread-190490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:00:52.252 [INFO] [Thread-190490] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:00:52.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T19:00:52.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:00:53.053 [DEBUG] [Thread-190490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:00:53.053 [DEBUG] [Thread-190490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:00:53.102 [DEBUG] [Thread-190490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:00:53.102 [DEBUG] [Thread-190490] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:00:53.110 [DEBUG] [Thread-190490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:00:53.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:00:53.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-14T19:00:53.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:00:53.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:00:53.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:00:53.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:00:53.142 [DEBUG] [Thread-190490] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:01:04.232 [DEBUG] [Thread-190492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:01:17.439 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:01:17.440 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:01:19.281 [DEBUG] [Thread-190493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:01:23.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:01:23.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:01:23.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-14T19:01:25.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 59, 44), 11.72, 44.87, 0.0, 37.79, 13.49, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:01:25.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:59:44
2026-02-14T19:01:25.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:01:25.774 [DEBUG] [Thread-190494] [transport.py] [_log()] starting thread (client mode): 0xa2dec310
2026-02-14T19:01:25.774 [DEBUG] [Thread-190494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:01:25.794 [DEBUG] [Thread-190494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:01:25.795 [INFO] [Thread-190494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:01:25.798 [DEBUG] [Thread-190494] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:01:25.798 [DEBUG] [Thread-190494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:01:25.798 [DEBUG] [Thread-190494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:01:25.798 [DEBUG] [Thread-190494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:01:25.798 [DEBUG] [Thread-190494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:01:25.798 [DEBUG] [Thread-190494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:01:25.798 [DEBUG] [Thread-190494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:01:25.799 [DEBUG] [Thread-190494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:01:25.799 [DEBUG] [Thread-190494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:01:25.799 [DEBUG] [Thread-190494] [transport.py] [_log()] client lang: <none>
2026-02-14T19:01:25.799 [DEBUG] [Thread-190494] [transport.py] [_log()] server lang: <none>
2026-02-14T19:01:25.799 [DEBUG] [Thread-190494] [transport.py] [_log()] kex follows: False
2026-02-14T19:01:25.799 [DEBUG] [Thread-190494] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:01:25.799 [DEBUG] [Thread-190494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:01:25.799 [DEBUG] [Thread-190494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:01:25.799 [DEBUG] [Thread-190494] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:01:25.799 [DEBUG] [Thread-190494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:01:25.799 [DEBUG] [Thread-190494] [transport.py] [_log()] Compression: none
2026-02-14T19:01:25.800 [DEBUG] [Thread-190494] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:01:25.819 [DEBUG] [Thread-190494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:01:25.820 [DEBUG] [Thread-190494] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:01:25.820 [DEBUG] [Thread-190494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:01:25.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:01:25.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:01:25.823 [DEBUG] [Thread-190494] [transport.py] [_log()] userauth is OK
2026-02-14T19:01:25.823 [DEBUG] [Thread-190494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:01:25.823 [DEBUG] [Thread-190494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:01:25.823 [DEBUG] [Thread-190494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:01:25.823 [DEBUG] [Thread-190494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:01:25.846 [INFO] [Thread-190494] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:01:25.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:01:26.654 [DEBUG] [Thread-190494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:01:26.655 [DEBUG] [Thread-190494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:01:26.655 [DEBUG] [Thread-190494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:01:26.695 [DEBUG] [Thread-190494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:01:26.696 [DEBUG] [Thread-190494] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:01:26.699 [DEBUG] [Thread-190494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:01:26.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:01:26.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:01:26.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:01:26.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:01:26.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:01:26.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:01:26.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:01:26.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:01:26.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:01:26.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.708796 -999.00  +13.20  25.80     51   +3.30 1 1 1 1 1   887    0 9.25 -37.01 ----- 26.5 25.8 165.6 48.4 14.9 -27.1 14.8 -25.7 15.4 -25.6 15.8 -27.5
2026-02-14T19:01:26.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:01:26.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:01:26.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.708796
2026-02-14T19:01:26.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:01:26.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:01:26.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:01:26.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:01:26.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:01:26.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:59:44', tmtdew=11.72, humidity=44.87, cloud=0.0, wind=37.79, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:00:39.974', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:01:26.725 [DEBUG] [Thread-190494] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:01:26.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-14T19:01:26.831 [DEBUG] [Thread-190497] [transport.py] [_log()] starting thread (client mode): 0xa57c1420
2026-02-14T19:01:26.831 [DEBUG] [Thread-190497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:01:26.845 [DEBUG] [Thread-190497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:01:26.846 [INFO] [Thread-190497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:01:26.853 [DEBUG] [Thread-190497] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:01:26.853 [DEBUG] [Thread-190497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:01:26.854 [DEBUG] [Thread-190497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:01:26.854 [DEBUG] [Thread-190497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:01:26.854 [DEBUG] [Thread-190497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:01:26.854 [DEBUG] [Thread-190497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:01:26.854 [DEBUG] [Thread-190497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:01:26.854 [DEBUG] [Thread-190497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:01:26.854 [DEBUG] [Thread-190497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:01:26.854 [DEBUG] [Thread-190497] [transport.py] [_log()] client lang: <none>
2026-02-14T19:01:26.854 [DEBUG] [Thread-190497] [transport.py] [_log()] server lang: <none>
2026-02-14T19:01:26.855 [DEBUG] [Thread-190497] [transport.py] [_log()] kex follows: False
2026-02-14T19:01:26.855 [DEBUG] [Thread-190497] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:01:26.855 [DEBUG] [Thread-190497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:01:26.855 [DEBUG] [Thread-190497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:01:26.855 [DEBUG] [Thread-190497] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:01:26.855 [DEBUG] [Thread-190497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:01:26.855 [DEBUG] [Thread-190497] [transport.py] [_log()] Compression: none
2026-02-14T19:01:26.856 [DEBUG] [Thread-190497] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:01:26.914 [DEBUG] [Thread-190497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:01:26.914 [DEBUG] [Thread-190497] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:01:26.915 [DEBUG] [Thread-190497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:01:26.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:01:26.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:01:26.972 [DEBUG] [Thread-190497] [transport.py] [_log()] userauth is OK
2026-02-14T19:01:26.972 [DEBUG] [Thread-190497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:01:26.973 [DEBUG] [Thread-190497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:01:26.973 [DEBUG] [Thread-190497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:01:26.973 [DEBUG] [Thread-190497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:01:26.992 [INFO] [Thread-190497] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:01:26.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-14T19:01:26.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:01:27.818 [DEBUG] [Thread-190497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:01:27.818 [DEBUG] [Thread-190497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:01:27.866 [DEBUG] [Thread-190497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:01:27.867 [DEBUG] [Thread-190497] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:01:27.876 [DEBUG] [Thread-190497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:01:27.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:01:27.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:01:27.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:01:27.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:01:27.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:01:27.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:01:27.913 [DEBUG] [Thread-190497] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:01:34.314 [DEBUG] [Thread-190499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:01:37.683 [DEBUG] [Thread-190500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:01:49.360 [DEBUG] [Thread-190501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:01:57.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:01:57.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:01:57.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T19:01:59.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 18, 59, 44), 11.72, 44.87, 0.0, 37.79, 13.49, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:01:59.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 18:59:44
2026-02-14T19:02:00.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:02:00.427 [DEBUG] [Thread-190502] [transport.py] [_log()] starting thread (client mode): 0xa2dec0a0
2026-02-14T19:02:00.427 [DEBUG] [Thread-190502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:02:00.447 [DEBUG] [Thread-190502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:02:00.447 [INFO] [Thread-190502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:02:00.450 [DEBUG] [Thread-190502] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:02:00.450 [DEBUG] [Thread-190502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:02:00.450 [DEBUG] [Thread-190502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:02:00.450 [DEBUG] [Thread-190502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:02:00.450 [DEBUG] [Thread-190502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:02:00.450 [DEBUG] [Thread-190502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:02:00.450 [DEBUG] [Thread-190502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:02:00.450 [DEBUG] [Thread-190502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:02:00.450 [DEBUG] [Thread-190502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:02:00.450 [DEBUG] [Thread-190502] [transport.py] [_log()] client lang: <none>
2026-02-14T19:02:00.451 [DEBUG] [Thread-190502] [transport.py] [_log()] server lang: <none>
2026-02-14T19:02:00.451 [DEBUG] [Thread-190502] [transport.py] [_log()] kex follows: False
2026-02-14T19:02:00.451 [DEBUG] [Thread-190502] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:02:00.451 [DEBUG] [Thread-190502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:02:00.451 [DEBUG] [Thread-190502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:02:00.451 [DEBUG] [Thread-190502] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:02:00.451 [DEBUG] [Thread-190502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:02:00.451 [DEBUG] [Thread-190502] [transport.py] [_log()] Compression: none
2026-02-14T19:02:00.451 [DEBUG] [Thread-190502] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:02:00.467 [DEBUG] [Thread-190502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:02:00.468 [DEBUG] [Thread-190502] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:02:00.469 [DEBUG] [Thread-190502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:02:00.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:02:00.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:02:00.512 [DEBUG] [Thread-190502] [transport.py] [_log()] userauth is OK
2026-02-14T19:02:00.513 [DEBUG] [Thread-190502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:02:00.513 [DEBUG] [Thread-190502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:02:00.513 [DEBUG] [Thread-190502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:02:00.513 [DEBUG] [Thread-190502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:02:00.535 [INFO] [Thread-190502] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:02:00.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:02:01.160 [DEBUG] [Thread-190502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:02:01.160 [DEBUG] [Thread-190502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:02:01.161 [DEBUG] [Thread-190502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:02:01.201 [DEBUG] [Thread-190502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:02:01.201 [DEBUG] [Thread-190502] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:02:01.204 [DEBUG] [Thread-190502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:02:01.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:02:01.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:02:01.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:02:01.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:02:01.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:02:01.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:02:01.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:02:01.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:02:01.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:02:01.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.709143 -999.00  +13.20  22.74     51   +3.40 1 1 1 1 1   887    0 9.25 -40.65 ----- 27.6 22.7 166.4 37.7 14.9 -26.8 14.8 -26.5 15.4 -25.2 15.8 -27.2
2026-02-14T19:02:01.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:02:01.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:02:01.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.709143
2026-02-14T19:02:01.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:02:01.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:02:01.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:02:01.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:02:01.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:02:01.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T18:59:44', tmtdew=11.72, humidity=44.87, cloud=0.0, wind=37.79, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:01:09.955', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:02:01.229 [DEBUG] [Thread-190502] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:02:01.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-14T19:02:01.326 [DEBUG] [Thread-190505] [transport.py] [_log()] starting thread (client mode): 0xa5771a50
2026-02-14T19:02:01.326 [DEBUG] [Thread-190505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:02:01.341 [DEBUG] [Thread-190505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:02:01.341 [INFO] [Thread-190505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:02:01.348 [DEBUG] [Thread-190505] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:02:01.349 [DEBUG] [Thread-190505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:02:01.349 [DEBUG] [Thread-190505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:02:01.349 [DEBUG] [Thread-190505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:02:01.349 [DEBUG] [Thread-190505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:02:01.350 [DEBUG] [Thread-190505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:02:01.350 [DEBUG] [Thread-190505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:02:01.350 [DEBUG] [Thread-190505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:02:01.350 [DEBUG] [Thread-190505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:02:01.350 [DEBUG] [Thread-190505] [transport.py] [_log()] client lang: <none>
2026-02-14T19:02:01.350 [DEBUG] [Thread-190505] [transport.py] [_log()] server lang: <none>
2026-02-14T19:02:01.350 [DEBUG] [Thread-190505] [transport.py] [_log()] kex follows: False
2026-02-14T19:02:01.350 [DEBUG] [Thread-190505] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:02:01.350 [DEBUG] [Thread-190505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:02:01.350 [DEBUG] [Thread-190505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:02:01.350 [DEBUG] [Thread-190505] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:02:01.350 [DEBUG] [Thread-190505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:02:01.350 [DEBUG] [Thread-190505] [transport.py] [_log()] Compression: none
2026-02-14T19:02:01.350 [DEBUG] [Thread-190505] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:02:01.408 [DEBUG] [Thread-190505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:02:01.408 [DEBUG] [Thread-190505] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:02:01.409 [DEBUG] [Thread-190505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:02:01.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:02:01.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:02:01.465 [DEBUG] [Thread-190505] [transport.py] [_log()] userauth is OK
2026-02-14T19:02:01.465 [DEBUG] [Thread-190505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:02:01.465 [DEBUG] [Thread-190505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:02:01.465 [DEBUG] [Thread-190505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:02:01.465 [DEBUG] [Thread-190505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:02:01.491 [INFO] [Thread-190505] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:02:01.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-14T19:02:01.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:02:02.338 [DEBUG] [Thread-190505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:02:02.338 [DEBUG] [Thread-190505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:02:02.386 [DEBUG] [Thread-190505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:02:02.386 [DEBUG] [Thread-190505] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:02:02.395 [DEBUG] [Thread-190505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:02:02.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:02:02.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-14T19:02:02.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-14T19:02:02.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:02:02.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:02:02.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:02:02.433 [DEBUG] [Thread-190505] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:02:04.396 [DEBUG] [Thread-190507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:02:17.581 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:02:17.582 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:02:19.455 [DEBUG] [Thread-190508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:02:32.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:02:32.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:02:32.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T19:02:34.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 1, 46), 11.67, 44.87, 0.0, 35.99, 13.49, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:02:34.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:01:46
2026-02-14T19:02:34.492 [DEBUG] [Thread-190509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:02:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:02:34.901 [DEBUG] [Thread-190510] [transport.py] [_log()] starting thread (client mode): 0xa57c3be0
2026-02-14T19:02:34.901 [DEBUG] [Thread-190510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:02:34.921 [DEBUG] [Thread-190510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:02:34.921 [INFO] [Thread-190510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:02:34.924 [DEBUG] [Thread-190510] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:02:34.924 [DEBUG] [Thread-190510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:02:34.924 [DEBUG] [Thread-190510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:02:34.924 [DEBUG] [Thread-190510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:02:34.924 [DEBUG] [Thread-190510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:02:34.924 [DEBUG] [Thread-190510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:02:34.924 [DEBUG] [Thread-190510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:02:34.924 [DEBUG] [Thread-190510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:02:34.924 [DEBUG] [Thread-190510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:02:34.924 [DEBUG] [Thread-190510] [transport.py] [_log()] client lang: <none>
2026-02-14T19:02:34.924 [DEBUG] [Thread-190510] [transport.py] [_log()] server lang: <none>
2026-02-14T19:02:34.924 [DEBUG] [Thread-190510] [transport.py] [_log()] kex follows: False
2026-02-14T19:02:34.924 [DEBUG] [Thread-190510] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:02:34.924 [DEBUG] [Thread-190510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:02:34.924 [DEBUG] [Thread-190510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:02:34.924 [DEBUG] [Thread-190510] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:02:34.924 [DEBUG] [Thread-190510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:02:34.924 [DEBUG] [Thread-190510] [transport.py] [_log()] Compression: none
2026-02-14T19:02:34.924 [DEBUG] [Thread-190510] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:02:34.941 [DEBUG] [Thread-190510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:02:34.942 [DEBUG] [Thread-190510] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:02:34.942 [DEBUG] [Thread-190510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:02:34.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:02:34.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:02:34.944 [DEBUG] [Thread-190510] [transport.py] [_log()] userauth is OK
2026-02-14T19:02:34.945 [DEBUG] [Thread-190510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:02:34.945 [DEBUG] [Thread-190510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:02:34.945 [DEBUG] [Thread-190510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:02:34.945 [DEBUG] [Thread-190510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:02:34.964 [INFO] [Thread-190510] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:02:34.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:02:35.603 [DEBUG] [Thread-190510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:02:35.603 [DEBUG] [Thread-190510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:02:35.604 [DEBUG] [Thread-190510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:02:35.644 [DEBUG] [Thread-190510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:02:35.645 [DEBUG] [Thread-190510] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:02:35.648 [DEBUG] [Thread-190510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:02:35.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:02:35.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:02:35.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:02:35.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:02:35.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:02:35.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:02:35.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:02:35.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:02:35.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:02:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.709490 -999.00  +13.20  31.89     51   +3.30 1 1 2 1 1   887    0 9.14 -42.58 ----- 32.8 31.9 168.6 34.4 14.8 -27.1 14.8 -26.1 15.4 -25.2 15.8 -26.8
2026-02-14T19:02:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:02:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:02:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.709490
2026-02-14T19:02:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:02:35.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:02:35.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:02:35.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:02:35.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:02:35.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:01:46', tmtdew=11.67, humidity=44.87, cloud=0.0, wind=35.99, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:01:39.936', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:02:35.675 [DEBUG] [Thread-190510] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:02:35.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-14T19:02:35.778 [DEBUG] [Thread-190513] [transport.py] [_log()] starting thread (client mode): 0xa2d03b50
2026-02-14T19:02:35.779 [DEBUG] [Thread-190513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:02:35.793 [DEBUG] [Thread-190513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:02:35.793 [INFO] [Thread-190513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:02:35.801 [DEBUG] [Thread-190513] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:02:35.801 [DEBUG] [Thread-190513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:02:35.801 [DEBUG] [Thread-190513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:02:35.801 [DEBUG] [Thread-190513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:02:35.801 [DEBUG] [Thread-190513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:02:35.801 [DEBUG] [Thread-190513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:02:35.801 [DEBUG] [Thread-190513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:02:35.801 [DEBUG] [Thread-190513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:02:35.801 [DEBUG] [Thread-190513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:02:35.801 [DEBUG] [Thread-190513] [transport.py] [_log()] client lang: <none>
2026-02-14T19:02:35.801 [DEBUG] [Thread-190513] [transport.py] [_log()] server lang: <none>
2026-02-14T19:02:35.801 [DEBUG] [Thread-190513] [transport.py] [_log()] kex follows: False
2026-02-14T19:02:35.801 [DEBUG] [Thread-190513] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:02:35.801 [DEBUG] [Thread-190513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:02:35.802 [DEBUG] [Thread-190513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:02:35.802 [DEBUG] [Thread-190513] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:02:35.802 [DEBUG] [Thread-190513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:02:35.802 [DEBUG] [Thread-190513] [transport.py] [_log()] Compression: none
2026-02-14T19:02:35.802 [DEBUG] [Thread-190513] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:02:35.861 [DEBUG] [Thread-190513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:02:35.862 [DEBUG] [Thread-190513] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:02:35.862 [DEBUG] [Thread-190513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:02:35.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:02:35.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:02:35.917 [DEBUG] [Thread-190513] [transport.py] [_log()] userauth is OK
2026-02-14T19:02:35.918 [DEBUG] [Thread-190513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:02:35.918 [DEBUG] [Thread-190513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:02:35.918 [DEBUG] [Thread-190513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:02:35.918 [DEBUG] [Thread-190513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:02:35.938 [INFO] [Thread-190513] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:02:35.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-14T19:02:35.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:02:36.752 [DEBUG] [Thread-190513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:02:36.752 [DEBUG] [Thread-190513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:02:36.800 [DEBUG] [Thread-190513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:02:36.800 [DEBUG] [Thread-190513] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:02:36.809 [DEBUG] [Thread-190513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:02:36.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:02: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-14T19:02:36.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-14T19:02:36.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:02:36.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:02:36.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:02:36.846 [DEBUG] [Thread-190513] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:02:37.715 [DEBUG] [Thread-190515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:02:49.529 [DEBUG] [Thread-190516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:03:04.581 [DEBUG] [Thread-190517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:03:06.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:03:06.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:03:06.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T19:03:08.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 2, 45), 11.64, 45.3, 0.0, 38.22, 13.51, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:03:08.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:02:45
2026-02-14T19:03:09.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:03:09.280 [DEBUG] [Thread-190518] [transport.py] [_log()] starting thread (client mode): 0xa57e2920
2026-02-14T19:03:09.280 [DEBUG] [Thread-190518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:03:09.301 [DEBUG] [Thread-190518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:03:09.302 [INFO] [Thread-190518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:03:09.305 [DEBUG] [Thread-190518] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:03:09.305 [DEBUG] [Thread-190518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:03:09.305 [DEBUG] [Thread-190518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:03:09.305 [DEBUG] [Thread-190518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:03:09.305 [DEBUG] [Thread-190518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:03:09.305 [DEBUG] [Thread-190518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:03:09.305 [DEBUG] [Thread-190518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:03:09.305 [DEBUG] [Thread-190518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:03:09.305 [DEBUG] [Thread-190518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:03:09.305 [DEBUG] [Thread-190518] [transport.py] [_log()] client lang: <none>
2026-02-14T19:03:09.305 [DEBUG] [Thread-190518] [transport.py] [_log()] server lang: <none>
2026-02-14T19:03:09.305 [DEBUG] [Thread-190518] [transport.py] [_log()] kex follows: False
2026-02-14T19:03:09.305 [DEBUG] [Thread-190518] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:03:09.305 [DEBUG] [Thread-190518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:03:09.305 [DEBUG] [Thread-190518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:03:09.305 [DEBUG] [Thread-190518] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:03:09.305 [DEBUG] [Thread-190518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:03:09.305 [DEBUG] [Thread-190518] [transport.py] [_log()] Compression: none
2026-02-14T19:03:09.305 [DEBUG] [Thread-190518] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:03:09.323 [DEBUG] [Thread-190518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:03:09.323 [DEBUG] [Thread-190518] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:03:09.324 [DEBUG] [Thread-190518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:03:09.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:03:09.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:03:09.326 [DEBUG] [Thread-190518] [transport.py] [_log()] userauth is OK
2026-02-14T19:03:09.326 [DEBUG] [Thread-190518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:03:09.326 [DEBUG] [Thread-190518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:03:09.326 [DEBUG] [Thread-190518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:03:09.327 [DEBUG] [Thread-190518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:03:09.346 [INFO] [Thread-190518] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:03:09.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:03:09.937 [DEBUG] [Thread-190518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:03:09.937 [DEBUG] [Thread-190518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:03:09.937 [DEBUG] [Thread-190518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:03:09.978 [DEBUG] [Thread-190518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:03:09.978 [DEBUG] [Thread-190518] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:03:09.982 [DEBUG] [Thread-190518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:03:09.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:03:09.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:03:09.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:03:09.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:03:10.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:03:10.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:03:10.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:03:10.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:03:10.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:03:10.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.709838 -999.00  +13.20  28.12     51   +3.30 1 1 1 1 1   887    0 9.03 -40.32 ----- 23.6 28.1 170.2 38.6 14.8 -27.1 14.7 -26.4 15.4 -26.0 15.7 -27.4
2026-02-14T19:03:10.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:03:10.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:03:10.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.709838
2026-02-14T19:03:10.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:03:10.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:03:10.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:03:10.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:03:10.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:03:10.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:02:45', tmtdew=11.64, humidity=45.3, cloud=0.0, wind=38.22, temperature=13.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:02:10.003', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:03:10.008 [DEBUG] [Thread-190518] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:03:10.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-14T19:03:10.101 [DEBUG] [Thread-190521] [transport.py] [_log()] starting thread (client mode): 0xa57e1e10
2026-02-14T19:03:10.101 [DEBUG] [Thread-190521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:03:10.118 [DEBUG] [Thread-190521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:03:10.118 [INFO] [Thread-190521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:03:10.126 [DEBUG] [Thread-190521] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:03:10.126 [DEBUG] [Thread-190521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:03:10.126 [DEBUG] [Thread-190521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:03:10.126 [DEBUG] [Thread-190521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:03:10.127 [DEBUG] [Thread-190521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:03:10.127 [DEBUG] [Thread-190521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:03:10.127 [DEBUG] [Thread-190521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:03:10.127 [DEBUG] [Thread-190521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:03:10.127 [DEBUG] [Thread-190521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:03:10.127 [DEBUG] [Thread-190521] [transport.py] [_log()] client lang: <none>
2026-02-14T19:03:10.127 [DEBUG] [Thread-190521] [transport.py] [_log()] server lang: <none>
2026-02-14T19:03:10.127 [DEBUG] [Thread-190521] [transport.py] [_log()] kex follows: False
2026-02-14T19:03:10.127 [DEBUG] [Thread-190521] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:03:10.128 [DEBUG] [Thread-190521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:03:10.128 [DEBUG] [Thread-190521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:03:10.128 [DEBUG] [Thread-190521] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:03:10.128 [DEBUG] [Thread-190521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:03:10.128 [DEBUG] [Thread-190521] [transport.py] [_log()] Compression: none
2026-02-14T19:03:10.128 [DEBUG] [Thread-190521] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:03:10.186 [DEBUG] [Thread-190521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:03:10.186 [DEBUG] [Thread-190521] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:03:10.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:03:10.188 [DEBUG] [Thread-190521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:03:10.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:03:10.242 [DEBUG] [Thread-190521] [transport.py] [_log()] userauth is OK
2026-02-14T19:03:10.242 [DEBUG] [Thread-190521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:03:10.242 [DEBUG] [Thread-190521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:03:10.242 [DEBUG] [Thread-190521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:03:10.242 [DEBUG] [Thread-190521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:03:10.265 [INFO] [Thread-190521] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:03:10.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-14T19:03:10.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:03:11.172 [DEBUG] [Thread-190521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:03:11.172 [DEBUG] [Thread-190521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:03:11.220 [DEBUG] [Thread-190521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:03:11.221 [DEBUG] [Thread-190521] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:03:11.230 [DEBUG] [Thread-190521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:03:11.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:03:11.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:03:11.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:03:11.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:03:11.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:03:11.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:03:11.266 [DEBUG] [Thread-190521] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:03:17.723 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:03:17.724 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:03:19.618 [DEBUG] [Thread-190523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:03:34.659 [DEBUG] [Thread-190524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:03:37.749 [DEBUG] [Thread-190525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:03:41.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:03:41.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:03: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-14T19:03:43.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 3, 21), 11.62, 45.37, 0.0, 38.94, 13.49, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:03:43.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:03:21
2026-02-14T19:03:44.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:03:44.307 [DEBUG] [Thread-190526] [transport.py] [_log()] starting thread (client mode): 0xa57c3130
2026-02-14T19:03:44.307 [DEBUG] [Thread-190526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:03:44.327 [DEBUG] [Thread-190526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:03:44.328 [INFO] [Thread-190526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:03:44.329 [DEBUG] [Thread-190526] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:03:44.329 [DEBUG] [Thread-190526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:03:44.329 [DEBUG] [Thread-190526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:03:44.329 [DEBUG] [Thread-190526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:03:44.329 [DEBUG] [Thread-190526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:03:44.329 [DEBUG] [Thread-190526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:03:44.329 [DEBUG] [Thread-190526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:03:44.329 [DEBUG] [Thread-190526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:03:44.330 [DEBUG] [Thread-190526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:03:44.330 [DEBUG] [Thread-190526] [transport.py] [_log()] client lang: <none>
2026-02-14T19:03:44.330 [DEBUG] [Thread-190526] [transport.py] [_log()] server lang: <none>
2026-02-14T19:03:44.330 [DEBUG] [Thread-190526] [transport.py] [_log()] kex follows: False
2026-02-14T19:03:44.330 [DEBUG] [Thread-190526] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:03:44.330 [DEBUG] [Thread-190526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:03:44.330 [DEBUG] [Thread-190526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:03:44.330 [DEBUG] [Thread-190526] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:03:44.330 [DEBUG] [Thread-190526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:03:44.330 [DEBUG] [Thread-190526] [transport.py] [_log()] Compression: none
2026-02-14T19:03:44.330 [DEBUG] [Thread-190526] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:03:44.348 [DEBUG] [Thread-190526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:03:44.349 [DEBUG] [Thread-190526] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:03:44.350 [DEBUG] [Thread-190526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:03:44.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:03:44.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:03:44.352 [DEBUG] [Thread-190526] [transport.py] [_log()] userauth is OK
2026-02-14T19:03:44.352 [DEBUG] [Thread-190526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:03:44.353 [DEBUG] [Thread-190526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:03:44.353 [DEBUG] [Thread-190526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:03:44.353 [DEBUG] [Thread-190526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:03:44.380 [INFO] [Thread-190526] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:03:44.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:03:44.978 [DEBUG] [Thread-190526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:03:44.978 [DEBUG] [Thread-190526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:03:44.979 [DEBUG] [Thread-190526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:03:45.019 [DEBUG] [Thread-190526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:03:45.020 [DEBUG] [Thread-190526] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:03:45.023 [DEBUG] [Thread-190526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:03:45.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:03:45.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:03:45.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:03:45.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:03:45.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:03:45.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:03:45.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:03:45.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:03:45.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:03:45.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.710532 -999.00  +13.20  34.61     51   +3.30 1 1 2 1 1   887    0 8.69 -44.12 ----- 30.0 34.6 169.0 40.2 14.8 -27.0 14.8 -26.0 15.3 -25.3 15.7 -27.2
2026-02-14T19:03:45.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:03:45.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:03:45.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.710532
2026-02-14T19:03:45.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:03:45.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:03:45.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:03:45.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:03:45.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:03:45.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:03:21', tmtdew=11.62, humidity=45.37, cloud=0.0, wind=38.94, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:03:09.965', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:03:45.050 [DEBUG] [Thread-190526] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:03:45.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-14T19:03:45.146 [DEBUG] [Thread-190529] [transport.py] [_log()] starting thread (client mode): 0xa57c1300
2026-02-14T19:03:45.146 [DEBUG] [Thread-190529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:03:45.160 [DEBUG] [Thread-190529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:03:45.161 [INFO] [Thread-190529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:03:45.168 [DEBUG] [Thread-190529] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:03:45.168 [DEBUG] [Thread-190529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:03:45.169 [DEBUG] [Thread-190529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:03:45.169 [DEBUG] [Thread-190529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:03:45.169 [DEBUG] [Thread-190529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:03:45.169 [DEBUG] [Thread-190529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:03:45.169 [DEBUG] [Thread-190529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:03:45.169 [DEBUG] [Thread-190529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:03:45.169 [DEBUG] [Thread-190529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:03:45.169 [DEBUG] [Thread-190529] [transport.py] [_log()] client lang: <none>
2026-02-14T19:03:45.169 [DEBUG] [Thread-190529] [transport.py] [_log()] server lang: <none>
2026-02-14T19:03:45.170 [DEBUG] [Thread-190529] [transport.py] [_log()] kex follows: False
2026-02-14T19:03:45.170 [DEBUG] [Thread-190529] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:03:45.170 [DEBUG] [Thread-190529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:03:45.170 [DEBUG] [Thread-190529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:03:45.170 [DEBUG] [Thread-190529] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:03:45.170 [DEBUG] [Thread-190529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:03:45.170 [DEBUG] [Thread-190529] [transport.py] [_log()] Compression: none
2026-02-14T19:03:45.171 [DEBUG] [Thread-190529] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:03:45.226 [DEBUG] [Thread-190529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:03:45.227 [DEBUG] [Thread-190529] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:03:45.228 [DEBUG] [Thread-190529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:03:45.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:03:45.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:03:45.282 [DEBUG] [Thread-190529] [transport.py] [_log()] userauth is OK
2026-02-14T19:03:45.282 [DEBUG] [Thread-190529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:03:45.282 [DEBUG] [Thread-190529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:03:45.282 [DEBUG] [Thread-190529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:03:45.283 [DEBUG] [Thread-190529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:03:45.300 [INFO] [Thread-190529] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:03:45.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-14T19:03:45.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:03:46.136 [DEBUG] [Thread-190529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:03:46.136 [DEBUG] [Thread-190529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:03:46.185 [DEBUG] [Thread-190529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:03:46.185 [DEBUG] [Thread-190529] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:03:46.195 [DEBUG] [Thread-190529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:03:46.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:03:46.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-14T19:03:46.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-14T19:03:46.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:03:46.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:03:46.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:03:46.231 [DEBUG] [Thread-190529] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:03:49.700 [DEBUG] [Thread-190531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:04:04.753 [DEBUG] [Thread-190532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:04:16.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:04:16.254 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:04:16.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-14T19:04:17.867 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:04:17.869 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:04:18.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 3, 56), 11.64, 44.95, 0.0, 41.09, 13.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:04:18.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:03:56
2026-02-14T19:04:18.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:04:18.886 [DEBUG] [Thread-190533] [transport.py] [_log()] starting thread (client mode): 0xa57e0a90
2026-02-14T19:04:18.886 [DEBUG] [Thread-190533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:04:18.905 [DEBUG] [Thread-190533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:04:18.905 [INFO] [Thread-190533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:04:18.908 [DEBUG] [Thread-190533] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:04:18.909 [DEBUG] [Thread-190533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:04:18.909 [DEBUG] [Thread-190533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:04:18.909 [DEBUG] [Thread-190533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:04:18.909 [DEBUG] [Thread-190533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:04:18.909 [DEBUG] [Thread-190533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:04:18.909 [DEBUG] [Thread-190533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:04:18.909 [DEBUG] [Thread-190533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:04:18.909 [DEBUG] [Thread-190533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:04:18.909 [DEBUG] [Thread-190533] [transport.py] [_log()] client lang: <none>
2026-02-14T19:04:18.909 [DEBUG] [Thread-190533] [transport.py] [_log()] server lang: <none>
2026-02-14T19:04:18.909 [DEBUG] [Thread-190533] [transport.py] [_log()] kex follows: False
2026-02-14T19:04:18.909 [DEBUG] [Thread-190533] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:04:18.909 [DEBUG] [Thread-190533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:04:18.909 [DEBUG] [Thread-190533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:04:18.909 [DEBUG] [Thread-190533] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:04:18.909 [DEBUG] [Thread-190533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:04:18.909 [DEBUG] [Thread-190533] [transport.py] [_log()] Compression: none
2026-02-14T19:04:18.909 [DEBUG] [Thread-190533] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:04:18.929 [DEBUG] [Thread-190533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:04:18.929 [DEBUG] [Thread-190533] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:04:18.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:04:18.931 [DEBUG] [Thread-190533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:04:18.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:04:18.933 [DEBUG] [Thread-190533] [transport.py] [_log()] userauth is OK
2026-02-14T19:04:18.933 [DEBUG] [Thread-190533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:04:18.933 [DEBUG] [Thread-190533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:04:18.933 [DEBUG] [Thread-190533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:04:18.933 [DEBUG] [Thread-190533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:04:18.952 [INFO] [Thread-190533] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:04:18.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:04:19.690 [DEBUG] [Thread-190533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:04:19.690 [DEBUG] [Thread-190533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:04:19.690 [DEBUG] [Thread-190533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:04:19.732 [DEBUG] [Thread-190533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:04:19.732 [DEBUG] [Thread-190533] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:04:19.735 [DEBUG] [Thread-190533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:04:19.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:04:19.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:04:19.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:04:19.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:04:19.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:04:19.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:04:19.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:04:19.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:04:19.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:04:19.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.710879 -999.00  +13.20  33.56     51   +3.40 1 1 2 1 1   887    0 8.98 -42.88 ----- 31.7 33.6 169.2 42.5 14.8 -26.9 14.7 -26.2 15.3 -25.3 15.6 -27.1
2026-02-14T19:04:19.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:04:19.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:04:19.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.710879
2026-02-14T19:04:19.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:04:19.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:04:19.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:04:19.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:04:19.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:04:19.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:03:56', tmtdew=11.64, humidity=44.95, cloud=0.0, wind=41.09, temperature=13.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:03:39.946', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:04:19.763 [DEBUG] [Thread-190533] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:04:19.792 [DEBUG] [Thread-190536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:04:19.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-14T19:04:19.868 [DEBUG] [Thread-190537] [transport.py] [_log()] starting thread (client mode): 0xa57e2290
2026-02-14T19:04:19.868 [DEBUG] [Thread-190537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:04:19.882 [DEBUG] [Thread-190537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:04:19.883 [INFO] [Thread-190537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:04:19.890 [DEBUG] [Thread-190537] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:04:19.890 [DEBUG] [Thread-190537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:04:19.890 [DEBUG] [Thread-190537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:04:19.890 [DEBUG] [Thread-190537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:04:19.890 [DEBUG] [Thread-190537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:04:19.890 [DEBUG] [Thread-190537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:04:19.890 [DEBUG] [Thread-190537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:04:19.890 [DEBUG] [Thread-190537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:04:19.891 [DEBUG] [Thread-190537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:04:19.891 [DEBUG] [Thread-190537] [transport.py] [_log()] client lang: <none>
2026-02-14T19:04:19.891 [DEBUG] [Thread-190537] [transport.py] [_log()] server lang: <none>
2026-02-14T19:04:19.891 [DEBUG] [Thread-190537] [transport.py] [_log()] kex follows: False
2026-02-14T19:04:19.891 [DEBUG] [Thread-190537] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:04:19.891 [DEBUG] [Thread-190537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:04:19.891 [DEBUG] [Thread-190537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:04:19.891 [DEBUG] [Thread-190537] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:04:19.891 [DEBUG] [Thread-190537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:04:19.892 [DEBUG] [Thread-190537] [transport.py] [_log()] Compression: none
2026-02-14T19:04:19.892 [DEBUG] [Thread-190537] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:04:19.952 [DEBUG] [Thread-190537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:04:19.953 [DEBUG] [Thread-190537] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:04:19.954 [DEBUG] [Thread-190537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:04:19.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:04:19.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:04:20.011 [DEBUG] [Thread-190537] [transport.py] [_log()] userauth is OK
2026-02-14T19:04:20.011 [DEBUG] [Thread-190537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:04:20.011 [DEBUG] [Thread-190537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:04:20.011 [DEBUG] [Thread-190537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:04:20.011 [DEBUG] [Thread-190537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:04:20.031 [INFO] [Thread-190537] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:04:20.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-14T19:04:20.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:04:20.845 [DEBUG] [Thread-190537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:04:20.845 [DEBUG] [Thread-190537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:04:20.894 [DEBUG] [Thread-190537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:04:20.894 [DEBUG] [Thread-190537] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:04:20.903 [DEBUG] [Thread-190537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:04:20.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:04:20.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-14T19:04:20.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-14T19:04:20.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:04:20.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:04:20.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:04:20.946 [DEBUG] [Thread-190537] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:04:34.831 [DEBUG] [Thread-190539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:04:37.784 [DEBUG] [Thread-190540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:04:49.871 [DEBUG] [Thread-190541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:04:50.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:04:50.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:04:50.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-14T19:04:53.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 4, 31), 11.62, 45.0, 0.0, 37.28, 13.41, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:04:53.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:04:31
2026-02-14T19:04:53.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:04:53.903 [DEBUG] [Thread-190542] [transport.py] [_log()] starting thread (client mode): 0xa57c20b0
2026-02-14T19:04:53.903 [DEBUG] [Thread-190542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:04:53.920 [DEBUG] [Thread-190542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:04:53.920 [INFO] [Thread-190542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:04:53.924 [DEBUG] [Thread-190542] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:04:53.924 [DEBUG] [Thread-190542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:04:53.924 [DEBUG] [Thread-190542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:04:53.924 [DEBUG] [Thread-190542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:04:53.924 [DEBUG] [Thread-190542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:04:53.924 [DEBUG] [Thread-190542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:04:53.924 [DEBUG] [Thread-190542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:04:53.924 [DEBUG] [Thread-190542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:04:53.924 [DEBUG] [Thread-190542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:04:53.924 [DEBUG] [Thread-190542] [transport.py] [_log()] client lang: <none>
2026-02-14T19:04:53.925 [DEBUG] [Thread-190542] [transport.py] [_log()] server lang: <none>
2026-02-14T19:04:53.925 [DEBUG] [Thread-190542] [transport.py] [_log()] kex follows: False
2026-02-14T19:04:53.925 [DEBUG] [Thread-190542] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:04:53.925 [DEBUG] [Thread-190542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:04:53.925 [DEBUG] [Thread-190542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:04:53.925 [DEBUG] [Thread-190542] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:04:53.925 [DEBUG] [Thread-190542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:04:53.925 [DEBUG] [Thread-190542] [transport.py] [_log()] Compression: none
2026-02-14T19:04:53.925 [DEBUG] [Thread-190542] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:04:53.940 [DEBUG] [Thread-190542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:04:53.941 [DEBUG] [Thread-190542] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:04:53.941 [DEBUG] [Thread-190542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:04:53.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:04:53.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:04:53.943 [DEBUG] [Thread-190542] [transport.py] [_log()] userauth is OK
2026-02-14T19:04:53.943 [DEBUG] [Thread-190542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:04:53.943 [DEBUG] [Thread-190542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:04:53.944 [DEBUG] [Thread-190542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:04:53.944 [DEBUG] [Thread-190542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:04:53.965 [INFO] [Thread-190542] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:04:53.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:04:54.563 [DEBUG] [Thread-190542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:04:54.564 [DEBUG] [Thread-190542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:04:54.564 [DEBUG] [Thread-190542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:04:54.604 [DEBUG] [Thread-190542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:04:54.605 [DEBUG] [Thread-190542] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:04:54.608 [DEBUG] [Thread-190542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:04:54.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:04:54.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:04:54.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:04:54.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:04:54.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:04:54.632 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:04:54.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:04:54.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:04:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:04:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.711226 -999.00  +13.20  30.86     51   +3.40 1 1 2 1 1   887    0 8.77 -43.42 ----- 29.8 30.9 168.2 40.4 14.8 -26.8 14.7 -26.1 15.3 -25.2 15.6 -26.9
2026-02-14T19:04:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:04:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:04:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.711226
2026-02-14T19:04:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:04:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:04:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:04:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:04:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:04:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:04:31', tmtdew=11.62, humidity=45.0, cloud=0.0, wind=37.28, temperature=13.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:04:09.926', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:04:54.635 [DEBUG] [Thread-190542] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:04:54.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-14T19:04:54.732 [DEBUG] [Thread-190545] [transport.py] [_log()] starting thread (client mode): 0xa57d68f0
2026-02-14T19:04:54.732 [DEBUG] [Thread-190545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:04:54.746 [DEBUG] [Thread-190545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:04:54.747 [INFO] [Thread-190545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:04:54.754 [DEBUG] [Thread-190545] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:04:54.755 [DEBUG] [Thread-190545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:04:54.755 [DEBUG] [Thread-190545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:04:54.755 [DEBUG] [Thread-190545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:04:54.755 [DEBUG] [Thread-190545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:04:54.755 [DEBUG] [Thread-190545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:04:54.755 [DEBUG] [Thread-190545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:04:54.755 [DEBUG] [Thread-190545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:04:54.755 [DEBUG] [Thread-190545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:04:54.755 [DEBUG] [Thread-190545] [transport.py] [_log()] client lang: <none>
2026-02-14T19:04:54.755 [DEBUG] [Thread-190545] [transport.py] [_log()] server lang: <none>
2026-02-14T19:04:54.755 [DEBUG] [Thread-190545] [transport.py] [_log()] kex follows: False
2026-02-14T19:04:54.755 [DEBUG] [Thread-190545] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:04:54.755 [DEBUG] [Thread-190545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:04:54.755 [DEBUG] [Thread-190545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:04:54.755 [DEBUG] [Thread-190545] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:04:54.756 [DEBUG] [Thread-190545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:04:54.756 [DEBUG] [Thread-190545] [transport.py] [_log()] Compression: none
2026-02-14T19:04:54.756 [DEBUG] [Thread-190545] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:04:54.815 [DEBUG] [Thread-190545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:04:54.815 [DEBUG] [Thread-190545] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:04:54.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:04:54.816 [DEBUG] [Thread-190545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:04:54.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:04:54.871 [DEBUG] [Thread-190545] [transport.py] [_log()] userauth is OK
2026-02-14T19:04:54.871 [DEBUG] [Thread-190545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:04:54.871 [DEBUG] [Thread-190545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:04:54.871 [DEBUG] [Thread-190545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:04:54.871 [DEBUG] [Thread-190545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:04:54.890 [INFO] [Thread-190545] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:04:54.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-14T19:04:54.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:04:55.708 [DEBUG] [Thread-190545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:04:55.709 [DEBUG] [Thread-190545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:04:55.756 [DEBUG] [Thread-190545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:04:55.757 [DEBUG] [Thread-190545] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:04:55.766 [DEBUG] [Thread-190545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:04:55.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:04:55.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-14T19:04:55.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:04:55.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:04:55.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:04:55.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:04:55.803 [DEBUG] [Thread-190545] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:05:04.907 [DEBUG] [Thread-190547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:05:18.009 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:05:18.010 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:05:19.962 [DEBUG] [Thread-190548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:05:25.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:05:25.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:05:25.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T19:05:27.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 5, 8), 11.63, 44.98, 0.0, 39.7, 13.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:05:27.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:05:08
2026-02-14T19:05:28.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:05:28.472 [DEBUG] [Thread-190549] [transport.py] [_log()] starting thread (client mode): 0xa2d00d30
2026-02-14T19:05:28.473 [DEBUG] [Thread-190549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:05:28.488 [DEBUG] [Thread-190549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:05:28.488 [INFO] [Thread-190549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:05:28.491 [DEBUG] [Thread-190549] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:05:28.491 [DEBUG] [Thread-190549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:05:28.491 [DEBUG] [Thread-190549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:05:28.491 [DEBUG] [Thread-190549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:05:28.491 [DEBUG] [Thread-190549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:05:28.491 [DEBUG] [Thread-190549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:05:28.491 [DEBUG] [Thread-190549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:05:28.491 [DEBUG] [Thread-190549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:05:28.491 [DEBUG] [Thread-190549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:05:28.491 [DEBUG] [Thread-190549] [transport.py] [_log()] client lang: <none>
2026-02-14T19:05:28.492 [DEBUG] [Thread-190549] [transport.py] [_log()] server lang: <none>
2026-02-14T19:05:28.492 [DEBUG] [Thread-190549] [transport.py] [_log()] kex follows: False
2026-02-14T19:05:28.492 [DEBUG] [Thread-190549] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:05:28.492 [DEBUG] [Thread-190549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:05:28.492 [DEBUG] [Thread-190549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:05:28.492 [DEBUG] [Thread-190549] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:05:28.492 [DEBUG] [Thread-190549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:05:28.492 [DEBUG] [Thread-190549] [transport.py] [_log()] Compression: none
2026-02-14T19:05:28.492 [DEBUG] [Thread-190549] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:05:28.511 [DEBUG] [Thread-190549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:05:28.512 [DEBUG] [Thread-190549] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:05:28.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:05:28.513 [DEBUG] [Thread-190549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:05:28.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:05:28.516 [DEBUG] [Thread-190549] [transport.py] [_log()] userauth is OK
2026-02-14T19:05:28.516 [DEBUG] [Thread-190549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:05:28.516 [DEBUG] [Thread-190549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:05:28.516 [DEBUG] [Thread-190549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:05:28.516 [DEBUG] [Thread-190549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:05:28.539 [INFO] [Thread-190549] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:05:28.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:05:29.093 [DEBUG] [Thread-190549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:05:29.094 [DEBUG] [Thread-190549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:05:29.094 [DEBUG] [Thread-190549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:05:29.134 [DEBUG] [Thread-190549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:05:29.134 [DEBUG] [Thread-190549] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:05:29.141 [DEBUG] [Thread-190549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:05:29.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:05:29.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:05:29.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:05:29.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:05:29.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:05:29.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:05:29.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:05:29.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:05:29.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:05:29.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.711921 -999.00  +13.20  25.37     51   +3.40 1 1 1 1 1   887    0 9.02 -40.11 ----- 24.4 25.4 163.6 37.4 14.7 -26.9 14.7 -26.4 15.2 -24.9 15.6 -27.1
2026-02-14T19:05:29.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:05:29.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:05:29.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.711921
2026-02-14T19:05:29.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:05:29.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:05:29.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:05:29.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:05:29.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:05:29.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:05:08', tmtdew=11.63, humidity=44.98, cloud=0.0, wind=39.7, temperature=13.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:05:09.974', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:05:29.165 [DEBUG] [Thread-190549] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:05:29.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-14T19:05:29.259 [DEBUG] [Thread-190552] [transport.py] [_log()] starting thread (client mode): 0xa2d00dc0
2026-02-14T19:05:29.259 [DEBUG] [Thread-190552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:05:29.274 [DEBUG] [Thread-190552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:05:29.274 [INFO] [Thread-190552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:05:29.282 [DEBUG] [Thread-190552] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:05:29.282 [DEBUG] [Thread-190552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:05:29.283 [DEBUG] [Thread-190552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:05:29.283 [DEBUG] [Thread-190552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:05:29.283 [DEBUG] [Thread-190552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:05:29.283 [DEBUG] [Thread-190552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:05:29.283 [DEBUG] [Thread-190552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:05:29.283 [DEBUG] [Thread-190552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:05:29.283 [DEBUG] [Thread-190552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:05:29.283 [DEBUG] [Thread-190552] [transport.py] [_log()] client lang: <none>
2026-02-14T19:05:29.283 [DEBUG] [Thread-190552] [transport.py] [_log()] server lang: <none>
2026-02-14T19:05:29.284 [DEBUG] [Thread-190552] [transport.py] [_log()] kex follows: False
2026-02-14T19:05:29.284 [DEBUG] [Thread-190552] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:05:29.284 [DEBUG] [Thread-190552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:05:29.284 [DEBUG] [Thread-190552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:05:29.284 [DEBUG] [Thread-190552] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:05:29.284 [DEBUG] [Thread-190552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:05:29.284 [DEBUG] [Thread-190552] [transport.py] [_log()] Compression: none
2026-02-14T19:05:29.285 [DEBUG] [Thread-190552] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:05:29.344 [DEBUG] [Thread-190552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:05:29.344 [DEBUG] [Thread-190552] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:05:29.345 [DEBUG] [Thread-190552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:05:29.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:05:29.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:05:29.401 [DEBUG] [Thread-190552] [transport.py] [_log()] userauth is OK
2026-02-14T19:05:29.401 [DEBUG] [Thread-190552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:05:29.402 [DEBUG] [Thread-190552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:05:29.402 [DEBUG] [Thread-190552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:05:29.402 [DEBUG] [Thread-190552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:05:29.426 [INFO] [Thread-190552] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:05:29.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-14T19:05:29.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:05:30.286 [DEBUG] [Thread-190552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:05:30.287 [DEBUG] [Thread-190552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:05:30.334 [DEBUG] [Thread-190552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:05:30.334 [DEBUG] [Thread-190552] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:05:30.343 [DEBUG] [Thread-190552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:05:30.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:05:30.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-14T19:05:30.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:05:30.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:05:30.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:05:30.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:05:30.379 [DEBUG] [Thread-190552] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:05:34.995 [DEBUG] [Thread-190554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:05:37.819 [DEBUG] [Thread-190555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:05:50.041 [DEBUG] [Thread-190556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:06:00.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:06:00.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:06:00.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-14T19:06:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 5, 43), 11.62, 45.02, 0.0, 37.72, 13.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:06:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:05:43
2026-02-14T19:06:02.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:06:02.879 [DEBUG] [Thread-190557] [transport.py] [_log()] starting thread (client mode): 0xa2d00b80
2026-02-14T19:06:02.879 [DEBUG] [Thread-190557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:06:02.899 [DEBUG] [Thread-190557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:06:02.899 [INFO] [Thread-190557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:06:02.900 [DEBUG] [Thread-190557] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:06:02.900 [DEBUG] [Thread-190557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:06:02.900 [DEBUG] [Thread-190557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:06:02.900 [DEBUG] [Thread-190557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:06:02.900 [DEBUG] [Thread-190557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:06:02.900 [DEBUG] [Thread-190557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:06:02.900 [DEBUG] [Thread-190557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:06:02.900 [DEBUG] [Thread-190557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:06:02.900 [DEBUG] [Thread-190557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:06:02.900 [DEBUG] [Thread-190557] [transport.py] [_log()] client lang: <none>
2026-02-14T19:06:02.900 [DEBUG] [Thread-190557] [transport.py] [_log()] server lang: <none>
2026-02-14T19:06:02.900 [DEBUG] [Thread-190557] [transport.py] [_log()] kex follows: False
2026-02-14T19:06:02.900 [DEBUG] [Thread-190557] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:06:02.900 [DEBUG] [Thread-190557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:06:02.900 [DEBUG] [Thread-190557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:06:02.900 [DEBUG] [Thread-190557] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:06:02.900 [DEBUG] [Thread-190557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:06:02.900 [DEBUG] [Thread-190557] [transport.py] [_log()] Compression: none
2026-02-14T19:06:02.900 [DEBUG] [Thread-190557] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:06:02.911 [DEBUG] [Thread-190557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:06:02.912 [DEBUG] [Thread-190557] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:06:02.912 [DEBUG] [Thread-190557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:06:02.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:06:02.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:06:02.914 [DEBUG] [Thread-190557] [transport.py] [_log()] userauth is OK
2026-02-14T19:06:02.914 [DEBUG] [Thread-190557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:06:02.914 [DEBUG] [Thread-190557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:06:02.914 [DEBUG] [Thread-190557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:06:02.914 [DEBUG] [Thread-190557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:06:02.934 [INFO] [Thread-190557] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:06:02.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:06:03.540 [DEBUG] [Thread-190557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:06:03.540 [DEBUG] [Thread-190557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:06:03.540 [DEBUG] [Thread-190557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:06:03.581 [DEBUG] [Thread-190557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:06:03.581 [DEBUG] [Thread-190557] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:06:03.582 [DEBUG] [Thread-190557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:06:03.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:06:03.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:06:03.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:06:03.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:06:03.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:06:03.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:06:03.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:06:03.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:06:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:06:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.712268 -999.00  +13.20  34.86     51   +3.30 1 1 2 1 1   887    0 8.86 -40.59 ----- 32.0 34.9 173.6 43.0 14.7 -27.1 14.6 -27.2 15.2 -25.1 15.5 -27.3
2026-02-14T19:06:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:06:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:06:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.712268
2026-02-14T19:06:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:06:03.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:06:03.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:06:03.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:06:03.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:06:03.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:05:43', tmtdew=11.62, humidity=45.02, cloud=0.0, wind=37.72, temperature=13.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:05:39.955', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:06:03.601 [DEBUG] [Thread-190557] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:06:03.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-14T19:06:03.688 [DEBUG] [Thread-190560] [transport.py] [_log()] starting thread (client mode): 0xa57e1d50
2026-02-14T19:06:03.688 [DEBUG] [Thread-190560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:06:03.703 [DEBUG] [Thread-190560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:06:03.703 [INFO] [Thread-190560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:06:03.710 [DEBUG] [Thread-190560] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:06:03.710 [DEBUG] [Thread-190560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:06:03.710 [DEBUG] [Thread-190560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:06:03.710 [DEBUG] [Thread-190560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:06:03.710 [DEBUG] [Thread-190560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:06:03.710 [DEBUG] [Thread-190560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:06:03.710 [DEBUG] [Thread-190560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:06:03.710 [DEBUG] [Thread-190560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:06:03.710 [DEBUG] [Thread-190560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:06:03.710 [DEBUG] [Thread-190560] [transport.py] [_log()] client lang: <none>
2026-02-14T19:06:03.710 [DEBUG] [Thread-190560] [transport.py] [_log()] server lang: <none>
2026-02-14T19:06:03.710 [DEBUG] [Thread-190560] [transport.py] [_log()] kex follows: False
2026-02-14T19:06:03.710 [DEBUG] [Thread-190560] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:06:03.710 [DEBUG] [Thread-190560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:06:03.710 [DEBUG] [Thread-190560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:06:03.710 [DEBUG] [Thread-190560] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:06:03.711 [DEBUG] [Thread-190560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:06:03.711 [DEBUG] [Thread-190560] [transport.py] [_log()] Compression: none
2026-02-14T19:06:03.711 [DEBUG] [Thread-190560] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:06:03.765 [DEBUG] [Thread-190560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:06:03.765 [DEBUG] [Thread-190560] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:06:03.766 [DEBUG] [Thread-190560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:06:03.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:06:03.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:06:03.825 [DEBUG] [Thread-190560] [transport.py] [_log()] userauth is OK
2026-02-14T19:06:03.825 [DEBUG] [Thread-190560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:06:03.825 [DEBUG] [Thread-190560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:06:03.825 [DEBUG] [Thread-190560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:06:03.825 [DEBUG] [Thread-190560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:06:03.839 [INFO] [Thread-190560] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:06:03.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-14T19:06:03.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:06:04.676 [DEBUG] [Thread-190560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:06:04.676 [DEBUG] [Thread-190560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:06:04.726 [DEBUG] [Thread-190560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:06:04.726 [DEBUG] [Thread-190560] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:06:04.735 [DEBUG] [Thread-190560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:06:04.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:06:04.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-14T19:06:04.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-14T19:06:04.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:06:04.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:06:04.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:06:04.772 [DEBUG] [Thread-190560] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:06:05.080 [DEBUG] [Thread-190562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:06:18.153 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:06:18.154 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:06:20.142 [DEBUG] [Thread-190563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:06:34.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:06:34.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:06:34.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-14T19:06:35.176 [DEBUG] [Thread-190564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:06:36.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 6, 18), 11.59, 45.15, 0.0, 39.38, 13.56, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:06:36.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:06:18
2026-02-14T19:06:37.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:06:37.251 [DEBUG] [Thread-190565] [transport.py] [_log()] starting thread (client mode): 0xa57d63b0
2026-02-14T19:06:37.252 [DEBUG] [Thread-190565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:06:37.271 [DEBUG] [Thread-190565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:06:37.271 [INFO] [Thread-190565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:06:37.275 [DEBUG] [Thread-190565] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:06:37.275 [DEBUG] [Thread-190565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:06:37.275 [DEBUG] [Thread-190565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:06:37.275 [DEBUG] [Thread-190565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:06:37.275 [DEBUG] [Thread-190565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:06:37.275 [DEBUG] [Thread-190565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:06:37.275 [DEBUG] [Thread-190565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:06:37.275 [DEBUG] [Thread-190565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:06:37.275 [DEBUG] [Thread-190565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:06:37.275 [DEBUG] [Thread-190565] [transport.py] [_log()] client lang: <none>
2026-02-14T19:06:37.275 [DEBUG] [Thread-190565] [transport.py] [_log()] server lang: <none>
2026-02-14T19:06:37.275 [DEBUG] [Thread-190565] [transport.py] [_log()] kex follows: False
2026-02-14T19:06:37.276 [DEBUG] [Thread-190565] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:06:37.276 [DEBUG] [Thread-190565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:06:37.276 [DEBUG] [Thread-190565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:06:37.276 [DEBUG] [Thread-190565] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:06:37.276 [DEBUG] [Thread-190565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:06:37.276 [DEBUG] [Thread-190565] [transport.py] [_log()] Compression: none
2026-02-14T19:06:37.276 [DEBUG] [Thread-190565] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:06:37.293 [DEBUG] [Thread-190565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:06:37.293 [DEBUG] [Thread-190565] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:06:37.294 [DEBUG] [Thread-190565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:06:37.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:06:37.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:06:37.296 [DEBUG] [Thread-190565] [transport.py] [_log()] userauth is OK
2026-02-14T19:06:37.296 [DEBUG] [Thread-190565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:06:37.296 [DEBUG] [Thread-190565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:06:37.296 [DEBUG] [Thread-190565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:06:37.296 [DEBUG] [Thread-190565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:06:37.332 [INFO] [Thread-190565] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:06:37.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:06:37.863 [DEBUG] [Thread-190567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:06:37.937 [DEBUG] [Thread-190565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:06:37.937 [DEBUG] [Thread-190565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:06:37.938 [DEBUG] [Thread-190565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:06:37.978 [DEBUG] [Thread-190565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:06:37.979 [DEBUG] [Thread-190565] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:06:37.982 [DEBUG] [Thread-190565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:06:37.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:06:37.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:06:37.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:06:38.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:06:38.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:06:38.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:06:38.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:06:38.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:06:38.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:06:38.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.712615 -999.00  +13.20  31.55     51   +3.40 1 1 2 1 1   887    0 8.91 -40.27 ----- 26.3 31.6 174.0 37.0 14.7 -26.9 14.6 -26.0 15.1 -25.1 15.4 -26.7
2026-02-14T19:06:38.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:06:38.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:06:38.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.712615
2026-02-14T19:06:38.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:06:38.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:06:38.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:06:38.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:06:38.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:06:38.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:06:18', tmtdew=11.59, humidity=45.15, cloud=0.0, wind=39.38, temperature=13.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:06:09.936', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:06:38.015 [DEBUG] [Thread-190565] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:06:38.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-14T19:06:38.107 [DEBUG] [Thread-190569] [transport.py] [_log()] starting thread (client mode): 0xa2d00ac0
2026-02-14T19:06:38.107 [DEBUG] [Thread-190569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:06:38.122 [DEBUG] [Thread-190569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:06:38.122 [INFO] [Thread-190569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:06:38.129 [DEBUG] [Thread-190569] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:06:38.130 [DEBUG] [Thread-190569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:06:38.130 [DEBUG] [Thread-190569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:06:38.130 [DEBUG] [Thread-190569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:06:38.130 [DEBUG] [Thread-190569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:06:38.130 [DEBUG] [Thread-190569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:06:38.131 [DEBUG] [Thread-190569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:06:38.131 [DEBUG] [Thread-190569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:06:38.131 [DEBUG] [Thread-190569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:06:38.131 [DEBUG] [Thread-190569] [transport.py] [_log()] client lang: <none>
2026-02-14T19:06:38.131 [DEBUG] [Thread-190569] [transport.py] [_log()] server lang: <none>
2026-02-14T19:06:38.131 [DEBUG] [Thread-190569] [transport.py] [_log()] kex follows: False
2026-02-14T19:06:38.131 [DEBUG] [Thread-190569] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:06:38.131 [DEBUG] [Thread-190569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:06:38.131 [DEBUG] [Thread-190569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:06:38.132 [DEBUG] [Thread-190569] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:06:38.132 [DEBUG] [Thread-190569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:06:38.132 [DEBUG] [Thread-190569] [transport.py] [_log()] Compression: none
2026-02-14T19:06:38.132 [DEBUG] [Thread-190569] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:06:38.188 [DEBUG] [Thread-190569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:06:38.189 [DEBUG] [Thread-190569] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:06:38.189 [DEBUG] [Thread-190569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:06:38.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:06:38.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:06:38.244 [DEBUG] [Thread-190569] [transport.py] [_log()] userauth is OK
2026-02-14T19:06:38.245 [DEBUG] [Thread-190569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:06:38.245 [DEBUG] [Thread-190569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:06:38.245 [DEBUG] [Thread-190569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:06:38.245 [DEBUG] [Thread-190569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:06:38.271 [INFO] [Thread-190569] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:06:38.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-14T19:06:38.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:06:39.100 [DEBUG] [Thread-190569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:06:39.100 [DEBUG] [Thread-190569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:06:39.148 [DEBUG] [Thread-190569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:06:39.149 [DEBUG] [Thread-190569] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:06:39.158 [DEBUG] [Thread-190569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:06:39.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:06:39.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-14T19:06:39.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-14T19:06:39.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:06:39.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:06:39.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:06:39.195 [DEBUG] [Thread-190569] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:06:50.218 [DEBUG] [Thread-190571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:07:05.268 [DEBUG] [Thread-190572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:07:09.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:07:09.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:07:09.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-14T19:07:11.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 6, 54), 11.53, 45.63, 0.0, 44.13, 13.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:07:11.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:06:54
2026-02-14T19:07:11.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:07:11.645 [DEBUG] [Thread-190573] [transport.py] [_log()] starting thread (client mode): 0xa57c1690
2026-02-14T19:07:11.645 [DEBUG] [Thread-190573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:07:11.674 [DEBUG] [Thread-190573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:07:11.674 [INFO] [Thread-190573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:07:11.678 [DEBUG] [Thread-190573] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:07:11.678 [DEBUG] [Thread-190573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:07:11.678 [DEBUG] [Thread-190573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:07:11.678 [DEBUG] [Thread-190573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:07:11.678 [DEBUG] [Thread-190573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:07:11.678 [DEBUG] [Thread-190573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:07:11.679 [DEBUG] [Thread-190573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:07:11.679 [DEBUG] [Thread-190573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:07:11.679 [DEBUG] [Thread-190573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:07:11.679 [DEBUG] [Thread-190573] [transport.py] [_log()] client lang: <none>
2026-02-14T19:07:11.679 [DEBUG] [Thread-190573] [transport.py] [_log()] server lang: <none>
2026-02-14T19:07:11.679 [DEBUG] [Thread-190573] [transport.py] [_log()] kex follows: False
2026-02-14T19:07:11.679 [DEBUG] [Thread-190573] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:07:11.679 [DEBUG] [Thread-190573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:07:11.679 [DEBUG] [Thread-190573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:07:11.679 [DEBUG] [Thread-190573] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:07:11.679 [DEBUG] [Thread-190573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:07:11.679 [DEBUG] [Thread-190573] [transport.py] [_log()] Compression: none
2026-02-14T19:07:11.679 [DEBUG] [Thread-190573] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:07:11.698 [DEBUG] [Thread-190573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:07:11.699 [DEBUG] [Thread-190573] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:07:11.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:07:11.700 [DEBUG] [Thread-190573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:07:11.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:07:11.702 [DEBUG] [Thread-190573] [transport.py] [_log()] userauth is OK
2026-02-14T19:07:11.703 [DEBUG] [Thread-190573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:07:11.703 [DEBUG] [Thread-190573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:07:11.703 [DEBUG] [Thread-190573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:07:11.703 [DEBUG] [Thread-190573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:07:11.738 [INFO] [Thread-190573] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:07:11.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:07:12.387 [DEBUG] [Thread-190573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:07:12.388 [DEBUG] [Thread-190573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:07:12.388 [DEBUG] [Thread-190573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:07:12.428 [DEBUG] [Thread-190573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:07:12.429 [DEBUG] [Thread-190573] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:07:12.432 [DEBUG] [Thread-190573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:07:12.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:07:12.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:07:12.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:07:12.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:07:12.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:07:12.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:07:12.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:07:12.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:07:12.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:07:12.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.712963 -999.00  +13.20  31.40     51   +3.40 1 1 2 1 1   887    0 9.14 -37.35 ----- 29.5 31.4 165.0 43.3 14.7 -27.0 14.6 -26.1 15.2 -25.5 15.5 -27.1
2026-02-14T19:07:12.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:07:12.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:07:12.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.712963
2026-02-14T19:07:12.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:07:12.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:07:12.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:07:12.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:07:12.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:07:12.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:06:54', tmtdew=11.53, humidity=45.63, cloud=0.0, wind=44.13, temperature=13.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:06:40.003', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:07:12.460 [DEBUG] [Thread-190573] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:07:12.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-14T19:07:12.560 [DEBUG] [Thread-190576] [transport.py] [_log()] starting thread (client mode): 0xa57e2fe0
2026-02-14T19:07:12.560 [DEBUG] [Thread-190576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:07:12.577 [DEBUG] [Thread-190576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:07:12.578 [INFO] [Thread-190576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:07:12.585 [DEBUG] [Thread-190576] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:07:12.586 [DEBUG] [Thread-190576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:07:12.586 [DEBUG] [Thread-190576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:07:12.586 [DEBUG] [Thread-190576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:07:12.586 [DEBUG] [Thread-190576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:07:12.586 [DEBUG] [Thread-190576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:07:12.586 [DEBUG] [Thread-190576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:07:12.586 [DEBUG] [Thread-190576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:07:12.586 [DEBUG] [Thread-190576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:07:12.586 [DEBUG] [Thread-190576] [transport.py] [_log()] client lang: <none>
2026-02-14T19:07:12.586 [DEBUG] [Thread-190576] [transport.py] [_log()] server lang: <none>
2026-02-14T19:07:12.586 [DEBUG] [Thread-190576] [transport.py] [_log()] kex follows: False
2026-02-14T19:07:12.586 [DEBUG] [Thread-190576] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:07:12.586 [DEBUG] [Thread-190576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:07:12.587 [DEBUG] [Thread-190576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:07:12.587 [DEBUG] [Thread-190576] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:07:12.587 [DEBUG] [Thread-190576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:07:12.587 [DEBUG] [Thread-190576] [transport.py] [_log()] Compression: none
2026-02-14T19:07:12.587 [DEBUG] [Thread-190576] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:07:12.646 [DEBUG] [Thread-190576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:07:12.646 [DEBUG] [Thread-190576] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:07:12.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:07:12.648 [DEBUG] [Thread-190576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:07:12.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:07:12.704 [DEBUG] [Thread-190576] [transport.py] [_log()] userauth is OK
2026-02-14T19:07:12.705 [DEBUG] [Thread-190576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:07:12.705 [DEBUG] [Thread-190576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:07:12.705 [DEBUG] [Thread-190576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:07:12.705 [DEBUG] [Thread-190576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:07:12.723 [INFO] [Thread-190576] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:07: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-14T19:07:12.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:07:13.552 [DEBUG] [Thread-190576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:07:13.552 [DEBUG] [Thread-190576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:07:13.600 [DEBUG] [Thread-190576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:07:13.601 [DEBUG] [Thread-190576] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:07:13.610 [DEBUG] [Thread-190576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:07:13.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:07:13.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:07:13.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:07:13.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:07:13.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:07:13.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:07:13.646 [DEBUG] [Thread-190576] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:07:18.295 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:07:18.296 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:07:20.304 [DEBUG] [Thread-190578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:07:35.355 [DEBUG] [Thread-190579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:07:37.896 [DEBUG] [Thread-190580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:07:43.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:07:43.660 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:07:43.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-14T19:07:46.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 7, 29), 11.48, 45.77, 0.0, 44.85, 13.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:07:46.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:07:29
2026-02-14T19:07:46.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:07:46.706 [DEBUG] [Thread-190581] [transport.py] [_log()] starting thread (client mode): 0xa57d44c0
2026-02-14T19:07:46.706 [DEBUG] [Thread-190581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:07:46.723 [DEBUG] [Thread-190581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:07:46.723 [INFO] [Thread-190581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:07:46.726 [DEBUG] [Thread-190581] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:07:46.726 [DEBUG] [Thread-190581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:07:46.726 [DEBUG] [Thread-190581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:07:46.726 [DEBUG] [Thread-190581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:07:46.726 [DEBUG] [Thread-190581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:07:46.726 [DEBUG] [Thread-190581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:07:46.726 [DEBUG] [Thread-190581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:07:46.726 [DEBUG] [Thread-190581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:07:46.726 [DEBUG] [Thread-190581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:07:46.726 [DEBUG] [Thread-190581] [transport.py] [_log()] client lang: <none>
2026-02-14T19:07:46.726 [DEBUG] [Thread-190581] [transport.py] [_log()] server lang: <none>
2026-02-14T19:07:46.726 [DEBUG] [Thread-190581] [transport.py] [_log()] kex follows: False
2026-02-14T19:07:46.726 [DEBUG] [Thread-190581] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:07:46.726 [DEBUG] [Thread-190581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:07:46.726 [DEBUG] [Thread-190581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:07:46.726 [DEBUG] [Thread-190581] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:07:46.726 [DEBUG] [Thread-190581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:07:46.726 [DEBUG] [Thread-190581] [transport.py] [_log()] Compression: none
2026-02-14T19:07:46.726 [DEBUG] [Thread-190581] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:07:46.744 [DEBUG] [Thread-190581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:07:46.744 [DEBUG] [Thread-190581] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:07:46.745 [DEBUG] [Thread-190581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:07:46.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:07:46.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:07:46.748 [DEBUG] [Thread-190581] [transport.py] [_log()] userauth is OK
2026-02-14T19:07:46.748 [DEBUG] [Thread-190581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:07:46.748 [DEBUG] [Thread-190581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:07:46.748 [DEBUG] [Thread-190581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:07:46.748 [DEBUG] [Thread-190581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:07:46.773 [INFO] [Thread-190581] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:07:46.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:07:47.394 [DEBUG] [Thread-190581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:07:47.394 [DEBUG] [Thread-190581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:07:47.395 [DEBUG] [Thread-190581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:07:47.436 [DEBUG] [Thread-190581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:07:47.437 [DEBUG] [Thread-190581] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:07:47.441 [DEBUG] [Thread-190581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:07:47.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:07:47.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:07:47.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:07:47.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:07:47.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:07:47.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:07:47.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:07:47.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:07:47.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:07:47.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.713310 -999.00  +13.10  27.01     51   +3.40 1 1 1 1 1   887    0 8.94 -38.26 ----- 28.0 27.0 166.3 37.6 14.7 -26.9 14.6 -25.8 15.1 -25.2 15.4 -27.2
2026-02-14T19:07:47.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:07:47.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:07:47.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.713310
2026-02-14T19:07:47.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:07:47.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:07:47.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:07:47.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:07:47.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:07:47.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:07:29', tmtdew=11.48, humidity=45.77, cloud=0.0, wind=44.85, temperature=13.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:07:09.984', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:07:47.473 [DEBUG] [Thread-190581] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:07:47.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-14T19:07:47.567 [DEBUG] [Thread-190584] [transport.py] [_log()] starting thread (client mode): 0xa57d68f0
2026-02-14T19:07:47.567 [DEBUG] [Thread-190584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:07:47.583 [DEBUG] [Thread-190584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:07:47.583 [INFO] [Thread-190584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:07:47.590 [DEBUG] [Thread-190584] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:07:47.591 [DEBUG] [Thread-190584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:07:47.591 [DEBUG] [Thread-190584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:07:47.591 [DEBUG] [Thread-190584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:07:47.591 [DEBUG] [Thread-190584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:07:47.591 [DEBUG] [Thread-190584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:07:47.591 [DEBUG] [Thread-190584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:07:47.591 [DEBUG] [Thread-190584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:07:47.591 [DEBUG] [Thread-190584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:07:47.591 [DEBUG] [Thread-190584] [transport.py] [_log()] client lang: <none>
2026-02-14T19:07:47.591 [DEBUG] [Thread-190584] [transport.py] [_log()] server lang: <none>
2026-02-14T19:07:47.591 [DEBUG] [Thread-190584] [transport.py] [_log()] kex follows: False
2026-02-14T19:07:47.591 [DEBUG] [Thread-190584] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:07:47.591 [DEBUG] [Thread-190584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:07:47.591 [DEBUG] [Thread-190584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:07:47.591 [DEBUG] [Thread-190584] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:07:47.592 [DEBUG] [Thread-190584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:07:47.592 [DEBUG] [Thread-190584] [transport.py] [_log()] Compression: none
2026-02-14T19:07:47.592 [DEBUG] [Thread-190584] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:07:47.649 [DEBUG] [Thread-190584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:07:47.650 [DEBUG] [Thread-190584] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:07:47.650 [DEBUG] [Thread-190584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:07:47.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:07:47.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:07:47.705 [DEBUG] [Thread-190584] [transport.py] [_log()] userauth is OK
2026-02-14T19:07:47.705 [DEBUG] [Thread-190584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:07:47.705 [DEBUG] [Thread-190584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:07:47.705 [DEBUG] [Thread-190584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:07:47.706 [DEBUG] [Thread-190584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:07:47.724 [INFO] [Thread-190584] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:07:47.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-14T19:07:47.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:07:48.568 [DEBUG] [Thread-190584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:07:48.569 [DEBUG] [Thread-190584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:07:48.616 [DEBUG] [Thread-190584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:07:48.616 [DEBUG] [Thread-190584] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:07:48.625 [DEBUG] [Thread-190584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:07:48.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:07:48.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:07:48.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:07:48.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:07:48.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:07:48.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:07:48.660 [DEBUG] [Thread-190584] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:07:50.391 [DEBUG] [Thread-190586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:08:05.440 [DEBUG] [Thread-190587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:08:18.438 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:08:18.439 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:08:18.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:08:18.682 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:08:18.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-14T19:08:20.479 [DEBUG] [Thread-190588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:08:20.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 8, 5), 11.46, 45.82, 0.0, 42.5, 13.28, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:08:20.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:08:05
2026-02-14T19:08:21.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:08:21.200 [DEBUG] [Thread-190589] [transport.py] [_log()] starting thread (client mode): 0xa57d6aa0
2026-02-14T19:08:21.200 [DEBUG] [Thread-190589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:08:21.220 [DEBUG] [Thread-190589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:08:21.220 [INFO] [Thread-190589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:08:21.223 [DEBUG] [Thread-190589] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:08:21.223 [DEBUG] [Thread-190589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:08:21.223 [DEBUG] [Thread-190589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:08:21.223 [DEBUG] [Thread-190589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:08:21.223 [DEBUG] [Thread-190589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:08:21.223 [DEBUG] [Thread-190589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:08:21.223 [DEBUG] [Thread-190589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:08:21.223 [DEBUG] [Thread-190589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:08:21.223 [DEBUG] [Thread-190589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:08:21.223 [DEBUG] [Thread-190589] [transport.py] [_log()] client lang: <none>
2026-02-14T19:08:21.223 [DEBUG] [Thread-190589] [transport.py] [_log()] server lang: <none>
2026-02-14T19:08:21.223 [DEBUG] [Thread-190589] [transport.py] [_log()] kex follows: False
2026-02-14T19:08:21.223 [DEBUG] [Thread-190589] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:08:21.223 [DEBUG] [Thread-190589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:08:21.223 [DEBUG] [Thread-190589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:08:21.223 [DEBUG] [Thread-190589] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:08:21.223 [DEBUG] [Thread-190589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:08:21.223 [DEBUG] [Thread-190589] [transport.py] [_log()] Compression: none
2026-02-14T19:08:21.223 [DEBUG] [Thread-190589] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:08:21.232 [DEBUG] [Thread-190589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:08:21.232 [DEBUG] [Thread-190589] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:08:21.232 [DEBUG] [Thread-190589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:08:21.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:08:21.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:08:21.234 [DEBUG] [Thread-190589] [transport.py] [_log()] userauth is OK
2026-02-14T19:08:21.234 [DEBUG] [Thread-190589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:08:21.234 [DEBUG] [Thread-190589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:08:21.234 [DEBUG] [Thread-190589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:08:21.234 [DEBUG] [Thread-190589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:08:21.257 [INFO] [Thread-190589] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:08:21.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:08:21.904 [DEBUG] [Thread-190589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:08:21.904 [DEBUG] [Thread-190589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:08:21.904 [DEBUG] [Thread-190589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:08:21.945 [DEBUG] [Thread-190589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:08:21.945 [DEBUG] [Thread-190589] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:08:21.948 [DEBUG] [Thread-190589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:08:21.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:08:21.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:08:21.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:08:21.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:08:21.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:08:21.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:08:21.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:08:21.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:08:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:08:21.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.714004 -999.00  +13.10  28.24     51   +3.40 1 1 1 1 1   887    0 9.07 -39.50 ----- 29.4 28.2 158.2 41.0 14.6 -27.0 14.5 -25.9 15.0 -25.2 15.4 -27.0
2026-02-14T19:08:21.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:08:21.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:08:21.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.714004
2026-02-14T19:08:21.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:08:21.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:08:21.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:08:21.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:08:21.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:08:21.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:08:05', tmtdew=11.46, humidity=45.82, cloud=0.0, wind=42.5, temperature=13.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:08:09.946', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:08:21.972 [DEBUG] [Thread-190589] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:08:22.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-14T19:08:22.057 [DEBUG] [Thread-190592] [transport.py] [_log()] starting thread (client mode): 0xa2d7bb80
2026-02-14T19:08:22.057 [DEBUG] [Thread-190592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:08:22.075 [DEBUG] [Thread-190592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:08:22.075 [INFO] [Thread-190592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:08:22.085 [DEBUG] [Thread-190592] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:08:22.085 [DEBUG] [Thread-190592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:08:22.085 [DEBUG] [Thread-190592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:08:22.086 [DEBUG] [Thread-190592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:08:22.086 [DEBUG] [Thread-190592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:08:22.086 [DEBUG] [Thread-190592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:08:22.086 [DEBUG] [Thread-190592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:08:22.086 [DEBUG] [Thread-190592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:08:22.086 [DEBUG] [Thread-190592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:08:22.086 [DEBUG] [Thread-190592] [transport.py] [_log()] client lang: <none>
2026-02-14T19:08:22.086 [DEBUG] [Thread-190592] [transport.py] [_log()] server lang: <none>
2026-02-14T19:08:22.086 [DEBUG] [Thread-190592] [transport.py] [_log()] kex follows: False
2026-02-14T19:08:22.087 [DEBUG] [Thread-190592] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:08:22.087 [DEBUG] [Thread-190592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:08:22.087 [DEBUG] [Thread-190592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:08:22.087 [DEBUG] [Thread-190592] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:08:22.087 [DEBUG] [Thread-190592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:08:22.087 [DEBUG] [Thread-190592] [transport.py] [_log()] Compression: none
2026-02-14T19:08:22.087 [DEBUG] [Thread-190592] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:08:22.142 [DEBUG] [Thread-190592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:08:22.142 [DEBUG] [Thread-190592] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:08:22.143 [DEBUG] [Thread-190592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:08:22.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:08:22.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:08:22.199 [DEBUG] [Thread-190592] [transport.py] [_log()] userauth is OK
2026-02-14T19:08:22.199 [DEBUG] [Thread-190592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:08:22.199 [DEBUG] [Thread-190592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:08:22.199 [DEBUG] [Thread-190592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:08:22.199 [DEBUG] [Thread-190592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:08:22.218 [INFO] [Thread-190592] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:08:22.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-14T19:08:22.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:08:23.061 [DEBUG] [Thread-190592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:08:23.062 [DEBUG] [Thread-190592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:08:23.114 [DEBUG] [Thread-190592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:08:23.114 [DEBUG] [Thread-190592] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:08:23.123 [DEBUG] [Thread-190592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:08:23.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:08:23.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:08:23.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-14T19:08:23.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:08:23.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:08:23.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:08:23.160 [DEBUG] [Thread-190592] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:08:35.518 [DEBUG] [Thread-190594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:08:37.943 [DEBUG] [Thread-190595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:08:50.580 [DEBUG] [Thread-190596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:08:53.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:08:53.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:08:53.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-14T19:08:55.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 8, 40), 11.81, 44.7, 0.0, 43.26, 13.82, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:08:55.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:08:40
2026-02-14T19:08:55.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:08:56.146 [DEBUG] [Thread-190597] [transport.py] [_log()] starting thread (client mode): 0xa5771fc0
2026-02-14T19:08:56.146 [DEBUG] [Thread-190597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:08:56.166 [DEBUG] [Thread-190597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:08:56.166 [INFO] [Thread-190597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:08:56.169 [DEBUG] [Thread-190597] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:08:56.169 [DEBUG] [Thread-190597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:08:56.170 [DEBUG] [Thread-190597] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:08:56.170 [DEBUG] [Thread-190597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:08:56.170 [DEBUG] [Thread-190597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:08:56.170 [DEBUG] [Thread-190597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:08:56.170 [DEBUG] [Thread-190597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:08:56.170 [DEBUG] [Thread-190597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:08:56.170 [DEBUG] [Thread-190597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:08:56.170 [DEBUG] [Thread-190597] [transport.py] [_log()] client lang: <none>
2026-02-14T19:08:56.170 [DEBUG] [Thread-190597] [transport.py] [_log()] server lang: <none>
2026-02-14T19:08:56.170 [DEBUG] [Thread-190597] [transport.py] [_log()] kex follows: False
2026-02-14T19:08:56.170 [DEBUG] [Thread-190597] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:08:56.170 [DEBUG] [Thread-190597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:08:56.170 [DEBUG] [Thread-190597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:08:56.170 [DEBUG] [Thread-190597] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:08:56.170 [DEBUG] [Thread-190597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:08:56.170 [DEBUG] [Thread-190597] [transport.py] [_log()] Compression: none
2026-02-14T19:08:56.170 [DEBUG] [Thread-190597] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:08:56.180 [DEBUG] [Thread-190597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:08:56.181 [DEBUG] [Thread-190597] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:08:56.182 [DEBUG] [Thread-190597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:08:56.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:08:56.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:08:56.184 [DEBUG] [Thread-190597] [transport.py] [_log()] userauth is OK
2026-02-14T19:08:56.184 [DEBUG] [Thread-190597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:08:56.184 [DEBUG] [Thread-190597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:08:56.184 [DEBUG] [Thread-190597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:08:56.184 [DEBUG] [Thread-190597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:08:56.209 [INFO] [Thread-190597] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:08:56.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:08:56.870 [DEBUG] [Thread-190597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:08:56.871 [DEBUG] [Thread-190597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:08:56.871 [DEBUG] [Thread-190597] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:08:56.911 [DEBUG] [Thread-190597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:08:56.911 [DEBUG] [Thread-190597] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:08:56.915 [DEBUG] [Thread-190597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:08:56.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:08:56.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:08:56.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:08:56.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:08:56.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:08:56.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:08:56.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:08:56.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:08:56.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:08:56.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.714351 -999.00  +13.10  21.99     51   +3.40 1 1 1 1 1   887    0 9.15 -36.60 ----- 21.6 22.0 167.4 34.4 14.6 -26.7 14.5 -25.8 15.0 -25.3 15.3 -26.8
2026-02-14T19:08:56.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:08:56.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:08:56.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.714351
2026-02-14T19:08:56.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:08:56.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:08:56.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:08:56.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:08:56.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:08:56.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:08:40', tmtdew=11.81, humidity=44.7, cloud=0.0, wind=43.26, temperature=13.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:08:39.926', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:08:56.940 [DEBUG] [Thread-190597] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:08:57.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-14T19:08:57.034 [DEBUG] [Thread-190600] [transport.py] [_log()] starting thread (client mode): 0xa57e0af0
2026-02-14T19:08:57.034 [DEBUG] [Thread-190600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:08:57.048 [DEBUG] [Thread-190600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:08:57.048 [INFO] [Thread-190600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:08:57.055 [DEBUG] [Thread-190600] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:08:57.055 [DEBUG] [Thread-190600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:08:57.056 [DEBUG] [Thread-190600] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:08:57.056 [DEBUG] [Thread-190600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:08:57.056 [DEBUG] [Thread-190600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:08:57.056 [DEBUG] [Thread-190600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:08:57.056 [DEBUG] [Thread-190600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:08:57.056 [DEBUG] [Thread-190600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:08:57.056 [DEBUG] [Thread-190600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:08:57.056 [DEBUG] [Thread-190600] [transport.py] [_log()] client lang: <none>
2026-02-14T19:08:57.056 [DEBUG] [Thread-190600] [transport.py] [_log()] server lang: <none>
2026-02-14T19:08:57.056 [DEBUG] [Thread-190600] [transport.py] [_log()] kex follows: False
2026-02-14T19:08:57.056 [DEBUG] [Thread-190600] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:08:57.056 [DEBUG] [Thread-190600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:08:57.056 [DEBUG] [Thread-190600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:08:57.056 [DEBUG] [Thread-190600] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:08:57.056 [DEBUG] [Thread-190600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:08:57.056 [DEBUG] [Thread-190600] [transport.py] [_log()] Compression: none
2026-02-14T19:08:57.056 [DEBUG] [Thread-190600] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:08:57.113 [DEBUG] [Thread-190600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:08:57.114 [DEBUG] [Thread-190600] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:08:57.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:08:57.115 [DEBUG] [Thread-190600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:08:57.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:08:57.170 [DEBUG] [Thread-190600] [transport.py] [_log()] userauth is OK
2026-02-14T19:08:57.170 [DEBUG] [Thread-190600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:08:57.170 [DEBUG] [Thread-190600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:08:57.170 [DEBUG] [Thread-190600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:08:57.170 [DEBUG] [Thread-190600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:08:57.195 [INFO] [Thread-190600] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:08:57.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-14T19:08:57.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:08:58.054 [DEBUG] [Thread-190600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:08:58.054 [DEBUG] [Thread-190600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:08:58.101 [DEBUG] [Thread-190600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:08:58.102 [DEBUG] [Thread-190600] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:08:58.111 [DEBUG] [Thread-190600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:08:58.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:08:58.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-14T19:08:58.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:08:58.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:08:58.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:08:58.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:08:58.146 [DEBUG] [Thread-190600] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:09:05.616 [DEBUG] [Thread-190602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:09:18.578 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:09:18.580 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:09:20.668 [DEBUG] [Thread-190603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:09:28.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:09:28.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:09:28.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T19:09:30.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 9, 16), 11.34, 46.37, 0.0, 32.02, 13.18, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:09:30.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:09:16
2026-02-14T19:09:30.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:09:30.815 [DEBUG] [Thread-190604] [transport.py] [_log()] starting thread (client mode): 0xa5771540
2026-02-14T19:09:30.816 [DEBUG] [Thread-190604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:09:30.836 [DEBUG] [Thread-190604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:09:30.836 [INFO] [Thread-190604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:09:30.839 [DEBUG] [Thread-190604] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:09:30.839 [DEBUG] [Thread-190604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:09:30.839 [DEBUG] [Thread-190604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:09:30.839 [DEBUG] [Thread-190604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:09:30.839 [DEBUG] [Thread-190604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:09:30.839 [DEBUG] [Thread-190604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:09:30.839 [DEBUG] [Thread-190604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:09:30.839 [DEBUG] [Thread-190604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:09:30.839 [DEBUG] [Thread-190604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:09:30.839 [DEBUG] [Thread-190604] [transport.py] [_log()] client lang: <none>
2026-02-14T19:09:30.839 [DEBUG] [Thread-190604] [transport.py] [_log()] server lang: <none>
2026-02-14T19:09:30.840 [DEBUG] [Thread-190604] [transport.py] [_log()] kex follows: False
2026-02-14T19:09:30.840 [DEBUG] [Thread-190604] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:09:30.840 [DEBUG] [Thread-190604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:09:30.840 [DEBUG] [Thread-190604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:09:30.840 [DEBUG] [Thread-190604] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:09:30.840 [DEBUG] [Thread-190604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:09:30.840 [DEBUG] [Thread-190604] [transport.py] [_log()] Compression: none
2026-02-14T19:09:30.840 [DEBUG] [Thread-190604] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:09:30.859 [DEBUG] [Thread-190604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:09:30.859 [DEBUG] [Thread-190604] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:09:30.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:09:30.860 [DEBUG] [Thread-190604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:09:30.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:09:30.862 [DEBUG] [Thread-190604] [transport.py] [_log()] userauth is OK
2026-02-14T19:09:30.862 [DEBUG] [Thread-190604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:09:30.863 [DEBUG] [Thread-190604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:09:30.863 [DEBUG] [Thread-190604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:09:30.863 [DEBUG] [Thread-190604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:09:30.900 [INFO] [Thread-190604] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:09:30.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:09:31.534 [DEBUG] [Thread-190604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:09:31.534 [DEBUG] [Thread-190604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:09:31.535 [DEBUG] [Thread-190604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:09:31.575 [DEBUG] [Thread-190604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:09:31.575 [DEBUG] [Thread-190604] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:09:31.579 [DEBUG] [Thread-190604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:09:31.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:09:31.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:09:31.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:09:31.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:09:31.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:09:31.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:09:31.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:09:31.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:09:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:09:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.714699 -999.00  +13.10  29.97     51   +3.40 1 1 1 1 1   887    0 8.91 -36.11 ----- 30.8 30.0 165.6 37.9 14.6 -26.9 14.5 -25.8 15.0 -24.8 15.3 -26.6
2026-02-14T19:09:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:09:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:09:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.714699
2026-02-14T19:09:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:09:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:09:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:09:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:09:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:09:31.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:09:16', tmtdew=11.34, humidity=46.37, cloud=0.0, wind=32.02, temperature=13.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:09:09.994', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:09:31.607 [DEBUG] [Thread-190604] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:09:31.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T19:09:31.707 [DEBUG] [Thread-190607] [transport.py] [_log()] starting thread (client mode): 0xa2d78640
2026-02-14T19:09:31.707 [DEBUG] [Thread-190607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:09:31.721 [DEBUG] [Thread-190607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:09:31.721 [INFO] [Thread-190607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:09:31.729 [DEBUG] [Thread-190607] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:09:31.729 [DEBUG] [Thread-190607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:09:31.729 [DEBUG] [Thread-190607] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:09:31.729 [DEBUG] [Thread-190607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:09:31.730 [DEBUG] [Thread-190607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:09:31.730 [DEBUG] [Thread-190607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:09:31.730 [DEBUG] [Thread-190607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:09:31.730 [DEBUG] [Thread-190607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:09:31.730 [DEBUG] [Thread-190607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:09:31.730 [DEBUG] [Thread-190607] [transport.py] [_log()] client lang: <none>
2026-02-14T19:09:31.730 [DEBUG] [Thread-190607] [transport.py] [_log()] server lang: <none>
2026-02-14T19:09:31.730 [DEBUG] [Thread-190607] [transport.py] [_log()] kex follows: False
2026-02-14T19:09:31.730 [DEBUG] [Thread-190607] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:09:31.730 [DEBUG] [Thread-190607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:09:31.730 [DEBUG] [Thread-190607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:09:31.730 [DEBUG] [Thread-190607] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:09:31.730 [DEBUG] [Thread-190607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:09:31.730 [DEBUG] [Thread-190607] [transport.py] [_log()] Compression: none
2026-02-14T19:09:31.730 [DEBUG] [Thread-190607] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:09:31.787 [DEBUG] [Thread-190607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:09:31.787 [DEBUG] [Thread-190607] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:09:31.788 [DEBUG] [Thread-190607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:09:31.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:09:31.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:09:31.842 [DEBUG] [Thread-190607] [transport.py] [_log()] userauth is OK
2026-02-14T19:09:31.842 [DEBUG] [Thread-190607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:09:31.843 [DEBUG] [Thread-190607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:09:31.843 [DEBUG] [Thread-190607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:09:31.843 [DEBUG] [Thread-190607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:09:31.867 [INFO] [Thread-190607] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:09:31.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-14T19:09:31.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:09:32.678 [DEBUG] [Thread-190607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:09:32.678 [DEBUG] [Thread-190607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:09:32.726 [DEBUG] [Thread-190607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:09:32.726 [DEBUG] [Thread-190607] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:09:32.735 [DEBUG] [Thread-190607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:09:32.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:09:32.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-14T19:09:32.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-14T19:09:32.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:09:32.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:09:32.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:09:32.775 [DEBUG] [Thread-190607] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:09:35.701 [DEBUG] [Thread-190609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:09:37.977 [DEBUG] [Thread-190610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:09:50.748 [DEBUG] [Thread-190611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:10:02.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:10:02.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:10:02.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-14T19:10:04.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 9, 51), 11.4, 45.83, 0.0, 35.5, 13.28, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:10:04.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:09:51
2026-02-14T19:10:05.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:10:05.235 [DEBUG] [Thread-190612] [transport.py] [_log()] starting thread (client mode): 0xa57709d0
2026-02-14T19:10:05.235 [DEBUG] [Thread-190612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:10:05.249 [DEBUG] [Thread-190612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:10:05.250 [INFO] [Thread-190612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:10:05.253 [DEBUG] [Thread-190612] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:10:05.253 [DEBUG] [Thread-190612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:10:05.253 [DEBUG] [Thread-190612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:10:05.253 [DEBUG] [Thread-190612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:10:05.253 [DEBUG] [Thread-190612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:10:05.253 [DEBUG] [Thread-190612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:10:05.253 [DEBUG] [Thread-190612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:10:05.253 [DEBUG] [Thread-190612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:10:05.253 [DEBUG] [Thread-190612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:10:05.253 [DEBUG] [Thread-190612] [transport.py] [_log()] client lang: <none>
2026-02-14T19:10:05.253 [DEBUG] [Thread-190612] [transport.py] [_log()] server lang: <none>
2026-02-14T19:10:05.253 [DEBUG] [Thread-190612] [transport.py] [_log()] kex follows: False
2026-02-14T19:10:05.253 [DEBUG] [Thread-190612] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:10:05.253 [DEBUG] [Thread-190612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:10:05.253 [DEBUG] [Thread-190612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:10:05.254 [DEBUG] [Thread-190612] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:10:05.254 [DEBUG] [Thread-190612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:10:05.254 [DEBUG] [Thread-190612] [transport.py] [_log()] Compression: none
2026-02-14T19:10:05.254 [DEBUG] [Thread-190612] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:10:05.273 [DEBUG] [Thread-190612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:10:05.273 [DEBUG] [Thread-190612] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:10:05.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:10:05.274 [DEBUG] [Thread-190612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:10:05.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:10:05.276 [DEBUG] [Thread-190612] [transport.py] [_log()] userauth is OK
2026-02-14T19:10:05.277 [DEBUG] [Thread-190612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:10:05.277 [DEBUG] [Thread-190612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:10:05.277 [DEBUG] [Thread-190612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:10:05.277 [DEBUG] [Thread-190612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:10:05.296 [INFO] [Thread-190612] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:10:05.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:10:05.782 [DEBUG] [Thread-190614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:10:06.240 [DEBUG] [Thread-190612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:10:06.241 [DEBUG] [Thread-190612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:10:06.241 [DEBUG] [Thread-190612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:10:06.281 [DEBUG] [Thread-190612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:10:06.281 [DEBUG] [Thread-190612] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:10:06.285 [DEBUG] [Thread-190612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:10:06.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:10:06.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:10:06.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:10:06.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:10:06.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:10:06.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:10:06.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:10:06.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:10:06.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:10:06.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.715046 -999.00  +13.10  27.91     51   +3.30 1 1 1 1 1   887    0 9.14 -36.31 ----- 27.8 27.9 161.6 44.6 14.5 -26.9 14.4 -25.9 14.9 -25.2 15.2 -27.1
2026-02-14T19:10:06.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:10:06.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:10:06.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.715046
2026-02-14T19:10:06.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:10:06.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:10:06.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:10:06.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:10:06.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:10:06.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:09:51', tmtdew=11.4, humidity=45.83, cloud=0.0, wind=35.5, temperature=13.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:09:39.974', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:10:06.304 [DEBUG] [Thread-190612] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:10:06.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-14T19:10:06.387 [DEBUG] [Thread-190616] [transport.py] [_log()] starting thread (client mode): 0xa2d6f7f0
2026-02-14T19:10:06.387 [DEBUG] [Thread-190616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:10:06.401 [DEBUG] [Thread-190616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:10:06.402 [INFO] [Thread-190616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:10:06.409 [DEBUG] [Thread-190616] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:10:06.409 [DEBUG] [Thread-190616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:10:06.409 [DEBUG] [Thread-190616] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:10:06.409 [DEBUG] [Thread-190616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:10:06.409 [DEBUG] [Thread-190616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:10:06.410 [DEBUG] [Thread-190616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:10:06.410 [DEBUG] [Thread-190616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:10:06.410 [DEBUG] [Thread-190616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:10:06.410 [DEBUG] [Thread-190616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:10:06.410 [DEBUG] [Thread-190616] [transport.py] [_log()] client lang: <none>
2026-02-14T19:10:06.410 [DEBUG] [Thread-190616] [transport.py] [_log()] server lang: <none>
2026-02-14T19:10:06.410 [DEBUG] [Thread-190616] [transport.py] [_log()] kex follows: False
2026-02-14T19:10:06.410 [DEBUG] [Thread-190616] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:10:06.410 [DEBUG] [Thread-190616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:10:06.410 [DEBUG] [Thread-190616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:10:06.411 [DEBUG] [Thread-190616] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:10:06.411 [DEBUG] [Thread-190616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:10:06.411 [DEBUG] [Thread-190616] [transport.py] [_log()] Compression: none
2026-02-14T19:10:06.411 [DEBUG] [Thread-190616] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:10:06.468 [DEBUG] [Thread-190616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:10:06.468 [DEBUG] [Thread-190616] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:10:06.469 [DEBUG] [Thread-190616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:10:06.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:10:06.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:10:06.523 [DEBUG] [Thread-190616] [transport.py] [_log()] userauth is OK
2026-02-14T19:10:06.524 [DEBUG] [Thread-190616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:10:06.524 [DEBUG] [Thread-190616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:10:06.524 [DEBUG] [Thread-190616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:10:06.524 [DEBUG] [Thread-190616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:10:06.542 [INFO] [Thread-190616] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:10:06.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T19:10:06.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:10:07.365 [DEBUG] [Thread-190616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:10:07.365 [DEBUG] [Thread-190616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:10:07.413 [DEBUG] [Thread-190616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:10:07.414 [DEBUG] [Thread-190616] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:10:07.423 [DEBUG] [Thread-190616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:10:07.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:10:07.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:10:07.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:10:07.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:10:07.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:10:07.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:10:07.459 [DEBUG] [Thread-190616] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:10:18.721 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:10:18.722 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:10:20.818 [DEBUG] [Thread-190618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:10:35.874 [DEBUG] [Thread-190619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:10:37.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:10:37.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:10:37.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-14T19:10:38.021 [DEBUG] [Thread-190620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:10:39.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 10, 26), 11.43, 45.77, 0.0, 34.18, 13.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:10:39.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:10:26
2026-02-14T19:10:39.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:10:39.922 [DEBUG] [Thread-190621] [transport.py] [_log()] starting thread (client mode): 0xa2d6ec50
2026-02-14T19:10:39.922 [DEBUG] [Thread-190621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:10:39.942 [DEBUG] [Thread-190621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:10:39.942 [INFO] [Thread-190621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:10:39.943 [DEBUG] [Thread-190621] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:10:39.943 [DEBUG] [Thread-190621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:10:39.943 [DEBUG] [Thread-190621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:10:39.943 [DEBUG] [Thread-190621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:10:39.943 [DEBUG] [Thread-190621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:10:39.943 [DEBUG] [Thread-190621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:10:39.943 [DEBUG] [Thread-190621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:10:39.943 [DEBUG] [Thread-190621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:10:39.943 [DEBUG] [Thread-190621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:10:39.943 [DEBUG] [Thread-190621] [transport.py] [_log()] client lang: <none>
2026-02-14T19:10:39.943 [DEBUG] [Thread-190621] [transport.py] [_log()] server lang: <none>
2026-02-14T19:10:39.943 [DEBUG] [Thread-190621] [transport.py] [_log()] kex follows: False
2026-02-14T19:10:39.943 [DEBUG] [Thread-190621] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:10:39.943 [DEBUG] [Thread-190621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:10:39.943 [DEBUG] [Thread-190621] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:10:39.944 [DEBUG] [Thread-190621] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:10:39.944 [DEBUG] [Thread-190621] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:10:39.944 [DEBUG] [Thread-190621] [transport.py] [_log()] Compression: none
2026-02-14T19:10:39.944 [DEBUG] [Thread-190621] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:10:39.962 [DEBUG] [Thread-190621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:10:39.962 [DEBUG] [Thread-190621] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:10:39.963 [DEBUG] [Thread-190621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:10:39.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:10:39.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:10:39.964 [DEBUG] [Thread-190621] [transport.py] [_log()] userauth is OK
2026-02-14T19:10:39.964 [DEBUG] [Thread-190621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:10:39.964 [DEBUG] [Thread-190621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:10:39.964 [DEBUG] [Thread-190621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:10:39.964 [DEBUG] [Thread-190621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:10:39.990 [INFO] [Thread-190621] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:10:39.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:10:40.637 [DEBUG] [Thread-190621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:10:40.637 [DEBUG] [Thread-190621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:10:40.637 [DEBUG] [Thread-190621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:10:40.678 [DEBUG] [Thread-190621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:10:40.678 [DEBUG] [Thread-190621] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:10:40.682 [DEBUG] [Thread-190621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:10:40.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:10:40.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:10:40.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:10:40.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:10:40.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:10:40.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:10:40.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:10:40.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:10:40.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:10:40.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.715393 -999.00  +13.00  33.08     51   +3.20 1 1 2 1 1   887    0 8.98 -38.98 ----- 25.1 33.1 162.8 40.5 14.5 -27.0 14.4 -25.9 14.8 -25.3 15.2 -27.1
2026-02-14T19:10:40.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:10:40.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:10:40.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.715393
2026-02-14T19:10:40.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:10:40.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:10:40.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:10:40.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:10:40.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:10:40.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:10:26', tmtdew=11.43, humidity=45.77, cloud=0.0, wind=34.18, temperature=13.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:10:09.955', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:10:40.709 [DEBUG] [Thread-190621] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:10:40.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-14T19:10:40.806 [DEBUG] [Thread-190624] [transport.py] [_log()] starting thread (client mode): 0xa2d6fcd0
2026-02-14T19:10:40.807 [DEBUG] [Thread-190624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:10:40.821 [DEBUG] [Thread-190624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:10:40.821 [INFO] [Thread-190624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:10:40.828 [DEBUG] [Thread-190624] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:10:40.828 [DEBUG] [Thread-190624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:10:40.828 [DEBUG] [Thread-190624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:10:40.828 [DEBUG] [Thread-190624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:10:40.828 [DEBUG] [Thread-190624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:10:40.828 [DEBUG] [Thread-190624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:10:40.829 [DEBUG] [Thread-190624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:10:40.829 [DEBUG] [Thread-190624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:10:40.829 [DEBUG] [Thread-190624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:10:40.829 [DEBUG] [Thread-190624] [transport.py] [_log()] client lang: <none>
2026-02-14T19:10:40.829 [DEBUG] [Thread-190624] [transport.py] [_log()] server lang: <none>
2026-02-14T19:10:40.829 [DEBUG] [Thread-190624] [transport.py] [_log()] kex follows: False
2026-02-14T19:10:40.829 [DEBUG] [Thread-190624] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:10:40.829 [DEBUG] [Thread-190624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:10:40.829 [DEBUG] [Thread-190624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:10:40.829 [DEBUG] [Thread-190624] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:10:40.829 [DEBUG] [Thread-190624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:10:40.829 [DEBUG] [Thread-190624] [transport.py] [_log()] Compression: none
2026-02-14T19:10:40.829 [DEBUG] [Thread-190624] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:10:40.888 [DEBUG] [Thread-190624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:10:40.889 [DEBUG] [Thread-190624] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:10:40.889 [DEBUG] [Thread-190624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:10:40.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:10:40.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:10:40.945 [DEBUG] [Thread-190624] [transport.py] [_log()] userauth is OK
2026-02-14T19:10:40.945 [DEBUG] [Thread-190624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:10:40.945 [DEBUG] [Thread-190624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:10:40.945 [DEBUG] [Thread-190624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:10:40.945 [DEBUG] [Thread-190624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:10:40.967 [INFO] [Thread-190624] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:10:40.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T19:10:40.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:10:41.779 [DEBUG] [Thread-190624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:10:41.779 [DEBUG] [Thread-190624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:10:41.826 [DEBUG] [Thread-190624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:10:41.826 [DEBUG] [Thread-190624] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:10:41.835 [DEBUG] [Thread-190624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:10:41.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:10:41.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:10:41.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-14T19:10:41.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:10:41.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:10:41.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:10:41.869 [DEBUG] [Thread-190624] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:10:50.910 [DEBUG] [Thread-190626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:11:05.957 [DEBUG] [Thread-190627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:11:11.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:11:11.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:11:11.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-14T19:11:13.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 11, 1), 11.4, 45.85, 0.0, 32.66, 13.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:11:13.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:11:01
2026-02-14T19:11:14.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:11:14.218 [DEBUG] [Thread-190628] [transport.py] [_log()] starting thread (client mode): 0xa2d6d150
2026-02-14T19:11:14.218 [DEBUG] [Thread-190628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:11:14.240 [DEBUG] [Thread-190628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:11:14.240 [INFO] [Thread-190628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:11:14.243 [DEBUG] [Thread-190628] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:11:14.243 [DEBUG] [Thread-190628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:11:14.243 [DEBUG] [Thread-190628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:11:14.243 [DEBUG] [Thread-190628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:11:14.243 [DEBUG] [Thread-190628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:11:14.243 [DEBUG] [Thread-190628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:11:14.243 [DEBUG] [Thread-190628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:11:14.243 [DEBUG] [Thread-190628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:11:14.243 [DEBUG] [Thread-190628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:11:14.243 [DEBUG] [Thread-190628] [transport.py] [_log()] client lang: <none>
2026-02-14T19:11:14.243 [DEBUG] [Thread-190628] [transport.py] [_log()] server lang: <none>
2026-02-14T19:11:14.243 [DEBUG] [Thread-190628] [transport.py] [_log()] kex follows: False
2026-02-14T19:11:14.243 [DEBUG] [Thread-190628] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:11:14.243 [DEBUG] [Thread-190628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:11:14.243 [DEBUG] [Thread-190628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:11:14.243 [DEBUG] [Thread-190628] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:11:14.243 [DEBUG] [Thread-190628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:11:14.243 [DEBUG] [Thread-190628] [transport.py] [_log()] Compression: none
2026-02-14T19:11:14.243 [DEBUG] [Thread-190628] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:11:14.261 [DEBUG] [Thread-190628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:11:14.262 [DEBUG] [Thread-190628] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:11:14.262 [DEBUG] [Thread-190628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:11:14.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:11:14.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:11:14.264 [DEBUG] [Thread-190628] [transport.py] [_log()] userauth is OK
2026-02-14T19:11:14.265 [DEBUG] [Thread-190628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:11:14.265 [DEBUG] [Thread-190628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:11:14.265 [DEBUG] [Thread-190628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:11:14.265 [DEBUG] [Thread-190628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:11:14.290 [INFO] [Thread-190628] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:11:14.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:11:14.919 [DEBUG] [Thread-190628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:11:14.919 [DEBUG] [Thread-190628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:11:14.920 [DEBUG] [Thread-190628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:11:14.960 [DEBUG] [Thread-190628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:11:14.961 [DEBUG] [Thread-190628] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:11:14.964 [DEBUG] [Thread-190628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:11:14.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:11:14.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:11:14.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:11:14.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:11:14.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:11:14.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:11:14.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:11:14.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:11:14.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:11:14.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.715740 -999.00  +13.00  27.19     51   +3.20 1 1 1 1 1   887    0 8.99 -40.17 ----- 29.2 27.2 159.8 36.6 14.4 -27.1 14.3 -25.8 14.8 -25.6 15.1 -27.1
2026-02-14T19:11:14.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:11:14.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:11:14.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.715740
2026-02-14T19:11:14.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:11:14.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:11:14.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:11:14.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:11:14.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:11:14.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:11:01', tmtdew=11.4, humidity=45.85, cloud=0.0, wind=32.66, temperature=13.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:10:39.936', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:11:14.992 [DEBUG] [Thread-190628] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:11:15.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-14T19:11:15.087 [DEBUG] [Thread-190631] [transport.py] [_log()] starting thread (client mode): 0xa2d6dfc0
2026-02-14T19:11:15.087 [DEBUG] [Thread-190631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:11:15.102 [DEBUG] [Thread-190631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:11:15.102 [INFO] [Thread-190631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:11:15.110 [DEBUG] [Thread-190631] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:11:15.110 [DEBUG] [Thread-190631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:11:15.110 [DEBUG] [Thread-190631] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:11:15.110 [DEBUG] [Thread-190631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:11:15.111 [DEBUG] [Thread-190631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:11:15.111 [DEBUG] [Thread-190631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:11:15.111 [DEBUG] [Thread-190631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:11:15.111 [DEBUG] [Thread-190631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:11:15.111 [DEBUG] [Thread-190631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:11:15.111 [DEBUG] [Thread-190631] [transport.py] [_log()] client lang: <none>
2026-02-14T19:11:15.111 [DEBUG] [Thread-190631] [transport.py] [_log()] server lang: <none>
2026-02-14T19:11:15.111 [DEBUG] [Thread-190631] [transport.py] [_log()] kex follows: False
2026-02-14T19:11:15.111 [DEBUG] [Thread-190631] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:11:15.111 [DEBUG] [Thread-190631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:11:15.111 [DEBUG] [Thread-190631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:11:15.111 [DEBUG] [Thread-190631] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:11:15.111 [DEBUG] [Thread-190631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:11:15.111 [DEBUG] [Thread-190631] [transport.py] [_log()] Compression: none
2026-02-14T19:11:15.111 [DEBUG] [Thread-190631] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:11:15.170 [DEBUG] [Thread-190631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:11:15.170 [DEBUG] [Thread-190631] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:11:15.171 [DEBUG] [Thread-190631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:11:15.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:11:15.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:11:15.226 [DEBUG] [Thread-190631] [transport.py] [_log()] userauth is OK
2026-02-14T19:11:15.226 [DEBUG] [Thread-190631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:11:15.226 [DEBUG] [Thread-190631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:11:15.226 [DEBUG] [Thread-190631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:11:15.226 [DEBUG] [Thread-190631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:11:15.244 [INFO] [Thread-190631] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:11:15.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-14T19:11:15.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:11:16.138 [DEBUG] [Thread-190631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:11:16.138 [DEBUG] [Thread-190631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:11:16.187 [DEBUG] [Thread-190631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:11:16.187 [DEBUG] [Thread-190631] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:11:16.196 [DEBUG] [Thread-190631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:11:16.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:11:16.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-14T19:11:16.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-14T19:11:16.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:11:16.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:11:16.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:11:16.232 [DEBUG] [Thread-190631] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:11:18.862 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:11:18.863 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:11:20.993 [DEBUG] [Thread-190633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:11:36.043 [DEBUG] [Thread-190634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:11:38.072 [DEBUG] [Thread-190635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:11:46.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:11:46.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:11:46.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-14T19:11:48.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 11, 37), 11.78, 44.73, 0.0, 43.72, 13.59, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:11:48.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:11:37
2026-02-14T19:11:48.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:11:48.887 [DEBUG] [Thread-190636] [transport.py] [_log()] starting thread (client mode): 0xa2d79330
2026-02-14T19:11:48.887 [DEBUG] [Thread-190636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:11:48.906 [DEBUG] [Thread-190636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:11:48.906 [INFO] [Thread-190636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:11:48.909 [DEBUG] [Thread-190636] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:11:48.910 [DEBUG] [Thread-190636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:11:48.910 [DEBUG] [Thread-190636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:11:48.910 [DEBUG] [Thread-190636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:11:48.910 [DEBUG] [Thread-190636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:11:48.910 [DEBUG] [Thread-190636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:11:48.910 [DEBUG] [Thread-190636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:11:48.910 [DEBUG] [Thread-190636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:11:48.910 [DEBUG] [Thread-190636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:11:48.910 [DEBUG] [Thread-190636] [transport.py] [_log()] client lang: <none>
2026-02-14T19:11:48.910 [DEBUG] [Thread-190636] [transport.py] [_log()] server lang: <none>
2026-02-14T19:11:48.910 [DEBUG] [Thread-190636] [transport.py] [_log()] kex follows: False
2026-02-14T19:11:48.910 [DEBUG] [Thread-190636] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:11:48.910 [DEBUG] [Thread-190636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:11:48.910 [DEBUG] [Thread-190636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:11:48.910 [DEBUG] [Thread-190636] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:11:48.910 [DEBUG] [Thread-190636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:11:48.910 [DEBUG] [Thread-190636] [transport.py] [_log()] Compression: none
2026-02-14T19:11:48.910 [DEBUG] [Thread-190636] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:11:48.928 [DEBUG] [Thread-190636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:11:48.929 [DEBUG] [Thread-190636] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:11:48.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:11:48.930 [DEBUG] [Thread-190636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:11:48.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:11:48.932 [DEBUG] [Thread-190636] [transport.py] [_log()] userauth is OK
2026-02-14T19:11:48.933 [DEBUG] [Thread-190636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:11:48.933 [DEBUG] [Thread-190636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:11:48.933 [DEBUG] [Thread-190636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:11:48.933 [DEBUG] [Thread-190636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:11:48.958 [INFO] [Thread-190636] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:11:48.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:11:49.612 [DEBUG] [Thread-190636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:11:49.612 [DEBUG] [Thread-190636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:11:49.613 [DEBUG] [Thread-190636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:11:49.653 [DEBUG] [Thread-190636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:11:49.653 [DEBUG] [Thread-190636] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:11:49.657 [DEBUG] [Thread-190636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:11:49.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:11:49.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:11:49.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:11:49.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:11:49.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:11:49.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:11:49.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:11:49.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:11:49.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:11:49.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.716087 -999.00  +13.00  25.23     51   +3.20 1 1 1 1 1   887    0 8.98 -37.77 ----- 32.1 25.2 154.6 40.9 14.4 -26.9 14.3 -25.6 14.8 -25.1 15.1 -27.0
2026-02-14T19:11:49.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:11:49.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:11:49.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.716087
2026-02-14T19:11:49.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:11:49.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:11:49.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:11:49.682 [DEBUG] [Thread-190636] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:11:49.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:11:49.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:11:49.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:11:37', tmtdew=11.78, humidity=44.73, cloud=0.0, wind=43.72, temperature=13.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:11:09.917', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:11:49.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-14T19:11:49.778 [DEBUG] [Thread-190639] [transport.py] [_log()] starting thread (client mode): 0xa2d78730
2026-02-14T19:11:49.778 [DEBUG] [Thread-190639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:11:49.793 [DEBUG] [Thread-190639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:11:49.793 [INFO] [Thread-190639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:11:49.801 [DEBUG] [Thread-190639] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:11:49.801 [DEBUG] [Thread-190639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:11:49.801 [DEBUG] [Thread-190639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:11:49.802 [DEBUG] [Thread-190639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:11:49.802 [DEBUG] [Thread-190639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:11:49.802 [DEBUG] [Thread-190639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:11:49.802 [DEBUG] [Thread-190639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:11:49.802 [DEBUG] [Thread-190639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:11:49.802 [DEBUG] [Thread-190639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:11:49.802 [DEBUG] [Thread-190639] [transport.py] [_log()] client lang: <none>
2026-02-14T19:11:49.802 [DEBUG] [Thread-190639] [transport.py] [_log()] server lang: <none>
2026-02-14T19:11:49.802 [DEBUG] [Thread-190639] [transport.py] [_log()] kex follows: False
2026-02-14T19:11:49.802 [DEBUG] [Thread-190639] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:11:49.802 [DEBUG] [Thread-190639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:11:49.802 [DEBUG] [Thread-190639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:11:49.802 [DEBUG] [Thread-190639] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:11:49.802 [DEBUG] [Thread-190639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:11:49.802 [DEBUG] [Thread-190639] [transport.py] [_log()] Compression: none
2026-02-14T19:11:49.802 [DEBUG] [Thread-190639] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:11:49.859 [DEBUG] [Thread-190639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:11:49.860 [DEBUG] [Thread-190639] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:11:49.860 [DEBUG] [Thread-190639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:11:49.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:11:49.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:11:49.916 [DEBUG] [Thread-190639] [transport.py] [_log()] userauth is OK
2026-02-14T19:11:49.916 [DEBUG] [Thread-190639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:11:49.916 [DEBUG] [Thread-190639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:11:49.916 [DEBUG] [Thread-190639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:11:49.916 [DEBUG] [Thread-190639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:11:49.935 [INFO] [Thread-190639] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:11:49.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-14T19:11:49.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:11:50.782 [DEBUG] [Thread-190639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:11:50.782 [DEBUG] [Thread-190639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:11:50.830 [DEBUG] [Thread-190639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:11:50.830 [DEBUG] [Thread-190639] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:11:50.838 [DEBUG] [Thread-190639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:11:50.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:11:50.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-14T19:11:50.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-14T19:11:50.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:11:50.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:11:50.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:11:50.872 [DEBUG] [Thread-190639] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:11:51.081 [DEBUG] [Thread-190641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:12:06.140 [DEBUG] [Thread-190642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:12:19.009 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:12:19.010 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:12:20.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:12:20.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:12:20.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-14T19:12:21.176 [DEBUG] [Thread-190643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:12:22.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 12, 12), 11.47, 45.92, 0.0, 37.35, 13.18, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:12:22.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:12:12
2026-02-14T19:12:23.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:12:23.293 [DEBUG] [Thread-190644] [transport.py] [_log()] starting thread (client mode): 0xa2d7a560
2026-02-14T19:12:23.293 [DEBUG] [Thread-190644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:12:23.313 [DEBUG] [Thread-190644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:12:23.313 [INFO] [Thread-190644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:12:23.316 [DEBUG] [Thread-190644] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:12:23.316 [DEBUG] [Thread-190644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:12:23.316 [DEBUG] [Thread-190644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:12:23.316 [DEBUG] [Thread-190644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:12:23.316 [DEBUG] [Thread-190644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:12:23.316 [DEBUG] [Thread-190644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:12:23.317 [DEBUG] [Thread-190644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:12:23.317 [DEBUG] [Thread-190644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:12:23.317 [DEBUG] [Thread-190644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:12:23.317 [DEBUG] [Thread-190644] [transport.py] [_log()] client lang: <none>
2026-02-14T19:12:23.317 [DEBUG] [Thread-190644] [transport.py] [_log()] server lang: <none>
2026-02-14T19:12:23.317 [DEBUG] [Thread-190644] [transport.py] [_log()] kex follows: False
2026-02-14T19:12:23.317 [DEBUG] [Thread-190644] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:12:23.317 [DEBUG] [Thread-190644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:12:23.317 [DEBUG] [Thread-190644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:12:23.317 [DEBUG] [Thread-190644] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:12:23.317 [DEBUG] [Thread-190644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:12:23.317 [DEBUG] [Thread-190644] [transport.py] [_log()] Compression: none
2026-02-14T19:12:23.317 [DEBUG] [Thread-190644] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:12:23.335 [DEBUG] [Thread-190644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:12:23.336 [DEBUG] [Thread-190644] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:12:23.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:12:23.337 [DEBUG] [Thread-190644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:12:23.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:12:23.339 [DEBUG] [Thread-190644] [transport.py] [_log()] userauth is OK
2026-02-14T19:12:23.339 [DEBUG] [Thread-190644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:12:23.340 [DEBUG] [Thread-190644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:12:23.340 [DEBUG] [Thread-190644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:12:23.340 [DEBUG] [Thread-190644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:12:23.362 [INFO] [Thread-190644] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:12:23.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:12:24.019 [DEBUG] [Thread-190644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:12:24.019 [DEBUG] [Thread-190644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:12:24.020 [DEBUG] [Thread-190644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:12:24.060 [DEBUG] [Thread-190644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:12:24.060 [DEBUG] [Thread-190644] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:12:24.063 [DEBUG] [Thread-190644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:12:24.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:12:24.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:12:24.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:12:24.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:12:24.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:12:24.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:12:24.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:12:24.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:12:24.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:12:24.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.716435 -999.00  +12.90  28.05     51   +3.30 1 1 1 1 1   887    0 8.94 -35.98 ----- 25.2 28.1 169.0 37.8 14.4 -26.8 14.3 -25.8 14.7 -25.3 15.0 -27.2
2026-02-14T19:12:24.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:12:24.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:12:24.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.716435
2026-02-14T19:12:24.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:12:24.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:12:24.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:12:24.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:12:24.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:12:24.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:12:12', tmtdew=11.47, humidity=45.92, cloud=0.0, wind=37.35, temperature=13.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:11:39.984', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:12:24.093 [DEBUG] [Thread-190644] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:12:24.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-14T19:12:24.191 [DEBUG] [Thread-190647] [transport.py] [_log()] starting thread (client mode): 0xa57c3850
2026-02-14T19:12:24.192 [DEBUG] [Thread-190647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:12:24.206 [DEBUG] [Thread-190647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:12:24.206 [INFO] [Thread-190647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:12:24.214 [DEBUG] [Thread-190647] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:12:24.214 [DEBUG] [Thread-190647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:12:24.214 [DEBUG] [Thread-190647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:12:24.214 [DEBUG] [Thread-190647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:12:24.214 [DEBUG] [Thread-190647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:12:24.215 [DEBUG] [Thread-190647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:12:24.215 [DEBUG] [Thread-190647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:12:24.215 [DEBUG] [Thread-190647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:12:24.215 [DEBUG] [Thread-190647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:12:24.215 [DEBUG] [Thread-190647] [transport.py] [_log()] client lang: <none>
2026-02-14T19:12:24.215 [DEBUG] [Thread-190647] [transport.py] [_log()] server lang: <none>
2026-02-14T19:12:24.215 [DEBUG] [Thread-190647] [transport.py] [_log()] kex follows: False
2026-02-14T19:12:24.215 [DEBUG] [Thread-190647] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:12:24.215 [DEBUG] [Thread-190647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:12:24.215 [DEBUG] [Thread-190647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:12:24.215 [DEBUG] [Thread-190647] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:12:24.215 [DEBUG] [Thread-190647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:12:24.215 [DEBUG] [Thread-190647] [transport.py] [_log()] Compression: none
2026-02-14T19:12:24.215 [DEBUG] [Thread-190647] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:12:24.273 [DEBUG] [Thread-190647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:12:24.273 [DEBUG] [Thread-190647] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:12:24.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:12:24.274 [DEBUG] [Thread-190647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:12:24.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:12:24.328 [DEBUG] [Thread-190647] [transport.py] [_log()] userauth is OK
2026-02-14T19:12:24.329 [DEBUG] [Thread-190647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:12:24.329 [DEBUG] [Thread-190647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:12:24.329 [DEBUG] [Thread-190647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:12:24.329 [DEBUG] [Thread-190647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:12:24.342 [INFO] [Thread-190647] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:12:24.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-14T19:12:24.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:12:25.200 [DEBUG] [Thread-190647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:12:25.200 [DEBUG] [Thread-190647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:12:25.247 [DEBUG] [Thread-190647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:12:25.247 [DEBUG] [Thread-190647] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:12:25.256 [DEBUG] [Thread-190647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:12:25.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:12:25.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:12:25.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-14T19:12:25.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:12:25.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:12:25.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:12:25.291 [DEBUG] [Thread-190647] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:12:36.214 [DEBUG] [Thread-190649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:12:38.106 [DEBUG] [Thread-190650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:12:51.267 [DEBUG] [Thread-190651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:12:55.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:12:55.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:12:55.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-14T19:12:57.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 12, 48), 11.33, 46.05, 0.0, 35.41, 13.09, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:12:57.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:12:48
2026-02-14T19:12:57.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:12:57.685 [DEBUG] [Thread-190652] [transport.py] [_log()] starting thread (client mode): 0xa2d78d00
2026-02-14T19:12:57.685 [DEBUG] [Thread-190652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:12:57.705 [DEBUG] [Thread-190652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:12:57.705 [INFO] [Thread-190652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:12:57.707 [DEBUG] [Thread-190652] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:12:57.707 [DEBUG] [Thread-190652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:12:57.707 [DEBUG] [Thread-190652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:12:57.707 [DEBUG] [Thread-190652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:12:57.707 [DEBUG] [Thread-190652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:12:57.707 [DEBUG] [Thread-190652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:12:57.707 [DEBUG] [Thread-190652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:12:57.707 [DEBUG] [Thread-190652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:12:57.707 [DEBUG] [Thread-190652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:12:57.707 [DEBUG] [Thread-190652] [transport.py] [_log()] client lang: <none>
2026-02-14T19:12:57.707 [DEBUG] [Thread-190652] [transport.py] [_log()] server lang: <none>
2026-02-14T19:12:57.708 [DEBUG] [Thread-190652] [transport.py] [_log()] kex follows: False
2026-02-14T19:12:57.708 [DEBUG] [Thread-190652] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:12:57.708 [DEBUG] [Thread-190652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:12:57.708 [DEBUG] [Thread-190652] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:12:57.708 [DEBUG] [Thread-190652] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:12:57.708 [DEBUG] [Thread-190652] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:12:57.708 [DEBUG] [Thread-190652] [transport.py] [_log()] Compression: none
2026-02-14T19:12:57.708 [DEBUG] [Thread-190652] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:12:57.716 [DEBUG] [Thread-190652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:12:57.717 [DEBUG] [Thread-190652] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:12:57.717 [DEBUG] [Thread-190652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:12:57.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:12:57.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:12:57.718 [DEBUG] [Thread-190652] [transport.py] [_log()] userauth is OK
2026-02-14T19:12:57.718 [DEBUG] [Thread-190652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:12:57.718 [DEBUG] [Thread-190652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:12:57.718 [DEBUG] [Thread-190652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:12:57.719 [DEBUG] [Thread-190652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:12:57.737 [INFO] [Thread-190652] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:12:57.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:12:58.512 [DEBUG] [Thread-190652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:12:58.512 [DEBUG] [Thread-190652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:12:58.513 [DEBUG] [Thread-190652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:12:58.553 [DEBUG] [Thread-190652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:12:58.553 [DEBUG] [Thread-190652] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:12:58.557 [DEBUG] [Thread-190652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:12:58.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:12:58.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:12:58.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:12:58.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:12:58.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:12:58.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:12:58.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:12:58.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:12:58.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:12:58.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.716782 -999.00  +12.90  31.43     52   +3.30 1 1 2 1 1   887    0 9.21 -35.22 ----- 35.4 31.4 171.0 44.5 14.3 -26.8 14.3 -25.6 14.6 -25.3 14.9 -26.6
2026-02-14T19:12:58.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:12:58.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:12:58.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.716782
2026-02-14T19:12:58.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:12:58.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:12:58.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:12:58.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:12:58.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:12:58.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:12:48', tmtdew=11.33, humidity=46.05, cloud=0.0, wind=35.41, temperature=13.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:12:09.965', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:12:58.583 [DEBUG] [Thread-190652] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:12:58.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-14T19:12:58.681 [DEBUG] [Thread-190655] [transport.py] [_log()] starting thread (client mode): 0xa2d78d90
2026-02-14T19:12:58.681 [DEBUG] [Thread-190655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:12:58.696 [DEBUG] [Thread-190655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:12:58.696 [INFO] [Thread-190655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:12:58.704 [DEBUG] [Thread-190655] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:12:58.704 [DEBUG] [Thread-190655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:12:58.704 [DEBUG] [Thread-190655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:12:58.705 [DEBUG] [Thread-190655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:12:58.705 [DEBUG] [Thread-190655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:12:58.705 [DEBUG] [Thread-190655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:12:58.705 [DEBUG] [Thread-190655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:12:58.705 [DEBUG] [Thread-190655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:12:58.705 [DEBUG] [Thread-190655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:12:58.705 [DEBUG] [Thread-190655] [transport.py] [_log()] client lang: <none>
2026-02-14T19:12:58.705 [DEBUG] [Thread-190655] [transport.py] [_log()] server lang: <none>
2026-02-14T19:12:58.705 [DEBUG] [Thread-190655] [transport.py] [_log()] kex follows: False
2026-02-14T19:12:58.705 [DEBUG] [Thread-190655] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:12:58.705 [DEBUG] [Thread-190655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:12:58.705 [DEBUG] [Thread-190655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:12:58.705 [DEBUG] [Thread-190655] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:12:58.706 [DEBUG] [Thread-190655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:12:58.706 [DEBUG] [Thread-190655] [transport.py] [_log()] Compression: none
2026-02-14T19:12:58.706 [DEBUG] [Thread-190655] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:12:58.763 [DEBUG] [Thread-190655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:12:58.764 [DEBUG] [Thread-190655] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:12:58.764 [DEBUG] [Thread-190655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:12:58.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:12:58.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:12:58.819 [DEBUG] [Thread-190655] [transport.py] [_log()] userauth is OK
2026-02-14T19:12:58.820 [DEBUG] [Thread-190655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:12:58.820 [DEBUG] [Thread-190655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:12:58.820 [DEBUG] [Thread-190655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:12:58.820 [DEBUG] [Thread-190655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:12:58.838 [INFO] [Thread-190655] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:12:58.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-14T19:12:58.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:12:59.727 [DEBUG] [Thread-190655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:12:59.728 [DEBUG] [Thread-190655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:12:59.776 [DEBUG] [Thread-190655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:12:59.777 [DEBUG] [Thread-190655] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:12:59.786 [DEBUG] [Thread-190655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:12:59.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:12:59.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-14T19:12:59.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-14T19:12:59.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:12:59.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:12:59.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:12:59.823 [DEBUG] [Thread-190655] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:13:06.302 [DEBUG] [Thread-190657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:13:19.153 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:13:19.154 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:13:21.353 [DEBUG] [Thread-190658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:13:29.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:13:29.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:13:29.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-14T19:13:32.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 12, 48), 11.33, 46.05, 0.0, 35.41, 13.09, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:13:32.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:12:48
2026-02-14T19:13:32.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:13:32.673 [DEBUG] [Thread-190659] [transport.py] [_log()] starting thread (client mode): 0xa2d6d990
2026-02-14T19:13:32.673 [DEBUG] [Thread-190659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:13:32.693 [DEBUG] [Thread-190659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:13:32.693 [INFO] [Thread-190659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:13:32.696 [DEBUG] [Thread-190659] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:13:32.696 [DEBUG] [Thread-190659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:13:32.696 [DEBUG] [Thread-190659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:13:32.696 [DEBUG] [Thread-190659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:13:32.696 [DEBUG] [Thread-190659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:13:32.696 [DEBUG] [Thread-190659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:13:32.696 [DEBUG] [Thread-190659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:13:32.696 [DEBUG] [Thread-190659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:13:32.696 [DEBUG] [Thread-190659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:13:32.697 [DEBUG] [Thread-190659] [transport.py] [_log()] client lang: <none>
2026-02-14T19:13:32.697 [DEBUG] [Thread-190659] [transport.py] [_log()] server lang: <none>
2026-02-14T19:13:32.697 [DEBUG] [Thread-190659] [transport.py] [_log()] kex follows: False
2026-02-14T19:13:32.697 [DEBUG] [Thread-190659] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:13:32.697 [DEBUG] [Thread-190659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:13:32.697 [DEBUG] [Thread-190659] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:13:32.697 [DEBUG] [Thread-190659] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:13:32.697 [DEBUG] [Thread-190659] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:13:32.697 [DEBUG] [Thread-190659] [transport.py] [_log()] Compression: none
2026-02-14T19:13:32.697 [DEBUG] [Thread-190659] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:13:32.716 [DEBUG] [Thread-190659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:13:32.717 [DEBUG] [Thread-190659] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:13:32.717 [DEBUG] [Thread-190659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:13:32.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:13:32.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:13:32.720 [DEBUG] [Thread-190659] [transport.py] [_log()] userauth is OK
2026-02-14T19:13:32.720 [DEBUG] [Thread-190659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:13:32.720 [DEBUG] [Thread-190659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:13:32.720 [DEBUG] [Thread-190659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:13:32.720 [DEBUG] [Thread-190659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:13:32.745 [INFO] [Thread-190659] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:13:32.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:13:33.395 [DEBUG] [Thread-190659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:13:33.395 [DEBUG] [Thread-190659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:13:33.395 [DEBUG] [Thread-190659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:13:33.436 [DEBUG] [Thread-190659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:13:33.436 [DEBUG] [Thread-190659] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:13:33.439 [DEBUG] [Thread-190659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:13:33.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:13:33.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:13:33.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:13:33.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:13:33.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:13:33.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:13:33.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:13:33.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:13:33.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:13:33.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.717129 -999.00  +12.90  22.77     52   +3.30 1 1 1 1 1   887    0 8.87 -35.34 ----- 29.9 22.8 161.4 35.7 14.3 -26.7 14.2 -26.0 14.6 -24.7 15.0 -26.6
2026-02-14T19:13:33.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:13:33.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:13:33.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.717129
2026-02-14T19:13:33.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:13:33.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:13:33.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:13:33.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:13:33.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:13:33.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:12:48', tmtdew=11.33, humidity=46.05, cloud=0.0, wind=35.41, temperature=13.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:12:39.946', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:13:33.463 [DEBUG] [Thread-190659] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:13:33.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-14T19:13:33.561 [DEBUG] [Thread-190662] [transport.py] [_log()] starting thread (client mode): 0xa2d6f280
2026-02-14T19:13:33.561 [DEBUG] [Thread-190662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:13:33.576 [DEBUG] [Thread-190662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:13:33.576 [INFO] [Thread-190662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:13:33.584 [DEBUG] [Thread-190662] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:13:33.584 [DEBUG] [Thread-190662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:13:33.584 [DEBUG] [Thread-190662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:13:33.585 [DEBUG] [Thread-190662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:13:33.585 [DEBUG] [Thread-190662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:13:33.585 [DEBUG] [Thread-190662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:13:33.585 [DEBUG] [Thread-190662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:13:33.585 [DEBUG] [Thread-190662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:13:33.585 [DEBUG] [Thread-190662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:13:33.586 [DEBUG] [Thread-190662] [transport.py] [_log()] client lang: <none>
2026-02-14T19:13:33.586 [DEBUG] [Thread-190662] [transport.py] [_log()] server lang: <none>
2026-02-14T19:13:33.586 [DEBUG] [Thread-190662] [transport.py] [_log()] kex follows: False
2026-02-14T19:13:33.586 [DEBUG] [Thread-190662] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:13:33.586 [DEBUG] [Thread-190662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:13:33.586 [DEBUG] [Thread-190662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:13:33.586 [DEBUG] [Thread-190662] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:13:33.586 [DEBUG] [Thread-190662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:13:33.586 [DEBUG] [Thread-190662] [transport.py] [_log()] Compression: none
2026-02-14T19:13:33.586 [DEBUG] [Thread-190662] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:13:33.640 [DEBUG] [Thread-190662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:13:33.641 [DEBUG] [Thread-190662] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:13:33.641 [DEBUG] [Thread-190662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:13:33.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:13:33.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:13:33.697 [DEBUG] [Thread-190662] [transport.py] [_log()] userauth is OK
2026-02-14T19:13:33.697 [DEBUG] [Thread-190662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:13:33.698 [DEBUG] [Thread-190662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:13:33.698 [DEBUG] [Thread-190662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:13:33.698 [DEBUG] [Thread-190662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:13:33.716 [INFO] [Thread-190662] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:13:33.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-14T19:13:33.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:13:34.534 [DEBUG] [Thread-190662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:13:34.535 [DEBUG] [Thread-190662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:13:34.583 [DEBUG] [Thread-190662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:13:34.584 [DEBUG] [Thread-190662] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:13:34.593 [DEBUG] [Thread-190662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:13:34.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:13:34.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-14T19:13:34.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-14T19:13:34.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:13:34.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:13:34.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:13:34.633 [DEBUG] [Thread-190662] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:13:36.389 [DEBUG] [Thread-190664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:13:38.151 [DEBUG] [Thread-190665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:13:51.438 [DEBUG] [Thread-190666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:14:04.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:14:04.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:14:04.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-14T19:14:06.468 [DEBUG] [Thread-190667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:14:06.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 13, 23), 11.31, 46.12, 0.0, 35.76, 13.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:14:06.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:13:23
2026-02-14T19:14:07.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:14:07.422 [DEBUG] [Thread-190668] [transport.py] [_log()] starting thread (client mode): 0xa2d7b940
2026-02-14T19:14:07.422 [DEBUG] [Thread-190668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:14:07.442 [DEBUG] [Thread-190668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:14:07.442 [INFO] [Thread-190668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:14:07.446 [DEBUG] [Thread-190668] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:14:07.446 [DEBUG] [Thread-190668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:14:07.446 [DEBUG] [Thread-190668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:14:07.446 [DEBUG] [Thread-190668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:14:07.446 [DEBUG] [Thread-190668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:14:07.447 [DEBUG] [Thread-190668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:14:07.447 [DEBUG] [Thread-190668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:14:07.447 [DEBUG] [Thread-190668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:14:07.447 [DEBUG] [Thread-190668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:14:07.447 [DEBUG] [Thread-190668] [transport.py] [_log()] client lang: <none>
2026-02-14T19:14:07.447 [DEBUG] [Thread-190668] [transport.py] [_log()] server lang: <none>
2026-02-14T19:14:07.447 [DEBUG] [Thread-190668] [transport.py] [_log()] kex follows: False
2026-02-14T19:14:07.447 [DEBUG] [Thread-190668] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:14:07.447 [DEBUG] [Thread-190668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:14:07.447 [DEBUG] [Thread-190668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:14:07.447 [DEBUG] [Thread-190668] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:14:07.447 [DEBUG] [Thread-190668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:14:07.447 [DEBUG] [Thread-190668] [transport.py] [_log()] Compression: none
2026-02-14T19:14:07.447 [DEBUG] [Thread-190668] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:14:07.460 [DEBUG] [Thread-190668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:14:07.460 [DEBUG] [Thread-190668] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:14:07.461 [DEBUG] [Thread-190668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:14:07.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:14:07.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:14:07.463 [DEBUG] [Thread-190668] [transport.py] [_log()] userauth is OK
2026-02-14T19:14:07.463 [DEBUG] [Thread-190668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:14:07.463 [DEBUG] [Thread-190668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:14:07.464 [DEBUG] [Thread-190668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:14:07.464 [DEBUG] [Thread-190668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:14:07.481 [INFO] [Thread-190668] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:14:07.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:14:08.126 [DEBUG] [Thread-190668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:14:08.126 [DEBUG] [Thread-190668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:14:08.126 [DEBUG] [Thread-190668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:14:08.167 [DEBUG] [Thread-190668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:14:08.167 [DEBUG] [Thread-190668] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:14:08.169 [DEBUG] [Thread-190668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:14:08.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:14:08.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:14:08.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:14:08.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:14:08.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:14:08.185 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:14:08.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:14:08.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:14:08.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:14:08.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.717823 -999.00  +13.00  26.18     52   +3.30 1 1 1 1 1   887    0 8.98 -35.42 ----- 25.5 26.2 163.2 37.8 14.2 -26.7 14.2 -26.2 14.6 -25.4 14.9 -26.6
2026-02-14T19:14:08.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:14:08.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:14:08.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.717823
2026-02-14T19:14:08.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:14:08.186 [DEBUG] [Thread-190668] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:14:08.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:14:08.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:14:08.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:14:08.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:14:08.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:13:23', tmtdew=11.31, humidity=46.12, cloud=0.0, wind=35.76, temperature=13.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:13:39.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:14:08.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-14T19:14:08.284 [DEBUG] [Thread-190671] [transport.py] [_log()] starting thread (client mode): 0xa2d6d9c0
2026-02-14T19:14:08.284 [DEBUG] [Thread-190671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:14:08.299 [DEBUG] [Thread-190671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:14:08.300 [INFO] [Thread-190671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:14:08.307 [DEBUG] [Thread-190671] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:14:08.307 [DEBUG] [Thread-190671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:14:08.307 [DEBUG] [Thread-190671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:14:08.307 [DEBUG] [Thread-190671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:14:08.307 [DEBUG] [Thread-190671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:14:08.307 [DEBUG] [Thread-190671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:14:08.307 [DEBUG] [Thread-190671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:14:08.307 [DEBUG] [Thread-190671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:14:08.307 [DEBUG] [Thread-190671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:14:08.307 [DEBUG] [Thread-190671] [transport.py] [_log()] client lang: <none>
2026-02-14T19:14:08.307 [DEBUG] [Thread-190671] [transport.py] [_log()] server lang: <none>
2026-02-14T19:14:08.307 [DEBUG] [Thread-190671] [transport.py] [_log()] kex follows: False
2026-02-14T19:14:08.307 [DEBUG] [Thread-190671] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:14:08.308 [DEBUG] [Thread-190671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:14:08.308 [DEBUG] [Thread-190671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:14:08.308 [DEBUG] [Thread-190671] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:14:08.308 [DEBUG] [Thread-190671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:14:08.308 [DEBUG] [Thread-190671] [transport.py] [_log()] Compression: none
2026-02-14T19:14:08.308 [DEBUG] [Thread-190671] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:14:08.367 [DEBUG] [Thread-190671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:14:08.368 [DEBUG] [Thread-190671] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:14:08.369 [DEBUG] [Thread-190671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:14:08.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:14:08.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:14:08.423 [DEBUG] [Thread-190671] [transport.py] [_log()] userauth is OK
2026-02-14T19:14:08.423 [DEBUG] [Thread-190671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:14:08.424 [DEBUG] [Thread-190671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:14:08.424 [DEBUG] [Thread-190671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:14:08.424 [DEBUG] [Thread-190671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:14:08.442 [INFO] [Thread-190671] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:14:08.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-14T19:14:08.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:14:09.248 [DEBUG] [Thread-190671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:14:09.249 [DEBUG] [Thread-190671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:14:09.296 [DEBUG] [Thread-190671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:14:09.297 [DEBUG] [Thread-190671] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:14:09.306 [DEBUG] [Thread-190671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:14:09.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:14:09.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:14:09.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:14:09.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:14:09.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:14:09.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:14:09.342 [DEBUG] [Thread-190671] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:14:19.296 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:14:19.298 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:14:21.501 [DEBUG] [Thread-190673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:14:36.555 [DEBUG] [Thread-190674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:14:38.192 [DEBUG] [Thread-190675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:14:39.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:14:39.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:14:39.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T19:14:41.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 13, 23), 11.31, 46.12, 0.0, 35.76, 13.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:14:41.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:13:23
2026-02-14T19:14:41.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:14:41.777 [DEBUG] [Thread-190676] [transport.py] [_log()] starting thread (client mode): 0xa2d7b940
2026-02-14T19:14:41.777 [DEBUG] [Thread-190676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:14:41.797 [DEBUG] [Thread-190676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:14:41.797 [INFO] [Thread-190676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:14:41.798 [DEBUG] [Thread-190676] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:14:41.798 [DEBUG] [Thread-190676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:14:41.799 [DEBUG] [Thread-190676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:14:41.799 [DEBUG] [Thread-190676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:14:41.799 [DEBUG] [Thread-190676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:14:41.799 [DEBUG] [Thread-190676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:14:41.799 [DEBUG] [Thread-190676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:14:41.799 [DEBUG] [Thread-190676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:14:41.799 [DEBUG] [Thread-190676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:14:41.799 [DEBUG] [Thread-190676] [transport.py] [_log()] client lang: <none>
2026-02-14T19:14:41.799 [DEBUG] [Thread-190676] [transport.py] [_log()] server lang: <none>
2026-02-14T19:14:41.799 [DEBUG] [Thread-190676] [transport.py] [_log()] kex follows: False
2026-02-14T19:14:41.799 [DEBUG] [Thread-190676] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:14:41.799 [DEBUG] [Thread-190676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:14:41.799 [DEBUG] [Thread-190676] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:14:41.799 [DEBUG] [Thread-190676] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:14:41.799 [DEBUG] [Thread-190676] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:14:41.799 [DEBUG] [Thread-190676] [transport.py] [_log()] Compression: none
2026-02-14T19:14:41.799 [DEBUG] [Thread-190676] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:14:41.816 [DEBUG] [Thread-190676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:14:41.817 [DEBUG] [Thread-190676] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:14:41.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:14:41.818 [DEBUG] [Thread-190676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:14:41.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:14:41.821 [DEBUG] [Thread-190676] [transport.py] [_log()] userauth is OK
2026-02-14T19:14:41.821 [DEBUG] [Thread-190676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:14:41.821 [DEBUG] [Thread-190676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:14:41.821 [DEBUG] [Thread-190676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:14:41.821 [DEBUG] [Thread-190676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:14:41.840 [INFO] [Thread-190676] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:14:41.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:14:42.484 [DEBUG] [Thread-190676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:14:42.484 [DEBUG] [Thread-190676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:14:42.485 [DEBUG] [Thread-190676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:14:42.525 [DEBUG] [Thread-190676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:14:42.526 [DEBUG] [Thread-190676] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:14:42.529 [DEBUG] [Thread-190676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:14:42.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:14:42.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:14:42.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:14:42.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:14:42.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:14:42.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:14:42.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:14:42.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:14:42.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:14:42.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.718171 -999.00  +12.90  29.15     52   +3.30 1 1 1 1 1   887    0 8.76 -37.09 ----- 33.0 29.1 171.2 45.8 14.2 -26.7 14.2 -26.0 14.6 -24.8 14.8 -26.7
2026-02-14T19:14:42.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:14:42.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:14:42.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.718171
2026-02-14T19:14:42.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:14:42.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:14:42.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:14:42.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:14:42.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:14:42.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:13:23', tmtdew=11.31, humidity=46.12, cloud=0.0, wind=35.76, temperature=13.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:14:09.974', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:14:42.554 [DEBUG] [Thread-190676] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:14:42.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T19:14:42.651 [DEBUG] [Thread-190679] [transport.py] [_log()] starting thread (client mode): 0xa2d6dde0
2026-02-14T19:14:42.651 [DEBUG] [Thread-190679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:14:42.666 [DEBUG] [Thread-190679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:14:42.666 [INFO] [Thread-190679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:14:42.673 [DEBUG] [Thread-190679] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:14:42.674 [DEBUG] [Thread-190679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:14:42.674 [DEBUG] [Thread-190679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:14:42.674 [DEBUG] [Thread-190679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:14:42.674 [DEBUG] [Thread-190679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:14:42.674 [DEBUG] [Thread-190679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:14:42.674 [DEBUG] [Thread-190679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:14:42.674 [DEBUG] [Thread-190679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:14:42.674 [DEBUG] [Thread-190679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:14:42.675 [DEBUG] [Thread-190679] [transport.py] [_log()] client lang: <none>
2026-02-14T19:14:42.675 [DEBUG] [Thread-190679] [transport.py] [_log()] server lang: <none>
2026-02-14T19:14:42.675 [DEBUG] [Thread-190679] [transport.py] [_log()] kex follows: False
2026-02-14T19:14:42.675 [DEBUG] [Thread-190679] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:14:42.675 [DEBUG] [Thread-190679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:14:42.675 [DEBUG] [Thread-190679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:14:42.675 [DEBUG] [Thread-190679] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:14:42.676 [DEBUG] [Thread-190679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:14:42.676 [DEBUG] [Thread-190679] [transport.py] [_log()] Compression: none
2026-02-14T19:14:42.676 [DEBUG] [Thread-190679] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:14:42.733 [DEBUG] [Thread-190679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:14:42.734 [DEBUG] [Thread-190679] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:14:42.734 [DEBUG] [Thread-190679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:14:42.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:14:42.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:14:42.789 [DEBUG] [Thread-190679] [transport.py] [_log()] userauth is OK
2026-02-14T19:14:42.790 [DEBUG] [Thread-190679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:14:42.790 [DEBUG] [Thread-190679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:14:42.790 [DEBUG] [Thread-190679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:14:42.790 [DEBUG] [Thread-190679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:14:42.808 [INFO] [Thread-190679] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:14:42.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T19:14:42.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:14:43.624 [DEBUG] [Thread-190679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:14:43.624 [DEBUG] [Thread-190679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:14:43.672 [DEBUG] [Thread-190679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:14:43.672 [DEBUG] [Thread-190679] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:14:43.682 [DEBUG] [Thread-190679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:14:43.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:14:43.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-14T19:14:43.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-14T19:14:43.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:14:43.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:14:43.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:14:43.718 [DEBUG] [Thread-190679] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:14:51.593 [DEBUG] [Thread-190681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:15:06.645 [DEBUG] [Thread-190682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:15:13.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:15:13.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:15:13.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-14T19:15:15.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 14, 35), 11.65, 45.16, 0.0, 33.84, 13.62, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:15:15.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:14:35
2026-02-14T19:15:16.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:15:16.344 [DEBUG] [Thread-190683] [transport.py] [_log()] starting thread (client mode): 0xa57c28c0
2026-02-14T19:15:16.344 [DEBUG] [Thread-190683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:15:16.365 [DEBUG] [Thread-190683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:15:16.365 [INFO] [Thread-190683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:15:16.369 [DEBUG] [Thread-190683] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:15:16.369 [DEBUG] [Thread-190683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:15:16.369 [DEBUG] [Thread-190683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:15:16.369 [DEBUG] [Thread-190683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:15:16.369 [DEBUG] [Thread-190683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:15:16.369 [DEBUG] [Thread-190683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:15:16.369 [DEBUG] [Thread-190683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:15:16.369 [DEBUG] [Thread-190683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:15:16.369 [DEBUG] [Thread-190683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:15:16.369 [DEBUG] [Thread-190683] [transport.py] [_log()] client lang: <none>
2026-02-14T19:15:16.369 [DEBUG] [Thread-190683] [transport.py] [_log()] server lang: <none>
2026-02-14T19:15:16.370 [DEBUG] [Thread-190683] [transport.py] [_log()] kex follows: False
2026-02-14T19:15:16.370 [DEBUG] [Thread-190683] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:15:16.370 [DEBUG] [Thread-190683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:15:16.370 [DEBUG] [Thread-190683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:15:16.370 [DEBUG] [Thread-190683] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:15:16.370 [DEBUG] [Thread-190683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:15:16.370 [DEBUG] [Thread-190683] [transport.py] [_log()] Compression: none
2026-02-14T19:15:16.370 [DEBUG] [Thread-190683] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:15:16.387 [DEBUG] [Thread-190683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:15:16.387 [DEBUG] [Thread-190683] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:15:16.388 [DEBUG] [Thread-190683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:15:16.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:15:16.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:15:16.390 [DEBUG] [Thread-190683] [transport.py] [_log()] userauth is OK
2026-02-14T19:15:16.390 [DEBUG] [Thread-190683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:15:16.390 [DEBUG] [Thread-190683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:15:16.390 [DEBUG] [Thread-190683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:15:16.390 [DEBUG] [Thread-190683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:15:16.415 [INFO] [Thread-190683] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:15:16.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:15:17.047 [DEBUG] [Thread-190683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:15:17.047 [DEBUG] [Thread-190683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:15:17.048 [DEBUG] [Thread-190683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:15:17.088 [DEBUG] [Thread-190683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:15:17.089 [DEBUG] [Thread-190683] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:15:17.092 [DEBUG] [Thread-190683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:15:17.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:15:17.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:15:17.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:15:17.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:15:17.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:15:17.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:15:17.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:15:17.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:15:17.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:15:17.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.718518 -999.00  +12.90  28.46     52   +3.30 1 1 1 1 1   887    0 8.78 -35.49 ----- 29.2 28.5 176.6 40.6 14.2 -26.8 14.1 -25.8 14.5 -25.0 14.8 -26.5
2026-02-14T19:15:17.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:15:17.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:15:17.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.718518
2026-02-14T19:15:17.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:15:17.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:15:17.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:15:17.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:15:17.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:15:17.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:14:35', tmtdew=11.65, humidity=45.16, cloud=0.0, wind=33.84, temperature=13.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:14:39.955', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:15:17.123 [DEBUG] [Thread-190683] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:15:17.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T19:15:17.218 [DEBUG] [Thread-190686] [transport.py] [_log()] starting thread (client mode): 0xa2d7a350
2026-02-14T19:15:17.218 [DEBUG] [Thread-190686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:15:17.232 [DEBUG] [Thread-190686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:15:17.233 [INFO] [Thread-190686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:15:17.241 [DEBUG] [Thread-190686] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:15:17.241 [DEBUG] [Thread-190686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:15:17.242 [DEBUG] [Thread-190686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:15:17.242 [DEBUG] [Thread-190686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:15:17.242 [DEBUG] [Thread-190686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:15:17.242 [DEBUG] [Thread-190686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:15:17.242 [DEBUG] [Thread-190686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:15:17.242 [DEBUG] [Thread-190686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:15:17.242 [DEBUG] [Thread-190686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:15:17.242 [DEBUG] [Thread-190686] [transport.py] [_log()] client lang: <none>
2026-02-14T19:15:17.242 [DEBUG] [Thread-190686] [transport.py] [_log()] server lang: <none>
2026-02-14T19:15:17.242 [DEBUG] [Thread-190686] [transport.py] [_log()] kex follows: False
2026-02-14T19:15:17.242 [DEBUG] [Thread-190686] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:15:17.242 [DEBUG] [Thread-190686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:15:17.242 [DEBUG] [Thread-190686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:15:17.242 [DEBUG] [Thread-190686] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:15:17.242 [DEBUG] [Thread-190686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:15:17.242 [DEBUG] [Thread-190686] [transport.py] [_log()] Compression: none
2026-02-14T19:15:17.242 [DEBUG] [Thread-190686] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:15:17.307 [DEBUG] [Thread-190686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:15:17.307 [DEBUG] [Thread-190686] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:15:17.308 [DEBUG] [Thread-190686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:15:17.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:15:17.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:15:17.364 [DEBUG] [Thread-190686] [transport.py] [_log()] userauth is OK
2026-02-14T19:15:17.364 [DEBUG] [Thread-190686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:15:17.364 [DEBUG] [Thread-190686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:15:17.364 [DEBUG] [Thread-190686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:15:17.364 [DEBUG] [Thread-190686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:15:17.383 [INFO] [Thread-190686] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:15:17.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-14T19:15:17.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:15:18.226 [DEBUG] [Thread-190686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:15:18.227 [DEBUG] [Thread-190686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:15:18.274 [DEBUG] [Thread-190686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:15:18.274 [DEBUG] [Thread-190686] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:15:18.284 [DEBUG] [Thread-190686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:15:18.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:15:18.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-14T19:15:18.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-14T19:15:18.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:15:18.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:15:18.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:15:18.320 [DEBUG] [Thread-190686] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:15:19.438 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:15:19.439 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:15:21.679 [DEBUG] [Thread-190688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:15:36.730 [DEBUG] [Thread-190689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:15:38.226 [DEBUG] [Thread-190690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:15:48.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:15:48.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:15:48.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-14T19:15:50.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 15, 10), 11.29, 46.02, 0.0, 42.79, 13.09, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:15:50.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:15:10
2026-02-14T19:15:51.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:15:51.575 [DEBUG] [Thread-190691] [transport.py] [_log()] starting thread (client mode): 0xa57c0880
2026-02-14T19:15:51.575 [DEBUG] [Thread-190691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:15:51.592 [DEBUG] [Thread-190691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:15:51.592 [INFO] [Thread-190691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:15:51.594 [DEBUG] [Thread-190691] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:15:51.594 [DEBUG] [Thread-190691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:15:51.594 [DEBUG] [Thread-190691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:15:51.594 [DEBUG] [Thread-190691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:15:51.594 [DEBUG] [Thread-190691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:15:51.594 [DEBUG] [Thread-190691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:15:51.594 [DEBUG] [Thread-190691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:15:51.594 [DEBUG] [Thread-190691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:15:51.594 [DEBUG] [Thread-190691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:15:51.595 [DEBUG] [Thread-190691] [transport.py] [_log()] client lang: <none>
2026-02-14T19:15:51.595 [DEBUG] [Thread-190691] [transport.py] [_log()] server lang: <none>
2026-02-14T19:15:51.595 [DEBUG] [Thread-190691] [transport.py] [_log()] kex follows: False
2026-02-14T19:15:51.595 [DEBUG] [Thread-190691] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:15:51.595 [DEBUG] [Thread-190691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:15:51.595 [DEBUG] [Thread-190691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:15:51.595 [DEBUG] [Thread-190691] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:15:51.595 [DEBUG] [Thread-190691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:15:51.595 [DEBUG] [Thread-190691] [transport.py] [_log()] Compression: none
2026-02-14T19:15:51.595 [DEBUG] [Thread-190691] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:15:51.604 [DEBUG] [Thread-190691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:15:51.604 [DEBUG] [Thread-190691] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:15:51.605 [DEBUG] [Thread-190691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:15:51.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:15:51.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:15:51.606 [DEBUG] [Thread-190691] [transport.py] [_log()] userauth is OK
2026-02-14T19:15:51.606 [DEBUG] [Thread-190691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:15:51.606 [DEBUG] [Thread-190691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:15:51.606 [DEBUG] [Thread-190691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:15:51.606 [DEBUG] [Thread-190691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:15:51.622 [INFO] [Thread-190691] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:15:51.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:15:51.764 [DEBUG] [Thread-190693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:15:52.408 [DEBUG] [Thread-190691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:15:52.409 [DEBUG] [Thread-190691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:15:52.409 [DEBUG] [Thread-190691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:15:52.449 [DEBUG] [Thread-190691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:15:52.449 [DEBUG] [Thread-190691] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:15:52.452 [DEBUG] [Thread-190691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:15:52.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:15:52.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:15:52.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:15:52.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:15:52.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:15:52.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:15:52.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:15:52.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:15:52.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:15:52.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.718865 -999.00  +12.90  38.84     52   +3.30 1 1 2 1 1   887    0 8.69 -34.96 ----- 35.1 38.8 170.4 47.8 14.2 -26.6 14.1 -25.7 14.5 -25.2 14.8 -26.7
2026-02-14T19:15:52.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:15:52.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:15:52.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.718865
2026-02-14T19:15:52.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:15:52.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:15:52.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:15:52.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:15:52.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:15:52.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:15:10', tmtdew=11.29, humidity=46.02, cloud=0.0, wind=42.79, temperature=13.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:15:09.936', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:15:52.478 [DEBUG] [Thread-190691] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:15:52.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-14T19:15:52.572 [DEBUG] [Thread-190695] [transport.py] [_log()] starting thread (client mode): 0xa57d66b0
2026-02-14T19:15:52.572 [DEBUG] [Thread-190695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:15:52.587 [DEBUG] [Thread-190695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:15:52.587 [INFO] [Thread-190695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:15:52.595 [DEBUG] [Thread-190695] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:15:52.595 [DEBUG] [Thread-190695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:15:52.595 [DEBUG] [Thread-190695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:15:52.595 [DEBUG] [Thread-190695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:15:52.595 [DEBUG] [Thread-190695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:15:52.595 [DEBUG] [Thread-190695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:15:52.595 [DEBUG] [Thread-190695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:15:52.595 [DEBUG] [Thread-190695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:15:52.595 [DEBUG] [Thread-190695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:15:52.595 [DEBUG] [Thread-190695] [transport.py] [_log()] client lang: <none>
2026-02-14T19:15:52.595 [DEBUG] [Thread-190695] [transport.py] [_log()] server lang: <none>
2026-02-14T19:15:52.595 [DEBUG] [Thread-190695] [transport.py] [_log()] kex follows: False
2026-02-14T19:15:52.595 [DEBUG] [Thread-190695] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:15:52.595 [DEBUG] [Thread-190695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:15:52.595 [DEBUG] [Thread-190695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:15:52.595 [DEBUG] [Thread-190695] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:15:52.595 [DEBUG] [Thread-190695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:15:52.595 [DEBUG] [Thread-190695] [transport.py] [_log()] Compression: none
2026-02-14T19:15:52.596 [DEBUG] [Thread-190695] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:15:52.653 [DEBUG] [Thread-190695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:15:52.654 [DEBUG] [Thread-190695] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:15:52.654 [DEBUG] [Thread-190695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:15:52.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:15:52.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:15:52.710 [DEBUG] [Thread-190695] [transport.py] [_log()] userauth is OK
2026-02-14T19:15:52.710 [DEBUG] [Thread-190695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:15:52.710 [DEBUG] [Thread-190695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:15:52.711 [DEBUG] [Thread-190695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:15:52.711 [DEBUG] [Thread-190695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:15:52.736 [INFO] [Thread-190695] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:15:52.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-14T19:15:52.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:15:53.565 [DEBUG] [Thread-190695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:15:53.565 [DEBUG] [Thread-190695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:15:53.613 [DEBUG] [Thread-190695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:15:53.613 [DEBUG] [Thread-190695] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:15:53.621 [DEBUG] [Thread-190695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:15:53.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:15:53.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-14T19:15:53.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-14T19:15:53.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:15:53.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:15:53.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:15:53.652 [DEBUG] [Thread-190695] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:16:06.804 [DEBUG] [Thread-190697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:16:19.580 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:16:19.581 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:16:21.849 [DEBUG] [Thread-190698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:16:23.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:16:23.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:16:23.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-14T19:16:25.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 15, 46), 11.22, 46.58, 0.0, 40.69, 13.06, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:16:25.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:15:46
2026-02-14T19:16:26.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:16:26.312 [DEBUG] [Thread-190699] [transport.py] [_log()] starting thread (client mode): 0xa5773580
2026-02-14T19:16:26.312 [DEBUG] [Thread-190699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:16:26.332 [DEBUG] [Thread-190699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:16:26.332 [INFO] [Thread-190699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:16:26.336 [DEBUG] [Thread-190699] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:16:26.336 [DEBUG] [Thread-190699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:16:26.336 [DEBUG] [Thread-190699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:16:26.336 [DEBUG] [Thread-190699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:16:26.336 [DEBUG] [Thread-190699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:16:26.336 [DEBUG] [Thread-190699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:16:26.336 [DEBUG] [Thread-190699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:16:26.336 [DEBUG] [Thread-190699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:16:26.336 [DEBUG] [Thread-190699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:16:26.336 [DEBUG] [Thread-190699] [transport.py] [_log()] client lang: <none>
2026-02-14T19:16:26.336 [DEBUG] [Thread-190699] [transport.py] [_log()] server lang: <none>
2026-02-14T19:16:26.336 [DEBUG] [Thread-190699] [transport.py] [_log()] kex follows: False
2026-02-14T19:16:26.336 [DEBUG] [Thread-190699] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:16:26.336 [DEBUG] [Thread-190699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:16:26.336 [DEBUG] [Thread-190699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:16:26.336 [DEBUG] [Thread-190699] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:16:26.336 [DEBUG] [Thread-190699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:16:26.336 [DEBUG] [Thread-190699] [transport.py] [_log()] Compression: none
2026-02-14T19:16:26.336 [DEBUG] [Thread-190699] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:16:26.350 [DEBUG] [Thread-190699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:16:26.350 [DEBUG] [Thread-190699] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:16:26.350 [DEBUG] [Thread-190699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:16:26.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:16:26.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:16:26.351 [DEBUG] [Thread-190699] [transport.py] [_log()] userauth is OK
2026-02-14T19:16:26.351 [DEBUG] [Thread-190699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:16:26.351 [DEBUG] [Thread-190699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:16:26.351 [DEBUG] [Thread-190699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:16:26.351 [DEBUG] [Thread-190699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:16:26.360 [INFO] [Thread-190699] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:16:26.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:16:26.996 [DEBUG] [Thread-190699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:16:26.996 [DEBUG] [Thread-190699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:16:27.006 [DEBUG] [Thread-190699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:16:27.037 [DEBUG] [Thread-190699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:16:27.038 [DEBUG] [Thread-190699] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:16:27.041 [DEBUG] [Thread-190699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:16:27.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:16:27.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:16:27.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:16:27.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:16:27.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:16:27.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:16:27.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:16:27.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:16:27.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:16:27.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.719212 -999.00  +12.90  40.02     52   +3.30 1 1 2 1 1   886    0 8.77 -35.85 ----- 33.5 40.0 168.1 48.8 14.1 -26.8 14.1 -26.1 14.4 -25.0 14.8 -26.9
2026-02-14T19:16:27.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:16:27.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:16:27.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.719212
2026-02-14T19:16:27.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:16:27.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:16:27.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:16:27.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:16:27.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:16:27.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:15:46', tmtdew=11.22, humidity=46.58, cloud=0.0, wind=40.69, temperature=13.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:15:39.917', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:16:27.064 [DEBUG] [Thread-190699] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:16:27.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T19:16:27.160 [DEBUG] [Thread-190702] [transport.py] [_log()] starting thread (client mode): 0xa57701f0
2026-02-14T19:16:27.160 [DEBUG] [Thread-190702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:16:27.174 [DEBUG] [Thread-190702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:16:27.174 [INFO] [Thread-190702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:16:27.182 [DEBUG] [Thread-190702] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:16:27.182 [DEBUG] [Thread-190702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:16:27.182 [DEBUG] [Thread-190702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:16:27.182 [DEBUG] [Thread-190702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:16:27.182 [DEBUG] [Thread-190702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:16:27.182 [DEBUG] [Thread-190702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:16:27.182 [DEBUG] [Thread-190702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:16:27.182 [DEBUG] [Thread-190702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:16:27.182 [DEBUG] [Thread-190702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:16:27.182 [DEBUG] [Thread-190702] [transport.py] [_log()] client lang: <none>
2026-02-14T19:16:27.182 [DEBUG] [Thread-190702] [transport.py] [_log()] server lang: <none>
2026-02-14T19:16:27.182 [DEBUG] [Thread-190702] [transport.py] [_log()] kex follows: False
2026-02-14T19:16:27.183 [DEBUG] [Thread-190702] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:16:27.183 [DEBUG] [Thread-190702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:16:27.183 [DEBUG] [Thread-190702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:16:27.183 [DEBUG] [Thread-190702] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:16:27.183 [DEBUG] [Thread-190702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:16:27.183 [DEBUG] [Thread-190702] [transport.py] [_log()] Compression: none
2026-02-14T19:16:27.183 [DEBUG] [Thread-190702] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:16:27.246 [DEBUG] [Thread-190702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:16:27.246 [DEBUG] [Thread-190702] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:16:27.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:16:27.247 [DEBUG] [Thread-190702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:16:27.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:16:27.305 [DEBUG] [Thread-190702] [transport.py] [_log()] userauth is OK
2026-02-14T19:16:27.305 [DEBUG] [Thread-190702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:16:27.305 [DEBUG] [Thread-190702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:16:27.305 [DEBUG] [Thread-190702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:16:27.305 [DEBUG] [Thread-190702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:16:27.324 [INFO] [Thread-190702] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:16:27.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-14T19:16:27.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:16:28.163 [DEBUG] [Thread-190702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:16:28.163 [DEBUG] [Thread-190702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:16:28.211 [DEBUG] [Thread-190702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:16:28.211 [DEBUG] [Thread-190702] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:16:28.220 [DEBUG] [Thread-190702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:16:28.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:16:28.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-14T19:16:28.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-14T19:16:28.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:16:28.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:16:28.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:16:28.254 [DEBUG] [Thread-190702] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:16:36.890 [DEBUG] [Thread-190704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:16:38.262 [DEBUG] [Thread-190705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:16:51.942 [DEBUG] [Thread-190706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:16:58.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:16:58.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:16:58.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T19:17:00.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 16, 22), 11.2, 46.67, 0.0, 40.02, 13.08, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:17:00.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:16:22
2026-02-14T19:17:00.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:17:00.890 [DEBUG] [Thread-190707] [transport.py] [_log()] starting thread (client mode): 0xa5770a00
2026-02-14T19:17:00.891 [DEBUG] [Thread-190707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:17:00.911 [DEBUG] [Thread-190707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:17:00.911 [INFO] [Thread-190707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:17:00.914 [DEBUG] [Thread-190707] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:17:00.914 [DEBUG] [Thread-190707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:17:00.914 [DEBUG] [Thread-190707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:17:00.914 [DEBUG] [Thread-190707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:17:00.914 [DEBUG] [Thread-190707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:17:00.915 [DEBUG] [Thread-190707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:17:00.915 [DEBUG] [Thread-190707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:17:00.915 [DEBUG] [Thread-190707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:17:00.915 [DEBUG] [Thread-190707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:17:00.915 [DEBUG] [Thread-190707] [transport.py] [_log()] client lang: <none>
2026-02-14T19:17:00.915 [DEBUG] [Thread-190707] [transport.py] [_log()] server lang: <none>
2026-02-14T19:17:00.915 [DEBUG] [Thread-190707] [transport.py] [_log()] kex follows: False
2026-02-14T19:17:00.915 [DEBUG] [Thread-190707] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:17:00.915 [DEBUG] [Thread-190707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:17:00.915 [DEBUG] [Thread-190707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:17:00.915 [DEBUG] [Thread-190707] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:17:00.915 [DEBUG] [Thread-190707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:17:00.915 [DEBUG] [Thread-190707] [transport.py] [_log()] Compression: none
2026-02-14T19:17:00.915 [DEBUG] [Thread-190707] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:17:00.933 [DEBUG] [Thread-190707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:17:00.934 [DEBUG] [Thread-190707] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:17:00.934 [DEBUG] [Thread-190707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:17:00.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:17:00.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:17:00.936 [DEBUG] [Thread-190707] [transport.py] [_log()] userauth is OK
2026-02-14T19:17:00.936 [DEBUG] [Thread-190707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:17:00.937 [DEBUG] [Thread-190707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:17:00.937 [DEBUG] [Thread-190707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:17:00.937 [DEBUG] [Thread-190707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:17:00.959 [INFO] [Thread-190707] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:17:00.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:17:01.583 [DEBUG] [Thread-190707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:17:01.584 [DEBUG] [Thread-190707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:17:01.584 [DEBUG] [Thread-190707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:17:01.624 [DEBUG] [Thread-190707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:17:01.624 [DEBUG] [Thread-190707] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:17:01.627 [DEBUG] [Thread-190707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:17:01.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:17:01.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:17:01.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:17:01.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:17:01.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:17:01.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:17:01.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:17:01.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:17:01.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:17:01.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.719560 -999.00  +12.80  29.95     52   +3.30 1 1 1 1 1   886    0 8.88 -37.82 ----- 33.3 29.9 167.0 47.2 14.1 -26.9 14.1 -25.8 14.4 -25.3 14.7 -26.8
2026-02-14T19:17:01.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:17:01.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:17:01.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.719560
2026-02-14T19:17:01.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:17:01.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:17:01.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:17:01.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:17:01.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:17:01.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:16:22', tmtdew=11.2, humidity=46.67, cloud=0.0, wind=40.02, temperature=13.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:16:09.984', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:17:01.650 [DEBUG] [Thread-190707] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:17:01.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-14T19:17:01.745 [DEBUG] [Thread-190710] [transport.py] [_log()] starting thread (client mode): 0xa2d783d0
2026-02-14T19:17:01.745 [DEBUG] [Thread-190710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:17:01.760 [DEBUG] [Thread-190710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:17:01.760 [INFO] [Thread-190710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:17:01.768 [DEBUG] [Thread-190710] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:17:01.768 [DEBUG] [Thread-190710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:17:01.768 [DEBUG] [Thread-190710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:17:01.768 [DEBUG] [Thread-190710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:17:01.768 [DEBUG] [Thread-190710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:17:01.768 [DEBUG] [Thread-190710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:17:01.768 [DEBUG] [Thread-190710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:17:01.768 [DEBUG] [Thread-190710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:17:01.768 [DEBUG] [Thread-190710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:17:01.768 [DEBUG] [Thread-190710] [transport.py] [_log()] client lang: <none>
2026-02-14T19:17:01.768 [DEBUG] [Thread-190710] [transport.py] [_log()] server lang: <none>
2026-02-14T19:17:01.768 [DEBUG] [Thread-190710] [transport.py] [_log()] kex follows: False
2026-02-14T19:17:01.768 [DEBUG] [Thread-190710] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:17:01.768 [DEBUG] [Thread-190710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:17:01.768 [DEBUG] [Thread-190710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:17:01.769 [DEBUG] [Thread-190710] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:17:01.769 [DEBUG] [Thread-190710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:17:01.769 [DEBUG] [Thread-190710] [transport.py] [_log()] Compression: none
2026-02-14T19:17:01.769 [DEBUG] [Thread-190710] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:17:01.828 [DEBUG] [Thread-190710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:17:01.828 [DEBUG] [Thread-190710] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:17:01.829 [DEBUG] [Thread-190710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:17:01.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:17:01.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:17:01.887 [DEBUG] [Thread-190710] [transport.py] [_log()] userauth is OK
2026-02-14T19:17:01.887 [DEBUG] [Thread-190710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:17:01.887 [DEBUG] [Thread-190710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:17:01.887 [DEBUG] [Thread-190710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:17:01.887 [DEBUG] [Thread-190710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:17:01.906 [INFO] [Thread-190710] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:17:01.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-14T19:17:01.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:17:02.753 [DEBUG] [Thread-190710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:17:02.754 [DEBUG] [Thread-190710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:17:02.801 [DEBUG] [Thread-190710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:17:02.802 [DEBUG] [Thread-190710] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:17:02.811 [DEBUG] [Thread-190710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:17:02.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:17:02.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:17:02.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:17:02.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:17:02.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:17:02.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:17:02.849 [DEBUG] [Thread-190710] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:17:06.979 [DEBUG] [Thread-190712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:17:19.728 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:17:19.729 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:17:22.040 [DEBUG] [Thread-190713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:17:32.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:17:32.870 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:17:32.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T19:17:34.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 16, 57), 11.15, 46.8, 0.0, 43.47, 13.03, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:17:34.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:16:57
2026-02-14T19:17:35.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:17:35.386 [DEBUG] [Thread-190714] [transport.py] [_log()] starting thread (client mode): 0xa2d7a350
2026-02-14T19:17:35.386 [DEBUG] [Thread-190714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:17:35.406 [DEBUG] [Thread-190714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:17:35.406 [INFO] [Thread-190714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:17:35.410 [DEBUG] [Thread-190714] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:17:35.410 [DEBUG] [Thread-190714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:17:35.410 [DEBUG] [Thread-190714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:17:35.410 [DEBUG] [Thread-190714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:17:35.410 [DEBUG] [Thread-190714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:17:35.410 [DEBUG] [Thread-190714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:17:35.410 [DEBUG] [Thread-190714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:17:35.410 [DEBUG] [Thread-190714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:17:35.410 [DEBUG] [Thread-190714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:17:35.410 [DEBUG] [Thread-190714] [transport.py] [_log()] client lang: <none>
2026-02-14T19:17:35.410 [DEBUG] [Thread-190714] [transport.py] [_log()] server lang: <none>
2026-02-14T19:17:35.410 [DEBUG] [Thread-190714] [transport.py] [_log()] kex follows: False
2026-02-14T19:17:35.410 [DEBUG] [Thread-190714] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:17:35.410 [DEBUG] [Thread-190714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:17:35.411 [DEBUG] [Thread-190714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:17:35.411 [DEBUG] [Thread-190714] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:17:35.411 [DEBUG] [Thread-190714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:17:35.411 [DEBUG] [Thread-190714] [transport.py] [_log()] Compression: none
2026-02-14T19:17:35.411 [DEBUG] [Thread-190714] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:17:35.428 [DEBUG] [Thread-190714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:17:35.429 [DEBUG] [Thread-190714] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:17:35.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:17:35.430 [DEBUG] [Thread-190714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:17:35.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:17:35.432 [DEBUG] [Thread-190714] [transport.py] [_log()] userauth is OK
2026-02-14T19:17:35.432 [DEBUG] [Thread-190714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:17:35.432 [DEBUG] [Thread-190714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:17:35.432 [DEBUG] [Thread-190714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:17:35.432 [DEBUG] [Thread-190714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:17:35.456 [INFO] [Thread-190714] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:17:35.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:17:36.081 [DEBUG] [Thread-190714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:17:36.081 [DEBUG] [Thread-190714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:17:36.081 [DEBUG] [Thread-190714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:17:36.121 [DEBUG] [Thread-190714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:17:36.122 [DEBUG] [Thread-190714] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:17:36.125 [DEBUG] [Thread-190714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:17:36.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:17:36.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:17:36.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:17:36.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:17:36.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:17:36.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:17:36.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:17:36.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:17:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:17:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.719907 -999.00  +12.80  37.44     52   +3.30 1 1 2 1 1   886    0 8.88 -36.97 ----- 37.2 37.4 174.0 46.3 14.1 -26.7 14.0 -25.6 14.3 -25.1 14.7 -26.7
2026-02-14T19:17:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:17:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:17:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.719907
2026-02-14T19:17:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:17:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:17:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:17:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:17:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:17:36.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:16:57', tmtdew=11.15, humidity=46.8, cloud=0.0, wind=43.47, temperature=13.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:16:39.965', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:17:36.154 [DEBUG] [Thread-190714] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:17:36.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-14T19:17:36.254 [DEBUG] [Thread-190717] [transport.py] [_log()] starting thread (client mode): 0xa57d7df0
2026-02-14T19:17:36.254 [DEBUG] [Thread-190717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:17:36.269 [DEBUG] [Thread-190717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:17:36.269 [INFO] [Thread-190717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:17:36.276 [DEBUG] [Thread-190717] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:17:36.277 [DEBUG] [Thread-190717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:17:36.277 [DEBUG] [Thread-190717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:17:36.277 [DEBUG] [Thread-190717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:17:36.277 [DEBUG] [Thread-190717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:17:36.277 [DEBUG] [Thread-190717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:17:36.277 [DEBUG] [Thread-190717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:17:36.277 [DEBUG] [Thread-190717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:17:36.277 [DEBUG] [Thread-190717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:17:36.277 [DEBUG] [Thread-190717] [transport.py] [_log()] client lang: <none>
2026-02-14T19:17:36.277 [DEBUG] [Thread-190717] [transport.py] [_log()] server lang: <none>
2026-02-14T19:17:36.277 [DEBUG] [Thread-190717] [transport.py] [_log()] kex follows: False
2026-02-14T19:17:36.277 [DEBUG] [Thread-190717] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:17:36.277 [DEBUG] [Thread-190717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:17:36.277 [DEBUG] [Thread-190717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:17:36.277 [DEBUG] [Thread-190717] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:17:36.277 [DEBUG] [Thread-190717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:17:36.277 [DEBUG] [Thread-190717] [transport.py] [_log()] Compression: none
2026-02-14T19:17:36.278 [DEBUG] [Thread-190717] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:17:36.334 [DEBUG] [Thread-190717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:17:36.334 [DEBUG] [Thread-190717] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:17:36.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:17:36.335 [DEBUG] [Thread-190717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:17:36.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:17:36.389 [DEBUG] [Thread-190717] [transport.py] [_log()] userauth is OK
2026-02-14T19:17:36.390 [DEBUG] [Thread-190717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:17:36.390 [DEBUG] [Thread-190717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:17:36.390 [DEBUG] [Thread-190717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:17:36.390 [DEBUG] [Thread-190717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:17:36.409 [INFO] [Thread-190717] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:17:36.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-14T19:17:36.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:17:37.077 [DEBUG] [Thread-190719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:17:37.228 [DEBUG] [Thread-190717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:17:37.229 [DEBUG] [Thread-190717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:17:37.278 [DEBUG] [Thread-190717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:17:37.278 [DEBUG] [Thread-190717] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:17:37.288 [DEBUG] [Thread-190717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:17:37.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:17:37.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-14T19:17:37.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:17:37.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:17:37.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:17:37.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:17:37.324 [DEBUG] [Thread-190717] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:17:38.295 [DEBUG] [Thread-190720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:17:52.128 [DEBUG] [Thread-190721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:18:07.163 [DEBUG] [Thread-190722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:18:07.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:18:07.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:18:07.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-14T19:18:09.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 17, 33), 11.14, 46.83, 0.0, 41.94, 13.03, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:18:09.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:17:33
2026-02-14T19:18:09.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:18:09.803 [DEBUG] [Thread-190723] [transport.py] [_log()] starting thread (client mode): 0xa2d79570
2026-02-14T19:18:09.803 [DEBUG] [Thread-190723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:18:09.815 [DEBUG] [Thread-190723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:18:09.815 [INFO] [Thread-190723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:18:09.818 [DEBUG] [Thread-190723] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:18:09.818 [DEBUG] [Thread-190723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:18:09.818 [DEBUG] [Thread-190723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:18:09.818 [DEBUG] [Thread-190723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:18:09.818 [DEBUG] [Thread-190723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:18:09.818 [DEBUG] [Thread-190723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:18:09.818 [DEBUG] [Thread-190723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:18:09.818 [DEBUG] [Thread-190723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:18:09.818 [DEBUG] [Thread-190723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:18:09.818 [DEBUG] [Thread-190723] [transport.py] [_log()] client lang: <none>
2026-02-14T19:18:09.818 [DEBUG] [Thread-190723] [transport.py] [_log()] server lang: <none>
2026-02-14T19:18:09.818 [DEBUG] [Thread-190723] [transport.py] [_log()] kex follows: False
2026-02-14T19:18:09.818 [DEBUG] [Thread-190723] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:18:09.818 [DEBUG] [Thread-190723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:18:09.818 [DEBUG] [Thread-190723] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:18:09.818 [DEBUG] [Thread-190723] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:18:09.818 [DEBUG] [Thread-190723] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:18:09.818 [DEBUG] [Thread-190723] [transport.py] [_log()] Compression: none
2026-02-14T19:18:09.818 [DEBUG] [Thread-190723] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:18:09.837 [DEBUG] [Thread-190723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:18:09.837 [DEBUG] [Thread-190723] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:18:09.838 [DEBUG] [Thread-190723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:18:09.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:18:09.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:18:09.839 [DEBUG] [Thread-190723] [transport.py] [_log()] userauth is OK
2026-02-14T19:18:09.840 [DEBUG] [Thread-190723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:18:09.840 [DEBUG] [Thread-190723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:18:09.840 [DEBUG] [Thread-190723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:18:09.840 [DEBUG] [Thread-190723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:18:09.863 [INFO] [Thread-190723] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:18:09.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:18:10.446 [DEBUG] [Thread-190723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:18:10.447 [DEBUG] [Thread-190723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:18:10.447 [DEBUG] [Thread-190723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:18:10.487 [DEBUG] [Thread-190723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:18:10.487 [DEBUG] [Thread-190723] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:18:10.491 [DEBUG] [Thread-190723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:18:10.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:18:10.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:18:10.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:18:10.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:18:10.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:18:10.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:18:10.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:18:10.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:18:10.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:18:10.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.720601 -999.00  +12.80  29.95     52   +3.30 1 1 1 1 1   886    0 8.86 -34.22 ----- 23.1 29.9 159.2 37.9 14.0 -26.8 14.0 -25.7 14.2 -25.1 14.6 -26.5
2026-02-14T19:18:10.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:18:10.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:18:10.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.720601
2026-02-14T19:18:10.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:18:10.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:18:10.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:18:10.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:18:10.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:18:10.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:17:33', tmtdew=11.14, humidity=46.83, cloud=0.0, wind=41.94, temperature=13.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:17:39.926', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:18:10.510 [DEBUG] [Thread-190723] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:18:10.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-14T19:18:10.603 [DEBUG] [Thread-190726] [transport.py] [_log()] starting thread (client mode): 0xa57e2620
2026-02-14T19:18:10.604 [DEBUG] [Thread-190726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:18:10.618 [DEBUG] [Thread-190726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:18:10.618 [INFO] [Thread-190726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:18:10.625 [DEBUG] [Thread-190726] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:18:10.626 [DEBUG] [Thread-190726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:18:10.626 [DEBUG] [Thread-190726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:18:10.626 [DEBUG] [Thread-190726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:18:10.626 [DEBUG] [Thread-190726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:18:10.626 [DEBUG] [Thread-190726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:18:10.626 [DEBUG] [Thread-190726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:18:10.626 [DEBUG] [Thread-190726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:18:10.627 [DEBUG] [Thread-190726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:18:10.627 [DEBUG] [Thread-190726] [transport.py] [_log()] client lang: <none>
2026-02-14T19:18:10.627 [DEBUG] [Thread-190726] [transport.py] [_log()] server lang: <none>
2026-02-14T19:18:10.627 [DEBUG] [Thread-190726] [transport.py] [_log()] kex follows: False
2026-02-14T19:18:10.627 [DEBUG] [Thread-190726] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:18:10.627 [DEBUG] [Thread-190726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:18:10.627 [DEBUG] [Thread-190726] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:18:10.627 [DEBUG] [Thread-190726] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:18:10.628 [DEBUG] [Thread-190726] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:18:10.628 [DEBUG] [Thread-190726] [transport.py] [_log()] Compression: none
2026-02-14T19:18:10.628 [DEBUG] [Thread-190726] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:18:10.685 [DEBUG] [Thread-190726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:18:10.686 [DEBUG] [Thread-190726] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:18:10.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:18:10.687 [DEBUG] [Thread-190726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:18:10.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:18:10.741 [DEBUG] [Thread-190726] [transport.py] [_log()] userauth is OK
2026-02-14T19:18:10.741 [DEBUG] [Thread-190726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:18:10.742 [DEBUG] [Thread-190726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:18:10.742 [DEBUG] [Thread-190726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:18:10.742 [DEBUG] [Thread-190726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:18:10.761 [INFO] [Thread-190726] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:18:10.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-14T19:18:10.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:18:11.584 [DEBUG] [Thread-190726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:18:11.584 [DEBUG] [Thread-190726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:18:11.633 [DEBUG] [Thread-190726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:18:11.633 [DEBUG] [Thread-190726] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:18:11.642 [DEBUG] [Thread-190726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:18:11.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:18: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')
2026-02-14T19:18:11.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-14T19:18:11.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:18:11.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:18:11.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:18:11.678 [DEBUG] [Thread-190726] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:18:19.869 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:18:19.870 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:18:22.197 [DEBUG] [Thread-190728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:18:37.246 [DEBUG] [Thread-190729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:18:38.338 [DEBUG] [Thread-190730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:18:41.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:18:41.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:18:41.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-14T19:18:43.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 18, 8), 11.13, 46.85, 0.0, 41.87, 12.95, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:18:43.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:18:08
2026-02-14T19:18:43.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:18:44.073 [DEBUG] [Thread-190731] [transport.py] [_log()] starting thread (client mode): 0xa2d6dde0
2026-02-14T19:18:44.073 [DEBUG] [Thread-190731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:18:44.092 [DEBUG] [Thread-190731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:18:44.093 [INFO] [Thread-190731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:18:44.096 [DEBUG] [Thread-190731] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:18:44.096 [DEBUG] [Thread-190731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:18:44.096 [DEBUG] [Thread-190731] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:18:44.096 [DEBUG] [Thread-190731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:18:44.096 [DEBUG] [Thread-190731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:18:44.096 [DEBUG] [Thread-190731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:18:44.096 [DEBUG] [Thread-190731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:18:44.096 [DEBUG] [Thread-190731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:18:44.096 [DEBUG] [Thread-190731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:18:44.096 [DEBUG] [Thread-190731] [transport.py] [_log()] client lang: <none>
2026-02-14T19:18:44.096 [DEBUG] [Thread-190731] [transport.py] [_log()] server lang: <none>
2026-02-14T19:18:44.097 [DEBUG] [Thread-190731] [transport.py] [_log()] kex follows: False
2026-02-14T19:18:44.097 [DEBUG] [Thread-190731] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:18:44.097 [DEBUG] [Thread-190731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:18:44.097 [DEBUG] [Thread-190731] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:18:44.097 [DEBUG] [Thread-190731] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:18:44.097 [DEBUG] [Thread-190731] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:18:44.097 [DEBUG] [Thread-190731] [transport.py] [_log()] Compression: none
2026-02-14T19:18:44.097 [DEBUG] [Thread-190731] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:18:44.107 [DEBUG] [Thread-190731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:18:44.107 [DEBUG] [Thread-190731] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:18:44.108 [DEBUG] [Thread-190731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:18:44.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:18:44.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:18:44.110 [DEBUG] [Thread-190731] [transport.py] [_log()] userauth is OK
2026-02-14T19:18:44.111 [DEBUG] [Thread-190731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:18:44.111 [DEBUG] [Thread-190731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:18:44.111 [DEBUG] [Thread-190731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:18:44.111 [DEBUG] [Thread-190731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:18:44.148 [INFO] [Thread-190731] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:18:44.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:18:44.716 [DEBUG] [Thread-190731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:18:44.716 [DEBUG] [Thread-190731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:18:44.717 [DEBUG] [Thread-190731] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:18:44.757 [DEBUG] [Thread-190731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:18:44.757 [DEBUG] [Thread-190731] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:18:44.761 [DEBUG] [Thread-190731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:18:44.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:18:44.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:18:44.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:18:44.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:18:44.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:18:44.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:18:44.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:18:44.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:18:44.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:18:44.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.720948 -999.00  +12.80  30.83     52   +3.30 1 1 2 1 1   886    0 8.59 -36.33 ----- 35.0 30.8 168.9 42.7 13.9 -26.7 13.9 -25.5 14.2 -25.1 14.5 -26.5
2026-02-14T19:18:44.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:18:44.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:18:44.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.720948
2026-02-14T19:18:44.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:18:44.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:18:44.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:18:44.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:18:44.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:18:44.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:18:08', tmtdew=11.13, humidity=46.85, cloud=0.0, wind=41.87, temperature=12.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:18:09.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:18:44.784 [DEBUG] [Thread-190731] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:18:44.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T19:18:44.880 [DEBUG] [Thread-190734] [transport.py] [_log()] starting thread (client mode): 0xa5771330
2026-02-14T19:18:44.880 [DEBUG] [Thread-190734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:18:44.894 [DEBUG] [Thread-190734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:18:44.894 [INFO] [Thread-190734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:18:44.902 [DEBUG] [Thread-190734] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:18:44.902 [DEBUG] [Thread-190734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:18:44.902 [DEBUG] [Thread-190734] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:18:44.902 [DEBUG] [Thread-190734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:18:44.902 [DEBUG] [Thread-190734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:18:44.902 [DEBUG] [Thread-190734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:18:44.902 [DEBUG] [Thread-190734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:18:44.903 [DEBUG] [Thread-190734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:18:44.903 [DEBUG] [Thread-190734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:18:44.903 [DEBUG] [Thread-190734] [transport.py] [_log()] client lang: <none>
2026-02-14T19:18:44.903 [DEBUG] [Thread-190734] [transport.py] [_log()] server lang: <none>
2026-02-14T19:18:44.903 [DEBUG] [Thread-190734] [transport.py] [_log()] kex follows: False
2026-02-14T19:18:44.903 [DEBUG] [Thread-190734] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:18:44.903 [DEBUG] [Thread-190734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:18:44.903 [DEBUG] [Thread-190734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:18:44.904 [DEBUG] [Thread-190734] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:18:44.904 [DEBUG] [Thread-190734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:18:44.904 [DEBUG] [Thread-190734] [transport.py] [_log()] Compression: none
2026-02-14T19:18:44.904 [DEBUG] [Thread-190734] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:18:44.959 [DEBUG] [Thread-190734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:18:44.960 [DEBUG] [Thread-190734] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:18:44.960 [DEBUG] [Thread-190734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:18:44.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:18:44.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:18:45.016 [DEBUG] [Thread-190734] [transport.py] [_log()] userauth is OK
2026-02-14T19:18:45.016 [DEBUG] [Thread-190734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:18:45.016 [DEBUG] [Thread-190734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:18:45.016 [DEBUG] [Thread-190734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:18:45.016 [DEBUG] [Thread-190734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:18:45.041 [INFO] [Thread-190734] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:18:45.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-14T19:18:45.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:18:45.852 [DEBUG] [Thread-190734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:18:45.852 [DEBUG] [Thread-190734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:18:45.900 [DEBUG] [Thread-190734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:18:45.901 [DEBUG] [Thread-190734] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:18:45.910 [DEBUG] [Thread-190734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:18:45.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:18:45.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-14T19:18:45.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-14T19:18:45.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:18:45.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:18:45.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:18:45.947 [DEBUG] [Thread-190734] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:18:52.281 [DEBUG] [Thread-190736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:19:07.340 [DEBUG] [Thread-190737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:19:15.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:19:15.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:19:15.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-14T19:19:17.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 18, 43), 11.06, 46.93, 0.0, 38.99, 12.95, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:19:17.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:18:43
2026-02-14T19:19:18.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:19:18.387 [DEBUG] [Thread-190738] [transport.py] [_log()] starting thread (client mode): 0xa57725f0
2026-02-14T19:19:18.387 [DEBUG] [Thread-190738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:19:18.398 [DEBUG] [Thread-190738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:19:18.398 [INFO] [Thread-190738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:19:18.400 [DEBUG] [Thread-190738] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:19:18.400 [DEBUG] [Thread-190738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:19:18.400 [DEBUG] [Thread-190738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:19:18.400 [DEBUG] [Thread-190738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:19:18.400 [DEBUG] [Thread-190738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:19:18.400 [DEBUG] [Thread-190738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:19:18.400 [DEBUG] [Thread-190738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:19:18.400 [DEBUG] [Thread-190738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:19:18.400 [DEBUG] [Thread-190738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:19:18.400 [DEBUG] [Thread-190738] [transport.py] [_log()] client lang: <none>
2026-02-14T19:19:18.400 [DEBUG] [Thread-190738] [transport.py] [_log()] server lang: <none>
2026-02-14T19:19:18.400 [DEBUG] [Thread-190738] [transport.py] [_log()] kex follows: False
2026-02-14T19:19:18.400 [DEBUG] [Thread-190738] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:19:18.400 [DEBUG] [Thread-190738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:19:18.400 [DEBUG] [Thread-190738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:19:18.400 [DEBUG] [Thread-190738] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:19:18.401 [DEBUG] [Thread-190738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:19:18.401 [DEBUG] [Thread-190738] [transport.py] [_log()] Compression: none
2026-02-14T19:19:18.401 [DEBUG] [Thread-190738] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:19:18.415 [DEBUG] [Thread-190738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:19:18.416 [DEBUG] [Thread-190738] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:19:18.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:19:18.417 [DEBUG] [Thread-190738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:19:18.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:19:18.419 [DEBUG] [Thread-190738] [transport.py] [_log()] userauth is OK
2026-02-14T19:19:18.419 [DEBUG] [Thread-190738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:19:18.419 [DEBUG] [Thread-190738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:19:18.419 [DEBUG] [Thread-190738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:19:18.419 [DEBUG] [Thread-190738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:19:18.447 [INFO] [Thread-190738] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:19:18.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:19:19.070 [DEBUG] [Thread-190738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:19:19.070 [DEBUG] [Thread-190738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:19:19.071 [DEBUG] [Thread-190738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:19:19.111 [DEBUG] [Thread-190738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:19:19.112 [DEBUG] [Thread-190738] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:19:19.115 [DEBUG] [Thread-190738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:19:19.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:19:19.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:19:19.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:19:19.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:19:19.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:19:19.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:19:19.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:19:19.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:19:19.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:19:19.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.721643 -999.00  +12.80  23.44     52   +3.40 1 1 1 1 1   885    0 8.59 -36.85 ----- 22.4 23.4 161.4 35.6 13.9 -26.5 13.9 -25.4 14.1 -24.8 14.5 -26.4
2026-02-14T19:19:19.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:19:19.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:19:19.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.721643
2026-02-14T19:19:19.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:19:19.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:19:19.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:19:19.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:19:19.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:19:19.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:18:43', tmtdew=11.06, humidity=46.93, cloud=0.0, wind=38.99, temperature=12.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:19:09.955', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:19:19.144 [DEBUG] [Thread-190738] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:19:19.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T19:19:19.240 [DEBUG] [Thread-190741] [transport.py] [_log()] starting thread (client mode): 0xa57d4970
2026-02-14T19:19:19.240 [DEBUG] [Thread-190741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:19:19.255 [DEBUG] [Thread-190741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:19:19.255 [INFO] [Thread-190741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:19:19.263 [DEBUG] [Thread-190741] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:19:19.263 [DEBUG] [Thread-190741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:19:19.263 [DEBUG] [Thread-190741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:19:19.263 [DEBUG] [Thread-190741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:19:19.263 [DEBUG] [Thread-190741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:19:19.263 [DEBUG] [Thread-190741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:19:19.263 [DEBUG] [Thread-190741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:19:19.263 [DEBUG] [Thread-190741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:19:19.263 [DEBUG] [Thread-190741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:19:19.263 [DEBUG] [Thread-190741] [transport.py] [_log()] client lang: <none>
2026-02-14T19:19:19.264 [DEBUG] [Thread-190741] [transport.py] [_log()] server lang: <none>
2026-02-14T19:19:19.264 [DEBUG] [Thread-190741] [transport.py] [_log()] kex follows: False
2026-02-14T19:19:19.264 [DEBUG] [Thread-190741] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:19:19.264 [DEBUG] [Thread-190741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:19:19.264 [DEBUG] [Thread-190741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:19:19.264 [DEBUG] [Thread-190741] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:19:19.264 [DEBUG] [Thread-190741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:19:19.264 [DEBUG] [Thread-190741] [transport.py] [_log()] Compression: none
2026-02-14T19:19:19.264 [DEBUG] [Thread-190741] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:19:19.322 [DEBUG] [Thread-190741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:19:19.322 [DEBUG] [Thread-190741] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:19:19.323 [DEBUG] [Thread-190741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:19:19.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:19:19.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:19:19.378 [DEBUG] [Thread-190741] [transport.py] [_log()] userauth is OK
2026-02-14T19:19:19.379 [DEBUG] [Thread-190741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:19:19.379 [DEBUG] [Thread-190741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:19:19.379 [DEBUG] [Thread-190741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:19:19.379 [DEBUG] [Thread-190741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:19:19.399 [INFO] [Thread-190741] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:19:19.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-14T19:19:19.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:19:20.011 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:19:20.012 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:19:20.239 [DEBUG] [Thread-190741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:19:20.240 [DEBUG] [Thread-190741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:19:20.287 [DEBUG] [Thread-190741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:19:20.288 [DEBUG] [Thread-190741] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:19:20.297 [DEBUG] [Thread-190741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:19:20.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:19:20.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-14T19:19:20.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-14T19:19:20.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:19:20.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:19:20.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:19:20.333 [DEBUG] [Thread-190741] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:19:22.378 [DEBUG] [Thread-190743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:19:37.430 [DEBUG] [Thread-190744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:19:38.373 [DEBUG] [Thread-190745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:19:50.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:19:50.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:19:50.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-14T19:19:52.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 19, 18), 11.05, 46.93, 0.0, 37.35, 12.88, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:19:52.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:19:18
2026-02-14T19:19:52.467 [DEBUG] [Thread-190746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:19:52.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:19:52.983 [DEBUG] [Thread-190747] [transport.py] [_log()] starting thread (client mode): 0xa2d7a8f0
2026-02-14T19:19:52.983 [DEBUG] [Thread-190747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:19:52.998 [DEBUG] [Thread-190747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:19:52.998 [INFO] [Thread-190747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:19:53.000 [DEBUG] [Thread-190747] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:19:53.000 [DEBUG] [Thread-190747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:19:53.000 [DEBUG] [Thread-190747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:19:53.001 [DEBUG] [Thread-190747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:19:53.001 [DEBUG] [Thread-190747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:19:53.001 [DEBUG] [Thread-190747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:19:53.001 [DEBUG] [Thread-190747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:19:53.001 [DEBUG] [Thread-190747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:19:53.001 [DEBUG] [Thread-190747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:19:53.001 [DEBUG] [Thread-190747] [transport.py] [_log()] client lang: <none>
2026-02-14T19:19:53.001 [DEBUG] [Thread-190747] [transport.py] [_log()] server lang: <none>
2026-02-14T19:19:53.001 [DEBUG] [Thread-190747] [transport.py] [_log()] kex follows: False
2026-02-14T19:19:53.001 [DEBUG] [Thread-190747] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:19:53.001 [DEBUG] [Thread-190747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:19:53.001 [DEBUG] [Thread-190747] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:19:53.001 [DEBUG] [Thread-190747] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:19:53.001 [DEBUG] [Thread-190747] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:19:53.001 [DEBUG] [Thread-190747] [transport.py] [_log()] Compression: none
2026-02-14T19:19:53.001 [DEBUG] [Thread-190747] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:19:53.014 [DEBUG] [Thread-190747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:19:53.015 [DEBUG] [Thread-190747] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:19:53.015 [DEBUG] [Thread-190747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:19:53.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:19:53.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:19:53.017 [DEBUG] [Thread-190747] [transport.py] [_log()] userauth is OK
2026-02-14T19:19:53.017 [DEBUG] [Thread-190747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:19:53.017 [DEBUG] [Thread-190747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:19:53.017 [DEBUG] [Thread-190747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:19:53.017 [DEBUG] [Thread-190747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:19:53.033 [INFO] [Thread-190747] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:19:53.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:19:53.683 [DEBUG] [Thread-190747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:19:53.683 [DEBUG] [Thread-190747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:19:53.684 [DEBUG] [Thread-190747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:19:53.724 [DEBUG] [Thread-190747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:19:53.724 [DEBUG] [Thread-190747] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:19:53.727 [DEBUG] [Thread-190747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:19:53.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:19:53.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:19:53.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:19:53.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:19:53.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:19:53.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:19:53.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:19:53.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:19:53.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:19:53.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.721990 -999.00  +12.80  23.00     52   +3.40 1 1 1 1 1   885    0 8.76 -35.23 ----- 26.4 23.0 160.1 38.1 13.9 -26.5 13.9 -25.3 14.1 -24.8 14.4 -26.2
2026-02-14T19:19:53.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:19:53.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:19:53.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.721990
2026-02-14T19:19:53.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:19:53.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:19:53.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:19:53.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:19:53.753 [DEBUG] [Thread-190747] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:19:53.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:19:53.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:19:18', tmtdew=11.05, humidity=46.93, cloud=0.0, wind=37.35, temperature=12.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:19:39.936', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:19:53.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-14T19:19:53.850 [DEBUG] [Thread-190750] [transport.py] [_log()] starting thread (client mode): 0xa2d7b4f0
2026-02-14T19:19:53.850 [DEBUG] [Thread-190750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:19:53.863 [DEBUG] [Thread-190750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:19:53.863 [INFO] [Thread-190750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:19:53.870 [DEBUG] [Thread-190750] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:19:53.871 [DEBUG] [Thread-190750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:19:53.871 [DEBUG] [Thread-190750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:19:53.871 [DEBUG] [Thread-190750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:19:53.871 [DEBUG] [Thread-190750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:19:53.871 [DEBUG] [Thread-190750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:19:53.871 [DEBUG] [Thread-190750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:19:53.871 [DEBUG] [Thread-190750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:19:53.871 [DEBUG] [Thread-190750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:19:53.871 [DEBUG] [Thread-190750] [transport.py] [_log()] client lang: <none>
2026-02-14T19:19:53.871 [DEBUG] [Thread-190750] [transport.py] [_log()] server lang: <none>
2026-02-14T19:19:53.871 [DEBUG] [Thread-190750] [transport.py] [_log()] kex follows: False
2026-02-14T19:19:53.871 [DEBUG] [Thread-190750] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:19:53.871 [DEBUG] [Thread-190750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:19:53.871 [DEBUG] [Thread-190750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:19:53.871 [DEBUG] [Thread-190750] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:19:53.871 [DEBUG] [Thread-190750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:19:53.871 [DEBUG] [Thread-190750] [transport.py] [_log()] Compression: none
2026-02-14T19:19:53.871 [DEBUG] [Thread-190750] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:19:53.933 [DEBUG] [Thread-190750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:19:53.934 [DEBUG] [Thread-190750] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:19:53.934 [DEBUG] [Thread-190750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:19:53.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:19:53.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:19:53.989 [DEBUG] [Thread-190750] [transport.py] [_log()] userauth is OK
2026-02-14T19:19:53.990 [DEBUG] [Thread-190750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:19:53.990 [DEBUG] [Thread-190750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:19:53.990 [DEBUG] [Thread-190750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:19:53.990 [DEBUG] [Thread-190750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:19:54.010 [INFO] [Thread-190750] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:19:54.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T19:19:54.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:19:54.836 [DEBUG] [Thread-190750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:19:54.836 [DEBUG] [Thread-190750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:19:54.884 [DEBUG] [Thread-190750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:19:54.884 [DEBUG] [Thread-190750] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:19:54.894 [DEBUG] [Thread-190750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:19:54.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:19:54.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:19:54.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:19:54.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:19:54.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:19:54.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:19:54.931 [DEBUG] [Thread-190750] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:20:07.505 [DEBUG] [Thread-190752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:20:20.152 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:20:20.153 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:20:22.557 [DEBUG] [Thread-190753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:20:24.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:20:24.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:20:24.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-14T19:20:26.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 19, 54), 10.98, 47.03, 0.0, 36.56, 12.93, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:20:26.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:19:54
2026-02-14T19:20:27.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:20:27.377 [DEBUG] [Thread-190754] [transport.py] [_log()] starting thread (client mode): 0xa57e06a0
2026-02-14T19:20:27.377 [DEBUG] [Thread-190754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:20:27.396 [DEBUG] [Thread-190754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:20:27.396 [INFO] [Thread-190754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:20:27.399 [DEBUG] [Thread-190754] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:20:27.399 [DEBUG] [Thread-190754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:20:27.399 [DEBUG] [Thread-190754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:20:27.399 [DEBUG] [Thread-190754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:20:27.399 [DEBUG] [Thread-190754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:20:27.399 [DEBUG] [Thread-190754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:20:27.399 [DEBUG] [Thread-190754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:20:27.399 [DEBUG] [Thread-190754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:20:27.399 [DEBUG] [Thread-190754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:20:27.399 [DEBUG] [Thread-190754] [transport.py] [_log()] client lang: <none>
2026-02-14T19:20:27.399 [DEBUG] [Thread-190754] [transport.py] [_log()] server lang: <none>
2026-02-14T19:20:27.399 [DEBUG] [Thread-190754] [transport.py] [_log()] kex follows: False
2026-02-14T19:20:27.399 [DEBUG] [Thread-190754] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:20:27.399 [DEBUG] [Thread-190754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:20:27.399 [DEBUG] [Thread-190754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:20:27.399 [DEBUG] [Thread-190754] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:20:27.399 [DEBUG] [Thread-190754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:20:27.400 [DEBUG] [Thread-190754] [transport.py] [_log()] Compression: none
2026-02-14T19:20:27.400 [DEBUG] [Thread-190754] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:20:27.416 [DEBUG] [Thread-190754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:20:27.417 [DEBUG] [Thread-190754] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:20:27.417 [DEBUG] [Thread-190754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:20:27.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:20:27.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:20:27.419 [DEBUG] [Thread-190754] [transport.py] [_log()] userauth is OK
2026-02-14T19:20:27.419 [DEBUG] [Thread-190754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:20:27.419 [DEBUG] [Thread-190754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:20:27.419 [DEBUG] [Thread-190754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:20:27.419 [DEBUG] [Thread-190754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:20:27.443 [INFO] [Thread-190754] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:20:27.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:20:28.086 [DEBUG] [Thread-190754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:20:28.086 [DEBUG] [Thread-190754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:20:28.087 [DEBUG] [Thread-190754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:20:28.127 [DEBUG] [Thread-190754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:20:28.127 [DEBUG] [Thread-190754] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:20:28.129 [DEBUG] [Thread-190754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:20:28.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:20:28.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:20:28.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:20:28.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:20:28.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:20:28.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:20:28.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:20:28.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:20:28.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:20:28.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.722337 -999.00  +12.80  30.01     52   +3.40 1 1 2 1 1   885    0 8.87 -35.89 ----- 25.6 30.0 171.7 34.6 13.9 -26.4 13.8 -25.7 14.1 -25.0 14.4 -26.3
2026-02-14T19:20:28.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:20:28.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:20:28.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.722337
2026-02-14T19:20:28.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:20:28.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:20:28.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:20:28.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:20:28.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:20:28.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:19:54', tmtdew=10.98, humidity=47.03, cloud=0.0, wind=36.56, temperature=12.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:20:09.917', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:20:28.154 [DEBUG] [Thread-190754] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:20:28.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T19:20:28.253 [DEBUG] [Thread-190757] [transport.py] [_log()] starting thread (client mode): 0xa2d7bc10
2026-02-14T19:20:28.253 [DEBUG] [Thread-190757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:20:28.268 [DEBUG] [Thread-190757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:20:28.268 [INFO] [Thread-190757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:20:28.276 [DEBUG] [Thread-190757] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:20:28.277 [DEBUG] [Thread-190757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:20:28.277 [DEBUG] [Thread-190757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:20:28.277 [DEBUG] [Thread-190757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:20:28.277 [DEBUG] [Thread-190757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:20:28.277 [DEBUG] [Thread-190757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:20:28.277 [DEBUG] [Thread-190757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:20:28.277 [DEBUG] [Thread-190757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:20:28.277 [DEBUG] [Thread-190757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:20:28.277 [DEBUG] [Thread-190757] [transport.py] [_log()] client lang: <none>
2026-02-14T19:20:28.278 [DEBUG] [Thread-190757] [transport.py] [_log()] server lang: <none>
2026-02-14T19:20:28.278 [DEBUG] [Thread-190757] [transport.py] [_log()] kex follows: False
2026-02-14T19:20:28.278 [DEBUG] [Thread-190757] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:20:28.278 [DEBUG] [Thread-190757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:20:28.278 [DEBUG] [Thread-190757] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:20:28.278 [DEBUG] [Thread-190757] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:20:28.278 [DEBUG] [Thread-190757] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:20:28.278 [DEBUG] [Thread-190757] [transport.py] [_log()] Compression: none
2026-02-14T19:20:28.279 [DEBUG] [Thread-190757] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:20:28.332 [DEBUG] [Thread-190757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:20:28.333 [DEBUG] [Thread-190757] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:20:28.333 [DEBUG] [Thread-190757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:20:28.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:20:28.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:20:28.388 [DEBUG] [Thread-190757] [transport.py] [_log()] userauth is OK
2026-02-14T19:20:28.388 [DEBUG] [Thread-190757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:20:28.388 [DEBUG] [Thread-190757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:20:28.388 [DEBUG] [Thread-190757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:20:28.388 [DEBUG] [Thread-190757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:20:28.406 [INFO] [Thread-190757] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:20:28.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-14T19:20:28.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:20:29.223 [DEBUG] [Thread-190757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:20:29.223 [DEBUG] [Thread-190757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:20:29.271 [DEBUG] [Thread-190757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:20:29.272 [DEBUG] [Thread-190757] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:20:29.284 [DEBUG] [Thread-190757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:20:29.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:20:29.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-14T19:20:29.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:20:29.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:20:29.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:20:29.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:20:29.318 [DEBUG] [Thread-190757] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:20:37.588 [DEBUG] [Thread-190759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:20:38.406 [DEBUG] [Thread-190760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:20:52.644 [DEBUG] [Thread-190761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:20:59.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:20:59.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:20:59.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-14T19:21:01.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 20, 29), 10.99, 46.98, 0.0, 38.08, 12.95, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:21:01.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:20:29
2026-02-14T19:21:01.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:21:01.874 [DEBUG] [Thread-190762] [transport.py] [_log()] starting thread (client mode): 0xa2d797b0
2026-02-14T19:21:01.874 [DEBUG] [Thread-190762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:21:01.894 [DEBUG] [Thread-190762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:21:01.894 [INFO] [Thread-190762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:21:01.897 [DEBUG] [Thread-190762] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:21:01.898 [DEBUG] [Thread-190762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:21:01.898 [DEBUG] [Thread-190762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:21:01.898 [DEBUG] [Thread-190762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:21:01.898 [DEBUG] [Thread-190762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:21:01.898 [DEBUG] [Thread-190762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:21:01.898 [DEBUG] [Thread-190762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:21:01.898 [DEBUG] [Thread-190762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:21:01.898 [DEBUG] [Thread-190762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:21:01.898 [DEBUG] [Thread-190762] [transport.py] [_log()] client lang: <none>
2026-02-14T19:21:01.898 [DEBUG] [Thread-190762] [transport.py] [_log()] server lang: <none>
2026-02-14T19:21:01.898 [DEBUG] [Thread-190762] [transport.py] [_log()] kex follows: False
2026-02-14T19:21:01.899 [DEBUG] [Thread-190762] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:21:01.899 [DEBUG] [Thread-190762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:21:01.899 [DEBUG] [Thread-190762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:21:01.899 [DEBUG] [Thread-190762] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:21:01.899 [DEBUG] [Thread-190762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:21:01.899 [DEBUG] [Thread-190762] [transport.py] [_log()] Compression: none
2026-02-14T19:21:01.899 [DEBUG] [Thread-190762] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:21:01.916 [DEBUG] [Thread-190762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:21:01.916 [DEBUG] [Thread-190762] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:21:01.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:21:01.917 [DEBUG] [Thread-190762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:21:01.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:21:01.919 [DEBUG] [Thread-190762] [transport.py] [_log()] userauth is OK
2026-02-14T19:21:01.920 [DEBUG] [Thread-190762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:21:01.920 [DEBUG] [Thread-190762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:21:01.920 [DEBUG] [Thread-190762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:21:01.920 [DEBUG] [Thread-190762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:21:01.944 [INFO] [Thread-190762] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:21:01.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:21:02.594 [DEBUG] [Thread-190762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:21:02.595 [DEBUG] [Thread-190762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:21:02.595 [DEBUG] [Thread-190762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:21:02.635 [DEBUG] [Thread-190762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:21:02.636 [DEBUG] [Thread-190762] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:21:02.639 [DEBUG] [Thread-190762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:21:02.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:21:02.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:21:02.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:21:02.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:21:02.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:21:02.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:21:02.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:21:02.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:21:02.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:21:02.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.722685 -999.00  +12.80  32.22     52   +3.40 1 1 2 1 1   885    0 8.93 -33.94 ----- 24.2 32.2 174.0 34.8 13.9 -26.4 -999.0 -999.0 14.0 -24.7 14.3 -26.1
2026-02-14T19:21:02.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:21:02.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:21:02.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.722685
2026-02-14T19:21:02.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:21:02.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:21:02.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:21:02.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:21:02.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:21:02.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:20:29', tmtdew=10.99, humidity=46.98, cloud=0.0, wind=38.08, temperature=12.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:20:39.984', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:21:02.665 [DEBUG] [Thread-190762] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:21:02.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-14T19:21:02.770 [DEBUG] [Thread-190765] [transport.py] [_log()] starting thread (client mode): 0xa57d6fb0
2026-02-14T19:21:02.771 [DEBUG] [Thread-190765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:21:02.787 [DEBUG] [Thread-190765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:21:02.788 [INFO] [Thread-190765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:21:02.795 [DEBUG] [Thread-190765] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:21:02.796 [DEBUG] [Thread-190765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:21:02.796 [DEBUG] [Thread-190765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:21:02.796 [DEBUG] [Thread-190765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:21:02.796 [DEBUG] [Thread-190765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:21:02.796 [DEBUG] [Thread-190765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:21:02.796 [DEBUG] [Thread-190765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:21:02.797 [DEBUG] [Thread-190765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:21:02.797 [DEBUG] [Thread-190765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:21:02.797 [DEBUG] [Thread-190765] [transport.py] [_log()] client lang: <none>
2026-02-14T19:21:02.797 [DEBUG] [Thread-190765] [transport.py] [_log()] server lang: <none>
2026-02-14T19:21:02.797 [DEBUG] [Thread-190765] [transport.py] [_log()] kex follows: False
2026-02-14T19:21:02.797 [DEBUG] [Thread-190765] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:21:02.797 [DEBUG] [Thread-190765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:21:02.797 [DEBUG] [Thread-190765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:21:02.798 [DEBUG] [Thread-190765] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:21:02.798 [DEBUG] [Thread-190765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:21:02.798 [DEBUG] [Thread-190765] [transport.py] [_log()] Compression: none
2026-02-14T19:21:02.798 [DEBUG] [Thread-190765] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:21:02.856 [DEBUG] [Thread-190765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:21:02.857 [DEBUG] [Thread-190765] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:21:02.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:21:02.858 [DEBUG] [Thread-190765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:21:02.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:21:02.916 [DEBUG] [Thread-190765] [transport.py] [_log()] userauth is OK
2026-02-14T19:21:02.916 [DEBUG] [Thread-190765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:21:02.916 [DEBUG] [Thread-190765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:21:02.916 [DEBUG] [Thread-190765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:21:02.916 [DEBUG] [Thread-190765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:21:02.939 [INFO] [Thread-190765] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:21:02.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-14T19:21:02.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:21:03.831 [DEBUG] [Thread-190765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:21:03.831 [DEBUG] [Thread-190765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:21:03.879 [DEBUG] [Thread-190765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:21:03.879 [DEBUG] [Thread-190765] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:21:03.888 [DEBUG] [Thread-190765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:21:03.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:21:03.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:21:03.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:21:03.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:21:03.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:21:03.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:21:03.923 [DEBUG] [Thread-190765] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:21:07.681 [DEBUG] [Thread-190767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:21:20.295 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:21:20.296 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:21:22.732 [DEBUG] [Thread-190768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:21:33.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:21:33.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:21:33.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-14T19:21:36.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 21, 4), 10.98, 47.01, 0.0, 42.75, 12.95, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:21:36.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:21:04
2026-02-14T19:21:36.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:21:36.552 [DEBUG] [Thread-190769] [transport.py] [_log()] starting thread (client mode): 0xa2d02ef0
2026-02-14T19:21:36.553 [DEBUG] [Thread-190769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:21:36.572 [DEBUG] [Thread-190769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:21:36.572 [INFO] [Thread-190769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:21:36.576 [DEBUG] [Thread-190769] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:21:36.576 [DEBUG] [Thread-190769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:21:36.576 [DEBUG] [Thread-190769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:21:36.576 [DEBUG] [Thread-190769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:21:36.576 [DEBUG] [Thread-190769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:21:36.576 [DEBUG] [Thread-190769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:21:36.576 [DEBUG] [Thread-190769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:21:36.576 [DEBUG] [Thread-190769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:21:36.576 [DEBUG] [Thread-190769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:21:36.576 [DEBUG] [Thread-190769] [transport.py] [_log()] client lang: <none>
2026-02-14T19:21:36.577 [DEBUG] [Thread-190769] [transport.py] [_log()] server lang: <none>
2026-02-14T19:21:36.577 [DEBUG] [Thread-190769] [transport.py] [_log()] kex follows: False
2026-02-14T19:21:36.577 [DEBUG] [Thread-190769] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:21:36.577 [DEBUG] [Thread-190769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:21:36.577 [DEBUG] [Thread-190769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:21:36.577 [DEBUG] [Thread-190769] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:21:36.577 [DEBUG] [Thread-190769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:21:36.577 [DEBUG] [Thread-190769] [transport.py] [_log()] Compression: none
2026-02-14T19:21:36.577 [DEBUG] [Thread-190769] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:21:36.597 [DEBUG] [Thread-190769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:21:36.597 [DEBUG] [Thread-190769] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:21:36.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:21:36.598 [DEBUG] [Thread-190769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:21:36.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:21:36.601 [DEBUG] [Thread-190769] [transport.py] [_log()] userauth is OK
2026-02-14T19:21:36.601 [DEBUG] [Thread-190769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:21:36.601 [DEBUG] [Thread-190769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:21:36.601 [DEBUG] [Thread-190769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:21:36.601 [DEBUG] [Thread-190769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:21:36.626 [INFO] [Thread-190769] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:21:36.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:21:37.250 [DEBUG] [Thread-190769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:21:37.251 [DEBUG] [Thread-190769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:21:37.251 [DEBUG] [Thread-190769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:21:37.291 [DEBUG] [Thread-190769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:21:37.292 [DEBUG] [Thread-190769] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:21:37.295 [DEBUG] [Thread-190769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:21:37.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:21:37.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:21:37.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:21:37.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:21:37.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:21:37.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:21:37.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:21:37.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:21:37.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:21:37.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.723032 -999.00  +12.80  28.22     52   +3.40 1 1 1 1 1   884    0 8.89 -33.47 ----- 29.0 28.2 167.0 42.3 13.9 -26.3 13.8 -25.6 14.0 -24.9 14.3 -26.0
2026-02-14T19:21:37.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:21:37.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:21:37.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.723032
2026-02-14T19:21:37.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:21:37.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:21:37.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:21:37.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:21:37.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:21:37.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:21:04', tmtdew=10.98, humidity=47.01, cloud=0.0, wind=42.75, temperature=12.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:21:09.965', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:21:37.320 [DEBUG] [Thread-190769] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:21:37.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-14T19:21:37.416 [DEBUG] [Thread-190772] [transport.py] [_log()] starting thread (client mode): 0xa2d01180
2026-02-14T19:21:37.416 [DEBUG] [Thread-190772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:21:37.431 [DEBUG] [Thread-190772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:21:37.431 [INFO] [Thread-190772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:21:37.448 [DEBUG] [Thread-190772] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:21:37.448 [DEBUG] [Thread-190772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:21:37.448 [DEBUG] [Thread-190772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:21:37.449 [DEBUG] [Thread-190772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:21:37.449 [DEBUG] [Thread-190772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:21:37.449 [DEBUG] [Thread-190772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:21:37.449 [DEBUG] [Thread-190772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:21:37.449 [DEBUG] [Thread-190772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:21:37.449 [DEBUG] [Thread-190772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:21:37.449 [DEBUG] [Thread-190772] [transport.py] [_log()] client lang: <none>
2026-02-14T19:21:37.449 [DEBUG] [Thread-190772] [transport.py] [_log()] server lang: <none>
2026-02-14T19:21:37.449 [DEBUG] [Thread-190772] [transport.py] [_log()] kex follows: False
2026-02-14T19:21:37.449 [DEBUG] [Thread-190772] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:21:37.449 [DEBUG] [Thread-190772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:21:37.449 [DEBUG] [Thread-190772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:21:37.450 [DEBUG] [Thread-190772] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:21:37.450 [DEBUG] [Thread-190772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:21:37.450 [DEBUG] [Thread-190772] [transport.py] [_log()] Compression: none
2026-02-14T19:21:37.450 [DEBUG] [Thread-190772] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:21:37.498 [DEBUG] [Thread-190772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:21:37.499 [DEBUG] [Thread-190772] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:21:37.500 [DEBUG] [Thread-190772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:21:37.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:21:37.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:21:37.555 [DEBUG] [Thread-190772] [transport.py] [_log()] userauth is OK
2026-02-14T19:21:37.555 [DEBUG] [Thread-190772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:21:37.555 [DEBUG] [Thread-190772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:21:37.555 [DEBUG] [Thread-190772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:21:37.555 [DEBUG] [Thread-190772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:21:37.573 [INFO] [Thread-190772] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:21:37.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T19:21:37.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:21:37.781 [DEBUG] [Thread-190774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:21:38.374 [DEBUG] [Thread-190772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:21:38.374 [DEBUG] [Thread-190772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:21:38.422 [DEBUG] [Thread-190772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:21:38.422 [DEBUG] [Thread-190772] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:21:38.430 [DEBUG] [Thread-190772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:21:38.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:21:38.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-14T19:21:38.440 [DEBUG] [Thread-190775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:21:38.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-14T19:21:38.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:21:38.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:21:38.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:21:38.464 [DEBUG] [Thread-190772] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:21:52.831 [DEBUG] [Thread-190776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:22:07.867 [DEBUG] [Thread-190777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:22:08.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:22:08.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:22:08.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-14T19:22:10.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 21, 39), 11.33, 46.16, 0.0, 40.54, 13.43, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:22:10.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:21:39
2026-02-14T19:22:10.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:22:10.878 [DEBUG] [Thread-190778] [transport.py] [_log()] starting thread (client mode): 0xa2d01ab0
2026-02-14T19:22:10.878 [DEBUG] [Thread-190778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:22:10.897 [DEBUG] [Thread-190778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:22:10.898 [INFO] [Thread-190778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:22:10.900 [DEBUG] [Thread-190778] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:22:10.900 [DEBUG] [Thread-190778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:22:10.900 [DEBUG] [Thread-190778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:22:10.900 [DEBUG] [Thread-190778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:22:10.901 [DEBUG] [Thread-190778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:22:10.901 [DEBUG] [Thread-190778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:22:10.901 [DEBUG] [Thread-190778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:22:10.901 [DEBUG] [Thread-190778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:22:10.901 [DEBUG] [Thread-190778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:22:10.901 [DEBUG] [Thread-190778] [transport.py] [_log()] client lang: <none>
2026-02-14T19:22:10.901 [DEBUG] [Thread-190778] [transport.py] [_log()] server lang: <none>
2026-02-14T19:22:10.901 [DEBUG] [Thread-190778] [transport.py] [_log()] kex follows: False
2026-02-14T19:22:10.901 [DEBUG] [Thread-190778] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:22:10.901 [DEBUG] [Thread-190778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:22:10.901 [DEBUG] [Thread-190778] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:22:10.901 [DEBUG] [Thread-190778] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:22:10.901 [DEBUG] [Thread-190778] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:22:10.901 [DEBUG] [Thread-190778] [transport.py] [_log()] Compression: none
2026-02-14T19:22:10.901 [DEBUG] [Thread-190778] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:22:10.915 [DEBUG] [Thread-190778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:22:10.916 [DEBUG] [Thread-190778] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:22:10.916 [DEBUG] [Thread-190778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:22:10.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:22:10.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:22:10.918 [DEBUG] [Thread-190778] [transport.py] [_log()] userauth is OK
2026-02-14T19:22:10.918 [DEBUG] [Thread-190778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:22:10.918 [DEBUG] [Thread-190778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:22:10.918 [DEBUG] [Thread-190778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:22:10.918 [DEBUG] [Thread-190778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:22:10.949 [INFO] [Thread-190778] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:22:10.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:22:11.589 [DEBUG] [Thread-190778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:22:11.589 [DEBUG] [Thread-190778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:22:11.589 [DEBUG] [Thread-190778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:22:11.630 [DEBUG] [Thread-190778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:22:11.630 [DEBUG] [Thread-190778] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:22:11.633 [DEBUG] [Thread-190778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:22:11.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:22:11.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:22:11.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:22:11.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:22:11.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:22:11.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:22:11.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:22:11.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:22:11.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:22:11.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.723379 -999.00  +12.80  33.17     52   +3.40 1 1 2 1 1   884    0 8.74 -31.97 ----- 33.5 33.2 163.6 42.6 13.8 -26.6 13.8 -25.7 13.9 -24.7 14.3 -26.2
2026-02-14T19:22:11.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:22:11.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:22:11.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.723379
2026-02-14T19:22:11.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:22:11.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:22:11.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:22:11.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:22:11.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:22:11.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:21:39', tmtdew=11.33, humidity=46.16, cloud=0.0, wind=40.54, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:21:39.946', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:22:11.658 [DEBUG] [Thread-190778] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:22:11.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-14T19:22:11.754 [DEBUG] [Thread-190781] [transport.py] [_log()] starting thread (client mode): 0xa5741180
2026-02-14T19:22:11.754 [DEBUG] [Thread-190781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:22:11.768 [DEBUG] [Thread-190781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:22:11.769 [INFO] [Thread-190781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:22:11.776 [DEBUG] [Thread-190781] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:22:11.776 [DEBUG] [Thread-190781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:22:11.777 [DEBUG] [Thread-190781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:22:11.777 [DEBUG] [Thread-190781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:22:11.777 [DEBUG] [Thread-190781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:22:11.777 [DEBUG] [Thread-190781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:22:11.777 [DEBUG] [Thread-190781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:22:11.777 [DEBUG] [Thread-190781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:22:11.777 [DEBUG] [Thread-190781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:22:11.777 [DEBUG] [Thread-190781] [transport.py] [_log()] client lang: <none>
2026-02-14T19:22:11.777 [DEBUG] [Thread-190781] [transport.py] [_log()] server lang: <none>
2026-02-14T19:22:11.777 [DEBUG] [Thread-190781] [transport.py] [_log()] kex follows: False
2026-02-14T19:22:11.777 [DEBUG] [Thread-190781] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:22:11.777 [DEBUG] [Thread-190781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:22:11.777 [DEBUG] [Thread-190781] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:22:11.777 [DEBUG] [Thread-190781] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:22:11.777 [DEBUG] [Thread-190781] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:22:11.777 [DEBUG] [Thread-190781] [transport.py] [_log()] Compression: none
2026-02-14T19:22:11.777 [DEBUG] [Thread-190781] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:22:11.834 [DEBUG] [Thread-190781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:22:11.835 [DEBUG] [Thread-190781] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:22:11.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:22:11.836 [DEBUG] [Thread-190781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:22:11.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:22:11.890 [DEBUG] [Thread-190781] [transport.py] [_log()] userauth is OK
2026-02-14T19:22:11.891 [DEBUG] [Thread-190781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:22:11.891 [DEBUG] [Thread-190781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:22:11.891 [DEBUG] [Thread-190781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:22:11.891 [DEBUG] [Thread-190781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:22:11.913 [INFO] [Thread-190781] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:22:11.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-14T19:22:11.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:22:12.758 [DEBUG] [Thread-190781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:22:12.759 [DEBUG] [Thread-190781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:22:12.806 [DEBUG] [Thread-190781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:22:12.806 [DEBUG] [Thread-190781] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:22:12.815 [DEBUG] [Thread-190781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:22:12.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:22:12.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-14T19:22:12.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-14T19:22:12.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:22:12.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:22:12.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:22:12.850 [DEBUG] [Thread-190781] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:22:20.436 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:22:20.437 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:22:22.907 [DEBUG] [Thread-190783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:22:37.961 [DEBUG] [Thread-190784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:22:38.473 [DEBUG] [Thread-190785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:22:42.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:22:42.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:22:42.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-14T19:22:44.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 22, 15), 11.13, 47.01, 0.0, 37.07, 13.03, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:22:44.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:22:15
2026-02-14T19:22:45.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:22:45.307 [DEBUG] [Thread-190786] [transport.py] [_log()] starting thread (client mode): 0xa5742c80
2026-02-14T19:22:45.307 [DEBUG] [Thread-190786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:22:45.327 [DEBUG] [Thread-190786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:22:45.327 [INFO] [Thread-190786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:22:45.330 [DEBUG] [Thread-190786] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:22:45.330 [DEBUG] [Thread-190786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:22:45.330 [DEBUG] [Thread-190786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:22:45.331 [DEBUG] [Thread-190786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:22:45.331 [DEBUG] [Thread-190786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:22:45.331 [DEBUG] [Thread-190786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:22:45.331 [DEBUG] [Thread-190786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:22:45.331 [DEBUG] [Thread-190786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:22:45.331 [DEBUG] [Thread-190786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:22:45.331 [DEBUG] [Thread-190786] [transport.py] [_log()] client lang: <none>
2026-02-14T19:22:45.331 [DEBUG] [Thread-190786] [transport.py] [_log()] server lang: <none>
2026-02-14T19:22:45.331 [DEBUG] [Thread-190786] [transport.py] [_log()] kex follows: False
2026-02-14T19:22:45.331 [DEBUG] [Thread-190786] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:22:45.331 [DEBUG] [Thread-190786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:22:45.331 [DEBUG] [Thread-190786] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:22:45.331 [DEBUG] [Thread-190786] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:22:45.331 [DEBUG] [Thread-190786] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:22:45.332 [DEBUG] [Thread-190786] [transport.py] [_log()] Compression: none
2026-02-14T19:22:45.332 [DEBUG] [Thread-190786] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:22:45.349 [DEBUG] [Thread-190786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:22:45.350 [DEBUG] [Thread-190786] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:22:45.351 [DEBUG] [Thread-190786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:22:45.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:22:45.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:22:45.353 [DEBUG] [Thread-190786] [transport.py] [_log()] userauth is OK
2026-02-14T19:22:45.353 [DEBUG] [Thread-190786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:22:45.354 [DEBUG] [Thread-190786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:22:45.354 [DEBUG] [Thread-190786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:22:45.354 [DEBUG] [Thread-190786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:22:45.376 [INFO] [Thread-190786] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:22:45.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:22:45.985 [DEBUG] [Thread-190786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:22:45.985 [DEBUG] [Thread-190786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:22:45.986 [DEBUG] [Thread-190786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:22:46.026 [DEBUG] [Thread-190786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:22:46.026 [DEBUG] [Thread-190786] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:22:46.030 [DEBUG] [Thread-190786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:22:46.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:22:46.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:22:46.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:22:46.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:22:46.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:22:46.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:22:46.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:22:46.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:22:46.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:22:46.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.723726 -999.00  +12.70  33.02     52   +3.30 1 1 2 1 1   884    0 8.81 -32.01 ----- 32.6 33.0 161.2 41.5 13.8 -26.6 13.8 -25.4 13.9 -24.7 14.2 -26.1
2026-02-14T19:22:46.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:22:46.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:22:46.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.723726
2026-02-14T19:22:46.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:22:46.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:22:46.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:22:46.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:22:46.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:22:46.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:22:15', tmtdew=11.13, humidity=47.01, cloud=0.0, wind=37.07, temperature=13.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:22:09.926', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:22:46.055 [DEBUG] [Thread-190786] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:22:46.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T19:22:46.154 [DEBUG] [Thread-190789] [transport.py] [_log()] starting thread (client mode): 0xa5740b20
2026-02-14T19:22:46.154 [DEBUG] [Thread-190789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:22:46.168 [DEBUG] [Thread-190789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:22:46.168 [INFO] [Thread-190789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:22:46.175 [DEBUG] [Thread-190789] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:22:46.176 [DEBUG] [Thread-190789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:22:46.176 [DEBUG] [Thread-190789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:22:46.176 [DEBUG] [Thread-190789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:22:46.176 [DEBUG] [Thread-190789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:22:46.176 [DEBUG] [Thread-190789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:22:46.176 [DEBUG] [Thread-190789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:22:46.176 [DEBUG] [Thread-190789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:22:46.176 [DEBUG] [Thread-190789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:22:46.176 [DEBUG] [Thread-190789] [transport.py] [_log()] client lang: <none>
2026-02-14T19:22:46.176 [DEBUG] [Thread-190789] [transport.py] [_log()] server lang: <none>
2026-02-14T19:22:46.176 [DEBUG] [Thread-190789] [transport.py] [_log()] kex follows: False
2026-02-14T19:22:46.176 [DEBUG] [Thread-190789] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:22:46.176 [DEBUG] [Thread-190789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:22:46.176 [DEBUG] [Thread-190789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:22:46.176 [DEBUG] [Thread-190789] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:22:46.176 [DEBUG] [Thread-190789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:22:46.176 [DEBUG] [Thread-190789] [transport.py] [_log()] Compression: none
2026-02-14T19:22:46.176 [DEBUG] [Thread-190789] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:22:46.234 [DEBUG] [Thread-190789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:22:46.234 [DEBUG] [Thread-190789] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:22:46.235 [DEBUG] [Thread-190789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:22:46.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:22:46.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:22:46.289 [DEBUG] [Thread-190789] [transport.py] [_log()] userauth is OK
2026-02-14T19:22:46.289 [DEBUG] [Thread-190789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:22:46.289 [DEBUG] [Thread-190789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:22:46.290 [DEBUG] [Thread-190789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:22:46.290 [DEBUG] [Thread-190789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:22:46.309 [INFO] [Thread-190789] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:22:46.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-14T19:22:46.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:22:47.149 [DEBUG] [Thread-190789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:22:47.149 [DEBUG] [Thread-190789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:22:47.197 [DEBUG] [Thread-190789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:22:47.197 [DEBUG] [Thread-190789] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:22:47.211 [DEBUG] [Thread-190789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:22:47.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:22:47.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-14T19:22:47.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-14T19:22:47.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:22:47.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:22:47.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:22:47.252 [DEBUG] [Thread-190789] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:22:52.997 [DEBUG] [Thread-190791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:23:08.053 [DEBUG] [Thread-190792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:23:17.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:23:17.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:23:17.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-14T19:23:19.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 22, 50), 11.0, 47.11, 0.0, 42.63, 12.93, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:23:19.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:22:50
2026-02-14T19:23:19.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:23:19.811 [DEBUG] [Thread-190793] [transport.py] [_log()] starting thread (client mode): 0xa57419c0
2026-02-14T19:23:19.811 [DEBUG] [Thread-190793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:23:19.831 [DEBUG] [Thread-190793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:23:19.831 [INFO] [Thread-190793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:23:19.834 [DEBUG] [Thread-190793] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:23:19.834 [DEBUG] [Thread-190793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:23:19.835 [DEBUG] [Thread-190793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:23:19.835 [DEBUG] [Thread-190793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:23:19.835 [DEBUG] [Thread-190793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:23:19.835 [DEBUG] [Thread-190793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:23:19.835 [DEBUG] [Thread-190793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:23:19.835 [DEBUG] [Thread-190793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:23:19.835 [DEBUG] [Thread-190793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:23:19.835 [DEBUG] [Thread-190793] [transport.py] [_log()] client lang: <none>
2026-02-14T19:23:19.835 [DEBUG] [Thread-190793] [transport.py] [_log()] server lang: <none>
2026-02-14T19:23:19.835 [DEBUG] [Thread-190793] [transport.py] [_log()] kex follows: False
2026-02-14T19:23:19.835 [DEBUG] [Thread-190793] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:23:19.835 [DEBUG] [Thread-190793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:23:19.835 [DEBUG] [Thread-190793] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:23:19.835 [DEBUG] [Thread-190793] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:23:19.835 [DEBUG] [Thread-190793] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:23:19.835 [DEBUG] [Thread-190793] [transport.py] [_log()] Compression: none
2026-02-14T19:23:19.835 [DEBUG] [Thread-190793] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:23:19.853 [DEBUG] [Thread-190793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:23:19.853 [DEBUG] [Thread-190793] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:23:19.854 [DEBUG] [Thread-190793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:23:19.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:23:19.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:23:19.856 [DEBUG] [Thread-190793] [transport.py] [_log()] userauth is OK
2026-02-14T19:23:19.856 [DEBUG] [Thread-190793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:23:19.857 [DEBUG] [Thread-190793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:23:19.857 [DEBUG] [Thread-190793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:23:19.857 [DEBUG] [Thread-190793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:23:19.875 [INFO] [Thread-190793] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:23:19.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:23:20.483 [DEBUG] [Thread-190793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:23:20.484 [DEBUG] [Thread-190793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:23:20.484 [DEBUG] [Thread-190793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:23:20.524 [DEBUG] [Thread-190793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:23:20.525 [DEBUG] [Thread-190793] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:23:20.528 [DEBUG] [Thread-190793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:23:20.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:23:20.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:23:20.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:23:20.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:23:20.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:23:20.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:23:20.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:23:20.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:23:20.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:23:20.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.724073 -999.00  +12.70  30.96     53   +3.30 1 1 2 1 1   883    0 8.76 -32.95 ----- 32.5 31.0 168.4 39.7 13.8 -26.5 13.7 -25.4 13.8 -24.6 14.2 -26.0
2026-02-14T19:23:20.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:23:20.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:23:20.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.724073
2026-02-14T19:23:20.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:23:20.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:23:20.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:23:20.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:23:20.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:23:20.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:22:50', tmtdew=11.0, humidity=47.11, cloud=0.0, wind=42.63, temperature=12.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:22:39.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:23:20.555 [DEBUG] [Thread-190793] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:23:20.578 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:23:20.579 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:23:20.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-14T19:23:20.658 [DEBUG] [Thread-190796] [transport.py] [_log()] starting thread (client mode): 0xa5743790
2026-02-14T19:23:20.658 [DEBUG] [Thread-190796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:23:20.672 [DEBUG] [Thread-190796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:23:20.672 [INFO] [Thread-190796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:23:20.680 [DEBUG] [Thread-190796] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:23:20.680 [DEBUG] [Thread-190796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:23:20.680 [DEBUG] [Thread-190796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:23:20.680 [DEBUG] [Thread-190796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:23:20.680 [DEBUG] [Thread-190796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:23:20.680 [DEBUG] [Thread-190796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:23:20.681 [DEBUG] [Thread-190796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:23:20.681 [DEBUG] [Thread-190796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:23:20.681 [DEBUG] [Thread-190796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:23:20.681 [DEBUG] [Thread-190796] [transport.py] [_log()] client lang: <none>
2026-02-14T19:23:20.681 [DEBUG] [Thread-190796] [transport.py] [_log()] server lang: <none>
2026-02-14T19:23:20.681 [DEBUG] [Thread-190796] [transport.py] [_log()] kex follows: False
2026-02-14T19:23:20.681 [DEBUG] [Thread-190796] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:23:20.681 [DEBUG] [Thread-190796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:23:20.681 [DEBUG] [Thread-190796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:23:20.682 [DEBUG] [Thread-190796] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:23:20.682 [DEBUG] [Thread-190796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:23:20.682 [DEBUG] [Thread-190796] [transport.py] [_log()] Compression: none
2026-02-14T19:23:20.682 [DEBUG] [Thread-190796] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:23:20.738 [DEBUG] [Thread-190796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:23:20.739 [DEBUG] [Thread-190796] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:23:20.739 [DEBUG] [Thread-190796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:23:20.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:23:20.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:23:20.797 [DEBUG] [Thread-190796] [transport.py] [_log()] userauth is OK
2026-02-14T19:23:20.797 [DEBUG] [Thread-190796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:23:20.798 [DEBUG] [Thread-190796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:23:20.798 [DEBUG] [Thread-190796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:23:20.798 [DEBUG] [Thread-190796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:23:20.817 [INFO] [Thread-190796] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:23:20.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-14T19:23:20.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:23:21.664 [DEBUG] [Thread-190796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:23:21.664 [DEBUG] [Thread-190796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:23:21.712 [DEBUG] [Thread-190796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:23:21.712 [DEBUG] [Thread-190796] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:23:21.721 [DEBUG] [Thread-190796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:23:21.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:23:21.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-14T19:23:21.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-14T19:23:21.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:23:21.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:23:21.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:23:21.758 [DEBUG] [Thread-190796] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:23:23.087 [DEBUG] [Thread-190798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:23:38.141 [DEBUG] [Thread-190799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:23:38.530 [DEBUG] [Thread-190800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:23:51.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:23:51.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:23:51.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-14T19:23:53.178 [DEBUG] [Thread-190801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:23:53.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 23, 26), 10.97, 47.18, 0.0, 42.35, 12.86, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:23:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:23:26
2026-02-14T19:23:54.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:23:54.465 [DEBUG] [Thread-190802] [transport.py] [_log()] starting thread (client mode): 0xa5740af0
2026-02-14T19:23:54.465 [DEBUG] [Thread-190802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:23:54.485 [DEBUG] [Thread-190802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:23:54.485 [INFO] [Thread-190802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:23:54.488 [DEBUG] [Thread-190802] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:23:54.488 [DEBUG] [Thread-190802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:23:54.488 [DEBUG] [Thread-190802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:23:54.488 [DEBUG] [Thread-190802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:23:54.488 [DEBUG] [Thread-190802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:23:54.488 [DEBUG] [Thread-190802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:23:54.488 [DEBUG] [Thread-190802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:23:54.488 [DEBUG] [Thread-190802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:23:54.488 [DEBUG] [Thread-190802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:23:54.489 [DEBUG] [Thread-190802] [transport.py] [_log()] client lang: <none>
2026-02-14T19:23:54.489 [DEBUG] [Thread-190802] [transport.py] [_log()] server lang: <none>
2026-02-14T19:23:54.489 [DEBUG] [Thread-190802] [transport.py] [_log()] kex follows: False
2026-02-14T19:23:54.489 [DEBUG] [Thread-190802] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:23:54.489 [DEBUG] [Thread-190802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:23:54.489 [DEBUG] [Thread-190802] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:23:54.489 [DEBUG] [Thread-190802] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:23:54.489 [DEBUG] [Thread-190802] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:23:54.489 [DEBUG] [Thread-190802] [transport.py] [_log()] Compression: none
2026-02-14T19:23:54.489 [DEBUG] [Thread-190802] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:23:54.507 [DEBUG] [Thread-190802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:23:54.507 [DEBUG] [Thread-190802] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:23:54.508 [DEBUG] [Thread-190802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:23:54.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:23:54.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:23:54.510 [DEBUG] [Thread-190802] [transport.py] [_log()] userauth is OK
2026-02-14T19:23:54.510 [DEBUG] [Thread-190802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:23:54.510 [DEBUG] [Thread-190802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:23:54.511 [DEBUG] [Thread-190802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:23:54.511 [DEBUG] [Thread-190802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:23:54.546 [INFO] [Thread-190802] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:23:54.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:23:55.133 [DEBUG] [Thread-190802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:23:55.133 [DEBUG] [Thread-190802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:23:55.134 [DEBUG] [Thread-190802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:23:55.174 [DEBUG] [Thread-190802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:23:55.175 [DEBUG] [Thread-190802] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:23:55.179 [DEBUG] [Thread-190802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:23:55.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:23:55.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:23:55.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:23:55.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:23:55.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:23:55.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:23:55.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:23:55.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:23:55.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:23:55.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.724421 -999.00  +12.60  31.69     53   +3.30 1 1 2 1 1   883    0 8.61 -32.85 ----- 28.6 31.7 157.2 45.9 13.8 -26.7 13.6 -25.5 13.8 -24.8 14.1 -26.4
2026-02-14T19:23:55.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:23:55.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:23:55.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.724421
2026-02-14T19:23:55.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:23:55.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:23:55.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:23:55.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:23:55.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:23:55.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:23:26', tmtdew=10.97, humidity=47.18, cloud=0.0, wind=42.35, temperature=12.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:23:09.974', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:23:55.205 [DEBUG] [Thread-190802] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:23:55.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-14T19:23:55.304 [DEBUG] [Thread-190805] [transport.py] [_log()] starting thread (client mode): 0xa57e06a0
2026-02-14T19:23:55.305 [DEBUG] [Thread-190805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:23:55.319 [DEBUG] [Thread-190805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:23:55.319 [INFO] [Thread-190805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:23:55.327 [DEBUG] [Thread-190805] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:23:55.327 [DEBUG] [Thread-190805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:23:55.327 [DEBUG] [Thread-190805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:23:55.327 [DEBUG] [Thread-190805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:23:55.328 [DEBUG] [Thread-190805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:23:55.328 [DEBUG] [Thread-190805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:23:55.328 [DEBUG] [Thread-190805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:23:55.328 [DEBUG] [Thread-190805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:23:55.328 [DEBUG] [Thread-190805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:23:55.328 [DEBUG] [Thread-190805] [transport.py] [_log()] client lang: <none>
2026-02-14T19:23:55.328 [DEBUG] [Thread-190805] [transport.py] [_log()] server lang: <none>
2026-02-14T19:23:55.328 [DEBUG] [Thread-190805] [transport.py] [_log()] kex follows: False
2026-02-14T19:23:55.328 [DEBUG] [Thread-190805] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:23:55.329 [DEBUG] [Thread-190805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:23:55.329 [DEBUG] [Thread-190805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:23:55.329 [DEBUG] [Thread-190805] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:23:55.329 [DEBUG] [Thread-190805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:23:55.329 [DEBUG] [Thread-190805] [transport.py] [_log()] Compression: none
2026-02-14T19:23:55.329 [DEBUG] [Thread-190805] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:23:55.384 [DEBUG] [Thread-190805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:23:55.384 [DEBUG] [Thread-190805] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:23:55.385 [DEBUG] [Thread-190805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:23:55.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:23:55.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:23:55.440 [DEBUG] [Thread-190805] [transport.py] [_log()] userauth is OK
2026-02-14T19:23:55.440 [DEBUG] [Thread-190805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:23:55.441 [DEBUG] [Thread-190805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:23:55.441 [DEBUG] [Thread-190805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:23:55.441 [DEBUG] [Thread-190805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:23:55.459 [INFO] [Thread-190805] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:23:55.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-14T19:23:55.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:23:56.265 [DEBUG] [Thread-190805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:23:56.265 [DEBUG] [Thread-190805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:23:56.313 [DEBUG] [Thread-190805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:23:56.313 [DEBUG] [Thread-190805] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:23:56.322 [DEBUG] [Thread-190805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:23:56.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:23:56.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-14T19:23:56.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-14T19:23:56.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:23:56.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:23:56.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:23:56.357 [DEBUG] [Thread-190805] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:24:08.215 [DEBUG] [Thread-190807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:24:20.722 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:24:20.723 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:24:23.269 [DEBUG] [Thread-190808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:24:26.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:24:26.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:24:26.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-14T19:24:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 24, 1), 10.96, 47.23, 0.0, 41.92, 12.88, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:24:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:24:01
2026-02-14T19:24:28.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:24:28.816 [DEBUG] [Thread-190809] [transport.py] [_log()] starting thread (client mode): 0xa2d02f50
2026-02-14T19:24:28.816 [DEBUG] [Thread-190809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:24:28.835 [DEBUG] [Thread-190809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:24:28.836 [INFO] [Thread-190809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:24:28.838 [DEBUG] [Thread-190809] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:24:28.839 [DEBUG] [Thread-190809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:24:28.839 [DEBUG] [Thread-190809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:24:28.839 [DEBUG] [Thread-190809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:24:28.839 [DEBUG] [Thread-190809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:24:28.839 [DEBUG] [Thread-190809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:24:28.839 [DEBUG] [Thread-190809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:24:28.839 [DEBUG] [Thread-190809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:24:28.839 [DEBUG] [Thread-190809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:24:28.839 [DEBUG] [Thread-190809] [transport.py] [_log()] client lang: <none>
2026-02-14T19:24:28.839 [DEBUG] [Thread-190809] [transport.py] [_log()] server lang: <none>
2026-02-14T19:24:28.839 [DEBUG] [Thread-190809] [transport.py] [_log()] kex follows: False
2026-02-14T19:24:28.839 [DEBUG] [Thread-190809] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:24:28.839 [DEBUG] [Thread-190809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:24:28.839 [DEBUG] [Thread-190809] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:24:28.839 [DEBUG] [Thread-190809] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:24:28.840 [DEBUG] [Thread-190809] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:24:28.840 [DEBUG] [Thread-190809] [transport.py] [_log()] Compression: none
2026-02-14T19:24:28.840 [DEBUG] [Thread-190809] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:24:28.858 [DEBUG] [Thread-190809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:24:28.858 [DEBUG] [Thread-190809] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:24:28.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:24:28.860 [DEBUG] [Thread-190809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:24:28.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:24:28.862 [DEBUG] [Thread-190809] [transport.py] [_log()] userauth is OK
2026-02-14T19:24:28.862 [DEBUG] [Thread-190809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:24:28.862 [DEBUG] [Thread-190809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:24:28.862 [DEBUG] [Thread-190809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:24:28.862 [DEBUG] [Thread-190809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:24:28.898 [INFO] [Thread-190809] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:24:28.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:24:29.532 [DEBUG] [Thread-190809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:24:29.533 [DEBUG] [Thread-190809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:24:29.533 [DEBUG] [Thread-190809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:24:29.573 [DEBUG] [Thread-190809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:24:29.573 [DEBUG] [Thread-190809] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:24:29.576 [DEBUG] [Thread-190809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:24:29.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:24:29.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:24:29.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:24:29.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:24:29.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:24:29.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:24:29.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:24:29.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:24:29.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:24:29.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.725115 -999.00  +12.60  29.18     53   +3.30 1 1 1 1 1   882    0 8.54 -36.88 ----- 26.6 29.2 169.6 44.5 13.7 -26.5 13.6 -25.6 13.7 -24.6 14.0 -26.0
2026-02-14T19:24:29.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:24:29.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:24:29.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.725115
2026-02-14T19:24:29.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:24:29.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:24:29.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:24:29.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:24:29.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:24:29.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:24:01', tmtdew=10.96, humidity=47.23, cloud=0.0, wind=41.92, temperature=12.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:24:09.936', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:24:29.601 [DEBUG] [Thread-190809] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:24:29.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-14T19:24:29.698 [DEBUG] [Thread-190812] [transport.py] [_log()] starting thread (client mode): 0xa2d00100
2026-02-14T19:24:29.698 [DEBUG] [Thread-190812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:24:29.712 [DEBUG] [Thread-190812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:24:29.713 [INFO] [Thread-190812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:24:29.720 [DEBUG] [Thread-190812] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:24:29.720 [DEBUG] [Thread-190812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:24:29.720 [DEBUG] [Thread-190812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:24:29.720 [DEBUG] [Thread-190812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:24:29.721 [DEBUG] [Thread-190812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:24:29.721 [DEBUG] [Thread-190812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:24:29.721 [DEBUG] [Thread-190812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:24:29.721 [DEBUG] [Thread-190812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:24:29.721 [DEBUG] [Thread-190812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:24:29.721 [DEBUG] [Thread-190812] [transport.py] [_log()] client lang: <none>
2026-02-14T19:24:29.721 [DEBUG] [Thread-190812] [transport.py] [_log()] server lang: <none>
2026-02-14T19:24:29.721 [DEBUG] [Thread-190812] [transport.py] [_log()] kex follows: False
2026-02-14T19:24:29.721 [DEBUG] [Thread-190812] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:24:29.721 [DEBUG] [Thread-190812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:24:29.721 [DEBUG] [Thread-190812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:24:29.721 [DEBUG] [Thread-190812] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:24:29.721 [DEBUG] [Thread-190812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:24:29.721 [DEBUG] [Thread-190812] [transport.py] [_log()] Compression: none
2026-02-14T19:24:29.721 [DEBUG] [Thread-190812] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:24:29.783 [DEBUG] [Thread-190812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:24:29.784 [DEBUG] [Thread-190812] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:24:29.784 [DEBUG] [Thread-190812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:24:29.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:24:29.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:24:29.839 [DEBUG] [Thread-190812] [transport.py] [_log()] userauth is OK
2026-02-14T19:24:29.839 [DEBUG] [Thread-190812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:24:29.839 [DEBUG] [Thread-190812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:24:29.839 [DEBUG] [Thread-190812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:24:29.839 [DEBUG] [Thread-190812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:24:29.858 [INFO] [Thread-190812] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:24: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-14T19:24:29.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:24:30.649 [DEBUG] [Thread-190812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:24:30.649 [DEBUG] [Thread-190812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:24:30.697 [DEBUG] [Thread-190812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:24:30.697 [DEBUG] [Thread-190812] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:24:30.707 [DEBUG] [Thread-190812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:24:30.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:24:30.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-14T19:24:30.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-14T19:24:30.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:24:30.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:24:30.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:24:30.743 [DEBUG] [Thread-190812] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:24:38.305 [DEBUG] [Thread-190814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:24:38.587 [DEBUG] [Thread-190815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:24:53.360 [DEBUG] [Thread-190816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:25:00.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:25:00.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:25:00.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-14T19:25:03.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 24, 38), 11.18, 46.59, 0.0, 42.16, 13.19, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:25:03.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:24:38
2026-02-14T19:25:03.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:25:03.665 [DEBUG] [Thread-190817] [transport.py] [_log()] starting thread (client mode): 0xa57e2c80
2026-02-14T19:25:03.665 [DEBUG] [Thread-190817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:25:03.685 [DEBUG] [Thread-190817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:25:03.685 [INFO] [Thread-190817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:25:03.688 [DEBUG] [Thread-190817] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:25:03.688 [DEBUG] [Thread-190817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:25:03.688 [DEBUG] [Thread-190817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:25:03.688 [DEBUG] [Thread-190817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:25:03.688 [DEBUG] [Thread-190817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:25:03.688 [DEBUG] [Thread-190817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:25:03.688 [DEBUG] [Thread-190817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:25:03.688 [DEBUG] [Thread-190817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:25:03.688 [DEBUG] [Thread-190817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:25:03.688 [DEBUG] [Thread-190817] [transport.py] [_log()] client lang: <none>
2026-02-14T19:25:03.688 [DEBUG] [Thread-190817] [transport.py] [_log()] server lang: <none>
2026-02-14T19:25:03.688 [DEBUG] [Thread-190817] [transport.py] [_log()] kex follows: False
2026-02-14T19:25:03.688 [DEBUG] [Thread-190817] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:25:03.688 [DEBUG] [Thread-190817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:25:03.688 [DEBUG] [Thread-190817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:25:03.688 [DEBUG] [Thread-190817] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:25:03.688 [DEBUG] [Thread-190817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:25:03.689 [DEBUG] [Thread-190817] [transport.py] [_log()] Compression: none
2026-02-14T19:25:03.689 [DEBUG] [Thread-190817] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:25:03.706 [DEBUG] [Thread-190817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:25:03.706 [DEBUG] [Thread-190817] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:25:03.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:25:03.707 [DEBUG] [Thread-190817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:25:03.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:25:03.710 [DEBUG] [Thread-190817] [transport.py] [_log()] userauth is OK
2026-02-14T19:25:03.710 [DEBUG] [Thread-190817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:25:03.710 [DEBUG] [Thread-190817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:25:03.710 [DEBUG] [Thread-190817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:25:03.710 [DEBUG] [Thread-190817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:25:03.734 [INFO] [Thread-190817] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:25:03.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:25:04.475 [DEBUG] [Thread-190817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:25:04.475 [DEBUG] [Thread-190817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:25:04.475 [DEBUG] [Thread-190817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:25:04.516 [DEBUG] [Thread-190817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:25:04.517 [DEBUG] [Thread-190817] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:25:04.520 [DEBUG] [Thread-190817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:25:04.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:25:04.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:25:04.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:25:04.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:25:04.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:25:04.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:25:04.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:25:04.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:25:04.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:25:04.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.725462 -999.00  +12.60  29.25     53   +3.30 1 1 1 1 1   881    0 8.59 -35.90 ----- 30.5 29.2 165.5 33.9 13.7 -26.4 13.6 -25.4 13.7 -24.8 14.0 -26.0
2026-02-14T19:25:04.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:25:04.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:25:04.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.725462
2026-02-14T19:25:04.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:25:04.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:25:04.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:25:04.546 [DEBUG] [Thread-190817] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:25:04.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:25:04.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:25:04.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:24:38', tmtdew=11.18, humidity=46.59, cloud=0.0, wind=42.16, temperature=13.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:24:39.917', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:25:04.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T19:25:04.647 [DEBUG] [Thread-190820] [transport.py] [_log()] starting thread (client mode): 0xa5741360
2026-02-14T19:25:04.647 [DEBUG] [Thread-190820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:25:04.661 [DEBUG] [Thread-190820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:25:04.661 [INFO] [Thread-190820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:25:04.669 [DEBUG] [Thread-190820] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:25:04.669 [DEBUG] [Thread-190820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:25:04.669 [DEBUG] [Thread-190820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:25:04.670 [DEBUG] [Thread-190820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:25:04.670 [DEBUG] [Thread-190820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:25:04.670 [DEBUG] [Thread-190820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:25:04.670 [DEBUG] [Thread-190820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:25:04.670 [DEBUG] [Thread-190820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:25:04.670 [DEBUG] [Thread-190820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:25:04.670 [DEBUG] [Thread-190820] [transport.py] [_log()] client lang: <none>
2026-02-14T19:25:04.670 [DEBUG] [Thread-190820] [transport.py] [_log()] server lang: <none>
2026-02-14T19:25:04.670 [DEBUG] [Thread-190820] [transport.py] [_log()] kex follows: False
2026-02-14T19:25:04.671 [DEBUG] [Thread-190820] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:25:04.671 [DEBUG] [Thread-190820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:25:04.671 [DEBUG] [Thread-190820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:25:04.671 [DEBUG] [Thread-190820] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:25:04.671 [DEBUG] [Thread-190820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:25:04.672 [DEBUG] [Thread-190820] [transport.py] [_log()] Compression: none
2026-02-14T19:25:04.672 [DEBUG] [Thread-190820] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:25:04.726 [DEBUG] [Thread-190820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:25:04.727 [DEBUG] [Thread-190820] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:25:04.728 [DEBUG] [Thread-190820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:25:04.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:25:04.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:25:04.783 [DEBUG] [Thread-190820] [transport.py] [_log()] userauth is OK
2026-02-14T19:25:04.783 [DEBUG] [Thread-190820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:25:04.784 [DEBUG] [Thread-190820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:25:04.784 [DEBUG] [Thread-190820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:25:04.784 [DEBUG] [Thread-190820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:25:04.803 [INFO] [Thread-190820] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:25:04.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-14T19:25:04.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:25:05.646 [DEBUG] [Thread-190820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:25:05.646 [DEBUG] [Thread-190820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:25:05.694 [DEBUG] [Thread-190820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:25:05.694 [DEBUG] [Thread-190820] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:25:05.704 [DEBUG] [Thread-190820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:25:05.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:25:05.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-14T19:25:05.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-14T19:25:05.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:25:05.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:25:05.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:25:05.741 [DEBUG] [Thread-190820] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:25:08.397 [DEBUG] [Thread-190822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:25:23.455 [DEBUG] [Thread-190823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:25:25.672 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:25:25.673 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:25:35.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:25:35.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:25:35.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-14T19:25:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 25, 13), 10.82, 47.86, 0.0, 40.07, 12.8, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:25:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:25:13
2026-02-14T19:25:38.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:25:38.414 [DEBUG] [Thread-190824] [transport.py] [_log()] starting thread (client mode): 0xa2d03d60
2026-02-14T19:25:38.415 [DEBUG] [Thread-190824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:25:38.435 [DEBUG] [Thread-190824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:25:38.435 [INFO] [Thread-190824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:25:38.438 [DEBUG] [Thread-190824] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:25:38.438 [DEBUG] [Thread-190824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:25:38.438 [DEBUG] [Thread-190824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:25:38.439 [DEBUG] [Thread-190824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:25:38.439 [DEBUG] [Thread-190824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:25:38.439 [DEBUG] [Thread-190824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:25:38.439 [DEBUG] [Thread-190824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:25:38.439 [DEBUG] [Thread-190824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:25:38.439 [DEBUG] [Thread-190824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:25:38.439 [DEBUG] [Thread-190824] [transport.py] [_log()] client lang: <none>
2026-02-14T19:25:38.439 [DEBUG] [Thread-190824] [transport.py] [_log()] server lang: <none>
2026-02-14T19:25:38.439 [DEBUG] [Thread-190824] [transport.py] [_log()] kex follows: False
2026-02-14T19:25:38.439 [DEBUG] [Thread-190824] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:25:38.439 [DEBUG] [Thread-190824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:25:38.439 [DEBUG] [Thread-190824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:25:38.439 [DEBUG] [Thread-190824] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:25:38.439 [DEBUG] [Thread-190824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:25:38.439 [DEBUG] [Thread-190824] [transport.py] [_log()] Compression: none
2026-02-14T19:25:38.439 [DEBUG] [Thread-190824] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:25:38.455 [DEBUG] [Thread-190824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:25:38.456 [DEBUG] [Thread-190824] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:25:38.456 [DEBUG] [Thread-190824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:25:38.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:25:38.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:25:38.459 [DEBUG] [Thread-190824] [transport.py] [_log()] userauth is OK
2026-02-14T19:25:38.459 [DEBUG] [Thread-190824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:25:38.459 [DEBUG] [Thread-190824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:25:38.460 [DEBUG] [Thread-190824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:25:38.460 [DEBUG] [Thread-190824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:25:38.480 [INFO] [Thread-190824] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:25:38.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:25:38.491 [DEBUG] [Thread-190826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:25:38.665 [DEBUG] [Thread-190827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:25:39.210 [DEBUG] [Thread-190824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:25:39.210 [DEBUG] [Thread-190824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:25:39.211 [DEBUG] [Thread-190824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:25:39.251 [DEBUG] [Thread-190824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:25:39.251 [DEBUG] [Thread-190824] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:25:39.254 [DEBUG] [Thread-190824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:25:39.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:25:39.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:25:39.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:25:39.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:25:39.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:25:39.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:25:39.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:25:39.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:25:39.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:25:39.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.725809 -999.00  +12.60  24.94     53   +3.40 1 1 1 1 1   880    0 8.52 -39.68 ----- 30.1 24.9 165.6 38.3 13.6 -26.5 13.5 -25.6 13.6 -24.7 13.9 -26.1
2026-02-14T19:25:39.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:25:39.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:25:39.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.725809
2026-02-14T19:25:39.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:25:39.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:25:39.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:25:39.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:25:39.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:25:39.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:25:13', tmtdew=10.82, humidity=47.86, cloud=0.0, wind=40.07, temperature=12.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:25:09.898', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:25:39.275 [DEBUG] [Thread-190824] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:25:39.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-14T19:25:39.369 [DEBUG] [Thread-190829] [transport.py] [_log()] starting thread (client mode): 0xa57e14e0
2026-02-14T19:25:39.369 [DEBUG] [Thread-190829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:25:39.383 [DEBUG] [Thread-190829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:25:39.383 [INFO] [Thread-190829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:25:39.391 [DEBUG] [Thread-190829] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:25:39.391 [DEBUG] [Thread-190829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:25:39.391 [DEBUG] [Thread-190829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:25:39.391 [DEBUG] [Thread-190829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:25:39.391 [DEBUG] [Thread-190829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:25:39.392 [DEBUG] [Thread-190829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:25:39.392 [DEBUG] [Thread-190829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:25:39.392 [DEBUG] [Thread-190829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:25:39.392 [DEBUG] [Thread-190829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:25:39.392 [DEBUG] [Thread-190829] [transport.py] [_log()] client lang: <none>
2026-02-14T19:25:39.392 [DEBUG] [Thread-190829] [transport.py] [_log()] server lang: <none>
2026-02-14T19:25:39.392 [DEBUG] [Thread-190829] [transport.py] [_log()] kex follows: False
2026-02-14T19:25:39.392 [DEBUG] [Thread-190829] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:25:39.392 [DEBUG] [Thread-190829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:25:39.392 [DEBUG] [Thread-190829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:25:39.392 [DEBUG] [Thread-190829] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:25:39.392 [DEBUG] [Thread-190829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:25:39.392 [DEBUG] [Thread-190829] [transport.py] [_log()] Compression: none
2026-02-14T19:25:39.392 [DEBUG] [Thread-190829] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:25:39.450 [DEBUG] [Thread-190829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:25:39.450 [DEBUG] [Thread-190829] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:25:39.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:25:39.451 [DEBUG] [Thread-190829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:25:39.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:25:39.506 [DEBUG] [Thread-190829] [transport.py] [_log()] userauth is OK
2026-02-14T19:25:39.507 [DEBUG] [Thread-190829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:25:39.507 [DEBUG] [Thread-190829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:25:39.507 [DEBUG] [Thread-190829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:25:39.507 [DEBUG] [Thread-190829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:25:39.525 [INFO] [Thread-190829] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:25:39.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-14T19:25:39.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:25:40.357 [DEBUG] [Thread-190829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:25:40.358 [DEBUG] [Thread-190829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:25:40.405 [DEBUG] [Thread-190829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:25:40.405 [DEBUG] [Thread-190829] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:25:40.414 [DEBUG] [Thread-190829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:25:40.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:25:40.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-14T19:25:40.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-14T19:25:40.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:25:40.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:25:40.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:25:40.450 [DEBUG] [Thread-190829] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:25:53.525 [DEBUG] [Thread-190831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:26:08.576 [DEBUG] [Thread-190832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:26:10.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:26:10.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:26:10.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-14T19:26:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 25, 48), 10.82, 47.86, 0.0, 41.55, 12.76, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:26:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:25:48
2026-02-14T19:26:12.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:26:12.910 [DEBUG] [Thread-190833] [transport.py] [_log()] starting thread (client mode): 0xa57e19c0
2026-02-14T19:26:12.910 [DEBUG] [Thread-190833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:26:12.931 [DEBUG] [Thread-190833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:26:12.931 [INFO] [Thread-190833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:26:12.934 [DEBUG] [Thread-190833] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:26:12.934 [DEBUG] [Thread-190833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:26:12.934 [DEBUG] [Thread-190833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:26:12.934 [DEBUG] [Thread-190833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:26:12.934 [DEBUG] [Thread-190833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:26:12.934 [DEBUG] [Thread-190833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:26:12.934 [DEBUG] [Thread-190833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:26:12.934 [DEBUG] [Thread-190833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:26:12.934 [DEBUG] [Thread-190833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:26:12.935 [DEBUG] [Thread-190833] [transport.py] [_log()] client lang: <none>
2026-02-14T19:26:12.935 [DEBUG] [Thread-190833] [transport.py] [_log()] server lang: <none>
2026-02-14T19:26:12.935 [DEBUG] [Thread-190833] [transport.py] [_log()] kex follows: False
2026-02-14T19:26:12.935 [DEBUG] [Thread-190833] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:26:12.935 [DEBUG] [Thread-190833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:26:12.935 [DEBUG] [Thread-190833] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:26:12.935 [DEBUG] [Thread-190833] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:26:12.935 [DEBUG] [Thread-190833] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:26:12.935 [DEBUG] [Thread-190833] [transport.py] [_log()] Compression: none
2026-02-14T19:26:12.935 [DEBUG] [Thread-190833] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:26:12.950 [DEBUG] [Thread-190833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:26:12.950 [DEBUG] [Thread-190833] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:26:12.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:26:12.951 [DEBUG] [Thread-190833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:26:12.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:26:12.952 [DEBUG] [Thread-190833] [transport.py] [_log()] userauth is OK
2026-02-14T19:26:12.952 [DEBUG] [Thread-190833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:26:12.952 [DEBUG] [Thread-190833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:26:12.952 [DEBUG] [Thread-190833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:26:12.952 [DEBUG] [Thread-190833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:26:12.972 [INFO] [Thread-190833] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:26:12.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:26:13.621 [DEBUG] [Thread-190833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:26:13.621 [DEBUG] [Thread-190833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:26:13.621 [DEBUG] [Thread-190833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:26:13.661 [DEBUG] [Thread-190833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:26:13.662 [DEBUG] [Thread-190833] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:26:13.665 [DEBUG] [Thread-190833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:26:13.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:26:13.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:26:13.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:26:13.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:26:13.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:26:13.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:26:13.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:26:13.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:26:13.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:26:13.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.726157 -999.00  +12.60  22.21     53   +3.30 1 1 1 1 1   879    0 8.50 -40.25 ----- 26.2 22.2 168.0 34.5 13.6 -26.5 13.5 -25.3 13.6 -24.5 13.9 -26.0
2026-02-14T19:26:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:26:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:26:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.726157
2026-02-14T19:26:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:26:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:26:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:26:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:26:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:26:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:25:48', tmtdew=10.82, humidity=47.86, cloud=0.0, wind=41.55, temperature=12.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:25:39.965', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:26:13.690 [DEBUG] [Thread-190833] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:26:13.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-14T19:26:13.786 [DEBUG] [Thread-190836] [transport.py] [_log()] starting thread (client mode): 0xa2d025f0
2026-02-14T19:26:13.786 [DEBUG] [Thread-190836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:26:13.801 [DEBUG] [Thread-190836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:26:13.801 [INFO] [Thread-190836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:26:13.808 [DEBUG] [Thread-190836] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:26:13.809 [DEBUG] [Thread-190836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:26:13.809 [DEBUG] [Thread-190836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:26:13.809 [DEBUG] [Thread-190836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:26:13.809 [DEBUG] [Thread-190836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:26:13.810 [DEBUG] [Thread-190836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:26:13.810 [DEBUG] [Thread-190836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:26:13.810 [DEBUG] [Thread-190836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:26:13.810 [DEBUG] [Thread-190836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:26:13.810 [DEBUG] [Thread-190836] [transport.py] [_log()] client lang: <none>
2026-02-14T19:26:13.810 [DEBUG] [Thread-190836] [transport.py] [_log()] server lang: <none>
2026-02-14T19:26:13.810 [DEBUG] [Thread-190836] [transport.py] [_log()] kex follows: False
2026-02-14T19:26:13.810 [DEBUG] [Thread-190836] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:26:13.810 [DEBUG] [Thread-190836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:26:13.810 [DEBUG] [Thread-190836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:26:13.810 [DEBUG] [Thread-190836] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:26:13.810 [DEBUG] [Thread-190836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:26:13.810 [DEBUG] [Thread-190836] [transport.py] [_log()] Compression: none
2026-02-14T19:26:13.810 [DEBUG] [Thread-190836] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:26:13.866 [DEBUG] [Thread-190836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:26:13.866 [DEBUG] [Thread-190836] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:26:13.867 [DEBUG] [Thread-190836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:26:13.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:26:13.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:26:13.922 [DEBUG] [Thread-190836] [transport.py] [_log()] userauth is OK
2026-02-14T19:26:13.923 [DEBUG] [Thread-190836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:26:13.923 [DEBUG] [Thread-190836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:26:13.923 [DEBUG] [Thread-190836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:26:13.923 [DEBUG] [Thread-190836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:26:13.943 [INFO] [Thread-190836] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:26:13.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-14T19:26:13.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:26:14.770 [DEBUG] [Thread-190836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:26:14.770 [DEBUG] [Thread-190836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:26:14.818 [DEBUG] [Thread-190836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:26:14.818 [DEBUG] [Thread-190836] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:26:14.828 [DEBUG] [Thread-190836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:26:14.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:26:14.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:26:14.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-14T19:26:14.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:26:14.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:26:14.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:26:14.863 [DEBUG] [Thread-190836] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:26:23.615 [DEBUG] [Thread-190838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:26:31.944 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:26:31.945 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:26:38.663 [DEBUG] [Thread-190839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:26:38.722 [DEBUG] [Thread-190840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:26:44.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:26:44.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:26:44.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-14T19:26:46.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 26, 24), 10.79, 47.95, 0.0, 40.88, 12.76, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:26:46.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:26:24
2026-02-14T19:26:47.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:26:47.315 [DEBUG] [Thread-190841] [transport.py] [_log()] starting thread (client mode): 0xa5773dc0
2026-02-14T19:26:47.315 [DEBUG] [Thread-190841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:26:47.336 [DEBUG] [Thread-190841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:26:47.336 [INFO] [Thread-190841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:26:47.339 [DEBUG] [Thread-190841] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:26:47.339 [DEBUG] [Thread-190841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:26:47.339 [DEBUG] [Thread-190841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:26:47.339 [DEBUG] [Thread-190841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:26:47.339 [DEBUG] [Thread-190841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:26:47.339 [DEBUG] [Thread-190841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:26:47.339 [DEBUG] [Thread-190841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:26:47.339 [DEBUG] [Thread-190841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:26:47.339 [DEBUG] [Thread-190841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:26:47.339 [DEBUG] [Thread-190841] [transport.py] [_log()] client lang: <none>
2026-02-14T19:26:47.340 [DEBUG] [Thread-190841] [transport.py] [_log()] server lang: <none>
2026-02-14T19:26:47.340 [DEBUG] [Thread-190841] [transport.py] [_log()] kex follows: False
2026-02-14T19:26:47.340 [DEBUG] [Thread-190841] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:26:47.340 [DEBUG] [Thread-190841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:26:47.340 [DEBUG] [Thread-190841] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:26:47.340 [DEBUG] [Thread-190841] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:26:47.340 [DEBUG] [Thread-190841] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:26:47.340 [DEBUG] [Thread-190841] [transport.py] [_log()] Compression: none
2026-02-14T19:26:47.340 [DEBUG] [Thread-190841] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:26:47.357 [DEBUG] [Thread-190841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:26:47.357 [DEBUG] [Thread-190841] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:26:47.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:26:47.358 [DEBUG] [Thread-190841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:26:47.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:26:47.361 [DEBUG] [Thread-190841] [transport.py] [_log()] userauth is OK
2026-02-14T19:26:47.361 [DEBUG] [Thread-190841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:26:47.361 [DEBUG] [Thread-190841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:26:47.361 [DEBUG] [Thread-190841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:26:47.361 [DEBUG] [Thread-190841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:26:47.385 [INFO] [Thread-190841] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:26:47.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:26:48.023 [DEBUG] [Thread-190841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:26:48.024 [DEBUG] [Thread-190841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:26:48.024 [DEBUG] [Thread-190841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:26:48.065 [DEBUG] [Thread-190841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:26:48.065 [DEBUG] [Thread-190841] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:26:48.068 [DEBUG] [Thread-190841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:26:48.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:26:48.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:26:48.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:26:48.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:26:48.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:26:48.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:26:48.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:26:48.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:26:48.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:26:48.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.726504 -999.00  +12.60  23.75     53   +3.40 1 1 1 1 1   879    0 8.20 -42.60 ----- 24.2 23.8 171.0 29.6 13.6 -26.5 13.4 -25.5 13.6 -24.4 13.9 -25.9
2026-02-14T19:26:48.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:26:48.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:26:48.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.726504
2026-02-14T19:26:48.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:26:48.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:26:48.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:26:48.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:26:48.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:26:48.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:26:24', tmtdew=10.79, humidity=47.95, cloud=0.0, wind=40.88, temperature=12.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:26:09.946', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:26:48.091 [DEBUG] [Thread-190841] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:26:48.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-14T19:26:48.185 [DEBUG] [Thread-190844] [transport.py] [_log()] starting thread (client mode): 0xa2d7b8b0
2026-02-14T19:26:48.185 [DEBUG] [Thread-190844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:26:48.201 [DEBUG] [Thread-190844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:26:48.202 [INFO] [Thread-190844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:26:48.209 [DEBUG] [Thread-190844] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:26:48.209 [DEBUG] [Thread-190844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:26:48.209 [DEBUG] [Thread-190844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:26:48.210 [DEBUG] [Thread-190844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:26:48.210 [DEBUG] [Thread-190844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:26:48.210 [DEBUG] [Thread-190844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:26:48.210 [DEBUG] [Thread-190844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:26:48.210 [DEBUG] [Thread-190844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:26:48.210 [DEBUG] [Thread-190844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:26:48.210 [DEBUG] [Thread-190844] [transport.py] [_log()] client lang: <none>
2026-02-14T19:26:48.210 [DEBUG] [Thread-190844] [transport.py] [_log()] server lang: <none>
2026-02-14T19:26:48.210 [DEBUG] [Thread-190844] [transport.py] [_log()] kex follows: False
2026-02-14T19:26:48.210 [DEBUG] [Thread-190844] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:26:48.210 [DEBUG] [Thread-190844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:26:48.210 [DEBUG] [Thread-190844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:26:48.210 [DEBUG] [Thread-190844] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:26:48.210 [DEBUG] [Thread-190844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:26:48.210 [DEBUG] [Thread-190844] [transport.py] [_log()] Compression: none
2026-02-14T19:26:48.210 [DEBUG] [Thread-190844] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:26:48.273 [DEBUG] [Thread-190844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:26:48.273 [DEBUG] [Thread-190844] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:26:48.274 [DEBUG] [Thread-190844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:26:48.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:26:48.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:26:48.329 [DEBUG] [Thread-190844] [transport.py] [_log()] userauth is OK
2026-02-14T19:26:48.329 [DEBUG] [Thread-190844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:26:48.329 [DEBUG] [Thread-190844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:26:48.329 [DEBUG] [Thread-190844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:26:48.329 [DEBUG] [Thread-190844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:26:48.348 [INFO] [Thread-190844] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:26:48.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-14T19:26:48.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:26:49.167 [DEBUG] [Thread-190844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:26:49.168 [DEBUG] [Thread-190844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:26:49.215 [DEBUG] [Thread-190844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:26:49.215 [DEBUG] [Thread-190844] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:26:49.223 [DEBUG] [Thread-190844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:26:49.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:26:49.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:26:49.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:26:49.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:26:49.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:26:49.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:26:49.254 [DEBUG] [Thread-190844] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:26:53.697 [DEBUG] [Thread-190846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:27:08.745 [DEBUG] [Thread-190847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:27:19.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:27:19.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:27:19.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-14T19:27:21.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 26, 24), 10.79, 47.95, 0.0, 40.88, 12.76, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:27:21.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:26:24
2026-02-14T19:27:21.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:27:21.879 [DEBUG] [Thread-190848] [transport.py] [_log()] starting thread (client mode): 0xa5770e20
2026-02-14T19:27:21.879 [DEBUG] [Thread-190848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:27:21.900 [DEBUG] [Thread-190848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:27:21.900 [INFO] [Thread-190848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:27:21.903 [DEBUG] [Thread-190848] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:27:21.903 [DEBUG] [Thread-190848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:27:21.903 [DEBUG] [Thread-190848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:27:21.903 [DEBUG] [Thread-190848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:27:21.903 [DEBUG] [Thread-190848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:27:21.903 [DEBUG] [Thread-190848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:27:21.903 [DEBUG] [Thread-190848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:27:21.903 [DEBUG] [Thread-190848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:27:21.903 [DEBUG] [Thread-190848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:27:21.903 [DEBUG] [Thread-190848] [transport.py] [_log()] client lang: <none>
2026-02-14T19:27:21.903 [DEBUG] [Thread-190848] [transport.py] [_log()] server lang: <none>
2026-02-14T19:27:21.904 [DEBUG] [Thread-190848] [transport.py] [_log()] kex follows: False
2026-02-14T19:27:21.904 [DEBUG] [Thread-190848] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:27:21.904 [DEBUG] [Thread-190848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:27:21.904 [DEBUG] [Thread-190848] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:27:21.904 [DEBUG] [Thread-190848] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:27:21.904 [DEBUG] [Thread-190848] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:27:21.904 [DEBUG] [Thread-190848] [transport.py] [_log()] Compression: none
2026-02-14T19:27:21.904 [DEBUG] [Thread-190848] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:27:21.920 [DEBUG] [Thread-190848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:27:21.920 [DEBUG] [Thread-190848] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:27:21.920 [DEBUG] [Thread-190848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:27:21.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:27:21.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:27:21.921 [DEBUG] [Thread-190848] [transport.py] [_log()] userauth is OK
2026-02-14T19:27:21.921 [DEBUG] [Thread-190848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:27:21.921 [DEBUG] [Thread-190848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:27:21.921 [DEBUG] [Thread-190848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:27:21.921 [DEBUG] [Thread-190848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:27:21.936 [INFO] [Thread-190848] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:27:21.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:27:22.540 [DEBUG] [Thread-190848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:27:22.541 [DEBUG] [Thread-190848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:27:22.541 [DEBUG] [Thread-190848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:27:22.581 [DEBUG] [Thread-190848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:27:22.581 [DEBUG] [Thread-190848] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:27:22.584 [DEBUG] [Thread-190848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:27:22.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:27:22.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:27:22.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:27:22.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:27:22.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:27:22.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:27:22.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:27:22.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:27:22.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:27:22.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.726851 -999.00  +12.60  26.05     53   +3.40 1 1 1 1 1   878    0 8.61 -41.66 ----- 27.2 26.1 166.8 32.1 13.6 -26.6 13.4 -25.7 13.5 -24.7 13.8 -26.1
2026-02-14T19:27:22.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:27:22.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:27:22.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.726851
2026-02-14T19:27:22.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:27:22.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:27:22.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:27:22.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:27:22.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:27:22.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:26:24', tmtdew=10.79, humidity=47.95, cloud=0.0, wind=40.88, temperature=12.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:26:39.926', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:27:22.611 [DEBUG] [Thread-190848] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:27:22.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-14T19:27:22.706 [DEBUG] [Thread-190851] [transport.py] [_log()] starting thread (client mode): 0xa5772140
2026-02-14T19:27:22.706 [DEBUG] [Thread-190851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:27:22.721 [DEBUG] [Thread-190851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:27:22.721 [INFO] [Thread-190851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:27:22.729 [DEBUG] [Thread-190851] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:27:22.729 [DEBUG] [Thread-190851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:27:22.729 [DEBUG] [Thread-190851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:27:22.729 [DEBUG] [Thread-190851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:27:22.729 [DEBUG] [Thread-190851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:27:22.729 [DEBUG] [Thread-190851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:27:22.729 [DEBUG] [Thread-190851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:27:22.729 [DEBUG] [Thread-190851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:27:22.729 [DEBUG] [Thread-190851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:27:22.729 [DEBUG] [Thread-190851] [transport.py] [_log()] client lang: <none>
2026-02-14T19:27:22.729 [DEBUG] [Thread-190851] [transport.py] [_log()] server lang: <none>
2026-02-14T19:27:22.729 [DEBUG] [Thread-190851] [transport.py] [_log()] kex follows: False
2026-02-14T19:27:22.729 [DEBUG] [Thread-190851] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:27:22.729 [DEBUG] [Thread-190851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:27:22.729 [DEBUG] [Thread-190851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:27:22.730 [DEBUG] [Thread-190851] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:27:22.730 [DEBUG] [Thread-190851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:27:22.730 [DEBUG] [Thread-190851] [transport.py] [_log()] Compression: none
2026-02-14T19:27:22.730 [DEBUG] [Thread-190851] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:27:22.794 [DEBUG] [Thread-190851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:27:22.795 [DEBUG] [Thread-190851] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:27:22.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:27:22.796 [DEBUG] [Thread-190851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:27:22.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:27:22.852 [DEBUG] [Thread-190851] [transport.py] [_log()] userauth is OK
2026-02-14T19:27:22.852 [DEBUG] [Thread-190851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:27:22.852 [DEBUG] [Thread-190851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:27:22.852 [DEBUG] [Thread-190851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:27:22.853 [DEBUG] [Thread-190851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:27:22.867 [INFO] [Thread-190851] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:27:22.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T19:27:22.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:27:23.724 [DEBUG] [Thread-190851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:27:23.724 [DEBUG] [Thread-190851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:27:23.772 [DEBUG] [Thread-190851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:27:23.772 [DEBUG] [Thread-190851] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:27:23.781 [DEBUG] [Thread-190851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:27:23.782 [DEBUG] [Thread-190853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:27:23.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:27:23.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-14T19:27:23.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-14T19:27:23.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:27:23.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:27:23.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:27:23.815 [DEBUG] [Thread-190851] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:27:36.707 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:27:36.708 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:27:38.782 [DEBUG] [Thread-190854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:27:38.829 [DEBUG] [Thread-190855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:27:43.965 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:27:53.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:27:53.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:27:53.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-14T19:27:53.864 [DEBUG] [Thread-190857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:27:55.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 27, 35), 10.99, 47.16, 0.0, 39.69, 13.03, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:27:55.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:27:35
2026-02-14T19:27:56.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:27:56.248 [DEBUG] [Thread-190858] [transport.py] [_log()] starting thread (client mode): 0xa57c0250
2026-02-14T19:27:56.248 [DEBUG] [Thread-190858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:27:56.269 [DEBUG] [Thread-190858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:27:56.269 [INFO] [Thread-190858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:27:56.272 [DEBUG] [Thread-190858] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:27:56.272 [DEBUG] [Thread-190858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:27:56.272 [DEBUG] [Thread-190858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:27:56.272 [DEBUG] [Thread-190858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:27:56.272 [DEBUG] [Thread-190858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:27:56.272 [DEBUG] [Thread-190858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:27:56.272 [DEBUG] [Thread-190858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:27:56.272 [DEBUG] [Thread-190858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:27:56.272 [DEBUG] [Thread-190858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:27:56.272 [DEBUG] [Thread-190858] [transport.py] [_log()] client lang: <none>
2026-02-14T19:27:56.272 [DEBUG] [Thread-190858] [transport.py] [_log()] server lang: <none>
2026-02-14T19:27:56.272 [DEBUG] [Thread-190858] [transport.py] [_log()] kex follows: False
2026-02-14T19:27:56.272 [DEBUG] [Thread-190858] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:27:56.272 [DEBUG] [Thread-190858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:27:56.272 [DEBUG] [Thread-190858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:27:56.272 [DEBUG] [Thread-190858] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:27:56.272 [DEBUG] [Thread-190858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:27:56.272 [DEBUG] [Thread-190858] [transport.py] [_log()] Compression: none
2026-02-14T19:27:56.272 [DEBUG] [Thread-190858] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:27:56.290 [DEBUG] [Thread-190858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:27:56.290 [DEBUG] [Thread-190858] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:27:56.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:27:56.291 [DEBUG] [Thread-190858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:27:56.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:27:56.293 [DEBUG] [Thread-190858] [transport.py] [_log()] userauth is OK
2026-02-14T19:27:56.293 [DEBUG] [Thread-190858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:27:56.294 [DEBUG] [Thread-190858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:27:56.294 [DEBUG] [Thread-190858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:27:56.294 [DEBUG] [Thread-190858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:27:56.318 [INFO] [Thread-190858] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:27:56.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:27:56.950 [DEBUG] [Thread-190858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:27:56.950 [DEBUG] [Thread-190858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:27:56.951 [DEBUG] [Thread-190858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:27:56.992 [DEBUG] [Thread-190858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:27:56.992 [DEBUG] [Thread-190858] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:27:56.995 [DEBUG] [Thread-190858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:27:57.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:27:57.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:27:57.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:27:57.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:27:57.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:27:57.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:27:57.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:27:57.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:27:57.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:27:57.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.727198 -999.00  +12.60  30.14     53   +3.40 1 1 2 1 1   877    0 8.32 -43.14 ----- 22.1 30.1 166.0 36.4 13.6 -26.5 13.4 -25.2 13.4 -24.8 13.8 -26.0
2026-02-14T19:27:57.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:27:57.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:27:57.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.727198
2026-02-14T19:27:57.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:27:57.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:27:57.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:27:57.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:27:57.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:27:57.022 [DEBUG] [Thread-190858] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:27:57.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:27:35', tmtdew=10.99, humidity=47.16, cloud=0.0, wind=39.69, temperature=13.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:27:09.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:27:57.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-14T19:27:57.121 [DEBUG] [Thread-190861] [transport.py] [_log()] starting thread (client mode): 0xa57c2a10
2026-02-14T19:27:57.121 [DEBUG] [Thread-190861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:27:57.135 [DEBUG] [Thread-190861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:27:57.135 [INFO] [Thread-190861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:27:57.143 [DEBUG] [Thread-190861] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:27:57.143 [DEBUG] [Thread-190861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:27:57.143 [DEBUG] [Thread-190861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:27:57.143 [DEBUG] [Thread-190861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:27:57.143 [DEBUG] [Thread-190861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:27:57.143 [DEBUG] [Thread-190861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:27:57.143 [DEBUG] [Thread-190861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:27:57.144 [DEBUG] [Thread-190861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:27:57.144 [DEBUG] [Thread-190861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:27:57.144 [DEBUG] [Thread-190861] [transport.py] [_log()] client lang: <none>
2026-02-14T19:27:57.144 [DEBUG] [Thread-190861] [transport.py] [_log()] server lang: <none>
2026-02-14T19:27:57.144 [DEBUG] [Thread-190861] [transport.py] [_log()] kex follows: False
2026-02-14T19:27:57.144 [DEBUG] [Thread-190861] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:27:57.144 [DEBUG] [Thread-190861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:27:57.144 [DEBUG] [Thread-190861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:27:57.144 [DEBUG] [Thread-190861] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:27:57.145 [DEBUG] [Thread-190861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:27:57.145 [DEBUG] [Thread-190861] [transport.py] [_log()] Compression: none
2026-02-14T19:27:57.145 [DEBUG] [Thread-190861] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:27:57.201 [DEBUG] [Thread-190861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:27:57.202 [DEBUG] [Thread-190861] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:27:57.202 [DEBUG] [Thread-190861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:27:57.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:27:57.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:27:57.257 [DEBUG] [Thread-190861] [transport.py] [_log()] userauth is OK
2026-02-14T19:27:57.257 [DEBUG] [Thread-190861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:27:57.257 [DEBUG] [Thread-190861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:27:57.257 [DEBUG] [Thread-190861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:27:57.257 [DEBUG] [Thread-190861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:27:57.279 [INFO] [Thread-190861] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:27:57.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-14T19:27:57.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:27:58.082 [DEBUG] [Thread-190861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:27:58.082 [DEBUG] [Thread-190861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:27:58.130 [DEBUG] [Thread-190861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:27:58.131 [DEBUG] [Thread-190861] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:27:58.140 [DEBUG] [Thread-190861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:27:58.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:27:58.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-14T19:27:58.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-14T19:27:58.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:27:58.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:27:58.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:27:58.174 [DEBUG] [Thread-190861] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:28:03.144 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:28:08.782 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:28:08.899 [DEBUG] [Thread-190863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:28:17.589 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:28:23.947 [DEBUG] [Thread-190864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:28:24.186 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:28:28.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:28:28.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:28:28.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-14T19:28:28.844 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:28:30.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 28, 10), 10.73, 48.14, 0.0, 35.94, 12.73, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:28:30.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:28:10
2026-02-14T19:28:30.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:28:30.807 [DEBUG] [Thread-190865] [transport.py] [_log()] starting thread (client mode): 0xa5773d90
2026-02-14T19:28:30.807 [DEBUG] [Thread-190865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:28:30.824 [DEBUG] [Thread-190865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:28:30.824 [INFO] [Thread-190865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:28:30.825 [DEBUG] [Thread-190865] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:28:30.825 [DEBUG] [Thread-190865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:28:30.825 [DEBUG] [Thread-190865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:28:30.825 [DEBUG] [Thread-190865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:28:30.825 [DEBUG] [Thread-190865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:28:30.825 [DEBUG] [Thread-190865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:28:30.825 [DEBUG] [Thread-190865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:28:30.825 [DEBUG] [Thread-190865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:28:30.825 [DEBUG] [Thread-190865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:28:30.825 [DEBUG] [Thread-190865] [transport.py] [_log()] client lang: <none>
2026-02-14T19:28:30.825 [DEBUG] [Thread-190865] [transport.py] [_log()] server lang: <none>
2026-02-14T19:28:30.825 [DEBUG] [Thread-190865] [transport.py] [_log()] kex follows: False
2026-02-14T19:28:30.825 [DEBUG] [Thread-190865] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:28:30.825 [DEBUG] [Thread-190865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:28:30.825 [DEBUG] [Thread-190865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:28:30.825 [DEBUG] [Thread-190865] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:28:30.825 [DEBUG] [Thread-190865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:28:30.825 [DEBUG] [Thread-190865] [transport.py] [_log()] Compression: none
2026-02-14T19:28:30.825 [DEBUG] [Thread-190865] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:28:30.833 [DEBUG] [Thread-190865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:28:30.834 [DEBUG] [Thread-190865] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:28:30.834 [DEBUG] [Thread-190865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:28:30.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:28:30.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:28:30.835 [DEBUG] [Thread-190865] [transport.py] [_log()] userauth is OK
2026-02-14T19:28:30.835 [DEBUG] [Thread-190865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:28:30.835 [DEBUG] [Thread-190865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:28:30.835 [DEBUG] [Thread-190865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:28:30.835 [DEBUG] [Thread-190865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:28:30.849 [INFO] [Thread-190865] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:28:30.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:28:31.518 [DEBUG] [Thread-190865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:28:31.518 [DEBUG] [Thread-190865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:28:31.518 [DEBUG] [Thread-190865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:28:31.559 [DEBUG] [Thread-190865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:28:31.560 [DEBUG] [Thread-190865] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:28:31.564 [DEBUG] [Thread-190865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:28:31.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:28:31.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:28:31.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:28:31.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:28:31.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:28:31.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:28:31.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:28:31.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:28:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:28:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.727546 -999.00  +12.60  33.42     53   +3.40 1 1 2 1 1   875    0 8.34 -44.67 ----- 28.5 33.4 166.0 36.6 13.6 -26.5 13.4 -25.3 13.4 -24.5 13.7 -26.1
2026-02-14T19:28:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:28:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:28:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.727546
2026-02-14T19:28:31.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:28:31.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:28:31.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:28:31.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:28:31.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:28:31.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:28:10', tmtdew=10.73, humidity=48.14, cloud=0.0, wind=35.94, temperature=12.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:27:39.974', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:28:31.588 [DEBUG] [Thread-190865] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:28:31.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T19:28:31.684 [DEBUG] [Thread-190868] [transport.py] [_log()] starting thread (client mode): 0xa5772680
2026-02-14T19:28:31.684 [DEBUG] [Thread-190868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:28:31.698 [DEBUG] [Thread-190868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:28:31.699 [INFO] [Thread-190868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:28:31.706 [DEBUG] [Thread-190868] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:28:31.706 [DEBUG] [Thread-190868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:28:31.706 [DEBUG] [Thread-190868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:28:31.706 [DEBUG] [Thread-190868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:28:31.706 [DEBUG] [Thread-190868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:28:31.706 [DEBUG] [Thread-190868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:28:31.706 [DEBUG] [Thread-190868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:28:31.706 [DEBUG] [Thread-190868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:28:31.706 [DEBUG] [Thread-190868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:28:31.706 [DEBUG] [Thread-190868] [transport.py] [_log()] client lang: <none>
2026-02-14T19:28:31.706 [DEBUG] [Thread-190868] [transport.py] [_log()] server lang: <none>
2026-02-14T19:28:31.706 [DEBUG] [Thread-190868] [transport.py] [_log()] kex follows: False
2026-02-14T19:28:31.707 [DEBUG] [Thread-190868] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:28:31.707 [DEBUG] [Thread-190868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:28:31.707 [DEBUG] [Thread-190868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:28:31.707 [DEBUG] [Thread-190868] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:28:31.707 [DEBUG] [Thread-190868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:28:31.707 [DEBUG] [Thread-190868] [transport.py] [_log()] Compression: none
2026-02-14T19:28:31.707 [DEBUG] [Thread-190868] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:28:31.765 [DEBUG] [Thread-190868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:28:31.765 [DEBUG] [Thread-190868] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:28:31.766 [DEBUG] [Thread-190868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:28:31.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:28:31.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:28:31.824 [DEBUG] [Thread-190868] [transport.py] [_log()] userauth is OK
2026-02-14T19:28:31.824 [DEBUG] [Thread-190868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:28:31.824 [DEBUG] [Thread-190868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:28:31.825 [DEBUG] [Thread-190868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:28:31.825 [DEBUG] [Thread-190868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:28:31.842 [INFO] [Thread-190868] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:28:31.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T19:28:31.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:28:32.679 [DEBUG] [Thread-190868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:28:32.679 [DEBUG] [Thread-190868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:28:32.727 [DEBUG] [Thread-190868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:28:32.727 [DEBUG] [Thread-190868] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:28:32.736 [DEBUG] [Thread-190868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:28:32.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:28:32.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-14T19:28:32.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-14T19:28:32.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:28:32.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:28:32.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:28:32.773 [DEBUG] [Thread-190868] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:28:34.348 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:28:38.838 [DEBUG] [Thread-190870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:28:38.982 [DEBUG] [Thread-190871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:28:39.078 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:28:40.926 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:28:40.927 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:28:43.621 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:28:48.469 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:28:53.515 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:28:54.027 [DEBUG] [Thread-190872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:28:57.831 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:29:02.696 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:29:02.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:29:02.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:29:02.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-14T19:29:04.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 28, 45), 10.66, 48.21, 0.0, 38.6, 12.7, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:29:04.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:28:45
2026-02-14T19:29:04.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:29:05.121 [DEBUG] [Thread-190873] [transport.py] [_log()] starting thread (client mode): 0xa57710f0
2026-02-14T19:29:05.121 [DEBUG] [Thread-190873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:29:05.141 [DEBUG] [Thread-190873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:29:05.141 [INFO] [Thread-190873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:29:05.144 [DEBUG] [Thread-190873] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:29:05.144 [DEBUG] [Thread-190873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:29:05.144 [DEBUG] [Thread-190873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:29:05.144 [DEBUG] [Thread-190873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:29:05.145 [DEBUG] [Thread-190873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:29:05.145 [DEBUG] [Thread-190873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:29:05.145 [DEBUG] [Thread-190873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:29:05.145 [DEBUG] [Thread-190873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:29:05.145 [DEBUG] [Thread-190873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:29:05.145 [DEBUG] [Thread-190873] [transport.py] [_log()] client lang: <none>
2026-02-14T19:29:05.145 [DEBUG] [Thread-190873] [transport.py] [_log()] server lang: <none>
2026-02-14T19:29:05.145 [DEBUG] [Thread-190873] [transport.py] [_log()] kex follows: False
2026-02-14T19:29:05.145 [DEBUG] [Thread-190873] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:29:05.145 [DEBUG] [Thread-190873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:29:05.145 [DEBUG] [Thread-190873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:29:05.145 [DEBUG] [Thread-190873] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:29:05.145 [DEBUG] [Thread-190873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:29:05.145 [DEBUG] [Thread-190873] [transport.py] [_log()] Compression: none
2026-02-14T19:29:05.145 [DEBUG] [Thread-190873] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:29:05.161 [DEBUG] [Thread-190873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:29:05.162 [DEBUG] [Thread-190873] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:29:05.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:29:05.163 [DEBUG] [Thread-190873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:29:05.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:29:05.165 [DEBUG] [Thread-190873] [transport.py] [_log()] userauth is OK
2026-02-14T19:29:05.166 [DEBUG] [Thread-190873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:29:05.166 [DEBUG] [Thread-190873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:29:05.166 [DEBUG] [Thread-190873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:29:05.166 [DEBUG] [Thread-190873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:29:05.201 [INFO] [Thread-190873] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:29:05.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:29:05.846 [DEBUG] [Thread-190873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:29:05.846 [DEBUG] [Thread-190873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:29:05.847 [DEBUG] [Thread-190873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:29:05.887 [DEBUG] [Thread-190873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:29:05.887 [DEBUG] [Thread-190873] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:29:05.891 [DEBUG] [Thread-190873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:29:05.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:29:05.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:29:05.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:29:05.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:29:05.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:29:05.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:29:05.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:29:05.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:29:05.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:29:05.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.727893 -999.00  +12.60  19.06     53   +3.40 1 1 1 1 1   874    0 8.20 -40.13 ----- 24.8 19.1 176.4 35.1 13.5 -26.4 13.4 -25.3 13.4 -24.4 13.7 -25.8
2026-02-14T19:29:05.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:29:05.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:29:05.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.727893
2026-02-14T19:29:05.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:29:05.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:29:05.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:29:05.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:29:05.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:29:05.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:28:45', tmtdew=10.66, humidity=48.21, cloud=0.0, wind=38.6, temperature=12.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:28:09.955', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:29:05.917 [DEBUG] [Thread-190873] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:29:06.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-14T19:29:06.013 [DEBUG] [Thread-190876] [transport.py] [_log()] starting thread (client mode): 0xa57c0be0
2026-02-14T19:29:06.013 [DEBUG] [Thread-190876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:29:06.028 [DEBUG] [Thread-190876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:29:06.028 [INFO] [Thread-190876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:29:06.035 [DEBUG] [Thread-190876] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:29:06.036 [DEBUG] [Thread-190876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:29:06.036 [DEBUG] [Thread-190876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:29:06.036 [DEBUG] [Thread-190876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:29:06.036 [DEBUG] [Thread-190876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:29:06.036 [DEBUG] [Thread-190876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:29:06.036 [DEBUG] [Thread-190876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:29:06.036 [DEBUG] [Thread-190876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:29:06.036 [DEBUG] [Thread-190876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:29:06.036 [DEBUG] [Thread-190876] [transport.py] [_log()] client lang: <none>
2026-02-14T19:29:06.036 [DEBUG] [Thread-190876] [transport.py] [_log()] server lang: <none>
2026-02-14T19:29:06.036 [DEBUG] [Thread-190876] [transport.py] [_log()] kex follows: False
2026-02-14T19:29:06.036 [DEBUG] [Thread-190876] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:29:06.036 [DEBUG] [Thread-190876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:29:06.036 [DEBUG] [Thread-190876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:29:06.036 [DEBUG] [Thread-190876] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:29:06.036 [DEBUG] [Thread-190876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:29:06.036 [DEBUG] [Thread-190876] [transport.py] [_log()] Compression: none
2026-02-14T19:29:06.036 [DEBUG] [Thread-190876] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:29:06.098 [DEBUG] [Thread-190876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:29:06.099 [DEBUG] [Thread-190876] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:29:06.099 [DEBUG] [Thread-190876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:29:06.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:29:06.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:29:06.161 [DEBUG] [Thread-190876] [transport.py] [_log()] userauth is OK
2026-02-14T19:29:06.162 [DEBUG] [Thread-190876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:29:06.162 [DEBUG] [Thread-190876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:29:06.162 [DEBUG] [Thread-190876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:29:06.162 [DEBUG] [Thread-190876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:29:06.186 [INFO] [Thread-190876] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:29:06.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-14T19:29:06.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:29:07.005 [DEBUG] [Thread-190876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:29:07.005 [DEBUG] [Thread-190876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:29:07.053 [DEBUG] [Thread-190876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:29:07.053 [DEBUG] [Thread-190876] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:29:07.062 [DEBUG] [Thread-190876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:29:07.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:29:07.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-14T19:29:07.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-14T19:29:07.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:29:07.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:29:07.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:29:07.100 [DEBUG] [Thread-190876] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:29:07.229 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:29:09.063 [DEBUG] [Thread-190878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:29:11.887 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:29:16.482 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:29:21.654 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:29:24.123 [DEBUG] [Thread-190879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:29:27.153 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:29:32.919 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:29:37.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:29:37.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:29:37.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-14T19:29:38.894 [DEBUG] [Thread-190880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:29:39.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 29, 21), 10.64, 48.26, 0.0, 37.62, 12.67, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:29:39.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:29:21
2026-02-14T19:29:39.157 [DEBUG] [Thread-190881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:29:39.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:29:39.671 [DEBUG] [Thread-190882] [transport.py] [_log()] starting thread (client mode): 0xa57c1300
2026-02-14T19:29:39.672 [DEBUG] [Thread-190882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:29:39.691 [DEBUG] [Thread-190882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:29:39.692 [INFO] [Thread-190882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:29:39.694 [DEBUG] [Thread-190882] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:29:39.695 [DEBUG] [Thread-190882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:29:39.695 [DEBUG] [Thread-190882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:29:39.695 [DEBUG] [Thread-190882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:29:39.695 [DEBUG] [Thread-190882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:29:39.695 [DEBUG] [Thread-190882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:29:39.695 [DEBUG] [Thread-190882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:29:39.695 [DEBUG] [Thread-190882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:29:39.695 [DEBUG] [Thread-190882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:29:39.695 [DEBUG] [Thread-190882] [transport.py] [_log()] client lang: <none>
2026-02-14T19:29:39.695 [DEBUG] [Thread-190882] [transport.py] [_log()] server lang: <none>
2026-02-14T19:29:39.695 [DEBUG] [Thread-190882] [transport.py] [_log()] kex follows: False
2026-02-14T19:29:39.695 [DEBUG] [Thread-190882] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:29:39.695 [DEBUG] [Thread-190882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:29:39.696 [DEBUG] [Thread-190882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:29:39.696 [DEBUG] [Thread-190882] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:29:39.696 [DEBUG] [Thread-190882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:29:39.696 [DEBUG] [Thread-190882] [transport.py] [_log()] Compression: none
2026-02-14T19:29:39.696 [DEBUG] [Thread-190882] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:29:39.716 [DEBUG] [Thread-190882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:29:39.717 [DEBUG] [Thread-190882] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:29:39.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:29:39.719 [DEBUG] [Thread-190882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:29:39.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:29:39.761 [DEBUG] [Thread-190882] [transport.py] [_log()] userauth is OK
2026-02-14T19:29:39.761 [DEBUG] [Thread-190882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:29:39.762 [DEBUG] [Thread-190882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:29:39.762 [DEBUG] [Thread-190882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:29:39.762 [DEBUG] [Thread-190882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:29:39.793 [INFO] [Thread-190882] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:29:39.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:29:40.420 [DEBUG] [Thread-190882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:29:40.420 [DEBUG] [Thread-190882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:29:40.421 [DEBUG] [Thread-190882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:29:40.461 [DEBUG] [Thread-190882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:29:40.462 [DEBUG] [Thread-190882] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:29:40.465 [DEBUG] [Thread-190882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:29:40.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:29:40.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:29:40.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:29:40.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:29:40.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:29:40.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:29:40.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:29:40.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:29:40.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:29:40.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.728240 -999.00  +12.60  27.01     53   +3.40 1 1 1 1 1   873    0 8.16 -42.25 ----- 25.9 27.0 166.2 39.4 13.5 -26.5 13.3 -25.3 13.3 -24.5 13.6 -25.7
2026-02-14T19:29:40.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:29:40.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:29:40.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.728240
2026-02-14T19:29:40.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:29:40.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:29:40.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:29:40.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:29:40.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:29:40.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:29:21', tmtdew=10.64, humidity=48.26, cloud=0.0, wind=37.62, temperature=12.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:28:39.936', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:29:40.491 [DEBUG] [Thread-190882] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:29:40.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-14T19:29:40.590 [DEBUG] [Thread-190885] [transport.py] [_log()] starting thread (client mode): 0xa57c2f50
2026-02-14T19:29:40.590 [DEBUG] [Thread-190885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:29:40.604 [DEBUG] [Thread-190885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:29:40.604 [INFO] [Thread-190885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:29:40.612 [DEBUG] [Thread-190885] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:29:40.612 [DEBUG] [Thread-190885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:29:40.612 [DEBUG] [Thread-190885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:29:40.612 [DEBUG] [Thread-190885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:29:40.612 [DEBUG] [Thread-190885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:29:40.612 [DEBUG] [Thread-190885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:29:40.613 [DEBUG] [Thread-190885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:29:40.613 [DEBUG] [Thread-190885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:29:40.613 [DEBUG] [Thread-190885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:29:40.613 [DEBUG] [Thread-190885] [transport.py] [_log()] client lang: <none>
2026-02-14T19:29:40.613 [DEBUG] [Thread-190885] [transport.py] [_log()] server lang: <none>
2026-02-14T19:29:40.613 [DEBUG] [Thread-190885] [transport.py] [_log()] kex follows: False
2026-02-14T19:29:40.613 [DEBUG] [Thread-190885] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:29:40.613 [DEBUG] [Thread-190885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:29:40.613 [DEBUG] [Thread-190885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:29:40.614 [DEBUG] [Thread-190885] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:29:40.614 [DEBUG] [Thread-190885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:29:40.614 [DEBUG] [Thread-190885] [transport.py] [_log()] Compression: none
2026-02-14T19:29:40.614 [DEBUG] [Thread-190885] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:29:40.671 [DEBUG] [Thread-190885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:29:40.672 [DEBUG] [Thread-190885] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:29:40.672 [DEBUG] [Thread-190885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:29:40.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:29:40.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:29:40.728 [DEBUG] [Thread-190885] [transport.py] [_log()] userauth is OK
2026-02-14T19:29:40.728 [DEBUG] [Thread-190885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:29:40.728 [DEBUG] [Thread-190885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:29:40.728 [DEBUG] [Thread-190885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:29:40.728 [DEBUG] [Thread-190885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:29:40.747 [INFO] [Thread-190885] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:29:40.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-14T19:29:40.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:29:41.547 [DEBUG] [Thread-190885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:29:41.547 [DEBUG] [Thread-190885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:29:41.595 [DEBUG] [Thread-190885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:29:41.595 [DEBUG] [Thread-190885] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:29:41.604 [DEBUG] [Thread-190885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:29:41.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:29:41.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-14T19:29:41.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-14T19:29:41.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:29:41.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:29:41.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:29:41.639 [DEBUG] [Thread-190885] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:29:50.762 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:29:50.764 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:29:54.194 [DEBUG] [Thread-190887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:30:09.243 [DEBUG] [Thread-190888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:30:11.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:30:11.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:30:11.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-14T19:30:13.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 29, 56), 10.64, 48.28, 0.0, 38.52, 12.65, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:30:13.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:29:56
2026-02-14T19:30:13.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:30:14.008 [DEBUG] [Thread-190889] [transport.py] [_log()] starting thread (client mode): 0xa5741540
2026-02-14T19:30:14.008 [DEBUG] [Thread-190889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:30:14.029 [DEBUG] [Thread-190889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:30:14.029 [INFO] [Thread-190889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:30:14.032 [DEBUG] [Thread-190889] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:30:14.033 [DEBUG] [Thread-190889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:30:14.033 [DEBUG] [Thread-190889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:30:14.033 [DEBUG] [Thread-190889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:30:14.033 [DEBUG] [Thread-190889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:30:14.033 [DEBUG] [Thread-190889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:30:14.033 [DEBUG] [Thread-190889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:30:14.033 [DEBUG] [Thread-190889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:30:14.033 [DEBUG] [Thread-190889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:30:14.033 [DEBUG] [Thread-190889] [transport.py] [_log()] client lang: <none>
2026-02-14T19:30:14.033 [DEBUG] [Thread-190889] [transport.py] [_log()] server lang: <none>
2026-02-14T19:30:14.033 [DEBUG] [Thread-190889] [transport.py] [_log()] kex follows: False
2026-02-14T19:30:14.033 [DEBUG] [Thread-190889] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:30:14.034 [DEBUG] [Thread-190889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:30:14.034 [DEBUG] [Thread-190889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:30:14.034 [DEBUG] [Thread-190889] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:30:14.034 [DEBUG] [Thread-190889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:30:14.034 [DEBUG] [Thread-190889] [transport.py] [_log()] Compression: none
2026-02-14T19:30:14.034 [DEBUG] [Thread-190889] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:30:14.054 [DEBUG] [Thread-190889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:30:14.055 [DEBUG] [Thread-190889] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:30:14.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:30:14.056 [DEBUG] [Thread-190889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:30:14.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:30:14.059 [DEBUG] [Thread-190889] [transport.py] [_log()] userauth is OK
2026-02-14T19:30:14.059 [DEBUG] [Thread-190889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:30:14.059 [DEBUG] [Thread-190889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:30:14.059 [DEBUG] [Thread-190889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:30:14.059 [DEBUG] [Thread-190889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:30:14.076 [INFO] [Thread-190889] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:30:14.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:30:14.962 [DEBUG] [Thread-190889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:30:14.962 [DEBUG] [Thread-190889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:30:14.963 [DEBUG] [Thread-190889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:30:15.003 [DEBUG] [Thread-190889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:30:15.003 [DEBUG] [Thread-190889] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:30:15.006 [DEBUG] [Thread-190889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:30:15.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:30:15.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:30:15.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:30:15.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:30:15.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:30:15.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:30:15.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:30:15.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:30:15.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:30:15.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.728934 -999.00  +12.50  35.10     53   +3.40 1 1 2 1 1   869    0 8.12 -39.77 ----- 33.7 35.1 170.4 45.2 13.4 -26.4 13.3 -25.3 13.2 -24.4 13.6 -25.7
2026-02-14T19:30:15.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:30:15.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:30:15.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.728934
2026-02-14T19:30:15.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:30:15.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:30:15.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:30:15.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:30:15.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:30:15.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:29:56', tmtdew=10.64, humidity=48.28, cloud=0.0, wind=38.52, temperature=12.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:29:39.898', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:30:15.030 [DEBUG] [Thread-190889] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:30:15.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-14T19:30:15.127 [DEBUG] [Thread-190892] [transport.py] [_log()] starting thread (client mode): 0xa2d03b50
2026-02-14T19:30:15.127 [DEBUG] [Thread-190892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:30:15.141 [DEBUG] [Thread-190892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:30:15.141 [INFO] [Thread-190892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:30:15.149 [DEBUG] [Thread-190892] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:30:15.150 [DEBUG] [Thread-190892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:30:15.150 [DEBUG] [Thread-190892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:30:15.150 [DEBUG] [Thread-190892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:30:15.150 [DEBUG] [Thread-190892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:30:15.150 [DEBUG] [Thread-190892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:30:15.150 [DEBUG] [Thread-190892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:30:15.150 [DEBUG] [Thread-190892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:30:15.150 [DEBUG] [Thread-190892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:30:15.150 [DEBUG] [Thread-190892] [transport.py] [_log()] client lang: <none>
2026-02-14T19:30:15.150 [DEBUG] [Thread-190892] [transport.py] [_log()] server lang: <none>
2026-02-14T19:30:15.150 [DEBUG] [Thread-190892] [transport.py] [_log()] kex follows: False
2026-02-14T19:30:15.150 [DEBUG] [Thread-190892] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:30:15.150 [DEBUG] [Thread-190892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:30:15.150 [DEBUG] [Thread-190892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:30:15.150 [DEBUG] [Thread-190892] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:30:15.150 [DEBUG] [Thread-190892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:30:15.150 [DEBUG] [Thread-190892] [transport.py] [_log()] Compression: none
2026-02-14T19:30:15.150 [DEBUG] [Thread-190892] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:30:15.210 [DEBUG] [Thread-190892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:30:15.210 [DEBUG] [Thread-190892] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:30:15.211 [DEBUG] [Thread-190892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:30:15.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:30:15.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:30:15.267 [DEBUG] [Thread-190892] [transport.py] [_log()] userauth is OK
2026-02-14T19:30:15.268 [DEBUG] [Thread-190892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:30:15.268 [DEBUG] [Thread-190892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:30:15.268 [DEBUG] [Thread-190892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:30:15.268 [DEBUG] [Thread-190892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:30:15.286 [INFO] [Thread-190892] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:30:15.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T19:30:15.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:30:16.098 [DEBUG] [Thread-190892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:30:16.098 [DEBUG] [Thread-190892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:30:16.146 [DEBUG] [Thread-190892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:30:16.146 [DEBUG] [Thread-190892] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:30:16.156 [DEBUG] [Thread-190892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:30:16.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:30:16.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-14T19:30:16.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-14T19:30:16.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:30:16.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:30:16.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:30:16.191 [DEBUG] [Thread-190892] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:30:24.279 [DEBUG] [Thread-190894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:30:38.965 [DEBUG] [Thread-190895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:30:39.336 [DEBUG] [Thread-190896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:30:46.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:30:46.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:30:46.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-14T19:30:48.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 30, 31), 10.64, 48.26, 0.0, 38.85, 12.68, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:30:48.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:30:31
2026-02-14T19:30:48.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:30:48.558 [DEBUG] [Thread-190897] [transport.py] [_log()] starting thread (client mode): 0xa5770310
2026-02-14T19:30:48.558 [DEBUG] [Thread-190897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:30:48.578 [DEBUG] [Thread-190897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:30:48.578 [INFO] [Thread-190897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:30:48.581 [DEBUG] [Thread-190897] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:30:48.581 [DEBUG] [Thread-190897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:30:48.581 [DEBUG] [Thread-190897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:30:48.582 [DEBUG] [Thread-190897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:30:48.582 [DEBUG] [Thread-190897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:30:48.582 [DEBUG] [Thread-190897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:30:48.582 [DEBUG] [Thread-190897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:30:48.582 [DEBUG] [Thread-190897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:30:48.582 [DEBUG] [Thread-190897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:30:48.582 [DEBUG] [Thread-190897] [transport.py] [_log()] client lang: <none>
2026-02-14T19:30:48.582 [DEBUG] [Thread-190897] [transport.py] [_log()] server lang: <none>
2026-02-14T19:30:48.582 [DEBUG] [Thread-190897] [transport.py] [_log()] kex follows: False
2026-02-14T19:30:48.582 [DEBUG] [Thread-190897] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:30:48.582 [DEBUG] [Thread-190897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:30:48.582 [DEBUG] [Thread-190897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:30:48.582 [DEBUG] [Thread-190897] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:30:48.582 [DEBUG] [Thread-190897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:30:48.582 [DEBUG] [Thread-190897] [transport.py] [_log()] Compression: none
2026-02-14T19:30:48.582 [DEBUG] [Thread-190897] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:30:48.600 [DEBUG] [Thread-190897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:30:48.600 [DEBUG] [Thread-190897] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:30:48.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:30:48.602 [DEBUG] [Thread-190897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:30:48.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:30:48.604 [DEBUG] [Thread-190897] [transport.py] [_log()] userauth is OK
2026-02-14T19:30:48.604 [DEBUG] [Thread-190897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:30:48.604 [DEBUG] [Thread-190897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:30:48.604 [DEBUG] [Thread-190897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:30:48.605 [DEBUG] [Thread-190897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:30:48.620 [INFO] [Thread-190897] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:30:48.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:30:49.221 [DEBUG] [Thread-190897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:30:49.221 [DEBUG] [Thread-190897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:30:49.221 [DEBUG] [Thread-190897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:30:49.262 [DEBUG] [Thread-190897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:30:49.263 [DEBUG] [Thread-190897] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:30:49.265 [DEBUG] [Thread-190897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:30:49.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:30:49.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:30:49.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:30:49.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:30:49.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:30:49.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:30:49.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:30:49.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:30:49.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:30:49.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.729281 -999.00  +12.50  31.59     53   +3.40 1 1 2 1 1   868    0 8.49 -38.93 ----- 35.6 31.6 167.5 49.4 13.4 -26.3 13.2 -25.3 13.2 -24.4 13.5 -25.6
2026-02-14T19:30:49.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:30:49.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:30:49.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.729281
2026-02-14T19:30:49.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:30:49.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:30:49.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:30:49.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:30:49.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:30:49.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:30:31', tmtdew=10.64, humidity=48.26, cloud=0.0, wind=38.85, temperature=12.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:30:09.878', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:30:49.292 [DEBUG] [Thread-190897] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:30:49.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-14T19:30:49.388 [DEBUG] [Thread-190900] [transport.py] [_log()] starting thread (client mode): 0xa2d00b20
2026-02-14T19:30:49.388 [DEBUG] [Thread-190900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:30:49.403 [DEBUG] [Thread-190900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:30:49.403 [INFO] [Thread-190900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:30:49.411 [DEBUG] [Thread-190900] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:30:49.411 [DEBUG] [Thread-190900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:30:49.411 [DEBUG] [Thread-190900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:30:49.411 [DEBUG] [Thread-190900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:30:49.412 [DEBUG] [Thread-190900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:30:49.412 [DEBUG] [Thread-190900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:30:49.412 [DEBUG] [Thread-190900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:30:49.412 [DEBUG] [Thread-190900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:30:49.412 [DEBUG] [Thread-190900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:30:49.412 [DEBUG] [Thread-190900] [transport.py] [_log()] client lang: <none>
2026-02-14T19:30:49.412 [DEBUG] [Thread-190900] [transport.py] [_log()] server lang: <none>
2026-02-14T19:30:49.412 [DEBUG] [Thread-190900] [transport.py] [_log()] kex follows: False
2026-02-14T19:30:49.412 [DEBUG] [Thread-190900] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:30:49.413 [DEBUG] [Thread-190900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:30:49.413 [DEBUG] [Thread-190900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:30:49.413 [DEBUG] [Thread-190900] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:30:49.413 [DEBUG] [Thread-190900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:30:49.413 [DEBUG] [Thread-190900] [transport.py] [_log()] Compression: none
2026-02-14T19:30:49.414 [DEBUG] [Thread-190900] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:30:49.475 [DEBUG] [Thread-190900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:30:49.476 [DEBUG] [Thread-190900] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:30:49.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:30:49.477 [DEBUG] [Thread-190900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:30:49.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:30:49.531 [DEBUG] [Thread-190900] [transport.py] [_log()] userauth is OK
2026-02-14T19:30:49.531 [DEBUG] [Thread-190900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:30:49.531 [DEBUG] [Thread-190900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:30:49.531 [DEBUG] [Thread-190900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:30:49.532 [DEBUG] [Thread-190900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:30:49.550 [INFO] [Thread-190900] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:30:49.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-14T19:30:49.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:30:50.368 [DEBUG] [Thread-190900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:30:50.369 [DEBUG] [Thread-190900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:30:50.416 [DEBUG] [Thread-190900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:30:50.416 [DEBUG] [Thread-190900] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:30:50.425 [DEBUG] [Thread-190900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:30:50.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:30:50.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-14T19:30: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') -> 00000000
2026-02-14T19:30:50.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:30:50.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:30:50.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:30:50.461 [DEBUG] [Thread-190900] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:30:54.371 [DEBUG] [Thread-190902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:30:57.695 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:30:57.696 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:31:09.429 [DEBUG] [Thread-190903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:31:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:31:20.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:31:20.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-14T19:31:22.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 31, 7), 10.64, 48.28, 0.0, 39.03, 12.65, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:31:22.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:31:07
2026-02-14T19:31:22.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:31:22.909 [DEBUG] [Thread-190904] [transport.py] [_log()] starting thread (client mode): 0xa5743460
2026-02-14T19:31:22.909 [DEBUG] [Thread-190904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:31:22.928 [DEBUG] [Thread-190904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:31:22.928 [INFO] [Thread-190904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:31:22.931 [DEBUG] [Thread-190904] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:31:22.931 [DEBUG] [Thread-190904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:31:22.931 [DEBUG] [Thread-190904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:31:22.931 [DEBUG] [Thread-190904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:31:22.931 [DEBUG] [Thread-190904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:31:22.931 [DEBUG] [Thread-190904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:31:22.931 [DEBUG] [Thread-190904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:31:22.931 [DEBUG] [Thread-190904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:31:22.931 [DEBUG] [Thread-190904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:31:22.931 [DEBUG] [Thread-190904] [transport.py] [_log()] client lang: <none>
2026-02-14T19:31:22.931 [DEBUG] [Thread-190904] [transport.py] [_log()] server lang: <none>
2026-02-14T19:31:22.931 [DEBUG] [Thread-190904] [transport.py] [_log()] kex follows: False
2026-02-14T19:31:22.931 [DEBUG] [Thread-190904] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:31:22.931 [DEBUG] [Thread-190904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:31:22.931 [DEBUG] [Thread-190904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:31:22.931 [DEBUG] [Thread-190904] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:31:22.931 [DEBUG] [Thread-190904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:31:22.931 [DEBUG] [Thread-190904] [transport.py] [_log()] Compression: none
2026-02-14T19:31:22.931 [DEBUG] [Thread-190904] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:31:22.947 [DEBUG] [Thread-190904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:31:22.948 [DEBUG] [Thread-190904] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:31:22.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:31:22.948 [DEBUG] [Thread-190904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:31:22.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:31:22.949 [DEBUG] [Thread-190904] [transport.py] [_log()] userauth is OK
2026-02-14T19:31:22.949 [DEBUG] [Thread-190904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:31:22.949 [DEBUG] [Thread-190904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:31:22.949 [DEBUG] [Thread-190904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:31:22.949 [DEBUG] [Thread-190904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:31:22.969 [INFO] [Thread-190904] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:31:22.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:31:23.687 [DEBUG] [Thread-190904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:31:23.688 [DEBUG] [Thread-190904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:31:23.688 [DEBUG] [Thread-190904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:31:23.728 [DEBUG] [Thread-190904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:31:23.728 [DEBUG] [Thread-190904] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:31:23.731 [DEBUG] [Thread-190904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:31:23.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:31:23.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:31:23.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:31:23.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:31:23.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:31:23.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:31:23.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:31:23.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:31:23.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:31:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.729976 -999.00  +12.40  33.34     54   +3.40 1 1 2 1 1   863    0 8.16 -39.84 ----- 31.1 33.3 168.0 37.6 13.3 -26.1 13.2 -25.3 13.1 -24.3 13.4 -25.6
2026-02-14T19:31:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:31:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:31:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.729976
2026-02-14T19:31:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:31:23.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:31:23.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:31:23.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:31:23.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:31:23.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:31:07', tmtdew=10.64, humidity=48.28, cloud=0.0, wind=39.03, temperature=12.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:31:09.926', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:31:23.758 [DEBUG] [Thread-190904] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:31:23.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-14T19:31:23.855 [DEBUG] [Thread-190906] [transport.py] [_log()] starting thread (client mode): 0xa5741390
2026-02-14T19:31:23.855 [DEBUG] [Thread-190906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:31:23.874 [DEBUG] [Thread-190906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:31:23.874 [INFO] [Thread-190906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:31:23.881 [DEBUG] [Thread-190906] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:31:23.881 [DEBUG] [Thread-190906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:31:23.882 [DEBUG] [Thread-190906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:31:23.882 [DEBUG] [Thread-190906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:31:23.882 [DEBUG] [Thread-190906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:31:23.882 [DEBUG] [Thread-190906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:31:23.882 [DEBUG] [Thread-190906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:31:23.882 [DEBUG] [Thread-190906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:31:23.882 [DEBUG] [Thread-190906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:31:23.882 [DEBUG] [Thread-190906] [transport.py] [_log()] client lang: <none>
2026-02-14T19:31:23.882 [DEBUG] [Thread-190906] [transport.py] [_log()] server lang: <none>
2026-02-14T19:31:23.882 [DEBUG] [Thread-190906] [transport.py] [_log()] kex follows: False
2026-02-14T19:31:23.882 [DEBUG] [Thread-190906] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:31:23.882 [DEBUG] [Thread-190906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:31:23.882 [DEBUG] [Thread-190906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:31:23.882 [DEBUG] [Thread-190906] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:31:23.882 [DEBUG] [Thread-190906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:31:23.882 [DEBUG] [Thread-190906] [transport.py] [_log()] Compression: none
2026-02-14T19:31:23.882 [DEBUG] [Thread-190906] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:31:23.938 [DEBUG] [Thread-190906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:31:23.938 [DEBUG] [Thread-190906] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:31:23.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:31:23.939 [DEBUG] [Thread-190906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:31:23.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:31:23.995 [DEBUG] [Thread-190906] [transport.py] [_log()] userauth is OK
2026-02-14T19:31:23.995 [DEBUG] [Thread-190906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:31:23.995 [DEBUG] [Thread-190906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:31:23.995 [DEBUG] [Thread-190906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:31:23.995 [DEBUG] [Thread-190906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:31:24.014 [INFO] [Thread-190906] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:31:24.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-14T19:31:24.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:31:24.463 [DEBUG] [Thread-190908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:31:24.838 [DEBUG] [Thread-190906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:31:24.839 [DEBUG] [Thread-190906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:31:24.886 [DEBUG] [Thread-190906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:31:24.887 [DEBUG] [Thread-190906] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:31:24.897 [DEBUG] [Thread-190906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:31:24.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:31:24.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-14T19:31:24.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:31:24.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:31:24.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:31:24.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:31:24.934 [DEBUG] [Thread-190906] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:31:39.033 [DEBUG] [Thread-190909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:31:39.510 [DEBUG] [Thread-190910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:31:54.549 [DEBUG] [Thread-190911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:31:54.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:31:54.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:31:54.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T19:31:56.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 31, 42), 10.62, 48.34, 0.0, 39.89, 12.67, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:31:56.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:31:42
2026-02-14T19:31:57.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:31:57.320 [DEBUG] [Thread-190912] [transport.py] [_log()] starting thread (client mode): 0xa57e2ad0
2026-02-14T19:31:57.320 [DEBUG] [Thread-190912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:31:57.337 [DEBUG] [Thread-190912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:31:57.337 [INFO] [Thread-190912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:31:57.340 [DEBUG] [Thread-190912] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:31:57.340 [DEBUG] [Thread-190912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:31:57.340 [DEBUG] [Thread-190912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:31:57.340 [DEBUG] [Thread-190912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:31:57.340 [DEBUG] [Thread-190912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:31:57.340 [DEBUG] [Thread-190912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:31:57.340 [DEBUG] [Thread-190912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:31:57.340 [DEBUG] [Thread-190912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:31:57.340 [DEBUG] [Thread-190912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:31:57.340 [DEBUG] [Thread-190912] [transport.py] [_log()] client lang: <none>
2026-02-14T19:31:57.340 [DEBUG] [Thread-190912] [transport.py] [_log()] server lang: <none>
2026-02-14T19:31:57.340 [DEBUG] [Thread-190912] [transport.py] [_log()] kex follows: False
2026-02-14T19:31:57.340 [DEBUG] [Thread-190912] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:31:57.340 [DEBUG] [Thread-190912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:31:57.341 [DEBUG] [Thread-190912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:31:57.341 [DEBUG] [Thread-190912] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:31:57.341 [DEBUG] [Thread-190912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:31:57.341 [DEBUG] [Thread-190912] [transport.py] [_log()] Compression: none
2026-02-14T19:31:57.341 [DEBUG] [Thread-190912] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:31:57.357 [DEBUG] [Thread-190912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:31:57.357 [DEBUG] [Thread-190912] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:31:57.358 [DEBUG] [Thread-190912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:31:57.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:31:57.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:31:57.359 [DEBUG] [Thread-190912] [transport.py] [_log()] userauth is OK
2026-02-14T19:31:57.359 [DEBUG] [Thread-190912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:31:57.360 [DEBUG] [Thread-190912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:31:57.360 [DEBUG] [Thread-190912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:31:57.360 [DEBUG] [Thread-190912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:31:57.383 [INFO] [Thread-190912] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:31:57.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:31:58.024 [DEBUG] [Thread-190912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:31:58.025 [DEBUG] [Thread-190912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:31:58.025 [DEBUG] [Thread-190912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:31:58.065 [DEBUG] [Thread-190912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:31:58.065 [DEBUG] [Thread-190912] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:31:58.068 [DEBUG] [Thread-190912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:31:58.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:31:58.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:31:58.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:31:58.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:31:58.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:31:58.085 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:31:58.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:31:58.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:31:58.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:31:58.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.730323 -999.00  +12.40  33.44     54   +3.40 1 1 2 1 1   861    0 8.11 -41.17 ----- 32.3 33.4 171.6 43.9 13.3 -26.2 13.2 -25.4 13.1 -24.3 13.4 -25.5
2026-02-14T19:31:58.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:31:58.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:31:58.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.730323
2026-02-14T19:31:58.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:31:58.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:31:58.088 [DEBUG] [Thread-190912] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:31:58.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:31:58.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:31:58.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:31:58.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:31:42', tmtdew=10.62, humidity=48.34, cloud=0.0, wind=39.89, temperature=12.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:31:39.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:31:58.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-14T19:31:58.177 [DEBUG] [Thread-190915] [transport.py] [_log()] starting thread (client mode): 0xa5772e00
2026-02-14T19:31:58.177 [DEBUG] [Thread-190915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:31:58.191 [DEBUG] [Thread-190915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:31:58.191 [INFO] [Thread-190915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:31:58.199 [DEBUG] [Thread-190915] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:31:58.199 [DEBUG] [Thread-190915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:31:58.199 [DEBUG] [Thread-190915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:31:58.199 [DEBUG] [Thread-190915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:31:58.200 [DEBUG] [Thread-190915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:31:58.200 [DEBUG] [Thread-190915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:31:58.200 [DEBUG] [Thread-190915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:31:58.200 [DEBUG] [Thread-190915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:31:58.200 [DEBUG] [Thread-190915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:31:58.200 [DEBUG] [Thread-190915] [transport.py] [_log()] client lang: <none>
2026-02-14T19:31:58.200 [DEBUG] [Thread-190915] [transport.py] [_log()] server lang: <none>
2026-02-14T19:31:58.200 [DEBUG] [Thread-190915] [transport.py] [_log()] kex follows: False
2026-02-14T19:31:58.200 [DEBUG] [Thread-190915] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:31:58.200 [DEBUG] [Thread-190915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:31:58.201 [DEBUG] [Thread-190915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:31:58.201 [DEBUG] [Thread-190915] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:31:58.201 [DEBUG] [Thread-190915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:31:58.201 [DEBUG] [Thread-190915] [transport.py] [_log()] Compression: none
2026-02-14T19:31:58.201 [DEBUG] [Thread-190915] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:31:58.258 [DEBUG] [Thread-190915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:31:58.259 [DEBUG] [Thread-190915] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:31:58.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:31:58.260 [DEBUG] [Thread-190915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:31:58.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:31:58.315 [DEBUG] [Thread-190915] [transport.py] [_log()] userauth is OK
2026-02-14T19:31:58.315 [DEBUG] [Thread-190915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:31:58.315 [DEBUG] [Thread-190915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:31:58.315 [DEBUG] [Thread-190915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:31:58.315 [DEBUG] [Thread-190915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:31:58.333 [INFO] [Thread-190915] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:31:58.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-14T19:31:58.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:31:59.142 [DEBUG] [Thread-190915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:31:59.142 [DEBUG] [Thread-190915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:31:59.190 [DEBUG] [Thread-190915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:31:59.190 [DEBUG] [Thread-190915] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:31:59.200 [DEBUG] [Thread-190915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:31:59.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:31:59.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-14T19:31:59.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:31:59.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:31:59.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:31:59.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:31:59.236 [DEBUG] [Thread-190915] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:32:02.816 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:32:02.817 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:32:09.585 [DEBUG] [Thread-190917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:32:24.645 [DEBUG] [Thread-190918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:32:29.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:32:29.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:32:29.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-14T19:32:31.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 32, 18), 10.6, 48.39, 0.0, 38.8, 12.6, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:32:31.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:32:18
2026-02-14T19:32:31.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:32:31.760 [DEBUG] [Thread-190919] [transport.py] [_log()] starting thread (client mode): 0xa57d4af0
2026-02-14T19:32:31.760 [DEBUG] [Thread-190919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:32:31.775 [DEBUG] [Thread-190919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:32:31.776 [INFO] [Thread-190919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:32:31.778 [DEBUG] [Thread-190919] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:32:31.778 [DEBUG] [Thread-190919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:32:31.778 [DEBUG] [Thread-190919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:32:31.778 [DEBUG] [Thread-190919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:32:31.778 [DEBUG] [Thread-190919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:32:31.778 [DEBUG] [Thread-190919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:32:31.778 [DEBUG] [Thread-190919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:32:31.778 [DEBUG] [Thread-190919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:32:31.778 [DEBUG] [Thread-190919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:32:31.778 [DEBUG] [Thread-190919] [transport.py] [_log()] client lang: <none>
2026-02-14T19:32:31.778 [DEBUG] [Thread-190919] [transport.py] [_log()] server lang: <none>
2026-02-14T19:32:31.778 [DEBUG] [Thread-190919] [transport.py] [_log()] kex follows: False
2026-02-14T19:32:31.778 [DEBUG] [Thread-190919] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:32:31.778 [DEBUG] [Thread-190919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:32:31.779 [DEBUG] [Thread-190919] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:32:31.779 [DEBUG] [Thread-190919] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:32:31.779 [DEBUG] [Thread-190919] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:32:31.779 [DEBUG] [Thread-190919] [transport.py] [_log()] Compression: none
2026-02-14T19:32:31.779 [DEBUG] [Thread-190919] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:32:31.786 [DEBUG] [Thread-190919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:32:31.786 [DEBUG] [Thread-190919] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:32:31.786 [DEBUG] [Thread-190919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:32:31.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:32:31.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:32:31.788 [DEBUG] [Thread-190919] [transport.py] [_log()] userauth is OK
2026-02-14T19:32:31.788 [DEBUG] [Thread-190919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:32:31.788 [DEBUG] [Thread-190919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:32:31.788 [DEBUG] [Thread-190919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:32:31.788 [DEBUG] [Thread-190919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:32:31.802 [INFO] [Thread-190919] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:32:31.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:32:32.442 [DEBUG] [Thread-190919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:32:32.442 [DEBUG] [Thread-190919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:32:32.442 [DEBUG] [Thread-190919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:32:32.483 [DEBUG] [Thread-190919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:32:32.483 [DEBUG] [Thread-190919] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:32:32.486 [DEBUG] [Thread-190919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:32:32.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:32:32.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:32:32.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:32:32.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:32:32.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:32:32.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:32:32.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:32:32.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:32:32.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:32:32.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.730670 -999.00  +12.40  29.96     54   +3.40 1 1 1 1 1   858    0 8.25 -45.21 ----- 27.3 30.0 172.0 40.1 13.3 -26.2 13.1 -25.3 13.0 -24.2 13.4 -25.5
2026-02-14T19:32:32.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:32:32.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:32:32.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.730670
2026-02-14T19:32:32.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:32:32.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:32:32.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:32:32.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:32:32.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:32:32.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:32:18', tmtdew=10.6, humidity=48.39, cloud=0.0, wind=38.8, temperature=12.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:32:09.888', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:32:32.510 [DEBUG] [Thread-190919] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:32:32.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-14T19:32:32.616 [DEBUG] [Thread-190922] [transport.py] [_log()] starting thread (client mode): 0xa57c0be0
2026-02-14T19:32:32.617 [DEBUG] [Thread-190922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:32:32.632 [DEBUG] [Thread-190922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:32:32.633 [INFO] [Thread-190922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:32:32.640 [DEBUG] [Thread-190922] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:32:32.640 [DEBUG] [Thread-190922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:32:32.640 [DEBUG] [Thread-190922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:32:32.640 [DEBUG] [Thread-190922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:32:32.640 [DEBUG] [Thread-190922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:32:32.640 [DEBUG] [Thread-190922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:32:32.640 [DEBUG] [Thread-190922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:32:32.640 [DEBUG] [Thread-190922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:32:32.640 [DEBUG] [Thread-190922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:32:32.641 [DEBUG] [Thread-190922] [transport.py] [_log()] client lang: <none>
2026-02-14T19:32:32.641 [DEBUG] [Thread-190922] [transport.py] [_log()] server lang: <none>
2026-02-14T19:32:32.641 [DEBUG] [Thread-190922] [transport.py] [_log()] kex follows: False
2026-02-14T19:32:32.641 [DEBUG] [Thread-190922] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:32:32.641 [DEBUG] [Thread-190922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:32:32.641 [DEBUG] [Thread-190922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:32:32.641 [DEBUG] [Thread-190922] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:32:32.641 [DEBUG] [Thread-190922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:32:32.641 [DEBUG] [Thread-190922] [transport.py] [_log()] Compression: none
2026-02-14T19:32:32.641 [DEBUG] [Thread-190922] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:32:32.697 [DEBUG] [Thread-190922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:32:32.698 [DEBUG] [Thread-190922] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:32:32.698 [DEBUG] [Thread-190922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:32:32.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:32:32.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:32:32.754 [DEBUG] [Thread-190922] [transport.py] [_log()] userauth is OK
2026-02-14T19:32:32.754 [DEBUG] [Thread-190922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:32:32.755 [DEBUG] [Thread-190922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:32:32.755 [DEBUG] [Thread-190922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:32:32.755 [DEBUG] [Thread-190922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:32:32.777 [INFO] [Thread-190922] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:32:32.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T19:32:32.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:32:33.632 [DEBUG] [Thread-190922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:32:33.632 [DEBUG] [Thread-190922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:32:33.679 [DEBUG] [Thread-190922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:32:33.679 [DEBUG] [Thread-190922] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:32:33.689 [DEBUG] [Thread-190922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:32:33.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:32:33.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-14T19:32:33.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-14T19:32:33.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:32:33.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:32:33.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:32:33.727 [DEBUG] [Thread-190922] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:32:39.090 [DEBUG] [Thread-190924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:32:39.682 [DEBUG] [Thread-190925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:32:54.733 [DEBUG] [Thread-190926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:33:03.023 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:33:03.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:33:03.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:33:03.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-14T19:33:06.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 32, 53), 10.49, 48.93, 0.0, 40.18, 12.58, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:33:06.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:32:53
2026-02-14T19:33:06.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:33:06.666 [DEBUG] [Thread-190927] [transport.py] [_log()] starting thread (client mode): 0xa57e3f70
2026-02-14T19:33:06.667 [DEBUG] [Thread-190927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:33:06.687 [DEBUG] [Thread-190927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:33:06.687 [INFO] [Thread-190927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:33:06.690 [DEBUG] [Thread-190927] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:33:06.690 [DEBUG] [Thread-190927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:33:06.691 [DEBUG] [Thread-190927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:33:06.691 [DEBUG] [Thread-190927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:33:06.691 [DEBUG] [Thread-190927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:33:06.691 [DEBUG] [Thread-190927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:33:06.691 [DEBUG] [Thread-190927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:33:06.691 [DEBUG] [Thread-190927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:33:06.691 [DEBUG] [Thread-190927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:33:06.691 [DEBUG] [Thread-190927] [transport.py] [_log()] client lang: <none>
2026-02-14T19:33:06.691 [DEBUG] [Thread-190927] [transport.py] [_log()] server lang: <none>
2026-02-14T19:33:06.691 [DEBUG] [Thread-190927] [transport.py] [_log()] kex follows: False
2026-02-14T19:33:06.691 [DEBUG] [Thread-190927] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:33:06.691 [DEBUG] [Thread-190927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:33:06.691 [DEBUG] [Thread-190927] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:33:06.691 [DEBUG] [Thread-190927] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:33:06.692 [DEBUG] [Thread-190927] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:33:06.692 [DEBUG] [Thread-190927] [transport.py] [_log()] Compression: none
2026-02-14T19:33:06.692 [DEBUG] [Thread-190927] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:33:06.709 [DEBUG] [Thread-190927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:33:06.710 [DEBUG] [Thread-190927] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:33:06.711 [DEBUG] [Thread-190927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:33:06.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:33:06.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:33:06.713 [DEBUG] [Thread-190927] [transport.py] [_log()] userauth is OK
2026-02-14T19:33:06.713 [DEBUG] [Thread-190927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:33:06.713 [DEBUG] [Thread-190927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:33:06.713 [DEBUG] [Thread-190927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:33:06.714 [DEBUG] [Thread-190927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:33:06.749 [INFO] [Thread-190927] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:33:06.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:33:07.054 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:33:07.055 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:33:07.394 [DEBUG] [Thread-190927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:33:07.394 [DEBUG] [Thread-190927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:33:07.394 [DEBUG] [Thread-190927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:33:07.434 [DEBUG] [Thread-190927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:33:07.434 [DEBUG] [Thread-190927] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:33:07.438 [DEBUG] [Thread-190927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:33:07.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:33:07.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:33:07.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:33:07.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:33:07.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:33:07.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:33:07.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:33:07.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:33:07.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:33:07.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.731018 -999.00  +12.40  29.38     54   +3.40 1 1 1 1 1   855    0 7.98 -45.16 ----- 28.1 29.4 178.3 39.8 13.2 -26.2 13.1 -25.5 13.0 -24.1 13.3 -25.4
2026-02-14T19:33:07.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:33:07.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:33:07.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.731018
2026-02-14T19:33:07.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:33:07.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:33:07.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:33:07.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:33:07.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:33:07.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:32:53', tmtdew=10.49, humidity=48.93, cloud=0.0, wind=40.18, temperature=12.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:32:39.955', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:33:07.459 [DEBUG] [Thread-190927] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:33:07.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-14T19:33:07.555 [DEBUG] [Thread-190930] [transport.py] [_log()] starting thread (client mode): 0xa57d56c0
2026-02-14T19:33:07.555 [DEBUG] [Thread-190930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:33:07.570 [DEBUG] [Thread-190930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:33:07.570 [INFO] [Thread-190930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:33:07.578 [DEBUG] [Thread-190930] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:33:07.578 [DEBUG] [Thread-190930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:33:07.578 [DEBUG] [Thread-190930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:33:07.578 [DEBUG] [Thread-190930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:33:07.578 [DEBUG] [Thread-190930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:33:07.578 [DEBUG] [Thread-190930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:33:07.578 [DEBUG] [Thread-190930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:33:07.578 [DEBUG] [Thread-190930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:33:07.578 [DEBUG] [Thread-190930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:33:07.578 [DEBUG] [Thread-190930] [transport.py] [_log()] client lang: <none>
2026-02-14T19:33:07.578 [DEBUG] [Thread-190930] [transport.py] [_log()] server lang: <none>
2026-02-14T19:33:07.579 [DEBUG] [Thread-190930] [transport.py] [_log()] kex follows: False
2026-02-14T19:33:07.579 [DEBUG] [Thread-190930] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:33:07.579 [DEBUG] [Thread-190930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:33:07.579 [DEBUG] [Thread-190930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:33:07.579 [DEBUG] [Thread-190930] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:33:07.579 [DEBUG] [Thread-190930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:33:07.579 [DEBUG] [Thread-190930] [transport.py] [_log()] Compression: none
2026-02-14T19:33:07.579 [DEBUG] [Thread-190930] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:33:07.638 [DEBUG] [Thread-190930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:33:07.638 [DEBUG] [Thread-190930] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:33:07.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:33:07.639 [DEBUG] [Thread-190930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:33:07.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:33:07.694 [DEBUG] [Thread-190930] [transport.py] [_log()] userauth is OK
2026-02-14T19:33:07.694 [DEBUG] [Thread-190930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:33:07.694 [DEBUG] [Thread-190930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:33:07.694 [DEBUG] [Thread-190930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:33:07.694 [DEBUG] [Thread-190930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:33:07.713 [INFO] [Thread-190930] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:33:07.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-14T19:33:07.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:33:08.534 [DEBUG] [Thread-190930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:33:08.534 [DEBUG] [Thread-190930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:33:08.582 [DEBUG] [Thread-190930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:33:08.582 [DEBUG] [Thread-190930] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:33:08.591 [DEBUG] [Thread-190930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:33:08.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:33:08.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-14T19:33:08.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-14T19:33:08.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:33:08.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:33:08.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:33:08.625 [DEBUG] [Thread-190930] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:33:09.772 [DEBUG] [Thread-190932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:33:16.888 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:33:22.837 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:33:24.828 [DEBUG] [Thread-190933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:33:28.471 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:33:33.570 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:33:38.343 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:33:38.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:33:38.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:33:38.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-14T19:33:39.159 [DEBUG] [Thread-190934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:33:39.862 [DEBUG] [Thread-190935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:33:40.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 33, 30), 10.48, 48.94, 0.0, 39.66, 12.53, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:33:40.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:33:30
2026-02-14T19:33:40.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:33:41.064 [DEBUG] [Thread-190936] [transport.py] [_log()] starting thread (client mode): 0xa2d78070
2026-02-14T19:33:41.064 [DEBUG] [Thread-190936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:33:41.083 [DEBUG] [Thread-190936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:33:41.083 [INFO] [Thread-190936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:33:41.086 [DEBUG] [Thread-190936] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:33:41.087 [DEBUG] [Thread-190936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:33:41.087 [DEBUG] [Thread-190936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:33:41.087 [DEBUG] [Thread-190936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:33:41.087 [DEBUG] [Thread-190936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:33:41.087 [DEBUG] [Thread-190936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:33:41.087 [DEBUG] [Thread-190936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:33:41.087 [DEBUG] [Thread-190936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:33:41.087 [DEBUG] [Thread-190936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:33:41.087 [DEBUG] [Thread-190936] [transport.py] [_log()] client lang: <none>
2026-02-14T19:33:41.087 [DEBUG] [Thread-190936] [transport.py] [_log()] server lang: <none>
2026-02-14T19:33:41.087 [DEBUG] [Thread-190936] [transport.py] [_log()] kex follows: False
2026-02-14T19:33:41.087 [DEBUG] [Thread-190936] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:33:41.087 [DEBUG] [Thread-190936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:33:41.087 [DEBUG] [Thread-190936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:33:41.087 [DEBUG] [Thread-190936] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:33:41.087 [DEBUG] [Thread-190936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:33:41.087 [DEBUG] [Thread-190936] [transport.py] [_log()] Compression: none
2026-02-14T19:33:41.087 [DEBUG] [Thread-190936] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:33:41.106 [DEBUG] [Thread-190936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:33:41.107 [DEBUG] [Thread-190936] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:33:41.107 [DEBUG] [Thread-190936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:33:41.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:33:41.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:33:41.148 [DEBUG] [Thread-190936] [transport.py] [_log()] userauth is OK
2026-02-14T19:33:41.149 [DEBUG] [Thread-190936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:33:41.149 [DEBUG] [Thread-190936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:33:41.149 [DEBUG] [Thread-190936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:33:41.149 [DEBUG] [Thread-190936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:33:41.172 [INFO] [Thread-190936] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:33:41.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:33:41.818 [DEBUG] [Thread-190936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:33:41.819 [DEBUG] [Thread-190936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:33:41.819 [DEBUG] [Thread-190936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:33:41.859 [DEBUG] [Thread-190936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:33:41.859 [DEBUG] [Thread-190936] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:33:41.863 [DEBUG] [Thread-190936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:33:41.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:33:41.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:33:41.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:33:41.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:33:41.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:33:41.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:33:41.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:33:41.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:33:41.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:33:41.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.731365 -999.00  +12.40  32.31     54   +3.40 1 1 2 1 1   852    0 8.20 -41.39 ----- 25.3 32.3 174.6 42.5 13.2 -26.2 13.0 -25.4 12.9 -24.2 13.3 -25.4
2026-02-14T19:33:41.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:33:41.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:33:41.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.731365
2026-02-14T19:33:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:33:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:33:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:33:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:33:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:33:41.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:33:30', tmtdew=10.48, humidity=48.94, cloud=0.0, wind=39.66, temperature=12.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:33:09.936', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:33:41.891 [DEBUG] [Thread-190936] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:33:41.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-14T19:33:41.990 [DEBUG] [Thread-190939] [transport.py] [_log()] starting thread (client mode): 0xa2d6c3a0
2026-02-14T19:33:41.990 [DEBUG] [Thread-190939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:33:42.004 [DEBUG] [Thread-190939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:33:42.004 [INFO] [Thread-190939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:33:42.011 [DEBUG] [Thread-190939] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:33:42.012 [DEBUG] [Thread-190939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:33:42.012 [DEBUG] [Thread-190939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:33:42.012 [DEBUG] [Thread-190939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:33:42.012 [DEBUG] [Thread-190939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:33:42.012 [DEBUG] [Thread-190939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:33:42.012 [DEBUG] [Thread-190939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:33:42.012 [DEBUG] [Thread-190939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:33:42.012 [DEBUG] [Thread-190939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:33:42.013 [DEBUG] [Thread-190939] [transport.py] [_log()] client lang: <none>
2026-02-14T19:33:42.013 [DEBUG] [Thread-190939] [transport.py] [_log()] server lang: <none>
2026-02-14T19:33:42.013 [DEBUG] [Thread-190939] [transport.py] [_log()] kex follows: False
2026-02-14T19:33:42.013 [DEBUG] [Thread-190939] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:33:42.013 [DEBUG] [Thread-190939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:33:42.013 [DEBUG] [Thread-190939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:33:42.013 [DEBUG] [Thread-190939] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:33:42.013 [DEBUG] [Thread-190939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:33:42.014 [DEBUG] [Thread-190939] [transport.py] [_log()] Compression: none
2026-02-14T19:33:42.014 [DEBUG] [Thread-190939] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:33:42.070 [DEBUG] [Thread-190939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:33:42.070 [DEBUG] [Thread-190939] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:33:42.071 [DEBUG] [Thread-190939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:33:42.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:33:42.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:33:42.126 [DEBUG] [Thread-190939] [transport.py] [_log()] userauth is OK
2026-02-14T19:33:42.126 [DEBUG] [Thread-190939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:33:42.126 [DEBUG] [Thread-190939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:33:42.126 [DEBUG] [Thread-190939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:33:42.127 [DEBUG] [Thread-190939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:33:42.147 [INFO] [Thread-190939] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:33:42.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-14T19:33:42.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:33:42.958 [DEBUG] [Thread-190939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:33:42.958 [DEBUG] [Thread-190939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:33:43.006 [DEBUG] [Thread-190939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:33:43.006 [DEBUG] [Thread-190939] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:33:43.016 [DEBUG] [Thread-190939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:33:43.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:33:43.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:33:43.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-14T19:33:43.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:33:43.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:33:43.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:33:43.049 [DEBUG] [Thread-190939] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:33:43.110 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:33:47.633 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:33:52.540 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:33:54.897 [DEBUG] [Thread-190941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:33:57.527 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:34:02.726 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:34:08.871 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:34:09.946 [DEBUG] [Thread-190942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:34:12.661 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:34:12.662 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:34:13.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:34:13.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:34:13.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-14T19:34:14.887 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:34:14.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 34, 5), 10.48, 48.96, 0.0, 40.18, 12.53, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:34:14.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:34:05
2026-02-14T19:34:15.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:34:15.478 [DEBUG] [Thread-190943] [transport.py] [_log()] starting thread (client mode): 0xa2d6f850
2026-02-14T19:34:15.478 [DEBUG] [Thread-190943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:34:15.498 [DEBUG] [Thread-190943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:34:15.498 [INFO] [Thread-190943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:34:15.502 [DEBUG] [Thread-190943] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:34:15.502 [DEBUG] [Thread-190943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:34:15.502 [DEBUG] [Thread-190943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:34:15.502 [DEBUG] [Thread-190943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:34:15.502 [DEBUG] [Thread-190943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:34:15.502 [DEBUG] [Thread-190943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:34:15.502 [DEBUG] [Thread-190943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:34:15.502 [DEBUG] [Thread-190943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:34:15.502 [DEBUG] [Thread-190943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:34:15.502 [DEBUG] [Thread-190943] [transport.py] [_log()] client lang: <none>
2026-02-14T19:34:15.502 [DEBUG] [Thread-190943] [transport.py] [_log()] server lang: <none>
2026-02-14T19:34:15.502 [DEBUG] [Thread-190943] [transport.py] [_log()] kex follows: False
2026-02-14T19:34:15.502 [DEBUG] [Thread-190943] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:34:15.502 [DEBUG] [Thread-190943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:34:15.502 [DEBUG] [Thread-190943] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:34:15.502 [DEBUG] [Thread-190943] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:34:15.502 [DEBUG] [Thread-190943] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:34:15.502 [DEBUG] [Thread-190943] [transport.py] [_log()] Compression: none
2026-02-14T19:34:15.502 [DEBUG] [Thread-190943] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:34:15.521 [DEBUG] [Thread-190943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:34:15.522 [DEBUG] [Thread-190943] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:34:15.522 [DEBUG] [Thread-190943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:34:15.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:34:15.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:34:15.524 [DEBUG] [Thread-190943] [transport.py] [_log()] userauth is OK
2026-02-14T19:34:15.524 [DEBUG] [Thread-190943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:34:15.525 [DEBUG] [Thread-190943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:34:15.525 [DEBUG] [Thread-190943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:34:15.525 [DEBUG] [Thread-190943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:34:15.557 [INFO] [Thread-190943] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:34:15.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:34:16.204 [DEBUG] [Thread-190943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:34:16.204 [DEBUG] [Thread-190943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:34:16.204 [DEBUG] [Thread-190943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:34:16.245 [DEBUG] [Thread-190943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:34:16.245 [DEBUG] [Thread-190943] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:34:16.249 [DEBUG] [Thread-190943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:34:16.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:34:16.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:34:16.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:34:16.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:34:16.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:34:16.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:34:16.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:34:16.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:34:16.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:34:16.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.731712 -999.00  +12.30  29.26     54   +3.40 1 1 1 1 1   848    0 8.26 -41.87 ----- 30.6 29.3 172.7 33.2 13.2 -26.1 13.1 -25.0 12.9 -24.0 13.2 -25.1
2026-02-14T19:34:16.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:34:16.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:34:16.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.731712
2026-02-14T19:34:16.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:34:16.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:34:16.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:34:16.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:34:16.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:34:16.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:34:05', tmtdew=10.48, humidity=48.96, cloud=0.0, wind=40.18, temperature=12.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:33:39.917', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:34:16.276 [DEBUG] [Thread-190943] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:34:16.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-14T19:34:16.374 [DEBUG] [Thread-190946] [transport.py] [_log()] starting thread (client mode): 0xa2d6fe80
2026-02-14T19:34:16.374 [DEBUG] [Thread-190946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:34:16.388 [DEBUG] [Thread-190946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:34:16.388 [INFO] [Thread-190946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:34:16.396 [DEBUG] [Thread-190946] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:34:16.396 [DEBUG] [Thread-190946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:34:16.396 [DEBUG] [Thread-190946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:34:16.396 [DEBUG] [Thread-190946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:34:16.396 [DEBUG] [Thread-190946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:34:16.396 [DEBUG] [Thread-190946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:34:16.396 [DEBUG] [Thread-190946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:34:16.396 [DEBUG] [Thread-190946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:34:16.396 [DEBUG] [Thread-190946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:34:16.396 [DEBUG] [Thread-190946] [transport.py] [_log()] client lang: <none>
2026-02-14T19:34:16.396 [DEBUG] [Thread-190946] [transport.py] [_log()] server lang: <none>
2026-02-14T19:34:16.396 [DEBUG] [Thread-190946] [transport.py] [_log()] kex follows: False
2026-02-14T19:34:16.396 [DEBUG] [Thread-190946] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:34:16.396 [DEBUG] [Thread-190946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:34:16.396 [DEBUG] [Thread-190946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:34:16.396 [DEBUG] [Thread-190946] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:34:16.396 [DEBUG] [Thread-190946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:34:16.396 [DEBUG] [Thread-190946] [transport.py] [_log()] Compression: none
2026-02-14T19:34:16.396 [DEBUG] [Thread-190946] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:34:16.452 [DEBUG] [Thread-190946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:34:16.453 [DEBUG] [Thread-190946] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:34:16.453 [DEBUG] [Thread-190946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:34:16.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:34:16.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:34:16.509 [DEBUG] [Thread-190946] [transport.py] [_log()] userauth is OK
2026-02-14T19:34:16.509 [DEBUG] [Thread-190946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:34:16.509 [DEBUG] [Thread-190946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:34:16.509 [DEBUG] [Thread-190946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:34:16.509 [DEBUG] [Thread-190946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:34:16.524 [INFO] [Thread-190946] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:34:16.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-14T19:34:16.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:34:17.322 [DEBUG] [Thread-190946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:34:17.322 [DEBUG] [Thread-190946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:34:17.370 [DEBUG] [Thread-190946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:34:17.370 [DEBUG] [Thread-190946] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:34:17.379 [DEBUG] [Thread-190946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:34:17.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:34:17.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-14T19:34:17.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-14T19:34:17.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:34:17.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:34:17.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:34:17.414 [DEBUG] [Thread-190946] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:34:21.132 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:34:24.978 [DEBUG] [Thread-190948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:34:27.070 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:34:33.246 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:34:38.901 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:34:39.214 [DEBUG] [Thread-190949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:34:40.020 [DEBUG] [Thread-190950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:34:44.634 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:34:47.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:34:47.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:34:47.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-14T19:34:49.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 34, 40), 10.74, 47.99, 0.0, 42.94, 12.87, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:34:49.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:34:40
2026-02-14T19:34:49.422 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:34:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:34:49.784 [DEBUG] [Thread-190951] [transport.py] [_log()] starting thread (client mode): 0xa2d6ece0
2026-02-14T19:34:49.784 [DEBUG] [Thread-190951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:34:49.804 [DEBUG] [Thread-190951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:34:49.804 [INFO] [Thread-190951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:34:49.807 [DEBUG] [Thread-190951] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:34:49.807 [DEBUG] [Thread-190951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:34:49.807 [DEBUG] [Thread-190951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:34:49.807 [DEBUG] [Thread-190951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:34:49.807 [DEBUG] [Thread-190951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:34:49.807 [DEBUG] [Thread-190951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:34:49.807 [DEBUG] [Thread-190951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:34:49.808 [DEBUG] [Thread-190951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:34:49.808 [DEBUG] [Thread-190951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:34:49.808 [DEBUG] [Thread-190951] [transport.py] [_log()] client lang: <none>
2026-02-14T19:34:49.808 [DEBUG] [Thread-190951] [transport.py] [_log()] server lang: <none>
2026-02-14T19:34:49.808 [DEBUG] [Thread-190951] [transport.py] [_log()] kex follows: False
2026-02-14T19:34:49.808 [DEBUG] [Thread-190951] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:34:49.808 [DEBUG] [Thread-190951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:34:49.808 [DEBUG] [Thread-190951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:34:49.808 [DEBUG] [Thread-190951] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:34:49.808 [DEBUG] [Thread-190951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:34:49.808 [DEBUG] [Thread-190951] [transport.py] [_log()] Compression: none
2026-02-14T19:34:49.808 [DEBUG] [Thread-190951] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:34:49.827 [DEBUG] [Thread-190951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:34:49.827 [DEBUG] [Thread-190951] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:34:49.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:34:49.828 [DEBUG] [Thread-190951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:34:49.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:34:49.831 [DEBUG] [Thread-190951] [transport.py] [_log()] userauth is OK
2026-02-14T19:34:49.831 [DEBUG] [Thread-190951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:34:49.831 [DEBUG] [Thread-190951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:34:49.831 [DEBUG] [Thread-190951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:34:49.832 [DEBUG] [Thread-190951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:34:49.849 [INFO] [Thread-190951] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:34:49.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:34:50.478 [DEBUG] [Thread-190951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:34:50.478 [DEBUG] [Thread-190951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:34:50.478 [DEBUG] [Thread-190951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:34:50.519 [DEBUG] [Thread-190951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:34:50.519 [DEBUG] [Thread-190951] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:34:50.522 [DEBUG] [Thread-190951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:34:50.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:34:50.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:34:50.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:34:50.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:34:50.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:34:50.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:34:50.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:34:50.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:34:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:34:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.732059 -999.00  +12.30  31.52     54   +3.40 1 1 2 1 1   844    0 8.14 -39.27 ----- 33.8 31.5 170.5 43.8 13.2 -26.0 13.0 -25.1 12.9 -24.0 13.2 -25.2
2026-02-14T19:34:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:34:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:34:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.732059
2026-02-14T19:34:50.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:34:50.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:34:50.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:34:50.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:34:50.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:34:50.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:34:40', tmtdew=10.74, humidity=47.99, cloud=0.0, wind=42.94, temperature=12.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:34:09.898', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:34:50.551 [DEBUG] [Thread-190951] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:34:50.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T19:34:50.652 [DEBUG] [Thread-190954] [transport.py] [_log()] starting thread (client mode): 0xa2d6fb80
2026-02-14T19:34:50.652 [DEBUG] [Thread-190954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:34:50.667 [DEBUG] [Thread-190954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:34:50.667 [INFO] [Thread-190954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:34:50.675 [DEBUG] [Thread-190954] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:34:50.675 [DEBUG] [Thread-190954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:34:50.675 [DEBUG] [Thread-190954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:34:50.675 [DEBUG] [Thread-190954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:34:50.675 [DEBUG] [Thread-190954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:34:50.675 [DEBUG] [Thread-190954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:34:50.675 [DEBUG] [Thread-190954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:34:50.675 [DEBUG] [Thread-190954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:34:50.675 [DEBUG] [Thread-190954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:34:50.675 [DEBUG] [Thread-190954] [transport.py] [_log()] client lang: <none>
2026-02-14T19:34:50.675 [DEBUG] [Thread-190954] [transport.py] [_log()] server lang: <none>
2026-02-14T19:34:50.675 [DEBUG] [Thread-190954] [transport.py] [_log()] kex follows: False
2026-02-14T19:34:50.675 [DEBUG] [Thread-190954] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:34:50.675 [DEBUG] [Thread-190954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:34:50.675 [DEBUG] [Thread-190954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:34:50.675 [DEBUG] [Thread-190954] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:34:50.675 [DEBUG] [Thread-190954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:34:50.675 [DEBUG] [Thread-190954] [transport.py] [_log()] Compression: none
2026-02-14T19:34:50.675 [DEBUG] [Thread-190954] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:34:50.731 [DEBUG] [Thread-190954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:34:50.731 [DEBUG] [Thread-190954] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:34:50.731 [DEBUG] [Thread-190954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:34:50.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:34:50.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:34:50.788 [DEBUG] [Thread-190954] [transport.py] [_log()] userauth is OK
2026-02-14T19:34:50.788 [DEBUG] [Thread-190954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:34:50.788 [DEBUG] [Thread-190954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:34:50.788 [DEBUG] [Thread-190954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:34:50.788 [DEBUG] [Thread-190954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:34:50.802 [INFO] [Thread-190954] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:34:50.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-14T19:34:50.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:34:51.623 [DEBUG] [Thread-190954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:34:51.623 [DEBUG] [Thread-190954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:34:51.671 [DEBUG] [Thread-190954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:34:51.671 [DEBUG] [Thread-190954] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:34:51.679 [DEBUG] [Thread-190954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:34:51.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:34:51.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-14T19:34:51.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:34:51.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:34:51.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:34:51.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:34:51.713 [DEBUG] [Thread-190954] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:34:55.058 [DEBUG] [Thread-190956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:34:55.638 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:35:10.109 [DEBUG] [Thread-190957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:35:17.018 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:35:17.019 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:35:21.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:35:21.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:35:21.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-14T19:35:24.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 35, 15), 10.4, 49.04, 0.0, 39.01, 12.5, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:35:24.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:35:15
2026-02-14T19:35:24.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:35:24.660 [DEBUG] [Thread-190958] [transport.py] [_log()] starting thread (client mode): 0xa2d6d2d0
2026-02-14T19:35:24.660 [DEBUG] [Thread-190958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:35:24.680 [DEBUG] [Thread-190958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:35:24.680 [INFO] [Thread-190958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:35:24.683 [DEBUG] [Thread-190958] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:35:24.683 [DEBUG] [Thread-190958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:35:24.683 [DEBUG] [Thread-190958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:35:24.683 [DEBUG] [Thread-190958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:35:24.683 [DEBUG] [Thread-190958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:35:24.683 [DEBUG] [Thread-190958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:35:24.683 [DEBUG] [Thread-190958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:35:24.683 [DEBUG] [Thread-190958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:35:24.683 [DEBUG] [Thread-190958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:35:24.683 [DEBUG] [Thread-190958] [transport.py] [_log()] client lang: <none>
2026-02-14T19:35:24.683 [DEBUG] [Thread-190958] [transport.py] [_log()] server lang: <none>
2026-02-14T19:35:24.684 [DEBUG] [Thread-190958] [transport.py] [_log()] kex follows: False
2026-02-14T19:35:24.684 [DEBUG] [Thread-190958] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:35:24.684 [DEBUG] [Thread-190958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:35:24.684 [DEBUG] [Thread-190958] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:35:24.684 [DEBUG] [Thread-190958] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:35:24.684 [DEBUG] [Thread-190958] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:35:24.684 [DEBUG] [Thread-190958] [transport.py] [_log()] Compression: none
2026-02-14T19:35:24.684 [DEBUG] [Thread-190958] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:35:24.700 [DEBUG] [Thread-190958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:35:24.701 [DEBUG] [Thread-190958] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:35:24.701 [DEBUG] [Thread-190958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:35:24.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:35:24.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:35:24.703 [DEBUG] [Thread-190958] [transport.py] [_log()] userauth is OK
2026-02-14T19:35:24.704 [DEBUG] [Thread-190958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:35:24.704 [DEBUG] [Thread-190958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:35:24.704 [DEBUG] [Thread-190958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:35:24.704 [DEBUG] [Thread-190958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:35:24.727 [INFO] [Thread-190958] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:35:24.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:35:25.141 [DEBUG] [Thread-190960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:35:25.363 [DEBUG] [Thread-190958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:35:25.363 [DEBUG] [Thread-190958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:35:25.363 [DEBUG] [Thread-190958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:35:25.404 [DEBUG] [Thread-190958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:35:25.404 [DEBUG] [Thread-190958] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:35:25.406 [DEBUG] [Thread-190958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:35:25.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:35:25.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:35:25.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:35:25.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:35:25.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:35:25.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:35:25.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:35:25.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:35:25.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:35:25.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.732754 -999.00  +12.30  30.09     54   +3.40 1 1 2 1 1   835    0 8.04 -41.10 ----- 29.2 30.1 179.4 39.7 13.2 -26.0 13.0 -25.1 12.8 -24.0 13.2 -25.3
2026-02-14T19:35:25.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:35:25.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:35:25.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.732754
2026-02-14T19:35:25.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:35:25.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:35:25.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:35:25.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:35:25.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:35:25.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:35:15', tmtdew=10.4, humidity=49.04, cloud=0.0, wind=39.01, temperature=12.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:35:09.946', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:35:25.432 [DEBUG] [Thread-190958] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:35:25.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-14T19:35:25.529 [DEBUG] [Thread-190962] [transport.py] [_log()] starting thread (client mode): 0xa57d7cd0
2026-02-14T19:35:25.529 [DEBUG] [Thread-190962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:35:25.544 [DEBUG] [Thread-190962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:35:25.544 [INFO] [Thread-190962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:35:25.551 [DEBUG] [Thread-190962] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:35:25.552 [DEBUG] [Thread-190962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:35:25.552 [DEBUG] [Thread-190962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:35:25.552 [DEBUG] [Thread-190962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:35:25.552 [DEBUG] [Thread-190962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:35:25.552 [DEBUG] [Thread-190962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:35:25.552 [DEBUG] [Thread-190962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:35:25.552 [DEBUG] [Thread-190962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:35:25.552 [DEBUG] [Thread-190962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:35:25.552 [DEBUG] [Thread-190962] [transport.py] [_log()] client lang: <none>
2026-02-14T19:35:25.552 [DEBUG] [Thread-190962] [transport.py] [_log()] server lang: <none>
2026-02-14T19:35:25.552 [DEBUG] [Thread-190962] [transport.py] [_log()] kex follows: False
2026-02-14T19:35:25.552 [DEBUG] [Thread-190962] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:35:25.552 [DEBUG] [Thread-190962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:35:25.552 [DEBUG] [Thread-190962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:35:25.552 [DEBUG] [Thread-190962] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:35:25.552 [DEBUG] [Thread-190962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:35:25.552 [DEBUG] [Thread-190962] [transport.py] [_log()] Compression: none
2026-02-14T19:35:25.552 [DEBUG] [Thread-190962] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:35:25.614 [DEBUG] [Thread-190962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:35:25.614 [DEBUG] [Thread-190962] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:35:25.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:35:25.615 [DEBUG] [Thread-190962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:35:25.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:35:25.673 [DEBUG] [Thread-190962] [transport.py] [_log()] userauth is OK
2026-02-14T19:35:25.673 [DEBUG] [Thread-190962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:35:25.673 [DEBUG] [Thread-190962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:35:25.673 [DEBUG] [Thread-190962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:35:25.673 [DEBUG] [Thread-190962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:35:25.692 [INFO] [Thread-190962] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:35:25.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T19:35:25.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:35:26.502 [DEBUG] [Thread-190962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:35:26.503 [DEBUG] [Thread-190962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:35:26.554 [DEBUG] [Thread-190962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:35:26.554 [DEBUG] [Thread-190962] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:35:26.567 [DEBUG] [Thread-190962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:35:26.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:35:26.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:35:26.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-14T19:35:26.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:35:26.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:35:26.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:35:26.602 [DEBUG] [Thread-190962] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:35:39.292 [DEBUG] [Thread-190964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:35:40.177 [DEBUG] [Thread-190965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:35:55.225 [DEBUG] [Thread-190966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:35:56.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:35:56.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:35:56.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-14T19:35:58.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 35, 50), 10.4, 49.04, 0.0, 38.32, 12.48, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:35:58.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:35:50
2026-02-14T19:35:58.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:35:59.089 [DEBUG] [Thread-190967] [transport.py] [_log()] starting thread (client mode): 0xa57d4e20
2026-02-14T19:35:59.089 [DEBUG] [Thread-190967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:35:59.109 [DEBUG] [Thread-190967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:35:59.109 [INFO] [Thread-190967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:35:59.112 [DEBUG] [Thread-190967] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:35:59.112 [DEBUG] [Thread-190967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:35:59.112 [DEBUG] [Thread-190967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:35:59.112 [DEBUG] [Thread-190967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:35:59.112 [DEBUG] [Thread-190967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:35:59.112 [DEBUG] [Thread-190967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:35:59.112 [DEBUG] [Thread-190967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:35:59.112 [DEBUG] [Thread-190967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:35:59.113 [DEBUG] [Thread-190967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:35:59.113 [DEBUG] [Thread-190967] [transport.py] [_log()] client lang: <none>
2026-02-14T19:35:59.113 [DEBUG] [Thread-190967] [transport.py] [_log()] server lang: <none>
2026-02-14T19:35:59.113 [DEBUG] [Thread-190967] [transport.py] [_log()] kex follows: False
2026-02-14T19:35:59.113 [DEBUG] [Thread-190967] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:35:59.113 [DEBUG] [Thread-190967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:35:59.113 [DEBUG] [Thread-190967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:35:59.113 [DEBUG] [Thread-190967] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:35:59.113 [DEBUG] [Thread-190967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:35:59.113 [DEBUG] [Thread-190967] [transport.py] [_log()] Compression: none
2026-02-14T19:35:59.113 [DEBUG] [Thread-190967] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:35:59.135 [DEBUG] [Thread-190967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:35:59.135 [DEBUG] [Thread-190967] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:35:59.136 [DEBUG] [Thread-190967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:35:59.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:35:59.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:35:59.138 [DEBUG] [Thread-190967] [transport.py] [_log()] userauth is OK
2026-02-14T19:35:59.138 [DEBUG] [Thread-190967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:35:59.139 [DEBUG] [Thread-190967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:35:59.139 [DEBUG] [Thread-190967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:35:59.139 [DEBUG] [Thread-190967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:35:59.165 [INFO] [Thread-190967] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:35:59.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:35:59.766 [DEBUG] [Thread-190967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:35:59.766 [DEBUG] [Thread-190967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:35:59.766 [DEBUG] [Thread-190967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:35:59.807 [DEBUG] [Thread-190967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:35:59.807 [DEBUG] [Thread-190967] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:35:59.810 [DEBUG] [Thread-190967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:35:59.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:35:59.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:35:59.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:35:59.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:35:59.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:35:59.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:35:59.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:35:59.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:35:59.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:35:59.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.733101 -999.00  +12.30  24.65     54   +3.40 1 1 1 1 1   829    0 8.24 -39.13 ----- 27.2 24.6 162.6 39.7 13.1 -25.9 12.9 -25.2 12.8 -23.8 13.1 -25.1
2026-02-14T19:35:59.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:35:59.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:35:59.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.733101
2026-02-14T19:35:59.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:35:59.837 [DEBUG] [Thread-190967] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:35:59.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:35:59.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:35:59.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:35:59.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:35:59.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:35:50', tmtdew=10.4, humidity=49.04, cloud=0.0, wind=38.32, temperature=12.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:35:39.926', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:35:59.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-14T19:35:59.926 [DEBUG] [Thread-190970] [transport.py] [_log()] starting thread (client mode): 0xa57d43d0
2026-02-14T19:35:59.926 [DEBUG] [Thread-190970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:35:59.944 [DEBUG] [Thread-190970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:35:59.944 [INFO] [Thread-190970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:35:59.951 [DEBUG] [Thread-190970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:35:59.951 [DEBUG] [Thread-190970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:35:59.951 [DEBUG] [Thread-190970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:35:59.951 [DEBUG] [Thread-190970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:35:59.951 [DEBUG] [Thread-190970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:35:59.951 [DEBUG] [Thread-190970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:35:59.951 [DEBUG] [Thread-190970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:35:59.951 [DEBUG] [Thread-190970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:35:59.951 [DEBUG] [Thread-190970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:35:59.951 [DEBUG] [Thread-190970] [transport.py] [_log()] client lang: <none>
2026-02-14T19:35:59.951 [DEBUG] [Thread-190970] [transport.py] [_log()] server lang: <none>
2026-02-14T19:35:59.951 [DEBUG] [Thread-190970] [transport.py] [_log()] kex follows: False
2026-02-14T19:35:59.951 [DEBUG] [Thread-190970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:35:59.951 [DEBUG] [Thread-190970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:35:59.951 [DEBUG] [Thread-190970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:35:59.951 [DEBUG] [Thread-190970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:35:59.951 [DEBUG] [Thread-190970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:35:59.952 [DEBUG] [Thread-190970] [transport.py] [_log()] Compression: none
2026-02-14T19:35:59.952 [DEBUG] [Thread-190970] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:36:00.009 [DEBUG] [Thread-190970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:36:00.009 [DEBUG] [Thread-190970] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:36:00.010 [DEBUG] [Thread-190970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:36:00.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:36:00.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:36:00.064 [DEBUG] [Thread-190970] [transport.py] [_log()] userauth is OK
2026-02-14T19:36:00.064 [DEBUG] [Thread-190970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:36:00.064 [DEBUG] [Thread-190970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:36:00.064 [DEBUG] [Thread-190970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:36:00.065 [DEBUG] [Thread-190970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:36:00.083 [INFO] [Thread-190970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:36:00.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-14T19:36:00.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:36:00.923 [DEBUG] [Thread-190970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:36:00.924 [DEBUG] [Thread-190970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:36:00.971 [DEBUG] [Thread-190970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:36:00.972 [DEBUG] [Thread-190970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:36:00.981 [DEBUG] [Thread-190970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:36:00.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:36:00.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-14T19:36:01.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-14T19:36:01.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:36:01.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:36:01.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:36:01.018 [DEBUG] [Thread-190970] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:36:10.266 [DEBUG] [Thread-190972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:36:17.346 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:36:22.118 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:36:22.120 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:36:25.317 [DEBUG] [Thread-190973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:36:31.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:36:31.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:36:31.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-14T19:36:31.852 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:36:32.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 35, 50), 10.4, 49.04, 0.0, 38.32, 12.48, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:36:32.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:35:50
2026-02-14T19:36:33.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:36:33.495 [DEBUG] [Thread-190974] [transport.py] [_log()] starting thread (client mode): 0xa57d5720
2026-02-14T19:36:33.495 [DEBUG] [Thread-190974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:36:33.516 [DEBUG] [Thread-190974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:36:33.516 [INFO] [Thread-190974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:36:33.519 [DEBUG] [Thread-190974] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:36:33.519 [DEBUG] [Thread-190974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:36:33.519 [DEBUG] [Thread-190974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:36:33.519 [DEBUG] [Thread-190974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:36:33.519 [DEBUG] [Thread-190974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:36:33.519 [DEBUG] [Thread-190974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:36:33.519 [DEBUG] [Thread-190974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:36:33.519 [DEBUG] [Thread-190974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:36:33.520 [DEBUG] [Thread-190974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:36:33.520 [DEBUG] [Thread-190974] [transport.py] [_log()] client lang: <none>
2026-02-14T19:36:33.520 [DEBUG] [Thread-190974] [transport.py] [_log()] server lang: <none>
2026-02-14T19:36:33.520 [DEBUG] [Thread-190974] [transport.py] [_log()] kex follows: False
2026-02-14T19:36:33.520 [DEBUG] [Thread-190974] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:36:33.520 [DEBUG] [Thread-190974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:36:33.520 [DEBUG] [Thread-190974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:36:33.520 [DEBUG] [Thread-190974] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:36:33.520 [DEBUG] [Thread-190974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:36:33.520 [DEBUG] [Thread-190974] [transport.py] [_log()] Compression: none
2026-02-14T19:36:33.520 [DEBUG] [Thread-190974] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:36:33.537 [DEBUG] [Thread-190974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:36:33.538 [DEBUG] [Thread-190974] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:36:33.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:36:33.539 [DEBUG] [Thread-190974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:36:33.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:36:33.581 [DEBUG] [Thread-190974] [transport.py] [_log()] userauth is OK
2026-02-14T19:36:33.581 [DEBUG] [Thread-190974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:36:33.581 [DEBUG] [Thread-190974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:36:33.582 [DEBUG] [Thread-190974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:36:33.582 [DEBUG] [Thread-190974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:36:33.618 [INFO] [Thread-190974] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:36:33.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:36:34.275 [DEBUG] [Thread-190974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:36:34.275 [DEBUG] [Thread-190974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:36:34.276 [DEBUG] [Thread-190974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:36:34.316 [DEBUG] [Thread-190974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:36:34.317 [DEBUG] [Thread-190974] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:36:34.319 [DEBUG] [Thread-190974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:36:34.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:36:34.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:36:34.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:36:34.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:36:34.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:36:34.343 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:36:34.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:36:34.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:36:34.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:36:34.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.733448 -999.00  +12.30  22.76     54   +3.40 1 1 1 1 1   824    0 8.29 -39.06 ----- 21.9 22.8 170.4 34.5 13.1 -26.0 12.9 -24.8 12.8 -23.9 13.1 -25.1
2026-02-14T19:36:34.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:36:34.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:36:34.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.733448
2026-02-14T19:36:34.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:36:34.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:36:34.345 [DEBUG] [Thread-190974] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:36:34.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:36:34.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:36:34.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:36:34.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:35:50', tmtdew=10.4, humidity=49.04, cloud=0.0, wind=38.32, temperature=12.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:36:09.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:36:34.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-14T19:36:34.438 [DEBUG] [Thread-190977] [transport.py] [_log()] starting thread (client mode): 0xa57c3940
2026-02-14T19:36:34.438 [DEBUG] [Thread-190977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:36:34.453 [DEBUG] [Thread-190977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:36:34.454 [INFO] [Thread-190977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:36:34.461 [DEBUG] [Thread-190977] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:36:34.461 [DEBUG] [Thread-190977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:36:34.461 [DEBUG] [Thread-190977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:36:34.461 [DEBUG] [Thread-190977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:36:34.461 [DEBUG] [Thread-190977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:36:34.461 [DEBUG] [Thread-190977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:36:34.461 [DEBUG] [Thread-190977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:36:34.461 [DEBUG] [Thread-190977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:36:34.461 [DEBUG] [Thread-190977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:36:34.461 [DEBUG] [Thread-190977] [transport.py] [_log()] client lang: <none>
2026-02-14T19:36:34.462 [DEBUG] [Thread-190977] [transport.py] [_log()] server lang: <none>
2026-02-14T19:36:34.462 [DEBUG] [Thread-190977] [transport.py] [_log()] kex follows: False
2026-02-14T19:36:34.462 [DEBUG] [Thread-190977] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:36:34.462 [DEBUG] [Thread-190977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:36:34.462 [DEBUG] [Thread-190977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:36:34.462 [DEBUG] [Thread-190977] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:36:34.462 [DEBUG] [Thread-190977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:36:34.462 [DEBUG] [Thread-190977] [transport.py] [_log()] Compression: none
2026-02-14T19:36:34.462 [DEBUG] [Thread-190977] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:36:34.522 [DEBUG] [Thread-190977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:36:34.522 [DEBUG] [Thread-190977] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:36:34.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:36:34.523 [DEBUG] [Thread-190977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:36:34.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:36:34.581 [DEBUG] [Thread-190977] [transport.py] [_log()] userauth is OK
2026-02-14T19:36:34.581 [DEBUG] [Thread-190977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:36:34.581 [DEBUG] [Thread-190977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:36:34.581 [DEBUG] [Thread-190977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:36:34.581 [DEBUG] [Thread-190977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:36:34.601 [INFO] [Thread-190977] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:36:34.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-14T19:36:34.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:36:35.438 [DEBUG] [Thread-190977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:36:35.438 [DEBUG] [Thread-190977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:36:35.487 [DEBUG] [Thread-190977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:36:35.487 [DEBUG] [Thread-190977] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:36:35.495 [DEBUG] [Thread-190977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:36:35.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:36:35.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-14T19:36:35.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:36:35.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:36:35.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:36:35.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:36:35.526 [DEBUG] [Thread-190977] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:36:37.686 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:36:39.362 [DEBUG] [Thread-190979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:36:40.352 [DEBUG] [Thread-190980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:36:42.589 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:36:49.404 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:36:55.412 [DEBUG] [Thread-190981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:36:55.531 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:37:02.934 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:37:05.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:37:05.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:37:05.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-14T19:37:07.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 36, 26), 10.4, 49.04, 0.0, 37.67, 12.47, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:37:07.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:36:26
2026-02-14T19:37:08.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:37:08.321 [DEBUG] [Thread-190982] [transport.py] [_log()] starting thread (client mode): 0xa57d49a0
2026-02-14T19:37:08.322 [DEBUG] [Thread-190982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:37:08.342 [DEBUG] [Thread-190982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:37:08.342 [INFO] [Thread-190982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:37:08.343 [DEBUG] [Thread-190982] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:37:08.343 [DEBUG] [Thread-190982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:37:08.343 [DEBUG] [Thread-190982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:37:08.343 [DEBUG] [Thread-190982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:37:08.343 [DEBUG] [Thread-190982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:37:08.344 [DEBUG] [Thread-190982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:37:08.344 [DEBUG] [Thread-190982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:37:08.344 [DEBUG] [Thread-190982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:37:08.344 [DEBUG] [Thread-190982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:37:08.344 [DEBUG] [Thread-190982] [transport.py] [_log()] client lang: <none>
2026-02-14T19:37:08.344 [DEBUG] [Thread-190982] [transport.py] [_log()] server lang: <none>
2026-02-14T19:37:08.344 [DEBUG] [Thread-190982] [transport.py] [_log()] kex follows: False
2026-02-14T19:37:08.344 [DEBUG] [Thread-190982] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:37:08.344 [DEBUG] [Thread-190982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:37:08.344 [DEBUG] [Thread-190982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:37:08.344 [DEBUG] [Thread-190982] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:37:08.344 [DEBUG] [Thread-190982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:37:08.344 [DEBUG] [Thread-190982] [transport.py] [_log()] Compression: none
2026-02-14T19:37:08.344 [DEBUG] [Thread-190982] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:37:08.351 [DEBUG] [Thread-190982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:37:08.351 [DEBUG] [Thread-190982] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:37:08.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:37:08.351 [DEBUG] [Thread-190982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:37:08.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:37:08.352 [DEBUG] [Thread-190982] [transport.py] [_log()] userauth is OK
2026-02-14T19:37:08.352 [DEBUG] [Thread-190982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:37:08.352 [DEBUG] [Thread-190982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:37:08.352 [DEBUG] [Thread-190982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:37:08.352 [DEBUG] [Thread-190982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:37:08.361 [INFO] [Thread-190982] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:37:08.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:37:09.159 [DEBUG] [Thread-190982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:37:09.159 [DEBUG] [Thread-190982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:37:09.160 [DEBUG] [Thread-190982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:37:09.200 [DEBUG] [Thread-190982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:37:09.200 [DEBUG] [Thread-190982] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:37:09.203 [DEBUG] [Thread-190982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:37:09.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:37:09.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:37:09.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:37:09.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:37:09.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:37:09.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:37:09.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:37:09.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:37:09.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:37:09.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.733795 -999.00  +12.30  23.90     54   +3.40 1 1 1 1 1   817    0 8.09 -42.56 ----- 28.3 23.9 175.8 31.4 13.0 -26.0 12.9 -25.3 12.7 -23.9 13.1 -25.1
2026-02-14T19:37:09.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:37:09.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:37:09.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.733795
2026-02-14T19:37:09.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:37:09.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:37:09.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:37:09.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:37:09.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:37:09.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:36:26', tmtdew=10.4, humidity=49.04, cloud=0.0, wind=37.67, temperature=12.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:36:39.888', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:37:09.228 [DEBUG] [Thread-190982] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:37:09.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-14T19:37:09.323 [DEBUG] [Thread-190985] [transport.py] [_log()] starting thread (client mode): 0xa57d6ce0
2026-02-14T19:37:09.324 [DEBUG] [Thread-190985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:37:09.338 [DEBUG] [Thread-190985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:37:09.338 [INFO] [Thread-190985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:37:09.345 [DEBUG] [Thread-190985] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:37:09.345 [DEBUG] [Thread-190985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:37:09.346 [DEBUG] [Thread-190985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:37:09.346 [DEBUG] [Thread-190985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:37:09.346 [DEBUG] [Thread-190985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:37:09.346 [DEBUG] [Thread-190985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:37:09.346 [DEBUG] [Thread-190985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:37:09.346 [DEBUG] [Thread-190985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:37:09.346 [DEBUG] [Thread-190985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:37:09.346 [DEBUG] [Thread-190985] [transport.py] [_log()] client lang: <none>
2026-02-14T19:37:09.346 [DEBUG] [Thread-190985] [transport.py] [_log()] server lang: <none>
2026-02-14T19:37:09.346 [DEBUG] [Thread-190985] [transport.py] [_log()] kex follows: False
2026-02-14T19:37:09.346 [DEBUG] [Thread-190985] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:37:09.346 [DEBUG] [Thread-190985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:37:09.346 [DEBUG] [Thread-190985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:37:09.346 [DEBUG] [Thread-190985] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:37:09.346 [DEBUG] [Thread-190985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:37:09.346 [DEBUG] [Thread-190985] [transport.py] [_log()] Compression: none
2026-02-14T19:37:09.347 [DEBUG] [Thread-190985] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:37:09.408 [DEBUG] [Thread-190985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:37:09.408 [DEBUG] [Thread-190985] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:37:09.409 [DEBUG] [Thread-190985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:37:09.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:37:09.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:37:09.465 [DEBUG] [Thread-190985] [transport.py] [_log()] userauth is OK
2026-02-14T19:37:09.465 [DEBUG] [Thread-190985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:37:09.466 [DEBUG] [Thread-190985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:37:09.466 [DEBUG] [Thread-190985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:37:09.466 [DEBUG] [Thread-190985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:37:09.485 [INFO] [Thread-190985] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:37:09.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-14T19:37:09.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:37:09.493 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:37:10.316 [DEBUG] [Thread-190985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:37:10.317 [DEBUG] [Thread-190985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:37:10.367 [DEBUG] [Thread-190985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:37:10.367 [DEBUG] [Thread-190985] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:37:10.376 [DEBUG] [Thread-190985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:37:10.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:37:10.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-14T19:37:10.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-14T19:37:10.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:37:10.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:37:10.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:37:10.416 [DEBUG] [Thread-190985] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:37:10.447 [DEBUG] [Thread-190987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:37:15.236 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:37:19.825 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:37:24.609 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:37:25.498 [DEBUG] [Thread-190988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:37:28.142 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:37:28.143 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:37:29.963 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:37:36.176 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:37:39.418 [DEBUG] [Thread-190989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:37:40.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:37:40.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:37:40.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T19:37:40.532 [DEBUG] [Thread-190990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:37:42.410 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:37:42.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 37, 1), 10.39, 49.09, 0.0, 36.96, 12.47, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:37:42.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:37:01
2026-02-14T19:37:42.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:37:43.036 [DEBUG] [Thread-190991] [transport.py] [_log()] starting thread (client mode): 0xa57d6920
2026-02-14T19:37:43.036 [DEBUG] [Thread-190991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:37:43.049 [DEBUG] [Thread-190991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:37:43.049 [INFO] [Thread-190991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:37:43.050 [DEBUG] [Thread-190991] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:37:43.050 [DEBUG] [Thread-190991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:37:43.050 [DEBUG] [Thread-190991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:37:43.050 [DEBUG] [Thread-190991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:37:43.050 [DEBUG] [Thread-190991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:37:43.050 [DEBUG] [Thread-190991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:37:43.050 [DEBUG] [Thread-190991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:37:43.050 [DEBUG] [Thread-190991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:37:43.050 [DEBUG] [Thread-190991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:37:43.050 [DEBUG] [Thread-190991] [transport.py] [_log()] client lang: <none>
2026-02-14T19:37:43.050 [DEBUG] [Thread-190991] [transport.py] [_log()] server lang: <none>
2026-02-14T19:37:43.050 [DEBUG] [Thread-190991] [transport.py] [_log()] kex follows: False
2026-02-14T19:37:43.050 [DEBUG] [Thread-190991] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:37:43.050 [DEBUG] [Thread-190991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:37:43.050 [DEBUG] [Thread-190991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:37:43.050 [DEBUG] [Thread-190991] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:37:43.050 [DEBUG] [Thread-190991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:37:43.050 [DEBUG] [Thread-190991] [transport.py] [_log()] Compression: none
2026-02-14T19:37:43.050 [DEBUG] [Thread-190991] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:37:43.063 [DEBUG] [Thread-190991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:37:43.064 [DEBUG] [Thread-190991] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:37:43.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:37:43.064 [DEBUG] [Thread-190991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:37:43.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:37:43.065 [DEBUG] [Thread-190991] [transport.py] [_log()] userauth is OK
2026-02-14T19:37:43.066 [DEBUG] [Thread-190991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:37:43.066 [DEBUG] [Thread-190991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:37:43.066 [DEBUG] [Thread-190991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:37:43.066 [DEBUG] [Thread-190991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:37:43.084 [INFO] [Thread-190991] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:37:43.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:37:43.741 [DEBUG] [Thread-190991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:37:43.741 [DEBUG] [Thread-190991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:37:43.741 [DEBUG] [Thread-190991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:37:43.781 [DEBUG] [Thread-190991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:37:43.782 [DEBUG] [Thread-190991] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:37:43.785 [DEBUG] [Thread-190991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:37:43.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:37:43.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:37:43.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:37:43.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:37:43.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:37:43.809 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:37:43.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:37:43.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:37:43.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:37:43.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.734143 -999.00  +12.30  31.05     54   +3.50 1 1 2 1 1   811    0 8.12 -40.67 ----- 28.3 31.1 181.0 42.1 13.0 -25.9 12.9 -25.1 12.8 -23.9 13.1 -25.2
2026-02-14T19:37:43.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:37:43.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:37:43.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.734143
2026-02-14T19:37:43.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:37:43.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:37:43.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:37:43.811 [DEBUG] [Thread-190991] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:37:43.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:37:43.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:37:43.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:37:01', tmtdew=10.39, humidity=49.09, cloud=0.0, wind=36.96, temperature=12.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:37:09.955', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:37:43.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-14T19:37:43.900 [DEBUG] [Thread-190994] [transport.py] [_log()] starting thread (client mode): 0xa57d5a50
2026-02-14T19:37:43.900 [DEBUG] [Thread-190994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:37:43.915 [DEBUG] [Thread-190994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:37:43.915 [INFO] [Thread-190994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:37:43.922 [DEBUG] [Thread-190994] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:37:43.923 [DEBUG] [Thread-190994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:37:43.923 [DEBUG] [Thread-190994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:37:43.923 [DEBUG] [Thread-190994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:37:43.923 [DEBUG] [Thread-190994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:37:43.923 [DEBUG] [Thread-190994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:37:43.923 [DEBUG] [Thread-190994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:37:43.923 [DEBUG] [Thread-190994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:37:43.923 [DEBUG] [Thread-190994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:37:43.923 [DEBUG] [Thread-190994] [transport.py] [_log()] client lang: <none>
2026-02-14T19:37:43.923 [DEBUG] [Thread-190994] [transport.py] [_log()] server lang: <none>
2026-02-14T19:37:43.924 [DEBUG] [Thread-190994] [transport.py] [_log()] kex follows: False
2026-02-14T19:37:43.924 [DEBUG] [Thread-190994] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:37:43.924 [DEBUG] [Thread-190994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:37:43.924 [DEBUG] [Thread-190994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:37:43.924 [DEBUG] [Thread-190994] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:37:43.924 [DEBUG] [Thread-190994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:37:43.924 [DEBUG] [Thread-190994] [transport.py] [_log()] Compression: none
2026-02-14T19:37:43.924 [DEBUG] [Thread-190994] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:37:43.980 [DEBUG] [Thread-190994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:37:43.981 [DEBUG] [Thread-190994] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:37:43.981 [DEBUG] [Thread-190994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:37:43.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:37:43.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:37:44.036 [DEBUG] [Thread-190994] [transport.py] [_log()] userauth is OK
2026-02-14T19:37:44.036 [DEBUG] [Thread-190994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:37:44.036 [DEBUG] [Thread-190994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:37:44.036 [DEBUG] [Thread-190994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:37:44.036 [DEBUG] [Thread-190994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:37:44.055 [INFO] [Thread-190994] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:37:44.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T19:37:44.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:37:44.887 [DEBUG] [Thread-190994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:37:44.887 [DEBUG] [Thread-190994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:37:44.935 [DEBUG] [Thread-190994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:37:44.935 [DEBUG] [Thread-190994] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:37:44.945 [DEBUG] [Thread-190994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:37:44.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:37:44.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-14T19:37:44.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-14T19:37:44.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:37:44.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:37:44.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:37:44.982 [DEBUG] [Thread-190994] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:37:48.425 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:37:54.518 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:37:55.567 [DEBUG] [Thread-190996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:38:00.333 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:38:06.322 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:38:10.620 [DEBUG] [Thread-190997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:38:12.958 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:38:15.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:38:15.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:38:15.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-14T19:38:17.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 37, 37), 10.62, 48.39, 0.0, 44.7, 12.87, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:38:17.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:37:37
2026-02-14T19:38:17.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:38:17.566 [DEBUG] [Thread-190998] [transport.py] [_log()] starting thread (client mode): 0xa57d6ec0
2026-02-14T19:38:17.566 [DEBUG] [Thread-190998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:38:17.586 [DEBUG] [Thread-190998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:38:17.586 [INFO] [Thread-190998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:38:17.589 [DEBUG] [Thread-190998] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:38:17.589 [DEBUG] [Thread-190998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:38:17.589 [DEBUG] [Thread-190998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:38:17.589 [DEBUG] [Thread-190998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:38:17.589 [DEBUG] [Thread-190998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:38:17.589 [DEBUG] [Thread-190998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:38:17.589 [DEBUG] [Thread-190998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:38:17.589 [DEBUG] [Thread-190998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:38:17.589 [DEBUG] [Thread-190998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:38:17.589 [DEBUG] [Thread-190998] [transport.py] [_log()] client lang: <none>
2026-02-14T19:38:17.589 [DEBUG] [Thread-190998] [transport.py] [_log()] server lang: <none>
2026-02-14T19:38:17.589 [DEBUG] [Thread-190998] [transport.py] [_log()] kex follows: False
2026-02-14T19:38:17.589 [DEBUG] [Thread-190998] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:38:17.589 [DEBUG] [Thread-190998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:38:17.590 [DEBUG] [Thread-190998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:38:17.590 [DEBUG] [Thread-190998] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:38:17.590 [DEBUG] [Thread-190998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:38:17.590 [DEBUG] [Thread-190998] [transport.py] [_log()] Compression: none
2026-02-14T19:38:17.590 [DEBUG] [Thread-190998] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:38:17.606 [DEBUG] [Thread-190998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:38:17.606 [DEBUG] [Thread-190998] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:38:17.606 [DEBUG] [Thread-190998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:38:17.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:38:17.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:38:17.607 [DEBUG] [Thread-190998] [transport.py] [_log()] userauth is OK
2026-02-14T19:38:17.607 [DEBUG] [Thread-190998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:38:17.607 [DEBUG] [Thread-190998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:38:17.607 [DEBUG] [Thread-190998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:38:17.607 [DEBUG] [Thread-190998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:38:17.619 [INFO] [Thread-190998] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:38:17.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:38:18.200 [DEBUG] [Thread-190998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:38:18.201 [DEBUG] [Thread-190998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:38:18.201 [DEBUG] [Thread-190998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:38:18.241 [DEBUG] [Thread-190998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:38:18.242 [DEBUG] [Thread-190998] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:38:18.245 [DEBUG] [Thread-190998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:38:18.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:38:18.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:38:18.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:38:18.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:38:18.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:38:18.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:38:18.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:38:18.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:38:18.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:38:18.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.734490 -999.00  +12.30  31.72     54   +3.40 1 1 2 1 1   803    0 7.77 -44.69 ----- 29.1 31.7 179.6 45.2 12.9 -26.0 12.8 -25.2 12.7 -23.8 13.0 -25.0
2026-02-14T19:38:18.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:38:18.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:38:18.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.734490
2026-02-14T19:38:18.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:38:18.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:38:18.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:38:18.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:38:18.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:38:18.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:37:37', tmtdew=10.62, humidity=48.39, cloud=0.0, wind=44.7, temperature=12.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:37:39.936', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:38:18.273 [DEBUG] [Thread-190998] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:38:18.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-14T19:38:19.371 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:38:25.656 [DEBUG] [Thread-191001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:38:32.404 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:38:32.405 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:38:39.488 [DEBUG] [Thread-191002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:38:40.722 [DEBUG] [Thread-191003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:38:55.073 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:38:55.759 [DEBUG] [Thread-191004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:39:10.795 [DEBUG] [Thread-191005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:39:19.228 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:39:24.831 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:39:25.833 [DEBUG] [Thread-191006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:39:30.836 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:39:36.316 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:39:38.246 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:39:38.247 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:39:39.561 [DEBUG] [Thread-191007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:39:40.864 [DEBUG] [Thread-191008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:39:41.553 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:39:46.908 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:39:52.461 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:39:55.903 [DEBUG] [Thread-191009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:39:56.932 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:40:01.522 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:40:05.908 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:40:10.475 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:40:10.942 [DEBUG] [Thread-191010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:40:15.326 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:40:21.102 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:40:25.978 [DEBUG] [Thread-191011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:40:27.175 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:40:31.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-14T19:40:33.158 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:40:38.098 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:40:39.619 [DEBUG] [Thread-191012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:40:41.017 [DEBUG] [Thread-191013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:40:42.770 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:40:43.740 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:40:43.741 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:40:48.317 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:40:53.921 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:40:56.054 [DEBUG] [Thread-191014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:41:01.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:41:01.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:41:01.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-14T19:41:03.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 40, 35), 10.58, 48.49, 0.0, 40.68, 12.71, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:41:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:40:35
2026-02-14T19:41:03.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:41:04.092 [DEBUG] [Thread-191015] [transport.py] [_log()] starting thread (client mode): 0xa57718d0
2026-02-14T19:41:04.092 [DEBUG] [Thread-191015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:41:04.113 [DEBUG] [Thread-191015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:41:04.113 [INFO] [Thread-191015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:41:04.116 [DEBUG] [Thread-191015] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:41:04.116 [DEBUG] [Thread-191015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:41:04.116 [DEBUG] [Thread-191015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:41:04.117 [DEBUG] [Thread-191015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:41:04.117 [DEBUG] [Thread-191015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:41:04.117 [DEBUG] [Thread-191015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:41:04.117 [DEBUG] [Thread-191015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:41:04.117 [DEBUG] [Thread-191015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:41:04.117 [DEBUG] [Thread-191015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:41:04.117 [DEBUG] [Thread-191015] [transport.py] [_log()] client lang: <none>
2026-02-14T19:41:04.117 [DEBUG] [Thread-191015] [transport.py] [_log()] server lang: <none>
2026-02-14T19:41:04.117 [DEBUG] [Thread-191015] [transport.py] [_log()] kex follows: False
2026-02-14T19:41:04.117 [DEBUG] [Thread-191015] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:41:04.117 [DEBUG] [Thread-191015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:41:04.117 [DEBUG] [Thread-191015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:41:04.117 [DEBUG] [Thread-191015] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:41:04.117 [DEBUG] [Thread-191015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:41:04.118 [DEBUG] [Thread-191015] [transport.py] [_log()] Compression: none
2026-02-14T19:41:04.118 [DEBUG] [Thread-191015] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:41:04.135 [DEBUG] [Thread-191015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:41:04.135 [DEBUG] [Thread-191015] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:41:04.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:41:04.137 [DEBUG] [Thread-191015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:41:04.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:41:04.139 [DEBUG] [Thread-191015] [transport.py] [_log()] userauth is OK
2026-02-14T19:41:04.139 [DEBUG] [Thread-191015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:41:04.139 [DEBUG] [Thread-191015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:41:04.140 [DEBUG] [Thread-191015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:41:04.140 [DEBUG] [Thread-191015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:41:04.160 [INFO] [Thread-191015] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:41:04.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:41:04.766 [DEBUG] [Thread-191015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:41:04.766 [DEBUG] [Thread-191015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:41:04.767 [DEBUG] [Thread-191015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:41:04.807 [DEBUG] [Thread-191015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:41:04.807 [DEBUG] [Thread-191015] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:41:04.810 [DEBUG] [Thread-191015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:41:04.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:41:04.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:41:04.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:41:04.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:41:04.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:41:04.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:41:04.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:41:04.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:41:04.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:41:04.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.736573 -999.00  +12.30  25.48     54   +3.50 1 1 1 1 1   745    0 7.89 -48.42 ----- 21.5 25.5 176.4 33.4 12.9 -25.7 12.8 -24.9 12.6 -23.7 12.9 -24.9
2026-02-14T19:41:04.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:41:04.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:41:04.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.736573
2026-02-14T19:41:04.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:41:04.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:41:04.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:41:04.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:41:04.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:41:04.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:40:35', tmtdew=10.58, humidity=48.49, cloud=0.0, wind=40.68, temperature=12.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:40:39.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:41:04.835 [DEBUG] [Thread-191015] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:41:04.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-14T19:41:04.931 [DEBUG] [Thread-191018] [transport.py] [_log()] starting thread (client mode): 0xa2d7a350
2026-02-14T19:41:04.932 [DEBUG] [Thread-191018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:41:04.946 [DEBUG] [Thread-191018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:41:04.946 [INFO] [Thread-191018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:41:04.954 [DEBUG] [Thread-191018] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:41:04.954 [DEBUG] [Thread-191018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:41:04.954 [DEBUG] [Thread-191018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:41:04.954 [DEBUG] [Thread-191018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:41:04.954 [DEBUG] [Thread-191018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:41:04.954 [DEBUG] [Thread-191018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:41:04.954 [DEBUG] [Thread-191018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:41:04.954 [DEBUG] [Thread-191018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:41:04.954 [DEBUG] [Thread-191018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:41:04.954 [DEBUG] [Thread-191018] [transport.py] [_log()] client lang: <none>
2026-02-14T19:41:04.954 [DEBUG] [Thread-191018] [transport.py] [_log()] server lang: <none>
2026-02-14T19:41:04.954 [DEBUG] [Thread-191018] [transport.py] [_log()] kex follows: False
2026-02-14T19:41:04.954 [DEBUG] [Thread-191018] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:41:04.954 [DEBUG] [Thread-191018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:41:04.954 [DEBUG] [Thread-191018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:41:04.954 [DEBUG] [Thread-191018] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:41:04.954 [DEBUG] [Thread-191018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:41:04.954 [DEBUG] [Thread-191018] [transport.py] [_log()] Compression: none
2026-02-14T19:41:04.954 [DEBUG] [Thread-191018] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:41:05.016 [DEBUG] [Thread-191018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:41:05.016 [DEBUG] [Thread-191018] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:41:05.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:41:05.017 [DEBUG] [Thread-191018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:41:05.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:41:05.070 [DEBUG] [Thread-191018] [transport.py] [_log()] userauth is OK
2026-02-14T19:41:05.070 [DEBUG] [Thread-191018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:41:05.070 [DEBUG] [Thread-191018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:41:05.070 [DEBUG] [Thread-191018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:41:05.070 [DEBUG] [Thread-191018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:41:05.087 [INFO] [Thread-191018] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:41:05.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-14T19:41:05.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:41:05.906 [DEBUG] [Thread-191018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:41:05.915 [DEBUG] [Thread-191018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:41:05.954 [DEBUG] [Thread-191018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:41:05.954 [DEBUG] [Thread-191018] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:41:05.963 [DEBUG] [Thread-191018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:41:05.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:41:05.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:41: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-14T19:41:05.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:41:05.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:41:05.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:41:06.000 [DEBUG] [Thread-191018] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:41:11.094 [DEBUG] [Thread-191020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:41:26.144 [DEBUG] [Thread-191021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:41:35.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:41:35.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:41:36.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-14T19:41:37.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 41, 10), 10.27, 49.83, 0.0, 34.46, 12.39, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:41:37.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:41:10
2026-02-14T19:41:38.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:41:38.426 [DEBUG] [Thread-191022] [transport.py] [_log()] starting thread (client mode): 0xa57c39a0
2026-02-14T19:41:38.426 [DEBUG] [Thread-191022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:41:38.446 [DEBUG] [Thread-191022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:41:38.447 [INFO] [Thread-191022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:41:38.450 [DEBUG] [Thread-191022] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:41:38.450 [DEBUG] [Thread-191022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:41:38.450 [DEBUG] [Thread-191022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:41:38.450 [DEBUG] [Thread-191022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:41:38.450 [DEBUG] [Thread-191022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:41:38.450 [DEBUG] [Thread-191022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:41:38.450 [DEBUG] [Thread-191022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:41:38.450 [DEBUG] [Thread-191022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:41:38.450 [DEBUG] [Thread-191022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:41:38.450 [DEBUG] [Thread-191022] [transport.py] [_log()] client lang: <none>
2026-02-14T19:41:38.450 [DEBUG] [Thread-191022] [transport.py] [_log()] server lang: <none>
2026-02-14T19:41:38.450 [DEBUG] [Thread-191022] [transport.py] [_log()] kex follows: False
2026-02-14T19:41:38.450 [DEBUG] [Thread-191022] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:41:38.450 [DEBUG] [Thread-191022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:41:38.451 [DEBUG] [Thread-191022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:41:38.451 [DEBUG] [Thread-191022] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:41:38.451 [DEBUG] [Thread-191022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:41:38.451 [DEBUG] [Thread-191022] [transport.py] [_log()] Compression: none
2026-02-14T19:41:38.451 [DEBUG] [Thread-191022] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:41:38.468 [DEBUG] [Thread-191022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:41:38.468 [DEBUG] [Thread-191022] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:41:38.469 [DEBUG] [Thread-191022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:41:38.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:41:38.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:41:38.471 [DEBUG] [Thread-191022] [transport.py] [_log()] userauth is OK
2026-02-14T19:41:38.471 [DEBUG] [Thread-191022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:41:38.471 [DEBUG] [Thread-191022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:41:38.471 [DEBUG] [Thread-191022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:41:38.471 [DEBUG] [Thread-191022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:41:38.496 [INFO] [Thread-191022] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:41:38.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:41:39.132 [DEBUG] [Thread-191022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:41:39.132 [DEBUG] [Thread-191022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:41:39.132 [DEBUG] [Thread-191022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:41:39.172 [DEBUG] [Thread-191022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:41:39.172 [DEBUG] [Thread-191022] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:41:39.175 [DEBUG] [Thread-191022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:41:39.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:41:39.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:41:39.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:41:39.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:41:39.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:41:39.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:41:39.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:41:39.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:41:39.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:41:39.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.736920 -999.00  +12.30  29.22     54   +3.50 1 1 1 1 1   732    0 7.72 -47.04 ----- 26.9 29.2 164.5 34.2 12.9 -25.8 12.7 -24.6 12.5 -23.7 12.9 -24.9
2026-02-14T19:41:39.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:41:39.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:41:39.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.736920
2026-02-14T19:41:39.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:41:39.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:41:39.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:41:39.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:41:39.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:41:39.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:41:10', tmtdew=10.27, humidity=49.83, cloud=0.0, wind=34.46, temperature=12.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:41:09.888', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:41:39.204 [DEBUG] [Thread-191022] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:41:39.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T19:41:39.290 [DEBUG] [Thread-191025] [transport.py] [_log()] starting thread (client mode): 0xa2d6dc00
2026-02-14T19:41:39.290 [DEBUG] [Thread-191025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:41:39.305 [DEBUG] [Thread-191025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:41:39.305 [INFO] [Thread-191025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:41:39.313 [DEBUG] [Thread-191025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:41:39.313 [DEBUG] [Thread-191025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:41:39.313 [DEBUG] [Thread-191025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:41:39.313 [DEBUG] [Thread-191025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:41:39.313 [DEBUG] [Thread-191025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:41:39.313 [DEBUG] [Thread-191025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:41:39.313 [DEBUG] [Thread-191025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:41:39.313 [DEBUG] [Thread-191025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:41:39.313 [DEBUG] [Thread-191025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:41:39.313 [DEBUG] [Thread-191025] [transport.py] [_log()] client lang: <none>
2026-02-14T19:41:39.313 [DEBUG] [Thread-191025] [transport.py] [_log()] server lang: <none>
2026-02-14T19:41:39.313 [DEBUG] [Thread-191025] [transport.py] [_log()] kex follows: False
2026-02-14T19:41:39.314 [DEBUG] [Thread-191025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:41:39.314 [DEBUG] [Thread-191025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:41:39.314 [DEBUG] [Thread-191025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:41:39.314 [DEBUG] [Thread-191025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:41:39.314 [DEBUG] [Thread-191025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:41:39.314 [DEBUG] [Thread-191025] [transport.py] [_log()] Compression: none
2026-02-14T19:41:39.314 [DEBUG] [Thread-191025] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:41:39.375 [DEBUG] [Thread-191025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:41:39.376 [DEBUG] [Thread-191025] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:41:39.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:41:39.377 [DEBUG] [Thread-191025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:41:39.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:41:39.431 [DEBUG] [Thread-191025] [transport.py] [_log()] userauth is OK
2026-02-14T19:41:39.431 [DEBUG] [Thread-191025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:41:39.431 [DEBUG] [Thread-191025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:41:39.431 [DEBUG] [Thread-191025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:41:39.431 [DEBUG] [Thread-191025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:41:39.455 [INFO] [Thread-191025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:41:39.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T19:41:39.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:41:39.688 [DEBUG] [Thread-191027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:41:40.348 [DEBUG] [Thread-191025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:41:40.349 [DEBUG] [Thread-191025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:41:40.396 [DEBUG] [Thread-191025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:41:40.396 [DEBUG] [Thread-191025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:41:40.405 [DEBUG] [Thread-191025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:41:40.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:41:40.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-14T19:41:40.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-14T19:41:40.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:41:40.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:41:40.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:41:40.443 [DEBUG] [Thread-191025] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:41:41.181 [DEBUG] [Thread-191028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:41:48.068 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:41:48.070 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:41:56.238 [DEBUG] [Thread-191029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:42:10.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:42:10.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:42:10.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-14T19:42:11.275 [DEBUG] [Thread-191030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:42:12.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 41, 45), 10.27, 49.29, 0.0, 34.83, 12.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:42:12.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:41:45
2026-02-14T19:42:12.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:42:12.903 [DEBUG] [Thread-191031] [transport.py] [_log()] starting thread (client mode): 0xa5770ac0
2026-02-14T19:42:12.903 [DEBUG] [Thread-191031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:42:12.922 [DEBUG] [Thread-191031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:42:12.922 [INFO] [Thread-191031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:42:12.925 [DEBUG] [Thread-191031] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:42:12.926 [DEBUG] [Thread-191031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:42:12.926 [DEBUG] [Thread-191031] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:42:12.926 [DEBUG] [Thread-191031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:42:12.926 [DEBUG] [Thread-191031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:42:12.926 [DEBUG] [Thread-191031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:42:12.926 [DEBUG] [Thread-191031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:42:12.926 [DEBUG] [Thread-191031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:42:12.926 [DEBUG] [Thread-191031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:42:12.926 [DEBUG] [Thread-191031] [transport.py] [_log()] client lang: <none>
2026-02-14T19:42:12.926 [DEBUG] [Thread-191031] [transport.py] [_log()] server lang: <none>
2026-02-14T19:42:12.926 [DEBUG] [Thread-191031] [transport.py] [_log()] kex follows: False
2026-02-14T19:42:12.926 [DEBUG] [Thread-191031] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:42:12.926 [DEBUG] [Thread-191031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:42:12.926 [DEBUG] [Thread-191031] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:42:12.926 [DEBUG] [Thread-191031] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:42:12.926 [DEBUG] [Thread-191031] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:42:12.926 [DEBUG] [Thread-191031] [transport.py] [_log()] Compression: none
2026-02-14T19:42:12.926 [DEBUG] [Thread-191031] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:42:12.938 [DEBUG] [Thread-191031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:42:12.938 [DEBUG] [Thread-191031] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:42:12.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:42:12.938 [DEBUG] [Thread-191031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:42:12.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:42:12.939 [DEBUG] [Thread-191031] [transport.py] [_log()] userauth is OK
2026-02-14T19:42:12.939 [DEBUG] [Thread-191031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:42:12.940 [DEBUG] [Thread-191031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:42:12.940 [DEBUG] [Thread-191031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:42:12.940 [DEBUG] [Thread-191031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:42:12.960 [INFO] [Thread-191031] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:42:12.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:42:13.599 [DEBUG] [Thread-191031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:42:13.609 [DEBUG] [Thread-191031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:42:13.609 [DEBUG] [Thread-191031] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:42:13.640 [DEBUG] [Thread-191031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:42:13.640 [DEBUG] [Thread-191031] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:42:13.644 [DEBUG] [Thread-191031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:42:13.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:42:13.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:42:13.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:42:13.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:42:13.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:42:13.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:42:13.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:42:13.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:42:13.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:42:13.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.737268 -999.00  +12.20  24.77     55   +3.40 1 1 1 1 1   719    0 7.76 -49.55 ----- 28.7 24.8 164.0 35.9 12.9 -25.6 12.7 -24.7 12.5 -23.7 12.8 -24.7
2026-02-14T19:42:13.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:42:13.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:42:13.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.737268
2026-02-14T19:42:13.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:42:13.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:42:13.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:42:13.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:42:13.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:42:13.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:41:45', tmtdew=10.27, humidity=49.29, cloud=0.0, wind=34.83, temperature=12.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:41:39.955', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:42:13.669 [DEBUG] [Thread-191031] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:42:13.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-14T19:42:13.765 [DEBUG] [Thread-191034] [transport.py] [_log()] starting thread (client mode): 0xa5771f90
2026-02-14T19:42:13.765 [DEBUG] [Thread-191034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:42:13.784 [DEBUG] [Thread-191034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:42:13.784 [INFO] [Thread-191034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:42:13.792 [DEBUG] [Thread-191034] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:42:13.792 [DEBUG] [Thread-191034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:42:13.792 [DEBUG] [Thread-191034] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:42:13.792 [DEBUG] [Thread-191034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:42:13.792 [DEBUG] [Thread-191034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:42:13.792 [DEBUG] [Thread-191034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:42:13.792 [DEBUG] [Thread-191034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:42:13.792 [DEBUG] [Thread-191034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:42:13.792 [DEBUG] [Thread-191034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:42:13.792 [DEBUG] [Thread-191034] [transport.py] [_log()] client lang: <none>
2026-02-14T19:42:13.792 [DEBUG] [Thread-191034] [transport.py] [_log()] server lang: <none>
2026-02-14T19:42:13.792 [DEBUG] [Thread-191034] [transport.py] [_log()] kex follows: False
2026-02-14T19:42:13.792 [DEBUG] [Thread-191034] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:42:13.793 [DEBUG] [Thread-191034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:42:13.793 [DEBUG] [Thread-191034] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:42:13.793 [DEBUG] [Thread-191034] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:42:13.793 [DEBUG] [Thread-191034] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:42:13.793 [DEBUG] [Thread-191034] [transport.py] [_log()] Compression: none
2026-02-14T19:42:13.793 [DEBUG] [Thread-191034] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:42:13.851 [DEBUG] [Thread-191034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:42:13.851 [DEBUG] [Thread-191034] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:42:13.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:42:13.852 [DEBUG] [Thread-191034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:42:13.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:42:13.906 [DEBUG] [Thread-191034] [transport.py] [_log()] userauth is OK
2026-02-14T19:42:13.907 [DEBUG] [Thread-191034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:42:13.907 [DEBUG] [Thread-191034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:42:13.907 [DEBUG] [Thread-191034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:42:13.907 [DEBUG] [Thread-191034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:42:13.930 [INFO] [Thread-191034] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:42:13.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-14T19:42:13.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:42:14.758 [DEBUG] [Thread-191034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:42:14.758 [DEBUG] [Thread-191034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:42:14.806 [DEBUG] [Thread-191034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:42:14.806 [DEBUG] [Thread-191034] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:42:14.815 [DEBUG] [Thread-191034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:42:14.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:42:14.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:42:14.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-14T19:42:14.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:42:14.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:42:14.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:42:14.852 [DEBUG] [Thread-191034] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:42:26.317 [DEBUG] [Thread-191036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:42:39.744 [DEBUG] [Thread-191037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:42:41.378 [DEBUG] [Thread-191038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:42:44.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:42:44.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:42:44.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-14T19:42:46.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 42, 21), 10.28, 49.26, 0.0, 34.97, 12.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:42:46.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:42:21
2026-02-14T19:42:47.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:42:47.244 [DEBUG] [Thread-191039] [transport.py] [_log()] starting thread (client mode): 0xa5770400
2026-02-14T19:42:47.244 [DEBUG] [Thread-191039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:42:47.264 [DEBUG] [Thread-191039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:42:47.264 [INFO] [Thread-191039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:42:47.267 [DEBUG] [Thread-191039] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:42:47.267 [DEBUG] [Thread-191039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:42:47.267 [DEBUG] [Thread-191039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:42:47.267 [DEBUG] [Thread-191039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:42:47.267 [DEBUG] [Thread-191039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:42:47.267 [DEBUG] [Thread-191039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:42:47.267 [DEBUG] [Thread-191039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:42:47.267 [DEBUG] [Thread-191039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:42:47.267 [DEBUG] [Thread-191039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:42:47.267 [DEBUG] [Thread-191039] [transport.py] [_log()] client lang: <none>
2026-02-14T19:42:47.267 [DEBUG] [Thread-191039] [transport.py] [_log()] server lang: <none>
2026-02-14T19:42:47.267 [DEBUG] [Thread-191039] [transport.py] [_log()] kex follows: False
2026-02-14T19:42:47.267 [DEBUG] [Thread-191039] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:42:47.267 [DEBUG] [Thread-191039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:42:47.267 [DEBUG] [Thread-191039] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:42:47.267 [DEBUG] [Thread-191039] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:42:47.267 [DEBUG] [Thread-191039] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:42:47.267 [DEBUG] [Thread-191039] [transport.py] [_log()] Compression: none
2026-02-14T19:42:47.267 [DEBUG] [Thread-191039] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:42:47.283 [DEBUG] [Thread-191039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:42:47.283 [DEBUG] [Thread-191039] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:42:47.284 [DEBUG] [Thread-191039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:42:47.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:42:47.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:42:47.284 [DEBUG] [Thread-191039] [transport.py] [_log()] userauth is OK
2026-02-14T19:42:47.284 [DEBUG] [Thread-191039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:42:47.284 [DEBUG] [Thread-191039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:42:47.284 [DEBUG] [Thread-191039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:42:47.285 [DEBUG] [Thread-191039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:42:47.296 [INFO] [Thread-191039] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:42:47.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:42:47.957 [DEBUG] [Thread-191039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:42:47.957 [DEBUG] [Thread-191039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:42:47.958 [DEBUG] [Thread-191039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:42:47.998 [DEBUG] [Thread-191039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:42:47.999 [DEBUG] [Thread-191039] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:42:48.003 [DEBUG] [Thread-191039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:42:48.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:42:48.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:42:48.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:42:48.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:42:48.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:42:48.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:42:48.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:42:48.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:42:48.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:42:48.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.737615 -999.00  +12.20  21.51     55   +3.40 1 1 1 1 1   705    0 7.56 -46.83 ----- 21.1 21.5 165.0 35.8 12.8 -25.7 12.7 -24.6 12.6 -23.7 12.8 -24.8
2026-02-14T19:42:48.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:42:48.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:42:48.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.737615
2026-02-14T19:42:48.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:42:48.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:42:48.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:42:48.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:42:48.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:42:48.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:42:21', tmtdew=10.28, humidity=49.26, cloud=0.0, wind=34.97, temperature=12.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:42:09.936', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:42:48.028 [DEBUG] [Thread-191039] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:42:48.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T19:42:48.126 [DEBUG] [Thread-191042] [transport.py] [_log()] starting thread (client mode): 0xa2d7b520
2026-02-14T19:42:48.127 [DEBUG] [Thread-191042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:42:48.143 [DEBUG] [Thread-191042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:42:48.143 [INFO] [Thread-191042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:42:48.151 [DEBUG] [Thread-191042] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:42:48.151 [DEBUG] [Thread-191042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:42:48.151 [DEBUG] [Thread-191042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:42:48.151 [DEBUG] [Thread-191042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:42:48.152 [DEBUG] [Thread-191042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:42:48.152 [DEBUG] [Thread-191042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:42:48.152 [DEBUG] [Thread-191042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:42:48.152 [DEBUG] [Thread-191042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:42:48.152 [DEBUG] [Thread-191042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:42:48.152 [DEBUG] [Thread-191042] [transport.py] [_log()] client lang: <none>
2026-02-14T19:42:48.153 [DEBUG] [Thread-191042] [transport.py] [_log()] server lang: <none>
2026-02-14T19:42:48.153 [DEBUG] [Thread-191042] [transport.py] [_log()] kex follows: False
2026-02-14T19:42:48.153 [DEBUG] [Thread-191042] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:42:48.153 [DEBUG] [Thread-191042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:42:48.153 [DEBUG] [Thread-191042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:42:48.153 [DEBUG] [Thread-191042] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:42:48.153 [DEBUG] [Thread-191042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:42:48.153 [DEBUG] [Thread-191042] [transport.py] [_log()] Compression: none
2026-02-14T19:42:48.153 [DEBUG] [Thread-191042] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:42:48.210 [DEBUG] [Thread-191042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:42:48.211 [DEBUG] [Thread-191042] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:42:48.211 [DEBUG] [Thread-191042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:42:48.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:42:48.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:42:48.269 [DEBUG] [Thread-191042] [transport.py] [_log()] userauth is OK
2026-02-14T19:42:48.269 [DEBUG] [Thread-191042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:42:48.270 [DEBUG] [Thread-191042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:42:48.270 [DEBUG] [Thread-191042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:42:48.270 [DEBUG] [Thread-191042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:42:48.289 [INFO] [Thread-191042] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:42:48.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-14T19:42:48.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:42:49.160 [DEBUG] [Thread-191042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:42:49.160 [DEBUG] [Thread-191042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:42:49.208 [DEBUG] [Thread-191042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:42:49.208 [DEBUG] [Thread-191042] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:42:49.217 [DEBUG] [Thread-191042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:42:49.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:42:49.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-14T19:42:49.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-14T19:42:49.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:42:49.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:42:49.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:42:49.252 [DEBUG] [Thread-191042] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:42:55.625 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:42:55.626 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:42:56.414 [DEBUG] [Thread-191044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:43:11.473 [DEBUG] [Thread-191045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:43:19.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:43:19.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:43:19.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-14T19:43:21.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 42, 56), 10.26, 49.33, 0.0, 35.59, 12.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:43:21.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:42:56
2026-02-14T19:43:21.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:43:22.118 [DEBUG] [Thread-191046] [transport.py] [_log()] starting thread (client mode): 0xa5771cf0
2026-02-14T19:43:22.118 [DEBUG] [Thread-191046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:43:22.130 [DEBUG] [Thread-191046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:43:22.130 [INFO] [Thread-191046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:43:22.132 [DEBUG] [Thread-191046] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:43:22.132 [DEBUG] [Thread-191046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:43:22.132 [DEBUG] [Thread-191046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:43:22.132 [DEBUG] [Thread-191046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:43:22.132 [DEBUG] [Thread-191046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:43:22.132 [DEBUG] [Thread-191046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:43:22.132 [DEBUG] [Thread-191046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:43:22.132 [DEBUG] [Thread-191046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:43:22.132 [DEBUG] [Thread-191046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:43:22.132 [DEBUG] [Thread-191046] [transport.py] [_log()] client lang: <none>
2026-02-14T19:43:22.132 [DEBUG] [Thread-191046] [transport.py] [_log()] server lang: <none>
2026-02-14T19:43:22.132 [DEBUG] [Thread-191046] [transport.py] [_log()] kex follows: False
2026-02-14T19:43:22.132 [DEBUG] [Thread-191046] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:43:22.132 [DEBUG] [Thread-191046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:43:22.132 [DEBUG] [Thread-191046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:43:22.132 [DEBUG] [Thread-191046] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:43:22.132 [DEBUG] [Thread-191046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:43:22.132 [DEBUG] [Thread-191046] [transport.py] [_log()] Compression: none
2026-02-14T19:43:22.132 [DEBUG] [Thread-191046] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:43:22.146 [DEBUG] [Thread-191046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:43:22.146 [DEBUG] [Thread-191046] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:43:22.146 [DEBUG] [Thread-191046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:43:22.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:43:22.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:43:22.147 [DEBUG] [Thread-191046] [transport.py] [_log()] userauth is OK
2026-02-14T19:43:22.148 [DEBUG] [Thread-191046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:43:22.148 [DEBUG] [Thread-191046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:43:22.148 [DEBUG] [Thread-191046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:43:22.148 [DEBUG] [Thread-191046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:43:22.170 [INFO] [Thread-191046] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:43:22.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:43:22.777 [DEBUG] [Thread-191046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:43:22.786 [DEBUG] [Thread-191046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:43:22.787 [DEBUG] [Thread-191046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:43:22.818 [DEBUG] [Thread-191046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:43:22.819 [DEBUG] [Thread-191046] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:43:22.821 [DEBUG] [Thread-191046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:43:22.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:43:22.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:43:22.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:43:22.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:43:22.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:43:22.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:43:22.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:43:22.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:43:22.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:43:22.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.737962 -999.00  +12.20  19.46     55   +3.40 1 1 1 1 1   689    0 7.72 -48.00 ----- 21.6 19.5 155.0 29.5 12.8 -25.6 12.7 -24.7 12.5 -23.6 12.8 -24.9
2026-02-14T19:43:22.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:43:22.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:43:22.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.737962
2026-02-14T19:43:22.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:43:22.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:43:22.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:43:22.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:43:22.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:43:22.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:42:56', tmtdew=10.26, humidity=49.33, cloud=0.0, wind=35.59, temperature=12.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:42:39.917', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:43:22.841 [DEBUG] [Thread-191046] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:43:22.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-14T19:43:22.936 [DEBUG] [Thread-191049] [transport.py] [_log()] starting thread (client mode): 0xa5772e00
2026-02-14T19:43:22.936 [DEBUG] [Thread-191049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:43:22.952 [DEBUG] [Thread-191049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:43:22.952 [INFO] [Thread-191049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:43:22.960 [DEBUG] [Thread-191049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:43:22.960 [DEBUG] [Thread-191049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:43:22.960 [DEBUG] [Thread-191049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:43:22.960 [DEBUG] [Thread-191049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:43:22.960 [DEBUG] [Thread-191049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:43:22.960 [DEBUG] [Thread-191049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:43:22.960 [DEBUG] [Thread-191049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:43:22.960 [DEBUG] [Thread-191049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:43:22.960 [DEBUG] [Thread-191049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:43:22.960 [DEBUG] [Thread-191049] [transport.py] [_log()] client lang: <none>
2026-02-14T19:43:22.961 [DEBUG] [Thread-191049] [transport.py] [_log()] server lang: <none>
2026-02-14T19:43:22.961 [DEBUG] [Thread-191049] [transport.py] [_log()] kex follows: False
2026-02-14T19:43:22.961 [DEBUG] [Thread-191049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:43:22.961 [DEBUG] [Thread-191049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:43:22.961 [DEBUG] [Thread-191049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:43:22.961 [DEBUG] [Thread-191049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:43:22.961 [DEBUG] [Thread-191049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:43:22.961 [DEBUG] [Thread-191049] [transport.py] [_log()] Compression: none
2026-02-14T19:43:22.961 [DEBUG] [Thread-191049] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:43:23.019 [DEBUG] [Thread-191049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:43:23.019 [DEBUG] [Thread-191049] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:43:23.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:43:23.021 [DEBUG] [Thread-191049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:43:23.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:43:23.074 [DEBUG] [Thread-191049] [transport.py] [_log()] userauth is OK
2026-02-14T19:43:23.075 [DEBUG] [Thread-191049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:43:23.075 [DEBUG] [Thread-191049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:43:23.075 [DEBUG] [Thread-191049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:43:23.075 [DEBUG] [Thread-191049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:43:23.097 [INFO] [Thread-191049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:43:23.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T19:43:23.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:43:23.921 [DEBUG] [Thread-191049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:43:23.921 [DEBUG] [Thread-191049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:43:23.969 [DEBUG] [Thread-191049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:43:23.969 [DEBUG] [Thread-191049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:43:23.978 [DEBUG] [Thread-191049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:43:23.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:43:23.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:43:23.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-14T19:43:24.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:43:24.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:43:24.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:43:24.012 [DEBUG] [Thread-191049] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:43:26.513 [DEBUG] [Thread-191051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:43:33.355 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:43:39.807 [DEBUG] [Thread-191052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:43:41.562 [DEBUG] [Thread-191053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:43:47.308 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:43:54.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:43:54.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:43:54.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T19:43:55.868 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:43:55.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 43, 32), 10.26, 49.33, 0.0, 39.45, 12.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:43:55.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:43:32
2026-02-14T19:43:56.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:43:56.415 [DEBUG] [Thread-191054] [transport.py] [_log()] starting thread (client mode): 0xa57e1330
2026-02-14T19:43:56.415 [DEBUG] [Thread-191054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:43:56.435 [DEBUG] [Thread-191054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:43:56.435 [INFO] [Thread-191054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:43:56.438 [DEBUG] [Thread-191054] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:43:56.438 [DEBUG] [Thread-191054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:43:56.438 [DEBUG] [Thread-191054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:43:56.438 [DEBUG] [Thread-191054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:43:56.438 [DEBUG] [Thread-191054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:43:56.438 [DEBUG] [Thread-191054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:43:56.438 [DEBUG] [Thread-191054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:43:56.438 [DEBUG] [Thread-191054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:43:56.438 [DEBUG] [Thread-191054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:43:56.438 [DEBUG] [Thread-191054] [transport.py] [_log()] client lang: <none>
2026-02-14T19:43:56.438 [DEBUG] [Thread-191054] [transport.py] [_log()] server lang: <none>
2026-02-14T19:43:56.438 [DEBUG] [Thread-191054] [transport.py] [_log()] kex follows: False
2026-02-14T19:43:56.438 [DEBUG] [Thread-191054] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:43:56.438 [DEBUG] [Thread-191054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:43:56.438 [DEBUG] [Thread-191054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:43:56.438 [DEBUG] [Thread-191054] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:43:56.438 [DEBUG] [Thread-191054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:43:56.438 [DEBUG] [Thread-191054] [transport.py] [_log()] Compression: none
2026-02-14T19:43:56.438 [DEBUG] [Thread-191054] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:43:56.456 [DEBUG] [Thread-191054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:43:56.457 [DEBUG] [Thread-191054] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:43:56.457 [DEBUG] [Thread-191054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:43:56.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:43:56.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:43:56.459 [DEBUG] [Thread-191054] [transport.py] [_log()] userauth is OK
2026-02-14T19:43:56.459 [DEBUG] [Thread-191054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:43:56.459 [DEBUG] [Thread-191054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:43:56.459 [DEBUG] [Thread-191054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:43:56.459 [DEBUG] [Thread-191054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:43:56.491 [INFO] [Thread-191054] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:43:56.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:43:56.591 [DEBUG] [Thread-191056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:43:57.108 [DEBUG] [Thread-191054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:43:57.109 [DEBUG] [Thread-191054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:43:57.109 [DEBUG] [Thread-191054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:43:57.149 [DEBUG] [Thread-191054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:43:57.149 [DEBUG] [Thread-191054] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:43:57.152 [DEBUG] [Thread-191054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:43:57.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:43:57.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:43:57.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:43:57.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:43:57.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:43:57.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:43:57.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:43:57.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:43:57.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:43:57.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.738309 -999.00  +12.20  26.39     55   +3.40 1 1 1 1 1   674    0 7.72 -47.05 ----- 25.5 26.4 157.0 36.0 12.8 -25.7 12.7 -24.7 12.5 -23.7 12.8 -24.7
2026-02-14T19:43:57.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:43:57.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:43:57.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.738309
2026-02-14T19:43:57.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:43:57.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:43:57.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:43:57.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:43:57.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:43:57.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:43:32', tmtdew=10.26, humidity=49.33, cloud=0.0, wind=39.45, temperature=12.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:43:09.898', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:43:57.169 [DEBUG] [Thread-191054] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:43:57.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-14T19:43:57.265 [DEBUG] [Thread-191058] [transport.py] [_log()] starting thread (client mode): 0xa2d6d000
2026-02-14T19:43:57.265 [DEBUG] [Thread-191058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:43:57.281 [DEBUG] [Thread-191058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:43:57.281 [INFO] [Thread-191058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:43:57.289 [DEBUG] [Thread-191058] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:43:57.289 [DEBUG] [Thread-191058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:43:57.289 [DEBUG] [Thread-191058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:43:57.289 [DEBUG] [Thread-191058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:43:57.289 [DEBUG] [Thread-191058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:43:57.289 [DEBUG] [Thread-191058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:43:57.289 [DEBUG] [Thread-191058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:43:57.289 [DEBUG] [Thread-191058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:43:57.289 [DEBUG] [Thread-191058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:43:57.289 [DEBUG] [Thread-191058] [transport.py] [_log()] client lang: <none>
2026-02-14T19:43:57.290 [DEBUG] [Thread-191058] [transport.py] [_log()] server lang: <none>
2026-02-14T19:43:57.290 [DEBUG] [Thread-191058] [transport.py] [_log()] kex follows: False
2026-02-14T19:43:57.290 [DEBUG] [Thread-191058] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:43:57.290 [DEBUG] [Thread-191058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:43:57.290 [DEBUG] [Thread-191058] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:43:57.290 [DEBUG] [Thread-191058] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:43:57.290 [DEBUG] [Thread-191058] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:43:57.290 [DEBUG] [Thread-191058] [transport.py] [_log()] Compression: none
2026-02-14T19:43:57.290 [DEBUG] [Thread-191058] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:43:57.347 [DEBUG] [Thread-191058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:43:57.347 [DEBUG] [Thread-191058] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:43:57.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:43:57.349 [DEBUG] [Thread-191058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:43:57.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:43:57.403 [DEBUG] [Thread-191058] [transport.py] [_log()] userauth is OK
2026-02-14T19:43:57.403 [DEBUG] [Thread-191058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:43:57.403 [DEBUG] [Thread-191058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:43:57.403 [DEBUG] [Thread-191058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:43:57.403 [DEBUG] [Thread-191058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:43:57.422 [INFO] [Thread-191058] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:43:57.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-14T19:43:57.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:43:58.250 [DEBUG] [Thread-191058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:43:58.251 [DEBUG] [Thread-191058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:43:58.298 [DEBUG] [Thread-191058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:43:58.299 [DEBUG] [Thread-191058] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:43:58.308 [DEBUG] [Thread-191058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:43:58.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:43:58.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:43:58.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-14T19:43:58.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:43:58.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:43:58.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:43:58.342 [DEBUG] [Thread-191058] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:44:00.443 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:44:00.444 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:44:01.424 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:44:09.628 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:44:11.626 [DEBUG] [Thread-191060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:44:15.143 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:44:21.435 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:44:26.679 [DEBUG] [Thread-191061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:44:26.907 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:44:28.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:44:28.365 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:44:28.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-14T19:44:30.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 44, 7), 10.26, 49.34, 0.0, 39.33, 12.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:44:30.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:44:07
2026-02-14T19:44:30.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:44:30.893 [DEBUG] [Thread-191062] [transport.py] [_log()] starting thread (client mode): 0xa57c0160
2026-02-14T19:44:30.893 [DEBUG] [Thread-191062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:44:30.913 [DEBUG] [Thread-191062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:44:30.913 [INFO] [Thread-191062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:44:30.916 [DEBUG] [Thread-191062] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:44:30.916 [DEBUG] [Thread-191062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:44:30.916 [DEBUG] [Thread-191062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:44:30.916 [DEBUG] [Thread-191062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:44:30.916 [DEBUG] [Thread-191062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:44:30.916 [DEBUG] [Thread-191062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:44:30.916 [DEBUG] [Thread-191062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:44:30.916 [DEBUG] [Thread-191062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:44:30.916 [DEBUG] [Thread-191062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:44:30.916 [DEBUG] [Thread-191062] [transport.py] [_log()] client lang: <none>
2026-02-14T19:44:30.916 [DEBUG] [Thread-191062] [transport.py] [_log()] server lang: <none>
2026-02-14T19:44:30.916 [DEBUG] [Thread-191062] [transport.py] [_log()] kex follows: False
2026-02-14T19:44:30.917 [DEBUG] [Thread-191062] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:44:30.917 [DEBUG] [Thread-191062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:44:30.917 [DEBUG] [Thread-191062] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:44:30.917 [DEBUG] [Thread-191062] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:44:30.917 [DEBUG] [Thread-191062] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:44:30.917 [DEBUG] [Thread-191062] [transport.py] [_log()] Compression: none
2026-02-14T19:44:30.917 [DEBUG] [Thread-191062] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:44:30.934 [DEBUG] [Thread-191062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:44:30.935 [DEBUG] [Thread-191062] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:44:30.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:44:30.936 [DEBUG] [Thread-191062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:44:30.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:44:30.939 [DEBUG] [Thread-191062] [transport.py] [_log()] userauth is OK
2026-02-14T19:44:30.939 [DEBUG] [Thread-191062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:44:30.939 [DEBUG] [Thread-191062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:44:30.939 [DEBUG] [Thread-191062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:44:30.939 [DEBUG] [Thread-191062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:44:30.973 [INFO] [Thread-191062] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:44:30.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:44:31.614 [DEBUG] [Thread-191062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:44:31.614 [DEBUG] [Thread-191062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:44:31.615 [DEBUG] [Thread-191062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:44:31.655 [DEBUG] [Thread-191062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:44:31.655 [DEBUG] [Thread-191062] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:44:31.658 [DEBUG] [Thread-191062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:44:31.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:44:31.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:44:31.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:44:31.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:44:31.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:44:31.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:44:31.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:44:31.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:44:31.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:44:31.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.738656 -999.00  +12.20  25.36     55   +3.40 1 1 1 1 1   657    0 7.91 -39.05 ----- 23.5 25.4 160.2 36.1 12.8 -25.7 12.7 -24.6 12.4 -23.7 12.8 -24.8
2026-02-14T19:44:31.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:44:31.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:44:31.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.738656
2026-02-14T19:44:31.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:44:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:44:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:44:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:44:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:44:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:44:07', tmtdew=10.26, humidity=49.34, cloud=0.0, wind=39.33, temperature=12.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:43:39.878', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:44:31.686 [DEBUG] [Thread-191062] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:44:31.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-14T19:44:31.781 [DEBUG] [Thread-191065] [transport.py] [_log()] starting thread (client mode): 0xa57c22c0
2026-02-14T19:44:31.781 [DEBUG] [Thread-191065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:44:31.796 [DEBUG] [Thread-191065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:44:31.796 [INFO] [Thread-191065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:44:31.803 [DEBUG] [Thread-191065] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:44:31.804 [DEBUG] [Thread-191065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:44:31.804 [DEBUG] [Thread-191065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:44:31.804 [DEBUG] [Thread-191065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:44:31.804 [DEBUG] [Thread-191065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:44:31.804 [DEBUG] [Thread-191065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:44:31.804 [DEBUG] [Thread-191065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:44:31.804 [DEBUG] [Thread-191065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:44:31.804 [DEBUG] [Thread-191065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:44:31.804 [DEBUG] [Thread-191065] [transport.py] [_log()] client lang: <none>
2026-02-14T19:44:31.804 [DEBUG] [Thread-191065] [transport.py] [_log()] server lang: <none>
2026-02-14T19:44:31.804 [DEBUG] [Thread-191065] [transport.py] [_log()] kex follows: False
2026-02-14T19:44:31.804 [DEBUG] [Thread-191065] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:44:31.804 [DEBUG] [Thread-191065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:44:31.804 [DEBUG] [Thread-191065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:44:31.804 [DEBUG] [Thread-191065] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:44:31.804 [DEBUG] [Thread-191065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:44:31.805 [DEBUG] [Thread-191065] [transport.py] [_log()] Compression: none
2026-02-14T19:44:31.805 [DEBUG] [Thread-191065] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:44:31.863 [DEBUG] [Thread-191065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:44:31.863 [DEBUG] [Thread-191065] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:44:31.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:44:31.865 [DEBUG] [Thread-191065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:44:31.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:44:31.918 [DEBUG] [Thread-191065] [transport.py] [_log()] userauth is OK
2026-02-14T19:44:31.919 [DEBUG] [Thread-191065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:44:31.919 [DEBUG] [Thread-191065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:44:31.919 [DEBUG] [Thread-191065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:44:31.919 [DEBUG] [Thread-191065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:44:31.938 [INFO] [Thread-191065] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:44:31.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-14T19:44:31.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:44:32.225 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:44:32.792 [DEBUG] [Thread-191065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:44:32.792 [DEBUG] [Thread-191065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:44:32.840 [DEBUG] [Thread-191065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:44:32.840 [DEBUG] [Thread-191065] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:44:32.849 [DEBUG] [Thread-191065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:44:32.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:44: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-14T19:44: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-14T19:44:32.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:44:32.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:44:32.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:44:32.882 [DEBUG] [Thread-191065] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:44:36.923 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:44:39.865 [DEBUG] [Thread-191067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:44:41.509 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:44:41.717 [DEBUG] [Thread-191068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:44:50.856 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:44:56.774 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:44:56.778 [DEBUG] [Thread-191069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:45:02.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:45:02.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:45:02.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-14T19:45:02.993 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:45:05.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 44, 44), 10.25, 49.38, 0.0, 34.72, 12.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:45:05.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:44:44
2026-02-14T19:45:05.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:45:06.032 [DEBUG] [Thread-191070] [transport.py] [_log()] starting thread (client mode): 0xa2d03640
2026-02-14T19:45:06.032 [DEBUG] [Thread-191070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:45:06.053 [DEBUG] [Thread-191070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:45:06.053 [INFO] [Thread-191070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:45:06.054 [DEBUG] [Thread-191070] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:45:06.055 [DEBUG] [Thread-191070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:45:06.055 [DEBUG] [Thread-191070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:45:06.055 [DEBUG] [Thread-191070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:45:06.055 [DEBUG] [Thread-191070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:45:06.055 [DEBUG] [Thread-191070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:45:06.055 [DEBUG] [Thread-191070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:45:06.055 [DEBUG] [Thread-191070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:45:06.055 [DEBUG] [Thread-191070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:45:06.055 [DEBUG] [Thread-191070] [transport.py] [_log()] client lang: <none>
2026-02-14T19:45:06.055 [DEBUG] [Thread-191070] [transport.py] [_log()] server lang: <none>
2026-02-14T19:45:06.055 [DEBUG] [Thread-191070] [transport.py] [_log()] kex follows: False
2026-02-14T19:45:06.055 [DEBUG] [Thread-191070] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:45:06.055 [DEBUG] [Thread-191070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:45:06.055 [DEBUG] [Thread-191070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:45:06.055 [DEBUG] [Thread-191070] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:45:06.055 [DEBUG] [Thread-191070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:45:06.055 [DEBUG] [Thread-191070] [transport.py] [_log()] Compression: none
2026-02-14T19:45:06.055 [DEBUG] [Thread-191070] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:45:06.066 [DEBUG] [Thread-191070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:45:06.066 [DEBUG] [Thread-191070] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:45:06.067 [DEBUG] [Thread-191070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:45:06.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:45:06.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:45:06.068 [DEBUG] [Thread-191070] [transport.py] [_log()] userauth is OK
2026-02-14T19:45:06.069 [DEBUG] [Thread-191070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:45:06.069 [DEBUG] [Thread-191070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:45:06.069 [DEBUG] [Thread-191070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:45:06.069 [DEBUG] [Thread-191070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:45:06.087 [INFO] [Thread-191070] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:45:06.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:45:06.515 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:45:06.516 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:45:07.033 [DEBUG] [Thread-191070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:45:07.033 [DEBUG] [Thread-191070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:45:07.034 [DEBUG] [Thread-191070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:45:07.074 [DEBUG] [Thread-191070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:45:07.074 [DEBUG] [Thread-191070] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:45:07.078 [DEBUG] [Thread-191070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:45:07.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:45:07.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:45:07.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:45:07.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:45:07.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:45:07.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:45:07.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:45:07.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:45:07.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:45:07.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.739004 -999.00  +12.20  23.05     55   +3.40 1 1 1 1 1   639    0 7.91 -36.95 ----- 31.5 23.1 162.8 38.7 12.8 -25.7 12.7 -24.8 12.5 -23.7 12.8 -25.0
2026-02-14T19:45:07.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:45:07.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:45:07.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.739004
2026-02-14T19:45:07.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:45:07.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:45:07.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:45:07.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:45:07.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:45:07.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:44:44', tmtdew=10.25, humidity=49.38, cloud=0.0, wind=34.72, temperature=12.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:44:09.946', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:45:07.153 [DEBUG] [Thread-191070] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:45:07.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T19:45:07.250 [DEBUG] [Thread-191073] [transport.py] [_log()] starting thread (client mode): 0xa2d020e0
2026-02-14T19:45:07.250 [DEBUG] [Thread-191073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:45:07.264 [DEBUG] [Thread-191073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:45:07.264 [INFO] [Thread-191073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:45:07.272 [DEBUG] [Thread-191073] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:45:07.272 [DEBUG] [Thread-191073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:45:07.272 [DEBUG] [Thread-191073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:45:07.272 [DEBUG] [Thread-191073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:45:07.272 [DEBUG] [Thread-191073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:45:07.272 [DEBUG] [Thread-191073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:45:07.272 [DEBUG] [Thread-191073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:45:07.272 [DEBUG] [Thread-191073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:45:07.272 [DEBUG] [Thread-191073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:45:07.272 [DEBUG] [Thread-191073] [transport.py] [_log()] client lang: <none>
2026-02-14T19:45:07.273 [DEBUG] [Thread-191073] [transport.py] [_log()] server lang: <none>
2026-02-14T19:45:07.273 [DEBUG] [Thread-191073] [transport.py] [_log()] kex follows: False
2026-02-14T19:45:07.273 [DEBUG] [Thread-191073] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:45:07.273 [DEBUG] [Thread-191073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:45:07.273 [DEBUG] [Thread-191073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:45:07.273 [DEBUG] [Thread-191073] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:45:07.273 [DEBUG] [Thread-191073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:45:07.273 [DEBUG] [Thread-191073] [transport.py] [_log()] Compression: none
2026-02-14T19:45:07.273 [DEBUG] [Thread-191073] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:45:07.331 [DEBUG] [Thread-191073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:45:07.332 [DEBUG] [Thread-191073] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:45:07.332 [DEBUG] [Thread-191073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:45:07.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:45:07.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:45:07.387 [DEBUG] [Thread-191073] [transport.py] [_log()] userauth is OK
2026-02-14T19:45:07.387 [DEBUG] [Thread-191073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:45:07.388 [DEBUG] [Thread-191073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:45:07.388 [DEBUG] [Thread-191073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:45:07.388 [DEBUG] [Thread-191073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:45:07.407 [INFO] [Thread-191073] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:45:07.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-14T19:45:07.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:45:08.248 [DEBUG] [Thread-191073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:45:08.249 [DEBUG] [Thread-191073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:45:08.296 [DEBUG] [Thread-191073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:45:08.296 [DEBUG] [Thread-191073] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:45:08.305 [DEBUG] [Thread-191073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:45:08.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:45:08.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-14T19:45:08.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-14T19:45:08.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:45:08.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:45:08.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:45:08.339 [DEBUG] [Thread-191073] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:45:08.549 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:45:11.817 [DEBUG] [Thread-191075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:45:14.170 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:45:20.536 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:45:26.797 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:45:26.869 [DEBUG] [Thread-191076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:45:33.133 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:45:38.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:45:38.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:45:38.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-14T19:45:39.434 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:45:39.950 [DEBUG] [Thread-191077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:45:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 45, 19), 10.24, 49.43, 0.0, 33.31, 12.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:45:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:45:19
2026-02-14T19:45:40.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:45:40.779 [DEBUG] [Thread-191078] [transport.py] [_log()] starting thread (client mode): 0xa2d03f70
2026-02-14T19:45:40.779 [DEBUG] [Thread-191078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:45:40.800 [DEBUG] [Thread-191078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:45:40.800 [INFO] [Thread-191078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:45:40.803 [DEBUG] [Thread-191078] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:45:40.803 [DEBUG] [Thread-191078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:45:40.803 [DEBUG] [Thread-191078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:45:40.803 [DEBUG] [Thread-191078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:45:40.803 [DEBUG] [Thread-191078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:45:40.803 [DEBUG] [Thread-191078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:45:40.803 [DEBUG] [Thread-191078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:45:40.803 [DEBUG] [Thread-191078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:45:40.803 [DEBUG] [Thread-191078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:45:40.803 [DEBUG] [Thread-191078] [transport.py] [_log()] client lang: <none>
2026-02-14T19:45:40.803 [DEBUG] [Thread-191078] [transport.py] [_log()] server lang: <none>
2026-02-14T19:45:40.803 [DEBUG] [Thread-191078] [transport.py] [_log()] kex follows: False
2026-02-14T19:45:40.803 [DEBUG] [Thread-191078] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:45:40.803 [DEBUG] [Thread-191078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:45:40.803 [DEBUG] [Thread-191078] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:45:40.803 [DEBUG] [Thread-191078] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:45:40.803 [DEBUG] [Thread-191078] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:45:40.803 [DEBUG] [Thread-191078] [transport.py] [_log()] Compression: none
2026-02-14T19:45:40.803 [DEBUG] [Thread-191078] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:45:40.820 [DEBUG] [Thread-191078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:45:40.821 [DEBUG] [Thread-191078] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:45:40.821 [DEBUG] [Thread-191078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:45:40.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:45:40.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:45:40.823 [DEBUG] [Thread-191078] [transport.py] [_log()] userauth is OK
2026-02-14T19:45:40.823 [DEBUG] [Thread-191078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:45:40.823 [DEBUG] [Thread-191078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:45:40.823 [DEBUG] [Thread-191078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:45:40.823 [DEBUG] [Thread-191078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:45:40.859 [INFO] [Thread-191078] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:45:40.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:45:41.475 [DEBUG] [Thread-191078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:45:41.475 [DEBUG] [Thread-191078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:45:41.476 [DEBUG] [Thread-191078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:45:41.516 [DEBUG] [Thread-191078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:45:41.516 [DEBUG] [Thread-191078] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:45:41.519 [DEBUG] [Thread-191078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:45:41.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:45:41.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:45:41.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:45:41.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:45:41.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:45:41.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:45:41.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:45:41.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:45:41.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:45:41.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.739351 -999.00  +12.20  29.68     55   +3.40 1 1 1 1 1   621    0 8.00 -37.65 ----- 31.8 29.7 165.2 37.4 12.8 -25.7 12.7 -24.6 12.4 -23.7 12.8 -24.9
2026-02-14T19:45:41.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:45:41.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:45:41.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.739351
2026-02-14T19:45:41.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:45:41.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:45:41.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:45:41.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:45:41.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:45:41.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:45:19', tmtdew=10.24, humidity=49.43, cloud=0.0, wind=33.31, temperature=12.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:44:39.926', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:45:41.547 [DEBUG] [Thread-191078] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:45:41.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-14T19:45:41.646 [DEBUG] [Thread-191081] [transport.py] [_log()] starting thread (client mode): 0xa5742f50
2026-02-14T19:45:41.646 [DEBUG] [Thread-191081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:45:41.661 [DEBUG] [Thread-191081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:45:41.661 [INFO] [Thread-191081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:45:41.668 [DEBUG] [Thread-191081] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:45:41.668 [DEBUG] [Thread-191081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:45:41.669 [DEBUG] [Thread-191081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:45:41.669 [DEBUG] [Thread-191081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:45:41.669 [DEBUG] [Thread-191081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:45:41.669 [DEBUG] [Thread-191081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:45:41.669 [DEBUG] [Thread-191081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:45:41.669 [DEBUG] [Thread-191081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:45:41.669 [DEBUG] [Thread-191081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:45:41.669 [DEBUG] [Thread-191081] [transport.py] [_log()] client lang: <none>
2026-02-14T19:45:41.669 [DEBUG] [Thread-191081] [transport.py] [_log()] server lang: <none>
2026-02-14T19:45:41.669 [DEBUG] [Thread-191081] [transport.py] [_log()] kex follows: False
2026-02-14T19:45:41.669 [DEBUG] [Thread-191081] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:45:41.669 [DEBUG] [Thread-191081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:45:41.669 [DEBUG] [Thread-191081] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:45:41.669 [DEBUG] [Thread-191081] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:45:41.669 [DEBUG] [Thread-191081] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:45:41.669 [DEBUG] [Thread-191081] [transport.py] [_log()] Compression: none
2026-02-14T19:45:41.670 [DEBUG] [Thread-191081] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:45:41.726 [DEBUG] [Thread-191081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:45:41.727 [DEBUG] [Thread-191081] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:45:41.727 [DEBUG] [Thread-191081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:45:41.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:45:41.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:45:41.783 [DEBUG] [Thread-191081] [transport.py] [_log()] userauth is OK
2026-02-14T19:45:41.783 [DEBUG] [Thread-191081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:45:41.784 [DEBUG] [Thread-191081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:45:41.784 [DEBUG] [Thread-191081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:45:41.784 [DEBUG] [Thread-191081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:45:41.803 [INFO] [Thread-191081] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:45:41.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-14T19:45:41.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:45:41.908 [DEBUG] [Thread-191083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:45:42.612 [DEBUG] [Thread-191081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:45:42.613 [DEBUG] [Thread-191081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:45:42.660 [DEBUG] [Thread-191081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:45:42.661 [DEBUG] [Thread-191081] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:45:42.669 [DEBUG] [Thread-191081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:45:42.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:45:42.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:45:42.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:45:42.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:45:42.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:45:42.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:45:42.704 [DEBUG] [Thread-191081] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:45:56.957 [DEBUG] [Thread-191084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:46:10.511 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:46:10.512 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:46:11.993 [DEBUG] [Thread-191085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:46:12.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:46:12.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:46:12.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-14T19:46:14.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 45, 54), 10.22, 49.48, 0.0, 33.14, 12.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:46:14.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:45:54
2026-02-14T19:46:14.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:46:15.084 [DEBUG] [Thread-191086] [transport.py] [_log()] starting thread (client mode): 0xa2d6d120
2026-02-14T19:46:15.084 [DEBUG] [Thread-191086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:46:15.104 [DEBUG] [Thread-191086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:46:15.105 [INFO] [Thread-191086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:46:15.108 [DEBUG] [Thread-191086] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:46:15.108 [DEBUG] [Thread-191086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:46:15.108 [DEBUG] [Thread-191086] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:46:15.108 [DEBUG] [Thread-191086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:46:15.108 [DEBUG] [Thread-191086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:46:15.108 [DEBUG] [Thread-191086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:46:15.108 [DEBUG] [Thread-191086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:46:15.108 [DEBUG] [Thread-191086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:46:15.108 [DEBUG] [Thread-191086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:46:15.108 [DEBUG] [Thread-191086] [transport.py] [_log()] client lang: <none>
2026-02-14T19:46:15.108 [DEBUG] [Thread-191086] [transport.py] [_log()] server lang: <none>
2026-02-14T19:46:15.108 [DEBUG] [Thread-191086] [transport.py] [_log()] kex follows: False
2026-02-14T19:46:15.108 [DEBUG] [Thread-191086] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:46:15.108 [DEBUG] [Thread-191086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:46:15.108 [DEBUG] [Thread-191086] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:46:15.108 [DEBUG] [Thread-191086] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:46:15.108 [DEBUG] [Thread-191086] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:46:15.108 [DEBUG] [Thread-191086] [transport.py] [_log()] Compression: none
2026-02-14T19:46:15.108 [DEBUG] [Thread-191086] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:46:15.123 [DEBUG] [Thread-191086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:46:15.124 [DEBUG] [Thread-191086] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:46:15.124 [DEBUG] [Thread-191086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:46:15.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:46:15.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:46:15.126 [DEBUG] [Thread-191086] [transport.py] [_log()] userauth is OK
2026-02-14T19:46:15.126 [DEBUG] [Thread-191086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:46:15.126 [DEBUG] [Thread-191086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:46:15.127 [DEBUG] [Thread-191086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:46:15.127 [DEBUG] [Thread-191086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:46:15.145 [INFO] [Thread-191086] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:46:15.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:46:15.769 [DEBUG] [Thread-191086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:46:15.769 [DEBUG] [Thread-191086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:46:15.769 [DEBUG] [Thread-191086] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:46:15.810 [DEBUG] [Thread-191086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:46:15.811 [DEBUG] [Thread-191086] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:46:15.814 [DEBUG] [Thread-191086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:46:15.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:46:15.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:46:15.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:46:15.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:46:15.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:46:15.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:46:15.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:46:15.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:46:15.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:46:15.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.740045 -999.00  +12.20  26.83     55   +3.40 1 1 1 1 1   582    0 7.91 -34.94 ----- 31.4 26.8 173.0 35.1 12.7 -25.6 12.6 -24.7 12.4 -23.7 12.8 -24.9
2026-02-14T19:46:15.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:46:15.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:46:15.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.740045
2026-02-14T19:46:15.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:46:15.839 [DEBUG] [Thread-191086] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:46:15.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:46:15.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:46:15.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:46:15.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:46:15.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:45:54', tmtdew=10.22, humidity=49.48, cloud=0.0, wind=33.14, temperature=12.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:45:39.888', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:46:15.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T19:46:15.932 [DEBUG] [Thread-191089] [transport.py] [_log()] starting thread (client mode): 0xa2d6c7c0
2026-02-14T19:46:15.932 [DEBUG] [Thread-191089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:46:15.947 [DEBUG] [Thread-191089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:46:15.947 [INFO] [Thread-191089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:46:15.955 [DEBUG] [Thread-191089] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:46:15.955 [DEBUG] [Thread-191089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:46:15.956 [DEBUG] [Thread-191089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:46:15.956 [DEBUG] [Thread-191089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:46:15.956 [DEBUG] [Thread-191089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:46:15.956 [DEBUG] [Thread-191089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:46:15.956 [DEBUG] [Thread-191089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:46:15.956 [DEBUG] [Thread-191089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:46:15.956 [DEBUG] [Thread-191089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:46:15.956 [DEBUG] [Thread-191089] [transport.py] [_log()] client lang: <none>
2026-02-14T19:46:15.956 [DEBUG] [Thread-191089] [transport.py] [_log()] server lang: <none>
2026-02-14T19:46:15.956 [DEBUG] [Thread-191089] [transport.py] [_log()] kex follows: False
2026-02-14T19:46:15.956 [DEBUG] [Thread-191089] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:46:15.956 [DEBUG] [Thread-191089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:46:15.956 [DEBUG] [Thread-191089] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:46:15.956 [DEBUG] [Thread-191089] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:46:15.956 [DEBUG] [Thread-191089] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:46:15.956 [DEBUG] [Thread-191089] [transport.py] [_log()] Compression: none
2026-02-14T19:46:15.956 [DEBUG] [Thread-191089] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:46:16.019 [DEBUG] [Thread-191089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:46:16.019 [DEBUG] [Thread-191089] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:46:16.020 [DEBUG] [Thread-191089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:46:16.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:46:16.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:46:16.075 [DEBUG] [Thread-191089] [transport.py] [_log()] userauth is OK
2026-02-14T19:46:16.076 [DEBUG] [Thread-191089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:46:16.076 [DEBUG] [Thread-191089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:46:16.076 [DEBUG] [Thread-191089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:46:16.076 [DEBUG] [Thread-191089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:46:16.103 [INFO] [Thread-191089] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:46:16.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-14T19:46:16.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:46:16.925 [DEBUG] [Thread-191089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:46:16.925 [DEBUG] [Thread-191089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:46:16.973 [DEBUG] [Thread-191089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:46:16.974 [DEBUG] [Thread-191089] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:46:16.983 [DEBUG] [Thread-191089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:46:16.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:46:16.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-14T19:46:17.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-14T19:46:17.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:46:17.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:46:17.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:46:17.019 [DEBUG] [Thread-191089] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:46:27.027 [DEBUG] [Thread-191091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:46:40.012 [DEBUG] [Thread-191092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:46:42.077 [DEBUG] [Thread-191093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:46:47.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:46:47.042 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:46: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-14T19:46:49.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 46, 30), 10.23, 49.43, 0.0, 36.72, 12.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:46:49.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:46:30
2026-02-14T19:46:49.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:46:49.674 [DEBUG] [Thread-191094] [transport.py] [_log()] starting thread (client mode): 0xa2d7b520
2026-02-14T19:46:49.674 [DEBUG] [Thread-191094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:46:49.692 [DEBUG] [Thread-191094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:46:49.693 [INFO] [Thread-191094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:46:49.694 [DEBUG] [Thread-191094] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:46:49.694 [DEBUG] [Thread-191094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:46:49.694 [DEBUG] [Thread-191094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:46:49.694 [DEBUG] [Thread-191094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:46:49.694 [DEBUG] [Thread-191094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:46:49.694 [DEBUG] [Thread-191094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:46:49.694 [DEBUG] [Thread-191094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:46:49.694 [DEBUG] [Thread-191094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:46:49.694 [DEBUG] [Thread-191094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:46:49.694 [DEBUG] [Thread-191094] [transport.py] [_log()] client lang: <none>
2026-02-14T19:46:49.694 [DEBUG] [Thread-191094] [transport.py] [_log()] server lang: <none>
2026-02-14T19:46:49.694 [DEBUG] [Thread-191094] [transport.py] [_log()] kex follows: False
2026-02-14T19:46:49.694 [DEBUG] [Thread-191094] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:46:49.694 [DEBUG] [Thread-191094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:46:49.694 [DEBUG] [Thread-191094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:46:49.694 [DEBUG] [Thread-191094] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:46:49.694 [DEBUG] [Thread-191094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:46:49.694 [DEBUG] [Thread-191094] [transport.py] [_log()] Compression: none
2026-02-14T19:46:49.694 [DEBUG] [Thread-191094] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:46:49.702 [DEBUG] [Thread-191094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:46:49.702 [DEBUG] [Thread-191094] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:46:49.703 [DEBUG] [Thread-191094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:46:49.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:46:49.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:46:49.704 [DEBUG] [Thread-191094] [transport.py] [_log()] userauth is OK
2026-02-14T19:46:49.704 [DEBUG] [Thread-191094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:46:49.704 [DEBUG] [Thread-191094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:46:49.704 [DEBUG] [Thread-191094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:46:49.704 [DEBUG] [Thread-191094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:46:49.720 [INFO] [Thread-191094] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:46:49.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:46:50.281 [DEBUG] [Thread-191094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:46:50.282 [DEBUG] [Thread-191094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:46:50.282 [DEBUG] [Thread-191094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:46:50.322 [DEBUG] [Thread-191094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:46:50.322 [DEBUG] [Thread-191094] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:46:50.325 [DEBUG] [Thread-191094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:46:50.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:46:50.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:46:50.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:46:50.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:46:50.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:46:50.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:46:50.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:46:50.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:46:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:46:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.740740 -999.00  +12.10  24.32     55   +3.40 1 1 1 1 1   541    0 7.82 -35.56 ----- 22.3 24.3 175.2 38.8 12.7 -25.7 12.6 -24.5 12.4 -23.6 12.7 -24.8
2026-02-14T19:46:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:46:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:46:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.740740
2026-02-14T19:46:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:46:50.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:46:50.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:46:50.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:46:50.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:46:50.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:46:30', tmtdew=10.23, humidity=49.43, cloud=0.0, wind=36.72, temperature=12.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:46:39.936', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:46:50.350 [DEBUG] [Thread-191094] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:46:50.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-14T19:46:50.445 [DEBUG] [Thread-191097] [transport.py] [_log()] starting thread (client mode): 0xa2d01120
2026-02-14T19:46:50.446 [DEBUG] [Thread-191097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:46:50.460 [DEBUG] [Thread-191097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:46:50.460 [INFO] [Thread-191097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:46:50.467 [DEBUG] [Thread-191097] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:46:50.468 [DEBUG] [Thread-191097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:46:50.468 [DEBUG] [Thread-191097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:46:50.468 [DEBUG] [Thread-191097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:46:50.468 [DEBUG] [Thread-191097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:46:50.468 [DEBUG] [Thread-191097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:46:50.468 [DEBUG] [Thread-191097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:46:50.468 [DEBUG] [Thread-191097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:46:50.468 [DEBUG] [Thread-191097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:46:50.468 [DEBUG] [Thread-191097] [transport.py] [_log()] client lang: <none>
2026-02-14T19:46:50.468 [DEBUG] [Thread-191097] [transport.py] [_log()] server lang: <none>
2026-02-14T19:46:50.468 [DEBUG] [Thread-191097] [transport.py] [_log()] kex follows: False
2026-02-14T19:46:50.468 [DEBUG] [Thread-191097] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:46:50.468 [DEBUG] [Thread-191097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:46:50.468 [DEBUG] [Thread-191097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:46:50.468 [DEBUG] [Thread-191097] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:46:50.468 [DEBUG] [Thread-191097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:46:50.468 [DEBUG] [Thread-191097] [transport.py] [_log()] Compression: none
2026-02-14T19:46:50.468 [DEBUG] [Thread-191097] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:46:50.526 [DEBUG] [Thread-191097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:46:50.527 [DEBUG] [Thread-191097] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:46:50.528 [DEBUG] [Thread-191097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:46:50.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:46:50.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:46:50.583 [DEBUG] [Thread-191097] [transport.py] [_log()] userauth is OK
2026-02-14T19:46:50.583 [DEBUG] [Thread-191097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:46:50.584 [DEBUG] [Thread-191097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:46:50.584 [DEBUG] [Thread-191097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:46:50.584 [DEBUG] [Thread-191097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:46:50.602 [INFO] [Thread-191097] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:46:50.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-14T19:46:50.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:46:51.418 [DEBUG] [Thread-191097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:46:51.418 [DEBUG] [Thread-191097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:46:51.466 [DEBUG] [Thread-191097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:46:51.466 [DEBUG] [Thread-191097] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:46:51.474 [DEBUG] [Thread-191097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:46:51.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:46:51.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-14T19:46:51.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-14T19:46:51.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:46:51.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:46:51.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:46:51.508 [DEBUG] [Thread-191097] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:46:57.115 [DEBUG] [Thread-191099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:47:12.166 [DEBUG] [Thread-191100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:47:17.006 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:47:17.007 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:47:21.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:47:21.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:47:21.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T19:47:23.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 47, 6), 10.21, 49.49, 0.0, 32.54, 12.31, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:47:23.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:47:06
2026-02-14T19:47:23.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:47:23.983 [DEBUG] [Thread-191101] [transport.py] [_log()] starting thread (client mode): 0xa5743fa0
2026-02-14T19:47:23.983 [DEBUG] [Thread-191101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:47:24.002 [DEBUG] [Thread-191101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:47:24.002 [INFO] [Thread-191101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:47:24.004 [DEBUG] [Thread-191101] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:47:24.004 [DEBUG] [Thread-191101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:47:24.004 [DEBUG] [Thread-191101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:47:24.004 [DEBUG] [Thread-191101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:47:24.004 [DEBUG] [Thread-191101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:47:24.004 [DEBUG] [Thread-191101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:47:24.004 [DEBUG] [Thread-191101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:47:24.004 [DEBUG] [Thread-191101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:47:24.004 [DEBUG] [Thread-191101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:47:24.004 [DEBUG] [Thread-191101] [transport.py] [_log()] client lang: <none>
2026-02-14T19:47:24.004 [DEBUG] [Thread-191101] [transport.py] [_log()] server lang: <none>
2026-02-14T19:47:24.004 [DEBUG] [Thread-191101] [transport.py] [_log()] kex follows: False
2026-02-14T19:47:24.005 [DEBUG] [Thread-191101] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:47:24.005 [DEBUG] [Thread-191101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:47:24.005 [DEBUG] [Thread-191101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:47:24.005 [DEBUG] [Thread-191101] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:47:24.005 [DEBUG] [Thread-191101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:47:24.005 [DEBUG] [Thread-191101] [transport.py] [_log()] Compression: none
2026-02-14T19:47:24.005 [DEBUG] [Thread-191101] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:47:24.017 [DEBUG] [Thread-191101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:47:24.018 [DEBUG] [Thread-191101] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:47:24.018 [DEBUG] [Thread-191101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:47:24.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:47:24.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:47:24.020 [DEBUG] [Thread-191101] [transport.py] [_log()] userauth is OK
2026-02-14T19:47:24.020 [DEBUG] [Thread-191101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:47:24.020 [DEBUG] [Thread-191101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:47:24.020 [DEBUG] [Thread-191101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:47:24.020 [DEBUG] [Thread-191101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:47:24.041 [INFO] [Thread-191101] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:47:24.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:47:24.648 [DEBUG] [Thread-191101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:47:24.648 [DEBUG] [Thread-191101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:47:24.648 [DEBUG] [Thread-191101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:47:24.689 [DEBUG] [Thread-191101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:47:24.689 [DEBUG] [Thread-191101] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:47:24.691 [DEBUG] [Thread-191101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:47:24.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:47:24.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:47:24.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:47:24.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:47:24.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:47:24.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:47:24.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:47:24.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:47:24.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:47:24.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.741087 -999.00  +12.10  25.69     55   +3.40 1 1 1 1 1   519    0 7.99 -34.46 ----- 31.9 25.7 170.0 38.1 12.7 -25.7 12.6 -24.8 12.4 -23.6 12.7 -24.9
2026-02-14T19:47:24.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:47:24.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:47:24.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.741087
2026-02-14T19:47:24.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:47:24.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:47:24.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:47:24.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:47:24.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:47:24.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:47:06', tmtdew=10.21, humidity=49.49, cloud=0.0, wind=32.54, temperature=12.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:47:09.917', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:47:24.711 [DEBUG] [Thread-191101] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:47:24.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-14T19:47:24.805 [DEBUG] [Thread-191104] [transport.py] [_log()] starting thread (client mode): 0xa57408b0
2026-02-14T19:47:24.805 [DEBUG] [Thread-191104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:47:24.819 [DEBUG] [Thread-191104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:47:24.820 [INFO] [Thread-191104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:47:24.827 [DEBUG] [Thread-191104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:47:24.827 [DEBUG] [Thread-191104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:47:24.827 [DEBUG] [Thread-191104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:47:24.828 [DEBUG] [Thread-191104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:47:24.828 [DEBUG] [Thread-191104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:47:24.828 [DEBUG] [Thread-191104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:47:24.828 [DEBUG] [Thread-191104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:47:24.828 [DEBUG] [Thread-191104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:47:24.828 [DEBUG] [Thread-191104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:47:24.828 [DEBUG] [Thread-191104] [transport.py] [_log()] client lang: <none>
2026-02-14T19:47:24.828 [DEBUG] [Thread-191104] [transport.py] [_log()] server lang: <none>
2026-02-14T19:47:24.828 [DEBUG] [Thread-191104] [transport.py] [_log()] kex follows: False
2026-02-14T19:47:24.828 [DEBUG] [Thread-191104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:47:24.828 [DEBUG] [Thread-191104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:47:24.828 [DEBUG] [Thread-191104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:47:24.828 [DEBUG] [Thread-191104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:47:24.828 [DEBUG] [Thread-191104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:47:24.828 [DEBUG] [Thread-191104] [transport.py] [_log()] Compression: none
2026-02-14T19:47:24.828 [DEBUG] [Thread-191104] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:47:24.886 [DEBUG] [Thread-191104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:47:24.887 [DEBUG] [Thread-191104] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:47:24.887 [DEBUG] [Thread-191104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:47:24.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:47:24.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:47:24.943 [DEBUG] [Thread-191104] [transport.py] [_log()] userauth is OK
2026-02-14T19:47:24.943 [DEBUG] [Thread-191104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:47:24.943 [DEBUG] [Thread-191104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:47:24.943 [DEBUG] [Thread-191104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:47:24.943 [DEBUG] [Thread-191104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:47:24.963 [INFO] [Thread-191104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:47: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-14T19:47:24.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:47:25.789 [DEBUG] [Thread-191104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:47:25.790 [DEBUG] [Thread-191104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:47:25.837 [DEBUG] [Thread-191104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:47:25.837 [DEBUG] [Thread-191104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:47:25.846 [DEBUG] [Thread-191104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:47:25.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:47:25.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:47:25.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-14T19:47:25.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:47:25.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:47:25.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:47:25.883 [DEBUG] [Thread-191104] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:47:27.204 [DEBUG] [Thread-191106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:47:40.069 [DEBUG] [Thread-191107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:47:42.255 [DEBUG] [Thread-191108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:47:55.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:47:55.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:47:55.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-14T19:47:57.295 [DEBUG] [Thread-191109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:47:57.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 47, 41), 10.42, 48.99, 0.0, 43.79, 12.58, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:47:57.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:47:41
2026-02-14T19:47:58.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:47:58.362 [DEBUG] [Thread-191110] [transport.py] [_log()] starting thread (client mode): 0xa5743f10
2026-02-14T19:47:58.362 [DEBUG] [Thread-191110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:47:58.372 [DEBUG] [Thread-191110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:47:58.373 [INFO] [Thread-191110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:47:58.375 [DEBUG] [Thread-191110] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:47:58.375 [DEBUG] [Thread-191110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:47:58.375 [DEBUG] [Thread-191110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:47:58.375 [DEBUG] [Thread-191110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:47:58.375 [DEBUG] [Thread-191110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:47:58.375 [DEBUG] [Thread-191110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:47:58.376 [DEBUG] [Thread-191110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:47:58.376 [DEBUG] [Thread-191110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:47:58.376 [DEBUG] [Thread-191110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:47:58.376 [DEBUG] [Thread-191110] [transport.py] [_log()] client lang: <none>
2026-02-14T19:47:58.376 [DEBUG] [Thread-191110] [transport.py] [_log()] server lang: <none>
2026-02-14T19:47:58.376 [DEBUG] [Thread-191110] [transport.py] [_log()] kex follows: False
2026-02-14T19:47:58.376 [DEBUG] [Thread-191110] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:47:58.376 [DEBUG] [Thread-191110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:47:58.376 [DEBUG] [Thread-191110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:47:58.376 [DEBUG] [Thread-191110] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:47:58.376 [DEBUG] [Thread-191110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:47:58.376 [DEBUG] [Thread-191110] [transport.py] [_log()] Compression: none
2026-02-14T19:47:58.376 [DEBUG] [Thread-191110] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:47:58.387 [DEBUG] [Thread-191110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:47:58.387 [DEBUG] [Thread-191110] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:47:58.387 [DEBUG] [Thread-191110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:47:58.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:47:58.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:47:58.388 [DEBUG] [Thread-191110] [transport.py] [_log()] userauth is OK
2026-02-14T19:47:58.388 [DEBUG] [Thread-191110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:47:58.389 [DEBUG] [Thread-191110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:47:58.389 [DEBUG] [Thread-191110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:47:58.389 [DEBUG] [Thread-191110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:47:58.403 [INFO] [Thread-191110] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:47:58.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:47:58.980 [DEBUG] [Thread-191110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:47:58.980 [DEBUG] [Thread-191110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:47:58.980 [DEBUG] [Thread-191110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:47:59.021 [DEBUG] [Thread-191110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:47:59.021 [DEBUG] [Thread-191110] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:47:59.024 [DEBUG] [Thread-191110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:47:59.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:47:59.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:47:59.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:47:59.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:47:59.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:47:59.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:47:59.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:47:59.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:47:59.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:47:59.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.741434 -999.00  +12.10  31.27     55   +3.40 1 1 2 1 1   497    0 7.75 -38.94 ----- 29.6 31.3 171.0 42.4 12.7 -25.7 12.6 -24.6 12.3 -23.6 12.7 -24.8
2026-02-14T19:47:59.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:47:59.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:47:59.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.741434
2026-02-14T19:47:59.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:47:59.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:47:59.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:47:59.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:47:59.050 [DEBUG] [Thread-191110] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:47:59.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:47:59.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:47:41', tmtdew=10.42, humidity=48.99, cloud=0.0, wind=43.79, temperature=12.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:47:39.898', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:47:59.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T19:47:59.146 [DEBUG] [Thread-191113] [transport.py] [_log()] starting thread (client mode): 0xa5742e60
2026-02-14T19:47:59.146 [DEBUG] [Thread-191113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:47:59.160 [DEBUG] [Thread-191113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:47:59.161 [INFO] [Thread-191113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:47:59.168 [DEBUG] [Thread-191113] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:47:59.169 [DEBUG] [Thread-191113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:47:59.169 [DEBUG] [Thread-191113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:47:59.169 [DEBUG] [Thread-191113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:47:59.169 [DEBUG] [Thread-191113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:47:59.169 [DEBUG] [Thread-191113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:47:59.169 [DEBUG] [Thread-191113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:47:59.170 [DEBUG] [Thread-191113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:47:59.170 [DEBUG] [Thread-191113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:47:59.170 [DEBUG] [Thread-191113] [transport.py] [_log()] client lang: <none>
2026-02-14T19:47:59.170 [DEBUG] [Thread-191113] [transport.py] [_log()] server lang: <none>
2026-02-14T19:47:59.170 [DEBUG] [Thread-191113] [transport.py] [_log()] kex follows: False
2026-02-14T19:47:59.170 [DEBUG] [Thread-191113] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:47:59.170 [DEBUG] [Thread-191113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:47:59.170 [DEBUG] [Thread-191113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:47:59.170 [DEBUG] [Thread-191113] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:47:59.170 [DEBUG] [Thread-191113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:47:59.170 [DEBUG] [Thread-191113] [transport.py] [_log()] Compression: none
2026-02-14T19:47:59.170 [DEBUG] [Thread-191113] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:47:59.226 [DEBUG] [Thread-191113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:47:59.226 [DEBUG] [Thread-191113] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:47:59.227 [DEBUG] [Thread-191113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:47:59.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:47:59.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:47:59.283 [DEBUG] [Thread-191113] [transport.py] [_log()] userauth is OK
2026-02-14T19:47:59.284 [DEBUG] [Thread-191113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:47:59.284 [DEBUG] [Thread-191113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:47:59.284 [DEBUG] [Thread-191113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:47:59.284 [DEBUG] [Thread-191113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:47:59.302 [INFO] [Thread-191113] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:47:59.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-14T19:47:59.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:48:00.110 [DEBUG] [Thread-191113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:48:00.111 [DEBUG] [Thread-191113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:48:00.158 [DEBUG] [Thread-191113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:48:00.158 [DEBUG] [Thread-191113] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:48:00.168 [DEBUG] [Thread-191113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:48:00.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:48:00.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:48:00.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:48:00.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:48:00.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:48:00.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:48:00.205 [DEBUG] [Thread-191113] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:48:12.329 [DEBUG] [Thread-191115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:48:21.307 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:48:21.309 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:48:27.382 [DEBUG] [Thread-191116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:48:30.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:48:30.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:48:30.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-14T19:48:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 48, 17), 10.09, 50.06, 0.0, 34.39, 12.17, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:48:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:48:17
2026-02-14T19:48:32.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:48:32.610 [DEBUG] [Thread-191117] [transport.py] [_log()] starting thread (client mode): 0xa2d03af0
2026-02-14T19:48:32.610 [DEBUG] [Thread-191117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:48:32.631 [DEBUG] [Thread-191117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:48:32.631 [INFO] [Thread-191117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:48:32.635 [DEBUG] [Thread-191117] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:48:32.635 [DEBUG] [Thread-191117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:48:32.635 [DEBUG] [Thread-191117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:48:32.635 [DEBUG] [Thread-191117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:48:32.635 [DEBUG] [Thread-191117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:48:32.635 [DEBUG] [Thread-191117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:48:32.636 [DEBUG] [Thread-191117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:48:32.636 [DEBUG] [Thread-191117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:48:32.636 [DEBUG] [Thread-191117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:48:32.636 [DEBUG] [Thread-191117] [transport.py] [_log()] client lang: <none>
2026-02-14T19:48:32.636 [DEBUG] [Thread-191117] [transport.py] [_log()] server lang: <none>
2026-02-14T19:48:32.636 [DEBUG] [Thread-191117] [transport.py] [_log()] kex follows: False
2026-02-14T19:48:32.636 [DEBUG] [Thread-191117] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:48:32.636 [DEBUG] [Thread-191117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:48:32.636 [DEBUG] [Thread-191117] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:48:32.636 [DEBUG] [Thread-191117] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:48:32.636 [DEBUG] [Thread-191117] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:48:32.636 [DEBUG] [Thread-191117] [transport.py] [_log()] Compression: none
2026-02-14T19:48:32.636 [DEBUG] [Thread-191117] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:48:32.654 [DEBUG] [Thread-191117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:48:32.654 [DEBUG] [Thread-191117] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:48:32.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:48:32.655 [DEBUG] [Thread-191117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:48:32.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:48:32.657 [DEBUG] [Thread-191117] [transport.py] [_log()] userauth is OK
2026-02-14T19:48:32.658 [DEBUG] [Thread-191117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:48:32.658 [DEBUG] [Thread-191117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:48:32.658 [DEBUG] [Thread-191117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:48:32.658 [DEBUG] [Thread-191117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:48:32.675 [INFO] [Thread-191117] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:48:32.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:48:33.323 [DEBUG] [Thread-191117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:48:33.323 [DEBUG] [Thread-191117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:48:33.323 [DEBUG] [Thread-191117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:48:33.366 [DEBUG] [Thread-191117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:48:33.366 [DEBUG] [Thread-191117] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:48:33.370 [DEBUG] [Thread-191117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:48:33.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:48:33.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:48:33.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:48:33.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:48:33.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:48:33.394 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:48:33.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:48:33.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:48:33.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:48:33.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.741781 -999.00  +12.00  27.11     55   +3.40 1 1 1 1 1   475    0 7.76 -40.54 ----- 25.7 27.1 166.2 31.3 12.7 -25.7 12.5 -24.7 12.3 -23.5 12.7 -24.9
2026-02-14T19:48:33.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:48:33.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:48:33.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.741781
2026-02-14T19:48:33.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:48:33.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:48:33.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:48:33.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:48:33.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:48:33.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:48:17', tmtdew=10.09, humidity=50.06, cloud=0.0, wind=34.39, temperature=12.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:48:09.878', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:48:33.397 [DEBUG] [Thread-191117] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:48:33.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-14T19:48:33.497 [DEBUG] [Thread-191120] [transport.py] [_log()] starting thread (client mode): 0xa2d02800
2026-02-14T19:48:33.497 [DEBUG] [Thread-191120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:48:33.511 [DEBUG] [Thread-191120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:48:33.511 [INFO] [Thread-191120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:48:33.518 [DEBUG] [Thread-191120] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:48:33.518 [DEBUG] [Thread-191120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:48:33.519 [DEBUG] [Thread-191120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:48:33.519 [DEBUG] [Thread-191120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:48:33.519 [DEBUG] [Thread-191120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:48:33.519 [DEBUG] [Thread-191120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:48:33.519 [DEBUG] [Thread-191120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:48:33.519 [DEBUG] [Thread-191120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:48:33.519 [DEBUG] [Thread-191120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:48:33.519 [DEBUG] [Thread-191120] [transport.py] [_log()] client lang: <none>
2026-02-14T19:48:33.519 [DEBUG] [Thread-191120] [transport.py] [_log()] server lang: <none>
2026-02-14T19:48:33.519 [DEBUG] [Thread-191120] [transport.py] [_log()] kex follows: False
2026-02-14T19:48:33.519 [DEBUG] [Thread-191120] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:48:33.519 [DEBUG] [Thread-191120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:48:33.519 [DEBUG] [Thread-191120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:48:33.519 [DEBUG] [Thread-191120] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:48:33.519 [DEBUG] [Thread-191120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:48:33.519 [DEBUG] [Thread-191120] [transport.py] [_log()] Compression: none
2026-02-14T19:48:33.519 [DEBUG] [Thread-191120] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:48:33.575 [DEBUG] [Thread-191120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:48:33.576 [DEBUG] [Thread-191120] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:48:33.576 [DEBUG] [Thread-191120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:48:33.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:48:33.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:48:33.631 [DEBUG] [Thread-191120] [transport.py] [_log()] userauth is OK
2026-02-14T19:48:33.631 [DEBUG] [Thread-191120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:48:33.631 [DEBUG] [Thread-191120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:48:33.631 [DEBUG] [Thread-191120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:48:33.631 [DEBUG] [Thread-191120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:48:33.650 [INFO] [Thread-191120] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:48:33.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-14T19:48:33.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:48:34.462 [DEBUG] [Thread-191120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:48:34.462 [DEBUG] [Thread-191120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:48:34.518 [DEBUG] [Thread-191120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:48:34.518 [DEBUG] [Thread-191120] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:48:34.526 [DEBUG] [Thread-191120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:48:34.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:48:34.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-14T19:48:34.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:48:34.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:48:34.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:48:34.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:48:34.562 [DEBUG] [Thread-191120] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:48:40.126 [DEBUG] [Thread-191122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:48:42.417 [DEBUG] [Thread-191123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:48:57.468 [DEBUG] [Thread-191124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:49:04.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:49:04.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:49:04.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-14T19:49:06.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 48, 53), 10.09, 50.06, 0.0, 32.98, 12.19, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:49:06.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:48:53
2026-02-14T19:49:07.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:49:07.211 [DEBUG] [Thread-191125] [transport.py] [_log()] starting thread (client mode): 0xa57423e0
2026-02-14T19:49:07.211 [DEBUG] [Thread-191125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:49:07.230 [DEBUG] [Thread-191125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:49:07.230 [INFO] [Thread-191125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:49:07.233 [DEBUG] [Thread-191125] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:49:07.233 [DEBUG] [Thread-191125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:49:07.233 [DEBUG] [Thread-191125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:49:07.233 [DEBUG] [Thread-191125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:49:07.233 [DEBUG] [Thread-191125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:49:07.233 [DEBUG] [Thread-191125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:49:07.233 [DEBUG] [Thread-191125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:49:07.233 [DEBUG] [Thread-191125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:49:07.234 [DEBUG] [Thread-191125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:49:07.234 [DEBUG] [Thread-191125] [transport.py] [_log()] client lang: <none>
2026-02-14T19:49:07.234 [DEBUG] [Thread-191125] [transport.py] [_log()] server lang: <none>
2026-02-14T19:49:07.234 [DEBUG] [Thread-191125] [transport.py] [_log()] kex follows: False
2026-02-14T19:49:07.234 [DEBUG] [Thread-191125] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:49:07.234 [DEBUG] [Thread-191125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:49:07.234 [DEBUG] [Thread-191125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:49:07.234 [DEBUG] [Thread-191125] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:49:07.234 [DEBUG] [Thread-191125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:49:07.234 [DEBUG] [Thread-191125] [transport.py] [_log()] Compression: none
2026-02-14T19:49:07.234 [DEBUG] [Thread-191125] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:49:07.255 [DEBUG] [Thread-191125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:49:07.255 [DEBUG] [Thread-191125] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:49:07.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:49:07.256 [DEBUG] [Thread-191125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:49:07.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:49:07.258 [DEBUG] [Thread-191125] [transport.py] [_log()] userauth is OK
2026-02-14T19:49:07.258 [DEBUG] [Thread-191125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:49:07.259 [DEBUG] [Thread-191125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:49:07.259 [DEBUG] [Thread-191125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:49:07.259 [DEBUG] [Thread-191125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:49:07.283 [INFO] [Thread-191125] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:49:07.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:49:07.896 [DEBUG] [Thread-191125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:49:07.896 [DEBUG] [Thread-191125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:49:07.897 [DEBUG] [Thread-191125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:49:07.937 [DEBUG] [Thread-191125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:49:07.937 [DEBUG] [Thread-191125] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:49:07.939 [DEBUG] [Thread-191125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:49:07.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:49:07.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:49:07.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:49:07.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:49:07.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:49:07.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:49:07.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:49:07.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:49:07.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:49:07.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.742129 -999.00  +12.00  31.21     55   +3.40 1 1 2 1 1   453    0 7.79 -39.75 ----- 30.1 31.2 160.6 36.6 12.7 -25.6 12.5 -24.6 12.3 -23.6 12.6 -24.7
2026-02-14T19:49:07.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:49:07.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:49:07.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.742129
2026-02-14T19:49:07.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:49:07.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:49:07.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:49:07.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:49:07.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:49:07.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:48:53', tmtdew=10.09, humidity=50.06, cloud=0.0, wind=32.98, temperature=12.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:48:39.946', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:49:07.968 [DEBUG] [Thread-191125] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:49:08.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-14T19:49:08.066 [DEBUG] [Thread-191128] [transport.py] [_log()] starting thread (client mode): 0xa57420e0
2026-02-14T19:49:08.067 [DEBUG] [Thread-191128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:49:08.082 [DEBUG] [Thread-191128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:49:08.082 [INFO] [Thread-191128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:49:08.089 [DEBUG] [Thread-191128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:49:08.089 [DEBUG] [Thread-191128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:49:08.090 [DEBUG] [Thread-191128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:49:08.090 [DEBUG] [Thread-191128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:49:08.090 [DEBUG] [Thread-191128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:49:08.090 [DEBUG] [Thread-191128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:49:08.090 [DEBUG] [Thread-191128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:49:08.090 [DEBUG] [Thread-191128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:49:08.090 [DEBUG] [Thread-191128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:49:08.090 [DEBUG] [Thread-191128] [transport.py] [_log()] client lang: <none>
2026-02-14T19:49:08.090 [DEBUG] [Thread-191128] [transport.py] [_log()] server lang: <none>
2026-02-14T19:49:08.091 [DEBUG] [Thread-191128] [transport.py] [_log()] kex follows: False
2026-02-14T19:49:08.091 [DEBUG] [Thread-191128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:49:08.091 [DEBUG] [Thread-191128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:49:08.091 [DEBUG] [Thread-191128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:49:08.091 [DEBUG] [Thread-191128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:49:08.091 [DEBUG] [Thread-191128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:49:08.091 [DEBUG] [Thread-191128] [transport.py] [_log()] Compression: none
2026-02-14T19:49:08.091 [DEBUG] [Thread-191128] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:49:08.147 [DEBUG] [Thread-191128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:49:08.148 [DEBUG] [Thread-191128] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:49:08.148 [DEBUG] [Thread-191128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:49:08.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:49:08.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:49:08.203 [DEBUG] [Thread-191128] [transport.py] [_log()] userauth is OK
2026-02-14T19:49:08.204 [DEBUG] [Thread-191128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:49:08.204 [DEBUG] [Thread-191128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:49:08.204 [DEBUG] [Thread-191128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:49:08.204 [DEBUG] [Thread-191128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:49:08.225 [INFO] [Thread-191128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:49:08.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T19:49:08.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:49:09.020 [DEBUG] [Thread-191128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:49:09.020 [DEBUG] [Thread-191128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:49:09.067 [DEBUG] [Thread-191128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:49:09.067 [DEBUG] [Thread-191128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:49:09.075 [DEBUG] [Thread-191128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:49:09.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:49:09.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:49:09.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-14T19:49:09.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:49:09.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:49:09.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:49:09.108 [DEBUG] [Thread-191128] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:49:12.503 [DEBUG] [Thread-191130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:49:25.358 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:49:25.359 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:49:27.563 [DEBUG] [Thread-191131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:49:39.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:49:39.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:49:39.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-14T19:49:40.190 [DEBUG] [Thread-191132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:49:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 49, 28), 10.08, 50.11, 0.0, 33.89, 12.17, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:49:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:49:28
2026-02-14T19:49:41.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:49:41.671 [DEBUG] [Thread-191133] [transport.py] [_log()] starting thread (client mode): 0xa5740e20
2026-02-14T19:49:41.671 [DEBUG] [Thread-191133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:49:41.691 [DEBUG] [Thread-191133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:49:41.691 [INFO] [Thread-191133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:49:41.694 [DEBUG] [Thread-191133] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:49:41.694 [DEBUG] [Thread-191133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:49:41.694 [DEBUG] [Thread-191133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:49:41.694 [DEBUG] [Thread-191133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:49:41.694 [DEBUG] [Thread-191133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:49:41.694 [DEBUG] [Thread-191133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:49:41.694 [DEBUG] [Thread-191133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:49:41.694 [DEBUG] [Thread-191133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:49:41.694 [DEBUG] [Thread-191133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:49:41.694 [DEBUG] [Thread-191133] [transport.py] [_log()] client lang: <none>
2026-02-14T19:49:41.694 [DEBUG] [Thread-191133] [transport.py] [_log()] server lang: <none>
2026-02-14T19:49:41.694 [DEBUG] [Thread-191133] [transport.py] [_log()] kex follows: False
2026-02-14T19:49:41.694 [DEBUG] [Thread-191133] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:49:41.694 [DEBUG] [Thread-191133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:49:41.694 [DEBUG] [Thread-191133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:49:41.694 [DEBUG] [Thread-191133] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:49:41.694 [DEBUG] [Thread-191133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:49:41.694 [DEBUG] [Thread-191133] [transport.py] [_log()] Compression: none
2026-02-14T19:49:41.694 [DEBUG] [Thread-191133] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:49:41.712 [DEBUG] [Thread-191133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:49:41.712 [DEBUG] [Thread-191133] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:49:41.713 [DEBUG] [Thread-191133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:49:41.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:49:41.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:49:41.715 [DEBUG] [Thread-191133] [transport.py] [_log()] userauth is OK
2026-02-14T19:49:41.715 [DEBUG] [Thread-191133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:49:41.716 [DEBUG] [Thread-191133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:49:41.716 [DEBUG] [Thread-191133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:49:41.716 [DEBUG] [Thread-191133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:49:41.740 [INFO] [Thread-191133] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:49:41.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:49:42.347 [DEBUG] [Thread-191133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:49:42.347 [DEBUG] [Thread-191133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:49:42.347 [DEBUG] [Thread-191133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:49:42.388 [DEBUG] [Thread-191133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:49:42.388 [DEBUG] [Thread-191133] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:49:42.390 [DEBUG] [Thread-191133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:49:42.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:49:42.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:49:42.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:49:42.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:49:42.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:49:42.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:49:42.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:49:42.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:49:42.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:49:42.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.742476 -999.00  +12.00  27.91     55   +3.40 1 1 1 1 1   431    0 7.90 -39.15 ----- 25.5 27.9 170.0 43.8 12.7 -25.7 12.5 -24.8 12.3 -23.6 12.7 -24.9
2026-02-14T19:49:42.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:49:42.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:49:42.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.742476
2026-02-14T19:49:42.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:49:42.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:49:42.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:49:42.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:49:42.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:49:42.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:49:28', tmtdew=10.08, humidity=50.11, cloud=0.0, wind=33.89, temperature=12.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:49:09.926', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:49:42.402 [DEBUG] [Thread-191133] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:49:42.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-14T19:49:42.490 [DEBUG] [Thread-191136] [transport.py] [_log()] starting thread (client mode): 0xa5740df0
2026-02-14T19:49:42.491 [DEBUG] [Thread-191136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:49:42.505 [DEBUG] [Thread-191136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:49:42.505 [INFO] [Thread-191136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:49:42.513 [DEBUG] [Thread-191136] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:49:42.513 [DEBUG] [Thread-191136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:49:42.513 [DEBUG] [Thread-191136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:49:42.513 [DEBUG] [Thread-191136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:49:42.513 [DEBUG] [Thread-191136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:49:42.513 [DEBUG] [Thread-191136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:49:42.513 [DEBUG] [Thread-191136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:49:42.513 [DEBUG] [Thread-191136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:49:42.513 [DEBUG] [Thread-191136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:49:42.513 [DEBUG] [Thread-191136] [transport.py] [_log()] client lang: <none>
2026-02-14T19:49:42.513 [DEBUG] [Thread-191136] [transport.py] [_log()] server lang: <none>
2026-02-14T19:49:42.513 [DEBUG] [Thread-191136] [transport.py] [_log()] kex follows: False
2026-02-14T19:49:42.514 [DEBUG] [Thread-191136] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:49:42.514 [DEBUG] [Thread-191136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:49:42.514 [DEBUG] [Thread-191136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:49:42.514 [DEBUG] [Thread-191136] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:49:42.514 [DEBUG] [Thread-191136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:49:42.514 [DEBUG] [Thread-191136] [transport.py] [_log()] Compression: none
2026-02-14T19:49:42.514 [DEBUG] [Thread-191136] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:49:42.571 [DEBUG] [Thread-191136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:49:42.572 [DEBUG] [Thread-191136] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:49:42.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:49:42.573 [DEBUG] [Thread-191136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:49:42.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:49:42.599 [DEBUG] [Thread-191138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:49:42.627 [DEBUG] [Thread-191136] [transport.py] [_log()] userauth is OK
2026-02-14T19:49:42.627 [DEBUG] [Thread-191136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:49:42.628 [DEBUG] [Thread-191136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:49:42.628 [DEBUG] [Thread-191136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:49:42.628 [DEBUG] [Thread-191136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:49:42.651 [INFO] [Thread-191136] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:49:42.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-14T19:49:42.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:49:43.453 [DEBUG] [Thread-191136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:49:43.453 [DEBUG] [Thread-191136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:49:43.501 [DEBUG] [Thread-191136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:49:43.502 [DEBUG] [Thread-191136] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:49:43.511 [DEBUG] [Thread-191136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:49:43.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:49:43.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-14T19:49:43.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-14T19:49:43.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:49:43.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:49:43.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:49:43.545 [DEBUG] [Thread-191136] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:49:57.650 [DEBUG] [Thread-191139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:50:12.685 [DEBUG] [Thread-191140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:50:13.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:50:13.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:50:13.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-14T19:50:15.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 50, 4), 10.06, 50.16, 0.0, 36.93, 12.19, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:50:15.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:50:04
2026-02-14T19:50:15.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:50:15.991 [DEBUG] [Thread-191141] [transport.py] [_log()] starting thread (client mode): 0xa57e28f0
2026-02-14T19:50:15.992 [DEBUG] [Thread-191141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:50:16.011 [DEBUG] [Thread-191141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:50:16.011 [INFO] [Thread-191141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:50:16.015 [DEBUG] [Thread-191141] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:50:16.015 [DEBUG] [Thread-191141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:50:16.015 [DEBUG] [Thread-191141] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:50:16.015 [DEBUG] [Thread-191141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:50:16.015 [DEBUG] [Thread-191141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:50:16.015 [DEBUG] [Thread-191141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:50:16.015 [DEBUG] [Thread-191141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:50:16.015 [DEBUG] [Thread-191141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:50:16.015 [DEBUG] [Thread-191141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:50:16.015 [DEBUG] [Thread-191141] [transport.py] [_log()] client lang: <none>
2026-02-14T19:50:16.015 [DEBUG] [Thread-191141] [transport.py] [_log()] server lang: <none>
2026-02-14T19:50:16.016 [DEBUG] [Thread-191141] [transport.py] [_log()] kex follows: False
2026-02-14T19:50:16.016 [DEBUG] [Thread-191141] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:50:16.016 [DEBUG] [Thread-191141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:50:16.016 [DEBUG] [Thread-191141] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:50:16.016 [DEBUG] [Thread-191141] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:50:16.016 [DEBUG] [Thread-191141] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:50:16.016 [DEBUG] [Thread-191141] [transport.py] [_log()] Compression: none
2026-02-14T19:50:16.016 [DEBUG] [Thread-191141] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:50:16.032 [DEBUG] [Thread-191141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:50:16.033 [DEBUG] [Thread-191141] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:50:16.033 [DEBUG] [Thread-191141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:50:16.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:50:16.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:50:16.076 [DEBUG] [Thread-191141] [transport.py] [_log()] userauth is OK
2026-02-14T19:50:16.077 [DEBUG] [Thread-191141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:50:16.077 [DEBUG] [Thread-191141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:50:16.077 [DEBUG] [Thread-191141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:50:16.077 [DEBUG] [Thread-191141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:50:16.097 [INFO] [Thread-191141] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:50:16.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:50:16.750 [DEBUG] [Thread-191141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:50:16.751 [DEBUG] [Thread-191141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:50:16.751 [DEBUG] [Thread-191141] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:50:16.791 [DEBUG] [Thread-191141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:50:16.791 [DEBUG] [Thread-191141] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:50:16.794 [DEBUG] [Thread-191141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:50:16.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:50:16.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:50:16.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:50:16.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:50:16.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:50:16.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:50:16.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:50:16.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:50:16.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:50:16.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.742823 -999.00  +12.00  25.13     55   +3.40 1 1 1 1 1   409    0 7.82 -42.52 ----- 27.5 25.1 166.2 33.3 12.6 -25.6 12.5 -24.7 12.3 -23.5 12.7 -24.7
2026-02-14T19:50:16.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:50:16.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:50:16.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.742823
2026-02-14T19:50:16.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:50:16.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:50:16.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:50:16.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:50:16.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:50:16.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:50:04', tmtdew=10.06, humidity=50.16, cloud=0.0, wind=36.93, temperature=12.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:49:39.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:50:16.817 [DEBUG] [Thread-191141] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:50:16.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-14T19:50:16.914 [DEBUG] [Thread-191144] [transport.py] [_log()] starting thread (client mode): 0xa57e1f30
2026-02-14T19:50:16.915 [DEBUG] [Thread-191144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:50:16.929 [DEBUG] [Thread-191144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:50:16.929 [INFO] [Thread-191144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:50:16.936 [DEBUG] [Thread-191144] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:50:16.937 [DEBUG] [Thread-191144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:50:16.937 [DEBUG] [Thread-191144] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:50:16.937 [DEBUG] [Thread-191144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:50:16.937 [DEBUG] [Thread-191144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:50:16.937 [DEBUG] [Thread-191144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:50:16.937 [DEBUG] [Thread-191144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:50:16.937 [DEBUG] [Thread-191144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:50:16.937 [DEBUG] [Thread-191144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:50:16.938 [DEBUG] [Thread-191144] [transport.py] [_log()] client lang: <none>
2026-02-14T19:50:16.938 [DEBUG] [Thread-191144] [transport.py] [_log()] server lang: <none>
2026-02-14T19:50:16.938 [DEBUG] [Thread-191144] [transport.py] [_log()] kex follows: False
2026-02-14T19:50:16.938 [DEBUG] [Thread-191144] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:50:16.938 [DEBUG] [Thread-191144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:50:16.938 [DEBUG] [Thread-191144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:50:16.938 [DEBUG] [Thread-191144] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:50:16.938 [DEBUG] [Thread-191144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:50:16.938 [DEBUG] [Thread-191144] [transport.py] [_log()] Compression: none
2026-02-14T19:50:16.939 [DEBUG] [Thread-191144] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:50:16.995 [DEBUG] [Thread-191144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:50:16.996 [DEBUG] [Thread-191144] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:50:16.996 [DEBUG] [Thread-191144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:50:16.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:50:16.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:50:17.051 [DEBUG] [Thread-191144] [transport.py] [_log()] userauth is OK
2026-02-14T19:50:17.051 [DEBUG] [Thread-191144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:50:17.052 [DEBUG] [Thread-191144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:50:17.052 [DEBUG] [Thread-191144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:50:17.052 [DEBUG] [Thread-191144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:50:17.074 [INFO] [Thread-191144] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:50:17.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-14T19:50:17.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:50:17.883 [DEBUG] [Thread-191144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:50:17.883 [DEBUG] [Thread-191144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:50:17.932 [DEBUG] [Thread-191144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:50:17.932 [DEBUG] [Thread-191144] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:50:17.941 [DEBUG] [Thread-191144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:50:17.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:50:17.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-14T19:50:17.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-14T19:50:17.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:50:17.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:50:17.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:50:17.974 [DEBUG] [Thread-191144] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:50:27.721 [DEBUG] [Thread-191146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:50:29.729 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:50:29.730 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:50:40.248 [DEBUG] [Thread-191147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:50:42.774 [DEBUG] [Thread-191148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:50:47.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:50:47.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:50:47.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-14T19:50:50.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 50, 40), 10.27, 49.52, 0.0, 38.88, 12.51, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:50:50.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:50:40
2026-02-14T19:50:50.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:50:50.996 [DEBUG] [Thread-191149] [transport.py] [_log()] starting thread (client mode): 0xa5743130
2026-02-14T19:50:50.996 [DEBUG] [Thread-191149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:50:51.017 [DEBUG] [Thread-191149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:50:51.017 [INFO] [Thread-191149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:50:51.019 [DEBUG] [Thread-191149] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:50:51.019 [DEBUG] [Thread-191149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:50:51.019 [DEBUG] [Thread-191149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:50:51.019 [DEBUG] [Thread-191149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:50:51.020 [DEBUG] [Thread-191149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:50:51.020 [DEBUG] [Thread-191149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:50:51.020 [DEBUG] [Thread-191149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:50:51.020 [DEBUG] [Thread-191149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:50:51.020 [DEBUG] [Thread-191149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:50:51.020 [DEBUG] [Thread-191149] [transport.py] [_log()] client lang: <none>
2026-02-14T19:50:51.020 [DEBUG] [Thread-191149] [transport.py] [_log()] server lang: <none>
2026-02-14T19:50:51.020 [DEBUG] [Thread-191149] [transport.py] [_log()] kex follows: False
2026-02-14T19:50:51.020 [DEBUG] [Thread-191149] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:50:51.020 [DEBUG] [Thread-191149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:50:51.020 [DEBUG] [Thread-191149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:50:51.020 [DEBUG] [Thread-191149] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:50:51.020 [DEBUG] [Thread-191149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:50:51.020 [DEBUG] [Thread-191149] [transport.py] [_log()] Compression: none
2026-02-14T19:50:51.020 [DEBUG] [Thread-191149] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:50:51.039 [DEBUG] [Thread-191149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:50:51.039 [DEBUG] [Thread-191149] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:50:51.040 [DEBUG] [Thread-191149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:50:51.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:50:51.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:50:51.041 [DEBUG] [Thread-191149] [transport.py] [_log()] userauth is OK
2026-02-14T19:50:51.042 [DEBUG] [Thread-191149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:50:51.042 [DEBUG] [Thread-191149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:50:51.042 [DEBUG] [Thread-191149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:50:51.042 [DEBUG] [Thread-191149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:50:51.079 [INFO] [Thread-191149] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:50:51.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:50:51.717 [DEBUG] [Thread-191149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:50:51.717 [DEBUG] [Thread-191149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:50:51.717 [DEBUG] [Thread-191149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:50:51.758 [DEBUG] [Thread-191149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:50:51.759 [DEBUG] [Thread-191149] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:50:51.762 [DEBUG] [Thread-191149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:50:51.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:50:51.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:50:51.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:50:51.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:50:51.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:50:51.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:50:51.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:50:51.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:50:51.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:50:51.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.743170 -999.00  +12.00  27.71     55   +3.40 1 1 1 1 1   387    0 7.62 -42.34 ----- 29.8 27.7 164.6 40.2 12.6 -25.5 12.5 -24.7 12.3 -23.5 12.6 -24.9
2026-02-14T19:50:51.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:50:51.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:50:51.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.743170
2026-02-14T19:50:51.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:50:51.786 [DEBUG] [Thread-191149] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:50:51.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:50:51.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:50:51.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:50:51.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:50:51.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:50:40', tmtdew=10.27, humidity=49.52, cloud=0.0, wind=38.88, temperature=12.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:50:09.888', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:50:51.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-14T19:50:51.884 [DEBUG] [Thread-191152] [transport.py] [_log()] starting thread (client mode): 0xa2d02a10
2026-02-14T19:50:51.884 [DEBUG] [Thread-191152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:50:51.898 [DEBUG] [Thread-191152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:50:51.899 [INFO] [Thread-191152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:50:51.906 [DEBUG] [Thread-191152] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:50:51.907 [DEBUG] [Thread-191152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:50:51.907 [DEBUG] [Thread-191152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:50:51.907 [DEBUG] [Thread-191152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:50:51.907 [DEBUG] [Thread-191152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:50:51.907 [DEBUG] [Thread-191152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:50:51.907 [DEBUG] [Thread-191152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:50:51.907 [DEBUG] [Thread-191152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:50:51.908 [DEBUG] [Thread-191152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:50:51.908 [DEBUG] [Thread-191152] [transport.py] [_log()] client lang: <none>
2026-02-14T19:50:51.908 [DEBUG] [Thread-191152] [transport.py] [_log()] server lang: <none>
2026-02-14T19:50:51.908 [DEBUG] [Thread-191152] [transport.py] [_log()] kex follows: False
2026-02-14T19:50:51.908 [DEBUG] [Thread-191152] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:50:51.908 [DEBUG] [Thread-191152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:50:51.908 [DEBUG] [Thread-191152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:50:51.908 [DEBUG] [Thread-191152] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:50:51.909 [DEBUG] [Thread-191152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:50:51.909 [DEBUG] [Thread-191152] [transport.py] [_log()] Compression: none
2026-02-14T19:50:51.909 [DEBUG] [Thread-191152] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:50:51.963 [DEBUG] [Thread-191152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:50:51.963 [DEBUG] [Thread-191152] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:50:51.964 [DEBUG] [Thread-191152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:50:51.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:50:51.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:50:52.020 [DEBUG] [Thread-191152] [transport.py] [_log()] userauth is OK
2026-02-14T19:50:52.020 [DEBUG] [Thread-191152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:50:52.020 [DEBUG] [Thread-191152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:50:52.020 [DEBUG] [Thread-191152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:50:52.020 [DEBUG] [Thread-191152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:50:52.039 [INFO] [Thread-191152] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:50:52.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T19:50:52.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:50:52.851 [DEBUG] [Thread-191152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:50:52.852 [DEBUG] [Thread-191152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:50:52.900 [DEBUG] [Thread-191152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:50:52.900 [DEBUG] [Thread-191152] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:50:52.908 [DEBUG] [Thread-191152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:50:52.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:50:52.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:50:52.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:50:52.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:50:52.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:50:52.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:50:52.939 [DEBUG] [Thread-191152] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:50:57.811 [DEBUG] [Thread-191154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:51:12.863 [DEBUG] [Thread-191155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:51:22.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:51:22.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:51:22.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-14T19:51:24.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 51, 16), 10.04, 50.23, 0.0, 39.65, 12.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:51:24.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:51:16
2026-02-14T19:51:25.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:51:25.375 [DEBUG] [Thread-191156] [transport.py] [_log()] starting thread (client mode): 0xa57425f0
2026-02-14T19:51:25.375 [DEBUG] [Thread-191156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:51:25.395 [DEBUG] [Thread-191156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:51:25.395 [INFO] [Thread-191156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:51:25.398 [DEBUG] [Thread-191156] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:51:25.398 [DEBUG] [Thread-191156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:51:25.398 [DEBUG] [Thread-191156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:51:25.398 [DEBUG] [Thread-191156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:51:25.398 [DEBUG] [Thread-191156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:51:25.398 [DEBUG] [Thread-191156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:51:25.399 [DEBUG] [Thread-191156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:51:25.399 [DEBUG] [Thread-191156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:51:25.399 [DEBUG] [Thread-191156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:51:25.399 [DEBUG] [Thread-191156] [transport.py] [_log()] client lang: <none>
2026-02-14T19:51:25.399 [DEBUG] [Thread-191156] [transport.py] [_log()] server lang: <none>
2026-02-14T19:51:25.399 [DEBUG] [Thread-191156] [transport.py] [_log()] kex follows: False
2026-02-14T19:51:25.399 [DEBUG] [Thread-191156] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:51:25.399 [DEBUG] [Thread-191156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:51:25.399 [DEBUG] [Thread-191156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:51:25.399 [DEBUG] [Thread-191156] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:51:25.399 [DEBUG] [Thread-191156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:51:25.400 [DEBUG] [Thread-191156] [transport.py] [_log()] Compression: none
2026-02-14T19:51:25.400 [DEBUG] [Thread-191156] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:51:25.412 [DEBUG] [Thread-191156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:51:25.413 [DEBUG] [Thread-191156] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:51:25.413 [DEBUG] [Thread-191156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:51:25.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:51:25.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:51:25.415 [DEBUG] [Thread-191156] [transport.py] [_log()] userauth is OK
2026-02-14T19:51:25.416 [DEBUG] [Thread-191156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:51:25.416 [DEBUG] [Thread-191156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:51:25.416 [DEBUG] [Thread-191156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:51:25.416 [DEBUG] [Thread-191156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:51:25.439 [INFO] [Thread-191156] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:51:25.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:51:26.092 [DEBUG] [Thread-191156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:51:26.092 [DEBUG] [Thread-191156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:51:26.092 [DEBUG] [Thread-191156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:51:26.132 [DEBUG] [Thread-191156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:51:26.132 [DEBUG] [Thread-191156] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:51:26.135 [DEBUG] [Thread-191156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:51:26.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:51:26.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:51:26.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:51:26.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:51:26.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:51:26.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:51:26.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:51:26.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:51:26.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:51:26.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.743865 -999.00  +12.00  29.65     55   +3.40 1 1 1 1 1   344    0 7.47 -42.81 ----- 30.1 29.6 178.8 38.5 12.6 -25.5 12.4 -24.7 12.2 -23.6 12.6 -24.7
2026-02-14T19:51:26.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:51:26.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:51:26.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.743865
2026-02-14T19:51:26.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:51:26.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:51:26.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:51:26.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:51:26.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:51:26.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:51:16', tmtdew=10.04, humidity=50.23, cloud=0.0, wind=39.65, temperature=12.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:51:09.936', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:51:26.160 [DEBUG] [Thread-191156] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:51:26.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-14T19:51:26.254 [DEBUG] [Thread-191159] [transport.py] [_log()] starting thread (client mode): 0xa2d78640
2026-02-14T19:51:26.254 [DEBUG] [Thread-191159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:51:26.270 [DEBUG] [Thread-191159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:51:26.271 [INFO] [Thread-191159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:51:26.281 [DEBUG] [Thread-191159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:51:26.281 [DEBUG] [Thread-191159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:51:26.281 [DEBUG] [Thread-191159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:51:26.281 [DEBUG] [Thread-191159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:51:26.281 [DEBUG] [Thread-191159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:51:26.281 [DEBUG] [Thread-191159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:51:26.281 [DEBUG] [Thread-191159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:51:26.282 [DEBUG] [Thread-191159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:51:26.282 [DEBUG] [Thread-191159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:51:26.282 [DEBUG] [Thread-191159] [transport.py] [_log()] client lang: <none>
2026-02-14T19:51:26.282 [DEBUG] [Thread-191159] [transport.py] [_log()] server lang: <none>
2026-02-14T19:51:26.282 [DEBUG] [Thread-191159] [transport.py] [_log()] kex follows: False
2026-02-14T19:51:26.282 [DEBUG] [Thread-191159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:51:26.282 [DEBUG] [Thread-191159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:51:26.282 [DEBUG] [Thread-191159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:51:26.282 [DEBUG] [Thread-191159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:51:26.282 [DEBUG] [Thread-191159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:51:26.282 [DEBUG] [Thread-191159] [transport.py] [_log()] Compression: none
2026-02-14T19:51:26.282 [DEBUG] [Thread-191159] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:51:26.342 [DEBUG] [Thread-191159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:51:26.342 [DEBUG] [Thread-191159] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:51:26.342 [DEBUG] [Thread-191159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:51:26.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:51:26.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:51:26.411 [DEBUG] [Thread-191159] [transport.py] [_log()] userauth is OK
2026-02-14T19:51:26.411 [DEBUG] [Thread-191159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:51:26.411 [DEBUG] [Thread-191159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:51:26.411 [DEBUG] [Thread-191159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:51:26.411 [DEBUG] [Thread-191159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:51:26.437 [INFO] [Thread-191159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:51:26.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T19:51:26.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:51:27.281 [DEBUG] [Thread-191159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:51:27.282 [DEBUG] [Thread-191159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:51:27.329 [DEBUG] [Thread-191159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:51:27.329 [DEBUG] [Thread-191159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:51:27.338 [DEBUG] [Thread-191159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:51:27.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:51:27.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:51:27.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-14T19:51:27.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:51:27.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:51:27.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:51:27.378 [DEBUG] [Thread-191159] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:51:27.898 [DEBUG] [Thread-191161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:51:33.875 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:51:33.876 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:51:40.316 [DEBUG] [Thread-191162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:51:42.955 [DEBUG] [Thread-191163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:51:57.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:51:57.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:51:57.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-14T19:51:57.993 [DEBUG] [Thread-191164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:51:59.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 51, 51), 9.92, 50.29, 0.0, 42.43, 12.06, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:51:59.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:51:51
2026-02-14T19:51:59.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:51:59.736 [DEBUG] [Thread-191165] [transport.py] [_log()] starting thread (client mode): 0xa2d79390
2026-02-14T19:51:59.736 [DEBUG] [Thread-191165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:51:59.757 [DEBUG] [Thread-191165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:51:59.758 [INFO] [Thread-191165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:51:59.761 [DEBUG] [Thread-191165] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:51:59.761 [DEBUG] [Thread-191165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:51:59.761 [DEBUG] [Thread-191165] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:51:59.761 [DEBUG] [Thread-191165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:51:59.761 [DEBUG] [Thread-191165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:51:59.761 [DEBUG] [Thread-191165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:51:59.761 [DEBUG] [Thread-191165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:51:59.762 [DEBUG] [Thread-191165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:51:59.762 [DEBUG] [Thread-191165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:51:59.762 [DEBUG] [Thread-191165] [transport.py] [_log()] client lang: <none>
2026-02-14T19:51:59.762 [DEBUG] [Thread-191165] [transport.py] [_log()] server lang: <none>
2026-02-14T19:51:59.762 [DEBUG] [Thread-191165] [transport.py] [_log()] kex follows: False
2026-02-14T19:51:59.762 [DEBUG] [Thread-191165] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:51:59.762 [DEBUG] [Thread-191165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:51:59.762 [DEBUG] [Thread-191165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:51:59.762 [DEBUG] [Thread-191165] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:51:59.762 [DEBUG] [Thread-191165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:51:59.762 [DEBUG] [Thread-191165] [transport.py] [_log()] Compression: none
2026-02-14T19:51:59.763 [DEBUG] [Thread-191165] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:51:59.781 [DEBUG] [Thread-191165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:51:59.782 [DEBUG] [Thread-191165] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:51:59.783 [DEBUG] [Thread-191165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:51:59.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:51:59.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:51:59.785 [DEBUG] [Thread-191165] [transport.py] [_log()] userauth is OK
2026-02-14T19:51:59.785 [DEBUG] [Thread-191165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:51:59.785 [DEBUG] [Thread-191165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:51:59.785 [DEBUG] [Thread-191165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:51:59.785 [DEBUG] [Thread-191165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:51:59.804 [INFO] [Thread-191165] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:51:59.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:52:00.348 [DEBUG] [Thread-191165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:52:00.348 [DEBUG] [Thread-191165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:52:00.348 [DEBUG] [Thread-191165] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:52:00.389 [DEBUG] [Thread-191165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:52:00.389 [DEBUG] [Thread-191165] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:52:00.393 [DEBUG] [Thread-191165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:52:00.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:52:00.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:52:00.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:52:00.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:52:00.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:52:00.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:52:00.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:52:00.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:52:00.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:52:00.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.744212 -999.00  +12.00  28.53     55   +3.40 1 1 1 1 1   323    0 7.55 -44.68 ----- 34.0 28.5 174.0 41.3 12.6 -25.6 12.4 -24.9 12.2 -23.6 12.6 -24.8
2026-02-14T19:52:00.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:52:00.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:52:00.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.744212
2026-02-14T19:52:00.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:52:00.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:52:00.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:52:00.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:52:00.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:52:00.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:51:51', tmtdew=9.92, humidity=50.29, cloud=0.0, wind=42.43, temperature=12.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:51:39.917', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:52:00.420 [DEBUG] [Thread-191165] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:52:00.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-14T19:52:00.510 [DEBUG] [Thread-191168] [transport.py] [_log()] starting thread (client mode): 0xa2d02f50
2026-02-14T19:52:00.511 [DEBUG] [Thread-191168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:52:00.525 [DEBUG] [Thread-191168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:52:00.525 [INFO] [Thread-191168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:52:00.532 [DEBUG] [Thread-191168] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:52:00.533 [DEBUG] [Thread-191168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:52:00.533 [DEBUG] [Thread-191168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:52:00.533 [DEBUG] [Thread-191168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:52:00.533 [DEBUG] [Thread-191168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:52:00.533 [DEBUG] [Thread-191168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:52:00.533 [DEBUG] [Thread-191168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:52:00.533 [DEBUG] [Thread-191168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:52:00.533 [DEBUG] [Thread-191168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:52:00.533 [DEBUG] [Thread-191168] [transport.py] [_log()] client lang: <none>
2026-02-14T19:52:00.533 [DEBUG] [Thread-191168] [transport.py] [_log()] server lang: <none>
2026-02-14T19:52:00.533 [DEBUG] [Thread-191168] [transport.py] [_log()] kex follows: False
2026-02-14T19:52:00.533 [DEBUG] [Thread-191168] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:52:00.533 [DEBUG] [Thread-191168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:52:00.533 [DEBUG] [Thread-191168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:52:00.533 [DEBUG] [Thread-191168] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:52:00.533 [DEBUG] [Thread-191168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:52:00.533 [DEBUG] [Thread-191168] [transport.py] [_log()] Compression: none
2026-02-14T19:52:00.533 [DEBUG] [Thread-191168] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:52:00.591 [DEBUG] [Thread-191168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:52:00.592 [DEBUG] [Thread-191168] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:52:00.592 [DEBUG] [Thread-191168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:52:00.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:52:00.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:52:00.647 [DEBUG] [Thread-191168] [transport.py] [_log()] userauth is OK
2026-02-14T19:52:00.648 [DEBUG] [Thread-191168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:52:00.648 [DEBUG] [Thread-191168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:52:00.648 [DEBUG] [Thread-191168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:52:00.648 [DEBUG] [Thread-191168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:52:00.669 [INFO] [Thread-191168] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:52:00.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-14T19:52:00.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:52:01.506 [DEBUG] [Thread-191168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:52:01.507 [DEBUG] [Thread-191168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:52:01.553 [DEBUG] [Thread-191168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:52:01.553 [DEBUG] [Thread-191168] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:52:01.562 [DEBUG] [Thread-191168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:52:01.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:52:01.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-14T19:52:01.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-14T19:52:01.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:52:01.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:52:01.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:52:01.598 [DEBUG] [Thread-191168] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:52:13.031 [DEBUG] [Thread-191170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:52:28.082 [DEBUG] [Thread-191171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:52:28.666 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:52:31.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:52:31.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:52:31.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-14T19:52:33.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 51, 51), 9.92, 50.29, 0.0, 42.43, 12.06, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:52:33.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:51:51
2026-02-14T19:52:34.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:52:34.514 [DEBUG] [Thread-191172] [transport.py] [_log()] starting thread (client mode): 0xa5742bc0
2026-02-14T19:52:34.514 [DEBUG] [Thread-191172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:52:34.534 [DEBUG] [Thread-191172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:52:34.534 [INFO] [Thread-191172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:52:34.538 [DEBUG] [Thread-191172] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:52:34.538 [DEBUG] [Thread-191172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:52:34.538 [DEBUG] [Thread-191172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:52:34.538 [DEBUG] [Thread-191172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:52:34.538 [DEBUG] [Thread-191172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:52:34.538 [DEBUG] [Thread-191172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:52:34.538 [DEBUG] [Thread-191172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:52:34.538 [DEBUG] [Thread-191172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:52:34.538 [DEBUG] [Thread-191172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:52:34.538 [DEBUG] [Thread-191172] [transport.py] [_log()] client lang: <none>
2026-02-14T19:52:34.538 [DEBUG] [Thread-191172] [transport.py] [_log()] server lang: <none>
2026-02-14T19:52:34.538 [DEBUG] [Thread-191172] [transport.py] [_log()] kex follows: False
2026-02-14T19:52:34.539 [DEBUG] [Thread-191172] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:52:34.539 [DEBUG] [Thread-191172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:52:34.539 [DEBUG] [Thread-191172] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:52:34.539 [DEBUG] [Thread-191172] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:52:34.539 [DEBUG] [Thread-191172] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:52:34.539 [DEBUG] [Thread-191172] [transport.py] [_log()] Compression: none
2026-02-14T19:52:34.539 [DEBUG] [Thread-191172] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:52:34.559 [DEBUG] [Thread-191172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:52:34.559 [DEBUG] [Thread-191172] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:52:34.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:52:34.560 [DEBUG] [Thread-191172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:52:34.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:52:34.562 [DEBUG] [Thread-191172] [transport.py] [_log()] userauth is OK
2026-02-14T19:52:34.562 [DEBUG] [Thread-191172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:52:34.562 [DEBUG] [Thread-191172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:52:34.563 [DEBUG] [Thread-191172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:52:34.563 [DEBUG] [Thread-191172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:52:34.598 [INFO] [Thread-191172] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:52:34.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:52:34.786 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:52:35.230 [DEBUG] [Thread-191172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:52:35.230 [DEBUG] [Thread-191172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:52:35.231 [DEBUG] [Thread-191172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:52:35.271 [DEBUG] [Thread-191172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:52:35.271 [DEBUG] [Thread-191172] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:52:35.275 [DEBUG] [Thread-191172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:52:35.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:52:35.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:52:35.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:52:35.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:52:35.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:52:35.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:52:35.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:52:35.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:52:35.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:52:35.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.744559 -999.00  +11.90  29.00     55   +3.40 1 1 1 1 1   303    0 7.47 -44.86 ----- 25.5 29.0 176.4 36.5 12.6 -25.5 12.4 -24.5 12.2 -23.5 12.6 -24.8
2026-02-14T19:52:35.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:52:35.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:52:35.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.744559
2026-02-14T19:52:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:52:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:52:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:52:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:52:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:52:35.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:51:51', tmtdew=9.92, humidity=50.29, cloud=0.0, wind=42.43, temperature=12.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:52:09.898', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:52:35.303 [DEBUG] [Thread-191172] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:52:35.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T19:52:35.409 [DEBUG] [Thread-191175] [transport.py] [_log()] starting thread (client mode): 0xa5743130
2026-02-14T19:52:35.410 [DEBUG] [Thread-191175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:52:35.425 [DEBUG] [Thread-191175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:52:35.425 [INFO] [Thread-191175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:52:35.432 [DEBUG] [Thread-191175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:52:35.433 [DEBUG] [Thread-191175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:52:35.433 [DEBUG] [Thread-191175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:52:35.433 [DEBUG] [Thread-191175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:52:35.433 [DEBUG] [Thread-191175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:52:35.433 [DEBUG] [Thread-191175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:52:35.433 [DEBUG] [Thread-191175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:52:35.433 [DEBUG] [Thread-191175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:52:35.433 [DEBUG] [Thread-191175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:52:35.433 [DEBUG] [Thread-191175] [transport.py] [_log()] client lang: <none>
2026-02-14T19:52:35.433 [DEBUG] [Thread-191175] [transport.py] [_log()] server lang: <none>
2026-02-14T19:52:35.433 [DEBUG] [Thread-191175] [transport.py] [_log()] kex follows: False
2026-02-14T19:52:35.433 [DEBUG] [Thread-191175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:52:35.433 [DEBUG] [Thread-191175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:52:35.433 [DEBUG] [Thread-191175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:52:35.433 [DEBUG] [Thread-191175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:52:35.433 [DEBUG] [Thread-191175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:52:35.433 [DEBUG] [Thread-191175] [transport.py] [_log()] Compression: none
2026-02-14T19:52:35.433 [DEBUG] [Thread-191175] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:52:35.491 [DEBUG] [Thread-191175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:52:35.492 [DEBUG] [Thread-191175] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:52:35.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:52:35.493 [DEBUG] [Thread-191175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:52:35.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:52:35.547 [DEBUG] [Thread-191175] [transport.py] [_log()] userauth is OK
2026-02-14T19:52:35.547 [DEBUG] [Thread-191175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:52:35.548 [DEBUG] [Thread-191175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:52:35.548 [DEBUG] [Thread-191175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:52:35.548 [DEBUG] [Thread-191175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:52:35.565 [INFO] [Thread-191175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:52:35.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T19:52:35.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:52:36.443 [DEBUG] [Thread-191175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:52:36.443 [DEBUG] [Thread-191175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:52:36.491 [DEBUG] [Thread-191175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:52:36.491 [DEBUG] [Thread-191175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:52:36.499 [DEBUG] [Thread-191175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:52:36.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:52:36.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:52:36.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:52:36.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:52:36.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:52:36.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:52:36.531 [DEBUG] [Thread-191175] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:52:38.570 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:52:38.572 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:52:40.374 [DEBUG] [Thread-191177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:52:43.119 [DEBUG] [Thread-191178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:52:58.171 [DEBUG] [Thread-191179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:53:02.254 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:53:06.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:53:06.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:53:06.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-14T19:53:08.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 52, 26), 9.9, 50.36, 0.0, 41.06, 12.07, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:53:08.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:52:26
2026-02-14T19:53:09.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:53:09.528 [DEBUG] [Thread-191180] [transport.py] [_log()] starting thread (client mode): 0xa2d78850
2026-02-14T19:53:09.528 [DEBUG] [Thread-191180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:53:09.548 [DEBUG] [Thread-191180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:53:09.548 [INFO] [Thread-191180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:53:09.551 [DEBUG] [Thread-191180] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:53:09.551 [DEBUG] [Thread-191180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:53:09.551 [DEBUG] [Thread-191180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:53:09.551 [DEBUG] [Thread-191180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:53:09.551 [DEBUG] [Thread-191180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:53:09.551 [DEBUG] [Thread-191180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:53:09.551 [DEBUG] [Thread-191180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:53:09.551 [DEBUG] [Thread-191180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:53:09.551 [DEBUG] [Thread-191180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:53:09.551 [DEBUG] [Thread-191180] [transport.py] [_log()] client lang: <none>
2026-02-14T19:53:09.551 [DEBUG] [Thread-191180] [transport.py] [_log()] server lang: <none>
2026-02-14T19:53:09.551 [DEBUG] [Thread-191180] [transport.py] [_log()] kex follows: False
2026-02-14T19:53:09.551 [DEBUG] [Thread-191180] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:53:09.551 [DEBUG] [Thread-191180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:53:09.551 [DEBUG] [Thread-191180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:53:09.551 [DEBUG] [Thread-191180] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:53:09.551 [DEBUG] [Thread-191180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:53:09.551 [DEBUG] [Thread-191180] [transport.py] [_log()] Compression: none
2026-02-14T19:53:09.551 [DEBUG] [Thread-191180] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:53:09.568 [DEBUG] [Thread-191180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:53:09.568 [DEBUG] [Thread-191180] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:53:09.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:53:09.569 [DEBUG] [Thread-191180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:53:09.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:53:09.571 [DEBUG] [Thread-191180] [transport.py] [_log()] userauth is OK
2026-02-14T19:53:09.571 [DEBUG] [Thread-191180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:53:09.571 [DEBUG] [Thread-191180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:53:09.571 [DEBUG] [Thread-191180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:53:09.571 [DEBUG] [Thread-191180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:53:09.596 [INFO] [Thread-191180] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:53:09.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:53:10.236 [DEBUG] [Thread-191180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:53:10.237 [DEBUG] [Thread-191180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:53:10.237 [DEBUG] [Thread-191180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:53:10.277 [DEBUG] [Thread-191180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:53:10.277 [DEBUG] [Thread-191180] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:53:10.280 [DEBUG] [Thread-191180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:53:10.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:53:10.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:53:10.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:53:10.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:53:10.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:53:10.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:53:10.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:53:10.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:53:10.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:53:10.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.744906 -999.00  +12.00  21.39     55   +3.40 1 1 1 1 1   283    0 7.47 -47.09 ----- 27.5 21.4 170.8 32.5 12.6 -25.5 12.4 -24.6 12.2 -23.5 12.6 -24.8
2026-02-14T19:53:10.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:53:10.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:53:10.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.744906
2026-02-14T19:53:10.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:53:10.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:53:10.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:53:10.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:53:10.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:53:10.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:52:26', tmtdew=9.9, humidity=50.36, cloud=0.0, wind=41.06, temperature=12.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:52:39.878', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:53:10.306 [DEBUG] [Thread-191180] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:53:10.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-14T19:53:10.402 [DEBUG] [Thread-191183] [transport.py] [_log()] starting thread (client mode): 0xa57c31c0
2026-02-14T19:53:10.402 [DEBUG] [Thread-191183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:53:10.418 [DEBUG] [Thread-191183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:53:10.418 [INFO] [Thread-191183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:53:10.425 [DEBUG] [Thread-191183] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:53:10.426 [DEBUG] [Thread-191183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:53:10.426 [DEBUG] [Thread-191183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:53:10.426 [DEBUG] [Thread-191183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:53:10.426 [DEBUG] [Thread-191183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:53:10.426 [DEBUG] [Thread-191183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:53:10.426 [DEBUG] [Thread-191183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:53:10.426 [DEBUG] [Thread-191183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:53:10.426 [DEBUG] [Thread-191183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:53:10.426 [DEBUG] [Thread-191183] [transport.py] [_log()] client lang: <none>
2026-02-14T19:53:10.426 [DEBUG] [Thread-191183] [transport.py] [_log()] server lang: <none>
2026-02-14T19:53:10.426 [DEBUG] [Thread-191183] [transport.py] [_log()] kex follows: False
2026-02-14T19:53:10.426 [DEBUG] [Thread-191183] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:53:10.426 [DEBUG] [Thread-191183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:53:10.426 [DEBUG] [Thread-191183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:53:10.426 [DEBUG] [Thread-191183] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:53:10.427 [DEBUG] [Thread-191183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:53:10.427 [DEBUG] [Thread-191183] [transport.py] [_log()] Compression: none
2026-02-14T19:53:10.427 [DEBUG] [Thread-191183] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:53:10.487 [DEBUG] [Thread-191183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:53:10.487 [DEBUG] [Thread-191183] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:53:10.488 [DEBUG] [Thread-191183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:53:10.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:53:10.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:53:10.544 [DEBUG] [Thread-191183] [transport.py] [_log()] userauth is OK
2026-02-14T19:53:10.544 [DEBUG] [Thread-191183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:53:10.544 [DEBUG] [Thread-191183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:53:10.544 [DEBUG] [Thread-191183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:53:10.545 [DEBUG] [Thread-191183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:53:10.565 [INFO] [Thread-191183] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:53:10.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T19:53:10.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:53:11.380 [DEBUG] [Thread-191183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:53:11.380 [DEBUG] [Thread-191183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:53:11.430 [DEBUG] [Thread-191183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:53:11.430 [DEBUG] [Thread-191183] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:53:11.443 [DEBUG] [Thread-191183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:53:11.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:53:11.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-14T19:53:11.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-14T19:53:11.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:53:11.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:53:11.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:53:11.486 [DEBUG] [Thread-191183] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:53:13.202 [DEBUG] [Thread-191185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:53:27.693 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:53:28.258 [DEBUG] [Thread-191186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:53:38.193 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:53:40.425 [DEBUG] [Thread-191187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:53:41.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:53:41.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:53:41.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T19:53:42.877 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:53:42.878 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:53:43.294 [DEBUG] [Thread-191188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:53:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 53, 3), 9.88, 50.43, 0.0, 40.71, 12.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:53:43.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:53:03
2026-02-14T19:53:44.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:53:44.315 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:53:44.355 [DEBUG] [Thread-191189] [transport.py] [_log()] starting thread (client mode): 0xa57423e0
2026-02-14T19:53:44.355 [DEBUG] [Thread-191189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:53:44.375 [DEBUG] [Thread-191189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:53:44.376 [INFO] [Thread-191189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:53:44.379 [DEBUG] [Thread-191189] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:53:44.379 [DEBUG] [Thread-191189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:53:44.379 [DEBUG] [Thread-191189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:53:44.379 [DEBUG] [Thread-191189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:53:44.379 [DEBUG] [Thread-191189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:53:44.379 [DEBUG] [Thread-191189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:53:44.379 [DEBUG] [Thread-191189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:53:44.379 [DEBUG] [Thread-191189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:53:44.380 [DEBUG] [Thread-191189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:53:44.380 [DEBUG] [Thread-191189] [transport.py] [_log()] client lang: <none>
2026-02-14T19:53:44.380 [DEBUG] [Thread-191189] [transport.py] [_log()] server lang: <none>
2026-02-14T19:53:44.380 [DEBUG] [Thread-191189] [transport.py] [_log()] kex follows: False
2026-02-14T19:53:44.380 [DEBUG] [Thread-191189] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:53:44.380 [DEBUG] [Thread-191189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:53:44.380 [DEBUG] [Thread-191189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:53:44.380 [DEBUG] [Thread-191189] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:53:44.380 [DEBUG] [Thread-191189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:53:44.380 [DEBUG] [Thread-191189] [transport.py] [_log()] Compression: none
2026-02-14T19:53:44.380 [DEBUG] [Thread-191189] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:53:44.398 [DEBUG] [Thread-191189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:53:44.399 [DEBUG] [Thread-191189] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:53:44.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:53:44.400 [DEBUG] [Thread-191189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:53:44.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:53:44.441 [DEBUG] [Thread-191189] [transport.py] [_log()] userauth is OK
2026-02-14T19:53:44.441 [DEBUG] [Thread-191189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:53:44.441 [DEBUG] [Thread-191189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:53:44.442 [DEBUG] [Thread-191189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:53:44.442 [DEBUG] [Thread-191189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:53:44.475 [INFO] [Thread-191189] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:53:44.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:53:45.254 [DEBUG] [Thread-191189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:53:45.254 [DEBUG] [Thread-191189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:53:45.254 [DEBUG] [Thread-191189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:53:45.295 [DEBUG] [Thread-191189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:53:45.296 [DEBUG] [Thread-191189] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:53:45.299 [DEBUG] [Thread-191189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:53:45.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:53:45.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:53:45.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:53:45.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:53:45.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:53:45.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:53:45.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:53:45.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:53:45.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:53:45.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.745253 -999.00  +11.90  23.27     55   +3.40 1 1 1 1 1   264    0 7.35 -42.21 ----- 28.9 23.3 168.0 31.7 12.5 -25.5 12.4 -24.7 12.2 -23.5 12.6 -24.7
2026-02-14T19:53:45.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:53:45.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:53:45.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.745253
2026-02-14T19:53:45.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:53:45.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:53:45.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:53:45.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:53:45.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:53:45.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:53:03', tmtdew=9.88, humidity=50.43, cloud=0.0, wind=40.71, temperature=12.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:53:09.859', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:53:45.325 [DEBUG] [Thread-191189] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:53:45.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-14T19:53:45.421 [DEBUG] [Thread-191192] [transport.py] [_log()] starting thread (client mode): 0xa5741000
2026-02-14T19:53:45.421 [DEBUG] [Thread-191192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:53:45.435 [DEBUG] [Thread-191192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:53:45.435 [INFO] [Thread-191192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:53:45.443 [DEBUG] [Thread-191192] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:53:45.443 [DEBUG] [Thread-191192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:53:45.443 [DEBUG] [Thread-191192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:53:45.443 [DEBUG] [Thread-191192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:53:45.443 [DEBUG] [Thread-191192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:53:45.443 [DEBUG] [Thread-191192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:53:45.443 [DEBUG] [Thread-191192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:53:45.443 [DEBUG] [Thread-191192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:53:45.443 [DEBUG] [Thread-191192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:53:45.443 [DEBUG] [Thread-191192] [transport.py] [_log()] client lang: <none>
2026-02-14T19:53:45.443 [DEBUG] [Thread-191192] [transport.py] [_log()] server lang: <none>
2026-02-14T19:53:45.443 [DEBUG] [Thread-191192] [transport.py] [_log()] kex follows: False
2026-02-14T19:53:45.443 [DEBUG] [Thread-191192] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:53:45.443 [DEBUG] [Thread-191192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:53:45.443 [DEBUG] [Thread-191192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:53:45.444 [DEBUG] [Thread-191192] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:53:45.444 [DEBUG] [Thread-191192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:53:45.444 [DEBUG] [Thread-191192] [transport.py] [_log()] Compression: none
2026-02-14T19:53:45.444 [DEBUG] [Thread-191192] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:53:45.503 [DEBUG] [Thread-191192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:53:45.503 [DEBUG] [Thread-191192] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:53:45.504 [DEBUG] [Thread-191192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:53:45.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:53:45.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:53:45.560 [DEBUG] [Thread-191192] [transport.py] [_log()] userauth is OK
2026-02-14T19:53:45.561 [DEBUG] [Thread-191192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:53:45.561 [DEBUG] [Thread-191192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:53:45.561 [DEBUG] [Thread-191192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:53:45.561 [DEBUG] [Thread-191192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:53:45.580 [INFO] [Thread-191192] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:53:45.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-14T19:53:45.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:53:46.422 [DEBUG] [Thread-191192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:53:46.422 [DEBUG] [Thread-191192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:53:46.470 [DEBUG] [Thread-191192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:53:46.470 [DEBUG] [Thread-191192] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:53:46.480 [DEBUG] [Thread-191192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:53:46.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:53:46.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:53:46.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-14T19:53:46.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:53:46.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:53:46.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:53:46.516 [DEBUG] [Thread-191192] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:53:58.328 [DEBUG] [Thread-191194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:54:08.766 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:54:13.380 [DEBUG] [Thread-191195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:54:16.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:54:16.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:54:16.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-14T19:54:18.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 53, 40), 10.2, 49.75, 0.0, 36.41, 12.48, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:54:18.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:53:40
2026-02-14T19:54:19.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:54:19.362 [DEBUG] [Thread-191196] [transport.py] [_log()] starting thread (client mode): 0xa2d78790
2026-02-14T19:54:19.363 [DEBUG] [Thread-191196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:54:19.382 [DEBUG] [Thread-191196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:54:19.383 [INFO] [Thread-191196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:54:19.384 [DEBUG] [Thread-191196] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:54:19.384 [DEBUG] [Thread-191196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:54:19.384 [DEBUG] [Thread-191196] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:54:19.384 [DEBUG] [Thread-191196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:54:19.384 [DEBUG] [Thread-191196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:54:19.384 [DEBUG] [Thread-191196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:54:19.384 [DEBUG] [Thread-191196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:54:19.384 [DEBUG] [Thread-191196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:54:19.384 [DEBUG] [Thread-191196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:54:19.385 [DEBUG] [Thread-191196] [transport.py] [_log()] client lang: <none>
2026-02-14T19:54:19.385 [DEBUG] [Thread-191196] [transport.py] [_log()] server lang: <none>
2026-02-14T19:54:19.385 [DEBUG] [Thread-191196] [transport.py] [_log()] kex follows: False
2026-02-14T19:54:19.385 [DEBUG] [Thread-191196] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:54:19.385 [DEBUG] [Thread-191196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:54:19.385 [DEBUG] [Thread-191196] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:54:19.385 [DEBUG] [Thread-191196] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:54:19.385 [DEBUG] [Thread-191196] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:54:19.385 [DEBUG] [Thread-191196] [transport.py] [_log()] Compression: none
2026-02-14T19:54:19.385 [DEBUG] [Thread-191196] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:54:19.396 [DEBUG] [Thread-191196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:54:19.396 [DEBUG] [Thread-191196] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:54:19.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:54:19.397 [DEBUG] [Thread-191196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:54:19.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:54:19.399 [DEBUG] [Thread-191196] [transport.py] [_log()] userauth is OK
2026-02-14T19:54:19.399 [DEBUG] [Thread-191196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:54:19.399 [DEBUG] [Thread-191196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:54:19.399 [DEBUG] [Thread-191196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:54:19.400 [DEBUG] [Thread-191196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:54:19.424 [INFO] [Thread-191196] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:54:19.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:54:20.020 [DEBUG] [Thread-191196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:54:20.020 [DEBUG] [Thread-191196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:54:20.020 [DEBUG] [Thread-191196] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:54:20.060 [DEBUG] [Thread-191196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:54:20.060 [DEBUG] [Thread-191196] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:54:20.063 [DEBUG] [Thread-191196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:54:20.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:54:20.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:54:20.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:54:20.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:54:20.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:54:20.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:54:20.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:54:20.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:54:20.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:54:20.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.745601 -999.00  +11.90  28.87     56   +3.40 1 1 1 1 1   246    0 7.39 -43.73 ----- 26.2 28.9 177.2 40.1 12.5 -25.5 12.4 -24.5 12.2 -23.4 12.5 -24.7
2026-02-14T19:54:20.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:54:20.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:54:20.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.745601
2026-02-14T19:54:20.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:54:20.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:54:20.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:54:20.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:54:20.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:54:20.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:53:40', tmtdew=10.2, humidity=49.75, cloud=0.0, wind=36.41, temperature=12.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:53:39.926', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:54:20.090 [DEBUG] [Thread-191196] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:54:20.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-14T19:54:20.185 [DEBUG] [Thread-191199] [transport.py] [_log()] starting thread (client mode): 0xa5742530
2026-02-14T19:54:20.185 [DEBUG] [Thread-191199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:54:20.199 [DEBUG] [Thread-191199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:54:20.200 [INFO] [Thread-191199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:54:20.207 [DEBUG] [Thread-191199] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:54:20.208 [DEBUG] [Thread-191199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:54:20.208 [DEBUG] [Thread-191199] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:54:20.208 [DEBUG] [Thread-191199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:54:20.208 [DEBUG] [Thread-191199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:54:20.208 [DEBUG] [Thread-191199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:54:20.208 [DEBUG] [Thread-191199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:54:20.208 [DEBUG] [Thread-191199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:54:20.208 [DEBUG] [Thread-191199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:54:20.208 [DEBUG] [Thread-191199] [transport.py] [_log()] client lang: <none>
2026-02-14T19:54:20.208 [DEBUG] [Thread-191199] [transport.py] [_log()] server lang: <none>
2026-02-14T19:54:20.208 [DEBUG] [Thread-191199] [transport.py] [_log()] kex follows: False
2026-02-14T19:54:20.208 [DEBUG] [Thread-191199] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:54:20.208 [DEBUG] [Thread-191199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:54:20.208 [DEBUG] [Thread-191199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:54:20.208 [DEBUG] [Thread-191199] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:54:20.208 [DEBUG] [Thread-191199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:54:20.208 [DEBUG] [Thread-191199] [transport.py] [_log()] Compression: none
2026-02-14T19:54:20.208 [DEBUG] [Thread-191199] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:54:20.267 [DEBUG] [Thread-191199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:54:20.268 [DEBUG] [Thread-191199] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:54:20.268 [DEBUG] [Thread-191199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:54:20.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:54:20.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:54:20.323 [DEBUG] [Thread-191199] [transport.py] [_log()] userauth is OK
2026-02-14T19:54:20.324 [DEBUG] [Thread-191199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:54:20.324 [DEBUG] [Thread-191199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:54:20.324 [DEBUG] [Thread-191199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:54:20.324 [DEBUG] [Thread-191199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:54:20.343 [INFO] [Thread-191199] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:54:20.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-14T19:54:20.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:54:21.152 [DEBUG] [Thread-191199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:54:21.152 [DEBUG] [Thread-191199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:54:21.200 [DEBUG] [Thread-191199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:54:21.201 [DEBUG] [Thread-191199] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:54:21.210 [DEBUG] [Thread-191199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:54:21.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:54:21.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-14T19:54:21.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:54:21.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:54:21.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:54:21.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:54:21.244 [DEBUG] [Thread-191199] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:54:28.415 [DEBUG] [Thread-191201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:54:32.187 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:54:40.491 [DEBUG] [Thread-191202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:54:41.732 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:54:43.460 [DEBUG] [Thread-191203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:54:46.853 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:54:46.855 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:54:47.869 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:54:51.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:54:51.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:54:51.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-14T19:54:53.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 54, 16), 9.88, 50.44, 0.0, 33.58, 12.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:54:53.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:54:16
2026-02-14T19:54:53.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:54:53.663 [DEBUG] [Thread-191204] [transport.py] [_log()] starting thread (client mode): 0xa57e0310
2026-02-14T19:54:53.663 [DEBUG] [Thread-191204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:54:53.683 [DEBUG] [Thread-191204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:54:53.683 [INFO] [Thread-191204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:54:53.686 [DEBUG] [Thread-191204] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:54:53.686 [DEBUG] [Thread-191204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:54:53.686 [DEBUG] [Thread-191204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:54:53.686 [DEBUG] [Thread-191204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:54:53.686 [DEBUG] [Thread-191204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:54:53.686 [DEBUG] [Thread-191204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:54:53.687 [DEBUG] [Thread-191204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:54:53.687 [DEBUG] [Thread-191204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:54:53.687 [DEBUG] [Thread-191204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:54:53.687 [DEBUG] [Thread-191204] [transport.py] [_log()] client lang: <none>
2026-02-14T19:54:53.687 [DEBUG] [Thread-191204] [transport.py] [_log()] server lang: <none>
2026-02-14T19:54:53.687 [DEBUG] [Thread-191204] [transport.py] [_log()] kex follows: False
2026-02-14T19:54:53.687 [DEBUG] [Thread-191204] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:54:53.687 [DEBUG] [Thread-191204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:54:53.687 [DEBUG] [Thread-191204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:54:53.687 [DEBUG] [Thread-191204] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:54:53.687 [DEBUG] [Thread-191204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:54:53.687 [DEBUG] [Thread-191204] [transport.py] [_log()] Compression: none
2026-02-14T19:54:53.687 [DEBUG] [Thread-191204] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:54:53.705 [DEBUG] [Thread-191204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:54:53.706 [DEBUG] [Thread-191204] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:54:53.706 [DEBUG] [Thread-191204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:54:53.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:54:53.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:54:53.749 [DEBUG] [Thread-191204] [transport.py] [_log()] userauth is OK
2026-02-14T19:54:53.749 [DEBUG] [Thread-191204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:54:53.749 [DEBUG] [Thread-191204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:54:53.749 [DEBUG] [Thread-191204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:54:53.749 [DEBUG] [Thread-191204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:54:53.782 [INFO] [Thread-191204] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:54:53.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:54:54.431 [DEBUG] [Thread-191204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:54:54.431 [DEBUG] [Thread-191204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:54:54.432 [DEBUG] [Thread-191204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:54:54.472 [DEBUG] [Thread-191204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:54:54.472 [DEBUG] [Thread-191204] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:54:54.475 [DEBUG] [Thread-191204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:54:54.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:54:54.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:54:54.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:54:54.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:54:54.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:54:54.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:54:54.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:54:54.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:54:54.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:54:54.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.745948 -999.00  +11.90  29.61     56   +3.40 1 1 1 1 1   229    0 7.60 -42.08 ----- 29.6 29.6 171.8 38.8 12.5 -25.5 12.4 -24.6 12.1 -23.5 12.4 -24.5
2026-02-14T19:54:54.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:54:54.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:54:54.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.745948
2026-02-14T19:54:54.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:54:54.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:54:54.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:54:54.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:54:54.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:54:54.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:54:16', tmtdew=9.88, humidity=50.44, cloud=0.0, wind=33.58, temperature=12.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:54:09.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:54:54.500 [DEBUG] [Thread-191204] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:54:54.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-14T19:54:54.596 [DEBUG] [Thread-191207] [transport.py] [_log()] starting thread (client mode): 0xa5743250
2026-02-14T19:54:54.597 [DEBUG] [Thread-191207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:54:54.611 [DEBUG] [Thread-191207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:54:54.612 [INFO] [Thread-191207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:54:54.619 [DEBUG] [Thread-191207] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:54:54.619 [DEBUG] [Thread-191207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:54:54.619 [DEBUG] [Thread-191207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:54:54.619 [DEBUG] [Thread-191207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:54:54.619 [DEBUG] [Thread-191207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:54:54.619 [DEBUG] [Thread-191207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:54:54.619 [DEBUG] [Thread-191207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:54:54.619 [DEBUG] [Thread-191207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:54:54.620 [DEBUG] [Thread-191207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:54:54.620 [DEBUG] [Thread-191207] [transport.py] [_log()] client lang: <none>
2026-02-14T19:54:54.620 [DEBUG] [Thread-191207] [transport.py] [_log()] server lang: <none>
2026-02-14T19:54:54.620 [DEBUG] [Thread-191207] [transport.py] [_log()] kex follows: False
2026-02-14T19:54:54.620 [DEBUG] [Thread-191207] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:54:54.620 [DEBUG] [Thread-191207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:54:54.620 [DEBUG] [Thread-191207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:54:54.620 [DEBUG] [Thread-191207] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:54:54.620 [DEBUG] [Thread-191207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:54:54.620 [DEBUG] [Thread-191207] [transport.py] [_log()] Compression: none
2026-02-14T19:54:54.620 [DEBUG] [Thread-191207] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:54:54.680 [DEBUG] [Thread-191207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:54:54.681 [DEBUG] [Thread-191207] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:54:54.681 [DEBUG] [Thread-191207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:54:54.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:54:54.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:54:54.736 [DEBUG] [Thread-191207] [transport.py] [_log()] userauth is OK
2026-02-14T19:54:54.736 [DEBUG] [Thread-191207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:54:54.736 [DEBUG] [Thread-191207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:54:54.736 [DEBUG] [Thread-191207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:54:54.736 [DEBUG] [Thread-191207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:54:54.755 [INFO] [Thread-191207] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:54:54.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-14T19:54:54.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:54:55.561 [DEBUG] [Thread-191207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:54:55.562 [DEBUG] [Thread-191207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:54:55.609 [DEBUG] [Thread-191207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:54:55.610 [DEBUG] [Thread-191207] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:54:55.619 [DEBUG] [Thread-191207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:54:55.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:54:55.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T19:54:55.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-14T19:54:55.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:54:55.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:54:55.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:54:55.654 [DEBUG] [Thread-191207] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:54:58.492 [DEBUG] [Thread-191209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:55:11.390 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:55:13.542 [DEBUG] [Thread-191210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:55:25.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:55:25.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:55:25.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T19:55:27.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 54, 52), 9.88, 50.93, 0.0, 37.65, 12.04, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:55:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:54:52
2026-02-14T19:55:27.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:55:28.081 [DEBUG] [Thread-191211] [transport.py] [_log()] starting thread (client mode): 0xa5740160
2026-02-14T19:55:28.081 [DEBUG] [Thread-191211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:55:28.101 [DEBUG] [Thread-191211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:55:28.101 [INFO] [Thread-191211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:55:28.104 [DEBUG] [Thread-191211] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:55:28.105 [DEBUG] [Thread-191211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:55:28.105 [DEBUG] [Thread-191211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:55:28.105 [DEBUG] [Thread-191211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:55:28.105 [DEBUG] [Thread-191211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:55:28.105 [DEBUG] [Thread-191211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:55:28.105 [DEBUG] [Thread-191211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:55:28.105 [DEBUG] [Thread-191211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:55:28.105 [DEBUG] [Thread-191211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:55:28.105 [DEBUG] [Thread-191211] [transport.py] [_log()] client lang: <none>
2026-02-14T19:55:28.105 [DEBUG] [Thread-191211] [transport.py] [_log()] server lang: <none>
2026-02-14T19:55:28.105 [DEBUG] [Thread-191211] [transport.py] [_log()] kex follows: False
2026-02-14T19:55:28.105 [DEBUG] [Thread-191211] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:55:28.105 [DEBUG] [Thread-191211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:55:28.106 [DEBUG] [Thread-191211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:55:28.106 [DEBUG] [Thread-191211] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:55:28.106 [DEBUG] [Thread-191211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:55:28.106 [DEBUG] [Thread-191211] [transport.py] [_log()] Compression: none
2026-02-14T19:55:28.106 [DEBUG] [Thread-191211] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:55:28.115 [DEBUG] [Thread-191211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:55:28.116 [DEBUG] [Thread-191211] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:55:28.116 [DEBUG] [Thread-191211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:55:28.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:55:28.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:55:28.118 [DEBUG] [Thread-191211] [transport.py] [_log()] userauth is OK
2026-02-14T19:55:28.118 [DEBUG] [Thread-191211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:55:28.119 [DEBUG] [Thread-191211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:55:28.119 [DEBUG] [Thread-191211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:55:28.119 [DEBUG] [Thread-191211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:55:28.151 [INFO] [Thread-191211] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:55:28.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:55:28.582 [DEBUG] [Thread-191213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:55:28.782 [DEBUG] [Thread-191211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:55:28.782 [DEBUG] [Thread-191211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:55:28.783 [DEBUG] [Thread-191211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:55:28.823 [DEBUG] [Thread-191211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:55:28.824 [DEBUG] [Thread-191211] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:55:28.827 [DEBUG] [Thread-191211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:55:28.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:55:28.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:55:28.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:55:28.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:55:28.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:55:28.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:55:28.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:55:28.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:55:28.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:55:28.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.746295 -999.00  +11.90  36.17     56   +3.40 1 1 2 1 1   212    0 7.60 -43.00 ----- 33.1 36.2 169.2 39.9 12.5 -25.6 12.3 -24.7 12.1 -23.5 12.5 -24.6
2026-02-14T19:55:28.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:55:28.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:55:28.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.746295
2026-02-14T19:55:28.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:55:28.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:55:28.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:55:28.852 [DEBUG] [Thread-191211] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:55:28.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:55:28.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:55:28.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:54:52', tmtdew=9.88, humidity=50.93, cloud=0.0, wind=37.65, temperature=12.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:54:39.888', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:55:28.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-14T19:55:28.948 [DEBUG] [Thread-191215] [transport.py] [_log()] starting thread (client mode): 0xa57701c0
2026-02-14T19:55:28.948 [DEBUG] [Thread-191215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:55:28.962 [DEBUG] [Thread-191215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:55:28.963 [INFO] [Thread-191215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:55:28.970 [DEBUG] [Thread-191215] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:55:28.970 [DEBUG] [Thread-191215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:55:28.971 [DEBUG] [Thread-191215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:55:28.971 [DEBUG] [Thread-191215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:55:28.971 [DEBUG] [Thread-191215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:55:28.971 [DEBUG] [Thread-191215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:55:28.971 [DEBUG] [Thread-191215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:55:28.971 [DEBUG] [Thread-191215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:55:28.971 [DEBUG] [Thread-191215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:55:28.971 [DEBUG] [Thread-191215] [transport.py] [_log()] client lang: <none>
2026-02-14T19:55:28.971 [DEBUG] [Thread-191215] [transport.py] [_log()] server lang: <none>
2026-02-14T19:55:28.971 [DEBUG] [Thread-191215] [transport.py] [_log()] kex follows: False
2026-02-14T19:55:28.971 [DEBUG] [Thread-191215] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:55:28.971 [DEBUG] [Thread-191215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:55:28.971 [DEBUG] [Thread-191215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:55:28.971 [DEBUG] [Thread-191215] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:55:28.971 [DEBUG] [Thread-191215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:55:28.971 [DEBUG] [Thread-191215] [transport.py] [_log()] Compression: none
2026-02-14T19:55:28.971 [DEBUG] [Thread-191215] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:55:29.027 [DEBUG] [Thread-191215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:55:29.027 [DEBUG] [Thread-191215] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:55:29.028 [DEBUG] [Thread-191215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:55:29.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:55:29.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:55:29.084 [DEBUG] [Thread-191215] [transport.py] [_log()] userauth is OK
2026-02-14T19:55:29.084 [DEBUG] [Thread-191215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:55:29.084 [DEBUG] [Thread-191215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:55:29.084 [DEBUG] [Thread-191215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:55:29.084 [DEBUG] [Thread-191215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:55:29.103 [INFO] [Thread-191215] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:55:29.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-14T19:55:29.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:55:29.895 [DEBUG] [Thread-191215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:55:29.896 [DEBUG] [Thread-191215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:55:29.943 [DEBUG] [Thread-191215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:55:29.943 [DEBUG] [Thread-191215] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:55:29.953 [DEBUG] [Thread-191215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:55:29.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:55:29.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-14T19:55:29.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-14T19:55:29.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:55:29.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:55:29.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:55:29.985 [DEBUG] [Thread-191215] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:55:34.901 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:55:40.547 [DEBUG] [Thread-191217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:55:43.394 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:55:43.617 [DEBUG] [Thread-191218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:55:49.512 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:55:55.980 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:55:55.982 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:55:58.681 [DEBUG] [Thread-191219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:56:00.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:56:00.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:56:00.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-14T19:56:01.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 55, 27), 9.87, 50.98, 0.0, 40.14, 12.02, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:56:01.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:55:27
2026-02-14T19:56:02.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:56:02.491 [DEBUG] [Thread-191220] [transport.py] [_log()] starting thread (client mode): 0xa57d4c40
2026-02-14T19:56:02.491 [DEBUG] [Thread-191220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:56:02.511 [DEBUG] [Thread-191220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:56:02.511 [INFO] [Thread-191220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:56:02.514 [DEBUG] [Thread-191220] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:56:02.514 [DEBUG] [Thread-191220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:56:02.514 [DEBUG] [Thread-191220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:56:02.514 [DEBUG] [Thread-191220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:56:02.514 [DEBUG] [Thread-191220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:56:02.514 [DEBUG] [Thread-191220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:56:02.514 [DEBUG] [Thread-191220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:56:02.514 [DEBUG] [Thread-191220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:56:02.514 [DEBUG] [Thread-191220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:56:02.514 [DEBUG] [Thread-191220] [transport.py] [_log()] client lang: <none>
2026-02-14T19:56:02.514 [DEBUG] [Thread-191220] [transport.py] [_log()] server lang: <none>
2026-02-14T19:56:02.514 [DEBUG] [Thread-191220] [transport.py] [_log()] kex follows: False
2026-02-14T19:56:02.515 [DEBUG] [Thread-191220] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:56:02.515 [DEBUG] [Thread-191220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:56:02.515 [DEBUG] [Thread-191220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:56:02.515 [DEBUG] [Thread-191220] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:56:02.515 [DEBUG] [Thread-191220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:56:02.515 [DEBUG] [Thread-191220] [transport.py] [_log()] Compression: none
2026-02-14T19:56:02.515 [DEBUG] [Thread-191220] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:56:02.532 [DEBUG] [Thread-191220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:56:02.532 [DEBUG] [Thread-191220] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:56:02.533 [DEBUG] [Thread-191220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:56:02.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:56:02.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:56:02.534 [DEBUG] [Thread-191220] [transport.py] [_log()] userauth is OK
2026-02-14T19:56:02.534 [DEBUG] [Thread-191220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:56:02.535 [DEBUG] [Thread-191220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:56:02.535 [DEBUG] [Thread-191220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:56:02.535 [DEBUG] [Thread-191220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:56:02.555 [INFO] [Thread-191220] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:56:02.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:56:03.145 [DEBUG] [Thread-191220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:56:03.145 [DEBUG] [Thread-191220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:56:03.145 [DEBUG] [Thread-191220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:56:03.186 [DEBUG] [Thread-191220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:56:03.186 [DEBUG] [Thread-191220] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:56:03.189 [DEBUG] [Thread-191220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:56:03.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:56:03.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:56:03.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:56:03.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:56:03.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:56:03.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:56:03.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:56:03.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:56:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:56:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.746642 -999.00  +11.90  33.17     56   +3.40 1 1 2 1 1   197    0 7.48 -40.20 ----- 32.5 33.2 167.8 39.6 12.5 -25.4 12.3 -24.6 12.1 -23.4 12.5 -24.7
2026-02-14T19:56:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:56:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:56:03.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.746642
2026-02-14T19:56:03.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:56:03.214 [DEBUG] [Thread-191220] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:56:03.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:56:03.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:56:03.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:56:03.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:56:03.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:55:27', tmtdew=9.87, humidity=50.98, cloud=0.0, wind=40.14, temperature=12.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:55:09.869', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:56:03.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-14T19:56:03.317 [DEBUG] [Thread-191223] [transport.py] [_log()] starting thread (client mode): 0xa2d01ed0
2026-02-14T19:56:03.317 [DEBUG] [Thread-191223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:56:03.332 [DEBUG] [Thread-191223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:56:03.332 [INFO] [Thread-191223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:56:03.339 [DEBUG] [Thread-191223] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:56:03.339 [DEBUG] [Thread-191223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:56:03.339 [DEBUG] [Thread-191223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:56:03.339 [DEBUG] [Thread-191223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:56:03.339 [DEBUG] [Thread-191223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:56:03.339 [DEBUG] [Thread-191223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:56:03.340 [DEBUG] [Thread-191223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:56:03.340 [DEBUG] [Thread-191223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:56:03.340 [DEBUG] [Thread-191223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:56:03.340 [DEBUG] [Thread-191223] [transport.py] [_log()] client lang: <none>
2026-02-14T19:56:03.340 [DEBUG] [Thread-191223] [transport.py] [_log()] server lang: <none>
2026-02-14T19:56:03.340 [DEBUG] [Thread-191223] [transport.py] [_log()] kex follows: False
2026-02-14T19:56:03.340 [DEBUG] [Thread-191223] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:56:03.340 [DEBUG] [Thread-191223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:56:03.340 [DEBUG] [Thread-191223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:56:03.340 [DEBUG] [Thread-191223] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:56:03.340 [DEBUG] [Thread-191223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:56:03.340 [DEBUG] [Thread-191223] [transport.py] [_log()] Compression: none
2026-02-14T19:56:03.340 [DEBUG] [Thread-191223] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:56:03.400 [DEBUG] [Thread-191223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:56:03.401 [DEBUG] [Thread-191223] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:56:03.401 [DEBUG] [Thread-191223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:56:03.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:56:03.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:56:03.459 [DEBUG] [Thread-191223] [transport.py] [_log()] userauth is OK
2026-02-14T19:56:03.459 [DEBUG] [Thread-191223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:56:03.459 [DEBUG] [Thread-191223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:56:03.459 [DEBUG] [Thread-191223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:56:03.459 [DEBUG] [Thread-191223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:56:03.473 [INFO] [Thread-191223] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:56:03.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-14T19:56:03.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:56:04.319 [DEBUG] [Thread-191223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:56:04.320 [DEBUG] [Thread-191223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:56:04.367 [DEBUG] [Thread-191223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:56:04.368 [DEBUG] [Thread-191223] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:56:04.377 [DEBUG] [Thread-191223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:56:04.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:56:04.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-14T19:56:04.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-14T19:56:04.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:56:04.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:56:04.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:56:04.412 [DEBUG] [Thread-191223] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:56:12.956 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:56:13.717 [DEBUG] [Thread-191225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:56:28.772 [DEBUG] [Thread-191226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:56:34.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:56:34.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:56:34.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-14T19:56:36.366 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:56:36.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 56, 3), 9.86, 50.99, 0.0, 40.93, 12.06, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:56:36.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:56:03
2026-02-14T19:56:37.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:56:37.293 [DEBUG] [Thread-191227] [transport.py] [_log()] starting thread (client mode): 0xa57c3160
2026-02-14T19:56:37.293 [DEBUG] [Thread-191227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:56:37.312 [DEBUG] [Thread-191227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:56:37.312 [INFO] [Thread-191227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:56:37.315 [DEBUG] [Thread-191227] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:56:37.315 [DEBUG] [Thread-191227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:56:37.315 [DEBUG] [Thread-191227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:56:37.316 [DEBUG] [Thread-191227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:56:37.316 [DEBUG] [Thread-191227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:56:37.316 [DEBUG] [Thread-191227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:56:37.316 [DEBUG] [Thread-191227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:56:37.316 [DEBUG] [Thread-191227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:56:37.316 [DEBUG] [Thread-191227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:56:37.316 [DEBUG] [Thread-191227] [transport.py] [_log()] client lang: <none>
2026-02-14T19:56:37.316 [DEBUG] [Thread-191227] [transport.py] [_log()] server lang: <none>
2026-02-14T19:56:37.316 [DEBUG] [Thread-191227] [transport.py] [_log()] kex follows: False
2026-02-14T19:56:37.316 [DEBUG] [Thread-191227] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:56:37.316 [DEBUG] [Thread-191227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:56:37.316 [DEBUG] [Thread-191227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:56:37.316 [DEBUG] [Thread-191227] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:56:37.316 [DEBUG] [Thread-191227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:56:37.317 [DEBUG] [Thread-191227] [transport.py] [_log()] Compression: none
2026-02-14T19:56:37.317 [DEBUG] [Thread-191227] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:56:37.334 [DEBUG] [Thread-191227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:56:37.334 [DEBUG] [Thread-191227] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:56:37.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:56:37.335 [DEBUG] [Thread-191227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:56:37.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:56:37.337 [DEBUG] [Thread-191227] [transport.py] [_log()] userauth is OK
2026-02-14T19:56:37.337 [DEBUG] [Thread-191227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:56:37.337 [DEBUG] [Thread-191227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:56:37.337 [DEBUG] [Thread-191227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:56:37.337 [DEBUG] [Thread-191227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:56:37.355 [INFO] [Thread-191227] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:56:37.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:56:37.985 [DEBUG] [Thread-191227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:56:37.985 [DEBUG] [Thread-191227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:56:37.986 [DEBUG] [Thread-191227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:56:38.027 [DEBUG] [Thread-191227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:56:38.027 [DEBUG] [Thread-191227] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:56:38.030 [DEBUG] [Thread-191227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:56:38.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:56:38.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:56:38.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:56:38.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:56:38.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:56:38.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:56:38.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:56:38.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:56:38.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:56:38.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.747337 -999.00  +11.90  31.92     56   +3.40 1 1 2 1 1   168    0 7.46 -41.86 ----- 28.1 31.9 163.6 45.5 12.4 -25.5 12.3 -24.5 12.1 -23.3 12.5 -24.6
2026-02-14T19:56:38.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:56:38.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:56:38.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.747337
2026-02-14T19:56:38.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:56:38.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:56:38.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:56:38.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:56:38.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:56:38.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:56:03', tmtdew=9.86, humidity=50.99, cloud=0.0, wind=40.93, temperature=12.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:56:09.917', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:56:38.054 [DEBUG] [Thread-191227] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:56:38.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T19:56:38.146 [DEBUG] [Thread-191230] [transport.py] [_log()] starting thread (client mode): 0xa57d6a40
2026-02-14T19:56:38.146 [DEBUG] [Thread-191230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:56:38.160 [DEBUG] [Thread-191230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:56:38.160 [INFO] [Thread-191230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:56:38.167 [DEBUG] [Thread-191230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:56:38.168 [DEBUG] [Thread-191230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:56:38.168 [DEBUG] [Thread-191230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:56:38.168 [DEBUG] [Thread-191230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:56:38.168 [DEBUG] [Thread-191230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:56:38.168 [DEBUG] [Thread-191230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:56:38.168 [DEBUG] [Thread-191230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:56:38.168 [DEBUG] [Thread-191230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:56:38.168 [DEBUG] [Thread-191230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:56:38.168 [DEBUG] [Thread-191230] [transport.py] [_log()] client lang: <none>
2026-02-14T19:56:38.168 [DEBUG] [Thread-191230] [transport.py] [_log()] server lang: <none>
2026-02-14T19:56:38.168 [DEBUG] [Thread-191230] [transport.py] [_log()] kex follows: False
2026-02-14T19:56:38.168 [DEBUG] [Thread-191230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:56:38.168 [DEBUG] [Thread-191230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:56:38.168 [DEBUG] [Thread-191230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:56:38.168 [DEBUG] [Thread-191230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:56:38.168 [DEBUG] [Thread-191230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:56:38.168 [DEBUG] [Thread-191230] [transport.py] [_log()] Compression: none
2026-02-14T19:56:38.168 [DEBUG] [Thread-191230] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:56:38.226 [DEBUG] [Thread-191230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:56:38.227 [DEBUG] [Thread-191230] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:56:38.227 [DEBUG] [Thread-191230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:56:38.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:56:38.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:56:38.287 [DEBUG] [Thread-191230] [transport.py] [_log()] userauth is OK
2026-02-14T19:56:38.287 [DEBUG] [Thread-191230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:56:38.287 [DEBUG] [Thread-191230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:56:38.287 [DEBUG] [Thread-191230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:56:38.288 [DEBUG] [Thread-191230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:56:38.306 [INFO] [Thread-191230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:56:38.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-14T19:56:38.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:56:39.141 [DEBUG] [Thread-191230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:56:39.142 [DEBUG] [Thread-191230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:56:39.189 [DEBUG] [Thread-191230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:56:39.189 [DEBUG] [Thread-191230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:56:39.198 [DEBUG] [Thread-191230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:56:39.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:56:39.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-14T19:56:39.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:56:39.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:56:39.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:56:39.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:56:39.231 [DEBUG] [Thread-191230] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:56:40.604 [DEBUG] [Thread-191232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:56:43.811 [DEBUG] [Thread-191233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:56:44.778 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:56:50.898 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:56:58.870 [DEBUG] [Thread-191234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:57:01.202 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:57:01.203 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:57:09.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:57:09.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:57:09.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-14T19:57:11.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 56, 38), 10.13, 49.95, 0.0, 41.28, 12.38, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:57:11.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:56:38
2026-02-14T19:57:12.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:57:12.409 [DEBUG] [Thread-191235] [transport.py] [_log()] starting thread (client mode): 0xa2d6c040
2026-02-14T19:57:12.409 [DEBUG] [Thread-191235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:57:12.429 [DEBUG] [Thread-191235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:57:12.429 [INFO] [Thread-191235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:57:12.432 [DEBUG] [Thread-191235] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:57:12.432 [DEBUG] [Thread-191235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:57:12.432 [DEBUG] [Thread-191235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:57:12.432 [DEBUG] [Thread-191235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:57:12.432 [DEBUG] [Thread-191235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:57:12.432 [DEBUG] [Thread-191235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:57:12.432 [DEBUG] [Thread-191235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:57:12.432 [DEBUG] [Thread-191235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:57:12.432 [DEBUG] [Thread-191235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:57:12.432 [DEBUG] [Thread-191235] [transport.py] [_log()] client lang: <none>
2026-02-14T19:57:12.432 [DEBUG] [Thread-191235] [transport.py] [_log()] server lang: <none>
2026-02-14T19:57:12.432 [DEBUG] [Thread-191235] [transport.py] [_log()] kex follows: False
2026-02-14T19:57:12.432 [DEBUG] [Thread-191235] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:57:12.432 [DEBUG] [Thread-191235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:57:12.432 [DEBUG] [Thread-191235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:57:12.432 [DEBUG] [Thread-191235] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:57:12.432 [DEBUG] [Thread-191235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:57:12.432 [DEBUG] [Thread-191235] [transport.py] [_log()] Compression: none
2026-02-14T19:57:12.432 [DEBUG] [Thread-191235] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:57:12.449 [DEBUG] [Thread-191235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:57:12.449 [DEBUG] [Thread-191235] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:57:12.450 [DEBUG] [Thread-191235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:57:12.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:57:12.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:57:12.452 [DEBUG] [Thread-191235] [transport.py] [_log()] userauth is OK
2026-02-14T19:57:12.452 [DEBUG] [Thread-191235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:57:12.452 [DEBUG] [Thread-191235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:57:12.452 [DEBUG] [Thread-191235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:57:12.452 [DEBUG] [Thread-191235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:57:12.477 [INFO] [Thread-191235] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:57:12.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:57:13.083 [DEBUG] [Thread-191235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:57:13.083 [DEBUG] [Thread-191235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:57:13.083 [DEBUG] [Thread-191235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:57:13.125 [DEBUG] [Thread-191235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:57:13.125 [DEBUG] [Thread-191235] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:57:13.127 [DEBUG] [Thread-191235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:57:13.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:57:13.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:57:13.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:57:13.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:57:13.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:57:13.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:57:13.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:57:13.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:57:13.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:57:13.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.747684 -999.00  +11.90  24.86     56   +3.40 1 1 1 1 1   155    0 7.54 -38.73 ----- 23.1 24.9 166.2 36.8 12.4 -25.4 12.3 -24.4 12.1 -23.4 12.4 -24.6
2026-02-14T19:57:13.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:57:13.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:57:13.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.747684
2026-02-14T19:57:13.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:57:13.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:57:13.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:57:13.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:57:13.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:57:13.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:56:38', tmtdew=10.13, humidity=49.95, cloud=0.0, wind=41.28, temperature=12.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:56:39.898', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:57:13.149 [DEBUG] [Thread-191235] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:57:13.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-14T19:57:13.246 [DEBUG] [Thread-191238] [transport.py] [_log()] starting thread (client mode): 0xa2d6fb80
2026-02-14T19:57:13.246 [DEBUG] [Thread-191238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:57:13.260 [DEBUG] [Thread-191238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:57:13.261 [INFO] [Thread-191238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:57:13.268 [DEBUG] [Thread-191238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:57:13.268 [DEBUG] [Thread-191238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:57:13.268 [DEBUG] [Thread-191238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:57:13.269 [DEBUG] [Thread-191238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:57:13.269 [DEBUG] [Thread-191238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:57:13.269 [DEBUG] [Thread-191238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:57:13.269 [DEBUG] [Thread-191238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:57:13.269 [DEBUG] [Thread-191238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:57:13.269 [DEBUG] [Thread-191238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:57:13.269 [DEBUG] [Thread-191238] [transport.py] [_log()] client lang: <none>
2026-02-14T19:57:13.269 [DEBUG] [Thread-191238] [transport.py] [_log()] server lang: <none>
2026-02-14T19:57:13.269 [DEBUG] [Thread-191238] [transport.py] [_log()] kex follows: False
2026-02-14T19:57:13.269 [DEBUG] [Thread-191238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:57:13.269 [DEBUG] [Thread-191238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:57:13.269 [DEBUG] [Thread-191238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:57:13.269 [DEBUG] [Thread-191238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:57:13.269 [DEBUG] [Thread-191238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:57:13.269 [DEBUG] [Thread-191238] [transport.py] [_log()] Compression: none
2026-02-14T19:57:13.269 [DEBUG] [Thread-191238] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:57:13.325 [DEBUG] [Thread-191238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:57:13.325 [DEBUG] [Thread-191238] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:57:13.325 [DEBUG] [Thread-191238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:57:13.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:57:13.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:57:13.383 [DEBUG] [Thread-191238] [transport.py] [_log()] userauth is OK
2026-02-14T19:57:13.383 [DEBUG] [Thread-191238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:57:13.383 [DEBUG] [Thread-191238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:57:13.383 [DEBUG] [Thread-191238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:57:13.383 [DEBUG] [Thread-191238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:57:13.402 [INFO] [Thread-191238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:57:13.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-14T19:57:13.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:57:13.907 [DEBUG] [Thread-191240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:57:14.232 [DEBUG] [Thread-191238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:57:14.233 [DEBUG] [Thread-191238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:57:14.281 [DEBUG] [Thread-191238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:57:14.281 [DEBUG] [Thread-191238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:57:14.290 [DEBUG] [Thread-191238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:57:14.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:57:14.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-14T19:57:14.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-14T19:57:14.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:57:14.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:57:14.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:57:14.327 [DEBUG] [Thread-191238] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:57:14.368 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:57:28.955 [DEBUG] [Thread-191241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:57:37.785 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:57:40.663 [DEBUG] [Thread-191242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:57:43.991 [DEBUG] [Thread-191243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:57:44.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:57:44.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:57:44.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-14T19:57:46.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 57, 14), 9.91, 51.01, 0.0, 35.52, 12.06, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:57:46.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:57:14
2026-02-14T19:57:46.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:57:46.809 [DEBUG] [Thread-191244] [transport.py] [_log()] starting thread (client mode): 0xa2d79270
2026-02-14T19:57:46.809 [DEBUG] [Thread-191244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:57:46.828 [DEBUG] [Thread-191244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:57:46.828 [INFO] [Thread-191244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:57:46.830 [DEBUG] [Thread-191244] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:57:46.830 [DEBUG] [Thread-191244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:57:46.830 [DEBUG] [Thread-191244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:57:46.830 [DEBUG] [Thread-191244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:57:46.830 [DEBUG] [Thread-191244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:57:46.830 [DEBUG] [Thread-191244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:57:46.830 [DEBUG] [Thread-191244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:57:46.830 [DEBUG] [Thread-191244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:57:46.830 [DEBUG] [Thread-191244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:57:46.830 [DEBUG] [Thread-191244] [transport.py] [_log()] client lang: <none>
2026-02-14T19:57:46.830 [DEBUG] [Thread-191244] [transport.py] [_log()] server lang: <none>
2026-02-14T19:57:46.830 [DEBUG] [Thread-191244] [transport.py] [_log()] kex follows: False
2026-02-14T19:57:46.830 [DEBUG] [Thread-191244] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:57:46.830 [DEBUG] [Thread-191244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:57:46.831 [DEBUG] [Thread-191244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:57:46.831 [DEBUG] [Thread-191244] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:57:46.831 [DEBUG] [Thread-191244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:57:46.831 [DEBUG] [Thread-191244] [transport.py] [_log()] Compression: none
2026-02-14T19:57:46.831 [DEBUG] [Thread-191244] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:57:46.845 [DEBUG] [Thread-191244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:57:46.846 [DEBUG] [Thread-191244] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:57:46.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:57:46.848 [DEBUG] [Thread-191244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:57:46.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:57:46.850 [DEBUG] [Thread-191244] [transport.py] [_log()] userauth is OK
2026-02-14T19:57:46.850 [DEBUG] [Thread-191244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:57:46.851 [DEBUG] [Thread-191244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:57:46.851 [DEBUG] [Thread-191244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:57:46.851 [DEBUG] [Thread-191244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:57:46.873 [INFO] [Thread-191244] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:57:46.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:57:47.512 [DEBUG] [Thread-191244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:57:47.512 [DEBUG] [Thread-191244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:57:47.513 [DEBUG] [Thread-191244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:57:47.553 [DEBUG] [Thread-191244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:57:47.553 [DEBUG] [Thread-191244] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:57:47.556 [DEBUG] [Thread-191244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:57:47.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:57:47.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:57:47.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:57:47.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:57:47.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:57:47.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:57:47.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:57:47.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:57:47.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:57:47.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.748031 -999.00  +11.90  24.30     56   +3.40 1 1 1 1 1   142    0 7.66 -33.44 ----- 20.6 24.3 178.8 39.7 12.4 -25.4 12.3 -24.5 12.1 -23.4 12.4 -24.5
2026-02-14T19:57:47.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:57:47.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:57:47.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.748031
2026-02-14T19:57:47.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:57:47.588 [DEBUG] [Thread-191244] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:57:47.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:57:47.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:57:47.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:57:47.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:57:47.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:57:14', tmtdew=9.91, humidity=51.01, cloud=0.0, wind=35.52, temperature=12.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:57:09.878', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:57:47.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-14T19:57:47.679 [DEBUG] [Thread-191247] [transport.py] [_log()] starting thread (client mode): 0xa2d7ae60
2026-02-14T19:57:47.679 [DEBUG] [Thread-191247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:57:47.695 [DEBUG] [Thread-191247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:57:47.695 [INFO] [Thread-191247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:57:47.703 [DEBUG] [Thread-191247] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:57:47.703 [DEBUG] [Thread-191247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:57:47.703 [DEBUG] [Thread-191247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:57:47.703 [DEBUG] [Thread-191247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:57:47.703 [DEBUG] [Thread-191247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:57:47.703 [DEBUG] [Thread-191247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:57:47.704 [DEBUG] [Thread-191247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:57:47.704 [DEBUG] [Thread-191247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:57:47.704 [DEBUG] [Thread-191247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:57:47.704 [DEBUG] [Thread-191247] [transport.py] [_log()] client lang: <none>
2026-02-14T19:57:47.704 [DEBUG] [Thread-191247] [transport.py] [_log()] server lang: <none>
2026-02-14T19:57:47.704 [DEBUG] [Thread-191247] [transport.py] [_log()] kex follows: False
2026-02-14T19:57:47.704 [DEBUG] [Thread-191247] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:57:47.704 [DEBUG] [Thread-191247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:57:47.705 [DEBUG] [Thread-191247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:57:47.705 [DEBUG] [Thread-191247] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:57:47.705 [DEBUG] [Thread-191247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:57:47.705 [DEBUG] [Thread-191247] [transport.py] [_log()] Compression: none
2026-02-14T19:57:47.705 [DEBUG] [Thread-191247] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:57:47.759 [DEBUG] [Thread-191247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:57:47.760 [DEBUG] [Thread-191247] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:57:47.760 [DEBUG] [Thread-191247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:57:47.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:57:47.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:57:47.815 [DEBUG] [Thread-191247] [transport.py] [_log()] userauth is OK
2026-02-14T19:57:47.816 [DEBUG] [Thread-191247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:57:47.816 [DEBUG] [Thread-191247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:57:47.816 [DEBUG] [Thread-191247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:57:47.816 [DEBUG] [Thread-191247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:57:47.835 [INFO] [Thread-191247] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:57:47.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-14T19:57:47.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:57:48.728 [DEBUG] [Thread-191247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:57:48.728 [DEBUG] [Thread-191247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:57:48.776 [DEBUG] [Thread-191247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:57:48.777 [DEBUG] [Thread-191247] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:57:48.786 [DEBUG] [Thread-191247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:57:48.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:57:48.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-14T19:57:48.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-14T19:57:48.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:57:48.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:57:48.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:57:48.822 [DEBUG] [Thread-191247] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:57:51.458 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:57:56.551 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:57:59.026 [DEBUG] [Thread-191249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:58:05.171 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:58:05.174 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:58:14.077 [DEBUG] [Thread-191250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:58:18.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:58:18.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:58:18.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-14T19:58:19.978 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:58:20.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 57, 50), 9.86, 51.01, 0.0, 35.31, 12.04, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:58:20.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:57:50
2026-02-14T19:58:21.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:58:21.259 [DEBUG] [Thread-191251] [transport.py] [_log()] starting thread (client mode): 0xa2d01a50
2026-02-14T19:58:21.259 [DEBUG] [Thread-191251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:58:21.278 [DEBUG] [Thread-191251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:58:21.278 [INFO] [Thread-191251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:58:21.282 [DEBUG] [Thread-191251] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:58:21.282 [DEBUG] [Thread-191251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:58:21.282 [DEBUG] [Thread-191251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:58:21.282 [DEBUG] [Thread-191251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:58:21.282 [DEBUG] [Thread-191251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:58:21.282 [DEBUG] [Thread-191251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:58:21.282 [DEBUG] [Thread-191251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:58:21.282 [DEBUG] [Thread-191251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:58:21.282 [DEBUG] [Thread-191251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:58:21.282 [DEBUG] [Thread-191251] [transport.py] [_log()] client lang: <none>
2026-02-14T19:58:21.282 [DEBUG] [Thread-191251] [transport.py] [_log()] server lang: <none>
2026-02-14T19:58:21.282 [DEBUG] [Thread-191251] [transport.py] [_log()] kex follows: False
2026-02-14T19:58:21.282 [DEBUG] [Thread-191251] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:58:21.282 [DEBUG] [Thread-191251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:58:21.283 [DEBUG] [Thread-191251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:58:21.283 [DEBUG] [Thread-191251] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:58:21.283 [DEBUG] [Thread-191251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:58:21.283 [DEBUG] [Thread-191251] [transport.py] [_log()] Compression: none
2026-02-14T19:58:21.283 [DEBUG] [Thread-191251] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:58:21.299 [DEBUG] [Thread-191251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:58:21.300 [DEBUG] [Thread-191251] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:58:21.300 [DEBUG] [Thread-191251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:58:21.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:58:21.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:58:21.302 [DEBUG] [Thread-191251] [transport.py] [_log()] userauth is OK
2026-02-14T19:58:21.302 [DEBUG] [Thread-191251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:58:21.302 [DEBUG] [Thread-191251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:58:21.302 [DEBUG] [Thread-191251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:58:21.302 [DEBUG] [Thread-191251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:58:21.323 [INFO] [Thread-191251] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:58:21.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:58:21.927 [DEBUG] [Thread-191251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:58:21.928 [DEBUG] [Thread-191251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:58:21.928 [DEBUG] [Thread-191251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:58:21.968 [DEBUG] [Thread-191251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:58:21.968 [DEBUG] [Thread-191251] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:58:21.971 [DEBUG] [Thread-191251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:58:21.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:58:21.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:58:21.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:58:21.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:58:21.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:58:21.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:58:21.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:58:21.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:58:21.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:58:21.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.748378 -999.00  +11.90  24.52     56   +3.40 1 1 1 1 1   131    0 7.52 -36.68 ----- 25.2 24.5 165.8 38.1 12.4 -25.4 12.3 -24.4 12.1 -23.3 12.4 -24.5
2026-02-14T19:58:21.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:58:21.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:58:21.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.748378
2026-02-14T19:58:21.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:58:21.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:58:21.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:58:21.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:58:21.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:58:21.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:57:50', tmtdew=9.86, humidity=51.01, cloud=0.0, wind=35.31, temperature=12.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:57:39.859', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:58:21.998 [DEBUG] [Thread-191251] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:58:22.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-14T19:58:22.093 [DEBUG] [Thread-191254] [transport.py] [_log()] starting thread (client mode): 0xa2d00af0
2026-02-14T19:58:22.094 [DEBUG] [Thread-191254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:58:22.108 [DEBUG] [Thread-191254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:58:22.108 [INFO] [Thread-191254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:58:22.115 [DEBUG] [Thread-191254] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:58:22.116 [DEBUG] [Thread-191254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:58:22.116 [DEBUG] [Thread-191254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:58:22.116 [DEBUG] [Thread-191254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:58:22.116 [DEBUG] [Thread-191254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:58:22.116 [DEBUG] [Thread-191254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:58:22.116 [DEBUG] [Thread-191254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:58:22.117 [DEBUG] [Thread-191254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:58:22.117 [DEBUG] [Thread-191254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:58:22.117 [DEBUG] [Thread-191254] [transport.py] [_log()] client lang: <none>
2026-02-14T19:58:22.117 [DEBUG] [Thread-191254] [transport.py] [_log()] server lang: <none>
2026-02-14T19:58:22.117 [DEBUG] [Thread-191254] [transport.py] [_log()] kex follows: False
2026-02-14T19:58:22.117 [DEBUG] [Thread-191254] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:58:22.117 [DEBUG] [Thread-191254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:58:22.117 [DEBUG] [Thread-191254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:58:22.118 [DEBUG] [Thread-191254] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:58:22.118 [DEBUG] [Thread-191254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:58:22.118 [DEBUG] [Thread-191254] [transport.py] [_log()] Compression: none
2026-02-14T19:58:22.118 [DEBUG] [Thread-191254] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:58:22.175 [DEBUG] [Thread-191254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:58:22.176 [DEBUG] [Thread-191254] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:58:22.176 [DEBUG] [Thread-191254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:58:22.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:58:22.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:58:22.231 [DEBUG] [Thread-191254] [transport.py] [_log()] userauth is OK
2026-02-14T19:58:22.232 [DEBUG] [Thread-191254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:58:22.232 [DEBUG] [Thread-191254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:58:22.232 [DEBUG] [Thread-191254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:58:22.232 [DEBUG] [Thread-191254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:58:22.250 [INFO] [Thread-191254] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:58:22.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-14T19:58:22.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:58:23.040 [DEBUG] [Thread-191254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:58:23.040 [DEBUG] [Thread-191254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:58:23.088 [DEBUG] [Thread-191254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:58:23.088 [DEBUG] [Thread-191254] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:58:23.096 [DEBUG] [Thread-191254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:58:23.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:58:23.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-14T19:58:23.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-14T19:58:23.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:58:23.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:58:23.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:58:23.129 [DEBUG] [Thread-191254] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:58:29.113 [DEBUG] [Thread-191256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:58:40.722 [DEBUG] [Thread-191257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:58:43.416 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:58:44.162 [DEBUG] [Thread-191258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:58:48.841 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:58:53.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:58:53.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:58:53.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-14T19:58:53.921 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:58:54.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 58, 25), 9.86, 51.01, 0.0, 33.49, 12.04, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:58:54.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:58:25
2026-02-14T19:58:55.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:58:55.501 [DEBUG] [Thread-191259] [transport.py] [_log()] starting thread (client mode): 0xa57e12d0
2026-02-14T19:58:55.501 [DEBUG] [Thread-191259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:58:55.512 [DEBUG] [Thread-191259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:58:55.512 [INFO] [Thread-191259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:58:55.516 [DEBUG] [Thread-191259] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:58:55.516 [DEBUG] [Thread-191259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:58:55.516 [DEBUG] [Thread-191259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:58:55.516 [DEBUG] [Thread-191259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:58:55.516 [DEBUG] [Thread-191259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:58:55.516 [DEBUG] [Thread-191259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:58:55.516 [DEBUG] [Thread-191259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:58:55.516 [DEBUG] [Thread-191259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:58:55.516 [DEBUG] [Thread-191259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:58:55.516 [DEBUG] [Thread-191259] [transport.py] [_log()] client lang: <none>
2026-02-14T19:58:55.516 [DEBUG] [Thread-191259] [transport.py] [_log()] server lang: <none>
2026-02-14T19:58:55.516 [DEBUG] [Thread-191259] [transport.py] [_log()] kex follows: False
2026-02-14T19:58:55.516 [DEBUG] [Thread-191259] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:58:55.516 [DEBUG] [Thread-191259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:58:55.516 [DEBUG] [Thread-191259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:58:55.516 [DEBUG] [Thread-191259] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:58:55.516 [DEBUG] [Thread-191259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:58:55.516 [DEBUG] [Thread-191259] [transport.py] [_log()] Compression: none
2026-02-14T19:58:55.516 [DEBUG] [Thread-191259] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:58:55.534 [DEBUG] [Thread-191259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:58:55.535 [DEBUG] [Thread-191259] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:58:55.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:58:55.536 [DEBUG] [Thread-191259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:58:55.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:58:55.577 [DEBUG] [Thread-191259] [transport.py] [_log()] userauth is OK
2026-02-14T19:58:55.578 [DEBUG] [Thread-191259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:58:55.578 [DEBUG] [Thread-191259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:58:55.578 [DEBUG] [Thread-191259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:58:55.578 [DEBUG] [Thread-191259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:58:55.604 [INFO] [Thread-191259] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:58:55.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:58:56.236 [DEBUG] [Thread-191259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:58:56.236 [DEBUG] [Thread-191259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:58:56.237 [DEBUG] [Thread-191259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:58:56.277 [DEBUG] [Thread-191259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:58:56.278 [DEBUG] [Thread-191259] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:58:56.281 [DEBUG] [Thread-191259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:58:56.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:58:56.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:58:56.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:58:56.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:58:56.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:58:56.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:58:56.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:58:56.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:58:56.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:58:56.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.748726 -999.00  +11.80  31.04     56   +3.40 1 1 2 1 1   120    0 7.81 -33.86 ----- 27.4 31.0 163.2 38.2 12.3 -25.3 12.2 -24.5 12.1 -23.3 12.4 -24.5
2026-02-14T19:58:56.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:58:56.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:58:56.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.748726
2026-02-14T19:58:56.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:58:56.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:58:56.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:58:56.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:58:56.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:58:56.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:58:25', tmtdew=9.86, humidity=51.01, cloud=0.0, wind=33.49, temperature=12.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:58:09.926', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:58:56.308 [DEBUG] [Thread-191259] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:58:56.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-14T19:58:56.401 [DEBUG] [Thread-191262] [transport.py] [_log()] starting thread (client mode): 0xa2d6d120
2026-02-14T19:58:56.401 [DEBUG] [Thread-191262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:58:56.416 [DEBUG] [Thread-191262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:58:56.416 [INFO] [Thread-191262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:58:56.424 [DEBUG] [Thread-191262] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:58:56.424 [DEBUG] [Thread-191262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:58:56.424 [DEBUG] [Thread-191262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:58:56.424 [DEBUG] [Thread-191262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:58:56.424 [DEBUG] [Thread-191262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:58:56.424 [DEBUG] [Thread-191262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:58:56.424 [DEBUG] [Thread-191262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:58:56.425 [DEBUG] [Thread-191262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:58:56.425 [DEBUG] [Thread-191262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:58:56.425 [DEBUG] [Thread-191262] [transport.py] [_log()] client lang: <none>
2026-02-14T19:58:56.425 [DEBUG] [Thread-191262] [transport.py] [_log()] server lang: <none>
2026-02-14T19:58:56.425 [DEBUG] [Thread-191262] [transport.py] [_log()] kex follows: False
2026-02-14T19:58:56.425 [DEBUG] [Thread-191262] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:58:56.425 [DEBUG] [Thread-191262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:58:56.425 [DEBUG] [Thread-191262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:58:56.425 [DEBUG] [Thread-191262] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:58:56.426 [DEBUG] [Thread-191262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:58:56.426 [DEBUG] [Thread-191262] [transport.py] [_log()] Compression: none
2026-02-14T19:58:56.426 [DEBUG] [Thread-191262] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:58:56.487 [DEBUG] [Thread-191262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:58:56.487 [DEBUG] [Thread-191262] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:58:56.488 [DEBUG] [Thread-191262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:58:56.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:58:56.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:58:56.543 [DEBUG] [Thread-191262] [transport.py] [_log()] userauth is OK
2026-02-14T19:58:56.543 [DEBUG] [Thread-191262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:58:56.543 [DEBUG] [Thread-191262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:58:56.544 [DEBUG] [Thread-191262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:58:56.544 [DEBUG] [Thread-191262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:58:56.562 [INFO] [Thread-191262] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:58:56.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-14T19:58:56.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:58:57.364 [DEBUG] [Thread-191262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:58:57.365 [DEBUG] [Thread-191262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:58:57.412 [DEBUG] [Thread-191262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:58:57.413 [DEBUG] [Thread-191262] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:58:57.422 [DEBUG] [Thread-191262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:58:57.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:58:57.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-14T19:58:57.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T19:58:57.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:58:57.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:58:57.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:58:57.460 [DEBUG] [Thread-191262] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:58:59.192 [DEBUG] [Thread-191264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:59:09.670 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:59:09.671 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:59:14.232 [DEBUG] [Thread-191265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:59:17.314 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:59:27.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T19:59:27.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T19:59:27.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-14T19:59:29.271 [DEBUG] [Thread-191266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:59:29.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 59), 9.85, 51.03, 0.0, 29.08, 12.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T19:59:29.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:59:00
2026-02-14T19:59:29.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T19:59:29.872 [DEBUG] [Thread-191267] [transport.py] [_log()] starting thread (client mode): 0xa2d6c040
2026-02-14T19:59:29.872 [DEBUG] [Thread-191267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:59:29.891 [DEBUG] [Thread-191267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T19:59:29.892 [INFO] [Thread-191267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T19:59:29.894 [DEBUG] [Thread-191267] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:59:29.894 [DEBUG] [Thread-191267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T19:59:29.895 [DEBUG] [Thread-191267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:59:29.895 [DEBUG] [Thread-191267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:59:29.895 [DEBUG] [Thread-191267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:59:29.895 [DEBUG] [Thread-191267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:59:29.895 [DEBUG] [Thread-191267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:59:29.895 [DEBUG] [Thread-191267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:59:29.895 [DEBUG] [Thread-191267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:59:29.895 [DEBUG] [Thread-191267] [transport.py] [_log()] client lang: <none>
2026-02-14T19:59:29.895 [DEBUG] [Thread-191267] [transport.py] [_log()] server lang: <none>
2026-02-14T19:59:29.895 [DEBUG] [Thread-191267] [transport.py] [_log()] kex follows: False
2026-02-14T19:59:29.895 [DEBUG] [Thread-191267] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:59:29.895 [DEBUG] [Thread-191267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:59:29.895 [DEBUG] [Thread-191267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:59:29.895 [DEBUG] [Thread-191267] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:59:29.895 [DEBUG] [Thread-191267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:59:29.895 [DEBUG] [Thread-191267] [transport.py] [_log()] Compression: none
2026-02-14T19:59:29.895 [DEBUG] [Thread-191267] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:59:29.913 [DEBUG] [Thread-191267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:59:29.914 [DEBUG] [Thread-191267] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:59:29.914 [DEBUG] [Thread-191267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T19:59:29.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T19:59:29.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:59:29.916 [DEBUG] [Thread-191267] [transport.py] [_log()] userauth is OK
2026-02-14T19:59:29.917 [DEBUG] [Thread-191267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:59:29.917 [DEBUG] [Thread-191267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:59:29.917 [DEBUG] [Thread-191267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T19:59:29.917 [DEBUG] [Thread-191267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:59:29.938 [INFO] [Thread-191267] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:59:29.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:59:30.549 [DEBUG] [Thread-191267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:59:30.549 [DEBUG] [Thread-191267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:59:30.550 [DEBUG] [Thread-191267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T19:59:30.590 [DEBUG] [Thread-191267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:59:30.590 [DEBUG] [Thread-191267] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:59:30.592 [DEBUG] [Thread-191267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:59:30.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:59:30.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T19:59:30.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T19:59:30.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T19:59:30.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:59:30.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T19:59:30.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:59:30.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:59:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T19:59:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.749073 -999.00  +11.80  30.32     56   +3.40 1 1 2 1 1   110    0 7.72 -30.79 ----- 31.2 30.3 165.8 38.0 12.4 -25.5 12.2 -24.5 12.0 -23.4 12.4 -24.6
2026-02-14T19:59:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T19:59:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T19:59:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.749073
2026-02-14T19:59:30.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T19:59:30.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T19:59:30.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T19:59:30.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T19:59:30.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T19:59:30.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:59:00', tmtdew=9.85, humidity=51.03, cloud=0.0, wind=29.08, temperature=12.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:58:39.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T19:59:30.617 [DEBUG] [Thread-191267] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:59:30.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-14T19:59:30.712 [DEBUG] [Thread-191270] [transport.py] [_log()] starting thread (client mode): 0xa2d6e0e0
2026-02-14T19:59:30.712 [DEBUG] [Thread-191270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T19:59:30.727 [DEBUG] [Thread-191270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T19:59:30.727 [INFO] [Thread-191270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T19:59:30.734 [DEBUG] [Thread-191270] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T19:59:30.734 [DEBUG] [Thread-191270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T19:59:30.734 [DEBUG] [Thread-191270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T19:59:30.734 [DEBUG] [Thread-191270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:59:30.734 [DEBUG] [Thread-191270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T19:59:30.734 [DEBUG] [Thread-191270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:59:30.735 [DEBUG] [Thread-191270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T19:59:30.735 [DEBUG] [Thread-191270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T19:59:30.735 [DEBUG] [Thread-191270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T19:59:30.735 [DEBUG] [Thread-191270] [transport.py] [_log()] client lang: <none>
2026-02-14T19:59:30.735 [DEBUG] [Thread-191270] [transport.py] [_log()] server lang: <none>
2026-02-14T19:59:30.735 [DEBUG] [Thread-191270] [transport.py] [_log()] kex follows: False
2026-02-14T19:59:30.735 [DEBUG] [Thread-191270] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T19:59:30.735 [DEBUG] [Thread-191270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T19:59:30.735 [DEBUG] [Thread-191270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T19:59:30.735 [DEBUG] [Thread-191270] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T19:59:30.735 [DEBUG] [Thread-191270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T19:59:30.735 [DEBUG] [Thread-191270] [transport.py] [_log()] Compression: none
2026-02-14T19:59:30.735 [DEBUG] [Thread-191270] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T19:59:30.791 [DEBUG] [Thread-191270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T19:59:30.792 [DEBUG] [Thread-191270] [transport.py] [_log()] Switch to new keys ...
2026-02-14T19:59:30.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T19:59:30.793 [DEBUG] [Thread-191270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T19:59:30.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T19:59:30.848 [DEBUG] [Thread-191270] [transport.py] [_log()] userauth is OK
2026-02-14T19:59:30.848 [DEBUG] [Thread-191270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T19:59:30.849 [DEBUG] [Thread-191270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T19:59:30.849 [DEBUG] [Thread-191270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T19:59:30.849 [DEBUG] [Thread-191270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T19:59:30.869 [INFO] [Thread-191270] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T19:59:30.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-14T19:59:30.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T19:59:31.673 [DEBUG] [Thread-191270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T19:59:31.674 [DEBUG] [Thread-191270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T19:59:31.722 [DEBUG] [Thread-191270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T19:59:31.722 [DEBUG] [Thread-191270] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T19:59:31.730 [DEBUG] [Thread-191270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T19:59:31.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T19:59:31.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-14T19:59:31.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-14T19:59:31.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T19:59:31.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T19:59:31.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T19:59:31.761 [DEBUG] [Thread-191270] [transport.py] [_log()] EOF in transport thread
2026-02-14T19:59:40.699 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:59:40.790 [DEBUG] [Thread-191272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:59:44.310 [DEBUG] [Thread-191273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T19:59:59.369 [DEBUG] [Thread-191274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:00:01.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:00:01.783 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:00:01.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-14T20:00:03.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 19, 59, 36), 10.08, 50.12, 0.0, 35.42, 12.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:00:03.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 19:59:36
2026-02-14T20:00:04.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:00:04.214 [DEBUG] [Thread-191275] [transport.py] [_log()] starting thread (client mode): 0xa2d6e620
2026-02-14T20:00:04.214 [DEBUG] [Thread-191275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:00:04.226 [DEBUG] [Thread-191275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:00:04.226 [INFO] [Thread-191275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:00:04.227 [DEBUG] [Thread-191275] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:00:04.227 [DEBUG] [Thread-191275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:00:04.227 [DEBUG] [Thread-191275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:00:04.227 [DEBUG] [Thread-191275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:00:04.227 [DEBUG] [Thread-191275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:00:04.227 [DEBUG] [Thread-191275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:00:04.227 [DEBUG] [Thread-191275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:00:04.227 [DEBUG] [Thread-191275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:00:04.227 [DEBUG] [Thread-191275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:00:04.227 [DEBUG] [Thread-191275] [transport.py] [_log()] client lang: <none>
2026-02-14T20:00:04.227 [DEBUG] [Thread-191275] [transport.py] [_log()] server lang: <none>
2026-02-14T20:00:04.228 [DEBUG] [Thread-191275] [transport.py] [_log()] kex follows: False
2026-02-14T20:00:04.228 [DEBUG] [Thread-191275] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:00:04.228 [DEBUG] [Thread-191275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:00:04.228 [DEBUG] [Thread-191275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:00:04.228 [DEBUG] [Thread-191275] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:00:04.228 [DEBUG] [Thread-191275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:00:04.228 [DEBUG] [Thread-191275] [transport.py] [_log()] Compression: none
2026-02-14T20:00:04.228 [DEBUG] [Thread-191275] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:00:04.236 [DEBUG] [Thread-191275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:00:04.236 [DEBUG] [Thread-191275] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:00:04.237 [DEBUG] [Thread-191275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:00:04.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:00:04.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:00:04.238 [DEBUG] [Thread-191275] [transport.py] [_log()] userauth is OK
2026-02-14T20:00:04.238 [DEBUG] [Thread-191275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:00:04.238 [DEBUG] [Thread-191275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:00:04.238 [DEBUG] [Thread-191275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:00:04.239 [DEBUG] [Thread-191275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:00:04.257 [INFO] [Thread-191275] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:00:04.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:00:05.049 [DEBUG] [Thread-191275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:00:05.049 [DEBUG] [Thread-191275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:00:05.050 [DEBUG] [Thread-191275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:00:05.090 [DEBUG] [Thread-191275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:00:05.091 [DEBUG] [Thread-191275] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:00:05.093 [DEBUG] [Thread-191275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:00:05.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:00:05.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:00:05.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:00:05.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:00:05.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:00:05.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:00:05.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:00:05.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:00:05.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:00:05.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.749767 -999.00  +11.80  28.40     56   +3.40 1 1 1 1 1    92    0 7.72 -31.25 ----- 26.1 28.4 164.2 34.3 12.3 -25.4 12.2 -24.5 12.1 -23.3 12.4 -24.6
2026-02-14T20:00:05.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:00:05.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:00:05.118 [DEBUG] [Thread-191275] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:00:05.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.749767
2026-02-14T20:00:05.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:00:05.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:00:05.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:00:05.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:00:05.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:00:05.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T19:59:36', tmtdew=10.08, humidity=50.12, cloud=0.0, wind=35.42, temperature=12.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T17:59:39.869', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:00:05.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-14T20:00:05.214 [DEBUG] [Thread-191278] [transport.py] [_log()] starting thread (client mode): 0xa2d6c7f0
2026-02-14T20:00:05.214 [DEBUG] [Thread-191278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:00:05.229 [DEBUG] [Thread-191278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:00:05.229 [INFO] [Thread-191278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:00:05.236 [DEBUG] [Thread-191278] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:00:05.237 [DEBUG] [Thread-191278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:00:05.237 [DEBUG] [Thread-191278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:00:05.237 [DEBUG] [Thread-191278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:00:05.237 [DEBUG] [Thread-191278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:00:05.237 [DEBUG] [Thread-191278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:00:05.237 [DEBUG] [Thread-191278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:00:05.237 [DEBUG] [Thread-191278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:00:05.237 [DEBUG] [Thread-191278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:00:05.237 [DEBUG] [Thread-191278] [transport.py] [_log()] client lang: <none>
2026-02-14T20:00:05.237 [DEBUG] [Thread-191278] [transport.py] [_log()] server lang: <none>
2026-02-14T20:00:05.237 [DEBUG] [Thread-191278] [transport.py] [_log()] kex follows: False
2026-02-14T20:00:05.237 [DEBUG] [Thread-191278] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:00:05.237 [DEBUG] [Thread-191278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:00:05.237 [DEBUG] [Thread-191278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:00:05.237 [DEBUG] [Thread-191278] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:00:05.237 [DEBUG] [Thread-191278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:00:05.237 [DEBUG] [Thread-191278] [transport.py] [_log()] Compression: none
2026-02-14T20:00:05.237 [DEBUG] [Thread-191278] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:00:05.299 [DEBUG] [Thread-191278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:00:05.300 [DEBUG] [Thread-191278] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:00:05.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:00:05.301 [DEBUG] [Thread-191278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:00:05.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:00:05.355 [DEBUG] [Thread-191278] [transport.py] [_log()] userauth is OK
2026-02-14T20:00:05.356 [DEBUG] [Thread-191278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:00:05.356 [DEBUG] [Thread-191278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:00:05.356 [DEBUG] [Thread-191278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:00:05.356 [DEBUG] [Thread-191278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:00:05.375 [INFO] [Thread-191278] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:00:05.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-14T20:00:05.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:00:06.212 [DEBUG] [Thread-191278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:00:06.212 [DEBUG] [Thread-191278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:00:06.261 [DEBUG] [Thread-191278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:00:06.261 [DEBUG] [Thread-191278] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:00:06.270 [DEBUG] [Thread-191278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:00:06.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:00: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')
2026-02-14T20:00:06.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-14T20:00:06.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:00:06.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:00:06.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:00:06.305 [DEBUG] [Thread-191278] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:00:14.092 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:00:14.093 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:00:14.405 [DEBUG] [Thread-191280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:00:29.462 [DEBUG] [Thread-191281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:00:36.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:00:36.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:00:36.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-14T20:00:38.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 0, 12), 9.86, 51.01, 0.0, 34.18, 12.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:00:38.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:00:12
2026-02-14T20:00:39.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:00:39.393 [DEBUG] [Thread-191282] [transport.py] [_log()] starting thread (client mode): 0xa2d6ed70
2026-02-14T20:00:39.393 [DEBUG] [Thread-191282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:00:39.413 [DEBUG] [Thread-191282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:00:39.414 [INFO] [Thread-191282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:00:39.415 [DEBUG] [Thread-191282] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:00:39.415 [DEBUG] [Thread-191282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:00:39.415 [DEBUG] [Thread-191282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:00:39.415 [DEBUG] [Thread-191282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:00:39.415 [DEBUG] [Thread-191282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:00:39.415 [DEBUG] [Thread-191282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:00:39.416 [DEBUG] [Thread-191282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:00:39.416 [DEBUG] [Thread-191282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:00:39.416 [DEBUG] [Thread-191282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:00:39.416 [DEBUG] [Thread-191282] [transport.py] [_log()] client lang: <none>
2026-02-14T20:00:39.416 [DEBUG] [Thread-191282] [transport.py] [_log()] server lang: <none>
2026-02-14T20:00:39.416 [DEBUG] [Thread-191282] [transport.py] [_log()] kex follows: False
2026-02-14T20:00:39.416 [DEBUG] [Thread-191282] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:00:39.416 [DEBUG] [Thread-191282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:00:39.416 [DEBUG] [Thread-191282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:00:39.416 [DEBUG] [Thread-191282] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:00:39.416 [DEBUG] [Thread-191282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:00:39.416 [DEBUG] [Thread-191282] [transport.py] [_log()] Compression: none
2026-02-14T20:00:39.416 [DEBUG] [Thread-191282] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:00:39.431 [DEBUG] [Thread-191282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:00:39.432 [DEBUG] [Thread-191282] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:00:39.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:00:39.434 [DEBUG] [Thread-191282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:00:39.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:00:39.435 [DEBUG] [Thread-191282] [transport.py] [_log()] userauth is OK
2026-02-14T20:00:39.436 [DEBUG] [Thread-191282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:00:39.436 [DEBUG] [Thread-191282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:00:39.436 [DEBUG] [Thread-191282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:00:39.436 [DEBUG] [Thread-191282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:00:39.469 [INFO] [Thread-191282] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:00:39.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:00:40.016 [DEBUG] [Thread-191282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:00:40.016 [DEBUG] [Thread-191282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:00:40.016 [DEBUG] [Thread-191282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:00:40.057 [DEBUG] [Thread-191282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:00:40.057 [DEBUG] [Thread-191282] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:00:40.060 [DEBUG] [Thread-191282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:00:40.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:00:40.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:00:40.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:00:40.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:00:40.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:00:40.085 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:00:40.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:00:40.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:00:40.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:00:40.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.750114 -999.00  +11.80  30.80     56   +3.40 1 1 2 1 1    84    0 7.80 -28.68 ----- 26.4 30.8 169.6 34.9 12.3 -25.3 12.2 -24.4 12.1 -23.3 12.3 -24.7
2026-02-14T20:00:40.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:00:40.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:00:40.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.750114
2026-02-14T20:00:40.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:00:40.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:00:40.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:00:40.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:00:40.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:00:40.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:00:12', tmtdew=9.86, humidity=51.01, cloud=0.0, wind=34.18, temperature=12.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:00:09.850', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:00:40.089 [DEBUG] [Thread-191282] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:00:40.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-14T20:00:40.184 [DEBUG] [Thread-191285] [transport.py] [_log()] starting thread (client mode): 0xa57d6dd0
2026-02-14T20:00:40.184 [DEBUG] [Thread-191285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:00:40.199 [DEBUG] [Thread-191285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:00:40.199 [INFO] [Thread-191285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:00:40.207 [DEBUG] [Thread-191285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:00:40.208 [DEBUG] [Thread-191285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:00:40.208 [DEBUG] [Thread-191285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:00:40.208 [DEBUG] [Thread-191285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:00:40.208 [DEBUG] [Thread-191285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:00:40.208 [DEBUG] [Thread-191285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:00:40.208 [DEBUG] [Thread-191285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:00:40.208 [DEBUG] [Thread-191285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:00:40.208 [DEBUG] [Thread-191285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:00:40.209 [DEBUG] [Thread-191285] [transport.py] [_log()] client lang: <none>
2026-02-14T20:00:40.209 [DEBUG] [Thread-191285] [transport.py] [_log()] server lang: <none>
2026-02-14T20:00:40.209 [DEBUG] [Thread-191285] [transport.py] [_log()] kex follows: False
2026-02-14T20:00:40.209 [DEBUG] [Thread-191285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:00:40.209 [DEBUG] [Thread-191285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:00:40.209 [DEBUG] [Thread-191285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:00:40.209 [DEBUG] [Thread-191285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:00:40.209 [DEBUG] [Thread-191285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:00:40.210 [DEBUG] [Thread-191285] [transport.py] [_log()] Compression: none
2026-02-14T20:00:40.210 [DEBUG] [Thread-191285] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:00:40.270 [DEBUG] [Thread-191285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:00:40.271 [DEBUG] [Thread-191285] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:00:40.271 [DEBUG] [Thread-191285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:00:40.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:00:40.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:00:40.327 [DEBUG] [Thread-191285] [transport.py] [_log()] userauth is OK
2026-02-14T20:00:40.328 [DEBUG] [Thread-191285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:00:40.328 [DEBUG] [Thread-191285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:00:40.328 [DEBUG] [Thread-191285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:00:40.328 [DEBUG] [Thread-191285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:00:40.348 [INFO] [Thread-191285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:00:40.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T20:00:40.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:00:40.867 [DEBUG] [Thread-191287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:00:41.159 [DEBUG] [Thread-191285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:00:41.160 [DEBUG] [Thread-191285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:00:41.207 [DEBUG] [Thread-191285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:00:41.208 [DEBUG] [Thread-191285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:00:41.217 [DEBUG] [Thread-191285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:00:41.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:00:41.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-14T20:00:41.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:00:41.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:00:41.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:00:41.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:00:41.257 [DEBUG] [Thread-191285] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:00:44.501 [DEBUG] [Thread-191288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:00:59.558 [DEBUG] [Thread-191289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:01:11.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:01:11.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:01:11.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-14T20:01:13.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 0, 47), 9.77, 51.14, 0.0, 35.89, 11.98, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:01:13.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:00:47
2026-02-14T20:01:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:01:13.612 [DEBUG] [Thread-191290] [transport.py] [_log()] starting thread (client mode): 0xa2d6fe20
2026-02-14T20:01:13.612 [DEBUG] [Thread-191290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:01:13.631 [DEBUG] [Thread-191290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:01:13.632 [INFO] [Thread-191290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:01:13.633 [DEBUG] [Thread-191290] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:01:13.633 [DEBUG] [Thread-191290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:01:13.633 [DEBUG] [Thread-191290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:01:13.633 [DEBUG] [Thread-191290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:01:13.633 [DEBUG] [Thread-191290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:01:13.633 [DEBUG] [Thread-191290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:01:13.633 [DEBUG] [Thread-191290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:01:13.633 [DEBUG] [Thread-191290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:01:13.633 [DEBUG] [Thread-191290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:01:13.633 [DEBUG] [Thread-191290] [transport.py] [_log()] client lang: <none>
2026-02-14T20:01:13.633 [DEBUG] [Thread-191290] [transport.py] [_log()] server lang: <none>
2026-02-14T20:01:13.633 [DEBUG] [Thread-191290] [transport.py] [_log()] kex follows: False
2026-02-14T20:01:13.633 [DEBUG] [Thread-191290] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:01:13.633 [DEBUG] [Thread-191290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:01:13.633 [DEBUG] [Thread-191290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:01:13.633 [DEBUG] [Thread-191290] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:01:13.633 [DEBUG] [Thread-191290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:01:13.633 [DEBUG] [Thread-191290] [transport.py] [_log()] Compression: none
2026-02-14T20:01:13.633 [DEBUG] [Thread-191290] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:01:13.640 [DEBUG] [Thread-191290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:01:13.641 [DEBUG] [Thread-191290] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:01:13.641 [DEBUG] [Thread-191290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:01:13.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:01:13.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:01:13.642 [DEBUG] [Thread-191290] [transport.py] [_log()] userauth is OK
2026-02-14T20:01:13.642 [DEBUG] [Thread-191290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:01:13.642 [DEBUG] [Thread-191290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:01:13.642 [DEBUG] [Thread-191290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:01:13.642 [DEBUG] [Thread-191290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:01:13.653 [INFO] [Thread-191290] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:01:13.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:01:14.263 [DEBUG] [Thread-191290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:01:14.263 [DEBUG] [Thread-191290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:01:14.263 [DEBUG] [Thread-191290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:01:14.304 [DEBUG] [Thread-191290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:01:14.304 [DEBUG] [Thread-191290] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:01:14.308 [DEBUG] [Thread-191290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:01:14.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:01:14.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:01:14.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:01:14.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:01:14.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:01:14.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:01:14.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:01:14.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:01:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:01:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.750462 -999.00  +11.80  31.38     56   +3.40 1 1 2 1 1    77    0 7.65 -27.46 ----- 29.0 31.4 171.0 38.0 12.4 -25.3 12.2 -24.4 12.0 -23.3 12.4 -24.6
2026-02-14T20:01:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:01:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:01:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.750462
2026-02-14T20:01:14.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:01:14.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:01:14.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:01:14.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:01:14.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:01:14.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:00:47', tmtdew=9.77, humidity=51.14, cloud=0.0, wind=35.89, temperature=11.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:00:39.917', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:01:14.334 [DEBUG] [Thread-191290] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:01:14.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T20:01:14.442 [DEBUG] [Thread-191293] [transport.py] [_log()] starting thread (client mode): 0xa2d6cac0
2026-02-14T20:01:14.442 [DEBUG] [Thread-191293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:01:14.457 [DEBUG] [Thread-191293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:01:14.458 [INFO] [Thread-191293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:01:14.465 [DEBUG] [Thread-191293] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:01:14.465 [DEBUG] [Thread-191293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:01:14.465 [DEBUG] [Thread-191293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:01:14.465 [DEBUG] [Thread-191293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:01:14.465 [DEBUG] [Thread-191293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:01:14.465 [DEBUG] [Thread-191293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:01:14.465 [DEBUG] [Thread-191293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:01:14.465 [DEBUG] [Thread-191293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:01:14.465 [DEBUG] [Thread-191293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:01:14.466 [DEBUG] [Thread-191293] [transport.py] [_log()] client lang: <none>
2026-02-14T20:01:14.466 [DEBUG] [Thread-191293] [transport.py] [_log()] server lang: <none>
2026-02-14T20:01:14.466 [DEBUG] [Thread-191293] [transport.py] [_log()] kex follows: False
2026-02-14T20:01:14.466 [DEBUG] [Thread-191293] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:01:14.466 [DEBUG] [Thread-191293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:01:14.466 [DEBUG] [Thread-191293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:01:14.466 [DEBUG] [Thread-191293] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:01:14.466 [DEBUG] [Thread-191293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:01:14.466 [DEBUG] [Thread-191293] [transport.py] [_log()] Compression: none
2026-02-14T20:01:14.466 [DEBUG] [Thread-191293] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:01:14.523 [DEBUG] [Thread-191293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:01:14.524 [DEBUG] [Thread-191293] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:01:14.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:01:14.525 [DEBUG] [Thread-191293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:01:14.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:01:14.579 [DEBUG] [Thread-191293] [transport.py] [_log()] userauth is OK
2026-02-14T20:01:14.579 [DEBUG] [Thread-191293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:01:14.579 [DEBUG] [Thread-191293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:01:14.579 [DEBUG] [Thread-191293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:01:14.580 [DEBUG] [Thread-191293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:01:14.594 [DEBUG] [Thread-191295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:01:14.598 [INFO] [Thread-191293] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:01:14.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-14T20:01:14.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:01:15.438 [DEBUG] [Thread-191293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:01:15.438 [DEBUG] [Thread-191293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:01:15.486 [DEBUG] [Thread-191293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:01:15.486 [DEBUG] [Thread-191293] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:01:15.494 [DEBUG] [Thread-191293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:01:15.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:01:15.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:01:15.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:01:15.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:01:15.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:01:15.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:01:15.527 [DEBUG] [Thread-191293] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:01:19.157 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:01:19.158 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:01:29.657 [DEBUG] [Thread-191296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:01:40.923 [DEBUG] [Thread-191297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:01:44.694 [DEBUG] [Thread-191298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:01:45.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:01:45.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:01:45.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-14T20:01:47.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 1, 22), 9.77, 51.14, 0.0, 35.57, 11.96, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:01:47.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:01:22
2026-02-14T20:01:48.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:01:48.253 [DEBUG] [Thread-191299] [transport.py] [_log()] starting thread (client mode): 0xa57d54e0
2026-02-14T20:01:48.254 [DEBUG] [Thread-191299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:01:48.274 [DEBUG] [Thread-191299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:01:48.274 [INFO] [Thread-191299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:01:48.277 [DEBUG] [Thread-191299] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:01:48.278 [DEBUG] [Thread-191299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:01:48.278 [DEBUG] [Thread-191299] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:01:48.278 [DEBUG] [Thread-191299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:01:48.278 [DEBUG] [Thread-191299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:01:48.278 [DEBUG] [Thread-191299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:01:48.278 [DEBUG] [Thread-191299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:01:48.278 [DEBUG] [Thread-191299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:01:48.278 [DEBUG] [Thread-191299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:01:48.278 [DEBUG] [Thread-191299] [transport.py] [_log()] client lang: <none>
2026-02-14T20:01:48.278 [DEBUG] [Thread-191299] [transport.py] [_log()] server lang: <none>
2026-02-14T20:01:48.278 [DEBUG] [Thread-191299] [transport.py] [_log()] kex follows: False
2026-02-14T20:01:48.278 [DEBUG] [Thread-191299] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:01:48.278 [DEBUG] [Thread-191299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:01:48.278 [DEBUG] [Thread-191299] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:01:48.278 [DEBUG] [Thread-191299] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:01:48.279 [DEBUG] [Thread-191299] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:01:48.279 [DEBUG] [Thread-191299] [transport.py] [_log()] Compression: none
2026-02-14T20:01:48.279 [DEBUG] [Thread-191299] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:01:48.297 [DEBUG] [Thread-191299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:01:48.297 [DEBUG] [Thread-191299] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:01:48.298 [DEBUG] [Thread-191299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:01:48.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:01:48.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:01:48.300 [DEBUG] [Thread-191299] [transport.py] [_log()] userauth is OK
2026-02-14T20:01:48.301 [DEBUG] [Thread-191299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:01:48.301 [DEBUG] [Thread-191299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:01:48.301 [DEBUG] [Thread-191299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:01:48.301 [DEBUG] [Thread-191299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:01:48.325 [INFO] [Thread-191299] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:01:48.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:01:48.970 [DEBUG] [Thread-191299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:01:48.970 [DEBUG] [Thread-191299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:01:48.971 [DEBUG] [Thread-191299] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:01:49.011 [DEBUG] [Thread-191299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:01:49.011 [DEBUG] [Thread-191299] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:01:49.015 [DEBUG] [Thread-191299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:01:49.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:01:49.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:01:49.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:01:49.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:01:49.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:01:49.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:01:49.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:01:49.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:01:49.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:01:49.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.751156 -999.00  +11.80  26.35     56   +3.40 1 1 1 1 1    64    0 7.85 -27.02 ----- 32.2 26.4 150.6 40.9 12.3 -25.3 12.2 -24.3 12.0 -23.3 12.3 -24.6
2026-02-14T20:01:49.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:01:49.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:01:49.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.751156
2026-02-14T20:01:49.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:01:49.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:01:49.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:01:49.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:01:49.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:01:49.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:01:22', tmtdew=9.77, humidity=51.14, cloud=0.0, wind=35.57, temperature=11.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:01:39.878', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:01:49.041 [DEBUG] [Thread-191299] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:01:49.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-14T20:01:49.139 [DEBUG] [Thread-191302] [transport.py] [_log()] starting thread (client mode): 0xa57c0100
2026-02-14T20:01:49.139 [DEBUG] [Thread-191302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:01:49.154 [DEBUG] [Thread-191302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:01:49.154 [INFO] [Thread-191302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:01:49.161 [DEBUG] [Thread-191302] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:01:49.161 [DEBUG] [Thread-191302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:01:49.161 [DEBUG] [Thread-191302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:01:49.161 [DEBUG] [Thread-191302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:01:49.161 [DEBUG] [Thread-191302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:01:49.161 [DEBUG] [Thread-191302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:01:49.162 [DEBUG] [Thread-191302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:01:49.162 [DEBUG] [Thread-191302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:01:49.162 [DEBUG] [Thread-191302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:01:49.162 [DEBUG] [Thread-191302] [transport.py] [_log()] client lang: <none>
2026-02-14T20:01:49.162 [DEBUG] [Thread-191302] [transport.py] [_log()] server lang: <none>
2026-02-14T20:01:49.162 [DEBUG] [Thread-191302] [transport.py] [_log()] kex follows: False
2026-02-14T20:01:49.162 [DEBUG] [Thread-191302] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:01:49.162 [DEBUG] [Thread-191302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:01:49.162 [DEBUG] [Thread-191302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:01:49.162 [DEBUG] [Thread-191302] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:01:49.162 [DEBUG] [Thread-191302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:01:49.162 [DEBUG] [Thread-191302] [transport.py] [_log()] Compression: none
2026-02-14T20:01:49.162 [DEBUG] [Thread-191302] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:01:49.222 [DEBUG] [Thread-191302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:01:49.222 [DEBUG] [Thread-191302] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:01:49.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:01:49.224 [DEBUG] [Thread-191302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:01:49.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:01:49.279 [DEBUG] [Thread-191302] [transport.py] [_log()] userauth is OK
2026-02-14T20:01:49.280 [DEBUG] [Thread-191302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:01:49.280 [DEBUG] [Thread-191302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:01:49.280 [DEBUG] [Thread-191302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:01:49.280 [DEBUG] [Thread-191302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:01:49.299 [INFO] [Thread-191302] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:01:49.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-14T20:01:49.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:01:50.120 [DEBUG] [Thread-191302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:01:50.120 [DEBUG] [Thread-191302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:01:50.168 [DEBUG] [Thread-191302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:01:50.168 [DEBUG] [Thread-191302] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:01:50.178 [DEBUG] [Thread-191302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:01:50.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:01:50.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-14T20:01: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-14T20:01:50.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:01:50.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:01:50.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:01:50.215 [DEBUG] [Thread-191302] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:01:59.731 [DEBUG] [Thread-191304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:02:14.784 [DEBUG] [Thread-191305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:02:20.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:02:20.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:02:20.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-14T20:02:22.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 1, 58), 9.81, 51.18, 0.0, 34.67, 11.96, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:02:22.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:01:58
2026-02-14T20:02:22.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:02:22.768 [DEBUG] [Thread-191306] [transport.py] [_log()] starting thread (client mode): 0xa57c38e0
2026-02-14T20:02:22.768 [DEBUG] [Thread-191306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:02:22.786 [DEBUG] [Thread-191306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:02:22.786 [INFO] [Thread-191306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:02:22.788 [DEBUG] [Thread-191306] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:02:22.788 [DEBUG] [Thread-191306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:02:22.788 [DEBUG] [Thread-191306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:02:22.788 [DEBUG] [Thread-191306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:02:22.788 [DEBUG] [Thread-191306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:02:22.788 [DEBUG] [Thread-191306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:02:22.788 [DEBUG] [Thread-191306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:02:22.788 [DEBUG] [Thread-191306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:02:22.788 [DEBUG] [Thread-191306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:02:22.788 [DEBUG] [Thread-191306] [transport.py] [_log()] client lang: <none>
2026-02-14T20:02:22.788 [DEBUG] [Thread-191306] [transport.py] [_log()] server lang: <none>
2026-02-14T20:02:22.788 [DEBUG] [Thread-191306] [transport.py] [_log()] kex follows: False
2026-02-14T20:02:22.788 [DEBUG] [Thread-191306] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:02:22.788 [DEBUG] [Thread-191306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:02:22.788 [DEBUG] [Thread-191306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:02:22.788 [DEBUG] [Thread-191306] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:02:22.788 [DEBUG] [Thread-191306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:02:22.788 [DEBUG] [Thread-191306] [transport.py] [_log()] Compression: none
2026-02-14T20:02:22.789 [DEBUG] [Thread-191306] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:02:22.795 [DEBUG] [Thread-191306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:02:22.795 [DEBUG] [Thread-191306] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:02:22.795 [DEBUG] [Thread-191306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:02:22.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:02:22.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:02:22.796 [DEBUG] [Thread-191306] [transport.py] [_log()] userauth is OK
2026-02-14T20:02:22.796 [DEBUG] [Thread-191306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:02:22.796 [DEBUG] [Thread-191306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:02:22.796 [DEBUG] [Thread-191306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:02:22.796 [DEBUG] [Thread-191306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:02:22.811 [INFO] [Thread-191306] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:02:22.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:02:23.196 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:02:23.197 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:02:23.454 [DEBUG] [Thread-191306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:02:23.454 [DEBUG] [Thread-191306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:02:23.454 [DEBUG] [Thread-191306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:02:23.495 [DEBUG] [Thread-191306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:02:23.495 [DEBUG] [Thread-191306] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:02:23.498 [DEBUG] [Thread-191306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:02:23.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:02:23.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:02:23.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:02:23.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:02:23.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:02:23.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:02:23.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:02:23.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:02:23.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:02:23.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.751503 -999.00  +11.80  27.33     56   +3.40 1 1 1 1 1    58    0 7.93 -27.53 ----- 34.6 27.3 164.0 36.8 12.3 -25.4 12.2 -24.6 11.9 -23.3 12.3 -24.6
2026-02-14T20:02:23.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:02:23.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:02:23.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.751503
2026-02-14T20:02:23.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:02:23.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:02:23.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:02:23.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:02:23.521 [DEBUG] [Thread-191306] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:02:23.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:02:23.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:01:58', tmtdew=9.81, humidity=51.18, cloud=0.0, wind=34.67, temperature=11.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:02:09.859', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:02:23.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-14T20:02:23.617 [DEBUG] [Thread-191309] [transport.py] [_log()] starting thread (client mode): 0xa57c03d0
2026-02-14T20:02:23.617 [DEBUG] [Thread-191309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:02:23.631 [DEBUG] [Thread-191309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:02:23.631 [INFO] [Thread-191309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:02:23.638 [DEBUG] [Thread-191309] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:02:23.638 [DEBUG] [Thread-191309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:02:23.639 [DEBUG] [Thread-191309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:02:23.639 [DEBUG] [Thread-191309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:02:23.639 [DEBUG] [Thread-191309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:02:23.639 [DEBUG] [Thread-191309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:02:23.639 [DEBUG] [Thread-191309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:02:23.639 [DEBUG] [Thread-191309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:02:23.639 [DEBUG] [Thread-191309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:02:23.639 [DEBUG] [Thread-191309] [transport.py] [_log()] client lang: <none>
2026-02-14T20:02:23.639 [DEBUG] [Thread-191309] [transport.py] [_log()] server lang: <none>
2026-02-14T20:02:23.639 [DEBUG] [Thread-191309] [transport.py] [_log()] kex follows: False
2026-02-14T20:02:23.639 [DEBUG] [Thread-191309] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:02:23.639 [DEBUG] [Thread-191309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:02:23.639 [DEBUG] [Thread-191309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:02:23.639 [DEBUG] [Thread-191309] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:02:23.639 [DEBUG] [Thread-191309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:02:23.639 [DEBUG] [Thread-191309] [transport.py] [_log()] Compression: none
2026-02-14T20:02:23.639 [DEBUG] [Thread-191309] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:02:23.698 [DEBUG] [Thread-191309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:02:23.699 [DEBUG] [Thread-191309] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:02:23.699 [DEBUG] [Thread-191309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:02:23.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:02:23.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:02:23.755 [DEBUG] [Thread-191309] [transport.py] [_log()] userauth is OK
2026-02-14T20:02:23.755 [DEBUG] [Thread-191309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:02:23.755 [DEBUG] [Thread-191309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:02:23.755 [DEBUG] [Thread-191309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:02:23.755 [DEBUG] [Thread-191309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:02:23.775 [INFO] [Thread-191309] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:02:23.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-14T20:02:23.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:02:24.609 [DEBUG] [Thread-191309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:02:24.609 [DEBUG] [Thread-191309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:02:24.657 [DEBUG] [Thread-191309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:02:24.657 [DEBUG] [Thread-191309] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:02:24.666 [DEBUG] [Thread-191309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:02:24.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:02:24.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:02:24.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:02:24.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:02:24.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:02:24.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:02:24.700 [DEBUG] [Thread-191309] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:02:29.821 [DEBUG] [Thread-191311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:02:40.991 [DEBUG] [Thread-191312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:02:44.874 [DEBUG] [Thread-191313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:02:54.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:02:54.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:02:54.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-14T20:02:56.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 2, 34), 9.99, 50.42, 0.0, 35.6, 12.19, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:02:56.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:02:34
2026-02-14T20:02:57.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:02:57.215 [DEBUG] [Thread-191314] [transport.py] [_log()] starting thread (client mode): 0xa2d785e0
2026-02-14T20:02:57.216 [DEBUG] [Thread-191314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:02:57.235 [DEBUG] [Thread-191314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:02:57.235 [INFO] [Thread-191314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:02:57.238 [DEBUG] [Thread-191314] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:02:57.239 [DEBUG] [Thread-191314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:02:57.239 [DEBUG] [Thread-191314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:02:57.239 [DEBUG] [Thread-191314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:02:57.239 [DEBUG] [Thread-191314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:02:57.239 [DEBUG] [Thread-191314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:02:57.239 [DEBUG] [Thread-191314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:02:57.239 [DEBUG] [Thread-191314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:02:57.239 [DEBUG] [Thread-191314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:02:57.239 [DEBUG] [Thread-191314] [transport.py] [_log()] client lang: <none>
2026-02-14T20:02:57.240 [DEBUG] [Thread-191314] [transport.py] [_log()] server lang: <none>
2026-02-14T20:02:57.240 [DEBUG] [Thread-191314] [transport.py] [_log()] kex follows: False
2026-02-14T20:02:57.240 [DEBUG] [Thread-191314] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:02:57.240 [DEBUG] [Thread-191314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:02:57.240 [DEBUG] [Thread-191314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:02:57.240 [DEBUG] [Thread-191314] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:02:57.240 [DEBUG] [Thread-191314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:02:57.240 [DEBUG] [Thread-191314] [transport.py] [_log()] Compression: none
2026-02-14T20:02:57.240 [DEBUG] [Thread-191314] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:02:57.258 [DEBUG] [Thread-191314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:02:57.258 [DEBUG] [Thread-191314] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:02:57.259 [DEBUG] [Thread-191314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:02:57.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:02:57.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:02:57.301 [DEBUG] [Thread-191314] [transport.py] [_log()] userauth is OK
2026-02-14T20:02:57.302 [DEBUG] [Thread-191314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:02:57.302 [DEBUG] [Thread-191314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:02:57.302 [DEBUG] [Thread-191314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:02:57.302 [DEBUG] [Thread-191314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:02:57.328 [INFO] [Thread-191314] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:02:57.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:02:57.925 [DEBUG] [Thread-191314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:02:57.926 [DEBUG] [Thread-191314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:02:57.926 [DEBUG] [Thread-191314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:02:57.966 [DEBUG] [Thread-191314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:02:57.967 [DEBUG] [Thread-191314] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:02:57.970 [DEBUG] [Thread-191314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:02:57.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:02:57.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:02:57.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:02:57.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:02:57.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:02:57.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:02:57.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:02:57.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:02:57.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:02:57.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.751851 -999.00  +11.70  32.46     56   +3.40 1 1 2 1 1    53    0 7.95 -27.58 ----- 30.9 32.5 169.8 41.2 12.3 -25.4 12.2 -24.6 11.9 -23.4 12.3 -24.7
2026-02-14T20:02:57.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:02:57.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:02:57.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.751851
2026-02-14T20:02:57.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:02:57.997 [DEBUG] [Thread-191314] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:02:57.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:02:57.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:02:57.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:02:57.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:02:57.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:02:34', tmtdew=9.99, humidity=50.42, cloud=0.0, wind=35.6, temperature=12.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:02:39.926', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:02:58.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-14T20:02:58.100 [DEBUG] [Thread-191317] [transport.py] [_log()] starting thread (client mode): 0xa2d78cd0
2026-02-14T20:02:58.100 [DEBUG] [Thread-191317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:02:58.114 [DEBUG] [Thread-191317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:02:58.115 [INFO] [Thread-191317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:02:58.122 [DEBUG] [Thread-191317] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:02:58.122 [DEBUG] [Thread-191317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:02:58.122 [DEBUG] [Thread-191317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:02:58.122 [DEBUG] [Thread-191317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:02:58.122 [DEBUG] [Thread-191317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:02:58.122 [DEBUG] [Thread-191317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:02:58.122 [DEBUG] [Thread-191317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:02:58.122 [DEBUG] [Thread-191317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:02:58.122 [DEBUG] [Thread-191317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:02:58.123 [DEBUG] [Thread-191317] [transport.py] [_log()] client lang: <none>
2026-02-14T20:02:58.123 [DEBUG] [Thread-191317] [transport.py] [_log()] server lang: <none>
2026-02-14T20:02:58.123 [DEBUG] [Thread-191317] [transport.py] [_log()] kex follows: False
2026-02-14T20:02:58.123 [DEBUG] [Thread-191317] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:02:58.123 [DEBUG] [Thread-191317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:02:58.123 [DEBUG] [Thread-191317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:02:58.123 [DEBUG] [Thread-191317] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:02:58.123 [DEBUG] [Thread-191317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:02:58.123 [DEBUG] [Thread-191317] [transport.py] [_log()] Compression: none
2026-02-14T20:02:58.123 [DEBUG] [Thread-191317] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:02:58.178 [DEBUG] [Thread-191317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:02:58.179 [DEBUG] [Thread-191317] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:02:58.179 [DEBUG] [Thread-191317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:02:58.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:02:58.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:02:58.239 [DEBUG] [Thread-191317] [transport.py] [_log()] userauth is OK
2026-02-14T20:02:58.239 [DEBUG] [Thread-191317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:02:58.239 [DEBUG] [Thread-191317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:02:58.239 [DEBUG] [Thread-191317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:02:58.239 [DEBUG] [Thread-191317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:02:58.258 [INFO] [Thread-191317] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:02:58.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-14T20:02:58.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:02:59.098 [DEBUG] [Thread-191317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:02:59.098 [DEBUG] [Thread-191317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:02:59.146 [DEBUG] [Thread-191317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:02:59.146 [DEBUG] [Thread-191317] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:02:59.154 [DEBUG] [Thread-191317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:02:59.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:02:59.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-14T20:02:59.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-14T20:02:59.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:02:59.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:02:59.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:02:59.187 [DEBUG] [Thread-191317] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:02:59.908 [DEBUG] [Thread-191319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:03:14.955 [DEBUG] [Thread-191320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:03:28.041 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:03:28.042 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:03:29.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:03:29.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:03:29.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:03:29.993 [DEBUG] [Thread-191321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:03:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 3, 9), 9.8, 51.19, 0.0, 32.64, 11.91, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:03:31.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:03:09
2026-02-14T20:03:31.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:03:31.635 [DEBUG] [Thread-191322] [transport.py] [_log()] starting thread (client mode): 0xa2d6e350
2026-02-14T20:03:31.635 [DEBUG] [Thread-191322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:03:31.655 [DEBUG] [Thread-191322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:03:31.655 [INFO] [Thread-191322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:03:31.658 [DEBUG] [Thread-191322] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:03:31.658 [DEBUG] [Thread-191322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:03:31.658 [DEBUG] [Thread-191322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:03:31.658 [DEBUG] [Thread-191322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:03:31.659 [DEBUG] [Thread-191322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:03:31.659 [DEBUG] [Thread-191322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:03:31.659 [DEBUG] [Thread-191322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:03:31.659 [DEBUG] [Thread-191322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:03:31.659 [DEBUG] [Thread-191322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:03:31.659 [DEBUG] [Thread-191322] [transport.py] [_log()] client lang: <none>
2026-02-14T20:03:31.659 [DEBUG] [Thread-191322] [transport.py] [_log()] server lang: <none>
2026-02-14T20:03:31.659 [DEBUG] [Thread-191322] [transport.py] [_log()] kex follows: False
2026-02-14T20:03:31.659 [DEBUG] [Thread-191322] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:03:31.659 [DEBUG] [Thread-191322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:03:31.659 [DEBUG] [Thread-191322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:03:31.659 [DEBUG] [Thread-191322] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:03:31.659 [DEBUG] [Thread-191322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:03:31.659 [DEBUG] [Thread-191322] [transport.py] [_log()] Compression: none
2026-02-14T20:03:31.659 [DEBUG] [Thread-191322] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:03:31.675 [DEBUG] [Thread-191322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:03:31.675 [DEBUG] [Thread-191322] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:03:31.675 [DEBUG] [Thread-191322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:03:31.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:03:31.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:03:31.676 [DEBUG] [Thread-191322] [transport.py] [_log()] userauth is OK
2026-02-14T20:03:31.676 [DEBUG] [Thread-191322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:03:31.676 [DEBUG] [Thread-191322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:03:31.676 [DEBUG] [Thread-191322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:03:31.676 [DEBUG] [Thread-191322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:03:31.685 [INFO] [Thread-191322] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:03:31.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:03:32.246 [DEBUG] [Thread-191322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:03:32.247 [DEBUG] [Thread-191322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:03:32.247 [DEBUG] [Thread-191322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:03:32.287 [DEBUG] [Thread-191322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:03:32.288 [DEBUG] [Thread-191322] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:03:32.291 [DEBUG] [Thread-191322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:03:32.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:03:32.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:03:32.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:03:32.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:03:32.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:03:32.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:03:32.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:03:32.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:03:32.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:03:32.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.752198 -999.00  +11.70  28.42     56   +3.40 1 1 1 1 1    48    0 7.85 -25.78 ----- 28.0 28.4 164.8 37.7 12.3 -25.5 12.2 -24.6 11.9 -23.4 12.3 -24.6
2026-02-14T20:03:32.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:03:32.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:03:32.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.752198
2026-02-14T20:03:32.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:03:32.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:03:32.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:03:32.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:03:32.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:03:32.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:03:09', tmtdew=9.8, humidity=51.19, cloud=0.0, wind=32.64, temperature=11.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:03:09.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:03:32.320 [DEBUG] [Thread-191322] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:03:32.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-14T20:03:32.415 [DEBUG] [Thread-191325] [transport.py] [_log()] starting thread (client mode): 0xa57d6080
2026-02-14T20:03:32.415 [DEBUG] [Thread-191325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:03:32.430 [DEBUG] [Thread-191325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:03:32.430 [INFO] [Thread-191325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:03:32.437 [DEBUG] [Thread-191325] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:03:32.437 [DEBUG] [Thread-191325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:03:32.438 [DEBUG] [Thread-191325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:03:32.438 [DEBUG] [Thread-191325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:03:32.438 [DEBUG] [Thread-191325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:03:32.438 [DEBUG] [Thread-191325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:03:32.438 [DEBUG] [Thread-191325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:03:32.438 [DEBUG] [Thread-191325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:03:32.438 [DEBUG] [Thread-191325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:03:32.438 [DEBUG] [Thread-191325] [transport.py] [_log()] client lang: <none>
2026-02-14T20:03:32.438 [DEBUG] [Thread-191325] [transport.py] [_log()] server lang: <none>
2026-02-14T20:03:32.438 [DEBUG] [Thread-191325] [transport.py] [_log()] kex follows: False
2026-02-14T20:03:32.438 [DEBUG] [Thread-191325] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:03:32.438 [DEBUG] [Thread-191325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:03:32.438 [DEBUG] [Thread-191325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:03:32.438 [DEBUG] [Thread-191325] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:03:32.438 [DEBUG] [Thread-191325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:03:32.438 [DEBUG] [Thread-191325] [transport.py] [_log()] Compression: none
2026-02-14T20:03:32.438 [DEBUG] [Thread-191325] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:03:32.494 [DEBUG] [Thread-191325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:03:32.495 [DEBUG] [Thread-191325] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:03:32.495 [DEBUG] [Thread-191325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:03:32.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:03:32.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:03:32.551 [DEBUG] [Thread-191325] [transport.py] [_log()] userauth is OK
2026-02-14T20:03:32.551 [DEBUG] [Thread-191325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:03:32.551 [DEBUG] [Thread-191325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:03:32.551 [DEBUG] [Thread-191325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:03:32.551 [DEBUG] [Thread-191325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:03:32.571 [INFO] [Thread-191325] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:03:32.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-14T20:03:32.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:03:33.387 [DEBUG] [Thread-191325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:03:33.387 [DEBUG] [Thread-191325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:03:33.435 [DEBUG] [Thread-191325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:03:33.435 [DEBUG] [Thread-191325] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:03:33.444 [DEBUG] [Thread-191325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:03:33.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:03:33.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-14T20:03:33.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:03:33.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:03:33.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:03:33.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:03:33.480 [DEBUG] [Thread-191325] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:03:41.060 [DEBUG] [Thread-191327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:03:45.029 [DEBUG] [Thread-191328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:03:49.862 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:03:56.005 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:04:00.089 [DEBUG] [Thread-191329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:04:03.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:04:03.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:04:03.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-14T20:04:05.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 3, 44), 9.76, 51.16, 0.0, 35.94, 11.86, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:04:05.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:03:44
2026-02-14T20:04:05.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:04:05.912 [DEBUG] [Thread-191330] [transport.py] [_log()] starting thread (client mode): 0xa57d6b00
2026-02-14T20:04:05.912 [DEBUG] [Thread-191330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:04:05.932 [DEBUG] [Thread-191330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:04:05.932 [INFO] [Thread-191330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:04:05.935 [DEBUG] [Thread-191330] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:04:05.935 [DEBUG] [Thread-191330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:04:05.935 [DEBUG] [Thread-191330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:04:05.935 [DEBUG] [Thread-191330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:04:05.935 [DEBUG] [Thread-191330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:04:05.935 [DEBUG] [Thread-191330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:04:05.935 [DEBUG] [Thread-191330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:04:05.936 [DEBUG] [Thread-191330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:04:05.936 [DEBUG] [Thread-191330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:04:05.936 [DEBUG] [Thread-191330] [transport.py] [_log()] client lang: <none>
2026-02-14T20:04:05.936 [DEBUG] [Thread-191330] [transport.py] [_log()] server lang: <none>
2026-02-14T20:04:05.936 [DEBUG] [Thread-191330] [transport.py] [_log()] kex follows: False
2026-02-14T20:04:05.936 [DEBUG] [Thread-191330] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:04:05.936 [DEBUG] [Thread-191330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:04:05.936 [DEBUG] [Thread-191330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:04:05.936 [DEBUG] [Thread-191330] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:04:05.936 [DEBUG] [Thread-191330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:04:05.936 [DEBUG] [Thread-191330] [transport.py] [_log()] Compression: none
2026-02-14T20:04:05.936 [DEBUG] [Thread-191330] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:04:05.952 [DEBUG] [Thread-191330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:04:05.953 [DEBUG] [Thread-191330] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:04:05.953 [DEBUG] [Thread-191330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:04:05.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:04:05.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:04:05.956 [DEBUG] [Thread-191330] [transport.py] [_log()] userauth is OK
2026-02-14T20:04:05.956 [DEBUG] [Thread-191330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:04:05.956 [DEBUG] [Thread-191330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:04:05.956 [DEBUG] [Thread-191330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:04:05.956 [DEBUG] [Thread-191330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:04:05.993 [INFO] [Thread-191330] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:04:05.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:04:06.444 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:04:06.631 [DEBUG] [Thread-191330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:04:06.631 [DEBUG] [Thread-191330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:04:06.631 [DEBUG] [Thread-191330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:04:06.673 [DEBUG] [Thread-191330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:04:06.673 [DEBUG] [Thread-191330] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:04:06.676 [DEBUG] [Thread-191330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:04:06.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:04:06.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:04:06.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:04:06.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:04:06.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:04:06.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:04:06.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:04:06.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:04:06.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:04:06.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.752545 -999.00  +11.70  28.74     56   +3.40 1 1 1 1 1    44    0 7.97 -26.76 ----- 29.1 28.7 158.8 37.3 12.3 -25.5 12.1 -24.5 11.9 -23.5 12.3 -24.5
2026-02-14T20:04:06.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:04:06.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:04:06.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.752545
2026-02-14T20:04:06.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:04:06.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:04:06.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:04:06.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:04:06.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:04:06.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:03:44', tmtdew=9.76, humidity=51.16, cloud=0.0, wind=35.94, temperature=11.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:03:39.888', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:04:06.700 [DEBUG] [Thread-191330] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:04:06.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T20:04:06.796 [DEBUG] [Thread-191333] [transport.py] [_log()] starting thread (client mode): 0xa57d66e0
2026-02-14T20:04:06.796 [DEBUG] [Thread-191333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:04:06.812 [DEBUG] [Thread-191333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:04:06.813 [INFO] [Thread-191333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:04:06.820 [DEBUG] [Thread-191333] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:04:06.820 [DEBUG] [Thread-191333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:04:06.821 [DEBUG] [Thread-191333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:04:06.821 [DEBUG] [Thread-191333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:04:06.821 [DEBUG] [Thread-191333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:04:06.821 [DEBUG] [Thread-191333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:04:06.821 [DEBUG] [Thread-191333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:04:06.821 [DEBUG] [Thread-191333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:04:06.821 [DEBUG] [Thread-191333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:04:06.821 [DEBUG] [Thread-191333] [transport.py] [_log()] client lang: <none>
2026-02-14T20:04:06.821 [DEBUG] [Thread-191333] [transport.py] [_log()] server lang: <none>
2026-02-14T20:04:06.822 [DEBUG] [Thread-191333] [transport.py] [_log()] kex follows: False
2026-02-14T20:04:06.822 [DEBUG] [Thread-191333] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:04:06.822 [DEBUG] [Thread-191333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:04:06.822 [DEBUG] [Thread-191333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:04:06.822 [DEBUG] [Thread-191333] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:04:06.822 [DEBUG] [Thread-191333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:04:06.822 [DEBUG] [Thread-191333] [transport.py] [_log()] Compression: none
2026-02-14T20:04:06.823 [DEBUG] [Thread-191333] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:04:06.884 [DEBUG] [Thread-191333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:04:06.884 [DEBUG] [Thread-191333] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:04:06.885 [DEBUG] [Thread-191333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:04:06.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:04:06.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:04:06.943 [DEBUG] [Thread-191333] [transport.py] [_log()] userauth is OK
2026-02-14T20:04:06.944 [DEBUG] [Thread-191333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:04:06.944 [DEBUG] [Thread-191333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:04:06.944 [DEBUG] [Thread-191333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:04:06.944 [DEBUG] [Thread-191333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:04:06.963 [INFO] [Thread-191333] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:04:06.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-14T20:04:06.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:04:07.816 [DEBUG] [Thread-191333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:04:07.816 [DEBUG] [Thread-191333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:04:07.864 [DEBUG] [Thread-191333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:04:07.865 [DEBUG] [Thread-191333] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:04:07.874 [DEBUG] [Thread-191333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:04:07.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:04:07.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-14T20:04:07.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-14T20:04:07.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:04:07.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:04:07.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:04:07.911 [DEBUG] [Thread-191333] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:04:15.126 [DEBUG] [Thread-191335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:04:15.837 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:04:26.477 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:04:30.187 [DEBUG] [Thread-191336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:04:32.344 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:04:32.345 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:04:32.658 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:04:37.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:04:37.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:04:37.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:04:40.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 4, 20), 9.73, 51.24, 0.0, 37.93, 11.81, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:04:40.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:04:20
2026-02-14T20:04:40.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:04:40.594 [DEBUG] [Thread-191337] [transport.py] [_log()] starting thread (client mode): 0xa57d7250
2026-02-14T20:04:40.594 [DEBUG] [Thread-191337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:04:40.613 [DEBUG] [Thread-191337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:04:40.613 [INFO] [Thread-191337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:04:40.617 [DEBUG] [Thread-191337] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:04:40.617 [DEBUG] [Thread-191337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:04:40.617 [DEBUG] [Thread-191337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:04:40.617 [DEBUG] [Thread-191337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:04:40.617 [DEBUG] [Thread-191337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:04:40.617 [DEBUG] [Thread-191337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:04:40.617 [DEBUG] [Thread-191337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:04:40.617 [DEBUG] [Thread-191337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:04:40.617 [DEBUG] [Thread-191337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:04:40.618 [DEBUG] [Thread-191337] [transport.py] [_log()] client lang: <none>
2026-02-14T20:04:40.618 [DEBUG] [Thread-191337] [transport.py] [_log()] server lang: <none>
2026-02-14T20:04:40.618 [DEBUG] [Thread-191337] [transport.py] [_log()] kex follows: False
2026-02-14T20:04:40.618 [DEBUG] [Thread-191337] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:04:40.618 [DEBUG] [Thread-191337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:04:40.618 [DEBUG] [Thread-191337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:04:40.618 [DEBUG] [Thread-191337] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:04:40.618 [DEBUG] [Thread-191337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:04:40.618 [DEBUG] [Thread-191337] [transport.py] [_log()] Compression: none
2026-02-14T20:04:40.618 [DEBUG] [Thread-191337] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:04:40.636 [DEBUG] [Thread-191337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:04:40.637 [DEBUG] [Thread-191337] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:04:40.637 [DEBUG] [Thread-191337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:04:40.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:04:40.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:04:40.639 [DEBUG] [Thread-191337] [transport.py] [_log()] userauth is OK
2026-02-14T20:04:40.640 [DEBUG] [Thread-191337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:04:40.640 [DEBUG] [Thread-191337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:04:40.640 [DEBUG] [Thread-191337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:04:40.640 [DEBUG] [Thread-191337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:04:40.664 [INFO] [Thread-191337] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:04:40.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:04:41.050 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:04:41.117 [DEBUG] [Thread-191339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:04:41.302 [DEBUG] [Thread-191337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:04:41.302 [DEBUG] [Thread-191337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:04:41.303 [DEBUG] [Thread-191337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:04:41.343 [DEBUG] [Thread-191337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:04:41.343 [DEBUG] [Thread-191337] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:04:41.347 [DEBUG] [Thread-191337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:04:41.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:04:41.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:04:41.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:04:41.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:04:41.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:04:41.369 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:04:41.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:04:41.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:04:41.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:04:41.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.752892 -999.00  +11.70  32.86     56   +3.40 1 1 2 1 1    40    0 7.87 -27.41 ----- 32.4 32.9 172.8 37.6 12.2 -25.4 12.1 -24.6 11.9 -23.4 12.2 -24.7
2026-02-14T20:04:41.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:04:41.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:04:41.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.752892
2026-02-14T20:04:41.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:04:41.371 [DEBUG] [Thread-191337] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:04:41.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:04:41.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:04:41.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:04:41.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:04:41.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:04:20', tmtdew=9.73, humidity=51.24, cloud=0.0, wind=37.93, temperature=11.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:04:09.869', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:04:41.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-14T20:04:41.468 [DEBUG] [Thread-191341] [transport.py] [_log()] starting thread (client mode): 0xa57c3e20
2026-02-14T20:04:41.468 [DEBUG] [Thread-191341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:04:41.482 [DEBUG] [Thread-191341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:04:41.482 [INFO] [Thread-191341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:04:41.490 [DEBUG] [Thread-191341] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:04:41.490 [DEBUG] [Thread-191341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:04:41.490 [DEBUG] [Thread-191341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:04:41.490 [DEBUG] [Thread-191341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:04:41.491 [DEBUG] [Thread-191341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:04:41.491 [DEBUG] [Thread-191341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:04:41.491 [DEBUG] [Thread-191341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:04:41.491 [DEBUG] [Thread-191341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:04:41.491 [DEBUG] [Thread-191341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:04:41.491 [DEBUG] [Thread-191341] [transport.py] [_log()] client lang: <none>
2026-02-14T20:04:41.491 [DEBUG] [Thread-191341] [transport.py] [_log()] server lang: <none>
2026-02-14T20:04:41.491 [DEBUG] [Thread-191341] [transport.py] [_log()] kex follows: False
2026-02-14T20:04:41.491 [DEBUG] [Thread-191341] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:04:41.492 [DEBUG] [Thread-191341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:04:41.492 [DEBUG] [Thread-191341] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:04:41.492 [DEBUG] [Thread-191341] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:04:41.492 [DEBUG] [Thread-191341] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:04:41.492 [DEBUG] [Thread-191341] [transport.py] [_log()] Compression: none
2026-02-14T20:04:41.493 [DEBUG] [Thread-191341] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:04:41.546 [DEBUG] [Thread-191341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:04:41.547 [DEBUG] [Thread-191341] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:04:41.547 [DEBUG] [Thread-191341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:04:41.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:04:41.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:04:41.603 [DEBUG] [Thread-191341] [transport.py] [_log()] userauth is OK
2026-02-14T20:04:41.603 [DEBUG] [Thread-191341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:04:41.603 [DEBUG] [Thread-191341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:04:41.603 [DEBUG] [Thread-191341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:04:41.603 [DEBUG] [Thread-191341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:04:41.617 [INFO] [Thread-191341] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:04:41.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-14T20:04:41.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:04:42.446 [DEBUG] [Thread-191341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:04:42.447 [DEBUG] [Thread-191341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:04:42.494 [DEBUG] [Thread-191341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:04:42.495 [DEBUG] [Thread-191341] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:04:42.503 [DEBUG] [Thread-191341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:04:42.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:04:42.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-14T20:04:42.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:04:42.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:04:42.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:04:42.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:04:42.538 [DEBUG] [Thread-191341] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:04:45.223 [DEBUG] [Thread-191343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:04:48.453 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:04:57.348 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:05:00.282 [DEBUG] [Thread-191344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:05:03.453 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:05:11.111 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:05:12.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:05:12.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:05:12.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-14T20:05:14.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 4, 56), 9.67, 51.31, 0.0, 43.1, 11.81, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:05:14.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:04:56
2026-02-14T20:05:14.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:05:15.007 [DEBUG] [Thread-191345] [transport.py] [_log()] starting thread (client mode): 0xa2d6c490
2026-02-14T20:05:15.007 [DEBUG] [Thread-191345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:05:15.028 [DEBUG] [Thread-191345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:05:15.028 [INFO] [Thread-191345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:05:15.031 [DEBUG] [Thread-191345] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:05:15.031 [DEBUG] [Thread-191345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:05:15.031 [DEBUG] [Thread-191345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:05:15.031 [DEBUG] [Thread-191345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:05:15.031 [DEBUG] [Thread-191345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:05:15.031 [DEBUG] [Thread-191345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:05:15.031 [DEBUG] [Thread-191345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:05:15.032 [DEBUG] [Thread-191345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:05:15.032 [DEBUG] [Thread-191345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:05:15.032 [DEBUG] [Thread-191345] [transport.py] [_log()] client lang: <none>
2026-02-14T20:05:15.032 [DEBUG] [Thread-191345] [transport.py] [_log()] server lang: <none>
2026-02-14T20:05:15.032 [DEBUG] [Thread-191345] [transport.py] [_log()] kex follows: False
2026-02-14T20:05:15.032 [DEBUG] [Thread-191345] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:05:15.032 [DEBUG] [Thread-191345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:05:15.032 [DEBUG] [Thread-191345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:05:15.032 [DEBUG] [Thread-191345] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:05:15.032 [DEBUG] [Thread-191345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:05:15.032 [DEBUG] [Thread-191345] [transport.py] [_log()] Compression: none
2026-02-14T20:05:15.032 [DEBUG] [Thread-191345] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:05:15.049 [DEBUG] [Thread-191345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:05:15.050 [DEBUG] [Thread-191345] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:05:15.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:05:15.051 [DEBUG] [Thread-191345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:05:15.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:05:15.054 [DEBUG] [Thread-191345] [transport.py] [_log()] userauth is OK
2026-02-14T20:05:15.054 [DEBUG] [Thread-191345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:05:15.054 [DEBUG] [Thread-191345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:05:15.054 [DEBUG] [Thread-191345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:05:15.054 [DEBUG] [Thread-191345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:05:15.076 [INFO] [Thread-191345] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:05:15.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:05:15.315 [DEBUG] [Thread-191347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:05:16.192 [DEBUG] [Thread-191345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:05:16.193 [DEBUG] [Thread-191345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:05:16.193 [DEBUG] [Thread-191345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:05:16.234 [DEBUG] [Thread-191345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:05:16.234 [DEBUG] [Thread-191345] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:05:16.237 [DEBUG] [Thread-191345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:05:16.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:05:16.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:05:16.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:05:16.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:05:16.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:05:16.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:05:16.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:05:16.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:05:16.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:05:16.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.753239 -999.00  +11.70  29.95     56   +3.40 1 1 1 1 1    36    0 7.78 -26.40 ----- 32.9 29.9 170.8 43.3 12.2 -25.6 12.1 -24.6 11.9 -23.6 12.3 -24.7
2026-02-14T20:05:16.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:05:16.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:05:16.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.753239
2026-02-14T20:05:16.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:05:16.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:05:16.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:05:16.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:05:16.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:05:16.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:04:56', tmtdew=9.67, humidity=51.31, cloud=0.0, wind=43.1, temperature=11.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:04:39.850', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:05:16.263 [DEBUG] [Thread-191345] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:05:16.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-14T20:05:16.358 [DEBUG] [Thread-191349] [transport.py] [_log()] starting thread (client mode): 0xa2d6e470
2026-02-14T20:05:16.358 [DEBUG] [Thread-191349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:05:16.372 [DEBUG] [Thread-191349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:05:16.372 [INFO] [Thread-191349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:05:16.380 [DEBUG] [Thread-191349] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:05:16.380 [DEBUG] [Thread-191349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:05:16.380 [DEBUG] [Thread-191349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:05:16.380 [DEBUG] [Thread-191349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:05:16.380 [DEBUG] [Thread-191349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:05:16.380 [DEBUG] [Thread-191349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:05:16.381 [DEBUG] [Thread-191349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:05:16.381 [DEBUG] [Thread-191349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:05:16.381 [DEBUG] [Thread-191349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:05:16.381 [DEBUG] [Thread-191349] [transport.py] [_log()] client lang: <none>
2026-02-14T20:05:16.381 [DEBUG] [Thread-191349] [transport.py] [_log()] server lang: <none>
2026-02-14T20:05:16.381 [DEBUG] [Thread-191349] [transport.py] [_log()] kex follows: False
2026-02-14T20:05:16.381 [DEBUG] [Thread-191349] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:05:16.381 [DEBUG] [Thread-191349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:05:16.381 [DEBUG] [Thread-191349] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:05:16.381 [DEBUG] [Thread-191349] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:05:16.381 [DEBUG] [Thread-191349] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:05:16.381 [DEBUG] [Thread-191349] [transport.py] [_log()] Compression: none
2026-02-14T20:05:16.381 [DEBUG] [Thread-191349] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:05:16.440 [DEBUG] [Thread-191349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:05:16.440 [DEBUG] [Thread-191349] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:05:16.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:05:16.442 [DEBUG] [Thread-191349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:05:16.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:05:16.499 [DEBUG] [Thread-191349] [transport.py] [_log()] userauth is OK
2026-02-14T20:05:16.500 [DEBUG] [Thread-191349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:05:16.500 [DEBUG] [Thread-191349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:05:16.500 [DEBUG] [Thread-191349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:05:16.500 [DEBUG] [Thread-191349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:05:16.518 [INFO] [Thread-191349] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:05:16.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T20:05:16.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:05:17.342 [DEBUG] [Thread-191349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:05:17.343 [DEBUG] [Thread-191349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:05:17.390 [DEBUG] [Thread-191349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:05:17.391 [DEBUG] [Thread-191349] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:05:17.400 [DEBUG] [Thread-191349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:05:17.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:05:17.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-14T20:05: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-14T20:05:17.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:05:17.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:05:17.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:05:17.437 [DEBUG] [Thread-191349] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:05:18.511 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:05:25.985 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:05:30.352 [DEBUG] [Thread-191351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:05:32.143 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:05:36.882 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:05:36.883 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:05:39.552 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:05:41.168 [DEBUG] [Thread-191352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:05:45.400 [DEBUG] [Thread-191353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:05:47.342 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:05:47.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:05:47.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:05:47.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-14T20:05:49.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 5, 31), 9.66, 51.34, 0.0, 39.93, 11.78, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:05:49.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:05:31
2026-02-14T20:05:50.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:05:50.269 [DEBUG] [Thread-191354] [transport.py] [_log()] starting thread (client mode): 0xa5741c60
2026-02-14T20:05:50.269 [DEBUG] [Thread-191354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:05:50.288 [DEBUG] [Thread-191354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:05:50.288 [INFO] [Thread-191354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:05:50.292 [DEBUG] [Thread-191354] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:05:50.292 [DEBUG] [Thread-191354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:05:50.292 [DEBUG] [Thread-191354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:05:50.292 [DEBUG] [Thread-191354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:05:50.292 [DEBUG] [Thread-191354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:05:50.292 [DEBUG] [Thread-191354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:05:50.292 [DEBUG] [Thread-191354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:05:50.292 [DEBUG] [Thread-191354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:05:50.292 [DEBUG] [Thread-191354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:05:50.293 [DEBUG] [Thread-191354] [transport.py] [_log()] client lang: <none>
2026-02-14T20:05:50.293 [DEBUG] [Thread-191354] [transport.py] [_log()] server lang: <none>
2026-02-14T20:05:50.293 [DEBUG] [Thread-191354] [transport.py] [_log()] kex follows: False
2026-02-14T20:05:50.293 [DEBUG] [Thread-191354] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:05:50.293 [DEBUG] [Thread-191354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:05:50.293 [DEBUG] [Thread-191354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:05:50.293 [DEBUG] [Thread-191354] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:05:50.293 [DEBUG] [Thread-191354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:05:50.293 [DEBUG] [Thread-191354] [transport.py] [_log()] Compression: none
2026-02-14T20:05:50.293 [DEBUG] [Thread-191354] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:05:50.308 [DEBUG] [Thread-191354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:05:50.309 [DEBUG] [Thread-191354] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:05:50.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:05:50.310 [DEBUG] [Thread-191354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:05:50.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:05:50.312 [DEBUG] [Thread-191354] [transport.py] [_log()] userauth is OK
2026-02-14T20:05:50.312 [DEBUG] [Thread-191354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:05:50.312 [DEBUG] [Thread-191354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:05:50.312 [DEBUG] [Thread-191354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:05:50.312 [DEBUG] [Thread-191354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:05:50.336 [INFO] [Thread-191354] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:05:50.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:05:50.973 [DEBUG] [Thread-191354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:05:50.973 [DEBUG] [Thread-191354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:05:50.973 [DEBUG] [Thread-191354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:05:51.014 [DEBUG] [Thread-191354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:05:51.014 [DEBUG] [Thread-191354] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:05:51.017 [DEBUG] [Thread-191354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:05:51.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:05:51.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:05:51.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:05:51.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:05:51.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:05:51.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:05:51.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:05:51.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:05:51.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:05:51.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.753587 -999.00  +11.60  27.42     56   +3.40 1 1 1 1 1    33    0 7.74 -25.23 ----- 29.5 27.4 170.8 36.5 12.2 -25.5 12.1 -24.6 11.9 -23.6 12.2 -24.8
2026-02-14T20:05:51.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:05:51.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:05:51.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.753587
2026-02-14T20:05:51.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:05:51.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:05:51.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:05:51.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:05:51.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:05:51.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:05:31', tmtdew=9.66, humidity=51.34, cloud=0.0, wind=39.93, temperature=11.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:05:09.917', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:05:51.042 [DEBUG] [Thread-191354] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:05:51.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-14T20:05:51.144 [DEBUG] [Thread-191357] [transport.py] [_log()] starting thread (client mode): 0xa5742830
2026-02-14T20:05:51.144 [DEBUG] [Thread-191357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:05:51.159 [DEBUG] [Thread-191357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:05:51.159 [INFO] [Thread-191357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:05:51.167 [DEBUG] [Thread-191357] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:05:51.167 [DEBUG] [Thread-191357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:05:51.167 [DEBUG] [Thread-191357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:05:51.167 [DEBUG] [Thread-191357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:05:51.167 [DEBUG] [Thread-191357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:05:51.167 [DEBUG] [Thread-191357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:05:51.167 [DEBUG] [Thread-191357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:05:51.167 [DEBUG] [Thread-191357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:05:51.167 [DEBUG] [Thread-191357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:05:51.167 [DEBUG] [Thread-191357] [transport.py] [_log()] client lang: <none>
2026-02-14T20:05:51.167 [DEBUG] [Thread-191357] [transport.py] [_log()] server lang: <none>
2026-02-14T20:05:51.167 [DEBUG] [Thread-191357] [transport.py] [_log()] kex follows: False
2026-02-14T20:05:51.167 [DEBUG] [Thread-191357] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:05:51.167 [DEBUG] [Thread-191357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:05:51.167 [DEBUG] [Thread-191357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:05:51.167 [DEBUG] [Thread-191357] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:05:51.168 [DEBUG] [Thread-191357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:05:51.168 [DEBUG] [Thread-191357] [transport.py] [_log()] Compression: none
2026-02-14T20:05:51.168 [DEBUG] [Thread-191357] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:05:51.226 [DEBUG] [Thread-191357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:05:51.227 [DEBUG] [Thread-191357] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:05:51.227 [DEBUG] [Thread-191357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:05:51.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:05:51.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:05:51.283 [DEBUG] [Thread-191357] [transport.py] [_log()] userauth is OK
2026-02-14T20:05:51.283 [DEBUG] [Thread-191357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:05:51.283 [DEBUG] [Thread-191357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:05:51.283 [DEBUG] [Thread-191357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:05:51.283 [DEBUG] [Thread-191357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:05:51.298 [INFO] [Thread-191357] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:05:51.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-14T20:05:51.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:05:52.093 [DEBUG] [Thread-191357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:05:52.094 [DEBUG] [Thread-191357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:05:52.141 [DEBUG] [Thread-191357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:05:52.142 [DEBUG] [Thread-191357] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:05:52.151 [DEBUG] [Thread-191357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:05:52.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:05:52.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-14T20:05:52.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-14T20:05:52.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:05:52.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:05:52.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:05:52.188 [DEBUG] [Thread-191357] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:05:53.551 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:05:59.666 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:06:00.434 [DEBUG] [Thread-191359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:06:07.235 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:06:15.252 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:06:15.474 [DEBUG] [Thread-191360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:06:22.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:06:22.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:06:22.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:06:23.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 6, 6), 9.63, 51.43, 0.0, 42.29, 11.78, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:06:23.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:06:06
2026-02-14T20:06:24.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:06:24.472 [DEBUG] [Thread-191361] [transport.py] [_log()] starting thread (client mode): 0xa57d7ca0
2026-02-14T20:06:24.472 [DEBUG] [Thread-191361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:06:24.492 [DEBUG] [Thread-191361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:06:24.493 [INFO] [Thread-191361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:06:24.496 [DEBUG] [Thread-191361] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:06:24.496 [DEBUG] [Thread-191361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:06:24.496 [DEBUG] [Thread-191361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:06:24.496 [DEBUG] [Thread-191361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:06:24.496 [DEBUG] [Thread-191361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:06:24.496 [DEBUG] [Thread-191361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:06:24.496 [DEBUG] [Thread-191361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:06:24.496 [DEBUG] [Thread-191361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:06:24.496 [DEBUG] [Thread-191361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:06:24.496 [DEBUG] [Thread-191361] [transport.py] [_log()] client lang: <none>
2026-02-14T20:06:24.497 [DEBUG] [Thread-191361] [transport.py] [_log()] server lang: <none>
2026-02-14T20:06:24.497 [DEBUG] [Thread-191361] [transport.py] [_log()] kex follows: False
2026-02-14T20:06:24.497 [DEBUG] [Thread-191361] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:06:24.497 [DEBUG] [Thread-191361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:06:24.497 [DEBUG] [Thread-191361] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:06:24.497 [DEBUG] [Thread-191361] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:06:24.497 [DEBUG] [Thread-191361] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:06:24.497 [DEBUG] [Thread-191361] [transport.py] [_log()] Compression: none
2026-02-14T20:06:24.497 [DEBUG] [Thread-191361] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:06:24.514 [DEBUG] [Thread-191361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:06:24.514 [DEBUG] [Thread-191361] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:06:24.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:06:24.515 [DEBUG] [Thread-191361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:06:24.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:06:24.517 [DEBUG] [Thread-191361] [transport.py] [_log()] userauth is OK
2026-02-14T20:06:24.517 [DEBUG] [Thread-191361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:06:24.518 [DEBUG] [Thread-191361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:06:24.518 [DEBUG] [Thread-191361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:06:24.518 [DEBUG] [Thread-191361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:06:24.541 [INFO] [Thread-191361] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:06:24.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:06:25.096 [DEBUG] [Thread-191361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:06:25.096 [DEBUG] [Thread-191361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:06:25.096 [DEBUG] [Thread-191361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:06:25.136 [DEBUG] [Thread-191361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:06:25.137 [DEBUG] [Thread-191361] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:06:25.140 [DEBUG] [Thread-191361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:06:25.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:06:25.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:06:25.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:06:25.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:06:25.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:06:25.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:06:25.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:06:25.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:06:25.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:06:25.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.754281 -999.00  +11.60  27.82     56   +3.40 1 1 1 1 1    27    0 7.70 -26.57 ..... 27.5 27.8 172.8 34.4 12.2 -25.5 12.0 -24.5 11.8 -23.6 12.2 -24.8
2026-02-14T20:06:25.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:06:25.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:06:25.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.754281
2026-02-14T20:06:25.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:06:25.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:06:25.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:06:25.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:06:25.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:06:25.167 [DEBUG] [Thread-191361] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:06:25.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:06:06', tmtdew=9.63, humidity=51.43, cloud=0.0, wind=42.29, temperature=11.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:06:09.878', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:06:25.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-14T20:06:25.269 [DEBUG] [Thread-191364] [transport.py] [_log()] starting thread (client mode): 0xa57d7160
2026-02-14T20:06:25.269 [DEBUG] [Thread-191364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:06:25.284 [DEBUG] [Thread-191364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:06:25.284 [INFO] [Thread-191364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:06:25.292 [DEBUG] [Thread-191364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:06:25.292 [DEBUG] [Thread-191364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:06:25.293 [DEBUG] [Thread-191364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:06:25.293 [DEBUG] [Thread-191364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:06:25.293 [DEBUG] [Thread-191364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:06:25.293 [DEBUG] [Thread-191364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:06:25.293 [DEBUG] [Thread-191364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:06:25.293 [DEBUG] [Thread-191364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:06:25.293 [DEBUG] [Thread-191364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:06:25.293 [DEBUG] [Thread-191364] [transport.py] [_log()] client lang: <none>
2026-02-14T20:06:25.294 [DEBUG] [Thread-191364] [transport.py] [_log()] server lang: <none>
2026-02-14T20:06:25.294 [DEBUG] [Thread-191364] [transport.py] [_log()] kex follows: False
2026-02-14T20:06:25.294 [DEBUG] [Thread-191364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:06:25.294 [DEBUG] [Thread-191364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:06:25.294 [DEBUG] [Thread-191364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:06:25.294 [DEBUG] [Thread-191364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:06:25.294 [DEBUG] [Thread-191364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:06:25.295 [DEBUG] [Thread-191364] [transport.py] [_log()] Compression: none
2026-02-14T20:06:25.295 [DEBUG] [Thread-191364] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:06:25.358 [DEBUG] [Thread-191364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:06:25.359 [DEBUG] [Thread-191364] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:06:25.360 [DEBUG] [Thread-191364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:06:25.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:06:25.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:06:25.414 [DEBUG] [Thread-191364] [transport.py] [_log()] userauth is OK
2026-02-14T20:06:25.415 [DEBUG] [Thread-191364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:06:25.415 [DEBUG] [Thread-191364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:06:25.415 [DEBUG] [Thread-191364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:06:25.415 [DEBUG] [Thread-191364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:06:25.433 [INFO] [Thread-191364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:06:25.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T20:06:25.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:06:26.269 [DEBUG] [Thread-191364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:06:26.269 [DEBUG] [Thread-191364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:06:26.318 [DEBUG] [Thread-191364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:06:26.318 [DEBUG] [Thread-191364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:06:26.329 [DEBUG] [Thread-191364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:06:26.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:06:26.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-14T20:06: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-14T20:06:26.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:06:26.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:06:26.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:06:26.365 [DEBUG] [Thread-191364] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:06:27.347 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:06:30.510 [DEBUG] [Thread-191366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:06:32.399 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:06:39.894 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:06:41.228 [DEBUG] [Thread-191367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:06:42.387 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:06:42.388 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:06:45.561 [DEBUG] [Thread-191368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:06:47.376 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:06:51.565 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:06:56.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:06:56.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:06:56.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-14T20:06:56.619 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:06:58.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 6, 42), 9.86, 50.85, 0.0, 41.28, 12.12, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:06:58.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:06:42
2026-02-14T20:06:58.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:06:58.839 [DEBUG] [Thread-191369] [transport.py] [_log()] starting thread (client mode): 0xa57c0100
2026-02-14T20:06:58.839 [DEBUG] [Thread-191369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:06:58.860 [DEBUG] [Thread-191369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:06:58.860 [INFO] [Thread-191369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:06:58.864 [DEBUG] [Thread-191369] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:06:58.864 [DEBUG] [Thread-191369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:06:58.864 [DEBUG] [Thread-191369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:06:58.864 [DEBUG] [Thread-191369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:06:58.864 [DEBUG] [Thread-191369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:06:58.864 [DEBUG] [Thread-191369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:06:58.864 [DEBUG] [Thread-191369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:06:58.864 [DEBUG] [Thread-191369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:06:58.864 [DEBUG] [Thread-191369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:06:58.864 [DEBUG] [Thread-191369] [transport.py] [_log()] client lang: <none>
2026-02-14T20:06:58.864 [DEBUG] [Thread-191369] [transport.py] [_log()] server lang: <none>
2026-02-14T20:06:58.864 [DEBUG] [Thread-191369] [transport.py] [_log()] kex follows: False
2026-02-14T20:06:58.864 [DEBUG] [Thread-191369] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:06:58.864 [DEBUG] [Thread-191369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:06:58.864 [DEBUG] [Thread-191369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:06:58.864 [DEBUG] [Thread-191369] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:06:58.864 [DEBUG] [Thread-191369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:06:58.864 [DEBUG] [Thread-191369] [transport.py] [_log()] Compression: none
2026-02-14T20:06:58.864 [DEBUG] [Thread-191369] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:06:58.882 [DEBUG] [Thread-191369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:06:58.882 [DEBUG] [Thread-191369] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:06:58.883 [DEBUG] [Thread-191369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:06:58.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:06:58.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:06:58.885 [DEBUG] [Thread-191369] [transport.py] [_log()] userauth is OK
2026-02-14T20:06:58.886 [DEBUG] [Thread-191369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:06:58.886 [DEBUG] [Thread-191369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:06:58.886 [DEBUG] [Thread-191369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:06:58.886 [DEBUG] [Thread-191369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:06:58.910 [INFO] [Thread-191369] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:06:58.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:06:59.498 [DEBUG] [Thread-191369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:06:59.499 [DEBUG] [Thread-191369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:06:59.499 [DEBUG] [Thread-191369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:06:59.539 [DEBUG] [Thread-191369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:06:59.539 [DEBUG] [Thread-191369] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:06:59.542 [DEBUG] [Thread-191369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:06:59.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:06:59.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:06:59.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:06:59.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:06:59.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:06:59.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:06:59.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:06:59.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:06:59.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:06:59.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.754628 -999.00  +11.60  23.17     56   +3.40 1 1 1 1 1    25    0 7.83 -26.26 ..... 23.3 23.2 161.6 33.3 12.2 -25.5 12.0 -24.6 11.8 -23.6 12.2 -24.9
2026-02-14T20:06:59.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:06:59.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:06:59.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.754628
2026-02-14T20:06:59.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:06:59.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:06:59.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:06:59.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:06:59.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:06:59.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:06:42', tmtdew=9.86, humidity=50.85, cloud=0.0, wind=41.28, temperature=12.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:06:39.859', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:06:59.567 [DEBUG] [Thread-191369] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:06:59.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-14T20:06:59.662 [DEBUG] [Thread-191372] [transport.py] [_log()] starting thread (client mode): 0xa5772f20
2026-02-14T20:06:59.662 [DEBUG] [Thread-191372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:06:59.677 [DEBUG] [Thread-191372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:06:59.677 [INFO] [Thread-191372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:06:59.684 [DEBUG] [Thread-191372] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:06:59.685 [DEBUG] [Thread-191372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:06:59.685 [DEBUG] [Thread-191372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:06:59.685 [DEBUG] [Thread-191372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:06:59.685 [DEBUG] [Thread-191372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:06:59.685 [DEBUG] [Thread-191372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:06:59.685 [DEBUG] [Thread-191372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:06:59.685 [DEBUG] [Thread-191372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:06:59.685 [DEBUG] [Thread-191372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:06:59.685 [DEBUG] [Thread-191372] [transport.py] [_log()] client lang: <none>
2026-02-14T20:06:59.685 [DEBUG] [Thread-191372] [transport.py] [_log()] server lang: <none>
2026-02-14T20:06:59.685 [DEBUG] [Thread-191372] [transport.py] [_log()] kex follows: False
2026-02-14T20:06:59.685 [DEBUG] [Thread-191372] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:06:59.685 [DEBUG] [Thread-191372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:06:59.685 [DEBUG] [Thread-191372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:06:59.685 [DEBUG] [Thread-191372] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:06:59.685 [DEBUG] [Thread-191372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:06:59.685 [DEBUG] [Thread-191372] [transport.py] [_log()] Compression: none
2026-02-14T20:06:59.685 [DEBUG] [Thread-191372] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:06:59.741 [DEBUG] [Thread-191372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:06:59.742 [DEBUG] [Thread-191372] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:06:59.742 [DEBUG] [Thread-191372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:06:59.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:06:59.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:06:59.798 [DEBUG] [Thread-191372] [transport.py] [_log()] userauth is OK
2026-02-14T20:06:59.799 [DEBUG] [Thread-191372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:06:59.799 [DEBUG] [Thread-191372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:06:59.799 [DEBUG] [Thread-191372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:06:59.799 [DEBUG] [Thread-191372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:06:59.817 [INFO] [Thread-191372] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:06:59.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-14T20:06:59.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:07:00.597 [DEBUG] [Thread-191374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:07:00.656 [DEBUG] [Thread-191372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:07:00.657 [DEBUG] [Thread-191372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:07:00.705 [DEBUG] [Thread-191372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:07:00.705 [DEBUG] [Thread-191372] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:07:00.714 [DEBUG] [Thread-191372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:07:00.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:07:00.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:07:00.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-14T20:07:00.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:07:00.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:07:00.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:07:00.752 [DEBUG] [Thread-191372] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:07:04.024 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:07:11.623 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:07:15.656 [DEBUG] [Thread-191375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:07:30.691 [DEBUG] [Thread-191376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:07:30.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:07:30.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:07:30.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-14T20:07:32.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 7, 17), 9.62, 51.46, 0.0, 38.78, 11.76, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:07:32.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:07:17
2026-02-14T20:07:33.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:07:33.223 [DEBUG] [Thread-191377] [transport.py] [_log()] starting thread (client mode): 0xa57710f0
2026-02-14T20:07:33.223 [DEBUG] [Thread-191377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:07:33.244 [DEBUG] [Thread-191377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:07:33.244 [INFO] [Thread-191377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:07:33.247 [DEBUG] [Thread-191377] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:07:33.247 [DEBUG] [Thread-191377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:07:33.247 [DEBUG] [Thread-191377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:07:33.247 [DEBUG] [Thread-191377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:07:33.247 [DEBUG] [Thread-191377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:07:33.247 [DEBUG] [Thread-191377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:07:33.248 [DEBUG] [Thread-191377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:07:33.248 [DEBUG] [Thread-191377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:07:33.248 [DEBUG] [Thread-191377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:07:33.248 [DEBUG] [Thread-191377] [transport.py] [_log()] client lang: <none>
2026-02-14T20:07:33.248 [DEBUG] [Thread-191377] [transport.py] [_log()] server lang: <none>
2026-02-14T20:07:33.248 [DEBUG] [Thread-191377] [transport.py] [_log()] kex follows: False
2026-02-14T20:07:33.248 [DEBUG] [Thread-191377] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:07:33.248 [DEBUG] [Thread-191377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:07:33.248 [DEBUG] [Thread-191377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:07:33.248 [DEBUG] [Thread-191377] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:07:33.248 [DEBUG] [Thread-191377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:07:33.248 [DEBUG] [Thread-191377] [transport.py] [_log()] Compression: none
2026-02-14T20:07:33.248 [DEBUG] [Thread-191377] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:07:33.268 [DEBUG] [Thread-191377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:07:33.269 [DEBUG] [Thread-191377] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:07:33.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:07:33.270 [DEBUG] [Thread-191377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:07:33.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:07:33.272 [DEBUG] [Thread-191377] [transport.py] [_log()] userauth is OK
2026-02-14T20:07:33.273 [DEBUG] [Thread-191377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:07:33.273 [DEBUG] [Thread-191377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:07:33.273 [DEBUG] [Thread-191377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:07:33.273 [DEBUG] [Thread-191377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:07:33.298 [INFO] [Thread-191377] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:07:33.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:07:33.935 [DEBUG] [Thread-191377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:07:33.935 [DEBUG] [Thread-191377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:07:33.936 [DEBUG] [Thread-191377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:07:33.976 [DEBUG] [Thread-191377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:07:33.977 [DEBUG] [Thread-191377] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:07:33.980 [DEBUG] [Thread-191377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:07:33.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:07:33.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:07:33.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:07:33.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:07:34.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:07:34.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:07:34.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:07:34.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:07:34.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:07:34.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.754975 -999.00  +11.60  30.31     57   +3.40 1 1 2 1 1    22    0 7.69 -27.06 ..... 32.4 30.3 158.0 36.0 12.2 -25.5 12.0 -24.6 11.8 -23.4 12.2 -24.9
2026-02-14T20:07:34.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:07:34.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:07:34.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.754975
2026-02-14T20:07:34.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:07:34.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:07:34.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:07:34.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:07:34.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:07:34.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:07:17', tmtdew=9.62, humidity=51.46, cloud=0.0, wind=38.78, temperature=11.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:07:09.840', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:07:34.008 [DEBUG] [Thread-191377] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:07:34.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T20:07:34.104 [DEBUG] [Thread-191380] [transport.py] [_log()] starting thread (client mode): 0xa57c3fa0
2026-02-14T20:07:34.104 [DEBUG] [Thread-191380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:07:34.120 [DEBUG] [Thread-191380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:07:34.120 [INFO] [Thread-191380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:07:34.128 [DEBUG] [Thread-191380] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:07:34.128 [DEBUG] [Thread-191380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:07:34.128 [DEBUG] [Thread-191380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:07:34.128 [DEBUG] [Thread-191380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:07:34.128 [DEBUG] [Thread-191380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:07:34.128 [DEBUG] [Thread-191380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:07:34.128 [DEBUG] [Thread-191380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:07:34.128 [DEBUG] [Thread-191380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:07:34.128 [DEBUG] [Thread-191380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:07:34.129 [DEBUG] [Thread-191380] [transport.py] [_log()] client lang: <none>
2026-02-14T20:07:34.129 [DEBUG] [Thread-191380] [transport.py] [_log()] server lang: <none>
2026-02-14T20:07:34.129 [DEBUG] [Thread-191380] [transport.py] [_log()] kex follows: False
2026-02-14T20:07:34.129 [DEBUG] [Thread-191380] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:07:34.129 [DEBUG] [Thread-191380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:07:34.129 [DEBUG] [Thread-191380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:07:34.129 [DEBUG] [Thread-191380] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:07:34.129 [DEBUG] [Thread-191380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:07:34.129 [DEBUG] [Thread-191380] [transport.py] [_log()] Compression: none
2026-02-14T20:07:34.129 [DEBUG] [Thread-191380] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:07:34.187 [DEBUG] [Thread-191380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:07:34.188 [DEBUG] [Thread-191380] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:07:34.188 [DEBUG] [Thread-191380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:07:34.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:07:34.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:07:34.243 [DEBUG] [Thread-191380] [transport.py] [_log()] userauth is OK
2026-02-14T20:07:34.243 [DEBUG] [Thread-191380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:07:34.243 [DEBUG] [Thread-191380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:07:34.243 [DEBUG] [Thread-191380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:07:34.243 [DEBUG] [Thread-191380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:07:34.262 [INFO] [Thread-191380] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:07:34.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T20:07:34.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:07:35.069 [DEBUG] [Thread-191380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:07:35.069 [DEBUG] [Thread-191380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:07:35.120 [DEBUG] [Thread-191380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:07:35.120 [DEBUG] [Thread-191380] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:07:35.129 [DEBUG] [Thread-191380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:07:35.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:07:35.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-14T20:07:35.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-14T20:07:35.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:07:35.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:07:35.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:07:35.167 [DEBUG] [Thread-191380] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:07:41.297 [DEBUG] [Thread-191382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:07:45.731 [DEBUG] [Thread-191383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:07:47.535 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:07:47.536 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:08:00.782 [DEBUG] [Thread-191384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:08:05.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:08:05.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:08:05.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-14T20:08:07.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 7, 52), 9.6, 51.53, 0.0, 35.08, 11.71, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:08:07.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:07:52
2026-02-14T20:08:07.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:08:07.656 [DEBUG] [Thread-191385] [transport.py] [_log()] starting thread (client mode): 0xa2d01fc0
2026-02-14T20:08:07.657 [DEBUG] [Thread-191385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:08:07.677 [DEBUG] [Thread-191385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:08:07.677 [INFO] [Thread-191385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:08:07.680 [DEBUG] [Thread-191385] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:08:07.680 [DEBUG] [Thread-191385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:08:07.681 [DEBUG] [Thread-191385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:08:07.681 [DEBUG] [Thread-191385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:08:07.681 [DEBUG] [Thread-191385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:08:07.681 [DEBUG] [Thread-191385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:08:07.681 [DEBUG] [Thread-191385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:08:07.681 [DEBUG] [Thread-191385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:08:07.681 [DEBUG] [Thread-191385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:08:07.681 [DEBUG] [Thread-191385] [transport.py] [_log()] client lang: <none>
2026-02-14T20:08:07.681 [DEBUG] [Thread-191385] [transport.py] [_log()] server lang: <none>
2026-02-14T20:08:07.681 [DEBUG] [Thread-191385] [transport.py] [_log()] kex follows: False
2026-02-14T20:08:07.681 [DEBUG] [Thread-191385] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:08:07.681 [DEBUG] [Thread-191385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:08:07.681 [DEBUG] [Thread-191385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:08:07.681 [DEBUG] [Thread-191385] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:08:07.681 [DEBUG] [Thread-191385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:08:07.682 [DEBUG] [Thread-191385] [transport.py] [_log()] Compression: none
2026-02-14T20:08:07.682 [DEBUG] [Thread-191385] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:08:07.699 [DEBUG] [Thread-191385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:08:07.699 [DEBUG] [Thread-191385] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:08:07.699 [DEBUG] [Thread-191385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:08:07.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:08:07.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:08:07.700 [DEBUG] [Thread-191385] [transport.py] [_log()] userauth is OK
2026-02-14T20:08:07.700 [DEBUG] [Thread-191385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:08:07.700 [DEBUG] [Thread-191385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:08:07.701 [DEBUG] [Thread-191385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:08:07.701 [DEBUG] [Thread-191385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:08:07.711 [INFO] [Thread-191385] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:08:07.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:08:08.321 [DEBUG] [Thread-191385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:08:08.321 [DEBUG] [Thread-191385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:08:08.322 [DEBUG] [Thread-191385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:08:08.362 [DEBUG] [Thread-191385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:08:08.362 [DEBUG] [Thread-191385] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:08:08.364 [DEBUG] [Thread-191385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:08:08.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:08:08.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:08:08.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:08:08.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:08:08.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:08:08.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:08:08.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:08:08.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:08:08.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:08:08.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.755323 -999.00  +11.60  24.60     57   +3.40 1 1 1 1 1    20    0 7.58 -27.78 ..... 32.8 24.6 166.4 38.4 12.1 -25.5 12.0 -24.6 11.8 -23.4 12.2 -24.9
2026-02-14T20:08:08.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:08:08.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:08:08.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.755323
2026-02-14T20:08:08.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:08:08.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:08:08.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:08:08.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:08:08.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:08:08.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:07:52', tmtdew=9.6, humidity=51.53, cloud=0.0, wind=35.08, temperature=11.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:07:39.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:08:08.387 [DEBUG] [Thread-191385] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:08:08.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-14T20:08:08.483 [DEBUG] [Thread-191388] [transport.py] [_log()] starting thread (client mode): 0xa5773610
2026-02-14T20:08:08.483 [DEBUG] [Thread-191388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:08:08.501 [DEBUG] [Thread-191388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:08:08.501 [INFO] [Thread-191388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:08:08.508 [DEBUG] [Thread-191388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:08:08.509 [DEBUG] [Thread-191388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:08:08.509 [DEBUG] [Thread-191388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:08:08.509 [DEBUG] [Thread-191388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:08:08.509 [DEBUG] [Thread-191388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:08:08.509 [DEBUG] [Thread-191388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:08:08.509 [DEBUG] [Thread-191388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:08:08.509 [DEBUG] [Thread-191388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:08:08.509 [DEBUG] [Thread-191388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:08:08.510 [DEBUG] [Thread-191388] [transport.py] [_log()] client lang: <none>
2026-02-14T20:08:08.510 [DEBUG] [Thread-191388] [transport.py] [_log()] server lang: <none>
2026-02-14T20:08:08.510 [DEBUG] [Thread-191388] [transport.py] [_log()] kex follows: False
2026-02-14T20:08:08.510 [DEBUG] [Thread-191388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:08:08.510 [DEBUG] [Thread-191388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:08:08.510 [DEBUG] [Thread-191388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:08:08.510 [DEBUG] [Thread-191388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:08:08.510 [DEBUG] [Thread-191388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:08:08.511 [DEBUG] [Thread-191388] [transport.py] [_log()] Compression: none
2026-02-14T20:08:08.511 [DEBUG] [Thread-191388] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:08:08.573 [DEBUG] [Thread-191388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:08:08.574 [DEBUG] [Thread-191388] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:08:08.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:08:08.575 [DEBUG] [Thread-191388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:08:08.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:08:08.631 [DEBUG] [Thread-191388] [transport.py] [_log()] userauth is OK
2026-02-14T20:08:08.631 [DEBUG] [Thread-191388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:08:08.632 [DEBUG] [Thread-191388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:08:08.632 [DEBUG] [Thread-191388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:08:08.632 [DEBUG] [Thread-191388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:08:08.650 [INFO] [Thread-191388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:08:08.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-14T20:08:08.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:08:09.451 [DEBUG] [Thread-191388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:08:09.451 [DEBUG] [Thread-191388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:08:09.499 [DEBUG] [Thread-191388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:08:09.499 [DEBUG] [Thread-191388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:08:09.507 [DEBUG] [Thread-191388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:08:09.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:08:09.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')
2026-02-14T20:08:09.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-14T20:08:09.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:08:09.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:08:09.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:08:09.542 [DEBUG] [Thread-191388] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:08:15.815 [DEBUG] [Thread-191390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:08:30.868 [DEBUG] [Thread-191391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:08:39.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:08:39.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:08:39.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-14T20:08:41.364 [DEBUG] [Thread-191392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:08:41.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 8, 28), 9.6, 51.54, 0.0, 32.96, 11.76, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:08:41.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:08:28
2026-02-14T20:08:42.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:08:42.203 [DEBUG] [Thread-191393] [transport.py] [_log()] starting thread (client mode): 0xa57e0ca0
2026-02-14T20:08:42.203 [DEBUG] [Thread-191393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:08:42.224 [DEBUG] [Thread-191393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:08:42.224 [INFO] [Thread-191393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:08:42.228 [DEBUG] [Thread-191393] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:08:42.228 [DEBUG] [Thread-191393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:08:42.228 [DEBUG] [Thread-191393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:08:42.228 [DEBUG] [Thread-191393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:08:42.228 [DEBUG] [Thread-191393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:08:42.228 [DEBUG] [Thread-191393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:08:42.228 [DEBUG] [Thread-191393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:08:42.228 [DEBUG] [Thread-191393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:08:42.228 [DEBUG] [Thread-191393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:08:42.228 [DEBUG] [Thread-191393] [transport.py] [_log()] client lang: <none>
2026-02-14T20:08:42.228 [DEBUG] [Thread-191393] [transport.py] [_log()] server lang: <none>
2026-02-14T20:08:42.228 [DEBUG] [Thread-191393] [transport.py] [_log()] kex follows: False
2026-02-14T20:08:42.228 [DEBUG] [Thread-191393] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:08:42.228 [DEBUG] [Thread-191393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:08:42.228 [DEBUG] [Thread-191393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:08:42.228 [DEBUG] [Thread-191393] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:08:42.228 [DEBUG] [Thread-191393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:08:42.228 [DEBUG] [Thread-191393] [transport.py] [_log()] Compression: none
2026-02-14T20:08:42.228 [DEBUG] [Thread-191393] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:08:42.246 [DEBUG] [Thread-191393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:08:42.246 [DEBUG] [Thread-191393] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:08:42.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:08:42.248 [DEBUG] [Thread-191393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:08:42.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:08:42.250 [DEBUG] [Thread-191393] [transport.py] [_log()] userauth is OK
2026-02-14T20:08:42.250 [DEBUG] [Thread-191393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:08:42.251 [DEBUG] [Thread-191393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:08:42.251 [DEBUG] [Thread-191393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:08:42.251 [DEBUG] [Thread-191393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:08:42.288 [INFO] [Thread-191393] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:08:42.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:08:42.899 [DEBUG] [Thread-191393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:08:42.900 [DEBUG] [Thread-191393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:08:42.900 [DEBUG] [Thread-191393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:08:42.941 [DEBUG] [Thread-191393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:08:42.941 [DEBUG] [Thread-191393] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:08:42.943 [DEBUG] [Thread-191393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:08:42.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:08:42.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:08:42.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:08:42.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:08:42.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:08:42.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:08:42.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:08:42.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:08:42.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:08:42.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.755670 -999.00  +11.60  29.09     57   +3.40 1 1 1 1 1    18    0 7.67 -28.36 ..... 26.1 29.1 161.8 37.1 12.2 -25.6 12.0 -24.6 11.8 -23.7 12.1 -24.8
2026-02-14T20:08:42.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:08:42.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:08:42.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.755670
2026-02-14T20:08:42.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:08:42.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:08:42.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:08:42.966 [DEBUG] [Thread-191393] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:08:42.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:08:42.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:08:42.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:08:28', tmtdew=9.6, humidity=51.54, cloud=0.0, wind=32.96, temperature=11.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:08:09.888', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:08:43.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-14T20:08:43.063 [DEBUG] [Thread-191396] [transport.py] [_log()] starting thread (client mode): 0xa57e2440
2026-02-14T20:08:43.063 [DEBUG] [Thread-191396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:08:43.080 [DEBUG] [Thread-191396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:08:43.080 [INFO] [Thread-191396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:08:43.087 [DEBUG] [Thread-191396] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:08:43.087 [DEBUG] [Thread-191396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:08:43.088 [DEBUG] [Thread-191396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:08:43.088 [DEBUG] [Thread-191396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:08:43.088 [DEBUG] [Thread-191396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:08:43.088 [DEBUG] [Thread-191396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:08:43.088 [DEBUG] [Thread-191396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:08:43.088 [DEBUG] [Thread-191396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:08:43.088 [DEBUG] [Thread-191396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:08:43.088 [DEBUG] [Thread-191396] [transport.py] [_log()] client lang: <none>
2026-02-14T20:08:43.088 [DEBUG] [Thread-191396] [transport.py] [_log()] server lang: <none>
2026-02-14T20:08:43.088 [DEBUG] [Thread-191396] [transport.py] [_log()] kex follows: False
2026-02-14T20:08:43.088 [DEBUG] [Thread-191396] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:08:43.088 [DEBUG] [Thread-191396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:08:43.088 [DEBUG] [Thread-191396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:08:43.088 [DEBUG] [Thread-191396] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:08:43.088 [DEBUG] [Thread-191396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:08:43.088 [DEBUG] [Thread-191396] [transport.py] [_log()] Compression: none
2026-02-14T20:08:43.088 [DEBUG] [Thread-191396] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:08:43.146 [DEBUG] [Thread-191396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:08:43.147 [DEBUG] [Thread-191396] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:08:43.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:08:43.148 [DEBUG] [Thread-191396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:08:43.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:08:43.203 [DEBUG] [Thread-191396] [transport.py] [_log()] userauth is OK
2026-02-14T20:08:43.204 [DEBUG] [Thread-191396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:08:43.204 [DEBUG] [Thread-191396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:08:43.204 [DEBUG] [Thread-191396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:08:43.204 [DEBUG] [Thread-191396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:08:43.232 [INFO] [Thread-191396] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:08:43.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T20:08:43.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:08:44.072 [DEBUG] [Thread-191396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:08:44.072 [DEBUG] [Thread-191396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:08:44.120 [DEBUG] [Thread-191396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:08:44.120 [DEBUG] [Thread-191396] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:08:44.129 [DEBUG] [Thread-191396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:08:44.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:08:44.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-14T20:08:44.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-14T20:08:44.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:08:44.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:08:44.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:08:44.165 [DEBUG] [Thread-191396] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:08:45.901 [DEBUG] [Thread-191398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:08:51.600 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:08:51.601 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:09:00.954 [DEBUG] [Thread-191399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:09:14.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:09:14.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:09:14.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-14T20:09:15.991 [DEBUG] [Thread-191400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:09:16.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 9, 5), 9.61, 51.49, 0.0, 34.49, 11.71, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:09:16.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:09:05
2026-02-14T20:09:16.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:09:16.683 [DEBUG] [Thread-191401] [transport.py] [_log()] starting thread (client mode): 0xa57e2e90
2026-02-14T20:09:16.684 [DEBUG] [Thread-191401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:09:16.704 [DEBUG] [Thread-191401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:09:16.704 [INFO] [Thread-191401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:09:16.705 [DEBUG] [Thread-191401] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:09:16.705 [DEBUG] [Thread-191401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:09:16.705 [DEBUG] [Thread-191401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:09:16.705 [DEBUG] [Thread-191401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:09:16.705 [DEBUG] [Thread-191401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:09:16.705 [DEBUG] [Thread-191401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:09:16.705 [DEBUG] [Thread-191401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:09:16.705 [DEBUG] [Thread-191401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:09:16.705 [DEBUG] [Thread-191401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:09:16.705 [DEBUG] [Thread-191401] [transport.py] [_log()] client lang: <none>
2026-02-14T20:09:16.705 [DEBUG] [Thread-191401] [transport.py] [_log()] server lang: <none>
2026-02-14T20:09:16.705 [DEBUG] [Thread-191401] [transport.py] [_log()] kex follows: False
2026-02-14T20:09:16.705 [DEBUG] [Thread-191401] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:09:16.705 [DEBUG] [Thread-191401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:09:16.706 [DEBUG] [Thread-191401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:09:16.706 [DEBUG] [Thread-191401] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:09:16.706 [DEBUG] [Thread-191401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:09:16.706 [DEBUG] [Thread-191401] [transport.py] [_log()] Compression: none
2026-02-14T20:09:16.706 [DEBUG] [Thread-191401] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:09:16.715 [DEBUG] [Thread-191401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:09:16.716 [DEBUG] [Thread-191401] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:09:16.716 [DEBUG] [Thread-191401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:09:16.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:09:16.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:09:16.717 [DEBUG] [Thread-191401] [transport.py] [_log()] userauth is OK
2026-02-14T20:09:16.717 [DEBUG] [Thread-191401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:09:16.717 [DEBUG] [Thread-191401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:09:16.718 [DEBUG] [Thread-191401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:09:16.718 [DEBUG] [Thread-191401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:09:16.748 [INFO] [Thread-191401] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:09:16.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:09:17.462 [DEBUG] [Thread-191401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:09:17.463 [DEBUG] [Thread-191401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:09:17.463 [DEBUG] [Thread-191401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:09:17.503 [DEBUG] [Thread-191401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:09:17.503 [DEBUG] [Thread-191401] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:09:17.507 [DEBUG] [Thread-191401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:09:17.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:09:17.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:09:17.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:09:17.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:09:17.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:09:17.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:09:17.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:09:17.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:09:17.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:09:17.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.756017 -999.00  +11.60  29.04     57   +3.40 1 1 1 1 1    17    0 7.48 -29.93 ..... 26.5 29.0 165.0 36.8 12.1 -25.6 11.9 -24.5 11.8 -23.5 12.1 -24.7
2026-02-14T20:09:17.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:09:17.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:09:17.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.756017
2026-02-14T20:09:17.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:09:17.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:09:17.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:09:17.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:09:17.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:09:17.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:09:05', tmtdew=9.61, humidity=51.49, cloud=0.0, wind=34.49, temperature=11.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:08:39.869', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:09:17.520 [DEBUG] [Thread-191401] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:09:17.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-14T20:09:17.604 [DEBUG] [Thread-191404] [transport.py] [_log()] starting thread (client mode): 0xa5741ae0
2026-02-14T20:09:17.604 [DEBUG] [Thread-191404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:09:17.622 [DEBUG] [Thread-191404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:09:17.622 [INFO] [Thread-191404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:09:17.630 [DEBUG] [Thread-191404] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:09:17.630 [DEBUG] [Thread-191404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:09:17.630 [DEBUG] [Thread-191404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:09:17.631 [DEBUG] [Thread-191404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:09:17.631 [DEBUG] [Thread-191404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:09:17.631 [DEBUG] [Thread-191404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:09:17.631 [DEBUG] [Thread-191404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:09:17.631 [DEBUG] [Thread-191404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:09:17.631 [DEBUG] [Thread-191404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:09:17.631 [DEBUG] [Thread-191404] [transport.py] [_log()] client lang: <none>
2026-02-14T20:09:17.631 [DEBUG] [Thread-191404] [transport.py] [_log()] server lang: <none>
2026-02-14T20:09:17.631 [DEBUG] [Thread-191404] [transport.py] [_log()] kex follows: False
2026-02-14T20:09:17.631 [DEBUG] [Thread-191404] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:09:17.631 [DEBUG] [Thread-191404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:09:17.631 [DEBUG] [Thread-191404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:09:17.631 [DEBUG] [Thread-191404] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:09:17.631 [DEBUG] [Thread-191404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:09:17.631 [DEBUG] [Thread-191404] [transport.py] [_log()] Compression: none
2026-02-14T20:09:17.631 [DEBUG] [Thread-191404] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:09:17.687 [DEBUG] [Thread-191404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:09:17.687 [DEBUG] [Thread-191404] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:09:17.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:09:17.688 [DEBUG] [Thread-191404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:09:17.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:09:17.743 [DEBUG] [Thread-191404] [transport.py] [_log()] userauth is OK
2026-02-14T20:09:17.744 [DEBUG] [Thread-191404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:09:17.744 [DEBUG] [Thread-191404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:09:17.744 [DEBUG] [Thread-191404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:09:17.744 [DEBUG] [Thread-191404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:09:17.769 [INFO] [Thread-191404] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:09:17.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-14T20:09:17.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:09:18.568 [DEBUG] [Thread-191404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:09:18.569 [DEBUG] [Thread-191404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:09:18.616 [DEBUG] [Thread-191404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:09:18.617 [DEBUG] [Thread-191404] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:09:18.626 [DEBUG] [Thread-191404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:09:18.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:09:18.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-14T20:09:18.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:09:18.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:09:18.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:09:18.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:09:18.663 [DEBUG] [Thread-191404] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:09:31.023 [DEBUG] [Thread-191406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:09:41.441 [DEBUG] [Thread-191407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:09:46.077 [DEBUG] [Thread-191408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:09:48.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:09:48.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:09:48.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-14T20:09:50.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 9, 41), 9.81, 51.05, 0.0, 37.93, 12.09, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:09:50.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:09:41
2026-02-14T20:09:50.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:09:51.041 [DEBUG] [Thread-191409] [transport.py] [_log()] starting thread (client mode): 0xa57c2260
2026-02-14T20:09:51.041 [DEBUG] [Thread-191409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:09:51.062 [DEBUG] [Thread-191409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:09:51.062 [INFO] [Thread-191409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:09:51.066 [DEBUG] [Thread-191409] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:09:51.066 [DEBUG] [Thread-191409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:09:51.066 [DEBUG] [Thread-191409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:09:51.066 [DEBUG] [Thread-191409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:09:51.066 [DEBUG] [Thread-191409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:09:51.066 [DEBUG] [Thread-191409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:09:51.066 [DEBUG] [Thread-191409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:09:51.066 [DEBUG] [Thread-191409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:09:51.066 [DEBUG] [Thread-191409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:09:51.066 [DEBUG] [Thread-191409] [transport.py] [_log()] client lang: <none>
2026-02-14T20:09:51.066 [DEBUG] [Thread-191409] [transport.py] [_log()] server lang: <none>
2026-02-14T20:09:51.066 [DEBUG] [Thread-191409] [transport.py] [_log()] kex follows: False
2026-02-14T20:09:51.066 [DEBUG] [Thread-191409] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:09:51.066 [DEBUG] [Thread-191409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:09:51.066 [DEBUG] [Thread-191409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:09:51.066 [DEBUG] [Thread-191409] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:09:51.066 [DEBUG] [Thread-191409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:09:51.066 [DEBUG] [Thread-191409] [transport.py] [_log()] Compression: none
2026-02-14T20:09:51.066 [DEBUG] [Thread-191409] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:09:51.083 [DEBUG] [Thread-191409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:09:51.083 [DEBUG] [Thread-191409] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:09:51.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:09:51.084 [DEBUG] [Thread-191409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:09:51.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:09:51.086 [DEBUG] [Thread-191409] [transport.py] [_log()] userauth is OK
2026-02-14T20:09:51.086 [DEBUG] [Thread-191409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:09:51.086 [DEBUG] [Thread-191409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:09:51.086 [DEBUG] [Thread-191409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:09:51.086 [DEBUG] [Thread-191409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:09:51.103 [INFO] [Thread-191409] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:09:51.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:09:51.680 [DEBUG] [Thread-191409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:09:51.681 [DEBUG] [Thread-191409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:09:51.681 [DEBUG] [Thread-191409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:09:51.722 [DEBUG] [Thread-191409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:09:51.723 [DEBUG] [Thread-191409] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:09:51.726 [DEBUG] [Thread-191409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:09:51.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:09:51.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:09:51.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:09:51.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:09:51.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:09:51.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:09:51.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:09:51.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:09:51.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:09:51.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.756364 -999.00  +11.60  28.43     57   +3.40 1 1 1 1 1    15    0 7.55 -29.26 ..... 28.1 28.4 162.0 35.0 12.1 -25.5 12.0 -24.4 11.7 -23.6 12.1 -24.7
2026-02-14T20:09:51.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:09:51.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:09:51.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.756364
2026-02-14T20:09:51.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:09:51.743 [DEBUG] [Thread-191409] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:09:51.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:09:51.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:09:51.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:09:51.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:09:51.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:09:41', tmtdew=9.81, humidity=51.05, cloud=0.0, wind=37.93, temperature=12.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:09:09.850', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:09:51.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-14T20:09:51.834 [DEBUG] [Thread-191412] [transport.py] [_log()] starting thread (client mode): 0xa57d50f0
2026-02-14T20:09:51.834 [DEBUG] [Thread-191412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:09:51.849 [DEBUG] [Thread-191412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:09:51.849 [INFO] [Thread-191412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:09:51.856 [DEBUG] [Thread-191412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:09:51.857 [DEBUG] [Thread-191412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:09:51.857 [DEBUG] [Thread-191412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:09:51.857 [DEBUG] [Thread-191412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:09:51.857 [DEBUG] [Thread-191412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:09:51.857 [DEBUG] [Thread-191412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:09:51.857 [DEBUG] [Thread-191412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:09:51.857 [DEBUG] [Thread-191412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:09:51.857 [DEBUG] [Thread-191412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:09:51.857 [DEBUG] [Thread-191412] [transport.py] [_log()] client lang: <none>
2026-02-14T20:09:51.857 [DEBUG] [Thread-191412] [transport.py] [_log()] server lang: <none>
2026-02-14T20:09:51.857 [DEBUG] [Thread-191412] [transport.py] [_log()] kex follows: False
2026-02-14T20:09:51.857 [DEBUG] [Thread-191412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:09:51.857 [DEBUG] [Thread-191412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:09:51.857 [DEBUG] [Thread-191412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:09:51.857 [DEBUG] [Thread-191412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:09:51.857 [DEBUG] [Thread-191412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:09:51.857 [DEBUG] [Thread-191412] [transport.py] [_log()] Compression: none
2026-02-14T20:09:51.857 [DEBUG] [Thread-191412] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:09:51.914 [DEBUG] [Thread-191412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:09:51.915 [DEBUG] [Thread-191412] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:09:51.916 [DEBUG] [Thread-191412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:09:51.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:09:51.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:09:51.971 [DEBUG] [Thread-191412] [transport.py] [_log()] userauth is OK
2026-02-14T20:09:51.971 [DEBUG] [Thread-191412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:09:51.971 [DEBUG] [Thread-191412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:09:51.972 [DEBUG] [Thread-191412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:09:51.972 [DEBUG] [Thread-191412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:09:51.996 [INFO] [Thread-191412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:09:52.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-14T20:09:52.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:09:52.810 [DEBUG] [Thread-191412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:09:52.810 [DEBUG] [Thread-191412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:09:52.857 [DEBUG] [Thread-191412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:09:52.858 [DEBUG] [Thread-191412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:09:52.866 [DEBUG] [Thread-191412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:09:52.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:09:52.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:09:52.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:09:52.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:09:52.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:09:52.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:09:52.897 [DEBUG] [Thread-191412] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:09:55.388 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:09:55.389 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:10:01.113 [DEBUG] [Thread-191414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:10:16.166 [DEBUG] [Thread-191415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:10:22.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:10:22.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:10:22.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-14T20:10:24.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 10, 16), 9.54, 52.08, 0.0, 30.95, 11.71, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:10:24.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:10:16
2026-02-14T20:10:25.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:10:25.411 [DEBUG] [Thread-191416] [transport.py] [_log()] starting thread (client mode): 0xa57e3a30
2026-02-14T20:10:25.411 [DEBUG] [Thread-191416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:10:25.431 [DEBUG] [Thread-191416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:10:25.431 [INFO] [Thread-191416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:10:25.434 [DEBUG] [Thread-191416] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:10:25.434 [DEBUG] [Thread-191416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:10:25.434 [DEBUG] [Thread-191416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:10:25.435 [DEBUG] [Thread-191416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:10:25.435 [DEBUG] [Thread-191416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:10:25.435 [DEBUG] [Thread-191416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:10:25.435 [DEBUG] [Thread-191416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:10:25.435 [DEBUG] [Thread-191416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:10:25.435 [DEBUG] [Thread-191416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:10:25.435 [DEBUG] [Thread-191416] [transport.py] [_log()] client lang: <none>
2026-02-14T20:10:25.435 [DEBUG] [Thread-191416] [transport.py] [_log()] server lang: <none>
2026-02-14T20:10:25.435 [DEBUG] [Thread-191416] [transport.py] [_log()] kex follows: False
2026-02-14T20:10:25.435 [DEBUG] [Thread-191416] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:10:25.435 [DEBUG] [Thread-191416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:10:25.436 [DEBUG] [Thread-191416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:10:25.436 [DEBUG] [Thread-191416] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:10:25.437 [DEBUG] [Thread-191416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:10:25.437 [DEBUG] [Thread-191416] [transport.py] [_log()] Compression: none
2026-02-14T20:10:25.437 [DEBUG] [Thread-191416] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:10:25.453 [DEBUG] [Thread-191416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:10:25.453 [DEBUG] [Thread-191416] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:10:25.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:10:25.454 [DEBUG] [Thread-191416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:10:25.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:10:25.457 [DEBUG] [Thread-191416] [transport.py] [_log()] userauth is OK
2026-02-14T20:10:25.457 [DEBUG] [Thread-191416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:10:25.457 [DEBUG] [Thread-191416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:10:25.457 [DEBUG] [Thread-191416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:10:25.457 [DEBUG] [Thread-191416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:10:25.482 [INFO] [Thread-191416] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:10:25.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:10:26.135 [DEBUG] [Thread-191416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:10:26.135 [DEBUG] [Thread-191416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:10:26.135 [DEBUG] [Thread-191416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:10:26.176 [DEBUG] [Thread-191416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:10:26.177 [DEBUG] [Thread-191416] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:10:26.180 [DEBUG] [Thread-191416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:10:26.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:10:26.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:10:26.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:10:26.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:10:26.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:10:26.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:10:26.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:10:26.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:10:26.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:10:26.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.756712 -999.00  +11.60  29.86     57   +3.40 1 1 1 1 1    14    0 7.67 -31.20 ..... 31.7 29.9 159.6 37.1 12.1 -25.6 12.0 -24.7 11.8 -23.7 12.1 -24.7
2026-02-14T20:10:26.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:10:26.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:10:26.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.756712
2026-02-14T20:10:26.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:10:26.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:10:26.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:10:26.208 [DEBUG] [Thread-191416] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:10:26.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:10:26.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:10:26.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:10:16', tmtdew=9.54, humidity=52.08, cloud=0.0, wind=30.95, temperature=11.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:09:39.917', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:10:26.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-14T20:10:26.297 [DEBUG] [Thread-191419] [transport.py] [_log()] starting thread (client mode): 0xa2d10a30
2026-02-14T20:10:26.297 [DEBUG] [Thread-191419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:10:26.312 [DEBUG] [Thread-191419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:10:26.312 [INFO] [Thread-191419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:10:26.319 [DEBUG] [Thread-191419] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:10:26.319 [DEBUG] [Thread-191419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:10:26.320 [DEBUG] [Thread-191419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:10:26.320 [DEBUG] [Thread-191419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:10:26.320 [DEBUG] [Thread-191419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:10:26.320 [DEBUG] [Thread-191419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:10:26.320 [DEBUG] [Thread-191419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:10:26.320 [DEBUG] [Thread-191419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:10:26.320 [DEBUG] [Thread-191419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:10:26.320 [DEBUG] [Thread-191419] [transport.py] [_log()] client lang: <none>
2026-02-14T20:10:26.320 [DEBUG] [Thread-191419] [transport.py] [_log()] server lang: <none>
2026-02-14T20:10:26.320 [DEBUG] [Thread-191419] [transport.py] [_log()] kex follows: False
2026-02-14T20:10:26.321 [DEBUG] [Thread-191419] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:10:26.321 [DEBUG] [Thread-191419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:10:26.321 [DEBUG] [Thread-191419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:10:26.321 [DEBUG] [Thread-191419] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:10:26.321 [DEBUG] [Thread-191419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:10:26.321 [DEBUG] [Thread-191419] [transport.py] [_log()] Compression: none
2026-02-14T20:10:26.321 [DEBUG] [Thread-191419] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:10:26.379 [DEBUG] [Thread-191419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:10:26.380 [DEBUG] [Thread-191419] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:10:26.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:10:26.381 [DEBUG] [Thread-191419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:10:26.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:10:26.438 [DEBUG] [Thread-191419] [transport.py] [_log()] userauth is OK
2026-02-14T20:10:26.439 [DEBUG] [Thread-191419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:10:26.439 [DEBUG] [Thread-191419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:10:26.439 [DEBUG] [Thread-191419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:10:26.439 [DEBUG] [Thread-191419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:10:26.457 [INFO] [Thread-191419] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:10:26.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-14T20:10:26.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:10:27.337 [DEBUG] [Thread-191419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:10:27.337 [DEBUG] [Thread-191419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:10:27.385 [DEBUG] [Thread-191419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:10:27.385 [DEBUG] [Thread-191419] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:10:27.393 [DEBUG] [Thread-191419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:10:27.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:10:27.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-14T20:10:27.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-14T20:10:27.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:10:27.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:10:27.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:10:27.425 [DEBUG] [Thread-191419] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:10:31.203 [DEBUG] [Thread-191421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:10:41.510 [DEBUG] [Thread-191422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:10:46.265 [DEBUG] [Thread-191423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:10:57.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:10:57.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:10:57.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:10:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 10, 51), 9.54, 52.08, 0.0, 34.12, 11.68, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:10:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:10:51
2026-02-14T20:10:59.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:10:59.874 [DEBUG] [Thread-191424] [transport.py] [_log()] starting thread (client mode): 0xa57e0a00
2026-02-14T20:10:59.875 [DEBUG] [Thread-191424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:10:59.894 [DEBUG] [Thread-191424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:10:59.894 [INFO] [Thread-191424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:10:59.897 [DEBUG] [Thread-191424] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:10:59.897 [DEBUG] [Thread-191424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:10:59.897 [DEBUG] [Thread-191424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:10:59.897 [DEBUG] [Thread-191424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:10:59.897 [DEBUG] [Thread-191424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:10:59.898 [DEBUG] [Thread-191424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:10:59.898 [DEBUG] [Thread-191424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:10:59.898 [DEBUG] [Thread-191424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:10:59.898 [DEBUG] [Thread-191424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:10:59.898 [DEBUG] [Thread-191424] [transport.py] [_log()] client lang: <none>
2026-02-14T20:10:59.898 [DEBUG] [Thread-191424] [transport.py] [_log()] server lang: <none>
2026-02-14T20:10:59.898 [DEBUG] [Thread-191424] [transport.py] [_log()] kex follows: False
2026-02-14T20:10:59.898 [DEBUG] [Thread-191424] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:10:59.898 [DEBUG] [Thread-191424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:10:59.898 [DEBUG] [Thread-191424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:10:59.898 [DEBUG] [Thread-191424] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:10:59.898 [DEBUG] [Thread-191424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:10:59.898 [DEBUG] [Thread-191424] [transport.py] [_log()] Compression: none
2026-02-14T20:10:59.898 [DEBUG] [Thread-191424] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:10:59.914 [DEBUG] [Thread-191424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:10:59.915 [DEBUG] [Thread-191424] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:10:59.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:10:59.916 [DEBUG] [Thread-191424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:10:59.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:10:59.918 [DEBUG] [Thread-191424] [transport.py] [_log()] userauth is OK
2026-02-14T20:10:59.919 [DEBUG] [Thread-191424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:10:59.919 [DEBUG] [Thread-191424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:10:59.919 [DEBUG] [Thread-191424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:10:59.919 [DEBUG] [Thread-191424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:10:59.954 [INFO] [Thread-191424] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:10:59.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:11:00.139 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:11:00.140 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:11:00.592 [DEBUG] [Thread-191424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:11:00.592 [DEBUG] [Thread-191424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:11:00.592 [DEBUG] [Thread-191424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:11:00.634 [DEBUG] [Thread-191424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:11:00.634 [DEBUG] [Thread-191424] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:11:00.637 [DEBUG] [Thread-191424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:11:00.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:11:00.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:11:00.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:11:00.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:11:00.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:11:00.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:11:00.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:11:00.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:11:00.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:11:00.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.757059 -999.00  +11.50  29.85     57   +3.40 1 1 1 1 1    12    0 7.40 -33.45 ..... 32.1 29.9 174.0 38.1 12.1 -25.7 11.9 -24.6 11.7 -23.6 12.1 -24.9
2026-02-14T20:11:00.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:11:00.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:11:00.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.757059
2026-02-14T20:11:00.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:11:00.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:11:00.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:11:00.662 [DEBUG] [Thread-191424] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:11:00.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:11:00.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:11:00.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:10:51', tmtdew=9.54, humidity=52.08, cloud=0.0, wind=34.12, temperature=11.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:10:09.898', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:11:00.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-14T20:11:00.762 [DEBUG] [Thread-191427] [transport.py] [_log()] starting thread (client mode): 0xa57e1f00
2026-02-14T20:11:00.762 [DEBUG] [Thread-191427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:11:00.777 [DEBUG] [Thread-191427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:11:00.778 [INFO] [Thread-191427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:11:00.785 [DEBUG] [Thread-191427] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:11:00.785 [DEBUG] [Thread-191427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:11:00.785 [DEBUG] [Thread-191427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:11:00.785 [DEBUG] [Thread-191427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:11:00.786 [DEBUG] [Thread-191427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:11:00.786 [DEBUG] [Thread-191427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:11:00.786 [DEBUG] [Thread-191427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:11:00.786 [DEBUG] [Thread-191427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:11:00.786 [DEBUG] [Thread-191427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:11:00.786 [DEBUG] [Thread-191427] [transport.py] [_log()] client lang: <none>
2026-02-14T20:11:00.786 [DEBUG] [Thread-191427] [transport.py] [_log()] server lang: <none>
2026-02-14T20:11:00.786 [DEBUG] [Thread-191427] [transport.py] [_log()] kex follows: False
2026-02-14T20:11:00.786 [DEBUG] [Thread-191427] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:11:00.786 [DEBUG] [Thread-191427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:11:00.786 [DEBUG] [Thread-191427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:11:00.786 [DEBUG] [Thread-191427] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:11:00.786 [DEBUG] [Thread-191427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:11:00.786 [DEBUG] [Thread-191427] [transport.py] [_log()] Compression: none
2026-02-14T20:11:00.786 [DEBUG] [Thread-191427] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:11:00.842 [DEBUG] [Thread-191427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:11:00.843 [DEBUG] [Thread-191427] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:11:00.843 [DEBUG] [Thread-191427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:11:00.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:11:00.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:11:00.899 [DEBUG] [Thread-191427] [transport.py] [_log()] userauth is OK
2026-02-14T20:11:00.899 [DEBUG] [Thread-191427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:11:00.899 [DEBUG] [Thread-191427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:11:00.899 [DEBUG] [Thread-191427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:11:00.899 [DEBUG] [Thread-191427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:11:00.917 [INFO] [Thread-191427] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:11:00.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-14T20:11:00.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:11:01.300 [DEBUG] [Thread-191429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:11:01.726 [DEBUG] [Thread-191427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:11:01.727 [DEBUG] [Thread-191427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:11:01.775 [DEBUG] [Thread-191427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:11:01.775 [DEBUG] [Thread-191427] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:11:01.784 [DEBUG] [Thread-191427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:11:01.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:11:01.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-14T20:11:01.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-14T20:11:01.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:11:01.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:11:01.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:11:01.821 [DEBUG] [Thread-191427] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:11:16.341 [DEBUG] [Thread-191430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:11:31.376 [DEBUG] [Thread-191431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:11:31.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:11:31.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:11:31.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:11:33.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 10, 51), 9.54, 52.08, 0.0, 34.12, 11.68, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:11:33.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:10:51
2026-02-14T20:11:34.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:11:34.379 [DEBUG] [Thread-191432] [transport.py] [_log()] starting thread (client mode): 0xa57e0280
2026-02-14T20:11:34.379 [DEBUG] [Thread-191432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:11:34.398 [DEBUG] [Thread-191432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:11:34.398 [INFO] [Thread-191432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:11:34.401 [DEBUG] [Thread-191432] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:11:34.401 [DEBUG] [Thread-191432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:11:34.401 [DEBUG] [Thread-191432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:11:34.401 [DEBUG] [Thread-191432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:11:34.401 [DEBUG] [Thread-191432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:11:34.402 [DEBUG] [Thread-191432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:11:34.402 [DEBUG] [Thread-191432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:11:34.402 [DEBUG] [Thread-191432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:11:34.402 [DEBUG] [Thread-191432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:11:34.402 [DEBUG] [Thread-191432] [transport.py] [_log()] client lang: <none>
2026-02-14T20:11:34.402 [DEBUG] [Thread-191432] [transport.py] [_log()] server lang: <none>
2026-02-14T20:11:34.402 [DEBUG] [Thread-191432] [transport.py] [_log()] kex follows: False
2026-02-14T20:11:34.402 [DEBUG] [Thread-191432] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:11:34.402 [DEBUG] [Thread-191432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:11:34.402 [DEBUG] [Thread-191432] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:11:34.402 [DEBUG] [Thread-191432] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:11:34.402 [DEBUG] [Thread-191432] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:11:34.402 [DEBUG] [Thread-191432] [transport.py] [_log()] Compression: none
2026-02-14T20:11:34.402 [DEBUG] [Thread-191432] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:11:34.420 [DEBUG] [Thread-191432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:11:34.421 [DEBUG] [Thread-191432] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:11:34.421 [DEBUG] [Thread-191432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:11:34.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:11:34.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:11:34.423 [DEBUG] [Thread-191432] [transport.py] [_log()] userauth is OK
2026-02-14T20:11:34.423 [DEBUG] [Thread-191432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:11:34.423 [DEBUG] [Thread-191432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:11:34.424 [DEBUG] [Thread-191432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:11:34.424 [DEBUG] [Thread-191432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:11:34.448 [INFO] [Thread-191432] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:11:34.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:11:35.092 [DEBUG] [Thread-191432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:11:35.093 [DEBUG] [Thread-191432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:11:35.093 [DEBUG] [Thread-191432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:11:35.133 [DEBUG] [Thread-191432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:11:35.133 [DEBUG] [Thread-191432] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:11:35.136 [DEBUG] [Thread-191432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:11:35.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:11:35.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:11:35.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:11:35.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:11:35.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:11:35.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:11:35.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:11:35.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:11:35.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:11:35.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.757753 -999.00  +11.50  21.02     57   +3.40 1 1 1 1 1    10    0 7.27 -34.21 ZNES. 22.2 21.0 170.0 29.3 12.1 -25.6 11.9 -24.6 11.7 -23.7 12.1 -24.9
2026-02-14T20:11:35.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:11:35.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:11:35.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.757753
2026-02-14T20:11:35.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:11:35.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:11:35.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:11:35.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:11:35.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:11:35.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:10:51', tmtdew=9.54, humidity=52.08, cloud=0.0, wind=34.12, temperature=11.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:11:09.859', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:11:35.160 [DEBUG] [Thread-191432] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:11:35.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-14T20:11:35.259 [DEBUG] [Thread-191435] [transport.py] [_log()] starting thread (client mode): 0xa57e3a90
2026-02-14T20:11:35.259 [DEBUG] [Thread-191435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:11:35.273 [DEBUG] [Thread-191435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:11:35.274 [INFO] [Thread-191435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:11:35.281 [DEBUG] [Thread-191435] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:11:35.281 [DEBUG] [Thread-191435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:11:35.281 [DEBUG] [Thread-191435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:11:35.282 [DEBUG] [Thread-191435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:11:35.282 [DEBUG] [Thread-191435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:11:35.282 [DEBUG] [Thread-191435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:11:35.282 [DEBUG] [Thread-191435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:11:35.282 [DEBUG] [Thread-191435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:11:35.282 [DEBUG] [Thread-191435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:11:35.282 [DEBUG] [Thread-191435] [transport.py] [_log()] client lang: <none>
2026-02-14T20:11:35.282 [DEBUG] [Thread-191435] [transport.py] [_log()] server lang: <none>
2026-02-14T20:11:35.282 [DEBUG] [Thread-191435] [transport.py] [_log()] kex follows: False
2026-02-14T20:11:35.282 [DEBUG] [Thread-191435] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:11:35.282 [DEBUG] [Thread-191435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:11:35.282 [DEBUG] [Thread-191435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:11:35.282 [DEBUG] [Thread-191435] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:11:35.282 [DEBUG] [Thread-191435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:11:35.282 [DEBUG] [Thread-191435] [transport.py] [_log()] Compression: none
2026-02-14T20:11:35.282 [DEBUG] [Thread-191435] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:11:35.338 [DEBUG] [Thread-191435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:11:35.338 [DEBUG] [Thread-191435] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:11:35.338 [DEBUG] [Thread-191435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:11:35.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:11:35.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:11:35.394 [DEBUG] [Thread-191435] [transport.py] [_log()] userauth is OK
2026-02-14T20:11:35.394 [DEBUG] [Thread-191435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:11:35.394 [DEBUG] [Thread-191435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:11:35.394 [DEBUG] [Thread-191435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:11:35.394 [DEBUG] [Thread-191435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:11:35.407 [INFO] [Thread-191435] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:11:35.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T20:11:35.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:11:36.243 [DEBUG] [Thread-191435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:11:36.243 [DEBUG] [Thread-191435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:11:36.291 [DEBUG] [Thread-191435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:11:36.291 [DEBUG] [Thread-191435] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:11:36.300 [DEBUG] [Thread-191435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:11:36.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:11:36.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-14T20:11:36.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-14T20:11:36.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:11:36.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:11:36.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:11:36.335 [DEBUG] [Thread-191435] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:11:41.569 [DEBUG] [Thread-191437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:11:46.412 [DEBUG] [Thread-191438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:12:01.464 [DEBUG] [Thread-191439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:12:04.544 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:12:04.545 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:12:06.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:12:06.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:12:06.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:12:08.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 11, 27), 9.54, 52.08, 0.0, 38.5, 11.66, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:12:08.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:11:27
2026-02-14T20:12:09.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:12:09.565 [DEBUG] [Thread-191440] [transport.py] [_log()] starting thread (client mode): 0xa2d00f40
2026-02-14T20:12:09.565 [DEBUG] [Thread-191440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:12:09.585 [DEBUG] [Thread-191440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:12:09.585 [INFO] [Thread-191440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:12:09.588 [DEBUG] [Thread-191440] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:12:09.588 [DEBUG] [Thread-191440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:12:09.588 [DEBUG] [Thread-191440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:12:09.588 [DEBUG] [Thread-191440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:12:09.588 [DEBUG] [Thread-191440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:12:09.588 [DEBUG] [Thread-191440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:12:09.588 [DEBUG] [Thread-191440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:12:09.588 [DEBUG] [Thread-191440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:12:09.588 [DEBUG] [Thread-191440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:12:09.588 [DEBUG] [Thread-191440] [transport.py] [_log()] client lang: <none>
2026-02-14T20:12:09.588 [DEBUG] [Thread-191440] [transport.py] [_log()] server lang: <none>
2026-02-14T20:12:09.588 [DEBUG] [Thread-191440] [transport.py] [_log()] kex follows: False
2026-02-14T20:12:09.588 [DEBUG] [Thread-191440] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:12:09.589 [DEBUG] [Thread-191440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:12:09.589 [DEBUG] [Thread-191440] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:12:09.589 [DEBUG] [Thread-191440] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:12:09.589 [DEBUG] [Thread-191440] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:12:09.589 [DEBUG] [Thread-191440] [transport.py] [_log()] Compression: none
2026-02-14T20:12:09.589 [DEBUG] [Thread-191440] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:12:09.597 [DEBUG] [Thread-191440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:12:09.597 [DEBUG] [Thread-191440] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:12:09.598 [DEBUG] [Thread-191440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:12:09.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:12:09.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:12:09.599 [DEBUG] [Thread-191440] [transport.py] [_log()] userauth is OK
2026-02-14T20:12:09.599 [DEBUG] [Thread-191440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:12:09.599 [DEBUG] [Thread-191440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:12:09.599 [DEBUG] [Thread-191440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:12:09.599 [DEBUG] [Thread-191440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:12:09.622 [INFO] [Thread-191440] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:12:09.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:12:10.352 [DEBUG] [Thread-191440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:12:10.352 [DEBUG] [Thread-191440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:12:10.352 [DEBUG] [Thread-191440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:12:10.392 [DEBUG] [Thread-191440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:12:10.393 [DEBUG] [Thread-191440] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:12:10.396 [DEBUG] [Thread-191440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:12:10.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:12:10.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:12:10.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:12:10.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:12:10.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:12:10.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:12:10.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:12:10.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:12:10.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:12:10.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.758100 -999.00  +11.50  28.89     57   +3.40 1 1 1 1 1     9    0 7.36 -35.35 ZNEs. 26.8 28.9 162.6 34.7 12.0 -25.5 11.9 -24.6 11.7 -23.5 12.0 -24.7
2026-02-14T20:12:10.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:12:10.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:12:10.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.758100
2026-02-14T20:12:10.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:12:10.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:12:10.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:12:10.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:12:10.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:12:10.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:11:27', tmtdew=9.54, humidity=52.08, cloud=0.0, wind=38.5, temperature=11.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:11:39.840', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:12:10.420 [DEBUG] [Thread-191440] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:12:10.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T20:12:10.516 [DEBUG] [Thread-191443] [transport.py] [_log()] starting thread (client mode): 0xa2d02b30
2026-02-14T20:12:10.516 [DEBUG] [Thread-191443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:12:10.532 [DEBUG] [Thread-191443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:12:10.532 [INFO] [Thread-191443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:12:10.539 [DEBUG] [Thread-191443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:12:10.540 [DEBUG] [Thread-191443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:12:10.540 [DEBUG] [Thread-191443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:12:10.540 [DEBUG] [Thread-191443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:12:10.540 [DEBUG] [Thread-191443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:12:10.540 [DEBUG] [Thread-191443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:12:10.540 [DEBUG] [Thread-191443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:12:10.540 [DEBUG] [Thread-191443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:12:10.540 [DEBUG] [Thread-191443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:12:10.540 [DEBUG] [Thread-191443] [transport.py] [_log()] client lang: <none>
2026-02-14T20:12:10.540 [DEBUG] [Thread-191443] [transport.py] [_log()] server lang: <none>
2026-02-14T20:12:10.540 [DEBUG] [Thread-191443] [transport.py] [_log()] kex follows: False
2026-02-14T20:12:10.540 [DEBUG] [Thread-191443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:12:10.540 [DEBUG] [Thread-191443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:12:10.540 [DEBUG] [Thread-191443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:12:10.540 [DEBUG] [Thread-191443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:12:10.540 [DEBUG] [Thread-191443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:12:10.541 [DEBUG] [Thread-191443] [transport.py] [_log()] Compression: none
2026-02-14T20:12:10.541 [DEBUG] [Thread-191443] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:12:10.598 [DEBUG] [Thread-191443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:12:10.599 [DEBUG] [Thread-191443] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:12:10.599 [DEBUG] [Thread-191443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:12:10.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:12:10.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:12:10.654 [DEBUG] [Thread-191443] [transport.py] [_log()] userauth is OK
2026-02-14T20:12:10.654 [DEBUG] [Thread-191443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:12:10.654 [DEBUG] [Thread-191443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:12:10.654 [DEBUG] [Thread-191443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:12:10.654 [DEBUG] [Thread-191443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:12:10.668 [INFO] [Thread-191443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:12:10.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T20:12:10.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:12:11.469 [DEBUG] [Thread-191443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:12:11.470 [DEBUG] [Thread-191443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:12:11.520 [DEBUG] [Thread-191443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:12:11.520 [DEBUG] [Thread-191443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:12:11.532 [DEBUG] [Thread-191443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:12:11.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:12:11.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-14T20:12:11.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-14T20:12:11.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:12:11.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:12:11.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:12:11.572 [DEBUG] [Thread-191443] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:12:16.502 [DEBUG] [Thread-191445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:12:31.554 [DEBUG] [Thread-191446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:12:41.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:12:41.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:12:41.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-14T20:12:41.623 [DEBUG] [Thread-191447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:12:43.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 12, 2), 9.53, 52.11, 0.0, 35.82, 11.68, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:12:43.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:12:02
2026-02-14T20:12:44.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:12:44.513 [DEBUG] [Thread-191448] [transport.py] [_log()] starting thread (client mode): 0xa2d112d0
2026-02-14T20:12:44.513 [DEBUG] [Thread-191448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:12:44.533 [DEBUG] [Thread-191448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:12:44.533 [INFO] [Thread-191448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:12:44.536 [DEBUG] [Thread-191448] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:12:44.536 [DEBUG] [Thread-191448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:12:44.536 [DEBUG] [Thread-191448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:12:44.536 [DEBUG] [Thread-191448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:12:44.536 [DEBUG] [Thread-191448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:12:44.536 [DEBUG] [Thread-191448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:12:44.536 [DEBUG] [Thread-191448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:12:44.536 [DEBUG] [Thread-191448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:12:44.536 [DEBUG] [Thread-191448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:12:44.536 [DEBUG] [Thread-191448] [transport.py] [_log()] client lang: <none>
2026-02-14T20:12:44.536 [DEBUG] [Thread-191448] [transport.py] [_log()] server lang: <none>
2026-02-14T20:12:44.536 [DEBUG] [Thread-191448] [transport.py] [_log()] kex follows: False
2026-02-14T20:12:44.536 [DEBUG] [Thread-191448] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:12:44.536 [DEBUG] [Thread-191448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:12:44.536 [DEBUG] [Thread-191448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:12:44.537 [DEBUG] [Thread-191448] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:12:44.537 [DEBUG] [Thread-191448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:12:44.537 [DEBUG] [Thread-191448] [transport.py] [_log()] Compression: none
2026-02-14T20:12:44.537 [DEBUG] [Thread-191448] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:12:44.552 [DEBUG] [Thread-191448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:12:44.553 [DEBUG] [Thread-191448] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:12:44.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:12:44.554 [DEBUG] [Thread-191448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:12:44.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:12:44.556 [DEBUG] [Thread-191448] [transport.py] [_log()] userauth is OK
2026-02-14T20:12:44.556 [DEBUG] [Thread-191448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:12:44.556 [DEBUG] [Thread-191448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:12:44.557 [DEBUG] [Thread-191448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:12:44.557 [DEBUG] [Thread-191448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:12:44.577 [INFO] [Thread-191448] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:12:44.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:12:45.206 [DEBUG] [Thread-191448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:12:45.206 [DEBUG] [Thread-191448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:12:45.206 [DEBUG] [Thread-191448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:12:45.247 [DEBUG] [Thread-191448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:12:45.247 [DEBUG] [Thread-191448] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:12:45.250 [DEBUG] [Thread-191448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:12:45.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:12:45.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:12:45.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:12:45.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:12:45.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:12:45.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:12:45.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:12:45.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:12:45.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:12:45.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.758448 -999.00  +11.50  22.86     57   +3.40 1 1 1 1 1     8    0 7.23 -41.00 ZNEs. 24.3 22.9 167.8 31.6 12.0 -25.6 11.8 -24.6 11.7 -23.6 12.1 -24.7
2026-02-14T20:12:45.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:12:45.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:12:45.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.758448
2026-02-14T20:12:45.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:12:45.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:12:45.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:12:45.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:12:45.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:12:45.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:12:02', tmtdew=9.53, humidity=52.11, cloud=0.0, wind=35.82, temperature=11.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:12:09.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:12:45.275 [DEBUG] [Thread-191448] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:12:45.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-14T20:12:45.369 [DEBUG] [Thread-191451] [transport.py] [_log()] starting thread (client mode): 0xa2d12320
2026-02-14T20:12:45.369 [DEBUG] [Thread-191451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:12:45.384 [DEBUG] [Thread-191451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:12:45.384 [INFO] [Thread-191451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:12:45.391 [DEBUG] [Thread-191451] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:12:45.391 [DEBUG] [Thread-191451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:12:45.392 [DEBUG] [Thread-191451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:12:45.392 [DEBUG] [Thread-191451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:12:45.392 [DEBUG] [Thread-191451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:12:45.392 [DEBUG] [Thread-191451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:12:45.392 [DEBUG] [Thread-191451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:12:45.392 [DEBUG] [Thread-191451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:12:45.392 [DEBUG] [Thread-191451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:12:45.392 [DEBUG] [Thread-191451] [transport.py] [_log()] client lang: <none>
2026-02-14T20:12:45.392 [DEBUG] [Thread-191451] [transport.py] [_log()] server lang: <none>
2026-02-14T20:12:45.392 [DEBUG] [Thread-191451] [transport.py] [_log()] kex follows: False
2026-02-14T20:12:45.392 [DEBUG] [Thread-191451] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:12:45.392 [DEBUG] [Thread-191451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:12:45.392 [DEBUG] [Thread-191451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:12:45.392 [DEBUG] [Thread-191451] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:12:45.392 [DEBUG] [Thread-191451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:12:45.392 [DEBUG] [Thread-191451] [transport.py] [_log()] Compression: none
2026-02-14T20:12:45.392 [DEBUG] [Thread-191451] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:12:45.458 [DEBUG] [Thread-191451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:12:45.459 [DEBUG] [Thread-191451] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:12:45.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:12:45.460 [DEBUG] [Thread-191451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:12:45.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:12:45.514 [DEBUG] [Thread-191451] [transport.py] [_log()] userauth is OK
2026-02-14T20:12:45.515 [DEBUG] [Thread-191451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:12:45.515 [DEBUG] [Thread-191451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:12:45.515 [DEBUG] [Thread-191451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:12:45.515 [DEBUG] [Thread-191451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:12:45.534 [INFO] [Thread-191451] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:12:45.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-14T20:12:45.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:12:46.375 [DEBUG] [Thread-191451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:12:46.375 [DEBUG] [Thread-191451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:12:46.422 [DEBUG] [Thread-191451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:12:46.422 [DEBUG] [Thread-191451] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:12:46.432 [DEBUG] [Thread-191451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:12:46.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:12:46.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:12:46.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:12:46.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:12:46.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:12:46.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:12:46.468 [DEBUG] [Thread-191451] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:12:46.592 [DEBUG] [Thread-191453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:13:01.643 [DEBUG] [Thread-191454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:13:09.538 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:13:09.540 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:13:16.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:13:16.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:13:16.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:13:16.679 [DEBUG] [Thread-191455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:13:18.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 12, 39), 9.74, 51.25, 0.0, 44.81, 11.99, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:13:18.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:12:39
2026-02-14T20:13:18.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:13:19.054 [DEBUG] [Thread-191456] [transport.py] [_log()] starting thread (client mode): 0xa2d118d0
2026-02-14T20:13:19.054 [DEBUG] [Thread-191456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:13:19.073 [DEBUG] [Thread-191456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:13:19.073 [INFO] [Thread-191456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:13:19.077 [DEBUG] [Thread-191456] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:13:19.077 [DEBUG] [Thread-191456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:13:19.077 [DEBUG] [Thread-191456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:13:19.077 [DEBUG] [Thread-191456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:13:19.077 [DEBUG] [Thread-191456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:13:19.077 [DEBUG] [Thread-191456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:13:19.077 [DEBUG] [Thread-191456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:13:19.077 [DEBUG] [Thread-191456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:13:19.077 [DEBUG] [Thread-191456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:13:19.077 [DEBUG] [Thread-191456] [transport.py] [_log()] client lang: <none>
2026-02-14T20:13:19.077 [DEBUG] [Thread-191456] [transport.py] [_log()] server lang: <none>
2026-02-14T20:13:19.077 [DEBUG] [Thread-191456] [transport.py] [_log()] kex follows: False
2026-02-14T20:13:19.077 [DEBUG] [Thread-191456] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:13:19.078 [DEBUG] [Thread-191456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:13:19.078 [DEBUG] [Thread-191456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:13:19.078 [DEBUG] [Thread-191456] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:13:19.078 [DEBUG] [Thread-191456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:13:19.078 [DEBUG] [Thread-191456] [transport.py] [_log()] Compression: none
2026-02-14T20:13:19.078 [DEBUG] [Thread-191456] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:13:19.093 [DEBUG] [Thread-191456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:13:19.094 [DEBUG] [Thread-191456] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:13:19.094 [DEBUG] [Thread-191456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:13:19.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:13:19.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:13:19.096 [DEBUG] [Thread-191456] [transport.py] [_log()] userauth is OK
2026-02-14T20:13:19.096 [DEBUG] [Thread-191456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:13:19.097 [DEBUG] [Thread-191456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:13:19.097 [DEBUG] [Thread-191456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:13:19.097 [DEBUG] [Thread-191456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:13:19.120 [INFO] [Thread-191456] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:13:19.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:13:19.760 [DEBUG] [Thread-191456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:13:19.760 [DEBUG] [Thread-191456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:13:19.760 [DEBUG] [Thread-191456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:13:19.802 [DEBUG] [Thread-191456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:13:19.802 [DEBUG] [Thread-191456] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:13:19.805 [DEBUG] [Thread-191456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:13:19.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:13:19.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:13:19.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:13:19.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:13:19.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:13:19.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:13:19.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:13:19.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:13:19.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:13:19.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.758795 -999.00  +11.50  24.93     57   +3.40 1 1 1 1 1     7    0 7.23 -41.63 ZNEs. 21.8 24.9 168.2 33.3 12.0 -25.4 11.8 -24.6 11.6 -23.5 12.0 -24.8
2026-02-14T20:13:19.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:13:19.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:13:19.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.758795
2026-02-14T20:13:19.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:13:19.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:13:19.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:13:19.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:13:19.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:13:19.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:12:39', tmtdew=9.74, humidity=51.25, cloud=0.0, wind=44.81, temperature=11.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:12:39.888', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:13:19.831 [DEBUG] [Thread-191456] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:13:19.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T20:13:19.927 [DEBUG] [Thread-191459] [transport.py] [_log()] starting thread (client mode): 0xa5740d90
2026-02-14T20:13:19.927 [DEBUG] [Thread-191459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:13:19.950 [DEBUG] [Thread-191459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:13:19.951 [INFO] [Thread-191459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:13:19.958 [DEBUG] [Thread-191459] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:13:19.959 [DEBUG] [Thread-191459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:13:19.959 [DEBUG] [Thread-191459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:13:19.959 [DEBUG] [Thread-191459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:13:19.959 [DEBUG] [Thread-191459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:13:19.959 [DEBUG] [Thread-191459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:13:19.959 [DEBUG] [Thread-191459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:13:19.959 [DEBUG] [Thread-191459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:13:19.960 [DEBUG] [Thread-191459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:13:19.960 [DEBUG] [Thread-191459] [transport.py] [_log()] client lang: <none>
2026-02-14T20:13:19.960 [DEBUG] [Thread-191459] [transport.py] [_log()] server lang: <none>
2026-02-14T20:13:19.960 [DEBUG] [Thread-191459] [transport.py] [_log()] kex follows: False
2026-02-14T20:13:19.960 [DEBUG] [Thread-191459] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:13:19.960 [DEBUG] [Thread-191459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:13:19.960 [DEBUG] [Thread-191459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:13:19.961 [DEBUG] [Thread-191459] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:13:19.961 [DEBUG] [Thread-191459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:13:19.961 [DEBUG] [Thread-191459] [transport.py] [_log()] Compression: none
2026-02-14T20:13:19.961 [DEBUG] [Thread-191459] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:13:20.019 [DEBUG] [Thread-191459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:13:20.020 [DEBUG] [Thread-191459] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:13:20.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:13:20.021 [DEBUG] [Thread-191459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:13:20.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:13:20.079 [DEBUG] [Thread-191459] [transport.py] [_log()] userauth is OK
2026-02-14T20:13:20.079 [DEBUG] [Thread-191459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:13:20.079 [DEBUG] [Thread-191459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:13:20.079 [DEBUG] [Thread-191459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:13:20.079 [DEBUG] [Thread-191459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:13:20.103 [INFO] [Thread-191459] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:13:20.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-14T20:13:20.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:13:20.930 [DEBUG] [Thread-191459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:13:20.930 [DEBUG] [Thread-191459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:13:20.978 [DEBUG] [Thread-191459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:13:20.979 [DEBUG] [Thread-191459] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:13:20.988 [DEBUG] [Thread-191459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:13:20.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:13:20.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-14T20:13:21.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-14T20:13:21.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:13:21.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:13:21.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:13:21.024 [DEBUG] [Thread-191459] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:13:31.716 [DEBUG] [Thread-191461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:13:41.697 [DEBUG] [Thread-191462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:13:46.761 [DEBUG] [Thread-191463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:13:51.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:13:51.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:13:51.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-14T20:13:53.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 13, 15), 9.45, 52.19, 0.0, 37.78, 11.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:13:53.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:13:15
2026-02-14T20:13:53.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:13:53.655 [DEBUG] [Thread-191464] [transport.py] [_log()] starting thread (client mode): 0xa2d103d0
2026-02-14T20:13:53.655 [DEBUG] [Thread-191464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:13:53.677 [DEBUG] [Thread-191464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:13:53.678 [INFO] [Thread-191464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:13:53.681 [DEBUG] [Thread-191464] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:13:53.681 [DEBUG] [Thread-191464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:13:53.681 [DEBUG] [Thread-191464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:13:53.681 [DEBUG] [Thread-191464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:13:53.681 [DEBUG] [Thread-191464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:13:53.682 [DEBUG] [Thread-191464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:13:53.682 [DEBUG] [Thread-191464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:13:53.682 [DEBUG] [Thread-191464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:13:53.682 [DEBUG] [Thread-191464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:13:53.682 [DEBUG] [Thread-191464] [transport.py] [_log()] client lang: <none>
2026-02-14T20:13:53.682 [DEBUG] [Thread-191464] [transport.py] [_log()] server lang: <none>
2026-02-14T20:13:53.682 [DEBUG] [Thread-191464] [transport.py] [_log()] kex follows: False
2026-02-14T20:13:53.682 [DEBUG] [Thread-191464] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:13:53.682 [DEBUG] [Thread-191464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:13:53.682 [DEBUG] [Thread-191464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:13:53.683 [DEBUG] [Thread-191464] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:13:53.683 [DEBUG] [Thread-191464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:13:53.683 [DEBUG] [Thread-191464] [transport.py] [_log()] Compression: none
2026-02-14T20:13:53.683 [DEBUG] [Thread-191464] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:13:53.702 [DEBUG] [Thread-191464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:13:53.702 [DEBUG] [Thread-191464] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:13:53.703 [DEBUG] [Thread-191464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:13:53.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:13:53.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:13:53.705 [DEBUG] [Thread-191464] [transport.py] [_log()] userauth is OK
2026-02-14T20:13:53.705 [DEBUG] [Thread-191464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:13:53.705 [DEBUG] [Thread-191464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:13:53.705 [DEBUG] [Thread-191464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:13:53.705 [DEBUG] [Thread-191464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:13:53.730 [INFO] [Thread-191464] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:13:53.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:13:54.524 [DEBUG] [Thread-191464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:13:54.524 [DEBUG] [Thread-191464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:13:54.525 [DEBUG] [Thread-191464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:13:54.565 [DEBUG] [Thread-191464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:13:54.566 [DEBUG] [Thread-191464] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:13:54.569 [DEBUG] [Thread-191464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:13:54.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:13:54.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:13:54.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:13:54.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:13:54.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:13:54.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:13:54.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:13:54.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:13:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:13:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.759142 -999.00  +11.50  26.47     57   +3.40 1 1 1 1 1     7    0 7.16 -41.49 ZNES. 27.8 26.5 166.2 31.4 12.0 -25.6 11.9 -24.5 11.7 -23.5 12.0 -24.7
2026-02-14T20:13:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:13:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:13:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.759142
2026-02-14T20:13:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:13:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:13:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:13:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:13:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:13:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:13:15', tmtdew=9.45, humidity=52.19, cloud=0.0, wind=37.78, temperature=11.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:13:09.869', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:13:54.595 [DEBUG] [Thread-191464] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:13:54.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T20:13:54.691 [DEBUG] [Thread-191467] [transport.py] [_log()] starting thread (client mode): 0xa2d13cd0
2026-02-14T20:13:54.692 [DEBUG] [Thread-191467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:13:54.711 [DEBUG] [Thread-191467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:13:54.711 [INFO] [Thread-191467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:13:54.719 [DEBUG] [Thread-191467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:13:54.719 [DEBUG] [Thread-191467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:13:54.720 [DEBUG] [Thread-191467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:13:54.720 [DEBUG] [Thread-191467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:13:54.720 [DEBUG] [Thread-191467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:13:54.720 [DEBUG] [Thread-191467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:13:54.720 [DEBUG] [Thread-191467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:13:54.720 [DEBUG] [Thread-191467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:13:54.720 [DEBUG] [Thread-191467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:13:54.720 [DEBUG] [Thread-191467] [transport.py] [_log()] client lang: <none>
2026-02-14T20:13:54.720 [DEBUG] [Thread-191467] [transport.py] [_log()] server lang: <none>
2026-02-14T20:13:54.720 [DEBUG] [Thread-191467] [transport.py] [_log()] kex follows: False
2026-02-14T20:13:54.720 [DEBUG] [Thread-191467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:13:54.720 [DEBUG] [Thread-191467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:13:54.720 [DEBUG] [Thread-191467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:13:54.720 [DEBUG] [Thread-191467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:13:54.720 [DEBUG] [Thread-191467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:13:54.721 [DEBUG] [Thread-191467] [transport.py] [_log()] Compression: none
2026-02-14T20:13:54.721 [DEBUG] [Thread-191467] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:13:54.779 [DEBUG] [Thread-191467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:13:54.780 [DEBUG] [Thread-191467] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:13:54.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:13:54.781 [DEBUG] [Thread-191467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:13:54.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:13:54.840 [DEBUG] [Thread-191467] [transport.py] [_log()] userauth is OK
2026-02-14T20:13:54.841 [DEBUG] [Thread-191467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:13:54.841 [DEBUG] [Thread-191467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:13:54.841 [DEBUG] [Thread-191467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:13:54.841 [DEBUG] [Thread-191467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:13:54.859 [INFO] [Thread-191467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:13:54.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-14T20:13:54.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:13:55.678 [DEBUG] [Thread-191467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:13:55.679 [DEBUG] [Thread-191467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:13:55.726 [DEBUG] [Thread-191467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:13:55.726 [DEBUG] [Thread-191467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:13:55.735 [DEBUG] [Thread-191467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:13:55.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:13:55.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:13:55.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-14T20:13:55.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:13:55.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:13:55.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:13:55.772 [DEBUG] [Thread-191467] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:14:01.794 [DEBUG] [Thread-191469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:14:13.881 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:14:13.882 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:14:16.856 [DEBUG] [Thread-191470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:14:25.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:14:25.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:14:25.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-14T20:14:27.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 13, 50), 9.5, 52.21, 0.0, 35.04, 11.68, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:14:27.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:13:50
2026-02-14T20:14:27.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:14:28.130 [DEBUG] [Thread-191471] [transport.py] [_log()] starting thread (client mode): 0xa2d00310
2026-02-14T20:14:28.130 [DEBUG] [Thread-191471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:14:28.149 [DEBUG] [Thread-191471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:14:28.149 [INFO] [Thread-191471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:14:28.152 [DEBUG] [Thread-191471] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:14:28.152 [DEBUG] [Thread-191471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:14:28.152 [DEBUG] [Thread-191471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:14:28.152 [DEBUG] [Thread-191471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:14:28.152 [DEBUG] [Thread-191471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:14:28.152 [DEBUG] [Thread-191471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:14:28.152 [DEBUG] [Thread-191471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:14:28.152 [DEBUG] [Thread-191471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:14:28.152 [DEBUG] [Thread-191471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:14:28.152 [DEBUG] [Thread-191471] [transport.py] [_log()] client lang: <none>
2026-02-14T20:14:28.152 [DEBUG] [Thread-191471] [transport.py] [_log()] server lang: <none>
2026-02-14T20:14:28.153 [DEBUG] [Thread-191471] [transport.py] [_log()] kex follows: False
2026-02-14T20:14:28.153 [DEBUG] [Thread-191471] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:14:28.153 [DEBUG] [Thread-191471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:14:28.153 [DEBUG] [Thread-191471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:14:28.153 [DEBUG] [Thread-191471] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:14:28.153 [DEBUG] [Thread-191471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:14:28.153 [DEBUG] [Thread-191471] [transport.py] [_log()] Compression: none
2026-02-14T20:14:28.153 [DEBUG] [Thread-191471] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:14:28.172 [DEBUG] [Thread-191471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:14:28.172 [DEBUG] [Thread-191471] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:14:28.173 [DEBUG] [Thread-191471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:14:28.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:14:28.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:14:28.175 [DEBUG] [Thread-191471] [transport.py] [_log()] userauth is OK
2026-02-14T20:14:28.175 [DEBUG] [Thread-191471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:14:28.175 [DEBUG] [Thread-191471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:14:28.175 [DEBUG] [Thread-191471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:14:28.175 [DEBUG] [Thread-191471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:14:28.211 [INFO] [Thread-191471] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:14:28.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:14:28.867 [DEBUG] [Thread-191471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:14:28.867 [DEBUG] [Thread-191471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:14:28.868 [DEBUG] [Thread-191471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:14:28.908 [DEBUG] [Thread-191471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:14:28.909 [DEBUG] [Thread-191471] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:14:28.912 [DEBUG] [Thread-191471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:14:28.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:14:28.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:14:28.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:14:28.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:14:28.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:14:28.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:14:28.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:14:28.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:14:28.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:14:28.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.759489 -999.00  +11.50  24.04     57   +3.40 1 1 1 1 1     6    0 6.93 -41.22 ZNES. 20.2 24.0 155.6 37.4 12.0 -25.6 11.9 -24.5 11.6 -23.4 12.0 -24.7
2026-02-14T20:14:28.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:14:28.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:14:28.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.759489
2026-02-14T20:14:28.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:14:28.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:14:28.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:14:28.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:14:28.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:14:28.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:13:50', tmtdew=9.5, humidity=52.21, cloud=0.0, wind=35.04, temperature=11.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:13:39.850', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:14:28.931 [DEBUG] [Thread-191471] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:14:29.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-14T20:14:29.019 [DEBUG] [Thread-191474] [transport.py] [_log()] starting thread (client mode): 0xa2d10d60
2026-02-14T20:14:29.019 [DEBUG] [Thread-191474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:14:29.033 [DEBUG] [Thread-191474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:14:29.033 [INFO] [Thread-191474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:14:29.041 [DEBUG] [Thread-191474] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:14:29.042 [DEBUG] [Thread-191474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:14:29.042 [DEBUG] [Thread-191474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:14:29.042 [DEBUG] [Thread-191474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:14:29.042 [DEBUG] [Thread-191474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:14:29.042 [DEBUG] [Thread-191474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:14:29.042 [DEBUG] [Thread-191474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:14:29.042 [DEBUG] [Thread-191474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:14:29.042 [DEBUG] [Thread-191474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:14:29.042 [DEBUG] [Thread-191474] [transport.py] [_log()] client lang: <none>
2026-02-14T20:14:29.042 [DEBUG] [Thread-191474] [transport.py] [_log()] server lang: <none>
2026-02-14T20:14:29.042 [DEBUG] [Thread-191474] [transport.py] [_log()] kex follows: False
2026-02-14T20:14:29.042 [DEBUG] [Thread-191474] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:14:29.042 [DEBUG] [Thread-191474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:14:29.042 [DEBUG] [Thread-191474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:14:29.042 [DEBUG] [Thread-191474] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:14:29.042 [DEBUG] [Thread-191474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:14:29.042 [DEBUG] [Thread-191474] [transport.py] [_log()] Compression: none
2026-02-14T20:14:29.042 [DEBUG] [Thread-191474] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:14:29.100 [DEBUG] [Thread-191474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:14:29.101 [DEBUG] [Thread-191474] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:14:29.101 [DEBUG] [Thread-191474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:14:29.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:14:29.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:14:29.159 [DEBUG] [Thread-191474] [transport.py] [_log()] userauth is OK
2026-02-14T20:14:29.159 [DEBUG] [Thread-191474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:14:29.159 [DEBUG] [Thread-191474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:14:29.159 [DEBUG] [Thread-191474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:14:29.159 [DEBUG] [Thread-191474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:14:29.184 [INFO] [Thread-191474] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:14:29.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-14T20:14:29.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:14:30.005 [DEBUG] [Thread-191474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:14:30.005 [DEBUG] [Thread-191474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:14:30.053 [DEBUG] [Thread-191474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:14:30.054 [DEBUG] [Thread-191474] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:14:30.063 [DEBUG] [Thread-191474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:14:30.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:14:30.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:14:30.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:14:30.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:14:30.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:14:30.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:14:30.101 [DEBUG] [Thread-191474] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:14:31.893 [DEBUG] [Thread-191476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:14:41.752 [DEBUG] [Thread-191477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:14:46.945 [DEBUG] [Thread-191478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:15:00.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:15:00.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:15:00.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:15:01.981 [DEBUG] [Thread-191479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:15:01.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 14, 26), 9.51, 52.18, 0.0, 35.69, 11.65, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:15:01.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:14:26
2026-02-14T20:15:02.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:15:02.544 [DEBUG] [Thread-191480] [transport.py] [_log()] starting thread (client mode): 0xa2d02200
2026-02-14T20:15:02.544 [DEBUG] [Thread-191480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:15:02.554 [DEBUG] [Thread-191480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:15:02.554 [INFO] [Thread-191480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:15:02.556 [DEBUG] [Thread-191480] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:15:02.556 [DEBUG] [Thread-191480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:15:02.556 [DEBUG] [Thread-191480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:15:02.556 [DEBUG] [Thread-191480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:15:02.556 [DEBUG] [Thread-191480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:15:02.556 [DEBUG] [Thread-191480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:15:02.556 [DEBUG] [Thread-191480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:15:02.556 [DEBUG] [Thread-191480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:15:02.556 [DEBUG] [Thread-191480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:15:02.556 [DEBUG] [Thread-191480] [transport.py] [_log()] client lang: <none>
2026-02-14T20:15:02.556 [DEBUG] [Thread-191480] [transport.py] [_log()] server lang: <none>
2026-02-14T20:15:02.556 [DEBUG] [Thread-191480] [transport.py] [_log()] kex follows: False
2026-02-14T20:15:02.556 [DEBUG] [Thread-191480] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:15:02.556 [DEBUG] [Thread-191480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:15:02.556 [DEBUG] [Thread-191480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:15:02.556 [DEBUG] [Thread-191480] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:15:02.556 [DEBUG] [Thread-191480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:15:02.556 [DEBUG] [Thread-191480] [transport.py] [_log()] Compression: none
2026-02-14T20:15:02.556 [DEBUG] [Thread-191480] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:15:02.567 [DEBUG] [Thread-191480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:15:02.567 [DEBUG] [Thread-191480] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:15:02.568 [DEBUG] [Thread-191480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:15:02.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:15:02.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:15:02.569 [DEBUG] [Thread-191480] [transport.py] [_log()] userauth is OK
2026-02-14T20:15:02.570 [DEBUG] [Thread-191480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:15:02.570 [DEBUG] [Thread-191480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:15:02.570 [DEBUG] [Thread-191480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:15:02.570 [DEBUG] [Thread-191480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:15:02.595 [INFO] [Thread-191480] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:15:02.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:15:03.172 [DEBUG] [Thread-191480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:15:03.172 [DEBUG] [Thread-191480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:15:03.173 [DEBUG] [Thread-191480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:15:03.213 [DEBUG] [Thread-191480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:15:03.213 [DEBUG] [Thread-191480] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:15:03.215 [DEBUG] [Thread-191480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:15:03.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:15:03.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:15:03.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:15:03.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:15:03.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:15:03.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:15:03.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:15:03.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:15:03.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:15:03.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.759837 -999.00  +11.50  24.47     57   +3.40 1 1 1 1 1     5    0 7.26 -42.14 ZNES. 20.5 24.5 156.6 36.5 12.0 -25.5 11.8 -24.5 11.6 -23.5 12.0 -24.8
2026-02-14T20:15:03.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:15:03.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:15:03.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.759837
2026-02-14T20:15:03.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:15:03.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:15:03.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:15:03.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:15:03.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:15:03.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:14:26', tmtdew=9.51, humidity=52.18, cloud=0.0, wind=35.69, temperature=11.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:14:09.917', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:15:03.241 [DEBUG] [Thread-191480] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:15:03.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T20:15:03.335 [DEBUG] [Thread-191483] [transport.py] [_log()] starting thread (client mode): 0xa57e1480
2026-02-14T20:15:03.336 [DEBUG] [Thread-191483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:15:03.351 [DEBUG] [Thread-191483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:15:03.352 [INFO] [Thread-191483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:15:03.359 [DEBUG] [Thread-191483] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:15:03.359 [DEBUG] [Thread-191483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:15:03.359 [DEBUG] [Thread-191483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:15:03.359 [DEBUG] [Thread-191483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:15:03.359 [DEBUG] [Thread-191483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:15:03.360 [DEBUG] [Thread-191483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:15:03.360 [DEBUG] [Thread-191483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:15:03.360 [DEBUG] [Thread-191483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:15:03.360 [DEBUG] [Thread-191483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:15:03.360 [DEBUG] [Thread-191483] [transport.py] [_log()] client lang: <none>
2026-02-14T20:15:03.360 [DEBUG] [Thread-191483] [transport.py] [_log()] server lang: <none>
2026-02-14T20:15:03.360 [DEBUG] [Thread-191483] [transport.py] [_log()] kex follows: False
2026-02-14T20:15:03.360 [DEBUG] [Thread-191483] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:15:03.360 [DEBUG] [Thread-191483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:15:03.360 [DEBUG] [Thread-191483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:15:03.360 [DEBUG] [Thread-191483] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:15:03.360 [DEBUG] [Thread-191483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:15:03.360 [DEBUG] [Thread-191483] [transport.py] [_log()] Compression: none
2026-02-14T20:15:03.360 [DEBUG] [Thread-191483] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:15:03.419 [DEBUG] [Thread-191483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:15:03.420 [DEBUG] [Thread-191483] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:15:03.420 [DEBUG] [Thread-191483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:15:03.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:15:03.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:15:03.475 [DEBUG] [Thread-191483] [transport.py] [_log()] userauth is OK
2026-02-14T20:15:03.475 [DEBUG] [Thread-191483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:15:03.475 [DEBUG] [Thread-191483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:15:03.475 [DEBUG] [Thread-191483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:15:03.475 [DEBUG] [Thread-191483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:15:03.493 [INFO] [Thread-191483] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:15:03.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-14T20:15:03.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:15:04.417 [DEBUG] [Thread-191483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:15:04.418 [DEBUG] [Thread-191483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:15:04.466 [DEBUG] [Thread-191483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:15:04.466 [DEBUG] [Thread-191483] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:15:04.475 [DEBUG] [Thread-191483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:15:04.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:15:04.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-14T20:15:04.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:15:04.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:15:04.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:15:04.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:15:04.512 [DEBUG] [Thread-191483] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:15:17.014 [DEBUG] [Thread-191485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:15:17.882 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:15:17.883 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:15:32.070 [DEBUG] [Thread-191486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:15:34.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:15:34.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:15:34.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:15:36.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 15, 1), 9.45, 52.21, 0.0, 34.62, 11.63, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:15:36.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:15:01
2026-02-14T20:15:36.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:15:36.899 [DEBUG] [Thread-191487] [transport.py] [_log()] starting thread (client mode): 0xa5771ff0
2026-02-14T20:15:36.899 [DEBUG] [Thread-191487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:15:36.918 [DEBUG] [Thread-191487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:15:36.918 [INFO] [Thread-191487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:15:36.921 [DEBUG] [Thread-191487] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:15:36.921 [DEBUG] [Thread-191487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:15:36.921 [DEBUG] [Thread-191487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:15:36.921 [DEBUG] [Thread-191487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:15:36.921 [DEBUG] [Thread-191487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:15:36.921 [DEBUG] [Thread-191487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:15:36.921 [DEBUG] [Thread-191487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:15:36.921 [DEBUG] [Thread-191487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:15:36.921 [DEBUG] [Thread-191487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:15:36.921 [DEBUG] [Thread-191487] [transport.py] [_log()] client lang: <none>
2026-02-14T20:15:36.921 [DEBUG] [Thread-191487] [transport.py] [_log()] server lang: <none>
2026-02-14T20:15:36.921 [DEBUG] [Thread-191487] [transport.py] [_log()] kex follows: False
2026-02-14T20:15:36.921 [DEBUG] [Thread-191487] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:15:36.921 [DEBUG] [Thread-191487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:15:36.921 [DEBUG] [Thread-191487] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:15:36.921 [DEBUG] [Thread-191487] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:15:36.921 [DEBUG] [Thread-191487] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:15:36.921 [DEBUG] [Thread-191487] [transport.py] [_log()] Compression: none
2026-02-14T20:15:36.921 [DEBUG] [Thread-191487] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:15:36.938 [DEBUG] [Thread-191487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:15:36.938 [DEBUG] [Thread-191487] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:15:36.939 [DEBUG] [Thread-191487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:15:36.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:15:36.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:15:36.940 [DEBUG] [Thread-191487] [transport.py] [_log()] userauth is OK
2026-02-14T20:15:36.940 [DEBUG] [Thread-191487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:15:36.940 [DEBUG] [Thread-191487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:15:36.941 [DEBUG] [Thread-191487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:15:36.941 [DEBUG] [Thread-191487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:15:36.957 [INFO] [Thread-191487] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:15:36.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:15:37.611 [DEBUG] [Thread-191487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:15:37.612 [DEBUG] [Thread-191487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:15:37.612 [DEBUG] [Thread-191487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:15:37.652 [DEBUG] [Thread-191487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:15:37.653 [DEBUG] [Thread-191487] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:15:37.656 [DEBUG] [Thread-191487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:15:37.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:15:37.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:15:37.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:15:37.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:15:37.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:15:37.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:15:37.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:15:37.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:15:37.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:15:37.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.760184 -999.00  +11.50  23.70     57   +3.40 1 1 1 1 1     5    0 7.15 -36.83 ZNES. 30.1 23.7 164.5 38.3 12.0 -25.4 11.8 -24.6 11.6 -23.5 12.0 -24.6
2026-02-14T20:15:37.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:15:37.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:15:37.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.760184
2026-02-14T20:15:37.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:15:37.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:15:37.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:15:37.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:15:37.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:15:37.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:15:01', tmtdew=9.45, humidity=52.21, cloud=0.0, wind=34.62, temperature=11.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:14:39.898', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:15:37.685 [DEBUG] [Thread-191487] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:15:37.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-14T20:15:37.780 [DEBUG] [Thread-191490] [transport.py] [_log()] starting thread (client mode): 0xa57e3820
2026-02-14T20:15:37.780 [DEBUG] [Thread-191490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:15:37.795 [DEBUG] [Thread-191490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:15:37.795 [INFO] [Thread-191490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:15:37.803 [DEBUG] [Thread-191490] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:15:37.803 [DEBUG] [Thread-191490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:15:37.803 [DEBUG] [Thread-191490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:15:37.804 [DEBUG] [Thread-191490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:15:37.804 [DEBUG] [Thread-191490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:15:37.804 [DEBUG] [Thread-191490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:15:37.804 [DEBUG] [Thread-191490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:15:37.804 [DEBUG] [Thread-191490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:15:37.804 [DEBUG] [Thread-191490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:15:37.804 [DEBUG] [Thread-191490] [transport.py] [_log()] client lang: <none>
2026-02-14T20:15:37.804 [DEBUG] [Thread-191490] [transport.py] [_log()] server lang: <none>
2026-02-14T20:15:37.805 [DEBUG] [Thread-191490] [transport.py] [_log()] kex follows: False
2026-02-14T20:15:37.805 [DEBUG] [Thread-191490] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:15:37.805 [DEBUG] [Thread-191490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:15:37.805 [DEBUG] [Thread-191490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:15:37.805 [DEBUG] [Thread-191490] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:15:37.805 [DEBUG] [Thread-191490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:15:37.805 [DEBUG] [Thread-191490] [transport.py] [_log()] Compression: none
2026-02-14T20:15:37.805 [DEBUG] [Thread-191490] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:15:37.863 [DEBUG] [Thread-191490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:15:37.864 [DEBUG] [Thread-191490] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:15:37.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:15:37.865 [DEBUG] [Thread-191490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:15:37.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:15:37.919 [DEBUG] [Thread-191490] [transport.py] [_log()] userauth is OK
2026-02-14T20:15:37.919 [DEBUG] [Thread-191490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:15:37.919 [DEBUG] [Thread-191490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:15:37.919 [DEBUG] [Thread-191490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:15:37.919 [DEBUG] [Thread-191490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:15:37.945 [INFO] [Thread-191490] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:15:37.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-14T20:15:37.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:15:38.708 [DEBUG] [Thread-191490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:15:38.709 [DEBUG] [Thread-191490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:15:38.757 [DEBUG] [Thread-191490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:15:38.757 [DEBUG] [Thread-191490] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:15:38.768 [DEBUG] [Thread-191490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:15:38.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:15:38.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-14T20:15:38.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-14T20:15:38.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:15:38.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:15:38.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:15:38.804 [DEBUG] [Thread-191490] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:15:41.829 [DEBUG] [Thread-191492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:15:47.104 [DEBUG] [Thread-191493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:16:02.148 [DEBUG] [Thread-191494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:16:08.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:16:08.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:16:08.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-14T20:16:11.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 15, 36), 9.7, 51.39, 0.0, 36.48, 11.93, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:16:11.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:15:36
2026-02-14T20:16:11.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:16:11.673 [DEBUG] [Thread-191495] [transport.py] [_log()] starting thread (client mode): 0xa2d106d0
2026-02-14T20:16:11.673 [DEBUG] [Thread-191495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:16:11.694 [DEBUG] [Thread-191495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:16:11.694 [INFO] [Thread-191495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:16:11.697 [DEBUG] [Thread-191495] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:16:11.698 [DEBUG] [Thread-191495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:16:11.698 [DEBUG] [Thread-191495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:16:11.698 [DEBUG] [Thread-191495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:16:11.698 [DEBUG] [Thread-191495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:16:11.698 [DEBUG] [Thread-191495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:16:11.698 [DEBUG] [Thread-191495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:16:11.698 [DEBUG] [Thread-191495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:16:11.698 [DEBUG] [Thread-191495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:16:11.698 [DEBUG] [Thread-191495] [transport.py] [_log()] client lang: <none>
2026-02-14T20:16:11.698 [DEBUG] [Thread-191495] [transport.py] [_log()] server lang: <none>
2026-02-14T20:16:11.698 [DEBUG] [Thread-191495] [transport.py] [_log()] kex follows: False
2026-02-14T20:16:11.698 [DEBUG] [Thread-191495] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:16:11.698 [DEBUG] [Thread-191495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:16:11.699 [DEBUG] [Thread-191495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:16:11.699 [DEBUG] [Thread-191495] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:16:11.699 [DEBUG] [Thread-191495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:16:11.699 [DEBUG] [Thread-191495] [transport.py] [_log()] Compression: none
2026-02-14T20:16:11.699 [DEBUG] [Thread-191495] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:16:11.717 [DEBUG] [Thread-191495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:16:11.717 [DEBUG] [Thread-191495] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:16:11.718 [DEBUG] [Thread-191495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:16:11.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:16:11.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:16:11.719 [DEBUG] [Thread-191495] [transport.py] [_log()] userauth is OK
2026-02-14T20:16:11.720 [DEBUG] [Thread-191495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:16:11.720 [DEBUG] [Thread-191495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:16:11.720 [DEBUG] [Thread-191495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:16:11.720 [DEBUG] [Thread-191495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:16:11.744 [INFO] [Thread-191495] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:16:11.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:16:12.348 [DEBUG] [Thread-191495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:16:12.349 [DEBUG] [Thread-191495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:16:12.349 [DEBUG] [Thread-191495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:16:12.389 [DEBUG] [Thread-191495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:16:12.390 [DEBUG] [Thread-191495] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:16:12.393 [DEBUG] [Thread-191495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:16:12.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:16:12.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:16:12.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:16:12.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:16:12.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:16:12.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:16:12.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:16:12.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:16:12.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:16:12.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.760878 -999.00  +11.50  23.00     57   +3.40 1 1 1 1 1     4    0 7.41 -33.58 ZNES. 27.0 23.0 163.6 31.7 12.0 -25.5 11.8 -24.5 11.6 -23.6 11.9 -24.7
2026-02-14T20:16:12.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:16:12.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:16:12.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.760878
2026-02-14T20:16:12.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:16:12.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:16:12.416 [DEBUG] [Thread-191495] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:16:12.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:16:12.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:16:12.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:16:12.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:15:36', tmtdew=9.7, humidity=51.39, cloud=0.0, wind=36.48, temperature=11.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:15:39.859', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T03:25:00')
2026-02-14T20:16:12.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-14T20:16:12.512 [DEBUG] [Thread-191498] [transport.py] [_log()] starting thread (client mode): 0xa2d78e20
2026-02-14T20:16:12.513 [DEBUG] [Thread-191498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:16:12.527 [DEBUG] [Thread-191498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:16:12.527 [INFO] [Thread-191498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:16:12.535 [DEBUG] [Thread-191498] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:16:12.535 [DEBUG] [Thread-191498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:16:12.535 [DEBUG] [Thread-191498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:16:12.535 [DEBUG] [Thread-191498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:16:12.535 [DEBUG] [Thread-191498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:16:12.536 [DEBUG] [Thread-191498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:16:12.536 [DEBUG] [Thread-191498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:16:12.536 [DEBUG] [Thread-191498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:16:12.536 [DEBUG] [Thread-191498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:16:12.536 [DEBUG] [Thread-191498] [transport.py] [_log()] client lang: <none>
2026-02-14T20:16:12.536 [DEBUG] [Thread-191498] [transport.py] [_log()] server lang: <none>
2026-02-14T20:16:12.536 [DEBUG] [Thread-191498] [transport.py] [_log()] kex follows: False
2026-02-14T20:16:12.536 [DEBUG] [Thread-191498] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:16:12.536 [DEBUG] [Thread-191498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:16:12.536 [DEBUG] [Thread-191498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:16:12.536 [DEBUG] [Thread-191498] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:16:12.536 [DEBUG] [Thread-191498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:16:12.536 [DEBUG] [Thread-191498] [transport.py] [_log()] Compression: none
2026-02-14T20:16:12.536 [DEBUG] [Thread-191498] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:16:12.595 [DEBUG] [Thread-191498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:16:12.595 [DEBUG] [Thread-191498] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:16:12.596 [DEBUG] [Thread-191498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:16:12.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:16:12.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:16:12.650 [DEBUG] [Thread-191498] [transport.py] [_log()] userauth is OK
2026-02-14T20:16:12.651 [DEBUG] [Thread-191498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:16:12.651 [DEBUG] [Thread-191498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:16:12.651 [DEBUG] [Thread-191498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:16:12.651 [DEBUG] [Thread-191498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:16:12.674 [INFO] [Thread-191498] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:16:12.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-14T20:16:12.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:16:13.540 [DEBUG] [Thread-191498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:16:13.540 [DEBUG] [Thread-191498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:16:13.588 [DEBUG] [Thread-191498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:16:13.589 [DEBUG] [Thread-191498] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:16:13.599 [DEBUG] [Thread-191498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:16:13.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:16:13.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:16:13.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-14T20:16:13.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:16:13.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:16:13.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:16:13.635 [DEBUG] [Thread-191498] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:16:17.181 [DEBUG] [Thread-191500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:16:21.920 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:16:21.921 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:16:32.241 [DEBUG] [Thread-191501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:16:41.880 [DEBUG] [Thread-191502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:16:43.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:16:43.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:16:43.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-14T20:16:45.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 16, 11), 9.48, 52.28, 0.0, 31.3, 11.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:16:45.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:16:11
2026-02-14T20:16:45.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:16:46.063 [DEBUG] [Thread-191503] [transport.py] [_log()] starting thread (client mode): 0xa5772c50
2026-02-14T20:16:46.063 [DEBUG] [Thread-191503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:16:46.083 [DEBUG] [Thread-191503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:16:46.083 [INFO] [Thread-191503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:16:46.086 [DEBUG] [Thread-191503] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:16:46.086 [DEBUG] [Thread-191503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:16:46.087 [DEBUG] [Thread-191503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:16:46.087 [DEBUG] [Thread-191503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:16:46.087 [DEBUG] [Thread-191503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:16:46.087 [DEBUG] [Thread-191503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:16:46.087 [DEBUG] [Thread-191503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:16:46.087 [DEBUG] [Thread-191503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:16:46.087 [DEBUG] [Thread-191503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:16:46.087 [DEBUG] [Thread-191503] [transport.py] [_log()] client lang: <none>
2026-02-14T20:16:46.087 [DEBUG] [Thread-191503] [transport.py] [_log()] server lang: <none>
2026-02-14T20:16:46.087 [DEBUG] [Thread-191503] [transport.py] [_log()] kex follows: False
2026-02-14T20:16:46.087 [DEBUG] [Thread-191503] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:16:46.087 [DEBUG] [Thread-191503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:16:46.087 [DEBUG] [Thread-191503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:16:46.087 [DEBUG] [Thread-191503] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:16:46.087 [DEBUG] [Thread-191503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:16:46.088 [DEBUG] [Thread-191503] [transport.py] [_log()] Compression: none
2026-02-14T20:16:46.088 [DEBUG] [Thread-191503] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:16:46.107 [DEBUG] [Thread-191503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:16:46.107 [DEBUG] [Thread-191503] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:16:46.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:16:46.108 [DEBUG] [Thread-191503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:16:46.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:16:46.111 [DEBUG] [Thread-191503] [transport.py] [_log()] userauth is OK
2026-02-14T20:16:46.111 [DEBUG] [Thread-191503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:16:46.111 [DEBUG] [Thread-191503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:16:46.111 [DEBUG] [Thread-191503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:16:46.111 [DEBUG] [Thread-191503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:16:46.136 [INFO] [Thread-191503] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:16:46.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:16:46.742 [DEBUG] [Thread-191503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:16:46.742 [DEBUG] [Thread-191503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:16:46.742 [DEBUG] [Thread-191503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:16:46.783 [DEBUG] [Thread-191503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:16:46.784 [DEBUG] [Thread-191503] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:16:46.787 [DEBUG] [Thread-191503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:16:46.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:16:46.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:16:46.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:16:46.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:16:46.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:16:46.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:16:46.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:16:46.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:16:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:16:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.761225 -999.00  +11.50  26.10     57   +3.40 1 1 1 1 1     4    0 7.32 -32.42 ZNES. 24.8 26.1 156.0 34.6 12.0 -25.6 11.8 -24.4 11.6 -23.6 11.9 -24.9
2026-02-14T20:16:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:16:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:16:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.761225
2026-02-14T20:16:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:16:46.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:16:46.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:16:46.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:16:46.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:16:46.812 [DEBUG] [Thread-191503] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:16:46.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:16:11', tmtdew=9.48, humidity=52.28, cloud=0.0, wind=31.3, temperature=11.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:16:09.840', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T18:15:00')
2026-02-14T20:16:46.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-14T20:16:46.907 [DEBUG] [Thread-191506] [transport.py] [_log()] starting thread (client mode): 0xa5771a20
2026-02-14T20:16:46.907 [DEBUG] [Thread-191506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:16:46.922 [DEBUG] [Thread-191506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:16:46.922 [INFO] [Thread-191506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:16:46.930 [DEBUG] [Thread-191506] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:16:46.930 [DEBUG] [Thread-191506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:16:46.930 [DEBUG] [Thread-191506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:16:46.930 [DEBUG] [Thread-191506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:16:46.930 [DEBUG] [Thread-191506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:16:46.930 [DEBUG] [Thread-191506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:16:46.931 [DEBUG] [Thread-191506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:16:46.931 [DEBUG] [Thread-191506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:16:46.931 [DEBUG] [Thread-191506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:16:46.931 [DEBUG] [Thread-191506] [transport.py] [_log()] client lang: <none>
2026-02-14T20:16:46.931 [DEBUG] [Thread-191506] [transport.py] [_log()] server lang: <none>
2026-02-14T20:16:46.931 [DEBUG] [Thread-191506] [transport.py] [_log()] kex follows: False
2026-02-14T20:16:46.931 [DEBUG] [Thread-191506] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:16:46.931 [DEBUG] [Thread-191506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:16:46.932 [DEBUG] [Thread-191506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:16:46.932 [DEBUG] [Thread-191506] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:16:46.932 [DEBUG] [Thread-191506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:16:46.932 [DEBUG] [Thread-191506] [transport.py] [_log()] Compression: none
2026-02-14T20:16:46.932 [DEBUG] [Thread-191506] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:16:46.991 [DEBUG] [Thread-191506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:16:46.991 [DEBUG] [Thread-191506] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:16:46.992 [DEBUG] [Thread-191506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:16:46.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:16:46.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:16:47.046 [DEBUG] [Thread-191506] [transport.py] [_log()] userauth is OK
2026-02-14T20:16:47.046 [DEBUG] [Thread-191506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:16:47.046 [DEBUG] [Thread-191506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:16:47.046 [DEBUG] [Thread-191506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:16:47.046 [DEBUG] [Thread-191506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:16:47.060 [INFO] [Thread-191506] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:16:47.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-14T20:16:47.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:16:47.279 [DEBUG] [Thread-191508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:16:47.880 [DEBUG] [Thread-191506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:16:47.880 [DEBUG] [Thread-191506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:16:47.928 [DEBUG] [Thread-191506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:16:47.928 [DEBUG] [Thread-191506] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:16:47.937 [DEBUG] [Thread-191506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:16:47.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:16:47.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-14T20:16:47.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-14T20:16:47.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:16:47.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:16:47.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:16:47.973 [DEBUG] [Thread-191506] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:17:02.329 [DEBUG] [Thread-191509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:17:04.843 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:17:17.363 [DEBUG] [Thread-191510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:17:17.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:17:17.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:17:18.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-14T20:17:20.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 16, 47), 9.41, 52.33, 0.0, 32.29, 11.53, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:17:20.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:16:47
2026-02-14T20:17:20.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:17:20.990 [DEBUG] [Thread-191511] [transport.py] [_log()] starting thread (client mode): 0xa5770c40
2026-02-14T20:17:20.990 [DEBUG] [Thread-191511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:17:21.010 [DEBUG] [Thread-191511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:17:21.010 [INFO] [Thread-191511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:17:21.014 [DEBUG] [Thread-191511] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:17:21.014 [DEBUG] [Thread-191511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:17:21.014 [DEBUG] [Thread-191511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:17:21.014 [DEBUG] [Thread-191511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:17:21.014 [DEBUG] [Thread-191511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:17:21.014 [DEBUG] [Thread-191511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:17:21.014 [DEBUG] [Thread-191511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:17:21.014 [DEBUG] [Thread-191511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:17:21.014 [DEBUG] [Thread-191511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:17:21.014 [DEBUG] [Thread-191511] [transport.py] [_log()] client lang: <none>
2026-02-14T20:17:21.015 [DEBUG] [Thread-191511] [transport.py] [_log()] server lang: <none>
2026-02-14T20:17:21.015 [DEBUG] [Thread-191511] [transport.py] [_log()] kex follows: False
2026-02-14T20:17:21.015 [DEBUG] [Thread-191511] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:17:21.015 [DEBUG] [Thread-191511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:17:21.015 [DEBUG] [Thread-191511] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:17:21.015 [DEBUG] [Thread-191511] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:17:21.015 [DEBUG] [Thread-191511] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:17:21.015 [DEBUG] [Thread-191511] [transport.py] [_log()] Compression: none
2026-02-14T20:17:21.015 [DEBUG] [Thread-191511] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:17:21.033 [DEBUG] [Thread-191511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:17:21.033 [DEBUG] [Thread-191511] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:17:21.034 [DEBUG] [Thread-191511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:17:21.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:17:21.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:17:21.036 [DEBUG] [Thread-191511] [transport.py] [_log()] userauth is OK
2026-02-14T20:17:21.036 [DEBUG] [Thread-191511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:17:21.036 [DEBUG] [Thread-191511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:17:21.036 [DEBUG] [Thread-191511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:17:21.036 [DEBUG] [Thread-191511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:17:21.061 [INFO] [Thread-191511] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:17:21.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:17:21.709 [DEBUG] [Thread-191511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:17:21.709 [DEBUG] [Thread-191511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:17:21.710 [DEBUG] [Thread-191511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:17:21.750 [DEBUG] [Thread-191511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:17:21.751 [DEBUG] [Thread-191511] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:17:21.754 [DEBUG] [Thread-191511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:17:21.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:17:21.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:17:21.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:17:21.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:17:21.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:17:21.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:17:21.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:17:21.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:17:21.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:17:21.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.761573 -999.00  +11.40  27.96     57   +3.40 1 1 1 1 1     3    0 7.27 -32.14 zNES. 32.2 28.0 169.8 37.2 11.9 -25.5 11.8 -24.5 11.6 -23.7 11.9 -24.8
2026-02-14T20:17:21.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:17:21.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:17:21.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.761573
2026-02-14T20:17:21.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:17:21.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:17:21.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:17:21.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:17:21.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:17:21.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:16:47', tmtdew=9.41, humidity=52.33, cloud=0.0, wind=32.29, temperature=11.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:16:39.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T18:15:00')
2026-02-14T20:17:21.781 [DEBUG] [Thread-191511] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:17:21.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-14T20:17:21.874 [DEBUG] [Thread-191514] [transport.py] [_log()] starting thread (client mode): 0xa5773610
2026-02-14T20:17:21.875 [DEBUG] [Thread-191514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:17:21.889 [DEBUG] [Thread-191514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:17:21.889 [INFO] [Thread-191514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:17:21.896 [DEBUG] [Thread-191514] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:17:21.897 [DEBUG] [Thread-191514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:17:21.897 [DEBUG] [Thread-191514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:17:21.897 [DEBUG] [Thread-191514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:17:21.897 [DEBUG] [Thread-191514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:17:21.897 [DEBUG] [Thread-191514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:17:21.898 [DEBUG] [Thread-191514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:17:21.898 [DEBUG] [Thread-191514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:17:21.898 [DEBUG] [Thread-191514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:17:21.898 [DEBUG] [Thread-191514] [transport.py] [_log()] client lang: <none>
2026-02-14T20:17:21.898 [DEBUG] [Thread-191514] [transport.py] [_log()] server lang: <none>
2026-02-14T20:17:21.898 [DEBUG] [Thread-191514] [transport.py] [_log()] kex follows: False
2026-02-14T20:17:21.898 [DEBUG] [Thread-191514] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:17:21.898 [DEBUG] [Thread-191514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:17:21.898 [DEBUG] [Thread-191514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:17:21.898 [DEBUG] [Thread-191514] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:17:21.898 [DEBUG] [Thread-191514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:17:21.898 [DEBUG] [Thread-191514] [transport.py] [_log()] Compression: none
2026-02-14T20:17:21.898 [DEBUG] [Thread-191514] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:17:21.955 [DEBUG] [Thread-191514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:17:21.955 [DEBUG] [Thread-191514] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:17:21.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:17:21.956 [DEBUG] [Thread-191514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:17:21.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:17:22.010 [DEBUG] [Thread-191514] [transport.py] [_log()] userauth is OK
2026-02-14T20:17:22.010 [DEBUG] [Thread-191514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:17:22.010 [DEBUG] [Thread-191514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:17:22.010 [DEBUG] [Thread-191514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:17:22.010 [DEBUG] [Thread-191514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:17:22.023 [INFO] [Thread-191514] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:17:22.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-14T20:17:22.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:17:22.836 [DEBUG] [Thread-191514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:17:22.836 [DEBUG] [Thread-191514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:17:22.884 [DEBUG] [Thread-191514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:17:22.884 [DEBUG] [Thread-191514] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:17:22.894 [DEBUG] [Thread-191514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:17:22.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:17:22.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:17:22.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-14T20:17:22.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:17:22.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:17:22.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:17:22.927 [DEBUG] [Thread-191514] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:17:28.669 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:17:28.670 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:17:32.401 [DEBUG] [Thread-191516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:17:41.948 [DEBUG] [Thread-191517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:17:47.452 [DEBUG] [Thread-191518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:17:52.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:17:52.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:17:52.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:17:54.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 17, 23), 9.42, 52.31, 0.0, 35.06, 11.55, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:17:54.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:17:23
2026-02-14T20:17:55.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:17:55.314 [DEBUG] [Thread-191519] [transport.py] [_log()] starting thread (client mode): 0xa2d13520
2026-02-14T20:17:55.314 [DEBUG] [Thread-191519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:17:55.327 [DEBUG] [Thread-191519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:17:55.327 [INFO] [Thread-191519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:17:55.329 [DEBUG] [Thread-191519] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:17:55.329 [DEBUG] [Thread-191519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:17:55.329 [DEBUG] [Thread-191519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:17:55.329 [DEBUG] [Thread-191519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:17:55.329 [DEBUG] [Thread-191519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:17:55.329 [DEBUG] [Thread-191519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:17:55.329 [DEBUG] [Thread-191519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:17:55.329 [DEBUG] [Thread-191519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:17:55.329 [DEBUG] [Thread-191519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:17:55.329 [DEBUG] [Thread-191519] [transport.py] [_log()] client lang: <none>
2026-02-14T20:17:55.329 [DEBUG] [Thread-191519] [transport.py] [_log()] server lang: <none>
2026-02-14T20:17:55.329 [DEBUG] [Thread-191519] [transport.py] [_log()] kex follows: False
2026-02-14T20:17:55.329 [DEBUG] [Thread-191519] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:17:55.329 [DEBUG] [Thread-191519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:17:55.329 [DEBUG] [Thread-191519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:17:55.329 [DEBUG] [Thread-191519] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:17:55.329 [DEBUG] [Thread-191519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:17:55.329 [DEBUG] [Thread-191519] [transport.py] [_log()] Compression: none
2026-02-14T20:17:55.329 [DEBUG] [Thread-191519] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:17:55.342 [DEBUG] [Thread-191519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:17:55.342 [DEBUG] [Thread-191519] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:17:55.343 [DEBUG] [Thread-191519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:17:55.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:17:55.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:17:55.344 [DEBUG] [Thread-191519] [transport.py] [_log()] userauth is OK
2026-02-14T20:17:55.344 [DEBUG] [Thread-191519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:17:55.344 [DEBUG] [Thread-191519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:17:55.344 [DEBUG] [Thread-191519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:17:55.344 [DEBUG] [Thread-191519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:17:55.360 [INFO] [Thread-191519] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:17:55.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:17:55.933 [DEBUG] [Thread-191519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:17:55.933 [DEBUG] [Thread-191519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:17:55.934 [DEBUG] [Thread-191519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:17:55.974 [DEBUG] [Thread-191519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:17:55.974 [DEBUG] [Thread-191519] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:17:55.977 [DEBUG] [Thread-191519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:17:55.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:17:55.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:17:55.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:17:55.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:17:55.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:17:55.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:17:55.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:17:55.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:17:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:17:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.761920 -999.00  +11.40  24.34     57   +3.40 1 1 1 1 1     3    0 7.21 -32.48 ZNES. 25.1 24.3 162.4 39.7 11.9 -25.4 11.8 -24.6 11.6 -23.5 11.9 -24.7
2026-02-14T20:17:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:17:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:17:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.761920
2026-02-14T20:17:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:17:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:17:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:17:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:17:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:17:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:17:23', tmtdew=9.42, humidity=52.31, cloud=0.0, wind=35.06, temperature=11.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:17:09.888', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T18:15:00')
2026-02-14T20:17:55.993 [DEBUG] [Thread-191519] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:17:56.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T20:17:56.078 [DEBUG] [Thread-191522] [transport.py] [_log()] starting thread (client mode): 0xa57e0af0
2026-02-14T20:17:56.078 [DEBUG] [Thread-191522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:17:56.092 [DEBUG] [Thread-191522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:17:56.092 [INFO] [Thread-191522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:17:56.099 [DEBUG] [Thread-191522] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:17:56.100 [DEBUG] [Thread-191522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:17:56.100 [DEBUG] [Thread-191522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:17:56.100 [DEBUG] [Thread-191522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:17:56.100 [DEBUG] [Thread-191522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:17:56.100 [DEBUG] [Thread-191522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:17:56.100 [DEBUG] [Thread-191522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:17:56.100 [DEBUG] [Thread-191522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:17:56.100 [DEBUG] [Thread-191522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:17:56.100 [DEBUG] [Thread-191522] [transport.py] [_log()] client lang: <none>
2026-02-14T20:17:56.100 [DEBUG] [Thread-191522] [transport.py] [_log()] server lang: <none>
2026-02-14T20:17:56.101 [DEBUG] [Thread-191522] [transport.py] [_log()] kex follows: False
2026-02-14T20:17:56.101 [DEBUG] [Thread-191522] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:17:56.101 [DEBUG] [Thread-191522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:17:56.101 [DEBUG] [Thread-191522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:17:56.101 [DEBUG] [Thread-191522] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:17:56.101 [DEBUG] [Thread-191522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:17:56.101 [DEBUG] [Thread-191522] [transport.py] [_log()] Compression: none
2026-02-14T20:17:56.101 [DEBUG] [Thread-191522] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:17:56.158 [DEBUG] [Thread-191522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:17:56.158 [DEBUG] [Thread-191522] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:17:56.159 [DEBUG] [Thread-191522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:17:56.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:17:56.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:17:56.214 [DEBUG] [Thread-191522] [transport.py] [_log()] userauth is OK
2026-02-14T20:17:56.214 [DEBUG] [Thread-191522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:17:56.214 [DEBUG] [Thread-191522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:17:56.214 [DEBUG] [Thread-191522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:17:56.214 [DEBUG] [Thread-191522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:17:56.232 [INFO] [Thread-191522] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:17:56.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T20:17:56.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:17:57.040 [DEBUG] [Thread-191522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:17:57.041 [DEBUG] [Thread-191522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:17:57.088 [DEBUG] [Thread-191522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:17:57.088 [DEBUG] [Thread-191522] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:17:57.097 [DEBUG] [Thread-191522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:17:57.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:17:57.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-14T20:17:57.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:17:57.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:17:57.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:17:57.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:17:57.130 [DEBUG] [Thread-191522] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:18:02.485 [DEBUG] [Thread-191524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:18:17.537 [DEBUG] [Thread-191525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:18:27.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:18:27.128 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:18:27.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-14T20:18:28.872 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:18:28.873 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:18:28.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 17, 58), 9.42, 52.31, 0.0, 33.1, 11.58, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:18:28.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:17:58
2026-02-14T20:18:29.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:18:29.457 [DEBUG] [Thread-191526] [transport.py] [_log()] starting thread (client mode): 0xa57c1c90
2026-02-14T20:18:29.457 [DEBUG] [Thread-191526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:18:29.476 [DEBUG] [Thread-191526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:18:29.477 [INFO] [Thread-191526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:18:29.480 [DEBUG] [Thread-191526] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:18:29.480 [DEBUG] [Thread-191526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:18:29.480 [DEBUG] [Thread-191526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:18:29.480 [DEBUG] [Thread-191526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:18:29.480 [DEBUG] [Thread-191526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:18:29.480 [DEBUG] [Thread-191526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:18:29.480 [DEBUG] [Thread-191526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:18:29.480 [DEBUG] [Thread-191526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:18:29.480 [DEBUG] [Thread-191526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:18:29.480 [DEBUG] [Thread-191526] [transport.py] [_log()] client lang: <none>
2026-02-14T20:18:29.480 [DEBUG] [Thread-191526] [transport.py] [_log()] server lang: <none>
2026-02-14T20:18:29.480 [DEBUG] [Thread-191526] [transport.py] [_log()] kex follows: False
2026-02-14T20:18:29.480 [DEBUG] [Thread-191526] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:18:29.480 [DEBUG] [Thread-191526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:18:29.480 [DEBUG] [Thread-191526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:18:29.480 [DEBUG] [Thread-191526] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:18:29.480 [DEBUG] [Thread-191526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:18:29.480 [DEBUG] [Thread-191526] [transport.py] [_log()] Compression: none
2026-02-14T20:18:29.480 [DEBUG] [Thread-191526] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:18:29.497 [DEBUG] [Thread-191526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:18:29.498 [DEBUG] [Thread-191526] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:18:29.498 [DEBUG] [Thread-191526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:18:29.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:18:29.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:18:29.499 [DEBUG] [Thread-191526] [transport.py] [_log()] userauth is OK
2026-02-14T20:18:29.500 [DEBUG] [Thread-191526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:18:29.500 [DEBUG] [Thread-191526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:18:29.500 [DEBUG] [Thread-191526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:18:29.500 [DEBUG] [Thread-191526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:18:29.514 [INFO] [Thread-191526] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:18:29.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:18:30.161 [DEBUG] [Thread-191526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:18:30.161 [DEBUG] [Thread-191526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:18:30.161 [DEBUG] [Thread-191526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:18:30.202 [DEBUG] [Thread-191526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:18:30.203 [DEBUG] [Thread-191526] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:18:30.206 [DEBUG] [Thread-191526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:18:30.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:18:30.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:18:30.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:18:30.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:18:30.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:18:30.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:18:30.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:18:30.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:18:30.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:18:30.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.762267 -999.00  +11.40  25.32     57   +3.40 1 1 1 1 1     2    0 7.26 -35.71 ZNES. 23.6 25.3 163.6 28.7 12.0 -25.4 11.8 -24.5 11.6 -23.4 11.9 -24.8
2026-02-14T20:18:30.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:18:30.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:18:30.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.762267
2026-02-14T20:18:30.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:18:30.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:18:30.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:18:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:18:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:18:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:17:58', tmtdew=9.42, humidity=52.31, cloud=0.0, wind=33.1, temperature=11.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:17:39.869', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T18:15:00')
2026-02-14T20:18:30.232 [DEBUG] [Thread-191526] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:18:30.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-14T20:18:30.327 [DEBUG] [Thread-191529] [transport.py] [_log()] starting thread (client mode): 0xa2d02620
2026-02-14T20:18:30.327 [DEBUG] [Thread-191529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:18:30.341 [DEBUG] [Thread-191529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:18:30.342 [INFO] [Thread-191529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:18:30.349 [DEBUG] [Thread-191529] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:18:30.349 [DEBUG] [Thread-191529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:18:30.349 [DEBUG] [Thread-191529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:18:30.349 [DEBUG] [Thread-191529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:18:30.349 [DEBUG] [Thread-191529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:18:30.349 [DEBUG] [Thread-191529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:18:30.350 [DEBUG] [Thread-191529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:18:30.350 [DEBUG] [Thread-191529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:18:30.350 [DEBUG] [Thread-191529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:18:30.350 [DEBUG] [Thread-191529] [transport.py] [_log()] client lang: <none>
2026-02-14T20:18:30.350 [DEBUG] [Thread-191529] [transport.py] [_log()] server lang: <none>
2026-02-14T20:18:30.350 [DEBUG] [Thread-191529] [transport.py] [_log()] kex follows: False
2026-02-14T20:18:30.350 [DEBUG] [Thread-191529] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:18:30.350 [DEBUG] [Thread-191529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:18:30.350 [DEBUG] [Thread-191529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:18:30.350 [DEBUG] [Thread-191529] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:18:30.350 [DEBUG] [Thread-191529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:18:30.350 [DEBUG] [Thread-191529] [transport.py] [_log()] Compression: none
2026-02-14T20:18:30.350 [DEBUG] [Thread-191529] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:18:30.406 [DEBUG] [Thread-191529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:18:30.407 [DEBUG] [Thread-191529] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:18:30.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:18:30.408 [DEBUG] [Thread-191529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:18:30.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:18:30.463 [DEBUG] [Thread-191529] [transport.py] [_log()] userauth is OK
2026-02-14T20:18:30.463 [DEBUG] [Thread-191529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:18:30.463 [DEBUG] [Thread-191529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:18:30.463 [DEBUG] [Thread-191529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:18:30.463 [DEBUG] [Thread-191529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:18:30.489 [INFO] [Thread-191529] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:18:30.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-14T20:18:30.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:18:31.298 [DEBUG] [Thread-191529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:18:31.298 [DEBUG] [Thread-191529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:18:31.345 [DEBUG] [Thread-191529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:18:31.346 [DEBUG] [Thread-191529] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:18:31.355 [DEBUG] [Thread-191529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:18:31.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:18:31.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-14T20:18:31.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-14T20:18:31.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:18:31.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:18:31.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:18:31.391 [DEBUG] [Thread-191529] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:18:32.575 [DEBUG] [Thread-191531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:18:38.420 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:18:42.014 [DEBUG] [Thread-191532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:18:47.621 [DEBUG] [Thread-191533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:19:01.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:19:01.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:19:01.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-14T20:19:02.656 [DEBUG] [Thread-191534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:19:03.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 18, 33), 9.6, 51.75, 0.0, 38.74, 11.86, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:19:03.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:18:33
2026-02-14T20:19:03.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:19:03.779 [DEBUG] [Thread-191535] [transport.py] [_log()] starting thread (client mode): 0xa2d02350
2026-02-14T20:19:03.779 [DEBUG] [Thread-191535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:19:03.799 [DEBUG] [Thread-191535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:19:03.799 [INFO] [Thread-191535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:19:03.802 [DEBUG] [Thread-191535] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:19:03.802 [DEBUG] [Thread-191535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:19:03.802 [DEBUG] [Thread-191535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:19:03.802 [DEBUG] [Thread-191535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:19:03.802 [DEBUG] [Thread-191535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:19:03.802 [DEBUG] [Thread-191535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:19:03.802 [DEBUG] [Thread-191535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:19:03.803 [DEBUG] [Thread-191535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:19:03.803 [DEBUG] [Thread-191535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:19:03.803 [DEBUG] [Thread-191535] [transport.py] [_log()] client lang: <none>
2026-02-14T20:19:03.803 [DEBUG] [Thread-191535] [transport.py] [_log()] server lang: <none>
2026-02-14T20:19:03.803 [DEBUG] [Thread-191535] [transport.py] [_log()] kex follows: False
2026-02-14T20:19:03.803 [DEBUG] [Thread-191535] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:19:03.803 [DEBUG] [Thread-191535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:19:03.803 [DEBUG] [Thread-191535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:19:03.803 [DEBUG] [Thread-191535] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:19:03.803 [DEBUG] [Thread-191535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:19:03.803 [DEBUG] [Thread-191535] [transport.py] [_log()] Compression: none
2026-02-14T20:19:03.803 [DEBUG] [Thread-191535] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:19:03.820 [DEBUG] [Thread-191535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:19:03.821 [DEBUG] [Thread-191535] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:19:03.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:19:03.821 [DEBUG] [Thread-191535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:19:03.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:19:03.823 [DEBUG] [Thread-191535] [transport.py] [_log()] userauth is OK
2026-02-14T20:19:03.824 [DEBUG] [Thread-191535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:19:03.824 [DEBUG] [Thread-191535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:19:03.824 [DEBUG] [Thread-191535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:19:03.824 [DEBUG] [Thread-191535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:19:03.848 [INFO] [Thread-191535] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:19:03.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:19:04.502 [DEBUG] [Thread-191535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:19:04.503 [DEBUG] [Thread-191535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:19:04.503 [DEBUG] [Thread-191535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:19:04.543 [DEBUG] [Thread-191535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:19:04.543 [DEBUG] [Thread-191535] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:19:04.546 [DEBUG] [Thread-191535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:19:04.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:19:04.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:19:04.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:19:04.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:19:04.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:19:04.567 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:19:04.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:19:04.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:19:04.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:19:04.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.762614 -999.00  +11.40  22.87     57   +3.40 1 1 1 1 1     2    0 7.17 -33.90 ZNES. 27.9 22.9 164.1 35.1 11.9 -25.4 11.8 -24.5 11.5 -23.4 11.9 -24.8
2026-02-14T20:19:04.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:19:04.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:19:04.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.762614
2026-02-14T20:19:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:19:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:19:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:19:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:19:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:19:04.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:18:33', tmtdew=9.6, humidity=51.75, cloud=0.0, wind=38.74, temperature=11.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:18:09.850', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T18:15:00')
2026-02-14T20:19:04.570 [DEBUG] [Thread-191535] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:19:04.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-14T20:19:04.667 [DEBUG] [Thread-191538] [transport.py] [_log()] starting thread (client mode): 0xa57c0eb0
2026-02-14T20:19:04.667 [DEBUG] [Thread-191538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:19:04.681 [DEBUG] [Thread-191538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:19:04.682 [INFO] [Thread-191538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:19:04.689 [DEBUG] [Thread-191538] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:19:04.690 [DEBUG] [Thread-191538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:19:04.690 [DEBUG] [Thread-191538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:19:04.690 [DEBUG] [Thread-191538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:19:04.690 [DEBUG] [Thread-191538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:19:04.690 [DEBUG] [Thread-191538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:19:04.690 [DEBUG] [Thread-191538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:19:04.690 [DEBUG] [Thread-191538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:19:04.691 [DEBUG] [Thread-191538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:19:04.691 [DEBUG] [Thread-191538] [transport.py] [_log()] client lang: <none>
2026-02-14T20:19:04.691 [DEBUG] [Thread-191538] [transport.py] [_log()] server lang: <none>
2026-02-14T20:19:04.691 [DEBUG] [Thread-191538] [transport.py] [_log()] kex follows: False
2026-02-14T20:19:04.691 [DEBUG] [Thread-191538] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:19:04.691 [DEBUG] [Thread-191538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:19:04.691 [DEBUG] [Thread-191538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:19:04.691 [DEBUG] [Thread-191538] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:19:04.692 [DEBUG] [Thread-191538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:19:04.692 [DEBUG] [Thread-191538] [transport.py] [_log()] Compression: none
2026-02-14T20:19:04.692 [DEBUG] [Thread-191538] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:19:04.751 [DEBUG] [Thread-191538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:19:04.752 [DEBUG] [Thread-191538] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:19:04.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:19:04.753 [DEBUG] [Thread-191538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:19:04.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:19:04.811 [DEBUG] [Thread-191538] [transport.py] [_log()] userauth is OK
2026-02-14T20:19:04.811 [DEBUG] [Thread-191538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:19:04.811 [DEBUG] [Thread-191538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:19:04.811 [DEBUG] [Thread-191538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:19:04.812 [DEBUG] [Thread-191538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:19:04.831 [INFO] [Thread-191538] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:19:04.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-14T20:19:04.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:19:05.649 [DEBUG] [Thread-191538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:19:05.649 [DEBUG] [Thread-191538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:19:05.697 [DEBUG] [Thread-191538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:19:05.697 [DEBUG] [Thread-191538] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:19:05.706 [DEBUG] [Thread-191538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:19:05.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:19:05.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-14T20:19:05.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-14T20:19:05.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:19:05.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:19:05.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:19:05.744 [DEBUG] [Thread-191538] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:19:17.692 [DEBUG] [Thread-191540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:19:29.080 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:19:29.081 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:19:32.743 [DEBUG] [Thread-191541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:19:35.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:19:35.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:19:35.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-14T20:19:37.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 19, 8), 9.44, 52.43, 0.0, 35.55, 11.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:19:37.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:19:08
2026-02-14T20:19:38.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:19:38.300 [DEBUG] [Thread-191542] [transport.py] [_log()] starting thread (client mode): 0xa2d6c400
2026-02-14T20:19:38.300 [DEBUG] [Thread-191542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:19:38.321 [DEBUG] [Thread-191542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:19:38.321 [INFO] [Thread-191542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:19:38.324 [DEBUG] [Thread-191542] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:19:38.325 [DEBUG] [Thread-191542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:19:38.325 [DEBUG] [Thread-191542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:19:38.325 [DEBUG] [Thread-191542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:19:38.325 [DEBUG] [Thread-191542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:19:38.325 [DEBUG] [Thread-191542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:19:38.325 [DEBUG] [Thread-191542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:19:38.325 [DEBUG] [Thread-191542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:19:38.325 [DEBUG] [Thread-191542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:19:38.325 [DEBUG] [Thread-191542] [transport.py] [_log()] client lang: <none>
2026-02-14T20:19:38.325 [DEBUG] [Thread-191542] [transport.py] [_log()] server lang: <none>
2026-02-14T20:19:38.325 [DEBUG] [Thread-191542] [transport.py] [_log()] kex follows: False
2026-02-14T20:19:38.325 [DEBUG] [Thread-191542] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:19:38.325 [DEBUG] [Thread-191542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:19:38.325 [DEBUG] [Thread-191542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:19:38.325 [DEBUG] [Thread-191542] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:19:38.325 [DEBUG] [Thread-191542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:19:38.325 [DEBUG] [Thread-191542] [transport.py] [_log()] Compression: none
2026-02-14T20:19:38.325 [DEBUG] [Thread-191542] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:19:38.341 [DEBUG] [Thread-191542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:19:38.341 [DEBUG] [Thread-191542] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:19:38.341 [DEBUG] [Thread-191542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:19:38.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:19:38.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:19:38.341 [DEBUG] [Thread-191542] [transport.py] [_log()] userauth is OK
2026-02-14T20:19:38.341 [DEBUG] [Thread-191542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:19:38.342 [DEBUG] [Thread-191542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:19:38.342 [DEBUG] [Thread-191542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:19:38.342 [DEBUG] [Thread-191542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:19:38.352 [INFO] [Thread-191542] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:19:38.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:19:38.988 [DEBUG] [Thread-191542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:19:38.989 [DEBUG] [Thread-191542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:19:38.989 [DEBUG] [Thread-191542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:19:39.029 [DEBUG] [Thread-191542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:19:39.030 [DEBUG] [Thread-191542] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:19:39.033 [DEBUG] [Thread-191542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:19:39.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:19:39.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:19:39.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:19:39.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:19:39.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:19:39.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:19:39.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:19:39.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:19:39.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:19:39.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.763309 -999.00  +11.40  30.59     58   +3.40 1 1 2 1 1     2    0 7.28 -32.65 ZNES. 35.6 30.6 157.0 33.7 11.9 -25.5 11.7 -24.5 11.5 -23.3 11.8 -24.7
2026-02-14T20:19:39.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:19:39.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:19:39.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.763309
2026-02-14T20:19:39.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:19:39.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:19:39.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:19:39.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:19:39.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:19:39.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:19:08', tmtdew=9.44, humidity=52.43, cloud=0.0, wind=35.55, temperature=11.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:19:09.898', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T18:15:00')
2026-02-14T20:19:39.060 [DEBUG] [Thread-191542] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:19:39.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-14T20:19:39.155 [DEBUG] [Thread-191545] [transport.py] [_log()] starting thread (client mode): 0xa2d6f4f0
2026-02-14T20:19:39.155 [DEBUG] [Thread-191545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:19:39.170 [DEBUG] [Thread-191545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:19:39.170 [INFO] [Thread-191545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:19:39.177 [DEBUG] [Thread-191545] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:19:39.178 [DEBUG] [Thread-191545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:19:39.178 [DEBUG] [Thread-191545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:19:39.178 [DEBUG] [Thread-191545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:19:39.179 [DEBUG] [Thread-191545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:19:39.179 [DEBUG] [Thread-191545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:19:39.179 [DEBUG] [Thread-191545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:19:39.179 [DEBUG] [Thread-191545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:19:39.179 [DEBUG] [Thread-191545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:19:39.179 [DEBUG] [Thread-191545] [transport.py] [_log()] client lang: <none>
2026-02-14T20:19:39.179 [DEBUG] [Thread-191545] [transport.py] [_log()] server lang: <none>
2026-02-14T20:19:39.179 [DEBUG] [Thread-191545] [transport.py] [_log()] kex follows: False
2026-02-14T20:19:39.179 [DEBUG] [Thread-191545] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:19:39.179 [DEBUG] [Thread-191545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:19:39.179 [DEBUG] [Thread-191545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:19:39.179 [DEBUG] [Thread-191545] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:19:39.179 [DEBUG] [Thread-191545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:19:39.179 [DEBUG] [Thread-191545] [transport.py] [_log()] Compression: none
2026-02-14T20:19:39.179 [DEBUG] [Thread-191545] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:19:39.234 [DEBUG] [Thread-191545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:19:39.235 [DEBUG] [Thread-191545] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:19:39.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:19:39.236 [DEBUG] [Thread-191545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:19:39.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:19:39.300 [DEBUG] [Thread-191545] [transport.py] [_log()] userauth is OK
2026-02-14T20:19:39.300 [DEBUG] [Thread-191545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:19:39.300 [DEBUG] [Thread-191545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:19:39.300 [DEBUG] [Thread-191545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:19:39.301 [DEBUG] [Thread-191545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:19:39.325 [INFO] [Thread-191545] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:19:39.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T20:19:39.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:19:40.157 [DEBUG] [Thread-191545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:19:40.158 [DEBUG] [Thread-191545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:19:40.205 [DEBUG] [Thread-191545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:19:40.205 [DEBUG] [Thread-191545] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:19:40.214 [DEBUG] [Thread-191545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:19:40.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:19:40.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-14T20:19:40.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-14T20:19:40.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:19:40.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:19:40.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:19:40.249 [DEBUG] [Thread-191545] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:19:42.083 [DEBUG] [Thread-191547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:19:47.782 [DEBUG] [Thread-191548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:20:02.843 [DEBUG] [Thread-191549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:20:10.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:20:10.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:20:10.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-14T20:20:11.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 19, 44), 9.39, 52.41, 0.0, 33.86, 11.53, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:20:11.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:19:44
2026-02-14T20:20:12.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:20:12.469 [DEBUG] [Thread-191550] [transport.py] [_log()] starting thread (client mode): 0xa2d6e1d0
2026-02-14T20:20:12.469 [DEBUG] [Thread-191550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:20:12.488 [DEBUG] [Thread-191550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:20:12.489 [INFO] [Thread-191550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:20:12.492 [DEBUG] [Thread-191550] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:20:12.492 [DEBUG] [Thread-191550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:20:12.492 [DEBUG] [Thread-191550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:20:12.492 [DEBUG] [Thread-191550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:20:12.492 [DEBUG] [Thread-191550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:20:12.492 [DEBUG] [Thread-191550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:20:12.492 [DEBUG] [Thread-191550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:20:12.492 [DEBUG] [Thread-191550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:20:12.492 [DEBUG] [Thread-191550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:20:12.492 [DEBUG] [Thread-191550] [transport.py] [_log()] client lang: <none>
2026-02-14T20:20:12.492 [DEBUG] [Thread-191550] [transport.py] [_log()] server lang: <none>
2026-02-14T20:20:12.492 [DEBUG] [Thread-191550] [transport.py] [_log()] kex follows: False
2026-02-14T20:20:12.492 [DEBUG] [Thread-191550] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:20:12.492 [DEBUG] [Thread-191550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:20:12.492 [DEBUG] [Thread-191550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:20:12.492 [DEBUG] [Thread-191550] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:20:12.492 [DEBUG] [Thread-191550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:20:12.492 [DEBUG] [Thread-191550] [transport.py] [_log()] Compression: none
2026-02-14T20:20:12.492 [DEBUG] [Thread-191550] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:20:12.512 [DEBUG] [Thread-191550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:20:12.512 [DEBUG] [Thread-191550] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:20:12.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:20:12.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:20:12.514 [DEBUG] [Thread-191550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:20:12.515 [DEBUG] [Thread-191550] [transport.py] [_log()] userauth is OK
2026-02-14T20:20:12.515 [DEBUG] [Thread-191550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:20:12.515 [DEBUG] [Thread-191550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:20:12.515 [DEBUG] [Thread-191550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:20:12.515 [DEBUG] [Thread-191550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:20:12.551 [INFO] [Thread-191550] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:20:12.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:20:12.705 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:20:13.337 [DEBUG] [Thread-191550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:20:13.337 [DEBUG] [Thread-191550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:20:13.337 [DEBUG] [Thread-191550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:20:13.377 [DEBUG] [Thread-191550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:20:13.378 [DEBUG] [Thread-191550] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:20:13.381 [DEBUG] [Thread-191550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:20:13.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:20:13.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:20:13.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:20:13.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:20:13.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:20:13.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:20:13.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:20:13.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:20:13.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:20:13.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.763656 -999.00  +11.40  32.23     58   +3.40 1 1 2 1 1     2    0 7.37 -30.48 ZNES. 25.3 32.2 166.4 43.8 11.9 -25.4 11.7 -24.5 11.5 -23.4 11.9 -24.8
2026-02-14T20:20:13.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:20:13.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:20:13.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.763656
2026-02-14T20:20:13.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:20:13.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:20:13.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:20:13.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:20:13.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:20:13.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:19:44', tmtdew=9.39, humidity=52.41, cloud=0.0, wind=33.86, temperature=11.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:19:39.878', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T18:17:00')
2026-02-14T20:20:13.408 [DEBUG] [Thread-191550] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:20:13.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-14T20:20:13.513 [DEBUG] [Thread-191553] [transport.py] [_log()] starting thread (client mode): 0xa2d7b1c0
2026-02-14T20:20:13.513 [DEBUG] [Thread-191553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:20:13.528 [DEBUG] [Thread-191553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:20:13.528 [INFO] [Thread-191553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:20:13.536 [DEBUG] [Thread-191553] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:20:13.536 [DEBUG] [Thread-191553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:20:13.536 [DEBUG] [Thread-191553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:20:13.536 [DEBUG] [Thread-191553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:20:13.536 [DEBUG] [Thread-191553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:20:13.536 [DEBUG] [Thread-191553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:20:13.537 [DEBUG] [Thread-191553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:20:13.537 [DEBUG] [Thread-191553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:20:13.537 [DEBUG] [Thread-191553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:20:13.537 [DEBUG] [Thread-191553] [transport.py] [_log()] client lang: <none>
2026-02-14T20:20:13.537 [DEBUG] [Thread-191553] [transport.py] [_log()] server lang: <none>
2026-02-14T20:20:13.537 [DEBUG] [Thread-191553] [transport.py] [_log()] kex follows: False
2026-02-14T20:20:13.537 [DEBUG] [Thread-191553] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:20:13.537 [DEBUG] [Thread-191553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:20:13.537 [DEBUG] [Thread-191553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:20:13.537 [DEBUG] [Thread-191553] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:20:13.537 [DEBUG] [Thread-191553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:20:13.537 [DEBUG] [Thread-191553] [transport.py] [_log()] Compression: none
2026-02-14T20:20:13.537 [DEBUG] [Thread-191553] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:20:13.595 [DEBUG] [Thread-191553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:20:13.596 [DEBUG] [Thread-191553] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:20:13.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:20:13.597 [DEBUG] [Thread-191553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:20:13.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:20:13.651 [DEBUG] [Thread-191553] [transport.py] [_log()] userauth is OK
2026-02-14T20:20:13.651 [DEBUG] [Thread-191553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:20:13.651 [DEBUG] [Thread-191553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:20:13.651 [DEBUG] [Thread-191553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:20:13.651 [DEBUG] [Thread-191553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:20:13.670 [INFO] [Thread-191553] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:20:13.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-14T20:20:13.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:20:14.480 [DEBUG] [Thread-191553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:20:14.480 [DEBUG] [Thread-191553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:20:14.528 [DEBUG] [Thread-191553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:20:14.528 [DEBUG] [Thread-191553] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:20:14.537 [DEBUG] [Thread-191553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:20:14.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:20:14.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-14T20:20:14.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-14T20:20:14.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:20:14.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:20:14.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:20:14.574 [DEBUG] [Thread-191553] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:20:17.876 [DEBUG] [Thread-191555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:20:29.281 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:20:29.283 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:20:32.927 [DEBUG] [Thread-191556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:20:42.152 [DEBUG] [Thread-191557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:20:44.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:20:44.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:20:44.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-14T20:20:46.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 20, 19), 9.4, 52.39, 0.0, 32.87, 11.56, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:20:46.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:20:19
2026-02-14T20:20:46.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:20:46.950 [DEBUG] [Thread-191558] [transport.py] [_log()] starting thread (client mode): 0xa2d6df60
2026-02-14T20:20:46.950 [DEBUG] [Thread-191558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:20:46.971 [DEBUG] [Thread-191558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:20:46.971 [INFO] [Thread-191558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:20:46.975 [DEBUG] [Thread-191558] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:20:46.975 [DEBUG] [Thread-191558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:20:46.975 [DEBUG] [Thread-191558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:20:46.975 [DEBUG] [Thread-191558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:20:46.975 [DEBUG] [Thread-191558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:20:46.975 [DEBUG] [Thread-191558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:20:46.975 [DEBUG] [Thread-191558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:20:46.975 [DEBUG] [Thread-191558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:20:46.975 [DEBUG] [Thread-191558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:20:46.975 [DEBUG] [Thread-191558] [transport.py] [_log()] client lang: <none>
2026-02-14T20:20:46.975 [DEBUG] [Thread-191558] [transport.py] [_log()] server lang: <none>
2026-02-14T20:20:46.975 [DEBUG] [Thread-191558] [transport.py] [_log()] kex follows: False
2026-02-14T20:20:46.975 [DEBUG] [Thread-191558] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:20:46.975 [DEBUG] [Thread-191558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:20:46.975 [DEBUG] [Thread-191558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:20:46.975 [DEBUG] [Thread-191558] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:20:46.975 [DEBUG] [Thread-191558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:20:46.975 [DEBUG] [Thread-191558] [transport.py] [_log()] Compression: none
2026-02-14T20:20:46.975 [DEBUG] [Thread-191558] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:20:46.992 [DEBUG] [Thread-191558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:20:46.993 [DEBUG] [Thread-191558] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:20:46.993 [DEBUG] [Thread-191558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:20:46.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:20:46.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:20:46.995 [DEBUG] [Thread-191558] [transport.py] [_log()] userauth is OK
2026-02-14T20:20:46.996 [DEBUG] [Thread-191558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:20:46.996 [DEBUG] [Thread-191558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:20:46.996 [DEBUG] [Thread-191558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:20:46.996 [DEBUG] [Thread-191558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:20:47.019 [INFO] [Thread-191558] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:20:47.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:20:47.815 [DEBUG] [Thread-191558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:20:47.815 [DEBUG] [Thread-191558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:20:47.815 [DEBUG] [Thread-191558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:20:47.856 [DEBUG] [Thread-191558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:20:47.857 [DEBUG] [Thread-191558] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:20:47.860 [DEBUG] [Thread-191558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:20:47.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:20:47.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:20:47.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:20:47.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:20:47.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:20:47.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:20:47.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:20:47.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:20:47.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:20:47.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.764003 -999.00  +11.40  30.48     57   +3.40 1 1 2 1 1     1    0 7.15 -32.40 ZNES. 24.1 30.5 167.4 41.4 11.8 -25.4 11.7 -24.5 11.5 -23.4 11.9 -24.7
2026-02-14T20:20:47.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:20:47.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:20:47.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.764003
2026-02-14T20:20:47.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:20:47.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:20:47.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:20:47.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:20:47.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:20:47.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:20:19', tmtdew=9.4, humidity=52.39, cloud=0.0, wind=32.87, temperature=11.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:20:09.859', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T18:17:00')
2026-02-14T20:20:47.886 [DEBUG] [Thread-191558] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:20:47.962 [DEBUG] [Thread-191561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:20:47.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-14T20:20:47.987 [DEBUG] [Thread-191562] [transport.py] [_log()] starting thread (client mode): 0xa5770af0
2026-02-14T20:20:47.988 [DEBUG] [Thread-191562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:20:48.002 [DEBUG] [Thread-191562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:20:48.002 [INFO] [Thread-191562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:20:48.010 [DEBUG] [Thread-191562] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:20:48.011 [DEBUG] [Thread-191562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:20:48.011 [DEBUG] [Thread-191562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:20:48.011 [DEBUG] [Thread-191562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:20:48.011 [DEBUG] [Thread-191562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:20:48.011 [DEBUG] [Thread-191562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:20:48.011 [DEBUG] [Thread-191562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:20:48.011 [DEBUG] [Thread-191562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:20:48.011 [DEBUG] [Thread-191562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:20:48.011 [DEBUG] [Thread-191562] [transport.py] [_log()] client lang: <none>
2026-02-14T20:20:48.012 [DEBUG] [Thread-191562] [transport.py] [_log()] server lang: <none>
2026-02-14T20:20:48.012 [DEBUG] [Thread-191562] [transport.py] [_log()] kex follows: False
2026-02-14T20:20:48.012 [DEBUG] [Thread-191562] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:20:48.012 [DEBUG] [Thread-191562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:20:48.012 [DEBUG] [Thread-191562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:20:48.012 [DEBUG] [Thread-191562] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:20:48.012 [DEBUG] [Thread-191562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:20:48.012 [DEBUG] [Thread-191562] [transport.py] [_log()] Compression: none
2026-02-14T20:20:48.012 [DEBUG] [Thread-191562] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:20:48.069 [DEBUG] [Thread-191562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:20:48.070 [DEBUG] [Thread-191562] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:20:48.070 [DEBUG] [Thread-191562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:20:48.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:20:48.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:20:48.126 [DEBUG] [Thread-191562] [transport.py] [_log()] userauth is OK
2026-02-14T20:20:48.126 [DEBUG] [Thread-191562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:20:48.126 [DEBUG] [Thread-191562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:20:48.126 [DEBUG] [Thread-191562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:20:48.126 [DEBUG] [Thread-191562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:20:48.141 [INFO] [Thread-191562] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:20:48.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-14T20:20:48.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:20:49.015 [DEBUG] [Thread-191562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:20:49.016 [DEBUG] [Thread-191562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:20:49.063 [DEBUG] [Thread-191562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:20:49.064 [DEBUG] [Thread-191562] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:20:49.073 [DEBUG] [Thread-191562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:20:49.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:20:49.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-14T20:20:49.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-14T20:20:49.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:20:49.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:20:49.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:20:49.109 [DEBUG] [Thread-191562] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:21:03.001 [DEBUG] [Thread-191564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:21:18.039 [DEBUG] [Thread-191565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:21:19.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:21:19.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:21:19.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-14T20:21:21.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 20, 54), 9.34, 52.39, 0.0, 37.16, 11.52, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:21:21.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:20:54
2026-02-14T20:21:21.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:21:21.672 [DEBUG] [Thread-191566] [transport.py] [_log()] starting thread (client mode): 0xa2d6faf0
2026-02-14T20:21:21.672 [DEBUG] [Thread-191566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:21:21.693 [DEBUG] [Thread-191566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:21:21.693 [INFO] [Thread-191566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:21:21.694 [DEBUG] [Thread-191566] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:21:21.694 [DEBUG] [Thread-191566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:21:21.694 [DEBUG] [Thread-191566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:21:21.694 [DEBUG] [Thread-191566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:21:21.695 [DEBUG] [Thread-191566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:21:21.695 [DEBUG] [Thread-191566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:21:21.695 [DEBUG] [Thread-191566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:21:21.695 [DEBUG] [Thread-191566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:21:21.695 [DEBUG] [Thread-191566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:21:21.695 [DEBUG] [Thread-191566] [transport.py] [_log()] client lang: <none>
2026-02-14T20:21:21.695 [DEBUG] [Thread-191566] [transport.py] [_log()] server lang: <none>
2026-02-14T20:21:21.695 [DEBUG] [Thread-191566] [transport.py] [_log()] kex follows: False
2026-02-14T20:21:21.695 [DEBUG] [Thread-191566] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:21:21.695 [DEBUG] [Thread-191566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:21:21.695 [DEBUG] [Thread-191566] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:21:21.695 [DEBUG] [Thread-191566] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:21:21.695 [DEBUG] [Thread-191566] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:21:21.695 [DEBUG] [Thread-191566] [transport.py] [_log()] Compression: none
2026-02-14T20:21:21.695 [DEBUG] [Thread-191566] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:21:21.715 [DEBUG] [Thread-191566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:21:21.715 [DEBUG] [Thread-191566] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:21:21.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:21:21.716 [DEBUG] [Thread-191566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:21:21.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:21:21.718 [DEBUG] [Thread-191566] [transport.py] [_log()] userauth is OK
2026-02-14T20:21:21.719 [DEBUG] [Thread-191566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:21:21.719 [DEBUG] [Thread-191566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:21:21.719 [DEBUG] [Thread-191566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:21:21.719 [DEBUG] [Thread-191566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:21:21.732 [INFO] [Thread-191566] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:21:21.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:21:22.353 [DEBUG] [Thread-191566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:21:22.353 [DEBUG] [Thread-191566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:21:22.353 [DEBUG] [Thread-191566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:21:22.393 [DEBUG] [Thread-191566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:21:22.393 [DEBUG] [Thread-191566] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:21:22.396 [DEBUG] [Thread-191566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:21:22.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:21:22.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:21:22.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:21:22.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:21:22.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:21:22.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:21:22.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:21:22.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:21:22.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:21:22.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.764350 -999.00  +11.40  22.87     57   +3.40 1 1 1 1 1     1    0 7.36 -29.68 ZNESW 18.9 22.9 170.8 32.5 11.9 -25.5 11.7 -24.6 11.5 -23.5 11.8 -24.7
2026-02-14T20:21:22.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:21:22.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:21:22.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.764350
2026-02-14T20:21:22.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:21:22.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:21:22.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:21:22.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:21:22.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:21:22.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:20:54', tmtdew=9.34, humidity=52.39, cloud=0.0, wind=37.16, temperature=11.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:20:39.840', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T18:17:00')
2026-02-14T20:21:22.423 [DEBUG] [Thread-191566] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:21:22.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T20:21:22.518 [DEBUG] [Thread-191569] [transport.py] [_log()] starting thread (client mode): 0xa2d6f2e0
2026-02-14T20:21:22.518 [DEBUG] [Thread-191569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:21:22.532 [DEBUG] [Thread-191569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:21:22.532 [INFO] [Thread-191569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:21:22.541 [DEBUG] [Thread-191569] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:21:22.541 [DEBUG] [Thread-191569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:21:22.541 [DEBUG] [Thread-191569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:21:22.541 [DEBUG] [Thread-191569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:21:22.541 [DEBUG] [Thread-191569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:21:22.541 [DEBUG] [Thread-191569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:21:22.541 [DEBUG] [Thread-191569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:21:22.541 [DEBUG] [Thread-191569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:21:22.541 [DEBUG] [Thread-191569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:21:22.542 [DEBUG] [Thread-191569] [transport.py] [_log()] client lang: <none>
2026-02-14T20:21:22.542 [DEBUG] [Thread-191569] [transport.py] [_log()] server lang: <none>
2026-02-14T20:21:22.542 [DEBUG] [Thread-191569] [transport.py] [_log()] kex follows: False
2026-02-14T20:21:22.542 [DEBUG] [Thread-191569] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:21:22.542 [DEBUG] [Thread-191569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:21:22.542 [DEBUG] [Thread-191569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:21:22.542 [DEBUG] [Thread-191569] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:21:22.542 [DEBUG] [Thread-191569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:21:22.542 [DEBUG] [Thread-191569] [transport.py] [_log()] Compression: none
2026-02-14T20:21:22.542 [DEBUG] [Thread-191569] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:21:22.599 [DEBUG] [Thread-191569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:21:22.599 [DEBUG] [Thread-191569] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:21:22.600 [DEBUG] [Thread-191569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:21:22.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:21:22.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:21:22.655 [DEBUG] [Thread-191569] [transport.py] [_log()] userauth is OK
2026-02-14T20:21:22.655 [DEBUG] [Thread-191569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:21:22.655 [DEBUG] [Thread-191569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:21:22.655 [DEBUG] [Thread-191569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:21:22.655 [DEBUG] [Thread-191569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:21:22.673 [INFO] [Thread-191569] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:21:22.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-14T20:21:22.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:21:23.554 [DEBUG] [Thread-191569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:21:23.554 [DEBUG] [Thread-191569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:21:23.602 [DEBUG] [Thread-191569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:21:23.602 [DEBUG] [Thread-191569] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:21:23.611 [DEBUG] [Thread-191569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:21:23.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:21:23.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:21:23.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-14T20:21:23.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:21:23.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:21:23.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:21:23.645 [DEBUG] [Thread-191569] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:21:29.481 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:21:29.482 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:21:33.073 [DEBUG] [Thread-191571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:21:42.227 [DEBUG] [Thread-191572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:21:46.301 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:21:48.120 [DEBUG] [Thread-191573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:21:53.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:21:53.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:21: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-14T20:21:55.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 21, 30), 9.34, 52.39, 0.0, 38.08, 11.53, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:21:55.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:21:30
2026-02-14T20:21:55.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:21:56.080 [DEBUG] [Thread-191574] [transport.py] [_log()] starting thread (client mode): 0xa2d6d5d0
2026-02-14T20:21:56.080 [DEBUG] [Thread-191574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:21:56.101 [DEBUG] [Thread-191574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:21:56.101 [INFO] [Thread-191574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:21:56.111 [DEBUG] [Thread-191574] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:21:56.112 [DEBUG] [Thread-191574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:21:56.112 [DEBUG] [Thread-191574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:21:56.112 [DEBUG] [Thread-191574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:21:56.112 [DEBUG] [Thread-191574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:21:56.112 [DEBUG] [Thread-191574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:21:56.112 [DEBUG] [Thread-191574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:21:56.112 [DEBUG] [Thread-191574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:21:56.112 [DEBUG] [Thread-191574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:21:56.112 [DEBUG] [Thread-191574] [transport.py] [_log()] client lang: <none>
2026-02-14T20:21:56.112 [DEBUG] [Thread-191574] [transport.py] [_log()] server lang: <none>
2026-02-14T20:21:56.112 [DEBUG] [Thread-191574] [transport.py] [_log()] kex follows: False
2026-02-14T20:21:56.112 [DEBUG] [Thread-191574] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:21:56.112 [DEBUG] [Thread-191574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:21:56.112 [DEBUG] [Thread-191574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:21:56.113 [DEBUG] [Thread-191574] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:21:56.113 [DEBUG] [Thread-191574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:21:56.113 [DEBUG] [Thread-191574] [transport.py] [_log()] Compression: none
2026-02-14T20:21:56.113 [DEBUG] [Thread-191574] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:21:56.132 [DEBUG] [Thread-191574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:21:56.133 [DEBUG] [Thread-191574] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:21:56.133 [DEBUG] [Thread-191574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:21:56.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:21:56.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:21:56.136 [DEBUG] [Thread-191574] [transport.py] [_log()] userauth is OK
2026-02-14T20:21:56.136 [DEBUG] [Thread-191574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:21:56.136 [DEBUG] [Thread-191574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:21:56.136 [DEBUG] [Thread-191574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:21:56.136 [DEBUG] [Thread-191574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:21:56.162 [INFO] [Thread-191574] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:21:56.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:21:56.811 [DEBUG] [Thread-191574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:21:56.811 [DEBUG] [Thread-191574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:21:56.811 [DEBUG] [Thread-191574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:21:56.851 [DEBUG] [Thread-191574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:21:56.851 [DEBUG] [Thread-191574] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:21:56.855 [DEBUG] [Thread-191574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:21:56.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:21:56.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:21:56.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:21:56.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:21:56.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:21:56.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:21:56.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:21:56.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:21:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:21:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.764698 -999.00  +11.40  25.78     58   +3.40 1 1 1 1 1     1    0 7.19 -30.49 ZNESW 22.5 25.8 167.6 35.1 11.8 -25.5 11.7 -24.6 11.5 -23.6 11.8 -24.7
2026-02-14T20:21:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:21:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:21:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.764698
2026-02-14T20:21:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:21:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:21:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:21:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:21:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:21:56.885 [DEBUG] [Thread-191574] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:21:56.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:21:30', tmtdew=9.34, humidity=52.39, cloud=0.0, wind=38.08, temperature=11.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:21:09.907', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T18:17:00')
2026-02-14T20:21:56.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-14T20:21:56.982 [DEBUG] [Thread-191577] [transport.py] [_log()] starting thread (client mode): 0xa57d6d70
2026-02-14T20:21:56.983 [DEBUG] [Thread-191577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:21:56.997 [DEBUG] [Thread-191577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:21:56.997 [INFO] [Thread-191577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:21:57.004 [DEBUG] [Thread-191577] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:21:57.005 [DEBUG] [Thread-191577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:21:57.005 [DEBUG] [Thread-191577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:21:57.005 [DEBUG] [Thread-191577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:21:57.005 [DEBUG] [Thread-191577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:21:57.005 [DEBUG] [Thread-191577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:21:57.005 [DEBUG] [Thread-191577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:21:57.005 [DEBUG] [Thread-191577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:21:57.005 [DEBUG] [Thread-191577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:21:57.005 [DEBUG] [Thread-191577] [transport.py] [_log()] client lang: <none>
2026-02-14T20:21:57.005 [DEBUG] [Thread-191577] [transport.py] [_log()] server lang: <none>
2026-02-14T20:21:57.005 [DEBUG] [Thread-191577] [transport.py] [_log()] kex follows: False
2026-02-14T20:21:57.005 [DEBUG] [Thread-191577] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:21:57.005 [DEBUG] [Thread-191577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:21:57.005 [DEBUG] [Thread-191577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:21:57.005 [DEBUG] [Thread-191577] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:21:57.005 [DEBUG] [Thread-191577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:21:57.005 [DEBUG] [Thread-191577] [transport.py] [_log()] Compression: none
2026-02-14T20:21:57.005 [DEBUG] [Thread-191577] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:21:57.063 [DEBUG] [Thread-191577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:21:57.064 [DEBUG] [Thread-191577] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:21:57.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:21:57.065 [DEBUG] [Thread-191577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:21:57.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:21:57.119 [DEBUG] [Thread-191577] [transport.py] [_log()] userauth is OK
2026-02-14T20:21:57.119 [DEBUG] [Thread-191577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:21:57.119 [DEBUG] [Thread-191577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:21:57.119 [DEBUG] [Thread-191577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:21:57.120 [DEBUG] [Thread-191577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:21:57.138 [INFO] [Thread-191577] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:21:57.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-14T20:21:57.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:21:57.943 [DEBUG] [Thread-191577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:21:57.943 [DEBUG] [Thread-191577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:21:57.990 [DEBUG] [Thread-191577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:21:57.991 [DEBUG] [Thread-191577] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:21:57.999 [DEBUG] [Thread-191577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:21:58.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:21:58.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-14T20:21:58.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:21:58.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:21:58.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:21:58.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:21:58.031 [DEBUG] [Thread-191577] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:22:03.158 [DEBUG] [Thread-191579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:22:18.205 [DEBUG] [Thread-191580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:22:28.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:22:28.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:22:28.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:22:29.684 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:22:29.685 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:22:29.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 22, 5), 9.34, 52.41, 0.0, 36.68, 11.48, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:22:29.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:22:05
2026-02-14T20:22:30.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:22:30.564 [DEBUG] [Thread-191581] [transport.py] [_log()] starting thread (client mode): 0xa57d4820
2026-02-14T20:22:30.564 [DEBUG] [Thread-191581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:22:30.583 [DEBUG] [Thread-191581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:22:30.583 [INFO] [Thread-191581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:22:30.586 [DEBUG] [Thread-191581] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:22:30.587 [DEBUG] [Thread-191581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:22:30.587 [DEBUG] [Thread-191581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:22:30.587 [DEBUG] [Thread-191581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:22:30.587 [DEBUG] [Thread-191581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:22:30.587 [DEBUG] [Thread-191581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:22:30.587 [DEBUG] [Thread-191581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:22:30.587 [DEBUG] [Thread-191581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:22:30.587 [DEBUG] [Thread-191581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:22:30.587 [DEBUG] [Thread-191581] [transport.py] [_log()] client lang: <none>
2026-02-14T20:22:30.587 [DEBUG] [Thread-191581] [transport.py] [_log()] server lang: <none>
2026-02-14T20:22:30.587 [DEBUG] [Thread-191581] [transport.py] [_log()] kex follows: False
2026-02-14T20:22:30.587 [DEBUG] [Thread-191581] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:22:30.587 [DEBUG] [Thread-191581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:22:30.588 [DEBUG] [Thread-191581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:22:30.588 [DEBUG] [Thread-191581] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:22:30.588 [DEBUG] [Thread-191581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:22:30.588 [DEBUG] [Thread-191581] [transport.py] [_log()] Compression: none
2026-02-14T20:22:30.588 [DEBUG] [Thread-191581] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:22:30.607 [DEBUG] [Thread-191581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:22:30.607 [DEBUG] [Thread-191581] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:22:30.608 [DEBUG] [Thread-191581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:22:30.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:22:30.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:22:30.611 [DEBUG] [Thread-191581] [transport.py] [_log()] userauth is OK
2026-02-14T20:22:30.611 [DEBUG] [Thread-191581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:22:30.611 [DEBUG] [Thread-191581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:22:30.611 [DEBUG] [Thread-191581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:22:30.612 [DEBUG] [Thread-191581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:22:30.635 [INFO] [Thread-191581] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:22:30.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:22:31.220 [DEBUG] [Thread-191581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:22:31.220 [DEBUG] [Thread-191581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:22:31.221 [DEBUG] [Thread-191581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:22:31.261 [DEBUG] [Thread-191581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:22:31.261 [DEBUG] [Thread-191581] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:22:31.264 [DEBUG] [Thread-191581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:22:31.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:22:31.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:22:31.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:22:31.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:22:31.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:22:31.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:22:31.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:22:31.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:22:31.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:22:31.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.765045 -999.00  +11.40  25.32     58   +3.40 1 1 1 1 1     1    0 7.30 -32.62 ZNESW 25.1 25.3 157.6 37.4 11.8 -25.5 11.7 -24.5 11.4 -23.4 11.8 -24.6
2026-02-14T20:22:31.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:22:31.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:22:31.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.765045
2026-02-14T20:22:31.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:22:31.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:22:31.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:22:31.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:22:31.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:22:31.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:22:05', tmtdew=9.34, humidity=52.41, cloud=0.0, wind=36.68, temperature=11.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:21:39.888', atlas_cloud=1, atlas_rain=1, zp_data=[1.1057499999999996, 1.0252500000000007, 1.4007500000000004, nan, nan, 0.9542500000000009, 0.9114999999999993, 0.7392500000000011, 1.1664999999999992, 1.6660000000000004, nan, 1.7430000000000003, 0.9829999999999997, 0.8727499999999999, 0.9139999999999997, nan, -0.11175000000000068, nan, nan, 1.573249999999999, nan, 0.7877499999999991, 0.8552500000000007, nan, nan, nan, nan, nan, nan, nan, 0.7470000000000008, nan, nan], zp_timestamp='2026-02-14T18:17:00')
2026-02-14T20:22:31.283 [DEBUG] [Thread-191581] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:22:31.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-14T20:22:31.365 [DEBUG] [Thread-191584] [transport.py] [_log()] starting thread (client mode): 0xa57d54e0
2026-02-14T20:22:31.365 [DEBUG] [Thread-191584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:22:31.379 [DEBUG] [Thread-191584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:22:31.379 [INFO] [Thread-191584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:22:31.387 [DEBUG] [Thread-191584] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:22:31.387 [DEBUG] [Thread-191584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:22:31.387 [DEBUG] [Thread-191584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:22:31.387 [DEBUG] [Thread-191584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:22:31.387 [DEBUG] [Thread-191584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:22:31.387 [DEBUG] [Thread-191584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:22:31.387 [DEBUG] [Thread-191584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:22:31.387 [DEBUG] [Thread-191584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:22:31.387 [DEBUG] [Thread-191584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:22:31.387 [DEBUG] [Thread-191584] [transport.py] [_log()] client lang: <none>
2026-02-14T20:22:31.387 [DEBUG] [Thread-191584] [transport.py] [_log()] server lang: <none>
2026-02-14T20:22:31.387 [DEBUG] [Thread-191584] [transport.py] [_log()] kex follows: False
2026-02-14T20:22:31.387 [DEBUG] [Thread-191584] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:22:31.388 [DEBUG] [Thread-191584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:22:31.388 [DEBUG] [Thread-191584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:22:31.388 [DEBUG] [Thread-191584] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:22:31.388 [DEBUG] [Thread-191584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:22:31.388 [DEBUG] [Thread-191584] [transport.py] [_log()] Compression: none
2026-02-14T20:22:31.388 [DEBUG] [Thread-191584] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:22:31.447 [DEBUG] [Thread-191584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:22:31.448 [DEBUG] [Thread-191584] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:22:31.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:22:31.449 [DEBUG] [Thread-191584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:22:31.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:22:31.503 [DEBUG] [Thread-191584] [transport.py] [_log()] userauth is OK
2026-02-14T20:22:31.503 [DEBUG] [Thread-191584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:22:31.503 [DEBUG] [Thread-191584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:22:31.504 [DEBUG] [Thread-191584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:22:31.504 [DEBUG] [Thread-191584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:22:31.522 [INFO] [Thread-191584] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:22:31.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-14T20:22:31.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:22:32.357 [DEBUG] [Thread-191584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:22:32.357 [DEBUG] [Thread-191584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:22:32.405 [DEBUG] [Thread-191584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:22:32.406 [DEBUG] [Thread-191584] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:22:32.415 [DEBUG] [Thread-191584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:22:32.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:22: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-14T20:22:32.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:22:32.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:22:32.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:22:32.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:22:32.451 [DEBUG] [Thread-191584] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:22:33.241 [DEBUG] [Thread-191586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:22:42.280 [DEBUG] [Thread-191587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:22:48.296 [DEBUG] [Thread-191588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:23:02.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:23:02.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:23:02.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-14T20:23:03.334 [DEBUG] [Thread-191589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:23:04.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 22, 40), 9.53, 51.95, 0.0, 44.63, 11.73, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:23:04.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:22:40
2026-02-14T20:23:04.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:23:04.846 [DEBUG] [Thread-191590] [transport.py] [_log()] starting thread (client mode): 0xa57d4850
2026-02-14T20:23:04.846 [DEBUG] [Thread-191590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:23:04.873 [DEBUG] [Thread-191590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:23:04.874 [INFO] [Thread-191590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:23:04.878 [DEBUG] [Thread-191590] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:23:04.878 [DEBUG] [Thread-191590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:23:04.878 [DEBUG] [Thread-191590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:23:04.878 [DEBUG] [Thread-191590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:23:04.878 [DEBUG] [Thread-191590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:23:04.878 [DEBUG] [Thread-191590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:23:04.878 [DEBUG] [Thread-191590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:23:04.878 [DEBUG] [Thread-191590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:23:04.878 [DEBUG] [Thread-191590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:23:04.878 [DEBUG] [Thread-191590] [transport.py] [_log()] client lang: <none>
2026-02-14T20:23:04.878 [DEBUG] [Thread-191590] [transport.py] [_log()] server lang: <none>
2026-02-14T20:23:04.878 [DEBUG] [Thread-191590] [transport.py] [_log()] kex follows: False
2026-02-14T20:23:04.878 [DEBUG] [Thread-191590] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:23:04.878 [DEBUG] [Thread-191590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:23:04.878 [DEBUG] [Thread-191590] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:23:04.878 [DEBUG] [Thread-191590] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:23:04.878 [DEBUG] [Thread-191590] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:23:04.878 [DEBUG] [Thread-191590] [transport.py] [_log()] Compression: none
2026-02-14T20:23:04.878 [DEBUG] [Thread-191590] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:23:04.889 [DEBUG] [Thread-191590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:23:04.890 [DEBUG] [Thread-191590] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:23:04.890 [DEBUG] [Thread-191590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:23:04.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:23:04.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:23:04.892 [DEBUG] [Thread-191590] [transport.py] [_log()] userauth is OK
2026-02-14T20:23:04.892 [DEBUG] [Thread-191590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:23:04.892 [DEBUG] [Thread-191590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:23:04.892 [DEBUG] [Thread-191590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:23:04.893 [DEBUG] [Thread-191590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:23:04.925 [INFO] [Thread-191590] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:23:04.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:23:05.549 [DEBUG] [Thread-191590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:23:05.549 [DEBUG] [Thread-191590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:23:05.549 [DEBUG] [Thread-191590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:23:05.590 [DEBUG] [Thread-191590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:23:05.590 [DEBUG] [Thread-191590] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:23:05.594 [DEBUG] [Thread-191590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:23:05.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:23:05.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:23:05.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:23:05.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:23:05.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:23:05.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:23:05.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:23:05.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:23:05.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:23:05.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.765392 -999.00  +11.40  22.33     58   +3.40 1 1 1 1 1     1    0 7.12 -33.73 ZNESW 26.4 22.3 156.5 37.3 11.8 -25.5 11.7 -24.6 11.5 -23.5 11.8 -24.9
2026-02-14T20:23:05.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:23:05.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:23:05.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.765392
2026-02-14T20:23:05.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:23:05.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:23:05.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:23:05.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:23:05.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:23:05.625 [DEBUG] [Thread-191590] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:23:05.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:22:40', tmtdew=9.53, humidity=51.95, cloud=0.0, wind=44.63, temperature=11.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:22:09.869', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014750000000001151, -0.06074999999999875, 0.013250000000001094, -0.0005000000000006111, -0.03249999999999886, 0.06975000000000087, 0.045499999999998764, -0.023249999999999105, 0.028499999999999304, -0.015499999999999403, -0.0017500000000012506, -0.010500000000000398, 0.08749999999999858, 0.08624999999999972, -0.021000000000000796, -0.10000000000000142, -0.014749999999999375, 0.013500000000000512, -0.030000000000001137, -0.02725000000000044, 0.08099999999999952, 0.08074999999999832, 0.07925000000000182, -0.0022500000000000853, 0.01249999999999929, 0.09050000000000047, -0.07975000000000065, 0.01750000000000007, -0.011499999999999844, 0.014000000000001123, 0.03900000000000148, 0.04899999999999949, 0.0337499999999995], zp_timestamp='2026-02-14T18:21:00')
2026-02-14T20:23:05.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-14T20:23:05.723 [DEBUG] [Thread-191593] [transport.py] [_log()] starting thread (client mode): 0xa57d7220
2026-02-14T20:23:05.723 [DEBUG] [Thread-191593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:23:05.737 [DEBUG] [Thread-191593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:23:05.737 [INFO] [Thread-191593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:23:05.744 [DEBUG] [Thread-191593] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:23:05.745 [DEBUG] [Thread-191593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:23:05.745 [DEBUG] [Thread-191593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:23:05.745 [DEBUG] [Thread-191593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:23:05.745 [DEBUG] [Thread-191593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:23:05.745 [DEBUG] [Thread-191593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:23:05.745 [DEBUG] [Thread-191593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:23:05.745 [DEBUG] [Thread-191593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:23:05.745 [DEBUG] [Thread-191593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:23:05.745 [DEBUG] [Thread-191593] [transport.py] [_log()] client lang: <none>
2026-02-14T20:23:05.745 [DEBUG] [Thread-191593] [transport.py] [_log()] server lang: <none>
2026-02-14T20:23:05.745 [DEBUG] [Thread-191593] [transport.py] [_log()] kex follows: False
2026-02-14T20:23:05.745 [DEBUG] [Thread-191593] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:23:05.745 [DEBUG] [Thread-191593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:23:05.745 [DEBUG] [Thread-191593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:23:05.745 [DEBUG] [Thread-191593] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:23:05.745 [DEBUG] [Thread-191593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:23:05.745 [DEBUG] [Thread-191593] [transport.py] [_log()] Compression: none
2026-02-14T20:23:05.745 [DEBUG] [Thread-191593] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:23:05.803 [DEBUG] [Thread-191593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:23:05.804 [DEBUG] [Thread-191593] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:23:05.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:23:05.805 [DEBUG] [Thread-191593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:23:05.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:23:05.859 [DEBUG] [Thread-191593] [transport.py] [_log()] userauth is OK
2026-02-14T20:23:05.860 [DEBUG] [Thread-191593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:23:05.860 [DEBUG] [Thread-191593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:23:05.860 [DEBUG] [Thread-191593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:23:05.860 [DEBUG] [Thread-191593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:23:05.879 [INFO] [Thread-191593] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:23:05.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-14T20:23:05.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:23:06.710 [DEBUG] [Thread-191593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:23:06.711 [DEBUG] [Thread-191593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:23:06.758 [DEBUG] [Thread-191593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:23:06.759 [DEBUG] [Thread-191593] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:23:06.772 [DEBUG] [Thread-191593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:23:06.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:23:06.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-14T20:23:06.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-14T20:23:06.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:23:06.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:23:06.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:23:06.808 [DEBUG] [Thread-191593] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:23:18.370 [DEBUG] [Thread-191595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:23:20.025 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:23:29.884 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:23:29.886 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:23:33.432 [DEBUG] [Thread-191596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:23:36.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:23:36.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:23:36.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:23:38.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 23, 15), 9.3, 52.54, 0.0, 37.11, 11.45, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:23:38.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:23:15
2026-02-14T20:23:39.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:23:39.304 [DEBUG] [Thread-191597] [transport.py] [_log()] starting thread (client mode): 0xa57d5e70
2026-02-14T20:23:39.305 [DEBUG] [Thread-191597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:23:39.325 [DEBUG] [Thread-191597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:23:39.325 [INFO] [Thread-191597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:23:39.328 [DEBUG] [Thread-191597] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:23:39.328 [DEBUG] [Thread-191597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:23:39.328 [DEBUG] [Thread-191597] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:23:39.329 [DEBUG] [Thread-191597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:23:39.329 [DEBUG] [Thread-191597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:23:39.329 [DEBUG] [Thread-191597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:23:39.329 [DEBUG] [Thread-191597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:23:39.329 [DEBUG] [Thread-191597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:23:39.329 [DEBUG] [Thread-191597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:23:39.329 [DEBUG] [Thread-191597] [transport.py] [_log()] client lang: <none>
2026-02-14T20:23:39.329 [DEBUG] [Thread-191597] [transport.py] [_log()] server lang: <none>
2026-02-14T20:23:39.329 [DEBUG] [Thread-191597] [transport.py] [_log()] kex follows: False
2026-02-14T20:23:39.329 [DEBUG] [Thread-191597] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:23:39.329 [DEBUG] [Thread-191597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:23:39.329 [DEBUG] [Thread-191597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:23:39.329 [DEBUG] [Thread-191597] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:23:39.329 [DEBUG] [Thread-191597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:23:39.329 [DEBUG] [Thread-191597] [transport.py] [_log()] Compression: none
2026-02-14T20:23:39.329 [DEBUG] [Thread-191597] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:23:39.345 [DEBUG] [Thread-191597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:23:39.346 [DEBUG] [Thread-191597] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:23:39.346 [DEBUG] [Thread-191597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:23:39.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:23:39.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:23:39.347 [DEBUG] [Thread-191597] [transport.py] [_log()] userauth is OK
2026-02-14T20:23:39.347 [DEBUG] [Thread-191597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:23:39.347 [DEBUG] [Thread-191597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:23:39.347 [DEBUG] [Thread-191597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:23:39.347 [DEBUG] [Thread-191597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:23:39.362 [INFO] [Thread-191597] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:23:39.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:23:40.099 [DEBUG] [Thread-191597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:23:40.100 [DEBUG] [Thread-191597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:23:40.100 [DEBUG] [Thread-191597] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:23:40.140 [DEBUG] [Thread-191597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:23:40.140 [DEBUG] [Thread-191597] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:23:40.142 [DEBUG] [Thread-191597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:23:40.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:23:40.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:23:40.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:23:40.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:23:40.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:23:40.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:23:40.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:23:40.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:23:40.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:23:40.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.766086 -999.00  +11.30  26.83     58   +3.40 1 1 1 1 1     1    0 6.88 -37.43 ZNESW 25.7 26.8 148.0 36.1 11.8 -25.6 11.7 -24.4 11.4 -23.5 11.8 -24.6
2026-02-14T20:23:40.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:23:40.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:23:40.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.766086
2026-02-14T20:23:40.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:23:40.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:23:40.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:23:40.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:23:40.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:23:40.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:23:15', tmtdew=9.3, humidity=52.54, cloud=0.0, wind=37.11, temperature=11.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:23:09.830', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014750000000001151, -0.06074999999999875, 0.013250000000001094, -0.0005000000000006111, -0.03249999999999886, 0.06975000000000087, 0.045499999999998764, -0.023249999999999105, 0.028499999999999304, -0.015499999999999403, -0.0017500000000012506, -0.010500000000000398, 0.08749999999999858, 0.08624999999999972, -0.021000000000000796, -0.10000000000000142, -0.014749999999999375, 0.013500000000000512, -0.030000000000001137, -0.02725000000000044, 0.08099999999999952, 0.08074999999999832, 0.07925000000000182, -0.0022500000000000853, 0.01249999999999929, 0.09050000000000047, -0.07975000000000065, 0.01750000000000007, -0.011499999999999844, 0.014000000000001123, 0.03900000000000148, 0.04899999999999949, 0.0337499999999995], zp_timestamp='2026-02-14T18:21:00')
2026-02-14T20:23:40.167 [DEBUG] [Thread-191597] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:23:40.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-14T20:23:40.260 [DEBUG] [Thread-191600] [transport.py] [_log()] starting thread (client mode): 0xa57d6b30
2026-02-14T20:23:40.260 [DEBUG] [Thread-191600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:23:40.275 [DEBUG] [Thread-191600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:23:40.275 [INFO] [Thread-191600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:23:40.282 [DEBUG] [Thread-191600] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:23:40.283 [DEBUG] [Thread-191600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:23:40.283 [DEBUG] [Thread-191600] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:23:40.283 [DEBUG] [Thread-191600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:23:40.283 [DEBUG] [Thread-191600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:23:40.283 [DEBUG] [Thread-191600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:23:40.283 [DEBUG] [Thread-191600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:23:40.283 [DEBUG] [Thread-191600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:23:40.283 [DEBUG] [Thread-191600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:23:40.283 [DEBUG] [Thread-191600] [transport.py] [_log()] client lang: <none>
2026-02-14T20:23:40.283 [DEBUG] [Thread-191600] [transport.py] [_log()] server lang: <none>
2026-02-14T20:23:40.283 [DEBUG] [Thread-191600] [transport.py] [_log()] kex follows: False
2026-02-14T20:23:40.283 [DEBUG] [Thread-191600] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:23:40.283 [DEBUG] [Thread-191600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:23:40.283 [DEBUG] [Thread-191600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:23:40.283 [DEBUG] [Thread-191600] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:23:40.283 [DEBUG] [Thread-191600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:23:40.283 [DEBUG] [Thread-191600] [transport.py] [_log()] Compression: none
2026-02-14T20:23:40.283 [DEBUG] [Thread-191600] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:23:40.343 [DEBUG] [Thread-191600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:23:40.344 [DEBUG] [Thread-191600] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:23:40.345 [DEBUG] [Thread-191600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:23:40.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:23:40.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:23:40.403 [DEBUG] [Thread-191600] [transport.py] [_log()] userauth is OK
2026-02-14T20:23:40.404 [DEBUG] [Thread-191600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:23:40.404 [DEBUG] [Thread-191600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:23:40.404 [DEBUG] [Thread-191600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:23:40.404 [DEBUG] [Thread-191600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:23:40.422 [INFO] [Thread-191600] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:23:40.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-14T20:23:40.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:23:41.242 [DEBUG] [Thread-191600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:23:41.242 [DEBUG] [Thread-191600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:23:41.290 [DEBUG] [Thread-191600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:23:41.290 [DEBUG] [Thread-191600] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:23:41.300 [DEBUG] [Thread-191600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:23:41.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:23:41.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:23:41.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-14T20:23:41.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:23:41.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:23:41.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:23:41.338 [DEBUG] [Thread-191600] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:23:42.336 [DEBUG] [Thread-191602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:23:48.475 [DEBUG] [Thread-191603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:24:03.536 [DEBUG] [Thread-191604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:24:11.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:24:11.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:24: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-14T20:24:13.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 23, 51), 9.31, 53.01, 0.0, 37.11, 11.43, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:24:13.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:23:51
2026-02-14T20:24:13.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:24:14.005 [DEBUG] [Thread-191605] [transport.py] [_log()] starting thread (client mode): 0xa57d6dd0
2026-02-14T20:24:14.005 [DEBUG] [Thread-191605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:24:14.025 [DEBUG] [Thread-191605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:24:14.025 [INFO] [Thread-191605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:24:14.028 [DEBUG] [Thread-191605] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:24:14.028 [DEBUG] [Thread-191605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:24:14.028 [DEBUG] [Thread-191605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:24:14.028 [DEBUG] [Thread-191605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:24:14.028 [DEBUG] [Thread-191605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:24:14.028 [DEBUG] [Thread-191605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:24:14.028 [DEBUG] [Thread-191605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:24:14.028 [DEBUG] [Thread-191605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:24:14.028 [DEBUG] [Thread-191605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:24:14.028 [DEBUG] [Thread-191605] [transport.py] [_log()] client lang: <none>
2026-02-14T20:24:14.028 [DEBUG] [Thread-191605] [transport.py] [_log()] server lang: <none>
2026-02-14T20:24:14.028 [DEBUG] [Thread-191605] [transport.py] [_log()] kex follows: False
2026-02-14T20:24:14.028 [DEBUG] [Thread-191605] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:24:14.028 [DEBUG] [Thread-191605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:24:14.028 [DEBUG] [Thread-191605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:24:14.029 [DEBUG] [Thread-191605] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:24:14.029 [DEBUG] [Thread-191605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:24:14.029 [DEBUG] [Thread-191605] [transport.py] [_log()] Compression: none
2026-02-14T20:24:14.029 [DEBUG] [Thread-191605] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:24:14.045 [DEBUG] [Thread-191605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:24:14.046 [DEBUG] [Thread-191605] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:24:14.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:24:14.047 [DEBUG] [Thread-191605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:24:14.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:24:14.049 [DEBUG] [Thread-191605] [transport.py] [_log()] userauth is OK
2026-02-14T20:24:14.050 [DEBUG] [Thread-191605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:24:14.050 [DEBUG] [Thread-191605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:24:14.050 [DEBUG] [Thread-191605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:24:14.050 [DEBUG] [Thread-191605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:24:14.069 [INFO] [Thread-191605] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:24:14.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:24:14.715 [DEBUG] [Thread-191605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:24:14.715 [DEBUG] [Thread-191605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:24:14.715 [DEBUG] [Thread-191605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:24:14.755 [DEBUG] [Thread-191605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:24:14.755 [DEBUG] [Thread-191605] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:24:14.759 [DEBUG] [Thread-191605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:24:14.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:24:14.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:24:14.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:24:14.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:24:14.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:24:14.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:24:14.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:24:14.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:24:14.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:24:14.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.766434 -999.00  +11.30  25.45     58   +3.40 1 1 1 1 1     0    0 7.11 -34.16 ZNESW 27.3 25.4 157.6 37.3 11.8 -25.6 11.7 -24.7 11.4 -23.6 11.7 -24.7
2026-02-14T20:24:14.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:24:14.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:24:14.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.766434
2026-02-14T20:24:14.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:24:14.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:24:14.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:24:14.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:24:14.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:24:14.787 [DEBUG] [Thread-191605] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:24:14.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:23:51', tmtdew=9.31, humidity=53.01, cloud=0.0, wind=37.11, temperature=11.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:23:39.898', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014750000000001151, -0.06074999999999875, 0.013250000000001094, -0.0005000000000006111, -0.03249999999999886, 0.06975000000000087, 0.045499999999998764, -0.023249999999999105, 0.028499999999999304, -0.015499999999999403, -0.0017500000000012506, -0.010500000000000398, 0.08749999999999858, 0.08624999999999972, -0.021000000000000796, -0.10000000000000142, -0.014749999999999375, 0.013500000000000512, -0.030000000000001137, -0.02725000000000044, 0.08099999999999952, 0.08074999999999832, 0.07925000000000182, -0.0022500000000000853, 0.01249999999999929, 0.09050000000000047, -0.07975000000000065, 0.01750000000000007, -0.011499999999999844, 0.014000000000001123, 0.03900000000000148, 0.04899999999999949, 0.0337499999999995], zp_timestamp='2026-02-14T18:21:00')
2026-02-14T20:24:14.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-14T20:24:14.883 [DEBUG] [Thread-191608] [transport.py] [_log()] starting thread (client mode): 0xa57d5ae0
2026-02-14T20:24:14.883 [DEBUG] [Thread-191608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:24:14.897 [DEBUG] [Thread-191608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:24:14.897 [INFO] [Thread-191608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:24:14.905 [DEBUG] [Thread-191608] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:24:14.905 [DEBUG] [Thread-191608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:24:14.905 [DEBUG] [Thread-191608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:24:14.905 [DEBUG] [Thread-191608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:24:14.905 [DEBUG] [Thread-191608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:24:14.905 [DEBUG] [Thread-191608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:24:14.905 [DEBUG] [Thread-191608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:24:14.905 [DEBUG] [Thread-191608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:24:14.905 [DEBUG] [Thread-191608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:24:14.905 [DEBUG] [Thread-191608] [transport.py] [_log()] client lang: <none>
2026-02-14T20:24:14.905 [DEBUG] [Thread-191608] [transport.py] [_log()] server lang: <none>
2026-02-14T20:24:14.905 [DEBUG] [Thread-191608] [transport.py] [_log()] kex follows: False
2026-02-14T20:24:14.905 [DEBUG] [Thread-191608] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:24:14.906 [DEBUG] [Thread-191608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:24:14.906 [DEBUG] [Thread-191608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:24:14.906 [DEBUG] [Thread-191608] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:24:14.906 [DEBUG] [Thread-191608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:24:14.906 [DEBUG] [Thread-191608] [transport.py] [_log()] Compression: none
2026-02-14T20:24:14.906 [DEBUG] [Thread-191608] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:24:14.963 [DEBUG] [Thread-191608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:24:14.963 [DEBUG] [Thread-191608] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:24:14.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:24:14.965 [DEBUG] [Thread-191608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:24:14.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:24:15.019 [DEBUG] [Thread-191608] [transport.py] [_log()] userauth is OK
2026-02-14T20:24:15.019 [DEBUG] [Thread-191608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:24:15.019 [DEBUG] [Thread-191608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:24:15.020 [DEBUG] [Thread-191608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:24:15.020 [DEBUG] [Thread-191608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:24:15.038 [INFO] [Thread-191608] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:24:15.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T20:24:15.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:24:15.849 [DEBUG] [Thread-191608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:24:15.849 [DEBUG] [Thread-191608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:24:15.897 [DEBUG] [Thread-191608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:24:15.897 [DEBUG] [Thread-191608] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:24:15.905 [DEBUG] [Thread-191608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:24:15.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:24:15.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:24:15.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-14T20:24:15.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:24:15.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:24:15.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:24:15.940 [DEBUG] [Thread-191608] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:24:18.570 [DEBUG] [Thread-191610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:24:30.088 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:24:30.089 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:24:33.629 [DEBUG] [Thread-191611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:24:42.404 [DEBUG] [Thread-191612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:24:45.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:24:45.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:24:45.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-14T20:24:47.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 24, 27), 9.29, 53.11, 0.0, 38.34, 11.48, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:24:47.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:24:27
2026-02-14T20:24:48.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:24:48.322 [DEBUG] [Thread-191613] [transport.py] [_log()] starting thread (client mode): 0xa57d6ce0
2026-02-14T20:24:48.322 [DEBUG] [Thread-191613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:24:48.343 [DEBUG] [Thread-191613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:24:48.343 [INFO] [Thread-191613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:24:48.346 [DEBUG] [Thread-191613] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:24:48.346 [DEBUG] [Thread-191613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:24:48.346 [DEBUG] [Thread-191613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:24:48.346 [DEBUG] [Thread-191613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:24:48.346 [DEBUG] [Thread-191613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:24:48.347 [DEBUG] [Thread-191613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:24:48.347 [DEBUG] [Thread-191613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:24:48.347 [DEBUG] [Thread-191613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:24:48.347 [DEBUG] [Thread-191613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:24:48.347 [DEBUG] [Thread-191613] [transport.py] [_log()] client lang: <none>
2026-02-14T20:24:48.347 [DEBUG] [Thread-191613] [transport.py] [_log()] server lang: <none>
2026-02-14T20:24:48.347 [DEBUG] [Thread-191613] [transport.py] [_log()] kex follows: False
2026-02-14T20:24:48.347 [DEBUG] [Thread-191613] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:24:48.347 [DEBUG] [Thread-191613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:24:48.347 [DEBUG] [Thread-191613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:24:48.347 [DEBUG] [Thread-191613] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:24:48.347 [DEBUG] [Thread-191613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:24:48.347 [DEBUG] [Thread-191613] [transport.py] [_log()] Compression: none
2026-02-14T20:24:48.347 [DEBUG] [Thread-191613] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:24:48.364 [DEBUG] [Thread-191613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:24:48.365 [DEBUG] [Thread-191613] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:24:48.366 [DEBUG] [Thread-191613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:24:48.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:24:48.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:24:48.368 [DEBUG] [Thread-191613] [transport.py] [_log()] userauth is OK
2026-02-14T20:24:48.368 [DEBUG] [Thread-191613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:24:48.368 [DEBUG] [Thread-191613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:24:48.368 [DEBUG] [Thread-191613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:24:48.368 [DEBUG] [Thread-191613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:24:48.393 [INFO] [Thread-191613] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:24:48.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:24:48.666 [DEBUG] [Thread-191615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:24:49.014 [DEBUG] [Thread-191613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:24:49.015 [DEBUG] [Thread-191613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:24:49.015 [DEBUG] [Thread-191613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:24:49.055 [DEBUG] [Thread-191613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:24:49.056 [DEBUG] [Thread-191613] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:24:49.059 [DEBUG] [Thread-191613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:24:49.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:24:49.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:24:49.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:24:49.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:24:49.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:24:49.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:24:49.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:24:49.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:24:49.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:24:49.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.766781 -999.00  +11.30  22.78     58   +3.40 1 1 1 1 1     0    0 7.12 -33.67 ZNESW 27.4 22.8 157.4 38.8 11.8 -25.5 11.6 -24.6 11.3 -23.4 11.8 -24.9
2026-02-14T20:24:49.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:24:49.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:24:49.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.766781
2026-02-14T20:24:49.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:24:49.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:24:49.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:24:49.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:24:49.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:24:49.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:24:27', tmtdew=9.29, humidity=53.11, cloud=0.0, wind=38.34, temperature=11.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:24:09.878', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014750000000001151, -0.06074999999999875, 0.013250000000001094, -0.0005000000000006111, -0.03249999999999886, 0.06975000000000087, 0.045499999999998764, -0.023249999999999105, 0.028499999999999304, -0.015499999999999403, -0.0017500000000012506, -0.010500000000000398, 0.08749999999999858, 0.08624999999999972, -0.021000000000000796, -0.10000000000000142, -0.014749999999999375, 0.013500000000000512, -0.030000000000001137, -0.02725000000000044, 0.08099999999999952, 0.08074999999999832, 0.07925000000000182, -0.0022500000000000853, 0.01249999999999929, 0.09050000000000047, -0.07975000000000065, 0.01750000000000007, -0.011499999999999844, 0.014000000000001123, 0.03900000000000148, 0.04899999999999949, 0.0337499999999995], zp_timestamp='2026-02-14T18:21:00')
2026-02-14T20:24:49.085 [DEBUG] [Thread-191613] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:24:49.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-14T20:24:49.181 [DEBUG] [Thread-191617] [transport.py] [_log()] starting thread (client mode): 0xa57c1c90
2026-02-14T20:24:49.181 [DEBUG] [Thread-191617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:24:49.196 [DEBUG] [Thread-191617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:24:49.196 [INFO] [Thread-191617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:24:49.203 [DEBUG] [Thread-191617] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:24:49.204 [DEBUG] [Thread-191617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:24:49.204 [DEBUG] [Thread-191617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:24:49.204 [DEBUG] [Thread-191617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:24:49.204 [DEBUG] [Thread-191617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:24:49.204 [DEBUG] [Thread-191617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:24:49.204 [DEBUG] [Thread-191617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:24:49.204 [DEBUG] [Thread-191617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:24:49.204 [DEBUG] [Thread-191617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:24:49.204 [DEBUG] [Thread-191617] [transport.py] [_log()] client lang: <none>
2026-02-14T20:24:49.204 [DEBUG] [Thread-191617] [transport.py] [_log()] server lang: <none>
2026-02-14T20:24:49.204 [DEBUG] [Thread-191617] [transport.py] [_log()] kex follows: False
2026-02-14T20:24:49.204 [DEBUG] [Thread-191617] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:24:49.204 [DEBUG] [Thread-191617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:24:49.205 [DEBUG] [Thread-191617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:24:49.205 [DEBUG] [Thread-191617] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:24:49.205 [DEBUG] [Thread-191617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:24:49.205 [DEBUG] [Thread-191617] [transport.py] [_log()] Compression: none
2026-02-14T20:24:49.205 [DEBUG] [Thread-191617] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:24:49.263 [DEBUG] [Thread-191617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:24:49.263 [DEBUG] [Thread-191617] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:24:49.264 [DEBUG] [Thread-191617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:24:49.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:24:49.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:24:49.319 [DEBUG] [Thread-191617] [transport.py] [_log()] userauth is OK
2026-02-14T20:24:49.320 [DEBUG] [Thread-191617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:24:49.320 [DEBUG] [Thread-191617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:24:49.320 [DEBUG] [Thread-191617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:24:49.320 [DEBUG] [Thread-191617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:24:49.344 [INFO] [Thread-191617] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:24:49.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-14T20:24:49.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:24:50.188 [DEBUG] [Thread-191617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:24:50.188 [DEBUG] [Thread-191617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:24:50.236 [DEBUG] [Thread-191617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:24:50.236 [DEBUG] [Thread-191617] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:24:50.245 [DEBUG] [Thread-191617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:24:50.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:24:50.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-14T20:24:50.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:24:50.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:24:50.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:24:50.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:24:50.279 [DEBUG] [Thread-191617] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:24:53.757 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:25:03.702 [DEBUG] [Thread-191619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:25:18.763 [DEBUG] [Thread-191620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:25:20.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:25:20.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:25:20.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-14T20:25:22.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 25, 2), 9.3, 53.03, 0.0, 37.85, 11.38, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:25:22.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:25:02
2026-02-14T20:25:22.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:25:22.670 [DEBUG] [Thread-191621] [transport.py] [_log()] starting thread (client mode): 0xa2d6cc40
2026-02-14T20:25:22.670 [DEBUG] [Thread-191621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:25:22.689 [DEBUG] [Thread-191621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:25:22.689 [INFO] [Thread-191621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:25:22.692 [DEBUG] [Thread-191621] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:25:22.692 [DEBUG] [Thread-191621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:25:22.692 [DEBUG] [Thread-191621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:25:22.693 [DEBUG] [Thread-191621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:25:22.693 [DEBUG] [Thread-191621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:25:22.693 [DEBUG] [Thread-191621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:25:22.693 [DEBUG] [Thread-191621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:25:22.693 [DEBUG] [Thread-191621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:25:22.693 [DEBUG] [Thread-191621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:25:22.693 [DEBUG] [Thread-191621] [transport.py] [_log()] client lang: <none>
2026-02-14T20:25:22.693 [DEBUG] [Thread-191621] [transport.py] [_log()] server lang: <none>
2026-02-14T20:25:22.693 [DEBUG] [Thread-191621] [transport.py] [_log()] kex follows: False
2026-02-14T20:25:22.693 [DEBUG] [Thread-191621] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:25:22.693 [DEBUG] [Thread-191621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:25:22.693 [DEBUG] [Thread-191621] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:25:22.693 [DEBUG] [Thread-191621] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:25:22.693 [DEBUG] [Thread-191621] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:25:22.693 [DEBUG] [Thread-191621] [transport.py] [_log()] Compression: none
2026-02-14T20:25:22.693 [DEBUG] [Thread-191621] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:25:22.709 [DEBUG] [Thread-191621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:25:22.710 [DEBUG] [Thread-191621] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:25:22.710 [DEBUG] [Thread-191621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:25:22.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:25:22.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:25:22.712 [DEBUG] [Thread-191621] [transport.py] [_log()] userauth is OK
2026-02-14T20:25:22.713 [DEBUG] [Thread-191621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:25:22.713 [DEBUG] [Thread-191621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:25:22.713 [DEBUG] [Thread-191621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:25:22.713 [DEBUG] [Thread-191621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:25:22.749 [INFO] [Thread-191621] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:25:22.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:25:23.430 [DEBUG] [Thread-191621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:25:23.430 [DEBUG] [Thread-191621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:25:23.431 [DEBUG] [Thread-191621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:25:23.471 [DEBUG] [Thread-191621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:25:23.471 [DEBUG] [Thread-191621] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:25:23.474 [DEBUG] [Thread-191621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:25:23.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:25:23.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:25:23.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:25:23.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:25:23.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:25:23.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:25:23.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:25:23.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:25:23.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:25:23.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.767128 -999.00  +11.30  21.33     58   +3.40 1 1 1 1 1     0    0 6.96 -35.16 ZNESW 24.4 21.3 156.2 33.0 11.8 -25.6 11.6 -24.6 11.4 -23.5 11.8 -24.9
2026-02-14T20:25:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:25:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:25:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.767128
2026-02-14T20:25:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:25:23.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:25:23.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:25:23.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:25:23.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:25:23.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:25:02', tmtdew=9.3, humidity=53.03, cloud=0.0, wind=37.85, temperature=11.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:24:39.859', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014750000000001151, -0.06074999999999875, 0.013250000000001094, -0.0005000000000006111, -0.03249999999999886, 0.06975000000000087, 0.045499999999998764, -0.023249999999999105, 0.028499999999999304, -0.015499999999999403, -0.0017500000000012506, -0.010500000000000398, 0.08749999999999858, 0.08624999999999972, -0.021000000000000796, -0.10000000000000142, -0.014749999999999375, 0.013500000000000512, -0.030000000000001137, -0.02725000000000044, 0.08099999999999952, 0.08074999999999832, 0.07925000000000182, -0.0022500000000000853, 0.01249999999999929, 0.09050000000000047, -0.07975000000000065, 0.01750000000000007, -0.011499999999999844, 0.014000000000001123, 0.03900000000000148, 0.04899999999999949, 0.0337499999999995], zp_timestamp='2026-02-14T18:21:00')
2026-02-14T20:25:23.500 [DEBUG] [Thread-191621] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:25:23.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-14T20:25:23.602 [DEBUG] [Thread-191624] [transport.py] [_log()] starting thread (client mode): 0xa2d6f310
2026-02-14T20:25:23.602 [DEBUG] [Thread-191624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:25:23.616 [DEBUG] [Thread-191624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:25:23.616 [INFO] [Thread-191624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:25:23.623 [DEBUG] [Thread-191624] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:25:23.623 [DEBUG] [Thread-191624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:25:23.624 [DEBUG] [Thread-191624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:25:23.624 [DEBUG] [Thread-191624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:25:23.624 [DEBUG] [Thread-191624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:25:23.624 [DEBUG] [Thread-191624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:25:23.624 [DEBUG] [Thread-191624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:25:23.624 [DEBUG] [Thread-191624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:25:23.625 [DEBUG] [Thread-191624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:25:23.625 [DEBUG] [Thread-191624] [transport.py] [_log()] client lang: <none>
2026-02-14T20:25:23.625 [DEBUG] [Thread-191624] [transport.py] [_log()] server lang: <none>
2026-02-14T20:25:23.625 [DEBUG] [Thread-191624] [transport.py] [_log()] kex follows: False
2026-02-14T20:25:23.625 [DEBUG] [Thread-191624] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:25:23.625 [DEBUG] [Thread-191624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:25:23.625 [DEBUG] [Thread-191624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:25:23.625 [DEBUG] [Thread-191624] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:25:23.625 [DEBUG] [Thread-191624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:25:23.625 [DEBUG] [Thread-191624] [transport.py] [_log()] Compression: none
2026-02-14T20:25:23.625 [DEBUG] [Thread-191624] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:25:23.682 [DEBUG] [Thread-191624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:25:23.682 [DEBUG] [Thread-191624] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:25:23.682 [DEBUG] [Thread-191624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:25:23.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:25:23.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:25:23.739 [DEBUG] [Thread-191624] [transport.py] [_log()] userauth is OK
2026-02-14T20:25:23.739 [DEBUG] [Thread-191624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:25:23.739 [DEBUG] [Thread-191624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:25:23.739 [DEBUG] [Thread-191624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:25:23.739 [DEBUG] [Thread-191624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:25:23.757 [INFO] [Thread-191624] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:25:23.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-14T20:25:23.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:25:24.604 [DEBUG] [Thread-191624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:25:24.604 [DEBUG] [Thread-191624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:25:24.654 [DEBUG] [Thread-191624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:25:24.654 [DEBUG] [Thread-191624] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:25:24.662 [DEBUG] [Thread-191624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:25:24.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:25:24.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-14T20:25:24.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-14T20:25:24.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:25:24.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:25:24.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:25:24.700 [DEBUG] [Thread-191624] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:25:30.290 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:25:30.291 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:25:33.798 [DEBUG] [Thread-191626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:25:35.422 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:25:38.581 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:25:42.462 [DEBUG] [Thread-191627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:25:43.611 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:25:48.848 [DEBUG] [Thread-191628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:25:50.050 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:25:54.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:25:54.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:25:54.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:25:56.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 25, 37), 9.47, 52.18, 0.0, 36.55, 11.73, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:25:56.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:25:37
2026-02-14T20:25:56.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:25:57.133 [DEBUG] [Thread-191629] [transport.py] [_log()] starting thread (client mode): 0xa2d7a290
2026-02-14T20:25:57.134 [DEBUG] [Thread-191629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:25:57.153 [DEBUG] [Thread-191629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:25:57.153 [INFO] [Thread-191629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:25:57.157 [DEBUG] [Thread-191629] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:25:57.157 [DEBUG] [Thread-191629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:25:57.157 [DEBUG] [Thread-191629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:25:57.157 [DEBUG] [Thread-191629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:25:57.157 [DEBUG] [Thread-191629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:25:57.157 [DEBUG] [Thread-191629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:25:57.157 [DEBUG] [Thread-191629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:25:57.157 [DEBUG] [Thread-191629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:25:57.157 [DEBUG] [Thread-191629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:25:57.157 [DEBUG] [Thread-191629] [transport.py] [_log()] client lang: <none>
2026-02-14T20:25:57.157 [DEBUG] [Thread-191629] [transport.py] [_log()] server lang: <none>
2026-02-14T20:25:57.157 [DEBUG] [Thread-191629] [transport.py] [_log()] kex follows: False
2026-02-14T20:25:57.157 [DEBUG] [Thread-191629] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:25:57.157 [DEBUG] [Thread-191629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:25:57.157 [DEBUG] [Thread-191629] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:25:57.157 [DEBUG] [Thread-191629] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:25:57.157 [DEBUG] [Thread-191629] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:25:57.157 [DEBUG] [Thread-191629] [transport.py] [_log()] Compression: none
2026-02-14T20:25:57.157 [DEBUG] [Thread-191629] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:25:57.173 [DEBUG] [Thread-191629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:25:57.173 [DEBUG] [Thread-191629] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:25:57.174 [DEBUG] [Thread-191629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:25:57.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:25:57.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:25:57.176 [DEBUG] [Thread-191629] [transport.py] [_log()] userauth is OK
2026-02-14T20:25:57.176 [DEBUG] [Thread-191629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:25:57.176 [DEBUG] [Thread-191629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:25:57.176 [DEBUG] [Thread-191629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:25:57.176 [DEBUG] [Thread-191629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:25:57.202 [INFO] [Thread-191629] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:25:57.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:25:57.849 [DEBUG] [Thread-191629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:25:57.849 [DEBUG] [Thread-191629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:25:57.849 [DEBUG] [Thread-191629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:25:57.890 [DEBUG] [Thread-191629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:25:57.890 [DEBUG] [Thread-191629] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:25:57.893 [DEBUG] [Thread-191629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:25:57.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:25:57.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:25:57.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:25:57.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:25:57.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:25:57.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:25:57.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:25:57.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:25:57.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:25:57.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.767475 -999.00  +11.30  26.02     58   +3.40 1 1 1 1 1     0    0 6.93 -36.08 ZNESW 29.8 26.0 168.3 34.5 11.8 -25.4 11.6 -24.6 11.4 -23.5 11.8 -24.6
2026-02-14T20:25:57.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:25:57.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:25:57.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.767475
2026-02-14T20:25:57.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:25:57.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:25:57.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:25:57.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:25:57.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:25:57.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:25:37', tmtdew=9.47, humidity=52.18, cloud=0.0, wind=36.55, temperature=11.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:25:09.840', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.04875000000000007, -0.06324999999999825, -0.01950000000000074, -0.10749999999999993, -0.018749999999998934, -0.034000000000000696, -0.0022500000000000853, 0.0, -0.026999999999999247, -0.01675000000000182, -0.02800000000000047, 0.07699999999999996, 0.02824999999999811, -0.051000000000000156, -0.0990000000000002, -0.028750000000000497, -0.03449999999999953, -0.07249999999999979, -0.08425000000000082, 0.005999999999998451, 0.005749999999999034, 0.020250000000000767, -0.03325000000000067, -0.006000000000000227, -0.008000000000000895, -0.02725000000000044, -0.02149999999999963, 0.06099999999999994, 0.038000000000000256, 0.0020000000000024443, 0.0010000000000012221, 0.0337499999999995], zp_timestamp='2026-02-14T18:25:00')
2026-02-14T20:25:57.915 [DEBUG] [Thread-191629] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:25:57.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-14T20:25:58.002 [DEBUG] [Thread-191632] [transport.py] [_log()] starting thread (client mode): 0xa2d78d00
2026-02-14T20:25:58.002 [DEBUG] [Thread-191632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:25:58.017 [DEBUG] [Thread-191632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:25:58.017 [INFO] [Thread-191632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:25:58.024 [DEBUG] [Thread-191632] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:25:58.025 [DEBUG] [Thread-191632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:25:58.025 [DEBUG] [Thread-191632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:25:58.025 [DEBUG] [Thread-191632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:25:58.025 [DEBUG] [Thread-191632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:25:58.025 [DEBUG] [Thread-191632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:25:58.025 [DEBUG] [Thread-191632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:25:58.025 [DEBUG] [Thread-191632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:25:58.025 [DEBUG] [Thread-191632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:25:58.025 [DEBUG] [Thread-191632] [transport.py] [_log()] client lang: <none>
2026-02-14T20:25:58.025 [DEBUG] [Thread-191632] [transport.py] [_log()] server lang: <none>
2026-02-14T20:25:58.025 [DEBUG] [Thread-191632] [transport.py] [_log()] kex follows: False
2026-02-14T20:25:58.025 [DEBUG] [Thread-191632] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:25:58.025 [DEBUG] [Thread-191632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:25:58.025 [DEBUG] [Thread-191632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:25:58.025 [DEBUG] [Thread-191632] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:25:58.025 [DEBUG] [Thread-191632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:25:58.025 [DEBUG] [Thread-191632] [transport.py] [_log()] Compression: none
2026-02-14T20:25:58.026 [DEBUG] [Thread-191632] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:25:58.083 [DEBUG] [Thread-191632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:25:58.083 [DEBUG] [Thread-191632] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:25:58.084 [DEBUG] [Thread-191632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:25:58.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:25:58.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:25:58.139 [DEBUG] [Thread-191632] [transport.py] [_log()] userauth is OK
2026-02-14T20:25:58.139 [DEBUG] [Thread-191632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:25:58.139 [DEBUG] [Thread-191632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:25:58.139 [DEBUG] [Thread-191632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:25:58.139 [DEBUG] [Thread-191632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:25:58.158 [INFO] [Thread-191632] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:25:58.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T20:25:58.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:25:58.987 [DEBUG] [Thread-191632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:25:58.987 [DEBUG] [Thread-191632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:25:59.035 [DEBUG] [Thread-191632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:25:59.035 [DEBUG] [Thread-191632] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:25:59.045 [DEBUG] [Thread-191632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:25:59.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:25:59.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-14T20:25:59.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:25:59.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:25:59.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:25:59.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:25:59.081 [DEBUG] [Thread-191632] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:26:03.885 [DEBUG] [Thread-191634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:26:09.531 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:26:13.893 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:26:18.944 [DEBUG] [Thread-191635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:26:23.326 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:26:27.318 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:26:27.731 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:26:29.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:26:29.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:26:29.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-14T20:26:30.493 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:26:30.494 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:26:31.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 26, 12), 9.28, 53.09, 0.0, 33.56, 11.38, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:26:31.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:26:12
2026-02-14T20:26:31.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:26:31.740 [DEBUG] [Thread-191636] [transport.py] [_log()] starting thread (client mode): 0xa2d7a7a0
2026-02-14T20:26:31.740 [DEBUG] [Thread-191636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:26:31.760 [DEBUG] [Thread-191636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:26:31.760 [INFO] [Thread-191636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:26:31.763 [DEBUG] [Thread-191636] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:26:31.764 [DEBUG] [Thread-191636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:26:31.764 [DEBUG] [Thread-191636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:26:31.764 [DEBUG] [Thread-191636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:26:31.764 [DEBUG] [Thread-191636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:26:31.764 [DEBUG] [Thread-191636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:26:31.764 [DEBUG] [Thread-191636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:26:31.764 [DEBUG] [Thread-191636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:26:31.764 [DEBUG] [Thread-191636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:26:31.764 [DEBUG] [Thread-191636] [transport.py] [_log()] client lang: <none>
2026-02-14T20:26:31.764 [DEBUG] [Thread-191636] [transport.py] [_log()] server lang: <none>
2026-02-14T20:26:31.764 [DEBUG] [Thread-191636] [transport.py] [_log()] kex follows: False
2026-02-14T20:26:31.764 [DEBUG] [Thread-191636] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:26:31.764 [DEBUG] [Thread-191636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:26:31.764 [DEBUG] [Thread-191636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:26:31.764 [DEBUG] [Thread-191636] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:26:31.764 [DEBUG] [Thread-191636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:26:31.764 [DEBUG] [Thread-191636] [transport.py] [_log()] Compression: none
2026-02-14T20:26:31.764 [DEBUG] [Thread-191636] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:26:31.783 [DEBUG] [Thread-191636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:26:31.783 [DEBUG] [Thread-191636] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:26:31.784 [DEBUG] [Thread-191636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:26:31.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:26:31.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:26:31.786 [DEBUG] [Thread-191636] [transport.py] [_log()] userauth is OK
2026-02-14T20:26:31.786 [DEBUG] [Thread-191636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:26:31.786 [DEBUG] [Thread-191636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:26:31.786 [DEBUG] [Thread-191636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:26:31.786 [DEBUG] [Thread-191636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:26:31.811 [INFO] [Thread-191636] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:26:31.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:26:32.601 [DEBUG] [Thread-191636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:26:32.601 [DEBUG] [Thread-191636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:26:32.602 [DEBUG] [Thread-191636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:26:32.642 [DEBUG] [Thread-191636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:26:32.642 [DEBUG] [Thread-191636] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:26:32.645 [DEBUG] [Thread-191636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:26:32.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:26:32.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:26:32.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:26:32.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:26:32.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:26:32.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:26:32.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:26:32.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:26:32.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:26:32.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.767823 -999.00  +11.30  24.52     58   +3.40 1 1 1 1 1     0    0 7.03 -35.75 ZNESW 23.8 24.5 168.8 38.8 11.8 -25.5 11.6 -24.4 11.4 -23.5 11.7 -24.8
2026-02-14T20:26:32.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:26:32.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:26:32.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.767823
2026-02-14T20:26:32.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:26:32.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:26:32.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:26:32.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:26:32.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:26:32.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:26:12', tmtdew=9.28, humidity=53.09, cloud=0.0, wind=33.56, temperature=11.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:25:39.907', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.04875000000000007, -0.06324999999999825, -0.01950000000000074, -0.10749999999999993, -0.018749999999998934, -0.034000000000000696, -0.0022500000000000853, 0.0, -0.026999999999999247, -0.01675000000000182, -0.02800000000000047, 0.07699999999999996, 0.02824999999999811, -0.051000000000000156, -0.0990000000000002, -0.028750000000000497, -0.03449999999999953, -0.07249999999999979, -0.08425000000000082, 0.005999999999998451, 0.005749999999999034, 0.020250000000000767, -0.03325000000000067, -0.006000000000000227, -0.008000000000000895, -0.02725000000000044, -0.02149999999999963, 0.06099999999999994, 0.038000000000000256, 0.0020000000000024443, 0.0010000000000012221, 0.0337499999999995], zp_timestamp='2026-02-14T18:25:00')
2026-02-14T20:26:32.669 [DEBUG] [Thread-191636] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:26:32.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-14T20:26:32.765 [DEBUG] [Thread-191639] [transport.py] [_log()] starting thread (client mode): 0xa2d6dc30
2026-02-14T20:26:32.765 [DEBUG] [Thread-191639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:26:32.779 [DEBUG] [Thread-191639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:26:32.779 [INFO] [Thread-191639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:26:32.787 [DEBUG] [Thread-191639] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:26:32.787 [DEBUG] [Thread-191639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:26:32.787 [DEBUG] [Thread-191639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:26:32.787 [DEBUG] [Thread-191639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:26:32.787 [DEBUG] [Thread-191639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:26:32.787 [DEBUG] [Thread-191639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:26:32.787 [DEBUG] [Thread-191639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:26:32.787 [DEBUG] [Thread-191639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:26:32.787 [DEBUG] [Thread-191639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:26:32.787 [DEBUG] [Thread-191639] [transport.py] [_log()] client lang: <none>
2026-02-14T20:26:32.787 [DEBUG] [Thread-191639] [transport.py] [_log()] server lang: <none>
2026-02-14T20:26:32.787 [DEBUG] [Thread-191639] [transport.py] [_log()] kex follows: False
2026-02-14T20:26:32.787 [DEBUG] [Thread-191639] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:26:32.787 [DEBUG] [Thread-191639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:26:32.787 [DEBUG] [Thread-191639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:26:32.787 [DEBUG] [Thread-191639] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:26:32.787 [DEBUG] [Thread-191639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:26:32.787 [DEBUG] [Thread-191639] [transport.py] [_log()] Compression: none
2026-02-14T20:26:32.787 [DEBUG] [Thread-191639] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:26:32.845 [DEBUG] [Thread-191639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:26:32.846 [DEBUG] [Thread-191639] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:26:32.846 [DEBUG] [Thread-191639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:26:32.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:26:32.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:26:32.903 [DEBUG] [Thread-191639] [transport.py] [_log()] userauth is OK
2026-02-14T20:26:32.903 [DEBUG] [Thread-191639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:26:32.903 [DEBUG] [Thread-191639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:26:32.903 [DEBUG] [Thread-191639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:26:32.904 [DEBUG] [Thread-191639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:26:32.922 [INFO] [Thread-191639] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:26:32.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-14T20:26:32.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:26:33.763 [DEBUG] [Thread-191639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:26:33.763 [DEBUG] [Thread-191639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:26:33.811 [DEBUG] [Thread-191639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:26:33.811 [DEBUG] [Thread-191639] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:26:33.819 [DEBUG] [Thread-191639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:26:33.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:26:33.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:26:33.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-14T20:26:33.842 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:26:33.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:26:33.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:26:33.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:26:33.852 [DEBUG] [Thread-191639] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:26:33.976 [DEBUG] [Thread-191641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:26:38.222 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:26:42.531 [DEBUG] [Thread-191642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:26:49.027 [DEBUG] [Thread-191643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:27:03.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:27:03.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:27:03.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-14T20:27:04.066 [DEBUG] [Thread-191644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:27:05.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 26, 47), 9.27, 53.14, 0.0, 35.98, 11.4, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:27:05.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:26:47
2026-02-14T20:27:06.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:27:06.254 [DEBUG] [Thread-191645] [transport.py] [_log()] starting thread (client mode): 0xa57c3a00
2026-02-14T20:27:06.254 [DEBUG] [Thread-191645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:27:06.274 [DEBUG] [Thread-191645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:27:06.274 [INFO] [Thread-191645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:27:06.278 [DEBUG] [Thread-191645] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:27:06.278 [DEBUG] [Thread-191645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:27:06.278 [DEBUG] [Thread-191645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:27:06.278 [DEBUG] [Thread-191645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:27:06.278 [DEBUG] [Thread-191645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:27:06.278 [DEBUG] [Thread-191645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:27:06.278 [DEBUG] [Thread-191645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:27:06.278 [DEBUG] [Thread-191645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:27:06.279 [DEBUG] [Thread-191645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:27:06.279 [DEBUG] [Thread-191645] [transport.py] [_log()] client lang: <none>
2026-02-14T20:27:06.279 [DEBUG] [Thread-191645] [transport.py] [_log()] server lang: <none>
2026-02-14T20:27:06.279 [DEBUG] [Thread-191645] [transport.py] [_log()] kex follows: False
2026-02-14T20:27:06.279 [DEBUG] [Thread-191645] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:27:06.279 [DEBUG] [Thread-191645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:27:06.279 [DEBUG] [Thread-191645] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:27:06.279 [DEBUG] [Thread-191645] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:27:06.279 [DEBUG] [Thread-191645] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:27:06.279 [DEBUG] [Thread-191645] [transport.py] [_log()] Compression: none
2026-02-14T20:27:06.279 [DEBUG] [Thread-191645] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:27:06.298 [DEBUG] [Thread-191645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:27:06.298 [DEBUG] [Thread-191645] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:27:06.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:27:06.299 [DEBUG] [Thread-191645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:27:06.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:27:06.302 [DEBUG] [Thread-191645] [transport.py] [_log()] userauth is OK
2026-02-14T20:27:06.302 [DEBUG] [Thread-191645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:27:06.302 [DEBUG] [Thread-191645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:27:06.303 [DEBUG] [Thread-191645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:27:06.303 [DEBUG] [Thread-191645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:27:06.326 [INFO] [Thread-191645] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:27:06.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:27:06.960 [DEBUG] [Thread-191645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:27:06.961 [DEBUG] [Thread-191645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:27:06.961 [DEBUG] [Thread-191645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:27:07.001 [DEBUG] [Thread-191645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:27:07.002 [DEBUG] [Thread-191645] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:27:07.005 [DEBUG] [Thread-191645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:27:07.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:27:07.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:27:07.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:27:07.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:27:07.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:27:07.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:27:07.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:27:07.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:27:07.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:27:07.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.768517 -999.00  +11.30  26.47     58   +3.40 1 1 1 1 1     0    0 7.19 -32.16 ZNESW 26.5 26.5 164.0 35.2 11.8 -25.4 11.6 -24.4 11.4 -23.3 11.7 -24.8
2026-02-14T20:27:07.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:27:07.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:27:07.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.768517
2026-02-14T20:27:07.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:27:07.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:27:07.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:27:07.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:27:07.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:27:07.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:26:47', tmtdew=9.27, humidity=53.14, cloud=0.0, wind=35.98, temperature=11.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:26:39.869', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.04875000000000007, -0.06324999999999825, -0.01950000000000074, -0.10749999999999993, -0.018749999999998934, -0.034000000000000696, -0.0022500000000000853, 0.0, -0.026999999999999247, -0.01675000000000182, -0.02800000000000047, 0.07699999999999996, 0.02824999999999811, -0.051000000000000156, -0.0990000000000002, -0.028750000000000497, -0.03449999999999953, -0.07249999999999979, -0.08425000000000082, 0.005999999999998451, 0.005749999999999034, 0.020250000000000767, -0.03325000000000067, -0.006000000000000227, -0.008000000000000895, -0.02725000000000044, -0.02149999999999963, 0.06099999999999994, 0.038000000000000256, 0.0020000000000024443, 0.0010000000000012221, 0.0337499999999995], zp_timestamp='2026-02-14T18:25:00')
2026-02-14T20:27:07.033 [DEBUG] [Thread-191645] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:27:07.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-14T20:27:07.136 [DEBUG] [Thread-191648] [transport.py] [_log()] starting thread (client mode): 0xa2d6c3a0
2026-02-14T20:27:07.136 [DEBUG] [Thread-191648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:27:07.151 [DEBUG] [Thread-191648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:27:07.151 [INFO] [Thread-191648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:27:07.159 [DEBUG] [Thread-191648] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:27:07.159 [DEBUG] [Thread-191648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:27:07.159 [DEBUG] [Thread-191648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:27:07.159 [DEBUG] [Thread-191648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:27:07.159 [DEBUG] [Thread-191648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:27:07.159 [DEBUG] [Thread-191648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:27:07.159 [DEBUG] [Thread-191648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:27:07.159 [DEBUG] [Thread-191648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:27:07.159 [DEBUG] [Thread-191648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:27:07.159 [DEBUG] [Thread-191648] [transport.py] [_log()] client lang: <none>
2026-02-14T20:27:07.159 [DEBUG] [Thread-191648] [transport.py] [_log()] server lang: <none>
2026-02-14T20:27:07.159 [DEBUG] [Thread-191648] [transport.py] [_log()] kex follows: False
2026-02-14T20:27:07.159 [DEBUG] [Thread-191648] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:27:07.160 [DEBUG] [Thread-191648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:27:07.160 [DEBUG] [Thread-191648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:27:07.160 [DEBUG] [Thread-191648] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:27:07.160 [DEBUG] [Thread-191648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:27:07.160 [DEBUG] [Thread-191648] [transport.py] [_log()] Compression: none
2026-02-14T20:27:07.160 [DEBUG] [Thread-191648] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:27:07.219 [DEBUG] [Thread-191648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:27:07.220 [DEBUG] [Thread-191648] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:27:07.220 [DEBUG] [Thread-191648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:27:07.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:27:07.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:27:07.275 [DEBUG] [Thread-191648] [transport.py] [_log()] userauth is OK
2026-02-14T20:27:07.276 [DEBUG] [Thread-191648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:27:07.276 [DEBUG] [Thread-191648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:27:07.276 [DEBUG] [Thread-191648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:27:07.276 [DEBUG] [Thread-191648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:27:07.295 [INFO] [Thread-191648] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:27:07.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-14T20:27:07.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:27:08.137 [DEBUG] [Thread-191648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:27:08.137 [DEBUG] [Thread-191648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:27:08.185 [DEBUG] [Thread-191648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:27:08.186 [DEBUG] [Thread-191648] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:27:08.195 [DEBUG] [Thread-191648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:27:08.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:27:08.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-14T20:27:08.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-14T20:27:08.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:27:08.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:27:08.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:27:08.232 [DEBUG] [Thread-191648] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:27:19.104 [DEBUG] [Thread-191650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:27:30.699 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:27:30.700 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:27:34.156 [DEBUG] [Thread-191651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:27:38.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:27:38.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:27:38.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-14T20:27:40.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 27, 22), 9.27, 53.16, 0.0, 35.45, 11.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:27:40.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:27:22
2026-02-14T20:27:40.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:27:40.576 [DEBUG] [Thread-191652] [transport.py] [_log()] starting thread (client mode): 0xa2d11000
2026-02-14T20:27:40.576 [DEBUG] [Thread-191652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:27:40.595 [DEBUG] [Thread-191652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:27:40.595 [INFO] [Thread-191652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:27:40.598 [DEBUG] [Thread-191652] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:27:40.598 [DEBUG] [Thread-191652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:27:40.598 [DEBUG] [Thread-191652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:27:40.598 [DEBUG] [Thread-191652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:27:40.598 [DEBUG] [Thread-191652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:27:40.598 [DEBUG] [Thread-191652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:27:40.598 [DEBUG] [Thread-191652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:27:40.598 [DEBUG] [Thread-191652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:27:40.598 [DEBUG] [Thread-191652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:27:40.598 [DEBUG] [Thread-191652] [transport.py] [_log()] client lang: <none>
2026-02-14T20:27:40.598 [DEBUG] [Thread-191652] [transport.py] [_log()] server lang: <none>
2026-02-14T20:27:40.598 [DEBUG] [Thread-191652] [transport.py] [_log()] kex follows: False
2026-02-14T20:27:40.598 [DEBUG] [Thread-191652] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:27:40.598 [DEBUG] [Thread-191652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:27:40.598 [DEBUG] [Thread-191652] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:27:40.598 [DEBUG] [Thread-191652] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:27:40.598 [DEBUG] [Thread-191652] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:27:40.598 [DEBUG] [Thread-191652] [transport.py] [_log()] Compression: none
2026-02-14T20:27:40.598 [DEBUG] [Thread-191652] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:27:40.614 [DEBUG] [Thread-191652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:27:40.614 [DEBUG] [Thread-191652] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:27:40.615 [DEBUG] [Thread-191652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:27:40.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:27:40.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:27:40.616 [DEBUG] [Thread-191652] [transport.py] [_log()] userauth is OK
2026-02-14T20:27:40.616 [DEBUG] [Thread-191652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:27:40.616 [DEBUG] [Thread-191652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:27:40.616 [DEBUG] [Thread-191652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:27:40.616 [DEBUG] [Thread-191652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:27:40.636 [INFO] [Thread-191652] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:27:40.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:27:41.275 [DEBUG] [Thread-191652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:27:41.276 [DEBUG] [Thread-191652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:27:41.276 [DEBUG] [Thread-191652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:27:41.316 [DEBUG] [Thread-191652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:27:41.316 [DEBUG] [Thread-191652] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:27:41.319 [DEBUG] [Thread-191652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:27:41.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:27:41.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:27:41.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:27:41.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:27:41.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:27:41.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:27:41.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:27:41.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:27:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:27:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.768864 -999.00  +11.30  29.81     58   +3.40 1 1 1 1 1     0    0 7.14 -28.94 ZNESW 32.8 29.8 170.6 38.0 11.7 -25.4 11.6 -24.5 11.4 -23.3 11.7 -24.5
2026-02-14T20:27:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:27:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:27:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.768864
2026-02-14T20:27:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:27:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:27:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:27:41.345 [DEBUG] [Thread-191652] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:27:41.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:27:41.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:27:41.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:27:22', tmtdew=9.27, humidity=53.16, cloud=0.0, wind=35.45, temperature=11.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:27:09.850', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.04875000000000007, -0.06324999999999825, -0.01950000000000074, -0.10749999999999993, -0.018749999999998934, -0.034000000000000696, -0.0022500000000000853, 0.0, -0.026999999999999247, -0.01675000000000182, -0.02800000000000047, 0.07699999999999996, 0.02824999999999811, -0.051000000000000156, -0.0990000000000002, -0.028750000000000497, -0.03449999999999953, -0.07249999999999979, -0.08425000000000082, 0.005999999999998451, 0.005749999999999034, 0.020250000000000767, -0.03325000000000067, -0.006000000000000227, -0.008000000000000895, -0.02725000000000044, -0.02149999999999963, 0.06099999999999994, 0.038000000000000256, 0.0020000000000024443, 0.0010000000000012221, 0.0337499999999995], zp_timestamp='2026-02-14T18:25:00')
2026-02-14T20:27:41.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T20:27:41.439 [DEBUG] [Thread-191655] [transport.py] [_log()] starting thread (client mode): 0xa5772e60
2026-02-14T20:27:41.440 [DEBUG] [Thread-191655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:27:41.454 [DEBUG] [Thread-191655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:27:41.455 [INFO] [Thread-191655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:27:41.462 [DEBUG] [Thread-191655] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:27:41.463 [DEBUG] [Thread-191655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:27:41.463 [DEBUG] [Thread-191655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:27:41.463 [DEBUG] [Thread-191655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:27:41.463 [DEBUG] [Thread-191655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:27:41.463 [DEBUG] [Thread-191655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:27:41.463 [DEBUG] [Thread-191655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:27:41.463 [DEBUG] [Thread-191655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:27:41.463 [DEBUG] [Thread-191655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:27:41.463 [DEBUG] [Thread-191655] [transport.py] [_log()] client lang: <none>
2026-02-14T20:27:41.463 [DEBUG] [Thread-191655] [transport.py] [_log()] server lang: <none>
2026-02-14T20:27:41.463 [DEBUG] [Thread-191655] [transport.py] [_log()] kex follows: False
2026-02-14T20:27:41.463 [DEBUG] [Thread-191655] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:27:41.463 [DEBUG] [Thread-191655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:27:41.463 [DEBUG] [Thread-191655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:27:41.463 [DEBUG] [Thread-191655] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:27:41.463 [DEBUG] [Thread-191655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:27:41.463 [DEBUG] [Thread-191655] [transport.py] [_log()] Compression: none
2026-02-14T20:27:41.464 [DEBUG] [Thread-191655] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:27:41.519 [DEBUG] [Thread-191655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:27:41.519 [DEBUG] [Thread-191655] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:27:41.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:27:41.521 [DEBUG] [Thread-191655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:27:41.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:27:41.575 [DEBUG] [Thread-191655] [transport.py] [_log()] userauth is OK
2026-02-14T20:27:41.576 [DEBUG] [Thread-191655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:27:41.576 [DEBUG] [Thread-191655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:27:41.576 [DEBUG] [Thread-191655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:27:41.576 [DEBUG] [Thread-191655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:27:41.595 [INFO] [Thread-191655] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:27:41.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-14T20:27:41.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:27:42.426 [DEBUG] [Thread-191655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:27:42.427 [DEBUG] [Thread-191655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:27:42.474 [DEBUG] [Thread-191655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:27:42.475 [DEBUG] [Thread-191655] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:27:42.484 [DEBUG] [Thread-191655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:27:42.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:27:42.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-14T20:27:42.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-14T20:27:42.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:27:42.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:27:42.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:27:42.521 [DEBUG] [Thread-191655] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:27:42.599 [DEBUG] [Thread-191657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:27:45.803 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:27:49.193 [DEBUG] [Thread-191658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:27:49.923 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:28:01.438 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:28:04.244 [DEBUG] [Thread-191659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:28:12.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:28:12.523 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:28:12.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-14T20:28:14.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 27, 58), 9.25, 53.24, 0.0, 37.53, 11.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:28:14.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:27:58
2026-02-14T20:28:14.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:28:14.883 [DEBUG] [Thread-191660] [transport.py] [_log()] starting thread (client mode): 0xa57c32b0
2026-02-14T20:28:14.883 [DEBUG] [Thread-191660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:28:14.904 [DEBUG] [Thread-191660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:28:14.905 [INFO] [Thread-191660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:28:14.908 [DEBUG] [Thread-191660] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:28:14.908 [DEBUG] [Thread-191660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:28:14.908 [DEBUG] [Thread-191660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:28:14.908 [DEBUG] [Thread-191660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:28:14.908 [DEBUG] [Thread-191660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:28:14.908 [DEBUG] [Thread-191660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:28:14.908 [DEBUG] [Thread-191660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:28:14.908 [DEBUG] [Thread-191660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:28:14.908 [DEBUG] [Thread-191660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:28:14.908 [DEBUG] [Thread-191660] [transport.py] [_log()] client lang: <none>
2026-02-14T20:28:14.908 [DEBUG] [Thread-191660] [transport.py] [_log()] server lang: <none>
2026-02-14T20:28:14.908 [DEBUG] [Thread-191660] [transport.py] [_log()] kex follows: False
2026-02-14T20:28:14.908 [DEBUG] [Thread-191660] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:28:14.908 [DEBUG] [Thread-191660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:28:14.908 [DEBUG] [Thread-191660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:28:14.908 [DEBUG] [Thread-191660] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:28:14.908 [DEBUG] [Thread-191660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:28:14.908 [DEBUG] [Thread-191660] [transport.py] [_log()] Compression: none
2026-02-14T20:28:14.908 [DEBUG] [Thread-191660] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:28:14.926 [DEBUG] [Thread-191660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:28:14.927 [DEBUG] [Thread-191660] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:28:14.927 [DEBUG] [Thread-191660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:28:14.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:28:14.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:28:14.929 [DEBUG] [Thread-191660] [transport.py] [_log()] userauth is OK
2026-02-14T20:28:14.929 [DEBUG] [Thread-191660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:28:14.929 [DEBUG] [Thread-191660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:28:14.930 [DEBUG] [Thread-191660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:28:14.930 [DEBUG] [Thread-191660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:28:14.966 [INFO] [Thread-191660] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:28:14.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:28:15.584 [DEBUG] [Thread-191660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:28:15.584 [DEBUG] [Thread-191660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:28:15.584 [DEBUG] [Thread-191660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:28:15.625 [DEBUG] [Thread-191660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:28:15.625 [DEBUG] [Thread-191660] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:28:15.629 [DEBUG] [Thread-191660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:28:15.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:28:15.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:28:15.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:28:15.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:28:15.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:28:15.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:28:15.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:28:15.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:28:15.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:28:15.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.769211 -999.00  +11.30  27.84     58   +3.40 1 1 1 1 1     0    0 7.28 -29.91 ZNESW 22.7 27.8 160.6 38.4 11.7 -25.4 11.5 -24.4 11.3 -23.4 11.7 -24.7
2026-02-14T20:28:15.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:28:15.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:28:15.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.769211
2026-02-14T20:28:15.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:28:15.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:28:15.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:28:15.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:28:15.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:28:15.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:27:58', tmtdew=9.25, humidity=53.24, cloud=0.0, wind=37.53, temperature=11.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:27:39.830', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.04875000000000007, -0.06324999999999825, -0.01950000000000074, -0.10749999999999993, -0.018749999999998934, -0.034000000000000696, -0.0022500000000000853, 0.0, -0.026999999999999247, -0.01675000000000182, -0.02800000000000047, 0.07699999999999996, 0.02824999999999811, -0.051000000000000156, -0.0990000000000002, -0.028750000000000497, -0.03449999999999953, -0.07249999999999979, -0.08425000000000082, 0.005999999999998451, 0.005749999999999034, 0.020250000000000767, -0.03325000000000067, -0.006000000000000227, -0.008000000000000895, -0.02725000000000044, -0.02149999999999963, 0.06099999999999994, 0.038000000000000256, 0.0020000000000024443, 0.0010000000000012221, 0.0337499999999995], zp_timestamp='2026-02-14T18:25:00')
2026-02-14T20:28:15.656 [DEBUG] [Thread-191660] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:28:15.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-14T20:28:15.758 [DEBUG] [Thread-191663] [transport.py] [_log()] starting thread (client mode): 0xa2d11e70
2026-02-14T20:28:15.758 [DEBUG] [Thread-191663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:28:15.774 [DEBUG] [Thread-191663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:28:15.774 [INFO] [Thread-191663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:28:15.785 [DEBUG] [Thread-191663] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:28:15.785 [DEBUG] [Thread-191663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:28:15.786 [DEBUG] [Thread-191663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:28:15.786 [DEBUG] [Thread-191663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:28:15.786 [DEBUG] [Thread-191663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:28:15.786 [DEBUG] [Thread-191663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:28:15.786 [DEBUG] [Thread-191663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:28:15.786 [DEBUG] [Thread-191663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:28:15.786 [DEBUG] [Thread-191663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:28:15.786 [DEBUG] [Thread-191663] [transport.py] [_log()] client lang: <none>
2026-02-14T20:28:15.786 [DEBUG] [Thread-191663] [transport.py] [_log()] server lang: <none>
2026-02-14T20:28:15.786 [DEBUG] [Thread-191663] [transport.py] [_log()] kex follows: False
2026-02-14T20:28:15.786 [DEBUG] [Thread-191663] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:28:15.786 [DEBUG] [Thread-191663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:28:15.786 [DEBUG] [Thread-191663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:28:15.787 [DEBUG] [Thread-191663] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:28:15.787 [DEBUG] [Thread-191663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:28:15.787 [DEBUG] [Thread-191663] [transport.py] [_log()] Compression: none
2026-02-14T20:28:15.787 [DEBUG] [Thread-191663] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:28:15.840 [DEBUG] [Thread-191663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:28:15.841 [DEBUG] [Thread-191663] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:28:15.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:28:15.842 [DEBUG] [Thread-191663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:28:15.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:28:15.899 [DEBUG] [Thread-191663] [transport.py] [_log()] userauth is OK
2026-02-14T20:28:15.899 [DEBUG] [Thread-191663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:28:15.899 [DEBUG] [Thread-191663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:28:15.899 [DEBUG] [Thread-191663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:28:15.899 [DEBUG] [Thread-191663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:28:15.914 [INFO] [Thread-191663] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:28:15.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-14T20:28:15.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:28:16.738 [DEBUG] [Thread-191663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:28:16.738 [DEBUG] [Thread-191663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:28:16.786 [DEBUG] [Thread-191663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:28:16.787 [DEBUG] [Thread-191663] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:28:16.796 [DEBUG] [Thread-191663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:28:16.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:28:16.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:28:16.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-14T20:28:16.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:28:16.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:28:16.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:28:16.833 [DEBUG] [Thread-191663] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:28:19.283 [DEBUG] [Thread-191665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:28:30.902 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:28:30.903 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:28:34.339 [DEBUG] [Thread-191666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:28:42.658 [DEBUG] [Thread-191667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:28:46.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:28:46.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:28:46.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-14T20:28:48.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 28, 35), 9.44, 52.32, 0.0, 46.68, 11.73, 0, 0, 0, 2, 1, 0),)
2026-02-14T20:28:48.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:28:35
2026-02-14T20:28:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:28:49.167 [DEBUG] [Thread-191668] [transport.py] [_log()] starting thread (client mode): 0xa2d12530
2026-02-14T20:28:49.167 [DEBUG] [Thread-191668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:28:49.188 [DEBUG] [Thread-191668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:28:49.188 [INFO] [Thread-191668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:28:49.191 [DEBUG] [Thread-191668] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:28:49.191 [DEBUG] [Thread-191668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:28:49.192 [DEBUG] [Thread-191668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:28:49.192 [DEBUG] [Thread-191668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:28:49.192 [DEBUG] [Thread-191668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:28:49.192 [DEBUG] [Thread-191668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:28:49.192 [DEBUG] [Thread-191668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:28:49.192 [DEBUG] [Thread-191668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:28:49.192 [DEBUG] [Thread-191668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:28:49.192 [DEBUG] [Thread-191668] [transport.py] [_log()] client lang: <none>
2026-02-14T20:28:49.192 [DEBUG] [Thread-191668] [transport.py] [_log()] server lang: <none>
2026-02-14T20:28:49.192 [DEBUG] [Thread-191668] [transport.py] [_log()] kex follows: False
2026-02-14T20:28:49.192 [DEBUG] [Thread-191668] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:28:49.192 [DEBUG] [Thread-191668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:28:49.192 [DEBUG] [Thread-191668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:28:49.192 [DEBUG] [Thread-191668] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:28:49.192 [DEBUG] [Thread-191668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:28:49.192 [DEBUG] [Thread-191668] [transport.py] [_log()] Compression: none
2026-02-14T20:28:49.192 [DEBUG] [Thread-191668] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:28:49.211 [DEBUG] [Thread-191668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:28:49.211 [DEBUG] [Thread-191668] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:28:49.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:28:49.213 [DEBUG] [Thread-191668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:28:49.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:28:49.215 [DEBUG] [Thread-191668] [transport.py] [_log()] userauth is OK
2026-02-14T20:28:49.215 [DEBUG] [Thread-191668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:28:49.215 [DEBUG] [Thread-191668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:28:49.216 [DEBUG] [Thread-191668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:28:49.216 [DEBUG] [Thread-191668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:28:49.241 [INFO] [Thread-191668] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:28:49.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:28:49.372 [DEBUG] [Thread-191670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:28:49.852 [DEBUG] [Thread-191668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:28:49.852 [DEBUG] [Thread-191668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:28:49.853 [DEBUG] [Thread-191668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:28:49.893 [DEBUG] [Thread-191668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:28:49.894 [DEBUG] [Thread-191668] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:28:49.897 [DEBUG] [Thread-191668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:28:49.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:28:49.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:28:49.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:28:49.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:28:49.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:28:49.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:28:49.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:28:49.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:28:49.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:28:49.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.769559 -999.00  +11.30  25.91     58   +3.40 1 1 1 1 1     0    0 7.19 -28.36 ZNESW 29.4 25.9 160.4 35.0 11.7 -25.5 11.6 -24.5 11.3 -23.3 11.7 -24.4
2026-02-14T20:28:49.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:28:49.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:28:49.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.769559
2026-02-14T20:28:49.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:28:49.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:28:49.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:28:49.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:28:49.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:28:49.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:28:35', tmtdew=9.44, humidity=52.32, cloud=0.0, wind=46.68, temperature=11.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:28:09.898', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.04875000000000007, -0.06324999999999825, -0.01950000000000074, -0.10749999999999993, -0.018749999999998934, -0.034000000000000696, -0.0022500000000000853, 0.0, -0.026999999999999247, -0.01675000000000182, -0.02800000000000047, 0.07699999999999996, 0.02824999999999811, -0.051000000000000156, -0.0990000000000002, -0.028750000000000497, -0.03449999999999953, -0.07249999999999979, -0.08425000000000082, 0.005999999999998451, 0.005749999999999034, 0.020250000000000767, -0.03325000000000067, -0.006000000000000227, -0.008000000000000895, -0.02725000000000044, -0.02149999999999963, 0.06099999999999994, 0.038000000000000256, 0.0020000000000024443, 0.0010000000000012221, 0.0337499999999995], zp_timestamp='2026-02-14T18:27:00')
2026-02-14T20:28:49.923 [DEBUG] [Thread-191668] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:28:50.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-14T20:28:50.018 [DEBUG] [Thread-191672] [transport.py] [_log()] starting thread (client mode): 0xa2d131c0
2026-02-14T20:28:50.018 [DEBUG] [Thread-191672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:28:50.032 [DEBUG] [Thread-191672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:28:50.032 [INFO] [Thread-191672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:28:50.040 [DEBUG] [Thread-191672] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:28:50.040 [DEBUG] [Thread-191672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:28:50.040 [DEBUG] [Thread-191672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:28:50.040 [DEBUG] [Thread-191672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:28:50.040 [DEBUG] [Thread-191672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:28:50.040 [DEBUG] [Thread-191672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:28:50.041 [DEBUG] [Thread-191672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:28:50.041 [DEBUG] [Thread-191672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:28:50.041 [DEBUG] [Thread-191672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:28:50.041 [DEBUG] [Thread-191672] [transport.py] [_log()] client lang: <none>
2026-02-14T20:28:50.041 [DEBUG] [Thread-191672] [transport.py] [_log()] server lang: <none>
2026-02-14T20:28:50.041 [DEBUG] [Thread-191672] [transport.py] [_log()] kex follows: False
2026-02-14T20:28:50.041 [DEBUG] [Thread-191672] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:28:50.041 [DEBUG] [Thread-191672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:28:50.041 [DEBUG] [Thread-191672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:28:50.041 [DEBUG] [Thread-191672] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:28:50.041 [DEBUG] [Thread-191672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:28:50.041 [DEBUG] [Thread-191672] [transport.py] [_log()] Compression: none
2026-02-14T20:28:50.041 [DEBUG] [Thread-191672] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:28:50.099 [DEBUG] [Thread-191672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:28:50.100 [DEBUG] [Thread-191672] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:28:50.100 [DEBUG] [Thread-191672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:28:50.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:28:50.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:28:50.155 [DEBUG] [Thread-191672] [transport.py] [_log()] userauth is OK
2026-02-14T20:28:50.156 [DEBUG] [Thread-191672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:28:50.156 [DEBUG] [Thread-191672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:28:50.156 [DEBUG] [Thread-191672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:28:50.156 [DEBUG] [Thread-191672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:28:50.180 [INFO] [Thread-191672] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:28:50.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-14T20:28:50.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:28:50.978 [DEBUG] [Thread-191672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:28:50.978 [DEBUG] [Thread-191672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:28:51.025 [DEBUG] [Thread-191672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:28:51.026 [DEBUG] [Thread-191672] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:28:51.034 [DEBUG] [Thread-191672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:28:51.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:28:51.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-14T20:28:51.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:28:51.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:28:51.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:28:51.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:28:51.065 [DEBUG] [Thread-191672] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:29:04.407 [DEBUG] [Thread-191674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:29:19.462 [DEBUG] [Thread-191675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:29:21.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:29:21.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:29:21.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:29:22.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 29, 10), 9.22, 53.16, 0.0, 37.51, 11.33, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:29:22.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:29:10
2026-02-14T20:29:23.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:29:23.424 [DEBUG] [Thread-191676] [transport.py] [_log()] starting thread (client mode): 0xa57d5030
2026-02-14T20:29:23.424 [DEBUG] [Thread-191676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:29:23.439 [DEBUG] [Thread-191676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:29:23.439 [INFO] [Thread-191676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:29:23.443 [DEBUG] [Thread-191676] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:29:23.443 [DEBUG] [Thread-191676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:29:23.443 [DEBUG] [Thread-191676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:29:23.443 [DEBUG] [Thread-191676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:29:23.443 [DEBUG] [Thread-191676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:29:23.443 [DEBUG] [Thread-191676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:29:23.443 [DEBUG] [Thread-191676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:29:23.443 [DEBUG] [Thread-191676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:29:23.443 [DEBUG] [Thread-191676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:29:23.443 [DEBUG] [Thread-191676] [transport.py] [_log()] client lang: <none>
2026-02-14T20:29:23.443 [DEBUG] [Thread-191676] [transport.py] [_log()] server lang: <none>
2026-02-14T20:29:23.443 [DEBUG] [Thread-191676] [transport.py] [_log()] kex follows: False
2026-02-14T20:29:23.443 [DEBUG] [Thread-191676] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:29:23.443 [DEBUG] [Thread-191676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:29:23.444 [DEBUG] [Thread-191676] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:29:23.444 [DEBUG] [Thread-191676] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:29:23.444 [DEBUG] [Thread-191676] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:29:23.444 [DEBUG] [Thread-191676] [transport.py] [_log()] Compression: none
2026-02-14T20:29:23.444 [DEBUG] [Thread-191676] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:29:23.457 [DEBUG] [Thread-191676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:29:23.458 [DEBUG] [Thread-191676] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:29:23.458 [DEBUG] [Thread-191676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:29:23.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:29:23.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:29:23.460 [DEBUG] [Thread-191676] [transport.py] [_log()] userauth is OK
2026-02-14T20:29:23.460 [DEBUG] [Thread-191676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:29:23.460 [DEBUG] [Thread-191676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:29:23.460 [DEBUG] [Thread-191676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:29:23.460 [DEBUG] [Thread-191676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:29:23.478 [INFO] [Thread-191676] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:29:23.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:29:24.281 [DEBUG] [Thread-191676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:29:24.281 [DEBUG] [Thread-191676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:29:24.282 [DEBUG] [Thread-191676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:29:24.321 [DEBUG] [Thread-191676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:29:24.321 [DEBUG] [Thread-191676] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:29:24.324 [DEBUG] [Thread-191676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:29:24.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:29:24.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:29:24.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:29:24.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:29:24.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:29:24.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:29:24.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:29:24.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:29:24.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:29:24.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.769906 -999.00  +11.20  28.40     58   +3.40 1 1 1 1 1     0    0 7.29 -26.30 ZNESW 29.2 28.4 164.0 38.7 11.7 -25.4 11.6 -24.5 11.3 -23.5 11.7 -24.7
2026-02-14T20:29:24.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:29:24.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:29:24.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.769906
2026-02-14T20:29:24.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:29:24.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:29:24.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:29:24.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:29:24.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:29:24.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:29:10', tmtdew=9.22, humidity=53.16, cloud=0.0, wind=37.51, temperature=11.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:28:39.878', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.04875000000000007, -0.06324999999999825, -0.01950000000000074, -0.10749999999999993, -0.018749999999998934, -0.034000000000000696, -0.0022500000000000853, 0.0, -0.026999999999999247, -0.01675000000000182, -0.02800000000000047, 0.07699999999999996, 0.02824999999999811, -0.051000000000000156, -0.0990000000000002, -0.028750000000000497, -0.03449999999999953, -0.07249999999999979, -0.08425000000000082, 0.005999999999998451, 0.005749999999999034, 0.020250000000000767, -0.03325000000000067, -0.006000000000000227, -0.008000000000000895, -0.02725000000000044, -0.02149999999999963, 0.06099999999999994, 0.038000000000000256, 0.0020000000000024443, 0.0010000000000012221, 0.0337499999999995], zp_timestamp='2026-02-14T18:27:00')
2026-02-14T20:29:24.349 [DEBUG] [Thread-191676] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:29:24.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-14T20:29:24.445 [DEBUG] [Thread-191679] [transport.py] [_log()] starting thread (client mode): 0xa57c20b0
2026-02-14T20:29:24.445 [DEBUG] [Thread-191679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:29:24.459 [DEBUG] [Thread-191679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:29:24.459 [INFO] [Thread-191679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:29:24.467 [DEBUG] [Thread-191679] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:29:24.467 [DEBUG] [Thread-191679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:29:24.467 [DEBUG] [Thread-191679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:29:24.467 [DEBUG] [Thread-191679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:29:24.467 [DEBUG] [Thread-191679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:29:24.467 [DEBUG] [Thread-191679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:29:24.467 [DEBUG] [Thread-191679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:29:24.467 [DEBUG] [Thread-191679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:29:24.467 [DEBUG] [Thread-191679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:29:24.467 [DEBUG] [Thread-191679] [transport.py] [_log()] client lang: <none>
2026-02-14T20:29:24.467 [DEBUG] [Thread-191679] [transport.py] [_log()] server lang: <none>
2026-02-14T20:29:24.467 [DEBUG] [Thread-191679] [transport.py] [_log()] kex follows: False
2026-02-14T20:29:24.467 [DEBUG] [Thread-191679] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:29:24.467 [DEBUG] [Thread-191679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:29:24.467 [DEBUG] [Thread-191679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:29:24.467 [DEBUG] [Thread-191679] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:29:24.467 [DEBUG] [Thread-191679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:29:24.467 [DEBUG] [Thread-191679] [transport.py] [_log()] Compression: none
2026-02-14T20:29:24.467 [DEBUG] [Thread-191679] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:29:24.522 [DEBUG] [Thread-191679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:29:24.522 [DEBUG] [Thread-191679] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:29:24.523 [DEBUG] [Thread-191679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:29:24.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:29:24.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:29:24.578 [DEBUG] [Thread-191679] [transport.py] [_log()] userauth is OK
2026-02-14T20:29:24.579 [DEBUG] [Thread-191679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:29:24.579 [DEBUG] [Thread-191679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:29:24.579 [DEBUG] [Thread-191679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:29:24.579 [DEBUG] [Thread-191679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:29:24.597 [INFO] [Thread-191679] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:29:24.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-14T20:29:24.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:29:25.394 [DEBUG] [Thread-191679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:29:25.394 [DEBUG] [Thread-191679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:29:25.441 [DEBUG] [Thread-191679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:29:25.441 [DEBUG] [Thread-191679] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:29:25.450 [DEBUG] [Thread-191679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:29:25.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:29:25.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:29:25.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:29:25.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:29:25.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:29:25.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:29:25.487 [DEBUG] [Thread-191679] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:29:31.110 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:29:31.111 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:29:34.496 [DEBUG] [Thread-191681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:29:34.920 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:29:42.716 [DEBUG] [Thread-191682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:29:49.535 [DEBUG] [Thread-191683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:29:55.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:29:55.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:29:55.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-14T20:29:57.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 29, 46), 9.14, 53.24, 0.0, 35.99, 11.33, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:29:57.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:29:46
2026-02-14T20:29:57.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:29:57.807 [DEBUG] [Thread-191684] [transport.py] [_log()] starting thread (client mode): 0xa5771000
2026-02-14T20:29:57.807 [DEBUG] [Thread-191684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:29:57.827 [DEBUG] [Thread-191684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:29:57.827 [INFO] [Thread-191684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:29:57.830 [DEBUG] [Thread-191684] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:29:57.831 [DEBUG] [Thread-191684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:29:57.831 [DEBUG] [Thread-191684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:29:57.831 [DEBUG] [Thread-191684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:29:57.831 [DEBUG] [Thread-191684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:29:57.831 [DEBUG] [Thread-191684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:29:57.831 [DEBUG] [Thread-191684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:29:57.831 [DEBUG] [Thread-191684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:29:57.831 [DEBUG] [Thread-191684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:29:57.831 [DEBUG] [Thread-191684] [transport.py] [_log()] client lang: <none>
2026-02-14T20:29:57.831 [DEBUG] [Thread-191684] [transport.py] [_log()] server lang: <none>
2026-02-14T20:29:57.831 [DEBUG] [Thread-191684] [transport.py] [_log()] kex follows: False
2026-02-14T20:29:57.831 [DEBUG] [Thread-191684] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:29:57.831 [DEBUG] [Thread-191684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:29:57.831 [DEBUG] [Thread-191684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:29:57.831 [DEBUG] [Thread-191684] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:29:57.831 [DEBUG] [Thread-191684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:29:57.831 [DEBUG] [Thread-191684] [transport.py] [_log()] Compression: none
2026-02-14T20:29:57.831 [DEBUG] [Thread-191684] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:29:57.851 [DEBUG] [Thread-191684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:29:57.852 [DEBUG] [Thread-191684] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:29:57.852 [DEBUG] [Thread-191684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:29:57.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:29:57.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:29:57.897 [DEBUG] [Thread-191684] [transport.py] [_log()] userauth is OK
2026-02-14T20:29:57.897 [DEBUG] [Thread-191684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:29:57.897 [DEBUG] [Thread-191684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:29:57.897 [DEBUG] [Thread-191684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:29:57.898 [DEBUG] [Thread-191684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:29:57.923 [INFO] [Thread-191684] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:29:57.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:29:58.564 [DEBUG] [Thread-191684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:29:58.564 [DEBUG] [Thread-191684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:29:58.565 [DEBUG] [Thread-191684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:29:58.605 [DEBUG] [Thread-191684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:29:58.606 [DEBUG] [Thread-191684] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:29:58.609 [DEBUG] [Thread-191684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:29:58.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:29:58.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:29:58.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:29:58.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:29:58.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:29:58.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:29:58.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:29:58.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:29:58.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:29:58.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.770253 -999.00  +11.20  36.35     58   +3.40 1 1 2 1 1     0    0 7.47 -25.02 ZNESW 30.1 36.4 167.6 38.9 11.7 -25.6 11.5 -24.6 11.3 -23.6 11.7 -24.9
2026-02-14T20:29:58.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:29:58.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:29:58.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.770253
2026-02-14T20:29:58.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:29:58.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:29:58.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:29:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:29:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:29:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:29:46', tmtdew=9.14, humidity=53.24, cloud=0.0, wind=35.99, temperature=11.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:29:09.859', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.04875000000000007, -0.06324999999999825, -0.01950000000000074, -0.10749999999999993, -0.018749999999998934, -0.034000000000000696, -0.0022500000000000853, 0.0, -0.026999999999999247, -0.01675000000000182, -0.02800000000000047, 0.07699999999999996, 0.02824999999999811, -0.051000000000000156, -0.0990000000000002, -0.028750000000000497, -0.03449999999999953, -0.07249999999999979, -0.08425000000000082, 0.005999999999998451, 0.005749999999999034, 0.020250000000000767, -0.03325000000000067, -0.006000000000000227, -0.008000000000000895, -0.02725000000000044, -0.02149999999999963, 0.06099999999999994, 0.038000000000000256, 0.0020000000000024443, 0.0010000000000012221, 0.0337499999999995], zp_timestamp='2026-02-14T18:27:00')
2026-02-14T20:29:58.638 [DEBUG] [Thread-191684] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:29:58.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-14T20:29:58.734 [DEBUG] [Thread-191687] [transport.py] [_log()] starting thread (client mode): 0xa2d6d2d0
2026-02-14T20:29:58.734 [DEBUG] [Thread-191687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:29:58.748 [DEBUG] [Thread-191687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:29:58.749 [INFO] [Thread-191687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:29:58.756 [DEBUG] [Thread-191687] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:29:58.756 [DEBUG] [Thread-191687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:29:58.756 [DEBUG] [Thread-191687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:29:58.756 [DEBUG] [Thread-191687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:29:58.757 [DEBUG] [Thread-191687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:29:58.757 [DEBUG] [Thread-191687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:29:58.757 [DEBUG] [Thread-191687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:29:58.757 [DEBUG] [Thread-191687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:29:58.757 [DEBUG] [Thread-191687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:29:58.757 [DEBUG] [Thread-191687] [transport.py] [_log()] client lang: <none>
2026-02-14T20:29:58.757 [DEBUG] [Thread-191687] [transport.py] [_log()] server lang: <none>
2026-02-14T20:29:58.757 [DEBUG] [Thread-191687] [transport.py] [_log()] kex follows: False
2026-02-14T20:29:58.757 [DEBUG] [Thread-191687] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:29:58.757 [DEBUG] [Thread-191687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:29:58.757 [DEBUG] [Thread-191687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:29:58.757 [DEBUG] [Thread-191687] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:29:58.757 [DEBUG] [Thread-191687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:29:58.757 [DEBUG] [Thread-191687] [transport.py] [_log()] Compression: none
2026-02-14T20:29:58.757 [DEBUG] [Thread-191687] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:29:58.816 [DEBUG] [Thread-191687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:29:58.817 [DEBUG] [Thread-191687] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:29:58.818 [DEBUG] [Thread-191687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:29:58.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:29:58.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:29:58.871 [DEBUG] [Thread-191687] [transport.py] [_log()] userauth is OK
2026-02-14T20:29:58.872 [DEBUG] [Thread-191687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:29:58.872 [DEBUG] [Thread-191687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:29:58.872 [DEBUG] [Thread-191687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:29:58.872 [DEBUG] [Thread-191687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:29:58.890 [INFO] [Thread-191687] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:29:58.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-14T20:29:58.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:29:59.721 [DEBUG] [Thread-191687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:29:59.721 [DEBUG] [Thread-191687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:29:59.769 [DEBUG] [Thread-191687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:29:59.770 [DEBUG] [Thread-191687] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:29:59.779 [DEBUG] [Thread-191687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:29:59.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:29:59.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-14T20:29:59.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-14T20:29:59.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:29:59.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:29:59.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:29:59.815 [DEBUG] [Thread-191687] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:30:04.572 [DEBUG] [Thread-191689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:30:13.654 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:30:19.625 [DEBUG] [Thread-191690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:30:22.554 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:30:26.658 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:30:29.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:30:29.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:30:29.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-14T20:30:31.312 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:30:31.313 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:30:32.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 30, 22), 9.07, 53.51, 0.0, 36.05, 11.32, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:30:32.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:30:22
2026-02-14T20:30:32.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:30:32.924 [DEBUG] [Thread-191691] [transport.py] [_log()] starting thread (client mode): 0xa57723b0
2026-02-14T20:30:32.924 [DEBUG] [Thread-191691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:30:32.943 [DEBUG] [Thread-191691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:30:32.943 [INFO] [Thread-191691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:30:32.947 [DEBUG] [Thread-191691] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:30:32.947 [DEBUG] [Thread-191691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:30:32.947 [DEBUG] [Thread-191691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:30:32.947 [DEBUG] [Thread-191691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:30:32.947 [DEBUG] [Thread-191691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:30:32.947 [DEBUG] [Thread-191691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:30:32.947 [DEBUG] [Thread-191691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:30:32.947 [DEBUG] [Thread-191691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:30:32.947 [DEBUG] [Thread-191691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:30:32.947 [DEBUG] [Thread-191691] [transport.py] [_log()] client lang: <none>
2026-02-14T20:30:32.947 [DEBUG] [Thread-191691] [transport.py] [_log()] server lang: <none>
2026-02-14T20:30:32.947 [DEBUG] [Thread-191691] [transport.py] [_log()] kex follows: False
2026-02-14T20:30:32.947 [DEBUG] [Thread-191691] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:30:32.947 [DEBUG] [Thread-191691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:30:32.947 [DEBUG] [Thread-191691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:30:32.948 [DEBUG] [Thread-191691] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:30:32.948 [DEBUG] [Thread-191691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:30:32.948 [DEBUG] [Thread-191691] [transport.py] [_log()] Compression: none
2026-02-14T20:30:32.948 [DEBUG] [Thread-191691] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:30:32.965 [DEBUG] [Thread-191691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:30:32.966 [DEBUG] [Thread-191691] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:30:32.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:30:32.967 [DEBUG] [Thread-191691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:30:32.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:30:32.968 [DEBUG] [Thread-191691] [transport.py] [_log()] userauth is OK
2026-02-14T20:30:32.968 [DEBUG] [Thread-191691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:30:32.968 [DEBUG] [Thread-191691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:30:32.968 [DEBUG] [Thread-191691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:30:32.968 [DEBUG] [Thread-191691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:30:32.979 [INFO] [Thread-191691] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:30:32.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:30:33.634 [DEBUG] [Thread-191691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:30:33.634 [DEBUG] [Thread-191691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:30:33.635 [DEBUG] [Thread-191691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:30:33.675 [DEBUG] [Thread-191691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:30:33.676 [DEBUG] [Thread-191691] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:30:33.679 [DEBUG] [Thread-191691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:30:33.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:30:33.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:30:33.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:30:33.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:30:33.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:30:33.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:30:33.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:30:33.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:30:33.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:30:33.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.770947 -999.00  +11.20  31.44     58   +3.40 1 1 2 1 1     0    0 7.40 -24.50 ZNESW 32.3 31.4 173.4 42.0 11.7 -25.7 11.5 -24.5 11.3 -23.6 11.7 -24.8
2026-02-14T20:30:33.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:30:33.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:30:33.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.770947
2026-02-14T20:30:33.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:30:33.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:30:33.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:30:33.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:30:33.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:30:33.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:30:22', tmtdew=9.07, humidity=53.51, cloud=0.0, wind=36.05, temperature=11.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:30:09.821', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.04875000000000007, -0.06324999999999825, -0.01950000000000074, -0.10749999999999993, -0.018749999999998934, -0.034000000000000696, -0.0022500000000000853, 0.0, -0.026999999999999247, -0.01675000000000182, -0.02800000000000047, 0.07699999999999996, 0.02824999999999811, -0.051000000000000156, -0.0990000000000002, -0.028750000000000497, -0.03449999999999953, -0.07249999999999979, -0.08425000000000082, 0.005999999999998451, 0.005749999999999034, 0.020250000000000767, -0.03325000000000067, -0.006000000000000227, -0.008000000000000895, -0.02725000000000044, -0.02149999999999963, 0.06099999999999994, 0.038000000000000256, 0.0020000000000024443, 0.0010000000000012221, 0.0337499999999995], zp_timestamp='2026-02-14T18:27:00')
2026-02-14T20:30:33.707 [DEBUG] [Thread-191691] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:30:33.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-14T20:30:33.803 [DEBUG] [Thread-191694] [transport.py] [_log()] starting thread (client mode): 0xa5773eb0
2026-02-14T20:30:33.803 [DEBUG] [Thread-191694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:30:33.818 [DEBUG] [Thread-191694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:30:33.818 [INFO] [Thread-191694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:30:33.825 [DEBUG] [Thread-191694] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:30:33.826 [DEBUG] [Thread-191694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:30:33.826 [DEBUG] [Thread-191694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:30:33.826 [DEBUG] [Thread-191694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:30:33.826 [DEBUG] [Thread-191694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:30:33.826 [DEBUG] [Thread-191694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:30:33.826 [DEBUG] [Thread-191694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:30:33.826 [DEBUG] [Thread-191694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:30:33.826 [DEBUG] [Thread-191694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:30:33.827 [DEBUG] [Thread-191694] [transport.py] [_log()] client lang: <none>
2026-02-14T20:30:33.827 [DEBUG] [Thread-191694] [transport.py] [_log()] server lang: <none>
2026-02-14T20:30:33.827 [DEBUG] [Thread-191694] [transport.py] [_log()] kex follows: False
2026-02-14T20:30:33.827 [DEBUG] [Thread-191694] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:30:33.827 [DEBUG] [Thread-191694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:30:33.827 [DEBUG] [Thread-191694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:30:33.827 [DEBUG] [Thread-191694] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:30:33.827 [DEBUG] [Thread-191694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:30:33.827 [DEBUG] [Thread-191694] [transport.py] [_log()] Compression: none
2026-02-14T20:30:33.828 [DEBUG] [Thread-191694] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:30:33.881 [DEBUG] [Thread-191694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:30:33.882 [DEBUG] [Thread-191694] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:30:33.882 [DEBUG] [Thread-191694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:30:33.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:30:33.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:30:33.939 [DEBUG] [Thread-191694] [transport.py] [_log()] userauth is OK
2026-02-14T20:30:33.939 [DEBUG] [Thread-191694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:30:33.939 [DEBUG] [Thread-191694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:30:33.939 [DEBUG] [Thread-191694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:30:33.939 [DEBUG] [Thread-191694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:30:33.960 [INFO] [Thread-191694] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:30:33.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-14T20:30:33.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:30:34.665 [DEBUG] [Thread-191696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:30:34.774 [DEBUG] [Thread-191694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:30:34.774 [DEBUG] [Thread-191694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:30:34.821 [DEBUG] [Thread-191694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:30:34.821 [DEBUG] [Thread-191694] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:30:34.831 [DEBUG] [Thread-191694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:30:34.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:30:34.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-14T20:30:34.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-14T20:30:34.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:30:34.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:30:34.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:30:34.867 [DEBUG] [Thread-191694] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:30:42.784 [DEBUG] [Thread-191697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:30:49.713 [DEBUG] [Thread-191698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:31:04.752 [DEBUG] [Thread-191699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:31:04.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:31:04.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:31:04.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-14T20:31:06.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 30, 58), 9.13, 53.28, 0.0, 39.88, 11.33, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:31:06.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:30:58
2026-02-14T20:31:07.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:31:07.242 [DEBUG] [Thread-191700] [transport.py] [_log()] starting thread (client mode): 0xa57c29e0
2026-02-14T20:31:07.243 [DEBUG] [Thread-191700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:31:07.263 [DEBUG] [Thread-191700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:31:07.263 [INFO] [Thread-191700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:31:07.266 [DEBUG] [Thread-191700] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:31:07.266 [DEBUG] [Thread-191700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:31:07.266 [DEBUG] [Thread-191700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:31:07.266 [DEBUG] [Thread-191700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:31:07.267 [DEBUG] [Thread-191700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:31:07.267 [DEBUG] [Thread-191700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:31:07.267 [DEBUG] [Thread-191700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:31:07.267 [DEBUG] [Thread-191700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:31:07.267 [DEBUG] [Thread-191700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:31:07.267 [DEBUG] [Thread-191700] [transport.py] [_log()] client lang: <none>
2026-02-14T20:31:07.267 [DEBUG] [Thread-191700] [transport.py] [_log()] server lang: <none>
2026-02-14T20:31:07.267 [DEBUG] [Thread-191700] [transport.py] [_log()] kex follows: False
2026-02-14T20:31:07.267 [DEBUG] [Thread-191700] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:31:07.267 [DEBUG] [Thread-191700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:31:07.267 [DEBUG] [Thread-191700] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:31:07.267 [DEBUG] [Thread-191700] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:31:07.267 [DEBUG] [Thread-191700] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:31:07.267 [DEBUG] [Thread-191700] [transport.py] [_log()] Compression: none
2026-02-14T20:31:07.267 [DEBUG] [Thread-191700] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:31:07.287 [DEBUG] [Thread-191700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:31:07.287 [DEBUG] [Thread-191700] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:31:07.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:31:07.288 [DEBUG] [Thread-191700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:31:07.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:31:07.290 [DEBUG] [Thread-191700] [transport.py] [_log()] userauth is OK
2026-02-14T20:31:07.290 [DEBUG] [Thread-191700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:31:07.291 [DEBUG] [Thread-191700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:31:07.291 [DEBUG] [Thread-191700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:31:07.291 [DEBUG] [Thread-191700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:31:07.313 [INFO] [Thread-191700] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:31:07.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:31:08.095 [DEBUG] [Thread-191700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:31:08.095 [DEBUG] [Thread-191700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:31:08.095 [DEBUG] [Thread-191700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:31:08.136 [DEBUG] [Thread-191700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:31:08.136 [DEBUG] [Thread-191700] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:31:08.137 [DEBUG] [Thread-191700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:31:08.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:31:08.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:31:08.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:31:08.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:31:08.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:31:08.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:31:08.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:31:08.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:31:08.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:31:08.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.771295 -999.00  +11.20  35.78     58   +3.40 1 1 2 1 1     0    0 7.46 -23.68 ZNESW 35.5 35.8 170.0 42.8 11.7 -25.5 11.5 -24.5 11.3 -23.6 11.7 -24.9
2026-02-14T20:31:08.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:31:08.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:31:08.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.771295
2026-02-14T20:31:08.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:31:08.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:31:08.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:31:08.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:31:08.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:31:08.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:30:58', tmtdew=9.13, humidity=53.28, cloud=0.0, wind=39.88, temperature=11.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:30:39.888', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.04875000000000007, -0.06324999999999825, -0.01950000000000074, -0.10749999999999993, -0.018749999999998934, -0.034000000000000696, -0.0022500000000000853, 0.0, -0.026999999999999247, -0.01675000000000182, -0.02800000000000047, 0.07699999999999996, 0.02824999999999811, -0.051000000000000156, -0.0990000000000002, -0.028750000000000497, -0.03449999999999953, -0.07249999999999979, -0.08425000000000082, 0.005999999999998451, 0.005749999999999034, 0.020250000000000767, -0.03325000000000067, -0.006000000000000227, -0.008000000000000895, -0.02725000000000044, -0.02149999999999963, 0.06099999999999994, 0.038000000000000256, 0.0020000000000024443, 0.0010000000000012221, 0.0337499999999995], zp_timestamp='2026-02-14T18:27:00')
2026-02-14T20:31:08.150 [DEBUG] [Thread-191700] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:31:08.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-14T20:31:08.234 [DEBUG] [Thread-191703] [transport.py] [_log()] starting thread (client mode): 0xa2d01180
2026-02-14T20:31:08.234 [DEBUG] [Thread-191703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:31:08.248 [DEBUG] [Thread-191703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:31:08.248 [INFO] [Thread-191703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:31:08.256 [DEBUG] [Thread-191703] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:31:08.256 [DEBUG] [Thread-191703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:31:08.256 [DEBUG] [Thread-191703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:31:08.256 [DEBUG] [Thread-191703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:31:08.256 [DEBUG] [Thread-191703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:31:08.256 [DEBUG] [Thread-191703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:31:08.256 [DEBUG] [Thread-191703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:31:08.256 [DEBUG] [Thread-191703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:31:08.256 [DEBUG] [Thread-191703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:31:08.256 [DEBUG] [Thread-191703] [transport.py] [_log()] client lang: <none>
2026-02-14T20:31:08.256 [DEBUG] [Thread-191703] [transport.py] [_log()] server lang: <none>
2026-02-14T20:31:08.256 [DEBUG] [Thread-191703] [transport.py] [_log()] kex follows: False
2026-02-14T20:31:08.256 [DEBUG] [Thread-191703] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:31:08.256 [DEBUG] [Thread-191703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:31:08.256 [DEBUG] [Thread-191703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:31:08.256 [DEBUG] [Thread-191703] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:31:08.256 [DEBUG] [Thread-191703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:31:08.256 [DEBUG] [Thread-191703] [transport.py] [_log()] Compression: none
2026-02-14T20:31:08.256 [DEBUG] [Thread-191703] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:31:08.313 [DEBUG] [Thread-191703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:31:08.314 [DEBUG] [Thread-191703] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:31:08.314 [DEBUG] [Thread-191703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:31:08.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:31:08.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:31:08.370 [DEBUG] [Thread-191703] [transport.py] [_log()] userauth is OK
2026-02-14T20:31:08.370 [DEBUG] [Thread-191703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:31:08.370 [DEBUG] [Thread-191703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:31:08.370 [DEBUG] [Thread-191703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:31:08.370 [DEBUG] [Thread-191703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:31:08.384 [INFO] [Thread-191703] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:31:08.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T20:31:08.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:31:09.239 [DEBUG] [Thread-191703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:31:09.239 [DEBUG] [Thread-191703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:31:09.287 [DEBUG] [Thread-191703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:31:09.288 [DEBUG] [Thread-191703] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:31:09.297 [DEBUG] [Thread-191703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:31:09.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:31:09.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:31:09.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:31:09.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:31:09.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:31:09.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:31:09.333 [DEBUG] [Thread-191703] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:31:09.342 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:31:19.789 [DEBUG] [Thread-191705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:31:31.515 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:31:31.516 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:31:34.840 [DEBUG] [Thread-191706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:31:39.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:31:39.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:31:39.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-14T20:31:41.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 31, 33), 9.12, 53.33, 0.0, 41.22, 11.32, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:31:41.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:31:33
2026-02-14T20:31:41.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:31:41.736 [DEBUG] [Thread-191707] [transport.py] [_log()] starting thread (client mode): 0xa2d001f0
2026-02-14T20:31:41.736 [DEBUG] [Thread-191707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:31:41.756 [DEBUG] [Thread-191707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:31:41.756 [INFO] [Thread-191707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:31:41.759 [DEBUG] [Thread-191707] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:31:41.759 [DEBUG] [Thread-191707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:31:41.759 [DEBUG] [Thread-191707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:31:41.759 [DEBUG] [Thread-191707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:31:41.759 [DEBUG] [Thread-191707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:31:41.759 [DEBUG] [Thread-191707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:31:41.759 [DEBUG] [Thread-191707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:31:41.759 [DEBUG] [Thread-191707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:31:41.760 [DEBUG] [Thread-191707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:31:41.760 [DEBUG] [Thread-191707] [transport.py] [_log()] client lang: <none>
2026-02-14T20:31:41.760 [DEBUG] [Thread-191707] [transport.py] [_log()] server lang: <none>
2026-02-14T20:31:41.760 [DEBUG] [Thread-191707] [transport.py] [_log()] kex follows: False
2026-02-14T20:31:41.760 [DEBUG] [Thread-191707] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:31:41.760 [DEBUG] [Thread-191707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:31:41.760 [DEBUG] [Thread-191707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:31:41.760 [DEBUG] [Thread-191707] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:31:41.760 [DEBUG] [Thread-191707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:31:41.760 [DEBUG] [Thread-191707] [transport.py] [_log()] Compression: none
2026-02-14T20:31:41.760 [DEBUG] [Thread-191707] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:31:41.780 [DEBUG] [Thread-191707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:31:41.781 [DEBUG] [Thread-191707] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:31:41.782 [DEBUG] [Thread-191707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:31:41.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:31:41.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:31:41.825 [DEBUG] [Thread-191707] [transport.py] [_log()] userauth is OK
2026-02-14T20:31:41.826 [DEBUG] [Thread-191707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:31:41.826 [DEBUG] [Thread-191707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:31:41.826 [DEBUG] [Thread-191707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:31:41.826 [DEBUG] [Thread-191707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:31:41.863 [INFO] [Thread-191707] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:31:41.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:31:42.461 [DEBUG] [Thread-191707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:31:42.461 [DEBUG] [Thread-191707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:31:42.462 [DEBUG] [Thread-191707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:31:42.502 [DEBUG] [Thread-191707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:31:42.503 [DEBUG] [Thread-191707] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:31:42.506 [DEBUG] [Thread-191707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:31:42.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:31:42.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:31:42.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:31:42.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:31:42.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:31:42.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:31:42.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:31:42.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:31:42.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:31:42.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.771642 -999.00  +11.20  34.80     58   +3.40 1 1 2 1 1     0    0 7.30 -25.86 ZNESW 25.0 34.8 163.4 40.1 11.7 -25.6 11.5 -24.4 11.3 -23.6 11.7 -24.8
2026-02-14T20:31:42.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:31:42.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:31:42.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.771642
2026-02-14T20:31:42.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:31:42.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:31:42.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:31:42.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:31:42.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:31:42.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:31:33', tmtdew=9.12, humidity=53.33, cloud=0.0, wind=41.22, temperature=11.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:31:09.869', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.04875000000000007, -0.06324999999999825, -0.01950000000000074, -0.10749999999999993, -0.018749999999998934, -0.034000000000000696, -0.0022500000000000853, 0.0, -0.026999999999999247, -0.01675000000000182, -0.02800000000000047, 0.07699999999999996, 0.02824999999999811, -0.051000000000000156, -0.0990000000000002, -0.028750000000000497, -0.03449999999999953, -0.07249999999999979, -0.08425000000000082, 0.005999999999998451, 0.005749999999999034, 0.020250000000000767, -0.03325000000000067, -0.006000000000000227, -0.008000000000000895, -0.02725000000000044, -0.02149999999999963, 0.06099999999999994, 0.038000000000000256, 0.0020000000000024443, 0.0010000000000012221, 0.0337499999999995], zp_timestamp='2026-02-14T18:27:00')
2026-02-14T20:31:42.524 [DEBUG] [Thread-191707] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:31:42.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-14T20:31:42.619 [DEBUG] [Thread-191710] [transport.py] [_log()] starting thread (client mode): 0xa57d5c30
2026-02-14T20:31:42.619 [DEBUG] [Thread-191710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:31:42.634 [DEBUG] [Thread-191710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:31:42.634 [INFO] [Thread-191710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:31:42.641 [DEBUG] [Thread-191710] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:31:42.641 [DEBUG] [Thread-191710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:31:42.641 [DEBUG] [Thread-191710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:31:42.641 [DEBUG] [Thread-191710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:31:42.641 [DEBUG] [Thread-191710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:31:42.641 [DEBUG] [Thread-191710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:31:42.642 [DEBUG] [Thread-191710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:31:42.642 [DEBUG] [Thread-191710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:31:42.642 [DEBUG] [Thread-191710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:31:42.642 [DEBUG] [Thread-191710] [transport.py] [_log()] client lang: <none>
2026-02-14T20:31:42.642 [DEBUG] [Thread-191710] [transport.py] [_log()] server lang: <none>
2026-02-14T20:31:42.642 [DEBUG] [Thread-191710] [transport.py] [_log()] kex follows: False
2026-02-14T20:31:42.642 [DEBUG] [Thread-191710] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:31:42.642 [DEBUG] [Thread-191710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:31:42.642 [DEBUG] [Thread-191710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:31:42.642 [DEBUG] [Thread-191710] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:31:42.642 [DEBUG] [Thread-191710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:31:42.642 [DEBUG] [Thread-191710] [transport.py] [_log()] Compression: none
2026-02-14T20:31:42.642 [DEBUG] [Thread-191710] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:31:42.697 [DEBUG] [Thread-191710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:31:42.697 [DEBUG] [Thread-191710] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:31:42.697 [DEBUG] [Thread-191710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:31:42.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:31:42.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:31:42.755 [DEBUG] [Thread-191710] [transport.py] [_log()] userauth is OK
2026-02-14T20:31:42.755 [DEBUG] [Thread-191710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:31:42.755 [DEBUG] [Thread-191710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:31:42.755 [DEBUG] [Thread-191710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:31:42.755 [DEBUG] [Thread-191710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:31:42.768 [INFO] [Thread-191710] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:31:42.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-14T20:31:42.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:31:42.837 [DEBUG] [Thread-191712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:31:43.565 [DEBUG] [Thread-191710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:31:43.565 [DEBUG] [Thread-191710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:31:43.613 [DEBUG] [Thread-191710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:31:43.613 [DEBUG] [Thread-191710] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:31:43.623 [DEBUG] [Thread-191710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:31:43.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:31:43.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-14T20:31:43.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-14T20:31:43.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:31:43.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:31:43.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:31:43.659 [DEBUG] [Thread-191710] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:31:49.233 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:31:49.875 [DEBUG] [Thread-191713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:31:58.139 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:32:02.243 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:32:04.927 [DEBUG] [Thread-191714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:32:13.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:32:13.682 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:32:13.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-14T20:32:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 31, 33), 9.12, 53.33, 0.0, 41.22, 11.32, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:32:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:31:33
2026-02-14T20:32:16.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:32:16.308 [DEBUG] [Thread-191715] [transport.py] [_log()] starting thread (client mode): 0xa57e13c0
2026-02-14T20:32:16.308 [DEBUG] [Thread-191715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:32:16.329 [DEBUG] [Thread-191715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:32:16.329 [INFO] [Thread-191715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:32:16.332 [DEBUG] [Thread-191715] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:32:16.332 [DEBUG] [Thread-191715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:32:16.332 [DEBUG] [Thread-191715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:32:16.332 [DEBUG] [Thread-191715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:32:16.332 [DEBUG] [Thread-191715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:32:16.332 [DEBUG] [Thread-191715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:32:16.332 [DEBUG] [Thread-191715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:32:16.332 [DEBUG] [Thread-191715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:32:16.332 [DEBUG] [Thread-191715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:32:16.332 [DEBUG] [Thread-191715] [transport.py] [_log()] client lang: <none>
2026-02-14T20:32:16.332 [DEBUG] [Thread-191715] [transport.py] [_log()] server lang: <none>
2026-02-14T20:32:16.332 [DEBUG] [Thread-191715] [transport.py] [_log()] kex follows: False
2026-02-14T20:32:16.332 [DEBUG] [Thread-191715] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:32:16.332 [DEBUG] [Thread-191715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:32:16.332 [DEBUG] [Thread-191715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:32:16.332 [DEBUG] [Thread-191715] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:32:16.332 [DEBUG] [Thread-191715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:32:16.332 [DEBUG] [Thread-191715] [transport.py] [_log()] Compression: none
2026-02-14T20:32:16.332 [DEBUG] [Thread-191715] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:32:16.350 [DEBUG] [Thread-191715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:32:16.350 [DEBUG] [Thread-191715] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:32:16.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:32:16.351 [DEBUG] [Thread-191715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:32:16.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:32:16.353 [DEBUG] [Thread-191715] [transport.py] [_log()] userauth is OK
2026-02-14T20:32:16.353 [DEBUG] [Thread-191715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:32:16.354 [DEBUG] [Thread-191715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:32:16.354 [DEBUG] [Thread-191715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:32:16.354 [DEBUG] [Thread-191715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:32:16.372 [INFO] [Thread-191715] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:32:16.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:32:17.011 [DEBUG] [Thread-191715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:32:17.011 [DEBUG] [Thread-191715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:32:17.011 [DEBUG] [Thread-191715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:32:17.052 [DEBUG] [Thread-191715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:32:17.052 [DEBUG] [Thread-191715] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:32:17.055 [DEBUG] [Thread-191715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:32:17.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:32:17.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:32:17.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:32:17.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:32:17.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:32:17.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:32:17.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:32:17.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:32:17.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:32:17.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.771989 -999.00  +11.20  26.68     58   +3.40 1 1 1 1 1     0    0 7.23 -24.13 ZNESW 32.0 26.7 157.4 38.9 11.6 -25.6 11.5 -24.6 11.3 -23.5 11.7 -24.8
2026-02-14T20:32:17.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:32:17.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:32:17.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.771989
2026-02-14T20:32:17.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:32:17.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:32:17.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:32:17.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:32:17.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:32:17.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:31:33', tmtdew=9.12, humidity=53.33, cloud=0.0, wind=41.22, temperature=11.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:31:39.850', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.017250000000000654, 0.0182500000000001, 0.005499999999999616, -0.02549999999999919, 0.03675000000000139, -0.028999999999999915, 0.009250000000001535, 0.045499999999998764, 0.009000000000000341, 0.00024999999999941735, -0.0065000000000008384, 0.06550000000000011, 0.06675000000000075, 0.004999999999999005, -0.03200000000000003, 0.05075000000000074, 0.026500000000000412, -0.014000000000001123, -0.05975000000000108, 0.06399999999999828, 0.027749999999999275, 0.0182500000000001, -0.005250000000000199, 0.005999999999998451, -0.010499999999998622, -0.021250000000000213, -0.01649999999999885, 0.10299999999999976, 0.06099999999999994, 0.027000000000001023, 0.025500000000000966, 0.053249999999998465], zp_timestamp='2026-02-14T18:30:00')
2026-02-14T20:32:17.067 [DEBUG] [Thread-191715] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:32:17.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-14T20:32:17.150 [DEBUG] [Thread-191718] [transport.py] [_log()] starting thread (client mode): 0xa5772a40
2026-02-14T20:32:17.150 [DEBUG] [Thread-191718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:32:17.163 [DEBUG] [Thread-191718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:32:17.164 [INFO] [Thread-191718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:32:17.171 [DEBUG] [Thread-191718] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:32:17.172 [DEBUG] [Thread-191718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:32:17.172 [DEBUG] [Thread-191718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:32:17.172 [DEBUG] [Thread-191718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:32:17.172 [DEBUG] [Thread-191718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:32:17.172 [DEBUG] [Thread-191718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:32:17.172 [DEBUG] [Thread-191718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:32:17.172 [DEBUG] [Thread-191718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:32:17.172 [DEBUG] [Thread-191718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:32:17.172 [DEBUG] [Thread-191718] [transport.py] [_log()] client lang: <none>
2026-02-14T20:32:17.172 [DEBUG] [Thread-191718] [transport.py] [_log()] server lang: <none>
2026-02-14T20:32:17.172 [DEBUG] [Thread-191718] [transport.py] [_log()] kex follows: False
2026-02-14T20:32:17.172 [DEBUG] [Thread-191718] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:32:17.172 [DEBUG] [Thread-191718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:32:17.172 [DEBUG] [Thread-191718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:32:17.173 [DEBUG] [Thread-191718] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:32:17.173 [DEBUG] [Thread-191718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:32:17.173 [DEBUG] [Thread-191718] [transport.py] [_log()] Compression: none
2026-02-14T20:32:17.173 [DEBUG] [Thread-191718] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:32:17.230 [DEBUG] [Thread-191718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:32:17.231 [DEBUG] [Thread-191718] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:32:17.231 [DEBUG] [Thread-191718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:32:17.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:32:17.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:32:17.287 [DEBUG] [Thread-191718] [transport.py] [_log()] userauth is OK
2026-02-14T20:32:17.287 [DEBUG] [Thread-191718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:32:17.287 [DEBUG] [Thread-191718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:32:17.287 [DEBUG] [Thread-191718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:32:17.288 [DEBUG] [Thread-191718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:32:17.306 [INFO] [Thread-191718] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:32:17.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-14T20:32:17.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:32:18.132 [DEBUG] [Thread-191718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:32:18.132 [DEBUG] [Thread-191718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:32:18.180 [DEBUG] [Thread-191718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:32:18.181 [DEBUG] [Thread-191718] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:32:18.189 [DEBUG] [Thread-191718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:32:18.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:32:18.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:32:18.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:32:18.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:32:18.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:32:18.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:32:18.226 [DEBUG] [Thread-191718] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:32:19.965 [DEBUG] [Thread-191720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:32:31.737 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:32:31.738 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:32:35.026 [DEBUG] [Thread-191721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:32:42.896 [DEBUG] [Thread-191722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:32:43.581 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:32:48.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:32:48.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:32:48.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-14T20:32:50.061 [DEBUG] [Thread-191723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:32:50.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 32, 8), 9.11, 53.34, 0.0, 38.06, 11.3, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:32:50.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:32:08
2026-02-14T20:32:50.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:32:50.825 [DEBUG] [Thread-191724] [transport.py] [_log()] starting thread (client mode): 0xa57e0ca0
2026-02-14T20:32:50.825 [DEBUG] [Thread-191724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:32:50.844 [DEBUG] [Thread-191724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:32:50.844 [INFO] [Thread-191724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:32:50.847 [DEBUG] [Thread-191724] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:32:50.847 [DEBUG] [Thread-191724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:32:50.847 [DEBUG] [Thread-191724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:32:50.847 [DEBUG] [Thread-191724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:32:50.847 [DEBUG] [Thread-191724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:32:50.847 [DEBUG] [Thread-191724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:32:50.848 [DEBUG] [Thread-191724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:32:50.848 [DEBUG] [Thread-191724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:32:50.848 [DEBUG] [Thread-191724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:32:50.848 [DEBUG] [Thread-191724] [transport.py] [_log()] client lang: <none>
2026-02-14T20:32:50.848 [DEBUG] [Thread-191724] [transport.py] [_log()] server lang: <none>
2026-02-14T20:32:50.848 [DEBUG] [Thread-191724] [transport.py] [_log()] kex follows: False
2026-02-14T20:32:50.848 [DEBUG] [Thread-191724] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:32:50.848 [DEBUG] [Thread-191724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:32:50.848 [DEBUG] [Thread-191724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:32:50.848 [DEBUG] [Thread-191724] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:32:50.848 [DEBUG] [Thread-191724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:32:50.848 [DEBUG] [Thread-191724] [transport.py] [_log()] Compression: none
2026-02-14T20:32:50.848 [DEBUG] [Thread-191724] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:32:50.863 [DEBUG] [Thread-191724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:32:50.863 [DEBUG] [Thread-191724] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:32:50.863 [DEBUG] [Thread-191724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:32:50.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:32:50.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:32:50.864 [DEBUG] [Thread-191724] [transport.py] [_log()] userauth is OK
2026-02-14T20:32:50.864 [DEBUG] [Thread-191724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:32:50.864 [DEBUG] [Thread-191724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:32:50.864 [DEBUG] [Thread-191724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:32:50.864 [DEBUG] [Thread-191724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:32:50.882 [INFO] [Thread-191724] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:32:50.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:32:51.516 [DEBUG] [Thread-191724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:32:51.516 [DEBUG] [Thread-191724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:32:51.516 [DEBUG] [Thread-191724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:32:51.557 [DEBUG] [Thread-191724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:32:51.557 [DEBUG] [Thread-191724] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:32:51.559 [DEBUG] [Thread-191724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:32:51.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:32:51.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:32:51.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:32:51.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:32:51.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:32:51.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:32:51.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:32:51.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:32:51.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:32:51.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.772336 -999.00  +11.20  29.98     58   +3.40 1 1 1 1 1     0    0 7.35 -22.21 ZNESW 29.4 30.0 172.0 38.7 11.6 -25.3 11.4 -24.5 11.3 -23.6 11.6 -24.4
2026-02-14T20:32:51.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:32:51.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:32:51.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.772336
2026-02-14T20:32:51.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:32:51.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:32:51.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:32:51.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:32:51.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:32:51.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:32:08', tmtdew=9.11, humidity=53.34, cloud=0.0, wind=38.06, temperature=11.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:32:09.830', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.017250000000000654, 0.0182500000000001, 0.005499999999999616, -0.02549999999999919, 0.03675000000000139, -0.028999999999999915, 0.009250000000001535, 0.045499999999998764, 0.009000000000000341, 0.00024999999999941735, -0.0065000000000008384, 0.06550000000000011, 0.06675000000000075, 0.004999999999999005, -0.03200000000000003, 0.05075000000000074, 0.026500000000000412, -0.014000000000001123, -0.05975000000000108, 0.06399999999999828, 0.027749999999999275, 0.0182500000000001, -0.005250000000000199, 0.005999999999998451, -0.010499999999998622, -0.021250000000000213, -0.01649999999999885, 0.10299999999999976, 0.06099999999999994, 0.027000000000001023, 0.025500000000000966, 0.053249999999998465], zp_timestamp='2026-02-14T18:30:00')
2026-02-14T20:32:51.578 [DEBUG] [Thread-191724] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:32:51.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-14T20:32:51.679 [DEBUG] [Thread-191727] [transport.py] [_log()] starting thread (client mode): 0xa5773ee0
2026-02-14T20:32:51.679 [DEBUG] [Thread-191727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:32:51.693 [DEBUG] [Thread-191727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:32:51.693 [INFO] [Thread-191727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:32:51.701 [DEBUG] [Thread-191727] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:32:51.701 [DEBUG] [Thread-191727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:32:51.701 [DEBUG] [Thread-191727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:32:51.701 [DEBUG] [Thread-191727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:32:51.701 [DEBUG] [Thread-191727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:32:51.701 [DEBUG] [Thread-191727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:32:51.701 [DEBUG] [Thread-191727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:32:51.701 [DEBUG] [Thread-191727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:32:51.701 [DEBUG] [Thread-191727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:32:51.702 [DEBUG] [Thread-191727] [transport.py] [_log()] client lang: <none>
2026-02-14T20:32:51.702 [DEBUG] [Thread-191727] [transport.py] [_log()] server lang: <none>
2026-02-14T20:32:51.702 [DEBUG] [Thread-191727] [transport.py] [_log()] kex follows: False
2026-02-14T20:32:51.702 [DEBUG] [Thread-191727] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:32:51.702 [DEBUG] [Thread-191727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:32:51.702 [DEBUG] [Thread-191727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:32:51.702 [DEBUG] [Thread-191727] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:32:51.702 [DEBUG] [Thread-191727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:32:51.702 [DEBUG] [Thread-191727] [transport.py] [_log()] Compression: none
2026-02-14T20:32:51.702 [DEBUG] [Thread-191727] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:32:51.760 [DEBUG] [Thread-191727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:32:51.760 [DEBUG] [Thread-191727] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:32:51.761 [DEBUG] [Thread-191727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:32:51.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:32:51.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:32:51.814 [DEBUG] [Thread-191727] [transport.py] [_log()] userauth is OK
2026-02-14T20:32:51.815 [DEBUG] [Thread-191727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:32:51.815 [DEBUG] [Thread-191727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:32:51.815 [DEBUG] [Thread-191727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:32:51.815 [DEBUG] [Thread-191727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:32:51.837 [INFO] [Thread-191727] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:32:51.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-14T20:32:51.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:32:52.651 [DEBUG] [Thread-191727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:32:52.651 [DEBUG] [Thread-191727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:32:52.699 [DEBUG] [Thread-191727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:32:52.699 [DEBUG] [Thread-191727] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:32:52.708 [DEBUG] [Thread-191727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:32:52.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:32:52.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-14T20:32:52.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-14T20:32:52.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:32:52.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:32:52.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:32:52.742 [DEBUG] [Thread-191727] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:33:05.096 [DEBUG] [Thread-191729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:33:20.146 [DEBUG] [Thread-191730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:33:22.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:33:22.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:33:22.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:33:24.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 32, 43), 9.11, 53.34, 0.0, 37.53, 11.3, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:33:24.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:32:43
2026-02-14T20:33:24.713 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:33:25.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:33:25.163 [DEBUG] [Thread-191731] [transport.py] [_log()] starting thread (client mode): 0xa5742830
2026-02-14T20:33:25.163 [DEBUG] [Thread-191731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:33:25.183 [DEBUG] [Thread-191731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:33:25.183 [INFO] [Thread-191731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:33:25.186 [DEBUG] [Thread-191731] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:33:25.186 [DEBUG] [Thread-191731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:33:25.187 [DEBUG] [Thread-191731] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:33:25.187 [DEBUG] [Thread-191731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:33:25.187 [DEBUG] [Thread-191731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:33:25.187 [DEBUG] [Thread-191731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:33:25.187 [DEBUG] [Thread-191731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:33:25.187 [DEBUG] [Thread-191731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:33:25.187 [DEBUG] [Thread-191731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:33:25.187 [DEBUG] [Thread-191731] [transport.py] [_log()] client lang: <none>
2026-02-14T20:33:25.187 [DEBUG] [Thread-191731] [transport.py] [_log()] server lang: <none>
2026-02-14T20:33:25.187 [DEBUG] [Thread-191731] [transport.py] [_log()] kex follows: False
2026-02-14T20:33:25.187 [DEBUG] [Thread-191731] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:33:25.187 [DEBUG] [Thread-191731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:33:25.187 [DEBUG] [Thread-191731] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:33:25.187 [DEBUG] [Thread-191731] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:33:25.187 [DEBUG] [Thread-191731] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:33:25.187 [DEBUG] [Thread-191731] [transport.py] [_log()] Compression: none
2026-02-14T20:33:25.187 [DEBUG] [Thread-191731] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:33:25.205 [DEBUG] [Thread-191731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:33:25.205 [DEBUG] [Thread-191731] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:33:25.205 [DEBUG] [Thread-191731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:33:25.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:33:25.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:33:25.249 [DEBUG] [Thread-191731] [transport.py] [_log()] userauth is OK
2026-02-14T20:33:25.249 [DEBUG] [Thread-191731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:33:25.249 [DEBUG] [Thread-191731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:33:25.249 [DEBUG] [Thread-191731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:33:25.249 [DEBUG] [Thread-191731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:33:25.281 [INFO] [Thread-191731] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:33:25.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:33:25.872 [DEBUG] [Thread-191731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:33:25.873 [DEBUG] [Thread-191731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:33:25.873 [DEBUG] [Thread-191731] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:33:25.913 [DEBUG] [Thread-191731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:33:25.914 [DEBUG] [Thread-191731] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:33:25.917 [DEBUG] [Thread-191731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:33:25.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:33:25.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:33:25.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:33:25.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:33:25.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:33:25.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:33:25.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:33:25.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:33:25.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:33:25.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.772683 -999.00  +11.20  22.33     58   +3.40 1 1 1 1 1     0    0 7.38 -22.39 ZNESW 23.9 22.3 171.4 34.0 11.7 -25.3 11.5 -24.6 11.3 -23.6 11.6 -24.6
2026-02-14T20:33:25.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:33:25.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:33:25.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.772683
2026-02-14T20:33:25.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:33:25.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:33:25.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:33:25.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:33:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:33:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:32:43', tmtdew=9.11, humidity=53.34, cloud=0.0, wind=37.53, temperature=11.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:32:39.811', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.017250000000000654, 0.0182500000000001, 0.005499999999999616, -0.02549999999999919, 0.03675000000000139, -0.028999999999999915, 0.009250000000001535, 0.045499999999998764, 0.009000000000000341, 0.00024999999999941735, -0.0065000000000008384, 0.06550000000000011, 0.06675000000000075, 0.004999999999999005, -0.03200000000000003, 0.05075000000000074, 0.026500000000000412, -0.014000000000001123, -0.05975000000000108, 0.06399999999999828, 0.027749999999999275, 0.0182500000000001, -0.005250000000000199, 0.005999999999998451, -0.010499999999998622, -0.021250000000000213, -0.01649999999999885, 0.10299999999999976, 0.06099999999999994, 0.027000000000001023, 0.025500000000000966, 0.053249999999998465], zp_timestamp='2026-02-14T18:30:00')
2026-02-14T20:33:25.944 [DEBUG] [Thread-191731] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:33:26.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-14T20:33:26.037 [DEBUG] [Thread-191734] [transport.py] [_log()] starting thread (client mode): 0xa5742e60
2026-02-14T20:33:26.037 [DEBUG] [Thread-191734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:33:26.054 [DEBUG] [Thread-191734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:33:26.054 [INFO] [Thread-191734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:33:26.061 [DEBUG] [Thread-191734] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:33:26.062 [DEBUG] [Thread-191734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:33:26.062 [DEBUG] [Thread-191734] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:33:26.062 [DEBUG] [Thread-191734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:33:26.062 [DEBUG] [Thread-191734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:33:26.062 [DEBUG] [Thread-191734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:33:26.062 [DEBUG] [Thread-191734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:33:26.063 [DEBUG] [Thread-191734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:33:26.063 [DEBUG] [Thread-191734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:33:26.063 [DEBUG] [Thread-191734] [transport.py] [_log()] client lang: <none>
2026-02-14T20:33:26.063 [DEBUG] [Thread-191734] [transport.py] [_log()] server lang: <none>
2026-02-14T20:33:26.063 [DEBUG] [Thread-191734] [transport.py] [_log()] kex follows: False
2026-02-14T20:33:26.063 [DEBUG] [Thread-191734] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:33:26.063 [DEBUG] [Thread-191734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:33:26.063 [DEBUG] [Thread-191734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:33:26.064 [DEBUG] [Thread-191734] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:33:26.064 [DEBUG] [Thread-191734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:33:26.064 [DEBUG] [Thread-191734] [transport.py] [_log()] Compression: none
2026-02-14T20:33:26.064 [DEBUG] [Thread-191734] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:33:26.120 [DEBUG] [Thread-191734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:33:26.120 [DEBUG] [Thread-191734] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:33:26.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:33:26.121 [DEBUG] [Thread-191734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:33:26.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:33:26.175 [DEBUG] [Thread-191734] [transport.py] [_log()] userauth is OK
2026-02-14T20:33:26.175 [DEBUG] [Thread-191734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:33:26.175 [DEBUG] [Thread-191734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:33:26.175 [DEBUG] [Thread-191734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:33:26.175 [DEBUG] [Thread-191734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:33:26.198 [INFO] [Thread-191734] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:33:26.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-14T20:33:26.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:33:27.077 [DEBUG] [Thread-191734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:33:27.077 [DEBUG] [Thread-191734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:33:27.125 [DEBUG] [Thread-191734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:33:27.125 [DEBUG] [Thread-191734] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:33:27.135 [DEBUG] [Thread-191734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:33:27.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:33:27.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:33:27.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-14T20:33:27.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:33:27.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:33:27.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:33:27.172 [DEBUG] [Thread-191734] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:33:31.938 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:33:31.939 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:33:33.553 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:33:35.192 [DEBUG] [Thread-191736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:33:37.640 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:33:42.971 [DEBUG] [Thread-191737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:33:50.255 [DEBUG] [Thread-191738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:33:57.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:33:57.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:33:57.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-14T20:33:59.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 33, 19), 9.11, 53.38, 0.0, 41.37, 11.32, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:33:59.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:33:19
2026-02-14T20:33:59.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:33:59.879 [DEBUG] [Thread-191739] [transport.py] [_log()] starting thread (client mode): 0xa5743250
2026-02-14T20:33:59.879 [DEBUG] [Thread-191739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:33:59.899 [DEBUG] [Thread-191739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:33:59.899 [INFO] [Thread-191739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:33:59.902 [DEBUG] [Thread-191739] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:33:59.902 [DEBUG] [Thread-191739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:33:59.902 [DEBUG] [Thread-191739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:33:59.902 [DEBUG] [Thread-191739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:33:59.902 [DEBUG] [Thread-191739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:33:59.903 [DEBUG] [Thread-191739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:33:59.903 [DEBUG] [Thread-191739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:33:59.903 [DEBUG] [Thread-191739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:33:59.903 [DEBUG] [Thread-191739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:33:59.903 [DEBUG] [Thread-191739] [transport.py] [_log()] client lang: <none>
2026-02-14T20:33:59.903 [DEBUG] [Thread-191739] [transport.py] [_log()] server lang: <none>
2026-02-14T20:33:59.903 [DEBUG] [Thread-191739] [transport.py] [_log()] kex follows: False
2026-02-14T20:33:59.903 [DEBUG] [Thread-191739] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:33:59.903 [DEBUG] [Thread-191739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:33:59.903 [DEBUG] [Thread-191739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:33:59.903 [DEBUG] [Thread-191739] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:33:59.903 [DEBUG] [Thread-191739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:33:59.904 [DEBUG] [Thread-191739] [transport.py] [_log()] Compression: none
2026-02-14T20:33:59.904 [DEBUG] [Thread-191739] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:33:59.923 [DEBUG] [Thread-191739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:33:59.924 [DEBUG] [Thread-191739] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:33:59.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:33:59.925 [DEBUG] [Thread-191739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:33:59.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:33:59.926 [DEBUG] [Thread-191739] [transport.py] [_log()] userauth is OK
2026-02-14T20:33:59.927 [DEBUG] [Thread-191739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:33:59.927 [DEBUG] [Thread-191739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:33:59.927 [DEBUG] [Thread-191739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:33:59.927 [DEBUG] [Thread-191739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:33:59.950 [INFO] [Thread-191739] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:33:59.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:34:00.565 [DEBUG] [Thread-191739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:34:00.565 [DEBUG] [Thread-191739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:34:00.566 [DEBUG] [Thread-191739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:34:00.606 [DEBUG] [Thread-191739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:34:00.606 [DEBUG] [Thread-191739] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:34:00.610 [DEBUG] [Thread-191739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:34:00.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:34:00.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:34:00.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:34:00.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:34:00.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:34:00.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:34:00.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:34:00.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:34:00.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:34:00.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.773378 -999.00  +11.10  30.65     59   +3.40 1 1 2 1 1     0    0 7.21 -22.80 ZNESW 35.1 30.6 164.4 37.7 11.6 -25.6 11.4 -24.6 11.2 -23.5 11.6 -24.8
2026-02-14T20:34:00.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:34:00.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:34:00.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.773378
2026-02-14T20:34:00.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:34:00.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:34:00.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:34:00.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:34:00.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:34:00.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:33:19', tmtdew=9.11, humidity=53.38, cloud=0.0, wind=41.37, temperature=11.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:33:39.859', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.017250000000000654, 0.0182500000000001, 0.005499999999999616, -0.02549999999999919, 0.03675000000000139, -0.028999999999999915, 0.009250000000001535, 0.045499999999998764, 0.009000000000000341, 0.00024999999999941735, -0.0065000000000008384, 0.06550000000000011, 0.06675000000000075, 0.004999999999999005, -0.03200000000000003, 0.05075000000000074, 0.026500000000000412, -0.014000000000001123, -0.05975000000000108, 0.06399999999999828, 0.027749999999999275, 0.0182500000000001, -0.005250000000000199, 0.005999999999998451, -0.010499999999998622, -0.021250000000000213, -0.01649999999999885, 0.10299999999999976, 0.06099999999999994, 0.027000000000001023, 0.025500000000000966, 0.053249999999998465], zp_timestamp='2026-02-14T18:30:00')
2026-02-14T20:34:00.638 [DEBUG] [Thread-191739] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:34:00.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-14T20:34:00.732 [DEBUG] [Thread-191742] [transport.py] [_log()] starting thread (client mode): 0xa57420e0
2026-02-14T20:34:00.732 [DEBUG] [Thread-191742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:34:00.747 [DEBUG] [Thread-191742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:34:00.748 [INFO] [Thread-191742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:34:00.755 [DEBUG] [Thread-191742] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:34:00.756 [DEBUG] [Thread-191742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:34:00.756 [DEBUG] [Thread-191742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:34:00.756 [DEBUG] [Thread-191742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:34:00.756 [DEBUG] [Thread-191742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:34:00.757 [DEBUG] [Thread-191742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:34:00.757 [DEBUG] [Thread-191742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:34:00.757 [DEBUG] [Thread-191742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:34:00.757 [DEBUG] [Thread-191742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:34:00.757 [DEBUG] [Thread-191742] [transport.py] [_log()] client lang: <none>
2026-02-14T20:34:00.757 [DEBUG] [Thread-191742] [transport.py] [_log()] server lang: <none>
2026-02-14T20:34:00.757 [DEBUG] [Thread-191742] [transport.py] [_log()] kex follows: False
2026-02-14T20:34:00.757 [DEBUG] [Thread-191742] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:34:00.757 [DEBUG] [Thread-191742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:34:00.757 [DEBUG] [Thread-191742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:34:00.757 [DEBUG] [Thread-191742] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:34:00.757 [DEBUG] [Thread-191742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:34:00.757 [DEBUG] [Thread-191742] [transport.py] [_log()] Compression: none
2026-02-14T20:34:00.757 [DEBUG] [Thread-191742] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:34:00.815 [DEBUG] [Thread-191742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:34:00.816 [DEBUG] [Thread-191742] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:34:00.816 [DEBUG] [Thread-191742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:34:00.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:34:00.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:34:00.871 [DEBUG] [Thread-191742] [transport.py] [_log()] userauth is OK
2026-02-14T20:34:00.871 [DEBUG] [Thread-191742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:34:00.872 [DEBUG] [Thread-191742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:34:00.872 [DEBUG] [Thread-191742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:34:00.872 [DEBUG] [Thread-191742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:34:00.895 [INFO] [Thread-191742] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:34:00.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T20:34:00.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:34:01.723 [DEBUG] [Thread-191742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:34:01.723 [DEBUG] [Thread-191742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:34:01.771 [DEBUG] [Thread-191742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:34:01.771 [DEBUG] [Thread-191742] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:34:01.780 [DEBUG] [Thread-191742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:34:01.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:34:01.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-14T20:34:01.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-14T20:34:01.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:34:01.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:34:01.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:34:01.811 [DEBUG] [Thread-191742] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:34:05.293 [DEBUG] [Thread-191744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:34:20.344 [DEBUG] [Thread-191745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:34:31.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:34:31.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:34:31.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-14T20:34:32.150 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:34:32.151 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:34:34.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 33, 54), 9.04, 53.44, 0.0, 32.06, 11.28, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:34:34.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:33:54
2026-02-14T20:34:34.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:34:35.015 [DEBUG] [Thread-191746] [transport.py] [_log()] starting thread (client mode): 0xa57e3250
2026-02-14T20:34:35.015 [DEBUG] [Thread-191746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:34:35.034 [DEBUG] [Thread-191746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:34:35.034 [INFO] [Thread-191746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:34:35.037 [DEBUG] [Thread-191746] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:34:35.038 [DEBUG] [Thread-191746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:34:35.038 [DEBUG] [Thread-191746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:34:35.038 [DEBUG] [Thread-191746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:34:35.038 [DEBUG] [Thread-191746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:34:35.038 [DEBUG] [Thread-191746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:34:35.038 [DEBUG] [Thread-191746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:34:35.038 [DEBUG] [Thread-191746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:34:35.038 [DEBUG] [Thread-191746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:34:35.038 [DEBUG] [Thread-191746] [transport.py] [_log()] client lang: <none>
2026-02-14T20:34:35.038 [DEBUG] [Thread-191746] [transport.py] [_log()] server lang: <none>
2026-02-14T20:34:35.038 [DEBUG] [Thread-191746] [transport.py] [_log()] kex follows: False
2026-02-14T20:34:35.038 [DEBUG] [Thread-191746] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:34:35.038 [DEBUG] [Thread-191746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:34:35.038 [DEBUG] [Thread-191746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:34:35.038 [DEBUG] [Thread-191746] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:34:35.038 [DEBUG] [Thread-191746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:34:35.038 [DEBUG] [Thread-191746] [transport.py] [_log()] Compression: none
2026-02-14T20:34:35.038 [DEBUG] [Thread-191746] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:34:35.055 [DEBUG] [Thread-191746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:34:35.055 [DEBUG] [Thread-191746] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:34:35.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:34:35.056 [DEBUG] [Thread-191746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:34:35.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:34:35.056 [DEBUG] [Thread-191746] [transport.py] [_log()] userauth is OK
2026-02-14T20:34:35.056 [DEBUG] [Thread-191746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:34:35.056 [DEBUG] [Thread-191746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:34:35.056 [DEBUG] [Thread-191746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:34:35.056 [DEBUG] [Thread-191746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:34:35.067 [INFO] [Thread-191746] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:34:35.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:34:35.379 [DEBUG] [Thread-191748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:34:35.705 [DEBUG] [Thread-191746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:34:35.705 [DEBUG] [Thread-191746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:34:35.705 [DEBUG] [Thread-191746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:34:35.747 [DEBUG] [Thread-191746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:34:35.747 [DEBUG] [Thread-191746] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:34:35.750 [DEBUG] [Thread-191746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:34:35.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:34:35.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:34:35.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:34:35.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:34:35.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:34:35.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:34:35.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:34:35.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:34:35.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:34:35.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.773725 -999.00  +11.10  24.59     59   +3.40 1 1 1 1 1     0    0 7.20 -22.85 ZNESW 27.2 24.6 170.4 42.9 11.6 -25.4 11.4 -24.5 11.2 -23.5 11.6 -24.7
2026-02-14T20:34:35.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:34:35.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:34:35.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.773725
2026-02-14T20:34:35.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:34:35.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:34:35.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:34:35.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:34:35.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:34:35.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:33:54', tmtdew=9.04, humidity=53.44, cloud=0.0, wind=32.06, temperature=11.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:34:09.840', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.017250000000000654, 0.0182500000000001, 0.005499999999999616, -0.02549999999999919, 0.03675000000000139, -0.028999999999999915, 0.009250000000001535, 0.045499999999998764, 0.009000000000000341, 0.00024999999999941735, -0.0065000000000008384, 0.06550000000000011, 0.06675000000000075, 0.004999999999999005, -0.03200000000000003, 0.05075000000000074, 0.026500000000000412, -0.014000000000001123, -0.05975000000000108, 0.06399999999999828, 0.027749999999999275, 0.0182500000000001, -0.005250000000000199, 0.005999999999998451, -0.010499999999998622, -0.021250000000000213, -0.01649999999999885, 0.10299999999999976, 0.06099999999999994, 0.027000000000001023, 0.025500000000000966, 0.053249999999998465], zp_timestamp='2026-02-14T18:30:00')
2026-02-14T20:34:35.777 [DEBUG] [Thread-191746] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:34:35.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-14T20:34:35.873 [DEBUG] [Thread-191750] [transport.py] [_log()] starting thread (client mode): 0xa57e2e30
2026-02-14T20:34:35.873 [DEBUG] [Thread-191750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:34:35.887 [DEBUG] [Thread-191750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:34:35.888 [INFO] [Thread-191750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:34:35.895 [DEBUG] [Thread-191750] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:34:35.896 [DEBUG] [Thread-191750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:34:35.896 [DEBUG] [Thread-191750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:34:35.896 [DEBUG] [Thread-191750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:34:35.896 [DEBUG] [Thread-191750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:34:35.896 [DEBUG] [Thread-191750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:34:35.896 [DEBUG] [Thread-191750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:34:35.896 [DEBUG] [Thread-191750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:34:35.896 [DEBUG] [Thread-191750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:34:35.896 [DEBUG] [Thread-191750] [transport.py] [_log()] client lang: <none>
2026-02-14T20:34:35.896 [DEBUG] [Thread-191750] [transport.py] [_log()] server lang: <none>
2026-02-14T20:34:35.896 [DEBUG] [Thread-191750] [transport.py] [_log()] kex follows: False
2026-02-14T20:34:35.896 [DEBUG] [Thread-191750] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:34:35.896 [DEBUG] [Thread-191750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:34:35.896 [DEBUG] [Thread-191750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:34:35.896 [DEBUG] [Thread-191750] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:34:35.896 [DEBUG] [Thread-191750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:34:35.896 [DEBUG] [Thread-191750] [transport.py] [_log()] Compression: none
2026-02-14T20:34:35.896 [DEBUG] [Thread-191750] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:34:35.955 [DEBUG] [Thread-191750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:34:35.956 [DEBUG] [Thread-191750] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:34:35.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:34:35.957 [DEBUG] [Thread-191750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:34:35.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:34:36.018 [DEBUG] [Thread-191750] [transport.py] [_log()] userauth is OK
2026-02-14T20:34:36.019 [DEBUG] [Thread-191750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:34:36.019 [DEBUG] [Thread-191750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:34:36.019 [DEBUG] [Thread-191750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:34:36.019 [DEBUG] [Thread-191750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:34:36.038 [INFO] [Thread-191750] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:34:36.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-14T20:34:36.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:34:36.866 [DEBUG] [Thread-191750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:34:36.867 [DEBUG] [Thread-191750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:34:36.914 [DEBUG] [Thread-191750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:34:36.915 [DEBUG] [Thread-191750] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:34:36.924 [DEBUG] [Thread-191750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:34:36.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:34:36.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-14T20:34:36.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:34:36.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:34:36.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:34:36.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:34:36.960 [DEBUG] [Thread-191750] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:34:43.039 [DEBUG] [Thread-191752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:34:50.413 [DEBUG] [Thread-191753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:35:00.375 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:35:05.463 [DEBUG] [Thread-191754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:35:06.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:35:06.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:35:06.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:35:09.062 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:35:09.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 34, 29), 9.05, 53.39, 0.0, 30.52, 11.23, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:35:09.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:34:29
2026-02-14T20:35:09.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:35:09.927 [DEBUG] [Thread-191755] [transport.py] [_log()] starting thread (client mode): 0xa5743460
2026-02-14T20:35:09.927 [DEBUG] [Thread-191755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:35:09.947 [DEBUG] [Thread-191755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:35:09.947 [INFO] [Thread-191755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:35:09.950 [DEBUG] [Thread-191755] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:35:09.950 [DEBUG] [Thread-191755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:35:09.950 [DEBUG] [Thread-191755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:35:09.950 [DEBUG] [Thread-191755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:35:09.950 [DEBUG] [Thread-191755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:35:09.950 [DEBUG] [Thread-191755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:35:09.950 [DEBUG] [Thread-191755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:35:09.950 [DEBUG] [Thread-191755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:35:09.950 [DEBUG] [Thread-191755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:35:09.950 [DEBUG] [Thread-191755] [transport.py] [_log()] client lang: <none>
2026-02-14T20:35:09.950 [DEBUG] [Thread-191755] [transport.py] [_log()] server lang: <none>
2026-02-14T20:35:09.950 [DEBUG] [Thread-191755] [transport.py] [_log()] kex follows: False
2026-02-14T20:35:09.951 [DEBUG] [Thread-191755] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:35:09.951 [DEBUG] [Thread-191755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:35:09.951 [DEBUG] [Thread-191755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:35:09.951 [DEBUG] [Thread-191755] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:35:09.951 [DEBUG] [Thread-191755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:35:09.951 [DEBUG] [Thread-191755] [transport.py] [_log()] Compression: none
2026-02-14T20:35:09.951 [DEBUG] [Thread-191755] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:35:09.967 [DEBUG] [Thread-191755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:35:09.967 [DEBUG] [Thread-191755] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:35:09.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:35:09.968 [DEBUG] [Thread-191755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:35:09.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:35:09.969 [DEBUG] [Thread-191755] [transport.py] [_log()] userauth is OK
2026-02-14T20:35:09.969 [DEBUG] [Thread-191755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:35:09.970 [DEBUG] [Thread-191755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:35:09.970 [DEBUG] [Thread-191755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:35:09.970 [DEBUG] [Thread-191755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:35:09.990 [INFO] [Thread-191755] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:35:09.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:35:10.578 [DEBUG] [Thread-191755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:35:10.579 [DEBUG] [Thread-191755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:35:10.579 [DEBUG] [Thread-191755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:35:10.620 [DEBUG] [Thread-191755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:35:10.620 [DEBUG] [Thread-191755] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:35:10.623 [DEBUG] [Thread-191755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:35:10.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:35:10.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:35:10.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:35:10.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:35:10.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:35:10.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:35:10.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:35:10.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:35:10.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:35:10.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.774072 -999.00  +11.10  29.62     59   +3.40 1 1 1 1 1     0    0 7.37 -23.10 ZNESW 26.2 29.6 170.0 41.0 11.6 -25.3 11.3 -24.5 11.2 -23.4 11.6 -24.7
2026-02-14T20:35:10.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:35:10.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:35:10.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.774072
2026-02-14T20:35:10.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:35:10.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:35:10.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:35:10.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:35:10.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:35:10.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:34:29', tmtdew=9.05, humidity=53.39, cloud=0.0, wind=30.52, temperature=11.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:34:39.821', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.017250000000000654, 0.0182500000000001, 0.005499999999999616, -0.02549999999999919, 0.03675000000000139, -0.028999999999999915, 0.009250000000001535, 0.045499999999998764, 0.009000000000000341, 0.00024999999999941735, -0.0065000000000008384, 0.06550000000000011, 0.06675000000000075, 0.004999999999999005, -0.03200000000000003, 0.05075000000000074, 0.026500000000000412, -0.014000000000001123, -0.05975000000000108, 0.06399999999999828, 0.027749999999999275, 0.0182500000000001, -0.005250000000000199, 0.005999999999998451, -0.010499999999998622, -0.021250000000000213, -0.01649999999999885, 0.10299999999999976, 0.06099999999999994, 0.027000000000001023, 0.025500000000000966, 0.053249999999998465], zp_timestamp='2026-02-14T18:33:00')
2026-02-14T20:35:10.648 [DEBUG] [Thread-191755] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:35:10.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-14T20:35:10.739 [DEBUG] [Thread-191758] [transport.py] [_log()] starting thread (client mode): 0xa5740820
2026-02-14T20:35:10.740 [DEBUG] [Thread-191758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:35:10.754 [DEBUG] [Thread-191758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:35:10.754 [INFO] [Thread-191758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:35:10.762 [DEBUG] [Thread-191758] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:35:10.762 [DEBUG] [Thread-191758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:35:10.762 [DEBUG] [Thread-191758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:35:10.762 [DEBUG] [Thread-191758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:35:10.762 [DEBUG] [Thread-191758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:35:10.762 [DEBUG] [Thread-191758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:35:10.762 [DEBUG] [Thread-191758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:35:10.762 [DEBUG] [Thread-191758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:35:10.762 [DEBUG] [Thread-191758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:35:10.762 [DEBUG] [Thread-191758] [transport.py] [_log()] client lang: <none>
2026-02-14T20:35:10.762 [DEBUG] [Thread-191758] [transport.py] [_log()] server lang: <none>
2026-02-14T20:35:10.762 [DEBUG] [Thread-191758] [transport.py] [_log()] kex follows: False
2026-02-14T20:35:10.762 [DEBUG] [Thread-191758] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:35:10.762 [DEBUG] [Thread-191758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:35:10.762 [DEBUG] [Thread-191758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:35:10.763 [DEBUG] [Thread-191758] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:35:10.763 [DEBUG] [Thread-191758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:35:10.763 [DEBUG] [Thread-191758] [transport.py] [_log()] Compression: none
2026-02-14T20:35:10.763 [DEBUG] [Thread-191758] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:35:10.823 [DEBUG] [Thread-191758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:35:10.824 [DEBUG] [Thread-191758] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:35:10.824 [DEBUG] [Thread-191758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:35:10.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:35:10.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:35:10.879 [DEBUG] [Thread-191758] [transport.py] [_log()] userauth is OK
2026-02-14T20:35:10.879 [DEBUG] [Thread-191758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:35:10.880 [DEBUG] [Thread-191758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:35:10.880 [DEBUG] [Thread-191758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:35:10.880 [DEBUG] [Thread-191758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:35:10.899 [INFO] [Thread-191758] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:35:10.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-14T20:35:10.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:35:11.740 [DEBUG] [Thread-191758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:35:11.741 [DEBUG] [Thread-191758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:35:11.788 [DEBUG] [Thread-191758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:35:11.788 [DEBUG] [Thread-191758] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:35:11.798 [DEBUG] [Thread-191758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:35:11.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:35:11.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-14T20:35:11.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-14T20:35:11.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:35:11.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:35:11.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:35:11.834 [DEBUG] [Thread-191758] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:35:13.155 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:35:20.500 [DEBUG] [Thread-191760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:35:32.350 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:35:32.351 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:35:35.556 [DEBUG] [Thread-191761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:35:41.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:35:41.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:35:41.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-14T20:35:43.107 [DEBUG] [Thread-191762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:35:43.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 35, 7), 9.04, 53.43, 0.0, 29.73, 11.24, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:35:43.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:35:07
2026-02-14T20:35:44.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:35:44.303 [DEBUG] [Thread-191763] [transport.py] [_log()] starting thread (client mode): 0xa5743250
2026-02-14T20:35:44.303 [DEBUG] [Thread-191763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:35:44.323 [DEBUG] [Thread-191763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:35:44.323 [INFO] [Thread-191763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:35:44.326 [DEBUG] [Thread-191763] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:35:44.326 [DEBUG] [Thread-191763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:35:44.326 [DEBUG] [Thread-191763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:35:44.326 [DEBUG] [Thread-191763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:35:44.326 [DEBUG] [Thread-191763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:35:44.326 [DEBUG] [Thread-191763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:35:44.327 [DEBUG] [Thread-191763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:35:44.327 [DEBUG] [Thread-191763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:35:44.327 [DEBUG] [Thread-191763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:35:44.327 [DEBUG] [Thread-191763] [transport.py] [_log()] client lang: <none>
2026-02-14T20:35:44.327 [DEBUG] [Thread-191763] [transport.py] [_log()] server lang: <none>
2026-02-14T20:35:44.327 [DEBUG] [Thread-191763] [transport.py] [_log()] kex follows: False
2026-02-14T20:35:44.327 [DEBUG] [Thread-191763] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:35:44.327 [DEBUG] [Thread-191763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:35:44.327 [DEBUG] [Thread-191763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:35:44.327 [DEBUG] [Thread-191763] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:35:44.327 [DEBUG] [Thread-191763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:35:44.327 [DEBUG] [Thread-191763] [transport.py] [_log()] Compression: none
2026-02-14T20:35:44.327 [DEBUG] [Thread-191763] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:35:44.343 [DEBUG] [Thread-191763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:35:44.344 [DEBUG] [Thread-191763] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:35:44.344 [DEBUG] [Thread-191763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:35:44.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:35:44.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:35:44.389 [DEBUG] [Thread-191763] [transport.py] [_log()] userauth is OK
2026-02-14T20:35:44.389 [DEBUG] [Thread-191763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:35:44.389 [DEBUG] [Thread-191763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:35:44.390 [DEBUG] [Thread-191763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:35:44.390 [DEBUG] [Thread-191763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:35:44.421 [INFO] [Thread-191763] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:35:44.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:35:45.063 [DEBUG] [Thread-191763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:35:45.063 [DEBUG] [Thread-191763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:35:45.064 [DEBUG] [Thread-191763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:35:45.105 [DEBUG] [Thread-191763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:35:45.105 [DEBUG] [Thread-191763] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:35:45.108 [DEBUG] [Thread-191763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:35:45.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:35:45.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:35:45.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:35:45.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:35:45.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:35:45.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:35:45.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:35:45.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:35:45.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:35:45.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.774420 -999.00  +11.10  25.83     59   +3.40 1 1 1 1 1     0    0 7.14 -24.58 ZNESW 21.7 25.8 172.0 37.4 11.6 -25.4 11.4 -24.4 11.2 -23.4 11.6 -24.8
2026-02-14T20:35:45.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:35:45.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:35:45.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.774420
2026-02-14T20:35:45.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:35:45.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:35:45.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:35:45.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:35:45.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:35:45.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:35:07', tmtdew=9.04, humidity=53.43, cloud=0.0, wind=29.73, temperature=11.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:35:09.888', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.017250000000000654, 0.0182500000000001, 0.005499999999999616, -0.02549999999999919, 0.03675000000000139, -0.028999999999999915, 0.009250000000001535, 0.045499999999998764, 0.009000000000000341, 0.00024999999999941735, -0.0065000000000008384, 0.06550000000000011, 0.06675000000000075, 0.004999999999999005, -0.03200000000000003, 0.05075000000000074, 0.026500000000000412, -0.014000000000001123, -0.05975000000000108, 0.06399999999999828, 0.027749999999999275, 0.0182500000000001, -0.005250000000000199, 0.005999999999998451, -0.010499999999998622, -0.021250000000000213, -0.01649999999999885, 0.10299999999999976, 0.06099999999999994, 0.027000000000001023, 0.025500000000000966, 0.053249999999998465], zp_timestamp='2026-02-14T18:33:00')
2026-02-14T20:35:45.135 [DEBUG] [Thread-191763] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:35:45.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-14T20:35:45.231 [DEBUG] [Thread-191766] [transport.py] [_log()] starting thread (client mode): 0xa5741ae0
2026-02-14T20:35:45.232 [DEBUG] [Thread-191766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:35:45.245 [DEBUG] [Thread-191766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:35:45.245 [INFO] [Thread-191766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:35:45.253 [DEBUG] [Thread-191766] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:35:45.254 [DEBUG] [Thread-191766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:35:45.254 [DEBUG] [Thread-191766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:35:45.254 [DEBUG] [Thread-191766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:35:45.254 [DEBUG] [Thread-191766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:35:45.254 [DEBUG] [Thread-191766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:35:45.255 [DEBUG] [Thread-191766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:35:45.255 [DEBUG] [Thread-191766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:35:45.255 [DEBUG] [Thread-191766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:35:45.255 [DEBUG] [Thread-191766] [transport.py] [_log()] client lang: <none>
2026-02-14T20:35:45.255 [DEBUG] [Thread-191766] [transport.py] [_log()] server lang: <none>
2026-02-14T20:35:45.255 [DEBUG] [Thread-191766] [transport.py] [_log()] kex follows: False
2026-02-14T20:35:45.255 [DEBUG] [Thread-191766] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:35:45.255 [DEBUG] [Thread-191766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:35:45.255 [DEBUG] [Thread-191766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:35:45.255 [DEBUG] [Thread-191766] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:35:45.255 [DEBUG] [Thread-191766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:35:45.255 [DEBUG] [Thread-191766] [transport.py] [_log()] Compression: none
2026-02-14T20:35:45.255 [DEBUG] [Thread-191766] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:35:45.311 [DEBUG] [Thread-191766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:35:45.312 [DEBUG] [Thread-191766] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:35:45.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:35:45.313 [DEBUG] [Thread-191766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:35:45.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:35:45.367 [DEBUG] [Thread-191766] [transport.py] [_log()] userauth is OK
2026-02-14T20:35:45.367 [DEBUG] [Thread-191766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:35:45.367 [DEBUG] [Thread-191766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:35:45.367 [DEBUG] [Thread-191766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:35:45.367 [DEBUG] [Thread-191766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:35:45.385 [INFO] [Thread-191766] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:35:45.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-14T20:35:45.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:35:46.198 [DEBUG] [Thread-191766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:35:46.198 [DEBUG] [Thread-191766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:35:46.246 [DEBUG] [Thread-191766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:35:46.247 [DEBUG] [Thread-191766] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:35:46.256 [DEBUG] [Thread-191766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:35:46.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:35:46.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-14T20:35:46.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-14T20:35:46.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:35:46.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:35:46.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:35:46.292 [DEBUG] [Thread-191766] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:35:50.591 [DEBUG] [Thread-191768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:36:05.646 [DEBUG] [Thread-191769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:36:16.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:36:16.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:36:16.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-14T20:36:18.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 35, 42), 9.09, 53.44, 0.0, 39.89, 11.22, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:36:18.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:35:42
2026-02-14T20:36:18.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:36:18.780 [DEBUG] [Thread-191770] [transport.py] [_log()] starting thread (client mode): 0xa5743790
2026-02-14T20:36:18.780 [DEBUG] [Thread-191770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:36:18.800 [DEBUG] [Thread-191770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:36:18.800 [INFO] [Thread-191770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:36:18.803 [DEBUG] [Thread-191770] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:36:18.803 [DEBUG] [Thread-191770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:36:18.803 [DEBUG] [Thread-191770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:36:18.803 [DEBUG] [Thread-191770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:36:18.803 [DEBUG] [Thread-191770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:36:18.803 [DEBUG] [Thread-191770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:36:18.803 [DEBUG] [Thread-191770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:36:18.804 [DEBUG] [Thread-191770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:36:18.804 [DEBUG] [Thread-191770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:36:18.804 [DEBUG] [Thread-191770] [transport.py] [_log()] client lang: <none>
2026-02-14T20:36:18.804 [DEBUG] [Thread-191770] [transport.py] [_log()] server lang: <none>
2026-02-14T20:36:18.804 [DEBUG] [Thread-191770] [transport.py] [_log()] kex follows: False
2026-02-14T20:36:18.804 [DEBUG] [Thread-191770] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:36:18.804 [DEBUG] [Thread-191770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:36:18.804 [DEBUG] [Thread-191770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:36:18.804 [DEBUG] [Thread-191770] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:36:18.804 [DEBUG] [Thread-191770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:36:18.804 [DEBUG] [Thread-191770] [transport.py] [_log()] Compression: none
2026-02-14T20:36:18.804 [DEBUG] [Thread-191770] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:36:18.821 [DEBUG] [Thread-191770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:36:18.822 [DEBUG] [Thread-191770] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:36:18.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:36:18.823 [DEBUG] [Thread-191770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:36:18.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:36:18.825 [DEBUG] [Thread-191770] [transport.py] [_log()] userauth is OK
2026-02-14T20:36:18.825 [DEBUG] [Thread-191770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:36:18.825 [DEBUG] [Thread-191770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:36:18.825 [DEBUG] [Thread-191770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:36:18.825 [DEBUG] [Thread-191770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:36:18.849 [INFO] [Thread-191770] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:36:18.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:36:19.478 [DEBUG] [Thread-191770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:36:19.478 [DEBUG] [Thread-191770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:36:19.478 [DEBUG] [Thread-191770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:36:19.519 [DEBUG] [Thread-191770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:36:19.520 [DEBUG] [Thread-191770] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:36:19.523 [DEBUG] [Thread-191770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:36:19.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:36:19.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:36:19.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:36:19.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:36:19.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:36:19.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:36:19.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:36:19.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:36:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:36:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.774767 -999.00  +11.10  28.84     59   +3.40 1 1 1 1 1     0    0 7.30 -23.03 ZNESW 30.6 28.8 166.8 35.5 11.6 -25.4 11.4 -24.4 11.2 -23.4 11.6 -24.8
2026-02-14T20:36:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:36:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:36:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.774767
2026-02-14T20:36:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:36:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:36:19.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:36:19.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:36:19.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:36:19.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:35:42', tmtdew=9.09, humidity=53.44, cloud=0.0, wind=39.89, temperature=11.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:35:39.869', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.017250000000000654, 0.0182500000000001, 0.005499999999999616, -0.02549999999999919, 0.03675000000000139, -0.028999999999999915, 0.009250000000001535, 0.045499999999998764, 0.009000000000000341, 0.00024999999999941735, -0.0065000000000008384, 0.06550000000000011, 0.06675000000000075, 0.004999999999999005, -0.03200000000000003, 0.05075000000000074, 0.026500000000000412, -0.014000000000001123, -0.05975000000000108, 0.06399999999999828, 0.027749999999999275, 0.0182500000000001, -0.005250000000000199, 0.005999999999998451, -0.010499999999998622, -0.021250000000000213, -0.01649999999999885, 0.10299999999999976, 0.06099999999999994, 0.027000000000001023, 0.025500000000000966, 0.053249999999998465], zp_timestamp='2026-02-14T18:33:00')
2026-02-14T20:36:19.549 [DEBUG] [Thread-191770] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:36:19.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-14T20:36:19.643 [DEBUG] [Thread-191773] [transport.py] [_log()] starting thread (client mode): 0xa57432e0
2026-02-14T20:36:19.644 [DEBUG] [Thread-191773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:36:19.658 [DEBUG] [Thread-191773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:36:19.658 [INFO] [Thread-191773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:36:19.666 [DEBUG] [Thread-191773] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:36:19.666 [DEBUG] [Thread-191773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:36:19.666 [DEBUG] [Thread-191773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:36:19.666 [DEBUG] [Thread-191773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:36:19.666 [DEBUG] [Thread-191773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:36:19.666 [DEBUG] [Thread-191773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:36:19.667 [DEBUG] [Thread-191773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:36:19.667 [DEBUG] [Thread-191773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:36:19.667 [DEBUG] [Thread-191773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:36:19.667 [DEBUG] [Thread-191773] [transport.py] [_log()] client lang: <none>
2026-02-14T20:36:19.667 [DEBUG] [Thread-191773] [transport.py] [_log()] server lang: <none>
2026-02-14T20:36:19.667 [DEBUG] [Thread-191773] [transport.py] [_log()] kex follows: False
2026-02-14T20:36:19.667 [DEBUG] [Thread-191773] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:36:19.667 [DEBUG] [Thread-191773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:36:19.667 [DEBUG] [Thread-191773] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:36:19.667 [DEBUG] [Thread-191773] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:36:19.667 [DEBUG] [Thread-191773] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:36:19.667 [DEBUG] [Thread-191773] [transport.py] [_log()] Compression: none
2026-02-14T20:36:19.667 [DEBUG] [Thread-191773] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:36:19.722 [DEBUG] [Thread-191773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:36:19.723 [DEBUG] [Thread-191773] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:36:19.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:36:19.724 [DEBUG] [Thread-191773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:36:19.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:36:19.779 [DEBUG] [Thread-191773] [transport.py] [_log()] userauth is OK
2026-02-14T20:36:19.779 [DEBUG] [Thread-191773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:36:19.779 [DEBUG] [Thread-191773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:36:19.779 [DEBUG] [Thread-191773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:36:19.779 [DEBUG] [Thread-191773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:36:19.797 [INFO] [Thread-191773] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:36:19.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-14T20:36:19.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:36:20.605 [DEBUG] [Thread-191773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:36:20.605 [DEBUG] [Thread-191773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:36:20.653 [DEBUG] [Thread-191773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:36:20.653 [DEBUG] [Thread-191773] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:36:20.665 [DEBUG] [Thread-191773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:36:20.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:36:20.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:36:20.686 [DEBUG] [Thread-191775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:36:20.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-14T20:36:20.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:36:20.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:36:20.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:36:20.708 [DEBUG] [Thread-191773] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:36:32.553 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:36:32.554 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:36:35.726 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:36:35.747 [DEBUG] [Thread-191776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:36:43.195 [DEBUG] [Thread-191777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:36:50.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:36:50.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:36:50.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-14T20:36:50.783 [DEBUG] [Thread-191778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:36:52.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 36, 18), 9.07, 53.52, 0.0, 37.07, 11.25, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:36:52.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:36:18
2026-02-14T20:36:52.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:36:53.101 [DEBUG] [Thread-191779] [transport.py] [_log()] starting thread (client mode): 0xa57439a0
2026-02-14T20:36:53.101 [DEBUG] [Thread-191779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:36:53.121 [DEBUG] [Thread-191779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:36:53.121 [INFO] [Thread-191779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:36:53.123 [DEBUG] [Thread-191779] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:36:53.123 [DEBUG] [Thread-191779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:36:53.123 [DEBUG] [Thread-191779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:36:53.123 [DEBUG] [Thread-191779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:36:53.123 [DEBUG] [Thread-191779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:36:53.123 [DEBUG] [Thread-191779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:36:53.123 [DEBUG] [Thread-191779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:36:53.123 [DEBUG] [Thread-191779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:36:53.123 [DEBUG] [Thread-191779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:36:53.123 [DEBUG] [Thread-191779] [transport.py] [_log()] client lang: <none>
2026-02-14T20:36:53.123 [DEBUG] [Thread-191779] [transport.py] [_log()] server lang: <none>
2026-02-14T20:36:53.124 [DEBUG] [Thread-191779] [transport.py] [_log()] kex follows: False
2026-02-14T20:36:53.124 [DEBUG] [Thread-191779] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:36:53.124 [DEBUG] [Thread-191779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:36:53.124 [DEBUG] [Thread-191779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:36:53.124 [DEBUG] [Thread-191779] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:36:53.124 [DEBUG] [Thread-191779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:36:53.124 [DEBUG] [Thread-191779] [transport.py] [_log()] Compression: none
2026-02-14T20:36:53.124 [DEBUG] [Thread-191779] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:36:53.132 [DEBUG] [Thread-191779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:36:53.132 [DEBUG] [Thread-191779] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:36:53.133 [DEBUG] [Thread-191779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:36:53.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:36:53.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:36:53.135 [DEBUG] [Thread-191779] [transport.py] [_log()] userauth is OK
2026-02-14T20:36:53.135 [DEBUG] [Thread-191779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:36:53.135 [DEBUG] [Thread-191779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:36:53.135 [DEBUG] [Thread-191779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:36:53.135 [DEBUG] [Thread-191779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:36:53.170 [INFO] [Thread-191779] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:36:53.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:36:53.781 [DEBUG] [Thread-191779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:36:53.781 [DEBUG] [Thread-191779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:36:53.782 [DEBUG] [Thread-191779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:36:53.822 [DEBUG] [Thread-191779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:36:53.823 [DEBUG] [Thread-191779] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:36:53.825 [DEBUG] [Thread-191779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:36:53.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:36:53.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:36:53.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:36:53.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:36:53.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:36:53.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:36:53.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:36:53.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:36:53.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:36:53.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.775114 -999.00  +11.10  26.78     59   +3.40 1 1 1 1 1     0    0 7.23 -25.71 ZNESW 29.2 26.8 164.8 38.2 11.6 -25.4 11.4 -24.4 11.2 -23.4 11.5 -24.6
2026-02-14T20:36:53.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:36:53.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:36:53.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.775114
2026-02-14T20:36:53.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:36:53.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:36:53.851 [DEBUG] [Thread-191779] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:36:53.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:36:53.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:36:53.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:36:53.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:36:18', tmtdew=9.07, humidity=53.52, cloud=0.0, wind=37.07, temperature=11.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:36:09.850', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.017250000000000654, 0.0182500000000001, 0.005499999999999616, -0.02549999999999919, 0.03675000000000139, -0.028999999999999915, 0.009250000000001535, 0.045499999999998764, 0.009000000000000341, 0.00024999999999941735, -0.0065000000000008384, 0.06550000000000011, 0.06675000000000075, 0.004999999999999005, -0.03200000000000003, 0.05075000000000074, 0.026500000000000412, -0.014000000000001123, -0.05975000000000108, 0.06399999999999828, 0.027749999999999275, 0.0182500000000001, -0.005250000000000199, 0.005999999999998451, -0.010499999999998622, -0.021250000000000213, -0.01649999999999885, 0.10299999999999976, 0.06099999999999994, 0.027000000000001023, 0.025500000000000966, 0.053249999999998465], zp_timestamp='2026-02-14T18:33:00')
2026-02-14T20:36:53.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-14T20:36:53.947 [DEBUG] [Thread-191782] [transport.py] [_log()] starting thread (client mode): 0xa2d01420
2026-02-14T20:36:53.947 [DEBUG] [Thread-191782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:36:53.962 [DEBUG] [Thread-191782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:36:53.962 [INFO] [Thread-191782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:36:53.969 [DEBUG] [Thread-191782] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:36:53.970 [DEBUG] [Thread-191782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:36:53.970 [DEBUG] [Thread-191782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:36:53.970 [DEBUG] [Thread-191782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:36:53.970 [DEBUG] [Thread-191782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:36:53.970 [DEBUG] [Thread-191782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:36:53.970 [DEBUG] [Thread-191782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:36:53.970 [DEBUG] [Thread-191782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:36:53.970 [DEBUG] [Thread-191782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:36:53.970 [DEBUG] [Thread-191782] [transport.py] [_log()] client lang: <none>
2026-02-14T20:36:53.970 [DEBUG] [Thread-191782] [transport.py] [_log()] server lang: <none>
2026-02-14T20:36:53.970 [DEBUG] [Thread-191782] [transport.py] [_log()] kex follows: False
2026-02-14T20:36:53.970 [DEBUG] [Thread-191782] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:36:53.970 [DEBUG] [Thread-191782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:36:53.970 [DEBUG] [Thread-191782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:36:53.970 [DEBUG] [Thread-191782] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:36:53.971 [DEBUG] [Thread-191782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:36:53.971 [DEBUG] [Thread-191782] [transport.py] [_log()] Compression: none
2026-02-14T20:36:53.971 [DEBUG] [Thread-191782] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:36:54.026 [DEBUG] [Thread-191782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:36:54.027 [DEBUG] [Thread-191782] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:36:54.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:36:54.028 [DEBUG] [Thread-191782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:36:54.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:36:54.083 [DEBUG] [Thread-191782] [transport.py] [_log()] userauth is OK
2026-02-14T20:36:54.083 [DEBUG] [Thread-191782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:36:54.083 [DEBUG] [Thread-191782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:36:54.083 [DEBUG] [Thread-191782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:36:54.083 [DEBUG] [Thread-191782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:36:54.102 [INFO] [Thread-191782] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:36:54.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-14T20:36:54.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:36:54.930 [DEBUG] [Thread-191782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:36:54.931 [DEBUG] [Thread-191782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:36:54.978 [DEBUG] [Thread-191782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:36:54.979 [DEBUG] [Thread-191782] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:36:54.988 [DEBUG] [Thread-191782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:36:54.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:36:54.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-14T20:36:55.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-14T20:36:55.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:36:55.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:36:55.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:36:55.025 [DEBUG] [Thread-191782] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:37:05.813 [DEBUG] [Thread-191784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:37:20.858 [DEBUG] [Thread-191785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:37:25.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:37:25.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:37:25.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-14T20:37:26.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 36, 53), 9.02, 53.49, 0.0, 36.13, 11.17, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:37:26.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:36:53
2026-02-14T20:37:27.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:37:27.459 [DEBUG] [Thread-191786] [transport.py] [_log()] starting thread (client mode): 0xa2d01630
2026-02-14T20:37:27.459 [DEBUG] [Thread-191786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:37:27.478 [DEBUG] [Thread-191786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:37:27.479 [INFO] [Thread-191786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:37:27.481 [DEBUG] [Thread-191786] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:37:27.482 [DEBUG] [Thread-191786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:37:27.482 [DEBUG] [Thread-191786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:37:27.482 [DEBUG] [Thread-191786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:37:27.482 [DEBUG] [Thread-191786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:37:27.482 [DEBUG] [Thread-191786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:37:27.482 [DEBUG] [Thread-191786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:37:27.483 [DEBUG] [Thread-191786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:37:27.483 [DEBUG] [Thread-191786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:37:27.483 [DEBUG] [Thread-191786] [transport.py] [_log()] client lang: <none>
2026-02-14T20:37:27.483 [DEBUG] [Thread-191786] [transport.py] [_log()] server lang: <none>
2026-02-14T20:37:27.483 [DEBUG] [Thread-191786] [transport.py] [_log()] kex follows: False
2026-02-14T20:37:27.483 [DEBUG] [Thread-191786] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:37:27.483 [DEBUG] [Thread-191786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:37:27.483 [DEBUG] [Thread-191786] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:37:27.483 [DEBUG] [Thread-191786] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:37:27.483 [DEBUG] [Thread-191786] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:37:27.483 [DEBUG] [Thread-191786] [transport.py] [_log()] Compression: none
2026-02-14T20:37:27.483 [DEBUG] [Thread-191786] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:37:27.502 [DEBUG] [Thread-191786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:37:27.502 [DEBUG] [Thread-191786] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:37:27.503 [DEBUG] [Thread-191786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:37:27.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:37:27.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:37:27.505 [DEBUG] [Thread-191786] [transport.py] [_log()] userauth is OK
2026-02-14T20:37:27.505 [DEBUG] [Thread-191786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:37:27.505 [DEBUG] [Thread-191786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:37:27.505 [DEBUG] [Thread-191786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:37:27.505 [DEBUG] [Thread-191786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:37:27.529 [INFO] [Thread-191786] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:37:27.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:37:28.193 [DEBUG] [Thread-191786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:37:28.193 [DEBUG] [Thread-191786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:37:28.194 [DEBUG] [Thread-191786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:37:28.234 [DEBUG] [Thread-191786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:37:28.235 [DEBUG] [Thread-191786] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:37:28.238 [DEBUG] [Thread-191786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:37:28.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:37:28.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:37:28.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:37:28.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:37:28.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:37:28.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:37:28.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:37:28.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:37:28.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:37:28.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.775808 -999.00  +11.10  26.23     59   +3.40 1 1 1 1 1     0    0 7.27 -24.84 ZNESW 27.5 26.2 161.0 34.5 11.5 -25.5 11.4 -24.6 11.2 -23.4 11.5 -24.7
2026-02-14T20:37:28.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:37:28.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:37:28.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.775808
2026-02-14T20:37:28.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:37:28.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:37:28.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:37:28.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:37:28.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:37:28.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:36:53', tmtdew=9.02, humidity=53.49, cloud=0.0, wind=36.13, temperature=11.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:37:09.811', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.017250000000000654, 0.0182500000000001, 0.005499999999999616, -0.02549999999999919, 0.03675000000000139, -0.028999999999999915, 0.009250000000001535, 0.045499999999998764, 0.009000000000000341, 0.00024999999999941735, -0.0065000000000008384, 0.06550000000000011, 0.06675000000000075, 0.004999999999999005, -0.03200000000000003, 0.05075000000000074, 0.026500000000000412, -0.014000000000001123, -0.05975000000000108, 0.06399999999999828, 0.027749999999999275, 0.0182500000000001, -0.005250000000000199, 0.005999999999998451, -0.010499999999998622, -0.021250000000000213, -0.01649999999999885, 0.10299999999999976, 0.06099999999999994, 0.027000000000001023, 0.025500000000000966, 0.053249999999998465], zp_timestamp='2026-02-14T18:33:00')
2026-02-14T20:37:28.268 [DEBUG] [Thread-191786] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:37:28.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-14T20:37:28.364 [DEBUG] [Thread-191789] [transport.py] [_log()] starting thread (client mode): 0xa2d12770
2026-02-14T20:37:28.364 [DEBUG] [Thread-191789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:37:28.380 [DEBUG] [Thread-191789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:37:28.380 [INFO] [Thread-191789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:37:28.388 [DEBUG] [Thread-191789] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:37:28.388 [DEBUG] [Thread-191789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:37:28.388 [DEBUG] [Thread-191789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:37:28.388 [DEBUG] [Thread-191789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:37:28.388 [DEBUG] [Thread-191789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:37:28.388 [DEBUG] [Thread-191789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:37:28.388 [DEBUG] [Thread-191789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:37:28.388 [DEBUG] [Thread-191789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:37:28.388 [DEBUG] [Thread-191789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:37:28.388 [DEBUG] [Thread-191789] [transport.py] [_log()] client lang: <none>
2026-02-14T20:37:28.388 [DEBUG] [Thread-191789] [transport.py] [_log()] server lang: <none>
2026-02-14T20:37:28.388 [DEBUG] [Thread-191789] [transport.py] [_log()] kex follows: False
2026-02-14T20:37:28.388 [DEBUG] [Thread-191789] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:37:28.388 [DEBUG] [Thread-191789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:37:28.388 [DEBUG] [Thread-191789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:37:28.389 [DEBUG] [Thread-191789] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:37:28.389 [DEBUG] [Thread-191789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:37:28.389 [DEBUG] [Thread-191789] [transport.py] [_log()] Compression: none
2026-02-14T20:37:28.389 [DEBUG] [Thread-191789] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:37:28.447 [DEBUG] [Thread-191789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:37:28.447 [DEBUG] [Thread-191789] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:37:28.448 [DEBUG] [Thread-191789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:37:28.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:37:28.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:37:28.503 [DEBUG] [Thread-191789] [transport.py] [_log()] userauth is OK
2026-02-14T20:37:28.503 [DEBUG] [Thread-191789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:37:28.504 [DEBUG] [Thread-191789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:37:28.504 [DEBUG] [Thread-191789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:37:28.504 [DEBUG] [Thread-191789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:37:28.522 [INFO] [Thread-191789] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:37:28.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-14T20:37:28.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:37:29.355 [DEBUG] [Thread-191789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:37:29.355 [DEBUG] [Thread-191789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:37:29.403 [DEBUG] [Thread-191789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:37:29.404 [DEBUG] [Thread-191789] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:37:29.412 [DEBUG] [Thread-191789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:37:29.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:37:29.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:37:29.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-14T20:37:29.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:37:29.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:37:29.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:37:29.451 [DEBUG] [Thread-191789] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:37:32.754 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:37:32.755 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:37:35.890 [DEBUG] [Thread-191791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:37:43.266 [DEBUG] [Thread-191792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:37:50.939 [DEBUG] [Thread-191793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:37:59.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:37:59.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:37:59.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-14T20:38:01.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 37, 30), 9.0, 53.56, 0.0, 36.24, 11.22, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:38:01.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:37:30
2026-02-14T20:38:01.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:38:01.912 [DEBUG] [Thread-191794] [transport.py] [_log()] starting thread (client mode): 0xa2d02680
2026-02-14T20:38:01.912 [DEBUG] [Thread-191794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:38:01.931 [DEBUG] [Thread-191794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:38:01.932 [INFO] [Thread-191794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:38:01.934 [DEBUG] [Thread-191794] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:38:01.935 [DEBUG] [Thread-191794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:38:01.935 [DEBUG] [Thread-191794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:38:01.935 [DEBUG] [Thread-191794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:38:01.935 [DEBUG] [Thread-191794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:38:01.935 [DEBUG] [Thread-191794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:38:01.935 [DEBUG] [Thread-191794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:38:01.935 [DEBUG] [Thread-191794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:38:01.935 [DEBUG] [Thread-191794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:38:01.935 [DEBUG] [Thread-191794] [transport.py] [_log()] client lang: <none>
2026-02-14T20:38:01.935 [DEBUG] [Thread-191794] [transport.py] [_log()] server lang: <none>
2026-02-14T20:38:01.935 [DEBUG] [Thread-191794] [transport.py] [_log()] kex follows: False
2026-02-14T20:38:01.935 [DEBUG] [Thread-191794] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:38:01.935 [DEBUG] [Thread-191794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:38:01.935 [DEBUG] [Thread-191794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:38:01.935 [DEBUG] [Thread-191794] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:38:01.935 [DEBUG] [Thread-191794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:38:01.935 [DEBUG] [Thread-191794] [transport.py] [_log()] Compression: none
2026-02-14T20:38:01.935 [DEBUG] [Thread-191794] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:38:01.953 [DEBUG] [Thread-191794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:38:01.954 [DEBUG] [Thread-191794] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:38:01.954 [DEBUG] [Thread-191794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:38:01.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:38:01.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:38:01.956 [DEBUG] [Thread-191794] [transport.py] [_log()] userauth is OK
2026-02-14T20:38:01.956 [DEBUG] [Thread-191794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:38:01.956 [DEBUG] [Thread-191794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:38:01.957 [DEBUG] [Thread-191794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:38:01.957 [DEBUG] [Thread-191794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:38:01.995 [INFO] [Thread-191794] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:38:01.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:38:02.638 [DEBUG] [Thread-191794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:38:02.638 [DEBUG] [Thread-191794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:38:02.638 [DEBUG] [Thread-191794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:38:02.679 [DEBUG] [Thread-191794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:38:02.679 [DEBUG] [Thread-191794] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:38:02.681 [DEBUG] [Thread-191794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:38:02.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:38:02.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:38:02.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:38:02.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:38:02.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:38:02.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:38:02.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:38:02.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:38:02.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:38:02.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.776156 -999.00  +11.00  29.64     59   +3.40 1 1 1 1 1     0    0 7.22 -24.62 ZNESW 25.9 29.6 166.4 43.5 11.5 -25.4 11.4 -24.4 11.2 -23.4 11.5 -24.6
2026-02-14T20:38:02.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:38:02.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:38:02.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.776156
2026-02-14T20:38:02.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:38:02.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:38:02.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:38:02.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:38:02.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:38:02.709 [DEBUG] [Thread-191794] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:38:02.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:37:30', tmtdew=9.0, humidity=53.56, cloud=0.0, wind=36.24, temperature=11.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:37:39.878', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012249999999999872, -0.038750000000000284, -0.018749999999998934, -0.022500000000000853, -0.01249999999999929, 0.024250000000000327, -0.025000000000000355, -0.011749999999999261, 0.01950000000000074, -0.019000000000000128, -0.020250000000000767, -0.018500000000001293, 0.0600000000000005, 0.05325000000000024, -0.04300000000000104, -0.06900000000000084, 0.02624999999999922, 0.0024999999999995026, -0.034000000000000696, -0.05375000000000085, 0.023999999999999133, 0.04224999999999923, -0.008749999999999147, -0.0182500000000001, 0.04099999999999859, 0.022500000000000853, -0.017250000000000654, -0.02149999999999963, 0.06500000000000128, 0.010000000000001563, 0.019000000000001904, -0.024499999999999744, 0.02024999999999899], zp_timestamp='2026-02-14T18:36:00')
2026-02-14T20:38:02.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-14T20:38:02.793 [DEBUG] [Thread-191797] [transport.py] [_log()] starting thread (client mode): 0xa2d02620
2026-02-14T20:38:02.793 [DEBUG] [Thread-191797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:38:02.808 [DEBUG] [Thread-191797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:38:02.808 [INFO] [Thread-191797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:38:02.815 [DEBUG] [Thread-191797] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:38:02.815 [DEBUG] [Thread-191797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:38:02.815 [DEBUG] [Thread-191797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:38:02.815 [DEBUG] [Thread-191797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:38:02.815 [DEBUG] [Thread-191797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:38:02.815 [DEBUG] [Thread-191797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:38:02.815 [DEBUG] [Thread-191797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:38:02.815 [DEBUG] [Thread-191797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:38:02.815 [DEBUG] [Thread-191797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:38:02.815 [DEBUG] [Thread-191797] [transport.py] [_log()] client lang: <none>
2026-02-14T20:38:02.815 [DEBUG] [Thread-191797] [transport.py] [_log()] server lang: <none>
2026-02-14T20:38:02.815 [DEBUG] [Thread-191797] [transport.py] [_log()] kex follows: False
2026-02-14T20:38:02.815 [DEBUG] [Thread-191797] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:38:02.815 [DEBUG] [Thread-191797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:38:02.815 [DEBUG] [Thread-191797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:38:02.815 [DEBUG] [Thread-191797] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:38:02.815 [DEBUG] [Thread-191797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:38:02.815 [DEBUG] [Thread-191797] [transport.py] [_log()] Compression: none
2026-02-14T20:38:02.815 [DEBUG] [Thread-191797] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:38:02.873 [DEBUG] [Thread-191797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:38:02.873 [DEBUG] [Thread-191797] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:38:02.873 [DEBUG] [Thread-191797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:38:02.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:38:02.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:38:02.930 [DEBUG] [Thread-191797] [transport.py] [_log()] userauth is OK
2026-02-14T20:38:02.930 [DEBUG] [Thread-191797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:38:02.930 [DEBUG] [Thread-191797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:38:02.930 [DEBUG] [Thread-191797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:38:02.930 [DEBUG] [Thread-191797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:38:02.944 [INFO] [Thread-191797] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:38:02.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-14T20:38:02.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:38:03.758 [DEBUG] [Thread-191797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:38:03.759 [DEBUG] [Thread-191797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:38:03.806 [DEBUG] [Thread-191797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:38:03.806 [DEBUG] [Thread-191797] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:38:03.815 [DEBUG] [Thread-191797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:38:03.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:38:03.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:38: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-14T20:38:03.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:38:03.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:38:03.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:38:03.850 [DEBUG] [Thread-191797] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:38:05.978 [DEBUG] [Thread-191799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:38:21.053 [DEBUG] [Thread-191800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:38:32.962 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:38:32.963 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:38:33.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:38:33.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:38:33.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-14T20:38:36.086 [DEBUG] [Thread-191801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:38:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 38, 5), 9.0, 53.56, 0.0, 35.08, 11.2, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:38:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:38:05
2026-02-14T20:38:36.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:38:36.781 [DEBUG] [Thread-191802] [transport.py] [_log()] starting thread (client mode): 0xa57e19f0
2026-02-14T20:38:36.781 [DEBUG] [Thread-191802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:38:36.802 [DEBUG] [Thread-191802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:38:36.802 [INFO] [Thread-191802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:38:36.805 [DEBUG] [Thread-191802] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:38:36.805 [DEBUG] [Thread-191802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:38:36.805 [DEBUG] [Thread-191802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:38:36.805 [DEBUG] [Thread-191802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:38:36.805 [DEBUG] [Thread-191802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:38:36.805 [DEBUG] [Thread-191802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:38:36.805 [DEBUG] [Thread-191802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:38:36.805 [DEBUG] [Thread-191802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:38:36.805 [DEBUG] [Thread-191802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:38:36.805 [DEBUG] [Thread-191802] [transport.py] [_log()] client lang: <none>
2026-02-14T20:38:36.805 [DEBUG] [Thread-191802] [transport.py] [_log()] server lang: <none>
2026-02-14T20:38:36.805 [DEBUG] [Thread-191802] [transport.py] [_log()] kex follows: False
2026-02-14T20:38:36.805 [DEBUG] [Thread-191802] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:38:36.805 [DEBUG] [Thread-191802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:38:36.806 [DEBUG] [Thread-191802] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:38:36.806 [DEBUG] [Thread-191802] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:38:36.806 [DEBUG] [Thread-191802] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:38:36.806 [DEBUG] [Thread-191802] [transport.py] [_log()] Compression: none
2026-02-14T20:38:36.806 [DEBUG] [Thread-191802] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:38:36.826 [DEBUG] [Thread-191802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:38:36.826 [DEBUG] [Thread-191802] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:38:36.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:38:36.827 [DEBUG] [Thread-191802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:38:36.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:38:36.829 [DEBUG] [Thread-191802] [transport.py] [_log()] userauth is OK
2026-02-14T20:38:36.830 [DEBUG] [Thread-191802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:38:36.830 [DEBUG] [Thread-191802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:38:36.830 [DEBUG] [Thread-191802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:38:36.830 [DEBUG] [Thread-191802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:38:36.865 [INFO] [Thread-191802] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:38:36.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:38:37.510 [DEBUG] [Thread-191802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:38:37.510 [DEBUG] [Thread-191802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:38:37.511 [DEBUG] [Thread-191802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:38:37.551 [DEBUG] [Thread-191802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:38:37.552 [DEBUG] [Thread-191802] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:38:37.555 [DEBUG] [Thread-191802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:38:37.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:38:37.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:38:37.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:38:37.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:38:37.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:38:37.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:38:37.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:38:37.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:38:37.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:38:37.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.776503 -999.00  +11.00  34.31     59   +3.40 1 1 2 1 1     0    0 6.95 -29.48 ZNESW 31.8 34.3 168.0 39.8 11.6 -25.4 11.4 -24.4 11.2 -23.4 11.5 -24.6
2026-02-14T20:38:37.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:38:37.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:38:37.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.776503
2026-02-14T20:38:37.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:38:37.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:38:37.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:38:37.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:38:37.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:38:37.584 [DEBUG] [Thread-191802] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:38:37.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:38:05', tmtdew=9.0, humidity=53.56, cloud=0.0, wind=35.08, temperature=11.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:38:09.859', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012249999999999872, -0.038750000000000284, -0.018749999999998934, -0.022500000000000853, -0.01249999999999929, 0.024250000000000327, -0.025000000000000355, -0.011749999999999261, 0.01950000000000074, -0.019000000000000128, -0.020250000000000767, -0.018500000000001293, 0.0600000000000005, 0.05325000000000024, -0.04300000000000104, -0.06900000000000084, 0.02624999999999922, 0.0024999999999995026, -0.034000000000000696, -0.05375000000000085, 0.023999999999999133, 0.04224999999999923, -0.008749999999999147, -0.0182500000000001, 0.04099999999999859, 0.022500000000000853, -0.017250000000000654, -0.02149999999999963, 0.06500000000000128, 0.010000000000001563, 0.019000000000001904, -0.024499999999999744, 0.02024999999999899], zp_timestamp='2026-02-14T18:36:00')
2026-02-14T20:38:37.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-14T20:38:37.680 [DEBUG] [Thread-191805] [transport.py] [_log()] starting thread (client mode): 0xa57717b0
2026-02-14T20:38:37.680 [DEBUG] [Thread-191805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:38:37.694 [DEBUG] [Thread-191805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:38:37.694 [INFO] [Thread-191805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:38:37.701 [DEBUG] [Thread-191805] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:38:37.701 [DEBUG] [Thread-191805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:38:37.701 [DEBUG] [Thread-191805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:38:37.701 [DEBUG] [Thread-191805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:38:37.701 [DEBUG] [Thread-191805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:38:37.701 [DEBUG] [Thread-191805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:38:37.702 [DEBUG] [Thread-191805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:38:37.702 [DEBUG] [Thread-191805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:38:37.702 [DEBUG] [Thread-191805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:38:37.702 [DEBUG] [Thread-191805] [transport.py] [_log()] client lang: <none>
2026-02-14T20:38:37.702 [DEBUG] [Thread-191805] [transport.py] [_log()] server lang: <none>
2026-02-14T20:38:37.702 [DEBUG] [Thread-191805] [transport.py] [_log()] kex follows: False
2026-02-14T20:38:37.702 [DEBUG] [Thread-191805] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:38:37.702 [DEBUG] [Thread-191805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:38:37.702 [DEBUG] [Thread-191805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:38:37.702 [DEBUG] [Thread-191805] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:38:37.702 [DEBUG] [Thread-191805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:38:37.702 [DEBUG] [Thread-191805] [transport.py] [_log()] Compression: none
2026-02-14T20:38:37.702 [DEBUG] [Thread-191805] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:38:37.757 [DEBUG] [Thread-191805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:38:37.757 [DEBUG] [Thread-191805] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:38:37.757 [DEBUG] [Thread-191805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:38:37.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:38:37.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:38:37.815 [DEBUG] [Thread-191805] [transport.py] [_log()] userauth is OK
2026-02-14T20:38:37.815 [DEBUG] [Thread-191805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:38:37.815 [DEBUG] [Thread-191805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:38:37.815 [DEBUG] [Thread-191805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:38:37.815 [DEBUG] [Thread-191805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:38:37.832 [INFO] [Thread-191805] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:38:37.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-14T20:38:37.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:38:38.648 [DEBUG] [Thread-191805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:38:38.648 [DEBUG] [Thread-191805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:38:38.696 [DEBUG] [Thread-191805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:38:38.696 [DEBUG] [Thread-191805] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:38:38.704 [DEBUG] [Thread-191805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:38:38.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:38:38.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-14T20:38:38.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-14T20:38:38.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:38:38.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:38:38.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:38:38.739 [DEBUG] [Thread-191805] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:38:43.348 [DEBUG] [Thread-191807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:38:51.119 [DEBUG] [Thread-191808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:39:06.170 [DEBUG] [Thread-191809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:39:08.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:39:08.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:39:08.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-14T20:39:11.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 38, 40), 9.2, 53.15, 0.0, 38.81, 11.5, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:39:11.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:38:40
2026-02-14T20:39:11.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:39:11.661 [DEBUG] [Thread-191810] [transport.py] [_log()] starting thread (client mode): 0xa2d12a70
2026-02-14T20:39:11.662 [DEBUG] [Thread-191810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:39:11.682 [DEBUG] [Thread-191810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:39:11.683 [INFO] [Thread-191810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:39:11.686 [DEBUG] [Thread-191810] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:39:11.686 [DEBUG] [Thread-191810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:39:11.686 [DEBUG] [Thread-191810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:39:11.686 [DEBUG] [Thread-191810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:39:11.686 [DEBUG] [Thread-191810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:39:11.686 [DEBUG] [Thread-191810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:39:11.686 [DEBUG] [Thread-191810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:39:11.687 [DEBUG] [Thread-191810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:39:11.687 [DEBUG] [Thread-191810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:39:11.687 [DEBUG] [Thread-191810] [transport.py] [_log()] client lang: <none>
2026-02-14T20:39:11.687 [DEBUG] [Thread-191810] [transport.py] [_log()] server lang: <none>
2026-02-14T20:39:11.687 [DEBUG] [Thread-191810] [transport.py] [_log()] kex follows: False
2026-02-14T20:39:11.687 [DEBUG] [Thread-191810] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:39:11.687 [DEBUG] [Thread-191810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:39:11.687 [DEBUG] [Thread-191810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:39:11.687 [DEBUG] [Thread-191810] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:39:11.687 [DEBUG] [Thread-191810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:39:11.687 [DEBUG] [Thread-191810] [transport.py] [_log()] Compression: none
2026-02-14T20:39:11.687 [DEBUG] [Thread-191810] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:39:11.704 [DEBUG] [Thread-191810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:39:11.705 [DEBUG] [Thread-191810] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:39:11.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:39:11.706 [DEBUG] [Thread-191810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:39:11.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:39:11.708 [DEBUG] [Thread-191810] [transport.py] [_log()] userauth is OK
2026-02-14T20:39:11.709 [DEBUG] [Thread-191810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:39:11.709 [DEBUG] [Thread-191810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:39:11.709 [DEBUG] [Thread-191810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:39:11.709 [DEBUG] [Thread-191810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:39:11.726 [INFO] [Thread-191810] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:39:11.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:39:12.336 [DEBUG] [Thread-191810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:39:12.336 [DEBUG] [Thread-191810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:39:12.336 [DEBUG] [Thread-191810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:39:12.377 [DEBUG] [Thread-191810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:39:12.377 [DEBUG] [Thread-191810] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:39:12.379 [DEBUG] [Thread-191810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:39:12.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:39:12.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:39:12.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:39:12.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:39:12.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:39:12.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:39:12.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:39:12.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:39:12.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:39:12.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.776850 -999.00  +11.00  24.36     59   +3.40 1 1 1 1 1     0    0 6.95 -30.69 ZNESW 28.4 24.4 152.4 37.4 11.5 -25.2 11.3 -24.4 11.1 -23.3 11.5 -24.5
2026-02-14T20:39:12.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:39:12.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:39:12.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.776850
2026-02-14T20:39:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:39:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:39:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:39:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:39:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:39:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:38:40', tmtdew=9.2, humidity=53.15, cloud=0.0, wind=38.81, temperature=11.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:38:39.840', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012249999999999872, -0.038750000000000284, -0.018749999999998934, -0.022500000000000853, -0.01249999999999929, 0.024250000000000327, -0.025000000000000355, -0.011749999999999261, 0.01950000000000074, -0.019000000000000128, -0.020250000000000767, -0.018500000000001293, 0.0600000000000005, 0.05325000000000024, -0.04300000000000104, -0.06900000000000084, 0.02624999999999922, 0.0024999999999995026, -0.034000000000000696, -0.05375000000000085, 0.023999999999999133, 0.04224999999999923, -0.008749999999999147, -0.0182500000000001, 0.04099999999999859, 0.022500000000000853, -0.017250000000000654, -0.02149999999999963, 0.06500000000000128, 0.010000000000001563, 0.019000000000001904, -0.024499999999999744, 0.02024999999999899], zp_timestamp='2026-02-14T18:36:00')
2026-02-14T20:39:12.403 [DEBUG] [Thread-191810] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:39:12.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-14T20:39:12.501 [DEBUG] [Thread-191813] [transport.py] [_log()] starting thread (client mode): 0xa2d7acb0
2026-02-14T20:39:12.502 [DEBUG] [Thread-191813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:39:12.519 [DEBUG] [Thread-191813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:39:12.519 [INFO] [Thread-191813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:39:12.529 [DEBUG] [Thread-191813] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:39:12.529 [DEBUG] [Thread-191813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:39:12.529 [DEBUG] [Thread-191813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:39:12.530 [DEBUG] [Thread-191813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:39:12.530 [DEBUG] [Thread-191813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:39:12.530 [DEBUG] [Thread-191813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:39:12.530 [DEBUG] [Thread-191813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:39:12.530 [DEBUG] [Thread-191813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:39:12.530 [DEBUG] [Thread-191813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:39:12.530 [DEBUG] [Thread-191813] [transport.py] [_log()] client lang: <none>
2026-02-14T20:39:12.530 [DEBUG] [Thread-191813] [transport.py] [_log()] server lang: <none>
2026-02-14T20:39:12.530 [DEBUG] [Thread-191813] [transport.py] [_log()] kex follows: False
2026-02-14T20:39:12.530 [DEBUG] [Thread-191813] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:39:12.530 [DEBUG] [Thread-191813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:39:12.530 [DEBUG] [Thread-191813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:39:12.530 [DEBUG] [Thread-191813] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:39:12.530 [DEBUG] [Thread-191813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:39:12.530 [DEBUG] [Thread-191813] [transport.py] [_log()] Compression: none
2026-02-14T20:39:12.530 [DEBUG] [Thread-191813] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:39:12.592 [DEBUG] [Thread-191813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:39:12.592 [DEBUG] [Thread-191813] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:39:12.592 [DEBUG] [Thread-191813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:39:12.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:39:12.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:39:12.654 [DEBUG] [Thread-191813] [transport.py] [_log()] userauth is OK
2026-02-14T20:39:12.654 [DEBUG] [Thread-191813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:39:12.654 [DEBUG] [Thread-191813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:39:12.654 [DEBUG] [Thread-191813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:39:12.654 [DEBUG] [Thread-191813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:39:12.676 [INFO] [Thread-191813] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:39:12.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-14T20:39:12.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:39:13.494 [DEBUG] [Thread-191813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:39:13.494 [DEBUG] [Thread-191813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:39:13.542 [DEBUG] [Thread-191813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:39:13.542 [DEBUG] [Thread-191813] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:39:13.551 [DEBUG] [Thread-191813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:39:13.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:39: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')
2026-02-14T20:39:13.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:39:13.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:39:13.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:39:13.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:39:13.586 [DEBUG] [Thread-191813] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:39:21.203 [DEBUG] [Thread-191815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:39:32.545 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:39:33.163 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:39:33.164 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:39:35.779 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:39:36.253 [DEBUG] [Thread-191816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:39:40.832 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:39:43.419 [DEBUG] [Thread-191817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:39:43.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:39:43.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:39:43.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-14T20:39:45.340 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:39:45.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 39, 16), 8.95, 54.09, 0.0, 31.76, 11.17, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:39:45.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:39:16
2026-02-14T20:39:46.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:39:46.322 [DEBUG] [Thread-191818] [transport.py] [_log()] starting thread (client mode): 0xa5741060
2026-02-14T20:39:46.322 [DEBUG] [Thread-191818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:39:46.342 [DEBUG] [Thread-191818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:39:46.342 [INFO] [Thread-191818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:39:46.345 [DEBUG] [Thread-191818] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:39:46.346 [DEBUG] [Thread-191818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:39:46.346 [DEBUG] [Thread-191818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:39:46.346 [DEBUG] [Thread-191818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:39:46.346 [DEBUG] [Thread-191818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:39:46.346 [DEBUG] [Thread-191818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:39:46.346 [DEBUG] [Thread-191818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:39:46.346 [DEBUG] [Thread-191818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:39:46.346 [DEBUG] [Thread-191818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:39:46.346 [DEBUG] [Thread-191818] [transport.py] [_log()] client lang: <none>
2026-02-14T20:39:46.346 [DEBUG] [Thread-191818] [transport.py] [_log()] server lang: <none>
2026-02-14T20:39:46.346 [DEBUG] [Thread-191818] [transport.py] [_log()] kex follows: False
2026-02-14T20:39:46.346 [DEBUG] [Thread-191818] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:39:46.346 [DEBUG] [Thread-191818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:39:46.347 [DEBUG] [Thread-191818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:39:46.347 [DEBUG] [Thread-191818] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:39:46.347 [DEBUG] [Thread-191818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:39:46.347 [DEBUG] [Thread-191818] [transport.py] [_log()] Compression: none
2026-02-14T20:39:46.347 [DEBUG] [Thread-191818] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:39:46.368 [DEBUG] [Thread-191818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:39:46.369 [DEBUG] [Thread-191818] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:39:46.370 [DEBUG] [Thread-191818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:39:46.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:39:46.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:39:46.372 [DEBUG] [Thread-191818] [transport.py] [_log()] userauth is OK
2026-02-14T20:39:46.372 [DEBUG] [Thread-191818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:39:46.372 [DEBUG] [Thread-191818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:39:46.372 [DEBUG] [Thread-191818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:39:46.372 [DEBUG] [Thread-191818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:39:46.405 [INFO] [Thread-191818] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:39:46.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:39:47.053 [DEBUG] [Thread-191818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:39:47.053 [DEBUG] [Thread-191818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:39:47.054 [DEBUG] [Thread-191818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:39:47.094 [DEBUG] [Thread-191818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:39:47.095 [DEBUG] [Thread-191818] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:39:47.098 [DEBUG] [Thread-191818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:39:47.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:39:47.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:39:47.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:39:47.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:39:47.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:39:47.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:39:47.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:39:47.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:39:47.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:39:47.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.777197 -999.00  +11.00  30.37     59   +3.40 1 1 2 1 1     0    0 7.00 -32.91 ZNESW 29.6 30.4 157.6 37.6 11.5 -25.4 11.3 -24.3 11.1 -23.3 11.5 -24.6
2026-02-14T20:39:47.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:39:47.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:39:47.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.777197
2026-02-14T20:39:47.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:39:47.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:39:47.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:39:47.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:39:47.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:39:47.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:39:16', tmtdew=8.95, humidity=54.09, cloud=0.0, wind=31.76, temperature=11.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:39:09.821', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012249999999999872, -0.038750000000000284, -0.018749999999998934, -0.022500000000000853, -0.01249999999999929, 0.024250000000000327, -0.025000000000000355, -0.011749999999999261, 0.01950000000000074, -0.019000000000000128, -0.020250000000000767, -0.018500000000001293, 0.0600000000000005, 0.05325000000000024, -0.04300000000000104, -0.06900000000000084, 0.02624999999999922, 0.0024999999999995026, -0.034000000000000696, -0.05375000000000085, 0.023999999999999133, 0.04224999999999923, -0.008749999999999147, -0.0182500000000001, 0.04099999999999859, 0.022500000000000853, -0.017250000000000654, -0.02149999999999963, 0.06500000000000128, 0.010000000000001563, 0.019000000000001904, -0.024499999999999744, 0.02024999999999899], zp_timestamp='2026-02-14T18:36:00')
2026-02-14T20:39:47.123 [DEBUG] [Thread-191818] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:39:47.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-14T20:39:47.219 [DEBUG] [Thread-191821] [transport.py] [_log()] starting thread (client mode): 0xa5770250
2026-02-14T20:39:47.219 [DEBUG] [Thread-191821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:39:47.233 [DEBUG] [Thread-191821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:39:47.234 [INFO] [Thread-191821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:39:47.241 [DEBUG] [Thread-191821] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:39:47.242 [DEBUG] [Thread-191821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:39:47.242 [DEBUG] [Thread-191821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:39:47.242 [DEBUG] [Thread-191821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:39:47.242 [DEBUG] [Thread-191821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:39:47.242 [DEBUG] [Thread-191821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:39:47.242 [DEBUG] [Thread-191821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:39:47.242 [DEBUG] [Thread-191821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:39:47.242 [DEBUG] [Thread-191821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:39:47.242 [DEBUG] [Thread-191821] [transport.py] [_log()] client lang: <none>
2026-02-14T20:39:47.242 [DEBUG] [Thread-191821] [transport.py] [_log()] server lang: <none>
2026-02-14T20:39:47.242 [DEBUG] [Thread-191821] [transport.py] [_log()] kex follows: False
2026-02-14T20:39:47.242 [DEBUG] [Thread-191821] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:39:47.242 [DEBUG] [Thread-191821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:39:47.242 [DEBUG] [Thread-191821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:39:47.242 [DEBUG] [Thread-191821] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:39:47.242 [DEBUG] [Thread-191821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:39:47.242 [DEBUG] [Thread-191821] [transport.py] [_log()] Compression: none
2026-02-14T20:39:47.243 [DEBUG] [Thread-191821] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:39:47.298 [DEBUG] [Thread-191821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:39:47.299 [DEBUG] [Thread-191821] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:39:47.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:39:47.300 [DEBUG] [Thread-191821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:39:47.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:39:47.321 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:39:47.355 [DEBUG] [Thread-191821] [transport.py] [_log()] userauth is OK
2026-02-14T20:39:47.356 [DEBUG] [Thread-191821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:39:47.356 [DEBUG] [Thread-191821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:39:47.356 [DEBUG] [Thread-191821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:39:47.356 [DEBUG] [Thread-191821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:39:47.374 [INFO] [Thread-191821] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:39:47.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-14T20:39:47.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:39:48.214 [DEBUG] [Thread-191821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:39:48.214 [DEBUG] [Thread-191821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:39:48.262 [DEBUG] [Thread-191821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:39:48.263 [DEBUG] [Thread-191821] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:39:48.272 [DEBUG] [Thread-191821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:39:48.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:39:48.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-14T20:39:48.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-14T20:39:48.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:39:48.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:39:48.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:39:48.309 [DEBUG] [Thread-191821] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:39:51.288 [DEBUG] [Thread-191823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:40:06.336 [DEBUG] [Thread-191824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:40:06.653 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:40:11.116 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:40:18.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:40:18.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:40:18.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:40:20.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 39, 51), 8.95, 54.08, 0.0, 35.11, 11.14, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:40:20.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:39:51
2026-02-14T20:40:20.436 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:40:20.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:40:20.891 [DEBUG] [Thread-191825] [transport.py] [_log()] starting thread (client mode): 0xa2d001f0
2026-02-14T20:40:20.891 [DEBUG] [Thread-191825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:40:20.912 [DEBUG] [Thread-191825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:40:20.912 [INFO] [Thread-191825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:40:20.915 [DEBUG] [Thread-191825] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:40:20.915 [DEBUG] [Thread-191825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:40:20.915 [DEBUG] [Thread-191825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:40:20.915 [DEBUG] [Thread-191825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:40:20.915 [DEBUG] [Thread-191825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:40:20.915 [DEBUG] [Thread-191825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:40:20.915 [DEBUG] [Thread-191825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:40:20.916 [DEBUG] [Thread-191825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:40:20.916 [DEBUG] [Thread-191825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:40:20.916 [DEBUG] [Thread-191825] [transport.py] [_log()] client lang: <none>
2026-02-14T20:40:20.916 [DEBUG] [Thread-191825] [transport.py] [_log()] server lang: <none>
2026-02-14T20:40:20.916 [DEBUG] [Thread-191825] [transport.py] [_log()] kex follows: False
2026-02-14T20:40:20.916 [DEBUG] [Thread-191825] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:40:20.916 [DEBUG] [Thread-191825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:40:20.916 [DEBUG] [Thread-191825] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:40:20.916 [DEBUG] [Thread-191825] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:40:20.916 [DEBUG] [Thread-191825] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:40:20.916 [DEBUG] [Thread-191825] [transport.py] [_log()] Compression: none
2026-02-14T20:40:20.916 [DEBUG] [Thread-191825] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:40:20.935 [DEBUG] [Thread-191825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:40:20.935 [DEBUG] [Thread-191825] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:40:20.935 [DEBUG] [Thread-191825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:40:20.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:40:20.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:40:20.936 [DEBUG] [Thread-191825] [transport.py] [_log()] userauth is OK
2026-02-14T20:40:20.937 [DEBUG] [Thread-191825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:40:20.937 [DEBUG] [Thread-191825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:40:20.937 [DEBUG] [Thread-191825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:40:20.937 [DEBUG] [Thread-191825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:40:20.952 [INFO] [Thread-191825] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:40:20.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:40:21.371 [DEBUG] [Thread-191827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:40:21.582 [DEBUG] [Thread-191825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:40:21.582 [DEBUG] [Thread-191825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:40:21.582 [DEBUG] [Thread-191825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:40:21.623 [DEBUG] [Thread-191825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:40:21.623 [DEBUG] [Thread-191825] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:40:21.626 [DEBUG] [Thread-191825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:40:21.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:40:21.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:40:21.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:40:21.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:40:21.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:40:21.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:40:21.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:40:21.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:40:21.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:40:21.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.777544 -999.00  +11.00  34.08     59   +3.40 1 1 2 1 1     0    0 7.01 -30.91 ZNESW 27.4 34.1 164.4 41.1 11.5 -25.4 11.3 -24.4 11.1 -23.4 11.5 -24.8
2026-02-14T20:40:21.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:40:21.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:40:21.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.777544
2026-02-14T20:40:21.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:40:21.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:40:21.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:40:21.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:40:21.650 [DEBUG] [Thread-191825] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:40:21.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:40:21.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:39:51', tmtdew=8.95, humidity=54.08, cloud=0.0, wind=35.11, temperature=11.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:39:39.802', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012249999999999872, -0.038750000000000284, -0.018749999999998934, -0.022500000000000853, -0.01249999999999929, 0.024250000000000327, -0.025000000000000355, -0.011749999999999261, 0.01950000000000074, -0.019000000000000128, -0.020250000000000767, -0.018500000000001293, 0.0600000000000005, 0.05325000000000024, -0.04300000000000104, -0.06900000000000084, 0.02624999999999922, 0.0024999999999995026, -0.034000000000000696, -0.05375000000000085, 0.023999999999999133, 0.04224999999999923, -0.008749999999999147, -0.0182500000000001, 0.04099999999999859, 0.022500000000000853, -0.017250000000000654, -0.02149999999999963, 0.06500000000000128, 0.010000000000001563, 0.019000000000001904, -0.024499999999999744, 0.02024999999999899], zp_timestamp='2026-02-14T18:36:00')
2026-02-14T20:40:21.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T20:40:21.744 [DEBUG] [Thread-191829] [transport.py] [_log()] starting thread (client mode): 0xa2d01660
2026-02-14T20:40:21.744 [DEBUG] [Thread-191829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:40:21.759 [DEBUG] [Thread-191829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:40:21.760 [INFO] [Thread-191829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:40:21.767 [DEBUG] [Thread-191829] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:40:21.767 [DEBUG] [Thread-191829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:40:21.767 [DEBUG] [Thread-191829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:40:21.767 [DEBUG] [Thread-191829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:40:21.767 [DEBUG] [Thread-191829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:40:21.768 [DEBUG] [Thread-191829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:40:21.768 [DEBUG] [Thread-191829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:40:21.768 [DEBUG] [Thread-191829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:40:21.768 [DEBUG] [Thread-191829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:40:21.768 [DEBUG] [Thread-191829] [transport.py] [_log()] client lang: <none>
2026-02-14T20:40:21.768 [DEBUG] [Thread-191829] [transport.py] [_log()] server lang: <none>
2026-02-14T20:40:21.768 [DEBUG] [Thread-191829] [transport.py] [_log()] kex follows: False
2026-02-14T20:40:21.768 [DEBUG] [Thread-191829] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:40:21.768 [DEBUG] [Thread-191829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:40:21.768 [DEBUG] [Thread-191829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:40:21.768 [DEBUG] [Thread-191829] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:40:21.768 [DEBUG] [Thread-191829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:40:21.768 [DEBUG] [Thread-191829] [transport.py] [_log()] Compression: none
2026-02-14T20:40:21.768 [DEBUG] [Thread-191829] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:40:21.827 [DEBUG] [Thread-191829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:40:21.827 [DEBUG] [Thread-191829] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:40:21.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:40:21.828 [DEBUG] [Thread-191829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:40:21.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:40:21.887 [DEBUG] [Thread-191829] [transport.py] [_log()] userauth is OK
2026-02-14T20:40:21.887 [DEBUG] [Thread-191829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:40:21.887 [DEBUG] [Thread-191829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:40:21.887 [DEBUG] [Thread-191829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:40:21.887 [DEBUG] [Thread-191829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:40:21.906 [INFO] [Thread-191829] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:40:21.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-14T20:40:21.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:40:22.732 [DEBUG] [Thread-191829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:40:22.732 [DEBUG] [Thread-191829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:40:22.781 [DEBUG] [Thread-191829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:40:22.782 [DEBUG] [Thread-191829] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:40:22.791 [DEBUG] [Thread-191829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:40:22.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:40:22.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-14T20:40:22.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-14T20:40:22.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:40:22.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:40:22.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:40:22.827 [DEBUG] [Thread-191829] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:40:24.915 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:40:30.949 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:40:33.369 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:40:33.370 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:40:35.405 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:40:36.406 [DEBUG] [Thread-191831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:40:43.485 [DEBUG] [Thread-191832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:40:51.456 [DEBUG] [Thread-191833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:40:52.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:40:52.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:40:52.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-14T20:40:54.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 40, 27), 8.91, 54.21, 0.0, 37.83, 11.15, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:40:54.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:40:27
2026-02-14T20:40:55.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:40:55.324 [DEBUG] [Thread-191834] [transport.py] [_log()] starting thread (client mode): 0xa2d13850
2026-02-14T20:40:55.324 [DEBUG] [Thread-191834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:40:55.344 [DEBUG] [Thread-191834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:40:55.344 [INFO] [Thread-191834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:40:55.347 [DEBUG] [Thread-191834] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:40:55.347 [DEBUG] [Thread-191834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:40:55.347 [DEBUG] [Thread-191834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:40:55.347 [DEBUG] [Thread-191834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:40:55.347 [DEBUG] [Thread-191834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:40:55.347 [DEBUG] [Thread-191834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:40:55.348 [DEBUG] [Thread-191834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:40:55.348 [DEBUG] [Thread-191834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:40:55.348 [DEBUG] [Thread-191834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:40:55.348 [DEBUG] [Thread-191834] [transport.py] [_log()] client lang: <none>
2026-02-14T20:40:55.348 [DEBUG] [Thread-191834] [transport.py] [_log()] server lang: <none>
2026-02-14T20:40:55.348 [DEBUG] [Thread-191834] [transport.py] [_log()] kex follows: False
2026-02-14T20:40:55.348 [DEBUG] [Thread-191834] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:40:55.348 [DEBUG] [Thread-191834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:40:55.348 [DEBUG] [Thread-191834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:40:55.348 [DEBUG] [Thread-191834] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:40:55.348 [DEBUG] [Thread-191834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:40:55.348 [DEBUG] [Thread-191834] [transport.py] [_log()] Compression: none
2026-02-14T20:40:55.348 [DEBUG] [Thread-191834] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:40:55.366 [DEBUG] [Thread-191834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:40:55.367 [DEBUG] [Thread-191834] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:40:55.367 [DEBUG] [Thread-191834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:40:55.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:40:55.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:40:55.369 [DEBUG] [Thread-191834] [transport.py] [_log()] userauth is OK
2026-02-14T20:40:55.369 [DEBUG] [Thread-191834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:40:55.369 [DEBUG] [Thread-191834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:40:55.369 [DEBUG] [Thread-191834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:40:55.369 [DEBUG] [Thread-191834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:40:55.403 [INFO] [Thread-191834] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:40:55.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:40:56.004 [DEBUG] [Thread-191834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:40:56.004 [DEBUG] [Thread-191834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:40:56.004 [DEBUG] [Thread-191834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:40:56.046 [DEBUG] [Thread-191834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:40:56.046 [DEBUG] [Thread-191834] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:40:56.049 [DEBUG] [Thread-191834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:40:56.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:40:56.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:40:56.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:40:56.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:40:56.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:40:56.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:40:56.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:40:56.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:40:56.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:40:56.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.778239 -999.00  +11.00  26.24     59   +3.40 1 1 1 1 1     0    0 6.90 -33.45 ZNESW 21.1 26.2 162.6 39.5 11.5 -25.3 11.3 -24.4 11.1 -23.3 11.5 -24.5
2026-02-14T20:40:56.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:40:56.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:40:56.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.778239
2026-02-14T20:40:56.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:40:56.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:40:56.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:40:56.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:40:56.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:40:56.081 [DEBUG] [Thread-191834] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:40:56.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:40:27', tmtdew=8.91, humidity=54.21, cloud=0.0, wind=37.83, temperature=11.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:40:39.850', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00575000000000081, 0.0032500000000013074, 0.004250000000000753, -0.01550000000000118, -0.016500000000000625, 0.02325000000000088, -0.019499999999998963, -0.025749999999998607, -0.010500000000000398, -0.012000000000000455, 0.029749999999999943, -0.016000000000000014, 0.05299999999999905, 0.031249999999998224, -0.03300000000000125, -0.042500000000000426, -0.0017500000000012506, -0.0024999999999995026, -0.031000000000000583, -0.05575000000000152, 0.049999999999998934, 0.01574999999999882, -0.008749999999999147, -0.020250000000000767, 0.009499999999999176, 0.026500000000000412, -0.0467499999999994, -0.020500000000000185, 0.09350000000000058, 0.031000000000000583, 0.03900000000000148, -0.008999999999998565, 0.01974999999999838], zp_timestamp='2026-02-14T18:38:00')
2026-02-14T20:40: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-14T20:40:56.178 [DEBUG] [Thread-191837] [transport.py] [_log()] starting thread (client mode): 0xa57431f0
2026-02-14T20:40:56.178 [DEBUG] [Thread-191837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:40:56.194 [DEBUG] [Thread-191837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:40:56.194 [INFO] [Thread-191837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:40:56.202 [DEBUG] [Thread-191837] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:40:56.202 [DEBUG] [Thread-191837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:40:56.202 [DEBUG] [Thread-191837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:40:56.202 [DEBUG] [Thread-191837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:40:56.202 [DEBUG] [Thread-191837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:40:56.202 [DEBUG] [Thread-191837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:40:56.203 [DEBUG] [Thread-191837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:40:56.203 [DEBUG] [Thread-191837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:40:56.203 [DEBUG] [Thread-191837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:40:56.203 [DEBUG] [Thread-191837] [transport.py] [_log()] client lang: <none>
2026-02-14T20:40:56.203 [DEBUG] [Thread-191837] [transport.py] [_log()] server lang: <none>
2026-02-14T20:40:56.203 [DEBUG] [Thread-191837] [transport.py] [_log()] kex follows: False
2026-02-14T20:40:56.203 [DEBUG] [Thread-191837] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:40:56.203 [DEBUG] [Thread-191837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:40:56.204 [DEBUG] [Thread-191837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:40:56.204 [DEBUG] [Thread-191837] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:40:56.204 [DEBUG] [Thread-191837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:40:56.204 [DEBUG] [Thread-191837] [transport.py] [_log()] Compression: none
2026-02-14T20:40:56.204 [DEBUG] [Thread-191837] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:40:56.259 [DEBUG] [Thread-191837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:40:56.260 [DEBUG] [Thread-191837] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:40:56.260 [DEBUG] [Thread-191837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:40:56.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:40:56.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:40:56.314 [DEBUG] [Thread-191837] [transport.py] [_log()] userauth is OK
2026-02-14T20:40:56.314 [DEBUG] [Thread-191837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:40:56.315 [DEBUG] [Thread-191837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:40:56.315 [DEBUG] [Thread-191837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:40:56.315 [DEBUG] [Thread-191837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:40:56.337 [INFO] [Thread-191837] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:40:56.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T20:40:56.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:40:57.206 [DEBUG] [Thread-191837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:40:57.206 [DEBUG] [Thread-191837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:40:57.253 [DEBUG] [Thread-191837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:40:57.254 [DEBUG] [Thread-191837] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:40:57.263 [DEBUG] [Thread-191837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:40:57.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:40:57.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:40: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-14T20:40:57.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:40:57.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:40:57.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:40:57.300 [DEBUG] [Thread-191837] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:41:06.493 [DEBUG] [Thread-191839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:41:18.943 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:41:21.542 [DEBUG] [Thread-191840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:41:27.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:41:27.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:41:27.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-14T20:41:29.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 41, 3), 8.91, 54.22, 0.0, 37.37, 11.12, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:41:29.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:41:03
2026-02-14T20:41:29.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:41:29.753 [DEBUG] [Thread-191841] [transport.py] [_log()] starting thread (client mode): 0xa2d79360
2026-02-14T20:41:29.753 [DEBUG] [Thread-191841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:41:29.773 [DEBUG] [Thread-191841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:41:29.773 [INFO] [Thread-191841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:41:29.777 [DEBUG] [Thread-191841] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:41:29.777 [DEBUG] [Thread-191841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:41:29.777 [DEBUG] [Thread-191841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:41:29.777 [DEBUG] [Thread-191841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:41:29.777 [DEBUG] [Thread-191841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:41:29.777 [DEBUG] [Thread-191841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:41:29.777 [DEBUG] [Thread-191841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:41:29.777 [DEBUG] [Thread-191841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:41:29.777 [DEBUG] [Thread-191841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:41:29.777 [DEBUG] [Thread-191841] [transport.py] [_log()] client lang: <none>
2026-02-14T20:41:29.777 [DEBUG] [Thread-191841] [transport.py] [_log()] server lang: <none>
2026-02-14T20:41:29.777 [DEBUG] [Thread-191841] [transport.py] [_log()] kex follows: False
2026-02-14T20:41:29.777 [DEBUG] [Thread-191841] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:41:29.777 [DEBUG] [Thread-191841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:41:29.777 [DEBUG] [Thread-191841] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:41:29.777 [DEBUG] [Thread-191841] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:41:29.777 [DEBUG] [Thread-191841] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:41:29.777 [DEBUG] [Thread-191841] [transport.py] [_log()] Compression: none
2026-02-14T20:41:29.777 [DEBUG] [Thread-191841] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:41:29.795 [DEBUG] [Thread-191841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:41:29.796 [DEBUG] [Thread-191841] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:41:29.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:41:29.797 [DEBUG] [Thread-191841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:41:29.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:41:29.799 [DEBUG] [Thread-191841] [transport.py] [_log()] userauth is OK
2026-02-14T20:41:29.799 [DEBUG] [Thread-191841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:41:29.800 [DEBUG] [Thread-191841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:41:29.800 [DEBUG] [Thread-191841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:41:29.800 [DEBUG] [Thread-191841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:41:29.824 [INFO] [Thread-191841] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:41:29.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:41:30.403 [DEBUG] [Thread-191841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:41:30.403 [DEBUG] [Thread-191841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:41:30.403 [DEBUG] [Thread-191841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:41:30.443 [DEBUG] [Thread-191841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:41:30.444 [DEBUG] [Thread-191841] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:41:30.447 [DEBUG] [Thread-191841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:41:30.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:41:30.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:41:30.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:41:30.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:41:30.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:41:30.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:41:30.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:41:30.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:41:30.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:41:30.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.778586 -999.00  +11.00  26.64     59   +3.40 1 1 1 1 1     0    0 6.84 -36.20 ZNESW 24.9 26.6 158.2 36.7 11.5 -25.4 11.3 -24.4 11.1 -23.3 11.5 -24.6
2026-02-14T20:41:30.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:41:30.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:41:30.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.778586
2026-02-14T20:41:30.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:41:30.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:41:30.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:41:30.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:41:30.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:41:30.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:41:03', tmtdew=8.91, humidity=54.22, cloud=0.0, wind=37.37, temperature=11.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:41:09.830', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00575000000000081, 0.0032500000000013074, 0.004250000000000753, -0.01550000000000118, -0.016500000000000625, 0.02325000000000088, -0.019499999999998963, -0.025749999999998607, -0.010500000000000398, -0.012000000000000455, 0.029749999999999943, -0.016000000000000014, 0.05299999999999905, 0.031249999999998224, -0.03300000000000125, -0.042500000000000426, -0.0017500000000012506, -0.0024999999999995026, -0.031000000000000583, -0.05575000000000152, 0.049999999999998934, 0.01574999999999882, -0.008749999999999147, -0.020250000000000767, 0.009499999999999176, 0.026500000000000412, -0.0467499999999994, -0.020500000000000185, 0.09350000000000058, 0.031000000000000583, 0.03900000000000148, -0.008999999999998565, 0.01974999999999838], zp_timestamp='2026-02-14T18:38:00')
2026-02-14T20:41:30.475 [DEBUG] [Thread-191841] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:41:30.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-14T20:41:30.570 [DEBUG] [Thread-191844] [transport.py] [_log()] starting thread (client mode): 0xa5741300
2026-02-14T20:41:30.570 [DEBUG] [Thread-191844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:41:30.584 [DEBUG] [Thread-191844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:41:30.584 [INFO] [Thread-191844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:41:30.592 [DEBUG] [Thread-191844] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:41:30.592 [DEBUG] [Thread-191844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:41:30.592 [DEBUG] [Thread-191844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:41:30.592 [DEBUG] [Thread-191844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:41:30.593 [DEBUG] [Thread-191844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:41:30.593 [DEBUG] [Thread-191844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:41:30.593 [DEBUG] [Thread-191844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:41:30.593 [DEBUG] [Thread-191844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:41:30.593 [DEBUG] [Thread-191844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:41:30.593 [DEBUG] [Thread-191844] [transport.py] [_log()] client lang: <none>
2026-02-14T20:41:30.593 [DEBUG] [Thread-191844] [transport.py] [_log()] server lang: <none>
2026-02-14T20:41:30.593 [DEBUG] [Thread-191844] [transport.py] [_log()] kex follows: False
2026-02-14T20:41:30.593 [DEBUG] [Thread-191844] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:41:30.593 [DEBUG] [Thread-191844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:41:30.593 [DEBUG] [Thread-191844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:41:30.593 [DEBUG] [Thread-191844] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:41:30.593 [DEBUG] [Thread-191844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:41:30.593 [DEBUG] [Thread-191844] [transport.py] [_log()] Compression: none
2026-02-14T20:41:30.593 [DEBUG] [Thread-191844] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:41:30.652 [DEBUG] [Thread-191844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:41:30.652 [DEBUG] [Thread-191844] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:41:30.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:41:30.653 [DEBUG] [Thread-191844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:41:30.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:41:30.711 [DEBUG] [Thread-191844] [transport.py] [_log()] userauth is OK
2026-02-14T20:41:30.711 [DEBUG] [Thread-191844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:41:30.711 [DEBUG] [Thread-191844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:41:30.712 [DEBUG] [Thread-191844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:41:30.712 [DEBUG] [Thread-191844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:41:30.730 [INFO] [Thread-191844] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:41:30.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-14T20:41:30.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:41:31.623 [DEBUG] [Thread-191844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:41:31.623 [DEBUG] [Thread-191844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:41:31.671 [DEBUG] [Thread-191844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:41:31.672 [DEBUG] [Thread-191844] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:41:31.681 [DEBUG] [Thread-191844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:41:31.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:41:31.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-14T20:41:31.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-14T20:41:31.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:41:31.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:41:31.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:41:31.717 [DEBUG] [Thread-191844] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:41:33.568 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:41:33.569 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:41:36.577 [DEBUG] [Thread-191846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:41:39.606 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:41:42.645 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:41:43.555 [DEBUG] [Thread-191847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:41:51.626 [DEBUG] [Thread-191848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:42:01.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:42:01.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:42:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:42:03.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 41, 38), 9.1, 53.52, 0.0, 37.01, 11.41, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:42:03.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:41:38
2026-02-14T20:42:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:42:04.195 [DEBUG] [Thread-191849] [transport.py] [_log()] starting thread (client mode): 0xa2d79390
2026-02-14T20:42:04.195 [DEBUG] [Thread-191849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:42:04.214 [DEBUG] [Thread-191849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:42:04.214 [INFO] [Thread-191849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:42:04.217 [DEBUG] [Thread-191849] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:42:04.217 [DEBUG] [Thread-191849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:42:04.217 [DEBUG] [Thread-191849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:42:04.217 [DEBUG] [Thread-191849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:42:04.217 [DEBUG] [Thread-191849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:42:04.217 [DEBUG] [Thread-191849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:42:04.217 [DEBUG] [Thread-191849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:42:04.218 [DEBUG] [Thread-191849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:42:04.218 [DEBUG] [Thread-191849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:42:04.218 [DEBUG] [Thread-191849] [transport.py] [_log()] client lang: <none>
2026-02-14T20:42:04.218 [DEBUG] [Thread-191849] [transport.py] [_log()] server lang: <none>
2026-02-14T20:42:04.218 [DEBUG] [Thread-191849] [transport.py] [_log()] kex follows: False
2026-02-14T20:42:04.218 [DEBUG] [Thread-191849] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:42:04.218 [DEBUG] [Thread-191849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:42:04.218 [DEBUG] [Thread-191849] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:42:04.218 [DEBUG] [Thread-191849] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:42:04.218 [DEBUG] [Thread-191849] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:42:04.218 [DEBUG] [Thread-191849] [transport.py] [_log()] Compression: none
2026-02-14T20:42:04.218 [DEBUG] [Thread-191849] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:42:04.233 [DEBUG] [Thread-191849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:42:04.233 [DEBUG] [Thread-191849] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:42:04.234 [DEBUG] [Thread-191849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:42:04.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:42:04.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:42:04.236 [DEBUG] [Thread-191849] [transport.py] [_log()] userauth is OK
2026-02-14T20:42:04.236 [DEBUG] [Thread-191849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:42:04.236 [DEBUG] [Thread-191849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:42:04.236 [DEBUG] [Thread-191849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:42:04.236 [DEBUG] [Thread-191849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:42:04.257 [INFO] [Thread-191849] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:42:04.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:42:04.900 [DEBUG] [Thread-191849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:42:04.900 [DEBUG] [Thread-191849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:42:04.901 [DEBUG] [Thread-191849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:42:04.941 [DEBUG] [Thread-191849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:42:04.942 [DEBUG] [Thread-191849] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:42:04.945 [DEBUG] [Thread-191849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:42:04.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:42:04.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:42:04.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:42:04.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:42:04.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:42:04.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:42:04.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:42:04.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:42:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:42:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.778933 -999.00  +11.00  31.84     59   +3.40 1 1 2 1 1     0    0 6.79 -37.80 ZNESW 28.6 31.8 165.8 36.6 11.4 -25.4 11.3 -24.4 11.1 -23.5 11.4 -24.6
2026-02-14T20:42:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:42:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:42:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.778933
2026-02-14T20:42:04.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:42:04.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:42:04.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:42:04.970 [DEBUG] [Thread-191849] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:42:04.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:42:04.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:42:04.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:41:38', tmtdew=9.1, humidity=53.52, cloud=0.0, wind=37.01, temperature=11.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:41:39.811', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00575000000000081, 0.0032500000000013074, 0.004250000000000753, -0.01550000000000118, -0.016500000000000625, 0.02325000000000088, -0.019499999999998963, -0.025749999999998607, -0.010500000000000398, -0.012000000000000455, 0.029749999999999943, -0.016000000000000014, 0.05299999999999905, 0.031249999999998224, -0.03300000000000125, -0.042500000000000426, -0.0017500000000012506, -0.0024999999999995026, -0.031000000000000583, -0.05575000000000152, 0.049999999999998934, 0.01574999999999882, -0.008749999999999147, -0.020250000000000767, 0.009499999999999176, 0.026500000000000412, -0.0467499999999994, -0.020500000000000185, 0.09350000000000058, 0.031000000000000583, 0.03900000000000148, -0.008999999999998565, 0.01974999999999838], zp_timestamp='2026-02-14T18:38:00')
2026-02-14T20:42:05.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-14T20:42:05.067 [DEBUG] [Thread-191852] [transport.py] [_log()] starting thread (client mode): 0xa2d01660
2026-02-14T20:42:05.067 [DEBUG] [Thread-191852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:42:05.084 [DEBUG] [Thread-191852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:42:05.084 [INFO] [Thread-191852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:42:05.092 [DEBUG] [Thread-191852] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:42:05.092 [DEBUG] [Thread-191852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:42:05.092 [DEBUG] [Thread-191852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:42:05.092 [DEBUG] [Thread-191852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:42:05.092 [DEBUG] [Thread-191852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:42:05.092 [DEBUG] [Thread-191852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:42:05.092 [DEBUG] [Thread-191852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:42:05.092 [DEBUG] [Thread-191852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:42:05.092 [DEBUG] [Thread-191852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:42:05.092 [DEBUG] [Thread-191852] [transport.py] [_log()] client lang: <none>
2026-02-14T20:42:05.092 [DEBUG] [Thread-191852] [transport.py] [_log()] server lang: <none>
2026-02-14T20:42:05.092 [DEBUG] [Thread-191852] [transport.py] [_log()] kex follows: False
2026-02-14T20:42:05.092 [DEBUG] [Thread-191852] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:42:05.092 [DEBUG] [Thread-191852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:42:05.092 [DEBUG] [Thread-191852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:42:05.093 [DEBUG] [Thread-191852] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:42:05.093 [DEBUG] [Thread-191852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:42:05.093 [DEBUG] [Thread-191852] [transport.py] [_log()] Compression: none
2026-02-14T20:42:05.093 [DEBUG] [Thread-191852] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:42:05.151 [DEBUG] [Thread-191852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:42:05.152 [DEBUG] [Thread-191852] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:42:05.152 [DEBUG] [Thread-191852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:42:05.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:42:05.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:42:05.207 [DEBUG] [Thread-191852] [transport.py] [_log()] userauth is OK
2026-02-14T20:42:05.207 [DEBUG] [Thread-191852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:42:05.208 [DEBUG] [Thread-191852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:42:05.208 [DEBUG] [Thread-191852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:42:05.208 [DEBUG] [Thread-191852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:42:05.227 [INFO] [Thread-191852] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:42:05.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-14T20:42:05.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:42:06.074 [DEBUG] [Thread-191852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:42:06.074 [DEBUG] [Thread-191852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:42:06.122 [DEBUG] [Thread-191852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:42:06.123 [DEBUG] [Thread-191852] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:42:06.132 [DEBUG] [Thread-191852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:42:06.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:42:06.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-14T20:42:06.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:42:06.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:42:06.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:42:06.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:42:06.168 [DEBUG] [Thread-191852] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:42:06.658 [DEBUG] [Thread-191854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:42:21.709 [DEBUG] [Thread-191855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:42:33.769 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:42:33.770 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:42:36.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:42:36.169 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:42:36.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-14T20:42:36.745 [DEBUG] [Thread-191856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:42:38.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 42, 13), 8.89, 54.29, 0.0, 31.81, 11.12, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:42:38.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:42:13
2026-02-14T20:42:38.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:42:38.542 [DEBUG] [Thread-191857] [transport.py] [_log()] starting thread (client mode): 0xa57e0610
2026-02-14T20:42:38.542 [DEBUG] [Thread-191857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:42:38.563 [DEBUG] [Thread-191857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:42:38.563 [INFO] [Thread-191857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:42:38.566 [DEBUG] [Thread-191857] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:42:38.566 [DEBUG] [Thread-191857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:42:38.566 [DEBUG] [Thread-191857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:42:38.566 [DEBUG] [Thread-191857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:42:38.566 [DEBUG] [Thread-191857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:42:38.566 [DEBUG] [Thread-191857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:42:38.566 [DEBUG] [Thread-191857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:42:38.566 [DEBUG] [Thread-191857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:42:38.566 [DEBUG] [Thread-191857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:42:38.566 [DEBUG] [Thread-191857] [transport.py] [_log()] client lang: <none>
2026-02-14T20:42:38.566 [DEBUG] [Thread-191857] [transport.py] [_log()] server lang: <none>
2026-02-14T20:42:38.566 [DEBUG] [Thread-191857] [transport.py] [_log()] kex follows: False
2026-02-14T20:42:38.567 [DEBUG] [Thread-191857] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:42:38.567 [DEBUG] [Thread-191857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:42:38.567 [DEBUG] [Thread-191857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:42:38.567 [DEBUG] [Thread-191857] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:42:38.567 [DEBUG] [Thread-191857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:42:38.567 [DEBUG] [Thread-191857] [transport.py] [_log()] Compression: none
2026-02-14T20:42:38.567 [DEBUG] [Thread-191857] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:42:38.584 [DEBUG] [Thread-191857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:42:38.585 [DEBUG] [Thread-191857] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:42:38.585 [DEBUG] [Thread-191857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:42:38.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:42:38.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:42:38.587 [DEBUG] [Thread-191857] [transport.py] [_log()] userauth is OK
2026-02-14T20:42:38.588 [DEBUG] [Thread-191857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:42:38.588 [DEBUG] [Thread-191857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:42:38.588 [DEBUG] [Thread-191857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:42:38.588 [DEBUG] [Thread-191857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:42:38.613 [INFO] [Thread-191857] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:42:38.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:42:39.233 [DEBUG] [Thread-191857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:42:39.233 [DEBUG] [Thread-191857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:42:39.234 [DEBUG] [Thread-191857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:42:39.274 [DEBUG] [Thread-191857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:42:39.275 [DEBUG] [Thread-191857] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:42:39.278 [DEBUG] [Thread-191857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:42:39.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:42:39.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:42:39.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:42:39.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:42:39.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:42:39.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:42:39.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:42:39.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:42:39.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:42:39.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.779281 -999.00  +11.00  26.14     59   +3.40 1 1 1 1 1     0    0 6.74 -41.95 ZNESW 24.6 26.1 165.0 40.4 11.5 -25.5 11.3 -24.5 11.1 -23.5 11.4 -24.6
2026-02-14T20:42:39.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:42:39.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:42:39.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.779281
2026-02-14T20:42:39.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:42:39.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:42:39.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:42:39.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:42:39.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:42:39.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:42:13', tmtdew=8.89, humidity=54.29, cloud=0.0, wind=31.81, temperature=11.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:42:09.878', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00575000000000081, 0.0032500000000013074, 0.004250000000000753, -0.01550000000000118, -0.016500000000000625, 0.02325000000000088, -0.019499999999998963, -0.025749999999998607, -0.010500000000000398, -0.012000000000000455, 0.029749999999999943, -0.016000000000000014, 0.05299999999999905, 0.031249999999998224, -0.03300000000000125, -0.042500000000000426, -0.0017500000000012506, -0.0024999999999995026, -0.031000000000000583, -0.05575000000000152, 0.049999999999998934, 0.01574999999999882, -0.008749999999999147, -0.020250000000000767, 0.009499999999999176, 0.026500000000000412, -0.0467499999999994, -0.020500000000000185, 0.09350000000000058, 0.031000000000000583, 0.03900000000000148, -0.008999999999998565, 0.01974999999999838], zp_timestamp='2026-02-14T18:38:00')
2026-02-14T20:42:39.304 [DEBUG] [Thread-191857] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:42:39.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-14T20:42:39.399 [DEBUG] [Thread-191860] [transport.py] [_log()] starting thread (client mode): 0xa2d12c20
2026-02-14T20:42:39.400 [DEBUG] [Thread-191860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:42:39.414 [DEBUG] [Thread-191860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:42:39.415 [INFO] [Thread-191860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:42:39.422 [DEBUG] [Thread-191860] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:42:39.423 [DEBUG] [Thread-191860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:42:39.423 [DEBUG] [Thread-191860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:42:39.423 [DEBUG] [Thread-191860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:42:39.424 [DEBUG] [Thread-191860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:42:39.424 [DEBUG] [Thread-191860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:42:39.424 [DEBUG] [Thread-191860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:42:39.424 [DEBUG] [Thread-191860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:42:39.424 [DEBUG] [Thread-191860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:42:39.424 [DEBUG] [Thread-191860] [transport.py] [_log()] client lang: <none>
2026-02-14T20:42:39.424 [DEBUG] [Thread-191860] [transport.py] [_log()] server lang: <none>
2026-02-14T20:42:39.424 [DEBUG] [Thread-191860] [transport.py] [_log()] kex follows: False
2026-02-14T20:42:39.424 [DEBUG] [Thread-191860] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:42:39.424 [DEBUG] [Thread-191860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:42:39.424 [DEBUG] [Thread-191860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:42:39.424 [DEBUG] [Thread-191860] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:42:39.424 [DEBUG] [Thread-191860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:42:39.424 [DEBUG] [Thread-191860] [transport.py] [_log()] Compression: none
2026-02-14T20:42:39.424 [DEBUG] [Thread-191860] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:42:39.483 [DEBUG] [Thread-191860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:42:39.483 [DEBUG] [Thread-191860] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:42:39.484 [DEBUG] [Thread-191860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:42:39.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:42:39.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:42:39.539 [DEBUG] [Thread-191860] [transport.py] [_log()] userauth is OK
2026-02-14T20:42:39.540 [DEBUG] [Thread-191860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:42:39.540 [DEBUG] [Thread-191860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:42:39.540 [DEBUG] [Thread-191860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:42:39.540 [DEBUG] [Thread-191860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:42:39.559 [INFO] [Thread-191860] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:42:39.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-14T20:42:39.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:42:40.387 [DEBUG] [Thread-191860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:42:40.387 [DEBUG] [Thread-191860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:42:40.436 [DEBUG] [Thread-191860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:42:40.436 [DEBUG] [Thread-191860] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:42:40.452 [DEBUG] [Thread-191860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:42:40.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:42:40.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:42:40.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:42:40.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:42:40.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:42:40.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:42:40.495 [DEBUG] [Thread-191860] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:42:43.612 [DEBUG] [Thread-191862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:42:51.780 [DEBUG] [Thread-191863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:42:52.709 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:43:06.334 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:43:06.833 [DEBUG] [Thread-191864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:43:10.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:43:10.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:43:10.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-14T20:43:12.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 42, 49), 8.89, 54.29, 0.0, 37.32, 11.1, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:43:12.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:42:49
2026-02-14T20:43:12.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:43:12.840 [DEBUG] [Thread-191865] [transport.py] [_log()] starting thread (client mode): 0xa57d5d50
2026-02-14T20:43:12.840 [DEBUG] [Thread-191865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:43:12.858 [DEBUG] [Thread-191865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:43:12.859 [INFO] [Thread-191865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:43:12.862 [DEBUG] [Thread-191865] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:43:12.862 [DEBUG] [Thread-191865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:43:12.862 [DEBUG] [Thread-191865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:43:12.862 [DEBUG] [Thread-191865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:43:12.862 [DEBUG] [Thread-191865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:43:12.862 [DEBUG] [Thread-191865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:43:12.862 [DEBUG] [Thread-191865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:43:12.862 [DEBUG] [Thread-191865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:43:12.862 [DEBUG] [Thread-191865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:43:12.862 [DEBUG] [Thread-191865] [transport.py] [_log()] client lang: <none>
2026-02-14T20:43:12.862 [DEBUG] [Thread-191865] [transport.py] [_log()] server lang: <none>
2026-02-14T20:43:12.862 [DEBUG] [Thread-191865] [transport.py] [_log()] kex follows: False
2026-02-14T20:43:12.862 [DEBUG] [Thread-191865] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:43:12.862 [DEBUG] [Thread-191865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:43:12.862 [DEBUG] [Thread-191865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:43:12.862 [DEBUG] [Thread-191865] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:43:12.862 [DEBUG] [Thread-191865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:43:12.862 [DEBUG] [Thread-191865] [transport.py] [_log()] Compression: none
2026-02-14T20:43:12.863 [DEBUG] [Thread-191865] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:43:12.878 [DEBUG] [Thread-191865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:43:12.879 [DEBUG] [Thread-191865] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:43:12.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:43:12.880 [DEBUG] [Thread-191865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:43:12.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:43:12.881 [DEBUG] [Thread-191865] [transport.py] [_log()] userauth is OK
2026-02-14T20:43:12.881 [DEBUG] [Thread-191865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:43:12.881 [DEBUG] [Thread-191865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:43:12.881 [DEBUG] [Thread-191865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:43:12.881 [DEBUG] [Thread-191865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:43:12.902 [INFO] [Thread-191865] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:43:12.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:43:13.536 [DEBUG] [Thread-191865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:43:13.537 [DEBUG] [Thread-191865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:43:13.537 [DEBUG] [Thread-191865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:43:13.578 [DEBUG] [Thread-191865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:43:13.578 [DEBUG] [Thread-191865] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:43:13.581 [DEBUG] [Thread-191865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:43:13.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:43:13.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:43:13.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:43:13.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:43:13.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:43:13.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:43:13.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:43:13.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:43:13.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:43:13.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.779628 -999.00  +11.00  23.55     59   +3.40 1 1 1 1 1     0    0 6.86 -36.75 ZNESW 27.4 23.6 157.2 30.5 11.4 -25.5 11.3 -24.5 11.1 -23.4 11.4 -24.7
2026-02-14T20:43:13.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:43:13.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:43:13.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.779628
2026-02-14T20:43:13.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:43:13.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:43:13.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:43:13.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:43:13.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:43:13.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:42:49', tmtdew=8.89, humidity=54.29, cloud=0.0, wind=37.32, temperature=11.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:42:39.859', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00575000000000081, 0.0032500000000013074, 0.004250000000000753, -0.01550000000000118, -0.016500000000000625, 0.02325000000000088, -0.019499999999998963, -0.025749999999998607, -0.010500000000000398, -0.012000000000000455, 0.029749999999999943, -0.016000000000000014, 0.05299999999999905, 0.031249999999998224, -0.03300000000000125, -0.042500000000000426, -0.0017500000000012506, -0.0024999999999995026, -0.031000000000000583, -0.05575000000000152, 0.049999999999998934, 0.01574999999999882, -0.008749999999999147, -0.020250000000000767, 0.009499999999999176, 0.026500000000000412, -0.0467499999999994, -0.020500000000000185, 0.09350000000000058, 0.031000000000000583, 0.03900000000000148, -0.008999999999998565, 0.01974999999999838], zp_timestamp='2026-02-14T18:38:00')
2026-02-14T20:43:13.610 [DEBUG] [Thread-191865] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:43:13.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-14T20:43:13.707 [DEBUG] [Thread-191868] [transport.py] [_log()] starting thread (client mode): 0xa2d118d0
2026-02-14T20:43:13.707 [DEBUG] [Thread-191868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:43:13.721 [DEBUG] [Thread-191868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:43:13.721 [INFO] [Thread-191868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:43:13.729 [DEBUG] [Thread-191868] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:43:13.730 [DEBUG] [Thread-191868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:43:13.730 [DEBUG] [Thread-191868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:43:13.730 [DEBUG] [Thread-191868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:43:13.730 [DEBUG] [Thread-191868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:43:13.730 [DEBUG] [Thread-191868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:43:13.730 [DEBUG] [Thread-191868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:43:13.730 [DEBUG] [Thread-191868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:43:13.730 [DEBUG] [Thread-191868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:43:13.730 [DEBUG] [Thread-191868] [transport.py] [_log()] client lang: <none>
2026-02-14T20:43:13.730 [DEBUG] [Thread-191868] [transport.py] [_log()] server lang: <none>
2026-02-14T20:43:13.730 [DEBUG] [Thread-191868] [transport.py] [_log()] kex follows: False
2026-02-14T20:43:13.730 [DEBUG] [Thread-191868] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:43:13.730 [DEBUG] [Thread-191868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:43:13.730 [DEBUG] [Thread-191868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:43:13.730 [DEBUG] [Thread-191868] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:43:13.731 [DEBUG] [Thread-191868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:43:13.731 [DEBUG] [Thread-191868] [transport.py] [_log()] Compression: none
2026-02-14T20:43:13.731 [DEBUG] [Thread-191868] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:43:13.789 [DEBUG] [Thread-191868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:43:13.790 [DEBUG] [Thread-191868] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:43:13.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:43:13.791 [DEBUG] [Thread-191868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:43:13.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:43:13.846 [DEBUG] [Thread-191868] [transport.py] [_log()] userauth is OK
2026-02-14T20:43:13.847 [DEBUG] [Thread-191868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:43:13.847 [DEBUG] [Thread-191868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:43:13.847 [DEBUG] [Thread-191868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:43:13.847 [DEBUG] [Thread-191868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:43:13.861 [INFO] [Thread-191868] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:43:13.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T20:43:13.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:43:14.667 [DEBUG] [Thread-191868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:43:14.668 [DEBUG] [Thread-191868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:43:14.715 [DEBUG] [Thread-191868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:43:14.716 [DEBUG] [Thread-191868] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:43:14.725 [DEBUG] [Thread-191868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:43:14.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:43:14.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:43:14.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:43:14.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:43:14.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:43:14.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:43:14.762 [DEBUG] [Thread-191868] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:43:21.868 [DEBUG] [Thread-191870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:43:33.981 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:43:33.982 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:43:36.903 [DEBUG] [Thread-191871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:43:43.682 [DEBUG] [Thread-191872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:43:44.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:43:44.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:43:44.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:43:46.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 43, 24), 8.9, 54.24, 0.0, 37.19, 11.05, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:43:46.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:43:24
2026-02-14T20:43:47.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:43:47.414 [DEBUG] [Thread-191873] [transport.py] [_log()] starting thread (client mode): 0xa2d10a30
2026-02-14T20:43:47.415 [DEBUG] [Thread-191873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:43:47.434 [DEBUG] [Thread-191873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:43:47.434 [INFO] [Thread-191873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:43:47.437 [DEBUG] [Thread-191873] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:43:47.437 [DEBUG] [Thread-191873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:43:47.437 [DEBUG] [Thread-191873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:43:47.437 [DEBUG] [Thread-191873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:43:47.437 [DEBUG] [Thread-191873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:43:47.437 [DEBUG] [Thread-191873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:43:47.437 [DEBUG] [Thread-191873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:43:47.437 [DEBUG] [Thread-191873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:43:47.437 [DEBUG] [Thread-191873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:43:47.437 [DEBUG] [Thread-191873] [transport.py] [_log()] client lang: <none>
2026-02-14T20:43:47.437 [DEBUG] [Thread-191873] [transport.py] [_log()] server lang: <none>
2026-02-14T20:43:47.437 [DEBUG] [Thread-191873] [transport.py] [_log()] kex follows: False
2026-02-14T20:43:47.437 [DEBUG] [Thread-191873] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:43:47.437 [DEBUG] [Thread-191873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:43:47.437 [DEBUG] [Thread-191873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:43:47.437 [DEBUG] [Thread-191873] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:43:47.437 [DEBUG] [Thread-191873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:43:47.437 [DEBUG] [Thread-191873] [transport.py] [_log()] Compression: none
2026-02-14T20:43:47.437 [DEBUG] [Thread-191873] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:43:47.453 [DEBUG] [Thread-191873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:43:47.453 [DEBUG] [Thread-191873] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:43:47.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:43:47.454 [DEBUG] [Thread-191873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:43:47.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:43:47.457 [DEBUG] [Thread-191873] [transport.py] [_log()] userauth is OK
2026-02-14T20:43:47.457 [DEBUG] [Thread-191873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:43:47.457 [DEBUG] [Thread-191873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:43:47.457 [DEBUG] [Thread-191873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:43:47.457 [DEBUG] [Thread-191873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:43:47.494 [INFO] [Thread-191873] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:43:47.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:43:48.123 [DEBUG] [Thread-191873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:43:48.124 [DEBUG] [Thread-191873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:43:48.124 [DEBUG] [Thread-191873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:43:48.164 [DEBUG] [Thread-191873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:43:48.165 [DEBUG] [Thread-191873] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:43:48.168 [DEBUG] [Thread-191873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:43:48.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:43:48.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:43:48.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:43:48.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:43:48.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:43:48.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:43:48.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:43:48.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:43:48.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:43:48.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.779975 -999.00  +11.00  24.13     59   +3.40 1 1 1 1 1     0    0 6.87 -34.81 ZNESW 27.3 24.1 157.6 33.4 11.4 -25.5 11.3 -24.4 11.1 -23.4 11.4 -24.8
2026-02-14T20:43:48.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:43:48.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:43:48.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.779975
2026-02-14T20:43:48.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:43:48.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:43:48.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:43:48.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:43:48.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:43:48.193 [DEBUG] [Thread-191873] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:43:48.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:43:24', tmtdew=8.9, humidity=54.24, cloud=0.0, wind=37.19, temperature=11.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:43:09.840', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00575000000000081, 0.0032500000000013074, 0.004250000000000753, -0.01550000000000118, -0.016500000000000625, 0.02325000000000088, -0.019499999999998963, -0.025749999999998607, -0.010500000000000398, -0.012000000000000455, 0.029749999999999943, -0.016000000000000014, 0.05299999999999905, 0.031249999999998224, -0.03300000000000125, -0.042500000000000426, -0.0017500000000012506, -0.0024999999999995026, -0.031000000000000583, -0.05575000000000152, 0.049999999999998934, 0.01574999999999882, -0.008749999999999147, -0.020250000000000767, 0.009499999999999176, 0.026500000000000412, -0.0467499999999994, -0.020500000000000185, 0.09350000000000058, 0.031000000000000583, 0.03900000000000148, -0.008999999999998565, 0.01974999999999838], zp_timestamp='2026-02-14T18:38:00')
2026-02-14T20:43:48.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-14T20:43:48.293 [DEBUG] [Thread-191876] [transport.py] [_log()] starting thread (client mode): 0xa5742320
2026-02-14T20:43:48.293 [DEBUG] [Thread-191876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:43:48.308 [DEBUG] [Thread-191876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:43:48.308 [INFO] [Thread-191876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:43:48.316 [DEBUG] [Thread-191876] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:43:48.316 [DEBUG] [Thread-191876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:43:48.316 [DEBUG] [Thread-191876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:43:48.317 [DEBUG] [Thread-191876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:43:48.317 [DEBUG] [Thread-191876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:43:48.317 [DEBUG] [Thread-191876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:43:48.317 [DEBUG] [Thread-191876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:43:48.317 [DEBUG] [Thread-191876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:43:48.317 [DEBUG] [Thread-191876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:43:48.317 [DEBUG] [Thread-191876] [transport.py] [_log()] client lang: <none>
2026-02-14T20:43:48.317 [DEBUG] [Thread-191876] [transport.py] [_log()] server lang: <none>
2026-02-14T20:43:48.317 [DEBUG] [Thread-191876] [transport.py] [_log()] kex follows: False
2026-02-14T20:43:48.317 [DEBUG] [Thread-191876] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:43:48.317 [DEBUG] [Thread-191876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:43:48.317 [DEBUG] [Thread-191876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:43:48.317 [DEBUG] [Thread-191876] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:43:48.317 [DEBUG] [Thread-191876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:43:48.318 [DEBUG] [Thread-191876] [transport.py] [_log()] Compression: none
2026-02-14T20:43:48.318 [DEBUG] [Thread-191876] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:43:48.379 [DEBUG] [Thread-191876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:43:48.379 [DEBUG] [Thread-191876] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:43:48.380 [DEBUG] [Thread-191876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:43:48.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:43:48.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:43:48.435 [DEBUG] [Thread-191876] [transport.py] [_log()] userauth is OK
2026-02-14T20:43:48.435 [DEBUG] [Thread-191876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:43:48.435 [DEBUG] [Thread-191876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:43:48.435 [DEBUG] [Thread-191876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:43:48.435 [DEBUG] [Thread-191876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:43:48.455 [INFO] [Thread-191876] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:43:48.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-14T20:43:48.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:43:49.263 [DEBUG] [Thread-191876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:43:49.264 [DEBUG] [Thread-191876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:43:49.311 [DEBUG] [Thread-191876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:43:49.312 [DEBUG] [Thread-191876] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:43:49.321 [DEBUG] [Thread-191876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:43:49.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:43:49.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-14T20:43:49.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:43:49.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:43:49.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:43:49.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:43:49.358 [DEBUG] [Thread-191876] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:43:51.940 [DEBUG] [Thread-191878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:44:06.993 [DEBUG] [Thread-191879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:44:19.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:44:19.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:44:19.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-14T20:44:21.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 43, 59), 8.84, 54.29, 0.0, 32.98, 11.05, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:44:21.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:43:59
2026-02-14T20:44:21.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:44:21.745 [DEBUG] [Thread-191880] [transport.py] [_log()] starting thread (client mode): 0xa5743250
2026-02-14T20:44:21.745 [DEBUG] [Thread-191880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:44:21.766 [DEBUG] [Thread-191880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:44:21.766 [INFO] [Thread-191880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:44:21.769 [DEBUG] [Thread-191880] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:44:21.770 [DEBUG] [Thread-191880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:44:21.770 [DEBUG] [Thread-191880] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:44:21.770 [DEBUG] [Thread-191880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:44:21.770 [DEBUG] [Thread-191880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:44:21.770 [DEBUG] [Thread-191880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:44:21.770 [DEBUG] [Thread-191880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:44:21.770 [DEBUG] [Thread-191880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:44:21.770 [DEBUG] [Thread-191880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:44:21.770 [DEBUG] [Thread-191880] [transport.py] [_log()] client lang: <none>
2026-02-14T20:44:21.770 [DEBUG] [Thread-191880] [transport.py] [_log()] server lang: <none>
2026-02-14T20:44:21.770 [DEBUG] [Thread-191880] [transport.py] [_log()] kex follows: False
2026-02-14T20:44:21.770 [DEBUG] [Thread-191880] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:44:21.771 [DEBUG] [Thread-191880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:44:21.771 [DEBUG] [Thread-191880] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:44:21.771 [DEBUG] [Thread-191880] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:44:21.771 [DEBUG] [Thread-191880] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:44:21.771 [DEBUG] [Thread-191880] [transport.py] [_log()] Compression: none
2026-02-14T20:44:21.771 [DEBUG] [Thread-191880] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:44:21.790 [DEBUG] [Thread-191880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:44:21.790 [DEBUG] [Thread-191880] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:44:21.791 [DEBUG] [Thread-191880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:44:21.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:44:21.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:44:21.793 [DEBUG] [Thread-191880] [transport.py] [_log()] userauth is OK
2026-02-14T20:44:21.793 [DEBUG] [Thread-191880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:44:21.793 [DEBUG] [Thread-191880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:44:21.794 [DEBUG] [Thread-191880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:44:21.794 [DEBUG] [Thread-191880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:44:21.818 [INFO] [Thread-191880] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:44:21.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:44:22.028 [DEBUG] [Thread-191882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:44:22.476 [DEBUG] [Thread-191880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:44:22.476 [DEBUG] [Thread-191880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:44:22.476 [DEBUG] [Thread-191880] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:44:22.518 [DEBUG] [Thread-191880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:44:22.518 [DEBUG] [Thread-191880] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:44:22.521 [DEBUG] [Thread-191880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:44:22.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:44:22.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:44:22.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:44:22.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:44:22.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:44:22.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:44:22.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:44:22.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:44:22.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:44:22.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.780669 -999.00  +10.90  20.79     59   +3.40 1 1 1 1 1     0    0 6.87 -31.15 ZNESW 23.4 20.8 149.8 34.9 11.4 -25.4 11.2 -24.3 11.1 -23.3 11.4 -24.6
2026-02-14T20:44:22.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:44:22.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:44:22.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.780669
2026-02-14T20:44:22.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:44:22.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:44:22.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:44:22.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:44:22.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:44:22.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:43:59', tmtdew=8.84, humidity=54.29, cloud=0.0, wind=32.98, temperature=11.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:44:09.802', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00575000000000081, 0.0032500000000013074, 0.004250000000000753, -0.01550000000000118, -0.016500000000000625, 0.02325000000000088, -0.019499999999998963, -0.025749999999998607, -0.010500000000000398, -0.012000000000000455, 0.029749999999999943, -0.016000000000000014, 0.05299999999999905, 0.031249999999998224, -0.03300000000000125, -0.042500000000000426, -0.0017500000000012506, -0.0024999999999995026, -0.031000000000000583, -0.05575000000000152, 0.049999999999998934, 0.01574999999999882, -0.008749999999999147, -0.020250000000000767, 0.009499999999999176, 0.026500000000000412, -0.0467499999999994, -0.020500000000000185, 0.09350000000000058, 0.031000000000000583, 0.03900000000000148, -0.008999999999998565, 0.01974999999999838], zp_timestamp='2026-02-14T18:43:00')
2026-02-14T20:44:22.549 [DEBUG] [Thread-191880] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:44:22.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-14T20:44:22.645 [DEBUG] [Thread-191884] [transport.py] [_log()] starting thread (client mode): 0xa5741f60
2026-02-14T20:44:22.645 [DEBUG] [Thread-191884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:44:22.661 [DEBUG] [Thread-191884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:44:22.661 [INFO] [Thread-191884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:44:22.669 [DEBUG] [Thread-191884] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:44:22.669 [DEBUG] [Thread-191884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:44:22.669 [DEBUG] [Thread-191884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:44:22.669 [DEBUG] [Thread-191884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:44:22.670 [DEBUG] [Thread-191884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:44:22.670 [DEBUG] [Thread-191884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:44:22.670 [DEBUG] [Thread-191884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:44:22.670 [DEBUG] [Thread-191884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:44:22.670 [DEBUG] [Thread-191884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:44:22.670 [DEBUG] [Thread-191884] [transport.py] [_log()] client lang: <none>
2026-02-14T20:44:22.670 [DEBUG] [Thread-191884] [transport.py] [_log()] server lang: <none>
2026-02-14T20:44:22.670 [DEBUG] [Thread-191884] [transport.py] [_log()] kex follows: False
2026-02-14T20:44:22.670 [DEBUG] [Thread-191884] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:44:22.670 [DEBUG] [Thread-191884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:44:22.670 [DEBUG] [Thread-191884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:44:22.670 [DEBUG] [Thread-191884] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:44:22.670 [DEBUG] [Thread-191884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:44:22.671 [DEBUG] [Thread-191884] [transport.py] [_log()] Compression: none
2026-02-14T20:44:22.671 [DEBUG] [Thread-191884] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:44:22.727 [DEBUG] [Thread-191884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:44:22.727 [DEBUG] [Thread-191884] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:44:22.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:44:22.729 [DEBUG] [Thread-191884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:44:22.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:44:22.783 [DEBUG] [Thread-191884] [transport.py] [_log()] userauth is OK
2026-02-14T20:44:22.783 [DEBUG] [Thread-191884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:44:22.783 [DEBUG] [Thread-191884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:44:22.783 [DEBUG] [Thread-191884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:44:22.784 [DEBUG] [Thread-191884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:44:22.809 [INFO] [Thread-191884] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:44:22.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T20:44:22.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:44:23.629 [DEBUG] [Thread-191884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:44:23.630 [DEBUG] [Thread-191884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:44:23.677 [DEBUG] [Thread-191884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:44:23.677 [DEBUG] [Thread-191884] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:44:23.686 [DEBUG] [Thread-191884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:44:23.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:44:23.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-14T20:44:23.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-14T20:44:23.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:44:23.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:44:23.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:44:23.728 [DEBUG] [Thread-191884] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:44:27.033 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:44:29.021 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:44:34.181 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:44:34.182 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:44:37.062 [DEBUG] [Thread-191886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:44:43.739 [DEBUG] [Thread-191887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:44:52.124 [DEBUG] [Thread-191888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:44:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:44:53.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:44:53.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-14T20:44:55.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 44, 34), 9.04, 53.75, 0.0, 46.57, 11.47, 0, 0, 0, 2, 1, 0),)
2026-02-14T20:44:55.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:44:34
2026-02-14T20:44:55.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:44:56.105 [DEBUG] [Thread-191889] [transport.py] [_log()] starting thread (client mode): 0xa2d6d300
2026-02-14T20:44:56.105 [DEBUG] [Thread-191889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:44:56.125 [DEBUG] [Thread-191889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:44:56.126 [INFO] [Thread-191889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:44:56.129 [DEBUG] [Thread-191889] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:44:56.138 [DEBUG] [Thread-191889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:44:56.138 [DEBUG] [Thread-191889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:44:56.138 [DEBUG] [Thread-191889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:44:56.138 [DEBUG] [Thread-191889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:44:56.138 [DEBUG] [Thread-191889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:44:56.138 [DEBUG] [Thread-191889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:44:56.138 [DEBUG] [Thread-191889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:44:56.139 [DEBUG] [Thread-191889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:44:56.139 [DEBUG] [Thread-191889] [transport.py] [_log()] client lang: <none>
2026-02-14T20:44:56.139 [DEBUG] [Thread-191889] [transport.py] [_log()] server lang: <none>
2026-02-14T20:44:56.139 [DEBUG] [Thread-191889] [transport.py] [_log()] kex follows: False
2026-02-14T20:44:56.139 [DEBUG] [Thread-191889] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:44:56.139 [DEBUG] [Thread-191889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:44:56.139 [DEBUG] [Thread-191889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:44:56.139 [DEBUG] [Thread-191889] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:44:56.139 [DEBUG] [Thread-191889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:44:56.139 [DEBUG] [Thread-191889] [transport.py] [_log()] Compression: none
2026-02-14T20:44:56.139 [DEBUG] [Thread-191889] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:44:56.159 [DEBUG] [Thread-191889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:44:56.159 [DEBUG] [Thread-191889] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:44:56.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:44:56.161 [DEBUG] [Thread-191889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:44:56.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:44:56.163 [DEBUG] [Thread-191889] [transport.py] [_log()] userauth is OK
2026-02-14T20:44:56.163 [DEBUG] [Thread-191889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:44:56.163 [DEBUG] [Thread-191889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:44:56.163 [DEBUG] [Thread-191889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:44:56.163 [DEBUG] [Thread-191889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:44:56.200 [INFO] [Thread-191889] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:44:56.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:44:56.851 [DEBUG] [Thread-191889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:44:56.852 [DEBUG] [Thread-191889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:44:56.852 [DEBUG] [Thread-191889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:44:56.892 [DEBUG] [Thread-191889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:44:56.892 [DEBUG] [Thread-191889] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:44:56.894 [DEBUG] [Thread-191889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:44:56.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:44:56.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:44:56.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:44:56.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:44:56.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:44:56.915 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:44:56.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:44:56.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:44:56.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:44:56.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.781017 -999.00  +10.90  29.75     59   +3.40 1 1 1 1 1     0    0 6.81 -33.32 ZNESW 24.7 29.8 161.8 38.3 11.4 -25.2 11.2 -24.4 11.1 -23.4 11.4 -24.6
2026-02-14T20:44:56.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:44:56.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:44:56.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.781017
2026-02-14T20:44:56.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:44:56.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:44:56.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:44:56.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:44:56.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:44:56.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:44:34', tmtdew=9.04, humidity=53.75, cloud=0.0, wind=46.57, temperature=11.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:44:39.869', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00575000000000081, 0.0032500000000013074, 0.004250000000000753, -0.01550000000000118, -0.016500000000000625, 0.02325000000000088, -0.019499999999998963, -0.025749999999998607, -0.010500000000000398, -0.012000000000000455, 0.029749999999999943, -0.016000000000000014, 0.05299999999999905, 0.031249999999998224, -0.03300000000000125, -0.042500000000000426, -0.0017500000000012506, -0.0024999999999995026, -0.031000000000000583, -0.05575000000000152, 0.049999999999998934, 0.01574999999999882, -0.008749999999999147, -0.020250000000000767, 0.009499999999999176, 0.026500000000000412, -0.0467499999999994, -0.020500000000000185, 0.09350000000000058, 0.031000000000000583, 0.03900000000000148, -0.008999999999998565, 0.01974999999999838], zp_timestamp='2026-02-14T18:43:00')
2026-02-14T20:44:56.916 [DEBUG] [Thread-191889] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:44:56.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-14T20:44:57.000 [DEBUG] [Thread-191892] [transport.py] [_log()] starting thread (client mode): 0xa2d6faf0
2026-02-14T20:44:57.000 [DEBUG] [Thread-191892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:44:57.015 [DEBUG] [Thread-191892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:44:57.015 [INFO] [Thread-191892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:44:57.022 [DEBUG] [Thread-191892] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:44:57.022 [DEBUG] [Thread-191892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:44:57.022 [DEBUG] [Thread-191892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:44:57.023 [DEBUG] [Thread-191892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:44:57.023 [DEBUG] [Thread-191892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:44:57.023 [DEBUG] [Thread-191892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:44:57.023 [DEBUG] [Thread-191892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:44:57.023 [DEBUG] [Thread-191892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:44:57.023 [DEBUG] [Thread-191892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:44:57.023 [DEBUG] [Thread-191892] [transport.py] [_log()] client lang: <none>
2026-02-14T20:44:57.023 [DEBUG] [Thread-191892] [transport.py] [_log()] server lang: <none>
2026-02-14T20:44:57.023 [DEBUG] [Thread-191892] [transport.py] [_log()] kex follows: False
2026-02-14T20:44:57.023 [DEBUG] [Thread-191892] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:44:57.023 [DEBUG] [Thread-191892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:44:57.023 [DEBUG] [Thread-191892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:44:57.023 [DEBUG] [Thread-191892] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:44:57.023 [DEBUG] [Thread-191892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:44:57.023 [DEBUG] [Thread-191892] [transport.py] [_log()] Compression: none
2026-02-14T20:44:57.023 [DEBUG] [Thread-191892] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:44:57.082 [DEBUG] [Thread-191892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:44:57.083 [DEBUG] [Thread-191892] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:44:57.083 [DEBUG] [Thread-191892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:44:57.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:44:57.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:44:57.139 [DEBUG] [Thread-191892] [transport.py] [_log()] userauth is OK
2026-02-14T20:44:57.139 [DEBUG] [Thread-191892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:44:57.139 [DEBUG] [Thread-191892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:44:57.140 [DEBUG] [Thread-191892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:44:57.140 [DEBUG] [Thread-191892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:44:57.164 [INFO] [Thread-191892] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:44:57.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-14T20:44:57.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:44:57.998 [DEBUG] [Thread-191892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:44:57.999 [DEBUG] [Thread-191892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:44:58.046 [DEBUG] [Thread-191892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:44:58.046 [DEBUG] [Thread-191892] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:44:58.055 [DEBUG] [Thread-191892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:44:58.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:44:58.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-14T20:44:58.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-14T20:44:58.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:44:58.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:44:58.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:44:58.089 [DEBUG] [Thread-191892] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:45:07.159 [DEBUG] [Thread-191894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:45:22.209 [DEBUG] [Thread-191895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:45:28.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:45:28.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:45:28.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-14T20:45:29.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 45, 10), 8.82, 54.34, 0.0, 38.59, 11.0, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:45:29.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:45:10
2026-02-14T20:45:30.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:45:30.486 [DEBUG] [Thread-191896] [transport.py] [_log()] starting thread (client mode): 0xa2d6d9f0
2026-02-14T20:45:30.486 [DEBUG] [Thread-191896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:45:30.506 [DEBUG] [Thread-191896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:45:30.506 [INFO] [Thread-191896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:45:30.507 [DEBUG] [Thread-191896] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:45:30.508 [DEBUG] [Thread-191896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:45:30.508 [DEBUG] [Thread-191896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:45:30.508 [DEBUG] [Thread-191896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:45:30.508 [DEBUG] [Thread-191896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:45:30.508 [DEBUG] [Thread-191896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:45:30.508 [DEBUG] [Thread-191896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:45:30.508 [DEBUG] [Thread-191896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:45:30.508 [DEBUG] [Thread-191896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:45:30.508 [DEBUG] [Thread-191896] [transport.py] [_log()] client lang: <none>
2026-02-14T20:45:30.508 [DEBUG] [Thread-191896] [transport.py] [_log()] server lang: <none>
2026-02-14T20:45:30.508 [DEBUG] [Thread-191896] [transport.py] [_log()] kex follows: False
2026-02-14T20:45:30.508 [DEBUG] [Thread-191896] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:45:30.508 [DEBUG] [Thread-191896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:45:30.508 [DEBUG] [Thread-191896] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:45:30.508 [DEBUG] [Thread-191896] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:45:30.508 [DEBUG] [Thread-191896] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:45:30.508 [DEBUG] [Thread-191896] [transport.py] [_log()] Compression: none
2026-02-14T20:45:30.508 [DEBUG] [Thread-191896] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:45:30.516 [DEBUG] [Thread-191896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:45:30.516 [DEBUG] [Thread-191896] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:45:30.516 [DEBUG] [Thread-191896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:45:30.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:45:30.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:45:30.518 [DEBUG] [Thread-191896] [transport.py] [_log()] userauth is OK
2026-02-14T20:45:30.518 [DEBUG] [Thread-191896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:45:30.518 [DEBUG] [Thread-191896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:45:30.518 [DEBUG] [Thread-191896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:45:30.518 [DEBUG] [Thread-191896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:45:30.542 [INFO] [Thread-191896] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:45:30.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:45:31.151 [DEBUG] [Thread-191896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:45:31.151 [DEBUG] [Thread-191896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:45:31.152 [DEBUG] [Thread-191896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:45:31.192 [DEBUG] [Thread-191896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:45:31.192 [DEBUG] [Thread-191896] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:45:31.195 [DEBUG] [Thread-191896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:45:31.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:45:31.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:45:31.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:45:31.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:45:31.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:45:31.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:45:31.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:45:31.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:45:31.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:45:31.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.781363 -999.00  +10.90  28.39     59   +3.40 1 1 1 1 1     0    0 6.83 -32.87 ZNESW 33.2 28.4 161.3 42.4 11.4 -25.3 11.2 -24.3 11.0 -23.4 11.4 -24.5
2026-02-14T20:45:31.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:45:31.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:45:31.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.781363
2026-02-14T20:45:31.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:45:31.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:45:31.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:45:31.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:45:31.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:45:31.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:45:10', tmtdew=8.82, humidity=54.34, cloud=0.0, wind=38.59, temperature=11.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:45:09.763', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00575000000000081, 0.0032500000000013074, 0.004250000000000753, -0.01550000000000118, -0.016500000000000625, 0.02325000000000088, -0.019499999999998963, -0.025749999999998607, -0.010500000000000398, -0.012000000000000455, 0.029749999999999943, -0.016000000000000014, 0.05299999999999905, 0.031249999999998224, -0.03300000000000125, -0.042500000000000426, -0.0017500000000012506, -0.0024999999999995026, -0.031000000000000583, -0.05575000000000152, 0.049999999999998934, 0.01574999999999882, -0.008749999999999147, -0.020250000000000767, 0.009499999999999176, 0.026500000000000412, -0.0467499999999994, -0.020500000000000185, 0.09350000000000058, 0.031000000000000583, 0.03900000000000148, -0.008999999999998565, 0.01974999999999838], zp_timestamp='2026-02-14T18:43:00')
2026-02-14T20:45:31.222 [DEBUG] [Thread-191896] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:45:31.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-14T20:45:31.317 [DEBUG] [Thread-191899] [transport.py] [_log()] starting thread (client mode): 0xa2d6c910
2026-02-14T20:45:31.318 [DEBUG] [Thread-191899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:45:31.332 [DEBUG] [Thread-191899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:45:31.333 [INFO] [Thread-191899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:45:31.340 [DEBUG] [Thread-191899] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:45:31.340 [DEBUG] [Thread-191899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:45:31.340 [DEBUG] [Thread-191899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:45:31.341 [DEBUG] [Thread-191899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:45:31.341 [DEBUG] [Thread-191899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:45:31.341 [DEBUG] [Thread-191899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:45:31.341 [DEBUG] [Thread-191899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:45:31.341 [DEBUG] [Thread-191899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:45:31.341 [DEBUG] [Thread-191899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:45:31.342 [DEBUG] [Thread-191899] [transport.py] [_log()] client lang: <none>
2026-02-14T20:45:31.342 [DEBUG] [Thread-191899] [transport.py] [_log()] server lang: <none>
2026-02-14T20:45:31.342 [DEBUG] [Thread-191899] [transport.py] [_log()] kex follows: False
2026-02-14T20:45:31.342 [DEBUG] [Thread-191899] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:45:31.342 [DEBUG] [Thread-191899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:45:31.342 [DEBUG] [Thread-191899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:45:31.342 [DEBUG] [Thread-191899] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:45:31.342 [DEBUG] [Thread-191899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:45:31.342 [DEBUG] [Thread-191899] [transport.py] [_log()] Compression: none
2026-02-14T20:45:31.342 [DEBUG] [Thread-191899] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:45:31.398 [DEBUG] [Thread-191899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:45:31.398 [DEBUG] [Thread-191899] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:45:31.398 [DEBUG] [Thread-191899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:45:31.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:45:31.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:45:31.454 [DEBUG] [Thread-191899] [transport.py] [_log()] userauth is OK
2026-02-14T20:45:31.455 [DEBUG] [Thread-191899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:45:31.455 [DEBUG] [Thread-191899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:45:31.455 [DEBUG] [Thread-191899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:45:31.455 [DEBUG] [Thread-191899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:45:31.474 [INFO] [Thread-191899] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:45:31.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-14T20:45:31.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:45:32.309 [DEBUG] [Thread-191899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:45:32.309 [DEBUG] [Thread-191899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:45:32.357 [DEBUG] [Thread-191899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:45:32.357 [DEBUG] [Thread-191899] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:45:32.365 [DEBUG] [Thread-191899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:45:32.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:45:32.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-14T20:45:32.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:45:32.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:45:32.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:45:32.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:45:32.398 [DEBUG] [Thread-191899] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:45:34.382 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:45:34.383 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:45:37.245 [DEBUG] [Thread-191901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:45:43.797 [DEBUG] [Thread-191902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:45:51.609 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:45:52.301 [DEBUG] [Thread-191903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:46:00.824 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:46:02.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:46:02.421 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:46:02.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-14T20:46:04.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 45, 46), 8.8, 54.41, 0.0, 37.58, 10.99, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:46:04.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:45:46
2026-02-14T20:46:04.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:46:04.982 [DEBUG] [Thread-191904] [transport.py] [_log()] starting thread (client mode): 0xa2d6eb00
2026-02-14T20:46:04.982 [DEBUG] [Thread-191904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:46:05.001 [DEBUG] [Thread-191904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:46:05.001 [INFO] [Thread-191904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:46:05.004 [DEBUG] [Thread-191904] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:46:05.004 [DEBUG] [Thread-191904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:46:05.004 [DEBUG] [Thread-191904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:46:05.004 [DEBUG] [Thread-191904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:46:05.005 [DEBUG] [Thread-191904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:46:05.005 [DEBUG] [Thread-191904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:46:05.005 [DEBUG] [Thread-191904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:46:05.005 [DEBUG] [Thread-191904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:46:05.005 [DEBUG] [Thread-191904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:46:05.005 [DEBUG] [Thread-191904] [transport.py] [_log()] client lang: <none>
2026-02-14T20:46:05.005 [DEBUG] [Thread-191904] [transport.py] [_log()] server lang: <none>
2026-02-14T20:46:05.005 [DEBUG] [Thread-191904] [transport.py] [_log()] kex follows: False
2026-02-14T20:46:05.005 [DEBUG] [Thread-191904] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:46:05.005 [DEBUG] [Thread-191904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:46:05.005 [DEBUG] [Thread-191904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:46:05.005 [DEBUG] [Thread-191904] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:46:05.005 [DEBUG] [Thread-191904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:46:05.005 [DEBUG] [Thread-191904] [transport.py] [_log()] Compression: none
2026-02-14T20:46:05.005 [DEBUG] [Thread-191904] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:46:05.021 [DEBUG] [Thread-191904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:46:05.021 [DEBUG] [Thread-191904] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:46:05.021 [DEBUG] [Thread-191904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:46:05.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:46:05.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:46:05.022 [DEBUG] [Thread-191904] [transport.py] [_log()] userauth is OK
2026-02-14T20:46:05.022 [DEBUG] [Thread-191904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:46:05.022 [DEBUG] [Thread-191904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:46:05.022 [DEBUG] [Thread-191904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:46:05.022 [DEBUG] [Thread-191904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:46:05.031 [INFO] [Thread-191904] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:46:05.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:46:05.621 [DEBUG] [Thread-191904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:46:05.621 [DEBUG] [Thread-191904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:46:05.622 [DEBUG] [Thread-191904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:46:05.662 [DEBUG] [Thread-191904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:46:05.663 [DEBUG] [Thread-191904] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:46:05.666 [DEBUG] [Thread-191904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:46:05.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:46:05.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:46:05.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:46:05.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:46:05.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:46:05.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:46:05.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:46:05.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:46:05.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:46:05.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.781711 -999.00  +10.90  30.87     59   +3.40 1 1 2 1 1     0    0 6.88 -30.90 ZNESW 29.0 30.9 172.8 36.5 11.4 -25.4 11.2 -24.4 11.1 -23.4 11.4 -24.6
2026-02-14T20:46:05.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:46:05.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:46:05.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.781711
2026-02-14T20:46:05.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:46:05.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:46:05.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:46:05.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:46:05.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:46:05.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:45:46', tmtdew=8.8, humidity=54.41, cloud=0.0, wind=37.58, temperature=10.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:45:39.830', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00575000000000081, 0.0032500000000013074, 0.004250000000000753, -0.01550000000000118, -0.016500000000000625, 0.02325000000000088, -0.019499999999998963, -0.025749999999998607, -0.010500000000000398, -0.012000000000000455, 0.029749999999999943, -0.016000000000000014, 0.05299999999999905, 0.031249999999998224, -0.03300000000000125, -0.042500000000000426, -0.0017500000000012506, -0.0024999999999995026, -0.031000000000000583, -0.05575000000000152, 0.049999999999998934, 0.01574999999999882, -0.008749999999999147, -0.020250000000000767, 0.009499999999999176, 0.026500000000000412, -0.0467499999999994, -0.020500000000000185, 0.09350000000000058, 0.031000000000000583, 0.03900000000000148, -0.008999999999998565, 0.01974999999999838], zp_timestamp='2026-02-14T18:43:00')
2026-02-14T20:46:05.693 [DEBUG] [Thread-191904] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:46:05.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-14T20:46:05.795 [DEBUG] [Thread-191907] [transport.py] [_log()] starting thread (client mode): 0xa2d6edd0
2026-02-14T20:46:05.795 [DEBUG] [Thread-191907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:46:05.811 [DEBUG] [Thread-191907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:46:05.811 [INFO] [Thread-191907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:46:05.818 [DEBUG] [Thread-191907] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:46:05.818 [DEBUG] [Thread-191907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:46:05.818 [DEBUG] [Thread-191907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:46:05.818 [DEBUG] [Thread-191907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:46:05.818 [DEBUG] [Thread-191907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:46:05.818 [DEBUG] [Thread-191907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:46:05.818 [DEBUG] [Thread-191907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:46:05.818 [DEBUG] [Thread-191907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:46:05.818 [DEBUG] [Thread-191907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:46:05.819 [DEBUG] [Thread-191907] [transport.py] [_log()] client lang: <none>
2026-02-14T20:46:05.819 [DEBUG] [Thread-191907] [transport.py] [_log()] server lang: <none>
2026-02-14T20:46:05.819 [DEBUG] [Thread-191907] [transport.py] [_log()] kex follows: False
2026-02-14T20:46:05.819 [DEBUG] [Thread-191907] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:46:05.819 [DEBUG] [Thread-191907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:46:05.819 [DEBUG] [Thread-191907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:46:05.819 [DEBUG] [Thread-191907] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:46:05.819 [DEBUG] [Thread-191907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:46:05.819 [DEBUG] [Thread-191907] [transport.py] [_log()] Compression: none
2026-02-14T20:46:05.819 [DEBUG] [Thread-191907] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:46:05.877 [DEBUG] [Thread-191907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:46:05.877 [DEBUG] [Thread-191907] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:46:05.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:46:05.878 [DEBUG] [Thread-191907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:46:05.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:46:05.934 [DEBUG] [Thread-191907] [transport.py] [_log()] userauth is OK
2026-02-14T20:46:05.934 [DEBUG] [Thread-191907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:46:05.934 [DEBUG] [Thread-191907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:46:05.934 [DEBUG] [Thread-191907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:46:05.934 [DEBUG] [Thread-191907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:46:05.952 [INFO] [Thread-191907] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:46:05.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T20:46:05.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:46:06.785 [DEBUG] [Thread-191907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:46:06.785 [DEBUG] [Thread-191907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:46:06.833 [DEBUG] [Thread-191907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:46:06.833 [DEBUG] [Thread-191907] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:46:06.842 [DEBUG] [Thread-191907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:46:06.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:46:06.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-14T20:46:06.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-14T20:46:06.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:46:06.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:46:06.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:46:06.879 [DEBUG] [Thread-191907] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:46:07.339 [DEBUG] [Thread-191909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:46:22.393 [DEBUG] [Thread-191910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:46:34.583 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:46:34.584 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:46:36.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:46:36.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:46:36.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:46:37.429 [DEBUG] [Thread-191911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:46:38.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 46, 23), 8.8, 54.42, 0.0, 36.58, 11.0, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:46:38.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:46:23
2026-02-14T20:46:39.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:46:39.413 [DEBUG] [Thread-191912] [transport.py] [_log()] starting thread (client mode): 0xa2d6e4a0
2026-02-14T20:46:39.413 [DEBUG] [Thread-191912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:46:39.433 [DEBUG] [Thread-191912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:46:39.433 [INFO] [Thread-191912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:46:39.436 [DEBUG] [Thread-191912] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:46:39.436 [DEBUG] [Thread-191912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:46:39.436 [DEBUG] [Thread-191912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:46:39.437 [DEBUG] [Thread-191912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:46:39.437 [DEBUG] [Thread-191912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:46:39.437 [DEBUG] [Thread-191912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:46:39.437 [DEBUG] [Thread-191912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:46:39.437 [DEBUG] [Thread-191912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:46:39.437 [DEBUG] [Thread-191912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:46:39.437 [DEBUG] [Thread-191912] [transport.py] [_log()] client lang: <none>
2026-02-14T20:46:39.437 [DEBUG] [Thread-191912] [transport.py] [_log()] server lang: <none>
2026-02-14T20:46:39.437 [DEBUG] [Thread-191912] [transport.py] [_log()] kex follows: False
2026-02-14T20:46:39.437 [DEBUG] [Thread-191912] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:46:39.437 [DEBUG] [Thread-191912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:46:39.437 [DEBUG] [Thread-191912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:46:39.437 [DEBUG] [Thread-191912] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:46:39.437 [DEBUG] [Thread-191912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:46:39.437 [DEBUG] [Thread-191912] [transport.py] [_log()] Compression: none
2026-02-14T20:46:39.437 [DEBUG] [Thread-191912] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:46:39.453 [DEBUG] [Thread-191912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:46:39.454 [DEBUG] [Thread-191912] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:46:39.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:46:39.455 [DEBUG] [Thread-191912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:46:39.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:46:39.457 [DEBUG] [Thread-191912] [transport.py] [_log()] userauth is OK
2026-02-14T20:46:39.457 [DEBUG] [Thread-191912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:46:39.457 [DEBUG] [Thread-191912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:46:39.458 [DEBUG] [Thread-191912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:46:39.458 [DEBUG] [Thread-191912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:46:39.477 [INFO] [Thread-191912] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:46:39.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:46:40.056 [DEBUG] [Thread-191912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:46:40.057 [DEBUG] [Thread-191912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:46:40.057 [DEBUG] [Thread-191912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:46:40.098 [DEBUG] [Thread-191912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:46:40.098 [DEBUG] [Thread-191912] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:46:40.101 [DEBUG] [Thread-191912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:46:40.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:46:40.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:46:40.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:46:40.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:46:40.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:46:40.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:46:40.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:46:40.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:46:40.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:46:40.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.782058 -999.00  +10.90  28.58     59   +3.40 1 1 1 1 1     0    0 6.77 -31.69 ZNESW 25.0 28.6 144.0 33.0 11.4 -25.4 11.2 -24.3 11.1 -23.5 11.4 -24.6
2026-02-14T20:46:40.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:46:40.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:46:40.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.782058
2026-02-14T20:46:40.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:46:40.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:46:40.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:46:40.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:46:40.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:46:40.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:46:23', tmtdew=8.8, humidity=54.42, cloud=0.0, wind=36.58, temperature=11.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:46:09.811', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00575000000000081, 0.0032500000000013074, 0.004250000000000753, -0.01550000000000118, -0.016500000000000625, 0.02325000000000088, -0.019499999999998963, -0.025749999999998607, -0.010500000000000398, -0.012000000000000455, 0.029749999999999943, -0.016000000000000014, 0.05299999999999905, 0.031249999999998224, -0.03300000000000125, -0.042500000000000426, -0.0017500000000012506, -0.0024999999999995026, -0.031000000000000583, -0.05575000000000152, 0.049999999999998934, 0.01574999999999882, -0.008749999999999147, -0.020250000000000767, 0.009499999999999176, 0.026500000000000412, -0.0467499999999994, -0.020500000000000185, 0.09350000000000058, 0.031000000000000583, 0.03900000000000148, -0.008999999999998565, 0.01974999999999838], zp_timestamp='2026-02-14T18:43:00')
2026-02-14T20:46:40.127 [DEBUG] [Thread-191912] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:46:40.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-14T20:46:40.223 [DEBUG] [Thread-191915] [transport.py] [_log()] starting thread (client mode): 0xa2d6d390
2026-02-14T20:46:40.223 [DEBUG] [Thread-191915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:46:40.241 [DEBUG] [Thread-191915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:46:40.242 [INFO] [Thread-191915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:46:40.249 [DEBUG] [Thread-191915] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:46:40.249 [DEBUG] [Thread-191915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:46:40.249 [DEBUG] [Thread-191915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:46:40.249 [DEBUG] [Thread-191915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:46:40.249 [DEBUG] [Thread-191915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:46:40.249 [DEBUG] [Thread-191915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:46:40.249 [DEBUG] [Thread-191915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:46:40.250 [DEBUG] [Thread-191915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:46:40.250 [DEBUG] [Thread-191915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:46:40.250 [DEBUG] [Thread-191915] [transport.py] [_log()] client lang: <none>
2026-02-14T20:46:40.250 [DEBUG] [Thread-191915] [transport.py] [_log()] server lang: <none>
2026-02-14T20:46:40.250 [DEBUG] [Thread-191915] [transport.py] [_log()] kex follows: False
2026-02-14T20:46:40.250 [DEBUG] [Thread-191915] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:46:40.250 [DEBUG] [Thread-191915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:46:40.250 [DEBUG] [Thread-191915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:46:40.250 [DEBUG] [Thread-191915] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:46:40.250 [DEBUG] [Thread-191915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:46:40.250 [DEBUG] [Thread-191915] [transport.py] [_log()] Compression: none
2026-02-14T20:46:40.250 [DEBUG] [Thread-191915] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:46:40.305 [DEBUG] [Thread-191915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:46:40.305 [DEBUG] [Thread-191915] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:46:40.305 [DEBUG] [Thread-191915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:46:40.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:46:40.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:46:40.365 [DEBUG] [Thread-191915] [transport.py] [_log()] userauth is OK
2026-02-14T20:46:40.365 [DEBUG] [Thread-191915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:46:40.365 [DEBUG] [Thread-191915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:46:40.365 [DEBUG] [Thread-191915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:46:40.365 [DEBUG] [Thread-191915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:46:40.384 [INFO] [Thread-191915] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:46:40.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-14T20:46:40.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:46:41.239 [DEBUG] [Thread-191915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:46:41.239 [DEBUG] [Thread-191915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:46:41.287 [DEBUG] [Thread-191915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:46:41.288 [DEBUG] [Thread-191915] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:46:41.297 [DEBUG] [Thread-191915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:46:41.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:46:41.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-14T20:46:41.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:46:41.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:46:41.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:46:41.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:46:41.335 [DEBUG] [Thread-191915] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:46:43.866 [DEBUG] [Thread-191917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:46:52.467 [DEBUG] [Thread-191918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:47:07.523 [DEBUG] [Thread-191919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:47:11.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:47:11.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:47:11.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-14T20:47:13.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 46, 58), 8.79, 54.47, 0.0, 40.35, 11.0, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:47:13.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:46:58
2026-02-14T20:47:13.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:47:13.716 [DEBUG] [Thread-191920] [transport.py] [_log()] starting thread (client mode): 0xa2d6c490
2026-02-14T20:47:13.716 [DEBUG] [Thread-191920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:47:13.729 [DEBUG] [Thread-191920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:47:13.729 [INFO] [Thread-191920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:47:13.732 [DEBUG] [Thread-191920] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:47:13.732 [DEBUG] [Thread-191920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:47:13.732 [DEBUG] [Thread-191920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:47:13.732 [DEBUG] [Thread-191920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:47:13.732 [DEBUG] [Thread-191920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:47:13.732 [DEBUG] [Thread-191920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:47:13.732 [DEBUG] [Thread-191920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:47:13.732 [DEBUG] [Thread-191920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:47:13.732 [DEBUG] [Thread-191920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:47:13.732 [DEBUG] [Thread-191920] [transport.py] [_log()] client lang: <none>
2026-02-14T20:47:13.732 [DEBUG] [Thread-191920] [transport.py] [_log()] server lang: <none>
2026-02-14T20:47:13.732 [DEBUG] [Thread-191920] [transport.py] [_log()] kex follows: False
2026-02-14T20:47:13.732 [DEBUG] [Thread-191920] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:47:13.732 [DEBUG] [Thread-191920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:47:13.732 [DEBUG] [Thread-191920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:47:13.732 [DEBUG] [Thread-191920] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:47:13.732 [DEBUG] [Thread-191920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:47:13.732 [DEBUG] [Thread-191920] [transport.py] [_log()] Compression: none
2026-02-14T20:47:13.732 [DEBUG] [Thread-191920] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:47:13.748 [DEBUG] [Thread-191920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:47:13.749 [DEBUG] [Thread-191920] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:47:13.749 [DEBUG] [Thread-191920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:47:13.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:47:13.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:47:13.751 [DEBUG] [Thread-191920] [transport.py] [_log()] userauth is OK
2026-02-14T20:47:13.751 [DEBUG] [Thread-191920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:47:13.751 [DEBUG] [Thread-191920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:47:13.751 [DEBUG] [Thread-191920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:47:13.751 [DEBUG] [Thread-191920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:47:13.775 [INFO] [Thread-191920] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:47:13.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:47:14.090 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:47:14.421 [DEBUG] [Thread-191920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:47:14.421 [DEBUG] [Thread-191920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:47:14.422 [DEBUG] [Thread-191920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:47:14.462 [DEBUG] [Thread-191920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:47:14.462 [DEBUG] [Thread-191920] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:47:14.466 [DEBUG] [Thread-191920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:47:14.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:47:14.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:47:14.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:47:14.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:47:14.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:47:14.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:47:14.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:47:14.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:47:14.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:47:14.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.782405 -999.00  +10.90  31.32     59   +3.40 1 1 2 1 1     0    0 6.81 -31.43 ZNESW 25.4 31.3 154.6 37.0 11.4 -25.3 11.2 -24.4 11.1 -23.4 11.4 -24.6
2026-02-14T20:47:14.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:47:14.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:47:14.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.782405
2026-02-14T20:47:14.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:47:14.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:47:14.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:47:14.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:47:14.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:47:14.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:46:58', tmtdew=8.79, humidity=54.47, cloud=0.0, wind=40.35, temperature=11.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:46:39.792', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.006250000000001421, 0.0037500000000019185, -0.02450000000000152, -0.01249999999999929, 0.043250000000000455, 0.0014999999999982805, 0.01025000000000098, 0.021999999999998465, -0.023999999999999133, 0.004249999999998977, -0.005000000000000782, 0.07099999999999973, 0.03725000000000023, -0.03500000000000014, -0.009999999999999787, 0.025249999999999773, 0.013500000000000512, -0.021000000000000796, -0.0677500000000002, 0.06349999999999767, 0.039749999999997954, 0.0017500000000012506, -0.019249999999999545, 0.0129999999999999, 0.03250000000000064, -0.009249999999999758, -0.005999999999998451, 0.08300000000000018, 0.021000000000000796, 0.027000000000001023, -0.02499999999999858, 0.03524999999999778], zp_timestamp='2026-02-14T18:45:00')
2026-02-14T20:47:14.493 [DEBUG] [Thread-191920] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:47:14.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-14T20:47:14.588 [DEBUG] [Thread-191923] [transport.py] [_log()] starting thread (client mode): 0xa2d6c700
2026-02-14T20:47:14.588 [DEBUG] [Thread-191923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:47:14.602 [DEBUG] [Thread-191923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:47:14.603 [INFO] [Thread-191923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:47:14.610 [DEBUG] [Thread-191923] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:47:14.610 [DEBUG] [Thread-191923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:47:14.611 [DEBUG] [Thread-191923] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:47:14.611 [DEBUG] [Thread-191923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:47:14.611 [DEBUG] [Thread-191923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:47:14.611 [DEBUG] [Thread-191923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:47:14.611 [DEBUG] [Thread-191923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:47:14.611 [DEBUG] [Thread-191923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:47:14.611 [DEBUG] [Thread-191923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:47:14.611 [DEBUG] [Thread-191923] [transport.py] [_log()] client lang: <none>
2026-02-14T20:47:14.611 [DEBUG] [Thread-191923] [transport.py] [_log()] server lang: <none>
2026-02-14T20:47:14.611 [DEBUG] [Thread-191923] [transport.py] [_log()] kex follows: False
2026-02-14T20:47:14.611 [DEBUG] [Thread-191923] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:47:14.611 [DEBUG] [Thread-191923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:47:14.611 [DEBUG] [Thread-191923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:47:14.611 [DEBUG] [Thread-191923] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:47:14.611 [DEBUG] [Thread-191923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:47:14.611 [DEBUG] [Thread-191923] [transport.py] [_log()] Compression: none
2026-02-14T20:47:14.611 [DEBUG] [Thread-191923] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:47:14.670 [DEBUG] [Thread-191923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:47:14.671 [DEBUG] [Thread-191923] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:47:14.671 [DEBUG] [Thread-191923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:47:14.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:47:14.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:47:14.727 [DEBUG] [Thread-191923] [transport.py] [_log()] userauth is OK
2026-02-14T20:47:14.727 [DEBUG] [Thread-191923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:47:14.727 [DEBUG] [Thread-191923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:47:14.727 [DEBUG] [Thread-191923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:47:14.727 [DEBUG] [Thread-191923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:47:14.746 [INFO] [Thread-191923] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:47:14.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-14T20:47:14.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:47:15.586 [DEBUG] [Thread-191923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:47:15.587 [DEBUG] [Thread-191923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:47:15.634 [DEBUG] [Thread-191923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:47:15.635 [DEBUG] [Thread-191923] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:47:15.644 [DEBUG] [Thread-191923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:47:15.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:47:15.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-14T20:47:15.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-14T20:47:15.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:47:15.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:47:15.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:47:15.682 [DEBUG] [Thread-191923] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:47:22.560 [DEBUG] [Thread-191925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:47:34.793 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:47:34.793 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:47:35.109 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:47:37.621 [DEBUG] [Thread-191926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:47:43.924 [DEBUG] [Thread-191927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:47:45.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:47:45.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:47:45.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-14T20:47:47.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 47, 34), 8.99, 53.88, 0.0, 37.19, 11.31, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:47:47.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:47:34
2026-02-14T20:47:47.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:47:48.144 [DEBUG] [Thread-191928] [transport.py] [_log()] starting thread (client mode): 0xa57d56c0
2026-02-14T20:47:48.144 [DEBUG] [Thread-191928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:47:48.164 [DEBUG] [Thread-191928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:47:48.164 [INFO] [Thread-191928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:47:48.165 [DEBUG] [Thread-191928] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:47:48.165 [DEBUG] [Thread-191928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:47:48.165 [DEBUG] [Thread-191928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:47:48.165 [DEBUG] [Thread-191928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:47:48.165 [DEBUG] [Thread-191928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:47:48.165 [DEBUG] [Thread-191928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:47:48.165 [DEBUG] [Thread-191928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:47:48.165 [DEBUG] [Thread-191928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:47:48.165 [DEBUG] [Thread-191928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:47:48.165 [DEBUG] [Thread-191928] [transport.py] [_log()] client lang: <none>
2026-02-14T20:47:48.165 [DEBUG] [Thread-191928] [transport.py] [_log()] server lang: <none>
2026-02-14T20:47:48.166 [DEBUG] [Thread-191928] [transport.py] [_log()] kex follows: False
2026-02-14T20:47:48.166 [DEBUG] [Thread-191928] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:47:48.166 [DEBUG] [Thread-191928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:47:48.166 [DEBUG] [Thread-191928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:47:48.166 [DEBUG] [Thread-191928] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:47:48.166 [DEBUG] [Thread-191928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:47:48.166 [DEBUG] [Thread-191928] [transport.py] [_log()] Compression: none
2026-02-14T20:47:48.166 [DEBUG] [Thread-191928] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:47:48.187 [DEBUG] [Thread-191928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:47:48.187 [DEBUG] [Thread-191928] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:47:48.188 [DEBUG] [Thread-191928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:47:48.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:47:48.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:47:48.190 [DEBUG] [Thread-191928] [transport.py] [_log()] userauth is OK
2026-02-14T20:47:48.190 [DEBUG] [Thread-191928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:47:48.190 [DEBUG] [Thread-191928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:47:48.190 [DEBUG] [Thread-191928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:47:48.190 [DEBUG] [Thread-191928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:47:48.225 [INFO] [Thread-191928] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:47:48.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:47:48.876 [DEBUG] [Thread-191928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:47:48.877 [DEBUG] [Thread-191928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:47:48.877 [DEBUG] [Thread-191928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:47:48.917 [DEBUG] [Thread-191928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:47:48.918 [DEBUG] [Thread-191928] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:47:48.921 [DEBUG] [Thread-191928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:47:48.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:47:48.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:47:48.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:47:48.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:47:48.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:47:48.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:47:48.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:47:48.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:47:48.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:47:48.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.783100 -999.00  +10.90  20.79     59   +3.40 1 1 1 1 1     0    0 6.68 -37.38 ZNESW 25.5 20.8 157.6 31.4 11.4 -25.3 11.2 -24.3 11.0 -23.4 11.3 -24.7
2026-02-14T20:47:48.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:47:48.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:47:48.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.783100
2026-02-14T20:47:48.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:47:48.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:47:48.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:47:48.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:47:48.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:47:48.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:47:34', tmtdew=8.99, humidity=53.88, cloud=0.0, wind=37.19, temperature=11.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:47:39.840', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.006250000000001421, 0.0037500000000019185, -0.02450000000000152, -0.01249999999999929, 0.043250000000000455, 0.0014999999999982805, 0.01025000000000098, 0.021999999999998465, -0.023999999999999133, 0.004249999999998977, -0.005000000000000782, 0.07099999999999973, 0.03725000000000023, -0.03500000000000014, -0.009999999999999787, 0.025249999999999773, 0.013500000000000512, -0.021000000000000796, -0.0677500000000002, 0.06349999999999767, 0.039749999999997954, 0.0017500000000012506, -0.019249999999999545, 0.0129999999999999, 0.03250000000000064, -0.009249999999999758, -0.005999999999998451, 0.08300000000000018, 0.021000000000000796, 0.027000000000001023, -0.02499999999999858, 0.03524999999999778], zp_timestamp='2026-02-14T18:45:00')
2026-02-14T20:47:48.949 [DEBUG] [Thread-191928] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:47:49.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-14T20:47:49.054 [DEBUG] [Thread-191931] [transport.py] [_log()] starting thread (client mode): 0xa57c1ed0
2026-02-14T20:47:49.055 [DEBUG] [Thread-191931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:47:49.069 [DEBUG] [Thread-191931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:47:49.070 [INFO] [Thread-191931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:47:49.077 [DEBUG] [Thread-191931] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:47:49.077 [DEBUG] [Thread-191931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:47:49.077 [DEBUG] [Thread-191931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:47:49.077 [DEBUG] [Thread-191931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:47:49.077 [DEBUG] [Thread-191931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:47:49.078 [DEBUG] [Thread-191931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:47:49.078 [DEBUG] [Thread-191931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:47:49.078 [DEBUG] [Thread-191931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:47:49.078 [DEBUG] [Thread-191931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:47:49.078 [DEBUG] [Thread-191931] [transport.py] [_log()] client lang: <none>
2026-02-14T20:47:49.078 [DEBUG] [Thread-191931] [transport.py] [_log()] server lang: <none>
2026-02-14T20:47:49.078 [DEBUG] [Thread-191931] [transport.py] [_log()] kex follows: False
2026-02-14T20:47:49.078 [DEBUG] [Thread-191931] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:47:49.078 [DEBUG] [Thread-191931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:47:49.078 [DEBUG] [Thread-191931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:47:49.078 [DEBUG] [Thread-191931] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:47:49.078 [DEBUG] [Thread-191931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:47:49.078 [DEBUG] [Thread-191931] [transport.py] [_log()] Compression: none
2026-02-14T20:47:49.078 [DEBUG] [Thread-191931] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:47:49.134 [DEBUG] [Thread-191931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:47:49.135 [DEBUG] [Thread-191931] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:47:49.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:47:49.136 [DEBUG] [Thread-191931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:47:49.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:47:49.190 [DEBUG] [Thread-191931] [transport.py] [_log()] userauth is OK
2026-02-14T20:47:49.191 [DEBUG] [Thread-191931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:47:49.191 [DEBUG] [Thread-191931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:47:49.191 [DEBUG] [Thread-191931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:47:49.191 [DEBUG] [Thread-191931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:47:49.216 [INFO] [Thread-191931] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:47:49.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-14T20:47:49.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:47:50.050 [DEBUG] [Thread-191931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:47:50.050 [DEBUG] [Thread-191931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:47:50.098 [DEBUG] [Thread-191931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:47:50.099 [DEBUG] [Thread-191931] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:47:50.108 [DEBUG] [Thread-191931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:47:50.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:47:50.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T20:47:50.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:47:50.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:47:50.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:47:50.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:47:50.145 [DEBUG] [Thread-191931] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:47:52.652 [DEBUG] [Thread-191933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:48:07.700 [DEBUG] [Thread-191934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:48:20.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:48:20.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:48:20.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-14T20:48:22.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 48, 9), 8.77, 54.54, 0.0, 33.47, 11.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:48:22.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:48:09
2026-02-14T20:48:22.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:48:22.705 [DEBUG] [Thread-191935] [transport.py] [_log()] starting thread (client mode): 0xa2d6fd00
2026-02-14T20:48:22.705 [DEBUG] [Thread-191935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:48:22.724 [DEBUG] [Thread-191935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:48:22.725 [INFO] [Thread-191935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:48:22.728 [DEBUG] [Thread-191935] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:48:22.728 [DEBUG] [Thread-191935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:48:22.728 [DEBUG] [Thread-191935] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:48:22.728 [DEBUG] [Thread-191935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:48:22.728 [DEBUG] [Thread-191935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:48:22.728 [DEBUG] [Thread-191935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:48:22.728 [DEBUG] [Thread-191935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:48:22.728 [DEBUG] [Thread-191935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:48:22.728 [DEBUG] [Thread-191935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:48:22.728 [DEBUG] [Thread-191935] [transport.py] [_log()] client lang: <none>
2026-02-14T20:48:22.728 [DEBUG] [Thread-191935] [transport.py] [_log()] server lang: <none>
2026-02-14T20:48:22.728 [DEBUG] [Thread-191935] [transport.py] [_log()] kex follows: False
2026-02-14T20:48:22.728 [DEBUG] [Thread-191935] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:48:22.728 [DEBUG] [Thread-191935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:48:22.728 [DEBUG] [Thread-191935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:48:22.728 [DEBUG] [Thread-191935] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:48:22.728 [DEBUG] [Thread-191935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:48:22.728 [DEBUG] [Thread-191935] [transport.py] [_log()] Compression: none
2026-02-14T20:48:22.728 [DEBUG] [Thread-191935] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:48:22.731 [DEBUG] [Thread-191937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:48:22.745 [DEBUG] [Thread-191935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:48:22.745 [DEBUG] [Thread-191935] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:48:22.746 [DEBUG] [Thread-191935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:48:22.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:48:22.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:48:22.748 [DEBUG] [Thread-191935] [transport.py] [_log()] userauth is OK
2026-02-14T20:48:22.748 [DEBUG] [Thread-191935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:48:22.748 [DEBUG] [Thread-191935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:48:22.748 [DEBUG] [Thread-191935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:48:22.748 [DEBUG] [Thread-191935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:48:22.766 [INFO] [Thread-191935] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:48:22.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:48:23.413 [DEBUG] [Thread-191935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:48:23.413 [DEBUG] [Thread-191935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:48:23.414 [DEBUG] [Thread-191935] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:48:23.454 [DEBUG] [Thread-191935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:48:23.454 [DEBUG] [Thread-191935] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:48:23.457 [DEBUG] [Thread-191935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:48:23.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:48:23.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:48:23.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:48:23.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:48:23.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:48:23.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:48:23.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:48:23.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:48:23.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:48:23.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.783447 -999.00  +10.90  27.37     60   +3.40 1 1 1 1 1     0    0 6.75 -34.32 ZNESW 27.3 27.4 154.8 34.8 11.3 -25.3 11.2 -24.4 11.0 -23.5 11.3 -24.7
2026-02-14T20:48:23.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:48:23.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:48:23.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.783447
2026-02-14T20:48:23.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:48:23.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:48:23.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:48:23.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:48:23.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:48:23.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:48:09', tmtdew=8.77, humidity=54.54, cloud=0.0, wind=33.47, temperature=11.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:48:09.821', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.006250000000001421, 0.0037500000000019185, -0.02450000000000152, -0.01249999999999929, 0.043250000000000455, 0.0014999999999982805, 0.01025000000000098, 0.021999999999998465, -0.023999999999999133, 0.004249999999998977, -0.005000000000000782, 0.07099999999999973, 0.03725000000000023, -0.03500000000000014, -0.009999999999999787, 0.025249999999999773, 0.013500000000000512, -0.021000000000000796, -0.0677500000000002, 0.06349999999999767, 0.039749999999997954, 0.0017500000000012506, -0.019249999999999545, 0.0129999999999999, 0.03250000000000064, -0.009249999999999758, -0.005999999999998451, 0.08300000000000018, 0.021000000000000796, 0.027000000000001023, -0.02499999999999858, 0.03524999999999778], zp_timestamp='2026-02-14T18:45:00')
2026-02-14T20:48:23.482 [DEBUG] [Thread-191935] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:48:23.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-14T20:48:23.575 [DEBUG] [Thread-191939] [transport.py] [_log()] starting thread (client mode): 0xa2d6cd60
2026-02-14T20:48:23.575 [DEBUG] [Thread-191939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:48:23.590 [DEBUG] [Thread-191939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:48:23.590 [INFO] [Thread-191939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:48:23.597 [DEBUG] [Thread-191939] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:48:23.597 [DEBUG] [Thread-191939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:48:23.597 [DEBUG] [Thread-191939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:48:23.598 [DEBUG] [Thread-191939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:48:23.598 [DEBUG] [Thread-191939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:48:23.598 [DEBUG] [Thread-191939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:48:23.598 [DEBUG] [Thread-191939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:48:23.598 [DEBUG] [Thread-191939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:48:23.598 [DEBUG] [Thread-191939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:48:23.598 [DEBUG] [Thread-191939] [transport.py] [_log()] client lang: <none>
2026-02-14T20:48:23.598 [DEBUG] [Thread-191939] [transport.py] [_log()] server lang: <none>
2026-02-14T20:48:23.599 [DEBUG] [Thread-191939] [transport.py] [_log()] kex follows: False
2026-02-14T20:48:23.599 [DEBUG] [Thread-191939] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:48:23.599 [DEBUG] [Thread-191939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:48:23.599 [DEBUG] [Thread-191939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:48:23.599 [DEBUG] [Thread-191939] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:48:23.599 [DEBUG] [Thread-191939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:48:23.599 [DEBUG] [Thread-191939] [transport.py] [_log()] Compression: none
2026-02-14T20:48:23.599 [DEBUG] [Thread-191939] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:48:23.657 [DEBUG] [Thread-191939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:48:23.658 [DEBUG] [Thread-191939] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:48:23.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:48:23.659 [DEBUG] [Thread-191939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:48:23.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:48:23.714 [DEBUG] [Thread-191939] [transport.py] [_log()] userauth is OK
2026-02-14T20:48:23.714 [DEBUG] [Thread-191939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:48:23.714 [DEBUG] [Thread-191939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:48:23.715 [DEBUG] [Thread-191939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:48:23.715 [DEBUG] [Thread-191939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:48:23.737 [INFO] [Thread-191939] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:48:23.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-14T20:48:23.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:48:24.551 [DEBUG] [Thread-191939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:48:24.551 [DEBUG] [Thread-191939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:48:24.599 [DEBUG] [Thread-191939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:48:24.599 [DEBUG] [Thread-191939] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:48:24.608 [DEBUG] [Thread-191939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:48:24.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:48:24.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-14T20:48:24.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:48:24.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:48:24.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:48:24.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:48:24.645 [DEBUG] [Thread-191939] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:48:34.993 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:48:34.994 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:48:36.571 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:48:37.770 [DEBUG] [Thread-191941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:48:43.974 [DEBUG] [Thread-191942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:48:52.828 [DEBUG] [Thread-191943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:48:54.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:48:54.660 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:48:54.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:48:56.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 48, 45), 8.76, 55.06, 0.0, 32.45, 10.99, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:48:56.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:48:45
2026-02-14T20:48:56.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:48:57.130 [DEBUG] [Thread-191944] [transport.py] [_log()] starting thread (client mode): 0xa2d7a9b0
2026-02-14T20:48:57.131 [DEBUG] [Thread-191944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:48:57.150 [DEBUG] [Thread-191944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:48:57.151 [INFO] [Thread-191944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:48:57.153 [DEBUG] [Thread-191944] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:48:57.153 [DEBUG] [Thread-191944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:48:57.154 [DEBUG] [Thread-191944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:48:57.154 [DEBUG] [Thread-191944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:48:57.154 [DEBUG] [Thread-191944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:48:57.154 [DEBUG] [Thread-191944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:48:57.154 [DEBUG] [Thread-191944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:48:57.154 [DEBUG] [Thread-191944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:48:57.154 [DEBUG] [Thread-191944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:48:57.154 [DEBUG] [Thread-191944] [transport.py] [_log()] client lang: <none>
2026-02-14T20:48:57.154 [DEBUG] [Thread-191944] [transport.py] [_log()] server lang: <none>
2026-02-14T20:48:57.154 [DEBUG] [Thread-191944] [transport.py] [_log()] kex follows: False
2026-02-14T20:48:57.154 [DEBUG] [Thread-191944] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:48:57.154 [DEBUG] [Thread-191944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:48:57.154 [DEBUG] [Thread-191944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:48:57.154 [DEBUG] [Thread-191944] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:48:57.154 [DEBUG] [Thread-191944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:48:57.155 [DEBUG] [Thread-191944] [transport.py] [_log()] Compression: none
2026-02-14T20:48:57.155 [DEBUG] [Thread-191944] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:48:57.173 [DEBUG] [Thread-191944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:48:57.173 [DEBUG] [Thread-191944] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:48:57.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:48:57.175 [DEBUG] [Thread-191944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:48:57.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:48:57.177 [DEBUG] [Thread-191944] [transport.py] [_log()] userauth is OK
2026-02-14T20:48:57.177 [DEBUG] [Thread-191944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:48:57.177 [DEBUG] [Thread-191944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:48:57.177 [DEBUG] [Thread-191944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:48:57.177 [DEBUG] [Thread-191944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:48:57.202 [INFO] [Thread-191944] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:48:57.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:48:57.774 [DEBUG] [Thread-191944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:48:57.774 [DEBUG] [Thread-191944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:48:57.774 [DEBUG] [Thread-191944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:48:57.815 [DEBUG] [Thread-191944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:48:57.815 [DEBUG] [Thread-191944] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:48:57.818 [DEBUG] [Thread-191944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:48:57.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:48:57.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:48:57.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:48:57.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:48:57.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:48:57.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:48:57.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:48:57.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:48:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:48:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.783794 -999.00  +10.90  29.80     60   +3.40 1 1 1 1 1     0    0 6.75 -32.72 ZNESW 26.3 29.8 151.8 36.8 11.4 -25.4 11.2 -24.4 10.9 -23.3 11.3 -24.4
2026-02-14T20:48:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:48:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:48:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.783794
2026-02-14T20:48:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:48:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:48:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:48:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:48:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:48:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:48:45', tmtdew=8.76, humidity=55.06, cloud=0.0, wind=32.45, temperature=10.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:48:39.802', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.006250000000001421, 0.0037500000000019185, -0.02450000000000152, -0.01249999999999929, 0.043250000000000455, 0.0014999999999982805, 0.01025000000000098, 0.021999999999998465, -0.023999999999999133, 0.004249999999998977, -0.005000000000000782, 0.07099999999999973, 0.03725000000000023, -0.03500000000000014, -0.009999999999999787, 0.025249999999999773, 0.013500000000000512, -0.021000000000000796, -0.0677500000000002, 0.06349999999999767, 0.039749999999997954, 0.0017500000000012506, -0.019249999999999545, 0.0129999999999999, 0.03250000000000064, -0.009249999999999758, -0.005999999999998451, 0.08300000000000018, 0.021000000000000796, 0.027000000000001023, -0.02499999999999858, 0.03524999999999778], zp_timestamp='2026-02-14T18:45:00')
2026-02-14T20:48:57.841 [DEBUG] [Thread-191944] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:48:57.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-14T20:48:57.927 [DEBUG] [Thread-191947] [transport.py] [_log()] starting thread (client mode): 0xa57d6350
2026-02-14T20:48:57.927 [DEBUG] [Thread-191947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:48:57.941 [DEBUG] [Thread-191947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:48:57.941 [INFO] [Thread-191947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:48:57.949 [DEBUG] [Thread-191947] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:48:57.949 [DEBUG] [Thread-191947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:48:57.949 [DEBUG] [Thread-191947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:48:57.949 [DEBUG] [Thread-191947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:48:57.949 [DEBUG] [Thread-191947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:48:57.949 [DEBUG] [Thread-191947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:48:57.949 [DEBUG] [Thread-191947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:48:57.949 [DEBUG] [Thread-191947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:48:57.949 [DEBUG] [Thread-191947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:48:57.950 [DEBUG] [Thread-191947] [transport.py] [_log()] client lang: <none>
2026-02-14T20:48:57.950 [DEBUG] [Thread-191947] [transport.py] [_log()] server lang: <none>
2026-02-14T20:48:57.950 [DEBUG] [Thread-191947] [transport.py] [_log()] kex follows: False
2026-02-14T20:48:57.950 [DEBUG] [Thread-191947] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:48:57.950 [DEBUG] [Thread-191947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:48:57.950 [DEBUG] [Thread-191947] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:48:57.950 [DEBUG] [Thread-191947] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:48:57.950 [DEBUG] [Thread-191947] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:48:57.950 [DEBUG] [Thread-191947] [transport.py] [_log()] Compression: none
2026-02-14T20:48:57.950 [DEBUG] [Thread-191947] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:48:58.006 [DEBUG] [Thread-191947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:48:58.007 [DEBUG] [Thread-191947] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:48:58.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:48:58.008 [DEBUG] [Thread-191947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:48:58.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:48:58.066 [DEBUG] [Thread-191947] [transport.py] [_log()] userauth is OK
2026-02-14T20:48:58.066 [DEBUG] [Thread-191947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:48:58.067 [DEBUG] [Thread-191947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:48:58.067 [DEBUG] [Thread-191947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:48:58.067 [DEBUG] [Thread-191947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:48:58.091 [INFO] [Thread-191947] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:48: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-14T20:48:58.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:48:58.927 [DEBUG] [Thread-191947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:48:58.928 [DEBUG] [Thread-191947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:48:58.975 [DEBUG] [Thread-191947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:48:58.976 [DEBUG] [Thread-191947] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:48:58.985 [DEBUG] [Thread-191947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:48:58.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:48:58.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-14T20:48:59.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-14T20:48:59.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:48:59.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:48:59.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:48:59.022 [DEBUG] [Thread-191947] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:49:07.865 [DEBUG] [Thread-191949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:49:09.418 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:49:22.916 [DEBUG] [Thread-191950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:49:29.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:49:29.028 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:49:29.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-14T20:49:30.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 49, 21), 8.76, 55.07, 0.0, 33.45, 10.96, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:49:30.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:49:21
2026-02-14T20:49:31.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:49:31.483 [DEBUG] [Thread-191951] [transport.py] [_log()] starting thread (client mode): 0xa57d7e20
2026-02-14T20:49:31.484 [DEBUG] [Thread-191951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:49:31.502 [DEBUG] [Thread-191951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:49:31.502 [INFO] [Thread-191951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:49:31.504 [DEBUG] [Thread-191951] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:49:31.504 [DEBUG] [Thread-191951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:49:31.504 [DEBUG] [Thread-191951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:49:31.504 [DEBUG] [Thread-191951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:49:31.504 [DEBUG] [Thread-191951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:49:31.504 [DEBUG] [Thread-191951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:49:31.505 [DEBUG] [Thread-191951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:49:31.505 [DEBUG] [Thread-191951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:49:31.505 [DEBUG] [Thread-191951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:49:31.505 [DEBUG] [Thread-191951] [transport.py] [_log()] client lang: <none>
2026-02-14T20:49:31.505 [DEBUG] [Thread-191951] [transport.py] [_log()] server lang: <none>
2026-02-14T20:49:31.505 [DEBUG] [Thread-191951] [transport.py] [_log()] kex follows: False
2026-02-14T20:49:31.505 [DEBUG] [Thread-191951] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:49:31.505 [DEBUG] [Thread-191951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:49:31.505 [DEBUG] [Thread-191951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:49:31.505 [DEBUG] [Thread-191951] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:49:31.505 [DEBUG] [Thread-191951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:49:31.505 [DEBUG] [Thread-191951] [transport.py] [_log()] Compression: none
2026-02-14T20:49:31.505 [DEBUG] [Thread-191951] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:49:31.524 [DEBUG] [Thread-191951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:49:31.524 [DEBUG] [Thread-191951] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:49:31.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:49:31.525 [DEBUG] [Thread-191951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:49:31.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:49:31.527 [DEBUG] [Thread-191951] [transport.py] [_log()] userauth is OK
2026-02-14T20:49:31.528 [DEBUG] [Thread-191951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:49:31.528 [DEBUG] [Thread-191951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:49:31.528 [DEBUG] [Thread-191951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:49:31.528 [DEBUG] [Thread-191951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:49:31.552 [INFO] [Thread-191951] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:49:31.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:49:32.163 [DEBUG] [Thread-191951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:49:32.164 [DEBUG] [Thread-191951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:49:32.164 [DEBUG] [Thread-191951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:49:32.205 [DEBUG] [Thread-191951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:49:32.205 [DEBUG] [Thread-191951] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:49:32.207 [DEBUG] [Thread-191951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:49:32.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:49:32.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:49:32.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:49:32.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:49:32.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:49:32.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:49:32.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:49:32.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:49:32.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:49:32.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.784141 -999.00  +10.90  21.02     60   +3.40 1 1 1 1 1     0    0 6.71 -35.30 ZNESW 25.3 21.0 159.3 41.0 11.3 -25.3 11.2 -24.4 10.9 -23.3 11.3 -24.5
2026-02-14T20:49:32.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:49:32.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:49:32.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.784141
2026-02-14T20:49:32.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:49:32.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:49:32.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:49:32.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:49:32.233 [DEBUG] [Thread-191951] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:49:32.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:49:32.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:49:21', tmtdew=8.76, humidity=55.07, cloud=0.0, wind=33.45, temperature=10.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:49:09.782', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.006250000000001421, 0.0037500000000019185, -0.02450000000000152, -0.01249999999999929, 0.043250000000000455, 0.0014999999999982805, 0.01025000000000098, 0.021999999999998465, -0.023999999999999133, 0.004249999999998977, -0.005000000000000782, 0.07099999999999973, 0.03725000000000023, -0.03500000000000014, -0.009999999999999787, 0.025249999999999773, 0.013500000000000512, -0.021000000000000796, -0.0677500000000002, 0.06349999999999767, 0.039749999999997954, 0.0017500000000012506, -0.019249999999999545, 0.0129999999999999, 0.03250000000000064, -0.009249999999999758, -0.005999999999998451, 0.08300000000000018, 0.021000000000000796, 0.027000000000001023, -0.02499999999999858, 0.03524999999999778], zp_timestamp='2026-02-14T18:45:00')
2026-02-14T20:49:32.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-14T20:49:32.332 [DEBUG] [Thread-191954] [transport.py] [_log()] starting thread (client mode): 0xa2d6f340
2026-02-14T20:49:32.332 [DEBUG] [Thread-191954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:49:32.347 [DEBUG] [Thread-191954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:49:32.347 [INFO] [Thread-191954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:49:32.355 [DEBUG] [Thread-191954] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:49:32.355 [DEBUG] [Thread-191954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:49:32.355 [DEBUG] [Thread-191954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:49:32.355 [DEBUG] [Thread-191954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:49:32.355 [DEBUG] [Thread-191954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:49:32.356 [DEBUG] [Thread-191954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:49:32.356 [DEBUG] [Thread-191954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:49:32.356 [DEBUG] [Thread-191954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:49:32.356 [DEBUG] [Thread-191954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:49:32.356 [DEBUG] [Thread-191954] [transport.py] [_log()] client lang: <none>
2026-02-14T20:49:32.356 [DEBUG] [Thread-191954] [transport.py] [_log()] server lang: <none>
2026-02-14T20:49:32.356 [DEBUG] [Thread-191954] [transport.py] [_log()] kex follows: False
2026-02-14T20:49:32.356 [DEBUG] [Thread-191954] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:49:32.357 [DEBUG] [Thread-191954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:49:32.357 [DEBUG] [Thread-191954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:49:32.357 [DEBUG] [Thread-191954] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:49:32.357 [DEBUG] [Thread-191954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:49:32.357 [DEBUG] [Thread-191954] [transport.py] [_log()] Compression: none
2026-02-14T20:49:32.357 [DEBUG] [Thread-191954] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:49:32.415 [DEBUG] [Thread-191954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:49:32.416 [DEBUG] [Thread-191954] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:49:32.417 [DEBUG] [Thread-191954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:49:32.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:49:32.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:49:32.474 [DEBUG] [Thread-191954] [transport.py] [_log()] userauth is OK
2026-02-14T20:49:32.474 [DEBUG] [Thread-191954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:49:32.475 [DEBUG] [Thread-191954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:49:32.475 [DEBUG] [Thread-191954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:49:32.475 [DEBUG] [Thread-191954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:49:32.494 [INFO] [Thread-191954] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:49:32.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-14T20:49:32.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:49:33.350 [DEBUG] [Thread-191954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:49:33.351 [DEBUG] [Thread-191954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:49:33.398 [DEBUG] [Thread-191954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:49:33.398 [DEBUG] [Thread-191954] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:49:33.408 [DEBUG] [Thread-191954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:49:33.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:49:33.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-14T20:49:33.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-14T20:49:33.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:49:33.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:49:33.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:49:33.442 [DEBUG] [Thread-191954] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:49:35.194 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:49:35.195 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:49:37.953 [DEBUG] [Thread-191956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:49:44.029 [DEBUG] [Thread-191957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:49:53.008 [DEBUG] [Thread-191958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:50:03.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:50:03.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:50:03.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-14T20:50:05.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 49, 56), 8.7, 55.11, 0.0, 35.15, 10.92, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:50:05.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:49:56
2026-02-14T20:50:06.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:50:06.472 [DEBUG] [Thread-191959] [transport.py] [_log()] starting thread (client mode): 0xa57c32b0
2026-02-14T20:50:06.472 [DEBUG] [Thread-191959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:50:06.484 [DEBUG] [Thread-191959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:50:06.484 [INFO] [Thread-191959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:50:06.487 [DEBUG] [Thread-191959] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:50:06.487 [DEBUG] [Thread-191959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:50:06.487 [DEBUG] [Thread-191959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:50:06.487 [DEBUG] [Thread-191959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:50:06.487 [DEBUG] [Thread-191959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:50:06.487 [DEBUG] [Thread-191959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:50:06.487 [DEBUG] [Thread-191959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:50:06.487 [DEBUG] [Thread-191959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:50:06.487 [DEBUG] [Thread-191959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:50:06.487 [DEBUG] [Thread-191959] [transport.py] [_log()] client lang: <none>
2026-02-14T20:50:06.487 [DEBUG] [Thread-191959] [transport.py] [_log()] server lang: <none>
2026-02-14T20:50:06.487 [DEBUG] [Thread-191959] [transport.py] [_log()] kex follows: False
2026-02-14T20:50:06.487 [DEBUG] [Thread-191959] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:50:06.487 [DEBUG] [Thread-191959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:50:06.487 [DEBUG] [Thread-191959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:50:06.487 [DEBUG] [Thread-191959] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:50:06.487 [DEBUG] [Thread-191959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:50:06.487 [DEBUG] [Thread-191959] [transport.py] [_log()] Compression: none
2026-02-14T20:50:06.487 [DEBUG] [Thread-191959] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:50:06.503 [DEBUG] [Thread-191959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:50:06.503 [DEBUG] [Thread-191959] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:50:06.503 [DEBUG] [Thread-191959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:50:06.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:50:06.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:50:06.505 [DEBUG] [Thread-191959] [transport.py] [_log()] userauth is OK
2026-02-14T20:50:06.505 [DEBUG] [Thread-191959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:50:06.505 [DEBUG] [Thread-191959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:50:06.505 [DEBUG] [Thread-191959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:50:06.505 [DEBUG] [Thread-191959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:50:06.534 [INFO] [Thread-191959] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:50:06.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:50:07.202 [DEBUG] [Thread-191959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:50:07.202 [DEBUG] [Thread-191959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:50:07.203 [DEBUG] [Thread-191959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:50:07.243 [DEBUG] [Thread-191959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:50:07.243 [DEBUG] [Thread-191959] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:50:07.248 [DEBUG] [Thread-191959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:50:07.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:50:07.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:50:07.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:50:07.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:50:07.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:50:07.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:50:07.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:50:07.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:50:07.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:50:07.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.784489 -999.00  +10.90  21.48     60   +3.40 1 1 1 1 1     0    0 6.63 -31.76 ZNESW 23.0 21.5 160.2 33.4 11.3 -25.3 11.2 -24.3 11.0 -23.4 11.3 -24.6
2026-02-14T20:50:07.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:50:07.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:50:07.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.784489
2026-02-14T20:50:07.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:50:07.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:50:07.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:50:07.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:50:07.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:50:07.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:49:56', tmtdew=8.7, humidity=55.11, cloud=0.0, wind=35.15, temperature=10.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:49:39.850', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.006250000000001421, 0.0037500000000019185, -0.02450000000000152, -0.01249999999999929, 0.043250000000000455, 0.0014999999999982805, 0.01025000000000098, 0.021999999999998465, -0.023999999999999133, 0.004249999999998977, -0.005000000000000782, 0.07099999999999973, 0.03725000000000023, -0.03500000000000014, -0.009999999999999787, 0.025249999999999773, 0.013500000000000512, -0.021000000000000796, -0.0677500000000002, 0.06349999999999767, 0.039749999999997954, 0.0017500000000012506, -0.019249999999999545, 0.0129999999999999, 0.03250000000000064, -0.009249999999999758, -0.005999999999998451, 0.08300000000000018, 0.021000000000000796, 0.027000000000001023, -0.02499999999999858, 0.03524999999999778], zp_timestamp='2026-02-14T18:48:00')
2026-02-14T20:50:07.269 [DEBUG] [Thread-191959] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:50: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-14T20:50:07.364 [DEBUG] [Thread-191962] [transport.py] [_log()] starting thread (client mode): 0xa2d7a290
2026-02-14T20:50:07.364 [DEBUG] [Thread-191962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:50:07.378 [DEBUG] [Thread-191962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:50:07.378 [INFO] [Thread-191962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:50:07.385 [DEBUG] [Thread-191962] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:50:07.385 [DEBUG] [Thread-191962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:50:07.385 [DEBUG] [Thread-191962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:50:07.385 [DEBUG] [Thread-191962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:50:07.385 [DEBUG] [Thread-191962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:50:07.386 [DEBUG] [Thread-191962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:50:07.386 [DEBUG] [Thread-191962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:50:07.386 [DEBUG] [Thread-191962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:50:07.386 [DEBUG] [Thread-191962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:50:07.386 [DEBUG] [Thread-191962] [transport.py] [_log()] client lang: <none>
2026-02-14T20:50:07.386 [DEBUG] [Thread-191962] [transport.py] [_log()] server lang: <none>
2026-02-14T20:50:07.386 [DEBUG] [Thread-191962] [transport.py] [_log()] kex follows: False
2026-02-14T20:50:07.386 [DEBUG] [Thread-191962] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:50:07.386 [DEBUG] [Thread-191962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:50:07.386 [DEBUG] [Thread-191962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:50:07.386 [DEBUG] [Thread-191962] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:50:07.386 [DEBUG] [Thread-191962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:50:07.386 [DEBUG] [Thread-191962] [transport.py] [_log()] Compression: none
2026-02-14T20:50:07.386 [DEBUG] [Thread-191962] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:50:07.441 [DEBUG] [Thread-191962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:50:07.442 [DEBUG] [Thread-191962] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:50:07.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:50:07.443 [DEBUG] [Thread-191962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:50:07.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:50:07.498 [DEBUG] [Thread-191962] [transport.py] [_log()] userauth is OK
2026-02-14T20:50:07.498 [DEBUG] [Thread-191962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:50:07.498 [DEBUG] [Thread-191962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:50:07.499 [DEBUG] [Thread-191962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:50:07.499 [DEBUG] [Thread-191962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:50:07.517 [INFO] [Thread-191962] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:50:07.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-14T20:50:07.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:50:08.043 [DEBUG] [Thread-191964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:50:08.372 [DEBUG] [Thread-191962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:50:08.372 [DEBUG] [Thread-191962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:50:08.420 [DEBUG] [Thread-191962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:50:08.420 [DEBUG] [Thread-191962] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:50:08.428 [DEBUG] [Thread-191962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:50:08.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:50:08.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-14T20:50:08.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-14T20:50:08.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:50:08.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:50:08.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:50:08.460 [DEBUG] [Thread-191962] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:50:23.094 [DEBUG] [Thread-191965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:50:35.396 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:50:35.397 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:50:38.128 [DEBUG] [Thread-191966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:50:38.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:50:38.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:50:38.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-14T20:50:40.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 49, 56), 8.7, 55.11, 0.0, 35.15, 10.92, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:50:40.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:49:56
2026-02-14T20:50:40.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:50:40.910 [DEBUG] [Thread-191967] [transport.py] [_log()] starting thread (client mode): 0xa2d10160
2026-02-14T20:50:40.910 [DEBUG] [Thread-191967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:50:40.930 [DEBUG] [Thread-191967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:50:40.930 [INFO] [Thread-191967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:50:40.933 [DEBUG] [Thread-191967] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:50:40.933 [DEBUG] [Thread-191967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:50:40.933 [DEBUG] [Thread-191967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:50:40.933 [DEBUG] [Thread-191967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:50:40.933 [DEBUG] [Thread-191967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:50:40.933 [DEBUG] [Thread-191967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:50:40.933 [DEBUG] [Thread-191967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:50:40.933 [DEBUG] [Thread-191967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:50:40.933 [DEBUG] [Thread-191967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:50:40.933 [DEBUG] [Thread-191967] [transport.py] [_log()] client lang: <none>
2026-02-14T20:50:40.933 [DEBUG] [Thread-191967] [transport.py] [_log()] server lang: <none>
2026-02-14T20:50:40.933 [DEBUG] [Thread-191967] [transport.py] [_log()] kex follows: False
2026-02-14T20:50:40.933 [DEBUG] [Thread-191967] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:50:40.933 [DEBUG] [Thread-191967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:50:40.933 [DEBUG] [Thread-191967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:50:40.933 [DEBUG] [Thread-191967] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:50:40.933 [DEBUG] [Thread-191967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:50:40.933 [DEBUG] [Thread-191967] [transport.py] [_log()] Compression: none
2026-02-14T20:50:40.933 [DEBUG] [Thread-191967] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:50:40.948 [DEBUG] [Thread-191967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:50:40.948 [DEBUG] [Thread-191967] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:50:40.949 [DEBUG] [Thread-191967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:50:40.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:50:40.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:50:40.949 [DEBUG] [Thread-191967] [transport.py] [_log()] userauth is OK
2026-02-14T20:50:40.949 [DEBUG] [Thread-191967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:50:40.949 [DEBUG] [Thread-191967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:50:40.949 [DEBUG] [Thread-191967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:50:40.949 [DEBUG] [Thread-191967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:50:40.965 [INFO] [Thread-191967] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:50:40.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:50:41.541 [DEBUG] [Thread-191967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:50:41.541 [DEBUG] [Thread-191967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:50:41.541 [DEBUG] [Thread-191967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:50:41.581 [DEBUG] [Thread-191967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:50:41.582 [DEBUG] [Thread-191967] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:50:41.585 [DEBUG] [Thread-191967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:50:41.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:50:41.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:50:41.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:50:41.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:50:41.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:50:41.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:50:41.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:50:41.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:50:41.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:50:41.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.784836 -999.00  +10.80  23.41     60   +3.40 1 1 1 1 1     0    0 6.61 -34.71 ZNESW 22.6 23.4 162.2 35.1 11.3 -25.3 11.2 -24.3 10.9 -23.3 11.3 -24.6
2026-02-14T20:50:41.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:50:41.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:50:41.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.784836
2026-02-14T20:50:41.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:50:41.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:50:41.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:50:41.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:50:41.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:50:41.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:49:56', tmtdew=8.7, humidity=55.11, cloud=0.0, wind=35.15, temperature=10.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-13T23:55:35', seeing=1.46, atlas_timestamp='2026-02-14T18:50:09.830', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.006250000000001421, 0.0037500000000019185, -0.02450000000000152, -0.01249999999999929, 0.043250000000000455, 0.0014999999999982805, 0.01025000000000098, 0.021999999999998465, -0.023999999999999133, 0.004249999999998977, -0.005000000000000782, 0.07099999999999973, 0.03725000000000023, -0.03500000000000014, -0.009999999999999787, 0.025249999999999773, 0.013500000000000512, -0.021000000000000796, -0.0677500000000002, 0.06349999999999767, 0.039749999999997954, 0.0017500000000012506, -0.019249999999999545, 0.0129999999999999, 0.03250000000000064, -0.009249999999999758, -0.005999999999998451, 0.08300000000000018, 0.021000000000000796, 0.027000000000001023, -0.02499999999999858, 0.03524999999999778], zp_timestamp='2026-02-14T18:48:00')
2026-02-14T20:50:41.602 [DEBUG] [Thread-191967] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:50:41.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-14T20:50:41.698 [DEBUG] [Thread-191970] [transport.py] [_log()] starting thread (client mode): 0xa57735e0
2026-02-14T20:50:41.698 [DEBUG] [Thread-191970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:50:41.713 [DEBUG] [Thread-191970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:50:41.713 [INFO] [Thread-191970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:50:41.720 [DEBUG] [Thread-191970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:50:41.721 [DEBUG] [Thread-191970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:50:41.721 [DEBUG] [Thread-191970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:50:41.721 [DEBUG] [Thread-191970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:50:41.721 [DEBUG] [Thread-191970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:50:41.721 [DEBUG] [Thread-191970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:50:41.721 [DEBUG] [Thread-191970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:50:41.721 [DEBUG] [Thread-191970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:50:41.721 [DEBUG] [Thread-191970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:50:41.721 [DEBUG] [Thread-191970] [transport.py] [_log()] client lang: <none>
2026-02-14T20:50:41.721 [DEBUG] [Thread-191970] [transport.py] [_log()] server lang: <none>
2026-02-14T20:50:41.721 [DEBUG] [Thread-191970] [transport.py] [_log()] kex follows: False
2026-02-14T20:50:41.721 [DEBUG] [Thread-191970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:50:41.721 [DEBUG] [Thread-191970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:50:41.721 [DEBUG] [Thread-191970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:50:41.721 [DEBUG] [Thread-191970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:50:41.721 [DEBUG] [Thread-191970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:50:41.721 [DEBUG] [Thread-191970] [transport.py] [_log()] Compression: none
2026-02-14T20:50:41.721 [DEBUG] [Thread-191970] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:50:41.778 [DEBUG] [Thread-191970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:50:41.779 [DEBUG] [Thread-191970] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:50:41.779 [DEBUG] [Thread-191970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:50:41.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:50:41.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:50:41.835 [DEBUG] [Thread-191970] [transport.py] [_log()] userauth is OK
2026-02-14T20:50:41.835 [DEBUG] [Thread-191970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:50:41.835 [DEBUG] [Thread-191970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:50:41.835 [DEBUG] [Thread-191970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:50:41.835 [DEBUG] [Thread-191970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:50:41.854 [INFO] [Thread-191970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:50:41.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-14T20:50:41.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:50:42.677 [DEBUG] [Thread-191970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:50:42.677 [DEBUG] [Thread-191970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:50:42.726 [DEBUG] [Thread-191970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:50:42.726 [DEBUG] [Thread-191970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:50:42.736 [DEBUG] [Thread-191970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:50:42.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:50:42.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-14T20:50:42.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-14T20:50:42.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:50:42.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:50:42.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:50:42.772 [DEBUG] [Thread-191970] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:50:43.810 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:50:44.098 [DEBUG] [Thread-191972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:50:53.162 [DEBUG] [Thread-191973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:51:08.201 [DEBUG] [Thread-191974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:51:12.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:51:12.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:51:12.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-14T20:51:14.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 50, 33), 8.7, 55.11, 0.0, 28.67, 10.89, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:51:14.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:50:33
2026-02-14T20:51:15.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:51:15.435 [DEBUG] [Thread-191975] [transport.py] [_log()] starting thread (client mode): 0xa2d10790
2026-02-14T20:51:15.435 [DEBUG] [Thread-191975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:51:15.461 [DEBUG] [Thread-191975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:51:15.461 [INFO] [Thread-191975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:51:15.462 [DEBUG] [Thread-191975] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:51:15.462 [DEBUG] [Thread-191975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:51:15.462 [DEBUG] [Thread-191975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:51:15.462 [DEBUG] [Thread-191975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:51:15.462 [DEBUG] [Thread-191975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:51:15.462 [DEBUG] [Thread-191975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:51:15.462 [DEBUG] [Thread-191975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:51:15.462 [DEBUG] [Thread-191975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:51:15.462 [DEBUG] [Thread-191975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:51:15.462 [DEBUG] [Thread-191975] [transport.py] [_log()] client lang: <none>
2026-02-14T20:51:15.463 [DEBUG] [Thread-191975] [transport.py] [_log()] server lang: <none>
2026-02-14T20:51:15.463 [DEBUG] [Thread-191975] [transport.py] [_log()] kex follows: False
2026-02-14T20:51:15.463 [DEBUG] [Thread-191975] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:51:15.463 [DEBUG] [Thread-191975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:51:15.463 [DEBUG] [Thread-191975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:51:15.463 [DEBUG] [Thread-191975] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:51:15.463 [DEBUG] [Thread-191975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:51:15.463 [DEBUG] [Thread-191975] [transport.py] [_log()] Compression: none
2026-02-14T20:51:15.463 [DEBUG] [Thread-191975] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:51:15.483 [DEBUG] [Thread-191975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:51:15.484 [DEBUG] [Thread-191975] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:51:15.484 [DEBUG] [Thread-191975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:51:15.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:51:15.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:51:15.486 [DEBUG] [Thread-191975] [transport.py] [_log()] userauth is OK
2026-02-14T20:51:15.486 [DEBUG] [Thread-191975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:51:15.486 [DEBUG] [Thread-191975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:51:15.487 [DEBUG] [Thread-191975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:51:15.487 [DEBUG] [Thread-191975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:51:15.511 [INFO] [Thread-191975] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:51:15.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:51:16.105 [DEBUG] [Thread-191975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:51:16.105 [DEBUG] [Thread-191975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:51:16.106 [DEBUG] [Thread-191975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:51:16.146 [DEBUG] [Thread-191975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:51:16.147 [DEBUG] [Thread-191975] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:51:16.149 [DEBUG] [Thread-191975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:51:16.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:51:16.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:51:16.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:51:16.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:51:16.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:51:16.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:51:16.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:51:16.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:51:16.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:51:16.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.785530 -999.00  +10.80  23.90     60   +3.50 1 1 1 1 1     0    0 6.45 -35.92 ZNESW 25.6 23.9 172.0 33.5 11.3 -25.3 11.2 -24.3 10.9 -23.2 11.3 -24.4
2026-02-14T20:51:16.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:51:16.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:51:16.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.785530
2026-02-14T20:51:16.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:51:16.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:51:16.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:51:16.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:51:16.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:51:16.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:50:33', tmtdew=8.7, humidity=55.11, cloud=0.0, wind=28.67, temperature=10.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T20:51:08', seeing=2.97, atlas_timestamp='2026-02-14T18:51:09.792', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.006250000000001421, 0.0037500000000019185, -0.02450000000000152, -0.01249999999999929, 0.043250000000000455, 0.0014999999999982805, 0.01025000000000098, 0.021999999999998465, -0.023999999999999133, 0.004249999999998977, -0.005000000000000782, 0.07099999999999973, 0.03725000000000023, -0.03500000000000014, -0.009999999999999787, 0.025249999999999773, 0.013500000000000512, -0.021000000000000796, -0.0677500000000002, 0.06349999999999767, 0.039749999999997954, 0.0017500000000012506, -0.019249999999999545, 0.0129999999999999, 0.03250000000000064, -0.009249999999999758, -0.005999999999998451, 0.08300000000000018, 0.021000000000000796, 0.027000000000001023, -0.02499999999999858, 0.03524999999999778], zp_timestamp='2026-02-14T18:48:00')
2026-02-14T20:51:16.168 [DEBUG] [Thread-191975] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:51:16.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-14T20:51:16.269 [DEBUG] [Thread-191978] [transport.py] [_log()] starting thread (client mode): 0xa57c3940
2026-02-14T20:51:16.269 [DEBUG] [Thread-191978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:51:16.288 [DEBUG] [Thread-191978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:51:16.288 [INFO] [Thread-191978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:51:16.298 [DEBUG] [Thread-191978] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:51:16.298 [DEBUG] [Thread-191978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:51:16.298 [DEBUG] [Thread-191978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:51:16.298 [DEBUG] [Thread-191978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:51:16.298 [DEBUG] [Thread-191978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:51:16.298 [DEBUG] [Thread-191978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:51:16.298 [DEBUG] [Thread-191978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:51:16.298 [DEBUG] [Thread-191978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:51:16.298 [DEBUG] [Thread-191978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:51:16.299 [DEBUG] [Thread-191978] [transport.py] [_log()] client lang: <none>
2026-02-14T20:51:16.299 [DEBUG] [Thread-191978] [transport.py] [_log()] server lang: <none>
2026-02-14T20:51:16.299 [DEBUG] [Thread-191978] [transport.py] [_log()] kex follows: False
2026-02-14T20:51:16.299 [DEBUG] [Thread-191978] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:51:16.299 [DEBUG] [Thread-191978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:51:16.299 [DEBUG] [Thread-191978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:51:16.299 [DEBUG] [Thread-191978] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:51:16.299 [DEBUG] [Thread-191978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:51:16.299 [DEBUG] [Thread-191978] [transport.py] [_log()] Compression: none
2026-02-14T20:51:16.299 [DEBUG] [Thread-191978] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:51:16.358 [DEBUG] [Thread-191978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:51:16.359 [DEBUG] [Thread-191978] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:51:16.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:51:16.360 [DEBUG] [Thread-191978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:51:16.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:51:16.414 [DEBUG] [Thread-191978] [transport.py] [_log()] userauth is OK
2026-02-14T20:51:16.415 [DEBUG] [Thread-191978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:51:16.415 [DEBUG] [Thread-191978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:51:16.415 [DEBUG] [Thread-191978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:51:16.416 [DEBUG] [Thread-191978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:51:16.442 [INFO] [Thread-191978] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:51:16.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-14T20:51:16.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:51:17.282 [DEBUG] [Thread-191978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:51:17.282 [DEBUG] [Thread-191978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:51:17.330 [DEBUG] [Thread-191978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:51:17.331 [DEBUG] [Thread-191978] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:51:17.340 [DEBUG] [Thread-191978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:51:17.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:51:17.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-14T20:51:17.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:51:17.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:51:17.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:51:17.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:51:17.377 [DEBUG] [Thread-191978] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:51:23.238 [DEBUG] [Thread-191980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:51:35.596 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:51:35.598 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:51:38.296 [DEBUG] [Thread-191981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:51:44.158 [DEBUG] [Thread-191982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:51:47.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:51:47.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:51:47.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-14T20:51:49.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 51, 8), 8.68, 55.21, 0.0, 31.85, 10.94, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:51:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:51:08
2026-02-14T20:51:49.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:51:49.880 [DEBUG] [Thread-191983] [transport.py] [_log()] starting thread (client mode): 0xa57d4610
2026-02-14T20:51:49.880 [DEBUG] [Thread-191983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:51:49.901 [DEBUG] [Thread-191983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:51:49.901 [INFO] [Thread-191983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:51:49.904 [DEBUG] [Thread-191983] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:51:49.904 [DEBUG] [Thread-191983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:51:49.904 [DEBUG] [Thread-191983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:51:49.904 [DEBUG] [Thread-191983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:51:49.904 [DEBUG] [Thread-191983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:51:49.904 [DEBUG] [Thread-191983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:51:49.904 [DEBUG] [Thread-191983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:51:49.904 [DEBUG] [Thread-191983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:51:49.904 [DEBUG] [Thread-191983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:51:49.904 [DEBUG] [Thread-191983] [transport.py] [_log()] client lang: <none>
2026-02-14T20:51:49.904 [DEBUG] [Thread-191983] [transport.py] [_log()] server lang: <none>
2026-02-14T20:51:49.904 [DEBUG] [Thread-191983] [transport.py] [_log()] kex follows: False
2026-02-14T20:51:49.904 [DEBUG] [Thread-191983] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:51:49.904 [DEBUG] [Thread-191983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:51:49.904 [DEBUG] [Thread-191983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:51:49.904 [DEBUG] [Thread-191983] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:51:49.904 [DEBUG] [Thread-191983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:51:49.904 [DEBUG] [Thread-191983] [transport.py] [_log()] Compression: none
2026-02-14T20:51:49.904 [DEBUG] [Thread-191983] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:51:49.915 [DEBUG] [Thread-191983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:51:49.915 [DEBUG] [Thread-191983] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:51:49.916 [DEBUG] [Thread-191983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:51:49.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:51:49.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:51:49.917 [DEBUG] [Thread-191983] [transport.py] [_log()] userauth is OK
2026-02-14T20:51:49.917 [DEBUG] [Thread-191983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:51:49.917 [DEBUG] [Thread-191983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:51:49.917 [DEBUG] [Thread-191983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:51:49.917 [DEBUG] [Thread-191983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:51:49.926 [INFO] [Thread-191983] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:51:49.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:51:50.498 [DEBUG] [Thread-191983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:51:50.498 [DEBUG] [Thread-191983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:51:50.498 [DEBUG] [Thread-191983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:51:50.539 [DEBUG] [Thread-191983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:51:50.539 [DEBUG] [Thread-191983] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:51:50.541 [DEBUG] [Thread-191983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:51:50.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:51:50.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:51:50.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:51:50.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:51:50.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:51:50.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:51:50.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:51:50.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:51:50.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:51:50.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.785878 -999.00  +10.80  25.22     60   +3.40 1 1 1 1 1     0    0 6.57 -34.09 ZNESW 26.9 25.2 162.8 37.4 11.3 -25.3 11.1 -24.2 10.9 -23.3 11.3 -24.5
2026-02-14T20:51:50.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:51:50.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:51:50.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.785878
2026-02-14T20:51:50.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:51:50.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:51:50.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:51:50.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:51:50.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:51:50.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:51:08', tmtdew=8.68, humidity=55.21, cloud=0.0, wind=31.85, temperature=10.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T20:51:44', seeing=3.59, atlas_timestamp='2026-02-14T18:51:39.859', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.006250000000001421, 0.0037500000000019185, -0.02450000000000152, -0.01249999999999929, 0.043250000000000455, 0.0014999999999982805, 0.01025000000000098, 0.021999999999998465, -0.023999999999999133, 0.004249999999998977, -0.005000000000000782, 0.07099999999999973, 0.03725000000000023, -0.03500000000000014, -0.009999999999999787, 0.025249999999999773, 0.013500000000000512, -0.021000000000000796, -0.0677500000000002, 0.06349999999999767, 0.039749999999997954, 0.0017500000000012506, -0.019249999999999545, 0.0129999999999999, 0.03250000000000064, -0.009249999999999758, -0.005999999999998451, 0.08300000000000018, 0.021000000000000796, 0.027000000000001023, -0.02499999999999858, 0.03524999999999778], zp_timestamp='2026-02-14T18:48:00')
2026-02-14T20:51:50.579 [DEBUG] [Thread-191983] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:51:50.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-14T20:51:50.664 [DEBUG] [Thread-191986] [transport.py] [_log()] starting thread (client mode): 0xa57d79a0
2026-02-14T20:51:50.664 [DEBUG] [Thread-191986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:51:50.679 [DEBUG] [Thread-191986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:51:50.680 [INFO] [Thread-191986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:51:50.687 [DEBUG] [Thread-191986] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:51:50.687 [DEBUG] [Thread-191986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:51:50.687 [DEBUG] [Thread-191986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:51:50.687 [DEBUG] [Thread-191986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:51:50.687 [DEBUG] [Thread-191986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:51:50.687 [DEBUG] [Thread-191986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:51:50.687 [DEBUG] [Thread-191986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:51:50.687 [DEBUG] [Thread-191986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:51:50.687 [DEBUG] [Thread-191986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:51:50.687 [DEBUG] [Thread-191986] [transport.py] [_log()] client lang: <none>
2026-02-14T20:51:50.687 [DEBUG] [Thread-191986] [transport.py] [_log()] server lang: <none>
2026-02-14T20:51:50.687 [DEBUG] [Thread-191986] [transport.py] [_log()] kex follows: False
2026-02-14T20:51:50.687 [DEBUG] [Thread-191986] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:51:50.687 [DEBUG] [Thread-191986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:51:50.687 [DEBUG] [Thread-191986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:51:50.687 [DEBUG] [Thread-191986] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:51:50.687 [DEBUG] [Thread-191986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:51:50.687 [DEBUG] [Thread-191986] [transport.py] [_log()] Compression: none
2026-02-14T20:51:50.687 [DEBUG] [Thread-191986] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:51:50.745 [DEBUG] [Thread-191986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:51:50.745 [DEBUG] [Thread-191986] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:51:50.745 [DEBUG] [Thread-191986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:51:50.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:51:50.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:51:50.802 [DEBUG] [Thread-191986] [transport.py] [_log()] userauth is OK
2026-02-14T20:51:50.802 [DEBUG] [Thread-191986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:51:50.802 [DEBUG] [Thread-191986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:51:50.802 [DEBUG] [Thread-191986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:51:50.802 [DEBUG] [Thread-191986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:51:50.816 [INFO] [Thread-191986] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:51:50.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-14T20:51:50.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:51:51.674 [DEBUG] [Thread-191986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:51:51.674 [DEBUG] [Thread-191986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:51:51.722 [DEBUG] [Thread-191986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:51:51.722 [DEBUG] [Thread-191986] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:51:51.730 [DEBUG] [Thread-191986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:51:51.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:51:51.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-14T20:51:51.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-14T20:51:51.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:51:51.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:51:51.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:51:51.762 [DEBUG] [Thread-191986] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:51:53.327 [DEBUG] [Thread-191988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:52:08.359 [DEBUG] [Thread-191989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:52:17.709 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:52:21.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:52:21.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:52:21.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-14T20:52:23.384 [DEBUG] [Thread-191990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:52:23.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 51, 43), 8.64, 55.14, 0.0, 33.12, 10.87, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:52:23.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:51:43
2026-02-14T20:52:24.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:52:24.518 [DEBUG] [Thread-191991] [transport.py] [_log()] starting thread (client mode): 0xa57c0430
2026-02-14T20:52:24.518 [DEBUG] [Thread-191991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:52:24.536 [DEBUG] [Thread-191991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:52:24.536 [INFO] [Thread-191991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:52:24.539 [DEBUG] [Thread-191991] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:52:24.539 [DEBUG] [Thread-191991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:52:24.539 [DEBUG] [Thread-191991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:52:24.539 [DEBUG] [Thread-191991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:52:24.539 [DEBUG] [Thread-191991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:52:24.539 [DEBUG] [Thread-191991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:52:24.539 [DEBUG] [Thread-191991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:52:24.539 [DEBUG] [Thread-191991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:52:24.539 [DEBUG] [Thread-191991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:52:24.539 [DEBUG] [Thread-191991] [transport.py] [_log()] client lang: <none>
2026-02-14T20:52:24.539 [DEBUG] [Thread-191991] [transport.py] [_log()] server lang: <none>
2026-02-14T20:52:24.539 [DEBUG] [Thread-191991] [transport.py] [_log()] kex follows: False
2026-02-14T20:52:24.539 [DEBUG] [Thread-191991] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:52:24.539 [DEBUG] [Thread-191991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:52:24.539 [DEBUG] [Thread-191991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:52:24.539 [DEBUG] [Thread-191991] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:52:24.539 [DEBUG] [Thread-191991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:52:24.539 [DEBUG] [Thread-191991] [transport.py] [_log()] Compression: none
2026-02-14T20:52:24.539 [DEBUG] [Thread-191991] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:52:24.551 [DEBUG] [Thread-191991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:52:24.552 [DEBUG] [Thread-191991] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:52:24.552 [DEBUG] [Thread-191991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:52:24.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:52:24.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:52:24.553 [DEBUG] [Thread-191991] [transport.py] [_log()] userauth is OK
2026-02-14T20:52:24.553 [DEBUG] [Thread-191991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:52:24.553 [DEBUG] [Thread-191991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:52:24.553 [DEBUG] [Thread-191991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:52:24.553 [DEBUG] [Thread-191991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:52:24.580 [INFO] [Thread-191991] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:52:24.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:52:25.172 [DEBUG] [Thread-191991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:52:25.172 [DEBUG] [Thread-191991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:52:25.173 [DEBUG] [Thread-191991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:52:25.213 [DEBUG] [Thread-191991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:52:25.213 [DEBUG] [Thread-191991] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:52:25.216 [DEBUG] [Thread-191991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:52:25.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:52:25.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:52:25.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:52:25.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:52:25.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:52:25.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:52:25.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:52:25.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:52:25.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:52:25.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.786225 -999.00  +10.80  29.04     60   +3.40 1 1 1 1 1     0    0 6.66 -30.81 ZNESW 26.2 29.0 152.8 36.2 11.2 -25.4 11.1 -24.4 10.9 -23.4 11.2 -24.4
2026-02-14T20:52:25.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:52:25.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:52:25.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.786225
2026-02-14T20:52:25.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:52:25.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:52:25.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:52:25.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:52:25.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:52:25.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:51:43', tmtdew=8.64, humidity=55.14, cloud=0.0, wind=33.12, temperature=10.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T20:52:19', seeing=3.14, atlas_timestamp='2026-02-14T18:52:09.840', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.006250000000001421, 0.0037500000000019185, -0.02450000000000152, -0.01249999999999929, 0.043250000000000455, 0.0014999999999982805, 0.01025000000000098, 0.021999999999998465, -0.023999999999999133, 0.004249999999998977, -0.005000000000000782, 0.07099999999999973, 0.03725000000000023, -0.03500000000000014, -0.009999999999999787, 0.025249999999999773, 0.013500000000000512, -0.021000000000000796, -0.0677500000000002, 0.06349999999999767, 0.039749999999997954, 0.0017500000000012506, -0.019249999999999545, 0.0129999999999999, 0.03250000000000064, -0.009249999999999758, -0.005999999999998451, 0.08300000000000018, 0.021000000000000796, 0.027000000000001023, -0.02499999999999858, 0.03524999999999778], zp_timestamp='2026-02-14T18:48:00')
2026-02-14T20:52:25.234 [DEBUG] [Thread-191991] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:52:25.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-14T20:52:25.322 [DEBUG] [Thread-191994] [transport.py] [_log()] starting thread (client mode): 0xa2d130a0
2026-02-14T20:52:25.323 [DEBUG] [Thread-191994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:52:25.340 [DEBUG] [Thread-191994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:52:25.340 [INFO] [Thread-191994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:52:25.351 [DEBUG] [Thread-191994] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:52:25.351 [DEBUG] [Thread-191994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:52:25.351 [DEBUG] [Thread-191994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:52:25.351 [DEBUG] [Thread-191994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:52:25.351 [DEBUG] [Thread-191994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:52:25.351 [DEBUG] [Thread-191994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:52:25.351 [DEBUG] [Thread-191994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:52:25.351 [DEBUG] [Thread-191994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:52:25.351 [DEBUG] [Thread-191994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:52:25.351 [DEBUG] [Thread-191994] [transport.py] [_log()] client lang: <none>
2026-02-14T20:52:25.352 [DEBUG] [Thread-191994] [transport.py] [_log()] server lang: <none>
2026-02-14T20:52:25.352 [DEBUG] [Thread-191994] [transport.py] [_log()] kex follows: False
2026-02-14T20:52:25.352 [DEBUG] [Thread-191994] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:52:25.352 [DEBUG] [Thread-191994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:52:25.352 [DEBUG] [Thread-191994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:52:25.352 [DEBUG] [Thread-191994] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:52:25.352 [DEBUG] [Thread-191994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:52:25.352 [DEBUG] [Thread-191994] [transport.py] [_log()] Compression: none
2026-02-14T20:52:25.352 [DEBUG] [Thread-191994] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:52:25.411 [DEBUG] [Thread-191994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:52:25.411 [DEBUG] [Thread-191994] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:52:25.412 [DEBUG] [Thread-191994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:52:25.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:52:25.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:52:25.474 [DEBUG] [Thread-191994] [transport.py] [_log()] userauth is OK
2026-02-14T20:52:25.474 [DEBUG] [Thread-191994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:52:25.474 [DEBUG] [Thread-191994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:52:25.475 [DEBUG] [Thread-191994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:52:25.475 [DEBUG] [Thread-191994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:52:25.489 [INFO] [Thread-191994] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:52:25.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-14T20:52:25.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:52:26.331 [DEBUG] [Thread-191994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:52:26.331 [DEBUG] [Thread-191994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:52:26.379 [DEBUG] [Thread-191994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:52:26.379 [DEBUG] [Thread-191994] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:52:26.390 [DEBUG] [Thread-191994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:52:26.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:52:26.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-14T20:52:26.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-14T20:52:26.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:52:26.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:52:26.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:52:26.425 [DEBUG] [Thread-191994] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:52:35.813 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:52:35.814 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:52:38.412 [DEBUG] [Thread-191996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:52:44.253 [DEBUG] [Thread-191997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:52:53.458 [DEBUG] [Thread-191998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:52:56.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:52:56.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:52:56.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:52:58.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 52, 19), 8.62, 55.24, 0.0, 34.58, 10.92, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:52:58.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:52:19
2026-02-14T20:52:59.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:52:59.530 [DEBUG] [Thread-191999] [transport.py] [_log()] starting thread (client mode): 0xa2d6e0e0
2026-02-14T20:52:59.531 [DEBUG] [Thread-191999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:52:59.539 [DEBUG] [Thread-191999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:52:59.539 [INFO] [Thread-191999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:52:59.550 [DEBUG] [Thread-191999] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:52:59.550 [DEBUG] [Thread-191999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:52:59.551 [DEBUG] [Thread-191999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:52:59.551 [DEBUG] [Thread-191999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:52:59.551 [DEBUG] [Thread-191999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:52:59.551 [DEBUG] [Thread-191999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:52:59.551 [DEBUG] [Thread-191999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:52:59.551 [DEBUG] [Thread-191999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:52:59.552 [DEBUG] [Thread-191999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:52:59.552 [DEBUG] [Thread-191999] [transport.py] [_log()] client lang: <none>
2026-02-14T20:52:59.552 [DEBUG] [Thread-191999] [transport.py] [_log()] server lang: <none>
2026-02-14T20:52:59.552 [DEBUG] [Thread-191999] [transport.py] [_log()] kex follows: False
2026-02-14T20:52:59.552 [DEBUG] [Thread-191999] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:52:59.553 [DEBUG] [Thread-191999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:52:59.553 [DEBUG] [Thread-191999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:52:59.554 [DEBUG] [Thread-191999] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:52:59.554 [DEBUG] [Thread-191999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:52:59.554 [DEBUG] [Thread-191999] [transport.py] [_log()] Compression: none
2026-02-14T20:52:59.554 [DEBUG] [Thread-191999] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:52:59.607 [DEBUG] [Thread-191999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:52:59.619 [DEBUG] [Thread-191999] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:52:59.622 [DEBUG] [Thread-191999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:52:59.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:52:59.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:52:59.631 [DEBUG] [Thread-191999] [transport.py] [_log()] userauth is OK
2026-02-14T20:52:59.631 [DEBUG] [Thread-191999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:52:59.631 [DEBUG] [Thread-191999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:52:59.631 [DEBUG] [Thread-191999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:52:59.632 [DEBUG] [Thread-191999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:52:59.664 [INFO] [Thread-191999] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:52:59.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:53:00.305 [DEBUG] [Thread-191999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:53:00.305 [DEBUG] [Thread-191999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:53:00.311 [DEBUG] [Thread-191999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:53:00.346 [DEBUG] [Thread-191999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:53:00.346 [DEBUG] [Thread-191999] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:53:00.349 [DEBUG] [Thread-191999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:53:00.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:53:00.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:53:00.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:53:00.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:53:00.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:53:00.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:53:00.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:53:00.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:53:00.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:53:00.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.786572 -999.00  +10.80  25.12     60   +3.40 1 1 1 1 1     0    0 6.55 -31.63 ZNESW 28.4 25.1 148.4 46.1 11.3 -25.4 11.1 -24.2 10.9 -23.3 11.2 -24.4
2026-02-14T20:53:00.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:53:00.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:53:00.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.786572
2026-02-14T20:53:00.405 [DEBUG] [Thread-191999] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:53:00.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:53:00.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:53:00.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:53:00.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:53:00.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:53:00.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:52:19', tmtdew=8.62, humidity=55.24, cloud=0.0, wind=34.58, temperature=10.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T20:52:54', seeing=3.42, atlas_timestamp='2026-02-14T18:52:39.821', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.006249999999999645, 0.008250000000000313, -0.0035000000000007248, 0.010500000000000398, 0.03175000000000061, -0.0039999999999995595, -0.02474999999999916, 0.0129999999999999, -0.0009999999999994458, 0.012750000000000483, -0.008000000000000895, 0.06199999999999939, 0.09324999999999939, -0.017000000000001236, -0.017000000000001236, 0.025749999999998607, 0.0024999999999995026, -0.010500000000002174, -0.018250000000001876, 0.058999999999999275, 0.06524999999999892, 0.01425000000000054, 0.0017499999999994742, 0.028999999999999915, 0.048500000000000654, 0.003750000000000142, 0.020500000000000185, 0.0835000000000008, 0.03850000000000087, 0.021000000000000796, -0.01899999999999835, 0.03974999999999973], zp_timestamp='2026-02-14T18:51:00')
2026-02-14T20:53:00.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-14T20:53:00.591 [DEBUG] [Thread-192002] [transport.py] [_log()] starting thread (client mode): 0xa57736a0
2026-02-14T20:53:00.591 [DEBUG] [Thread-192002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:53:00.605 [DEBUG] [Thread-192002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:53:00.605 [INFO] [Thread-192002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:53:00.612 [DEBUG] [Thread-192002] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:53:00.613 [DEBUG] [Thread-192002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:53:00.613 [DEBUG] [Thread-192002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:53:00.613 [DEBUG] [Thread-192002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:53:00.613 [DEBUG] [Thread-192002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:53:00.613 [DEBUG] [Thread-192002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:53:00.613 [DEBUG] [Thread-192002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:53:00.613 [DEBUG] [Thread-192002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:53:00.613 [DEBUG] [Thread-192002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:53:00.613 [DEBUG] [Thread-192002] [transport.py] [_log()] client lang: <none>
2026-02-14T20:53:00.614 [DEBUG] [Thread-192002] [transport.py] [_log()] server lang: <none>
2026-02-14T20:53:00.614 [DEBUG] [Thread-192002] [transport.py] [_log()] kex follows: False
2026-02-14T20:53:00.614 [DEBUG] [Thread-192002] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:53:00.614 [DEBUG] [Thread-192002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:53:00.614 [DEBUG] [Thread-192002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:53:00.614 [DEBUG] [Thread-192002] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:53:00.614 [DEBUG] [Thread-192002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:53:00.614 [DEBUG] [Thread-192002] [transport.py] [_log()] Compression: none
2026-02-14T20:53:00.615 [DEBUG] [Thread-192002] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:53:00.669 [DEBUG] [Thread-192002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:53:00.669 [DEBUG] [Thread-192002] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:53:00.670 [DEBUG] [Thread-192002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:53:00.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:53:00.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:53:00.726 [DEBUG] [Thread-192002] [transport.py] [_log()] userauth is OK
2026-02-14T20:53:00.726 [DEBUG] [Thread-192002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:53:00.726 [DEBUG] [Thread-192002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:53:00.726 [DEBUG] [Thread-192002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:53:00.726 [DEBUG] [Thread-192002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:53:00.740 [INFO] [Thread-192002] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:53:00.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-14T20:53:00.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:53:01.586 [DEBUG] [Thread-192002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:53:01.587 [DEBUG] [Thread-192002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:53:01.633 [DEBUG] [Thread-192002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:53:01.634 [DEBUG] [Thread-192002] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:53:01.642 [DEBUG] [Thread-192002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:53:01.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:53:01.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-14T20:53:01.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-14T20:53:01.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:53:01.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:53:01.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:53:01.683 [DEBUG] [Thread-192002] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:53:08.488 [DEBUG] [Thread-192004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:53:11.849 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:53:14.965 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:53:20.020 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:53:23.548 [DEBUG] [Thread-192005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:53:26.398 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:53:31.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:53:31.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:53:31.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-14T20:53:34.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 52, 54), 8.66, 55.24, 0.0, 32.68, 10.89, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:53:34.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:52:54
2026-02-14T20:53:34.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:53:34.764 [DEBUG] [Thread-192006] [transport.py] [_log()] starting thread (client mode): 0xa2d13d00
2026-02-14T20:53:34.764 [DEBUG] [Thread-192006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:53:34.774 [DEBUG] [Thread-192006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:53:34.774 [INFO] [Thread-192006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:53:34.776 [DEBUG] [Thread-192006] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:53:34.777 [DEBUG] [Thread-192006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:53:34.777 [DEBUG] [Thread-192006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:53:34.777 [DEBUG] [Thread-192006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:53:34.777 [DEBUG] [Thread-192006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:53:34.777 [DEBUG] [Thread-192006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:53:34.777 [DEBUG] [Thread-192006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:53:34.777 [DEBUG] [Thread-192006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:53:34.777 [DEBUG] [Thread-192006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:53:34.777 [DEBUG] [Thread-192006] [transport.py] [_log()] client lang: <none>
2026-02-14T20:53:34.777 [DEBUG] [Thread-192006] [transport.py] [_log()] server lang: <none>
2026-02-14T20:53:34.777 [DEBUG] [Thread-192006] [transport.py] [_log()] kex follows: False
2026-02-14T20:53:34.777 [DEBUG] [Thread-192006] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:53:34.777 [DEBUG] [Thread-192006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:53:34.777 [DEBUG] [Thread-192006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:53:34.778 [DEBUG] [Thread-192006] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:53:34.778 [DEBUG] [Thread-192006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:53:34.778 [DEBUG] [Thread-192006] [transport.py] [_log()] Compression: none
2026-02-14T20:53:34.778 [DEBUG] [Thread-192006] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:53:34.798 [DEBUG] [Thread-192006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:53:34.801 [DEBUG] [Thread-192006] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:53:34.802 [DEBUG] [Thread-192006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:53:34.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:53:34.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:53:34.805 [DEBUG] [Thread-192006] [transport.py] [_log()] userauth is OK
2026-02-14T20:53:34.805 [DEBUG] [Thread-192006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:53:34.805 [DEBUG] [Thread-192006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:53:34.805 [DEBUG] [Thread-192006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:53:34.805 [DEBUG] [Thread-192006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:53:34.816 [INFO] [Thread-192006] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:53:34.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:53:35.392 [DEBUG] [Thread-192006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:53:35.392 [DEBUG] [Thread-192006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:53:35.393 [DEBUG] [Thread-192006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:53:35.433 [DEBUG] [Thread-192006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:53:35.433 [DEBUG] [Thread-192006] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:53:35.435 [DEBUG] [Thread-192006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:53:35.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:53:35.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:53:35.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:53:35.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:53:35.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:53:35.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:53:35.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:53:35.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:53:35.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:53:35.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.786919 -999.00  +10.80  28.69     60   +3.40 1 1 1 1 1     0    0 6.84 -28.27 ZNESW 32.1 28.7 151.4 37.9 11.2 -25.4 11.1 -24.3 10.9 -23.3 11.2 -24.7
2026-02-14T20:53:35.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:53:35.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:53:35.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.786919
2026-02-14T20:53:35.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:53:35.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:53:35.465 [DEBUG] [Thread-192006] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:53:35.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:53:35.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:53:35.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:53:35.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:52:54', tmtdew=8.66, humidity=55.24, cloud=0.0, wind=32.68, temperature=10.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T20:53:30', seeing=3.76, atlas_timestamp='2026-02-14T18:53:09.802', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.006249999999999645, 0.008250000000000313, -0.0035000000000007248, 0.010500000000000398, 0.03175000000000061, -0.0039999999999995595, -0.02474999999999916, 0.0129999999999999, -0.0009999999999994458, 0.012750000000000483, -0.008000000000000895, 0.06199999999999939, 0.09324999999999939, -0.017000000000001236, -0.017000000000001236, 0.025749999999998607, 0.0024999999999995026, -0.010500000000002174, -0.018250000000001876, 0.058999999999999275, 0.06524999999999892, 0.01425000000000054, 0.0017499999999994742, 0.028999999999999915, 0.048500000000000654, 0.003750000000000142, 0.020500000000000185, 0.0835000000000008, 0.03850000000000087, 0.021000000000000796, -0.01899999999999835, 0.03974999999999973], zp_timestamp='2026-02-14T18:51:00')
2026-02-14T20:53:35.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-14T20:53:35.553 [DEBUG] [Thread-192009] [transport.py] [_log()] starting thread (client mode): 0xa57e1300
2026-02-14T20:53:35.553 [DEBUG] [Thread-192009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:53:35.570 [DEBUG] [Thread-192009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:53:35.570 [INFO] [Thread-192009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:53:35.577 [DEBUG] [Thread-192009] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:53:35.577 [DEBUG] [Thread-192009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:53:35.577 [DEBUG] [Thread-192009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:53:35.577 [DEBUG] [Thread-192009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:53:35.577 [DEBUG] [Thread-192009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:53:35.577 [DEBUG] [Thread-192009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:53:35.578 [DEBUG] [Thread-192009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:53:35.578 [DEBUG] [Thread-192009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:53:35.578 [DEBUG] [Thread-192009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:53:35.578 [DEBUG] [Thread-192009] [transport.py] [_log()] client lang: <none>
2026-02-14T20:53:35.578 [DEBUG] [Thread-192009] [transport.py] [_log()] server lang: <none>
2026-02-14T20:53:35.578 [DEBUG] [Thread-192009] [transport.py] [_log()] kex follows: False
2026-02-14T20:53:35.578 [DEBUG] [Thread-192009] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:53:35.578 [DEBUG] [Thread-192009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:53:35.578 [DEBUG] [Thread-192009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:53:35.578 [DEBUG] [Thread-192009] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:53:35.578 [DEBUG] [Thread-192009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:53:35.578 [DEBUG] [Thread-192009] [transport.py] [_log()] Compression: none
2026-02-14T20:53:35.578 [DEBUG] [Thread-192009] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:53:35.633 [DEBUG] [Thread-192009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:53:35.633 [DEBUG] [Thread-192009] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:53:35.633 [DEBUG] [Thread-192009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:53:35.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:53:35.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:53:35.690 [DEBUG] [Thread-192009] [transport.py] [_log()] userauth is OK
2026-02-14T20:53:35.690 [DEBUG] [Thread-192009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:53:35.690 [DEBUG] [Thread-192009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:53:35.690 [DEBUG] [Thread-192009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:53:35.690 [DEBUG] [Thread-192009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:53:35.704 [INFO] [Thread-192009] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:53:35.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-14T20:53:35.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:53:36.015 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:53:36.016 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:53:36.551 [DEBUG] [Thread-192009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:53:36.551 [DEBUG] [Thread-192009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:53:36.602 [DEBUG] [Thread-192009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:53:36.602 [DEBUG] [Thread-192009] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:53:36.611 [DEBUG] [Thread-192009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:53:36.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:53:36.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-14T20:53: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') -> 00000000
2026-02-14T20:53:36.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:53:36.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:53:36.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:53:36.644 [DEBUG] [Thread-192009] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:53:38.576 [DEBUG] [Thread-192011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:53:44.533 [DEBUG] [Thread-192012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:53:44.837 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:53:49.213 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:53:51.453 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:53:53.653 [DEBUG] [Thread-192013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:54:06.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:54:06.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:54:06.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-14T20:54:08.682 [DEBUG] [Thread-192014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:54:08.703 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:54:08.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 53, 30), 8.66, 55.24, 0.0, 31.83, 10.86, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:54:08.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:53:30
2026-02-14T20:54:09.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:54:09.497 [DEBUG] [Thread-192015] [transport.py] [_log()] starting thread (client mode): 0xa2d7b520
2026-02-14T20:54:09.498 [DEBUG] [Thread-192015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:54:09.499 [DEBUG] [Thread-192015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:54:09.499 [INFO] [Thread-192015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:54:09.523 [DEBUG] [Thread-192015] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:54:09.523 [DEBUG] [Thread-192015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:54:09.523 [DEBUG] [Thread-192015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:54:09.523 [DEBUG] [Thread-192015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:54:09.523 [DEBUG] [Thread-192015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:54:09.523 [DEBUG] [Thread-192015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:54:09.523 [DEBUG] [Thread-192015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:54:09.523 [DEBUG] [Thread-192015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:54:09.523 [DEBUG] [Thread-192015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:54:09.523 [DEBUG] [Thread-192015] [transport.py] [_log()] client lang: <none>
2026-02-14T20:54:09.524 [DEBUG] [Thread-192015] [transport.py] [_log()] server lang: <none>
2026-02-14T20:54:09.524 [DEBUG] [Thread-192015] [transport.py] [_log()] kex follows: False
2026-02-14T20:54:09.524 [DEBUG] [Thread-192015] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:54:09.524 [DEBUG] [Thread-192015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:54:09.527 [DEBUG] [Thread-192015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:54:09.533 [DEBUG] [Thread-192015] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:54:09.533 [DEBUG] [Thread-192015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:54:09.533 [DEBUG] [Thread-192015] [transport.py] [_log()] Compression: none
2026-02-14T20:54:09.533 [DEBUG] [Thread-192015] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:54:09.562 [DEBUG] [Thread-192015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:54:09.565 [DEBUG] [Thread-192015] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:54:09.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:54:09.565 [DEBUG] [Thread-192015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:54:09.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:54:09.566 [DEBUG] [Thread-192015] [transport.py] [_log()] userauth is OK
2026-02-14T20:54:09.567 [DEBUG] [Thread-192015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:54:09.567 [DEBUG] [Thread-192015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:54:09.567 [DEBUG] [Thread-192015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:54:09.567 [DEBUG] [Thread-192015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:54:09.588 [INFO] [Thread-192015] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:54:09.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:54:10.166 [DEBUG] [Thread-192015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:54:10.167 [DEBUG] [Thread-192015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:54:10.168 [DEBUG] [Thread-192015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:54:10.208 [DEBUG] [Thread-192015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:54:10.208 [DEBUG] [Thread-192015] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:54:10.210 [DEBUG] [Thread-192015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:54:10.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:54:10.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:54:10.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:54:10.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:54:10.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:54:10.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:54:10.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:54:10.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:54:10.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:54:10.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.787266 -999.00  +10.80  24.63     60   +3.40 1 1 1 1 1     0    0 6.85 -26.80 ZNESW 26.7 24.6 149.9 39.6 11.2 -25.4 11.1 -24.4 10.9 -23.4 11.3 -24.6
2026-02-14T20:54:10.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:54:10.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:54:10.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.787266
2026-02-14T20:54:10.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:54:10.229 [DEBUG] [Thread-192015] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:54:10.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:54:10.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:54:10.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:54:10.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:54:10.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:53:30', tmtdew=8.66, humidity=55.24, cloud=0.0, wind=31.83, temperature=10.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T20:54:06', seeing=3.49, atlas_timestamp='2026-02-14T18:53:39.782', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.006249999999999645, 0.008250000000000313, -0.0035000000000007248, 0.010500000000000398, 0.03175000000000061, -0.0039999999999995595, -0.02474999999999916, 0.0129999999999999, -0.0009999999999994458, 0.012750000000000483, -0.008000000000000895, 0.06199999999999939, 0.09324999999999939, -0.017000000000001236, -0.017000000000001236, 0.025749999999998607, 0.0024999999999995026, -0.010500000000002174, -0.018250000000001876, 0.058999999999999275, 0.06524999999999892, 0.01425000000000054, 0.0017499999999994742, 0.028999999999999915, 0.048500000000000654, 0.003750000000000142, 0.020500000000000185, 0.0835000000000008, 0.03850000000000087, 0.021000000000000796, -0.01899999999999835, 0.03974999999999973], zp_timestamp='2026-02-14T18:51:00')
2026-02-14T20:54:10.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-14T20:54:10.320 [DEBUG] [Thread-192018] [transport.py] [_log()] starting thread (client mode): 0xa57c3160
2026-02-14T20:54:10.320 [DEBUG] [Thread-192018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:54:10.335 [DEBUG] [Thread-192018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:54:10.335 [INFO] [Thread-192018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:54:10.347 [DEBUG] [Thread-192018] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:54:10.347 [DEBUG] [Thread-192018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:54:10.347 [DEBUG] [Thread-192018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:54:10.347 [DEBUG] [Thread-192018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:54:10.347 [DEBUG] [Thread-192018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:54:10.347 [DEBUG] [Thread-192018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:54:10.347 [DEBUG] [Thread-192018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:54:10.347 [DEBUG] [Thread-192018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:54:10.347 [DEBUG] [Thread-192018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:54:10.347 [DEBUG] [Thread-192018] [transport.py] [_log()] client lang: <none>
2026-02-14T20:54:10.347 [DEBUG] [Thread-192018] [transport.py] [_log()] server lang: <none>
2026-02-14T20:54:10.347 [DEBUG] [Thread-192018] [transport.py] [_log()] kex follows: False
2026-02-14T20:54:10.347 [DEBUG] [Thread-192018] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:54:10.347 [DEBUG] [Thread-192018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:54:10.347 [DEBUG] [Thread-192018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:54:10.347 [DEBUG] [Thread-192018] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:54:10.347 [DEBUG] [Thread-192018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:54:10.348 [DEBUG] [Thread-192018] [transport.py] [_log()] Compression: none
2026-02-14T20:54:10.348 [DEBUG] [Thread-192018] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:54:10.397 [DEBUG] [Thread-192018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:54:10.397 [DEBUG] [Thread-192018] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:54:10.397 [DEBUG] [Thread-192018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:54:10.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:54:10.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:54:10.455 [DEBUG] [Thread-192018] [transport.py] [_log()] userauth is OK
2026-02-14T20:54:10.455 [DEBUG] [Thread-192018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:54:10.455 [DEBUG] [Thread-192018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:54:10.455 [DEBUG] [Thread-192018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:54:10.455 [DEBUG] [Thread-192018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:54:10.473 [INFO] [Thread-192018] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:54:10.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-14T20:54:10.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:54:11.296 [DEBUG] [Thread-192018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:54:11.297 [DEBUG] [Thread-192018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:54:11.345 [DEBUG] [Thread-192018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:54:11.345 [DEBUG] [Thread-192018] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:54:11.353 [DEBUG] [Thread-192018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:54:11.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:54:11.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-14T20:54:11.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-14T20:54:11.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:54:11.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:54:11.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:54:11.405 [DEBUG] [Thread-192018] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:54:13.089 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:54:19.236 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:54:23.618 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:54:23.717 [DEBUG] [Thread-192020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:54:36.232 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:54:36.235 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:54:38.791 [DEBUG] [Thread-192021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:54:41.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:54:41.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:54:41.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-14T20:54:43.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 54, 6), 8.64, 55.34, 0.0, 33.17, 10.92, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:54:43.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:54:06
2026-02-14T20:54:44.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:54:44.273 [DEBUG] [Thread-192022] [transport.py] [_log()] starting thread (client mode): 0xa2d106d0
2026-02-14T20:54:44.273 [DEBUG] [Thread-192022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:54:44.281 [DEBUG] [Thread-192022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:54:44.281 [INFO] [Thread-192022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:54:44.284 [DEBUG] [Thread-192022] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:54:44.284 [DEBUG] [Thread-192022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:54:44.284 [DEBUG] [Thread-192022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:54:44.284 [DEBUG] [Thread-192022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:54:44.284 [DEBUG] [Thread-192022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:54:44.284 [DEBUG] [Thread-192022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:54:44.284 [DEBUG] [Thread-192022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:54:44.284 [DEBUG] [Thread-192022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:54:44.284 [DEBUG] [Thread-192022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:54:44.285 [DEBUG] [Thread-192022] [transport.py] [_log()] client lang: <none>
2026-02-14T20:54:44.285 [DEBUG] [Thread-192022] [transport.py] [_log()] server lang: <none>
2026-02-14T20:54:44.285 [DEBUG] [Thread-192022] [transport.py] [_log()] kex follows: False
2026-02-14T20:54:44.285 [DEBUG] [Thread-192022] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:54:44.285 [DEBUG] [Thread-192022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:54:44.285 [DEBUG] [Thread-192022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:54:44.285 [DEBUG] [Thread-192022] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:54:44.285 [DEBUG] [Thread-192022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:54:44.285 [DEBUG] [Thread-192022] [transport.py] [_log()] Compression: none
2026-02-14T20:54:44.286 [DEBUG] [Thread-192022] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:54:44.312 [DEBUG] [Thread-192022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:54:44.343 [DEBUG] [Thread-192022] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:54:44.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:54:44.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:54:44.351 [DEBUG] [Thread-192022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:54:44.352 [DEBUG] [Thread-192022] [transport.py] [_log()] userauth is OK
2026-02-14T20:54:44.352 [DEBUG] [Thread-192022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:54:44.352 [DEBUG] [Thread-192022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:54:44.352 [DEBUG] [Thread-192022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:54:44.352 [DEBUG] [Thread-192022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:54:44.368 [INFO] [Thread-192022] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:54:44.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:54:44.932 [DEBUG] [Thread-192024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:54:45.001 [DEBUG] [Thread-192022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:54:45.001 [DEBUG] [Thread-192022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:54:45.031 [DEBUG] [Thread-192022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:54:45.042 [DEBUG] [Thread-192022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:54:45.042 [DEBUG] [Thread-192022] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:54:45.044 [DEBUG] [Thread-192022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:54:45.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:54:45.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:54:45.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:54:45.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:54:45.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:54:45.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:54:45.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:54:45.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:54:45.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:54:45.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.787961 -999.00  +10.70  27.86     60   +3.40 1 1 1 1 1     0    0 6.94 -26.23 ZNESW 32.3 27.9 161.0 38.2 11.3 -25.5 11.1 -24.5 10.9 -23.4 11.2 -24.5
2026-02-14T20:54:45.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:54:45.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:54:45.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.787961
2026-02-14T20:54:45.076 [DEBUG] [Thread-192022] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:54:45.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:54:45.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:54:45.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:54:45.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:54:45.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:54:45.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:54:06', tmtdew=8.64, humidity=55.34, cloud=0.0, wind=33.17, temperature=10.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T20:54:06', seeing=3.49, atlas_timestamp='2026-02-14T18:54:39.830', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.006249999999999645, 0.008250000000000313, -0.0035000000000007248, 0.010500000000000398, 0.03175000000000061, -0.0039999999999995595, -0.02474999999999916, 0.0129999999999999, -0.0009999999999994458, 0.012750000000000483, -0.008000000000000895, 0.06199999999999939, 0.09324999999999939, -0.017000000000001236, -0.017000000000001236, 0.025749999999998607, 0.0024999999999995026, -0.010500000000002174, -0.018250000000001876, 0.058999999999999275, 0.06524999999999892, 0.01425000000000054, 0.0017499999999994742, 0.028999999999999915, 0.048500000000000654, 0.003750000000000142, 0.020500000000000185, 0.0835000000000008, 0.03850000000000087, 0.021000000000000796, -0.01899999999999835, 0.03974999999999973], zp_timestamp='2026-02-14T18:51:00')
2026-02-14T20:54:45.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-14T20:54:45.189 [DEBUG] [Thread-192026] [transport.py] [_log()] starting thread (client mode): 0xa57727a0
2026-02-14T20:54:45.189 [DEBUG] [Thread-192026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:54:45.204 [DEBUG] [Thread-192026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:54:45.204 [INFO] [Thread-192026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:54:45.212 [DEBUG] [Thread-192026] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:54:45.212 [DEBUG] [Thread-192026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:54:45.212 [DEBUG] [Thread-192026] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:54:45.212 [DEBUG] [Thread-192026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:54:45.212 [DEBUG] [Thread-192026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:54:45.212 [DEBUG] [Thread-192026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:54:45.212 [DEBUG] [Thread-192026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:54:45.212 [DEBUG] [Thread-192026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:54:45.212 [DEBUG] [Thread-192026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:54:45.212 [DEBUG] [Thread-192026] [transport.py] [_log()] client lang: <none>
2026-02-14T20:54:45.212 [DEBUG] [Thread-192026] [transport.py] [_log()] server lang: <none>
2026-02-14T20:54:45.212 [DEBUG] [Thread-192026] [transport.py] [_log()] kex follows: False
2026-02-14T20:54:45.212 [DEBUG] [Thread-192026] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:54:45.212 [DEBUG] [Thread-192026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:54:45.212 [DEBUG] [Thread-192026] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:54:45.212 [DEBUG] [Thread-192026] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:54:45.212 [DEBUG] [Thread-192026] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:54:45.212 [DEBUG] [Thread-192026] [transport.py] [_log()] Compression: none
2026-02-14T20:54:45.212 [DEBUG] [Thread-192026] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:54:45.271 [DEBUG] [Thread-192026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:54:45.272 [DEBUG] [Thread-192026] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:54:45.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:54:45.273 [DEBUG] [Thread-192026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:54:45.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:54:45.327 [DEBUG] [Thread-192026] [transport.py] [_log()] userauth is OK
2026-02-14T20:54:45.327 [DEBUG] [Thread-192026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:54:45.328 [DEBUG] [Thread-192026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:54:45.328 [DEBUG] [Thread-192026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:54:45.328 [DEBUG] [Thread-192026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:54:45.356 [INFO] [Thread-192026] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:54:45.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-14T20:54:45.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:54:46.199 [DEBUG] [Thread-192026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:54:46.199 [DEBUG] [Thread-192026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:54:46.247 [DEBUG] [Thread-192026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:54:46.247 [DEBUG] [Thread-192026] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:54:46.256 [DEBUG] [Thread-192026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:54:46.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:54:46.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-14T20:54:46.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T20:54:46.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:54:46.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:54:46.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:54:46.291 [DEBUG] [Thread-192026] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:54:53.827 [DEBUG] [Thread-192028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:55:08.925 [DEBUG] [Thread-192029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:55:16.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:55:16.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:55:16.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T20:55:18.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 54, 41), 8.81, 54.55, 0.0, 35.25, 11.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:55:18.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:54:41
2026-02-14T20:55:18.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:55:18.882 [DEBUG] [Thread-192030] [transport.py] [_log()] starting thread (client mode): 0xa5740af0
2026-02-14T20:55:18.883 [DEBUG] [Thread-192030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:55:18.890 [DEBUG] [Thread-192030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:55:18.891 [INFO] [Thread-192030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:55:18.893 [DEBUG] [Thread-192030] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:55:18.893 [DEBUG] [Thread-192030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:55:18.893 [DEBUG] [Thread-192030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:55:18.893 [DEBUG] [Thread-192030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:55:18.893 [DEBUG] [Thread-192030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:55:18.893 [DEBUG] [Thread-192030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:55:18.893 [DEBUG] [Thread-192030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:55:18.893 [DEBUG] [Thread-192030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:55:18.893 [DEBUG] [Thread-192030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:55:18.893 [DEBUG] [Thread-192030] [transport.py] [_log()] client lang: <none>
2026-02-14T20:55:18.893 [DEBUG] [Thread-192030] [transport.py] [_log()] server lang: <none>
2026-02-14T20:55:18.893 [DEBUG] [Thread-192030] [transport.py] [_log()] kex follows: False
2026-02-14T20:55:18.893 [DEBUG] [Thread-192030] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:55:18.893 [DEBUG] [Thread-192030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:55:18.894 [DEBUG] [Thread-192030] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:55:18.894 [DEBUG] [Thread-192030] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:55:18.894 [DEBUG] [Thread-192030] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:55:18.894 [DEBUG] [Thread-192030] [transport.py] [_log()] Compression: none
2026-02-14T20:55:18.894 [DEBUG] [Thread-192030] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:55:18.911 [DEBUG] [Thread-192030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:55:18.912 [DEBUG] [Thread-192030] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:55:18.912 [DEBUG] [Thread-192030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:55:18.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:55:18.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:55:18.914 [DEBUG] [Thread-192030] [transport.py] [_log()] userauth is OK
2026-02-14T20:55:18.915 [DEBUG] [Thread-192030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:55:18.915 [DEBUG] [Thread-192030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:55:18.915 [DEBUG] [Thread-192030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:55:18.915 [DEBUG] [Thread-192030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:55:18.938 [INFO] [Thread-192030] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:55:18.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:55:19.515 [DEBUG] [Thread-192030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:55:19.515 [DEBUG] [Thread-192030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:55:19.516 [DEBUG] [Thread-192030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:55:19.556 [DEBUG] [Thread-192030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:55:19.556 [DEBUG] [Thread-192030] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:55:19.559 [DEBUG] [Thread-192030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:55:19.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:55:19.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:55:19.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:55:19.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:55:19.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:55:19.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:55:19.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:55:19.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:55:19.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:55:19.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.788308 -999.00  +10.70  26.65     60   +3.40 1 1 1 1 1     0    0 6.74 -24.86 ZNESW 26.1 26.6 158.2 34.2 11.2 -25.3 11.0 -24.3 10.9 -23.4 11.2 -24.5
2026-02-14T20:55:19.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:55:19.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:55:19.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.788308
2026-02-14T20:55:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:55:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:55:19.583 [DEBUG] [Thread-192030] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:55:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:55:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:55:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:55:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:54:41', tmtdew=8.81, humidity=54.55, cloud=0.0, wind=35.25, temperature=11.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T20:54:42', seeing=3.94, atlas_timestamp='2026-02-14T18:55:09.811', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.006249999999999645, 0.008250000000000313, -0.0035000000000007248, 0.010500000000000398, 0.03175000000000061, -0.0039999999999995595, -0.02474999999999916, 0.0129999999999999, -0.0009999999999994458, 0.012750000000000483, -0.008000000000000895, 0.06199999999999939, 0.09324999999999939, -0.017000000000001236, -0.017000000000001236, 0.025749999999998607, 0.0024999999999995026, -0.010500000000002174, -0.018250000000001876, 0.058999999999999275, 0.06524999999999892, 0.01425000000000054, 0.0017499999999994742, 0.028999999999999915, 0.048500000000000654, 0.003750000000000142, 0.020500000000000185, 0.0835000000000008, 0.03850000000000087, 0.021000000000000796, -0.01899999999999835, 0.03974999999999973], zp_timestamp='2026-02-14T18:51:00')
2026-02-14T20:55:19.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-14T20:55:19.686 [DEBUG] [Thread-192033] [transport.py] [_log()] starting thread (client mode): 0xa2d118d0
2026-02-14T20:55:19.686 [DEBUG] [Thread-192033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:55:19.699 [DEBUG] [Thread-192033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:55:19.699 [INFO] [Thread-192033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:55:19.707 [DEBUG] [Thread-192033] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:55:19.707 [DEBUG] [Thread-192033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:55:19.707 [DEBUG] [Thread-192033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:55:19.707 [DEBUG] [Thread-192033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:55:19.707 [DEBUG] [Thread-192033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:55:19.707 [DEBUG] [Thread-192033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:55:19.707 [DEBUG] [Thread-192033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:55:19.707 [DEBUG] [Thread-192033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:55:19.707 [DEBUG] [Thread-192033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:55:19.707 [DEBUG] [Thread-192033] [transport.py] [_log()] client lang: <none>
2026-02-14T20:55:19.707 [DEBUG] [Thread-192033] [transport.py] [_log()] server lang: <none>
2026-02-14T20:55:19.707 [DEBUG] [Thread-192033] [transport.py] [_log()] kex follows: False
2026-02-14T20:55:19.707 [DEBUG] [Thread-192033] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:55:19.707 [DEBUG] [Thread-192033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:55:19.707 [DEBUG] [Thread-192033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:55:19.707 [DEBUG] [Thread-192033] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:55:19.707 [DEBUG] [Thread-192033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:55:19.707 [DEBUG] [Thread-192033] [transport.py] [_log()] Compression: none
2026-02-14T20:55:19.707 [DEBUG] [Thread-192033] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:55:19.761 [DEBUG] [Thread-192033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:55:19.761 [DEBUG] [Thread-192033] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:55:19.761 [DEBUG] [Thread-192033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:55:19.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:55:19.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:55:19.820 [DEBUG] [Thread-192033] [transport.py] [_log()] userauth is OK
2026-02-14T20:55:19.820 [DEBUG] [Thread-192033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:55:19.820 [DEBUG] [Thread-192033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:55:19.820 [DEBUG] [Thread-192033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:55:19.820 [DEBUG] [Thread-192033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:55:19.839 [INFO] [Thread-192033] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:55:19.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-14T20:55:19.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:55:20.670 [DEBUG] [Thread-192033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:55:20.671 [DEBUG] [Thread-192033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:55:20.718 [DEBUG] [Thread-192033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:55:20.718 [DEBUG] [Thread-192033] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:55:20.727 [DEBUG] [Thread-192033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:55:20.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:55:20.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-14T20:55:20.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-14T20:55:20.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:55:20.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:55:20.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:55:20.762 [DEBUG] [Thread-192033] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:55:23.949 [DEBUG] [Thread-192035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:55:25.258 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:55:30.369 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:55:34.461 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:55:36.437 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:55:36.439 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:55:38.986 [DEBUG] [Thread-192036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:55:45.398 [DEBUG] [Thread-192037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:55:50.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:55:50.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:55:50.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-14T20:55:52.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 55, 17), 8.59, 55.34, 0.0, 29.17, 10.86, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:55:52.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:55:17
2026-02-14T20:55:53.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:55:53.238 [DEBUG] [Thread-192038] [transport.py] [_log()] starting thread (client mode): 0xa57e0880
2026-02-14T20:55:53.239 [DEBUG] [Thread-192038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:55:53.251 [DEBUG] [Thread-192038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:55:53.251 [INFO] [Thread-192038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:55:53.254 [DEBUG] [Thread-192038] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:55:53.254 [DEBUG] [Thread-192038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:55:53.254 [DEBUG] [Thread-192038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:55:53.254 [DEBUG] [Thread-192038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:55:53.254 [DEBUG] [Thread-192038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:55:53.255 [DEBUG] [Thread-192038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:55:53.255 [DEBUG] [Thread-192038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:55:53.255 [DEBUG] [Thread-192038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:55:53.255 [DEBUG] [Thread-192038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:55:53.255 [DEBUG] [Thread-192038] [transport.py] [_log()] client lang: <none>
2026-02-14T20:55:53.255 [DEBUG] [Thread-192038] [transport.py] [_log()] server lang: <none>
2026-02-14T20:55:53.255 [DEBUG] [Thread-192038] [transport.py] [_log()] kex follows: False
2026-02-14T20:55:53.255 [DEBUG] [Thread-192038] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:55:53.255 [DEBUG] [Thread-192038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:55:53.256 [DEBUG] [Thread-192038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:55:53.256 [DEBUG] [Thread-192038] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:55:53.256 [DEBUG] [Thread-192038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:55:53.256 [DEBUG] [Thread-192038] [transport.py] [_log()] Compression: none
2026-02-14T20:55:53.256 [DEBUG] [Thread-192038] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:55:53.273 [DEBUG] [Thread-192038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:55:53.276 [DEBUG] [Thread-192038] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:55:53.278 [DEBUG] [Thread-192038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:55:53.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:55:53.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:55:53.322 [DEBUG] [Thread-192038] [transport.py] [_log()] userauth is OK
2026-02-14T20:55:53.322 [DEBUG] [Thread-192038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:55:53.325 [DEBUG] [Thread-192038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:55:53.325 [DEBUG] [Thread-192038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:55:53.325 [DEBUG] [Thread-192038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:55:53.390 [INFO] [Thread-192038] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:55:53.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:55:53.977 [DEBUG] [Thread-192038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:55:53.978 [DEBUG] [Thread-192038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:55:53.980 [DEBUG] [Thread-192038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:55:54.016 [DEBUG] [Thread-192040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:55:54.018 [DEBUG] [Thread-192038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:55:54.019 [DEBUG] [Thread-192038] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:55:54.021 [DEBUG] [Thread-192038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:55:54.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:55:54.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:55:54.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:55:54.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:55:54.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:55:54.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:55:54.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:55:54.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:55:54.041 [DEBUG] [Thread-192038] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:55:54.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:55:54.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.788308 -999.00  +10.70  26.65     60   +3.40 1 1 1 1 1     0    0 6.74 -24.86 ZNESW 26.1 26.6 158.2 34.2 11.2 -25.3 11.0 -24.3 10.9 -23.4 11.2 -24.5
2026-02-14T20:55:54.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:55:54.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:55:54.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.788308
2026-02-14T20:55:54.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:55:54.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:55:54.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:55:54.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:55:54.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:55:54.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:55:17', tmtdew=8.59, humidity=55.34, cloud=0.0, wind=29.17, temperature=10.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T20:55:17', seeing=2.97, atlas_timestamp='2026-02-14T18:55:09.811', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.016750000000000043, 0.0002500000000011937, -0.02850000000000108, -0.029500000000000526, 0.02224999999999966, -0.037499999999999645, 0.013250000000001094, 0.028499999999999304, -0.009999999999999787, -0.007749999999999702, -0.028499999999999304, 0.08749999999999858, 0.042749999999999844, -0.03900000000000148, -0.02400000000000091, 0.02224999999999966, 0.005999999999998451, -0.02999999999999936, -0.045750000000001734, 0.049999999999998934, 0.030749999999997613, -0.004749999999999588, -0.009249999999999758, 0.016000000000000014, 0.03250000000000064, 0.0022500000000000853, -0.041499999999999204, 0.0730000000000004, -0.013999999999999346, 0.007500000000000284, 0.027000000000001023, 0.013749999999998153], zp_timestamp='2026-02-14T18:53:00')
2026-02-14T20:55:54.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-14T20:55:54.233 [DEBUG] [Thread-192042] [transport.py] [_log()] starting thread (client mode): 0xa5742470
2026-02-14T20:55:54.233 [DEBUG] [Thread-192042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:55:54.247 [DEBUG] [Thread-192042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:55:54.247 [INFO] [Thread-192042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:55:54.255 [DEBUG] [Thread-192042] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:55:54.255 [DEBUG] [Thread-192042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:55:54.255 [DEBUG] [Thread-192042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:55:54.255 [DEBUG] [Thread-192042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:55:54.255 [DEBUG] [Thread-192042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:55:54.255 [DEBUG] [Thread-192042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:55:54.255 [DEBUG] [Thread-192042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:55:54.255 [DEBUG] [Thread-192042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:55:54.255 [DEBUG] [Thread-192042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:55:54.255 [DEBUG] [Thread-192042] [transport.py] [_log()] client lang: <none>
2026-02-14T20:55:54.255 [DEBUG] [Thread-192042] [transport.py] [_log()] server lang: <none>
2026-02-14T20:55:54.255 [DEBUG] [Thread-192042] [transport.py] [_log()] kex follows: False
2026-02-14T20:55:54.255 [DEBUG] [Thread-192042] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:55:54.255 [DEBUG] [Thread-192042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:55:54.255 [DEBUG] [Thread-192042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:55:54.256 [DEBUG] [Thread-192042] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:55:54.256 [DEBUG] [Thread-192042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:55:54.256 [DEBUG] [Thread-192042] [transport.py] [_log()] Compression: none
2026-02-14T20:55:54.256 [DEBUG] [Thread-192042] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:55:54.311 [DEBUG] [Thread-192042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:55:54.311 [DEBUG] [Thread-192042] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:55:54.312 [DEBUG] [Thread-192042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:55:54.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:55:54.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:55:54.367 [DEBUG] [Thread-192042] [transport.py] [_log()] userauth is OK
2026-02-14T20:55:54.367 [DEBUG] [Thread-192042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:55:54.368 [DEBUG] [Thread-192042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:55:54.368 [DEBUG] [Thread-192042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:55:54.368 [DEBUG] [Thread-192042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:55:54.387 [INFO] [Thread-192042] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:55:54.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T20:55:54.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:55:55.200 [DEBUG] [Thread-192042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:55:55.200 [DEBUG] [Thread-192042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:55:55.248 [DEBUG] [Thread-192042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:55:55.248 [DEBUG] [Thread-192042] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:55:55.257 [DEBUG] [Thread-192042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:55:55.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:55:55.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-14T20:55:55.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-14T20:55:55.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:55:55.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:55:55.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:55:55.293 [DEBUG] [Thread-192042] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:56:09.047 [DEBUG] [Thread-192044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:56:24.155 [DEBUG] [Thread-192045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:56:25.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:56:25.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:56: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-14T20:56:27.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 55, 53), 8.58, 55.37, 0.0, 31.48, 10.81, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:56:27.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:55:53
2026-02-14T20:56:27.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:56:27.855 [DEBUG] [Thread-192046] [transport.py] [_log()] starting thread (client mode): 0xa2d03310
2026-02-14T20:56:27.855 [DEBUG] [Thread-192046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:56:27.867 [DEBUG] [Thread-192046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:56:27.867 [INFO] [Thread-192046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:56:27.871 [DEBUG] [Thread-192046] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:56:27.871 [DEBUG] [Thread-192046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:56:27.871 [DEBUG] [Thread-192046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:56:27.871 [DEBUG] [Thread-192046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:56:27.871 [DEBUG] [Thread-192046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:56:27.871 [DEBUG] [Thread-192046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:56:27.871 [DEBUG] [Thread-192046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:56:27.871 [DEBUG] [Thread-192046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:56:27.871 [DEBUG] [Thread-192046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:56:27.871 [DEBUG] [Thread-192046] [transport.py] [_log()] client lang: <none>
2026-02-14T20:56:27.872 [DEBUG] [Thread-192046] [transport.py] [_log()] server lang: <none>
2026-02-14T20:56:27.872 [DEBUG] [Thread-192046] [transport.py] [_log()] kex follows: False
2026-02-14T20:56:27.872 [DEBUG] [Thread-192046] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:56:27.872 [DEBUG] [Thread-192046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:56:27.872 [DEBUG] [Thread-192046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:56:27.873 [DEBUG] [Thread-192046] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:56:27.873 [DEBUG] [Thread-192046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:56:27.873 [DEBUG] [Thread-192046] [transport.py] [_log()] Compression: none
2026-02-14T20:56:27.873 [DEBUG] [Thread-192046] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:56:27.907 [DEBUG] [Thread-192046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:56:27.913 [DEBUG] [Thread-192046] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:56:27.915 [DEBUG] [Thread-192046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:56:27.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:56:27.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:56:27.920 [DEBUG] [Thread-192046] [transport.py] [_log()] userauth is OK
2026-02-14T20:56:27.920 [DEBUG] [Thread-192046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:56:27.920 [DEBUG] [Thread-192046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:56:27.920 [DEBUG] [Thread-192046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:56:27.921 [DEBUG] [Thread-192046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:56:27.960 [INFO] [Thread-192046] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:56:27.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:56:28.606 [DEBUG] [Thread-192046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:56:28.607 [DEBUG] [Thread-192046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:56:28.608 [DEBUG] [Thread-192046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:56:28.649 [DEBUG] [Thread-192046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:56:28.649 [DEBUG] [Thread-192046] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:56:28.653 [DEBUG] [Thread-192046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:56:28.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:56:28.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:56:28.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:56:28.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:56:28.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:56:28.690 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:56:28.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:56:28.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:56:28.692 [DEBUG] [Thread-192046] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:56:28.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:56:28.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.788655 -999.00  +10.70  25.10     60   +3.40 1 1 1 1 1     0    0 6.65 -28.28 ZNESW 32.2 25.1 153.9 34.1 11.2 -25.4 11.0 -24.4 10.9 -23.3 11.2 -24.5
2026-02-14T20:56:28.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:56:28.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:56:28.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.788655
2026-02-14T20:56:28.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:56:28.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:56:28.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:56:28.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:56:28.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:56:28.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:55:53', tmtdew=8.58, humidity=55.37, cloud=0.0, wind=31.48, temperature=10.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T20:55:53', seeing=3.36, atlas_timestamp='2026-02-14T18:55:39.792', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.016750000000000043, 0.0002500000000011937, -0.02850000000000108, -0.029500000000000526, 0.02224999999999966, -0.037499999999999645, 0.013250000000001094, 0.028499999999999304, -0.009999999999999787, -0.007749999999999702, -0.028499999999999304, 0.08749999999999858, 0.042749999999999844, -0.03900000000000148, -0.02400000000000091, 0.02224999999999966, 0.005999999999998451, -0.02999999999999936, -0.045750000000001734, 0.049999999999998934, 0.030749999999997613, -0.004749999999999588, -0.009249999999999758, 0.016000000000000014, 0.03250000000000064, 0.0022500000000000853, -0.041499999999999204, 0.0730000000000004, -0.013999999999999346, 0.007500000000000284, 0.027000000000001023, 0.013749999999998153], zp_timestamp='2026-02-14T18:53:00')
2026-02-14T20:56:28.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-14T20:56:28.834 [DEBUG] [Thread-192049] [transport.py] [_log()] starting thread (client mode): 0xa2d037c0
2026-02-14T20:56:28.834 [DEBUG] [Thread-192049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:56:28.849 [DEBUG] [Thread-192049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:56:28.849 [INFO] [Thread-192049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:56:28.856 [DEBUG] [Thread-192049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:56:28.856 [DEBUG] [Thread-192049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:56:28.857 [DEBUG] [Thread-192049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:56:28.857 [DEBUG] [Thread-192049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:56:28.857 [DEBUG] [Thread-192049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:56:28.857 [DEBUG] [Thread-192049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:56:28.857 [DEBUG] [Thread-192049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:56:28.857 [DEBUG] [Thread-192049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:56:28.857 [DEBUG] [Thread-192049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:56:28.857 [DEBUG] [Thread-192049] [transport.py] [_log()] client lang: <none>
2026-02-14T20:56:28.857 [DEBUG] [Thread-192049] [transport.py] [_log()] server lang: <none>
2026-02-14T20:56:28.857 [DEBUG] [Thread-192049] [transport.py] [_log()] kex follows: False
2026-02-14T20:56:28.857 [DEBUG] [Thread-192049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:56:28.857 [DEBUG] [Thread-192049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:56:28.857 [DEBUG] [Thread-192049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:56:28.857 [DEBUG] [Thread-192049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:56:28.857 [DEBUG] [Thread-192049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:56:28.857 [DEBUG] [Thread-192049] [transport.py] [_log()] Compression: none
2026-02-14T20:56:28.857 [DEBUG] [Thread-192049] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:56:28.914 [DEBUG] [Thread-192049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:56:28.914 [DEBUG] [Thread-192049] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:56:28.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:56:28.914 [DEBUG] [Thread-192049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:56:28.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:56:28.975 [DEBUG] [Thread-192049] [transport.py] [_log()] userauth is OK
2026-02-14T20:56:28.975 [DEBUG] [Thread-192049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:56:28.976 [DEBUG] [Thread-192049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:56:28.976 [DEBUG] [Thread-192049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:56:28.976 [DEBUG] [Thread-192049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:56:28.999 [INFO] [Thread-192049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:56:28.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-14T20:56:28.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:56:29.888 [DEBUG] [Thread-192049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:56:29.888 [DEBUG] [Thread-192049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:56:29.936 [DEBUG] [Thread-192049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:56:29.936 [DEBUG] [Thread-192049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:56:29.945 [DEBUG] [Thread-192049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:56:29.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:56:29.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-14T20:56:29.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-14T20:56:29.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:56:29.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:56:29.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:56:29.982 [DEBUG] [Thread-192049] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:56:36.644 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:56:36.646 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:56:39.182 [DEBUG] [Thread-192051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:56:45.837 [DEBUG] [Thread-192052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:56:54.224 [DEBUG] [Thread-192053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:56:58.788 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:57:00.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:57:00.003 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:57:00.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-14T20:57:02.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 56, 28), 8.56, 55.46, 0.0, 38.23, 10.81, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:57:02.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:56:28
2026-02-14T20:57:02.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:57:02.808 [DEBUG] [Thread-192054] [transport.py] [_log()] starting thread (client mode): 0xa2d01d50
2026-02-14T20:57:02.809 [DEBUG] [Thread-192054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:57:02.812 [DEBUG] [Thread-192054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:57:02.812 [INFO] [Thread-192054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:57:02.816 [DEBUG] [Thread-192054] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:57:02.816 [DEBUG] [Thread-192054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:57:02.816 [DEBUG] [Thread-192054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:57:02.816 [DEBUG] [Thread-192054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:57:02.816 [DEBUG] [Thread-192054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:57:02.816 [DEBUG] [Thread-192054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:57:02.816 [DEBUG] [Thread-192054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:57:02.816 [DEBUG] [Thread-192054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:57:02.816 [DEBUG] [Thread-192054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:57:02.816 [DEBUG] [Thread-192054] [transport.py] [_log()] client lang: <none>
2026-02-14T20:57:02.816 [DEBUG] [Thread-192054] [transport.py] [_log()] server lang: <none>
2026-02-14T20:57:02.817 [DEBUG] [Thread-192054] [transport.py] [_log()] kex follows: False
2026-02-14T20:57:02.817 [DEBUG] [Thread-192054] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:57:02.817 [DEBUG] [Thread-192054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:57:02.817 [DEBUG] [Thread-192054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:57:02.818 [DEBUG] [Thread-192054] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:57:02.818 [DEBUG] [Thread-192054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:57:02.818 [DEBUG] [Thread-192054] [transport.py] [_log()] Compression: none
2026-02-14T20:57:02.818 [DEBUG] [Thread-192054] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:57:02.854 [DEBUG] [Thread-192054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:57:02.861 [DEBUG] [Thread-192054] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:57:02.862 [DEBUG] [Thread-192054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:57:02.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:57:02.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:57:02.864 [DEBUG] [Thread-192054] [transport.py] [_log()] userauth is OK
2026-02-14T20:57:02.865 [DEBUG] [Thread-192054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:57:02.865 [DEBUG] [Thread-192054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:57:02.865 [DEBUG] [Thread-192054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:57:02.865 [DEBUG] [Thread-192054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:57:02.890 [INFO] [Thread-192054] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:57:02.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:57:03.527 [DEBUG] [Thread-192054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:57:03.528 [DEBUG] [Thread-192054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:57:03.528 [DEBUG] [Thread-192054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:57:03.568 [DEBUG] [Thread-192054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:57:03.568 [DEBUG] [Thread-192054] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:57:03.570 [DEBUG] [Thread-192054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:57:03.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:57:03.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:57:03.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:57:03.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:57:03.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:57:03.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:57:03.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:57:03.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:57:03.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:57:03.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.789003 -999.00  +10.70  28.68     60   +3.40 1 1 1 1 1     0    0 6.85 -28.28 ZNESW 29.2 28.7 155.4 39.4 11.2 -25.5 11.1 -24.5 10.8 -23.4 11.1 -24.5
2026-02-14T20:57:03.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:57:03.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:57:03.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.789003
2026-02-14T20:57:03.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:57:03.590 [DEBUG] [Thread-192054] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:57:03.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:57:03.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:57:03.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:57:03.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:57:03.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:56:28', tmtdew=8.56, humidity=55.46, cloud=0.0, wind=38.23, temperature=10.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T20:56:29', seeing=3.34, atlas_timestamp='2026-02-14T18:56:09.859', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.016750000000000043, 0.0002500000000011937, -0.02850000000000108, -0.029500000000000526, 0.02224999999999966, -0.037499999999999645, 0.013250000000001094, 0.028499999999999304, -0.009999999999999787, -0.007749999999999702, -0.028499999999999304, 0.08749999999999858, 0.042749999999999844, -0.03900000000000148, -0.02400000000000091, 0.02224999999999966, 0.005999999999998451, -0.02999999999999936, -0.045750000000001734, 0.049999999999998934, 0.030749999999997613, -0.004749999999999588, -0.009249999999999758, 0.016000000000000014, 0.03250000000000064, 0.0022500000000000853, -0.041499999999999204, 0.0730000000000004, -0.013999999999999346, 0.007500000000000284, 0.027000000000001023, 0.013749999999998153], zp_timestamp='2026-02-14T18:53:00')
2026-02-14T20:57:03.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-14T20:57:03.686 [DEBUG] [Thread-192057] [transport.py] [_log()] starting thread (client mode): 0xa2d03160
2026-02-14T20:57:03.686 [DEBUG] [Thread-192057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:57:03.701 [DEBUG] [Thread-192057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:57:03.701 [INFO] [Thread-192057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:57:03.709 [DEBUG] [Thread-192057] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:57:03.710 [DEBUG] [Thread-192057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:57:03.710 [DEBUG] [Thread-192057] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:57:03.710 [DEBUG] [Thread-192057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:57:03.710 [DEBUG] [Thread-192057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:57:03.710 [DEBUG] [Thread-192057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:57:03.710 [DEBUG] [Thread-192057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:57:03.710 [DEBUG] [Thread-192057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:57:03.710 [DEBUG] [Thread-192057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:57:03.711 [DEBUG] [Thread-192057] [transport.py] [_log()] client lang: <none>
2026-02-14T20:57:03.711 [DEBUG] [Thread-192057] [transport.py] [_log()] server lang: <none>
2026-02-14T20:57:03.711 [DEBUG] [Thread-192057] [transport.py] [_log()] kex follows: False
2026-02-14T20:57:03.711 [DEBUG] [Thread-192057] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:57:03.711 [DEBUG] [Thread-192057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:57:03.711 [DEBUG] [Thread-192057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:57:03.711 [DEBUG] [Thread-192057] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:57:03.711 [DEBUG] [Thread-192057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:57:03.711 [DEBUG] [Thread-192057] [transport.py] [_log()] Compression: none
2026-02-14T20:57:03.711 [DEBUG] [Thread-192057] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:57:03.768 [DEBUG] [Thread-192057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:57:03.768 [DEBUG] [Thread-192057] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:57:03.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:57:03.770 [DEBUG] [Thread-192057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:57:03.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:57:03.823 [DEBUG] [Thread-192057] [transport.py] [_log()] userauth is OK
2026-02-14T20:57:03.824 [DEBUG] [Thread-192057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:57:03.824 [DEBUG] [Thread-192057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:57:03.824 [DEBUG] [Thread-192057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:57:03.824 [DEBUG] [Thread-192057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:57:03.841 [INFO] [Thread-192057] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:57:03.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-14T20:57:03.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:57:04.685 [DEBUG] [Thread-192057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:57:04.686 [DEBUG] [Thread-192057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:57:04.734 [DEBUG] [Thread-192057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:57:04.734 [DEBUG] [Thread-192057] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:57:04.743 [DEBUG] [Thread-192057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:57:04.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:57:04.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-14T20:57:04.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-14T20:57:04.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:57:04.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:57:04.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:57:04.778 [DEBUG] [Thread-192057] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:57:09.266 [DEBUG] [Thread-192059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:57:24.355 [DEBUG] [Thread-192060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:57:34.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:57:34.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:57:34.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-14T20:57:36.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 57, 3), 8.55, 55.47, 0.0, 35.99, 10.79, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:57:36.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:57:03
2026-02-14T20:57:36.848 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:57:36.850 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:57:37.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:57:37.379 [DEBUG] [Thread-192061] [transport.py] [_log()] starting thread (client mode): 0xa2d01fc0
2026-02-14T20:57:37.379 [DEBUG] [Thread-192061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:57:37.389 [DEBUG] [Thread-192061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:57:37.389 [INFO] [Thread-192061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:57:37.392 [DEBUG] [Thread-192061] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:57:37.392 [DEBUG] [Thread-192061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:57:37.392 [DEBUG] [Thread-192061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:57:37.393 [DEBUG] [Thread-192061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:57:37.393 [DEBUG] [Thread-192061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:57:37.393 [DEBUG] [Thread-192061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:57:37.393 [DEBUG] [Thread-192061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:57:37.393 [DEBUG] [Thread-192061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:57:37.393 [DEBUG] [Thread-192061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:57:37.393 [DEBUG] [Thread-192061] [transport.py] [_log()] client lang: <none>
2026-02-14T20:57:37.393 [DEBUG] [Thread-192061] [transport.py] [_log()] server lang: <none>
2026-02-14T20:57:37.393 [DEBUG] [Thread-192061] [transport.py] [_log()] kex follows: False
2026-02-14T20:57:37.393 [DEBUG] [Thread-192061] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:57:37.393 [DEBUG] [Thread-192061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:57:37.393 [DEBUG] [Thread-192061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:57:37.393 [DEBUG] [Thread-192061] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:57:37.393 [DEBUG] [Thread-192061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:57:37.393 [DEBUG] [Thread-192061] [transport.py] [_log()] Compression: none
2026-02-14T20:57:37.393 [DEBUG] [Thread-192061] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:57:37.416 [DEBUG] [Thread-192061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:57:37.418 [DEBUG] [Thread-192061] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:57:37.419 [DEBUG] [Thread-192061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:57:37.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:57:37.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:57:37.423 [DEBUG] [Thread-192061] [transport.py] [_log()] userauth is OK
2026-02-14T20:57:37.424 [DEBUG] [Thread-192061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:57:37.424 [DEBUG] [Thread-192061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:57:37.424 [DEBUG] [Thread-192061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:57:37.424 [DEBUG] [Thread-192061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:57:37.472 [INFO] [Thread-192061] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:57:37.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:57:38.075 [DEBUG] [Thread-192061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:57:38.075 [DEBUG] [Thread-192061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:57:38.077 [DEBUG] [Thread-192061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:57:38.116 [DEBUG] [Thread-192061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:57:38.116 [DEBUG] [Thread-192061] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:57:38.118 [DEBUG] [Thread-192061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:57:38.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:57:38.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:57:38.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:57:38.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:57:38.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:57:38.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:57:38.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:57:38.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:57:38.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:57:38.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.789350 -999.00  +10.70  29.20     60   +3.40 1 1 1 1 1     0    0 6.84 -24.88 ZNESW 27.3 29.2 165.0 42.4 11.2 -25.5 11.0 -24.5 10.8 -23.4 11.1 -24.5
2026-02-14T20:57:38.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:57:38.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:57:38.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.789350
2026-02-14T20:57:38.150 [DEBUG] [Thread-192061] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:57:38.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:57:38.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:57:38.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:57:38.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:57:38.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:57:38.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:57:03', tmtdew=8.55, humidity=55.47, cloud=0.0, wind=35.99, temperature=10.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T20:57:04', seeing=2.57, atlas_timestamp='2026-02-14T18:56:39.840', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.016750000000000043, 0.0002500000000011937, -0.02850000000000108, -0.029500000000000526, 0.02224999999999966, -0.037499999999999645, 0.013250000000001094, 0.028499999999999304, -0.009999999999999787, -0.007749999999999702, -0.028499999999999304, 0.08749999999999858, 0.042749999999999844, -0.03900000000000148, -0.02400000000000091, 0.02224999999999966, 0.005999999999998451, -0.02999999999999936, -0.045750000000001734, 0.049999999999998934, 0.030749999999997613, -0.004749999999999588, -0.009249999999999758, 0.016000000000000014, 0.03250000000000064, 0.0022500000000000853, -0.041499999999999204, 0.0730000000000004, -0.013999999999999346, 0.007500000000000284, 0.027000000000001023, 0.013749999999998153], zp_timestamp='2026-02-14T18:53:00')
2026-02-14T20:57:38.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-14T20:57:38.250 [DEBUG] [Thread-192064] [transport.py] [_log()] starting thread (client mode): 0xa57e0610
2026-02-14T20:57:38.250 [DEBUG] [Thread-192064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:57:38.264 [DEBUG] [Thread-192064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:57:38.264 [INFO] [Thread-192064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:57:38.271 [DEBUG] [Thread-192064] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:57:38.271 [DEBUG] [Thread-192064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:57:38.271 [DEBUG] [Thread-192064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:57:38.271 [DEBUG] [Thread-192064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:57:38.271 [DEBUG] [Thread-192064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:57:38.271 [DEBUG] [Thread-192064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:57:38.271 [DEBUG] [Thread-192064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:57:38.271 [DEBUG] [Thread-192064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:57:38.271 [DEBUG] [Thread-192064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:57:38.272 [DEBUG] [Thread-192064] [transport.py] [_log()] client lang: <none>
2026-02-14T20:57:38.272 [DEBUG] [Thread-192064] [transport.py] [_log()] server lang: <none>
2026-02-14T20:57:38.272 [DEBUG] [Thread-192064] [transport.py] [_log()] kex follows: False
2026-02-14T20:57:38.272 [DEBUG] [Thread-192064] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:57:38.272 [DEBUG] [Thread-192064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:57:38.272 [DEBUG] [Thread-192064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:57:38.272 [DEBUG] [Thread-192064] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:57:38.272 [DEBUG] [Thread-192064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:57:38.272 [DEBUG] [Thread-192064] [transport.py] [_log()] Compression: none
2026-02-14T20:57:38.272 [DEBUG] [Thread-192064] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:57:38.330 [DEBUG] [Thread-192064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:57:38.330 [DEBUG] [Thread-192064] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:57:38.330 [DEBUG] [Thread-192064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:57:38.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:57:38.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:57:38.387 [DEBUG] [Thread-192064] [transport.py] [_log()] userauth is OK
2026-02-14T20:57:38.387 [DEBUG] [Thread-192064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:57:38.387 [DEBUG] [Thread-192064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:57:38.387 [DEBUG] [Thread-192064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:57:38.387 [DEBUG] [Thread-192064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:57:38.402 [INFO] [Thread-192064] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:57:38.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-14T20:57:38.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:57:39.232 [DEBUG] [Thread-192064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:57:39.232 [DEBUG] [Thread-192064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:57:39.280 [DEBUG] [Thread-192064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:57:39.281 [DEBUG] [Thread-192064] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:57:39.289 [DEBUG] [Thread-192064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:57:39.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:57:39.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-14T20:57: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') -> 00000000
2026-02-14T20:57:39.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:57:39.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:57:39.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:57:39.323 [DEBUG] [Thread-192064] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:57:39.380 [DEBUG] [Thread-192066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:57:46.287 [DEBUG] [Thread-192067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:57:54.446 [DEBUG] [Thread-192068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:58:09.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:58:09.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:58:09.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-14T20:58:09.478 [DEBUG] [Thread-192069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:58:11.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 57, 38), 8.66, 55.11, 0.0, 41.99, 11.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:58:11.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:57:38
2026-02-14T20:58:11.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:58:11.772 [DEBUG] [Thread-192070] [transport.py] [_log()] starting thread (client mode): 0xa57e3c10
2026-02-14T20:58:11.773 [DEBUG] [Thread-192070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:58:11.792 [DEBUG] [Thread-192070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:58:11.792 [INFO] [Thread-192070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:58:11.795 [DEBUG] [Thread-192070] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:58:11.795 [DEBUG] [Thread-192070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:58:11.795 [DEBUG] [Thread-192070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:58:11.795 [DEBUG] [Thread-192070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:58:11.795 [DEBUG] [Thread-192070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:58:11.795 [DEBUG] [Thread-192070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:58:11.795 [DEBUG] [Thread-192070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:58:11.795 [DEBUG] [Thread-192070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:58:11.795 [DEBUG] [Thread-192070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:58:11.795 [DEBUG] [Thread-192070] [transport.py] [_log()] client lang: <none>
2026-02-14T20:58:11.796 [DEBUG] [Thread-192070] [transport.py] [_log()] server lang: <none>
2026-02-14T20:58:11.796 [DEBUG] [Thread-192070] [transport.py] [_log()] kex follows: False
2026-02-14T20:58:11.796 [DEBUG] [Thread-192070] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:58:11.796 [DEBUG] [Thread-192070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:58:11.796 [DEBUG] [Thread-192070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:58:11.796 [DEBUG] [Thread-192070] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:58:11.796 [DEBUG] [Thread-192070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:58:11.796 [DEBUG] [Thread-192070] [transport.py] [_log()] Compression: none
2026-02-14T20:58:11.796 [DEBUG] [Thread-192070] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:58:11.814 [DEBUG] [Thread-192070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:58:11.814 [DEBUG] [Thread-192070] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:58:11.815 [DEBUG] [Thread-192070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:58:11.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:58:11.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:58:11.816 [DEBUG] [Thread-192070] [transport.py] [_log()] userauth is OK
2026-02-14T20:58:11.816 [DEBUG] [Thread-192070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:58:11.816 [DEBUG] [Thread-192070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:58:11.816 [DEBUG] [Thread-192070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:58:11.816 [DEBUG] [Thread-192070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:58:11.826 [INFO] [Thread-192070] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:58:11.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:58:12.441 [DEBUG] [Thread-192070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:58:12.441 [DEBUG] [Thread-192070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:58:12.441 [DEBUG] [Thread-192070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:58:12.482 [DEBUG] [Thread-192070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:58:12.482 [DEBUG] [Thread-192070] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:58:12.484 [DEBUG] [Thread-192070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:58:12.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:58:12.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:58:12.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:58:12.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:58:12.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:58:12.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:58:12.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:58:12.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:58:12.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:58:12.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.789697 -999.00  +10.70  29.81     61   +3.40 1 1 1 1 1     0    0 6.77 -26.59 ZNESW 31.7 29.8 167.2 43.2 11.2 -25.5 11.0 -24.4 10.8 -23.5 11.1 -24.7
2026-02-14T20:58:12.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:58:12.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:58:12.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.789697
2026-02-14T20:58:12.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:58:12.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:58:12.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:58:12.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:58:12.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:58:12.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:57:38', tmtdew=8.66, humidity=55.11, cloud=0.0, wind=41.99, temperature=11.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T20:57:39', seeing=3.11, atlas_timestamp='2026-02-14T18:57:09.821', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.016750000000000043, 0.0002500000000011937, -0.02850000000000108, -0.029500000000000526, 0.02224999999999966, -0.037499999999999645, 0.013250000000001094, 0.028499999999999304, -0.009999999999999787, -0.007749999999999702, -0.028499999999999304, 0.08749999999999858, 0.042749999999999844, -0.03900000000000148, -0.02400000000000091, 0.02224999999999966, 0.005999999999998451, -0.02999999999999936, -0.045750000000001734, 0.049999999999998934, 0.030749999999997613, -0.004749999999999588, -0.009249999999999758, 0.016000000000000014, 0.03250000000000064, 0.0022500000000000853, -0.041499999999999204, 0.0730000000000004, -0.013999999999999346, 0.007500000000000284, 0.027000000000001023, 0.013749999999998153], zp_timestamp='2026-02-14T18:53:00')
2026-02-14T20:58:12.502 [DEBUG] [Thread-192070] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:58:12.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-14T20:58:12.592 [DEBUG] [Thread-192073] [transport.py] [_log()] starting thread (client mode): 0xa2d00f40
2026-02-14T20:58:12.592 [DEBUG] [Thread-192073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:58:12.606 [DEBUG] [Thread-192073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:58:12.606 [INFO] [Thread-192073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:58:12.614 [DEBUG] [Thread-192073] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:58:12.614 [DEBUG] [Thread-192073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:58:12.614 [DEBUG] [Thread-192073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:58:12.614 [DEBUG] [Thread-192073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:58:12.614 [DEBUG] [Thread-192073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:58:12.614 [DEBUG] [Thread-192073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:58:12.614 [DEBUG] [Thread-192073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:58:12.614 [DEBUG] [Thread-192073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:58:12.614 [DEBUG] [Thread-192073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:58:12.614 [DEBUG] [Thread-192073] [transport.py] [_log()] client lang: <none>
2026-02-14T20:58:12.614 [DEBUG] [Thread-192073] [transport.py] [_log()] server lang: <none>
2026-02-14T20:58:12.614 [DEBUG] [Thread-192073] [transport.py] [_log()] kex follows: False
2026-02-14T20:58:12.614 [DEBUG] [Thread-192073] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:58:12.614 [DEBUG] [Thread-192073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:58:12.614 [DEBUG] [Thread-192073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:58:12.614 [DEBUG] [Thread-192073] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:58:12.614 [DEBUG] [Thread-192073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:58:12.614 [DEBUG] [Thread-192073] [transport.py] [_log()] Compression: none
2026-02-14T20:58:12.614 [DEBUG] [Thread-192073] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:58:12.669 [DEBUG] [Thread-192073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:58:12.670 [DEBUG] [Thread-192073] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:58:12.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:58:12.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:58:12.670 [DEBUG] [Thread-192073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:58:12.727 [DEBUG] [Thread-192073] [transport.py] [_log()] userauth is OK
2026-02-14T20:58:12.727 [DEBUG] [Thread-192073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:58:12.727 [DEBUG] [Thread-192073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:58:12.727 [DEBUG] [Thread-192073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:58:12.727 [DEBUG] [Thread-192073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:58:12.742 [INFO] [Thread-192073] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:58:12.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-14T20:58:12.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:58:13.555 [DEBUG] [Thread-192073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:58:13.555 [DEBUG] [Thread-192073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:58:13.604 [DEBUG] [Thread-192073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:58:13.604 [DEBUG] [Thread-192073] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:58:13.612 [DEBUG] [Thread-192073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:58:13.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:58:13.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-14T20:58:13.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-14T20:58:13.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:58:13.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:58:13.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:58:13.647 [DEBUG] [Thread-192073] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:58:24.508 [DEBUG] [Thread-192075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:58:32.463 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:58:37.053 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:58:37.054 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:58:39.575 [DEBUG] [Thread-192076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:58:43.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:58:43.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:58:43.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-14T20:58:45.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 58, 14), 8.43, 55.56, 0.0, 37.21, 10.77, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:58:45.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:58:14
2026-02-14T20:58:45.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:58:46.106 [DEBUG] [Thread-192077] [transport.py] [_log()] starting thread (client mode): 0xa2d02560
2026-02-14T20:58:46.106 [DEBUG] [Thread-192077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:58:46.124 [DEBUG] [Thread-192077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:58:46.125 [INFO] [Thread-192077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:58:46.128 [DEBUG] [Thread-192077] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:58:46.128 [DEBUG] [Thread-192077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:58:46.128 [DEBUG] [Thread-192077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:58:46.128 [DEBUG] [Thread-192077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:58:46.128 [DEBUG] [Thread-192077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:58:46.128 [DEBUG] [Thread-192077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:58:46.128 [DEBUG] [Thread-192077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:58:46.128 [DEBUG] [Thread-192077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:58:46.128 [DEBUG] [Thread-192077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:58:46.128 [DEBUG] [Thread-192077] [transport.py] [_log()] client lang: <none>
2026-02-14T20:58:46.128 [DEBUG] [Thread-192077] [transport.py] [_log()] server lang: <none>
2026-02-14T20:58:46.128 [DEBUG] [Thread-192077] [transport.py] [_log()] kex follows: False
2026-02-14T20:58:46.128 [DEBUG] [Thread-192077] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:58:46.128 [DEBUG] [Thread-192077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:58:46.128 [DEBUG] [Thread-192077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:58:46.128 [DEBUG] [Thread-192077] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:58:46.128 [DEBUG] [Thread-192077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:58:46.128 [DEBUG] [Thread-192077] [transport.py] [_log()] Compression: none
2026-02-14T20:58:46.128 [DEBUG] [Thread-192077] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:58:46.147 [DEBUG] [Thread-192077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:58:46.147 [DEBUG] [Thread-192077] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:58:46.147 [DEBUG] [Thread-192077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:58:46.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:58:46.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:58:46.149 [DEBUG] [Thread-192077] [transport.py] [_log()] userauth is OK
2026-02-14T20:58:46.149 [DEBUG] [Thread-192077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:58:46.149 [DEBUG] [Thread-192077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:58:46.149 [DEBUG] [Thread-192077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:58:46.149 [DEBUG] [Thread-192077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:58:46.159 [INFO] [Thread-192077] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:58:46.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:58:46.625 [DEBUG] [Thread-192079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:58:46.937 [DEBUG] [Thread-192077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:58:46.938 [DEBUG] [Thread-192077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:58:46.938 [DEBUG] [Thread-192077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:58:46.979 [DEBUG] [Thread-192077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:58:46.979 [DEBUG] [Thread-192077] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:58:46.982 [DEBUG] [Thread-192077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:58:46.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:58:46.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:58:46.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:58:46.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:58:46.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:58:46.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:58:46.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:58:46.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:58:46.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:58:46.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.790391 -999.00  +10.60  34.75     61   +3.40 1 1 2 1 1     0    0 6.74 -25.04 ZNESW 30.5 34.8 152.2 39.5 11.2 -25.4 11.0 -24.4 10.8 -23.4 11.2 -24.5
2026-02-14T20:58:46.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:58:46.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:58:46.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.790391
2026-02-14T20:58:47.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:58:47.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:58:47.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:58:47.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:58:47.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:58:47.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:58:14', tmtdew=8.43, humidity=55.56, cloud=0.0, wind=37.21, temperature=10.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T20:58:14', seeing=3.39, atlas_timestamp='2026-02-14T18:58:09.782', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.016750000000000043, 0.0002500000000011937, -0.02850000000000108, -0.029500000000000526, 0.02224999999999966, -0.037499999999999645, 0.013250000000001094, 0.028499999999999304, -0.009999999999999787, -0.007749999999999702, -0.028499999999999304, 0.08749999999999858, 0.042749999999999844, -0.03900000000000148, -0.02400000000000091, 0.02224999999999966, 0.005999999999998451, -0.02999999999999936, -0.045750000000001734, 0.049999999999998934, 0.030749999999997613, -0.004749999999999588, -0.009249999999999758, 0.016000000000000014, 0.03250000000000064, 0.0022500000000000853, -0.041499999999999204, 0.0730000000000004, -0.013999999999999346, 0.007500000000000284, 0.027000000000001023, 0.013749999999998153], zp_timestamp='2026-02-14T18:53:00')
2026-02-14T20:58:47.002 [DEBUG] [Thread-192077] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:58:47.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-14T20:58:47.089 [DEBUG] [Thread-192081] [transport.py] [_log()] starting thread (client mode): 0xa2d02710
2026-02-14T20:58:47.089 [DEBUG] [Thread-192081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:58:47.105 [DEBUG] [Thread-192081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:58:47.105 [INFO] [Thread-192081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:58:47.112 [DEBUG] [Thread-192081] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:58:47.112 [DEBUG] [Thread-192081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:58:47.112 [DEBUG] [Thread-192081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:58:47.112 [DEBUG] [Thread-192081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:58:47.112 [DEBUG] [Thread-192081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:58:47.112 [DEBUG] [Thread-192081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:58:47.112 [DEBUG] [Thread-192081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:58:47.112 [DEBUG] [Thread-192081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:58:47.112 [DEBUG] [Thread-192081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:58:47.112 [DEBUG] [Thread-192081] [transport.py] [_log()] client lang: <none>
2026-02-14T20:58:47.112 [DEBUG] [Thread-192081] [transport.py] [_log()] server lang: <none>
2026-02-14T20:58:47.112 [DEBUG] [Thread-192081] [transport.py] [_log()] kex follows: False
2026-02-14T20:58:47.112 [DEBUG] [Thread-192081] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:58:47.112 [DEBUG] [Thread-192081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:58:47.112 [DEBUG] [Thread-192081] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:58:47.112 [DEBUG] [Thread-192081] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:58:47.112 [DEBUG] [Thread-192081] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:58:47.112 [DEBUG] [Thread-192081] [transport.py] [_log()] Compression: none
2026-02-14T20:58:47.112 [DEBUG] [Thread-192081] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:58:47.170 [DEBUG] [Thread-192081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:58:47.170 [DEBUG] [Thread-192081] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:58:47.170 [DEBUG] [Thread-192081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:58:47.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:58:47.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:58:47.227 [DEBUG] [Thread-192081] [transport.py] [_log()] userauth is OK
2026-02-14T20:58:47.227 [DEBUG] [Thread-192081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:58:47.227 [DEBUG] [Thread-192081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:58:47.227 [DEBUG] [Thread-192081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:58:47.227 [DEBUG] [Thread-192081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:58:47.242 [INFO] [Thread-192081] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:58:47.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-14T20:58:47.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:58:48.081 [DEBUG] [Thread-192081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:58:48.081 [DEBUG] [Thread-192081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:58:48.130 [DEBUG] [Thread-192081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:58:48.130 [DEBUG] [Thread-192081] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:58:48.138 [DEBUG] [Thread-192081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:58:48.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:58:48.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-14T20:58:48.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-14T20:58:48.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:58:48.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:58:48.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:58:48.170 [DEBUG] [Thread-192081] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:58:54.603 [DEBUG] [Thread-192083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:59:09.663 [DEBUG] [Thread-192084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:59:18.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:59:18.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:59:18.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-14T20:59:20.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 58, 50), 8.47, 56.07, 0.0, 31.34, 10.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:59:20.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:58:50
2026-02-14T20:59:20.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:59:20.668 [DEBUG] [Thread-192085] [transport.py] [_log()] starting thread (client mode): 0xa5743670
2026-02-14T20:59:20.668 [DEBUG] [Thread-192085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:59:20.686 [DEBUG] [Thread-192085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:59:20.686 [INFO] [Thread-192085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:59:20.689 [DEBUG] [Thread-192085] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:59:20.689 [DEBUG] [Thread-192085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:59:20.689 [DEBUG] [Thread-192085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:59:20.689 [DEBUG] [Thread-192085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:59:20.689 [DEBUG] [Thread-192085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:59:20.689 [DEBUG] [Thread-192085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:59:20.689 [DEBUG] [Thread-192085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:59:20.689 [DEBUG] [Thread-192085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:59:20.689 [DEBUG] [Thread-192085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:59:20.689 [DEBUG] [Thread-192085] [transport.py] [_log()] client lang: <none>
2026-02-14T20:59:20.689 [DEBUG] [Thread-192085] [transport.py] [_log()] server lang: <none>
2026-02-14T20:59:20.689 [DEBUG] [Thread-192085] [transport.py] [_log()] kex follows: False
2026-02-14T20:59:20.689 [DEBUG] [Thread-192085] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:59:20.690 [DEBUG] [Thread-192085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:59:20.690 [DEBUG] [Thread-192085] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:59:20.690 [DEBUG] [Thread-192085] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:59:20.690 [DEBUG] [Thread-192085] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:59:20.690 [DEBUG] [Thread-192085] [transport.py] [_log()] Compression: none
2026-02-14T20:59:20.690 [DEBUG] [Thread-192085] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:59:20.712 [DEBUG] [Thread-192085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:59:20.713 [DEBUG] [Thread-192085] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:59:20.713 [DEBUG] [Thread-192085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:59:20.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:59:20.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:59:20.714 [DEBUG] [Thread-192085] [transport.py] [_log()] userauth is OK
2026-02-14T20:59:20.714 [DEBUG] [Thread-192085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:59:20.714 [DEBUG] [Thread-192085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:59:20.714 [DEBUG] [Thread-192085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:59:20.714 [DEBUG] [Thread-192085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:59:20.724 [INFO] [Thread-192085] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:59:20.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:59:21.307 [DEBUG] [Thread-192085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:59:21.307 [DEBUG] [Thread-192085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:59:21.308 [DEBUG] [Thread-192085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:59:21.349 [DEBUG] [Thread-192085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:59:21.349 [DEBUG] [Thread-192085] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:59:21.351 [DEBUG] [Thread-192085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:59:21.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:59:21.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:59:21.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:59:21.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:59:21.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:59:21.369 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:59:21.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:59:21.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:59:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:59:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.790739 -999.00  +10.60  26.98     61   +3.50 1 1 1 1 1     0    0 6.82 -24.57 ZNESW 26.4 27.0 158.8 36.7 11.1 -25.5 11.0 -24.3 10.8 -23.4 11.1 -24.7
2026-02-14T20:59:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:59:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:59:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.790739
2026-02-14T20:59:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:59:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:59:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:59:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:59:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:59:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:58:50', tmtdew=8.47, humidity=56.07, cloud=0.0, wind=31.34, temperature=10.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T20:58:51', seeing=4.12, atlas_timestamp='2026-02-14T18:58:39.850', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.016750000000000043, 0.0002500000000011937, -0.02850000000000108, -0.029500000000000526, 0.02224999999999966, -0.037499999999999645, 0.013250000000001094, 0.028499999999999304, -0.009999999999999787, -0.007749999999999702, -0.028499999999999304, 0.08749999999999858, 0.042749999999999844, -0.03900000000000148, -0.02400000000000091, 0.02224999999999966, 0.005999999999998451, -0.02999999999999936, -0.045750000000001734, 0.049999999999998934, 0.030749999999997613, -0.004749999999999588, -0.009249999999999758, 0.016000000000000014, 0.03250000000000064, 0.0022500000000000853, -0.041499999999999204, 0.0730000000000004, -0.013999999999999346, 0.007500000000000284, 0.027000000000001023, 0.013749999999998153], zp_timestamp='2026-02-14T18:56:00')
2026-02-14T20:59:21.371 [DEBUG] [Thread-192085] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:59:21.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-14T20:59:21.454 [DEBUG] [Thread-192088] [transport.py] [_log()] starting thread (client mode): 0xa57e2a10
2026-02-14T20:59:21.455 [DEBUG] [Thread-192088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:59:21.470 [DEBUG] [Thread-192088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:59:21.470 [INFO] [Thread-192088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:59:21.477 [DEBUG] [Thread-192088] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:59:21.477 [DEBUG] [Thread-192088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:59:21.477 [DEBUG] [Thread-192088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:59:21.477 [DEBUG] [Thread-192088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:59:21.477 [DEBUG] [Thread-192088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:59:21.477 [DEBUG] [Thread-192088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:59:21.477 [DEBUG] [Thread-192088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:59:21.477 [DEBUG] [Thread-192088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:59:21.477 [DEBUG] [Thread-192088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:59:21.478 [DEBUG] [Thread-192088] [transport.py] [_log()] client lang: <none>
2026-02-14T20:59:21.478 [DEBUG] [Thread-192088] [transport.py] [_log()] server lang: <none>
2026-02-14T20:59:21.478 [DEBUG] [Thread-192088] [transport.py] [_log()] kex follows: False
2026-02-14T20:59:21.478 [DEBUG] [Thread-192088] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:59:21.478 [DEBUG] [Thread-192088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:59:21.478 [DEBUG] [Thread-192088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:59:21.478 [DEBUG] [Thread-192088] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:59:21.478 [DEBUG] [Thread-192088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:59:21.478 [DEBUG] [Thread-192088] [transport.py] [_log()] Compression: none
2026-02-14T20:59:21.478 [DEBUG] [Thread-192088] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:59:21.534 [DEBUG] [Thread-192088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:59:21.535 [DEBUG] [Thread-192088] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:59:21.535 [DEBUG] [Thread-192088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:59:21.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:59:21.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:59:21.591 [DEBUG] [Thread-192088] [transport.py] [_log()] userauth is OK
2026-02-14T20:59:21.592 [DEBUG] [Thread-192088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:59:21.592 [DEBUG] [Thread-192088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:59:21.592 [DEBUG] [Thread-192088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:59:21.592 [DEBUG] [Thread-192088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:59:21.609 [INFO] [Thread-192088] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:59:21.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-14T20:59:21.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:59:22.443 [DEBUG] [Thread-192088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:59:22.443 [DEBUG] [Thread-192088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:59:22.491 [DEBUG] [Thread-192088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:59:22.491 [DEBUG] [Thread-192088] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:59:22.499 [DEBUG] [Thread-192088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:59:22.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:59:22.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-14T20:59:22.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-14T20:59:22.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:59:22.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:59:22.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:59:22.532 [DEBUG] [Thread-192088] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:59:24.693 [DEBUG] [Thread-192090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:59:37.257 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:59:37.258 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:59:39.779 [DEBUG] [Thread-192091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:59:46.974 [DEBUG] [Thread-192092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:59:52.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T20:59:52.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T20:59:52.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-14T20:59:54.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 20, 59, 26), 8.45, 56.16, 0.0, 30.75, 10.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T20:59:54.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 20:59:26
2026-02-14T20:59:54.805 [DEBUG] [Thread-192093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T20:59:54.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T20:59:54.989 [DEBUG] [Thread-192094] [transport.py] [_log()] starting thread (client mode): 0xa57e3d90
2026-02-14T20:59:54.989 [DEBUG] [Thread-192094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:59:55.008 [DEBUG] [Thread-192094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T20:59:55.008 [INFO] [Thread-192094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T20:59:55.011 [DEBUG] [Thread-192094] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:59:55.011 [DEBUG] [Thread-192094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T20:59:55.011 [DEBUG] [Thread-192094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:59:55.011 [DEBUG] [Thread-192094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:59:55.011 [DEBUG] [Thread-192094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:59:55.011 [DEBUG] [Thread-192094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:59:55.011 [DEBUG] [Thread-192094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:59:55.011 [DEBUG] [Thread-192094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:59:55.011 [DEBUG] [Thread-192094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:59:55.011 [DEBUG] [Thread-192094] [transport.py] [_log()] client lang: <none>
2026-02-14T20:59:55.011 [DEBUG] [Thread-192094] [transport.py] [_log()] server lang: <none>
2026-02-14T20:59:55.011 [DEBUG] [Thread-192094] [transport.py] [_log()] kex follows: False
2026-02-14T20:59:55.011 [DEBUG] [Thread-192094] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:59:55.011 [DEBUG] [Thread-192094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:59:55.011 [DEBUG] [Thread-192094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:59:55.011 [DEBUG] [Thread-192094] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:59:55.011 [DEBUG] [Thread-192094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:59:55.011 [DEBUG] [Thread-192094] [transport.py] [_log()] Compression: none
2026-02-14T20:59:55.011 [DEBUG] [Thread-192094] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:59:55.026 [DEBUG] [Thread-192094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:59:55.026 [DEBUG] [Thread-192094] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:59:55.026 [DEBUG] [Thread-192094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T20:59:55.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T20:59:55.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:59:55.027 [DEBUG] [Thread-192094] [transport.py] [_log()] userauth is OK
2026-02-14T20:59:55.027 [DEBUG] [Thread-192094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:59:55.027 [DEBUG] [Thread-192094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:59:55.027 [DEBUG] [Thread-192094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T20:59:55.027 [DEBUG] [Thread-192094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:59:55.036 [INFO] [Thread-192094] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:59:55.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:59:55.633 [DEBUG] [Thread-192094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:59:55.633 [DEBUG] [Thread-192094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:59:55.633 [DEBUG] [Thread-192094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T20:59:55.674 [DEBUG] [Thread-192094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:59:55.674 [DEBUG] [Thread-192094] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:59:55.676 [DEBUG] [Thread-192094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:59:55.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:59:55.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T20:59:55.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T20:59:55.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T20:59:55.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:59:55.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T20:59:55.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:59:55.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:59:55.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T20:59:55.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.791086 -999.00  +10.60  27.11     61   +3.50 1 1 1 1 1     0    0 6.71 -24.44 ZNESW 25.5 27.1 161.2 39.7 11.1 -25.4 11.0 -24.4 10.8 -23.5 11.1 -24.6
2026-02-14T20:59:55.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T20:59:55.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T20:59:55.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.791086
2026-02-14T20:59:55.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T20:59:55.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T20:59:55.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T20:59:55.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T20:59:55.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T20:59:55.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T20:59:26', tmtdew=8.45, humidity=56.16, cloud=0.0, wind=30.75, temperature=10.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T20:59:26', seeing=4.41, atlas_timestamp='2026-02-14T18:59:09.830', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.016750000000000043, 0.0002500000000011937, -0.02850000000000108, -0.029500000000000526, 0.02224999999999966, -0.037499999999999645, 0.013250000000001094, 0.028499999999999304, -0.009999999999999787, -0.007749999999999702, -0.028499999999999304, 0.08749999999999858, 0.042749999999999844, -0.03900000000000148, -0.02400000000000091, 0.02224999999999966, 0.005999999999998451, -0.02999999999999936, -0.045750000000001734, 0.049999999999998934, 0.030749999999997613, -0.004749999999999588, -0.009249999999999758, 0.016000000000000014, 0.03250000000000064, 0.0022500000000000853, -0.041499999999999204, 0.0730000000000004, -0.013999999999999346, 0.007500000000000284, 0.027000000000001023, 0.013749999999998153], zp_timestamp='2026-02-14T18:56:00')
2026-02-14T20:59:55.705 [DEBUG] [Thread-192094] [transport.py] [_log()] EOF in transport thread
2026-02-14T20:59:55.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-14T20:59:55.793 [DEBUG] [Thread-192097] [transport.py] [_log()] starting thread (client mode): 0xa57439a0
2026-02-14T20:59:55.794 [DEBUG] [Thread-192097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T20:59:55.808 [DEBUG] [Thread-192097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T20:59:55.808 [INFO] [Thread-192097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T20:59:55.816 [DEBUG] [Thread-192097] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T20:59:55.816 [DEBUG] [Thread-192097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T20:59:55.816 [DEBUG] [Thread-192097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T20:59:55.816 [DEBUG] [Thread-192097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:59:55.816 [DEBUG] [Thread-192097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T20:59:55.816 [DEBUG] [Thread-192097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:59:55.816 [DEBUG] [Thread-192097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T20:59:55.816 [DEBUG] [Thread-192097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T20:59:55.816 [DEBUG] [Thread-192097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T20:59:55.816 [DEBUG] [Thread-192097] [transport.py] [_log()] client lang: <none>
2026-02-14T20:59:55.816 [DEBUG] [Thread-192097] [transport.py] [_log()] server lang: <none>
2026-02-14T20:59:55.816 [DEBUG] [Thread-192097] [transport.py] [_log()] kex follows: False
2026-02-14T20:59:55.816 [DEBUG] [Thread-192097] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T20:59:55.816 [DEBUG] [Thread-192097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T20:59:55.816 [DEBUG] [Thread-192097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T20:59:55.816 [DEBUG] [Thread-192097] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T20:59:55.816 [DEBUG] [Thread-192097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T20:59:55.816 [DEBUG] [Thread-192097] [transport.py] [_log()] Compression: none
2026-02-14T20:59:55.816 [DEBUG] [Thread-192097] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T20:59:55.874 [DEBUG] [Thread-192097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T20:59:55.874 [DEBUG] [Thread-192097] [transport.py] [_log()] Switch to new keys ...
2026-02-14T20:59:55.874 [DEBUG] [Thread-192097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T20:59:55.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T20:59:55.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T20:59:55.931 [DEBUG] [Thread-192097] [transport.py] [_log()] userauth is OK
2026-02-14T20:59:55.932 [DEBUG] [Thread-192097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T20:59:55.932 [DEBUG] [Thread-192097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T20:59:55.932 [DEBUG] [Thread-192097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T20:59:55.932 [DEBUG] [Thread-192097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T20:59:55.945 [INFO] [Thread-192097] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T20:59:55.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-14T20:59:55.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T20:59:56.789 [DEBUG] [Thread-192097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T20:59:56.789 [DEBUG] [Thread-192097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T20:59:56.838 [DEBUG] [Thread-192097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T20:59:56.838 [DEBUG] [Thread-192097] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T20:59:56.846 [DEBUG] [Thread-192097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T20:59:56.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T20:59:56.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-14T20:59:56.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-14T20:59:56.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T20:59:56.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T20:59:56.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T20:59:56.877 [DEBUG] [Thread-192097] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:00:05.912 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:00:09.828 [DEBUG] [Thread-192099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:00:24.862 [DEBUG] [Thread-192100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:00:26.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:00:26.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:00: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-14T21:00:28.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 0, 1), 8.45, 56.16, 0.0, 35.97, 10.67, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:00:28.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:00:01
2026-02-14T21:00:29.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:00:29.371 [DEBUG] [Thread-192101] [transport.py] [_log()] starting thread (client mode): 0xa2d00b20
2026-02-14T21:00:29.371 [DEBUG] [Thread-192101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:00:29.391 [DEBUG] [Thread-192101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:00:29.391 [INFO] [Thread-192101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:00:29.394 [DEBUG] [Thread-192101] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:00:29.394 [DEBUG] [Thread-192101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:00:29.394 [DEBUG] [Thread-192101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:00:29.394 [DEBUG] [Thread-192101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:00:29.394 [DEBUG] [Thread-192101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:00:29.394 [DEBUG] [Thread-192101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:00:29.394 [DEBUG] [Thread-192101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:00:29.394 [DEBUG] [Thread-192101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:00:29.394 [DEBUG] [Thread-192101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:00:29.394 [DEBUG] [Thread-192101] [transport.py] [_log()] client lang: <none>
2026-02-14T21:00:29.394 [DEBUG] [Thread-192101] [transport.py] [_log()] server lang: <none>
2026-02-14T21:00:29.394 [DEBUG] [Thread-192101] [transport.py] [_log()] kex follows: False
2026-02-14T21:00:29.394 [DEBUG] [Thread-192101] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:00:29.394 [DEBUG] [Thread-192101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:00:29.394 [DEBUG] [Thread-192101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:00:29.394 [DEBUG] [Thread-192101] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:00:29.394 [DEBUG] [Thread-192101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:00:29.394 [DEBUG] [Thread-192101] [transport.py] [_log()] Compression: none
2026-02-14T21:00:29.394 [DEBUG] [Thread-192101] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:00:29.409 [DEBUG] [Thread-192101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:00:29.409 [DEBUG] [Thread-192101] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:00:29.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:00:29.410 [DEBUG] [Thread-192101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:00:29.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:00:29.410 [DEBUG] [Thread-192101] [transport.py] [_log()] userauth is OK
2026-02-14T21:00:29.410 [DEBUG] [Thread-192101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:00:29.410 [DEBUG] [Thread-192101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:00:29.410 [DEBUG] [Thread-192101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:00:29.410 [DEBUG] [Thread-192101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:00:29.420 [INFO] [Thread-192101] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:00:29.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:00:30.052 [DEBUG] [Thread-192101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:00:30.052 [DEBUG] [Thread-192101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:00:30.053 [DEBUG] [Thread-192101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:00:30.094 [DEBUG] [Thread-192101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:00:30.094 [DEBUG] [Thread-192101] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:00:30.096 [DEBUG] [Thread-192101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:00:30.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:00:30.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:00:30.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:00:30.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:00:30.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:00:30.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:00:30.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:00:30.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:00:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:00:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.791433 -999.00  +10.60  32.46     61   +3.50 1 1 2 1 1     0    0 6.70 -26.22 ZNESW 27.6 32.5 158.4 41.5 11.1 -25.4 10.9 -24.4 10.8 -23.4 11.1 -24.5
2026-02-14T21:00:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:00:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:00:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.791433
2026-02-14T21:00:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:00:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:00:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:00:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:00:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:00:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:00:01', tmtdew=8.45, humidity=56.16, cloud=0.0, wind=35.97, temperature=10.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:00:02', seeing=4.06, atlas_timestamp='2026-02-14T18:59:39.811', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.016750000000000043, 0.0002500000000011937, -0.02850000000000108, -0.029500000000000526, 0.02224999999999966, -0.037499999999999645, 0.013250000000001094, 0.028499999999999304, -0.009999999999999787, -0.007749999999999702, -0.028499999999999304, 0.08749999999999858, 0.042749999999999844, -0.03900000000000148, -0.02400000000000091, 0.02224999999999966, 0.005999999999998451, -0.02999999999999936, -0.045750000000001734, 0.049999999999998934, 0.030749999999997613, -0.004749999999999588, -0.009249999999999758, 0.016000000000000014, 0.03250000000000064, 0.0022500000000000853, -0.041499999999999204, 0.0730000000000004, -0.013999999999999346, 0.007500000000000284, 0.027000000000001023, 0.013749999999998153], zp_timestamp='2026-02-14T18:56:00')
2026-02-14T21:00:30.117 [DEBUG] [Thread-192101] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:00:30.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T21:00:30.203 [DEBUG] [Thread-192104] [transport.py] [_log()] starting thread (client mode): 0xa2d02140
2026-02-14T21:00:30.204 [DEBUG] [Thread-192104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:00:30.219 [DEBUG] [Thread-192104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:00:30.219 [INFO] [Thread-192104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:00:30.226 [DEBUG] [Thread-192104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:00:30.226 [DEBUG] [Thread-192104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:00:30.226 [DEBUG] [Thread-192104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:00:30.226 [DEBUG] [Thread-192104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:00:30.226 [DEBUG] [Thread-192104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:00:30.226 [DEBUG] [Thread-192104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:00:30.226 [DEBUG] [Thread-192104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:00:30.226 [DEBUG] [Thread-192104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:00:30.226 [DEBUG] [Thread-192104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:00:30.226 [DEBUG] [Thread-192104] [transport.py] [_log()] client lang: <none>
2026-02-14T21:00:30.226 [DEBUG] [Thread-192104] [transport.py] [_log()] server lang: <none>
2026-02-14T21:00:30.226 [DEBUG] [Thread-192104] [transport.py] [_log()] kex follows: False
2026-02-14T21:00:30.226 [DEBUG] [Thread-192104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:00:30.226 [DEBUG] [Thread-192104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:00:30.226 [DEBUG] [Thread-192104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:00:30.226 [DEBUG] [Thread-192104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:00:30.226 [DEBUG] [Thread-192104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:00:30.226 [DEBUG] [Thread-192104] [transport.py] [_log()] Compression: none
2026-02-14T21:00:30.226 [DEBUG] [Thread-192104] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:00:30.282 [DEBUG] [Thread-192104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:00:30.282 [DEBUG] [Thread-192104] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:00:30.282 [DEBUG] [Thread-192104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:00:30.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:00:30.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:00:30.339 [DEBUG] [Thread-192104] [transport.py] [_log()] userauth is OK
2026-02-14T21:00:30.339 [DEBUG] [Thread-192104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:00:30.339 [DEBUG] [Thread-192104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:00:30.339 [DEBUG] [Thread-192104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:00:30.340 [DEBUG] [Thread-192104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:00:30.354 [INFO] [Thread-192104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:00:30.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T21:00:30.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:00:31.191 [DEBUG] [Thread-192104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:00:31.191 [DEBUG] [Thread-192104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:00:31.238 [DEBUG] [Thread-192104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:00:31.238 [DEBUG] [Thread-192104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:00:31.246 [DEBUG] [Thread-192104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:00:31.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:00:31.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-14T21:00:31.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-14T21:00:31.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:00:31.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:00:31.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:00:31.277 [DEBUG] [Thread-192104] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:00:37.472 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:00:37.473 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:00:39.884 [DEBUG] [Thread-192106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:00:47.257 [DEBUG] [Thread-192107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:00:54.955 [DEBUG] [Thread-192108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:01:01.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:01:01.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:01:01.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-14T21:01:03.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 0, 37), 8.54, 55.54, 0.0, 40.58, 10.98, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:01:03.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:00:37
2026-02-14T21:01:03.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:01:03.732 [DEBUG] [Thread-192109] [transport.py] [_log()] starting thread (client mode): 0xa5740f70
2026-02-14T21:01:03.732 [DEBUG] [Thread-192109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:01:03.751 [DEBUG] [Thread-192109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:01:03.752 [INFO] [Thread-192109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:01:03.755 [DEBUG] [Thread-192109] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:01:03.755 [DEBUG] [Thread-192109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:01:03.755 [DEBUG] [Thread-192109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:01:03.755 [DEBUG] [Thread-192109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:01:03.755 [DEBUG] [Thread-192109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:01:03.755 [DEBUG] [Thread-192109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:01:03.755 [DEBUG] [Thread-192109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:01:03.755 [DEBUG] [Thread-192109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:01:03.755 [DEBUG] [Thread-192109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:01:03.755 [DEBUG] [Thread-192109] [transport.py] [_log()] client lang: <none>
2026-02-14T21:01:03.755 [DEBUG] [Thread-192109] [transport.py] [_log()] server lang: <none>
2026-02-14T21:01:03.755 [DEBUG] [Thread-192109] [transport.py] [_log()] kex follows: False
2026-02-14T21:01:03.755 [DEBUG] [Thread-192109] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:01:03.755 [DEBUG] [Thread-192109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:01:03.755 [DEBUG] [Thread-192109] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:01:03.755 [DEBUG] [Thread-192109] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:01:03.755 [DEBUG] [Thread-192109] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:01:03.758 [DEBUG] [Thread-192109] [transport.py] [_log()] Compression: none
2026-02-14T21:01:03.760 [DEBUG] [Thread-192109] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:01:03.775 [DEBUG] [Thread-192109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:01:03.775 [DEBUG] [Thread-192109] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:01:03.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:01:03.776 [DEBUG] [Thread-192109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:01:03.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:01:03.817 [DEBUG] [Thread-192109] [transport.py] [_log()] userauth is OK
2026-02-14T21:01:03.817 [DEBUG] [Thread-192109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:01:03.817 [DEBUG] [Thread-192109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:01:03.817 [DEBUG] [Thread-192109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:01:03.818 [DEBUG] [Thread-192109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:01:03.837 [INFO] [Thread-192109] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:01:03.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:01:04.567 [DEBUG] [Thread-192109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:01:04.568 [DEBUG] [Thread-192109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:01:04.568 [DEBUG] [Thread-192109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:01:04.608 [DEBUG] [Thread-192109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:01:04.608 [DEBUG] [Thread-192109] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:01:04.611 [DEBUG] [Thread-192109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:01:04.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:01:04.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:01:04.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:01:04.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:01:04.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:01:04.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:01:04.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:01:04.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:01:04.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:01:04.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.791780 -999.00  +10.60  32.54     61   +3.50 1 1 2 1 1     0    0 6.61 -28.08 ZNESW 25.0 32.5 151.6 44.1 11.1 -25.5 10.9 -24.4 10.7 -23.4 11.1 -24.6
2026-02-14T21:01:04.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:01:04.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:01:04.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.791780
2026-02-14T21:01:04.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:01:04.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:01:04.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:01:04.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:01:04.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:01:04.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:00:37', tmtdew=8.54, humidity=55.54, cloud=0.0, wind=40.58, temperature=10.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:00:37', seeing=3.64, atlas_timestamp='2026-02-14T19:00:09.792', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.016750000000000043, 0.0002500000000011937, -0.02850000000000108, -0.029500000000000526, 0.02224999999999966, -0.037499999999999645, 0.013250000000001094, 0.028499999999999304, -0.009999999999999787, -0.007749999999999702, -0.028499999999999304, 0.08749999999999858, 0.042749999999999844, -0.03900000000000148, -0.02400000000000091, 0.02224999999999966, 0.005999999999998451, -0.02999999999999936, -0.045750000000001734, 0.049999999999998934, 0.030749999999997613, -0.004749999999999588, -0.009249999999999758, 0.016000000000000014, 0.03250000000000064, 0.0022500000000000853, -0.041499999999999204, 0.0730000000000004, -0.013999999999999346, 0.007500000000000284, 0.027000000000001023, 0.013749999999998153], zp_timestamp='2026-02-14T18:56:00')
2026-02-14T21:01:04.633 [DEBUG] [Thread-192109] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:01:04.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-14T21:01:04.729 [DEBUG] [Thread-192112] [transport.py] [_log()] starting thread (client mode): 0xa57414e0
2026-02-14T21:01:04.729 [DEBUG] [Thread-192112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:01:04.743 [DEBUG] [Thread-192112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:01:04.743 [INFO] [Thread-192112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:01:04.751 [DEBUG] [Thread-192112] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:01:04.751 [DEBUG] [Thread-192112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:01:04.751 [DEBUG] [Thread-192112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:01:04.751 [DEBUG] [Thread-192112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:01:04.751 [DEBUG] [Thread-192112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:01:04.751 [DEBUG] [Thread-192112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:01:04.751 [DEBUG] [Thread-192112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:01:04.751 [DEBUG] [Thread-192112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:01:04.751 [DEBUG] [Thread-192112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:01:04.751 [DEBUG] [Thread-192112] [transport.py] [_log()] client lang: <none>
2026-02-14T21:01:04.751 [DEBUG] [Thread-192112] [transport.py] [_log()] server lang: <none>
2026-02-14T21:01:04.751 [DEBUG] [Thread-192112] [transport.py] [_log()] kex follows: False
2026-02-14T21:01:04.751 [DEBUG] [Thread-192112] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:01:04.752 [DEBUG] [Thread-192112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:01:04.752 [DEBUG] [Thread-192112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:01:04.752 [DEBUG] [Thread-192112] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:01:04.752 [DEBUG] [Thread-192112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:01:04.752 [DEBUG] [Thread-192112] [transport.py] [_log()] Compression: none
2026-02-14T21:01:04.752 [DEBUG] [Thread-192112] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:01:04.812 [DEBUG] [Thread-192112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:01:04.812 [DEBUG] [Thread-192112] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:01:04.813 [DEBUG] [Thread-192112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:01:04.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:01:04.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:01:04.872 [DEBUG] [Thread-192112] [transport.py] [_log()] userauth is OK
2026-02-14T21:01:04.872 [DEBUG] [Thread-192112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:01:04.872 [DEBUG] [Thread-192112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:01:04.872 [DEBUG] [Thread-192112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:01:04.873 [DEBUG] [Thread-192112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:01:04.894 [INFO] [Thread-192112] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:01:04.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-14T21:01:04.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:01:05.749 [DEBUG] [Thread-192112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:01:05.749 [DEBUG] [Thread-192112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:01:05.798 [DEBUG] [Thread-192112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:01:05.798 [DEBUG] [Thread-192112] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:01:05.806 [DEBUG] [Thread-192112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:01:05.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:01:05.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-14T21:01:05.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:01:05.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:01:05.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:01:05.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:01:05.842 [DEBUG] [Thread-192112] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:01:09.985 [DEBUG] [Thread-192114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:01:25.082 [DEBUG] [Thread-192115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:01:35.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:01:35.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:01:35.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-14T21:01:37.688 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:01:37.691 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:01:38.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 1, 12), 8.35, 56.37, 0.0, 38.62, 10.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:01:38.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:01:12
2026-02-14T21:01:38.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:01:39.067 [DEBUG] [Thread-192116] [transport.py] [_log()] starting thread (client mode): 0xa2d124a0
2026-02-14T21:01:39.068 [DEBUG] [Thread-192116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:01:39.080 [DEBUG] [Thread-192116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:01:39.080 [INFO] [Thread-192116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:01:39.085 [DEBUG] [Thread-192116] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:01:39.085 [DEBUG] [Thread-192116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:01:39.085 [DEBUG] [Thread-192116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:01:39.085 [DEBUG] [Thread-192116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:01:39.085 [DEBUG] [Thread-192116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:01:39.085 [DEBUG] [Thread-192116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:01:39.085 [DEBUG] [Thread-192116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:01:39.085 [DEBUG] [Thread-192116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:01:39.085 [DEBUG] [Thread-192116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:01:39.085 [DEBUG] [Thread-192116] [transport.py] [_log()] client lang: <none>
2026-02-14T21:01:39.085 [DEBUG] [Thread-192116] [transport.py] [_log()] server lang: <none>
2026-02-14T21:01:39.086 [DEBUG] [Thread-192116] [transport.py] [_log()] kex follows: False
2026-02-14T21:01:39.086 [DEBUG] [Thread-192116] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:01:39.086 [DEBUG] [Thread-192116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:01:39.086 [DEBUG] [Thread-192116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:01:39.086 [DEBUG] [Thread-192116] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:01:39.086 [DEBUG] [Thread-192116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:01:39.086 [DEBUG] [Thread-192116] [transport.py] [_log()] Compression: none
2026-02-14T21:01:39.086 [DEBUG] [Thread-192116] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:01:39.115 [DEBUG] [Thread-192116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:01:39.119 [DEBUG] [Thread-192116] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:01:39.121 [DEBUG] [Thread-192116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:01:39.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:01:39.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:01:39.126 [DEBUG] [Thread-192116] [transport.py] [_log()] userauth is OK
2026-02-14T21:01:39.126 [DEBUG] [Thread-192116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:01:39.126 [DEBUG] [Thread-192116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:01:39.126 [DEBUG] [Thread-192116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:01:39.126 [DEBUG] [Thread-192116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:01:39.148 [INFO] [Thread-192116] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:01:39.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:01:39.556 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:01:39.788 [DEBUG] [Thread-192116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:01:39.788 [DEBUG] [Thread-192116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:01:39.790 [DEBUG] [Thread-192116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:01:39.829 [DEBUG] [Thread-192116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:01:39.830 [DEBUG] [Thread-192116] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:01:39.833 [DEBUG] [Thread-192116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:01:39.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:01:39.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:01:39.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:01:39.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:01:39.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:01:39.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:01:39.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:01:39.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:01:39.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:01:39.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.792127 -999.00  +10.60  29.71     61   +3.50 1 1 1 1 1     0    0 6.59 -28.89 ZNESW 33.6 29.7 147.4 32.5 11.1 -25.6 10.9 -24.4 10.7 -23.5 11.1 -24.5
2026-02-14T21:01:39.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:01:39.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:01:39.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.792127
2026-02-14T21:01:39.859 [DEBUG] [Thread-192116] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:01:39.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:01:39.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:01:39.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:01:39.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:01:39.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:01:39.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:01:12', tmtdew=8.35, humidity=56.37, cloud=0.0, wind=38.62, temperature=10.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:01:13', seeing=3.64, atlas_timestamp='2026-02-14T19:00:39.773', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.016750000000000043, 0.0002500000000011937, -0.02850000000000108, -0.029500000000000526, 0.02224999999999966, -0.037499999999999645, 0.013250000000001094, 0.028499999999999304, -0.009999999999999787, -0.007749999999999702, -0.028499999999999304, 0.08749999999999858, 0.042749999999999844, -0.03900000000000148, -0.02400000000000091, 0.02224999999999966, 0.005999999999998451, -0.02999999999999936, -0.045750000000001734, 0.049999999999998934, 0.030749999999997613, -0.004749999999999588, -0.009249999999999758, 0.016000000000000014, 0.03250000000000064, 0.0022500000000000853, -0.041499999999999204, 0.0730000000000004, -0.013999999999999346, 0.007500000000000284, 0.027000000000001023, 0.013749999999998153], zp_timestamp='2026-02-14T18:56:00')
2026-02-14T21:01:39.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-14T21:01:39.980 [DEBUG] [Thread-192119] [transport.py] [_log()] starting thread (client mode): 0xa57e3f70
2026-02-14T21:01:39.981 [DEBUG] [Thread-192119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:01:39.995 [DEBUG] [Thread-192119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:01:39.995 [INFO] [Thread-192119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:01:40.003 [DEBUG] [Thread-192119] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:01:40.003 [DEBUG] [Thread-192119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:01:40.003 [DEBUG] [Thread-192119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:01:40.003 [DEBUG] [Thread-192119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:01:40.003 [DEBUG] [Thread-192119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:01:40.003 [DEBUG] [Thread-192119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:01:40.004 [DEBUG] [Thread-192119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:01:40.004 [DEBUG] [Thread-192119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:01:40.004 [DEBUG] [Thread-192119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:01:40.004 [DEBUG] [Thread-192119] [transport.py] [_log()] client lang: <none>
2026-02-14T21:01:40.004 [DEBUG] [Thread-192119] [transport.py] [_log()] server lang: <none>
2026-02-14T21:01:40.004 [DEBUG] [Thread-192119] [transport.py] [_log()] kex follows: False
2026-02-14T21:01:40.004 [DEBUG] [Thread-192119] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:01:40.004 [DEBUG] [Thread-192119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:01:40.004 [DEBUG] [Thread-192119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:01:40.004 [DEBUG] [Thread-192119] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:01:40.004 [DEBUG] [Thread-192119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:01:40.004 [DEBUG] [Thread-192119] [transport.py] [_log()] Compression: none
2026-02-14T21:01:40.004 [DEBUG] [Thread-192119] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:01:40.059 [DEBUG] [Thread-192119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:01:40.060 [DEBUG] [Thread-192119] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:01:40.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:01:40.061 [DEBUG] [Thread-192119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:01:40.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:01:40.116 [DEBUG] [Thread-192119] [transport.py] [_log()] userauth is OK
2026-02-14T21:01:40.116 [DEBUG] [Thread-192119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:01:40.116 [DEBUG] [Thread-192119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:01:40.116 [DEBUG] [Thread-192119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:01:40.116 [DEBUG] [Thread-192119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:01:40.119 [DEBUG] [Thread-192121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:01:40.132 [INFO] [Thread-192119] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:01:40.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-14T21:01:40.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:01:40.961 [DEBUG] [Thread-192119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:01:40.961 [DEBUG] [Thread-192119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:01:41.009 [DEBUG] [Thread-192119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:01:41.009 [DEBUG] [Thread-192119] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:01:41.018 [DEBUG] [Thread-192119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:01:41.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:01:41.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-14T21:01:41.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-14T21:01:41.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:01:41.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:01:41.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:01:41.055 [DEBUG] [Thread-192119] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:01:47.780 [DEBUG] [Thread-192122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:01:55.187 [DEBUG] [Thread-192123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:01:58.911 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:02:06.583 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:02:10.252 [DEBUG] [Thread-192124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:02:10.694 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:02:11.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:02:11.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:02:11.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-14T21:02:13.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 1, 47), 8.29, 56.4, 0.0, 35.82, 10.62, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:02:13.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:01:47
2026-02-14T21:02:13.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:02:13.663 [DEBUG] [Thread-192125] [transport.py] [_log()] starting thread (client mode): 0xa2d031c0
2026-02-14T21:02:13.664 [DEBUG] [Thread-192125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:02:13.683 [DEBUG] [Thread-192125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:02:13.683 [INFO] [Thread-192125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:02:13.686 [DEBUG] [Thread-192125] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:02:13.686 [DEBUG] [Thread-192125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:02:13.687 [DEBUG] [Thread-192125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:02:13.687 [DEBUG] [Thread-192125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:02:13.687 [DEBUG] [Thread-192125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:02:13.687 [DEBUG] [Thread-192125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:02:13.687 [DEBUG] [Thread-192125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:02:13.687 [DEBUG] [Thread-192125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:02:13.687 [DEBUG] [Thread-192125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:02:13.687 [DEBUG] [Thread-192125] [transport.py] [_log()] client lang: <none>
2026-02-14T21:02:13.687 [DEBUG] [Thread-192125] [transport.py] [_log()] server lang: <none>
2026-02-14T21:02:13.687 [DEBUG] [Thread-192125] [transport.py] [_log()] kex follows: False
2026-02-14T21:02:13.687 [DEBUG] [Thread-192125] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:02:13.687 [DEBUG] [Thread-192125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:02:13.687 [DEBUG] [Thread-192125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:02:13.687 [DEBUG] [Thread-192125] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:02:13.687 [DEBUG] [Thread-192125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:02:13.687 [DEBUG] [Thread-192125] [transport.py] [_log()] Compression: none
2026-02-14T21:02:13.687 [DEBUG] [Thread-192125] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:02:13.705 [DEBUG] [Thread-192125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:02:13.705 [DEBUG] [Thread-192125] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:02:13.706 [DEBUG] [Thread-192125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:02:13.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:02:13.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:02:13.749 [DEBUG] [Thread-192125] [transport.py] [_log()] userauth is OK
2026-02-14T21:02:13.749 [DEBUG] [Thread-192125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:02:13.749 [DEBUG] [Thread-192125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:02:13.749 [DEBUG] [Thread-192125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:02:13.749 [DEBUG] [Thread-192125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:02:13.764 [INFO] [Thread-192125] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:02:13.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:02:14.421 [DEBUG] [Thread-192125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:02:14.422 [DEBUG] [Thread-192125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:02:14.422 [DEBUG] [Thread-192125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:02:14.462 [DEBUG] [Thread-192125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:02:14.462 [DEBUG] [Thread-192125] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:02:14.465 [DEBUG] [Thread-192125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:02:14.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:02:14.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:02:14.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:02:14.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:02:14.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:02:14.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:02:14.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:02:14.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:02:14.489 [DEBUG] [Thread-192125] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:02:14.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:02:14.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.792822 -999.00  +10.50  29.10     61   +3.40 1 1 1 1 1     0    0 6.57 -29.35 ZNESW 20.6 29.1 162.9 36.2 11.1 -25.4 10.9 -24.3 10.7 -23.5 11.0 -24.6
2026-02-14T21:02:14.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:02:14.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:02:14.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.792822
2026-02-14T21:02:14.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:02:14.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:02:14.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:02:14.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:02:14.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:02:14.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:01:47', tmtdew=8.29, humidity=56.4, cloud=0.0, wind=35.82, temperature=10.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:01:48', seeing=3.69, atlas_timestamp='2026-02-14T19:01:39.821', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, -0.012749999999998707, 0.025249999999999773, -0.007500000000000284, 0.045999999999999375, 0.04425000000000168, -0.016000000000000014, 0.008250000000000313, 0.04649999999999821, 0.006499999999999062, -0.0027500000000006963, -0.002000000000000668, 0.07699999999999996, 0.04124999999999979, -0.019000000000001904, -0.005000000000000782, 0.03474999999999895, 0.01750000000000007, -0.022500000000000853, -0.03375000000000128, 0.09199999999999875, 0.07374999999999865, 0.011250000000000426, 0.0027500000000006963, 0.014999999999998792, 0.05850000000000044, 0.015750000000000597, -0.04449999999999932, 0.13449999999999918, 0.049500000000001876, 0.038000000000000256, 0.002000000000000668, 0.022749999999998494], zp_timestamp='2026-02-14T19:00:00')
2026-02-14T21:02:14.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-14T21:02:14.597 [DEBUG] [Thread-192128] [transport.py] [_log()] starting thread (client mode): 0xa2d7b4c0
2026-02-14T21:02:14.597 [DEBUG] [Thread-192128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:02:14.611 [DEBUG] [Thread-192128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:02:14.611 [INFO] [Thread-192128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:02:14.619 [DEBUG] [Thread-192128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:02:14.619 [DEBUG] [Thread-192128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:02:14.619 [DEBUG] [Thread-192128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:02:14.619 [DEBUG] [Thread-192128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:02:14.619 [DEBUG] [Thread-192128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:02:14.619 [DEBUG] [Thread-192128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:02:14.619 [DEBUG] [Thread-192128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:02:14.620 [DEBUG] [Thread-192128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:02:14.620 [DEBUG] [Thread-192128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:02:14.620 [DEBUG] [Thread-192128] [transport.py] [_log()] client lang: <none>
2026-02-14T21:02:14.620 [DEBUG] [Thread-192128] [transport.py] [_log()] server lang: <none>
2026-02-14T21:02:14.620 [DEBUG] [Thread-192128] [transport.py] [_log()] kex follows: False
2026-02-14T21:02:14.620 [DEBUG] [Thread-192128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:02:14.620 [DEBUG] [Thread-192128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:02:14.620 [DEBUG] [Thread-192128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:02:14.621 [DEBUG] [Thread-192128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:02:14.621 [DEBUG] [Thread-192128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:02:14.621 [DEBUG] [Thread-192128] [transport.py] [_log()] Compression: none
2026-02-14T21:02:14.621 [DEBUG] [Thread-192128] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:02:14.675 [DEBUG] [Thread-192128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:02:14.675 [DEBUG] [Thread-192128] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:02:14.676 [DEBUG] [Thread-192128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:02:14.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:02:14.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:02:14.732 [DEBUG] [Thread-192128] [transport.py] [_log()] userauth is OK
2026-02-14T21:02:14.732 [DEBUG] [Thread-192128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:02:14.732 [DEBUG] [Thread-192128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:02:14.732 [DEBUG] [Thread-192128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:02:14.732 [DEBUG] [Thread-192128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:02:14.755 [INFO] [Thread-192128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:02:14.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-14T21:02:14.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:02:15.563 [DEBUG] [Thread-192128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:02:15.564 [DEBUG] [Thread-192128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:02:15.612 [DEBUG] [Thread-192128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:02:15.612 [DEBUG] [Thread-192128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:02:15.620 [DEBUG] [Thread-192128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:02:15.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:02: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-14T21:02:15.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-14T21:02:15.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:02:15.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:02:15.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:02:15.653 [DEBUG] [Thread-192128] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:02:25.277 [DEBUG] [Thread-192130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:02:37.948 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:02:37.949 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:02:40.438 [DEBUG] [Thread-192131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:02:45.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:02:45.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:02:45.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-14T21:02:47.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 2, 23), 8.29, 56.4, 0.0, 34.51, 10.64, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:02:47.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:02:23
2026-02-14T21:02:48.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:02:48.197 [DEBUG] [Thread-192132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:02:48.234 [DEBUG] [Thread-192133] [transport.py] [_log()] starting thread (client mode): 0xa2d7a5f0
2026-02-14T21:02:48.235 [DEBUG] [Thread-192133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:02:48.247 [DEBUG] [Thread-192133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:02:48.247 [INFO] [Thread-192133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:02:48.251 [DEBUG] [Thread-192133] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:02:48.251 [DEBUG] [Thread-192133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:02:48.251 [DEBUG] [Thread-192133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:02:48.251 [DEBUG] [Thread-192133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:02:48.251 [DEBUG] [Thread-192133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:02:48.251 [DEBUG] [Thread-192133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:02:48.251 [DEBUG] [Thread-192133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:02:48.251 [DEBUG] [Thread-192133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:02:48.251 [DEBUG] [Thread-192133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:02:48.251 [DEBUG] [Thread-192133] [transport.py] [_log()] client lang: <none>
2026-02-14T21:02:48.251 [DEBUG] [Thread-192133] [transport.py] [_log()] server lang: <none>
2026-02-14T21:02:48.251 [DEBUG] [Thread-192133] [transport.py] [_log()] kex follows: False
2026-02-14T21:02:48.251 [DEBUG] [Thread-192133] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:02:48.252 [DEBUG] [Thread-192133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:02:48.252 [DEBUG] [Thread-192133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:02:48.252 [DEBUG] [Thread-192133] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:02:48.252 [DEBUG] [Thread-192133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:02:48.252 [DEBUG] [Thread-192133] [transport.py] [_log()] Compression: none
2026-02-14T21:02:48.252 [DEBUG] [Thread-192133] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:02:48.338 [DEBUG] [Thread-192133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:02:48.340 [DEBUG] [Thread-192133] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:02:48.341 [DEBUG] [Thread-192133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:02:48.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:02:48.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:02:48.346 [DEBUG] [Thread-192133] [transport.py] [_log()] userauth is OK
2026-02-14T21:02:48.346 [DEBUG] [Thread-192133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:02:48.346 [DEBUG] [Thread-192133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:02:48.346 [DEBUG] [Thread-192133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:02:48.346 [DEBUG] [Thread-192133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:02:48.368 [INFO] [Thread-192133] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:02:48.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:02:49.014 [DEBUG] [Thread-192133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:02:49.014 [DEBUG] [Thread-192133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:02:49.016 [DEBUG] [Thread-192133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:02:49.054 [DEBUG] [Thread-192133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:02:49.054 [DEBUG] [Thread-192133] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:02:49.057 [DEBUG] [Thread-192133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:02:49.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:02:49.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:02:49.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:02:49.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:02:49.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:02:49.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:02:49.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:02:49.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:02:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:02:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.793169 -999.00  +10.50  32.85     61   +3.50 1 1 2 1 1     0    0 6.39 -29.79 ZNESW 27.9 32.9 161.4 39.8 11.0 -25.5 10.9 -24.3 10.7 -23.3 11.0 -24.7
2026-02-14T21:02:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:02:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:02:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.793169
2026-02-14T21:02:49.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:02:49.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:02:49.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:02:49.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:02:49.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:02:49.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:02:23', tmtdew=8.29, humidity=56.4, cloud=0.0, wind=34.51, temperature=10.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:02:23', seeing=4.16, atlas_timestamp='2026-02-14T19:02:09.802', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, -0.012749999999998707, 0.025249999999999773, -0.007500000000000284, 0.045999999999999375, 0.04425000000000168, -0.016000000000000014, 0.008250000000000313, 0.04649999999999821, 0.006499999999999062, -0.0027500000000006963, -0.002000000000000668, 0.07699999999999996, 0.04124999999999979, -0.019000000000001904, -0.005000000000000782, 0.03474999999999895, 0.01750000000000007, -0.022500000000000853, -0.03375000000000128, 0.09199999999999875, 0.07374999999999865, 0.011250000000000426, 0.0027500000000006963, 0.014999999999998792, 0.05850000000000044, 0.015750000000000597, -0.04449999999999932, 0.13449999999999918, 0.049500000000001876, 0.038000000000000256, 0.002000000000000668, 0.022749999999998494], zp_timestamp='2026-02-14T19:00:00')
2026-02-14T21:02:49.085 [DEBUG] [Thread-192133] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:02:49.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-14T21:02:49.176 [DEBUG] [Thread-192136] [transport.py] [_log()] starting thread (client mode): 0xa57e3f10
2026-02-14T21:02:49.176 [DEBUG] [Thread-192136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:02:49.191 [DEBUG] [Thread-192136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:02:49.191 [INFO] [Thread-192136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:02:49.199 [DEBUG] [Thread-192136] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:02:49.199 [DEBUG] [Thread-192136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:02:49.199 [DEBUG] [Thread-192136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:02:49.199 [DEBUG] [Thread-192136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:02:49.199 [DEBUG] [Thread-192136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:02:49.199 [DEBUG] [Thread-192136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:02:49.199 [DEBUG] [Thread-192136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:02:49.199 [DEBUG] [Thread-192136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:02:49.200 [DEBUG] [Thread-192136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:02:49.200 [DEBUG] [Thread-192136] [transport.py] [_log()] client lang: <none>
2026-02-14T21:02:49.200 [DEBUG] [Thread-192136] [transport.py] [_log()] server lang: <none>
2026-02-14T21:02:49.200 [DEBUG] [Thread-192136] [transport.py] [_log()] kex follows: False
2026-02-14T21:02:49.200 [DEBUG] [Thread-192136] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:02:49.200 [DEBUG] [Thread-192136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:02:49.200 [DEBUG] [Thread-192136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:02:49.200 [DEBUG] [Thread-192136] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:02:49.200 [DEBUG] [Thread-192136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:02:49.201 [DEBUG] [Thread-192136] [transport.py] [_log()] Compression: none
2026-02-14T21:02:49.201 [DEBUG] [Thread-192136] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:02:49.256 [DEBUG] [Thread-192136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:02:49.257 [DEBUG] [Thread-192136] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:02:49.257 [DEBUG] [Thread-192136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:02:49.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:02:49.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:02:49.312 [DEBUG] [Thread-192136] [transport.py] [_log()] userauth is OK
2026-02-14T21:02:49.312 [DEBUG] [Thread-192136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:02:49.312 [DEBUG] [Thread-192136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:02:49.312 [DEBUG] [Thread-192136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:02:49.312 [DEBUG] [Thread-192136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:02:49.328 [INFO] [Thread-192136] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:02:49.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-14T21:02:49.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:02:50.150 [DEBUG] [Thread-192136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:02:50.150 [DEBUG] [Thread-192136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:02:50.198 [DEBUG] [Thread-192136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:02:50.198 [DEBUG] [Thread-192136] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:02:50.207 [DEBUG] [Thread-192136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:02:50.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:02:50.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-14T21:02:50.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-14T21:02:50.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:02:50.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:02:50.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:02:50.266 [DEBUG] [Thread-192136] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:02:55.465 [DEBUG] [Thread-192138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:03:10.525 [DEBUG] [Thread-192139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:03:13.219 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:03:20.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:03:20.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:03:20.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-14T21:03:22.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 2, 58), 8.28, 56.42, 0.0, 38.2, 10.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:03:22.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:02:58
2026-02-14T21:03:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:03:22.708 [DEBUG] [Thread-192140] [transport.py] [_log()] starting thread (client mode): 0xa2d03160
2026-02-14T21:03:22.708 [DEBUG] [Thread-192140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:03:22.719 [DEBUG] [Thread-192140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:03:22.720 [INFO] [Thread-192140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:03:22.723 [DEBUG] [Thread-192140] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:03:22.723 [DEBUG] [Thread-192140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:03:22.723 [DEBUG] [Thread-192140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:03:22.723 [DEBUG] [Thread-192140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:03:22.723 [DEBUG] [Thread-192140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:03:22.723 [DEBUG] [Thread-192140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:03:22.723 [DEBUG] [Thread-192140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:03:22.723 [DEBUG] [Thread-192140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:03:22.723 [DEBUG] [Thread-192140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:03:22.723 [DEBUG] [Thread-192140] [transport.py] [_log()] client lang: <none>
2026-02-14T21:03:22.723 [DEBUG] [Thread-192140] [transport.py] [_log()] server lang: <none>
2026-02-14T21:03:22.723 [DEBUG] [Thread-192140] [transport.py] [_log()] kex follows: False
2026-02-14T21:03:22.723 [DEBUG] [Thread-192140] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:03:22.724 [DEBUG] [Thread-192140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:03:22.724 [DEBUG] [Thread-192140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:03:22.724 [DEBUG] [Thread-192140] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:03:22.724 [DEBUG] [Thread-192140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:03:22.724 [DEBUG] [Thread-192140] [transport.py] [_log()] Compression: none
2026-02-14T21:03:22.724 [DEBUG] [Thread-192140] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:03:22.757 [DEBUG] [Thread-192140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:03:22.760 [DEBUG] [Thread-192140] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:03:22.761 [DEBUG] [Thread-192140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:03:22.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:03:22.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:03:22.801 [DEBUG] [Thread-192140] [transport.py] [_log()] userauth is OK
2026-02-14T21:03:22.802 [DEBUG] [Thread-192140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:03:22.802 [DEBUG] [Thread-192140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:03:22.802 [DEBUG] [Thread-192140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:03:22.802 [DEBUG] [Thread-192140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:03:22.839 [INFO] [Thread-192140] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:03:22.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:03:23.468 [DEBUG] [Thread-192140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:03:23.468 [DEBUG] [Thread-192140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:03:23.474 [DEBUG] [Thread-192140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:03:23.509 [DEBUG] [Thread-192140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:03:23.510 [DEBUG] [Thread-192140] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:03:23.511 [DEBUG] [Thread-192140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:03:23.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:03:23.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:03:23.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:03:23.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:03:23.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:03:23.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:03:23.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:03:23.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:03:23.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:03:23.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.793516 -999.00  +10.50  25.62     61   +3.50 1 1 1 1 1     0    0 6.60 -29.90 ZNESW 27.6 25.6 156.4 43.4 11.0 -25.5 10.8 -24.3 10.7 -23.4 11.0 -24.5
2026-02-14T21:03:23.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:03:23.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:03:23.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.793516
2026-02-14T21:03:23.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:03:23.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:03:23.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:03:23.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:03:23.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:03:23.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:02:58', tmtdew=8.28, humidity=56.42, cloud=0.0, wind=38.2, temperature=10.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:02:59', seeing=3.99, atlas_timestamp='2026-02-14T19:02:39.782', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, -0.012749999999998707, 0.025249999999999773, -0.007500000000000284, 0.045999999999999375, 0.04425000000000168, -0.016000000000000014, 0.008250000000000313, 0.04649999999999821, 0.006499999999999062, -0.0027500000000006963, -0.002000000000000668, 0.07699999999999996, 0.04124999999999979, -0.019000000000001904, -0.005000000000000782, 0.03474999999999895, 0.01750000000000007, -0.022500000000000853, -0.03375000000000128, 0.09199999999999875, 0.07374999999999865, 0.011250000000000426, 0.0027500000000006963, 0.014999999999998792, 0.05850000000000044, 0.015750000000000597, -0.04449999999999932, 0.13449999999999918, 0.049500000000001876, 0.038000000000000256, 0.002000000000000668, 0.022749999999998494], zp_timestamp='2026-02-14T19:00:00')
2026-02-14T21:03:23.531 [DEBUG] [Thread-192140] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:03:23.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-14T21:03:23.620 [DEBUG] [Thread-192143] [transport.py] [_log()] starting thread (client mode): 0xa5743850
2026-02-14T21:03:23.620 [DEBUG] [Thread-192143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:03:23.635 [DEBUG] [Thread-192143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:03:23.635 [INFO] [Thread-192143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:03:23.642 [DEBUG] [Thread-192143] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:03:23.642 [DEBUG] [Thread-192143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:03:23.642 [DEBUG] [Thread-192143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:03:23.642 [DEBUG] [Thread-192143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:03:23.643 [DEBUG] [Thread-192143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:03:23.643 [DEBUG] [Thread-192143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:03:23.643 [DEBUG] [Thread-192143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:03:23.643 [DEBUG] [Thread-192143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:03:23.643 [DEBUG] [Thread-192143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:03:23.643 [DEBUG] [Thread-192143] [transport.py] [_log()] client lang: <none>
2026-02-14T21:03:23.643 [DEBUG] [Thread-192143] [transport.py] [_log()] server lang: <none>
2026-02-14T21:03:23.643 [DEBUG] [Thread-192143] [transport.py] [_log()] kex follows: False
2026-02-14T21:03:23.643 [DEBUG] [Thread-192143] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:03:23.643 [DEBUG] [Thread-192143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:03:23.643 [DEBUG] [Thread-192143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:03:23.643 [DEBUG] [Thread-192143] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:03:23.643 [DEBUG] [Thread-192143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:03:23.643 [DEBUG] [Thread-192143] [transport.py] [_log()] Compression: none
2026-02-14T21:03:23.643 [DEBUG] [Thread-192143] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:03:23.700 [DEBUG] [Thread-192143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:03:23.701 [DEBUG] [Thread-192143] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:03:23.702 [DEBUG] [Thread-192143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:03:23.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:03:23.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:03:23.756 [DEBUG] [Thread-192143] [transport.py] [_log()] userauth is OK
2026-02-14T21:03:23.756 [DEBUG] [Thread-192143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:03:23.756 [DEBUG] [Thread-192143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:03:23.756 [DEBUG] [Thread-192143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:03:23.756 [DEBUG] [Thread-192143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:03:23.774 [INFO] [Thread-192143] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:03:23.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-14T21:03:23.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:03:24.613 [DEBUG] [Thread-192143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:03:24.614 [DEBUG] [Thread-192143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:03:24.661 [DEBUG] [Thread-192143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:03:24.661 [DEBUG] [Thread-192143] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:03:24.670 [DEBUG] [Thread-192143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:03:24.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:03: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-14T21:03:24.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-14T21:03:24.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:03:24.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:03:24.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:03:24.702 [DEBUG] [Thread-192143] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:03:25.556 [DEBUG] [Thread-192145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:03:33.292 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:03:38.152 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:03:38.153 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:03:40.672 [DEBUG] [Thread-192146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:03:42.107 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:03:46.246 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:03:48.633 [DEBUG] [Thread-192147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:03:54.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:03:54.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:03:54.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-14T21:03:55.704 [DEBUG] [Thread-192148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:03:56.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 3, 34), 8.43, 55.97, 0.0, 44.7, 10.95, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:03:56.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:03:34
2026-02-14T21:03:57.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:03:57.183 [DEBUG] [Thread-192149] [transport.py] [_log()] starting thread (client mode): 0xa57e3c40
2026-02-14T21:03:57.184 [DEBUG] [Thread-192149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:03:57.203 [DEBUG] [Thread-192149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:03:57.203 [INFO] [Thread-192149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:03:57.206 [DEBUG] [Thread-192149] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:03:57.206 [DEBUG] [Thread-192149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:03:57.206 [DEBUG] [Thread-192149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:03:57.206 [DEBUG] [Thread-192149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:03:57.206 [DEBUG] [Thread-192149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:03:57.207 [DEBUG] [Thread-192149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:03:57.207 [DEBUG] [Thread-192149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:03:57.207 [DEBUG] [Thread-192149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:03:57.207 [DEBUG] [Thread-192149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:03:57.207 [DEBUG] [Thread-192149] [transport.py] [_log()] client lang: <none>
2026-02-14T21:03:57.207 [DEBUG] [Thread-192149] [transport.py] [_log()] server lang: <none>
2026-02-14T21:03:57.207 [DEBUG] [Thread-192149] [transport.py] [_log()] kex follows: False
2026-02-14T21:03:57.207 [DEBUG] [Thread-192149] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:03:57.207 [DEBUG] [Thread-192149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:03:57.207 [DEBUG] [Thread-192149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:03:57.207 [DEBUG] [Thread-192149] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:03:57.207 [DEBUG] [Thread-192149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:03:57.207 [DEBUG] [Thread-192149] [transport.py] [_log()] Compression: none
2026-02-14T21:03:57.208 [DEBUG] [Thread-192149] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:03:57.227 [DEBUG] [Thread-192149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:03:57.228 [DEBUG] [Thread-192149] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:03:57.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:03:57.229 [DEBUG] [Thread-192149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:03:57.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:03:57.269 [DEBUG] [Thread-192149] [transport.py] [_log()] userauth is OK
2026-02-14T21:03:57.269 [DEBUG] [Thread-192149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:03:57.269 [DEBUG] [Thread-192149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:03:57.269 [DEBUG] [Thread-192149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:03:57.269 [DEBUG] [Thread-192149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:03:57.306 [INFO] [Thread-192149] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:03:57.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:03:58.124 [DEBUG] [Thread-192149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:03:58.125 [DEBUG] [Thread-192149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:03:58.125 [DEBUG] [Thread-192149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:03:58.165 [DEBUG] [Thread-192149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:03:58.165 [DEBUG] [Thread-192149] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:03:58.168 [DEBUG] [Thread-192149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:03:58.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:03:58.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:03:58.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:03:58.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:03:58.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:03:58.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:03:58.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:03:58.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:03:58.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:03:58.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.793864 -999.00  +10.50  31.15     61   +3.40 1 1 2 1 1     0    0 6.54 -30.80 ZNESW 32.9 31.1 160.2 42.9 11.1 -25.5 10.8 -24.4 10.7 -23.5 11.0 -24.6
2026-02-14T21:03:58.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:03:58.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:03:58.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.793864
2026-02-14T21:03:58.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:03:58.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:03:58.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:03:58.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:03:58.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:03:58.194 [DEBUG] [Thread-192149] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:03:58.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:03:34', tmtdew=8.43, humidity=55.97, cloud=0.0, wind=44.7, temperature=10.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:03:35', seeing=4.36, atlas_timestamp='2026-02-14T19:03:09.850', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, -0.012749999999998707, 0.025249999999999773, -0.007500000000000284, 0.045999999999999375, 0.04425000000000168, -0.016000000000000014, 0.008250000000000313, 0.04649999999999821, 0.006499999999999062, -0.0027500000000006963, -0.002000000000000668, 0.07699999999999996, 0.04124999999999979, -0.019000000000001904, -0.005000000000000782, 0.03474999999999895, 0.01750000000000007, -0.022500000000000853, -0.03375000000000128, 0.09199999999999875, 0.07374999999999865, 0.011250000000000426, 0.0027500000000006963, 0.014999999999998792, 0.05850000000000044, 0.015750000000000597, -0.04449999999999932, 0.13449999999999918, 0.049500000000001876, 0.038000000000000256, 0.002000000000000668, 0.022749999999998494], zp_timestamp='2026-02-14T19:00:00')
2026-02-14T21:03:58.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T21:03:58.291 [DEBUG] [Thread-192152] [transport.py] [_log()] starting thread (client mode): 0xa2d13520
2026-02-14T21:03:58.291 [DEBUG] [Thread-192152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:03:58.306 [DEBUG] [Thread-192152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:03:58.306 [INFO] [Thread-192152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:03:58.314 [DEBUG] [Thread-192152] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:03:58.314 [DEBUG] [Thread-192152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:03:58.314 [DEBUG] [Thread-192152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:03:58.314 [DEBUG] [Thread-192152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:03:58.315 [DEBUG] [Thread-192152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:03:58.315 [DEBUG] [Thread-192152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:03:58.315 [DEBUG] [Thread-192152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:03:58.315 [DEBUG] [Thread-192152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:03:58.315 [DEBUG] [Thread-192152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:03:58.315 [DEBUG] [Thread-192152] [transport.py] [_log()] client lang: <none>
2026-02-14T21:03:58.315 [DEBUG] [Thread-192152] [transport.py] [_log()] server lang: <none>
2026-02-14T21:03:58.315 [DEBUG] [Thread-192152] [transport.py] [_log()] kex follows: False
2026-02-14T21:03:58.315 [DEBUG] [Thread-192152] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:03:58.316 [DEBUG] [Thread-192152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:03:58.316 [DEBUG] [Thread-192152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:03:58.316 [DEBUG] [Thread-192152] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:03:58.316 [DEBUG] [Thread-192152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:03:58.316 [DEBUG] [Thread-192152] [transport.py] [_log()] Compression: none
2026-02-14T21:03:58.316 [DEBUG] [Thread-192152] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:03:58.372 [DEBUG] [Thread-192152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:03:58.373 [DEBUG] [Thread-192152] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:03:58.374 [DEBUG] [Thread-192152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:03:58.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:03:58.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:03:58.428 [DEBUG] [Thread-192152] [transport.py] [_log()] userauth is OK
2026-02-14T21:03:58.428 [DEBUG] [Thread-192152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:03:58.428 [DEBUG] [Thread-192152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:03:58.428 [DEBUG] [Thread-192152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:03:58.429 [DEBUG] [Thread-192152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:03:58.448 [INFO] [Thread-192152] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:03:58.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-14T21:03:58.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:03:59.295 [DEBUG] [Thread-192152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:03:59.295 [DEBUG] [Thread-192152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:03:59.343 [DEBUG] [Thread-192152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:03:59.343 [DEBUG] [Thread-192152] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:03:59.352 [DEBUG] [Thread-192152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:03:59.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:03:59.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-14T21:03:59.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:03:59.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:03:59.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:03:59.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:03:59.387 [DEBUG] [Thread-192152] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:04:10.735 [DEBUG] [Thread-192154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:04:25.853 [DEBUG] [Thread-192155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:04:29.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:04:29.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:04:29.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-14T21:04:31.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 4, 10), 8.26, 56.52, 0.0, 40.02, 10.64, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:04:31.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:04:10
2026-02-14T21:04:31.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:04:31.747 [DEBUG] [Thread-192156] [transport.py] [_log()] starting thread (client mode): 0xa57727a0
2026-02-14T21:04:31.747 [DEBUG] [Thread-192156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:04:31.768 [DEBUG] [Thread-192156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:04:31.768 [INFO] [Thread-192156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:04:31.771 [DEBUG] [Thread-192156] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:04:31.772 [DEBUG] [Thread-192156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:04:31.772 [DEBUG] [Thread-192156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:04:31.772 [DEBUG] [Thread-192156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:04:31.772 [DEBUG] [Thread-192156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:04:31.772 [DEBUG] [Thread-192156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:04:31.772 [DEBUG] [Thread-192156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:04:31.772 [DEBUG] [Thread-192156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:04:31.772 [DEBUG] [Thread-192156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:04:31.772 [DEBUG] [Thread-192156] [transport.py] [_log()] client lang: <none>
2026-02-14T21:04:31.772 [DEBUG] [Thread-192156] [transport.py] [_log()] server lang: <none>
2026-02-14T21:04:31.772 [DEBUG] [Thread-192156] [transport.py] [_log()] kex follows: False
2026-02-14T21:04:31.772 [DEBUG] [Thread-192156] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:04:31.772 [DEBUG] [Thread-192156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:04:31.772 [DEBUG] [Thread-192156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:04:31.772 [DEBUG] [Thread-192156] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:04:31.772 [DEBUG] [Thread-192156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:04:31.772 [DEBUG] [Thread-192156] [transport.py] [_log()] Compression: none
2026-02-14T21:04:31.772 [DEBUG] [Thread-192156] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:04:31.787 [DEBUG] [Thread-192156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:04:31.787 [DEBUG] [Thread-192156] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:04:31.787 [DEBUG] [Thread-192156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:04:31.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:04:31.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:04:31.788 [DEBUG] [Thread-192156] [transport.py] [_log()] userauth is OK
2026-02-14T21:04:31.788 [DEBUG] [Thread-192156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:04:31.788 [DEBUG] [Thread-192156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:04:31.788 [DEBUG] [Thread-192156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:04:31.788 [DEBUG] [Thread-192156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:04:31.804 [INFO] [Thread-192156] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:04:31.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:04:32.423 [DEBUG] [Thread-192156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:04:32.423 [DEBUG] [Thread-192156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:04:32.424 [DEBUG] [Thread-192156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:04:32.465 [DEBUG] [Thread-192156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:04:32.465 [DEBUG] [Thread-192156] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:04:32.467 [DEBUG] [Thread-192156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:04:32.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:04:32.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:04:32.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:04:32.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:04:32.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:04:32.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:04:32.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:04:32.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:04:32.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:04:32.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.794211 -999.00  +10.50  23.51     61   +3.40 1 1 1 1 1     0    0 6.43 -32.69 ZNESW 23.3 23.5 162.2 35.0 11.0 -25.4 10.8 -24.3 10.6 -23.3 11.0 -24.6
2026-02-14T21:04:32.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:04:32.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:04:32.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.794211
2026-02-14T21:04:32.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:04:32.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:04:32.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:04:32.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:04:32.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:04:32.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:04:10', tmtdew=8.26, humidity=56.52, cloud=0.0, wind=40.02, temperature=10.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:04:10', seeing=4.67, atlas_timestamp='2026-02-14T19:03:39.830', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, -0.012749999999998707, 0.025249999999999773, -0.007500000000000284, 0.045999999999999375, 0.04425000000000168, -0.016000000000000014, 0.008250000000000313, 0.04649999999999821, 0.006499999999999062, -0.0027500000000006963, -0.002000000000000668, 0.07699999999999996, 0.04124999999999979, -0.019000000000001904, -0.005000000000000782, 0.03474999999999895, 0.01750000000000007, -0.022500000000000853, -0.03375000000000128, 0.09199999999999875, 0.07374999999999865, 0.011250000000000426, 0.0027500000000006963, 0.014999999999998792, 0.05850000000000044, 0.015750000000000597, -0.04449999999999932, 0.13449999999999918, 0.049500000000001876, 0.038000000000000256, 0.002000000000000668, 0.022749999999998494], zp_timestamp='2026-02-14T19:00:00')
2026-02-14T21:04:32.490 [DEBUG] [Thread-192156] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:04:32.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T21:04:32.575 [DEBUG] [Thread-192159] [transport.py] [_log()] starting thread (client mode): 0xa2d7a7a0
2026-02-14T21:04:32.575 [DEBUG] [Thread-192159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:04:32.589 [DEBUG] [Thread-192159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:04:32.590 [INFO] [Thread-192159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:04:32.597 [DEBUG] [Thread-192159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:04:32.597 [DEBUG] [Thread-192159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:04:32.597 [DEBUG] [Thread-192159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:04:32.597 [DEBUG] [Thread-192159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:04:32.597 [DEBUG] [Thread-192159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:04:32.597 [DEBUG] [Thread-192159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:04:32.597 [DEBUG] [Thread-192159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:04:32.597 [DEBUG] [Thread-192159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:04:32.597 [DEBUG] [Thread-192159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:04:32.597 [DEBUG] [Thread-192159] [transport.py] [_log()] client lang: <none>
2026-02-14T21:04:32.597 [DEBUG] [Thread-192159] [transport.py] [_log()] server lang: <none>
2026-02-14T21:04:32.597 [DEBUG] [Thread-192159] [transport.py] [_log()] kex follows: False
2026-02-14T21:04:32.597 [DEBUG] [Thread-192159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:04:32.597 [DEBUG] [Thread-192159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:04:32.597 [DEBUG] [Thread-192159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:04:32.597 [DEBUG] [Thread-192159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:04:32.597 [DEBUG] [Thread-192159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:04:32.597 [DEBUG] [Thread-192159] [transport.py] [_log()] Compression: none
2026-02-14T21:04:32.597 [DEBUG] [Thread-192159] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:04:32.658 [DEBUG] [Thread-192159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:04:32.659 [DEBUG] [Thread-192159] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:04:32.659 [DEBUG] [Thread-192159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:04:32.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:04:32.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:04:32.717 [DEBUG] [Thread-192159] [transport.py] [_log()] userauth is OK
2026-02-14T21:04:32.717 [DEBUG] [Thread-192159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:04:32.717 [DEBUG] [Thread-192159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:04:32.717 [DEBUG] [Thread-192159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:04:32.717 [DEBUG] [Thread-192159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:04:32.730 [INFO] [Thread-192159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:04:32.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-14T21:04:32.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:04:33.548 [DEBUG] [Thread-192159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:04:33.548 [DEBUG] [Thread-192159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:04:33.596 [DEBUG] [Thread-192159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:04:33.596 [DEBUG] [Thread-192159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:04:33.604 [DEBUG] [Thread-192159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:04:33.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:04:33.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-14T21:04:33.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-14T21:04:33.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:04:33.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:04:33.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:04:33.636 [DEBUG] [Thread-192159] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:04:38.361 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:04:38.367 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:04:40.882 [DEBUG] [Thread-192161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:04:47.025 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:04:49.031 [DEBUG] [Thread-192162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:04:55.951 [DEBUG] [Thread-192163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:05:03.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:05:03.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:05:03.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-14T21:05:05.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 4, 45), 8.21, 56.52, 0.0, 40.63, 10.56, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:05:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:04:45
2026-02-14T21:05:05.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:05:06.100 [DEBUG] [Thread-192164] [transport.py] [_log()] starting thread (client mode): 0xa2d78340
2026-02-14T21:05:06.100 [DEBUG] [Thread-192164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:05:06.114 [DEBUG] [Thread-192164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:05:06.116 [INFO] [Thread-192164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:05:06.126 [DEBUG] [Thread-192164] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:05:06.126 [DEBUG] [Thread-192164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:05:06.126 [DEBUG] [Thread-192164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:05:06.126 [DEBUG] [Thread-192164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:05:06.126 [DEBUG] [Thread-192164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:05:06.126 [DEBUG] [Thread-192164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:05:06.126 [DEBUG] [Thread-192164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:05:06.126 [DEBUG] [Thread-192164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:05:06.126 [DEBUG] [Thread-192164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:05:06.126 [DEBUG] [Thread-192164] [transport.py] [_log()] client lang: <none>
2026-02-14T21:05:06.127 [DEBUG] [Thread-192164] [transport.py] [_log()] server lang: <none>
2026-02-14T21:05:06.127 [DEBUG] [Thread-192164] [transport.py] [_log()] kex follows: False
2026-02-14T21:05:06.127 [DEBUG] [Thread-192164] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:05:06.127 [DEBUG] [Thread-192164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:05:06.127 [DEBUG] [Thread-192164] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:05:06.127 [DEBUG] [Thread-192164] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:05:06.128 [DEBUG] [Thread-192164] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:05:06.128 [DEBUG] [Thread-192164] [transport.py] [_log()] Compression: none
2026-02-14T21:05:06.128 [DEBUG] [Thread-192164] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:05:06.152 [DEBUG] [Thread-192164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:05:06.157 [DEBUG] [Thread-192164] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:05:06.159 [DEBUG] [Thread-192164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:05:06.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:05:06.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:05:06.163 [DEBUG] [Thread-192164] [transport.py] [_log()] userauth is OK
2026-02-14T21:05:06.163 [DEBUG] [Thread-192164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:05:06.163 [DEBUG] [Thread-192164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:05:06.163 [DEBUG] [Thread-192164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:05:06.163 [DEBUG] [Thread-192164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:05:06.181 [INFO] [Thread-192164] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:05:06.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:05:07.059 [DEBUG] [Thread-192164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:05:07.059 [DEBUG] [Thread-192164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:05:07.060 [DEBUG] [Thread-192164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:05:07.100 [DEBUG] [Thread-192164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:05:07.100 [DEBUG] [Thread-192164] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:05:07.104 [DEBUG] [Thread-192164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:05:07.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:05:07.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:05:07.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:05:07.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:05:07.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:05:07.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:05:07.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:05:07.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:05:07.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:05:07.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.794558 -999.00  +10.50  30.10     61   +3.50 1 1 2 1 1     0    0 6.41 -33.46 ZNESW 23.5 30.1 148.2 41.1 11.0 -25.4 10.8 -24.4 10.7 -23.5 10.9 -24.5
2026-02-14T21:05:07.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:05:07.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:05:07.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.794558
2026-02-14T21:05:07.134 [DEBUG] [Thread-192164] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:05:07.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:05:07.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:05:07.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:05:07.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:05:07.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:05:07.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:04:45', tmtdew=8.21, humidity=56.52, cloud=0.0, wind=40.63, temperature=10.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:04:46', seeing=3.67, atlas_timestamp='2026-02-14T19:04:09.811', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, -0.012749999999998707, 0.025249999999999773, -0.007500000000000284, 0.045999999999999375, 0.04425000000000168, -0.016000000000000014, 0.008250000000000313, 0.04649999999999821, 0.006499999999999062, -0.0027500000000006963, -0.002000000000000668, 0.07699999999999996, 0.04124999999999979, -0.019000000000001904, -0.005000000000000782, 0.03474999999999895, 0.01750000000000007, -0.022500000000000853, -0.03375000000000128, 0.09199999999999875, 0.07374999999999865, 0.011250000000000426, 0.0027500000000006963, 0.014999999999998792, 0.05850000000000044, 0.015750000000000597, -0.04449999999999932, 0.13449999999999918, 0.049500000000001876, 0.038000000000000256, 0.002000000000000668, 0.022749999999998494], zp_timestamp='2026-02-14T19:03:00')
2026-02-14T21:05:07.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T21:05:07.239 [DEBUG] [Thread-192167] [transport.py] [_log()] starting thread (client mode): 0xa57e3fd0
2026-02-14T21:05:07.239 [DEBUG] [Thread-192167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:05:07.253 [DEBUG] [Thread-192167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:05:07.253 [INFO] [Thread-192167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:05:07.261 [DEBUG] [Thread-192167] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:05:07.261 [DEBUG] [Thread-192167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:05:07.261 [DEBUG] [Thread-192167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:05:07.261 [DEBUG] [Thread-192167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:05:07.261 [DEBUG] [Thread-192167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:05:07.261 [DEBUG] [Thread-192167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:05:07.261 [DEBUG] [Thread-192167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:05:07.261 [DEBUG] [Thread-192167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:05:07.261 [DEBUG] [Thread-192167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:05:07.262 [DEBUG] [Thread-192167] [transport.py] [_log()] client lang: <none>
2026-02-14T21:05:07.262 [DEBUG] [Thread-192167] [transport.py] [_log()] server lang: <none>
2026-02-14T21:05:07.262 [DEBUG] [Thread-192167] [transport.py] [_log()] kex follows: False
2026-02-14T21:05:07.262 [DEBUG] [Thread-192167] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:05:07.262 [DEBUG] [Thread-192167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:05:07.262 [DEBUG] [Thread-192167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:05:07.262 [DEBUG] [Thread-192167] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:05:07.262 [DEBUG] [Thread-192167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:05:07.262 [DEBUG] [Thread-192167] [transport.py] [_log()] Compression: none
2026-02-14T21:05:07.262 [DEBUG] [Thread-192167] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:05:07.321 [DEBUG] [Thread-192167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:05:07.321 [DEBUG] [Thread-192167] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:05:07.322 [DEBUG] [Thread-192167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:05:07.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:05:07.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:05:07.376 [DEBUG] [Thread-192167] [transport.py] [_log()] userauth is OK
2026-02-14T21:05:07.377 [DEBUG] [Thread-192167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:05:07.377 [DEBUG] [Thread-192167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:05:07.377 [DEBUG] [Thread-192167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:05:07.377 [DEBUG] [Thread-192167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:05:07.397 [INFO] [Thread-192167] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:05:07.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-14T21:05:07.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:05:08.266 [DEBUG] [Thread-192167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:05:08.266 [DEBUG] [Thread-192167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:05:08.314 [DEBUG] [Thread-192167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:05:08.314 [DEBUG] [Thread-192167] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:05:08.323 [DEBUG] [Thread-192167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:05:08.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:05:08.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-14T21:05:08.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-14T21:05:08.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:05:08.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:05:08.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:05:08.359 [DEBUG] [Thread-192167] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:05:08.950 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:05:10.987 [DEBUG] [Thread-192169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:05:17.651 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:05:21.761 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:05:26.125 [DEBUG] [Thread-192170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:05:38.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:05:38.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:05:38.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T21:05:38.566 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:05:38.568 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:05:40.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 5, 20), 8.19, 56.6, 0.0, 37.34, 10.54, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:05:40.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:05:20
2026-02-14T21:05:40.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:05:40.828 [DEBUG] [Thread-192171] [transport.py] [_log()] starting thread (client mode): 0xa5743850
2026-02-14T21:05:40.829 [DEBUG] [Thread-192171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:05:40.845 [DEBUG] [Thread-192171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:05:40.845 [INFO] [Thread-192171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:05:40.848 [DEBUG] [Thread-192171] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:05:40.848 [DEBUG] [Thread-192171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:05:40.848 [DEBUG] [Thread-192171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:05:40.848 [DEBUG] [Thread-192171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:05:40.848 [DEBUG] [Thread-192171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:05:40.848 [DEBUG] [Thread-192171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:05:40.848 [DEBUG] [Thread-192171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:05:40.848 [DEBUG] [Thread-192171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:05:40.848 [DEBUG] [Thread-192171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:05:40.848 [DEBUG] [Thread-192171] [transport.py] [_log()] client lang: <none>
2026-02-14T21:05:40.848 [DEBUG] [Thread-192171] [transport.py] [_log()] server lang: <none>
2026-02-14T21:05:40.848 [DEBUG] [Thread-192171] [transport.py] [_log()] kex follows: False
2026-02-14T21:05:40.849 [DEBUG] [Thread-192171] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:05:40.849 [DEBUG] [Thread-192171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:05:40.849 [DEBUG] [Thread-192171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:05:40.849 [DEBUG] [Thread-192171] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:05:40.849 [DEBUG] [Thread-192171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:05:40.849 [DEBUG] [Thread-192171] [transport.py] [_log()] Compression: none
2026-02-14T21:05:40.849 [DEBUG] [Thread-192171] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:05:40.875 [DEBUG] [Thread-192171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:05:40.879 [DEBUG] [Thread-192171] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:05:40.880 [DEBUG] [Thread-192171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:05:40.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:05:40.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:05:40.884 [DEBUG] [Thread-192171] [transport.py] [_log()] userauth is OK
2026-02-14T21:05:40.884 [DEBUG] [Thread-192171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:05:40.884 [DEBUG] [Thread-192171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:05:40.885 [DEBUG] [Thread-192171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:05:40.885 [DEBUG] [Thread-192171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:05:40.912 [INFO] [Thread-192171] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:05:40.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:05:41.148 [DEBUG] [Thread-192173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:05:41.522 [DEBUG] [Thread-192171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:05:41.522 [DEBUG] [Thread-192171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:05:41.528 [DEBUG] [Thread-192171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:05:41.567 [DEBUG] [Thread-192171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:05:41.567 [DEBUG] [Thread-192171] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:05:41.572 [DEBUG] [Thread-192171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:05:41.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:05:41.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:05:41.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:05:41.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:05:41.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:05:41.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:05:41.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:05:41.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:05:41.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:05:41.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.794905 -999.00  +10.40  27.93     61   +3.40 1 1 1 1 1     0    0 6.37 -35.93 ZNESW 26.4 27.9 164.2 39.6 11.0 -25.5 10.8 -24.4 10.6 -23.4 11.0 -24.5
2026-02-14T21:05:41.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:05:41.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:05:41.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.794905
2026-02-14T21:05:41.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:05:41.607 [DEBUG] [Thread-192171] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:05:41.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:05:41.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:05:41.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:05:41.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:05:41.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:05:20', tmtdew=8.19, humidity=56.6, cloud=0.0, wind=37.34, temperature=10.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:05:21', seeing=3.64, atlas_timestamp='2026-02-14T19:04:39.792', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, -0.012749999999998707, 0.025249999999999773, -0.007500000000000284, 0.045999999999999375, 0.04425000000000168, -0.016000000000000014, 0.008250000000000313, 0.04649999999999821, 0.006499999999999062, -0.0027500000000006963, -0.002000000000000668, 0.07699999999999996, 0.04124999999999979, -0.019000000000001904, -0.005000000000000782, 0.03474999999999895, 0.01750000000000007, -0.022500000000000853, -0.03375000000000128, 0.09199999999999875, 0.07374999999999865, 0.011250000000000426, 0.0027500000000006963, 0.014999999999998792, 0.05850000000000044, 0.015750000000000597, -0.04449999999999932, 0.13449999999999918, 0.049500000000001876, 0.038000000000000256, 0.002000000000000668, 0.022749999999998494], zp_timestamp='2026-02-14T19:03:00')
2026-02-14T21:05:41.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-14T21:05:41.703 [DEBUG] [Thread-192175] [transport.py] [_log()] starting thread (client mode): 0xa2d6f790
2026-02-14T21:05:41.704 [DEBUG] [Thread-192175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:05:41.724 [DEBUG] [Thread-192175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:05:41.724 [INFO] [Thread-192175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:05:41.731 [DEBUG] [Thread-192175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:05:41.732 [DEBUG] [Thread-192175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:05:41.732 [DEBUG] [Thread-192175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:05:41.732 [DEBUG] [Thread-192175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:05:41.732 [DEBUG] [Thread-192175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:05:41.733 [DEBUG] [Thread-192175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:05:41.733 [DEBUG] [Thread-192175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:05:41.733 [DEBUG] [Thread-192175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:05:41.733 [DEBUG] [Thread-192175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:05:41.733 [DEBUG] [Thread-192175] [transport.py] [_log()] client lang: <none>
2026-02-14T21:05:41.733 [DEBUG] [Thread-192175] [transport.py] [_log()] server lang: <none>
2026-02-14T21:05:41.733 [DEBUG] [Thread-192175] [transport.py] [_log()] kex follows: False
2026-02-14T21:05:41.733 [DEBUG] [Thread-192175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:05:41.733 [DEBUG] [Thread-192175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:05:41.733 [DEBUG] [Thread-192175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:05:41.733 [DEBUG] [Thread-192175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:05:41.733 [DEBUG] [Thread-192175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:05:41.733 [DEBUG] [Thread-192175] [transport.py] [_log()] Compression: none
2026-02-14T21:05:41.733 [DEBUG] [Thread-192175] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:05:41.791 [DEBUG] [Thread-192175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:05:41.792 [DEBUG] [Thread-192175] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:05:41.792 [DEBUG] [Thread-192175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:05:41.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:05:41.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:05:41.848 [DEBUG] [Thread-192175] [transport.py] [_log()] userauth is OK
2026-02-14T21:05:41.849 [DEBUG] [Thread-192175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:05:41.849 [DEBUG] [Thread-192175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:05:41.849 [DEBUG] [Thread-192175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:05:41.849 [DEBUG] [Thread-192175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:05:41.871 [INFO] [Thread-192175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:05:41.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-14T21:05:41.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:05:42.750 [DEBUG] [Thread-192175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:05:42.750 [DEBUG] [Thread-192175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:05:42.798 [DEBUG] [Thread-192175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:05:42.798 [DEBUG] [Thread-192175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:05:42.806 [DEBUG] [Thread-192175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:05:42.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:05:42.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-14T21:05:42.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-14T21:05:42.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:05:42.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:05:42.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:05:42.839 [DEBUG] [Thread-192175] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:05:49.346 [DEBUG] [Thread-192177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:05:56.175 [DEBUG] [Thread-192178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:06:11.221 [DEBUG] [Thread-192179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:06:12.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:06:12.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:06:12.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-14T21:06:14.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 5, 56), 8.18, 57.1, 0.0, 37.19, 10.53, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:06:14.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:05:56
2026-02-14T21:06:15.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:06:15.512 [DEBUG] [Thread-192180] [transport.py] [_log()] starting thread (client mode): 0xa57d4070
2026-02-14T21:06:15.512 [DEBUG] [Thread-192180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:06:15.530 [DEBUG] [Thread-192180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:06:15.530 [INFO] [Thread-192180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:06:15.533 [DEBUG] [Thread-192180] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:06:15.533 [DEBUG] [Thread-192180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:06:15.533 [DEBUG] [Thread-192180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:06:15.533 [DEBUG] [Thread-192180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:06:15.533 [DEBUG] [Thread-192180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:06:15.533 [DEBUG] [Thread-192180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:06:15.533 [DEBUG] [Thread-192180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:06:15.533 [DEBUG] [Thread-192180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:06:15.533 [DEBUG] [Thread-192180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:06:15.533 [DEBUG] [Thread-192180] [transport.py] [_log()] client lang: <none>
2026-02-14T21:06:15.533 [DEBUG] [Thread-192180] [transport.py] [_log()] server lang: <none>
2026-02-14T21:06:15.533 [DEBUG] [Thread-192180] [transport.py] [_log()] kex follows: False
2026-02-14T21:06:15.533 [DEBUG] [Thread-192180] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:06:15.533 [DEBUG] [Thread-192180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:06:15.533 [DEBUG] [Thread-192180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:06:15.533 [DEBUG] [Thread-192180] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:06:15.533 [DEBUG] [Thread-192180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:06:15.533 [DEBUG] [Thread-192180] [transport.py] [_log()] Compression: none
2026-02-14T21:06:15.533 [DEBUG] [Thread-192180] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:06:15.548 [DEBUG] [Thread-192180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:06:15.549 [DEBUG] [Thread-192180] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:06:15.549 [DEBUG] [Thread-192180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:06:15.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:06:15.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:06:15.549 [DEBUG] [Thread-192180] [transport.py] [_log()] userauth is OK
2026-02-14T21:06:15.549 [DEBUG] [Thread-192180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:06:15.549 [DEBUG] [Thread-192180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:06:15.549 [DEBUG] [Thread-192180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:06:15.549 [DEBUG] [Thread-192180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:06:15.558 [INFO] [Thread-192180] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:06:15.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:06:16.159 [DEBUG] [Thread-192180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:06:16.159 [DEBUG] [Thread-192180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:06:16.160 [DEBUG] [Thread-192180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:06:16.200 [DEBUG] [Thread-192180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:06:16.200 [DEBUG] [Thread-192180] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:06:16.203 [DEBUG] [Thread-192180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:06:16.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:06:16.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:06:16.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:06:16.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:06:16.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:06:16.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:06:16.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:06:16.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:06:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:06:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.795600 -999.00  +10.40  32.57     62   +3.50 1 1 2 1 1     0    0 6.27 -36.89 ZNESW 28.9 32.6 170.6 38.0 10.9 -25.2 10.8 -24.3 10.6 -23.3 10.9 -24.5
2026-02-14T21:06:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:06:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:06:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.795600
2026-02-14T21:06:16.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:06:16.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:06:16.227 [DEBUG] [Thread-192180] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:06:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:06:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:06:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:06:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:05:56', tmtdew=8.18, humidity=57.1, cloud=0.0, wind=37.19, temperature=10.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:05:56', seeing=2.95, atlas_timestamp='2026-02-14T19:05:39.840', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, -0.012749999999998707, 0.025249999999999773, -0.007500000000000284, 0.045999999999999375, 0.04425000000000168, -0.016000000000000014, 0.008250000000000313, 0.04649999999999821, 0.006499999999999062, -0.0027500000000006963, -0.002000000000000668, 0.07699999999999996, 0.04124999999999979, -0.019000000000001904, -0.005000000000000782, 0.03474999999999895, 0.01750000000000007, -0.022500000000000853, -0.03375000000000128, 0.09199999999999875, 0.07374999999999865, 0.011250000000000426, 0.0027500000000006963, 0.014999999999998792, 0.05850000000000044, 0.015750000000000597, -0.04449999999999932, 0.13449999999999918, 0.049500000000001876, 0.038000000000000256, 0.002000000000000668, 0.022749999999998494], zp_timestamp='2026-02-14T19:03:00')
2026-02-14T21:06:16.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-14T21:06:16.328 [DEBUG] [Thread-192183] [transport.py] [_log()] starting thread (client mode): 0xa2d01d20
2026-02-14T21:06:16.328 [DEBUG] [Thread-192183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:06:16.342 [DEBUG] [Thread-192183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:06:16.343 [INFO] [Thread-192183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:06:16.350 [DEBUG] [Thread-192183] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:06:16.350 [DEBUG] [Thread-192183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:06:16.350 [DEBUG] [Thread-192183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:06:16.350 [DEBUG] [Thread-192183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:06:16.350 [DEBUG] [Thread-192183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:06:16.350 [DEBUG] [Thread-192183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:06:16.350 [DEBUG] [Thread-192183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:06:16.351 [DEBUG] [Thread-192183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:06:16.351 [DEBUG] [Thread-192183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:06:16.351 [DEBUG] [Thread-192183] [transport.py] [_log()] client lang: <none>
2026-02-14T21:06:16.351 [DEBUG] [Thread-192183] [transport.py] [_log()] server lang: <none>
2026-02-14T21:06:16.351 [DEBUG] [Thread-192183] [transport.py] [_log()] kex follows: False
2026-02-14T21:06:16.351 [DEBUG] [Thread-192183] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:06:16.351 [DEBUG] [Thread-192183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:06:16.351 [DEBUG] [Thread-192183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:06:16.351 [DEBUG] [Thread-192183] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:06:16.351 [DEBUG] [Thread-192183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:06:16.351 [DEBUG] [Thread-192183] [transport.py] [_log()] Compression: none
2026-02-14T21:06:16.351 [DEBUG] [Thread-192183] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:06:16.408 [DEBUG] [Thread-192183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:06:16.408 [DEBUG] [Thread-192183] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:06:16.409 [DEBUG] [Thread-192183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:06:16.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:06:16.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:06:16.465 [DEBUG] [Thread-192183] [transport.py] [_log()] userauth is OK
2026-02-14T21:06:16.465 [DEBUG] [Thread-192183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:06:16.466 [DEBUG] [Thread-192183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:06:16.466 [DEBUG] [Thread-192183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:06:16.466 [DEBUG] [Thread-192183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:06:16.486 [INFO] [Thread-192183] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:06:16.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-14T21:06:16.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:06:17.333 [DEBUG] [Thread-192183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:06:17.333 [DEBUG] [Thread-192183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:06:17.381 [DEBUG] [Thread-192183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:06:17.381 [DEBUG] [Thread-192183] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:06:17.390 [DEBUG] [Thread-192183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:06:17.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:06:17.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-14T21:06:17.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:06:17.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:06:17.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:06:17.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:06:17.424 [DEBUG] [Thread-192183] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:06:20.719 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:06:26.250 [DEBUG] [Thread-192185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:06:38.775 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:06:38.776 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:06:41.327 [DEBUG] [Thread-192186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:06:44.441 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:06:47.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:06:47.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:06:47.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-14T21:06:49.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 6, 31), 8.18, 57.12, 0.0, 37.85, 10.51, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:06:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:06:31
2026-02-14T21:06:49.658 [DEBUG] [Thread-192187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:06:49.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:06:49.998 [DEBUG] [Thread-192188] [transport.py] [_log()] starting thread (client mode): 0xa2d7a8f0
2026-02-14T21:06:49.998 [DEBUG] [Thread-192188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:06:49.998 [DEBUG] [Thread-192188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:06:49.998 [INFO] [Thread-192188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:06:50.002 [DEBUG] [Thread-192188] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:06:50.002 [DEBUG] [Thread-192188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:06:50.002 [DEBUG] [Thread-192188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:06:50.002 [DEBUG] [Thread-192188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:06:50.002 [DEBUG] [Thread-192188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:06:50.002 [DEBUG] [Thread-192188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:06:50.002 [DEBUG] [Thread-192188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:06:50.002 [DEBUG] [Thread-192188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:06:50.002 [DEBUG] [Thread-192188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:06:50.002 [DEBUG] [Thread-192188] [transport.py] [_log()] client lang: <none>
2026-02-14T21:06:50.002 [DEBUG] [Thread-192188] [transport.py] [_log()] server lang: <none>
2026-02-14T21:06:50.002 [DEBUG] [Thread-192188] [transport.py] [_log()] kex follows: False
2026-02-14T21:06:50.002 [DEBUG] [Thread-192188] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:06:50.002 [DEBUG] [Thread-192188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:06:50.002 [DEBUG] [Thread-192188] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:06:50.003 [DEBUG] [Thread-192188] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:06:50.003 [DEBUG] [Thread-192188] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:06:50.003 [DEBUG] [Thread-192188] [transport.py] [_log()] Compression: none
2026-02-14T21:06:50.003 [DEBUG] [Thread-192188] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:06:50.024 [DEBUG] [Thread-192188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:06:50.026 [DEBUG] [Thread-192188] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:06:50.027 [DEBUG] [Thread-192188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:06:50.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:06:50.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:06:50.031 [DEBUG] [Thread-192188] [transport.py] [_log()] userauth is OK
2026-02-14T21:06:50.031 [DEBUG] [Thread-192188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:06:50.031 [DEBUG] [Thread-192188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:06:50.031 [DEBUG] [Thread-192188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:06:50.031 [DEBUG] [Thread-192188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:06:50.066 [INFO] [Thread-192188] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:06:50.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:06:50.677 [DEBUG] [Thread-192188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:06:50.677 [DEBUG] [Thread-192188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:06:50.678 [DEBUG] [Thread-192188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:06:50.719 [DEBUG] [Thread-192188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:06:50.719 [DEBUG] [Thread-192188] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:06:50.722 [DEBUG] [Thread-192188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:06:50.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:06:50.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:06:50.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:06:50.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:06:50.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:06:50.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:06:50.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:06:50.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:06:50.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:06:50.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.795947 -999.00  +10.40  29.44     62   +3.50 1 1 1 1 1     0    0 6.26 -35.60 ZNESW 26.4 29.4 164.0 41.9 11.0 -25.3 10.8 -24.3 10.6 -23.3 10.9 -24.4
2026-02-14T21:06:50.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:06:50.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:06:50.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.795947
2026-02-14T21:06:50.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:06:50.760 [DEBUG] [Thread-192188] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:06:50.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:06:50.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:06:50.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:06:50.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:06:50.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:06:31', tmtdew=8.18, humidity=57.12, cloud=0.0, wind=37.85, temperature=10.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:06:31', seeing=3.02, atlas_timestamp='2026-02-14T19:06:09.821', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, -0.012749999999998707, 0.025249999999999773, -0.007500000000000284, 0.045999999999999375, 0.04425000000000168, -0.016000000000000014, 0.008250000000000313, 0.04649999999999821, 0.006499999999999062, -0.0027500000000006963, -0.002000000000000668, 0.07699999999999996, 0.04124999999999979, -0.019000000000001904, -0.005000000000000782, 0.03474999999999895, 0.01750000000000007, -0.022500000000000853, -0.03375000000000128, 0.09199999999999875, 0.07374999999999865, 0.011250000000000426, 0.0027500000000006963, 0.014999999999998792, 0.05850000000000044, 0.015750000000000597, -0.04449999999999932, 0.13449999999999918, 0.049500000000001876, 0.038000000000000256, 0.002000000000000668, 0.022749999999998494], zp_timestamp='2026-02-14T19:03:00')
2026-02-14T21:06:50.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-14T21:06:50.876 [DEBUG] [Thread-192191] [transport.py] [_log()] starting thread (client mode): 0xa57739d0
2026-02-14T21:06:50.876 [DEBUG] [Thread-192191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:06:50.890 [DEBUG] [Thread-192191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:06:50.890 [INFO] [Thread-192191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:06:50.898 [DEBUG] [Thread-192191] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:06:50.898 [DEBUG] [Thread-192191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:06:50.898 [DEBUG] [Thread-192191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:06:50.899 [DEBUG] [Thread-192191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:06:50.899 [DEBUG] [Thread-192191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:06:50.899 [DEBUG] [Thread-192191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:06:50.899 [DEBUG] [Thread-192191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:06:50.899 [DEBUG] [Thread-192191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:06:50.899 [DEBUG] [Thread-192191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:06:50.899 [DEBUG] [Thread-192191] [transport.py] [_log()] client lang: <none>
2026-02-14T21:06:50.899 [DEBUG] [Thread-192191] [transport.py] [_log()] server lang: <none>
2026-02-14T21:06:50.899 [DEBUG] [Thread-192191] [transport.py] [_log()] kex follows: False
2026-02-14T21:06:50.899 [DEBUG] [Thread-192191] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:06:50.900 [DEBUG] [Thread-192191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:06:50.900 [DEBUG] [Thread-192191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:06:50.900 [DEBUG] [Thread-192191] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:06:50.900 [DEBUG] [Thread-192191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:06:50.900 [DEBUG] [Thread-192191] [transport.py] [_log()] Compression: none
2026-02-14T21:06:50.900 [DEBUG] [Thread-192191] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:06:50.960 [DEBUG] [Thread-192191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:06:50.960 [DEBUG] [Thread-192191] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:06:50.961 [DEBUG] [Thread-192191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:06:50.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:06:50.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:06:51.016 [DEBUG] [Thread-192191] [transport.py] [_log()] userauth is OK
2026-02-14T21:06:51.016 [DEBUG] [Thread-192191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:06:51.016 [DEBUG] [Thread-192191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:06:51.016 [DEBUG] [Thread-192191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:06:51.016 [DEBUG] [Thread-192191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:06:51.035 [INFO] [Thread-192191] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:06:51.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-14T21:06:51.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:06:51.835 [DEBUG] [Thread-192191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:06:51.835 [DEBUG] [Thread-192191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:06:51.879 [DEBUG] [Thread-192191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:06:51.879 [DEBUG] [Thread-192191] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:06:51.887 [DEBUG] [Thread-192191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:06:51.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:06: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')
2026-02-14T21:06:51.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-14T21:06:51.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:06:51.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:06:51.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:06:51.920 [DEBUG] [Thread-192191] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:06:53.162 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:06:56.353 [DEBUG] [Thread-192193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:06:57.275 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:07:11.446 [DEBUG] [Thread-192194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:07:21.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:07:21.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:07:21.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-14T21:07:23.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 7, 6), 8.17, 57.15, 0.0, 38.41, 10.51, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:07:23.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:07:06
2026-02-14T21:07:24.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:07:24.357 [DEBUG] [Thread-192195] [transport.py] [_log()] starting thread (client mode): 0xa2d13850
2026-02-14T21:07:24.357 [DEBUG] [Thread-192195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:07:24.369 [DEBUG] [Thread-192195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:07:24.369 [INFO] [Thread-192195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:07:24.372 [DEBUG] [Thread-192195] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:07:24.372 [DEBUG] [Thread-192195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:07:24.372 [DEBUG] [Thread-192195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:07:24.372 [DEBUG] [Thread-192195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:07:24.372 [DEBUG] [Thread-192195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:07:24.372 [DEBUG] [Thread-192195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:07:24.372 [DEBUG] [Thread-192195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:07:24.372 [DEBUG] [Thread-192195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:07:24.372 [DEBUG] [Thread-192195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:07:24.372 [DEBUG] [Thread-192195] [transport.py] [_log()] client lang: <none>
2026-02-14T21:07:24.372 [DEBUG] [Thread-192195] [transport.py] [_log()] server lang: <none>
2026-02-14T21:07:24.372 [DEBUG] [Thread-192195] [transport.py] [_log()] kex follows: False
2026-02-14T21:07:24.372 [DEBUG] [Thread-192195] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:07:24.372 [DEBUG] [Thread-192195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:07:24.372 [DEBUG] [Thread-192195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:07:24.372 [DEBUG] [Thread-192195] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:07:24.372 [DEBUG] [Thread-192195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:07:24.372 [DEBUG] [Thread-192195] [transport.py] [_log()] Compression: none
2026-02-14T21:07:24.372 [DEBUG] [Thread-192195] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:07:24.395 [DEBUG] [Thread-192195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:07:24.398 [DEBUG] [Thread-192195] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:07:24.399 [DEBUG] [Thread-192195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:07:24.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:07:24.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:07:24.402 [DEBUG] [Thread-192195] [transport.py] [_log()] userauth is OK
2026-02-14T21:07:24.402 [DEBUG] [Thread-192195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:07:24.402 [DEBUG] [Thread-192195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:07:24.402 [DEBUG] [Thread-192195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:07:24.402 [DEBUG] [Thread-192195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:07:24.419 [INFO] [Thread-192195] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:07:24.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:07:25.054 [DEBUG] [Thread-192195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:07:25.054 [DEBUG] [Thread-192195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:07:25.054 [DEBUG] [Thread-192195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:07:25.095 [DEBUG] [Thread-192195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:07:25.095 [DEBUG] [Thread-192195] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:07:25.097 [DEBUG] [Thread-192195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:07:25.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:07:25.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:07:25.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:07:25.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:07:25.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:07:25.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:07:25.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:07:25.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:07:25.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:07:25.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.796294 -999.00  +10.40  31.23     62   +3.50 1 1 2 1 1     0    0 6.38 -36.62 ZNESW 28.1 31.2 162.0 35.5 10.9 -25.3 10.8 -24.4 10.6 -23.3 10.9 -24.5
2026-02-14T21:07:25.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:07:25.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:07:25.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.796294
2026-02-14T21:07:25.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:07:25.124 [DEBUG] [Thread-192195] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:07:25.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:07:25.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:07:25.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:07:25.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:07:25.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:07:06', tmtdew=8.17, humidity=57.15, cloud=0.0, wind=38.41, temperature=10.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:07:07', seeing=3.02, atlas_timestamp='2026-02-14T19:06:39.802', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, -0.012749999999998707, 0.025249999999999773, -0.007500000000000284, 0.045999999999999375, 0.04425000000000168, -0.016000000000000014, 0.008250000000000313, 0.04649999999999821, 0.006499999999999062, -0.0027500000000006963, -0.002000000000000668, 0.07699999999999996, 0.04124999999999979, -0.019000000000001904, -0.005000000000000782, 0.03474999999999895, 0.01750000000000007, -0.022500000000000853, -0.03375000000000128, 0.09199999999999875, 0.07374999999999865, 0.011250000000000426, 0.0027500000000006963, 0.014999999999998792, 0.05850000000000044, 0.015750000000000597, -0.04449999999999932, 0.13449999999999918, 0.049500000000001876, 0.038000000000000256, 0.002000000000000668, 0.022749999999998494], zp_timestamp='2026-02-14T19:03:00')
2026-02-14T21:07:25.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T21:07:25.243 [DEBUG] [Thread-192198] [transport.py] [_log()] starting thread (client mode): 0xa5770eb0
2026-02-14T21:07:25.243 [DEBUG] [Thread-192198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:07:25.258 [DEBUG] [Thread-192198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:07:25.258 [INFO] [Thread-192198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:07:25.265 [DEBUG] [Thread-192198] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:07:25.265 [DEBUG] [Thread-192198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:07:25.265 [DEBUG] [Thread-192198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:07:25.265 [DEBUG] [Thread-192198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:07:25.265 [DEBUG] [Thread-192198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:07:25.266 [DEBUG] [Thread-192198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:07:25.266 [DEBUG] [Thread-192198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:07:25.266 [DEBUG] [Thread-192198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:07:25.266 [DEBUG] [Thread-192198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:07:25.266 [DEBUG] [Thread-192198] [transport.py] [_log()] client lang: <none>
2026-02-14T21:07:25.266 [DEBUG] [Thread-192198] [transport.py] [_log()] server lang: <none>
2026-02-14T21:07:25.266 [DEBUG] [Thread-192198] [transport.py] [_log()] kex follows: False
2026-02-14T21:07:25.266 [DEBUG] [Thread-192198] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:07:25.266 [DEBUG] [Thread-192198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:07:25.266 [DEBUG] [Thread-192198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:07:25.266 [DEBUG] [Thread-192198] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:07:25.266 [DEBUG] [Thread-192198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:07:25.266 [DEBUG] [Thread-192198] [transport.py] [_log()] Compression: none
2026-02-14T21:07:25.266 [DEBUG] [Thread-192198] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:07:25.324 [DEBUG] [Thread-192198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:07:25.324 [DEBUG] [Thread-192198] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:07:25.324 [DEBUG] [Thread-192198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:07:25.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:07:25.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:07:25.381 [DEBUG] [Thread-192198] [transport.py] [_log()] userauth is OK
2026-02-14T21:07:25.381 [DEBUG] [Thread-192198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:07:25.381 [DEBUG] [Thread-192198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:07:25.381 [DEBUG] [Thread-192198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:07:25.381 [DEBUG] [Thread-192198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:07:25.395 [INFO] [Thread-192198] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:07:25.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-14T21:07:25.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:07:26.261 [DEBUG] [Thread-192198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:07:26.262 [DEBUG] [Thread-192198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:07:26.309 [DEBUG] [Thread-192198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:07:26.309 [DEBUG] [Thread-192198] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:07:26.317 [DEBUG] [Thread-192198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:07:26.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:07:26.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-14T21:07:26.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:07:26.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:07:26.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:07:26.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:07:26.350 [DEBUG] [Thread-192198] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:07:26.478 [DEBUG] [Thread-192200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:07:38.983 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:07:38.984 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:07:41.548 [DEBUG] [Thread-192201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:07:50.017 [DEBUG] [Thread-192202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:07:54.912 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:07:56.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:07:56.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:07:56.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-14T21:07:56.578 [DEBUG] [Thread-192203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:07:58.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 7, 41), 8.33, 56.37, 0.0, 41.35, 10.88, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:07:58.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:07:41
2026-02-14T21:07:58.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:07:58.770 [DEBUG] [Thread-192204] [transport.py] [_log()] starting thread (client mode): 0xa57d4370
2026-02-14T21:07:58.771 [DEBUG] [Thread-192204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:07:58.779 [DEBUG] [Thread-192204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:07:58.779 [INFO] [Thread-192204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:07:58.786 [DEBUG] [Thread-192204] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:07:58.787 [DEBUG] [Thread-192204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:07:58.787 [DEBUG] [Thread-192204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:07:58.787 [DEBUG] [Thread-192204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:07:58.787 [DEBUG] [Thread-192204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:07:58.787 [DEBUG] [Thread-192204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:07:58.787 [DEBUG] [Thread-192204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:07:58.787 [DEBUG] [Thread-192204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:07:58.787 [DEBUG] [Thread-192204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:07:58.787 [DEBUG] [Thread-192204] [transport.py] [_log()] client lang: <none>
2026-02-14T21:07:58.787 [DEBUG] [Thread-192204] [transport.py] [_log()] server lang: <none>
2026-02-14T21:07:58.787 [DEBUG] [Thread-192204] [transport.py] [_log()] kex follows: False
2026-02-14T21:07:58.787 [DEBUG] [Thread-192204] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:07:58.788 [DEBUG] [Thread-192204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:07:58.788 [DEBUG] [Thread-192204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:07:58.788 [DEBUG] [Thread-192204] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:07:58.789 [DEBUG] [Thread-192204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:07:58.789 [DEBUG] [Thread-192204] [transport.py] [_log()] Compression: none
2026-02-14T21:07:58.789 [DEBUG] [Thread-192204] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:07:58.824 [DEBUG] [Thread-192204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:07:58.848 [DEBUG] [Thread-192204] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:07:58.850 [DEBUG] [Thread-192204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:07:58.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:07:58.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:07:58.854 [DEBUG] [Thread-192204] [transport.py] [_log()] userauth is OK
2026-02-14T21:07:58.855 [DEBUG] [Thread-192204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:07:58.855 [DEBUG] [Thread-192204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:07:58.855 [DEBUG] [Thread-192204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:07:58.855 [DEBUG] [Thread-192204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:07:58.876 [INFO] [Thread-192204] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:07:58.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:07:59.672 [DEBUG] [Thread-192204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:07:59.673 [DEBUG] [Thread-192204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:07:59.674 [DEBUG] [Thread-192204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:07:59.714 [DEBUG] [Thread-192204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:07:59.714 [DEBUG] [Thread-192204] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:07:59.717 [DEBUG] [Thread-192204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:07:59.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:07:59.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:07:59.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:07:59.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:07:59.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:07:59.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:07:59.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:07:59.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:07:59.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:07:59.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.796641 -999.00  +10.40  31.29     62   +3.50 1 1 2 1 1     0    0 6.24 -35.16 ZNESW 28.1 31.3 162.4 43.3 10.9 -25.5 10.8 -24.4 10.6 -23.3 10.9 -24.5
2026-02-14T21:07:59.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:07:59.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:07:59.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.796641
2026-02-14T21:07:59.745 [DEBUG] [Thread-192204] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:07:59.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:07:59.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:07:59.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:07:59.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:07:59.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:07:59.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:07:41', tmtdew=8.33, humidity=56.37, cloud=0.0, wind=41.35, temperature=10.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:07:42', seeing=2.61, atlas_timestamp='2026-02-14T19:07:09.782', atlas_cloud=1, atlas_rain=1, zp_data=[0.016750000000000043, -0.012749999999998707, 0.025249999999999773, -0.007500000000000284, 0.045999999999999375, 0.04425000000000168, -0.016000000000000014, 0.008250000000000313, 0.04649999999999821, 0.006499999999999062, -0.0027500000000006963, -0.002000000000000668, 0.07699999999999996, 0.04124999999999979, -0.019000000000001904, -0.005000000000000782, 0.03474999999999895, 0.01750000000000007, -0.022500000000000853, -0.03375000000000128, 0.09199999999999875, 0.07374999999999865, 0.011250000000000426, 0.0027500000000006963, 0.014999999999998792, 0.05850000000000044, 0.015750000000000597, -0.04449999999999932, 0.13449999999999918, 0.049500000000001876, 0.038000000000000256, 0.002000000000000668, 0.022749999999998494], zp_timestamp='2026-02-14T19:03:00')
2026-02-14T21:07:59.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-14T21:07:59.864 [DEBUG] [Thread-192207] [transport.py] [_log()] starting thread (client mode): 0xa57d76d0
2026-02-14T21:07:59.864 [DEBUG] [Thread-192207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:07:59.877 [DEBUG] [Thread-192207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:07:59.878 [INFO] [Thread-192207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:07:59.885 [DEBUG] [Thread-192207] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:07:59.885 [DEBUG] [Thread-192207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:07:59.885 [DEBUG] [Thread-192207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:07:59.885 [DEBUG] [Thread-192207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:07:59.885 [DEBUG] [Thread-192207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:07:59.885 [DEBUG] [Thread-192207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:07:59.885 [DEBUG] [Thread-192207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:07:59.885 [DEBUG] [Thread-192207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:07:59.885 [DEBUG] [Thread-192207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:07:59.885 [DEBUG] [Thread-192207] [transport.py] [_log()] client lang: <none>
2026-02-14T21:07:59.885 [DEBUG] [Thread-192207] [transport.py] [_log()] server lang: <none>
2026-02-14T21:07:59.885 [DEBUG] [Thread-192207] [transport.py] [_log()] kex follows: False
2026-02-14T21:07:59.886 [DEBUG] [Thread-192207] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:07:59.886 [DEBUG] [Thread-192207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:07:59.886 [DEBUG] [Thread-192207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:07:59.886 [DEBUG] [Thread-192207] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:07:59.886 [DEBUG] [Thread-192207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:07:59.886 [DEBUG] [Thread-192207] [transport.py] [_log()] Compression: none
2026-02-14T21:07:59.886 [DEBUG] [Thread-192207] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:07:59.943 [DEBUG] [Thread-192207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:07:59.943 [DEBUG] [Thread-192207] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:07:59.943 [DEBUG] [Thread-192207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:07:59.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:07:59.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:08:00.001 [DEBUG] [Thread-192207] [transport.py] [_log()] userauth is OK
2026-02-14T21:08:00.001 [DEBUG] [Thread-192207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:08:00.001 [DEBUG] [Thread-192207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:08:00.001 [DEBUG] [Thread-192207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:08:00.001 [DEBUG] [Thread-192207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:08:00.024 [INFO] [Thread-192207] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:08:00.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-14T21:08:00.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:08:00.873 [DEBUG] [Thread-192207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:08:00.873 [DEBUG] [Thread-192207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:08:00.921 [DEBUG] [Thread-192207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:08:00.921 [DEBUG] [Thread-192207] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:08:00.930 [DEBUG] [Thread-192207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:08:00.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:08:00.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:08:00.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-14T21:08:00.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:08:00.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:08:00.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:08:00.968 [DEBUG] [Thread-192207] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:08:11.611 [DEBUG] [Thread-192209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:08:19.894 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:08:26.712 [DEBUG] [Thread-192210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:08:30.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:08:30.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:08:30.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-14T21:08:32.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 8, 16), 8.16, 57.19, 0.0, 36.86, 10.48, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:08:32.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:08:16
2026-02-14T21:08:33.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:08:33.364 [DEBUG] [Thread-192211] [transport.py] [_log()] starting thread (client mode): 0xa57d4d30
2026-02-14T21:08:33.365 [DEBUG] [Thread-192211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:08:33.379 [DEBUG] [Thread-192211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:08:33.379 [INFO] [Thread-192211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:08:33.382 [DEBUG] [Thread-192211] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:08:33.382 [DEBUG] [Thread-192211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:08:33.382 [DEBUG] [Thread-192211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:08:33.382 [DEBUG] [Thread-192211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:08:33.382 [DEBUG] [Thread-192211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:08:33.383 [DEBUG] [Thread-192211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:08:33.383 [DEBUG] [Thread-192211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:08:33.383 [DEBUG] [Thread-192211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:08:33.383 [DEBUG] [Thread-192211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:08:33.383 [DEBUG] [Thread-192211] [transport.py] [_log()] client lang: <none>
2026-02-14T21:08:33.383 [DEBUG] [Thread-192211] [transport.py] [_log()] server lang: <none>
2026-02-14T21:08:33.383 [DEBUG] [Thread-192211] [transport.py] [_log()] kex follows: False
2026-02-14T21:08:33.383 [DEBUG] [Thread-192211] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:08:33.383 [DEBUG] [Thread-192211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:08:33.383 [DEBUG] [Thread-192211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:08:33.383 [DEBUG] [Thread-192211] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:08:33.383 [DEBUG] [Thread-192211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:08:33.383 [DEBUG] [Thread-192211] [transport.py] [_log()] Compression: none
2026-02-14T21:08:33.383 [DEBUG] [Thread-192211] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:08:33.403 [DEBUG] [Thread-192211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:08:33.405 [DEBUG] [Thread-192211] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:08:33.405 [DEBUG] [Thread-192211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:08:33.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:08:33.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:08:33.449 [DEBUG] [Thread-192211] [transport.py] [_log()] userauth is OK
2026-02-14T21:08:33.449 [DEBUG] [Thread-192211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:08:33.449 [DEBUG] [Thread-192211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:08:33.449 [DEBUG] [Thread-192211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:08:33.449 [DEBUG] [Thread-192211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:08:33.479 [INFO] [Thread-192211] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:08:33.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:08:34.149 [DEBUG] [Thread-192211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:08:34.149 [DEBUG] [Thread-192211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:08:34.150 [DEBUG] [Thread-192211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:08:34.191 [DEBUG] [Thread-192211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:08:34.191 [DEBUG] [Thread-192211] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:08:34.194 [DEBUG] [Thread-192211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:08:34.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:08:34.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:08:34.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:08:34.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:08:34.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:08:34.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:08:34.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:08:34.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:08:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:08:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.796989 -999.00  +10.40  26.09     62   +3.50 1 1 1 1 1     0    0 6.16 -35.96 ZNESW 30.6 26.1 162.8 35.4 10.9 -25.3 10.8 -24.4 10.6 -23.4 10.9 -24.6
2026-02-14T21:08:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:08:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:08:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.796989
2026-02-14T21:08:34.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:08:34.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:08:34.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:08:34.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:08:34.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:08:34.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:08:16', tmtdew=8.16, humidity=57.19, cloud=0.0, wind=36.86, temperature=10.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:08:17', seeing=2.81, atlas_timestamp='2026-02-14T19:07:39.850', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00575000000000081, -0.008250000000000313, 0.004749999999999588, 0.00849999999999973, -0.027499999999999858, -0.0037499999999983658, 0.019000000000000128, -0.003750000000000142, -0.0005000000000006111, -0.036999999999999034, -0.0027500000000006963, -0.05000000000000071, 0.08149999999999835, 0.015249999999999986, -0.027000000000001023, -0.03900000000000148, 0.00274999999999892, 0.0024999999999995026, -0.026000000000001577, -0.02925000000000111, 0.045999999999999375, 0.04274999999999807, -0.0072499999999990905, -0.032249999999999446, 0.031000000000000583, 0.05150000000000077, 0.0007500000000000284, -0.018499999999999517, 0.027000000000001023, 0.03950000000000031, 1.7763568394002505e-15, 0.012000000000000455, 0.012749999999998707], zp_timestamp='2026-02-14T19:06:00')
2026-02-14T21:08:34.221 [DEBUG] [Thread-192211] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:08:34.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-14T21:08:34.313 [DEBUG] [Thread-192214] [transport.py] [_log()] starting thread (client mode): 0xa57d7bb0
2026-02-14T21:08:34.313 [DEBUG] [Thread-192214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:08:34.327 [DEBUG] [Thread-192214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:08:34.327 [INFO] [Thread-192214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:08:34.334 [DEBUG] [Thread-192214] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:08:34.334 [DEBUG] [Thread-192214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:08:34.334 [DEBUG] [Thread-192214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:08:34.334 [DEBUG] [Thread-192214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:08:34.334 [DEBUG] [Thread-192214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:08:34.334 [DEBUG] [Thread-192214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:08:34.334 [DEBUG] [Thread-192214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:08:34.334 [DEBUG] [Thread-192214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:08:34.335 [DEBUG] [Thread-192214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:08:34.335 [DEBUG] [Thread-192214] [transport.py] [_log()] client lang: <none>
2026-02-14T21:08:34.335 [DEBUG] [Thread-192214] [transport.py] [_log()] server lang: <none>
2026-02-14T21:08:34.335 [DEBUG] [Thread-192214] [transport.py] [_log()] kex follows: False
2026-02-14T21:08:34.335 [DEBUG] [Thread-192214] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:08:34.335 [DEBUG] [Thread-192214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:08:34.335 [DEBUG] [Thread-192214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:08:34.335 [DEBUG] [Thread-192214] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:08:34.335 [DEBUG] [Thread-192214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:08:34.335 [DEBUG] [Thread-192214] [transport.py] [_log()] Compression: none
2026-02-14T21:08:34.335 [DEBUG] [Thread-192214] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:08:34.391 [DEBUG] [Thread-192214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:08:34.391 [DEBUG] [Thread-192214] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:08:34.392 [DEBUG] [Thread-192214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:08:34.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:08:34.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:08:34.449 [DEBUG] [Thread-192214] [transport.py] [_log()] userauth is OK
2026-02-14T21:08:34.449 [DEBUG] [Thread-192214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:08:34.449 [DEBUG] [Thread-192214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:08:34.449 [DEBUG] [Thread-192214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:08:34.449 [DEBUG] [Thread-192214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:08:34.464 [INFO] [Thread-192214] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:08:34.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-14T21:08:34.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:08:35.282 [DEBUG] [Thread-192214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:08:35.282 [DEBUG] [Thread-192214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:08:35.332 [DEBUG] [Thread-192214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:08:35.332 [DEBUG] [Thread-192214] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:08:35.340 [DEBUG] [Thread-192214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:08:35.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:08:35.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-14T21:08:35.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:08:35.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:08:35.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:08:35.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:08:35.372 [DEBUG] [Thread-192214] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:08:39.184 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:08:39.185 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:08:41.736 [DEBUG] [Thread-192216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:08:50.333 [DEBUG] [Thread-192217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:08:56.780 [DEBUG] [Thread-192218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:09:05.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:09:05.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:09:05.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-14T21:09:07.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 8, 52), 8.09, 57.29, 0.0, 36.65, 10.49, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:09:07.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:08:52
2026-02-14T21:09:07.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:09:07.715 [DEBUG] [Thread-192219] [transport.py] [_log()] starting thread (client mode): 0xa57d5e70
2026-02-14T21:09:07.715 [DEBUG] [Thread-192219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:09:07.731 [DEBUG] [Thread-192219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:09:07.731 [INFO] [Thread-192219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:09:07.735 [DEBUG] [Thread-192219] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:09:07.735 [DEBUG] [Thread-192219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:09:07.735 [DEBUG] [Thread-192219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:09:07.735 [DEBUG] [Thread-192219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:09:07.735 [DEBUG] [Thread-192219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:09:07.735 [DEBUG] [Thread-192219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:09:07.735 [DEBUG] [Thread-192219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:09:07.735 [DEBUG] [Thread-192219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:09:07.735 [DEBUG] [Thread-192219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:09:07.735 [DEBUG] [Thread-192219] [transport.py] [_log()] client lang: <none>
2026-02-14T21:09:07.735 [DEBUG] [Thread-192219] [transport.py] [_log()] server lang: <none>
2026-02-14T21:09:07.735 [DEBUG] [Thread-192219] [transport.py] [_log()] kex follows: False
2026-02-14T21:09:07.735 [DEBUG] [Thread-192219] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:09:07.735 [DEBUG] [Thread-192219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:09:07.735 [DEBUG] [Thread-192219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:09:07.735 [DEBUG] [Thread-192219] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:09:07.736 [DEBUG] [Thread-192219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:09:07.736 [DEBUG] [Thread-192219] [transport.py] [_log()] Compression: none
2026-02-14T21:09:07.736 [DEBUG] [Thread-192219] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:09:07.751 [DEBUG] [Thread-192219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:09:07.752 [DEBUG] [Thread-192219] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:09:07.752 [DEBUG] [Thread-192219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:09:07.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:09:07.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:09:07.754 [DEBUG] [Thread-192219] [transport.py] [_log()] userauth is OK
2026-02-14T21:09:07.754 [DEBUG] [Thread-192219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:09:07.755 [DEBUG] [Thread-192219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:09:07.755 [DEBUG] [Thread-192219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:09:07.755 [DEBUG] [Thread-192219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:09:07.776 [INFO] [Thread-192219] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:09:07.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:09:08.424 [DEBUG] [Thread-192219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:09:08.424 [DEBUG] [Thread-192219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:09:08.424 [DEBUG] [Thread-192219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:09:08.465 [DEBUG] [Thread-192219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:09:08.465 [DEBUG] [Thread-192219] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:09:08.469 [DEBUG] [Thread-192219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:09:08.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:09:08.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:09:08.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:09:08.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:09:08.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:09:08.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:09:08.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:09:08.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:09:08.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:09:08.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.797336 -999.00  +10.40  29.76     62   +3.50 1 1 1 1 1     0    0 6.27 -37.06 ZNESW 23.3 29.8 154.2 37.5 10.9 -25.4 10.7 -24.4 10.6 -23.5 10.9 -24.4
2026-02-14T21:09:08.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:09:08.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:09:08.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.797336
2026-02-14T21:09:08.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:09:08.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:09:08.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:09:08.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:09:08.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:09:08.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:08:52', tmtdew=8.09, humidity=57.29, cloud=0.0, wind=36.65, temperature=10.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:08:52', seeing=2.77, atlas_timestamp='2026-02-14T19:08:09.830', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00575000000000081, -0.008250000000000313, 0.004749999999999588, 0.00849999999999973, -0.027499999999999858, -0.0037499999999983658, 0.019000000000000128, -0.003750000000000142, -0.0005000000000006111, -0.036999999999999034, -0.0027500000000006963, -0.05000000000000071, 0.08149999999999835, 0.015249999999999986, -0.027000000000001023, -0.03900000000000148, 0.00274999999999892, 0.0024999999999995026, -0.026000000000001577, -0.02925000000000111, 0.045999999999999375, 0.04274999999999807, -0.0072499999999990905, -0.032249999999999446, 0.031000000000000583, 0.05150000000000077, 0.0007500000000000284, -0.018499999999999517, 0.027000000000001023, 0.03950000000000031, 1.7763568394002505e-15, 0.012000000000000455, 0.012749999999998707], zp_timestamp='2026-02-14T19:06:00')
2026-02-14T21:09:08.493 [DEBUG] [Thread-192219] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:09:08.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-14T21:09:08.586 [DEBUG] [Thread-192222] [transport.py] [_log()] starting thread (client mode): 0xa57d61d0
2026-02-14T21:09:08.586 [DEBUG] [Thread-192222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:09:08.600 [DEBUG] [Thread-192222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:09:08.600 [INFO] [Thread-192222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:09:08.608 [DEBUG] [Thread-192222] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:09:08.608 [DEBUG] [Thread-192222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:09:08.608 [DEBUG] [Thread-192222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:09:08.608 [DEBUG] [Thread-192222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:09:08.608 [DEBUG] [Thread-192222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:09:08.608 [DEBUG] [Thread-192222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:09:08.608 [DEBUG] [Thread-192222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:09:08.608 [DEBUG] [Thread-192222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:09:08.608 [DEBUG] [Thread-192222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:09:08.608 [DEBUG] [Thread-192222] [transport.py] [_log()] client lang: <none>
2026-02-14T21:09:08.608 [DEBUG] [Thread-192222] [transport.py] [_log()] server lang: <none>
2026-02-14T21:09:08.608 [DEBUG] [Thread-192222] [transport.py] [_log()] kex follows: False
2026-02-14T21:09:08.608 [DEBUG] [Thread-192222] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:09:08.608 [DEBUG] [Thread-192222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:09:08.608 [DEBUG] [Thread-192222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:09:08.608 [DEBUG] [Thread-192222] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:09:08.608 [DEBUG] [Thread-192222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:09:08.608 [DEBUG] [Thread-192222] [transport.py] [_log()] Compression: none
2026-02-14T21:09:08.608 [DEBUG] [Thread-192222] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:09:08.663 [DEBUG] [Thread-192222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:09:08.663 [DEBUG] [Thread-192222] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:09:08.663 [DEBUG] [Thread-192222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:09:08.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:09:08.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:09:08.720 [DEBUG] [Thread-192222] [transport.py] [_log()] userauth is OK
2026-02-14T21:09:08.720 [DEBUG] [Thread-192222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:09:08.721 [DEBUG] [Thread-192222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:09:08.721 [DEBUG] [Thread-192222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:09:08.721 [DEBUG] [Thread-192222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:09:08.741 [INFO] [Thread-192222] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:09:08.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-14T21:09:08.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:09:09.580 [DEBUG] [Thread-192222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:09:09.580 [DEBUG] [Thread-192222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:09:09.627 [DEBUG] [Thread-192222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:09:09.628 [DEBUG] [Thread-192222] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:09:09.636 [DEBUG] [Thread-192222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:09:09.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:09: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-14T21:09:09.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:09:09.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:09:09.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:09:09.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:09:09.669 [DEBUG] [Thread-192222] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:09:11.805 [DEBUG] [Thread-192224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:09:26.846 [DEBUG] [Thread-192225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:09:28.605 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:09:39.394 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:09:39.395 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:09:39.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:09:39.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:09:39.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-14T21:09:41.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 9, 27), 8.07, 57.34, 0.0, 33.56, 10.48, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:09:41.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:09:27
2026-02-14T21:09:41.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:09:41.874 [DEBUG] [Thread-192226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:09:42.031 [DEBUG] [Thread-192227] [transport.py] [_log()] starting thread (client mode): 0xa57d42e0
2026-02-14T21:09:42.032 [DEBUG] [Thread-192227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:09:42.050 [DEBUG] [Thread-192227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:09:42.050 [INFO] [Thread-192227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:09:42.054 [DEBUG] [Thread-192227] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:09:42.054 [DEBUG] [Thread-192227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:09:42.054 [DEBUG] [Thread-192227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:09:42.054 [DEBUG] [Thread-192227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:09:42.054 [DEBUG] [Thread-192227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:09:42.054 [DEBUG] [Thread-192227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:09:42.054 [DEBUG] [Thread-192227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:09:42.054 [DEBUG] [Thread-192227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:09:42.054 [DEBUG] [Thread-192227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:09:42.054 [DEBUG] [Thread-192227] [transport.py] [_log()] client lang: <none>
2026-02-14T21:09:42.054 [DEBUG] [Thread-192227] [transport.py] [_log()] server lang: <none>
2026-02-14T21:09:42.054 [DEBUG] [Thread-192227] [transport.py] [_log()] kex follows: False
2026-02-14T21:09:42.054 [DEBUG] [Thread-192227] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:09:42.054 [DEBUG] [Thread-192227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:09:42.054 [DEBUG] [Thread-192227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:09:42.054 [DEBUG] [Thread-192227] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:09:42.054 [DEBUG] [Thread-192227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:09:42.055 [DEBUG] [Thread-192227] [transport.py] [_log()] Compression: none
2026-02-14T21:09:42.055 [DEBUG] [Thread-192227] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:09:42.075 [DEBUG] [Thread-192227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:09:42.075 [DEBUG] [Thread-192227] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:09:42.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:09:42.076 [DEBUG] [Thread-192227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:09:42.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:09:42.077 [DEBUG] [Thread-192227] [transport.py] [_log()] userauth is OK
2026-02-14T21:09:42.077 [DEBUG] [Thread-192227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:09:42.077 [DEBUG] [Thread-192227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:09:42.077 [DEBUG] [Thread-192227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:09:42.077 [DEBUG] [Thread-192227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:09:42.092 [INFO] [Thread-192227] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:09:42.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:09:42.756 [DEBUG] [Thread-192227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:09:42.756 [DEBUG] [Thread-192227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:09:42.756 [DEBUG] [Thread-192227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:09:42.797 [DEBUG] [Thread-192227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:09:42.797 [DEBUG] [Thread-192227] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:09:42.799 [DEBUG] [Thread-192227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:09:42.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:09:42.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:09:42.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:09:42.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:09:42.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:09:42.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:09:42.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:09:42.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:09:42.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:09:42.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.798030 -999.00  +10.40  21.02     62   +3.50 1 1 1 1 1     0    0 6.12 -36.11 ZNESW 20.6 21.0 163.3 37.4 10.8 -25.4 10.8 -24.4 10.5 -23.4 10.8 -24.4
2026-02-14T21:09:42.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:09:42.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:09:42.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.798030
2026-02-14T21:09:42.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:09:42.838 [DEBUG] [Thread-192227] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:09:42.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:09:42.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:09:42.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:09:42.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:09:42.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:09:27', tmtdew=8.07, humidity=57.34, cloud=0.0, wind=33.56, temperature=10.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:09:27', seeing=3.89, atlas_timestamp='2026-02-14T19:09:09.792', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00575000000000081, -0.008250000000000313, 0.004749999999999588, 0.00849999999999973, -0.027499999999999858, -0.0037499999999983658, 0.019000000000000128, -0.003750000000000142, -0.0005000000000006111, -0.036999999999999034, -0.0027500000000006963, -0.05000000000000071, 0.08149999999999835, 0.015249999999999986, -0.027000000000001023, -0.03900000000000148, 0.00274999999999892, 0.0024999999999995026, -0.026000000000001577, -0.02925000000000111, 0.045999999999999375, 0.04274999999999807, -0.0072499999999990905, -0.032249999999999446, 0.031000000000000583, 0.05150000000000077, 0.0007500000000000284, -0.018499999999999517, 0.027000000000001023, 0.03950000000000031, 1.7763568394002505e-15, 0.012000000000000455, 0.012749999999998707], zp_timestamp='2026-02-14T19:06:00')
2026-02-14T21:09:42.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-14T21:09:42.931 [DEBUG] [Thread-192230] [transport.py] [_log()] starting thread (client mode): 0xa57d4c40
2026-02-14T21:09:42.932 [DEBUG] [Thread-192230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:09:42.952 [DEBUG] [Thread-192230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:09:42.952 [INFO] [Thread-192230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:09:42.959 [DEBUG] [Thread-192230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:09:42.959 [DEBUG] [Thread-192230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:09:42.959 [DEBUG] [Thread-192230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:09:42.959 [DEBUG] [Thread-192230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:09:42.959 [DEBUG] [Thread-192230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:09:42.959 [DEBUG] [Thread-192230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:09:42.959 [DEBUG] [Thread-192230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:09:42.959 [DEBUG] [Thread-192230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:09:42.959 [DEBUG] [Thread-192230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:09:42.960 [DEBUG] [Thread-192230] [transport.py] [_log()] client lang: <none>
2026-02-14T21:09:42.960 [DEBUG] [Thread-192230] [transport.py] [_log()] server lang: <none>
2026-02-14T21:09:42.960 [DEBUG] [Thread-192230] [transport.py] [_log()] kex follows: False
2026-02-14T21:09:42.960 [DEBUG] [Thread-192230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:09:42.960 [DEBUG] [Thread-192230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:09:42.960 [DEBUG] [Thread-192230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:09:42.960 [DEBUG] [Thread-192230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:09:42.960 [DEBUG] [Thread-192230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:09:42.960 [DEBUG] [Thread-192230] [transport.py] [_log()] Compression: none
2026-02-14T21:09:42.960 [DEBUG] [Thread-192230] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:09:43.015 [DEBUG] [Thread-192230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:09:43.016 [DEBUG] [Thread-192230] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:09:43.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:09:43.016 [DEBUG] [Thread-192230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:09:43.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:09:43.072 [DEBUG] [Thread-192230] [transport.py] [_log()] userauth is OK
2026-02-14T21:09:43.072 [DEBUG] [Thread-192230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:09:43.072 [DEBUG] [Thread-192230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:09:43.072 [DEBUG] [Thread-192230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:09:43.072 [DEBUG] [Thread-192230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:09:43.088 [INFO] [Thread-192230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:09:43.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-14T21:09:43.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:09:43.900 [DEBUG] [Thread-192230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:09:43.900 [DEBUG] [Thread-192230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:09:43.948 [DEBUG] [Thread-192230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:09:43.948 [DEBUG] [Thread-192230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:09:43.956 [DEBUG] [Thread-192230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:09:43.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:09:43.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-14T21:09:43.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:09:43.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:09:43.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:09:43.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:09:43.988 [DEBUG] [Thread-192230] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:09:50.629 [DEBUG] [Thread-192232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:09:56.901 [DEBUG] [Thread-192233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:10:11.942 [DEBUG] [Thread-192234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:10:13.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:10:13.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:10:13.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-14T21:10:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 10, 3), 8.08, 57.32, 0.0, 34.69, 10.48, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:10:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:10:03
2026-02-14T21:10:16.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:10:16.554 [DEBUG] [Thread-192235] [transport.py] [_log()] starting thread (client mode): 0xa57d7d00
2026-02-14T21:10:16.554 [DEBUG] [Thread-192235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:10:16.573 [DEBUG] [Thread-192235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:10:16.573 [INFO] [Thread-192235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:10:16.576 [DEBUG] [Thread-192235] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:10:16.576 [DEBUG] [Thread-192235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:10:16.576 [DEBUG] [Thread-192235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:10:16.576 [DEBUG] [Thread-192235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:10:16.576 [DEBUG] [Thread-192235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:10:16.576 [DEBUG] [Thread-192235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:10:16.576 [DEBUG] [Thread-192235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:10:16.576 [DEBUG] [Thread-192235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:10:16.576 [DEBUG] [Thread-192235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:10:16.576 [DEBUG] [Thread-192235] [transport.py] [_log()] client lang: <none>
2026-02-14T21:10:16.576 [DEBUG] [Thread-192235] [transport.py] [_log()] server lang: <none>
2026-02-14T21:10:16.576 [DEBUG] [Thread-192235] [transport.py] [_log()] kex follows: False
2026-02-14T21:10:16.576 [DEBUG] [Thread-192235] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:10:16.576 [DEBUG] [Thread-192235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:10:16.576 [DEBUG] [Thread-192235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:10:16.576 [DEBUG] [Thread-192235] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:10:16.576 [DEBUG] [Thread-192235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:10:16.576 [DEBUG] [Thread-192235] [transport.py] [_log()] Compression: none
2026-02-14T21:10:16.576 [DEBUG] [Thread-192235] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:10:16.590 [DEBUG] [Thread-192235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:10:16.590 [DEBUG] [Thread-192235] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:10:16.590 [DEBUG] [Thread-192235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:10:16.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:10:16.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:10:16.591 [DEBUG] [Thread-192235] [transport.py] [_log()] userauth is OK
2026-02-14T21:10:16.591 [DEBUG] [Thread-192235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:10:16.591 [DEBUG] [Thread-192235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:10:16.591 [DEBUG] [Thread-192235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:10:16.591 [DEBUG] [Thread-192235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:10:16.604 [INFO] [Thread-192235] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:10:16.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:10:18.162 [DEBUG] [Thread-192235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:10:18.162 [DEBUG] [Thread-192235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:10:18.162 [DEBUG] [Thread-192235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:10:18.202 [DEBUG] [Thread-192235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:10:18.202 [DEBUG] [Thread-192235] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:10:18.205 [DEBUG] [Thread-192235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:10:18.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:10:18.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:10:18.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:10:18.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:10:18.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:10:18.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:10:18.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:10:18.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:10:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:10:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.798377 -999.00  +10.40  25.31     62   +3.50 1 1 1 1 1     0    0 6.18 -40.39 ZNESW 27.2 25.3 155.0 30.7 10.8 -25.5 10.7 -24.3 10.5 -23.4 10.9 -24.6
2026-02-14T21:10:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:10:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:10:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.798377
2026-02-14T21:10:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:10:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:10:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:10:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:10:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:10:18.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:10:03', tmtdew=8.08, humidity=57.32, cloud=0.0, wind=34.69, temperature=10.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:10:03', seeing=3.36, atlas_timestamp='2026-02-14T19:09:39.773', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00575000000000081, -0.008250000000000313, 0.004749999999999588, 0.00849999999999973, -0.027499999999999858, -0.0037499999999983658, 0.019000000000000128, -0.003750000000000142, -0.0005000000000006111, -0.036999999999999034, -0.0027500000000006963, -0.05000000000000071, 0.08149999999999835, 0.015249999999999986, -0.027000000000001023, -0.03900000000000148, 0.00274999999999892, 0.0024999999999995026, -0.026000000000001577, -0.02925000000000111, 0.045999999999999375, 0.04274999999999807, -0.0072499999999990905, -0.032249999999999446, 0.031000000000000583, 0.05150000000000077, 0.0007500000000000284, -0.018499999999999517, 0.027000000000001023, 0.03950000000000031, 1.7763568394002505e-15, 0.012000000000000455, 0.012749999999998707], zp_timestamp='2026-02-14T19:06:00')
2026-02-14T21:10:18.237 [DEBUG] [Thread-192235] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:10:18.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-14T21:10:18.323 [DEBUG] [Thread-192238] [transport.py] [_log()] starting thread (client mode): 0xa57d4a90
2026-02-14T21:10:18.323 [DEBUG] [Thread-192238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:10:18.337 [DEBUG] [Thread-192238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:10:18.337 [INFO] [Thread-192238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:10:18.345 [DEBUG] [Thread-192238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:10:18.345 [DEBUG] [Thread-192238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:10:18.345 [DEBUG] [Thread-192238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:10:18.345 [DEBUG] [Thread-192238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:10:18.345 [DEBUG] [Thread-192238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:10:18.345 [DEBUG] [Thread-192238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:10:18.345 [DEBUG] [Thread-192238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:10:18.345 [DEBUG] [Thread-192238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:10:18.345 [DEBUG] [Thread-192238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:10:18.345 [DEBUG] [Thread-192238] [transport.py] [_log()] client lang: <none>
2026-02-14T21:10:18.345 [DEBUG] [Thread-192238] [transport.py] [_log()] server lang: <none>
2026-02-14T21:10:18.345 [DEBUG] [Thread-192238] [transport.py] [_log()] kex follows: False
2026-02-14T21:10:18.345 [DEBUG] [Thread-192238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:10:18.345 [DEBUG] [Thread-192238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:10:18.345 [DEBUG] [Thread-192238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:10:18.345 [DEBUG] [Thread-192238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:10:18.345 [DEBUG] [Thread-192238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:10:18.345 [DEBUG] [Thread-192238] [transport.py] [_log()] Compression: none
2026-02-14T21:10:18.345 [DEBUG] [Thread-192238] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:10:18.406 [DEBUG] [Thread-192238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:10:18.406 [DEBUG] [Thread-192238] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:10:18.407 [DEBUG] [Thread-192238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:10:18.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:10:18.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:10:18.464 [DEBUG] [Thread-192238] [transport.py] [_log()] userauth is OK
2026-02-14T21:10:18.464 [DEBUG] [Thread-192238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:10:18.464 [DEBUG] [Thread-192238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:10:18.464 [DEBUG] [Thread-192238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:10:18.464 [DEBUG] [Thread-192238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:10:18.478 [INFO] [Thread-192238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:10:18.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-14T21:10:18.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:10:19.308 [DEBUG] [Thread-192238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:10:19.309 [DEBUG] [Thread-192238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:10:19.357 [DEBUG] [Thread-192238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:10:19.357 [DEBUG] [Thread-192238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:10:19.365 [DEBUG] [Thread-192238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:10:19.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:10:19.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-14T21:10:19.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:10:19.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:10:19.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:10:19.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:10:19.397 [DEBUG] [Thread-192238] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:10:26.967 [DEBUG] [Thread-192240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:10:39.596 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:10:39.596 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:10:42.002 [DEBUG] [Thread-192241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:10:49.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:10:49.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:10:49.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T21:10:50.934 [DEBUG] [Thread-192242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:10:51.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 10, 38), 8.19, 56.87, 0.0, 38.49, 10.69, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:10:51.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:10:38
2026-02-14T21:10:51.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:10:52.155 [DEBUG] [Thread-192243] [transport.py] [_log()] starting thread (client mode): 0xa57d49d0
2026-02-14T21:10:52.155 [DEBUG] [Thread-192243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:10:52.171 [DEBUG] [Thread-192243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:10:52.171 [INFO] [Thread-192243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:10:52.175 [DEBUG] [Thread-192243] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:10:52.175 [DEBUG] [Thread-192243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:10:52.175 [DEBUG] [Thread-192243] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:10:52.175 [DEBUG] [Thread-192243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:10:52.175 [DEBUG] [Thread-192243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:10:52.175 [DEBUG] [Thread-192243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:10:52.175 [DEBUG] [Thread-192243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:10:52.175 [DEBUG] [Thread-192243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:10:52.175 [DEBUG] [Thread-192243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:10:52.175 [DEBUG] [Thread-192243] [transport.py] [_log()] client lang: <none>
2026-02-14T21:10:52.175 [DEBUG] [Thread-192243] [transport.py] [_log()] server lang: <none>
2026-02-14T21:10:52.175 [DEBUG] [Thread-192243] [transport.py] [_log()] kex follows: False
2026-02-14T21:10:52.175 [DEBUG] [Thread-192243] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:10:52.176 [DEBUG] [Thread-192243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:10:52.176 [DEBUG] [Thread-192243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:10:52.176 [DEBUG] [Thread-192243] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:10:52.176 [DEBUG] [Thread-192243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:10:52.176 [DEBUG] [Thread-192243] [transport.py] [_log()] Compression: none
2026-02-14T21:10:52.176 [DEBUG] [Thread-192243] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:10:52.200 [DEBUG] [Thread-192243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:10:52.200 [DEBUG] [Thread-192243] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:10:52.200 [DEBUG] [Thread-192243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:10:52.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:10:52.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:10:52.245 [DEBUG] [Thread-192243] [transport.py] [_log()] userauth is OK
2026-02-14T21:10:52.245 [DEBUG] [Thread-192243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:10:52.245 [DEBUG] [Thread-192243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:10:52.245 [DEBUG] [Thread-192243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:10:52.245 [DEBUG] [Thread-192243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:10:52.262 [INFO] [Thread-192243] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:10:52.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:10:53.179 [DEBUG] [Thread-192243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:10:53.179 [DEBUG] [Thread-192243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:10:53.180 [DEBUG] [Thread-192243] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:10:53.221 [DEBUG] [Thread-192243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:10:53.221 [DEBUG] [Thread-192243] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:10:53.223 [DEBUG] [Thread-192243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:10:53.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:10:53.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:10:53.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:10:53.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:10:53.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:10:53.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:10:53.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:10:53.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:10:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:10:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.798724 -999.00  +10.30  26.14     62   +3.50 1 1 1 1 1     0    0 6.06 -37.42 ZNESW 26.8 26.1 158.2 34.5 10.8 -25.3 10.7 -24.3 10.5 -23.2 10.8 -24.5
2026-02-14T21:10:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:10:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:10:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.798724
2026-02-14T21:10:53.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:10:53.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:10:53.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:10:53.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:10:53.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:10:53.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:10:38', tmtdew=8.19, humidity=56.87, cloud=0.0, wind=38.49, temperature=10.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:10:38', seeing=2.92, atlas_timestamp='2026-02-14T19:10:09.754', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00575000000000081, -0.008250000000000313, 0.004749999999999588, 0.00849999999999973, -0.027499999999999858, -0.0037499999999983658, 0.019000000000000128, -0.003750000000000142, -0.0005000000000006111, -0.036999999999999034, -0.0027500000000006963, -0.05000000000000071, 0.08149999999999835, 0.015249999999999986, -0.027000000000001023, -0.03900000000000148, 0.00274999999999892, 0.0024999999999995026, -0.026000000000001577, -0.02925000000000111, 0.045999999999999375, 0.04274999999999807, -0.0072499999999990905, -0.032249999999999446, 0.031000000000000583, 0.05150000000000077, 0.0007500000000000284, -0.018499999999999517, 0.027000000000001023, 0.03950000000000031, 1.7763568394002505e-15, 0.012000000000000455, 0.012749999999998707], zp_timestamp='2026-02-14T19:06:00')
2026-02-14T21:10:53.262 [DEBUG] [Thread-192243] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:10:53.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-14T21:10:53.351 [DEBUG] [Thread-192246] [transport.py] [_log()] starting thread (client mode): 0xa57c1f30
2026-02-14T21:10:53.351 [DEBUG] [Thread-192246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:10:53.366 [DEBUG] [Thread-192246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:10:53.366 [INFO] [Thread-192246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:10:53.373 [DEBUG] [Thread-192246] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:10:53.374 [DEBUG] [Thread-192246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:10:53.374 [DEBUG] [Thread-192246] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:10:53.374 [DEBUG] [Thread-192246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:10:53.374 [DEBUG] [Thread-192246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:10:53.374 [DEBUG] [Thread-192246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:10:53.374 [DEBUG] [Thread-192246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:10:53.374 [DEBUG] [Thread-192246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:10:53.374 [DEBUG] [Thread-192246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:10:53.374 [DEBUG] [Thread-192246] [transport.py] [_log()] client lang: <none>
2026-02-14T21:10:53.374 [DEBUG] [Thread-192246] [transport.py] [_log()] server lang: <none>
2026-02-14T21:10:53.374 [DEBUG] [Thread-192246] [transport.py] [_log()] kex follows: False
2026-02-14T21:10:53.374 [DEBUG] [Thread-192246] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:10:53.374 [DEBUG] [Thread-192246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:10:53.374 [DEBUG] [Thread-192246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:10:53.374 [DEBUG] [Thread-192246] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:10:53.374 [DEBUG] [Thread-192246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:10:53.374 [DEBUG] [Thread-192246] [transport.py] [_log()] Compression: none
2026-02-14T21:10:53.374 [DEBUG] [Thread-192246] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:10:53.431 [DEBUG] [Thread-192246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:10:53.432 [DEBUG] [Thread-192246] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:10:53.432 [DEBUG] [Thread-192246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:10:53.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:10:53.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:10:53.488 [DEBUG] [Thread-192246] [transport.py] [_log()] userauth is OK
2026-02-14T21:10:53.488 [DEBUG] [Thread-192246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:10:53.488 [DEBUG] [Thread-192246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:10:53.488 [DEBUG] [Thread-192246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:10:53.488 [DEBUG] [Thread-192246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:10:53.502 [INFO] [Thread-192246] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:10:53.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-14T21:10:53.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:10:54.324 [DEBUG] [Thread-192246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:10:54.324 [DEBUG] [Thread-192246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:10:54.371 [DEBUG] [Thread-192246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:10:54.372 [DEBUG] [Thread-192246] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:10:54.380 [DEBUG] [Thread-192246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:10:54.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:10:54.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:10: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') -> 00000000
2026-02-14T21:10:54.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:10:54.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:10:54.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:10:54.411 [DEBUG] [Thread-192246] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:10:57.024 [DEBUG] [Thread-192248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:11:02.080 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:11:12.057 [DEBUG] [Thread-192249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:11:24.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:11:24.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:11:24.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-14T21:11:26.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 11, 13), 7.99, 57.45, 0.0, 40.6, 10.41, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:11:26.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:11:13
2026-02-14T21:11:26.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:11:26.866 [DEBUG] [Thread-192250] [transport.py] [_log()] starting thread (client mode): 0xa2d6fbe0
2026-02-14T21:11:26.866 [DEBUG] [Thread-192250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:11:26.879 [DEBUG] [Thread-192250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:11:26.879 [INFO] [Thread-192250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:11:26.882 [DEBUG] [Thread-192250] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:11:26.883 [DEBUG] [Thread-192250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:11:26.883 [DEBUG] [Thread-192250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:11:26.883 [DEBUG] [Thread-192250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:11:26.883 [DEBUG] [Thread-192250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:11:26.883 [DEBUG] [Thread-192250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:11:26.883 [DEBUG] [Thread-192250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:11:26.883 [DEBUG] [Thread-192250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:11:26.883 [DEBUG] [Thread-192250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:11:26.883 [DEBUG] [Thread-192250] [transport.py] [_log()] client lang: <none>
2026-02-14T21:11:26.883 [DEBUG] [Thread-192250] [transport.py] [_log()] server lang: <none>
2026-02-14T21:11:26.883 [DEBUG] [Thread-192250] [transport.py] [_log()] kex follows: False
2026-02-14T21:11:26.883 [DEBUG] [Thread-192250] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:11:26.883 [DEBUG] [Thread-192250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:11:26.883 [DEBUG] [Thread-192250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:11:26.883 [DEBUG] [Thread-192250] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:11:26.884 [DEBUG] [Thread-192250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:11:26.884 [DEBUG] [Thread-192250] [transport.py] [_log()] Compression: none
2026-02-14T21:11:26.884 [DEBUG] [Thread-192250] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:11:26.906 [DEBUG] [Thread-192250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:11:26.907 [DEBUG] [Thread-192250] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:11:26.907 [DEBUG] [Thread-192250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:11:26.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:11:26.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:11:26.949 [DEBUG] [Thread-192250] [transport.py] [_log()] userauth is OK
2026-02-14T21:11:26.949 [DEBUG] [Thread-192250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:11:26.949 [DEBUG] [Thread-192250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:11:26.949 [DEBUG] [Thread-192250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:11:26.949 [DEBUG] [Thread-192250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:11:26.977 [INFO] [Thread-192250] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:11:26.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:11:27.085 [DEBUG] [Thread-192252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:11:27.630 [DEBUG] [Thread-192250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:11:27.630 [DEBUG] [Thread-192250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:11:27.630 [DEBUG] [Thread-192250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:11:27.671 [DEBUG] [Thread-192250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:11:27.671 [DEBUG] [Thread-192250] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:11:27.673 [DEBUG] [Thread-192250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:11:27.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:11:27.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:11:27.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:11:27.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:11:27.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:11:27.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:11:27.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:11:27.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:11:27.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:11:27.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.799072 -999.00  +10.30  28.10     62   +3.50 1 1 1 1 1     0    0 5.87 -41.57 ZNESW 28.7 28.1 146.8 34.8 10.8 -25.4 10.7 -24.3 10.4 -23.3 10.8 -24.6
2026-02-14T21:11:27.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:11:27.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:11:27.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.799072
2026-02-14T21:11:27.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:11:27.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:11:27.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:11:27.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:11:27.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:11:27.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:11:13', tmtdew=7.99, humidity=57.45, cloud=0.0, wind=40.6, temperature=10.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:11:13', seeing=3.32, atlas_timestamp='2026-02-14T19:10:39.821', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, -0.01574999999999882, 0.006249999999999645, -0.021500000000001407, 0.00849999999999973, 0.01025000000000098, -0.04800000000000004, -0.03575000000000017, 0.01649999999999885, -0.036999999999999034, -0.011750000000001037, -0.0259999999999998, 0.08000000000000007, 0.02024999999999899, -0.04400000000000048, -0.03300000000000125, -0.011250000000000426, 0.0024999999999995026, -0.03350000000000186, -0.04075000000000095, 0.05499999999999794, 0.05174999999999841, 0.011250000000000426, -0.032249999999999446, 0.022999999999999687, 0.03850000000000087, 0.0027500000000006963, -0.011999999999998678, 0.04400000000000048, 0.008000000000000895, 0.004000000000001336, -0.02099999999999902, -0.0012500000000006395], zp_timestamp='2026-02-14T19:09:00')
2026-02-14T21:11:27.697 [DEBUG] [Thread-192250] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:11: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-14T21:11:27.785 [DEBUG] [Thread-192254] [transport.py] [_log()] starting thread (client mode): 0xa57d67a0
2026-02-14T21:11:27.785 [DEBUG] [Thread-192254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:11:27.800 [DEBUG] [Thread-192254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:11:27.800 [INFO] [Thread-192254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:11:27.807 [DEBUG] [Thread-192254] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:11:27.807 [DEBUG] [Thread-192254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:11:27.807 [DEBUG] [Thread-192254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:11:27.807 [DEBUG] [Thread-192254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:11:27.807 [DEBUG] [Thread-192254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:11:27.807 [DEBUG] [Thread-192254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:11:27.808 [DEBUG] [Thread-192254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:11:27.808 [DEBUG] [Thread-192254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:11:27.808 [DEBUG] [Thread-192254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:11:27.808 [DEBUG] [Thread-192254] [transport.py] [_log()] client lang: <none>
2026-02-14T21:11:27.808 [DEBUG] [Thread-192254] [transport.py] [_log()] server lang: <none>
2026-02-14T21:11:27.808 [DEBUG] [Thread-192254] [transport.py] [_log()] kex follows: False
2026-02-14T21:11:27.808 [DEBUG] [Thread-192254] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:11:27.808 [DEBUG] [Thread-192254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:11:27.808 [DEBUG] [Thread-192254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:11:27.808 [DEBUG] [Thread-192254] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:11:27.808 [DEBUG] [Thread-192254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:11:27.808 [DEBUG] [Thread-192254] [transport.py] [_log()] Compression: none
2026-02-14T21:11:27.808 [DEBUG] [Thread-192254] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:11:27.867 [DEBUG] [Thread-192254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:11:27.867 [DEBUG] [Thread-192254] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:11:27.867 [DEBUG] [Thread-192254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:11:27.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:11:27.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:11:27.924 [DEBUG] [Thread-192254] [transport.py] [_log()] userauth is OK
2026-02-14T21:11:27.924 [DEBUG] [Thread-192254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:11:27.924 [DEBUG] [Thread-192254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:11:27.924 [DEBUG] [Thread-192254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:11:27.924 [DEBUG] [Thread-192254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:11:27.938 [INFO] [Thread-192254] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:11:27.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-14T21:11:27.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:11:28.781 [DEBUG] [Thread-192254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:11:28.781 [DEBUG] [Thread-192254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:11:28.829 [DEBUG] [Thread-192254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:11:28.829 [DEBUG] [Thread-192254] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:11:28.837 [DEBUG] [Thread-192254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:11:28.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:11:28.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-14T21:11:28.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:11:28.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:11:28.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:11:28.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:11:28.869 [DEBUG] [Thread-192254] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:11:39.795 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:11:39.796 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:11:42.112 [DEBUG] [Thread-192256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:11:51.258 [DEBUG] [Thread-192257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:11:57.259 [DEBUG] [Thread-192258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:11:58.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:11:58.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:11:58.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-14T21:12:00.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 11, 48), 7.92, 57.54, 0.0, 40.37, 10.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:12:00.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:11:48
2026-02-14T21:12:01.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:12:01.301 [DEBUG] [Thread-192259] [transport.py] [_log()] starting thread (client mode): 0xa2d78640
2026-02-14T21:12:01.301 [DEBUG] [Thread-192259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:12:01.321 [DEBUG] [Thread-192259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:12:01.321 [INFO] [Thread-192259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:12:01.324 [DEBUG] [Thread-192259] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:12:01.325 [DEBUG] [Thread-192259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:12:01.325 [DEBUG] [Thread-192259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:12:01.325 [DEBUG] [Thread-192259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:12:01.325 [DEBUG] [Thread-192259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:12:01.325 [DEBUG] [Thread-192259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:12:01.325 [DEBUG] [Thread-192259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:12:01.325 [DEBUG] [Thread-192259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:12:01.325 [DEBUG] [Thread-192259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:12:01.325 [DEBUG] [Thread-192259] [transport.py] [_log()] client lang: <none>
2026-02-14T21:12:01.325 [DEBUG] [Thread-192259] [transport.py] [_log()] server lang: <none>
2026-02-14T21:12:01.325 [DEBUG] [Thread-192259] [transport.py] [_log()] kex follows: False
2026-02-14T21:12:01.325 [DEBUG] [Thread-192259] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:12:01.326 [DEBUG] [Thread-192259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:12:01.326 [DEBUG] [Thread-192259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:12:01.326 [DEBUG] [Thread-192259] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:12:01.326 [DEBUG] [Thread-192259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:12:01.326 [DEBUG] [Thread-192259] [transport.py] [_log()] Compression: none
2026-02-14T21:12:01.326 [DEBUG] [Thread-192259] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:12:01.349 [DEBUG] [Thread-192259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:12:01.349 [DEBUG] [Thread-192259] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:12:01.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:12:01.351 [DEBUG] [Thread-192259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:12:01.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:12:01.352 [DEBUG] [Thread-192259] [transport.py] [_log()] userauth is OK
2026-02-14T21:12:01.352 [DEBUG] [Thread-192259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:12:01.352 [DEBUG] [Thread-192259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:12:01.352 [DEBUG] [Thread-192259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:12:01.352 [DEBUG] [Thread-192259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:12:01.387 [INFO] [Thread-192259] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:12:01.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:12:02.001 [DEBUG] [Thread-192259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:12:02.001 [DEBUG] [Thread-192259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:12:02.001 [DEBUG] [Thread-192259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:12:02.042 [DEBUG] [Thread-192259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:12:02.042 [DEBUG] [Thread-192259] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:12:02.044 [DEBUG] [Thread-192259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:12:02.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:12:02.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:12:02.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:12:02.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:12:02.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:12:02.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:12:02.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:12:02.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:12:02.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:12:02.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.799419 -999.00  +10.30  26.74     62   +3.50 1 1 1 1 1     0    0 5.92 -39.31 ZNESW 26.3 26.7 154.0 38.8 10.8 -25.3 10.7 -24.3 10.5 -23.3 10.8 -24.5
2026-02-14T21:12:02.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:12:02.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:12:02.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.799419
2026-02-14T21:12:02.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:12:02.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:12:02.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:12:02.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:12:02.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:12:02.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:11:48', tmtdew=7.92, humidity=57.54, cloud=0.0, wind=40.37, temperature=10.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:11:48', seeing=4.98, atlas_timestamp='2026-02-14T19:11:09.802', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, -0.01574999999999882, 0.006249999999999645, -0.021500000000001407, 0.00849999999999973, 0.01025000000000098, -0.04800000000000004, -0.03575000000000017, 0.01649999999999885, -0.036999999999999034, -0.011750000000001037, -0.0259999999999998, 0.08000000000000007, 0.02024999999999899, -0.04400000000000048, -0.03300000000000125, -0.011250000000000426, 0.0024999999999995026, -0.03350000000000186, -0.04075000000000095, 0.05499999999999794, 0.05174999999999841, 0.011250000000000426, -0.032249999999999446, 0.022999999999999687, 0.03850000000000087, 0.0027500000000006963, -0.011999999999998678, 0.04400000000000048, 0.008000000000000895, 0.004000000000001336, -0.02099999999999902, -0.0012500000000006395], zp_timestamp='2026-02-14T19:09:00')
2026-02-14T21:12:02.069 [DEBUG] [Thread-192259] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:12:02.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-14T21:12:02.164 [DEBUG] [Thread-192262] [transport.py] [_log()] starting thread (client mode): 0xa2d79b40
2026-02-14T21:12:02.164 [DEBUG] [Thread-192262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:12:02.180 [DEBUG] [Thread-192262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:12:02.180 [INFO] [Thread-192262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:12:02.188 [DEBUG] [Thread-192262] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:12:02.188 [DEBUG] [Thread-192262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:12:02.188 [DEBUG] [Thread-192262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:12:02.188 [DEBUG] [Thread-192262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:12:02.188 [DEBUG] [Thread-192262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:12:02.188 [DEBUG] [Thread-192262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:12:02.188 [DEBUG] [Thread-192262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:12:02.188 [DEBUG] [Thread-192262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:12:02.189 [DEBUG] [Thread-192262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:12:02.189 [DEBUG] [Thread-192262] [transport.py] [_log()] client lang: <none>
2026-02-14T21:12:02.189 [DEBUG] [Thread-192262] [transport.py] [_log()] server lang: <none>
2026-02-14T21:12:02.189 [DEBUG] [Thread-192262] [transport.py] [_log()] kex follows: False
2026-02-14T21:12:02.189 [DEBUG] [Thread-192262] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:12:02.189 [DEBUG] [Thread-192262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:12:02.189 [DEBUG] [Thread-192262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:12:02.189 [DEBUG] [Thread-192262] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:12:02.189 [DEBUG] [Thread-192262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:12:02.189 [DEBUG] [Thread-192262] [transport.py] [_log()] Compression: none
2026-02-14T21:12:02.190 [DEBUG] [Thread-192262] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:12:02.245 [DEBUG] [Thread-192262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:12:02.246 [DEBUG] [Thread-192262] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:12:02.247 [DEBUG] [Thread-192262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:12:02.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:12:02.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:12:02.300 [DEBUG] [Thread-192262] [transport.py] [_log()] userauth is OK
2026-02-14T21:12:02.301 [DEBUG] [Thread-192262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:12:02.301 [DEBUG] [Thread-192262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:12:02.301 [DEBUG] [Thread-192262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:12:02.301 [DEBUG] [Thread-192262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:12:02.323 [INFO] [Thread-192262] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:12:02.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-14T21:12:02.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:12:03.167 [DEBUG] [Thread-192262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:12:03.167 [DEBUG] [Thread-192262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:12:03.215 [DEBUG] [Thread-192262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:12:03.215 [DEBUG] [Thread-192262] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:12:03.224 [DEBUG] [Thread-192262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:12:03.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:12:03.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-14T21:12:03.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-14T21:12:03.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:12:03.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:12:03.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:12:03.259 [DEBUG] [Thread-192262] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:12:10.940 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:12:12.286 [DEBUG] [Thread-192264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:12:14.098 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:12:19.135 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:12:25.511 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:12:27.358 [DEBUG] [Thread-192265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:12:33.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:12:33.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:12:33.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-14T21:12:35.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 12, 23), 7.91, 57.59, 0.0, 38.64, 10.38, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:12:35.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:12:23
2026-02-14T21:12:35.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:12:35.639 [DEBUG] [Thread-192266] [transport.py] [_log()] starting thread (client mode): 0xa2d78d00
2026-02-14T21:12:35.639 [DEBUG] [Thread-192266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:12:35.656 [DEBUG] [Thread-192266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:12:35.656 [INFO] [Thread-192266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:12:35.659 [DEBUG] [Thread-192266] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:12:35.659 [DEBUG] [Thread-192266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:12:35.660 [DEBUG] [Thread-192266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:12:35.660 [DEBUG] [Thread-192266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:12:35.660 [DEBUG] [Thread-192266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:12:35.660 [DEBUG] [Thread-192266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:12:35.660 [DEBUG] [Thread-192266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:12:35.660 [DEBUG] [Thread-192266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:12:35.660 [DEBUG] [Thread-192266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:12:35.660 [DEBUG] [Thread-192266] [transport.py] [_log()] client lang: <none>
2026-02-14T21:12:35.660 [DEBUG] [Thread-192266] [transport.py] [_log()] server lang: <none>
2026-02-14T21:12:35.660 [DEBUG] [Thread-192266] [transport.py] [_log()] kex follows: False
2026-02-14T21:12:35.660 [DEBUG] [Thread-192266] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:12:35.660 [DEBUG] [Thread-192266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:12:35.660 [DEBUG] [Thread-192266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:12:35.660 [DEBUG] [Thread-192266] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:12:35.660 [DEBUG] [Thread-192266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:12:35.660 [DEBUG] [Thread-192266] [transport.py] [_log()] Compression: none
2026-02-14T21:12:35.660 [DEBUG] [Thread-192266] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:12:35.685 [DEBUG] [Thread-192266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:12:35.688 [DEBUG] [Thread-192266] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:12:35.689 [DEBUG] [Thread-192266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:12:35.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:12:35.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:12:35.692 [DEBUG] [Thread-192266] [transport.py] [_log()] userauth is OK
2026-02-14T21:12:35.692 [DEBUG] [Thread-192266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:12:35.692 [DEBUG] [Thread-192266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:12:35.692 [DEBUG] [Thread-192266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:12:35.692 [DEBUG] [Thread-192266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:12:35.710 [INFO] [Thread-192266] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:12:35.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:12:36.123 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:12:36.358 [DEBUG] [Thread-192266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:12:36.358 [DEBUG] [Thread-192266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:12:36.359 [DEBUG] [Thread-192266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:12:36.399 [DEBUG] [Thread-192266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:12:36.399 [DEBUG] [Thread-192266] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:12:36.402 [DEBUG] [Thread-192266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:12:36.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:12:36.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:12:36.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:12:36.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:12:36.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:12:36.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:12:36.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:12:36.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:12:36.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:12:36.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.799766 -999.00  +10.30  27.27     63   +3.50 1 1 1 1 1     0    0 5.96 -38.60 ZNESW 26.5 27.3 160.0 43.3 10.8 -25.4 10.7 -24.3 10.5 -23.2 10.8 -24.6
2026-02-14T21:12:36.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:12:36.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:12:36.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.799766
2026-02-14T21:12:36.429 [DEBUG] [Thread-192266] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:12:36.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:12:36.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:12:36.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:12:36.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:12:36.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:12:36.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:12:23', tmtdew=7.91, humidity=57.59, cloud=0.0, wind=38.64, temperature=10.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:12:23', seeing=4.98, atlas_timestamp='2026-02-14T19:11:39.782', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, -0.01574999999999882, 0.006249999999999645, -0.021500000000001407, 0.00849999999999973, 0.01025000000000098, -0.04800000000000004, -0.03575000000000017, 0.01649999999999885, -0.036999999999999034, -0.011750000000001037, -0.0259999999999998, 0.08000000000000007, 0.02024999999999899, -0.04400000000000048, -0.03300000000000125, -0.011250000000000426, 0.0024999999999995026, -0.03350000000000186, -0.04075000000000095, 0.05499999999999794, 0.05174999999999841, 0.011250000000000426, -0.032249999999999446, 0.022999999999999687, 0.03850000000000087, 0.0027500000000006963, -0.011999999999998678, 0.04400000000000048, 0.008000000000000895, 0.004000000000001336, -0.02099999999999902, -0.0012500000000006395], zp_timestamp='2026-02-14T19:09:00')
2026-02-14T21:12:36.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-14T21:12:36.522 [DEBUG] [Thread-192269] [transport.py] [_log()] starting thread (client mode): 0xa2d6f3a0
2026-02-14T21:12:36.522 [DEBUG] [Thread-192269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:12:36.536 [DEBUG] [Thread-192269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:12:36.536 [INFO] [Thread-192269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:12:36.544 [DEBUG] [Thread-192269] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:12:36.544 [DEBUG] [Thread-192269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:12:36.544 [DEBUG] [Thread-192269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:12:36.544 [DEBUG] [Thread-192269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:12:36.544 [DEBUG] [Thread-192269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:12:36.544 [DEBUG] [Thread-192269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:12:36.544 [DEBUG] [Thread-192269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:12:36.544 [DEBUG] [Thread-192269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:12:36.544 [DEBUG] [Thread-192269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:12:36.544 [DEBUG] [Thread-192269] [transport.py] [_log()] client lang: <none>
2026-02-14T21:12:36.544 [DEBUG] [Thread-192269] [transport.py] [_log()] server lang: <none>
2026-02-14T21:12:36.544 [DEBUG] [Thread-192269] [transport.py] [_log()] kex follows: False
2026-02-14T21:12:36.544 [DEBUG] [Thread-192269] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:12:36.544 [DEBUG] [Thread-192269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:12:36.544 [DEBUG] [Thread-192269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:12:36.544 [DEBUG] [Thread-192269] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:12:36.544 [DEBUG] [Thread-192269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:12:36.544 [DEBUG] [Thread-192269] [transport.py] [_log()] Compression: none
2026-02-14T21:12:36.544 [DEBUG] [Thread-192269] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:12:36.599 [DEBUG] [Thread-192269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:12:36.599 [DEBUG] [Thread-192269] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:12:36.599 [DEBUG] [Thread-192269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:12:36.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:12:36.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:12:36.656 [DEBUG] [Thread-192269] [transport.py] [_log()] userauth is OK
2026-02-14T21:12:36.656 [DEBUG] [Thread-192269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:12:36.656 [DEBUG] [Thread-192269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:12:36.656 [DEBUG] [Thread-192269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:12:36.656 [DEBUG] [Thread-192269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:12:36.674 [INFO] [Thread-192269] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:12: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-14T21:12:36.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:12:37.510 [DEBUG] [Thread-192269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:12:37.512 [DEBUG] [Thread-192269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:12:37.558 [DEBUG] [Thread-192269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:12:37.558 [DEBUG] [Thread-192269] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:12:37.566 [DEBUG] [Thread-192269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:12:37.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:12:37.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-14T21:12:37.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-14T21:12:37.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:12:37.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:12:37.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:12:37.600 [DEBUG] [Thread-192269] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:12:40.015 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:12:40.016 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:12:42.387 [DEBUG] [Thread-192271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:12:43.950 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:12:48.325 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:12:51.495 [DEBUG] [Thread-192272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:12:57.463 [DEBUG] [Thread-192273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:13:07.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:13:07.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:13:07.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-14T21:13:07.767 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:13:09.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 12, 58), 7.92, 58.05, 0.0, 38.06, 10.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:13:09.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:12:58
2026-02-14T21:13:09.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:13:10.010 [DEBUG] [Thread-192274] [transport.py] [_log()] starting thread (client mode): 0xa57c1ed0
2026-02-14T21:13:10.010 [DEBUG] [Thread-192274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:13:10.019 [DEBUG] [Thread-192274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:13:10.019 [INFO] [Thread-192274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:13:10.023 [DEBUG] [Thread-192274] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:13:10.023 [DEBUG] [Thread-192274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:13:10.023 [DEBUG] [Thread-192274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:13:10.023 [DEBUG] [Thread-192274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:13:10.023 [DEBUG] [Thread-192274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:13:10.023 [DEBUG] [Thread-192274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:13:10.023 [DEBUG] [Thread-192274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:13:10.023 [DEBUG] [Thread-192274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:13:10.023 [DEBUG] [Thread-192274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:13:10.023 [DEBUG] [Thread-192274] [transport.py] [_log()] client lang: <none>
2026-02-14T21:13:10.023 [DEBUG] [Thread-192274] [transport.py] [_log()] server lang: <none>
2026-02-14T21:13:10.023 [DEBUG] [Thread-192274] [transport.py] [_log()] kex follows: False
2026-02-14T21:13:10.023 [DEBUG] [Thread-192274] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:13:10.024 [DEBUG] [Thread-192274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:13:10.024 [DEBUG] [Thread-192274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:13:10.024 [DEBUG] [Thread-192274] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:13:10.024 [DEBUG] [Thread-192274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:13:10.024 [DEBUG] [Thread-192274] [transport.py] [_log()] Compression: none
2026-02-14T21:13:10.024 [DEBUG] [Thread-192274] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:13:10.051 [DEBUG] [Thread-192274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:13:10.055 [DEBUG] [Thread-192274] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:13:10.056 [DEBUG] [Thread-192274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:13:10.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:13:10.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:13:10.097 [DEBUG] [Thread-192274] [transport.py] [_log()] userauth is OK
2026-02-14T21:13:10.097 [DEBUG] [Thread-192274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:13:10.097 [DEBUG] [Thread-192274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:13:10.097 [DEBUG] [Thread-192274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:13:10.097 [DEBUG] [Thread-192274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:13:10.131 [INFO] [Thread-192274] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:13:10.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:13:10.942 [DEBUG] [Thread-192274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:13:10.943 [DEBUG] [Thread-192274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:13:10.944 [DEBUG] [Thread-192274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:13:10.983 [DEBUG] [Thread-192274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:13:10.983 [DEBUG] [Thread-192274] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:13:10.987 [DEBUG] [Thread-192274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:13:10.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:13:11.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:13:11.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:13:11.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:13:11.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:13:11.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:13:11.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:13:11.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:13:11.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:13:11.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.800461 -999.00  +10.30  21.64     63   +3.50 1 1 1 1 1     0    0 6.09 -38.30 ZNESW 22.2 21.6 160.6 39.6 10.8 -25.3 10.6 -24.4 10.4 -23.4 10.8 -24.5
2026-02-14T21:13:11.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:13:11.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:13:11.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.800461
2026-02-14T21:13:11.020 [DEBUG] [Thread-192274] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:13:11.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:13:11.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:13:11.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:13:11.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:13:11.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:13:11.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:12:58', tmtdew=7.92, humidity=58.05, cloud=0.0, wind=38.06, temperature=10.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:12:59', seeing=3.37, atlas_timestamp='2026-02-14T19:12:39.830', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, -0.01574999999999882, 0.006249999999999645, -0.021500000000001407, 0.00849999999999973, 0.01025000000000098, -0.04800000000000004, -0.03575000000000017, 0.01649999999999885, -0.036999999999999034, -0.011750000000001037, -0.0259999999999998, 0.08000000000000007, 0.02024999999999899, -0.04400000000000048, -0.03300000000000125, -0.011250000000000426, 0.0024999999999995026, -0.03350000000000186, -0.04075000000000095, 0.05499999999999794, 0.05174999999999841, 0.011250000000000426, -0.032249999999999446, 0.022999999999999687, 0.03850000000000087, 0.0027500000000006963, -0.011999999999998678, 0.04400000000000048, 0.008000000000000895, 0.004000000000001336, -0.02099999999999902, -0.0012500000000006395], zp_timestamp='2026-02-14T19:09:00')
2026-02-14T21:13:11.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-14T21:13:11.123 [DEBUG] [Thread-192277] [transport.py] [_log()] starting thread (client mode): 0xa2d6df90
2026-02-14T21:13:11.123 [DEBUG] [Thread-192277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:13:11.140 [DEBUG] [Thread-192277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:13:11.140 [INFO] [Thread-192277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:13:11.147 [DEBUG] [Thread-192277] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:13:11.147 [DEBUG] [Thread-192277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:13:11.147 [DEBUG] [Thread-192277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:13:11.147 [DEBUG] [Thread-192277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:13:11.147 [DEBUG] [Thread-192277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:13:11.148 [DEBUG] [Thread-192277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:13:11.148 [DEBUG] [Thread-192277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:13:11.148 [DEBUG] [Thread-192277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:13:11.148 [DEBUG] [Thread-192277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:13:11.148 [DEBUG] [Thread-192277] [transport.py] [_log()] client lang: <none>
2026-02-14T21:13:11.148 [DEBUG] [Thread-192277] [transport.py] [_log()] server lang: <none>
2026-02-14T21:13:11.148 [DEBUG] [Thread-192277] [transport.py] [_log()] kex follows: False
2026-02-14T21:13:11.148 [DEBUG] [Thread-192277] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:13:11.148 [DEBUG] [Thread-192277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:13:11.148 [DEBUG] [Thread-192277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:13:11.148 [DEBUG] [Thread-192277] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:13:11.148 [DEBUG] [Thread-192277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:13:11.148 [DEBUG] [Thread-192277] [transport.py] [_log()] Compression: none
2026-02-14T21:13:11.148 [DEBUG] [Thread-192277] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:13:11.204 [DEBUG] [Thread-192277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:13:11.204 [DEBUG] [Thread-192277] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:13:11.205 [DEBUG] [Thread-192277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:13:11.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:13:11.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:13:11.264 [DEBUG] [Thread-192277] [transport.py] [_log()] userauth is OK
2026-02-14T21:13:11.264 [DEBUG] [Thread-192277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:13:11.265 [DEBUG] [Thread-192277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:13:11.265 [DEBUG] [Thread-192277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:13:11.265 [DEBUG] [Thread-192277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:13:11.286 [INFO] [Thread-192277] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:13:11.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-14T21:13:11.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:13:12.149 [DEBUG] [Thread-192277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:13:12.149 [DEBUG] [Thread-192277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:13:12.167 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:13:12.197 [DEBUG] [Thread-192277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:13:12.197 [DEBUG] [Thread-192277] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:13:12.206 [DEBUG] [Thread-192277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:13:12.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:13:12.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-14T21:13:12.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-14T21:13:12.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:13:12.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:13:12.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:13:12.241 [DEBUG] [Thread-192277] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:13:12.490 [DEBUG] [Thread-192279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:13:19.102 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:13:23.483 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:13:27.543 [DEBUG] [Thread-192280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:13:40.228 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:13:40.229 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:13:42.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:13:42.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:13:42.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-14T21:13:42.582 [DEBUG] [Thread-192281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:13:44.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 13, 34), 8.11, 57.17, 0.0, 43.47, 10.59, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:13:44.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:13:34
2026-02-14T21:13:44.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:13:44.642 [DEBUG] [Thread-192282] [transport.py] [_log()] starting thread (client mode): 0xa2d6fc70
2026-02-14T21:13:44.643 [DEBUG] [Thread-192282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:13:44.662 [DEBUG] [Thread-192282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:13:44.663 [INFO] [Thread-192282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:13:44.666 [DEBUG] [Thread-192282] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:13:44.666 [DEBUG] [Thread-192282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:13:44.666 [DEBUG] [Thread-192282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:13:44.666 [DEBUG] [Thread-192282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:13:44.666 [DEBUG] [Thread-192282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:13:44.666 [DEBUG] [Thread-192282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:13:44.666 [DEBUG] [Thread-192282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:13:44.666 [DEBUG] [Thread-192282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:13:44.666 [DEBUG] [Thread-192282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:13:44.666 [DEBUG] [Thread-192282] [transport.py] [_log()] client lang: <none>
2026-02-14T21:13:44.666 [DEBUG] [Thread-192282] [transport.py] [_log()] server lang: <none>
2026-02-14T21:13:44.666 [DEBUG] [Thread-192282] [transport.py] [_log()] kex follows: False
2026-02-14T21:13:44.666 [DEBUG] [Thread-192282] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:13:44.666 [DEBUG] [Thread-192282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:13:44.666 [DEBUG] [Thread-192282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:13:44.666 [DEBUG] [Thread-192282] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:13:44.666 [DEBUG] [Thread-192282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:13:44.666 [DEBUG] [Thread-192282] [transport.py] [_log()] Compression: none
2026-02-14T21:13:44.666 [DEBUG] [Thread-192282] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:13:44.684 [DEBUG] [Thread-192282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:13:44.684 [DEBUG] [Thread-192282] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:13:44.685 [DEBUG] [Thread-192282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:13:44.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:13:44.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:13:44.686 [DEBUG] [Thread-192282] [transport.py] [_log()] userauth is OK
2026-02-14T21:13:44.686 [DEBUG] [Thread-192282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:13:44.686 [DEBUG] [Thread-192282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:13:44.686 [DEBUG] [Thread-192282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:13:44.686 [DEBUG] [Thread-192282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:13:44.702 [INFO] [Thread-192282] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:13:44.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:13:45.353 [DEBUG] [Thread-192282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:13:45.353 [DEBUG] [Thread-192282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:13:45.354 [DEBUG] [Thread-192282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:13:45.394 [DEBUG] [Thread-192282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:13:45.394 [DEBUG] [Thread-192282] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:13:45.396 [DEBUG] [Thread-192282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:13:45.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:13:45.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:13:45.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:13:45.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:13:45.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:13:45.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:13:45.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:13:45.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:13:45.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:13:45.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.800808 -999.00  +10.20  25.32     63   +3.50 1 1 1 1 1     0    0 5.94 -39.49 ZNESW 29.2 25.3 149.2 34.1 10.8 -25.5 10.6 -24.4 10.4 -23.4 10.8 -24.5
2026-02-14T21:13:45.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:13:45.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:13:45.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.800808
2026-02-14T21:13:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:13:45.419 [DEBUG] [Thread-192282] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:13:45.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:13:45.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:13:45.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:13:45.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:13:45.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:13:34', tmtdew=8.11, humidity=57.17, cloud=0.0, wind=43.47, temperature=10.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:13:34', seeing=4.19, atlas_timestamp='2026-02-14T19:13:09.811', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, -0.01574999999999882, 0.006249999999999645, -0.021500000000001407, 0.00849999999999973, 0.01025000000000098, -0.04800000000000004, -0.03575000000000017, 0.01649999999999885, -0.036999999999999034, -0.011750000000001037, -0.0259999999999998, 0.08000000000000007, 0.02024999999999899, -0.04400000000000048, -0.03300000000000125, -0.011250000000000426, 0.0024999999999995026, -0.03350000000000186, -0.04075000000000095, 0.05499999999999794, 0.05174999999999841, 0.011250000000000426, -0.032249999999999446, 0.022999999999999687, 0.03850000000000087, 0.0027500000000006963, -0.011999999999998678, 0.04400000000000048, 0.008000000000000895, 0.004000000000001336, -0.02099999999999902, -0.0012500000000006395], zp_timestamp='2026-02-14T19:09:00')
2026-02-14T21:13:45.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T21:13:45.508 [DEBUG] [Thread-192285] [transport.py] [_log()] starting thread (client mode): 0xa5770f40
2026-02-14T21:13:45.509 [DEBUG] [Thread-192285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:13:45.523 [DEBUG] [Thread-192285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:13:45.523 [INFO] [Thread-192285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:13:45.531 [DEBUG] [Thread-192285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:13:45.531 [DEBUG] [Thread-192285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:13:45.531 [DEBUG] [Thread-192285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:13:45.531 [DEBUG] [Thread-192285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:13:45.531 [DEBUG] [Thread-192285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:13:45.531 [DEBUG] [Thread-192285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:13:45.531 [DEBUG] [Thread-192285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:13:45.531 [DEBUG] [Thread-192285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:13:45.531 [DEBUG] [Thread-192285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:13:45.531 [DEBUG] [Thread-192285] [transport.py] [_log()] client lang: <none>
2026-02-14T21:13:45.531 [DEBUG] [Thread-192285] [transport.py] [_log()] server lang: <none>
2026-02-14T21:13:45.531 [DEBUG] [Thread-192285] [transport.py] [_log()] kex follows: False
2026-02-14T21:13:45.531 [DEBUG] [Thread-192285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:13:45.531 [DEBUG] [Thread-192285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:13:45.531 [DEBUG] [Thread-192285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:13:45.531 [DEBUG] [Thread-192285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:13:45.531 [DEBUG] [Thread-192285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:13:45.531 [DEBUG] [Thread-192285] [transport.py] [_log()] Compression: none
2026-02-14T21:13:45.531 [DEBUG] [Thread-192285] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:13:45.588 [DEBUG] [Thread-192285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:13:45.588 [DEBUG] [Thread-192285] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:13:45.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:13:45.589 [DEBUG] [Thread-192285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:13:45.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:13:45.644 [DEBUG] [Thread-192285] [transport.py] [_log()] userauth is OK
2026-02-14T21:13:45.645 [DEBUG] [Thread-192285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:13:45.645 [DEBUG] [Thread-192285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:13:45.645 [DEBUG] [Thread-192285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:13:45.645 [DEBUG] [Thread-192285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:13:45.667 [INFO] [Thread-192285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:13:45.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T21:13:45.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:13:46.475 [DEBUG] [Thread-192285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:13:46.476 [DEBUG] [Thread-192285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:13:46.523 [DEBUG] [Thread-192285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:13:46.523 [DEBUG] [Thread-192285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:13:46.532 [DEBUG] [Thread-192285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:13:46.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:13:46.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:13:46.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-14T21:13:46.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:13:46.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:13:46.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:13:46.566 [DEBUG] [Thread-192285] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:13:51.745 [DEBUG] [Thread-192287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:13:57.612 [DEBUG] [Thread-192288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:14:10.364 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:14:12.692 [DEBUG] [Thread-192289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:14:16.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:14:16.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:14:16.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-14T21:14:18.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 14, 9), 7.9, 58.12, 0.0, 36.05, 10.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:14:18.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:14:09
2026-02-14T21:14:18.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:14:18.977 [DEBUG] [Thread-192290] [transport.py] [_log()] starting thread (client mode): 0xa2d11ea0
2026-02-14T21:14:18.977 [DEBUG] [Thread-192290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:14:18.984 [DEBUG] [Thread-192290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:14:18.984 [INFO] [Thread-192290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:14:18.987 [DEBUG] [Thread-192290] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:14:18.987 [DEBUG] [Thread-192290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:14:18.988 [DEBUG] [Thread-192290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:14:18.988 [DEBUG] [Thread-192290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:14:18.988 [DEBUG] [Thread-192290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:14:18.988 [DEBUG] [Thread-192290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:14:18.988 [DEBUG] [Thread-192290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:14:18.988 [DEBUG] [Thread-192290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:14:18.988 [DEBUG] [Thread-192290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:14:18.988 [DEBUG] [Thread-192290] [transport.py] [_log()] client lang: <none>
2026-02-14T21:14:18.988 [DEBUG] [Thread-192290] [transport.py] [_log()] server lang: <none>
2026-02-14T21:14:18.988 [DEBUG] [Thread-192290] [transport.py] [_log()] kex follows: False
2026-02-14T21:14:18.988 [DEBUG] [Thread-192290] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:14:18.988 [DEBUG] [Thread-192290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:14:18.988 [DEBUG] [Thread-192290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:14:18.988 [DEBUG] [Thread-192290] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:14:18.988 [DEBUG] [Thread-192290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:14:18.988 [DEBUG] [Thread-192290] [transport.py] [_log()] Compression: none
2026-02-14T21:14:18.988 [DEBUG] [Thread-192290] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:14:19.016 [DEBUG] [Thread-192290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:14:19.018 [DEBUG] [Thread-192290] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:14:19.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:14:19.021 [DEBUG] [Thread-192290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:14:19.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:14:19.023 [DEBUG] [Thread-192290] [transport.py] [_log()] userauth is OK
2026-02-14T21:14:19.023 [DEBUG] [Thread-192290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:14:19.023 [DEBUG] [Thread-192290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:14:19.024 [DEBUG] [Thread-192290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:14:19.024 [DEBUG] [Thread-192290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:14:19.042 [INFO] [Thread-192290] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:14:19.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:14:19.654 [DEBUG] [Thread-192290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:14:19.654 [DEBUG] [Thread-192290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:14:19.657 [DEBUG] [Thread-192290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:14:19.696 [DEBUG] [Thread-192290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:14:19.696 [DEBUG] [Thread-192290] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:14:19.698 [DEBUG] [Thread-192290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:14:19.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:14:19.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:14:19.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:14:19.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:14:19.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:14:19.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:14:19.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:14:19.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:14:19.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:14:19.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.801155 -999.00  +10.20  22.18     63   +3.50 1 1 1 1 1     0    0 6.01 -37.57 ZNESW 19.7 22.2 140.4 40.9 10.8 -25.3 10.6 -24.3 10.4 -23.5 10.7 -24.7
2026-02-14T21:14:19.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:14:19.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:14:19.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.801155
2026-02-14T21:14:19.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:14:19.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:14:19.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:14:19.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:14:19.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:14:19.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:14:09', tmtdew=7.9, humidity=58.12, cloud=0.0, wind=36.05, temperature=10.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:14:09', seeing=4.45, atlas_timestamp='2026-02-14T19:13:39.792', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, -0.01574999999999882, 0.006249999999999645, -0.021500000000001407, 0.00849999999999973, 0.01025000000000098, -0.04800000000000004, -0.03575000000000017, 0.01649999999999885, -0.036999999999999034, -0.011750000000001037, -0.0259999999999998, 0.08000000000000007, 0.02024999999999899, -0.04400000000000048, -0.03300000000000125, -0.011250000000000426, 0.0024999999999995026, -0.03350000000000186, -0.04075000000000095, 0.05499999999999794, 0.05174999999999841, 0.011250000000000426, -0.032249999999999446, 0.022999999999999687, 0.03850000000000087, 0.0027500000000006963, -0.011999999999998678, 0.04400000000000048, 0.008000000000000895, 0.004000000000001336, -0.02099999999999902, -0.0012500000000006395], zp_timestamp='2026-02-14T19:12:00')
2026-02-14T21:14:19.730 [DEBUG] [Thread-192290] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:14:19.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-14T21:14:19.816 [DEBUG] [Thread-192293] [transport.py] [_log()] starting thread (client mode): 0xa2d6eec0
2026-02-14T21:14:19.816 [DEBUG] [Thread-192293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:14:19.830 [DEBUG] [Thread-192293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:14:19.830 [INFO] [Thread-192293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:14:19.838 [DEBUG] [Thread-192293] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:14:19.838 [DEBUG] [Thread-192293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:14:19.838 [DEBUG] [Thread-192293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:14:19.838 [DEBUG] [Thread-192293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:14:19.838 [DEBUG] [Thread-192293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:14:19.838 [DEBUG] [Thread-192293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:14:19.838 [DEBUG] [Thread-192293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:14:19.838 [DEBUG] [Thread-192293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:14:19.839 [DEBUG] [Thread-192293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:14:19.839 [DEBUG] [Thread-192293] [transport.py] [_log()] client lang: <none>
2026-02-14T21:14:19.839 [DEBUG] [Thread-192293] [transport.py] [_log()] server lang: <none>
2026-02-14T21:14:19.839 [DEBUG] [Thread-192293] [transport.py] [_log()] kex follows: False
2026-02-14T21:14:19.839 [DEBUG] [Thread-192293] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:14:19.839 [DEBUG] [Thread-192293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:14:19.839 [DEBUG] [Thread-192293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:14:19.839 [DEBUG] [Thread-192293] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:14:19.839 [DEBUG] [Thread-192293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:14:19.839 [DEBUG] [Thread-192293] [transport.py] [_log()] Compression: none
2026-02-14T21:14:19.839 [DEBUG] [Thread-192293] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:14:19.896 [DEBUG] [Thread-192293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:14:19.896 [DEBUG] [Thread-192293] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:14:19.896 [DEBUG] [Thread-192293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:14:19.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:14:19.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:14:19.955 [DEBUG] [Thread-192293] [transport.py] [_log()] userauth is OK
2026-02-14T21:14:19.955 [DEBUG] [Thread-192293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:14:19.956 [DEBUG] [Thread-192293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:14:19.956 [DEBUG] [Thread-192293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:14:19.956 [DEBUG] [Thread-192293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:14:19.977 [INFO] [Thread-192293] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:14:19.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-14T21:14:19.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:14:20.803 [DEBUG] [Thread-192293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:14:20.804 [DEBUG] [Thread-192293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:14:20.851 [DEBUG] [Thread-192293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:14:20.851 [DEBUG] [Thread-192293] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:14:20.860 [DEBUG] [Thread-192293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:14:20.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:14:20.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-14T21:14:20.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:14:20.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:14:20.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:14:20.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:14:20.895 [DEBUG] [Thread-192293] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:14:22.738 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:14:25.788 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:14:27.722 [DEBUG] [Thread-192295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:14:40.437 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:14:40.440 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:14:42.879 [DEBUG] [Thread-192296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:14:50.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:14:50.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:14:50.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T21:14:52.240 [DEBUG] [Thread-192297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:14:52.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 14, 44), 7.9, 58.14, 0.0, 31.07, 10.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:14:52.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:14:44
2026-02-14T21:14:53.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:14:53.376 [DEBUG] [Thread-192298] [transport.py] [_log()] starting thread (client mode): 0xa2d6d4b0
2026-02-14T21:14:53.376 [DEBUG] [Thread-192298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:14:53.390 [DEBUG] [Thread-192298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:14:53.391 [INFO] [Thread-192298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:14:53.394 [DEBUG] [Thread-192298] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:14:53.394 [DEBUG] [Thread-192298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:14:53.394 [DEBUG] [Thread-192298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:14:53.394 [DEBUG] [Thread-192298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:14:53.394 [DEBUG] [Thread-192298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:14:53.394 [DEBUG] [Thread-192298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:14:53.394 [DEBUG] [Thread-192298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:14:53.394 [DEBUG] [Thread-192298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:14:53.394 [DEBUG] [Thread-192298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:14:53.394 [DEBUG] [Thread-192298] [transport.py] [_log()] client lang: <none>
2026-02-14T21:14:53.394 [DEBUG] [Thread-192298] [transport.py] [_log()] server lang: <none>
2026-02-14T21:14:53.394 [DEBUG] [Thread-192298] [transport.py] [_log()] kex follows: False
2026-02-14T21:14:53.394 [DEBUG] [Thread-192298] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:14:53.394 [DEBUG] [Thread-192298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:14:53.394 [DEBUG] [Thread-192298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:14:53.394 [DEBUG] [Thread-192298] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:14:53.394 [DEBUG] [Thread-192298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:14:53.394 [DEBUG] [Thread-192298] [transport.py] [_log()] Compression: none
2026-02-14T21:14:53.394 [DEBUG] [Thread-192298] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:14:53.414 [DEBUG] [Thread-192298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:14:53.415 [DEBUG] [Thread-192298] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:14:53.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:14:53.415 [DEBUG] [Thread-192298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:14:53.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:14:53.416 [DEBUG] [Thread-192298] [transport.py] [_log()] userauth is OK
2026-02-14T21:14:53.416 [DEBUG] [Thread-192298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:14:53.416 [DEBUG] [Thread-192298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:14:53.416 [DEBUG] [Thread-192298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:14:53.416 [DEBUG] [Thread-192298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:14:53.440 [INFO] [Thread-192298] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:14:53.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:14:54.094 [DEBUG] [Thread-192298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:14:54.095 [DEBUG] [Thread-192298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:14:54.096 [DEBUG] [Thread-192298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:14:54.135 [DEBUG] [Thread-192298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:14:54.135 [DEBUG] [Thread-192298] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:14:54.138 [DEBUG] [Thread-192298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:14:54.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:14:54.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:14:54.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:14:54.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:14:54.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:14:54.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:14:54.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:14:54.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:14:54.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:14:54.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.801502 -999.00  +10.20  28.63     63   +3.50 1 1 1 1 1     0    0 6.03 -37.22 ZNESW 23.7 28.6 162.1 32.9 10.8 -25.4 10.6 -24.4 10.4 -23.4 10.8 -24.3
2026-02-14T21:14:54.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:14:54.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:14:54.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.801502
2026-02-14T21:14:54.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:14:54.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:14:54.163 [DEBUG] [Thread-192298] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:14:54.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:14:54.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:14:54.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:14:54.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:14:44', tmtdew=7.9, humidity=58.14, cloud=0.0, wind=31.07, temperature=10.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:14:45', seeing=5.11, atlas_timestamp='2026-02-14T19:14:09.773', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, -0.01574999999999882, 0.006249999999999645, -0.021500000000001407, 0.00849999999999973, 0.01025000000000098, -0.04800000000000004, -0.03575000000000017, 0.01649999999999885, -0.036999999999999034, -0.011750000000001037, -0.0259999999999998, 0.08000000000000007, 0.02024999999999899, -0.04400000000000048, -0.03300000000000125, -0.011250000000000426, 0.0024999999999995026, -0.03350000000000186, -0.04075000000000095, 0.05499999999999794, 0.05174999999999841, 0.011250000000000426, -0.032249999999999446, 0.022999999999999687, 0.03850000000000087, 0.0027500000000006963, -0.011999999999998678, 0.04400000000000048, 0.008000000000000895, 0.004000000000001336, -0.02099999999999902, -0.0012500000000006395], zp_timestamp='2026-02-14T19:12:00')
2026-02-14T21:14:54.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-14T21:14:54.257 [DEBUG] [Thread-192301] [transport.py] [_log()] starting thread (client mode): 0xa57c1de0
2026-02-14T21:14:54.257 [DEBUG] [Thread-192301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:14:54.272 [DEBUG] [Thread-192301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:14:54.272 [INFO] [Thread-192301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:14:54.279 [DEBUG] [Thread-192301] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:14:54.279 [DEBUG] [Thread-192301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:14:54.279 [DEBUG] [Thread-192301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:14:54.279 [DEBUG] [Thread-192301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:14:54.279 [DEBUG] [Thread-192301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:14:54.279 [DEBUG] [Thread-192301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:14:54.279 [DEBUG] [Thread-192301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:14:54.279 [DEBUG] [Thread-192301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:14:54.279 [DEBUG] [Thread-192301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:14:54.279 [DEBUG] [Thread-192301] [transport.py] [_log()] client lang: <none>
2026-02-14T21:14:54.279 [DEBUG] [Thread-192301] [transport.py] [_log()] server lang: <none>
2026-02-14T21:14:54.280 [DEBUG] [Thread-192301] [transport.py] [_log()] kex follows: False
2026-02-14T21:14:54.280 [DEBUG] [Thread-192301] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:14:54.280 [DEBUG] [Thread-192301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:14:54.280 [DEBUG] [Thread-192301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:14:54.280 [DEBUG] [Thread-192301] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:14:54.280 [DEBUG] [Thread-192301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:14:54.280 [DEBUG] [Thread-192301] [transport.py] [_log()] Compression: none
2026-02-14T21:14:54.280 [DEBUG] [Thread-192301] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:14:54.335 [DEBUG] [Thread-192301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:14:54.335 [DEBUG] [Thread-192301] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:14:54.335 [DEBUG] [Thread-192301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:14:54.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:14:54.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:14:54.392 [DEBUG] [Thread-192301] [transport.py] [_log()] userauth is OK
2026-02-14T21:14:54.392 [DEBUG] [Thread-192301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:14:54.392 [DEBUG] [Thread-192301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:14:54.392 [DEBUG] [Thread-192301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:14:54.392 [DEBUG] [Thread-192301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:14:54.409 [INFO] [Thread-192301] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:14: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-14T21:14:54.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:14:55.189 [DEBUG] [Thread-192301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:14:55.190 [DEBUG] [Thread-192301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:14:55.237 [DEBUG] [Thread-192301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:14:55.238 [DEBUG] [Thread-192301] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:14:55.245 [DEBUG] [Thread-192301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:14:55.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:14:55.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-14T21:14:55.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-14T21:14:55.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:14:55.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:14:55.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:14:55.278 [DEBUG] [Thread-192301] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:14:57.905 [DEBUG] [Thread-192303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:15:12.977 [DEBUG] [Thread-192304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:15:25.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:15:25.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:15:25.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-14T21:15:27.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 14, 44), 7.9, 58.14, 0.0, 31.07, 10.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:15:27.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:14:44
2026-02-14T21:15:27.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:15:27.795 [DEBUG] [Thread-192305] [transport.py] [_log()] starting thread (client mode): 0xa2d10cd0
2026-02-14T21:15:27.795 [DEBUG] [Thread-192305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:15:27.806 [DEBUG] [Thread-192305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:15:27.806 [INFO] [Thread-192305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:15:27.813 [DEBUG] [Thread-192305] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:15:27.814 [DEBUG] [Thread-192305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:15:27.814 [DEBUG] [Thread-192305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:15:27.814 [DEBUG] [Thread-192305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:15:27.814 [DEBUG] [Thread-192305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:15:27.814 [DEBUG] [Thread-192305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:15:27.814 [DEBUG] [Thread-192305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:15:27.814 [DEBUG] [Thread-192305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:15:27.814 [DEBUG] [Thread-192305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:15:27.814 [DEBUG] [Thread-192305] [transport.py] [_log()] client lang: <none>
2026-02-14T21:15:27.814 [DEBUG] [Thread-192305] [transport.py] [_log()] server lang: <none>
2026-02-14T21:15:27.815 [DEBUG] [Thread-192305] [transport.py] [_log()] kex follows: False
2026-02-14T21:15:27.815 [DEBUG] [Thread-192305] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:15:27.815 [DEBUG] [Thread-192305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:15:27.815 [DEBUG] [Thread-192305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:15:27.815 [DEBUG] [Thread-192305] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:15:27.816 [DEBUG] [Thread-192305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:15:27.816 [DEBUG] [Thread-192305] [transport.py] [_log()] Compression: none
2026-02-14T21:15:27.816 [DEBUG] [Thread-192305] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:15:27.848 [DEBUG] [Thread-192305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:15:27.852 [DEBUG] [Thread-192305] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:15:27.854 [DEBUG] [Thread-192305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:15:27.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:15:27.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:15:27.858 [DEBUG] [Thread-192305] [transport.py] [_log()] userauth is OK
2026-02-14T21:15:27.858 [DEBUG] [Thread-192305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:15:27.858 [DEBUG] [Thread-192305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:15:27.858 [DEBUG] [Thread-192305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:15:27.858 [DEBUG] [Thread-192305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:15:27.877 [INFO] [Thread-192305] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:15:27.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:15:28.005 [DEBUG] [Thread-192307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:15:28.510 [DEBUG] [Thread-192305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:15:28.510 [DEBUG] [Thread-192305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:15:28.512 [DEBUG] [Thread-192305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:15:28.551 [DEBUG] [Thread-192305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:15:28.551 [DEBUG] [Thread-192305] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:15:28.554 [DEBUG] [Thread-192305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:15:28.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:15:28.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:15:28.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:15:28.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:15:28.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:15:28.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:15:28.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:15:28.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:15:28.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:15:28.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.801849 -999.00  +10.20  29.04     63   +3.50 1 1 1 1 1     0    0 5.94 -35.95 ZNESW 26.8 29.0 157.8 37.7 10.8 -25.3 10.6 -24.3 10.4 -23.4 10.7 -24.3
2026-02-14T21:15:28.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:15:28.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:15:28.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.801849
2026-02-14T21:15:28.589 [DEBUG] [Thread-192305] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:15:28.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:15:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:15:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:15:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:15:28.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:15:28.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:14:44', tmtdew=7.9, humidity=58.14, cloud=0.0, wind=31.07, temperature=10.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:15:20', seeing=4.98, atlas_timestamp='2026-02-14T19:14:39.754', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, -0.01574999999999882, 0.006249999999999645, -0.021500000000001407, 0.00849999999999973, 0.01025000000000098, -0.04800000000000004, -0.03575000000000017, 0.01649999999999885, -0.036999999999999034, -0.011750000000001037, -0.0259999999999998, 0.08000000000000007, 0.02024999999999899, -0.04400000000000048, -0.03300000000000125, -0.011250000000000426, 0.0024999999999995026, -0.03350000000000186, -0.04075000000000095, 0.05499999999999794, 0.05174999999999841, 0.011250000000000426, -0.032249999999999446, 0.022999999999999687, 0.03850000000000087, 0.0027500000000006963, -0.011999999999998678, 0.04400000000000048, 0.008000000000000895, 0.004000000000001336, -0.02099999999999902, -0.0012500000000006395], zp_timestamp='2026-02-14T19:12:00')
2026-02-14T21:15:28.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-14T21:15:28.709 [DEBUG] [Thread-192309] [transport.py] [_log()] starting thread (client mode): 0xa2d11ab0
2026-02-14T21:15:28.709 [DEBUG] [Thread-192309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:15:28.723 [DEBUG] [Thread-192309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:15:28.723 [INFO] [Thread-192309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:15:28.734 [DEBUG] [Thread-192309] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:15:28.734 [DEBUG] [Thread-192309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:15:28.734 [DEBUG] [Thread-192309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:15:28.734 [DEBUG] [Thread-192309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:15:28.734 [DEBUG] [Thread-192309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:15:28.734 [DEBUG] [Thread-192309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:15:28.734 [DEBUG] [Thread-192309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:15:28.734 [DEBUG] [Thread-192309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:15:28.734 [DEBUG] [Thread-192309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:15:28.734 [DEBUG] [Thread-192309] [transport.py] [_log()] client lang: <none>
2026-02-14T21:15:28.735 [DEBUG] [Thread-192309] [transport.py] [_log()] server lang: <none>
2026-02-14T21:15:28.735 [DEBUG] [Thread-192309] [transport.py] [_log()] kex follows: False
2026-02-14T21:15:28.735 [DEBUG] [Thread-192309] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:15:28.735 [DEBUG] [Thread-192309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:15:28.735 [DEBUG] [Thread-192309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:15:28.735 [DEBUG] [Thread-192309] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:15:28.735 [DEBUG] [Thread-192309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:15:28.735 [DEBUG] [Thread-192309] [transport.py] [_log()] Compression: none
2026-02-14T21:15:28.735 [DEBUG] [Thread-192309] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:15:28.797 [DEBUG] [Thread-192309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:15:28.798 [DEBUG] [Thread-192309] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:15:28.798 [DEBUG] [Thread-192309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:15:28.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:15:28.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:15:28.852 [DEBUG] [Thread-192309] [transport.py] [_log()] userauth is OK
2026-02-14T21:15:28.852 [DEBUG] [Thread-192309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:15:28.853 [DEBUG] [Thread-192309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:15:28.853 [DEBUG] [Thread-192309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:15:28.853 [DEBUG] [Thread-192309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:15:28.874 [INFO] [Thread-192309] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:15:28.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-14T21:15:28.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:15:29.697 [DEBUG] [Thread-192309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:15:29.698 [DEBUG] [Thread-192309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:15:29.745 [DEBUG] [Thread-192309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:15:29.745 [DEBUG] [Thread-192309] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:15:29.754 [DEBUG] [Thread-192309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:15:29.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:15: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')
2026-02-14T21:15:29.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-14T21:15:29.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:15:29.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:15:29.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:15:29.790 [DEBUG] [Thread-192309] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:15:40.651 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:15:40.653 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:15:43.031 [DEBUG] [Thread-192311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:15:43.946 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:15:52.771 [DEBUG] [Thread-192312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:15:58.128 [DEBUG] [Thread-192313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:15:59.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:15:59.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:15:59.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-14T21:16:01.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 15, 19), 7.88, 58.18, 0.0, 33.89, 10.31, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:16:01.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:15:19
2026-02-14T21:16:02.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:16:02.289 [DEBUG] [Thread-192314] [transport.py] [_log()] starting thread (client mode): 0xa57c1de0
2026-02-14T21:16:02.289 [DEBUG] [Thread-192314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:16:02.310 [DEBUG] [Thread-192314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:16:02.310 [INFO] [Thread-192314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:16:02.313 [DEBUG] [Thread-192314] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:16:02.313 [DEBUG] [Thread-192314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:16:02.313 [DEBUG] [Thread-192314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:16:02.313 [DEBUG] [Thread-192314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:16:02.313 [DEBUG] [Thread-192314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:16:02.313 [DEBUG] [Thread-192314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:16:02.313 [DEBUG] [Thread-192314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:16:02.313 [DEBUG] [Thread-192314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:16:02.313 [DEBUG] [Thread-192314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:16:02.313 [DEBUG] [Thread-192314] [transport.py] [_log()] client lang: <none>
2026-02-14T21:16:02.314 [DEBUG] [Thread-192314] [transport.py] [_log()] server lang: <none>
2026-02-14T21:16:02.314 [DEBUG] [Thread-192314] [transport.py] [_log()] kex follows: False
2026-02-14T21:16:02.314 [DEBUG] [Thread-192314] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:16:02.314 [DEBUG] [Thread-192314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:16:02.314 [DEBUG] [Thread-192314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:16:02.314 [DEBUG] [Thread-192314] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:16:02.314 [DEBUG] [Thread-192314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:16:02.314 [DEBUG] [Thread-192314] [transport.py] [_log()] Compression: none
2026-02-14T21:16:02.314 [DEBUG] [Thread-192314] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:16:02.329 [DEBUG] [Thread-192314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:16:02.330 [DEBUG] [Thread-192314] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:16:02.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:16:02.330 [DEBUG] [Thread-192314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:16:02.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:16:02.331 [DEBUG] [Thread-192314] [transport.py] [_log()] userauth is OK
2026-02-14T21:16:02.331 [DEBUG] [Thread-192314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:16:02.331 [DEBUG] [Thread-192314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:16:02.331 [DEBUG] [Thread-192314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:16:02.331 [DEBUG] [Thread-192314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:16:02.347 [INFO] [Thread-192314] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:16:02.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:16:02.996 [DEBUG] [Thread-192314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:16:02.996 [DEBUG] [Thread-192314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:16:02.997 [DEBUG] [Thread-192314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:16:03.037 [DEBUG] [Thread-192314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:16:03.037 [DEBUG] [Thread-192314] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:16:03.039 [DEBUG] [Thread-192314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:16:03.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:16:03.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:16:03.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:16:03.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:16:03.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:16:03.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:16:03.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:16:03.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:16:03.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:16:03.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.802196 -999.00  +10.20  23.39     63   +3.50 1 1 1 1 1     0    0 6.09 -37.06 ZNESW 20.8 23.4 167.2 31.3 10.8 -25.3 10.6 -24.4 10.4 -23.4 10.7 -24.5
2026-02-14T21:16:03.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:16:03.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:16:03.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.802196
2026-02-14T21:16:03.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:16:03.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:16:03.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:16:03.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:16:03.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:16:03.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:15:19', tmtdew=7.88, humidity=58.18, cloud=0.0, wind=33.89, temperature=10.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:15:55', seeing=3.69, atlas_timestamp='2026-02-14T19:15:09.734', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, -0.01574999999999882, 0.006249999999999645, -0.021500000000001407, 0.00849999999999973, 0.01025000000000098, -0.04800000000000004, -0.03575000000000017, 0.01649999999999885, -0.036999999999999034, -0.011750000000001037, -0.0259999999999998, 0.08000000000000007, 0.02024999999999899, -0.04400000000000048, -0.03300000000000125, -0.011250000000000426, 0.0024999999999995026, -0.03350000000000186, -0.04075000000000095, 0.05499999999999794, 0.05174999999999841, 0.011250000000000426, -0.032249999999999446, 0.022999999999999687, 0.03850000000000087, 0.0027500000000006963, -0.011999999999998678, 0.04400000000000048, 0.008000000000000895, 0.004000000000001336, -0.02099999999999902, -0.0012500000000006395], zp_timestamp='2026-02-14T19:12:00')
2026-02-14T21:16:03.057 [DEBUG] [Thread-192314] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:16:03.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-14T21:16:03.146 [DEBUG] [Thread-192317] [transport.py] [_log()] starting thread (client mode): 0xa5771bd0
2026-02-14T21:16:03.146 [DEBUG] [Thread-192317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:16:03.160 [DEBUG] [Thread-192317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:16:03.161 [INFO] [Thread-192317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:16:03.168 [DEBUG] [Thread-192317] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:16:03.168 [DEBUG] [Thread-192317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:16:03.168 [DEBUG] [Thread-192317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:16:03.168 [DEBUG] [Thread-192317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:16:03.169 [DEBUG] [Thread-192317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:16:03.169 [DEBUG] [Thread-192317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:16:03.169 [DEBUG] [Thread-192317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:16:03.169 [DEBUG] [Thread-192317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:16:03.169 [DEBUG] [Thread-192317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:16:03.169 [DEBUG] [Thread-192317] [transport.py] [_log()] client lang: <none>
2026-02-14T21:16:03.169 [DEBUG] [Thread-192317] [transport.py] [_log()] server lang: <none>
2026-02-14T21:16:03.169 [DEBUG] [Thread-192317] [transport.py] [_log()] kex follows: False
2026-02-14T21:16:03.169 [DEBUG] [Thread-192317] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:16:03.170 [DEBUG] [Thread-192317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:16:03.170 [DEBUG] [Thread-192317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:16:03.170 [DEBUG] [Thread-192317] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:16:03.170 [DEBUG] [Thread-192317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:16:03.170 [DEBUG] [Thread-192317] [transport.py] [_log()] Compression: none
2026-02-14T21:16:03.170 [DEBUG] [Thread-192317] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:16:03.224 [DEBUG] [Thread-192317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:16:03.225 [DEBUG] [Thread-192317] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:16:03.225 [DEBUG] [Thread-192317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:16:03.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:16:03.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:16:03.287 [DEBUG] [Thread-192317] [transport.py] [_log()] userauth is OK
2026-02-14T21:16:03.288 [DEBUG] [Thread-192317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:16:03.288 [DEBUG] [Thread-192317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:16:03.288 [DEBUG] [Thread-192317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:16:03.288 [DEBUG] [Thread-192317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:16:03.307 [INFO] [Thread-192317] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:16:03.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-14T21:16:03.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:16:04.142 [DEBUG] [Thread-192317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:16:04.142 [DEBUG] [Thread-192317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:16:04.190 [DEBUG] [Thread-192317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:16:04.190 [DEBUG] [Thread-192317] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:16:04.198 [DEBUG] [Thread-192317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:16:04.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:16:04.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-14T21:16:04.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:16:04.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:16:04.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:16:04.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:16:04.230 [DEBUG] [Thread-192317] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:16:13.153 [DEBUG] [Thread-192319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:16:28.198 [DEBUG] [Thread-192320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:16:34.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:16:34.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:16: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-14T21:16:36.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 15, 55), 7.87, 58.23, 0.0, 37.39, 10.31, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:16:36.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:15:55
2026-02-14T21:16:36.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:16:36.880 [DEBUG] [Thread-192321] [transport.py] [_log()] starting thread (client mode): 0xa5770670
2026-02-14T21:16:36.880 [DEBUG] [Thread-192321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:16:36.890 [DEBUG] [Thread-192321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:16:36.890 [INFO] [Thread-192321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:16:36.893 [DEBUG] [Thread-192321] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:16:36.893 [DEBUG] [Thread-192321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:16:36.893 [DEBUG] [Thread-192321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:16:36.893 [DEBUG] [Thread-192321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:16:36.893 [DEBUG] [Thread-192321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:16:36.893 [DEBUG] [Thread-192321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:16:36.893 [DEBUG] [Thread-192321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:16:36.893 [DEBUG] [Thread-192321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:16:36.893 [DEBUG] [Thread-192321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:16:36.893 [DEBUG] [Thread-192321] [transport.py] [_log()] client lang: <none>
2026-02-14T21:16:36.893 [DEBUG] [Thread-192321] [transport.py] [_log()] server lang: <none>
2026-02-14T21:16:36.893 [DEBUG] [Thread-192321] [transport.py] [_log()] kex follows: False
2026-02-14T21:16:36.893 [DEBUG] [Thread-192321] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:16:36.894 [DEBUG] [Thread-192321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:16:36.894 [DEBUG] [Thread-192321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:16:36.894 [DEBUG] [Thread-192321] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:16:36.894 [DEBUG] [Thread-192321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:16:36.894 [DEBUG] [Thread-192321] [transport.py] [_log()] Compression: none
2026-02-14T21:16:36.894 [DEBUG] [Thread-192321] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:16:36.913 [DEBUG] [Thread-192321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:16:36.914 [DEBUG] [Thread-192321] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:16:36.915 [DEBUG] [Thread-192321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:16:36.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:16:36.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:16:36.917 [DEBUG] [Thread-192321] [transport.py] [_log()] userauth is OK
2026-02-14T21:16:36.917 [DEBUG] [Thread-192321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:16:36.918 [DEBUG] [Thread-192321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:16:36.918 [DEBUG] [Thread-192321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:16:36.918 [DEBUG] [Thread-192321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:16:36.941 [INFO] [Thread-192321] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:16:36.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:16:37.598 [DEBUG] [Thread-192321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:16:37.599 [DEBUG] [Thread-192321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:16:37.599 [DEBUG] [Thread-192321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:16:37.639 [DEBUG] [Thread-192321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:16:37.639 [DEBUG] [Thread-192321] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:16:37.642 [DEBUG] [Thread-192321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:16:37.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:16:37.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:16:37.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:16:37.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:16:37.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:16:37.664 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:16:37.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:16:37.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:16:37.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:16:37.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.802891 -999.00  +10.20  23.49     63   +3.50 1 1 1 1 1     0    0 5.86 -37.74 ZNESW 25.0 23.5 157.0 35.0 10.7 -25.4 10.5 -24.3 10.4 -23.4 10.7 -24.5
2026-02-14T21:16:37.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:16:37.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:16:37.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.802891
2026-02-14T21:16:37.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:16:37.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:16:37.669 [DEBUG] [Thread-192321] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:16:37.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:16:37.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:16:37.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:16:37.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:15:55', tmtdew=7.87, humidity=58.23, cloud=0.0, wind=37.39, temperature=10.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:16:31', seeing=4.1, atlas_timestamp='2026-02-14T19:16:09.782', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, -0.01574999999999882, 0.006249999999999645, -0.021500000000001407, 0.00849999999999973, 0.01025000000000098, -0.04800000000000004, -0.03575000000000017, 0.01649999999999885, -0.036999999999999034, -0.011750000000001037, -0.0259999999999998, 0.08000000000000007, 0.02024999999999899, -0.04400000000000048, -0.03300000000000125, -0.011250000000000426, 0.0024999999999995026, -0.03350000000000186, -0.04075000000000095, 0.05499999999999794, 0.05174999999999841, 0.011250000000000426, -0.032249999999999446, 0.022999999999999687, 0.03850000000000087, 0.0027500000000006963, -0.011999999999998678, 0.04400000000000048, 0.008000000000000895, 0.004000000000001336, -0.02099999999999902, -0.0012500000000006395], zp_timestamp='2026-02-14T19:12:00')
2026-02-14T21:16:37.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-14T21:16:37.770 [DEBUG] [Thread-192324] [transport.py] [_log()] starting thread (client mode): 0xa2d118d0
2026-02-14T21:16:37.771 [DEBUG] [Thread-192324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:16:37.785 [DEBUG] [Thread-192324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:16:37.785 [INFO] [Thread-192324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:16:37.792 [DEBUG] [Thread-192324] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:16:37.792 [DEBUG] [Thread-192324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:16:37.792 [DEBUG] [Thread-192324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:16:37.792 [DEBUG] [Thread-192324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:16:37.792 [DEBUG] [Thread-192324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:16:37.793 [DEBUG] [Thread-192324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:16:37.793 [DEBUG] [Thread-192324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:16:37.793 [DEBUG] [Thread-192324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:16:37.793 [DEBUG] [Thread-192324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:16:37.793 [DEBUG] [Thread-192324] [transport.py] [_log()] client lang: <none>
2026-02-14T21:16:37.793 [DEBUG] [Thread-192324] [transport.py] [_log()] server lang: <none>
2026-02-14T21:16:37.793 [DEBUG] [Thread-192324] [transport.py] [_log()] kex follows: False
2026-02-14T21:16:37.793 [DEBUG] [Thread-192324] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:16:37.793 [DEBUG] [Thread-192324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:16:37.793 [DEBUG] [Thread-192324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:16:37.793 [DEBUG] [Thread-192324] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:16:37.793 [DEBUG] [Thread-192324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:16:37.793 [DEBUG] [Thread-192324] [transport.py] [_log()] Compression: none
2026-02-14T21:16:37.793 [DEBUG] [Thread-192324] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:16:37.857 [DEBUG] [Thread-192324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:16:37.857 [DEBUG] [Thread-192324] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:16:37.858 [DEBUG] [Thread-192324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:16:37.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:16:37.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:16:37.912 [DEBUG] [Thread-192324] [transport.py] [_log()] userauth is OK
2026-02-14T21:16:37.912 [DEBUG] [Thread-192324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:16:37.913 [DEBUG] [Thread-192324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:16:37.913 [DEBUG] [Thread-192324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:16:37.913 [DEBUG] [Thread-192324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:16:37.935 [INFO] [Thread-192324] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:16:37.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-14T21:16:37.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:16:38.735 [DEBUG] [Thread-192324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:16:38.736 [DEBUG] [Thread-192324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:16:38.783 [DEBUG] [Thread-192324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:16:38.783 [DEBUG] [Thread-192324] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:16:38.792 [DEBUG] [Thread-192324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:16:38.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:16:38.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')
2026-02-14T21:16:38.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-14T21:16:38.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:16:38.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:16:38.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:16:38.827 [DEBUG] [Thread-192324] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:16:40.853 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:16:40.855 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:16:43.229 [DEBUG] [Thread-192326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:16:53.411 [DEBUG] [Thread-192327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:16:58.369 [DEBUG] [Thread-192328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:17:08.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:17:08.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:17:08.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-14T21:17:10.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 16, 30), 7.87, 58.22, 0.0, 35.71, 10.26, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:17:10.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:16:30
2026-02-14T21:17:11.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:17:11.340 [DEBUG] [Thread-192329] [transport.py] [_log()] starting thread (client mode): 0xa2d6c490
2026-02-14T21:17:11.340 [DEBUG] [Thread-192329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:17:11.361 [DEBUG] [Thread-192329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:17:11.361 [INFO] [Thread-192329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:17:11.364 [DEBUG] [Thread-192329] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:17:11.364 [DEBUG] [Thread-192329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:17:11.364 [DEBUG] [Thread-192329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:17:11.364 [DEBUG] [Thread-192329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:17:11.364 [DEBUG] [Thread-192329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:17:11.364 [DEBUG] [Thread-192329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:17:11.365 [DEBUG] [Thread-192329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:17:11.365 [DEBUG] [Thread-192329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:17:11.365 [DEBUG] [Thread-192329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:17:11.365 [DEBUG] [Thread-192329] [transport.py] [_log()] client lang: <none>
2026-02-14T21:17:11.365 [DEBUG] [Thread-192329] [transport.py] [_log()] server lang: <none>
2026-02-14T21:17:11.365 [DEBUG] [Thread-192329] [transport.py] [_log()] kex follows: False
2026-02-14T21:17:11.365 [DEBUG] [Thread-192329] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:17:11.365 [DEBUG] [Thread-192329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:17:11.365 [DEBUG] [Thread-192329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:17:11.365 [DEBUG] [Thread-192329] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:17:11.365 [DEBUG] [Thread-192329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:17:11.365 [DEBUG] [Thread-192329] [transport.py] [_log()] Compression: none
2026-02-14T21:17:11.365 [DEBUG] [Thread-192329] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:17:11.390 [DEBUG] [Thread-192329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:17:11.391 [DEBUG] [Thread-192329] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:17:11.392 [DEBUG] [Thread-192329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:17:11.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:17:11.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:17:11.394 [DEBUG] [Thread-192329] [transport.py] [_log()] userauth is OK
2026-02-14T21:17:11.394 [DEBUG] [Thread-192329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:17:11.394 [DEBUG] [Thread-192329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:17:11.394 [DEBUG] [Thread-192329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:17:11.394 [DEBUG] [Thread-192329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:17:11.419 [INFO] [Thread-192329] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:17:11.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:17:12.220 [DEBUG] [Thread-192329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:17:12.221 [DEBUG] [Thread-192329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:17:12.221 [DEBUG] [Thread-192329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:17:12.261 [DEBUG] [Thread-192329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:17:12.262 [DEBUG] [Thread-192329] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:17:12.264 [DEBUG] [Thread-192329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:17:12.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:17:12.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:17:12.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:17:12.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:17:12.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:17:12.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:17:12.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:17:12.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:17:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:17:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.803238 -999.00  +10.20  22.32     63   +3.50 1 1 1 1 1     0    0 5.92 -35.65 ZNESW 25.3 22.3 153.1 31.5 10.7 -25.3 10.6 -24.3 10.4 -23.5 10.7 -24.4
2026-02-14T21:17:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:17:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:17:12.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.803238
2026-02-14T21:17:12.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:17:12.290 [DEBUG] [Thread-192329] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:17:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:17:12.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:17:12.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:17:12.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:17:12.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:16:30', tmtdew=7.87, humidity=58.22, cloud=0.0, wind=35.71, temperature=10.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:17:06', seeing=4.1, atlas_timestamp='2026-02-14T19:16:39.763', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.03125, 0.01425000000000054, -0.0015000000000000568, 0.006000000000000227, -0.021749999999999048, -0.014000000000001123, 0.01425000000000054, -0.0015000000000000568, -0.01249999999999929, -0.030750000000001165, -0.012500000000001066, 0.04699999999999882, 0.014249999999998764, 0.006999999999999673, -0.0129999999999999, 0.027749999999999275, -0.0015000000000000568, -0.025000000000000355, -0.04275000000000162, 0.04099999999999859, 0.061749999999998195, 0.012250000000001648, -0.011750000000001037, 0.049999999999998934, 0.029500000000000526, 0.01774999999999949, -0.011499999999999844, 0.06300000000000061, 0.040000000000000924, 0.01600000000000179, 0.0030000000000001137, -0.013250000000001094], zp_timestamp='2026-02-14T19:16:00')
2026-02-14T21:17:12.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-14T21:17:12.388 [DEBUG] [Thread-192332] [transport.py] [_log()] starting thread (client mode): 0xa2d01630
2026-02-14T21:17:12.388 [DEBUG] [Thread-192332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:17:12.403 [DEBUG] [Thread-192332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:17:12.403 [INFO] [Thread-192332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:17:12.410 [DEBUG] [Thread-192332] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:17:12.410 [DEBUG] [Thread-192332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:17:12.410 [DEBUG] [Thread-192332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:17:12.410 [DEBUG] [Thread-192332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:17:12.410 [DEBUG] [Thread-192332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:17:12.410 [DEBUG] [Thread-192332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:17:12.410 [DEBUG] [Thread-192332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:17:12.410 [DEBUG] [Thread-192332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:17:12.410 [DEBUG] [Thread-192332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:17:12.410 [DEBUG] [Thread-192332] [transport.py] [_log()] client lang: <none>
2026-02-14T21:17:12.410 [DEBUG] [Thread-192332] [transport.py] [_log()] server lang: <none>
2026-02-14T21:17:12.411 [DEBUG] [Thread-192332] [transport.py] [_log()] kex follows: False
2026-02-14T21:17:12.411 [DEBUG] [Thread-192332] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:17:12.411 [DEBUG] [Thread-192332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:17:12.411 [DEBUG] [Thread-192332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:17:12.411 [DEBUG] [Thread-192332] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:17:12.411 [DEBUG] [Thread-192332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:17:12.411 [DEBUG] [Thread-192332] [transport.py] [_log()] Compression: none
2026-02-14T21:17:12.411 [DEBUG] [Thread-192332] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:17:12.468 [DEBUG] [Thread-192332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:17:12.468 [DEBUG] [Thread-192332] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:17:12.469 [DEBUG] [Thread-192332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:17:12.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:17:12.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:17:12.524 [DEBUG] [Thread-192332] [transport.py] [_log()] userauth is OK
2026-02-14T21:17:12.525 [DEBUG] [Thread-192332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:17:12.525 [DEBUG] [Thread-192332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:17:12.525 [DEBUG] [Thread-192332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:17:12.525 [DEBUG] [Thread-192332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:17:12.544 [INFO] [Thread-192332] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:17:12.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-14T21:17:12.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:17:13.352 [DEBUG] [Thread-192332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:17:13.353 [DEBUG] [Thread-192332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:17:13.396 [DEBUG] [Thread-192334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:17:13.402 [DEBUG] [Thread-192332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:17:13.402 [DEBUG] [Thread-192332] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:17:13.410 [DEBUG] [Thread-192332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:17:13.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:17:13.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-14T21:17:13.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:17:13.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:17:13.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:17:13.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:17:13.444 [DEBUG] [Thread-192332] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:17:17.665 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:17:28.478 [DEBUG] [Thread-192335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:17:41.134 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:17:41.136 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:17:43.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:17:43.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:17:43.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T21:17:43.518 [DEBUG] [Thread-192336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:17:45.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 17, 5), 7.86, 58.27, 0.0, 39.77, 10.31, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:17:45.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:17:05
2026-02-14T21:17:46.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:17:46.276 [DEBUG] [Thread-192337] [transport.py] [_log()] starting thread (client mode): 0xa2d13eb0
2026-02-14T21:17:46.276 [DEBUG] [Thread-192337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:17:46.287 [DEBUG] [Thread-192337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:17:46.287 [INFO] [Thread-192337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:17:46.290 [DEBUG] [Thread-192337] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:17:46.290 [DEBUG] [Thread-192337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:17:46.290 [DEBUG] [Thread-192337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:17:46.290 [DEBUG] [Thread-192337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:17:46.290 [DEBUG] [Thread-192337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:17:46.290 [DEBUG] [Thread-192337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:17:46.290 [DEBUG] [Thread-192337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:17:46.290 [DEBUG] [Thread-192337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:17:46.290 [DEBUG] [Thread-192337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:17:46.290 [DEBUG] [Thread-192337] [transport.py] [_log()] client lang: <none>
2026-02-14T21:17:46.290 [DEBUG] [Thread-192337] [transport.py] [_log()] server lang: <none>
2026-02-14T21:17:46.290 [DEBUG] [Thread-192337] [transport.py] [_log()] kex follows: False
2026-02-14T21:17:46.290 [DEBUG] [Thread-192337] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:17:46.291 [DEBUG] [Thread-192337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:17:46.291 [DEBUG] [Thread-192337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:17:46.291 [DEBUG] [Thread-192337] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:17:46.291 [DEBUG] [Thread-192337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:17:46.291 [DEBUG] [Thread-192337] [transport.py] [_log()] Compression: none
2026-02-14T21:17:46.291 [DEBUG] [Thread-192337] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:17:46.319 [DEBUG] [Thread-192337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:17:46.321 [DEBUG] [Thread-192337] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:17:46.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:17:46.324 [DEBUG] [Thread-192337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:17:46.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:17:46.328 [DEBUG] [Thread-192337] [transport.py] [_log()] userauth is OK
2026-02-14T21:17:46.328 [DEBUG] [Thread-192337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:17:46.328 [DEBUG] [Thread-192337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:17:46.328 [DEBUG] [Thread-192337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:17:46.328 [DEBUG] [Thread-192337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:17:46.351 [INFO] [Thread-192337] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:17:46.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:17:47.014 [DEBUG] [Thread-192337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:17:47.015 [DEBUG] [Thread-192337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:17:47.016 [DEBUG] [Thread-192337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:17:47.055 [DEBUG] [Thread-192337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:17:47.055 [DEBUG] [Thread-192337] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:17:47.058 [DEBUG] [Thread-192337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:17:47.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:17:47.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:17:47.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:17:47.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:17:47.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:17:47.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:17:47.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:17:47.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:17:47.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:17:47.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.803585 -999.00  +10.20  23.41     63   +3.50 1 1 1 1 1     0    0 6.04 -35.51 ZNESW 28.2 23.4 159.0 39.1 10.7 -25.4 10.6 -24.4 10.3 -23.3 10.7 -24.6
2026-02-14T21:17:47.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:17:47.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:17:47.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.803585
2026-02-14T21:17:47.090 [DEBUG] [Thread-192337] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:17:47.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:17:47.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:17:47.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:17:47.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:17:47.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:17:47.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:17:05', tmtdew=7.86, humidity=58.27, cloud=0.0, wind=39.77, temperature=10.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:17:41', seeing=2.93, atlas_timestamp='2026-02-14T19:17:09.744', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.03125, 0.01425000000000054, -0.0015000000000000568, 0.006000000000000227, -0.021749999999999048, -0.014000000000001123, 0.01425000000000054, -0.0015000000000000568, -0.01249999999999929, -0.030750000000001165, -0.012500000000001066, 0.04699999999999882, 0.014249999999998764, 0.006999999999999673, -0.0129999999999999, 0.027749999999999275, -0.0015000000000000568, -0.025000000000000355, -0.04275000000000162, 0.04099999999999859, 0.061749999999998195, 0.012250000000001648, -0.011750000000001037, 0.049999999999998934, 0.029500000000000526, 0.01774999999999949, -0.011499999999999844, 0.06300000000000061, 0.040000000000000924, 0.01600000000000179, 0.0030000000000001137, -0.013250000000001094], zp_timestamp='2026-02-14T19:16:00')
2026-02-14T21:17:47.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T21:17:47.203 [DEBUG] [Thread-192340] [transport.py] [_log()] starting thread (client mode): 0xa5770250
2026-02-14T21:17:47.203 [DEBUG] [Thread-192340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:17:47.218 [DEBUG] [Thread-192340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:17:47.218 [INFO] [Thread-192340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:17:47.225 [DEBUG] [Thread-192340] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:17:47.226 [DEBUG] [Thread-192340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:17:47.226 [DEBUG] [Thread-192340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:17:47.226 [DEBUG] [Thread-192340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:17:47.226 [DEBUG] [Thread-192340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:17:47.227 [DEBUG] [Thread-192340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:17:47.227 [DEBUG] [Thread-192340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:17:47.227 [DEBUG] [Thread-192340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:17:47.227 [DEBUG] [Thread-192340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:17:47.227 [DEBUG] [Thread-192340] [transport.py] [_log()] client lang: <none>
2026-02-14T21:17:47.227 [DEBUG] [Thread-192340] [transport.py] [_log()] server lang: <none>
2026-02-14T21:17:47.227 [DEBUG] [Thread-192340] [transport.py] [_log()] kex follows: False
2026-02-14T21:17:47.227 [DEBUG] [Thread-192340] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:17:47.227 [DEBUG] [Thread-192340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:17:47.227 [DEBUG] [Thread-192340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:17:47.227 [DEBUG] [Thread-192340] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:17:47.227 [DEBUG] [Thread-192340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:17:47.228 [DEBUG] [Thread-192340] [transport.py] [_log()] Compression: none
2026-02-14T21:17:47.228 [DEBUG] [Thread-192340] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:17:47.285 [DEBUG] [Thread-192340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:17:47.285 [DEBUG] [Thread-192340] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:17:47.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:17:47.286 [DEBUG] [Thread-192340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:17:47.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:17:47.341 [DEBUG] [Thread-192340] [transport.py] [_log()] userauth is OK
2026-02-14T21:17:47.342 [DEBUG] [Thread-192340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:17:47.342 [DEBUG] [Thread-192340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:17:47.342 [DEBUG] [Thread-192340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:17:47.342 [DEBUG] [Thread-192340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:17:47.361 [INFO] [Thread-192340] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:17:47.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-14T21:17:47.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:17:48.194 [DEBUG] [Thread-192340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:17:48.195 [DEBUG] [Thread-192340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:17:48.242 [DEBUG] [Thread-192340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:17:48.242 [DEBUG] [Thread-192340] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:17:48.250 [DEBUG] [Thread-192340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:17:48.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:17:48.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-14T21:17:48.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:17:48.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:17:48.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:17:48.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:17:48.312 [DEBUG] [Thread-192340] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:17:49.544 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:17:54.081 [DEBUG] [Thread-192342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:17:54.409 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:17:57.454 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:17:58.549 [DEBUG] [Thread-192343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:18:03.820 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:18:13.674 [DEBUG] [Thread-192344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:18:18.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:18:18.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:18:18.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T21:18:20.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 17, 41), 8.0, 57.64, 0.0, 36.13, 10.65, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:18:20.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:17:41
2026-02-14T21:18:21.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:18:21.388 [DEBUG] [Thread-192345] [transport.py] [_log()] starting thread (client mode): 0xa2d03430
2026-02-14T21:18:21.388 [DEBUG] [Thread-192345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:18:21.403 [DEBUG] [Thread-192345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:18:21.404 [INFO] [Thread-192345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:18:21.408 [DEBUG] [Thread-192345] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:18:21.408 [DEBUG] [Thread-192345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:18:21.408 [DEBUG] [Thread-192345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:18:21.408 [DEBUG] [Thread-192345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:18:21.408 [DEBUG] [Thread-192345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:18:21.408 [DEBUG] [Thread-192345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:18:21.408 [DEBUG] [Thread-192345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:18:21.408 [DEBUG] [Thread-192345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:18:21.408 [DEBUG] [Thread-192345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:18:21.408 [DEBUG] [Thread-192345] [transport.py] [_log()] client lang: <none>
2026-02-14T21:18:21.408 [DEBUG] [Thread-192345] [transport.py] [_log()] server lang: <none>
2026-02-14T21:18:21.409 [DEBUG] [Thread-192345] [transport.py] [_log()] kex follows: False
2026-02-14T21:18:21.409 [DEBUG] [Thread-192345] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:18:21.409 [DEBUG] [Thread-192345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:18:21.409 [DEBUG] [Thread-192345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:18:21.409 [DEBUG] [Thread-192345] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:18:21.410 [DEBUG] [Thread-192345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:18:21.410 [DEBUG] [Thread-192345] [transport.py] [_log()] Compression: none
2026-02-14T21:18:21.410 [DEBUG] [Thread-192345] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:18:21.441 [DEBUG] [Thread-192345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:18:21.476 [DEBUG] [Thread-192345] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:18:21.478 [DEBUG] [Thread-192345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:18:21.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:18:21.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:18:21.482 [DEBUG] [Thread-192345] [transport.py] [_log()] userauth is OK
2026-02-14T21:18:21.482 [DEBUG] [Thread-192345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:18:21.482 [DEBUG] [Thread-192345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:18:21.482 [DEBUG] [Thread-192345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:18:21.482 [DEBUG] [Thread-192345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:18:21.506 [INFO] [Thread-192345] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:18:21.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:18:22.166 [DEBUG] [Thread-192345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:18:22.166 [DEBUG] [Thread-192345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:18:22.167 [DEBUG] [Thread-192345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:18:22.207 [DEBUG] [Thread-192345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:18:22.208 [DEBUG] [Thread-192345] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:18:22.210 [DEBUG] [Thread-192345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:18:22.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:18:22.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:18:22.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:18:22.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:18:22.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:18:22.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:18:22.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:18:22.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:18:22.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:18:22.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.803933 -999.00  +10.10  23.45     63   +3.50 1 1 1 1 1     0    0 5.94 -33.16 ZNESW 33.1 23.4 166.8 33.2 10.7 -25.3 10.5 -24.4 10.3 -23.4 10.7 -24.5
2026-02-14T21:18:22.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:18:22.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:18:22.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.803933
2026-02-14T21:18:22.240 [DEBUG] [Thread-192345] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:18:22.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:18:22.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:18:22.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:18:22.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:18:22.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:18:22.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:17:41', tmtdew=8.0, humidity=57.64, cloud=0.0, wind=36.13, temperature=10.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:18:16', seeing=3.46, atlas_timestamp='2026-02-14T19:17:39.811', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.03125, 0.01425000000000054, -0.0015000000000000568, 0.006000000000000227, -0.021749999999999048, -0.014000000000001123, 0.01425000000000054, -0.0015000000000000568, -0.01249999999999929, -0.030750000000001165, -0.012500000000001066, 0.04699999999999882, 0.014249999999998764, 0.006999999999999673, -0.0129999999999999, 0.027749999999999275, -0.0015000000000000568, -0.025000000000000355, -0.04275000000000162, 0.04099999999999859, 0.061749999999998195, 0.012250000000001648, -0.011750000000001037, 0.049999999999998934, 0.029500000000000526, 0.01774999999999949, -0.011499999999999844, 0.06300000000000061, 0.040000000000000924, 0.01600000000000179, 0.0030000000000001137, -0.013250000000001094], zp_timestamp='2026-02-14T19:16:00')
2026-02-14T21:18:22.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T21:18:22.377 [DEBUG] [Thread-192348] [transport.py] [_log()] starting thread (client mode): 0xa2d03880
2026-02-14T21:18:22.378 [DEBUG] [Thread-192348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:18:22.391 [DEBUG] [Thread-192348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:18:22.391 [INFO] [Thread-192348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:18:22.399 [DEBUG] [Thread-192348] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:18:22.399 [DEBUG] [Thread-192348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:18:22.399 [DEBUG] [Thread-192348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:18:22.399 [DEBUG] [Thread-192348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:18:22.399 [DEBUG] [Thread-192348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:18:22.399 [DEBUG] [Thread-192348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:18:22.399 [DEBUG] [Thread-192348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:18:22.399 [DEBUG] [Thread-192348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:18:22.399 [DEBUG] [Thread-192348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:18:22.399 [DEBUG] [Thread-192348] [transport.py] [_log()] client lang: <none>
2026-02-14T21:18:22.399 [DEBUG] [Thread-192348] [transport.py] [_log()] server lang: <none>
2026-02-14T21:18:22.399 [DEBUG] [Thread-192348] [transport.py] [_log()] kex follows: False
2026-02-14T21:18:22.399 [DEBUG] [Thread-192348] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:18:22.399 [DEBUG] [Thread-192348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:18:22.399 [DEBUG] [Thread-192348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:18:22.399 [DEBUG] [Thread-192348] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:18:22.399 [DEBUG] [Thread-192348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:18:22.399 [DEBUG] [Thread-192348] [transport.py] [_log()] Compression: none
2026-02-14T21:18:22.399 [DEBUG] [Thread-192348] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:18:22.456 [DEBUG] [Thread-192348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:18:22.456 [DEBUG] [Thread-192348] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:18:22.457 [DEBUG] [Thread-192348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:18:22.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:18:22.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:18:22.512 [DEBUG] [Thread-192348] [transport.py] [_log()] userauth is OK
2026-02-14T21:18:22.512 [DEBUG] [Thread-192348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:18:22.512 [DEBUG] [Thread-192348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:18:22.512 [DEBUG] [Thread-192348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:18:22.513 [DEBUG] [Thread-192348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:18:22.531 [INFO] [Thread-192348] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:18:22.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T21:18:22.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:18:23.332 [DEBUG] [Thread-192348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:18:23.332 [DEBUG] [Thread-192348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:18:23.380 [DEBUG] [Thread-192348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:18:23.380 [DEBUG] [Thread-192348] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:18:23.388 [DEBUG] [Thread-192348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:18:23.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:18:23.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:18:23.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-14T21:18:23.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:18:23.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:18:23.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:18:23.467 [DEBUG] [Thread-192348] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:18:28.714 [DEBUG] [Thread-192350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:18:41.339 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:18:41.341 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:18:43.802 [DEBUG] [Thread-192351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:18:51.146 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:18:53.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:18:53.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:18:53.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-14T21:18:54.442 [DEBUG] [Thread-192352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:18:55.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 18, 16), 7.81, 58.27, 0.0, 37.85, 10.26, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:18:55.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:18:16
2026-02-14T21:18:56.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:18:56.184 [DEBUG] [Thread-192353] [transport.py] [_log()] starting thread (client mode): 0xa2d12530
2026-02-14T21:18:56.185 [DEBUG] [Thread-192353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:18:56.201 [DEBUG] [Thread-192353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:18:56.201 [INFO] [Thread-192353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:18:56.204 [DEBUG] [Thread-192353] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:18:56.204 [DEBUG] [Thread-192353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:18:56.204 [DEBUG] [Thread-192353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:18:56.204 [DEBUG] [Thread-192353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:18:56.204 [DEBUG] [Thread-192353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:18:56.204 [DEBUG] [Thread-192353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:18:56.205 [DEBUG] [Thread-192353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:18:56.205 [DEBUG] [Thread-192353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:18:56.205 [DEBUG] [Thread-192353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:18:56.205 [DEBUG] [Thread-192353] [transport.py] [_log()] client lang: <none>
2026-02-14T21:18:56.205 [DEBUG] [Thread-192353] [transport.py] [_log()] server lang: <none>
2026-02-14T21:18:56.205 [DEBUG] [Thread-192353] [transport.py] [_log()] kex follows: False
2026-02-14T21:18:56.205 [DEBUG] [Thread-192353] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:18:56.205 [DEBUG] [Thread-192353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:18:56.205 [DEBUG] [Thread-192353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:18:56.205 [DEBUG] [Thread-192353] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:18:56.205 [DEBUG] [Thread-192353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:18:56.205 [DEBUG] [Thread-192353] [transport.py] [_log()] Compression: none
2026-02-14T21:18:56.205 [DEBUG] [Thread-192353] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:18:56.226 [DEBUG] [Thread-192353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:18:56.226 [DEBUG] [Thread-192353] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:18:56.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:18:56.228 [DEBUG] [Thread-192353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:18:56.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:18:56.229 [DEBUG] [Thread-192353] [transport.py] [_log()] userauth is OK
2026-02-14T21:18:56.229 [DEBUG] [Thread-192353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:18:56.229 [DEBUG] [Thread-192353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:18:56.229 [DEBUG] [Thread-192353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:18:56.229 [DEBUG] [Thread-192353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:18:56.259 [INFO] [Thread-192353] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:18:56.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:18:56.919 [DEBUG] [Thread-192353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:18:56.919 [DEBUG] [Thread-192353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:18:56.920 [DEBUG] [Thread-192353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:18:56.960 [DEBUG] [Thread-192353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:18:56.960 [DEBUG] [Thread-192353] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:18:56.962 [DEBUG] [Thread-192353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:18:56.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:18:56.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:18:56.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:18:56.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:18:56.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:18:56.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:18:56.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:18:56.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:18:56.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:18:56.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.804280 -999.00  +10.10  26.44     63   +3.50 1 1 1 1 1     0    0 5.93 -34.24 ZNESW 28.9 26.4 162.7 39.4 10.7 -25.6 10.5 -24.2 10.3 -23.4 10.7 -24.6
2026-02-14T21:18:56.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:18:56.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:18:56.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.804280
2026-02-14T21:18:56.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:18:56.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:18:56.992 [DEBUG] [Thread-192353] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:18:56.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:18:56.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:18:56.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:18:56.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:18:16', tmtdew=7.81, humidity=58.27, cloud=0.0, wind=37.85, temperature=10.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:18:52', seeing=3.85, atlas_timestamp='2026-02-14T19:18:09.792', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.03125, 0.01425000000000054, -0.0015000000000000568, 0.006000000000000227, -0.021749999999999048, -0.014000000000001123, 0.01425000000000054, -0.0015000000000000568, -0.01249999999999929, -0.030750000000001165, -0.012500000000001066, 0.04699999999999882, 0.014249999999998764, 0.006999999999999673, -0.0129999999999999, 0.027749999999999275, -0.0015000000000000568, -0.025000000000000355, -0.04275000000000162, 0.04099999999999859, 0.061749999999998195, 0.012250000000001648, -0.011750000000001037, 0.049999999999998934, 0.029500000000000526, 0.01774999999999949, -0.011499999999999844, 0.06300000000000061, 0.040000000000000924, 0.01600000000000179, 0.0030000000000001137, -0.013250000000001094], zp_timestamp='2026-02-14T19:16:00')
2026-02-14T21:18:57.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T21:18:57.080 [DEBUG] [Thread-192356] [transport.py] [_log()] starting thread (client mode): 0xa2d7bd30
2026-02-14T21:18:57.080 [DEBUG] [Thread-192356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:18:57.094 [DEBUG] [Thread-192356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:18:57.094 [INFO] [Thread-192356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:18:57.102 [DEBUG] [Thread-192356] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:18:57.102 [DEBUG] [Thread-192356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:18:57.102 [DEBUG] [Thread-192356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:18:57.102 [DEBUG] [Thread-192356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:18:57.102 [DEBUG] [Thread-192356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:18:57.102 [DEBUG] [Thread-192356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:18:57.102 [DEBUG] [Thread-192356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:18:57.102 [DEBUG] [Thread-192356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:18:57.103 [DEBUG] [Thread-192356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:18:57.103 [DEBUG] [Thread-192356] [transport.py] [_log()] client lang: <none>
2026-02-14T21:18:57.103 [DEBUG] [Thread-192356] [transport.py] [_log()] server lang: <none>
2026-02-14T21:18:57.103 [DEBUG] [Thread-192356] [transport.py] [_log()] kex follows: False
2026-02-14T21:18:57.103 [DEBUG] [Thread-192356] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:18:57.103 [DEBUG] [Thread-192356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:18:57.103 [DEBUG] [Thread-192356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:18:57.103 [DEBUG] [Thread-192356] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:18:57.103 [DEBUG] [Thread-192356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:18:57.103 [DEBUG] [Thread-192356] [transport.py] [_log()] Compression: none
2026-02-14T21:18:57.104 [DEBUG] [Thread-192356] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:18:57.166 [DEBUG] [Thread-192356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:18:57.167 [DEBUG] [Thread-192356] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:18:57.167 [DEBUG] [Thread-192356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:18:57.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:18:57.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:18:57.224 [DEBUG] [Thread-192356] [transport.py] [_log()] userauth is OK
2026-02-14T21:18:57.224 [DEBUG] [Thread-192356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:18:57.224 [DEBUG] [Thread-192356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:18:57.224 [DEBUG] [Thread-192356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:18:57.224 [DEBUG] [Thread-192356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:18:57.240 [INFO] [Thread-192356] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:18:57.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-14T21:18:57.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:18:58.058 [DEBUG] [Thread-192356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:18:58.058 [DEBUG] [Thread-192356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:18:58.106 [DEBUG] [Thread-192356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:18:58.106 [DEBUG] [Thread-192356] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:18:58.114 [DEBUG] [Thread-192356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:18:58.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:18:58.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-14T21:18:58.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-14T21:18:58.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:18:58.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:18:58.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:18:58.150 [DEBUG] [Thread-192356] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:18:58.823 [DEBUG] [Thread-192358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:19:13.880 [DEBUG] [Thread-192359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:19:28.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:19:28.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:19:28.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-14T21:19:28.911 [DEBUG] [Thread-192360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:19:30.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 18, 52), 7.81, 58.25, 0.0, 31.62, 10.19, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:19:30.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:18:52
2026-02-14T21:19:30.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:19:30.707 [DEBUG] [Thread-192361] [transport.py] [_log()] starting thread (client mode): 0xa2d6c700
2026-02-14T21:19:30.707 [DEBUG] [Thread-192361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:19:30.728 [DEBUG] [Thread-192361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:19:30.728 [INFO] [Thread-192361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:19:30.731 [DEBUG] [Thread-192361] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:19:30.731 [DEBUG] [Thread-192361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:19:30.731 [DEBUG] [Thread-192361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:19:30.731 [DEBUG] [Thread-192361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:19:30.731 [DEBUG] [Thread-192361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:19:30.731 [DEBUG] [Thread-192361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:19:30.731 [DEBUG] [Thread-192361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:19:30.731 [DEBUG] [Thread-192361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:19:30.731 [DEBUG] [Thread-192361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:19:30.731 [DEBUG] [Thread-192361] [transport.py] [_log()] client lang: <none>
2026-02-14T21:19:30.732 [DEBUG] [Thread-192361] [transport.py] [_log()] server lang: <none>
2026-02-14T21:19:30.732 [DEBUG] [Thread-192361] [transport.py] [_log()] kex follows: False
2026-02-14T21:19:30.732 [DEBUG] [Thread-192361] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:19:30.732 [DEBUG] [Thread-192361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:19:30.732 [DEBUG] [Thread-192361] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:19:30.732 [DEBUG] [Thread-192361] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:19:30.732 [DEBUG] [Thread-192361] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:19:30.732 [DEBUG] [Thread-192361] [transport.py] [_log()] Compression: none
2026-02-14T21:19:30.732 [DEBUG] [Thread-192361] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:19:30.748 [DEBUG] [Thread-192361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:19:30.748 [DEBUG] [Thread-192361] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:19:30.748 [DEBUG] [Thread-192361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:19:30.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:19:30.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:19:30.749 [DEBUG] [Thread-192361] [transport.py] [_log()] userauth is OK
2026-02-14T21:19:30.749 [DEBUG] [Thread-192361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:19:30.749 [DEBUG] [Thread-192361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:19:30.749 [DEBUG] [Thread-192361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:19:30.749 [DEBUG] [Thread-192361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:19:30.759 [INFO] [Thread-192361] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:19:30.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:19:31.385 [DEBUG] [Thread-192361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:19:31.385 [DEBUG] [Thread-192361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:19:31.385 [DEBUG] [Thread-192361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:19:31.426 [DEBUG] [Thread-192361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:19:31.426 [DEBUG] [Thread-192361] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:19:31.428 [DEBUG] [Thread-192361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:19:31.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:19:31.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:19:31.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:19:31.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:19:31.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:19:31.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:19:31.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:19:31.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:19:31.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:19:31.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.804627 -999.00  +10.10  26.85     63   +3.50 1 1 1 1 1     0    0 5.96 -35.73 ZNESW 27.6 26.9 155.8 39.1 10.7 -25.4 10.5 -24.3 10.3 -23.5 10.6 -24.5
2026-02-14T21:19:31.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:19:31.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:19:31.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.804627
2026-02-14T21:19:31.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:19:31.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:19:31.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:19:31.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:19:31.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:19:31.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:18:52', tmtdew=7.81, humidity=58.25, cloud=0.0, wind=31.62, temperature=10.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:18:52', seeing=3.85, atlas_timestamp='2026-02-14T19:18:39.773', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.03125, 0.01425000000000054, -0.0015000000000000568, 0.006000000000000227, -0.021749999999999048, -0.014000000000001123, 0.01425000000000054, -0.0015000000000000568, -0.01249999999999929, -0.030750000000001165, -0.012500000000001066, 0.04699999999999882, 0.014249999999998764, 0.006999999999999673, -0.0129999999999999, 0.027749999999999275, -0.0015000000000000568, -0.025000000000000355, -0.04275000000000162, 0.04099999999999859, 0.061749999999998195, 0.012250000000001648, -0.011750000000001037, 0.049999999999998934, 0.029500000000000526, 0.01774999999999949, -0.011499999999999844, 0.06300000000000061, 0.040000000000000924, 0.01600000000000179, 0.0030000000000001137, -0.013250000000001094], zp_timestamp='2026-02-14T19:16:00')
2026-02-14T21:19:31.447 [DEBUG] [Thread-192361] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:19:31.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T21:19:31.530 [DEBUG] [Thread-192364] [transport.py] [_log()] starting thread (client mode): 0xa5741b40
2026-02-14T21:19:31.530 [DEBUG] [Thread-192364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:19:31.545 [DEBUG] [Thread-192364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:19:31.545 [INFO] [Thread-192364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:19:31.552 [DEBUG] [Thread-192364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:19:31.552 [DEBUG] [Thread-192364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:19:31.552 [DEBUG] [Thread-192364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:19:31.552 [DEBUG] [Thread-192364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:19:31.552 [DEBUG] [Thread-192364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:19:31.552 [DEBUG] [Thread-192364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:19:31.552 [DEBUG] [Thread-192364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:19:31.552 [DEBUG] [Thread-192364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:19:31.553 [DEBUG] [Thread-192364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:19:31.553 [DEBUG] [Thread-192364] [transport.py] [_log()] client lang: <none>
2026-02-14T21:19:31.553 [DEBUG] [Thread-192364] [transport.py] [_log()] server lang: <none>
2026-02-14T21:19:31.553 [DEBUG] [Thread-192364] [transport.py] [_log()] kex follows: False
2026-02-14T21:19:31.553 [DEBUG] [Thread-192364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:19:31.553 [DEBUG] [Thread-192364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:19:31.553 [DEBUG] [Thread-192364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:19:31.553 [DEBUG] [Thread-192364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:19:31.553 [DEBUG] [Thread-192364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:19:31.553 [DEBUG] [Thread-192364] [transport.py] [_log()] Compression: none
2026-02-14T21:19:31.553 [DEBUG] [Thread-192364] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:19:31.611 [DEBUG] [Thread-192364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:19:31.611 [DEBUG] [Thread-192364] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:19:31.611 [DEBUG] [Thread-192364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:19:31.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:19:31.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:19:31.668 [DEBUG] [Thread-192364] [transport.py] [_log()] userauth is OK
2026-02-14T21:19:31.668 [DEBUG] [Thread-192364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:19:31.668 [DEBUG] [Thread-192364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:19:31.668 [DEBUG] [Thread-192364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:19:31.668 [DEBUG] [Thread-192364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:19:31.682 [INFO] [Thread-192364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:19: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-14T21:19:31.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:19:32.575 [DEBUG] [Thread-192364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:19:32.575 [DEBUG] [Thread-192364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:19:32.623 [DEBUG] [Thread-192364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:19:32.623 [DEBUG] [Thread-192364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:19:32.631 [DEBUG] [Thread-192364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:19:32.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:19:32.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-14T21:19:32.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-14T21:19:32.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:19:32.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:19:32.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:19:32.663 [DEBUG] [Thread-192364] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:19:41.546 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:19:41.547 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:19:43.939 [DEBUG] [Thread-192366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:19:54.698 [DEBUG] [Thread-192367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:19:58.977 [DEBUG] [Thread-192368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:20:02.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:20:02.682 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:20:02.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-14T21:20:04.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 19, 28), 7.78, 58.38, 0.0, 32.47, 10.24, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:20:04.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:19:28
2026-02-14T21:20:05.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:20:05.474 [DEBUG] [Thread-192369] [transport.py] [_log()] starting thread (client mode): 0xa5741420
2026-02-14T21:20:05.474 [DEBUG] [Thread-192369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:20:05.484 [DEBUG] [Thread-192369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:20:05.484 [INFO] [Thread-192369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:20:05.485 [DEBUG] [Thread-192369] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:20:05.485 [DEBUG] [Thread-192369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:20:05.485 [DEBUG] [Thread-192369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:20:05.485 [DEBUG] [Thread-192369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:20:05.485 [DEBUG] [Thread-192369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:20:05.485 [DEBUG] [Thread-192369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:20:05.485 [DEBUG] [Thread-192369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:20:05.485 [DEBUG] [Thread-192369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:20:05.485 [DEBUG] [Thread-192369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:20:05.485 [DEBUG] [Thread-192369] [transport.py] [_log()] client lang: <none>
2026-02-14T21:20:05.485 [DEBUG] [Thread-192369] [transport.py] [_log()] server lang: <none>
2026-02-14T21:20:05.485 [DEBUG] [Thread-192369] [transport.py] [_log()] kex follows: False
2026-02-14T21:20:05.485 [DEBUG] [Thread-192369] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:20:05.485 [DEBUG] [Thread-192369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:20:05.485 [DEBUG] [Thread-192369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:20:05.485 [DEBUG] [Thread-192369] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:20:05.485 [DEBUG] [Thread-192369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:20:05.485 [DEBUG] [Thread-192369] [transport.py] [_log()] Compression: none
2026-02-14T21:20:05.485 [DEBUG] [Thread-192369] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:20:05.493 [DEBUG] [Thread-192369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:20:05.493 [DEBUG] [Thread-192369] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:20:05.493 [DEBUG] [Thread-192369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:20:05.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:20:05.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:20:05.493 [DEBUG] [Thread-192369] [transport.py] [_log()] userauth is OK
2026-02-14T21:20:05.494 [DEBUG] [Thread-192369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:20:05.494 [DEBUG] [Thread-192369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:20:05.494 [DEBUG] [Thread-192369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:20:05.494 [DEBUG] [Thread-192369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:20:05.502 [INFO] [Thread-192369] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:20:05.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:20:14.002 [DEBUG] [Thread-192371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:20:14.571 [DEBUG] [Thread-192369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:20:14.571 [DEBUG] [Thread-192369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:20:14.571 [DEBUG] [Thread-192369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:20:14.612 [DEBUG] [Thread-192369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:20:14.612 [DEBUG] [Thread-192369] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:20:14.614 [DEBUG] [Thread-192369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:20:14.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:20:14.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:20:14.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:20:14.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:20:14.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:20:14.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:20:14.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:20:14.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:20:14.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:20:14.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.805322 -999.00  +10.10  25.76     63   +3.50 1 1 1 1 1     0    0 5.88 -36.83 ZNESW 19.9 25.8 148.0 45.6 10.7 -25.3 10.5 -24.5 10.3 -23.5 10.6 -24.7
2026-02-14T21:20:14.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:20:14.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:20:14.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.805322
2026-02-14T21:20:14.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:20:14.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:20:14.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:20:14.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:20:14.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:20:14.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:19:28', tmtdew=7.78, humidity=58.38, cloud=0.0, wind=32.47, temperature=10.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:19:28', seeing=4.92, atlas_timestamp='2026-02-14T19:19:39.821', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.03125, 0.01425000000000054, -0.0015000000000000568, 0.006000000000000227, -0.021749999999999048, -0.014000000000001123, 0.01425000000000054, -0.0015000000000000568, -0.01249999999999929, -0.030750000000001165, -0.012500000000001066, 0.04699999999999882, 0.014249999999998764, 0.006999999999999673, -0.0129999999999999, 0.027749999999999275, -0.0015000000000000568, -0.025000000000000355, -0.04275000000000162, 0.04099999999999859, 0.061749999999998195, 0.012250000000001648, -0.011750000000001037, 0.049999999999998934, 0.029500000000000526, 0.01774999999999949, -0.011499999999999844, 0.06300000000000061, 0.040000000000000924, 0.01600000000000179, 0.0030000000000001137, -0.013250000000001094], zp_timestamp='2026-02-14T19:16:00')
2026-02-14T21:20:14.643 [DEBUG] [Thread-192369] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:20:14.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-14T21:20:14.731 [DEBUG] [Thread-192373] [transport.py] [_log()] starting thread (client mode): 0xa57e2c80
2026-02-14T21:20:14.732 [DEBUG] [Thread-192373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:20:14.746 [DEBUG] [Thread-192373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:20:14.746 [INFO] [Thread-192373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:20:14.754 [DEBUG] [Thread-192373] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:20:14.754 [DEBUG] [Thread-192373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:20:14.754 [DEBUG] [Thread-192373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:20:14.754 [DEBUG] [Thread-192373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:20:14.754 [DEBUG] [Thread-192373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:20:14.754 [DEBUG] [Thread-192373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:20:14.754 [DEBUG] [Thread-192373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:20:14.754 [DEBUG] [Thread-192373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:20:14.754 [DEBUG] [Thread-192373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:20:14.754 [DEBUG] [Thread-192373] [transport.py] [_log()] client lang: <none>
2026-02-14T21:20:14.754 [DEBUG] [Thread-192373] [transport.py] [_log()] server lang: <none>
2026-02-14T21:20:14.754 [DEBUG] [Thread-192373] [transport.py] [_log()] kex follows: False
2026-02-14T21:20:14.754 [DEBUG] [Thread-192373] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:20:14.754 [DEBUG] [Thread-192373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:20:14.754 [DEBUG] [Thread-192373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:20:14.754 [DEBUG] [Thread-192373] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:20:14.754 [DEBUG] [Thread-192373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:20:14.754 [DEBUG] [Thread-192373] [transport.py] [_log()] Compression: none
2026-02-14T21:20:14.754 [DEBUG] [Thread-192373] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:20:14.811 [DEBUG] [Thread-192373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:20:14.811 [DEBUG] [Thread-192373] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:20:14.811 [DEBUG] [Thread-192373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:20:14.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:20:14.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:20:14.868 [DEBUG] [Thread-192373] [transport.py] [_log()] userauth is OK
2026-02-14T21:20:14.868 [DEBUG] [Thread-192373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:20:14.868 [DEBUG] [Thread-192373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:20:14.868 [DEBUG] [Thread-192373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:20:14.868 [DEBUG] [Thread-192373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:20:14.884 [INFO] [Thread-192373] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:20:14.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-14T21:20:14.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:20:15.684 [DEBUG] [Thread-192373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:20:15.684 [DEBUG] [Thread-192373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:20:15.733 [DEBUG] [Thread-192373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:20:15.733 [DEBUG] [Thread-192373] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:20:15.742 [DEBUG] [Thread-192373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:20:15.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:20:15.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-14T21:20:15.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-14T21:20:15.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:20:15.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:20:15.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:20:15.773 [DEBUG] [Thread-192373] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:20:24.933 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:20:29.026 [DEBUG] [Thread-192375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:20:41.766 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:20:41.766 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:20:44.071 [DEBUG] [Thread-192376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:20:45.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:20:45.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:20:45.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-14T21:20:47.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 20, 39), 7.93, 57.93, 0.0, 41.81, 10.59, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:20:47.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:20:39
2026-02-14T21:20:47.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:20:48.121 [DEBUG] [Thread-192377] [transport.py] [_log()] starting thread (client mode): 0xa57e10c0
2026-02-14T21:20:48.121 [DEBUG] [Thread-192377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:20:48.141 [DEBUG] [Thread-192377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:20:48.141 [INFO] [Thread-192377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:20:48.145 [DEBUG] [Thread-192377] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:20:48.145 [DEBUG] [Thread-192377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:20:48.145 [DEBUG] [Thread-192377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:20:48.145 [DEBUG] [Thread-192377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:20:48.145 [DEBUG] [Thread-192377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:20:48.145 [DEBUG] [Thread-192377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:20:48.145 [DEBUG] [Thread-192377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:20:48.145 [DEBUG] [Thread-192377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:20:48.145 [DEBUG] [Thread-192377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:20:48.145 [DEBUG] [Thread-192377] [transport.py] [_log()] client lang: <none>
2026-02-14T21:20:48.145 [DEBUG] [Thread-192377] [transport.py] [_log()] server lang: <none>
2026-02-14T21:20:48.145 [DEBUG] [Thread-192377] [transport.py] [_log()] kex follows: False
2026-02-14T21:20:48.145 [DEBUG] [Thread-192377] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:20:48.145 [DEBUG] [Thread-192377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:20:48.145 [DEBUG] [Thread-192377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:20:48.145 [DEBUG] [Thread-192377] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:20:48.145 [DEBUG] [Thread-192377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:20:48.145 [DEBUG] [Thread-192377] [transport.py] [_log()] Compression: none
2026-02-14T21:20:48.145 [DEBUG] [Thread-192377] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:20:48.164 [DEBUG] [Thread-192377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:20:48.164 [DEBUG] [Thread-192377] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:20:48.165 [DEBUG] [Thread-192377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:20:48.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:20:48.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:20:48.165 [DEBUG] [Thread-192377] [transport.py] [_log()] userauth is OK
2026-02-14T21:20:48.165 [DEBUG] [Thread-192377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:20:48.165 [DEBUG] [Thread-192377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:20:48.165 [DEBUG] [Thread-192377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:20:48.165 [DEBUG] [Thread-192377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:20:48.181 [INFO] [Thread-192377] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:20:48.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:20:48.816 [DEBUG] [Thread-192377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:20:48.817 [DEBUG] [Thread-192377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:20:48.817 [DEBUG] [Thread-192377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:20:48.858 [DEBUG] [Thread-192377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:20:48.858 [DEBUG] [Thread-192377] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:20:48.860 [DEBUG] [Thread-192377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:20:48.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:20:48.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:20:48.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:20:48.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:20:48.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:20:48.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:20:48.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:20:48.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:20:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:20:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.805668 -999.00  +10.10  20.13     63   +3.50 1 1 1 1 1     0    0 5.74 -39.03 ZNESW 26.5 20.1 152.8 37.5 10.7 -25.4 10.5 -24.4 10.3 -23.3 10.6 -24.5
2026-02-14T21:20:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:20:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:20:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.805668
2026-02-14T21:20:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:20:48.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:20:48.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:20:48.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:20:48.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:20:48.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:20:39', tmtdew=7.93, humidity=57.93, cloud=0.0, wind=41.81, temperature=10.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:20:39', seeing=4.93, atlas_timestamp='2026-02-14T19:20:09.715', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.03125, 0.01425000000000054, -0.0015000000000000568, 0.006000000000000227, -0.021749999999999048, -0.014000000000001123, 0.01425000000000054, -0.0015000000000000568, -0.01249999999999929, -0.030750000000001165, -0.012500000000001066, 0.04699999999999882, 0.014249999999998764, 0.006999999999999673, -0.0129999999999999, 0.027749999999999275, -0.0015000000000000568, -0.025000000000000355, -0.04275000000000162, 0.04099999999999859, 0.061749999999998195, 0.012250000000001648, -0.011750000000001037, 0.049999999999998934, 0.029500000000000526, 0.01774999999999949, -0.011499999999999844, 0.06300000000000061, 0.040000000000000924, 0.01600000000000179, 0.0030000000000001137, -0.013250000000001094], zp_timestamp='2026-02-14T19:18:00')
2026-02-14T21:20:48.879 [DEBUG] [Thread-192377] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:20:48.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-14T21:20:48.966 [DEBUG] [Thread-192380] [transport.py] [_log()] starting thread (client mode): 0xa57e3040
2026-02-14T21:20:48.966 [DEBUG] [Thread-192380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:20:48.983 [DEBUG] [Thread-192380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:20:48.983 [INFO] [Thread-192380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:20:48.991 [DEBUG] [Thread-192380] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:20:48.991 [DEBUG] [Thread-192380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:20:48.991 [DEBUG] [Thread-192380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:20:48.991 [DEBUG] [Thread-192380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:20:48.991 [DEBUG] [Thread-192380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:20:48.991 [DEBUG] [Thread-192380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:20:48.991 [DEBUG] [Thread-192380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:20:48.991 [DEBUG] [Thread-192380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:20:48.991 [DEBUG] [Thread-192380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:20:48.991 [DEBUG] [Thread-192380] [transport.py] [_log()] client lang: <none>
2026-02-14T21:20:48.991 [DEBUG] [Thread-192380] [transport.py] [_log()] server lang: <none>
2026-02-14T21:20:48.991 [DEBUG] [Thread-192380] [transport.py] [_log()] kex follows: False
2026-02-14T21:20:48.991 [DEBUG] [Thread-192380] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:20:48.991 [DEBUG] [Thread-192380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:20:48.991 [DEBUG] [Thread-192380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:20:48.991 [DEBUG] [Thread-192380] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:20:48.991 [DEBUG] [Thread-192380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:20:48.991 [DEBUG] [Thread-192380] [transport.py] [_log()] Compression: none
2026-02-14T21:20:48.991 [DEBUG] [Thread-192380] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:20:49.048 [DEBUG] [Thread-192380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:20:49.048 [DEBUG] [Thread-192380] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:20:49.048 [DEBUG] [Thread-192380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:20:49.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:20:49.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:20:49.104 [DEBUG] [Thread-192380] [transport.py] [_log()] userauth is OK
2026-02-14T21:20:49.104 [DEBUG] [Thread-192380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:20:49.104 [DEBUG] [Thread-192380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:20:49.104 [DEBUG] [Thread-192380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:20:49.104 [DEBUG] [Thread-192380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:20:49.118 [INFO] [Thread-192380] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:20:49.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-14T21:20:49.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:20:49.916 [DEBUG] [Thread-192380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:20:49.916 [DEBUG] [Thread-192380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:20:49.963 [DEBUG] [Thread-192380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:20:49.964 [DEBUG] [Thread-192380] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:20:49.971 [DEBUG] [Thread-192380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:20:49.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:20:49.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:20:49.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-14T21:20:49.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:20:49.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:20:49.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:20:50.003 [DEBUG] [Thread-192380] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:20:55.085 [DEBUG] [Thread-192382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:20:59.095 [DEBUG] [Thread-192383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:21:14.126 [DEBUG] [Thread-192384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:21:20.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:21:20.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:21:20.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-14T21:21:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 20, 39), 7.93, 57.93, 0.0, 41.81, 10.59, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:21:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:20:39
2026-02-14T21:21:22.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:21:22.655 [DEBUG] [Thread-192385] [transport.py] [_log()] starting thread (client mode): 0xa57430a0
2026-02-14T21:21:22.655 [DEBUG] [Thread-192385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:21:22.673 [DEBUG] [Thread-192385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:21:22.673 [INFO] [Thread-192385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:21:22.676 [DEBUG] [Thread-192385] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:21:22.676 [DEBUG] [Thread-192385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:21:22.676 [DEBUG] [Thread-192385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:21:22.676 [DEBUG] [Thread-192385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:21:22.676 [DEBUG] [Thread-192385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:21:22.676 [DEBUG] [Thread-192385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:21:22.676 [DEBUG] [Thread-192385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:21:22.676 [DEBUG] [Thread-192385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:21:22.676 [DEBUG] [Thread-192385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:21:22.676 [DEBUG] [Thread-192385] [transport.py] [_log()] client lang: <none>
2026-02-14T21:21:22.676 [DEBUG] [Thread-192385] [transport.py] [_log()] server lang: <none>
2026-02-14T21:21:22.676 [DEBUG] [Thread-192385] [transport.py] [_log()] kex follows: False
2026-02-14T21:21:22.676 [DEBUG] [Thread-192385] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:21:22.676 [DEBUG] [Thread-192385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:21:22.676 [DEBUG] [Thread-192385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:21:22.676 [DEBUG] [Thread-192385] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:21:22.676 [DEBUG] [Thread-192385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:21:22.676 [DEBUG] [Thread-192385] [transport.py] [_log()] Compression: none
2026-02-14T21:21:22.676 [DEBUG] [Thread-192385] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:21:22.695 [DEBUG] [Thread-192385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:21:22.696 [DEBUG] [Thread-192385] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:21:22.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:21:22.697 [DEBUG] [Thread-192385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:21:22.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:21:22.699 [DEBUG] [Thread-192385] [transport.py] [_log()] userauth is OK
2026-02-14T21:21:22.699 [DEBUG] [Thread-192385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:21:22.699 [DEBUG] [Thread-192385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:21:22.699 [DEBUG] [Thread-192385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:21:22.699 [DEBUG] [Thread-192385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:21:22.730 [INFO] [Thread-192385] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:21:22.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:21:23.294 [DEBUG] [Thread-192385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:21:23.294 [DEBUG] [Thread-192385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:21:23.295 [DEBUG] [Thread-192385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:21:23.335 [DEBUG] [Thread-192385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:21:23.335 [DEBUG] [Thread-192385] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:21:23.337 [DEBUG] [Thread-192385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:21:23.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:21:23.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:21:23.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:21:23.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:21:23.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:21:23.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:21:23.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:21:23.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:21:23.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:21:23.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.806016 -999.00  +10.10  24.70     63   +3.50 1 1 1 1 1     0    0 5.78 -41.56 ZNESW 19.4 24.7 157.6 38.7 10.7 -25.4 10.5 -24.4 10.3 -23.3 10.6 -24.4
2026-02-14T21:21:23.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:21:23.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:21:23.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.806016
2026-02-14T21:21:23.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:21:23.373 [DEBUG] [Thread-192385] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:21:23.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:21:23.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:21:23.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:21:23.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:21:23.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:20:39', tmtdew=7.93, humidity=57.93, cloud=0.0, wind=41.81, temperature=10.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:21:15', seeing=5.62, atlas_timestamp='2026-02-14T19:20:39.782', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.03125, 0.01425000000000054, -0.0015000000000000568, 0.006000000000000227, -0.021749999999999048, -0.014000000000001123, 0.01425000000000054, -0.0015000000000000568, -0.01249999999999929, -0.030750000000001165, -0.012500000000001066, 0.04699999999999882, 0.014249999999998764, 0.006999999999999673, -0.0129999999999999, 0.027749999999999275, -0.0015000000000000568, -0.025000000000000355, -0.04275000000000162, 0.04099999999999859, 0.061749999999998195, 0.012250000000001648, -0.011750000000001037, 0.049999999999998934, 0.029500000000000526, 0.01774999999999949, -0.011499999999999844, 0.06300000000000061, 0.040000000000000924, 0.01600000000000179, 0.0030000000000001137, -0.013250000000001094], zp_timestamp='2026-02-14T19:18:00')
2026-02-14T21:21:23.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-14T21:21:23.462 [DEBUG] [Thread-192388] [transport.py] [_log()] starting thread (client mode): 0xa57425f0
2026-02-14T21:21:23.462 [DEBUG] [Thread-192388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:21:23.476 [DEBUG] [Thread-192388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:21:23.476 [INFO] [Thread-192388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:21:23.493 [DEBUG] [Thread-192388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:21:23.493 [DEBUG] [Thread-192388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:21:23.494 [DEBUG] [Thread-192388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:21:23.494 [DEBUG] [Thread-192388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:21:23.494 [DEBUG] [Thread-192388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:21:23.494 [DEBUG] [Thread-192388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:21:23.494 [DEBUG] [Thread-192388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:21:23.494 [DEBUG] [Thread-192388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:21:23.494 [DEBUG] [Thread-192388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:21:23.494 [DEBUG] [Thread-192388] [transport.py] [_log()] client lang: <none>
2026-02-14T21:21:23.494 [DEBUG] [Thread-192388] [transport.py] [_log()] server lang: <none>
2026-02-14T21:21:23.494 [DEBUG] [Thread-192388] [transport.py] [_log()] kex follows: False
2026-02-14T21:21:23.494 [DEBUG] [Thread-192388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:21:23.494 [DEBUG] [Thread-192388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:21:23.494 [DEBUG] [Thread-192388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:21:23.494 [DEBUG] [Thread-192388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:21:23.494 [DEBUG] [Thread-192388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:21:23.494 [DEBUG] [Thread-192388] [transport.py] [_log()] Compression: none
2026-02-14T21:21:23.494 [DEBUG] [Thread-192388] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:21:23.539 [DEBUG] [Thread-192388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:21:23.539 [DEBUG] [Thread-192388] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:21:23.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:21:23.539 [DEBUG] [Thread-192388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:21:23.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:21:23.596 [DEBUG] [Thread-192388] [transport.py] [_log()] userauth is OK
2026-02-14T21:21:23.597 [DEBUG] [Thread-192388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:21:23.597 [DEBUG] [Thread-192388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:21:23.597 [DEBUG] [Thread-192388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:21:23.597 [DEBUG] [Thread-192388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:21:23.613 [INFO] [Thread-192388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:21:23.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-14T21:21:23.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:21:24.441 [DEBUG] [Thread-192388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:21:24.441 [DEBUG] [Thread-192388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:21:24.489 [DEBUG] [Thread-192388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:21:24.489 [DEBUG] [Thread-192388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:21:24.497 [DEBUG] [Thread-192388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:21:24.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:21:24.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-14T21:21:24.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:21:24.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:21:24.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:21:24.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:21:24.531 [DEBUG] [Thread-192388] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:21:29.150 [DEBUG] [Thread-192390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:21:41.965 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:21:41.967 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:21:44.211 [DEBUG] [Thread-192391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:21:54.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:21:54.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:21:54.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-14T21:21:55.513 [DEBUG] [Thread-192392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:21:56.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 21, 14), 7.76, 58.48, 0.0, 38.45, 10.19, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:21:56.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:21:14
2026-02-14T21:21:56.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:21:57.005 [DEBUG] [Thread-192393] [transport.py] [_log()] starting thread (client mode): 0xa57405b0
2026-02-14T21:21:57.005 [DEBUG] [Thread-192393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:21:57.027 [DEBUG] [Thread-192393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:21:57.027 [INFO] [Thread-192393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:21:57.029 [DEBUG] [Thread-192393] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:21:57.029 [DEBUG] [Thread-192393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:21:57.029 [DEBUG] [Thread-192393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:21:57.030 [DEBUG] [Thread-192393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:21:57.030 [DEBUG] [Thread-192393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:21:57.030 [DEBUG] [Thread-192393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:21:57.030 [DEBUG] [Thread-192393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:21:57.030 [DEBUG] [Thread-192393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:21:57.030 [DEBUG] [Thread-192393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:21:57.030 [DEBUG] [Thread-192393] [transport.py] [_log()] client lang: <none>
2026-02-14T21:21:57.030 [DEBUG] [Thread-192393] [transport.py] [_log()] server lang: <none>
2026-02-14T21:21:57.030 [DEBUG] [Thread-192393] [transport.py] [_log()] kex follows: False
2026-02-14T21:21:57.030 [DEBUG] [Thread-192393] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:21:57.030 [DEBUG] [Thread-192393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:21:57.030 [DEBUG] [Thread-192393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:21:57.030 [DEBUG] [Thread-192393] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:21:57.031 [DEBUG] [Thread-192393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:21:57.031 [DEBUG] [Thread-192393] [transport.py] [_log()] Compression: none
2026-02-14T21:21:57.031 [DEBUG] [Thread-192393] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:21:57.041 [DEBUG] [Thread-192393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:21:57.041 [DEBUG] [Thread-192393] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:21:57.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:21:57.043 [DEBUG] [Thread-192393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:21:57.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:21:57.045 [DEBUG] [Thread-192393] [transport.py] [_log()] userauth is OK
2026-02-14T21:21:57.045 [DEBUG] [Thread-192393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:21:57.045 [DEBUG] [Thread-192393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:21:57.045 [DEBUG] [Thread-192393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:21:57.045 [DEBUG] [Thread-192393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:21:57.061 [INFO] [Thread-192393] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:21:57.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:21:57.685 [DEBUG] [Thread-192393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:21:57.685 [DEBUG] [Thread-192393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:21:57.686 [DEBUG] [Thread-192393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:21:57.726 [DEBUG] [Thread-192393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:21:57.726 [DEBUG] [Thread-192393] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:21:57.729 [DEBUG] [Thread-192393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:21:57.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:21:57.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:21:57.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:21:57.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:21:57.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:21:57.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:21:57.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:21:57.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:21:57.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:21:57.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.806363 -999.00  +10.10  30.40     63   +3.50 1 1 2 1 1     0    0 5.79 -39.96 ZNESW 28.0 30.4 161.8 41.0 10.6 -25.3 10.4 -24.4 10.2 -23.4 10.6 -24.6
2026-02-14T21:21:57.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:21:57.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:21:57.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.806363
2026-02-14T21:21:57.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:21:57.755 [DEBUG] [Thread-192393] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:21:57.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:21:57.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:21:57.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:21:57.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:21:57.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:21:14', tmtdew=7.76, humidity=58.48, cloud=0.0, wind=38.45, temperature=10.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:21:50', seeing=5.24, atlas_timestamp='2026-02-14T19:21:09.763', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.03125, 0.01425000000000054, -0.0015000000000000568, 0.006000000000000227, -0.021749999999999048, -0.014000000000001123, 0.01425000000000054, -0.0015000000000000568, -0.01249999999999929, -0.030750000000001165, -0.012500000000001066, 0.04699999999999882, 0.014249999999998764, 0.006999999999999673, -0.0129999999999999, 0.027749999999999275, -0.0015000000000000568, -0.025000000000000355, -0.04275000000000162, 0.04099999999999859, 0.061749999999998195, 0.012250000000001648, -0.011750000000001037, 0.049999999999998934, 0.029500000000000526, 0.01774999999999949, -0.011499999999999844, 0.06300000000000061, 0.040000000000000924, 0.01600000000000179, 0.0030000000000001137, -0.013250000000001094], zp_timestamp='2026-02-14T19:18:00')
2026-02-14T21:21:57.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-14T21:21:57.853 [DEBUG] [Thread-192396] [transport.py] [_log()] starting thread (client mode): 0xa5742110
2026-02-14T21:21:57.853 [DEBUG] [Thread-192396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:21:57.867 [DEBUG] [Thread-192396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:21:57.867 [INFO] [Thread-192396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:21:57.875 [DEBUG] [Thread-192396] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:21:57.875 [DEBUG] [Thread-192396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:21:57.875 [DEBUG] [Thread-192396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:21:57.875 [DEBUG] [Thread-192396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:21:57.875 [DEBUG] [Thread-192396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:21:57.875 [DEBUG] [Thread-192396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:21:57.875 [DEBUG] [Thread-192396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:21:57.875 [DEBUG] [Thread-192396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:21:57.875 [DEBUG] [Thread-192396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:21:57.875 [DEBUG] [Thread-192396] [transport.py] [_log()] client lang: <none>
2026-02-14T21:21:57.875 [DEBUG] [Thread-192396] [transport.py] [_log()] server lang: <none>
2026-02-14T21:21:57.875 [DEBUG] [Thread-192396] [transport.py] [_log()] kex follows: False
2026-02-14T21:21:57.875 [DEBUG] [Thread-192396] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:21:57.875 [DEBUG] [Thread-192396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:21:57.875 [DEBUG] [Thread-192396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:21:57.876 [DEBUG] [Thread-192396] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:21:57.876 [DEBUG] [Thread-192396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:21:57.876 [DEBUG] [Thread-192396] [transport.py] [_log()] Compression: none
2026-02-14T21:21:57.876 [DEBUG] [Thread-192396] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:21:57.932 [DEBUG] [Thread-192396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:21:57.933 [DEBUG] [Thread-192396] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:21:57.933 [DEBUG] [Thread-192396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:21:57.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:21:57.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:21:57.988 [DEBUG] [Thread-192396] [transport.py] [_log()] userauth is OK
2026-02-14T21:21:57.988 [DEBUG] [Thread-192396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:21:57.988 [DEBUG] [Thread-192396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:21:57.988 [DEBUG] [Thread-192396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:21:57.989 [DEBUG] [Thread-192396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:21:58.007 [INFO] [Thread-192396] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:21:58.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-14T21:21:58.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:21:58.501 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:21:58.832 [DEBUG] [Thread-192396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:21:58.833 [DEBUG] [Thread-192396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:21:58.881 [DEBUG] [Thread-192396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:21:58.881 [DEBUG] [Thread-192396] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:21:58.889 [DEBUG] [Thread-192396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:21:58.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:21:58.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:21:58.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:21:58.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:21:58.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:21:58.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:21:58.922 [DEBUG] [Thread-192396] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:21:59.243 [DEBUG] [Thread-192398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:22:14.281 [DEBUG] [Thread-192399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:22:28.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:22:28.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:22:28.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-14T21:22:29.305 [DEBUG] [Thread-192400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:22:30.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 21, 50), 7.75, 58.52, 0.0, 37.64, 10.21, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:22:30.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:21:50
2026-02-14T21:22:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:22:31.318 [DEBUG] [Thread-192401] [transport.py] [_log()] starting thread (client mode): 0xa5743520
2026-02-14T21:22:31.318 [DEBUG] [Thread-192401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:22:31.337 [DEBUG] [Thread-192401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:22:31.337 [INFO] [Thread-192401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:22:31.340 [DEBUG] [Thread-192401] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:22:31.340 [DEBUG] [Thread-192401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:22:31.340 [DEBUG] [Thread-192401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:22:31.340 [DEBUG] [Thread-192401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:22:31.340 [DEBUG] [Thread-192401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:22:31.340 [DEBUG] [Thread-192401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:22:31.340 [DEBUG] [Thread-192401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:22:31.340 [DEBUG] [Thread-192401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:22:31.340 [DEBUG] [Thread-192401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:22:31.340 [DEBUG] [Thread-192401] [transport.py] [_log()] client lang: <none>
2026-02-14T21:22:31.340 [DEBUG] [Thread-192401] [transport.py] [_log()] server lang: <none>
2026-02-14T21:22:31.340 [DEBUG] [Thread-192401] [transport.py] [_log()] kex follows: False
2026-02-14T21:22:31.340 [DEBUG] [Thread-192401] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:22:31.340 [DEBUG] [Thread-192401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:22:31.340 [DEBUG] [Thread-192401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:22:31.340 [DEBUG] [Thread-192401] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:22:31.341 [DEBUG] [Thread-192401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:22:31.341 [DEBUG] [Thread-192401] [transport.py] [_log()] Compression: none
2026-02-14T21:22:31.341 [DEBUG] [Thread-192401] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:22:31.357 [DEBUG] [Thread-192401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:22:31.357 [DEBUG] [Thread-192401] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:22:31.357 [DEBUG] [Thread-192401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:22:31.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:22:31.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:22:31.358 [DEBUG] [Thread-192401] [transport.py] [_log()] userauth is OK
2026-02-14T21:22:31.358 [DEBUG] [Thread-192401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:22:31.358 [DEBUG] [Thread-192401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:22:31.358 [DEBUG] [Thread-192401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:22:31.358 [DEBUG] [Thread-192401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:22:31.373 [INFO] [Thread-192401] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:22:31.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:22:32.011 [DEBUG] [Thread-192401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:22:32.011 [DEBUG] [Thread-192401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:22:32.011 [DEBUG] [Thread-192401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:22:32.052 [DEBUG] [Thread-192401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:22:32.052 [DEBUG] [Thread-192401] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:22:32.054 [DEBUG] [Thread-192401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:22:32.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:22:32.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:22:32.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:22:32.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:22:32.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:22:32.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:22:32.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:22:32.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:22:32.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:22:32.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.806710 -999.00  +10.10  27.79     63   +3.50 1 1 1 1 1     0    0 5.75 -38.75 ZNESW 28.0 27.8 158.0 36.9 10.6 -25.4 10.4 -24.3 10.2 -23.3 10.6 -24.5
2026-02-14T21:22:32.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:22:32.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:22:32.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.806710
2026-02-14T21:22:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:22:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:22:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:22:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:22:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:22:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:21:50', tmtdew=7.75, humidity=58.52, cloud=0.0, wind=37.64, temperature=10.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:22:25', seeing=4.06, atlas_timestamp='2026-02-14T19:21:39.744', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.03125, 0.01425000000000054, -0.0015000000000000568, 0.006000000000000227, -0.021749999999999048, -0.014000000000001123, 0.01425000000000054, -0.0015000000000000568, -0.01249999999999929, -0.030750000000001165, -0.012500000000001066, 0.04699999999999882, 0.014249999999998764, 0.006999999999999673, -0.0129999999999999, 0.027749999999999275, -0.0015000000000000568, -0.025000000000000355, -0.04275000000000162, 0.04099999999999859, 0.061749999999998195, 0.012250000000001648, -0.011750000000001037, 0.049999999999998934, 0.029500000000000526, 0.01774999999999949, -0.011499999999999844, 0.06300000000000061, 0.040000000000000924, 0.01600000000000179, 0.0030000000000001137, -0.013250000000001094], zp_timestamp='2026-02-14T19:18:00')
2026-02-14T21:22:32.076 [DEBUG] [Thread-192401] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:22:32.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-14T21:22:32.162 [DEBUG] [Thread-192404] [transport.py] [_log()] starting thread (client mode): 0xa57703a0
2026-02-14T21:22:32.162 [DEBUG] [Thread-192404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:22:32.176 [DEBUG] [Thread-192404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:22:32.176 [INFO] [Thread-192404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:22:32.184 [DEBUG] [Thread-192404] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:22:32.184 [DEBUG] [Thread-192404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:22:32.184 [DEBUG] [Thread-192404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:22:32.184 [DEBUG] [Thread-192404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:22:32.184 [DEBUG] [Thread-192404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:22:32.184 [DEBUG] [Thread-192404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:22:32.184 [DEBUG] [Thread-192404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:22:32.184 [DEBUG] [Thread-192404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:22:32.184 [DEBUG] [Thread-192404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:22:32.184 [DEBUG] [Thread-192404] [transport.py] [_log()] client lang: <none>
2026-02-14T21:22:32.184 [DEBUG] [Thread-192404] [transport.py] [_log()] server lang: <none>
2026-02-14T21:22:32.184 [DEBUG] [Thread-192404] [transport.py] [_log()] kex follows: False
2026-02-14T21:22:32.184 [DEBUG] [Thread-192404] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:22:32.184 [DEBUG] [Thread-192404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:22:32.184 [DEBUG] [Thread-192404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:22:32.184 [DEBUG] [Thread-192404] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:22:32.184 [DEBUG] [Thread-192404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:22:32.184 [DEBUG] [Thread-192404] [transport.py] [_log()] Compression: none
2026-02-14T21:22:32.184 [DEBUG] [Thread-192404] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:22:32.238 [DEBUG] [Thread-192404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:22:32.239 [DEBUG] [Thread-192404] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:22:32.239 [DEBUG] [Thread-192404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:22:32.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:22:32.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:22:32.296 [DEBUG] [Thread-192404] [transport.py] [_log()] userauth is OK
2026-02-14T21:22:32.296 [DEBUG] [Thread-192404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:22:32.296 [DEBUG] [Thread-192404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:22:32.296 [DEBUG] [Thread-192404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:22:32.296 [DEBUG] [Thread-192404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:22:32.310 [INFO] [Thread-192404] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:22:32.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-14T21:22:32.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:22:33.132 [DEBUG] [Thread-192404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:22:33.132 [DEBUG] [Thread-192404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:22:33.180 [DEBUG] [Thread-192404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:22:33.180 [DEBUG] [Thread-192404] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:22:33.188 [DEBUG] [Thread-192404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:22:33.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:22:33.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-14T21:22:33.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-14T21:22:33.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:22:33.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:22:33.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:22:33.220 [DEBUG] [Thread-192404] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:22:39.695 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:22:42.170 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:22:42.171 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:22:42.891 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:22:44.332 [DEBUG] [Thread-192406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:22:47.961 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:22:53.333 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:22:55.777 [DEBUG] [Thread-192407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:22:59.404 [DEBUG] [Thread-192408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:23:03.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:23:03.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:23:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T21:23:05.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 22, 25), 7.75, 58.5, 0.0, 34.78, 10.21, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:23:05.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:22:25
2026-02-14T21:23:05.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:23:05.923 [DEBUG] [Thread-192409] [transport.py] [_log()] starting thread (client mode): 0xa5742080
2026-02-14T21:23:05.923 [DEBUG] [Thread-192409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:23:05.942 [DEBUG] [Thread-192409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:23:05.942 [INFO] [Thread-192409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:23:05.945 [DEBUG] [Thread-192409] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:23:05.946 [DEBUG] [Thread-192409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:23:05.946 [DEBUG] [Thread-192409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:23:05.946 [DEBUG] [Thread-192409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:23:05.946 [DEBUG] [Thread-192409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:23:05.946 [DEBUG] [Thread-192409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:23:05.946 [DEBUG] [Thread-192409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:23:05.946 [DEBUG] [Thread-192409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:23:05.946 [DEBUG] [Thread-192409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:23:05.946 [DEBUG] [Thread-192409] [transport.py] [_log()] client lang: <none>
2026-02-14T21:23:05.946 [DEBUG] [Thread-192409] [transport.py] [_log()] server lang: <none>
2026-02-14T21:23:05.946 [DEBUG] [Thread-192409] [transport.py] [_log()] kex follows: False
2026-02-14T21:23:05.946 [DEBUG] [Thread-192409] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:23:05.946 [DEBUG] [Thread-192409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:23:05.946 [DEBUG] [Thread-192409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:23:05.946 [DEBUG] [Thread-192409] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:23:05.946 [DEBUG] [Thread-192409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:23:05.946 [DEBUG] [Thread-192409] [transport.py] [_log()] Compression: none
2026-02-14T21:23:05.946 [DEBUG] [Thread-192409] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:23:05.964 [DEBUG] [Thread-192409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:23:05.965 [DEBUG] [Thread-192409] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:23:05.965 [DEBUG] [Thread-192409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:23:05.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:23:05.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:23:05.967 [DEBUG] [Thread-192409] [transport.py] [_log()] userauth is OK
2026-02-14T21:23:05.967 [DEBUG] [Thread-192409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:23:05.967 [DEBUG] [Thread-192409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:23:05.967 [DEBUG] [Thread-192409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:23:05.967 [DEBUG] [Thread-192409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:23:05.983 [INFO] [Thread-192409] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:23:05.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:23:06.799 [DEBUG] [Thread-192409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:23:06.799 [DEBUG] [Thread-192409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:23:06.800 [DEBUG] [Thread-192409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:23:06.840 [DEBUG] [Thread-192409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:23:06.840 [DEBUG] [Thread-192409] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:23:06.842 [DEBUG] [Thread-192409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:23:06.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:23:06.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:23:06.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:23:06.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:23:06.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:23:06.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:23:06.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:23:06.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:23:06.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:23:06.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.807057 -999.00  +10.10  23.69     63   +3.50 1 1 1 1 1     0    0 5.51 -40.75 ZNESW 28.2 23.7 153.4 37.5 10.6 -25.2 10.4 -24.2 10.2 -23.2 10.6 -24.4
2026-02-14T21:23:06.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:23:06.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:23:06.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.807057
2026-02-14T21:23:06.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:23:06.861 [DEBUG] [Thread-192409] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:23:06.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:23:06.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:23:06.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:23:06.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:23:06.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:22:25', tmtdew=7.75, humidity=58.5, cloud=0.0, wind=34.78, temperature=10.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:23:00', seeing=4.65, atlas_timestamp='2026-02-14T19:22:09.725', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.03125, 0.01425000000000054, -0.0015000000000000568, 0.006000000000000227, -0.021749999999999048, -0.014000000000001123, 0.01425000000000054, -0.0015000000000000568, -0.01249999999999929, -0.030750000000001165, -0.012500000000001066, 0.04699999999999882, 0.014249999999998764, 0.006999999999999673, -0.0129999999999999, 0.027749999999999275, -0.0015000000000000568, -0.025000000000000355, -0.04275000000000162, 0.04099999999999859, 0.061749999999998195, 0.012250000000001648, -0.011750000000001037, 0.049999999999998934, 0.029500000000000526, 0.01774999999999949, -0.011499999999999844, 0.06300000000000061, 0.040000000000000924, 0.01600000000000179, 0.0030000000000001137, -0.013250000000001094], zp_timestamp='2026-02-14T19:18:00')
2026-02-14T21:23:06.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-14T21:23:06.951 [DEBUG] [Thread-192412] [transport.py] [_log()] starting thread (client mode): 0xa2d00e20
2026-02-14T21:23:06.951 [DEBUG] [Thread-192412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:23:06.967 [DEBUG] [Thread-192412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:23:06.967 [INFO] [Thread-192412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:23:06.975 [DEBUG] [Thread-192412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:23:06.975 [DEBUG] [Thread-192412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:23:06.975 [DEBUG] [Thread-192412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:23:06.975 [DEBUG] [Thread-192412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:23:06.975 [DEBUG] [Thread-192412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:23:06.975 [DEBUG] [Thread-192412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:23:06.975 [DEBUG] [Thread-192412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:23:06.975 [DEBUG] [Thread-192412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:23:06.975 [DEBUG] [Thread-192412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:23:06.975 [DEBUG] [Thread-192412] [transport.py] [_log()] client lang: <none>
2026-02-14T21:23:06.975 [DEBUG] [Thread-192412] [transport.py] [_log()] server lang: <none>
2026-02-14T21:23:06.975 [DEBUG] [Thread-192412] [transport.py] [_log()] kex follows: False
2026-02-14T21:23:06.975 [DEBUG] [Thread-192412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:23:06.975 [DEBUG] [Thread-192412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:23:06.975 [DEBUG] [Thread-192412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:23:06.975 [DEBUG] [Thread-192412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:23:06.975 [DEBUG] [Thread-192412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:23:06.975 [DEBUG] [Thread-192412] [transport.py] [_log()] Compression: none
2026-02-14T21:23:06.975 [DEBUG] [Thread-192412] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:23:07.033 [DEBUG] [Thread-192412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:23:07.033 [DEBUG] [Thread-192412] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:23:07.034 [DEBUG] [Thread-192412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:23:07.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:23:07.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:23:07.089 [DEBUG] [Thread-192412] [transport.py] [_log()] userauth is OK
2026-02-14T21:23:07.089 [DEBUG] [Thread-192412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:23:07.089 [DEBUG] [Thread-192412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:23:07.089 [DEBUG] [Thread-192412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:23:07.090 [DEBUG] [Thread-192412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:23:07.113 [INFO] [Thread-192412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:23:07.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-14T21:23:07.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:23:08.015 [DEBUG] [Thread-192412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:23:08.015 [DEBUG] [Thread-192412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:23:08.063 [DEBUG] [Thread-192412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:23:08.063 [DEBUG] [Thread-192412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:23:08.072 [DEBUG] [Thread-192412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:23:08.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:23:08.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-14T21:23:08.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:23:08.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:23:08.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:23:08.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:23:08.103 [DEBUG] [Thread-192412] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:23:12.778 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:23:14.429 [DEBUG] [Thread-192414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:23:17.145 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:23:29.476 [DEBUG] [Thread-192415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:23:32.043 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:23:36.600 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:23:38.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:23:38.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:23:38.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T21:23:40.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 22, 25), 7.75, 58.5, 0.0, 34.78, 10.21, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:23:40.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:22:25
2026-02-14T21:23:40.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:23:40.849 [DEBUG] [Thread-192416] [transport.py] [_log()] starting thread (client mode): 0xa2d03d60
2026-02-14T21:23:40.850 [DEBUG] [Thread-192416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:23:40.866 [DEBUG] [Thread-192416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:23:40.866 [INFO] [Thread-192416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:23:40.869 [DEBUG] [Thread-192416] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:23:40.869 [DEBUG] [Thread-192416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:23:40.869 [DEBUG] [Thread-192416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:23:40.869 [DEBUG] [Thread-192416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:23:40.869 [DEBUG] [Thread-192416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:23:40.869 [DEBUG] [Thread-192416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:23:40.869 [DEBUG] [Thread-192416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:23:40.869 [DEBUG] [Thread-192416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:23:40.869 [DEBUG] [Thread-192416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:23:40.869 [DEBUG] [Thread-192416] [transport.py] [_log()] client lang: <none>
2026-02-14T21:23:40.869 [DEBUG] [Thread-192416] [transport.py] [_log()] server lang: <none>
2026-02-14T21:23:40.869 [DEBUG] [Thread-192416] [transport.py] [_log()] kex follows: False
2026-02-14T21:23:40.869 [DEBUG] [Thread-192416] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:23:40.870 [DEBUG] [Thread-192416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:23:40.870 [DEBUG] [Thread-192416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:23:40.870 [DEBUG] [Thread-192416] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:23:40.870 [DEBUG] [Thread-192416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:23:40.870 [DEBUG] [Thread-192416] [transport.py] [_log()] Compression: none
2026-02-14T21:23:40.870 [DEBUG] [Thread-192416] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:23:40.886 [DEBUG] [Thread-192416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:23:40.887 [DEBUG] [Thread-192416] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:23:40.888 [DEBUG] [Thread-192416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:23:40.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:23:40.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:23:40.889 [DEBUG] [Thread-192416] [transport.py] [_log()] userauth is OK
2026-02-14T21:23:40.890 [DEBUG] [Thread-192416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:23:40.890 [DEBUG] [Thread-192416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:23:40.890 [DEBUG] [Thread-192416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:23:40.890 [DEBUG] [Thread-192416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:23:40.903 [INFO] [Thread-192416] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:23:40.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:23:40.984 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:23:41.524 [DEBUG] [Thread-192416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:23:41.524 [DEBUG] [Thread-192416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:23:41.525 [DEBUG] [Thread-192416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:23:41.566 [DEBUG] [Thread-192416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:23:41.566 [DEBUG] [Thread-192416] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:23:41.568 [DEBUG] [Thread-192416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:23:41.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:23:41.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:23:41.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:23:41.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:23:41.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:23:41.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:23:41.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:23:41.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:23:41.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:23:41.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.807752 -999.00  +10.10  24.84     63   +3.50 1 1 1 1 1     0    0 5.70 -35.62 ZNESW 27.3 24.8 153.8 31.9 10.6 -25.3 10.4 -24.2 10.2 -23.2 10.5 -24.4
2026-02-14T21:23:41.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:23:41.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:23:41.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.807752
2026-02-14T21:23:41.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:23:41.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:23:41.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:23:41.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:23:41.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:23:41.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:22:25', tmtdew=7.75, humidity=58.5, cloud=0.0, wind=34.78, temperature=10.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:23:36', seeing=5.47, atlas_timestamp='2026-02-14T19:23:09.773', atlas_cloud=1, atlas_rain=1, zp_data=[-0.14475000000000016, -0.17675000000000018, -0.11275000000000013, -0.198500000000001, -0.16550000000000153, -0.1372499999999981, -0.15800000000000125, -0.11874999999999858, -0.14450000000000074, -0.1769999999999996, -0.1687499999999993, -0.14149999999999885, -0.057000000000000384, -0.1537500000000005, -0.16799999999999926, -0.12199999999999989, -0.06475000000000009, -0.16050000000000075, -0.20400000000000063, -0.10875000000000057, -0.08600000000000207, -0.12725000000000009, -0.1457499999999996, -0.1352499999999992, -0.04600000000000115, -0.0909999999999993, -0.16225000000000023, -0.08150000000000013, -0.09600000000000009, -0.17599999999999838, -0.20949999999999847, -0.09899999999999842, -0.06375000000000064], zp_timestamp='2026-02-14T19:21:00')
2026-02-14T21:23:41.589 [DEBUG] [Thread-192416] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:23:41.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-14T21:23:41.674 [DEBUG] [Thread-192419] [transport.py] [_log()] starting thread (client mode): 0xa2d10820
2026-02-14T21:23:41.675 [DEBUG] [Thread-192419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:23:41.694 [DEBUG] [Thread-192419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:23:41.694 [INFO] [Thread-192419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:23:41.701 [DEBUG] [Thread-192419] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:23:41.701 [DEBUG] [Thread-192419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:23:41.701 [DEBUG] [Thread-192419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:23:41.701 [DEBUG] [Thread-192419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:23:41.701 [DEBUG] [Thread-192419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:23:41.701 [DEBUG] [Thread-192419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:23:41.701 [DEBUG] [Thread-192419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:23:41.701 [DEBUG] [Thread-192419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:23:41.701 [DEBUG] [Thread-192419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:23:41.701 [DEBUG] [Thread-192419] [transport.py] [_log()] client lang: <none>
2026-02-14T21:23:41.701 [DEBUG] [Thread-192419] [transport.py] [_log()] server lang: <none>
2026-02-14T21:23:41.701 [DEBUG] [Thread-192419] [transport.py] [_log()] kex follows: False
2026-02-14T21:23:41.701 [DEBUG] [Thread-192419] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:23:41.701 [DEBUG] [Thread-192419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:23:41.702 [DEBUG] [Thread-192419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:23:41.702 [DEBUG] [Thread-192419] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:23:41.702 [DEBUG] [Thread-192419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:23:41.702 [DEBUG] [Thread-192419] [transport.py] [_log()] Compression: none
2026-02-14T21:23:41.702 [DEBUG] [Thread-192419] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:23:41.759 [DEBUG] [Thread-192419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:23:41.759 [DEBUG] [Thread-192419] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:23:41.759 [DEBUG] [Thread-192419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:23:41.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:23:41.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:23:41.816 [DEBUG] [Thread-192419] [transport.py] [_log()] userauth is OK
2026-02-14T21:23:41.816 [DEBUG] [Thread-192419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:23:41.816 [DEBUG] [Thread-192419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:23:41.816 [DEBUG] [Thread-192419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:23:41.816 [DEBUG] [Thread-192419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:23:41.830 [INFO] [Thread-192419] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:23:41.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-14T21:23:41.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:23:42.371 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:23:42.371 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:23:42.680 [DEBUG] [Thread-192419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:23:42.680 [DEBUG] [Thread-192419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:23:42.729 [DEBUG] [Thread-192419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:23:42.729 [DEBUG] [Thread-192419] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:23:42.737 [DEBUG] [Thread-192419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:23:42.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:23:42.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-14T21:23: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-14T21:23:42.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:23:42.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:23:42.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:23:42.769 [DEBUG] [Thread-192419] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:23:44.508 [DEBUG] [Thread-192421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:23:47.922 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:23:52.358 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:23:56.102 [DEBUG] [Thread-192422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:23:59.585 [DEBUG] [Thread-192423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:24:12.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:24:12.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:24:12.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-14T21:24:14.618 [DEBUG] [Thread-192424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:24:15.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 23, 35), 7.88, 58.07, 0.0, 37.37, 10.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:24:15.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:23:35
2026-02-14T21:24:15.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:24:15.834 [DEBUG] [Thread-192425] [transport.py] [_log()] starting thread (client mode): 0xa2d131c0
2026-02-14T21:24:15.835 [DEBUG] [Thread-192425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:24:15.854 [DEBUG] [Thread-192425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:24:15.854 [INFO] [Thread-192425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:24:15.857 [DEBUG] [Thread-192425] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:24:15.858 [DEBUG] [Thread-192425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:24:15.858 [DEBUG] [Thread-192425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:24:15.858 [DEBUG] [Thread-192425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:24:15.858 [DEBUG] [Thread-192425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:24:15.858 [DEBUG] [Thread-192425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:24:15.858 [DEBUG] [Thread-192425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:24:15.858 [DEBUG] [Thread-192425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:24:15.858 [DEBUG] [Thread-192425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:24:15.858 [DEBUG] [Thread-192425] [transport.py] [_log()] client lang: <none>
2026-02-14T21:24:15.858 [DEBUG] [Thread-192425] [transport.py] [_log()] server lang: <none>
2026-02-14T21:24:15.858 [DEBUG] [Thread-192425] [transport.py] [_log()] kex follows: False
2026-02-14T21:24:15.858 [DEBUG] [Thread-192425] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:24:15.858 [DEBUG] [Thread-192425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:24:15.858 [DEBUG] [Thread-192425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:24:15.858 [DEBUG] [Thread-192425] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:24:15.858 [DEBUG] [Thread-192425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:24:15.858 [DEBUG] [Thread-192425] [transport.py] [_log()] Compression: none
2026-02-14T21:24:15.858 [DEBUG] [Thread-192425] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:24:15.874 [DEBUG] [Thread-192425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:24:15.874 [DEBUG] [Thread-192425] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:24:15.874 [DEBUG] [Thread-192425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:24:15.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:24:15.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:24:15.875 [DEBUG] [Thread-192425] [transport.py] [_log()] userauth is OK
2026-02-14T21:24:15.875 [DEBUG] [Thread-192425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:24:15.875 [DEBUG] [Thread-192425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:24:15.875 [DEBUG] [Thread-192425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:24:15.875 [DEBUG] [Thread-192425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:24:15.885 [INFO] [Thread-192425] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:24:15.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:24:16.526 [DEBUG] [Thread-192425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:24:16.526 [DEBUG] [Thread-192425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:24:16.526 [DEBUG] [Thread-192425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:24:16.567 [DEBUG] [Thread-192425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:24:16.568 [DEBUG] [Thread-192425] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:24:16.571 [DEBUG] [Thread-192425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:24:16.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:24:16.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:24:16.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:24:16.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:24:16.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:24:16.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:24:16.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:24:16.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:24:16.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:24:16.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.808099 -999.00  +10.10  28.74     63   +3.50 1 1 1 1 1     0    0 5.84 -34.40 ZNESW 27.4 28.7 157.0 37.5 10.6 -25.3 10.4 -24.1 10.2 -23.1 10.6 -24.3
2026-02-14T21:24:16.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:24:16.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:24:16.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.808099
2026-02-14T21:24:16.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:24:16.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:24:16.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:24:16.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:24:16.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:24:16.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:23:35', tmtdew=7.88, humidity=58.07, cloud=0.0, wind=37.37, temperature=10.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:24:11', seeing=4.61, atlas_timestamp='2026-02-14T19:23:39.754', atlas_cloud=1, atlas_rain=1, zp_data=[-0.14475000000000016, -0.17675000000000018, -0.11275000000000013, -0.198500000000001, -0.16550000000000153, -0.1372499999999981, -0.15800000000000125, -0.11874999999999858, -0.14450000000000074, -0.1769999999999996, -0.1687499999999993, -0.14149999999999885, -0.057000000000000384, -0.1537500000000005, -0.16799999999999926, -0.12199999999999989, -0.06475000000000009, -0.16050000000000075, -0.20400000000000063, -0.10875000000000057, -0.08600000000000207, -0.12725000000000009, -0.1457499999999996, -0.1352499999999992, -0.04600000000000115, -0.0909999999999993, -0.16225000000000023, -0.08150000000000013, -0.09600000000000009, -0.17599999999999838, -0.20949999999999847, -0.09899999999999842, -0.06375000000000064], zp_timestamp='2026-02-14T19:21:00')
2026-02-14T21:24:16.589 [DEBUG] [Thread-192425] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:24:16.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-14T21:24:16.673 [DEBUG] [Thread-192428] [transport.py] [_log()] starting thread (client mode): 0xa2d00b20
2026-02-14T21:24:16.673 [DEBUG] [Thread-192428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:24:16.688 [DEBUG] [Thread-192428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:24:16.688 [INFO] [Thread-192428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:24:16.696 [DEBUG] [Thread-192428] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:24:16.696 [DEBUG] [Thread-192428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:24:16.696 [DEBUG] [Thread-192428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:24:16.696 [DEBUG] [Thread-192428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:24:16.696 [DEBUG] [Thread-192428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:24:16.696 [DEBUG] [Thread-192428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:24:16.697 [DEBUG] [Thread-192428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:24:16.697 [DEBUG] [Thread-192428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:24:16.697 [DEBUG] [Thread-192428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:24:16.697 [DEBUG] [Thread-192428] [transport.py] [_log()] client lang: <none>
2026-02-14T21:24:16.697 [DEBUG] [Thread-192428] [transport.py] [_log()] server lang: <none>
2026-02-14T21:24:16.697 [DEBUG] [Thread-192428] [transport.py] [_log()] kex follows: False
2026-02-14T21:24:16.697 [DEBUG] [Thread-192428] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:24:16.697 [DEBUG] [Thread-192428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:24:16.697 [DEBUG] [Thread-192428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:24:16.697 [DEBUG] [Thread-192428] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:24:16.697 [DEBUG] [Thread-192428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:24:16.698 [DEBUG] [Thread-192428] [transport.py] [_log()] Compression: none
2026-02-14T21:24:16.698 [DEBUG] [Thread-192428] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:24:16.758 [DEBUG] [Thread-192428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:24:16.758 [DEBUG] [Thread-192428] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:24:16.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:24:16.759 [DEBUG] [Thread-192428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:24:16.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:24:16.817 [DEBUG] [Thread-192428] [transport.py] [_log()] userauth is OK
2026-02-14T21:24:16.817 [DEBUG] [Thread-192428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:24:16.817 [DEBUG] [Thread-192428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:24:16.817 [DEBUG] [Thread-192428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:24:16.817 [DEBUG] [Thread-192428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:24:16.841 [INFO] [Thread-192428] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:24:16.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-14T21:24:16.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:24:17.690 [DEBUG] [Thread-192428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:24:17.690 [DEBUG] [Thread-192428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:24:17.738 [DEBUG] [Thread-192428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:24:17.739 [DEBUG] [Thread-192428] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:24:17.748 [DEBUG] [Thread-192428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:24:17.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:24:17.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-14T21:24:17.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:24:17.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:24:17.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:24:17.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:24:17.785 [DEBUG] [Thread-192428] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:24:29.672 [DEBUG] [Thread-192430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:24:42.570 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:24:42.572 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:24:44.722 [DEBUG] [Thread-192431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:24:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:24:47.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:24: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-14T21:24:49.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 24, 11), 7.67, 58.62, 0.0, 33.29, 10.14, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:24:49.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:24:11
2026-02-14T21:24:50.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:24:50.544 [DEBUG] [Thread-192432] [transport.py] [_log()] starting thread (client mode): 0xa57701c0
2026-02-14T21:24:50.544 [DEBUG] [Thread-192432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:24:50.564 [DEBUG] [Thread-192432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:24:50.564 [INFO] [Thread-192432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:24:50.567 [DEBUG] [Thread-192432] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:24:50.567 [DEBUG] [Thread-192432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:24:50.567 [DEBUG] [Thread-192432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:24:50.567 [DEBUG] [Thread-192432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:24:50.567 [DEBUG] [Thread-192432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:24:50.567 [DEBUG] [Thread-192432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:24:50.567 [DEBUG] [Thread-192432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:24:50.567 [DEBUG] [Thread-192432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:24:50.567 [DEBUG] [Thread-192432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:24:50.567 [DEBUG] [Thread-192432] [transport.py] [_log()] client lang: <none>
2026-02-14T21:24:50.567 [DEBUG] [Thread-192432] [transport.py] [_log()] server lang: <none>
2026-02-14T21:24:50.568 [DEBUG] [Thread-192432] [transport.py] [_log()] kex follows: False
2026-02-14T21:24:50.568 [DEBUG] [Thread-192432] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:24:50.568 [DEBUG] [Thread-192432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:24:50.568 [DEBUG] [Thread-192432] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:24:50.568 [DEBUG] [Thread-192432] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:24:50.568 [DEBUG] [Thread-192432] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:24:50.568 [DEBUG] [Thread-192432] [transport.py] [_log()] Compression: none
2026-02-14T21:24:50.568 [DEBUG] [Thread-192432] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:24:50.587 [DEBUG] [Thread-192432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:24:50.588 [DEBUG] [Thread-192432] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:24:50.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:24:50.589 [DEBUG] [Thread-192432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:24:50.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:24:50.591 [DEBUG] [Thread-192432] [transport.py] [_log()] userauth is OK
2026-02-14T21:24:50.591 [DEBUG] [Thread-192432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:24:50.591 [DEBUG] [Thread-192432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:24:50.591 [DEBUG] [Thread-192432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:24:50.591 [DEBUG] [Thread-192432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:24:50.618 [INFO] [Thread-192432] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:24:50.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:24:51.286 [DEBUG] [Thread-192432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:24:51.286 [DEBUG] [Thread-192432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:24:51.286 [DEBUG] [Thread-192432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:24:51.327 [DEBUG] [Thread-192432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:24:51.327 [DEBUG] [Thread-192432] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:24:51.330 [DEBUG] [Thread-192432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:24:51.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:24:51.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:24:51.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:24:51.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:24:51.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:24:51.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:24:51.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:24:51.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:24:51.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:24:51.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.808446 -999.00  +10.10  25.42     63   +3.50 1 1 1 1 1     0    0 5.92 -34.29 ZNESW 23.1 25.4 162.1 40.1 10.6 -25.3 10.4 -24.4 10.2 -23.2 10.5 -24.5
2026-02-14T21:24:51.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:24:51.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:24:51.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.808446
2026-02-14T21:24:51.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:24:51.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:24:51.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:24:51.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:24:51.356 [DEBUG] [Thread-192432] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:24:51.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:24:51.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:24:11', tmtdew=7.67, humidity=58.62, cloud=0.0, wind=33.29, temperature=10.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:24:47', seeing=4.61, atlas_timestamp='2026-02-14T19:24:09.734', atlas_cloud=1, atlas_rain=1, zp_data=[-0.14475000000000016, -0.17675000000000018, -0.11275000000000013, -0.198500000000001, -0.16550000000000153, -0.1372499999999981, -0.15800000000000125, -0.11874999999999858, -0.14450000000000074, -0.1769999999999996, -0.1687499999999993, -0.14149999999999885, -0.057000000000000384, -0.1537500000000005, -0.16799999999999926, -0.12199999999999989, -0.06475000000000009, -0.16050000000000075, -0.20400000000000063, -0.10875000000000057, -0.08600000000000207, -0.12725000000000009, -0.1457499999999996, -0.1352499999999992, -0.04600000000000115, -0.0909999999999993, -0.16225000000000023, -0.08150000000000013, -0.09600000000000009, -0.17599999999999838, -0.20949999999999847, -0.09899999999999842, -0.06375000000000064], zp_timestamp='2026-02-14T19:21:00')
2026-02-14T21:24:51.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-14T21:24:51.455 [DEBUG] [Thread-192435] [transport.py] [_log()] starting thread (client mode): 0xa5772c50
2026-02-14T21:24:51.455 [DEBUG] [Thread-192435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:24:51.469 [DEBUG] [Thread-192435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:24:51.469 [INFO] [Thread-192435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:24:51.476 [DEBUG] [Thread-192435] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:24:51.476 [DEBUG] [Thread-192435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:24:51.476 [DEBUG] [Thread-192435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:24:51.476 [DEBUG] [Thread-192435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:24:51.476 [DEBUG] [Thread-192435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:24:51.476 [DEBUG] [Thread-192435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:24:51.477 [DEBUG] [Thread-192435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:24:51.477 [DEBUG] [Thread-192435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:24:51.477 [DEBUG] [Thread-192435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:24:51.477 [DEBUG] [Thread-192435] [transport.py] [_log()] client lang: <none>
2026-02-14T21:24:51.477 [DEBUG] [Thread-192435] [transport.py] [_log()] server lang: <none>
2026-02-14T21:24:51.477 [DEBUG] [Thread-192435] [transport.py] [_log()] kex follows: False
2026-02-14T21:24:51.477 [DEBUG] [Thread-192435] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:24:51.477 [DEBUG] [Thread-192435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:24:51.477 [DEBUG] [Thread-192435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:24:51.477 [DEBUG] [Thread-192435] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:24:51.477 [DEBUG] [Thread-192435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:24:51.477 [DEBUG] [Thread-192435] [transport.py] [_log()] Compression: none
2026-02-14T21:24:51.477 [DEBUG] [Thread-192435] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:24:51.537 [DEBUG] [Thread-192435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:24:51.537 [DEBUG] [Thread-192435] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:24:51.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:24:51.539 [DEBUG] [Thread-192435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:24:51.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:24:51.595 [DEBUG] [Thread-192435] [transport.py] [_log()] userauth is OK
2026-02-14T21:24:51.595 [DEBUG] [Thread-192435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:24:51.595 [DEBUG] [Thread-192435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:24:51.596 [DEBUG] [Thread-192435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:24:51.596 [DEBUG] [Thread-192435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:24:51.617 [INFO] [Thread-192435] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:24:51.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-14T21:24:51.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:24:51.791 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:24:52.434 [DEBUG] [Thread-192435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:24:52.434 [DEBUG] [Thread-192435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:24:52.473 [DEBUG] [Thread-192435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:24:52.474 [DEBUG] [Thread-192435] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:24:52.483 [DEBUG] [Thread-192435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:24:52.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:24:52.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-14T21:24:52.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:24:52.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:24:52.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:24:52.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:24:52.518 [DEBUG] [Thread-192435] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:24:54.832 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:24:56.202 [DEBUG] [Thread-192437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:24:59.761 [DEBUG] [Thread-192438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:25:05.691 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:25:14.820 [DEBUG] [Thread-192439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:25:22.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:25:22.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:25:22.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-14T21:25:24.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 24, 47), 7.68, 58.58, 0.0, 34.49, 10.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:25:24.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:24:47
2026-02-14T21:25:24.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:25:25.083 [DEBUG] [Thread-192440] [transport.py] [_log()] starting thread (client mode): 0xa57728f0
2026-02-14T21:25:25.083 [DEBUG] [Thread-192440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:25:25.094 [DEBUG] [Thread-192440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:25:25.095 [INFO] [Thread-192440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:25:25.098 [DEBUG] [Thread-192440] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:25:25.098 [DEBUG] [Thread-192440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:25:25.098 [DEBUG] [Thread-192440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:25:25.098 [DEBUG] [Thread-192440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:25:25.098 [DEBUG] [Thread-192440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:25:25.098 [DEBUG] [Thread-192440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:25:25.098 [DEBUG] [Thread-192440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:25:25.098 [DEBUG] [Thread-192440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:25:25.098 [DEBUG] [Thread-192440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:25:25.098 [DEBUG] [Thread-192440] [transport.py] [_log()] client lang: <none>
2026-02-14T21:25:25.098 [DEBUG] [Thread-192440] [transport.py] [_log()] server lang: <none>
2026-02-14T21:25:25.098 [DEBUG] [Thread-192440] [transport.py] [_log()] kex follows: False
2026-02-14T21:25:25.098 [DEBUG] [Thread-192440] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:25:25.098 [DEBUG] [Thread-192440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:25:25.098 [DEBUG] [Thread-192440] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:25:25.099 [DEBUG] [Thread-192440] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:25:25.099 [DEBUG] [Thread-192440] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:25:25.099 [DEBUG] [Thread-192440] [transport.py] [_log()] Compression: none
2026-02-14T21:25:25.099 [DEBUG] [Thread-192440] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:25:25.116 [DEBUG] [Thread-192440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:25:25.117 [DEBUG] [Thread-192440] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:25:25.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:25:25.118 [DEBUG] [Thread-192440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:25:25.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:25:25.120 [DEBUG] [Thread-192440] [transport.py] [_log()] userauth is OK
2026-02-14T21:25:25.121 [DEBUG] [Thread-192440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:25:25.121 [DEBUG] [Thread-192440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:25:25.121 [DEBUG] [Thread-192440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:25:25.121 [DEBUG] [Thread-192440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:25:25.139 [INFO] [Thread-192440] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:25:25.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:25:25.734 [DEBUG] [Thread-192440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:25:25.735 [DEBUG] [Thread-192440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:25:25.735 [DEBUG] [Thread-192440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:25:25.775 [DEBUG] [Thread-192440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:25:25.775 [DEBUG] [Thread-192440] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:25:25.778 [DEBUG] [Thread-192440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:25:25.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:25:25.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:25:25.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:25:25.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:25:25.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:25:25.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:25:25.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:25:25.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:25:25.811 [DEBUG] [Thread-192440] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:25:25.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:25:25.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.808794 -999.00  +10.00  21.66     63   +3.50 1 1 1 1 1     0    0 5.76 -35.27 ZNESW 19.2 21.7 166.0 32.7 10.5 -25.2 10.3 -24.1 10.2 -23.2 10.5 -24.5
2026-02-14T21:25:25.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:25:25.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:25:25.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.808794
2026-02-14T21:25:25.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:25:25.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:25:25.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:25:25.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:25:25.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:25:25.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:24:47', tmtdew=7.68, humidity=58.58, cloud=0.0, wind=34.49, temperature=10.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:24:47', seeing=4.61, atlas_timestamp='2026-02-14T19:24:39.802', atlas_cloud=1, atlas_rain=1, zp_data=[-0.14475000000000016, -0.17675000000000018, -0.11275000000000013, -0.198500000000001, -0.16550000000000153, -0.1372499999999981, -0.15800000000000125, -0.11874999999999858, -0.14450000000000074, -0.1769999999999996, -0.1687499999999993, -0.14149999999999885, -0.057000000000000384, -0.1537500000000005, -0.16799999999999926, -0.12199999999999989, -0.06475000000000009, -0.16050000000000075, -0.20400000000000063, -0.10875000000000057, -0.08600000000000207, -0.12725000000000009, -0.1457499999999996, -0.1352499999999992, -0.04600000000000115, -0.0909999999999993, -0.16225000000000023, -0.08150000000000013, -0.09600000000000009, -0.17599999999999838, -0.20949999999999847, -0.09899999999999842, -0.06375000000000064], zp_timestamp='2026-02-14T19:21:00')
2026-02-14T21:25:25.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-14T21:25:25.909 [DEBUG] [Thread-192443] [transport.py] [_log()] starting thread (client mode): 0xa2d7a4a0
2026-02-14T21:25:25.909 [DEBUG] [Thread-192443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:25:25.925 [DEBUG] [Thread-192443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:25:25.925 [INFO] [Thread-192443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:25:25.932 [DEBUG] [Thread-192443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:25:25.933 [DEBUG] [Thread-192443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:25:25.933 [DEBUG] [Thread-192443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:25:25.933 [DEBUG] [Thread-192443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:25:25.933 [DEBUG] [Thread-192443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:25:25.933 [DEBUG] [Thread-192443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:25:25.933 [DEBUG] [Thread-192443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:25:25.934 [DEBUG] [Thread-192443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:25:25.934 [DEBUG] [Thread-192443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:25:25.934 [DEBUG] [Thread-192443] [transport.py] [_log()] client lang: <none>
2026-02-14T21:25:25.934 [DEBUG] [Thread-192443] [transport.py] [_log()] server lang: <none>
2026-02-14T21:25:25.934 [DEBUG] [Thread-192443] [transport.py] [_log()] kex follows: False
2026-02-14T21:25:25.934 [DEBUG] [Thread-192443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:25:25.934 [DEBUG] [Thread-192443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:25:25.934 [DEBUG] [Thread-192443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:25:25.935 [DEBUG] [Thread-192443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:25:25.935 [DEBUG] [Thread-192443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:25:25.935 [DEBUG] [Thread-192443] [transport.py] [_log()] Compression: none
2026-02-14T21:25:25.935 [DEBUG] [Thread-192443] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:25:25.998 [DEBUG] [Thread-192443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:25:25.998 [DEBUG] [Thread-192443] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:25:25.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:25:25.999 [DEBUG] [Thread-192443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:25:26.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:25:26.057 [DEBUG] [Thread-192443] [transport.py] [_log()] userauth is OK
2026-02-14T21:25:26.057 [DEBUG] [Thread-192443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:25:26.057 [DEBUG] [Thread-192443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:25:26.057 [DEBUG] [Thread-192443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:25:26.057 [DEBUG] [Thread-192443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:25:26.076 [INFO] [Thread-192443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:25:26.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-14T21:25:26.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:25:26.945 [DEBUG] [Thread-192443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:25:26.945 [DEBUG] [Thread-192443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:25:26.993 [DEBUG] [Thread-192443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:25:26.993 [DEBUG] [Thread-192443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:25:27.002 [DEBUG] [Thread-192443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:25:27.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:25:27.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')
2026-02-14T21:25:27.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-14T21:25:27.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:25:27.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:25:27.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:25:27.041 [DEBUG] [Thread-192443] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:25:29.856 [DEBUG] [Thread-192445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:25:42.774 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:25:42.775 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:25:44.909 [DEBUG] [Thread-192446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:25:56.285 [DEBUG] [Thread-192447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:25:57.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:25:57.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:25:57.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-14T21:25:59.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 25, 22), 7.67, 58.62, 0.0, 33.75, 10.14, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:25:59.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:25:22
2026-02-14T21:25:59.955 [DEBUG] [Thread-192448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:26:00.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:26:00.191 [DEBUG] [Thread-192449] [transport.py] [_log()] starting thread (client mode): 0xa57722f0
2026-02-14T21:26:00.191 [DEBUG] [Thread-192449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:26:00.211 [DEBUG] [Thread-192449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:26:00.211 [INFO] [Thread-192449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:26:00.214 [DEBUG] [Thread-192449] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:26:00.214 [DEBUG] [Thread-192449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:26:00.214 [DEBUG] [Thread-192449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:26:00.214 [DEBUG] [Thread-192449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:26:00.214 [DEBUG] [Thread-192449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:26:00.214 [DEBUG] [Thread-192449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:26:00.214 [DEBUG] [Thread-192449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:26:00.214 [DEBUG] [Thread-192449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:26:00.215 [DEBUG] [Thread-192449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:26:00.215 [DEBUG] [Thread-192449] [transport.py] [_log()] client lang: <none>
2026-02-14T21:26:00.215 [DEBUG] [Thread-192449] [transport.py] [_log()] server lang: <none>
2026-02-14T21:26:00.215 [DEBUG] [Thread-192449] [transport.py] [_log()] kex follows: False
2026-02-14T21:26:00.215 [DEBUG] [Thread-192449] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:26:00.215 [DEBUG] [Thread-192449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:26:00.215 [DEBUG] [Thread-192449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:26:00.215 [DEBUG] [Thread-192449] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:26:00.216 [DEBUG] [Thread-192449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:26:00.216 [DEBUG] [Thread-192449] [transport.py] [_log()] Compression: none
2026-02-14T21:26:00.216 [DEBUG] [Thread-192449] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:26:00.235 [DEBUG] [Thread-192449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:26:00.235 [DEBUG] [Thread-192449] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:26:00.236 [DEBUG] [Thread-192449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:26:00.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:26:00.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:26:00.238 [DEBUG] [Thread-192449] [transport.py] [_log()] userauth is OK
2026-02-14T21:26:00.238 [DEBUG] [Thread-192449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:26:00.238 [DEBUG] [Thread-192449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:26:00.238 [DEBUG] [Thread-192449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:26:00.238 [DEBUG] [Thread-192449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:26:00.257 [INFO] [Thread-192449] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:26:00.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:26:01.044 [DEBUG] [Thread-192449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:26:01.045 [DEBUG] [Thread-192449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:26:01.045 [DEBUG] [Thread-192449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:26:01.086 [DEBUG] [Thread-192449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:26:01.086 [DEBUG] [Thread-192449] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:26:01.089 [DEBUG] [Thread-192449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:26:01.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:26:01.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:26:01.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:26:01.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:26:01.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:26:01.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:26:01.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:26:01.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:26:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:26:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.809141 -999.00  +10.00  26.57     64   +3.50 1 1 1 1 1     0    0 5.62 -36.80 ZNESW 27.7 26.6 157.2 30.2 10.6 -25.4 10.4 -24.2 10.2 -23.3 10.5 -24.3
2026-02-14T21:26:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:26:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:26:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.809141
2026-02-14T21:26:01.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:26:01.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:26:01.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:26:01.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:26:01.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:26:01.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:25:22', tmtdew=7.67, humidity=58.62, cloud=0.0, wind=33.75, temperature=10.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:25:23', seeing=4.21, atlas_timestamp='2026-02-14T19:25:09.782', atlas_cloud=1, atlas_rain=1, zp_data=[-0.14475000000000016, -0.17675000000000018, -0.11275000000000013, -0.198500000000001, -0.16550000000000153, -0.1372499999999981, -0.15800000000000125, -0.11874999999999858, -0.14450000000000074, -0.1769999999999996, -0.1687499999999993, -0.14149999999999885, -0.057000000000000384, -0.1537500000000005, -0.16799999999999926, -0.12199999999999989, -0.06475000000000009, -0.16050000000000075, -0.20400000000000063, -0.10875000000000057, -0.08600000000000207, -0.12725000000000009, -0.1457499999999996, -0.1352499999999992, -0.04600000000000115, -0.0909999999999993, -0.16225000000000023, -0.08150000000000013, -0.09600000000000009, -0.17599999999999838, -0.20949999999999847, -0.09899999999999842, -0.06375000000000064], zp_timestamp='2026-02-14T19:21:00')
2026-02-14T21:26:01.113 [DEBUG] [Thread-192449] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:26:01.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-14T21:26:01.209 [DEBUG] [Thread-192452] [transport.py] [_log()] starting thread (client mode): 0xa2d10ee0
2026-02-14T21:26:01.210 [DEBUG] [Thread-192452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:26:01.223 [DEBUG] [Thread-192452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:26:01.224 [INFO] [Thread-192452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:26:01.231 [DEBUG] [Thread-192452] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:26:01.231 [DEBUG] [Thread-192452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:26:01.231 [DEBUG] [Thread-192452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:26:01.231 [DEBUG] [Thread-192452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:26:01.232 [DEBUG] [Thread-192452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:26:01.232 [DEBUG] [Thread-192452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:26:01.232 [DEBUG] [Thread-192452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:26:01.232 [DEBUG] [Thread-192452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:26:01.232 [DEBUG] [Thread-192452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:26:01.232 [DEBUG] [Thread-192452] [transport.py] [_log()] client lang: <none>
2026-02-14T21:26:01.232 [DEBUG] [Thread-192452] [transport.py] [_log()] server lang: <none>
2026-02-14T21:26:01.232 [DEBUG] [Thread-192452] [transport.py] [_log()] kex follows: False
2026-02-14T21:26:01.232 [DEBUG] [Thread-192452] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:26:01.232 [DEBUG] [Thread-192452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:26:01.232 [DEBUG] [Thread-192452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:26:01.232 [DEBUG] [Thread-192452] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:26:01.232 [DEBUG] [Thread-192452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:26:01.232 [DEBUG] [Thread-192452] [transport.py] [_log()] Compression: none
2026-02-14T21:26:01.232 [DEBUG] [Thread-192452] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:26:01.288 [DEBUG] [Thread-192452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:26:01.288 [DEBUG] [Thread-192452] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:26:01.289 [DEBUG] [Thread-192452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:26:01.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:26:01.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:26:01.347 [DEBUG] [Thread-192452] [transport.py] [_log()] userauth is OK
2026-02-14T21:26:01.347 [DEBUG] [Thread-192452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:26:01.347 [DEBUG] [Thread-192452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:26:01.347 [DEBUG] [Thread-192452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:26:01.348 [DEBUG] [Thread-192452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:26:01.369 [INFO] [Thread-192452] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:26:01.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-14T21:26:01.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:26:02.215 [DEBUG] [Thread-192452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:26:02.215 [DEBUG] [Thread-192452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:26:02.263 [DEBUG] [Thread-192452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:26:02.263 [DEBUG] [Thread-192452] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:26:02.272 [DEBUG] [Thread-192452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:26:02.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:26:02.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-14T21:26:02.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-14T21:26:02.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:26:02.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:26:02.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:26:02.307 [DEBUG] [Thread-192452] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:26:14.992 [DEBUG] [Thread-192454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:26:30.052 [DEBUG] [Thread-192455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:26:32.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:26:32.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:26:32.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-14T21:26:34.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 25, 58), 7.68, 59.08, 0.0, 39.24, 10.13, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:26:34.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:25:58
2026-02-14T21:26:34.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:26:34.771 [DEBUG] [Thread-192456] [transport.py] [_log()] starting thread (client mode): 0xa2d13b50
2026-02-14T21:26:34.771 [DEBUG] [Thread-192456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:26:34.791 [DEBUG] [Thread-192456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:26:34.791 [INFO] [Thread-192456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:26:34.794 [DEBUG] [Thread-192456] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:26:34.794 [DEBUG] [Thread-192456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:26:34.794 [DEBUG] [Thread-192456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:26:34.794 [DEBUG] [Thread-192456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:26:34.794 [DEBUG] [Thread-192456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:26:34.794 [DEBUG] [Thread-192456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:26:34.794 [DEBUG] [Thread-192456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:26:34.794 [DEBUG] [Thread-192456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:26:34.794 [DEBUG] [Thread-192456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:26:34.794 [DEBUG] [Thread-192456] [transport.py] [_log()] client lang: <none>
2026-02-14T21:26:34.794 [DEBUG] [Thread-192456] [transport.py] [_log()] server lang: <none>
2026-02-14T21:26:34.795 [DEBUG] [Thread-192456] [transport.py] [_log()] kex follows: False
2026-02-14T21:26:34.795 [DEBUG] [Thread-192456] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:26:34.795 [DEBUG] [Thread-192456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:26:34.795 [DEBUG] [Thread-192456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:26:34.795 [DEBUG] [Thread-192456] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:26:34.795 [DEBUG] [Thread-192456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:26:34.795 [DEBUG] [Thread-192456] [transport.py] [_log()] Compression: none
2026-02-14T21:26:34.795 [DEBUG] [Thread-192456] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:26:34.817 [DEBUG] [Thread-192456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:26:34.817 [DEBUG] [Thread-192456] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:26:34.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:26:34.818 [DEBUG] [Thread-192456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:26:34.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:26:34.861 [DEBUG] [Thread-192456] [transport.py] [_log()] userauth is OK
2026-02-14T21:26:34.861 [DEBUG] [Thread-192456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:26:34.861 [DEBUG] [Thread-192456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:26:34.861 [DEBUG] [Thread-192456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:26:34.861 [DEBUG] [Thread-192456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:26:34.885 [INFO] [Thread-192456] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:26:34.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:26:35.503 [DEBUG] [Thread-192456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:26:35.503 [DEBUG] [Thread-192456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:26:35.504 [DEBUG] [Thread-192456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:26:35.545 [DEBUG] [Thread-192456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:26:35.545 [DEBUG] [Thread-192456] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:26:35.548 [DEBUG] [Thread-192456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:26:35.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:26:35.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:26:35.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:26:35.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:26:35.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:26:35.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:26:35.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:26:35.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:26:35.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:26:35.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.809835 -999.00  +10.00  26.96     64   +3.50 1 1 1 1 1     0    0 5.63 -35.30 ZNESW 25.8 27.0 155.4 34.9 10.5 -25.2 10.3 -24.3 10.2 -23.2 10.5 -24.5
2026-02-14T21:26:35.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:26:35.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:26:35.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.809835
2026-02-14T21:26:35.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:26:35.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:26:35.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:26:35.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:26:35.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:26:35.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:25:58', tmtdew=7.68, humidity=59.08, cloud=0.0, wind=39.24, temperature=10.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:25:58', seeing=4.21, atlas_timestamp='2026-02-14T19:26:09.744', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.025249999999999773, 0.02674999999999983, -0.0070000000000014495, 0.019000000000000128, -0.03274999999999828, -0.018500000000001293, 0.009250000000001535, 0.006499999999999062, -0.007500000000000284, 0.010749999999999815, -0.005000000000000782, 0.048500000000000654, 0.03324999999999889, 0.006999999999999673, 0.009999999999999787, 0.04824999999999946, 0.024499999999999744, -0.04750000000000121, -0.013750000000001705, 0.06999999999999851, 0.049249999999998906, -0.0017499999999976978, 0.015750000000000597, 0.05599999999999916, 0.045499999999998764, 0.021750000000000824, 0.0035000000000007248, 0.07900000000000063, 0.015000000000000568, 0.02500000000000213, 0.008000000000000895, 0.0072499999999990905], zp_timestamp='2026-02-14T19:24:00')
2026-02-14T21:26:35.575 [DEBUG] [Thread-192456] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:26:35.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-14T21:26:35.671 [DEBUG] [Thread-192459] [transport.py] [_log()] starting thread (client mode): 0xa2d11f90
2026-02-14T21:26:35.671 [DEBUG] [Thread-192459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:26:35.686 [DEBUG] [Thread-192459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:26:35.686 [INFO] [Thread-192459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:26:35.694 [DEBUG] [Thread-192459] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:26:35.694 [DEBUG] [Thread-192459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:26:35.694 [DEBUG] [Thread-192459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:26:35.694 [DEBUG] [Thread-192459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:26:35.694 [DEBUG] [Thread-192459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:26:35.694 [DEBUG] [Thread-192459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:26:35.694 [DEBUG] [Thread-192459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:26:35.695 [DEBUG] [Thread-192459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:26:35.695 [DEBUG] [Thread-192459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:26:35.695 [DEBUG] [Thread-192459] [transport.py] [_log()] client lang: <none>
2026-02-14T21:26:35.695 [DEBUG] [Thread-192459] [transport.py] [_log()] server lang: <none>
2026-02-14T21:26:35.695 [DEBUG] [Thread-192459] [transport.py] [_log()] kex follows: False
2026-02-14T21:26:35.695 [DEBUG] [Thread-192459] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:26:35.695 [DEBUG] [Thread-192459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:26:35.695 [DEBUG] [Thread-192459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:26:35.695 [DEBUG] [Thread-192459] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:26:35.695 [DEBUG] [Thread-192459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:26:35.695 [DEBUG] [Thread-192459] [transport.py] [_log()] Compression: none
2026-02-14T21:26:35.695 [DEBUG] [Thread-192459] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:26:35.754 [DEBUG] [Thread-192459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:26:35.755 [DEBUG] [Thread-192459] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:26:35.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:26:35.756 [DEBUG] [Thread-192459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:26:35.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:26:35.810 [DEBUG] [Thread-192459] [transport.py] [_log()] userauth is OK
2026-02-14T21:26:35.811 [DEBUG] [Thread-192459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:26:35.811 [DEBUG] [Thread-192459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:26:35.811 [DEBUG] [Thread-192459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:26:35.811 [DEBUG] [Thread-192459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:26:35.830 [INFO] [Thread-192459] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:26:35.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-14T21:26:35.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:26:36.688 [DEBUG] [Thread-192459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:26:36.688 [DEBUG] [Thread-192459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:26:36.736 [DEBUG] [Thread-192459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:26:36.737 [DEBUG] [Thread-192459] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:26:36.746 [DEBUG] [Thread-192459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:26:36.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:26:36.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-14T21:26:36.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:26:36.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:26:36.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:26:36.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:26:36.783 [DEBUG] [Thread-192459] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:26:40.000 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:26:42.977 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:26:42.978 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:26:45.099 [DEBUG] [Thread-192461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:26:56.366 [DEBUG] [Thread-192462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:27:00.160 [DEBUG] [Thread-192463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:27:06.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:27:06.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:27:06.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-14T21:27:08.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 26, 34), 7.86, 58.13, 0.0, 37.65, 10.32, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:27:08.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:26:34
2026-02-14T21:27:08.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:27:09.128 [DEBUG] [Thread-192464] [transport.py] [_log()] starting thread (client mode): 0xa2d12e60
2026-02-14T21:27:09.129 [DEBUG] [Thread-192464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:27:09.150 [DEBUG] [Thread-192464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:27:09.150 [INFO] [Thread-192464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:27:09.153 [DEBUG] [Thread-192464] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:27:09.153 [DEBUG] [Thread-192464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:27:09.153 [DEBUG] [Thread-192464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:27:09.153 [DEBUG] [Thread-192464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:27:09.153 [DEBUG] [Thread-192464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:27:09.153 [DEBUG] [Thread-192464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:27:09.154 [DEBUG] [Thread-192464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:27:09.154 [DEBUG] [Thread-192464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:27:09.154 [DEBUG] [Thread-192464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:27:09.154 [DEBUG] [Thread-192464] [transport.py] [_log()] client lang: <none>
2026-02-14T21:27:09.154 [DEBUG] [Thread-192464] [transport.py] [_log()] server lang: <none>
2026-02-14T21:27:09.154 [DEBUG] [Thread-192464] [transport.py] [_log()] kex follows: False
2026-02-14T21:27:09.154 [DEBUG] [Thread-192464] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:27:09.154 [DEBUG] [Thread-192464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:27:09.154 [DEBUG] [Thread-192464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:27:09.154 [DEBUG] [Thread-192464] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:27:09.154 [DEBUG] [Thread-192464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:27:09.154 [DEBUG] [Thread-192464] [transport.py] [_log()] Compression: none
2026-02-14T21:27:09.154 [DEBUG] [Thread-192464] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:27:09.173 [DEBUG] [Thread-192464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:27:09.174 [DEBUG] [Thread-192464] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:27:09.174 [DEBUG] [Thread-192464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:27:09.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:27:09.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:27:09.176 [DEBUG] [Thread-192464] [transport.py] [_log()] userauth is OK
2026-02-14T21:27:09.177 [DEBUG] [Thread-192464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:27:09.177 [DEBUG] [Thread-192464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:27:09.177 [DEBUG] [Thread-192464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:27:09.177 [DEBUG] [Thread-192464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:27:09.200 [INFO] [Thread-192464] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:27:09.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:27:09.921 [DEBUG] [Thread-192464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:27:09.921 [DEBUG] [Thread-192464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:27:09.922 [DEBUG] [Thread-192464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:27:09.962 [DEBUG] [Thread-192464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:27:09.962 [DEBUG] [Thread-192464] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:27:09.965 [DEBUG] [Thread-192464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:27:09.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:27:09.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:27:09.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:27:09.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:27:09.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:27:09.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:27:09.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:27:09.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:27:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:27:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.810183 -999.00  +10.00  30.92     64   +3.50 1 1 2 1 1     0    0 5.74 -37.00 ZNESW 25.2 30.9 165.6 39.5 10.5 -25.3 10.4 -24.3 10.1 -23.1 10.5 -24.4
2026-02-14T21:27:09.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:27:09.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:27:09.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.810183
2026-02-14T21:27:09.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:27:09.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:27:09.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:27:09.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:27:09.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:27:09.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:26:34', tmtdew=7.86, humidity=58.13, cloud=0.0, wind=37.65, temperature=10.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:26:34', seeing=4.3, atlas_timestamp='2026-02-14T19:26:39.811', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.025249999999999773, 0.02674999999999983, -0.0070000000000014495, 0.019000000000000128, -0.03274999999999828, -0.018500000000001293, 0.009250000000001535, 0.006499999999999062, -0.007500000000000284, 0.010749999999999815, -0.005000000000000782, 0.048500000000000654, 0.03324999999999889, 0.006999999999999673, 0.009999999999999787, 0.04824999999999946, 0.024499999999999744, -0.04750000000000121, -0.013750000000001705, 0.06999999999999851, 0.049249999999998906, -0.0017499999999976978, 0.015750000000000597, 0.05599999999999916, 0.045499999999998764, 0.021750000000000824, 0.0035000000000007248, 0.07900000000000063, 0.015000000000000568, 0.02500000000000213, 0.008000000000000895, 0.0072499999999990905], zp_timestamp='2026-02-14T19:24:00')
2026-02-14T21:27:09.992 [DEBUG] [Thread-192464] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:27:10.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-14T21:27:10.087 [DEBUG] [Thread-192467] [transport.py] [_log()] starting thread (client mode): 0xa57739d0
2026-02-14T21:27:10.087 [DEBUG] [Thread-192467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:27:10.101 [DEBUG] [Thread-192467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:27:10.101 [INFO] [Thread-192467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:27:10.109 [DEBUG] [Thread-192467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:27:10.109 [DEBUG] [Thread-192467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:27:10.109 [DEBUG] [Thread-192467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:27:10.109 [DEBUG] [Thread-192467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:27:10.109 [DEBUG] [Thread-192467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:27:10.109 [DEBUG] [Thread-192467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:27:10.109 [DEBUG] [Thread-192467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:27:10.109 [DEBUG] [Thread-192467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:27:10.109 [DEBUG] [Thread-192467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:27:10.109 [DEBUG] [Thread-192467] [transport.py] [_log()] client lang: <none>
2026-02-14T21:27:10.109 [DEBUG] [Thread-192467] [transport.py] [_log()] server lang: <none>
2026-02-14T21:27:10.109 [DEBUG] [Thread-192467] [transport.py] [_log()] kex follows: False
2026-02-14T21:27:10.109 [DEBUG] [Thread-192467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:27:10.109 [DEBUG] [Thread-192467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:27:10.109 [DEBUG] [Thread-192467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:27:10.109 [DEBUG] [Thread-192467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:27:10.109 [DEBUG] [Thread-192467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:27:10.109 [DEBUG] [Thread-192467] [transport.py] [_log()] Compression: none
2026-02-14T21:27:10.110 [DEBUG] [Thread-192467] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:27:10.166 [DEBUG] [Thread-192467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:27:10.167 [DEBUG] [Thread-192467] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:27:10.167 [DEBUG] [Thread-192467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:27:10.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:27:10.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:27:10.223 [DEBUG] [Thread-192467] [transport.py] [_log()] userauth is OK
2026-02-14T21:27:10.223 [DEBUG] [Thread-192467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:27:10.223 [DEBUG] [Thread-192467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:27:10.223 [DEBUG] [Thread-192467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:27:10.223 [DEBUG] [Thread-192467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:27:10.241 [INFO] [Thread-192467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:27:10.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-14T21:27:10.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:27:11.069 [DEBUG] [Thread-192467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:27:11.070 [DEBUG] [Thread-192467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:27:11.117 [DEBUG] [Thread-192467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:27:11.118 [DEBUG] [Thread-192467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:27:11.127 [DEBUG] [Thread-192467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:27:11.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:27:11.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:27:11.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-14T21:27:11.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:27:11.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:27:11.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:27:11.163 [DEBUG] [Thread-192467] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:27:15.198 [DEBUG] [Thread-192469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:27:30.257 [DEBUG] [Thread-192470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:27:41.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:27:41.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:27:41.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-14T21:27:43.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 27, 9), 7.66, 59.15, 0.0, 36.89, 10.13, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:27:43.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:27:09
2026-02-14T21:27:43.179 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:27:43.180 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:27:43.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:27:43.541 [DEBUG] [Thread-192471] [transport.py] [_log()] starting thread (client mode): 0xa2d78d00
2026-02-14T21:27:43.541 [DEBUG] [Thread-192471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:27:43.561 [DEBUG] [Thread-192471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:27:43.562 [INFO] [Thread-192471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:27:43.565 [DEBUG] [Thread-192471] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:27:43.565 [DEBUG] [Thread-192471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:27:43.565 [DEBUG] [Thread-192471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:27:43.565 [DEBUG] [Thread-192471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:27:43.565 [DEBUG] [Thread-192471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:27:43.565 [DEBUG] [Thread-192471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:27:43.565 [DEBUG] [Thread-192471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:27:43.565 [DEBUG] [Thread-192471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:27:43.565 [DEBUG] [Thread-192471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:27:43.565 [DEBUG] [Thread-192471] [transport.py] [_log()] client lang: <none>
2026-02-14T21:27:43.565 [DEBUG] [Thread-192471] [transport.py] [_log()] server lang: <none>
2026-02-14T21:27:43.566 [DEBUG] [Thread-192471] [transport.py] [_log()] kex follows: False
2026-02-14T21:27:43.566 [DEBUG] [Thread-192471] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:27:43.566 [DEBUG] [Thread-192471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:27:43.566 [DEBUG] [Thread-192471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:27:43.566 [DEBUG] [Thread-192471] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:27:43.566 [DEBUG] [Thread-192471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:27:43.566 [DEBUG] [Thread-192471] [transport.py] [_log()] Compression: none
2026-02-14T21:27:43.566 [DEBUG] [Thread-192471] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:27:43.584 [DEBUG] [Thread-192471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:27:43.585 [DEBUG] [Thread-192471] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:27:43.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:27:43.587 [DEBUG] [Thread-192471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:27:43.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:27:43.589 [DEBUG] [Thread-192471] [transport.py] [_log()] userauth is OK
2026-02-14T21:27:43.590 [DEBUG] [Thread-192471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:27:43.590 [DEBUG] [Thread-192471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:27:43.590 [DEBUG] [Thread-192471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:27:43.590 [DEBUG] [Thread-192471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:27:43.610 [INFO] [Thread-192471] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:27:43.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:27:44.268 [DEBUG] [Thread-192471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:27:44.268 [DEBUG] [Thread-192471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:27:44.268 [DEBUG] [Thread-192471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:27:44.309 [DEBUG] [Thread-192471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:27:44.310 [DEBUG] [Thread-192471] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:27:44.313 [DEBUG] [Thread-192471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:27:44.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:27:44.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:27:44.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:27:44.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:27:44.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:27:44.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:27:44.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:27:44.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:27:44.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:27:44.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.810530 -999.00  +10.00  29.58     64   +3.50 1 1 1 1 1     0    0 5.67 -35.62 ZNESW 28.8 29.6 163.8 35.9 10.5 -25.2 10.3 -24.3 10.2 -23.2 10.5 -24.5
2026-02-14T21:27:44.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:27:44.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:27:44.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.810530
2026-02-14T21:27:44.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:27:44.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:27:44.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:27:44.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:27:44.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:27:44.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:27:09', tmtdew=7.66, humidity=59.15, cloud=0.0, wind=36.89, temperature=10.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:27:10', seeing=5.17, atlas_timestamp='2026-02-14T19:27:09.792', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.025249999999999773, 0.02674999999999983, -0.0070000000000014495, 0.019000000000000128, -0.03274999999999828, -0.018500000000001293, 0.009250000000001535, 0.006499999999999062, -0.007500000000000284, 0.010749999999999815, -0.005000000000000782, 0.048500000000000654, 0.03324999999999889, 0.006999999999999673, 0.009999999999999787, 0.04824999999999946, 0.024499999999999744, -0.04750000000000121, -0.013750000000001705, 0.06999999999999851, 0.049249999999998906, -0.0017499999999976978, 0.015750000000000597, 0.05599999999999916, 0.045499999999998764, 0.021750000000000824, 0.0035000000000007248, 0.07900000000000063, 0.015000000000000568, 0.02500000000000213, 0.008000000000000895, 0.0072499999999990905], zp_timestamp='2026-02-14T19:24:00')
2026-02-14T21:27:44.337 [DEBUG] [Thread-192471] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:27:44.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-14T21:27:44.434 [DEBUG] [Thread-192474] [transport.py] [_log()] starting thread (client mode): 0xa2d03670
2026-02-14T21:27:44.434 [DEBUG] [Thread-192474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:27:44.449 [DEBUG] [Thread-192474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:27:44.449 [INFO] [Thread-192474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:27:44.457 [DEBUG] [Thread-192474] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:27:44.457 [DEBUG] [Thread-192474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:27:44.457 [DEBUG] [Thread-192474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:27:44.457 [DEBUG] [Thread-192474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:27:44.457 [DEBUG] [Thread-192474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:27:44.457 [DEBUG] [Thread-192474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:27:44.457 [DEBUG] [Thread-192474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:27:44.457 [DEBUG] [Thread-192474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:27:44.457 [DEBUG] [Thread-192474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:27:44.457 [DEBUG] [Thread-192474] [transport.py] [_log()] client lang: <none>
2026-02-14T21:27:44.457 [DEBUG] [Thread-192474] [transport.py] [_log()] server lang: <none>
2026-02-14T21:27:44.457 [DEBUG] [Thread-192474] [transport.py] [_log()] kex follows: False
2026-02-14T21:27:44.457 [DEBUG] [Thread-192474] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:27:44.457 [DEBUG] [Thread-192474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:27:44.457 [DEBUG] [Thread-192474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:27:44.458 [DEBUG] [Thread-192474] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:27:44.458 [DEBUG] [Thread-192474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:27:44.458 [DEBUG] [Thread-192474] [transport.py] [_log()] Compression: none
2026-02-14T21:27:44.458 [DEBUG] [Thread-192474] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:27:44.515 [DEBUG] [Thread-192474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:27:44.516 [DEBUG] [Thread-192474] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:27:44.517 [DEBUG] [Thread-192474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:27:44.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:27:44.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:27:44.571 [DEBUG] [Thread-192474] [transport.py] [_log()] userauth is OK
2026-02-14T21:27:44.572 [DEBUG] [Thread-192474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:27:44.572 [DEBUG] [Thread-192474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:27:44.572 [DEBUG] [Thread-192474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:27:44.572 [DEBUG] [Thread-192474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:27:44.591 [INFO] [Thread-192474] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:27:44.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-14T21:27:44.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:27:45.293 [DEBUG] [Thread-192476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:27:45.398 [DEBUG] [Thread-192474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:27:45.399 [DEBUG] [Thread-192474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:27:45.449 [DEBUG] [Thread-192474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:27:45.449 [DEBUG] [Thread-192474] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:27:45.458 [DEBUG] [Thread-192474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:27:45.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:27:45.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-14T21:27:45.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-14T21:27:45.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:27:45.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:27:45.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:27:45.493 [DEBUG] [Thread-192474] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:27:56.447 [DEBUG] [Thread-192477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:28:00.343 [DEBUG] [Thread-192478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:28:13.889 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:28:15.379 [DEBUG] [Thread-192479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:28:15.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:28:15.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:28:15.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-14T21:28:17.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 27, 44), 7.67, 59.15, 0.0, 35.38, 10.14, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:28:17.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:27:44
2026-02-14T21:28:17.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:28:17.847 [DEBUG] [Thread-192480] [transport.py] [_log()] starting thread (client mode): 0xa2d7b550
2026-02-14T21:28:17.847 [DEBUG] [Thread-192480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:28:17.867 [DEBUG] [Thread-192480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:28:17.867 [INFO] [Thread-192480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:28:17.870 [DEBUG] [Thread-192480] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:28:17.870 [DEBUG] [Thread-192480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:28:17.870 [DEBUG] [Thread-192480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:28:17.871 [DEBUG] [Thread-192480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:28:17.871 [DEBUG] [Thread-192480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:28:17.871 [DEBUG] [Thread-192480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:28:17.871 [DEBUG] [Thread-192480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:28:17.871 [DEBUG] [Thread-192480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:28:17.871 [DEBUG] [Thread-192480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:28:17.871 [DEBUG] [Thread-192480] [transport.py] [_log()] client lang: <none>
2026-02-14T21:28:17.871 [DEBUG] [Thread-192480] [transport.py] [_log()] server lang: <none>
2026-02-14T21:28:17.871 [DEBUG] [Thread-192480] [transport.py] [_log()] kex follows: False
2026-02-14T21:28:17.871 [DEBUG] [Thread-192480] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:28:17.871 [DEBUG] [Thread-192480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:28:17.871 [DEBUG] [Thread-192480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:28:17.871 [DEBUG] [Thread-192480] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:28:17.871 [DEBUG] [Thread-192480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:28:17.871 [DEBUG] [Thread-192480] [transport.py] [_log()] Compression: none
2026-02-14T21:28:17.871 [DEBUG] [Thread-192480] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:28:17.889 [DEBUG] [Thread-192480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:28:17.890 [DEBUG] [Thread-192480] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:28:17.890 [DEBUG] [Thread-192480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:28:17.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:28:17.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:28:17.892 [DEBUG] [Thread-192480] [transport.py] [_log()] userauth is OK
2026-02-14T21:28:17.892 [DEBUG] [Thread-192480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:28:17.892 [DEBUG] [Thread-192480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:28:17.893 [DEBUG] [Thread-192480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:28:17.893 [DEBUG] [Thread-192480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:28:17.916 [INFO] [Thread-192480] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:28:17.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:28:18.547 [DEBUG] [Thread-192480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:28:18.548 [DEBUG] [Thread-192480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:28:18.548 [DEBUG] [Thread-192480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:28:18.588 [DEBUG] [Thread-192480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:28:18.589 [DEBUG] [Thread-192480] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:28:18.592 [DEBUG] [Thread-192480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:28:18.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:28:18.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:28:18.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:28:18.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:28:18.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:28:18.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:28:18.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:28:18.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:28:18.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:28:18.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.810877 -999.00  +10.00  26.86     64   +3.50 1 1 1 1 1     0    0 5.58 -36.80 ZNESW 24.6 26.9 163.4 36.6 10.5 -25.3 10.3 -24.4 10.1 -23.1 10.5 -24.4
2026-02-14T21:28:18.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:28:18.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:28:18.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.810877
2026-02-14T21:28:18.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:28:18.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:28:18.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:28:18.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:28:18.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:28:18.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:27:44', tmtdew=7.67, humidity=59.15, cloud=0.0, wind=35.38, temperature=10.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:27:45', seeing=4.41, atlas_timestamp='2026-02-14T19:27:39.773', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.025249999999999773, 0.02674999999999983, -0.0070000000000014495, 0.019000000000000128, -0.03274999999999828, -0.018500000000001293, 0.009250000000001535, 0.006499999999999062, -0.007500000000000284, 0.010749999999999815, -0.005000000000000782, 0.048500000000000654, 0.03324999999999889, 0.006999999999999673, 0.009999999999999787, 0.04824999999999946, 0.024499999999999744, -0.04750000000000121, -0.013750000000001705, 0.06999999999999851, 0.049249999999998906, -0.0017499999999976978, 0.015750000000000597, 0.05599999999999916, 0.045499999999998764, 0.021750000000000824, 0.0035000000000007248, 0.07900000000000063, 0.015000000000000568, 0.02500000000000213, 0.008000000000000895, 0.0072499999999990905], zp_timestamp='2026-02-14T19:24:00')
2026-02-14T21:28:18.618 [DEBUG] [Thread-192480] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:28:18.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T21:28:18.713 [DEBUG] [Thread-192483] [transport.py] [_log()] starting thread (client mode): 0xa2d78790
2026-02-14T21:28:18.713 [DEBUG] [Thread-192483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:28:18.727 [DEBUG] [Thread-192483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:28:18.728 [INFO] [Thread-192483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:28:18.735 [DEBUG] [Thread-192483] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:28:18.735 [DEBUG] [Thread-192483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:28:18.736 [DEBUG] [Thread-192483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:28:18.736 [DEBUG] [Thread-192483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:28:18.736 [DEBUG] [Thread-192483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:28:18.736 [DEBUG] [Thread-192483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:28:18.736 [DEBUG] [Thread-192483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:28:18.736 [DEBUG] [Thread-192483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:28:18.736 [DEBUG] [Thread-192483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:28:18.736 [DEBUG] [Thread-192483] [transport.py] [_log()] client lang: <none>
2026-02-14T21:28:18.736 [DEBUG] [Thread-192483] [transport.py] [_log()] server lang: <none>
2026-02-14T21:28:18.736 [DEBUG] [Thread-192483] [transport.py] [_log()] kex follows: False
2026-02-14T21:28:18.736 [DEBUG] [Thread-192483] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:28:18.736 [DEBUG] [Thread-192483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:28:18.736 [DEBUG] [Thread-192483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:28:18.736 [DEBUG] [Thread-192483] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:28:18.736 [DEBUG] [Thread-192483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:28:18.736 [DEBUG] [Thread-192483] [transport.py] [_log()] Compression: none
2026-02-14T21:28:18.736 [DEBUG] [Thread-192483] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:28:18.750 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:28:18.796 [DEBUG] [Thread-192483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:28:18.796 [DEBUG] [Thread-192483] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:28:18.797 [DEBUG] [Thread-192483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:28:18.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:28:18.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:28:18.852 [DEBUG] [Thread-192483] [transport.py] [_log()] userauth is OK
2026-02-14T21:28:18.853 [DEBUG] [Thread-192483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:28:18.853 [DEBUG] [Thread-192483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:28:18.853 [DEBUG] [Thread-192483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:28:18.853 [DEBUG] [Thread-192483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:28:18.872 [INFO] [Thread-192483] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:28:18.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-14T21:28:18.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:28:19.677 [DEBUG] [Thread-192483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:28:19.677 [DEBUG] [Thread-192483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:28:19.725 [DEBUG] [Thread-192483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:28:19.726 [DEBUG] [Thread-192483] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:28:19.734 [DEBUG] [Thread-192483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:28:19.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:28:19.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-14T21:28: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') -> 00000000
2026-02-14T21:28:19.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:28:19.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:28:19.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:28:19.776 [DEBUG] [Thread-192483] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:28:23.309 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:28:26.347 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:28:30.427 [DEBUG] [Thread-192485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:28:32.713 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:28:43.380 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:28:43.381 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:28:45.493 [DEBUG] [Thread-192486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:28:49.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:28:49.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:28: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-14T21:28:51.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 28, 19), 7.66, 59.15, 0.0, 35.43, 10.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:28:51.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:28:19
2026-02-14T21:28:51.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:28:52.147 [DEBUG] [Thread-192487] [transport.py] [_log()] starting thread (client mode): 0xa2d01270
2026-02-14T21:28:52.147 [DEBUG] [Thread-192487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:28:52.167 [DEBUG] [Thread-192487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:28:52.167 [INFO] [Thread-192487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:28:52.170 [DEBUG] [Thread-192487] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:28:52.170 [DEBUG] [Thread-192487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:28:52.170 [DEBUG] [Thread-192487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:28:52.170 [DEBUG] [Thread-192487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:28:52.170 [DEBUG] [Thread-192487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:28:52.170 [DEBUG] [Thread-192487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:28:52.170 [DEBUG] [Thread-192487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:28:52.170 [DEBUG] [Thread-192487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:28:52.170 [DEBUG] [Thread-192487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:28:52.170 [DEBUG] [Thread-192487] [transport.py] [_log()] client lang: <none>
2026-02-14T21:28:52.170 [DEBUG] [Thread-192487] [transport.py] [_log()] server lang: <none>
2026-02-14T21:28:52.170 [DEBUG] [Thread-192487] [transport.py] [_log()] kex follows: False
2026-02-14T21:28:52.170 [DEBUG] [Thread-192487] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:28:52.170 [DEBUG] [Thread-192487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:28:52.170 [DEBUG] [Thread-192487] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:28:52.170 [DEBUG] [Thread-192487] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:28:52.170 [DEBUG] [Thread-192487] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:28:52.170 [DEBUG] [Thread-192487] [transport.py] [_log()] Compression: none
2026-02-14T21:28:52.170 [DEBUG] [Thread-192487] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:28:52.186 [DEBUG] [Thread-192487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:28:52.186 [DEBUG] [Thread-192487] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:28:52.187 [DEBUG] [Thread-192487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:28:52.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:28:52.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:28:52.187 [DEBUG] [Thread-192487] [transport.py] [_log()] userauth is OK
2026-02-14T21:28:52.187 [DEBUG] [Thread-192487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:28:52.187 [DEBUG] [Thread-192487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:28:52.187 [DEBUG] [Thread-192487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:28:52.187 [DEBUG] [Thread-192487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:28:52.197 [INFO] [Thread-192487] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:28:52.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:28:52.835 [DEBUG] [Thread-192487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:28:52.836 [DEBUG] [Thread-192487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:28:52.836 [DEBUG] [Thread-192487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:28:52.877 [DEBUG] [Thread-192487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:28:52.877 [DEBUG] [Thread-192487] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:28:52.879 [DEBUG] [Thread-192487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:28:52.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:28:52.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:28:52.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:28:52.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:28:52.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:28:52.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:28:52.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:28:52.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:28:52.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:28:52.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.811224 -999.00  +10.00  25.08     64   +3.50 1 1 1 1 1     0    0 5.76 -37.22 ZNESW 23.0 25.1 169.8 30.6 10.5 -25.4 10.3 -24.2 10.2 -23.3 10.5 -24.4
2026-02-14T21:28:52.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:28:52.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:28:52.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.811224
2026-02-14T21:28:52.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:28:52.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:28:52.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:28:52.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:28:52.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:28:52.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:28:19', tmtdew=7.66, humidity=59.15, cloud=0.0, wind=35.43, temperature=10.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:28:20', seeing=5.18, atlas_timestamp='2026-02-14T19:28:09.754', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.025249999999999773, 0.02674999999999983, -0.0070000000000014495, 0.019000000000000128, -0.03274999999999828, -0.018500000000001293, 0.009250000000001535, 0.006499999999999062, -0.007500000000000284, 0.010749999999999815, -0.005000000000000782, 0.048500000000000654, 0.03324999999999889, 0.006999999999999673, 0.009999999999999787, 0.04824999999999946, 0.024499999999999744, -0.04750000000000121, -0.013750000000001705, 0.06999999999999851, 0.049249999999998906, -0.0017499999999976978, 0.015750000000000597, 0.05599999999999916, 0.045499999999998764, 0.021750000000000824, 0.0035000000000007248, 0.07900000000000063, 0.015000000000000568, 0.02500000000000213, 0.008000000000000895, 0.0072499999999990905], zp_timestamp='2026-02-14T19:24:00')
2026-02-14T21:28:52.903 [DEBUG] [Thread-192487] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:28:52.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-14T21:28:52.999 [DEBUG] [Thread-192490] [transport.py] [_log()] starting thread (client mode): 0xa57409a0
2026-02-14T21:28:52.999 [DEBUG] [Thread-192490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:28:53.015 [DEBUG] [Thread-192490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:28:53.015 [INFO] [Thread-192490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:28:53.022 [DEBUG] [Thread-192490] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:28:53.022 [DEBUG] [Thread-192490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:28:53.022 [DEBUG] [Thread-192490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:28:53.023 [DEBUG] [Thread-192490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:28:53.023 [DEBUG] [Thread-192490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:28:53.023 [DEBUG] [Thread-192490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:28:53.023 [DEBUG] [Thread-192490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:28:53.023 [DEBUG] [Thread-192490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:28:53.023 [DEBUG] [Thread-192490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:28:53.023 [DEBUG] [Thread-192490] [transport.py] [_log()] client lang: <none>
2026-02-14T21:28:53.023 [DEBUG] [Thread-192490] [transport.py] [_log()] server lang: <none>
2026-02-14T21:28:53.023 [DEBUG] [Thread-192490] [transport.py] [_log()] kex follows: False
2026-02-14T21:28:53.023 [DEBUG] [Thread-192490] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:28:53.023 [DEBUG] [Thread-192490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:28:53.023 [DEBUG] [Thread-192490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:28:53.024 [DEBUG] [Thread-192490] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:28:53.024 [DEBUG] [Thread-192490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:28:53.024 [DEBUG] [Thread-192490] [transport.py] [_log()] Compression: none
2026-02-14T21:28:53.024 [DEBUG] [Thread-192490] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:28:53.083 [DEBUG] [Thread-192490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:28:53.084 [DEBUG] [Thread-192490] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:28:53.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:28:53.085 [DEBUG] [Thread-192490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:28:53.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:28:53.140 [DEBUG] [Thread-192490] [transport.py] [_log()] userauth is OK
2026-02-14T21:28:53.140 [DEBUG] [Thread-192490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:28:53.140 [DEBUG] [Thread-192490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:28:53.140 [DEBUG] [Thread-192490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:28:53.140 [DEBUG] [Thread-192490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:28:53.167 [INFO] [Thread-192490] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:28:53.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-14T21:28:53.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:28:53.988 [DEBUG] [Thread-192490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:28:53.988 [DEBUG] [Thread-192490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:28:54.036 [DEBUG] [Thread-192490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:28:54.036 [DEBUG] [Thread-192490] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:28:54.044 [DEBUG] [Thread-192490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:28:54.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:28:54.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-14T21:28:54.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-14T21:28:54.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:28:54.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:28:54.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:28:54.077 [DEBUG] [Thread-192490] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:28:56.515 [DEBUG] [Thread-192492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:29:00.537 [DEBUG] [Thread-192493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:29:15.589 [DEBUG] [Thread-192494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:29:24.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:29:24.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:29:24.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T21:29:25.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 28, 54), 7.64, 59.25, 0.0, 38.02, 10.13, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:29:25.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:28:54
2026-02-14T21:29:26.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:29:26.478 [DEBUG] [Thread-192495] [transport.py] [_log()] starting thread (client mode): 0xa57d7040
2026-02-14T21:29:26.478 [DEBUG] [Thread-192495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:29:26.497 [DEBUG] [Thread-192495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:29:26.498 [INFO] [Thread-192495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:29:26.501 [DEBUG] [Thread-192495] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:29:26.501 [DEBUG] [Thread-192495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:29:26.501 [DEBUG] [Thread-192495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:29:26.501 [DEBUG] [Thread-192495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:29:26.501 [DEBUG] [Thread-192495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:29:26.501 [DEBUG] [Thread-192495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:29:26.501 [DEBUG] [Thread-192495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:29:26.501 [DEBUG] [Thread-192495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:29:26.501 [DEBUG] [Thread-192495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:29:26.501 [DEBUG] [Thread-192495] [transport.py] [_log()] client lang: <none>
2026-02-14T21:29:26.501 [DEBUG] [Thread-192495] [transport.py] [_log()] server lang: <none>
2026-02-14T21:29:26.501 [DEBUG] [Thread-192495] [transport.py] [_log()] kex follows: False
2026-02-14T21:29:26.501 [DEBUG] [Thread-192495] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:29:26.501 [DEBUG] [Thread-192495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:29:26.501 [DEBUG] [Thread-192495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:29:26.501 [DEBUG] [Thread-192495] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:29:26.501 [DEBUG] [Thread-192495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:29:26.501 [DEBUG] [Thread-192495] [transport.py] [_log()] Compression: none
2026-02-14T21:29:26.501 [DEBUG] [Thread-192495] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:29:26.521 [DEBUG] [Thread-192495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:29:26.522 [DEBUG] [Thread-192495] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:29:26.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:29:26.523 [DEBUG] [Thread-192495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:29:26.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:29:26.525 [DEBUG] [Thread-192495] [transport.py] [_log()] userauth is OK
2026-02-14T21:29:26.525 [DEBUG] [Thread-192495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:29:26.525 [DEBUG] [Thread-192495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:29:26.525 [DEBUG] [Thread-192495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:29:26.525 [DEBUG] [Thread-192495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:29:26.547 [INFO] [Thread-192495] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:29:26.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:29:27.174 [DEBUG] [Thread-192495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:29:27.174 [DEBUG] [Thread-192495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:29:27.175 [DEBUG] [Thread-192495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:29:27.215 [DEBUG] [Thread-192495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:29:27.216 [DEBUG] [Thread-192495] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:29:27.219 [DEBUG] [Thread-192495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:29:27.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:29:27.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:29:27.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:29:27.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:29:27.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:29:27.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:29:27.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:29:27.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:29:27.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:29:27.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.811571 -999.00  +10.00  25.49     64   +3.50 1 1 1 1 1     0    0 5.42 -39.74 ZNESW 31.7 25.5 154.8 38.8 10.5 -25.2 10.3 -24.3 -999.0 -999.0 10.5 -24.3
2026-02-14T21:29:27.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:29:27.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:29:27.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.811571
2026-02-14T21:29:27.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:29:27.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:29:27.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:29:27.245 [DEBUG] [Thread-192495] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:29:27.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:29:27.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:29:27.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:28:54', tmtdew=7.64, humidity=59.25, cloud=0.0, wind=38.02, temperature=10.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:28:55', seeing=4.27, atlas_timestamp='2026-02-14T19:28:39.734', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.025249999999999773, 0.02674999999999983, -0.0070000000000014495, 0.019000000000000128, -0.03274999999999828, -0.018500000000001293, 0.009250000000001535, 0.006499999999999062, -0.007500000000000284, 0.010749999999999815, -0.005000000000000782, 0.048500000000000654, 0.03324999999999889, 0.006999999999999673, 0.009999999999999787, 0.04824999999999946, 0.024499999999999744, -0.04750000000000121, -0.013750000000001705, 0.06999999999999851, 0.049249999999998906, -0.0017499999999976978, 0.015750000000000597, 0.05599999999999916, 0.045499999999998764, 0.021750000000000824, 0.0035000000000007248, 0.07900000000000063, 0.015000000000000568, 0.02500000000000213, 0.008000000000000895, 0.0072499999999990905], zp_timestamp='2026-02-14T19:27:00')
2026-02-14T21:29:27.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-14T21:29:27.338 [DEBUG] [Thread-192498] [transport.py] [_log()] starting thread (client mode): 0xa5741420
2026-02-14T21:29:27.339 [DEBUG] [Thread-192498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:29:27.353 [DEBUG] [Thread-192498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:29:27.353 [INFO] [Thread-192498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:29:27.361 [DEBUG] [Thread-192498] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:29:27.361 [DEBUG] [Thread-192498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:29:27.361 [DEBUG] [Thread-192498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:29:27.361 [DEBUG] [Thread-192498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:29:27.361 [DEBUG] [Thread-192498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:29:27.361 [DEBUG] [Thread-192498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:29:27.361 [DEBUG] [Thread-192498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:29:27.361 [DEBUG] [Thread-192498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:29:27.361 [DEBUG] [Thread-192498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:29:27.361 [DEBUG] [Thread-192498] [transport.py] [_log()] client lang: <none>
2026-02-14T21:29:27.361 [DEBUG] [Thread-192498] [transport.py] [_log()] server lang: <none>
2026-02-14T21:29:27.361 [DEBUG] [Thread-192498] [transport.py] [_log()] kex follows: False
2026-02-14T21:29:27.361 [DEBUG] [Thread-192498] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:29:27.362 [DEBUG] [Thread-192498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:29:27.362 [DEBUG] [Thread-192498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:29:27.362 [DEBUG] [Thread-192498] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:29:27.362 [DEBUG] [Thread-192498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:29:27.362 [DEBUG] [Thread-192498] [transport.py] [_log()] Compression: none
2026-02-14T21:29:27.362 [DEBUG] [Thread-192498] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:29:27.421 [DEBUG] [Thread-192498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:29:27.422 [DEBUG] [Thread-192498] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:29:27.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:29:27.423 [DEBUG] [Thread-192498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:29:27.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:29:27.480 [DEBUG] [Thread-192498] [transport.py] [_log()] userauth is OK
2026-02-14T21:29:27.480 [DEBUG] [Thread-192498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:29:27.480 [DEBUG] [Thread-192498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:29:27.480 [DEBUG] [Thread-192498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:29:27.480 [DEBUG] [Thread-192498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:29:27.502 [INFO] [Thread-192498] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:29:27.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-14T21:29:27.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:29:28.313 [DEBUG] [Thread-192498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:29:28.314 [DEBUG] [Thread-192498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:29:28.361 [DEBUG] [Thread-192498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:29:28.362 [DEBUG] [Thread-192498] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:29:28.371 [DEBUG] [Thread-192498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:29:28.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:29:28.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-14T21:29:28.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-14T21:29:28.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:29:28.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:29:28.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:29:28.407 [DEBUG] [Thread-192498] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:29:30.634 [DEBUG] [Thread-192500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:29:43.582 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:29:43.583 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:29:45.690 [DEBUG] [Thread-192501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:29:47.704 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:29:56.603 [DEBUG] [Thread-192502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:29:58.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:29:58.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:29:58.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-14T21:30:00.726 [DEBUG] [Thread-192503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:30:00.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 29, 30), 7.65, 59.18, 0.0, 36.37, 10.08, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:30:00.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:29:30
2026-02-14T21:30:01.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:30:01.564 [DEBUG] [Thread-192504] [transport.py] [_log()] starting thread (client mode): 0xa5742350
2026-02-14T21:30:01.564 [DEBUG] [Thread-192504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:30:01.575 [DEBUG] [Thread-192504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:30:01.575 [INFO] [Thread-192504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:30:01.578 [DEBUG] [Thread-192504] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:30:01.578 [DEBUG] [Thread-192504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:30:01.578 [DEBUG] [Thread-192504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:30:01.578 [DEBUG] [Thread-192504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:30:01.578 [DEBUG] [Thread-192504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:30:01.578 [DEBUG] [Thread-192504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:30:01.578 [DEBUG] [Thread-192504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:30:01.578 [DEBUG] [Thread-192504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:30:01.578 [DEBUG] [Thread-192504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:30:01.578 [DEBUG] [Thread-192504] [transport.py] [_log()] client lang: <none>
2026-02-14T21:30:01.578 [DEBUG] [Thread-192504] [transport.py] [_log()] server lang: <none>
2026-02-14T21:30:01.579 [DEBUG] [Thread-192504] [transport.py] [_log()] kex follows: False
2026-02-14T21:30:01.579 [DEBUG] [Thread-192504] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:30:01.579 [DEBUG] [Thread-192504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:30:01.579 [DEBUG] [Thread-192504] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:30:01.579 [DEBUG] [Thread-192504] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:30:01.579 [DEBUG] [Thread-192504] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:30:01.579 [DEBUG] [Thread-192504] [transport.py] [_log()] Compression: none
2026-02-14T21:30:01.579 [DEBUG] [Thread-192504] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:30:01.586 [DEBUG] [Thread-192504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:30:01.587 [DEBUG] [Thread-192504] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:30:01.587 [DEBUG] [Thread-192504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:30:01.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:30:01.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:30:01.588 [DEBUG] [Thread-192504] [transport.py] [_log()] userauth is OK
2026-02-14T21:30:01.588 [DEBUG] [Thread-192504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:30:01.588 [DEBUG] [Thread-192504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:30:01.588 [DEBUG] [Thread-192504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:30:01.588 [DEBUG] [Thread-192504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:30:01.601 [INFO] [Thread-192504] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:30:01.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:30:02.389 [DEBUG] [Thread-192504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:30:02.390 [DEBUG] [Thread-192504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:30:02.390 [DEBUG] [Thread-192504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:30:02.430 [DEBUG] [Thread-192504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:30:02.430 [DEBUG] [Thread-192504] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:30:02.433 [DEBUG] [Thread-192504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:30:02.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:30:02.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:30:02.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:30:02.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:30:02.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:30:02.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:30:02.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:30:02.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:30:02.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:30:02.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.812266 -999.00  +10.00  31.22     64   +3.50 1 1 2 1 1     0    0 5.29 -41.06 ZNESW 24.8 31.2 163.8 39.6 10.5 -25.1 10.3 -24.2 10.1 -23.1 10.5 -24.5
2026-02-14T21:30:02.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:30:02.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:30:02.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.812266
2026-02-14T21:30:02.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:30:02.463 [DEBUG] [Thread-192504] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:30:02.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:30:02.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:30:02.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:30:02.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:30:02.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:29:30', tmtdew=7.65, humidity=59.18, cloud=0.0, wind=36.37, temperature=10.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:29:30', seeing=3.92, atlas_timestamp='2026-02-14T19:29:39.782', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.025249999999999773, 0.02674999999999983, -0.0070000000000014495, 0.019000000000000128, -0.03274999999999828, -0.018500000000001293, 0.009250000000001535, 0.006499999999999062, -0.007500000000000284, 0.010749999999999815, -0.005000000000000782, 0.048500000000000654, 0.03324999999999889, 0.006999999999999673, 0.009999999999999787, 0.04824999999999946, 0.024499999999999744, -0.04750000000000121, -0.013750000000001705, 0.06999999999999851, 0.049249999999998906, -0.0017499999999976978, 0.015750000000000597, 0.05599999999999916, 0.045499999999998764, 0.021750000000000824, 0.0035000000000007248, 0.07900000000000063, 0.015000000000000568, 0.02500000000000213, 0.008000000000000895, 0.0072499999999990905], zp_timestamp='2026-02-14T19:27:00')
2026-02-14T21:30:02.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-14T21:30:02.562 [DEBUG] [Thread-192507] [transport.py] [_log()] starting thread (client mode): 0xa57d51b0
2026-02-14T21:30:02.562 [DEBUG] [Thread-192507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:30:02.579 [DEBUG] [Thread-192507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:30:02.579 [INFO] [Thread-192507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:30:02.587 [DEBUG] [Thread-192507] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:30:02.587 [DEBUG] [Thread-192507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:30:02.587 [DEBUG] [Thread-192507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:30:02.587 [DEBUG] [Thread-192507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:30:02.587 [DEBUG] [Thread-192507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:30:02.587 [DEBUG] [Thread-192507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:30:02.587 [DEBUG] [Thread-192507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:30:02.588 [DEBUG] [Thread-192507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:30:02.588 [DEBUG] [Thread-192507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:30:02.588 [DEBUG] [Thread-192507] [transport.py] [_log()] client lang: <none>
2026-02-14T21:30:02.588 [DEBUG] [Thread-192507] [transport.py] [_log()] server lang: <none>
2026-02-14T21:30:02.588 [DEBUG] [Thread-192507] [transport.py] [_log()] kex follows: False
2026-02-14T21:30:02.588 [DEBUG] [Thread-192507] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:30:02.588 [DEBUG] [Thread-192507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:30:02.588 [DEBUG] [Thread-192507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:30:02.588 [DEBUG] [Thread-192507] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:30:02.588 [DEBUG] [Thread-192507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:30:02.589 [DEBUG] [Thread-192507] [transport.py] [_log()] Compression: none
2026-02-14T21:30:02.589 [DEBUG] [Thread-192507] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:30:02.643 [DEBUG] [Thread-192507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:30:02.643 [DEBUG] [Thread-192507] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:30:02.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:30:02.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:30:02.644 [DEBUG] [Thread-192507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:30:02.701 [DEBUG] [Thread-192507] [transport.py] [_log()] userauth is OK
2026-02-14T21:30:02.701 [DEBUG] [Thread-192507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:30:02.702 [DEBUG] [Thread-192507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:30:02.702 [DEBUG] [Thread-192507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:30:02.702 [DEBUG] [Thread-192507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:30:02.726 [INFO] [Thread-192507] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:30:02.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-14T21:30:02.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:30:03.548 [DEBUG] [Thread-192507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:30:03.548 [DEBUG] [Thread-192507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:30:03.596 [DEBUG] [Thread-192507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:30:03.596 [DEBUG] [Thread-192507] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:30:03.605 [DEBUG] [Thread-192507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:30:03.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:30:03.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-14T21:30:03.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-14T21:30:03.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:30:03.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:30:03.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:30:03.638 [DEBUG] [Thread-192507] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:30:15.765 [DEBUG] [Thread-192509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:30:30.826 [DEBUG] [Thread-192510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:30:33.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:30:33.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:30:33.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T21:30:35.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 30, 5), 7.65, 59.2, 0.0, 35.71, 10.05, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:30:35.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:30:05
2026-02-14T21:30:36.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:30:36.154 [DEBUG] [Thread-192511] [transport.py] [_log()] starting thread (client mode): 0xa2d79360
2026-02-14T21:30:36.154 [DEBUG] [Thread-192511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:30:36.174 [DEBUG] [Thread-192511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:30:36.175 [INFO] [Thread-192511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:30:36.178 [DEBUG] [Thread-192511] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:30:36.178 [DEBUG] [Thread-192511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:30:36.178 [DEBUG] [Thread-192511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:30:36.178 [DEBUG] [Thread-192511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:30:36.178 [DEBUG] [Thread-192511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:30:36.178 [DEBUG] [Thread-192511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:30:36.178 [DEBUG] [Thread-192511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:30:36.178 [DEBUG] [Thread-192511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:30:36.178 [DEBUG] [Thread-192511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:30:36.178 [DEBUG] [Thread-192511] [transport.py] [_log()] client lang: <none>
2026-02-14T21:30:36.178 [DEBUG] [Thread-192511] [transport.py] [_log()] server lang: <none>
2026-02-14T21:30:36.178 [DEBUG] [Thread-192511] [transport.py] [_log()] kex follows: False
2026-02-14T21:30:36.179 [DEBUG] [Thread-192511] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:30:36.179 [DEBUG] [Thread-192511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:30:36.179 [DEBUG] [Thread-192511] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:30:36.179 [DEBUG] [Thread-192511] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:30:36.179 [DEBUG] [Thread-192511] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:30:36.179 [DEBUG] [Thread-192511] [transport.py] [_log()] Compression: none
2026-02-14T21:30:36.179 [DEBUG] [Thread-192511] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:30:36.198 [DEBUG] [Thread-192511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:30:36.199 [DEBUG] [Thread-192511] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:30:36.199 [DEBUG] [Thread-192511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:30:36.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:30:36.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:30:36.203 [DEBUG] [Thread-192511] [transport.py] [_log()] userauth is OK
2026-02-14T21:30:36.203 [DEBUG] [Thread-192511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:30:36.203 [DEBUG] [Thread-192511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:30:36.203 [DEBUG] [Thread-192511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:30:36.203 [DEBUG] [Thread-192511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:30:36.218 [INFO] [Thread-192511] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:30:36.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:30:36.854 [DEBUG] [Thread-192511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:30:36.854 [DEBUG] [Thread-192511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:30:36.854 [DEBUG] [Thread-192511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:30:36.894 [DEBUG] [Thread-192511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:30:36.895 [DEBUG] [Thread-192511] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:30:36.898 [DEBUG] [Thread-192511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:30:36.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:30:36.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:30:36.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:30:36.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:30:36.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:30:36.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:30:36.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:30:36.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:30:36.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:30:36.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.812613 -999.00  +10.00  25.71     64   +3.50 1 1 1 1 1     0    0 5.37 -41.08 ZNESW 24.8 25.7 165.8 39.3 10.4 -25.0 10.3 -24.2 10.1 -23.1 10.5 -24.3
2026-02-14T21:30:36.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:30:36.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:30:36.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.812613
2026-02-14T21:30:36.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:30:36.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:30:36.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:30:36.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:30:36.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:30:36.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:30:05', tmtdew=7.65, humidity=59.2, cloud=0.0, wind=35.71, temperature=10.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:30:05', seeing=3.8, atlas_timestamp='2026-02-14T19:30:09.763', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.025249999999999773, 0.02674999999999983, -0.0070000000000014495, 0.019000000000000128, -0.03274999999999828, -0.018500000000001293, 0.009250000000001535, 0.006499999999999062, -0.007500000000000284, 0.010749999999999815, -0.005000000000000782, 0.048500000000000654, 0.03324999999999889, 0.006999999999999673, 0.009999999999999787, 0.04824999999999946, 0.024499999999999744, -0.04750000000000121, -0.013750000000001705, 0.06999999999999851, 0.049249999999998906, -0.0017499999999976978, 0.015750000000000597, 0.05599999999999916, 0.045499999999998764, 0.021750000000000824, 0.0035000000000007248, 0.07900000000000063, 0.015000000000000568, 0.02500000000000213, 0.008000000000000895, 0.0072499999999990905], zp_timestamp='2026-02-14T19:27:00')
2026-02-14T21:30:36.926 [DEBUG] [Thread-192511] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:30:37.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-14T21:30:37.027 [DEBUG] [Thread-192514] [transport.py] [_log()] starting thread (client mode): 0xa5742a10
2026-02-14T21:30:37.027 [DEBUG] [Thread-192514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:30:37.041 [DEBUG] [Thread-192514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:30:37.042 [INFO] [Thread-192514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:30:37.049 [DEBUG] [Thread-192514] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:30:37.049 [DEBUG] [Thread-192514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:30:37.050 [DEBUG] [Thread-192514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:30:37.050 [DEBUG] [Thread-192514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:30:37.050 [DEBUG] [Thread-192514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:30:37.050 [DEBUG] [Thread-192514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:30:37.050 [DEBUG] [Thread-192514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:30:37.050 [DEBUG] [Thread-192514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:30:37.050 [DEBUG] [Thread-192514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:30:37.050 [DEBUG] [Thread-192514] [transport.py] [_log()] client lang: <none>
2026-02-14T21:30:37.050 [DEBUG] [Thread-192514] [transport.py] [_log()] server lang: <none>
2026-02-14T21:30:37.051 [DEBUG] [Thread-192514] [transport.py] [_log()] kex follows: False
2026-02-14T21:30:37.051 [DEBUG] [Thread-192514] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:30:37.051 [DEBUG] [Thread-192514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:30:37.051 [DEBUG] [Thread-192514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:30:37.051 [DEBUG] [Thread-192514] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:30:37.051 [DEBUG] [Thread-192514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:30:37.051 [DEBUG] [Thread-192514] [transport.py] [_log()] Compression: none
2026-02-14T21:30:37.052 [DEBUG] [Thread-192514] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:30:37.110 [DEBUG] [Thread-192514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:30:37.111 [DEBUG] [Thread-192514] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:30:37.111 [DEBUG] [Thread-192514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:30:37.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:30:37.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:30:37.169 [DEBUG] [Thread-192514] [transport.py] [_log()] userauth is OK
2026-02-14T21:30:37.170 [DEBUG] [Thread-192514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:30:37.170 [DEBUG] [Thread-192514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:30:37.170 [DEBUG] [Thread-192514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:30:37.170 [DEBUG] [Thread-192514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:30:37.190 [INFO] [Thread-192514] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:30:37.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-14T21:30:37.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:30:38.014 [DEBUG] [Thread-192514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:30:38.014 [DEBUG] [Thread-192514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:30:38.062 [DEBUG] [Thread-192514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:30:38.062 [DEBUG] [Thread-192514] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:30:38.071 [DEBUG] [Thread-192514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:30:38.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:30:38.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:30:38.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-14T21:30:38.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:30:38.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:30:38.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:30:38.105 [DEBUG] [Thread-192514] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:30:43.790 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:30:43.791 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:30:45.864 [DEBUG] [Thread-192516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:30:56.672 [DEBUG] [Thread-192517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:31:00.912 [DEBUG] [Thread-192518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:31:08.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:31:08.128 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:31:08.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-14T21:31:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 30, 41), 7.79, 58.43, 0.0, 37.68, 10.39, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:31:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:30:41
2026-02-14T21:31:10.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:31:10.514 [DEBUG] [Thread-192519] [transport.py] [_log()] starting thread (client mode): 0xa57d7af0
2026-02-14T21:31:10.514 [DEBUG] [Thread-192519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:31:10.535 [DEBUG] [Thread-192519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:31:10.536 [INFO] [Thread-192519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:31:10.539 [DEBUG] [Thread-192519] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:31:10.539 [DEBUG] [Thread-192519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:31:10.539 [DEBUG] [Thread-192519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:31:10.539 [DEBUG] [Thread-192519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:31:10.539 [DEBUG] [Thread-192519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:31:10.539 [DEBUG] [Thread-192519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:31:10.539 [DEBUG] [Thread-192519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:31:10.539 [DEBUG] [Thread-192519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:31:10.539 [DEBUG] [Thread-192519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:31:10.539 [DEBUG] [Thread-192519] [transport.py] [_log()] client lang: <none>
2026-02-14T21:31:10.539 [DEBUG] [Thread-192519] [transport.py] [_log()] server lang: <none>
2026-02-14T21:31:10.539 [DEBUG] [Thread-192519] [transport.py] [_log()] kex follows: False
2026-02-14T21:31:10.539 [DEBUG] [Thread-192519] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:31:10.539 [DEBUG] [Thread-192519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:31:10.539 [DEBUG] [Thread-192519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:31:10.539 [DEBUG] [Thread-192519] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:31:10.539 [DEBUG] [Thread-192519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:31:10.539 [DEBUG] [Thread-192519] [transport.py] [_log()] Compression: none
2026-02-14T21:31:10.540 [DEBUG] [Thread-192519] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:31:10.555 [DEBUG] [Thread-192519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:31:10.556 [DEBUG] [Thread-192519] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:31:10.556 [DEBUG] [Thread-192519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:31:10.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:31:10.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:31:10.558 [DEBUG] [Thread-192519] [transport.py] [_log()] userauth is OK
2026-02-14T21:31:10.559 [DEBUG] [Thread-192519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:31:10.559 [DEBUG] [Thread-192519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:31:10.559 [DEBUG] [Thread-192519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:31:10.559 [DEBUG] [Thread-192519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:31:10.583 [INFO] [Thread-192519] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:31:10.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:31:11.372 [DEBUG] [Thread-192519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:31:11.372 [DEBUG] [Thread-192519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:31:11.381 [DEBUG] [Thread-192519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:31:11.414 [DEBUG] [Thread-192519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:31:11.414 [DEBUG] [Thread-192519] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:31:11.417 [DEBUG] [Thread-192519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:31:11.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:31:11.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:31:11.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:31:11.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:31:11.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:31:11.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:31:11.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:31:11.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:31:11.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:31:11.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.812960 -999.00  +10.00  29.10     64   +3.50 1 1 1 1 1     0    0 5.78 -37.29 ZNESW 27.9 29.1 163.2 32.6 10.4 -25.2 10.3 -24.1 10.1 -23.1 10.4 -24.5
2026-02-14T21:31:11.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:31:11.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:31:11.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.812960
2026-02-14T21:31:11.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:31:11.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:31:11.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:31:11.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:31:11.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:31:11.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:30:41', tmtdew=7.79, humidity=58.43, cloud=0.0, wind=37.68, temperature=10.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:30:41', seeing=4.02, atlas_timestamp='2026-02-14T19:30:39.744', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.025249999999999773, 0.02674999999999983, -0.0070000000000014495, 0.019000000000000128, -0.03274999999999828, -0.018500000000001293, 0.009250000000001535, 0.006499999999999062, -0.007500000000000284, 0.010749999999999815, -0.005000000000000782, 0.048500000000000654, 0.03324999999999889, 0.006999999999999673, 0.009999999999999787, 0.04824999999999946, 0.024499999999999744, -0.04750000000000121, -0.013750000000001705, 0.06999999999999851, 0.049249999999998906, -0.0017499999999976978, 0.015750000000000597, 0.05599999999999916, 0.045499999999998764, 0.021750000000000824, 0.0035000000000007248, 0.07900000000000063, 0.015000000000000568, 0.02500000000000213, 0.008000000000000895, 0.0072499999999990905], zp_timestamp='2026-02-14T19:27:00')
2026-02-14T21:31:11.444 [DEBUG] [Thread-192519] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:31:11.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-14T21:31:11.545 [DEBUG] [Thread-192522] [transport.py] [_log()] starting thread (client mode): 0xa2d56e60
2026-02-14T21:31:11.545 [DEBUG] [Thread-192522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:31:11.560 [DEBUG] [Thread-192522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:31:11.560 [INFO] [Thread-192522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:31:11.568 [DEBUG] [Thread-192522] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:31:11.568 [DEBUG] [Thread-192522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:31:11.568 [DEBUG] [Thread-192522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:31:11.568 [DEBUG] [Thread-192522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:31:11.568 [DEBUG] [Thread-192522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:31:11.568 [DEBUG] [Thread-192522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:31:11.568 [DEBUG] [Thread-192522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:31:11.568 [DEBUG] [Thread-192522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:31:11.568 [DEBUG] [Thread-192522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:31:11.569 [DEBUG] [Thread-192522] [transport.py] [_log()] client lang: <none>
2026-02-14T21:31:11.569 [DEBUG] [Thread-192522] [transport.py] [_log()] server lang: <none>
2026-02-14T21:31:11.569 [DEBUG] [Thread-192522] [transport.py] [_log()] kex follows: False
2026-02-14T21:31:11.569 [DEBUG] [Thread-192522] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:31:11.569 [DEBUG] [Thread-192522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:31:11.569 [DEBUG] [Thread-192522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:31:11.569 [DEBUG] [Thread-192522] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:31:11.569 [DEBUG] [Thread-192522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:31:11.569 [DEBUG] [Thread-192522] [transport.py] [_log()] Compression: none
2026-02-14T21:31:11.569 [DEBUG] [Thread-192522] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:31:11.635 [DEBUG] [Thread-192522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:31:11.635 [DEBUG] [Thread-192522] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:31:11.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:31:11.637 [DEBUG] [Thread-192522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:31:11.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:31:11.694 [DEBUG] [Thread-192522] [transport.py] [_log()] userauth is OK
2026-02-14T21:31:11.694 [DEBUG] [Thread-192522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:31:11.694 [DEBUG] [Thread-192522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:31:11.694 [DEBUG] [Thread-192522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:31:11.695 [DEBUG] [Thread-192522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:31:11.713 [INFO] [Thread-192522] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:31:11.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-14T21:31:11.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:31:12.545 [DEBUG] [Thread-192522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:31:12.545 [DEBUG] [Thread-192522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:31:12.593 [DEBUG] [Thread-192522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:31:12.594 [DEBUG] [Thread-192522] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:31:12.603 [DEBUG] [Thread-192522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:31:12.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:31:12.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-14T21:31:12.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:31:12.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:31:12.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:31:12.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:31:12.640 [DEBUG] [Thread-192522] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:31:15.951 [DEBUG] [Thread-192524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:31:21.838 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:31:31.003 [DEBUG] [Thread-192525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:31:42.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:31:42.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:31:42.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-14T21:31:43.992 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:31:43.993 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:31:44.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 31, 16), 7.63, 59.28, 0.0, 37.56, 10.13, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:31:44.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:31:16
2026-02-14T21:31:44.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:31:45.057 [DEBUG] [Thread-192526] [transport.py] [_log()] starting thread (client mode): 0xa2d6e470
2026-02-14T21:31:45.057 [DEBUG] [Thread-192526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:31:45.078 [DEBUG] [Thread-192526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:31:45.078 [INFO] [Thread-192526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:31:45.081 [DEBUG] [Thread-192526] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:31:45.081 [DEBUG] [Thread-192526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:31:45.081 [DEBUG] [Thread-192526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:31:45.081 [DEBUG] [Thread-192526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:31:45.081 [DEBUG] [Thread-192526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:31:45.081 [DEBUG] [Thread-192526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:31:45.081 [DEBUG] [Thread-192526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:31:45.081 [DEBUG] [Thread-192526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:31:45.081 [DEBUG] [Thread-192526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:31:45.081 [DEBUG] [Thread-192526] [transport.py] [_log()] client lang: <none>
2026-02-14T21:31:45.081 [DEBUG] [Thread-192526] [transport.py] [_log()] server lang: <none>
2026-02-14T21:31:45.082 [DEBUG] [Thread-192526] [transport.py] [_log()] kex follows: False
2026-02-14T21:31:45.082 [DEBUG] [Thread-192526] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:31:45.082 [DEBUG] [Thread-192526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:31:45.082 [DEBUG] [Thread-192526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:31:45.082 [DEBUG] [Thread-192526] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:31:45.082 [DEBUG] [Thread-192526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:31:45.082 [DEBUG] [Thread-192526] [transport.py] [_log()] Compression: none
2026-02-14T21:31:45.082 [DEBUG] [Thread-192526] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:31:45.090 [DEBUG] [Thread-192526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:31:45.091 [DEBUG] [Thread-192526] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:31:45.091 [DEBUG] [Thread-192526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:31:45.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:31:45.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:31:45.093 [DEBUG] [Thread-192526] [transport.py] [_log()] userauth is OK
2026-02-14T21:31:45.093 [DEBUG] [Thread-192526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:31:45.093 [DEBUG] [Thread-192526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:31:45.093 [DEBUG] [Thread-192526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:31:45.093 [DEBUG] [Thread-192526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:31:45.128 [INFO] [Thread-192526] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:31:45.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:31:45.712 [DEBUG] [Thread-192526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:31:45.713 [DEBUG] [Thread-192526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:31:45.713 [DEBUG] [Thread-192526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:31:45.753 [DEBUG] [Thread-192526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:31:45.753 [DEBUG] [Thread-192526] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:31:45.756 [DEBUG] [Thread-192526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:31:45.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:31:45.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:31:45.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:31:45.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:31:45.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:31:45.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:31:45.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:31:45.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:31:45.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:31:45.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.813307 -999.00  +10.00  21.96     64   +3.50 1 1 1 1 1     0    0 5.65 -38.80 ZNESW 17.2 22.0 157.7 35.3 10.4 -25.2 10.3 -24.1 10.1 -23.1 10.4 -24.3
2026-02-14T21:31:45.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:31:45.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:31:45.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.813307
2026-02-14T21:31:45.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:31:45.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:31:45.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:31:45.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:31:45.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:31:45.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:31:16', tmtdew=7.63, humidity=59.28, cloud=0.0, wind=37.56, temperature=10.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:31:17', seeing=3.46, atlas_timestamp='2026-02-14T19:31:09.725', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.025249999999999773, 0.02674999999999983, -0.0070000000000014495, 0.019000000000000128, -0.03274999999999828, -0.018500000000001293, 0.009250000000001535, 0.006499999999999062, -0.007500000000000284, 0.010749999999999815, -0.005000000000000782, 0.048500000000000654, 0.03324999999999889, 0.006999999999999673, 0.009999999999999787, 0.04824999999999946, 0.024499999999999744, -0.04750000000000121, -0.013750000000001705, 0.06999999999999851, 0.049249999999998906, -0.0017499999999976978, 0.015750000000000597, 0.05599999999999916, 0.045499999999998764, 0.021750000000000824, 0.0035000000000007248, 0.07900000000000063, 0.015000000000000568, 0.02500000000000213, 0.008000000000000895, 0.0072499999999990905], zp_timestamp='2026-02-14T19:27:00')
2026-02-14T21:31:45.782 [DEBUG] [Thread-192526] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:31:45.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-14T21:31:46.038 [DEBUG] [Thread-192529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:31:56.735 [DEBUG] [Thread-192530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:32:01.100 [DEBUG] [Thread-192531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:32:16.134 [DEBUG] [Thread-192532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:32:31.168 [DEBUG] [Thread-192533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:32:44.196 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:32:44.197 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:32:46.209 [DEBUG] [Thread-192534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:32:55.388 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:32:56.799 [DEBUG] [Thread-192535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:33:01.244 [DEBUG] [Thread-192536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:33:16.280 [DEBUG] [Thread-192537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:33:31.315 [DEBUG] [Thread-192538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:33:33.785 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:33:37.019 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:33:42.115 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:33:44.395 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:33:44.396 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:33:46.355 [DEBUG] [Thread-192539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:33:47.565 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:33:56.875 [DEBUG] [Thread-192540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:33:58.970 [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-14T21:34:01.387 [DEBUG] [Thread-192541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:34:06.935 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:34:11.305 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:34:16.422 [DEBUG] [Thread-192542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:34:29.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:34:29.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:34:29.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-14T21:34:29.362 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:34:30.754 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:34:30.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 34, 12), 7.58, 59.27, 0.0, 33.72, 10.1, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:34:30.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:34:12
2026-02-14T21:34:31.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:34:31.332 [DEBUG] [Thread-192543] [transport.py] [_log()] starting thread (client mode): 0xa2d6e740
2026-02-14T21:34:31.333 [DEBUG] [Thread-192543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:34:31.352 [DEBUG] [Thread-192543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:34:31.353 [INFO] [Thread-192543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:34:31.356 [DEBUG] [Thread-192543] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:34:31.356 [DEBUG] [Thread-192543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:34:31.356 [DEBUG] [Thread-192543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:34:31.356 [DEBUG] [Thread-192543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:34:31.356 [DEBUG] [Thread-192543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:34:31.356 [DEBUG] [Thread-192543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:34:31.356 [DEBUG] [Thread-192543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:34:31.356 [DEBUG] [Thread-192543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:34:31.356 [DEBUG] [Thread-192543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:34:31.356 [DEBUG] [Thread-192543] [transport.py] [_log()] client lang: <none>
2026-02-14T21:34:31.356 [DEBUG] [Thread-192543] [transport.py] [_log()] server lang: <none>
2026-02-14T21:34:31.356 [DEBUG] [Thread-192543] [transport.py] [_log()] kex follows: False
2026-02-14T21:34:31.356 [DEBUG] [Thread-192543] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:34:31.356 [DEBUG] [Thread-192543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:34:31.356 [DEBUG] [Thread-192543] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:34:31.356 [DEBUG] [Thread-192543] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:34:31.356 [DEBUG] [Thread-192543] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:34:31.356 [DEBUG] [Thread-192543] [transport.py] [_log()] Compression: none
2026-02-14T21:34:31.356 [DEBUG] [Thread-192543] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:34:31.373 [DEBUG] [Thread-192543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:34:31.374 [DEBUG] [Thread-192543] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:34:31.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:34:31.375 [DEBUG] [Thread-192543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:34:31.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:34:31.377 [DEBUG] [Thread-192543] [transport.py] [_log()] userauth is OK
2026-02-14T21:34:31.377 [DEBUG] [Thread-192543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:34:31.377 [DEBUG] [Thread-192543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:34:31.377 [DEBUG] [Thread-192543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:34:31.377 [DEBUG] [Thread-192543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:34:31.402 [INFO] [Thread-192543] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:34:31.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:34:31.468 [DEBUG] [Thread-192545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:34:32.057 [DEBUG] [Thread-192543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:34:32.057 [DEBUG] [Thread-192543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:34:32.058 [DEBUG] [Thread-192543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:34:32.098 [DEBUG] [Thread-192543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:34:32.098 [DEBUG] [Thread-192543] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:34:32.100 [DEBUG] [Thread-192543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:34:32.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:34:32.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:34:32.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:34:32.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:34:32.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:34:32.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:34:32.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:34:32.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:34:32.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:34:32.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.815391 -999.00   +9.90  25.88     64   +3.50 1 1 1 1 1     0    0 5.64 -31.02 ZNESW 25.6 25.9 168.4 41.3 10.4 -25.1 10.2 -24.2 10.1 -23.2 10.4 -24.4
2026-02-14T21:34:32.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:34:32.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:34:32.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.815391
2026-02-14T21:34:32.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:34:32.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:34:32.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:34:32.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:34:32.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:34:32.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:34:12', tmtdew=7.58, humidity=59.27, cloud=0.0, wind=33.72, temperature=10.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:34:13', seeing=5.21, atlas_timestamp='2026-02-14T19:34:09.782', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, -0.015750000000000597, 0.035250000000001336, -0.03550000000000075, 0.01249999999999929, 0.013250000000001094, -0.0129999999999999, 0.0027500000000006963, 0.0004999999999988347, -0.015000000000000568, -0.004249999999998977, -0.019000000000000128, 0.06700000000000017, 0.04824999999999946, 0.0015000000000000568, -0.028999999999999915, 0.056250000000000355, 0.029500000000000526, -0.013500000000000512, 0.0022500000000000853, 0.07049999999999912, 0.03474999999999895, -0.005250000000000199, 0.0022500000000000853, 0.0519999999999996, 0.0860000000000003, 0.020749999999999602, 0.009500000000000952, 0.05400000000000027, 0.09250000000000114, -0.017499999999998295, 0.01600000000000179, 0.00274999999999892], zp_timestamp='2026-02-14T19:30:00')
2026-02-14T21:34:32.122 [DEBUG] [Thread-192543] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:34:32.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-14T21:34:32.215 [DEBUG] [Thread-192547] [transport.py] [_log()] starting thread (client mode): 0xa2d6e3b0
2026-02-14T21:34:32.215 [DEBUG] [Thread-192547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:34:32.231 [DEBUG] [Thread-192547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:34:32.231 [INFO] [Thread-192547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:34:32.239 [DEBUG] [Thread-192547] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:34:32.239 [DEBUG] [Thread-192547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:34:32.239 [DEBUG] [Thread-192547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:34:32.240 [DEBUG] [Thread-192547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:34:32.240 [DEBUG] [Thread-192547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:34:32.240 [DEBUG] [Thread-192547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:34:32.240 [DEBUG] [Thread-192547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:34:32.240 [DEBUG] [Thread-192547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:34:32.240 [DEBUG] [Thread-192547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:34:32.240 [DEBUG] [Thread-192547] [transport.py] [_log()] client lang: <none>
2026-02-14T21:34:32.240 [DEBUG] [Thread-192547] [transport.py] [_log()] server lang: <none>
2026-02-14T21:34:32.240 [DEBUG] [Thread-192547] [transport.py] [_log()] kex follows: False
2026-02-14T21:34:32.240 [DEBUG] [Thread-192547] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:34:32.240 [DEBUG] [Thread-192547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:34:32.240 [DEBUG] [Thread-192547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:34:32.240 [DEBUG] [Thread-192547] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:34:32.240 [DEBUG] [Thread-192547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:34:32.240 [DEBUG] [Thread-192547] [transport.py] [_log()] Compression: none
2026-02-14T21:34:32.240 [DEBUG] [Thread-192547] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:34:32.295 [DEBUG] [Thread-192547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:34:32.295 [DEBUG] [Thread-192547] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:34:32.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:34:32.296 [DEBUG] [Thread-192547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:34:32.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:34:32.351 [DEBUG] [Thread-192547] [transport.py] [_log()] userauth is OK
2026-02-14T21:34:32.352 [DEBUG] [Thread-192547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:34:32.352 [DEBUG] [Thread-192547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:34:32.352 [DEBUG] [Thread-192547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:34:32.352 [DEBUG] [Thread-192547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:34:32.374 [INFO] [Thread-192547] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:34:32.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-14T21:34:32.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:34:33.193 [DEBUG] [Thread-192547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:34:33.193 [DEBUG] [Thread-192547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:34:33.241 [DEBUG] [Thread-192547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:34:33.241 [DEBUG] [Thread-192547] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:34:33.250 [DEBUG] [Thread-192547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:34:33.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:34:33.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:34:33.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:34:33.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:34:33.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:34:33.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:34:33.283 [DEBUG] [Thread-192547] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:34:35.108 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:34:41.280 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:34:44.595 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:34:44.597 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:34:45.638 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:34:46.500 [DEBUG] [Thread-192549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:34:56.943 [DEBUG] [Thread-192550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:35:01.556 [DEBUG] [Thread-192551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:35:03.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:35:03.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:35:03.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-14T21:35:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 34, 47), 7.59, 59.22, 0.0, 32.01, 10.06, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:35:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:34:47
2026-02-14T21:35:05.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:35:05.671 [DEBUG] [Thread-192552] [transport.py] [_log()] starting thread (client mode): 0xa2d6c7f0
2026-02-14T21:35:05.671 [DEBUG] [Thread-192552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:35:05.692 [DEBUG] [Thread-192552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:35:05.692 [INFO] [Thread-192552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:35:05.695 [DEBUG] [Thread-192552] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:35:05.695 [DEBUG] [Thread-192552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:35:05.696 [DEBUG] [Thread-192552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:35:05.696 [DEBUG] [Thread-192552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:35:05.696 [DEBUG] [Thread-192552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:35:05.696 [DEBUG] [Thread-192552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:35:05.696 [DEBUG] [Thread-192552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:35:05.696 [DEBUG] [Thread-192552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:35:05.696 [DEBUG] [Thread-192552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:35:05.696 [DEBUG] [Thread-192552] [transport.py] [_log()] client lang: <none>
2026-02-14T21:35:05.696 [DEBUG] [Thread-192552] [transport.py] [_log()] server lang: <none>
2026-02-14T21:35:05.696 [DEBUG] [Thread-192552] [transport.py] [_log()] kex follows: False
2026-02-14T21:35:05.696 [DEBUG] [Thread-192552] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:35:05.696 [DEBUG] [Thread-192552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:35:05.696 [DEBUG] [Thread-192552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:35:05.696 [DEBUG] [Thread-192552] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:35:05.696 [DEBUG] [Thread-192552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:35:05.696 [DEBUG] [Thread-192552] [transport.py] [_log()] Compression: none
2026-02-14T21:35:05.696 [DEBUG] [Thread-192552] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:35:05.714 [DEBUG] [Thread-192552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:35:05.714 [DEBUG] [Thread-192552] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:35:05.715 [DEBUG] [Thread-192552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:35:05.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:35:05.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:35:05.717 [DEBUG] [Thread-192552] [transport.py] [_log()] userauth is OK
2026-02-14T21:35:05.717 [DEBUG] [Thread-192552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:35:05.717 [DEBUG] [Thread-192552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:35:05.718 [DEBUG] [Thread-192552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:35:05.718 [DEBUG] [Thread-192552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:35:05.735 [INFO] [Thread-192552] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:35:05.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:35:06.551 [DEBUG] [Thread-192552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:35:06.551 [DEBUG] [Thread-192552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:35:06.551 [DEBUG] [Thread-192552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:35:06.593 [DEBUG] [Thread-192552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:35:06.593 [DEBUG] [Thread-192552] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:35:06.596 [DEBUG] [Thread-192552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:35:06.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:35:06.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:35:06.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:35:06.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:35:06.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:35:06.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:35:06.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:35:06.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:35:06.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:35:06.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.815738 -999.00   +9.90  28.97     64   +3.50 1 1 1 1 1     0    0 5.70 -31.91 ZNESW 30.0 29.0 161.8 36.5 10.4 -25.2 10.3 -24.3 10.1 -23.1 10.4 -24.4
2026-02-14T21:35:06.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:35:06.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:35:06.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.815738
2026-02-14T21:35:06.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:35:06.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:35:06.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:35:06.645 [DEBUG] [Thread-192552] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:35:06.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:35:06.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:35:06.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:34:47', tmtdew=7.59, humidity=59.22, cloud=0.0, wind=32.01, temperature=10.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:34:48', seeing=4.24, atlas_timestamp='2026-02-14T19:34:39.763', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, -0.015750000000000597, 0.035250000000001336, -0.03550000000000075, 0.01249999999999929, 0.013250000000001094, -0.0129999999999999, 0.0027500000000006963, 0.0004999999999988347, -0.015000000000000568, -0.004249999999998977, -0.019000000000000128, 0.06700000000000017, 0.04824999999999946, 0.0015000000000000568, -0.028999999999999915, 0.056250000000000355, 0.029500000000000526, -0.013500000000000512, 0.0022500000000000853, 0.07049999999999912, 0.03474999999999895, -0.005250000000000199, 0.0022500000000000853, 0.0519999999999996, 0.0860000000000003, 0.020749999999999602, 0.009500000000000952, 0.05400000000000027, 0.09250000000000114, -0.017499999999998295, 0.01600000000000179, 0.00274999999999892], zp_timestamp='2026-02-14T19:30:00')
2026-02-14T21:35:06.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-14T21:35:06.737 [DEBUG] [Thread-192555] [transport.py] [_log()] starting thread (client mode): 0xa2d55f60
2026-02-14T21:35:06.737 [DEBUG] [Thread-192555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:35:06.751 [DEBUG] [Thread-192555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:35:06.751 [INFO] [Thread-192555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:35:06.759 [DEBUG] [Thread-192555] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:35:06.759 [DEBUG] [Thread-192555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:35:06.759 [DEBUG] [Thread-192555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:35:06.760 [DEBUG] [Thread-192555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:35:06.760 [DEBUG] [Thread-192555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:35:06.760 [DEBUG] [Thread-192555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:35:06.760 [DEBUG] [Thread-192555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:35:06.760 [DEBUG] [Thread-192555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:35:06.760 [DEBUG] [Thread-192555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:35:06.760 [DEBUG] [Thread-192555] [transport.py] [_log()] client lang: <none>
2026-02-14T21:35:06.760 [DEBUG] [Thread-192555] [transport.py] [_log()] server lang: <none>
2026-02-14T21:35:06.760 [DEBUG] [Thread-192555] [transport.py] [_log()] kex follows: False
2026-02-14T21:35:06.760 [DEBUG] [Thread-192555] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:35:06.760 [DEBUG] [Thread-192555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:35:06.760 [DEBUG] [Thread-192555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:35:06.760 [DEBUG] [Thread-192555] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:35:06.760 [DEBUG] [Thread-192555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:35:06.760 [DEBUG] [Thread-192555] [transport.py] [_log()] Compression: none
2026-02-14T21:35:06.760 [DEBUG] [Thread-192555] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:35:06.817 [DEBUG] [Thread-192555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:35:06.817 [DEBUG] [Thread-192555] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:35:06.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:35:06.819 [DEBUG] [Thread-192555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:35:06.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:35:06.876 [DEBUG] [Thread-192555] [transport.py] [_log()] userauth is OK
2026-02-14T21:35:06.877 [DEBUG] [Thread-192555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:35:06.877 [DEBUG] [Thread-192555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:35:06.877 [DEBUG] [Thread-192555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:35:06.877 [DEBUG] [Thread-192555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:35:06.896 [INFO] [Thread-192555] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:35:06.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-14T21:35:06.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:35:07.712 [DEBUG] [Thread-192555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:35:07.712 [DEBUG] [Thread-192555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:35:07.760 [DEBUG] [Thread-192555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:35:07.761 [DEBUG] [Thread-192555] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:35:07.770 [DEBUG] [Thread-192555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:35:07.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21: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-14T21: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-14T21:35:07.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:35:07.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:35:07.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:35:07.816 [DEBUG] [Thread-192555] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:35:16.597 [DEBUG] [Thread-192557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:35:31.657 [DEBUG] [Thread-192558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:35:37.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:35:37.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:35:37.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-14T21:35:39.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 35, 23), 7.58, 59.28, 0.0, 34.86, 10.06, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:35:39.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:35:23
2026-02-14T21:35:40.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:35:40.464 [DEBUG] [Thread-192559] [transport.py] [_log()] starting thread (client mode): 0xa57d6110
2026-02-14T21:35:40.464 [DEBUG] [Thread-192559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:35:40.484 [DEBUG] [Thread-192559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:35:40.484 [INFO] [Thread-192559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:35:40.485 [DEBUG] [Thread-192559] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:35:40.485 [DEBUG] [Thread-192559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:35:40.485 [DEBUG] [Thread-192559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:35:40.485 [DEBUG] [Thread-192559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:35:40.485 [DEBUG] [Thread-192559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:35:40.485 [DEBUG] [Thread-192559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:35:40.485 [DEBUG] [Thread-192559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:35:40.485 [DEBUG] [Thread-192559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:35:40.485 [DEBUG] [Thread-192559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:35:40.485 [DEBUG] [Thread-192559] [transport.py] [_log()] client lang: <none>
2026-02-14T21:35:40.485 [DEBUG] [Thread-192559] [transport.py] [_log()] server lang: <none>
2026-02-14T21:35:40.485 [DEBUG] [Thread-192559] [transport.py] [_log()] kex follows: False
2026-02-14T21:35:40.485 [DEBUG] [Thread-192559] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:35:40.485 [DEBUG] [Thread-192559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:35:40.485 [DEBUG] [Thread-192559] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:35:40.486 [DEBUG] [Thread-192559] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:35:40.486 [DEBUG] [Thread-192559] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:35:40.486 [DEBUG] [Thread-192559] [transport.py] [_log()] Compression: none
2026-02-14T21:35:40.486 [DEBUG] [Thread-192559] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:35:40.494 [DEBUG] [Thread-192559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:35:40.494 [DEBUG] [Thread-192559] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:35:40.495 [DEBUG] [Thread-192559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:35:40.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:35:40.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:35:40.496 [DEBUG] [Thread-192559] [transport.py] [_log()] userauth is OK
2026-02-14T21:35:40.496 [DEBUG] [Thread-192559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:35:40.496 [DEBUG] [Thread-192559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:35:40.496 [DEBUG] [Thread-192559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:35:40.497 [DEBUG] [Thread-192559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:35:40.531 [INFO] [Thread-192559] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:35:40.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:35:41.141 [DEBUG] [Thread-192559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:35:41.141 [DEBUG] [Thread-192559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:35:41.142 [DEBUG] [Thread-192559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:35:41.182 [DEBUG] [Thread-192559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:35:41.183 [DEBUG] [Thread-192559] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:35:41.186 [DEBUG] [Thread-192559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:35:41.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:35:41.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:35:41.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:35:41.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:35:41.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:35:41.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:35:41.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:35:41.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:35:41.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:35:41.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.816085 -999.00   +9.90  27.23     64   +3.50 1 1 1 1 1     0    0 5.63 -32.88 ZNESW 25.8 27.2 174.0 40.1 10.4 -25.1 10.2 -24.2 10.1 -23.4 10.4 -24.3
2026-02-14T21:35:41.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:35:41.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:35:41.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.816085
2026-02-14T21:35:41.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:35:41.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:35:41.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:35:41.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:35:41.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:35:41.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:35:23', tmtdew=7.58, humidity=59.28, cloud=0.0, wind=34.86, temperature=10.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:35:23', seeing=4.42, atlas_timestamp='2026-02-14T19:35:09.744', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, -0.015750000000000597, 0.035250000000001336, -0.03550000000000075, 0.01249999999999929, 0.013250000000001094, -0.0129999999999999, 0.0027500000000006963, 0.0004999999999988347, -0.015000000000000568, -0.004249999999998977, -0.019000000000000128, 0.06700000000000017, 0.04824999999999946, 0.0015000000000000568, -0.028999999999999915, 0.056250000000000355, 0.029500000000000526, -0.013500000000000512, 0.0022500000000000853, 0.07049999999999912, 0.03474999999999895, -0.005250000000000199, 0.0022500000000000853, 0.0519999999999996, 0.0860000000000003, 0.020749999999999602, 0.009500000000000952, 0.05400000000000027, 0.09250000000000114, -0.017499999999998295, 0.01600000000000179, 0.00274999999999892], zp_timestamp='2026-02-14T19:34:00')
2026-02-14T21:35:41.213 [DEBUG] [Thread-192559] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:35: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-14T21:35:41.308 [DEBUG] [Thread-192562] [transport.py] [_log()] starting thread (client mode): 0xa57d64d0
2026-02-14T21:35:41.308 [DEBUG] [Thread-192562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:35:41.322 [DEBUG] [Thread-192562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:35:41.323 [INFO] [Thread-192562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:35:41.330 [DEBUG] [Thread-192562] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:35:41.331 [DEBUG] [Thread-192562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:35:41.331 [DEBUG] [Thread-192562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:35:41.331 [DEBUG] [Thread-192562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:35:41.332 [DEBUG] [Thread-192562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:35:41.332 [DEBUG] [Thread-192562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:35:41.332 [DEBUG] [Thread-192562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:35:41.332 [DEBUG] [Thread-192562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:35:41.332 [DEBUG] [Thread-192562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:35:41.332 [DEBUG] [Thread-192562] [transport.py] [_log()] client lang: <none>
2026-02-14T21:35:41.332 [DEBUG] [Thread-192562] [transport.py] [_log()] server lang: <none>
2026-02-14T21:35:41.332 [DEBUG] [Thread-192562] [transport.py] [_log()] kex follows: False
2026-02-14T21:35:41.332 [DEBUG] [Thread-192562] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:35:41.332 [DEBUG] [Thread-192562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:35:41.332 [DEBUG] [Thread-192562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:35:41.332 [DEBUG] [Thread-192562] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:35:41.332 [DEBUG] [Thread-192562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:35:41.332 [DEBUG] [Thread-192562] [transport.py] [_log()] Compression: none
2026-02-14T21:35:41.333 [DEBUG] [Thread-192562] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:35:41.388 [DEBUG] [Thread-192562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:35:41.388 [DEBUG] [Thread-192562] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:35:41.389 [DEBUG] [Thread-192562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:35:41.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:35:41.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:35:41.444 [DEBUG] [Thread-192562] [transport.py] [_log()] userauth is OK
2026-02-14T21:35:41.444 [DEBUG] [Thread-192562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:35:41.444 [DEBUG] [Thread-192562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:35:41.444 [DEBUG] [Thread-192562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:35:41.444 [DEBUG] [Thread-192562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:35:41.462 [INFO] [Thread-192562] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:35:41.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-14T21:35:41.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:35:42.271 [DEBUG] [Thread-192562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:35:42.271 [DEBUG] [Thread-192562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:35:42.319 [DEBUG] [Thread-192562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:35:42.320 [DEBUG] [Thread-192562] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:35:42.329 [DEBUG] [Thread-192562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:35:42.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:35:42.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-14T21:35:42.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-14T21:35:42.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:35:42.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:35:42.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:35:42.366 [DEBUG] [Thread-192562] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:35:44.799 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:35:44.800 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:35:46.695 [DEBUG] [Thread-192564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:35:50.019 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:35:53.102 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:35:57.010 [DEBUG] [Thread-192565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:36:01.747 [DEBUG] [Thread-192566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:36:02.801 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:36:12.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:36:12.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:36:12.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T21:36:14.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 35, 58), 7.57, 59.32, 0.0, 30.93, 10.08, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:36:14.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:35:58
2026-02-14T21:36:14.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:36:14.838 [DEBUG] [Thread-192567] [transport.py] [_log()] starting thread (client mode): 0xa57d5cc0
2026-02-14T21:36:14.838 [DEBUG] [Thread-192567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:36:14.858 [DEBUG] [Thread-192567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:36:14.858 [INFO] [Thread-192567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:36:14.861 [DEBUG] [Thread-192567] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:36:14.861 [DEBUG] [Thread-192567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:36:14.862 [DEBUG] [Thread-192567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:36:14.862 [DEBUG] [Thread-192567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:36:14.862 [DEBUG] [Thread-192567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:36:14.862 [DEBUG] [Thread-192567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:36:14.862 [DEBUG] [Thread-192567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:36:14.862 [DEBUG] [Thread-192567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:36:14.862 [DEBUG] [Thread-192567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:36:14.862 [DEBUG] [Thread-192567] [transport.py] [_log()] client lang: <none>
2026-02-14T21:36:14.862 [DEBUG] [Thread-192567] [transport.py] [_log()] server lang: <none>
2026-02-14T21:36:14.862 [DEBUG] [Thread-192567] [transport.py] [_log()] kex follows: False
2026-02-14T21:36:14.862 [DEBUG] [Thread-192567] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:36:14.862 [DEBUG] [Thread-192567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:36:14.862 [DEBUG] [Thread-192567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:36:14.862 [DEBUG] [Thread-192567] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:36:14.862 [DEBUG] [Thread-192567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:36:14.862 [DEBUG] [Thread-192567] [transport.py] [_log()] Compression: none
2026-02-14T21:36:14.862 [DEBUG] [Thread-192567] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:36:14.880 [DEBUG] [Thread-192567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:36:14.880 [DEBUG] [Thread-192567] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:36:14.881 [DEBUG] [Thread-192567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:36:14.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:36:14.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:36:14.883 [DEBUG] [Thread-192567] [transport.py] [_log()] userauth is OK
2026-02-14T21:36:14.883 [DEBUG] [Thread-192567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:36:14.883 [DEBUG] [Thread-192567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:36:14.883 [DEBUG] [Thread-192567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:36:14.883 [DEBUG] [Thread-192567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:36:14.908 [INFO] [Thread-192567] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:36:14.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:36:15.553 [DEBUG] [Thread-192567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:36:15.554 [DEBUG] [Thread-192567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:36:15.554 [DEBUG] [Thread-192567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:36:15.594 [DEBUG] [Thread-192567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:36:15.595 [DEBUG] [Thread-192567] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:36:15.598 [DEBUG] [Thread-192567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:36:15.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:36:15.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:36:15.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:36:15.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:36:15.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:36:15.622 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:36:15.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:36:15.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:36:15.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:36:15.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.816432 -999.00   +9.90  22.02     64   +3.50 1 1 1 1 1     0    0 5.69 -31.09 ZNESW 28.1 22.0 159.9 35.4 10.4 -25.2 10.2 -24.2 10.1 -23.2 10.4 -24.4
2026-02-14T21:36:15.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:36:15.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:36:15.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.816432
2026-02-14T21:36:15.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:36:15.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:36:15.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:36:15.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:36:15.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:36:15.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:35:58', tmtdew=7.57, humidity=59.32, cloud=0.0, wind=30.93, temperature=10.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:35:58', seeing=3.36, atlas_timestamp='2026-02-14T19:35:39.725', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, -0.015750000000000597, 0.035250000000001336, -0.03550000000000075, 0.01249999999999929, 0.013250000000001094, -0.0129999999999999, 0.0027500000000006963, 0.0004999999999988347, -0.015000000000000568, -0.004249999999998977, -0.019000000000000128, 0.06700000000000017, 0.04824999999999946, 0.0015000000000000568, -0.028999999999999915, 0.056250000000000355, 0.029500000000000526, -0.013500000000000512, 0.0022500000000000853, 0.07049999999999912, 0.03474999999999895, -0.005250000000000199, 0.0022500000000000853, 0.0519999999999996, 0.0860000000000003, 0.020749999999999602, 0.009500000000000952, 0.05400000000000027, 0.09250000000000114, -0.017499999999998295, 0.01600000000000179, 0.00274999999999892], zp_timestamp='2026-02-14T19:34:00')
2026-02-14T21:36:15.625 [DEBUG] [Thread-192567] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:36:15.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-14T21:36:15.730 [DEBUG] [Thread-192570] [transport.py] [_log()] starting thread (client mode): 0xa57d4220
2026-02-14T21:36:15.730 [DEBUG] [Thread-192570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:36:15.745 [DEBUG] [Thread-192570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:36:15.745 [INFO] [Thread-192570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:36:15.752 [DEBUG] [Thread-192570] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:36:15.753 [DEBUG] [Thread-192570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:36:15.753 [DEBUG] [Thread-192570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:36:15.753 [DEBUG] [Thread-192570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:36:15.753 [DEBUG] [Thread-192570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:36:15.754 [DEBUG] [Thread-192570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:36:15.754 [DEBUG] [Thread-192570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:36:15.754 [DEBUG] [Thread-192570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:36:15.754 [DEBUG] [Thread-192570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:36:15.754 [DEBUG] [Thread-192570] [transport.py] [_log()] client lang: <none>
2026-02-14T21:36:15.754 [DEBUG] [Thread-192570] [transport.py] [_log()] server lang: <none>
2026-02-14T21:36:15.754 [DEBUG] [Thread-192570] [transport.py] [_log()] kex follows: False
2026-02-14T21:36:15.754 [DEBUG] [Thread-192570] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:36:15.754 [DEBUG] [Thread-192570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:36:15.754 [DEBUG] [Thread-192570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:36:15.754 [DEBUG] [Thread-192570] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:36:15.754 [DEBUG] [Thread-192570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:36:15.754 [DEBUG] [Thread-192570] [transport.py] [_log()] Compression: none
2026-02-14T21:36:15.754 [DEBUG] [Thread-192570] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:36:15.816 [DEBUG] [Thread-192570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:36:15.817 [DEBUG] [Thread-192570] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:36:15.817 [DEBUG] [Thread-192570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:36:15.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:36:15.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:36:15.873 [DEBUG] [Thread-192570] [transport.py] [_log()] userauth is OK
2026-02-14T21:36:15.873 [DEBUG] [Thread-192570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:36:15.873 [DEBUG] [Thread-192570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:36:15.873 [DEBUG] [Thread-192570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:36:15.873 [DEBUG] [Thread-192570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:36:15.894 [INFO] [Thread-192570] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:36:15.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T21:36:15.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:36:16.708 [DEBUG] [Thread-192570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:36:16.709 [DEBUG] [Thread-192570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:36:16.756 [DEBUG] [Thread-192570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:36:16.756 [DEBUG] [Thread-192570] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:36:16.765 [DEBUG] [Thread-192570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:36:16.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:36:16.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:36:16.780 [DEBUG] [Thread-192572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:36:16.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-14T21:36:16.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:36:16.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:36:16.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:36:16.800 [DEBUG] [Thread-192570] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:36:31.840 [DEBUG] [Thread-192573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:36:45.007 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:36:45.008 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:36:46.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:36:46.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:36:46.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-14T21:36:46.875 [DEBUG] [Thread-192574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:36:48.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 36, 34), 7.7, 58.8, 0.0, 38.39, 10.36, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:36:48.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:36:34
2026-02-14T21:36:49.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:36:49.162 [DEBUG] [Thread-192575] [transport.py] [_log()] starting thread (client mode): 0xa2d3f970
2026-02-14T21:36:49.162 [DEBUG] [Thread-192575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:36:49.183 [DEBUG] [Thread-192575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:36:49.183 [INFO] [Thread-192575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:36:49.186 [DEBUG] [Thread-192575] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:36:49.186 [DEBUG] [Thread-192575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:36:49.186 [DEBUG] [Thread-192575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:36:49.186 [DEBUG] [Thread-192575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:36:49.186 [DEBUG] [Thread-192575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:36:49.186 [DEBUG] [Thread-192575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:36:49.186 [DEBUG] [Thread-192575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:36:49.186 [DEBUG] [Thread-192575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:36:49.186 [DEBUG] [Thread-192575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:36:49.187 [DEBUG] [Thread-192575] [transport.py] [_log()] client lang: <none>
2026-02-14T21:36:49.187 [DEBUG] [Thread-192575] [transport.py] [_log()] server lang: <none>
2026-02-14T21:36:49.187 [DEBUG] [Thread-192575] [transport.py] [_log()] kex follows: False
2026-02-14T21:36:49.187 [DEBUG] [Thread-192575] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:36:49.187 [DEBUG] [Thread-192575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:36:49.187 [DEBUG] [Thread-192575] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:36:49.187 [DEBUG] [Thread-192575] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:36:49.187 [DEBUG] [Thread-192575] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:36:49.187 [DEBUG] [Thread-192575] [transport.py] [_log()] Compression: none
2026-02-14T21:36:49.187 [DEBUG] [Thread-192575] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:36:49.205 [DEBUG] [Thread-192575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:36:49.206 [DEBUG] [Thread-192575] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:36:49.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:36:49.207 [DEBUG] [Thread-192575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:36:49.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:36:49.209 [DEBUG] [Thread-192575] [transport.py] [_log()] userauth is OK
2026-02-14T21:36:49.210 [DEBUG] [Thread-192575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:36:49.210 [DEBUG] [Thread-192575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:36:49.210 [DEBUG] [Thread-192575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:36:49.210 [DEBUG] [Thread-192575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:36:49.230 [INFO] [Thread-192575] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:36:49.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:36:49.873 [DEBUG] [Thread-192575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:36:49.873 [DEBUG] [Thread-192575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:36:49.873 [DEBUG] [Thread-192575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:36:49.914 [DEBUG] [Thread-192575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:36:49.914 [DEBUG] [Thread-192575] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:36:49.917 [DEBUG] [Thread-192575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:36:49.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:36:49.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:36:49.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:36:49.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:36:49.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:36:49.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:36:49.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:36:49.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:36:49.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:36:49.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.817127 -999.00   +9.90  27.89     64   +3.50 1 1 1 1 1     0    0 5.76 -27.57 ZNESW 31.6 27.9 162.2 35.9 10.4 -25.1 10.2 -24.2 10.0 -23.2 10.4 -24.2
2026-02-14T21:36:49.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:36:49.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:36:49.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.817127
2026-02-14T21:36:49.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:36:49.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:36:49.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:36:49.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:36:49.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:36:49.943 [DEBUG] [Thread-192575] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:36:49.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:36:34', tmtdew=7.7, humidity=58.8, cloud=0.0, wind=38.39, temperature=10.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:36:34', seeing=3.69, atlas_timestamp='2026-02-14T19:36:39.773', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, -0.015750000000000597, 0.035250000000001336, -0.03550000000000075, 0.01249999999999929, 0.013250000000001094, -0.0129999999999999, 0.0027500000000006963, 0.0004999999999988347, -0.015000000000000568, -0.004249999999998977, -0.019000000000000128, 0.06700000000000017, 0.04824999999999946, 0.0015000000000000568, -0.028999999999999915, 0.056250000000000355, 0.029500000000000526, -0.013500000000000512, 0.0022500000000000853, 0.07049999999999912, 0.03474999999999895, -0.005250000000000199, 0.0022500000000000853, 0.0519999999999996, 0.0860000000000003, 0.020749999999999602, 0.009500000000000952, 0.05400000000000027, 0.09250000000000114, -0.017499999999998295, 0.01600000000000179, 0.00274999999999892], zp_timestamp='2026-02-14T19:34:00')
2026-02-14T21:36:50.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T21:36:50.040 [DEBUG] [Thread-192578] [transport.py] [_log()] starting thread (client mode): 0xa2d6de10
2026-02-14T21:36:50.040 [DEBUG] [Thread-192578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:36:50.055 [DEBUG] [Thread-192578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:36:50.055 [INFO] [Thread-192578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:36:50.063 [DEBUG] [Thread-192578] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:36:50.063 [DEBUG] [Thread-192578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:36:50.063 [DEBUG] [Thread-192578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:36:50.064 [DEBUG] [Thread-192578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:36:50.064 [DEBUG] [Thread-192578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:36:50.064 [DEBUG] [Thread-192578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:36:50.064 [DEBUG] [Thread-192578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:36:50.064 [DEBUG] [Thread-192578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:36:50.064 [DEBUG] [Thread-192578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:36:50.064 [DEBUG] [Thread-192578] [transport.py] [_log()] client lang: <none>
2026-02-14T21:36:50.064 [DEBUG] [Thread-192578] [transport.py] [_log()] server lang: <none>
2026-02-14T21:36:50.064 [DEBUG] [Thread-192578] [transport.py] [_log()] kex follows: False
2026-02-14T21:36:50.065 [DEBUG] [Thread-192578] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:36:50.065 [DEBUG] [Thread-192578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:36:50.065 [DEBUG] [Thread-192578] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:36:50.065 [DEBUG] [Thread-192578] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:36:50.065 [DEBUG] [Thread-192578] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:36:50.066 [DEBUG] [Thread-192578] [transport.py] [_log()] Compression: none
2026-02-14T21:36:50.066 [DEBUG] [Thread-192578] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:36:50.121 [DEBUG] [Thread-192578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:36:50.122 [DEBUG] [Thread-192578] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:36:50.122 [DEBUG] [Thread-192578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:36:50.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:36:50.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:36:50.177 [DEBUG] [Thread-192578] [transport.py] [_log()] userauth is OK
2026-02-14T21:36:50.177 [DEBUG] [Thread-192578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:36:50.177 [DEBUG] [Thread-192578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:36:50.178 [DEBUG] [Thread-192578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:36:50.178 [DEBUG] [Thread-192578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:36:50.196 [INFO] [Thread-192578] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:36:50.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-14T21:36:50.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:36:51.029 [DEBUG] [Thread-192578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:36:51.030 [DEBUG] [Thread-192578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:36:51.080 [DEBUG] [Thread-192578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:36:51.080 [DEBUG] [Thread-192578] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:36:51.088 [DEBUG] [Thread-192578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:36:51.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:36:51.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-14T21:36:51.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-14T21:36:51.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:36:51.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:36:51.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:36:51.123 [DEBUG] [Thread-192578] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:36:57.081 [DEBUG] [Thread-192580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:37:01.909 [DEBUG] [Thread-192581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:37:16.949 [DEBUG] [Thread-192582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:37:21.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:37:21.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:37:21.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-14T21:37:23.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 37, 10), 7.5, 59.4, 0.0, 36.61, 10.05, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:37:23.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:37:10
2026-02-14T21:37:23.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:37:23.670 [DEBUG] [Thread-192583] [transport.py] [_log()] starting thread (client mode): 0xa57d5f60
2026-02-14T21:37:23.670 [DEBUG] [Thread-192583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:37:23.689 [DEBUG] [Thread-192583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:37:23.689 [INFO] [Thread-192583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:37:23.693 [DEBUG] [Thread-192583] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:37:23.693 [DEBUG] [Thread-192583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:37:23.693 [DEBUG] [Thread-192583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:37:23.693 [DEBUG] [Thread-192583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:37:23.693 [DEBUG] [Thread-192583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:37:23.693 [DEBUG] [Thread-192583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:37:23.693 [DEBUG] [Thread-192583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:37:23.693 [DEBUG] [Thread-192583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:37:23.693 [DEBUG] [Thread-192583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:37:23.693 [DEBUG] [Thread-192583] [transport.py] [_log()] client lang: <none>
2026-02-14T21:37:23.693 [DEBUG] [Thread-192583] [transport.py] [_log()] server lang: <none>
2026-02-14T21:37:23.693 [DEBUG] [Thread-192583] [transport.py] [_log()] kex follows: False
2026-02-14T21:37:23.693 [DEBUG] [Thread-192583] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:37:23.693 [DEBUG] [Thread-192583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:37:23.694 [DEBUG] [Thread-192583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:37:23.694 [DEBUG] [Thread-192583] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:37:23.694 [DEBUG] [Thread-192583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:37:23.694 [DEBUG] [Thread-192583] [transport.py] [_log()] Compression: none
2026-02-14T21:37:23.694 [DEBUG] [Thread-192583] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:37:23.710 [DEBUG] [Thread-192583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:37:23.711 [DEBUG] [Thread-192583] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:37:23.711 [DEBUG] [Thread-192583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:37:23.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:37:23.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:37:23.713 [DEBUG] [Thread-192583] [transport.py] [_log()] userauth is OK
2026-02-14T21:37:23.713 [DEBUG] [Thread-192583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:37:23.714 [DEBUG] [Thread-192583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:37:23.714 [DEBUG] [Thread-192583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:37:23.714 [DEBUG] [Thread-192583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:37:23.738 [INFO] [Thread-192583] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:37:23.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:37:24.384 [DEBUG] [Thread-192583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:37:24.384 [DEBUG] [Thread-192583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:37:24.384 [DEBUG] [Thread-192583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:37:24.426 [DEBUG] [Thread-192583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:37:24.426 [DEBUG] [Thread-192583] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:37:24.428 [DEBUG] [Thread-192583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:37:24.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:37:24.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:37:24.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:37:24.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:37:24.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:37:24.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:37:24.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:37:24.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:37:24.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:37:24.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.817474 -999.00   +9.90  24.54     64   +3.50 1 1 1 1 1     0    0 5.73 -25.11 ZNESW 30.5 24.5 154.8 36.0 10.4 -25.0 10.2 -24.2 10.0 -23.0 10.4 -24.1
2026-02-14T21:37:24.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:37:24.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:37:24.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.817474
2026-02-14T21:37:24.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:37:24.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:37:24.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:37:24.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:37:24.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:37:24.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:37:10', tmtdew=7.5, humidity=59.4, cloud=0.0, wind=36.61, temperature=10.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:37:10', seeing=4.59, atlas_timestamp='2026-02-14T19:37:09.754', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, -0.015750000000000597, 0.035250000000001336, -0.03550000000000075, 0.01249999999999929, 0.013250000000001094, -0.0129999999999999, 0.0027500000000006963, 0.0004999999999988347, -0.015000000000000568, -0.004249999999998977, -0.019000000000000128, 0.06700000000000017, 0.04824999999999946, 0.0015000000000000568, -0.028999999999999915, 0.056250000000000355, 0.029500000000000526, -0.013500000000000512, 0.0022500000000000853, 0.07049999999999912, 0.03474999999999895, -0.005250000000000199, 0.0022500000000000853, 0.0519999999999996, 0.0860000000000003, 0.020749999999999602, 0.009500000000000952, 0.05400000000000027, 0.09250000000000114, -0.017499999999998295, 0.01600000000000179, 0.00274999999999892], zp_timestamp='2026-02-14T19:34:00')
2026-02-14T21:37:24.447 [DEBUG] [Thread-192583] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:37:24.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-14T21:37:24.532 [DEBUG] [Thread-192586] [transport.py] [_log()] starting thread (client mode): 0xa57c1ed0
2026-02-14T21:37:24.532 [DEBUG] [Thread-192586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:37:24.547 [DEBUG] [Thread-192586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:37:24.548 [INFO] [Thread-192586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:37:24.555 [DEBUG] [Thread-192586] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:37:24.555 [DEBUG] [Thread-192586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:37:24.555 [DEBUG] [Thread-192586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:37:24.555 [DEBUG] [Thread-192586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:37:24.555 [DEBUG] [Thread-192586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:37:24.555 [DEBUG] [Thread-192586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:37:24.555 [DEBUG] [Thread-192586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:37:24.555 [DEBUG] [Thread-192586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:37:24.555 [DEBUG] [Thread-192586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:37:24.555 [DEBUG] [Thread-192586] [transport.py] [_log()] client lang: <none>
2026-02-14T21:37:24.555 [DEBUG] [Thread-192586] [transport.py] [_log()] server lang: <none>
2026-02-14T21:37:24.555 [DEBUG] [Thread-192586] [transport.py] [_log()] kex follows: False
2026-02-14T21:37:24.555 [DEBUG] [Thread-192586] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:37:24.555 [DEBUG] [Thread-192586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:37:24.555 [DEBUG] [Thread-192586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:37:24.555 [DEBUG] [Thread-192586] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:37:24.555 [DEBUG] [Thread-192586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:37:24.555 [DEBUG] [Thread-192586] [transport.py] [_log()] Compression: none
2026-02-14T21:37:24.556 [DEBUG] [Thread-192586] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:37:24.611 [DEBUG] [Thread-192586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:37:24.611 [DEBUG] [Thread-192586] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:37:24.612 [DEBUG] [Thread-192586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:37:24.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:37:24.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:37:24.668 [DEBUG] [Thread-192586] [transport.py] [_log()] userauth is OK
2026-02-14T21:37:24.668 [DEBUG] [Thread-192586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:37:24.668 [DEBUG] [Thread-192586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:37:24.668 [DEBUG] [Thread-192586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:37:24.668 [DEBUG] [Thread-192586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:37:24.686 [INFO] [Thread-192586] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:37:24.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-14T21:37:24.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:37:25.522 [DEBUG] [Thread-192586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:37:25.522 [DEBUG] [Thread-192586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:37:25.571 [DEBUG] [Thread-192586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:37:25.571 [DEBUG] [Thread-192586] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:37:25.587 [DEBUG] [Thread-192586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:37:25.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:37:25.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-14T21:37:25.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-14T21:37:25.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:37:25.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:37:25.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:37:25.624 [DEBUG] [Thread-192586] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:37:31.986 [DEBUG] [Thread-192588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:37:36.430 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:37:45.206 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:37:45.208 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:37:47.049 [DEBUG] [Thread-192589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:37:55.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:37:55.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:37:55.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T21:37:57.138 [DEBUG] [Thread-192590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:37:57.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 37, 45), 7.51, 59.37, 0.0, 35.48, 9.96, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:37:57.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:37:45
2026-02-14T21:37:58.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:37:58.613 [DEBUG] [Thread-192591] [transport.py] [_log()] starting thread (client mode): 0xa2d3cb50
2026-02-14T21:37:58.613 [DEBUG] [Thread-192591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:37:58.628 [DEBUG] [Thread-192591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:37:58.628 [INFO] [Thread-192591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:37:58.629 [DEBUG] [Thread-192591] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:37:58.629 [DEBUG] [Thread-192591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:37:58.629 [DEBUG] [Thread-192591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:37:58.629 [DEBUG] [Thread-192591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:37:58.629 [DEBUG] [Thread-192591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:37:58.629 [DEBUG] [Thread-192591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:37:58.629 [DEBUG] [Thread-192591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:37:58.629 [DEBUG] [Thread-192591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:37:58.629 [DEBUG] [Thread-192591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:37:58.629 [DEBUG] [Thread-192591] [transport.py] [_log()] client lang: <none>
2026-02-14T21:37:58.629 [DEBUG] [Thread-192591] [transport.py] [_log()] server lang: <none>
2026-02-14T21:37:58.629 [DEBUG] [Thread-192591] [transport.py] [_log()] kex follows: False
2026-02-14T21:37:58.629 [DEBUG] [Thread-192591] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:37:58.629 [DEBUG] [Thread-192591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:37:58.629 [DEBUG] [Thread-192591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:37:58.629 [DEBUG] [Thread-192591] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:37:58.629 [DEBUG] [Thread-192591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:37:58.629 [DEBUG] [Thread-192591] [transport.py] [_log()] Compression: none
2026-02-14T21:37:58.629 [DEBUG] [Thread-192591] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:37:58.637 [DEBUG] [Thread-192591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:37:58.638 [DEBUG] [Thread-192591] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:37:58.638 [DEBUG] [Thread-192591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:37:58.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:37:58.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:37:58.639 [DEBUG] [Thread-192591] [transport.py] [_log()] userauth is OK
2026-02-14T21:37:58.639 [DEBUG] [Thread-192591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:37:58.639 [DEBUG] [Thread-192591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:37:58.639 [DEBUG] [Thread-192591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:37:58.639 [DEBUG] [Thread-192591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:37:58.659 [INFO] [Thread-192591] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:37:58.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:37:59.274 [DEBUG] [Thread-192591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:37:59.274 [DEBUG] [Thread-192591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:37:59.275 [DEBUG] [Thread-192591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:37:59.316 [DEBUG] [Thread-192591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:37:59.316 [DEBUG] [Thread-192591] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:37:59.319 [DEBUG] [Thread-192591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:37:59.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:37:59.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:37:59.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:37:59.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:37:59.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:37:59.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:37:59.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:37:59.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:37:59.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:37:59.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.817821 -999.00   +9.90  31.06     64   +3.60 1 1 2 1 1     0    0 5.76 -26.02 ZNESW 28.2 31.1 158.6 36.4 10.4 -25.0 10.2 -24.0 10.1 -23.0 10.4 -24.2
2026-02-14T21:37:59.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:37:59.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:37:59.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.817821
2026-02-14T21:37:59.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:37:59.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:37:59.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:37:59.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:37:59.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:37:59.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:37:45', tmtdew=7.51, humidity=59.37, cloud=0.0, wind=35.48, temperature=9.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:37:45', seeing=3.7, atlas_timestamp='2026-02-14T19:37:39.734', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, -0.015750000000000597, 0.035250000000001336, -0.03550000000000075, 0.01249999999999929, 0.013250000000001094, -0.0129999999999999, 0.0027500000000006963, 0.0004999999999988347, -0.015000000000000568, -0.004249999999998977, -0.019000000000000128, 0.06700000000000017, 0.04824999999999946, 0.0015000000000000568, -0.028999999999999915, 0.056250000000000355, 0.029500000000000526, -0.013500000000000512, 0.0022500000000000853, 0.07049999999999912, 0.03474999999999895, -0.005250000000000199, 0.0022500000000000853, 0.0519999999999996, 0.0860000000000003, 0.020749999999999602, 0.009500000000000952, 0.05400000000000027, 0.09250000000000114, -0.017499999999998295, 0.01600000000000179, 0.00274999999999892], zp_timestamp='2026-02-14T19:34:00')
2026-02-14T21:37:59.344 [DEBUG] [Thread-192591] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:37:59.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-14T21:37:59.440 [DEBUG] [Thread-192594] [transport.py] [_log()] starting thread (client mode): 0xa2d6c1c0
2026-02-14T21:37:59.441 [DEBUG] [Thread-192594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:37:59.458 [DEBUG] [Thread-192594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:37:59.458 [INFO] [Thread-192594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:37:59.466 [DEBUG] [Thread-192594] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:37:59.466 [DEBUG] [Thread-192594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:37:59.466 [DEBUG] [Thread-192594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:37:59.466 [DEBUG] [Thread-192594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:37:59.466 [DEBUG] [Thread-192594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:37:59.466 [DEBUG] [Thread-192594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:37:59.467 [DEBUG] [Thread-192594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:37:59.467 [DEBUG] [Thread-192594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:37:59.467 [DEBUG] [Thread-192594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:37:59.467 [DEBUG] [Thread-192594] [transport.py] [_log()] client lang: <none>
2026-02-14T21:37:59.467 [DEBUG] [Thread-192594] [transport.py] [_log()] server lang: <none>
2026-02-14T21:37:59.467 [DEBUG] [Thread-192594] [transport.py] [_log()] kex follows: False
2026-02-14T21:37:59.467 [DEBUG] [Thread-192594] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:37:59.467 [DEBUG] [Thread-192594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:37:59.467 [DEBUG] [Thread-192594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:37:59.467 [DEBUG] [Thread-192594] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:37:59.467 [DEBUG] [Thread-192594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:37:59.467 [DEBUG] [Thread-192594] [transport.py] [_log()] Compression: none
2026-02-14T21:37:59.467 [DEBUG] [Thread-192594] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:37:59.526 [DEBUG] [Thread-192594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:37:59.526 [DEBUG] [Thread-192594] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:37:59.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:37:59.528 [DEBUG] [Thread-192594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:37:59.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:37:59.581 [DEBUG] [Thread-192594] [transport.py] [_log()] userauth is OK
2026-02-14T21:37:59.582 [DEBUG] [Thread-192594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:37:59.582 [DEBUG] [Thread-192594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:37:59.582 [DEBUG] [Thread-192594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:37:59.582 [DEBUG] [Thread-192594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:37:59.601 [INFO] [Thread-192594] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:37:59.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-14T21:37:59.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:38:00.429 [DEBUG] [Thread-192594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:38:00.429 [DEBUG] [Thread-192594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:38:00.477 [DEBUG] [Thread-192594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:38:00.478 [DEBUG] [Thread-192594] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:38:00.487 [DEBUG] [Thread-192594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:38:00.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:38:00.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-14T21:38:00.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:38:00.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:38:00.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:38:00.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:38:00.524 [DEBUG] [Thread-192594] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:38:02.085 [DEBUG] [Thread-192596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:38:17.126 [DEBUG] [Thread-192597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:38:30.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:38:30.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:38:30.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-14T21:38:32.162 [DEBUG] [Thread-192598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:38:32.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 38, 20), 7.49, 59.43, 0.0, 35.99, 10.05, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:38:32.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:38:20
2026-02-14T21:38:32.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:38:33.052 [DEBUG] [Thread-192599] [transport.py] [_log()] starting thread (client mode): 0xa2d6d390
2026-02-14T21:38:33.052 [DEBUG] [Thread-192599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:38:33.072 [DEBUG] [Thread-192599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:38:33.072 [INFO] [Thread-192599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:38:33.074 [DEBUG] [Thread-192599] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:38:33.074 [DEBUG] [Thread-192599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:38:33.074 [DEBUG] [Thread-192599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:38:33.074 [DEBUG] [Thread-192599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:38:33.074 [DEBUG] [Thread-192599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:38:33.074 [DEBUG] [Thread-192599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:38:33.074 [DEBUG] [Thread-192599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:38:33.074 [DEBUG] [Thread-192599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:38:33.074 [DEBUG] [Thread-192599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:38:33.074 [DEBUG] [Thread-192599] [transport.py] [_log()] client lang: <none>
2026-02-14T21:38:33.074 [DEBUG] [Thread-192599] [transport.py] [_log()] server lang: <none>
2026-02-14T21:38:33.074 [DEBUG] [Thread-192599] [transport.py] [_log()] kex follows: False
2026-02-14T21:38:33.074 [DEBUG] [Thread-192599] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:38:33.074 [DEBUG] [Thread-192599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:38:33.074 [DEBUG] [Thread-192599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:38:33.074 [DEBUG] [Thread-192599] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:38:33.074 [DEBUG] [Thread-192599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:38:33.074 [DEBUG] [Thread-192599] [transport.py] [_log()] Compression: none
2026-02-14T21:38:33.074 [DEBUG] [Thread-192599] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:38:33.083 [DEBUG] [Thread-192599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:38:33.083 [DEBUG] [Thread-192599] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:38:33.084 [DEBUG] [Thread-192599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:38:33.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:38:33.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:38:33.086 [DEBUG] [Thread-192599] [transport.py] [_log()] userauth is OK
2026-02-14T21:38:33.086 [DEBUG] [Thread-192599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:38:33.086 [DEBUG] [Thread-192599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:38:33.086 [DEBUG] [Thread-192599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:38:33.086 [DEBUG] [Thread-192599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:38:33.105 [INFO] [Thread-192599] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:38:33.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:38:33.702 [DEBUG] [Thread-192599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:38:33.702 [DEBUG] [Thread-192599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:38:33.703 [DEBUG] [Thread-192599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:38:33.743 [DEBUG] [Thread-192599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:38:33.743 [DEBUG] [Thread-192599] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:38:33.747 [DEBUG] [Thread-192599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:38:33.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:38:33.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:38:33.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:38:33.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:38:33.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:38:33.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:38:33.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:38:33.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:38:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:38:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.818168 -999.00   +9.90  27.80     64   +3.60 1 1 1 1 1     0    0 5.83 -26.23 ZNESW 27.4 27.8 159.6 38.0 10.4 -25.2 10.2 -24.2 10.0 -23.0 10.4 -24.2
2026-02-14T21:38:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:38:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:38:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.818168
2026-02-14T21:38:33.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:38:33.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:38:33.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:38:33.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:38:33.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:38:33.780 [DEBUG] [Thread-192599] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:38:33.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:38:20', tmtdew=7.49, humidity=59.43, cloud=0.0, wind=35.99, temperature=10.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:38:21', seeing=3.09, atlas_timestamp='2026-02-14T19:38:09.715', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015750000000000597, -0.029749999999999943, 0.011250000000000426, -0.03850000000000087, 0.01249999999999929, 0.01425000000000054, -0.019000000000000128, -0.010749999999999815, -0.002500000000001279, 0.0, -0.015750000000000597, -0.03149999999999942, 0.03999999999999915, 0.05025000000000013, -0.018000000000000682, 0.007999999999999119, 0.03474999999999895, 0.01249999999999929, -0.04800000000000004, -0.028250000000001663, 0.06299999999999883, 0.04724999999999824, 0.006750000000000256, -0.00024999999999941735, 0.039499999999998536, 0.0965000000000007, 0.004749999999999588, -0.0014999999999982805, 0.05900000000000105, 0.08500000000000085, 0.0045000000000001705, 0.005000000000000782, 0.01875000000000071], zp_timestamp='2026-02-14T19:37:00')
2026-02-14T21:38:33.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-14T21:38:33.878 [DEBUG] [Thread-192602] [transport.py] [_log()] starting thread (client mode): 0xa2d134f0
2026-02-14T21:38:33.878 [DEBUG] [Thread-192602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:38:33.892 [DEBUG] [Thread-192602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:38:33.892 [INFO] [Thread-192602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:38:33.899 [DEBUG] [Thread-192602] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:38:33.899 [DEBUG] [Thread-192602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:38:33.899 [DEBUG] [Thread-192602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:38:33.900 [DEBUG] [Thread-192602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:38:33.900 [DEBUG] [Thread-192602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:38:33.900 [DEBUG] [Thread-192602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:38:33.900 [DEBUG] [Thread-192602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:38:33.900 [DEBUG] [Thread-192602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:38:33.900 [DEBUG] [Thread-192602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:38:33.900 [DEBUG] [Thread-192602] [transport.py] [_log()] client lang: <none>
2026-02-14T21:38:33.900 [DEBUG] [Thread-192602] [transport.py] [_log()] server lang: <none>
2026-02-14T21:38:33.900 [DEBUG] [Thread-192602] [transport.py] [_log()] kex follows: False
2026-02-14T21:38:33.900 [DEBUG] [Thread-192602] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:38:33.900 [DEBUG] [Thread-192602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:38:33.901 [DEBUG] [Thread-192602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:38:33.901 [DEBUG] [Thread-192602] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:38:33.901 [DEBUG] [Thread-192602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:38:33.901 [DEBUG] [Thread-192602] [transport.py] [_log()] Compression: none
2026-02-14T21:38:33.901 [DEBUG] [Thread-192602] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:38:33.958 [DEBUG] [Thread-192602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:38:33.958 [DEBUG] [Thread-192602] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:38:33.959 [DEBUG] [Thread-192602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:38:33.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:38:33.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:38:34.014 [DEBUG] [Thread-192602] [transport.py] [_log()] userauth is OK
2026-02-14T21:38:34.014 [DEBUG] [Thread-192602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:38:34.014 [DEBUG] [Thread-192602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:38:34.014 [DEBUG] [Thread-192602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:38:34.015 [DEBUG] [Thread-192602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:38:34.034 [INFO] [Thread-192602] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:38:34.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-14T21:38:34.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:38:34.852 [DEBUG] [Thread-192602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:38:34.852 [DEBUG] [Thread-192602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:38:34.900 [DEBUG] [Thread-192602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:38:34.900 [DEBUG] [Thread-192602] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:38:34.910 [DEBUG] [Thread-192602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:38:34.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:38:34.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-14T21:38:34.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-14T21:38:34.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:38:34.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:38:34.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:38:34.944 [DEBUG] [Thread-192602] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:38:45.410 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:38:45.410 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:38:47.199 [DEBUG] [Thread-192604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:38:57.206 [DEBUG] [Thread-192605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:39:02.254 [DEBUG] [Thread-192606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:39:04.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:39:04.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:39:04.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T21:39:07.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 38, 55), 7.5, 59.38, 0.0, 34.92, 10.0, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:39:07.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:38:55
2026-02-14T21:39:07.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:39:07.559 [DEBUG] [Thread-192607] [transport.py] [_log()] starting thread (client mode): 0xa2d10cd0
2026-02-14T21:39:07.559 [DEBUG] [Thread-192607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:39:07.580 [DEBUG] [Thread-192607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:39:07.580 [INFO] [Thread-192607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:39:07.583 [DEBUG] [Thread-192607] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:39:07.583 [DEBUG] [Thread-192607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:39:07.583 [DEBUG] [Thread-192607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:39:07.583 [DEBUG] [Thread-192607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:39:07.583 [DEBUG] [Thread-192607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:39:07.583 [DEBUG] [Thread-192607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:39:07.583 [DEBUG] [Thread-192607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:39:07.583 [DEBUG] [Thread-192607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:39:07.583 [DEBUG] [Thread-192607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:39:07.583 [DEBUG] [Thread-192607] [transport.py] [_log()] client lang: <none>
2026-02-14T21:39:07.583 [DEBUG] [Thread-192607] [transport.py] [_log()] server lang: <none>
2026-02-14T21:39:07.583 [DEBUG] [Thread-192607] [transport.py] [_log()] kex follows: False
2026-02-14T21:39:07.583 [DEBUG] [Thread-192607] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:39:07.583 [DEBUG] [Thread-192607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:39:07.583 [DEBUG] [Thread-192607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:39:07.583 [DEBUG] [Thread-192607] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:39:07.583 [DEBUG] [Thread-192607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:39:07.583 [DEBUG] [Thread-192607] [transport.py] [_log()] Compression: none
2026-02-14T21:39:07.583 [DEBUG] [Thread-192607] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:39:07.600 [DEBUG] [Thread-192607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:39:07.600 [DEBUG] [Thread-192607] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:39:07.601 [DEBUG] [Thread-192607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:39:07.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:39:07.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:39:07.603 [DEBUG] [Thread-192607] [transport.py] [_log()] userauth is OK
2026-02-14T21:39:07.603 [DEBUG] [Thread-192607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:39:07.603 [DEBUG] [Thread-192607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:39:07.603 [DEBUG] [Thread-192607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:39:07.603 [DEBUG] [Thread-192607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:39:07.628 [INFO] [Thread-192607] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:39:07.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:39:08.240 [DEBUG] [Thread-192607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:39:08.241 [DEBUG] [Thread-192607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:39:08.241 [DEBUG] [Thread-192607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:39:08.281 [DEBUG] [Thread-192607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:39:08.281 [DEBUG] [Thread-192607] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:39:08.284 [DEBUG] [Thread-192607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:39:08.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:39:08.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:39:08.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:39:08.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:39:08.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:39:08.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:39:08.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:39:08.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:39:08.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:39:08.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.818516 -999.00   +9.90  31.98     64   +3.60 1 1 2 1 1     0    0 5.86 -25.63 ZNESW 30.4 32.0 158.8 43.0 10.4 -25.2 10.2 -24.2 10.0 -23.0 10.4 -24.3
2026-02-14T21:39:08.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:39:08.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:39:08.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.818516
2026-02-14T21:39:08.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:39:08.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:39:08.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:39:08.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:39:08.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:39:08.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:38:55', tmtdew=7.5, humidity=59.38, cloud=0.0, wind=34.92, temperature=10.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:38:56', seeing=3.94, atlas_timestamp='2026-02-14T19:38:39.782', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015750000000000597, -0.029749999999999943, 0.011250000000000426, -0.03850000000000087, 0.01249999999999929, 0.01425000000000054, -0.019000000000000128, -0.010749999999999815, -0.002500000000001279, 0.0, -0.015750000000000597, -0.03149999999999942, 0.03999999999999915, 0.05025000000000013, -0.018000000000000682, 0.007999999999999119, 0.03474999999999895, 0.01249999999999929, -0.04800000000000004, -0.028250000000001663, 0.06299999999999883, 0.04724999999999824, 0.006750000000000256, -0.00024999999999941735, 0.039499999999998536, 0.0965000000000007, 0.004749999999999588, -0.0014999999999982805, 0.05900000000000105, 0.08500000000000085, 0.0045000000000001705, 0.005000000000000782, 0.01875000000000071], zp_timestamp='2026-02-14T19:37:00')
2026-02-14T21:39:08.313 [DEBUG] [Thread-192607] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:39:08.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-14T21:39:08.410 [DEBUG] [Thread-192610] [transport.py] [_log()] starting thread (client mode): 0xa2d6d630
2026-02-14T21:39:08.410 [DEBUG] [Thread-192610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:39:08.426 [DEBUG] [Thread-192610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:39:08.426 [INFO] [Thread-192610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:39:08.434 [DEBUG] [Thread-192610] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:39:08.434 [DEBUG] [Thread-192610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:39:08.434 [DEBUG] [Thread-192610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:39:08.434 [DEBUG] [Thread-192610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:39:08.434 [DEBUG] [Thread-192610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:39:08.435 [DEBUG] [Thread-192610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:39:08.435 [DEBUG] [Thread-192610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:39:08.435 [DEBUG] [Thread-192610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:39:08.435 [DEBUG] [Thread-192610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:39:08.435 [DEBUG] [Thread-192610] [transport.py] [_log()] client lang: <none>
2026-02-14T21:39:08.435 [DEBUG] [Thread-192610] [transport.py] [_log()] server lang: <none>
2026-02-14T21:39:08.435 [DEBUG] [Thread-192610] [transport.py] [_log()] kex follows: False
2026-02-14T21:39:08.435 [DEBUG] [Thread-192610] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:39:08.435 [DEBUG] [Thread-192610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:39:08.435 [DEBUG] [Thread-192610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:39:08.435 [DEBUG] [Thread-192610] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:39:08.435 [DEBUG] [Thread-192610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:39:08.435 [DEBUG] [Thread-192610] [transport.py] [_log()] Compression: none
2026-02-14T21:39:08.435 [DEBUG] [Thread-192610] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:39:08.495 [DEBUG] [Thread-192610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:39:08.496 [DEBUG] [Thread-192610] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:39:08.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:39:08.497 [DEBUG] [Thread-192610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:39:08.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:39:08.553 [DEBUG] [Thread-192610] [transport.py] [_log()] userauth is OK
2026-02-14T21:39:08.554 [DEBUG] [Thread-192610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:39:08.554 [DEBUG] [Thread-192610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:39:08.554 [DEBUG] [Thread-192610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:39:08.554 [DEBUG] [Thread-192610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:39:08.573 [INFO] [Thread-192610] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:39:08.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-14T21:39:08.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:39:09.390 [DEBUG] [Thread-192610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:39:09.390 [DEBUG] [Thread-192610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:39:09.438 [DEBUG] [Thread-192610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:39:09.438 [DEBUG] [Thread-192610] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:39:09.446 [DEBUG] [Thread-192610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:39:09.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:39:09.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-14T21:39:09.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-14T21:39:09.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:39:09.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:39:09.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:39:09.479 [DEBUG] [Thread-192610] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:39:10.340 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:39:17.289 [DEBUG] [Thread-192612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:39:32.340 [DEBUG] [Thread-192613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:39:39.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:39:39.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:39:39.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-14T21:39:41.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 39, 32), 7.5, 59.42, 0.0, 35.45, 10.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:39:41.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:39:32
2026-02-14T21:39:41.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:39:41.820 [DEBUG] [Thread-192614] [transport.py] [_log()] starting thread (client mode): 0xa2d7b4c0
2026-02-14T21:39:41.821 [DEBUG] [Thread-192614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:39:41.843 [DEBUG] [Thread-192614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:39:41.843 [INFO] [Thread-192614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:39:41.845 [DEBUG] [Thread-192614] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:39:41.845 [DEBUG] [Thread-192614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:39:41.845 [DEBUG] [Thread-192614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:39:41.845 [DEBUG] [Thread-192614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:39:41.845 [DEBUG] [Thread-192614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:39:41.845 [DEBUG] [Thread-192614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:39:41.846 [DEBUG] [Thread-192614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:39:41.846 [DEBUG] [Thread-192614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:39:41.846 [DEBUG] [Thread-192614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:39:41.846 [DEBUG] [Thread-192614] [transport.py] [_log()] client lang: <none>
2026-02-14T21:39:41.846 [DEBUG] [Thread-192614] [transport.py] [_log()] server lang: <none>
2026-02-14T21:39:41.846 [DEBUG] [Thread-192614] [transport.py] [_log()] kex follows: False
2026-02-14T21:39:41.846 [DEBUG] [Thread-192614] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:39:41.846 [DEBUG] [Thread-192614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:39:41.846 [DEBUG] [Thread-192614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:39:41.846 [DEBUG] [Thread-192614] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:39:41.846 [DEBUG] [Thread-192614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:39:41.846 [DEBUG] [Thread-192614] [transport.py] [_log()] Compression: none
2026-02-14T21:39:41.846 [DEBUG] [Thread-192614] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:39:41.858 [DEBUG] [Thread-192614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:39:41.858 [DEBUG] [Thread-192614] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:39:41.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:39:41.859 [DEBUG] [Thread-192614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:39:41.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:39:41.861 [DEBUG] [Thread-192614] [transport.py] [_log()] userauth is OK
2026-02-14T21:39:41.861 [DEBUG] [Thread-192614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:39:41.862 [DEBUG] [Thread-192614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:39:41.862 [DEBUG] [Thread-192614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:39:41.862 [DEBUG] [Thread-192614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:39:41.887 [INFO] [Thread-192614] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:39:41.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:39:42.466 [DEBUG] [Thread-192614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:39:42.467 [DEBUG] [Thread-192614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:39:42.467 [DEBUG] [Thread-192614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:39:42.508 [DEBUG] [Thread-192614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:39:42.508 [DEBUG] [Thread-192614] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:39:42.511 [DEBUG] [Thread-192614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:39:42.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:39:42.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:39:42.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:39:42.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:39:42.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:39:42.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:39:42.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:39:42.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:39:42.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:39:42.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.818863 -999.00   +9.90  23.45     64   +3.60 1 1 1 1 1     0    0 5.62 -24.61 ZNESW 24.6 23.4 159.2 39.0 10.3 -25.1 10.2 -24.2 10.0 -23.0 10.3 -24.4
2026-02-14T21:39:42.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:39:42.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:39:42.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.818863
2026-02-14T21:39:42.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:39:42.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:39:42.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:39:42.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:39:42.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:39:42.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:39:32', tmtdew=7.5, humidity=59.42, cloud=0.0, wind=35.45, temperature=10.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:39:32', seeing=3.57, atlas_timestamp='2026-02-14T19:39:09.763', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015750000000000597, -0.029749999999999943, 0.011250000000000426, -0.03850000000000087, 0.01249999999999929, 0.01425000000000054, -0.019000000000000128, -0.010749999999999815, -0.002500000000001279, 0.0, -0.015750000000000597, -0.03149999999999942, 0.03999999999999915, 0.05025000000000013, -0.018000000000000682, 0.007999999999999119, 0.03474999999999895, 0.01249999999999929, -0.04800000000000004, -0.028250000000001663, 0.06299999999999883, 0.04724999999999824, 0.006750000000000256, -0.00024999999999941735, 0.039499999999998536, 0.0965000000000007, 0.004749999999999588, -0.0014999999999982805, 0.05900000000000105, 0.08500000000000085, 0.0045000000000001705, 0.005000000000000782, 0.01875000000000071], zp_timestamp='2026-02-14T19:37:00')
2026-02-14T21:39:42.537 [DEBUG] [Thread-192614] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:39:42.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-14T21:39:42.632 [DEBUG] [Thread-192617] [transport.py] [_log()] starting thread (client mode): 0xa57c3a00
2026-02-14T21:39:42.632 [DEBUG] [Thread-192617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:39:42.647 [DEBUG] [Thread-192617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:39:42.647 [INFO] [Thread-192617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:39:42.655 [DEBUG] [Thread-192617] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:39:42.655 [DEBUG] [Thread-192617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:39:42.655 [DEBUG] [Thread-192617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:39:42.655 [DEBUG] [Thread-192617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:39:42.655 [DEBUG] [Thread-192617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:39:42.655 [DEBUG] [Thread-192617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:39:42.655 [DEBUG] [Thread-192617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:39:42.655 [DEBUG] [Thread-192617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:39:42.655 [DEBUG] [Thread-192617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:39:42.655 [DEBUG] [Thread-192617] [transport.py] [_log()] client lang: <none>
2026-02-14T21:39:42.655 [DEBUG] [Thread-192617] [transport.py] [_log()] server lang: <none>
2026-02-14T21:39:42.655 [DEBUG] [Thread-192617] [transport.py] [_log()] kex follows: False
2026-02-14T21:39:42.655 [DEBUG] [Thread-192617] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:39:42.655 [DEBUG] [Thread-192617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:39:42.655 [DEBUG] [Thread-192617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:39:42.655 [DEBUG] [Thread-192617] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:39:42.656 [DEBUG] [Thread-192617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:39:42.656 [DEBUG] [Thread-192617] [transport.py] [_log()] Compression: none
2026-02-14T21:39:42.656 [DEBUG] [Thread-192617] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:39:42.714 [DEBUG] [Thread-192617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:39:42.715 [DEBUG] [Thread-192617] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:39:42.715 [DEBUG] [Thread-192617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:39:42.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:39:42.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:39:42.770 [DEBUG] [Thread-192617] [transport.py] [_log()] userauth is OK
2026-02-14T21:39:42.770 [DEBUG] [Thread-192617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:39:42.770 [DEBUG] [Thread-192617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:39:42.770 [DEBUG] [Thread-192617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:39:42.770 [DEBUG] [Thread-192617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:39:42.784 [INFO] [Thread-192617] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:39:42.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-14T21:39:42.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:39:43.600 [DEBUG] [Thread-192617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:39:43.601 [DEBUG] [Thread-192617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:39:43.651 [DEBUG] [Thread-192617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:39:43.651 [DEBUG] [Thread-192617] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:39:43.661 [DEBUG] [Thread-192617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:39:43.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:39:43.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-14T21:39:43.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-14T21:39:43.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:39:43.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:39:43.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:39:43.699 [DEBUG] [Thread-192617] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:39:45.610 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:39:45.611 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:39:47.372 [DEBUG] [Thread-192619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:39:57.284 [DEBUG] [Thread-192620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:40:02.422 [DEBUG] [Thread-192621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:40:13.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:40:13.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:40:13.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-14T21:40:15.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 40, 7), 7.48, 59.48, 0.0, 34.12, 10.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:40:15.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:40:07
2026-02-14T21:40:15.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:40:16.049 [DEBUG] [Thread-192622] [transport.py] [_log()] starting thread (client mode): 0xa2d6f940
2026-02-14T21:40:16.049 [DEBUG] [Thread-192622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:40:16.069 [DEBUG] [Thread-192622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:40:16.069 [INFO] [Thread-192622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:40:16.072 [DEBUG] [Thread-192622] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:40:16.072 [DEBUG] [Thread-192622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:40:16.072 [DEBUG] [Thread-192622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:40:16.072 [DEBUG] [Thread-192622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:40:16.072 [DEBUG] [Thread-192622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:40:16.073 [DEBUG] [Thread-192622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:40:16.073 [DEBUG] [Thread-192622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:40:16.073 [DEBUG] [Thread-192622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:40:16.073 [DEBUG] [Thread-192622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:40:16.073 [DEBUG] [Thread-192622] [transport.py] [_log()] client lang: <none>
2026-02-14T21:40:16.073 [DEBUG] [Thread-192622] [transport.py] [_log()] server lang: <none>
2026-02-14T21:40:16.073 [DEBUG] [Thread-192622] [transport.py] [_log()] kex follows: False
2026-02-14T21:40:16.073 [DEBUG] [Thread-192622] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:40:16.073 [DEBUG] [Thread-192622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:40:16.073 [DEBUG] [Thread-192622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:40:16.073 [DEBUG] [Thread-192622] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:40:16.073 [DEBUG] [Thread-192622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:40:16.073 [DEBUG] [Thread-192622] [transport.py] [_log()] Compression: none
2026-02-14T21:40:16.073 [DEBUG] [Thread-192622] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:40:16.088 [DEBUG] [Thread-192622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:40:16.089 [DEBUG] [Thread-192622] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:40:16.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:40:16.090 [DEBUG] [Thread-192622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:40:16.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:40:16.092 [DEBUG] [Thread-192622] [transport.py] [_log()] userauth is OK
2026-02-14T21:40:16.092 [DEBUG] [Thread-192622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:40:16.092 [DEBUG] [Thread-192622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:40:16.092 [DEBUG] [Thread-192622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:40:16.092 [DEBUG] [Thread-192622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:40:16.117 [INFO] [Thread-192622] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:40:16.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:40:17.292 [DEBUG] [Thread-192622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:40:17.292 [DEBUG] [Thread-192622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:40:17.293 [DEBUG] [Thread-192622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:40:17.333 [DEBUG] [Thread-192622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:40:17.334 [DEBUG] [Thread-192622] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:40:17.337 [DEBUG] [Thread-192622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:40:17.454 [DEBUG] [Thread-192624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:40:17.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:40:17.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:40:17.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:40:17.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:40:17.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:40:17.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:40:17.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:40:17.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:40:17.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:40:17.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.818863 -999.00   +9.90  23.45     64   +3.60 1 1 1 1 1     0    0 5.62 -24.61 ZNESW 24.6 23.4 159.2 39.0 10.3 -25.1 10.2 -24.2 10.0 -23.0 10.3 -24.4
2026-02-14T21:40:17.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:40:17.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:40:17.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.818863
2026-02-14T21:40:17.544 [DEBUG] [Thread-192622] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:40:17.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:40:17.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:40:17.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:40:17.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:40:17.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:40:17.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:40:07', tmtdew=7.48, humidity=59.48, cloud=0.0, wind=34.12, temperature=10.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:40:07', seeing=3.99, atlas_timestamp='2026-02-14T19:39:09.763', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015750000000000597, -0.029749999999999943, 0.011250000000000426, -0.03850000000000087, 0.01249999999999929, 0.01425000000000054, -0.019000000000000128, -0.010749999999999815, -0.002500000000001279, 0.0, -0.015750000000000597, -0.03149999999999942, 0.03999999999999915, 0.05025000000000013, -0.018000000000000682, 0.007999999999999119, 0.03474999999999895, 0.01249999999999929, -0.04800000000000004, -0.028250000000001663, 0.06299999999999883, 0.04724999999999824, 0.006750000000000256, -0.00024999999999941735, 0.039499999999998536, 0.0965000000000007, 0.004749999999999588, -0.0014999999999982805, 0.05900000000000105, 0.08500000000000085, 0.0045000000000001705, 0.005000000000000782, 0.01875000000000071], zp_timestamp='2026-02-14T19:37:00')
2026-02-14T21:40:17.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-14T21:40:17.647 [DEBUG] [Thread-192626] [transport.py] [_log()] starting thread (client mode): 0xa2d6ed10
2026-02-14T21:40:17.647 [DEBUG] [Thread-192626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:40:17.662 [DEBUG] [Thread-192626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:40:17.662 [INFO] [Thread-192626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:40:17.669 [DEBUG] [Thread-192626] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:40:17.670 [DEBUG] [Thread-192626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:40:17.670 [DEBUG] [Thread-192626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:40:17.670 [DEBUG] [Thread-192626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:40:17.670 [DEBUG] [Thread-192626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:40:17.670 [DEBUG] [Thread-192626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:40:17.670 [DEBUG] [Thread-192626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:40:17.670 [DEBUG] [Thread-192626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:40:17.670 [DEBUG] [Thread-192626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:40:17.670 [DEBUG] [Thread-192626] [transport.py] [_log()] client lang: <none>
2026-02-14T21:40:17.670 [DEBUG] [Thread-192626] [transport.py] [_log()] server lang: <none>
2026-02-14T21:40:17.670 [DEBUG] [Thread-192626] [transport.py] [_log()] kex follows: False
2026-02-14T21:40:17.670 [DEBUG] [Thread-192626] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:40:17.670 [DEBUG] [Thread-192626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:40:17.670 [DEBUG] [Thread-192626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:40:17.670 [DEBUG] [Thread-192626] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:40:17.670 [DEBUG] [Thread-192626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:40:17.670 [DEBUG] [Thread-192626] [transport.py] [_log()] Compression: none
2026-02-14T21:40:17.670 [DEBUG] [Thread-192626] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:40:17.724 [DEBUG] [Thread-192626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:40:17.725 [DEBUG] [Thread-192626] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:40:17.725 [DEBUG] [Thread-192626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:40:17.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:40:17.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:40:17.782 [DEBUG] [Thread-192626] [transport.py] [_log()] userauth is OK
2026-02-14T21:40:17.782 [DEBUG] [Thread-192626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:40:17.783 [DEBUG] [Thread-192626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:40:17.783 [DEBUG] [Thread-192626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:40:17.783 [DEBUG] [Thread-192626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:40:17.804 [INFO] [Thread-192626] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:40:17.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-14T21:40:17.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:40:18.594 [DEBUG] [Thread-192626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:40:18.594 [DEBUG] [Thread-192626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:40:18.642 [DEBUG] [Thread-192626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:40:18.643 [DEBUG] [Thread-192626] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:40:18.652 [DEBUG] [Thread-192626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:40:18.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:40:18.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:40:18.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:40:18.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:40:18.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:40:18.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:40:18.690 [DEBUG] [Thread-192626] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:40:32.489 [DEBUG] [Thread-192628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:40:44.168 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:40:45.813 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:40:45.815 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:40:47.544 [DEBUG] [Thread-192629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:40:48.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:40:48.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:40:48.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-14T21:40:50.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 40, 42), 7.66, 58.97, 0.0, 43.72, 10.36, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:40:50.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:40:42
2026-02-14T21:40:50.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:40:51.060 [DEBUG] [Thread-192630] [transport.py] [_log()] starting thread (client mode): 0xa2d6f2b0
2026-02-14T21:40:51.060 [DEBUG] [Thread-192630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:40:51.078 [DEBUG] [Thread-192630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:40:51.079 [INFO] [Thread-192630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:40:51.082 [DEBUG] [Thread-192630] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:40:51.082 [DEBUG] [Thread-192630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:40:51.082 [DEBUG] [Thread-192630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:40:51.082 [DEBUG] [Thread-192630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:40:51.083 [DEBUG] [Thread-192630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:40:51.083 [DEBUG] [Thread-192630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:40:51.083 [DEBUG] [Thread-192630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:40:51.083 [DEBUG] [Thread-192630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:40:51.083 [DEBUG] [Thread-192630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:40:51.083 [DEBUG] [Thread-192630] [transport.py] [_log()] client lang: <none>
2026-02-14T21:40:51.083 [DEBUG] [Thread-192630] [transport.py] [_log()] server lang: <none>
2026-02-14T21:40:51.083 [DEBUG] [Thread-192630] [transport.py] [_log()] kex follows: False
2026-02-14T21:40:51.083 [DEBUG] [Thread-192630] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:40:51.083 [DEBUG] [Thread-192630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:40:51.083 [DEBUG] [Thread-192630] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:40:51.083 [DEBUG] [Thread-192630] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:40:51.083 [DEBUG] [Thread-192630] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:40:51.083 [DEBUG] [Thread-192630] [transport.py] [_log()] Compression: none
2026-02-14T21:40:51.083 [DEBUG] [Thread-192630] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:40:51.099 [DEBUG] [Thread-192630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:40:51.100 [DEBUG] [Thread-192630] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:40:51.100 [DEBUG] [Thread-192630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:40:51.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:40:51.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:40:51.101 [DEBUG] [Thread-192630] [transport.py] [_log()] userauth is OK
2026-02-14T21:40:51.101 [DEBUG] [Thread-192630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:40:51.101 [DEBUG] [Thread-192630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:40:51.101 [DEBUG] [Thread-192630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:40:51.101 [DEBUG] [Thread-192630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:40:51.110 [INFO] [Thread-192630] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:40:51.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:40:51.750 [DEBUG] [Thread-192630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:40:51.751 [DEBUG] [Thread-192630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:40:51.751 [DEBUG] [Thread-192630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:40:51.791 [DEBUG] [Thread-192630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:40:51.792 [DEBUG] [Thread-192630] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:40:51.795 [DEBUG] [Thread-192630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:40:51.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:40:51.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:40:51.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:40:51.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:40:51.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:40:51.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:40:51.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:40:51.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:40:51.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:40:51.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.819557 -999.00   +9.90  28.57     64   +3.50 1 1 1 1 1     0    0 5.98 -20.89 ZNESW 23.9 28.6 165.4 35.5 10.4 -25.2 10.2 -24.2 10.0 -23.0 10.3 -24.2
2026-02-14T21:40:51.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:40:51.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:40:51.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.819557
2026-02-14T21:40:51.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:40:51.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:40:51.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:40:51.822 [DEBUG] [Thread-192630] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:40:51.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:40:51.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:40:51.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:40:42', tmtdew=7.66, humidity=58.97, cloud=0.0, wind=43.72, temperature=10.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:40:43', seeing=4.97, atlas_timestamp='2026-02-14T19:40:09.725', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015750000000000597, -0.029749999999999943, 0.011250000000000426, -0.03850000000000087, 0.01249999999999929, 0.01425000000000054, -0.019000000000000128, -0.010749999999999815, -0.002500000000001279, 0.0, -0.015750000000000597, -0.03149999999999942, 0.03999999999999915, 0.05025000000000013, -0.018000000000000682, 0.007999999999999119, 0.03474999999999895, 0.01249999999999929, -0.04800000000000004, -0.028250000000001663, 0.06299999999999883, 0.04724999999999824, 0.006750000000000256, -0.00024999999999941735, 0.039499999999998536, 0.0965000000000007, 0.004749999999999588, -0.0014999999999982805, 0.05900000000000105, 0.08500000000000085, 0.0045000000000001705, 0.005000000000000782, 0.01875000000000071], zp_timestamp='2026-02-14T19:37:00')
2026-02-14T21:40:51.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-14T21:40:51.928 [DEBUG] [Thread-192633] [transport.py] [_log()] starting thread (client mode): 0xa2d7b520
2026-02-14T21:40:51.929 [DEBUG] [Thread-192633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:40:51.945 [DEBUG] [Thread-192633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:40:51.945 [INFO] [Thread-192633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:40:51.953 [DEBUG] [Thread-192633] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:40:51.953 [DEBUG] [Thread-192633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:40:51.953 [DEBUG] [Thread-192633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:40:51.953 [DEBUG] [Thread-192633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:40:51.953 [DEBUG] [Thread-192633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:40:51.953 [DEBUG] [Thread-192633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:40:51.953 [DEBUG] [Thread-192633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:40:51.953 [DEBUG] [Thread-192633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:40:51.954 [DEBUG] [Thread-192633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:40:51.954 [DEBUG] [Thread-192633] [transport.py] [_log()] client lang: <none>
2026-02-14T21:40:51.954 [DEBUG] [Thread-192633] [transport.py] [_log()] server lang: <none>
2026-02-14T21:40:51.954 [DEBUG] [Thread-192633] [transport.py] [_log()] kex follows: False
2026-02-14T21:40:51.954 [DEBUG] [Thread-192633] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:40:51.954 [DEBUG] [Thread-192633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:40:51.954 [DEBUG] [Thread-192633] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:40:51.954 [DEBUG] [Thread-192633] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:40:51.954 [DEBUG] [Thread-192633] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:40:51.954 [DEBUG] [Thread-192633] [transport.py] [_log()] Compression: none
2026-02-14T21:40:51.954 [DEBUG] [Thread-192633] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:40:52.010 [DEBUG] [Thread-192633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:40:52.011 [DEBUG] [Thread-192633] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:40:52.012 [DEBUG] [Thread-192633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:40:52.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:40:52.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:40:52.067 [DEBUG] [Thread-192633] [transport.py] [_log()] userauth is OK
2026-02-14T21:40:52.067 [DEBUG] [Thread-192633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:40:52.067 [DEBUG] [Thread-192633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:40:52.067 [DEBUG] [Thread-192633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:40:52.067 [DEBUG] [Thread-192633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:40:52.086 [INFO] [Thread-192633] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:40:52.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-14T21:40:52.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:40:52.891 [DEBUG] [Thread-192633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:40:52.892 [DEBUG] [Thread-192633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:40:52.940 [DEBUG] [Thread-192633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:40:52.940 [DEBUG] [Thread-192633] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:40:52.948 [DEBUG] [Thread-192633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:40:52.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:40:52.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:40:52.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:40:52.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:40:52.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:40:52.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:40:52.979 [DEBUG] [Thread-192633] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:40:57.343 [DEBUG] [Thread-192635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:41:02.581 [DEBUG] [Thread-192636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:41:17.641 [DEBUG] [Thread-192637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:41:23.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:41:23.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:41:23.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-14T21:41:25.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 40, 42), 7.66, 58.97, 0.0, 43.72, 10.36, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:41:25.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:40:42
2026-02-14T21:41:25.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:41:25.520 [DEBUG] [Thread-192638] [transport.py] [_log()] starting thread (client mode): 0xa2d79390
2026-02-14T21:41:25.520 [DEBUG] [Thread-192638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:41:25.540 [DEBUG] [Thread-192638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:41:25.541 [INFO] [Thread-192638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:41:25.544 [DEBUG] [Thread-192638] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:41:25.544 [DEBUG] [Thread-192638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:41:25.544 [DEBUG] [Thread-192638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:41:25.544 [DEBUG] [Thread-192638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:41:25.544 [DEBUG] [Thread-192638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:41:25.544 [DEBUG] [Thread-192638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:41:25.544 [DEBUG] [Thread-192638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:41:25.544 [DEBUG] [Thread-192638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:41:25.544 [DEBUG] [Thread-192638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:41:25.544 [DEBUG] [Thread-192638] [transport.py] [_log()] client lang: <none>
2026-02-14T21:41:25.544 [DEBUG] [Thread-192638] [transport.py] [_log()] server lang: <none>
2026-02-14T21:41:25.544 [DEBUG] [Thread-192638] [transport.py] [_log()] kex follows: False
2026-02-14T21:41:25.544 [DEBUG] [Thread-192638] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:41:25.544 [DEBUG] [Thread-192638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:41:25.544 [DEBUG] [Thread-192638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:41:25.544 [DEBUG] [Thread-192638] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:41:25.544 [DEBUG] [Thread-192638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:41:25.544 [DEBUG] [Thread-192638] [transport.py] [_log()] Compression: none
2026-02-14T21:41:25.544 [DEBUG] [Thread-192638] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:41:25.562 [DEBUG] [Thread-192638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:41:25.563 [DEBUG] [Thread-192638] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:41:25.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:41:25.564 [DEBUG] [Thread-192638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:41:25.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:41:25.566 [DEBUG] [Thread-192638] [transport.py] [_log()] userauth is OK
2026-02-14T21:41:25.566 [DEBUG] [Thread-192638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:41:25.566 [DEBUG] [Thread-192638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:41:25.566 [DEBUG] [Thread-192638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:41:25.566 [DEBUG] [Thread-192638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:41:25.591 [INFO] [Thread-192638] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:41:25.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:41:26.224 [DEBUG] [Thread-192638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:41:26.224 [DEBUG] [Thread-192638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:41:26.225 [DEBUG] [Thread-192638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:41:26.265 [DEBUG] [Thread-192638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:41:26.265 [DEBUG] [Thread-192638] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:41:26.268 [DEBUG] [Thread-192638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:41:26.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:41:26.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:41:26.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:41:26.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:41:26.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:41:26.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:41:26.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:41:26.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:41:26.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:41:26.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.819905 -999.00   +9.90  28.89     64   +3.50 1 1 1 1 1     0    0 5.97 -20.13 ZNESW 26.1 28.9 162.0 39.0 10.3 -25.0 10.2 -24.2 10.0 -23.1 10.3 -24.2
2026-02-14T21:41:26.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:41:26.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:41:26.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.819905
2026-02-14T21:41:26.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:41:26.295 [DEBUG] [Thread-192638] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:41:26.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:41:26.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:41:26.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:41:26.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:41:26.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:40:42', tmtdew=7.66, humidity=58.97, cloud=0.0, wind=43.72, temperature=10.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:41:18', seeing=4.43, atlas_timestamp='2026-02-14T19:40:39.792', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.019750000000000156, -0.01774999999999949, 0.0024999999999995026, 0.02800000000000047, -0.027749999999999275, -0.0065000000000008384, -0.016750000000000043, 0.012999999999998124, -0.0019999999999988916, -0.0017500000000012506, -0.01750000000000007, 0.047999999999998266, 0.05325000000000024, -0.023000000000001464, 0.014499999999998181, 0.04124999999999979, 0.03250000000000064, -0.034000000000000696, 0.003249999999999531, 0.07699999999999818, 0.02024999999999899, -0.012750000000000483, 0.006249999999999645, 0.04800000000000004, 0.0754999999999999, 0.01774999999999949, -0.005499999999999616, 0.04400000000000048, 0.03450000000000131, 0.014500000000001734, 0.0045000000000001705, -0.00575000000000081], zp_timestamp='2026-02-14T19:39:00')
2026-02-14T21:41:26.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-14T21:41:26.393 [DEBUG] [Thread-192641] [transport.py] [_log()] starting thread (client mode): 0xa57431f0
2026-02-14T21:41:26.394 [DEBUG] [Thread-192641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:41:26.409 [DEBUG] [Thread-192641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:41:26.409 [INFO] [Thread-192641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:41:26.416 [DEBUG] [Thread-192641] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:41:26.416 [DEBUG] [Thread-192641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:41:26.416 [DEBUG] [Thread-192641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:41:26.416 [DEBUG] [Thread-192641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:41:26.416 [DEBUG] [Thread-192641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:41:26.416 [DEBUG] [Thread-192641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:41:26.416 [DEBUG] [Thread-192641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:41:26.416 [DEBUG] [Thread-192641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:41:26.416 [DEBUG] [Thread-192641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:41:26.417 [DEBUG] [Thread-192641] [transport.py] [_log()] client lang: <none>
2026-02-14T21:41:26.417 [DEBUG] [Thread-192641] [transport.py] [_log()] server lang: <none>
2026-02-14T21:41:26.417 [DEBUG] [Thread-192641] [transport.py] [_log()] kex follows: False
2026-02-14T21:41:26.417 [DEBUG] [Thread-192641] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:41:26.417 [DEBUG] [Thread-192641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:41:26.417 [DEBUG] [Thread-192641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:41:26.417 [DEBUG] [Thread-192641] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:41:26.417 [DEBUG] [Thread-192641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:41:26.417 [DEBUG] [Thread-192641] [transport.py] [_log()] Compression: none
2026-02-14T21:41:26.417 [DEBUG] [Thread-192641] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:41:26.478 [DEBUG] [Thread-192641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:41:26.479 [DEBUG] [Thread-192641] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:41:26.479 [DEBUG] [Thread-192641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:41:26.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:41:26.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:41:26.535 [DEBUG] [Thread-192641] [transport.py] [_log()] userauth is OK
2026-02-14T21:41:26.535 [DEBUG] [Thread-192641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:41:26.535 [DEBUG] [Thread-192641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:41:26.535 [DEBUG] [Thread-192641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:41:26.535 [DEBUG] [Thread-192641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:41:26.554 [INFO] [Thread-192641] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:41:26.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-14T21:41:26.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:41:27.376 [DEBUG] [Thread-192641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:41:27.376 [DEBUG] [Thread-192641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:41:27.424 [DEBUG] [Thread-192641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:41:27.425 [DEBUG] [Thread-192641] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:41:27.434 [DEBUG] [Thread-192641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:41:27.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:41:27.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:41:27.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:41:27.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:41:27.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:41:27.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:41:27.475 [DEBUG] [Thread-192641] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:41:32.673 [DEBUG] [Thread-192643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:41:46.015 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:41:46.016 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:41:47.722 [DEBUG] [Thread-192644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:41:57.397 [DEBUG] [Thread-192645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:41:57.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:41:57.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:41:57.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-14T21:41:59.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 41, 18), 7.47, 59.5, 0.0, 37.33, 9.96, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:41:59.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:41:18
2026-02-14T21:41:59.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:42:00.045 [DEBUG] [Thread-192646] [transport.py] [_log()] starting thread (client mode): 0xa2d12bc0
2026-02-14T21:42:00.045 [DEBUG] [Thread-192646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:42:00.065 [DEBUG] [Thread-192646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:42:00.065 [INFO] [Thread-192646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:42:00.068 [DEBUG] [Thread-192646] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:42:00.069 [DEBUG] [Thread-192646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:42:00.069 [DEBUG] [Thread-192646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:42:00.069 [DEBUG] [Thread-192646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:42:00.069 [DEBUG] [Thread-192646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:42:00.069 [DEBUG] [Thread-192646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:42:00.069 [DEBUG] [Thread-192646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:42:00.069 [DEBUG] [Thread-192646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:42:00.069 [DEBUG] [Thread-192646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:42:00.069 [DEBUG] [Thread-192646] [transport.py] [_log()] client lang: <none>
2026-02-14T21:42:00.069 [DEBUG] [Thread-192646] [transport.py] [_log()] server lang: <none>
2026-02-14T21:42:00.069 [DEBUG] [Thread-192646] [transport.py] [_log()] kex follows: False
2026-02-14T21:42:00.070 [DEBUG] [Thread-192646] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:42:00.070 [DEBUG] [Thread-192646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:42:00.070 [DEBUG] [Thread-192646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:42:00.070 [DEBUG] [Thread-192646] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:42:00.070 [DEBUG] [Thread-192646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:42:00.070 [DEBUG] [Thread-192646] [transport.py] [_log()] Compression: none
2026-02-14T21:42:00.070 [DEBUG] [Thread-192646] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:42:00.089 [DEBUG] [Thread-192646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:42:00.089 [DEBUG] [Thread-192646] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:42:00.090 [DEBUG] [Thread-192646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:42:00.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:42:00.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:42:00.092 [DEBUG] [Thread-192646] [transport.py] [_log()] userauth is OK
2026-02-14T21:42:00.092 [DEBUG] [Thread-192646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:42:00.092 [DEBUG] [Thread-192646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:42:00.092 [DEBUG] [Thread-192646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:42:00.092 [DEBUG] [Thread-192646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:42:00.116 [INFO] [Thread-192646] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:42:00.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:42:00.762 [DEBUG] [Thread-192646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:42:00.762 [DEBUG] [Thread-192646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:42:00.762 [DEBUG] [Thread-192646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:42:00.803 [DEBUG] [Thread-192646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:42:00.803 [DEBUG] [Thread-192646] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:42:00.805 [DEBUG] [Thread-192646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:42:00.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:42:00.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:42:00.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:42:00.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:42:00.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:42:00.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:42:00.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:42:00.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:42:00.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:42:00.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.820252 -999.00   +9.90  32.54     64   +3.50 1 1 2 1 1     0    0 5.86 -20.30 ZNESW 35.8 32.5 165.2 36.9 10.3 -25.1 10.2 -24.2 10.0 -23.1 10.3 -24.3
2026-02-14T21:42:00.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:42:00.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:42:00.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.820252
2026-02-14T21:42:00.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:42:00.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:42:00.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:42:00.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:42:00.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:42:00.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:41:18', tmtdew=7.47, humidity=59.5, cloud=0.0, wind=37.33, temperature=9.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:41:54', seeing=3.55, atlas_timestamp='2026-02-14T19:41:09.773', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.019750000000000156, -0.01774999999999949, 0.0024999999999995026, 0.02800000000000047, -0.027749999999999275, -0.0065000000000008384, -0.016750000000000043, 0.012999999999998124, -0.0019999999999988916, -0.0017500000000012506, -0.01750000000000007, 0.047999999999998266, 0.05325000000000024, -0.023000000000001464, 0.014499999999998181, 0.04124999999999979, 0.03250000000000064, -0.034000000000000696, 0.003249999999999531, 0.07699999999999818, 0.02024999999999899, -0.012750000000000483, 0.006249999999999645, 0.04800000000000004, 0.0754999999999999, 0.01774999999999949, -0.005499999999999616, 0.04400000000000048, 0.03450000000000131, 0.014500000000001734, 0.0045000000000001705, -0.00575000000000081], zp_timestamp='2026-02-14T19:39:00')
2026-02-14T21:42:00.824 [DEBUG] [Thread-192646] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:42:00.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-14T21:42:00.908 [DEBUG] [Thread-192649] [transport.py] [_log()] starting thread (client mode): 0xa57c0df0
2026-02-14T21:42:00.908 [DEBUG] [Thread-192649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:42:00.922 [DEBUG] [Thread-192649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:42:00.923 [INFO] [Thread-192649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:42:00.930 [DEBUG] [Thread-192649] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:42:00.931 [DEBUG] [Thread-192649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:42:00.931 [DEBUG] [Thread-192649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:42:00.931 [DEBUG] [Thread-192649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:42:00.931 [DEBUG] [Thread-192649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:42:00.931 [DEBUG] [Thread-192649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:42:00.931 [DEBUG] [Thread-192649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:42:00.931 [DEBUG] [Thread-192649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:42:00.931 [DEBUG] [Thread-192649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:42:00.931 [DEBUG] [Thread-192649] [transport.py] [_log()] client lang: <none>
2026-02-14T21:42:00.931 [DEBUG] [Thread-192649] [transport.py] [_log()] server lang: <none>
2026-02-14T21:42:00.931 [DEBUG] [Thread-192649] [transport.py] [_log()] kex follows: False
2026-02-14T21:42:00.931 [DEBUG] [Thread-192649] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:42:00.931 [DEBUG] [Thread-192649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:42:00.931 [DEBUG] [Thread-192649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:42:00.931 [DEBUG] [Thread-192649] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:42:00.931 [DEBUG] [Thread-192649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:42:00.931 [DEBUG] [Thread-192649] [transport.py] [_log()] Compression: none
2026-02-14T21:42:00.931 [DEBUG] [Thread-192649] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:42:00.991 [DEBUG] [Thread-192649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:42:00.991 [DEBUG] [Thread-192649] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:42:00.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:42:00.992 [DEBUG] [Thread-192649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:42:00.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:42:01.051 [DEBUG] [Thread-192649] [transport.py] [_log()] userauth is OK
2026-02-14T21:42:01.051 [DEBUG] [Thread-192649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:42:01.051 [DEBUG] [Thread-192649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:42:01.051 [DEBUG] [Thread-192649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:42:01.051 [DEBUG] [Thread-192649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:42:01.070 [INFO] [Thread-192649] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:42: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-14T21:42:01.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:42:01.868 [DEBUG] [Thread-192649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:42:01.869 [DEBUG] [Thread-192649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:42:01.916 [DEBUG] [Thread-192649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:42:01.916 [DEBUG] [Thread-192649] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:42:01.926 [DEBUG] [Thread-192649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:42:01.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:42:01.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-14T21:42:01.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:42:01.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:42:01.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:42:01.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:42:01.962 [DEBUG] [Thread-192649] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:42:02.756 [DEBUG] [Thread-192651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:42:17.560 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:42:17.811 [DEBUG] [Thread-192652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:42:31.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:42:31.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:42:31.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-14T21:42:32.848 [DEBUG] [Thread-192653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:42:34.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 41, 53), 7.53, 59.48, 0.0, 40.92, 10.0, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:42:34.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:41:53
2026-02-14T21:42:34.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:42:34.576 [DEBUG] [Thread-192654] [transport.py] [_log()] starting thread (client mode): 0xa2d121d0
2026-02-14T21:42:34.576 [DEBUG] [Thread-192654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:42:34.587 [DEBUG] [Thread-192654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:42:34.587 [INFO] [Thread-192654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:42:34.590 [DEBUG] [Thread-192654] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:42:34.590 [DEBUG] [Thread-192654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:42:34.590 [DEBUG] [Thread-192654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:42:34.590 [DEBUG] [Thread-192654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:42:34.590 [DEBUG] [Thread-192654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:42:34.590 [DEBUG] [Thread-192654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:42:34.590 [DEBUG] [Thread-192654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:42:34.590 [DEBUG] [Thread-192654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:42:34.590 [DEBUG] [Thread-192654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:42:34.590 [DEBUG] [Thread-192654] [transport.py] [_log()] client lang: <none>
2026-02-14T21:42:34.590 [DEBUG] [Thread-192654] [transport.py] [_log()] server lang: <none>
2026-02-14T21:42:34.591 [DEBUG] [Thread-192654] [transport.py] [_log()] kex follows: False
2026-02-14T21:42:34.591 [DEBUG] [Thread-192654] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:42:34.591 [DEBUG] [Thread-192654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:42:34.591 [DEBUG] [Thread-192654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:42:34.591 [DEBUG] [Thread-192654] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:42:34.591 [DEBUG] [Thread-192654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:42:34.591 [DEBUG] [Thread-192654] [transport.py] [_log()] Compression: none
2026-02-14T21:42:34.591 [DEBUG] [Thread-192654] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:42:34.607 [DEBUG] [Thread-192654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:42:34.608 [DEBUG] [Thread-192654] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:42:34.608 [DEBUG] [Thread-192654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:42:34.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:42:34.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:42:34.610 [DEBUG] [Thread-192654] [transport.py] [_log()] userauth is OK
2026-02-14T21:42:34.610 [DEBUG] [Thread-192654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:42:34.610 [DEBUG] [Thread-192654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:42:34.610 [DEBUG] [Thread-192654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:42:34.610 [DEBUG] [Thread-192654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:42:34.645 [INFO] [Thread-192654] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:42:34.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:42:35.279 [DEBUG] [Thread-192654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:42:35.279 [DEBUG] [Thread-192654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:42:35.279 [DEBUG] [Thread-192654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:42:35.320 [DEBUG] [Thread-192654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:42:35.321 [DEBUG] [Thread-192654] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:42:35.324 [DEBUG] [Thread-192654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:42:35.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:42:35.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:42:35.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:42:35.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:42:35.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:42:35.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:42:35.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:42:35.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:42:35.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:42:35.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.820599 -999.00   +9.90  27.30     64   +3.50 1 1 1 1 1     0    0 6.04 -19.90 ZNESW 36.3 27.3 165.8 42.0 10.3 -25.1 10.2 -24.2 10.0 -23.0 10.3 -24.3
2026-02-14T21:42:35.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:42:35.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:42:35.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.820599
2026-02-14T21:42:35.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:42:35.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:42:35.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:42:35.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:42:35.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:42:35.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:41:53', tmtdew=7.53, humidity=59.48, cloud=0.0, wind=40.92, temperature=10.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:42:29', seeing=4.2, atlas_timestamp='2026-02-14T19:41:39.754', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.019750000000000156, -0.01774999999999949, 0.0024999999999995026, 0.02800000000000047, -0.027749999999999275, -0.0065000000000008384, -0.016750000000000043, 0.012999999999998124, -0.0019999999999988916, -0.0017500000000012506, -0.01750000000000007, 0.047999999999998266, 0.05325000000000024, -0.023000000000001464, 0.014499999999998181, 0.04124999999999979, 0.03250000000000064, -0.034000000000000696, 0.003249999999999531, 0.07699999999999818, 0.02024999999999899, -0.012750000000000483, 0.006249999999999645, 0.04800000000000004, 0.0754999999999999, 0.01774999999999949, -0.005499999999999616, 0.04400000000000048, 0.03450000000000131, 0.014500000000001734, 0.0045000000000001705, -0.00575000000000081], zp_timestamp='2026-02-14T19:39:00')
2026-02-14T21:42:35.353 [DEBUG] [Thread-192654] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:42:35.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-14T21:42:35.449 [DEBUG] [Thread-192657] [transport.py] [_log()] starting thread (client mode): 0xa2d6fe80
2026-02-14T21:42:35.450 [DEBUG] [Thread-192657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:42:35.465 [DEBUG] [Thread-192657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:42:35.465 [INFO] [Thread-192657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:42:35.472 [DEBUG] [Thread-192657] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:42:35.473 [DEBUG] [Thread-192657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:42:35.473 [DEBUG] [Thread-192657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:42:35.473 [DEBUG] [Thread-192657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:42:35.473 [DEBUG] [Thread-192657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:42:35.473 [DEBUG] [Thread-192657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:42:35.473 [DEBUG] [Thread-192657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:42:35.473 [DEBUG] [Thread-192657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:42:35.473 [DEBUG] [Thread-192657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:42:35.473 [DEBUG] [Thread-192657] [transport.py] [_log()] client lang: <none>
2026-02-14T21:42:35.473 [DEBUG] [Thread-192657] [transport.py] [_log()] server lang: <none>
2026-02-14T21:42:35.473 [DEBUG] [Thread-192657] [transport.py] [_log()] kex follows: False
2026-02-14T21:42:35.473 [DEBUG] [Thread-192657] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:42:35.473 [DEBUG] [Thread-192657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:42:35.473 [DEBUG] [Thread-192657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:42:35.473 [DEBUG] [Thread-192657] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:42:35.474 [DEBUG] [Thread-192657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:42:35.474 [DEBUG] [Thread-192657] [transport.py] [_log()] Compression: none
2026-02-14T21:42:35.474 [DEBUG] [Thread-192657] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:42:35.531 [DEBUG] [Thread-192657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:42:35.532 [DEBUG] [Thread-192657] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:42:35.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:42:35.533 [DEBUG] [Thread-192657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:42:35.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:42:35.587 [DEBUG] [Thread-192657] [transport.py] [_log()] userauth is OK
2026-02-14T21:42:35.587 [DEBUG] [Thread-192657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:42:35.587 [DEBUG] [Thread-192657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:42:35.588 [DEBUG] [Thread-192657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:42:35.588 [DEBUG] [Thread-192657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:42:35.606 [INFO] [Thread-192657] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:42:35.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-14T21:42:35.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:42:36.408 [DEBUG] [Thread-192657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:42:36.409 [DEBUG] [Thread-192657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:42:36.456 [DEBUG] [Thread-192657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:42:36.457 [DEBUG] [Thread-192657] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:42:36.466 [DEBUG] [Thread-192657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:42:36.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:42:36.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-14T21:42:36.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-14T21:42:36.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:42:36.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:42:36.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:42:36.502 [DEBUG] [Thread-192657] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:42:46.215 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:42:46.216 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:42:47.887 [DEBUG] [Thread-192659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:42:57.461 [DEBUG] [Thread-192660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:43:02.937 [DEBUG] [Thread-192661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:43:06.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:43:06.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:43:06.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T21:43:09.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 42, 29), 7.53, 59.5, 0.0, 38.83, 10.0, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:43:09.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:42:29
2026-02-14T21:43:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:43:09.710 [DEBUG] [Thread-192662] [transport.py] [_log()] starting thread (client mode): 0xa57c1de0
2026-02-14T21:43:09.710 [DEBUG] [Thread-192662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:43:09.730 [DEBUG] [Thread-192662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:43:09.730 [INFO] [Thread-192662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:43:09.733 [DEBUG] [Thread-192662] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:43:09.733 [DEBUG] [Thread-192662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:43:09.733 [DEBUG] [Thread-192662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:43:09.733 [DEBUG] [Thread-192662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:43:09.734 [DEBUG] [Thread-192662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:43:09.734 [DEBUG] [Thread-192662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:43:09.734 [DEBUG] [Thread-192662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:43:09.734 [DEBUG] [Thread-192662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:43:09.734 [DEBUG] [Thread-192662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:43:09.734 [DEBUG] [Thread-192662] [transport.py] [_log()] client lang: <none>
2026-02-14T21:43:09.734 [DEBUG] [Thread-192662] [transport.py] [_log()] server lang: <none>
2026-02-14T21:43:09.734 [DEBUG] [Thread-192662] [transport.py] [_log()] kex follows: False
2026-02-14T21:43:09.734 [DEBUG] [Thread-192662] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:43:09.734 [DEBUG] [Thread-192662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:43:09.734 [DEBUG] [Thread-192662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:43:09.734 [DEBUG] [Thread-192662] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:43:09.734 [DEBUG] [Thread-192662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:43:09.734 [DEBUG] [Thread-192662] [transport.py] [_log()] Compression: none
2026-02-14T21:43:09.734 [DEBUG] [Thread-192662] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:43:09.753 [DEBUG] [Thread-192662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:43:09.754 [DEBUG] [Thread-192662] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:43:09.754 [DEBUG] [Thread-192662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:43:09.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:43:09.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:43:09.756 [DEBUG] [Thread-192662] [transport.py] [_log()] userauth is OK
2026-02-14T21:43:09.756 [DEBUG] [Thread-192662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:43:09.756 [DEBUG] [Thread-192662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:43:09.756 [DEBUG] [Thread-192662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:43:09.756 [DEBUG] [Thread-192662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:43:09.780 [INFO] [Thread-192662] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:43:09.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:43:10.580 [DEBUG] [Thread-192662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:43:10.580 [DEBUG] [Thread-192662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:43:10.581 [DEBUG] [Thread-192662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:43:10.621 [DEBUG] [Thread-192662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:43:10.621 [DEBUG] [Thread-192662] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:43:10.623 [DEBUG] [Thread-192662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:43:10.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:43:10.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:43:10.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:43:10.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:43:10.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:43:10.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:43:10.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:43:10.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:43:10.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:43:10.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.820946 -999.00   +9.90  24.75     64   +3.50 1 1 1 1 1     0    0 5.96 -19.73 ZNESW 27.9 24.8 162.2 36.8 10.3 -25.2 10.2 -24.2 10.0 -23.1 10.3 -24.4
2026-02-14T21:43:10.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:43:10.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:43:10.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.820946
2026-02-14T21:43:10.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:43:10.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:43:10.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:43:10.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:43:10.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:43:10.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:42:29', tmtdew=7.53, humidity=59.5, cloud=0.0, wind=38.83, temperature=10.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:43:05', seeing=4.61, atlas_timestamp='2026-02-14T19:42:09.734', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.019750000000000156, -0.01774999999999949, 0.0024999999999995026, 0.02800000000000047, -0.027749999999999275, -0.0065000000000008384, -0.016750000000000043, 0.012999999999998124, -0.0019999999999988916, -0.0017500000000012506, -0.01750000000000007, 0.047999999999998266, 0.05325000000000024, -0.023000000000001464, 0.014499999999998181, 0.04124999999999979, 0.03250000000000064, -0.034000000000000696, 0.003249999999999531, 0.07699999999999818, 0.02024999999999899, -0.012750000000000483, 0.006249999999999645, 0.04800000000000004, 0.0754999999999999, 0.01774999999999949, -0.005499999999999616, 0.04400000000000048, 0.03450000000000131, 0.014500000000001734, 0.0045000000000001705, -0.00575000000000081], zp_timestamp='2026-02-14T19:39:00')
2026-02-14T21:43:10.644 [DEBUG] [Thread-192662] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:43:10.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-14T21:43:10.739 [DEBUG] [Thread-192665] [transport.py] [_log()] starting thread (client mode): 0xa57e2bc0
2026-02-14T21:43:10.739 [DEBUG] [Thread-192665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:43:10.754 [DEBUG] [Thread-192665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:43:10.754 [INFO] [Thread-192665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:43:10.762 [DEBUG] [Thread-192665] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:43:10.762 [DEBUG] [Thread-192665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:43:10.762 [DEBUG] [Thread-192665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:43:10.762 [DEBUG] [Thread-192665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:43:10.762 [DEBUG] [Thread-192665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:43:10.762 [DEBUG] [Thread-192665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:43:10.762 [DEBUG] [Thread-192665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:43:10.762 [DEBUG] [Thread-192665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:43:10.762 [DEBUG] [Thread-192665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:43:10.762 [DEBUG] [Thread-192665] [transport.py] [_log()] client lang: <none>
2026-02-14T21:43:10.762 [DEBUG] [Thread-192665] [transport.py] [_log()] server lang: <none>
2026-02-14T21:43:10.762 [DEBUG] [Thread-192665] [transport.py] [_log()] kex follows: False
2026-02-14T21:43:10.762 [DEBUG] [Thread-192665] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:43:10.762 [DEBUG] [Thread-192665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:43:10.762 [DEBUG] [Thread-192665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:43:10.762 [DEBUG] [Thread-192665] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:43:10.762 [DEBUG] [Thread-192665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:43:10.762 [DEBUG] [Thread-192665] [transport.py] [_log()] Compression: none
2026-02-14T21:43:10.763 [DEBUG] [Thread-192665] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:43:10.823 [DEBUG] [Thread-192665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:43:10.824 [DEBUG] [Thread-192665] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:43:10.824 [DEBUG] [Thread-192665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:43:10.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:43:10.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:43:10.879 [DEBUG] [Thread-192665] [transport.py] [_log()] userauth is OK
2026-02-14T21:43:10.880 [DEBUG] [Thread-192665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:43:10.880 [DEBUG] [Thread-192665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:43:10.880 [DEBUG] [Thread-192665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:43:10.880 [DEBUG] [Thread-192665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:43:10.898 [INFO] [Thread-192665] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:43:10.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-14T21:43:10.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:43:11.717 [DEBUG] [Thread-192665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:43:11.717 [DEBUG] [Thread-192665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:43:11.765 [DEBUG] [Thread-192665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:43:11.766 [DEBUG] [Thread-192665] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:43:11.775 [DEBUG] [Thread-192665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:43:11.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:43:11.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-14T21:43:11.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:43:11.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:43:11.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:43:11.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:43:11.812 [DEBUG] [Thread-192665] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:43:17.969 [DEBUG] [Thread-192667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:43:33.021 [DEBUG] [Thread-192668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:43:41.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:43:41.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:43:41.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-14T21:43:43.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 43, 4), 7.52, 59.52, 0.0, 38.36, 10.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:43:43.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:43:04
2026-02-14T21:43:44.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:43:44.263 [DEBUG] [Thread-192669] [transport.py] [_log()] starting thread (client mode): 0xa57412d0
2026-02-14T21:43:44.263 [DEBUG] [Thread-192669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:43:44.278 [DEBUG] [Thread-192669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:43:44.278 [INFO] [Thread-192669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:43:44.281 [DEBUG] [Thread-192669] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:43:44.281 [DEBUG] [Thread-192669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:43:44.281 [DEBUG] [Thread-192669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:43:44.282 [DEBUG] [Thread-192669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:43:44.282 [DEBUG] [Thread-192669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:43:44.282 [DEBUG] [Thread-192669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:43:44.282 [DEBUG] [Thread-192669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:43:44.282 [DEBUG] [Thread-192669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:43:44.282 [DEBUG] [Thread-192669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:43:44.282 [DEBUG] [Thread-192669] [transport.py] [_log()] client lang: <none>
2026-02-14T21:43:44.282 [DEBUG] [Thread-192669] [transport.py] [_log()] server lang: <none>
2026-02-14T21:43:44.282 [DEBUG] [Thread-192669] [transport.py] [_log()] kex follows: False
2026-02-14T21:43:44.282 [DEBUG] [Thread-192669] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:43:44.282 [DEBUG] [Thread-192669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:43:44.282 [DEBUG] [Thread-192669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:43:44.282 [DEBUG] [Thread-192669] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:43:44.282 [DEBUG] [Thread-192669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:43:44.282 [DEBUG] [Thread-192669] [transport.py] [_log()] Compression: none
2026-02-14T21:43:44.282 [DEBUG] [Thread-192669] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:43:44.301 [DEBUG] [Thread-192669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:43:44.302 [DEBUG] [Thread-192669] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:43:44.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:43:44.303 [DEBUG] [Thread-192669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:43:44.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:43:44.305 [DEBUG] [Thread-192669] [transport.py] [_log()] userauth is OK
2026-02-14T21:43:44.305 [DEBUG] [Thread-192669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:43:44.306 [DEBUG] [Thread-192669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:43:44.306 [DEBUG] [Thread-192669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:43:44.306 [DEBUG] [Thread-192669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:43:44.328 [INFO] [Thread-192669] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:43:44.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:43:44.945 [DEBUG] [Thread-192669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:43:44.946 [DEBUG] [Thread-192669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:43:44.946 [DEBUG] [Thread-192669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:43:44.986 [DEBUG] [Thread-192669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:43:44.987 [DEBUG] [Thread-192669] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:43:44.990 [DEBUG] [Thread-192669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:43:45.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:43:45.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:43:45.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:43:45.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:43:45.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:43:45.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:43:45.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:43:45.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:43:45.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:43:45.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.821293 -999.00   +9.90  26.00     64   +3.50 1 1 1 1 1     0    0 6.01 -19.01 ZNESW 25.3 26.0 167.0 46.4 10.3 -25.1 10.2 -24.2 10.0 -23.2 10.3 -24.3
2026-02-14T21:43:45.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:43:45.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:43:45.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.821293
2026-02-14T21:43:45.024 [DEBUG] [Thread-192669] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:43:45.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:43:45.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:43:45.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:43:45.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:43:45.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:43:45.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:43:04', tmtdew=7.52, humidity=59.52, cloud=0.0, wind=38.36, temperature=10.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:43:05', seeing=4.61, atlas_timestamp='2026-02-14T19:42:39.715', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.019750000000000156, -0.01774999999999949, 0.0024999999999995026, 0.02800000000000047, -0.027749999999999275, -0.0065000000000008384, -0.016750000000000043, 0.012999999999998124, -0.0019999999999988916, -0.0017500000000012506, -0.01750000000000007, 0.047999999999998266, 0.05325000000000024, -0.023000000000001464, 0.014499999999998181, 0.04124999999999979, 0.03250000000000064, -0.034000000000000696, 0.003249999999999531, 0.07699999999999818, 0.02024999999999899, -0.012750000000000483, 0.006249999999999645, 0.04800000000000004, 0.0754999999999999, 0.01774999999999949, -0.005499999999999616, 0.04400000000000048, 0.03450000000000131, 0.014500000000001734, 0.0045000000000001705, -0.00575000000000081], zp_timestamp='2026-02-14T19:39:00')
2026-02-14T21:43:45.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-14T21:43:45.123 [DEBUG] [Thread-192672] [transport.py] [_log()] starting thread (client mode): 0xa57e1b40
2026-02-14T21:43:45.123 [DEBUG] [Thread-192672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:43:45.138 [DEBUG] [Thread-192672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:43:45.138 [INFO] [Thread-192672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:43:45.145 [DEBUG] [Thread-192672] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:43:45.145 [DEBUG] [Thread-192672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:43:45.145 [DEBUG] [Thread-192672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:43:45.145 [DEBUG] [Thread-192672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:43:45.145 [DEBUG] [Thread-192672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:43:45.145 [DEBUG] [Thread-192672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:43:45.145 [DEBUG] [Thread-192672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:43:45.145 [DEBUG] [Thread-192672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:43:45.145 [DEBUG] [Thread-192672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:43:45.145 [DEBUG] [Thread-192672] [transport.py] [_log()] client lang: <none>
2026-02-14T21:43:45.145 [DEBUG] [Thread-192672] [transport.py] [_log()] server lang: <none>
2026-02-14T21:43:45.145 [DEBUG] [Thread-192672] [transport.py] [_log()] kex follows: False
2026-02-14T21:43:45.145 [DEBUG] [Thread-192672] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:43:45.145 [DEBUG] [Thread-192672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:43:45.146 [DEBUG] [Thread-192672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:43:45.146 [DEBUG] [Thread-192672] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:43:45.146 [DEBUG] [Thread-192672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:43:45.146 [DEBUG] [Thread-192672] [transport.py] [_log()] Compression: none
2026-02-14T21:43:45.146 [DEBUG] [Thread-192672] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:43:45.201 [DEBUG] [Thread-192672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:43:45.201 [DEBUG] [Thread-192672] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:43:45.202 [DEBUG] [Thread-192672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:43:45.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:43:45.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:43:45.258 [DEBUG] [Thread-192672] [transport.py] [_log()] userauth is OK
2026-02-14T21:43:45.258 [DEBUG] [Thread-192672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:43:45.258 [DEBUG] [Thread-192672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:43:45.258 [DEBUG] [Thread-192672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:43:45.258 [DEBUG] [Thread-192672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:43:45.272 [INFO] [Thread-192672] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:43:45.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-14T21:43:45.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:43:46.057 [DEBUG] [Thread-192672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:43:46.057 [DEBUG] [Thread-192672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:43:46.104 [DEBUG] [Thread-192672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:43:46.104 [DEBUG] [Thread-192672] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:43:46.113 [DEBUG] [Thread-192672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:43:46.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:43:46.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-14T21:43:46.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-14T21:43:46.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:43:46.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:43:46.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:43:46.147 [DEBUG] [Thread-192672] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:43:46.421 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:43:46.422 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:43:48.056 [DEBUG] [Thread-192674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:43:51.221 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:43:57.520 [DEBUG] [Thread-192675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:44:03.106 [DEBUG] [Thread-192676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:44:16.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:44:16.169 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:44:16.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-14T21:44:17.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 43, 42), 7.65, 59.0, 0.0, 42.83, 10.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:44:17.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:43:42
2026-02-14T21:44:18.144 [DEBUG] [Thread-192677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:44:18.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:44:18.541 [DEBUG] [Thread-192678] [transport.py] [_log()] starting thread (client mode): 0xa2d7bfd0
2026-02-14T21:44:18.541 [DEBUG] [Thread-192678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:44:18.560 [DEBUG] [Thread-192678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:44:18.560 [INFO] [Thread-192678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:44:18.563 [DEBUG] [Thread-192678] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:44:18.563 [DEBUG] [Thread-192678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:44:18.563 [DEBUG] [Thread-192678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:44:18.563 [DEBUG] [Thread-192678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:44:18.564 [DEBUG] [Thread-192678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:44:18.564 [DEBUG] [Thread-192678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:44:18.564 [DEBUG] [Thread-192678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:44:18.564 [DEBUG] [Thread-192678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:44:18.564 [DEBUG] [Thread-192678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:44:18.564 [DEBUG] [Thread-192678] [transport.py] [_log()] client lang: <none>
2026-02-14T21:44:18.564 [DEBUG] [Thread-192678] [transport.py] [_log()] server lang: <none>
2026-02-14T21:44:18.564 [DEBUG] [Thread-192678] [transport.py] [_log()] kex follows: False
2026-02-14T21:44:18.564 [DEBUG] [Thread-192678] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:44:18.564 [DEBUG] [Thread-192678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:44:18.564 [DEBUG] [Thread-192678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:44:18.564 [DEBUG] [Thread-192678] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:44:18.564 [DEBUG] [Thread-192678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:44:18.564 [DEBUG] [Thread-192678] [transport.py] [_log()] Compression: none
2026-02-14T21:44:18.564 [DEBUG] [Thread-192678] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:44:18.580 [DEBUG] [Thread-192678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:44:18.580 [DEBUG] [Thread-192678] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:44:18.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:44:18.582 [DEBUG] [Thread-192678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:44:18.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:44:18.584 [DEBUG] [Thread-192678] [transport.py] [_log()] userauth is OK
2026-02-14T21:44:18.584 [DEBUG] [Thread-192678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:44:18.584 [DEBUG] [Thread-192678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:44:18.584 [DEBUG] [Thread-192678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:44:18.584 [DEBUG] [Thread-192678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:44:18.609 [INFO] [Thread-192678] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:44:18.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:44:19.338 [DEBUG] [Thread-192678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:44:19.338 [DEBUG] [Thread-192678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:44:19.338 [DEBUG] [Thread-192678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:44:19.378 [DEBUG] [Thread-192678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:44:19.379 [DEBUG] [Thread-192678] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:44:19.382 [DEBUG] [Thread-192678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:44:19.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:44:19.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:44:19.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:44:19.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:44:19.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:44:19.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:44:19.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:44:19.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:44:19.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:44:19.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.821988 -999.00   +9.80  25.43     64   +3.50 1 1 1 1 1     0    0 5.99 -16.43 ZNESW 29.3 25.4 156.6 40.5 10.3 -25.0 10.2 -24.1 10.0 -23.0 10.3 -24.3
2026-02-14T21:44:19.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:44:19.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:44:19.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.821988
2026-02-14T21:44:19.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:44:19.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:44:19.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:44:19.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:44:19.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:44:19.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:43:42', tmtdew=7.65, humidity=59.0, cloud=0.0, wind=42.83, temperature=10.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:43:42', seeing=3.77, atlas_timestamp='2026-02-14T19:43:39.763', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.019750000000000156, -0.01774999999999949, 0.0024999999999995026, 0.02800000000000047, -0.027749999999999275, -0.0065000000000008384, -0.016750000000000043, 0.012999999999998124, -0.0019999999999988916, -0.0017500000000012506, -0.01750000000000007, 0.047999999999998266, 0.05325000000000024, -0.023000000000001464, 0.014499999999998181, 0.04124999999999979, 0.03250000000000064, -0.034000000000000696, 0.003249999999999531, 0.07699999999999818, 0.02024999999999899, -0.012750000000000483, 0.006249999999999645, 0.04800000000000004, 0.0754999999999999, 0.01774999999999949, -0.005499999999999616, 0.04400000000000048, 0.03450000000000131, 0.014500000000001734, 0.0045000000000001705, -0.00575000000000081], zp_timestamp='2026-02-14T19:43:00')
2026-02-14T21:44:19.409 [DEBUG] [Thread-192678] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:44:19.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-14T21:44:19.504 [DEBUG] [Thread-192681] [transport.py] [_log()] starting thread (client mode): 0xa2d6d0f0
2026-02-14T21:44:19.505 [DEBUG] [Thread-192681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:44:19.520 [DEBUG] [Thread-192681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:44:19.520 [INFO] [Thread-192681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:44:19.527 [DEBUG] [Thread-192681] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:44:19.527 [DEBUG] [Thread-192681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:44:19.527 [DEBUG] [Thread-192681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:44:19.528 [DEBUG] [Thread-192681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:44:19.528 [DEBUG] [Thread-192681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:44:19.528 [DEBUG] [Thread-192681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:44:19.528 [DEBUG] [Thread-192681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:44:19.528 [DEBUG] [Thread-192681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:44:19.528 [DEBUG] [Thread-192681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:44:19.528 [DEBUG] [Thread-192681] [transport.py] [_log()] client lang: <none>
2026-02-14T21:44:19.528 [DEBUG] [Thread-192681] [transport.py] [_log()] server lang: <none>
2026-02-14T21:44:19.528 [DEBUG] [Thread-192681] [transport.py] [_log()] kex follows: False
2026-02-14T21:44:19.528 [DEBUG] [Thread-192681] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:44:19.528 [DEBUG] [Thread-192681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:44:19.528 [DEBUG] [Thread-192681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:44:19.528 [DEBUG] [Thread-192681] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:44:19.528 [DEBUG] [Thread-192681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:44:19.528 [DEBUG] [Thread-192681] [transport.py] [_log()] Compression: none
2026-02-14T21:44:19.528 [DEBUG] [Thread-192681] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:44:19.588 [DEBUG] [Thread-192681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:44:19.589 [DEBUG] [Thread-192681] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:44:19.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:44:19.590 [DEBUG] [Thread-192681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:44:19.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:44:19.651 [DEBUG] [Thread-192681] [transport.py] [_log()] userauth is OK
2026-02-14T21:44:19.651 [DEBUG] [Thread-192681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:44:19.651 [DEBUG] [Thread-192681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:44:19.651 [DEBUG] [Thread-192681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:44:19.652 [DEBUG] [Thread-192681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:44:19.674 [INFO] [Thread-192681] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:44:19.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-14T21:44:19.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:44:20.490 [DEBUG] [Thread-192681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:44:20.491 [DEBUG] [Thread-192681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:44:20.540 [DEBUG] [Thread-192681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:44:20.540 [DEBUG] [Thread-192681] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:44:20.549 [DEBUG] [Thread-192681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:44:20.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:44:20.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:44:20.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:44:20.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:44:20.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:44:20.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:44:20.586 [DEBUG] [Thread-192681] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:44:33.178 [DEBUG] [Thread-192683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:44:46.627 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:44:46.628 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:44:48.227 [DEBUG] [Thread-192684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:44:50.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:44:50.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:44:50.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-14T21:44:52.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 44, 17), 7.47, 59.53, 0.0, 36.59, 9.96, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:44:52.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:44:17
2026-02-14T21:44:52.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:44:52.919 [DEBUG] [Thread-192685] [transport.py] [_log()] starting thread (client mode): 0xa5740040
2026-02-14T21:44:52.919 [DEBUG] [Thread-192685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:44:52.940 [DEBUG] [Thread-192685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:44:52.940 [INFO] [Thread-192685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:44:52.943 [DEBUG] [Thread-192685] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:44:52.943 [DEBUG] [Thread-192685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:44:52.943 [DEBUG] [Thread-192685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:44:52.943 [DEBUG] [Thread-192685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:44:52.943 [DEBUG] [Thread-192685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:44:52.943 [DEBUG] [Thread-192685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:44:52.943 [DEBUG] [Thread-192685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:44:52.943 [DEBUG] [Thread-192685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:44:52.943 [DEBUG] [Thread-192685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:44:52.943 [DEBUG] [Thread-192685] [transport.py] [_log()] client lang: <none>
2026-02-14T21:44:52.943 [DEBUG] [Thread-192685] [transport.py] [_log()] server lang: <none>
2026-02-14T21:44:52.943 [DEBUG] [Thread-192685] [transport.py] [_log()] kex follows: False
2026-02-14T21:44:52.943 [DEBUG] [Thread-192685] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:44:52.943 [DEBUG] [Thread-192685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:44:52.943 [DEBUG] [Thread-192685] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:44:52.943 [DEBUG] [Thread-192685] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:44:52.943 [DEBUG] [Thread-192685] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:44:52.943 [DEBUG] [Thread-192685] [transport.py] [_log()] Compression: none
2026-02-14T21:44:52.944 [DEBUG] [Thread-192685] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:44:52.960 [DEBUG] [Thread-192685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:44:52.960 [DEBUG] [Thread-192685] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:44:52.961 [DEBUG] [Thread-192685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:44:52.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:44:52.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:44:52.962 [DEBUG] [Thread-192685] [transport.py] [_log()] userauth is OK
2026-02-14T21:44:52.962 [DEBUG] [Thread-192685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:44:52.962 [DEBUG] [Thread-192685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:44:52.962 [DEBUG] [Thread-192685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:44:52.962 [DEBUG] [Thread-192685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:44:52.980 [INFO] [Thread-192685] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:44:52.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:44:53.634 [DEBUG] [Thread-192685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:44:53.643 [DEBUG] [Thread-192685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:44:53.644 [DEBUG] [Thread-192685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:44:53.675 [DEBUG] [Thread-192685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:44:53.675 [DEBUG] [Thread-192685] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:44:53.679 [DEBUG] [Thread-192685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:44:53.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:44:53.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:44:53.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:44:53.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:44:53.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:44:53.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:44:53.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:44:53.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:44:53.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:44:53.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.822335 -999.00   +9.80  33.55     64   +3.50 1 1 2 1 1     0    0 5.98 -17.18 ZNESW 31.2 33.5 162.8 38.2 10.3 -25.0 10.2 -24.1 10.0 -23.1 10.3 -24.1
2026-02-14T21:44:53.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:44:53.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:44:53.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.822335
2026-02-14T21:44:53.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:44:53.706 [DEBUG] [Thread-192685] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:44:53.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:44:53.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:44:53.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:44:53.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:44:53.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:44:17', tmtdew=7.47, humidity=59.53, cloud=0.0, wind=36.59, temperature=9.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:44:17', seeing=4.04, atlas_timestamp='2026-02-14T19:44:09.744', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.019750000000000156, -0.01774999999999949, 0.0024999999999995026, 0.02800000000000047, -0.027749999999999275, -0.0065000000000008384, -0.016750000000000043, 0.012999999999998124, -0.0019999999999988916, -0.0017500000000012506, -0.01750000000000007, 0.047999999999998266, 0.05325000000000024, -0.023000000000001464, 0.014499999999998181, 0.04124999999999979, 0.03250000000000064, -0.034000000000000696, 0.003249999999999531, 0.07699999999999818, 0.02024999999999899, -0.012750000000000483, 0.006249999999999645, 0.04800000000000004, 0.0754999999999999, 0.01774999999999949, -0.005499999999999616, 0.04400000000000048, 0.03450000000000131, 0.014500000000001734, 0.0045000000000001705, -0.00575000000000081], zp_timestamp='2026-02-14T19:43:00')
2026-02-14T21:44:53.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-14T21:44:53.809 [DEBUG] [Thread-192688] [transport.py] [_log()] starting thread (client mode): 0xa5770dc0
2026-02-14T21:44:53.809 [DEBUG] [Thread-192688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:44:53.823 [DEBUG] [Thread-192688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:44:53.823 [INFO] [Thread-192688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:44:53.830 [DEBUG] [Thread-192688] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:44:53.830 [DEBUG] [Thread-192688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:44:53.830 [DEBUG] [Thread-192688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:44:53.830 [DEBUG] [Thread-192688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:44:53.830 [DEBUG] [Thread-192688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:44:53.830 [DEBUG] [Thread-192688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:44:53.830 [DEBUG] [Thread-192688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:44:53.830 [DEBUG] [Thread-192688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:44:53.830 [DEBUG] [Thread-192688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:44:53.830 [DEBUG] [Thread-192688] [transport.py] [_log()] client lang: <none>
2026-02-14T21:44:53.830 [DEBUG] [Thread-192688] [transport.py] [_log()] server lang: <none>
2026-02-14T21:44:53.830 [DEBUG] [Thread-192688] [transport.py] [_log()] kex follows: False
2026-02-14T21:44:53.830 [DEBUG] [Thread-192688] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:44:53.831 [DEBUG] [Thread-192688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:44:53.831 [DEBUG] [Thread-192688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:44:53.831 [DEBUG] [Thread-192688] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:44:53.831 [DEBUG] [Thread-192688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:44:53.831 [DEBUG] [Thread-192688] [transport.py] [_log()] Compression: none
2026-02-14T21:44:53.831 [DEBUG] [Thread-192688] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:44:53.885 [DEBUG] [Thread-192688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:44:53.885 [DEBUG] [Thread-192688] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:44:53.885 [DEBUG] [Thread-192688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:44:53.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:44:53.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:44:53.943 [DEBUG] [Thread-192688] [transport.py] [_log()] userauth is OK
2026-02-14T21:44:53.944 [DEBUG] [Thread-192688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:44:53.944 [DEBUG] [Thread-192688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:44:53.944 [DEBUG] [Thread-192688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:44:53.944 [DEBUG] [Thread-192688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:44:53.962 [INFO] [Thread-192688] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:44:53.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-14T21:44:53.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:44:54.736 [DEBUG] [Thread-192688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:44:54.737 [DEBUG] [Thread-192688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:44:54.784 [DEBUG] [Thread-192688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:44:54.785 [DEBUG] [Thread-192688] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:44:54.794 [DEBUG] [Thread-192688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:44:54.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:44:54.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-14T21:44:54.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-14T21:44:54.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:44:54.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:44:54.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:44:54.831 [DEBUG] [Thread-192688] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:44:57.576 [DEBUG] [Thread-192690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:45:03.267 [DEBUG] [Thread-192691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:45:18.316 [DEBUG] [Thread-192692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:45:24.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:45:24.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:45: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-14T21:45:25.413 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:45:26.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 44, 52), 7.46, 59.57, 0.0, 31.67, 9.95, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:45:26.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:44:52
2026-02-14T21:45:27.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:45:27.434 [DEBUG] [Thread-192693] [transport.py] [_log()] starting thread (client mode): 0xa2d3e1a0
2026-02-14T21:45:27.434 [DEBUG] [Thread-192693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:45:27.455 [DEBUG] [Thread-192693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:45:27.455 [INFO] [Thread-192693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:45:27.458 [DEBUG] [Thread-192693] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:45:27.458 [DEBUG] [Thread-192693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:45:27.458 [DEBUG] [Thread-192693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:45:27.458 [DEBUG] [Thread-192693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:45:27.458 [DEBUG] [Thread-192693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:45:27.458 [DEBUG] [Thread-192693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:45:27.459 [DEBUG] [Thread-192693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:45:27.459 [DEBUG] [Thread-192693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:45:27.459 [DEBUG] [Thread-192693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:45:27.459 [DEBUG] [Thread-192693] [transport.py] [_log()] client lang: <none>
2026-02-14T21:45:27.459 [DEBUG] [Thread-192693] [transport.py] [_log()] server lang: <none>
2026-02-14T21:45:27.459 [DEBUG] [Thread-192693] [transport.py] [_log()] kex follows: False
2026-02-14T21:45:27.459 [DEBUG] [Thread-192693] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:45:27.459 [DEBUG] [Thread-192693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:45:27.459 [DEBUG] [Thread-192693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:45:27.459 [DEBUG] [Thread-192693] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:45:27.459 [DEBUG] [Thread-192693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:45:27.460 [DEBUG] [Thread-192693] [transport.py] [_log()] Compression: none
2026-02-14T21:45:27.460 [DEBUG] [Thread-192693] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:45:27.478 [DEBUG] [Thread-192693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:45:27.479 [DEBUG] [Thread-192693] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:45:27.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:45:27.480 [DEBUG] [Thread-192693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:45:27.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:45:27.482 [DEBUG] [Thread-192693] [transport.py] [_log()] userauth is OK
2026-02-14T21:45:27.482 [DEBUG] [Thread-192693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:45:27.482 [DEBUG] [Thread-192693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:45:27.483 [DEBUG] [Thread-192693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:45:27.483 [DEBUG] [Thread-192693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:45:27.504 [INFO] [Thread-192693] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:45:27.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:45:28.134 [DEBUG] [Thread-192693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:45:28.134 [DEBUG] [Thread-192693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:45:28.135 [DEBUG] [Thread-192693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:45:28.175 [DEBUG] [Thread-192693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:45:28.175 [DEBUG] [Thread-192693] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:45:28.178 [DEBUG] [Thread-192693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:45:28.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:45:28.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:45:28.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:45:28.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:45:28.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:45:28.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:45:28.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:45:28.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:45:28.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:45:28.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.822682 -999.00   +9.80  22.99     64   +3.50 1 1 1 1 1     0    0 5.88 -17.08 ZNESW 25.2 23.0 160.6 37.7 10.3 -25.1 10.2 -24.1 10.0 -23.0 10.3 -24.4
2026-02-14T21:45:28.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:45:28.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:45:28.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.822682
2026-02-14T21:45:28.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:45:28.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:45:28.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:45:28.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:45:28.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:45:28.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:44:52', tmtdew=7.46, humidity=59.57, cloud=0.0, wind=31.67, temperature=9.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:44:52', seeing=4.04, atlas_timestamp='2026-02-14T19:44:39.725', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.019750000000000156, -0.01774999999999949, 0.0024999999999995026, 0.02800000000000047, -0.027749999999999275, -0.0065000000000008384, -0.016750000000000043, 0.012999999999998124, -0.0019999999999988916, -0.0017500000000012506, -0.01750000000000007, 0.047999999999998266, 0.05325000000000024, -0.023000000000001464, 0.014499999999998181, 0.04124999999999979, 0.03250000000000064, -0.034000000000000696, 0.003249999999999531, 0.07699999999999818, 0.02024999999999899, -0.012750000000000483, 0.006249999999999645, 0.04800000000000004, 0.0754999999999999, 0.01774999999999949, -0.005499999999999616, 0.04400000000000048, 0.03450000000000131, 0.014500000000001734, 0.0045000000000001705, -0.00575000000000081], zp_timestamp='2026-02-14T19:43:00')
2026-02-14T21:45:28.204 [DEBUG] [Thread-192693] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:45:28.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-14T21:45:28.303 [DEBUG] [Thread-192696] [transport.py] [_log()] starting thread (client mode): 0xa2d02500
2026-02-14T21:45:28.303 [DEBUG] [Thread-192696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:45:28.320 [DEBUG] [Thread-192696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:45:28.321 [INFO] [Thread-192696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:45:28.329 [DEBUG] [Thread-192696] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:45:28.330 [DEBUG] [Thread-192696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:45:28.330 [DEBUG] [Thread-192696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:45:28.330 [DEBUG] [Thread-192696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:45:28.330 [DEBUG] [Thread-192696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:45:28.330 [DEBUG] [Thread-192696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:45:28.330 [DEBUG] [Thread-192696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:45:28.330 [DEBUG] [Thread-192696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:45:28.330 [DEBUG] [Thread-192696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:45:28.330 [DEBUG] [Thread-192696] [transport.py] [_log()] client lang: <none>
2026-02-14T21:45:28.330 [DEBUG] [Thread-192696] [transport.py] [_log()] server lang: <none>
2026-02-14T21:45:28.330 [DEBUG] [Thread-192696] [transport.py] [_log()] kex follows: False
2026-02-14T21:45:28.330 [DEBUG] [Thread-192696] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:45:28.330 [DEBUG] [Thread-192696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:45:28.330 [DEBUG] [Thread-192696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:45:28.331 [DEBUG] [Thread-192696] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:45:28.331 [DEBUG] [Thread-192696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:45:28.331 [DEBUG] [Thread-192696] [transport.py] [_log()] Compression: none
2026-02-14T21:45:28.331 [DEBUG] [Thread-192696] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:45:28.393 [DEBUG] [Thread-192696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:45:28.394 [DEBUG] [Thread-192696] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:45:28.394 [DEBUG] [Thread-192696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:45:28.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:45:28.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:45:28.452 [DEBUG] [Thread-192696] [transport.py] [_log()] userauth is OK
2026-02-14T21:45:28.452 [DEBUG] [Thread-192696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:45:28.453 [DEBUG] [Thread-192696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:45:28.453 [DEBUG] [Thread-192696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:45:28.453 [DEBUG] [Thread-192696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:45:28.476 [INFO] [Thread-192696] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:45:28.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-14T21:45:28.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:45:29.277 [DEBUG] [Thread-192696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:45:29.277 [DEBUG] [Thread-192696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:45:29.327 [DEBUG] [Thread-192696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:45:29.327 [DEBUG] [Thread-192696] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:45:29.336 [DEBUG] [Thread-192696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:45:29.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:45: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-14T21:45: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-14T21:45:29.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:45:29.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:45:29.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:45:29.376 [DEBUG] [Thread-192696] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:45:33.346 [DEBUG] [Thread-192698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:45:46.828 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:45:46.829 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:45:48.401 [DEBUG] [Thread-192699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:45:54.199 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:45:57.635 [DEBUG] [Thread-192700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:45:59.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:45:59.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:45:59.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-14T21:46:01.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 45, 27), 7.46, 59.57, 0.0, 32.87, 9.95, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:46:01.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:45:27
2026-02-14T21:46:01.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:46:01.700 [DEBUG] [Thread-192701] [transport.py] [_log()] starting thread (client mode): 0xa2d00700
2026-02-14T21:46:01.700 [DEBUG] [Thread-192701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:46:01.720 [DEBUG] [Thread-192701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:46:01.720 [INFO] [Thread-192701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:46:01.723 [DEBUG] [Thread-192701] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:46:01.723 [DEBUG] [Thread-192701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:46:01.723 [DEBUG] [Thread-192701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:46:01.723 [DEBUG] [Thread-192701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:46:01.723 [DEBUG] [Thread-192701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:46:01.724 [DEBUG] [Thread-192701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:46:01.724 [DEBUG] [Thread-192701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:46:01.724 [DEBUG] [Thread-192701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:46:01.724 [DEBUG] [Thread-192701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:46:01.724 [DEBUG] [Thread-192701] [transport.py] [_log()] client lang: <none>
2026-02-14T21:46:01.724 [DEBUG] [Thread-192701] [transport.py] [_log()] server lang: <none>
2026-02-14T21:46:01.724 [DEBUG] [Thread-192701] [transport.py] [_log()] kex follows: False
2026-02-14T21:46:01.724 [DEBUG] [Thread-192701] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:46:01.724 [DEBUG] [Thread-192701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:46:01.724 [DEBUG] [Thread-192701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:46:01.724 [DEBUG] [Thread-192701] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:46:01.724 [DEBUG] [Thread-192701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:46:01.724 [DEBUG] [Thread-192701] [transport.py] [_log()] Compression: none
2026-02-14T21:46:01.724 [DEBUG] [Thread-192701] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:46:01.744 [DEBUG] [Thread-192701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:46:01.744 [DEBUG] [Thread-192701] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:46:01.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:46:01.745 [DEBUG] [Thread-192701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:46:01.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:46:01.789 [DEBUG] [Thread-192701] [transport.py] [_log()] userauth is OK
2026-02-14T21:46:01.790 [DEBUG] [Thread-192701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:46:01.790 [DEBUG] [Thread-192701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:46:01.790 [DEBUG] [Thread-192701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:46:01.790 [DEBUG] [Thread-192701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:46:01.823 [INFO] [Thread-192701] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:46:01.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:46:02.475 [DEBUG] [Thread-192701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:46:02.476 [DEBUG] [Thread-192701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:46:02.476 [DEBUG] [Thread-192701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:46:02.516 [DEBUG] [Thread-192701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:46:02.517 [DEBUG] [Thread-192701] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:46:02.520 [DEBUG] [Thread-192701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:46:02.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:46:02.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:46:02.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:46:02.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:46:02.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:46:02.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:46:02.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:46:02.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:46:02.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:46:02.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.823029 -999.00   +9.80  21.23     64   +3.50 1 1 1 1 1     0    0 5.94 -16.34 ZNESW 22.7 21.2 166.8 29.2 10.3 -25.3 10.2 -24.2 9.9 -23.1 10.3 -24.3
2026-02-14T21:46:02.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:46:02.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:46:02.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.823029
2026-02-14T21:46:02.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:46:02.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:46:02.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:46:02.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:46:02.549 [DEBUG] [Thread-192701] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:46:02.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:46:02.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:45:27', tmtdew=7.46, humidity=59.57, cloud=0.0, wind=32.87, temperature=9.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:45:27', seeing=4.84, atlas_timestamp='2026-02-14T19:45:09.706', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.019750000000000156, -0.01774999999999949, 0.0024999999999995026, 0.02800000000000047, -0.027749999999999275, -0.0065000000000008384, -0.016750000000000043, 0.012999999999998124, -0.0019999999999988916, -0.0017500000000012506, -0.01750000000000007, 0.047999999999998266, 0.05325000000000024, -0.023000000000001464, 0.014499999999998181, 0.04124999999999979, 0.03250000000000064, -0.034000000000000696, 0.003249999999999531, 0.07699999999999818, 0.02024999999999899, -0.012750000000000483, 0.006249999999999645, 0.04800000000000004, 0.0754999999999999, 0.01774999999999949, -0.005499999999999616, 0.04400000000000048, 0.03450000000000131, 0.014500000000001734, 0.0045000000000001705, -0.00575000000000081], zp_timestamp='2026-02-14T19:43:00')
2026-02-14T21:46:02.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-14T21:46:03.438 [DEBUG] [Thread-192704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:46:18.489 [DEBUG] [Thread-192705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:46:33.527 [DEBUG] [Thread-192706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:46:47.031 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:46:47.032 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:46:48.563 [DEBUG] [Thread-192707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:46:57.708 [DEBUG] [Thread-192708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:46:59.144 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:47:03.599 [DEBUG] [Thread-192709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:47:18.634 [DEBUG] [Thread-192710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:47:33.667 [DEBUG] [Thread-192711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:47:47.235 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:47:47.236 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:47:48.703 [DEBUG] [Thread-192712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:47:57.785 [DEBUG] [Thread-192713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:48:03.741 [DEBUG] [Thread-192714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:48:15.032 [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-14T21:48:18.781 [DEBUG] [Thread-192715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:48:32.828 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:48:33.817 [DEBUG] [Thread-192716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:48:45.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:48:45.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:48:45.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T21:48:47.436 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:48:47.437 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:48:47.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 48, 24), 7.44, 59.62, 0.0, 38.25, 9.88, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:48:47.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:48:24
2026-02-14T21:48:47.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:48:48.091 [DEBUG] [Thread-192717] [transport.py] [_log()] starting thread (client mode): 0xa57e1b40
2026-02-14T21:48:48.092 [DEBUG] [Thread-192717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:48:48.112 [DEBUG] [Thread-192717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:48:48.112 [INFO] [Thread-192717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:48:48.115 [DEBUG] [Thread-192717] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:48:48.121 [DEBUG] [Thread-192717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:48:48.121 [DEBUG] [Thread-192717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:48:48.121 [DEBUG] [Thread-192717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:48:48.121 [DEBUG] [Thread-192717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:48:48.121 [DEBUG] [Thread-192717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:48:48.121 [DEBUG] [Thread-192717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:48:48.121 [DEBUG] [Thread-192717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:48:48.121 [DEBUG] [Thread-192717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:48:48.121 [DEBUG] [Thread-192717] [transport.py] [_log()] client lang: <none>
2026-02-14T21:48:48.121 [DEBUG] [Thread-192717] [transport.py] [_log()] server lang: <none>
2026-02-14T21:48:48.121 [DEBUG] [Thread-192717] [transport.py] [_log()] kex follows: False
2026-02-14T21:48:48.121 [DEBUG] [Thread-192717] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:48:48.121 [DEBUG] [Thread-192717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:48:48.121 [DEBUG] [Thread-192717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:48:48.121 [DEBUG] [Thread-192717] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:48:48.121 [DEBUG] [Thread-192717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:48:48.121 [DEBUG] [Thread-192717] [transport.py] [_log()] Compression: none
2026-02-14T21:48:48.121 [DEBUG] [Thread-192717] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:48:48.139 [DEBUG] [Thread-192717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:48:48.139 [DEBUG] [Thread-192717] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:48:48.140 [DEBUG] [Thread-192717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:48:48.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:48:48.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:48:48.141 [DEBUG] [Thread-192717] [transport.py] [_log()] userauth is OK
2026-02-14T21:48:48.142 [DEBUG] [Thread-192717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:48:48.142 [DEBUG] [Thread-192717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:48:48.142 [DEBUG] [Thread-192717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:48:48.142 [DEBUG] [Thread-192717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:48:48.166 [INFO] [Thread-192717] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:48:48.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:48:48.805 [DEBUG] [Thread-192717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:48:48.805 [DEBUG] [Thread-192717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:48:48.806 [DEBUG] [Thread-192717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:48:48.846 [DEBUG] [Thread-192717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:48:48.847 [DEBUG] [Thread-192717] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:48:48.850 [DEBUG] [Thread-192717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:48:48.865 [DEBUG] [Thread-192719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:48:48.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:48:48.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:48:48.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:48:48.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:48:48.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:48:48.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:48:48.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:48:48.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:48:48.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:48:48.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.825113 -999.00   +9.80  24.14     65   +3.50 1 1 1 1 1     0    0 5.87 -16.39 ZNESW 24.4 24.1 167.8 35.2 10.3 -25.1 10.1 -24.2 9.9 -23.2 10.2 -24.4
2026-02-14T21:48:48.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:48:48.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:48:48.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.825113
2026-02-14T21:48:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:48:48.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:48:48.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:48:48.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:48:48.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:48:48.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:48:24', tmtdew=7.44, humidity=59.62, cloud=0.0, wind=38.25, temperature=9.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:48:24', seeing=3.72, atlas_timestamp='2026-02-14T19:48:09.763', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, -0.021749999999999048, -0.013749999999999929, -0.03250000000000064, 0.048500000000000654, 0.01425000000000054, -0.017000000000001236, -0.01574999999999882, 0.0015000000000000568, -0.0039999999999995595, -0.01624999999999943, 0.005000000000000782, 0.04499999999999993, 0.03125, -0.02800000000000047, 0.008999999999998565, 0.05874999999999986, 0.03550000000000075, -0.040000000000000924, 0.008250000000000313, 0.055999999999997385, 0.027749999999999275, 0.012250000000001648, 0.021250000000000213, 0.049999999999998934, 0.04400000000000048, 0.015750000000000597, -0.01249999999999929, 0.03999999999999915, 0.02400000000000091, 0.01150000000000162, -0.006499999999999062, 0.04224999999999923], zp_timestamp='2026-02-14T19:45:00')
2026-02-14T21:48:48.879 [DEBUG] [Thread-192717] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:48:48.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-14T21:48:48.976 [DEBUG] [Thread-192721] [transport.py] [_log()] starting thread (client mode): 0xa57e0580
2026-02-14T21:48:48.976 [DEBUG] [Thread-192721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:48:48.991 [DEBUG] [Thread-192721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:48:48.991 [INFO] [Thread-192721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:48:48.999 [DEBUG] [Thread-192721] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:48:48.999 [DEBUG] [Thread-192721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:48:48.999 [DEBUG] [Thread-192721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:48:48.999 [DEBUG] [Thread-192721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:48:48.999 [DEBUG] [Thread-192721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:48:48.999 [DEBUG] [Thread-192721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:48:48.999 [DEBUG] [Thread-192721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:48:48.999 [DEBUG] [Thread-192721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:48:48.999 [DEBUG] [Thread-192721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:48:48.999 [DEBUG] [Thread-192721] [transport.py] [_log()] client lang: <none>
2026-02-14T21:48:48.999 [DEBUG] [Thread-192721] [transport.py] [_log()] server lang: <none>
2026-02-14T21:48:48.999 [DEBUG] [Thread-192721] [transport.py] [_log()] kex follows: False
2026-02-14T21:48:48.999 [DEBUG] [Thread-192721] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:48:48.999 [DEBUG] [Thread-192721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:48:49.000 [DEBUG] [Thread-192721] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:48:49.000 [DEBUG] [Thread-192721] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:48:49.000 [DEBUG] [Thread-192721] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:48:49.000 [DEBUG] [Thread-192721] [transport.py] [_log()] Compression: none
2026-02-14T21:48:49.000 [DEBUG] [Thread-192721] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:48:49.057 [DEBUG] [Thread-192721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:48:49.057 [DEBUG] [Thread-192721] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:48:49.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:48:49.059 [DEBUG] [Thread-192721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:48:49.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:48:49.113 [DEBUG] [Thread-192721] [transport.py] [_log()] userauth is OK
2026-02-14T21:48:49.113 [DEBUG] [Thread-192721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:48:49.113 [DEBUG] [Thread-192721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:48:49.113 [DEBUG] [Thread-192721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:48:49.113 [DEBUG] [Thread-192721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:48:49.131 [INFO] [Thread-192721] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:48:49.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-14T21:48:49.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:48:49.914 [DEBUG] [Thread-192721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:48:49.914 [DEBUG] [Thread-192721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:48:49.963 [DEBUG] [Thread-192721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:48:49.963 [DEBUG] [Thread-192721] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:48:49.972 [DEBUG] [Thread-192721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:48:49.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:48:49.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:48:49.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:48:50.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:48:50.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:48:50.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:48:50.009 [DEBUG] [Thread-192721] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:48:57.866 [DEBUG] [Thread-192723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:49:03.899 [DEBUG] [Thread-192724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:49:18.952 [DEBUG] [Thread-192725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:49:20.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:49:20.023 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:49:20.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T21:49:21.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 48, 59), 7.43, 60.17, 0.0, 38.89, 9.9, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:49:21.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:48:59
2026-02-14T21:49:22.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:49:22.321 [DEBUG] [Thread-192726] [transport.py] [_log()] starting thread (client mode): 0xa2d036d0
2026-02-14T21:49:22.321 [DEBUG] [Thread-192726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:49:22.340 [DEBUG] [Thread-192726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:49:22.341 [INFO] [Thread-192726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:49:22.344 [DEBUG] [Thread-192726] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:49:22.344 [DEBUG] [Thread-192726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:49:22.344 [DEBUG] [Thread-192726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:49:22.344 [DEBUG] [Thread-192726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:49:22.344 [DEBUG] [Thread-192726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:49:22.344 [DEBUG] [Thread-192726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:49:22.344 [DEBUG] [Thread-192726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:49:22.344 [DEBUG] [Thread-192726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:49:22.344 [DEBUG] [Thread-192726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:49:22.344 [DEBUG] [Thread-192726] [transport.py] [_log()] client lang: <none>
2026-02-14T21:49:22.344 [DEBUG] [Thread-192726] [transport.py] [_log()] server lang: <none>
2026-02-14T21:49:22.344 [DEBUG] [Thread-192726] [transport.py] [_log()] kex follows: False
2026-02-14T21:49:22.344 [DEBUG] [Thread-192726] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:49:22.344 [DEBUG] [Thread-192726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:49:22.344 [DEBUG] [Thread-192726] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:49:22.344 [DEBUG] [Thread-192726] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:49:22.344 [DEBUG] [Thread-192726] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:49:22.344 [DEBUG] [Thread-192726] [transport.py] [_log()] Compression: none
2026-02-14T21:49:22.344 [DEBUG] [Thread-192726] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:49:22.360 [DEBUG] [Thread-192726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:49:22.360 [DEBUG] [Thread-192726] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:49:22.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:49:22.362 [DEBUG] [Thread-192726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:49:22.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:49:22.364 [DEBUG] [Thread-192726] [transport.py] [_log()] userauth is OK
2026-02-14T21:49:22.364 [DEBUG] [Thread-192726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:49:22.364 [DEBUG] [Thread-192726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:49:22.364 [DEBUG] [Thread-192726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:49:22.364 [DEBUG] [Thread-192726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:49:22.401 [INFO] [Thread-192726] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:49:22.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:49:23.065 [DEBUG] [Thread-192726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:49:23.065 [DEBUG] [Thread-192726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:49:23.065 [DEBUG] [Thread-192726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:49:23.107 [DEBUG] [Thread-192726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:49:23.107 [DEBUG] [Thread-192726] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:49:23.109 [DEBUG] [Thread-192726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:49:23.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:49:23.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:49:23.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:49:23.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:49:23.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:49:23.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:49:23.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:49:23.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:49:23.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:49:23.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.825460 -999.00   +9.80  28.08     65   +3.50 1 1 1 1 1     0    0 5.89 -16.49 ZNESW 24.6 28.1 165.0 36.9 10.3 -25.0 10.1 -24.0 9.9 -23.1 10.3 -24.2
2026-02-14T21:49:23.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:49:23.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:49:23.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.825460
2026-02-14T21:49:23.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:49:23.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:49:23.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:49:23.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:49:23.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:49:23.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:48:59', tmtdew=7.43, humidity=60.17, cloud=0.0, wind=38.89, temperature=9.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:48:59', seeing=3.72, atlas_timestamp='2026-02-14T19:48:39.744', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, -0.021749999999999048, -0.013749999999999929, -0.03250000000000064, 0.048500000000000654, 0.01425000000000054, -0.017000000000001236, -0.01574999999999882, 0.0015000000000000568, -0.0039999999999995595, -0.01624999999999943, 0.005000000000000782, 0.04499999999999993, 0.03125, -0.02800000000000047, 0.008999999999998565, 0.05874999999999986, 0.03550000000000075, -0.040000000000000924, 0.008250000000000313, 0.055999999999997385, 0.027749999999999275, 0.012250000000001648, 0.021250000000000213, 0.049999999999998934, 0.04400000000000048, 0.015750000000000597, -0.01249999999999929, 0.03999999999999915, 0.02400000000000091, 0.01150000000000162, -0.006499999999999062, 0.04224999999999923], zp_timestamp='2026-02-14T19:45:00')
2026-02-14T21:49:23.131 [DEBUG] [Thread-192726] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:49:23.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-14T21:49:23.222 [DEBUG] [Thread-192729] [transport.py] [_log()] starting thread (client mode): 0xa5741420
2026-02-14T21:49:23.222 [DEBUG] [Thread-192729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:49:23.237 [DEBUG] [Thread-192729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:49:23.237 [INFO] [Thread-192729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:49:23.246 [DEBUG] [Thread-192729] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:49:23.246 [DEBUG] [Thread-192729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:49:23.247 [DEBUG] [Thread-192729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:49:23.247 [DEBUG] [Thread-192729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:49:23.247 [DEBUG] [Thread-192729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:49:23.247 [DEBUG] [Thread-192729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:49:23.247 [DEBUG] [Thread-192729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:49:23.247 [DEBUG] [Thread-192729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:49:23.247 [DEBUG] [Thread-192729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:49:23.247 [DEBUG] [Thread-192729] [transport.py] [_log()] client lang: <none>
2026-02-14T21:49:23.247 [DEBUG] [Thread-192729] [transport.py] [_log()] server lang: <none>
2026-02-14T21:49:23.247 [DEBUG] [Thread-192729] [transport.py] [_log()] kex follows: False
2026-02-14T21:49:23.247 [DEBUG] [Thread-192729] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:49:23.247 [DEBUG] [Thread-192729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:49:23.247 [DEBUG] [Thread-192729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:49:23.247 [DEBUG] [Thread-192729] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:49:23.248 [DEBUG] [Thread-192729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:49:23.248 [DEBUG] [Thread-192729] [transport.py] [_log()] Compression: none
2026-02-14T21:49:23.248 [DEBUG] [Thread-192729] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:49:23.304 [DEBUG] [Thread-192729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:49:23.305 [DEBUG] [Thread-192729] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:49:23.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:49:23.306 [DEBUG] [Thread-192729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:49:23.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:49:23.360 [DEBUG] [Thread-192729] [transport.py] [_log()] userauth is OK
2026-02-14T21:49:23.360 [DEBUG] [Thread-192729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:49:23.361 [DEBUG] [Thread-192729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:49:23.361 [DEBUG] [Thread-192729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:49:23.361 [DEBUG] [Thread-192729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:49:23.380 [INFO] [Thread-192729] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:49:23.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-14T21:49:23.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:49:24.167 [DEBUG] [Thread-192729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:49:24.167 [DEBUG] [Thread-192729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:49:24.215 [DEBUG] [Thread-192729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:49:24.215 [DEBUG] [Thread-192729] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:49:24.224 [DEBUG] [Thread-192729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:49:24.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:49:24.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-14T21: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-14T21:49:24.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:49:24.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:49:24.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:49:24.258 [DEBUG] [Thread-192729] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:49:33.982 [DEBUG] [Thread-192731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:49:47.640 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:49:47.642 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:49:49.028 [DEBUG] [Thread-192732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:49:54.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:49:54.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:49:54.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-14T21:49:56.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 49, 34), 7.57, 59.3, 0.0, 35.21, 10.13, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:49:56.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:49:34
2026-02-14T21:49:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:49:56.843 [DEBUG] [Thread-192733] [transport.py] [_log()] starting thread (client mode): 0xa57e2380
2026-02-14T21:49:56.843 [DEBUG] [Thread-192733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:49:56.862 [DEBUG] [Thread-192733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:49:56.862 [INFO] [Thread-192733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:49:56.866 [DEBUG] [Thread-192733] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:49:56.866 [DEBUG] [Thread-192733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:49:56.866 [DEBUG] [Thread-192733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:49:56.866 [DEBUG] [Thread-192733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:49:56.866 [DEBUG] [Thread-192733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:49:56.866 [DEBUG] [Thread-192733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:49:56.866 [DEBUG] [Thread-192733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:49:56.866 [DEBUG] [Thread-192733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:49:56.866 [DEBUG] [Thread-192733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:49:56.866 [DEBUG] [Thread-192733] [transport.py] [_log()] client lang: <none>
2026-02-14T21:49:56.867 [DEBUG] [Thread-192733] [transport.py] [_log()] server lang: <none>
2026-02-14T21:49:56.867 [DEBUG] [Thread-192733] [transport.py] [_log()] kex follows: False
2026-02-14T21:49:56.867 [DEBUG] [Thread-192733] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:49:56.867 [DEBUG] [Thread-192733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:49:56.867 [DEBUG] [Thread-192733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:49:56.867 [DEBUG] [Thread-192733] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:49:56.867 [DEBUG] [Thread-192733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:49:56.867 [DEBUG] [Thread-192733] [transport.py] [_log()] Compression: none
2026-02-14T21:49:56.867 [DEBUG] [Thread-192733] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:49:56.887 [DEBUG] [Thread-192733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:49:56.888 [DEBUG] [Thread-192733] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:49:56.888 [DEBUG] [Thread-192733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:49:56.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:49:56.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:49:56.891 [DEBUG] [Thread-192733] [transport.py] [_log()] userauth is OK
2026-02-14T21:49:56.891 [DEBUG] [Thread-192733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:49:56.891 [DEBUG] [Thread-192733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:49:56.891 [DEBUG] [Thread-192733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:49:56.891 [DEBUG] [Thread-192733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:49:56.911 [INFO] [Thread-192733] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:49:56.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:49:57.529 [DEBUG] [Thread-192733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:49:57.529 [DEBUG] [Thread-192733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:49:57.530 [DEBUG] [Thread-192733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:49:57.570 [DEBUG] [Thread-192733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:49:57.570 [DEBUG] [Thread-192733] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:49:57.574 [DEBUG] [Thread-192733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:49:57.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:49:57.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:49:57.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:49:57.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:49:57.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:49:57.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:49:57.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:49:57.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:49:57.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:49:57.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.825807 -999.00   +9.70  20.82     65   +3.50 1 1 1 1 1     0    0 5.93 -15.99 ZNESW 22.9 20.8 165.0 35.3 10.2 -25.2 10.1 -24.0 9.9 -23.0 10.2 -24.3
2026-02-14T21:49:57.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:49:57.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:49:57.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.825807
2026-02-14T21:49:57.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:49:57.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:49:57.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:49:57.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:49:57.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:49:57.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:49:34', tmtdew=7.57, humidity=59.3, cloud=0.0, wind=35.21, temperature=10.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:49:35', seeing=3.23, atlas_timestamp='2026-02-14T19:49:09.725', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, -0.021749999999999048, -0.013749999999999929, -0.03250000000000064, 0.048500000000000654, 0.01425000000000054, -0.017000000000001236, -0.01574999999999882, 0.0015000000000000568, -0.0039999999999995595, -0.01624999999999943, 0.005000000000000782, 0.04499999999999993, 0.03125, -0.02800000000000047, 0.008999999999998565, 0.05874999999999986, 0.03550000000000075, -0.040000000000000924, 0.008250000000000313, 0.055999999999997385, 0.027749999999999275, 0.012250000000001648, 0.021250000000000213, 0.049999999999998934, 0.04400000000000048, 0.015750000000000597, -0.01249999999999929, 0.03999999999999915, 0.02400000000000091, 0.01150000000000162, -0.006499999999999062, 0.04224999999999923], zp_timestamp='2026-02-14T19:45:00')
2026-02-14T21:49:57.600 [DEBUG] [Thread-192733] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:49:57.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-14T21:49:57.696 [DEBUG] [Thread-192736] [transport.py] [_log()] starting thread (client mode): 0xa57e1930
2026-02-14T21:49:57.697 [DEBUG] [Thread-192736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:49:57.717 [DEBUG] [Thread-192736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:49:57.718 [INFO] [Thread-192736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:49:57.725 [DEBUG] [Thread-192736] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:49:57.726 [DEBUG] [Thread-192736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:49:57.726 [DEBUG] [Thread-192736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:49:57.726 [DEBUG] [Thread-192736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:49:57.726 [DEBUG] [Thread-192736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:49:57.726 [DEBUG] [Thread-192736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:49:57.726 [DEBUG] [Thread-192736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:49:57.726 [DEBUG] [Thread-192736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:49:57.726 [DEBUG] [Thread-192736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:49:57.726 [DEBUG] [Thread-192736] [transport.py] [_log()] client lang: <none>
2026-02-14T21:49:57.727 [DEBUG] [Thread-192736] [transport.py] [_log()] server lang: <none>
2026-02-14T21:49:57.727 [DEBUG] [Thread-192736] [transport.py] [_log()] kex follows: False
2026-02-14T21:49:57.727 [DEBUG] [Thread-192736] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:49:57.727 [DEBUG] [Thread-192736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:49:57.727 [DEBUG] [Thread-192736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:49:57.727 [DEBUG] [Thread-192736] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:49:57.727 [DEBUG] [Thread-192736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:49:57.728 [DEBUG] [Thread-192736] [transport.py] [_log()] Compression: none
2026-02-14T21:49:57.728 [DEBUG] [Thread-192736] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:49:57.785 [DEBUG] [Thread-192736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:49:57.786 [DEBUG] [Thread-192736] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:49:57.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:49:57.788 [DEBUG] [Thread-192736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:49:57.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:49:57.845 [DEBUG] [Thread-192736] [transport.py] [_log()] userauth is OK
2026-02-14T21:49:57.845 [DEBUG] [Thread-192736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:49:57.846 [DEBUG] [Thread-192736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:49:57.846 [DEBUG] [Thread-192736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:49:57.846 [DEBUG] [Thread-192736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:49:57.867 [INFO] [Thread-192736] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:49:57.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-14T21:49:57.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:49:57.946 [DEBUG] [Thread-192738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:49:58.671 [DEBUG] [Thread-192736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:49:58.672 [DEBUG] [Thread-192736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:49:58.719 [DEBUG] [Thread-192736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:49:58.720 [DEBUG] [Thread-192736] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:49:58.729 [DEBUG] [Thread-192736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:49:58.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:49:58.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-14T21:49:58.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-14T21:49:58.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:49:58.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:49:58.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:49:58.766 [DEBUG] [Thread-192736] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:50:04.068 [DEBUG] [Thread-192739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:50:07.160 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:50:19.119 [DEBUG] [Thread-192740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:50:28.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:50:28.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:50:28.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-14T21:50:30.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 50, 10), 7.36, 60.25, 0.0, 36.06, 9.9, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:50:30.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:50:10
2026-02-14T21:50:30.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:50:31.077 [DEBUG] [Thread-192741] [transport.py] [_log()] starting thread (client mode): 0xa57733d0
2026-02-14T21:50:31.077 [DEBUG] [Thread-192741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:50:31.097 [DEBUG] [Thread-192741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:50:31.097 [INFO] [Thread-192741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:50:31.100 [DEBUG] [Thread-192741] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:50:31.100 [DEBUG] [Thread-192741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:50:31.100 [DEBUG] [Thread-192741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:50:31.100 [DEBUG] [Thread-192741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:50:31.100 [DEBUG] [Thread-192741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:50:31.100 [DEBUG] [Thread-192741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:50:31.100 [DEBUG] [Thread-192741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:50:31.100 [DEBUG] [Thread-192741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:50:31.100 [DEBUG] [Thread-192741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:50:31.100 [DEBUG] [Thread-192741] [transport.py] [_log()] client lang: <none>
2026-02-14T21:50:31.100 [DEBUG] [Thread-192741] [transport.py] [_log()] server lang: <none>
2026-02-14T21:50:31.101 [DEBUG] [Thread-192741] [transport.py] [_log()] kex follows: False
2026-02-14T21:50:31.101 [DEBUG] [Thread-192741] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:50:31.101 [DEBUG] [Thread-192741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:50:31.101 [DEBUG] [Thread-192741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:50:31.101 [DEBUG] [Thread-192741] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:50:31.101 [DEBUG] [Thread-192741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:50:31.101 [DEBUG] [Thread-192741] [transport.py] [_log()] Compression: none
2026-02-14T21:50:31.101 [DEBUG] [Thread-192741] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:50:31.117 [DEBUG] [Thread-192741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:50:31.117 [DEBUG] [Thread-192741] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:50:31.118 [DEBUG] [Thread-192741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:50:31.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:50:31.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:50:31.119 [DEBUG] [Thread-192741] [transport.py] [_log()] userauth is OK
2026-02-14T21:50:31.119 [DEBUG] [Thread-192741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:50:31.119 [DEBUG] [Thread-192741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:50:31.119 [DEBUG] [Thread-192741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:50:31.119 [DEBUG] [Thread-192741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:50:31.132 [INFO] [Thread-192741] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:50:31.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:50:31.765 [DEBUG] [Thread-192741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:50:31.765 [DEBUG] [Thread-192741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:50:31.766 [DEBUG] [Thread-192741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:50:31.806 [DEBUG] [Thread-192741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:50:31.807 [DEBUG] [Thread-192741] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:50:31.810 [DEBUG] [Thread-192741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:50:31.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:50:31.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:50:31.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:50:31.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:50:31.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:50:31.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:50:31.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:50:31.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:50:31.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:50:31.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.826154 -999.00   +9.70  25.57     65   +3.50 1 1 1 1 1     0    0 5.94 -14.90 ZNESW 25.0 25.6 152.4 37.3 10.2 -25.1 10.1 -24.0 9.9 -23.0 10.2 -24.2
2026-02-14T21:50:31.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:50:31.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:50:31.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.826154
2026-02-14T21:50:31.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:50:31.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:50:31.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:50:31.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:50:31.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:50:31.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:50:10', tmtdew=7.36, humidity=60.25, cloud=0.0, wind=36.06, temperature=9.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:50:10', seeing=4.03, atlas_timestamp='2026-02-14T19:49:39.706', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, -0.029249999999999332, -0.013749999999999929, -0.013000000000001677, 0.0235000000000003, -0.03974999999999973, -0.02400000000000091, -0.0007500000000000284, 0.0034999999999989484, -0.009999999999999787, -0.017250000000000654, -0.009000000000000341, 0.023999999999999133, 0.034250000000000114, -0.030000000000001137, 0.007999999999999119, 0.056250000000000355, 0.018499999999999517, -0.040000000000000924, -0.026250000000000995, 0.07349999999999923, 0.007749999999997925, 0.0012500000000006395, 0.003750000000000142, 0.03399999999999892, 0.03950000000000031, 0.027749999999999275, -0.014499999999999957, 0.061500000000000554, 0.0235000000000003, 0.008500000000001506, -0.0019999999999988916, 0.02474999999999916], zp_timestamp='2026-02-14T19:48:00')
2026-02-14T21:50:31.832 [DEBUG] [Thread-192741] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:50:31.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-14T21:50:31.921 [DEBUG] [Thread-192744] [transport.py] [_log()] starting thread (client mode): 0xa57721d0
2026-02-14T21:50:31.922 [DEBUG] [Thread-192744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:50:31.937 [DEBUG] [Thread-192744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:50:31.937 [INFO] [Thread-192744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:50:31.945 [DEBUG] [Thread-192744] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:50:31.945 [DEBUG] [Thread-192744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:50:31.945 [DEBUG] [Thread-192744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:50:31.945 [DEBUG] [Thread-192744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:50:31.945 [DEBUG] [Thread-192744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:50:31.945 [DEBUG] [Thread-192744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:50:31.946 [DEBUG] [Thread-192744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:50:31.946 [DEBUG] [Thread-192744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:50:31.946 [DEBUG] [Thread-192744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:50:31.946 [DEBUG] [Thread-192744] [transport.py] [_log()] client lang: <none>
2026-02-14T21:50:31.946 [DEBUG] [Thread-192744] [transport.py] [_log()] server lang: <none>
2026-02-14T21:50:31.946 [DEBUG] [Thread-192744] [transport.py] [_log()] kex follows: False
2026-02-14T21:50:31.946 [DEBUG] [Thread-192744] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:50:31.946 [DEBUG] [Thread-192744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:50:31.947 [DEBUG] [Thread-192744] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:50:31.947 [DEBUG] [Thread-192744] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:50:31.947 [DEBUG] [Thread-192744] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:50:31.947 [DEBUG] [Thread-192744] [transport.py] [_log()] Compression: none
2026-02-14T21:50:31.947 [DEBUG] [Thread-192744] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:50:32.005 [DEBUG] [Thread-192744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:50:32.006 [DEBUG] [Thread-192744] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:50:32.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:50:32.007 [DEBUG] [Thread-192744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:50:32.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:50:32.061 [DEBUG] [Thread-192744] [transport.py] [_log()] userauth is OK
2026-02-14T21:50:32.061 [DEBUG] [Thread-192744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:50:32.061 [DEBUG] [Thread-192744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:50:32.061 [DEBUG] [Thread-192744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:50:32.061 [DEBUG] [Thread-192744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:50:32.080 [INFO] [Thread-192744] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:50:32.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-14T21:50:32.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:50:32.900 [DEBUG] [Thread-192744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:50:32.900 [DEBUG] [Thread-192744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:50:32.948 [DEBUG] [Thread-192744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:50:32.948 [DEBUG] [Thread-192744] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:50:32.957 [DEBUG] [Thread-192744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:50:32.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:50: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')
2026-02-14T21:50:32.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:50:32.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:50:32.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:50:32.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:50:32.991 [DEBUG] [Thread-192744] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:50:34.154 [DEBUG] [Thread-192746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:50:47.843 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:50:47.844 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:50:49.212 [DEBUG] [Thread-192747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:50:57.998 [DEBUG] [Thread-192748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:51:03.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:51:03.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:51:03.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-14T21:51:04.244 [DEBUG] [Thread-192749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:51:04.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 50, 45), 7.37, 60.2, 0.0, 28.39, 9.88, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:51:04.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:50:45
2026-02-14T21:51:05.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:51:05.535 [DEBUG] [Thread-192750] [transport.py] [_log()] starting thread (client mode): 0xa5773be0
2026-02-14T21:51:05.535 [DEBUG] [Thread-192750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:51:05.554 [DEBUG] [Thread-192750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:51:05.554 [INFO] [Thread-192750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:51:05.557 [DEBUG] [Thread-192750] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:51:05.557 [DEBUG] [Thread-192750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:51:05.557 [DEBUG] [Thread-192750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:51:05.557 [DEBUG] [Thread-192750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:51:05.557 [DEBUG] [Thread-192750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:51:05.557 [DEBUG] [Thread-192750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:51:05.557 [DEBUG] [Thread-192750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:51:05.557 [DEBUG] [Thread-192750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:51:05.557 [DEBUG] [Thread-192750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:51:05.557 [DEBUG] [Thread-192750] [transport.py] [_log()] client lang: <none>
2026-02-14T21:51:05.557 [DEBUG] [Thread-192750] [transport.py] [_log()] server lang: <none>
2026-02-14T21:51:05.557 [DEBUG] [Thread-192750] [transport.py] [_log()] kex follows: False
2026-02-14T21:51:05.557 [DEBUG] [Thread-192750] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:51:05.557 [DEBUG] [Thread-192750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:51:05.557 [DEBUG] [Thread-192750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:51:05.557 [DEBUG] [Thread-192750] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:51:05.557 [DEBUG] [Thread-192750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:51:05.557 [DEBUG] [Thread-192750] [transport.py] [_log()] Compression: none
2026-02-14T21:51:05.557 [DEBUG] [Thread-192750] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:51:05.574 [DEBUG] [Thread-192750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:51:05.575 [DEBUG] [Thread-192750] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:51:05.576 [DEBUG] [Thread-192750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:51:05.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:51:05.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:51:05.578 [DEBUG] [Thread-192750] [transport.py] [_log()] userauth is OK
2026-02-14T21:51:05.578 [DEBUG] [Thread-192750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:51:05.578 [DEBUG] [Thread-192750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:51:05.578 [DEBUG] [Thread-192750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:51:05.578 [DEBUG] [Thread-192750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:51:05.604 [INFO] [Thread-192750] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:51:05.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:51:06.220 [DEBUG] [Thread-192750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:51:06.220 [DEBUG] [Thread-192750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:51:06.220 [DEBUG] [Thread-192750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:51:06.261 [DEBUG] [Thread-192750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:51:06.262 [DEBUG] [Thread-192750] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:51:06.265 [DEBUG] [Thread-192750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:51:06.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:51:06.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:51:06.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:51:06.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:51:06.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:51:06.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:51:06.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:51:06.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:51:06.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:51:06.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.826848 -999.00   +9.70  34.85     65   +3.50 1 1 2 1 1     0    0 5.95 -15.94 ZNESW 25.5 34.9 164.1 42.8 10.2 -25.1 10.1 -24.0 9.8 -23.1 10.2 -24.3
2026-02-14T21:51:06.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:51:06.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:51:06.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.826848
2026-02-14T21:51:06.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:51:06.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:51:06.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:51:06.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:51:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:51:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:50:45', tmtdew=7.37, humidity=60.2, cloud=0.0, wind=28.39, temperature=9.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:50:45', seeing=4.31, atlas_timestamp='2026-02-14T19:50:39.667', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, -0.029249999999999332, -0.013749999999999929, -0.013000000000001677, 0.0235000000000003, -0.03974999999999973, -0.02400000000000091, -0.0007500000000000284, 0.0034999999999989484, -0.009999999999999787, -0.017250000000000654, -0.009000000000000341, 0.023999999999999133, 0.034250000000000114, -0.030000000000001137, 0.007999999999999119, 0.056250000000000355, 0.018499999999999517, -0.040000000000000924, -0.026250000000000995, 0.07349999999999923, 0.007749999999997925, 0.0012500000000006395, 0.003750000000000142, 0.03399999999999892, 0.03950000000000031, 0.027749999999999275, -0.014499999999999957, 0.061500000000000554, 0.0235000000000003, 0.008500000000001506, -0.0019999999999988916, 0.02474999999999916], zp_timestamp='2026-02-14T19:48:00')
2026-02-14T21:51:06.291 [DEBUG] [Thread-192750] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:51:06.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-14T21:51:06.387 [DEBUG] [Thread-192753] [transport.py] [_log()] starting thread (client mode): 0xa2d01c30
2026-02-14T21:51:06.387 [DEBUG] [Thread-192753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:51:06.401 [DEBUG] [Thread-192753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:51:06.402 [INFO] [Thread-192753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:51:06.409 [DEBUG] [Thread-192753] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:51:06.410 [DEBUG] [Thread-192753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:51:06.410 [DEBUG] [Thread-192753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:51:06.410 [DEBUG] [Thread-192753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:51:06.410 [DEBUG] [Thread-192753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:51:06.410 [DEBUG] [Thread-192753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:51:06.410 [DEBUG] [Thread-192753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:51:06.410 [DEBUG] [Thread-192753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:51:06.410 [DEBUG] [Thread-192753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:51:06.410 [DEBUG] [Thread-192753] [transport.py] [_log()] client lang: <none>
2026-02-14T21:51:06.410 [DEBUG] [Thread-192753] [transport.py] [_log()] server lang: <none>
2026-02-14T21:51:06.410 [DEBUG] [Thread-192753] [transport.py] [_log()] kex follows: False
2026-02-14T21:51:06.410 [DEBUG] [Thread-192753] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:51:06.410 [DEBUG] [Thread-192753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:51:06.410 [DEBUG] [Thread-192753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:51:06.410 [DEBUG] [Thread-192753] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:51:06.410 [DEBUG] [Thread-192753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:51:06.410 [DEBUG] [Thread-192753] [transport.py] [_log()] Compression: none
2026-02-14T21:51:06.411 [DEBUG] [Thread-192753] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:51:06.468 [DEBUG] [Thread-192753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:51:06.469 [DEBUG] [Thread-192753] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:51:06.470 [DEBUG] [Thread-192753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:51:06.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:51:06.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:51:06.525 [DEBUG] [Thread-192753] [transport.py] [_log()] userauth is OK
2026-02-14T21:51:06.525 [DEBUG] [Thread-192753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:51:06.525 [DEBUG] [Thread-192753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:51:06.525 [DEBUG] [Thread-192753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:51:06.525 [DEBUG] [Thread-192753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:51:06.543 [INFO] [Thread-192753] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:51:06.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-14T21:51:06.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:51:07.351 [DEBUG] [Thread-192753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:51:07.352 [DEBUG] [Thread-192753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:51:07.401 [DEBUG] [Thread-192753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:51:07.402 [DEBUG] [Thread-192753] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:51:07.414 [DEBUG] [Thread-192753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:51:07.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:51:07.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:51:07.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-14T21:51:07.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:51:07.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:51:07.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:51:07.451 [DEBUG] [Thread-192753] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:51:19.277 [DEBUG] [Thread-192755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:51:34.329 [DEBUG] [Thread-192756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:51:37.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:51:37.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:51:37.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T21:51:39.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 51, 20), 7.37, 60.23, 0.0, 30.81, 9.9, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:51:39.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:51:20
2026-02-14T21:51:39.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:51:39.781 [DEBUG] [Thread-192757] [transport.py] [_log()] starting thread (client mode): 0xa2d3f820
2026-02-14T21:51:39.781 [DEBUG] [Thread-192757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:51:39.801 [DEBUG] [Thread-192757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:51:39.801 [INFO] [Thread-192757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:51:39.805 [DEBUG] [Thread-192757] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:51:39.805 [DEBUG] [Thread-192757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:51:39.805 [DEBUG] [Thread-192757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:51:39.805 [DEBUG] [Thread-192757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:51:39.805 [DEBUG] [Thread-192757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:51:39.805 [DEBUG] [Thread-192757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:51:39.805 [DEBUG] [Thread-192757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:51:39.805 [DEBUG] [Thread-192757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:51:39.805 [DEBUG] [Thread-192757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:51:39.805 [DEBUG] [Thread-192757] [transport.py] [_log()] client lang: <none>
2026-02-14T21:51:39.805 [DEBUG] [Thread-192757] [transport.py] [_log()] server lang: <none>
2026-02-14T21:51:39.805 [DEBUG] [Thread-192757] [transport.py] [_log()] kex follows: False
2026-02-14T21:51:39.805 [DEBUG] [Thread-192757] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:51:39.806 [DEBUG] [Thread-192757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:51:39.806 [DEBUG] [Thread-192757] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:51:39.806 [DEBUG] [Thread-192757] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:51:39.806 [DEBUG] [Thread-192757] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:51:39.806 [DEBUG] [Thread-192757] [transport.py] [_log()] Compression: none
2026-02-14T21:51:39.806 [DEBUG] [Thread-192757] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:51:39.822 [DEBUG] [Thread-192757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:51:39.823 [DEBUG] [Thread-192757] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:51:39.823 [DEBUG] [Thread-192757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:51:39.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:51:39.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:51:39.825 [DEBUG] [Thread-192757] [transport.py] [_log()] userauth is OK
2026-02-14T21:51:39.825 [DEBUG] [Thread-192757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:51:39.825 [DEBUG] [Thread-192757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:51:39.826 [DEBUG] [Thread-192757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:51:39.826 [DEBUG] [Thread-192757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:51:39.843 [INFO] [Thread-192757] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:51:39.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:51:40.502 [DEBUG] [Thread-192757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:51:40.502 [DEBUG] [Thread-192757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:51:40.502 [DEBUG] [Thread-192757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:51:40.543 [DEBUG] [Thread-192757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:51:40.543 [DEBUG] [Thread-192757] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:51:40.545 [DEBUG] [Thread-192757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:51:40.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:51:40.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:51:40.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:51:40.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:51:40.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:51:40.567 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:51:40.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:51:40.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:51:40.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:51:40.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.827196 -999.00   +9.70  27.60     65   +3.50 1 1 1 1 1     0    0 5.91 -15.25 ZNESW 29.2 27.6 157.1 38.3 10.2 -25.0 10.1 -24.1 9.9 -23.1 10.2 -24.3
2026-02-14T21:51:40.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:51:40.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:51:40.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.827196
2026-02-14T21:51:40.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:51:40.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:51:40.570 [DEBUG] [Thread-192757] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:51:40.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:51:40.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:51:40.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:51:40.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:51:20', tmtdew=7.37, humidity=60.23, cloud=0.0, wind=30.81, temperature=9.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:51:20', seeing=5.12, atlas_timestamp='2026-02-14T19:51:09.734', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, -0.029249999999999332, -0.013749999999999929, -0.013000000000001677, 0.0235000000000003, -0.03974999999999973, -0.02400000000000091, -0.0007500000000000284, 0.0034999999999989484, -0.009999999999999787, -0.017250000000000654, -0.009000000000000341, 0.023999999999999133, 0.034250000000000114, -0.030000000000001137, 0.007999999999999119, 0.056250000000000355, 0.018499999999999517, -0.040000000000000924, -0.026250000000000995, 0.07349999999999923, 0.007749999999997925, 0.0012500000000006395, 0.003750000000000142, 0.03399999999999892, 0.03950000000000031, 0.027749999999999275, -0.014499999999999957, 0.061500000000000554, 0.0235000000000003, 0.008500000000001506, -0.0019999999999988916, 0.02474999999999916], zp_timestamp='2026-02-14T19:48:00')
2026-02-14T21:51:40.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-14T21:51:40.664 [DEBUG] [Thread-192760] [transport.py] [_log()] starting thread (client mode): 0xa57e0bb0
2026-02-14T21:51:40.665 [DEBUG] [Thread-192760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:51:40.681 [DEBUG] [Thread-192760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:51:40.681 [INFO] [Thread-192760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:51:40.688 [DEBUG] [Thread-192760] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:51:40.688 [DEBUG] [Thread-192760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:51:40.688 [DEBUG] [Thread-192760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:51:40.688 [DEBUG] [Thread-192760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:51:40.689 [DEBUG] [Thread-192760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:51:40.689 [DEBUG] [Thread-192760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:51:40.689 [DEBUG] [Thread-192760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:51:40.689 [DEBUG] [Thread-192760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:51:40.689 [DEBUG] [Thread-192760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:51:40.689 [DEBUG] [Thread-192760] [transport.py] [_log()] client lang: <none>
2026-02-14T21:51:40.689 [DEBUG] [Thread-192760] [transport.py] [_log()] server lang: <none>
2026-02-14T21:51:40.689 [DEBUG] [Thread-192760] [transport.py] [_log()] kex follows: False
2026-02-14T21:51:40.689 [DEBUG] [Thread-192760] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:51:40.689 [DEBUG] [Thread-192760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:51:40.689 [DEBUG] [Thread-192760] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:51:40.689 [DEBUG] [Thread-192760] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:51:40.689 [DEBUG] [Thread-192760] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:51:40.689 [DEBUG] [Thread-192760] [transport.py] [_log()] Compression: none
2026-02-14T21:51:40.689 [DEBUG] [Thread-192760] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:51:40.748 [DEBUG] [Thread-192760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:51:40.749 [DEBUG] [Thread-192760] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:51:40.749 [DEBUG] [Thread-192760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:51:40.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:51:40.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:51:40.782 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:51:40.804 [DEBUG] [Thread-192760] [transport.py] [_log()] userauth is OK
2026-02-14T21:51:40.804 [DEBUG] [Thread-192760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:51:40.805 [DEBUG] [Thread-192760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:51:40.805 [DEBUG] [Thread-192760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:51:40.805 [DEBUG] [Thread-192760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:51:40.825 [INFO] [Thread-192760] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:51:40.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-14T21:51:40.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:51:41.636 [DEBUG] [Thread-192760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:51:41.636 [DEBUG] [Thread-192760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:51:41.684 [DEBUG] [Thread-192760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:51:41.685 [DEBUG] [Thread-192760] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:51:41.694 [DEBUG] [Thread-192760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:51:41.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:51:41.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-14T21:51:41.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-14T21:51:41.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:51:41.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:51:41.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:51:41.731 [DEBUG] [Thread-192760] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:51:48.044 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:51:48.045 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:51:49.364 [DEBUG] [Thread-192762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:51:58.053 [DEBUG] [Thread-192763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:52:04.406 [DEBUG] [Thread-192764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:52:11.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:52:11.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:52:11.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-14T21:52:13.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 51, 55), 7.31, 60.25, 0.0, 40.14, 9.83, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:52:13.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:51:55
2026-02-14T21:52:13.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:52:14.015 [DEBUG] [Thread-192765] [transport.py] [_log()] starting thread (client mode): 0xa2d01300
2026-02-14T21:52:14.015 [DEBUG] [Thread-192765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:52:14.030 [DEBUG] [Thread-192765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:52:14.030 [INFO] [Thread-192765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:52:14.034 [DEBUG] [Thread-192765] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:52:14.034 [DEBUG] [Thread-192765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:52:14.034 [DEBUG] [Thread-192765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:52:14.034 [DEBUG] [Thread-192765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:52:14.034 [DEBUG] [Thread-192765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:52:14.034 [DEBUG] [Thread-192765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:52:14.034 [DEBUG] [Thread-192765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:52:14.034 [DEBUG] [Thread-192765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:52:14.034 [DEBUG] [Thread-192765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:52:14.034 [DEBUG] [Thread-192765] [transport.py] [_log()] client lang: <none>
2026-02-14T21:52:14.034 [DEBUG] [Thread-192765] [transport.py] [_log()] server lang: <none>
2026-02-14T21:52:14.034 [DEBUG] [Thread-192765] [transport.py] [_log()] kex follows: False
2026-02-14T21:52:14.034 [DEBUG] [Thread-192765] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:52:14.035 [DEBUG] [Thread-192765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:52:14.035 [DEBUG] [Thread-192765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:52:14.035 [DEBUG] [Thread-192765] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:52:14.035 [DEBUG] [Thread-192765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:52:14.035 [DEBUG] [Thread-192765] [transport.py] [_log()] Compression: none
2026-02-14T21:52:14.035 [DEBUG] [Thread-192765] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:52:14.052 [DEBUG] [Thread-192765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:52:14.052 [DEBUG] [Thread-192765] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:52:14.053 [DEBUG] [Thread-192765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:52:14.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:52:14.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:52:14.055 [DEBUG] [Thread-192765] [transport.py] [_log()] userauth is OK
2026-02-14T21:52:14.055 [DEBUG] [Thread-192765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:52:14.055 [DEBUG] [Thread-192765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:52:14.055 [DEBUG] [Thread-192765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:52:14.055 [DEBUG] [Thread-192765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:52:14.066 [INFO] [Thread-192765] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:52:14.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:52:14.721 [DEBUG] [Thread-192765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:52:14.722 [DEBUG] [Thread-192765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:52:14.722 [DEBUG] [Thread-192765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:52:14.762 [DEBUG] [Thread-192765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:52:14.762 [DEBUG] [Thread-192765] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:52:14.765 [DEBUG] [Thread-192765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:52:14.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:52:14.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:52:14.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:52:14.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:52:14.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:52:14.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:52:14.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:52:14.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:52:14.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:52:14.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.827543 -999.00   +9.70  28.78     65   +3.50 1 1 1 1 1     0    0 5.96 -16.01 ZNESW 31.3 28.8 159.8 46.3 10.2 -25.0 10.1 -24.0 9.9 -23.0 10.2 -24.2
2026-02-14T21:52:14.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:52:14.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:52:14.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.827543
2026-02-14T21:52:14.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:52:14.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:52:14.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:52:14.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:52:14.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:52:14.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:51:55', tmtdew=7.31, humidity=60.25, cloud=0.0, wind=40.14, temperature=9.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:51:56', seeing=3.86, atlas_timestamp='2026-02-14T19:51:39.715', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, -0.029249999999999332, -0.013749999999999929, -0.013000000000001677, 0.0235000000000003, -0.03974999999999973, -0.02400000000000091, -0.0007500000000000284, 0.0034999999999989484, -0.009999999999999787, -0.017250000000000654, -0.009000000000000341, 0.023999999999999133, 0.034250000000000114, -0.030000000000001137, 0.007999999999999119, 0.056250000000000355, 0.018499999999999517, -0.040000000000000924, -0.026250000000000995, 0.07349999999999923, 0.007749999999997925, 0.0012500000000006395, 0.003750000000000142, 0.03399999999999892, 0.03950000000000031, 0.027749999999999275, -0.014499999999999957, 0.061500000000000554, 0.0235000000000003, 0.008500000000001506, -0.0019999999999988916, 0.02474999999999916], zp_timestamp='2026-02-14T19:48:00')
2026-02-14T21:52:14.792 [DEBUG] [Thread-192765] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:52:14.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-14T21:52:14.888 [DEBUG] [Thread-192768] [transport.py] [_log()] starting thread (client mode): 0xa2d79780
2026-02-14T21:52:14.888 [DEBUG] [Thread-192768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:52:14.903 [DEBUG] [Thread-192768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:52:14.903 [INFO] [Thread-192768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:52:14.911 [DEBUG] [Thread-192768] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:52:14.911 [DEBUG] [Thread-192768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:52:14.911 [DEBUG] [Thread-192768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:52:14.911 [DEBUG] [Thread-192768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:52:14.912 [DEBUG] [Thread-192768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:52:14.912 [DEBUG] [Thread-192768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:52:14.912 [DEBUG] [Thread-192768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:52:14.912 [DEBUG] [Thread-192768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:52:14.912 [DEBUG] [Thread-192768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:52:14.912 [DEBUG] [Thread-192768] [transport.py] [_log()] client lang: <none>
2026-02-14T21:52:14.912 [DEBUG] [Thread-192768] [transport.py] [_log()] server lang: <none>
2026-02-14T21:52:14.912 [DEBUG] [Thread-192768] [transport.py] [_log()] kex follows: False
2026-02-14T21:52:14.912 [DEBUG] [Thread-192768] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:52:14.912 [DEBUG] [Thread-192768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:52:14.912 [DEBUG] [Thread-192768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:52:14.912 [DEBUG] [Thread-192768] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:52:14.912 [DEBUG] [Thread-192768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:52:14.912 [DEBUG] [Thread-192768] [transport.py] [_log()] Compression: none
2026-02-14T21:52:14.912 [DEBUG] [Thread-192768] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:52:14.969 [DEBUG] [Thread-192768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:52:14.970 [DEBUG] [Thread-192768] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:52:14.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:52:14.971 [DEBUG] [Thread-192768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:52:14.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:52:15.025 [DEBUG] [Thread-192768] [transport.py] [_log()] userauth is OK
2026-02-14T21:52:15.026 [DEBUG] [Thread-192768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:52:15.026 [DEBUG] [Thread-192768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:52:15.026 [DEBUG] [Thread-192768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:52:15.026 [DEBUG] [Thread-192768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:52:15.044 [INFO] [Thread-192768] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:52:15.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-14T21:52:15.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:52:15.838 [DEBUG] [Thread-192768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:52:15.838 [DEBUG] [Thread-192768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:52:15.887 [DEBUG] [Thread-192768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:52:15.887 [DEBUG] [Thread-192768] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:52:15.896 [DEBUG] [Thread-192768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:52:15.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:52:15.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:52:15.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:52:15.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:52:15.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:52:15.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:52:15.931 [DEBUG] [Thread-192768] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:52:19.444 [DEBUG] [Thread-192770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:52:34.497 [DEBUG] [Thread-192771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:52:45.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:52:45.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:52:45.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-14T21:52:48.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 52, 31), 7.31, 60.25, 0.0, 38.68, 9.83, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:52:48.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:52:31
2026-02-14T21:52:48.245 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:52:48.246 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:52:48.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:52:48.603 [DEBUG] [Thread-192772] [transport.py] [_log()] starting thread (client mode): 0xa57e2e30
2026-02-14T21:52:48.604 [DEBUG] [Thread-192772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:52:48.625 [DEBUG] [Thread-192772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:52:48.625 [INFO] [Thread-192772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:52:48.628 [DEBUG] [Thread-192772] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:52:48.629 [DEBUG] [Thread-192772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:52:48.629 [DEBUG] [Thread-192772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:52:48.629 [DEBUG] [Thread-192772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:52:48.629 [DEBUG] [Thread-192772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:52:48.629 [DEBUG] [Thread-192772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:52:48.629 [DEBUG] [Thread-192772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:52:48.629 [DEBUG] [Thread-192772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:52:48.629 [DEBUG] [Thread-192772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:52:48.629 [DEBUG] [Thread-192772] [transport.py] [_log()] client lang: <none>
2026-02-14T21:52:48.629 [DEBUG] [Thread-192772] [transport.py] [_log()] server lang: <none>
2026-02-14T21:52:48.629 [DEBUG] [Thread-192772] [transport.py] [_log()] kex follows: False
2026-02-14T21:52:48.629 [DEBUG] [Thread-192772] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:52:48.629 [DEBUG] [Thread-192772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:52:48.630 [DEBUG] [Thread-192772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:52:48.630 [DEBUG] [Thread-192772] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:52:48.630 [DEBUG] [Thread-192772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:52:48.630 [DEBUG] [Thread-192772] [transport.py] [_log()] Compression: none
2026-02-14T21:52:48.630 [DEBUG] [Thread-192772] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:52:48.649 [DEBUG] [Thread-192772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:52:48.649 [DEBUG] [Thread-192772] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:52:48.650 [DEBUG] [Thread-192772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:52:48.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:52:48.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:52:48.653 [DEBUG] [Thread-192772] [transport.py] [_log()] userauth is OK
2026-02-14T21:52:48.653 [DEBUG] [Thread-192772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:52:48.654 [DEBUG] [Thread-192772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:52:48.654 [DEBUG] [Thread-192772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:52:48.654 [DEBUG] [Thread-192772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:52:48.667 [INFO] [Thread-192772] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:52:48.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:52:49.316 [DEBUG] [Thread-192772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:52:49.317 [DEBUG] [Thread-192772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:52:49.317 [DEBUG] [Thread-192772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:52:49.357 [DEBUG] [Thread-192772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:52:49.358 [DEBUG] [Thread-192772] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:52:49.361 [DEBUG] [Thread-192772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:52:49.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:52:49.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:52:49.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:52:49.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:52:49.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:52:49.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:52:49.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:52:49.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:52:49.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:52:49.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.827890 -999.00   +9.70  27.54     65   +3.50 1 1 1 1 1     0    0 5.95 -15.20 ZNESW 25.9 27.5 170.2 38.4 10.2 -25.0 10.1 -24.1 9.9 -23.1 10.2 -24.0
2026-02-14T21:52:49.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:52:49.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:52:49.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.827890
2026-02-14T21:52:49.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:52:49.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:52:49.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:52:49.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:52:49.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:52:49.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:52:31', tmtdew=7.31, humidity=60.25, cloud=0.0, wind=38.68, temperature=9.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:52:33', seeing=4.29, atlas_timestamp='2026-02-14T19:52:09.696', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, -0.029249999999999332, -0.013749999999999929, -0.013000000000001677, 0.0235000000000003, -0.03974999999999973, -0.02400000000000091, -0.0007500000000000284, 0.0034999999999989484, -0.009999999999999787, -0.017250000000000654, -0.009000000000000341, 0.023999999999999133, 0.034250000000000114, -0.030000000000001137, 0.007999999999999119, 0.056250000000000355, 0.018499999999999517, -0.040000000000000924, -0.026250000000000995, 0.07349999999999923, 0.007749999999997925, 0.0012500000000006395, 0.003750000000000142, 0.03399999999999892, 0.03950000000000031, 0.027749999999999275, -0.014499999999999957, 0.061500000000000554, 0.0235000000000003, 0.008500000000001506, -0.0019999999999988916, 0.02474999999999916], zp_timestamp='2026-02-14T19:48:00')
2026-02-14T21:52:49.387 [DEBUG] [Thread-192772] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:52:49.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-14T21:52:49.483 [DEBUG] [Thread-192775] [transport.py] [_log()] starting thread (client mode): 0xa57e3880
2026-02-14T21:52:49.483 [DEBUG] [Thread-192775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:52:49.497 [DEBUG] [Thread-192775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:52:49.497 [INFO] [Thread-192775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:52:49.504 [DEBUG] [Thread-192775] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:52:49.505 [DEBUG] [Thread-192775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:52:49.505 [DEBUG] [Thread-192775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:52:49.505 [DEBUG] [Thread-192775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:52:49.505 [DEBUG] [Thread-192775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:52:49.505 [DEBUG] [Thread-192775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:52:49.505 [DEBUG] [Thread-192775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:52:49.505 [DEBUG] [Thread-192775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:52:49.505 [DEBUG] [Thread-192775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:52:49.505 [DEBUG] [Thread-192775] [transport.py] [_log()] client lang: <none>
2026-02-14T21:52:49.505 [DEBUG] [Thread-192775] [transport.py] [_log()] server lang: <none>
2026-02-14T21:52:49.505 [DEBUG] [Thread-192775] [transport.py] [_log()] kex follows: False
2026-02-14T21:52:49.505 [DEBUG] [Thread-192775] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:52:49.506 [DEBUG] [Thread-192775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:52:49.506 [DEBUG] [Thread-192775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:52:49.506 [DEBUG] [Thread-192775] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:52:49.506 [DEBUG] [Thread-192775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:52:49.506 [DEBUG] [Thread-192775] [transport.py] [_log()] Compression: none
2026-02-14T21:52:49.506 [DEBUG] [Thread-192775] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:52:49.533 [DEBUG] [Thread-192777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:52:49.565 [DEBUG] [Thread-192775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:52:49.565 [DEBUG] [Thread-192775] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:52:49.566 [DEBUG] [Thread-192775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:52:49.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:52:49.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:52:49.621 [DEBUG] [Thread-192775] [transport.py] [_log()] userauth is OK
2026-02-14T21:52:49.621 [DEBUG] [Thread-192775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:52:49.622 [DEBUG] [Thread-192775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:52:49.622 [DEBUG] [Thread-192775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:52:49.622 [DEBUG] [Thread-192775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:52:49.639 [INFO] [Thread-192775] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:52:49.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-14T21:52:49.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:52:50.437 [DEBUG] [Thread-192775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:52:50.437 [DEBUG] [Thread-192775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:52:50.485 [DEBUG] [Thread-192775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:52:50.485 [DEBUG] [Thread-192775] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:52:50.494 [DEBUG] [Thread-192775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:52:50.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:52:50.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-14T21:52:50.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-14T21:52:50.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:52:50.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:52:50.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:52:50.529 [DEBUG] [Thread-192775] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:52:58.109 [DEBUG] [Thread-192778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:53:04.581 [DEBUG] [Thread-192779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:53:14.959 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:53:19.607 [DEBUG] [Thread-192780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:53:20.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:53:20.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:53:20.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-14T21:53:22.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 53, 8), 7.3, 60.28, 0.0, 40.26, 9.82, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:53:22.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:53:08
2026-02-14T21:53:22.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:53:22.949 [DEBUG] [Thread-192781] [transport.py] [_log()] starting thread (client mode): 0xa5770640
2026-02-14T21:53:22.949 [DEBUG] [Thread-192781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:53:22.962 [DEBUG] [Thread-192781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:53:22.962 [INFO] [Thread-192781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:53:22.963 [DEBUG] [Thread-192781] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:53:22.963 [DEBUG] [Thread-192781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:53:22.964 [DEBUG] [Thread-192781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:53:22.964 [DEBUG] [Thread-192781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:53:22.964 [DEBUG] [Thread-192781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:53:22.964 [DEBUG] [Thread-192781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:53:22.964 [DEBUG] [Thread-192781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:53:22.964 [DEBUG] [Thread-192781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:53:22.964 [DEBUG] [Thread-192781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:53:22.964 [DEBUG] [Thread-192781] [transport.py] [_log()] client lang: <none>
2026-02-14T21:53:22.964 [DEBUG] [Thread-192781] [transport.py] [_log()] server lang: <none>
2026-02-14T21:53:22.964 [DEBUG] [Thread-192781] [transport.py] [_log()] kex follows: False
2026-02-14T21:53:22.964 [DEBUG] [Thread-192781] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:53:22.965 [DEBUG] [Thread-192781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:53:22.965 [DEBUG] [Thread-192781] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:53:22.965 [DEBUG] [Thread-192781] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:53:22.965 [DEBUG] [Thread-192781] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:53:22.965 [DEBUG] [Thread-192781] [transport.py] [_log()] Compression: none
2026-02-14T21:53:22.965 [DEBUG] [Thread-192781] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:53:22.984 [DEBUG] [Thread-192781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:53:22.987 [DEBUG] [Thread-192781] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:53:22.988 [DEBUG] [Thread-192781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:53:22.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:53:22.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:53:22.992 [DEBUG] [Thread-192781] [transport.py] [_log()] userauth is OK
2026-02-14T21:53:22.992 [DEBUG] [Thread-192781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:53:22.992 [DEBUG] [Thread-192781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:53:22.993 [DEBUG] [Thread-192781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:53:22.993 [DEBUG] [Thread-192781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:53:23.017 [INFO] [Thread-192781] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:53:23.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:53:23.628 [DEBUG] [Thread-192781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:53:23.629 [DEBUG] [Thread-192781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:53:23.629 [DEBUG] [Thread-192781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:53:23.670 [DEBUG] [Thread-192781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:53:23.670 [DEBUG] [Thread-192781] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:53:23.672 [DEBUG] [Thread-192781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:53:23.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:53:23.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:53:23.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:53:23.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:53:23.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:53:23.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:53:23.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:53:23.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:53:23.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:53:23.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.828238 -999.00   +9.70  22.51     65   +3.50 1 1 1 1 1     0    0 6.00 -14.41 ZNESW 32.0 22.5 150.3 37.5 10.2 -25.0 10.0 -24.0 9.8 -22.9 10.2 -24.3
2026-02-14T21:53:23.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:53:23.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:53:23.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.828238
2026-02-14T21:53:23.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:53:23.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:53:23.702 [DEBUG] [Thread-192781] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:53:23.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:53:23.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:53:23.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:53:23.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:53:08', tmtdew=7.3, humidity=60.28, cloud=0.0, wind=40.26, temperature=9.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:53:09', seeing=4.12, atlas_timestamp='2026-02-14T19:52:39.763', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, -0.029249999999999332, -0.013749999999999929, -0.013000000000001677, 0.0235000000000003, -0.03974999999999973, -0.02400000000000091, -0.0007500000000000284, 0.0034999999999989484, -0.009999999999999787, -0.017250000000000654, -0.009000000000000341, 0.023999999999999133, 0.034250000000000114, -0.030000000000001137, 0.007999999999999119, 0.056250000000000355, 0.018499999999999517, -0.040000000000000924, -0.026250000000000995, 0.07349999999999923, 0.007749999999997925, 0.0012500000000006395, 0.003750000000000142, 0.03399999999999892, 0.03950000000000031, 0.027749999999999275, -0.014499999999999957, 0.061500000000000554, 0.0235000000000003, 0.008500000000001506, -0.0019999999999988916, 0.02474999999999916], zp_timestamp='2026-02-14T19:51:00')
2026-02-14T21:53:23.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-14T21:53:23.793 [DEBUG] [Thread-192784] [transport.py] [_log()] starting thread (client mode): 0xa2d01540
2026-02-14T21:53:23.793 [DEBUG] [Thread-192784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:53:23.811 [DEBUG] [Thread-192784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:53:23.811 [INFO] [Thread-192784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:53:23.819 [DEBUG] [Thread-192784] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:53:23.819 [DEBUG] [Thread-192784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:53:23.819 [DEBUG] [Thread-192784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:53:23.819 [DEBUG] [Thread-192784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:53:23.819 [DEBUG] [Thread-192784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:53:23.819 [DEBUG] [Thread-192784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:53:23.819 [DEBUG] [Thread-192784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:53:23.819 [DEBUG] [Thread-192784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:53:23.819 [DEBUG] [Thread-192784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:53:23.819 [DEBUG] [Thread-192784] [transport.py] [_log()] client lang: <none>
2026-02-14T21:53:23.819 [DEBUG] [Thread-192784] [transport.py] [_log()] server lang: <none>
2026-02-14T21:53:23.819 [DEBUG] [Thread-192784] [transport.py] [_log()] kex follows: False
2026-02-14T21:53:23.819 [DEBUG] [Thread-192784] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:53:23.819 [DEBUG] [Thread-192784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:53:23.819 [DEBUG] [Thread-192784] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:53:23.820 [DEBUG] [Thread-192784] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:53:23.820 [DEBUG] [Thread-192784] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:53:23.820 [DEBUG] [Thread-192784] [transport.py] [_log()] Compression: none
2026-02-14T21:53:23.820 [DEBUG] [Thread-192784] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:53:23.876 [DEBUG] [Thread-192784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:53:23.877 [DEBUG] [Thread-192784] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:53:23.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:53:23.877 [DEBUG] [Thread-192784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:53:23.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:53:23.936 [DEBUG] [Thread-192784] [transport.py] [_log()] userauth is OK
2026-02-14T21:53:23.936 [DEBUG] [Thread-192784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:53:23.936 [DEBUG] [Thread-192784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:53:23.936 [DEBUG] [Thread-192784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:53:23.936 [DEBUG] [Thread-192784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:53:23.952 [INFO] [Thread-192784] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:53:23.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-14T21:53:23.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:53:24.738 [DEBUG] [Thread-192784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:53:24.738 [DEBUG] [Thread-192784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:53:24.786 [DEBUG] [Thread-192784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:53:24.786 [DEBUG] [Thread-192784] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:53:24.794 [DEBUG] [Thread-192784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:53:24.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:53:24.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-14T21:53:24.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-14T21:53:24.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:53:24.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:53:24.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:53:24.827 [DEBUG] [Thread-192784] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:53:34.643 [DEBUG] [Thread-192786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:53:48.447 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:53:48.449 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:53:49.746 [DEBUG] [Thread-192787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:53:54.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:53:54.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:53:54.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-14T21:53:56.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 53, 44), 7.3, 60.32, 0.0, 39.77, 9.87, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:53:56.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:53:44
2026-02-14T21:53:57.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:53:57.324 [DEBUG] [Thread-192788] [transport.py] [_log()] starting thread (client mode): 0xa57739d0
2026-02-14T21:53:57.324 [DEBUG] [Thread-192788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:53:57.340 [DEBUG] [Thread-192788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:53:57.340 [INFO] [Thread-192788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:53:57.343 [DEBUG] [Thread-192788] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:53:57.343 [DEBUG] [Thread-192788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:53:57.343 [DEBUG] [Thread-192788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:53:57.343 [DEBUG] [Thread-192788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:53:57.343 [DEBUG] [Thread-192788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:53:57.343 [DEBUG] [Thread-192788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:53:57.343 [DEBUG] [Thread-192788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:53:57.343 [DEBUG] [Thread-192788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:53:57.343 [DEBUG] [Thread-192788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:53:57.343 [DEBUG] [Thread-192788] [transport.py] [_log()] client lang: <none>
2026-02-14T21:53:57.343 [DEBUG] [Thread-192788] [transport.py] [_log()] server lang: <none>
2026-02-14T21:53:57.343 [DEBUG] [Thread-192788] [transport.py] [_log()] kex follows: False
2026-02-14T21:53:57.343 [DEBUG] [Thread-192788] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:53:57.343 [DEBUG] [Thread-192788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:53:57.344 [DEBUG] [Thread-192788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:53:57.344 [DEBUG] [Thread-192788] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:53:57.344 [DEBUG] [Thread-192788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:53:57.344 [DEBUG] [Thread-192788] [transport.py] [_log()] Compression: none
2026-02-14T21:53:57.344 [DEBUG] [Thread-192788] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:53:57.365 [DEBUG] [Thread-192788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:53:57.367 [DEBUG] [Thread-192788] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:53:57.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:53:57.367 [DEBUG] [Thread-192788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:53:57.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:53:57.409 [DEBUG] [Thread-192788] [transport.py] [_log()] userauth is OK
2026-02-14T21:53:57.409 [DEBUG] [Thread-192788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:53:57.409 [DEBUG] [Thread-192788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:53:57.410 [DEBUG] [Thread-192788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:53:57.410 [DEBUG] [Thread-192788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:53:57.429 [INFO] [Thread-192788] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:53:57.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:53:58.051 [DEBUG] [Thread-192788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:53:58.051 [DEBUG] [Thread-192788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:53:58.052 [DEBUG] [Thread-192788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:53:58.092 [DEBUG] [Thread-192788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:53:58.092 [DEBUG] [Thread-192788] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:53:58.094 [DEBUG] [Thread-192788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:53:58.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:53:58.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:53:58.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:53:58.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:53:58.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:53:58.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:53:58.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:53:58.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:53:58.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:53:58.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.828932 -999.00   +9.70  23.87     65   +3.50 1 1 1 1 1     0    0 5.91 -16.01 ZNESW 22.6 23.9 149.8 31.2 10.2 -25.0 10.0 -24.0 9.8 -22.9 10.2 -24.1
2026-02-14T21:53:58.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:53:58.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:53:58.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.828932
2026-02-14T21:53:58.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:53:58.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:53:58.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:53:58.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:53:58.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:53:58.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:53:44', tmtdew=7.3, humidity=60.32, cloud=0.0, wind=39.77, temperature=9.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:53:44', seeing=4.22, atlas_timestamp='2026-02-14T19:53:39.725', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, -0.029249999999999332, -0.013749999999999929, -0.013000000000001677, 0.0235000000000003, -0.03974999999999973, -0.02400000000000091, -0.0007500000000000284, 0.0034999999999989484, -0.009999999999999787, -0.017250000000000654, -0.009000000000000341, 0.023999999999999133, 0.034250000000000114, -0.030000000000001137, 0.007999999999999119, 0.056250000000000355, 0.018499999999999517, -0.040000000000000924, -0.026250000000000995, 0.07349999999999923, 0.007749999999997925, 0.0012500000000006395, 0.003750000000000142, 0.03399999999999892, 0.03950000000000031, 0.027749999999999275, -0.014499999999999957, 0.061500000000000554, 0.0235000000000003, 0.008500000000001506, -0.0019999999999988916, 0.02474999999999916], zp_timestamp='2026-02-14T19:51:00')
2026-02-14T21:53:58.121 [DEBUG] [Thread-192788] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:53:58.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-14T21:53:58.209 [DEBUG] [Thread-192791] [transport.py] [_log()] starting thread (client mode): 0xa2d12320
2026-02-14T21:53:58.209 [DEBUG] [Thread-192791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:53:58.223 [DEBUG] [Thread-192791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:53:58.224 [INFO] [Thread-192791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:53:58.231 [DEBUG] [Thread-192791] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:53:58.231 [DEBUG] [Thread-192791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:53:58.231 [DEBUG] [Thread-192791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:53:58.231 [DEBUG] [Thread-192791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:53:58.231 [DEBUG] [Thread-192791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:53:58.231 [DEBUG] [Thread-192791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:53:58.231 [DEBUG] [Thread-192791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:53:58.231 [DEBUG] [Thread-192791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:53:58.231 [DEBUG] [Thread-192791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:53:58.232 [DEBUG] [Thread-192791] [transport.py] [_log()] client lang: <none>
2026-02-14T21:53:58.232 [DEBUG] [Thread-192791] [transport.py] [_log()] server lang: <none>
2026-02-14T21:53:58.232 [DEBUG] [Thread-192791] [transport.py] [_log()] kex follows: False
2026-02-14T21:53:58.232 [DEBUG] [Thread-192791] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:53:58.232 [DEBUG] [Thread-192791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:53:58.232 [DEBUG] [Thread-192791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:53:58.232 [DEBUG] [Thread-192791] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:53:58.232 [DEBUG] [Thread-192791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:53:58.232 [DEBUG] [Thread-192791] [transport.py] [_log()] Compression: none
2026-02-14T21:53:58.232 [DEBUG] [Thread-192791] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:53:58.287 [DEBUG] [Thread-192791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:53:58.288 [DEBUG] [Thread-192791] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:53:58.288 [DEBUG] [Thread-192791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:53:58.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:53:58.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:53:58.345 [DEBUG] [Thread-192791] [transport.py] [_log()] userauth is OK
2026-02-14T21:53:58.345 [DEBUG] [Thread-192791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:53:58.345 [DEBUG] [Thread-192791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:53:58.345 [DEBUG] [Thread-192791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:53:58.345 [DEBUG] [Thread-192791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:53:58.356 [DEBUG] [Thread-192793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:53:58.363 [INFO] [Thread-192791] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:53:58.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-14T21:53:58.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:53:59.202 [DEBUG] [Thread-192791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:53:59.204 [DEBUG] [Thread-192791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:53:59.250 [DEBUG] [Thread-192791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:53:59.250 [DEBUG] [Thread-192791] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:53:59.258 [DEBUG] [Thread-192791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:53:59.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:53:59.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:53:59.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-14T21:53:59.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:53:59.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:53:59.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:53:59.291 [DEBUG] [Thread-192791] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:54:04.770 [DEBUG] [Thread-192794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:54:19.834 [DEBUG] [Thread-192795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:54:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:54:29.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:54:29.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-14T21:54:31.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 54, 19), 7.3, 60.32, 0.0, 35.73, 9.83, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:54:31.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:54:19
2026-02-14T21:54:31.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:54:31.981 [DEBUG] [Thread-192796] [transport.py] [_log()] starting thread (client mode): 0xa2d3ef80
2026-02-14T21:54:31.982 [DEBUG] [Thread-192796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:54:31.997 [DEBUG] [Thread-192796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:54:31.997 [INFO] [Thread-192796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:54:32.001 [DEBUG] [Thread-192796] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:54:32.001 [DEBUG] [Thread-192796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:54:32.001 [DEBUG] [Thread-192796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:54:32.001 [DEBUG] [Thread-192796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:54:32.001 [DEBUG] [Thread-192796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:54:32.001 [DEBUG] [Thread-192796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:54:32.001 [DEBUG] [Thread-192796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:54:32.001 [DEBUG] [Thread-192796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:54:32.001 [DEBUG] [Thread-192796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:54:32.001 [DEBUG] [Thread-192796] [transport.py] [_log()] client lang: <none>
2026-02-14T21:54:32.001 [DEBUG] [Thread-192796] [transport.py] [_log()] server lang: <none>
2026-02-14T21:54:32.001 [DEBUG] [Thread-192796] [transport.py] [_log()] kex follows: False
2026-02-14T21:54:32.001 [DEBUG] [Thread-192796] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:54:32.002 [DEBUG] [Thread-192796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:54:32.002 [DEBUG] [Thread-192796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:54:32.002 [DEBUG] [Thread-192796] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:54:32.002 [DEBUG] [Thread-192796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:54:32.003 [DEBUG] [Thread-192796] [transport.py] [_log()] Compression: none
2026-02-14T21:54:32.003 [DEBUG] [Thread-192796] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:54:32.038 [DEBUG] [Thread-192796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:54:32.041 [DEBUG] [Thread-192796] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:54:32.042 [DEBUG] [Thread-192796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:54:32.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:54:32.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:54:32.046 [DEBUG] [Thread-192796] [transport.py] [_log()] userauth is OK
2026-02-14T21:54:32.046 [DEBUG] [Thread-192796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:54:32.046 [DEBUG] [Thread-192796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:54:32.046 [DEBUG] [Thread-192796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:54:32.046 [DEBUG] [Thread-192796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:54:32.083 [INFO] [Thread-192796] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:54:32.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:54:32.722 [DEBUG] [Thread-192796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:54:32.722 [DEBUG] [Thread-192796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:54:32.723 [DEBUG] [Thread-192796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:54:32.763 [DEBUG] [Thread-192796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:54:32.763 [DEBUG] [Thread-192796] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:54:32.765 [DEBUG] [Thread-192796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:54:32.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:54:32.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:54:32.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:54:32.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:54:32.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:54:32.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:54:32.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:54:32.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:54:32.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:54:32.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.829279 -999.00   +9.70  31.92     65   +3.50 1 1 2 1 1     0    0 5.91 -15.91 ZNESW 28.0 31.9 167.6 34.8 10.2 -25.0 10.0 -24.0 9.8 -23.0 10.2 -24.3
2026-02-14T21:54:32.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:54:32.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:54:32.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.829279
2026-02-14T21:54:32.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:54:32.805 [DEBUG] [Thread-192796] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:54:32.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:54:32.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:54:32.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:54:32.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:54:32.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:54:19', tmtdew=7.3, humidity=60.32, cloud=0.0, wind=35.73, temperature=9.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:54:21', seeing=4.5, atlas_timestamp='2026-02-14T19:54:09.706', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, -0.029249999999999332, -0.013749999999999929, -0.013000000000001677, 0.0235000000000003, -0.03974999999999973, -0.02400000000000091, -0.0007500000000000284, 0.0034999999999989484, -0.009999999999999787, -0.017250000000000654, -0.009000000000000341, 0.023999999999999133, 0.034250000000000114, -0.030000000000001137, 0.007999999999999119, 0.056250000000000355, 0.018499999999999517, -0.040000000000000924, -0.026250000000000995, 0.07349999999999923, 0.007749999999997925, 0.0012500000000006395, 0.003750000000000142, 0.03399999999999892, 0.03950000000000031, 0.027749999999999275, -0.014499999999999957, 0.061500000000000554, 0.0235000000000003, 0.008500000000001506, -0.0019999999999988916, 0.02474999999999916], zp_timestamp='2026-02-14T19:51:00')
2026-02-14T21:54:32.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T21:54:32.899 [DEBUG] [Thread-192799] [transport.py] [_log()] starting thread (client mode): 0xa2d6d9f0
2026-02-14T21:54:32.899 [DEBUG] [Thread-192799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:54:32.914 [DEBUG] [Thread-192799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:54:32.914 [INFO] [Thread-192799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:54:32.922 [DEBUG] [Thread-192799] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:54:32.922 [DEBUG] [Thread-192799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:54:32.922 [DEBUG] [Thread-192799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:54:32.922 [DEBUG] [Thread-192799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:54:32.922 [DEBUG] [Thread-192799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:54:32.922 [DEBUG] [Thread-192799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:54:32.922 [DEBUG] [Thread-192799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:54:32.922 [DEBUG] [Thread-192799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:54:32.922 [DEBUG] [Thread-192799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:54:32.922 [DEBUG] [Thread-192799] [transport.py] [_log()] client lang: <none>
2026-02-14T21:54:32.922 [DEBUG] [Thread-192799] [transport.py] [_log()] server lang: <none>
2026-02-14T21:54:32.922 [DEBUG] [Thread-192799] [transport.py] [_log()] kex follows: False
2026-02-14T21:54:32.922 [DEBUG] [Thread-192799] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:54:32.922 [DEBUG] [Thread-192799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:54:32.922 [DEBUG] [Thread-192799] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:54:32.922 [DEBUG] [Thread-192799] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:54:32.922 [DEBUG] [Thread-192799] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:54:32.922 [DEBUG] [Thread-192799] [transport.py] [_log()] Compression: none
2026-02-14T21:54:32.922 [DEBUG] [Thread-192799] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:54:32.980 [DEBUG] [Thread-192799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:54:32.980 [DEBUG] [Thread-192799] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:54:32.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:54:32.981 [DEBUG] [Thread-192799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:54:32.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:54:33.037 [DEBUG] [Thread-192799] [transport.py] [_log()] userauth is OK
2026-02-14T21:54:33.037 [DEBUG] [Thread-192799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:54:33.037 [DEBUG] [Thread-192799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:54:33.037 [DEBUG] [Thread-192799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:54:33.037 [DEBUG] [Thread-192799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:54:33.056 [INFO] [Thread-192799] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:54:33.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T21:54:33.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:54:33.847 [DEBUG] [Thread-192799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:54:33.848 [DEBUG] [Thread-192799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:54:33.895 [DEBUG] [Thread-192799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:54:33.895 [DEBUG] [Thread-192799] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:54:33.903 [DEBUG] [Thread-192799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:54:33.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:54:33.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:54:33.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-14T21:54:33.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:54:33.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:54:33.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:54:33.940 [DEBUG] [Thread-192799] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:54:34.861 [DEBUG] [Thread-192801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:54:48.582 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:54:48.651 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:54:48.653 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:54:49.926 [DEBUG] [Thread-192802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:54:58.640 [DEBUG] [Thread-192803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:55:03.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:55:03.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:55:03.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T21:55:04.953 [DEBUG] [Thread-192804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:55:05.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 54, 56), 7.3, 60.27, 0.0, 35.29, 9.77, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:55:05.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:54:56
2026-02-14T21:55:06.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:55:06.560 [DEBUG] [Thread-192805] [transport.py] [_log()] starting thread (client mode): 0xa5741180
2026-02-14T21:55:06.560 [DEBUG] [Thread-192805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:55:06.580 [DEBUG] [Thread-192805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:55:06.580 [INFO] [Thread-192805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:55:06.583 [DEBUG] [Thread-192805] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:55:06.583 [DEBUG] [Thread-192805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:55:06.583 [DEBUG] [Thread-192805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:55:06.584 [DEBUG] [Thread-192805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:55:06.584 [DEBUG] [Thread-192805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:55:06.584 [DEBUG] [Thread-192805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:55:06.584 [DEBUG] [Thread-192805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:55:06.584 [DEBUG] [Thread-192805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:55:06.584 [DEBUG] [Thread-192805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:55:06.584 [DEBUG] [Thread-192805] [transport.py] [_log()] client lang: <none>
2026-02-14T21:55:06.584 [DEBUG] [Thread-192805] [transport.py] [_log()] server lang: <none>
2026-02-14T21:55:06.584 [DEBUG] [Thread-192805] [transport.py] [_log()] kex follows: False
2026-02-14T21:55:06.584 [DEBUG] [Thread-192805] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:55:06.584 [DEBUG] [Thread-192805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:55:06.584 [DEBUG] [Thread-192805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:55:06.584 [DEBUG] [Thread-192805] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:55:06.584 [DEBUG] [Thread-192805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:55:06.584 [DEBUG] [Thread-192805] [transport.py] [_log()] Compression: none
2026-02-14T21:55:06.584 [DEBUG] [Thread-192805] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:55:06.604 [DEBUG] [Thread-192805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:55:06.604 [DEBUG] [Thread-192805] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:55:06.605 [DEBUG] [Thread-192805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:55:06.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:55:06.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:55:06.606 [DEBUG] [Thread-192805] [transport.py] [_log()] userauth is OK
2026-02-14T21:55:06.606 [DEBUG] [Thread-192805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:55:06.606 [DEBUG] [Thread-192805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:55:06.606 [DEBUG] [Thread-192805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:55:06.606 [DEBUG] [Thread-192805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:55:06.625 [INFO] [Thread-192805] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:55:06.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:55:09.513 [DEBUG] [Thread-192805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:55:09.514 [DEBUG] [Thread-192805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:55:09.514 [DEBUG] [Thread-192805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:55:09.554 [DEBUG] [Thread-192805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:55:09.554 [DEBUG] [Thread-192805] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:55:09.557 [DEBUG] [Thread-192805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:55:09.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:55:09.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:55:09.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:55:09.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:55:09.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:55:09.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:55:09.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:55:09.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:55:09.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:55:09.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.829626 -999.00   +9.70  28.05     65   +3.50 1 1 1 1 1     0    0 5.86 -14.96 ZNESW 30.4 28.1 159.4 42.7 10.2 -25.0 10.0 -23.8 9.8 -23.0 10.2 -24.1
2026-02-14T21:55:09.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:55:09.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:55:09.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.829626
2026-02-14T21:55:09.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:55:09.646 [DEBUG] [Thread-192805] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:55:09.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:55:09.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:55:09.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:55:09.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:55:09.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:54:56', tmtdew=7.3, humidity=60.27, cloud=0.0, wind=35.29, temperature=9.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:54:56', seeing=4.5, atlas_timestamp='2026-02-14T19:54:39.686', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, -0.029249999999999332, -0.013749999999999929, -0.013000000000001677, 0.0235000000000003, -0.03974999999999973, -0.02400000000000091, -0.0007500000000000284, 0.0034999999999989484, -0.009999999999999787, -0.017250000000000654, -0.009000000000000341, 0.023999999999999133, 0.034250000000000114, -0.030000000000001137, 0.007999999999999119, 0.056250000000000355, 0.018499999999999517, -0.040000000000000924, -0.026250000000000995, 0.07349999999999923, 0.007749999999997925, 0.0012500000000006395, 0.003750000000000142, 0.03399999999999892, 0.03950000000000031, 0.027749999999999275, -0.014499999999999957, 0.061500000000000554, 0.0235000000000003, 0.008500000000001506, -0.0019999999999988916, 0.02474999999999916], zp_timestamp='2026-02-14T19:51:00')
2026-02-14T21:55:09.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-14T21:55:09.742 [DEBUG] [Thread-192808] [transport.py] [_log()] starting thread (client mode): 0xa57c29e0
2026-02-14T21:55:09.742 [DEBUG] [Thread-192808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:55:09.757 [DEBUG] [Thread-192808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:55:09.757 [INFO] [Thread-192808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:55:09.765 [DEBUG] [Thread-192808] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:55:09.765 [DEBUG] [Thread-192808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:55:09.765 [DEBUG] [Thread-192808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:55:09.765 [DEBUG] [Thread-192808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:55:09.765 [DEBUG] [Thread-192808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:55:09.765 [DEBUG] [Thread-192808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:55:09.765 [DEBUG] [Thread-192808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:55:09.765 [DEBUG] [Thread-192808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:55:09.766 [DEBUG] [Thread-192808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:55:09.766 [DEBUG] [Thread-192808] [transport.py] [_log()] client lang: <none>
2026-02-14T21:55:09.766 [DEBUG] [Thread-192808] [transport.py] [_log()] server lang: <none>
2026-02-14T21:55:09.766 [DEBUG] [Thread-192808] [transport.py] [_log()] kex follows: False
2026-02-14T21:55:09.766 [DEBUG] [Thread-192808] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:55:09.766 [DEBUG] [Thread-192808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:55:09.766 [DEBUG] [Thread-192808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:55:09.766 [DEBUG] [Thread-192808] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:55:09.766 [DEBUG] [Thread-192808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:55:09.766 [DEBUG] [Thread-192808] [transport.py] [_log()] Compression: none
2026-02-14T21:55:09.766 [DEBUG] [Thread-192808] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:55:09.824 [DEBUG] [Thread-192808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:55:09.824 [DEBUG] [Thread-192808] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:55:09.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:55:09.824 [DEBUG] [Thread-192808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:55:09.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:55:09.880 [DEBUG] [Thread-192808] [transport.py] [_log()] userauth is OK
2026-02-14T21:55:09.881 [DEBUG] [Thread-192808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:55:09.881 [DEBUG] [Thread-192808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:55:09.881 [DEBUG] [Thread-192808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:55:09.881 [DEBUG] [Thread-192808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:55:09.895 [INFO] [Thread-192808] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:55:09.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T21:55:09.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:55:10.718 [DEBUG] [Thread-192808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:55:10.718 [DEBUG] [Thread-192808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:55:10.766 [DEBUG] [Thread-192808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:55:10.766 [DEBUG] [Thread-192808] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:55:10.774 [DEBUG] [Thread-192808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:55:10.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:55:10.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-14T21:55:10.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-14T21:55:10.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:55:10.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:55:10.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:55:10.809 [DEBUG] [Thread-192808] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:55:19.983 [DEBUG] [Thread-192810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:55:35.080 [DEBUG] [Thread-192811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:55:40.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:55:40.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:55:40.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-14T21:55:42.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 55, 31), 7.28, 60.4, 0.0, 37.74, 9.8, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:55:42.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:55:31
2026-02-14T21:55:43.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:55:43.248 [DEBUG] [Thread-192812] [transport.py] [_log()] starting thread (client mode): 0xa2d11000
2026-02-14T21:55:43.249 [DEBUG] [Thread-192812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:55:43.262 [DEBUG] [Thread-192812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:55:43.262 [INFO] [Thread-192812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:55:43.267 [DEBUG] [Thread-192812] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:55:43.267 [DEBUG] [Thread-192812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:55:43.267 [DEBUG] [Thread-192812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:55:43.267 [DEBUG] [Thread-192812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:55:43.267 [DEBUG] [Thread-192812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:55:43.267 [DEBUG] [Thread-192812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:55:43.267 [DEBUG] [Thread-192812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:55:43.267 [DEBUG] [Thread-192812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:55:43.267 [DEBUG] [Thread-192812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:55:43.267 [DEBUG] [Thread-192812] [transport.py] [_log()] client lang: <none>
2026-02-14T21:55:43.267 [DEBUG] [Thread-192812] [transport.py] [_log()] server lang: <none>
2026-02-14T21:55:43.267 [DEBUG] [Thread-192812] [transport.py] [_log()] kex follows: False
2026-02-14T21:55:43.267 [DEBUG] [Thread-192812] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:55:43.268 [DEBUG] [Thread-192812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:55:43.268 [DEBUG] [Thread-192812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:55:43.268 [DEBUG] [Thread-192812] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:55:43.268 [DEBUG] [Thread-192812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:55:43.268 [DEBUG] [Thread-192812] [transport.py] [_log()] Compression: none
2026-02-14T21:55:43.268 [DEBUG] [Thread-192812] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:55:43.303 [DEBUG] [Thread-192812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:55:43.308 [DEBUG] [Thread-192812] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:55:43.311 [DEBUG] [Thread-192812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:55:43.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:55:43.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:55:43.315 [DEBUG] [Thread-192812] [transport.py] [_log()] userauth is OK
2026-02-14T21:55:43.316 [DEBUG] [Thread-192812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:55:43.316 [DEBUG] [Thread-192812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:55:43.316 [DEBUG] [Thread-192812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:55:43.316 [DEBUG] [Thread-192812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:55:43.342 [INFO] [Thread-192812] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:55:43.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:55:43.956 [DEBUG] [Thread-192812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:55:43.956 [DEBUG] [Thread-192812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:55:43.958 [DEBUG] [Thread-192812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:55:43.997 [DEBUG] [Thread-192812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:55:43.997 [DEBUG] [Thread-192812] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:55:44.000 [DEBUG] [Thread-192812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:55:44.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:55:44.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:55:44.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:55:44.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:55:44.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:55:44.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:55:44.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:55:44.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:55:44.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:55:44.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.829974 -999.00   +9.70  31.33     65   +3.50 1 1 2 1 1     0    0 5.84 -15.00 ZNESW 32.0 31.3 161.0 42.5 10.2 -25.0 10.0 -23.9 9.8 -23.0 10.2 -24.1
2026-02-14T21:55:44.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:55:44.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:55:44.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.829974
2026-02-14T21:55:44.033 [DEBUG] [Thread-192812] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:55:44.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:55:44.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:55:44.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:55:44.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:55:44.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:55:44.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:55:31', tmtdew=7.28, humidity=60.4, cloud=0.0, wind=37.74, temperature=9.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:55:32', seeing=3.31, atlas_timestamp='2026-02-14T19:55:09.754', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, -0.029249999999999332, -0.013749999999999929, -0.013000000000001677, 0.0235000000000003, -0.03974999999999973, -0.02400000000000091, -0.0007500000000000284, 0.0034999999999989484, -0.009999999999999787, -0.017250000000000654, -0.009000000000000341, 0.023999999999999133, 0.034250000000000114, -0.030000000000001137, 0.007999999999999119, 0.056250000000000355, 0.018499999999999517, -0.040000000000000924, -0.026250000000000995, 0.07349999999999923, 0.007749999999997925, 0.0012500000000006395, 0.003750000000000142, 0.03399999999999892, 0.03950000000000031, 0.027749999999999275, -0.014499999999999957, 0.061500000000000554, 0.0235000000000003, 0.008500000000001506, -0.0019999999999988916, 0.02474999999999916], zp_timestamp='2026-02-14T19:51:00')
2026-02-14T21:55:44.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-14T21:55:44.154 [DEBUG] [Thread-192815] [transport.py] [_log()] starting thread (client mode): 0xa2d6ed70
2026-02-14T21:55:44.154 [DEBUG] [Thread-192815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:55:44.169 [DEBUG] [Thread-192815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:55:44.169 [INFO] [Thread-192815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:55:44.177 [DEBUG] [Thread-192815] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:55:44.177 [DEBUG] [Thread-192815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:55:44.177 [DEBUG] [Thread-192815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:55:44.177 [DEBUG] [Thread-192815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:55:44.177 [DEBUG] [Thread-192815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:55:44.177 [DEBUG] [Thread-192815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:55:44.177 [DEBUG] [Thread-192815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:55:44.177 [DEBUG] [Thread-192815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:55:44.177 [DEBUG] [Thread-192815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:55:44.177 [DEBUG] [Thread-192815] [transport.py] [_log()] client lang: <none>
2026-02-14T21:55:44.177 [DEBUG] [Thread-192815] [transport.py] [_log()] server lang: <none>
2026-02-14T21:55:44.177 [DEBUG] [Thread-192815] [transport.py] [_log()] kex follows: False
2026-02-14T21:55:44.177 [DEBUG] [Thread-192815] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:55:44.177 [DEBUG] [Thread-192815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:55:44.177 [DEBUG] [Thread-192815] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:55:44.177 [DEBUG] [Thread-192815] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:55:44.177 [DEBUG] [Thread-192815] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:55:44.177 [DEBUG] [Thread-192815] [transport.py] [_log()] Compression: none
2026-02-14T21:55:44.177 [DEBUG] [Thread-192815] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:55:44.233 [DEBUG] [Thread-192815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:55:44.233 [DEBUG] [Thread-192815] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:55:44.234 [DEBUG] [Thread-192815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:55:44.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:55:44.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:55:44.289 [DEBUG] [Thread-192815] [transport.py] [_log()] userauth is OK
2026-02-14T21:55:44.289 [DEBUG] [Thread-192815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:55:44.289 [DEBUG] [Thread-192815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:55:44.289 [DEBUG] [Thread-192815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:55:44.289 [DEBUG] [Thread-192815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:55:44.307 [INFO] [Thread-192815] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:55:44.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-14T21:55:44.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:55:45.100 [DEBUG] [Thread-192815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:55:45.100 [DEBUG] [Thread-192815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:55:45.148 [DEBUG] [Thread-192815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:55:45.148 [DEBUG] [Thread-192815] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:55:45.156 [DEBUG] [Thread-192815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:55:45.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:55:45.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-14T21:55:45.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-14T21:55:45.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:55:45.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:55:45.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:55:45.189 [DEBUG] [Thread-192815] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:55:48.876 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:55:48.878 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:55:50.111 [DEBUG] [Thread-192817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:55:55.365 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:55:58.969 [DEBUG] [Thread-192818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:55:59.411 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:56:02.486 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:56:05.167 [DEBUG] [Thread-192819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:56:07.963 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:56:15.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:56:15.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:56:15.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-14T21:56:17.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 56, 6), 7.26, 60.47, 0.0, 37.44, 9.8, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:56:17.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:56:06
2026-02-14T21:56:17.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:56:17.672 [DEBUG] [Thread-192820] [transport.py] [_log()] starting thread (client mode): 0xa2d6e710
2026-02-14T21:56:17.673 [DEBUG] [Thread-192820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:56:17.691 [DEBUG] [Thread-192820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:56:17.691 [INFO] [Thread-192820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:56:17.694 [DEBUG] [Thread-192820] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:56:17.694 [DEBUG] [Thread-192820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:56:17.694 [DEBUG] [Thread-192820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:56:17.694 [DEBUG] [Thread-192820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:56:17.694 [DEBUG] [Thread-192820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:56:17.694 [DEBUG] [Thread-192820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:56:17.694 [DEBUG] [Thread-192820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:56:17.694 [DEBUG] [Thread-192820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:56:17.694 [DEBUG] [Thread-192820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:56:17.694 [DEBUG] [Thread-192820] [transport.py] [_log()] client lang: <none>
2026-02-14T21:56:17.694 [DEBUG] [Thread-192820] [transport.py] [_log()] server lang: <none>
2026-02-14T21:56:17.694 [DEBUG] [Thread-192820] [transport.py] [_log()] kex follows: False
2026-02-14T21:56:17.694 [DEBUG] [Thread-192820] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:56:17.694 [DEBUG] [Thread-192820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:56:17.694 [DEBUG] [Thread-192820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:56:17.694 [DEBUG] [Thread-192820] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:56:17.694 [DEBUG] [Thread-192820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:56:17.694 [DEBUG] [Thread-192820] [transport.py] [_log()] Compression: none
2026-02-14T21:56:17.694 [DEBUG] [Thread-192820] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:56:17.714 [DEBUG] [Thread-192820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:56:17.714 [DEBUG] [Thread-192820] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:56:17.715 [DEBUG] [Thread-192820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:56:17.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:56:17.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:56:17.717 [DEBUG] [Thread-192820] [transport.py] [_log()] userauth is OK
2026-02-14T21:56:17.717 [DEBUG] [Thread-192820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:56:17.717 [DEBUG] [Thread-192820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:56:17.717 [DEBUG] [Thread-192820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:56:17.717 [DEBUG] [Thread-192820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:56:17.741 [INFO] [Thread-192820] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:56:17.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:56:18.388 [DEBUG] [Thread-192820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:56:18.388 [DEBUG] [Thread-192820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:56:18.388 [DEBUG] [Thread-192820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:56:18.429 [DEBUG] [Thread-192820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:56:18.430 [DEBUG] [Thread-192820] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:56:18.433 [DEBUG] [Thread-192820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:56:18.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:56:18.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:56:18.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:56:18.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:56:18.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:56:18.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:56:18.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:56:18.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:56:18.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:56:18.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.830321 -999.00   +9.70  22.74     65   +3.50 1 1 1 1 1     0    0 5.83 -14.11 ZNESW 25.0 22.7 163.6 34.1 10.2 -25.0 10.0 -23.9 9.8 -23.0 10.2 -24.3
2026-02-14T21:56:18.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:56:18.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:56:18.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.830321
2026-02-14T21:56:18.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:56:18.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:56:18.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:56:18.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:56:18.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:56:18.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:56:06', tmtdew=7.26, humidity=60.47, cloud=0.0, wind=37.44, temperature=9.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:56:07', seeing=3.56, atlas_timestamp='2026-02-14T19:55:39.734', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, -0.029249999999999332, -0.013749999999999929, -0.013000000000001677, 0.0235000000000003, -0.03974999999999973, -0.02400000000000091, -0.0007500000000000284, 0.0034999999999989484, -0.009999999999999787, -0.017250000000000654, -0.009000000000000341, 0.023999999999999133, 0.034250000000000114, -0.030000000000001137, 0.007999999999999119, 0.056250000000000355, 0.018499999999999517, -0.040000000000000924, -0.026250000000000995, 0.07349999999999923, 0.007749999999997925, 0.0012500000000006395, 0.003750000000000142, 0.03399999999999892, 0.03950000000000031, 0.027749999999999275, -0.014499999999999957, 0.061500000000000554, 0.0235000000000003, 0.008500000000001506, -0.0019999999999988916, 0.02474999999999916], zp_timestamp='2026-02-14T19:51:00')
2026-02-14T21:56:18.458 [DEBUG] [Thread-192820] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:56:18.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-14T21:56:18.552 [DEBUG] [Thread-192823] [transport.py] [_log()] starting thread (client mode): 0xa2d6dc30
2026-02-14T21:56:18.552 [DEBUG] [Thread-192823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:56:18.569 [DEBUG] [Thread-192823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:56:18.569 [INFO] [Thread-192823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:56:18.577 [DEBUG] [Thread-192823] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:56:18.577 [DEBUG] [Thread-192823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:56:18.577 [DEBUG] [Thread-192823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:56:18.577 [DEBUG] [Thread-192823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:56:18.578 [DEBUG] [Thread-192823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:56:18.578 [DEBUG] [Thread-192823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:56:18.578 [DEBUG] [Thread-192823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:56:18.578 [DEBUG] [Thread-192823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:56:18.578 [DEBUG] [Thread-192823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:56:18.578 [DEBUG] [Thread-192823] [transport.py] [_log()] client lang: <none>
2026-02-14T21:56:18.578 [DEBUG] [Thread-192823] [transport.py] [_log()] server lang: <none>
2026-02-14T21:56:18.578 [DEBUG] [Thread-192823] [transport.py] [_log()] kex follows: False
2026-02-14T21:56:18.578 [DEBUG] [Thread-192823] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:56:18.578 [DEBUG] [Thread-192823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:56:18.578 [DEBUG] [Thread-192823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:56:18.578 [DEBUG] [Thread-192823] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:56:18.578 [DEBUG] [Thread-192823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:56:18.587 [DEBUG] [Thread-192823] [transport.py] [_log()] Compression: none
2026-02-14T21:56:18.588 [DEBUG] [Thread-192823] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:56:18.639 [DEBUG] [Thread-192823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:56:18.639 [DEBUG] [Thread-192823] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:56:18.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:56:18.641 [DEBUG] [Thread-192823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:56:18.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:56:18.698 [DEBUG] [Thread-192823] [transport.py] [_log()] userauth is OK
2026-02-14T21:56:18.698 [DEBUG] [Thread-192823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:56:18.698 [DEBUG] [Thread-192823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:56:18.698 [DEBUG] [Thread-192823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:56:18.698 [DEBUG] [Thread-192823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:56:18.719 [INFO] [Thread-192823] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:56:18.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-14T21:56:18.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:56:19.555 [DEBUG] [Thread-192823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:56:19.555 [DEBUG] [Thread-192823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:56:19.603 [DEBUG] [Thread-192823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:56:19.604 [DEBUG] [Thread-192823] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:56:19.613 [DEBUG] [Thread-192823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:56:19.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:56: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')
2026-02-14T21:56:19.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-14T21:56:19.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:56:19.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:56:19.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:56:19.659 [DEBUG] [Thread-192823] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:56:20.212 [DEBUG] [Thread-192825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:56:22.397 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:56:35.266 [DEBUG] [Thread-192826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:56:49.080 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:56:49.081 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:56:49.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:56:49.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:56:49.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T21:56:50.310 [DEBUG] [Thread-192827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:56:51.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 56, 42), 7.43, 59.9, 0.0, 39.31, 10.06, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:56:51.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:56:42
2026-02-14T21:56:51.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:56:52.009 [DEBUG] [Thread-192828] [transport.py] [_log()] starting thread (client mode): 0xa5742f80
2026-02-14T21:56:52.010 [DEBUG] [Thread-192828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:56:52.030 [DEBUG] [Thread-192828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:56:52.030 [INFO] [Thread-192828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:56:52.033 [DEBUG] [Thread-192828] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:56:52.033 [DEBUG] [Thread-192828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:56:52.033 [DEBUG] [Thread-192828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:56:52.033 [DEBUG] [Thread-192828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:56:52.033 [DEBUG] [Thread-192828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:56:52.033 [DEBUG] [Thread-192828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:56:52.033 [DEBUG] [Thread-192828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:56:52.033 [DEBUG] [Thread-192828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:56:52.033 [DEBUG] [Thread-192828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:56:52.033 [DEBUG] [Thread-192828] [transport.py] [_log()] client lang: <none>
2026-02-14T21:56:52.033 [DEBUG] [Thread-192828] [transport.py] [_log()] server lang: <none>
2026-02-14T21:56:52.033 [DEBUG] [Thread-192828] [transport.py] [_log()] kex follows: False
2026-02-14T21:56:52.033 [DEBUG] [Thread-192828] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:56:52.033 [DEBUG] [Thread-192828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:56:52.042 [DEBUG] [Thread-192828] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:56:52.042 [DEBUG] [Thread-192828] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:56:52.042 [DEBUG] [Thread-192828] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:56:52.042 [DEBUG] [Thread-192828] [transport.py] [_log()] Compression: none
2026-02-14T21:56:52.042 [DEBUG] [Thread-192828] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:56:52.062 [DEBUG] [Thread-192828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:56:52.063 [DEBUG] [Thread-192828] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:56:52.063 [DEBUG] [Thread-192828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:56:52.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:56:52.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:56:52.063 [DEBUG] [Thread-192828] [transport.py] [_log()] userauth is OK
2026-02-14T21:56:52.064 [DEBUG] [Thread-192828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:56:52.064 [DEBUG] [Thread-192828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:56:52.064 [DEBUG] [Thread-192828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:56:52.064 [DEBUG] [Thread-192828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:56:52.090 [INFO] [Thread-192828] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:56:52.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:56:52.696 [DEBUG] [Thread-192828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:56:52.696 [DEBUG] [Thread-192828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:56:52.696 [DEBUG] [Thread-192828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:56:52.736 [DEBUG] [Thread-192828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:56:52.737 [DEBUG] [Thread-192828] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:56:52.740 [DEBUG] [Thread-192828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:56:52.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:56:52.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:56:52.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:56:52.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:56:52.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:56:52.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:56:52.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:56:52.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:56:52.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:56:52.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.830668 -999.00   +9.60  27.78     65   +3.50 1 1 1 1 1     0    0 5.89 -15.32 ZNESW 27.9 27.8 159.3 40.1 10.1 -25.1 10.0 -24.0 9.8 -23.0 10.2 -24.1
2026-02-14T21:56:52.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:56:52.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:56:52.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.830668
2026-02-14T21:56:52.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:56:52.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:56:52.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:56:52.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:56:52.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:56:52.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:56:42', tmtdew=7.43, humidity=59.9, cloud=0.0, wind=39.31, temperature=10.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:56:42', seeing=3.6, atlas_timestamp='2026-02-14T19:56:09.715', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.03275000000000006, 0.005250000000000199, -0.0035000000000007248, 0.03450000000000131, 0.007250000000000867, 0.0045000000000001705, -0.03575000000000017, 0.016500000000000625, 0.007500000000000284, 0.0022500000000000853, 0.014999999999998792, 0.08050000000000068, 0.06524999999999892, 0.017999999999998906, 0.03149999999999942, 0.05524999999999913, 0.037499999999999645, -0.030500000000001748, -0.00975000000000037, 0.08599999999999852, 0.05574999999999797, 0.0017500000000012506, 0.011749999999999261, 0.04699999999999882, 0.06349999999999945, 0.05075000000000074, 0.013500000000000512, 0.06300000000000061, 0.06450000000000244, 0.05700000000000216, 0.02450000000000152, 0.055749999999999744], zp_timestamp='2026-02-14T19:55:00')
2026-02-14T21:56:52.766 [DEBUG] [Thread-192828] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:56:52.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T21:56:52.858 [DEBUG] [Thread-192831] [transport.py] [_log()] starting thread (client mode): 0xa5772320
2026-02-14T21:56:52.858 [DEBUG] [Thread-192831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:56:52.873 [DEBUG] [Thread-192831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:56:52.873 [INFO] [Thread-192831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:56:52.880 [DEBUG] [Thread-192831] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:56:52.880 [DEBUG] [Thread-192831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:56:52.880 [DEBUG] [Thread-192831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:56:52.880 [DEBUG] [Thread-192831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:56:52.880 [DEBUG] [Thread-192831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:56:52.881 [DEBUG] [Thread-192831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:56:52.881 [DEBUG] [Thread-192831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:56:52.881 [DEBUG] [Thread-192831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:56:52.881 [DEBUG] [Thread-192831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:56:52.881 [DEBUG] [Thread-192831] [transport.py] [_log()] client lang: <none>
2026-02-14T21:56:52.881 [DEBUG] [Thread-192831] [transport.py] [_log()] server lang: <none>
2026-02-14T21:56:52.881 [DEBUG] [Thread-192831] [transport.py] [_log()] kex follows: False
2026-02-14T21:56:52.881 [DEBUG] [Thread-192831] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:56:52.881 [DEBUG] [Thread-192831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:56:52.881 [DEBUG] [Thread-192831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:56:52.881 [DEBUG] [Thread-192831] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:56:52.881 [DEBUG] [Thread-192831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:56:52.881 [DEBUG] [Thread-192831] [transport.py] [_log()] Compression: none
2026-02-14T21:56:52.881 [DEBUG] [Thread-192831] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:56:52.937 [DEBUG] [Thread-192831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:56:52.938 [DEBUG] [Thread-192831] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:56:52.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:56:52.940 [DEBUG] [Thread-192831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:56:52.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:56:52.993 [DEBUG] [Thread-192831] [transport.py] [_log()] userauth is OK
2026-02-14T21:56:52.993 [DEBUG] [Thread-192831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:56:52.994 [DEBUG] [Thread-192831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:56:52.994 [DEBUG] [Thread-192831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:56:52.994 [DEBUG] [Thread-192831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:56:53.014 [INFO] [Thread-192831] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:56:53.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-14T21:56:53.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:56:53.789 [DEBUG] [Thread-192831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:56:53.789 [DEBUG] [Thread-192831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:56:53.837 [DEBUG] [Thread-192831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:56:53.838 [DEBUG] [Thread-192831] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:56:53.847 [DEBUG] [Thread-192831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:56:53.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:56:53.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:56:53.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:56:53.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:56:53.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:56:53.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:56:53.883 [DEBUG] [Thread-192831] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:56:59.059 [DEBUG] [Thread-192833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:57:05.343 [DEBUG] [Thread-192834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:57:20.401 [DEBUG] [Thread-192835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:57:23.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:57:23.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:57:23.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-14T21:57:25.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 57, 17), 7.26, 60.48, 0.0, 35.13, 9.8, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:57:25.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:57:17
2026-02-14T21:57:26.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:57:26.392 [DEBUG] [Thread-192836] [transport.py] [_log()] starting thread (client mode): 0xa2d78f40
2026-02-14T21:57:26.392 [DEBUG] [Thread-192836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:57:26.413 [DEBUG] [Thread-192836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:57:26.413 [INFO] [Thread-192836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:57:26.413 [DEBUG] [Thread-192836] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:57:26.414 [DEBUG] [Thread-192836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:57:26.414 [DEBUG] [Thread-192836] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:57:26.414 [DEBUG] [Thread-192836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:57:26.414 [DEBUG] [Thread-192836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:57:26.414 [DEBUG] [Thread-192836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:57:26.414 [DEBUG] [Thread-192836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:57:26.414 [DEBUG] [Thread-192836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:57:26.414 [DEBUG] [Thread-192836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:57:26.414 [DEBUG] [Thread-192836] [transport.py] [_log()] client lang: <none>
2026-02-14T21:57:26.414 [DEBUG] [Thread-192836] [transport.py] [_log()] server lang: <none>
2026-02-14T21:57:26.414 [DEBUG] [Thread-192836] [transport.py] [_log()] kex follows: False
2026-02-14T21:57:26.414 [DEBUG] [Thread-192836] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:57:26.414 [DEBUG] [Thread-192836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:57:26.414 [DEBUG] [Thread-192836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:57:26.414 [DEBUG] [Thread-192836] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:57:26.414 [DEBUG] [Thread-192836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:57:26.414 [DEBUG] [Thread-192836] [transport.py] [_log()] Compression: none
2026-02-14T21:57:26.414 [DEBUG] [Thread-192836] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:57:26.422 [DEBUG] [Thread-192836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:57:26.422 [DEBUG] [Thread-192836] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:57:26.423 [DEBUG] [Thread-192836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:57:26.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:57:26.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:57:26.424 [DEBUG] [Thread-192836] [transport.py] [_log()] userauth is OK
2026-02-14T21:57:26.425 [DEBUG] [Thread-192836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:57:26.425 [DEBUG] [Thread-192836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:57:26.425 [DEBUG] [Thread-192836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:57:26.425 [DEBUG] [Thread-192836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:57:26.448 [INFO] [Thread-192836] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:57:26.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:57:27.031 [DEBUG] [Thread-192836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:57:27.031 [DEBUG] [Thread-192836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:57:27.032 [DEBUG] [Thread-192836] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:57:27.072 [DEBUG] [Thread-192836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:57:27.073 [DEBUG] [Thread-192836] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:57:27.075 [DEBUG] [Thread-192836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:57:27.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:57:27.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:57:27.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:57:27.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:57:27.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:57:27.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:57:27.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:57:27.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:57:27.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:57:27.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.831362 -999.00   +9.60  26.16     65   +3.50 1 1 1 1 1     0    0 5.75 -17.95 ZNESW 21.6 26.2 147.2 33.3 10.2 -25.1 9.9 -24.0 9.8 -22.9 10.2 -24.2
2026-02-14T21:57:27.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:57:27.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:57:27.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.831362
2026-02-14T21:57:27.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:57:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:57:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:57:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:57:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:57:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:57:17', tmtdew=7.26, humidity=60.48, cloud=0.0, wind=35.13, temperature=9.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:57:17', seeing=4.43, atlas_timestamp='2026-02-14T19:57:09.677', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.03275000000000006, 0.005250000000000199, -0.0035000000000007248, 0.03450000000000131, 0.007250000000000867, 0.0045000000000001705, -0.03575000000000017, 0.016500000000000625, 0.007500000000000284, 0.0022500000000000853, 0.014999999999998792, 0.08050000000000068, 0.06524999999999892, 0.017999999999998906, 0.03149999999999942, 0.05524999999999913, 0.037499999999999645, -0.030500000000001748, -0.00975000000000037, 0.08599999999999852, 0.05574999999999797, 0.0017500000000012506, 0.011749999999999261, 0.04699999999999882, 0.06349999999999945, 0.05075000000000074, 0.013500000000000512, 0.06300000000000061, 0.06450000000000244, 0.05700000000000216, 0.02450000000000152, 0.055749999999999744], zp_timestamp='2026-02-14T19:55:00')
2026-02-14T21:57:27.098 [DEBUG] [Thread-192836] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:57:27.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T21:57:27.191 [DEBUG] [Thread-192839] [transport.py] [_log()] starting thread (client mode): 0xa57e3160
2026-02-14T21:57:27.191 [DEBUG] [Thread-192839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:57:27.207 [DEBUG] [Thread-192839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:57:27.207 [INFO] [Thread-192839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:57:27.214 [DEBUG] [Thread-192839] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:57:27.214 [DEBUG] [Thread-192839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:57:27.214 [DEBUG] [Thread-192839] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:57:27.214 [DEBUG] [Thread-192839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:57:27.214 [DEBUG] [Thread-192839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:57:27.214 [DEBUG] [Thread-192839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:57:27.214 [DEBUG] [Thread-192839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:57:27.215 [DEBUG] [Thread-192839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:57:27.215 [DEBUG] [Thread-192839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:57:27.215 [DEBUG] [Thread-192839] [transport.py] [_log()] client lang: <none>
2026-02-14T21:57:27.215 [DEBUG] [Thread-192839] [transport.py] [_log()] server lang: <none>
2026-02-14T21:57:27.215 [DEBUG] [Thread-192839] [transport.py] [_log()] kex follows: False
2026-02-14T21:57:27.215 [DEBUG] [Thread-192839] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:57:27.215 [DEBUG] [Thread-192839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:57:27.215 [DEBUG] [Thread-192839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:57:27.215 [DEBUG] [Thread-192839] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:57:27.215 [DEBUG] [Thread-192839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:57:27.215 [DEBUG] [Thread-192839] [transport.py] [_log()] Compression: none
2026-02-14T21:57:27.215 [DEBUG] [Thread-192839] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:57:27.272 [DEBUG] [Thread-192839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:57:27.272 [DEBUG] [Thread-192839] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:57:27.273 [DEBUG] [Thread-192839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:57:27.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:57:27.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:57:27.329 [DEBUG] [Thread-192839] [transport.py] [_log()] userauth is OK
2026-02-14T21:57:27.329 [DEBUG] [Thread-192839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:57:27.329 [DEBUG] [Thread-192839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:57:27.329 [DEBUG] [Thread-192839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:57:27.329 [DEBUG] [Thread-192839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:57:27.344 [INFO] [Thread-192839] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:57:27.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-14T21:57:27.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:57:28.130 [DEBUG] [Thread-192839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:57:28.139 [DEBUG] [Thread-192839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:57:28.178 [DEBUG] [Thread-192839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:57:28.178 [DEBUG] [Thread-192839] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:57:28.187 [DEBUG] [Thread-192839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:57:28.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:57:28.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')
2026-02-14T21:57:28.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-14T21:57:28.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:57:28.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:57:28.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:57:28.223 [DEBUG] [Thread-192839] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:57:35.441 [DEBUG] [Thread-192841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:57:49.283 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:57:49.285 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:57:50.494 [DEBUG] [Thread-192842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:57:55.843 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:57:58.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:57:58.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:57: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-14T21:57:59.138 [DEBUG] [Thread-192843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:58:00.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 57, 17), 7.26, 60.48, 0.0, 35.13, 9.8, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:58:00.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:57:17
2026-02-14T21:58:00.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:58:00.612 [DEBUG] [Thread-192844] [transport.py] [_log()] starting thread (client mode): 0xa5771a50
2026-02-14T21:58:00.612 [DEBUG] [Thread-192844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:58:00.636 [DEBUG] [Thread-192844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:58:00.636 [INFO] [Thread-192844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:58:00.639 [DEBUG] [Thread-192844] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:58:00.639 [DEBUG] [Thread-192844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:58:00.639 [DEBUG] [Thread-192844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:58:00.639 [DEBUG] [Thread-192844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:58:00.639 [DEBUG] [Thread-192844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:58:00.639 [DEBUG] [Thread-192844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:58:00.639 [DEBUG] [Thread-192844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:58:00.639 [DEBUG] [Thread-192844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:58:00.639 [DEBUG] [Thread-192844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:58:00.639 [DEBUG] [Thread-192844] [transport.py] [_log()] client lang: <none>
2026-02-14T21:58:00.639 [DEBUG] [Thread-192844] [transport.py] [_log()] server lang: <none>
2026-02-14T21:58:00.639 [DEBUG] [Thread-192844] [transport.py] [_log()] kex follows: False
2026-02-14T21:58:00.639 [DEBUG] [Thread-192844] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:58:00.639 [DEBUG] [Thread-192844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:58:00.639 [DEBUG] [Thread-192844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:58:00.639 [DEBUG] [Thread-192844] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:58:00.639 [DEBUG] [Thread-192844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:58:00.639 [DEBUG] [Thread-192844] [transport.py] [_log()] Compression: none
2026-02-14T21:58:00.639 [DEBUG] [Thread-192844] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:58:00.652 [DEBUG] [Thread-192844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:58:00.653 [DEBUG] [Thread-192844] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:58:00.653 [DEBUG] [Thread-192844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:58:00.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:58:00.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:58:00.654 [DEBUG] [Thread-192844] [transport.py] [_log()] userauth is OK
2026-02-14T21:58:00.654 [DEBUG] [Thread-192844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:58:00.654 [DEBUG] [Thread-192844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:58:00.654 [DEBUG] [Thread-192844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:58:00.654 [DEBUG] [Thread-192844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:58:00.683 [INFO] [Thread-192844] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:58:00.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:58:01.352 [DEBUG] [Thread-192844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:58:01.352 [DEBUG] [Thread-192844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:58:01.352 [DEBUG] [Thread-192844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:58:01.393 [DEBUG] [Thread-192844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:58:01.393 [DEBUG] [Thread-192844] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:58:01.396 [DEBUG] [Thread-192844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:58:01.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:58:01.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:58:01.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:58:01.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:58:01.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:58:01.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:58:01.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:58:01.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:58:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:58:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.831710 -999.00   +9.60  20.48     65   +3.40 1 1 1 1 1     0    0 5.75 -19.49 ZNESW 18.8 20.5 161.2 34.5 10.2 -25.1 9.9 -24.0 9.8 -23.0 10.2 -24.2
2026-02-14T21:58:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:58:01.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:58:01.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.831710
2026-02-14T21:58:01.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:58:01.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:58:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:58:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:58:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:58:01.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:57:17', tmtdew=7.26, humidity=60.48, cloud=0.0, wind=35.13, temperature=9.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:57:53', seeing=4.43, atlas_timestamp='2026-02-14T19:57:39.744', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.03275000000000006, 0.005250000000000199, -0.0035000000000007248, 0.03450000000000131, 0.007250000000000867, 0.0045000000000001705, -0.03575000000000017, 0.016500000000000625, 0.007500000000000284, 0.0022500000000000853, 0.014999999999998792, 0.08050000000000068, 0.06524999999999892, 0.017999999999998906, 0.03149999999999942, 0.05524999999999913, 0.037499999999999645, -0.030500000000001748, -0.00975000000000037, 0.08599999999999852, 0.05574999999999797, 0.0017500000000012506, 0.011749999999999261, 0.04699999999999882, 0.06349999999999945, 0.05075000000000074, 0.013500000000000512, 0.06300000000000061, 0.06450000000000244, 0.05700000000000216, 0.02450000000000152, 0.055749999999999744], zp_timestamp='2026-02-14T19:55:00')
2026-02-14T21:58:01.424 [DEBUG] [Thread-192844] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:58:01.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-14T21:58:01.520 [DEBUG] [Thread-192847] [transport.py] [_log()] starting thread (client mode): 0xa57e3040
2026-02-14T21:58:01.520 [DEBUG] [Thread-192847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:58:01.534 [DEBUG] [Thread-192847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:58:01.534 [INFO] [Thread-192847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:58:01.541 [DEBUG] [Thread-192847] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:58:01.541 [DEBUG] [Thread-192847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:58:01.541 [DEBUG] [Thread-192847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:58:01.542 [DEBUG] [Thread-192847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:58:01.542 [DEBUG] [Thread-192847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:58:01.542 [DEBUG] [Thread-192847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:58:01.542 [DEBUG] [Thread-192847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:58:01.542 [DEBUG] [Thread-192847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:58:01.542 [DEBUG] [Thread-192847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:58:01.542 [DEBUG] [Thread-192847] [transport.py] [_log()] client lang: <none>
2026-02-14T21:58:01.542 [DEBUG] [Thread-192847] [transport.py] [_log()] server lang: <none>
2026-02-14T21:58:01.542 [DEBUG] [Thread-192847] [transport.py] [_log()] kex follows: False
2026-02-14T21:58:01.542 [DEBUG] [Thread-192847] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:58:01.542 [DEBUG] [Thread-192847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:58:01.542 [DEBUG] [Thread-192847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:58:01.542 [DEBUG] [Thread-192847] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:58:01.542 [DEBUG] [Thread-192847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:58:01.542 [DEBUG] [Thread-192847] [transport.py] [_log()] Compression: none
2026-02-14T21:58:01.542 [DEBUG] [Thread-192847] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:58:01.600 [DEBUG] [Thread-192847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:58:01.600 [DEBUG] [Thread-192847] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:58:01.601 [DEBUG] [Thread-192847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:58:01.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:58:01.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:58:01.657 [DEBUG] [Thread-192847] [transport.py] [_log()] userauth is OK
2026-02-14T21:58:01.657 [DEBUG] [Thread-192847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:58:01.657 [DEBUG] [Thread-192847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:58:01.657 [DEBUG] [Thread-192847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:58:01.657 [DEBUG] [Thread-192847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:58:01.671 [INFO] [Thread-192847] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:58:01.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-14T21:58:01.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:58:02.493 [DEBUG] [Thread-192847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:58:02.493 [DEBUG] [Thread-192847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:58:02.541 [DEBUG] [Thread-192847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:58:02.541 [DEBUG] [Thread-192847] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:58:02.550 [DEBUG] [Thread-192847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:58:02.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:58:02.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:58:02.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-14T21:58:02.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:58:02.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:58:02.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:58:02.583 [DEBUG] [Thread-192847] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:58:05.531 [DEBUG] [Thread-192849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:58:20.591 [DEBUG] [Thread-192850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:58:32.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:58:32.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:58:32.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T21:58:34.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 57, 52), 7.24, 60.55, 0.0, 34.67, 9.8, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:58:34.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:57:52
2026-02-14T21:58:34.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:58:35.097 [DEBUG] [Thread-192851] [transport.py] [_log()] starting thread (client mode): 0xa57c36a0
2026-02-14T21:58:35.097 [DEBUG] [Thread-192851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:58:35.117 [DEBUG] [Thread-192851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:58:35.117 [INFO] [Thread-192851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:58:35.120 [DEBUG] [Thread-192851] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:58:35.120 [DEBUG] [Thread-192851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:58:35.120 [DEBUG] [Thread-192851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:58:35.120 [DEBUG] [Thread-192851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:58:35.120 [DEBUG] [Thread-192851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:58:35.120 [DEBUG] [Thread-192851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:58:35.120 [DEBUG] [Thread-192851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:58:35.120 [DEBUG] [Thread-192851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:58:35.120 [DEBUG] [Thread-192851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:58:35.120 [DEBUG] [Thread-192851] [transport.py] [_log()] client lang: <none>
2026-02-14T21:58:35.120 [DEBUG] [Thread-192851] [transport.py] [_log()] server lang: <none>
2026-02-14T21:58:35.120 [DEBUG] [Thread-192851] [transport.py] [_log()] kex follows: False
2026-02-14T21:58:35.120 [DEBUG] [Thread-192851] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:58:35.120 [DEBUG] [Thread-192851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:58:35.120 [DEBUG] [Thread-192851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:58:35.120 [DEBUG] [Thread-192851] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:58:35.120 [DEBUG] [Thread-192851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:58:35.120 [DEBUG] [Thread-192851] [transport.py] [_log()] Compression: none
2026-02-14T21:58:35.120 [DEBUG] [Thread-192851] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:58:35.135 [DEBUG] [Thread-192851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:58:35.135 [DEBUG] [Thread-192851] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:58:35.136 [DEBUG] [Thread-192851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:58:35.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:58:35.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:58:35.137 [DEBUG] [Thread-192851] [transport.py] [_log()] userauth is OK
2026-02-14T21:58:35.137 [DEBUG] [Thread-192851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:58:35.137 [DEBUG] [Thread-192851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:58:35.137 [DEBUG] [Thread-192851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:58:35.137 [DEBUG] [Thread-192851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:58:35.152 [INFO] [Thread-192851] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:58:35.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:58:35.639 [DEBUG] [Thread-192853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:58:35.787 [DEBUG] [Thread-192851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:58:35.796 [DEBUG] [Thread-192851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:58:35.797 [DEBUG] [Thread-192851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:58:35.828 [DEBUG] [Thread-192851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:58:35.828 [DEBUG] [Thread-192851] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:58:35.832 [DEBUG] [Thread-192851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:58:35.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:58:35.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:58:35.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:58:35.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:58:35.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:58:35.858 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:58:35.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:58:35.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:58:35.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:58:35.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.832057 -999.00   +9.50  21.59     65   +3.40 1 1 1 1 1     0    0 5.56 -20.52 ZNESW 23.5 21.6 152.2 29.2 10.2 -25.1 9.9 -23.9 9.8 -23.2 10.1 -24.3
2026-02-14T21:58:35.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:58:35.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:58:35.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.832057
2026-02-14T21:58:35.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:58:35.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:58:35.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:58:35.861 [DEBUG] [Thread-192851] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:58:35.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:58:35.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:58:35.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:57:52', tmtdew=7.24, humidity=60.55, cloud=0.0, wind=34.67, temperature=9.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:58:28', seeing=4.53, atlas_timestamp='2026-02-14T19:58:09.725', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.03275000000000006, 0.005250000000000199, -0.0035000000000007248, 0.03450000000000131, 0.007250000000000867, 0.0045000000000001705, -0.03575000000000017, 0.016500000000000625, 0.007500000000000284, 0.0022500000000000853, 0.014999999999998792, 0.08050000000000068, 0.06524999999999892, 0.017999999999998906, 0.03149999999999942, 0.05524999999999913, 0.037499999999999645, -0.030500000000001748, -0.00975000000000037, 0.08599999999999852, 0.05574999999999797, 0.0017500000000012506, 0.011749999999999261, 0.04699999999999882, 0.06349999999999945, 0.05075000000000074, 0.013500000000000512, 0.06300000000000061, 0.06450000000000244, 0.05700000000000216, 0.02450000000000152, 0.055749999999999744], zp_timestamp='2026-02-14T19:55:00')
2026-02-14T21:58:35.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-14T21:58:35.956 [DEBUG] [Thread-192855] [transport.py] [_log()] starting thread (client mode): 0xa57c2f80
2026-02-14T21:58:35.956 [DEBUG] [Thread-192855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:58:35.971 [DEBUG] [Thread-192855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:58:35.971 [INFO] [Thread-192855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:58:35.979 [DEBUG] [Thread-192855] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:58:35.979 [DEBUG] [Thread-192855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:58:35.979 [DEBUG] [Thread-192855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:58:35.979 [DEBUG] [Thread-192855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:58:35.979 [DEBUG] [Thread-192855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:58:35.979 [DEBUG] [Thread-192855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:58:35.979 [DEBUG] [Thread-192855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:58:35.979 [DEBUG] [Thread-192855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:58:35.979 [DEBUG] [Thread-192855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:58:35.979 [DEBUG] [Thread-192855] [transport.py] [_log()] client lang: <none>
2026-02-14T21:58:35.979 [DEBUG] [Thread-192855] [transport.py] [_log()] server lang: <none>
2026-02-14T21:58:35.979 [DEBUG] [Thread-192855] [transport.py] [_log()] kex follows: False
2026-02-14T21:58:35.979 [DEBUG] [Thread-192855] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:58:35.979 [DEBUG] [Thread-192855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:58:35.980 [DEBUG] [Thread-192855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:58:35.980 [DEBUG] [Thread-192855] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:58:35.980 [DEBUG] [Thread-192855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:58:35.980 [DEBUG] [Thread-192855] [transport.py] [_log()] Compression: none
2026-02-14T21:58:35.980 [DEBUG] [Thread-192855] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:58:36.038 [DEBUG] [Thread-192855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:58:36.039 [DEBUG] [Thread-192855] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:58:36.039 [DEBUG] [Thread-192855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:58:36.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:58:36.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:58:36.094 [DEBUG] [Thread-192855] [transport.py] [_log()] userauth is OK
2026-02-14T21:58:36.094 [DEBUG] [Thread-192855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:58:36.094 [DEBUG] [Thread-192855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:58:36.094 [DEBUG] [Thread-192855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:58:36.094 [DEBUG] [Thread-192855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:58:36.114 [INFO] [Thread-192855] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:58:36.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T21:58:36.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:58:36.890 [DEBUG] [Thread-192855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:58:36.890 [DEBUG] [Thread-192855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:58:36.939 [DEBUG] [Thread-192855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:58:36.939 [DEBUG] [Thread-192855] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:58:36.948 [DEBUG] [Thread-192855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:58:36.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:58:36.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T21:58:36.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T21:58:36.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:58:36.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:58:36.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:58:36.984 [DEBUG] [Thread-192855] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:58:49.491 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:58:49.491 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:58:50.683 [DEBUG] [Thread-192857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:58:59.220 [DEBUG] [Thread-192858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:59:05.724 [DEBUG] [Thread-192859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:59:07.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:59:07.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:59:07.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-14T21:59:08.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 58, 28), 7.24, 60.55, 0.0, 35.31, 9.77, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:59:08.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:58:28
2026-02-14T21:59:09.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:59:09.527 [DEBUG] [Thread-192860] [transport.py] [_log()] starting thread (client mode): 0xa2d1abf0
2026-02-14T21:59:09.528 [DEBUG] [Thread-192860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:59:09.534 [DEBUG] [Thread-192860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:59:09.534 [INFO] [Thread-192860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:59:09.536 [DEBUG] [Thread-192860] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:59:09.536 [DEBUG] [Thread-192860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:59:09.536 [DEBUG] [Thread-192860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:59:09.536 [DEBUG] [Thread-192860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:59:09.536 [DEBUG] [Thread-192860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:59:09.536 [DEBUG] [Thread-192860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:59:09.536 [DEBUG] [Thread-192860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:59:09.536 [DEBUG] [Thread-192860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:59:09.536 [DEBUG] [Thread-192860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:59:09.536 [DEBUG] [Thread-192860] [transport.py] [_log()] client lang: <none>
2026-02-14T21:59:09.536 [DEBUG] [Thread-192860] [transport.py] [_log()] server lang: <none>
2026-02-14T21:59:09.537 [DEBUG] [Thread-192860] [transport.py] [_log()] kex follows: False
2026-02-14T21:59:09.537 [DEBUG] [Thread-192860] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:59:09.537 [DEBUG] [Thread-192860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:59:09.537 [DEBUG] [Thread-192860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:59:09.537 [DEBUG] [Thread-192860] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:59:09.537 [DEBUG] [Thread-192860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:59:09.537 [DEBUG] [Thread-192860] [transport.py] [_log()] Compression: none
2026-02-14T21:59:09.537 [DEBUG] [Thread-192860] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:59:09.549 [DEBUG] [Thread-192860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:59:09.550 [DEBUG] [Thread-192860] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:59:09.550 [DEBUG] [Thread-192860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:59:09.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:59:09.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:59:09.552 [DEBUG] [Thread-192860] [transport.py] [_log()] userauth is OK
2026-02-14T21:59:09.552 [DEBUG] [Thread-192860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:59:09.552 [DEBUG] [Thread-192860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:59:09.552 [DEBUG] [Thread-192860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:59:09.552 [DEBUG] [Thread-192860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:59:09.570 [INFO] [Thread-192860] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:59:09.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:59:10.159 [DEBUG] [Thread-192860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:59:10.160 [DEBUG] [Thread-192860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:59:10.160 [DEBUG] [Thread-192860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:59:10.200 [DEBUG] [Thread-192860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:59:10.200 [DEBUG] [Thread-192860] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:59:10.202 [DEBUG] [Thread-192860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:59:10.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:59:10.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:59:10.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:59:10.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:59:10.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:59:10.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:59:10.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:59:10.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:59:10.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:59:10.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.832404 -999.00   +9.50  24.41     65   +3.40 1 1 1 1 1     0    0 5.67 -20.99 ZNESW 21.3 24.4 160.1 31.8 10.1 -25.0 9.9 -24.1 9.8 -23.1 10.2 -24.3
2026-02-14T21:59:10.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:59:10.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:59:10.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.832404
2026-02-14T21:59:10.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:59:10.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:59:10.224 [DEBUG] [Thread-192860] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:59:10.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:59:10.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:59:10.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:59:10.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:58:28', tmtdew=7.24, humidity=60.55, cloud=0.0, wind=35.31, temperature=9.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:59:03', seeing=3.96, atlas_timestamp='2026-02-14T19:58:39.706', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.03275000000000006, 0.005250000000000199, -0.0035000000000007248, 0.03450000000000131, 0.007250000000000867, 0.0045000000000001705, -0.03575000000000017, 0.016500000000000625, 0.007500000000000284, 0.0022500000000000853, 0.014999999999998792, 0.08050000000000068, 0.06524999999999892, 0.017999999999998906, 0.03149999999999942, 0.05524999999999913, 0.037499999999999645, -0.030500000000001748, -0.00975000000000037, 0.08599999999999852, 0.05574999999999797, 0.0017500000000012506, 0.011749999999999261, 0.04699999999999882, 0.06349999999999945, 0.05075000000000074, 0.013500000000000512, 0.06300000000000061, 0.06450000000000244, 0.05700000000000216, 0.02450000000000152, 0.055749999999999744], zp_timestamp='2026-02-14T19:55:00')
2026-02-14T21:59:10.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T21:59:10.315 [DEBUG] [Thread-192863] [transport.py] [_log()] starting thread (client mode): 0xa57d60e0
2026-02-14T21:59:10.316 [DEBUG] [Thread-192863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:59:10.330 [DEBUG] [Thread-192863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:59:10.330 [INFO] [Thread-192863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:59:10.338 [DEBUG] [Thread-192863] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:59:10.338 [DEBUG] [Thread-192863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:59:10.338 [DEBUG] [Thread-192863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:59:10.338 [DEBUG] [Thread-192863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:59:10.338 [DEBUG] [Thread-192863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:59:10.338 [DEBUG] [Thread-192863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:59:10.338 [DEBUG] [Thread-192863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:59:10.338 [DEBUG] [Thread-192863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:59:10.338 [DEBUG] [Thread-192863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:59:10.338 [DEBUG] [Thread-192863] [transport.py] [_log()] client lang: <none>
2026-02-14T21:59:10.338 [DEBUG] [Thread-192863] [transport.py] [_log()] server lang: <none>
2026-02-14T21:59:10.338 [DEBUG] [Thread-192863] [transport.py] [_log()] kex follows: False
2026-02-14T21:59:10.339 [DEBUG] [Thread-192863] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:59:10.339 [DEBUG] [Thread-192863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:59:10.339 [DEBUG] [Thread-192863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:59:10.339 [DEBUG] [Thread-192863] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:59:10.339 [DEBUG] [Thread-192863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:59:10.339 [DEBUG] [Thread-192863] [transport.py] [_log()] Compression: none
2026-02-14T21:59:10.339 [DEBUG] [Thread-192863] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:59:10.398 [DEBUG] [Thread-192863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:59:10.398 [DEBUG] [Thread-192863] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:59:10.399 [DEBUG] [Thread-192863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:59:10.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:59:10.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:59:10.454 [DEBUG] [Thread-192863] [transport.py] [_log()] userauth is OK
2026-02-14T21:59:10.454 [DEBUG] [Thread-192863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:59:10.454 [DEBUG] [Thread-192863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:59:10.454 [DEBUG] [Thread-192863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:59:10.454 [DEBUG] [Thread-192863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:59:10.473 [INFO] [Thread-192863] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:59:10.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-14T21:59:10.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:59:11.283 [DEBUG] [Thread-192863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:59:11.283 [DEBUG] [Thread-192863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:59:11.331 [DEBUG] [Thread-192863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:59:11.332 [DEBUG] [Thread-192863] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:59:11.341 [DEBUG] [Thread-192863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:59:11.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:59:11.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-14T21:59:11.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-14T21:59:11.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:59:11.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:59:11.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:59:11.378 [DEBUG] [Thread-192863] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:59:20.761 [DEBUG] [Thread-192865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:59:29.779 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:59:35.811 [DEBUG] [Thread-192866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:59:41.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T21:59:41.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T21:59:41.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-14T21:59:43.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 59, 3), 7.24, 60.53, 0.0, 35.16, 9.77, 0, 0, 0, 2, 0, 0),)
2026-02-14T21:59:43.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:59:03
2026-02-14T21:59:43.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T21:59:43.958 [DEBUG] [Thread-192867] [transport.py] [_log()] starting thread (client mode): 0xa57d64d0
2026-02-14T21:59:43.958 [DEBUG] [Thread-192867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:59:43.978 [DEBUG] [Thread-192867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T21:59:43.978 [INFO] [Thread-192867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T21:59:43.981 [DEBUG] [Thread-192867] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:59:43.982 [DEBUG] [Thread-192867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T21:59:43.982 [DEBUG] [Thread-192867] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:59:43.982 [DEBUG] [Thread-192867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:59:43.982 [DEBUG] [Thread-192867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:59:43.982 [DEBUG] [Thread-192867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:59:43.982 [DEBUG] [Thread-192867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:59:43.982 [DEBUG] [Thread-192867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:59:43.982 [DEBUG] [Thread-192867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:59:43.982 [DEBUG] [Thread-192867] [transport.py] [_log()] client lang: <none>
2026-02-14T21:59:43.982 [DEBUG] [Thread-192867] [transport.py] [_log()] server lang: <none>
2026-02-14T21:59:43.982 [DEBUG] [Thread-192867] [transport.py] [_log()] kex follows: False
2026-02-14T21:59:43.983 [DEBUG] [Thread-192867] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:59:43.983 [DEBUG] [Thread-192867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:59:43.983 [DEBUG] [Thread-192867] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:59:43.983 [DEBUG] [Thread-192867] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:59:43.983 [DEBUG] [Thread-192867] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:59:43.983 [DEBUG] [Thread-192867] [transport.py] [_log()] Compression: none
2026-02-14T21:59:43.983 [DEBUG] [Thread-192867] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:59:43.996 [DEBUG] [Thread-192867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:59:43.996 [DEBUG] [Thread-192867] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:59:43.996 [DEBUG] [Thread-192867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T21:59:43.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T21:59:43.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:59:43.998 [DEBUG] [Thread-192867] [transport.py] [_log()] userauth is OK
2026-02-14T21:59:43.998 [DEBUG] [Thread-192867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:59:43.998 [DEBUG] [Thread-192867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:59:43.998 [DEBUG] [Thread-192867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T21:59:43.998 [DEBUG] [Thread-192867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:59:44.012 [INFO] [Thread-192867] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:59:44.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:59:44.668 [DEBUG] [Thread-192867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:59:44.668 [DEBUG] [Thread-192867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:59:44.668 [DEBUG] [Thread-192867] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T21:59:44.709 [DEBUG] [Thread-192867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:59:44.709 [DEBUG] [Thread-192867] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:59:44.712 [DEBUG] [Thread-192867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:59:44.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:59:44.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T21:59:44.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T21:59:44.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T21:59:44.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:59:44.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T21:59:44.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:59:44.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:59:44.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T21:59:44.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.832751 -999.00   +9.50  24.26     65   +3.50 1 1 1 1 1     0    0 5.62 -20.80 ZNESW 31.0 24.3 155.0 37.0 10.1 -25.1 9.9 -24.1 9.8 -23.0 10.2 -24.3
2026-02-14T21:59:44.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T21:59:44.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T21:59:44.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.832751
2026-02-14T21:59:44.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T21:59:44.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T21:59:44.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T21:59:44.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T21:59:44.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T21:59:44.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:59:03', tmtdew=7.24, humidity=60.53, cloud=0.0, wind=35.16, temperature=9.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T21:59:38', seeing=3.57, atlas_timestamp='2026-02-14T19:59:09.686', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.03275000000000006, 0.005250000000000199, -0.0035000000000007248, 0.03450000000000131, 0.007250000000000867, 0.0045000000000001705, -0.03575000000000017, 0.016500000000000625, 0.007500000000000284, 0.0022500000000000853, 0.014999999999998792, 0.08050000000000068, 0.06524999999999892, 0.017999999999998906, 0.03149999999999942, 0.05524999999999913, 0.037499999999999645, -0.030500000000001748, -0.00975000000000037, 0.08599999999999852, 0.05574999999999797, 0.0017500000000012506, 0.011749999999999261, 0.04699999999999882, 0.06349999999999945, 0.05075000000000074, 0.013500000000000512, 0.06300000000000061, 0.06450000000000244, 0.05700000000000216, 0.02450000000000152, 0.055749999999999744], zp_timestamp='2026-02-14T19:58:00')
2026-02-14T21:59:44.738 [DEBUG] [Thread-192867] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:59:44.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-14T21:59:44.830 [DEBUG] [Thread-192870] [transport.py] [_log()] starting thread (client mode): 0xa57d5270
2026-02-14T21:59:44.830 [DEBUG] [Thread-192870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T21:59:44.844 [DEBUG] [Thread-192870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T21:59:44.844 [INFO] [Thread-192870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T21:59:44.851 [DEBUG] [Thread-192870] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T21:59:44.851 [DEBUG] [Thread-192870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T21:59:44.851 [DEBUG] [Thread-192870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T21:59:44.851 [DEBUG] [Thread-192870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:59:44.851 [DEBUG] [Thread-192870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T21:59:44.851 [DEBUG] [Thread-192870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:59:44.851 [DEBUG] [Thread-192870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T21:59:44.852 [DEBUG] [Thread-192870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T21:59:44.852 [DEBUG] [Thread-192870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T21:59:44.852 [DEBUG] [Thread-192870] [transport.py] [_log()] client lang: <none>
2026-02-14T21:59:44.852 [DEBUG] [Thread-192870] [transport.py] [_log()] server lang: <none>
2026-02-14T21:59:44.852 [DEBUG] [Thread-192870] [transport.py] [_log()] kex follows: False
2026-02-14T21:59:44.852 [DEBUG] [Thread-192870] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T21:59:44.852 [DEBUG] [Thread-192870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T21:59:44.852 [DEBUG] [Thread-192870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T21:59:44.852 [DEBUG] [Thread-192870] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T21:59:44.852 [DEBUG] [Thread-192870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T21:59:44.852 [DEBUG] [Thread-192870] [transport.py] [_log()] Compression: none
2026-02-14T21:59:44.852 [DEBUG] [Thread-192870] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T21:59:44.909 [DEBUG] [Thread-192870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T21:59:44.909 [DEBUG] [Thread-192870] [transport.py] [_log()] Switch to new keys ...
2026-02-14T21:59:44.909 [DEBUG] [Thread-192870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T21:59:44.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T21:59:44.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T21:59:44.966 [DEBUG] [Thread-192870] [transport.py] [_log()] userauth is OK
2026-02-14T21:59:44.967 [DEBUG] [Thread-192870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T21:59:44.967 [DEBUG] [Thread-192870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T21:59:44.967 [DEBUG] [Thread-192870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T21:59:44.967 [DEBUG] [Thread-192870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T21:59:44.986 [INFO] [Thread-192870] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T21:59:44.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-14T21:59:44.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T21:59:45.771 [DEBUG] [Thread-192870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T21:59:45.771 [DEBUG] [Thread-192870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T21:59:45.819 [DEBUG] [Thread-192870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T21:59:45.819 [DEBUG] [Thread-192870] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T21:59:45.828 [DEBUG] [Thread-192870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T21:59:45.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T21:59:45.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-14T21:59: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-14T21:59:45.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T21:59:45.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T21:59:45.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T21:59:45.865 [DEBUG] [Thread-192870] [transport.py] [_log()] EOF in transport thread
2026-02-14T21:59:49.711 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:59:49.712 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:59:50.847 [DEBUG] [Thread-192872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T21:59:59.298 [DEBUG] [Thread-192873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:00:05.886 [DEBUG] [Thread-192874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:00:15.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:00:15.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:00:15.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-14T22:00:18.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 21, 59, 38), 7.35, 60.2, 0.0, 40.86, 10.03, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:00:18.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 21:59:38
2026-02-14T22:00:18.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:00:18.819 [DEBUG] [Thread-192875] [transport.py] [_log()] starting thread (client mode): 0xa57c0430
2026-02-14T22:00:18.820 [DEBUG] [Thread-192875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:00:18.837 [DEBUG] [Thread-192875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:00:18.838 [INFO] [Thread-192875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:00:18.839 [DEBUG] [Thread-192875] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:00:18.839 [DEBUG] [Thread-192875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:00:18.839 [DEBUG] [Thread-192875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:00:18.839 [DEBUG] [Thread-192875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:00:18.839 [DEBUG] [Thread-192875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:00:18.840 [DEBUG] [Thread-192875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:00:18.840 [DEBUG] [Thread-192875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:00:18.840 [DEBUG] [Thread-192875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:00:18.840 [DEBUG] [Thread-192875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:00:18.840 [DEBUG] [Thread-192875] [transport.py] [_log()] client lang: <none>
2026-02-14T22:00:18.840 [DEBUG] [Thread-192875] [transport.py] [_log()] server lang: <none>
2026-02-14T22:00:18.840 [DEBUG] [Thread-192875] [transport.py] [_log()] kex follows: False
2026-02-14T22:00:18.840 [DEBUG] [Thread-192875] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:00:18.840 [DEBUG] [Thread-192875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:00:18.840 [DEBUG] [Thread-192875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:00:18.840 [DEBUG] [Thread-192875] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:00:18.840 [DEBUG] [Thread-192875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:00:18.840 [DEBUG] [Thread-192875] [transport.py] [_log()] Compression: none
2026-02-14T22:00:18.840 [DEBUG] [Thread-192875] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:00:18.851 [DEBUG] [Thread-192875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:00:18.852 [DEBUG] [Thread-192875] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:00:18.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:00:18.853 [DEBUG] [Thread-192875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:00:18.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:00:18.856 [DEBUG] [Thread-192875] [transport.py] [_log()] userauth is OK
2026-02-14T22:00:18.856 [DEBUG] [Thread-192875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:00:18.856 [DEBUG] [Thread-192875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:00:18.856 [DEBUG] [Thread-192875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:00:18.856 [DEBUG] [Thread-192875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:00:18.885 [INFO] [Thread-192875] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:00:18.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:00:19.509 [DEBUG] [Thread-192875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:00:19.510 [DEBUG] [Thread-192875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:00:19.510 [DEBUG] [Thread-192875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:00:19.551 [DEBUG] [Thread-192875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:00:19.551 [DEBUG] [Thread-192875] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:00:19.554 [DEBUG] [Thread-192875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:00:19.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:00:19.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:00:19.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:00:19.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:00:19.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:00:19.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:00:19.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:00:19.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:00:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:00:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.833099 -999.00   +9.50  24.92     65   +3.50 1 1 1 1 1     0    0 5.72 -20.69 ZNESW 29.3 24.9 154.6 40.3 10.1 -25.1 9.9 -23.9 9.7 -23.0 10.1 -24.2
2026-02-14T22:00:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:00:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:00:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.833099
2026-02-14T22:00:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:00:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:00:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:00:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:00:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:00:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T21:59:38', tmtdew=7.35, humidity=60.2, cloud=0.0, wind=40.86, temperature=10.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:00:14', seeing=3.68, atlas_timestamp='2026-02-14T19:59:39.754', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.03275000000000006, 0.005250000000000199, -0.0035000000000007248, 0.03450000000000131, 0.007250000000000867, 0.0045000000000001705, -0.03575000000000017, 0.016500000000000625, 0.007500000000000284, 0.0022500000000000853, 0.014999999999998792, 0.08050000000000068, 0.06524999999999892, 0.017999999999998906, 0.03149999999999942, 0.05524999999999913, 0.037499999999999645, -0.030500000000001748, -0.00975000000000037, 0.08599999999999852, 0.05574999999999797, 0.0017500000000012506, 0.011749999999999261, 0.04699999999999882, 0.06349999999999945, 0.05075000000000074, 0.013500000000000512, 0.06300000000000061, 0.06450000000000244, 0.05700000000000216, 0.02450000000000152, 0.055749999999999744], zp_timestamp='2026-02-14T19:58:00')
2026-02-14T22:00:19.584 [DEBUG] [Thread-192875] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:00:19.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-14T22:00:19.681 [DEBUG] [Thread-192878] [transport.py] [_log()] starting thread (client mode): 0xa57c35e0
2026-02-14T22:00:19.682 [DEBUG] [Thread-192878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:00:19.697 [DEBUG] [Thread-192878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:00:19.697 [INFO] [Thread-192878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:00:19.705 [DEBUG] [Thread-192878] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:00:19.705 [DEBUG] [Thread-192878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:00:19.705 [DEBUG] [Thread-192878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:00:19.705 [DEBUG] [Thread-192878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:00:19.705 [DEBUG] [Thread-192878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:00:19.705 [DEBUG] [Thread-192878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:00:19.705 [DEBUG] [Thread-192878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:00:19.705 [DEBUG] [Thread-192878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:00:19.705 [DEBUG] [Thread-192878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:00:19.706 [DEBUG] [Thread-192878] [transport.py] [_log()] client lang: <none>
2026-02-14T22:00:19.706 [DEBUG] [Thread-192878] [transport.py] [_log()] server lang: <none>
2026-02-14T22:00:19.706 [DEBUG] [Thread-192878] [transport.py] [_log()] kex follows: False
2026-02-14T22:00:19.706 [DEBUG] [Thread-192878] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:00:19.706 [DEBUG] [Thread-192878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:00:19.706 [DEBUG] [Thread-192878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:00:19.706 [DEBUG] [Thread-192878] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:00:19.706 [DEBUG] [Thread-192878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:00:19.706 [DEBUG] [Thread-192878] [transport.py] [_log()] Compression: none
2026-02-14T22:00:19.706 [DEBUG] [Thread-192878] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:00:19.763 [DEBUG] [Thread-192878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:00:19.764 [DEBUG] [Thread-192878] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:00:19.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:00:19.765 [DEBUG] [Thread-192878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:00:19.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:00:19.822 [DEBUG] [Thread-192878] [transport.py] [_log()] userauth is OK
2026-02-14T22:00:19.823 [DEBUG] [Thread-192878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:00:19.823 [DEBUG] [Thread-192878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:00:19.823 [DEBUG] [Thread-192878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:00:19.823 [DEBUG] [Thread-192878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:00:19.842 [INFO] [Thread-192878] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:00:19.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:00:19.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:00:20.648 [DEBUG] [Thread-192878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:00:20.648 [DEBUG] [Thread-192878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:00:20.696 [DEBUG] [Thread-192878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:00:20.696 [DEBUG] [Thread-192878] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:00:20.704 [DEBUG] [Thread-192878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:00:20.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:00:20.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-14T22:00:20.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:00:20.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:00:20.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:00:20.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:00:20.736 [DEBUG] [Thread-192878] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:00:20.915 [DEBUG] [Thread-192880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:00:35.965 [DEBUG] [Thread-192881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:00:49.914 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:00:49.915 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:00:50.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:00:50.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:00:50.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-14T22:00:51.001 [DEBUG] [Thread-192882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:00:52.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 0, 14), 7.18, 61.08, 0.0, 32.52, 9.7, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:00:52.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:00:14
2026-02-14T22:00:53.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:00:53.312 [DEBUG] [Thread-192883] [transport.py] [_log()] starting thread (client mode): 0xa57d4d60
2026-02-14T22:00:53.312 [DEBUG] [Thread-192883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:00:53.332 [DEBUG] [Thread-192883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:00:53.332 [INFO] [Thread-192883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:00:53.335 [DEBUG] [Thread-192883] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:00:53.335 [DEBUG] [Thread-192883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:00:53.336 [DEBUG] [Thread-192883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:00:53.336 [DEBUG] [Thread-192883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:00:53.336 [DEBUG] [Thread-192883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:00:53.336 [DEBUG] [Thread-192883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:00:53.336 [DEBUG] [Thread-192883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:00:53.336 [DEBUG] [Thread-192883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:00:53.336 [DEBUG] [Thread-192883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:00:53.336 [DEBUG] [Thread-192883] [transport.py] [_log()] client lang: <none>
2026-02-14T22:00:53.336 [DEBUG] [Thread-192883] [transport.py] [_log()] server lang: <none>
2026-02-14T22:00:53.336 [DEBUG] [Thread-192883] [transport.py] [_log()] kex follows: False
2026-02-14T22:00:53.336 [DEBUG] [Thread-192883] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:00:53.336 [DEBUG] [Thread-192883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:00:53.336 [DEBUG] [Thread-192883] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:00:53.336 [DEBUG] [Thread-192883] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:00:53.336 [DEBUG] [Thread-192883] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:00:53.336 [DEBUG] [Thread-192883] [transport.py] [_log()] Compression: none
2026-02-14T22:00:53.336 [DEBUG] [Thread-192883] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:00:53.353 [DEBUG] [Thread-192883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:00:53.354 [DEBUG] [Thread-192883] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:00:53.354 [DEBUG] [Thread-192883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:00:53.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:00:53.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:00:53.398 [DEBUG] [Thread-192883] [transport.py] [_log()] userauth is OK
2026-02-14T22:00:53.398 [DEBUG] [Thread-192883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:00:53.398 [DEBUG] [Thread-192883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:00:53.398 [DEBUG] [Thread-192883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:00:53.398 [DEBUG] [Thread-192883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:00:53.421 [INFO] [Thread-192883] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:00:53.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:00:54.068 [DEBUG] [Thread-192883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:00:54.068 [DEBUG] [Thread-192883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:00:54.069 [DEBUG] [Thread-192883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:00:54.109 [DEBUG] [Thread-192883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:00:54.110 [DEBUG] [Thread-192883] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:00:54.113 [DEBUG] [Thread-192883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:00:54.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:00:54.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:00:54.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:00:54.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:00:54.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:00:54.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:00:54.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:00:54.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:00:54.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:00:54.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.833793 -999.00   +9.50  22.23     65   +3.50 1 1 1 1 1     0    0 5.66 -19.62 ZNESW 19.7 22.2 159.8 33.8 10.1 -25.0 9.9 -24.0 9.7 -23.0 10.1 -24.3
2026-02-14T22:00:54.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:00:54.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:00:54.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.833793
2026-02-14T22:00:54.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:00:54.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:00:54.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:00:54.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:00:54.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:00:54.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:00:14', tmtdew=7.18, humidity=61.08, cloud=0.0, wind=32.52, temperature=9.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:00:50', seeing=4.21, atlas_timestamp='2026-02-14T20:00:39.715', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.03275000000000006, 0.005250000000000199, -0.0035000000000007248, 0.03450000000000131, 0.007250000000000867, 0.0045000000000001705, -0.03575000000000017, 0.016500000000000625, 0.007500000000000284, 0.0022500000000000853, 0.014999999999998792, 0.08050000000000068, 0.06524999999999892, 0.017999999999998906, 0.03149999999999942, 0.05524999999999913, 0.037499999999999645, -0.030500000000001748, -0.00975000000000037, 0.08599999999999852, 0.05574999999999797, 0.0017500000000012506, 0.011749999999999261, 0.04699999999999882, 0.06349999999999945, 0.05075000000000074, 0.013500000000000512, 0.06300000000000061, 0.06450000000000244, 0.05700000000000216, 0.02450000000000152, 0.055749999999999744], zp_timestamp='2026-02-14T19:58:00')
2026-02-14T22:00:54.139 [DEBUG] [Thread-192883] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:00:54.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-14T22:00:54.236 [DEBUG] [Thread-192886] [transport.py] [_log()] starting thread (client mode): 0xa2d6fb80
2026-02-14T22:00:54.236 [DEBUG] [Thread-192886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:00:54.250 [DEBUG] [Thread-192886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:00:54.250 [INFO] [Thread-192886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:00:54.258 [DEBUG] [Thread-192886] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:00:54.258 [DEBUG] [Thread-192886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:00:54.258 [DEBUG] [Thread-192886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:00:54.258 [DEBUG] [Thread-192886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:00:54.258 [DEBUG] [Thread-192886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:00:54.258 [DEBUG] [Thread-192886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:00:54.258 [DEBUG] [Thread-192886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:00:54.258 [DEBUG] [Thread-192886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:00:54.258 [DEBUG] [Thread-192886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:00:54.258 [DEBUG] [Thread-192886] [transport.py] [_log()] client lang: <none>
2026-02-14T22:00:54.258 [DEBUG] [Thread-192886] [transport.py] [_log()] server lang: <none>
2026-02-14T22:00:54.258 [DEBUG] [Thread-192886] [transport.py] [_log()] kex follows: False
2026-02-14T22:00:54.258 [DEBUG] [Thread-192886] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:00:54.259 [DEBUG] [Thread-192886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:00:54.259 [DEBUG] [Thread-192886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:00:54.259 [DEBUG] [Thread-192886] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:00:54.259 [DEBUG] [Thread-192886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:00:54.259 [DEBUG] [Thread-192886] [transport.py] [_log()] Compression: none
2026-02-14T22:00:54.259 [DEBUG] [Thread-192886] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:00:54.317 [DEBUG] [Thread-192886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:00:54.317 [DEBUG] [Thread-192886] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:00:54.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:00:54.319 [DEBUG] [Thread-192886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:00:54.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:00:54.372 [DEBUG] [Thread-192886] [transport.py] [_log()] userauth is OK
2026-02-14T22:00:54.372 [DEBUG] [Thread-192886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:00:54.373 [DEBUG] [Thread-192886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:00:54.373 [DEBUG] [Thread-192886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:00:54.373 [DEBUG] [Thread-192886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:00:54.390 [INFO] [Thread-192886] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:00:54.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-14T22:00:54.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:00:55.173 [DEBUG] [Thread-192886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:00:55.173 [DEBUG] [Thread-192886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:00:55.221 [DEBUG] [Thread-192886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:00:55.221 [DEBUG] [Thread-192886] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:00:55.230 [DEBUG] [Thread-192886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:00:55.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:00:55.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:00:55.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-14T22:00:55.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:00:55.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:00:55.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:00:55.264 [DEBUG] [Thread-192886] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:00:59.367 [DEBUG] [Thread-192888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:01:03.385 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:01:06.044 [DEBUG] [Thread-192889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:01:21.093 [DEBUG] [Thread-192890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:01:25.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:01:25.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:01:25.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-14T22:01:27.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 0, 50), 7.16, 61.15, 0.0, 30.77, 9.7, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:01:27.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:00:50
2026-02-14T22:01:28.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:01:28.411 [DEBUG] [Thread-192891] [transport.py] [_log()] starting thread (client mode): 0xa57c3e20
2026-02-14T22:01:28.411 [DEBUG] [Thread-192891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:01:28.431 [DEBUG] [Thread-192891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:01:28.431 [INFO] [Thread-192891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:01:28.434 [DEBUG] [Thread-192891] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:01:28.434 [DEBUG] [Thread-192891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:01:28.434 [DEBUG] [Thread-192891] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:01:28.434 [DEBUG] [Thread-192891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:01:28.434 [DEBUG] [Thread-192891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:01:28.435 [DEBUG] [Thread-192891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:01:28.435 [DEBUG] [Thread-192891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:01:28.435 [DEBUG] [Thread-192891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:01:28.435 [DEBUG] [Thread-192891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:01:28.435 [DEBUG] [Thread-192891] [transport.py] [_log()] client lang: <none>
2026-02-14T22:01:28.435 [DEBUG] [Thread-192891] [transport.py] [_log()] server lang: <none>
2026-02-14T22:01:28.435 [DEBUG] [Thread-192891] [transport.py] [_log()] kex follows: False
2026-02-14T22:01:28.435 [DEBUG] [Thread-192891] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:01:28.435 [DEBUG] [Thread-192891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:01:28.436 [DEBUG] [Thread-192891] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:01:28.436 [DEBUG] [Thread-192891] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:01:28.436 [DEBUG] [Thread-192891] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:01:28.436 [DEBUG] [Thread-192891] [transport.py] [_log()] Compression: none
2026-02-14T22:01:28.436 [DEBUG] [Thread-192891] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:01:28.453 [DEBUG] [Thread-192891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:01:28.453 [DEBUG] [Thread-192891] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:01:28.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:01:28.454 [DEBUG] [Thread-192891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:01:28.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:01:28.457 [DEBUG] [Thread-192891] [transport.py] [_log()] userauth is OK
2026-02-14T22:01:28.457 [DEBUG] [Thread-192891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:01:28.457 [DEBUG] [Thread-192891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:01:28.457 [DEBUG] [Thread-192891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:01:28.458 [DEBUG] [Thread-192891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:01:28.476 [INFO] [Thread-192891] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:01:28.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:01:29.086 [DEBUG] [Thread-192891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:01:29.087 [DEBUG] [Thread-192891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:01:29.087 [DEBUG] [Thread-192891] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:01:29.127 [DEBUG] [Thread-192891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:01:29.128 [DEBUG] [Thread-192891] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:01:29.131 [DEBUG] [Thread-192891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:01:29.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:01:29.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:01:29.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:01:29.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:01:29.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:01:29.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:01:29.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:01:29.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:01:29.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:01:29.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.834140 -999.00   +9.50  26.11     66   +3.50 1 1 1 1 1     0    0 5.77 -19.67 ZNESW 25.7 26.1 154.2 38.6 10.1 -25.0 9.9 -24.0 9.7 -22.9 10.1 -24.2
2026-02-14T22:01:29.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:01:29.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:01:29.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.834140
2026-02-14T22:01:29.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:01:29.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:01:29.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:01:29.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:01:29.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:01:29.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:00:50', tmtdew=7.16, humidity=61.15, cloud=0.0, wind=30.77, temperature=9.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:00:50', seeing=4.21, atlas_timestamp='2026-02-14T20:01:09.696', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.03275000000000006, 0.005250000000000199, -0.0035000000000007248, 0.03450000000000131, 0.007250000000000867, 0.0045000000000001705, -0.03575000000000017, 0.016500000000000625, 0.007500000000000284, 0.0022500000000000853, 0.014999999999998792, 0.08050000000000068, 0.06524999999999892, 0.017999999999998906, 0.03149999999999942, 0.05524999999999913, 0.037499999999999645, -0.030500000000001748, -0.00975000000000037, 0.08599999999999852, 0.05574999999999797, 0.0017500000000012506, 0.011749999999999261, 0.04699999999999882, 0.06349999999999945, 0.05075000000000074, 0.013500000000000512, 0.06300000000000061, 0.06450000000000244, 0.05700000000000216, 0.02450000000000152, 0.055749999999999744], zp_timestamp='2026-02-14T19:58:00')
2026-02-14T22:01:29.156 [DEBUG] [Thread-192891] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:01:29.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:01:29.251 [DEBUG] [Thread-192894] [transport.py] [_log()] starting thread (client mode): 0xa57c3fa0
2026-02-14T22:01:29.251 [DEBUG] [Thread-192894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:01:29.268 [DEBUG] [Thread-192894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:01:29.268 [INFO] [Thread-192894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:01:29.275 [DEBUG] [Thread-192894] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:01:29.276 [DEBUG] [Thread-192894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:01:29.276 [DEBUG] [Thread-192894] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:01:29.276 [DEBUG] [Thread-192894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:01:29.276 [DEBUG] [Thread-192894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:01:29.277 [DEBUG] [Thread-192894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:01:29.277 [DEBUG] [Thread-192894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:01:29.277 [DEBUG] [Thread-192894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:01:29.277 [DEBUG] [Thread-192894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:01:29.277 [DEBUG] [Thread-192894] [transport.py] [_log()] client lang: <none>
2026-02-14T22:01:29.277 [DEBUG] [Thread-192894] [transport.py] [_log()] server lang: <none>
2026-02-14T22:01:29.277 [DEBUG] [Thread-192894] [transport.py] [_log()] kex follows: False
2026-02-14T22:01:29.277 [DEBUG] [Thread-192894] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:01:29.277 [DEBUG] [Thread-192894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:01:29.277 [DEBUG] [Thread-192894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:01:29.277 [DEBUG] [Thread-192894] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:01:29.277 [DEBUG] [Thread-192894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:01:29.277 [DEBUG] [Thread-192894] [transport.py] [_log()] Compression: none
2026-02-14T22:01:29.277 [DEBUG] [Thread-192894] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:01:29.334 [DEBUG] [Thread-192894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:01:29.335 [DEBUG] [Thread-192894] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:01:29.335 [DEBUG] [Thread-192894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:01:29.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:01:29.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:01:29.390 [DEBUG] [Thread-192894] [transport.py] [_log()] userauth is OK
2026-02-14T22:01:29.390 [DEBUG] [Thread-192894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:01:29.390 [DEBUG] [Thread-192894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:01:29.390 [DEBUG] [Thread-192894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:01:29.390 [DEBUG] [Thread-192894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:01:29.409 [INFO] [Thread-192894] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:01:29.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-14T22:01:29.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:01:30.238 [DEBUG] [Thread-192894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:01:30.238 [DEBUG] [Thread-192894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:01:30.285 [DEBUG] [Thread-192894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:01:30.286 [DEBUG] [Thread-192894] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:01:30.294 [DEBUG] [Thread-192894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:01:30.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:01:30.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-14T22:01:30.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-14T22:01:30.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:01:30.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:01:30.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:01:30.326 [DEBUG] [Thread-192894] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:01:36.133 [DEBUG] [Thread-192896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:01:50.116 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:01:50.117 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:01:51.181 [DEBUG] [Thread-192897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:01:59.421 [DEBUG] [Thread-192898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:02:00.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:02:00.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:02:00.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-14T22:02:02.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 1, 25), 7.16, 61.15, 0.0, 33.77, 9.68, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:02:02.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:01:25
2026-02-14T22:02:02.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:02:02.765 [DEBUG] [Thread-192899] [transport.py] [_log()] starting thread (client mode): 0xa2d790f0
2026-02-14T22:02:02.765 [DEBUG] [Thread-192899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:02:02.788 [DEBUG] [Thread-192899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:02:02.788 [INFO] [Thread-192899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:02:02.791 [DEBUG] [Thread-192899] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:02:02.792 [DEBUG] [Thread-192899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:02:02.792 [DEBUG] [Thread-192899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:02:02.792 [DEBUG] [Thread-192899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:02:02.792 [DEBUG] [Thread-192899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:02:02.792 [DEBUG] [Thread-192899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:02:02.792 [DEBUG] [Thread-192899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:02:02.792 [DEBUG] [Thread-192899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:02:02.792 [DEBUG] [Thread-192899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:02:02.792 [DEBUG] [Thread-192899] [transport.py] [_log()] client lang: <none>
2026-02-14T22:02:02.792 [DEBUG] [Thread-192899] [transport.py] [_log()] server lang: <none>
2026-02-14T22:02:02.792 [DEBUG] [Thread-192899] [transport.py] [_log()] kex follows: False
2026-02-14T22:02:02.792 [DEBUG] [Thread-192899] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:02:02.792 [DEBUG] [Thread-192899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:02:02.792 [DEBUG] [Thread-192899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:02:02.792 [DEBUG] [Thread-192899] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:02:02.792 [DEBUG] [Thread-192899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:02:02.792 [DEBUG] [Thread-192899] [transport.py] [_log()] Compression: none
2026-02-14T22:02:02.792 [DEBUG] [Thread-192899] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:02:02.809 [DEBUG] [Thread-192899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:02:02.810 [DEBUG] [Thread-192899] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:02:02.810 [DEBUG] [Thread-192899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:02:02.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:02:02.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:02:02.812 [DEBUG] [Thread-192899] [transport.py] [_log()] userauth is OK
2026-02-14T22:02:02.812 [DEBUG] [Thread-192899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:02:02.812 [DEBUG] [Thread-192899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:02:02.812 [DEBUG] [Thread-192899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:02:02.812 [DEBUG] [Thread-192899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:02:02.837 [INFO] [Thread-192899] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:02:02.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:02:03.491 [DEBUG] [Thread-192899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:02:03.491 [DEBUG] [Thread-192899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:02:03.491 [DEBUG] [Thread-192899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:02:03.532 [DEBUG] [Thread-192899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:02:03.532 [DEBUG] [Thread-192899] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:02:03.535 [DEBUG] [Thread-192899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:02:03.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:02:03.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:02:03.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:02:03.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:02:03.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:02:03.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:02:03.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:02:03.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:02:03.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:02:03.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.834487 -999.00   +9.50  21.22     66   +3.50 1 1 1 1 1     0    0 5.58 -20.09 ZNESW 22.5 21.2 150.4 36.9 10.1 -25.0 9.9 -24.0 9.7 -23.1 10.1 -24.1
2026-02-14T22:02:03.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:02:03.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:02:03.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.834487
2026-02-14T22:02:03.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:02:03.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:02:03.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:02:03.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:02:03.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:02:03.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:01:25', tmtdew=7.16, humidity=61.15, cloud=0.0, wind=33.77, temperature=9.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:01:25', seeing=4.6, atlas_timestamp='2026-02-14T20:01:39.677', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, -0.03275000000000006, 0.005250000000000199, -0.0035000000000007248, 0.03450000000000131, 0.007250000000000867, 0.0045000000000001705, -0.03575000000000017, 0.016500000000000625, 0.007500000000000284, 0.0022500000000000853, 0.014999999999998792, 0.08050000000000068, 0.06524999999999892, 0.017999999999998906, 0.03149999999999942, 0.05524999999999913, 0.037499999999999645, -0.030500000000001748, -0.00975000000000037, 0.08599999999999852, 0.05574999999999797, 0.0017500000000012506, 0.011749999999999261, 0.04699999999999882, 0.06349999999999945, 0.05075000000000074, 0.013500000000000512, 0.06300000000000061, 0.06450000000000244, 0.05700000000000216, 0.02450000000000152, 0.055749999999999744], zp_timestamp='2026-02-14T19:58:00')
2026-02-14T22:02:03.561 [DEBUG] [Thread-192899] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:02:03.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-14T22:02:03.658 [DEBUG] [Thread-192902] [transport.py] [_log()] starting thread (client mode): 0xa2d7a4a0
2026-02-14T22:02:03.658 [DEBUG] [Thread-192902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:02:03.673 [DEBUG] [Thread-192902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:02:03.673 [INFO] [Thread-192902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:02:03.681 [DEBUG] [Thread-192902] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:02:03.681 [DEBUG] [Thread-192902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:02:03.681 [DEBUG] [Thread-192902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:02:03.681 [DEBUG] [Thread-192902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:02:03.681 [DEBUG] [Thread-192902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:02:03.681 [DEBUG] [Thread-192902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:02:03.681 [DEBUG] [Thread-192902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:02:03.681 [DEBUG] [Thread-192902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:02:03.681 [DEBUG] [Thread-192902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:02:03.681 [DEBUG] [Thread-192902] [transport.py] [_log()] client lang: <none>
2026-02-14T22:02:03.681 [DEBUG] [Thread-192902] [transport.py] [_log()] server lang: <none>
2026-02-14T22:02:03.681 [DEBUG] [Thread-192902] [transport.py] [_log()] kex follows: False
2026-02-14T22:02:03.681 [DEBUG] [Thread-192902] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:02:03.681 [DEBUG] [Thread-192902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:02:03.682 [DEBUG] [Thread-192902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:02:03.682 [DEBUG] [Thread-192902] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:02:03.682 [DEBUG] [Thread-192902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:02:03.682 [DEBUG] [Thread-192902] [transport.py] [_log()] Compression: none
2026-02-14T22:02:03.682 [DEBUG] [Thread-192902] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:02:03.742 [DEBUG] [Thread-192902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:02:03.742 [DEBUG] [Thread-192902] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:02:03.742 [DEBUG] [Thread-192902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:02:03.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:02:03.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:02:03.799 [DEBUG] [Thread-192902] [transport.py] [_log()] userauth is OK
2026-02-14T22:02:03.799 [DEBUG] [Thread-192902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:02:03.799 [DEBUG] [Thread-192902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:02:03.800 [DEBUG] [Thread-192902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:02:03.800 [DEBUG] [Thread-192902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:02:03.824 [INFO] [Thread-192902] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:02:03.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-14T22:02:03.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:02:04.643 [DEBUG] [Thread-192902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:02:04.643 [DEBUG] [Thread-192902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:02:04.692 [DEBUG] [Thread-192902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:02:04.692 [DEBUG] [Thread-192902] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:02:04.701 [DEBUG] [Thread-192902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:02:04.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:02:04.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:02:04.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:02:04.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:02:04.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:02:04.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:02:04.740 [DEBUG] [Thread-192902] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:02:06.215 [DEBUG] [Thread-192904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:02:21.267 [DEBUG] [Thread-192905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:02:34.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:02:34.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:02:34.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-14T22:02:36.307 [DEBUG] [Thread-192906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:02:36.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 2, 1), 7.15, 61.2, 0.0, 33.38, 9.7, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:02:36.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:02:01
2026-02-14T22:02:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:02:37.107 [DEBUG] [Thread-192907] [transport.py] [_log()] starting thread (client mode): 0xa57d49a0
2026-02-14T22:02:37.107 [DEBUG] [Thread-192907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:02:37.127 [DEBUG] [Thread-192907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:02:37.127 [INFO] [Thread-192907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:02:37.130 [DEBUG] [Thread-192907] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:02:37.131 [DEBUG] [Thread-192907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:02:37.131 [DEBUG] [Thread-192907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:02:37.131 [DEBUG] [Thread-192907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:02:37.131 [DEBUG] [Thread-192907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:02:37.131 [DEBUG] [Thread-192907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:02:37.131 [DEBUG] [Thread-192907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:02:37.131 [DEBUG] [Thread-192907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:02:37.131 [DEBUG] [Thread-192907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:02:37.131 [DEBUG] [Thread-192907] [transport.py] [_log()] client lang: <none>
2026-02-14T22:02:37.131 [DEBUG] [Thread-192907] [transport.py] [_log()] server lang: <none>
2026-02-14T22:02:37.131 [DEBUG] [Thread-192907] [transport.py] [_log()] kex follows: False
2026-02-14T22:02:37.131 [DEBUG] [Thread-192907] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:02:37.131 [DEBUG] [Thread-192907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:02:37.132 [DEBUG] [Thread-192907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:02:37.132 [DEBUG] [Thread-192907] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:02:37.132 [DEBUG] [Thread-192907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:02:37.132 [DEBUG] [Thread-192907] [transport.py] [_log()] Compression: none
2026-02-14T22:02:37.132 [DEBUG] [Thread-192907] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:02:37.148 [DEBUG] [Thread-192907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:02:37.149 [DEBUG] [Thread-192907] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:02:37.149 [DEBUG] [Thread-192907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:02:37.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:02:37.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:02:37.152 [DEBUG] [Thread-192907] [transport.py] [_log()] userauth is OK
2026-02-14T22:02:37.152 [DEBUG] [Thread-192907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:02:37.152 [DEBUG] [Thread-192907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:02:37.152 [DEBUG] [Thread-192907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:02:37.152 [DEBUG] [Thread-192907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:02:37.171 [INFO] [Thread-192907] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:02:37.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:02:37.184 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:02:37.807 [DEBUG] [Thread-192907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:02:37.807 [DEBUG] [Thread-192907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:02:37.808 [DEBUG] [Thread-192907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:02:37.848 [DEBUG] [Thread-192907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:02:37.848 [DEBUG] [Thread-192907] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:02:37.850 [DEBUG] [Thread-192907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:02:37.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:02:37.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:02:37.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:02:37.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:02:37.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:02:37.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:02:37.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:02:37.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:02:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:02:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.834835 -999.00   +9.50  23.33     66   +3.50 1 1 1 1 1     0    0 5.70 -20.11 ZNESW 25.6 23.3 151.2 35.0 10.1 -25.1 9.9 -23.9 9.7 -23.1 10.0 -24.1
2026-02-14T22:02:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:02:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:02:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.834835
2026-02-14T22:02:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:02:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:02:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:02:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:02:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:02:37.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:02:01', tmtdew=7.15, humidity=61.2, cloud=0.0, wind=33.38, temperature=9.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:02:02', seeing=3.53, atlas_timestamp='2026-02-14T20:02:09.744', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, -0.040749999999999176, 0.017250000000000654, -0.013999999999999346, 0.026500000000000412, 0.0012500000000006395, 0.02200000000000024, 0.011750000000001037, 0.010499999999998622, 0.021000000000000796, 0.014749999999999375, 0.0129999999999999, 0.028999999999999915, 0.06625000000000014, 0.0019999999999988916, 0.03399999999999892, 0.05874999999999986, 0.054499999999999105, -0.028499999999999304, -0.0007500000000000284, 0.04499999999999815, 0.048749999999998295, 0.012250000000001648, 0.03325000000000067, 0.05699999999999861, 0.09450000000000003, 0.04475000000000051, 0.0015000000000000568, 0.09200000000000053, 0.07800000000000118, 0.040000000000000924, 0.022500000000000853, 0.02874999999999872], zp_timestamp='2026-02-14T20:01:00')
2026-02-14T22:02:37.869 [DEBUG] [Thread-192907] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:02:37.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-14T22:02:37.952 [DEBUG] [Thread-192910] [transport.py] [_log()] starting thread (client mode): 0xa57c20b0
2026-02-14T22:02:37.953 [DEBUG] [Thread-192910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:02:37.968 [DEBUG] [Thread-192910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:02:37.968 [INFO] [Thread-192910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:02:37.976 [DEBUG] [Thread-192910] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:02:37.976 [DEBUG] [Thread-192910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:02:37.976 [DEBUG] [Thread-192910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:02:37.976 [DEBUG] [Thread-192910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:02:37.976 [DEBUG] [Thread-192910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:02:37.976 [DEBUG] [Thread-192910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:02:37.976 [DEBUG] [Thread-192910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:02:37.976 [DEBUG] [Thread-192910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:02:37.976 [DEBUG] [Thread-192910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:02:37.977 [DEBUG] [Thread-192910] [transport.py] [_log()] client lang: <none>
2026-02-14T22:02:37.977 [DEBUG] [Thread-192910] [transport.py] [_log()] server lang: <none>
2026-02-14T22:02:37.977 [DEBUG] [Thread-192910] [transport.py] [_log()] kex follows: False
2026-02-14T22:02:37.977 [DEBUG] [Thread-192910] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:02:37.977 [DEBUG] [Thread-192910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:02:37.977 [DEBUG] [Thread-192910] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:02:37.977 [DEBUG] [Thread-192910] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:02:37.977 [DEBUG] [Thread-192910] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:02:37.977 [DEBUG] [Thread-192910] [transport.py] [_log()] Compression: none
2026-02-14T22:02:37.977 [DEBUG] [Thread-192910] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:02:38.036 [DEBUG] [Thread-192910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:02:38.036 [DEBUG] [Thread-192910] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:02:38.037 [DEBUG] [Thread-192910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:02:38.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:02:38.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:02:38.092 [DEBUG] [Thread-192910] [transport.py] [_log()] userauth is OK
2026-02-14T22:02:38.092 [DEBUG] [Thread-192910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:02:38.092 [DEBUG] [Thread-192910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:02:38.092 [DEBUG] [Thread-192910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:02:38.092 [DEBUG] [Thread-192910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:02:38.111 [INFO] [Thread-192910] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:02:38.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-14T22:02:38.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:02:38.917 [DEBUG] [Thread-192910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:02:38.918 [DEBUG] [Thread-192910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:02:38.965 [DEBUG] [Thread-192910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:02:38.966 [DEBUG] [Thread-192910] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:02:38.975 [DEBUG] [Thread-192910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:02:38.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:02:38.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-14T22:02:38.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-14T22:02:39.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:02:39.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:02:39.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:02:39.014 [DEBUG] [Thread-192910] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:02:50.318 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:02:50.319 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:02:51.352 [DEBUG] [Thread-192912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:02:59.490 [DEBUG] [Thread-192913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:03:06.408 [DEBUG] [Thread-192914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:03:09.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:03:09.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:03:09.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-14T22:03:10.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 2, 37), 7.31, 60.36, 0.0, 36.91, 10.03, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:03:10.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:02:37
2026-02-14T22:03:11.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:03:11.373 [DEBUG] [Thread-192915] [transport.py] [_log()] starting thread (client mode): 0xa57c3fa0
2026-02-14T22:03:11.374 [DEBUG] [Thread-192915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:03:11.394 [DEBUG] [Thread-192915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:03:11.394 [INFO] [Thread-192915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:03:11.397 [DEBUG] [Thread-192915] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:03:11.397 [DEBUG] [Thread-192915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:03:11.397 [DEBUG] [Thread-192915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:03:11.397 [DEBUG] [Thread-192915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:03:11.397 [DEBUG] [Thread-192915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:03:11.397 [DEBUG] [Thread-192915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:03:11.397 [DEBUG] [Thread-192915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:03:11.397 [DEBUG] [Thread-192915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:03:11.397 [DEBUG] [Thread-192915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:03:11.397 [DEBUG] [Thread-192915] [transport.py] [_log()] client lang: <none>
2026-02-14T22:03:11.397 [DEBUG] [Thread-192915] [transport.py] [_log()] server lang: <none>
2026-02-14T22:03:11.397 [DEBUG] [Thread-192915] [transport.py] [_log()] kex follows: False
2026-02-14T22:03:11.397 [DEBUG] [Thread-192915] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:03:11.397 [DEBUG] [Thread-192915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:03:11.397 [DEBUG] [Thread-192915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:03:11.397 [DEBUG] [Thread-192915] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:03:11.397 [DEBUG] [Thread-192915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:03:11.397 [DEBUG] [Thread-192915] [transport.py] [_log()] Compression: none
2026-02-14T22:03:11.397 [DEBUG] [Thread-192915] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:03:11.414 [DEBUG] [Thread-192915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:03:11.415 [DEBUG] [Thread-192915] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:03:11.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:03:11.416 [DEBUG] [Thread-192915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:03:11.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:03:11.418 [DEBUG] [Thread-192915] [transport.py] [_log()] userauth is OK
2026-02-14T22:03:11.418 [DEBUG] [Thread-192915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:03:11.418 [DEBUG] [Thread-192915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:03:11.418 [DEBUG] [Thread-192915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:03:11.419 [DEBUG] [Thread-192915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:03:11.442 [INFO] [Thread-192915] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:03:11.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:03:12.081 [DEBUG] [Thread-192915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:03:12.081 [DEBUG] [Thread-192915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:03:12.081 [DEBUG] [Thread-192915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:03:12.121 [DEBUG] [Thread-192915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:03:12.121 [DEBUG] [Thread-192915] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:03:12.125 [DEBUG] [Thread-192915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:03:12.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:03:12.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:03:12.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:03:12.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:03:12.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:03:12.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:03:12.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:03:12.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:03:12.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:03:12.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.835182 -999.00   +9.50  33.75     66   +3.50 1 1 2 1 1     0    0 5.55 -20.33 ZNESW 26.8 33.8 167.4 39.5 10.0 -25.0 9.9 -24.0 9.7 -22.8 10.1 -24.3
2026-02-14T22:03:12.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:03:12.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:03:12.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.835182
2026-02-14T22:03:12.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:03:12.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:03:12.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:03:12.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:03:12.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:03:12.157 [DEBUG] [Thread-192915] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:03:12.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:02:37', tmtdew=7.31, humidity=60.36, cloud=0.0, wind=36.91, temperature=10.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:02:37', seeing=3.82, atlas_timestamp='2026-02-14T20:02:39.725', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, -0.040749999999999176, 0.017250000000000654, -0.013999999999999346, 0.026500000000000412, 0.0012500000000006395, 0.02200000000000024, 0.011750000000001037, 0.010499999999998622, 0.021000000000000796, 0.014749999999999375, 0.0129999999999999, 0.028999999999999915, 0.06625000000000014, 0.0019999999999988916, 0.03399999999999892, 0.05874999999999986, 0.054499999999999105, -0.028499999999999304, -0.0007500000000000284, 0.04499999999999815, 0.048749999999998295, 0.012250000000001648, 0.03325000000000067, 0.05699999999999861, 0.09450000000000003, 0.04475000000000051, 0.0015000000000000568, 0.09200000000000053, 0.07800000000000118, 0.040000000000000924, 0.022500000000000853, 0.02874999999999872], zp_timestamp='2026-02-14T20:01:00')
2026-02-14T22:03:12.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:03:12.253 [DEBUG] [Thread-192918] [transport.py] [_log()] starting thread (client mode): 0xa2d6ff10
2026-02-14T22:03:12.253 [DEBUG] [Thread-192918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:03:12.268 [DEBUG] [Thread-192918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:03:12.268 [INFO] [Thread-192918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:03:12.276 [DEBUG] [Thread-192918] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:03:12.276 [DEBUG] [Thread-192918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:03:12.276 [DEBUG] [Thread-192918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:03:12.285 [DEBUG] [Thread-192918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:03:12.286 [DEBUG] [Thread-192918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:03:12.286 [DEBUG] [Thread-192918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:03:12.286 [DEBUG] [Thread-192918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:03:12.286 [DEBUG] [Thread-192918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:03:12.286 [DEBUG] [Thread-192918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:03:12.286 [DEBUG] [Thread-192918] [transport.py] [_log()] client lang: <none>
2026-02-14T22:03:12.286 [DEBUG] [Thread-192918] [transport.py] [_log()] server lang: <none>
2026-02-14T22:03:12.286 [DEBUG] [Thread-192918] [transport.py] [_log()] kex follows: False
2026-02-14T22:03:12.286 [DEBUG] [Thread-192918] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:03:12.286 [DEBUG] [Thread-192918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:03:12.286 [DEBUG] [Thread-192918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:03:12.286 [DEBUG] [Thread-192918] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:03:12.287 [DEBUG] [Thread-192918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:03:12.287 [DEBUG] [Thread-192918] [transport.py] [_log()] Compression: none
2026-02-14T22:03:12.287 [DEBUG] [Thread-192918] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:03:12.333 [DEBUG] [Thread-192918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:03:12.333 [DEBUG] [Thread-192918] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:03:12.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:03:12.334 [DEBUG] [Thread-192918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:03:12.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:03:12.392 [DEBUG] [Thread-192918] [transport.py] [_log()] userauth is OK
2026-02-14T22:03:12.393 [DEBUG] [Thread-192918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:03:12.393 [DEBUG] [Thread-192918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:03:12.393 [DEBUG] [Thread-192918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:03:12.393 [DEBUG] [Thread-192918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:03:12.412 [INFO] [Thread-192918] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:03:12.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:03:12.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:03:13.227 [DEBUG] [Thread-192918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:03:13.228 [DEBUG] [Thread-192918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:03:13.276 [DEBUG] [Thread-192918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:03:13.276 [DEBUG] [Thread-192918] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:03:13.285 [DEBUG] [Thread-192918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:03:13.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:03:13.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-14T22:03:13.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-14T22:03:13.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:03:13.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:03:13.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:03:13.322 [DEBUG] [Thread-192918] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:03:21.443 [DEBUG] [Thread-192920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:03:36.503 [DEBUG] [Thread-192921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:03:43.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:03:43.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:03:43.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-14T22:03:45.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 3, 12), 7.16, 61.17, 0.0, 35.34, 9.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:03:45.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:03:12
2026-02-14T22:03:45.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:03:45.818 [DEBUG] [Thread-192922] [transport.py] [_log()] starting thread (client mode): 0xa2d6d2d0
2026-02-14T22:03:45.819 [DEBUG] [Thread-192922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:03:45.838 [DEBUG] [Thread-192922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:03:45.839 [INFO] [Thread-192922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:03:45.842 [DEBUG] [Thread-192922] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:03:45.842 [DEBUG] [Thread-192922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:03:45.842 [DEBUG] [Thread-192922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:03:45.842 [DEBUG] [Thread-192922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:03:45.842 [DEBUG] [Thread-192922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:03:45.842 [DEBUG] [Thread-192922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:03:45.842 [DEBUG] [Thread-192922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:03:45.842 [DEBUG] [Thread-192922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:03:45.842 [DEBUG] [Thread-192922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:03:45.842 [DEBUG] [Thread-192922] [transport.py] [_log()] client lang: <none>
2026-02-14T22:03:45.842 [DEBUG] [Thread-192922] [transport.py] [_log()] server lang: <none>
2026-02-14T22:03:45.842 [DEBUG] [Thread-192922] [transport.py] [_log()] kex follows: False
2026-02-14T22:03:45.842 [DEBUG] [Thread-192922] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:03:45.842 [DEBUG] [Thread-192922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:03:45.842 [DEBUG] [Thread-192922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:03:45.842 [DEBUG] [Thread-192922] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:03:45.842 [DEBUG] [Thread-192922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:03:45.842 [DEBUG] [Thread-192922] [transport.py] [_log()] Compression: none
2026-02-14T22:03:45.842 [DEBUG] [Thread-192922] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:03:45.859 [DEBUG] [Thread-192922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:03:45.860 [DEBUG] [Thread-192922] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:03:45.860 [DEBUG] [Thread-192922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:03:45.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:03:45.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:03:45.863 [DEBUG] [Thread-192922] [transport.py] [_log()] userauth is OK
2026-02-14T22:03:45.863 [DEBUG] [Thread-192922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:03:45.863 [DEBUG] [Thread-192922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:03:45.863 [DEBUG] [Thread-192922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:03:45.864 [DEBUG] [Thread-192922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:03:45.897 [INFO] [Thread-192922] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:03:45.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:03:46.505 [DEBUG] [Thread-192922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:03:46.505 [DEBUG] [Thread-192922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:03:46.505 [DEBUG] [Thread-192922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:03:46.546 [DEBUG] [Thread-192922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:03:46.546 [DEBUG] [Thread-192922] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:03:46.549 [DEBUG] [Thread-192922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:03:46.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:03:46.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:03:46.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:03:46.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:03:46.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:03:46.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:03:46.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:03:46.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:03:46.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:03:46.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.835529 -999.00   +9.50  25.06     66   +3.50 1 1 1 1 1     0    0 5.60 -19.22 ZNESW 24.6 25.1 154.6 39.7 10.0 -25.0 9.9 -24.1 9.7 -23.0 10.1 -24.2
2026-02-14T22:03:46.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:03:46.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:03:46.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.835529
2026-02-14T22:03:46.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:03:46.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:03:46.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:03:46.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:03:46.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:03:46.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:03:12', tmtdew=7.16, humidity=61.17, cloud=0.0, wind=35.34, temperature=9.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:03:12', seeing=4.67, atlas_timestamp='2026-02-14T20:03:09.706', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, -0.040749999999999176, 0.017250000000000654, -0.013999999999999346, 0.026500000000000412, 0.0012500000000006395, 0.02200000000000024, 0.011750000000001037, 0.010499999999998622, 0.021000000000000796, 0.014749999999999375, 0.0129999999999999, 0.028999999999999915, 0.06625000000000014, 0.0019999999999988916, 0.03399999999999892, 0.05874999999999986, 0.054499999999999105, -0.028499999999999304, -0.0007500000000000284, 0.04499999999999815, 0.048749999999998295, 0.012250000000001648, 0.03325000000000067, 0.05699999999999861, 0.09450000000000003, 0.04475000000000051, 0.0015000000000000568, 0.09200000000000053, 0.07800000000000118, 0.040000000000000924, 0.022500000000000853, 0.02874999999999872], zp_timestamp='2026-02-14T20:01:00')
2026-02-14T22:03:46.576 [DEBUG] [Thread-192922] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:03: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-14T22:03:46.672 [DEBUG] [Thread-192925] [transport.py] [_log()] starting thread (client mode): 0xa57c3670
2026-02-14T22:03:46.672 [DEBUG] [Thread-192925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:03:46.687 [DEBUG] [Thread-192925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:03:46.687 [INFO] [Thread-192925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:03:46.694 [DEBUG] [Thread-192925] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:03:46.695 [DEBUG] [Thread-192925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:03:46.695 [DEBUG] [Thread-192925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:03:46.695 [DEBUG] [Thread-192925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:03:46.695 [DEBUG] [Thread-192925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:03:46.695 [DEBUG] [Thread-192925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:03:46.695 [DEBUG] [Thread-192925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:03:46.695 [DEBUG] [Thread-192925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:03:46.695 [DEBUG] [Thread-192925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:03:46.695 [DEBUG] [Thread-192925] [transport.py] [_log()] client lang: <none>
2026-02-14T22:03:46.695 [DEBUG] [Thread-192925] [transport.py] [_log()] server lang: <none>
2026-02-14T22:03:46.695 [DEBUG] [Thread-192925] [transport.py] [_log()] kex follows: False
2026-02-14T22:03:46.695 [DEBUG] [Thread-192925] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:03:46.695 [DEBUG] [Thread-192925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:03:46.695 [DEBUG] [Thread-192925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:03:46.695 [DEBUG] [Thread-192925] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:03:46.695 [DEBUG] [Thread-192925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:03:46.695 [DEBUG] [Thread-192925] [transport.py] [_log()] Compression: none
2026-02-14T22:03:46.696 [DEBUG] [Thread-192925] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:03:46.754 [DEBUG] [Thread-192925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:03:46.754 [DEBUG] [Thread-192925] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:03:46.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:03:46.755 [DEBUG] [Thread-192925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:03:46.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:03:46.810 [DEBUG] [Thread-192925] [transport.py] [_log()] userauth is OK
2026-02-14T22:03:46.810 [DEBUG] [Thread-192925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:03:46.810 [DEBUG] [Thread-192925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:03:46.810 [DEBUG] [Thread-192925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:03:46.811 [DEBUG] [Thread-192925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:03:46.835 [INFO] [Thread-192925] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:03:46.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-14T22:03:46.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:03:47.652 [DEBUG] [Thread-192925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:03:47.653 [DEBUG] [Thread-192925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:03:47.700 [DEBUG] [Thread-192925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:03:47.700 [DEBUG] [Thread-192925] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:03:47.710 [DEBUG] [Thread-192925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:03:47.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:03:47.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22: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') -> 00000000
2026-02-14T22:03:47.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:03:47.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:03:47.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:03:47.747 [DEBUG] [Thread-192925] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:03:50.523 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:03:50.524 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:03:51.538 [DEBUG] [Thread-192927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:03:59.553 [DEBUG] [Thread-192928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:04:06.584 [DEBUG] [Thread-192929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:04:10.770 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:04:17.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:04:17.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:04:17.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-14T22:04:19.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 3, 47), 7.12, 61.13, 0.0, 38.22, 9.6, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:04:19.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:03:47
2026-02-14T22:04:20.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:04:20.511 [DEBUG] [Thread-192930] [transport.py] [_log()] starting thread (client mode): 0xa57c1270
2026-02-14T22:04:20.511 [DEBUG] [Thread-192930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:04:20.530 [DEBUG] [Thread-192930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:04:20.530 [INFO] [Thread-192930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:04:20.531 [DEBUG] [Thread-192930] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:04:20.531 [DEBUG] [Thread-192930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:04:20.531 [DEBUG] [Thread-192930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:04:20.531 [DEBUG] [Thread-192930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:04:20.531 [DEBUG] [Thread-192930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:04:20.531 [DEBUG] [Thread-192930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:04:20.531 [DEBUG] [Thread-192930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:04:20.531 [DEBUG] [Thread-192930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:04:20.531 [DEBUG] [Thread-192930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:04:20.531 [DEBUG] [Thread-192930] [transport.py] [_log()] client lang: <none>
2026-02-14T22:04:20.531 [DEBUG] [Thread-192930] [transport.py] [_log()] server lang: <none>
2026-02-14T22:04:20.532 [DEBUG] [Thread-192930] [transport.py] [_log()] kex follows: False
2026-02-14T22:04:20.532 [DEBUG] [Thread-192930] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:04:20.532 [DEBUG] [Thread-192930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:04:20.532 [DEBUG] [Thread-192930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:04:20.532 [DEBUG] [Thread-192930] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:04:20.532 [DEBUG] [Thread-192930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:04:20.532 [DEBUG] [Thread-192930] [transport.py] [_log()] Compression: none
2026-02-14T22:04:20.532 [DEBUG] [Thread-192930] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:04:20.550 [DEBUG] [Thread-192930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:04:20.550 [DEBUG] [Thread-192930] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:04:20.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:04:20.551 [DEBUG] [Thread-192930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:04:20.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:04:20.553 [DEBUG] [Thread-192930] [transport.py] [_log()] userauth is OK
2026-02-14T22:04:20.553 [DEBUG] [Thread-192930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:04:20.553 [DEBUG] [Thread-192930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:04:20.553 [DEBUG] [Thread-192930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:04:20.553 [DEBUG] [Thread-192930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:04:20.571 [INFO] [Thread-192930] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:04:20.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:04:21.216 [DEBUG] [Thread-192930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:04:21.217 [DEBUG] [Thread-192930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:04:21.217 [DEBUG] [Thread-192930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:04:21.258 [DEBUG] [Thread-192930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:04:21.258 [DEBUG] [Thread-192930] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:04:21.261 [DEBUG] [Thread-192930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:04:21.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:04:21.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:04:21.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:04:21.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:04:21.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:04:21.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:04:21.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:04:21.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:04:21.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:04:21.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.836223 -999.00   +9.50  27.07     66   +3.50 1 1 1 1 1     0    0 5.65 -19.58 ZNESW 31.4 27.1 162.6 30.2 10.0 -25.0 9.9 -24.1 9.7 -23.0 10.0 -24.3
2026-02-14T22:04:21.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:04:21.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:04:21.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.836223
2026-02-14T22:04:21.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:04:21.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:04:21.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:04:21.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:04:21.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:04:21.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:03:47', tmtdew=7.12, humidity=61.13, cloud=0.0, wind=38.22, temperature=9.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:03:47', seeing=4.15, atlas_timestamp='2026-02-14T20:04:09.667', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, -0.040749999999999176, 0.017250000000000654, -0.013999999999999346, 0.026500000000000412, 0.0012500000000006395, 0.02200000000000024, 0.011750000000001037, 0.010499999999998622, 0.021000000000000796, 0.014749999999999375, 0.0129999999999999, 0.028999999999999915, 0.06625000000000014, 0.0019999999999988916, 0.03399999999999892, 0.05874999999999986, 0.054499999999999105, -0.028499999999999304, -0.0007500000000000284, 0.04499999999999815, 0.048749999999998295, 0.012250000000001648, 0.03325000000000067, 0.05699999999999861, 0.09450000000000003, 0.04475000000000051, 0.0015000000000000568, 0.09200000000000053, 0.07800000000000118, 0.040000000000000924, 0.022500000000000853, 0.02874999999999872], zp_timestamp='2026-02-14T20:01:00')
2026-02-14T22:04:21.285 [DEBUG] [Thread-192930] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:04:21.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-14T22:04:21.376 [DEBUG] [Thread-192933] [transport.py] [_log()] starting thread (client mode): 0xa2d6fb80
2026-02-14T22:04:21.376 [DEBUG] [Thread-192933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:04:21.390 [DEBUG] [Thread-192933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:04:21.390 [INFO] [Thread-192933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:04:21.397 [DEBUG] [Thread-192933] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:04:21.398 [DEBUG] [Thread-192933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:04:21.398 [DEBUG] [Thread-192933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:04:21.398 [DEBUG] [Thread-192933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:04:21.398 [DEBUG] [Thread-192933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:04:21.398 [DEBUG] [Thread-192933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:04:21.398 [DEBUG] [Thread-192933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:04:21.398 [DEBUG] [Thread-192933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:04:21.398 [DEBUG] [Thread-192933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:04:21.398 [DEBUG] [Thread-192933] [transport.py] [_log()] client lang: <none>
2026-02-14T22:04:21.398 [DEBUG] [Thread-192933] [transport.py] [_log()] server lang: <none>
2026-02-14T22:04:21.398 [DEBUG] [Thread-192933] [transport.py] [_log()] kex follows: False
2026-02-14T22:04:21.398 [DEBUG] [Thread-192933] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:04:21.398 [DEBUG] [Thread-192933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:04:21.398 [DEBUG] [Thread-192933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:04:21.398 [DEBUG] [Thread-192933] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:04:21.398 [DEBUG] [Thread-192933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:04:21.398 [DEBUG] [Thread-192933] [transport.py] [_log()] Compression: none
2026-02-14T22:04:21.398 [DEBUG] [Thread-192933] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:04:21.467 [DEBUG] [Thread-192933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:04:21.468 [DEBUG] [Thread-192933] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:04:21.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:04:21.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:04:21.469 [DEBUG] [Thread-192933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:04:21.527 [DEBUG] [Thread-192933] [transport.py] [_log()] userauth is OK
2026-02-14T22:04:21.527 [DEBUG] [Thread-192933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:04:21.527 [DEBUG] [Thread-192933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:04:21.527 [DEBUG] [Thread-192933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:04:21.528 [DEBUG] [Thread-192933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:04:21.550 [INFO] [Thread-192933] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:04:21.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-14T22:04:21.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:04:21.621 [DEBUG] [Thread-192935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:04:22.298 [DEBUG] [Thread-192933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:04:22.299 [DEBUG] [Thread-192933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:04:22.346 [DEBUG] [Thread-192933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:04:22.346 [DEBUG] [Thread-192933] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:04:22.355 [DEBUG] [Thread-192933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:04:22.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:04:22.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-14T22:04:22.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:04:22.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:04:22.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:04:22.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:04:22.390 [DEBUG] [Thread-192933] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:04:36.668 [DEBUG] [Thread-192936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:04:50.725 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:04:50.726 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:04:51.706 [DEBUG] [Thread-192937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:04:52.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:04:52.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:04:52.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-14T22:04:54.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 4, 23), 7.1, 61.18, 0.0, 38.73, 9.6, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:04:54.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:04:23
2026-02-14T22:04:54.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:04:54.782 [DEBUG] [Thread-192938] [transport.py] [_log()] starting thread (client mode): 0xa2d6e470
2026-02-14T22:04:54.782 [DEBUG] [Thread-192938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:04:54.802 [DEBUG] [Thread-192938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:04:54.802 [INFO] [Thread-192938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:04:54.803 [DEBUG] [Thread-192938] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:04:54.803 [DEBUG] [Thread-192938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:04:54.803 [DEBUG] [Thread-192938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:04:54.803 [DEBUG] [Thread-192938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:04:54.803 [DEBUG] [Thread-192938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:04:54.804 [DEBUG] [Thread-192938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:04:54.804 [DEBUG] [Thread-192938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:04:54.804 [DEBUG] [Thread-192938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:04:54.804 [DEBUG] [Thread-192938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:04:54.804 [DEBUG] [Thread-192938] [transport.py] [_log()] client lang: <none>
2026-02-14T22:04:54.804 [DEBUG] [Thread-192938] [transport.py] [_log()] server lang: <none>
2026-02-14T22:04:54.804 [DEBUG] [Thread-192938] [transport.py] [_log()] kex follows: False
2026-02-14T22:04:54.804 [DEBUG] [Thread-192938] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:04:54.804 [DEBUG] [Thread-192938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:04:54.804 [DEBUG] [Thread-192938] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:04:54.804 [DEBUG] [Thread-192938] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:04:54.804 [DEBUG] [Thread-192938] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:04:54.804 [DEBUG] [Thread-192938] [transport.py] [_log()] Compression: none
2026-02-14T22:04:54.804 [DEBUG] [Thread-192938] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:04:54.818 [DEBUG] [Thread-192938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:04:54.818 [DEBUG] [Thread-192938] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:04:54.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:04:54.819 [DEBUG] [Thread-192938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:04:54.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:04:54.821 [DEBUG] [Thread-192938] [transport.py] [_log()] userauth is OK
2026-02-14T22:04:54.821 [DEBUG] [Thread-192938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:04:54.821 [DEBUG] [Thread-192938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:04:54.821 [DEBUG] [Thread-192938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:04:54.821 [DEBUG] [Thread-192938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:04:54.846 [INFO] [Thread-192938] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:04:54.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:04:55.512 [DEBUG] [Thread-192938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:04:55.512 [DEBUG] [Thread-192938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:04:55.512 [DEBUG] [Thread-192938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:04:55.553 [DEBUG] [Thread-192938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:04:55.554 [DEBUG] [Thread-192938] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:04:55.557 [DEBUG] [Thread-192938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:04:55.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:04:55.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:04:55.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:04:55.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:04:55.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:04:55.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:04:55.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:04:55.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:04:55.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:04:55.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.836571 -999.00   +9.50  31.06     66   +3.60 1 1 2 1 1     0    0 5.66 -18.51 ZNESW 28.3 31.1 156.4 38.0 10.0 -25.1 9.8 -24.0 9.7 -23.0 10.1 -24.2
2026-02-14T22:04:55.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:04:55.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:04:55.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.836571
2026-02-14T22:04:55.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:04:55.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:04:55.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:04:55.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:04:55.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:04:55.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:04:23', tmtdew=7.1, humidity=61.18, cloud=0.0, wind=38.73, temperature=9.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:04:23', seeing=3.57, atlas_timestamp='2026-02-14T20:04:39.734', atlas_cloud=1, atlas_rain=1, zp_data=[0.01774999999999949, -0.040749999999999176, 0.017250000000000654, -0.013999999999999346, 0.026500000000000412, 0.0012500000000006395, 0.02200000000000024, 0.011750000000001037, 0.010499999999998622, 0.021000000000000796, 0.014749999999999375, 0.0129999999999999, 0.028999999999999915, 0.06625000000000014, 0.0019999999999988916, 0.03399999999999892, 0.05874999999999986, 0.054499999999999105, -0.028499999999999304, -0.0007500000000000284, 0.04499999999999815, 0.048749999999998295, 0.012250000000001648, 0.03325000000000067, 0.05699999999999861, 0.09450000000000003, 0.04475000000000051, 0.0015000000000000568, 0.09200000000000053, 0.07800000000000118, 0.040000000000000924, 0.022500000000000853, 0.02874999999999872], zp_timestamp='2026-02-14T20:01:00')
2026-02-14T22:04:55.582 [DEBUG] [Thread-192938] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:04:55.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-14T22:04:55.687 [DEBUG] [Thread-192941] [transport.py] [_log()] starting thread (client mode): 0xa2d12500
2026-02-14T22:04:55.687 [DEBUG] [Thread-192941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:04:55.702 [DEBUG] [Thread-192941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:04:55.702 [INFO] [Thread-192941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:04:55.709 [DEBUG] [Thread-192941] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:04:55.710 [DEBUG] [Thread-192941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:04:55.710 [DEBUG] [Thread-192941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:04:55.710 [DEBUG] [Thread-192941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:04:55.710 [DEBUG] [Thread-192941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:04:55.710 [DEBUG] [Thread-192941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:04:55.710 [DEBUG] [Thread-192941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:04:55.710 [DEBUG] [Thread-192941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:04:55.710 [DEBUG] [Thread-192941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:04:55.710 [DEBUG] [Thread-192941] [transport.py] [_log()] client lang: <none>
2026-02-14T22:04:55.710 [DEBUG] [Thread-192941] [transport.py] [_log()] server lang: <none>
2026-02-14T22:04:55.710 [DEBUG] [Thread-192941] [transport.py] [_log()] kex follows: False
2026-02-14T22:04:55.710 [DEBUG] [Thread-192941] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:04:55.710 [DEBUG] [Thread-192941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:04:55.710 [DEBUG] [Thread-192941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:04:55.710 [DEBUG] [Thread-192941] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:04:55.710 [DEBUG] [Thread-192941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:04:55.711 [DEBUG] [Thread-192941] [transport.py] [_log()] Compression: none
2026-02-14T22:04:55.711 [DEBUG] [Thread-192941] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:04:55.768 [DEBUG] [Thread-192941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:04:55.769 [DEBUG] [Thread-192941] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:04:55.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:04:55.770 [DEBUG] [Thread-192941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:04:55.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:04:55.824 [DEBUG] [Thread-192941] [transport.py] [_log()] userauth is OK
2026-02-14T22:04:55.824 [DEBUG] [Thread-192941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:04:55.824 [DEBUG] [Thread-192941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:04:55.824 [DEBUG] [Thread-192941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:04:55.824 [DEBUG] [Thread-192941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:04:55.843 [INFO] [Thread-192941] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:04:55.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-14T22:04:55.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:04:56.625 [DEBUG] [Thread-192941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:04:56.625 [DEBUG] [Thread-192941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:04:56.673 [DEBUG] [Thread-192941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:04:56.674 [DEBUG] [Thread-192941] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:04:56.683 [DEBUG] [Thread-192941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:04:56.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:04:56.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-14T22:04:56.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-14T22:04:56.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:04:56.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:04:56.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:04:56.717 [DEBUG] [Thread-192941] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:04:59.613 [DEBUG] [Thread-192943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:05:06.740 [DEBUG] [Thread-192944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:05:21.797 [DEBUG] [Thread-192945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:05:26.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:05:26.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:05:26.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-14T22:05:28.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 4, 59), 7.08, 61.3, 0.0, 37.23, 9.63, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:05:28.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:04:59
2026-02-14T22:05:29.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:05:29.416 [DEBUG] [Thread-192946] [transport.py] [_log()] starting thread (client mode): 0xa2d7a9b0
2026-02-14T22:05:29.416 [DEBUG] [Thread-192946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:05:29.436 [DEBUG] [Thread-192946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:05:29.437 [INFO] [Thread-192946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:05:29.439 [DEBUG] [Thread-192946] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:05:29.440 [DEBUG] [Thread-192946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:05:29.440 [DEBUG] [Thread-192946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:05:29.440 [DEBUG] [Thread-192946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:05:29.440 [DEBUG] [Thread-192946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:05:29.440 [DEBUG] [Thread-192946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:05:29.440 [DEBUG] [Thread-192946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:05:29.440 [DEBUG] [Thread-192946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:05:29.440 [DEBUG] [Thread-192946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:05:29.440 [DEBUG] [Thread-192946] [transport.py] [_log()] client lang: <none>
2026-02-14T22:05:29.440 [DEBUG] [Thread-192946] [transport.py] [_log()] server lang: <none>
2026-02-14T22:05:29.440 [DEBUG] [Thread-192946] [transport.py] [_log()] kex follows: False
2026-02-14T22:05:29.440 [DEBUG] [Thread-192946] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:05:29.440 [DEBUG] [Thread-192946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:05:29.440 [DEBUG] [Thread-192946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:05:29.440 [DEBUG] [Thread-192946] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:05:29.440 [DEBUG] [Thread-192946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:05:29.440 [DEBUG] [Thread-192946] [transport.py] [_log()] Compression: none
2026-02-14T22:05:29.440 [DEBUG] [Thread-192946] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:05:29.457 [DEBUG] [Thread-192946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:05:29.457 [DEBUG] [Thread-192946] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:05:29.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:05:29.458 [DEBUG] [Thread-192946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:05:29.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:05:29.502 [DEBUG] [Thread-192946] [transport.py] [_log()] userauth is OK
2026-02-14T22:05:29.502 [DEBUG] [Thread-192946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:05:29.502 [DEBUG] [Thread-192946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:05:29.502 [DEBUG] [Thread-192946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:05:29.502 [DEBUG] [Thread-192946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:05:29.525 [INFO] [Thread-192946] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:05:29.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:05:30.155 [DEBUG] [Thread-192946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:05:30.155 [DEBUG] [Thread-192946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:05:30.156 [DEBUG] [Thread-192946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:05:30.196 [DEBUG] [Thread-192946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:05:30.197 [DEBUG] [Thread-192946] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:05:30.200 [DEBUG] [Thread-192946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:05:30.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:05:30.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:05:30.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:05:30.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:05:30.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:05:30.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:05:30.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:05:30.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:05:30.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:05:30.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.836918 -999.00   +9.50  23.79     66   +3.60 1 1 1 1 1     0    0 5.69 -19.70 ZNESW 28.5 23.8 147.1 39.6 10.0 -25.1 9.9 -24.0 9.7 -23.1 10.0 -24.2
2026-02-14T22:05:30.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:05:30.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:05:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.836918
2026-02-14T22:05:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:05:30.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:05:30.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:05:30.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:05:30.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:05:30.233 [DEBUG] [Thread-192946] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:05:30.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:04:59', tmtdew=7.08, humidity=61.3, cloud=0.0, wind=37.23, temperature=9.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:04:59', seeing=2.89, atlas_timestamp='2026-02-14T20:05:09.715', atlas_cloud=1, atlas_rain=1, zp_data=[-0.003750000000000142, -0.03474999999999895, 0.03625000000000078, 0.013499999999998735, 0.06099999999999994, 0.011250000000000426, 0.0039999999999995595, -0.014749999999999375, 0.02499999999999858, 0.008500000000001506, -0.010249999999999204, 0.046499999999999986, 0.05299999999999905, 0.04624999999999879, 0.0030000000000001137, 0.019499999999998963, 0.04124999999999979, 0.06949999999999967, -0.04200000000000159, -0.013750000000001705, 0.07899999999999885, 0.06474999999999831, 0.010750000000001592, 0.03575000000000017, 0.04399999999999871, 0.07249999999999979, 0.03175000000000061, 0.0045000000000001705, 0.054999999999999716, 0.03950000000000031, 0.05649999999999977, 0.005500000000001393, 0.012749999999998707], zp_timestamp='2026-02-14T20:03:00')
2026-02-14T22:05:30.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-14T22:05:30.333 [DEBUG] [Thread-192949] [transport.py] [_log()] starting thread (client mode): 0xa2d78d90
2026-02-14T22:05:30.333 [DEBUG] [Thread-192949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:05:30.348 [DEBUG] [Thread-192949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:05:30.348 [INFO] [Thread-192949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:05:30.356 [DEBUG] [Thread-192949] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:05:30.356 [DEBUG] [Thread-192949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:05:30.356 [DEBUG] [Thread-192949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:05:30.356 [DEBUG] [Thread-192949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:05:30.356 [DEBUG] [Thread-192949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:05:30.356 [DEBUG] [Thread-192949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:05:30.356 [DEBUG] [Thread-192949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:05:30.356 [DEBUG] [Thread-192949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:05:30.356 [DEBUG] [Thread-192949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:05:30.356 [DEBUG] [Thread-192949] [transport.py] [_log()] client lang: <none>
2026-02-14T22:05:30.356 [DEBUG] [Thread-192949] [transport.py] [_log()] server lang: <none>
2026-02-14T22:05:30.356 [DEBUG] [Thread-192949] [transport.py] [_log()] kex follows: False
2026-02-14T22:05:30.356 [DEBUG] [Thread-192949] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:05:30.357 [DEBUG] [Thread-192949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:05:30.357 [DEBUG] [Thread-192949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:05:30.357 [DEBUG] [Thread-192949] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:05:30.357 [DEBUG] [Thread-192949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:05:30.357 [DEBUG] [Thread-192949] [transport.py] [_log()] Compression: none
2026-02-14T22:05:30.357 [DEBUG] [Thread-192949] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:05:30.422 [DEBUG] [Thread-192949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:05:30.422 [DEBUG] [Thread-192949] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:05:30.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:05:30.423 [DEBUG] [Thread-192949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:05:30.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:05:30.487 [DEBUG] [Thread-192949] [transport.py] [_log()] userauth is OK
2026-02-14T22:05:30.488 [DEBUG] [Thread-192949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:05:30.488 [DEBUG] [Thread-192949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:05:30.488 [DEBUG] [Thread-192949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:05:30.488 [DEBUG] [Thread-192949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:05:30.515 [INFO] [Thread-192949] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:05:30.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:05:30.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:05:31.326 [DEBUG] [Thread-192949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:05:31.327 [DEBUG] [Thread-192949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:05:31.374 [DEBUG] [Thread-192949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:05:31.375 [DEBUG] [Thread-192949] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:05:31.387 [DEBUG] [Thread-192949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:05:31.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:05: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-14T22:05:31.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-14T22:05:31.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:05:31.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:05:31.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:05:31.429 [DEBUG] [Thread-192949] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:05:36.831 [DEBUG] [Thread-192951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:05:44.203 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:05:50.925 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:05:50.925 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:05:51.887 [DEBUG] [Thread-192952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:05:59.692 [DEBUG] [Thread-192953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:06:01.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:06:01.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:06:01.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-14T22:06:03.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 5, 34), 7.24, 60.63, 0.0, 39.2, 9.87, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:06:03.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:05:34
2026-02-14T22:06:03.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:06:03.850 [DEBUG] [Thread-192954] [transport.py] [_log()] starting thread (client mode): 0xa57c1420
2026-02-14T22:06:03.850 [DEBUG] [Thread-192954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:06:03.870 [DEBUG] [Thread-192954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:06:03.870 [INFO] [Thread-192954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:06:03.873 [DEBUG] [Thread-192954] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:06:03.873 [DEBUG] [Thread-192954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:06:03.873 [DEBUG] [Thread-192954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:06:03.874 [DEBUG] [Thread-192954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:06:03.874 [DEBUG] [Thread-192954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:06:03.874 [DEBUG] [Thread-192954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:06:03.874 [DEBUG] [Thread-192954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:06:03.874 [DEBUG] [Thread-192954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:06:03.874 [DEBUG] [Thread-192954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:06:03.874 [DEBUG] [Thread-192954] [transport.py] [_log()] client lang: <none>
2026-02-14T22:06:03.874 [DEBUG] [Thread-192954] [transport.py] [_log()] server lang: <none>
2026-02-14T22:06:03.874 [DEBUG] [Thread-192954] [transport.py] [_log()] kex follows: False
2026-02-14T22:06:03.874 [DEBUG] [Thread-192954] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:06:03.874 [DEBUG] [Thread-192954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:06:03.874 [DEBUG] [Thread-192954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:06:03.874 [DEBUG] [Thread-192954] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:06:03.874 [DEBUG] [Thread-192954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:06:03.874 [DEBUG] [Thread-192954] [transport.py] [_log()] Compression: none
2026-02-14T22:06:03.874 [DEBUG] [Thread-192954] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:06:03.892 [DEBUG] [Thread-192954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:06:03.892 [DEBUG] [Thread-192954] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:06:03.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:06:03.893 [DEBUG] [Thread-192954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:06:03.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:06:03.895 [DEBUG] [Thread-192954] [transport.py] [_log()] userauth is OK
2026-02-14T22:06:03.895 [DEBUG] [Thread-192954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:06:03.895 [DEBUG] [Thread-192954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:06:03.895 [DEBUG] [Thread-192954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:06:03.895 [DEBUG] [Thread-192954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:06:03.931 [INFO] [Thread-192954] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:06:03.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:06:04.582 [DEBUG] [Thread-192954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:06:04.582 [DEBUG] [Thread-192954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:06:04.583 [DEBUG] [Thread-192954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:06:04.623 [DEBUG] [Thread-192954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:06:04.624 [DEBUG] [Thread-192954] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:06:04.627 [DEBUG] [Thread-192954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:06:04.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:06:04.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:06:04.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:06:04.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:06:04.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:06:04.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:06:04.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:06:04.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:06:04.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:06:04.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.837265 -999.00   +9.50  22.45     66   +3.60 1 1 1 1 1     0    0 5.55 -19.95 ZNESW 20.2 22.4 162.1 32.1 10.0 -25.1 9.8 -24.2 9.7 -23.0 10.0 -24.2
2026-02-14T22:06:04.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:06:04.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:06:04.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.837265
2026-02-14T22:06:04.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:06:04.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:06:04.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:06:04.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:06:04.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:06:04.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:05:34', tmtdew=7.24, humidity=60.63, cloud=0.0, wind=39.2, temperature=9.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:05:35', seeing=3.49, atlas_timestamp='2026-02-14T20:05:39.696', atlas_cloud=1, atlas_rain=1, zp_data=[-0.003750000000000142, -0.03474999999999895, 0.03625000000000078, 0.013499999999998735, 0.06099999999999994, 0.011250000000000426, 0.0039999999999995595, -0.014749999999999375, 0.02499999999999858, 0.008500000000001506, -0.010249999999999204, 0.046499999999999986, 0.05299999999999905, 0.04624999999999879, 0.0030000000000001137, 0.019499999999998963, 0.04124999999999979, 0.06949999999999967, -0.04200000000000159, -0.013750000000001705, 0.07899999999999885, 0.06474999999999831, 0.010750000000001592, 0.03575000000000017, 0.04399999999999871, 0.07249999999999979, 0.03175000000000061, 0.0045000000000001705, 0.054999999999999716, 0.03950000000000031, 0.05649999999999977, 0.005500000000001393, 0.012749999999998707], zp_timestamp='2026-02-14T20:03:00')
2026-02-14T22:06:04.650 [DEBUG] [Thread-192954] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:06:04.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:06:04.745 [DEBUG] [Thread-192957] [transport.py] [_log()] starting thread (client mode): 0xa2d02dd0
2026-02-14T22:06:04.745 [DEBUG] [Thread-192957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:06:04.759 [DEBUG] [Thread-192957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:06:04.759 [INFO] [Thread-192957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:06:04.769 [DEBUG] [Thread-192957] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:06:04.770 [DEBUG] [Thread-192957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:06:04.770 [DEBUG] [Thread-192957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:06:04.770 [DEBUG] [Thread-192957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:06:04.770 [DEBUG] [Thread-192957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:06:04.770 [DEBUG] [Thread-192957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:06:04.770 [DEBUG] [Thread-192957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:06:04.770 [DEBUG] [Thread-192957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:06:04.771 [DEBUG] [Thread-192957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:06:04.771 [DEBUG] [Thread-192957] [transport.py] [_log()] client lang: <none>
2026-02-14T22:06:04.771 [DEBUG] [Thread-192957] [transport.py] [_log()] server lang: <none>
2026-02-14T22:06:04.771 [DEBUG] [Thread-192957] [transport.py] [_log()] kex follows: False
2026-02-14T22:06:04.771 [DEBUG] [Thread-192957] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:06:04.771 [DEBUG] [Thread-192957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:06:04.771 [DEBUG] [Thread-192957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:06:04.771 [DEBUG] [Thread-192957] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:06:04.772 [DEBUG] [Thread-192957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:06:04.772 [DEBUG] [Thread-192957] [transport.py] [_log()] Compression: none
2026-02-14T22:06:04.772 [DEBUG] [Thread-192957] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:06:04.825 [DEBUG] [Thread-192957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:06:04.826 [DEBUG] [Thread-192957] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:06:04.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:06:04.827 [DEBUG] [Thread-192957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:06:04.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:06:04.881 [DEBUG] [Thread-192957] [transport.py] [_log()] userauth is OK
2026-02-14T22:06:04.881 [DEBUG] [Thread-192957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:06:04.881 [DEBUG] [Thread-192957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:06:04.882 [DEBUG] [Thread-192957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:06:04.882 [DEBUG] [Thread-192957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:06:04.900 [INFO] [Thread-192957] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:06:04.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:06:04.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:06:05.753 [DEBUG] [Thread-192957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:06:05.754 [DEBUG] [Thread-192957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:06:05.802 [DEBUG] [Thread-192957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:06:05.802 [DEBUG] [Thread-192957] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:06:05.815 [DEBUG] [Thread-192957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:06:05.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:06:05.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-14T22:06:05.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-14T22:06:05.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:06:05.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:06:05.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:06:05.855 [DEBUG] [Thread-192957] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:06:06.922 [DEBUG] [Thread-192959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:06:21.974 [DEBUG] [Thread-192960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:06:35.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:06:35.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:06:35.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-14T22:06:37.007 [DEBUG] [Thread-192961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:06:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 6, 10), 7.05, 61.4, 0.0, 37.72, 9.6, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:06:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:06:10
2026-02-14T22:06:38.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:06:38.365 [DEBUG] [Thread-192962] [transport.py] [_log()] starting thread (client mode): 0xa2d02200
2026-02-14T22:06:38.365 [DEBUG] [Thread-192962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:06:38.378 [DEBUG] [Thread-192962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:06:38.378 [INFO] [Thread-192962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:06:38.382 [DEBUG] [Thread-192962] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:06:38.382 [DEBUG] [Thread-192962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:06:38.382 [DEBUG] [Thread-192962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:06:38.382 [DEBUG] [Thread-192962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:06:38.382 [DEBUG] [Thread-192962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:06:38.382 [DEBUG] [Thread-192962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:06:38.382 [DEBUG] [Thread-192962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:06:38.382 [DEBUG] [Thread-192962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:06:38.382 [DEBUG] [Thread-192962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:06:38.382 [DEBUG] [Thread-192962] [transport.py] [_log()] client lang: <none>
2026-02-14T22:06:38.382 [DEBUG] [Thread-192962] [transport.py] [_log()] server lang: <none>
2026-02-14T22:06:38.383 [DEBUG] [Thread-192962] [transport.py] [_log()] kex follows: False
2026-02-14T22:06:38.383 [DEBUG] [Thread-192962] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:06:38.383 [DEBUG] [Thread-192962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:06:38.383 [DEBUG] [Thread-192962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:06:38.383 [DEBUG] [Thread-192962] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:06:38.383 [DEBUG] [Thread-192962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:06:38.383 [DEBUG] [Thread-192962] [transport.py] [_log()] Compression: none
2026-02-14T22:06:38.383 [DEBUG] [Thread-192962] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:06:38.397 [DEBUG] [Thread-192962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:06:38.398 [DEBUG] [Thread-192962] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:06:38.398 [DEBUG] [Thread-192962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:06:38.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:06:38.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:06:38.399 [DEBUG] [Thread-192962] [transport.py] [_log()] userauth is OK
2026-02-14T22:06:38.400 [DEBUG] [Thread-192962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:06:38.400 [DEBUG] [Thread-192962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:06:38.400 [DEBUG] [Thread-192962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:06:38.400 [DEBUG] [Thread-192962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:06:38.431 [INFO] [Thread-192962] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:06:38.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:06:39.081 [DEBUG] [Thread-192962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:06:39.081 [DEBUG] [Thread-192962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:06:39.081 [DEBUG] [Thread-192962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:06:39.122 [DEBUG] [Thread-192962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:06:39.122 [DEBUG] [Thread-192962] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:06:39.124 [DEBUG] [Thread-192962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:06:39.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:06:39.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:06:39.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:06:39.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:06:39.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:06:39.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:06:39.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:06:39.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:06:39.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:06:39.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.837612 -999.00   +9.50  24.08     66   +3.60 1 1 1 1 1     0    0 5.53 -20.98 ZNESW 29.8 24.1 148.0 35.4 10.0 -25.0 9.8 -24.1 9.7 -23.0 10.0 -24.3
2026-02-14T22:06:39.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:06:39.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:06:39.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.837612
2026-02-14T22:06:39.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:06:39.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:06:39.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:06:39.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:06:39.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:06:39.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:06:10', tmtdew=7.05, humidity=61.4, cloud=0.0, wind=37.72, temperature=9.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:06:10', seeing=3.63, atlas_timestamp='2026-02-14T20:06:09.677', atlas_cloud=1, atlas_rain=1, zp_data=[-0.003750000000000142, -0.03474999999999895, 0.03625000000000078, 0.013499999999998735, 0.06099999999999994, 0.011250000000000426, 0.0039999999999995595, -0.014749999999999375, 0.02499999999999858, 0.008500000000001506, -0.010249999999999204, 0.046499999999999986, 0.05299999999999905, 0.04624999999999879, 0.0030000000000001137, 0.019499999999998963, 0.04124999999999979, 0.06949999999999967, -0.04200000000000159, -0.013750000000001705, 0.07899999999999885, 0.06474999999999831, 0.010750000000001592, 0.03575000000000017, 0.04399999999999871, 0.07249999999999979, 0.03175000000000061, 0.0045000000000001705, 0.054999999999999716, 0.03950000000000031, 0.05649999999999977, 0.005500000000001393, 0.012749999999998707], zp_timestamp='2026-02-14T20:03:00')
2026-02-14T22:06:39.145 [DEBUG] [Thread-192962] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:06:39.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:06:39.236 [DEBUG] [Thread-192965] [transport.py] [_log()] starting thread (client mode): 0xa2d6ded0
2026-02-14T22:06:39.236 [DEBUG] [Thread-192965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:06:39.256 [DEBUG] [Thread-192965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:06:39.257 [INFO] [Thread-192965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:06:39.264 [DEBUG] [Thread-192965] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:06:39.264 [DEBUG] [Thread-192965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:06:39.264 [DEBUG] [Thread-192965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:06:39.264 [DEBUG] [Thread-192965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:06:39.264 [DEBUG] [Thread-192965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:06:39.264 [DEBUG] [Thread-192965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:06:39.264 [DEBUG] [Thread-192965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:06:39.264 [DEBUG] [Thread-192965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:06:39.264 [DEBUG] [Thread-192965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:06:39.265 [DEBUG] [Thread-192965] [transport.py] [_log()] client lang: <none>
2026-02-14T22:06:39.265 [DEBUG] [Thread-192965] [transport.py] [_log()] server lang: <none>
2026-02-14T22:06:39.265 [DEBUG] [Thread-192965] [transport.py] [_log()] kex follows: False
2026-02-14T22:06:39.265 [DEBUG] [Thread-192965] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:06:39.265 [DEBUG] [Thread-192965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:06:39.265 [DEBUG] [Thread-192965] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:06:39.265 [DEBUG] [Thread-192965] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:06:39.265 [DEBUG] [Thread-192965] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:06:39.265 [DEBUG] [Thread-192965] [transport.py] [_log()] Compression: none
2026-02-14T22:06:39.265 [DEBUG] [Thread-192965] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:06:39.322 [DEBUG] [Thread-192965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:06:39.323 [DEBUG] [Thread-192965] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:06:39.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:06:39.324 [DEBUG] [Thread-192965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:06:39.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:06:39.388 [DEBUG] [Thread-192965] [transport.py] [_log()] userauth is OK
2026-02-14T22:06:39.388 [DEBUG] [Thread-192965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:06:39.388 [DEBUG] [Thread-192965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:06:39.388 [DEBUG] [Thread-192965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:06:39.388 [DEBUG] [Thread-192965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:06:39.408 [INFO] [Thread-192965] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:06:39.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:06:39.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:06:40.180 [DEBUG] [Thread-192965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:06:40.181 [DEBUG] [Thread-192965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:06:40.228 [DEBUG] [Thread-192965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:06:40.229 [DEBUG] [Thread-192965] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:06:40.238 [DEBUG] [Thread-192965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:06:40.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:06:40.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-14T22:06:40.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-14T22:06:40.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:06:40.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:06:40.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:06:40.282 [DEBUG] [Thread-192965] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:06:51.125 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:06:51.126 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:06:52.043 [DEBUG] [Thread-192967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:06:59.765 [DEBUG] [Thread-192968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:07:07.094 [DEBUG] [Thread-192969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:07:10.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:07:10.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:07:10.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:07:12.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 6, 45), 6.99, 61.46, 0.0, 37.14, 9.6, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:07:12.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:06:45
2026-02-14T22:07:13.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:07:13.495 [DEBUG] [Thread-192970] [transport.py] [_log()] starting thread (client mode): 0xa57705b0
2026-02-14T22:07:13.495 [DEBUG] [Thread-192970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:07:13.515 [DEBUG] [Thread-192970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:07:13.516 [INFO] [Thread-192970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:07:13.518 [DEBUG] [Thread-192970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:07:13.518 [DEBUG] [Thread-192970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:07:13.519 [DEBUG] [Thread-192970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:07:13.519 [DEBUG] [Thread-192970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:07:13.519 [DEBUG] [Thread-192970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:07:13.519 [DEBUG] [Thread-192970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:07:13.519 [DEBUG] [Thread-192970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:07:13.519 [DEBUG] [Thread-192970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:07:13.519 [DEBUG] [Thread-192970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:07:13.519 [DEBUG] [Thread-192970] [transport.py] [_log()] client lang: <none>
2026-02-14T22:07:13.519 [DEBUG] [Thread-192970] [transport.py] [_log()] server lang: <none>
2026-02-14T22:07:13.519 [DEBUG] [Thread-192970] [transport.py] [_log()] kex follows: False
2026-02-14T22:07:13.519 [DEBUG] [Thread-192970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:07:13.519 [DEBUG] [Thread-192970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:07:13.519 [DEBUG] [Thread-192970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:07:13.519 [DEBUG] [Thread-192970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:07:13.519 [DEBUG] [Thread-192970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:07:13.519 [DEBUG] [Thread-192970] [transport.py] [_log()] Compression: none
2026-02-14T22:07:13.519 [DEBUG] [Thread-192970] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:07:13.537 [DEBUG] [Thread-192970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:07:13.538 [DEBUG] [Thread-192970] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:07:13.538 [DEBUG] [Thread-192970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:07:13.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:07:13.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:07:13.540 [DEBUG] [Thread-192970] [transport.py] [_log()] userauth is OK
2026-02-14T22:07:13.540 [DEBUG] [Thread-192970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:07:13.540 [DEBUG] [Thread-192970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:07:13.541 [DEBUG] [Thread-192970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:07:13.541 [DEBUG] [Thread-192970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:07:13.555 [INFO] [Thread-192970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:07:13.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:07:14.217 [DEBUG] [Thread-192970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:07:14.218 [DEBUG] [Thread-192970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:07:14.218 [DEBUG] [Thread-192970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:07:14.259 [DEBUG] [Thread-192970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:07:14.259 [DEBUG] [Thread-192970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:07:14.262 [DEBUG] [Thread-192970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:07:14.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:07:14.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:07:14.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:07:14.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:07:14.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:07:14.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:07:14.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:07:14.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:07:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:07:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.837960 -999.00   +9.50  25.96     66   +3.60 1 1 1 1 1     0    0 5.54 -22.46 ZNESW 23.8 26.0 161.6 34.6 10.0 -25.2 9.8 -24.1 9.6 -23.1 9.9 -24.3
2026-02-14T22:07:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:07:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:07:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.837960
2026-02-14T22:07:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:07:14.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:07:14.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:07:14.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:07:14.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:07:14.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:06:45', tmtdew=6.99, humidity=61.46, cloud=0.0, wind=37.14, temperature=9.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:06:46', seeing=3.45, atlas_timestamp='2026-02-14T20:06:39.744', atlas_cloud=1, atlas_rain=1, zp_data=[-0.003750000000000142, -0.03474999999999895, 0.03625000000000078, 0.013499999999998735, 0.06099999999999994, 0.011250000000000426, 0.0039999999999995595, -0.014749999999999375, 0.02499999999999858, 0.008500000000001506, -0.010249999999999204, 0.046499999999999986, 0.05299999999999905, 0.04624999999999879, 0.0030000000000001137, 0.019499999999998963, 0.04124999999999979, 0.06949999999999967, -0.04200000000000159, -0.013750000000001705, 0.07899999999999885, 0.06474999999999831, 0.010750000000001592, 0.03575000000000017, 0.04399999999999871, 0.07249999999999979, 0.03175000000000061, 0.0045000000000001705, 0.054999999999999716, 0.03950000000000031, 0.05649999999999977, 0.005500000000001393, 0.012749999999998707], zp_timestamp='2026-02-14T20:03:00')
2026-02-14T22:07:14.289 [DEBUG] [Thread-192970] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:07:14.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-14T22:07:14.392 [DEBUG] [Thread-192973] [transport.py] [_log()] starting thread (client mode): 0xa2d13cd0
2026-02-14T22:07:14.392 [DEBUG] [Thread-192973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:07:14.410 [DEBUG] [Thread-192973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:07:14.411 [INFO] [Thread-192973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:07:14.419 [DEBUG] [Thread-192973] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:07:14.420 [DEBUG] [Thread-192973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:07:14.420 [DEBUG] [Thread-192973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:07:14.420 [DEBUG] [Thread-192973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:07:14.420 [DEBUG] [Thread-192973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:07:14.420 [DEBUG] [Thread-192973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:07:14.420 [DEBUG] [Thread-192973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:07:14.420 [DEBUG] [Thread-192973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:07:14.420 [DEBUG] [Thread-192973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:07:14.420 [DEBUG] [Thread-192973] [transport.py] [_log()] client lang: <none>
2026-02-14T22:07:14.420 [DEBUG] [Thread-192973] [transport.py] [_log()] server lang: <none>
2026-02-14T22:07:14.420 [DEBUG] [Thread-192973] [transport.py] [_log()] kex follows: False
2026-02-14T22:07:14.420 [DEBUG] [Thread-192973] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:07:14.420 [DEBUG] [Thread-192973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:07:14.421 [DEBUG] [Thread-192973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:07:14.421 [DEBUG] [Thread-192973] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:07:14.421 [DEBUG] [Thread-192973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:07:14.421 [DEBUG] [Thread-192973] [transport.py] [_log()] Compression: none
2026-02-14T22:07:14.421 [DEBUG] [Thread-192973] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:07:14.482 [DEBUG] [Thread-192973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:07:14.483 [DEBUG] [Thread-192973] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:07:14.484 [DEBUG] [Thread-192973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:07:14.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:07:14.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:07:14.539 [DEBUG] [Thread-192973] [transport.py] [_log()] userauth is OK
2026-02-14T22:07:14.540 [DEBUG] [Thread-192973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:07:14.540 [DEBUG] [Thread-192973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:07:14.540 [DEBUG] [Thread-192973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:07:14.540 [DEBUG] [Thread-192973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:07:14.561 [INFO] [Thread-192973] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:07:14.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-14T22:07:14.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:07:15.356 [DEBUG] [Thread-192973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:07:15.357 [DEBUG] [Thread-192973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:07:15.405 [DEBUG] [Thread-192973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:07:15.405 [DEBUG] [Thread-192973] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:07:15.416 [DEBUG] [Thread-192973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:07:15.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:07:15.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-14T22:07:15.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-14T22:07:15.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:07:15.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:07:15.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:07:15.457 [DEBUG] [Thread-192973] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:07:18.031 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:07:22.137 [DEBUG] [Thread-192975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:07:37.188 [DEBUG] [Thread-192976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:07:45.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:07:45.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:07:45.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-14T22:07:47.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 7, 21), 6.99, 61.43, 0.0, 34.72, 9.55, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:07:47.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:07:21
2026-02-14T22:07:48.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:07:48.490 [DEBUG] [Thread-192977] [transport.py] [_log()] starting thread (client mode): 0xa5772320
2026-02-14T22:07:48.490 [DEBUG] [Thread-192977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:07:48.511 [DEBUG] [Thread-192977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:07:48.511 [INFO] [Thread-192977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:07:48.514 [DEBUG] [Thread-192977] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:07:48.514 [DEBUG] [Thread-192977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:07:48.514 [DEBUG] [Thread-192977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:07:48.515 [DEBUG] [Thread-192977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:07:48.515 [DEBUG] [Thread-192977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:07:48.515 [DEBUG] [Thread-192977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:07:48.515 [DEBUG] [Thread-192977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:07:48.515 [DEBUG] [Thread-192977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:07:48.515 [DEBUG] [Thread-192977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:07:48.515 [DEBUG] [Thread-192977] [transport.py] [_log()] client lang: <none>
2026-02-14T22:07:48.515 [DEBUG] [Thread-192977] [transport.py] [_log()] server lang: <none>
2026-02-14T22:07:48.515 [DEBUG] [Thread-192977] [transport.py] [_log()] kex follows: False
2026-02-14T22:07:48.515 [DEBUG] [Thread-192977] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:07:48.515 [DEBUG] [Thread-192977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:07:48.515 [DEBUG] [Thread-192977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:07:48.515 [DEBUG] [Thread-192977] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:07:48.516 [DEBUG] [Thread-192977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:07:48.516 [DEBUG] [Thread-192977] [transport.py] [_log()] Compression: none
2026-02-14T22:07:48.516 [DEBUG] [Thread-192977] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:07:48.536 [DEBUG] [Thread-192977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:07:48.537 [DEBUG] [Thread-192977] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:07:48.537 [DEBUG] [Thread-192977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:07:48.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:07:48.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:07:48.539 [DEBUG] [Thread-192977] [transport.py] [_log()] userauth is OK
2026-02-14T22:07:48.539 [DEBUG] [Thread-192977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:07:48.539 [DEBUG] [Thread-192977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:07:48.539 [DEBUG] [Thread-192977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:07:48.540 [DEBUG] [Thread-192977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:07:48.564 [INFO] [Thread-192977] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:07:48.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:07:49.225 [DEBUG] [Thread-192977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:07:49.226 [DEBUG] [Thread-192977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:07:49.226 [DEBUG] [Thread-192977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:07:49.266 [DEBUG] [Thread-192977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:07:49.267 [DEBUG] [Thread-192977] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:07:49.270 [DEBUG] [Thread-192977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:07:49.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:07:49.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:07:49.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:07:49.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:07:49.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:07:49.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:07:49.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:07:49.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:07:49.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:07:49.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.838654 -999.00   +9.50  30.97     66   +3.60 1 1 2 1 1     0    0 5.38 -23.44 ZNESW 22.0 31.0 150.6 35.6 10.0 -25.1 9.8 -24.0 9.6 -23.0 9.9 -24.2
2026-02-14T22:07:49.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:07:49.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:07:49.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.838654
2026-02-14T22:07:49.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:07:49.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:07:49.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:07:49.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:07:49.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:07:49.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:07:21', tmtdew=6.99, humidity=61.43, cloud=0.0, wind=34.72, temperature=9.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:07:21', seeing=3.7, atlas_timestamp='2026-02-14T20:07:39.706', atlas_cloud=1, atlas_rain=1, zp_data=[-0.003750000000000142, -0.03474999999999895, 0.03625000000000078, 0.013499999999998735, 0.06099999999999994, 0.011250000000000426, 0.0039999999999995595, -0.014749999999999375, 0.02499999999999858, 0.008500000000001506, -0.010249999999999204, 0.046499999999999986, 0.05299999999999905, 0.04624999999999879, 0.0030000000000001137, 0.019499999999998963, 0.04124999999999979, 0.06949999999999967, -0.04200000000000159, -0.013750000000001705, 0.07899999999999885, 0.06474999999999831, 0.010750000000001592, 0.03575000000000017, 0.04399999999999871, 0.07249999999999979, 0.03175000000000061, 0.0045000000000001705, 0.054999999999999716, 0.03950000000000031, 0.05649999999999977, 0.005500000000001393, 0.012749999999998707], zp_timestamp='2026-02-14T20:03:00')
2026-02-14T22:07:49.296 [DEBUG] [Thread-192977] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:07:49.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:07:49.392 [DEBUG] [Thread-192980] [transport.py] [_log()] starting thread (client mode): 0xa2d03760
2026-02-14T22:07:49.392 [DEBUG] [Thread-192980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:07:49.407 [DEBUG] [Thread-192980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:07:49.407 [INFO] [Thread-192980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:07:49.415 [DEBUG] [Thread-192980] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:07:49.415 [DEBUG] [Thread-192980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:07:49.415 [DEBUG] [Thread-192980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:07:49.415 [DEBUG] [Thread-192980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:07:49.415 [DEBUG] [Thread-192980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:07:49.415 [DEBUG] [Thread-192980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:07:49.415 [DEBUG] [Thread-192980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:07:49.416 [DEBUG] [Thread-192980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:07:49.416 [DEBUG] [Thread-192980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:07:49.416 [DEBUG] [Thread-192980] [transport.py] [_log()] client lang: <none>
2026-02-14T22:07:49.416 [DEBUG] [Thread-192980] [transport.py] [_log()] server lang: <none>
2026-02-14T22:07:49.416 [DEBUG] [Thread-192980] [transport.py] [_log()] kex follows: False
2026-02-14T22:07:49.416 [DEBUG] [Thread-192980] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:07:49.416 [DEBUG] [Thread-192980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:07:49.417 [DEBUG] [Thread-192980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:07:49.417 [DEBUG] [Thread-192980] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:07:49.417 [DEBUG] [Thread-192980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:07:49.417 [DEBUG] [Thread-192980] [transport.py] [_log()] Compression: none
2026-02-14T22:07:49.417 [DEBUG] [Thread-192980] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:07:49.479 [DEBUG] [Thread-192980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:07:49.479 [DEBUG] [Thread-192980] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:07:49.480 [DEBUG] [Thread-192980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:07:49.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:07:49.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:07:49.535 [DEBUG] [Thread-192980] [transport.py] [_log()] userauth is OK
2026-02-14T22:07:49.536 [DEBUG] [Thread-192980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:07:49.536 [DEBUG] [Thread-192980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:07:49.536 [DEBUG] [Thread-192980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:07:49.536 [DEBUG] [Thread-192980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:07:49.563 [INFO] [Thread-192980] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:07:49.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-14T22:07:49.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:07:50.376 [DEBUG] [Thread-192980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:07:50.376 [DEBUG] [Thread-192980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:07:50.424 [DEBUG] [Thread-192980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:07:50.425 [DEBUG] [Thread-192980] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:07:50.434 [DEBUG] [Thread-192980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:07:50.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:07: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-14T22:07: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-14T22:07:50.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:07:50.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:07:50.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:07:50.470 [DEBUG] [Thread-192980] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:07:51.325 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:07:51.327 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:07:52.221 [DEBUG] [Thread-192982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:07:59.835 [DEBUG] [Thread-192983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:08:07.266 [DEBUG] [Thread-192984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:08:20.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:08:20.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:08:20.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-14T22:08:22.304 [DEBUG] [Thread-192985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:08:22.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 7, 56), 7.03, 61.5, 0.0, 34.71, 9.6, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:08:22.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:07:56
2026-02-14T22:08:22.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:08:22.948 [DEBUG] [Thread-192986] [transport.py] [_log()] starting thread (client mode): 0xa57405b0
2026-02-14T22:08:22.948 [DEBUG] [Thread-192986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:08:22.969 [DEBUG] [Thread-192986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:08:22.969 [INFO] [Thread-192986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:08:22.972 [DEBUG] [Thread-192986] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:08:22.972 [DEBUG] [Thread-192986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:08:22.972 [DEBUG] [Thread-192986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:08:22.972 [DEBUG] [Thread-192986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:08:22.972 [DEBUG] [Thread-192986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:08:22.972 [DEBUG] [Thread-192986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:08:22.972 [DEBUG] [Thread-192986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:08:22.972 [DEBUG] [Thread-192986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:08:22.972 [DEBUG] [Thread-192986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:08:22.972 [DEBUG] [Thread-192986] [transport.py] [_log()] client lang: <none>
2026-02-14T22:08:22.972 [DEBUG] [Thread-192986] [transport.py] [_log()] server lang: <none>
2026-02-14T22:08:22.973 [DEBUG] [Thread-192986] [transport.py] [_log()] kex follows: False
2026-02-14T22:08:22.973 [DEBUG] [Thread-192986] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:08:22.973 [DEBUG] [Thread-192986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:08:22.973 [DEBUG] [Thread-192986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:08:22.973 [DEBUG] [Thread-192986] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:08:22.973 [DEBUG] [Thread-192986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:08:22.973 [DEBUG] [Thread-192986] [transport.py] [_log()] Compression: none
2026-02-14T22:08:22.973 [DEBUG] [Thread-192986] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:08:22.985 [DEBUG] [Thread-192986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:08:22.985 [DEBUG] [Thread-192986] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:08:22.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:08:22.987 [DEBUG] [Thread-192986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:08:22.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:08:22.988 [DEBUG] [Thread-192986] [transport.py] [_log()] userauth is OK
2026-02-14T22:08:22.988 [DEBUG] [Thread-192986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:08:22.988 [DEBUG] [Thread-192986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:08:22.988 [DEBUG] [Thread-192986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:08:22.988 [DEBUG] [Thread-192986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:08:23.008 [INFO] [Thread-192986] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:08:23.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:08:23.689 [DEBUG] [Thread-192986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:08:23.690 [DEBUG] [Thread-192986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:08:23.690 [DEBUG] [Thread-192986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:08:23.730 [DEBUG] [Thread-192986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:08:23.730 [DEBUG] [Thread-192986] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:08:23.733 [DEBUG] [Thread-192986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:08:23.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:08:23.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:08:23.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:08:23.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:08:23.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:08:23.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:08:23.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:08:23.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:08:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:08:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.839001 -999.00   +9.50  32.18     66   +3.60 1 1 2 1 1     0    0 5.25 -24.66 ZNESW 26.6 32.2 159.8 40.9 10.0 -25.0 9.8 -24.0 9.6 -23.0 9.9 -24.3
2026-02-14T22:08:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:08:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:08:23.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.839001
2026-02-14T22:08:23.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:08:23.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:08:23.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:08:23.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:08:23.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:08:23.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:07:56', tmtdew=7.03, humidity=61.5, cloud=0.0, wind=34.71, temperature=9.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:07:56', seeing=3.91, atlas_timestamp='2026-02-14T20:08:09.686', atlas_cloud=1, atlas_rain=1, zp_data=[-0.003750000000000142, -0.03474999999999895, 0.03625000000000078, 0.013499999999998735, 0.06099999999999994, 0.011250000000000426, 0.0039999999999995595, -0.014749999999999375, 0.02499999999999858, 0.008500000000001506, -0.010249999999999204, 0.046499999999999986, 0.05299999999999905, 0.04624999999999879, 0.0030000000000001137, 0.019499999999998963, 0.04124999999999979, 0.06949999999999967, -0.04200000000000159, -0.013750000000001705, 0.07899999999999885, 0.06474999999999831, 0.010750000000001592, 0.03575000000000017, 0.04399999999999871, 0.07249999999999979, 0.03175000000000061, 0.0045000000000001705, 0.054999999999999716, 0.03950000000000031, 0.05649999999999977, 0.005500000000001393, 0.012749999999998707], zp_timestamp='2026-02-14T20:05:00')
2026-02-14T22:08:23.760 [DEBUG] [Thread-192986] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:08:23.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-14T22:08:23.854 [DEBUG] [Thread-192989] [transport.py] [_log()] starting thread (client mode): 0xa57c1420
2026-02-14T22:08:23.854 [DEBUG] [Thread-192989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:08:23.869 [DEBUG] [Thread-192989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:08:23.869 [INFO] [Thread-192989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:08:23.879 [DEBUG] [Thread-192989] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:08:23.879 [DEBUG] [Thread-192989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:08:23.879 [DEBUG] [Thread-192989] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:08:23.880 [DEBUG] [Thread-192989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:08:23.880 [DEBUG] [Thread-192989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:08:23.880 [DEBUG] [Thread-192989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:08:23.880 [DEBUG] [Thread-192989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:08:23.880 [DEBUG] [Thread-192989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:08:23.880 [DEBUG] [Thread-192989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:08:23.880 [DEBUG] [Thread-192989] [transport.py] [_log()] client lang: <none>
2026-02-14T22:08:23.880 [DEBUG] [Thread-192989] [transport.py] [_log()] server lang: <none>
2026-02-14T22:08:23.880 [DEBUG] [Thread-192989] [transport.py] [_log()] kex follows: False
2026-02-14T22:08:23.880 [DEBUG] [Thread-192989] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:08:23.880 [DEBUG] [Thread-192989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:08:23.880 [DEBUG] [Thread-192989] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:08:23.880 [DEBUG] [Thread-192989] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:08:23.880 [DEBUG] [Thread-192989] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:08:23.880 [DEBUG] [Thread-192989] [transport.py] [_log()] Compression: none
2026-02-14T22:08:23.880 [DEBUG] [Thread-192989] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:08:23.935 [DEBUG] [Thread-192989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:08:23.945 [DEBUG] [Thread-192989] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:08:23.946 [DEBUG] [Thread-192989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:08:23.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:08:23.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:08:23.992 [DEBUG] [Thread-192989] [transport.py] [_log()] userauth is OK
2026-02-14T22:08:23.992 [DEBUG] [Thread-192989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:08:23.992 [DEBUG] [Thread-192989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:08:23.992 [DEBUG] [Thread-192989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:08:23.992 [DEBUG] [Thread-192989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:08:24.012 [INFO] [Thread-192989] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:08: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-14T22:08:24.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:08:24.813 [DEBUG] [Thread-192989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:08:24.814 [DEBUG] [Thread-192989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:08:24.861 [DEBUG] [Thread-192989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:08:24.861 [DEBUG] [Thread-192989] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:08:24.870 [DEBUG] [Thread-192989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:08:24.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:08:24.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-14T22:08: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') -> 00000000
2026-02-14T22:08:24.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:08:24.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:08:24.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:08:24.904 [DEBUG] [Thread-192989] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:08:37.344 [DEBUG] [Thread-192991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:08:51.528 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:08:51.529 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:08:52.295 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:08:52.391 [DEBUG] [Thread-192992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:08:54.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:08:54.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:08:54.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:08:56.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 8, 32), 7.02, 61.55, 0.0, 31.87, 9.58, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:08:56.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:08:32
2026-02-14T22:08:57.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:08:57.188 [DEBUG] [Thread-192993] [transport.py] [_log()] starting thread (client mode): 0xa2d7a9b0
2026-02-14T22:08:57.189 [DEBUG] [Thread-192993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:08:57.205 [DEBUG] [Thread-192993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:08:57.205 [INFO] [Thread-192993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:08:57.208 [DEBUG] [Thread-192993] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:08:57.208 [DEBUG] [Thread-192993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:08:57.208 [DEBUG] [Thread-192993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:08:57.208 [DEBUG] [Thread-192993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:08:57.208 [DEBUG] [Thread-192993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:08:57.208 [DEBUG] [Thread-192993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:08:57.208 [DEBUG] [Thread-192993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:08:57.208 [DEBUG] [Thread-192993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:08:57.208 [DEBUG] [Thread-192993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:08:57.208 [DEBUG] [Thread-192993] [transport.py] [_log()] client lang: <none>
2026-02-14T22:08:57.208 [DEBUG] [Thread-192993] [transport.py] [_log()] server lang: <none>
2026-02-14T22:08:57.208 [DEBUG] [Thread-192993] [transport.py] [_log()] kex follows: False
2026-02-14T22:08:57.208 [DEBUG] [Thread-192993] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:08:57.208 [DEBUG] [Thread-192993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:08:57.208 [DEBUG] [Thread-192993] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:08:57.208 [DEBUG] [Thread-192993] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:08:57.209 [DEBUG] [Thread-192993] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:08:57.209 [DEBUG] [Thread-192993] [transport.py] [_log()] Compression: none
2026-02-14T22:08:57.209 [DEBUG] [Thread-192993] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:08:57.223 [DEBUG] [Thread-192993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:08:57.223 [DEBUG] [Thread-192993] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:08:57.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:08:57.224 [DEBUG] [Thread-192993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:08:57.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:08:57.226 [DEBUG] [Thread-192993] [transport.py] [_log()] userauth is OK
2026-02-14T22:08:57.226 [DEBUG] [Thread-192993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:08:57.226 [DEBUG] [Thread-192993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:08:57.226 [DEBUG] [Thread-192993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:08:57.226 [DEBUG] [Thread-192993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:08:57.244 [INFO] [Thread-192993] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:08:57.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:08:57.839 [DEBUG] [Thread-192993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:08:57.839 [DEBUG] [Thread-192993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:08:57.839 [DEBUG] [Thread-192993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:08:57.881 [DEBUG] [Thread-192993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:08:57.881 [DEBUG] [Thread-192993] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:08:57.884 [DEBUG] [Thread-192993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:08:57.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:08:57.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:08:57.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:08:57.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:08:57.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:08:57.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:08:57.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:08:57.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:08:57.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:08:57.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.839348 -999.00   +9.50  23.02     66   +3.60 1 1 1 1 1     0    0 5.45 -26.23 ZNESW 27.1 23.0 155.0 34.3 10.0 -25.1 9.8 -24.1 9.6 -23.0 9.9 -24.3
2026-02-14T22:08:57.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:08:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:08:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.839348
2026-02-14T22:08:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:08:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:08:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:08:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:08:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:08:57.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:08:32', tmtdew=7.02, humidity=61.55, cloud=0.0, wind=31.87, temperature=9.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:08:33', seeing=2.85, atlas_timestamp='2026-02-14T20:08:39.667', atlas_cloud=1, atlas_rain=1, zp_data=[-0.003750000000000142, -0.03474999999999895, 0.03625000000000078, 0.013499999999998735, 0.06099999999999994, 0.011250000000000426, 0.0039999999999995595, -0.014749999999999375, 0.02499999999999858, 0.008500000000001506, -0.010249999999999204, 0.046499999999999986, 0.05299999999999905, 0.04624999999999879, 0.0030000000000001137, 0.019499999999998963, 0.04124999999999979, 0.06949999999999967, -0.04200000000000159, -0.013750000000001705, 0.07899999999999885, 0.06474999999999831, 0.010750000000001592, 0.03575000000000017, 0.04399999999999871, 0.07249999999999979, 0.03175000000000061, 0.0045000000000001705, 0.054999999999999716, 0.03950000000000031, 0.05649999999999977, 0.005500000000001393, 0.012749999999998707], zp_timestamp='2026-02-14T20:05:00')
2026-02-14T22:08:57.904 [DEBUG] [Thread-192993] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:08:57.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:08:57.993 [DEBUG] [Thread-192996] [transport.py] [_log()] starting thread (client mode): 0xa57e3df0
2026-02-14T22:08:57.993 [DEBUG] [Thread-192996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:08:58.007 [DEBUG] [Thread-192996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:08:58.007 [INFO] [Thread-192996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:08:58.014 [DEBUG] [Thread-192996] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:08:58.015 [DEBUG] [Thread-192996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:08:58.015 [DEBUG] [Thread-192996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:08:58.015 [DEBUG] [Thread-192996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:08:58.015 [DEBUG] [Thread-192996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:08:58.015 [DEBUG] [Thread-192996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:08:58.015 [DEBUG] [Thread-192996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:08:58.015 [DEBUG] [Thread-192996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:08:58.015 [DEBUG] [Thread-192996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:08:58.015 [DEBUG] [Thread-192996] [transport.py] [_log()] client lang: <none>
2026-02-14T22:08:58.015 [DEBUG] [Thread-192996] [transport.py] [_log()] server lang: <none>
2026-02-14T22:08:58.015 [DEBUG] [Thread-192996] [transport.py] [_log()] kex follows: False
2026-02-14T22:08:58.015 [DEBUG] [Thread-192996] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:08:58.015 [DEBUG] [Thread-192996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:08:58.015 [DEBUG] [Thread-192996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:08:58.015 [DEBUG] [Thread-192996] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:08:58.015 [DEBUG] [Thread-192996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:08:58.015 [DEBUG] [Thread-192996] [transport.py] [_log()] Compression: none
2026-02-14T22:08:58.015 [DEBUG] [Thread-192996] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:08:58.072 [DEBUG] [Thread-192996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:08:58.072 [DEBUG] [Thread-192996] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:08:58.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:08:58.073 [DEBUG] [Thread-192996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:08:58.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:08:58.128 [DEBUG] [Thread-192996] [transport.py] [_log()] userauth is OK
2026-02-14T22:08:58.128 [DEBUG] [Thread-192996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:08:58.129 [DEBUG] [Thread-192996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:08:58.129 [DEBUG] [Thread-192996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:08:58.129 [DEBUG] [Thread-192996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:08:58.147 [INFO] [Thread-192996] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:08:58.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-14T22:08:58.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:08:58.934 [DEBUG] [Thread-192996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:08:58.934 [DEBUG] [Thread-192996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:08:58.982 [DEBUG] [Thread-192996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:08:58.982 [DEBUG] [Thread-192996] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:08:58.991 [DEBUG] [Thread-192996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:08:59.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:08:59.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')
2026-02-14T22:08:59.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:08:59.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:08:59.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:08:59.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:08:59.024 [DEBUG] [Thread-192996] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:08:59.916 [DEBUG] [Thread-192998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:09:07.424 [DEBUG] [Thread-192999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:09:22.481 [DEBUG] [Thread-193000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:09:29.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:09:29.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:09:29.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-14T22:09:31.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 9, 8), 7.02, 61.55, 0.0, 35.25, 9.55, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:09:31.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:09:08
2026-02-14T22:09:31.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:09:31.679 [DEBUG] [Thread-193001] [transport.py] [_log()] starting thread (client mode): 0xa2d03970
2026-02-14T22:09:31.679 [DEBUG] [Thread-193001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:09:31.700 [DEBUG] [Thread-193001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:09:31.700 [INFO] [Thread-193001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:09:31.703 [DEBUG] [Thread-193001] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:09:31.703 [DEBUG] [Thread-193001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:09:31.703 [DEBUG] [Thread-193001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:09:31.703 [DEBUG] [Thread-193001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:09:31.703 [DEBUG] [Thread-193001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:09:31.703 [DEBUG] [Thread-193001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:09:31.703 [DEBUG] [Thread-193001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:09:31.703 [DEBUG] [Thread-193001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:09:31.703 [DEBUG] [Thread-193001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:09:31.703 [DEBUG] [Thread-193001] [transport.py] [_log()] client lang: <none>
2026-02-14T22:09:31.703 [DEBUG] [Thread-193001] [transport.py] [_log()] server lang: <none>
2026-02-14T22:09:31.703 [DEBUG] [Thread-193001] [transport.py] [_log()] kex follows: False
2026-02-14T22:09:31.703 [DEBUG] [Thread-193001] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:09:31.703 [DEBUG] [Thread-193001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:09:31.703 [DEBUG] [Thread-193001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:09:31.703 [DEBUG] [Thread-193001] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:09:31.704 [DEBUG] [Thread-193001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:09:31.704 [DEBUG] [Thread-193001] [transport.py] [_log()] Compression: none
2026-02-14T22:09:31.704 [DEBUG] [Thread-193001] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:09:31.720 [DEBUG] [Thread-193001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:09:31.721 [DEBUG] [Thread-193001] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:09:31.722 [DEBUG] [Thread-193001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:09:31.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:09:31.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:09:31.724 [DEBUG] [Thread-193001] [transport.py] [_log()] userauth is OK
2026-02-14T22:09:31.724 [DEBUG] [Thread-193001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:09:31.724 [DEBUG] [Thread-193001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:09:31.724 [DEBUG] [Thread-193001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:09:31.724 [DEBUG] [Thread-193001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:09:31.749 [INFO] [Thread-193001] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:09:31.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:09:32.336 [DEBUG] [Thread-193001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:09:32.337 [DEBUG] [Thread-193001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:09:32.337 [DEBUG] [Thread-193001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:09:32.377 [DEBUG] [Thread-193001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:09:32.377 [DEBUG] [Thread-193001] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:09:32.380 [DEBUG] [Thread-193001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:09:32.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:09:32.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:09:32.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:09:32.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:09:32.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:09:32.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:09:32.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:09:32.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:09:32.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:09:32.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.839696 -999.00   +9.50  25.56     66   +3.60 1 1 1 1 1     0    0 5.17 -30.36 ZNESW 28.9 25.6 157.8 33.6 9.9 -25.2 9.8 -24.1 9.6 -23.1 10.0 -24.3
2026-02-14T22:09:32.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:09:32.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:09:32.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.839696
2026-02-14T22:09:32.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:09:32.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:09:32.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:09:32.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:09:32.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:09:32.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:09:08', tmtdew=7.02, humidity=61.55, cloud=0.0, wind=35.25, temperature=9.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:09:09', seeing=3.13, atlas_timestamp='2026-02-14T20:09:09.734', atlas_cloud=1, atlas_rain=1, zp_data=[-0.003750000000000142, -0.03474999999999895, 0.03625000000000078, 0.013499999999998735, 0.06099999999999994, 0.011250000000000426, 0.0039999999999995595, -0.014749999999999375, 0.02499999999999858, 0.008500000000001506, -0.010249999999999204, 0.046499999999999986, 0.05299999999999905, 0.04624999999999879, 0.0030000000000001137, 0.019499999999998963, 0.04124999999999979, 0.06949999999999967, -0.04200000000000159, -0.013750000000001705, 0.07899999999999885, 0.06474999999999831, 0.010750000000001592, 0.03575000000000017, 0.04399999999999871, 0.07249999999999979, 0.03175000000000061, 0.0045000000000001705, 0.054999999999999716, 0.03950000000000031, 0.05649999999999977, 0.005500000000001393, 0.012749999999998707], zp_timestamp='2026-02-14T20:05:00')
2026-02-14T22:09:32.414 [DEBUG] [Thread-193001] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:09:32.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:09:32.509 [DEBUG] [Thread-193004] [transport.py] [_log()] starting thread (client mode): 0xa2d7b4f0
2026-02-14T22:09:32.509 [DEBUG] [Thread-193004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:09:32.523 [DEBUG] [Thread-193004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:09:32.523 [INFO] [Thread-193004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:09:32.530 [DEBUG] [Thread-193004] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:09:32.531 [DEBUG] [Thread-193004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:09:32.531 [DEBUG] [Thread-193004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:09:32.531 [DEBUG] [Thread-193004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:09:32.531 [DEBUG] [Thread-193004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:09:32.531 [DEBUG] [Thread-193004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:09:32.531 [DEBUG] [Thread-193004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:09:32.531 [DEBUG] [Thread-193004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:09:32.531 [DEBUG] [Thread-193004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:09:32.531 [DEBUG] [Thread-193004] [transport.py] [_log()] client lang: <none>
2026-02-14T22:09:32.531 [DEBUG] [Thread-193004] [transport.py] [_log()] server lang: <none>
2026-02-14T22:09:32.531 [DEBUG] [Thread-193004] [transport.py] [_log()] kex follows: False
2026-02-14T22:09:32.531 [DEBUG] [Thread-193004] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:09:32.531 [DEBUG] [Thread-193004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:09:32.531 [DEBUG] [Thread-193004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:09:32.531 [DEBUG] [Thread-193004] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:09:32.531 [DEBUG] [Thread-193004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:09:32.531 [DEBUG] [Thread-193004] [transport.py] [_log()] Compression: none
2026-02-14T22:09:32.531 [DEBUG] [Thread-193004] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:09:32.591 [DEBUG] [Thread-193004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:09:32.592 [DEBUG] [Thread-193004] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:09:32.592 [DEBUG] [Thread-193004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:09:32.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:09:32.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:09:32.649 [DEBUG] [Thread-193004] [transport.py] [_log()] userauth is OK
2026-02-14T22:09:32.650 [DEBUG] [Thread-193004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:09:32.650 [DEBUG] [Thread-193004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:09:32.650 [DEBUG] [Thread-193004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:09:32.650 [DEBUG] [Thread-193004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:09:32.670 [INFO] [Thread-193004] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:09:32.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-14T22:09:32.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:09:33.492 [DEBUG] [Thread-193004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:09:33.492 [DEBUG] [Thread-193004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:09:33.539 [DEBUG] [Thread-193004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:09:33.540 [DEBUG] [Thread-193004] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:09:33.548 [DEBUG] [Thread-193004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:09:33.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:09:33.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:09:33.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-14T22:09:33.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:09:33.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:09:33.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:09:33.591 [DEBUG] [Thread-193004] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:09:37.520 [DEBUG] [Thread-193006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:09:51.739 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:09:51.740 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:09:52.570 [DEBUG] [Thread-193007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:10:00.022 [DEBUG] [Thread-193008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:10:03.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:10:03.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:10:03.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-14T22:10:05.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 9, 44), 6.91, 62.1, 0.0, 42.63, 9.52, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:10:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:09:44
2026-02-14T22:10:05.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:10:05.991 [DEBUG] [Thread-193009] [transport.py] [_log()] starting thread (client mode): 0xa5743250
2026-02-14T22:10:05.991 [DEBUG] [Thread-193009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:10:06.011 [DEBUG] [Thread-193009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:10:06.011 [INFO] [Thread-193009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:10:06.013 [DEBUG] [Thread-193009] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:10:06.014 [DEBUG] [Thread-193009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:10:06.014 [DEBUG] [Thread-193009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:10:06.014 [DEBUG] [Thread-193009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:10:06.014 [DEBUG] [Thread-193009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:10:06.014 [DEBUG] [Thread-193009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:10:06.014 [DEBUG] [Thread-193009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:10:06.014 [DEBUG] [Thread-193009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:10:06.014 [DEBUG] [Thread-193009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:10:06.014 [DEBUG] [Thread-193009] [transport.py] [_log()] client lang: <none>
2026-02-14T22:10:06.014 [DEBUG] [Thread-193009] [transport.py] [_log()] server lang: <none>
2026-02-14T22:10:06.014 [DEBUG] [Thread-193009] [transport.py] [_log()] kex follows: False
2026-02-14T22:10:06.014 [DEBUG] [Thread-193009] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:10:06.015 [DEBUG] [Thread-193009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:10:06.015 [DEBUG] [Thread-193009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:10:06.015 [DEBUG] [Thread-193009] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:10:06.015 [DEBUG] [Thread-193009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:10:06.015 [DEBUG] [Thread-193009] [transport.py] [_log()] Compression: none
2026-02-14T22:10:06.015 [DEBUG] [Thread-193009] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:10:06.025 [DEBUG] [Thread-193009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:10:06.026 [DEBUG] [Thread-193009] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:10:06.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:10:06.027 [DEBUG] [Thread-193009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:10:06.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:10:06.029 [DEBUG] [Thread-193009] [transport.py] [_log()] userauth is OK
2026-02-14T22:10:06.030 [DEBUG] [Thread-193009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:10:06.030 [DEBUG] [Thread-193009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:10:06.030 [DEBUG] [Thread-193009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:10:06.030 [DEBUG] [Thread-193009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:10:06.056 [INFO] [Thread-193009] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:10:06.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:10:06.699 [DEBUG] [Thread-193009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:10:06.700 [DEBUG] [Thread-193009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:10:06.700 [DEBUG] [Thread-193009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:10:06.740 [DEBUG] [Thread-193009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:10:06.741 [DEBUG] [Thread-193009] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:10:06.744 [DEBUG] [Thread-193009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:10:06.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:10:06.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:10:06.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:10:06.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:10:06.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:10:06.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:10:06.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:10:06.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:10:06.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:10:06.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.840043 -999.00   +9.50  35.81     66   +3.60 1 1 2 1 1     0    0 5.12 -29.81 ZNESW 33.6 35.8 167.8 41.4 9.9 -25.2 9.8 -24.1 9.6 -23.1 9.9 -24.3
2026-02-14T22:10:06.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:10:06.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:10:06.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.840043
2026-02-14T22:10:06.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:10:06.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:10:06.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:10:06.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:10:06.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:10:06.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:09:44', tmtdew=6.91, humidity=62.1, cloud=0.0, wind=42.63, temperature=9.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:09:46', seeing=3.54, atlas_timestamp='2026-02-14T20:09:39.715', atlas_cloud=1, atlas_rain=1, zp_data=[-0.003750000000000142, -0.03474999999999895, 0.03625000000000078, 0.013499999999998735, 0.06099999999999994, 0.011250000000000426, 0.0039999999999995595, -0.014749999999999375, 0.02499999999999858, 0.008500000000001506, -0.010249999999999204, 0.046499999999999986, 0.05299999999999905, 0.04624999999999879, 0.0030000000000001137, 0.019499999999998963, 0.04124999999999979, 0.06949999999999967, -0.04200000000000159, -0.013750000000001705, 0.07899999999999885, 0.06474999999999831, 0.010750000000001592, 0.03575000000000017, 0.04399999999999871, 0.07249999999999979, 0.03175000000000061, 0.0045000000000001705, 0.054999999999999716, 0.03950000000000031, 0.05649999999999977, 0.005500000000001393, 0.012749999999998707], zp_timestamp='2026-02-14T20:05:00')
2026-02-14T22:10:06.771 [DEBUG] [Thread-193009] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:10:06.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-14T22:10:06.866 [DEBUG] [Thread-193012] [transport.py] [_log()] starting thread (client mode): 0xa5741180
2026-02-14T22:10:06.866 [DEBUG] [Thread-193012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:10:06.881 [DEBUG] [Thread-193012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:10:06.881 [INFO] [Thread-193012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:10:06.889 [DEBUG] [Thread-193012] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:10:06.890 [DEBUG] [Thread-193012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:10:06.890 [DEBUG] [Thread-193012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:10:06.890 [DEBUG] [Thread-193012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:10:06.890 [DEBUG] [Thread-193012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:10:06.890 [DEBUG] [Thread-193012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:10:06.890 [DEBUG] [Thread-193012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:10:06.890 [DEBUG] [Thread-193012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:10:06.890 [DEBUG] [Thread-193012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:10:06.890 [DEBUG] [Thread-193012] [transport.py] [_log()] client lang: <none>
2026-02-14T22:10:06.891 [DEBUG] [Thread-193012] [transport.py] [_log()] server lang: <none>
2026-02-14T22:10:06.891 [DEBUG] [Thread-193012] [transport.py] [_log()] kex follows: False
2026-02-14T22:10:06.891 [DEBUG] [Thread-193012] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:10:06.891 [DEBUG] [Thread-193012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:10:06.891 [DEBUG] [Thread-193012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:10:06.891 [DEBUG] [Thread-193012] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:10:06.891 [DEBUG] [Thread-193012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:10:06.892 [DEBUG] [Thread-193012] [transport.py] [_log()] Compression: none
2026-02-14T22:10:06.892 [DEBUG] [Thread-193012] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:10:06.951 [DEBUG] [Thread-193012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:10:06.952 [DEBUG] [Thread-193012] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:10:06.952 [DEBUG] [Thread-193012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:10:06.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:10:06.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:10:07.010 [DEBUG] [Thread-193012] [transport.py] [_log()] userauth is OK
2026-02-14T22:10:07.010 [DEBUG] [Thread-193012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:10:07.010 [DEBUG] [Thread-193012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:10:07.010 [DEBUG] [Thread-193012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:10:07.010 [DEBUG] [Thread-193012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:10:07.037 [INFO] [Thread-193012] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:10:07.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-14T22:10:07.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:10:07.606 [DEBUG] [Thread-193014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:10:07.847 [DEBUG] [Thread-193012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:10:07.848 [DEBUG] [Thread-193012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:10:07.895 [DEBUG] [Thread-193012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:10:07.895 [DEBUG] [Thread-193012] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:10:07.905 [DEBUG] [Thread-193012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:10:07.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:10:07.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:10:07.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-14T22:10:07.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:10:07.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:10:07.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:10:07.939 [DEBUG] [Thread-193012] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:10:22.661 [DEBUG] [Thread-193015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:10:25.880 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:10:37.697 [DEBUG] [Thread-193016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:10:37.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:10:37.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:10:37.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-14T22:10:39.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 10, 21), 6.9, 62.13, 0.0, 38.32, 9.55, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:10:39.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:10:21
2026-02-14T22:10:40.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:10:40.385 [DEBUG] [Thread-193017] [transport.py] [_log()] starting thread (client mode): 0xa5740f70
2026-02-14T22:10:40.386 [DEBUG] [Thread-193017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:10:40.387 [DEBUG] [Thread-193017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:10:40.387 [INFO] [Thread-193017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:10:40.390 [DEBUG] [Thread-193017] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:10:40.390 [DEBUG] [Thread-193017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:10:40.390 [DEBUG] [Thread-193017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:10:40.390 [DEBUG] [Thread-193017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:10:40.390 [DEBUG] [Thread-193017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:10:40.390 [DEBUG] [Thread-193017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:10:40.390 [DEBUG] [Thread-193017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:10:40.390 [DEBUG] [Thread-193017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:10:40.390 [DEBUG] [Thread-193017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:10:40.390 [DEBUG] [Thread-193017] [transport.py] [_log()] client lang: <none>
2026-02-14T22:10:40.390 [DEBUG] [Thread-193017] [transport.py] [_log()] server lang: <none>
2026-02-14T22:10:40.390 [DEBUG] [Thread-193017] [transport.py] [_log()] kex follows: False
2026-02-14T22:10:40.390 [DEBUG] [Thread-193017] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:10:40.390 [DEBUG] [Thread-193017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:10:40.390 [DEBUG] [Thread-193017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:10:40.390 [DEBUG] [Thread-193017] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:10:40.390 [DEBUG] [Thread-193017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:10:40.390 [DEBUG] [Thread-193017] [transport.py] [_log()] Compression: none
2026-02-14T22:10:40.391 [DEBUG] [Thread-193017] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:10:40.406 [DEBUG] [Thread-193017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:10:40.406 [DEBUG] [Thread-193017] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:10:40.407 [DEBUG] [Thread-193017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:10:40.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:10:40.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:10:40.408 [DEBUG] [Thread-193017] [transport.py] [_log()] userauth is OK
2026-02-14T22:10:40.408 [DEBUG] [Thread-193017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:10:40.408 [DEBUG] [Thread-193017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:10:40.408 [DEBUG] [Thread-193017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:10:40.409 [DEBUG] [Thread-193017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:10:40.431 [INFO] [Thread-193017] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:10:40.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:10:40.991 [DEBUG] [Thread-193017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:10:40.991 [DEBUG] [Thread-193017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:10:40.992 [DEBUG] [Thread-193017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:10:41.032 [DEBUG] [Thread-193017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:10:41.033 [DEBUG] [Thread-193017] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:10:41.035 [DEBUG] [Thread-193017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:10:41.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:10:41.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:10:41.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:10:41.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:10:41.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:10:41.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:10:41.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:10:41.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:10:41.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:10:41.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.840390 -999.00   +9.50  20.89     66   +3.60 1 1 1 1 1     0    0 5.27 -29.28 ZNESW 20.0 20.9 160.5 36.8 9.9 -25.1 9.8 -24.0 9.6 -23.0 9.9 -24.4
2026-02-14T22:10:41.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:10:41.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:10:41.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.840390
2026-02-14T22:10:41.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:10:41.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:10:41.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:10:41.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:10:41.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:10:41.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:10:21', tmtdew=6.9, humidity=62.13, cloud=0.0, wind=38.32, temperature=9.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:10:22', seeing=3.33, atlas_timestamp='2026-02-14T20:10:09.696', atlas_cloud=1, atlas_rain=1, zp_data=[-0.003750000000000142, -0.03474999999999895, 0.03625000000000078, 0.013499999999998735, 0.06099999999999994, 0.011250000000000426, 0.0039999999999995595, -0.014749999999999375, 0.02499999999999858, 0.008500000000001506, -0.010249999999999204, 0.046499999999999986, 0.05299999999999905, 0.04624999999999879, 0.0030000000000001137, 0.019499999999998963, 0.04124999999999979, 0.06949999999999967, -0.04200000000000159, -0.013750000000001705, 0.07899999999999885, 0.06474999999999831, 0.010750000000001592, 0.03575000000000017, 0.04399999999999871, 0.07249999999999979, 0.03175000000000061, 0.0045000000000001705, 0.054999999999999716, 0.03950000000000031, 0.05649999999999977, 0.005500000000001393, 0.012749999999998707], zp_timestamp='2026-02-14T20:05:00')
2026-02-14T22:10:41.059 [DEBUG] [Thread-193017] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:10:41.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-14T22:10:41.154 [DEBUG] [Thread-193020] [transport.py] [_log()] starting thread (client mode): 0xa57e3040
2026-02-14T22:10:41.154 [DEBUG] [Thread-193020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:10:41.168 [DEBUG] [Thread-193020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:10:41.169 [INFO] [Thread-193020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:10:41.178 [DEBUG] [Thread-193020] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:10:41.178 [DEBUG] [Thread-193020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:10:41.179 [DEBUG] [Thread-193020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:10:41.179 [DEBUG] [Thread-193020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:10:41.179 [DEBUG] [Thread-193020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:10:41.179 [DEBUG] [Thread-193020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:10:41.179 [DEBUG] [Thread-193020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:10:41.179 [DEBUG] [Thread-193020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:10:41.179 [DEBUG] [Thread-193020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:10:41.179 [DEBUG] [Thread-193020] [transport.py] [_log()] client lang: <none>
2026-02-14T22:10:41.179 [DEBUG] [Thread-193020] [transport.py] [_log()] server lang: <none>
2026-02-14T22:10:41.179 [DEBUG] [Thread-193020] [transport.py] [_log()] kex follows: False
2026-02-14T22:10:41.179 [DEBUG] [Thread-193020] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:10:41.179 [DEBUG] [Thread-193020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:10:41.179 [DEBUG] [Thread-193020] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:10:41.179 [DEBUG] [Thread-193020] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:10:41.179 [DEBUG] [Thread-193020] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:10:41.180 [DEBUG] [Thread-193020] [transport.py] [_log()] Compression: none
2026-02-14T22:10:41.180 [DEBUG] [Thread-193020] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:10:41.234 [DEBUG] [Thread-193020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:10:41.234 [DEBUG] [Thread-193020] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:10:41.235 [DEBUG] [Thread-193020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:10:41.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:10:41.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:10:41.290 [DEBUG] [Thread-193020] [transport.py] [_log()] userauth is OK
2026-02-14T22:10:41.291 [DEBUG] [Thread-193020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:10:41.291 [DEBUG] [Thread-193020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:10:41.291 [DEBUG] [Thread-193020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:10:41.291 [DEBUG] [Thread-193020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:10:41.310 [INFO] [Thread-193020] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:10:41.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-14T22:10:41.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:10:42.135 [DEBUG] [Thread-193020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:10:42.135 [DEBUG] [Thread-193020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:10:42.183 [DEBUG] [Thread-193020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:10:42.183 [DEBUG] [Thread-193020] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:10:42.193 [DEBUG] [Thread-193020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:10:42.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:10:42.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-14T22:10:42.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:10:42.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:10:42.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:10:42.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:10:42.230 [DEBUG] [Thread-193020] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:10:51.940 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:10:51.942 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:10:52.732 [DEBUG] [Thread-193022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:11:00.091 [DEBUG] [Thread-193023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:11:07.795 [DEBUG] [Thread-193024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:11:12.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:11:12.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:11:12.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-14T22:11:14.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 10, 57), 6.9, 62.11, 0.0, 39.5, 9.52, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:11:14.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:10:57
2026-02-14T22:11:14.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:11:15.066 [DEBUG] [Thread-193025] [transport.py] [_log()] starting thread (client mode): 0xa57429b0
2026-02-14T22:11:15.067 [DEBUG] [Thread-193025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:11:15.086 [DEBUG] [Thread-193025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:11:15.087 [INFO] [Thread-193025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:11:15.089 [DEBUG] [Thread-193025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:11:15.089 [DEBUG] [Thread-193025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:11:15.090 [DEBUG] [Thread-193025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:11:15.090 [DEBUG] [Thread-193025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:11:15.090 [DEBUG] [Thread-193025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:11:15.090 [DEBUG] [Thread-193025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:11:15.090 [DEBUG] [Thread-193025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:11:15.090 [DEBUG] [Thread-193025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:11:15.090 [DEBUG] [Thread-193025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:11:15.090 [DEBUG] [Thread-193025] [transport.py] [_log()] client lang: <none>
2026-02-14T22:11:15.090 [DEBUG] [Thread-193025] [transport.py] [_log()] server lang: <none>
2026-02-14T22:11:15.090 [DEBUG] [Thread-193025] [transport.py] [_log()] kex follows: False
2026-02-14T22:11:15.090 [DEBUG] [Thread-193025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:11:15.090 [DEBUG] [Thread-193025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:11:15.090 [DEBUG] [Thread-193025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:11:15.090 [DEBUG] [Thread-193025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:11:15.090 [DEBUG] [Thread-193025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:11:15.090 [DEBUG] [Thread-193025] [transport.py] [_log()] Compression: none
2026-02-14T22:11:15.090 [DEBUG] [Thread-193025] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:11:15.106 [DEBUG] [Thread-193025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:11:15.106 [DEBUG] [Thread-193025] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:11:15.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:11:15.107 [DEBUG] [Thread-193025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:11:15.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:11:15.109 [DEBUG] [Thread-193025] [transport.py] [_log()] userauth is OK
2026-02-14T22:11:15.109 [DEBUG] [Thread-193025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:11:15.110 [DEBUG] [Thread-193025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:11:15.110 [DEBUG] [Thread-193025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:11:15.110 [DEBUG] [Thread-193025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:11:15.127 [INFO] [Thread-193025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:11:15.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:11:15.720 [DEBUG] [Thread-193025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:11:15.720 [DEBUG] [Thread-193025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:11:15.721 [DEBUG] [Thread-193025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:11:15.761 [DEBUG] [Thread-193025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:11:15.761 [DEBUG] [Thread-193025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:11:15.766 [DEBUG] [Thread-193025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:11:15.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:11:15.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:11:15.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:11:15.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:11:15.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:11:15.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:11:15.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:11:15.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:11:15.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:11:15.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.841084 -999.00   +9.50  19.38     67   +3.70 1 1 1 1 1     0    0 5.17 -29.75 ZNESW 26.5 19.4 161.0 33.4 9.9 -25.2 9.8 -24.1 9.6 -23.0 9.9 -24.1
2026-02-14T22:11:15.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:11:15.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:11:15.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.841084
2026-02-14T22:11:15.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:11:15.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:11:15.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:11:15.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:11:15.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:11:15.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:10:57', tmtdew=6.9, humidity=62.11, cloud=0.0, wind=39.5, temperature=9.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:10:57', seeing=3.56, atlas_timestamp='2026-02-14T20:11:09.658', atlas_cloud=1, atlas_rain=1, zp_data=[-0.003750000000000142, -0.03474999999999895, 0.03625000000000078, 0.013499999999998735, 0.06099999999999994, 0.011250000000000426, 0.0039999999999995595, -0.014749999999999375, 0.02499999999999858, 0.008500000000001506, -0.010249999999999204, 0.046499999999999986, 0.05299999999999905, 0.04624999999999879, 0.0030000000000001137, 0.019499999999998963, 0.04124999999999979, 0.06949999999999967, -0.04200000000000159, -0.013750000000001705, 0.07899999999999885, 0.06474999999999831, 0.010750000000001592, 0.03575000000000017, 0.04399999999999871, 0.07249999999999979, 0.03175000000000061, 0.0045000000000001705, 0.054999999999999716, 0.03950000000000031, 0.05649999999999977, 0.005500000000001393, 0.012749999999998707], zp_timestamp='2026-02-14T20:05:00')
2026-02-14T22:11:15.785 [DEBUG] [Thread-193025] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:11:15.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:11:15.881 [DEBUG] [Thread-193028] [transport.py] [_log()] starting thread (client mode): 0xa5773fa0
2026-02-14T22:11:15.881 [DEBUG] [Thread-193028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:11:15.895 [DEBUG] [Thread-193028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:11:15.895 [INFO] [Thread-193028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:11:15.903 [DEBUG] [Thread-193028] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:11:15.903 [DEBUG] [Thread-193028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:11:15.903 [DEBUG] [Thread-193028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:11:15.903 [DEBUG] [Thread-193028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:11:15.903 [DEBUG] [Thread-193028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:11:15.904 [DEBUG] [Thread-193028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:11:15.904 [DEBUG] [Thread-193028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:11:15.904 [DEBUG] [Thread-193028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:11:15.904 [DEBUG] [Thread-193028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:11:15.904 [DEBUG] [Thread-193028] [transport.py] [_log()] client lang: <none>
2026-02-14T22:11:15.904 [DEBUG] [Thread-193028] [transport.py] [_log()] server lang: <none>
2026-02-14T22:11:15.904 [DEBUG] [Thread-193028] [transport.py] [_log()] kex follows: False
2026-02-14T22:11:15.904 [DEBUG] [Thread-193028] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:11:15.904 [DEBUG] [Thread-193028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:11:15.905 [DEBUG] [Thread-193028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:11:15.905 [DEBUG] [Thread-193028] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:11:15.905 [DEBUG] [Thread-193028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:11:15.905 [DEBUG] [Thread-193028] [transport.py] [_log()] Compression: none
2026-02-14T22:11:15.905 [DEBUG] [Thread-193028] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:11:15.962 [DEBUG] [Thread-193028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:11:15.963 [DEBUG] [Thread-193028] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:11:15.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:11:15.964 [DEBUG] [Thread-193028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:11:15.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:11:16.025 [DEBUG] [Thread-193028] [transport.py] [_log()] userauth is OK
2026-02-14T22:11:16.026 [DEBUG] [Thread-193028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:11:16.026 [DEBUG] [Thread-193028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:11:16.026 [DEBUG] [Thread-193028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:11:16.026 [DEBUG] [Thread-193028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:11:16.045 [INFO] [Thread-193028] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:11:16.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-14T22:11:16.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:11:16.857 [DEBUG] [Thread-193028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:11:16.857 [DEBUG] [Thread-193028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:11:16.905 [DEBUG] [Thread-193028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:11:16.905 [DEBUG] [Thread-193028] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:11:16.913 [DEBUG] [Thread-193028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:11:16.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:11:16.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:11:16.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:11:16.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:11:16.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:11:16.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:11:16.946 [DEBUG] [Thread-193028] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:11:22.839 [DEBUG] [Thread-193030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:11:37.888 [DEBUG] [Thread-193031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:11:46.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:11:46.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:11:46.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:11:49.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 11, 32), 6.88, 62.2, 0.0, 37.62, 9.53, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:11:49.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:11:32
2026-02-14T22:11:49.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:11:49.768 [DEBUG] [Thread-193032] [transport.py] [_log()] starting thread (client mode): 0xa5772c50
2026-02-14T22:11:49.768 [DEBUG] [Thread-193032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:11:49.787 [DEBUG] [Thread-193032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:11:49.787 [INFO] [Thread-193032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:11:49.789 [DEBUG] [Thread-193032] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:11:49.789 [DEBUG] [Thread-193032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:11:49.789 [DEBUG] [Thread-193032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:11:49.789 [DEBUG] [Thread-193032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:11:49.789 [DEBUG] [Thread-193032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:11:49.789 [DEBUG] [Thread-193032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:11:49.789 [DEBUG] [Thread-193032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:11:49.789 [DEBUG] [Thread-193032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:11:49.789 [DEBUG] [Thread-193032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:11:49.789 [DEBUG] [Thread-193032] [transport.py] [_log()] client lang: <none>
2026-02-14T22:11:49.790 [DEBUG] [Thread-193032] [transport.py] [_log()] server lang: <none>
2026-02-14T22:11:49.790 [DEBUG] [Thread-193032] [transport.py] [_log()] kex follows: False
2026-02-14T22:11:49.790 [DEBUG] [Thread-193032] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:11:49.790 [DEBUG] [Thread-193032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:11:49.790 [DEBUG] [Thread-193032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:11:49.790 [DEBUG] [Thread-193032] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:11:49.790 [DEBUG] [Thread-193032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:11:49.790 [DEBUG] [Thread-193032] [transport.py] [_log()] Compression: none
2026-02-14T22:11:49.790 [DEBUG] [Thread-193032] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:11:49.807 [DEBUG] [Thread-193032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:11:49.807 [DEBUG] [Thread-193032] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:11:49.808 [DEBUG] [Thread-193032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:11:49.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:11:49.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:11:49.810 [DEBUG] [Thread-193032] [transport.py] [_log()] userauth is OK
2026-02-14T22:11:49.810 [DEBUG] [Thread-193032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:11:49.810 [DEBUG] [Thread-193032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:11:49.811 [DEBUG] [Thread-193032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:11:49.811 [DEBUG] [Thread-193032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:11:49.829 [INFO] [Thread-193032] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:11:49.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:11:50.449 [DEBUG] [Thread-193032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:11:50.449 [DEBUG] [Thread-193032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:11:50.449 [DEBUG] [Thread-193032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:11:50.489 [DEBUG] [Thread-193032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:11:50.490 [DEBUG] [Thread-193032] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:11:50.492 [DEBUG] [Thread-193032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:11:50.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:11:50.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:11:50.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:11:50.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:11:50.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:11:50.511 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:11:50.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:11:50.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:11:50.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:11:50.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.841432 -999.00   +9.40  20.02     67   +3.60 1 1 1 1 1     0    0 5.18 -30.34 ZNESW 18.7 20.0 151.2 25.7 9.9 -25.3 9.7 -24.3 9.5 -23.1 9.9 -24.3
2026-02-14T22:11:50.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:11:50.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:11:50.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.841432
2026-02-14T22:11:50.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:11:50.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:11:50.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:11:50.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:11:50.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:11:50.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:11:32', tmtdew=6.88, humidity=62.2, cloud=0.0, wind=37.62, temperature=9.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:11:33', seeing=3.35, atlas_timestamp='2026-02-14T20:11:39.725', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.021749999999999048, 0.01425000000000054, -0.010999999999999233, 0.031500000000001194, -0.01974999999999838, -0.0129999999999999, 0.009250000000001535, 0.02949999999999875, 0.005000000000000782, -0.026250000000000995, 0.013999999999999346, 0.05599999999999916, 0.021250000000000213, -0.015499999999999403, 0.02099999999999902, 0.036249999999999005, 0.041499999999999204, -0.027000000000001023, -0.00975000000000037, 0.04499999999999815, 0.031749999999998835, -0.01574999999999882, 0.021750000000000824, 0.049999999999998934, 0.0625, 0.012750000000000483, -0.026500000000000412, 0.0519999999999996, 0.0070000000000014495, 0.0259999999999998, 0.027000000000001023, 0.022749999999998494], zp_timestamp='2026-02-14T20:10:00')
2026-02-14T22:11:50.514 [DEBUG] [Thread-193032] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:11:50.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:11:50.611 [DEBUG] [Thread-193035] [transport.py] [_log()] starting thread (client mode): 0xa57719c0
2026-02-14T22:11:50.611 [DEBUG] [Thread-193035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:11:50.629 [DEBUG] [Thread-193035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:11:50.629 [INFO] [Thread-193035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:11:50.636 [DEBUG] [Thread-193035] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:11:50.637 [DEBUG] [Thread-193035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:11:50.637 [DEBUG] [Thread-193035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:11:50.637 [DEBUG] [Thread-193035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:11:50.637 [DEBUG] [Thread-193035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:11:50.637 [DEBUG] [Thread-193035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:11:50.637 [DEBUG] [Thread-193035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:11:50.637 [DEBUG] [Thread-193035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:11:50.637 [DEBUG] [Thread-193035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:11:50.637 [DEBUG] [Thread-193035] [transport.py] [_log()] client lang: <none>
2026-02-14T22:11:50.637 [DEBUG] [Thread-193035] [transport.py] [_log()] server lang: <none>
2026-02-14T22:11:50.637 [DEBUG] [Thread-193035] [transport.py] [_log()] kex follows: False
2026-02-14T22:11:50.637 [DEBUG] [Thread-193035] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:11:50.637 [DEBUG] [Thread-193035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:11:50.638 [DEBUG] [Thread-193035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:11:50.638 [DEBUG] [Thread-193035] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:11:50.638 [DEBUG] [Thread-193035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:11:50.638 [DEBUG] [Thread-193035] [transport.py] [_log()] Compression: none
2026-02-14T22:11:50.638 [DEBUG] [Thread-193035] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:11:50.697 [DEBUG] [Thread-193035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:11:50.698 [DEBUG] [Thread-193035] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:11:50.698 [DEBUG] [Thread-193035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:11:50.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:11:50.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:11:50.755 [DEBUG] [Thread-193035] [transport.py] [_log()] userauth is OK
2026-02-14T22:11:50.755 [DEBUG] [Thread-193035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:11:50.755 [DEBUG] [Thread-193035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:11:50.755 [DEBUG] [Thread-193035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:11:50.755 [DEBUG] [Thread-193035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:11:50.772 [INFO] [Thread-193035] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:11:50.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-14T22:11:50.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:11:51.544 [DEBUG] [Thread-193035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:11:51.544 [DEBUG] [Thread-193035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:11:51.592 [DEBUG] [Thread-193035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:11:51.592 [DEBUG] [Thread-193035] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:11:51.600 [DEBUG] [Thread-193035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:11:51.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:11:51.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:11:51.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:11:51.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:11:51.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:11:51.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:11:51.632 [DEBUG] [Thread-193035] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:11:52.140 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:11:52.141 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:11:52.920 [DEBUG] [Thread-193037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:12:00.158 [DEBUG] [Thread-193038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:12:00.199 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:12:07.981 [DEBUG] [Thread-193039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:12:21.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:12:21.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:12:21.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-14T22:12:23.020 [DEBUG] [Thread-193040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:12:23.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 12, 8), 6.88, 62.2, 0.0, 39.12, 9.48, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:12:23.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:12:08
2026-02-14T22:12:23.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:12:24.026 [DEBUG] [Thread-193041] [transport.py] [_log()] starting thread (client mode): 0xa5772200
2026-02-14T22:12:24.027 [DEBUG] [Thread-193041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:12:24.046 [DEBUG] [Thread-193041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:12:24.047 [INFO] [Thread-193041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:12:24.050 [DEBUG] [Thread-193041] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:12:24.050 [DEBUG] [Thread-193041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:12:24.051 [DEBUG] [Thread-193041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:12:24.051 [DEBUG] [Thread-193041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:12:24.051 [DEBUG] [Thread-193041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:12:24.051 [DEBUG] [Thread-193041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:12:24.051 [DEBUG] [Thread-193041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:12:24.051 [DEBUG] [Thread-193041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:12:24.051 [DEBUG] [Thread-193041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:12:24.051 [DEBUG] [Thread-193041] [transport.py] [_log()] client lang: <none>
2026-02-14T22:12:24.051 [DEBUG] [Thread-193041] [transport.py] [_log()] server lang: <none>
2026-02-14T22:12:24.051 [DEBUG] [Thread-193041] [transport.py] [_log()] kex follows: False
2026-02-14T22:12:24.052 [DEBUG] [Thread-193041] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:12:24.052 [DEBUG] [Thread-193041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:12:24.052 [DEBUG] [Thread-193041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:12:24.052 [DEBUG] [Thread-193041] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:12:24.052 [DEBUG] [Thread-193041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:12:24.052 [DEBUG] [Thread-193041] [transport.py] [_log()] Compression: none
2026-02-14T22:12:24.052 [DEBUG] [Thread-193041] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:12:24.068 [DEBUG] [Thread-193041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:12:24.068 [DEBUG] [Thread-193041] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:12:24.069 [DEBUG] [Thread-193041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:12:24.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:12:24.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:12:24.071 [DEBUG] [Thread-193041] [transport.py] [_log()] userauth is OK
2026-02-14T22:12:24.071 [DEBUG] [Thread-193041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:12:24.071 [DEBUG] [Thread-193041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:12:24.071 [DEBUG] [Thread-193041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:12:24.071 [DEBUG] [Thread-193041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:12:24.096 [INFO] [Thread-193041] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:12:24.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:12:24.714 [DEBUG] [Thread-193041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:12:24.714 [DEBUG] [Thread-193041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:12:24.714 [DEBUG] [Thread-193041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:12:24.755 [DEBUG] [Thread-193041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:12:24.755 [DEBUG] [Thread-193041] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:12:24.757 [DEBUG] [Thread-193041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:12:24.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:12:24.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:12:24.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:12:24.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:12:24.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:12:24.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:12:24.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:12:24.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:12:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:12:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.841779 -999.00   +9.40  28.03     67   +3.60 1 1 1 1 1     0    0 5.08 -28.61 ZNESW 23.4 28.0 157.2 30.6 9.9 -25.2 9.7 -24.3 9.5 -23.1 9.8 -24.4
2026-02-14T22:12:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:12:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:12:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.841779
2026-02-14T22:12:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:12:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:12:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:12:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:12:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:12:24.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:12:08', tmtdew=6.88, humidity=62.2, cloud=0.0, wind=39.12, temperature=9.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:12:08', seeing=4.1, atlas_timestamp='2026-02-14T20:12:09.706', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.021749999999999048, 0.01425000000000054, -0.010999999999999233, 0.031500000000001194, -0.01974999999999838, -0.0129999999999999, 0.009250000000001535, 0.02949999999999875, 0.005000000000000782, -0.026250000000000995, 0.013999999999999346, 0.05599999999999916, 0.021250000000000213, -0.015499999999999403, 0.02099999999999902, 0.036249999999999005, 0.041499999999999204, -0.027000000000001023, -0.00975000000000037, 0.04499999999999815, 0.031749999999998835, -0.01574999999999882, 0.021750000000000824, 0.049999999999998934, 0.0625, 0.012750000000000483, -0.026500000000000412, 0.0519999999999996, 0.0070000000000014495, 0.0259999999999998, 0.027000000000001023, 0.022749999999998494], zp_timestamp='2026-02-14T20:10:00')
2026-02-14T22:12:24.777 [DEBUG] [Thread-193041] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:12:24.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-14T22:12:24.860 [DEBUG] [Thread-193044] [transport.py] [_log()] starting thread (client mode): 0xa57c1420
2026-02-14T22:12:24.860 [DEBUG] [Thread-193044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:12:24.875 [DEBUG] [Thread-193044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:12:24.875 [INFO] [Thread-193044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:12:24.887 [DEBUG] [Thread-193044] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:12:24.887 [DEBUG] [Thread-193044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:12:24.887 [DEBUG] [Thread-193044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:12:24.887 [DEBUG] [Thread-193044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:12:24.887 [DEBUG] [Thread-193044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:12:24.887 [DEBUG] [Thread-193044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:12:24.887 [DEBUG] [Thread-193044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:12:24.887 [DEBUG] [Thread-193044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:12:24.887 [DEBUG] [Thread-193044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:12:24.887 [DEBUG] [Thread-193044] [transport.py] [_log()] client lang: <none>
2026-02-14T22:12:24.887 [DEBUG] [Thread-193044] [transport.py] [_log()] server lang: <none>
2026-02-14T22:12:24.887 [DEBUG] [Thread-193044] [transport.py] [_log()] kex follows: False
2026-02-14T22:12:24.887 [DEBUG] [Thread-193044] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:12:24.887 [DEBUG] [Thread-193044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:12:24.887 [DEBUG] [Thread-193044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:12:24.887 [DEBUG] [Thread-193044] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:12:24.887 [DEBUG] [Thread-193044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:12:24.887 [DEBUG] [Thread-193044] [transport.py] [_log()] Compression: none
2026-02-14T22:12:24.887 [DEBUG] [Thread-193044] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:12:24.941 [DEBUG] [Thread-193044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:12:24.941 [DEBUG] [Thread-193044] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:12:24.942 [DEBUG] [Thread-193044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:12:24.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:12:24.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:12:24.999 [DEBUG] [Thread-193044] [transport.py] [_log()] userauth is OK
2026-02-14T22:12:24.999 [DEBUG] [Thread-193044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:12:24.999 [DEBUG] [Thread-193044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:12:24.999 [DEBUG] [Thread-193044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:12:24.999 [DEBUG] [Thread-193044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:12:25.013 [INFO] [Thread-193044] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:12:25.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-14T22:12:25.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:12:25.825 [DEBUG] [Thread-193044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:12:25.825 [DEBUG] [Thread-193044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:12:25.873 [DEBUG] [Thread-193044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:12:25.873 [DEBUG] [Thread-193044] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:12:25.883 [DEBUG] [Thread-193044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:12:25.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:12:25.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-14T22:12:25.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-14T22:12:25.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:12:25.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:12:25.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:12:25.920 [DEBUG] [Thread-193044] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:12:38.057 [DEBUG] [Thread-193046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:12:52.343 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:12:52.344 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:12:53.106 [DEBUG] [Thread-193047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:12:55.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:12:55.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:12:55.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-14T22:12:57.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 12, 43), 6.87, 62.23, 0.0, 38.66, 9.45, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:12:57.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:12:43
2026-02-14T22:12:58.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:12:58.352 [DEBUG] [Thread-193048] [transport.py] [_log()] starting thread (client mode): 0xa2d10580
2026-02-14T22:12:58.352 [DEBUG] [Thread-193048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:12:58.372 [DEBUG] [Thread-193048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:12:58.372 [INFO] [Thread-193048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:12:58.375 [DEBUG] [Thread-193048] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:12:58.375 [DEBUG] [Thread-193048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:12:58.375 [DEBUG] [Thread-193048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:12:58.375 [DEBUG] [Thread-193048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:12:58.375 [DEBUG] [Thread-193048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:12:58.375 [DEBUG] [Thread-193048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:12:58.375 [DEBUG] [Thread-193048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:12:58.375 [DEBUG] [Thread-193048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:12:58.375 [DEBUG] [Thread-193048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:12:58.375 [DEBUG] [Thread-193048] [transport.py] [_log()] client lang: <none>
2026-02-14T22:12:58.375 [DEBUG] [Thread-193048] [transport.py] [_log()] server lang: <none>
2026-02-14T22:12:58.375 [DEBUG] [Thread-193048] [transport.py] [_log()] kex follows: False
2026-02-14T22:12:58.375 [DEBUG] [Thread-193048] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:12:58.375 [DEBUG] [Thread-193048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:12:58.375 [DEBUG] [Thread-193048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:12:58.375 [DEBUG] [Thread-193048] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:12:58.375 [DEBUG] [Thread-193048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:12:58.375 [DEBUG] [Thread-193048] [transport.py] [_log()] Compression: none
2026-02-14T22:12:58.376 [DEBUG] [Thread-193048] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:12:58.391 [DEBUG] [Thread-193048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:12:58.391 [DEBUG] [Thread-193048] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:12:58.392 [DEBUG] [Thread-193048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:12:58.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:12:58.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:12:58.393 [DEBUG] [Thread-193048] [transport.py] [_log()] userauth is OK
2026-02-14T22:12:58.393 [DEBUG] [Thread-193048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:12:58.393 [DEBUG] [Thread-193048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:12:58.393 [DEBUG] [Thread-193048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:12:58.393 [DEBUG] [Thread-193048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:12:58.424 [INFO] [Thread-193048] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:12:58.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:12:59.007 [DEBUG] [Thread-193048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:12:59.007 [DEBUG] [Thread-193048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:12:59.008 [DEBUG] [Thread-193048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:12:59.048 [DEBUG] [Thread-193048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:12:59.049 [DEBUG] [Thread-193048] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:12:59.052 [DEBUG] [Thread-193048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:12:59.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:12:59.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:12:59.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:12:59.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:12:59.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:12:59.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:12:59.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:12:59.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:12:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:12:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.841779 -999.00   +9.40  28.03     67   +3.60 1 1 1 1 1     0    0 5.08 -28.61 ZNESW 23.4 28.0 157.2 30.6 9.9 -25.2 9.7 -24.3 9.5 -23.1 9.8 -24.4
2026-02-14T22:12:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:12:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:12:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.841779
2026-02-14T22:12:59.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:12:59.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:12:59.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:12:59.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:12:59.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:12:59.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:12:43', tmtdew=6.87, humidity=62.23, cloud=0.0, wind=38.66, temperature=9.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:12:43', seeing=3.26, atlas_timestamp='2026-02-14T20:12:09.706', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.021749999999999048, 0.01425000000000054, -0.010999999999999233, 0.031500000000001194, -0.01974999999999838, -0.0129999999999999, 0.009250000000001535, 0.02949999999999875, 0.005000000000000782, -0.026250000000000995, 0.013999999999999346, 0.05599999999999916, 0.021250000000000213, -0.015499999999999403, 0.02099999999999902, 0.036249999999999005, 0.041499999999999204, -0.027000000000001023, -0.00975000000000037, 0.04499999999999815, 0.031749999999998835, -0.01574999999999882, 0.021750000000000824, 0.049999999999998934, 0.0625, 0.012750000000000483, -0.026500000000000412, 0.0519999999999996, 0.0070000000000014495, 0.0259999999999998, 0.027000000000001023, 0.022749999999998494], zp_timestamp='2026-02-14T20:10:00')
2026-02-14T22:12:59.081 [DEBUG] [Thread-193048] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:12:59.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-14T22:12:59.182 [DEBUG] [Thread-193051] [transport.py] [_log()] starting thread (client mode): 0xa5771c30
2026-02-14T22:12:59.182 [DEBUG] [Thread-193051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:12:59.198 [DEBUG] [Thread-193051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:12:59.199 [INFO] [Thread-193051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:12:59.208 [DEBUG] [Thread-193051] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:12:59.209 [DEBUG] [Thread-193051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:12:59.209 [DEBUG] [Thread-193051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:12:59.209 [DEBUG] [Thread-193051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:12:59.209 [DEBUG] [Thread-193051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:12:59.209 [DEBUG] [Thread-193051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:12:59.209 [DEBUG] [Thread-193051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:12:59.209 [DEBUG] [Thread-193051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:12:59.209 [DEBUG] [Thread-193051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:12:59.209 [DEBUG] [Thread-193051] [transport.py] [_log()] client lang: <none>
2026-02-14T22:12:59.209 [DEBUG] [Thread-193051] [transport.py] [_log()] server lang: <none>
2026-02-14T22:12:59.209 [DEBUG] [Thread-193051] [transport.py] [_log()] kex follows: False
2026-02-14T22:12:59.209 [DEBUG] [Thread-193051] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:12:59.209 [DEBUG] [Thread-193051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:12:59.210 [DEBUG] [Thread-193051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:12:59.210 [DEBUG] [Thread-193051] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:12:59.210 [DEBUG] [Thread-193051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:12:59.210 [DEBUG] [Thread-193051] [transport.py] [_log()] Compression: none
2026-02-14T22:12:59.210 [DEBUG] [Thread-193051] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:12:59.269 [DEBUG] [Thread-193051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:12:59.270 [DEBUG] [Thread-193051] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:12:59.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:12:59.271 [DEBUG] [Thread-193051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:12:59.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:12:59.328 [DEBUG] [Thread-193051] [transport.py] [_log()] userauth is OK
2026-02-14T22:12:59.328 [DEBUG] [Thread-193051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:12:59.328 [DEBUG] [Thread-193051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:12:59.328 [DEBUG] [Thread-193051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:12:59.328 [DEBUG] [Thread-193051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:12:59.350 [INFO] [Thread-193051] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:12:59.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-14T22:12:59.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:13:00.210 [DEBUG] [Thread-193051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:13:00.210 [DEBUG] [Thread-193051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:13:00.223 [DEBUG] [Thread-193053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:13:00.259 [DEBUG] [Thread-193051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:13:00.259 [DEBUG] [Thread-193051] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:13:00.268 [DEBUG] [Thread-193051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:13:00.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:13:00.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-14T22:13:00.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-14T22:13:00.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:13:00.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:13:00.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:13:00.306 [DEBUG] [Thread-193051] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:13:08.138 [DEBUG] [Thread-193054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:13:23.191 [DEBUG] [Thread-193055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:13:30.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:13:30.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:13:30.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-14T22:13:32.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 13, 18), 6.88, 62.21, 0.0, 35.89, 9.47, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:13:32.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:13:18
2026-02-14T22:13:32.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:13:32.891 [DEBUG] [Thread-193056] [transport.py] [_log()] starting thread (client mode): 0xa57725f0
2026-02-14T22:13:32.891 [DEBUG] [Thread-193056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:13:32.911 [DEBUG] [Thread-193056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:13:32.911 [INFO] [Thread-193056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:13:32.914 [DEBUG] [Thread-193056] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:13:32.914 [DEBUG] [Thread-193056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:13:32.914 [DEBUG] [Thread-193056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:13:32.914 [DEBUG] [Thread-193056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:13:32.914 [DEBUG] [Thread-193056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:13:32.914 [DEBUG] [Thread-193056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:13:32.914 [DEBUG] [Thread-193056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:13:32.914 [DEBUG] [Thread-193056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:13:32.914 [DEBUG] [Thread-193056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:13:32.914 [DEBUG] [Thread-193056] [transport.py] [_log()] client lang: <none>
2026-02-14T22:13:32.914 [DEBUG] [Thread-193056] [transport.py] [_log()] server lang: <none>
2026-02-14T22:13:32.914 [DEBUG] [Thread-193056] [transport.py] [_log()] kex follows: False
2026-02-14T22:13:32.914 [DEBUG] [Thread-193056] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:13:32.914 [DEBUG] [Thread-193056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:13:32.914 [DEBUG] [Thread-193056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:13:32.915 [DEBUG] [Thread-193056] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:13:32.915 [DEBUG] [Thread-193056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:13:32.915 [DEBUG] [Thread-193056] [transport.py] [_log()] Compression: none
2026-02-14T22:13:32.915 [DEBUG] [Thread-193056] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:13:32.932 [DEBUG] [Thread-193056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:13:32.933 [DEBUG] [Thread-193056] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:13:32.933 [DEBUG] [Thread-193056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:13:32.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:13:32.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:13:32.935 [DEBUG] [Thread-193056] [transport.py] [_log()] userauth is OK
2026-02-14T22:13:32.935 [DEBUG] [Thread-193056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:13:32.935 [DEBUG] [Thread-193056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:13:32.935 [DEBUG] [Thread-193056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:13:32.936 [DEBUG] [Thread-193056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:13:32.957 [INFO] [Thread-193056] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:13:32.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:13:33.701 [DEBUG] [Thread-193056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:13:33.702 [DEBUG] [Thread-193056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:13:33.702 [DEBUG] [Thread-193056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:13:33.742 [DEBUG] [Thread-193056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:13:33.743 [DEBUG] [Thread-193056] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:13:33.746 [DEBUG] [Thread-193056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:13:33.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:13:33.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:13:33.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:13:33.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:13:33.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:13:33.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:13:33.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:13:33.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:13:33.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:13:33.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.842126 -999.00   +9.40  21.58     67   +3.60 1 1 1 1 1     0    0 5.28 -27.87 ZNESW 26.6 21.6 159.2 33.5 9.9 -25.2 9.7 -24.1 9.5 -23.3 9.8 -24.5
2026-02-14T22:13:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:13:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:13:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.842126
2026-02-14T22:13:33.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:13:33.779 [DEBUG] [Thread-193056] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:13:33.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:13:33.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:13:33.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:13:33.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:13:33.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:13:18', tmtdew=6.88, humidity=62.21, cloud=0.0, wind=35.89, temperature=9.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:13:19', seeing=3.26, atlas_timestamp='2026-02-14T20:12:39.686', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.021749999999999048, 0.01425000000000054, -0.010999999999999233, 0.031500000000001194, -0.01974999999999838, -0.0129999999999999, 0.009250000000001535, 0.02949999999999875, 0.005000000000000782, -0.026250000000000995, 0.013999999999999346, 0.05599999999999916, 0.021250000000000213, -0.015499999999999403, 0.02099999999999902, 0.036249999999999005, 0.041499999999999204, -0.027000000000001023, -0.00975000000000037, 0.04499999999999815, 0.031749999999998835, -0.01574999999999882, 0.021750000000000824, 0.049999999999998934, 0.0625, 0.012750000000000483, -0.026500000000000412, 0.0519999999999996, 0.0070000000000014495, 0.0259999999999998, 0.027000000000001023, 0.022749999999998494], zp_timestamp='2026-02-14T20:10:00')
2026-02-14T22:13:33.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-14T22:13:33.878 [DEBUG] [Thread-193059] [transport.py] [_log()] starting thread (client mode): 0xa5772e00
2026-02-14T22:13:33.879 [DEBUG] [Thread-193059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:13:33.893 [DEBUG] [Thread-193059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:13:33.894 [INFO] [Thread-193059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:13:33.901 [DEBUG] [Thread-193059] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:13:33.902 [DEBUG] [Thread-193059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:13:33.902 [DEBUG] [Thread-193059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:13:33.902 [DEBUG] [Thread-193059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:13:33.902 [DEBUG] [Thread-193059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:13:33.902 [DEBUG] [Thread-193059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:13:33.902 [DEBUG] [Thread-193059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:13:33.902 [DEBUG] [Thread-193059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:13:33.902 [DEBUG] [Thread-193059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:13:33.902 [DEBUG] [Thread-193059] [transport.py] [_log()] client lang: <none>
2026-02-14T22:13:33.902 [DEBUG] [Thread-193059] [transport.py] [_log()] server lang: <none>
2026-02-14T22:13:33.902 [DEBUG] [Thread-193059] [transport.py] [_log()] kex follows: False
2026-02-14T22:13:33.902 [DEBUG] [Thread-193059] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:13:33.902 [DEBUG] [Thread-193059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:13:33.902 [DEBUG] [Thread-193059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:13:33.902 [DEBUG] [Thread-193059] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:13:33.902 [DEBUG] [Thread-193059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:13:33.902 [DEBUG] [Thread-193059] [transport.py] [_log()] Compression: none
2026-02-14T22:13:33.903 [DEBUG] [Thread-193059] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:13:33.963 [DEBUG] [Thread-193059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:13:33.964 [DEBUG] [Thread-193059] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:13:33.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:13:33.965 [DEBUG] [Thread-193059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:13:33.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:13:34.021 [DEBUG] [Thread-193059] [transport.py] [_log()] userauth is OK
2026-02-14T22:13:34.022 [DEBUG] [Thread-193059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:13:34.022 [DEBUG] [Thread-193059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:13:34.022 [DEBUG] [Thread-193059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:13:34.022 [DEBUG] [Thread-193059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:13:34.041 [INFO] [Thread-193059] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:13:34.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-14T22:13:34.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:13:34.100 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:13:34.862 [DEBUG] [Thread-193059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:13:34.862 [DEBUG] [Thread-193059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:13:34.910 [DEBUG] [Thread-193059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:13:34.910 [DEBUG] [Thread-193059] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:13:34.919 [DEBUG] [Thread-193059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:13:34.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:13:34.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:13:34.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:13:34.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:13:34.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:13:34.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:13:34.957 [DEBUG] [Thread-193059] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:13:38.228 [DEBUG] [Thread-193061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:13:52.548 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:13:52.549 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:13:53.279 [DEBUG] [Thread-193062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:14:00.304 [DEBUG] [Thread-193063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:14:04.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:14:04.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:14:04.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:14:06.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 13, 54), 6.82, 62.23, 0.0, 31.53, 9.43, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:14:06.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:13:54
2026-02-14T22:14:07.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:14:07.385 [DEBUG] [Thread-193064] [transport.py] [_log()] starting thread (client mode): 0xa2d13d00
2026-02-14T22:14:07.385 [DEBUG] [Thread-193064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:14:07.405 [DEBUG] [Thread-193064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:14:07.405 [INFO] [Thread-193064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:14:07.407 [DEBUG] [Thread-193064] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:14:07.407 [DEBUG] [Thread-193064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:14:07.408 [DEBUG] [Thread-193064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:14:07.408 [DEBUG] [Thread-193064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:14:07.408 [DEBUG] [Thread-193064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:14:07.408 [DEBUG] [Thread-193064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:14:07.408 [DEBUG] [Thread-193064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:14:07.408 [DEBUG] [Thread-193064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:14:07.408 [DEBUG] [Thread-193064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:14:07.408 [DEBUG] [Thread-193064] [transport.py] [_log()] client lang: <none>
2026-02-14T22:14:07.408 [DEBUG] [Thread-193064] [transport.py] [_log()] server lang: <none>
2026-02-14T22:14:07.408 [DEBUG] [Thread-193064] [transport.py] [_log()] kex follows: False
2026-02-14T22:14:07.408 [DEBUG] [Thread-193064] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:14:07.408 [DEBUG] [Thread-193064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:14:07.408 [DEBUG] [Thread-193064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:14:07.408 [DEBUG] [Thread-193064] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:14:07.408 [DEBUG] [Thread-193064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:14:07.408 [DEBUG] [Thread-193064] [transport.py] [_log()] Compression: none
2026-02-14T22:14:07.408 [DEBUG] [Thread-193064] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:14:07.418 [DEBUG] [Thread-193064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:14:07.418 [DEBUG] [Thread-193064] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:14:07.418 [DEBUG] [Thread-193064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:14:07.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:14:07.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:14:07.420 [DEBUG] [Thread-193064] [transport.py] [_log()] userauth is OK
2026-02-14T22:14:07.420 [DEBUG] [Thread-193064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:14:07.420 [DEBUG] [Thread-193064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:14:07.420 [DEBUG] [Thread-193064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:14:07.420 [DEBUG] [Thread-193064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:14:07.432 [INFO] [Thread-193064] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:14:07.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:14:08.071 [DEBUG] [Thread-193064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:14:08.071 [DEBUG] [Thread-193064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:14:08.072 [DEBUG] [Thread-193064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:14:08.112 [DEBUG] [Thread-193064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:14:08.112 [DEBUG] [Thread-193064] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:14:08.115 [DEBUG] [Thread-193064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:14:08.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:14:08.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:14:08.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:14:08.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:14:08.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:14:08.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:14:08.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:14:08.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:14:08.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:14:08.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.842473 -999.00   +9.40  23.93     67   +3.60 1 1 1 1 1     0    0 5.23 -27.73 ZNESW 20.5 23.9 170.4 37.0 9.9 -25.2 9.7 -24.0 9.4 -23.2 9.8 -24.4
2026-02-14T22:14:08.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:14:08.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:14:08.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.842473
2026-02-14T22:14:08.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:14:08.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:14:08.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:14:08.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:14:08.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:14:08.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:13:54', tmtdew=6.82, humidity=62.23, cloud=0.0, wind=31.53, temperature=9.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:13:54', seeing=3.39, atlas_timestamp='2026-02-14T20:13:09.667', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.021749999999999048, 0.01425000000000054, -0.010999999999999233, 0.031500000000001194, -0.01974999999999838, -0.0129999999999999, 0.009250000000001535, 0.02949999999999875, 0.005000000000000782, -0.026250000000000995, 0.013999999999999346, 0.05599999999999916, 0.021250000000000213, -0.015499999999999403, 0.02099999999999902, 0.036249999999999005, 0.041499999999999204, -0.027000000000001023, -0.00975000000000037, 0.04499999999999815, 0.031749999999998835, -0.01574999999999882, 0.021750000000000824, 0.049999999999998934, 0.0625, 0.012750000000000483, -0.026500000000000412, 0.0519999999999996, 0.0070000000000014495, 0.0259999999999998, 0.027000000000001023, 0.022749999999998494], zp_timestamp='2026-02-14T20:10:00')
2026-02-14T22:14:08.138 [DEBUG] [Thread-193064] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:14:08.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-14T22:14:08.233 [DEBUG] [Thread-193067] [transport.py] [_log()] starting thread (client mode): 0xa57c2f50
2026-02-14T22:14:08.233 [DEBUG] [Thread-193067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:14:08.252 [DEBUG] [Thread-193067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:14:08.252 [INFO] [Thread-193067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:14:08.261 [DEBUG] [Thread-193067] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:14:08.261 [DEBUG] [Thread-193067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:14:08.261 [DEBUG] [Thread-193067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:14:08.261 [DEBUG] [Thread-193067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:14:08.261 [DEBUG] [Thread-193067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:14:08.261 [DEBUG] [Thread-193067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:14:08.261 [DEBUG] [Thread-193067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:14:08.261 [DEBUG] [Thread-193067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:14:08.261 [DEBUG] [Thread-193067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:14:08.261 [DEBUG] [Thread-193067] [transport.py] [_log()] client lang: <none>
2026-02-14T22:14:08.261 [DEBUG] [Thread-193067] [transport.py] [_log()] server lang: <none>
2026-02-14T22:14:08.262 [DEBUG] [Thread-193067] [transport.py] [_log()] kex follows: False
2026-02-14T22:14:08.262 [DEBUG] [Thread-193067] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:14:08.262 [DEBUG] [Thread-193067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:14:08.262 [DEBUG] [Thread-193067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:14:08.262 [DEBUG] [Thread-193067] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:14:08.262 [DEBUG] [Thread-193067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:14:08.262 [DEBUG] [Thread-193067] [transport.py] [_log()] Compression: none
2026-02-14T22:14:08.262 [DEBUG] [Thread-193067] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:14:08.318 [DEBUG] [Thread-193069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:14:08.325 [DEBUG] [Thread-193067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:14:08.325 [DEBUG] [Thread-193067] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:14:08.325 [DEBUG] [Thread-193067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:14:08.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:14:08.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:14:08.381 [DEBUG] [Thread-193067] [transport.py] [_log()] userauth is OK
2026-02-14T22:14:08.382 [DEBUG] [Thread-193067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:14:08.382 [DEBUG] [Thread-193067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:14:08.382 [DEBUG] [Thread-193067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:14:08.382 [DEBUG] [Thread-193067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:14:08.404 [INFO] [Thread-193067] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:14:08.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-14T22:14:08.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:14:09.227 [DEBUG] [Thread-193067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:14:09.227 [DEBUG] [Thread-193067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:14:09.276 [DEBUG] [Thread-193067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:14:09.276 [DEBUG] [Thread-193067] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:14:09.286 [DEBUG] [Thread-193067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:14:09.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:14: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-14T22:14:09.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:14:09.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:14:09.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:14:09.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:14:09.325 [DEBUG] [Thread-193067] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:14:23.367 [DEBUG] [Thread-193070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:14:38.399 [DEBUG] [Thread-193071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:14:39.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:14:39.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:14: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-14T22:14:41.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 14, 29), 6.81, 62.28, 0.0, 33.28, 9.4, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:14:41.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:14:29
2026-02-14T22:14:41.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:14:41.775 [DEBUG] [Thread-193072] [transport.py] [_log()] starting thread (client mode): 0xa2d13310
2026-02-14T22:14:41.775 [DEBUG] [Thread-193072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:14:41.796 [DEBUG] [Thread-193072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:14:41.796 [INFO] [Thread-193072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:14:41.797 [DEBUG] [Thread-193072] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:14:41.798 [DEBUG] [Thread-193072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:14:41.798 [DEBUG] [Thread-193072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:14:41.798 [DEBUG] [Thread-193072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:14:41.798 [DEBUG] [Thread-193072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:14:41.798 [DEBUG] [Thread-193072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:14:41.798 [DEBUG] [Thread-193072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:14:41.798 [DEBUG] [Thread-193072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:14:41.798 [DEBUG] [Thread-193072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:14:41.798 [DEBUG] [Thread-193072] [transport.py] [_log()] client lang: <none>
2026-02-14T22:14:41.798 [DEBUG] [Thread-193072] [transport.py] [_log()] server lang: <none>
2026-02-14T22:14:41.798 [DEBUG] [Thread-193072] [transport.py] [_log()] kex follows: False
2026-02-14T22:14:41.798 [DEBUG] [Thread-193072] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:14:41.798 [DEBUG] [Thread-193072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:14:41.798 [DEBUG] [Thread-193072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:14:41.798 [DEBUG] [Thread-193072] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:14:41.799 [DEBUG] [Thread-193072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:14:41.799 [DEBUG] [Thread-193072] [transport.py] [_log()] Compression: none
2026-02-14T22:14:41.799 [DEBUG] [Thread-193072] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:14:41.812 [DEBUG] [Thread-193072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:14:41.812 [DEBUG] [Thread-193072] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:14:41.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:14:41.813 [DEBUG] [Thread-193072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:14:41.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:14:41.815 [DEBUG] [Thread-193072] [transport.py] [_log()] userauth is OK
2026-02-14T22:14:41.816 [DEBUG] [Thread-193072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:14:41.816 [DEBUG] [Thread-193072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:14:41.816 [DEBUG] [Thread-193072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:14:41.816 [DEBUG] [Thread-193072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:14:41.835 [INFO] [Thread-193072] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:14:41.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:14:42.464 [DEBUG] [Thread-193072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:14:42.465 [DEBUG] [Thread-193072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:14:42.465 [DEBUG] [Thread-193072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:14:42.505 [DEBUG] [Thread-193072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:14:42.506 [DEBUG] [Thread-193072] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:14:42.509 [DEBUG] [Thread-193072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:14:42.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:14:42.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:14:42.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:14:42.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:14:42.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:14:42.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:14:42.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:14:42.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:14:42.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:14:42.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.842821 -999.00   +9.40  26.28     67   +3.60 1 1 1 1 1     0    0 5.16 -29.15 ZNESW 19.9 26.3 152.0 32.9 9.9 -25.0 9.7 -24.0 9.5 -23.1 9.8 -24.5
2026-02-14T22:14:42.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:14:42.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:14:42.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.842821
2026-02-14T22:14:42.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:14:42.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:14:42.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:14:42.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:14:42.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:14:42.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:14:29', tmtdew=6.81, humidity=62.28, cloud=0.0, wind=33.28, temperature=9.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:14:29', seeing=3.94, atlas_timestamp='2026-02-14T20:13:39.734', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.021749999999999048, 0.01425000000000054, -0.010999999999999233, 0.031500000000001194, -0.01974999999999838, -0.0129999999999999, 0.009250000000001535, 0.02949999999999875, 0.005000000000000782, -0.026250000000000995, 0.013999999999999346, 0.05599999999999916, 0.021250000000000213, -0.015499999999999403, 0.02099999999999902, 0.036249999999999005, 0.041499999999999204, -0.027000000000001023, -0.00975000000000037, 0.04499999999999815, 0.031749999999998835, -0.01574999999999882, 0.021750000000000824, 0.049999999999998934, 0.0625, 0.012750000000000483, -0.026500000000000412, 0.0519999999999996, 0.0070000000000014495, 0.0259999999999998, 0.027000000000001023, 0.022749999999998494], zp_timestamp='2026-02-14T20:13:00')
2026-02-14T22:14:42.536 [DEBUG] [Thread-193072] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:14:42.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-14T22:14:42.645 [DEBUG] [Thread-193075] [transport.py] [_log()] starting thread (client mode): 0xa57c3be0
2026-02-14T22:14:42.645 [DEBUG] [Thread-193075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:14:42.661 [DEBUG] [Thread-193075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:14:42.662 [INFO] [Thread-193075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:14:42.670 [DEBUG] [Thread-193075] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:14:42.670 [DEBUG] [Thread-193075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:14:42.670 [DEBUG] [Thread-193075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:14:42.670 [DEBUG] [Thread-193075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:14:42.670 [DEBUG] [Thread-193075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:14:42.670 [DEBUG] [Thread-193075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:14:42.670 [DEBUG] [Thread-193075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:14:42.670 [DEBUG] [Thread-193075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:14:42.670 [DEBUG] [Thread-193075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:14:42.670 [DEBUG] [Thread-193075] [transport.py] [_log()] client lang: <none>
2026-02-14T22:14:42.670 [DEBUG] [Thread-193075] [transport.py] [_log()] server lang: <none>
2026-02-14T22:14:42.670 [DEBUG] [Thread-193075] [transport.py] [_log()] kex follows: False
2026-02-14T22:14:42.671 [DEBUG] [Thread-193075] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:14:42.671 [DEBUG] [Thread-193075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:14:42.671 [DEBUG] [Thread-193075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:14:42.671 [DEBUG] [Thread-193075] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:14:42.671 [DEBUG] [Thread-193075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:14:42.671 [DEBUG] [Thread-193075] [transport.py] [_log()] Compression: none
2026-02-14T22:14:42.671 [DEBUG] [Thread-193075] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:14:42.730 [DEBUG] [Thread-193075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:14:42.731 [DEBUG] [Thread-193075] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:14:42.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:14:42.732 [DEBUG] [Thread-193075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:14:42.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:14:42.791 [DEBUG] [Thread-193075] [transport.py] [_log()] userauth is OK
2026-02-14T22:14:42.791 [DEBUG] [Thread-193075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:14:42.791 [DEBUG] [Thread-193075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:14:42.791 [DEBUG] [Thread-193075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:14:42.792 [DEBUG] [Thread-193075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:14:42.811 [INFO] [Thread-193075] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:14:42.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-14T22:14:42.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:14:43.619 [DEBUG] [Thread-193075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:14:43.620 [DEBUG] [Thread-193075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:14:43.668 [DEBUG] [Thread-193075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:14:43.668 [DEBUG] [Thread-193075] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:14:43.681 [DEBUG] [Thread-193075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:14:43.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:14:43.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:14:43.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:14:43.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:14:43.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:14:43.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:14:43.719 [DEBUG] [Thread-193075] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:14:52.751 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:14:52.753 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:14:53.438 [DEBUG] [Thread-193077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:15:00.361 [DEBUG] [Thread-193078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:15:07.748 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:15:08.490 [DEBUG] [Thread-193079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:15:13.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:15:13.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:15:13.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-14T22:15:15.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 15, 5), 6.82, 62.23, 0.0, 34.14, 9.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:15:15.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:15:05
2026-02-14T22:15:16.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:15:16.166 [DEBUG] [Thread-193080] [transport.py] [_log()] starting thread (client mode): 0xa2d01d20
2026-02-14T22:15:16.166 [DEBUG] [Thread-193080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:15:16.187 [DEBUG] [Thread-193080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:15:16.187 [INFO] [Thread-193080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:15:16.190 [DEBUG] [Thread-193080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:15:16.190 [DEBUG] [Thread-193080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:15:16.190 [DEBUG] [Thread-193080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:15:16.190 [DEBUG] [Thread-193080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:15:16.190 [DEBUG] [Thread-193080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:15:16.190 [DEBUG] [Thread-193080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:15:16.191 [DEBUG] [Thread-193080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:15:16.191 [DEBUG] [Thread-193080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:15:16.191 [DEBUG] [Thread-193080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:15:16.191 [DEBUG] [Thread-193080] [transport.py] [_log()] client lang: <none>
2026-02-14T22:15:16.191 [DEBUG] [Thread-193080] [transport.py] [_log()] server lang: <none>
2026-02-14T22:15:16.191 [DEBUG] [Thread-193080] [transport.py] [_log()] kex follows: False
2026-02-14T22:15:16.191 [DEBUG] [Thread-193080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:15:16.191 [DEBUG] [Thread-193080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:15:16.191 [DEBUG] [Thread-193080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:15:16.191 [DEBUG] [Thread-193080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:15:16.191 [DEBUG] [Thread-193080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:15:16.191 [DEBUG] [Thread-193080] [transport.py] [_log()] Compression: none
2026-02-14T22:15:16.191 [DEBUG] [Thread-193080] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:15:16.209 [DEBUG] [Thread-193080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:15:16.209 [DEBUG] [Thread-193080] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:15:16.210 [DEBUG] [Thread-193080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:15:16.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:15:16.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:15:16.212 [DEBUG] [Thread-193080] [transport.py] [_log()] userauth is OK
2026-02-14T22:15:16.212 [DEBUG] [Thread-193080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:15:16.212 [DEBUG] [Thread-193080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:15:16.212 [DEBUG] [Thread-193080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:15:16.212 [DEBUG] [Thread-193080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:15:16.237 [INFO] [Thread-193080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:15:16.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:15:18.768 [DEBUG] [Thread-193080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:15:18.769 [DEBUG] [Thread-193080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:15:18.769 [DEBUG] [Thread-193080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:15:18.810 [DEBUG] [Thread-193080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:15:18.811 [DEBUG] [Thread-193080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:15:18.813 [DEBUG] [Thread-193080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:15:18.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:15:18.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:15:18.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:15:18.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:15:18.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:15:18.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:15:18.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:15:18.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:15:18.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:15:18.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.843515 -999.00   +9.40  25.60     67   +3.60 1 1 1 1 1     0    0 5.05 -30.27 ZNESW 24.1 25.6 163.2 38.9 9.8 -25.2 9.7 -24.1 9.5 -23.1 9.8 -24.3
2026-02-14T22:15:18.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:15:18.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:15:18.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.843515
2026-02-14T22:15:18.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:15:18.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:15:18.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:15:18.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:15:18.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:15:18.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:15:05', tmtdew=6.82, humidity=62.23, cloud=0.0, wind=34.14, temperature=9.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:15:06', seeing=3.51, atlas_timestamp='2026-02-14T20:14:39.696', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.021749999999999048, 0.01425000000000054, -0.010999999999999233, 0.031500000000001194, -0.01974999999999838, -0.0129999999999999, 0.009250000000001535, 0.02949999999999875, 0.005000000000000782, -0.026250000000000995, 0.013999999999999346, 0.05599999999999916, 0.021250000000000213, -0.015499999999999403, 0.02099999999999902, 0.036249999999999005, 0.041499999999999204, -0.027000000000001023, -0.00975000000000037, 0.04499999999999815, 0.031749999999998835, -0.01574999999999882, 0.021750000000000824, 0.049999999999998934, 0.0625, 0.012750000000000483, -0.026500000000000412, 0.0519999999999996, 0.0070000000000014495, 0.0259999999999998, 0.027000000000001023, 0.022749999999998494], zp_timestamp='2026-02-14T20:13:00')
2026-02-14T22:15:18.832 [DEBUG] [Thread-193080] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:15:18.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-14T22:15:18.924 [DEBUG] [Thread-193083] [transport.py] [_log()] starting thread (client mode): 0xa2d79e40
2026-02-14T22:15:18.924 [DEBUG] [Thread-193083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:15:18.938 [DEBUG] [Thread-193083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:15:18.939 [INFO] [Thread-193083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:15:18.946 [DEBUG] [Thread-193083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:15:18.947 [DEBUG] [Thread-193083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:15:18.947 [DEBUG] [Thread-193083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:15:18.947 [DEBUG] [Thread-193083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:15:18.947 [DEBUG] [Thread-193083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:15:18.947 [DEBUG] [Thread-193083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:15:18.947 [DEBUG] [Thread-193083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:15:18.947 [DEBUG] [Thread-193083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:15:18.947 [DEBUG] [Thread-193083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:15:18.947 [DEBUG] [Thread-193083] [transport.py] [_log()] client lang: <none>
2026-02-14T22:15:18.947 [DEBUG] [Thread-193083] [transport.py] [_log()] server lang: <none>
2026-02-14T22:15:18.947 [DEBUG] [Thread-193083] [transport.py] [_log()] kex follows: False
2026-02-14T22:15:18.947 [DEBUG] [Thread-193083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:15:18.947 [DEBUG] [Thread-193083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:15:18.947 [DEBUG] [Thread-193083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:15:18.947 [DEBUG] [Thread-193083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:15:18.947 [DEBUG] [Thread-193083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:15:18.947 [DEBUG] [Thread-193083] [transport.py] [_log()] Compression: none
2026-02-14T22:15:18.947 [DEBUG] [Thread-193083] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:15:19.006 [DEBUG] [Thread-193083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:15:19.006 [DEBUG] [Thread-193083] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:15:19.007 [DEBUG] [Thread-193083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:15:19.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:15:19.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:15:19.062 [DEBUG] [Thread-193083] [transport.py] [_log()] userauth is OK
2026-02-14T22:15:19.062 [DEBUG] [Thread-193083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:15:19.063 [DEBUG] [Thread-193083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:15:19.063 [DEBUG] [Thread-193083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:15:19.063 [DEBUG] [Thread-193083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:15:19.082 [INFO] [Thread-193083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:15: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-14T22:15:19.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:15:19.885 [DEBUG] [Thread-193083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:15:19.885 [DEBUG] [Thread-193083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:15:19.935 [DEBUG] [Thread-193083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:15:19.935 [DEBUG] [Thread-193083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:15:19.945 [DEBUG] [Thread-193083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:15:19.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:15:19.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:15:19.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:15:19.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:15:19.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:15:19.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:15:19.985 [DEBUG] [Thread-193083] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:15:23.530 [DEBUG] [Thread-193085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:15:38.581 [DEBUG] [Thread-193086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:15:50.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:15:50.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:15:50.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-14T22:15:52.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 15, 41), 7.08, 61.33, 0.0, 46.26, 9.77, 0, 0, 0, 2, 1, 0),)
2026-02-14T22:15:52.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:15:41
2026-02-14T22:15:52.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:15:52.634 [DEBUG] [Thread-193087] [transport.py] [_log()] starting thread (client mode): 0xa57c28c0
2026-02-14T22:15:52.634 [DEBUG] [Thread-193087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:15:52.654 [DEBUG] [Thread-193087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:15:52.654 [INFO] [Thread-193087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:15:52.657 [DEBUG] [Thread-193087] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:15:52.657 [DEBUG] [Thread-193087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:15:52.657 [DEBUG] [Thread-193087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:15:52.657 [DEBUG] [Thread-193087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:15:52.657 [DEBUG] [Thread-193087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:15:52.657 [DEBUG] [Thread-193087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:15:52.657 [DEBUG] [Thread-193087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:15:52.657 [DEBUG] [Thread-193087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:15:52.657 [DEBUG] [Thread-193087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:15:52.657 [DEBUG] [Thread-193087] [transport.py] [_log()] client lang: <none>
2026-02-14T22:15:52.657 [DEBUG] [Thread-193087] [transport.py] [_log()] server lang: <none>
2026-02-14T22:15:52.657 [DEBUG] [Thread-193087] [transport.py] [_log()] kex follows: False
2026-02-14T22:15:52.657 [DEBUG] [Thread-193087] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:15:52.657 [DEBUG] [Thread-193087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:15:52.657 [DEBUG] [Thread-193087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:15:52.657 [DEBUG] [Thread-193087] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:15:52.657 [DEBUG] [Thread-193087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:15:52.657 [DEBUG] [Thread-193087] [transport.py] [_log()] Compression: none
2026-02-14T22:15:52.657 [DEBUG] [Thread-193087] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:15:52.677 [DEBUG] [Thread-193087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:15:52.677 [DEBUG] [Thread-193087] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:15:52.678 [DEBUG] [Thread-193087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:15:52.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:15:52.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:15:52.681 [DEBUG] [Thread-193087] [transport.py] [_log()] userauth is OK
2026-02-14T22:15:52.681 [DEBUG] [Thread-193087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:15:52.681 [DEBUG] [Thread-193087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:15:52.681 [DEBUG] [Thread-193087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:15:52.681 [DEBUG] [Thread-193087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:15:52.706 [INFO] [Thread-193087] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:15:52.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:15:52.951 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:15:52.951 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:15:53.321 [DEBUG] [Thread-193087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:15:53.322 [DEBUG] [Thread-193087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:15:53.322 [DEBUG] [Thread-193087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:15:53.362 [DEBUG] [Thread-193087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:15:53.363 [DEBUG] [Thread-193087] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:15:53.366 [DEBUG] [Thread-193087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:15:53.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:15:53.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:15:53.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:15:53.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:15:53.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:15:53.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:15:53.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:15:53.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:15:53.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:15:53.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.843862 -999.00   +9.40  26.45     67   +3.60 1 1 1 1 1     0    0 5.20 -27.44 ZNESW 27.1 26.4 159.2 39.9 9.8 -25.1 9.7 -24.2 9.5 -23.1 9.8 -24.2
2026-02-14T22:15:53.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:15:53.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:15:53.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.843862
2026-02-14T22:15:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:15:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:15:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:15:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:15:53.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:15:53.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:15:41', tmtdew=7.08, humidity=61.33, cloud=0.0, wind=46.26, temperature=9.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-14T22:15:41', seeing=3.07, atlas_timestamp='2026-02-14T20:15:09.677', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.021749999999999048, 0.01425000000000054, -0.010999999999999233, 0.031500000000001194, -0.01974999999999838, -0.0129999999999999, 0.009250000000001535, 0.02949999999999875, 0.005000000000000782, -0.026250000000000995, 0.013999999999999346, 0.05599999999999916, 0.021250000000000213, -0.015499999999999403, 0.02099999999999902, 0.036249999999999005, 0.041499999999999204, -0.027000000000001023, -0.00975000000000037, 0.04499999999999815, 0.031749999999998835, -0.01574999999999882, 0.021750000000000824, 0.049999999999998934, 0.0625, 0.012750000000000483, -0.026500000000000412, 0.0519999999999996, 0.0070000000000014495, 0.0259999999999998, 0.027000000000001023, 0.022749999999998494], zp_timestamp='2026-02-14T20:13:00')
2026-02-14T22:15:53.392 [DEBUG] [Thread-193087] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:15: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-14T22:15:53.488 [DEBUG] [Thread-193090] [transport.py] [_log()] starting thread (client mode): 0xa2d00310
2026-02-14T22:15:53.488 [DEBUG] [Thread-193090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:15:53.503 [DEBUG] [Thread-193090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:15:53.503 [INFO] [Thread-193090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:15:53.512 [DEBUG] [Thread-193090] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:15:53.512 [DEBUG] [Thread-193090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:15:53.512 [DEBUG] [Thread-193090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:15:53.512 [DEBUG] [Thread-193090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:15:53.512 [DEBUG] [Thread-193090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:15:53.512 [DEBUG] [Thread-193090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:15:53.512 [DEBUG] [Thread-193090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:15:53.512 [DEBUG] [Thread-193090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:15:53.512 [DEBUG] [Thread-193090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:15:53.512 [DEBUG] [Thread-193090] [transport.py] [_log()] client lang: <none>
2026-02-14T22:15:53.512 [DEBUG] [Thread-193090] [transport.py] [_log()] server lang: <none>
2026-02-14T22:15:53.512 [DEBUG] [Thread-193090] [transport.py] [_log()] kex follows: False
2026-02-14T22:15:53.512 [DEBUG] [Thread-193090] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:15:53.512 [DEBUG] [Thread-193090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:15:53.513 [DEBUG] [Thread-193090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:15:53.513 [DEBUG] [Thread-193090] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:15:53.513 [DEBUG] [Thread-193090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:15:53.513 [DEBUG] [Thread-193090] [transport.py] [_log()] Compression: none
2026-02-14T22:15:53.513 [DEBUG] [Thread-193090] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:15:53.571 [DEBUG] [Thread-193090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:15:53.572 [DEBUG] [Thread-193090] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:15:53.572 [DEBUG] [Thread-193090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:15:53.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:15:53.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:15:53.618 [DEBUG] [Thread-193092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:15:53.630 [DEBUG] [Thread-193090] [transport.py] [_log()] userauth is OK
2026-02-14T22:15:53.630 [DEBUG] [Thread-193090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:15:53.630 [DEBUG] [Thread-193090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:15:53.630 [DEBUG] [Thread-193090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:15:53.630 [DEBUG] [Thread-193090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:15:53.655 [INFO] [Thread-193090] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:15:53.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-14T22:15:53.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:15:54.487 [DEBUG] [Thread-193090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:15:54.488 [DEBUG] [Thread-193090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:15:54.535 [DEBUG] [Thread-193090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:15:54.535 [DEBUG] [Thread-193090] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:15:54.544 [DEBUG] [Thread-193090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:15:54.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:15: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')
2026-02-14T22:15:54.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-14T22:15:54.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:15:54.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:15:54.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:15:54.581 [DEBUG] [Thread-193090] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:16:00.434 [DEBUG] [Thread-193093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:16:08.673 [DEBUG] [Thread-193094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:16:23.712 [DEBUG] [Thread-193095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:16:24.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:16:24.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:16:24.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:16:26.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 16, 16), 6.89, 62.16, 0.0, 36.88, 9.4, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:16:26.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:16:16
2026-02-14T22:16:27.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:16:27.239 [DEBUG] [Thread-193096] [transport.py] [_log()] starting thread (client mode): 0xa2d6f0d0
2026-02-14T22:16:27.239 [DEBUG] [Thread-193096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:16:27.259 [DEBUG] [Thread-193096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:16:27.259 [INFO] [Thread-193096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:16:27.262 [DEBUG] [Thread-193096] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:16:27.262 [DEBUG] [Thread-193096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:16:27.262 [DEBUG] [Thread-193096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:16:27.262 [DEBUG] [Thread-193096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:16:27.262 [DEBUG] [Thread-193096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:16:27.262 [DEBUG] [Thread-193096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:16:27.262 [DEBUG] [Thread-193096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:16:27.263 [DEBUG] [Thread-193096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:16:27.263 [DEBUG] [Thread-193096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:16:27.263 [DEBUG] [Thread-193096] [transport.py] [_log()] client lang: <none>
2026-02-14T22:16:27.263 [DEBUG] [Thread-193096] [transport.py] [_log()] server lang: <none>
2026-02-14T22:16:27.263 [DEBUG] [Thread-193096] [transport.py] [_log()] kex follows: False
2026-02-14T22:16:27.263 [DEBUG] [Thread-193096] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:16:27.263 [DEBUG] [Thread-193096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:16:27.263 [DEBUG] [Thread-193096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:16:27.263 [DEBUG] [Thread-193096] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:16:27.263 [DEBUG] [Thread-193096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:16:27.263 [DEBUG] [Thread-193096] [transport.py] [_log()] Compression: none
2026-02-14T22:16:27.263 [DEBUG] [Thread-193096] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:16:27.282 [DEBUG] [Thread-193096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:16:27.284 [DEBUG] [Thread-193096] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:16:27.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:16:27.285 [DEBUG] [Thread-193096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:16:27.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:16:27.287 [DEBUG] [Thread-193096] [transport.py] [_log()] userauth is OK
2026-02-14T22:16:27.287 [DEBUG] [Thread-193096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:16:27.288 [DEBUG] [Thread-193096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:16:27.288 [DEBUG] [Thread-193096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:16:27.288 [DEBUG] [Thread-193096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:16:27.311 [INFO] [Thread-193096] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:16:27.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:16:27.972 [DEBUG] [Thread-193096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:16:27.972 [DEBUG] [Thread-193096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:16:27.972 [DEBUG] [Thread-193096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:16:28.013 [DEBUG] [Thread-193096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:16:28.013 [DEBUG] [Thread-193096] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:16:28.015 [DEBUG] [Thread-193096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:16:28.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:16:28.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:16:28.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:16:28.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:16:28.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:16:28.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:16:28.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:16:28.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:16:28.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:16:28.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.844210 -999.00   +9.40  24.12     67   +3.60 1 1 1 1 1     0    0 5.13 -29.74 ZNESW 25.2 24.1 167.0 36.2 9.9 -25.0 9.7 -24.0 9.5 -23.0 9.8 -24.2
2026-02-14T22:16:28.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:16:28.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:16:28.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.844210
2026-02-14T22:16:28.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:16:28.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:16:28.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:16:28.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:16:28.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:16:28.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:16:16', tmtdew=6.89, humidity=62.16, cloud=0.0, wind=36.88, temperature=9.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:16:17', seeing=2.9, atlas_timestamp='2026-02-14T20:15:39.744', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.021749999999999048, 0.01425000000000054, -0.010999999999999233, 0.031500000000001194, -0.01974999999999838, -0.0129999999999999, 0.009250000000001535, 0.02949999999999875, 0.005000000000000782, -0.026250000000000995, 0.013999999999999346, 0.05599999999999916, 0.021250000000000213, -0.015499999999999403, 0.02099999999999902, 0.036249999999999005, 0.041499999999999204, -0.027000000000001023, -0.00975000000000037, 0.04499999999999815, 0.031749999999998835, -0.01574999999999882, 0.021750000000000824, 0.049999999999998934, 0.0625, 0.012750000000000483, -0.026500000000000412, 0.0519999999999996, 0.0070000000000014495, 0.0259999999999998, 0.027000000000001023, 0.022749999999998494], zp_timestamp='2026-02-14T20:13:00')
2026-02-14T22:16:28.049 [DEBUG] [Thread-193096] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:16:28.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:16:28.145 [DEBUG] [Thread-193099] [transport.py] [_log()] starting thread (client mode): 0xa2d6e200
2026-02-14T22:16:28.145 [DEBUG] [Thread-193099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:16:28.165 [DEBUG] [Thread-193099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:16:28.166 [INFO] [Thread-193099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:16:28.180 [DEBUG] [Thread-193099] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:16:28.180 [DEBUG] [Thread-193099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:16:28.181 [DEBUG] [Thread-193099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:16:28.181 [DEBUG] [Thread-193099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:16:28.181 [DEBUG] [Thread-193099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:16:28.181 [DEBUG] [Thread-193099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:16:28.181 [DEBUG] [Thread-193099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:16:28.181 [DEBUG] [Thread-193099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:16:28.181 [DEBUG] [Thread-193099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:16:28.181 [DEBUG] [Thread-193099] [transport.py] [_log()] client lang: <none>
2026-02-14T22:16:28.181 [DEBUG] [Thread-193099] [transport.py] [_log()] server lang: <none>
2026-02-14T22:16:28.181 [DEBUG] [Thread-193099] [transport.py] [_log()] kex follows: False
2026-02-14T22:16:28.181 [DEBUG] [Thread-193099] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:16:28.181 [DEBUG] [Thread-193099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:16:28.181 [DEBUG] [Thread-193099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:16:28.181 [DEBUG] [Thread-193099] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:16:28.181 [DEBUG] [Thread-193099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:16:28.182 [DEBUG] [Thread-193099] [transport.py] [_log()] Compression: none
2026-02-14T22:16:28.182 [DEBUG] [Thread-193099] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:16:28.231 [DEBUG] [Thread-193099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:16:28.232 [DEBUG] [Thread-193099] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:16:28.232 [DEBUG] [Thread-193099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:16:28.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:16:28.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:16:28.290 [DEBUG] [Thread-193099] [transport.py] [_log()] userauth is OK
2026-02-14T22:16:28.291 [DEBUG] [Thread-193099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:16:28.291 [DEBUG] [Thread-193099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:16:28.291 [DEBUG] [Thread-193099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:16:28.291 [DEBUG] [Thread-193099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:16:28.310 [INFO] [Thread-193099] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:16:28.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:16:28.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:16:29.125 [DEBUG] [Thread-193099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:16:29.125 [DEBUG] [Thread-193099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:16:29.174 [DEBUG] [Thread-193099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:16:29.174 [DEBUG] [Thread-193099] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:16:29.184 [DEBUG] [Thread-193099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:16:29.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:16:29.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-14T22:16:29.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-14T22:16:29.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:16:29.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:16:29.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:16:29.224 [DEBUG] [Thread-193099] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:16:38.749 [DEBUG] [Thread-193101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:16:41.766 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:16:53.165 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:16:53.166 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:16:53.801 [DEBUG] [Thread-193102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:16:59.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:16:59.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:16:59.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:17:00.500 [DEBUG] [Thread-193103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:17:01.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 16, 52), 6.86, 62.3, 0.0, 33.74, 9.45, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:17:01.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:16:52
2026-02-14T22:17:01.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:17:01.745 [DEBUG] [Thread-193104] [transport.py] [_log()] starting thread (client mode): 0xa57c2f80
2026-02-14T22:17:01.745 [DEBUG] [Thread-193104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:17:01.765 [DEBUG] [Thread-193104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:17:01.765 [INFO] [Thread-193104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:17:01.768 [DEBUG] [Thread-193104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:17:01.768 [DEBUG] [Thread-193104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:17:01.768 [DEBUG] [Thread-193104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:17:01.768 [DEBUG] [Thread-193104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:17:01.768 [DEBUG] [Thread-193104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:17:01.768 [DEBUG] [Thread-193104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:17:01.769 [DEBUG] [Thread-193104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:17:01.769 [DEBUG] [Thread-193104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:17:01.769 [DEBUG] [Thread-193104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:17:01.769 [DEBUG] [Thread-193104] [transport.py] [_log()] client lang: <none>
2026-02-14T22:17:01.769 [DEBUG] [Thread-193104] [transport.py] [_log()] server lang: <none>
2026-02-14T22:17:01.769 [DEBUG] [Thread-193104] [transport.py] [_log()] kex follows: False
2026-02-14T22:17:01.769 [DEBUG] [Thread-193104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:17:01.769 [DEBUG] [Thread-193104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:17:01.769 [DEBUG] [Thread-193104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:17:01.769 [DEBUG] [Thread-193104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:17:01.769 [DEBUG] [Thread-193104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:17:01.769 [DEBUG] [Thread-193104] [transport.py] [_log()] Compression: none
2026-02-14T22:17:01.770 [DEBUG] [Thread-193104] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:17:01.788 [DEBUG] [Thread-193104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:17:01.789 [DEBUG] [Thread-193104] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:17:01.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:17:01.790 [DEBUG] [Thread-193104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:17:01.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:17:01.792 [DEBUG] [Thread-193104] [transport.py] [_log()] userauth is OK
2026-02-14T22:17:01.792 [DEBUG] [Thread-193104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:17:01.793 [DEBUG] [Thread-193104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:17:01.793 [DEBUG] [Thread-193104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:17:01.793 [DEBUG] [Thread-193104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:17:01.816 [INFO] [Thread-193104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:17:01.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:17:02.454 [DEBUG] [Thread-193104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:17:02.454 [DEBUG] [Thread-193104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:17:02.455 [DEBUG] [Thread-193104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:17:02.495 [DEBUG] [Thread-193104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:17:02.496 [DEBUG] [Thread-193104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:17:02.499 [DEBUG] [Thread-193104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:17:02.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:17:02.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:17:02.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:17:02.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:17:02.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:17:02.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:17:02.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:17:02.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:17:02.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:17:02.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.844557 -999.00   +9.40  23.22     67   +3.60 1 1 1 1 1     0    0 5.10 -29.56 ZNESW 29.0 23.2 157.4 29.2 9.8 -25.1 9.7 -24.0 9.5 -23.0 9.8 -24.3
2026-02-14T22:17:02.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:17:02.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:17:02.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.844557
2026-02-14T22:17:02.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:17:02.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:17:02.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:17:02.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:17:02.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:17:02.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:16:52', tmtdew=6.86, humidity=62.3, cloud=0.0, wind=33.74, temperature=9.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:16:52', seeing=3.38, atlas_timestamp='2026-02-14T20:16:09.725', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.021749999999999048, 0.01425000000000054, -0.010999999999999233, 0.031500000000001194, -0.01974999999999838, -0.0129999999999999, 0.009250000000001535, 0.02949999999999875, 0.005000000000000782, -0.026250000000000995, 0.013999999999999346, 0.05599999999999916, 0.021250000000000213, -0.015499999999999403, 0.02099999999999902, 0.036249999999999005, 0.041499999999999204, -0.027000000000001023, -0.00975000000000037, 0.04499999999999815, 0.031749999999998835, -0.01574999999999882, 0.021750000000000824, 0.049999999999998934, 0.0625, 0.012750000000000483, -0.026500000000000412, 0.0519999999999996, 0.0070000000000014495, 0.0259999999999998, 0.027000000000001023, 0.022749999999998494], zp_timestamp='2026-02-14T20:13:00')
2026-02-14T22:17:02.527 [DEBUG] [Thread-193104] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:17:02.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:17:02.624 [DEBUG] [Thread-193107] [transport.py] [_log()] starting thread (client mode): 0xa2d00eb0
2026-02-14T22:17:02.624 [DEBUG] [Thread-193107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:17:02.639 [DEBUG] [Thread-193107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:17:02.639 [INFO] [Thread-193107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:17:02.647 [DEBUG] [Thread-193107] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:17:02.648 [DEBUG] [Thread-193107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:17:02.648 [DEBUG] [Thread-193107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:17:02.648 [DEBUG] [Thread-193107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:17:02.648 [DEBUG] [Thread-193107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:17:02.648 [DEBUG] [Thread-193107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:17:02.648 [DEBUG] [Thread-193107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:17:02.648 [DEBUG] [Thread-193107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:17:02.648 [DEBUG] [Thread-193107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:17:02.648 [DEBUG] [Thread-193107] [transport.py] [_log()] client lang: <none>
2026-02-14T22:17:02.648 [DEBUG] [Thread-193107] [transport.py] [_log()] server lang: <none>
2026-02-14T22:17:02.648 [DEBUG] [Thread-193107] [transport.py] [_log()] kex follows: False
2026-02-14T22:17:02.648 [DEBUG] [Thread-193107] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:17:02.648 [DEBUG] [Thread-193107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:17:02.648 [DEBUG] [Thread-193107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:17:02.648 [DEBUG] [Thread-193107] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:17:02.648 [DEBUG] [Thread-193107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:17:02.648 [DEBUG] [Thread-193107] [transport.py] [_log()] Compression: none
2026-02-14T22:17:02.649 [DEBUG] [Thread-193107] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:17:02.707 [DEBUG] [Thread-193107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:17:02.708 [DEBUG] [Thread-193107] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:17:02.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:17:02.709 [DEBUG] [Thread-193107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:17:02.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:17:02.768 [DEBUG] [Thread-193107] [transport.py] [_log()] userauth is OK
2026-02-14T22:17:02.768 [DEBUG] [Thread-193107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:17:02.768 [DEBUG] [Thread-193107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:17:02.768 [DEBUG] [Thread-193107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:17:02.769 [DEBUG] [Thread-193107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:17:02.788 [INFO] [Thread-193107] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:17:02.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-14T22:17:02.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:17:03.619 [DEBUG] [Thread-193107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:17:03.619 [DEBUG] [Thread-193107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:17:03.670 [DEBUG] [Thread-193107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:17:03.670 [DEBUG] [Thread-193107] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:17:03.680 [DEBUG] [Thread-193107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:17:03.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:17:03.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-14T22:17:03.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-14T22:17:03.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:17:03.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:17:03.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:17:03.718 [DEBUG] [Thread-193107] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:17:08.838 [DEBUG] [Thread-193109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:17:23.882 [DEBUG] [Thread-193110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:17:33.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:17:33.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:17:33.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-14T22:17:36.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 16, 52), 6.86, 62.3, 0.0, 33.74, 9.45, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:17:36.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:16:52
2026-02-14T22:17:36.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:17:36.649 [DEBUG] [Thread-193111] [transport.py] [_log()] starting thread (client mode): 0xa2d004f0
2026-02-14T22:17:36.649 [DEBUG] [Thread-193111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:17:36.669 [DEBUG] [Thread-193111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:17:36.669 [INFO] [Thread-193111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:17:36.672 [DEBUG] [Thread-193111] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:17:36.672 [DEBUG] [Thread-193111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:17:36.672 [DEBUG] [Thread-193111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:17:36.672 [DEBUG] [Thread-193111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:17:36.672 [DEBUG] [Thread-193111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:17:36.672 [DEBUG] [Thread-193111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:17:36.672 [DEBUG] [Thread-193111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:17:36.672 [DEBUG] [Thread-193111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:17:36.672 [DEBUG] [Thread-193111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:17:36.672 [DEBUG] [Thread-193111] [transport.py] [_log()] client lang: <none>
2026-02-14T22:17:36.673 [DEBUG] [Thread-193111] [transport.py] [_log()] server lang: <none>
2026-02-14T22:17:36.673 [DEBUG] [Thread-193111] [transport.py] [_log()] kex follows: False
2026-02-14T22:17:36.673 [DEBUG] [Thread-193111] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:17:36.673 [DEBUG] [Thread-193111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:17:36.673 [DEBUG] [Thread-193111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:17:36.673 [DEBUG] [Thread-193111] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:17:36.673 [DEBUG] [Thread-193111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:17:36.673 [DEBUG] [Thread-193111] [transport.py] [_log()] Compression: none
2026-02-14T22:17:36.673 [DEBUG] [Thread-193111] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:17:36.693 [DEBUG] [Thread-193111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:17:36.693 [DEBUG] [Thread-193111] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:17:36.694 [DEBUG] [Thread-193111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:17:36.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:17:36.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:17:36.696 [DEBUG] [Thread-193111] [transport.py] [_log()] userauth is OK
2026-02-14T22:17:36.696 [DEBUG] [Thread-193111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:17:36.696 [DEBUG] [Thread-193111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:17:36.696 [DEBUG] [Thread-193111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:17:36.696 [DEBUG] [Thread-193111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:17:36.715 [INFO] [Thread-193111] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:17:36.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:17:37.357 [DEBUG] [Thread-193111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:17:37.357 [DEBUG] [Thread-193111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:17:37.358 [DEBUG] [Thread-193111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:17:37.398 [DEBUG] [Thread-193111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:17:37.398 [DEBUG] [Thread-193111] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:17:37.401 [DEBUG] [Thread-193111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:17:37.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:17:37.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:17:37.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:17:37.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:17:37.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:17:37.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:17:37.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:17:37.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:17:37.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:17:37.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.844904 -999.00   +9.40  21.90     67   +3.60 1 1 1 1 1     0    0 5.22 -27.69 ZNESW 25.6 21.9 153.4 32.5 9.8 -25.1 9.7 -24.1 9.5 -23.1 9.8 -24.1
2026-02-14T22:17:37.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:17:37.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:17:37.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.844904
2026-02-14T22:17:37.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:17:37.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:17:37.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:17:37.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:17:37.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:17:37.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:16:52', tmtdew=6.86, humidity=62.3, cloud=0.0, wind=33.74, temperature=9.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:17:28', seeing=5.01, atlas_timestamp='2026-02-14T20:16:39.706', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.03474999999999895, -0.0007500000000000284, -0.016500000000000625, 0.01249999999999929, -0.0072499999999990905, 0.0024999999999995026, 0.020250000000000767, 0.0004999999999988347, -0.01249999999999929, -0.04875000000000007, 0.02200000000000024, 0.02099999999999902, 0.023249999999999105, -0.017500000000001847, 0.009999999999999787, 0.042749999999999844, 0.05349999999999966, -0.0470000000000006, -0.017250000000000654, 0.04899999999999949, -0.0027500000000024727, 0.015249999999999986, 0.019750000000000156, 0.04849999999999888, 0.05649999999999977, 0.0027500000000006963, 0.009500000000000952, 0.06299999999999883, 0.04350000000000165, 0.05349999999999966, 0.022500000000000853, 0.0032499999999977547], zp_timestamp='2026-02-14T20:16:00')
2026-02-14T22:17:37.427 [DEBUG] [Thread-193111] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:17:37.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-14T22:17:37.526 [DEBUG] [Thread-193114] [transport.py] [_log()] starting thread (client mode): 0xa2d7b490
2026-02-14T22:17:37.526 [DEBUG] [Thread-193114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:17:37.545 [DEBUG] [Thread-193114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:17:37.546 [INFO] [Thread-193114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:17:37.553 [DEBUG] [Thread-193114] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:17:37.553 [DEBUG] [Thread-193114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:17:37.553 [DEBUG] [Thread-193114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:17:37.553 [DEBUG] [Thread-193114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:17:37.553 [DEBUG] [Thread-193114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:17:37.553 [DEBUG] [Thread-193114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:17:37.553 [DEBUG] [Thread-193114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:17:37.554 [DEBUG] [Thread-193114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:17:37.554 [DEBUG] [Thread-193114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:17:37.554 [DEBUG] [Thread-193114] [transport.py] [_log()] client lang: <none>
2026-02-14T22:17:37.554 [DEBUG] [Thread-193114] [transport.py] [_log()] server lang: <none>
2026-02-14T22:17:37.554 [DEBUG] [Thread-193114] [transport.py] [_log()] kex follows: False
2026-02-14T22:17:37.554 [DEBUG] [Thread-193114] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:17:37.554 [DEBUG] [Thread-193114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:17:37.554 [DEBUG] [Thread-193114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:17:37.554 [DEBUG] [Thread-193114] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:17:37.554 [DEBUG] [Thread-193114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:17:37.554 [DEBUG] [Thread-193114] [transport.py] [_log()] Compression: none
2026-02-14T22:17:37.554 [DEBUG] [Thread-193114] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:17:37.612 [DEBUG] [Thread-193114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:17:37.612 [DEBUG] [Thread-193114] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:17:37.613 [DEBUG] [Thread-193114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:17:37.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:17:37.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:17:37.671 [DEBUG] [Thread-193114] [transport.py] [_log()] userauth is OK
2026-02-14T22:17:37.672 [DEBUG] [Thread-193114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:17:37.672 [DEBUG] [Thread-193114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:17:37.672 [DEBUG] [Thread-193114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:17:37.672 [DEBUG] [Thread-193114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:17:37.697 [INFO] [Thread-193114] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:17:37.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:17:37.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:17:38.526 [DEBUG] [Thread-193114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:17:38.526 [DEBUG] [Thread-193114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:17:38.574 [DEBUG] [Thread-193114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:17:38.574 [DEBUG] [Thread-193114] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:17:38.584 [DEBUG] [Thread-193114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:17:38.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:17:38.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-14T22:17:38.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:17:38.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:17:38.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:17:38.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:17:38.617 [DEBUG] [Thread-193114] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:17:38.916 [DEBUG] [Thread-193116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:17:53.365 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:17:53.366 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:17:53.993 [DEBUG] [Thread-193117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:18:00.558 [DEBUG] [Thread-193118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:18:08.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:18:08.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:18:08.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-14T22:18:09.026 [DEBUG] [Thread-193119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:18:10.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 17, 28), 6.85, 62.31, 0.0, 33.36, 9.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:18:10.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:17:28
2026-02-14T22:18:11.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:18:11.206 [DEBUG] [Thread-193120] [transport.py] [_log()] starting thread (client mode): 0xa2d78640
2026-02-14T22:18:11.206 [DEBUG] [Thread-193120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:18:11.225 [DEBUG] [Thread-193120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:18:11.226 [INFO] [Thread-193120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:18:11.227 [DEBUG] [Thread-193120] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:18:11.227 [DEBUG] [Thread-193120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:18:11.228 [DEBUG] [Thread-193120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:18:11.228 [DEBUG] [Thread-193120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:18:11.228 [DEBUG] [Thread-193120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:18:11.228 [DEBUG] [Thread-193120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:18:11.228 [DEBUG] [Thread-193120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:18:11.228 [DEBUG] [Thread-193120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:18:11.228 [DEBUG] [Thread-193120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:18:11.228 [DEBUG] [Thread-193120] [transport.py] [_log()] client lang: <none>
2026-02-14T22:18:11.228 [DEBUG] [Thread-193120] [transport.py] [_log()] server lang: <none>
2026-02-14T22:18:11.228 [DEBUG] [Thread-193120] [transport.py] [_log()] kex follows: False
2026-02-14T22:18:11.228 [DEBUG] [Thread-193120] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:18:11.228 [DEBUG] [Thread-193120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:18:11.228 [DEBUG] [Thread-193120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:18:11.228 [DEBUG] [Thread-193120] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:18:11.228 [DEBUG] [Thread-193120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:18:11.228 [DEBUG] [Thread-193120] [transport.py] [_log()] Compression: none
2026-02-14T22:18:11.228 [DEBUG] [Thread-193120] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:18:11.241 [DEBUG] [Thread-193120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:18:11.241 [DEBUG] [Thread-193120] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:18:11.242 [DEBUG] [Thread-193120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:18:11.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:18:11.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:18:11.244 [DEBUG] [Thread-193120] [transport.py] [_log()] userauth is OK
2026-02-14T22:18:11.244 [DEBUG] [Thread-193120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:18:11.244 [DEBUG] [Thread-193120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:18:11.244 [DEBUG] [Thread-193120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:18:11.244 [DEBUG] [Thread-193120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:18:11.266 [INFO] [Thread-193120] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:18:11.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:18:12.091 [DEBUG] [Thread-193120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:18:12.092 [DEBUG] [Thread-193120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:18:12.092 [DEBUG] [Thread-193120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:18:12.132 [DEBUG] [Thread-193120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:18:12.132 [DEBUG] [Thread-193120] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:18:12.135 [DEBUG] [Thread-193120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:18:12.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:18:12.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:18:12.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:18:12.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:18:12.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:18:12.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:18:12.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:18:12.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:18:12.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:18:12.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.845251 -999.00   +9.30  22.12     67   +3.60 1 1 1 1 1     0    0 5.17 -26.79 ZNESW 25.0 22.1 167.3 32.1 9.8 -25.1 9.7 -24.0 9.4 -23.1 9.8 -24.3
2026-02-14T22:18:12.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:18:12.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:18:12.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.845251
2026-02-14T22:18:12.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:18:12.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:18:12.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:18:12.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:18:12.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:18:12.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:17:28', tmtdew=6.85, humidity=62.31, cloud=0.0, wind=33.36, temperature=9.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:18:04', seeing=3.42, atlas_timestamp='2026-02-14T20:17:09.686', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.03474999999999895, -0.0007500000000000284, -0.016500000000000625, 0.01249999999999929, -0.0072499999999990905, 0.0024999999999995026, 0.020250000000000767, 0.0004999999999988347, -0.01249999999999929, -0.04875000000000007, 0.02200000000000024, 0.02099999999999902, 0.023249999999999105, -0.017500000000001847, 0.009999999999999787, 0.042749999999999844, 0.05349999999999966, -0.0470000000000006, -0.017250000000000654, 0.04899999999999949, -0.0027500000000024727, 0.015249999999999986, 0.019750000000000156, 0.04849999999999888, 0.05649999999999977, 0.0027500000000006963, 0.009500000000000952, 0.06299999999999883, 0.04350000000000165, 0.05349999999999966, 0.022500000000000853, 0.0032499999999977547], zp_timestamp='2026-02-14T20:16:00')
2026-02-14T22:18:12.160 [DEBUG] [Thread-193120] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:18:12.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-14T22:18:12.255 [DEBUG] [Thread-193123] [transport.py] [_log()] starting thread (client mode): 0xa2d03d30
2026-02-14T22:18:12.255 [DEBUG] [Thread-193123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:18:12.271 [DEBUG] [Thread-193123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:18:12.271 [INFO] [Thread-193123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:18:12.279 [DEBUG] [Thread-193123] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:18:12.279 [DEBUG] [Thread-193123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:18:12.279 [DEBUG] [Thread-193123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:18:12.279 [DEBUG] [Thread-193123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:18:12.279 [DEBUG] [Thread-193123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:18:12.280 [DEBUG] [Thread-193123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:18:12.280 [DEBUG] [Thread-193123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:18:12.280 [DEBUG] [Thread-193123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:18:12.280 [DEBUG] [Thread-193123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:18:12.280 [DEBUG] [Thread-193123] [transport.py] [_log()] client lang: <none>
2026-02-14T22:18:12.280 [DEBUG] [Thread-193123] [transport.py] [_log()] server lang: <none>
2026-02-14T22:18:12.280 [DEBUG] [Thread-193123] [transport.py] [_log()] kex follows: False
2026-02-14T22:18:12.280 [DEBUG] [Thread-193123] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:18:12.280 [DEBUG] [Thread-193123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:18:12.280 [DEBUG] [Thread-193123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:18:12.280 [DEBUG] [Thread-193123] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:18:12.280 [DEBUG] [Thread-193123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:18:12.280 [DEBUG] [Thread-193123] [transport.py] [_log()] Compression: none
2026-02-14T22:18:12.280 [DEBUG] [Thread-193123] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:18:12.340 [DEBUG] [Thread-193123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:18:12.340 [DEBUG] [Thread-193123] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:18:12.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:18:12.341 [DEBUG] [Thread-193123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:18:12.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:18:12.397 [DEBUG] [Thread-193123] [transport.py] [_log()] userauth is OK
2026-02-14T22:18:12.397 [DEBUG] [Thread-193123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:18:12.398 [DEBUG] [Thread-193123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:18:12.398 [DEBUG] [Thread-193123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:18:12.398 [DEBUG] [Thread-193123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:18:12.417 [INFO] [Thread-193123] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:18:12.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:18:12.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:18:13.258 [DEBUG] [Thread-193123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:18:13.258 [DEBUG] [Thread-193123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:18:13.306 [DEBUG] [Thread-193123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:18:13.306 [DEBUG] [Thread-193123] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:18:13.315 [DEBUG] [Thread-193123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:18:13.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:18:13.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:18:13.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:18:13.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:18:13.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:18:13.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:18:13.352 [DEBUG] [Thread-193123] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:18:15.643 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:18:24.065 [DEBUG] [Thread-193125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:18:39.116 [DEBUG] [Thread-193126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:18:43.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:18:43.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:18:43.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-14T22:18:45.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 18, 3), 6.84, 62.38, 0.0, 33.91, 9.4, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:18:45.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:18:03
2026-02-14T22:18:45.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:18:46.004 [DEBUG] [Thread-193127] [transport.py] [_log()] starting thread (client mode): 0xa2d79330
2026-02-14T22:18:46.005 [DEBUG] [Thread-193127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:18:46.018 [DEBUG] [Thread-193127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:18:46.018 [INFO] [Thread-193127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:18:46.021 [DEBUG] [Thread-193127] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:18:46.021 [DEBUG] [Thread-193127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:18:46.021 [DEBUG] [Thread-193127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:18:46.021 [DEBUG] [Thread-193127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:18:46.021 [DEBUG] [Thread-193127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:18:46.021 [DEBUG] [Thread-193127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:18:46.021 [DEBUG] [Thread-193127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:18:46.021 [DEBUG] [Thread-193127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:18:46.021 [DEBUG] [Thread-193127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:18:46.021 [DEBUG] [Thread-193127] [transport.py] [_log()] client lang: <none>
2026-02-14T22:18:46.022 [DEBUG] [Thread-193127] [transport.py] [_log()] server lang: <none>
2026-02-14T22:18:46.022 [DEBUG] [Thread-193127] [transport.py] [_log()] kex follows: False
2026-02-14T22:18:46.022 [DEBUG] [Thread-193127] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:18:46.022 [DEBUG] [Thread-193127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:18:46.022 [DEBUG] [Thread-193127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:18:46.022 [DEBUG] [Thread-193127] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:18:46.022 [DEBUG] [Thread-193127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:18:46.022 [DEBUG] [Thread-193127] [transport.py] [_log()] Compression: none
2026-02-14T22:18:46.022 [DEBUG] [Thread-193127] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:18:46.039 [DEBUG] [Thread-193127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:18:46.039 [DEBUG] [Thread-193127] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:18:46.040 [DEBUG] [Thread-193127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:18:46.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:18:46.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:18:46.042 [DEBUG] [Thread-193127] [transport.py] [_log()] userauth is OK
2026-02-14T22:18:46.042 [DEBUG] [Thread-193127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:18:46.042 [DEBUG] [Thread-193127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:18:46.042 [DEBUG] [Thread-193127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:18:46.042 [DEBUG] [Thread-193127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:18:46.067 [INFO] [Thread-193127] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:18:46.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:18:46.721 [DEBUG] [Thread-193127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:18:46.721 [DEBUG] [Thread-193127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:18:46.722 [DEBUG] [Thread-193127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:18:46.762 [DEBUG] [Thread-193127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:18:46.763 [DEBUG] [Thread-193127] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:18:46.766 [DEBUG] [Thread-193127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:18:46.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:18:46.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:18:46.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:18:46.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:18:46.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:18:46.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:18:46.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:18:46.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:18:46.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:18:46.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.845945 -999.00   +9.30  25.78     67   +3.60 1 1 1 1 1     0    0 5.21 -27.19 ZNESW 28.6 25.8 159.4 36.4 9.8 -25.1 9.6 -24.1 9.4 -23.1 9.7 -24.5
2026-02-14T22:18:46.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:18:46.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:18:46.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.845945
2026-02-14T22:18:46.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:18:46.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:18:46.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:18:46.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:18:46.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:18:46.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:18:03', tmtdew=6.84, humidity=62.38, cloud=0.0, wind=33.91, temperature=9.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:18:39', seeing=3.58, atlas_timestamp='2026-02-14T20:18:09.648', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.03474999999999895, -0.0007500000000000284, -0.016500000000000625, 0.01249999999999929, -0.0072499999999990905, 0.0024999999999995026, 0.020250000000000767, 0.0004999999999988347, -0.01249999999999929, -0.04875000000000007, 0.02200000000000024, 0.02099999999999902, 0.023249999999999105, -0.017500000000001847, 0.009999999999999787, 0.042749999999999844, 0.05349999999999966, -0.0470000000000006, -0.017250000000000654, 0.04899999999999949, -0.0027500000000024727, 0.015249999999999986, 0.019750000000000156, 0.04849999999999888, 0.05649999999999977, 0.0027500000000006963, 0.009500000000000952, 0.06299999999999883, 0.04350000000000165, 0.05349999999999966, 0.022500000000000853, 0.0032499999999977547], zp_timestamp='2026-02-14T20:16:00')
2026-02-14T22:18:46.792 [DEBUG] [Thread-193127] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:18:46.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-14T22:18:46.888 [DEBUG] [Thread-193130] [transport.py] [_log()] starting thread (client mode): 0xa2d6d8d0
2026-02-14T22:18:46.888 [DEBUG] [Thread-193130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:18:46.906 [DEBUG] [Thread-193130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:18:46.906 [INFO] [Thread-193130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:18:46.913 [DEBUG] [Thread-193130] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:18:46.914 [DEBUG] [Thread-193130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:18:46.914 [DEBUG] [Thread-193130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:18:46.914 [DEBUG] [Thread-193130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:18:46.914 [DEBUG] [Thread-193130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:18:46.914 [DEBUG] [Thread-193130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:18:46.914 [DEBUG] [Thread-193130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:18:46.914 [DEBUG] [Thread-193130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:18:46.914 [DEBUG] [Thread-193130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:18:46.914 [DEBUG] [Thread-193130] [transport.py] [_log()] client lang: <none>
2026-02-14T22:18:46.914 [DEBUG] [Thread-193130] [transport.py] [_log()] server lang: <none>
2026-02-14T22:18:46.915 [DEBUG] [Thread-193130] [transport.py] [_log()] kex follows: False
2026-02-14T22:18:46.915 [DEBUG] [Thread-193130] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:18:46.915 [DEBUG] [Thread-193130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:18:46.915 [DEBUG] [Thread-193130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:18:46.915 [DEBUG] [Thread-193130] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:18:46.915 [DEBUG] [Thread-193130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:18:46.915 [DEBUG] [Thread-193130] [transport.py] [_log()] Compression: none
2026-02-14T22:18:46.915 [DEBUG] [Thread-193130] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:18:46.972 [DEBUG] [Thread-193130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:18:46.972 [DEBUG] [Thread-193130] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:18:46.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:18:46.974 [DEBUG] [Thread-193130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:18:46.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:18:47.028 [DEBUG] [Thread-193130] [transport.py] [_log()] userauth is OK
2026-02-14T22:18:47.028 [DEBUG] [Thread-193130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:18:47.029 [DEBUG] [Thread-193130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:18:47.029 [DEBUG] [Thread-193130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:18:47.029 [DEBUG] [Thread-193130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:18:47.048 [INFO] [Thread-193130] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:18:47.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-14T22:18:47.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:18:47.901 [DEBUG] [Thread-193130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:18:47.901 [DEBUG] [Thread-193130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:18:47.949 [DEBUG] [Thread-193130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:18:47.949 [DEBUG] [Thread-193130] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:18:47.959 [DEBUG] [Thread-193130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:18:47.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:18:47.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-14T22:18: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') -> 00000000
2026-02-14T22:18:47.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:18:47.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:18:47.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:18:47.995 [DEBUG] [Thread-193130] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:18:53.565 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:18:53.566 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:18:54.148 [DEBUG] [Thread-193132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:19:00.630 [DEBUG] [Thread-193133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:19:09.206 [DEBUG] [Thread-193134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:19:18.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:19:18.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:19:18.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-14T22:19:20.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 18, 39), 6.96, 61.82, 0.0, 39.45, 9.64, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:19:20.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:18:39
2026-02-14T22:19:20.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:19:20.880 [DEBUG] [Thread-193135] [transport.py] [_log()] starting thread (client mode): 0xa57d52d0
2026-02-14T22:19:20.881 [DEBUG] [Thread-193135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:19:20.900 [DEBUG] [Thread-193135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:19:20.900 [INFO] [Thread-193135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:19:20.904 [DEBUG] [Thread-193135] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:19:20.904 [DEBUG] [Thread-193135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:19:20.904 [DEBUG] [Thread-193135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:19:20.904 [DEBUG] [Thread-193135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:19:20.904 [DEBUG] [Thread-193135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:19:20.904 [DEBUG] [Thread-193135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:19:20.904 [DEBUG] [Thread-193135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:19:20.904 [DEBUG] [Thread-193135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:19:20.904 [DEBUG] [Thread-193135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:19:20.904 [DEBUG] [Thread-193135] [transport.py] [_log()] client lang: <none>
2026-02-14T22:19:20.904 [DEBUG] [Thread-193135] [transport.py] [_log()] server lang: <none>
2026-02-14T22:19:20.904 [DEBUG] [Thread-193135] [transport.py] [_log()] kex follows: False
2026-02-14T22:19:20.904 [DEBUG] [Thread-193135] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:19:20.904 [DEBUG] [Thread-193135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:19:20.904 [DEBUG] [Thread-193135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:19:20.905 [DEBUG] [Thread-193135] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:19:20.905 [DEBUG] [Thread-193135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:19:20.905 [DEBUG] [Thread-193135] [transport.py] [_log()] Compression: none
2026-02-14T22:19:20.905 [DEBUG] [Thread-193135] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:19:20.923 [DEBUG] [Thread-193135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:19:20.924 [DEBUG] [Thread-193135] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:19:20.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:19:20.925 [DEBUG] [Thread-193135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:19:20.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:19:20.965 [DEBUG] [Thread-193135] [transport.py] [_log()] userauth is OK
2026-02-14T22:19:20.966 [DEBUG] [Thread-193135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:19:20.966 [DEBUG] [Thread-193135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:19:20.966 [DEBUG] [Thread-193135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:19:20.966 [DEBUG] [Thread-193135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:19:20.986 [INFO] [Thread-193135] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:19:20.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:19:21.593 [DEBUG] [Thread-193135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:19:21.593 [DEBUG] [Thread-193135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:19:21.593 [DEBUG] [Thread-193135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:19:21.634 [DEBUG] [Thread-193135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:19:21.634 [DEBUG] [Thread-193135] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:19:21.637 [DEBUG] [Thread-193135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:19:21.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:19:21.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:19:21.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:19:21.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:19:21.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:19:21.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:19:21.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:19:21.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:19:21.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:19:21.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.846293 -999.00   +9.30  24.91     67   +3.60 1 1 1 1 1     0    0 5.22 -24.50 ZNESW 22.1 24.9 153.8 35.3 9.8 -25.2 9.7 -24.1 9.4 -23.2 9.8 -24.4
2026-02-14T22:19:21.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:19:21.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:19:21.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.846293
2026-02-14T22:19:21.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:19:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:19:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:19:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:19:21.660 [DEBUG] [Thread-193135] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:19:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:19:21.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:18:39', tmtdew=6.96, humidity=61.82, cloud=0.0, wind=39.45, temperature=9.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:19:15', seeing=3.69, atlas_timestamp='2026-02-14T20:18:39.715', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.03474999999999895, -0.0007500000000000284, -0.016500000000000625, 0.01249999999999929, -0.0072499999999990905, 0.0024999999999995026, 0.020250000000000767, 0.0004999999999988347, -0.01249999999999929, -0.04875000000000007, 0.02200000000000024, 0.02099999999999902, 0.023249999999999105, -0.017500000000001847, 0.009999999999999787, 0.042749999999999844, 0.05349999999999966, -0.0470000000000006, -0.017250000000000654, 0.04899999999999949, -0.0027500000000024727, 0.015249999999999986, 0.019750000000000156, 0.04849999999999888, 0.05649999999999977, 0.0027500000000006963, 0.009500000000000952, 0.06299999999999883, 0.04350000000000165, 0.05349999999999966, 0.022500000000000853, 0.0032499999999977547], zp_timestamp='2026-02-14T20:16:00')
2026-02-14T22:19:21.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-14T22:19:21.755 [DEBUG] [Thread-193138] [transport.py] [_log()] starting thread (client mode): 0xa2d6e290
2026-02-14T22:19:21.756 [DEBUG] [Thread-193138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:19:21.770 [DEBUG] [Thread-193138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:19:21.770 [INFO] [Thread-193138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:19:21.777 [DEBUG] [Thread-193138] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:19:21.778 [DEBUG] [Thread-193138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:19:21.778 [DEBUG] [Thread-193138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:19:21.778 [DEBUG] [Thread-193138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:19:21.778 [DEBUG] [Thread-193138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:19:21.778 [DEBUG] [Thread-193138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:19:21.778 [DEBUG] [Thread-193138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:19:21.778 [DEBUG] [Thread-193138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:19:21.778 [DEBUG] [Thread-193138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:19:21.779 [DEBUG] [Thread-193138] [transport.py] [_log()] client lang: <none>
2026-02-14T22:19:21.779 [DEBUG] [Thread-193138] [transport.py] [_log()] server lang: <none>
2026-02-14T22:19:21.779 [DEBUG] [Thread-193138] [transport.py] [_log()] kex follows: False
2026-02-14T22:19:21.779 [DEBUG] [Thread-193138] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:19:21.779 [DEBUG] [Thread-193138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:19:21.779 [DEBUG] [Thread-193138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:19:21.779 [DEBUG] [Thread-193138] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:19:21.779 [DEBUG] [Thread-193138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:19:21.779 [DEBUG] [Thread-193138] [transport.py] [_log()] Compression: none
2026-02-14T22:19:21.779 [DEBUG] [Thread-193138] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:19:21.835 [DEBUG] [Thread-193138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:19:21.835 [DEBUG] [Thread-193138] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:19:21.836 [DEBUG] [Thread-193138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:19:21.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:19:21.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:19:21.892 [DEBUG] [Thread-193138] [transport.py] [_log()] userauth is OK
2026-02-14T22:19:21.892 [DEBUG] [Thread-193138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:19:21.892 [DEBUG] [Thread-193138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:19:21.892 [DEBUG] [Thread-193138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:19:21.892 [DEBUG] [Thread-193138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:19:21.915 [INFO] [Thread-193138] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:19:21.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-14T22:19:21.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:19:22.795 [DEBUG] [Thread-193138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:19:22.795 [DEBUG] [Thread-193138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:19:22.843 [DEBUG] [Thread-193138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:19:22.843 [DEBUG] [Thread-193138] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:19:22.851 [DEBUG] [Thread-193138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:19:22.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:19:22.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-14T22:19:22.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-14T22:19:22.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:19:22.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:19:22.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:19:22.883 [DEBUG] [Thread-193138] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:19:24.240 [DEBUG] [Thread-193140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:19:39.300 [DEBUG] [Thread-193141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:19:49.274 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:19:52.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:19:52.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:19:52.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-14T22:19:53.777 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:19:53.778 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:19:54.335 [DEBUG] [Thread-193142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:19:54.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 19, 14), 6.77, 62.45, 0.0, 37.58, 9.42, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:19:54.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:19:14
2026-02-14T22:19:55.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:19:55.545 [DEBUG] [Thread-193143] [transport.py] [_log()] starting thread (client mode): 0xa57d56f0
2026-02-14T22:19:55.545 [DEBUG] [Thread-193143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:19:55.564 [DEBUG] [Thread-193143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:19:55.564 [INFO] [Thread-193143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:19:55.567 [DEBUG] [Thread-193143] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:19:55.567 [DEBUG] [Thread-193143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:19:55.567 [DEBUG] [Thread-193143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:19:55.567 [DEBUG] [Thread-193143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:19:55.567 [DEBUG] [Thread-193143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:19:55.567 [DEBUG] [Thread-193143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:19:55.568 [DEBUG] [Thread-193143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:19:55.568 [DEBUG] [Thread-193143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:19:55.568 [DEBUG] [Thread-193143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:19:55.568 [DEBUG] [Thread-193143] [transport.py] [_log()] client lang: <none>
2026-02-14T22:19:55.568 [DEBUG] [Thread-193143] [transport.py] [_log()] server lang: <none>
2026-02-14T22:19:55.568 [DEBUG] [Thread-193143] [transport.py] [_log()] kex follows: False
2026-02-14T22:19:55.568 [DEBUG] [Thread-193143] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:19:55.568 [DEBUG] [Thread-193143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:19:55.568 [DEBUG] [Thread-193143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:19:55.568 [DEBUG] [Thread-193143] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:19:55.568 [DEBUG] [Thread-193143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:19:55.568 [DEBUG] [Thread-193143] [transport.py] [_log()] Compression: none
2026-02-14T22:19:55.568 [DEBUG] [Thread-193143] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:19:55.588 [DEBUG] [Thread-193143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:19:55.588 [DEBUG] [Thread-193143] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:19:55.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:19:55.589 [DEBUG] [Thread-193143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:19:55.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:19:55.592 [DEBUG] [Thread-193143] [transport.py] [_log()] userauth is OK
2026-02-14T22:19:55.592 [DEBUG] [Thread-193143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:19:55.592 [DEBUG] [Thread-193143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:19:55.592 [DEBUG] [Thread-193143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:19:55.592 [DEBUG] [Thread-193143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:19:55.616 [INFO] [Thread-193143] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:19:55.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:19:56.265 [DEBUG] [Thread-193143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:19:56.265 [DEBUG] [Thread-193143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:19:56.266 [DEBUG] [Thread-193143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:19:56.307 [DEBUG] [Thread-193143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:19:56.307 [DEBUG] [Thread-193143] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:19:56.310 [DEBUG] [Thread-193143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:19:56.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:19:56.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:19:56.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:19:56.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:19:56.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:19:56.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:19:56.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:19:56.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:19:56.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:19:56.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.846640 -999.00   +9.30  21.48     67   +3.60 1 1 1 1 1     0    0 5.30 -24.00 ZNESW 26.3 21.5 143.0 36.1 9.8 -25.1 9.6 -24.2 9.4 -23.1 9.8 -24.4
2026-02-14T22:19:56.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:19:56.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:19:56.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.846640
2026-02-14T22:19:56.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:19:56.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:19:56.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:19:56.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:19:56.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:19:56.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:19:14', tmtdew=6.77, humidity=62.45, cloud=0.0, wind=37.58, temperature=9.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:19:51', seeing=3.55, atlas_timestamp='2026-02-14T20:19:09.696', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.03474999999999895, -0.0007500000000000284, -0.016500000000000625, 0.01249999999999929, -0.0072499999999990905, 0.0024999999999995026, 0.020250000000000767, 0.0004999999999988347, -0.01249999999999929, -0.04875000000000007, 0.02200000000000024, 0.02099999999999902, 0.023249999999999105, -0.017500000000001847, 0.009999999999999787, 0.042749999999999844, 0.05349999999999966, -0.0470000000000006, -0.017250000000000654, 0.04899999999999949, -0.0027500000000024727, 0.015249999999999986, 0.019750000000000156, 0.04849999999999888, 0.05649999999999977, 0.0027500000000006963, 0.009500000000000952, 0.06299999999999883, 0.04350000000000165, 0.05349999999999966, 0.022500000000000853, 0.0032499999999977547], zp_timestamp='2026-02-14T20:16:00')
2026-02-14T22:19:56.338 [DEBUG] [Thread-193143] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:19:56.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-14T22:19:56.433 [DEBUG] [Thread-193146] [transport.py] [_log()] starting thread (client mode): 0xa2d6f910
2026-02-14T22:19:56.434 [DEBUG] [Thread-193146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:19:56.448 [DEBUG] [Thread-193146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:19:56.448 [INFO] [Thread-193146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:19:56.456 [DEBUG] [Thread-193146] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:19:56.456 [DEBUG] [Thread-193146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:19:56.456 [DEBUG] [Thread-193146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:19:56.456 [DEBUG] [Thread-193146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:19:56.456 [DEBUG] [Thread-193146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:19:56.456 [DEBUG] [Thread-193146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:19:56.456 [DEBUG] [Thread-193146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:19:56.456 [DEBUG] [Thread-193146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:19:56.456 [DEBUG] [Thread-193146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:19:56.456 [DEBUG] [Thread-193146] [transport.py] [_log()] client lang: <none>
2026-02-14T22:19:56.456 [DEBUG] [Thread-193146] [transport.py] [_log()] server lang: <none>
2026-02-14T22:19:56.456 [DEBUG] [Thread-193146] [transport.py] [_log()] kex follows: False
2026-02-14T22:19:56.457 [DEBUG] [Thread-193146] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:19:56.457 [DEBUG] [Thread-193146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:19:56.457 [DEBUG] [Thread-193146] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:19:56.457 [DEBUG] [Thread-193146] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:19:56.457 [DEBUG] [Thread-193146] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:19:56.457 [DEBUG] [Thread-193146] [transport.py] [_log()] Compression: none
2026-02-14T22:19:56.457 [DEBUG] [Thread-193146] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:19:56.516 [DEBUG] [Thread-193146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:19:56.517 [DEBUG] [Thread-193146] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:19:56.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:19:56.518 [DEBUG] [Thread-193146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:19:56.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:19:56.573 [DEBUG] [Thread-193146] [transport.py] [_log()] userauth is OK
2026-02-14T22:19:56.573 [DEBUG] [Thread-193146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:19:56.573 [DEBUG] [Thread-193146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:19:56.573 [DEBUG] [Thread-193146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:19:56.573 [DEBUG] [Thread-193146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:19:56.592 [INFO] [Thread-193146] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:19:56.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-14T22:19:56.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:19:57.457 [DEBUG] [Thread-193146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:19:57.458 [DEBUG] [Thread-193146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:19:57.506 [DEBUG] [Thread-193146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:19:57.506 [DEBUG] [Thread-193146] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:19:57.515 [DEBUG] [Thread-193146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:19:57.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:19:57.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-14T22:19:57.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:19:57.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:19:57.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:19:57.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:19:57.550 [DEBUG] [Thread-193146] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:20:00.696 [DEBUG] [Thread-193148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:20:09.372 [DEBUG] [Thread-193149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:20:24.432 [DEBUG] [Thread-193150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:20:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:20:27.566 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:20:27.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-14T22:20:30.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 19, 50), 6.72, 62.96, 0.0, 32.15, 9.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:20:30.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:19:50
2026-02-14T22:20:30.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:20:30.675 [DEBUG] [Thread-193151] [transport.py] [_log()] starting thread (client mode): 0xa57436d0
2026-02-14T22:20:30.675 [DEBUG] [Thread-193151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:20:30.695 [DEBUG] [Thread-193151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:20:30.695 [INFO] [Thread-193151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:20:30.698 [DEBUG] [Thread-193151] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:20:30.698 [DEBUG] [Thread-193151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:20:30.699 [DEBUG] [Thread-193151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:20:30.699 [DEBUG] [Thread-193151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:20:30.699 [DEBUG] [Thread-193151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:20:30.699 [DEBUG] [Thread-193151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:20:30.699 [DEBUG] [Thread-193151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:20:30.699 [DEBUG] [Thread-193151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:20:30.699 [DEBUG] [Thread-193151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:20:30.699 [DEBUG] [Thread-193151] [transport.py] [_log()] client lang: <none>
2026-02-14T22:20:30.699 [DEBUG] [Thread-193151] [transport.py] [_log()] server lang: <none>
2026-02-14T22:20:30.699 [DEBUG] [Thread-193151] [transport.py] [_log()] kex follows: False
2026-02-14T22:20:30.699 [DEBUG] [Thread-193151] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:20:30.699 [DEBUG] [Thread-193151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:20:30.699 [DEBUG] [Thread-193151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:20:30.699 [DEBUG] [Thread-193151] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:20:30.699 [DEBUG] [Thread-193151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:20:30.699 [DEBUG] [Thread-193151] [transport.py] [_log()] Compression: none
2026-02-14T22:20:30.699 [DEBUG] [Thread-193151] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:20:30.716 [DEBUG] [Thread-193151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:20:30.717 [DEBUG] [Thread-193151] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:20:30.717 [DEBUG] [Thread-193151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:20:30.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:20:30.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:20:30.719 [DEBUG] [Thread-193151] [transport.py] [_log()] userauth is OK
2026-02-14T22:20:30.719 [DEBUG] [Thread-193151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:20:30.719 [DEBUG] [Thread-193151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:20:30.719 [DEBUG] [Thread-193151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:20:30.720 [DEBUG] [Thread-193151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:20:30.738 [INFO] [Thread-193151] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:20:30.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:20:31.381 [DEBUG] [Thread-193151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:20:31.381 [DEBUG] [Thread-193151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:20:31.381 [DEBUG] [Thread-193151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:20:31.422 [DEBUG] [Thread-193151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:20:31.422 [DEBUG] [Thread-193151] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:20:31.425 [DEBUG] [Thread-193151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:20:31.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:20:31.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:20:31.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:20:31.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:20:31.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:20:31.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:20:31.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:20:31.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:20:31.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:20:31.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.846987 -999.00   +9.30  20.07     67   +3.60 1 1 1 1 1     0    0 5.23 -23.86 ZNESW 24.4 20.1 154.2 33.7 9.8 -25.2 9.6 -24.1 9.4 -23.1 9.8 -24.3
2026-02-14T22:20:31.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:20:31.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:20:31.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.846987
2026-02-14T22:20:31.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:20:31.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:20:31.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:20:31.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:20:31.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:20:31.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:19:50', tmtdew=6.72, humidity=62.96, cloud=0.0, wind=32.15, temperature=9.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:20:26', seeing=4.6, atlas_timestamp='2026-02-14T20:19:39.677', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.056750000000000966, 0.006249999999999645, -0.011499999999999844, 0.05250000000000021, 0.0002500000000011937, -0.0030000000000001137, 0.011250000000000426, 0.04049999999999976, -0.007999999999999119, -0.013750000000001705, -0.0009999999999994458, 0.045999999999999375, -0.003750000000000142, 0.009499999999999176, 0.024499999999999744, 0.06574999999999953, 0.07099999999999973, -0.038000000000000256, -0.014750000000001151, 0.08099999999999952, 0.057749999999998636, 0.0027500000000006963, 0.021750000000000824, 0.04049999999999976, 0.07350000000000101, 0.004749999999999588, -0.01249999999999929, 0.07399999999999984, 0.030000000000001137, 0.05700000000000216, 0.05600000000000094, 0.034250000000000114], zp_timestamp='2026-02-14T20:19:00')
2026-02-14T22:20:31.449 [DEBUG] [Thread-193151] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:20:31.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-14T22:20:31.545 [DEBUG] [Thread-193154] [transport.py] [_log()] starting thread (client mode): 0xa2d7b4f0
2026-02-14T22:20:31.546 [DEBUG] [Thread-193154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:20:31.561 [DEBUG] [Thread-193154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:20:31.561 [INFO] [Thread-193154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:20:31.568 [DEBUG] [Thread-193154] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:20:31.569 [DEBUG] [Thread-193154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:20:31.569 [DEBUG] [Thread-193154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:20:31.569 [DEBUG] [Thread-193154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:20:31.569 [DEBUG] [Thread-193154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:20:31.569 [DEBUG] [Thread-193154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:20:31.569 [DEBUG] [Thread-193154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:20:31.569 [DEBUG] [Thread-193154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:20:31.569 [DEBUG] [Thread-193154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:20:31.569 [DEBUG] [Thread-193154] [transport.py] [_log()] client lang: <none>
2026-02-14T22:20:31.569 [DEBUG] [Thread-193154] [transport.py] [_log()] server lang: <none>
2026-02-14T22:20:31.569 [DEBUG] [Thread-193154] [transport.py] [_log()] kex follows: False
2026-02-14T22:20:31.569 [DEBUG] [Thread-193154] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:20:31.569 [DEBUG] [Thread-193154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:20:31.569 [DEBUG] [Thread-193154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:20:31.569 [DEBUG] [Thread-193154] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:20:31.570 [DEBUG] [Thread-193154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:20:31.570 [DEBUG] [Thread-193154] [transport.py] [_log()] Compression: none
2026-02-14T22:20:31.570 [DEBUG] [Thread-193154] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:20:31.633 [DEBUG] [Thread-193154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:20:31.633 [DEBUG] [Thread-193154] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:20:31.634 [DEBUG] [Thread-193154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:20:31.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:20:31.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:20:31.689 [DEBUG] [Thread-193154] [transport.py] [_log()] userauth is OK
2026-02-14T22:20:31.689 [DEBUG] [Thread-193154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:20:31.689 [DEBUG] [Thread-193154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:20:31.690 [DEBUG] [Thread-193154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:20:31.690 [DEBUG] [Thread-193154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:20:31.708 [INFO] [Thread-193154] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:20:31.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-14T22:20:31.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:20:32.538 [DEBUG] [Thread-193154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:20:32.539 [DEBUG] [Thread-193154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:20:32.586 [DEBUG] [Thread-193154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:20:32.586 [DEBUG] [Thread-193154] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:20:32.596 [DEBUG] [Thread-193154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:20:32.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:20:32.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-14T22:20:32.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-14T22:20:32.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:20:32.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:20:32.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:20:32.633 [DEBUG] [Thread-193154] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:20:39.471 [DEBUG] [Thread-193156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:20:53.987 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:20:53.989 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:20:54.522 [DEBUG] [Thread-193157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:21:00.752 [DEBUG] [Thread-193158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:21:02.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:21:02.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:21:02.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-14T22:21:04.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 20, 26), 6.73, 62.93, 0.0, 33.61, 9.33, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:21:04.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:20:26
2026-02-14T22:21:05.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:21:05.453 [DEBUG] [Thread-193159] [transport.py] [_log()] starting thread (client mode): 0xa57d6560
2026-02-14T22:21:05.453 [DEBUG] [Thread-193159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:21:05.473 [DEBUG] [Thread-193159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:21:05.473 [INFO] [Thread-193159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:21:05.476 [DEBUG] [Thread-193159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:21:05.476 [DEBUG] [Thread-193159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:21:05.476 [DEBUG] [Thread-193159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:21:05.476 [DEBUG] [Thread-193159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:21:05.476 [DEBUG] [Thread-193159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:21:05.476 [DEBUG] [Thread-193159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:21:05.477 [DEBUG] [Thread-193159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:21:05.477 [DEBUG] [Thread-193159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:21:05.477 [DEBUG] [Thread-193159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:21:05.477 [DEBUG] [Thread-193159] [transport.py] [_log()] client lang: <none>
2026-02-14T22:21:05.477 [DEBUG] [Thread-193159] [transport.py] [_log()] server lang: <none>
2026-02-14T22:21:05.477 [DEBUG] [Thread-193159] [transport.py] [_log()] kex follows: False
2026-02-14T22:21:05.477 [DEBUG] [Thread-193159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:21:05.477 [DEBUG] [Thread-193159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:21:05.477 [DEBUG] [Thread-193159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:21:05.477 [DEBUG] [Thread-193159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:21:05.477 [DEBUG] [Thread-193159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:21:05.477 [DEBUG] [Thread-193159] [transport.py] [_log()] Compression: none
2026-02-14T22:21:05.477 [DEBUG] [Thread-193159] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:21:05.489 [DEBUG] [Thread-193159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:21:05.490 [DEBUG] [Thread-193159] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:21:05.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:21:05.491 [DEBUG] [Thread-193159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:21:05.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:21:05.494 [DEBUG] [Thread-193159] [transport.py] [_log()] userauth is OK
2026-02-14T22:21:05.494 [DEBUG] [Thread-193159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:21:05.494 [DEBUG] [Thread-193159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:21:05.495 [DEBUG] [Thread-193159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:21:05.495 [DEBUG] [Thread-193159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:21:05.509 [INFO] [Thread-193159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:21:05.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:21:06.095 [DEBUG] [Thread-193159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:21:06.095 [DEBUG] [Thread-193159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:21:06.096 [DEBUG] [Thread-193159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:21:06.136 [DEBUG] [Thread-193159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:21:06.137 [DEBUG] [Thread-193159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:21:06.140 [DEBUG] [Thread-193159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:21:06.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:21:06.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:21:06.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:21:06.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:21:06.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:21:06.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:21:06.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:21:06.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:21:06.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:21:06.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.847334 -999.00   +9.30  23.29     67   +3.60 1 1 1 1 1     0    0 5.19 -22.60 ZNESW 26.2 23.3 156.8 34.8 9.8 -25.0 9.6 -24.0 9.4 -23.0 9.8 -24.1
2026-02-14T22:21:06.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:21:06.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:21:06.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.847334
2026-02-14T22:21:06.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:21:06.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:21:06.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:21:06.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:21:06.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:21:06.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:20:26', tmtdew=6.73, humidity=62.93, cloud=0.0, wind=33.61, temperature=9.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:20:26', seeing=4.6, atlas_timestamp='2026-02-14T20:20:09.658', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.056750000000000966, 0.006249999999999645, -0.011499999999999844, 0.05250000000000021, 0.0002500000000011937, -0.0030000000000001137, 0.011250000000000426, 0.04049999999999976, -0.007999999999999119, -0.013750000000001705, -0.0009999999999994458, 0.045999999999999375, -0.003750000000000142, 0.009499999999999176, 0.024499999999999744, 0.06574999999999953, 0.07099999999999973, -0.038000000000000256, -0.014750000000001151, 0.08099999999999952, 0.057749999999998636, 0.0027500000000006963, 0.021750000000000824, 0.04049999999999976, 0.07350000000000101, 0.004749999999999588, -0.01249999999999929, 0.07399999999999984, 0.030000000000001137, 0.05700000000000216, 0.05600000000000094, 0.034250000000000114], zp_timestamp='2026-02-14T20:19:00')
2026-02-14T22:21:06.165 [DEBUG] [Thread-193159] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:21:06.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-14T22:21:06.273 [DEBUG] [Thread-193162] [transport.py] [_log()] starting thread (client mode): 0xa2d02620
2026-02-14T22:21:06.273 [DEBUG] [Thread-193162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:21:06.288 [DEBUG] [Thread-193162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:21:06.288 [INFO] [Thread-193162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:21:06.296 [DEBUG] [Thread-193162] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:21:06.296 [DEBUG] [Thread-193162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:21:06.296 [DEBUG] [Thread-193162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:21:06.296 [DEBUG] [Thread-193162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:21:06.296 [DEBUG] [Thread-193162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:21:06.296 [DEBUG] [Thread-193162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:21:06.296 [DEBUG] [Thread-193162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:21:06.296 [DEBUG] [Thread-193162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:21:06.296 [DEBUG] [Thread-193162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:21:06.296 [DEBUG] [Thread-193162] [transport.py] [_log()] client lang: <none>
2026-02-14T22:21:06.296 [DEBUG] [Thread-193162] [transport.py] [_log()] server lang: <none>
2026-02-14T22:21:06.296 [DEBUG] [Thread-193162] [transport.py] [_log()] kex follows: False
2026-02-14T22:21:06.296 [DEBUG] [Thread-193162] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:21:06.296 [DEBUG] [Thread-193162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:21:06.296 [DEBUG] [Thread-193162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:21:06.297 [DEBUG] [Thread-193162] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:21:06.297 [DEBUG] [Thread-193162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:21:06.297 [DEBUG] [Thread-193162] [transport.py] [_log()] Compression: none
2026-02-14T22:21:06.297 [DEBUG] [Thread-193162] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:21:06.361 [DEBUG] [Thread-193162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:21:06.361 [DEBUG] [Thread-193162] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:21:06.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:21:06.363 [DEBUG] [Thread-193162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:21:06.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:21:06.417 [DEBUG] [Thread-193162] [transport.py] [_log()] userauth is OK
2026-02-14T22:21:06.418 [DEBUG] [Thread-193162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:21:06.418 [DEBUG] [Thread-193162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:21:06.418 [DEBUG] [Thread-193162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:21:06.418 [DEBUG] [Thread-193162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:21:06.436 [INFO] [Thread-193162] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:21:06.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:21:06.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:21:07.222 [DEBUG] [Thread-193162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:21:07.223 [DEBUG] [Thread-193162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:21:07.271 [DEBUG] [Thread-193162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:21:07.271 [DEBUG] [Thread-193162] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:21:07.280 [DEBUG] [Thread-193162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:21:07.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:21:07.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:21: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') -> 00000000
2026-02-14T22:21:07.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:21:07.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:21:07.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:21:07.317 [DEBUG] [Thread-193162] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:21:09.560 [DEBUG] [Thread-193164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:21:23.151 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:21:24.601 [DEBUG] [Thread-193165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:21:37.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:21:37.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:21:37.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:21:39.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 21, 2), 6.72, 62.96, 0.0, 34.3, 9.33, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:21:39.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:21:02
2026-02-14T22:21:39.633 [DEBUG] [Thread-193166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:21:39.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:21:39.944 [DEBUG] [Thread-193167] [transport.py] [_log()] starting thread (client mode): 0xa5773130
2026-02-14T22:21:39.945 [DEBUG] [Thread-193167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:21:39.964 [DEBUG] [Thread-193167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:21:39.964 [INFO] [Thread-193167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:21:39.968 [DEBUG] [Thread-193167] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:21:39.968 [DEBUG] [Thread-193167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:21:39.968 [DEBUG] [Thread-193167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:21:39.968 [DEBUG] [Thread-193167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:21:39.968 [DEBUG] [Thread-193167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:21:39.968 [DEBUG] [Thread-193167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:21:39.968 [DEBUG] [Thread-193167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:21:39.968 [DEBUG] [Thread-193167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:21:39.968 [DEBUG] [Thread-193167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:21:39.968 [DEBUG] [Thread-193167] [transport.py] [_log()] client lang: <none>
2026-02-14T22:21:39.968 [DEBUG] [Thread-193167] [transport.py] [_log()] server lang: <none>
2026-02-14T22:21:39.968 [DEBUG] [Thread-193167] [transport.py] [_log()] kex follows: False
2026-02-14T22:21:39.968 [DEBUG] [Thread-193167] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:21:39.968 [DEBUG] [Thread-193167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:21:39.968 [DEBUG] [Thread-193167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:21:39.968 [DEBUG] [Thread-193167] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:21:39.968 [DEBUG] [Thread-193167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:21:39.968 [DEBUG] [Thread-193167] [transport.py] [_log()] Compression: none
2026-02-14T22:21:39.968 [DEBUG] [Thread-193167] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:21:39.984 [DEBUG] [Thread-193167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:21:39.984 [DEBUG] [Thread-193167] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:21:39.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:21:39.985 [DEBUG] [Thread-193167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:21:39.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:21:39.987 [DEBUG] [Thread-193167] [transport.py] [_log()] userauth is OK
2026-02-14T22:21:39.988 [DEBUG] [Thread-193167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:21:39.988 [DEBUG] [Thread-193167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:21:39.988 [DEBUG] [Thread-193167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:21:39.988 [DEBUG] [Thread-193167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:21:40.009 [INFO] [Thread-193167] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:21:40.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:21:40.644 [DEBUG] [Thread-193167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:21:40.644 [DEBUG] [Thread-193167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:21:40.645 [DEBUG] [Thread-193167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:21:40.685 [DEBUG] [Thread-193167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:21:40.686 [DEBUG] [Thread-193167] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:21:40.688 [DEBUG] [Thread-193167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:21:40.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:21:40.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:21:40.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:21:40.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:21:40.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:21:40.710 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:21:40.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:21:40.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:21:40.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:21:40.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.847682 -999.00   +9.30  28.52     67   +3.60 1 1 1 1 1     0    0 5.20 -22.36 ZNESW 23.0 28.5 159.4 37.6 9.8 -25.1 9.6 -24.0 9.4 -23.0 9.8 -24.4
2026-02-14T22:21:40.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:21:40.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:21:40.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.847682
2026-02-14T22:21:40.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:21:40.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:21:40.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:21:40.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:21:40.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:21:40.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:21:02', tmtdew=6.72, humidity=62.96, cloud=0.0, wind=34.3, temperature=9.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:21:03', seeing=3.99, atlas_timestamp='2026-02-14T20:20:39.725', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.056750000000000966, 0.006249999999999645, -0.011499999999999844, 0.05250000000000021, 0.0002500000000011937, -0.0030000000000001137, 0.011250000000000426, 0.04049999999999976, -0.007999999999999119, -0.013750000000001705, -0.0009999999999994458, 0.045999999999999375, -0.003750000000000142, 0.009499999999999176, 0.024499999999999744, 0.06574999999999953, 0.07099999999999973, -0.038000000000000256, -0.014750000000001151, 0.08099999999999952, 0.057749999999998636, 0.0027500000000006963, 0.021750000000000824, 0.04049999999999976, 0.07350000000000101, 0.004749999999999588, -0.01249999999999929, 0.07399999999999984, 0.030000000000001137, 0.05700000000000216, 0.05600000000000094, 0.034250000000000114], zp_timestamp='2026-02-14T20:19:00')
2026-02-14T22:21:40.713 [DEBUG] [Thread-193167] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:21:40.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-14T22:21:40.806 [DEBUG] [Thread-193170] [transport.py] [_log()] starting thread (client mode): 0xa57d6e00
2026-02-14T22:21:40.807 [DEBUG] [Thread-193170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:21:40.825 [DEBUG] [Thread-193170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:21:40.825 [INFO] [Thread-193170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:21:40.833 [DEBUG] [Thread-193170] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:21:40.833 [DEBUG] [Thread-193170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:21:40.833 [DEBUG] [Thread-193170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:21:40.833 [DEBUG] [Thread-193170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:21:40.833 [DEBUG] [Thread-193170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:21:40.833 [DEBUG] [Thread-193170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:21:40.833 [DEBUG] [Thread-193170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:21:40.833 [DEBUG] [Thread-193170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:21:40.833 [DEBUG] [Thread-193170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:21:40.833 [DEBUG] [Thread-193170] [transport.py] [_log()] client lang: <none>
2026-02-14T22:21:40.833 [DEBUG] [Thread-193170] [transport.py] [_log()] server lang: <none>
2026-02-14T22:21:40.833 [DEBUG] [Thread-193170] [transport.py] [_log()] kex follows: False
2026-02-14T22:21:40.834 [DEBUG] [Thread-193170] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:21:40.834 [DEBUG] [Thread-193170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:21:40.834 [DEBUG] [Thread-193170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:21:40.834 [DEBUG] [Thread-193170] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:21:40.834 [DEBUG] [Thread-193170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:21:40.834 [DEBUG] [Thread-193170] [transport.py] [_log()] Compression: none
2026-02-14T22:21:40.834 [DEBUG] [Thread-193170] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:21:40.894 [DEBUG] [Thread-193170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:21:40.894 [DEBUG] [Thread-193170] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:21:40.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:21:40.895 [DEBUG] [Thread-193170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:21:40.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:21:40.949 [DEBUG] [Thread-193170] [transport.py] [_log()] userauth is OK
2026-02-14T22:21:40.949 [DEBUG] [Thread-193170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:21:40.950 [DEBUG] [Thread-193170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:21:40.950 [DEBUG] [Thread-193170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:21:40.950 [DEBUG] [Thread-193170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:21:40.968 [INFO] [Thread-193170] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:21:40.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-14T22:21:40.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:21:41.776 [DEBUG] [Thread-193170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:21:41.776 [DEBUG] [Thread-193170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:21:41.827 [DEBUG] [Thread-193170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:21:41.828 [DEBUG] [Thread-193170] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:21:41.837 [DEBUG] [Thread-193170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:21:41.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:21:41.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-14T22:21:41.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-14T22:21:41.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:21:41.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:21:41.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:21:41.874 [DEBUG] [Thread-193170] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:21:54.189 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:21:54.190 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:21:54.671 [DEBUG] [Thread-193172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:22:00.827 [DEBUG] [Thread-193173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:22:09.731 [DEBUG] [Thread-193174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:22:11.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:22:11.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:22:11.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-14T22:22:13.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 21, 38), 6.93, 61.96, 0.0, 37.44, 9.64, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:22:13.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:21:38
2026-02-14T22:22:14.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:22:14.346 [DEBUG] [Thread-193175] [transport.py] [_log()] starting thread (client mode): 0xa2d780d0
2026-02-14T22:22:14.346 [DEBUG] [Thread-193175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:22:14.366 [DEBUG] [Thread-193175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:22:14.366 [INFO] [Thread-193175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:22:14.369 [DEBUG] [Thread-193175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:22:14.369 [DEBUG] [Thread-193175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:22:14.369 [DEBUG] [Thread-193175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:22:14.369 [DEBUG] [Thread-193175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:22:14.369 [DEBUG] [Thread-193175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:22:14.369 [DEBUG] [Thread-193175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:22:14.369 [DEBUG] [Thread-193175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:22:14.369 [DEBUG] [Thread-193175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:22:14.369 [DEBUG] [Thread-193175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:22:14.369 [DEBUG] [Thread-193175] [transport.py] [_log()] client lang: <none>
2026-02-14T22:22:14.369 [DEBUG] [Thread-193175] [transport.py] [_log()] server lang: <none>
2026-02-14T22:22:14.369 [DEBUG] [Thread-193175] [transport.py] [_log()] kex follows: False
2026-02-14T22:22:14.369 [DEBUG] [Thread-193175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:22:14.369 [DEBUG] [Thread-193175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:22:14.369 [DEBUG] [Thread-193175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:22:14.369 [DEBUG] [Thread-193175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:22:14.370 [DEBUG] [Thread-193175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:22:14.370 [DEBUG] [Thread-193175] [transport.py] [_log()] Compression: none
2026-02-14T22:22:14.370 [DEBUG] [Thread-193175] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:22:14.386 [DEBUG] [Thread-193175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:22:14.386 [DEBUG] [Thread-193175] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:22:14.387 [DEBUG] [Thread-193175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:22:14.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:22:14.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:22:14.389 [DEBUG] [Thread-193175] [transport.py] [_log()] userauth is OK
2026-02-14T22:22:14.389 [DEBUG] [Thread-193175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:22:14.389 [DEBUG] [Thread-193175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:22:14.389 [DEBUG] [Thread-193175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:22:14.389 [DEBUG] [Thread-193175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:22:14.425 [INFO] [Thread-193175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:22:14.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:22:15.227 [DEBUG] [Thread-193175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:22:15.228 [DEBUG] [Thread-193175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:22:15.228 [DEBUG] [Thread-193175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:22:15.268 [DEBUG] [Thread-193175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:22:15.269 [DEBUG] [Thread-193175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:22:15.272 [DEBUG] [Thread-193175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:22:15.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:22:15.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:22:15.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:22:15.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:22:15.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:22:15.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:22:15.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:22:15.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:22:15.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:22:15.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.848376 -999.00   +9.30  28.51     67   +3.60 1 1 1 1 1     0    0 5.11 -22.93 ZNESW 30.3 28.5 157.4 37.2 9.8 -25.0 9.6 -23.9 9.3 -23.0 9.7 -24.2
2026-02-14T22:22:15.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:22:15.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:22:15.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.848376
2026-02-14T22:22:15.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:22:15.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:22:15.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:22:15.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:22:15.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:22:15.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:21:38', tmtdew=6.93, humidity=61.96, cloud=0.0, wind=37.44, temperature=9.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:21:39', seeing=3.76, atlas_timestamp='2026-02-14T20:21:39.686', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.056750000000000966, 0.006249999999999645, -0.011499999999999844, 0.05250000000000021, 0.0002500000000011937, -0.0030000000000001137, 0.011250000000000426, 0.04049999999999976, -0.007999999999999119, -0.013750000000001705, -0.0009999999999994458, 0.045999999999999375, -0.003750000000000142, 0.009499999999999176, 0.024499999999999744, 0.06574999999999953, 0.07099999999999973, -0.038000000000000256, -0.014750000000001151, 0.08099999999999952, 0.057749999999998636, 0.0027500000000006963, 0.021750000000000824, 0.04049999999999976, 0.07350000000000101, 0.004749999999999588, -0.01249999999999929, 0.07399999999999984, 0.030000000000001137, 0.05700000000000216, 0.05600000000000094, 0.034250000000000114], zp_timestamp='2026-02-14T20:19:00')
2026-02-14T22:22:15.298 [DEBUG] [Thread-193175] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:22:15.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-14T22:22:15.392 [DEBUG] [Thread-193178] [transport.py] [_log()] starting thread (client mode): 0xa2d1b3d0
2026-02-14T22:22:15.392 [DEBUG] [Thread-193178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:22:15.407 [DEBUG] [Thread-193178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:22:15.407 [INFO] [Thread-193178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:22:15.415 [DEBUG] [Thread-193178] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:22:15.415 [DEBUG] [Thread-193178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:22:15.415 [DEBUG] [Thread-193178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:22:15.415 [DEBUG] [Thread-193178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:22:15.415 [DEBUG] [Thread-193178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:22:15.415 [DEBUG] [Thread-193178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:22:15.415 [DEBUG] [Thread-193178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:22:15.415 [DEBUG] [Thread-193178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:22:15.415 [DEBUG] [Thread-193178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:22:15.415 [DEBUG] [Thread-193178] [transport.py] [_log()] client lang: <none>
2026-02-14T22:22:15.416 [DEBUG] [Thread-193178] [transport.py] [_log()] server lang: <none>
2026-02-14T22:22:15.416 [DEBUG] [Thread-193178] [transport.py] [_log()] kex follows: False
2026-02-14T22:22:15.416 [DEBUG] [Thread-193178] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:22:15.416 [DEBUG] [Thread-193178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:22:15.416 [DEBUG] [Thread-193178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:22:15.416 [DEBUG] [Thread-193178] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:22:15.416 [DEBUG] [Thread-193178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:22:15.416 [DEBUG] [Thread-193178] [transport.py] [_log()] Compression: none
2026-02-14T22:22:15.416 [DEBUG] [Thread-193178] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:22:15.473 [DEBUG] [Thread-193178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:22:15.474 [DEBUG] [Thread-193178] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:22:15.475 [DEBUG] [Thread-193178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:22:15.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:22:15.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:22:15.530 [DEBUG] [Thread-193178] [transport.py] [_log()] userauth is OK
2026-02-14T22:22:15.530 [DEBUG] [Thread-193178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:22:15.531 [DEBUG] [Thread-193178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:22:15.531 [DEBUG] [Thread-193178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:22:15.531 [DEBUG] [Thread-193178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:22:15.549 [INFO] [Thread-193178] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:22:15.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-14T22:22:15.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:22:16.362 [DEBUG] [Thread-193178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:22:16.362 [DEBUG] [Thread-193178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:22:16.410 [DEBUG] [Thread-193178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:22:16.410 [DEBUG] [Thread-193178] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:22:16.419 [DEBUG] [Thread-193178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:22:16.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:22:16.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:22:16.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:22:16.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:22:16.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:22:16.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:22:16.455 [DEBUG] [Thread-193178] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:22:24.763 [DEBUG] [Thread-193180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:22:39.809 [DEBUG] [Thread-193181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:22:46.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:22:46.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:22:46.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:22:48.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 22, 14), 6.75, 62.53, 0.0, 33.97, 9.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:22:48.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:22:14
2026-02-14T22:22:48.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:22:48.910 [DEBUG] [Thread-193182] [transport.py] [_log()] starting thread (client mode): 0xa2d1bdf0
2026-02-14T22:22:48.910 [DEBUG] [Thread-193182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:22:48.930 [DEBUG] [Thread-193182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:22:48.930 [INFO] [Thread-193182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:22:48.934 [DEBUG] [Thread-193182] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:22:48.934 [DEBUG] [Thread-193182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:22:48.934 [DEBUG] [Thread-193182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:22:48.934 [DEBUG] [Thread-193182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:22:48.934 [DEBUG] [Thread-193182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:22:48.934 [DEBUG] [Thread-193182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:22:48.934 [DEBUG] [Thread-193182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:22:48.934 [DEBUG] [Thread-193182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:22:48.934 [DEBUG] [Thread-193182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:22:48.934 [DEBUG] [Thread-193182] [transport.py] [_log()] client lang: <none>
2026-02-14T22:22:48.934 [DEBUG] [Thread-193182] [transport.py] [_log()] server lang: <none>
2026-02-14T22:22:48.935 [DEBUG] [Thread-193182] [transport.py] [_log()] kex follows: False
2026-02-14T22:22:48.935 [DEBUG] [Thread-193182] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:22:48.935 [DEBUG] [Thread-193182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:22:48.935 [DEBUG] [Thread-193182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:22:48.935 [DEBUG] [Thread-193182] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:22:48.935 [DEBUG] [Thread-193182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:22:48.935 [DEBUG] [Thread-193182] [transport.py] [_log()] Compression: none
2026-02-14T22:22:48.935 [DEBUG] [Thread-193182] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:22:48.952 [DEBUG] [Thread-193182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:22:48.953 [DEBUG] [Thread-193182] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:22:48.953 [DEBUG] [Thread-193182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:22:48.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:22:48.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:22:48.955 [DEBUG] [Thread-193182] [transport.py] [_log()] userauth is OK
2026-02-14T22:22:48.956 [DEBUG] [Thread-193182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:22:48.956 [DEBUG] [Thread-193182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:22:48.956 [DEBUG] [Thread-193182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:22:48.956 [DEBUG] [Thread-193182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:22:48.972 [INFO] [Thread-193182] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:22:48.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:22:49.623 [DEBUG] [Thread-193182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:22:49.623 [DEBUG] [Thread-193182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:22:49.624 [DEBUG] [Thread-193182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:22:49.664 [DEBUG] [Thread-193182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:22:49.665 [DEBUG] [Thread-193182] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:22:49.668 [DEBUG] [Thread-193182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:22:49.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:22:49.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:22:49.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:22:49.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:22:49.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:22:49.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:22:49.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:22:49.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:22:49.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:22:49.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.848723 -999.00   +9.30  26.34     67   +3.60 1 1 1 1 1     0    0 5.19 -23.55 ZNESW 23.7 26.3 165.4 34.8 9.7 -25.0 9.6 -24.0 9.4 -23.0 9.8 -24.2
2026-02-14T22:22:49.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:22:49.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:22:49.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.848723
2026-02-14T22:22:49.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:22:49.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:22:49.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:22:49.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:22:49.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:22:49.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:22:14', tmtdew=6.75, humidity=62.53, cloud=0.0, wind=33.97, temperature=9.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:22:14', seeing=4.78, atlas_timestamp='2026-02-14T20:22:09.667', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.056750000000000966, 0.006249999999999645, -0.011499999999999844, 0.05250000000000021, 0.0002500000000011937, -0.0030000000000001137, 0.011250000000000426, 0.04049999999999976, -0.007999999999999119, -0.013750000000001705, -0.0009999999999994458, 0.045999999999999375, -0.003750000000000142, 0.009499999999999176, 0.024499999999999744, 0.06574999999999953, 0.07099999999999973, -0.038000000000000256, -0.014750000000001151, 0.08099999999999952, 0.057749999999998636, 0.0027500000000006963, 0.021750000000000824, 0.04049999999999976, 0.07350000000000101, 0.004749999999999588, -0.01249999999999929, 0.07399999999999984, 0.030000000000001137, 0.05700000000000216, 0.05600000000000094, 0.034250000000000114], zp_timestamp='2026-02-14T20:19:00')
2026-02-14T22:22:49.696 [DEBUG] [Thread-193182] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:22:49.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:22:49.792 [DEBUG] [Thread-193185] [transport.py] [_log()] starting thread (client mode): 0xa2d1a710
2026-02-14T22:22:49.792 [DEBUG] [Thread-193185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:22:49.809 [DEBUG] [Thread-193185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:22:49.809 [INFO] [Thread-193185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:22:49.819 [DEBUG] [Thread-193185] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:22:49.819 [DEBUG] [Thread-193185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:22:49.819 [DEBUG] [Thread-193185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:22:49.819 [DEBUG] [Thread-193185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:22:49.819 [DEBUG] [Thread-193185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:22:49.819 [DEBUG] [Thread-193185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:22:49.819 [DEBUG] [Thread-193185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:22:49.819 [DEBUG] [Thread-193185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:22:49.819 [DEBUG] [Thread-193185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:22:49.820 [DEBUG] [Thread-193185] [transport.py] [_log()] client lang: <none>
2026-02-14T22:22:49.820 [DEBUG] [Thread-193185] [transport.py] [_log()] server lang: <none>
2026-02-14T22:22:49.820 [DEBUG] [Thread-193185] [transport.py] [_log()] kex follows: False
2026-02-14T22:22:49.820 [DEBUG] [Thread-193185] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:22:49.820 [DEBUG] [Thread-193185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:22:49.820 [DEBUG] [Thread-193185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:22:49.820 [DEBUG] [Thread-193185] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:22:49.820 [DEBUG] [Thread-193185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:22:49.820 [DEBUG] [Thread-193185] [transport.py] [_log()] Compression: none
2026-02-14T22:22:49.820 [DEBUG] [Thread-193185] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:22:49.878 [DEBUG] [Thread-193185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:22:49.878 [DEBUG] [Thread-193185] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:22:49.879 [DEBUG] [Thread-193185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:22:49.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:22:49.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:22:49.933 [DEBUG] [Thread-193185] [transport.py] [_log()] userauth is OK
2026-02-14T22:22:49.933 [DEBUG] [Thread-193185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:22:49.934 [DEBUG] [Thread-193185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:22:49.934 [DEBUG] [Thread-193185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:22:49.934 [DEBUG] [Thread-193185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:22:49.959 [INFO] [Thread-193185] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:22:49.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:22:49.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:22:50.745 [DEBUG] [Thread-193185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:22:50.745 [DEBUG] [Thread-193185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:22:50.793 [DEBUG] [Thread-193185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:22:50.793 [DEBUG] [Thread-193185] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:22:50.801 [DEBUG] [Thread-193185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:22:50.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:22:50.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:22:50.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:22:50.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:22:50.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:22:50.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:22:50.833 [DEBUG] [Thread-193185] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:22:54.392 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:22:54.393 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:22:54.845 [DEBUG] [Thread-193187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:22:56.627 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:23:00.902 [DEBUG] [Thread-193188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:23:09.899 [DEBUG] [Thread-193189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:23:20.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:23:20.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:23:20.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-14T22:23:22.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 22, 49), 6.81, 62.51, 0.0, 38.94, 9.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:23:22.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:22:49
2026-02-14T22:23:23.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:23:23.413 [DEBUG] [Thread-193190] [transport.py] [_log()] starting thread (client mode): 0xa2d19e40
2026-02-14T22:23:23.413 [DEBUG] [Thread-193190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:23:23.427 [DEBUG] [Thread-193190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:23:23.427 [INFO] [Thread-193190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:23:23.431 [DEBUG] [Thread-193190] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:23:23.431 [DEBUG] [Thread-193190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:23:23.431 [DEBUG] [Thread-193190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:23:23.431 [DEBUG] [Thread-193190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:23:23.431 [DEBUG] [Thread-193190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:23:23.431 [DEBUG] [Thread-193190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:23:23.431 [DEBUG] [Thread-193190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:23:23.431 [DEBUG] [Thread-193190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:23:23.431 [DEBUG] [Thread-193190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:23:23.431 [DEBUG] [Thread-193190] [transport.py] [_log()] client lang: <none>
2026-02-14T22:23:23.431 [DEBUG] [Thread-193190] [transport.py] [_log()] server lang: <none>
2026-02-14T22:23:23.431 [DEBUG] [Thread-193190] [transport.py] [_log()] kex follows: False
2026-02-14T22:23:23.431 [DEBUG] [Thread-193190] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:23:23.431 [DEBUG] [Thread-193190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:23:23.431 [DEBUG] [Thread-193190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:23:23.431 [DEBUG] [Thread-193190] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:23:23.431 [DEBUG] [Thread-193190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:23:23.431 [DEBUG] [Thread-193190] [transport.py] [_log()] Compression: none
2026-02-14T22:23:23.431 [DEBUG] [Thread-193190] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:23:23.448 [DEBUG] [Thread-193190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:23:23.448 [DEBUG] [Thread-193190] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:23:23.449 [DEBUG] [Thread-193190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:23:23.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:23:23.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:23:23.450 [DEBUG] [Thread-193190] [transport.py] [_log()] userauth is OK
2026-02-14T22:23:23.450 [DEBUG] [Thread-193190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:23:23.450 [DEBUG] [Thread-193190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:23:23.450 [DEBUG] [Thread-193190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:23:23.451 [DEBUG] [Thread-193190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:23:23.477 [INFO] [Thread-193190] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:23:23.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:23:24.096 [DEBUG] [Thread-193190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:23:24.097 [DEBUG] [Thread-193190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:23:24.097 [DEBUG] [Thread-193190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:23:24.138 [DEBUG] [Thread-193190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:23:24.138 [DEBUG] [Thread-193190] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:23:24.141 [DEBUG] [Thread-193190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:23:24.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:23:24.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:23:24.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:23:24.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:23:24.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:23:24.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:23:24.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:23:24.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:23:24.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:23:24.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.849070 -999.00   +9.30  20.99     67   +3.60 1 1 1 1 1     0    0 5.24 -23.84 ZNESW 22.8 21.0 156.0 29.9 9.8 -25.1 9.6 -24.0 9.3 -23.1 9.7 -24.2
2026-02-14T22:23:24.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:23:24.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:23:24.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.849070
2026-02-14T22:23:24.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:23:24.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:23:24.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:23:24.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:23:24.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:23:24.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:22:49', tmtdew=6.81, humidity=62.51, cloud=0.0, wind=38.94, temperature=9.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:22:49', seeing=3.05, atlas_timestamp='2026-02-14T20:22:39.648', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.056750000000000966, 0.006249999999999645, -0.011499999999999844, 0.05250000000000021, 0.0002500000000011937, -0.0030000000000001137, 0.011250000000000426, 0.04049999999999976, -0.007999999999999119, -0.013750000000001705, -0.0009999999999994458, 0.045999999999999375, -0.003750000000000142, 0.009499999999999176, 0.024499999999999744, 0.06574999999999953, 0.07099999999999973, -0.038000000000000256, -0.014750000000001151, 0.08099999999999952, 0.057749999999998636, 0.0027500000000006963, 0.021750000000000824, 0.04049999999999976, 0.07350000000000101, 0.004749999999999588, -0.01249999999999929, 0.07399999999999984, 0.030000000000001137, 0.05700000000000216, 0.05600000000000094, 0.034250000000000114], zp_timestamp='2026-02-14T20:19:00')
2026-02-14T22:23:24.162 [DEBUG] [Thread-193190] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:23: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-14T22:23:24.244 [DEBUG] [Thread-193193] [transport.py] [_log()] starting thread (client mode): 0xa2d1bd90
2026-02-14T22:23:24.244 [DEBUG] [Thread-193193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:23:24.259 [DEBUG] [Thread-193193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:23:24.259 [INFO] [Thread-193193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:23:24.266 [DEBUG] [Thread-193193] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:23:24.267 [DEBUG] [Thread-193193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:23:24.267 [DEBUG] [Thread-193193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:23:24.267 [DEBUG] [Thread-193193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:23:24.267 [DEBUG] [Thread-193193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:23:24.267 [DEBUG] [Thread-193193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:23:24.267 [DEBUG] [Thread-193193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:23:24.267 [DEBUG] [Thread-193193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:23:24.267 [DEBUG] [Thread-193193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:23:24.267 [DEBUG] [Thread-193193] [transport.py] [_log()] client lang: <none>
2026-02-14T22:23:24.267 [DEBUG] [Thread-193193] [transport.py] [_log()] server lang: <none>
2026-02-14T22:23:24.267 [DEBUG] [Thread-193193] [transport.py] [_log()] kex follows: False
2026-02-14T22:23:24.267 [DEBUG] [Thread-193193] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:23:24.267 [DEBUG] [Thread-193193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:23:24.267 [DEBUG] [Thread-193193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:23:24.267 [DEBUG] [Thread-193193] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:23:24.267 [DEBUG] [Thread-193193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:23:24.267 [DEBUG] [Thread-193193] [transport.py] [_log()] Compression: none
2026-02-14T22:23:24.267 [DEBUG] [Thread-193193] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:23:24.330 [DEBUG] [Thread-193193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:23:24.330 [DEBUG] [Thread-193193] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:23:24.331 [DEBUG] [Thread-193193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:23:24.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:23:24.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:23:24.390 [DEBUG] [Thread-193193] [transport.py] [_log()] userauth is OK
2026-02-14T22:23:24.391 [DEBUG] [Thread-193193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:23:24.391 [DEBUG] [Thread-193193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:23:24.391 [DEBUG] [Thread-193193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:23:24.391 [DEBUG] [Thread-193193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:23:24.409 [INFO] [Thread-193193] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:23:24.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-14T22:23:24.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:23:24.930 [DEBUG] [Thread-193195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:23:25.243 [DEBUG] [Thread-193193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:23:25.244 [DEBUG] [Thread-193193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:23:25.292 [DEBUG] [Thread-193193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:23:25.293 [DEBUG] [Thread-193193] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:23:25.302 [DEBUG] [Thread-193193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:23:25.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:23: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')
2026-02-14T22:23:25.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-14T22:23:25.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:23:25.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:23:25.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:23:25.338 [DEBUG] [Thread-193193] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:23:39.986 [DEBUG] [Thread-193196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:23:54.593 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:23:54.594 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:23:55.021 [DEBUG] [Thread-193197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:23:55.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:23:55.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:23:55.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:23:57.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 23, 24), 6.81, 62.5, 0.0, 39.93, 9.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:23:57.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:23:24
2026-02-14T22:23:57.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:23:57.628 [DEBUG] [Thread-193198] [transport.py] [_log()] starting thread (client mode): 0xa2d19bd0
2026-02-14T22:23:57.628 [DEBUG] [Thread-193198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:23:57.650 [DEBUG] [Thread-193198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:23:57.650 [INFO] [Thread-193198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:23:57.653 [DEBUG] [Thread-193198] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:23:57.653 [DEBUG] [Thread-193198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:23:57.653 [DEBUG] [Thread-193198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:23:57.653 [DEBUG] [Thread-193198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:23:57.653 [DEBUG] [Thread-193198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:23:57.653 [DEBUG] [Thread-193198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:23:57.653 [DEBUG] [Thread-193198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:23:57.653 [DEBUG] [Thread-193198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:23:57.653 [DEBUG] [Thread-193198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:23:57.653 [DEBUG] [Thread-193198] [transport.py] [_log()] client lang: <none>
2026-02-14T22:23:57.653 [DEBUG] [Thread-193198] [transport.py] [_log()] server lang: <none>
2026-02-14T22:23:57.653 [DEBUG] [Thread-193198] [transport.py] [_log()] kex follows: False
2026-02-14T22:23:57.653 [DEBUG] [Thread-193198] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:23:57.653 [DEBUG] [Thread-193198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:23:57.653 [DEBUG] [Thread-193198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:23:57.653 [DEBUG] [Thread-193198] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:23:57.653 [DEBUG] [Thread-193198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:23:57.653 [DEBUG] [Thread-193198] [transport.py] [_log()] Compression: none
2026-02-14T22:23:57.653 [DEBUG] [Thread-193198] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:23:57.673 [DEBUG] [Thread-193198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:23:57.673 [DEBUG] [Thread-193198] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:23:57.674 [DEBUG] [Thread-193198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:23:57.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:23:57.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:23:57.676 [DEBUG] [Thread-193198] [transport.py] [_log()] userauth is OK
2026-02-14T22:23:57.676 [DEBUG] [Thread-193198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:23:57.676 [DEBUG] [Thread-193198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:23:57.677 [DEBUG] [Thread-193198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:23:57.677 [DEBUG] [Thread-193198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:23:57.700 [INFO] [Thread-193198] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:23:57.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:23:58.337 [DEBUG] [Thread-193198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:23:58.337 [DEBUG] [Thread-193198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:23:58.338 [DEBUG] [Thread-193198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:23:58.378 [DEBUG] [Thread-193198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:23:58.379 [DEBUG] [Thread-193198] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:23:58.382 [DEBUG] [Thread-193198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:23:58.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:23:58.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:23:58.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:23:58.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:23:58.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:23:58.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:23:58.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:23:58.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:23:58.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:23:58.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.849418 -999.00   +9.30  24.97     67   +3.60 1 1 1 1 1     0    0 5.28 -22.13 ZNESW 27.6 25.0 159.4 31.6 9.8 -25.0 9.6 -24.0 9.3 -23.1 9.7 -24.4
2026-02-14T22:23:58.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:23:58.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:23:58.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.849418
2026-02-14T22:23:58.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:23:58.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:23:58.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:23:58.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:23:58.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:23:58.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:23:24', tmtdew=6.81, humidity=62.5, cloud=0.0, wind=39.93, temperature=9.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:23:25', seeing=3.25, atlas_timestamp='2026-02-14T20:23:09.715', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.056750000000000966, 0.006249999999999645, -0.011499999999999844, 0.05250000000000021, 0.0002500000000011937, -0.0030000000000001137, 0.011250000000000426, 0.04049999999999976, -0.007999999999999119, -0.013750000000001705, -0.0009999999999994458, 0.045999999999999375, -0.003750000000000142, 0.009499999999999176, 0.024499999999999744, 0.06574999999999953, 0.07099999999999973, -0.038000000000000256, -0.014750000000001151, 0.08099999999999952, 0.057749999999998636, 0.0027500000000006963, 0.021750000000000824, 0.04049999999999976, 0.07350000000000101, 0.004749999999999588, -0.01249999999999929, 0.07399999999999984, 0.030000000000001137, 0.05700000000000216, 0.05600000000000094, 0.034250000000000114], zp_timestamp='2026-02-14T20:22:00')
2026-02-14T22:23:58.407 [DEBUG] [Thread-193198] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:23:58.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-14T22:23:58.501 [DEBUG] [Thread-193201] [transport.py] [_log()] starting thread (client mode): 0xa57d5de0
2026-02-14T22:23:58.502 [DEBUG] [Thread-193201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:23:58.517 [DEBUG] [Thread-193201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:23:58.517 [INFO] [Thread-193201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:23:58.524 [DEBUG] [Thread-193201] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:23:58.525 [DEBUG] [Thread-193201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:23:58.525 [DEBUG] [Thread-193201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:23:58.525 [DEBUG] [Thread-193201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:23:58.525 [DEBUG] [Thread-193201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:23:58.525 [DEBUG] [Thread-193201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:23:58.525 [DEBUG] [Thread-193201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:23:58.525 [DEBUG] [Thread-193201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:23:58.525 [DEBUG] [Thread-193201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:23:58.525 [DEBUG] [Thread-193201] [transport.py] [_log()] client lang: <none>
2026-02-14T22:23:58.525 [DEBUG] [Thread-193201] [transport.py] [_log()] server lang: <none>
2026-02-14T22:23:58.525 [DEBUG] [Thread-193201] [transport.py] [_log()] kex follows: False
2026-02-14T22:23:58.525 [DEBUG] [Thread-193201] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:23:58.525 [DEBUG] [Thread-193201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:23:58.525 [DEBUG] [Thread-193201] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:23:58.525 [DEBUG] [Thread-193201] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:23:58.525 [DEBUG] [Thread-193201] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:23:58.525 [DEBUG] [Thread-193201] [transport.py] [_log()] Compression: none
2026-02-14T22:23:58.525 [DEBUG] [Thread-193201] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:23:58.583 [DEBUG] [Thread-193201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:23:58.584 [DEBUG] [Thread-193201] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:23:58.585 [DEBUG] [Thread-193201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:23:58.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:23:58.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:23:58.644 [DEBUG] [Thread-193201] [transport.py] [_log()] userauth is OK
2026-02-14T22:23:58.645 [DEBUG] [Thread-193201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:23:58.645 [DEBUG] [Thread-193201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:23:58.645 [DEBUG] [Thread-193201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:23:58.645 [DEBUG] [Thread-193201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:23:58.664 [INFO] [Thread-193201] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:23:58.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-14T22:23:58.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:23:59.492 [DEBUG] [Thread-193201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:23:59.492 [DEBUG] [Thread-193201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:23:59.540 [DEBUG] [Thread-193201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:23:59.541 [DEBUG] [Thread-193201] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:23:59.554 [DEBUG] [Thread-193201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:23:59.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:23:59.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-14T22:23:59.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-14T22:23:59.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:23:59.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:23:59.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:23:59.596 [DEBUG] [Thread-193201] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:24:00.953 [DEBUG] [Thread-193203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:24:10.058 [DEBUG] [Thread-193204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:24:25.117 [DEBUG] [Thread-193205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:24:29.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:24:29.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:24:29.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-14T22:24:30.524 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:24:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 23, 24), 6.81, 62.5, 0.0, 39.93, 9.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:24:31.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:23:24
2026-02-14T22:24:32.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:24:32.525 [DEBUG] [Thread-193206] [transport.py] [_log()] starting thread (client mode): 0xa57d4e50
2026-02-14T22:24:32.525 [DEBUG] [Thread-193206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:24:32.544 [DEBUG] [Thread-193206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:24:32.544 [INFO] [Thread-193206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:24:32.547 [DEBUG] [Thread-193206] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:24:32.547 [DEBUG] [Thread-193206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:24:32.547 [DEBUG] [Thread-193206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:24:32.547 [DEBUG] [Thread-193206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:24:32.548 [DEBUG] [Thread-193206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:24:32.548 [DEBUG] [Thread-193206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:24:32.548 [DEBUG] [Thread-193206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:24:32.548 [DEBUG] [Thread-193206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:24:32.548 [DEBUG] [Thread-193206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:24:32.548 [DEBUG] [Thread-193206] [transport.py] [_log()] client lang: <none>
2026-02-14T22:24:32.548 [DEBUG] [Thread-193206] [transport.py] [_log()] server lang: <none>
2026-02-14T22:24:32.548 [DEBUG] [Thread-193206] [transport.py] [_log()] kex follows: False
2026-02-14T22:24:32.548 [DEBUG] [Thread-193206] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:24:32.548 [DEBUG] [Thread-193206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:24:32.548 [DEBUG] [Thread-193206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:24:32.548 [DEBUG] [Thread-193206] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:24:32.548 [DEBUG] [Thread-193206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:24:32.548 [DEBUG] [Thread-193206] [transport.py] [_log()] Compression: none
2026-02-14T22:24:32.548 [DEBUG] [Thread-193206] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:24:32.565 [DEBUG] [Thread-193206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:24:32.565 [DEBUG] [Thread-193206] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:24:32.566 [DEBUG] [Thread-193206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:24:32.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:24:32.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:24:32.568 [DEBUG] [Thread-193206] [transport.py] [_log()] userauth is OK
2026-02-14T22:24:32.568 [DEBUG] [Thread-193206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:24:32.568 [DEBUG] [Thread-193206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:24:32.568 [DEBUG] [Thread-193206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:24:32.568 [DEBUG] [Thread-193206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:24:32.600 [INFO] [Thread-193206] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:24:32.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:24:33.237 [DEBUG] [Thread-193206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:24:33.238 [DEBUG] [Thread-193206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:24:33.238 [DEBUG] [Thread-193206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:24:33.279 [DEBUG] [Thread-193206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:24:33.279 [DEBUG] [Thread-193206] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:24:33.282 [DEBUG] [Thread-193206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:24:33.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:24:33.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:24:33.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:24:33.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:24:33.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:24:33.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:24:33.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:24:33.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:24:33.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:24:33.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.849765 -999.00   +9.30  25.52     67   +3.60 1 1 1 1 1     0    0 5.19 -24.23 ZNESW 19.6 25.5 161.0 33.2 9.7 -25.1 9.5 -24.1 9.4 -23.2 9.7 -24.5
2026-02-14T22:24:33.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:24:33.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:24:33.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.849765
2026-02-14T22:24:33.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:24:33.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:24:33.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:24:33.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:24:33.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:24:33.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:23:24', tmtdew=6.81, humidity=62.5, cloud=0.0, wind=39.93, temperature=9.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:24:00', seeing=3.73, atlas_timestamp='2026-02-14T20:23:39.696', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.056750000000000966, 0.006249999999999645, -0.011499999999999844, 0.05250000000000021, 0.0002500000000011937, -0.0030000000000001137, 0.011250000000000426, 0.04049999999999976, -0.007999999999999119, -0.013750000000001705, -0.0009999999999994458, 0.045999999999999375, -0.003750000000000142, 0.009499999999999176, 0.024499999999999744, 0.06574999999999953, 0.07099999999999973, -0.038000000000000256, -0.014750000000001151, 0.08099999999999952, 0.057749999999998636, 0.0027500000000006963, 0.021750000000000824, 0.04049999999999976, 0.07350000000000101, 0.004749999999999588, -0.01249999999999929, 0.07399999999999984, 0.030000000000001137, 0.05700000000000216, 0.05600000000000094, 0.034250000000000114], zp_timestamp='2026-02-14T20:22:00')
2026-02-14T22:24:33.306 [DEBUG] [Thread-193206] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:24:33.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:24:33.412 [DEBUG] [Thread-193209] [transport.py] [_log()] starting thread (client mode): 0xa57d6bc0
2026-02-14T22:24:33.412 [DEBUG] [Thread-193209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:24:33.427 [DEBUG] [Thread-193209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:24:33.427 [INFO] [Thread-193209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:24:33.435 [DEBUG] [Thread-193209] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:24:33.435 [DEBUG] [Thread-193209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:24:33.435 [DEBUG] [Thread-193209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:24:33.435 [DEBUG] [Thread-193209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:24:33.435 [DEBUG] [Thread-193209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:24:33.435 [DEBUG] [Thread-193209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:24:33.435 [DEBUG] [Thread-193209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:24:33.435 [DEBUG] [Thread-193209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:24:33.435 [DEBUG] [Thread-193209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:24:33.435 [DEBUG] [Thread-193209] [transport.py] [_log()] client lang: <none>
2026-02-14T22:24:33.435 [DEBUG] [Thread-193209] [transport.py] [_log()] server lang: <none>
2026-02-14T22:24:33.435 [DEBUG] [Thread-193209] [transport.py] [_log()] kex follows: False
2026-02-14T22:24:33.435 [DEBUG] [Thread-193209] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:24:33.435 [DEBUG] [Thread-193209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:24:33.436 [DEBUG] [Thread-193209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:24:33.436 [DEBUG] [Thread-193209] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:24:33.436 [DEBUG] [Thread-193209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:24:33.436 [DEBUG] [Thread-193209] [transport.py] [_log()] Compression: none
2026-02-14T22:24:33.436 [DEBUG] [Thread-193209] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:24:33.495 [DEBUG] [Thread-193209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:24:33.496 [DEBUG] [Thread-193209] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:24:33.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:24:33.497 [DEBUG] [Thread-193209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:24:33.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:24:33.555 [DEBUG] [Thread-193209] [transport.py] [_log()] userauth is OK
2026-02-14T22:24:33.555 [DEBUG] [Thread-193209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:24:33.555 [DEBUG] [Thread-193209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:24:33.555 [DEBUG] [Thread-193209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:24:33.555 [DEBUG] [Thread-193209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:24:33.574 [INFO] [Thread-193209] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:24:33.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-14T22:24:33.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:24:34.457 [DEBUG] [Thread-193209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:24:34.457 [DEBUG] [Thread-193209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:24:34.505 [DEBUG] [Thread-193209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:24:34.505 [DEBUG] [Thread-193209] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:24:34.515 [DEBUG] [Thread-193209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:24:34.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:24:34.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-14T22:24:34.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:24:34.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:24:34.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:24:34.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:24:34.553 [DEBUG] [Thread-193209] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:24:40.151 [DEBUG] [Thread-193211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:24:54.803 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:24:54.804 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:24:55.206 [DEBUG] [Thread-193212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:25:01.032 [DEBUG] [Thread-193213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:25:04.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:25:04.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:25:04.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:25:06.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 24, 35), 6.98, 61.73, 0.0, 39.16, 9.64, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:25:06.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:24:35
2026-02-14T22:25:07.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:25:07.238 [DEBUG] [Thread-193214] [transport.py] [_log()] starting thread (client mode): 0xa2d1beb0
2026-02-14T22:25:07.238 [DEBUG] [Thread-193214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:25:07.252 [DEBUG] [Thread-193214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:25:07.252 [INFO] [Thread-193214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:25:07.253 [DEBUG] [Thread-193214] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:25:07.253 [DEBUG] [Thread-193214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:25:07.253 [DEBUG] [Thread-193214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:25:07.253 [DEBUG] [Thread-193214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:25:07.253 [DEBUG] [Thread-193214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:25:07.253 [DEBUG] [Thread-193214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:25:07.253 [DEBUG] [Thread-193214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:25:07.253 [DEBUG] [Thread-193214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:25:07.253 [DEBUG] [Thread-193214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:25:07.253 [DEBUG] [Thread-193214] [transport.py] [_log()] client lang: <none>
2026-02-14T22:25:07.253 [DEBUG] [Thread-193214] [transport.py] [_log()] server lang: <none>
2026-02-14T22:25:07.253 [DEBUG] [Thread-193214] [transport.py] [_log()] kex follows: False
2026-02-14T22:25:07.254 [DEBUG] [Thread-193214] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:25:07.254 [DEBUG] [Thread-193214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:25:07.254 [DEBUG] [Thread-193214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:25:07.254 [DEBUG] [Thread-193214] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:25:07.254 [DEBUG] [Thread-193214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:25:07.254 [DEBUG] [Thread-193214] [transport.py] [_log()] Compression: none
2026-02-14T22:25:07.254 [DEBUG] [Thread-193214] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:25:07.262 [DEBUG] [Thread-193214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:25:07.262 [DEBUG] [Thread-193214] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:25:07.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:25:07.263 [DEBUG] [Thread-193214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:25:07.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:25:07.264 [DEBUG] [Thread-193214] [transport.py] [_log()] userauth is OK
2026-02-14T22:25:07.264 [DEBUG] [Thread-193214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:25:07.264 [DEBUG] [Thread-193214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:25:07.264 [DEBUG] [Thread-193214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:25:07.264 [DEBUG] [Thread-193214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:25:07.290 [INFO] [Thread-193214] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:25:07.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:25:10.243 [DEBUG] [Thread-193216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:25:16.470 [DEBUG] [Thread-193214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:25:16.470 [DEBUG] [Thread-193214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:25:16.471 [DEBUG] [Thread-193214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:25:16.511 [DEBUG] [Thread-193214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:25:16.512 [DEBUG] [Thread-193214] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:25:16.515 [DEBUG] [Thread-193214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:25:16.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:25:16.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:25:16.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:25:16.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:25:16.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:25:16.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:25:16.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:25:16.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:25:16.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:25:16.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.850112 -999.00   +9.30  26.29     67   +3.60 1 1 1 1 1     0    0 5.14 -24.01 ZNESW 26.1 26.3 150.2 35.3 9.7 -25.1 9.6 -24.1 9.3 -23.2 9.7 -24.4
2026-02-14T22:25:16.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:25:16.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:25:16.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.850112
2026-02-14T22:25:16.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:25:16.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:25:16.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:25:16.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:25:16.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:25:16.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:24:35', tmtdew=6.98, humidity=61.73, cloud=0.0, wind=39.16, temperature=9.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:24:35', seeing=3.32, atlas_timestamp='2026-02-14T20:24:09.677', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.056750000000000966, 0.006249999999999645, -0.011499999999999844, 0.05250000000000021, 0.0002500000000011937, -0.0030000000000001137, 0.011250000000000426, 0.04049999999999976, -0.007999999999999119, -0.013750000000001705, -0.0009999999999994458, 0.045999999999999375, -0.003750000000000142, 0.009499999999999176, 0.024499999999999744, 0.06574999999999953, 0.07099999999999973, -0.038000000000000256, -0.014750000000001151, 0.08099999999999952, 0.057749999999998636, 0.0027500000000006963, 0.021750000000000824, 0.04049999999999976, 0.07350000000000101, 0.004749999999999588, -0.01249999999999929, 0.07399999999999984, 0.030000000000001137, 0.05700000000000216, 0.05600000000000094, 0.034250000000000114], zp_timestamp='2026-02-14T20:22:00')
2026-02-14T22:25:16.702 [DEBUG] [Thread-193214] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:25:16.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-14T22:25:16.785 [DEBUG] [Thread-193218] [transport.py] [_log()] starting thread (client mode): 0xa2d195a0
2026-02-14T22:25:16.786 [DEBUG] [Thread-193218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:25:16.800 [DEBUG] [Thread-193218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:25:16.800 [INFO] [Thread-193218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:25:16.809 [DEBUG] [Thread-193218] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:25:16.809 [DEBUG] [Thread-193218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:25:16.810 [DEBUG] [Thread-193218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:25:16.810 [DEBUG] [Thread-193218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:25:16.810 [DEBUG] [Thread-193218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:25:16.810 [DEBUG] [Thread-193218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:25:16.810 [DEBUG] [Thread-193218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:25:16.810 [DEBUG] [Thread-193218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:25:16.810 [DEBUG] [Thread-193218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:25:16.810 [DEBUG] [Thread-193218] [transport.py] [_log()] client lang: <none>
2026-02-14T22:25:16.810 [DEBUG] [Thread-193218] [transport.py] [_log()] server lang: <none>
2026-02-14T22:25:16.810 [DEBUG] [Thread-193218] [transport.py] [_log()] kex follows: False
2026-02-14T22:25:16.810 [DEBUG] [Thread-193218] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:25:16.810 [DEBUG] [Thread-193218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:25:16.810 [DEBUG] [Thread-193218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:25:16.810 [DEBUG] [Thread-193218] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:25:16.810 [DEBUG] [Thread-193218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:25:16.810 [DEBUG] [Thread-193218] [transport.py] [_log()] Compression: none
2026-02-14T22:25:16.811 [DEBUG] [Thread-193218] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:25:16.872 [DEBUG] [Thread-193218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:25:16.872 [DEBUG] [Thread-193218] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:25:16.873 [DEBUG] [Thread-193218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:25:16.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:25:16.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:25:16.941 [DEBUG] [Thread-193218] [transport.py] [_log()] userauth is OK
2026-02-14T22:25:16.941 [DEBUG] [Thread-193218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:25:16.941 [DEBUG] [Thread-193218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:25:16.941 [DEBUG] [Thread-193218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:25:16.941 [DEBUG] [Thread-193218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:25:16.960 [INFO] [Thread-193218] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:25:16.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-14T22:25:16.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:25:17.771 [DEBUG] [Thread-193218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:25:17.771 [DEBUG] [Thread-193218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:25:17.819 [DEBUG] [Thread-193218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:25:17.819 [DEBUG] [Thread-193218] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:25:17.828 [DEBUG] [Thread-193218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:25:17.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:25: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')
2026-02-14T22:25:17.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:25:17.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:25:17.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:25:17.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:25:17.862 [DEBUG] [Thread-193218] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:25:25.280 [DEBUG] [Thread-193220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:25:40.350 [DEBUG] [Thread-193221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:25:47.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:25:47.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:25:47.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-14T22:25:50.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 25, 10), 6.78, 62.41, 0.0, 33.86, 9.38, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:25:50.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:25:10
2026-02-14T22:25:50.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:25:50.659 [DEBUG] [Thread-193222] [transport.py] [_log()] starting thread (client mode): 0xa2d18ca0
2026-02-14T22:25:50.659 [DEBUG] [Thread-193222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:25:50.679 [DEBUG] [Thread-193222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:25:50.679 [INFO] [Thread-193222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:25:50.682 [DEBUG] [Thread-193222] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:25:50.682 [DEBUG] [Thread-193222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:25:50.682 [DEBUG] [Thread-193222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:25:50.682 [DEBUG] [Thread-193222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:25:50.682 [DEBUG] [Thread-193222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:25:50.682 [DEBUG] [Thread-193222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:25:50.682 [DEBUG] [Thread-193222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:25:50.682 [DEBUG] [Thread-193222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:25:50.682 [DEBUG] [Thread-193222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:25:50.682 [DEBUG] [Thread-193222] [transport.py] [_log()] client lang: <none>
2026-02-14T22:25:50.682 [DEBUG] [Thread-193222] [transport.py] [_log()] server lang: <none>
2026-02-14T22:25:50.682 [DEBUG] [Thread-193222] [transport.py] [_log()] kex follows: False
2026-02-14T22:25:50.682 [DEBUG] [Thread-193222] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:25:50.682 [DEBUG] [Thread-193222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:25:50.682 [DEBUG] [Thread-193222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:25:50.682 [DEBUG] [Thread-193222] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:25:50.682 [DEBUG] [Thread-193222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:25:50.682 [DEBUG] [Thread-193222] [transport.py] [_log()] Compression: none
2026-02-14T22:25:50.682 [DEBUG] [Thread-193222] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:25:50.699 [DEBUG] [Thread-193222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:25:50.700 [DEBUG] [Thread-193222] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:25:50.700 [DEBUG] [Thread-193222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:25:50.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:25:50.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:25:50.701 [DEBUG] [Thread-193222] [transport.py] [_log()] userauth is OK
2026-02-14T22:25:50.702 [DEBUG] [Thread-193222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:25:50.702 [DEBUG] [Thread-193222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:25:50.702 [DEBUG] [Thread-193222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:25:50.702 [DEBUG] [Thread-193222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:25:50.716 [INFO] [Thread-193222] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:25:50.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:25:51.304 [DEBUG] [Thread-193222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:25:51.304 [DEBUG] [Thread-193222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:25:51.304 [DEBUG] [Thread-193222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:25:51.345 [DEBUG] [Thread-193222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:25:51.345 [DEBUG] [Thread-193222] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:25:51.347 [DEBUG] [Thread-193222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:25:51.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:25:51.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:25:51.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:25:51.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:25:51.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:25:51.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:25:51.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:25:51.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:25:51.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:25:51.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.850806 -999.00   +9.20  20.69     67   +3.60 1 1 1 1 1     0    0 5.16 -22.57 ZNESW 22.7 20.7 157.2 30.2 9.7 -25.0 9.5 -24.0 9.3 -23.0 9.7 -24.2
2026-02-14T22:25:51.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:25:51.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:25:51.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.850806
2026-02-14T22:25:51.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:25:51.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:25:51.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:25:51.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:25:51.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:25:51.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:25:10', tmtdew=6.78, humidity=62.41, cloud=0.0, wind=33.86, temperature=9.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:25:46', seeing=3.44, atlas_timestamp='2026-02-14T20:25:09.638', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.056750000000000966, 0.006249999999999645, -0.011499999999999844, 0.05250000000000021, 0.0002500000000011937, -0.0030000000000001137, 0.011250000000000426, 0.04049999999999976, -0.007999999999999119, -0.013750000000001705, -0.0009999999999994458, 0.045999999999999375, -0.003750000000000142, 0.009499999999999176, 0.024499999999999744, 0.06574999999999953, 0.07099999999999973, -0.038000000000000256, -0.014750000000001151, 0.08099999999999952, 0.057749999999998636, 0.0027500000000006963, 0.021750000000000824, 0.04049999999999976, 0.07350000000000101, 0.004749999999999588, -0.01249999999999929, 0.07399999999999984, 0.030000000000001137, 0.05700000000000216, 0.05600000000000094, 0.034250000000000114], zp_timestamp='2026-02-14T20:22:00')
2026-02-14T22:25:51.372 [DEBUG] [Thread-193222] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:25:51.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-14T22:25:51.468 [DEBUG] [Thread-193225] [transport.py] [_log()] starting thread (client mode): 0xa57d5630
2026-02-14T22:25:51.468 [DEBUG] [Thread-193225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:25:51.484 [DEBUG] [Thread-193225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:25:51.484 [INFO] [Thread-193225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:25:51.491 [DEBUG] [Thread-193225] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:25:51.492 [DEBUG] [Thread-193225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:25:51.492 [DEBUG] [Thread-193225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:25:51.492 [DEBUG] [Thread-193225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:25:51.492 [DEBUG] [Thread-193225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:25:51.492 [DEBUG] [Thread-193225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:25:51.492 [DEBUG] [Thread-193225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:25:51.492 [DEBUG] [Thread-193225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:25:51.492 [DEBUG] [Thread-193225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:25:51.492 [DEBUG] [Thread-193225] [transport.py] [_log()] client lang: <none>
2026-02-14T22:25:51.492 [DEBUG] [Thread-193225] [transport.py] [_log()] server lang: <none>
2026-02-14T22:25:51.492 [DEBUG] [Thread-193225] [transport.py] [_log()] kex follows: False
2026-02-14T22:25:51.492 [DEBUG] [Thread-193225] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:25:51.492 [DEBUG] [Thread-193225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:25:51.492 [DEBUG] [Thread-193225] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:25:51.492 [DEBUG] [Thread-193225] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:25:51.492 [DEBUG] [Thread-193225] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:25:51.492 [DEBUG] [Thread-193225] [transport.py] [_log()] Compression: none
2026-02-14T22:25:51.492 [DEBUG] [Thread-193225] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:25:51.551 [DEBUG] [Thread-193225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:25:51.551 [DEBUG] [Thread-193225] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:25:51.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:25:51.552 [DEBUG] [Thread-193225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:25:51.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:25:51.611 [DEBUG] [Thread-193225] [transport.py] [_log()] userauth is OK
2026-02-14T22:25:51.611 [DEBUG] [Thread-193225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:25:51.611 [DEBUG] [Thread-193225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:25:51.611 [DEBUG] [Thread-193225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:25:51.611 [DEBUG] [Thread-193225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:25:51.630 [INFO] [Thread-193225] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:25:51.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-14T22:25:51.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:25:52.433 [DEBUG] [Thread-193225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:25:52.433 [DEBUG] [Thread-193225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:25:52.481 [DEBUG] [Thread-193225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:25:52.481 [DEBUG] [Thread-193225] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:25:52.491 [DEBUG] [Thread-193225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:25:52.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:25:52.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:25:52.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:25:52.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:25:52.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:25:52.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:25:52.525 [DEBUG] [Thread-193225] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:25:55.011 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:25:55.014 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:25:55.383 [DEBUG] [Thread-193227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:26:01.094 [DEBUG] [Thread-193228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:26:04.100 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:26:10.438 [DEBUG] [Thread-193229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:26:22.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:26:22.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:26:22.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:26:24.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 25, 46), 6.72, 62.45, 0.0, 32.11, 9.32, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:26:24.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:25:46
2026-02-14T22:26:24.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:26:25.130 [DEBUG] [Thread-193230] [transport.py] [_log()] starting thread (client mode): 0xa2d6c400
2026-02-14T22:26:25.131 [DEBUG] [Thread-193230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:26:25.151 [DEBUG] [Thread-193230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:26:25.151 [INFO] [Thread-193230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:26:25.154 [DEBUG] [Thread-193230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:26:25.154 [DEBUG] [Thread-193230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:26:25.154 [DEBUG] [Thread-193230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:26:25.154 [DEBUG] [Thread-193230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:26:25.154 [DEBUG] [Thread-193230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:26:25.154 [DEBUG] [Thread-193230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:26:25.154 [DEBUG] [Thread-193230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:26:25.154 [DEBUG] [Thread-193230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:26:25.154 [DEBUG] [Thread-193230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:26:25.154 [DEBUG] [Thread-193230] [transport.py] [_log()] client lang: <none>
2026-02-14T22:26:25.154 [DEBUG] [Thread-193230] [transport.py] [_log()] server lang: <none>
2026-02-14T22:26:25.154 [DEBUG] [Thread-193230] [transport.py] [_log()] kex follows: False
2026-02-14T22:26:25.154 [DEBUG] [Thread-193230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:26:25.154 [DEBUG] [Thread-193230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:26:25.154 [DEBUG] [Thread-193230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:26:25.154 [DEBUG] [Thread-193230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:26:25.154 [DEBUG] [Thread-193230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:26:25.154 [DEBUG] [Thread-193230] [transport.py] [_log()] Compression: none
2026-02-14T22:26:25.154 [DEBUG] [Thread-193230] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:26:25.172 [DEBUG] [Thread-193230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:26:25.172 [DEBUG] [Thread-193230] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:26:25.173 [DEBUG] [Thread-193230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:26:25.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:26:25.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:26:25.175 [DEBUG] [Thread-193230] [transport.py] [_log()] userauth is OK
2026-02-14T22:26:25.176 [DEBUG] [Thread-193230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:26:25.176 [DEBUG] [Thread-193230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:26:25.176 [DEBUG] [Thread-193230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:26:25.176 [DEBUG] [Thread-193230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:26:25.201 [INFO] [Thread-193230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:26:25.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:26:25.475 [DEBUG] [Thread-193232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:26:25.835 [DEBUG] [Thread-193230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:26:25.835 [DEBUG] [Thread-193230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:26:25.836 [DEBUG] [Thread-193230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:26:25.876 [DEBUG] [Thread-193230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:26:25.876 [DEBUG] [Thread-193230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:26:25.879 [DEBUG] [Thread-193230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:26:25.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:26:25.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:26:25.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:26:25.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:26:25.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:26:25.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:26:25.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:26:25.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:26:25.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:26:25.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.851154 -999.00   +9.20  23.06     67   +3.60 1 1 1 1 1     0    0 5.17 -22.54 ZNESW 26.8 23.1 164.6 33.1 9.7 -25.2 9.6 -24.1 9.3 -23.1 9.7 -24.3
2026-02-14T22:26:25.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:26:25.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:26:25.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.851154
2026-02-14T22:26:25.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:26:25.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:26:25.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:26:25.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:26:25.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:26:25.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:25:46', tmtdew=6.72, humidity=62.45, cloud=0.0, wind=32.11, temperature=9.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:26:22', seeing=3.18, atlas_timestamp='2026-02-14T20:25:39.706', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.056750000000000966, 0.006249999999999645, -0.011499999999999844, 0.05250000000000021, 0.0002500000000011937, -0.0030000000000001137, 0.011250000000000426, 0.04049999999999976, -0.007999999999999119, -0.013750000000001705, -0.0009999999999994458, 0.045999999999999375, -0.003750000000000142, 0.009499999999999176, 0.024499999999999744, 0.06574999999999953, 0.07099999999999973, -0.038000000000000256, -0.014750000000001151, 0.08099999999999952, 0.057749999999998636, 0.0027500000000006963, 0.021750000000000824, 0.04049999999999976, 0.07350000000000101, 0.004749999999999588, -0.01249999999999929, 0.07399999999999984, 0.030000000000001137, 0.05700000000000216, 0.05600000000000094, 0.034250000000000114], zp_timestamp='2026-02-14T20:22:00')
2026-02-14T22:26:25.907 [DEBUG] [Thread-193230] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:26:25.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-14T22:26:26.000 [DEBUG] [Thread-193234] [transport.py] [_log()] starting thread (client mode): 0xa57d4190
2026-02-14T22:26:26.000 [DEBUG] [Thread-193234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:26:26.014 [DEBUG] [Thread-193234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:26:26.014 [INFO] [Thread-193234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:26:26.022 [DEBUG] [Thread-193234] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:26:26.022 [DEBUG] [Thread-193234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:26:26.023 [DEBUG] [Thread-193234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:26:26.023 [DEBUG] [Thread-193234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:26:26.023 [DEBUG] [Thread-193234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:26:26.023 [DEBUG] [Thread-193234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:26:26.023 [DEBUG] [Thread-193234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:26:26.023 [DEBUG] [Thread-193234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:26:26.023 [DEBUG] [Thread-193234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:26:26.023 [DEBUG] [Thread-193234] [transport.py] [_log()] client lang: <none>
2026-02-14T22:26:26.023 [DEBUG] [Thread-193234] [transport.py] [_log()] server lang: <none>
2026-02-14T22:26:26.023 [DEBUG] [Thread-193234] [transport.py] [_log()] kex follows: False
2026-02-14T22:26:26.023 [DEBUG] [Thread-193234] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:26:26.023 [DEBUG] [Thread-193234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:26:26.023 [DEBUG] [Thread-193234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:26:26.023 [DEBUG] [Thread-193234] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:26:26.023 [DEBUG] [Thread-193234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:26:26.023 [DEBUG] [Thread-193234] [transport.py] [_log()] Compression: none
2026-02-14T22:26:26.024 [DEBUG] [Thread-193234] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:26:26.080 [DEBUG] [Thread-193234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:26:26.081 [DEBUG] [Thread-193234] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:26:26.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:26:26.082 [DEBUG] [Thread-193234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:26:26.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:26:26.141 [DEBUG] [Thread-193234] [transport.py] [_log()] userauth is OK
2026-02-14T22:26:26.141 [DEBUG] [Thread-193234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:26:26.141 [DEBUG] [Thread-193234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:26:26.142 [DEBUG] [Thread-193234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:26:26.142 [DEBUG] [Thread-193234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:26:26.161 [INFO] [Thread-193234] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:26:26.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-14T22:26:26.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:26:26.987 [DEBUG] [Thread-193234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:26:26.987 [DEBUG] [Thread-193234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:26:27.035 [DEBUG] [Thread-193234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:26:27.036 [DEBUG] [Thread-193234] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:26:27.045 [DEBUG] [Thread-193234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:26:27.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:26:27.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-14T22:26:27.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-14T22:26:27.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:26:27.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:26:27.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:26:27.081 [DEBUG] [Thread-193234] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:26:40.517 [DEBUG] [Thread-193236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:26:55.216 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:26:55.217 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:26:55.572 [DEBUG] [Thread-193237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:26:57.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:26:57.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:26:57.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-14T22:26:59.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 26, 22), 6.72, 62.43, 0.0, 34.55, 9.32, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:26:59.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:26:22
2026-02-14T22:26:59.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:26:59.662 [DEBUG] [Thread-193238] [transport.py] [_log()] starting thread (client mode): 0xa2d183d0
2026-02-14T22:26:59.663 [DEBUG] [Thread-193238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:26:59.683 [DEBUG] [Thread-193238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:26:59.683 [INFO] [Thread-193238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:26:59.684 [DEBUG] [Thread-193238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:26:59.684 [DEBUG] [Thread-193238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:26:59.684 [DEBUG] [Thread-193238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:26:59.684 [DEBUG] [Thread-193238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:26:59.685 [DEBUG] [Thread-193238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:26:59.685 [DEBUG] [Thread-193238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:26:59.685 [DEBUG] [Thread-193238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:26:59.685 [DEBUG] [Thread-193238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:26:59.685 [DEBUG] [Thread-193238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:26:59.685 [DEBUG] [Thread-193238] [transport.py] [_log()] client lang: <none>
2026-02-14T22:26:59.685 [DEBUG] [Thread-193238] [transport.py] [_log()] server lang: <none>
2026-02-14T22:26:59.685 [DEBUG] [Thread-193238] [transport.py] [_log()] kex follows: False
2026-02-14T22:26:59.685 [DEBUG] [Thread-193238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:26:59.685 [DEBUG] [Thread-193238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:26:59.685 [DEBUG] [Thread-193238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:26:59.685 [DEBUG] [Thread-193238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:26:59.685 [DEBUG] [Thread-193238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:26:59.686 [DEBUG] [Thread-193238] [transport.py] [_log()] Compression: none
2026-02-14T22:26:59.686 [DEBUG] [Thread-193238] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:26:59.706 [DEBUG] [Thread-193238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:26:59.707 [DEBUG] [Thread-193238] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:26:59.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:26:59.709 [DEBUG] [Thread-193238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:26:59.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:26:59.711 [DEBUG] [Thread-193238] [transport.py] [_log()] userauth is OK
2026-02-14T22:26:59.712 [DEBUG] [Thread-193238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:26:59.712 [DEBUG] [Thread-193238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:26:59.712 [DEBUG] [Thread-193238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:26:59.712 [DEBUG] [Thread-193238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:26:59.735 [INFO] [Thread-193238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:26:59.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:27:00.358 [DEBUG] [Thread-193238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:27:00.358 [DEBUG] [Thread-193238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:27:00.358 [DEBUG] [Thread-193238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:27:00.399 [DEBUG] [Thread-193238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:27:00.399 [DEBUG] [Thread-193238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:27:00.403 [DEBUG] [Thread-193238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:27:00.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:27:00.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:27:00.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:27:00.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:27:00.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:27:00.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:27:00.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:27:00.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:27:00.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:27:00.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.851501 -999.00   +9.20  24.81     67   +3.60 1 1 1 1 1     0    0 5.06 -22.44 ZNESW 25.0 24.8 159.0 32.6 9.7 -25.2 9.5 -24.1 9.3 -23.2 9.7 -24.3
2026-02-14T22:27:00.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:27:00.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:27:00.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.851501
2026-02-14T22:27:00.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:27:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:27:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:27:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:27:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:27:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:26:22', tmtdew=6.72, humidity=62.43, cloud=0.0, wind=34.55, temperature=9.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:26:22', seeing=3.18, atlas_timestamp='2026-02-14T20:26:09.686', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00975000000000037, -0.011250000000000426, 0.03325000000000067, -0.005500000000001393, 0.05649999999999977, 0.006250000000001421, -0.009000000000000341, 0.02325000000000088, 0.06099999999999994, 0.0039999999999995595, -0.04124999999999979, 0.010499999999998622, 0.05900000000000105, 0.02275000000000027, 0.004999999999999005, 0.03200000000000003, 0.0677500000000002, 0.05149999999999899, -0.0024999999999995026, 0.018749999999998934, 0.0779999999999994, 0.03874999999999851, -0.013749999999999929, 0.03775000000000084, 0.06300000000000061, 0.08750000000000036, 0.008250000000000313, 0.011000000000001009, 0.0990000000000002, 0.005500000000001393, 0.036000000000001364, 0.07000000000000028, 0.04774999999999885], zp_timestamp='2026-02-14T20:25:00')
2026-02-14T22:27:00.429 [DEBUG] [Thread-193238] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:27:00.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:27:00.527 [DEBUG] [Thread-193241] [transport.py] [_log()] starting thread (client mode): 0xa2d7bfd0
2026-02-14T22:27:00.527 [DEBUG] [Thread-193241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:27:00.542 [DEBUG] [Thread-193241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:27:00.542 [INFO] [Thread-193241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:27:00.550 [DEBUG] [Thread-193241] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:27:00.550 [DEBUG] [Thread-193241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:27:00.550 [DEBUG] [Thread-193241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:27:00.550 [DEBUG] [Thread-193241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:27:00.550 [DEBUG] [Thread-193241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:27:00.550 [DEBUG] [Thread-193241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:27:00.550 [DEBUG] [Thread-193241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:27:00.550 [DEBUG] [Thread-193241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:27:00.550 [DEBUG] [Thread-193241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:27:00.550 [DEBUG] [Thread-193241] [transport.py] [_log()] client lang: <none>
2026-02-14T22:27:00.550 [DEBUG] [Thread-193241] [transport.py] [_log()] server lang: <none>
2026-02-14T22:27:00.550 [DEBUG] [Thread-193241] [transport.py] [_log()] kex follows: False
2026-02-14T22:27:00.550 [DEBUG] [Thread-193241] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:27:00.550 [DEBUG] [Thread-193241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:27:00.550 [DEBUG] [Thread-193241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:27:00.550 [DEBUG] [Thread-193241] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:27:00.550 [DEBUG] [Thread-193241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:27:00.550 [DEBUG] [Thread-193241] [transport.py] [_log()] Compression: none
2026-02-14T22:27:00.550 [DEBUG] [Thread-193241] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:27:00.608 [DEBUG] [Thread-193241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:27:00.609 [DEBUG] [Thread-193241] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:27:00.609 [DEBUG] [Thread-193241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:27:00.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:27:00.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:27:00.664 [DEBUG] [Thread-193241] [transport.py] [_log()] userauth is OK
2026-02-14T22:27:00.664 [DEBUG] [Thread-193241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:27:00.665 [DEBUG] [Thread-193241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:27:00.665 [DEBUG] [Thread-193241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:27:00.665 [DEBUG] [Thread-193241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:27:00.684 [INFO] [Thread-193241] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:27:00.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-14T22:27:00.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:27:01.164 [DEBUG] [Thread-193243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:27:01.486 [DEBUG] [Thread-193241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:27:01.487 [DEBUG] [Thread-193241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:27:01.535 [DEBUG] [Thread-193241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:27:01.535 [DEBUG] [Thread-193241] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:27:01.543 [DEBUG] [Thread-193241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:27:01.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:27:01.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-14T22:27:01.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-14T22:27:01.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:27:01.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:27:01.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:27:01.579 [DEBUG] [Thread-193241] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:27:10.610 [DEBUG] [Thread-193244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:27:25.668 [DEBUG] [Thread-193245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:27:31.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:27:31.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:27:31.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-14T22:27:33.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 26, 57), 6.82, 62.45, 0.0, 32.27, 9.37, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:27:33.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:26:57
2026-02-14T22:27:33.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:27:34.131 [DEBUG] [Thread-193246] [transport.py] [_log()] starting thread (client mode): 0xa2d6cb80
2026-02-14T22:27:34.131 [DEBUG] [Thread-193246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:27:34.149 [DEBUG] [Thread-193246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:27:34.149 [INFO] [Thread-193246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:27:34.153 [DEBUG] [Thread-193246] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:27:34.153 [DEBUG] [Thread-193246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:27:34.153 [DEBUG] [Thread-193246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:27:34.153 [DEBUG] [Thread-193246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:27:34.153 [DEBUG] [Thread-193246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:27:34.153 [DEBUG] [Thread-193246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:27:34.153 [DEBUG] [Thread-193246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:27:34.153 [DEBUG] [Thread-193246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:27:34.153 [DEBUG] [Thread-193246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:27:34.153 [DEBUG] [Thread-193246] [transport.py] [_log()] client lang: <none>
2026-02-14T22:27:34.153 [DEBUG] [Thread-193246] [transport.py] [_log()] server lang: <none>
2026-02-14T22:27:34.153 [DEBUG] [Thread-193246] [transport.py] [_log()] kex follows: False
2026-02-14T22:27:34.153 [DEBUG] [Thread-193246] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:27:34.153 [DEBUG] [Thread-193246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:27:34.153 [DEBUG] [Thread-193246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:27:34.153 [DEBUG] [Thread-193246] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:27:34.154 [DEBUG] [Thread-193246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:27:34.154 [DEBUG] [Thread-193246] [transport.py] [_log()] Compression: none
2026-02-14T22:27:34.154 [DEBUG] [Thread-193246] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:27:34.173 [DEBUG] [Thread-193246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:27:34.174 [DEBUG] [Thread-193246] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:27:34.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:27:34.175 [DEBUG] [Thread-193246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:27:34.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:27:34.177 [DEBUG] [Thread-193246] [transport.py] [_log()] userauth is OK
2026-02-14T22:27:34.177 [DEBUG] [Thread-193246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:27:34.177 [DEBUG] [Thread-193246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:27:34.177 [DEBUG] [Thread-193246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:27:34.177 [DEBUG] [Thread-193246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:27:34.192 [INFO] [Thread-193246] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:27:34.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:27:34.820 [DEBUG] [Thread-193246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:27:34.820 [DEBUG] [Thread-193246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:27:34.820 [DEBUG] [Thread-193246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:27:34.860 [DEBUG] [Thread-193246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:27:34.861 [DEBUG] [Thread-193246] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:27:34.864 [DEBUG] [Thread-193246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:27:34.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:27:34.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:27:34.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:27:34.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:27:34.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:27:34.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:27:34.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:27:34.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:27:34.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:27:34.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.851848 -999.00   +9.20  27.08     67   +3.60 1 1 1 1 1     0    0 5.18 -20.57 ZNESW 22.3 27.1 168.8 33.7 9.7 -25.2 9.5 -24.0 9.3 -23.2 9.7 -24.3
2026-02-14T22:27:34.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:27:34.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:27:34.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.851848
2026-02-14T22:27:34.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:27:34.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:27:34.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:27:34.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:27:34.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:27:34.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:26:57', tmtdew=6.82, humidity=62.45, cloud=0.0, wind=32.27, temperature=9.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:26:57', seeing=2.8, atlas_timestamp='2026-02-14T20:26:39.667', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00975000000000037, -0.011250000000000426, 0.03325000000000067, -0.005500000000001393, 0.05649999999999977, 0.006250000000001421, -0.009000000000000341, 0.02325000000000088, 0.06099999999999994, 0.0039999999999995595, -0.04124999999999979, 0.010499999999998622, 0.05900000000000105, 0.02275000000000027, 0.004999999999999005, 0.03200000000000003, 0.0677500000000002, 0.05149999999999899, -0.0024999999999995026, 0.018749999999998934, 0.0779999999999994, 0.03874999999999851, -0.013749999999999929, 0.03775000000000084, 0.06300000000000061, 0.08750000000000036, 0.008250000000000313, 0.011000000000001009, 0.0990000000000002, 0.005500000000001393, 0.036000000000001364, 0.07000000000000028, 0.04774999999999885], zp_timestamp='2026-02-14T20:25:00')
2026-02-14T22:27:34.892 [DEBUG] [Thread-193246] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:27:34.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-14T22:27:34.984 [DEBUG] [Thread-193249] [transport.py] [_log()] starting thread (client mode): 0xa2d199c0
2026-02-14T22:27:34.984 [DEBUG] [Thread-193249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:27:34.999 [DEBUG] [Thread-193249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:27:34.999 [INFO] [Thread-193249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:27:35.006 [DEBUG] [Thread-193249] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:27:35.007 [DEBUG] [Thread-193249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:27:35.007 [DEBUG] [Thread-193249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:27:35.007 [DEBUG] [Thread-193249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:27:35.007 [DEBUG] [Thread-193249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:27:35.007 [DEBUG] [Thread-193249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:27:35.007 [DEBUG] [Thread-193249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:27:35.007 [DEBUG] [Thread-193249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:27:35.007 [DEBUG] [Thread-193249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:27:35.007 [DEBUG] [Thread-193249] [transport.py] [_log()] client lang: <none>
2026-02-14T22:27:35.007 [DEBUG] [Thread-193249] [transport.py] [_log()] server lang: <none>
2026-02-14T22:27:35.007 [DEBUG] [Thread-193249] [transport.py] [_log()] kex follows: False
2026-02-14T22:27:35.007 [DEBUG] [Thread-193249] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:27:35.007 [DEBUG] [Thread-193249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:27:35.007 [DEBUG] [Thread-193249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:27:35.007 [DEBUG] [Thread-193249] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:27:35.007 [DEBUG] [Thread-193249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:27:35.007 [DEBUG] [Thread-193249] [transport.py] [_log()] Compression: none
2026-02-14T22:27:35.007 [DEBUG] [Thread-193249] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:27:35.064 [DEBUG] [Thread-193249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:27:35.065 [DEBUG] [Thread-193249] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:27:35.065 [DEBUG] [Thread-193249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:27:35.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:27:35.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:27:35.120 [DEBUG] [Thread-193249] [transport.py] [_log()] userauth is OK
2026-02-14T22:27:35.121 [DEBUG] [Thread-193249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:27:35.121 [DEBUG] [Thread-193249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:27:35.121 [DEBUG] [Thread-193249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:27:35.121 [DEBUG] [Thread-193249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:27:35.140 [INFO] [Thread-193249] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:27:35.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-14T22:27:35.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:27:35.951 [DEBUG] [Thread-193249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:27:35.952 [DEBUG] [Thread-193249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:27:35.999 [DEBUG] [Thread-193249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:27:36.000 [DEBUG] [Thread-193249] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:27:36.009 [DEBUG] [Thread-193249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:27:36.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:27:36.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-14T22:27:36.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-14T22:27:36.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:27:36.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:27:36.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:27:36.046 [DEBUG] [Thread-193249] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:27:38.276 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:27:40.705 [DEBUG] [Thread-193251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:27:55.415 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:27:55.416 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:27:55.756 [DEBUG] [Thread-193252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:28:01.232 [DEBUG] [Thread-193253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:28:06.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:28:06.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:28:06.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-14T22:28:08.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 27, 32), 6.81, 62.5, 0.0, 32.92, 9.39, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:28:08.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:27:32
2026-02-14T22:28:08.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:28:08.631 [DEBUG] [Thread-193254] [transport.py] [_log()] starting thread (client mode): 0xa2d7b010
2026-02-14T22:28:08.631 [DEBUG] [Thread-193254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:28:08.652 [DEBUG] [Thread-193254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:28:08.652 [INFO] [Thread-193254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:28:08.655 [DEBUG] [Thread-193254] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:28:08.656 [DEBUG] [Thread-193254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:28:08.656 [DEBUG] [Thread-193254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:28:08.656 [DEBUG] [Thread-193254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:28:08.656 [DEBUG] [Thread-193254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:28:08.656 [DEBUG] [Thread-193254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:28:08.656 [DEBUG] [Thread-193254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:28:08.656 [DEBUG] [Thread-193254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:28:08.656 [DEBUG] [Thread-193254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:28:08.656 [DEBUG] [Thread-193254] [transport.py] [_log()] client lang: <none>
2026-02-14T22:28:08.656 [DEBUG] [Thread-193254] [transport.py] [_log()] server lang: <none>
2026-02-14T22:28:08.656 [DEBUG] [Thread-193254] [transport.py] [_log()] kex follows: False
2026-02-14T22:28:08.656 [DEBUG] [Thread-193254] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:28:08.656 [DEBUG] [Thread-193254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:28:08.656 [DEBUG] [Thread-193254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:28:08.656 [DEBUG] [Thread-193254] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:28:08.656 [DEBUG] [Thread-193254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:28:08.656 [DEBUG] [Thread-193254] [transport.py] [_log()] Compression: none
2026-02-14T22:28:08.656 [DEBUG] [Thread-193254] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:28:08.675 [DEBUG] [Thread-193254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:28:08.675 [DEBUG] [Thread-193254] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:28:08.676 [DEBUG] [Thread-193254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:28:08.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:28:08.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:28:08.678 [DEBUG] [Thread-193254] [transport.py] [_log()] userauth is OK
2026-02-14T22:28:08.678 [DEBUG] [Thread-193254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:28:08.678 [DEBUG] [Thread-193254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:28:08.679 [DEBUG] [Thread-193254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:28:08.679 [DEBUG] [Thread-193254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:28:08.697 [INFO] [Thread-193254] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:28:08.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:28:09.433 [DEBUG] [Thread-193254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:28:09.434 [DEBUG] [Thread-193254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:28:09.434 [DEBUG] [Thread-193254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:28:09.474 [DEBUG] [Thread-193254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:28:09.475 [DEBUG] [Thread-193254] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:28:09.477 [DEBUG] [Thread-193254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:28:09.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:28:09.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:28:09.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:28:09.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:28:09.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:28:09.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:28:09.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:28:09.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:28:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:28:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.852195 -999.00   +9.20  32.12     67   +3.60 1 1 2 1 1     0    0 5.10 -22.31 ZNESW 24.8 32.1 154.2 37.7 9.7 -25.1 9.5 -24.1 9.3 -23.1 9.7 -24.3
2026-02-14T22:28:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:28:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:28:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.852195
2026-02-14T22:28:09.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:28:09.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:28:09.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:28:09.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:28:09.504 [DEBUG] [Thread-193254] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:28:09.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:28:09.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:27:32', tmtdew=6.81, humidity=62.5, cloud=0.0, wind=32.92, temperature=9.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:27:33', seeing=3.09, atlas_timestamp='2026-02-14T20:27:09.648', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00975000000000037, -0.011250000000000426, 0.03325000000000067, -0.005500000000001393, 0.05649999999999977, 0.006250000000001421, -0.009000000000000341, 0.02325000000000088, 0.06099999999999994, 0.0039999999999995595, -0.04124999999999979, 0.010499999999998622, 0.05900000000000105, 0.02275000000000027, 0.004999999999999005, 0.03200000000000003, 0.0677500000000002, 0.05149999999999899, -0.0024999999999995026, 0.018749999999998934, 0.0779999999999994, 0.03874999999999851, -0.013749999999999929, 0.03775000000000084, 0.06300000000000061, 0.08750000000000036, 0.008250000000000313, 0.011000000000001009, 0.0990000000000002, 0.005500000000001393, 0.036000000000001364, 0.07000000000000028, 0.04774999999999885], zp_timestamp='2026-02-14T20:25:00')
2026-02-14T22:28:09.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-14T22:28:09.596 [DEBUG] [Thread-193257] [transport.py] [_log()] starting thread (client mode): 0xa57d7130
2026-02-14T22:28:09.596 [DEBUG] [Thread-193257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:28:09.611 [DEBUG] [Thread-193257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:28:09.611 [INFO] [Thread-193257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:28:09.618 [DEBUG] [Thread-193257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:28:09.619 [DEBUG] [Thread-193257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:28:09.619 [DEBUG] [Thread-193257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:28:09.619 [DEBUG] [Thread-193257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:28:09.619 [DEBUG] [Thread-193257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:28:09.619 [DEBUG] [Thread-193257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:28:09.619 [DEBUG] [Thread-193257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:28:09.619 [DEBUG] [Thread-193257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:28:09.619 [DEBUG] [Thread-193257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:28:09.619 [DEBUG] [Thread-193257] [transport.py] [_log()] client lang: <none>
2026-02-14T22:28:09.619 [DEBUG] [Thread-193257] [transport.py] [_log()] server lang: <none>
2026-02-14T22:28:09.619 [DEBUG] [Thread-193257] [transport.py] [_log()] kex follows: False
2026-02-14T22:28:09.619 [DEBUG] [Thread-193257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:28:09.620 [DEBUG] [Thread-193257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:28:09.620 [DEBUG] [Thread-193257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:28:09.620 [DEBUG] [Thread-193257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:28:09.620 [DEBUG] [Thread-193257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:28:09.620 [DEBUG] [Thread-193257] [transport.py] [_log()] Compression: none
2026-02-14T22:28:09.620 [DEBUG] [Thread-193257] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:28:09.676 [DEBUG] [Thread-193257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:28:09.677 [DEBUG] [Thread-193257] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:28:09.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:28:09.678 [DEBUG] [Thread-193257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:28:09.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:28:09.732 [DEBUG] [Thread-193257] [transport.py] [_log()] userauth is OK
2026-02-14T22:28:09.733 [DEBUG] [Thread-193257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:28:09.733 [DEBUG] [Thread-193257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:28:09.733 [DEBUG] [Thread-193257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:28:09.733 [DEBUG] [Thread-193257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:28:09.752 [INFO] [Thread-193257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:28:09.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:28:09.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:28:10.582 [DEBUG] [Thread-193257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:28:10.583 [DEBUG] [Thread-193257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:28:10.630 [DEBUG] [Thread-193257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:28:10.630 [DEBUG] [Thread-193257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:28:10.639 [DEBUG] [Thread-193257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:28:10.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:28:10.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-14T22:28:10.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-14T22:28:10.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:28:10.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:28:10.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:28:10.672 [DEBUG] [Thread-193257] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:28:10.793 [DEBUG] [Thread-193259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:28:25.852 [DEBUG] [Thread-193260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:28:40.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:28:40.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:28:40.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-14T22:28:40.887 [DEBUG] [Thread-193261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:28:42.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 28, 7), 6.8, 62.51, 0.0, 34.9, 9.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:28:42.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:28:07
2026-02-14T22:28:43.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:28:43.191 [DEBUG] [Thread-193262] [transport.py] [_log()] starting thread (client mode): 0xa2d1a290
2026-02-14T22:28:43.191 [DEBUG] [Thread-193262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:28:43.206 [DEBUG] [Thread-193262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:28:43.206 [INFO] [Thread-193262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:28:43.208 [DEBUG] [Thread-193262] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:28:43.208 [DEBUG] [Thread-193262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:28:43.208 [DEBUG] [Thread-193262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:28:43.208 [DEBUG] [Thread-193262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:28:43.208 [DEBUG] [Thread-193262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:28:43.208 [DEBUG] [Thread-193262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:28:43.208 [DEBUG] [Thread-193262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:28:43.208 [DEBUG] [Thread-193262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:28:43.208 [DEBUG] [Thread-193262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:28:43.208 [DEBUG] [Thread-193262] [transport.py] [_log()] client lang: <none>
2026-02-14T22:28:43.208 [DEBUG] [Thread-193262] [transport.py] [_log()] server lang: <none>
2026-02-14T22:28:43.209 [DEBUG] [Thread-193262] [transport.py] [_log()] kex follows: False
2026-02-14T22:28:43.209 [DEBUG] [Thread-193262] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:28:43.209 [DEBUG] [Thread-193262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:28:43.209 [DEBUG] [Thread-193262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:28:43.209 [DEBUG] [Thread-193262] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:28:43.209 [DEBUG] [Thread-193262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:28:43.209 [DEBUG] [Thread-193262] [transport.py] [_log()] Compression: none
2026-02-14T22:28:43.209 [DEBUG] [Thread-193262] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:28:43.224 [DEBUG] [Thread-193262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:28:43.224 [DEBUG] [Thread-193262] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:28:43.224 [DEBUG] [Thread-193262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:28:43.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:28:43.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:28:43.226 [DEBUG] [Thread-193262] [transport.py] [_log()] userauth is OK
2026-02-14T22:28:43.226 [DEBUG] [Thread-193262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:28:43.226 [DEBUG] [Thread-193262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:28:43.227 [DEBUG] [Thread-193262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:28:43.227 [DEBUG] [Thread-193262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:28:43.251 [INFO] [Thread-193262] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:28:43.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:28:43.904 [DEBUG] [Thread-193262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:28:43.904 [DEBUG] [Thread-193262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:28:43.904 [DEBUG] [Thread-193262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:28:43.945 [DEBUG] [Thread-193262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:28:43.946 [DEBUG] [Thread-193262] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:28:43.949 [DEBUG] [Thread-193262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:28:43.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:28:43.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:28:43.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:28:43.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:28:43.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:28:43.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:28:43.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:28:43.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:28:43.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:28:43.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.852543 -999.00   +9.30  34.76     67   +3.60 1 1 2 1 1     0    0 5.17 -20.95 ZNESW 28.2 34.8 144.5 39.7 9.7 -25.1 9.5 -24.1 9.3 -23.2 9.7 -24.4
2026-02-14T22:28:43.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:28:43.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:28:43.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.852543
2026-02-14T22:28:43.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:28:43.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:28:43.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:28:43.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:28:43.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:28:43.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:28:07', tmtdew=6.8, humidity=62.51, cloud=0.0, wind=34.9, temperature=9.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:28:08', seeing=3.09, atlas_timestamp='2026-02-14T20:27:39.715', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00975000000000037, -0.011250000000000426, 0.03325000000000067, -0.005500000000001393, 0.05649999999999977, 0.006250000000001421, -0.009000000000000341, 0.02325000000000088, 0.06099999999999994, 0.0039999999999995595, -0.04124999999999979, 0.010499999999998622, 0.05900000000000105, 0.02275000000000027, 0.004999999999999005, 0.03200000000000003, 0.0677500000000002, 0.05149999999999899, -0.0024999999999995026, 0.018749999999998934, 0.0779999999999994, 0.03874999999999851, -0.013749999999999929, 0.03775000000000084, 0.06300000000000061, 0.08750000000000036, 0.008250000000000313, 0.011000000000001009, 0.0990000000000002, 0.005500000000001393, 0.036000000000001364, 0.07000000000000028, 0.04774999999999885], zp_timestamp='2026-02-14T20:25:00')
2026-02-14T22:28:43.977 [DEBUG] [Thread-193262] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:28:44.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-14T22:28:44.072 [DEBUG] [Thread-193265] [transport.py] [_log()] starting thread (client mode): 0xa2d6cb80
2026-02-14T22:28:44.072 [DEBUG] [Thread-193265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:28:44.087 [DEBUG] [Thread-193265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:28:44.087 [INFO] [Thread-193265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:28:44.095 [DEBUG] [Thread-193265] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:28:44.095 [DEBUG] [Thread-193265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:28:44.095 [DEBUG] [Thread-193265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:28:44.095 [DEBUG] [Thread-193265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:28:44.095 [DEBUG] [Thread-193265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:28:44.095 [DEBUG] [Thread-193265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:28:44.095 [DEBUG] [Thread-193265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:28:44.095 [DEBUG] [Thread-193265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:28:44.095 [DEBUG] [Thread-193265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:28:44.095 [DEBUG] [Thread-193265] [transport.py] [_log()] client lang: <none>
2026-02-14T22:28:44.095 [DEBUG] [Thread-193265] [transport.py] [_log()] server lang: <none>
2026-02-14T22:28:44.095 [DEBUG] [Thread-193265] [transport.py] [_log()] kex follows: False
2026-02-14T22:28:44.095 [DEBUG] [Thread-193265] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:28:44.096 [DEBUG] [Thread-193265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:28:44.096 [DEBUG] [Thread-193265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:28:44.096 [DEBUG] [Thread-193265] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:28:44.096 [DEBUG] [Thread-193265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:28:44.096 [DEBUG] [Thread-193265] [transport.py] [_log()] Compression: none
2026-02-14T22:28:44.096 [DEBUG] [Thread-193265] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:28:44.151 [DEBUG] [Thread-193265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:28:44.151 [DEBUG] [Thread-193265] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:28:44.151 [DEBUG] [Thread-193265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:28:44.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:28:44.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:28:44.209 [DEBUG] [Thread-193265] [transport.py] [_log()] userauth is OK
2026-02-14T22:28:44.209 [DEBUG] [Thread-193265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:28:44.210 [DEBUG] [Thread-193265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:28:44.210 [DEBUG] [Thread-193265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:28:44.210 [DEBUG] [Thread-193265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:28:44.229 [INFO] [Thread-193265] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:28:44.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:28:44.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:28:45.051 [DEBUG] [Thread-193265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:28:45.052 [DEBUG] [Thread-193265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:28:45.099 [DEBUG] [Thread-193265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:28:45.099 [DEBUG] [Thread-193265] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:28:45.108 [DEBUG] [Thread-193265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:28:45.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:28:45.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:28:45.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-14T22:28:45.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:28:45.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:28:45.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:28:45.142 [DEBUG] [Thread-193265] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:28:55.616 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:28:55.617 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:28:55.924 [DEBUG] [Thread-193267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:29:01.300 [DEBUG] [Thread-193268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:29:10.987 [DEBUG] [Thread-193269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:29:11.707 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:29:15.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:29:15.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:29: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-14T22:29:17.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 28, 43), 6.75, 62.51, 0.0, 35.02, 9.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:29:17.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:28:43
2026-02-14T22:29:17.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:29:17.528 [DEBUG] [Thread-193270] [transport.py] [_log()] starting thread (client mode): 0xa2d13eb0
2026-02-14T22:29:17.528 [DEBUG] [Thread-193270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:29:17.547 [DEBUG] [Thread-193270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:29:17.547 [INFO] [Thread-193270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:29:17.550 [DEBUG] [Thread-193270] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:29:17.550 [DEBUG] [Thread-193270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:29:17.550 [DEBUG] [Thread-193270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:29:17.550 [DEBUG] [Thread-193270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:29:17.550 [DEBUG] [Thread-193270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:29:17.550 [DEBUG] [Thread-193270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:29:17.550 [DEBUG] [Thread-193270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:29:17.550 [DEBUG] [Thread-193270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:29:17.550 [DEBUG] [Thread-193270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:29:17.550 [DEBUG] [Thread-193270] [transport.py] [_log()] client lang: <none>
2026-02-14T22:29:17.550 [DEBUG] [Thread-193270] [transport.py] [_log()] server lang: <none>
2026-02-14T22:29:17.550 [DEBUG] [Thread-193270] [transport.py] [_log()] kex follows: False
2026-02-14T22:29:17.550 [DEBUG] [Thread-193270] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:29:17.550 [DEBUG] [Thread-193270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:29:17.550 [DEBUG] [Thread-193270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:29:17.550 [DEBUG] [Thread-193270] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:29:17.550 [DEBUG] [Thread-193270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:29:17.550 [DEBUG] [Thread-193270] [transport.py] [_log()] Compression: none
2026-02-14T22:29:17.550 [DEBUG] [Thread-193270] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:29:17.558 [DEBUG] [Thread-193270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:29:17.558 [DEBUG] [Thread-193270] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:29:17.559 [DEBUG] [Thread-193270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:29:17.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:29:17.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:29:17.560 [DEBUG] [Thread-193270] [transport.py] [_log()] userauth is OK
2026-02-14T22:29:17.560 [DEBUG] [Thread-193270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:29:17.560 [DEBUG] [Thread-193270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:29:17.560 [DEBUG] [Thread-193270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:29:17.560 [DEBUG] [Thread-193270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:29:17.571 [INFO] [Thread-193270] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:29:17.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:29:18.247 [DEBUG] [Thread-193270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:29:18.247 [DEBUG] [Thread-193270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:29:18.247 [DEBUG] [Thread-193270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:29:18.288 [DEBUG] [Thread-193270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:29:18.289 [DEBUG] [Thread-193270] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:29:18.292 [DEBUG] [Thread-193270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:29:18.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:29:18.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:29:18.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:29:18.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:29:18.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:29:18.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:29:18.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:29:18.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:29:18.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:29:18.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.853237 -999.00   +9.30  22.53     67   +3.60 1 1 1 1 1     0    0 5.13 -20.20 ZNESW 22.7 22.5 160.6 33.3 9.7 -25.1 9.5 -24.0 9.3 -23.1 9.7 -24.3
2026-02-14T22:29:18.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:29:18.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:29:18.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.853237
2026-02-14T22:29:18.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:29:18.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:29:18.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:29:18.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:29:18.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:29:18.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:28:43', tmtdew=6.75, humidity=62.51, cloud=0.0, wind=35.02, temperature=9.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:28:43', seeing=2.48, atlas_timestamp='2026-02-14T20:28:39.677', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00975000000000037, -0.011250000000000426, 0.03325000000000067, -0.005500000000001393, 0.05649999999999977, 0.006250000000001421, -0.009000000000000341, 0.02325000000000088, 0.06099999999999994, 0.0039999999999995595, -0.04124999999999979, 0.010499999999998622, 0.05900000000000105, 0.02275000000000027, 0.004999999999999005, 0.03200000000000003, 0.0677500000000002, 0.05149999999999899, -0.0024999999999995026, 0.018749999999998934, 0.0779999999999994, 0.03874999999999851, -0.013749999999999929, 0.03775000000000084, 0.06300000000000061, 0.08750000000000036, 0.008250000000000313, 0.011000000000001009, 0.0990000000000002, 0.005500000000001393, 0.036000000000001364, 0.07000000000000028, 0.04774999999999885], zp_timestamp='2026-02-14T20:25:00')
2026-02-14T22:29:18.318 [DEBUG] [Thread-193270] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:29:18.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-14T22:29:18.414 [DEBUG] [Thread-193273] [transport.py] [_log()] starting thread (client mode): 0xa2d79b40
2026-02-14T22:29:18.414 [DEBUG] [Thread-193273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:29:18.429 [DEBUG] [Thread-193273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:29:18.429 [INFO] [Thread-193273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:29:18.436 [DEBUG] [Thread-193273] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:29:18.436 [DEBUG] [Thread-193273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:29:18.436 [DEBUG] [Thread-193273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:29:18.436 [DEBUG] [Thread-193273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:29:18.436 [DEBUG] [Thread-193273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:29:18.437 [DEBUG] [Thread-193273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:29:18.437 [DEBUG] [Thread-193273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:29:18.437 [DEBUG] [Thread-193273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:29:18.437 [DEBUG] [Thread-193273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:29:18.437 [DEBUG] [Thread-193273] [transport.py] [_log()] client lang: <none>
2026-02-14T22:29:18.437 [DEBUG] [Thread-193273] [transport.py] [_log()] server lang: <none>
2026-02-14T22:29:18.437 [DEBUG] [Thread-193273] [transport.py] [_log()] kex follows: False
2026-02-14T22:29:18.437 [DEBUG] [Thread-193273] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:29:18.437 [DEBUG] [Thread-193273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:29:18.437 [DEBUG] [Thread-193273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:29:18.437 [DEBUG] [Thread-193273] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:29:18.437 [DEBUG] [Thread-193273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:29:18.437 [DEBUG] [Thread-193273] [transport.py] [_log()] Compression: none
2026-02-14T22:29:18.437 [DEBUG] [Thread-193273] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:29:18.497 [DEBUG] [Thread-193273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:29:18.497 [DEBUG] [Thread-193273] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:29:18.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:29:18.499 [DEBUG] [Thread-193273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:29:18.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:29:18.553 [DEBUG] [Thread-193273] [transport.py] [_log()] userauth is OK
2026-02-14T22:29:18.554 [DEBUG] [Thread-193273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:29:18.554 [DEBUG] [Thread-193273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:29:18.554 [DEBUG] [Thread-193273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:29:18.554 [DEBUG] [Thread-193273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:29:18.572 [INFO] [Thread-193273] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:29:18.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-14T22:29:18.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:29:19.368 [DEBUG] [Thread-193273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:29:19.369 [DEBUG] [Thread-193273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:29:19.416 [DEBUG] [Thread-193273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:29:19.417 [DEBUG] [Thread-193273] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:29:19.426 [DEBUG] [Thread-193273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:29:19.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:29:19.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-14T22:29:19.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-14T22:29:19.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:29:19.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:29:19.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:29:19.462 [DEBUG] [Thread-193273] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:29:26.024 [DEBUG] [Thread-193275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:29:41.074 [DEBUG] [Thread-193276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:29:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:29:49.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:29:49.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-14T22:29:51.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 29, 18), 6.75, 62.51, 0.0, 39.24, 9.27, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:29:51.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:29:18
2026-02-14T22:29:52.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:29:52.472 [DEBUG] [Thread-193277] [transport.py] [_log()] starting thread (client mode): 0xa2d18c40
2026-02-14T22:29:52.473 [DEBUG] [Thread-193277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:29:52.493 [DEBUG] [Thread-193277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:29:52.493 [INFO] [Thread-193277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:29:52.496 [DEBUG] [Thread-193277] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:29:52.496 [DEBUG] [Thread-193277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:29:52.496 [DEBUG] [Thread-193277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:29:52.496 [DEBUG] [Thread-193277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:29:52.496 [DEBUG] [Thread-193277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:29:52.496 [DEBUG] [Thread-193277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:29:52.496 [DEBUG] [Thread-193277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:29:52.496 [DEBUG] [Thread-193277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:29:52.496 [DEBUG] [Thread-193277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:29:52.496 [DEBUG] [Thread-193277] [transport.py] [_log()] client lang: <none>
2026-02-14T22:29:52.496 [DEBUG] [Thread-193277] [transport.py] [_log()] server lang: <none>
2026-02-14T22:29:52.496 [DEBUG] [Thread-193277] [transport.py] [_log()] kex follows: False
2026-02-14T22:29:52.496 [DEBUG] [Thread-193277] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:29:52.496 [DEBUG] [Thread-193277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:29:52.496 [DEBUG] [Thread-193277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:29:52.497 [DEBUG] [Thread-193277] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:29:52.497 [DEBUG] [Thread-193277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:29:52.497 [DEBUG] [Thread-193277] [transport.py] [_log()] Compression: none
2026-02-14T22:29:52.497 [DEBUG] [Thread-193277] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:29:52.513 [DEBUG] [Thread-193277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:29:52.513 [DEBUG] [Thread-193277] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:29:52.514 [DEBUG] [Thread-193277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:29:52.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:29:52.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:29:52.516 [DEBUG] [Thread-193277] [transport.py] [_log()] userauth is OK
2026-02-14T22:29:52.516 [DEBUG] [Thread-193277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:29:52.516 [DEBUG] [Thread-193277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:29:52.516 [DEBUG] [Thread-193277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:29:52.516 [DEBUG] [Thread-193277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:29:52.552 [INFO] [Thread-193277] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:29:52.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:29:53.190 [DEBUG] [Thread-193277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:29:53.190 [DEBUG] [Thread-193277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:29:53.190 [DEBUG] [Thread-193277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:29:53.232 [DEBUG] [Thread-193277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:29:53.232 [DEBUG] [Thread-193277] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:29:53.235 [DEBUG] [Thread-193277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:29:53.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:29:53.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:29:53.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:29:53.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:29:53.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:29:53.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:29:53.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:29:53.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:29:53.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:29:53.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.853584 -999.00   +9.30  26.42     67   +3.60 1 1 1 1 1     0    0 5.23 -19.13 ZNESW 23.9 26.4 162.4 39.7 9.7 -25.1 9.5 -24.1 9.3 -23.2 9.7 -24.3
2026-02-14T22:29:53.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:29:53.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:29:53.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.853584
2026-02-14T22:29:53.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:29:53.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:29:53.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:29:53.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:29:53.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:29:53.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:29:18', tmtdew=6.75, humidity=62.51, cloud=0.0, wind=39.24, temperature=9.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:29:18', seeing=2.84, atlas_timestamp='2026-02-14T20:29:09.658', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00975000000000037, -0.011250000000000426, 0.03325000000000067, -0.005500000000001393, 0.05649999999999977, 0.006250000000001421, -0.009000000000000341, 0.02325000000000088, 0.06099999999999994, 0.0039999999999995595, -0.04124999999999979, 0.010499999999998622, 0.05900000000000105, 0.02275000000000027, 0.004999999999999005, 0.03200000000000003, 0.0677500000000002, 0.05149999999999899, -0.0024999999999995026, 0.018749999999998934, 0.0779999999999994, 0.03874999999999851, -0.013749999999999929, 0.03775000000000084, 0.06300000000000061, 0.08750000000000036, 0.008250000000000313, 0.011000000000001009, 0.0990000000000002, 0.005500000000001393, 0.036000000000001364, 0.07000000000000028, 0.04774999999999885], zp_timestamp='2026-02-14T20:27:00')
2026-02-14T22:29:53.259 [DEBUG] [Thread-193277] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:29:53.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-14T22:29:53.363 [DEBUG] [Thread-193280] [transport.py] [_log()] starting thread (client mode): 0xa2d6fbe0
2026-02-14T22:29:53.363 [DEBUG] [Thread-193280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:29:53.377 [DEBUG] [Thread-193280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:29:53.377 [INFO] [Thread-193280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:29:53.384 [DEBUG] [Thread-193280] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:29:53.384 [DEBUG] [Thread-193280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:29:53.385 [DEBUG] [Thread-193280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:29:53.385 [DEBUG] [Thread-193280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:29:53.385 [DEBUG] [Thread-193280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:29:53.385 [DEBUG] [Thread-193280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:29:53.385 [DEBUG] [Thread-193280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:29:53.385 [DEBUG] [Thread-193280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:29:53.385 [DEBUG] [Thread-193280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:29:53.385 [DEBUG] [Thread-193280] [transport.py] [_log()] client lang: <none>
2026-02-14T22:29:53.385 [DEBUG] [Thread-193280] [transport.py] [_log()] server lang: <none>
2026-02-14T22:29:53.385 [DEBUG] [Thread-193280] [transport.py] [_log()] kex follows: False
2026-02-14T22:29:53.385 [DEBUG] [Thread-193280] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:29:53.385 [DEBUG] [Thread-193280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:29:53.385 [DEBUG] [Thread-193280] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:29:53.385 [DEBUG] [Thread-193280] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:29:53.385 [DEBUG] [Thread-193280] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:29:53.385 [DEBUG] [Thread-193280] [transport.py] [_log()] Compression: none
2026-02-14T22:29:53.385 [DEBUG] [Thread-193280] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:29:53.441 [DEBUG] [Thread-193280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:29:53.442 [DEBUG] [Thread-193280] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:29:53.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:29:53.444 [DEBUG] [Thread-193280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:29:53.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:29:53.497 [DEBUG] [Thread-193280] [transport.py] [_log()] userauth is OK
2026-02-14T22:29:53.498 [DEBUG] [Thread-193280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:29:53.498 [DEBUG] [Thread-193280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:29:53.498 [DEBUG] [Thread-193280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:29:53.498 [DEBUG] [Thread-193280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:29:53.517 [INFO] [Thread-193280] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:29:53.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-14T22:29:53.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:29:54.328 [DEBUG] [Thread-193280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:29:54.328 [DEBUG] [Thread-193280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:29:54.376 [DEBUG] [Thread-193280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:29:54.377 [DEBUG] [Thread-193280] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:29:54.386 [DEBUG] [Thread-193280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:29:54.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:29:54.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:29:54.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:29:54.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:29:54.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:29:54.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:29:54.426 [DEBUG] [Thread-193280] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:29:55.820 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:29:55.821 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:29:56.104 [DEBUG] [Thread-193282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:30:01.365 [DEBUG] [Thread-193283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:30:11.156 [DEBUG] [Thread-193284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:30:24.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:30:24.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:30:24.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-14T22:30:26.192 [DEBUG] [Thread-193285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:30:26.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 29, 53), 6.75, 62.53, 0.0, 37.72, 9.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:30:26.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:29:53
2026-02-14T22:30:27.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:30:27.585 [DEBUG] [Thread-193286] [transport.py] [_log()] starting thread (client mode): 0xa2d6dc00
2026-02-14T22:30:27.585 [DEBUG] [Thread-193286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:30:27.606 [DEBUG] [Thread-193286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:30:27.607 [INFO] [Thread-193286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:30:27.610 [DEBUG] [Thread-193286] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:30:27.610 [DEBUG] [Thread-193286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:30:27.610 [DEBUG] [Thread-193286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:30:27.610 [DEBUG] [Thread-193286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:30:27.610 [DEBUG] [Thread-193286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:30:27.610 [DEBUG] [Thread-193286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:30:27.610 [DEBUG] [Thread-193286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:30:27.610 [DEBUG] [Thread-193286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:30:27.610 [DEBUG] [Thread-193286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:30:27.610 [DEBUG] [Thread-193286] [transport.py] [_log()] client lang: <none>
2026-02-14T22:30:27.610 [DEBUG] [Thread-193286] [transport.py] [_log()] server lang: <none>
2026-02-14T22:30:27.610 [DEBUG] [Thread-193286] [transport.py] [_log()] kex follows: False
2026-02-14T22:30:27.610 [DEBUG] [Thread-193286] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:30:27.610 [DEBUG] [Thread-193286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:30:27.610 [DEBUG] [Thread-193286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:30:27.611 [DEBUG] [Thread-193286] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:30:27.611 [DEBUG] [Thread-193286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:30:27.611 [DEBUG] [Thread-193286] [transport.py] [_log()] Compression: none
2026-02-14T22:30:27.611 [DEBUG] [Thread-193286] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:30:27.629 [DEBUG] [Thread-193286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:30:27.630 [DEBUG] [Thread-193286] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:30:27.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:30:27.631 [DEBUG] [Thread-193286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:30:27.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:30:27.633 [DEBUG] [Thread-193286] [transport.py] [_log()] userauth is OK
2026-02-14T22:30:27.634 [DEBUG] [Thread-193286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:30:27.634 [DEBUG] [Thread-193286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:30:27.634 [DEBUG] [Thread-193286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:30:27.634 [DEBUG] [Thread-193286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:30:27.658 [INFO] [Thread-193286] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:30:27.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:30:28.460 [DEBUG] [Thread-193286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:30:28.460 [DEBUG] [Thread-193286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:30:28.460 [DEBUG] [Thread-193286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:30:28.501 [DEBUG] [Thread-193286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:30:28.501 [DEBUG] [Thread-193286] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:30:28.504 [DEBUG] [Thread-193286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:30:28.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:30:28.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:30:28.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:30:28.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:30:28.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:30:28.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:30:28.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:30:28.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:30:28.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:30:28.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.853931 -999.00   +9.20  27.47     67   +3.60 1 1 1 1 1     0    0 5.22 -18.25 ZNESW 27.1 27.5 155.9 32.4 9.7 -25.0 9.5 -24.0 9.3 -23.1 9.6 -24.2
2026-02-14T22:30:28.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:30:28.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:30:28.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.853931
2026-02-14T22:30:28.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:30:28.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:30:28.525 [DEBUG] [Thread-193286] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:30:28.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:30:28.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:30:28.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:30:28.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:29:53', tmtdew=6.75, humidity=62.53, cloud=0.0, wind=37.72, temperature=9.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:29:54', seeing=2.77, atlas_timestamp='2026-02-14T20:29:39.638', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00975000000000037, -0.011250000000000426, 0.03325000000000067, -0.005500000000001393, 0.05649999999999977, 0.006250000000001421, -0.009000000000000341, 0.02325000000000088, 0.06099999999999994, 0.0039999999999995595, -0.04124999999999979, 0.010499999999998622, 0.05900000000000105, 0.02275000000000027, 0.004999999999999005, 0.03200000000000003, 0.0677500000000002, 0.05149999999999899, -0.0024999999999995026, 0.018749999999998934, 0.0779999999999994, 0.03874999999999851, -0.013749999999999929, 0.03775000000000084, 0.06300000000000061, 0.08750000000000036, 0.008250000000000313, 0.011000000000001009, 0.0990000000000002, 0.005500000000001393, 0.036000000000001364, 0.07000000000000028, 0.04774999999999885], zp_timestamp='2026-02-14T20:27:00')
2026-02-14T22:30:28.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-14T22:30:28.622 [DEBUG] [Thread-193289] [transport.py] [_log()] starting thread (client mode): 0xa2d03be0
2026-02-14T22:30:28.622 [DEBUG] [Thread-193289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:30:28.636 [DEBUG] [Thread-193289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:30:28.637 [INFO] [Thread-193289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:30:28.644 [DEBUG] [Thread-193289] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:30:28.644 [DEBUG] [Thread-193289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:30:28.644 [DEBUG] [Thread-193289] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:30:28.644 [DEBUG] [Thread-193289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:30:28.644 [DEBUG] [Thread-193289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:30:28.644 [DEBUG] [Thread-193289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:30:28.644 [DEBUG] [Thread-193289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:30:28.644 [DEBUG] [Thread-193289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:30:28.644 [DEBUG] [Thread-193289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:30:28.644 [DEBUG] [Thread-193289] [transport.py] [_log()] client lang: <none>
2026-02-14T22:30:28.644 [DEBUG] [Thread-193289] [transport.py] [_log()] server lang: <none>
2026-02-14T22:30:28.644 [DEBUG] [Thread-193289] [transport.py] [_log()] kex follows: False
2026-02-14T22:30:28.644 [DEBUG] [Thread-193289] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:30:28.644 [DEBUG] [Thread-193289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:30:28.644 [DEBUG] [Thread-193289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:30:28.644 [DEBUG] [Thread-193289] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:30:28.644 [DEBUG] [Thread-193289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:30:28.644 [DEBUG] [Thread-193289] [transport.py] [_log()] Compression: none
2026-02-14T22:30:28.644 [DEBUG] [Thread-193289] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:30:28.702 [DEBUG] [Thread-193289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:30:28.703 [DEBUG] [Thread-193289] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:30:28.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:30:28.704 [DEBUG] [Thread-193289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:30:28.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:30:28.762 [DEBUG] [Thread-193289] [transport.py] [_log()] userauth is OK
2026-02-14T22:30:28.762 [DEBUG] [Thread-193289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:30:28.762 [DEBUG] [Thread-193289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:30:28.762 [DEBUG] [Thread-193289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:30:28.762 [DEBUG] [Thread-193289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:30:28.780 [INFO] [Thread-193289] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:30:28.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-14T22:30:28.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:30:29.547 [DEBUG] [Thread-193289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:30:29.547 [DEBUG] [Thread-193289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:30:29.595 [DEBUG] [Thread-193289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:30:29.596 [DEBUG] [Thread-193289] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:30:29.605 [DEBUG] [Thread-193289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:30:29.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:30:29.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:30:29.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-14T22:30:29.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:30:29.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:30:29.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:30:29.641 [DEBUG] [Thread-193289] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:30:41.229 [DEBUG] [Thread-193291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:30:45.788 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:30:56.022 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:30:56.024 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:30:56.289 [DEBUG] [Thread-193292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:30:59.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:30:59.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:30:59.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-14T22:31:01.446 [DEBUG] [Thread-193293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:31:01.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 30, 29), 6.77, 62.43, 0.0, 37.32, 9.32, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:31:01.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:30:29
2026-02-14T22:31:01.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:31:02.038 [DEBUG] [Thread-193294] [transport.py] [_log()] starting thread (client mode): 0xa2d01e70
2026-02-14T22:31:02.039 [DEBUG] [Thread-193294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:31:02.058 [DEBUG] [Thread-193294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:31:02.058 [INFO] [Thread-193294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:31:02.061 [DEBUG] [Thread-193294] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:31:02.061 [DEBUG] [Thread-193294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:31:02.061 [DEBUG] [Thread-193294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:31:02.061 [DEBUG] [Thread-193294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:31:02.061 [DEBUG] [Thread-193294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:31:02.061 [DEBUG] [Thread-193294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:31:02.061 [DEBUG] [Thread-193294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:31:02.061 [DEBUG] [Thread-193294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:31:02.061 [DEBUG] [Thread-193294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:31:02.061 [DEBUG] [Thread-193294] [transport.py] [_log()] client lang: <none>
2026-02-14T22:31:02.061 [DEBUG] [Thread-193294] [transport.py] [_log()] server lang: <none>
2026-02-14T22:31:02.061 [DEBUG] [Thread-193294] [transport.py] [_log()] kex follows: False
2026-02-14T22:31:02.062 [DEBUG] [Thread-193294] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:31:02.062 [DEBUG] [Thread-193294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:31:02.062 [DEBUG] [Thread-193294] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:31:02.062 [DEBUG] [Thread-193294] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:31:02.062 [DEBUG] [Thread-193294] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:31:02.062 [DEBUG] [Thread-193294] [transport.py] [_log()] Compression: none
2026-02-14T22:31:02.062 [DEBUG] [Thread-193294] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:31:02.078 [DEBUG] [Thread-193294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:31:02.078 [DEBUG] [Thread-193294] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:31:02.079 [DEBUG] [Thread-193294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:31:02.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:31:02.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:31:02.081 [DEBUG] [Thread-193294] [transport.py] [_log()] userauth is OK
2026-02-14T22:31:02.081 [DEBUG] [Thread-193294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:31:02.081 [DEBUG] [Thread-193294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:31:02.081 [DEBUG] [Thread-193294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:31:02.081 [DEBUG] [Thread-193294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:31:02.106 [INFO] [Thread-193294] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:31:02.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:31:02.772 [DEBUG] [Thread-193294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:31:02.773 [DEBUG] [Thread-193294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:31:02.773 [DEBUG] [Thread-193294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:31:02.814 [DEBUG] [Thread-193294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:31:02.814 [DEBUG] [Thread-193294] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:31:02.817 [DEBUG] [Thread-193294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:31:02.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:31:02.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:31:02.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:31:02.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:31:02.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:31:02.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:31:02.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:31:02.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:31:02.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:31:02.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.854278 -999.00   +9.20  28.65     67   +3.50 1 1 1 1 1     0    0 5.19 -18.71 ZNESW 27.7 28.6 160.6 35.2 9.7 -25.1 9.5 -24.0 9.3 -23.1 9.6 -24.3
2026-02-14T22:31:02.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:31:02.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:31:02.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.854278
2026-02-14T22:31:02.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:31:02.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:31:02.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:31:02.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:31:02.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:31:02.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:30:29', tmtdew=6.77, humidity=62.43, cloud=0.0, wind=37.32, temperature=9.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:30:30', seeing=3.82, atlas_timestamp='2026-02-14T20:30:09.619', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00975000000000037, -0.011250000000000426, 0.03325000000000067, -0.005500000000001393, 0.05649999999999977, 0.006250000000001421, -0.009000000000000341, 0.02325000000000088, 0.06099999999999994, 0.0039999999999995595, -0.04124999999999979, 0.010499999999998622, 0.05900000000000105, 0.02275000000000027, 0.004999999999999005, 0.03200000000000003, 0.0677500000000002, 0.05149999999999899, -0.0024999999999995026, 0.018749999999998934, 0.0779999999999994, 0.03874999999999851, -0.013749999999999929, 0.03775000000000084, 0.06300000000000061, 0.08750000000000036, 0.008250000000000313, 0.011000000000001009, 0.0990000000000002, 0.005500000000001393, 0.036000000000001364, 0.07000000000000028, 0.04774999999999885], zp_timestamp='2026-02-14T20:27:00')
2026-02-14T22:31:02.837 [DEBUG] [Thread-193294] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:31:02.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-14T22:31:02.939 [DEBUG] [Thread-193297] [transport.py] [_log()] starting thread (client mode): 0xa2d7aa10
2026-02-14T22:31:02.939 [DEBUG] [Thread-193297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:31:02.953 [DEBUG] [Thread-193297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:31:02.953 [INFO] [Thread-193297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:31:02.960 [DEBUG] [Thread-193297] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:31:02.961 [DEBUG] [Thread-193297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:31:02.961 [DEBUG] [Thread-193297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:31:02.961 [DEBUG] [Thread-193297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:31:02.961 [DEBUG] [Thread-193297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:31:02.961 [DEBUG] [Thread-193297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:31:02.961 [DEBUG] [Thread-193297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:31:02.961 [DEBUG] [Thread-193297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:31:02.961 [DEBUG] [Thread-193297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:31:02.961 [DEBUG] [Thread-193297] [transport.py] [_log()] client lang: <none>
2026-02-14T22:31:02.961 [DEBUG] [Thread-193297] [transport.py] [_log()] server lang: <none>
2026-02-14T22:31:02.961 [DEBUG] [Thread-193297] [transport.py] [_log()] kex follows: False
2026-02-14T22:31:02.961 [DEBUG] [Thread-193297] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:31:02.961 [DEBUG] [Thread-193297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:31:02.962 [DEBUG] [Thread-193297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:31:02.962 [DEBUG] [Thread-193297] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:31:02.962 [DEBUG] [Thread-193297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:31:02.962 [DEBUG] [Thread-193297] [transport.py] [_log()] Compression: none
2026-02-14T22:31:02.962 [DEBUG] [Thread-193297] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:31:03.018 [DEBUG] [Thread-193297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:31:03.018 [DEBUG] [Thread-193297] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:31:03.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:31:03.019 [DEBUG] [Thread-193297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:31:03.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:31:03.073 [DEBUG] [Thread-193297] [transport.py] [_log()] userauth is OK
2026-02-14T22:31:03.073 [DEBUG] [Thread-193297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:31:03.073 [DEBUG] [Thread-193297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:31:03.073 [DEBUG] [Thread-193297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:31:03.073 [DEBUG] [Thread-193297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:31:03.091 [INFO] [Thread-193297] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:31:03.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-14T22:31:03.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:31:03.903 [DEBUG] [Thread-193297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:31:03.903 [DEBUG] [Thread-193297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:31:03.951 [DEBUG] [Thread-193297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:31:03.951 [DEBUG] [Thread-193297] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:31:03.961 [DEBUG] [Thread-193297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:31:03.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:31:03.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:31:03.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-14T22:31:03.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:31:03.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:31:03.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:31:03.997 [DEBUG] [Thread-193297] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:31:11.325 [DEBUG] [Thread-193299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:31:26.389 [DEBUG] [Thread-193300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:31:33.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:31:33.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:31:33.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:31:35.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 31, 5), 6.78, 62.41, 0.0, 36.75, 9.35, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:31:35.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:31:05
2026-02-14T22:31:36.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:31:36.371 [DEBUG] [Thread-193301] [transport.py] [_log()] starting thread (client mode): 0xa2d006a0
2026-02-14T22:31:36.371 [DEBUG] [Thread-193301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:31:36.391 [DEBUG] [Thread-193301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:31:36.391 [INFO] [Thread-193301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:31:36.394 [DEBUG] [Thread-193301] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:31:36.394 [DEBUG] [Thread-193301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:31:36.394 [DEBUG] [Thread-193301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:31:36.394 [DEBUG] [Thread-193301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:31:36.394 [DEBUG] [Thread-193301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:31:36.394 [DEBUG] [Thread-193301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:31:36.394 [DEBUG] [Thread-193301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:31:36.394 [DEBUG] [Thread-193301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:31:36.394 [DEBUG] [Thread-193301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:31:36.394 [DEBUG] [Thread-193301] [transport.py] [_log()] client lang: <none>
2026-02-14T22:31:36.394 [DEBUG] [Thread-193301] [transport.py] [_log()] server lang: <none>
2026-02-14T22:31:36.394 [DEBUG] [Thread-193301] [transport.py] [_log()] kex follows: False
2026-02-14T22:31:36.394 [DEBUG] [Thread-193301] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:31:36.394 [DEBUG] [Thread-193301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:31:36.394 [DEBUG] [Thread-193301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:31:36.394 [DEBUG] [Thread-193301] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:31:36.394 [DEBUG] [Thread-193301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:31:36.394 [DEBUG] [Thread-193301] [transport.py] [_log()] Compression: none
2026-02-14T22:31:36.394 [DEBUG] [Thread-193301] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:31:36.410 [DEBUG] [Thread-193301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:31:36.411 [DEBUG] [Thread-193301] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:31:36.411 [DEBUG] [Thread-193301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:31:36.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:31:36.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:31:36.413 [DEBUG] [Thread-193301] [transport.py] [_log()] userauth is OK
2026-02-14T22:31:36.413 [DEBUG] [Thread-193301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:31:36.413 [DEBUG] [Thread-193301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:31:36.414 [DEBUG] [Thread-193301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:31:36.414 [DEBUG] [Thread-193301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:31:36.434 [INFO] [Thread-193301] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:31:36.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:31:37.062 [DEBUG] [Thread-193301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:31:37.063 [DEBUG] [Thread-193301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:31:37.063 [DEBUG] [Thread-193301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:31:37.103 [DEBUG] [Thread-193301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:31:37.103 [DEBUG] [Thread-193301] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:31:37.106 [DEBUG] [Thread-193301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:31:37.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:31:37.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:31:37.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:31:37.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:31:37.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:31:37.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:31:37.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:31:37.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:31:37.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:31:37.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.854626 -999.00   +9.20  29.00     67   +3.50 1 1 1 1 1     0    0 5.09 -18.92 ZNESW 27.4 29.0 157.2 35.1 9.7 -25.2 9.5 -23.9 9.3 -23.1 9.6 -24.2
2026-02-14T22:31:37.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:31:37.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:31:37.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.854626
2026-02-14T22:31:37.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:31:37.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:31:37.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:31:37.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:31:37.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:31:37.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:31:05', tmtdew=6.78, humidity=62.41, cloud=0.0, wind=36.75, temperature=9.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:31:06', seeing=3.36, atlas_timestamp='2026-02-14T20:30:39.686', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00975000000000037, -0.011250000000000426, 0.03325000000000067, -0.005500000000001393, 0.05649999999999977, 0.006250000000001421, -0.009000000000000341, 0.02325000000000088, 0.06099999999999994, 0.0039999999999995595, -0.04124999999999979, 0.010499999999998622, 0.05900000000000105, 0.02275000000000027, 0.004999999999999005, 0.03200000000000003, 0.0677500000000002, 0.05149999999999899, -0.0024999999999995026, 0.018749999999998934, 0.0779999999999994, 0.03874999999999851, -0.013749999999999929, 0.03775000000000084, 0.06300000000000061, 0.08750000000000036, 0.008250000000000313, 0.011000000000001009, 0.0990000000000002, 0.005500000000001393, 0.036000000000001364, 0.07000000000000028, 0.04774999999999885], zp_timestamp='2026-02-14T20:27:00')
2026-02-14T22:31:37.129 [DEBUG] [Thread-193301] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:31:37.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-14T22:31:37.224 [DEBUG] [Thread-193304] [transport.py] [_log()] starting thread (client mode): 0xa57d43a0
2026-02-14T22:31:37.224 [DEBUG] [Thread-193304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:31:37.238 [DEBUG] [Thread-193304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:31:37.239 [INFO] [Thread-193304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:31:37.246 [DEBUG] [Thread-193304] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:31:37.247 [DEBUG] [Thread-193304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:31:37.247 [DEBUG] [Thread-193304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:31:37.247 [DEBUG] [Thread-193304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:31:37.247 [DEBUG] [Thread-193304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:31:37.248 [DEBUG] [Thread-193304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:31:37.248 [DEBUG] [Thread-193304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:31:37.248 [DEBUG] [Thread-193304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:31:37.248 [DEBUG] [Thread-193304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:31:37.248 [DEBUG] [Thread-193304] [transport.py] [_log()] client lang: <none>
2026-02-14T22:31:37.248 [DEBUG] [Thread-193304] [transport.py] [_log()] server lang: <none>
2026-02-14T22:31:37.248 [DEBUG] [Thread-193304] [transport.py] [_log()] kex follows: False
2026-02-14T22:31:37.248 [DEBUG] [Thread-193304] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:31:37.248 [DEBUG] [Thread-193304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:31:37.248 [DEBUG] [Thread-193304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:31:37.248 [DEBUG] [Thread-193304] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:31:37.248 [DEBUG] [Thread-193304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:31:37.248 [DEBUG] [Thread-193304] [transport.py] [_log()] Compression: none
2026-02-14T22:31:37.248 [DEBUG] [Thread-193304] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:31:37.305 [DEBUG] [Thread-193304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:31:37.306 [DEBUG] [Thread-193304] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:31:37.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:31:37.307 [DEBUG] [Thread-193304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:31:37.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:31:37.362 [DEBUG] [Thread-193304] [transport.py] [_log()] userauth is OK
2026-02-14T22:31:37.363 [DEBUG] [Thread-193304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:31:37.363 [DEBUG] [Thread-193304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:31:37.363 [DEBUG] [Thread-193304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:31:37.363 [DEBUG] [Thread-193304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:31:37.381 [INFO] [Thread-193304] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:31:37.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-14T22:31:37.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:31:38.199 [DEBUG] [Thread-193304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:31:38.199 [DEBUG] [Thread-193304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:31:38.247 [DEBUG] [Thread-193304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:31:38.248 [DEBUG] [Thread-193304] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:31:38.256 [DEBUG] [Thread-193304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:31:38.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:31:38.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:31:38.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-14T22:31:38.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:31:38.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:31:38.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:31:38.294 [DEBUG] [Thread-193304] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:31:41.427 [DEBUG] [Thread-193306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:31:56.223 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:31:56.224 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:31:56.481 [DEBUG] [Thread-193307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:32:01.504 [DEBUG] [Thread-193308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:32:08.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:32:08.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:32:08.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-14T22:32:10.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 31, 41), 6.93, 61.93, 0.0, 35.0, 9.67, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:32:10.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:31:41
2026-02-14T22:32:10.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:32:10.665 [DEBUG] [Thread-193309] [transport.py] [_log()] starting thread (client mode): 0xa2d6fe80
2026-02-14T22:32:10.665 [DEBUG] [Thread-193309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:32:10.684 [DEBUG] [Thread-193309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:32:10.684 [INFO] [Thread-193309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:32:10.687 [DEBUG] [Thread-193309] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:32:10.687 [DEBUG] [Thread-193309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:32:10.688 [DEBUG] [Thread-193309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:32:10.688 [DEBUG] [Thread-193309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:32:10.688 [DEBUG] [Thread-193309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:32:10.688 [DEBUG] [Thread-193309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:32:10.688 [DEBUG] [Thread-193309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:32:10.688 [DEBUG] [Thread-193309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:32:10.688 [DEBUG] [Thread-193309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:32:10.688 [DEBUG] [Thread-193309] [transport.py] [_log()] client lang: <none>
2026-02-14T22:32:10.688 [DEBUG] [Thread-193309] [transport.py] [_log()] server lang: <none>
2026-02-14T22:32:10.688 [DEBUG] [Thread-193309] [transport.py] [_log()] kex follows: False
2026-02-14T22:32:10.688 [DEBUG] [Thread-193309] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:32:10.688 [DEBUG] [Thread-193309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:32:10.688 [DEBUG] [Thread-193309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:32:10.688 [DEBUG] [Thread-193309] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:32:10.688 [DEBUG] [Thread-193309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:32:10.688 [DEBUG] [Thread-193309] [transport.py] [_log()] Compression: none
2026-02-14T22:32:10.689 [DEBUG] [Thread-193309] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:32:10.707 [DEBUG] [Thread-193309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:32:10.707 [DEBUG] [Thread-193309] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:32:10.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:32:10.709 [DEBUG] [Thread-193309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:32:10.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:32:10.711 [DEBUG] [Thread-193309] [transport.py] [_log()] userauth is OK
2026-02-14T22:32:10.711 [DEBUG] [Thread-193309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:32:10.712 [DEBUG] [Thread-193309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:32:10.712 [DEBUG] [Thread-193309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:32:10.712 [DEBUG] [Thread-193309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:32:10.727 [INFO] [Thread-193309] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:32:10.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:32:11.363 [DEBUG] [Thread-193309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:32:11.364 [DEBUG] [Thread-193309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:32:11.364 [DEBUG] [Thread-193309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:32:11.404 [DEBUG] [Thread-193309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:32:11.405 [DEBUG] [Thread-193309] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:32:11.408 [DEBUG] [Thread-193309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:32:11.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:32:11.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:32:11.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:32:11.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:32:11.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:32:11.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:32:11.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:32:11.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:32:11.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:32:11.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.854973 -999.00   +9.20  24.23     67   +3.60 1 1 1 1 1     0    0 5.21 -19.32 ZNESW 23.1 24.2 151.7 30.7 9.7 -25.1 9.5 -24.1 9.3 -23.1 9.6 -24.2
2026-02-14T22:32:11.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:32:11.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:32:11.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.854973
2026-02-14T22:32:11.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:32:11.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:32:11.437 [DEBUG] [Thread-193309] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:32:11.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:32:11.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:32:11.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:32:11.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:31:41', tmtdew=6.93, humidity=61.93, cloud=0.0, wind=35.0, temperature=9.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:31:41', seeing=3.17, atlas_timestamp='2026-02-14T20:31:09.667', atlas_cloud=1, atlas_rain=1, zp_data=[-0.00975000000000037, -0.011250000000000426, 0.03325000000000067, -0.005500000000001393, 0.05649999999999977, 0.006250000000001421, -0.009000000000000341, 0.02325000000000088, 0.06099999999999994, 0.0039999999999995595, -0.04124999999999979, 0.010499999999998622, 0.05900000000000105, 0.02275000000000027, 0.004999999999999005, 0.03200000000000003, 0.0677500000000002, 0.05149999999999899, -0.0024999999999995026, 0.018749999999998934, 0.0779999999999994, 0.03874999999999851, -0.013749999999999929, 0.03775000000000084, 0.06300000000000061, 0.08750000000000036, 0.008250000000000313, 0.011000000000001009, 0.0990000000000002, 0.005500000000001393, 0.036000000000001364, 0.07000000000000028, 0.04774999999999885], zp_timestamp='2026-02-14T20:27:00')
2026-02-14T22:32:11.516 [DEBUG] [Thread-193312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:32:11.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-14T22:32:11.533 [DEBUG] [Thread-193313] [transport.py] [_log()] starting thread (client mode): 0xa57d7b20
2026-02-14T22:32:11.533 [DEBUG] [Thread-193313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:32:11.548 [DEBUG] [Thread-193313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:32:11.549 [INFO] [Thread-193313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:32:11.556 [DEBUG] [Thread-193313] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:32:11.556 [DEBUG] [Thread-193313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:32:11.556 [DEBUG] [Thread-193313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:32:11.556 [DEBUG] [Thread-193313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:32:11.556 [DEBUG] [Thread-193313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:32:11.556 [DEBUG] [Thread-193313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:32:11.556 [DEBUG] [Thread-193313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:32:11.556 [DEBUG] [Thread-193313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:32:11.556 [DEBUG] [Thread-193313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:32:11.557 [DEBUG] [Thread-193313] [transport.py] [_log()] client lang: <none>
2026-02-14T22:32:11.557 [DEBUG] [Thread-193313] [transport.py] [_log()] server lang: <none>
2026-02-14T22:32:11.557 [DEBUG] [Thread-193313] [transport.py] [_log()] kex follows: False
2026-02-14T22:32:11.557 [DEBUG] [Thread-193313] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:32:11.557 [DEBUG] [Thread-193313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:32:11.557 [DEBUG] [Thread-193313] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:32:11.557 [DEBUG] [Thread-193313] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:32:11.557 [DEBUG] [Thread-193313] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:32:11.557 [DEBUG] [Thread-193313] [transport.py] [_log()] Compression: none
2026-02-14T22:32:11.557 [DEBUG] [Thread-193313] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:32:11.614 [DEBUG] [Thread-193313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:32:11.614 [DEBUG] [Thread-193313] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:32:11.615 [DEBUG] [Thread-193313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:32:11.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:32:11.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:32:11.670 [DEBUG] [Thread-193313] [transport.py] [_log()] userauth is OK
2026-02-14T22:32:11.670 [DEBUG] [Thread-193313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:32:11.670 [DEBUG] [Thread-193313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:32:11.670 [DEBUG] [Thread-193313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:32:11.670 [DEBUG] [Thread-193313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:32:11.684 [INFO] [Thread-193313] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:32:11.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-14T22:32:11.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:32:12.556 [DEBUG] [Thread-193313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:32:12.557 [DEBUG] [Thread-193313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:32:12.605 [DEBUG] [Thread-193313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:32:12.605 [DEBUG] [Thread-193313] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:32:12.614 [DEBUG] [Thread-193313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:32:12.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:32:12.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-14T22:32:12.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-14T22:32:12.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:32:12.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:32:12.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:32:12.652 [DEBUG] [Thread-193313] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:32:19.891 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:32:26.555 [DEBUG] [Thread-193315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:32:41.594 [DEBUG] [Thread-193316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:32:42.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:32:42.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:32:42.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-14T22:32:44.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 32, 16), 6.75, 62.51, 0.0, 34.94, 9.3, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:32:44.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:32:16
2026-02-14T22:32:44.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:32:45.040 [DEBUG] [Thread-193317] [transport.py] [_log()] starting thread (client mode): 0xa2d78f40
2026-02-14T22:32:45.040 [DEBUG] [Thread-193317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:32:45.061 [DEBUG] [Thread-193317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:32:45.061 [INFO] [Thread-193317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:32:45.064 [DEBUG] [Thread-193317] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:32:45.064 [DEBUG] [Thread-193317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:32:45.064 [DEBUG] [Thread-193317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:32:45.064 [DEBUG] [Thread-193317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:32:45.064 [DEBUG] [Thread-193317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:32:45.064 [DEBUG] [Thread-193317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:32:45.064 [DEBUG] [Thread-193317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:32:45.064 [DEBUG] [Thread-193317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:32:45.064 [DEBUG] [Thread-193317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:32:45.064 [DEBUG] [Thread-193317] [transport.py] [_log()] client lang: <none>
2026-02-14T22:32:45.064 [DEBUG] [Thread-193317] [transport.py] [_log()] server lang: <none>
2026-02-14T22:32:45.064 [DEBUG] [Thread-193317] [transport.py] [_log()] kex follows: False
2026-02-14T22:32:45.064 [DEBUG] [Thread-193317] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:32:45.064 [DEBUG] [Thread-193317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:32:45.064 [DEBUG] [Thread-193317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:32:45.064 [DEBUG] [Thread-193317] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:32:45.064 [DEBUG] [Thread-193317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:32:45.064 [DEBUG] [Thread-193317] [transport.py] [_log()] Compression: none
2026-02-14T22:32:45.064 [DEBUG] [Thread-193317] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:32:45.081 [DEBUG] [Thread-193317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:32:45.082 [DEBUG] [Thread-193317] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:32:45.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:32:45.082 [DEBUG] [Thread-193317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:32:45.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:32:45.082 [DEBUG] [Thread-193317] [transport.py] [_log()] userauth is OK
2026-02-14T22:32:45.082 [DEBUG] [Thread-193317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:32:45.082 [DEBUG] [Thread-193317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:32:45.082 [DEBUG] [Thread-193317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:32:45.082 [DEBUG] [Thread-193317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:32:45.092 [INFO] [Thread-193317] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:32:45.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:32:45.753 [DEBUG] [Thread-193317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:32:45.754 [DEBUG] [Thread-193317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:32:45.754 [DEBUG] [Thread-193317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:32:45.794 [DEBUG] [Thread-193317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:32:45.794 [DEBUG] [Thread-193317] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:32:45.798 [DEBUG] [Thread-193317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:32:45.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:32:45.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:32:45.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:32:45.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:32:45.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:32:45.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:32:45.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:32:45.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:32:45.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:32:45.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.855667 -999.00   +9.20  32.29     67   +3.50 1 1 2 1 1     0    0 5.19 -17.83 ZNESW 31.9 32.3 155.8 38.3 9.6 -25.0 9.5 -24.0 9.3 -22.9 9.7 -24.3
2026-02-14T22:32:45.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:32:45.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:32:45.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.855667
2026-02-14T22:32:45.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:32:45.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:32:45.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:32:45.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:32:45.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:32:45.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:32:16', tmtdew=6.75, humidity=62.51, cloud=0.0, wind=34.94, temperature=9.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:32:17', seeing=3.59, atlas_timestamp='2026-02-14T20:32:09.629', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.029749999999999943, 0.007250000000000867, -0.0010000000000012221, 0.05400000000000027, -0.027749999999999275, 0.013499999999998735, 0.04374999999999929, 0.009000000000000341, 0.01699999999999946, -0.03924999999999912, 0.016000000000000014, 0.04649999999999821, 0.030249999999998778, 0.0009999999999994458, 0.0039999999999995595, 0.05924999999999869, 0.05400000000000027, -0.027000000000001023, -0.0007500000000018048, 0.06099999999999817, 0.03924999999999912, -0.012249999999998096, 0.029249999999999332, 0.06199999999999939, 0.04300000000000104, 0.019249999999999545, 0.025500000000000966, 0.09999999999999964, 0.05600000000000094, 0.06950000000000145, 0.05400000000000027, 0.025749999999998607], zp_timestamp='2026-02-14T20:31:00')
2026-02-14T22:32:45.823 [DEBUG] [Thread-193317] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:32:45.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-14T22:32:45.917 [DEBUG] [Thread-193320] [transport.py] [_log()] starting thread (client mode): 0xa5772f20
2026-02-14T22:32:45.917 [DEBUG] [Thread-193320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:32:45.931 [DEBUG] [Thread-193320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:32:45.931 [INFO] [Thread-193320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:32:45.939 [DEBUG] [Thread-193320] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:32:45.939 [DEBUG] [Thread-193320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:32:45.939 [DEBUG] [Thread-193320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:32:45.939 [DEBUG] [Thread-193320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:32:45.939 [DEBUG] [Thread-193320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:32:45.939 [DEBUG] [Thread-193320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:32:45.939 [DEBUG] [Thread-193320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:32:45.939 [DEBUG] [Thread-193320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:32:45.939 [DEBUG] [Thread-193320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:32:45.939 [DEBUG] [Thread-193320] [transport.py] [_log()] client lang: <none>
2026-02-14T22:32:45.939 [DEBUG] [Thread-193320] [transport.py] [_log()] server lang: <none>
2026-02-14T22:32:45.939 [DEBUG] [Thread-193320] [transport.py] [_log()] kex follows: False
2026-02-14T22:32:45.940 [DEBUG] [Thread-193320] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:32:45.940 [DEBUG] [Thread-193320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:32:45.940 [DEBUG] [Thread-193320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:32:45.940 [DEBUG] [Thread-193320] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:32:45.940 [DEBUG] [Thread-193320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:32:45.940 [DEBUG] [Thread-193320] [transport.py] [_log()] Compression: none
2026-02-14T22:32:45.940 [DEBUG] [Thread-193320] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:32:45.999 [DEBUG] [Thread-193320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:32:46.000 [DEBUG] [Thread-193320] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:32:46.000 [DEBUG] [Thread-193320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:32:46.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:32:46.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:32:46.054 [DEBUG] [Thread-193320] [transport.py] [_log()] userauth is OK
2026-02-14T22:32:46.055 [DEBUG] [Thread-193320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:32:46.055 [DEBUG] [Thread-193320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:32:46.055 [DEBUG] [Thread-193320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:32:46.055 [DEBUG] [Thread-193320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:32:46.073 [INFO] [Thread-193320] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:32:46.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-14T22:32:46.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:32:46.915 [DEBUG] [Thread-193320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:32:46.916 [DEBUG] [Thread-193320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:32:46.963 [DEBUG] [Thread-193320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:32:46.964 [DEBUG] [Thread-193320] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:32:46.973 [DEBUG] [Thread-193320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:32:46.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:32:46.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-14T22:32:46.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-14T22:32:47.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:32:47.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:32:47.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:32:47.010 [DEBUG] [Thread-193320] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:32:56.436 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:32:56.438 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:32:56.632 [DEBUG] [Thread-193322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:33:01.573 [DEBUG] [Thread-193323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:33:11.687 [DEBUG] [Thread-193324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:33:17.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:33:17.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:33:17.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-14T22:33:18.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 32, 52), 6.74, 62.58, 0.0, 36.21, 9.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:33:18.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:32:52
2026-02-14T22:33:19.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:33:19.449 [DEBUG] [Thread-193325] [transport.py] [_log()] starting thread (client mode): 0xa2d6f5e0
2026-02-14T22:33:19.449 [DEBUG] [Thread-193325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:33:19.474 [DEBUG] [Thread-193325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:33:19.475 [INFO] [Thread-193325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:33:19.478 [DEBUG] [Thread-193325] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:33:19.478 [DEBUG] [Thread-193325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:33:19.478 [DEBUG] [Thread-193325] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:33:19.478 [DEBUG] [Thread-193325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:33:19.478 [DEBUG] [Thread-193325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:33:19.479 [DEBUG] [Thread-193325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:33:19.479 [DEBUG] [Thread-193325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:33:19.479 [DEBUG] [Thread-193325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:33:19.479 [DEBUG] [Thread-193325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:33:19.479 [DEBUG] [Thread-193325] [transport.py] [_log()] client lang: <none>
2026-02-14T22:33:19.479 [DEBUG] [Thread-193325] [transport.py] [_log()] server lang: <none>
2026-02-14T22:33:19.479 [DEBUG] [Thread-193325] [transport.py] [_log()] kex follows: False
2026-02-14T22:33:19.479 [DEBUG] [Thread-193325] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:33:19.479 [DEBUG] [Thread-193325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:33:19.480 [DEBUG] [Thread-193325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:33:19.480 [DEBUG] [Thread-193325] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:33:19.480 [DEBUG] [Thread-193325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:33:19.480 [DEBUG] [Thread-193325] [transport.py] [_log()] Compression: none
2026-02-14T22:33:19.480 [DEBUG] [Thread-193325] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:33:19.499 [DEBUG] [Thread-193325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:33:19.500 [DEBUG] [Thread-193325] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:33:19.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:33:19.501 [DEBUG] [Thread-193325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:33:19.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:33:19.503 [DEBUG] [Thread-193325] [transport.py] [_log()] userauth is OK
2026-02-14T22:33:19.503 [DEBUG] [Thread-193325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:33:19.503 [DEBUG] [Thread-193325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:33:19.503 [DEBUG] [Thread-193325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:33:19.504 [DEBUG] [Thread-193325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:33:19.527 [INFO] [Thread-193325] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:33:19.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:33:20.115 [DEBUG] [Thread-193325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:33:20.115 [DEBUG] [Thread-193325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:33:20.115 [DEBUG] [Thread-193325] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:33:20.156 [DEBUG] [Thread-193325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:33:20.157 [DEBUG] [Thread-193325] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:33:20.160 [DEBUG] [Thread-193325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:33:20.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:33:20.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:33:20.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:33:20.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:33:20.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:33:20.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:33:20.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:33:20.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:33:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:33:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.856015 -999.00   +9.20  23.16     67   +3.50 1 1 1 1 1     0    0 5.28 -17.54 ZNESW 22.1 23.2 153.2 37.8 9.7 -25.0 9.5 -24.0 9.3 -23.1 9.6 -24.1
2026-02-14T22:33:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:33:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:33:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.856015
2026-02-14T22:33:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:33:20.194 [DEBUG] [Thread-193325] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:33:20.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:33:20.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:33:20.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:33:20.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:33:20.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:32:52', tmtdew=6.74, humidity=62.58, cloud=0.0, wind=36.21, temperature=9.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:32:52', seeing=3.23, atlas_timestamp='2026-02-14T20:32:39.696', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.029749999999999943, 0.007250000000000867, -0.0010000000000012221, 0.05400000000000027, -0.027749999999999275, 0.013499999999998735, 0.04374999999999929, 0.009000000000000341, 0.01699999999999946, -0.03924999999999912, 0.016000000000000014, 0.04649999999999821, 0.030249999999998778, 0.0009999999999994458, 0.0039999999999995595, 0.05924999999999869, 0.05400000000000027, -0.027000000000001023, -0.0007500000000018048, 0.06099999999999817, 0.03924999999999912, -0.012249999999998096, 0.029249999999999332, 0.06199999999999939, 0.04300000000000104, 0.019249999999999545, 0.025500000000000966, 0.09999999999999964, 0.05600000000000094, 0.06950000000000145, 0.05400000000000027, 0.025749999999998607], zp_timestamp='2026-02-14T20:31:00')
2026-02-14T22:33:20.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-14T22:33:20.291 [DEBUG] [Thread-193328] [transport.py] [_log()] starting thread (client mode): 0xa57426b0
2026-02-14T22:33:20.292 [DEBUG] [Thread-193328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:33:20.306 [DEBUG] [Thread-193328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:33:20.306 [INFO] [Thread-193328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:33:20.314 [DEBUG] [Thread-193328] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:33:20.314 [DEBUG] [Thread-193328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:33:20.314 [DEBUG] [Thread-193328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:33:20.314 [DEBUG] [Thread-193328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:33:20.314 [DEBUG] [Thread-193328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:33:20.314 [DEBUG] [Thread-193328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:33:20.314 [DEBUG] [Thread-193328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:33:20.314 [DEBUG] [Thread-193328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:33:20.314 [DEBUG] [Thread-193328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:33:20.314 [DEBUG] [Thread-193328] [transport.py] [_log()] client lang: <none>
2026-02-14T22:33:20.314 [DEBUG] [Thread-193328] [transport.py] [_log()] server lang: <none>
2026-02-14T22:33:20.315 [DEBUG] [Thread-193328] [transport.py] [_log()] kex follows: False
2026-02-14T22:33:20.315 [DEBUG] [Thread-193328] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:33:20.315 [DEBUG] [Thread-193328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:33:20.315 [DEBUG] [Thread-193328] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:33:20.315 [DEBUG] [Thread-193328] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:33:20.315 [DEBUG] [Thread-193328] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:33:20.315 [DEBUG] [Thread-193328] [transport.py] [_log()] Compression: none
2026-02-14T22:33:20.315 [DEBUG] [Thread-193328] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:33:20.371 [DEBUG] [Thread-193328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:33:20.372 [DEBUG] [Thread-193328] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:33:20.372 [DEBUG] [Thread-193328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:33:20.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:33:20.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:33:20.430 [DEBUG] [Thread-193328] [transport.py] [_log()] userauth is OK
2026-02-14T22:33:20.430 [DEBUG] [Thread-193328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:33:20.430 [DEBUG] [Thread-193328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:33:20.431 [DEBUG] [Thread-193328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:33:20.431 [DEBUG] [Thread-193328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:33:20.448 [INFO] [Thread-193328] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:33:20.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-14T22:33:20.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:33:21.267 [DEBUG] [Thread-193328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:33:21.267 [DEBUG] [Thread-193328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:33:21.315 [DEBUG] [Thread-193328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:33:21.315 [DEBUG] [Thread-193328] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:33:21.325 [DEBUG] [Thread-193328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:33:21.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:33: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')
2026-02-14T22:33:21.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-14T22:33:21.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:33:21.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:33:21.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:33:21.361 [DEBUG] [Thread-193328] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:33:26.725 [DEBUG] [Thread-193330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:33:41.771 [DEBUG] [Thread-193331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:33:51.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:33:51.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:33:51.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-14T22:33:53.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 33, 27), 6.76, 62.5, 0.0, 38.22, 9.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:33:53.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:33:27
2026-02-14T22:33:53.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:33:53.756 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:33:53.772 [DEBUG] [Thread-193332] [transport.py] [_log()] starting thread (client mode): 0xa5743b80
2026-02-14T22:33:53.772 [DEBUG] [Thread-193332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:33:53.792 [DEBUG] [Thread-193332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:33:53.792 [INFO] [Thread-193332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:33:53.795 [DEBUG] [Thread-193332] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:33:53.795 [DEBUG] [Thread-193332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:33:53.795 [DEBUG] [Thread-193332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:33:53.795 [DEBUG] [Thread-193332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:33:53.795 [DEBUG] [Thread-193332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:33:53.795 [DEBUG] [Thread-193332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:33:53.795 [DEBUG] [Thread-193332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:33:53.795 [DEBUG] [Thread-193332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:33:53.795 [DEBUG] [Thread-193332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:33:53.795 [DEBUG] [Thread-193332] [transport.py] [_log()] client lang: <none>
2026-02-14T22:33:53.795 [DEBUG] [Thread-193332] [transport.py] [_log()] server lang: <none>
2026-02-14T22:33:53.795 [DEBUG] [Thread-193332] [transport.py] [_log()] kex follows: False
2026-02-14T22:33:53.795 [DEBUG] [Thread-193332] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:33:53.795 [DEBUG] [Thread-193332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:33:53.795 [DEBUG] [Thread-193332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:33:53.795 [DEBUG] [Thread-193332] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:33:53.795 [DEBUG] [Thread-193332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:33:53.795 [DEBUG] [Thread-193332] [transport.py] [_log()] Compression: none
2026-02-14T22:33:53.795 [DEBUG] [Thread-193332] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:33:53.811 [DEBUG] [Thread-193332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:33:53.811 [DEBUG] [Thread-193332] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:33:53.811 [DEBUG] [Thread-193332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:33:53.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:33:53.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:33:53.812 [DEBUG] [Thread-193332] [transport.py] [_log()] userauth is OK
2026-02-14T22:33:53.812 [DEBUG] [Thread-193332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:33:53.812 [DEBUG] [Thread-193332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:33:53.812 [DEBUG] [Thread-193332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:33:53.812 [DEBUG] [Thread-193332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:33:53.839 [INFO] [Thread-193332] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:33:53.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:33:54.476 [DEBUG] [Thread-193332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:33:54.477 [DEBUG] [Thread-193332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:33:54.477 [DEBUG] [Thread-193332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:33:54.517 [DEBUG] [Thread-193332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:33:54.517 [DEBUG] [Thread-193332] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:33:54.520 [DEBUG] [Thread-193332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:33:54.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:33:54.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:33:54.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:33:54.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:33:54.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:33:54.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:33:54.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:33:54.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:33:54.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:33:54.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.856362 -999.00   +9.20  25.82     67   +3.50 1 1 1 1 1     0    0 5.25 -16.48 ZNESW 23.0 25.8 152.9 37.1 9.7 -25.0 9.5 -24.0 9.3 -23.1 9.6 -24.2
2026-02-14T22:33:54.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:33:54.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:33:54.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.856362
2026-02-14T22:33:54.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:33:54.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:33:54.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:33:54.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:33:54.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:33:54.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:33:27', tmtdew=6.76, humidity=62.5, cloud=0.0, wind=38.22, temperature=9.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:33:27', seeing=2.62, atlas_timestamp='2026-02-14T20:33:09.677', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.029749999999999943, 0.007250000000000867, -0.0010000000000012221, 0.05400000000000027, -0.027749999999999275, 0.013499999999998735, 0.04374999999999929, 0.009000000000000341, 0.01699999999999946, -0.03924999999999912, 0.016000000000000014, 0.04649999999999821, 0.030249999999998778, 0.0009999999999994458, 0.0039999999999995595, 0.05924999999999869, 0.05400000000000027, -0.027000000000001023, -0.0007500000000018048, 0.06099999999999817, 0.03924999999999912, -0.012249999999998096, 0.029249999999999332, 0.06199999999999939, 0.04300000000000104, 0.019249999999999545, 0.025500000000000966, 0.09999999999999964, 0.05600000000000094, 0.06950000000000145, 0.05400000000000027, 0.025749999999998607], zp_timestamp='2026-02-14T20:31:00')
2026-02-14T22:33:54.548 [DEBUG] [Thread-193332] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:33:54.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:33:54.647 [DEBUG] [Thread-193335] [transport.py] [_log()] starting thread (client mode): 0xa57730d0
2026-02-14T22:33:54.647 [DEBUG] [Thread-193335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:33:54.662 [DEBUG] [Thread-193335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:33:54.662 [INFO] [Thread-193335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:33:54.669 [DEBUG] [Thread-193335] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:33:54.669 [DEBUG] [Thread-193335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:33:54.669 [DEBUG] [Thread-193335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:33:54.669 [DEBUG] [Thread-193335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:33:54.669 [DEBUG] [Thread-193335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:33:54.669 [DEBUG] [Thread-193335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:33:54.669 [DEBUG] [Thread-193335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:33:54.669 [DEBUG] [Thread-193335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:33:54.669 [DEBUG] [Thread-193335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:33:54.669 [DEBUG] [Thread-193335] [transport.py] [_log()] client lang: <none>
2026-02-14T22:33:54.669 [DEBUG] [Thread-193335] [transport.py] [_log()] server lang: <none>
2026-02-14T22:33:54.669 [DEBUG] [Thread-193335] [transport.py] [_log()] kex follows: False
2026-02-14T22:33:54.669 [DEBUG] [Thread-193335] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:33:54.670 [DEBUG] [Thread-193335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:33:54.670 [DEBUG] [Thread-193335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:33:54.670 [DEBUG] [Thread-193335] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:33:54.670 [DEBUG] [Thread-193335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:33:54.670 [DEBUG] [Thread-193335] [transport.py] [_log()] Compression: none
2026-02-14T22:33:54.670 [DEBUG] [Thread-193335] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:33:54.725 [DEBUG] [Thread-193335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:33:54.725 [DEBUG] [Thread-193335] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:33:54.725 [DEBUG] [Thread-193335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:33:54.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:33:54.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:33:54.782 [DEBUG] [Thread-193335] [transport.py] [_log()] userauth is OK
2026-02-14T22:33:54.782 [DEBUG] [Thread-193335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:33:54.783 [DEBUG] [Thread-193335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:33:54.783 [DEBUG] [Thread-193335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:33:54.783 [DEBUG] [Thread-193335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:33:54.803 [INFO] [Thread-193335] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:33:54.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-14T22:33:54.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:33:55.635 [DEBUG] [Thread-193335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:33:55.635 [DEBUG] [Thread-193335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:33:55.683 [DEBUG] [Thread-193335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:33:55.683 [DEBUG] [Thread-193335] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:33:55.693 [DEBUG] [Thread-193335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:33:55.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:33:55.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-14T22:33:55.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-14T22:33:55.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:33:55.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:33:55.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:33:55.729 [DEBUG] [Thread-193335] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:33:56.638 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:33:56.639 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:33:56.807 [DEBUG] [Thread-193337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:34:01.647 [DEBUG] [Thread-193338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:34:11.856 [DEBUG] [Thread-193339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:34:25.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:34:25.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:34:25.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-14T22:34:26.891 [DEBUG] [Thread-193340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:34:28.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 34, 2), 6.75, 62.53, 0.0, 37.09, 9.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:34:28.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:34:02
2026-02-14T22:34:28.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:34:28.783 [DEBUG] [Thread-193341] [transport.py] [_log()] starting thread (client mode): 0xa57721a0
2026-02-14T22:34:28.784 [DEBUG] [Thread-193341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:34:28.804 [DEBUG] [Thread-193341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:34:28.804 [INFO] [Thread-193341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:34:28.805 [DEBUG] [Thread-193341] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:34:28.805 [DEBUG] [Thread-193341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:34:28.805 [DEBUG] [Thread-193341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:34:28.805 [DEBUG] [Thread-193341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:34:28.805 [DEBUG] [Thread-193341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:34:28.805 [DEBUG] [Thread-193341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:34:28.805 [DEBUG] [Thread-193341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:34:28.805 [DEBUG] [Thread-193341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:34:28.805 [DEBUG] [Thread-193341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:34:28.805 [DEBUG] [Thread-193341] [transport.py] [_log()] client lang: <none>
2026-02-14T22:34:28.805 [DEBUG] [Thread-193341] [transport.py] [_log()] server lang: <none>
2026-02-14T22:34:28.805 [DEBUG] [Thread-193341] [transport.py] [_log()] kex follows: False
2026-02-14T22:34:28.805 [DEBUG] [Thread-193341] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:34:28.805 [DEBUG] [Thread-193341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:34:28.805 [DEBUG] [Thread-193341] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:34:28.805 [DEBUG] [Thread-193341] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:34:28.805 [DEBUG] [Thread-193341] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:34:28.806 [DEBUG] [Thread-193341] [transport.py] [_log()] Compression: none
2026-02-14T22:34:28.806 [DEBUG] [Thread-193341] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:34:28.823 [DEBUG] [Thread-193341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:34:28.824 [DEBUG] [Thread-193341] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:34:28.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:34:28.825 [DEBUG] [Thread-193341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:34:28.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:34:28.827 [DEBUG] [Thread-193341] [transport.py] [_log()] userauth is OK
2026-02-14T22:34:28.827 [DEBUG] [Thread-193341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:34:28.827 [DEBUG] [Thread-193341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:34:28.828 [DEBUG] [Thread-193341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:34:28.828 [DEBUG] [Thread-193341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:34:28.852 [INFO] [Thread-193341] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:34:28.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:34:29.658 [DEBUG] [Thread-193341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:34:29.658 [DEBUG] [Thread-193341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:34:29.659 [DEBUG] [Thread-193341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:34:29.699 [DEBUG] [Thread-193341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:34:29.699 [DEBUG] [Thread-193341] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:34:29.702 [DEBUG] [Thread-193341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:34:29.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:34:29.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:34:29.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:34:29.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:34:29.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:34:29.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:34:29.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:34:29.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:34:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:34:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.856709 -999.00   +9.20  30.41     67   +3.50 1 1 2 1 1     0    0 5.31 -15.39 ZNESW 26.4 30.4 141.8 38.4 9.7 -25.1 9.5 -24.0 9.2 -23.1 9.6 -24.3
2026-02-14T22:34:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:34:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:34:29.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.856709
2026-02-14T22:34:29.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:34:29.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:34:29.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:34:29.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:34:29.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:34:29.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:34:02', tmtdew=6.75, humidity=62.53, cloud=0.0, wind=37.09, temperature=9.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:34:03', seeing=3.18, atlas_timestamp='2026-02-14T20:33:39.658', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.029749999999999943, 0.007250000000000867, -0.0010000000000012221, 0.05400000000000027, -0.027749999999999275, 0.013499999999998735, 0.04374999999999929, 0.009000000000000341, 0.01699999999999946, -0.03924999999999912, 0.016000000000000014, 0.04649999999999821, 0.030249999999998778, 0.0009999999999994458, 0.0039999999999995595, 0.05924999999999869, 0.05400000000000027, -0.027000000000001023, -0.0007500000000018048, 0.06099999999999817, 0.03924999999999912, -0.012249999999998096, 0.029249999999999332, 0.06199999999999939, 0.04300000000000104, 0.019249999999999545, 0.025500000000000966, 0.09999999999999964, 0.05600000000000094, 0.06950000000000145, 0.05400000000000027, 0.025749999999998607], zp_timestamp='2026-02-14T20:31:00')
2026-02-14T22:34:29.730 [DEBUG] [Thread-193341] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:34:29.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:34:29.826 [DEBUG] [Thread-193344] [transport.py] [_log()] starting thread (client mode): 0xa5742350
2026-02-14T22:34:29.826 [DEBUG] [Thread-193344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:34:29.840 [DEBUG] [Thread-193344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:34:29.840 [INFO] [Thread-193344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:34:29.847 [DEBUG] [Thread-193344] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:34:29.847 [DEBUG] [Thread-193344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:34:29.847 [DEBUG] [Thread-193344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:34:29.847 [DEBUG] [Thread-193344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:34:29.847 [DEBUG] [Thread-193344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:34:29.848 [DEBUG] [Thread-193344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:34:29.848 [DEBUG] [Thread-193344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:34:29.848 [DEBUG] [Thread-193344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:34:29.848 [DEBUG] [Thread-193344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:34:29.848 [DEBUG] [Thread-193344] [transport.py] [_log()] client lang: <none>
2026-02-14T22:34:29.848 [DEBUG] [Thread-193344] [transport.py] [_log()] server lang: <none>
2026-02-14T22:34:29.848 [DEBUG] [Thread-193344] [transport.py] [_log()] kex follows: False
2026-02-14T22:34:29.848 [DEBUG] [Thread-193344] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:34:29.848 [DEBUG] [Thread-193344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:34:29.848 [DEBUG] [Thread-193344] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:34:29.848 [DEBUG] [Thread-193344] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:34:29.848 [DEBUG] [Thread-193344] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:34:29.848 [DEBUG] [Thread-193344] [transport.py] [_log()] Compression: none
2026-02-14T22:34:29.848 [DEBUG] [Thread-193344] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:34:29.909 [DEBUG] [Thread-193344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:34:29.909 [DEBUG] [Thread-193344] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:34:29.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:34:29.910 [DEBUG] [Thread-193344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:34:29.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:34:29.971 [DEBUG] [Thread-193344] [transport.py] [_log()] userauth is OK
2026-02-14T22:34:29.971 [DEBUG] [Thread-193344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:34:29.971 [DEBUG] [Thread-193344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:34:29.972 [DEBUG] [Thread-193344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:34:29.972 [DEBUG] [Thread-193344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:34:29.994 [INFO] [Thread-193344] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:34:29.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-14T22:34:29.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:34:30.855 [DEBUG] [Thread-193344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:34:30.855 [DEBUG] [Thread-193344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:34:30.903 [DEBUG] [Thread-193344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:34:30.903 [DEBUG] [Thread-193344] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:34:30.912 [DEBUG] [Thread-193344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:34:30.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:34:30.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-14T22:34:30.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-14T22:34:30.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:34:30.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:34:30.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:34:30.949 [DEBUG] [Thread-193344] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:34:41.926 [DEBUG] [Thread-193346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:34:56.839 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:34:56.840 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:34:56.968 [DEBUG] [Thread-193347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:35:00.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:35:00.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:35:00.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-14T22:35:01.720 [DEBUG] [Thread-193348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:35:02.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 34, 38), 6.91, 61.99, 0.0, 34.72, 9.51, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:35:02.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:34:38
2026-02-14T22:35:03.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:35:03.422 [DEBUG] [Thread-193349] [transport.py] [_log()] starting thread (client mode): 0xa57c1630
2026-02-14T22:35:03.422 [DEBUG] [Thread-193349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:35:03.447 [DEBUG] [Thread-193349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:35:03.447 [INFO] [Thread-193349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:35:03.451 [DEBUG] [Thread-193349] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:35:03.451 [DEBUG] [Thread-193349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:35:03.451 [DEBUG] [Thread-193349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:35:03.451 [DEBUG] [Thread-193349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:35:03.451 [DEBUG] [Thread-193349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:35:03.451 [DEBUG] [Thread-193349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:35:03.452 [DEBUG] [Thread-193349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:35:03.452 [DEBUG] [Thread-193349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:35:03.452 [DEBUG] [Thread-193349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:35:03.452 [DEBUG] [Thread-193349] [transport.py] [_log()] client lang: <none>
2026-02-14T22:35:03.452 [DEBUG] [Thread-193349] [transport.py] [_log()] server lang: <none>
2026-02-14T22:35:03.452 [DEBUG] [Thread-193349] [transport.py] [_log()] kex follows: False
2026-02-14T22:35:03.452 [DEBUG] [Thread-193349] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:35:03.452 [DEBUG] [Thread-193349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:35:03.452 [DEBUG] [Thread-193349] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:35:03.452 [DEBUG] [Thread-193349] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:35:03.453 [DEBUG] [Thread-193349] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:35:03.453 [DEBUG] [Thread-193349] [transport.py] [_log()] Compression: none
2026-02-14T22:35:03.453 [DEBUG] [Thread-193349] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:35:03.471 [DEBUG] [Thread-193349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:35:03.471 [DEBUG] [Thread-193349] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:35:03.472 [DEBUG] [Thread-193349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:35:03.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:35:03.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:35:03.474 [DEBUG] [Thread-193349] [transport.py] [_log()] userauth is OK
2026-02-14T22:35:03.474 [DEBUG] [Thread-193349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:35:03.474 [DEBUG] [Thread-193349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:35:03.475 [DEBUG] [Thread-193349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:35:03.475 [DEBUG] [Thread-193349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:35:03.500 [INFO] [Thread-193349] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:35:03.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:35:04.501 [DEBUG] [Thread-193349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:35:04.501 [DEBUG] [Thread-193349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:35:04.501 [DEBUG] [Thread-193349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:35:04.542 [DEBUG] [Thread-193349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:35:04.542 [DEBUG] [Thread-193349] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:35:04.544 [DEBUG] [Thread-193349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:35:04.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:35:04.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:35:04.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:35:04.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:35:04.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:35:04.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:35:04.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:35:04.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:35:04.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:35:04.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.857056 -999.00   +9.20  23.92     67   +3.60 1 1 1 1 1     0    0 5.35 -13.79 ZNESW 28.8 23.9 155.3 41.1 9.7 -25.1 9.5 -24.0 9.2 -22.9 9.6 -24.1
2026-02-14T22:35:04.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:35:04.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:35:04.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.857056
2026-02-14T22:35:04.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:35:04.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:35:04.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:35:04.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:35:04.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:35:04.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:34:38', tmtdew=6.91, humidity=61.99, cloud=0.0, wind=34.72, temperature=9.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:34:38', seeing=3.18, atlas_timestamp='2026-02-14T20:34:09.638', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.029749999999999943, 0.007250000000000867, -0.0010000000000012221, 0.05400000000000027, -0.027749999999999275, 0.013499999999998735, 0.04374999999999929, 0.009000000000000341, 0.01699999999999946, -0.03924999999999912, 0.016000000000000014, 0.04649999999999821, 0.030249999999998778, 0.0009999999999994458, 0.0039999999999995595, 0.05924999999999869, 0.05400000000000027, -0.027000000000001023, -0.0007500000000018048, 0.06099999999999817, 0.03924999999999912, -0.012249999999998096, 0.029249999999999332, 0.06199999999999939, 0.04300000000000104, 0.019249999999999545, 0.025500000000000966, 0.09999999999999964, 0.05600000000000094, 0.06950000000000145, 0.05400000000000027, 0.025749999999998607], zp_timestamp='2026-02-14T20:31:00')
2026-02-14T22:35:04.563 [DEBUG] [Thread-193349] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:35:04.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-14T22:35:04.646 [DEBUG] [Thread-193352] [transport.py] [_log()] starting thread (client mode): 0xa5743460
2026-02-14T22:35:04.646 [DEBUG] [Thread-193352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:35:04.661 [DEBUG] [Thread-193352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:35:04.661 [INFO] [Thread-193352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:35:04.668 [DEBUG] [Thread-193352] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:35:04.669 [DEBUG] [Thread-193352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:35:04.669 [DEBUG] [Thread-193352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:35:04.669 [DEBUG] [Thread-193352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:35:04.669 [DEBUG] [Thread-193352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:35:04.669 [DEBUG] [Thread-193352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:35:04.669 [DEBUG] [Thread-193352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:35:04.669 [DEBUG] [Thread-193352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:35:04.669 [DEBUG] [Thread-193352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:35:04.669 [DEBUG] [Thread-193352] [transport.py] [_log()] client lang: <none>
2026-02-14T22:35:04.669 [DEBUG] [Thread-193352] [transport.py] [_log()] server lang: <none>
2026-02-14T22:35:04.669 [DEBUG] [Thread-193352] [transport.py] [_log()] kex follows: False
2026-02-14T22:35:04.669 [DEBUG] [Thread-193352] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:35:04.669 [DEBUG] [Thread-193352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:35:04.669 [DEBUG] [Thread-193352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:35:04.669 [DEBUG] [Thread-193352] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:35:04.669 [DEBUG] [Thread-193352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:35:04.669 [DEBUG] [Thread-193352] [transport.py] [_log()] Compression: none
2026-02-14T22:35:04.669 [DEBUG] [Thread-193352] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:35:04.730 [DEBUG] [Thread-193352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:35:04.730 [DEBUG] [Thread-193352] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:35:04.731 [DEBUG] [Thread-193352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:35:04.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:35:04.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:35:04.789 [DEBUG] [Thread-193352] [transport.py] [_log()] userauth is OK
2026-02-14T22:35:04.789 [DEBUG] [Thread-193352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:35:04.789 [DEBUG] [Thread-193352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:35:04.789 [DEBUG] [Thread-193352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:35:04.790 [DEBUG] [Thread-193352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:35:04.808 [INFO] [Thread-193352] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:35:04.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:35:04.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:35:05.617 [DEBUG] [Thread-193352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:35:05.618 [DEBUG] [Thread-193352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:35:05.665 [DEBUG] [Thread-193352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:35:05.666 [DEBUG] [Thread-193352] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:35:05.675 [DEBUG] [Thread-193352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:35:05.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:35:05.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-14T22:35:05.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:35:05.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:35:05.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:35:05.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:35:05.712 [DEBUG] [Thread-193352] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:35:12.004 [DEBUG] [Thread-193354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:35:27.054 [DEBUG] [Thread-193355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:35:27.101 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:35:35.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:35:35.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:35:35.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:35:37.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 35, 15), 6.75, 62.53, 0.0, 33.0, 9.25, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:35:37.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:35:15
2026-02-14T22:35:38.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:35:38.464 [DEBUG] [Thread-193356] [transport.py] [_log()] starting thread (client mode): 0xa5742a70
2026-02-14T22:35:38.465 [DEBUG] [Thread-193356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:35:38.486 [DEBUG] [Thread-193356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:35:38.486 [INFO] [Thread-193356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:35:38.489 [DEBUG] [Thread-193356] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:35:38.489 [DEBUG] [Thread-193356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:35:38.489 [DEBUG] [Thread-193356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:35:38.489 [DEBUG] [Thread-193356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:35:38.489 [DEBUG] [Thread-193356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:35:38.489 [DEBUG] [Thread-193356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:35:38.489 [DEBUG] [Thread-193356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:35:38.489 [DEBUG] [Thread-193356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:35:38.489 [DEBUG] [Thread-193356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:35:38.489 [DEBUG] [Thread-193356] [transport.py] [_log()] client lang: <none>
2026-02-14T22:35:38.490 [DEBUG] [Thread-193356] [transport.py] [_log()] server lang: <none>
2026-02-14T22:35:38.490 [DEBUG] [Thread-193356] [transport.py] [_log()] kex follows: False
2026-02-14T22:35:38.490 [DEBUG] [Thread-193356] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:35:38.490 [DEBUG] [Thread-193356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:35:38.490 [DEBUG] [Thread-193356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:35:38.490 [DEBUG] [Thread-193356] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:35:38.490 [DEBUG] [Thread-193356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:35:38.490 [DEBUG] [Thread-193356] [transport.py] [_log()] Compression: none
2026-02-14T22:35:38.490 [DEBUG] [Thread-193356] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:35:38.507 [DEBUG] [Thread-193356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:35:38.508 [DEBUG] [Thread-193356] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:35:38.508 [DEBUG] [Thread-193356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:35:38.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:35:38.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:35:38.510 [DEBUG] [Thread-193356] [transport.py] [_log()] userauth is OK
2026-02-14T22:35:38.511 [DEBUG] [Thread-193356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:35:38.511 [DEBUG] [Thread-193356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:35:38.511 [DEBUG] [Thread-193356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:35:38.511 [DEBUG] [Thread-193356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:35:38.537 [INFO] [Thread-193356] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:35:38.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:35:39.189 [DEBUG] [Thread-193356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:35:39.189 [DEBUG] [Thread-193356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:35:39.190 [DEBUG] [Thread-193356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:35:39.230 [DEBUG] [Thread-193356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:35:39.231 [DEBUG] [Thread-193356] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:35:39.233 [DEBUG] [Thread-193356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:35:39.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:35:39.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:35:39.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:35:39.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:35:39.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:35:39.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:35:39.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:35:39.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:35:39.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:35:39.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.857403 -999.00   +9.20  26.66     67   +3.60 1 1 1 1 1     0    0 5.27 -13.56 ZNESW 24.3 26.7 156.8 34.9 9.7 -25.0 9.5 -24.0 9.2 -23.2 9.6 -24.2
2026-02-14T22:35:39.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:35:39.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:35:39.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.857403
2026-02-14T22:35:39.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:35:39.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:35:39.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:35:39.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:35:39.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:35:39.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:35:15', tmtdew=6.75, humidity=62.53, cloud=0.0, wind=33.0, temperature=9.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:35:15', seeing=3.12, atlas_timestamp='2026-02-14T20:34:39.619', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.021249999999998437, -0.002249999999998309, -0.025500000000000966, -0.00849999999999973, -0.008749999999999147, 0.0019999999999988916, -0.012249999999998096, 0.03549999999999898, 0.0009999999999994458, -0.05274999999999963, 0.0005000000000006111, 0.054999999999999716, -0.01875000000000071, 0.0009999999999994458, -0.0045000000000001705, 0.051750000000000185, 0.03849999999999909, -0.04499999999999993, -0.007250000000000867, 0.04449999999999932, 0.021249999999998437, 0.0022500000000000853, 0.013749999999999929, 0.019499999999998963, 0.06799999999999962, 0.01875000000000071, 0.012000000000000455, 0.07399999999999984, -0.0009999999999976694, 0.06700000000000017, 0.06050000000000111, 0.027749999999999275], zp_timestamp='2026-02-14T20:34:00')
2026-02-14T22:35:39.258 [DEBUG] [Thread-193356] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:35:39.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-14T22:35:39.347 [DEBUG] [Thread-193359] [transport.py] [_log()] starting thread (client mode): 0xa5773a60
2026-02-14T22:35:39.347 [DEBUG] [Thread-193359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:35:39.361 [DEBUG] [Thread-193359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:35:39.361 [INFO] [Thread-193359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:35:39.369 [DEBUG] [Thread-193359] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:35:39.369 [DEBUG] [Thread-193359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:35:39.369 [DEBUG] [Thread-193359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:35:39.369 [DEBUG] [Thread-193359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:35:39.369 [DEBUG] [Thread-193359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:35:39.369 [DEBUG] [Thread-193359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:35:39.369 [DEBUG] [Thread-193359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:35:39.369 [DEBUG] [Thread-193359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:35:39.369 [DEBUG] [Thread-193359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:35:39.370 [DEBUG] [Thread-193359] [transport.py] [_log()] client lang: <none>
2026-02-14T22:35:39.370 [DEBUG] [Thread-193359] [transport.py] [_log()] server lang: <none>
2026-02-14T22:35:39.370 [DEBUG] [Thread-193359] [transport.py] [_log()] kex follows: False
2026-02-14T22:35:39.370 [DEBUG] [Thread-193359] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:35:39.370 [DEBUG] [Thread-193359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:35:39.370 [DEBUG] [Thread-193359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:35:39.370 [DEBUG] [Thread-193359] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:35:39.370 [DEBUG] [Thread-193359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:35:39.370 [DEBUG] [Thread-193359] [transport.py] [_log()] Compression: none
2026-02-14T22:35:39.370 [DEBUG] [Thread-193359] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:35:39.426 [DEBUG] [Thread-193359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:35:39.427 [DEBUG] [Thread-193359] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:35:39.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:35:39.428 [DEBUG] [Thread-193359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:35:39.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:35:39.483 [DEBUG] [Thread-193359] [transport.py] [_log()] userauth is OK
2026-02-14T22:35:39.483 [DEBUG] [Thread-193359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:35:39.483 [DEBUG] [Thread-193359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:35:39.483 [DEBUG] [Thread-193359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:35:39.483 [DEBUG] [Thread-193359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:35:39.501 [INFO] [Thread-193359] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:35:39.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-14T22:35:39.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:35:40.316 [DEBUG] [Thread-193359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:35:40.317 [DEBUG] [Thread-193359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:35:40.364 [DEBUG] [Thread-193359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:35:40.365 [DEBUG] [Thread-193359] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:35:40.374 [DEBUG] [Thread-193359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:35:40.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:35:40.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-14T22:35:40.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-14T22:35:40.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:35:40.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:35:40.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:35:40.411 [DEBUG] [Thread-193359] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:35:42.091 [DEBUG] [Thread-193361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:35:57.042 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:35:57.043 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:35:57.143 [DEBUG] [Thread-193362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:36:01.789 [DEBUG] [Thread-193363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:36:10.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:36:10.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:36:10.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-14T22:36:12.182 [DEBUG] [Thread-193364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:36:12.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 35, 50), 6.76, 62.48, 0.0, 33.29, 9.24, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:36:12.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:35:50
2026-02-14T22:36:12.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:36:12.918 [DEBUG] [Thread-193365] [transport.py] [_log()] starting thread (client mode): 0xa5773f70
2026-02-14T22:36:12.918 [DEBUG] [Thread-193365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:36:12.933 [DEBUG] [Thread-193365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:36:12.933 [INFO] [Thread-193365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:36:12.937 [DEBUG] [Thread-193365] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:36:12.937 [DEBUG] [Thread-193365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:36:12.937 [DEBUG] [Thread-193365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:36:12.937 [DEBUG] [Thread-193365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:36:12.937 [DEBUG] [Thread-193365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:36:12.937 [DEBUG] [Thread-193365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:36:12.937 [DEBUG] [Thread-193365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:36:12.937 [DEBUG] [Thread-193365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:36:12.937 [DEBUG] [Thread-193365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:36:12.937 [DEBUG] [Thread-193365] [transport.py] [_log()] client lang: <none>
2026-02-14T22:36:12.937 [DEBUG] [Thread-193365] [transport.py] [_log()] server lang: <none>
2026-02-14T22:36:12.937 [DEBUG] [Thread-193365] [transport.py] [_log()] kex follows: False
2026-02-14T22:36:12.937 [DEBUG] [Thread-193365] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:36:12.937 [DEBUG] [Thread-193365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:36:12.937 [DEBUG] [Thread-193365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:36:12.937 [DEBUG] [Thread-193365] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:36:12.937 [DEBUG] [Thread-193365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:36:12.937 [DEBUG] [Thread-193365] [transport.py] [_log()] Compression: none
2026-02-14T22:36:12.937 [DEBUG] [Thread-193365] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:36:12.956 [DEBUG] [Thread-193365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:36:12.956 [DEBUG] [Thread-193365] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:36:12.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:36:12.957 [DEBUG] [Thread-193365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:36:12.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:36:12.958 [DEBUG] [Thread-193365] [transport.py] [_log()] userauth is OK
2026-02-14T22:36:12.959 [DEBUG] [Thread-193365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:36:12.959 [DEBUG] [Thread-193365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:36:12.959 [DEBUG] [Thread-193365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:36:12.959 [DEBUG] [Thread-193365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:36:12.984 [INFO] [Thread-193365] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:36:12.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:36:13.644 [DEBUG] [Thread-193365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:36:13.644 [DEBUG] [Thread-193365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:36:13.645 [DEBUG] [Thread-193365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:36:13.684 [DEBUG] [Thread-193365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:36:13.684 [DEBUG] [Thread-193365] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:36:13.688 [DEBUG] [Thread-193365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:36:13.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:36:13.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:36:13.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:36:13.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:36:13.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:36:13.711 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:36:13.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:36:13.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:36:13.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:36:13.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.858098 -999.00   +9.20  20.61     67   +3.50 1 1 1 1 1     0    0 5.26 -12.22 ZNESW 29.4 20.6 158.2 35.0 9.6 -25.1 9.4 -24.0 9.3 -23.1 9.6 -24.3
2026-02-14T22:36:13.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:36:13.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:36:13.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.858098
2026-02-14T22:36:13.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:36:13.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:36:13.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:36:13.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:36:13.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:36:13.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:35:50', tmtdew=6.76, humidity=62.48, cloud=0.0, wind=33.29, temperature=9.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:35:51', seeing=3.3, atlas_timestamp='2026-02-14T20:35:39.667', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.021249999999998437, -0.002249999999998309, -0.025500000000000966, -0.00849999999999973, -0.008749999999999147, 0.0019999999999988916, -0.012249999999998096, 0.03549999999999898, 0.0009999999999994458, -0.05274999999999963, 0.0005000000000006111, 0.054999999999999716, -0.01875000000000071, 0.0009999999999994458, -0.0045000000000001705, 0.051750000000000185, 0.03849999999999909, -0.04499999999999993, -0.007250000000000867, 0.04449999999999932, 0.021249999999998437, 0.0022500000000000853, 0.013749999999999929, 0.019499999999998963, 0.06799999999999962, 0.01875000000000071, 0.012000000000000455, 0.07399999999999984, -0.0009999999999976694, 0.06700000000000017, 0.06050000000000111, 0.027749999999999275], zp_timestamp='2026-02-14T20:34:00')
2026-02-14T22:36:13.714 [DEBUG] [Thread-193365] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:36:13.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-14T22:36:13.817 [DEBUG] [Thread-193368] [transport.py] [_log()] starting thread (client mode): 0xa2d00ee0
2026-02-14T22:36:13.817 [DEBUG] [Thread-193368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:36:13.832 [DEBUG] [Thread-193368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:36:13.832 [INFO] [Thread-193368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:36:13.840 [DEBUG] [Thread-193368] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:36:13.840 [DEBUG] [Thread-193368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:36:13.840 [DEBUG] [Thread-193368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:36:13.840 [DEBUG] [Thread-193368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:36:13.840 [DEBUG] [Thread-193368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:36:13.840 [DEBUG] [Thread-193368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:36:13.840 [DEBUG] [Thread-193368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:36:13.840 [DEBUG] [Thread-193368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:36:13.840 [DEBUG] [Thread-193368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:36:13.840 [DEBUG] [Thread-193368] [transport.py] [_log()] client lang: <none>
2026-02-14T22:36:13.840 [DEBUG] [Thread-193368] [transport.py] [_log()] server lang: <none>
2026-02-14T22:36:13.841 [DEBUG] [Thread-193368] [transport.py] [_log()] kex follows: False
2026-02-14T22:36:13.841 [DEBUG] [Thread-193368] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:36:13.841 [DEBUG] [Thread-193368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:36:13.841 [DEBUG] [Thread-193368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:36:13.841 [DEBUG] [Thread-193368] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:36:13.841 [DEBUG] [Thread-193368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:36:13.841 [DEBUG] [Thread-193368] [transport.py] [_log()] Compression: none
2026-02-14T22:36:13.841 [DEBUG] [Thread-193368] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:36:13.899 [DEBUG] [Thread-193368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:36:13.899 [DEBUG] [Thread-193368] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:36:13.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:36:13.900 [DEBUG] [Thread-193368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:36:13.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:36:13.956 [DEBUG] [Thread-193368] [transport.py] [_log()] userauth is OK
2026-02-14T22:36:13.957 [DEBUG] [Thread-193368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:36:13.957 [DEBUG] [Thread-193368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:36:13.957 [DEBUG] [Thread-193368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:36:13.957 [DEBUG] [Thread-193368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:36:13.975 [INFO] [Thread-193368] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:36:13.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-14T22:36:13.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:36:14.770 [DEBUG] [Thread-193368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:36:14.770 [DEBUG] [Thread-193368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:36:14.818 [DEBUG] [Thread-193368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:36:14.819 [DEBUG] [Thread-193368] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:36:14.828 [DEBUG] [Thread-193368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:36:14.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:36:14.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:36:14.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-14T22:36:14.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:36:14.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:36:14.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:36:14.864 [DEBUG] [Thread-193368] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:36:27.218 [DEBUG] [Thread-193370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:36:42.274 [DEBUG] [Thread-193371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:36:44.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:36:44.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:36:44.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:36:46.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 36, 25), 6.74, 62.56, 0.0, 33.82, 9.25, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:36:46.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:36:25
2026-02-14T22:36:47.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:36:47.345 [DEBUG] [Thread-193372] [transport.py] [_log()] starting thread (client mode): 0xa2d11450
2026-02-14T22:36:47.345 [DEBUG] [Thread-193372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:36:47.365 [DEBUG] [Thread-193372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:36:47.365 [INFO] [Thread-193372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:36:47.366 [DEBUG] [Thread-193372] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:36:47.366 [DEBUG] [Thread-193372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:36:47.366 [DEBUG] [Thread-193372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:36:47.366 [DEBUG] [Thread-193372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:36:47.366 [DEBUG] [Thread-193372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:36:47.366 [DEBUG] [Thread-193372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:36:47.366 [DEBUG] [Thread-193372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:36:47.366 [DEBUG] [Thread-193372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:36:47.366 [DEBUG] [Thread-193372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:36:47.366 [DEBUG] [Thread-193372] [transport.py] [_log()] client lang: <none>
2026-02-14T22:36:47.366 [DEBUG] [Thread-193372] [transport.py] [_log()] server lang: <none>
2026-02-14T22:36:47.366 [DEBUG] [Thread-193372] [transport.py] [_log()] kex follows: False
2026-02-14T22:36:47.367 [DEBUG] [Thread-193372] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:36:47.367 [DEBUG] [Thread-193372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:36:47.367 [DEBUG] [Thread-193372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:36:47.367 [DEBUG] [Thread-193372] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:36:47.367 [DEBUG] [Thread-193372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:36:47.367 [DEBUG] [Thread-193372] [transport.py] [_log()] Compression: none
2026-02-14T22:36:47.367 [DEBUG] [Thread-193372] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:36:47.387 [DEBUG] [Thread-193372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:36:47.388 [DEBUG] [Thread-193372] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:36:47.389 [DEBUG] [Thread-193372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:36:47.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:36:47.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:36:47.391 [DEBUG] [Thread-193372] [transport.py] [_log()] userauth is OK
2026-02-14T22:36:47.391 [DEBUG] [Thread-193372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:36:47.391 [DEBUG] [Thread-193372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:36:47.391 [DEBUG] [Thread-193372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:36:47.392 [DEBUG] [Thread-193372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:36:47.424 [INFO] [Thread-193372] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:36:47.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:36:48.080 [DEBUG] [Thread-193372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:36:48.080 [DEBUG] [Thread-193372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:36:48.081 [DEBUG] [Thread-193372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:36:48.122 [DEBUG] [Thread-193372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:36:48.122 [DEBUG] [Thread-193372] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:36:48.126 [DEBUG] [Thread-193372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:36:48.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:36:48.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:36:48.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:36:48.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:36:48.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:36:48.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:36:48.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:36:48.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:36:48.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:36:48.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.858445 -999.00   +9.20  22.87     67   +3.50 1 1 1 1 1     0    0 5.36 -11.40 ZNESW 25.7 22.9 153.4 44.6 9.7 -25.0 9.5 -23.9 9.3 -23.0 9.6 -24.2
2026-02-14T22:36:48.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:36:48.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:36:48.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.858445
2026-02-14T22:36:48.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:36:48.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:36:48.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:36:48.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:36:48.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:36:48.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:36:25', tmtdew=6.74, humidity=62.56, cloud=0.0, wind=33.82, temperature=9.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:36:26', seeing=3.73, atlas_timestamp='2026-02-14T20:36:09.648', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.021249999999998437, -0.002249999999998309, -0.025500000000000966, -0.00849999999999973, -0.008749999999999147, 0.0019999999999988916, -0.012249999999998096, 0.03549999999999898, 0.0009999999999994458, -0.05274999999999963, 0.0005000000000006111, 0.054999999999999716, -0.01875000000000071, 0.0009999999999994458, -0.0045000000000001705, 0.051750000000000185, 0.03849999999999909, -0.04499999999999993, -0.007250000000000867, 0.04449999999999932, 0.021249999999998437, 0.0022500000000000853, 0.013749999999999929, 0.019499999999998963, 0.06799999999999962, 0.01875000000000071, 0.012000000000000455, 0.07399999999999984, -0.0009999999999976694, 0.06700000000000017, 0.06050000000000111, 0.027749999999999275], zp_timestamp='2026-02-14T20:34:00')
2026-02-14T22:36:48.152 [DEBUG] [Thread-193372] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:36:48.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-14T22:36:48.265 [DEBUG] [Thread-193375] [transport.py] [_log()] starting thread (client mode): 0xa2d7bf10
2026-02-14T22:36:48.265 [DEBUG] [Thread-193375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:36:48.279 [DEBUG] [Thread-193375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:36:48.280 [INFO] [Thread-193375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:36:48.287 [DEBUG] [Thread-193375] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:36:48.288 [DEBUG] [Thread-193375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:36:48.288 [DEBUG] [Thread-193375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:36:48.288 [DEBUG] [Thread-193375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:36:48.288 [DEBUG] [Thread-193375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:36:48.288 [DEBUG] [Thread-193375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:36:48.288 [DEBUG] [Thread-193375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:36:48.288 [DEBUG] [Thread-193375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:36:48.288 [DEBUG] [Thread-193375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:36:48.288 [DEBUG] [Thread-193375] [transport.py] [_log()] client lang: <none>
2026-02-14T22:36:48.288 [DEBUG] [Thread-193375] [transport.py] [_log()] server lang: <none>
2026-02-14T22:36:48.288 [DEBUG] [Thread-193375] [transport.py] [_log()] kex follows: False
2026-02-14T22:36:48.288 [DEBUG] [Thread-193375] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:36:48.288 [DEBUG] [Thread-193375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:36:48.288 [DEBUG] [Thread-193375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:36:48.288 [DEBUG] [Thread-193375] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:36:48.289 [DEBUG] [Thread-193375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:36:48.289 [DEBUG] [Thread-193375] [transport.py] [_log()] Compression: none
2026-02-14T22:36:48.289 [DEBUG] [Thread-193375] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:36:48.346 [DEBUG] [Thread-193375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:36:48.346 [DEBUG] [Thread-193375] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:36:48.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:36:48.348 [DEBUG] [Thread-193375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:36:48.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:36:48.403 [DEBUG] [Thread-193375] [transport.py] [_log()] userauth is OK
2026-02-14T22:36:48.403 [DEBUG] [Thread-193375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:36:48.403 [DEBUG] [Thread-193375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:36:48.404 [DEBUG] [Thread-193375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:36:48.404 [DEBUG] [Thread-193375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:36:48.423 [INFO] [Thread-193375] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:36:48.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-14T22:36:48.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:36:49.223 [DEBUG] [Thread-193375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:36:49.223 [DEBUG] [Thread-193375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:36:49.271 [DEBUG] [Thread-193375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:36:49.271 [DEBUG] [Thread-193375] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:36:49.280 [DEBUG] [Thread-193375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:36:49.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:36: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')
2026-02-14T22:36:49.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:36:49.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:36:49.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:36:49.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:36:49.317 [DEBUG] [Thread-193375] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:36:57.242 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:36:57.243 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:36:57.310 [DEBUG] [Thread-193377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:37:01.356 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:37:01.854 [DEBUG] [Thread-193378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:37:12.371 [DEBUG] [Thread-193379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:37:19.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:37:19.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:37:19.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:37:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 37, 1), 6.73, 62.6, 0.0, 30.93, 9.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:37:21.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:37:01
2026-02-14T22:37:21.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:37:21.850 [DEBUG] [Thread-193380] [transport.py] [_log()] starting thread (client mode): 0xa5742890
2026-02-14T22:37:21.851 [DEBUG] [Thread-193380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:37:21.871 [DEBUG] [Thread-193380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:37:21.871 [INFO] [Thread-193380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:37:21.872 [DEBUG] [Thread-193380] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:37:21.872 [DEBUG] [Thread-193380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:37:21.872 [DEBUG] [Thread-193380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:37:21.873 [DEBUG] [Thread-193380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:37:21.873 [DEBUG] [Thread-193380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:37:21.873 [DEBUG] [Thread-193380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:37:21.873 [DEBUG] [Thread-193380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:37:21.873 [DEBUG] [Thread-193380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:37:21.873 [DEBUG] [Thread-193380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:37:21.873 [DEBUG] [Thread-193380] [transport.py] [_log()] client lang: <none>
2026-02-14T22:37:21.873 [DEBUG] [Thread-193380] [transport.py] [_log()] server lang: <none>
2026-02-14T22:37:21.873 [DEBUG] [Thread-193380] [transport.py] [_log()] kex follows: False
2026-02-14T22:37:21.873 [DEBUG] [Thread-193380] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:37:21.873 [DEBUG] [Thread-193380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:37:21.873 [DEBUG] [Thread-193380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:37:21.873 [DEBUG] [Thread-193380] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:37:21.873 [DEBUG] [Thread-193380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:37:21.874 [DEBUG] [Thread-193380] [transport.py] [_log()] Compression: none
2026-02-14T22:37:21.874 [DEBUG] [Thread-193380] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:37:21.888 [DEBUG] [Thread-193380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:37:21.888 [DEBUG] [Thread-193380] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:37:21.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:37:21.889 [DEBUG] [Thread-193380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:37:21.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:37:21.892 [DEBUG] [Thread-193380] [transport.py] [_log()] userauth is OK
2026-02-14T22:37:21.892 [DEBUG] [Thread-193380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:37:21.892 [DEBUG] [Thread-193380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:37:21.892 [DEBUG] [Thread-193380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:37:21.892 [DEBUG] [Thread-193380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:37:21.916 [INFO] [Thread-193380] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:37:21.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:37:22.713 [DEBUG] [Thread-193380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:37:22.713 [DEBUG] [Thread-193380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:37:22.713 [DEBUG] [Thread-193380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:37:22.754 [DEBUG] [Thread-193380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:37:22.754 [DEBUG] [Thread-193380] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:37:22.757 [DEBUG] [Thread-193380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:37:22.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:37:22.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:37:22.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:37:22.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:37:22.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:37:22.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:37:22.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:37:22.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:37:22.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:37:22.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.858792 -999.00   +9.20  25.05     67   +3.50 1 1 1 1 1     0    0 5.29 -10.98 ZNESW 31.2 25.1 143.2 33.6 9.6 -24.9 9.5 -23.9 9.3 -22.9 9.6 -24.1
2026-02-14T22:37:22.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:37:22.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:37:22.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.858792
2026-02-14T22:37:22.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:37:22.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:37:22.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:37:22.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:37:22.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:37:22.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:37:01', tmtdew=6.73, humidity=62.6, cloud=0.0, wind=30.93, temperature=9.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:37:02', seeing=3.78, atlas_timestamp='2026-02-14T20:36:39.629', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.021249999999998437, -0.002249999999998309, -0.025500000000000966, -0.00849999999999973, -0.008749999999999147, 0.0019999999999988916, -0.012249999999998096, 0.03549999999999898, 0.0009999999999994458, -0.05274999999999963, 0.0005000000000006111, 0.054999999999999716, -0.01875000000000071, 0.0009999999999994458, -0.0045000000000001705, 0.051750000000000185, 0.03849999999999909, -0.04499999999999993, -0.007250000000000867, 0.04449999999999932, 0.021249999999998437, 0.0022500000000000853, 0.013749999999999929, 0.019499999999998963, 0.06799999999999962, 0.01875000000000071, 0.012000000000000455, 0.07399999999999984, -0.0009999999999976694, 0.06700000000000017, 0.06050000000000111, 0.027749999999999275], zp_timestamp='2026-02-14T20:34:00')
2026-02-14T22:37:22.779 [DEBUG] [Thread-193380] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:37:22.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-14T22:37:22.885 [DEBUG] [Thread-193383] [transport.py] [_log()] starting thread (client mode): 0xa5742110
2026-02-14T22:37:22.886 [DEBUG] [Thread-193383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:37:22.900 [DEBUG] [Thread-193383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:37:22.900 [INFO] [Thread-193383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:37:22.908 [DEBUG] [Thread-193383] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:37:22.908 [DEBUG] [Thread-193383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:37:22.908 [DEBUG] [Thread-193383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:37:22.908 [DEBUG] [Thread-193383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:37:22.908 [DEBUG] [Thread-193383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:37:22.908 [DEBUG] [Thread-193383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:37:22.908 [DEBUG] [Thread-193383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:37:22.908 [DEBUG] [Thread-193383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:37:22.908 [DEBUG] [Thread-193383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:37:22.908 [DEBUG] [Thread-193383] [transport.py] [_log()] client lang: <none>
2026-02-14T22:37:22.908 [DEBUG] [Thread-193383] [transport.py] [_log()] server lang: <none>
2026-02-14T22:37:22.908 [DEBUG] [Thread-193383] [transport.py] [_log()] kex follows: False
2026-02-14T22:37:22.908 [DEBUG] [Thread-193383] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:37:22.908 [DEBUG] [Thread-193383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:37:22.908 [DEBUG] [Thread-193383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:37:22.908 [DEBUG] [Thread-193383] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:37:22.909 [DEBUG] [Thread-193383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:37:22.909 [DEBUG] [Thread-193383] [transport.py] [_log()] Compression: none
2026-02-14T22:37:22.909 [DEBUG] [Thread-193383] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:37:22.967 [DEBUG] [Thread-193383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:37:22.967 [DEBUG] [Thread-193383] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:37:22.967 [DEBUG] [Thread-193383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:37:22.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:37:22.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:37:23.024 [DEBUG] [Thread-193383] [transport.py] [_log()] userauth is OK
2026-02-14T22:37:23.024 [DEBUG] [Thread-193383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:37:23.024 [DEBUG] [Thread-193383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:37:23.024 [DEBUG] [Thread-193383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:37:23.024 [DEBUG] [Thread-193383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:37:23.050 [INFO] [Thread-193383] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:37:23.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-14T22:37:23.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:37:23.893 [DEBUG] [Thread-193383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:37:23.894 [DEBUG] [Thread-193383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:37:23.941 [DEBUG] [Thread-193383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:37:23.941 [DEBUG] [Thread-193383] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:37:23.951 [DEBUG] [Thread-193383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:37:23.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:37:23.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:37:23.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-14T22:37:23.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:37:23.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:37:23.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:37:23.986 [DEBUG] [Thread-193383] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:37:27.416 [DEBUG] [Thread-193385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:37:42.466 [DEBUG] [Thread-193386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:37:54.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:37:54.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:37:54.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-14T22:37:56.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 37, 37), 6.91, 62.03, 0.0, 37.37, 9.57, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:37:56.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:37:37
2026-02-14T22:37:56.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:37:56.719 [DEBUG] [Thread-193387] [transport.py] [_log()] starting thread (client mode): 0xa57c23e0
2026-02-14T22:37:56.719 [DEBUG] [Thread-193387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:37:56.739 [DEBUG] [Thread-193387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:37:56.739 [INFO] [Thread-193387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:37:56.743 [DEBUG] [Thread-193387] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:37:56.743 [DEBUG] [Thread-193387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:37:56.743 [DEBUG] [Thread-193387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:37:56.744 [DEBUG] [Thread-193387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:37:56.744 [DEBUG] [Thread-193387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:37:56.744 [DEBUG] [Thread-193387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:37:56.744 [DEBUG] [Thread-193387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:37:56.744 [DEBUG] [Thread-193387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:37:56.744 [DEBUG] [Thread-193387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:37:56.744 [DEBUG] [Thread-193387] [transport.py] [_log()] client lang: <none>
2026-02-14T22:37:56.744 [DEBUG] [Thread-193387] [transport.py] [_log()] server lang: <none>
2026-02-14T22:37:56.744 [DEBUG] [Thread-193387] [transport.py] [_log()] kex follows: False
2026-02-14T22:37:56.744 [DEBUG] [Thread-193387] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:37:56.744 [DEBUG] [Thread-193387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:37:56.744 [DEBUG] [Thread-193387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:37:56.744 [DEBUG] [Thread-193387] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:37:56.744 [DEBUG] [Thread-193387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:37:56.744 [DEBUG] [Thread-193387] [transport.py] [_log()] Compression: none
2026-02-14T22:37:56.744 [DEBUG] [Thread-193387] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:37:56.761 [DEBUG] [Thread-193387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:37:56.762 [DEBUG] [Thread-193387] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:37:56.763 [DEBUG] [Thread-193387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:37:56.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:37:56.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:37:56.764 [DEBUG] [Thread-193387] [transport.py] [_log()] userauth is OK
2026-02-14T22:37:56.764 [DEBUG] [Thread-193387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:37:56.764 [DEBUG] [Thread-193387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:37:56.764 [DEBUG] [Thread-193387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:37:56.764 [DEBUG] [Thread-193387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:37:56.778 [INFO] [Thread-193387] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:37:56.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:37:57.443 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:37:57.445 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:37:57.446 [DEBUG] [Thread-193387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:37:57.446 [DEBUG] [Thread-193387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:37:57.446 [DEBUG] [Thread-193387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:37:57.487 [DEBUG] [Thread-193387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:37:57.488 [DEBUG] [Thread-193387] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:37:57.491 [DEBUG] [Thread-193387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:37:57.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:37:57.504 [DEBUG] [Thread-193389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:37:57.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:37:57.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:37:57.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:37:57.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:37:57.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:37:57.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:37:57.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:37:57.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:37:57.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.859140 -999.00   +9.20  29.74     67   +3.50 1 1 1 1 1     0    0 5.43 -9.37 ZNESW 24.2 29.7 161.0 32.9 9.6 -25.0 9.4 -24.0 9.2 -22.9 9.6 -24.2
2026-02-14T22:37:57.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:37:57.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:37:57.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.859140
2026-02-14T22:37:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:37:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:37:57.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:37:57.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:37:57.516 [DEBUG] [Thread-193387] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:37:57.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:37:57.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:37:37', tmtdew=6.91, humidity=62.03, cloud=0.0, wind=37.37, temperature=9.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:37:38', seeing=3.51, atlas_timestamp='2026-02-14T20:37:09.696', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.021249999999998437, -0.002249999999998309, -0.025500000000000966, -0.00849999999999973, -0.008749999999999147, 0.0019999999999988916, -0.012249999999998096, 0.03549999999999898, 0.0009999999999994458, -0.05274999999999963, 0.0005000000000006111, 0.054999999999999716, -0.01875000000000071, 0.0009999999999994458, -0.0045000000000001705, 0.051750000000000185, 0.03849999999999909, -0.04499999999999993, -0.007250000000000867, 0.04449999999999932, 0.021249999999998437, 0.0022500000000000853, 0.013749999999999929, 0.019499999999998963, 0.06799999999999962, 0.01875000000000071, 0.012000000000000455, 0.07399999999999984, -0.0009999999999976694, 0.06700000000000017, 0.06050000000000111, 0.027749999999999275], zp_timestamp='2026-02-14T20:34:00')
2026-02-14T22:37:57.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-14T22:37:57.612 [DEBUG] [Thread-193391] [transport.py] [_log()] starting thread (client mode): 0xa2d02a40
2026-02-14T22:37:57.612 [DEBUG] [Thread-193391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:37:57.627 [DEBUG] [Thread-193391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:37:57.627 [INFO] [Thread-193391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:37:57.635 [DEBUG] [Thread-193391] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:37:57.635 [DEBUG] [Thread-193391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:37:57.635 [DEBUG] [Thread-193391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:37:57.635 [DEBUG] [Thread-193391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:37:57.635 [DEBUG] [Thread-193391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:37:57.635 [DEBUG] [Thread-193391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:37:57.635 [DEBUG] [Thread-193391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:37:57.635 [DEBUG] [Thread-193391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:37:57.635 [DEBUG] [Thread-193391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:37:57.635 [DEBUG] [Thread-193391] [transport.py] [_log()] client lang: <none>
2026-02-14T22:37:57.635 [DEBUG] [Thread-193391] [transport.py] [_log()] server lang: <none>
2026-02-14T22:37:57.635 [DEBUG] [Thread-193391] [transport.py] [_log()] kex follows: False
2026-02-14T22:37:57.635 [DEBUG] [Thread-193391] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:37:57.635 [DEBUG] [Thread-193391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:37:57.635 [DEBUG] [Thread-193391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:37:57.635 [DEBUG] [Thread-193391] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:37:57.635 [DEBUG] [Thread-193391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:37:57.635 [DEBUG] [Thread-193391] [transport.py] [_log()] Compression: none
2026-02-14T22:37:57.635 [DEBUG] [Thread-193391] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:37:57.693 [DEBUG] [Thread-193391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:37:57.693 [DEBUG] [Thread-193391] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:37:57.693 [DEBUG] [Thread-193391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:37:57.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:37:57.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:37:57.750 [DEBUG] [Thread-193391] [transport.py] [_log()] userauth is OK
2026-02-14T22:37:57.750 [DEBUG] [Thread-193391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:37:57.751 [DEBUG] [Thread-193391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:37:57.751 [DEBUG] [Thread-193391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:37:57.751 [DEBUG] [Thread-193391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:37:57.774 [INFO] [Thread-193391] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:37:57.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-14T22:37:57.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:37:58.559 [DEBUG] [Thread-193391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:37:58.559 [DEBUG] [Thread-193391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:37:58.607 [DEBUG] [Thread-193391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:37:58.608 [DEBUG] [Thread-193391] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:37:58.617 [DEBUG] [Thread-193391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:37:58.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:37:58.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:37: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-14T22:37:58.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:37:58.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:37:58.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:37:58.654 [DEBUG] [Thread-193391] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:38:01.913 [DEBUG] [Thread-193393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:38:12.545 [DEBUG] [Thread-193394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:38:27.603 [DEBUG] [Thread-193395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:38:28.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:38:28.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:38:28.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:38:30.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 38, 13), 6.72, 62.95, 0.0, 39.91, 9.24, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:38:30.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:38:13
2026-02-14T22:38:31.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:38:31.577 [DEBUG] [Thread-193396] [transport.py] [_log()] starting thread (client mode): 0xa2d7a560
2026-02-14T22:38:31.577 [DEBUG] [Thread-193396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:38:31.596 [DEBUG] [Thread-193396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:38:31.596 [INFO] [Thread-193396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:38:31.597 [DEBUG] [Thread-193396] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:38:31.597 [DEBUG] [Thread-193396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:38:31.598 [DEBUG] [Thread-193396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:38:31.598 [DEBUG] [Thread-193396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:38:31.598 [DEBUG] [Thread-193396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:38:31.598 [DEBUG] [Thread-193396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:38:31.598 [DEBUG] [Thread-193396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:38:31.598 [DEBUG] [Thread-193396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:38:31.598 [DEBUG] [Thread-193396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:38:31.598 [DEBUG] [Thread-193396] [transport.py] [_log()] client lang: <none>
2026-02-14T22:38:31.598 [DEBUG] [Thread-193396] [transport.py] [_log()] server lang: <none>
2026-02-14T22:38:31.598 [DEBUG] [Thread-193396] [transport.py] [_log()] kex follows: False
2026-02-14T22:38:31.598 [DEBUG] [Thread-193396] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:38:31.598 [DEBUG] [Thread-193396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:38:31.598 [DEBUG] [Thread-193396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:38:31.598 [DEBUG] [Thread-193396] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:38:31.598 [DEBUG] [Thread-193396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:38:31.598 [DEBUG] [Thread-193396] [transport.py] [_log()] Compression: none
2026-02-14T22:38:31.598 [DEBUG] [Thread-193396] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:38:31.611 [DEBUG] [Thread-193396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:38:31.612 [DEBUG] [Thread-193396] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:38:31.612 [DEBUG] [Thread-193396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:38:31.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:38:31.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:38:31.613 [DEBUG] [Thread-193396] [transport.py] [_log()] userauth is OK
2026-02-14T22:38:31.613 [DEBUG] [Thread-193396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:38:31.613 [DEBUG] [Thread-193396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:38:31.613 [DEBUG] [Thread-193396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:38:31.613 [DEBUG] [Thread-193396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:38:31.632 [INFO] [Thread-193396] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:38:31.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:38:32.252 [DEBUG] [Thread-193396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:38:32.252 [DEBUG] [Thread-193396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:38:32.253 [DEBUG] [Thread-193396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:38:32.293 [DEBUG] [Thread-193396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:38:32.293 [DEBUG] [Thread-193396] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:38:32.295 [DEBUG] [Thread-193396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:38:32.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:38:32.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:38:32.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:38:32.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:38:32.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:38:32.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:38:32.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:38:32.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:38:32.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:38:32.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.859487 -999.00   +9.20  26.94     67   +3.50 1 1 1 1 1     0    0 5.48 -9.01 ZNESW 25.3 26.9 148.2 36.7 9.6 -25.1 9.4 -24.0 9.2 -23.0 9.6 -24.2
2026-02-14T22:38:32.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:38:32.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:38:32.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.859487
2026-02-14T22:38:32.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:38:32.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:38:32.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:38:32.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:38:32.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:38:32.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:38:13', tmtdew=6.72, humidity=62.95, cloud=0.0, wind=39.91, temperature=9.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:38:13', seeing=3.37, atlas_timestamp='2026-02-14T20:37:39.677', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.021249999999998437, -0.002249999999998309, -0.025500000000000966, -0.00849999999999973, -0.008749999999999147, 0.0019999999999988916, -0.012249999999998096, 0.03549999999999898, 0.0009999999999994458, -0.05274999999999963, 0.0005000000000006111, 0.054999999999999716, -0.01875000000000071, 0.0009999999999994458, -0.0045000000000001705, 0.051750000000000185, 0.03849999999999909, -0.04499999999999993, -0.007250000000000867, 0.04449999999999932, 0.021249999999998437, 0.0022500000000000853, 0.013749999999999929, 0.019499999999998963, 0.06799999999999962, 0.01875000000000071, 0.012000000000000455, 0.07399999999999984, -0.0009999999999976694, 0.06700000000000017, 0.06050000000000111, 0.027749999999999275], zp_timestamp='2026-02-14T20:37:00')
2026-02-14T22:38:32.318 [DEBUG] [Thread-193396] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:38:32.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:38:32.414 [DEBUG] [Thread-193399] [transport.py] [_log()] starting thread (client mode): 0xa2d6ded0
2026-02-14T22:38:32.415 [DEBUG] [Thread-193399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:38:32.430 [DEBUG] [Thread-193399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:38:32.430 [INFO] [Thread-193399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:38:32.437 [DEBUG] [Thread-193399] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:38:32.437 [DEBUG] [Thread-193399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:38:32.437 [DEBUG] [Thread-193399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:38:32.438 [DEBUG] [Thread-193399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:38:32.438 [DEBUG] [Thread-193399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:38:32.438 [DEBUG] [Thread-193399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:38:32.438 [DEBUG] [Thread-193399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:38:32.438 [DEBUG] [Thread-193399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:38:32.438 [DEBUG] [Thread-193399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:38:32.438 [DEBUG] [Thread-193399] [transport.py] [_log()] client lang: <none>
2026-02-14T22:38:32.438 [DEBUG] [Thread-193399] [transport.py] [_log()] server lang: <none>
2026-02-14T22:38:32.438 [DEBUG] [Thread-193399] [transport.py] [_log()] kex follows: False
2026-02-14T22:38:32.438 [DEBUG] [Thread-193399] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:38:32.438 [DEBUG] [Thread-193399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:38:32.438 [DEBUG] [Thread-193399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:38:32.438 [DEBUG] [Thread-193399] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:38:32.438 [DEBUG] [Thread-193399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:38:32.438 [DEBUG] [Thread-193399] [transport.py] [_log()] Compression: none
2026-02-14T22:38:32.438 [DEBUG] [Thread-193399] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:38:32.494 [DEBUG] [Thread-193399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:38:32.495 [DEBUG] [Thread-193399] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:38:32.495 [DEBUG] [Thread-193399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:38:32.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:38:32.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:38:32.551 [DEBUG] [Thread-193399] [transport.py] [_log()] userauth is OK
2026-02-14T22:38:32.552 [DEBUG] [Thread-193399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:38:32.552 [DEBUG] [Thread-193399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:38:32.552 [DEBUG] [Thread-193399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:38:32.552 [DEBUG] [Thread-193399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:38:32.570 [INFO] [Thread-193399] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:38:32.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:38:32.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:38:33.366 [DEBUG] [Thread-193399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:38:33.366 [DEBUG] [Thread-193399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:38:33.414 [DEBUG] [Thread-193399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:38:33.414 [DEBUG] [Thread-193399] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:38:33.423 [DEBUG] [Thread-193399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:38:33.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:38:33.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:38:33.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-14T22:38:33.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:38:33.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:38:33.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:38:33.458 [DEBUG] [Thread-193399] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:38:35.118 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:38:42.638 [DEBUG] [Thread-193401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:38:57.644 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:38:57.645 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:38:57.687 [DEBUG] [Thread-193402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:39:02.002 [DEBUG] [Thread-193403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:39:03.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:39:03.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:39:03.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-14T22:39:05.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 38, 48), 6.75, 62.33, 0.0, 30.58, 9.25, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:39:05.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:38:48
2026-02-14T22:39:05.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:39:05.871 [DEBUG] [Thread-193404] [transport.py] [_log()] starting thread (client mode): 0xa57c0f10
2026-02-14T22:39:05.871 [DEBUG] [Thread-193404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:39:05.892 [DEBUG] [Thread-193404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:39:05.892 [INFO] [Thread-193404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:39:05.895 [DEBUG] [Thread-193404] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:39:05.895 [DEBUG] [Thread-193404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:39:05.895 [DEBUG] [Thread-193404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:39:05.896 [DEBUG] [Thread-193404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:39:05.896 [DEBUG] [Thread-193404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:39:05.896 [DEBUG] [Thread-193404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:39:05.896 [DEBUG] [Thread-193404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:39:05.896 [DEBUG] [Thread-193404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:39:05.896 [DEBUG] [Thread-193404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:39:05.896 [DEBUG] [Thread-193404] [transport.py] [_log()] client lang: <none>
2026-02-14T22:39:05.896 [DEBUG] [Thread-193404] [transport.py] [_log()] server lang: <none>
2026-02-14T22:39:05.896 [DEBUG] [Thread-193404] [transport.py] [_log()] kex follows: False
2026-02-14T22:39:05.896 [DEBUG] [Thread-193404] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:39:05.896 [DEBUG] [Thread-193404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:39:05.896 [DEBUG] [Thread-193404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:39:05.896 [DEBUG] [Thread-193404] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:39:05.896 [DEBUG] [Thread-193404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:39:05.896 [DEBUG] [Thread-193404] [transport.py] [_log()] Compression: none
2026-02-14T22:39:05.896 [DEBUG] [Thread-193404] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:39:05.913 [DEBUG] [Thread-193404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:39:05.913 [DEBUG] [Thread-193404] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:39:05.914 [DEBUG] [Thread-193404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:39:05.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:39:05.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:39:05.915 [DEBUG] [Thread-193404] [transport.py] [_log()] userauth is OK
2026-02-14T22:39:05.916 [DEBUG] [Thread-193404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:39:05.916 [DEBUG] [Thread-193404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:39:05.916 [DEBUG] [Thread-193404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:39:05.916 [DEBUG] [Thread-193404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:39:05.931 [INFO] [Thread-193404] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:39:05.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:39:06.587 [DEBUG] [Thread-193404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:39:06.588 [DEBUG] [Thread-193404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:39:06.588 [DEBUG] [Thread-193404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:39:06.629 [DEBUG] [Thread-193404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:39:06.629 [DEBUG] [Thread-193404] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:39:06.632 [DEBUG] [Thread-193404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:39:06.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:39:06.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:39:06.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:39:06.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:39:06.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:39:06.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:39:06.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:39:06.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:39:06.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:39:06.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.859834 -999.00   +9.20  27.84     67   +3.50 1 1 1 1 1     0    0 5.47 -8.60 ZNESW 37.1 27.8 155.8 36.0 9.6 -25.0 9.4 -24.0 9.2 -23.0 9.6 -24.2
2026-02-14T22:39:06.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:39:06.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:39:06.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.859834
2026-02-14T22:39:06.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:39:06.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:39:06.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:39:06.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:39:06.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:39:06.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:38:48', tmtdew=6.75, humidity=62.33, cloud=0.0, wind=30.58, temperature=9.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:38:48', seeing=3.81, atlas_timestamp='2026-02-14T20:38:09.658', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.021249999999998437, -0.002249999999998309, -0.025500000000000966, -0.00849999999999973, -0.008749999999999147, 0.0019999999999988916, -0.012249999999998096, 0.03549999999999898, 0.0009999999999994458, -0.05274999999999963, 0.0005000000000006111, 0.054999999999999716, -0.01875000000000071, 0.0009999999999994458, -0.0045000000000001705, 0.051750000000000185, 0.03849999999999909, -0.04499999999999993, -0.007250000000000867, 0.04449999999999932, 0.021249999999998437, 0.0022500000000000853, 0.013749999999999929, 0.019499999999998963, 0.06799999999999962, 0.01875000000000071, 0.012000000000000455, 0.07399999999999984, -0.0009999999999976694, 0.06700000000000017, 0.06050000000000111, 0.027749999999999275], zp_timestamp='2026-02-14T20:37:00')
2026-02-14T22:39:06.657 [DEBUG] [Thread-193404] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:39:06.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-14T22:39:06.752 [DEBUG] [Thread-193407] [transport.py] [_log()] starting thread (client mode): 0xa5742170
2026-02-14T22:39:06.752 [DEBUG] [Thread-193407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:39:06.767 [DEBUG] [Thread-193407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:39:06.767 [INFO] [Thread-193407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:39:06.774 [DEBUG] [Thread-193407] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:39:06.775 [DEBUG] [Thread-193407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:39:06.775 [DEBUG] [Thread-193407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:39:06.775 [DEBUG] [Thread-193407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:39:06.775 [DEBUG] [Thread-193407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:39:06.775 [DEBUG] [Thread-193407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:39:06.775 [DEBUG] [Thread-193407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:39:06.775 [DEBUG] [Thread-193407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:39:06.775 [DEBUG] [Thread-193407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:39:06.775 [DEBUG] [Thread-193407] [transport.py] [_log()] client lang: <none>
2026-02-14T22:39:06.775 [DEBUG] [Thread-193407] [transport.py] [_log()] server lang: <none>
2026-02-14T22:39:06.775 [DEBUG] [Thread-193407] [transport.py] [_log()] kex follows: False
2026-02-14T22:39:06.776 [DEBUG] [Thread-193407] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:39:06.776 [DEBUG] [Thread-193407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:39:06.776 [DEBUG] [Thread-193407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:39:06.776 [DEBUG] [Thread-193407] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:39:06.776 [DEBUG] [Thread-193407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:39:06.776 [DEBUG] [Thread-193407] [transport.py] [_log()] Compression: none
2026-02-14T22:39:06.776 [DEBUG] [Thread-193407] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:39:06.836 [DEBUG] [Thread-193407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:39:06.837 [DEBUG] [Thread-193407] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:39:06.837 [DEBUG] [Thread-193407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:39:06.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:39:06.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:39:06.894 [DEBUG] [Thread-193407] [transport.py] [_log()] userauth is OK
2026-02-14T22:39:06.895 [DEBUG] [Thread-193407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:39:06.895 [DEBUG] [Thread-193407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:39:06.895 [DEBUG] [Thread-193407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:39:06.895 [DEBUG] [Thread-193407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:39:06.913 [INFO] [Thread-193407] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:39:06.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-14T22:39:06.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:39:07.712 [DEBUG] [Thread-193407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:39:07.713 [DEBUG] [Thread-193407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:39:07.760 [DEBUG] [Thread-193407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:39:07.761 [DEBUG] [Thread-193407] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:39:07.770 [DEBUG] [Thread-193407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:39:07.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:39:07.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-14T22:39:07.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:39:07.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:39:07.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:39:07.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:39:07.807 [DEBUG] [Thread-193407] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:39:12.721 [DEBUG] [Thread-193409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:39:27.773 [DEBUG] [Thread-193410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:39:37.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:39:37.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:39:37.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:39:40.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 39, 24), 6.75, 62.33, 0.0, 31.41, 9.3, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:39:40.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:39:24
2026-02-14T22:39:40.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:39:40.657 [DEBUG] [Thread-193411] [transport.py] [_log()] starting thread (client mode): 0xa57c08e0
2026-02-14T22:39:40.657 [DEBUG] [Thread-193411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:39:40.679 [DEBUG] [Thread-193411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:39:40.679 [INFO] [Thread-193411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:39:40.683 [DEBUG] [Thread-193411] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:39:40.683 [DEBUG] [Thread-193411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:39:40.683 [DEBUG] [Thread-193411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:39:40.683 [DEBUG] [Thread-193411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:39:40.683 [DEBUG] [Thread-193411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:39:40.683 [DEBUG] [Thread-193411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:39:40.683 [DEBUG] [Thread-193411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:39:40.683 [DEBUG] [Thread-193411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:39:40.683 [DEBUG] [Thread-193411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:39:40.683 [DEBUG] [Thread-193411] [transport.py] [_log()] client lang: <none>
2026-02-14T22:39:40.683 [DEBUG] [Thread-193411] [transport.py] [_log()] server lang: <none>
2026-02-14T22:39:40.683 [DEBUG] [Thread-193411] [transport.py] [_log()] kex follows: False
2026-02-14T22:39:40.683 [DEBUG] [Thread-193411] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:39:40.683 [DEBUG] [Thread-193411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:39:40.683 [DEBUG] [Thread-193411] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:39:40.683 [DEBUG] [Thread-193411] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:39:40.683 [DEBUG] [Thread-193411] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:39:40.683 [DEBUG] [Thread-193411] [transport.py] [_log()] Compression: none
2026-02-14T22:39:40.683 [DEBUG] [Thread-193411] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:39:40.699 [DEBUG] [Thread-193411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:39:40.699 [DEBUG] [Thread-193411] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:39:40.700 [DEBUG] [Thread-193411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:39:40.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:39:40.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:39:40.701 [DEBUG] [Thread-193411] [transport.py] [_log()] userauth is OK
2026-02-14T22:39:40.702 [DEBUG] [Thread-193411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:39:40.702 [DEBUG] [Thread-193411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:39:40.702 [DEBUG] [Thread-193411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:39:40.702 [DEBUG] [Thread-193411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:39:40.715 [INFO] [Thread-193411] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:39:40.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:39:41.372 [DEBUG] [Thread-193411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:39:41.373 [DEBUG] [Thread-193411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:39:41.373 [DEBUG] [Thread-193411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:39:41.413 [DEBUG] [Thread-193411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:39:41.413 [DEBUG] [Thread-193411] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:39:41.417 [DEBUG] [Thread-193411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:39:41.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:39:41.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:39:41.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:39:41.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:39:41.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:39:41.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:39:41.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:39:41.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:39:41.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:39:41.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.860528 -999.00   +9.20  26.81     67   +3.50 1 1 1 1 1     0    0 5.54 -6.82 ZNESW 27.1 26.8 159.0 37.9 9.6 -25.0 9.4 -24.0 9.2 -23.0 9.6 -24.2
2026-02-14T22:39:41.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:39:41.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:39:41.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.860528
2026-02-14T22:39:41.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:39:41.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:39:41.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:39:41.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:39:41.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:39:41.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:39:24', tmtdew=6.75, humidity=62.33, cloud=0.0, wind=31.41, temperature=9.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:39:24', seeing=3.47, atlas_timestamp='2026-02-14T20:39:09.619', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.021249999999998437, -0.002249999999998309, -0.025500000000000966, -0.00849999999999973, -0.008749999999999147, 0.0019999999999988916, -0.012249999999998096, 0.03549999999999898, 0.0009999999999994458, -0.05274999999999963, 0.0005000000000006111, 0.054999999999999716, -0.01875000000000071, 0.0009999999999994458, -0.0045000000000001705, 0.051750000000000185, 0.03849999999999909, -0.04499999999999993, -0.007250000000000867, 0.04449999999999932, 0.021249999999998437, 0.0022500000000000853, 0.013749999999999929, 0.019499999999998963, 0.06799999999999962, 0.01875000000000071, 0.012000000000000455, 0.07399999999999984, -0.0009999999999976694, 0.06700000000000017, 0.06050000000000111, 0.027749999999999275], zp_timestamp='2026-02-14T20:37:00')
2026-02-14T22:39:41.443 [DEBUG] [Thread-193411] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:39:41.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-14T22:39:41.541 [DEBUG] [Thread-193414] [transport.py] [_log()] starting thread (client mode): 0xa2d7acb0
2026-02-14T22:39:41.541 [DEBUG] [Thread-193414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:39:41.555 [DEBUG] [Thread-193414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:39:41.555 [INFO] [Thread-193414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:39:41.562 [DEBUG] [Thread-193414] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:39:41.562 [DEBUG] [Thread-193414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:39:41.563 [DEBUG] [Thread-193414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:39:41.563 [DEBUG] [Thread-193414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:39:41.563 [DEBUG] [Thread-193414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:39:41.563 [DEBUG] [Thread-193414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:39:41.563 [DEBUG] [Thread-193414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:39:41.563 [DEBUG] [Thread-193414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:39:41.563 [DEBUG] [Thread-193414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:39:41.563 [DEBUG] [Thread-193414] [transport.py] [_log()] client lang: <none>
2026-02-14T22:39:41.563 [DEBUG] [Thread-193414] [transport.py] [_log()] server lang: <none>
2026-02-14T22:39:41.563 [DEBUG] [Thread-193414] [transport.py] [_log()] kex follows: False
2026-02-14T22:39:41.563 [DEBUG] [Thread-193414] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:39:41.563 [DEBUG] [Thread-193414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:39:41.564 [DEBUG] [Thread-193414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:39:41.564 [DEBUG] [Thread-193414] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:39:41.564 [DEBUG] [Thread-193414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:39:41.564 [DEBUG] [Thread-193414] [transport.py] [_log()] Compression: none
2026-02-14T22:39:41.564 [DEBUG] [Thread-193414] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:39:41.621 [DEBUG] [Thread-193414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:39:41.622 [DEBUG] [Thread-193414] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:39:41.622 [DEBUG] [Thread-193414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:39:41.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:39:41.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:39:41.677 [DEBUG] [Thread-193414] [transport.py] [_log()] userauth is OK
2026-02-14T22:39:41.677 [DEBUG] [Thread-193414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:39:41.677 [DEBUG] [Thread-193414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:39:41.677 [DEBUG] [Thread-193414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:39:41.678 [DEBUG] [Thread-193414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:39:41.701 [INFO] [Thread-193414] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:39:41.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-14T22:39:41.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:39:42.589 [DEBUG] [Thread-193414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:39:42.589 [DEBUG] [Thread-193414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:39:42.637 [DEBUG] [Thread-193414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:39:42.638 [DEBUG] [Thread-193414] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:39:42.647 [DEBUG] [Thread-193414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:39:42.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:39:42.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-14T22:39:42.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-14T22:39:42.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:39:42.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:39:42.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:39:42.686 [DEBUG] [Thread-193414] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:39:42.808 [DEBUG] [Thread-193416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:39:57.844 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:39:57.846 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:39:57.859 [DEBUG] [Thread-193417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:40:02.062 [DEBUG] [Thread-193418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:40:08.669 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:40:12.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:40:12.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:40:12.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-14T22:40:12.899 [DEBUG] [Thread-193419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:40:14.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 39, 59), 6.78, 62.4, 0.0, 30.68, 9.25, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:40:14.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:39:59
2026-02-14T22:40:14.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:40:15.103 [DEBUG] [Thread-193420] [transport.py] [_log()] starting thread (client mode): 0xa2d12320
2026-02-14T22:40:15.103 [DEBUG] [Thread-193420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:40:15.124 [DEBUG] [Thread-193420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:40:15.124 [INFO] [Thread-193420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:40:15.127 [DEBUG] [Thread-193420] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:40:15.127 [DEBUG] [Thread-193420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:40:15.127 [DEBUG] [Thread-193420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:40:15.127 [DEBUG] [Thread-193420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:40:15.127 [DEBUG] [Thread-193420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:40:15.128 [DEBUG] [Thread-193420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:40:15.128 [DEBUG] [Thread-193420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:40:15.128 [DEBUG] [Thread-193420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:40:15.128 [DEBUG] [Thread-193420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:40:15.128 [DEBUG] [Thread-193420] [transport.py] [_log()] client lang: <none>
2026-02-14T22:40:15.128 [DEBUG] [Thread-193420] [transport.py] [_log()] server lang: <none>
2026-02-14T22:40:15.128 [DEBUG] [Thread-193420] [transport.py] [_log()] kex follows: False
2026-02-14T22:40:15.128 [DEBUG] [Thread-193420] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:40:15.128 [DEBUG] [Thread-193420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:40:15.128 [DEBUG] [Thread-193420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:40:15.128 [DEBUG] [Thread-193420] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:40:15.128 [DEBUG] [Thread-193420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:40:15.128 [DEBUG] [Thread-193420] [transport.py] [_log()] Compression: none
2026-02-14T22:40:15.128 [DEBUG] [Thread-193420] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:40:15.145 [DEBUG] [Thread-193420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:40:15.145 [DEBUG] [Thread-193420] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:40:15.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:40:15.146 [DEBUG] [Thread-193420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:40:15.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:40:15.149 [DEBUG] [Thread-193420] [transport.py] [_log()] userauth is OK
2026-02-14T22:40:15.149 [DEBUG] [Thread-193420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:40:15.149 [DEBUG] [Thread-193420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:40:15.149 [DEBUG] [Thread-193420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:40:15.149 [DEBUG] [Thread-193420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:40:15.174 [INFO] [Thread-193420] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:40:15.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:40:16.005 [DEBUG] [Thread-193420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:40:16.006 [DEBUG] [Thread-193420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:40:16.006 [DEBUG] [Thread-193420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:40:16.046 [DEBUG] [Thread-193420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:40:16.047 [DEBUG] [Thread-193420] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:40:16.050 [DEBUG] [Thread-193420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:40:16.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:40:16.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:40:16.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:40:16.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:40:16.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:40:16.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:40:16.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:40:16.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:40:16.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:40:16.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.860876 -999.00   +9.20  26.46     67   +3.50 1 1 1 1 1     0    0 5.54 -6.37 ZNESW 26.6 26.5 144.2 37.0 9.6 -25.2 9.5 -24.0 9.2 -23.0 9.6 -24.3
2026-02-14T22:40:16.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:40:16.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:40:16.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.860876
2026-02-14T22:40:16.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:40:16.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:40:16.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:40:16.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:40:16.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:40:16.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:39:59', tmtdew=6.78, humidity=62.4, cloud=0.0, wind=30.68, temperature=9.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:39:59', seeing=4.03, atlas_timestamp='2026-02-14T20:39:39.686', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.021249999999998437, -0.002249999999998309, -0.025500000000000966, -0.00849999999999973, -0.008749999999999147, 0.0019999999999988916, -0.012249999999998096, 0.03549999999999898, 0.0009999999999994458, -0.05274999999999963, 0.0005000000000006111, 0.054999999999999716, -0.01875000000000071, 0.0009999999999994458, -0.0045000000000001705, 0.051750000000000185, 0.03849999999999909, -0.04499999999999993, -0.007250000000000867, 0.04449999999999932, 0.021249999999998437, 0.0022500000000000853, 0.013749999999999929, 0.019499999999998963, 0.06799999999999962, 0.01875000000000071, 0.012000000000000455, 0.07399999999999984, -0.0009999999999976694, 0.06700000000000017, 0.06050000000000111, 0.027749999999999275], zp_timestamp='2026-02-14T20:37:00')
2026-02-14T22:40:16.078 [DEBUG] [Thread-193420] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:40:16.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-14T22:40:16.173 [DEBUG] [Thread-193423] [transport.py] [_log()] starting thread (client mode): 0xa57c1630
2026-02-14T22:40:16.173 [DEBUG] [Thread-193423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:40:16.189 [DEBUG] [Thread-193423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:40:16.189 [INFO] [Thread-193423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:40:16.196 [DEBUG] [Thread-193423] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:40:16.197 [DEBUG] [Thread-193423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:40:16.197 [DEBUG] [Thread-193423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:40:16.197 [DEBUG] [Thread-193423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:40:16.197 [DEBUG] [Thread-193423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:40:16.197 [DEBUG] [Thread-193423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:40:16.197 [DEBUG] [Thread-193423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:40:16.197 [DEBUG] [Thread-193423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:40:16.197 [DEBUG] [Thread-193423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:40:16.197 [DEBUG] [Thread-193423] [transport.py] [_log()] client lang: <none>
2026-02-14T22:40:16.197 [DEBUG] [Thread-193423] [transport.py] [_log()] server lang: <none>
2026-02-14T22:40:16.197 [DEBUG] [Thread-193423] [transport.py] [_log()] kex follows: False
2026-02-14T22:40:16.197 [DEBUG] [Thread-193423] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:40:16.197 [DEBUG] [Thread-193423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:40:16.197 [DEBUG] [Thread-193423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:40:16.197 [DEBUG] [Thread-193423] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:40:16.197 [DEBUG] [Thread-193423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:40:16.197 [DEBUG] [Thread-193423] [transport.py] [_log()] Compression: none
2026-02-14T22:40:16.198 [DEBUG] [Thread-193423] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:40:16.256 [DEBUG] [Thread-193423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:40:16.257 [DEBUG] [Thread-193423] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:40:16.257 [DEBUG] [Thread-193423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:40:16.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:40:16.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:40:16.315 [DEBUG] [Thread-193423] [transport.py] [_log()] userauth is OK
2026-02-14T22:40:16.315 [DEBUG] [Thread-193423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:40:16.315 [DEBUG] [Thread-193423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:40:16.315 [DEBUG] [Thread-193423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:40:16.315 [DEBUG] [Thread-193423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:40:16.340 [INFO] [Thread-193423] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:40: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-14T22:40:16.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:40:17.143 [DEBUG] [Thread-193423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:40:17.143 [DEBUG] [Thread-193423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:40:17.192 [DEBUG] [Thread-193423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:40:17.192 [DEBUG] [Thread-193423] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:40:17.204 [DEBUG] [Thread-193423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:40:17.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:40:17.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:40:17.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-14T22:40:17.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:40:17.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:40:17.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:40:17.241 [DEBUG] [Thread-193423] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:40:27.934 [DEBUG] [Thread-193425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:40:42.977 [DEBUG] [Thread-193426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:40:47.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:40:47.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:40:47.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-14T22:40:49.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 40, 34), 6.96, 61.76, 0.0, 32.46, 9.51, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:40:49.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:40:34
2026-02-14T22:40:49.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:40:49.643 [DEBUG] [Thread-193427] [transport.py] [_log()] starting thread (client mode): 0xa57408b0
2026-02-14T22:40:49.643 [DEBUG] [Thread-193427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:40:49.665 [DEBUG] [Thread-193427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:40:49.665 [INFO] [Thread-193427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:40:49.668 [DEBUG] [Thread-193427] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:40:49.668 [DEBUG] [Thread-193427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:40:49.668 [DEBUG] [Thread-193427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:40:49.668 [DEBUG] [Thread-193427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:40:49.668 [DEBUG] [Thread-193427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:40:49.668 [DEBUG] [Thread-193427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:40:49.669 [DEBUG] [Thread-193427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:40:49.669 [DEBUG] [Thread-193427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:40:49.669 [DEBUG] [Thread-193427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:40:49.669 [DEBUG] [Thread-193427] [transport.py] [_log()] client lang: <none>
2026-02-14T22:40:49.669 [DEBUG] [Thread-193427] [transport.py] [_log()] server lang: <none>
2026-02-14T22:40:49.669 [DEBUG] [Thread-193427] [transport.py] [_log()] kex follows: False
2026-02-14T22:40:49.669 [DEBUG] [Thread-193427] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:40:49.669 [DEBUG] [Thread-193427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:40:49.669 [DEBUG] [Thread-193427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:40:49.669 [DEBUG] [Thread-193427] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:40:49.669 [DEBUG] [Thread-193427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:40:49.669 [DEBUG] [Thread-193427] [transport.py] [_log()] Compression: none
2026-02-14T22:40:49.669 [DEBUG] [Thread-193427] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:40:49.686 [DEBUG] [Thread-193427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:40:49.687 [DEBUG] [Thread-193427] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:40:49.687 [DEBUG] [Thread-193427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:40:49.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:40:49.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:40:49.689 [DEBUG] [Thread-193427] [transport.py] [_log()] userauth is OK
2026-02-14T22:40:49.690 [DEBUG] [Thread-193427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:40:49.690 [DEBUG] [Thread-193427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:40:49.690 [DEBUG] [Thread-193427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:40:49.690 [DEBUG] [Thread-193427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:40:49.715 [INFO] [Thread-193427] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:40:49.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:40:50.357 [DEBUG] [Thread-193427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:40:50.358 [DEBUG] [Thread-193427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:40:50.358 [DEBUG] [Thread-193427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:40:50.399 [DEBUG] [Thread-193427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:40:50.399 [DEBUG] [Thread-193427] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:40:50.402 [DEBUG] [Thread-193427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:40:50.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:40:50.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:40:50.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:40:50.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:40:50.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:40:50.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:40:50.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:40:50.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:40:50.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:40:50.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.861223 -999.00   +9.20  19.71     67   +3.50 1 1 1 1 1     0    0 5.50 -6.16 ZNESW 21.8 19.7 161.5 36.2 9.6 -25.1 9.4 -24.1 9.2 -23.1 9.6 -24.1
2026-02-14T22:40:50.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:40:50.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:40:50.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.861223
2026-02-14T22:40:50.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:40:50.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:40:50.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:40:50.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:40:50.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:40:50.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:40:34', tmtdew=6.96, humidity=61.76, cloud=0.0, wind=32.46, temperature=9.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:40:35', seeing=4.05, atlas_timestamp='2026-02-14T20:40:09.667', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.021249999999998437, -0.002249999999998309, -0.025500000000000966, -0.00849999999999973, -0.008749999999999147, 0.0019999999999988916, -0.012249999999998096, 0.03549999999999898, 0.0009999999999994458, -0.05274999999999963, 0.0005000000000006111, 0.054999999999999716, -0.01875000000000071, 0.0009999999999994458, -0.0045000000000001705, 0.051750000000000185, 0.03849999999999909, -0.04499999999999993, -0.007250000000000867, 0.04449999999999932, 0.021249999999998437, 0.0022500000000000853, 0.013749999999999929, 0.019499999999998963, 0.06799999999999962, 0.01875000000000071, 0.012000000000000455, 0.07399999999999984, -0.0009999999999976694, 0.06700000000000017, 0.06050000000000111, 0.027749999999999275], zp_timestamp='2026-02-14T20:37:00')
2026-02-14T22:40:50.428 [DEBUG] [Thread-193427] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:40:50.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:40:50.524 [DEBUG] [Thread-193430] [transport.py] [_log()] starting thread (client mode): 0xa2d6fbe0
2026-02-14T22:40:50.524 [DEBUG] [Thread-193430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:40:50.538 [DEBUG] [Thread-193430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:40:50.538 [INFO] [Thread-193430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:40:50.546 [DEBUG] [Thread-193430] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:40:50.546 [DEBUG] [Thread-193430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:40:50.546 [DEBUG] [Thread-193430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:40:50.546 [DEBUG] [Thread-193430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:40:50.546 [DEBUG] [Thread-193430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:40:50.546 [DEBUG] [Thread-193430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:40:50.546 [DEBUG] [Thread-193430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:40:50.546 [DEBUG] [Thread-193430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:40:50.547 [DEBUG] [Thread-193430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:40:50.547 [DEBUG] [Thread-193430] [transport.py] [_log()] client lang: <none>
2026-02-14T22:40:50.547 [DEBUG] [Thread-193430] [transport.py] [_log()] server lang: <none>
2026-02-14T22:40:50.547 [DEBUG] [Thread-193430] [transport.py] [_log()] kex follows: False
2026-02-14T22:40:50.547 [DEBUG] [Thread-193430] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:40:50.547 [DEBUG] [Thread-193430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:40:50.547 [DEBUG] [Thread-193430] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:40:50.547 [DEBUG] [Thread-193430] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:40:50.547 [DEBUG] [Thread-193430] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:40:50.547 [DEBUG] [Thread-193430] [transport.py] [_log()] Compression: none
2026-02-14T22:40:50.547 [DEBUG] [Thread-193430] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:40:50.610 [DEBUG] [Thread-193430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:40:50.610 [DEBUG] [Thread-193430] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:40:50.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:40:50.611 [DEBUG] [Thread-193430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:40:50.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:40:50.666 [DEBUG] [Thread-193430] [transport.py] [_log()] userauth is OK
2026-02-14T22:40:50.667 [DEBUG] [Thread-193430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:40:50.668 [DEBUG] [Thread-193430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:40:50.668 [DEBUG] [Thread-193430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:40:50.668 [DEBUG] [Thread-193430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:40:50.686 [INFO] [Thread-193430] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:40:50.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-14T22:40:50.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:40:51.478 [DEBUG] [Thread-193430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:40:51.479 [DEBUG] [Thread-193430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:40:51.526 [DEBUG] [Thread-193430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:40:51.526 [DEBUG] [Thread-193430] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:40:51.535 [DEBUG] [Thread-193430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:40:51.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:40:51.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-14T22:40:51.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-14T22:40:51.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:40:51.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:40:51.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:40:51.568 [DEBUG] [Thread-193430] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:40:58.015 [DEBUG] [Thread-193432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:40:58.045 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:40:58.045 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:41:02.116 [DEBUG] [Thread-193433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:41:13.067 [DEBUG] [Thread-193434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:41:21.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:41:21.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:41:21.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-14T22:41:23.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 41, 10), 6.81, 62.5, 0.0, 39.15, 9.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:41:23.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:41:10
2026-02-14T22:41:24.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:41:24.204 [DEBUG] [Thread-193435] [transport.py] [_log()] starting thread (client mode): 0xa57413c0
2026-02-14T22:41:24.204 [DEBUG] [Thread-193435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:41:24.224 [DEBUG] [Thread-193435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:41:24.224 [INFO] [Thread-193435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:41:24.227 [DEBUG] [Thread-193435] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:41:24.228 [DEBUG] [Thread-193435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:41:24.228 [DEBUG] [Thread-193435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:41:24.228 [DEBUG] [Thread-193435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:41:24.228 [DEBUG] [Thread-193435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:41:24.228 [DEBUG] [Thread-193435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:41:24.228 [DEBUG] [Thread-193435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:41:24.228 [DEBUG] [Thread-193435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:41:24.228 [DEBUG] [Thread-193435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:41:24.228 [DEBUG] [Thread-193435] [transport.py] [_log()] client lang: <none>
2026-02-14T22:41:24.228 [DEBUG] [Thread-193435] [transport.py] [_log()] server lang: <none>
2026-02-14T22:41:24.228 [DEBUG] [Thread-193435] [transport.py] [_log()] kex follows: False
2026-02-14T22:41:24.228 [DEBUG] [Thread-193435] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:41:24.228 [DEBUG] [Thread-193435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:41:24.228 [DEBUG] [Thread-193435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:41:24.229 [DEBUG] [Thread-193435] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:41:24.229 [DEBUG] [Thread-193435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:41:24.229 [DEBUG] [Thread-193435] [transport.py] [_log()] Compression: none
2026-02-14T22:41:24.229 [DEBUG] [Thread-193435] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:41:24.247 [DEBUG] [Thread-193435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:41:24.247 [DEBUG] [Thread-193435] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:41:24.248 [DEBUG] [Thread-193435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:41:24.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:41:24.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:41:24.250 [DEBUG] [Thread-193435] [transport.py] [_log()] userauth is OK
2026-02-14T22:41:24.250 [DEBUG] [Thread-193435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:41:24.250 [DEBUG] [Thread-193435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:41:24.250 [DEBUG] [Thread-193435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:41:24.250 [DEBUG] [Thread-193435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:41:24.268 [INFO] [Thread-193435] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:41:24.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:41:25.043 [DEBUG] [Thread-193435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:41:25.044 [DEBUG] [Thread-193435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:41:25.044 [DEBUG] [Thread-193435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:41:25.084 [DEBUG] [Thread-193435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:41:25.084 [DEBUG] [Thread-193435] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:41:25.088 [DEBUG] [Thread-193435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:41:25.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:41:25.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:41:25.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:41:25.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:41:25.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:41:25.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:41:25.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:41:25.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:41:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:41:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.861570 -999.00   +9.20  25.86     67   +3.50 1 1 1 1 1     0    0 5.48 -5.66 ZNESW 23.0 25.9 160.6 33.7 9.6 -25.0 9.4 -24.0 9.2 -22.9 9.6 -24.2
2026-02-14T22:41:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:41:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:41:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.861570
2026-02-14T22:41:25.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:41:25.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:41:25.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:41:25.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:41:25.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:41:25.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:41:10', tmtdew=6.81, humidity=62.5, cloud=0.0, wind=39.15, temperature=9.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:41:11', seeing=4.05, atlas_timestamp='2026-02-14T20:40:39.648', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.021249999999998437, -0.002249999999998309, -0.025500000000000966, -0.00849999999999973, -0.008749999999999147, 0.0019999999999988916, -0.012249999999998096, 0.03549999999999898, 0.0009999999999994458, -0.05274999999999963, 0.0005000000000006111, 0.054999999999999716, -0.01875000000000071, 0.0009999999999994458, -0.0045000000000001705, 0.051750000000000185, 0.03849999999999909, -0.04499999999999993, -0.007250000000000867, 0.04449999999999932, 0.021249999999998437, 0.0022500000000000853, 0.013749999999999929, 0.019499999999998963, 0.06799999999999962, 0.01875000000000071, 0.012000000000000455, 0.07399999999999984, -0.0009999999999976694, 0.06700000000000017, 0.06050000000000111, 0.027749999999999275], zp_timestamp='2026-02-14T20:37:00')
2026-02-14T22:41:25.114 [DEBUG] [Thread-193435] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:41:25.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-14T22:41:25.210 [DEBUG] [Thread-193438] [transport.py] [_log()] starting thread (client mode): 0xa2d7b4c0
2026-02-14T22:41:25.210 [DEBUG] [Thread-193438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:41:25.225 [DEBUG] [Thread-193438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:41:25.225 [INFO] [Thread-193438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:41:25.232 [DEBUG] [Thread-193438] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:41:25.233 [DEBUG] [Thread-193438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:41:25.233 [DEBUG] [Thread-193438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:41:25.233 [DEBUG] [Thread-193438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:41:25.233 [DEBUG] [Thread-193438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:41:25.233 [DEBUG] [Thread-193438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:41:25.233 [DEBUG] [Thread-193438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:41:25.233 [DEBUG] [Thread-193438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:41:25.233 [DEBUG] [Thread-193438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:41:25.233 [DEBUG] [Thread-193438] [transport.py] [_log()] client lang: <none>
2026-02-14T22:41:25.233 [DEBUG] [Thread-193438] [transport.py] [_log()] server lang: <none>
2026-02-14T22:41:25.233 [DEBUG] [Thread-193438] [transport.py] [_log()] kex follows: False
2026-02-14T22:41:25.233 [DEBUG] [Thread-193438] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:41:25.233 [DEBUG] [Thread-193438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:41:25.233 [DEBUG] [Thread-193438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:41:25.233 [DEBUG] [Thread-193438] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:41:25.233 [DEBUG] [Thread-193438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:41:25.233 [DEBUG] [Thread-193438] [transport.py] [_log()] Compression: none
2026-02-14T22:41:25.233 [DEBUG] [Thread-193438] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:41:25.290 [DEBUG] [Thread-193438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:41:25.291 [DEBUG] [Thread-193438] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:41:25.291 [DEBUG] [Thread-193438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:41:25.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:41:25.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:41:25.348 [DEBUG] [Thread-193438] [transport.py] [_log()] userauth is OK
2026-02-14T22:41:25.348 [DEBUG] [Thread-193438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:41:25.348 [DEBUG] [Thread-193438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:41:25.348 [DEBUG] [Thread-193438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:41:25.348 [DEBUG] [Thread-193438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:41:25.362 [INFO] [Thread-193438] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:41:25.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-14T22:41:25.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:41:26.189 [DEBUG] [Thread-193438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:41:26.190 [DEBUG] [Thread-193438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:41:26.237 [DEBUG] [Thread-193438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:41:26.237 [DEBUG] [Thread-193438] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:41:26.246 [DEBUG] [Thread-193438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:41:26.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:41:26.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-14T22:41:26.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-14T22:41:26.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:41:26.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:41:26.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:41:26.283 [DEBUG] [Thread-193438] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:41:28.103 [DEBUG] [Thread-193440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:41:42.115 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:41:43.152 [DEBUG] [Thread-193441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:41:56.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:41:56.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:41:56.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:41:58.189 [DEBUG] [Thread-193442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:41:58.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 41, 47), 6.82, 62.43, 0.0, 33.47, 9.3, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:41:58.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:41:47
2026-02-14T22:41:58.245 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:41:58.246 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:41:58.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:41:58.690 [DEBUG] [Thread-193443] [transport.py] [_log()] starting thread (client mode): 0xa2d6d240
2026-02-14T22:41:58.690 [DEBUG] [Thread-193443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:41:58.710 [DEBUG] [Thread-193443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:41:58.710 [INFO] [Thread-193443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:41:58.714 [DEBUG] [Thread-193443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:41:58.714 [DEBUG] [Thread-193443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:41:58.714 [DEBUG] [Thread-193443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:41:58.714 [DEBUG] [Thread-193443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:41:58.714 [DEBUG] [Thread-193443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:41:58.714 [DEBUG] [Thread-193443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:41:58.714 [DEBUG] [Thread-193443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:41:58.714 [DEBUG] [Thread-193443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:41:58.714 [DEBUG] [Thread-193443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:41:58.714 [DEBUG] [Thread-193443] [transport.py] [_log()] client lang: <none>
2026-02-14T22:41:58.714 [DEBUG] [Thread-193443] [transport.py] [_log()] server lang: <none>
2026-02-14T22:41:58.714 [DEBUG] [Thread-193443] [transport.py] [_log()] kex follows: False
2026-02-14T22:41:58.714 [DEBUG] [Thread-193443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:41:58.714 [DEBUG] [Thread-193443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:41:58.714 [DEBUG] [Thread-193443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:41:58.714 [DEBUG] [Thread-193443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:41:58.714 [DEBUG] [Thread-193443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:41:58.714 [DEBUG] [Thread-193443] [transport.py] [_log()] Compression: none
2026-02-14T22:41:58.714 [DEBUG] [Thread-193443] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:41:58.732 [DEBUG] [Thread-193443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:41:58.733 [DEBUG] [Thread-193443] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:41:58.733 [DEBUG] [Thread-193443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:41:58.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:41:58.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:41:58.736 [DEBUG] [Thread-193443] [transport.py] [_log()] userauth is OK
2026-02-14T22:41:58.736 [DEBUG] [Thread-193443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:41:58.736 [DEBUG] [Thread-193443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:41:58.736 [DEBUG] [Thread-193443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:41:58.736 [DEBUG] [Thread-193443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:41:58.752 [INFO] [Thread-193443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:41:58.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:41:59.351 [DEBUG] [Thread-193443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:41:59.351 [DEBUG] [Thread-193443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:41:59.351 [DEBUG] [Thread-193443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:41:59.393 [DEBUG] [Thread-193443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:41:59.393 [DEBUG] [Thread-193443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:41:59.396 [DEBUG] [Thread-193443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:41:59.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:41:59.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:41:59.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:41:59.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:41:59.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:41:59.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:41:59.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:41:59.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:41:59.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:41:59.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.861917 -999.00   +9.20  26.18     67   +3.50 1 1 1 1 1     0    0 5.51 -4.83 ZNESW 28.1 26.2 164.6 36.4 9.6 -25.0 9.4 -24.0 9.2 -22.8 9.6 -24.2
2026-02-14T22:41:59.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:41:59.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:41:59.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.861917
2026-02-14T22:41:59.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:41:59.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:41:59.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:41:59.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:41:59.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:41:59.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:41:47', tmtdew=6.82, humidity=62.43, cloud=0.0, wind=33.47, temperature=9.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:41:47', seeing=4.01, atlas_timestamp='2026-02-14T20:41:09.629', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.044749999999998735, -0.005749999999999034, -0.005500000000001393, -0.009499999999999176, -0.012749999999998707, 0.0029999999999983373, -0.009749999999998593, 0.0045000000000001705, 0.005000000000000782, -0.07875000000000121, 0.002000000000000668, 0.05799999999999983, 0.004249999999998977, 0.0019999999999988916, 0.02549999999999919, 0.045249999999999346, 0.05749999999999922, -0.030000000000001137, 0.010249999999999204, 0.0519999999999996, 0.01774999999999949, -0.021749999999999048, 0.010749999999999815, 0.02099999999999902, 0.037499999999999645, 0.003750000000000142, 0.01950000000000074, 0.0519999999999996, 0.0519999999999996, 0.040000000000000924, 0.06300000000000061, 0.040749999999999176], zp_timestamp='2026-02-14T20:40:00')
2026-02-14T22:41:59.424 [DEBUG] [Thread-193443] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:41:59.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-14T22:41:59.516 [DEBUG] [Thread-193446] [transport.py] [_log()] starting thread (client mode): 0xa57c1cc0
2026-02-14T22:41:59.516 [DEBUG] [Thread-193446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:41:59.531 [DEBUG] [Thread-193446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:41:59.531 [INFO] [Thread-193446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:41:59.538 [DEBUG] [Thread-193446] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:41:59.539 [DEBUG] [Thread-193446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:41:59.539 [DEBUG] [Thread-193446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:41:59.539 [DEBUG] [Thread-193446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:41:59.539 [DEBUG] [Thread-193446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:41:59.539 [DEBUG] [Thread-193446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:41:59.539 [DEBUG] [Thread-193446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:41:59.539 [DEBUG] [Thread-193446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:41:59.539 [DEBUG] [Thread-193446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:41:59.539 [DEBUG] [Thread-193446] [transport.py] [_log()] client lang: <none>
2026-02-14T22:41:59.539 [DEBUG] [Thread-193446] [transport.py] [_log()] server lang: <none>
2026-02-14T22:41:59.539 [DEBUG] [Thread-193446] [transport.py] [_log()] kex follows: False
2026-02-14T22:41:59.539 [DEBUG] [Thread-193446] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:41:59.539 [DEBUG] [Thread-193446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:41:59.539 [DEBUG] [Thread-193446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:41:59.539 [DEBUG] [Thread-193446] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:41:59.539 [DEBUG] [Thread-193446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:41:59.540 [DEBUG] [Thread-193446] [transport.py] [_log()] Compression: none
2026-02-14T22:41:59.540 [DEBUG] [Thread-193446] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:41:59.599 [DEBUG] [Thread-193446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:41:59.599 [DEBUG] [Thread-193446] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:41:59.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:41:59.601 [DEBUG] [Thread-193446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:41:59.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:41:59.655 [DEBUG] [Thread-193446] [transport.py] [_log()] userauth is OK
2026-02-14T22:41:59.655 [DEBUG] [Thread-193446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:41:59.656 [DEBUG] [Thread-193446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:41:59.656 [DEBUG] [Thread-193446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:41:59.656 [DEBUG] [Thread-193446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:41:59.675 [INFO] [Thread-193446] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:41:59.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-14T22:41:59.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:42:00.481 [DEBUG] [Thread-193446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:42:00.481 [DEBUG] [Thread-193446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:42:00.529 [DEBUG] [Thread-193446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:42:00.529 [DEBUG] [Thread-193446] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:42:00.537 [DEBUG] [Thread-193446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:42:00.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:42:00.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-14T22:42: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-14T22:42:00.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:42:00.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:42:00.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:42:00.571 [DEBUG] [Thread-193446] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:42:02.173 [DEBUG] [Thread-193448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:42:13.223 [DEBUG] [Thread-193449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:42:28.284 [DEBUG] [Thread-193450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:42:30.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:42:30.594 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:42: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-14T22:42:32.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 42, 24), 6.83, 62.41, 0.0, 32.66, 9.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:42:32.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:42:24
2026-02-14T22:42:33.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:42:33.539 [DEBUG] [Thread-193451] [transport.py] [_log()] starting thread (client mode): 0xa57d7700
2026-02-14T22:42:33.540 [DEBUG] [Thread-193451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:42:33.560 [DEBUG] [Thread-193451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:42:33.560 [INFO] [Thread-193451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:42:33.563 [DEBUG] [Thread-193451] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:42:33.563 [DEBUG] [Thread-193451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:42:33.563 [DEBUG] [Thread-193451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:42:33.563 [DEBUG] [Thread-193451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:42:33.563 [DEBUG] [Thread-193451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:42:33.563 [DEBUG] [Thread-193451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:42:33.564 [DEBUG] [Thread-193451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:42:33.564 [DEBUG] [Thread-193451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:42:33.564 [DEBUG] [Thread-193451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:42:33.564 [DEBUG] [Thread-193451] [transport.py] [_log()] client lang: <none>
2026-02-14T22:42:33.564 [DEBUG] [Thread-193451] [transport.py] [_log()] server lang: <none>
2026-02-14T22:42:33.564 [DEBUG] [Thread-193451] [transport.py] [_log()] kex follows: False
2026-02-14T22:42:33.564 [DEBUG] [Thread-193451] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:42:33.564 [DEBUG] [Thread-193451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:42:33.564 [DEBUG] [Thread-193451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:42:33.564 [DEBUG] [Thread-193451] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:42:33.564 [DEBUG] [Thread-193451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:42:33.564 [DEBUG] [Thread-193451] [transport.py] [_log()] Compression: none
2026-02-14T22:42:33.564 [DEBUG] [Thread-193451] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:42:33.586 [DEBUG] [Thread-193451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:42:33.587 [DEBUG] [Thread-193451] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:42:33.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:42:33.588 [DEBUG] [Thread-193451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:42:33.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:42:33.590 [DEBUG] [Thread-193451] [transport.py] [_log()] userauth is OK
2026-02-14T22:42:33.590 [DEBUG] [Thread-193451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:42:33.591 [DEBUG] [Thread-193451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:42:33.591 [DEBUG] [Thread-193451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:42:33.591 [DEBUG] [Thread-193451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:42:33.628 [INFO] [Thread-193451] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:42:33.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:42:34.272 [DEBUG] [Thread-193451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:42:34.272 [DEBUG] [Thread-193451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:42:34.272 [DEBUG] [Thread-193451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:42:34.313 [DEBUG] [Thread-193451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:42:34.313 [DEBUG] [Thread-193451] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:42:34.317 [DEBUG] [Thread-193451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:42:34.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:42:34.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:42:34.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:42:34.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:42:34.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:42:34.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:42:34.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:42:34.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:42:34.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:42:34.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.862264 -999.00   +9.20  27.58     67   +3.50 1 1 1 1 1     0    0 5.60 -4.83 ZNESW 25.4 27.6 161.6 39.1 9.6 -25.0 9.4 -24.0 9.2 -23.0 9.6 -24.2
2026-02-14T22:42:34.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:42:34.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:42:34.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.862264
2026-02-14T22:42:34.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:42:34.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:42:34.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:42:34.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:42:34.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:42:34.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:42:24', tmtdew=6.83, humidity=62.41, cloud=0.0, wind=32.66, temperature=9.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:42:24', seeing=4.55, atlas_timestamp='2026-02-14T20:41:39.610', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.044749999999998735, -0.005749999999999034, -0.005500000000001393, -0.009499999999999176, -0.012749999999998707, 0.0029999999999983373, -0.009749999999998593, 0.0045000000000001705, 0.005000000000000782, -0.07875000000000121, 0.002000000000000668, 0.05799999999999983, 0.004249999999998977, 0.0019999999999988916, 0.02549999999999919, 0.045249999999999346, 0.05749999999999922, -0.030000000000001137, 0.010249999999999204, 0.0519999999999996, 0.01774999999999949, -0.021749999999999048, 0.010749999999999815, 0.02099999999999902, 0.037499999999999645, 0.003750000000000142, 0.01950000000000074, 0.0519999999999996, 0.0519999999999996, 0.040000000000000924, 0.06300000000000061, 0.040749999999999176], zp_timestamp='2026-02-14T20:40:00')
2026-02-14T22:42:34.345 [DEBUG] [Thread-193451] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:42:34.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-14T22:42:34.441 [DEBUG] [Thread-193454] [transport.py] [_log()] starting thread (client mode): 0xa2d01d80
2026-02-14T22:42:34.441 [DEBUG] [Thread-193454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:42:34.459 [DEBUG] [Thread-193454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:42:34.460 [INFO] [Thread-193454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:42:34.467 [DEBUG] [Thread-193454] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:42:34.467 [DEBUG] [Thread-193454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:42:34.467 [DEBUG] [Thread-193454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:42:34.468 [DEBUG] [Thread-193454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:42:34.468 [DEBUG] [Thread-193454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:42:34.468 [DEBUG] [Thread-193454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:42:34.468 [DEBUG] [Thread-193454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:42:34.468 [DEBUG] [Thread-193454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:42:34.468 [DEBUG] [Thread-193454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:42:34.468 [DEBUG] [Thread-193454] [transport.py] [_log()] client lang: <none>
2026-02-14T22:42:34.468 [DEBUG] [Thread-193454] [transport.py] [_log()] server lang: <none>
2026-02-14T22:42:34.469 [DEBUG] [Thread-193454] [transport.py] [_log()] kex follows: False
2026-02-14T22:42:34.469 [DEBUG] [Thread-193454] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:42:34.469 [DEBUG] [Thread-193454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:42:34.469 [DEBUG] [Thread-193454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:42:34.469 [DEBUG] [Thread-193454] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:42:34.469 [DEBUG] [Thread-193454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:42:34.469 [DEBUG] [Thread-193454] [transport.py] [_log()] Compression: none
2026-02-14T22:42:34.469 [DEBUG] [Thread-193454] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:42:34.526 [DEBUG] [Thread-193454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:42:34.527 [DEBUG] [Thread-193454] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:42:34.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:42:34.528 [DEBUG] [Thread-193454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:42:34.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:42:34.582 [DEBUG] [Thread-193454] [transport.py] [_log()] userauth is OK
2026-02-14T22:42:34.583 [DEBUG] [Thread-193454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:42:34.583 [DEBUG] [Thread-193454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:42:34.583 [DEBUG] [Thread-193454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:42:34.583 [DEBUG] [Thread-193454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:42:34.602 [INFO] [Thread-193454] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:42:34.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-14T22:42:34.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:42:35.409 [DEBUG] [Thread-193454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:42:35.410 [DEBUG] [Thread-193454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:42:35.457 [DEBUG] [Thread-193454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:42:35.458 [DEBUG] [Thread-193454] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:42:35.468 [DEBUG] [Thread-193454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:42:35.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:42:35.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:42:35.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-14T22:42:35.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:42:35.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:42:35.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:42:35.501 [DEBUG] [Thread-193454] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:42:43.320 [DEBUG] [Thread-193456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:42:58.377 [DEBUG] [Thread-193457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:42:58.446 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:42:58.447 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:43:02.238 [DEBUG] [Thread-193458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:43:05.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:43:05.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:43:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:43:07.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 42, 24), 6.83, 62.41, 0.0, 32.66, 9.29, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:43:07.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:42:24
2026-02-14T22:43:07.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:43:08.124 [DEBUG] [Thread-193459] [transport.py] [_log()] starting thread (client mode): 0xa57d5f30
2026-02-14T22:43:08.126 [DEBUG] [Thread-193459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:43:08.144 [DEBUG] [Thread-193459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:43:08.144 [INFO] [Thread-193459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:43:08.146 [DEBUG] [Thread-193459] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:43:08.146 [DEBUG] [Thread-193459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:43:08.146 [DEBUG] [Thread-193459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:43:08.146 [DEBUG] [Thread-193459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:43:08.147 [DEBUG] [Thread-193459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:43:08.147 [DEBUG] [Thread-193459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:43:08.147 [DEBUG] [Thread-193459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:43:08.147 [DEBUG] [Thread-193459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:43:08.147 [DEBUG] [Thread-193459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:43:08.147 [DEBUG] [Thread-193459] [transport.py] [_log()] client lang: <none>
2026-02-14T22:43:08.147 [DEBUG] [Thread-193459] [transport.py] [_log()] server lang: <none>
2026-02-14T22:43:08.147 [DEBUG] [Thread-193459] [transport.py] [_log()] kex follows: False
2026-02-14T22:43:08.147 [DEBUG] [Thread-193459] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:43:08.147 [DEBUG] [Thread-193459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:43:08.147 [DEBUG] [Thread-193459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:43:08.147 [DEBUG] [Thread-193459] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:43:08.147 [DEBUG] [Thread-193459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:43:08.147 [DEBUG] [Thread-193459] [transport.py] [_log()] Compression: none
2026-02-14T22:43:08.147 [DEBUG] [Thread-193459] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:43:08.161 [DEBUG] [Thread-193459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:43:08.161 [DEBUG] [Thread-193459] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:43:08.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:43:08.162 [DEBUG] [Thread-193459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:43:08.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:43:08.164 [DEBUG] [Thread-193459] [transport.py] [_log()] userauth is OK
2026-02-14T22:43:08.164 [DEBUG] [Thread-193459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:43:08.164 [DEBUG] [Thread-193459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:43:08.165 [DEBUG] [Thread-193459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:43:08.165 [DEBUG] [Thread-193459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:43:08.189 [INFO] [Thread-193459] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:43:08.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:43:08.830 [DEBUG] [Thread-193459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:43:08.830 [DEBUG] [Thread-193459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:43:08.830 [DEBUG] [Thread-193459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:43:08.871 [DEBUG] [Thread-193459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:43:08.872 [DEBUG] [Thread-193459] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:43:08.875 [DEBUG] [Thread-193459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:43:08.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:43:08.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:43:08.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:43:08.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:43:08.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:43:08.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:43:08.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:43:08.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:43:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:43:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.862612 -999.00   +9.20  26.22     67   +3.50 1 1 1 1 1     0    0 5.53 -4.82 ZNESW 21.4 26.2 159.6 31.2 9.6 -25.1 9.4 -23.9 9.2 -22.9 9.6 -24.2
2026-02-14T22:43:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:43:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:43:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.862612
2026-02-14T22:43:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:43:08.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:43:08.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:43:08.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:43:08.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:43:08.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:42:24', tmtdew=6.83, humidity=62.41, cloud=0.0, wind=32.66, temperature=9.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:43:00', seeing=4.47, atlas_timestamp='2026-02-14T20:42:09.677', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.044749999999998735, -0.005749999999999034, -0.005500000000001393, -0.009499999999999176, -0.012749999999998707, 0.0029999999999983373, -0.009749999999998593, 0.0045000000000001705, 0.005000000000000782, -0.07875000000000121, 0.002000000000000668, 0.05799999999999983, 0.004249999999998977, 0.0019999999999988916, 0.02549999999999919, 0.045249999999999346, 0.05749999999999922, -0.030000000000001137, 0.010249999999999204, 0.0519999999999996, 0.01774999999999949, -0.021749999999999048, 0.010749999999999815, 0.02099999999999902, 0.037499999999999645, 0.003750000000000142, 0.01950000000000074, 0.0519999999999996, 0.0519999999999996, 0.040000000000000924, 0.06300000000000061, 0.040749999999999176], zp_timestamp='2026-02-14T20:40:00')
2026-02-14T22:43:08.901 [DEBUG] [Thread-193459] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:43:08.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-14T22:43:08.994 [DEBUG] [Thread-193462] [transport.py] [_log()] starting thread (client mode): 0xa2d6f340
2026-02-14T22:43:08.994 [DEBUG] [Thread-193462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:43:09.010 [DEBUG] [Thread-193462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:43:09.010 [INFO] [Thread-193462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:43:09.017 [DEBUG] [Thread-193462] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:43:09.017 [DEBUG] [Thread-193462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:43:09.018 [DEBUG] [Thread-193462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:43:09.018 [DEBUG] [Thread-193462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:43:09.018 [DEBUG] [Thread-193462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:43:09.018 [DEBUG] [Thread-193462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:43:09.018 [DEBUG] [Thread-193462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:43:09.018 [DEBUG] [Thread-193462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:43:09.018 [DEBUG] [Thread-193462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:43:09.018 [DEBUG] [Thread-193462] [transport.py] [_log()] client lang: <none>
2026-02-14T22:43:09.018 [DEBUG] [Thread-193462] [transport.py] [_log()] server lang: <none>
2026-02-14T22:43:09.018 [DEBUG] [Thread-193462] [transport.py] [_log()] kex follows: False
2026-02-14T22:43:09.018 [DEBUG] [Thread-193462] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:43:09.018 [DEBUG] [Thread-193462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:43:09.018 [DEBUG] [Thread-193462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:43:09.018 [DEBUG] [Thread-193462] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:43:09.018 [DEBUG] [Thread-193462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:43:09.018 [DEBUG] [Thread-193462] [transport.py] [_log()] Compression: none
2026-02-14T22:43:09.018 [DEBUG] [Thread-193462] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:43:09.077 [DEBUG] [Thread-193462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:43:09.077 [DEBUG] [Thread-193462] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:43:09.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:43:09.079 [DEBUG] [Thread-193462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:43:09.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:43:09.133 [DEBUG] [Thread-193462] [transport.py] [_log()] userauth is OK
2026-02-14T22:43:09.133 [DEBUG] [Thread-193462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:43:09.133 [DEBUG] [Thread-193462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:43:09.134 [DEBUG] [Thread-193462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:43:09.134 [DEBUG] [Thread-193462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:43:09.152 [INFO] [Thread-193462] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:43:09.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:43:09.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:43:09.986 [DEBUG] [Thread-193462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:43:09.987 [DEBUG] [Thread-193462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:43:10.038 [DEBUG] [Thread-193462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:43:10.039 [DEBUG] [Thread-193462] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:43:10.051 [DEBUG] [Thread-193462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:43:10.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:43:10.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:43:10.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-14T22:43:10.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:43:10.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:43:10.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:43:10.088 [DEBUG] [Thread-193462] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:43:13.414 [DEBUG] [Thread-193464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:43:15.879 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:43:28.466 [DEBUG] [Thread-193465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:43:40.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:43:40.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:43:40.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:43:42.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 42, 24), 6.78, 62.41, 0.0, 34.46, 9.24, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:43:42.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:42:24
2026-02-14T22:43:42.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:43:42.851 [DEBUG] [Thread-193466] [transport.py] [_log()] starting thread (client mode): 0xa2d023b0
2026-02-14T22:43:42.852 [DEBUG] [Thread-193466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:43:42.872 [DEBUG] [Thread-193466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:43:42.872 [INFO] [Thread-193466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:43:42.875 [DEBUG] [Thread-193466] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:43:42.875 [DEBUG] [Thread-193466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:43:42.875 [DEBUG] [Thread-193466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:43:42.875 [DEBUG] [Thread-193466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:43:42.875 [DEBUG] [Thread-193466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:43:42.875 [DEBUG] [Thread-193466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:43:42.875 [DEBUG] [Thread-193466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:43:42.875 [DEBUG] [Thread-193466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:43:42.875 [DEBUG] [Thread-193466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:43:42.876 [DEBUG] [Thread-193466] [transport.py] [_log()] client lang: <none>
2026-02-14T22:43:42.876 [DEBUG] [Thread-193466] [transport.py] [_log()] server lang: <none>
2026-02-14T22:43:42.876 [DEBUG] [Thread-193466] [transport.py] [_log()] kex follows: False
2026-02-14T22:43:42.876 [DEBUG] [Thread-193466] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:43:42.876 [DEBUG] [Thread-193466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:43:42.876 [DEBUG] [Thread-193466] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:43:42.876 [DEBUG] [Thread-193466] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:43:42.876 [DEBUG] [Thread-193466] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:43:42.876 [DEBUG] [Thread-193466] [transport.py] [_log()] Compression: none
2026-02-14T22:43:42.876 [DEBUG] [Thread-193466] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:43:42.893 [DEBUG] [Thread-193466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:43:42.894 [DEBUG] [Thread-193466] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:43:42.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:43:42.894 [DEBUG] [Thread-193466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:43:42.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:43:42.895 [DEBUG] [Thread-193466] [transport.py] [_log()] userauth is OK
2026-02-14T22:43:42.895 [DEBUG] [Thread-193466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:43:42.895 [DEBUG] [Thread-193466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:43:42.895 [DEBUG] [Thread-193466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:43:42.895 [DEBUG] [Thread-193466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:43:42.904 [INFO] [Thread-193466] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:43:42.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:43:43.505 [DEBUG] [Thread-193468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:43:43.582 [DEBUG] [Thread-193466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:43:43.582 [DEBUG] [Thread-193466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:43:43.582 [DEBUG] [Thread-193466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:43:43.623 [DEBUG] [Thread-193466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:43:43.623 [DEBUG] [Thread-193466] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:43:43.627 [DEBUG] [Thread-193466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:43:43.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:43:43.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:43:43.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:43:43.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:43:43.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:43:43.650 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:43:43.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:43:43.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:43:43.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:43:43.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.863306 -999.00   +9.10  24.39     67   +3.50 1 1 1 1 1     0    0 5.59 -3.92 ZNESW 22.9 24.4 149.8 26.4 9.6 -25.1 9.4 -24.0 9.2 -23.0 9.6 -24.2
2026-02-14T22:43:43.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:43:43.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:43:43.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.863306
2026-02-14T22:43:43.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:43:43.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:43:43.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:43:43.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:43:43.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:43:43.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:42:24', tmtdew=6.78, humidity=62.41, cloud=0.0, wind=34.46, temperature=9.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:43:38', seeing=3.49, atlas_timestamp='2026-02-14T20:43:09.638', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.044749999999998735, -0.005749999999999034, -0.005500000000001393, -0.009499999999999176, -0.012749999999998707, 0.0029999999999983373, -0.009749999999998593, 0.0045000000000001705, 0.005000000000000782, -0.07875000000000121, 0.002000000000000668, 0.05799999999999983, 0.004249999999998977, 0.0019999999999988916, 0.02549999999999919, 0.045249999999999346, 0.05749999999999922, -0.030000000000001137, 0.010249999999999204, 0.0519999999999996, 0.01774999999999949, -0.021749999999999048, 0.010749999999999815, 0.02099999999999902, 0.037499999999999645, 0.003750000000000142, 0.01950000000000074, 0.0519999999999996, 0.0519999999999996, 0.040000000000000924, 0.06300000000000061, 0.040749999999999176], zp_timestamp='2026-02-14T20:40:00')
2026-02-14T22:43:43.653 [DEBUG] [Thread-193466] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:43:43.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-14T22:43:43.752 [DEBUG] [Thread-193470] [transport.py] [_log()] starting thread (client mode): 0xa5742ec0
2026-02-14T22:43:43.752 [DEBUG] [Thread-193470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:43:43.767 [DEBUG] [Thread-193470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:43:43.767 [INFO] [Thread-193470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:43:43.775 [DEBUG] [Thread-193470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:43:43.775 [DEBUG] [Thread-193470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:43:43.775 [DEBUG] [Thread-193470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:43:43.775 [DEBUG] [Thread-193470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:43:43.775 [DEBUG] [Thread-193470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:43:43.775 [DEBUG] [Thread-193470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:43:43.775 [DEBUG] [Thread-193470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:43:43.775 [DEBUG] [Thread-193470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:43:43.775 [DEBUG] [Thread-193470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:43:43.775 [DEBUG] [Thread-193470] [transport.py] [_log()] client lang: <none>
2026-02-14T22:43:43.775 [DEBUG] [Thread-193470] [transport.py] [_log()] server lang: <none>
2026-02-14T22:43:43.775 [DEBUG] [Thread-193470] [transport.py] [_log()] kex follows: False
2026-02-14T22:43:43.776 [DEBUG] [Thread-193470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:43:43.776 [DEBUG] [Thread-193470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:43:43.776 [DEBUG] [Thread-193470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:43:43.776 [DEBUG] [Thread-193470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:43:43.776 [DEBUG] [Thread-193470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:43:43.776 [DEBUG] [Thread-193470] [transport.py] [_log()] Compression: none
2026-02-14T22:43:43.776 [DEBUG] [Thread-193470] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:43:43.832 [DEBUG] [Thread-193470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:43:43.832 [DEBUG] [Thread-193470] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:43:43.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:43:43.834 [DEBUG] [Thread-193470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:43:43.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:43:43.887 [DEBUG] [Thread-193470] [transport.py] [_log()] userauth is OK
2026-02-14T22:43:43.887 [DEBUG] [Thread-193470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:43:43.887 [DEBUG] [Thread-193470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:43:43.887 [DEBUG] [Thread-193470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:43:43.887 [DEBUG] [Thread-193470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:43:43.901 [INFO] [Thread-193470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:43:43.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:43:43.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:43:44.726 [DEBUG] [Thread-193470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:43:44.727 [DEBUG] [Thread-193470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:43:44.774 [DEBUG] [Thread-193470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:43:44.774 [DEBUG] [Thread-193470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:43:44.784 [DEBUG] [Thread-193470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:43:44.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:43:44.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:43:44.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-14T22:43:44.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:43:44.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:43:44.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:43:44.820 [DEBUG] [Thread-193470] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:43:58.541 [DEBUG] [Thread-193472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:43:58.646 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:43:58.647 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:44:02.305 [DEBUG] [Thread-193473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:44:13.604 [DEBUG] [Thread-193474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:44:14.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:44:14.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:44:14.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-14T22:44:17.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 43, 36), 6.94, 61.9, 0.0, 36.27, 9.57, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:44:17.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:43:36
2026-02-14T22:44:17.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:44:17.656 [DEBUG] [Thread-193475] [transport.py] [_log()] starting thread (client mode): 0xa2d19c90
2026-02-14T22:44:17.656 [DEBUG] [Thread-193475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:44:17.676 [DEBUG] [Thread-193475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:44:17.677 [INFO] [Thread-193475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:44:17.679 [DEBUG] [Thread-193475] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:44:17.679 [DEBUG] [Thread-193475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:44:17.679 [DEBUG] [Thread-193475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:44:17.679 [DEBUG] [Thread-193475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:44:17.679 [DEBUG] [Thread-193475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:44:17.679 [DEBUG] [Thread-193475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:44:17.679 [DEBUG] [Thread-193475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:44:17.679 [DEBUG] [Thread-193475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:44:17.679 [DEBUG] [Thread-193475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:44:17.679 [DEBUG] [Thread-193475] [transport.py] [_log()] client lang: <none>
2026-02-14T22:44:17.679 [DEBUG] [Thread-193475] [transport.py] [_log()] server lang: <none>
2026-02-14T22:44:17.679 [DEBUG] [Thread-193475] [transport.py] [_log()] kex follows: False
2026-02-14T22:44:17.679 [DEBUG] [Thread-193475] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:44:17.680 [DEBUG] [Thread-193475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:44:17.680 [DEBUG] [Thread-193475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:44:17.680 [DEBUG] [Thread-193475] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:44:17.680 [DEBUG] [Thread-193475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:44:17.680 [DEBUG] [Thread-193475] [transport.py] [_log()] Compression: none
2026-02-14T22:44:17.680 [DEBUG] [Thread-193475] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:44:17.697 [DEBUG] [Thread-193475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:44:17.698 [DEBUG] [Thread-193475] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:44:17.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:44:17.699 [DEBUG] [Thread-193475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:44:17.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:44:17.701 [DEBUG] [Thread-193475] [transport.py] [_log()] userauth is OK
2026-02-14T22:44:17.701 [DEBUG] [Thread-193475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:44:17.701 [DEBUG] [Thread-193475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:44:17.701 [DEBUG] [Thread-193475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:44:17.702 [DEBUG] [Thread-193475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:44:17.726 [INFO] [Thread-193475] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:44:17.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:44:18.503 [DEBUG] [Thread-193475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:44:18.504 [DEBUG] [Thread-193475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:44:18.504 [DEBUG] [Thread-193475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:44:18.544 [DEBUG] [Thread-193475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:44:18.544 [DEBUG] [Thread-193475] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:44:18.547 [DEBUG] [Thread-193475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:44:18.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:44:18.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:44:18.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:44:18.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:44:18.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:44:18.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:44:18.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:44:18.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:44:18.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:44:18.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.863653 -999.00   +9.10  20.35     67   +3.50 1 1 1 1 1     0    0 5.58 -3.92 ZNESW 26.1 20.4 157.8 33.1 9.6 -25.0 9.4 -24.1 9.2 -23.0 9.6 -24.2
2026-02-14T22:44:18.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:44:18.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:44:18.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.863653
2026-02-14T22:44:18.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:44:18.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:44:18.571 [DEBUG] [Thread-193475] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:44:18.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:44:18.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:44:18.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:44:18.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:43:36', tmtdew=6.94, humidity=61.9, cloud=0.0, wind=36.27, temperature=9.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:44:14', seeing=3.7, atlas_timestamp='2026-02-14T20:43:39.619', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.044749999999998735, -0.005749999999999034, -0.005500000000001393, -0.009499999999999176, -0.012749999999998707, 0.0029999999999983373, -0.009749999999998593, 0.0045000000000001705, 0.005000000000000782, -0.07875000000000121, 0.002000000000000668, 0.05799999999999983, 0.004249999999998977, 0.0019999999999988916, 0.02549999999999919, 0.045249999999999346, 0.05749999999999922, -0.030000000000001137, 0.010249999999999204, 0.0519999999999996, 0.01774999999999949, -0.021749999999999048, 0.010749999999999815, 0.02099999999999902, 0.037499999999999645, 0.003750000000000142, 0.01950000000000074, 0.0519999999999996, 0.0519999999999996, 0.040000000000000924, 0.06300000000000061, 0.040749999999999176], zp_timestamp='2026-02-14T20:40:00')
2026-02-14T22:44:18.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-14T22:44:18.661 [DEBUG] [Thread-193478] [transport.py] [_log()] starting thread (client mode): 0xa2d6d240
2026-02-14T22:44:18.661 [DEBUG] [Thread-193478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:44:18.676 [DEBUG] [Thread-193478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:44:18.676 [INFO] [Thread-193478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:44:18.684 [DEBUG] [Thread-193478] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:44:18.684 [DEBUG] [Thread-193478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:44:18.684 [DEBUG] [Thread-193478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:44:18.684 [DEBUG] [Thread-193478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:44:18.684 [DEBUG] [Thread-193478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:44:18.684 [DEBUG] [Thread-193478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:44:18.684 [DEBUG] [Thread-193478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:44:18.684 [DEBUG] [Thread-193478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:44:18.684 [DEBUG] [Thread-193478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:44:18.684 [DEBUG] [Thread-193478] [transport.py] [_log()] client lang: <none>
2026-02-14T22:44:18.684 [DEBUG] [Thread-193478] [transport.py] [_log()] server lang: <none>
2026-02-14T22:44:18.684 [DEBUG] [Thread-193478] [transport.py] [_log()] kex follows: False
2026-02-14T22:44:18.684 [DEBUG] [Thread-193478] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:44:18.684 [DEBUG] [Thread-193478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:44:18.684 [DEBUG] [Thread-193478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:44:18.685 [DEBUG] [Thread-193478] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:44:18.685 [DEBUG] [Thread-193478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:44:18.685 [DEBUG] [Thread-193478] [transport.py] [_log()] Compression: none
2026-02-14T22:44:18.685 [DEBUG] [Thread-193478] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:44:18.743 [DEBUG] [Thread-193478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:44:18.743 [DEBUG] [Thread-193478] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:44:18.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:44:18.745 [DEBUG] [Thread-193478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:44:18.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:44:18.799 [DEBUG] [Thread-193478] [transport.py] [_log()] userauth is OK
2026-02-14T22:44:18.799 [DEBUG] [Thread-193478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:44:18.799 [DEBUG] [Thread-193478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:44:18.799 [DEBUG] [Thread-193478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:44:18.800 [DEBUG] [Thread-193478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:44:18.818 [INFO] [Thread-193478] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:44:18.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-14T22:44:18.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:44:19.697 [DEBUG] [Thread-193478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:44:19.697 [DEBUG] [Thread-193478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:44:19.745 [DEBUG] [Thread-193478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:44:19.745 [DEBUG] [Thread-193478] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:44:19.754 [DEBUG] [Thread-193478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:44:19.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:44:19.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-14T22:44:19.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-14T22:44:19.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:44:19.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:44:19.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:44:19.790 [DEBUG] [Thread-193478] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:44:28.638 [DEBUG] [Thread-193480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:44:43.693 [DEBUG] [Thread-193481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:44:49.694 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:44:49.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:44:49.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:44:49.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-14T22:44:52.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 44, 13), 6.71, 62.46, 0.0, 37.92, 9.24, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:44:52.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:44:13
2026-02-14T22:44:52.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:44:52.655 [DEBUG] [Thread-193482] [transport.py] [_log()] starting thread (client mode): 0xa2d1bdc0
2026-02-14T22:44:52.655 [DEBUG] [Thread-193482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:44:52.675 [DEBUG] [Thread-193482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:44:52.676 [INFO] [Thread-193482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:44:52.677 [DEBUG] [Thread-193482] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:44:52.677 [DEBUG] [Thread-193482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:44:52.677 [DEBUG] [Thread-193482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:44:52.677 [DEBUG] [Thread-193482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:44:52.677 [DEBUG] [Thread-193482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:44:52.677 [DEBUG] [Thread-193482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:44:52.677 [DEBUG] [Thread-193482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:44:52.677 [DEBUG] [Thread-193482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:44:52.677 [DEBUG] [Thread-193482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:44:52.678 [DEBUG] [Thread-193482] [transport.py] [_log()] client lang: <none>
2026-02-14T22:44:52.678 [DEBUG] [Thread-193482] [transport.py] [_log()] server lang: <none>
2026-02-14T22:44:52.678 [DEBUG] [Thread-193482] [transport.py] [_log()] kex follows: False
2026-02-14T22:44:52.678 [DEBUG] [Thread-193482] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:44:52.678 [DEBUG] [Thread-193482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:44:52.678 [DEBUG] [Thread-193482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:44:52.678 [DEBUG] [Thread-193482] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:44:52.678 [DEBUG] [Thread-193482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:44:52.678 [DEBUG] [Thread-193482] [transport.py] [_log()] Compression: none
2026-02-14T22:44:52.678 [DEBUG] [Thread-193482] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:44:52.693 [DEBUG] [Thread-193482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:44:52.693 [DEBUG] [Thread-193482] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:44:52.694 [DEBUG] [Thread-193482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:44:52.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:44:52.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:44:52.696 [DEBUG] [Thread-193482] [transport.py] [_log()] userauth is OK
2026-02-14T22:44:52.696 [DEBUG] [Thread-193482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:44:52.696 [DEBUG] [Thread-193482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:44:52.696 [DEBUG] [Thread-193482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:44:52.696 [DEBUG] [Thread-193482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:44:52.731 [INFO] [Thread-193482] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:44:52.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:44:53.392 [DEBUG] [Thread-193482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:44:53.392 [DEBUG] [Thread-193482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:44:53.393 [DEBUG] [Thread-193482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:44:53.433 [DEBUG] [Thread-193482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:44:53.433 [DEBUG] [Thread-193482] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:44:53.445 [DEBUG] [Thread-193482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:44:53.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:44:53.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:44:53.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:44:53.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:44:53.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:44:53.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:44:53.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:44:53.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:44:53.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:44:53.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.864000 -999.00   +9.10  26.37     67   +3.50 1 1 1 1 1     0    0 5.58 -3.89 ZNESW 24.7 26.4 152.2 38.9 9.6 -25.0 9.4 -23.8 9.2 -23.0 9.6 -23.9
2026-02-14T22:44:53.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:44:53.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:44:53.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.864000
2026-02-14T22:44:53.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:44:53.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:44:53.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:44:53.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:44:53.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:44:53.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:44:13', tmtdew=6.71, humidity=62.46, cloud=0.0, wind=37.92, temperature=9.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:44:14', seeing=3.7, atlas_timestamp='2026-02-14T20:44:09.600', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.044749999999998735, -0.005749999999999034, -0.005500000000001393, -0.009499999999999176, -0.012749999999998707, 0.0029999999999983373, -0.009749999999998593, 0.0045000000000001705, 0.005000000000000782, -0.07875000000000121, 0.002000000000000668, 0.05799999999999983, 0.004249999999998977, 0.0019999999999988916, 0.02549999999999919, 0.045249999999999346, 0.05749999999999922, -0.030000000000001137, 0.010249999999999204, 0.0519999999999996, 0.01774999999999949, -0.021749999999999048, 0.010749999999999815, 0.02099999999999902, 0.037499999999999645, 0.003750000000000142, 0.01950000000000074, 0.0519999999999996, 0.0519999999999996, 0.040000000000000924, 0.06300000000000061, 0.040749999999999176], zp_timestamp='2026-02-14T20:43:00')
2026-02-14T22:44:53.468 [DEBUG] [Thread-193482] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:44:53.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-14T22:44:53.564 [DEBUG] [Thread-193485] [transport.py] [_log()] starting thread (client mode): 0xa2d1afb0
2026-02-14T22:44:53.564 [DEBUG] [Thread-193485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:44:53.578 [DEBUG] [Thread-193485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:44:53.578 [INFO] [Thread-193485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:44:53.585 [DEBUG] [Thread-193485] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:44:53.586 [DEBUG] [Thread-193485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:44:53.586 [DEBUG] [Thread-193485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:44:53.586 [DEBUG] [Thread-193485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:44:53.586 [DEBUG] [Thread-193485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:44:53.586 [DEBUG] [Thread-193485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:44:53.586 [DEBUG] [Thread-193485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:44:53.586 [DEBUG] [Thread-193485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:44:53.586 [DEBUG] [Thread-193485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:44:53.586 [DEBUG] [Thread-193485] [transport.py] [_log()] client lang: <none>
2026-02-14T22:44:53.586 [DEBUG] [Thread-193485] [transport.py] [_log()] server lang: <none>
2026-02-14T22:44:53.586 [DEBUG] [Thread-193485] [transport.py] [_log()] kex follows: False
2026-02-14T22:44:53.586 [DEBUG] [Thread-193485] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:44:53.586 [DEBUG] [Thread-193485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:44:53.586 [DEBUG] [Thread-193485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:44:53.586 [DEBUG] [Thread-193485] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:44:53.586 [DEBUG] [Thread-193485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:44:53.586 [DEBUG] [Thread-193485] [transport.py] [_log()] Compression: none
2026-02-14T22:44:53.586 [DEBUG] [Thread-193485] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:44:53.645 [DEBUG] [Thread-193485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:44:53.645 [DEBUG] [Thread-193485] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:44:53.646 [DEBUG] [Thread-193485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:44:53.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:44:53.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:44:53.701 [DEBUG] [Thread-193485] [transport.py] [_log()] userauth is OK
2026-02-14T22:44:53.701 [DEBUG] [Thread-193485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:44:53.701 [DEBUG] [Thread-193485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:44:53.701 [DEBUG] [Thread-193485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:44:53.702 [DEBUG] [Thread-193485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:44:53.720 [INFO] [Thread-193485] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:44:53.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-14T22:44:53.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:44:54.555 [DEBUG] [Thread-193485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:44:54.555 [DEBUG] [Thread-193485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:44:54.603 [DEBUG] [Thread-193485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:44:54.603 [DEBUG] [Thread-193485] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:44:54.612 [DEBUG] [Thread-193485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:44:54.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:44:54.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-14T22:44:54.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-14T22:44:54.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:44:54.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:44:54.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:44:54.645 [DEBUG] [Thread-193485] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:44:58.729 [DEBUG] [Thread-193487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:44:58.856 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:44:58.857 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:45:02.358 [DEBUG] [Thread-193488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:45:13.770 [DEBUG] [Thread-193489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:45:24.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:45:24.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:45:24.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-14T22:45:27.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 44, 49), 6.71, 62.46, 0.0, 36.89, 9.2, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:45:27.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:44:49
2026-02-14T22:45:27.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:45:27.928 [DEBUG] [Thread-193490] [transport.py] [_log()] starting thread (client mode): 0xa2d19e70
2026-02-14T22:45:27.929 [DEBUG] [Thread-193490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:45:27.947 [DEBUG] [Thread-193490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:45:27.947 [INFO] [Thread-193490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:45:27.950 [DEBUG] [Thread-193490] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:45:27.951 [DEBUG] [Thread-193490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:45:27.951 [DEBUG] [Thread-193490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:45:27.951 [DEBUG] [Thread-193490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:45:27.951 [DEBUG] [Thread-193490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:45:27.951 [DEBUG] [Thread-193490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:45:27.951 [DEBUG] [Thread-193490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:45:27.951 [DEBUG] [Thread-193490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:45:27.951 [DEBUG] [Thread-193490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:45:27.951 [DEBUG] [Thread-193490] [transport.py] [_log()] client lang: <none>
2026-02-14T22:45:27.951 [DEBUG] [Thread-193490] [transport.py] [_log()] server lang: <none>
2026-02-14T22:45:27.951 [DEBUG] [Thread-193490] [transport.py] [_log()] kex follows: False
2026-02-14T22:45:27.951 [DEBUG] [Thread-193490] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:45:27.951 [DEBUG] [Thread-193490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:45:27.951 [DEBUG] [Thread-193490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:45:27.951 [DEBUG] [Thread-193490] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:45:27.951 [DEBUG] [Thread-193490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:45:27.951 [DEBUG] [Thread-193490] [transport.py] [_log()] Compression: none
2026-02-14T22:45:27.951 [DEBUG] [Thread-193490] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:45:27.966 [DEBUG] [Thread-193490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:45:27.967 [DEBUG] [Thread-193490] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:45:27.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:45:27.968 [DEBUG] [Thread-193490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:45:27.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:45:28.009 [DEBUG] [Thread-193490] [transport.py] [_log()] userauth is OK
2026-02-14T22:45:28.010 [DEBUG] [Thread-193490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:45:28.010 [DEBUG] [Thread-193490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:45:28.010 [DEBUG] [Thread-193490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:45:28.010 [DEBUG] [Thread-193490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:45:28.049 [INFO] [Thread-193490] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:45:28.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:45:28.808 [DEBUG] [Thread-193492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:45:29.727 [DEBUG] [Thread-193490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:45:29.728 [DEBUG] [Thread-193490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:45:29.728 [DEBUG] [Thread-193490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:45:29.768 [DEBUG] [Thread-193490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:45:29.769 [DEBUG] [Thread-193490] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:45:29.772 [DEBUG] [Thread-193490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:45:29.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:45:29.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:45:29.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:45:29.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:45:29.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:45:29.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:45:29.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:45:29.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:45:29.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:45:29.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.864348 -999.00   +9.20  25.61     67   +3.50 1 1 1 1 1     0    0 5.66 -3.76 ZNESW 26.0 25.6 155.3 37.0 9.6 -24.8 9.4 -23.8 9.2 -22.9 9.5 -24.1
2026-02-14T22:45:29.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:45:29.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:45:29.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.864348
2026-02-14T22:45:29.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:45:29.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:45:29.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:45:29.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:45:29.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:45:29.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:44:49', tmtdew=6.71, humidity=62.46, cloud=0.0, wind=36.89, temperature=9.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:44:49', seeing=3.48, atlas_timestamp='2026-02-14T20:44:39.667', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.044749999999998735, -0.005749999999999034, -0.005500000000001393, -0.009499999999999176, -0.012749999999998707, 0.0029999999999983373, -0.009749999999998593, 0.0045000000000001705, 0.005000000000000782, -0.07875000000000121, 0.002000000000000668, 0.05799999999999983, 0.004249999999998977, 0.0019999999999988916, 0.02549999999999919, 0.045249999999999346, 0.05749999999999922, -0.030000000000001137, 0.010249999999999204, 0.0519999999999996, 0.01774999999999949, -0.021749999999999048, 0.010749999999999815, 0.02099999999999902, 0.037499999999999645, 0.003750000000000142, 0.01950000000000074, 0.0519999999999996, 0.0519999999999996, 0.040000000000000924, 0.06300000000000061, 0.040749999999999176], zp_timestamp='2026-02-14T20:43:00')
2026-02-14T22:45:29.799 [DEBUG] [Thread-193490] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:45:29.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-14T22:45:29.895 [DEBUG] [Thread-193494] [transport.py] [_log()] starting thread (client mode): 0xa2d19450
2026-02-14T22:45:29.895 [DEBUG] [Thread-193494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:45:29.910 [DEBUG] [Thread-193494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:45:29.910 [INFO] [Thread-193494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:45:29.918 [DEBUG] [Thread-193494] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:45:29.918 [DEBUG] [Thread-193494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:45:29.918 [DEBUG] [Thread-193494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:45:29.918 [DEBUG] [Thread-193494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:45:29.918 [DEBUG] [Thread-193494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:45:29.918 [DEBUG] [Thread-193494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:45:29.918 [DEBUG] [Thread-193494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:45:29.919 [DEBUG] [Thread-193494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:45:29.919 [DEBUG] [Thread-193494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:45:29.919 [DEBUG] [Thread-193494] [transport.py] [_log()] client lang: <none>
2026-02-14T22:45:29.919 [DEBUG] [Thread-193494] [transport.py] [_log()] server lang: <none>
2026-02-14T22:45:29.919 [DEBUG] [Thread-193494] [transport.py] [_log()] kex follows: False
2026-02-14T22:45:29.919 [DEBUG] [Thread-193494] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:45:29.919 [DEBUG] [Thread-193494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:45:29.919 [DEBUG] [Thread-193494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:45:29.919 [DEBUG] [Thread-193494] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:45:29.919 [DEBUG] [Thread-193494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:45:29.919 [DEBUG] [Thread-193494] [transport.py] [_log()] Compression: none
2026-02-14T22:45:29.919 [DEBUG] [Thread-193494] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:45:29.981 [DEBUG] [Thread-193494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:45:29.982 [DEBUG] [Thread-193494] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:45:29.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:45:29.983 [DEBUG] [Thread-193494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:45:29.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:45:30.037 [DEBUG] [Thread-193494] [transport.py] [_log()] userauth is OK
2026-02-14T22:45:30.037 [DEBUG] [Thread-193494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:45:30.037 [DEBUG] [Thread-193494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:45:30.038 [DEBUG] [Thread-193494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:45:30.038 [DEBUG] [Thread-193494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:45:30.057 [INFO] [Thread-193494] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:45:30.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-14T22:45:30.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:45:30.882 [DEBUG] [Thread-193494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:45:30.883 [DEBUG] [Thread-193494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:45:30.930 [DEBUG] [Thread-193494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:45:30.931 [DEBUG] [Thread-193494] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:45:30.940 [DEBUG] [Thread-193494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:45:30.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:45: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-14T22:45:30.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-14T22:45:30.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:45:30.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:45:30.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:45:30.976 [DEBUG] [Thread-193494] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:45:43.846 [DEBUG] [Thread-193496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:45:58.905 [DEBUG] [Thread-193497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:45:59.055 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:45:59.056 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:46:00.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:46:00.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:46: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-14T22:46:02.426 [DEBUG] [Thread-193498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:46:03.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 45, 25), 6.69, 62.55, 0.0, 34.85, 9.22, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:46:03.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:45:25
2026-02-14T22:46:03.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:46:03.667 [DEBUG] [Thread-193499] [transport.py] [_log()] starting thread (client mode): 0xa2d19960
2026-02-14T22:46:03.667 [DEBUG] [Thread-193499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:46:03.687 [DEBUG] [Thread-193499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:46:03.687 [INFO] [Thread-193499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:46:03.690 [DEBUG] [Thread-193499] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:46:03.690 [DEBUG] [Thread-193499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:46:03.690 [DEBUG] [Thread-193499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:46:03.690 [DEBUG] [Thread-193499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:46:03.690 [DEBUG] [Thread-193499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:46:03.690 [DEBUG] [Thread-193499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:46:03.690 [DEBUG] [Thread-193499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:46:03.690 [DEBUG] [Thread-193499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:46:03.690 [DEBUG] [Thread-193499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:46:03.690 [DEBUG] [Thread-193499] [transport.py] [_log()] client lang: <none>
2026-02-14T22:46:03.690 [DEBUG] [Thread-193499] [transport.py] [_log()] server lang: <none>
2026-02-14T22:46:03.690 [DEBUG] [Thread-193499] [transport.py] [_log()] kex follows: False
2026-02-14T22:46:03.690 [DEBUG] [Thread-193499] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:46:03.690 [DEBUG] [Thread-193499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:46:03.690 [DEBUG] [Thread-193499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:46:03.690 [DEBUG] [Thread-193499] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:46:03.690 [DEBUG] [Thread-193499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:46:03.690 [DEBUG] [Thread-193499] [transport.py] [_log()] Compression: none
2026-02-14T22:46:03.690 [DEBUG] [Thread-193499] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:46:03.698 [DEBUG] [Thread-193499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:46:03.698 [DEBUG] [Thread-193499] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:46:03.698 [DEBUG] [Thread-193499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:46:03.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:46:03.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:46:03.699 [DEBUG] [Thread-193499] [transport.py] [_log()] userauth is OK
2026-02-14T22:46:03.699 [DEBUG] [Thread-193499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:46:03.699 [DEBUG] [Thread-193499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:46:03.700 [DEBUG] [Thread-193499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:46:03.700 [DEBUG] [Thread-193499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:46:03.714 [INFO] [Thread-193499] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:46:03.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:46:04.362 [DEBUG] [Thread-193499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:46:04.362 [DEBUG] [Thread-193499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:46:04.362 [DEBUG] [Thread-193499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:46:04.403 [DEBUG] [Thread-193499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:46:04.404 [DEBUG] [Thread-193499] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:46:04.407 [DEBUG] [Thread-193499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:46:04.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:46:04.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:46:04.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:46:04.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:46:04.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:46:04.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:46:04.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:46:04.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:46:04.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:46:04.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.864695 -999.00   +9.10  29.19     67   +3.50 1 1 1 1 1     0    0 5.44 -3.59 ZNESW 21.0 29.2 161.0 37.1 9.5 -24.9 9.4 -23.8 9.2 -22.8 9.6 -24.2
2026-02-14T22:46:04.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:46:04.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:46:04.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.864695
2026-02-14T22:46:04.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:46:04.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:46:04.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:46:04.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:46:04.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:46:04.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:45:25', tmtdew=6.69, humidity=62.55, cloud=0.0, wind=34.85, temperature=9.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:45:25', seeing=4.7, atlas_timestamp='2026-02-14T20:45:09.648', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.044749999999998735, -0.005749999999999034, -0.005500000000001393, -0.009499999999999176, -0.012749999999998707, 0.0029999999999983373, -0.009749999999998593, 0.0045000000000001705, 0.005000000000000782, -0.07875000000000121, 0.002000000000000668, 0.05799999999999983, 0.004249999999998977, 0.0019999999999988916, 0.02549999999999919, 0.045249999999999346, 0.05749999999999922, -0.030000000000001137, 0.010249999999999204, 0.0519999999999996, 0.01774999999999949, -0.021749999999999048, 0.010749999999999815, 0.02099999999999902, 0.037499999999999645, 0.003750000000000142, 0.01950000000000074, 0.0519999999999996, 0.0519999999999996, 0.040000000000000924, 0.06300000000000061, 0.040749999999999176], zp_timestamp='2026-02-14T20:43:00')
2026-02-14T22:46:04.435 [DEBUG] [Thread-193499] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:46:04.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-14T22:46:04.530 [DEBUG] [Thread-193502] [transport.py] [_log()] starting thread (client mode): 0xa2d1b880
2026-02-14T22:46:04.530 [DEBUG] [Thread-193502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:46:04.544 [DEBUG] [Thread-193502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:46:04.545 [INFO] [Thread-193502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:46:04.552 [DEBUG] [Thread-193502] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:46:04.552 [DEBUG] [Thread-193502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:46:04.553 [DEBUG] [Thread-193502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:46:04.553 [DEBUG] [Thread-193502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:46:04.553 [DEBUG] [Thread-193502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:46:04.553 [DEBUG] [Thread-193502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:46:04.553 [DEBUG] [Thread-193502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:46:04.553 [DEBUG] [Thread-193502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:46:04.553 [DEBUG] [Thread-193502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:46:04.553 [DEBUG] [Thread-193502] [transport.py] [_log()] client lang: <none>
2026-02-14T22:46:04.553 [DEBUG] [Thread-193502] [transport.py] [_log()] server lang: <none>
2026-02-14T22:46:04.553 [DEBUG] [Thread-193502] [transport.py] [_log()] kex follows: False
2026-02-14T22:46:04.553 [DEBUG] [Thread-193502] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:46:04.553 [DEBUG] [Thread-193502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:46:04.553 [DEBUG] [Thread-193502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:46:04.553 [DEBUG] [Thread-193502] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:46:04.553 [DEBUG] [Thread-193502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:46:04.553 [DEBUG] [Thread-193502] [transport.py] [_log()] Compression: none
2026-02-14T22:46:04.553 [DEBUG] [Thread-193502] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:46:04.616 [DEBUG] [Thread-193502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:46:04.617 [DEBUG] [Thread-193502] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:46:04.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:46:04.618 [DEBUG] [Thread-193502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:46:04.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:46:04.672 [DEBUG] [Thread-193502] [transport.py] [_log()] userauth is OK
2026-02-14T22:46:04.672 [DEBUG] [Thread-193502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:46:04.673 [DEBUG] [Thread-193502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:46:04.673 [DEBUG] [Thread-193502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:46:04.673 [DEBUG] [Thread-193502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:46:04.692 [INFO] [Thread-193502] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:46:04.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:46:04.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:46:05.486 [DEBUG] [Thread-193502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:46:05.486 [DEBUG] [Thread-193502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:46:05.535 [DEBUG] [Thread-193502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:46:05.535 [DEBUG] [Thread-193502] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:46:05.548 [DEBUG] [Thread-193502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:46:05.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:46:05.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-14T22:46:05.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-14T22:46:05.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:46:05.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:46:05.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:46:05.581 [DEBUG] [Thread-193502] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:46:13.942 [DEBUG] [Thread-193504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:46:23.462 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:46:28.992 [DEBUG] [Thread-193505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:46:35.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:46:35.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:46:35.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:46:37.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 46, 1), 6.7, 63.03, 0.0, 35.39, 9.17, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:46:37.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:46:01
2026-02-14T22:46:38.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:46:38.180 [DEBUG] [Thread-193506] [transport.py] [_log()] starting thread (client mode): 0xa2d1a440
2026-02-14T22:46:38.180 [DEBUG] [Thread-193506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:46:38.200 [DEBUG] [Thread-193506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:46:38.200 [INFO] [Thread-193506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:46:38.203 [DEBUG] [Thread-193506] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:46:38.203 [DEBUG] [Thread-193506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:46:38.203 [DEBUG] [Thread-193506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:46:38.203 [DEBUG] [Thread-193506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:46:38.203 [DEBUG] [Thread-193506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:46:38.203 [DEBUG] [Thread-193506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:46:38.203 [DEBUG] [Thread-193506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:46:38.203 [DEBUG] [Thread-193506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:46:38.203 [DEBUG] [Thread-193506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:46:38.203 [DEBUG] [Thread-193506] [transport.py] [_log()] client lang: <none>
2026-02-14T22:46:38.203 [DEBUG] [Thread-193506] [transport.py] [_log()] server lang: <none>
2026-02-14T22:46:38.203 [DEBUG] [Thread-193506] [transport.py] [_log()] kex follows: False
2026-02-14T22:46:38.203 [DEBUG] [Thread-193506] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:46:38.203 [DEBUG] [Thread-193506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:46:38.203 [DEBUG] [Thread-193506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:46:38.203 [DEBUG] [Thread-193506] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:46:38.203 [DEBUG] [Thread-193506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:46:38.203 [DEBUG] [Thread-193506] [transport.py] [_log()] Compression: none
2026-02-14T22:46:38.203 [DEBUG] [Thread-193506] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:46:38.219 [DEBUG] [Thread-193506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:46:38.219 [DEBUG] [Thread-193506] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:46:38.220 [DEBUG] [Thread-193506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:46:38.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:46:38.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:46:38.262 [DEBUG] [Thread-193506] [transport.py] [_log()] userauth is OK
2026-02-14T22:46:38.262 [DEBUG] [Thread-193506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:46:38.262 [DEBUG] [Thread-193506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:46:38.262 [DEBUG] [Thread-193506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:46:38.262 [DEBUG] [Thread-193506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:46:38.283 [INFO] [Thread-193506] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:46:38.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:46:38.900 [DEBUG] [Thread-193506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:46:38.901 [DEBUG] [Thread-193506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:46:38.901 [DEBUG] [Thread-193506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:46:38.941 [DEBUG] [Thread-193506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:46:38.941 [DEBUG] [Thread-193506] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:46:38.945 [DEBUG] [Thread-193506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:46:38.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:46:38.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:46:38.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:46:38.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:46:38.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:46:38.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:46:38.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:46:38.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:46:38.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:46:38.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.865042 -999.00   +9.10  24.38     67   +3.50 1 1 1 1 1     0    0 5.62 -3.39 ZNESW 22.3 24.4 161.2 32.3 9.6 -25.0 9.4 -24.0 9.2 -22.8 9.6 -24.1
2026-02-14T22:46:38.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:46:38.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:46:38.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.865042
2026-02-14T22:46:38.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:46:38.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:46:38.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:46:38.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:46:38.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:46:38.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:46:01', tmtdew=6.7, humidity=63.03, cloud=0.0, wind=35.39, temperature=9.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:46:01', seeing=4.74, atlas_timestamp='2026-02-14T20:45:39.629', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.044749999999998735, -0.005749999999999034, -0.005500000000001393, -0.009499999999999176, -0.012749999999998707, 0.0029999999999983373, -0.009749999999998593, 0.0045000000000001705, 0.005000000000000782, -0.07875000000000121, 0.002000000000000668, 0.05799999999999983, 0.004249999999998977, 0.0019999999999988916, 0.02549999999999919, 0.045249999999999346, 0.05749999999999922, -0.030000000000001137, 0.010249999999999204, 0.0519999999999996, 0.01774999999999949, -0.021749999999999048, 0.010749999999999815, 0.02099999999999902, 0.037499999999999645, 0.003750000000000142, 0.01950000000000074, 0.0519999999999996, 0.0519999999999996, 0.040000000000000924, 0.06300000000000061, 0.040749999999999176], zp_timestamp='2026-02-14T20:43:00')
2026-02-14T22:46:38.971 [DEBUG] [Thread-193506] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:46:39.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:46:39.066 [DEBUG] [Thread-193509] [transport.py] [_log()] starting thread (client mode): 0xa2d188b0
2026-02-14T22:46:39.066 [DEBUG] [Thread-193509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:46:39.081 [DEBUG] [Thread-193509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:46:39.081 [INFO] [Thread-193509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:46:39.090 [DEBUG] [Thread-193509] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:46:39.090 [DEBUG] [Thread-193509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:46:39.090 [DEBUG] [Thread-193509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:46:39.090 [DEBUG] [Thread-193509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:46:39.090 [DEBUG] [Thread-193509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:46:39.090 [DEBUG] [Thread-193509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:46:39.090 [DEBUG] [Thread-193509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:46:39.090 [DEBUG] [Thread-193509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:46:39.090 [DEBUG] [Thread-193509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:46:39.090 [DEBUG] [Thread-193509] [transport.py] [_log()] client lang: <none>
2026-02-14T22:46:39.090 [DEBUG] [Thread-193509] [transport.py] [_log()] server lang: <none>
2026-02-14T22:46:39.090 [DEBUG] [Thread-193509] [transport.py] [_log()] kex follows: False
2026-02-14T22:46:39.090 [DEBUG] [Thread-193509] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:46:39.090 [DEBUG] [Thread-193509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:46:39.090 [DEBUG] [Thread-193509] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:46:39.091 [DEBUG] [Thread-193509] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:46:39.091 [DEBUG] [Thread-193509] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:46:39.091 [DEBUG] [Thread-193509] [transport.py] [_log()] Compression: none
2026-02-14T22:46:39.091 [DEBUG] [Thread-193509] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:46:39.151 [DEBUG] [Thread-193509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:46:39.151 [DEBUG] [Thread-193509] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:46:39.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:46:39.152 [DEBUG] [Thread-193509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:46:39.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:46:39.207 [DEBUG] [Thread-193509] [transport.py] [_log()] userauth is OK
2026-02-14T22:46:39.208 [DEBUG] [Thread-193509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:46:39.208 [DEBUG] [Thread-193509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:46:39.208 [DEBUG] [Thread-193509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:46:39.208 [DEBUG] [Thread-193509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:46:39.231 [INFO] [Thread-193509] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:46:39.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-14T22:46:39.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:46:40.058 [DEBUG] [Thread-193509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:46:40.058 [DEBUG] [Thread-193509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:46:40.109 [DEBUG] [Thread-193509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:46:40.109 [DEBUG] [Thread-193509] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:46:40.117 [DEBUG] [Thread-193509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:46:40.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:46:40.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:46:40.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:46:40.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:46:40.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:46:40.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:46:40.150 [DEBUG] [Thread-193509] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:46:44.028 [DEBUG] [Thread-193511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:46:59.079 [DEBUG] [Thread-193512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:46:59.255 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:46:59.255 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:47:02.505 [DEBUG] [Thread-193513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:47:10.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:47:10.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:47: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-14T22:47:12.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 46, 36), 6.86, 62.23, 0.0, 39.34, 9.51, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:47:12.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:46:36
2026-02-14T22:47:12.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:47:13.101 [DEBUG] [Thread-193514] [transport.py] [_log()] starting thread (client mode): 0xa2d1aef0
2026-02-14T22:47:13.101 [DEBUG] [Thread-193514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:47:13.121 [DEBUG] [Thread-193514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:47:13.121 [INFO] [Thread-193514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:47:13.125 [DEBUG] [Thread-193514] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:47:13.125 [DEBUG] [Thread-193514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:47:13.125 [DEBUG] [Thread-193514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:47:13.125 [DEBUG] [Thread-193514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:47:13.125 [DEBUG] [Thread-193514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:47:13.126 [DEBUG] [Thread-193514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:47:13.126 [DEBUG] [Thread-193514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:47:13.126 [DEBUG] [Thread-193514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:47:13.126 [DEBUG] [Thread-193514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:47:13.126 [DEBUG] [Thread-193514] [transport.py] [_log()] client lang: <none>
2026-02-14T22:47:13.126 [DEBUG] [Thread-193514] [transport.py] [_log()] server lang: <none>
2026-02-14T22:47:13.126 [DEBUG] [Thread-193514] [transport.py] [_log()] kex follows: False
2026-02-14T22:47:13.126 [DEBUG] [Thread-193514] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:47:13.126 [DEBUG] [Thread-193514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:47:13.126 [DEBUG] [Thread-193514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:47:13.126 [DEBUG] [Thread-193514] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:47:13.126 [DEBUG] [Thread-193514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:47:13.126 [DEBUG] [Thread-193514] [transport.py] [_log()] Compression: none
2026-02-14T22:47:13.126 [DEBUG] [Thread-193514] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:47:13.142 [DEBUG] [Thread-193514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:47:13.142 [DEBUG] [Thread-193514] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:47:13.143 [DEBUG] [Thread-193514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:47:13.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:47:13.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:47:13.145 [DEBUG] [Thread-193514] [transport.py] [_log()] userauth is OK
2026-02-14T22:47:13.145 [DEBUG] [Thread-193514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:47:13.145 [DEBUG] [Thread-193514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:47:13.145 [DEBUG] [Thread-193514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:47:13.145 [DEBUG] [Thread-193514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:47:13.177 [INFO] [Thread-193514] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:47:13.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:47:13.765 [DEBUG] [Thread-193514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:47:13.766 [DEBUG] [Thread-193514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:47:13.766 [DEBUG] [Thread-193514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:47:13.806 [DEBUG] [Thread-193514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:47:13.806 [DEBUG] [Thread-193514] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:47:13.809 [DEBUG] [Thread-193514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:47:13.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:47:13.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:47:13.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:47:13.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:47:13.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:47:13.832 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:47:13.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:47:13.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:47:13.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:47:13.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.865737 -999.00   +9.10  26.99     67   +3.50 1 1 1 1 1     0    0 5.60 -2.88 ZNESW 26.3 27.0 158.6 32.2 9.5 -24.9 9.4 -24.0 9.2 -22.9 9.6 -24.1
2026-02-14T22:47:13.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:47:13.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:47:13.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.865737
2026-02-14T22:47:13.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:47:13.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:47:13.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:47:13.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:47:13.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:47:13.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:46:36', tmtdew=6.86, humidity=62.23, cloud=0.0, wind=39.34, temperature=9.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:46:37', seeing=5.06, atlas_timestamp='2026-02-14T20:46:39.677', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.044749999999998735, -0.005749999999999034, -0.005500000000001393, -0.009499999999999176, -0.012749999999998707, 0.0029999999999983373, -0.009749999999998593, 0.0045000000000001705, 0.005000000000000782, -0.07875000000000121, 0.002000000000000668, 0.05799999999999983, 0.004249999999998977, 0.0019999999999988916, 0.02549999999999919, 0.045249999999999346, 0.05749999999999922, -0.030000000000001137, 0.010249999999999204, 0.0519999999999996, 0.01774999999999949, -0.021749999999999048, 0.010749999999999815, 0.02099999999999902, 0.037499999999999645, 0.003750000000000142, 0.01950000000000074, 0.0519999999999996, 0.0519999999999996, 0.040000000000000924, 0.06300000000000061, 0.040749999999999176], zp_timestamp='2026-02-14T20:43:00')
2026-02-14T22:47:13.835 [DEBUG] [Thread-193514] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:47:13.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-14T22:47:13.929 [DEBUG] [Thread-193517] [transport.py] [_log()] starting thread (client mode): 0xa57d7fd0
2026-02-14T22:47:13.929 [DEBUG] [Thread-193517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:47:13.944 [DEBUG] [Thread-193517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:47:13.944 [INFO] [Thread-193517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:47:13.951 [DEBUG] [Thread-193517] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:47:13.951 [DEBUG] [Thread-193517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:47:13.951 [DEBUG] [Thread-193517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:47:13.951 [DEBUG] [Thread-193517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:47:13.951 [DEBUG] [Thread-193517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:47:13.951 [DEBUG] [Thread-193517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:47:13.951 [DEBUG] [Thread-193517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:47:13.951 [DEBUG] [Thread-193517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:47:13.951 [DEBUG] [Thread-193517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:47:13.951 [DEBUG] [Thread-193517] [transport.py] [_log()] client lang: <none>
2026-02-14T22:47:13.952 [DEBUG] [Thread-193517] [transport.py] [_log()] server lang: <none>
2026-02-14T22:47:13.952 [DEBUG] [Thread-193517] [transport.py] [_log()] kex follows: False
2026-02-14T22:47:13.952 [DEBUG] [Thread-193517] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:47:13.952 [DEBUG] [Thread-193517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:47:13.952 [DEBUG] [Thread-193517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:47:13.952 [DEBUG] [Thread-193517] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:47:13.952 [DEBUG] [Thread-193517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:47:13.952 [DEBUG] [Thread-193517] [transport.py] [_log()] Compression: none
2026-02-14T22:47:13.952 [DEBUG] [Thread-193517] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:47:14.008 [DEBUG] [Thread-193517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:47:14.008 [DEBUG] [Thread-193517] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:47:14.008 [DEBUG] [Thread-193517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:47:14.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:47:14.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:47:14.067 [DEBUG] [Thread-193517] [transport.py] [_log()] userauth is OK
2026-02-14T22:47:14.067 [DEBUG] [Thread-193517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:47:14.067 [DEBUG] [Thread-193517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:47:14.067 [DEBUG] [Thread-193517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:47:14.068 [DEBUG] [Thread-193517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:47:14.087 [INFO] [Thread-193517] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:47: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-14T22:47:14.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:47:14.114 [DEBUG] [Thread-193519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:47:14.920 [DEBUG] [Thread-193517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:47:14.920 [DEBUG] [Thread-193517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:47:14.968 [DEBUG] [Thread-193517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:47:14.969 [DEBUG] [Thread-193517] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:47:14.978 [DEBUG] [Thread-193517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:47:14.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:47: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-14T22:47: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-14T22:47:15.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:47:15.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:47:15.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:47:15.013 [DEBUG] [Thread-193517] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:47:29.174 [DEBUG] [Thread-193520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:47:44.210 [DEBUG] [Thread-193521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:47:45.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:47:45.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:47:45.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-14T22:47:47.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 47, 12), 6.68, 63.11, 0.0, 37.25, 9.2, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:47:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:47:12
2026-02-14T22:47:47.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:47:47.979 [DEBUG] [Thread-193522] [transport.py] [_log()] starting thread (client mode): 0xa57d6080
2026-02-14T22:47:47.979 [DEBUG] [Thread-193522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:47:47.999 [DEBUG] [Thread-193522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:47:48.000 [INFO] [Thread-193522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:47:48.003 [DEBUG] [Thread-193522] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:47:48.003 [DEBUG] [Thread-193522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:47:48.004 [DEBUG] [Thread-193522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:47:48.004 [DEBUG] [Thread-193522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:47:48.004 [DEBUG] [Thread-193522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:47:48.004 [DEBUG] [Thread-193522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:47:48.004 [DEBUG] [Thread-193522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:47:48.004 [DEBUG] [Thread-193522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:47:48.004 [DEBUG] [Thread-193522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:47:48.004 [DEBUG] [Thread-193522] [transport.py] [_log()] client lang: <none>
2026-02-14T22:47:48.004 [DEBUG] [Thread-193522] [transport.py] [_log()] server lang: <none>
2026-02-14T22:47:48.004 [DEBUG] [Thread-193522] [transport.py] [_log()] kex follows: False
2026-02-14T22:47:48.004 [DEBUG] [Thread-193522] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:47:48.004 [DEBUG] [Thread-193522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:47:48.004 [DEBUG] [Thread-193522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:47:48.004 [DEBUG] [Thread-193522] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:47:48.004 [DEBUG] [Thread-193522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:47:48.004 [DEBUG] [Thread-193522] [transport.py] [_log()] Compression: none
2026-02-14T22:47:48.004 [DEBUG] [Thread-193522] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:47:48.020 [DEBUG] [Thread-193522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:47:48.021 [DEBUG] [Thread-193522] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:47:48.021 [DEBUG] [Thread-193522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:47:48.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:47:48.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:47:48.023 [DEBUG] [Thread-193522] [transport.py] [_log()] userauth is OK
2026-02-14T22:47:48.023 [DEBUG] [Thread-193522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:47:48.023 [DEBUG] [Thread-193522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:47:48.024 [DEBUG] [Thread-193522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:47:48.024 [DEBUG] [Thread-193522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:47:48.049 [INFO] [Thread-193522] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:47:48.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:47:48.687 [DEBUG] [Thread-193522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:47:48.687 [DEBUG] [Thread-193522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:47:48.688 [DEBUG] [Thread-193522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:47:48.728 [DEBUG] [Thread-193522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:47:48.728 [DEBUG] [Thread-193522] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:47:48.732 [DEBUG] [Thread-193522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:47:48.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:47:48.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:47:48.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:47:48.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:47:48.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:47:48.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:47:48.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:47:48.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:47:48.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:47:48.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.866084 -999.00   +9.10  28.53     68   +3.50 1 1 1 1 1     0    0 5.53 -2.58 ZNESW 24.4 28.5 146.0 33.7 9.5 -25.0 9.4 -23.9 9.2 -23.0 9.5 -24.3
2026-02-14T22:47:48.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:47:48.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:47:48.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.866084
2026-02-14T22:47:48.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:47:48.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:47:48.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:47:48.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:47:48.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:47:48.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:47:12', tmtdew=6.68, humidity=63.11, cloud=0.0, wind=37.25, temperature=9.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:47:12', seeing=4.46, atlas_timestamp='2026-02-14T20:47:09.658', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.02674999999999983, -0.012749999999998707, 0.0045000000000001705, 0.027000000000001023, 0.01925000000000132, 0.011499999999999844, 0.008250000000000313, 0.019499999999998963, -0.016500000000000625, -0.04974999999999952, 0.014499999999999957, 0.049999999999998934, 0.020749999999999602, 0.010999999999999233, 0.028999999999999915, 0.060249999999999915, 0.06799999999999962, -0.016000000000000014, 0.010249999999999204, 0.05099999999999838, 0.029749999999998167, 0.0022500000000000853, 0.021250000000000213, 0.03199999999999825, 0.06900000000000084, 0.01774999999999949, -0.00849999999999973, 0.11299999999999955, 0.09800000000000075, 0.04800000000000182, 0.04300000000000104, 0.06774999999999842], zp_timestamp='2026-02-14T20:46:00')
2026-02-14T22:47:48.759 [DEBUG] [Thread-193522] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:47:48.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-14T22:47:48.855 [DEBUG] [Thread-193525] [transport.py] [_log()] starting thread (client mode): 0xa57d5630
2026-02-14T22:47:48.855 [DEBUG] [Thread-193525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:47:48.870 [DEBUG] [Thread-193525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:47:48.870 [INFO] [Thread-193525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:47:48.878 [DEBUG] [Thread-193525] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:47:48.878 [DEBUG] [Thread-193525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:47:48.878 [DEBUG] [Thread-193525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:47:48.878 [DEBUG] [Thread-193525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:47:48.878 [DEBUG] [Thread-193525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:47:48.878 [DEBUG] [Thread-193525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:47:48.878 [DEBUG] [Thread-193525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:47:48.878 [DEBUG] [Thread-193525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:47:48.878 [DEBUG] [Thread-193525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:47:48.878 [DEBUG] [Thread-193525] [transport.py] [_log()] client lang: <none>
2026-02-14T22:47:48.878 [DEBUG] [Thread-193525] [transport.py] [_log()] server lang: <none>
2026-02-14T22:47:48.878 [DEBUG] [Thread-193525] [transport.py] [_log()] kex follows: False
2026-02-14T22:47:48.878 [DEBUG] [Thread-193525] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:47:48.878 [DEBUG] [Thread-193525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:47:48.879 [DEBUG] [Thread-193525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:47:48.879 [DEBUG] [Thread-193525] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:47:48.879 [DEBUG] [Thread-193525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:47:48.879 [DEBUG] [Thread-193525] [transport.py] [_log()] Compression: none
2026-02-14T22:47:48.879 [DEBUG] [Thread-193525] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:47:48.939 [DEBUG] [Thread-193525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:47:48.940 [DEBUG] [Thread-193525] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:47:48.940 [DEBUG] [Thread-193525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:47:48.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:47:48.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:47:49.001 [DEBUG] [Thread-193525] [transport.py] [_log()] userauth is OK
2026-02-14T22:47:49.001 [DEBUG] [Thread-193525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:47:49.002 [DEBUG] [Thread-193525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:47:49.002 [DEBUG] [Thread-193525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:47:49.002 [DEBUG] [Thread-193525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:47:49.023 [INFO] [Thread-193525] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:47:49.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:47:49.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:47:49.862 [DEBUG] [Thread-193525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:47:49.862 [DEBUG] [Thread-193525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:47:49.910 [DEBUG] [Thread-193525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:47:49.911 [DEBUG] [Thread-193525] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:47:49.920 [DEBUG] [Thread-193525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:47:49.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:47:49.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-14T22:47:49.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-14T22:47:49.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:47:49.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:47:49.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:47:49.957 [DEBUG] [Thread-193525] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:47:57.297 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:47:59.247 [DEBUG] [Thread-193527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:47:59.453 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:47:59.454 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:48:02.563 [DEBUG] [Thread-193528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:48:14.310 [DEBUG] [Thread-193529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:48:19.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:48:19.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:48:19.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-14T22:48:21.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 47, 47), 6.73, 63.11, 0.0, 29.5, 9.22, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:48:21.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:47:47
2026-02-14T22:48:22.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:48:22.438 [DEBUG] [Thread-193530] [transport.py] [_log()] starting thread (client mode): 0xa57d6a10
2026-02-14T22:48:22.439 [DEBUG] [Thread-193530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:48:22.458 [DEBUG] [Thread-193530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:48:22.458 [INFO] [Thread-193530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:48:22.461 [DEBUG] [Thread-193530] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:48:22.462 [DEBUG] [Thread-193530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:48:22.462 [DEBUG] [Thread-193530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:48:22.462 [DEBUG] [Thread-193530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:48:22.462 [DEBUG] [Thread-193530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:48:22.462 [DEBUG] [Thread-193530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:48:22.462 [DEBUG] [Thread-193530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:48:22.462 [DEBUG] [Thread-193530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:48:22.462 [DEBUG] [Thread-193530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:48:22.462 [DEBUG] [Thread-193530] [transport.py] [_log()] client lang: <none>
2026-02-14T22:48:22.462 [DEBUG] [Thread-193530] [transport.py] [_log()] server lang: <none>
2026-02-14T22:48:22.462 [DEBUG] [Thread-193530] [transport.py] [_log()] kex follows: False
2026-02-14T22:48:22.462 [DEBUG] [Thread-193530] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:48:22.462 [DEBUG] [Thread-193530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:48:22.462 [DEBUG] [Thread-193530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:48:22.462 [DEBUG] [Thread-193530] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:48:22.462 [DEBUG] [Thread-193530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:48:22.462 [DEBUG] [Thread-193530] [transport.py] [_log()] Compression: none
2026-02-14T22:48:22.462 [DEBUG] [Thread-193530] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:48:22.478 [DEBUG] [Thread-193530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:48:22.479 [DEBUG] [Thread-193530] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:48:22.479 [DEBUG] [Thread-193530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:48:22.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:48:22.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:48:22.481 [DEBUG] [Thread-193530] [transport.py] [_log()] userauth is OK
2026-02-14T22:48:22.481 [DEBUG] [Thread-193530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:48:22.481 [DEBUG] [Thread-193530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:48:22.482 [DEBUG] [Thread-193530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:48:22.482 [DEBUG] [Thread-193530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:48:22.509 [INFO] [Thread-193530] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:48:22.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:48:23.237 [DEBUG] [Thread-193530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:48:23.238 [DEBUG] [Thread-193530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:48:23.238 [DEBUG] [Thread-193530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:48:23.279 [DEBUG] [Thread-193530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:48:23.279 [DEBUG] [Thread-193530] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:48:23.281 [DEBUG] [Thread-193530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:48:23.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:48:23.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:48:23.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:48:23.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:48:23.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:48:23.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:48:23.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:48:23.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:48:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:48:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.866431 -999.00   +9.10  19.95     67   +3.50 1 1 1 1 1     0    0 5.64 -2.86 ZNESW 21.0 19.9 156.2 31.1 9.5 -24.8 9.4 -23.9 9.2 -22.9 9.5 -23.8
2026-02-14T22:48:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:48:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:48:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.866431
2026-02-14T22:48:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:48:23.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:48:23.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:48:23.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:48:23.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:48:23.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:47:47', tmtdew=6.73, humidity=63.11, cloud=0.0, wind=29.5, temperature=9.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:47:47', seeing=5.3, atlas_timestamp='2026-02-14T20:47:39.638', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.02674999999999983, -0.012749999999998707, 0.0045000000000001705, 0.027000000000001023, 0.01925000000000132, 0.011499999999999844, 0.008250000000000313, 0.019499999999998963, -0.016500000000000625, -0.04974999999999952, 0.014499999999999957, 0.049999999999998934, 0.020749999999999602, 0.010999999999999233, 0.028999999999999915, 0.060249999999999915, 0.06799999999999962, -0.016000000000000014, 0.010249999999999204, 0.05099999999999838, 0.029749999999998167, 0.0022500000000000853, 0.021250000000000213, 0.03199999999999825, 0.06900000000000084, 0.01774999999999949, -0.00849999999999973, 0.11299999999999955, 0.09800000000000075, 0.04800000000000182, 0.04300000000000104, 0.06774999999999842], zp_timestamp='2026-02-14T20:46:00')
2026-02-14T22:48:23.297 [DEBUG] [Thread-193530] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:48:23.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-14T22:48:23.391 [DEBUG] [Thread-193533] [transport.py] [_log()] starting thread (client mode): 0xa2d6fc40
2026-02-14T22:48:23.391 [DEBUG] [Thread-193533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:48:23.406 [DEBUG] [Thread-193533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:48:23.406 [INFO] [Thread-193533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:48:23.413 [DEBUG] [Thread-193533] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:48:23.413 [DEBUG] [Thread-193533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:48:23.413 [DEBUG] [Thread-193533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:48:23.413 [DEBUG] [Thread-193533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:48:23.413 [DEBUG] [Thread-193533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:48:23.413 [DEBUG] [Thread-193533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:48:23.413 [DEBUG] [Thread-193533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:48:23.413 [DEBUG] [Thread-193533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:48:23.413 [DEBUG] [Thread-193533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:48:23.413 [DEBUG] [Thread-193533] [transport.py] [_log()] client lang: <none>
2026-02-14T22:48:23.413 [DEBUG] [Thread-193533] [transport.py] [_log()] server lang: <none>
2026-02-14T22:48:23.413 [DEBUG] [Thread-193533] [transport.py] [_log()] kex follows: False
2026-02-14T22:48:23.413 [DEBUG] [Thread-193533] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:48:23.413 [DEBUG] [Thread-193533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:48:23.414 [DEBUG] [Thread-193533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:48:23.414 [DEBUG] [Thread-193533] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:48:23.414 [DEBUG] [Thread-193533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:48:23.414 [DEBUG] [Thread-193533] [transport.py] [_log()] Compression: none
2026-02-14T22:48:23.414 [DEBUG] [Thread-193533] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:48:23.475 [DEBUG] [Thread-193533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:48:23.476 [DEBUG] [Thread-193533] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:48:23.476 [DEBUG] [Thread-193533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:48:23.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:48:23.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:48:23.534 [DEBUG] [Thread-193533] [transport.py] [_log()] userauth is OK
2026-02-14T22:48:23.534 [DEBUG] [Thread-193533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:48:23.534 [DEBUG] [Thread-193533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:48:23.534 [DEBUG] [Thread-193533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:48:23.534 [DEBUG] [Thread-193533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:48:23.554 [INFO] [Thread-193533] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:48:23.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-14T22:48:23.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:48:24.382 [DEBUG] [Thread-193533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:48:24.383 [DEBUG] [Thread-193533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:48:24.432 [DEBUG] [Thread-193533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:48:24.432 [DEBUG] [Thread-193533] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:48:24.441 [DEBUG] [Thread-193533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:48:24.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:48:24.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-14T22:48:24.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-14T22:48:24.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:48:24.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:48:24.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:48:24.476 [DEBUG] [Thread-193533] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:48:29.346 [DEBUG] [Thread-193535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:48:44.396 [DEBUG] [Thread-193536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:48:54.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:48:54.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:48:54.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:48:56.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 48, 22), 6.73, 63.11, 0.0, 30.91, 9.22, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:48:56.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:48:22
2026-02-14T22:48:56.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:48:56.914 [DEBUG] [Thread-193537] [transport.py] [_log()] starting thread (client mode): 0xa2d6e920
2026-02-14T22:48:56.915 [DEBUG] [Thread-193537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:48:56.935 [DEBUG] [Thread-193537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:48:56.935 [INFO] [Thread-193537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:48:56.938 [DEBUG] [Thread-193537] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:48:56.938 [DEBUG] [Thread-193537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:48:56.938 [DEBUG] [Thread-193537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:48:56.938 [DEBUG] [Thread-193537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:48:56.938 [DEBUG] [Thread-193537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:48:56.938 [DEBUG] [Thread-193537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:48:56.938 [DEBUG] [Thread-193537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:48:56.938 [DEBUG] [Thread-193537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:48:56.938 [DEBUG] [Thread-193537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:48:56.938 [DEBUG] [Thread-193537] [transport.py] [_log()] client lang: <none>
2026-02-14T22:48:56.938 [DEBUG] [Thread-193537] [transport.py] [_log()] server lang: <none>
2026-02-14T22:48:56.938 [DEBUG] [Thread-193537] [transport.py] [_log()] kex follows: False
2026-02-14T22:48:56.938 [DEBUG] [Thread-193537] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:48:56.938 [DEBUG] [Thread-193537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:48:56.938 [DEBUG] [Thread-193537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:48:56.938 [DEBUG] [Thread-193537] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:48:56.938 [DEBUG] [Thread-193537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:48:56.938 [DEBUG] [Thread-193537] [transport.py] [_log()] Compression: none
2026-02-14T22:48:56.938 [DEBUG] [Thread-193537] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:48:56.955 [DEBUG] [Thread-193537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:48:56.955 [DEBUG] [Thread-193537] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:48:56.956 [DEBUG] [Thread-193537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:48:56.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:48:56.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:48:56.958 [DEBUG] [Thread-193537] [transport.py] [_log()] userauth is OK
2026-02-14T22:48:56.958 [DEBUG] [Thread-193537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:48:56.958 [DEBUG] [Thread-193537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:48:56.959 [DEBUG] [Thread-193537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:48:56.959 [DEBUG] [Thread-193537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:48:56.984 [INFO] [Thread-193537] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:48:56.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:48:57.577 [DEBUG] [Thread-193537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:48:57.578 [DEBUG] [Thread-193537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:48:57.578 [DEBUG] [Thread-193537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:48:57.619 [DEBUG] [Thread-193537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:48:57.619 [DEBUG] [Thread-193537] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:48:57.623 [DEBUG] [Thread-193537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:48:57.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:48:57.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:48:57.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:48:57.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:48:57.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:48:57.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:48:57.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:48:57.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:48:57.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:48:57.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.866778 -999.00   +9.10  28.06     68   +3.50 1 1 1 1 1     0    0 5.48 -3.28 ZNESW 25.5 28.1 162.6 31.6 9.5 -25.0 9.3 -23.8 9.2 -22.8 9.5 -23.9
2026-02-14T22:48:57.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:48:57.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:48:57.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.866778
2026-02-14T22:48:57.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:48:57.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:48:57.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:48:57.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:48:57.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:48:57.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:48:22', tmtdew=6.73, humidity=63.11, cloud=0.0, wind=30.91, temperature=9.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:48:23', seeing=5.3, atlas_timestamp='2026-02-14T20:48:09.619', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.02674999999999983, -0.012749999999998707, 0.0045000000000001705, 0.027000000000001023, 0.01925000000000132, 0.011499999999999844, 0.008250000000000313, 0.019499999999998963, -0.016500000000000625, -0.04974999999999952, 0.014499999999999957, 0.049999999999998934, 0.020749999999999602, 0.010999999999999233, 0.028999999999999915, 0.060249999999999915, 0.06799999999999962, -0.016000000000000014, 0.010249999999999204, 0.05099999999999838, 0.029749999999998167, 0.0022500000000000853, 0.021250000000000213, 0.03199999999999825, 0.06900000000000084, 0.01774999999999949, -0.00849999999999973, 0.11299999999999955, 0.09800000000000075, 0.04800000000000182, 0.04300000000000104, 0.06774999999999842], zp_timestamp='2026-02-14T20:46:00')
2026-02-14T22:48:57.650 [DEBUG] [Thread-193537] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:48:57.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:48:57.747 [DEBUG] [Thread-193540] [transport.py] [_log()] starting thread (client mode): 0xa57d4d30
2026-02-14T22:48:57.747 [DEBUG] [Thread-193540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:48:57.762 [DEBUG] [Thread-193540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:48:57.762 [INFO] [Thread-193540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:48:57.769 [DEBUG] [Thread-193540] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:48:57.770 [DEBUG] [Thread-193540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:48:57.770 [DEBUG] [Thread-193540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:48:57.770 [DEBUG] [Thread-193540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:48:57.770 [DEBUG] [Thread-193540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:48:57.770 [DEBUG] [Thread-193540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:48:57.770 [DEBUG] [Thread-193540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:48:57.770 [DEBUG] [Thread-193540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:48:57.770 [DEBUG] [Thread-193540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:48:57.770 [DEBUG] [Thread-193540] [transport.py] [_log()] client lang: <none>
2026-02-14T22:48:57.770 [DEBUG] [Thread-193540] [transport.py] [_log()] server lang: <none>
2026-02-14T22:48:57.770 [DEBUG] [Thread-193540] [transport.py] [_log()] kex follows: False
2026-02-14T22:48:57.770 [DEBUG] [Thread-193540] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:48:57.770 [DEBUG] [Thread-193540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:48:57.770 [DEBUG] [Thread-193540] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:48:57.770 [DEBUG] [Thread-193540] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:48:57.771 [DEBUG] [Thread-193540] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:48:57.771 [DEBUG] [Thread-193540] [transport.py] [_log()] Compression: none
2026-02-14T22:48:57.771 [DEBUG] [Thread-193540] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:48:57.828 [DEBUG] [Thread-193540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:48:57.828 [DEBUG] [Thread-193540] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:48:57.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:48:57.829 [DEBUG] [Thread-193540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:48:57.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:48:57.884 [DEBUG] [Thread-193540] [transport.py] [_log()] userauth is OK
2026-02-14T22:48:57.885 [DEBUG] [Thread-193540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:48:57.885 [DEBUG] [Thread-193540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:48:57.885 [DEBUG] [Thread-193540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:48:57.885 [DEBUG] [Thread-193540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:48:57.905 [INFO] [Thread-193540] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:48: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-14T22:48:57.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:48:58.720 [DEBUG] [Thread-193540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:48:58.720 [DEBUG] [Thread-193540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:48:58.767 [DEBUG] [Thread-193540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:48:58.768 [DEBUG] [Thread-193540] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:48:58.777 [DEBUG] [Thread-193540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:48:58.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:48:58.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:48:58.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-14T22:48:58.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:48:58.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:48:58.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:48:58.813 [DEBUG] [Thread-193540] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:48:59.429 [DEBUG] [Thread-193542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:48:59.655 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:48:59.656 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:49:02.642 [DEBUG] [Thread-193543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:49:14.481 [DEBUG] [Thread-193544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:49:28.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:49:28.824 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:49:28.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-14T22:49:29.519 [DEBUG] [Thread-193545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:49:30.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 48, 58), 6.68, 63.11, 0.0, 37.56, 9.17, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:49:30.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:48:58
2026-02-14T22:49:31.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:49:31.281 [DEBUG] [Thread-193546] [transport.py] [_log()] starting thread (client mode): 0xa57d5b70
2026-02-14T22:49:31.281 [DEBUG] [Thread-193546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:49:31.303 [DEBUG] [Thread-193546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:49:31.304 [INFO] [Thread-193546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:49:31.306 [DEBUG] [Thread-193546] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:49:31.307 [DEBUG] [Thread-193546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:49:31.307 [DEBUG] [Thread-193546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:49:31.307 [DEBUG] [Thread-193546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:49:31.307 [DEBUG] [Thread-193546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:49:31.307 [DEBUG] [Thread-193546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:49:31.307 [DEBUG] [Thread-193546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:49:31.307 [DEBUG] [Thread-193546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:49:31.307 [DEBUG] [Thread-193546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:49:31.307 [DEBUG] [Thread-193546] [transport.py] [_log()] client lang: <none>
2026-02-14T22:49:31.307 [DEBUG] [Thread-193546] [transport.py] [_log()] server lang: <none>
2026-02-14T22:49:31.308 [DEBUG] [Thread-193546] [transport.py] [_log()] kex follows: False
2026-02-14T22:49:31.308 [DEBUG] [Thread-193546] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:49:31.308 [DEBUG] [Thread-193546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:49:31.308 [DEBUG] [Thread-193546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:49:31.308 [DEBUG] [Thread-193546] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:49:31.308 [DEBUG] [Thread-193546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:49:31.308 [DEBUG] [Thread-193546] [transport.py] [_log()] Compression: none
2026-02-14T22:49:31.308 [DEBUG] [Thread-193546] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:49:31.327 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:49:31.329 [DEBUG] [Thread-193546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:49:31.329 [DEBUG] [Thread-193546] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:49:31.330 [DEBUG] [Thread-193546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:49:31.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:49:31.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:49:31.332 [DEBUG] [Thread-193546] [transport.py] [_log()] userauth is OK
2026-02-14T22:49:31.332 [DEBUG] [Thread-193546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:49:31.332 [DEBUG] [Thread-193546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:49:31.333 [DEBUG] [Thread-193546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:49:31.333 [DEBUG] [Thread-193546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:49:31.359 [INFO] [Thread-193546] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:49:31.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:49:32.014 [DEBUG] [Thread-193546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:49:32.014 [DEBUG] [Thread-193546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:49:32.015 [DEBUG] [Thread-193546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:49:32.055 [DEBUG] [Thread-193546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:49:32.056 [DEBUG] [Thread-193546] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:49:32.059 [DEBUG] [Thread-193546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:49:32.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:49:32.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:49:32.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:49:32.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:49:32.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:49:32.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:49:32.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:49:32.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:49:32.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:49:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.867125 -999.00   +9.10  20.64     68   +3.50 1 1 1 1 1     0    0 5.68 -3.78 ZNESW 25.8 20.6 165.4 39.3 9.5 -24.8 9.3 -23.8 9.2 -22.9 9.5 -24.1
2026-02-14T22:49:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:49:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:49:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.867125
2026-02-14T22:49:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:49:32.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:49:32.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:49:32.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:49:32.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:49:32.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:48:58', tmtdew=6.68, humidity=63.11, cloud=0.0, wind=37.56, temperature=9.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:48:58', seeing=4.64, atlas_timestamp='2026-02-14T20:48:39.600', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.02674999999999983, -0.012749999999998707, 0.0045000000000001705, 0.027000000000001023, 0.01925000000000132, 0.011499999999999844, 0.008250000000000313, 0.019499999999998963, -0.016500000000000625, -0.04974999999999952, 0.014499999999999957, 0.049999999999998934, 0.020749999999999602, 0.010999999999999233, 0.028999999999999915, 0.060249999999999915, 0.06799999999999962, -0.016000000000000014, 0.010249999999999204, 0.05099999999999838, 0.029749999999998167, 0.0022500000000000853, 0.021250000000000213, 0.03199999999999825, 0.06900000000000084, 0.01774999999999949, -0.00849999999999973, 0.11299999999999955, 0.09800000000000075, 0.04800000000000182, 0.04300000000000104, 0.06774999999999842], zp_timestamp='2026-02-14T20:46:00')
2026-02-14T22:49:32.089 [DEBUG] [Thread-193546] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:49:32.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:49:32.184 [DEBUG] [Thread-193549] [transport.py] [_log()] starting thread (client mode): 0xa57d6b00
2026-02-14T22:49:32.184 [DEBUG] [Thread-193549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:49:32.199 [DEBUG] [Thread-193549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:49:32.199 [INFO] [Thread-193549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:49:32.207 [DEBUG] [Thread-193549] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:49:32.207 [DEBUG] [Thread-193549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:49:32.207 [DEBUG] [Thread-193549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:49:32.207 [DEBUG] [Thread-193549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:49:32.207 [DEBUG] [Thread-193549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:49:32.207 [DEBUG] [Thread-193549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:49:32.207 [DEBUG] [Thread-193549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:49:32.207 [DEBUG] [Thread-193549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:49:32.207 [DEBUG] [Thread-193549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:49:32.207 [DEBUG] [Thread-193549] [transport.py] [_log()] client lang: <none>
2026-02-14T22:49:32.207 [DEBUG] [Thread-193549] [transport.py] [_log()] server lang: <none>
2026-02-14T22:49:32.207 [DEBUG] [Thread-193549] [transport.py] [_log()] kex follows: False
2026-02-14T22:49:32.208 [DEBUG] [Thread-193549] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:49:32.208 [DEBUG] [Thread-193549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:49:32.208 [DEBUG] [Thread-193549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:49:32.208 [DEBUG] [Thread-193549] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:49:32.208 [DEBUG] [Thread-193549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:49:32.208 [DEBUG] [Thread-193549] [transport.py] [_log()] Compression: none
2026-02-14T22:49:32.208 [DEBUG] [Thread-193549] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:49:32.268 [DEBUG] [Thread-193549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:49:32.269 [DEBUG] [Thread-193549] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:49:32.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:49:32.270 [DEBUG] [Thread-193549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:49:32.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:49:32.331 [DEBUG] [Thread-193549] [transport.py] [_log()] userauth is OK
2026-02-14T22:49:32.331 [DEBUG] [Thread-193549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:49:32.331 [DEBUG] [Thread-193549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:49:32.331 [DEBUG] [Thread-193549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:49:32.332 [DEBUG] [Thread-193549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:49:32.350 [INFO] [Thread-193549] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:49:32.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-14T22:49:32.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:49:33.222 [DEBUG] [Thread-193549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:49:33.222 [DEBUG] [Thread-193549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:49:33.272 [DEBUG] [Thread-193549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:49:33.272 [DEBUG] [Thread-193549] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:49:33.282 [DEBUG] [Thread-193549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:49:33.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:49:33.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-14T22:49: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-14T22:49:33.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:49:33.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:49:33.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:49:33.315 [DEBUG] [Thread-193549] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:49:44.555 [DEBUG] [Thread-193551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:49:59.606 [DEBUG] [Thread-193552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:49:59.874 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:49:59.876 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:50:02.709 [DEBUG] [Thread-193553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:50:03.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:50:03.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:50:03.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:50:05.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 49, 33), 6.83, 62.33, 0.0, 39.16, 9.47, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:50:05.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:49:33
2026-02-14T22:50:05.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:50:05.828 [DEBUG] [Thread-193554] [transport.py] [_log()] starting thread (client mode): 0xa57d7d90
2026-02-14T22:50:05.828 [DEBUG] [Thread-193554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:50:05.849 [DEBUG] [Thread-193554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:50:05.849 [INFO] [Thread-193554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:50:05.852 [DEBUG] [Thread-193554] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:50:05.852 [DEBUG] [Thread-193554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:50:05.852 [DEBUG] [Thread-193554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:50:05.852 [DEBUG] [Thread-193554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:50:05.852 [DEBUG] [Thread-193554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:50:05.852 [DEBUG] [Thread-193554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:50:05.852 [DEBUG] [Thread-193554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:50:05.852 [DEBUG] [Thread-193554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:50:05.852 [DEBUG] [Thread-193554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:50:05.852 [DEBUG] [Thread-193554] [transport.py] [_log()] client lang: <none>
2026-02-14T22:50:05.852 [DEBUG] [Thread-193554] [transport.py] [_log()] server lang: <none>
2026-02-14T22:50:05.852 [DEBUG] [Thread-193554] [transport.py] [_log()] kex follows: False
2026-02-14T22:50:05.852 [DEBUG] [Thread-193554] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:50:05.852 [DEBUG] [Thread-193554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:50:05.852 [DEBUG] [Thread-193554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:50:05.852 [DEBUG] [Thread-193554] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:50:05.852 [DEBUG] [Thread-193554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:50:05.852 [DEBUG] [Thread-193554] [transport.py] [_log()] Compression: none
2026-02-14T22:50:05.852 [DEBUG] [Thread-193554] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:50:05.869 [DEBUG] [Thread-193554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:50:05.870 [DEBUG] [Thread-193554] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:50:05.870 [DEBUG] [Thread-193554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:50:05.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:50:05.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:50:05.872 [DEBUG] [Thread-193554] [transport.py] [_log()] userauth is OK
2026-02-14T22:50:05.872 [DEBUG] [Thread-193554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:50:05.873 [DEBUG] [Thread-193554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:50:05.873 [DEBUG] [Thread-193554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:50:05.873 [DEBUG] [Thread-193554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:50:05.897 [INFO] [Thread-193554] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:50:05.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:50:14.640 [DEBUG] [Thread-193556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:50:14.740 [DEBUG] [Thread-193554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:50:14.740 [DEBUG] [Thread-193554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:50:14.741 [DEBUG] [Thread-193554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:50:14.781 [DEBUG] [Thread-193554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:50:14.781 [DEBUG] [Thread-193554] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:50:14.785 [DEBUG] [Thread-193554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:50:14.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:50:14.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:50:14.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:50:14.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:50:14.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:50:14.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:50:14.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:50:14.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:50:14.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:50:14.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.867473 -999.00   +9.10  24.27     68   +3.50 1 1 1 1 1     0    0 5.62 -3.54 ZNESW 24.4 24.3 141.2 36.8 9.5 -24.9 9.4 -23.8 9.1 -22.8 9.5 -24.0
2026-02-14T22:50:14.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:50:14.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:50:14.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.867473
2026-02-14T22:50:14.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:50:14.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:50:14.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:50:14.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:50:14.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:50:14.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:49:33', tmtdew=6.83, humidity=62.33, cloud=0.0, wind=39.16, temperature=9.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:49:34', seeing=5.11, atlas_timestamp='2026-02-14T20:49:09.667', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.02674999999999983, -0.012749999999998707, 0.0045000000000001705, 0.027000000000001023, 0.01925000000000132, 0.011499999999999844, 0.008250000000000313, 0.019499999999998963, -0.016500000000000625, -0.04974999999999952, 0.014499999999999957, 0.049999999999998934, 0.020749999999999602, 0.010999999999999233, 0.028999999999999915, 0.060249999999999915, 0.06799999999999962, -0.016000000000000014, 0.010249999999999204, 0.05099999999999838, 0.029749999999998167, 0.0022500000000000853, 0.021250000000000213, 0.03199999999999825, 0.06900000000000084, 0.01774999999999949, -0.00849999999999973, 0.11299999999999955, 0.09800000000000075, 0.04800000000000182, 0.04300000000000104, 0.06774999999999842], zp_timestamp='2026-02-14T20:46:00')
2026-02-14T22:50:14.819 [DEBUG] [Thread-193554] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:50:14.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-14T22:50:14.918 [DEBUG] [Thread-193558] [transport.py] [_log()] starting thread (client mode): 0xa2d7b940
2026-02-14T22:50:14.918 [DEBUG] [Thread-193558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:50:14.932 [DEBUG] [Thread-193558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:50:14.932 [INFO] [Thread-193558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:50:14.939 [DEBUG] [Thread-193558] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:50:14.939 [DEBUG] [Thread-193558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:50:14.939 [DEBUG] [Thread-193558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:50:14.940 [DEBUG] [Thread-193558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:50:14.940 [DEBUG] [Thread-193558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:50:14.940 [DEBUG] [Thread-193558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:50:14.940 [DEBUG] [Thread-193558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:50:14.940 [DEBUG] [Thread-193558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:50:14.940 [DEBUG] [Thread-193558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:50:14.940 [DEBUG] [Thread-193558] [transport.py] [_log()] client lang: <none>
2026-02-14T22:50:14.940 [DEBUG] [Thread-193558] [transport.py] [_log()] server lang: <none>
2026-02-14T22:50:14.940 [DEBUG] [Thread-193558] [transport.py] [_log()] kex follows: False
2026-02-14T22:50:14.940 [DEBUG] [Thread-193558] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:50:14.940 [DEBUG] [Thread-193558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:50:14.940 [DEBUG] [Thread-193558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:50:14.940 [DEBUG] [Thread-193558] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:50:14.940 [DEBUG] [Thread-193558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:50:14.940 [DEBUG] [Thread-193558] [transport.py] [_log()] Compression: none
2026-02-14T22:50:14.940 [DEBUG] [Thread-193558] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:50:14.999 [DEBUG] [Thread-193558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:50:15.000 [DEBUG] [Thread-193558] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:50:15.000 [DEBUG] [Thread-193558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:50:15.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:50:15.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:50:15.055 [DEBUG] [Thread-193558] [transport.py] [_log()] userauth is OK
2026-02-14T22:50:15.056 [DEBUG] [Thread-193558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:50:15.056 [DEBUG] [Thread-193558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:50:15.056 [DEBUG] [Thread-193558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:50:15.056 [DEBUG] [Thread-193558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:50:15.074 [INFO] [Thread-193558] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:50:15.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-14T22:50:15.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:50:15.872 [DEBUG] [Thread-193558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:50:15.872 [DEBUG] [Thread-193558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:50:15.919 [DEBUG] [Thread-193558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:50:15.920 [DEBUG] [Thread-193558] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:50:15.929 [DEBUG] [Thread-193558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:50:15.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:50:15.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-14T22:50:15.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-14T22:50:15.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:50:15.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:50:15.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:50:15.966 [DEBUG] [Thread-193558] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:50:29.675 [DEBUG] [Thread-193560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:50:44.726 [DEBUG] [Thread-193561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:50:45.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:50:45.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:50: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-14T22:50:48.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 50, 9), 6.68, 63.13, 0.0, 35.29, 9.22, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:50:48.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:50:09
2026-02-14T22:50:48.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:50:49.026 [DEBUG] [Thread-193562] [transport.py] [_log()] starting thread (client mode): 0xa2d7b190
2026-02-14T22:50:49.026 [DEBUG] [Thread-193562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:50:49.045 [DEBUG] [Thread-193562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:50:49.045 [INFO] [Thread-193562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:50:49.048 [DEBUG] [Thread-193562] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:50:49.048 [DEBUG] [Thread-193562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:50:49.048 [DEBUG] [Thread-193562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:50:49.048 [DEBUG] [Thread-193562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:50:49.049 [DEBUG] [Thread-193562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:50:49.049 [DEBUG] [Thread-193562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:50:49.049 [DEBUG] [Thread-193562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:50:49.049 [DEBUG] [Thread-193562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:50:49.049 [DEBUG] [Thread-193562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:50:49.049 [DEBUG] [Thread-193562] [transport.py] [_log()] client lang: <none>
2026-02-14T22:50:49.049 [DEBUG] [Thread-193562] [transport.py] [_log()] server lang: <none>
2026-02-14T22:50:49.049 [DEBUG] [Thread-193562] [transport.py] [_log()] kex follows: False
2026-02-14T22:50:49.049 [DEBUG] [Thread-193562] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:50:49.049 [DEBUG] [Thread-193562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:50:49.049 [DEBUG] [Thread-193562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:50:49.049 [DEBUG] [Thread-193562] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:50:49.049 [DEBUG] [Thread-193562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:50:49.049 [DEBUG] [Thread-193562] [transport.py] [_log()] Compression: none
2026-02-14T22:50:49.049 [DEBUG] [Thread-193562] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:50:49.066 [DEBUG] [Thread-193562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:50:49.067 [DEBUG] [Thread-193562] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:50:49.067 [DEBUG] [Thread-193562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:50:49.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:50:49.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:50:49.069 [DEBUG] [Thread-193562] [transport.py] [_log()] userauth is OK
2026-02-14T22:50:49.069 [DEBUG] [Thread-193562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:50:49.070 [DEBUG] [Thread-193562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:50:49.070 [DEBUG] [Thread-193562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:50:49.070 [DEBUG] [Thread-193562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:50:49.094 [INFO] [Thread-193562] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:50:49.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:50:49.712 [DEBUG] [Thread-193562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:50:49.712 [DEBUG] [Thread-193562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:50:49.712 [DEBUG] [Thread-193562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:50:49.753 [DEBUG] [Thread-193562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:50:49.754 [DEBUG] [Thread-193562] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:50:49.757 [DEBUG] [Thread-193562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:50:49.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:50:49.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:50:49.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:50:49.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:50:49.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:50:49.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:50:49.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:50:49.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:50:49.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:50:49.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.868167 -999.00   +9.10  32.18     68   +3.50 1 1 2 1 1     0    0 5.49 -3.85 ZNESW 24.9 32.2 152.2 39.5 9.5 -24.7 9.3 -23.7 9.1 -22.8 9.5 -24.0
2026-02-14T22:50:49.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:50:49.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:50:49.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.868167
2026-02-14T22:50:49.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:50:49.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:50:49.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:50:49.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:50:49.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:50:49.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:50:09', tmtdew=6.68, humidity=63.13, cloud=0.0, wind=35.29, temperature=9.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:50:45', seeing=4.46, atlas_timestamp='2026-02-14T20:50:09.629', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.00274999999999892, -0.004749999999999588, -0.01950000000000074, 0.009499999999999176, 0.0032500000000013074, 0.005000000000000782, -0.0012499999999988631, 0.02499999999999858, 0.0045000000000001705, -0.056750000000000966, 0.0129999999999999, 0.07649999999999935, -0.0007500000000000284, 0.023499999999998522, 0.026499999999998636, 0.05075000000000074, 0.0625, -0.025000000000000355, 0.040249999999998565, 0.02999999999999936, 0.04724999999999824, 0.0032500000000013074, 0.01124999999999865, 0.04800000000000004, 0.059499999999999886, 0.011749999999999261, 0.015499999999999403, 0.10800000000000054, 0.07500000000000107, 0.04200000000000159, 0.03900000000000148, 0.03774999999999906], zp_timestamp='2026-02-14T20:49:00')
2026-02-14T22:50:49.786 [DEBUG] [Thread-193562] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:50: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-14T22:50:49.883 [DEBUG] [Thread-193565] [transport.py] [_log()] starting thread (client mode): 0xa57d6650
2026-02-14T22:50:49.883 [DEBUG] [Thread-193565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:50:49.897 [DEBUG] [Thread-193565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:50:49.897 [INFO] [Thread-193565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:50:49.905 [DEBUG] [Thread-193565] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:50:49.905 [DEBUG] [Thread-193565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:50:49.906 [DEBUG] [Thread-193565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:50:49.906 [DEBUG] [Thread-193565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:50:49.906 [DEBUG] [Thread-193565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:50:49.906 [DEBUG] [Thread-193565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:50:49.906 [DEBUG] [Thread-193565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:50:49.906 [DEBUG] [Thread-193565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:50:49.906 [DEBUG] [Thread-193565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:50:49.906 [DEBUG] [Thread-193565] [transport.py] [_log()] client lang: <none>
2026-02-14T22:50:49.906 [DEBUG] [Thread-193565] [transport.py] [_log()] server lang: <none>
2026-02-14T22:50:49.906 [DEBUG] [Thread-193565] [transport.py] [_log()] kex follows: False
2026-02-14T22:50:49.906 [DEBUG] [Thread-193565] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:50:49.906 [DEBUG] [Thread-193565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:50:49.906 [DEBUG] [Thread-193565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:50:49.906 [DEBUG] [Thread-193565] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:50:49.906 [DEBUG] [Thread-193565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:50:49.906 [DEBUG] [Thread-193565] [transport.py] [_log()] Compression: none
2026-02-14T22:50:49.907 [DEBUG] [Thread-193565] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:50:49.962 [DEBUG] [Thread-193565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:50:49.963 [DEBUG] [Thread-193565] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:50:49.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:50:49.964 [DEBUG] [Thread-193565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:50:49.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:50:50.022 [DEBUG] [Thread-193565] [transport.py] [_log()] userauth is OK
2026-02-14T22:50:50.023 [DEBUG] [Thread-193565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:50:50.023 [DEBUG] [Thread-193565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:50:50.023 [DEBUG] [Thread-193565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:50:50.023 [DEBUG] [Thread-193565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:50:50.042 [INFO] [Thread-193565] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:50:50.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-14T22:50:50.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:50:50.915 [DEBUG] [Thread-193565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:50:50.916 [DEBUG] [Thread-193565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:50:50.964 [DEBUG] [Thread-193565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:50:50.964 [DEBUG] [Thread-193565] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:50:50.972 [DEBUG] [Thread-193565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:50:50.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:50:50.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:50:50.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:50:50.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:50:50.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:50:50.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:50:51.003 [DEBUG] [Thread-193565] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:50:59.771 [DEBUG] [Thread-193567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:51:00.077 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:51:00.078 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:51:02.771 [DEBUG] [Thread-193568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:51:04.901 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:51:14.831 [DEBUG] [Thread-193569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:51:21.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:51:21.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:51:21.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:51:23.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 50, 45), 6.67, 63.15, 0.0, 33.74, 9.17, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:51:23.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:50:45
2026-02-14T22:51:23.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:51:23.735 [DEBUG] [Thread-193570] [transport.py] [_log()] starting thread (client mode): 0xa57c0430
2026-02-14T22:51:23.735 [DEBUG] [Thread-193570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:51:23.758 [DEBUG] [Thread-193570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:51:23.758 [INFO] [Thread-193570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:51:23.759 [DEBUG] [Thread-193570] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:51:23.759 [DEBUG] [Thread-193570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:51:23.759 [DEBUG] [Thread-193570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:51:23.759 [DEBUG] [Thread-193570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:51:23.759 [DEBUG] [Thread-193570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:51:23.759 [DEBUG] [Thread-193570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:51:23.759 [DEBUG] [Thread-193570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:51:23.759 [DEBUG] [Thread-193570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:51:23.759 [DEBUG] [Thread-193570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:51:23.759 [DEBUG] [Thread-193570] [transport.py] [_log()] client lang: <none>
2026-02-14T22:51:23.759 [DEBUG] [Thread-193570] [transport.py] [_log()] server lang: <none>
2026-02-14T22:51:23.759 [DEBUG] [Thread-193570] [transport.py] [_log()] kex follows: False
2026-02-14T22:51:23.759 [DEBUG] [Thread-193570] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:51:23.759 [DEBUG] [Thread-193570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:51:23.759 [DEBUG] [Thread-193570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:51:23.759 [DEBUG] [Thread-193570] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:51:23.759 [DEBUG] [Thread-193570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:51:23.759 [DEBUG] [Thread-193570] [transport.py] [_log()] Compression: none
2026-02-14T22:51:23.759 [DEBUG] [Thread-193570] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:51:23.775 [DEBUG] [Thread-193570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:51:23.775 [DEBUG] [Thread-193570] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:51:23.775 [DEBUG] [Thread-193570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:51:23.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:51:23.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:51:23.776 [DEBUG] [Thread-193570] [transport.py] [_log()] userauth is OK
2026-02-14T22:51:23.776 [DEBUG] [Thread-193570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:51:23.776 [DEBUG] [Thread-193570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:51:23.777 [DEBUG] [Thread-193570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:51:23.777 [DEBUG] [Thread-193570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:51:23.790 [INFO] [Thread-193570] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:51:23.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:51:24.404 [DEBUG] [Thread-193570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:51:24.405 [DEBUG] [Thread-193570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:51:24.405 [DEBUG] [Thread-193570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:51:24.445 [DEBUG] [Thread-193570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:51:24.446 [DEBUG] [Thread-193570] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:51:24.449 [DEBUG] [Thread-193570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:51:24.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:51:24.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:51:24.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:51:24.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:51:24.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:51:24.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:51:24.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:51:24.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:51:24.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:51:24.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.868514 -999.00   +9.10  28.13     68   +3.50 1 1 1 1 1     0    0 5.61 -3.85 ZNESW 28.3 28.1 156.8 37.4 9.5 -24.7 9.3 -23.8 9.1 -22.8 9.5 -24.0
2026-02-14T22:51:24.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:51:24.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:51:24.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.868514
2026-02-14T22:51:24.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:51:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:51:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:51:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:51:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:51:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:50:45', tmtdew=6.67, humidity=63.15, cloud=0.0, wind=33.74, temperature=9.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:50:45', seeing=4.46, atlas_timestamp='2026-02-14T20:50:39.610', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.00274999999999892, -0.004749999999999588, -0.01950000000000074, 0.009499999999999176, 0.0032500000000013074, 0.005000000000000782, -0.0012499999999988631, 0.02499999999999858, 0.0045000000000001705, -0.056750000000000966, 0.0129999999999999, 0.07649999999999935, -0.0007500000000000284, 0.023499999999998522, 0.026499999999998636, 0.05075000000000074, 0.0625, -0.025000000000000355, 0.040249999999998565, 0.02999999999999936, 0.04724999999999824, 0.0032500000000013074, 0.01124999999999865, 0.04800000000000004, 0.059499999999999886, 0.011749999999999261, 0.015499999999999403, 0.10800000000000054, 0.07500000000000107, 0.04200000000000159, 0.03900000000000148, 0.03774999999999906], zp_timestamp='2026-02-14T20:49:00')
2026-02-14T22:51:24.476 [DEBUG] [Thread-193570] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:51:24.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-14T22:51:24.574 [DEBUG] [Thread-193573] [transport.py] [_log()] starting thread (client mode): 0xa57c1060
2026-02-14T22:51:24.574 [DEBUG] [Thread-193573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:51:24.589 [DEBUG] [Thread-193573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:51:24.589 [INFO] [Thread-193573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:51:24.597 [DEBUG] [Thread-193573] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:51:24.597 [DEBUG] [Thread-193573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:51:24.597 [DEBUG] [Thread-193573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:51:24.597 [DEBUG] [Thread-193573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:51:24.597 [DEBUG] [Thread-193573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:51:24.597 [DEBUG] [Thread-193573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:51:24.597 [DEBUG] [Thread-193573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:51:24.597 [DEBUG] [Thread-193573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:51:24.597 [DEBUG] [Thread-193573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:51:24.597 [DEBUG] [Thread-193573] [transport.py] [_log()] client lang: <none>
2026-02-14T22:51:24.597 [DEBUG] [Thread-193573] [transport.py] [_log()] server lang: <none>
2026-02-14T22:51:24.598 [DEBUG] [Thread-193573] [transport.py] [_log()] kex follows: False
2026-02-14T22:51:24.598 [DEBUG] [Thread-193573] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:51:24.598 [DEBUG] [Thread-193573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:51:24.598 [DEBUG] [Thread-193573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:51:24.598 [DEBUG] [Thread-193573] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:51:24.598 [DEBUG] [Thread-193573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:51:24.598 [DEBUG] [Thread-193573] [transport.py] [_log()] Compression: none
2026-02-14T22:51:24.598 [DEBUG] [Thread-193573] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:51:24.658 [DEBUG] [Thread-193573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:51:24.659 [DEBUG] [Thread-193573] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:51:24.659 [DEBUG] [Thread-193573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:51:24.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:51:24.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:51:24.714 [DEBUG] [Thread-193573] [transport.py] [_log()] userauth is OK
2026-02-14T22:51:24.714 [DEBUG] [Thread-193573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:51:24.714 [DEBUG] [Thread-193573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:51:24.714 [DEBUG] [Thread-193573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:51:24.714 [DEBUG] [Thread-193573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:51:24.732 [INFO] [Thread-193573] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:51:24.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:51:24.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:51:25.541 [DEBUG] [Thread-193573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:51:25.549 [DEBUG] [Thread-193573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:51:25.590 [DEBUG] [Thread-193573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:51:25.590 [DEBUG] [Thread-193573] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:51:25.599 [DEBUG] [Thread-193573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:51:25.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:51:25.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:51:25.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-14T22:51:25.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:51:25.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:51:25.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:51:25.635 [DEBUG] [Thread-193573] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:51:29.861 [DEBUG] [Thread-193575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:51:44.904 [DEBUG] [Thread-193576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:51:55.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:51:55.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:51:55.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-14T22:51:57.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 51, 21), 6.67, 63.15, 0.0, 37.88, 9.14, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:51:57.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:51:21
2026-02-14T22:51:58.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:51:58.550 [DEBUG] [Thread-193577] [transport.py] [_log()] starting thread (client mode): 0xa57c3850
2026-02-14T22:51:58.550 [DEBUG] [Thread-193577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:51:58.572 [DEBUG] [Thread-193577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:51:58.572 [INFO] [Thread-193577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:51:58.575 [DEBUG] [Thread-193577] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:51:58.575 [DEBUG] [Thread-193577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:51:58.575 [DEBUG] [Thread-193577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:51:58.575 [DEBUG] [Thread-193577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:51:58.575 [DEBUG] [Thread-193577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:51:58.575 [DEBUG] [Thread-193577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:51:58.575 [DEBUG] [Thread-193577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:51:58.575 [DEBUG] [Thread-193577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:51:58.575 [DEBUG] [Thread-193577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:51:58.575 [DEBUG] [Thread-193577] [transport.py] [_log()] client lang: <none>
2026-02-14T22:51:58.575 [DEBUG] [Thread-193577] [transport.py] [_log()] server lang: <none>
2026-02-14T22:51:58.575 [DEBUG] [Thread-193577] [transport.py] [_log()] kex follows: False
2026-02-14T22:51:58.575 [DEBUG] [Thread-193577] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:51:58.575 [DEBUG] [Thread-193577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:51:58.575 [DEBUG] [Thread-193577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:51:58.575 [DEBUG] [Thread-193577] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:51:58.575 [DEBUG] [Thread-193577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:51:58.575 [DEBUG] [Thread-193577] [transport.py] [_log()] Compression: none
2026-02-14T22:51:58.575 [DEBUG] [Thread-193577] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:51:58.591 [DEBUG] [Thread-193577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:51:58.591 [DEBUG] [Thread-193577] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:51:58.591 [DEBUG] [Thread-193577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:51:58.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:51:58.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:51:58.592 [DEBUG] [Thread-193577] [transport.py] [_log()] userauth is OK
2026-02-14T22:51:58.592 [DEBUG] [Thread-193577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:51:58.593 [DEBUG] [Thread-193577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:51:58.593 [DEBUG] [Thread-193577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:51:58.593 [DEBUG] [Thread-193577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:51:58.606 [INFO] [Thread-193577] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:51:58.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:51:59.237 [DEBUG] [Thread-193577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:51:59.237 [DEBUG] [Thread-193577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:51:59.238 [DEBUG] [Thread-193577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:51:59.278 [DEBUG] [Thread-193577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:51:59.279 [DEBUG] [Thread-193577] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:51:59.282 [DEBUG] [Thread-193577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:51:59.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:51:59.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:51:59.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:51:59.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:51:59.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:51:59.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:51:59.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:51:59.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:51:59.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:51:59.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.868862 -999.00   +9.10  23.75     68   +3.50 1 1 1 1 1     0    0 5.54 -3.95 ZNESW 20.9 23.8 153.3 38.3 9.5 -24.9 9.4 -23.9 9.1 -22.8 9.5 -24.1
2026-02-14T22:51:59.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:51:59.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:51:59.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.868862
2026-02-14T22:51:59.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:51:59.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:51:59.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:51:59.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:51:59.308 [DEBUG] [Thread-193577] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:51:59.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:51:59.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:51:21', tmtdew=6.67, humidity=63.15, cloud=0.0, wind=37.88, temperature=9.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:51:21', seeing=4.06, atlas_timestamp='2026-02-14T20:51:09.677', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.00274999999999892, -0.004749999999999588, -0.01950000000000074, 0.009499999999999176, 0.0032500000000013074, 0.005000000000000782, -0.0012499999999988631, 0.02499999999999858, 0.0045000000000001705, -0.056750000000000966, 0.0129999999999999, 0.07649999999999935, -0.0007500000000000284, 0.023499999999998522, 0.026499999999998636, 0.05075000000000074, 0.0625, -0.025000000000000355, 0.040249999999998565, 0.02999999999999936, 0.04724999999999824, 0.0032500000000013074, 0.01124999999999865, 0.04800000000000004, 0.059499999999999886, 0.011749999999999261, 0.015499999999999403, 0.10800000000000054, 0.07500000000000107, 0.04200000000000159, 0.03900000000000148, 0.03774999999999906], zp_timestamp='2026-02-14T20:49:00')
2026-02-14T22:51:59.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-14T22:51:59.404 [DEBUG] [Thread-193580] [transport.py] [_log()] starting thread (client mode): 0xa2d797b0
2026-02-14T22:51:59.404 [DEBUG] [Thread-193580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:51:59.418 [DEBUG] [Thread-193580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:51:59.419 [INFO] [Thread-193580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:51:59.426 [DEBUG] [Thread-193580] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:51:59.427 [DEBUG] [Thread-193580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:51:59.427 [DEBUG] [Thread-193580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:51:59.427 [DEBUG] [Thread-193580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:51:59.427 [DEBUG] [Thread-193580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:51:59.428 [DEBUG] [Thread-193580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:51:59.428 [DEBUG] [Thread-193580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:51:59.428 [DEBUG] [Thread-193580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:51:59.428 [DEBUG] [Thread-193580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:51:59.428 [DEBUG] [Thread-193580] [transport.py] [_log()] client lang: <none>
2026-02-14T22:51:59.428 [DEBUG] [Thread-193580] [transport.py] [_log()] server lang: <none>
2026-02-14T22:51:59.428 [DEBUG] [Thread-193580] [transport.py] [_log()] kex follows: False
2026-02-14T22:51:59.428 [DEBUG] [Thread-193580] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:51:59.428 [DEBUG] [Thread-193580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:51:59.428 [DEBUG] [Thread-193580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:51:59.428 [DEBUG] [Thread-193580] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:51:59.428 [DEBUG] [Thread-193580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:51:59.428 [DEBUG] [Thread-193580] [transport.py] [_log()] Compression: none
2026-02-14T22:51:59.429 [DEBUG] [Thread-193580] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:51:59.485 [DEBUG] [Thread-193580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:51:59.486 [DEBUG] [Thread-193580] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:51:59.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:51:59.487 [DEBUG] [Thread-193580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:51:59.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:51:59.542 [DEBUG] [Thread-193580] [transport.py] [_log()] userauth is OK
2026-02-14T22:51:59.542 [DEBUG] [Thread-193580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:51:59.542 [DEBUG] [Thread-193580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:51:59.542 [DEBUG] [Thread-193580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:51:59.542 [DEBUG] [Thread-193580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:51:59.561 [INFO] [Thread-193580] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:51:59.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-14T22:51:59.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:51:59.939 [DEBUG] [Thread-193582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:52:00.275 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:52:00.276 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:52:00.450 [DEBUG] [Thread-193580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:52:00.451 [DEBUG] [Thread-193580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:52:00.498 [DEBUG] [Thread-193580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:52:00.498 [DEBUG] [Thread-193580] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:52:00.508 [DEBUG] [Thread-193580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:52:00.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:52:00.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-14T22:52:00.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:52:00.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:52:00.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:52:00.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:52:00.544 [DEBUG] [Thread-193580] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:52:02.827 [DEBUG] [Thread-193583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:52:14.999 [DEBUG] [Thread-193584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:52:30.034 [DEBUG] [Thread-193585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:52:30.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:52:30.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:52:30.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-14T22:52:32.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 51, 57), 6.61, 63.2, 0.0, 35.99, 9.15, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:52:32.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:51:57
2026-02-14T22:52:32.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:52:33.145 [DEBUG] [Thread-193586] [transport.py] [_log()] starting thread (client mode): 0xa57d7c40
2026-02-14T22:52:33.145 [DEBUG] [Thread-193586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:52:33.166 [DEBUG] [Thread-193586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:52:33.166 [INFO] [Thread-193586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:52:33.169 [DEBUG] [Thread-193586] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:52:33.169 [DEBUG] [Thread-193586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:52:33.169 [DEBUG] [Thread-193586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:52:33.169 [DEBUG] [Thread-193586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:52:33.169 [DEBUG] [Thread-193586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:52:33.169 [DEBUG] [Thread-193586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:52:33.169 [DEBUG] [Thread-193586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:52:33.169 [DEBUG] [Thread-193586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:52:33.169 [DEBUG] [Thread-193586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:52:33.169 [DEBUG] [Thread-193586] [transport.py] [_log()] client lang: <none>
2026-02-14T22:52:33.170 [DEBUG] [Thread-193586] [transport.py] [_log()] server lang: <none>
2026-02-14T22:52:33.170 [DEBUG] [Thread-193586] [transport.py] [_log()] kex follows: False
2026-02-14T22:52:33.170 [DEBUG] [Thread-193586] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:52:33.170 [DEBUG] [Thread-193586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:52:33.170 [DEBUG] [Thread-193586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:52:33.170 [DEBUG] [Thread-193586] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:52:33.170 [DEBUG] [Thread-193586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:52:33.170 [DEBUG] [Thread-193586] [transport.py] [_log()] Compression: none
2026-02-14T22:52:33.170 [DEBUG] [Thread-193586] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:52:33.186 [DEBUG] [Thread-193586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:52:33.186 [DEBUG] [Thread-193586] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:52:33.187 [DEBUG] [Thread-193586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:52:33.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:52:33.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:52:33.189 [DEBUG] [Thread-193586] [transport.py] [_log()] userauth is OK
2026-02-14T22:52:33.189 [DEBUG] [Thread-193586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:52:33.189 [DEBUG] [Thread-193586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:52:33.189 [DEBUG] [Thread-193586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:52:33.189 [DEBUG] [Thread-193586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:52:33.206 [INFO] [Thread-193586] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:52:33.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:52:33.815 [DEBUG] [Thread-193586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:52:33.815 [DEBUG] [Thread-193586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:52:33.815 [DEBUG] [Thread-193586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:52:33.856 [DEBUG] [Thread-193586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:52:33.856 [DEBUG] [Thread-193586] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:52:33.859 [DEBUG] [Thread-193586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:52:33.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:52:33.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:52:33.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:52:33.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:52:33.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:52:33.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:52:33.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:52:33.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:52:33.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:52:33.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.869209 -999.00   +9.10  26.30     68   +3.50 1 1 1 1 1     0    0 5.49 -4.10 ZNESW 27.8 26.3 156.4 30.5 9.5 -24.9 9.3 -24.0 9.1 -22.8 9.5 -24.2
2026-02-14T22:52:33.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:52:33.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:52:33.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.869209
2026-02-14T22:52:33.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:52:33.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:52:33.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:52:33.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:52:33.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:52:33.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:51:57', tmtdew=6.61, humidity=63.2, cloud=0.0, wind=35.99, temperature=9.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:51:57', seeing=4.41, atlas_timestamp='2026-02-14T20:51:39.658', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.00274999999999892, -0.004749999999999588, -0.01950000000000074, 0.009499999999999176, 0.0032500000000013074, 0.005000000000000782, -0.0012499999999988631, 0.02499999999999858, 0.0045000000000001705, -0.056750000000000966, 0.0129999999999999, 0.07649999999999935, -0.0007500000000000284, 0.023499999999998522, 0.026499999999998636, 0.05075000000000074, 0.0625, -0.025000000000000355, 0.040249999999998565, 0.02999999999999936, 0.04724999999999824, 0.0032500000000013074, 0.01124999999999865, 0.04800000000000004, 0.059499999999999886, 0.011749999999999261, 0.015499999999999403, 0.10800000000000054, 0.07500000000000107, 0.04200000000000159, 0.03900000000000148, 0.03774999999999906], zp_timestamp='2026-02-14T20:49:00')
2026-02-14T22:52:33.883 [DEBUG] [Thread-193586] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:52:33.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-14T22:52:33.978 [DEBUG] [Thread-193589] [transport.py] [_log()] starting thread (client mode): 0xa2d78b50
2026-02-14T22:52:33.978 [DEBUG] [Thread-193589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:52:33.992 [DEBUG] [Thread-193589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:52:33.992 [INFO] [Thread-193589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:52:34.000 [DEBUG] [Thread-193589] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:52:34.000 [DEBUG] [Thread-193589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:52:34.000 [DEBUG] [Thread-193589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:52:34.001 [DEBUG] [Thread-193589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:52:34.001 [DEBUG] [Thread-193589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:52:34.001 [DEBUG] [Thread-193589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:52:34.001 [DEBUG] [Thread-193589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:52:34.001 [DEBUG] [Thread-193589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:52:34.001 [DEBUG] [Thread-193589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:52:34.001 [DEBUG] [Thread-193589] [transport.py] [_log()] client lang: <none>
2026-02-14T22:52:34.001 [DEBUG] [Thread-193589] [transport.py] [_log()] server lang: <none>
2026-02-14T22:52:34.001 [DEBUG] [Thread-193589] [transport.py] [_log()] kex follows: False
2026-02-14T22:52:34.001 [DEBUG] [Thread-193589] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:52:34.001 [DEBUG] [Thread-193589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:52:34.001 [DEBUG] [Thread-193589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:52:34.001 [DEBUG] [Thread-193589] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:52:34.001 [DEBUG] [Thread-193589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:52:34.001 [DEBUG] [Thread-193589] [transport.py] [_log()] Compression: none
2026-02-14T22:52:34.001 [DEBUG] [Thread-193589] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:52:34.057 [DEBUG] [Thread-193589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:52:34.058 [DEBUG] [Thread-193589] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:52:34.058 [DEBUG] [Thread-193589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:52:34.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:52:34.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:52:34.113 [DEBUG] [Thread-193589] [transport.py] [_log()] userauth is OK
2026-02-14T22:52:34.113 [DEBUG] [Thread-193589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:52:34.113 [DEBUG] [Thread-193589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:52:34.114 [DEBUG] [Thread-193589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:52:34.114 [DEBUG] [Thread-193589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:52:34.133 [INFO] [Thread-193589] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:52:34.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-14T22:52:34.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:52:34.946 [DEBUG] [Thread-193589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:52:34.947 [DEBUG] [Thread-193589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:52:34.994 [DEBUG] [Thread-193589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:52:34.994 [DEBUG] [Thread-193589] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:52:35.003 [DEBUG] [Thread-193589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:52:35.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:52:35.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:52:35.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-14T22:52:35.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:52:35.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:52:35.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:52:35.039 [DEBUG] [Thread-193589] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:52:39.176 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:52:45.070 [DEBUG] [Thread-193591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:53:00.120 [DEBUG] [Thread-193592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:53:00.478 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:53:00.480 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:53:02.890 [DEBUG] [Thread-193593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:53:05.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:53:05.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:53:05.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-14T22:53:07.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 52, 32), 6.6, 63.23, 0.0, 35.69, 9.12, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:53:07.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:52:32
2026-02-14T22:53:07.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:53:07.784 [DEBUG] [Thread-193594] [transport.py] [_log()] starting thread (client mode): 0xa2d11240
2026-02-14T22:53:07.784 [DEBUG] [Thread-193594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:53:07.800 [DEBUG] [Thread-193594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:53:07.800 [INFO] [Thread-193594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:53:07.803 [DEBUG] [Thread-193594] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:53:07.803 [DEBUG] [Thread-193594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:53:07.803 [DEBUG] [Thread-193594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:53:07.803 [DEBUG] [Thread-193594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:53:07.803 [DEBUG] [Thread-193594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:53:07.803 [DEBUG] [Thread-193594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:53:07.803 [DEBUG] [Thread-193594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:53:07.803 [DEBUG] [Thread-193594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:53:07.803 [DEBUG] [Thread-193594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:53:07.803 [DEBUG] [Thread-193594] [transport.py] [_log()] client lang: <none>
2026-02-14T22:53:07.803 [DEBUG] [Thread-193594] [transport.py] [_log()] server lang: <none>
2026-02-14T22:53:07.804 [DEBUG] [Thread-193594] [transport.py] [_log()] kex follows: False
2026-02-14T22:53:07.804 [DEBUG] [Thread-193594] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:53:07.804 [DEBUG] [Thread-193594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:53:07.804 [DEBUG] [Thread-193594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:53:07.804 [DEBUG] [Thread-193594] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:53:07.804 [DEBUG] [Thread-193594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:53:07.804 [DEBUG] [Thread-193594] [transport.py] [_log()] Compression: none
2026-02-14T22:53:07.804 [DEBUG] [Thread-193594] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:53:07.821 [DEBUG] [Thread-193594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:53:07.821 [DEBUG] [Thread-193594] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:53:07.822 [DEBUG] [Thread-193594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:53:07.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:53:07.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:53:07.824 [DEBUG] [Thread-193594] [transport.py] [_log()] userauth is OK
2026-02-14T22:53:07.824 [DEBUG] [Thread-193594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:53:07.824 [DEBUG] [Thread-193594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:53:07.824 [DEBUG] [Thread-193594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:53:07.824 [DEBUG] [Thread-193594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:53:07.843 [INFO] [Thread-193594] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:53:07.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:53:08.645 [DEBUG] [Thread-193594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:53:08.645 [DEBUG] [Thread-193594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:53:08.645 [DEBUG] [Thread-193594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:53:08.685 [DEBUG] [Thread-193594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:53:08.685 [DEBUG] [Thread-193594] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:53:08.689 [DEBUG] [Thread-193594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:53:08.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:53:08.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:53:08.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:53:08.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:53:08.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:53:08.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:53:08.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:53:08.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:53:08.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:53:08.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.869556 -999.00   +9.10  23.72     68   +3.50 1 1 1 1 1     0    0 5.60 -3.87 ZNESW 19.7 23.7 153.6 32.1 9.5 -24.9 9.3 -23.9 9.1 -23.1 9.4 -24.2
2026-02-14T22:53:08.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:53:08.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:53:08.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.869556
2026-02-14T22:53:08.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:53:08.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:53:08.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:53:08.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:53:08.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:53:08.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:52:32', tmtdew=6.6, humidity=63.23, cloud=0.0, wind=35.69, temperature=9.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:52:33', seeing=5.63, atlas_timestamp='2026-02-14T20:52:09.638', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.00274999999999892, -0.004749999999999588, -0.01950000000000074, 0.009499999999999176, 0.0032500000000013074, 0.005000000000000782, -0.0012499999999988631, 0.02499999999999858, 0.0045000000000001705, -0.056750000000000966, 0.0129999999999999, 0.07649999999999935, -0.0007500000000000284, 0.023499999999998522, 0.026499999999998636, 0.05075000000000074, 0.0625, -0.025000000000000355, 0.040249999999998565, 0.02999999999999936, 0.04724999999999824, 0.0032500000000013074, 0.01124999999999865, 0.04800000000000004, 0.059499999999999886, 0.011749999999999261, 0.015499999999999403, 0.10800000000000054, 0.07500000000000107, 0.04200000000000159, 0.03900000000000148, 0.03774999999999906], zp_timestamp='2026-02-14T20:49:00')
2026-02-14T22:53:08.716 [DEBUG] [Thread-193594] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:53:08.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T22:53:08.816 [DEBUG] [Thread-193597] [transport.py] [_log()] starting thread (client mode): 0xa2d18790
2026-02-14T22:53:08.816 [DEBUG] [Thread-193597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:53:08.834 [DEBUG] [Thread-193597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:53:08.835 [INFO] [Thread-193597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:53:08.845 [DEBUG] [Thread-193597] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:53:08.845 [DEBUG] [Thread-193597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:53:08.846 [DEBUG] [Thread-193597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:53:08.846 [DEBUG] [Thread-193597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:53:08.846 [DEBUG] [Thread-193597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:53:08.846 [DEBUG] [Thread-193597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:53:08.846 [DEBUG] [Thread-193597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:53:08.846 [DEBUG] [Thread-193597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:53:08.846 [DEBUG] [Thread-193597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:53:08.846 [DEBUG] [Thread-193597] [transport.py] [_log()] client lang: <none>
2026-02-14T22:53:08.846 [DEBUG] [Thread-193597] [transport.py] [_log()] server lang: <none>
2026-02-14T22:53:08.846 [DEBUG] [Thread-193597] [transport.py] [_log()] kex follows: False
2026-02-14T22:53:08.846 [DEBUG] [Thread-193597] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:53:08.846 [DEBUG] [Thread-193597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:53:08.847 [DEBUG] [Thread-193597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:53:08.847 [DEBUG] [Thread-193597] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:53:08.847 [DEBUG] [Thread-193597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:53:08.847 [DEBUG] [Thread-193597] [transport.py] [_log()] Compression: none
2026-02-14T22:53:08.847 [DEBUG] [Thread-193597] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:53:08.903 [DEBUG] [Thread-193597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:53:08.904 [DEBUG] [Thread-193597] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:53:08.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:53:08.905 [DEBUG] [Thread-193597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:53:08.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:53:08.961 [DEBUG] [Thread-193597] [transport.py] [_log()] userauth is OK
2026-02-14T22:53:08.961 [DEBUG] [Thread-193597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:53:08.962 [DEBUG] [Thread-193597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:53:08.962 [DEBUG] [Thread-193597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:53:08.962 [DEBUG] [Thread-193597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:53:08.981 [INFO] [Thread-193597] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:53:08.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-14T22:53:08.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:53:09.822 [DEBUG] [Thread-193597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:53:09.822 [DEBUG] [Thread-193597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:53:09.870 [DEBUG] [Thread-193597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:53:09.870 [DEBUG] [Thread-193597] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:53:09.879 [DEBUG] [Thread-193597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:53:09.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:53:09.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-14T22:53:09.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-14T22:53:09.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:53:09.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:53:09.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:53:09.913 [DEBUG] [Thread-193597] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:53:15.152 [DEBUG] [Thread-193599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:53:30.214 [DEBUG] [Thread-193600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:53:39.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:53:39.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:53:39.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-14T22:53:42.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 53, 8), 6.59, 63.26, 0.0, 35.59, 9.14, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:53:42.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:53:08
2026-02-14T22:53:42.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:53:42.814 [DEBUG] [Thread-193601] [transport.py] [_log()] starting thread (client mode): 0xa2d01570
2026-02-14T22:53:42.814 [DEBUG] [Thread-193601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:53:42.837 [DEBUG] [Thread-193601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:53:42.837 [INFO] [Thread-193601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:53:42.839 [DEBUG] [Thread-193601] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:53:42.839 [DEBUG] [Thread-193601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:53:42.839 [DEBUG] [Thread-193601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:53:42.839 [DEBUG] [Thread-193601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:53:42.839 [DEBUG] [Thread-193601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:53:42.839 [DEBUG] [Thread-193601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:53:42.839 [DEBUG] [Thread-193601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:53:42.839 [DEBUG] [Thread-193601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:53:42.839 [DEBUG] [Thread-193601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:53:42.839 [DEBUG] [Thread-193601] [transport.py] [_log()] client lang: <none>
2026-02-14T22:53:42.839 [DEBUG] [Thread-193601] [transport.py] [_log()] server lang: <none>
2026-02-14T22:53:42.839 [DEBUG] [Thread-193601] [transport.py] [_log()] kex follows: False
2026-02-14T22:53:42.839 [DEBUG] [Thread-193601] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:53:42.839 [DEBUG] [Thread-193601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:53:42.839 [DEBUG] [Thread-193601] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:53:42.839 [DEBUG] [Thread-193601] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:53:42.839 [DEBUG] [Thread-193601] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:53:42.839 [DEBUG] [Thread-193601] [transport.py] [_log()] Compression: none
2026-02-14T22:53:42.839 [DEBUG] [Thread-193601] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:53:42.847 [DEBUG] [Thread-193601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:53:42.847 [DEBUG] [Thread-193601] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:53:42.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:53:42.847 [DEBUG] [Thread-193601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:53:42.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:53:42.848 [DEBUG] [Thread-193601] [transport.py] [_log()] userauth is OK
2026-02-14T22:53:42.848 [DEBUG] [Thread-193601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:53:42.848 [DEBUG] [Thread-193601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:53:42.848 [DEBUG] [Thread-193601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:53:42.848 [DEBUG] [Thread-193601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:53:42.864 [INFO] [Thread-193601] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:53:42.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:53:43.504 [DEBUG] [Thread-193601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:53:43.505 [DEBUG] [Thread-193601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:53:43.505 [DEBUG] [Thread-193601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:53:43.545 [DEBUG] [Thread-193601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:53:43.545 [DEBUG] [Thread-193601] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:53:43.547 [DEBUG] [Thread-193601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:53:43.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:53:43.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:53:43.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:53:43.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:53:43.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:53:43.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:53:43.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:53:43.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:53:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:53:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.869903 -999.00   +9.10  26.58     68   +3.50 1 1 1 1 1     0    0 5.45 -4.21 ZNESW 23.5 26.6 165.4 31.4 9.5 -25.1 9.3 -24.1 9.1 -22.9 9.5 -24.4
2026-02-14T22:53:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:53:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:53:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.869903
2026-02-14T22:53:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:53:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:53:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:53:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:53:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:53:43.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:53:08', tmtdew=6.59, humidity=63.26, cloud=0.0, wind=35.59, temperature=9.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:53:08', seeing=4.54, atlas_timestamp='2026-02-14T20:52:39.619', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.00274999999999892, -0.004749999999999588, -0.01950000000000074, 0.009499999999999176, 0.0032500000000013074, 0.005000000000000782, -0.0012499999999988631, 0.02499999999999858, 0.0045000000000001705, -0.056750000000000966, 0.0129999999999999, 0.07649999999999935, -0.0007500000000000284, 0.023499999999998522, 0.026499999999998636, 0.05075000000000074, 0.0625, -0.025000000000000355, 0.040249999999998565, 0.02999999999999936, 0.04724999999999824, 0.0032500000000013074, 0.01124999999999865, 0.04800000000000004, 0.059499999999999886, 0.011749999999999261, 0.015499999999999403, 0.10800000000000054, 0.07500000000000107, 0.04200000000000159, 0.03900000000000148, 0.03774999999999906], zp_timestamp='2026-02-14T20:52:00')
2026-02-14T22:53:43.566 [DEBUG] [Thread-193601] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:53:43.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-14T22:53:43.650 [DEBUG] [Thread-193604] [transport.py] [_log()] starting thread (client mode): 0xa57d6dd0
2026-02-14T22:53:43.650 [DEBUG] [Thread-193604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:53:43.665 [DEBUG] [Thread-193604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:53:43.665 [INFO] [Thread-193604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:53:43.673 [DEBUG] [Thread-193604] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:53:43.673 [DEBUG] [Thread-193604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:53:43.673 [DEBUG] [Thread-193604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:53:43.673 [DEBUG] [Thread-193604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:53:43.673 [DEBUG] [Thread-193604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:53:43.673 [DEBUG] [Thread-193604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:53:43.673 [DEBUG] [Thread-193604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:53:43.673 [DEBUG] [Thread-193604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:53:43.673 [DEBUG] [Thread-193604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:53:43.673 [DEBUG] [Thread-193604] [transport.py] [_log()] client lang: <none>
2026-02-14T22:53:43.674 [DEBUG] [Thread-193604] [transport.py] [_log()] server lang: <none>
2026-02-14T22:53:43.674 [DEBUG] [Thread-193604] [transport.py] [_log()] kex follows: False
2026-02-14T22:53:43.674 [DEBUG] [Thread-193604] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:53:43.674 [DEBUG] [Thread-193604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:53:43.674 [DEBUG] [Thread-193604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:53:43.674 [DEBUG] [Thread-193604] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:53:43.674 [DEBUG] [Thread-193604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:53:43.674 [DEBUG] [Thread-193604] [transport.py] [_log()] Compression: none
2026-02-14T22:53:43.674 [DEBUG] [Thread-193604] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:53:43.733 [DEBUG] [Thread-193604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:53:43.734 [DEBUG] [Thread-193604] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:53:43.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:53:43.736 [DEBUG] [Thread-193604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:53:43.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:53:43.793 [DEBUG] [Thread-193604] [transport.py] [_log()] userauth is OK
2026-02-14T22:53:43.793 [DEBUG] [Thread-193604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:53:43.793 [DEBUG] [Thread-193604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:53:43.793 [DEBUG] [Thread-193604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:53:43.793 [DEBUG] [Thread-193604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:53:43.812 [INFO] [Thread-193604] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:53:43.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-14T22:53:43.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:53:44.628 [DEBUG] [Thread-193604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:53:44.628 [DEBUG] [Thread-193604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:53:44.676 [DEBUG] [Thread-193604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:53:44.676 [DEBUG] [Thread-193604] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:53:44.685 [DEBUG] [Thread-193604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:53:44.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:53:44.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-14T22:53:44.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-14T22:53:44.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:53:44.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:53:44.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:53:44.722 [DEBUG] [Thread-193604] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:53:45.250 [DEBUG] [Thread-193606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:54:00.311 [DEBUG] [Thread-193607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:54:00.681 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:54:00.682 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:54:02.962 [DEBUG] [Thread-193608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:54:13.000 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:54:14.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:54:14.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:54:14.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-14T22:54:15.347 [DEBUG] [Thread-193609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:54:16.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 53, 44), 6.63, 63.35, 0.0, 36.51, 9.19, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:54:16.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:53:44
2026-02-14T22:54:17.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:54:17.277 [DEBUG] [Thread-193610] [transport.py] [_log()] starting thread (client mode): 0xa2d033a0
2026-02-14T22:54:17.277 [DEBUG] [Thread-193610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:54:17.295 [DEBUG] [Thread-193610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:54:17.295 [INFO] [Thread-193610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:54:17.299 [DEBUG] [Thread-193610] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:54:17.299 [DEBUG] [Thread-193610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:54:17.299 [DEBUG] [Thread-193610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:54:17.299 [DEBUG] [Thread-193610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:54:17.299 [DEBUG] [Thread-193610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:54:17.299 [DEBUG] [Thread-193610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:54:17.299 [DEBUG] [Thread-193610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:54:17.299 [DEBUG] [Thread-193610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:54:17.299 [DEBUG] [Thread-193610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:54:17.299 [DEBUG] [Thread-193610] [transport.py] [_log()] client lang: <none>
2026-02-14T22:54:17.299 [DEBUG] [Thread-193610] [transport.py] [_log()] server lang: <none>
2026-02-14T22:54:17.299 [DEBUG] [Thread-193610] [transport.py] [_log()] kex follows: False
2026-02-14T22:54:17.299 [DEBUG] [Thread-193610] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:54:17.299 [DEBUG] [Thread-193610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:54:17.299 [DEBUG] [Thread-193610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:54:17.299 [DEBUG] [Thread-193610] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:54:17.299 [DEBUG] [Thread-193610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:54:17.299 [DEBUG] [Thread-193610] [transport.py] [_log()] Compression: none
2026-02-14T22:54:17.299 [DEBUG] [Thread-193610] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:54:17.315 [DEBUG] [Thread-193610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:54:17.315 [DEBUG] [Thread-193610] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:54:17.315 [DEBUG] [Thread-193610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:54:17.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:54:17.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:54:17.316 [DEBUG] [Thread-193610] [transport.py] [_log()] userauth is OK
2026-02-14T22:54:17.316 [DEBUG] [Thread-193610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:54:17.316 [DEBUG] [Thread-193610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:54:17.316 [DEBUG] [Thread-193610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:54:17.316 [DEBUG] [Thread-193610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:54:17.349 [INFO] [Thread-193610] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:54:17.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:54:17.999 [DEBUG] [Thread-193610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:54:17.999 [DEBUG] [Thread-193610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:54:18.000 [DEBUG] [Thread-193610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:54:18.040 [DEBUG] [Thread-193610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:54:18.041 [DEBUG] [Thread-193610] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:54:18.043 [DEBUG] [Thread-193610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:54:18.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:54:18.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:54:18.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:54:18.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:54:18.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:54:18.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:54:18.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:54:18.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:54:18.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:54:18.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.870598 -999.00   +9.00  20.37     68   +3.50 1 1 1 1 1     0    0 5.60 -5.17 ZNESW 25.0 20.4 150.6 35.5 9.5 -25.0 9.3 -24.0 9.1 -23.0 9.5 -24.1
2026-02-14T22:54:18.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:54:18.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:54:18.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.870598
2026-02-14T22:54:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:54:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:54:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:54:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:54:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:54:18.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:53:44', tmtdew=6.63, humidity=63.35, cloud=0.0, wind=36.51, temperature=9.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:53:44', seeing=3.66, atlas_timestamp='2026-02-14T20:53:39.667', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.00274999999999892, -0.004749999999999588, -0.01950000000000074, 0.009499999999999176, 0.0032500000000013074, 0.005000000000000782, -0.0012499999999988631, 0.02499999999999858, 0.0045000000000001705, -0.056750000000000966, 0.0129999999999999, 0.07649999999999935, -0.0007500000000000284, 0.023499999999998522, 0.026499999999998636, 0.05075000000000074, 0.0625, -0.025000000000000355, 0.040249999999998565, 0.02999999999999936, 0.04724999999999824, 0.0032500000000013074, 0.01124999999999865, 0.04800000000000004, 0.059499999999999886, 0.011749999999999261, 0.015499999999999403, 0.10800000000000054, 0.07500000000000107, 0.04200000000000159, 0.03900000000000148, 0.03774999999999906], zp_timestamp='2026-02-14T20:52:00')
2026-02-14T22:54:18.068 [DEBUG] [Thread-193610] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:54:18.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-14T22:54:18.165 [DEBUG] [Thread-193613] [transport.py] [_log()] starting thread (client mode): 0xa57435b0
2026-02-14T22:54:18.166 [DEBUG] [Thread-193613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:54:18.182 [DEBUG] [Thread-193613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:54:18.182 [INFO] [Thread-193613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:54:18.190 [DEBUG] [Thread-193613] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:54:18.190 [DEBUG] [Thread-193613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:54:18.190 [DEBUG] [Thread-193613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:54:18.190 [DEBUG] [Thread-193613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:54:18.190 [DEBUG] [Thread-193613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:54:18.190 [DEBUG] [Thread-193613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:54:18.190 [DEBUG] [Thread-193613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:54:18.190 [DEBUG] [Thread-193613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:54:18.191 [DEBUG] [Thread-193613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:54:18.191 [DEBUG] [Thread-193613] [transport.py] [_log()] client lang: <none>
2026-02-14T22:54:18.191 [DEBUG] [Thread-193613] [transport.py] [_log()] server lang: <none>
2026-02-14T22:54:18.191 [DEBUG] [Thread-193613] [transport.py] [_log()] kex follows: False
2026-02-14T22:54:18.191 [DEBUG] [Thread-193613] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:54:18.191 [DEBUG] [Thread-193613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:54:18.191 [DEBUG] [Thread-193613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:54:18.191 [DEBUG] [Thread-193613] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:54:18.191 [DEBUG] [Thread-193613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:54:18.191 [DEBUG] [Thread-193613] [transport.py] [_log()] Compression: none
2026-02-14T22:54:18.191 [DEBUG] [Thread-193613] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:54:18.248 [DEBUG] [Thread-193613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:54:18.248 [DEBUG] [Thread-193613] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:54:18.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:54:18.250 [DEBUG] [Thread-193613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:54:18.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:54:18.304 [DEBUG] [Thread-193613] [transport.py] [_log()] userauth is OK
2026-02-14T22:54:18.304 [DEBUG] [Thread-193613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:54:18.304 [DEBUG] [Thread-193613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:54:18.304 [DEBUG] [Thread-193613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:54:18.304 [DEBUG] [Thread-193613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:54:18.323 [INFO] [Thread-193613] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:54:18.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-14T22:54:18.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:54:19.154 [DEBUG] [Thread-193613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:54:19.154 [DEBUG] [Thread-193613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:54:19.201 [DEBUG] [Thread-193613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:54:19.202 [DEBUG] [Thread-193613] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:54:19.211 [DEBUG] [Thread-193613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:54:19.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:54:19.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:54:19.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-14T22:54:19.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:54:19.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:54:19.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:54:19.252 [DEBUG] [Thread-193613] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:54:30.383 [DEBUG] [Thread-193615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:54:45.437 [DEBUG] [Thread-193616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:54:49.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:54:49.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:54:49.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-14T22:54:51.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 54, 20), 6.62, 63.35, 0.0, 33.67, 9.15, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:54:51.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:54:20
2026-02-14T22:54:51.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:54:51.570 [DEBUG] [Thread-193617] [transport.py] [_log()] starting thread (client mode): 0xa2d108b0
2026-02-14T22:54:51.570 [DEBUG] [Thread-193617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:54:51.590 [DEBUG] [Thread-193617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:54:51.591 [INFO] [Thread-193617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:54:51.594 [DEBUG] [Thread-193617] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:54:51.594 [DEBUG] [Thread-193617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:54:51.594 [DEBUG] [Thread-193617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:54:51.594 [DEBUG] [Thread-193617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:54:51.594 [DEBUG] [Thread-193617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:54:51.594 [DEBUG] [Thread-193617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:54:51.594 [DEBUG] [Thread-193617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:54:51.594 [DEBUG] [Thread-193617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:54:51.595 [DEBUG] [Thread-193617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:54:51.595 [DEBUG] [Thread-193617] [transport.py] [_log()] client lang: <none>
2026-02-14T22:54:51.595 [DEBUG] [Thread-193617] [transport.py] [_log()] server lang: <none>
2026-02-14T22:54:51.595 [DEBUG] [Thread-193617] [transport.py] [_log()] kex follows: False
2026-02-14T22:54:51.595 [DEBUG] [Thread-193617] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:54:51.595 [DEBUG] [Thread-193617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:54:51.595 [DEBUG] [Thread-193617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:54:51.595 [DEBUG] [Thread-193617] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:54:51.595 [DEBUG] [Thread-193617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:54:51.595 [DEBUG] [Thread-193617] [transport.py] [_log()] Compression: none
2026-02-14T22:54:51.595 [DEBUG] [Thread-193617] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:54:51.612 [DEBUG] [Thread-193617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:54:51.612 [DEBUG] [Thread-193617] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:54:51.613 [DEBUG] [Thread-193617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:54:51.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:54:51.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:54:51.614 [DEBUG] [Thread-193617] [transport.py] [_log()] userauth is OK
2026-02-14T22:54:51.614 [DEBUG] [Thread-193617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:54:51.614 [DEBUG] [Thread-193617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:54:51.614 [DEBUG] [Thread-193617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:54:51.614 [DEBUG] [Thread-193617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:54:51.627 [INFO] [Thread-193617] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:54:51.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:54:52.265 [DEBUG] [Thread-193617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:54:52.265 [DEBUG] [Thread-193617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:54:52.265 [DEBUG] [Thread-193617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:54:52.306 [DEBUG] [Thread-193617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:54:52.306 [DEBUG] [Thread-193617] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:54:52.309 [DEBUG] [Thread-193617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:54:52.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:54:52.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:54:52.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:54:52.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:54:52.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:54:52.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:54:52.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:54:52.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:54:52.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:54:52.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.870945 -999.00   +9.00  21.36     68   +3.60 1 1 1 1 1     0    0 5.61 -5.60 ZNESW 25.7 21.4 155.4 31.0 9.5 -25.0 9.3 -23.9 9.1 -23.1 9.5 -24.4
2026-02-14T22:54:52.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:54:52.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:54:52.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.870945
2026-02-14T22:54:52.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:54:52.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:54:52.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:54:52.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:54:52.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:54:52.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:54:20', tmtdew=6.62, humidity=63.35, cloud=0.0, wind=33.67, temperature=9.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:54:20', seeing=4.28, atlas_timestamp='2026-02-14T20:54:09.648', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.00274999999999892, -0.004749999999999588, -0.01950000000000074, 0.009499999999999176, 0.0032500000000013074, 0.005000000000000782, -0.0012499999999988631, 0.02499999999999858, 0.0045000000000001705, -0.056750000000000966, 0.0129999999999999, 0.07649999999999935, -0.0007500000000000284, 0.023499999999998522, 0.026499999999998636, 0.05075000000000074, 0.0625, -0.025000000000000355, 0.040249999999998565, 0.02999999999999936, 0.04724999999999824, 0.0032500000000013074, 0.01124999999999865, 0.04800000000000004, 0.059499999999999886, 0.011749999999999261, 0.015499999999999403, 0.10800000000000054, 0.07500000000000107, 0.04200000000000159, 0.03900000000000148, 0.03774999999999906], zp_timestamp='2026-02-14T20:52:00')
2026-02-14T22:54:52.330 [DEBUG] [Thread-193617] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:54:52.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-14T22:54:52.418 [DEBUG] [Thread-193620] [transport.py] [_log()] starting thread (client mode): 0xa2d6e3b0
2026-02-14T22:54:52.418 [DEBUG] [Thread-193620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:54:52.432 [DEBUG] [Thread-193620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:54:52.433 [INFO] [Thread-193620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:54:52.440 [DEBUG] [Thread-193620] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:54:52.440 [DEBUG] [Thread-193620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:54:52.440 [DEBUG] [Thread-193620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:54:52.440 [DEBUG] [Thread-193620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:54:52.440 [DEBUG] [Thread-193620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:54:52.441 [DEBUG] [Thread-193620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:54:52.441 [DEBUG] [Thread-193620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:54:52.441 [DEBUG] [Thread-193620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:54:52.441 [DEBUG] [Thread-193620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:54:52.441 [DEBUG] [Thread-193620] [transport.py] [_log()] client lang: <none>
2026-02-14T22:54:52.441 [DEBUG] [Thread-193620] [transport.py] [_log()] server lang: <none>
2026-02-14T22:54:52.441 [DEBUG] [Thread-193620] [transport.py] [_log()] kex follows: False
2026-02-14T22:54:52.441 [DEBUG] [Thread-193620] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:54:52.441 [DEBUG] [Thread-193620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:54:52.441 [DEBUG] [Thread-193620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:54:52.441 [DEBUG] [Thread-193620] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:54:52.441 [DEBUG] [Thread-193620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:54:52.441 [DEBUG] [Thread-193620] [transport.py] [_log()] Compression: none
2026-02-14T22:54:52.441 [DEBUG] [Thread-193620] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:54:52.499 [DEBUG] [Thread-193620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:54:52.500 [DEBUG] [Thread-193620] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:54:52.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:54:52.501 [DEBUG] [Thread-193620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:54:52.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:54:52.556 [DEBUG] [Thread-193620] [transport.py] [_log()] userauth is OK
2026-02-14T22:54:52.556 [DEBUG] [Thread-193620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:54:52.556 [DEBUG] [Thread-193620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:54:52.556 [DEBUG] [Thread-193620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:54:52.556 [DEBUG] [Thread-193620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:54:52.575 [INFO] [Thread-193620] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:54:52.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-14T22:54:52.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:54:53.348 [DEBUG] [Thread-193620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:54:53.348 [DEBUG] [Thread-193620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:54:53.396 [DEBUG] [Thread-193620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:54:53.396 [DEBUG] [Thread-193620] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:54:53.405 [DEBUG] [Thread-193620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:54:53.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:54:53.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-14T22:54:53.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-14T22:54:53.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:54:53.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:54:53.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:54:53.440 [DEBUG] [Thread-193620] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:55:00.474 [DEBUG] [Thread-193622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:55:00.882 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:55:00.882 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:55:03.029 [DEBUG] [Thread-193623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:55:15.526 [DEBUG] [Thread-193624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:55:23.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:55:23.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:55:23.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-14T22:55:25.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 54, 56), 6.57, 63.36, 0.0, 30.51, 9.1, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:55:25.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:54:56
2026-02-14T22:55:25.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:55:25.785 [DEBUG] [Thread-193625] [transport.py] [_log()] starting thread (client mode): 0xa57d56c0
2026-02-14T22:55:25.785 [DEBUG] [Thread-193625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:55:25.805 [DEBUG] [Thread-193625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:55:25.805 [INFO] [Thread-193625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:55:25.809 [DEBUG] [Thread-193625] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:55:25.809 [DEBUG] [Thread-193625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:55:25.810 [DEBUG] [Thread-193625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:55:25.810 [DEBUG] [Thread-193625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:55:25.810 [DEBUG] [Thread-193625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:55:25.810 [DEBUG] [Thread-193625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:55:25.810 [DEBUG] [Thread-193625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:55:25.810 [DEBUG] [Thread-193625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:55:25.810 [DEBUG] [Thread-193625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:55:25.810 [DEBUG] [Thread-193625] [transport.py] [_log()] client lang: <none>
2026-02-14T22:55:25.810 [DEBUG] [Thread-193625] [transport.py] [_log()] server lang: <none>
2026-02-14T22:55:25.810 [DEBUG] [Thread-193625] [transport.py] [_log()] kex follows: False
2026-02-14T22:55:25.810 [DEBUG] [Thread-193625] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:55:25.810 [DEBUG] [Thread-193625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:55:25.810 [DEBUG] [Thread-193625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:55:25.811 [DEBUG] [Thread-193625] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:55:25.811 [DEBUG] [Thread-193625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:55:25.811 [DEBUG] [Thread-193625] [transport.py] [_log()] Compression: none
2026-02-14T22:55:25.811 [DEBUG] [Thread-193625] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:55:25.832 [DEBUG] [Thread-193625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:55:25.833 [DEBUG] [Thread-193625] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:55:25.833 [DEBUG] [Thread-193625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:55:25.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:55:25.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:55:25.835 [DEBUG] [Thread-193625] [transport.py] [_log()] userauth is OK
2026-02-14T22:55:25.835 [DEBUG] [Thread-193625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:55:25.836 [DEBUG] [Thread-193625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:55:25.836 [DEBUG] [Thread-193625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:55:25.836 [DEBUG] [Thread-193625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:55:25.860 [INFO] [Thread-193625] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:55:25.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:55:26.493 [DEBUG] [Thread-193625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:55:26.493 [DEBUG] [Thread-193625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:55:26.494 [DEBUG] [Thread-193625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:55:26.534 [DEBUG] [Thread-193625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:55:26.534 [DEBUG] [Thread-193625] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:55:26.537 [DEBUG] [Thread-193625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:55:26.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:55:26.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:55:26.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:55:26.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:55:26.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:55:26.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:55:26.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:55:26.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:55:26.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:55:26.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.871292 -999.00   +9.00  24.85     68   +3.50 1 1 1 1 1     0    0 5.47 -6.17 ZNESW 24.7 24.9 161.5 34.8 9.5 -25.0 9.2 -23.9 9.1 -23.0 9.4 -24.2
2026-02-14T22:55:26.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:55:26.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:55:26.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.871292
2026-02-14T22:55:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:55:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:55:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:55:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:55:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:55:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:54:56', tmtdew=6.57, humidity=63.36, cloud=0.0, wind=30.51, temperature=9.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:54:56', seeing=4.31, atlas_timestamp='2026-02-14T20:54:39.629', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.00274999999999892, -0.004749999999999588, -0.01950000000000074, 0.009499999999999176, 0.0032500000000013074, 0.005000000000000782, -0.0012499999999988631, 0.02499999999999858, 0.0045000000000001705, -0.056750000000000966, 0.0129999999999999, 0.07649999999999935, -0.0007500000000000284, 0.023499999999998522, 0.026499999999998636, 0.05075000000000074, 0.0625, -0.025000000000000355, 0.040249999999998565, 0.02999999999999936, 0.04724999999999824, 0.0032500000000013074, 0.01124999999999865, 0.04800000000000004, 0.059499999999999886, 0.011749999999999261, 0.015499999999999403, 0.10800000000000054, 0.07500000000000107, 0.04200000000000159, 0.03900000000000148, 0.03774999999999906], zp_timestamp='2026-02-14T20:52:00')
2026-02-14T22:55:26.554 [DEBUG] [Thread-193625] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:55:26.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-14T22:55:26.635 [DEBUG] [Thread-193628] [transport.py] [_log()] starting thread (client mode): 0xa2d19990
2026-02-14T22:55:26.635 [DEBUG] [Thread-193628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:55:26.650 [DEBUG] [Thread-193628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:55:26.650 [INFO] [Thread-193628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:55:26.657 [DEBUG] [Thread-193628] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:55:26.657 [DEBUG] [Thread-193628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:55:26.658 [DEBUG] [Thread-193628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:55:26.658 [DEBUG] [Thread-193628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:55:26.658 [DEBUG] [Thread-193628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:55:26.658 [DEBUG] [Thread-193628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:55:26.658 [DEBUG] [Thread-193628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:55:26.658 [DEBUG] [Thread-193628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:55:26.658 [DEBUG] [Thread-193628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:55:26.658 [DEBUG] [Thread-193628] [transport.py] [_log()] client lang: <none>
2026-02-14T22:55:26.658 [DEBUG] [Thread-193628] [transport.py] [_log()] server lang: <none>
2026-02-14T22:55:26.658 [DEBUG] [Thread-193628] [transport.py] [_log()] kex follows: False
2026-02-14T22:55:26.658 [DEBUG] [Thread-193628] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:55:26.658 [DEBUG] [Thread-193628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:55:26.658 [DEBUG] [Thread-193628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:55:26.658 [DEBUG] [Thread-193628] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:55:26.658 [DEBUG] [Thread-193628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:55:26.658 [DEBUG] [Thread-193628] [transport.py] [_log()] Compression: none
2026-02-14T22:55:26.658 [DEBUG] [Thread-193628] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:55:26.720 [DEBUG] [Thread-193628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:55:26.720 [DEBUG] [Thread-193628] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:55:26.721 [DEBUG] [Thread-193628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:55:26.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:55:26.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:55:26.782 [DEBUG] [Thread-193628] [transport.py] [_log()] userauth is OK
2026-02-14T22:55:26.783 [DEBUG] [Thread-193628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:55:26.783 [DEBUG] [Thread-193628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:55:26.783 [DEBUG] [Thread-193628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:55:26.783 [DEBUG] [Thread-193628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:55:26.798 [INFO] [Thread-193628] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:55:26.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:55:26.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:55:27.636 [DEBUG] [Thread-193628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:55:27.636 [DEBUG] [Thread-193628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:55:27.685 [DEBUG] [Thread-193628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:55:27.685 [DEBUG] [Thread-193628] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:55:27.696 [DEBUG] [Thread-193628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:55:27.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:55:27.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-14T22:55:27.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-14T22:55:27.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:55:27.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:55:27.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:55:27.735 [DEBUG] [Thread-193628] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:55:30.557 [DEBUG] [Thread-193630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:55:45.603 [DEBUG] [Thread-193631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:55:46.625 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:55:57.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:55:57.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:55:57.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T22:55:59.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 55, 31), 6.55, 63.46, 0.0, 32.87, 9.1, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:55:59.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:55:31
2026-02-14T22:56:00.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:56:00.180 [DEBUG] [Thread-193632] [transport.py] [_log()] starting thread (client mode): 0xa5741b40
2026-02-14T22:56:00.180 [DEBUG] [Thread-193632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:56:00.199 [DEBUG] [Thread-193632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:56:00.200 [INFO] [Thread-193632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:56:00.203 [DEBUG] [Thread-193632] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:56:00.203 [DEBUG] [Thread-193632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:56:00.203 [DEBUG] [Thread-193632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:56:00.203 [DEBUG] [Thread-193632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:56:00.203 [DEBUG] [Thread-193632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:56:00.203 [DEBUG] [Thread-193632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:56:00.203 [DEBUG] [Thread-193632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:56:00.203 [DEBUG] [Thread-193632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:56:00.203 [DEBUG] [Thread-193632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:56:00.203 [DEBUG] [Thread-193632] [transport.py] [_log()] client lang: <none>
2026-02-14T22:56:00.203 [DEBUG] [Thread-193632] [transport.py] [_log()] server lang: <none>
2026-02-14T22:56:00.203 [DEBUG] [Thread-193632] [transport.py] [_log()] kex follows: False
2026-02-14T22:56:00.203 [DEBUG] [Thread-193632] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:56:00.203 [DEBUG] [Thread-193632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:56:00.203 [DEBUG] [Thread-193632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:56:00.203 [DEBUG] [Thread-193632] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:56:00.203 [DEBUG] [Thread-193632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:56:00.203 [DEBUG] [Thread-193632] [transport.py] [_log()] Compression: none
2026-02-14T22:56:00.203 [DEBUG] [Thread-193632] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:56:00.211 [DEBUG] [Thread-193632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:56:00.212 [DEBUG] [Thread-193632] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:56:00.212 [DEBUG] [Thread-193632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:56:00.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:56:00.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:56:00.214 [DEBUG] [Thread-193632] [transport.py] [_log()] userauth is OK
2026-02-14T22:56:00.214 [DEBUG] [Thread-193632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:56:00.214 [DEBUG] [Thread-193632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:56:00.214 [DEBUG] [Thread-193632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:56:00.214 [DEBUG] [Thread-193632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:56:00.231 [INFO] [Thread-193632] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:56:00.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:56:00.643 [DEBUG] [Thread-193634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:56:00.844 [DEBUG] [Thread-193632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:56:00.845 [DEBUG] [Thread-193632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:56:00.845 [DEBUG] [Thread-193632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:56:00.886 [DEBUG] [Thread-193632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:56:00.886 [DEBUG] [Thread-193632] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:56:00.888 [DEBUG] [Thread-193632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:56:00.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:56:00.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:56:00.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:56:00.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:56:00.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:56:00.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:56:00.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:56:00.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:56:00.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:56:00.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.871639 -999.00   +9.00  22.40     68   +3.60 1 1 1 1 1     0    0 5.52 -6.34 ZNESW 29.9 22.4 163.8 35.5 9.4 -25.0 9.3 -23.9 9.1 -23.0 9.4 -24.2
2026-02-14T22:56:00.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:56:00.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:56:00.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.871639
2026-02-14T22:56:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:56:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:56:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:56:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:56:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:56:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:55:31', tmtdew=6.55, humidity=63.46, cloud=0.0, wind=32.87, temperature=9.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:55:31', seeing=3.31, atlas_timestamp='2026-02-14T20:55:09.610', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.00274999999999892, -0.004749999999999588, -0.01950000000000074, 0.009499999999999176, 0.0032500000000013074, 0.005000000000000782, -0.0012499999999988631, 0.02499999999999858, 0.0045000000000001705, -0.056750000000000966, 0.0129999999999999, 0.07649999999999935, -0.0007500000000000284, 0.023499999999998522, 0.026499999999998636, 0.05075000000000074, 0.0625, -0.025000000000000355, 0.040249999999998565, 0.02999999999999936, 0.04724999999999824, 0.0032500000000013074, 0.01124999999999865, 0.04800000000000004, 0.059499999999999886, 0.011749999999999261, 0.015499999999999403, 0.10800000000000054, 0.07500000000000107, 0.04200000000000159, 0.03900000000000148, 0.03774999999999906], zp_timestamp='2026-02-14T20:52:00')
2026-02-14T22:56:00.907 [DEBUG] [Thread-193632] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:56:00.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-14T22:56:00.993 [DEBUG] [Thread-193636] [transport.py] [_log()] starting thread (client mode): 0xa2d6ceb0
2026-02-14T22:56:00.993 [DEBUG] [Thread-193636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:56:01.008 [DEBUG] [Thread-193636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:56:01.008 [INFO] [Thread-193636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:56:01.015 [DEBUG] [Thread-193636] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:56:01.016 [DEBUG] [Thread-193636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:56:01.016 [DEBUG] [Thread-193636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:56:01.016 [DEBUG] [Thread-193636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:56:01.016 [DEBUG] [Thread-193636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:56:01.016 [DEBUG] [Thread-193636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:56:01.016 [DEBUG] [Thread-193636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:56:01.017 [DEBUG] [Thread-193636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:56:01.017 [DEBUG] [Thread-193636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:56:01.017 [DEBUG] [Thread-193636] [transport.py] [_log()] client lang: <none>
2026-02-14T22:56:01.017 [DEBUG] [Thread-193636] [transport.py] [_log()] server lang: <none>
2026-02-14T22:56:01.017 [DEBUG] [Thread-193636] [transport.py] [_log()] kex follows: False
2026-02-14T22:56:01.017 [DEBUG] [Thread-193636] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:56:01.017 [DEBUG] [Thread-193636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:56:01.017 [DEBUG] [Thread-193636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:56:01.018 [DEBUG] [Thread-193636] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:56:01.018 [DEBUG] [Thread-193636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:56:01.018 [DEBUG] [Thread-193636] [transport.py] [_log()] Compression: none
2026-02-14T22:56:01.018 [DEBUG] [Thread-193636] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:56:01.075 [DEBUG] [Thread-193636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:56:01.076 [DEBUG] [Thread-193636] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:56:01.076 [DEBUG] [Thread-193636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:56:01.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:56:01.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:56:01.085 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:56:01.086 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:56:01.131 [DEBUG] [Thread-193636] [transport.py] [_log()] userauth is OK
2026-02-14T22:56:01.132 [DEBUG] [Thread-193636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:56:01.132 [DEBUG] [Thread-193636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:56:01.132 [DEBUG] [Thread-193636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:56:01.132 [DEBUG] [Thread-193636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:56:01.151 [INFO] [Thread-193636] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:56:01.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:56:01.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:56:01.984 [DEBUG] [Thread-193636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:56:01.984 [DEBUG] [Thread-193636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:56:02.032 [DEBUG] [Thread-193636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:56:02.032 [DEBUG] [Thread-193636] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:56:02.041 [DEBUG] [Thread-193636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:56:02.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:56:02.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:56:02.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-14T22:56:02.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:56:02.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:56:02.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:56:02.076 [DEBUG] [Thread-193636] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:56:03.106 [DEBUG] [Thread-193638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:56:15.682 [DEBUG] [Thread-193639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:56:30.732 [DEBUG] [Thread-193640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:56:32.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:56:32.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:56:32.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-14T22:56:34.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 56, 6), 6.54, 63.5, 0.0, 30.74, 9.1, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:56:34.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:56:06
2026-02-14T22:56:34.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:56:34.559 [DEBUG] [Thread-193641] [transport.py] [_log()] starting thread (client mode): 0xa5742500
2026-02-14T22:56:34.559 [DEBUG] [Thread-193641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:56:34.579 [DEBUG] [Thread-193641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:56:34.579 [INFO] [Thread-193641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:56:34.583 [DEBUG] [Thread-193641] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:56:34.583 [DEBUG] [Thread-193641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:56:34.583 [DEBUG] [Thread-193641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:56:34.583 [DEBUG] [Thread-193641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:56:34.583 [DEBUG] [Thread-193641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:56:34.583 [DEBUG] [Thread-193641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:56:34.583 [DEBUG] [Thread-193641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:56:34.583 [DEBUG] [Thread-193641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:56:34.583 [DEBUG] [Thread-193641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:56:34.583 [DEBUG] [Thread-193641] [transport.py] [_log()] client lang: <none>
2026-02-14T22:56:34.583 [DEBUG] [Thread-193641] [transport.py] [_log()] server lang: <none>
2026-02-14T22:56:34.583 [DEBUG] [Thread-193641] [transport.py] [_log()] kex follows: False
2026-02-14T22:56:34.583 [DEBUG] [Thread-193641] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:56:34.583 [DEBUG] [Thread-193641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:56:34.583 [DEBUG] [Thread-193641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:56:34.583 [DEBUG] [Thread-193641] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:56:34.583 [DEBUG] [Thread-193641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:56:34.583 [DEBUG] [Thread-193641] [transport.py] [_log()] Compression: none
2026-02-14T22:56:34.583 [DEBUG] [Thread-193641] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:56:34.600 [DEBUG] [Thread-193641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:56:34.600 [DEBUG] [Thread-193641] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:56:34.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:56:34.601 [DEBUG] [Thread-193641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:56:34.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:56:34.603 [DEBUG] [Thread-193641] [transport.py] [_log()] userauth is OK
2026-02-14T22:56:34.604 [DEBUG] [Thread-193641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:56:34.604 [DEBUG] [Thread-193641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:56:34.604 [DEBUG] [Thread-193641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:56:34.604 [DEBUG] [Thread-193641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:56:34.628 [INFO] [Thread-193641] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:56:34.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:56:35.264 [DEBUG] [Thread-193641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:56:35.265 [DEBUG] [Thread-193641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:56:35.265 [DEBUG] [Thread-193641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:56:35.306 [DEBUG] [Thread-193641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:56:35.306 [DEBUG] [Thread-193641] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:56:35.309 [DEBUG] [Thread-193641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:56:35.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:56:35.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:56:35.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:56:35.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:56:35.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:56:35.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:56:35.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:56:35.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:56:35.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:56:35.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.871986 -999.00   +9.00  21.64     68   +3.60 1 1 1 1 1     0    0 5.41 -6.86 ZNESW 23.8 21.6 147.7 39.2 9.5 -24.9 9.3 -24.0 9.1 -22.9 9.5 -24.0
2026-02-14T22:56:35.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:56:35.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:56:35.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.871986
2026-02-14T22:56:35.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:56:35.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:56:35.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:56:35.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:56:35.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:56:35.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:56:06', tmtdew=6.54, humidity=63.5, cloud=0.0, wind=30.74, temperature=9.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:56:06', seeing=4.51, atlas_timestamp='2026-02-14T20:55:39.590', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.012249999999999872, -0.01124999999999865, 0.007499999999998508, 0.019999999999999574, 0.028250000000001663, 0.005999999999998451, -0.01774999999999949, 0.02999999999999936, 0.02200000000000024, -0.05525000000000091, 0.007999999999999119, 0.06899999999999906, 0.010249999999999204, 0.036999999999999034, 0.006999999999999673, 0.0702499999999997, 0.041499999999999204, -0.012500000000001066, -0.02075000000000138, 0.038999999999997925, 0.005250000000000199, -0.013749999999999929, 0.051750000000000185, 0.036999999999999034, 0.050499999999999545, -0.024250000000000327, 0.04600000000000115, 0.08699999999999974, 0.11000000000000121, 0.05000000000000071, 0.03300000000000125, 0.048749999999998295], zp_timestamp='2026-02-14T20:55:00')
2026-02-14T22:56:35.338 [DEBUG] [Thread-193641] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:56:35.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-14T22:56:35.434 [DEBUG] [Thread-193644] [transport.py] [_log()] starting thread (client mode): 0xa2d78430
2026-02-14T22:56:35.435 [DEBUG] [Thread-193644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:56:35.450 [DEBUG] [Thread-193644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:56:35.451 [INFO] [Thread-193644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:56:35.459 [DEBUG] [Thread-193644] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:56:35.459 [DEBUG] [Thread-193644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:56:35.459 [DEBUG] [Thread-193644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:56:35.460 [DEBUG] [Thread-193644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:56:35.460 [DEBUG] [Thread-193644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:56:35.460 [DEBUG] [Thread-193644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:56:35.460 [DEBUG] [Thread-193644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:56:35.460 [DEBUG] [Thread-193644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:56:35.460 [DEBUG] [Thread-193644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:56:35.460 [DEBUG] [Thread-193644] [transport.py] [_log()] client lang: <none>
2026-02-14T22:56:35.460 [DEBUG] [Thread-193644] [transport.py] [_log()] server lang: <none>
2026-02-14T22:56:35.460 [DEBUG] [Thread-193644] [transport.py] [_log()] kex follows: False
2026-02-14T22:56:35.460 [DEBUG] [Thread-193644] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:56:35.460 [DEBUG] [Thread-193644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:56:35.460 [DEBUG] [Thread-193644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:56:35.460 [DEBUG] [Thread-193644] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:56:35.460 [DEBUG] [Thread-193644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:56:35.460 [DEBUG] [Thread-193644] [transport.py] [_log()] Compression: none
2026-02-14T22:56:35.460 [DEBUG] [Thread-193644] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:56:35.520 [DEBUG] [Thread-193644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:56:35.521 [DEBUG] [Thread-193644] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:56:35.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:56:35.522 [DEBUG] [Thread-193644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:56:35.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:56:35.579 [DEBUG] [Thread-193644] [transport.py] [_log()] userauth is OK
2026-02-14T22:56:35.579 [DEBUG] [Thread-193644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:56:35.579 [DEBUG] [Thread-193644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:56:35.579 [DEBUG] [Thread-193644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:56:35.579 [DEBUG] [Thread-193644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:56:35.598 [INFO] [Thread-193644] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:56:35.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-14T22:56:35.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:56:36.424 [DEBUG] [Thread-193644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:56:36.424 [DEBUG] [Thread-193644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:56:36.473 [DEBUG] [Thread-193644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:56:36.473 [DEBUG] [Thread-193644] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:56:36.484 [DEBUG] [Thread-193644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:56:36.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:56:36.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-14T22:56:36.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:56:36.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:56:36.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:56:36.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:56:36.529 [DEBUG] [Thread-193644] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:56:45.770 [DEBUG] [Thread-193646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:57:00.820 [DEBUG] [Thread-193647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:57:01.285 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:57:01.286 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:57:03.162 [DEBUG] [Thread-193648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:57:06.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:57:06.550 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:57:06.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-14T22:57:08.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 56, 41), 6.69, 62.92, 0.0, 39.83, 9.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:57:08.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:56:41
2026-02-14T22:57:08.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:57:09.107 [DEBUG] [Thread-193649] [transport.py] [_log()] starting thread (client mode): 0xa57728c0
2026-02-14T22:57:09.107 [DEBUG] [Thread-193649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:57:09.127 [DEBUG] [Thread-193649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:57:09.127 [INFO] [Thread-193649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:57:09.128 [DEBUG] [Thread-193649] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:57:09.128 [DEBUG] [Thread-193649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:57:09.129 [DEBUG] [Thread-193649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:57:09.129 [DEBUG] [Thread-193649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:57:09.129 [DEBUG] [Thread-193649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:57:09.129 [DEBUG] [Thread-193649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:57:09.129 [DEBUG] [Thread-193649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:57:09.129 [DEBUG] [Thread-193649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:57:09.129 [DEBUG] [Thread-193649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:57:09.129 [DEBUG] [Thread-193649] [transport.py] [_log()] client lang: <none>
2026-02-14T22:57:09.129 [DEBUG] [Thread-193649] [transport.py] [_log()] server lang: <none>
2026-02-14T22:57:09.129 [DEBUG] [Thread-193649] [transport.py] [_log()] kex follows: False
2026-02-14T22:57:09.129 [DEBUG] [Thread-193649] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:57:09.129 [DEBUG] [Thread-193649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:57:09.129 [DEBUG] [Thread-193649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:57:09.129 [DEBUG] [Thread-193649] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:57:09.129 [DEBUG] [Thread-193649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:57:09.130 [DEBUG] [Thread-193649] [transport.py] [_log()] Compression: none
2026-02-14T22:57:09.130 [DEBUG] [Thread-193649] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:57:09.139 [DEBUG] [Thread-193649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:57:09.140 [DEBUG] [Thread-193649] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:57:09.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:57:09.141 [DEBUG] [Thread-193649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:57:09.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:57:09.143 [DEBUG] [Thread-193649] [transport.py] [_log()] userauth is OK
2026-02-14T22:57:09.143 [DEBUG] [Thread-193649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:57:09.144 [DEBUG] [Thread-193649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:57:09.144 [DEBUG] [Thread-193649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:57:09.144 [DEBUG] [Thread-193649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:57:09.170 [INFO] [Thread-193649] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:57:09.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:57:09.787 [DEBUG] [Thread-193649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:57:09.787 [DEBUG] [Thread-193649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:57:09.787 [DEBUG] [Thread-193649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:57:09.827 [DEBUG] [Thread-193649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:57:09.827 [DEBUG] [Thread-193649] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:57:09.831 [DEBUG] [Thread-193649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:57:09.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:57:09.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:57:09.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:57:09.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:57:09.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:57:09.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:57:09.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:57:09.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:57:09.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:57:09.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.872334 -999.00   +9.00  23.85     68   +3.50 1 1 1 1 1     0    0 5.40 -8.35 ZNESW 21.4 23.9 162.6 28.5 9.4 -25.0 9.2 -24.0 9.1 -23.0 9.4 -24.2
2026-02-14T22:57:09.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:57:09.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:57:09.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.872334
2026-02-14T22:57:09.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:57:09.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:57:09.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:57:09.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:57:09.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:57:09.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:56:41', tmtdew=6.69, humidity=62.92, cloud=0.0, wind=39.83, temperature=9.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:56:41', seeing=4.19, atlas_timestamp='2026-02-14T20:56:09.658', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.012249999999999872, -0.01124999999999865, 0.007499999999998508, 0.019999999999999574, 0.028250000000001663, 0.005999999999998451, -0.01774999999999949, 0.02999999999999936, 0.02200000000000024, -0.05525000000000091, 0.007999999999999119, 0.06899999999999906, 0.010249999999999204, 0.036999999999999034, 0.006999999999999673, 0.0702499999999997, 0.041499999999999204, -0.012500000000001066, -0.02075000000000138, 0.038999999999997925, 0.005250000000000199, -0.013749999999999929, 0.051750000000000185, 0.036999999999999034, 0.050499999999999545, -0.024250000000000327, 0.04600000000000115, 0.08699999999999974, 0.11000000000000121, 0.05000000000000071, 0.03300000000000125, 0.048749999999998295], zp_timestamp='2026-02-14T20:55:00')
2026-02-14T22:57:09.859 [DEBUG] [Thread-193649] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:57:09.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-14T22:57:09.955 [DEBUG] [Thread-193652] [transport.py] [_log()] starting thread (client mode): 0xa5742c50
2026-02-14T22:57:09.955 [DEBUG] [Thread-193652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:57:09.970 [DEBUG] [Thread-193652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:57:09.970 [INFO] [Thread-193652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:57:09.978 [DEBUG] [Thread-193652] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:57:09.978 [DEBUG] [Thread-193652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:57:09.978 [DEBUG] [Thread-193652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:57:09.978 [DEBUG] [Thread-193652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:57:09.978 [DEBUG] [Thread-193652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:57:09.979 [DEBUG] [Thread-193652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:57:09.979 [DEBUG] [Thread-193652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:57:09.979 [DEBUG] [Thread-193652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:57:09.979 [DEBUG] [Thread-193652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:57:09.979 [DEBUG] [Thread-193652] [transport.py] [_log()] client lang: <none>
2026-02-14T22:57:09.979 [DEBUG] [Thread-193652] [transport.py] [_log()] server lang: <none>
2026-02-14T22:57:09.979 [DEBUG] [Thread-193652] [transport.py] [_log()] kex follows: False
2026-02-14T22:57:09.979 [DEBUG] [Thread-193652] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:57:09.979 [DEBUG] [Thread-193652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:57:09.980 [DEBUG] [Thread-193652] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:57:09.980 [DEBUG] [Thread-193652] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:57:09.980 [DEBUG] [Thread-193652] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:57:09.980 [DEBUG] [Thread-193652] [transport.py] [_log()] Compression: none
2026-02-14T22:57:09.980 [DEBUG] [Thread-193652] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:57:10.039 [DEBUG] [Thread-193652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:57:10.040 [DEBUG] [Thread-193652] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:57:10.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:57:10.041 [DEBUG] [Thread-193652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:57:10.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:57:10.100 [DEBUG] [Thread-193652] [transport.py] [_log()] userauth is OK
2026-02-14T22:57:10.100 [DEBUG] [Thread-193652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:57:10.100 [DEBUG] [Thread-193652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:57:10.101 [DEBUG] [Thread-193652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:57:10.101 [DEBUG] [Thread-193652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:57:10.120 [INFO] [Thread-193652] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:57:10.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-14T22:57:10.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:57:10.928 [DEBUG] [Thread-193652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:57:10.929 [DEBUG] [Thread-193652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:57:10.977 [DEBUG] [Thread-193652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:57:10.977 [DEBUG] [Thread-193652] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:57:10.987 [DEBUG] [Thread-193652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:57:10.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:57:10.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-14T22:57: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-14T22:57:11.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:57:11.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:57:11.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:57:11.023 [DEBUG] [Thread-193652] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:57:15.856 [DEBUG] [Thread-193654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:57:20.414 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:57:30.907 [DEBUG] [Thread-193655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:57:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:57:41.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:57:41.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-14T22:57:42.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 57, 17), 6.54, 63.5, 0.0, 36.66, 9.12, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:57:42.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:57:17
2026-02-14T22:57:43.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:57:43.431 [DEBUG] [Thread-193656] [transport.py] [_log()] starting thread (client mode): 0xa2d00a90
2026-02-14T22:57:43.432 [DEBUG] [Thread-193656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:57:43.451 [DEBUG] [Thread-193656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:57:43.451 [INFO] [Thread-193656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:57:43.455 [DEBUG] [Thread-193656] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:57:43.455 [DEBUG] [Thread-193656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:57:43.455 [DEBUG] [Thread-193656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:57:43.455 [DEBUG] [Thread-193656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:57:43.455 [DEBUG] [Thread-193656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:57:43.455 [DEBUG] [Thread-193656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:57:43.455 [DEBUG] [Thread-193656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:57:43.455 [DEBUG] [Thread-193656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:57:43.455 [DEBUG] [Thread-193656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:57:43.455 [DEBUG] [Thread-193656] [transport.py] [_log()] client lang: <none>
2026-02-14T22:57:43.455 [DEBUG] [Thread-193656] [transport.py] [_log()] server lang: <none>
2026-02-14T22:57:43.455 [DEBUG] [Thread-193656] [transport.py] [_log()] kex follows: False
2026-02-14T22:57:43.455 [DEBUG] [Thread-193656] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:57:43.456 [DEBUG] [Thread-193656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:57:43.456 [DEBUG] [Thread-193656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:57:43.456 [DEBUG] [Thread-193656] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:57:43.456 [DEBUG] [Thread-193656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:57:43.456 [DEBUG] [Thread-193656] [transport.py] [_log()] Compression: none
2026-02-14T22:57:43.456 [DEBUG] [Thread-193656] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:57:43.472 [DEBUG] [Thread-193656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:57:43.473 [DEBUG] [Thread-193656] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:57:43.473 [DEBUG] [Thread-193656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:57:43.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:57:43.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:57:43.517 [DEBUG] [Thread-193656] [transport.py] [_log()] userauth is OK
2026-02-14T22:57:43.518 [DEBUG] [Thread-193656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:57:43.518 [DEBUG] [Thread-193656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:57:43.518 [DEBUG] [Thread-193656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:57:43.518 [DEBUG] [Thread-193656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:57:43.555 [INFO] [Thread-193656] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:57:43.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:57:44.197 [DEBUG] [Thread-193656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:57:44.198 [DEBUG] [Thread-193656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:57:44.198 [DEBUG] [Thread-193656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:57:44.238 [DEBUG] [Thread-193656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:57:44.239 [DEBUG] [Thread-193656] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:57:44.242 [DEBUG] [Thread-193656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:57:44.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:57:44.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:57:44.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:57:44.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:57:44.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:57:44.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:57:44.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:57:44.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:57:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:57:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.873028 -999.00   +9.00  21.59     68   +3.50 1 1 1 1 1     0    0 5.30 -11.52 ZNESW 23.6 21.6 161.6 29.9 9.4 -25.0 9.3 -23.9 9.1 -23.0 9.4 -24.2
2026-02-14T22:57:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:57:44.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:57:44.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.873028
2026-02-14T22:57:44.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:57:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:57:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:57:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:57:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:57:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:57:17', tmtdew=6.54, humidity=63.5, cloud=0.0, wind=36.66, temperature=9.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:57:17', seeing=3.28, atlas_timestamp='2026-02-14T20:57:09.619', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.012249999999999872, -0.01124999999999865, 0.007499999999998508, 0.019999999999999574, 0.028250000000001663, 0.005999999999998451, -0.01774999999999949, 0.02999999999999936, 0.02200000000000024, -0.05525000000000091, 0.007999999999999119, 0.06899999999999906, 0.010249999999999204, 0.036999999999999034, 0.006999999999999673, 0.0702499999999997, 0.041499999999999204, -0.012500000000001066, -0.02075000000000138, 0.038999999999997925, 0.005250000000000199, -0.013749999999999929, 0.051750000000000185, 0.036999999999999034, 0.050499999999999545, -0.024250000000000327, 0.04600000000000115, 0.08699999999999974, 0.11000000000000121, 0.05000000000000071, 0.03300000000000125, 0.048749999999998295], zp_timestamp='2026-02-14T20:55:00')
2026-02-14T22:57:44.266 [DEBUG] [Thread-193656] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:57:44.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-14T22:57:44.362 [DEBUG] [Thread-193659] [transport.py] [_log()] starting thread (client mode): 0xa2d03070
2026-02-14T22:57:44.362 [DEBUG] [Thread-193659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:57:44.376 [DEBUG] [Thread-193659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:57:44.376 [INFO] [Thread-193659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:57:44.384 [DEBUG] [Thread-193659] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:57:44.384 [DEBUG] [Thread-193659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:57:44.384 [DEBUG] [Thread-193659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:57:44.384 [DEBUG] [Thread-193659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:57:44.385 [DEBUG] [Thread-193659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:57:44.385 [DEBUG] [Thread-193659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:57:44.385 [DEBUG] [Thread-193659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:57:44.385 [DEBUG] [Thread-193659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:57:44.385 [DEBUG] [Thread-193659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:57:44.385 [DEBUG] [Thread-193659] [transport.py] [_log()] client lang: <none>
2026-02-14T22:57:44.385 [DEBUG] [Thread-193659] [transport.py] [_log()] server lang: <none>
2026-02-14T22:57:44.385 [DEBUG] [Thread-193659] [transport.py] [_log()] kex follows: False
2026-02-14T22:57:44.385 [DEBUG] [Thread-193659] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:57:44.386 [DEBUG] [Thread-193659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:57:44.386 [DEBUG] [Thread-193659] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:57:44.386 [DEBUG] [Thread-193659] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:57:44.386 [DEBUG] [Thread-193659] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:57:44.387 [DEBUG] [Thread-193659] [transport.py] [_log()] Compression: none
2026-02-14T22:57:44.387 [DEBUG] [Thread-193659] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:57:44.440 [DEBUG] [Thread-193659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:57:44.440 [DEBUG] [Thread-193659] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:57:44.440 [DEBUG] [Thread-193659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:57:44.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:57:44.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:57:44.498 [DEBUG] [Thread-193659] [transport.py] [_log()] userauth is OK
2026-02-14T22:57:44.499 [DEBUG] [Thread-193659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:57:44.499 [DEBUG] [Thread-193659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:57:44.499 [DEBUG] [Thread-193659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:57:44.499 [DEBUG] [Thread-193659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:57:44.518 [INFO] [Thread-193659] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:57:44.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T22:57:44.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:57:45.360 [DEBUG] [Thread-193659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:57:45.360 [DEBUG] [Thread-193659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:57:45.408 [DEBUG] [Thread-193659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:57:45.408 [DEBUG] [Thread-193659] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:57:45.417 [DEBUG] [Thread-193659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:57:45.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:57:45.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-14T22:57:45.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:57:45.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:57:45.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:57:45.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:57:45.448 [DEBUG] [Thread-193659] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:57:45.941 [DEBUG] [Thread-193661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:58:00.995 [DEBUG] [Thread-193662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:58:01.489 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:58:01.491 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:58:03.226 [DEBUG] [Thread-193663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:58:15.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:58:15.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:58:15.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-14T22:58:16.034 [DEBUG] [Thread-193664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:58:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 57, 52), 6.49, 63.51, 0.0, 31.27, 9.07, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:58:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:57:52
2026-02-14T22:58:17.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:58:17.847 [DEBUG] [Thread-193665] [transport.py] [_log()] starting thread (client mode): 0xa57c39a0
2026-02-14T22:58:17.847 [DEBUG] [Thread-193665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:58:17.867 [DEBUG] [Thread-193665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:58:17.867 [INFO] [Thread-193665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:58:17.870 [DEBUG] [Thread-193665] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:58:17.870 [DEBUG] [Thread-193665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:58:17.870 [DEBUG] [Thread-193665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:58:17.870 [DEBUG] [Thread-193665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:58:17.870 [DEBUG] [Thread-193665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:58:17.870 [DEBUG] [Thread-193665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:58:17.870 [DEBUG] [Thread-193665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:58:17.870 [DEBUG] [Thread-193665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:58:17.870 [DEBUG] [Thread-193665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:58:17.870 [DEBUG] [Thread-193665] [transport.py] [_log()] client lang: <none>
2026-02-14T22:58:17.870 [DEBUG] [Thread-193665] [transport.py] [_log()] server lang: <none>
2026-02-14T22:58:17.870 [DEBUG] [Thread-193665] [transport.py] [_log()] kex follows: False
2026-02-14T22:58:17.870 [DEBUG] [Thread-193665] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:58:17.870 [DEBUG] [Thread-193665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:58:17.870 [DEBUG] [Thread-193665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:58:17.870 [DEBUG] [Thread-193665] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:58:17.870 [DEBUG] [Thread-193665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:58:17.870 [DEBUG] [Thread-193665] [transport.py] [_log()] Compression: none
2026-02-14T22:58:17.870 [DEBUG] [Thread-193665] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:58:17.886 [DEBUG] [Thread-193665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:58:17.887 [DEBUG] [Thread-193665] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:58:17.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:58:17.888 [DEBUG] [Thread-193665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:58:17.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:58:17.890 [DEBUG] [Thread-193665] [transport.py] [_log()] userauth is OK
2026-02-14T22:58:17.890 [DEBUG] [Thread-193665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:58:17.891 [DEBUG] [Thread-193665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:58:17.891 [DEBUG] [Thread-193665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:58:17.891 [DEBUG] [Thread-193665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:58:17.922 [INFO] [Thread-193665] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:58:17.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:58:18.553 [DEBUG] [Thread-193665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:58:18.554 [DEBUG] [Thread-193665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:58:18.554 [DEBUG] [Thread-193665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:58:18.594 [DEBUG] [Thread-193665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:58:18.595 [DEBUG] [Thread-193665] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:58:18.598 [DEBUG] [Thread-193665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:58:18.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:58:18.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:58:18.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:58:18.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:58:18.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:58:18.622 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:58:18.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:58:18.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:58:18.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:58:18.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.873375 -999.00   +9.00  20.32     68   +3.50 1 1 1 1 1     0    0 5.36 -11.31 ZNESW 20.0 20.3 158.2 26.7 9.4 -25.0 9.3 -23.9 -999.0 -999.0 9.4 -24.1
2026-02-14T22:58:18.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:58:18.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:58:18.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.873375
2026-02-14T22:58:18.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:58:18.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:58:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:58:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:58:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:58:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:57:52', tmtdew=6.49, humidity=63.51, cloud=0.0, wind=31.27, temperature=9.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:57:52', seeing=3.65, atlas_timestamp='2026-02-14T20:57:39.600', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.012249999999999872, -0.01124999999999865, 0.007499999999998508, 0.019999999999999574, 0.028250000000001663, 0.005999999999998451, -0.01774999999999949, 0.02999999999999936, 0.02200000000000024, -0.05525000000000091, 0.007999999999999119, 0.06899999999999906, 0.010249999999999204, 0.036999999999999034, 0.006999999999999673, 0.0702499999999997, 0.041499999999999204, -0.012500000000001066, -0.02075000000000138, 0.038999999999997925, 0.005250000000000199, -0.013749999999999929, 0.051750000000000185, 0.036999999999999034, 0.050499999999999545, -0.024250000000000327, 0.04600000000000115, 0.08699999999999974, 0.11000000000000121, 0.05000000000000071, 0.03300000000000125, 0.048749999999998295], zp_timestamp='2026-02-14T20:55:00')
2026-02-14T22:58:18.625 [DEBUG] [Thread-193665] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:58:18.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-14T22:58:18.720 [DEBUG] [Thread-193668] [transport.py] [_log()] starting thread (client mode): 0xa57c1f90
2026-02-14T22:58:18.720 [DEBUG] [Thread-193668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:58:18.735 [DEBUG] [Thread-193668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:58:18.735 [INFO] [Thread-193668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:58:18.743 [DEBUG] [Thread-193668] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:58:18.743 [DEBUG] [Thread-193668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:58:18.743 [DEBUG] [Thread-193668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:58:18.743 [DEBUG] [Thread-193668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:58:18.743 [DEBUG] [Thread-193668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:58:18.744 [DEBUG] [Thread-193668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:58:18.744 [DEBUG] [Thread-193668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:58:18.744 [DEBUG] [Thread-193668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:58:18.744 [DEBUG] [Thread-193668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:58:18.744 [DEBUG] [Thread-193668] [transport.py] [_log()] client lang: <none>
2026-02-14T22:58:18.744 [DEBUG] [Thread-193668] [transport.py] [_log()] server lang: <none>
2026-02-14T22:58:18.744 [DEBUG] [Thread-193668] [transport.py] [_log()] kex follows: False
2026-02-14T22:58:18.744 [DEBUG] [Thread-193668] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:58:18.744 [DEBUG] [Thread-193668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:58:18.745 [DEBUG] [Thread-193668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:58:18.745 [DEBUG] [Thread-193668] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:58:18.745 [DEBUG] [Thread-193668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:58:18.745 [DEBUG] [Thread-193668] [transport.py] [_log()] Compression: none
2026-02-14T22:58:18.745 [DEBUG] [Thread-193668] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:58:18.801 [DEBUG] [Thread-193668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:58:18.801 [DEBUG] [Thread-193668] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:58:18.802 [DEBUG] [Thread-193668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:58:18.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:58:18.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:58:18.858 [DEBUG] [Thread-193668] [transport.py] [_log()] userauth is OK
2026-02-14T22:58:18.858 [DEBUG] [Thread-193668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:58:18.859 [DEBUG] [Thread-193668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:58:18.859 [DEBUG] [Thread-193668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:58:18.859 [DEBUG] [Thread-193668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:58:18.878 [INFO] [Thread-193668] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:58:18.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-14T22:58:18.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:58:19.723 [DEBUG] [Thread-193668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:58:19.723 [DEBUG] [Thread-193668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:58:19.771 [DEBUG] [Thread-193668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:58:19.772 [DEBUG] [Thread-193668] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:58:19.781 [DEBUG] [Thread-193668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:58:19.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:58: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')
2026-02-14T22:58:19.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-14T22:58:19.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:58:19.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:58:19.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:58:19.818 [DEBUG] [Thread-193668] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:58:31.073 [DEBUG] [Thread-193670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:58:46.131 [DEBUG] [Thread-193671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:58:49.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:58:49.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:58:49.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-14T22:58:51.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 58, 27), 6.49, 63.48, 0.0, 35.59, 9.02, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:58:51.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:58:27
2026-02-14T22:58:52.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:58:52.185 [DEBUG] [Thread-193672] [transport.py] [_log()] starting thread (client mode): 0xa2d01de0
2026-02-14T22:58:52.185 [DEBUG] [Thread-193672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:58:52.200 [DEBUG] [Thread-193672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:58:52.201 [INFO] [Thread-193672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:58:52.203 [DEBUG] [Thread-193672] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:58:52.204 [DEBUG] [Thread-193672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:58:52.204 [DEBUG] [Thread-193672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:58:52.204 [DEBUG] [Thread-193672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:58:52.204 [DEBUG] [Thread-193672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:58:52.204 [DEBUG] [Thread-193672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:58:52.204 [DEBUG] [Thread-193672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:58:52.204 [DEBUG] [Thread-193672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:58:52.204 [DEBUG] [Thread-193672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:58:52.204 [DEBUG] [Thread-193672] [transport.py] [_log()] client lang: <none>
2026-02-14T22:58:52.204 [DEBUG] [Thread-193672] [transport.py] [_log()] server lang: <none>
2026-02-14T22:58:52.204 [DEBUG] [Thread-193672] [transport.py] [_log()] kex follows: False
2026-02-14T22:58:52.204 [DEBUG] [Thread-193672] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:58:52.204 [DEBUG] [Thread-193672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:58:52.204 [DEBUG] [Thread-193672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:58:52.204 [DEBUG] [Thread-193672] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:58:52.204 [DEBUG] [Thread-193672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:58:52.204 [DEBUG] [Thread-193672] [transport.py] [_log()] Compression: none
2026-02-14T22:58:52.204 [DEBUG] [Thread-193672] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:58:52.223 [DEBUG] [Thread-193672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:58:52.224 [DEBUG] [Thread-193672] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:58:52.224 [DEBUG] [Thread-193672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:58:52.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:58:52.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:58:52.226 [DEBUG] [Thread-193672] [transport.py] [_log()] userauth is OK
2026-02-14T22:58:52.227 [DEBUG] [Thread-193672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:58:52.227 [DEBUG] [Thread-193672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:58:52.227 [DEBUG] [Thread-193672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:58:52.227 [DEBUG] [Thread-193672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:58:52.252 [INFO] [Thread-193672] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:58:52.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:58:53.032 [DEBUG] [Thread-193672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:58:53.032 [DEBUG] [Thread-193672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:58:53.033 [DEBUG] [Thread-193672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:58:53.073 [DEBUG] [Thread-193672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:58:53.073 [DEBUG] [Thread-193672] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:58:53.075 [DEBUG] [Thread-193672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:58:53.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:58:53.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:58:53.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:58:53.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:58:53.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:58:53.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:58:53.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:58:53.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:58:53.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:58:53.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.873723 -999.00   +9.00  18.33     68   +3.50 1 1 1 1 1     0    0 5.15 -11.37 ZNESW 25.1 18.3 155.2 30.7 9.4 -24.9 9.3 -23.8 9.1 -22.9 9.4 -24.2
2026-02-14T22:58:53.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:58:53.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:58:53.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.873723
2026-02-14T22:58:53.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:58:53.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:58:53.095 [DEBUG] [Thread-193672] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:58:53.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:58:53.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:58:53.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:58:53.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:58:27', tmtdew=6.49, humidity=63.48, cloud=0.0, wind=35.59, temperature=9.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:58:28', seeing=4.26, atlas_timestamp='2026-02-14T20:58:09.667', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.012249999999999872, -0.01124999999999865, 0.007499999999998508, 0.019999999999999574, 0.028250000000001663, 0.005999999999998451, -0.01774999999999949, 0.02999999999999936, 0.02200000000000024, -0.05525000000000091, 0.007999999999999119, 0.06899999999999906, 0.010249999999999204, 0.036999999999999034, 0.006999999999999673, 0.0702499999999997, 0.041499999999999204, -0.012500000000001066, -0.02075000000000138, 0.038999999999997925, 0.005250000000000199, -0.013749999999999929, 0.051750000000000185, 0.036999999999999034, 0.050499999999999545, -0.024250000000000327, 0.04600000000000115, 0.08699999999999974, 0.11000000000000121, 0.05000000000000071, 0.03300000000000125, 0.048749999999998295], zp_timestamp='2026-02-14T20:55:00')
2026-02-14T22:58:53.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-14T22:58:53.194 [DEBUG] [Thread-193675] [transport.py] [_log()] starting thread (client mode): 0xa2d127d0
2026-02-14T22:58:53.194 [DEBUG] [Thread-193675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:58:53.209 [DEBUG] [Thread-193675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:58:53.209 [INFO] [Thread-193675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:58:53.217 [DEBUG] [Thread-193675] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:58:53.217 [DEBUG] [Thread-193675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:58:53.217 [DEBUG] [Thread-193675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:58:53.217 [DEBUG] [Thread-193675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:58:53.217 [DEBUG] [Thread-193675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:58:53.217 [DEBUG] [Thread-193675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:58:53.217 [DEBUG] [Thread-193675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:58:53.217 [DEBUG] [Thread-193675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:58:53.218 [DEBUG] [Thread-193675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:58:53.218 [DEBUG] [Thread-193675] [transport.py] [_log()] client lang: <none>
2026-02-14T22:58:53.218 [DEBUG] [Thread-193675] [transport.py] [_log()] server lang: <none>
2026-02-14T22:58:53.218 [DEBUG] [Thread-193675] [transport.py] [_log()] kex follows: False
2026-02-14T22:58:53.218 [DEBUG] [Thread-193675] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:58:53.218 [DEBUG] [Thread-193675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:58:53.218 [DEBUG] [Thread-193675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:58:53.218 [DEBUG] [Thread-193675] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:58:53.219 [DEBUG] [Thread-193675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:58:53.219 [DEBUG] [Thread-193675] [transport.py] [_log()] Compression: none
2026-02-14T22:58:53.219 [DEBUG] [Thread-193675] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:58:53.273 [DEBUG] [Thread-193675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:58:53.274 [DEBUG] [Thread-193675] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:58:53.275 [DEBUG] [Thread-193675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:58:53.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:58:53.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:58:53.329 [DEBUG] [Thread-193675] [transport.py] [_log()] userauth is OK
2026-02-14T22:58:53.329 [DEBUG] [Thread-193675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:58:53.330 [DEBUG] [Thread-193675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:58:53.330 [DEBUG] [Thread-193675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:58:53.330 [DEBUG] [Thread-193675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:58:53.350 [INFO] [Thread-193675] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:58:53.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-14T22:58:53.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:58:54.110 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:58:54.180 [DEBUG] [Thread-193675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:58:54.180 [DEBUG] [Thread-193675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:58:54.229 [DEBUG] [Thread-193675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:58:54.229 [DEBUG] [Thread-193675] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:58:54.239 [DEBUG] [Thread-193675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:58:54.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:58:54.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T22:58:54.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T22:58:54.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:58:54.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:58:54.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:58:54.275 [DEBUG] [Thread-193675] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:59:01.166 [DEBUG] [Thread-193677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:59:01.705 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:59:01.706 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:59:03.300 [DEBUG] [Thread-193678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:59:16.208 [DEBUG] [Thread-193679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:59:24.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:59:24.279 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:59:24.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-14T22:59:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 59, 3), 6.48, 63.55, 0.0, 32.78, 9.02, 0, 0, 0, 2, 0, 0),)
2026-02-14T22:59:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:59:03
2026-02-14T22:59:26.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T22:59:26.618 [DEBUG] [Thread-193680] [transport.py] [_log()] starting thread (client mode): 0xa5742a70
2026-02-14T22:59:26.618 [DEBUG] [Thread-193680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:59:26.637 [DEBUG] [Thread-193680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T22:59:26.637 [INFO] [Thread-193680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T22:59:26.641 [DEBUG] [Thread-193680] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:59:26.641 [DEBUG] [Thread-193680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T22:59:26.641 [DEBUG] [Thread-193680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:59:26.641 [DEBUG] [Thread-193680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:59:26.641 [DEBUG] [Thread-193680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:59:26.641 [DEBUG] [Thread-193680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:59:26.641 [DEBUG] [Thread-193680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:59:26.641 [DEBUG] [Thread-193680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:59:26.641 [DEBUG] [Thread-193680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:59:26.641 [DEBUG] [Thread-193680] [transport.py] [_log()] client lang: <none>
2026-02-14T22:59:26.641 [DEBUG] [Thread-193680] [transport.py] [_log()] server lang: <none>
2026-02-14T22:59:26.641 [DEBUG] [Thread-193680] [transport.py] [_log()] kex follows: False
2026-02-14T22:59:26.641 [DEBUG] [Thread-193680] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:59:26.641 [DEBUG] [Thread-193680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:59:26.641 [DEBUG] [Thread-193680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:59:26.641 [DEBUG] [Thread-193680] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:59:26.641 [DEBUG] [Thread-193680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:59:26.641 [DEBUG] [Thread-193680] [transport.py] [_log()] Compression: none
2026-02-14T22:59:26.641 [DEBUG] [Thread-193680] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:59:26.659 [DEBUG] [Thread-193680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:59:26.659 [DEBUG] [Thread-193680] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:59:26.659 [DEBUG] [Thread-193680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T22:59:26.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T22:59:26.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:59:26.660 [DEBUG] [Thread-193680] [transport.py] [_log()] userauth is OK
2026-02-14T22:59:26.660 [DEBUG] [Thread-193680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:59:26.660 [DEBUG] [Thread-193680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:59:26.660 [DEBUG] [Thread-193680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T22:59:26.660 [DEBUG] [Thread-193680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:59:26.688 [INFO] [Thread-193680] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:59:26.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:59:27.321 [DEBUG] [Thread-193680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:59:27.321 [DEBUG] [Thread-193680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:59:27.322 [DEBUG] [Thread-193680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T22:59:27.362 [DEBUG] [Thread-193680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:59:27.363 [DEBUG] [Thread-193680] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:59:27.365 [DEBUG] [Thread-193680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:59:27.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:59:27.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T22:59:27.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T22:59:27.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T22:59:27.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:59:27.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T22:59:27.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:59:27.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:59:27.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T22:59:27.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.874070 -999.00   +9.00  20.23     68   +3.60 1 1 1 1 1     0    0 5.30 -11.49 ZNESW 21.1 20.2 149.4 32.1 9.4 -24.9 9.2 -23.9 9.1 -22.9 9.4 -24.2
2026-02-14T22:59:27.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T22:59:27.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T22:59:27.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.874070
2026-02-14T22:59:27.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T22:59:27.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T22:59:27.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T22:59:27.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T22:59:27.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T22:59:27.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:59:03', tmtdew=6.48, humidity=63.55, cloud=0.0, wind=32.78, temperature=9.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:59:03', seeing=3.84, atlas_timestamp='2026-02-14T20:58:39.648', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.012249999999999872, -0.01124999999999865, 0.007499999999998508, 0.019999999999999574, 0.028250000000001663, 0.005999999999998451, -0.01774999999999949, 0.02999999999999936, 0.02200000000000024, -0.05525000000000091, 0.007999999999999119, 0.06899999999999906, 0.010249999999999204, 0.036999999999999034, 0.006999999999999673, 0.0702499999999997, 0.041499999999999204, -0.012500000000001066, -0.02075000000000138, 0.038999999999997925, 0.005250000000000199, -0.013749999999999929, 0.051750000000000185, 0.036999999999999034, 0.050499999999999545, -0.024250000000000327, 0.04600000000000115, 0.08699999999999974, 0.11000000000000121, 0.05000000000000071, 0.03300000000000125, 0.048749999999998295], zp_timestamp='2026-02-14T20:55:00')
2026-02-14T22:59:27.393 [DEBUG] [Thread-193680] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:59:27.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-14T22:59:27.507 [DEBUG] [Thread-193683] [transport.py] [_log()] starting thread (client mode): 0xa57424d0
2026-02-14T22:59:27.508 [DEBUG] [Thread-193683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T22:59:27.528 [DEBUG] [Thread-193683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T22:59:27.528 [INFO] [Thread-193683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T22:59:27.535 [DEBUG] [Thread-193683] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T22:59:27.536 [DEBUG] [Thread-193683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T22:59:27.536 [DEBUG] [Thread-193683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T22:59:27.536 [DEBUG] [Thread-193683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:59:27.537 [DEBUG] [Thread-193683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T22:59:27.537 [DEBUG] [Thread-193683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:59:27.537 [DEBUG] [Thread-193683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T22:59:27.537 [DEBUG] [Thread-193683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T22:59:27.537 [DEBUG] [Thread-193683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T22:59:27.537 [DEBUG] [Thread-193683] [transport.py] [_log()] client lang: <none>
2026-02-14T22:59:27.537 [DEBUG] [Thread-193683] [transport.py] [_log()] server lang: <none>
2026-02-14T22:59:27.537 [DEBUG] [Thread-193683] [transport.py] [_log()] kex follows: False
2026-02-14T22:59:27.537 [DEBUG] [Thread-193683] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T22:59:27.537 [DEBUG] [Thread-193683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T22:59:27.537 [DEBUG] [Thread-193683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T22:59:27.538 [DEBUG] [Thread-193683] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T22:59:27.538 [DEBUG] [Thread-193683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T22:59:27.538 [DEBUG] [Thread-193683] [transport.py] [_log()] Compression: none
2026-02-14T22:59:27.538 [DEBUG] [Thread-193683] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T22:59:27.597 [DEBUG] [Thread-193683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T22:59:27.598 [DEBUG] [Thread-193683] [transport.py] [_log()] Switch to new keys ...
2026-02-14T22:59:27.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T22:59:27.599 [DEBUG] [Thread-193683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T22:59:27.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T22:59:27.657 [DEBUG] [Thread-193683] [transport.py] [_log()] userauth is OK
2026-02-14T22:59:27.658 [DEBUG] [Thread-193683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T22:59:27.658 [DEBUG] [Thread-193683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T22:59:27.658 [DEBUG] [Thread-193683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T22:59:27.658 [DEBUG] [Thread-193683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T22:59:27.679 [INFO] [Thread-193683] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T22:59:27.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-14T22:59:27.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T22:59:28.497 [DEBUG] [Thread-193683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T22:59:28.497 [DEBUG] [Thread-193683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T22:59:28.545 [DEBUG] [Thread-193683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T22:59:28.546 [DEBUG] [Thread-193683] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T22:59:28.555 [DEBUG] [Thread-193683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T22:59:28.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T22:59:28.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-14T22:59:28.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-14T22:59:28.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T22:59:28.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T22:59:28.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T22:59:28.592 [DEBUG] [Thread-193683] [transport.py] [_log()] EOF in transport thread
2026-02-14T22:59:31.244 [DEBUG] [Thread-193685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:59:46.296 [DEBUG] [Thread-193686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T22:59:58.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T22:59:58.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T22:59:58.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:00:00.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 22, 59, 38), 6.67, 63.02, 0.0, 32.07, 9.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:00:00.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 22:59:38
2026-02-14T23:00:01.330 [DEBUG] [Thread-193687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:00:01.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:00:01.537 [DEBUG] [Thread-193688] [transport.py] [_log()] starting thread (client mode): 0xa5772fe0
2026-02-14T23:00:01.537 [DEBUG] [Thread-193688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:00:01.548 [DEBUG] [Thread-193688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:00:01.548 [INFO] [Thread-193688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:00:01.549 [DEBUG] [Thread-193688] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:00:01.550 [DEBUG] [Thread-193688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:00:01.550 [DEBUG] [Thread-193688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:00:01.550 [DEBUG] [Thread-193688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:00:01.550 [DEBUG] [Thread-193688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:00:01.550 [DEBUG] [Thread-193688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:00:01.550 [DEBUG] [Thread-193688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:00:01.550 [DEBUG] [Thread-193688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:00:01.550 [DEBUG] [Thread-193688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:00:01.550 [DEBUG] [Thread-193688] [transport.py] [_log()] client lang: <none>
2026-02-14T23:00:01.550 [DEBUG] [Thread-193688] [transport.py] [_log()] server lang: <none>
2026-02-14T23:00:01.550 [DEBUG] [Thread-193688] [transport.py] [_log()] kex follows: False
2026-02-14T23:00:01.550 [DEBUG] [Thread-193688] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:00:01.550 [DEBUG] [Thread-193688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:00:01.550 [DEBUG] [Thread-193688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:00:01.550 [DEBUG] [Thread-193688] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:00:01.550 [DEBUG] [Thread-193688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:00:01.550 [DEBUG] [Thread-193688] [transport.py] [_log()] Compression: none
2026-02-14T23:00:01.550 [DEBUG] [Thread-193688] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:00:01.562 [DEBUG] [Thread-193688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:00:01.562 [DEBUG] [Thread-193688] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:00:01.562 [DEBUG] [Thread-193688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:00:01.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:00:01.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:00:01.564 [DEBUG] [Thread-193688] [transport.py] [_log()] userauth is OK
2026-02-14T23:00:01.564 [DEBUG] [Thread-193688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:00:01.564 [DEBUG] [Thread-193688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:00:01.564 [DEBUG] [Thread-193688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:00:01.564 [DEBUG] [Thread-193688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:00:01.577 [INFO] [Thread-193688] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:00:01.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:00:01.911 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:00:01.912 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:00:02.173 [DEBUG] [Thread-193688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:00:02.173 [DEBUG] [Thread-193688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:00:02.173 [DEBUG] [Thread-193688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:00:02.214 [DEBUG] [Thread-193688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:00:02.214 [DEBUG] [Thread-193688] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:00:02.216 [DEBUG] [Thread-193688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:00:02.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:00:02.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:00:02.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:00:02.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:00:02.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:00:02.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:00:02.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:00:02.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:00:02.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:00:02.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.874417 -999.00   +9.00  23.06     68   +3.50 1 1 1 1 1     0    0 5.29 -11.06 ZNESW 21.7 23.1 156.6 30.2 9.4 -24.9 9.2 -23.9 9.1 -22.8 9.3 -24.0
2026-02-14T23:00:02.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:00:02.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:00:02.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.874417
2026-02-14T23:00:02.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:00:02.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:00:02.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:00:02.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:00:02.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:00:02.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T22:59:38', tmtdew=6.67, humidity=63.02, cloud=0.0, wind=32.07, temperature=9.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T22:59:38', seeing=4.47, atlas_timestamp='2026-02-14T20:59:09.629', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.012249999999999872, -0.01124999999999865, 0.007499999999998508, 0.019999999999999574, 0.028250000000001663, 0.005999999999998451, -0.01774999999999949, 0.02999999999999936, 0.02200000000000024, -0.05525000000000091, 0.007999999999999119, 0.06899999999999906, 0.010249999999999204, 0.036999999999999034, 0.006999999999999673, 0.0702499999999997, 0.041499999999999204, -0.012500000000001066, -0.02075000000000138, 0.038999999999997925, 0.005250000000000199, -0.013749999999999929, 0.051750000000000185, 0.036999999999999034, 0.050499999999999545, -0.024250000000000327, 0.04600000000000115, 0.08699999999999974, 0.11000000000000121, 0.05000000000000071, 0.03300000000000125, 0.048749999999998295], zp_timestamp='2026-02-14T20:58:00')
2026-02-14T23:00:02.234 [DEBUG] [Thread-193688] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:00:02.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-14T23:00:02.316 [DEBUG] [Thread-193691] [transport.py] [_log()] starting thread (client mode): 0xa2d78340
2026-02-14T23:00:02.316 [DEBUG] [Thread-193691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:00:02.330 [DEBUG] [Thread-193691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:00:02.331 [INFO] [Thread-193691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:00:02.338 [DEBUG] [Thread-193691] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:00:02.338 [DEBUG] [Thread-193691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:00:02.338 [DEBUG] [Thread-193691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:00:02.338 [DEBUG] [Thread-193691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:00:02.339 [DEBUG] [Thread-193691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:00:02.339 [DEBUG] [Thread-193691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:00:02.339 [DEBUG] [Thread-193691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:00:02.339 [DEBUG] [Thread-193691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:00:02.339 [DEBUG] [Thread-193691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:00:02.339 [DEBUG] [Thread-193691] [transport.py] [_log()] client lang: <none>
2026-02-14T23:00:02.339 [DEBUG] [Thread-193691] [transport.py] [_log()] server lang: <none>
2026-02-14T23:00:02.339 [DEBUG] [Thread-193691] [transport.py] [_log()] kex follows: False
2026-02-14T23:00:02.339 [DEBUG] [Thread-193691] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:00:02.340 [DEBUG] [Thread-193691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:00:02.340 [DEBUG] [Thread-193691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:00:02.340 [DEBUG] [Thread-193691] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:00:02.340 [DEBUG] [Thread-193691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:00:02.340 [DEBUG] [Thread-193691] [transport.py] [_log()] Compression: none
2026-02-14T23:00:02.340 [DEBUG] [Thread-193691] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:00:02.399 [DEBUG] [Thread-193691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:00:02.399 [DEBUG] [Thread-193691] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:00:02.400 [DEBUG] [Thread-193691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:00:02.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:00:02.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:00:02.462 [DEBUG] [Thread-193691] [transport.py] [_log()] userauth is OK
2026-02-14T23:00:02.462 [DEBUG] [Thread-193691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:00:02.462 [DEBUG] [Thread-193691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:00:02.463 [DEBUG] [Thread-193691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:00:02.463 [DEBUG] [Thread-193691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:00:02.481 [INFO] [Thread-193691] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:00:02.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-14T23:00:02.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:00:03.331 [DEBUG] [Thread-193691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:00:03.331 [DEBUG] [Thread-193691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:00:03.369 [DEBUG] [Thread-193693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:00:03.380 [DEBUG] [Thread-193691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:00:03.380 [DEBUG] [Thread-193691] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:00:03.390 [DEBUG] [Thread-193691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:00:03.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:00: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-14T23:00:03.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-14T23:00:03.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:00:03.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:00:03.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:00:03.427 [DEBUG] [Thread-193691] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:00:16.362 [DEBUG] [Thread-193694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:00:28.092 [DEBUG] [Thread-190856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:00:31.414 [DEBUG] [Thread-193695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:00:33.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:00:33.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:00:33.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:00:35.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 0, 13), 6.48, 63.53, 0.0, 35.34, 9.0, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:00:35.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:00:13
2026-02-14T23:00:35.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:00:36.043 [DEBUG] [Thread-193696] [transport.py] [_log()] starting thread (client mode): 0xa2d78d30
2026-02-14T23:00:36.043 [DEBUG] [Thread-193696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:00:36.064 [DEBUG] [Thread-193696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:00:36.064 [INFO] [Thread-193696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:00:36.067 [DEBUG] [Thread-193696] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:00:36.067 [DEBUG] [Thread-193696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:00:36.067 [DEBUG] [Thread-193696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:00:36.067 [DEBUG] [Thread-193696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:00:36.067 [DEBUG] [Thread-193696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:00:36.067 [DEBUG] [Thread-193696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:00:36.068 [DEBUG] [Thread-193696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:00:36.068 [DEBUG] [Thread-193696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:00:36.068 [DEBUG] [Thread-193696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:00:36.068 [DEBUG] [Thread-193696] [transport.py] [_log()] client lang: <none>
2026-02-14T23:00:36.068 [DEBUG] [Thread-193696] [transport.py] [_log()] server lang: <none>
2026-02-14T23:00:36.068 [DEBUG] [Thread-193696] [transport.py] [_log()] kex follows: False
2026-02-14T23:00:36.068 [DEBUG] [Thread-193696] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:00:36.068 [DEBUG] [Thread-193696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:00:36.068 [DEBUG] [Thread-193696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:00:36.068 [DEBUG] [Thread-193696] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:00:36.068 [DEBUG] [Thread-193696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:00:36.068 [DEBUG] [Thread-193696] [transport.py] [_log()] Compression: none
2026-02-14T23:00:36.068 [DEBUG] [Thread-193696] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:00:36.085 [DEBUG] [Thread-193696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:00:36.085 [DEBUG] [Thread-193696] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:00:36.086 [DEBUG] [Thread-193696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:00:36.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:00:36.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:00:36.088 [DEBUG] [Thread-193696] [transport.py] [_log()] userauth is OK
2026-02-14T23:00:36.088 [DEBUG] [Thread-193696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:00:36.088 [DEBUG] [Thread-193696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:00:36.088 [DEBUG] [Thread-193696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:00:36.088 [DEBUG] [Thread-193696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:00:36.113 [INFO] [Thread-193696] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:00:36.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:00:36.760 [DEBUG] [Thread-193696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:00:36.760 [DEBUG] [Thread-193696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:00:36.760 [DEBUG] [Thread-193696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:00:36.801 [DEBUG] [Thread-193696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:00:36.802 [DEBUG] [Thread-193696] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:00:36.805 [DEBUG] [Thread-193696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:00:36.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:00:36.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:00:36.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:00:36.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:00:36.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:00:36.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:00:36.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:00:36.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:00:36.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:00:36.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.874764 -999.00   +9.00  27.91     68   +3.50 1 1 1 1 1     0    0 5.10 -11.75 ZNESW 32.1 27.9 167.2 36.1 9.4 -24.9 9.2 -23.9 9.0 -23.0 9.3 -24.2
2026-02-14T23:00:36.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:00:36.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:00:36.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.874764
2026-02-14T23:00:36.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:00:36.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:00:36.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:00:36.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:00:36.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:00:36.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:00:13', tmtdew=6.48, humidity=63.53, cloud=0.0, wind=35.34, temperature=9.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:00:13', seeing=4.83, atlas_timestamp='2026-02-14T20:59:39.610', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.012249999999999872, -0.01124999999999865, 0.007499999999998508, 0.019999999999999574, 0.028250000000001663, 0.005999999999998451, -0.01774999999999949, 0.02999999999999936, 0.02200000000000024, -0.05525000000000091, 0.007999999999999119, 0.06899999999999906, 0.010249999999999204, 0.036999999999999034, 0.006999999999999673, 0.0702499999999997, 0.041499999999999204, -0.012500000000001066, -0.02075000000000138, 0.038999999999997925, 0.005250000000000199, -0.013749999999999929, 0.051750000000000185, 0.036999999999999034, 0.050499999999999545, -0.024250000000000327, 0.04600000000000115, 0.08699999999999974, 0.11000000000000121, 0.05000000000000071, 0.03300000000000125, 0.048749999999998295], zp_timestamp='2026-02-14T20:58:00')
2026-02-14T23:00:36.831 [DEBUG] [Thread-193696] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:00:36.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T23:00:36.927 [DEBUG] [Thread-193699] [transport.py] [_log()] starting thread (client mode): 0xa2d00f10
2026-02-14T23:00:36.928 [DEBUG] [Thread-193699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:00:36.941 [DEBUG] [Thread-193699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:00:36.942 [INFO] [Thread-193699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:00:36.949 [DEBUG] [Thread-193699] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:00:36.949 [DEBUG] [Thread-193699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:00:36.949 [DEBUG] [Thread-193699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:00:36.949 [DEBUG] [Thread-193699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:00:36.949 [DEBUG] [Thread-193699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:00:36.949 [DEBUG] [Thread-193699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:00:36.949 [DEBUG] [Thread-193699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:00:36.949 [DEBUG] [Thread-193699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:00:36.949 [DEBUG] [Thread-193699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:00:36.949 [DEBUG] [Thread-193699] [transport.py] [_log()] client lang: <none>
2026-02-14T23:00:36.949 [DEBUG] [Thread-193699] [transport.py] [_log()] server lang: <none>
2026-02-14T23:00:36.950 [DEBUG] [Thread-193699] [transport.py] [_log()] kex follows: False
2026-02-14T23:00:36.950 [DEBUG] [Thread-193699] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:00:36.950 [DEBUG] [Thread-193699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:00:36.950 [DEBUG] [Thread-193699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:00:36.950 [DEBUG] [Thread-193699] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:00:36.950 [DEBUG] [Thread-193699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:00:36.950 [DEBUG] [Thread-193699] [transport.py] [_log()] Compression: none
2026-02-14T23:00:36.950 [DEBUG] [Thread-193699] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:00:37.008 [DEBUG] [Thread-193699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:00:37.009 [DEBUG] [Thread-193699] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:00:37.009 [DEBUG] [Thread-193699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:00:37.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:00:37.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:00:37.065 [DEBUG] [Thread-193699] [transport.py] [_log()] userauth is OK
2026-02-14T23:00:37.066 [DEBUG] [Thread-193699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:00:37.066 [DEBUG] [Thread-193699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:00:37.066 [DEBUG] [Thread-193699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:00:37.066 [DEBUG] [Thread-193699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:00:37.086 [INFO] [Thread-193699] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:00:37.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T23:00:37.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:00:37.902 [DEBUG] [Thread-193699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:00:37.902 [DEBUG] [Thread-193699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:00:37.950 [DEBUG] [Thread-193699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:00:37.951 [DEBUG] [Thread-193699] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:00:37.960 [DEBUG] [Thread-193699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:00:37.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:00:37.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-14T23: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-14T23:00:37.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:00:37.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:00:37.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:00:37.995 [DEBUG] [Thread-193699] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:00:46.448 [DEBUG] [Thread-193701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:01:01.501 [DEBUG] [Thread-193702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:01:02.114 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:01:02.115 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:01:03.433 [DEBUG] [Thread-193703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:01:07.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:01:07.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:01:08.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:01:10.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 0, 48), 6.46, 63.61, 0.0, 33.61, 9.1, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:01:10.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:00:48
2026-02-14T23:01:10.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:01:10.880 [DEBUG] [Thread-193704] [transport.py] [_log()] starting thread (client mode): 0xa57c3f10
2026-02-14T23:01:10.880 [DEBUG] [Thread-193704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:01:10.901 [DEBUG] [Thread-193704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:01:10.901 [INFO] [Thread-193704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:01:10.904 [DEBUG] [Thread-193704] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:01:10.904 [DEBUG] [Thread-193704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:01:10.904 [DEBUG] [Thread-193704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:01:10.904 [DEBUG] [Thread-193704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:01:10.904 [DEBUG] [Thread-193704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:01:10.904 [DEBUG] [Thread-193704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:01:10.904 [DEBUG] [Thread-193704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:01:10.904 [DEBUG] [Thread-193704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:01:10.904 [DEBUG] [Thread-193704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:01:10.904 [DEBUG] [Thread-193704] [transport.py] [_log()] client lang: <none>
2026-02-14T23:01:10.904 [DEBUG] [Thread-193704] [transport.py] [_log()] server lang: <none>
2026-02-14T23:01:10.904 [DEBUG] [Thread-193704] [transport.py] [_log()] kex follows: False
2026-02-14T23:01:10.904 [DEBUG] [Thread-193704] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:01:10.904 [DEBUG] [Thread-193704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:01:10.904 [DEBUG] [Thread-193704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:01:10.904 [DEBUG] [Thread-193704] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:01:10.904 [DEBUG] [Thread-193704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:01:10.905 [DEBUG] [Thread-193704] [transport.py] [_log()] Compression: none
2026-02-14T23:01:10.905 [DEBUG] [Thread-193704] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:01:10.922 [DEBUG] [Thread-193704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:01:10.922 [DEBUG] [Thread-193704] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:01:10.923 [DEBUG] [Thread-193704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:01:10.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:01:10.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:01:10.925 [DEBUG] [Thread-193704] [transport.py] [_log()] userauth is OK
2026-02-14T23:01:10.925 [DEBUG] [Thread-193704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:01:10.925 [DEBUG] [Thread-193704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:01:10.925 [DEBUG] [Thread-193704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:01:10.925 [DEBUG] [Thread-193704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:01:10.950 [INFO] [Thread-193704] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:01:10.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:01:11.552 [DEBUG] [Thread-193704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:01:11.552 [DEBUG] [Thread-193704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:01:11.552 [DEBUG] [Thread-193704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:01:11.593 [DEBUG] [Thread-193704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:01:11.593 [DEBUG] [Thread-193704] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:01:11.596 [DEBUG] [Thread-193704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:01:11.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:01:11.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:01:11.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:01:11.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:01:11.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:01:11.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:01:11.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:01:11.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:01:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:01:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.875459 -999.00   +9.00  25.90     68   +3.60 1 1 1 1 1     0    0 5.15 -13.41 ZNESW 27.6 25.9 165.6 39.7 9.4 -24.9 9.2 -23.8 9.1 -22.9 9.4 -24.1
2026-02-14T23:01:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:01:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:01:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.875459
2026-02-14T23:01:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:01:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:01:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:01:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:01:11.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:01:11.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:00:48', tmtdew=6.46, humidity=63.61, cloud=0.0, wind=33.61, temperature=9.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:00:49', seeing=4.12, atlas_timestamp='2026-02-14T21:00:39.658', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.012249999999999872, -0.01124999999999865, 0.007499999999998508, 0.019999999999999574, 0.028250000000001663, 0.005999999999998451, -0.01774999999999949, 0.02999999999999936, 0.02200000000000024, -0.05525000000000091, 0.007999999999999119, 0.06899999999999906, 0.010249999999999204, 0.036999999999999034, 0.006999999999999673, 0.0702499999999997, 0.041499999999999204, -0.012500000000001066, -0.02075000000000138, 0.038999999999997925, 0.005250000000000199, -0.013749999999999929, 0.051750000000000185, 0.036999999999999034, 0.050499999999999545, -0.024250000000000327, 0.04600000000000115, 0.08699999999999974, 0.11000000000000121, 0.05000000000000071, 0.03300000000000125, 0.048749999999998295], zp_timestamp='2026-02-14T20:58:00')
2026-02-14T23:01:11.620 [DEBUG] [Thread-193704] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:01:11.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T23:01:11.716 [DEBUG] [Thread-193707] [transport.py] [_log()] starting thread (client mode): 0xa5740b20
2026-02-14T23:01:11.717 [DEBUG] [Thread-193707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:01:11.731 [DEBUG] [Thread-193707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:01:11.731 [INFO] [Thread-193707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:01:11.739 [DEBUG] [Thread-193707] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:01:11.739 [DEBUG] [Thread-193707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:01:11.739 [DEBUG] [Thread-193707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:01:11.739 [DEBUG] [Thread-193707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:01:11.739 [DEBUG] [Thread-193707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:01:11.739 [DEBUG] [Thread-193707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:01:11.739 [DEBUG] [Thread-193707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:01:11.739 [DEBUG] [Thread-193707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:01:11.739 [DEBUG] [Thread-193707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:01:11.739 [DEBUG] [Thread-193707] [transport.py] [_log()] client lang: <none>
2026-02-14T23:01:11.739 [DEBUG] [Thread-193707] [transport.py] [_log()] server lang: <none>
2026-02-14T23:01:11.739 [DEBUG] [Thread-193707] [transport.py] [_log()] kex follows: False
2026-02-14T23:01:11.739 [DEBUG] [Thread-193707] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:01:11.739 [DEBUG] [Thread-193707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:01:11.739 [DEBUG] [Thread-193707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:01:11.740 [DEBUG] [Thread-193707] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:01:11.740 [DEBUG] [Thread-193707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:01:11.740 [DEBUG] [Thread-193707] [transport.py] [_log()] Compression: none
2026-02-14T23:01:11.740 [DEBUG] [Thread-193707] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:01:11.796 [DEBUG] [Thread-193707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:01:11.797 [DEBUG] [Thread-193707] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:01:11.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:01:11.798 [DEBUG] [Thread-193707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:01:11.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:01:11.852 [DEBUG] [Thread-193707] [transport.py] [_log()] userauth is OK
2026-02-14T23:01:11.853 [DEBUG] [Thread-193707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:01:11.853 [DEBUG] [Thread-193707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:01:11.853 [DEBUG] [Thread-193707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:01:11.853 [DEBUG] [Thread-193707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:01:11.872 [INFO] [Thread-193707] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:01:11.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-14T23:01:11.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:01:12.695 [DEBUG] [Thread-193707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:01:12.695 [DEBUG] [Thread-193707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:01:12.743 [DEBUG] [Thread-193707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:01:12.744 [DEBUG] [Thread-193707] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:01:12.753 [DEBUG] [Thread-193707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:01:12.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:01:12.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-14T23:01:12.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-14T23:01:12.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:01:12.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:01:12.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:01:12.790 [DEBUG] [Thread-193707] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:01:16.537 [DEBUG] [Thread-193709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:01:31.599 [DEBUG] [Thread-193710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:01:42.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:01:42.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:01:42.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:01:45.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 1, 25), 6.46, 63.61, 0.0, 32.25, 9.1, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:01:45.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:01:25
2026-02-14T23:01:45.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:01:45.700 [DEBUG] [Thread-193711] [transport.py] [_log()] starting thread (client mode): 0xa2d7b8b0
2026-02-14T23:01:45.700 [DEBUG] [Thread-193711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:01:45.717 [DEBUG] [Thread-193711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:01:45.717 [INFO] [Thread-193711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:01:45.720 [DEBUG] [Thread-193711] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:01:45.720 [DEBUG] [Thread-193711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:01:45.720 [DEBUG] [Thread-193711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:01:45.720 [DEBUG] [Thread-193711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:01:45.720 [DEBUG] [Thread-193711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:01:45.720 [DEBUG] [Thread-193711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:01:45.720 [DEBUG] [Thread-193711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:01:45.720 [DEBUG] [Thread-193711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:01:45.720 [DEBUG] [Thread-193711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:01:45.720 [DEBUG] [Thread-193711] [transport.py] [_log()] client lang: <none>
2026-02-14T23:01:45.721 [DEBUG] [Thread-193711] [transport.py] [_log()] server lang: <none>
2026-02-14T23:01:45.721 [DEBUG] [Thread-193711] [transport.py] [_log()] kex follows: False
2026-02-14T23:01:45.721 [DEBUG] [Thread-193711] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:01:45.721 [DEBUG] [Thread-193711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:01:45.721 [DEBUG] [Thread-193711] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:01:45.721 [DEBUG] [Thread-193711] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:01:45.721 [DEBUG] [Thread-193711] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:01:45.721 [DEBUG] [Thread-193711] [transport.py] [_log()] Compression: none
2026-02-14T23:01:45.721 [DEBUG] [Thread-193711] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:01:45.733 [DEBUG] [Thread-193711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:01:45.733 [DEBUG] [Thread-193711] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:01:45.734 [DEBUG] [Thread-193711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:01:45.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:01:45.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:01:45.736 [DEBUG] [Thread-193711] [transport.py] [_log()] userauth is OK
2026-02-14T23:01:45.736 [DEBUG] [Thread-193711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:01:45.736 [DEBUG] [Thread-193711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:01:45.736 [DEBUG] [Thread-193711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:01:45.736 [DEBUG] [Thread-193711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:01:45.753 [INFO] [Thread-193711] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:01:45.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:01:46.528 [DEBUG] [Thread-193711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:01:46.528 [DEBUG] [Thread-193711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:01:46.528 [DEBUG] [Thread-193711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:01:46.569 [DEBUG] [Thread-193711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:01:46.569 [DEBUG] [Thread-193711] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:01:46.573 [DEBUG] [Thread-193711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:01:46.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:01:46.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:01:46.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:01:46.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:01:46.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:01:46.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:01:46.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:01:46.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:01:46.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:01:46.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.875806 -999.00   +9.00  23.07     68   +3.60 1 1 1 1 1     0    0 5.08 -14.30 ZNESW 23.9 23.1 169.8 33.4 9.4 -24.7 9.2 -23.7 9.0 -22.9 9.4 -24.0
2026-02-14T23:01:46.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:01:46.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:01:46.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.875806
2026-02-14T23:01:46.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:01:46.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:01:46.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:01:46.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:01:46.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:01:46.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:01:25', tmtdew=6.46, humidity=63.61, cloud=0.0, wind=32.25, temperature=9.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:01:25', seeing=3.61, atlas_timestamp='2026-02-14T21:01:09.638', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.012249999999999872, -0.01124999999999865, 0.007499999999998508, 0.019999999999999574, 0.028250000000001663, 0.005999999999998451, -0.01774999999999949, 0.02999999999999936, 0.02200000000000024, -0.05525000000000091, 0.007999999999999119, 0.06899999999999906, 0.010249999999999204, 0.036999999999999034, 0.006999999999999673, 0.0702499999999997, 0.041499999999999204, -0.012500000000001066, -0.02075000000000138, 0.038999999999997925, 0.005250000000000199, -0.013749999999999929, 0.051750000000000185, 0.036999999999999034, 0.050499999999999545, -0.024250000000000327, 0.04600000000000115, 0.08699999999999974, 0.11000000000000121, 0.05000000000000071, 0.03300000000000125, 0.048749999999998295], zp_timestamp='2026-02-14T20:58:00')
2026-02-14T23:01:46.598 [DEBUG] [Thread-193711] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:01:46.639 [DEBUG] [Thread-193714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:01:46.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-14T23:01:46.694 [DEBUG] [Thread-193715] [transport.py] [_log()] starting thread (client mode): 0xa2d13100
2026-02-14T23:01:46.694 [DEBUG] [Thread-193715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:01:46.709 [DEBUG] [Thread-193715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:01:46.710 [INFO] [Thread-193715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:01:46.717 [DEBUG] [Thread-193715] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:01:46.717 [DEBUG] [Thread-193715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:01:46.718 [DEBUG] [Thread-193715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:01:46.718 [DEBUG] [Thread-193715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:01:46.718 [DEBUG] [Thread-193715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:01:46.718 [DEBUG] [Thread-193715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:01:46.718 [DEBUG] [Thread-193715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:01:46.718 [DEBUG] [Thread-193715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:01:46.718 [DEBUG] [Thread-193715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:01:46.718 [DEBUG] [Thread-193715] [transport.py] [_log()] client lang: <none>
2026-02-14T23:01:46.718 [DEBUG] [Thread-193715] [transport.py] [_log()] server lang: <none>
2026-02-14T23:01:46.718 [DEBUG] [Thread-193715] [transport.py] [_log()] kex follows: False
2026-02-14T23:01:46.718 [DEBUG] [Thread-193715] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:01:46.718 [DEBUG] [Thread-193715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:01:46.718 [DEBUG] [Thread-193715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:01:46.718 [DEBUG] [Thread-193715] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:01:46.718 [DEBUG] [Thread-193715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:01:46.718 [DEBUG] [Thread-193715] [transport.py] [_log()] Compression: none
2026-02-14T23:01:46.718 [DEBUG] [Thread-193715] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:01:46.776 [DEBUG] [Thread-193715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:01:46.777 [DEBUG] [Thread-193715] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:01:46.777 [DEBUG] [Thread-193715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:01:46.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:01:46.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:01:46.836 [DEBUG] [Thread-193715] [transport.py] [_log()] userauth is OK
2026-02-14T23:01:46.836 [DEBUG] [Thread-193715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:01:46.836 [DEBUG] [Thread-193715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:01:46.836 [DEBUG] [Thread-193715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:01:46.836 [DEBUG] [Thread-193715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:01:46.856 [INFO] [Thread-193715] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:01:46.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T23:01:46.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:01:47.708 [DEBUG] [Thread-193715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:01:47.709 [DEBUG] [Thread-193715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:01:47.756 [DEBUG] [Thread-193715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:01:47.757 [DEBUG] [Thread-193715] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:01:47.766 [DEBUG] [Thread-193715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:01:47.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:01:47.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-14T23:01:47.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-14T23:01:47.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:01:47.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:01:47.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:01:47.805 [DEBUG] [Thread-193715] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:02:01.678 [DEBUG] [Thread-193717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:02:02.318 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:02:02.320 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:02:03.489 [DEBUG] [Thread-193718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:02:16.716 [DEBUG] [Thread-193719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:02:17.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:02:17.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:02:17.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-14T23:02:19.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 1, 25), 6.46, 63.61, 0.0, 32.25, 9.1, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:02:19.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:01:25
2026-02-14T23:02:20.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:02:20.317 [DEBUG] [Thread-193720] [transport.py] [_log()] starting thread (client mode): 0xa2d6c400
2026-02-14T23:02:20.318 [DEBUG] [Thread-193720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:02:20.337 [DEBUG] [Thread-193720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:02:20.338 [INFO] [Thread-193720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:02:20.341 [DEBUG] [Thread-193720] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:02:20.341 [DEBUG] [Thread-193720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:02:20.341 [DEBUG] [Thread-193720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:02:20.341 [DEBUG] [Thread-193720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:02:20.342 [DEBUG] [Thread-193720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:02:20.342 [DEBUG] [Thread-193720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:02:20.342 [DEBUG] [Thread-193720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:02:20.342 [DEBUG] [Thread-193720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:02:20.342 [DEBUG] [Thread-193720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:02:20.342 [DEBUG] [Thread-193720] [transport.py] [_log()] client lang: <none>
2026-02-14T23:02:20.342 [DEBUG] [Thread-193720] [transport.py] [_log()] server lang: <none>
2026-02-14T23:02:20.342 [DEBUG] [Thread-193720] [transport.py] [_log()] kex follows: False
2026-02-14T23:02:20.342 [DEBUG] [Thread-193720] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:02:20.342 [DEBUG] [Thread-193720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:02:20.342 [DEBUG] [Thread-193720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:02:20.342 [DEBUG] [Thread-193720] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:02:20.342 [DEBUG] [Thread-193720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:02:20.342 [DEBUG] [Thread-193720] [transport.py] [_log()] Compression: none
2026-02-14T23:02:20.342 [DEBUG] [Thread-193720] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:02:20.361 [DEBUG] [Thread-193720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:02:20.361 [DEBUG] [Thread-193720] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:02:20.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:02:20.362 [DEBUG] [Thread-193720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:02:20.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:02:20.364 [DEBUG] [Thread-193720] [transport.py] [_log()] userauth is OK
2026-02-14T23:02:20.365 [DEBUG] [Thread-193720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:02:20.365 [DEBUG] [Thread-193720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:02:20.365 [DEBUG] [Thread-193720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:02:20.365 [DEBUG] [Thread-193720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:02:20.387 [INFO] [Thread-193720] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:02:20.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:02:21.041 [DEBUG] [Thread-193720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:02:21.041 [DEBUG] [Thread-193720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:02:21.041 [DEBUG] [Thread-193720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:02:21.082 [DEBUG] [Thread-193720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:02:21.083 [DEBUG] [Thread-193720] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:02:21.086 [DEBUG] [Thread-193720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:02:21.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:02:21.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:02:21.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:02:21.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:02:21.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:02:21.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:02:21.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:02:21.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:02:21.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:02:21.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.876153 -999.00   +9.00  31.84     68   +3.50 1 1 2 1 1     0    0 5.17 -15.91 ZNESW 32.5 31.8 158.5 34.9 9.4 -24.8 9.2 -23.7 9.1 -22.9 9.3 -23.9
2026-02-14T23:02:21.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:02:21.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:02:21.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.876153
2026-02-14T23:02:21.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:02:21.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:02:21.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:02:21.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:02:21.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:02:21.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:01:25', tmtdew=6.46, humidity=63.61, cloud=0.0, wind=32.25, temperature=9.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:02:00', seeing=3.39, atlas_timestamp='2026-02-14T21:01:39.619', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.012249999999999872, -0.01124999999999865, 0.007499999999998508, 0.019999999999999574, 0.028250000000001663, 0.005999999999998451, -0.01774999999999949, 0.02999999999999936, 0.02200000000000024, -0.05525000000000091, 0.007999999999999119, 0.06899999999999906, 0.010249999999999204, 0.036999999999999034, 0.006999999999999673, 0.0702499999999997, 0.041499999999999204, -0.012500000000001066, -0.02075000000000138, 0.038999999999997925, 0.005250000000000199, -0.013749999999999929, 0.051750000000000185, 0.036999999999999034, 0.050499999999999545, -0.024250000000000327, 0.04600000000000115, 0.08699999999999974, 0.11000000000000121, 0.05000000000000071, 0.03300000000000125, 0.048749999999998295], zp_timestamp='2026-02-14T20:58:00')
2026-02-14T23:02:21.113 [DEBUG] [Thread-193720] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:02:21.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-14T23:02:21.211 [DEBUG] [Thread-193723] [transport.py] [_log()] starting thread (client mode): 0xa2d7beb0
2026-02-14T23:02:21.211 [DEBUG] [Thread-193723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:02:21.227 [DEBUG] [Thread-193723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:02:21.228 [INFO] [Thread-193723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:02:21.235 [DEBUG] [Thread-193723] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:02:21.235 [DEBUG] [Thread-193723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:02:21.235 [DEBUG] [Thread-193723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:02:21.235 [DEBUG] [Thread-193723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:02:21.235 [DEBUG] [Thread-193723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:02:21.235 [DEBUG] [Thread-193723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:02:21.235 [DEBUG] [Thread-193723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:02:21.235 [DEBUG] [Thread-193723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:02:21.235 [DEBUG] [Thread-193723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:02:21.236 [DEBUG] [Thread-193723] [transport.py] [_log()] client lang: <none>
2026-02-14T23:02:21.236 [DEBUG] [Thread-193723] [transport.py] [_log()] server lang: <none>
2026-02-14T23:02:21.236 [DEBUG] [Thread-193723] [transport.py] [_log()] kex follows: False
2026-02-14T23:02:21.236 [DEBUG] [Thread-193723] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:02:21.236 [DEBUG] [Thread-193723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:02:21.236 [DEBUG] [Thread-193723] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:02:21.236 [DEBUG] [Thread-193723] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:02:21.236 [DEBUG] [Thread-193723] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:02:21.236 [DEBUG] [Thread-193723] [transport.py] [_log()] Compression: none
2026-02-14T23:02:21.236 [DEBUG] [Thread-193723] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:02:21.296 [DEBUG] [Thread-193723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:02:21.296 [DEBUG] [Thread-193723] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:02:21.297 [DEBUG] [Thread-193723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:02:21.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:02:21.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:02:21.352 [DEBUG] [Thread-193723] [transport.py] [_log()] userauth is OK
2026-02-14T23:02:21.352 [DEBUG] [Thread-193723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:02:21.352 [DEBUG] [Thread-193723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:02:21.352 [DEBUG] [Thread-193723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:02:21.352 [DEBUG] [Thread-193723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:02:21.371 [INFO] [Thread-193723] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:02:21.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-14T23:02:21.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:02:22.197 [DEBUG] [Thread-193723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:02:22.197 [DEBUG] [Thread-193723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:02:22.244 [DEBUG] [Thread-193723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:02:22.245 [DEBUG] [Thread-193723] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:02:22.254 [DEBUG] [Thread-193723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:02:22.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:02:22.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-14T23:02:22.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-14T23:02:22.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:02:22.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:02:22.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:02:22.290 [DEBUG] [Thread-193723] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:02:31.755 [DEBUG] [Thread-193725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:02:46.811 [DEBUG] [Thread-193726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:02:52.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:02:52.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:02:52.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-14T23:02:54.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 2, 35), 6.65, 63.13, 0.0, 34.61, 9.34, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:02:54.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:02:35
2026-02-14T23:02:54.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:02:54.696 [DEBUG] [Thread-193727] [transport.py] [_log()] starting thread (client mode): 0xa2d7a5f0
2026-02-14T23:02:54.696 [DEBUG] [Thread-193727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:02:54.717 [DEBUG] [Thread-193727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:02:54.717 [INFO] [Thread-193727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:02:54.720 [DEBUG] [Thread-193727] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:02:54.720 [DEBUG] [Thread-193727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:02:54.720 [DEBUG] [Thread-193727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:02:54.720 [DEBUG] [Thread-193727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:02:54.720 [DEBUG] [Thread-193727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:02:54.720 [DEBUG] [Thread-193727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:02:54.720 [DEBUG] [Thread-193727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:02:54.720 [DEBUG] [Thread-193727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:02:54.720 [DEBUG] [Thread-193727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:02:54.720 [DEBUG] [Thread-193727] [transport.py] [_log()] client lang: <none>
2026-02-14T23:02:54.720 [DEBUG] [Thread-193727] [transport.py] [_log()] server lang: <none>
2026-02-14T23:02:54.721 [DEBUG] [Thread-193727] [transport.py] [_log()] kex follows: False
2026-02-14T23:02:54.721 [DEBUG] [Thread-193727] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:02:54.721 [DEBUG] [Thread-193727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:02:54.721 [DEBUG] [Thread-193727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:02:54.721 [DEBUG] [Thread-193727] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:02:54.721 [DEBUG] [Thread-193727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:02:54.721 [DEBUG] [Thread-193727] [transport.py] [_log()] Compression: none
2026-02-14T23:02:54.721 [DEBUG] [Thread-193727] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:02:54.739 [DEBUG] [Thread-193727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:02:54.739 [DEBUG] [Thread-193727] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:02:54.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:02:54.741 [DEBUG] [Thread-193727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:02:54.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:02:54.743 [DEBUG] [Thread-193727] [transport.py] [_log()] userauth is OK
2026-02-14T23:02:54.743 [DEBUG] [Thread-193727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:02:54.743 [DEBUG] [Thread-193727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:02:54.743 [DEBUG] [Thread-193727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:02:54.743 [DEBUG] [Thread-193727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:02:54.769 [INFO] [Thread-193727] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:02:54.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:02:55.470 [DEBUG] [Thread-193727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:02:55.470 [DEBUG] [Thread-193727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:02:55.471 [DEBUG] [Thread-193727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:02:55.511 [DEBUG] [Thread-193727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:02:55.512 [DEBUG] [Thread-193727] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:02:55.514 [DEBUG] [Thread-193727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:02:55.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:02:55.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:02:55.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:02:55.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:02:55.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:02:55.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:02:55.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:02:55.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:02:55.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:02:55.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.876500 -999.00   +9.00  22.44     68   +3.60 1 1 1 1 1     0    0 5.02 -14.77 ZNESW 22.3 22.4 159.4 36.5 9.4 -24.8 9.2 -23.8 9.0 -22.7 9.3 -24.2
2026-02-14T23:02:55.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:02:55.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:02:55.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.876500
2026-02-14T23:02:55.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:02:55.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:02:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:02:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:02:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:02:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:02:35', tmtdew=6.65, humidity=63.13, cloud=0.0, wind=34.61, temperature=9.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:02:36', seeing=3.12, atlas_timestamp='2026-02-14T21:02:09.600', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.006750000000000256, 0.004250000000000753, 0.007999999999999119, -0.0015000000000000568, 0.05725000000000158, -0.009000000000000341, 0.013250000000001094, 0.033500000000000085, 0.030000000000001137, -0.04675000000000118, -0.005499999999999616, 0.07750000000000057, 0.013749999999999929, 0.051000000000000156, 0.032999999999999474, 0.07124999999999915, 0.06450000000000067, -0.00849999999999973, -0.007750000000001478, 0.04099999999999859, 0.01774999999999949, -0.004749999999999588, 0.029749999999999943, 0.06099999999999994, 0.04150000000000098, 0.004250000000000753, 0.02200000000000024, 0.09699999999999953, 0.0940000000000012, 0.053000000000000824, 0.07900000000000063, 0.06574999999999953], zp_timestamp='2026-02-14T21:01:00')
2026-02-14T23:02:55.545 [DEBUG] [Thread-193727] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:02:55.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T23:02:55.637 [DEBUG] [Thread-193730] [transport.py] [_log()] starting thread (client mode): 0xa2d7b010
2026-02-14T23:02:55.637 [DEBUG] [Thread-193730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:02:55.651 [DEBUG] [Thread-193730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:02:55.652 [INFO] [Thread-193730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:02:55.659 [DEBUG] [Thread-193730] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:02:55.660 [DEBUG] [Thread-193730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:02:55.660 [DEBUG] [Thread-193730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:02:55.660 [DEBUG] [Thread-193730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:02:55.660 [DEBUG] [Thread-193730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:02:55.660 [DEBUG] [Thread-193730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:02:55.660 [DEBUG] [Thread-193730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:02:55.660 [DEBUG] [Thread-193730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:02:55.661 [DEBUG] [Thread-193730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:02:55.661 [DEBUG] [Thread-193730] [transport.py] [_log()] client lang: <none>
2026-02-14T23:02:55.661 [DEBUG] [Thread-193730] [transport.py] [_log()] server lang: <none>
2026-02-14T23:02:55.661 [DEBUG] [Thread-193730] [transport.py] [_log()] kex follows: False
2026-02-14T23:02:55.661 [DEBUG] [Thread-193730] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:02:55.661 [DEBUG] [Thread-193730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:02:55.661 [DEBUG] [Thread-193730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:02:55.661 [DEBUG] [Thread-193730] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:02:55.662 [DEBUG] [Thread-193730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:02:55.662 [DEBUG] [Thread-193730] [transport.py] [_log()] Compression: none
2026-02-14T23:02:55.662 [DEBUG] [Thread-193730] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:02:55.719 [DEBUG] [Thread-193730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:02:55.720 [DEBUG] [Thread-193730] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:02:55.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:02:55.721 [DEBUG] [Thread-193730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:02:55.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:02:55.775 [DEBUG] [Thread-193730] [transport.py] [_log()] userauth is OK
2026-02-14T23:02:55.776 [DEBUG] [Thread-193730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:02:55.776 [DEBUG] [Thread-193730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:02:55.776 [DEBUG] [Thread-193730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:02:55.776 [DEBUG] [Thread-193730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:02:55.794 [INFO] [Thread-193730] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:02:55.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T23:02:55.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:02:56.607 [DEBUG] [Thread-193730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:02:56.607 [DEBUG] [Thread-193730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:02:56.655 [DEBUG] [Thread-193730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:02:56.655 [DEBUG] [Thread-193730] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:02:56.665 [DEBUG] [Thread-193730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:02:56.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:02:56.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-14T23:02:56.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:02:56.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:02:56.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:02:56.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:02:56.702 [DEBUG] [Thread-193730] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:03:01.846 [DEBUG] [Thread-193732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:03:02.524 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:03:02.525 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:03:03.566 [DEBUG] [Thread-193733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:03:16.900 [DEBUG] [Thread-193734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:03:26.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:03:26.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:03:26.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:03:28.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 3, 12), 6.49, 64.0, 0.0, 28.88, 9.02, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:03:28.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:03:12
2026-02-14T23:03:29.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:03:29.292 [DEBUG] [Thread-193735] [transport.py] [_log()] starting thread (client mode): 0xa57c06a0
2026-02-14T23:03:29.292 [DEBUG] [Thread-193735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:03:29.311 [DEBUG] [Thread-193735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:03:29.312 [INFO] [Thread-193735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:03:29.314 [DEBUG] [Thread-193735] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:03:29.314 [DEBUG] [Thread-193735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:03:29.314 [DEBUG] [Thread-193735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:03:29.314 [DEBUG] [Thread-193735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:03:29.314 [DEBUG] [Thread-193735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:03:29.315 [DEBUG] [Thread-193735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:03:29.315 [DEBUG] [Thread-193735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:03:29.315 [DEBUG] [Thread-193735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:03:29.315 [DEBUG] [Thread-193735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:03:29.315 [DEBUG] [Thread-193735] [transport.py] [_log()] client lang: <none>
2026-02-14T23:03:29.315 [DEBUG] [Thread-193735] [transport.py] [_log()] server lang: <none>
2026-02-14T23:03:29.315 [DEBUG] [Thread-193735] [transport.py] [_log()] kex follows: False
2026-02-14T23:03:29.315 [DEBUG] [Thread-193735] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:03:29.315 [DEBUG] [Thread-193735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:03:29.315 [DEBUG] [Thread-193735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:03:29.315 [DEBUG] [Thread-193735] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:03:29.315 [DEBUG] [Thread-193735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:03:29.315 [DEBUG] [Thread-193735] [transport.py] [_log()] Compression: none
2026-02-14T23:03:29.315 [DEBUG] [Thread-193735] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:03:29.332 [DEBUG] [Thread-193735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:03:29.333 [DEBUG] [Thread-193735] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:03:29.333 [DEBUG] [Thread-193735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:03:29.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:03:29.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:03:29.335 [DEBUG] [Thread-193735] [transport.py] [_log()] userauth is OK
2026-02-14T23:03:29.336 [DEBUG] [Thread-193735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:03:29.336 [DEBUG] [Thread-193735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:03:29.336 [DEBUG] [Thread-193735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:03:29.336 [DEBUG] [Thread-193735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:03:29.357 [INFO] [Thread-193735] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:03:29.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:03:29.986 [DEBUG] [Thread-193735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:03:29.986 [DEBUG] [Thread-193735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:03:29.986 [DEBUG] [Thread-193735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:03:30.028 [DEBUG] [Thread-193735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:03:30.028 [DEBUG] [Thread-193735] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:03:30.032 [DEBUG] [Thread-193735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:03:30.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:03:30.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:03:30.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:03:30.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:03:30.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:03:30.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:03:30.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:03:30.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:03:30.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:03:30.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.876847 -999.00   +9.00  23.18     68   +3.50 1 1 1 1 1     0    0 5.05 -15.50 ZNESW 21.5 23.2 154.2 28.9 9.4 -24.9 9.2 -23.8 9.0 -23.0 9.4 -24.0
2026-02-14T23:03:30.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:03:30.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:03:30.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.876847
2026-02-14T23:03:30.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:03:30.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:03:30.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:03:30.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:03:30.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:03:30.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:03:12', tmtdew=6.49, humidity=64.0, cloud=0.0, wind=28.88, temperature=9.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:03:12', seeing=3.46, atlas_timestamp='2026-02-14T21:02:39.581', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.006750000000000256, 0.004250000000000753, 0.007999999999999119, -0.0015000000000000568, 0.05725000000000158, -0.009000000000000341, 0.013250000000001094, 0.033500000000000085, 0.030000000000001137, -0.04675000000000118, -0.005499999999999616, 0.07750000000000057, 0.013749999999999929, 0.051000000000000156, 0.032999999999999474, 0.07124999999999915, 0.06450000000000067, -0.00849999999999973, -0.007750000000001478, 0.04099999999999859, 0.01774999999999949, -0.004749999999999588, 0.029749999999999943, 0.06099999999999994, 0.04150000000000098, 0.004250000000000753, 0.02200000000000024, 0.09699999999999953, 0.0940000000000012, 0.053000000000000824, 0.07900000000000063, 0.06574999999999953], zp_timestamp='2026-02-14T21:01:00')
2026-02-14T23:03:30.057 [DEBUG] [Thread-193735] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:03:30.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T23:03:30.152 [DEBUG] [Thread-193738] [transport.py] [_log()] starting thread (client mode): 0xa2d6f1c0
2026-02-14T23:03:30.153 [DEBUG] [Thread-193738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:03:30.173 [DEBUG] [Thread-193738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:03:30.174 [INFO] [Thread-193738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:03:30.181 [DEBUG] [Thread-193738] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:03:30.181 [DEBUG] [Thread-193738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:03:30.181 [DEBUG] [Thread-193738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:03:30.181 [DEBUG] [Thread-193738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:03:30.181 [DEBUG] [Thread-193738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:03:30.181 [DEBUG] [Thread-193738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:03:30.181 [DEBUG] [Thread-193738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:03:30.181 [DEBUG] [Thread-193738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:03:30.181 [DEBUG] [Thread-193738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:03:30.181 [DEBUG] [Thread-193738] [transport.py] [_log()] client lang: <none>
2026-02-14T23:03:30.181 [DEBUG] [Thread-193738] [transport.py] [_log()] server lang: <none>
2026-02-14T23:03:30.181 [DEBUG] [Thread-193738] [transport.py] [_log()] kex follows: False
2026-02-14T23:03:30.181 [DEBUG] [Thread-193738] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:03:30.181 [DEBUG] [Thread-193738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:03:30.181 [DEBUG] [Thread-193738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:03:30.181 [DEBUG] [Thread-193738] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:03:30.181 [DEBUG] [Thread-193738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:03:30.181 [DEBUG] [Thread-193738] [transport.py] [_log()] Compression: none
2026-02-14T23:03:30.181 [DEBUG] [Thread-193738] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:03:30.237 [DEBUG] [Thread-193738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:03:30.238 [DEBUG] [Thread-193738] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:03:30.238 [DEBUG] [Thread-193738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:03:30.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:03:30.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:03:30.295 [DEBUG] [Thread-193738] [transport.py] [_log()] userauth is OK
2026-02-14T23:03:30.295 [DEBUG] [Thread-193738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:03:30.295 [DEBUG] [Thread-193738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:03:30.295 [DEBUG] [Thread-193738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:03:30.295 [DEBUG] [Thread-193738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:03:30.310 [INFO] [Thread-193738] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:03:30.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T23:03:30.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:03:31.135 [DEBUG] [Thread-193738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:03:31.135 [DEBUG] [Thread-193738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:03:31.183 [DEBUG] [Thread-193738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:03:31.183 [DEBUG] [Thread-193738] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:03:31.192 [DEBUG] [Thread-193738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:03:31.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:03:31.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')
2026-02-14T23:03:31.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:03:31.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:03:31.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:03:31.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:03:31.225 [DEBUG] [Thread-193738] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:03:31.936 [DEBUG] [Thread-193740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:03:46.991 [DEBUG] [Thread-193741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:04:01.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:04:01.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:04:01.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:04:02.026 [DEBUG] [Thread-193742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:04:02.726 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:04:02.727 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:04:03.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 3, 48), 6.47, 64.08, 0.0, 34.32, 9.02, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:04:03.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:03:48
2026-02-14T23:04:03.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:04:03.569 [DEBUG] [Thread-193743] [transport.py] [_log()] starting thread (client mode): 0xa2d6e440
2026-02-14T23:04:03.569 [DEBUG] [Thread-193743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:04:03.589 [DEBUG] [Thread-193743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:04:03.590 [INFO] [Thread-193743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:04:03.593 [DEBUG] [Thread-193743] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:04:03.593 [DEBUG] [Thread-193743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:04:03.593 [DEBUG] [Thread-193743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:04:03.593 [DEBUG] [Thread-193743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:04:03.593 [DEBUG] [Thread-193743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:04:03.593 [DEBUG] [Thread-193743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:04:03.593 [DEBUG] [Thread-193743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:04:03.593 [DEBUG] [Thread-193743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:04:03.593 [DEBUG] [Thread-193743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:04:03.593 [DEBUG] [Thread-193743] [transport.py] [_log()] client lang: <none>
2026-02-14T23:04:03.593 [DEBUG] [Thread-193743] [transport.py] [_log()] server lang: <none>
2026-02-14T23:04:03.593 [DEBUG] [Thread-193743] [transport.py] [_log()] kex follows: False
2026-02-14T23:04:03.593 [DEBUG] [Thread-193743] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:04:03.593 [DEBUG] [Thread-193743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:04:03.593 [DEBUG] [Thread-193743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:04:03.593 [DEBUG] [Thread-193743] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:04:03.593 [DEBUG] [Thread-193743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:04:03.593 [DEBUG] [Thread-193743] [transport.py] [_log()] Compression: none
2026-02-14T23:04:03.593 [DEBUG] [Thread-193743] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:04:03.609 [DEBUG] [Thread-193743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:04:03.609 [DEBUG] [Thread-193743] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:04:03.609 [DEBUG] [Thread-193743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:04:03.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:04:03.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:04:03.610 [DEBUG] [Thread-193743] [transport.py] [_log()] userauth is OK
2026-02-14T23:04:03.610 [DEBUG] [Thread-193743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:04:03.610 [DEBUG] [Thread-193743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:04:03.610 [DEBUG] [Thread-193743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:04:03.610 [DEBUG] [Thread-193743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:04:03.627 [DEBUG] [Thread-193745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:04:03.629 [INFO] [Thread-193743] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:04:03.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:04:04.280 [DEBUG] [Thread-193743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:04:04.280 [DEBUG] [Thread-193743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:04:04.280 [DEBUG] [Thread-193743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:04:04.321 [DEBUG] [Thread-193743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:04:04.321 [DEBUG] [Thread-193743] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:04:04.324 [DEBUG] [Thread-193743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:04:04.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:04:04.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:04:04.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:04:04.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:04:04.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:04:04.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:04:04.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:04:04.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:04:04.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:04:04.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.877195 -999.00   +9.00  25.65     68   +3.60 1 1 1 1 1     0    0 5.11 -15.22 ZNESW 31.6 25.6 153.2 34.1 9.4 -24.8 9.2 -23.8 9.1 -22.9 9.4 -24.2
2026-02-14T23:04:04.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:04:04.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:04:04.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.877195
2026-02-14T23:04:04.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:04:04.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:04:04.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:04:04.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:04:04.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:04:04.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:03:48', tmtdew=6.47, humidity=64.08, cloud=0.0, wind=34.32, temperature=9.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:03:48', seeing=4.81, atlas_timestamp='2026-02-14T21:03:09.648', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.006750000000000256, 0.004250000000000753, 0.007999999999999119, -0.0015000000000000568, 0.05725000000000158, -0.009000000000000341, 0.013250000000001094, 0.033500000000000085, 0.030000000000001137, -0.04675000000000118, -0.005499999999999616, 0.07750000000000057, 0.013749999999999929, 0.051000000000000156, 0.032999999999999474, 0.07124999999999915, 0.06450000000000067, -0.00849999999999973, -0.007750000000001478, 0.04099999999999859, 0.01774999999999949, -0.004749999999999588, 0.029749999999999943, 0.06099999999999994, 0.04150000000000098, 0.004250000000000753, 0.02200000000000024, 0.09699999999999953, 0.0940000000000012, 0.053000000000000824, 0.07900000000000063, 0.06574999999999953], zp_timestamp='2026-02-14T21:01:00')
2026-02-14T23:04:04.348 [DEBUG] [Thread-193743] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:04:04.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-14T23:04:04.450 [DEBUG] [Thread-193747] [transport.py] [_log()] starting thread (client mode): 0xa2d7b4c0
2026-02-14T23:04:04.450 [DEBUG] [Thread-193747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:04:04.465 [DEBUG] [Thread-193747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:04:04.465 [INFO] [Thread-193747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:04:04.473 [DEBUG] [Thread-193747] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:04:04.473 [DEBUG] [Thread-193747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:04:04.473 [DEBUG] [Thread-193747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:04:04.474 [DEBUG] [Thread-193747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:04:04.474 [DEBUG] [Thread-193747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:04:04.474 [DEBUG] [Thread-193747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:04:04.474 [DEBUG] [Thread-193747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:04:04.474 [DEBUG] [Thread-193747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:04:04.474 [DEBUG] [Thread-193747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:04:04.474 [DEBUG] [Thread-193747] [transport.py] [_log()] client lang: <none>
2026-02-14T23:04:04.474 [DEBUG] [Thread-193747] [transport.py] [_log()] server lang: <none>
2026-02-14T23:04:04.474 [DEBUG] [Thread-193747] [transport.py] [_log()] kex follows: False
2026-02-14T23:04:04.474 [DEBUG] [Thread-193747] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:04:04.474 [DEBUG] [Thread-193747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:04:04.474 [DEBUG] [Thread-193747] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:04:04.474 [DEBUG] [Thread-193747] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:04:04.474 [DEBUG] [Thread-193747] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:04:04.474 [DEBUG] [Thread-193747] [transport.py] [_log()] Compression: none
2026-02-14T23:04:04.474 [DEBUG] [Thread-193747] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:04:04.530 [DEBUG] [Thread-193747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:04:04.531 [DEBUG] [Thread-193747] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:04:04.531 [DEBUG] [Thread-193747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:04:04.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:04:04.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:04:04.588 [DEBUG] [Thread-193747] [transport.py] [_log()] userauth is OK
2026-02-14T23:04:04.588 [DEBUG] [Thread-193747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:04:04.589 [DEBUG] [Thread-193747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:04:04.589 [DEBUG] [Thread-193747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:04:04.589 [DEBUG] [Thread-193747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:04:04.611 [INFO] [Thread-193747] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:04:04.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-14T23:04:04.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:04:05.434 [DEBUG] [Thread-193747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:04:05.434 [DEBUG] [Thread-193747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:04:05.482 [DEBUG] [Thread-193747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:04:05.482 [DEBUG] [Thread-193747] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:04:05.491 [DEBUG] [Thread-193747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:04:05.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:04:05.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:04:05.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:04:05.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:04:05.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:04:05.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:04:05.526 [DEBUG] [Thread-193747] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:04:17.066 [DEBUG] [Thread-193749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:04:32.121 [DEBUG] [Thread-193750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:04:35.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:04:35.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:04:35.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-14T23:04:37.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 4, 23), 6.46, 64.11, 0.0, 34.48, 9.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:04:37.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:04:23
2026-02-14T23:04:37.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:04:37.887 [DEBUG] [Thread-193751] [transport.py] [_log()] starting thread (client mode): 0xa57c3130
2026-02-14T23:04:37.887 [DEBUG] [Thread-193751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:04:37.906 [DEBUG] [Thread-193751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:04:37.907 [INFO] [Thread-193751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:04:37.910 [DEBUG] [Thread-193751] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:04:37.910 [DEBUG] [Thread-193751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:04:37.910 [DEBUG] [Thread-193751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:04:37.910 [DEBUG] [Thread-193751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:04:37.910 [DEBUG] [Thread-193751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:04:37.910 [DEBUG] [Thread-193751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:04:37.910 [DEBUG] [Thread-193751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:04:37.910 [DEBUG] [Thread-193751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:04:37.910 [DEBUG] [Thread-193751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:04:37.910 [DEBUG] [Thread-193751] [transport.py] [_log()] client lang: <none>
2026-02-14T23:04:37.911 [DEBUG] [Thread-193751] [transport.py] [_log()] server lang: <none>
2026-02-14T23:04:37.911 [DEBUG] [Thread-193751] [transport.py] [_log()] kex follows: False
2026-02-14T23:04:37.911 [DEBUG] [Thread-193751] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:04:37.911 [DEBUG] [Thread-193751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:04:37.911 [DEBUG] [Thread-193751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:04:37.911 [DEBUG] [Thread-193751] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:04:37.911 [DEBUG] [Thread-193751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:04:37.911 [DEBUG] [Thread-193751] [transport.py] [_log()] Compression: none
2026-02-14T23:04:37.911 [DEBUG] [Thread-193751] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:04:37.928 [DEBUG] [Thread-193751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:04:37.929 [DEBUG] [Thread-193751] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:04:37.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:04:37.930 [DEBUG] [Thread-193751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:04:37.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:04:37.932 [DEBUG] [Thread-193751] [transport.py] [_log()] userauth is OK
2026-02-14T23:04:37.932 [DEBUG] [Thread-193751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:04:37.932 [DEBUG] [Thread-193751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:04:37.932 [DEBUG] [Thread-193751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:04:37.932 [DEBUG] [Thread-193751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:04:37.959 [INFO] [Thread-193751] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:04:37.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:04:38.596 [DEBUG] [Thread-193751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:04:38.596 [DEBUG] [Thread-193751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:04:38.596 [DEBUG] [Thread-193751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:04:38.637 [DEBUG] [Thread-193751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:04:38.638 [DEBUG] [Thread-193751] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:04:38.641 [DEBUG] [Thread-193751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:04:38.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:04:38.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:04:38.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:04:38.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:04:38.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:04:38.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:04:38.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:04:38.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:04:38.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:04:38.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.877889 -999.00   +9.00  28.39     68   +3.60 1 1 1 1 1     0    0 5.03 -16.73 ZNESW 22.7 28.4 166.0 35.0 9.4 -24.9 9.2 -23.7 9.1 -22.8 9.4 -24.0
2026-02-14T23:04:38.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:04:38.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:04:38.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.877889
2026-02-14T23:04:38.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:04:38.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:04:38.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:04:38.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:04:38.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:04:38.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:04:23', tmtdew=6.46, humidity=64.11, cloud=0.0, wind=34.48, temperature=9.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:04:24', seeing=4.5, atlas_timestamp='2026-02-14T21:04:09.610', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.006750000000000256, 0.004250000000000753, 0.007999999999999119, -0.0015000000000000568, 0.05725000000000158, -0.009000000000000341, 0.013250000000001094, 0.033500000000000085, 0.030000000000001137, -0.04675000000000118, -0.005499999999999616, 0.07750000000000057, 0.013749999999999929, 0.051000000000000156, 0.032999999999999474, 0.07124999999999915, 0.06450000000000067, -0.00849999999999973, -0.007750000000001478, 0.04099999999999859, 0.01774999999999949, -0.004749999999999588, 0.029749999999999943, 0.06099999999999994, 0.04150000000000098, 0.004250000000000753, 0.02200000000000024, 0.09699999999999953, 0.0940000000000012, 0.053000000000000824, 0.07900000000000063, 0.06574999999999953], zp_timestamp='2026-02-14T21:01:00')
2026-02-14T23:04:38.668 [DEBUG] [Thread-193751] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:04:38.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-14T23:04:38.762 [DEBUG] [Thread-193754] [transport.py] [_log()] starting thread (client mode): 0xa2d79570
2026-02-14T23:04:38.763 [DEBUG] [Thread-193754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:04:38.777 [DEBUG] [Thread-193754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:04:38.777 [INFO] [Thread-193754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:04:38.785 [DEBUG] [Thread-193754] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:04:38.785 [DEBUG] [Thread-193754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:04:38.786 [DEBUG] [Thread-193754] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:04:38.786 [DEBUG] [Thread-193754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:04:38.786 [DEBUG] [Thread-193754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:04:38.786 [DEBUG] [Thread-193754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:04:38.786 [DEBUG] [Thread-193754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:04:38.786 [DEBUG] [Thread-193754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:04:38.786 [DEBUG] [Thread-193754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:04:38.786 [DEBUG] [Thread-193754] [transport.py] [_log()] client lang: <none>
2026-02-14T23:04:38.786 [DEBUG] [Thread-193754] [transport.py] [_log()] server lang: <none>
2026-02-14T23:04:38.786 [DEBUG] [Thread-193754] [transport.py] [_log()] kex follows: False
2026-02-14T23:04:38.786 [DEBUG] [Thread-193754] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:04:38.786 [DEBUG] [Thread-193754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:04:38.786 [DEBUG] [Thread-193754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:04:38.786 [DEBUG] [Thread-193754] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:04:38.786 [DEBUG] [Thread-193754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:04:38.786 [DEBUG] [Thread-193754] [transport.py] [_log()] Compression: none
2026-02-14T23:04:38.787 [DEBUG] [Thread-193754] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:04:38.843 [DEBUG] [Thread-193754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:04:38.844 [DEBUG] [Thread-193754] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:04:38.844 [DEBUG] [Thread-193754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:04:38.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:04:38.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:04:38.899 [DEBUG] [Thread-193754] [transport.py] [_log()] userauth is OK
2026-02-14T23:04:38.899 [DEBUG] [Thread-193754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:04:38.899 [DEBUG] [Thread-193754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:04:38.899 [DEBUG] [Thread-193754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:04:38.900 [DEBUG] [Thread-193754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:04:38.918 [INFO] [Thread-193754] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:04:38.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-14T23:04:38.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:04:39.751 [DEBUG] [Thread-193754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:04:39.751 [DEBUG] [Thread-193754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:04:39.802 [DEBUG] [Thread-193754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:04:39.802 [DEBUG] [Thread-193754] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:04:39.814 [DEBUG] [Thread-193754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:04:39.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:04:39.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-14T23:04:39.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:04:39.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:04:39.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:04:39.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:04:39.851 [DEBUG] [Thread-193754] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:04:47.156 [DEBUG] [Thread-193756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:05:02.218 [DEBUG] [Thread-193757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:05:02.949 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:05:02.949 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:05:03.682 [DEBUG] [Thread-193758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:05:09.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:05:09.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:05:09.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-14T23:05:12.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 4, 58), 6.46, 64.11, 0.0, 34.86, 9.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:05:12.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:04:58
2026-02-14T23:05:12.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:05:12.926 [DEBUG] [Thread-193759] [transport.py] [_log()] starting thread (client mode): 0xa57c0250
2026-02-14T23:05:12.926 [DEBUG] [Thread-193759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:05:12.946 [DEBUG] [Thread-193759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:05:12.946 [INFO] [Thread-193759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:05:12.950 [DEBUG] [Thread-193759] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:05:12.950 [DEBUG] [Thread-193759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:05:12.950 [DEBUG] [Thread-193759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:05:12.950 [DEBUG] [Thread-193759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:05:12.950 [DEBUG] [Thread-193759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:05:12.950 [DEBUG] [Thread-193759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:05:12.950 [DEBUG] [Thread-193759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:05:12.950 [DEBUG] [Thread-193759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:05:12.950 [DEBUG] [Thread-193759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:05:12.950 [DEBUG] [Thread-193759] [transport.py] [_log()] client lang: <none>
2026-02-14T23:05:12.950 [DEBUG] [Thread-193759] [transport.py] [_log()] server lang: <none>
2026-02-14T23:05:12.950 [DEBUG] [Thread-193759] [transport.py] [_log()] kex follows: False
2026-02-14T23:05:12.950 [DEBUG] [Thread-193759] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:05:12.950 [DEBUG] [Thread-193759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:05:12.950 [DEBUG] [Thread-193759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:05:12.951 [DEBUG] [Thread-193759] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:05:12.951 [DEBUG] [Thread-193759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:05:12.951 [DEBUG] [Thread-193759] [transport.py] [_log()] Compression: none
2026-02-14T23:05:12.951 [DEBUG] [Thread-193759] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:05:12.959 [DEBUG] [Thread-193759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:05:12.960 [DEBUG] [Thread-193759] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:05:12.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:05:12.960 [DEBUG] [Thread-193759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:05:12.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:05:12.961 [DEBUG] [Thread-193759] [transport.py] [_log()] userauth is OK
2026-02-14T23:05:12.961 [DEBUG] [Thread-193759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:05:12.961 [DEBUG] [Thread-193759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:05:12.961 [DEBUG] [Thread-193759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:05:12.962 [DEBUG] [Thread-193759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:05:12.976 [INFO] [Thread-193759] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:05:12.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:05:15.592 [DEBUG] [Thread-193759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:05:15.592 [DEBUG] [Thread-193759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:05:15.593 [DEBUG] [Thread-193759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:05:15.633 [DEBUG] [Thread-193759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:05:15.634 [DEBUG] [Thread-193759] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:05:15.637 [DEBUG] [Thread-193759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:05:15.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:05:15.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:05:15.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:05:15.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:05:15.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:05:15.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:05:15.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:05:15.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:05:15.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:05:15.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.878236 -999.00   +9.00  24.98     68   +3.50 1 1 1 1 1     0    0 4.92 -17.05 ZNESW 27.3 25.0 163.8 32.0 9.4 -24.9 9.2 -23.8 9.1 -22.8 9.4 -23.9
2026-02-14T23:05:15.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:05:15.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:05:15.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.878236
2026-02-14T23:05:15.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:05:15.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:05:15.668 [DEBUG] [Thread-193759] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:05:15.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:05:15.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:05:15.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:05:15.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:04:58', tmtdew=6.46, humidity=64.11, cloud=0.0, wind=34.86, temperature=9.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:04:59', seeing=4.25, atlas_timestamp='2026-02-14T21:04:39.590', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.006750000000000256, 0.004250000000000753, 0.007999999999999119, -0.0015000000000000568, 0.05725000000000158, -0.009000000000000341, 0.013250000000001094, 0.033500000000000085, 0.030000000000001137, -0.04675000000000118, -0.005499999999999616, 0.07750000000000057, 0.013749999999999929, 0.051000000000000156, 0.032999999999999474, 0.07124999999999915, 0.06450000000000067, -0.00849999999999973, -0.007750000000001478, 0.04099999999999859, 0.01774999999999949, -0.004749999999999588, 0.029749999999999943, 0.06099999999999994, 0.04150000000000098, 0.004250000000000753, 0.02200000000000024, 0.09699999999999953, 0.0940000000000012, 0.053000000000000824, 0.07900000000000063, 0.06574999999999953], zp_timestamp='2026-02-14T21:01:00')
2026-02-14T23:05:15.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-14T23:05:15.763 [DEBUG] [Thread-193762] [transport.py] [_log()] starting thread (client mode): 0xa57c3160
2026-02-14T23:05:15.763 [DEBUG] [Thread-193762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:05:15.777 [DEBUG] [Thread-193762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:05:15.778 [INFO] [Thread-193762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:05:15.785 [DEBUG] [Thread-193762] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:05:15.785 [DEBUG] [Thread-193762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:05:15.786 [DEBUG] [Thread-193762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:05:15.786 [DEBUG] [Thread-193762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:05:15.786 [DEBUG] [Thread-193762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:05:15.786 [DEBUG] [Thread-193762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:05:15.786 [DEBUG] [Thread-193762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:05:15.786 [DEBUG] [Thread-193762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:05:15.786 [DEBUG] [Thread-193762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:05:15.786 [DEBUG] [Thread-193762] [transport.py] [_log()] client lang: <none>
2026-02-14T23:05:15.786 [DEBUG] [Thread-193762] [transport.py] [_log()] server lang: <none>
2026-02-14T23:05:15.787 [DEBUG] [Thread-193762] [transport.py] [_log()] kex follows: False
2026-02-14T23:05:15.787 [DEBUG] [Thread-193762] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:05:15.787 [DEBUG] [Thread-193762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:05:15.787 [DEBUG] [Thread-193762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:05:15.787 [DEBUG] [Thread-193762] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:05:15.787 [DEBUG] [Thread-193762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:05:15.787 [DEBUG] [Thread-193762] [transport.py] [_log()] Compression: none
2026-02-14T23:05:15.788 [DEBUG] [Thread-193762] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:05:15.843 [DEBUG] [Thread-193762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:05:15.843 [DEBUG] [Thread-193762] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:05:15.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:05:15.845 [DEBUG] [Thread-193762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:05:15.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:05:15.898 [DEBUG] [Thread-193762] [transport.py] [_log()] userauth is OK
2026-02-14T23:05:15.898 [DEBUG] [Thread-193762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:05:15.898 [DEBUG] [Thread-193762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:05:15.899 [DEBUG] [Thread-193762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:05:15.899 [DEBUG] [Thread-193762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:05:15.918 [INFO] [Thread-193762] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:05:15.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-14T23:05:15.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:05:16.765 [DEBUG] [Thread-193762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:05:16.765 [DEBUG] [Thread-193762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:05:16.815 [DEBUG] [Thread-193762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:05:16.815 [DEBUG] [Thread-193762] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:05:16.827 [DEBUG] [Thread-193762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:05:16.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:05:16.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-14T23:05:16.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:05:16.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:05:16.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:05:16.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:05:16.872 [DEBUG] [Thread-193762] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:05:17.259 [DEBUG] [Thread-193764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:05:32.322 [DEBUG] [Thread-193765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:05:46.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:05:46.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:05:46.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-14T23:05:47.361 [DEBUG] [Thread-193766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:05:48.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 5, 35), 6.64, 63.16, 0.0, 37.47, 9.41, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:05:48.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:05:35
2026-02-14T23:05:49.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:05:49.313 [DEBUG] [Thread-193767] [transport.py] [_log()] starting thread (client mode): 0xa2d03850
2026-02-14T23:05:49.313 [DEBUG] [Thread-193767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:05:49.333 [DEBUG] [Thread-193767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:05:49.333 [INFO] [Thread-193767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:05:49.336 [DEBUG] [Thread-193767] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:05:49.336 [DEBUG] [Thread-193767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:05:49.336 [DEBUG] [Thread-193767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:05:49.336 [DEBUG] [Thread-193767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:05:49.336 [DEBUG] [Thread-193767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:05:49.336 [DEBUG] [Thread-193767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:05:49.336 [DEBUG] [Thread-193767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:05:49.336 [DEBUG] [Thread-193767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:05:49.336 [DEBUG] [Thread-193767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:05:49.336 [DEBUG] [Thread-193767] [transport.py] [_log()] client lang: <none>
2026-02-14T23:05:49.336 [DEBUG] [Thread-193767] [transport.py] [_log()] server lang: <none>
2026-02-14T23:05:49.336 [DEBUG] [Thread-193767] [transport.py] [_log()] kex follows: False
2026-02-14T23:05:49.336 [DEBUG] [Thread-193767] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:05:49.337 [DEBUG] [Thread-193767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:05:49.337 [DEBUG] [Thread-193767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:05:49.337 [DEBUG] [Thread-193767] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:05:49.337 [DEBUG] [Thread-193767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:05:49.337 [DEBUG] [Thread-193767] [transport.py] [_log()] Compression: none
2026-02-14T23:05:49.337 [DEBUG] [Thread-193767] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:05:49.356 [DEBUG] [Thread-193767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:05:49.357 [DEBUG] [Thread-193767] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:05:49.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:05:49.358 [DEBUG] [Thread-193767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:05:49.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:05:49.360 [DEBUG] [Thread-193767] [transport.py] [_log()] userauth is OK
2026-02-14T23:05:49.360 [DEBUG] [Thread-193767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:05:49.360 [DEBUG] [Thread-193767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:05:49.360 [DEBUG] [Thread-193767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:05:49.360 [DEBUG] [Thread-193767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:05:49.396 [INFO] [Thread-193767] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:05:49.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:05:50.046 [DEBUG] [Thread-193767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:05:50.046 [DEBUG] [Thread-193767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:05:50.047 [DEBUG] [Thread-193767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:05:50.087 [DEBUG] [Thread-193767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:05:50.088 [DEBUG] [Thread-193767] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:05:50.091 [DEBUG] [Thread-193767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:05:50.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:05:50.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:05:50.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:05:50.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:05:50.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:05:50.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:05:50.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:05:50.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:05:50.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:05:50.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.878584 -999.00   +9.00  20.55     68   +3.50 1 1 1 1 1     0    0 5.08 -16.31 ZNESW 31.9 20.6 159.1 36.5 9.4 -24.7 9.3 -23.7 9.0 -22.8 9.4 -23.9
2026-02-14T23:05:50.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:05:50.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:05:50.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.878584
2026-02-14T23:05:50.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:05:50.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:05:50.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:05:50.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:05:50.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:05:50.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:05:35', tmtdew=6.64, humidity=63.16, cloud=0.0, wind=37.47, temperature=9.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:05:35', seeing=4.78, atlas_timestamp='2026-02-14T21:05:09.658', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, 0.005250000000000199, -0.016750000000000043, -0.010500000000000398, 0.011499999999999844, 0.009250000000001535, 0.007500000000000284, 0.0027500000000006963, -0.0065000000000008384, 0.016000000000000014, -0.06475000000000009, 0.03200000000000003, 0.07349999999999923, 0.007749999999999702, 0.04899999999999949, 0.012999999999998124, 0.07324999999999982, 0.033500000000000085, -0.0030000000000001137, 0.002249999999998309, 0.03999999999999915, -0.01875000000000071, -0.009249999999997982, 0.03524999999999956, 0.03449999999999953, 0.057500000000000995, 0.019249999999999545, 0.0035000000000007248, 0.12100000000000044, 0.1075000000000017, 0.05850000000000044, 0.04150000000000098, 0.0382499999999979], zp_timestamp='2026-02-14T21:04:00')
2026-02-14T23:05:50.119 [DEBUG] [Thread-193767] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:05:50.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-14T23:05:50.216 [DEBUG] [Thread-193770] [transport.py] [_log()] starting thread (client mode): 0xa2d1ad70
2026-02-14T23:05:50.216 [DEBUG] [Thread-193770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:05:50.230 [DEBUG] [Thread-193770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:05:50.230 [INFO] [Thread-193770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:05:50.238 [DEBUG] [Thread-193770] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:05:50.238 [DEBUG] [Thread-193770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:05:50.239 [DEBUG] [Thread-193770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:05:50.239 [DEBUG] [Thread-193770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:05:50.239 [DEBUG] [Thread-193770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:05:50.239 [DEBUG] [Thread-193770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:05:50.239 [DEBUG] [Thread-193770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:05:50.239 [DEBUG] [Thread-193770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:05:50.239 [DEBUG] [Thread-193770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:05:50.239 [DEBUG] [Thread-193770] [transport.py] [_log()] client lang: <none>
2026-02-14T23:05:50.239 [DEBUG] [Thread-193770] [transport.py] [_log()] server lang: <none>
2026-02-14T23:05:50.240 [DEBUG] [Thread-193770] [transport.py] [_log()] kex follows: False
2026-02-14T23:05:50.240 [DEBUG] [Thread-193770] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:05:50.240 [DEBUG] [Thread-193770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:05:50.240 [DEBUG] [Thread-193770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:05:50.240 [DEBUG] [Thread-193770] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:05:50.240 [DEBUG] [Thread-193770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:05:50.240 [DEBUG] [Thread-193770] [transport.py] [_log()] Compression: none
2026-02-14T23:05:50.241 [DEBUG] [Thread-193770] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:05:50.299 [DEBUG] [Thread-193770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:05:50.300 [DEBUG] [Thread-193770] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:05:50.300 [DEBUG] [Thread-193770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:05:50.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:05:50.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:05:50.358 [DEBUG] [Thread-193770] [transport.py] [_log()] userauth is OK
2026-02-14T23:05:50.359 [DEBUG] [Thread-193770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:05:50.359 [DEBUG] [Thread-193770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:05:50.359 [DEBUG] [Thread-193770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:05:50.359 [DEBUG] [Thread-193770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:05:50.382 [INFO] [Thread-193770] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:05:50.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-14T23:05:50.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:05:51.173 [DEBUG] [Thread-193770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:05:51.173 [DEBUG] [Thread-193770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:05:51.221 [DEBUG] [Thread-193770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:05:51.221 [DEBUG] [Thread-193770] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:05:51.230 [DEBUG] [Thread-193770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:05:51.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:05:51.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:05:51.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-14T23:05:51.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:05:51.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:05:51.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:05:51.268 [DEBUG] [Thread-193770] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:06:02.398 [DEBUG] [Thread-193772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:06:03.150 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:06:03.151 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:06:03.740 [DEBUG] [Thread-193773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:06:17.456 [DEBUG] [Thread-193774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:06:21.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:06:21.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:06:21.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-14T23:06:23.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 6, 10), 6.47, 64.08, 0.0, 35.16, 9.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:06:23.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:06:10
2026-02-14T23:06:23.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:06:23.736 [DEBUG] [Thread-193775] [transport.py] [_log()] starting thread (client mode): 0xa57d4580
2026-02-14T23:06:23.736 [DEBUG] [Thread-193775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:06:23.757 [DEBUG] [Thread-193775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:06:23.757 [INFO] [Thread-193775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:06:23.760 [DEBUG] [Thread-193775] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:06:23.760 [DEBUG] [Thread-193775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:06:23.760 [DEBUG] [Thread-193775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:06:23.760 [DEBUG] [Thread-193775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:06:23.760 [DEBUG] [Thread-193775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:06:23.760 [DEBUG] [Thread-193775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:06:23.760 [DEBUG] [Thread-193775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:06:23.760 [DEBUG] [Thread-193775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:06:23.760 [DEBUG] [Thread-193775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:06:23.760 [DEBUG] [Thread-193775] [transport.py] [_log()] client lang: <none>
2026-02-14T23:06:23.761 [DEBUG] [Thread-193775] [transport.py] [_log()] server lang: <none>
2026-02-14T23:06:23.761 [DEBUG] [Thread-193775] [transport.py] [_log()] kex follows: False
2026-02-14T23:06:23.761 [DEBUG] [Thread-193775] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:06:23.761 [DEBUG] [Thread-193775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:06:23.761 [DEBUG] [Thread-193775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:06:23.761 [DEBUG] [Thread-193775] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:06:23.761 [DEBUG] [Thread-193775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:06:23.761 [DEBUG] [Thread-193775] [transport.py] [_log()] Compression: none
2026-02-14T23:06:23.761 [DEBUG] [Thread-193775] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:06:23.780 [DEBUG] [Thread-193775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:06:23.780 [DEBUG] [Thread-193775] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:06:23.781 [DEBUG] [Thread-193775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:06:23.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:06:23.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:06:23.782 [DEBUG] [Thread-193775] [transport.py] [_log()] userauth is OK
2026-02-14T23:06:23.783 [DEBUG] [Thread-193775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:06:23.783 [DEBUG] [Thread-193775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:06:23.783 [DEBUG] [Thread-193775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:06:23.783 [DEBUG] [Thread-193775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:06:23.818 [INFO] [Thread-193775] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:06:23.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:06:24.481 [DEBUG] [Thread-193775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:06:24.481 [DEBUG] [Thread-193775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:06:24.481 [DEBUG] [Thread-193775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:06:24.522 [DEBUG] [Thread-193775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:06:24.522 [DEBUG] [Thread-193775] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:06:24.524 [DEBUG] [Thread-193775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:06:24.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:06:24.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:06:24.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:06:24.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:06:24.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:06:24.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:06:24.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:06:24.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:06:24.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:06:24.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.878931 -999.00   +9.00  25.03     68   +3.60 1 1 1 1 1     0    0 5.12 -16.44 ZNESW 25.6 25.0 152.4 36.0 9.4 -24.8 9.2 -23.7 9.0 -22.8 9.3 -24.1
2026-02-14T23:06:24.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:06:24.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:06:24.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.878931
2026-02-14T23:06:24.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:06:24.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:06:24.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:06:24.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:06:24.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:06:24.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:06:10', tmtdew=6.47, humidity=64.08, cloud=0.0, wind=35.16, temperature=9.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:06:10', seeing=4.28, atlas_timestamp='2026-02-14T21:05:39.638', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, 0.005250000000000199, -0.016750000000000043, -0.010500000000000398, 0.011499999999999844, 0.009250000000001535, 0.007500000000000284, 0.0027500000000006963, -0.0065000000000008384, 0.016000000000000014, -0.06475000000000009, 0.03200000000000003, 0.07349999999999923, 0.007749999999999702, 0.04899999999999949, 0.012999999999998124, 0.07324999999999982, 0.033500000000000085, -0.0030000000000001137, 0.002249999999998309, 0.03999999999999915, -0.01875000000000071, -0.009249999999997982, 0.03524999999999956, 0.03449999999999953, 0.057500000000000995, 0.019249999999999545, 0.0035000000000007248, 0.12100000000000044, 0.1075000000000017, 0.05850000000000044, 0.04150000000000098, 0.0382499999999979], zp_timestamp='2026-02-14T21:04:00')
2026-02-14T23:06:24.544 [DEBUG] [Thread-193775] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:06:24.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-14T23:06:24.625 [DEBUG] [Thread-193778] [transport.py] [_log()] starting thread (client mode): 0xa57d51e0
2026-02-14T23:06:24.625 [DEBUG] [Thread-193778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:06:24.640 [DEBUG] [Thread-193778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:06:24.640 [INFO] [Thread-193778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:06:24.649 [DEBUG] [Thread-193778] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:06:24.649 [DEBUG] [Thread-193778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:06:24.649 [DEBUG] [Thread-193778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:06:24.650 [DEBUG] [Thread-193778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:06:24.650 [DEBUG] [Thread-193778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:06:24.650 [DEBUG] [Thread-193778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:06:24.650 [DEBUG] [Thread-193778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:06:24.650 [DEBUG] [Thread-193778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:06:24.650 [DEBUG] [Thread-193778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:06:24.650 [DEBUG] [Thread-193778] [transport.py] [_log()] client lang: <none>
2026-02-14T23:06:24.650 [DEBUG] [Thread-193778] [transport.py] [_log()] server lang: <none>
2026-02-14T23:06:24.650 [DEBUG] [Thread-193778] [transport.py] [_log()] kex follows: False
2026-02-14T23:06:24.650 [DEBUG] [Thread-193778] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:06:24.650 [DEBUG] [Thread-193778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:06:24.650 [DEBUG] [Thread-193778] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:06:24.650 [DEBUG] [Thread-193778] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:06:24.650 [DEBUG] [Thread-193778] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:06:24.650 [DEBUG] [Thread-193778] [transport.py] [_log()] Compression: none
2026-02-14T23:06:24.650 [DEBUG] [Thread-193778] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:06:24.707 [DEBUG] [Thread-193778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:06:24.707 [DEBUG] [Thread-193778] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:06:24.708 [DEBUG] [Thread-193778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:06:24.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:06:24.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:06:24.768 [DEBUG] [Thread-193778] [transport.py] [_log()] userauth is OK
2026-02-14T23:06:24.769 [DEBUG] [Thread-193778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:06:24.769 [DEBUG] [Thread-193778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:06:24.769 [DEBUG] [Thread-193778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:06:24.769 [DEBUG] [Thread-193778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:06:24.792 [INFO] [Thread-193778] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:06:24.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-14T23:06:24.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:06:25.609 [DEBUG] [Thread-193778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:06:25.609 [DEBUG] [Thread-193778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:06:25.658 [DEBUG] [Thread-193778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:06:25.658 [DEBUG] [Thread-193778] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:06:25.667 [DEBUG] [Thread-193778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:06:25.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:06:25.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-14T23:06:25.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:06:25.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:06:25.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:06:25.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:06:25.710 [DEBUG] [Thread-193778] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:06:32.492 [DEBUG] [Thread-193780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:06:47.545 [DEBUG] [Thread-193781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:06:55.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:06:55.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:06:55.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-14T23:06:57.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 6, 45), 6.47, 64.1, 0.0, 34.39, 9.02, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:06:57.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:06:45
2026-02-14T23:06:58.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:06:58.164 [DEBUG] [Thread-193782] [transport.py] [_log()] starting thread (client mode): 0xa2d7a620
2026-02-14T23:06:58.164 [DEBUG] [Thread-193782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:06:58.185 [DEBUG] [Thread-193782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:06:58.186 [INFO] [Thread-193782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:06:58.189 [DEBUG] [Thread-193782] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:06:58.189 [DEBUG] [Thread-193782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:06:58.189 [DEBUG] [Thread-193782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:06:58.189 [DEBUG] [Thread-193782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:06:58.189 [DEBUG] [Thread-193782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:06:58.189 [DEBUG] [Thread-193782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:06:58.189 [DEBUG] [Thread-193782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:06:58.189 [DEBUG] [Thread-193782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:06:58.189 [DEBUG] [Thread-193782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:06:58.189 [DEBUG] [Thread-193782] [transport.py] [_log()] client lang: <none>
2026-02-14T23:06:58.189 [DEBUG] [Thread-193782] [transport.py] [_log()] server lang: <none>
2026-02-14T23:06:58.189 [DEBUG] [Thread-193782] [transport.py] [_log()] kex follows: False
2026-02-14T23:06:58.190 [DEBUG] [Thread-193782] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:06:58.190 [DEBUG] [Thread-193782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:06:58.190 [DEBUG] [Thread-193782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:06:58.190 [DEBUG] [Thread-193782] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:06:58.190 [DEBUG] [Thread-193782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:06:58.190 [DEBUG] [Thread-193782] [transport.py] [_log()] Compression: none
2026-02-14T23:06:58.190 [DEBUG] [Thread-193782] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:06:58.206 [DEBUG] [Thread-193782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:06:58.206 [DEBUG] [Thread-193782] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:06:58.207 [DEBUG] [Thread-193782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:06:58.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:06:58.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:06:58.208 [DEBUG] [Thread-193782] [transport.py] [_log()] userauth is OK
2026-02-14T23:06:58.209 [DEBUG] [Thread-193782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:06:58.209 [DEBUG] [Thread-193782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:06:58.209 [DEBUG] [Thread-193782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:06:58.209 [DEBUG] [Thread-193782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:06:58.231 [INFO] [Thread-193782] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:06:58.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:06:58.893 [DEBUG] [Thread-193782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:06:58.893 [DEBUG] [Thread-193782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:06:58.894 [DEBUG] [Thread-193782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:06:58.934 [DEBUG] [Thread-193782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:06:58.934 [DEBUG] [Thread-193782] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:06:58.938 [DEBUG] [Thread-193782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:06:58.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:06:58.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:06:58.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:06:58.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:06:58.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:06:58.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:06:58.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:06:58.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:06:58.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:06:58.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.879278 -999.00   +8.90  20.45     68   +3.50 1 1 1 1 1     0    0 5.08 -15.81 ZNESW 23.3 20.4 156.4 31.1 9.4 -24.9 9.2 -23.7 9.0 -22.9 9.3 -24.0
2026-02-14T23:06:58.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:06:58.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:06:58.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.879278
2026-02-14T23:06:58.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:06:58.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:06:58.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:06:58.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:06:58.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:06:58.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:06:45', tmtdew=6.47, humidity=64.1, cloud=0.0, wind=34.39, temperature=9.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:06:45', seeing=4.88, atlas_timestamp='2026-02-14T21:06:09.619', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, 0.005250000000000199, -0.016750000000000043, -0.010500000000000398, 0.011499999999999844, 0.009250000000001535, 0.007500000000000284, 0.0027500000000006963, -0.0065000000000008384, 0.016000000000000014, -0.06475000000000009, 0.03200000000000003, 0.07349999999999923, 0.007749999999999702, 0.04899999999999949, 0.012999999999998124, 0.07324999999999982, 0.033500000000000085, -0.0030000000000001137, 0.002249999999998309, 0.03999999999999915, -0.01875000000000071, -0.009249999999997982, 0.03524999999999956, 0.03449999999999953, 0.057500000000000995, 0.019249999999999545, 0.0035000000000007248, 0.12100000000000044, 0.1075000000000017, 0.05850000000000044, 0.04150000000000098, 0.0382499999999979], zp_timestamp='2026-02-14T21:04:00')
2026-02-14T23:06:58.964 [DEBUG] [Thread-193782] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:06:59.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-14T23:06:59.057 [DEBUG] [Thread-193785] [transport.py] [_log()] starting thread (client mode): 0xa2d6c460
2026-02-14T23:06:59.057 [DEBUG] [Thread-193785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:06:59.072 [DEBUG] [Thread-193785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:06:59.072 [INFO] [Thread-193785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:06:59.079 [DEBUG] [Thread-193785] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:06:59.079 [DEBUG] [Thread-193785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:06:59.080 [DEBUG] [Thread-193785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:06:59.080 [DEBUG] [Thread-193785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:06:59.080 [DEBUG] [Thread-193785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:06:59.080 [DEBUG] [Thread-193785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:06:59.080 [DEBUG] [Thread-193785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:06:59.080 [DEBUG] [Thread-193785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:06:59.080 [DEBUG] [Thread-193785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:06:59.080 [DEBUG] [Thread-193785] [transport.py] [_log()] client lang: <none>
2026-02-14T23:06:59.080 [DEBUG] [Thread-193785] [transport.py] [_log()] server lang: <none>
2026-02-14T23:06:59.080 [DEBUG] [Thread-193785] [transport.py] [_log()] kex follows: False
2026-02-14T23:06:59.080 [DEBUG] [Thread-193785] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:06:59.080 [DEBUG] [Thread-193785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:06:59.080 [DEBUG] [Thread-193785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:06:59.080 [DEBUG] [Thread-193785] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:06:59.080 [DEBUG] [Thread-193785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:06:59.080 [DEBUG] [Thread-193785] [transport.py] [_log()] Compression: none
2026-02-14T23:06:59.080 [DEBUG] [Thread-193785] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:06:59.142 [DEBUG] [Thread-193785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:06:59.142 [DEBUG] [Thread-193785] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:06:59.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:06:59.144 [DEBUG] [Thread-193785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:06:59.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:06:59.198 [DEBUG] [Thread-193785] [transport.py] [_log()] userauth is OK
2026-02-14T23:06:59.199 [DEBUG] [Thread-193785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:06:59.199 [DEBUG] [Thread-193785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:06:59.199 [DEBUG] [Thread-193785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:06:59.199 [DEBUG] [Thread-193785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:06:59.218 [INFO] [Thread-193785] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:06:59.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-14T23:06:59.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:07:00.040 [DEBUG] [Thread-193785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:07:00.041 [DEBUG] [Thread-193785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:07:00.088 [DEBUG] [Thread-193785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:07:00.088 [DEBUG] [Thread-193785] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:07:00.102 [DEBUG] [Thread-193785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:07:00.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:07:00.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-14T23:07:00.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:07:00.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:07:00.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:07:00.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:07:00.138 [DEBUG] [Thread-193785] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:07:02.581 [DEBUG] [Thread-193787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:07:03.354 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:07:03.355 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:07:03.815 [DEBUG] [Thread-193788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:07:17.637 [DEBUG] [Thread-193789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:07:30.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:07:30.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:07:30.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-14T23:07:32.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 7, 20), 6.47, 64.08, 0.0, 32.62, 9.02, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:07:32.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:07:20
2026-02-14T23:07:32.674 [DEBUG] [Thread-193790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:07:33.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:07:33.214 [DEBUG] [Thread-193791] [transport.py] [_log()] starting thread (client mode): 0xa5742f80
2026-02-14T23:07:33.214 [DEBUG] [Thread-193791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:07:33.236 [DEBUG] [Thread-193791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:07:33.236 [INFO] [Thread-193791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:07:33.240 [DEBUG] [Thread-193791] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:07:33.240 [DEBUG] [Thread-193791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:07:33.240 [DEBUG] [Thread-193791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:07:33.240 [DEBUG] [Thread-193791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:07:33.240 [DEBUG] [Thread-193791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:07:33.240 [DEBUG] [Thread-193791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:07:33.240 [DEBUG] [Thread-193791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:07:33.240 [DEBUG] [Thread-193791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:07:33.240 [DEBUG] [Thread-193791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:07:33.240 [DEBUG] [Thread-193791] [transport.py] [_log()] client lang: <none>
2026-02-14T23:07:33.240 [DEBUG] [Thread-193791] [transport.py] [_log()] server lang: <none>
2026-02-14T23:07:33.240 [DEBUG] [Thread-193791] [transport.py] [_log()] kex follows: False
2026-02-14T23:07:33.240 [DEBUG] [Thread-193791] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:07:33.240 [DEBUG] [Thread-193791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:07:33.240 [DEBUG] [Thread-193791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:07:33.240 [DEBUG] [Thread-193791] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:07:33.240 [DEBUG] [Thread-193791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:07:33.240 [DEBUG] [Thread-193791] [transport.py] [_log()] Compression: none
2026-02-14T23:07:33.240 [DEBUG] [Thread-193791] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:07:33.256 [DEBUG] [Thread-193791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:07:33.257 [DEBUG] [Thread-193791] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:07:33.257 [DEBUG] [Thread-193791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:07:33.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:07:33.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:07:33.259 [DEBUG] [Thread-193791] [transport.py] [_log()] userauth is OK
2026-02-14T23:07:33.259 [DEBUG] [Thread-193791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:07:33.260 [DEBUG] [Thread-193791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:07:33.260 [DEBUG] [Thread-193791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:07:33.260 [DEBUG] [Thread-193791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:07:33.283 [INFO] [Thread-193791] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:07:33.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:07:33.909 [DEBUG] [Thread-193791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:07:33.910 [DEBUG] [Thread-193791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:07:33.910 [DEBUG] [Thread-193791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:07:33.950 [DEBUG] [Thread-193791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:07:33.950 [DEBUG] [Thread-193791] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:07:33.954 [DEBUG] [Thread-193791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:07:33.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:07:33.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:07:33.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:07:33.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:07:33.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:07:33.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:07:33.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:07:33.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:07:33.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:07:33.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.879625 -999.00   +8.90  26.81     68   +3.50 1 1 1 1 1     0    0 5.12 -17.48 ZNESW 26.2 26.8 166.0 31.1 9.3 -24.7 9.2 -23.8 9.0 -22.8 9.3 -23.8
2026-02-14T23:07:33.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:07:33.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:07:33.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.879625
2026-02-14T23:07:33.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:07:33.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:07:33.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:07:33.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:07:33.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:07:33.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:07:20', tmtdew=6.47, humidity=64.08, cloud=0.0, wind=32.62, temperature=9.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:07:20', seeing=3.54, atlas_timestamp='2026-02-14T21:06:39.600', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, 0.005250000000000199, -0.016750000000000043, -0.010500000000000398, 0.011499999999999844, 0.009250000000001535, 0.007500000000000284, 0.0027500000000006963, -0.0065000000000008384, 0.016000000000000014, -0.06475000000000009, 0.03200000000000003, 0.07349999999999923, 0.007749999999999702, 0.04899999999999949, 0.012999999999998124, 0.07324999999999982, 0.033500000000000085, -0.0030000000000001137, 0.002249999999998309, 0.03999999999999915, -0.01875000000000071, -0.009249999999997982, 0.03524999999999956, 0.03449999999999953, 0.057500000000000995, 0.019249999999999545, 0.0035000000000007248, 0.12100000000000044, 0.1075000000000017, 0.05850000000000044, 0.04150000000000098, 0.0382499999999979], zp_timestamp='2026-02-14T21:04:00')
2026-02-14T23:07:33.981 [DEBUG] [Thread-193791] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:07:34.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T23:07:34.076 [DEBUG] [Thread-193794] [transport.py] [_log()] starting thread (client mode): 0xa2d7a4a0
2026-02-14T23:07:34.076 [DEBUG] [Thread-193794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:07:34.091 [DEBUG] [Thread-193794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:07:34.091 [INFO] [Thread-193794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:07:34.098 [DEBUG] [Thread-193794] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:07:34.099 [DEBUG] [Thread-193794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:07:34.099 [DEBUG] [Thread-193794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:07:34.099 [DEBUG] [Thread-193794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:07:34.099 [DEBUG] [Thread-193794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:07:34.099 [DEBUG] [Thread-193794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:07:34.099 [DEBUG] [Thread-193794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:07:34.099 [DEBUG] [Thread-193794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:07:34.099 [DEBUG] [Thread-193794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:07:34.099 [DEBUG] [Thread-193794] [transport.py] [_log()] client lang: <none>
2026-02-14T23:07:34.099 [DEBUG] [Thread-193794] [transport.py] [_log()] server lang: <none>
2026-02-14T23:07:34.099 [DEBUG] [Thread-193794] [transport.py] [_log()] kex follows: False
2026-02-14T23:07:34.099 [DEBUG] [Thread-193794] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:07:34.099 [DEBUG] [Thread-193794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:07:34.099 [DEBUG] [Thread-193794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:07:34.100 [DEBUG] [Thread-193794] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:07:34.100 [DEBUG] [Thread-193794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:07:34.100 [DEBUG] [Thread-193794] [transport.py] [_log()] Compression: none
2026-02-14T23:07:34.100 [DEBUG] [Thread-193794] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:07:34.158 [DEBUG] [Thread-193794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:07:34.159 [DEBUG] [Thread-193794] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:07:34.160 [DEBUG] [Thread-193794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:07:34.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:07:34.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:07:34.218 [DEBUG] [Thread-193794] [transport.py] [_log()] userauth is OK
2026-02-14T23:07:34.218 [DEBUG] [Thread-193794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:07:34.218 [DEBUG] [Thread-193794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:07:34.218 [DEBUG] [Thread-193794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:07:34.218 [DEBUG] [Thread-193794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:07:34.241 [INFO] [Thread-193794] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:07:34.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-14T23:07:34.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:07:35.041 [DEBUG] [Thread-193794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:07:35.041 [DEBUG] [Thread-193794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:07:35.089 [DEBUG] [Thread-193794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:07:35.090 [DEBUG] [Thread-193794] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:07:35.099 [DEBUG] [Thread-193794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:07:35.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:07:35.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-14T23:07:35.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-14T23:07:35.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:07:35.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:07:35.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:07:35.137 [DEBUG] [Thread-193794] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:07:47.711 [DEBUG] [Thread-193796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:08:02.769 [DEBUG] [Thread-193797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:08:03.555 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:08:03.556 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:08:03.870 [DEBUG] [Thread-193798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:08:05.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:08:05.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:08:05.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-14T23:08:07.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 7, 56), 6.46, 64.13, 0.0, 33.35, 8.97, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:08:07.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:07:56
2026-02-14T23:08:07.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:08:07.622 [DEBUG] [Thread-193799] [transport.py] [_log()] starting thread (client mode): 0xa2d1a260
2026-02-14T23:08:07.622 [DEBUG] [Thread-193799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:08:07.642 [DEBUG] [Thread-193799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:08:07.642 [INFO] [Thread-193799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:08:07.645 [DEBUG] [Thread-193799] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:08:07.646 [DEBUG] [Thread-193799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:08:07.646 [DEBUG] [Thread-193799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:08:07.646 [DEBUG] [Thread-193799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:08:07.646 [DEBUG] [Thread-193799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:08:07.646 [DEBUG] [Thread-193799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:08:07.646 [DEBUG] [Thread-193799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:08:07.646 [DEBUG] [Thread-193799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:08:07.646 [DEBUG] [Thread-193799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:08:07.646 [DEBUG] [Thread-193799] [transport.py] [_log()] client lang: <none>
2026-02-14T23:08:07.646 [DEBUG] [Thread-193799] [transport.py] [_log()] server lang: <none>
2026-02-14T23:08:07.646 [DEBUG] [Thread-193799] [transport.py] [_log()] kex follows: False
2026-02-14T23:08:07.646 [DEBUG] [Thread-193799] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:08:07.646 [DEBUG] [Thread-193799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:08:07.646 [DEBUG] [Thread-193799] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:08:07.646 [DEBUG] [Thread-193799] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:08:07.646 [DEBUG] [Thread-193799] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:08:07.646 [DEBUG] [Thread-193799] [transport.py] [_log()] Compression: none
2026-02-14T23:08:07.646 [DEBUG] [Thread-193799] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:08:07.662 [DEBUG] [Thread-193799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:08:07.663 [DEBUG] [Thread-193799] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:08:07.664 [DEBUG] [Thread-193799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:08:07.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:08:07.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:08:07.666 [DEBUG] [Thread-193799] [transport.py] [_log()] userauth is OK
2026-02-14T23:08:07.667 [DEBUG] [Thread-193799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:08:07.667 [DEBUG] [Thread-193799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:08:07.667 [DEBUG] [Thread-193799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:08:07.667 [DEBUG] [Thread-193799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:08:07.687 [INFO] [Thread-193799] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:08:07.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:08:08.454 [DEBUG] [Thread-193799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:08:08.455 [DEBUG] [Thread-193799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:08:08.455 [DEBUG] [Thread-193799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:08:08.495 [DEBUG] [Thread-193799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:08:08.495 [DEBUG] [Thread-193799] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:08:08.498 [DEBUG] [Thread-193799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:08:08.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:08:08.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:08:08.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:08:08.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:08:08.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:08:08.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:08:08.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:08:08.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:08:08.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:08:08.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.880320 -999.00   +8.90  25.67     69   +3.50 1 1 1 1 1     0    0 5.03 -17.72 ZNESW 26.4 25.7 164.4 35.9 9.3 -24.6 9.2 -23.6 9.0 -22.8 9.3 -23.9
2026-02-14T23:08:08.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:08:08.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:08:08.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.880320
2026-02-14T23:08:08.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:08:08.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:08:08.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:08:08.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:08:08.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:08:08.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:07:56', tmtdew=6.46, humidity=64.13, cloud=0.0, wind=33.35, temperature=8.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:07:57', seeing=4.13, atlas_timestamp='2026-02-14T21:07:39.648', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, 0.005250000000000199, -0.016750000000000043, -0.010500000000000398, 0.011499999999999844, 0.009250000000001535, 0.007500000000000284, 0.0027500000000006963, -0.0065000000000008384, 0.016000000000000014, -0.06475000000000009, 0.03200000000000003, 0.07349999999999923, 0.007749999999999702, 0.04899999999999949, 0.012999999999998124, 0.07324999999999982, 0.033500000000000085, -0.0030000000000001137, 0.002249999999998309, 0.03999999999999915, -0.01875000000000071, -0.009249999999997982, 0.03524999999999956, 0.03449999999999953, 0.057500000000000995, 0.019249999999999545, 0.0035000000000007248, 0.12100000000000044, 0.1075000000000017, 0.05850000000000044, 0.04150000000000098, 0.0382499999999979], zp_timestamp='2026-02-14T21:04:00')
2026-02-14T23:08:08.521 [DEBUG] [Thread-193799] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:08:08.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-14T23:08:08.615 [DEBUG] [Thread-193802] [transport.py] [_log()] starting thread (client mode): 0xa57d4d60
2026-02-14T23:08:08.615 [DEBUG] [Thread-193802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:08:08.629 [DEBUG] [Thread-193802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:08:08.630 [INFO] [Thread-193802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:08:08.637 [DEBUG] [Thread-193802] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:08:08.637 [DEBUG] [Thread-193802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:08:08.638 [DEBUG] [Thread-193802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:08:08.638 [DEBUG] [Thread-193802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:08:08.638 [DEBUG] [Thread-193802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:08:08.638 [DEBUG] [Thread-193802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:08:08.638 [DEBUG] [Thread-193802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:08:08.638 [DEBUG] [Thread-193802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:08:08.638 [DEBUG] [Thread-193802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:08:08.638 [DEBUG] [Thread-193802] [transport.py] [_log()] client lang: <none>
2026-02-14T23:08:08.638 [DEBUG] [Thread-193802] [transport.py] [_log()] server lang: <none>
2026-02-14T23:08:08.638 [DEBUG] [Thread-193802] [transport.py] [_log()] kex follows: False
2026-02-14T23:08:08.638 [DEBUG] [Thread-193802] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:08:08.638 [DEBUG] [Thread-193802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:08:08.638 [DEBUG] [Thread-193802] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:08:08.638 [DEBUG] [Thread-193802] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:08:08.638 [DEBUG] [Thread-193802] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:08:08.638 [DEBUG] [Thread-193802] [transport.py] [_log()] Compression: none
2026-02-14T23:08:08.638 [DEBUG] [Thread-193802] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:08:08.694 [DEBUG] [Thread-193802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:08:08.694 [DEBUG] [Thread-193802] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:08:08.695 [DEBUG] [Thread-193802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:08:08.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:08:08.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:08:08.749 [DEBUG] [Thread-193802] [transport.py] [_log()] userauth is OK
2026-02-14T23:08:08.749 [DEBUG] [Thread-193802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:08:08.749 [DEBUG] [Thread-193802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:08:08.749 [DEBUG] [Thread-193802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:08:08.749 [DEBUG] [Thread-193802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:08:08.765 [INFO] [Thread-193802] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:08:08.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-14T23:08:08.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:08:09.537 [DEBUG] [Thread-193802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:08:09.538 [DEBUG] [Thread-193802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:08:09.585 [DEBUG] [Thread-193802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:08:09.586 [DEBUG] [Thread-193802] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:08:09.595 [DEBUG] [Thread-193802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:08:09.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:08:09.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-14T23:08:09.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:08:09.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:08:09.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:08:09.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:08:09.632 [DEBUG] [Thread-193802] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:08:17.803 [DEBUG] [Thread-193804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:08:32.857 [DEBUG] [Thread-193805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:08:39.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:08:39.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:08:39.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-14T23:08:41.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 8, 32), 6.45, 64.18, 0.0, 33.14, 9.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:08:41.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:08:32
2026-02-14T23:08:41.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:08:42.024 [DEBUG] [Thread-193806] [transport.py] [_log()] starting thread (client mode): 0xa57c06a0
2026-02-14T23:08:42.024 [DEBUG] [Thread-193806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:08:42.042 [DEBUG] [Thread-193806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:08:42.042 [INFO] [Thread-193806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:08:42.045 [DEBUG] [Thread-193806] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:08:42.046 [DEBUG] [Thread-193806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:08:42.046 [DEBUG] [Thread-193806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:08:42.046 [DEBUG] [Thread-193806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:08:42.046 [DEBUG] [Thread-193806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:08:42.046 [DEBUG] [Thread-193806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:08:42.046 [DEBUG] [Thread-193806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:08:42.046 [DEBUG] [Thread-193806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:08:42.046 [DEBUG] [Thread-193806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:08:42.046 [DEBUG] [Thread-193806] [transport.py] [_log()] client lang: <none>
2026-02-14T23:08:42.046 [DEBUG] [Thread-193806] [transport.py] [_log()] server lang: <none>
2026-02-14T23:08:42.046 [DEBUG] [Thread-193806] [transport.py] [_log()] kex follows: False
2026-02-14T23:08:42.046 [DEBUG] [Thread-193806] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:08:42.046 [DEBUG] [Thread-193806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:08:42.046 [DEBUG] [Thread-193806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:08:42.046 [DEBUG] [Thread-193806] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:08:42.046 [DEBUG] [Thread-193806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:08:42.046 [DEBUG] [Thread-193806] [transport.py] [_log()] Compression: none
2026-02-14T23:08:42.046 [DEBUG] [Thread-193806] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:08:42.062 [DEBUG] [Thread-193806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:08:42.063 [DEBUG] [Thread-193806] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:08:42.063 [DEBUG] [Thread-193806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:08:42.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:08:42.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:08:42.065 [DEBUG] [Thread-193806] [transport.py] [_log()] userauth is OK
2026-02-14T23:08:42.065 [DEBUG] [Thread-193806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:08:42.065 [DEBUG] [Thread-193806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:08:42.065 [DEBUG] [Thread-193806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:08:42.066 [DEBUG] [Thread-193806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:08:42.080 [INFO] [Thread-193806] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:08:42.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:08:42.698 [DEBUG] [Thread-193806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:08:42.699 [DEBUG] [Thread-193806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:08:42.699 [DEBUG] [Thread-193806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:08:42.739 [DEBUG] [Thread-193806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:08:42.740 [DEBUG] [Thread-193806] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:08:42.743 [DEBUG] [Thread-193806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:08:42.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:08:42.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:08:42.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:08:42.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:08:42.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:08:42.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:08:42.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:08:42.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:08:42.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:08:42.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.880667 -999.00   +8.90  21.59     68   +3.50 1 1 1 1 1     0    0 4.91 -17.37 ZNESW 26.0 21.6 162.2 35.6 9.3 -24.6 9.2 -23.7 9.0 -22.6 9.3 -23.9
2026-02-14T23:08:42.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:08:42.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:08:42.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.880667
2026-02-14T23:08:42.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:08:42.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:08:42.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:08:42.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:08:42.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:08:42.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:08:32', tmtdew=6.45, humidity=64.18, cloud=0.0, wind=33.14, temperature=9.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:08:32', seeing=4.13, atlas_timestamp='2026-02-14T21:08:09.629', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, 0.005250000000000199, -0.016750000000000043, -0.010500000000000398, 0.011499999999999844, 0.009250000000001535, 0.007500000000000284, 0.0027500000000006963, -0.0065000000000008384, 0.016000000000000014, -0.06475000000000009, 0.03200000000000003, 0.07349999999999923, 0.007749999999999702, 0.04899999999999949, 0.012999999999998124, 0.07324999999999982, 0.033500000000000085, -0.0030000000000001137, 0.002249999999998309, 0.03999999999999915, -0.01875000000000071, -0.009249999999997982, 0.03524999999999956, 0.03449999999999953, 0.057500000000000995, 0.019249999999999545, 0.0035000000000007248, 0.12100000000000044, 0.1075000000000017, 0.05850000000000044, 0.04150000000000098, 0.0382499999999979], zp_timestamp='2026-02-14T21:07:00')
2026-02-14T23:08:42.767 [DEBUG] [Thread-193806] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:08:42.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-14T23:08:42.864 [DEBUG] [Thread-193809] [transport.py] [_log()] starting thread (client mode): 0xa2d1add0
2026-02-14T23:08:42.864 [DEBUG] [Thread-193809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:08:42.879 [DEBUG] [Thread-193809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:08:42.880 [INFO] [Thread-193809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:08:42.889 [DEBUG] [Thread-193809] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:08:42.889 [DEBUG] [Thread-193809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:08:42.889 [DEBUG] [Thread-193809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:08:42.889 [DEBUG] [Thread-193809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:08:42.889 [DEBUG] [Thread-193809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:08:42.889 [DEBUG] [Thread-193809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:08:42.889 [DEBUG] [Thread-193809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:08:42.889 [DEBUG] [Thread-193809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:08:42.889 [DEBUG] [Thread-193809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:08:42.889 [DEBUG] [Thread-193809] [transport.py] [_log()] client lang: <none>
2026-02-14T23:08:42.889 [DEBUG] [Thread-193809] [transport.py] [_log()] server lang: <none>
2026-02-14T23:08:42.889 [DEBUG] [Thread-193809] [transport.py] [_log()] kex follows: False
2026-02-14T23:08:42.889 [DEBUG] [Thread-193809] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:08:42.889 [DEBUG] [Thread-193809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:08:42.889 [DEBUG] [Thread-193809] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:08:42.889 [DEBUG] [Thread-193809] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:08:42.889 [DEBUG] [Thread-193809] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:08:42.889 [DEBUG] [Thread-193809] [transport.py] [_log()] Compression: none
2026-02-14T23:08:42.889 [DEBUG] [Thread-193809] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:08:42.951 [DEBUG] [Thread-193809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:08:42.951 [DEBUG] [Thread-193809] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:08:42.952 [DEBUG] [Thread-193809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:08:42.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:08:42.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:08:43.010 [DEBUG] [Thread-193809] [transport.py] [_log()] userauth is OK
2026-02-14T23:08:43.010 [DEBUG] [Thread-193809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:08:43.010 [DEBUG] [Thread-193809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:08:43.010 [DEBUG] [Thread-193809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:08:43.010 [DEBUG] [Thread-193809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:08:43.034 [INFO] [Thread-193809] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:08:43.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-14T23:08:43.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:08:43.815 [DEBUG] [Thread-193809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:08:43.815 [DEBUG] [Thread-193809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:08:43.863 [DEBUG] [Thread-193809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:08:43.863 [DEBUG] [Thread-193809] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:08:43.872 [DEBUG] [Thread-193809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:08:43.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:08:43.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-14T23:08:43.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:08:43.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:08:43.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:08:43.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:08:43.907 [DEBUG] [Thread-193809] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:08:47.896 [DEBUG] [Thread-193811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:09:02.948 [DEBUG] [Thread-193812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:09:03.760 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:09:03.761 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:09:03.938 [DEBUG] [Thread-193813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:09:13.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:09:13.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:09:13.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-14T23:09:15.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 9, 7), 6.45, 64.18, 0.0, 35.22, 8.99, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:09:15.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:09:07
2026-02-14T23:09:16.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:09:16.252 [DEBUG] [Thread-193814] [transport.py] [_log()] starting thread (client mode): 0xa57c1690
2026-02-14T23:09:16.252 [DEBUG] [Thread-193814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:09:16.270 [DEBUG] [Thread-193814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:09:16.270 [INFO] [Thread-193814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:09:16.272 [DEBUG] [Thread-193814] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:09:16.272 [DEBUG] [Thread-193814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:09:16.272 [DEBUG] [Thread-193814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:09:16.272 [DEBUG] [Thread-193814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:09:16.272 [DEBUG] [Thread-193814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:09:16.272 [DEBUG] [Thread-193814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:09:16.272 [DEBUG] [Thread-193814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:09:16.272 [DEBUG] [Thread-193814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:09:16.272 [DEBUG] [Thread-193814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:09:16.272 [DEBUG] [Thread-193814] [transport.py] [_log()] client lang: <none>
2026-02-14T23:09:16.272 [DEBUG] [Thread-193814] [transport.py] [_log()] server lang: <none>
2026-02-14T23:09:16.272 [DEBUG] [Thread-193814] [transport.py] [_log()] kex follows: False
2026-02-14T23:09:16.272 [DEBUG] [Thread-193814] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:09:16.272 [DEBUG] [Thread-193814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:09:16.272 [DEBUG] [Thread-193814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:09:16.272 [DEBUG] [Thread-193814] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:09:16.272 [DEBUG] [Thread-193814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:09:16.272 [DEBUG] [Thread-193814] [transport.py] [_log()] Compression: none
2026-02-14T23:09:16.272 [DEBUG] [Thread-193814] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:09:16.284 [DEBUG] [Thread-193814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:09:16.284 [DEBUG] [Thread-193814] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:09:16.285 [DEBUG] [Thread-193814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:09:16.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:09:16.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:09:16.286 [DEBUG] [Thread-193814] [transport.py] [_log()] userauth is OK
2026-02-14T23:09:16.287 [DEBUG] [Thread-193814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:09:16.287 [DEBUG] [Thread-193814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:09:16.287 [DEBUG] [Thread-193814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:09:16.287 [DEBUG] [Thread-193814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:09:16.311 [INFO] [Thread-193814] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:09:16.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:09:16.953 [DEBUG] [Thread-193814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:09:16.953 [DEBUG] [Thread-193814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:09:16.953 [DEBUG] [Thread-193814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:09:16.994 [DEBUG] [Thread-193814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:09:16.995 [DEBUG] [Thread-193814] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:09:16.998 [DEBUG] [Thread-193814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:09:17.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:09:17.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:09:17.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:09:17.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:09:17.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:09:17.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:09:17.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:09:17.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:09:17.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:09:17.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.881014 -999.00   +8.90  23.60     68   +3.50 1 1 1 1 1     0    0 5.04 -16.74 ZNESW 21.7 23.6 155.8 33.5 9.3 -24.6 9.2 -23.7 9.0 -22.8 9.3 -24.0
2026-02-14T23:09:17.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:09:17.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:09:17.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.881014
2026-02-14T23:09:17.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:09:17.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:09:17.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:09:17.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:09:17.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:09:17.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:09:07', tmtdew=6.45, humidity=64.18, cloud=0.0, wind=35.22, temperature=8.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:09:07', seeing=3.77, atlas_timestamp='2026-02-14T21:08:39.610', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, 0.005250000000000199, -0.016750000000000043, -0.010500000000000398, 0.011499999999999844, 0.009250000000001535, 0.007500000000000284, 0.0027500000000006963, -0.0065000000000008384, 0.016000000000000014, -0.06475000000000009, 0.03200000000000003, 0.07349999999999923, 0.007749999999999702, 0.04899999999999949, 0.012999999999998124, 0.07324999999999982, 0.033500000000000085, -0.0030000000000001137, 0.002249999999998309, 0.03999999999999915, -0.01875000000000071, -0.009249999999997982, 0.03524999999999956, 0.03449999999999953, 0.057500000000000995, 0.019249999999999545, 0.0035000000000007248, 0.12100000000000044, 0.1075000000000017, 0.05850000000000044, 0.04150000000000098, 0.0382499999999979], zp_timestamp='2026-02-14T21:07:00')
2026-02-14T23:09:17.026 [DEBUG] [Thread-193814] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:09:17.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-14T23:09:17.123 [DEBUG] [Thread-193817] [transport.py] [_log()] starting thread (client mode): 0xa57c3fa0
2026-02-14T23:09:17.123 [DEBUG] [Thread-193817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:09:17.139 [DEBUG] [Thread-193817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:09:17.139 [INFO] [Thread-193817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:09:17.147 [DEBUG] [Thread-193817] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:09:17.147 [DEBUG] [Thread-193817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:09:17.147 [DEBUG] [Thread-193817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:09:17.147 [DEBUG] [Thread-193817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:09:17.148 [DEBUG] [Thread-193817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:09:17.148 [DEBUG] [Thread-193817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:09:17.148 [DEBUG] [Thread-193817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:09:17.148 [DEBUG] [Thread-193817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:09:17.148 [DEBUG] [Thread-193817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:09:17.148 [DEBUG] [Thread-193817] [transport.py] [_log()] client lang: <none>
2026-02-14T23:09:17.148 [DEBUG] [Thread-193817] [transport.py] [_log()] server lang: <none>
2026-02-14T23:09:17.148 [DEBUG] [Thread-193817] [transport.py] [_log()] kex follows: False
2026-02-14T23:09:17.148 [DEBUG] [Thread-193817] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:09:17.148 [DEBUG] [Thread-193817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:09:17.148 [DEBUG] [Thread-193817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:09:17.148 [DEBUG] [Thread-193817] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:09:17.148 [DEBUG] [Thread-193817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:09:17.148 [DEBUG] [Thread-193817] [transport.py] [_log()] Compression: none
2026-02-14T23:09:17.148 [DEBUG] [Thread-193817] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:09:17.206 [DEBUG] [Thread-193817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:09:17.207 [DEBUG] [Thread-193817] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:09:17.208 [DEBUG] [Thread-193817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:09:17.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:09:17.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:09:17.263 [DEBUG] [Thread-193817] [transport.py] [_log()] userauth is OK
2026-02-14T23:09:17.263 [DEBUG] [Thread-193817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:09:17.264 [DEBUG] [Thread-193817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:09:17.264 [DEBUG] [Thread-193817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:09:17.264 [DEBUG] [Thread-193817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:09:17.283 [INFO] [Thread-193817] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:09:17.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-14T23:09:17.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:09:17.984 [DEBUG] [Thread-193819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:09:18.082 [DEBUG] [Thread-193817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:09:18.082 [DEBUG] [Thread-193817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:09:18.130 [DEBUG] [Thread-193817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:09:18.130 [DEBUG] [Thread-193817] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:09:18.140 [DEBUG] [Thread-193817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:09:18.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:09:18.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-14T23:09:18.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-14T23:09:18.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:09:18.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:09:18.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:09:18.178 [DEBUG] [Thread-193817] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:09:33.035 [DEBUG] [Thread-193820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:09:48.074 [DEBUG] [Thread-193821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:09:48.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:09:48.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:09:48.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-14T23:09:50.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 9, 7), 6.45, 64.18, 0.0, 35.22, 8.99, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:09:50.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:09:07
2026-02-14T23:09:50.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:09:50.623 [DEBUG] [Thread-193822] [transport.py] [_log()] starting thread (client mode): 0xa57c1630
2026-02-14T23:09:50.623 [DEBUG] [Thread-193822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:09:50.646 [DEBUG] [Thread-193822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:09:50.646 [INFO] [Thread-193822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:09:50.649 [DEBUG] [Thread-193822] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:09:50.649 [DEBUG] [Thread-193822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:09:50.649 [DEBUG] [Thread-193822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:09:50.649 [DEBUG] [Thread-193822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:09:50.649 [DEBUG] [Thread-193822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:09:50.649 [DEBUG] [Thread-193822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:09:50.649 [DEBUG] [Thread-193822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:09:50.649 [DEBUG] [Thread-193822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:09:50.649 [DEBUG] [Thread-193822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:09:50.649 [DEBUG] [Thread-193822] [transport.py] [_log()] client lang: <none>
2026-02-14T23:09:50.649 [DEBUG] [Thread-193822] [transport.py] [_log()] server lang: <none>
2026-02-14T23:09:50.649 [DEBUG] [Thread-193822] [transport.py] [_log()] kex follows: False
2026-02-14T23:09:50.649 [DEBUG] [Thread-193822] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:09:50.649 [DEBUG] [Thread-193822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:09:50.649 [DEBUG] [Thread-193822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:09:50.649 [DEBUG] [Thread-193822] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:09:50.650 [DEBUG] [Thread-193822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:09:50.650 [DEBUG] [Thread-193822] [transport.py] [_log()] Compression: none
2026-02-14T23:09:50.650 [DEBUG] [Thread-193822] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:09:50.663 [DEBUG] [Thread-193822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:09:50.664 [DEBUG] [Thread-193822] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:09:50.664 [DEBUG] [Thread-193822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:09:50.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:09:50.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:09:50.666 [DEBUG] [Thread-193822] [transport.py] [_log()] userauth is OK
2026-02-14T23:09:50.666 [DEBUG] [Thread-193822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:09:50.666 [DEBUG] [Thread-193822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:09:50.666 [DEBUG] [Thread-193822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:09:50.667 [DEBUG] [Thread-193822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:09:50.685 [INFO] [Thread-193822] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:09:50.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:09:51.356 [DEBUG] [Thread-193822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:09:51.356 [DEBUG] [Thread-193822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:09:51.356 [DEBUG] [Thread-193822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:09:51.397 [DEBUG] [Thread-193822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:09:51.397 [DEBUG] [Thread-193822] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:09:51.400 [DEBUG] [Thread-193822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:09:51.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:09:51.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:09:51.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:09:51.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:09:51.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:09:51.425 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:09:51.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:09:51.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:09:51.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:09:51.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.881361 -999.00   +8.90  28.84     68   +3.50 1 1 1 1 1     0    0 5.16 -15.62 ZNESW 23.9 28.8 163.1 37.5 9.3 -24.6 9.2 -23.8 9.0 -22.7 9.3 -23.7
2026-02-14T23:09:51.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:09:51.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:09:51.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.881361
2026-02-14T23:09:51.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:09:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:09:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:09:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:09:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:09:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:09:07', tmtdew=6.45, humidity=64.18, cloud=0.0, wind=35.22, temperature=8.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:09:43', seeing=3.72, atlas_timestamp='2026-02-14T21:09:09.590', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, 0.005250000000000199, -0.016750000000000043, -0.010500000000000398, 0.011499999999999844, 0.009250000000001535, 0.007500000000000284, 0.0027500000000006963, -0.0065000000000008384, 0.016000000000000014, -0.06475000000000009, 0.03200000000000003, 0.07349999999999923, 0.007749999999999702, 0.04899999999999949, 0.012999999999998124, 0.07324999999999982, 0.033500000000000085, -0.0030000000000001137, 0.002249999999998309, 0.03999999999999915, -0.01875000000000071, -0.009249999999997982, 0.03524999999999956, 0.03449999999999953, 0.057500000000000995, 0.019249999999999545, 0.0035000000000007248, 0.12100000000000044, 0.1075000000000017, 0.05850000000000044, 0.04150000000000098, 0.0382499999999979], zp_timestamp='2026-02-14T21:07:00')
2026-02-14T23:09:51.427 [DEBUG] [Thread-193822] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:09:51.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-14T23:10:03.107 [DEBUG] [Thread-193825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:10:03.959 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:10:03.960 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:10:03.998 [DEBUG] [Thread-193826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:10:18.151 [DEBUG] [Thread-193827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:10:33.184 [DEBUG] [Thread-193828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:10:48.220 [DEBUG] [Thread-193829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:11:03.255 [DEBUG] [Thread-193830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:11:04.066 [DEBUG] [Thread-193831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:11:04.165 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:11:04.166 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:11:18.290 [DEBUG] [Thread-193832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:11:33.328 [DEBUG] [Thread-193833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:11:48.364 [DEBUG] [Thread-193834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:12:03.401 [DEBUG] [Thread-193835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:12:04.135 [DEBUG] [Thread-193836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:12:04.371 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:12:04.372 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:12:04.929 [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-14T23:12:18.440 [DEBUG] [Thread-193837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:12:33.477 [DEBUG] [Thread-193838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:12:34.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:12:34.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:12:34.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-14T23:12:36.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 12, 4), 6.42, 64.28, 0.0, 32.91, 8.97, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:12:36.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:12:04
2026-02-14T23:12:37.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:12:37.408 [DEBUG] [Thread-193839] [transport.py] [_log()] starting thread (client mode): 0xa2d19210
2026-02-14T23:12:37.408 [DEBUG] [Thread-193839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:12:37.427 [DEBUG] [Thread-193839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:12:37.427 [INFO] [Thread-193839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:12:37.430 [DEBUG] [Thread-193839] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:12:37.430 [DEBUG] [Thread-193839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:12:37.431 [DEBUG] [Thread-193839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:12:37.431 [DEBUG] [Thread-193839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:12:37.431 [DEBUG] [Thread-193839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:12:37.431 [DEBUG] [Thread-193839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:12:37.431 [DEBUG] [Thread-193839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:12:37.431 [DEBUG] [Thread-193839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:12:37.431 [DEBUG] [Thread-193839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:12:37.431 [DEBUG] [Thread-193839] [transport.py] [_log()] client lang: <none>
2026-02-14T23:12:37.431 [DEBUG] [Thread-193839] [transport.py] [_log()] server lang: <none>
2026-02-14T23:12:37.431 [DEBUG] [Thread-193839] [transport.py] [_log()] kex follows: False
2026-02-14T23:12:37.431 [DEBUG] [Thread-193839] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:12:37.431 [DEBUG] [Thread-193839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:12:37.431 [DEBUG] [Thread-193839] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:12:37.432 [DEBUG] [Thread-193839] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:12:37.432 [DEBUG] [Thread-193839] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:12:37.432 [DEBUG] [Thread-193839] [transport.py] [_log()] Compression: none
2026-02-14T23:12:37.432 [DEBUG] [Thread-193839] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:12:37.449 [DEBUG] [Thread-193839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:12:37.450 [DEBUG] [Thread-193839] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:12:37.450 [DEBUG] [Thread-193839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:12:37.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:12:37.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:12:37.492 [DEBUG] [Thread-193839] [transport.py] [_log()] userauth is OK
2026-02-14T23:12:37.493 [DEBUG] [Thread-193839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:12:37.493 [DEBUG] [Thread-193839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:12:37.493 [DEBUG] [Thread-193839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:12:37.493 [DEBUG] [Thread-193839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:12:37.513 [INFO] [Thread-193839] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:12:37.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:12:38.142 [DEBUG] [Thread-193839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:12:38.143 [DEBUG] [Thread-193839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:12:38.143 [DEBUG] [Thread-193839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:12:38.183 [DEBUG] [Thread-193839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:12:38.184 [DEBUG] [Thread-193839] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:12:38.187 [DEBUG] [Thread-193839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:12:38.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:12:38.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:12:38.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:12:38.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:12:38.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:12:38.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:12:38.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:12:38.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:12:38.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:12:38.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.883444 -999.00   +8.90  31.54     69   +3.60 1 1 2 1 1     0    0 5.10 -13.58 ZNESW 26.3 31.5 166.4 36.4 9.3 -24.5 9.2 -23.4 9.0 -22.5 9.3 -23.7
2026-02-14T23:12:38.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:12:38.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:12:38.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.883444
2026-02-14T23:12:38.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:12:38.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:12:38.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:12:38.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:12:38.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:12:38.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:12:04', tmtdew=6.42, humidity=64.28, cloud=0.0, wind=32.91, temperature=8.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:12:04', seeing=3.28, atlas_timestamp='2026-02-14T21:12:09.562', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, 0.01025000000000098, 0.0032500000000013074, 0.006999999999997897, 0.024499999999999744, 0.04225000000000101, 0.007500000000000284, 0.03675000000000139, 0.02499999999999858, 0.021000000000000796, -0.02775000000000105, 0.031000000000000583, 0.07849999999999824, 0.02224999999999966, 0.03500000000000014, 0.02999999999999936, 0.08724999999999916, 0.0754999999999999, 0.017999999999998906, 0.01624999999999943, 0.06599999999999895, 0.025749999999998607, -0.0022500000000000853, 0.03074999999999939, 0.06099999999999994, 0.05550000000000033, 0.03125, -0.0015000000000000568, 0.11700000000000088, 0.14500000000000135, 0.06850000000000023, 0.0705000000000009, 0.062249999999998806], zp_timestamp='2026-02-14T21:10:00')
2026-02-14T23:12:38.216 [DEBUG] [Thread-193839] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:12:38.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T23:12:38.312 [DEBUG] [Thread-193842] [transport.py] [_log()] starting thread (client mode): 0xa2d1ad70
2026-02-14T23:12:38.312 [DEBUG] [Thread-193842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:12:38.326 [DEBUG] [Thread-193842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:12:38.326 [INFO] [Thread-193842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:12:38.334 [DEBUG] [Thread-193842] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:12:38.334 [DEBUG] [Thread-193842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:12:38.334 [DEBUG] [Thread-193842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:12:38.335 [DEBUG] [Thread-193842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:12:38.335 [DEBUG] [Thread-193842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:12:38.335 [DEBUG] [Thread-193842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:12:38.335 [DEBUG] [Thread-193842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:12:38.335 [DEBUG] [Thread-193842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:12:38.335 [DEBUG] [Thread-193842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:12:38.335 [DEBUG] [Thread-193842] [transport.py] [_log()] client lang: <none>
2026-02-14T23:12:38.335 [DEBUG] [Thread-193842] [transport.py] [_log()] server lang: <none>
2026-02-14T23:12:38.336 [DEBUG] [Thread-193842] [transport.py] [_log()] kex follows: False
2026-02-14T23:12:38.336 [DEBUG] [Thread-193842] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:12:38.336 [DEBUG] [Thread-193842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:12:38.336 [DEBUG] [Thread-193842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:12:38.336 [DEBUG] [Thread-193842] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:12:38.336 [DEBUG] [Thread-193842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:12:38.336 [DEBUG] [Thread-193842] [transport.py] [_log()] Compression: none
2026-02-14T23:12:38.336 [DEBUG] [Thread-193842] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:12:38.393 [DEBUG] [Thread-193842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:12:38.393 [DEBUG] [Thread-193842] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:12:38.394 [DEBUG] [Thread-193842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:12:38.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:12:38.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:12:38.449 [DEBUG] [Thread-193842] [transport.py] [_log()] userauth is OK
2026-02-14T23:12:38.449 [DEBUG] [Thread-193842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:12:38.449 [DEBUG] [Thread-193842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:12:38.449 [DEBUG] [Thread-193842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:12:38.450 [DEBUG] [Thread-193842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:12:38.469 [INFO] [Thread-193842] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:12:38.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-14T23:12:38.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:12:39.287 [DEBUG] [Thread-193842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:12:39.287 [DEBUG] [Thread-193842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:12:39.335 [DEBUG] [Thread-193842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:12:39.336 [DEBUG] [Thread-193842] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:12:39.344 [DEBUG] [Thread-193842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:12:39.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:12:39.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-14T23:12:39.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-14T23:12:39.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:12:39.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:12:39.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:12:39.380 [DEBUG] [Thread-193842] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:12:48.512 [DEBUG] [Thread-193844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:13:03.568 [DEBUG] [Thread-193845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:13:04.196 [DEBUG] [Thread-193846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:13:04.574 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:13:04.575 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:13:09.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:13:09.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:13:09.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-14T23:13:11.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 12, 39), 6.55, 63.52, 0.0, 37.65, 9.25, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:13:11.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:12:39
2026-02-14T23:13:11.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:13:11.849 [DEBUG] [Thread-193847] [transport.py] [_log()] starting thread (client mode): 0xa57c0880
2026-02-14T23:13:11.850 [DEBUG] [Thread-193847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:13:11.872 [DEBUG] [Thread-193847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:13:11.872 [INFO] [Thread-193847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:13:11.875 [DEBUG] [Thread-193847] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:13:11.875 [DEBUG] [Thread-193847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:13:11.876 [DEBUG] [Thread-193847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:13:11.876 [DEBUG] [Thread-193847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:13:11.876 [DEBUG] [Thread-193847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:13:11.876 [DEBUG] [Thread-193847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:13:11.876 [DEBUG] [Thread-193847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:13:11.876 [DEBUG] [Thread-193847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:13:11.876 [DEBUG] [Thread-193847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:13:11.876 [DEBUG] [Thread-193847] [transport.py] [_log()] client lang: <none>
2026-02-14T23:13:11.876 [DEBUG] [Thread-193847] [transport.py] [_log()] server lang: <none>
2026-02-14T23:13:11.876 [DEBUG] [Thread-193847] [transport.py] [_log()] kex follows: False
2026-02-14T23:13:11.876 [DEBUG] [Thread-193847] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:13:11.876 [DEBUG] [Thread-193847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:13:11.876 [DEBUG] [Thread-193847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:13:11.876 [DEBUG] [Thread-193847] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:13:11.876 [DEBUG] [Thread-193847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:13:11.876 [DEBUG] [Thread-193847] [transport.py] [_log()] Compression: none
2026-02-14T23:13:11.876 [DEBUG] [Thread-193847] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:13:11.894 [DEBUG] [Thread-193847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:13:11.894 [DEBUG] [Thread-193847] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:13:11.895 [DEBUG] [Thread-193847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:13:11.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:13:11.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:13:11.897 [DEBUG] [Thread-193847] [transport.py] [_log()] userauth is OK
2026-02-14T23:13:11.897 [DEBUG] [Thread-193847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:13:11.897 [DEBUG] [Thread-193847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:13:11.897 [DEBUG] [Thread-193847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:13:11.897 [DEBUG] [Thread-193847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:13:11.921 [INFO] [Thread-193847] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:13:11.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:13:12.576 [DEBUG] [Thread-193847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:13:12.577 [DEBUG] [Thread-193847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:13:12.577 [DEBUG] [Thread-193847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:13:12.617 [DEBUG] [Thread-193847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:13:12.618 [DEBUG] [Thread-193847] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:13:12.621 [DEBUG] [Thread-193847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:13:12.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:13:12.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:13:12.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:13:12.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:13:12.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:13:12.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:13:12.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:13:12.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:13:12.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:13:12.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.883792 -999.00   +8.90  24.27     69   +3.50 1 1 1 1 1     0    0 5.09 -13.04 ZNESW 22.4 24.3 156.4 31.2 9.3 -24.5 9.2 -23.4 9.0 -22.6 9.3 -23.7
2026-02-14T23:13:12.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:13:12.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:13:12.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.883792
2026-02-14T23:13:12.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:13:12.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:13:12.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:13:12.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:13:12.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:13:12.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:12:39', tmtdew=6.55, humidity=63.52, cloud=0.0, wind=37.65, temperature=9.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:12:39', seeing=3.34, atlas_timestamp='2026-02-14T21:12:39.629', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, 0.01025000000000098, 0.0032500000000013074, 0.006999999999997897, 0.024499999999999744, 0.04225000000000101, 0.007500000000000284, 0.03675000000000139, 0.02499999999999858, 0.021000000000000796, -0.02775000000000105, 0.031000000000000583, 0.07849999999999824, 0.02224999999999966, 0.03500000000000014, 0.02999999999999936, 0.08724999999999916, 0.0754999999999999, 0.017999999999998906, 0.01624999999999943, 0.06599999999999895, 0.025749999999998607, -0.0022500000000000853, 0.03074999999999939, 0.06099999999999994, 0.05550000000000033, 0.03125, -0.0015000000000000568, 0.11700000000000088, 0.14500000000000135, 0.06850000000000023, 0.0705000000000009, 0.062249999999998806], zp_timestamp='2026-02-14T21:10:00')
2026-02-14T23:13:12.647 [DEBUG] [Thread-193847] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:13:12.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-14T23:13:12.745 [DEBUG] [Thread-193850] [transport.py] [_log()] starting thread (client mode): 0xa2d7b340
2026-02-14T23:13:12.746 [DEBUG] [Thread-193850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:13:12.762 [DEBUG] [Thread-193850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:13:12.762 [INFO] [Thread-193850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:13:12.772 [DEBUG] [Thread-193850] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:13:12.772 [DEBUG] [Thread-193850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:13:12.772 [DEBUG] [Thread-193850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:13:12.772 [DEBUG] [Thread-193850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:13:12.772 [DEBUG] [Thread-193850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:13:12.773 [DEBUG] [Thread-193850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:13:12.773 [DEBUG] [Thread-193850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:13:12.773 [DEBUG] [Thread-193850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:13:12.773 [DEBUG] [Thread-193850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:13:12.773 [DEBUG] [Thread-193850] [transport.py] [_log()] client lang: <none>
2026-02-14T23:13:12.773 [DEBUG] [Thread-193850] [transport.py] [_log()] server lang: <none>
2026-02-14T23:13:12.773 [DEBUG] [Thread-193850] [transport.py] [_log()] kex follows: False
2026-02-14T23:13:12.773 [DEBUG] [Thread-193850] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:13:12.773 [DEBUG] [Thread-193850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:13:12.774 [DEBUG] [Thread-193850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:13:12.774 [DEBUG] [Thread-193850] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:13:12.774 [DEBUG] [Thread-193850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:13:12.774 [DEBUG] [Thread-193850] [transport.py] [_log()] Compression: none
2026-02-14T23:13:12.774 [DEBUG] [Thread-193850] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:13:12.828 [DEBUG] [Thread-193850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:13:12.828 [DEBUG] [Thread-193850] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:13:12.829 [DEBUG] [Thread-193850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:13:12.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:13:12.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:13:12.885 [DEBUG] [Thread-193850] [transport.py] [_log()] userauth is OK
2026-02-14T23:13:12.885 [DEBUG] [Thread-193850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:13:12.885 [DEBUG] [Thread-193850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:13:12.885 [DEBUG] [Thread-193850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:13:12.885 [DEBUG] [Thread-193850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:13:12.902 [INFO] [Thread-193850] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:13:12.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-14T23:13:12.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:13:13.676 [DEBUG] [Thread-193850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:13:13.677 [DEBUG] [Thread-193850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:13:13.724 [DEBUG] [Thread-193850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:13:13.725 [DEBUG] [Thread-193850] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:13:13.734 [DEBUG] [Thread-193850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:13:13.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:13:13.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-14T23:13:13.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:13:13.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:13:13.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:13:13.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:13:13.771 [DEBUG] [Thread-193850] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:13:18.607 [DEBUG] [Thread-193852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:13:33.659 [DEBUG] [Thread-193853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:13:43.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:13:43.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:13:43.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:13:45.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 13, 14), 6.42, 63.78, 0.0, 26.93, 8.99, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:13:45.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:13:14
2026-02-14T23:13:46.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:13:46.417 [DEBUG] [Thread-193854] [transport.py] [_log()] starting thread (client mode): 0xa57d7310
2026-02-14T23:13:46.417 [DEBUG] [Thread-193854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:13:46.435 [DEBUG] [Thread-193854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:13:46.435 [INFO] [Thread-193854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:13:46.437 [DEBUG] [Thread-193854] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:13:46.437 [DEBUG] [Thread-193854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:13:46.437 [DEBUG] [Thread-193854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:13:46.437 [DEBUG] [Thread-193854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:13:46.438 [DEBUG] [Thread-193854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:13:46.438 [DEBUG] [Thread-193854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:13:46.438 [DEBUG] [Thread-193854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:13:46.438 [DEBUG] [Thread-193854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:13:46.438 [DEBUG] [Thread-193854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:13:46.438 [DEBUG] [Thread-193854] [transport.py] [_log()] client lang: <none>
2026-02-14T23:13:46.438 [DEBUG] [Thread-193854] [transport.py] [_log()] server lang: <none>
2026-02-14T23:13:46.438 [DEBUG] [Thread-193854] [transport.py] [_log()] kex follows: False
2026-02-14T23:13:46.438 [DEBUG] [Thread-193854] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:13:46.438 [DEBUG] [Thread-193854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:13:46.438 [DEBUG] [Thread-193854] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:13:46.438 [DEBUG] [Thread-193854] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:13:46.438 [DEBUG] [Thread-193854] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:13:46.438 [DEBUG] [Thread-193854] [transport.py] [_log()] Compression: none
2026-02-14T23:13:46.438 [DEBUG] [Thread-193854] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:13:46.449 [DEBUG] [Thread-193854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:13:46.450 [DEBUG] [Thread-193854] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:13:46.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:13:46.451 [DEBUG] [Thread-193854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:13:46.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:13:46.453 [DEBUG] [Thread-193854] [transport.py] [_log()] userauth is OK
2026-02-14T23:13:46.453 [DEBUG] [Thread-193854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:13:46.453 [DEBUG] [Thread-193854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:13:46.453 [DEBUG] [Thread-193854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:13:46.453 [DEBUG] [Thread-193854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:13:46.474 [INFO] [Thread-193854] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:13:46.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:13:47.096 [DEBUG] [Thread-193854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:13:47.096 [DEBUG] [Thread-193854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:13:47.096 [DEBUG] [Thread-193854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:13:47.137 [DEBUG] [Thread-193854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:13:47.138 [DEBUG] [Thread-193854] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:13:47.141 [DEBUG] [Thread-193854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:13:47.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:13:47.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:13:47.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:13:47.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:13:47.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:13:47.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:13:47.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:13:47.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:13:47.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:13:47.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.884139 -999.00   +8.90  24.29     69   +3.50 1 1 1 1 1     0    0 5.04 -12.09 ZNESW 22.2 24.3 163.0 34.0 9.3 -24.4 9.2 -23.5 9.0 -22.5 9.3 -23.7
2026-02-14T23:13:47.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:13:47.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:13:47.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.884139
2026-02-14T23:13:47.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:13:47.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:13:47.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:13:47.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:13:47.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:13:47.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:13:14', tmtdew=6.42, humidity=63.78, cloud=0.0, wind=26.93, temperature=8.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:13:14', seeing=3.68, atlas_timestamp='2026-02-14T21:13:09.610', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, 0.01025000000000098, 0.0032500000000013074, 0.006999999999997897, 0.024499999999999744, 0.04225000000000101, 0.007500000000000284, 0.03675000000000139, 0.02499999999999858, 0.021000000000000796, -0.02775000000000105, 0.031000000000000583, 0.07849999999999824, 0.02224999999999966, 0.03500000000000014, 0.02999999999999936, 0.08724999999999916, 0.0754999999999999, 0.017999999999998906, 0.01624999999999943, 0.06599999999999895, 0.025749999999998607, -0.0022500000000000853, 0.03074999999999939, 0.06099999999999994, 0.05550000000000033, 0.03125, -0.0015000000000000568, 0.11700000000000088, 0.14500000000000135, 0.06850000000000023, 0.0705000000000009, 0.062249999999998806], zp_timestamp='2026-02-14T21:10:00')
2026-02-14T23:13:47.168 [DEBUG] [Thread-193854] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:13:47.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T23:13:47.265 [DEBUG] [Thread-193857] [transport.py] [_log()] starting thread (client mode): 0xa57d69b0
2026-02-14T23:13:47.265 [DEBUG] [Thread-193857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:13:47.280 [DEBUG] [Thread-193857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:13:47.281 [INFO] [Thread-193857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:13:47.288 [DEBUG] [Thread-193857] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:13:47.288 [DEBUG] [Thread-193857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:13:47.289 [DEBUG] [Thread-193857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:13:47.289 [DEBUG] [Thread-193857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:13:47.289 [DEBUG] [Thread-193857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:13:47.289 [DEBUG] [Thread-193857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:13:47.289 [DEBUG] [Thread-193857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:13:47.289 [DEBUG] [Thread-193857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:13:47.289 [DEBUG] [Thread-193857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:13:47.289 [DEBUG] [Thread-193857] [transport.py] [_log()] client lang: <none>
2026-02-14T23:13:47.289 [DEBUG] [Thread-193857] [transport.py] [_log()] server lang: <none>
2026-02-14T23:13:47.289 [DEBUG] [Thread-193857] [transport.py] [_log()] kex follows: False
2026-02-14T23:13:47.289 [DEBUG] [Thread-193857] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:13:47.289 [DEBUG] [Thread-193857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:13:47.289 [DEBUG] [Thread-193857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:13:47.289 [DEBUG] [Thread-193857] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:13:47.289 [DEBUG] [Thread-193857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:13:47.289 [DEBUG] [Thread-193857] [transport.py] [_log()] Compression: none
2026-02-14T23:13:47.289 [DEBUG] [Thread-193857] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:13:47.354 [DEBUG] [Thread-193857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:13:47.355 [DEBUG] [Thread-193857] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:13:47.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:13:47.356 [DEBUG] [Thread-193857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:13:47.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:13:47.414 [DEBUG] [Thread-193857] [transport.py] [_log()] userauth is OK
2026-02-14T23:13:47.414 [DEBUG] [Thread-193857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:13:47.414 [DEBUG] [Thread-193857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:13:47.414 [DEBUG] [Thread-193857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:13:47.414 [DEBUG] [Thread-193857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:13:47.433 [INFO] [Thread-193857] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:13:47.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T23:13:47.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:13:48.213 [DEBUG] [Thread-193857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:13:48.213 [DEBUG] [Thread-193857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:13:48.262 [DEBUG] [Thread-193857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:13:48.262 [DEBUG] [Thread-193857] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:13:48.272 [DEBUG] [Thread-193857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:13:48.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:13:48.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:13: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') -> 00000000
2026-02-14T23:13:48.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:13:48.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:13:48.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:13:48.315 [DEBUG] [Thread-193857] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:13:48.699 [DEBUG] [Thread-193859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:14:03.752 [DEBUG] [Thread-193860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:14:04.259 [DEBUG] [Thread-193861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:14:04.773 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:14:04.774 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:14:18.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:14:18.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:14:18.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:14:18.793 [DEBUG] [Thread-193862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:14:20.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 13, 49), 6.41, 64.35, 0.0, 36.75, 8.97, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:14:20.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:13:49
2026-02-14T23:14:20.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:14:20.719 [DEBUG] [Thread-193863] [transport.py] [_log()] starting thread (client mode): 0xa57c2ec0
2026-02-14T23:14:20.719 [DEBUG] [Thread-193863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:14:20.740 [DEBUG] [Thread-193863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:14:20.740 [INFO] [Thread-193863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:14:20.743 [DEBUG] [Thread-193863] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:14:20.743 [DEBUG] [Thread-193863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:14:20.743 [DEBUG] [Thread-193863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:14:20.743 [DEBUG] [Thread-193863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:14:20.743 [DEBUG] [Thread-193863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:14:20.743 [DEBUG] [Thread-193863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:14:20.743 [DEBUG] [Thread-193863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:14:20.743 [DEBUG] [Thread-193863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:14:20.743 [DEBUG] [Thread-193863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:14:20.743 [DEBUG] [Thread-193863] [transport.py] [_log()] client lang: <none>
2026-02-14T23:14:20.743 [DEBUG] [Thread-193863] [transport.py] [_log()] server lang: <none>
2026-02-14T23:14:20.743 [DEBUG] [Thread-193863] [transport.py] [_log()] kex follows: False
2026-02-14T23:14:20.743 [DEBUG] [Thread-193863] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:14:20.743 [DEBUG] [Thread-193863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:14:20.743 [DEBUG] [Thread-193863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:14:20.743 [DEBUG] [Thread-193863] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:14:20.744 [DEBUG] [Thread-193863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:14:20.744 [DEBUG] [Thread-193863] [transport.py] [_log()] Compression: none
2026-02-14T23:14:20.744 [DEBUG] [Thread-193863] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:14:20.761 [DEBUG] [Thread-193863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:14:20.761 [DEBUG] [Thread-193863] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:14:20.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:14:20.763 [DEBUG] [Thread-193863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:14:20.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:14:20.765 [DEBUG] [Thread-193863] [transport.py] [_log()] userauth is OK
2026-02-14T23:14:20.765 [DEBUG] [Thread-193863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:14:20.765 [DEBUG] [Thread-193863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:14:20.765 [DEBUG] [Thread-193863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:14:20.765 [DEBUG] [Thread-193863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:14:20.790 [INFO] [Thread-193863] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:14:20.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:14:21.423 [DEBUG] [Thread-193863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:14:21.424 [DEBUG] [Thread-193863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:14:21.424 [DEBUG] [Thread-193863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:14:21.464 [DEBUG] [Thread-193863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:14:21.465 [DEBUG] [Thread-193863] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:14:21.468 [DEBUG] [Thread-193863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:14:21.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:14:21.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:14:21.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:14:21.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:14:21.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:14:21.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:14:21.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:14:21.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:14:21.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:14:21.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.884833 -999.00   +8.90  22.22     69   +3.50 1 1 1 1 1     0    0 5.06 -11.14 ZNESW 27.1 22.2 151.4 33.3 9.3 -24.6 9.2 -23.5 8.9 -22.5 9.3 -23.6
2026-02-14T23:14:21.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:14:21.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:14:21.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.884833
2026-02-14T23:14:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:14:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:14:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:14:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:14:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:14:21.495 [DEBUG] [Thread-193863] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:14:21.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:13:49', tmtdew=6.41, humidity=64.35, cloud=0.0, wind=36.75, temperature=8.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:13:49', seeing=3.95, atlas_timestamp='2026-02-14T21:14:09.571', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, 0.01025000000000098, 0.0032500000000013074, 0.006999999999997897, 0.024499999999999744, 0.04225000000000101, 0.007500000000000284, 0.03675000000000139, 0.02499999999999858, 0.021000000000000796, -0.02775000000000105, 0.031000000000000583, 0.07849999999999824, 0.02224999999999966, 0.03500000000000014, 0.02999999999999936, 0.08724999999999916, 0.0754999999999999, 0.017999999999998906, 0.01624999999999943, 0.06599999999999895, 0.025749999999998607, -0.0022500000000000853, 0.03074999999999939, 0.06099999999999994, 0.05550000000000033, 0.03125, -0.0015000000000000568, 0.11700000000000088, 0.14500000000000135, 0.06850000000000023, 0.0705000000000009, 0.062249999999998806], zp_timestamp='2026-02-14T21:10:00')
2026-02-14T23:14:21.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-14T23:14:21.592 [DEBUG] [Thread-193866] [transport.py] [_log()] starting thread (client mode): 0xa2d19f60
2026-02-14T23:14:21.592 [DEBUG] [Thread-193866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:14:21.606 [DEBUG] [Thread-193866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:14:21.607 [INFO] [Thread-193866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:14:21.614 [DEBUG] [Thread-193866] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:14:21.614 [DEBUG] [Thread-193866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:14:21.614 [DEBUG] [Thread-193866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:14:21.614 [DEBUG] [Thread-193866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:14:21.614 [DEBUG] [Thread-193866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:14:21.615 [DEBUG] [Thread-193866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:14:21.615 [DEBUG] [Thread-193866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:14:21.615 [DEBUG] [Thread-193866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:14:21.615 [DEBUG] [Thread-193866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:14:21.615 [DEBUG] [Thread-193866] [transport.py] [_log()] client lang: <none>
2026-02-14T23:14:21.615 [DEBUG] [Thread-193866] [transport.py] [_log()] server lang: <none>
2026-02-14T23:14:21.615 [DEBUG] [Thread-193866] [transport.py] [_log()] kex follows: False
2026-02-14T23:14:21.615 [DEBUG] [Thread-193866] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:14:21.615 [DEBUG] [Thread-193866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:14:21.616 [DEBUG] [Thread-193866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:14:21.616 [DEBUG] [Thread-193866] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:14:21.616 [DEBUG] [Thread-193866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:14:21.616 [DEBUG] [Thread-193866] [transport.py] [_log()] Compression: none
2026-02-14T23:14:21.616 [DEBUG] [Thread-193866] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:14:21.676 [DEBUG] [Thread-193866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:14:21.677 [DEBUG] [Thread-193866] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:14:21.678 [DEBUG] [Thread-193866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:14:21.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:14:21.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:14:21.734 [DEBUG] [Thread-193866] [transport.py] [_log()] userauth is OK
2026-02-14T23:14:21.734 [DEBUG] [Thread-193866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:14:21.734 [DEBUG] [Thread-193866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:14:21.734 [DEBUG] [Thread-193866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:14:21.734 [DEBUG] [Thread-193866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:14:21.753 [INFO] [Thread-193866] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:14:21.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-14T23:14:21.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:14:22.524 [DEBUG] [Thread-193866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:14:22.524 [DEBUG] [Thread-193866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:14:22.571 [DEBUG] [Thread-193866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:14:22.571 [DEBUG] [Thread-193866] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:14:22.582 [DEBUG] [Thread-193866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:14:22.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:14:22.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:14:22.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-14T23:14:22.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:14:22.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:14:22.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:14:22.622 [DEBUG] [Thread-193866] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:14:33.829 [DEBUG] [Thread-193868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:14:48.891 [DEBUG] [Thread-193869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:14:52.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:14:52.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:14:52.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:14:54.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 14, 25), 6.41, 64.36, 0.0, 33.45, 8.99, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:14:54.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:14:25
2026-02-14T23:14:54.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:14:54.999 [DEBUG] [Thread-193870] [transport.py] [_log()] starting thread (client mode): 0xa2d7a5f0
2026-02-14T23:14:55.000 [DEBUG] [Thread-193870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:14:55.019 [DEBUG] [Thread-193870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:14:55.019 [INFO] [Thread-193870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:14:55.022 [DEBUG] [Thread-193870] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:14:55.022 [DEBUG] [Thread-193870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:14:55.022 [DEBUG] [Thread-193870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:14:55.023 [DEBUG] [Thread-193870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:14:55.023 [DEBUG] [Thread-193870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:14:55.023 [DEBUG] [Thread-193870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:14:55.023 [DEBUG] [Thread-193870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:14:55.023 [DEBUG] [Thread-193870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:14:55.023 [DEBUG] [Thread-193870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:14:55.023 [DEBUG] [Thread-193870] [transport.py] [_log()] client lang: <none>
2026-02-14T23:14:55.023 [DEBUG] [Thread-193870] [transport.py] [_log()] server lang: <none>
2026-02-14T23:14:55.023 [DEBUG] [Thread-193870] [transport.py] [_log()] kex follows: False
2026-02-14T23:14:55.023 [DEBUG] [Thread-193870] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:14:55.023 [DEBUG] [Thread-193870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:14:55.023 [DEBUG] [Thread-193870] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:14:55.023 [DEBUG] [Thread-193870] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:14:55.023 [DEBUG] [Thread-193870] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:14:55.024 [DEBUG] [Thread-193870] [transport.py] [_log()] Compression: none
2026-02-14T23:14:55.024 [DEBUG] [Thread-193870] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:14:55.039 [DEBUG] [Thread-193870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:14:55.039 [DEBUG] [Thread-193870] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:14:55.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:14:55.040 [DEBUG] [Thread-193870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:14:55.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:14:55.081 [DEBUG] [Thread-193870] [transport.py] [_log()] userauth is OK
2026-02-14T23:14:55.082 [DEBUG] [Thread-193870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:14:55.082 [DEBUG] [Thread-193870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:14:55.082 [DEBUG] [Thread-193870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:14:55.082 [DEBUG] [Thread-193870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:14:55.103 [INFO] [Thread-193870] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:14:55.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:14:55.673 [DEBUG] [Thread-193870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:14:55.673 [DEBUG] [Thread-193870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:14:55.674 [DEBUG] [Thread-193870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:14:55.714 [DEBUG] [Thread-193870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:14:55.715 [DEBUG] [Thread-193870] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:14:55.717 [DEBUG] [Thread-193870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:14:55.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:14:55.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:14:55.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:14:55.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:14:55.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:14:55.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:14:55.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:14:55.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:14:55.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:14:55.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.885181 -999.00   +8.90  32.25     69   +3.60 1 1 2 1 1     0    0 5.11 -11.30 ZNESW 29.5 32.2 166.3 40.4 9.3 -24.4 9.1 -23.4 8.9 -22.5 9.3 -23.5
2026-02-14T23:14:55.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:14:55.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:14:55.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.885181
2026-02-14T23:14:55.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:14:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:14:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:14:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:14:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:14:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:14:25', tmtdew=6.41, humidity=64.36, cloud=0.0, wind=33.45, temperature=8.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:14:25', seeing=3.14, atlas_timestamp='2026-02-14T21:14:39.638', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, 0.01025000000000098, 0.0032500000000013074, 0.006999999999997897, 0.024499999999999744, 0.04225000000000101, 0.007500000000000284, 0.03675000000000139, 0.02499999999999858, 0.021000000000000796, -0.02775000000000105, 0.031000000000000583, 0.07849999999999824, 0.02224999999999966, 0.03500000000000014, 0.02999999999999936, 0.08724999999999916, 0.0754999999999999, 0.017999999999998906, 0.01624999999999943, 0.06599999999999895, 0.025749999999998607, -0.0022500000000000853, 0.03074999999999939, 0.06099999999999994, 0.05550000000000033, 0.03125, -0.0015000000000000568, 0.11700000000000088, 0.14500000000000135, 0.06850000000000023, 0.0705000000000009, 0.062249999999998806], zp_timestamp='2026-02-14T21:13:00')
2026-02-14T23:14:55.745 [DEBUG] [Thread-193870] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:14:55.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-14T23:14:55.841 [DEBUG] [Thread-193873] [transport.py] [_log()] starting thread (client mode): 0xa2d6d780
2026-02-14T23:14:55.842 [DEBUG] [Thread-193873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:14:55.856 [DEBUG] [Thread-193873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:14:55.857 [INFO] [Thread-193873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:14:55.864 [DEBUG] [Thread-193873] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:14:55.864 [DEBUG] [Thread-193873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:14:55.864 [DEBUG] [Thread-193873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:14:55.864 [DEBUG] [Thread-193873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:14:55.864 [DEBUG] [Thread-193873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:14:55.864 [DEBUG] [Thread-193873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:14:55.864 [DEBUG] [Thread-193873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:14:55.864 [DEBUG] [Thread-193873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:14:55.865 [DEBUG] [Thread-193873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:14:55.865 [DEBUG] [Thread-193873] [transport.py] [_log()] client lang: <none>
2026-02-14T23:14:55.865 [DEBUG] [Thread-193873] [transport.py] [_log()] server lang: <none>
2026-02-14T23:14:55.865 [DEBUG] [Thread-193873] [transport.py] [_log()] kex follows: False
2026-02-14T23:14:55.865 [DEBUG] [Thread-193873] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:14:55.865 [DEBUG] [Thread-193873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:14:55.865 [DEBUG] [Thread-193873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:14:55.865 [DEBUG] [Thread-193873] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:14:55.865 [DEBUG] [Thread-193873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:14:55.865 [DEBUG] [Thread-193873] [transport.py] [_log()] Compression: none
2026-02-14T23:14:55.865 [DEBUG] [Thread-193873] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:14:55.922 [DEBUG] [Thread-193873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:14:55.922 [DEBUG] [Thread-193873] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:14:55.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:14:55.923 [DEBUG] [Thread-193873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:14:55.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:14:55.978 [DEBUG] [Thread-193873] [transport.py] [_log()] userauth is OK
2026-02-14T23:14:55.978 [DEBUG] [Thread-193873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:14:55.978 [DEBUG] [Thread-193873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:14:55.978 [DEBUG] [Thread-193873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:14:55.978 [DEBUG] [Thread-193873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:14:55.997 [INFO] [Thread-193873] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:14:55.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-14T23:14:55.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:14:56.785 [DEBUG] [Thread-193873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:14:56.785 [DEBUG] [Thread-193873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:14:56.832 [DEBUG] [Thread-193873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:14:56.832 [DEBUG] [Thread-193873] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:14:56.840 [DEBUG] [Thread-193873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:14:56.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:14:56.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-14T23:14:56.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-14T23:14:56.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:14:56.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:14:56.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:14:56.872 [DEBUG] [Thread-193873] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:15:03.926 [DEBUG] [Thread-193875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:15:04.315 [DEBUG] [Thread-193876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:15:04.980 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:15:04.981 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:15:18.985 [DEBUG] [Thread-193877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:15:26.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:15:26.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:15:26.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-14T23:15:28.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 15), 6.41, 64.33, 0.0, 36.47, 9.02, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:15:28.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:15:00
2026-02-14T23:15:29.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:15:29.336 [DEBUG] [Thread-193878] [transport.py] [_log()] starting thread (client mode): 0xa2d1baf0
2026-02-14T23:15:29.337 [DEBUG] [Thread-193878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:15:29.354 [DEBUG] [Thread-193878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:15:29.355 [INFO] [Thread-193878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:15:29.356 [DEBUG] [Thread-193878] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:15:29.356 [DEBUG] [Thread-193878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:15:29.356 [DEBUG] [Thread-193878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:15:29.356 [DEBUG] [Thread-193878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:15:29.356 [DEBUG] [Thread-193878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:15:29.356 [DEBUG] [Thread-193878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:15:29.356 [DEBUG] [Thread-193878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:15:29.356 [DEBUG] [Thread-193878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:15:29.356 [DEBUG] [Thread-193878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:15:29.356 [DEBUG] [Thread-193878] [transport.py] [_log()] client lang: <none>
2026-02-14T23:15:29.356 [DEBUG] [Thread-193878] [transport.py] [_log()] server lang: <none>
2026-02-14T23:15:29.356 [DEBUG] [Thread-193878] [transport.py] [_log()] kex follows: False
2026-02-14T23:15:29.356 [DEBUG] [Thread-193878] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:15:29.356 [DEBUG] [Thread-193878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:15:29.356 [DEBUG] [Thread-193878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:15:29.356 [DEBUG] [Thread-193878] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:15:29.356 [DEBUG] [Thread-193878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:15:29.356 [DEBUG] [Thread-193878] [transport.py] [_log()] Compression: none
2026-02-14T23:15:29.356 [DEBUG] [Thread-193878] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:15:29.365 [DEBUG] [Thread-193878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:15:29.365 [DEBUG] [Thread-193878] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:15:29.365 [DEBUG] [Thread-193878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:15:29.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:15:29.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:15:29.367 [DEBUG] [Thread-193878] [transport.py] [_log()] userauth is OK
2026-02-14T23:15:29.367 [DEBUG] [Thread-193878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:15:29.367 [DEBUG] [Thread-193878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:15:29.367 [DEBUG] [Thread-193878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:15:29.367 [DEBUG] [Thread-193878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:15:29.390 [INFO] [Thread-193878] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:15:29.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:15:29.956 [DEBUG] [Thread-193878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:15:29.956 [DEBUG] [Thread-193878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:15:29.956 [DEBUG] [Thread-193878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:15:29.996 [DEBUG] [Thread-193878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:15:29.997 [DEBUG] [Thread-193878] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:15:29.999 [DEBUG] [Thread-193878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:15:30.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:15:30.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:15:30.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:15:30.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:15:30.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:15:30.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:15:30.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:15:30.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:15:30.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:15:30.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.885528 -999.00   +8.90  27.04     69   +3.60 1 1 1 1 1     0    0 5.03 -10.66 ZNESW 32.8 27.0 166.8 34.3 9.3 -24.5 9.2 -23.5 8.9 -22.4 9.3 -23.7
2026-02-14T23:15:30.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:15:30.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:15:30.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.885528
2026-02-14T23:15:30.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:15:30.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:15:30.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:15:30.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:15:30.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:15:30.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:15:00', tmtdew=6.41, humidity=64.33, cloud=0.0, wind=36.47, temperature=9.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:15:01', seeing=2.82, atlas_timestamp='2026-02-14T21:15:09.619', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, 0.01025000000000098, 0.0032500000000013074, 0.006999999999997897, 0.024499999999999744, 0.04225000000000101, 0.007500000000000284, 0.03675000000000139, 0.02499999999999858, 0.021000000000000796, -0.02775000000000105, 0.031000000000000583, 0.07849999999999824, 0.02224999999999966, 0.03500000000000014, 0.02999999999999936, 0.08724999999999916, 0.0754999999999999, 0.017999999999998906, 0.01624999999999943, 0.06599999999999895, 0.025749999999998607, -0.0022500000000000853, 0.03074999999999939, 0.06099999999999994, 0.05550000000000033, 0.03125, -0.0015000000000000568, 0.11700000000000088, 0.14500000000000135, 0.06850000000000023, 0.0705000000000009, 0.062249999999998806], zp_timestamp='2026-02-14T21:13:00')
2026-02-14T23:15:30.019 [DEBUG] [Thread-193878] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:15:30.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-14T23:15:30.113 [DEBUG] [Thread-193881] [transport.py] [_log()] starting thread (client mode): 0xa2d78340
2026-02-14T23:15:30.114 [DEBUG] [Thread-193881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:15:30.128 [DEBUG] [Thread-193881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:15:30.129 [INFO] [Thread-193881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:15:30.136 [DEBUG] [Thread-193881] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:15:30.136 [DEBUG] [Thread-193881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:15:30.136 [DEBUG] [Thread-193881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:15:30.136 [DEBUG] [Thread-193881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:15:30.136 [DEBUG] [Thread-193881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:15:30.136 [DEBUG] [Thread-193881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:15:30.136 [DEBUG] [Thread-193881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:15:30.136 [DEBUG] [Thread-193881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:15:30.136 [DEBUG] [Thread-193881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:15:30.136 [DEBUG] [Thread-193881] [transport.py] [_log()] client lang: <none>
2026-02-14T23:15:30.136 [DEBUG] [Thread-193881] [transport.py] [_log()] server lang: <none>
2026-02-14T23:15:30.136 [DEBUG] [Thread-193881] [transport.py] [_log()] kex follows: False
2026-02-14T23:15:30.136 [DEBUG] [Thread-193881] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:15:30.136 [DEBUG] [Thread-193881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:15:30.136 [DEBUG] [Thread-193881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:15:30.136 [DEBUG] [Thread-193881] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:15:30.137 [DEBUG] [Thread-193881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:15:30.137 [DEBUG] [Thread-193881] [transport.py] [_log()] Compression: none
2026-02-14T23:15:30.137 [DEBUG] [Thread-193881] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:15:30.193 [DEBUG] [Thread-193881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:15:30.194 [DEBUG] [Thread-193881] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:15:30.195 [DEBUG] [Thread-193881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:15:30.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:15:30.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:15:30.250 [DEBUG] [Thread-193881] [transport.py] [_log()] userauth is OK
2026-02-14T23:15:30.250 [DEBUG] [Thread-193881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:15:30.251 [DEBUG] [Thread-193881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:15:30.251 [DEBUG] [Thread-193881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:15:30.251 [DEBUG] [Thread-193881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:15:30.272 [INFO] [Thread-193881] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:15:30.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-14T23:15:30.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:15:31.088 [DEBUG] [Thread-193881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:15:31.088 [DEBUG] [Thread-193881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:15:31.136 [DEBUG] [Thread-193881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:15:31.137 [DEBUG] [Thread-193881] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:15:31.146 [DEBUG] [Thread-193881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:15:31.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:15:31.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-14T23:15:31.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-14T23:15:31.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:15:31.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:15:31.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:15:31.182 [DEBUG] [Thread-193881] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:15:34.020 [DEBUG] [Thread-193883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:15:49.071 [DEBUG] [Thread-193884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:16:01.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:16:01.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:16:01.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:16:03.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 15, 36), 6.57, 63.46, 0.0, 38.6, 9.31, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:16:03.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:15:36
2026-02-14T23:16:03.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:16:03.602 [DEBUG] [Thread-193885] [transport.py] [_log()] starting thread (client mode): 0xa2d1a8c0
2026-02-14T23:16:03.602 [DEBUG] [Thread-193885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:16:03.622 [DEBUG] [Thread-193885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:16:03.622 [INFO] [Thread-193885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:16:03.625 [DEBUG] [Thread-193885] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:16:03.625 [DEBUG] [Thread-193885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:16:03.625 [DEBUG] [Thread-193885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:16:03.625 [DEBUG] [Thread-193885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:16:03.625 [DEBUG] [Thread-193885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:16:03.625 [DEBUG] [Thread-193885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:16:03.625 [DEBUG] [Thread-193885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:16:03.626 [DEBUG] [Thread-193885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:16:03.626 [DEBUG] [Thread-193885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:16:03.626 [DEBUG] [Thread-193885] [transport.py] [_log()] client lang: <none>
2026-02-14T23:16:03.626 [DEBUG] [Thread-193885] [transport.py] [_log()] server lang: <none>
2026-02-14T23:16:03.626 [DEBUG] [Thread-193885] [transport.py] [_log()] kex follows: False
2026-02-14T23:16:03.626 [DEBUG] [Thread-193885] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:16:03.626 [DEBUG] [Thread-193885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:16:03.626 [DEBUG] [Thread-193885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:16:03.626 [DEBUG] [Thread-193885] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:16:03.626 [DEBUG] [Thread-193885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:16:03.626 [DEBUG] [Thread-193885] [transport.py] [_log()] Compression: none
2026-02-14T23:16:03.626 [DEBUG] [Thread-193885] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:16:03.644 [DEBUG] [Thread-193885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:16:03.644 [DEBUG] [Thread-193885] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:16:03.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:16:03.646 [DEBUG] [Thread-193885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:16:03.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:16:03.648 [DEBUG] [Thread-193885] [transport.py] [_log()] userauth is OK
2026-02-14T23:16:03.648 [DEBUG] [Thread-193885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:16:03.648 [DEBUG] [Thread-193885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:16:03.649 [DEBUG] [Thread-193885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:16:03.649 [DEBUG] [Thread-193885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:16:03.671 [INFO] [Thread-193885] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:16:03.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:16:04.112 [DEBUG] [Thread-193887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:16:04.284 [DEBUG] [Thread-193885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:16:04.284 [DEBUG] [Thread-193885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:16:04.285 [DEBUG] [Thread-193885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:16:04.325 [DEBUG] [Thread-193885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:16:04.325 [DEBUG] [Thread-193885] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:16:04.327 [DEBUG] [Thread-193885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:16:04.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:16:04.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:16:04.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:16:04.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:16:04.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:16:04.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:16:04.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:16:04.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:16:04.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:16:04.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.885875 -999.00   +8.90  19.30     69   +3.60 1 1 1 1 1     0    0 5.24 -10.58 ZNESW 27.2 19.3 164.8 30.2 9.3 -24.4 9.2 -23.5 8.9 -22.5 9.3 -23.7
2026-02-14T23:16:04.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:16:04.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:16:04.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.885875
2026-02-14T23:16:04.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:16:04.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:16:04.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:16:04.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:16:04.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:16:04.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:15:36', tmtdew=6.57, humidity=63.46, cloud=0.0, wind=38.6, temperature=9.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:15:37', seeing=2.81, atlas_timestamp='2026-02-14T21:15:39.600', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, 0.01025000000000098, 0.0032500000000013074, 0.006999999999997897, 0.024499999999999744, 0.04225000000000101, 0.007500000000000284, 0.03675000000000139, 0.02499999999999858, 0.021000000000000796, -0.02775000000000105, 0.031000000000000583, 0.07849999999999824, 0.02224999999999966, 0.03500000000000014, 0.02999999999999936, 0.08724999999999916, 0.0754999999999999, 0.017999999999998906, 0.01624999999999943, 0.06599999999999895, 0.025749999999998607, -0.0022500000000000853, 0.03074999999999939, 0.06099999999999994, 0.05550000000000033, 0.03125, -0.0015000000000000568, 0.11700000000000088, 0.14500000000000135, 0.06850000000000023, 0.0705000000000009, 0.062249999999998806], zp_timestamp='2026-02-14T21:13:00')
2026-02-14T23:16:04.347 [DEBUG] [Thread-193885] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:16:04.376 [DEBUG] [Thread-193889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:16:04.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-14T23:16:04.432 [DEBUG] [Thread-193890] [transport.py] [_log()] starting thread (client mode): 0xa2d103d0
2026-02-14T23:16:04.432 [DEBUG] [Thread-193890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:16:04.446 [DEBUG] [Thread-193890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:16:04.447 [INFO] [Thread-193890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:16:04.455 [DEBUG] [Thread-193890] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:16:04.455 [DEBUG] [Thread-193890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:16:04.455 [DEBUG] [Thread-193890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:16:04.455 [DEBUG] [Thread-193890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:16:04.455 [DEBUG] [Thread-193890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:16:04.455 [DEBUG] [Thread-193890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:16:04.456 [DEBUG] [Thread-193890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:16:04.456 [DEBUG] [Thread-193890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:16:04.456 [DEBUG] [Thread-193890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:16:04.456 [DEBUG] [Thread-193890] [transport.py] [_log()] client lang: <none>
2026-02-14T23:16:04.456 [DEBUG] [Thread-193890] [transport.py] [_log()] server lang: <none>
2026-02-14T23:16:04.456 [DEBUG] [Thread-193890] [transport.py] [_log()] kex follows: False
2026-02-14T23:16:04.456 [DEBUG] [Thread-193890] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:16:04.456 [DEBUG] [Thread-193890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:16:04.456 [DEBUG] [Thread-193890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:16:04.456 [DEBUG] [Thread-193890] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:16:04.456 [DEBUG] [Thread-193890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:16:04.456 [DEBUG] [Thread-193890] [transport.py] [_log()] Compression: none
2026-02-14T23:16:04.456 [DEBUG] [Thread-193890] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:16:04.514 [DEBUG] [Thread-193890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:16:04.514 [DEBUG] [Thread-193890] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:16:04.515 [DEBUG] [Thread-193890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:16:04.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:16:04.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:16:04.570 [DEBUG] [Thread-193890] [transport.py] [_log()] userauth is OK
2026-02-14T23:16:04.570 [DEBUG] [Thread-193890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:16:04.571 [DEBUG] [Thread-193890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:16:04.571 [DEBUG] [Thread-193890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:16:04.571 [DEBUG] [Thread-193890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:16:04.589 [INFO] [Thread-193890] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:16:04.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-14T23:16:04.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:16:05.185 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:16:05.186 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:16:05.379 [DEBUG] [Thread-193890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:16:05.379 [DEBUG] [Thread-193890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:16:05.428 [DEBUG] [Thread-193890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:16:05.428 [DEBUG] [Thread-193890] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:16:05.438 [DEBUG] [Thread-193890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:16:05.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:16:05.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-14T23:16:05.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-14T23:16:05.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:16:05.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:16:05.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:16:05.476 [DEBUG] [Thread-193890] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:16:19.149 [DEBUG] [Thread-193892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:16:34.196 [DEBUG] [Thread-193893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:16:35.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:16:35.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:16:35.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-14T23:16:37.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 16, 11), 6.43, 64.26, 0.0, 33.08, 8.97, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:16:37.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:16:11
2026-02-14T23:16:37.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:16:37.801 [DEBUG] [Thread-193894] [transport.py] [_log()] starting thread (client mode): 0xa2d79b40
2026-02-14T23:16:37.801 [DEBUG] [Thread-193894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:16:37.820 [DEBUG] [Thread-193894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:16:37.820 [INFO] [Thread-193894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:16:37.824 [DEBUG] [Thread-193894] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:16:37.824 [DEBUG] [Thread-193894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:16:37.824 [DEBUG] [Thread-193894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:16:37.824 [DEBUG] [Thread-193894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:16:37.824 [DEBUG] [Thread-193894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:16:37.824 [DEBUG] [Thread-193894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:16:37.824 [DEBUG] [Thread-193894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:16:37.824 [DEBUG] [Thread-193894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:16:37.824 [DEBUG] [Thread-193894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:16:37.824 [DEBUG] [Thread-193894] [transport.py] [_log()] client lang: <none>
2026-02-14T23:16:37.824 [DEBUG] [Thread-193894] [transport.py] [_log()] server lang: <none>
2026-02-14T23:16:37.824 [DEBUG] [Thread-193894] [transport.py] [_log()] kex follows: False
2026-02-14T23:16:37.824 [DEBUG] [Thread-193894] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:16:37.824 [DEBUG] [Thread-193894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:16:37.824 [DEBUG] [Thread-193894] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:16:37.824 [DEBUG] [Thread-193894] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:16:37.824 [DEBUG] [Thread-193894] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:16:37.825 [DEBUG] [Thread-193894] [transport.py] [_log()] Compression: none
2026-02-14T23:16:37.825 [DEBUG] [Thread-193894] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:16:37.844 [DEBUG] [Thread-193894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:16:37.845 [DEBUG] [Thread-193894] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:16:37.846 [DEBUG] [Thread-193894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:16:37.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:16:37.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:16:37.848 [DEBUG] [Thread-193894] [transport.py] [_log()] userauth is OK
2026-02-14T23:16:37.848 [DEBUG] [Thread-193894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:16:37.849 [DEBUG] [Thread-193894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:16:37.849 [DEBUG] [Thread-193894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:16:37.849 [DEBUG] [Thread-193894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:16:37.881 [INFO] [Thread-193894] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:16:37.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:16:38.444 [DEBUG] [Thread-193894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:16:38.444 [DEBUG] [Thread-193894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:16:38.445 [DEBUG] [Thread-193894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:16:38.485 [DEBUG] [Thread-193894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:16:38.486 [DEBUG] [Thread-193894] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:16:38.488 [DEBUG] [Thread-193894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:16:38.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:16:38.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:16:38.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:16:38.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:16:38.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:16:38.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:16:38.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:16:38.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:16:38.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:16:38.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.886222 -999.00   +8.90  20.71     69   +3.60 1 1 1 1 1     0    0 5.11 -10.92 ZNESW 22.5 20.7 143.2 36.6 9.3 -24.5 9.2 -23.5 8.9 -22.5 9.3 -23.8
2026-02-14T23:16:38.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:16:38.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:16:38.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.886222
2026-02-14T23:16:38.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:16:38.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:16:38.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:16:38.511 [DEBUG] [Thread-193894] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:16:38.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:16:38.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:16:38.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:16:11', tmtdew=6.43, humidity=64.26, cloud=0.0, wind=33.08, temperature=8.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:16:12', seeing=3.12, atlas_timestamp='2026-02-14T21:16:09.581', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, 0.01025000000000098, 0.0032500000000013074, 0.006999999999997897, 0.024499999999999744, 0.04225000000000101, 0.007500000000000284, 0.03675000000000139, 0.02499999999999858, 0.021000000000000796, -0.02775000000000105, 0.031000000000000583, 0.07849999999999824, 0.02224999999999966, 0.03500000000000014, 0.02999999999999936, 0.08724999999999916, 0.0754999999999999, 0.017999999999998906, 0.01624999999999943, 0.06599999999999895, 0.025749999999998607, -0.0022500000000000853, 0.03074999999999939, 0.06099999999999994, 0.05550000000000033, 0.03125, -0.0015000000000000568, 0.11700000000000088, 0.14500000000000135, 0.06850000000000023, 0.0705000000000009, 0.062249999999998806], zp_timestamp='2026-02-14T21:13:00')
2026-02-14T23:16:38.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-14T23:16:38.620 [DEBUG] [Thread-193897] [transport.py] [_log()] starting thread (client mode): 0xa2d18400
2026-02-14T23:16:38.620 [DEBUG] [Thread-193897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:16:38.636 [DEBUG] [Thread-193897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:16:38.636 [INFO] [Thread-193897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:16:38.644 [DEBUG] [Thread-193897] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:16:38.644 [DEBUG] [Thread-193897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:16:38.644 [DEBUG] [Thread-193897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:16:38.644 [DEBUG] [Thread-193897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:16:38.644 [DEBUG] [Thread-193897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:16:38.645 [DEBUG] [Thread-193897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:16:38.645 [DEBUG] [Thread-193897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:16:38.645 [DEBUG] [Thread-193897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:16:38.645 [DEBUG] [Thread-193897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:16:38.645 [DEBUG] [Thread-193897] [transport.py] [_log()] client lang: <none>
2026-02-14T23:16:38.645 [DEBUG] [Thread-193897] [transport.py] [_log()] server lang: <none>
2026-02-14T23:16:38.645 [DEBUG] [Thread-193897] [transport.py] [_log()] kex follows: False
2026-02-14T23:16:38.645 [DEBUG] [Thread-193897] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:16:38.645 [DEBUG] [Thread-193897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:16:38.646 [DEBUG] [Thread-193897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:16:38.646 [DEBUG] [Thread-193897] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:16:38.646 [DEBUG] [Thread-193897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:16:38.646 [DEBUG] [Thread-193897] [transport.py] [_log()] Compression: none
2026-02-14T23:16:38.646 [DEBUG] [Thread-193897] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:16:38.710 [DEBUG] [Thread-193897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:16:38.710 [DEBUG] [Thread-193897] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:16:38.711 [DEBUG] [Thread-193897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:16:38.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:16:38.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:16:38.770 [DEBUG] [Thread-193897] [transport.py] [_log()] userauth is OK
2026-02-14T23:16:38.771 [DEBUG] [Thread-193897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:16:38.771 [DEBUG] [Thread-193897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:16:38.771 [DEBUG] [Thread-193897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:16:38.771 [DEBUG] [Thread-193897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:16:38.790 [INFO] [Thread-193897] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:16:38.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-14T23:16:38.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:16:39.578 [DEBUG] [Thread-193897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:16:39.578 [DEBUG] [Thread-193897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:16:39.627 [DEBUG] [Thread-193897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:16:39.627 [DEBUG] [Thread-193897] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:16:39.636 [DEBUG] [Thread-193897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:16:39.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:16:39.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')
2026-02-14T23:16:39.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:16:39.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:16:39.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:16:39.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:16:39.675 [DEBUG] [Thread-193897] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:16:49.230 [DEBUG] [Thread-193899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:17:04.269 [DEBUG] [Thread-193900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:17:04.445 [DEBUG] [Thread-193901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:17:05.386 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:17:05.387 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:17:09.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:17:09.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:17:09.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-14T23:17:12.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 16, 47), 6.42, 64.31, 0.0, 32.27, 9.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:17:12.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:16:47
2026-02-14T23:17:12.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:17:12.639 [DEBUG] [Thread-193902] [transport.py] [_log()] starting thread (client mode): 0xa2d1a5f0
2026-02-14T23:17:12.639 [DEBUG] [Thread-193902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:17:12.659 [DEBUG] [Thread-193902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:17:12.659 [INFO] [Thread-193902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:17:12.664 [DEBUG] [Thread-193902] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:17:12.665 [DEBUG] [Thread-193902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:17:12.665 [DEBUG] [Thread-193902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:17:12.665 [DEBUG] [Thread-193902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:17:12.665 [DEBUG] [Thread-193902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:17:12.665 [DEBUG] [Thread-193902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:17:12.665 [DEBUG] [Thread-193902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:17:12.665 [DEBUG] [Thread-193902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:17:12.665 [DEBUG] [Thread-193902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:17:12.665 [DEBUG] [Thread-193902] [transport.py] [_log()] client lang: <none>
2026-02-14T23:17:12.665 [DEBUG] [Thread-193902] [transport.py] [_log()] server lang: <none>
2026-02-14T23:17:12.665 [DEBUG] [Thread-193902] [transport.py] [_log()] kex follows: False
2026-02-14T23:17:12.665 [DEBUG] [Thread-193902] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:17:12.665 [DEBUG] [Thread-193902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:17:12.665 [DEBUG] [Thread-193902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:17:12.665 [DEBUG] [Thread-193902] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:17:12.665 [DEBUG] [Thread-193902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:17:12.665 [DEBUG] [Thread-193902] [transport.py] [_log()] Compression: none
2026-02-14T23:17:12.665 [DEBUG] [Thread-193902] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:17:12.677 [DEBUG] [Thread-193902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:17:12.677 [DEBUG] [Thread-193902] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:17:12.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:17:12.678 [DEBUG] [Thread-193902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:17:12.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:17:12.721 [DEBUG] [Thread-193902] [transport.py] [_log()] userauth is OK
2026-02-14T23:17:12.721 [DEBUG] [Thread-193902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:17:12.722 [DEBUG] [Thread-193902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:17:12.722 [DEBUG] [Thread-193902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:17:12.722 [DEBUG] [Thread-193902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:17:12.741 [INFO] [Thread-193902] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:17:12.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:17:13.307 [DEBUG] [Thread-193902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:17:13.308 [DEBUG] [Thread-193902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:17:13.308 [DEBUG] [Thread-193902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:17:13.348 [DEBUG] [Thread-193902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:17:13.348 [DEBUG] [Thread-193902] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:17:13.353 [DEBUG] [Thread-193902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:17:13.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:17:13.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:17:13.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:17:13.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:17:13.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:17:13.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:17:13.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:17:13.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:17:13.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:17:13.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.886569 -999.00   +8.90  31.11     69   +3.60 1 1 2 1 1     0    0 5.10 -11.50 ZNESW 30.5 31.1 167.8 50.7 9.3 -24.6 9.2 -23.5 8.9 -22.5 9.3 -23.7
2026-02-14T23:17:13.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:17:13.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:17:13.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.886569
2026-02-14T23:17:13.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:17:13.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:17:13.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:17:13.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:17:13.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:17:13.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:16:47', tmtdew=6.42, humidity=64.31, cloud=0.0, wind=32.27, temperature=9.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:16:47', seeing=3.73, atlas_timestamp='2026-02-14T21:16:39.562', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, 0.01025000000000098, 0.0032500000000013074, 0.006999999999997897, 0.024499999999999744, 0.04225000000000101, 0.007500000000000284, 0.03675000000000139, 0.02499999999999858, 0.021000000000000796, -0.02775000000000105, 0.031000000000000583, 0.07849999999999824, 0.02224999999999966, 0.03500000000000014, 0.02999999999999936, 0.08724999999999916, 0.0754999999999999, 0.017999999999998906, 0.01624999999999943, 0.06599999999999895, 0.025749999999998607, -0.0022500000000000853, 0.03074999999999939, 0.06099999999999994, 0.05550000000000033, 0.03125, -0.0015000000000000568, 0.11700000000000088, 0.14500000000000135, 0.06850000000000023, 0.0705000000000009, 0.062249999999998806], zp_timestamp='2026-02-14T21:13:00')
2026-02-14T23:17:13.376 [DEBUG] [Thread-193902] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:17: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-14T23:17:13.476 [DEBUG] [Thread-193905] [transport.py] [_log()] starting thread (client mode): 0xa2d7ae60
2026-02-14T23:17:13.476 [DEBUG] [Thread-193905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:17:13.490 [DEBUG] [Thread-193905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:17:13.491 [INFO] [Thread-193905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:17:13.498 [DEBUG] [Thread-193905] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:17:13.499 [DEBUG] [Thread-193905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:17:13.499 [DEBUG] [Thread-193905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:17:13.499 [DEBUG] [Thread-193905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:17:13.499 [DEBUG] [Thread-193905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:17:13.499 [DEBUG] [Thread-193905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:17:13.499 [DEBUG] [Thread-193905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:17:13.499 [DEBUG] [Thread-193905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:17:13.499 [DEBUG] [Thread-193905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:17:13.499 [DEBUG] [Thread-193905] [transport.py] [_log()] client lang: <none>
2026-02-14T23:17:13.499 [DEBUG] [Thread-193905] [transport.py] [_log()] server lang: <none>
2026-02-14T23:17:13.499 [DEBUG] [Thread-193905] [transport.py] [_log()] kex follows: False
2026-02-14T23:17:13.499 [DEBUG] [Thread-193905] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:17:13.499 [DEBUG] [Thread-193905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:17:13.499 [DEBUG] [Thread-193905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:17:13.499 [DEBUG] [Thread-193905] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:17:13.499 [DEBUG] [Thread-193905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:17:13.499 [DEBUG] [Thread-193905] [transport.py] [_log()] Compression: none
2026-02-14T23:17:13.499 [DEBUG] [Thread-193905] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:17:13.558 [DEBUG] [Thread-193905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:17:13.559 [DEBUG] [Thread-193905] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:17:13.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:17:13.560 [DEBUG] [Thread-193905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:17:13.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:17:13.615 [DEBUG] [Thread-193905] [transport.py] [_log()] userauth is OK
2026-02-14T23:17:13.615 [DEBUG] [Thread-193905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:17:13.615 [DEBUG] [Thread-193905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:17:13.615 [DEBUG] [Thread-193905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:17:13.615 [DEBUG] [Thread-193905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:17:13.635 [INFO] [Thread-193905] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:17:13.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-14T23:17:13.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:17:14.472 [DEBUG] [Thread-193905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:17:14.473 [DEBUG] [Thread-193905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:17:14.521 [DEBUG] [Thread-193905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:17:14.521 [DEBUG] [Thread-193905] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:17:14.530 [DEBUG] [Thread-193905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:17:14.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:17: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')
2026-02-14T23:17:14.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-14T23:17:14.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:17:14.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:17:14.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:17:14.568 [DEBUG] [Thread-193905] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:17:19.310 [DEBUG] [Thread-193907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:17:34.361 [DEBUG] [Thread-193908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:17:44.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:17:44.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:17:44.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-14T23:17:46.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 17, 22), 6.43, 64.26, 0.0, 34.67, 8.97, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:17:46.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:17:22
2026-02-14T23:17:47.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:17:47.526 [DEBUG] [Thread-193909] [transport.py] [_log()] starting thread (client mode): 0xa2d7ace0
2026-02-14T23:17:47.526 [DEBUG] [Thread-193909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:17:47.546 [DEBUG] [Thread-193909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:17:47.547 [INFO] [Thread-193909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:17:47.550 [DEBUG] [Thread-193909] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:17:47.550 [DEBUG] [Thread-193909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:17:47.550 [DEBUG] [Thread-193909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:17:47.550 [DEBUG] [Thread-193909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:17:47.550 [DEBUG] [Thread-193909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:17:47.550 [DEBUG] [Thread-193909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:17:47.550 [DEBUG] [Thread-193909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:17:47.550 [DEBUG] [Thread-193909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:17:47.550 [DEBUG] [Thread-193909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:17:47.550 [DEBUG] [Thread-193909] [transport.py] [_log()] client lang: <none>
2026-02-14T23:17:47.550 [DEBUG] [Thread-193909] [transport.py] [_log()] server lang: <none>
2026-02-14T23:17:47.550 [DEBUG] [Thread-193909] [transport.py] [_log()] kex follows: False
2026-02-14T23:17:47.550 [DEBUG] [Thread-193909] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:17:47.550 [DEBUG] [Thread-193909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:17:47.550 [DEBUG] [Thread-193909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:17:47.550 [DEBUG] [Thread-193909] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:17:47.550 [DEBUG] [Thread-193909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:17:47.550 [DEBUG] [Thread-193909] [transport.py] [_log()] Compression: none
2026-02-14T23:17:47.550 [DEBUG] [Thread-193909] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:17:47.567 [DEBUG] [Thread-193909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:17:47.567 [DEBUG] [Thread-193909] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:17:47.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:17:47.568 [DEBUG] [Thread-193909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:17:47.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:17:47.571 [DEBUG] [Thread-193909] [transport.py] [_log()] userauth is OK
2026-02-14T23:17:47.571 [DEBUG] [Thread-193909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:17:47.571 [DEBUG] [Thread-193909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:17:47.571 [DEBUG] [Thread-193909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:17:47.571 [DEBUG] [Thread-193909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:17:47.596 [INFO] [Thread-193909] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:17:47.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:17:48.239 [DEBUG] [Thread-193909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:17:48.240 [DEBUG] [Thread-193909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:17:48.240 [DEBUG] [Thread-193909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:17:48.280 [DEBUG] [Thread-193909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:17:48.281 [DEBUG] [Thread-193909] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:17:48.284 [DEBUG] [Thread-193909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:17:48.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:17:48.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:17:48.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:17:48.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:17:48.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:17:48.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:17:48.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:17:48.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:17:48.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:17:48.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.887264 -999.00   +8.90  25.04     69   +3.50 1 1 1 1 1     0    0 5.09 -11.32 ZNESW 22.5 25.0 169.0 35.3 9.3 -24.5 9.2 -23.6 9.0 -22.6 9.3 -23.7
2026-02-14T23:17:48.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:17:48.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:17:48.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.887264
2026-02-14T23:17:48.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:17:48.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:17:48.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:17:48.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:17:48.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:17:48.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:17:22', tmtdew=6.43, humidity=64.26, cloud=0.0, wind=34.67, temperature=8.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:17:22', seeing=2.95, atlas_timestamp='2026-02-14T21:17:39.610', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, 0.015250000000001762, 0.008750000000000924, -0.034000000000000696, 0.03399999999999892, 0.02925000000000111, 0.016000000000000014, 0.01025000000000098, 0.037499999999999645, 0.0030000000000001137, -0.03575000000000017, 0.02099999999999902, 0.06299999999999883, 0.024250000000000327, 0.027999999999998693, 0.03500000000000014, 0.06325000000000003, 0.0600000000000005, -0.0005000000000006111, 0.023749999999999716, 0.04049999999999798, 0.018749999999998934, -0.03474999999999895, 0.03325000000000067, 0.05599999999999916, 0.046499999999999986, 0.02275000000000027, 0.02450000000000152, 0.10100000000000087, 0.08450000000000202, 0.05000000000000071, 0.09500000000000064, 0.025749999999998607], zp_timestamp='2026-02-14T21:16:00')
2026-02-14T23:17:48.313 [DEBUG] [Thread-193909] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:17:48.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T23:17:48.412 [DEBUG] [Thread-193912] [transport.py] [_log()] starting thread (client mode): 0xa57d58a0
2026-02-14T23:17:48.412 [DEBUG] [Thread-193912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:17:48.426 [DEBUG] [Thread-193912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:17:48.427 [INFO] [Thread-193912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:17:48.435 [DEBUG] [Thread-193912] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:17:48.435 [DEBUG] [Thread-193912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:17:48.435 [DEBUG] [Thread-193912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:17:48.435 [DEBUG] [Thread-193912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:17:48.435 [DEBUG] [Thread-193912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:17:48.435 [DEBUG] [Thread-193912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:17:48.435 [DEBUG] [Thread-193912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:17:48.435 [DEBUG] [Thread-193912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:17:48.435 [DEBUG] [Thread-193912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:17:48.435 [DEBUG] [Thread-193912] [transport.py] [_log()] client lang: <none>
2026-02-14T23:17:48.435 [DEBUG] [Thread-193912] [transport.py] [_log()] server lang: <none>
2026-02-14T23:17:48.435 [DEBUG] [Thread-193912] [transport.py] [_log()] kex follows: False
2026-02-14T23:17:48.436 [DEBUG] [Thread-193912] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:17:48.436 [DEBUG] [Thread-193912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:17:48.436 [DEBUG] [Thread-193912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:17:48.436 [DEBUG] [Thread-193912] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:17:48.436 [DEBUG] [Thread-193912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:17:48.436 [DEBUG] [Thread-193912] [transport.py] [_log()] Compression: none
2026-02-14T23:17:48.436 [DEBUG] [Thread-193912] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:17:48.494 [DEBUG] [Thread-193912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:17:48.495 [DEBUG] [Thread-193912] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:17:48.495 [DEBUG] [Thread-193912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:17:48.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:17:48.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:17:48.556 [DEBUG] [Thread-193912] [transport.py] [_log()] userauth is OK
2026-02-14T23:17:48.556 [DEBUG] [Thread-193912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:17:48.557 [DEBUG] [Thread-193912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:17:48.557 [DEBUG] [Thread-193912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:17:48.557 [DEBUG] [Thread-193912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:17:48.578 [INFO] [Thread-193912] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:17:48.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-14T23:17:48.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:17:49.358 [DEBUG] [Thread-193912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:17:49.359 [DEBUG] [Thread-193912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:17:49.400 [DEBUG] [Thread-193914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:17:49.411 [DEBUG] [Thread-193912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:17:49.411 [DEBUG] [Thread-193912] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:17:49.420 [DEBUG] [Thread-193912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:17:49.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:17:49.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:17:49.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:17:49.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:17:49.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:17:49.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:17:49.456 [DEBUG] [Thread-193912] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:18:04.462 [DEBUG] [Thread-193915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:18:04.513 [DEBUG] [Thread-193916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:18:05.588 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:18:05.589 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:18:19.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:18:19.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:18:19.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:18:19.499 [DEBUG] [Thread-193917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:18:21.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 17, 57), 6.41, 64.33, 0.0, 38.92, 8.97, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:18:21.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:17:57
2026-02-14T23:18:21.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:18:21.902 [DEBUG] [Thread-193918] [transport.py] [_log()] starting thread (client mode): 0xa2d78cd0
2026-02-14T23:18:21.902 [DEBUG] [Thread-193918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:18:21.921 [DEBUG] [Thread-193918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:18:21.921 [INFO] [Thread-193918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:18:21.924 [DEBUG] [Thread-193918] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:18:21.925 [DEBUG] [Thread-193918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:18:21.925 [DEBUG] [Thread-193918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:18:21.925 [DEBUG] [Thread-193918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:18:21.925 [DEBUG] [Thread-193918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:18:21.925 [DEBUG] [Thread-193918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:18:21.925 [DEBUG] [Thread-193918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:18:21.925 [DEBUG] [Thread-193918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:18:21.925 [DEBUG] [Thread-193918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:18:21.925 [DEBUG] [Thread-193918] [transport.py] [_log()] client lang: <none>
2026-02-14T23:18:21.925 [DEBUG] [Thread-193918] [transport.py] [_log()] server lang: <none>
2026-02-14T23:18:21.925 [DEBUG] [Thread-193918] [transport.py] [_log()] kex follows: False
2026-02-14T23:18:21.925 [DEBUG] [Thread-193918] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:18:21.925 [DEBUG] [Thread-193918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:18:21.925 [DEBUG] [Thread-193918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:18:21.925 [DEBUG] [Thread-193918] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:18:21.925 [DEBUG] [Thread-193918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:18:21.925 [DEBUG] [Thread-193918] [transport.py] [_log()] Compression: none
2026-02-14T23:18:21.925 [DEBUG] [Thread-193918] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:18:21.936 [DEBUG] [Thread-193918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:18:21.936 [DEBUG] [Thread-193918] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:18:21.937 [DEBUG] [Thread-193918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:18:21.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:18:21.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:18:21.939 [DEBUG] [Thread-193918] [transport.py] [_log()] userauth is OK
2026-02-14T23:18:21.939 [DEBUG] [Thread-193918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:18:21.939 [DEBUG] [Thread-193918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:18:21.939 [DEBUG] [Thread-193918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:18:21.939 [DEBUG] [Thread-193918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:18:21.964 [INFO] [Thread-193918] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:18:21.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:18:22.569 [DEBUG] [Thread-193918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:18:22.569 [DEBUG] [Thread-193918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:18:22.569 [DEBUG] [Thread-193918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:18:22.610 [DEBUG] [Thread-193918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:18:22.610 [DEBUG] [Thread-193918] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:18:22.613 [DEBUG] [Thread-193918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:18:22.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:18:22.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:18:22.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:18:22.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:18:22.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:18:22.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:18:22.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:18:22.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:18:22.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:18:22.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.887611 -999.00   +8.90  30.97     69   +3.60 1 1 2 1 1     0    0 5.10 -10.82 ZNESW 26.3 31.0 172.8 36.0 9.3 -24.5 9.2 -23.6 9.0 -22.7 9.3 -23.4
2026-02-14T23:18:22.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:18:22.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:18:22.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.887611
2026-02-14T23:18:22.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:18:22.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:18:22.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:18:22.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:18:22.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:18:22.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:17:57', tmtdew=6.41, humidity=64.33, cloud=0.0, wind=38.92, temperature=8.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:17:58', seeing=2.92, atlas_timestamp='2026-02-14T21:18:09.590', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, 0.015250000000001762, 0.008750000000000924, -0.034000000000000696, 0.03399999999999892, 0.02925000000000111, 0.016000000000000014, 0.01025000000000098, 0.037499999999999645, 0.0030000000000001137, -0.03575000000000017, 0.02099999999999902, 0.06299999999999883, 0.024250000000000327, 0.027999999999998693, 0.03500000000000014, 0.06325000000000003, 0.0600000000000005, -0.0005000000000006111, 0.023749999999999716, 0.04049999999999798, 0.018749999999998934, -0.03474999999999895, 0.03325000000000067, 0.05599999999999916, 0.046499999999999986, 0.02275000000000027, 0.02450000000000152, 0.10100000000000087, 0.08450000000000202, 0.05000000000000071, 0.09500000000000064, 0.025749999999998607], zp_timestamp='2026-02-14T21:16:00')
2026-02-14T23:18:22.637 [DEBUG] [Thread-193918] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:18:22.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-14T23:18:22.731 [DEBUG] [Thread-193921] [transport.py] [_log()] starting thread (client mode): 0xa57c2b30
2026-02-14T23:18:22.732 [DEBUG] [Thread-193921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:18:22.746 [DEBUG] [Thread-193921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:18:22.746 [INFO] [Thread-193921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:18:22.755 [DEBUG] [Thread-193921] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:18:22.755 [DEBUG] [Thread-193921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:18:22.755 [DEBUG] [Thread-193921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:18:22.755 [DEBUG] [Thread-193921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:18:22.755 [DEBUG] [Thread-193921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:18:22.755 [DEBUG] [Thread-193921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:18:22.755 [DEBUG] [Thread-193921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:18:22.755 [DEBUG] [Thread-193921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:18:22.755 [DEBUG] [Thread-193921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:18:22.755 [DEBUG] [Thread-193921] [transport.py] [_log()] client lang: <none>
2026-02-14T23:18:22.755 [DEBUG] [Thread-193921] [transport.py] [_log()] server lang: <none>
2026-02-14T23:18:22.755 [DEBUG] [Thread-193921] [transport.py] [_log()] kex follows: False
2026-02-14T23:18:22.755 [DEBUG] [Thread-193921] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:18:22.755 [DEBUG] [Thread-193921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:18:22.756 [DEBUG] [Thread-193921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:18:22.756 [DEBUG] [Thread-193921] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:18:22.756 [DEBUG] [Thread-193921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:18:22.756 [DEBUG] [Thread-193921] [transport.py] [_log()] Compression: none
2026-02-14T23:18:22.756 [DEBUG] [Thread-193921] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:18:22.813 [DEBUG] [Thread-193921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:18:22.814 [DEBUG] [Thread-193921] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:18:22.814 [DEBUG] [Thread-193921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:18:22.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:18:22.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:18:22.870 [DEBUG] [Thread-193921] [transport.py] [_log()] userauth is OK
2026-02-14T23:18:22.870 [DEBUG] [Thread-193921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:18:22.870 [DEBUG] [Thread-193921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:18:22.870 [DEBUG] [Thread-193921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:18:22.870 [DEBUG] [Thread-193921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:18:22.888 [INFO] [Thread-193921] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:18:22.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T23:18:22.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:18:23.729 [DEBUG] [Thread-193921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:18:23.730 [DEBUG] [Thread-193921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:18:23.777 [DEBUG] [Thread-193921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:18:23.777 [DEBUG] [Thread-193921] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:18:23.787 [DEBUG] [Thread-193921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:18:23.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:18:23.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-14T23:18:23.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-14T23:18:23.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:18:23.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:18:23.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:18:23.822 [DEBUG] [Thread-193921] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:18:34.540 [DEBUG] [Thread-193923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:18:49.592 [DEBUG] [Thread-193924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:18:53.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:18:53.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:18:53.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-14T23:18:55.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 18, 34), 6.53, 63.63, 0.0, 41.21, 9.28, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:18:55.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:18:34
2026-02-14T23:18:56.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:18:56.164 [DEBUG] [Thread-193925] [transport.py] [_log()] starting thread (client mode): 0xa2d78b50
2026-02-14T23:18:56.164 [DEBUG] [Thread-193925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:18:56.179 [DEBUG] [Thread-193925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:18:56.179 [INFO] [Thread-193925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:18:56.182 [DEBUG] [Thread-193925] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:18:56.182 [DEBUG] [Thread-193925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:18:56.183 [DEBUG] [Thread-193925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:18:56.183 [DEBUG] [Thread-193925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:18:56.183 [DEBUG] [Thread-193925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:18:56.183 [DEBUG] [Thread-193925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:18:56.183 [DEBUG] [Thread-193925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:18:56.183 [DEBUG] [Thread-193925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:18:56.183 [DEBUG] [Thread-193925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:18:56.183 [DEBUG] [Thread-193925] [transport.py] [_log()] client lang: <none>
2026-02-14T23:18:56.183 [DEBUG] [Thread-193925] [transport.py] [_log()] server lang: <none>
2026-02-14T23:18:56.183 [DEBUG] [Thread-193925] [transport.py] [_log()] kex follows: False
2026-02-14T23:18:56.183 [DEBUG] [Thread-193925] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:18:56.183 [DEBUG] [Thread-193925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:18:56.183 [DEBUG] [Thread-193925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:18:56.183 [DEBUG] [Thread-193925] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:18:56.183 [DEBUG] [Thread-193925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:18:56.183 [DEBUG] [Thread-193925] [transport.py] [_log()] Compression: none
2026-02-14T23:18:56.183 [DEBUG] [Thread-193925] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:18:56.198 [DEBUG] [Thread-193925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:18:56.199 [DEBUG] [Thread-193925] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:18:56.199 [DEBUG] [Thread-193925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:18:56.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:18:56.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:18:56.201 [DEBUG] [Thread-193925] [transport.py] [_log()] userauth is OK
2026-02-14T23:18:56.201 [DEBUG] [Thread-193925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:18:56.202 [DEBUG] [Thread-193925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:18:56.202 [DEBUG] [Thread-193925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:18:56.202 [DEBUG] [Thread-193925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:18:56.220 [INFO] [Thread-193925] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:18:56.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:18:56.775 [DEBUG] [Thread-193925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:18:56.775 [DEBUG] [Thread-193925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:18:56.776 [DEBUG] [Thread-193925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:18:56.816 [DEBUG] [Thread-193925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:18:56.816 [DEBUG] [Thread-193925] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:18:56.819 [DEBUG] [Thread-193925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:18:56.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:18:56.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:18:56.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:18:56.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:18:56.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:18:56.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:18:56.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:18:56.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:18:56.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:18:56.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.887958 -999.00   +8.90  25.20     69   +3.60 1 1 1 1 1     0    0 5.10 -11.12 ZNESW 27.3 25.2 161.8 30.4 9.3 -24.5 9.2 -23.5 9.0 -22.8 9.3 -23.6
2026-02-14T23:18:56.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:18:56.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:18:56.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.887958
2026-02-14T23:18:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:18:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:18:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:18:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:18:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:18:56.849 [DEBUG] [Thread-193925] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:18:56.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:18:34', tmtdew=6.53, humidity=63.63, cloud=0.0, wind=41.21, temperature=9.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:18:34', seeing=3.32, atlas_timestamp='2026-02-14T21:18:39.571', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, 0.015250000000001762, 0.008750000000000924, -0.034000000000000696, 0.03399999999999892, 0.02925000000000111, 0.016000000000000014, 0.01025000000000098, 0.037499999999999645, 0.0030000000000001137, -0.03575000000000017, 0.02099999999999902, 0.06299999999999883, 0.024250000000000327, 0.027999999999998693, 0.03500000000000014, 0.06325000000000003, 0.0600000000000005, -0.0005000000000006111, 0.023749999999999716, 0.04049999999999798, 0.018749999999998934, -0.03474999999999895, 0.03325000000000067, 0.05599999999999916, 0.046499999999999986, 0.02275000000000027, 0.02450000000000152, 0.10100000000000087, 0.08450000000000202, 0.05000000000000071, 0.09500000000000064, 0.025749999999998607], zp_timestamp='2026-02-14T21:16:00')
2026-02-14T23:18:56.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-14T23:18:56.951 [DEBUG] [Thread-193928] [transport.py] [_log()] starting thread (client mode): 0xa2d7b190
2026-02-14T23:18:56.951 [DEBUG] [Thread-193928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:18:56.966 [DEBUG] [Thread-193928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:18:56.966 [INFO] [Thread-193928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:18:56.973 [DEBUG] [Thread-193928] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:18:56.974 [DEBUG] [Thread-193928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:18:56.974 [DEBUG] [Thread-193928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:18:56.974 [DEBUG] [Thread-193928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:18:56.974 [DEBUG] [Thread-193928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:18:56.974 [DEBUG] [Thread-193928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:18:56.974 [DEBUG] [Thread-193928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:18:56.974 [DEBUG] [Thread-193928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:18:56.974 [DEBUG] [Thread-193928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:18:56.975 [DEBUG] [Thread-193928] [transport.py] [_log()] client lang: <none>
2026-02-14T23:18:56.975 [DEBUG] [Thread-193928] [transport.py] [_log()] server lang: <none>
2026-02-14T23:18:56.975 [DEBUG] [Thread-193928] [transport.py] [_log()] kex follows: False
2026-02-14T23:18:56.975 [DEBUG] [Thread-193928] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:18:56.975 [DEBUG] [Thread-193928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:18:56.975 [DEBUG] [Thread-193928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:18:56.975 [DEBUG] [Thread-193928] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:18:56.975 [DEBUG] [Thread-193928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:18:56.976 [DEBUG] [Thread-193928] [transport.py] [_log()] Compression: none
2026-02-14T23:18:56.976 [DEBUG] [Thread-193928] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:18:57.030 [DEBUG] [Thread-193928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:18:57.031 [DEBUG] [Thread-193928] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:18:57.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:18:57.032 [DEBUG] [Thread-193928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:18:57.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:18:57.086 [DEBUG] [Thread-193928] [transport.py] [_log()] userauth is OK
2026-02-14T23:18:57.086 [DEBUG] [Thread-193928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:18:57.087 [DEBUG] [Thread-193928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:18:57.087 [DEBUG] [Thread-193928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:18:57.087 [DEBUG] [Thread-193928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:18:57.105 [INFO] [Thread-193928] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:18:57.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-14T23:18:57.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:18:57.867 [DEBUG] [Thread-193928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:18:57.868 [DEBUG] [Thread-193928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:18:57.915 [DEBUG] [Thread-193928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:18:57.915 [DEBUG] [Thread-193928] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:18:57.924 [DEBUG] [Thread-193928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:18:57.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:18:57.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-14T23:18:57.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:18:57.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:18:57.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:18:57.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:18:57.958 [DEBUG] [Thread-193928] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:19:04.569 [DEBUG] [Thread-193930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:19:04.627 [DEBUG] [Thread-193931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:19:05.791 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:19:05.792 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:19:19.684 [DEBUG] [Thread-193932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:19:27.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:19:27.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:19:27.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:19:29.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 19, 9), 6.42, 64.3, 0.0, 32.64, 8.99, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:19:29.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:19:09
2026-02-14T23:19:30.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:19:30.485 [DEBUG] [Thread-193933] [transport.py] [_log()] starting thread (client mode): 0xa2d02a40
2026-02-14T23:19:30.485 [DEBUG] [Thread-193933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:19:30.504 [DEBUG] [Thread-193933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:19:30.505 [INFO] [Thread-193933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:19:30.508 [DEBUG] [Thread-193933] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:19:30.508 [DEBUG] [Thread-193933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:19:30.508 [DEBUG] [Thread-193933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:19:30.508 [DEBUG] [Thread-193933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:19:30.508 [DEBUG] [Thread-193933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:19:30.508 [DEBUG] [Thread-193933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:19:30.508 [DEBUG] [Thread-193933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:19:30.508 [DEBUG] [Thread-193933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:19:30.508 [DEBUG] [Thread-193933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:19:30.508 [DEBUG] [Thread-193933] [transport.py] [_log()] client lang: <none>
2026-02-14T23:19:30.508 [DEBUG] [Thread-193933] [transport.py] [_log()] server lang: <none>
2026-02-14T23:19:30.508 [DEBUG] [Thread-193933] [transport.py] [_log()] kex follows: False
2026-02-14T23:19:30.508 [DEBUG] [Thread-193933] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:19:30.508 [DEBUG] [Thread-193933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:19:30.508 [DEBUG] [Thread-193933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:19:30.508 [DEBUG] [Thread-193933] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:19:30.508 [DEBUG] [Thread-193933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:19:30.508 [DEBUG] [Thread-193933] [transport.py] [_log()] Compression: none
2026-02-14T23:19:30.508 [DEBUG] [Thread-193933] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:19:30.526 [DEBUG] [Thread-193933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:19:30.526 [DEBUG] [Thread-193933] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:19:30.527 [DEBUG] [Thread-193933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:19:30.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:19:30.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:19:30.529 [DEBUG] [Thread-193933] [transport.py] [_log()] userauth is OK
2026-02-14T23:19:30.529 [DEBUG] [Thread-193933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:19:30.530 [DEBUG] [Thread-193933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:19:30.530 [DEBUG] [Thread-193933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:19:30.530 [DEBUG] [Thread-193933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:19:30.548 [INFO] [Thread-193933] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:19:30.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:19:31.262 [DEBUG] [Thread-193933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:19:31.262 [DEBUG] [Thread-193933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:19:31.263 [DEBUG] [Thread-193933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:19:31.303 [DEBUG] [Thread-193933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:19:31.303 [DEBUG] [Thread-193933] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:19:31.307 [DEBUG] [Thread-193933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:19:31.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:19:31.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:19:31.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:19:31.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:19:31.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:19:31.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:19:31.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:19:31.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:19:31.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:19:31.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.887958 -999.00   +8.90  25.20     69   +3.60 1 1 1 1 1     0    0 5.10 -11.12 ZNESW 27.3 25.2 161.8 30.4 9.3 -24.5 9.2 -23.5 9.0 -22.8 9.3 -23.6
2026-02-14T23:19:31.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:19:31.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:19:31.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.887958
2026-02-14T23:19:31.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:19:31.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:19:31.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:19:31.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:19:31.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:19:31.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:19:09', tmtdew=6.42, humidity=64.3, cloud=0.0, wind=32.64, temperature=8.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:19:10', seeing=3.3, atlas_timestamp='2026-02-14T21:18:39.571', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, 0.015250000000001762, 0.008750000000000924, -0.034000000000000696, 0.03399999999999892, 0.02925000000000111, 0.016000000000000014, 0.01025000000000098, 0.037499999999999645, 0.0030000000000001137, -0.03575000000000017, 0.02099999999999902, 0.06299999999999883, 0.024250000000000327, 0.027999999999998693, 0.03500000000000014, 0.06325000000000003, 0.0600000000000005, -0.0005000000000006111, 0.023749999999999716, 0.04049999999999798, 0.018749999999998934, -0.03474999999999895, 0.03325000000000067, 0.05599999999999916, 0.046499999999999986, 0.02275000000000027, 0.02450000000000152, 0.10100000000000087, 0.08450000000000202, 0.05000000000000071, 0.09500000000000064, 0.025749999999998607], zp_timestamp='2026-02-14T21:16:00')
2026-02-14T23:19:31.344 [DEBUG] [Thread-193933] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:19:31.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-14T23:19:31.435 [DEBUG] [Thread-193936] [transport.py] [_log()] starting thread (client mode): 0xa2d6caf0
2026-02-14T23:19:31.435 [DEBUG] [Thread-193936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:19:31.450 [DEBUG] [Thread-193936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:19:31.450 [INFO] [Thread-193936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:19:31.458 [DEBUG] [Thread-193936] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:19:31.458 [DEBUG] [Thread-193936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:19:31.459 [DEBUG] [Thread-193936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:19:31.459 [DEBUG] [Thread-193936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:19:31.459 [DEBUG] [Thread-193936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:19:31.459 [DEBUG] [Thread-193936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:19:31.459 [DEBUG] [Thread-193936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:19:31.459 [DEBUG] [Thread-193936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:19:31.459 [DEBUG] [Thread-193936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:19:31.459 [DEBUG] [Thread-193936] [transport.py] [_log()] client lang: <none>
2026-02-14T23:19:31.459 [DEBUG] [Thread-193936] [transport.py] [_log()] server lang: <none>
2026-02-14T23:19:31.460 [DEBUG] [Thread-193936] [transport.py] [_log()] kex follows: False
2026-02-14T23:19:31.460 [DEBUG] [Thread-193936] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:19:31.460 [DEBUG] [Thread-193936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:19:31.460 [DEBUG] [Thread-193936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:19:31.460 [DEBUG] [Thread-193936] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:19:31.460 [DEBUG] [Thread-193936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:19:31.460 [DEBUG] [Thread-193936] [transport.py] [_log()] Compression: none
2026-02-14T23:19:31.461 [DEBUG] [Thread-193936] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:19:31.519 [DEBUG] [Thread-193936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:19:31.520 [DEBUG] [Thread-193936] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:19:31.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:19:31.521 [DEBUG] [Thread-193936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:19:31.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:19:31.579 [DEBUG] [Thread-193936] [transport.py] [_log()] userauth is OK
2026-02-14T23:19:31.579 [DEBUG] [Thread-193936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:19:31.579 [DEBUG] [Thread-193936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:19:31.579 [DEBUG] [Thread-193936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:19:31.579 [DEBUG] [Thread-193936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:19:31.597 [INFO] [Thread-193936] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:19:31.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-14T23:19:31.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:19:32.435 [DEBUG] [Thread-193936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:19:32.435 [DEBUG] [Thread-193936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:19:32.482 [DEBUG] [Thread-193936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:19:32.482 [DEBUG] [Thread-193936] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:19:32.491 [DEBUG] [Thread-193936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:19:32.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:19:32.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-14T23:19:32.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:19:32.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:19:32.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:19:32.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:19:32.523 [DEBUG] [Thread-193936] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:19:34.721 [DEBUG] [Thread-193938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:19:49.783 [DEBUG] [Thread-193939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:20:02.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:20:02.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:20:02.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-14T23:20:04.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 19, 44), 6.38, 64.28, 0.0, 34.05, 9.02, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:20:04.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:19:44
2026-02-14T23:20:04.643 [DEBUG] [Thread-193940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:20:04.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:20:04.818 [DEBUG] [Thread-193941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:20:04.943 [DEBUG] [Thread-193942] [transport.py] [_log()] starting thread (client mode): 0xa2d13520
2026-02-14T23:20:04.943 [DEBUG] [Thread-193942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:20:04.964 [DEBUG] [Thread-193942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:20:04.964 [INFO] [Thread-193942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:20:04.967 [DEBUG] [Thread-193942] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:20:04.967 [DEBUG] [Thread-193942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:20:04.967 [DEBUG] [Thread-193942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:20:04.967 [DEBUG] [Thread-193942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:20:04.967 [DEBUG] [Thread-193942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:20:04.967 [DEBUG] [Thread-193942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:20:04.967 [DEBUG] [Thread-193942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:20:04.967 [DEBUG] [Thread-193942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:20:04.967 [DEBUG] [Thread-193942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:20:04.967 [DEBUG] [Thread-193942] [transport.py] [_log()] client lang: <none>
2026-02-14T23:20:04.967 [DEBUG] [Thread-193942] [transport.py] [_log()] server lang: <none>
2026-02-14T23:20:04.967 [DEBUG] [Thread-193942] [transport.py] [_log()] kex follows: False
2026-02-14T23:20:04.967 [DEBUG] [Thread-193942] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:20:04.967 [DEBUG] [Thread-193942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:20:04.967 [DEBUG] [Thread-193942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:20:04.967 [DEBUG] [Thread-193942] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:20:04.967 [DEBUG] [Thread-193942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:20:04.967 [DEBUG] [Thread-193942] [transport.py] [_log()] Compression: none
2026-02-14T23:20:04.967 [DEBUG] [Thread-193942] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:20:04.984 [DEBUG] [Thread-193942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:20:04.984 [DEBUG] [Thread-193942] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:20:04.985 [DEBUG] [Thread-193942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:20:04.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:20:04.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:20:05.029 [DEBUG] [Thread-193942] [transport.py] [_log()] userauth is OK
2026-02-14T23:20:05.030 [DEBUG] [Thread-193942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:20:05.030 [DEBUG] [Thread-193942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:20:05.030 [DEBUG] [Thread-193942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:20:05.030 [DEBUG] [Thread-193942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:20:05.055 [INFO] [Thread-193942] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:20:05.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:20:05.995 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:20:05.996 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:20:06.495 [DEBUG] [Thread-193942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:20:06.495 [DEBUG] [Thread-193942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:20:06.496 [DEBUG] [Thread-193942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:20:06.536 [DEBUG] [Thread-193942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:20:06.537 [DEBUG] [Thread-193942] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:20:06.540 [DEBUG] [Thread-193942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:20:06.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:20:06.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:20:06.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:20:06.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:20:06.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:20:06.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:20:06.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:20:06.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:20:06.601 [DEBUG] [Thread-193942] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:20:06.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:20:06.601 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-02-14T23:20:06.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:19:44', tmtdew=6.38, humidity=64.28, cloud=0.0, wind=34.05, temperature=9.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:19:45', seeing=3.35, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[-0.021250000000000213, 0.015250000000001762, 0.008750000000000924, -0.034000000000000696, 0.03399999999999892, 0.02925000000000111, 0.016000000000000014, 0.01025000000000098, 0.037499999999999645, 0.0030000000000001137, -0.03575000000000017, 0.02099999999999902, 0.06299999999999883, 0.024250000000000327, 0.027999999999998693, 0.03500000000000014, 0.06325000000000003, 0.0600000000000005, -0.0005000000000006111, 0.023749999999999716, 0.04049999999999798, 0.018749999999998934, -0.03474999999999895, 0.03325000000000067, 0.05599999999999916, 0.046499999999999986, 0.02275000000000027, 0.02450000000000152, 0.10100000000000087, 0.08450000000000202, 0.05000000000000071, 0.09500000000000064, 0.025749999999998607], zp_timestamp='2026-02-14T21:16:00')
2026-02-14T23:20:06.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-14T23:20:19.854 [DEBUG] [Thread-193945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:20:34.933 [DEBUG] [Thread-193946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:20:49.970 [DEBUG] [Thread-193947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:21:04.710 [DEBUG] [Thread-193948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:21:05.004 [DEBUG] [Thread-193949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:21:06.194 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:21:06.195 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:21:20.039 [DEBUG] [Thread-193950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:21:35.078 [DEBUG] [Thread-193951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:21:50.115 [DEBUG] [Thread-193952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:22:04.779 [DEBUG] [Thread-193953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:22:05.150 [DEBUG] [Thread-193954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:22:06.411 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:22:06.412 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:22:19.320 [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-14T23:22:20.185 [DEBUG] [Thread-193955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:22:35.221 [DEBUG] [Thread-193956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:22:49.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:22:49.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:22:49.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:22:50.260 [DEBUG] [Thread-193957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:22:51.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 22, 41), 6.48, 63.86, 0.0, 34.23, 9.18, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:22:51.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:22:41
2026-02-14T23:22:51.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:22:52.058 [DEBUG] [Thread-193958] [transport.py] [_log()] starting thread (client mode): 0xa5740820
2026-02-14T23:22:52.058 [DEBUG] [Thread-193958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:22:52.079 [DEBUG] [Thread-193958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:22:52.079 [INFO] [Thread-193958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:22:52.082 [DEBUG] [Thread-193958] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:22:52.082 [DEBUG] [Thread-193958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:22:52.082 [DEBUG] [Thread-193958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:22:52.082 [DEBUG] [Thread-193958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:22:52.082 [DEBUG] [Thread-193958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:22:52.082 [DEBUG] [Thread-193958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:22:52.082 [DEBUG] [Thread-193958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:22:52.082 [DEBUG] [Thread-193958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:22:52.082 [DEBUG] [Thread-193958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:22:52.082 [DEBUG] [Thread-193958] [transport.py] [_log()] client lang: <none>
2026-02-14T23:22:52.082 [DEBUG] [Thread-193958] [transport.py] [_log()] server lang: <none>
2026-02-14T23:22:52.082 [DEBUG] [Thread-193958] [transport.py] [_log()] kex follows: False
2026-02-14T23:22:52.082 [DEBUG] [Thread-193958] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:22:52.082 [DEBUG] [Thread-193958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:22:52.082 [DEBUG] [Thread-193958] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:22:52.082 [DEBUG] [Thread-193958] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:22:52.082 [DEBUG] [Thread-193958] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:22:52.083 [DEBUG] [Thread-193958] [transport.py] [_log()] Compression: none
2026-02-14T23:22:52.083 [DEBUG] [Thread-193958] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:22:52.099 [DEBUG] [Thread-193958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:22:52.099 [DEBUG] [Thread-193958] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:22:52.099 [DEBUG] [Thread-193958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:22:52.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:22:52.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:22:52.100 [DEBUG] [Thread-193958] [transport.py] [_log()] userauth is OK
2026-02-14T23:22:52.100 [DEBUG] [Thread-193958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:22:52.100 [DEBUG] [Thread-193958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:22:52.100 [DEBUG] [Thread-193958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:22:52.100 [DEBUG] [Thread-193958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:22:52.115 [INFO] [Thread-193958] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:22:52.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:22:52.846 [DEBUG] [Thread-193958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:22:52.847 [DEBUG] [Thread-193958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:22:52.848 [DEBUG] [Thread-193958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:22:52.887 [DEBUG] [Thread-193958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:22:52.887 [DEBUG] [Thread-193958] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:22:52.889 [DEBUG] [Thread-193958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:22:52.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:22:52.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:22:52.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:22:52.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:22:52.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:22:52.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:22:52.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:22:52.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:22:52.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:22:52.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.890389 -999.00   +8.80  18.69     69   +3.60 1 1 1 1 1     0    0 5.17 -9.90 ZNESW 23.0 18.7 160.2 28.1 9.3 -24.5 9.1 -23.5 9.0 -22.6 9.3 -23.6
2026-02-14T23:22:52.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:22:52.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:22:52.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.890389
2026-02-14T23:22:52.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:22:52.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:22:52.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:22:52.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:22:52.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:22:52.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:22:41', tmtdew=6.48, humidity=63.86, cloud=0.0, wind=34.23, temperature=9.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:22:41', seeing=3.87, atlas_timestamp='2026-02-14T21:22:09.610', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.0072499999999990905, -0.03774999999999906, 0.015499999999999403, -0.0045000000000001705, 0.035250000000001336, 0.01699999999999946, -0.012749999999998707, -0.0015000000000000568, 0.010500000000000398, -0.08825000000000038, -0.0009999999999994458, 0.05799999999999983, 0.027249999999998664, 0.028499999999999304, 0.0030000000000001137, 0.04124999999999979, 0.09050000000000047, -0.0065000000000008384, -0.0042500000000025295, 0.04899999999999949, -0.0022500000000018616, -0.004749999999999588, 0.00975000000000037, 0.05999999999999872, -0.014499999999999957, -0.008250000000000313, -0.0015000000000000568, 0.09200000000000053, 0.0940000000000012, 0.038000000000000256, 0.0235000000000003, -0.0007500000000000284], zp_timestamp='2026-02-14T21:19:00')
2026-02-14T23:22:52.909 [DEBUG] [Thread-193958] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:22:52.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-14T23:22:53.001 [DEBUG] [Thread-193961] [transport.py] [_log()] starting thread (client mode): 0xa5743610
2026-02-14T23:22:53.002 [DEBUG] [Thread-193961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:22:53.017 [DEBUG] [Thread-193961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:22:53.018 [INFO] [Thread-193961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:22:53.025 [DEBUG] [Thread-193961] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:22:53.025 [DEBUG] [Thread-193961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:22:53.025 [DEBUG] [Thread-193961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:22:53.025 [DEBUG] [Thread-193961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:22:53.025 [DEBUG] [Thread-193961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:22:53.026 [DEBUG] [Thread-193961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:22:53.026 [DEBUG] [Thread-193961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:22:53.026 [DEBUG] [Thread-193961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:22:53.026 [DEBUG] [Thread-193961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:22:53.026 [DEBUG] [Thread-193961] [transport.py] [_log()] client lang: <none>
2026-02-14T23:22:53.026 [DEBUG] [Thread-193961] [transport.py] [_log()] server lang: <none>
2026-02-14T23:22:53.026 [DEBUG] [Thread-193961] [transport.py] [_log()] kex follows: False
2026-02-14T23:22:53.026 [DEBUG] [Thread-193961] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:22:53.026 [DEBUG] [Thread-193961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:22:53.026 [DEBUG] [Thread-193961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:22:53.026 [DEBUG] [Thread-193961] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:22:53.026 [DEBUG] [Thread-193961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:22:53.027 [DEBUG] [Thread-193961] [transport.py] [_log()] Compression: none
2026-02-14T23:22:53.027 [DEBUG] [Thread-193961] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:22:53.083 [DEBUG] [Thread-193961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:22:53.084 [DEBUG] [Thread-193961] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:22:53.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:22:53.085 [DEBUG] [Thread-193961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:22:53.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:22:53.142 [DEBUG] [Thread-193961] [transport.py] [_log()] userauth is OK
2026-02-14T23:22:53.143 [DEBUG] [Thread-193961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:22:53.143 [DEBUG] [Thread-193961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:22:53.143 [DEBUG] [Thread-193961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:22:53.143 [DEBUG] [Thread-193961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:22:53.163 [INFO] [Thread-193961] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:22:53.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-14T23:22:53.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:22:53.964 [DEBUG] [Thread-193961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:22:53.964 [DEBUG] [Thread-193961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:22:54.012 [DEBUG] [Thread-193961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:22:54.013 [DEBUG] [Thread-193961] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:22:54.022 [DEBUG] [Thread-193961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:22:54.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:22:54.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-14T23:22:54.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-14T23:22:54.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:22:54.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:22:54.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:22:54.059 [DEBUG] [Thread-193961] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:23:04.843 [DEBUG] [Thread-193963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:23:05.298 [DEBUG] [Thread-193964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:23:06.613 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:23:06.615 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:23:20.357 [DEBUG] [Thread-193965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:23:24.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:23:24.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:23:24.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-14T23:23:25.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 23, 16), 6.28, 64.45, 0.0, 34.09, 8.89, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:23:25.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:23:16
2026-02-14T23:23:26.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:23:26.383 [DEBUG] [Thread-193966] [transport.py] [_log()] starting thread (client mode): 0xa2d035b0
2026-02-14T23:23:26.383 [DEBUG] [Thread-193966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:23:26.402 [DEBUG] [Thread-193966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:23:26.402 [INFO] [Thread-193966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:23:26.405 [DEBUG] [Thread-193966] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:23:26.405 [DEBUG] [Thread-193966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:23:26.405 [DEBUG] [Thread-193966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:23:26.405 [DEBUG] [Thread-193966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:23:26.405 [DEBUG] [Thread-193966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:23:26.405 [DEBUG] [Thread-193966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:23:26.405 [DEBUG] [Thread-193966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:23:26.405 [DEBUG] [Thread-193966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:23:26.406 [DEBUG] [Thread-193966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:23:26.406 [DEBUG] [Thread-193966] [transport.py] [_log()] client lang: <none>
2026-02-14T23:23:26.406 [DEBUG] [Thread-193966] [transport.py] [_log()] server lang: <none>
2026-02-14T23:23:26.406 [DEBUG] [Thread-193966] [transport.py] [_log()] kex follows: False
2026-02-14T23:23:26.406 [DEBUG] [Thread-193966] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:23:26.406 [DEBUG] [Thread-193966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:23:26.406 [DEBUG] [Thread-193966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:23:26.406 [DEBUG] [Thread-193966] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:23:26.406 [DEBUG] [Thread-193966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:23:26.406 [DEBUG] [Thread-193966] [transport.py] [_log()] Compression: none
2026-02-14T23:23:26.406 [DEBUG] [Thread-193966] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:23:26.424 [DEBUG] [Thread-193966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:23:26.424 [DEBUG] [Thread-193966] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:23:26.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:23:26.425 [DEBUG] [Thread-193966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:23:26.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:23:26.427 [DEBUG] [Thread-193966] [transport.py] [_log()] userauth is OK
2026-02-14T23:23:26.428 [DEBUG] [Thread-193966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:23:26.428 [DEBUG] [Thread-193966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:23:26.428 [DEBUG] [Thread-193966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:23:26.428 [DEBUG] [Thread-193966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:23:26.453 [INFO] [Thread-193966] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:23:26.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:23:27.023 [DEBUG] [Thread-193966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:23:27.023 [DEBUG] [Thread-193966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:23:27.024 [DEBUG] [Thread-193966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:23:27.064 [DEBUG] [Thread-193966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:23:27.064 [DEBUG] [Thread-193966] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:23:27.068 [DEBUG] [Thread-193966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:23:27.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:23:27.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:23:27.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:23:27.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:23:27.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:23:27.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:23:27.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:23:27.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:23:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:23:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.890736 -999.00   +8.80  23.63     69   +3.60 1 1 1 1 1     0    0 5.09 -9.43 ZNESW 26.3 23.6 164.2 27.6 9.3 -24.5 9.1 -23.5 8.9 -22.4 9.3 -23.8
2026-02-14T23:23:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:23:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:23:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.890736
2026-02-14T23:23:27.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:23:27.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:23:27.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:23:27.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:23:27.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:23:27.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:23:16', tmtdew=6.28, humidity=64.45, cloud=0.0, wind=34.09, temperature=8.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:23:17', seeing=0.0, atlas_timestamp='2026-02-14T21:22:39.590', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.0072499999999990905, -0.03774999999999906, 0.015499999999999403, -0.0045000000000001705, 0.035250000000001336, 0.01699999999999946, -0.012749999999998707, -0.0015000000000000568, 0.010500000000000398, -0.08825000000000038, -0.0009999999999994458, 0.05799999999999983, 0.027249999999998664, 0.028499999999999304, 0.0030000000000001137, 0.04124999999999979, 0.09050000000000047, -0.0065000000000008384, -0.0042500000000025295, 0.04899999999999949, -0.0022500000000018616, -0.004749999999999588, 0.00975000000000037, 0.05999999999999872, -0.014499999999999957, -0.008250000000000313, -0.0015000000000000568, 0.09200000000000053, 0.0940000000000012, 0.038000000000000256, 0.0235000000000003, -0.0007500000000000284], zp_timestamp='2026-02-14T21:19:00')
2026-02-14T23:23:27.093 [DEBUG] [Thread-193966] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:23:27.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-14T23:23:27.188 [DEBUG] [Thread-193969] [transport.py] [_log()] starting thread (client mode): 0xa2d02350
2026-02-14T23:23:27.189 [DEBUG] [Thread-193969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:23:27.203 [DEBUG] [Thread-193969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:23:27.204 [INFO] [Thread-193969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:23:27.211 [DEBUG] [Thread-193969] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:23:27.212 [DEBUG] [Thread-193969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:23:27.212 [DEBUG] [Thread-193969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:23:27.212 [DEBUG] [Thread-193969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:23:27.212 [DEBUG] [Thread-193969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:23:27.212 [DEBUG] [Thread-193969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:23:27.212 [DEBUG] [Thread-193969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:23:27.213 [DEBUG] [Thread-193969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:23:27.213 [DEBUG] [Thread-193969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:23:27.213 [DEBUG] [Thread-193969] [transport.py] [_log()] client lang: <none>
2026-02-14T23:23:27.213 [DEBUG] [Thread-193969] [transport.py] [_log()] server lang: <none>
2026-02-14T23:23:27.213 [DEBUG] [Thread-193969] [transport.py] [_log()] kex follows: False
2026-02-14T23:23:27.213 [DEBUG] [Thread-193969] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:23:27.213 [DEBUG] [Thread-193969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:23:27.213 [DEBUG] [Thread-193969] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:23:27.214 [DEBUG] [Thread-193969] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:23:27.214 [DEBUG] [Thread-193969] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:23:27.214 [DEBUG] [Thread-193969] [transport.py] [_log()] Compression: none
2026-02-14T23:23:27.214 [DEBUG] [Thread-193969] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:23:27.271 [DEBUG] [Thread-193969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:23:27.272 [DEBUG] [Thread-193969] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:23:27.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:23:27.273 [DEBUG] [Thread-193969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:23:27.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:23:27.327 [DEBUG] [Thread-193969] [transport.py] [_log()] userauth is OK
2026-02-14T23:23:27.328 [DEBUG] [Thread-193969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:23:27.328 [DEBUG] [Thread-193969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:23:27.328 [DEBUG] [Thread-193969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:23:27.328 [DEBUG] [Thread-193969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:23:27.344 [INFO] [Thread-193969] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:23:27.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-14T23:23:27.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:23:28.138 [DEBUG] [Thread-193969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:23:28.138 [DEBUG] [Thread-193969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:23:28.186 [DEBUG] [Thread-193969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:23:28.186 [DEBUG] [Thread-193969] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:23:28.195 [DEBUG] [Thread-193969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:23:28.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:23:28.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-14T23:23:28.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-14T23:23:28.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:23:28.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:23:28.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:23:28.230 [DEBUG] [Thread-193969] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:23:35.393 [DEBUG] [Thread-193971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:23:50.446 [DEBUG] [Thread-193972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:23:58.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:23:58.252 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:23:58.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-14T23:24:00.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 23, 51), 6.31, 64.55, 0.0, 36.03, 8.97, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:24:00.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:23:51
2026-02-14T23:24:00.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:24:00.635 [DEBUG] [Thread-193973] [transport.py] [_log()] starting thread (client mode): 0xa5742440
2026-02-14T23:24:00.635 [DEBUG] [Thread-193973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:24:00.653 [DEBUG] [Thread-193973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:24:00.654 [INFO] [Thread-193973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:24:00.657 [DEBUG] [Thread-193973] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:24:00.657 [DEBUG] [Thread-193973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:24:00.657 [DEBUG] [Thread-193973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:24:00.657 [DEBUG] [Thread-193973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:24:00.657 [DEBUG] [Thread-193973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:24:00.657 [DEBUG] [Thread-193973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:24:00.657 [DEBUG] [Thread-193973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:24:00.657 [DEBUG] [Thread-193973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:24:00.657 [DEBUG] [Thread-193973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:24:00.658 [DEBUG] [Thread-193973] [transport.py] [_log()] client lang: <none>
2026-02-14T23:24:00.658 [DEBUG] [Thread-193973] [transport.py] [_log()] server lang: <none>
2026-02-14T23:24:00.658 [DEBUG] [Thread-193973] [transport.py] [_log()] kex follows: False
2026-02-14T23:24:00.658 [DEBUG] [Thread-193973] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:24:00.658 [DEBUG] [Thread-193973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:24:00.658 [DEBUG] [Thread-193973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:24:00.658 [DEBUG] [Thread-193973] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:24:00.658 [DEBUG] [Thread-193973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:24:00.658 [DEBUG] [Thread-193973] [transport.py] [_log()] Compression: none
2026-02-14T23:24:00.658 [DEBUG] [Thread-193973] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:24:00.675 [DEBUG] [Thread-193973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:24:00.675 [DEBUG] [Thread-193973] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:24:00.676 [DEBUG] [Thread-193973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:24:00.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:24:00.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:24:00.678 [DEBUG] [Thread-193973] [transport.py] [_log()] userauth is OK
2026-02-14T23:24:00.678 [DEBUG] [Thread-193973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:24:00.678 [DEBUG] [Thread-193973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:24:00.678 [DEBUG] [Thread-193973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:24:00.678 [DEBUG] [Thread-193973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:24:00.704 [INFO] [Thread-193973] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:24:00.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:24:01.362 [DEBUG] [Thread-193973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:24:01.362 [DEBUG] [Thread-193973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:24:01.363 [DEBUG] [Thread-193973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:24:01.403 [DEBUG] [Thread-193973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:24:01.404 [DEBUG] [Thread-193973] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:24:01.408 [DEBUG] [Thread-193973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:24:01.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:24:01.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:24:01.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:24:01.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:24:01.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:24:01.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:24:01.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:24:01.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:24:01.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:24:01.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.891083 -999.00   +8.80  23.92     69   +3.60 1 1 1 1 1     0    0 5.07 -10.83 ZNESW 24.0 23.9 164.6 37.7 9.3 -24.6 9.1 -23.6 8.9 -22.6 9.2 -23.8
2026-02-14T23:24:01.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:24:01.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:24:01.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.891083
2026-02-14T23:24:01.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:24:01.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:24:01.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:24:01.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:24:01.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:24:01.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:23:51', tmtdew=6.31, humidity=64.55, cloud=0.0, wind=36.03, temperature=8.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:23:51', seeing=3.22, atlas_timestamp='2026-02-14T21:23:09.571', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.0072499999999990905, -0.03774999999999906, 0.015499999999999403, -0.0045000000000001705, 0.035250000000001336, 0.01699999999999946, -0.012749999999998707, -0.0015000000000000568, 0.010500000000000398, -0.08825000000000038, -0.0009999999999994458, 0.05799999999999983, 0.027249999999998664, 0.028499999999999304, 0.0030000000000001137, 0.04124999999999979, 0.09050000000000047, -0.0065000000000008384, -0.0042500000000025295, 0.04899999999999949, -0.0022500000000018616, -0.004749999999999588, 0.00975000000000037, 0.05999999999999872, -0.014499999999999957, -0.008250000000000313, -0.0015000000000000568, 0.09200000000000053, 0.0940000000000012, 0.038000000000000256, 0.0235000000000003, -0.0007500000000000284], zp_timestamp='2026-02-14T21:22:00')
2026-02-14T23:24:01.435 [DEBUG] [Thread-193973] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:24:01.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-14T23:24:01.529 [DEBUG] [Thread-193976] [transport.py] [_log()] starting thread (client mode): 0xa2d03dc0
2026-02-14T23:24:01.530 [DEBUG] [Thread-193976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:24:01.544 [DEBUG] [Thread-193976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:24:01.545 [INFO] [Thread-193976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:24:01.552 [DEBUG] [Thread-193976] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:24:01.553 [DEBUG] [Thread-193976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:24:01.553 [DEBUG] [Thread-193976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:24:01.553 [DEBUG] [Thread-193976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:24:01.553 [DEBUG] [Thread-193976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:24:01.553 [DEBUG] [Thread-193976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:24:01.553 [DEBUG] [Thread-193976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:24:01.553 [DEBUG] [Thread-193976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:24:01.554 [DEBUG] [Thread-193976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:24:01.554 [DEBUG] [Thread-193976] [transport.py] [_log()] client lang: <none>
2026-02-14T23:24:01.554 [DEBUG] [Thread-193976] [transport.py] [_log()] server lang: <none>
2026-02-14T23:24:01.554 [DEBUG] [Thread-193976] [transport.py] [_log()] kex follows: False
2026-02-14T23:24:01.554 [DEBUG] [Thread-193976] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:24:01.554 [DEBUG] [Thread-193976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:24:01.554 [DEBUG] [Thread-193976] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:24:01.555 [DEBUG] [Thread-193976] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:24:01.555 [DEBUG] [Thread-193976] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:24:01.555 [DEBUG] [Thread-193976] [transport.py] [_log()] Compression: none
2026-02-14T23:24:01.555 [DEBUG] [Thread-193976] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:24:01.611 [DEBUG] [Thread-193976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:24:01.612 [DEBUG] [Thread-193976] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:24:01.612 [DEBUG] [Thread-193976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:24:01.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:24:01.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:24:01.667 [DEBUG] [Thread-193976] [transport.py] [_log()] userauth is OK
2026-02-14T23:24:01.668 [DEBUG] [Thread-193976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:24:01.668 [DEBUG] [Thread-193976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:24:01.668 [DEBUG] [Thread-193976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:24:01.668 [DEBUG] [Thread-193976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:24:01.687 [INFO] [Thread-193976] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:24:01.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-14T23:24:01.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:24:02.510 [DEBUG] [Thread-193976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:24:02.511 [DEBUG] [Thread-193976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:24:02.558 [DEBUG] [Thread-193976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:24:02.559 [DEBUG] [Thread-193976] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:24:02.568 [DEBUG] [Thread-193976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:24:02.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:24:02.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-14T23:24:02.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-14T23:24:02.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:24:02.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:24:02.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:24:02.605 [DEBUG] [Thread-193976] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:24:04.903 [DEBUG] [Thread-193978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:24:05.483 [DEBUG] [Thread-193979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:24:06.814 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:24:06.815 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:24:20.539 [DEBUG] [Thread-193980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:24:32.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:24:32.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:24:32.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-14T23:24:34.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 24, 26), 6.3, 64.59, 0.0, 35.69, 8.96, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:24:34.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:24:26
2026-02-14T23:24:34.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:24:34.981 [DEBUG] [Thread-193981] [transport.py] [_log()] starting thread (client mode): 0xa5741a80
2026-02-14T23:24:34.981 [DEBUG] [Thread-193981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:24:35.002 [DEBUG] [Thread-193981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:24:35.002 [INFO] [Thread-193981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:24:35.005 [DEBUG] [Thread-193981] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:24:35.005 [DEBUG] [Thread-193981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:24:35.005 [DEBUG] [Thread-193981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:24:35.005 [DEBUG] [Thread-193981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:24:35.005 [DEBUG] [Thread-193981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:24:35.005 [DEBUG] [Thread-193981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:24:35.005 [DEBUG] [Thread-193981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:24:35.005 [DEBUG] [Thread-193981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:24:35.005 [DEBUG] [Thread-193981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:24:35.005 [DEBUG] [Thread-193981] [transport.py] [_log()] client lang: <none>
2026-02-14T23:24:35.005 [DEBUG] [Thread-193981] [transport.py] [_log()] server lang: <none>
2026-02-14T23:24:35.005 [DEBUG] [Thread-193981] [transport.py] [_log()] kex follows: False
2026-02-14T23:24:35.005 [DEBUG] [Thread-193981] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:24:35.005 [DEBUG] [Thread-193981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:24:35.005 [DEBUG] [Thread-193981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:24:35.005 [DEBUG] [Thread-193981] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:24:35.005 [DEBUG] [Thread-193981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:24:35.005 [DEBUG] [Thread-193981] [transport.py] [_log()] Compression: none
2026-02-14T23:24:35.005 [DEBUG] [Thread-193981] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:24:35.022 [DEBUG] [Thread-193981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:24:35.023 [DEBUG] [Thread-193981] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:24:35.023 [DEBUG] [Thread-193981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:24:35.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:24:35.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:24:35.025 [DEBUG] [Thread-193981] [transport.py] [_log()] userauth is OK
2026-02-14T23:24:35.025 [DEBUG] [Thread-193981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:24:35.026 [DEBUG] [Thread-193981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:24:35.026 [DEBUG] [Thread-193981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:24:35.026 [DEBUG] [Thread-193981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:24:35.050 [INFO] [Thread-193981] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:24:35.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:24:35.574 [DEBUG] [Thread-193983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:24:35.691 [DEBUG] [Thread-193981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:24:35.691 [DEBUG] [Thread-193981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:24:35.692 [DEBUG] [Thread-193981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:24:35.732 [DEBUG] [Thread-193981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:24:35.733 [DEBUG] [Thread-193981] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:24:35.736 [DEBUG] [Thread-193981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:24:35.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:24:35.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:24:35.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:24:35.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:24:35.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:24:35.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:24:35.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:24:35.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:24:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:24:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.891430 -999.00   +8.80  23.01     69   +3.60 1 1 1 1 1     0    0 4.98 -11.32 ZNESW 27.7 23.0 163.8 38.3 9.3 -24.5 9.1 -23.5 8.9 -22.6 9.3 -23.8
2026-02-14T23:24:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:24:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:24:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.891430
2026-02-14T23:24:35.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:24:35.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:24:35.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:24:35.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:24:35.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:24:35.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:24:26', tmtdew=6.3, humidity=64.59, cloud=0.0, wind=35.69, temperature=8.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:24:27', seeing=3.9, atlas_timestamp='2026-02-14T21:23:39.552', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.0072499999999990905, -0.03774999999999906, 0.015499999999999403, -0.0045000000000001705, 0.035250000000001336, 0.01699999999999946, -0.012749999999998707, -0.0015000000000000568, 0.010500000000000398, -0.08825000000000038, -0.0009999999999994458, 0.05799999999999983, 0.027249999999998664, 0.028499999999999304, 0.0030000000000001137, 0.04124999999999979, 0.09050000000000047, -0.0065000000000008384, -0.0042500000000025295, 0.04899999999999949, -0.0022500000000018616, -0.004749999999999588, 0.00975000000000037, 0.05999999999999872, -0.014499999999999957, -0.008250000000000313, -0.0015000000000000568, 0.09200000000000053, 0.0940000000000012, 0.038000000000000256, 0.0235000000000003, -0.0007500000000000284], zp_timestamp='2026-02-14T21:22:00')
2026-02-14T23:24:35.763 [DEBUG] [Thread-193981] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:24:35.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T23:24:35.865 [DEBUG] [Thread-193985] [transport.py] [_log()] starting thread (client mode): 0xa57d57e0
2026-02-14T23:24:35.865 [DEBUG] [Thread-193985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:24:35.880 [DEBUG] [Thread-193985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:24:35.880 [INFO] [Thread-193985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:24:35.887 [DEBUG] [Thread-193985] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:24:35.888 [DEBUG] [Thread-193985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:24:35.888 [DEBUG] [Thread-193985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:24:35.888 [DEBUG] [Thread-193985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:24:35.888 [DEBUG] [Thread-193985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:24:35.888 [DEBUG] [Thread-193985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:24:35.888 [DEBUG] [Thread-193985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:24:35.888 [DEBUG] [Thread-193985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:24:35.888 [DEBUG] [Thread-193985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:24:35.889 [DEBUG] [Thread-193985] [transport.py] [_log()] client lang: <none>
2026-02-14T23:24:35.889 [DEBUG] [Thread-193985] [transport.py] [_log()] server lang: <none>
2026-02-14T23:24:35.889 [DEBUG] [Thread-193985] [transport.py] [_log()] kex follows: False
2026-02-14T23:24:35.889 [DEBUG] [Thread-193985] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:24:35.889 [DEBUG] [Thread-193985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:24:35.889 [DEBUG] [Thread-193985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:24:35.889 [DEBUG] [Thread-193985] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:24:35.890 [DEBUG] [Thread-193985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:24:35.890 [DEBUG] [Thread-193985] [transport.py] [_log()] Compression: none
2026-02-14T23:24:35.890 [DEBUG] [Thread-193985] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:24:35.947 [DEBUG] [Thread-193985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:24:35.947 [DEBUG] [Thread-193985] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:24:35.948 [DEBUG] [Thread-193985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:24:35.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:24:35.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:24:36.003 [DEBUG] [Thread-193985] [transport.py] [_log()] userauth is OK
2026-02-14T23:24:36.004 [DEBUG] [Thread-193985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:24:36.004 [DEBUG] [Thread-193985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:24:36.004 [DEBUG] [Thread-193985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:24:36.004 [DEBUG] [Thread-193985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:24:36.028 [INFO] [Thread-193985] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:24:36.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-14T23:24:36.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:24:36.816 [DEBUG] [Thread-193985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:24:36.817 [DEBUG] [Thread-193985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:24:36.865 [DEBUG] [Thread-193985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:24:36.865 [DEBUG] [Thread-193985] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:24:36.875 [DEBUG] [Thread-193985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:24:36.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:24:36.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-14T23:24:36.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:24:36.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:24:36.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:24:36.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:24:36.911 [DEBUG] [Thread-193985] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:24:50.611 [DEBUG] [Thread-193987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:25:04.959 [DEBUG] [Thread-193988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:25:05.659 [DEBUG] [Thread-193989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:25:06.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:25:06.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:25:06.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-14T23:25:07.014 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:25:07.015 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:25:08.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 24, 26), 6.3, 64.59, 0.0, 35.69, 8.96, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:25:08.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:24:26
2026-02-14T23:25:09.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:25:09.398 [DEBUG] [Thread-193990] [transport.py] [_log()] starting thread (client mode): 0xa2d6add0
2026-02-14T23:25:09.398 [DEBUG] [Thread-193990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:25:09.417 [DEBUG] [Thread-193990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:25:09.417 [INFO] [Thread-193990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:25:09.420 [DEBUG] [Thread-193990] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:25:09.420 [DEBUG] [Thread-193990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:25:09.420 [DEBUG] [Thread-193990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:25:09.420 [DEBUG] [Thread-193990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:25:09.420 [DEBUG] [Thread-193990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:25:09.420 [DEBUG] [Thread-193990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:25:09.420 [DEBUG] [Thread-193990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:25:09.420 [DEBUG] [Thread-193990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:25:09.420 [DEBUG] [Thread-193990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:25:09.420 [DEBUG] [Thread-193990] [transport.py] [_log()] client lang: <none>
2026-02-14T23:25:09.421 [DEBUG] [Thread-193990] [transport.py] [_log()] server lang: <none>
2026-02-14T23:25:09.421 [DEBUG] [Thread-193990] [transport.py] [_log()] kex follows: False
2026-02-14T23:25:09.421 [DEBUG] [Thread-193990] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:25:09.421 [DEBUG] [Thread-193990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:25:09.421 [DEBUG] [Thread-193990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:25:09.421 [DEBUG] [Thread-193990] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:25:09.421 [DEBUG] [Thread-193990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:25:09.421 [DEBUG] [Thread-193990] [transport.py] [_log()] Compression: none
2026-02-14T23:25:09.421 [DEBUG] [Thread-193990] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:25:09.429 [DEBUG] [Thread-193990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:25:09.429 [DEBUG] [Thread-193990] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:25:09.429 [DEBUG] [Thread-193990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:25:09.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:25:09.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:25:09.431 [DEBUG] [Thread-193990] [transport.py] [_log()] userauth is OK
2026-02-14T23:25:09.431 [DEBUG] [Thread-193990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:25:09.431 [DEBUG] [Thread-193990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:25:09.431 [DEBUG] [Thread-193990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:25:09.431 [DEBUG] [Thread-193990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:25:09.454 [INFO] [Thread-193990] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:25:09.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:25:10.538 [DEBUG] [Thread-193990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:25:10.538 [DEBUG] [Thread-193990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:25:10.538 [DEBUG] [Thread-193990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:25:10.580 [DEBUG] [Thread-193990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:25:10.580 [DEBUG] [Thread-193990] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:25:10.582 [DEBUG] [Thread-193990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:25:10.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:25:10.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:25:10.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:25:10.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:25:10.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:25:10.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:25:10.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:25:10.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:25:10.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:25:10.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.892125 -999.00   +8.80  24.88     69   +3.60 1 1 1 1 1     0    0 4.96 -13.50 ZNESW 26.5 24.9 171.6 33.6 9.3 -24.4 9.1 -23.5 8.9 -22.4 9.3 -23.7
2026-02-14T23:25:10.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:25:10.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:25:10.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.892125
2026-02-14T23:25:10.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:25:10.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:25:10.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:25:10.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:25:10.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:25:10.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:24:26', tmtdew=6.3, humidity=64.59, cloud=0.0, wind=35.69, temperature=8.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:25:02', seeing=4.21, atlas_timestamp='2026-02-14T21:24:39.600', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.0072499999999990905, -0.03774999999999906, 0.015499999999999403, -0.0045000000000001705, 0.035250000000001336, 0.01699999999999946, -0.012749999999998707, -0.0015000000000000568, 0.010500000000000398, -0.08825000000000038, -0.0009999999999994458, 0.05799999999999983, 0.027249999999998664, 0.028499999999999304, 0.0030000000000001137, 0.04124999999999979, 0.09050000000000047, -0.0065000000000008384, -0.0042500000000025295, 0.04899999999999949, -0.0022500000000018616, -0.004749999999999588, 0.00975000000000037, 0.05999999999999872, -0.014499999999999957, -0.008250000000000313, -0.0015000000000000568, 0.09200000000000053, 0.0940000000000012, 0.038000000000000256, 0.0235000000000003, -0.0007500000000000284], zp_timestamp='2026-02-14T21:22:00')
2026-02-14T23:25:10.608 [DEBUG] [Thread-193990] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:25:10.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-14T23:25:10.701 [DEBUG] [Thread-193993] [transport.py] [_log()] starting thread (client mode): 0xa2d6bd60
2026-02-14T23:25:10.702 [DEBUG] [Thread-193993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:25:10.716 [DEBUG] [Thread-193993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:25:10.716 [INFO] [Thread-193993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:25:10.724 [DEBUG] [Thread-193993] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:25:10.724 [DEBUG] [Thread-193993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:25:10.724 [DEBUG] [Thread-193993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:25:10.724 [DEBUG] [Thread-193993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:25:10.724 [DEBUG] [Thread-193993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:25:10.724 [DEBUG] [Thread-193993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:25:10.724 [DEBUG] [Thread-193993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:25:10.724 [DEBUG] [Thread-193993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:25:10.724 [DEBUG] [Thread-193993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:25:10.724 [DEBUG] [Thread-193993] [transport.py] [_log()] client lang: <none>
2026-02-14T23:25:10.724 [DEBUG] [Thread-193993] [transport.py] [_log()] server lang: <none>
2026-02-14T23:25:10.724 [DEBUG] [Thread-193993] [transport.py] [_log()] kex follows: False
2026-02-14T23:25:10.724 [DEBUG] [Thread-193993] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:25:10.724 [DEBUG] [Thread-193993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:25:10.724 [DEBUG] [Thread-193993] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:25:10.724 [DEBUG] [Thread-193993] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:25:10.724 [DEBUG] [Thread-193993] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:25:10.724 [DEBUG] [Thread-193993] [transport.py] [_log()] Compression: none
2026-02-14T23:25:10.725 [DEBUG] [Thread-193993] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:25:10.783 [DEBUG] [Thread-193993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:25:10.784 [DEBUG] [Thread-193993] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:25:10.784 [DEBUG] [Thread-193993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:25:10.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:25:10.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:25:10.839 [DEBUG] [Thread-193993] [transport.py] [_log()] userauth is OK
2026-02-14T23:25:10.839 [DEBUG] [Thread-193993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:25:10.839 [DEBUG] [Thread-193993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:25:10.840 [DEBUG] [Thread-193993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:25:10.840 [DEBUG] [Thread-193993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:25:10.864 [INFO] [Thread-193993] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:25:10.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-14T23:25:10.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:25:11.625 [DEBUG] [Thread-193993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:25:11.626 [DEBUG] [Thread-193993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:25:11.674 [DEBUG] [Thread-193993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:25:11.674 [DEBUG] [Thread-193993] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:25:11.683 [DEBUG] [Thread-193993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:25:11.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:25:11.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-14T23:25:11.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-14T23:25:11.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:25:11.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:25:11.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:25:11.720 [DEBUG] [Thread-193993] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:25:20.694 [DEBUG] [Thread-193995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:25:35.738 [DEBUG] [Thread-193996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:25:41.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:25:41.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:25:41.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-14T23:25:44.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 25, 1), 6.3, 64.63, 0.0, 38.94, 8.97, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:25:44.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:25:01
2026-02-14T23:25:44.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:25:44.749 [DEBUG] [Thread-193997] [transport.py] [_log()] starting thread (client mode): 0xa2d6ad40
2026-02-14T23:25:44.749 [DEBUG] [Thread-193997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:25:44.770 [DEBUG] [Thread-193997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:25:44.770 [INFO] [Thread-193997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:25:44.773 [DEBUG] [Thread-193997] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:25:44.773 [DEBUG] [Thread-193997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:25:44.773 [DEBUG] [Thread-193997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:25:44.773 [DEBUG] [Thread-193997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:25:44.773 [DEBUG] [Thread-193997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:25:44.773 [DEBUG] [Thread-193997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:25:44.773 [DEBUG] [Thread-193997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:25:44.774 [DEBUG] [Thread-193997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:25:44.774 [DEBUG] [Thread-193997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:25:44.774 [DEBUG] [Thread-193997] [transport.py] [_log()] client lang: <none>
2026-02-14T23:25:44.774 [DEBUG] [Thread-193997] [transport.py] [_log()] server lang: <none>
2026-02-14T23:25:44.774 [DEBUG] [Thread-193997] [transport.py] [_log()] kex follows: False
2026-02-14T23:25:44.774 [DEBUG] [Thread-193997] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:25:44.774 [DEBUG] [Thread-193997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:25:44.774 [DEBUG] [Thread-193997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:25:44.774 [DEBUG] [Thread-193997] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:25:44.774 [DEBUG] [Thread-193997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:25:44.774 [DEBUG] [Thread-193997] [transport.py] [_log()] Compression: none
2026-02-14T23:25:44.774 [DEBUG] [Thread-193997] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:25:44.792 [DEBUG] [Thread-193997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:25:44.792 [DEBUG] [Thread-193997] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:25:44.793 [DEBUG] [Thread-193997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:25:44.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:25:44.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:25:44.795 [DEBUG] [Thread-193997] [transport.py] [_log()] userauth is OK
2026-02-14T23:25:44.795 [DEBUG] [Thread-193997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:25:44.795 [DEBUG] [Thread-193997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:25:44.795 [DEBUG] [Thread-193997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:25:44.795 [DEBUG] [Thread-193997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:25:44.816 [INFO] [Thread-193997] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:25:44.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:25:45.450 [DEBUG] [Thread-193997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:25:45.450 [DEBUG] [Thread-193997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:25:45.451 [DEBUG] [Thread-193997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:25:45.491 [DEBUG] [Thread-193997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:25:45.492 [DEBUG] [Thread-193997] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:25:45.495 [DEBUG] [Thread-193997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:25:45.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:25:45.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:25:45.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:25:45.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:25:45.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:25:45.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:25:45.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:25:45.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:25:45.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:25:45.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.892472 -999.00   +8.80  23.59     69   +3.60 1 1 1 1 1     0    0 4.92 -13.37 ZNESW 24.3 23.6 162.6 33.9 9.2 -24.4 9.1 -23.4 8.9 -22.7 9.3 -23.6
2026-02-14T23:25:45.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:25:45.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:25:45.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.892472
2026-02-14T23:25:45.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:25:45.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:25:45.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:25:45.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:25:45.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:25:45.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:25:01', tmtdew=6.3, humidity=64.63, cloud=0.0, wind=38.94, temperature=8.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:25:37', seeing=4.21, atlas_timestamp='2026-02-14T21:25:09.581', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.0072499999999990905, -0.03774999999999906, 0.015499999999999403, -0.0045000000000001705, 0.035250000000001336, 0.01699999999999946, -0.012749999999998707, -0.0015000000000000568, 0.010500000000000398, -0.08825000000000038, -0.0009999999999994458, 0.05799999999999983, 0.027249999999998664, 0.028499999999999304, 0.0030000000000001137, 0.04124999999999979, 0.09050000000000047, -0.0065000000000008384, -0.0042500000000025295, 0.04899999999999949, -0.0022500000000018616, -0.004749999999999588, 0.00975000000000037, 0.05999999999999872, -0.014499999999999957, -0.008250000000000313, -0.0015000000000000568, 0.09200000000000053, 0.0940000000000012, 0.038000000000000256, 0.0235000000000003, -0.0007500000000000284], zp_timestamp='2026-02-14T21:22:00')
2026-02-14T23:25:45.515 [DEBUG] [Thread-193997] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:25:45.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-14T23:25:45.606 [DEBUG] [Thread-194000] [transport.py] [_log()] starting thread (client mode): 0xa2d6a4a0
2026-02-14T23:25:45.606 [DEBUG] [Thread-194000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:25:45.620 [DEBUG] [Thread-194000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:25:45.621 [INFO] [Thread-194000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:25:45.628 [DEBUG] [Thread-194000] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:25:45.628 [DEBUG] [Thread-194000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:25:45.628 [DEBUG] [Thread-194000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:25:45.628 [DEBUG] [Thread-194000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:25:45.628 [DEBUG] [Thread-194000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:25:45.628 [DEBUG] [Thread-194000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:25:45.628 [DEBUG] [Thread-194000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:25:45.628 [DEBUG] [Thread-194000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:25:45.628 [DEBUG] [Thread-194000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:25:45.629 [DEBUG] [Thread-194000] [transport.py] [_log()] client lang: <none>
2026-02-14T23:25:45.629 [DEBUG] [Thread-194000] [transport.py] [_log()] server lang: <none>
2026-02-14T23:25:45.629 [DEBUG] [Thread-194000] [transport.py] [_log()] kex follows: False
2026-02-14T23:25:45.629 [DEBUG] [Thread-194000] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:25:45.629 [DEBUG] [Thread-194000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:25:45.629 [DEBUG] [Thread-194000] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:25:45.629 [DEBUG] [Thread-194000] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:25:45.629 [DEBUG] [Thread-194000] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:25:45.629 [DEBUG] [Thread-194000] [transport.py] [_log()] Compression: none
2026-02-14T23:25:45.629 [DEBUG] [Thread-194000] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:25:45.687 [DEBUG] [Thread-194000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:25:45.687 [DEBUG] [Thread-194000] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:25:45.688 [DEBUG] [Thread-194000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:25:45.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:25:45.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:25:45.743 [DEBUG] [Thread-194000] [transport.py] [_log()] userauth is OK
2026-02-14T23:25:45.744 [DEBUG] [Thread-194000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:25:45.744 [DEBUG] [Thread-194000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:25:45.744 [DEBUG] [Thread-194000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:25:45.744 [DEBUG] [Thread-194000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:25:45.762 [INFO] [Thread-194000] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:25: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-14T23:25:45.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:25:46.526 [DEBUG] [Thread-194000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:25:46.526 [DEBUG] [Thread-194000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:25:46.574 [DEBUG] [Thread-194000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:25:46.574 [DEBUG] [Thread-194000] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:25:46.584 [DEBUG] [Thread-194000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:25:46.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:25:46.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:25:46.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-14T23:25:46.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:25:46.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:25:46.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:25:46.620 [DEBUG] [Thread-194000] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:25:50.774 [DEBUG] [Thread-194002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:26:05.021 [DEBUG] [Thread-194003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:26:05.827 [DEBUG] [Thread-194004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:26:07.218 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:26:07.219 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:26:16.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:26:16.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:26:16.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-14T23:26:18.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 25, 37), 6.37, 64.36, 0.0, 38.39, 9.21, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:26:18.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:25:37
2026-02-14T23:26:19.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:26:19.562 [DEBUG] [Thread-194005] [transport.py] [_log()] starting thread (client mode): 0xa2d696f0
2026-02-14T23:26:19.562 [DEBUG] [Thread-194005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:26:19.583 [DEBUG] [Thread-194005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:26:19.583 [INFO] [Thread-194005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:26:19.586 [DEBUG] [Thread-194005] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:26:19.586 [DEBUG] [Thread-194005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:26:19.586 [DEBUG] [Thread-194005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:26:19.586 [DEBUG] [Thread-194005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:26:19.586 [DEBUG] [Thread-194005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:26:19.586 [DEBUG] [Thread-194005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:26:19.587 [DEBUG] [Thread-194005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:26:19.587 [DEBUG] [Thread-194005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:26:19.587 [DEBUG] [Thread-194005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:26:19.587 [DEBUG] [Thread-194005] [transport.py] [_log()] client lang: <none>
2026-02-14T23:26:19.587 [DEBUG] [Thread-194005] [transport.py] [_log()] server lang: <none>
2026-02-14T23:26:19.587 [DEBUG] [Thread-194005] [transport.py] [_log()] kex follows: False
2026-02-14T23:26:19.587 [DEBUG] [Thread-194005] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:26:19.587 [DEBUG] [Thread-194005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:26:19.587 [DEBUG] [Thread-194005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:26:19.587 [DEBUG] [Thread-194005] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:26:19.587 [DEBUG] [Thread-194005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:26:19.587 [DEBUG] [Thread-194005] [transport.py] [_log()] Compression: none
2026-02-14T23:26:19.587 [DEBUG] [Thread-194005] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:26:19.607 [DEBUG] [Thread-194005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:26:19.608 [DEBUG] [Thread-194005] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:26:19.609 [DEBUG] [Thread-194005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:26:19.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:26:19.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:26:19.611 [DEBUG] [Thread-194005] [transport.py] [_log()] userauth is OK
2026-02-14T23:26:19.611 [DEBUG] [Thread-194005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:26:19.612 [DEBUG] [Thread-194005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:26:19.612 [DEBUG] [Thread-194005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:26:19.612 [DEBUG] [Thread-194005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:26:19.635 [INFO] [Thread-194005] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:26:19.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:26:20.266 [DEBUG] [Thread-194005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:26:20.266 [DEBUG] [Thread-194005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:26:20.267 [DEBUG] [Thread-194005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:26:20.307 [DEBUG] [Thread-194005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:26:20.308 [DEBUG] [Thread-194005] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:26:20.311 [DEBUG] [Thread-194005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:26:20.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:26:20.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:26:20.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:26:20.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:26:20.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:26:20.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:26:20.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:26:20.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:26:20.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:26:20.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.892820 -999.00   +8.80  28.58     69   +3.60 1 1 1 1 1     0    0 4.90 -14.26 ZNESW 26.9 28.6 170.0 36.6 9.3 -24.5 9.1 -23.5 8.9 -22.5 9.2 -23.4
2026-02-14T23:26:20.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:26:20.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:26:20.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.892820
2026-02-14T23:26:20.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:26:20.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:26:20.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:26:20.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:26:20.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:26:20.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:25:37', tmtdew=6.37, humidity=64.36, cloud=0.0, wind=38.39, temperature=9.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:26:13', seeing=3.24, atlas_timestamp='2026-02-14T21:25:39.648', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.0072499999999990905, -0.03774999999999906, 0.015499999999999403, -0.0045000000000001705, 0.035250000000001336, 0.01699999999999946, -0.012749999999998707, -0.0015000000000000568, 0.010500000000000398, -0.08825000000000038, -0.0009999999999994458, 0.05799999999999983, 0.027249999999998664, 0.028499999999999304, 0.0030000000000001137, 0.04124999999999979, 0.09050000000000047, -0.0065000000000008384, -0.0042500000000025295, 0.04899999999999949, -0.0022500000000018616, -0.004749999999999588, 0.00975000000000037, 0.05999999999999872, -0.014499999999999957, -0.008250000000000313, -0.0015000000000000568, 0.09200000000000053, 0.0940000000000012, 0.038000000000000256, 0.0235000000000003, -0.0007500000000000284], zp_timestamp='2026-02-14T21:22:00')
2026-02-14T23:26:20.338 [DEBUG] [Thread-194005] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:26:20.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-14T23:26:20.433 [DEBUG] [Thread-194008] [transport.py] [_log()] starting thread (client mode): 0xa2d69de0
2026-02-14T23:26:20.433 [DEBUG] [Thread-194008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:26:20.448 [DEBUG] [Thread-194008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:26:20.448 [INFO] [Thread-194008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:26:20.456 [DEBUG] [Thread-194008] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:26:20.456 [DEBUG] [Thread-194008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:26:20.456 [DEBUG] [Thread-194008] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:26:20.456 [DEBUG] [Thread-194008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:26:20.457 [DEBUG] [Thread-194008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:26:20.457 [DEBUG] [Thread-194008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:26:20.457 [DEBUG] [Thread-194008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:26:20.457 [DEBUG] [Thread-194008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:26:20.457 [DEBUG] [Thread-194008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:26:20.457 [DEBUG] [Thread-194008] [transport.py] [_log()] client lang: <none>
2026-02-14T23:26:20.457 [DEBUG] [Thread-194008] [transport.py] [_log()] server lang: <none>
2026-02-14T23:26:20.457 [DEBUG] [Thread-194008] [transport.py] [_log()] kex follows: False
2026-02-14T23:26:20.457 [DEBUG] [Thread-194008] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:26:20.457 [DEBUG] [Thread-194008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:26:20.457 [DEBUG] [Thread-194008] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:26:20.457 [DEBUG] [Thread-194008] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:26:20.457 [DEBUG] [Thread-194008] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:26:20.457 [DEBUG] [Thread-194008] [transport.py] [_log()] Compression: none
2026-02-14T23:26:20.457 [DEBUG] [Thread-194008] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:26:20.517 [DEBUG] [Thread-194008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:26:20.518 [DEBUG] [Thread-194008] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:26:20.518 [DEBUG] [Thread-194008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:26:20.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:26:20.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:26:20.575 [DEBUG] [Thread-194008] [transport.py] [_log()] userauth is OK
2026-02-14T23:26:20.576 [DEBUG] [Thread-194008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:26:20.576 [DEBUG] [Thread-194008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:26:20.576 [DEBUG] [Thread-194008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:26:20.576 [DEBUG] [Thread-194008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:26:20.595 [INFO] [Thread-194008] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:26:20.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-14T23:26:20.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:26:20.858 [DEBUG] [Thread-194010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:26:21.380 [DEBUG] [Thread-194008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:26:21.380 [DEBUG] [Thread-194008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:26:21.429 [DEBUG] [Thread-194008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:26:21.429 [DEBUG] [Thread-194008] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:26:21.438 [DEBUG] [Thread-194008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:26:21.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:26:21.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-14T23:26:21.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-14T23:26:21.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:26:21.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:26:21.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:26:21.475 [DEBUG] [Thread-194008] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:26:35.919 [DEBUG] [Thread-194011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:26:50.954 [DEBUG] [Thread-194012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:26:51.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:26:51.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:26:51.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-14T23:26:53.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 26, 13), 6.17, 65.23, 0.0, 37.56, 8.91, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:26:53.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:26:13
2026-02-14T23:26:53.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:26:53.890 [DEBUG] [Thread-194013] [transport.py] [_log()] starting thread (client mode): 0xa2d69000
2026-02-14T23:26:53.890 [DEBUG] [Thread-194013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:26:53.910 [DEBUG] [Thread-194013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:26:53.910 [INFO] [Thread-194013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:26:53.914 [DEBUG] [Thread-194013] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:26:53.914 [DEBUG] [Thread-194013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:26:53.914 [DEBUG] [Thread-194013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:26:53.914 [DEBUG] [Thread-194013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:26:53.915 [DEBUG] [Thread-194013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:26:53.915 [DEBUG] [Thread-194013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:26:53.915 [DEBUG] [Thread-194013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:26:53.915 [DEBUG] [Thread-194013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:26:53.915 [DEBUG] [Thread-194013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:26:53.915 [DEBUG] [Thread-194013] [transport.py] [_log()] client lang: <none>
2026-02-14T23:26:53.915 [DEBUG] [Thread-194013] [transport.py] [_log()] server lang: <none>
2026-02-14T23:26:53.915 [DEBUG] [Thread-194013] [transport.py] [_log()] kex follows: False
2026-02-14T23:26:53.915 [DEBUG] [Thread-194013] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:26:53.915 [DEBUG] [Thread-194013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:26:53.915 [DEBUG] [Thread-194013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:26:53.915 [DEBUG] [Thread-194013] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:26:53.915 [DEBUG] [Thread-194013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:26:53.915 [DEBUG] [Thread-194013] [transport.py] [_log()] Compression: none
2026-02-14T23:26:53.915 [DEBUG] [Thread-194013] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:26:53.933 [DEBUG] [Thread-194013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:26:53.933 [DEBUG] [Thread-194013] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:26:53.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:26:53.934 [DEBUG] [Thread-194013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:26:53.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:26:53.936 [DEBUG] [Thread-194013] [transport.py] [_log()] userauth is OK
2026-02-14T23:26:53.937 [DEBUG] [Thread-194013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:26:53.937 [DEBUG] [Thread-194013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:26:53.937 [DEBUG] [Thread-194013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:26:53.937 [DEBUG] [Thread-194013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:26:53.956 [INFO] [Thread-194013] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:26:53.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:26:54.562 [DEBUG] [Thread-194013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:26:54.562 [DEBUG] [Thread-194013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:26:54.562 [DEBUG] [Thread-194013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:26:54.603 [DEBUG] [Thread-194013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:26:54.604 [DEBUG] [Thread-194013] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:26:54.607 [DEBUG] [Thread-194013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:26:54.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:26:54.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:26:54.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:26:54.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:26:54.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:26:54.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:26:54.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:26:54.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:26:54.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:26:54.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.893166 -999.00   +8.80  16.61     69   +3.60 1 1 1 1 1     0    0 4.86 -15.06 ZNESW 23.5 16.6 152.8 30.0 9.3 -24.6 9.1 -23.5 8.8 -22.5 9.3 -23.7
2026-02-14T23:26:54.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:26:54.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:26:54.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.893166
2026-02-14T23:26:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:26:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:26:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:26:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:26:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:26:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:26:13', tmtdew=6.17, humidity=65.23, cloud=0.0, wind=37.56, temperature=8.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:26:49', seeing=3.16, atlas_timestamp='2026-02-14T21:26:09.542', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0417500000000004, -0.0022500000000000853, 0.005250000000000199, -0.013500000000000512, -0.024499999999999744, 0.034250000000000114, 0.011499999999999844, 0.03125, 0.037499999999999645, 0.019000000000000128, -0.051249999999999574, 0.00849999999999973, 0.08249999999999957, 0.049249999999998906, 0.04449999999999932, 0.03049999999999997, 0.07574999999999932, 0.07249999999999979, 0.019999999999999574, -0.006750000000000256, 0.07699999999999818, 0.040749999999999176, -0.0007500000000000284, 0.029749999999999943, 0.06899999999999906, 0.040000000000000924, -0.02224999999999966, 0.007500000000000284, 0.0940000000000012, 0.08800000000000097, 0.07000000000000028, 0.07000000000000028, 0.02874999999999872], zp_timestamp='2026-02-14T21:25:00')
2026-02-14T23:26:54.634 [DEBUG] [Thread-194013] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:26:54.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T23:26:54.737 [DEBUG] [Thread-194016] [transport.py] [_log()] starting thread (client mode): 0xa2d036d0
2026-02-14T23:26:54.737 [DEBUG] [Thread-194016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:26:54.751 [DEBUG] [Thread-194016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:26:54.752 [INFO] [Thread-194016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:26:54.759 [DEBUG] [Thread-194016] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:26:54.759 [DEBUG] [Thread-194016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:26:54.759 [DEBUG] [Thread-194016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:26:54.760 [DEBUG] [Thread-194016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:26:54.760 [DEBUG] [Thread-194016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:26:54.760 [DEBUG] [Thread-194016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:26:54.760 [DEBUG] [Thread-194016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:26:54.760 [DEBUG] [Thread-194016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:26:54.760 [DEBUG] [Thread-194016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:26:54.760 [DEBUG] [Thread-194016] [transport.py] [_log()] client lang: <none>
2026-02-14T23:26:54.760 [DEBUG] [Thread-194016] [transport.py] [_log()] server lang: <none>
2026-02-14T23:26:54.760 [DEBUG] [Thread-194016] [transport.py] [_log()] kex follows: False
2026-02-14T23:26:54.760 [DEBUG] [Thread-194016] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:26:54.760 [DEBUG] [Thread-194016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:26:54.760 [DEBUG] [Thread-194016] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:26:54.760 [DEBUG] [Thread-194016] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:26:54.760 [DEBUG] [Thread-194016] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:26:54.760 [DEBUG] [Thread-194016] [transport.py] [_log()] Compression: none
2026-02-14T23:26:54.760 [DEBUG] [Thread-194016] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:26:54.819 [DEBUG] [Thread-194016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:26:54.819 [DEBUG] [Thread-194016] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:26:54.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:26:54.820 [DEBUG] [Thread-194016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:26:54.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:26:54.875 [DEBUG] [Thread-194016] [transport.py] [_log()] userauth is OK
2026-02-14T23:26:54.876 [DEBUG] [Thread-194016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:26:54.876 [DEBUG] [Thread-194016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:26:54.876 [DEBUG] [Thread-194016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:26:54.876 [DEBUG] [Thread-194016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:26:54.900 [INFO] [Thread-194016] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:26:54.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T23:26:54.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:26:55.699 [DEBUG] [Thread-194016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:26:55.699 [DEBUG] [Thread-194016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:26:55.747 [DEBUG] [Thread-194016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:26:55.747 [DEBUG] [Thread-194016] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:26:55.757 [DEBUG] [Thread-194016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:26:55.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:26:55.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-14T23:26:55.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:26:55.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:26:55.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:26:55.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:26:55.795 [DEBUG] [Thread-194016] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:27:05.088 [DEBUG] [Thread-194018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:27:05.987 [DEBUG] [Thread-194019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:27:07.420 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:27:07.421 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:27:21.052 [DEBUG] [Thread-194020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:27:25.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:27:25.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:27:25.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-14T23:27:27.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 26, 49), 6.22, 65.24, 0.0, 35.39, 8.89, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:27:27.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:26:49
2026-02-14T23:27:28.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:27:28.447 [DEBUG] [Thread-194021] [transport.py] [_log()] starting thread (client mode): 0xa2d03760
2026-02-14T23:27:28.454 [DEBUG] [Thread-194021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:27:28.466 [DEBUG] [Thread-194021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:27:28.466 [INFO] [Thread-194021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:27:28.469 [DEBUG] [Thread-194021] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:27:28.469 [DEBUG] [Thread-194021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:27:28.469 [DEBUG] [Thread-194021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:27:28.469 [DEBUG] [Thread-194021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:27:28.469 [DEBUG] [Thread-194021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:27:28.469 [DEBUG] [Thread-194021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:27:28.469 [DEBUG] [Thread-194021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:27:28.469 [DEBUG] [Thread-194021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:27:28.469 [DEBUG] [Thread-194021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:27:28.469 [DEBUG] [Thread-194021] [transport.py] [_log()] client lang: <none>
2026-02-14T23:27:28.469 [DEBUG] [Thread-194021] [transport.py] [_log()] server lang: <none>
2026-02-14T23:27:28.469 [DEBUG] [Thread-194021] [transport.py] [_log()] kex follows: False
2026-02-14T23:27:28.469 [DEBUG] [Thread-194021] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:27:28.469 [DEBUG] [Thread-194021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:27:28.469 [DEBUG] [Thread-194021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:27:28.469 [DEBUG] [Thread-194021] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:27:28.469 [DEBUG] [Thread-194021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:27:28.469 [DEBUG] [Thread-194021] [transport.py] [_log()] Compression: none
2026-02-14T23:27:28.469 [DEBUG] [Thread-194021] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:27:28.482 [DEBUG] [Thread-194021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:27:28.482 [DEBUG] [Thread-194021] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:27:28.483 [DEBUG] [Thread-194021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:27:28.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:27:28.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:27:28.485 [DEBUG] [Thread-194021] [transport.py] [_log()] userauth is OK
2026-02-14T23:27:28.485 [DEBUG] [Thread-194021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:27:28.485 [DEBUG] [Thread-194021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:27:28.485 [DEBUG] [Thread-194021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:27:28.485 [DEBUG] [Thread-194021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:27:28.503 [INFO] [Thread-194021] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:27:28.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:27:29.144 [DEBUG] [Thread-194021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:27:29.144 [DEBUG] [Thread-194021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:27:29.144 [DEBUG] [Thread-194021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:27:29.185 [DEBUG] [Thread-194021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:27:29.185 [DEBUG] [Thread-194021] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:27:29.188 [DEBUG] [Thread-194021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:27:29.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:27:29.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:27:29.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:27:29.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:27:29.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:27:29.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:27:29.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:27:29.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:27:29.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:27:29.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.893514 -999.00   +8.80  24.75     69   +3.60 1 1 1 1 1     0    0 4.85 -15.86 ZNESW 20.1 24.8 158.5 28.2 9.3 -24.6 9.1 -23.5 8.9 -22.5 9.2 -23.7
2026-02-14T23:27:29.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:27:29.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:27:29.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.893514
2026-02-14T23:27:29.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:27:29.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:27:29.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:27:29.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:27:29.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:27:29.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:26:49', tmtdew=6.22, humidity=65.24, cloud=0.0, wind=35.39, temperature=8.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:27:24', seeing=2.67, atlas_timestamp='2026-02-14T21:26:39.610', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0417500000000004, -0.0022500000000000853, 0.005250000000000199, -0.013500000000000512, -0.024499999999999744, 0.034250000000000114, 0.011499999999999844, 0.03125, 0.037499999999999645, 0.019000000000000128, -0.051249999999999574, 0.00849999999999973, 0.08249999999999957, 0.049249999999998906, 0.04449999999999932, 0.03049999999999997, 0.07574999999999932, 0.07249999999999979, 0.019999999999999574, -0.006750000000000256, 0.07699999999999818, 0.040749999999999176, -0.0007500000000000284, 0.029749999999999943, 0.06899999999999906, 0.040000000000000924, -0.02224999999999966, 0.007500000000000284, 0.0940000000000012, 0.08800000000000097, 0.07000000000000028, 0.07000000000000028, 0.02874999999999872], zp_timestamp='2026-02-14T21:25:00')
2026-02-14T23:27:29.210 [DEBUG] [Thread-194021] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:27:29.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-14T23:27:29.308 [DEBUG] [Thread-194024] [transport.py] [_log()] starting thread (client mode): 0xa2d03b80
2026-02-14T23:27:29.308 [DEBUG] [Thread-194024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:27:29.324 [DEBUG] [Thread-194024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:27:29.324 [INFO] [Thread-194024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:27:29.332 [DEBUG] [Thread-194024] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:27:29.332 [DEBUG] [Thread-194024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:27:29.332 [DEBUG] [Thread-194024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:27:29.332 [DEBUG] [Thread-194024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:27:29.333 [DEBUG] [Thread-194024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:27:29.333 [DEBUG] [Thread-194024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:27:29.333 [DEBUG] [Thread-194024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:27:29.333 [DEBUG] [Thread-194024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:27:29.333 [DEBUG] [Thread-194024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:27:29.333 [DEBUG] [Thread-194024] [transport.py] [_log()] client lang: <none>
2026-02-14T23:27:29.333 [DEBUG] [Thread-194024] [transport.py] [_log()] server lang: <none>
2026-02-14T23:27:29.333 [DEBUG] [Thread-194024] [transport.py] [_log()] kex follows: False
2026-02-14T23:27:29.333 [DEBUG] [Thread-194024] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:27:29.334 [DEBUG] [Thread-194024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:27:29.334 [DEBUG] [Thread-194024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:27:29.334 [DEBUG] [Thread-194024] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:27:29.334 [DEBUG] [Thread-194024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:27:29.334 [DEBUG] [Thread-194024] [transport.py] [_log()] Compression: none
2026-02-14T23:27:29.334 [DEBUG] [Thread-194024] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:27:29.393 [DEBUG] [Thread-194024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:27:29.394 [DEBUG] [Thread-194024] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:27:29.394 [DEBUG] [Thread-194024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:27:29.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:27:29.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:27:29.452 [DEBUG] [Thread-194024] [transport.py] [_log()] userauth is OK
2026-02-14T23:27:29.453 [DEBUG] [Thread-194024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:27:29.453 [DEBUG] [Thread-194024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:27:29.453 [DEBUG] [Thread-194024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:27:29.453 [DEBUG] [Thread-194024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:27:29.472 [INFO] [Thread-194024] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:27:29.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T23:27:29.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:27:30.292 [DEBUG] [Thread-194024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:27:30.293 [DEBUG] [Thread-194024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:27:30.341 [DEBUG] [Thread-194024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:27:30.341 [DEBUG] [Thread-194024] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:27:30.350 [DEBUG] [Thread-194024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:27:30.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:27:30.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:27:30.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:27:30.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:27:30.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:27:30.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:27:30.384 [DEBUG] [Thread-194024] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:27:36.090 [DEBUG] [Thread-194026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:27:51.140 [DEBUG] [Thread-194027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:28:00.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:28:00.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:28:00.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-14T23:28:02.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 27, 24), 6.22, 65.26, 0.0, 34.41, 8.89, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:28:02.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:27:24
2026-02-14T23:28:02.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:28:02.967 [DEBUG] [Thread-194028] [transport.py] [_log()] starting thread (client mode): 0xa2d6aef0
2026-02-14T23:28:02.967 [DEBUG] [Thread-194028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:28:02.986 [DEBUG] [Thread-194028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:28:02.986 [INFO] [Thread-194028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:28:02.989 [DEBUG] [Thread-194028] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:28:02.989 [DEBUG] [Thread-194028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:28:02.989 [DEBUG] [Thread-194028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:28:02.989 [DEBUG] [Thread-194028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:28:02.989 [DEBUG] [Thread-194028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:28:02.989 [DEBUG] [Thread-194028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:28:02.989 [DEBUG] [Thread-194028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:28:02.989 [DEBUG] [Thread-194028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:28:02.989 [DEBUG] [Thread-194028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:28:02.989 [DEBUG] [Thread-194028] [transport.py] [_log()] client lang: <none>
2026-02-14T23:28:02.989 [DEBUG] [Thread-194028] [transport.py] [_log()] server lang: <none>
2026-02-14T23:28:02.989 [DEBUG] [Thread-194028] [transport.py] [_log()] kex follows: False
2026-02-14T23:28:02.989 [DEBUG] [Thread-194028] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:28:02.989 [DEBUG] [Thread-194028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:28:02.989 [DEBUG] [Thread-194028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:28:02.989 [DEBUG] [Thread-194028] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:28:02.989 [DEBUG] [Thread-194028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:28:02.989 [DEBUG] [Thread-194028] [transport.py] [_log()] Compression: none
2026-02-14T23:28:02.989 [DEBUG] [Thread-194028] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:28:03.003 [DEBUG] [Thread-194028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:28:03.004 [DEBUG] [Thread-194028] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:28:03.004 [DEBUG] [Thread-194028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:28:03.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:28:03.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:28:03.007 [DEBUG] [Thread-194028] [transport.py] [_log()] userauth is OK
2026-02-14T23:28:03.007 [DEBUG] [Thread-194028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:28:03.007 [DEBUG] [Thread-194028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:28:03.008 [DEBUG] [Thread-194028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:28:03.008 [DEBUG] [Thread-194028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:28:03.023 [INFO] [Thread-194028] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:28:03.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:28:03.678 [DEBUG] [Thread-194028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:28:03.679 [DEBUG] [Thread-194028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:28:03.679 [DEBUG] [Thread-194028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:28:03.719 [DEBUG] [Thread-194028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:28:03.720 [DEBUG] [Thread-194028] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:28:03.723 [DEBUG] [Thread-194028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:28:03.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:28:03.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:28:03.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:28:03.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:28:03.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:28:03.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:28:03.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:28:03.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:28:03.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:28:03.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.893861 -999.00   +8.80  23.36     70   +3.60 1 1 1 1 1     0    0 4.86 -16.67 ZNESW 27.6 23.4 151.0 32.5 9.2 -24.5 9.1 -23.5 8.9 -22.5 9.2 -23.5
2026-02-14T23:28:03.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:28:03.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:28:03.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.893861
2026-02-14T23:28:03.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:28:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:28:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:28:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:28:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:28:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:27:24', tmtdew=6.22, humidity=65.26, cloud=0.0, wind=34.41, temperature=8.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:28:00', seeing=3.11, atlas_timestamp='2026-02-14T21:27:09.590', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0417500000000004, -0.0022500000000000853, 0.005250000000000199, -0.013500000000000512, -0.024499999999999744, 0.034250000000000114, 0.011499999999999844, 0.03125, 0.037499999999999645, 0.019000000000000128, -0.051249999999999574, 0.00849999999999973, 0.08249999999999957, 0.049249999999998906, 0.04449999999999932, 0.03049999999999997, 0.07574999999999932, 0.07249999999999979, 0.019999999999999574, -0.006750000000000256, 0.07699999999999818, 0.040749999999999176, -0.0007500000000000284, 0.029749999999999943, 0.06899999999999906, 0.040000000000000924, -0.02224999999999966, 0.007500000000000284, 0.0940000000000012, 0.08800000000000097, 0.07000000000000028, 0.07000000000000028, 0.02874999999999872], zp_timestamp='2026-02-14T21:25:00')
2026-02-14T23:28:03.753 [DEBUG] [Thread-194028] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:28:03.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-14T23:28:03.859 [DEBUG] [Thread-194031] [transport.py] [_log()] starting thread (client mode): 0xa57423e0
2026-02-14T23:28:03.859 [DEBUG] [Thread-194031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:28:03.874 [DEBUG] [Thread-194031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:28:03.874 [INFO] [Thread-194031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:28:03.881 [DEBUG] [Thread-194031] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:28:03.881 [DEBUG] [Thread-194031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:28:03.881 [DEBUG] [Thread-194031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:28:03.881 [DEBUG] [Thread-194031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:28:03.881 [DEBUG] [Thread-194031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:28:03.882 [DEBUG] [Thread-194031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:28:03.882 [DEBUG] [Thread-194031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:28:03.882 [DEBUG] [Thread-194031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:28:03.882 [DEBUG] [Thread-194031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:28:03.882 [DEBUG] [Thread-194031] [transport.py] [_log()] client lang: <none>
2026-02-14T23:28:03.882 [DEBUG] [Thread-194031] [transport.py] [_log()] server lang: <none>
2026-02-14T23:28:03.882 [DEBUG] [Thread-194031] [transport.py] [_log()] kex follows: False
2026-02-14T23:28:03.882 [DEBUG] [Thread-194031] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:28:03.882 [DEBUG] [Thread-194031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:28:03.882 [DEBUG] [Thread-194031] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:28:03.882 [DEBUG] [Thread-194031] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:28:03.882 [DEBUG] [Thread-194031] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:28:03.882 [DEBUG] [Thread-194031] [transport.py] [_log()] Compression: none
2026-02-14T23:28:03.882 [DEBUG] [Thread-194031] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:28:03.939 [DEBUG] [Thread-194031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:28:03.940 [DEBUG] [Thread-194031] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:28:03.940 [DEBUG] [Thread-194031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:28:03.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:28:03.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:28:04.000 [DEBUG] [Thread-194031] [transport.py] [_log()] userauth is OK
2026-02-14T23:28:04.000 [DEBUG] [Thread-194031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:28:04.001 [DEBUG] [Thread-194031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:28:04.001 [DEBUG] [Thread-194031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:28:04.001 [DEBUG] [Thread-194031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:28:04.022 [INFO] [Thread-194031] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:28:04.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T23:28:04.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:28:04.807 [DEBUG] [Thread-194031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:28:04.808 [DEBUG] [Thread-194031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:28:04.856 [DEBUG] [Thread-194031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:28:04.856 [DEBUG] [Thread-194031] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:28:04.865 [DEBUG] [Thread-194031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:28:04.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:28:04.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-14T23:28:04.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-14T23:28:04.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:28:04.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:28:04.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:28:04.902 [DEBUG] [Thread-194031] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:28:05.146 [DEBUG] [Thread-194033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:28:06.178 [DEBUG] [Thread-194034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:28:07.619 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:28:07.620 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:28:21.230 [DEBUG] [Thread-194035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:28:34.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:28:34.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:28:34.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-14T23:28:36.271 [DEBUG] [Thread-194036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:28:36.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 27, 59), 6.21, 65.28, 0.0, 33.93, 8.92, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:28:36.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:27:59
2026-02-14T23:28:37.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:28:37.315 [DEBUG] [Thread-194037] [transport.py] [_log()] starting thread (client mode): 0xa2d69060
2026-02-14T23:28:37.315 [DEBUG] [Thread-194037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:28:37.334 [DEBUG] [Thread-194037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:28:37.334 [INFO] [Thread-194037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:28:37.336 [DEBUG] [Thread-194037] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:28:37.336 [DEBUG] [Thread-194037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:28:37.336 [DEBUG] [Thread-194037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:28:37.336 [DEBUG] [Thread-194037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:28:37.336 [DEBUG] [Thread-194037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:28:37.336 [DEBUG] [Thread-194037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:28:37.336 [DEBUG] [Thread-194037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:28:37.336 [DEBUG] [Thread-194037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:28:37.336 [DEBUG] [Thread-194037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:28:37.336 [DEBUG] [Thread-194037] [transport.py] [_log()] client lang: <none>
2026-02-14T23:28:37.336 [DEBUG] [Thread-194037] [transport.py] [_log()] server lang: <none>
2026-02-14T23:28:37.336 [DEBUG] [Thread-194037] [transport.py] [_log()] kex follows: False
2026-02-14T23:28:37.336 [DEBUG] [Thread-194037] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:28:37.336 [DEBUG] [Thread-194037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:28:37.336 [DEBUG] [Thread-194037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:28:37.336 [DEBUG] [Thread-194037] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:28:37.336 [DEBUG] [Thread-194037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:28:37.336 [DEBUG] [Thread-194037] [transport.py] [_log()] Compression: none
2026-02-14T23:28:37.336 [DEBUG] [Thread-194037] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:28:37.353 [DEBUG] [Thread-194037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:28:37.354 [DEBUG] [Thread-194037] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:28:37.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:28:37.355 [DEBUG] [Thread-194037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:28:37.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:28:37.357 [DEBUG] [Thread-194037] [transport.py] [_log()] userauth is OK
2026-02-14T23:28:37.357 [DEBUG] [Thread-194037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:28:37.357 [DEBUG] [Thread-194037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:28:37.358 [DEBUG] [Thread-194037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:28:37.358 [DEBUG] [Thread-194037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:28:37.384 [INFO] [Thread-194037] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:28:37.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:28:38.004 [DEBUG] [Thread-194037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:28:38.005 [DEBUG] [Thread-194037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:28:38.005 [DEBUG] [Thread-194037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:28:38.045 [DEBUG] [Thread-194037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:28:38.046 [DEBUG] [Thread-194037] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:28:38.049 [DEBUG] [Thread-194037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:28:38.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:28:38.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:28:38.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:28:38.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:28:38.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:28:38.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:28:38.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:28:38.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:28:38.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:28:38.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.894556 -999.00   +8.80  21.52     70   +3.60 1 1 1 1 1     0    0 4.83 -15.61 ZNESW 22.4 21.5 162.8 40.8 9.2 -24.4 9.1 -23.5 8.8 -22.5 9.2 -23.7
2026-02-14T23:28:38.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:28:38.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:28:38.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.894556
2026-02-14T23:28:38.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:28:38.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:28:38.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:28:38.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:28:38.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:28:38.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:27:59', tmtdew=6.21, humidity=65.28, cloud=0.0, wind=33.93, temperature=8.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:28:00', seeing=3.11, atlas_timestamp='2026-02-14T21:28:09.638', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0417500000000004, -0.0022500000000000853, 0.005250000000000199, -0.013500000000000512, -0.024499999999999744, 0.034250000000000114, 0.011499999999999844, 0.03125, 0.037499999999999645, 0.019000000000000128, -0.051249999999999574, 0.00849999999999973, 0.08249999999999957, 0.049249999999998906, 0.04449999999999932, 0.03049999999999997, 0.07574999999999932, 0.07249999999999979, 0.019999999999999574, -0.006750000000000256, 0.07699999999999818, 0.040749999999999176, -0.0007500000000000284, 0.029749999999999943, 0.06899999999999906, 0.040000000000000924, -0.02224999999999966, 0.007500000000000284, 0.0940000000000012, 0.08800000000000097, 0.07000000000000028, 0.07000000000000028, 0.02874999999999872], zp_timestamp='2026-02-14T21:25:00')
2026-02-14T23:28:38.076 [DEBUG] [Thread-194037] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:28:38.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T23:28:38.171 [DEBUG] [Thread-194040] [transport.py] [_log()] starting thread (client mode): 0xa57435b0
2026-02-14T23:28:38.171 [DEBUG] [Thread-194040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:28:38.187 [DEBUG] [Thread-194040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:28:38.187 [INFO] [Thread-194040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:28:38.195 [DEBUG] [Thread-194040] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:28:38.195 [DEBUG] [Thread-194040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:28:38.195 [DEBUG] [Thread-194040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:28:38.195 [DEBUG] [Thread-194040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:28:38.195 [DEBUG] [Thread-194040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:28:38.195 [DEBUG] [Thread-194040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:28:38.195 [DEBUG] [Thread-194040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:28:38.195 [DEBUG] [Thread-194040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:28:38.195 [DEBUG] [Thread-194040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:28:38.195 [DEBUG] [Thread-194040] [transport.py] [_log()] client lang: <none>
2026-02-14T23:28:38.195 [DEBUG] [Thread-194040] [transport.py] [_log()] server lang: <none>
2026-02-14T23:28:38.195 [DEBUG] [Thread-194040] [transport.py] [_log()] kex follows: False
2026-02-14T23:28:38.195 [DEBUG] [Thread-194040] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:28:38.195 [DEBUG] [Thread-194040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:28:38.196 [DEBUG] [Thread-194040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:28:38.196 [DEBUG] [Thread-194040] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:28:38.196 [DEBUG] [Thread-194040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:28:38.196 [DEBUG] [Thread-194040] [transport.py] [_log()] Compression: none
2026-02-14T23:28:38.196 [DEBUG] [Thread-194040] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:28:38.255 [DEBUG] [Thread-194040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:28:38.256 [DEBUG] [Thread-194040] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:28:38.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:28:38.257 [DEBUG] [Thread-194040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:28:38.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:28:38.312 [DEBUG] [Thread-194040] [transport.py] [_log()] userauth is OK
2026-02-14T23:28:38.312 [DEBUG] [Thread-194040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:28:38.312 [DEBUG] [Thread-194040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:28:38.312 [DEBUG] [Thread-194040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:28:38.312 [DEBUG] [Thread-194040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:28:38.337 [INFO] [Thread-194040] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:28:38.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T23:28:38.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:28:39.135 [DEBUG] [Thread-194040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:28:39.135 [DEBUG] [Thread-194040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:28:39.187 [DEBUG] [Thread-194040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:28:39.187 [DEBUG] [Thread-194040] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:28:39.196 [DEBUG] [Thread-194040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:28:39.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:28:39.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-14T23:28: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') -> 00000000
2026-02-14T23:28:39.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:28:39.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:28:39.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:28:39.232 [DEBUG] [Thread-194040] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:28:51.309 [DEBUG] [Thread-194042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:29:05.214 [DEBUG] [Thread-194043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:29:06.362 [DEBUG] [Thread-194044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:29:07.820 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:29:07.821 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:29:09.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:29:09.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:29:09.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-14T23:29:11.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 28, 35), 6.33, 64.55, 0.0, 38.99, 9.25, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:29:11.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:28:35
2026-02-14T23:29:11.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:29:11.642 [DEBUG] [Thread-194045] [transport.py] [_log()] starting thread (client mode): 0xa2d01b40
2026-02-14T23:29:11.642 [DEBUG] [Thread-194045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:29:11.663 [DEBUG] [Thread-194045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:29:11.664 [INFO] [Thread-194045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:29:11.670 [DEBUG] [Thread-194045] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:29:11.670 [DEBUG] [Thread-194045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:29:11.670 [DEBUG] [Thread-194045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:29:11.670 [DEBUG] [Thread-194045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:29:11.670 [DEBUG] [Thread-194045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:29:11.670 [DEBUG] [Thread-194045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:29:11.670 [DEBUG] [Thread-194045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:29:11.670 [DEBUG] [Thread-194045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:29:11.670 [DEBUG] [Thread-194045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:29:11.670 [DEBUG] [Thread-194045] [transport.py] [_log()] client lang: <none>
2026-02-14T23:29:11.670 [DEBUG] [Thread-194045] [transport.py] [_log()] server lang: <none>
2026-02-14T23:29:11.670 [DEBUG] [Thread-194045] [transport.py] [_log()] kex follows: False
2026-02-14T23:29:11.670 [DEBUG] [Thread-194045] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:29:11.670 [DEBUG] [Thread-194045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:29:11.670 [DEBUG] [Thread-194045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:29:11.670 [DEBUG] [Thread-194045] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:29:11.670 [DEBUG] [Thread-194045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:29:11.670 [DEBUG] [Thread-194045] [transport.py] [_log()] Compression: none
2026-02-14T23:29:11.670 [DEBUG] [Thread-194045] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:29:11.688 [DEBUG] [Thread-194045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:29:11.689 [DEBUG] [Thread-194045] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:29:11.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:29:11.690 [DEBUG] [Thread-194045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:29:11.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:29:11.692 [DEBUG] [Thread-194045] [transport.py] [_log()] userauth is OK
2026-02-14T23:29:11.692 [DEBUG] [Thread-194045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:29:11.692 [DEBUG] [Thread-194045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:29:11.692 [DEBUG] [Thread-194045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:29:11.693 [DEBUG] [Thread-194045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:29:11.710 [INFO] [Thread-194045] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:29:11.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:29:12.345 [DEBUG] [Thread-194045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:29:12.346 [DEBUG] [Thread-194045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:29:12.346 [DEBUG] [Thread-194045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:29:12.386 [DEBUG] [Thread-194045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:29:12.387 [DEBUG] [Thread-194045] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:29:12.393 [DEBUG] [Thread-194045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:29:12.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:29:12.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:29:12.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:29:12.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:29:12.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:29:12.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:29:12.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:29:12.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:29:12.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:29:12.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.894902 -999.00   +8.70  28.42     70   +3.60 1 1 1 1 1     0    0 4.86 -16.78 ZNESW 26.0 28.4 159.2 31.9 9.2 -24.4 9.1 -23.5 8.8 -22.4 9.2 -23.7
2026-02-14T23:29:12.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:29:12.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:29:12.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.894902
2026-02-14T23:29:12.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:29:12.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:29:12.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:29:12.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:29:12.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:29:12.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:28:35', tmtdew=6.33, humidity=64.55, cloud=0.0, wind=38.99, temperature=9.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:28:35', seeing=2.4, atlas_timestamp='2026-02-14T21:28:39.533', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0417500000000004, -0.0022500000000000853, 0.005250000000000199, -0.013500000000000512, -0.024499999999999744, 0.034250000000000114, 0.011499999999999844, 0.03125, 0.037499999999999645, 0.019000000000000128, -0.051249999999999574, 0.00849999999999973, 0.08249999999999957, 0.049249999999998906, 0.04449999999999932, 0.03049999999999997, 0.07574999999999932, 0.07249999999999979, 0.019999999999999574, -0.006750000000000256, 0.07699999999999818, 0.040749999999999176, -0.0007500000000000284, 0.029749999999999943, 0.06899999999999906, 0.040000000000000924, -0.02224999999999966, 0.007500000000000284, 0.0940000000000012, 0.08800000000000097, 0.07000000000000028, 0.07000000000000028, 0.02874999999999872], zp_timestamp='2026-02-14T21:25:00')
2026-02-14T23:29:12.420 [DEBUG] [Thread-194045] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:29:12.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-14T23:29:12.529 [DEBUG] [Thread-194048] [transport.py] [_log()] starting thread (client mode): 0xa2d009d0
2026-02-14T23:29:12.529 [DEBUG] [Thread-194048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:29:12.547 [DEBUG] [Thread-194048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:29:12.547 [INFO] [Thread-194048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:29:12.554 [DEBUG] [Thread-194048] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:29:12.555 [DEBUG] [Thread-194048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:29:12.555 [DEBUG] [Thread-194048] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:29:12.555 [DEBUG] [Thread-194048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:29:12.556 [DEBUG] [Thread-194048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:29:12.556 [DEBUG] [Thread-194048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:29:12.556 [DEBUG] [Thread-194048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:29:12.556 [DEBUG] [Thread-194048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:29:12.556 [DEBUG] [Thread-194048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:29:12.556 [DEBUG] [Thread-194048] [transport.py] [_log()] client lang: <none>
2026-02-14T23:29:12.556 [DEBUG] [Thread-194048] [transport.py] [_log()] server lang: <none>
2026-02-14T23:29:12.556 [DEBUG] [Thread-194048] [transport.py] [_log()] kex follows: False
2026-02-14T23:29:12.556 [DEBUG] [Thread-194048] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:29:12.556 [DEBUG] [Thread-194048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:29:12.556 [DEBUG] [Thread-194048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:29:12.557 [DEBUG] [Thread-194048] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:29:12.557 [DEBUG] [Thread-194048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:29:12.557 [DEBUG] [Thread-194048] [transport.py] [_log()] Compression: none
2026-02-14T23:29:12.557 [DEBUG] [Thread-194048] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:29:12.616 [DEBUG] [Thread-194048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:29:12.616 [DEBUG] [Thread-194048] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:29:12.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:29:12.618 [DEBUG] [Thread-194048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:29:12.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:29:12.675 [DEBUG] [Thread-194048] [transport.py] [_log()] userauth is OK
2026-02-14T23:29:12.675 [DEBUG] [Thread-194048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:29:12.675 [DEBUG] [Thread-194048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:29:12.675 [DEBUG] [Thread-194048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:29:12.675 [DEBUG] [Thread-194048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:29:12.689 [INFO] [Thread-194048] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:29:12.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T23:29:12.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:29:13.497 [DEBUG] [Thread-194048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:29:13.497 [DEBUG] [Thread-194048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:29:13.545 [DEBUG] [Thread-194048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:29:13.546 [DEBUG] [Thread-194048] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:29:13.557 [DEBUG] [Thread-194048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:29:13.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:29:13.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:29:13.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-14T23:29:13.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:29:13.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:29:13.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:29:13.604 [DEBUG] [Thread-194048] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:29:21.398 [DEBUG] [Thread-194050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:29:36.451 [DEBUG] [Thread-194051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:29:43.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:29:43.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:29:43.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-14T23:29:45.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 29, 10), 6.1, 65.34, 0.0, 29.29, 8.82, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:29:45.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:29:10
2026-02-14T23:29:46.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:29:46.308 [DEBUG] [Thread-194052] [transport.py] [_log()] starting thread (client mode): 0xa5740040
2026-02-14T23:29:46.308 [DEBUG] [Thread-194052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:29:46.327 [DEBUG] [Thread-194052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:29:46.328 [INFO] [Thread-194052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:29:46.330 [DEBUG] [Thread-194052] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:29:46.330 [DEBUG] [Thread-194052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:29:46.330 [DEBUG] [Thread-194052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:29:46.330 [DEBUG] [Thread-194052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:29:46.330 [DEBUG] [Thread-194052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:29:46.330 [DEBUG] [Thread-194052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:29:46.330 [DEBUG] [Thread-194052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:29:46.330 [DEBUG] [Thread-194052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:29:46.330 [DEBUG] [Thread-194052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:29:46.330 [DEBUG] [Thread-194052] [transport.py] [_log()] client lang: <none>
2026-02-14T23:29:46.330 [DEBUG] [Thread-194052] [transport.py] [_log()] server lang: <none>
2026-02-14T23:29:46.330 [DEBUG] [Thread-194052] [transport.py] [_log()] kex follows: False
2026-02-14T23:29:46.330 [DEBUG] [Thread-194052] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:29:46.330 [DEBUG] [Thread-194052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:29:46.331 [DEBUG] [Thread-194052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:29:46.331 [DEBUG] [Thread-194052] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:29:46.331 [DEBUG] [Thread-194052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:29:46.331 [DEBUG] [Thread-194052] [transport.py] [_log()] Compression: none
2026-02-14T23:29:46.331 [DEBUG] [Thread-194052] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:29:46.348 [DEBUG] [Thread-194052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:29:46.349 [DEBUG] [Thread-194052] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:29:46.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:29:46.350 [DEBUG] [Thread-194052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:29:46.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:29:46.352 [DEBUG] [Thread-194052] [transport.py] [_log()] userauth is OK
2026-02-14T23:29:46.352 [DEBUG] [Thread-194052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:29:46.353 [DEBUG] [Thread-194052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:29:46.353 [DEBUG] [Thread-194052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:29:46.353 [DEBUG] [Thread-194052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:29:46.388 [INFO] [Thread-194052] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:29:46.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:29:47.011 [DEBUG] [Thread-194052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:29:47.012 [DEBUG] [Thread-194052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:29:47.012 [DEBUG] [Thread-194052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:29:47.052 [DEBUG] [Thread-194052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:29:47.052 [DEBUG] [Thread-194052] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:29:47.056 [DEBUG] [Thread-194052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:29:47.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:29:47.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:29:47.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:29:47.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:29:47.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:29:47.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:29:47.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:29:47.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:29:47.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:29:47.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.895250 -999.00   +8.70  30.05     70   +3.60 1 1 2 1 1     0    0 4.84 -16.28 ZNESW 26.1 30.1 160.0 39.4 9.2 -24.5 9.0 -23.3 8.8 -22.5 9.2 -23.4
2026-02-14T23:29:47.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:29:47.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:29:47.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.895250
2026-02-14T23:29:47.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:29:47.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:29:47.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:29:47.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:29:47.085 [DEBUG] [Thread-194052] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:29:47.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:29:47.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:29:10', tmtdew=6.1, humidity=65.34, cloud=0.0, wind=29.29, temperature=8.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:29:10', seeing=2.66, atlas_timestamp='2026-02-14T21:29:09.600', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0417500000000004, -0.0022500000000000853, 0.005250000000000199, -0.013500000000000512, -0.024499999999999744, 0.034250000000000114, 0.011499999999999844, 0.03125, 0.037499999999999645, 0.019000000000000128, -0.051249999999999574, 0.00849999999999973, 0.08249999999999957, 0.049249999999998906, 0.04449999999999932, 0.03049999999999997, 0.07574999999999932, 0.07249999999999979, 0.019999999999999574, -0.006750000000000256, 0.07699999999999818, 0.040749999999999176, -0.0007500000000000284, 0.029749999999999943, 0.06899999999999906, 0.040000000000000924, -0.02224999999999966, 0.007500000000000284, 0.0940000000000012, 0.08800000000000097, 0.07000000000000028, 0.07000000000000028, 0.02874999999999872], zp_timestamp='2026-02-14T21:28:00')
2026-02-14T23:29:47.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-14T23:29:47.182 [DEBUG] [Thread-194055] [transport.py] [_log()] starting thread (client mode): 0xa2d781c0
2026-02-14T23:29:47.183 [DEBUG] [Thread-194055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:29:47.197 [DEBUG] [Thread-194055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:29:47.197 [INFO] [Thread-194055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:29:47.204 [DEBUG] [Thread-194055] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:29:47.205 [DEBUG] [Thread-194055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:29:47.205 [DEBUG] [Thread-194055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:29:47.205 [DEBUG] [Thread-194055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:29:47.205 [DEBUG] [Thread-194055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:29:47.205 [DEBUG] [Thread-194055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:29:47.205 [DEBUG] [Thread-194055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:29:47.205 [DEBUG] [Thread-194055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:29:47.205 [DEBUG] [Thread-194055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:29:47.205 [DEBUG] [Thread-194055] [transport.py] [_log()] client lang: <none>
2026-02-14T23:29:47.205 [DEBUG] [Thread-194055] [transport.py] [_log()] server lang: <none>
2026-02-14T23:29:47.205 [DEBUG] [Thread-194055] [transport.py] [_log()] kex follows: False
2026-02-14T23:29:47.205 [DEBUG] [Thread-194055] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:29:47.205 [DEBUG] [Thread-194055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:29:47.205 [DEBUG] [Thread-194055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:29:47.205 [DEBUG] [Thread-194055] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:29:47.206 [DEBUG] [Thread-194055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:29:47.206 [DEBUG] [Thread-194055] [transport.py] [_log()] Compression: none
2026-02-14T23:29:47.206 [DEBUG] [Thread-194055] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:29:47.263 [DEBUG] [Thread-194055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:29:47.264 [DEBUG] [Thread-194055] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:29:47.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:29:47.265 [DEBUG] [Thread-194055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:29:47.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:29:47.319 [DEBUG] [Thread-194055] [transport.py] [_log()] userauth is OK
2026-02-14T23:29:47.320 [DEBUG] [Thread-194055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:29:47.320 [DEBUG] [Thread-194055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:29:47.320 [DEBUG] [Thread-194055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:29:47.320 [DEBUG] [Thread-194055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:29:47.344 [INFO] [Thread-194055] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:29:47.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-14T23:29:47.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:29:48.157 [DEBUG] [Thread-194055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:29:48.157 [DEBUG] [Thread-194055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:29:48.208 [DEBUG] [Thread-194055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:29:48.208 [DEBUG] [Thread-194055] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:29:48.220 [DEBUG] [Thread-194055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:29:48.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:29: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')
2026-02-14T23:29:48.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-14T23:29:48.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:29:48.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:29:48.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:29:48.257 [DEBUG] [Thread-194055] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:29:51.484 [DEBUG] [Thread-194057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:30:05.282 [DEBUG] [Thread-194058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:30:06.543 [DEBUG] [Thread-194059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:30:08.022 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:30:08.023 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:30:18.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:30:18.279 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:30:18.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-14T23:30:20.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 29, 45), 6.09, 65.36, 0.0, 30.05, 8.77, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:30:20.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:29:45
2026-02-14T23:30:20.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:30:20.871 [DEBUG] [Thread-194060] [transport.py] [_log()] starting thread (client mode): 0xa2d02da0
2026-02-14T23:30:20.871 [DEBUG] [Thread-194060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:30:20.892 [DEBUG] [Thread-194060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:30:20.892 [INFO] [Thread-194060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:30:20.895 [DEBUG] [Thread-194060] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:30:20.895 [DEBUG] [Thread-194060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:30:20.895 [DEBUG] [Thread-194060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:30:20.895 [DEBUG] [Thread-194060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:30:20.895 [DEBUG] [Thread-194060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:30:20.895 [DEBUG] [Thread-194060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:30:20.895 [DEBUG] [Thread-194060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:30:20.895 [DEBUG] [Thread-194060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:30:20.896 [DEBUG] [Thread-194060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:30:20.896 [DEBUG] [Thread-194060] [transport.py] [_log()] client lang: <none>
2026-02-14T23:30:20.896 [DEBUG] [Thread-194060] [transport.py] [_log()] server lang: <none>
2026-02-14T23:30:20.896 [DEBUG] [Thread-194060] [transport.py] [_log()] kex follows: False
2026-02-14T23:30:20.896 [DEBUG] [Thread-194060] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:30:20.896 [DEBUG] [Thread-194060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:30:20.896 [DEBUG] [Thread-194060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:30:20.896 [DEBUG] [Thread-194060] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:30:20.896 [DEBUG] [Thread-194060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:30:20.896 [DEBUG] [Thread-194060] [transport.py] [_log()] Compression: none
2026-02-14T23:30:20.896 [DEBUG] [Thread-194060] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:30:20.912 [DEBUG] [Thread-194060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:30:20.913 [DEBUG] [Thread-194060] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:30:20.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:30:20.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:30:20.914 [DEBUG] [Thread-194060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:30:20.915 [DEBUG] [Thread-194060] [transport.py] [_log()] userauth is OK
2026-02-14T23:30:20.915 [DEBUG] [Thread-194060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:30:20.915 [DEBUG] [Thread-194060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:30:20.915 [DEBUG] [Thread-194060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:30:20.915 [DEBUG] [Thread-194060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:30:20.939 [INFO] [Thread-194060] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:30:20.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:30:21.579 [DEBUG] [Thread-194062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:30:21.581 [DEBUG] [Thread-194060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:30:21.581 [DEBUG] [Thread-194060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:30:21.581 [DEBUG] [Thread-194060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:30:21.622 [DEBUG] [Thread-194060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:30:21.623 [DEBUG] [Thread-194060] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:30:21.626 [DEBUG] [Thread-194060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:30:21.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:30:21.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:30:21.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:30:21.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:30:21.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:30:21.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:30:21.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:30:21.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:30:21.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:30:21.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.895597 -999.00   +8.70  23.68     70   +3.70 1 1 1 1 1     0    0 4.67 -16.89 ZNESW 28.2 23.7 160.8 31.7 9.2 -24.4 9.1 -23.5 8.8 -22.5 9.2 -23.5
2026-02-14T23:30:21.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:30:21.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:30:21.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.895597
2026-02-14T23:30:21.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:30:21.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:30:21.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:30:21.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:30:21.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:30:21.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:29:45', tmtdew=6.09, humidity=65.36, cloud=0.0, wind=30.05, temperature=8.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:29:45', seeing=3.02, atlas_timestamp='2026-02-14T21:29:39.581', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0417500000000004, -0.0022500000000000853, 0.005250000000000199, -0.013500000000000512, -0.024499999999999744, 0.034250000000000114, 0.011499999999999844, 0.03125, 0.037499999999999645, 0.019000000000000128, -0.051249999999999574, 0.00849999999999973, 0.08249999999999957, 0.049249999999998906, 0.04449999999999932, 0.03049999999999997, 0.07574999999999932, 0.07249999999999979, 0.019999999999999574, -0.006750000000000256, 0.07699999999999818, 0.040749999999999176, -0.0007500000000000284, 0.029749999999999943, 0.06899999999999906, 0.040000000000000924, -0.02224999999999966, 0.007500000000000284, 0.0940000000000012, 0.08800000000000097, 0.07000000000000028, 0.07000000000000028, 0.02874999999999872], zp_timestamp='2026-02-14T21:28:00')
2026-02-14T23:30:21.654 [DEBUG] [Thread-194060] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:30:21.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-14T23:30:21.753 [DEBUG] [Thread-194064] [transport.py] [_log()] starting thread (client mode): 0xa57423e0
2026-02-14T23:30:21.753 [DEBUG] [Thread-194064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:30:21.769 [DEBUG] [Thread-194064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:30:21.769 [INFO] [Thread-194064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:30:21.777 [DEBUG] [Thread-194064] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:30:21.777 [DEBUG] [Thread-194064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:30:21.778 [DEBUG] [Thread-194064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:30:21.778 [DEBUG] [Thread-194064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:30:21.778 [DEBUG] [Thread-194064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:30:21.778 [DEBUG] [Thread-194064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:30:21.778 [DEBUG] [Thread-194064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:30:21.778 [DEBUG] [Thread-194064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:30:21.778 [DEBUG] [Thread-194064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:30:21.778 [DEBUG] [Thread-194064] [transport.py] [_log()] client lang: <none>
2026-02-14T23:30:21.778 [DEBUG] [Thread-194064] [transport.py] [_log()] server lang: <none>
2026-02-14T23:30:21.778 [DEBUG] [Thread-194064] [transport.py] [_log()] kex follows: False
2026-02-14T23:30:21.778 [DEBUG] [Thread-194064] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:30:21.778 [DEBUG] [Thread-194064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:30:21.778 [DEBUG] [Thread-194064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:30:21.778 [DEBUG] [Thread-194064] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:30:21.778 [DEBUG] [Thread-194064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:30:21.778 [DEBUG] [Thread-194064] [transport.py] [_log()] Compression: none
2026-02-14T23:30:21.778 [DEBUG] [Thread-194064] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:30:21.835 [DEBUG] [Thread-194064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:30:21.836 [DEBUG] [Thread-194064] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:30:21.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:30:21.837 [DEBUG] [Thread-194064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:30:21.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:30:21.892 [DEBUG] [Thread-194064] [transport.py] [_log()] userauth is OK
2026-02-14T23:30:21.892 [DEBUG] [Thread-194064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:30:21.893 [DEBUG] [Thread-194064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:30:21.893 [DEBUG] [Thread-194064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:30:21.893 [DEBUG] [Thread-194064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:30:21.910 [INFO] [Thread-194064] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:30:21.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-14T23:30:21.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:30:22.689 [DEBUG] [Thread-194064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:30:22.690 [DEBUG] [Thread-194064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:30:22.740 [DEBUG] [Thread-194064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:30:22.740 [DEBUG] [Thread-194064] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:30:22.749 [DEBUG] [Thread-194064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:30:22.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:30:22.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:30:22.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-14T23:30:22.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:30:22.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:30:22.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:30:22.786 [DEBUG] [Thread-194064] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:30:36.615 [DEBUG] [Thread-194066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:30:51.668 [DEBUG] [Thread-194067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:30:52.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:30:52.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:30:52.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:30:54.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 30, 20), 6.07, 65.44, 0.0, 31.14, 8.79, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:30:54.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:30:20
2026-02-14T23:30:55.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:30:55.238 [DEBUG] [Thread-194068] [transport.py] [_log()] starting thread (client mode): 0xa2d18310
2026-02-14T23:30:55.239 [DEBUG] [Thread-194068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:30:55.258 [DEBUG] [Thread-194068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:30:55.258 [INFO] [Thread-194068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:30:55.261 [DEBUG] [Thread-194068] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:30:55.261 [DEBUG] [Thread-194068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:30:55.261 [DEBUG] [Thread-194068] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:30:55.262 [DEBUG] [Thread-194068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:30:55.262 [DEBUG] [Thread-194068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:30:55.262 [DEBUG] [Thread-194068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:30:55.262 [DEBUG] [Thread-194068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:30:55.262 [DEBUG] [Thread-194068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:30:55.262 [DEBUG] [Thread-194068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:30:55.262 [DEBUG] [Thread-194068] [transport.py] [_log()] client lang: <none>
2026-02-14T23:30:55.262 [DEBUG] [Thread-194068] [transport.py] [_log()] server lang: <none>
2026-02-14T23:30:55.262 [DEBUG] [Thread-194068] [transport.py] [_log()] kex follows: False
2026-02-14T23:30:55.262 [DEBUG] [Thread-194068] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:30:55.262 [DEBUG] [Thread-194068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:30:55.262 [DEBUG] [Thread-194068] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:30:55.262 [DEBUG] [Thread-194068] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:30:55.262 [DEBUG] [Thread-194068] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:30:55.262 [DEBUG] [Thread-194068] [transport.py] [_log()] Compression: none
2026-02-14T23:30:55.262 [DEBUG] [Thread-194068] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:30:55.279 [DEBUG] [Thread-194068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:30:55.279 [DEBUG] [Thread-194068] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:30:55.280 [DEBUG] [Thread-194068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:30:55.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:30:55.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:30:55.282 [DEBUG] [Thread-194068] [transport.py] [_log()] userauth is OK
2026-02-14T23:30:55.282 [DEBUG] [Thread-194068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:30:55.282 [DEBUG] [Thread-194068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:30:55.282 [DEBUG] [Thread-194068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:30:55.282 [DEBUG] [Thread-194068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:30:55.298 [INFO] [Thread-194068] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:30:55.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:30:55.932 [DEBUG] [Thread-194068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:30:55.933 [DEBUG] [Thread-194068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:30:55.933 [DEBUG] [Thread-194068] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:30:55.973 [DEBUG] [Thread-194068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:30:55.974 [DEBUG] [Thread-194068] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:30:55.977 [DEBUG] [Thread-194068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:30:55.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:30:55.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:30:55.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:30:55.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:30:55.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:30:56.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:30:56.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:30:56.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:30:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:30:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.896291 -999.00   +8.70  20.40     70   +3.70 1 1 1 1 1     0    0 4.67 -20.70 ZNESW 24.9 20.4 155.9 35.5 9.2 -24.4 9.0 -23.5 8.8 -22.5 9.1 -23.7
2026-02-14T23:30:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:30:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:30:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.896291
2026-02-14T23:30:56.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:30:56.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:30:56.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:30:56.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:30:56.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:30:56.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:30:20', tmtdew=6.07, humidity=65.44, cloud=0.0, wind=31.14, temperature=8.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:30:20', seeing=3.95, atlas_timestamp='2026-02-14T21:30:39.542', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0417500000000004, -0.0022500000000000853, 0.005250000000000199, -0.013500000000000512, -0.024499999999999744, 0.034250000000000114, 0.011499999999999844, 0.03125, 0.037499999999999645, 0.019000000000000128, -0.051249999999999574, 0.00849999999999973, 0.08249999999999957, 0.049249999999998906, 0.04449999999999932, 0.03049999999999997, 0.07574999999999932, 0.07249999999999979, 0.019999999999999574, -0.006750000000000256, 0.07699999999999818, 0.040749999999999176, -0.0007500000000000284, 0.029749999999999943, 0.06899999999999906, 0.040000000000000924, -0.02224999999999966, 0.007500000000000284, 0.0940000000000012, 0.08800000000000097, 0.07000000000000028, 0.07000000000000028, 0.02874999999999872], zp_timestamp='2026-02-14T21:28:00')
2026-02-14T23:30:56.004 [DEBUG] [Thread-194068] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:30:56.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-14T23:30:56.102 [DEBUG] [Thread-194071] [transport.py] [_log()] starting thread (client mode): 0xa2d1b730
2026-02-14T23:30:56.102 [DEBUG] [Thread-194071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:30:56.119 [DEBUG] [Thread-194071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:30:56.119 [INFO] [Thread-194071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:30:56.126 [DEBUG] [Thread-194071] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:30:56.127 [DEBUG] [Thread-194071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:30:56.127 [DEBUG] [Thread-194071] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:30:56.127 [DEBUG] [Thread-194071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:30:56.127 [DEBUG] [Thread-194071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:30:56.127 [DEBUG] [Thread-194071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:30:56.128 [DEBUG] [Thread-194071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:30:56.128 [DEBUG] [Thread-194071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:30:56.128 [DEBUG] [Thread-194071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:30:56.128 [DEBUG] [Thread-194071] [transport.py] [_log()] client lang: <none>
2026-02-14T23:30:56.128 [DEBUG] [Thread-194071] [transport.py] [_log()] server lang: <none>
2026-02-14T23:30:56.128 [DEBUG] [Thread-194071] [transport.py] [_log()] kex follows: False
2026-02-14T23:30:56.129 [DEBUG] [Thread-194071] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:30:56.129 [DEBUG] [Thread-194071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:30:56.129 [DEBUG] [Thread-194071] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:30:56.129 [DEBUG] [Thread-194071] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:30:56.129 [DEBUG] [Thread-194071] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:30:56.129 [DEBUG] [Thread-194071] [transport.py] [_log()] Compression: none
2026-02-14T23:30:56.129 [DEBUG] [Thread-194071] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:30:56.187 [DEBUG] [Thread-194071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:30:56.188 [DEBUG] [Thread-194071] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:30:56.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:30:56.189 [DEBUG] [Thread-194071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:30:56.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:30:56.243 [DEBUG] [Thread-194071] [transport.py] [_log()] userauth is OK
2026-02-14T23:30:56.243 [DEBUG] [Thread-194071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:30:56.243 [DEBUG] [Thread-194071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:30:56.243 [DEBUG] [Thread-194071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:30:56.243 [DEBUG] [Thread-194071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:30:56.258 [INFO] [Thread-194071] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:30:56.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-14T23:30:56.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:30:57.065 [DEBUG] [Thread-194071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:30:57.065 [DEBUG] [Thread-194071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:30:57.113 [DEBUG] [Thread-194071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:30:57.114 [DEBUG] [Thread-194071] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:30:57.123 [DEBUG] [Thread-194071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:30:57.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:30:57.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:30:57.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-14T23:30:57.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:30:57.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:30:57.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:30:57.160 [DEBUG] [Thread-194071] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:31:05.339 [DEBUG] [Thread-194073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:31:06.705 [DEBUG] [Thread-194074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:31:08.223 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:31:08.223 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:31:21.757 [DEBUG] [Thread-194075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:31:27.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:31:27.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:31:27.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-14T23:31:29.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 30, 56), 6.11, 65.53, 0.0, 40.55, 8.84, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:31:29.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:30:56
2026-02-14T23:31:29.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:31:29.532 [DEBUG] [Thread-194076] [transport.py] [_log()] starting thread (client mode): 0xa2d6b4c0
2026-02-14T23:31:29.532 [DEBUG] [Thread-194076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:31:29.551 [DEBUG] [Thread-194076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:31:29.552 [INFO] [Thread-194076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:31:29.555 [DEBUG] [Thread-194076] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:31:29.555 [DEBUG] [Thread-194076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:31:29.555 [DEBUG] [Thread-194076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:31:29.555 [DEBUG] [Thread-194076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:31:29.555 [DEBUG] [Thread-194076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:31:29.555 [DEBUG] [Thread-194076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:31:29.555 [DEBUG] [Thread-194076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:31:29.555 [DEBUG] [Thread-194076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:31:29.555 [DEBUG] [Thread-194076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:31:29.555 [DEBUG] [Thread-194076] [transport.py] [_log()] client lang: <none>
2026-02-14T23:31:29.555 [DEBUG] [Thread-194076] [transport.py] [_log()] server lang: <none>
2026-02-14T23:31:29.555 [DEBUG] [Thread-194076] [transport.py] [_log()] kex follows: False
2026-02-14T23:31:29.555 [DEBUG] [Thread-194076] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:31:29.555 [DEBUG] [Thread-194076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:31:29.555 [DEBUG] [Thread-194076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:31:29.555 [DEBUG] [Thread-194076] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:31:29.555 [DEBUG] [Thread-194076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:31:29.555 [DEBUG] [Thread-194076] [transport.py] [_log()] Compression: none
2026-02-14T23:31:29.555 [DEBUG] [Thread-194076] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:31:29.572 [DEBUG] [Thread-194076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:31:29.573 [DEBUG] [Thread-194076] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:31:29.573 [DEBUG] [Thread-194076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:31:29.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:31:29.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:31:29.575 [DEBUG] [Thread-194076] [transport.py] [_log()] userauth is OK
2026-02-14T23:31:29.576 [DEBUG] [Thread-194076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:31:29.576 [DEBUG] [Thread-194076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:31:29.576 [DEBUG] [Thread-194076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:31:29.576 [DEBUG] [Thread-194076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:31:29.601 [INFO] [Thread-194076] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:31:29.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:31:30.241 [DEBUG] [Thread-194076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:31:30.242 [DEBUG] [Thread-194076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:31:30.242 [DEBUG] [Thread-194076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:31:30.282 [DEBUG] [Thread-194076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:31:30.283 [DEBUG] [Thread-194076] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:31:30.286 [DEBUG] [Thread-194076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:31:30.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:31:30.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:31:30.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:31:30.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:31:30.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:31:30.309 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:31:30.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:31:30.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:31:30.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:31:30.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.896639 -999.00   +8.70  37.97     70   +3.70 1 1 2 1 1     0    0 4.71 -20.15 ZNESW 34.4 38.0 173.2 48.4 9.2 -24.5 9.0 -23.4 8.9 -22.4 9.2 -23.7
2026-02-14T23:31:30.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:31:30.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:31:30.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.896639
2026-02-14T23:31:30.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:31:30.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:31:30.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:31:30.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:31:30.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:31:30.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:30:56', tmtdew=6.11, humidity=65.53, cloud=0.0, wind=40.55, temperature=8.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:30:57', seeing=4.34, atlas_timestamp='2026-02-14T21:31:09.610', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0417500000000004, -0.0022500000000000853, 0.005250000000000199, -0.013500000000000512, -0.024499999999999744, 0.034250000000000114, 0.011499999999999844, 0.03125, 0.037499999999999645, 0.019000000000000128, -0.051249999999999574, 0.00849999999999973, 0.08249999999999957, 0.049249999999998906, 0.04449999999999932, 0.03049999999999997, 0.07574999999999932, 0.07249999999999979, 0.019999999999999574, -0.006750000000000256, 0.07699999999999818, 0.040749999999999176, -0.0007500000000000284, 0.029749999999999943, 0.06899999999999906, 0.040000000000000924, -0.02224999999999966, 0.007500000000000284, 0.0940000000000012, 0.08800000000000097, 0.07000000000000028, 0.07000000000000028, 0.02874999999999872], zp_timestamp='2026-02-14T21:28:00')
2026-02-14T23:31:30.312 [DEBUG] [Thread-194076] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:31:30.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T23:31:30.411 [DEBUG] [Thread-194079] [transport.py] [_log()] starting thread (client mode): 0xa5743d30
2026-02-14T23:31:30.411 [DEBUG] [Thread-194079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:31:30.426 [DEBUG] [Thread-194079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:31:30.426 [INFO] [Thread-194079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:31:30.435 [DEBUG] [Thread-194079] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:31:30.435 [DEBUG] [Thread-194079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:31:30.435 [DEBUG] [Thread-194079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:31:30.435 [DEBUG] [Thread-194079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:31:30.435 [DEBUG] [Thread-194079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:31:30.435 [DEBUG] [Thread-194079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:31:30.436 [DEBUG] [Thread-194079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:31:30.436 [DEBUG] [Thread-194079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:31:30.436 [DEBUG] [Thread-194079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:31:30.436 [DEBUG] [Thread-194079] [transport.py] [_log()] client lang: <none>
2026-02-14T23:31:30.436 [DEBUG] [Thread-194079] [transport.py] [_log()] server lang: <none>
2026-02-14T23:31:30.436 [DEBUG] [Thread-194079] [transport.py] [_log()] kex follows: False
2026-02-14T23:31:30.436 [DEBUG] [Thread-194079] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:31:30.437 [DEBUG] [Thread-194079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:31:30.437 [DEBUG] [Thread-194079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:31:30.437 [DEBUG] [Thread-194079] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:31:30.437 [DEBUG] [Thread-194079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:31:30.437 [DEBUG] [Thread-194079] [transport.py] [_log()] Compression: none
2026-02-14T23:31:30.437 [DEBUG] [Thread-194079] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:31:30.492 [DEBUG] [Thread-194079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:31:30.493 [DEBUG] [Thread-194079] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:31:30.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:31:30.494 [DEBUG] [Thread-194079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:31:30.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:31:30.552 [DEBUG] [Thread-194079] [transport.py] [_log()] userauth is OK
2026-02-14T23:31:30.552 [DEBUG] [Thread-194079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:31:30.553 [DEBUG] [Thread-194079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:31:30.553 [DEBUG] [Thread-194079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:31:30.553 [DEBUG] [Thread-194079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:31:30.578 [INFO] [Thread-194079] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:31:30.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-14T23:31:30.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:31:31.361 [DEBUG] [Thread-194079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:31:31.361 [DEBUG] [Thread-194079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:31:31.410 [DEBUG] [Thread-194079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:31:31.410 [DEBUG] [Thread-194079] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:31:31.419 [DEBUG] [Thread-194079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:31:31.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:31:31.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:31:31.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:31:31.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:31:31.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:31:31.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:31:31.457 [DEBUG] [Thread-194079] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:31:36.793 [DEBUG] [Thread-194081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:31:51.841 [DEBUG] [Thread-194082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:32:01.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:32:01.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:32:01.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:32:03.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 31, 33), 6.19, 65.15, 0.0, 44.0, 9.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:32:03.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:31:33
2026-02-14T23:32:03.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:32:03.818 [DEBUG] [Thread-194083] [transport.py] [_log()] starting thread (client mode): 0xa2d01270
2026-02-14T23:32:03.818 [DEBUG] [Thread-194083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:32:03.839 [DEBUG] [Thread-194083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:32:03.839 [INFO] [Thread-194083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:32:03.842 [DEBUG] [Thread-194083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:32:03.843 [DEBUG] [Thread-194083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:32:03.843 [DEBUG] [Thread-194083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:32:03.843 [DEBUG] [Thread-194083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:32:03.843 [DEBUG] [Thread-194083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:32:03.843 [DEBUG] [Thread-194083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:32:03.843 [DEBUG] [Thread-194083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:32:03.843 [DEBUG] [Thread-194083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:32:03.843 [DEBUG] [Thread-194083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:32:03.843 [DEBUG] [Thread-194083] [transport.py] [_log()] client lang: <none>
2026-02-14T23:32:03.843 [DEBUG] [Thread-194083] [transport.py] [_log()] server lang: <none>
2026-02-14T23:32:03.843 [DEBUG] [Thread-194083] [transport.py] [_log()] kex follows: False
2026-02-14T23:32:03.843 [DEBUG] [Thread-194083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:32:03.843 [DEBUG] [Thread-194083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:32:03.843 [DEBUG] [Thread-194083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:32:03.843 [DEBUG] [Thread-194083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:32:03.843 [DEBUG] [Thread-194083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:32:03.843 [DEBUG] [Thread-194083] [transport.py] [_log()] Compression: none
2026-02-14T23:32:03.843 [DEBUG] [Thread-194083] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:32:03.860 [DEBUG] [Thread-194083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:32:03.861 [DEBUG] [Thread-194083] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:32:03.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:32:03.862 [DEBUG] [Thread-194083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:32:03.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:32:03.864 [DEBUG] [Thread-194083] [transport.py] [_log()] userauth is OK
2026-02-14T23:32:03.864 [DEBUG] [Thread-194083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:32:03.864 [DEBUG] [Thread-194083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:32:03.865 [DEBUG] [Thread-194083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:32:03.865 [DEBUG] [Thread-194083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:32:03.888 [INFO] [Thread-194083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:32:03.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:32:04.517 [DEBUG] [Thread-194083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:32:04.517 [DEBUG] [Thread-194083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:32:04.518 [DEBUG] [Thread-194083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:32:04.558 [DEBUG] [Thread-194083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:32:04.559 [DEBUG] [Thread-194083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:32:04.562 [DEBUG] [Thread-194083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:32:04.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:32:04.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:32:04.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:32:04.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:32:04.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:32:04.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:32:04.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:32:04.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:32:04.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:32:04.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.896986 -999.00   +8.70  25.86     70   +3.70 1 1 1 1 1     0    0 4.66 -21.08 ZNESW 28.2 25.9 164.8 39.8 9.2 -24.4 9.0 -23.4 8.8 -22.4 9.2 -23.7
2026-02-14T23:32:04.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:32:04.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:32:04.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.896986
2026-02-14T23:32:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:32:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:32:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:32:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:32:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:32:04.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:31:33', tmtdew=6.19, humidity=65.15, cloud=0.0, wind=44.0, temperature=9.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:31:33', seeing=3.31, atlas_timestamp='2026-02-14T21:31:39.590', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0417500000000004, -0.0022500000000000853, 0.005250000000000199, -0.013500000000000512, -0.024499999999999744, 0.034250000000000114, 0.011499999999999844, 0.03125, 0.037499999999999645, 0.019000000000000128, -0.051249999999999574, 0.00849999999999973, 0.08249999999999957, 0.049249999999998906, 0.04449999999999932, 0.03049999999999997, 0.07574999999999932, 0.07249999999999979, 0.019999999999999574, -0.006750000000000256, 0.07699999999999818, 0.040749999999999176, -0.0007500000000000284, 0.029749999999999943, 0.06899999999999906, 0.040000000000000924, -0.02224999999999966, 0.007500000000000284, 0.0940000000000012, 0.08800000000000097, 0.07000000000000028, 0.07000000000000028, 0.02874999999999872], zp_timestamp='2026-02-14T21:28:00')
2026-02-14T23:32:04.590 [DEBUG] [Thread-194083] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:32:04.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-14T23:32:04.693 [DEBUG] [Thread-194086] [transport.py] [_log()] starting thread (client mode): 0xa2d7ba60
2026-02-14T23:32:04.694 [DEBUG] [Thread-194086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:32:04.708 [DEBUG] [Thread-194086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:32:04.708 [INFO] [Thread-194086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:32:04.717 [DEBUG] [Thread-194086] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:32:04.717 [DEBUG] [Thread-194086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:32:04.717 [DEBUG] [Thread-194086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:32:04.717 [DEBUG] [Thread-194086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:32:04.718 [DEBUG] [Thread-194086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:32:04.718 [DEBUG] [Thread-194086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:32:04.718 [DEBUG] [Thread-194086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:32:04.718 [DEBUG] [Thread-194086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:32:04.718 [DEBUG] [Thread-194086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:32:04.718 [DEBUG] [Thread-194086] [transport.py] [_log()] client lang: <none>
2026-02-14T23:32:04.718 [DEBUG] [Thread-194086] [transport.py] [_log()] server lang: <none>
2026-02-14T23:32:04.718 [DEBUG] [Thread-194086] [transport.py] [_log()] kex follows: False
2026-02-14T23:32:04.718 [DEBUG] [Thread-194086] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:32:04.719 [DEBUG] [Thread-194086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:32:04.719 [DEBUG] [Thread-194086] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:32:04.719 [DEBUG] [Thread-194086] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:32:04.719 [DEBUG] [Thread-194086] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:32:04.719 [DEBUG] [Thread-194086] [transport.py] [_log()] Compression: none
2026-02-14T23:32:04.719 [DEBUG] [Thread-194086] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:32:04.787 [DEBUG] [Thread-194086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:32:04.788 [DEBUG] [Thread-194086] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:32:04.788 [DEBUG] [Thread-194086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:32:04.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:32:04.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:32:04.850 [DEBUG] [Thread-194086] [transport.py] [_log()] userauth is OK
2026-02-14T23:32:04.850 [DEBUG] [Thread-194086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:32:04.850 [DEBUG] [Thread-194086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:32:04.850 [DEBUG] [Thread-194086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:32:04.850 [DEBUG] [Thread-194086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:32:04.873 [INFO] [Thread-194086] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:32:04.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-14T23:32:04.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:32:05.398 [DEBUG] [Thread-194088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:32:05.700 [DEBUG] [Thread-194086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:32:05.700 [DEBUG] [Thread-194086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:32:05.749 [DEBUG] [Thread-194086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:32:05.749 [DEBUG] [Thread-194086] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:32:05.759 [DEBUG] [Thread-194086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:32:05.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:32:05.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-14T23:32:05.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-14T23:32:05.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:32:05.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:32:05.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:32:05.798 [DEBUG] [Thread-194086] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:32:06.878 [DEBUG] [Thread-194089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:32:08.424 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:32:08.425 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:32:21.939 [DEBUG] [Thread-194090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:32:35.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:32:35.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:32:35.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:32:36.974 [DEBUG] [Thread-194091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:32:37.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 32, 9), 6.06, 65.53, 0.0, 35.82, 8.82, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:32:37.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:32:09
2026-02-14T23:32:37.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:32:38.139 [DEBUG] [Thread-194092] [transport.py] [_log()] starting thread (client mode): 0xa2d03c10
2026-02-14T23:32:38.139 [DEBUG] [Thread-194092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:32:38.158 [DEBUG] [Thread-194092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:32:38.158 [INFO] [Thread-194092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:32:38.161 [DEBUG] [Thread-194092] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:32:38.161 [DEBUG] [Thread-194092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:32:38.161 [DEBUG] [Thread-194092] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:32:38.161 [DEBUG] [Thread-194092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:32:38.161 [DEBUG] [Thread-194092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:32:38.161 [DEBUG] [Thread-194092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:32:38.161 [DEBUG] [Thread-194092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:32:38.161 [DEBUG] [Thread-194092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:32:38.161 [DEBUG] [Thread-194092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:32:38.161 [DEBUG] [Thread-194092] [transport.py] [_log()] client lang: <none>
2026-02-14T23:32:38.161 [DEBUG] [Thread-194092] [transport.py] [_log()] server lang: <none>
2026-02-14T23:32:38.161 [DEBUG] [Thread-194092] [transport.py] [_log()] kex follows: False
2026-02-14T23:32:38.161 [DEBUG] [Thread-194092] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:32:38.161 [DEBUG] [Thread-194092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:32:38.161 [DEBUG] [Thread-194092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:32:38.161 [DEBUG] [Thread-194092] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:32:38.161 [DEBUG] [Thread-194092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:32:38.161 [DEBUG] [Thread-194092] [transport.py] [_log()] Compression: none
2026-02-14T23:32:38.161 [DEBUG] [Thread-194092] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:32:38.180 [DEBUG] [Thread-194092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:32:38.180 [DEBUG] [Thread-194092] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:32:38.181 [DEBUG] [Thread-194092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:32:38.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:32:38.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:32:38.183 [DEBUG] [Thread-194092] [transport.py] [_log()] userauth is OK
2026-02-14T23:32:38.183 [DEBUG] [Thread-194092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:32:38.183 [DEBUG] [Thread-194092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:32:38.183 [DEBUG] [Thread-194092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:32:38.183 [DEBUG] [Thread-194092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:32:38.206 [INFO] [Thread-194092] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:32:38.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:32:38.842 [DEBUG] [Thread-194092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:32:38.843 [DEBUG] [Thread-194092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:32:38.843 [DEBUG] [Thread-194092] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:32:38.883 [DEBUG] [Thread-194092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:32:38.884 [DEBUG] [Thread-194092] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:32:38.887 [DEBUG] [Thread-194092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:32:38.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:32:38.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:32:38.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:32:38.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:32:38.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:32:38.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:32:38.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:32:38.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:32:38.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:32:38.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.897333 -999.00   +8.70  26.80     70   +3.70 1 1 1 1 1     0    0 4.62 -20.42 ZNESW 21.7 26.8 157.2 39.7 9.2 -24.5 9.0 -23.5 8.8 -22.5 9.2 -23.7
2026-02-14T23:32:38.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:32:38.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:32:38.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.897333
2026-02-14T23:32:38.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:32:38.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:32:38.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:32:38.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:32:38.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:32:38.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:32:09', tmtdew=6.06, humidity=65.53, cloud=0.0, wind=35.82, temperature=8.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:32:09', seeing=3.84, atlas_timestamp='2026-02-14T21:32:09.571', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0417500000000004, -0.0022500000000000853, 0.005250000000000199, -0.013500000000000512, -0.024499999999999744, 0.034250000000000114, 0.011499999999999844, 0.03125, 0.037499999999999645, 0.019000000000000128, -0.051249999999999574, 0.00849999999999973, 0.08249999999999957, 0.049249999999998906, 0.04449999999999932, 0.03049999999999997, 0.07574999999999932, 0.07249999999999979, 0.019999999999999574, -0.006750000000000256, 0.07699999999999818, 0.040749999999999176, -0.0007500000000000284, 0.029749999999999943, 0.06899999999999906, 0.040000000000000924, -0.02224999999999966, 0.007500000000000284, 0.0940000000000012, 0.08800000000000097, 0.07000000000000028, 0.07000000000000028, 0.02874999999999872], zp_timestamp='2026-02-14T21:28:00')
2026-02-14T23:32:38.915 [DEBUG] [Thread-194092] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:32:38.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-14T23:32:39.011 [DEBUG] [Thread-194095] [transport.py] [_log()] starting thread (client mode): 0xa2d11630
2026-02-14T23:32:39.011 [DEBUG] [Thread-194095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:32:39.025 [DEBUG] [Thread-194095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:32:39.025 [INFO] [Thread-194095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:32:39.032 [DEBUG] [Thread-194095] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:32:39.032 [DEBUG] [Thread-194095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:32:39.032 [DEBUG] [Thread-194095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:32:39.032 [DEBUG] [Thread-194095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:32:39.032 [DEBUG] [Thread-194095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:32:39.032 [DEBUG] [Thread-194095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:32:39.033 [DEBUG] [Thread-194095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:32:39.033 [DEBUG] [Thread-194095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:32:39.033 [DEBUG] [Thread-194095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:32:39.033 [DEBUG] [Thread-194095] [transport.py] [_log()] client lang: <none>
2026-02-14T23:32:39.033 [DEBUG] [Thread-194095] [transport.py] [_log()] server lang: <none>
2026-02-14T23:32:39.033 [DEBUG] [Thread-194095] [transport.py] [_log()] kex follows: False
2026-02-14T23:32:39.033 [DEBUG] [Thread-194095] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:32:39.033 [DEBUG] [Thread-194095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:32:39.033 [DEBUG] [Thread-194095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:32:39.033 [DEBUG] [Thread-194095] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:32:39.033 [DEBUG] [Thread-194095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:32:39.033 [DEBUG] [Thread-194095] [transport.py] [_log()] Compression: none
2026-02-14T23:32:39.033 [DEBUG] [Thread-194095] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:32:39.095 [DEBUG] [Thread-194095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:32:39.096 [DEBUG] [Thread-194095] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:32:39.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:32:39.097 [DEBUG] [Thread-194095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:32:39.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:32:39.152 [DEBUG] [Thread-194095] [transport.py] [_log()] userauth is OK
2026-02-14T23:32:39.152 [DEBUG] [Thread-194095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:32:39.152 [DEBUG] [Thread-194095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:32:39.152 [DEBUG] [Thread-194095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:32:39.152 [DEBUG] [Thread-194095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:32:39.171 [INFO] [Thread-194095] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:32:39.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-14T23:32:39.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:32:39.938 [DEBUG] [Thread-194095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:32:39.938 [DEBUG] [Thread-194095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:32:39.986 [DEBUG] [Thread-194095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:32:39.986 [DEBUG] [Thread-194095] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:32:39.995 [DEBUG] [Thread-194095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:32:40.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:32:40.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-14T23:32:40.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-14T23:32:40.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:32:40.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:32:40.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:32:40.033 [DEBUG] [Thread-194095] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:32:52.009 [DEBUG] [Thread-194097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:33:05.469 [DEBUG] [Thread-194098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:33:07.051 [DEBUG] [Thread-194099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:33:08.627 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:33:08.628 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:33:10.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:33:10.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:33:10.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-14T23:33:12.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 32, 44), 6.06, 65.51, 0.0, 34.14, 8.82, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:33:12.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:32:44
2026-02-14T23:33:12.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:33:12.744 [DEBUG] [Thread-194100] [transport.py] [_log()] starting thread (client mode): 0xa5770c10
2026-02-14T23:33:12.753 [DEBUG] [Thread-194100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:33:12.764 [DEBUG] [Thread-194100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:33:12.765 [INFO] [Thread-194100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:33:12.768 [DEBUG] [Thread-194100] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:33:12.768 [DEBUG] [Thread-194100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:33:12.768 [DEBUG] [Thread-194100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:33:12.768 [DEBUG] [Thread-194100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:33:12.768 [DEBUG] [Thread-194100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:33:12.768 [DEBUG] [Thread-194100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:33:12.768 [DEBUG] [Thread-194100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:33:12.768 [DEBUG] [Thread-194100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:33:12.768 [DEBUG] [Thread-194100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:33:12.768 [DEBUG] [Thread-194100] [transport.py] [_log()] client lang: <none>
2026-02-14T23:33:12.768 [DEBUG] [Thread-194100] [transport.py] [_log()] server lang: <none>
2026-02-14T23:33:12.768 [DEBUG] [Thread-194100] [transport.py] [_log()] kex follows: False
2026-02-14T23:33:12.768 [DEBUG] [Thread-194100] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:33:12.768 [DEBUG] [Thread-194100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:33:12.768 [DEBUG] [Thread-194100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:33:12.768 [DEBUG] [Thread-194100] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:33:12.768 [DEBUG] [Thread-194100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:33:12.768 [DEBUG] [Thread-194100] [transport.py] [_log()] Compression: none
2026-02-14T23:33:12.768 [DEBUG] [Thread-194100] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:33:12.786 [DEBUG] [Thread-194100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:33:12.787 [DEBUG] [Thread-194100] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:33:12.787 [DEBUG] [Thread-194100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:33:12.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:33:12.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:33:12.789 [DEBUG] [Thread-194100] [transport.py] [_log()] userauth is OK
2026-02-14T23:33:12.789 [DEBUG] [Thread-194100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:33:12.789 [DEBUG] [Thread-194100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:33:12.790 [DEBUG] [Thread-194100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:33:12.790 [DEBUG] [Thread-194100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:33:12.827 [INFO] [Thread-194100] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:33:12.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:33:13.472 [DEBUG] [Thread-194100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:33:13.472 [DEBUG] [Thread-194100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:33:13.473 [DEBUG] [Thread-194100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:33:13.515 [DEBUG] [Thread-194100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:33:13.516 [DEBUG] [Thread-194100] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:33:13.519 [DEBUG] [Thread-194100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:33:13.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:33:13.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:33:13.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:33:13.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:33:13.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:33:13.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:33:13.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:33:13.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:33:13.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:33:13.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.897680 -999.00   +8.70  31.14     70   +3.70 1 1 2 1 1     0    0 4.70 -20.02 ZNESW 28.9 31.1 163.6 40.5 9.2 -24.5 9.0 -23.5 8.8 -22.5 9.2 -23.5
2026-02-14T23:33:13.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:33:13.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:33:13.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.897680
2026-02-14T23:33:13.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:33:13.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:33:13.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:33:13.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:33:13.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:33:13.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:32:44', tmtdew=6.06, humidity=65.51, cloud=0.0, wind=34.14, temperature=8.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:32:44', seeing=4.05, atlas_timestamp='2026-02-14T21:32:39.552', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.025750000000000384, -0.025750000000000384, -0.008500000000001506, 0.009499999999999176, 0.028250000000001663, 0.007999999999999119, -0.03575000000000017, 0.0495000000000001, 0.033500000000000085, -0.04675000000000118, 0.006999999999999673, 0.06400000000000006, 0.03324999999999889, 0.058499999999998664, 0.03399999999999892, 0.030250000000000554, 0.057000000000000384, -0.0024999999999995026, 0.017249999999998877, 0.05649999999999977, 0.031749999999998835, 0.005250000000000199, 0.04974999999999952, 0.07199999999999918, 0.02000000000000135, -0.003249999999999531, 0.00849999999999973, 0.07699999999999996, 0.08500000000000085, 0.06700000000000017, 0.08450000000000202, 0.03974999999999973], zp_timestamp='2026-02-14T21:31:00')
2026-02-14T23:33:13.548 [DEBUG] [Thread-194100] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:33:13.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-14T23:33:13.644 [DEBUG] [Thread-194103] [transport.py] [_log()] starting thread (client mode): 0xa2d6ece0
2026-02-14T23:33:13.644 [DEBUG] [Thread-194103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:33:13.659 [DEBUG] [Thread-194103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:33:13.659 [INFO] [Thread-194103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:33:13.666 [DEBUG] [Thread-194103] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:33:13.667 [DEBUG] [Thread-194103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:33:13.667 [DEBUG] [Thread-194103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:33:13.667 [DEBUG] [Thread-194103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:33:13.667 [DEBUG] [Thread-194103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:33:13.667 [DEBUG] [Thread-194103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:33:13.667 [DEBUG] [Thread-194103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:33:13.667 [DEBUG] [Thread-194103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:33:13.667 [DEBUG] [Thread-194103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:33:13.667 [DEBUG] [Thread-194103] [transport.py] [_log()] client lang: <none>
2026-02-14T23:33:13.667 [DEBUG] [Thread-194103] [transport.py] [_log()] server lang: <none>
2026-02-14T23:33:13.667 [DEBUG] [Thread-194103] [transport.py] [_log()] kex follows: False
2026-02-14T23:33:13.667 [DEBUG] [Thread-194103] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:33:13.667 [DEBUG] [Thread-194103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:33:13.667 [DEBUG] [Thread-194103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:33:13.667 [DEBUG] [Thread-194103] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:33:13.668 [DEBUG] [Thread-194103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:33:13.668 [DEBUG] [Thread-194103] [transport.py] [_log()] Compression: none
2026-02-14T23:33:13.668 [DEBUG] [Thread-194103] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:33:13.728 [DEBUG] [Thread-194103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:33:13.728 [DEBUG] [Thread-194103] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:33:13.729 [DEBUG] [Thread-194103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:33:13.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:33:13.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:33:13.788 [DEBUG] [Thread-194103] [transport.py] [_log()] userauth is OK
2026-02-14T23:33:13.788 [DEBUG] [Thread-194103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:33:13.788 [DEBUG] [Thread-194103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:33:13.788 [DEBUG] [Thread-194103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:33:13.789 [DEBUG] [Thread-194103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:33:13.807 [INFO] [Thread-194103] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:33:13.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-14T23:33:13.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:33:14.652 [DEBUG] [Thread-194103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:33:14.653 [DEBUG] [Thread-194103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:33:14.700 [DEBUG] [Thread-194103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:33:14.701 [DEBUG] [Thread-194103] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:33:14.710 [DEBUG] [Thread-194103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:33:14.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:33:14.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:33:14.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-14T23:33:14.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:33:14.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:33:14.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:33:14.753 [DEBUG] [Thread-194103] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:33:22.090 [DEBUG] [Thread-194105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:33:37.143 [DEBUG] [Thread-194106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:33:44.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:33:44.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:33:44.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-14T23:33:46.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 33, 19), 6.05, 65.54, 0.0, 36.05, 8.84, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:33:46.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:33:19
2026-02-14T23:33:46.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:33:47.161 [DEBUG] [Thread-194107] [transport.py] [_log()] starting thread (client mode): 0xa2d6e6b0
2026-02-14T23:33:47.162 [DEBUG] [Thread-194107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:33:47.181 [DEBUG] [Thread-194107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:33:47.181 [INFO] [Thread-194107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:33:47.185 [DEBUG] [Thread-194107] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:33:47.185 [DEBUG] [Thread-194107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:33:47.185 [DEBUG] [Thread-194107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:33:47.185 [DEBUG] [Thread-194107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:33:47.185 [DEBUG] [Thread-194107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:33:47.185 [DEBUG] [Thread-194107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:33:47.185 [DEBUG] [Thread-194107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:33:47.185 [DEBUG] [Thread-194107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:33:47.185 [DEBUG] [Thread-194107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:33:47.185 [DEBUG] [Thread-194107] [transport.py] [_log()] client lang: <none>
2026-02-14T23:33:47.185 [DEBUG] [Thread-194107] [transport.py] [_log()] server lang: <none>
2026-02-14T23:33:47.185 [DEBUG] [Thread-194107] [transport.py] [_log()] kex follows: False
2026-02-14T23:33:47.185 [DEBUG] [Thread-194107] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:33:47.186 [DEBUG] [Thread-194107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:33:47.186 [DEBUG] [Thread-194107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:33:47.186 [DEBUG] [Thread-194107] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:33:47.186 [DEBUG] [Thread-194107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:33:47.186 [DEBUG] [Thread-194107] [transport.py] [_log()] Compression: none
2026-02-14T23:33:47.186 [DEBUG] [Thread-194107] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:33:47.215 [DEBUG] [Thread-194107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:33:47.215 [DEBUG] [Thread-194107] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:33:47.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:33:47.217 [DEBUG] [Thread-194107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:33:47.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:33:47.219 [DEBUG] [Thread-194107] [transport.py] [_log()] userauth is OK
2026-02-14T23:33:47.219 [DEBUG] [Thread-194107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:33:47.219 [DEBUG] [Thread-194107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:33:47.219 [DEBUG] [Thread-194107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:33:47.219 [DEBUG] [Thread-194107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:33:47.243 [INFO] [Thread-194107] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:33:47.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:33:47.874 [DEBUG] [Thread-194107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:33:47.874 [DEBUG] [Thread-194107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:33:47.874 [DEBUG] [Thread-194107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:33:47.915 [DEBUG] [Thread-194107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:33:47.915 [DEBUG] [Thread-194107] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:33:47.918 [DEBUG] [Thread-194107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:33:47.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:33:47.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:33:47.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:33:47.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:33:47.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:33:47.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:33:47.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:33:47.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:33:47.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:33:47.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.898027 -999.00   +8.70  26.96     70   +3.70 1 1 1 1 1     0    0 4.65 -20.79 ZNESW 21.8 27.0 163.2 36.9 10.2 -25.5 9.0 -23.4 8.8 -22.5 9.1 -23.6
2026-02-14T23:33:47.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:33:47.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:33:47.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.898027
2026-02-14T23:33:47.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:33:47.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:33:47.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:33:47.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:33:47.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:33:47.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:33:19', tmtdew=6.05, humidity=65.54, cloud=0.0, wind=36.05, temperature=8.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:33:19', seeing=3.74, atlas_timestamp='2026-02-14T21:33:09.533', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.025750000000000384, -0.025750000000000384, -0.008500000000001506, 0.009499999999999176, 0.028250000000001663, 0.007999999999999119, -0.03575000000000017, 0.0495000000000001, 0.033500000000000085, -0.04675000000000118, 0.006999999999999673, 0.06400000000000006, 0.03324999999999889, 0.058499999999998664, 0.03399999999999892, 0.030250000000000554, 0.057000000000000384, -0.0024999999999995026, 0.017249999999998877, 0.05649999999999977, 0.031749999999998835, 0.005250000000000199, 0.04974999999999952, 0.07199999999999918, 0.02000000000000135, -0.003249999999999531, 0.00849999999999973, 0.07699999999999996, 0.08500000000000085, 0.06700000000000017, 0.08450000000000202, 0.03974999999999973], zp_timestamp='2026-02-14T21:31:00')
2026-02-14T23:33:47.946 [DEBUG] [Thread-194107] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:33:48.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-14T23:33:48.041 [DEBUG] [Thread-194110] [transport.py] [_log()] starting thread (client mode): 0xa5773310
2026-02-14T23:33:48.041 [DEBUG] [Thread-194110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:33:48.056 [DEBUG] [Thread-194110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:33:48.056 [INFO] [Thread-194110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:33:48.064 [DEBUG] [Thread-194110] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:33:48.064 [DEBUG] [Thread-194110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:33:48.064 [DEBUG] [Thread-194110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:33:48.064 [DEBUG] [Thread-194110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:33:48.064 [DEBUG] [Thread-194110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:33:48.064 [DEBUG] [Thread-194110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:33:48.064 [DEBUG] [Thread-194110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:33:48.064 [DEBUG] [Thread-194110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:33:48.064 [DEBUG] [Thread-194110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:33:48.064 [DEBUG] [Thread-194110] [transport.py] [_log()] client lang: <none>
2026-02-14T23:33:48.064 [DEBUG] [Thread-194110] [transport.py] [_log()] server lang: <none>
2026-02-14T23:33:48.064 [DEBUG] [Thread-194110] [transport.py] [_log()] kex follows: False
2026-02-14T23:33:48.064 [DEBUG] [Thread-194110] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:33:48.064 [DEBUG] [Thread-194110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:33:48.065 [DEBUG] [Thread-194110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:33:48.065 [DEBUG] [Thread-194110] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:33:48.065 [DEBUG] [Thread-194110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:33:48.065 [DEBUG] [Thread-194110] [transport.py] [_log()] Compression: none
2026-02-14T23:33:48.065 [DEBUG] [Thread-194110] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:33:48.127 [DEBUG] [Thread-194110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:33:48.127 [DEBUG] [Thread-194110] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:33:48.128 [DEBUG] [Thread-194110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:33:48.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:33:48.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:33:48.184 [DEBUG] [Thread-194110] [transport.py] [_log()] userauth is OK
2026-02-14T23:33:48.184 [DEBUG] [Thread-194110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:33:48.184 [DEBUG] [Thread-194110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:33:48.184 [DEBUG] [Thread-194110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:33:48.184 [DEBUG] [Thread-194110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:33:48.209 [INFO] [Thread-194110] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:33:48.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-14T23:33:48.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:33:48.997 [DEBUG] [Thread-194110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:33:48.998 [DEBUG] [Thread-194110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:33:49.045 [DEBUG] [Thread-194110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:33:49.045 [DEBUG] [Thread-194110] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:33:49.055 [DEBUG] [Thread-194110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:33:49.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:33:49.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-14T23:33:49.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:33:49.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:33:49.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:33:49.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:33:49.092 [DEBUG] [Thread-194110] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:33:52.184 [DEBUG] [Thread-194112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:34:05.527 [DEBUG] [Thread-194113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:34:07.244 [DEBUG] [Thread-194114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:34:08.828 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:34:08.829 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:34:19.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:34:19.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:34:19.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-14T23:34:21.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 33, 55), 6.06, 65.49, 0.0, 36.43, 8.79, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:34:21.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:33:55
2026-02-14T23:34:21.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:34:21.565 [DEBUG] [Thread-194115] [transport.py] [_log()] starting thread (client mode): 0xa57407c0
2026-02-14T23:34:21.565 [DEBUG] [Thread-194115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:34:21.585 [DEBUG] [Thread-194115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:34:21.586 [INFO] [Thread-194115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:34:21.589 [DEBUG] [Thread-194115] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:34:21.589 [DEBUG] [Thread-194115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:34:21.589 [DEBUG] [Thread-194115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:34:21.589 [DEBUG] [Thread-194115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:34:21.589 [DEBUG] [Thread-194115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:34:21.589 [DEBUG] [Thread-194115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:34:21.589 [DEBUG] [Thread-194115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:34:21.589 [DEBUG] [Thread-194115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:34:21.589 [DEBUG] [Thread-194115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:34:21.589 [DEBUG] [Thread-194115] [transport.py] [_log()] client lang: <none>
2026-02-14T23:34:21.589 [DEBUG] [Thread-194115] [transport.py] [_log()] server lang: <none>
2026-02-14T23:34:21.590 [DEBUG] [Thread-194115] [transport.py] [_log()] kex follows: False
2026-02-14T23:34:21.590 [DEBUG] [Thread-194115] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:34:21.590 [DEBUG] [Thread-194115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:34:21.590 [DEBUG] [Thread-194115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:34:21.590 [DEBUG] [Thread-194115] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:34:21.590 [DEBUG] [Thread-194115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:34:21.590 [DEBUG] [Thread-194115] [transport.py] [_log()] Compression: none
2026-02-14T23:34:21.590 [DEBUG] [Thread-194115] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:34:21.608 [DEBUG] [Thread-194115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:34:21.608 [DEBUG] [Thread-194115] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:34:21.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:34:21.609 [DEBUG] [Thread-194115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:34:21.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:34:21.611 [DEBUG] [Thread-194115] [transport.py] [_log()] userauth is OK
2026-02-14T23:34:21.611 [DEBUG] [Thread-194115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:34:21.611 [DEBUG] [Thread-194115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:34:21.611 [DEBUG] [Thread-194115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:34:21.612 [DEBUG] [Thread-194115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:34:21.629 [INFO] [Thread-194115] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:34:21.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:34:22.227 [DEBUG] [Thread-194115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:34:22.227 [DEBUG] [Thread-194115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:34:22.228 [DEBUG] [Thread-194115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:34:22.268 [DEBUG] [Thread-194115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:34:22.269 [DEBUG] [Thread-194115] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:34:22.271 [DEBUG] [Thread-194115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:34:22.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:34:22.282 [DEBUG] [Thread-194117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:34:22.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:34:22.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:34:22.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:34:22.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:34:22.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:34:22.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:34:22.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:34:22.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:34:22.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.898722 -999.00   +8.70  22.29     70   +3.70 1 1 1 1 1     0    0 4.76 -20.88 ZNESW 26.6 22.3 166.4 36.5 9.2 -24.3 9.0 -23.4 8.8 -22.3 9.2 -23.7
2026-02-14T23:34:22.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:34:22.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:34:22.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.898722
2026-02-14T23:34:22.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:34:22.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:34:22.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:34:22.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:34:22.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:34:22.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:33:55', tmtdew=6.06, humidity=65.49, cloud=0.0, wind=36.43, temperature=8.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:33:55', seeing=3.27, atlas_timestamp='2026-02-14T21:34:09.581', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.025750000000000384, -0.025750000000000384, -0.008500000000001506, 0.009499999999999176, 0.028250000000001663, 0.007999999999999119, -0.03575000000000017, 0.0495000000000001, 0.033500000000000085, -0.04675000000000118, 0.006999999999999673, 0.06400000000000006, 0.03324999999999889, 0.058499999999998664, 0.03399999999999892, 0.030250000000000554, 0.057000000000000384, -0.0024999999999995026, 0.017249999999998877, 0.05649999999999977, 0.031749999999998835, 0.005250000000000199, 0.04974999999999952, 0.07199999999999918, 0.02000000000000135, -0.003249999999999531, 0.00849999999999973, 0.07699999999999996, 0.08500000000000085, 0.06700000000000017, 0.08450000000000202, 0.03974999999999973], zp_timestamp='2026-02-14T21:31:00')
2026-02-14T23:34:22.296 [DEBUG] [Thread-194115] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:34:22.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-14T23:34:22.389 [DEBUG] [Thread-194119] [transport.py] [_log()] starting thread (client mode): 0xa2d6d780
2026-02-14T23:34:22.389 [DEBUG] [Thread-194119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:34:22.403 [DEBUG] [Thread-194119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:34:22.403 [INFO] [Thread-194119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:34:22.411 [DEBUG] [Thread-194119] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:34:22.411 [DEBUG] [Thread-194119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:34:22.411 [DEBUG] [Thread-194119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:34:22.411 [DEBUG] [Thread-194119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:34:22.411 [DEBUG] [Thread-194119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:34:22.411 [DEBUG] [Thread-194119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:34:22.411 [DEBUG] [Thread-194119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:34:22.411 [DEBUG] [Thread-194119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:34:22.411 [DEBUG] [Thread-194119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:34:22.411 [DEBUG] [Thread-194119] [transport.py] [_log()] client lang: <none>
2026-02-14T23:34:22.411 [DEBUG] [Thread-194119] [transport.py] [_log()] server lang: <none>
2026-02-14T23:34:22.411 [DEBUG] [Thread-194119] [transport.py] [_log()] kex follows: False
2026-02-14T23:34:22.411 [DEBUG] [Thread-194119] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:34:22.411 [DEBUG] [Thread-194119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:34:22.411 [DEBUG] [Thread-194119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:34:22.412 [DEBUG] [Thread-194119] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:34:22.412 [DEBUG] [Thread-194119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:34:22.412 [DEBUG] [Thread-194119] [transport.py] [_log()] Compression: none
2026-02-14T23:34:22.412 [DEBUG] [Thread-194119] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:34:22.472 [DEBUG] [Thread-194119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:34:22.472 [DEBUG] [Thread-194119] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:34:22.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:34:22.473 [DEBUG] [Thread-194119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:34:22.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:34:22.531 [DEBUG] [Thread-194119] [transport.py] [_log()] userauth is OK
2026-02-14T23:34:22.532 [DEBUG] [Thread-194119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:34:22.532 [DEBUG] [Thread-194119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:34:22.532 [DEBUG] [Thread-194119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:34:22.532 [DEBUG] [Thread-194119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:34:22.552 [INFO] [Thread-194119] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:34:22.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-14T23:34:22.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:34:23.339 [DEBUG] [Thread-194119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:34:23.339 [DEBUG] [Thread-194119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:34:23.387 [DEBUG] [Thread-194119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:34:23.387 [DEBUG] [Thread-194119] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:34:23.395 [DEBUG] [Thread-194119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:34:23.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:34:23.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:34:23.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:34:23.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:34:23.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:34:23.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:34:23.430 [DEBUG] [Thread-194119] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:34:25.759 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:34:28.881 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:34:33.937 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:34:37.319 [DEBUG] [Thread-194121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:34:39.426 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:34:52.371 [DEBUG] [Thread-194122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:34:53.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:34:53.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:34:53.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-14T23:34:55.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 34, 30), 6.05, 65.58, 0.0, 37.83, 8.86, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:34:55.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:34:30
2026-02-14T23:34:55.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:34:55.914 [DEBUG] [Thread-194123] [transport.py] [_log()] starting thread (client mode): 0xa2d1a410
2026-02-14T23:34:55.914 [DEBUG] [Thread-194123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:34:55.934 [DEBUG] [Thread-194123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:34:55.935 [INFO] [Thread-194123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:34:55.937 [DEBUG] [Thread-194123] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:34:55.938 [DEBUG] [Thread-194123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:34:55.938 [DEBUG] [Thread-194123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:34:55.938 [DEBUG] [Thread-194123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:34:55.938 [DEBUG] [Thread-194123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:34:55.938 [DEBUG] [Thread-194123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:34:55.938 [DEBUG] [Thread-194123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:34:55.938 [DEBUG] [Thread-194123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:34:55.938 [DEBUG] [Thread-194123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:34:55.938 [DEBUG] [Thread-194123] [transport.py] [_log()] client lang: <none>
2026-02-14T23:34:55.938 [DEBUG] [Thread-194123] [transport.py] [_log()] server lang: <none>
2026-02-14T23:34:55.938 [DEBUG] [Thread-194123] [transport.py] [_log()] kex follows: False
2026-02-14T23:34:55.938 [DEBUG] [Thread-194123] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:34:55.938 [DEBUG] [Thread-194123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:34:55.938 [DEBUG] [Thread-194123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:34:55.938 [DEBUG] [Thread-194123] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:34:55.938 [DEBUG] [Thread-194123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:34:55.938 [DEBUG] [Thread-194123] [transport.py] [_log()] Compression: none
2026-02-14T23:34:55.938 [DEBUG] [Thread-194123] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:34:55.956 [DEBUG] [Thread-194123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:34:55.957 [DEBUG] [Thread-194123] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:34:55.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:34:55.958 [DEBUG] [Thread-194123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:34:55.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:34:55.960 [DEBUG] [Thread-194123] [transport.py] [_log()] userauth is OK
2026-02-14T23:34:55.960 [DEBUG] [Thread-194123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:34:55.960 [DEBUG] [Thread-194123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:34:55.960 [DEBUG] [Thread-194123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:34:55.961 [DEBUG] [Thread-194123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:34:55.997 [INFO] [Thread-194123] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:34:55.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:34:56.597 [DEBUG] [Thread-194123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:34:56.597 [DEBUG] [Thread-194123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:34:56.598 [DEBUG] [Thread-194123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:34:56.638 [DEBUG] [Thread-194123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:34:56.639 [DEBUG] [Thread-194123] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:34:56.642 [DEBUG] [Thread-194123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:34:56.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:34:56.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:34:56.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:34:56.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:34:56.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:34:56.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:34:56.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:34:56.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:34:56.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:34:56.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.899069 -999.00   +8.70  27.71     70   +3.70 1 1 1 1 1     0    0 4.48 -21.05 ZNESW 26.0 27.7 164.4 39.5 9.2 -24.5 9.0 -23.3 8.8 -22.3 9.2 -23.6
2026-02-14T23:34:56.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:34:56.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:34:56.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.899069
2026-02-14T23:34:56.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:34:56.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:34:56.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:34:56.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:34:56.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:34:56.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:34:30', tmtdew=6.05, humidity=65.58, cloud=0.0, wind=37.83, temperature=8.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:34:30', seeing=2.68, atlas_timestamp='2026-02-14T21:34:39.562', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.025750000000000384, -0.025750000000000384, -0.008500000000001506, 0.009499999999999176, 0.028250000000001663, 0.007999999999999119, -0.03575000000000017, 0.0495000000000001, 0.033500000000000085, -0.04675000000000118, 0.006999999999999673, 0.06400000000000006, 0.03324999999999889, 0.058499999999998664, 0.03399999999999892, 0.030250000000000554, 0.057000000000000384, -0.0024999999999995026, 0.017249999999998877, 0.05649999999999977, 0.031749999999998835, 0.005250000000000199, 0.04974999999999952, 0.07199999999999918, 0.02000000000000135, -0.003249999999999531, 0.00849999999999973, 0.07699999999999996, 0.08500000000000085, 0.06700000000000017, 0.08450000000000202, 0.03974999999999973], zp_timestamp='2026-02-14T21:31:00')
2026-02-14T23:34:56.670 [DEBUG] [Thread-194123] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:34:56.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-14T23:34:56.768 [DEBUG] [Thread-194126] [transport.py] [_log()] starting thread (client mode): 0xa2d19b70
2026-02-14T23:34:56.768 [DEBUG] [Thread-194126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:34:56.783 [DEBUG] [Thread-194126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:34:56.783 [INFO] [Thread-194126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:34:56.791 [DEBUG] [Thread-194126] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:34:56.791 [DEBUG] [Thread-194126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:34:56.791 [DEBUG] [Thread-194126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:34:56.792 [DEBUG] [Thread-194126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:34:56.792 [DEBUG] [Thread-194126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:34:56.792 [DEBUG] [Thread-194126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:34:56.792 [DEBUG] [Thread-194126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:34:56.792 [DEBUG] [Thread-194126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:34:56.792 [DEBUG] [Thread-194126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:34:56.792 [DEBUG] [Thread-194126] [transport.py] [_log()] client lang: <none>
2026-02-14T23:34:56.792 [DEBUG] [Thread-194126] [transport.py] [_log()] server lang: <none>
2026-02-14T23:34:56.792 [DEBUG] [Thread-194126] [transport.py] [_log()] kex follows: False
2026-02-14T23:34:56.792 [DEBUG] [Thread-194126] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:34:56.792 [DEBUG] [Thread-194126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:34:56.792 [DEBUG] [Thread-194126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:34:56.792 [DEBUG] [Thread-194126] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:34:56.792 [DEBUG] [Thread-194126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:34:56.792 [DEBUG] [Thread-194126] [transport.py] [_log()] Compression: none
2026-02-14T23:34:56.792 [DEBUG] [Thread-194126] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:34:56.851 [DEBUG] [Thread-194126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:34:56.852 [DEBUG] [Thread-194126] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:34:56.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:34:56.853 [DEBUG] [Thread-194126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:34:56.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:34:56.907 [DEBUG] [Thread-194126] [transport.py] [_log()] userauth is OK
2026-02-14T23:34:56.907 [DEBUG] [Thread-194126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:34:56.908 [DEBUG] [Thread-194126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:34:56.908 [DEBUG] [Thread-194126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:34:56.908 [DEBUG] [Thread-194126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:34:56.926 [INFO] [Thread-194126] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:34:56.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-14T23:34:56.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:34:57.681 [DEBUG] [Thread-194126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:34:57.682 [DEBUG] [Thread-194126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:34:57.729 [DEBUG] [Thread-194126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:34:57.730 [DEBUG] [Thread-194126] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:34:57.739 [DEBUG] [Thread-194126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:34:57.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:34:57.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-14T23:34:57.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-14T23:34:57.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:34:57.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:34:57.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:34:57.773 [DEBUG] [Thread-194126] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:34:58.770 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:35:03.241 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:35:05.583 [DEBUG] [Thread-194128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:35:07.408 [DEBUG] [Thread-194129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:35:09.030 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:35:09.031 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:35:22.463 [DEBUG] [Thread-194130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:35:22.597 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:35:27.082 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:35:27.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:35:27.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:35:27.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-14T23:35:29.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 35, 5), 6.07, 65.48, 0.0, 35.82, 8.77, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:35:29.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:35:05
2026-02-14T23:35:30.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:35:30.160 [DEBUG] [Thread-194131] [transport.py] [_log()] starting thread (client mode): 0xa2d7b0d0
2026-02-14T23:35:30.161 [DEBUG] [Thread-194131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:35:30.181 [DEBUG] [Thread-194131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:35:30.181 [INFO] [Thread-194131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:35:30.184 [DEBUG] [Thread-194131] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:35:30.184 [DEBUG] [Thread-194131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:35:30.185 [DEBUG] [Thread-194131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:35:30.185 [DEBUG] [Thread-194131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:35:30.185 [DEBUG] [Thread-194131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:35:30.185 [DEBUG] [Thread-194131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:35:30.185 [DEBUG] [Thread-194131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:35:30.185 [DEBUG] [Thread-194131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:35:30.185 [DEBUG] [Thread-194131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:35:30.185 [DEBUG] [Thread-194131] [transport.py] [_log()] client lang: <none>
2026-02-14T23:35:30.185 [DEBUG] [Thread-194131] [transport.py] [_log()] server lang: <none>
2026-02-14T23:35:30.185 [DEBUG] [Thread-194131] [transport.py] [_log()] kex follows: False
2026-02-14T23:35:30.185 [DEBUG] [Thread-194131] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:35:30.185 [DEBUG] [Thread-194131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:35:30.185 [DEBUG] [Thread-194131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:35:30.186 [DEBUG] [Thread-194131] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:35:30.186 [DEBUG] [Thread-194131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:35:30.186 [DEBUG] [Thread-194131] [transport.py] [_log()] Compression: none
2026-02-14T23:35:30.186 [DEBUG] [Thread-194131] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:35:30.204 [DEBUG] [Thread-194131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:35:30.205 [DEBUG] [Thread-194131] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:35:30.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:35:30.207 [DEBUG] [Thread-194131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:35:30.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:35:30.210 [DEBUG] [Thread-194131] [transport.py] [_log()] userauth is OK
2026-02-14T23:35:30.210 [DEBUG] [Thread-194131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:35:30.210 [DEBUG] [Thread-194131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:35:30.210 [DEBUG] [Thread-194131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:35:30.211 [DEBUG] [Thread-194131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:35:30.235 [INFO] [Thread-194131] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:35:30.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:35:30.873 [DEBUG] [Thread-194131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:35:30.873 [DEBUG] [Thread-194131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:35:30.874 [DEBUG] [Thread-194131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:35:30.914 [DEBUG] [Thread-194131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:35:30.915 [DEBUG] [Thread-194131] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:35:30.918 [DEBUG] [Thread-194131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:35:30.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:35:30.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:35:30.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:35:30.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:35:30.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:35:30.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:35:30.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:35:30.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:35:30.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:35:30.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.899416 -999.00   +8.70  23.08     70   +3.60 1 1 1 1 1     0    0 4.65 -20.47 ZNESW 26.9 23.1 145.2 33.1 9.2 -24.5 9.0 -23.4 8.8 -22.4 9.1 -23.6
2026-02-14T23:35:30.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:35:30.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:35:30.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.899416
2026-02-14T23:35:30.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:35:30.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:35:30.944 [DEBUG] [Thread-194131] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:35:30.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:35:30.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:35:30.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:35:30.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:35:05', tmtdew=6.07, humidity=65.48, cloud=0.0, wind=35.82, temperature=8.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:35:05', seeing=3.41, atlas_timestamp='2026-02-14T21:35:09.542', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.025750000000000384, -0.025750000000000384, -0.008500000000001506, 0.009499999999999176, 0.028250000000001663, 0.007999999999999119, -0.03575000000000017, 0.0495000000000001, 0.033500000000000085, -0.04675000000000118, 0.006999999999999673, 0.06400000000000006, 0.03324999999999889, 0.058499999999998664, 0.03399999999999892, 0.030250000000000554, 0.057000000000000384, -0.0024999999999995026, 0.017249999999998877, 0.05649999999999977, 0.031749999999998835, 0.005250000000000199, 0.04974999999999952, 0.07199999999999918, 0.02000000000000135, -0.003249999999999531, 0.00849999999999973, 0.07699999999999996, 0.08500000000000085, 0.06700000000000017, 0.08450000000000202, 0.03974999999999973], zp_timestamp='2026-02-14T21:31:00')
2026-02-14T23:35:31.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T23:35:31.050 [DEBUG] [Thread-194134] [transport.py] [_log()] starting thread (client mode): 0xa2d6ae60
2026-02-14T23:35:31.050 [DEBUG] [Thread-194134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:35:31.065 [DEBUG] [Thread-194134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:35:31.065 [INFO] [Thread-194134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:35:31.073 [DEBUG] [Thread-194134] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:35:31.074 [DEBUG] [Thread-194134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:35:31.074 [DEBUG] [Thread-194134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:35:31.074 [DEBUG] [Thread-194134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:35:31.074 [DEBUG] [Thread-194134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:35:31.074 [DEBUG] [Thread-194134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:35:31.074 [DEBUG] [Thread-194134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:35:31.074 [DEBUG] [Thread-194134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:35:31.074 [DEBUG] [Thread-194134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:35:31.074 [DEBUG] [Thread-194134] [transport.py] [_log()] client lang: <none>
2026-02-14T23:35:31.074 [DEBUG] [Thread-194134] [transport.py] [_log()] server lang: <none>
2026-02-14T23:35:31.074 [DEBUG] [Thread-194134] [transport.py] [_log()] kex follows: False
2026-02-14T23:35:31.074 [DEBUG] [Thread-194134] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:35:31.074 [DEBUG] [Thread-194134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:35:31.075 [DEBUG] [Thread-194134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:35:31.075 [DEBUG] [Thread-194134] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:35:31.075 [DEBUG] [Thread-194134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:35:31.075 [DEBUG] [Thread-194134] [transport.py] [_log()] Compression: none
2026-02-14T23:35:31.075 [DEBUG] [Thread-194134] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:35:31.132 [DEBUG] [Thread-194134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:35:31.133 [DEBUG] [Thread-194134] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:35:31.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:35:31.134 [DEBUG] [Thread-194134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:35:31.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:35:31.191 [DEBUG] [Thread-194134] [transport.py] [_log()] userauth is OK
2026-02-14T23:35:31.192 [DEBUG] [Thread-194134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:35:31.192 [DEBUG] [Thread-194134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:35:31.192 [DEBUG] [Thread-194134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:35:31.192 [DEBUG] [Thread-194134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:35:31.214 [INFO] [Thread-194134] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:35:31.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-14T23:35:31.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:35:32.044 [DEBUG] [Thread-194134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:35:32.044 [DEBUG] [Thread-194134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:35:32.093 [DEBUG] [Thread-194134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:35:32.093 [DEBUG] [Thread-194134] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:35:32.103 [DEBUG] [Thread-194134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:35:32.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:35:32.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-14T23:35:32.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-14T23:35:32.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:35:32.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:35:32.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:35:32.140 [DEBUG] [Thread-194134] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:35:33.930 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:35:37.496 [DEBUG] [Thread-194136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:35:38.401 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:35:52.549 [DEBUG] [Thread-194137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:36:02.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:36:02.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:36:02.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-14T23:36:04.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 35, 40), 6.25, 64.95, 0.0, 41.92, 9.45, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:36:04.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:35:40
2026-02-14T23:36:04.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:36:04.545 [DEBUG] [Thread-194138] [transport.py] [_log()] starting thread (client mode): 0xa2d130a0
2026-02-14T23:36:04.546 [DEBUG] [Thread-194138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:36:04.564 [DEBUG] [Thread-194138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:36:04.564 [INFO] [Thread-194138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:36:04.567 [DEBUG] [Thread-194138] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:36:04.568 [DEBUG] [Thread-194138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:36:04.568 [DEBUG] [Thread-194138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:36:04.568 [DEBUG] [Thread-194138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:36:04.568 [DEBUG] [Thread-194138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:36:04.568 [DEBUG] [Thread-194138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:36:04.568 [DEBUG] [Thread-194138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:36:04.568 [DEBUG] [Thread-194138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:36:04.568 [DEBUG] [Thread-194138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:36:04.568 [DEBUG] [Thread-194138] [transport.py] [_log()] client lang: <none>
2026-02-14T23:36:04.568 [DEBUG] [Thread-194138] [transport.py] [_log()] server lang: <none>
2026-02-14T23:36:04.568 [DEBUG] [Thread-194138] [transport.py] [_log()] kex follows: False
2026-02-14T23:36:04.568 [DEBUG] [Thread-194138] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:36:04.568 [DEBUG] [Thread-194138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:36:04.568 [DEBUG] [Thread-194138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:36:04.568 [DEBUG] [Thread-194138] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:36:04.568 [DEBUG] [Thread-194138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:36:04.568 [DEBUG] [Thread-194138] [transport.py] [_log()] Compression: none
2026-02-14T23:36:04.568 [DEBUG] [Thread-194138] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:36:04.585 [DEBUG] [Thread-194138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:36:04.585 [DEBUG] [Thread-194138] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:36:04.586 [DEBUG] [Thread-194138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:36:04.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:36:04.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:36:04.588 [DEBUG] [Thread-194138] [transport.py] [_log()] userauth is OK
2026-02-14T23:36:04.588 [DEBUG] [Thread-194138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:36:04.588 [DEBUG] [Thread-194138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:36:04.588 [DEBUG] [Thread-194138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:36:04.588 [DEBUG] [Thread-194138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:36:04.611 [INFO] [Thread-194138] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:36:04.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:36:05.292 [DEBUG] [Thread-194138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:36:05.292 [DEBUG] [Thread-194138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:36:05.293 [DEBUG] [Thread-194138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:36:05.333 [DEBUG] [Thread-194138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:36:05.333 [DEBUG] [Thread-194138] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:36:05.337 [DEBUG] [Thread-194138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:36:05.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:36:05.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:36:05.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:36:05.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:36:05.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:36:05.361 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:36:05.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:36:05.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:36:05.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:36:05.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.899763 -999.00   +8.70  18.24     70   +3.70 1 1 1 1 1     0    0 4.56 -20.71 ZNESW 21.1 18.2 160.6 44.2 9.1 -24.3 9.0 -23.4 8.8 -22.4 9.1 -23.6
2026-02-14T23:36:05.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:36:05.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:36:05.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.899763
2026-02-14T23:36:05.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:36:05.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:36:05.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:36:05.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:36:05.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:36:05.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:35:40', tmtdew=6.25, humidity=64.95, cloud=0.0, wind=41.92, temperature=9.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:35:41', seeing=3.81, atlas_timestamp='2026-02-14T21:35:39.523', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.029749999999999943, -0.018749999999998934, -0.0035000000000007248, -0.01699999999999946, -0.009749999999998593, -0.04150000000000098, -0.004749999999999588, 0.033500000000000085, 0.0259999999999998, -0.05775000000000041, 0.016000000000000014, 0.05400000000000027, 0.028249999999999886, 0.02949999999999875, 0.014499999999999957, 0.056250000000000355, 0.06850000000000023, 0.0129999999999999, -0.030250000000000554, 0.058999999999999275, 0.00274999999999892, 0.00975000000000037, 0.04075000000000095, 0.04699999999999882, 0.028999999999999915, 0.013249999999999318, 0.0009999999999994458, 0.06550000000000011, 0.04100000000000037, 0.06150000000000233, 0.08700000000000152, 0.0722499999999986], zp_timestamp='2026-02-14T21:34:00')
2026-02-14T23:36:05.364 [DEBUG] [Thread-194138] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:36:05.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-14T23:36:05.460 [DEBUG] [Thread-194141] [transport.py] [_log()] starting thread (client mode): 0xa2d7a080
2026-02-14T23:36:05.461 [DEBUG] [Thread-194141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:36:05.475 [DEBUG] [Thread-194141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:36:05.475 [INFO] [Thread-194141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:36:05.483 [DEBUG] [Thread-194141] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:36:05.484 [DEBUG] [Thread-194141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:36:05.484 [DEBUG] [Thread-194141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:36:05.484 [DEBUG] [Thread-194141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:36:05.484 [DEBUG] [Thread-194141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:36:05.484 [DEBUG] [Thread-194141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:36:05.484 [DEBUG] [Thread-194141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:36:05.484 [DEBUG] [Thread-194141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:36:05.484 [DEBUG] [Thread-194141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:36:05.484 [DEBUG] [Thread-194141] [transport.py] [_log()] client lang: <none>
2026-02-14T23:36:05.484 [DEBUG] [Thread-194141] [transport.py] [_log()] server lang: <none>
2026-02-14T23:36:05.484 [DEBUG] [Thread-194141] [transport.py] [_log()] kex follows: False
2026-02-14T23:36:05.484 [DEBUG] [Thread-194141] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:36:05.484 [DEBUG] [Thread-194141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:36:05.484 [DEBUG] [Thread-194141] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:36:05.484 [DEBUG] [Thread-194141] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:36:05.484 [DEBUG] [Thread-194141] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:36:05.485 [DEBUG] [Thread-194141] [transport.py] [_log()] Compression: none
2026-02-14T23:36:05.485 [DEBUG] [Thread-194141] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:36:05.543 [DEBUG] [Thread-194141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:36:05.543 [DEBUG] [Thread-194141] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:36:05.544 [DEBUG] [Thread-194141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:36:05.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:36:05.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:36:05.599 [DEBUG] [Thread-194141] [transport.py] [_log()] userauth is OK
2026-02-14T23:36:05.599 [DEBUG] [Thread-194141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:36:05.599 [DEBUG] [Thread-194141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:36:05.599 [DEBUG] [Thread-194141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:36:05.599 [DEBUG] [Thread-194141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:36:05.613 [INFO] [Thread-194141] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:36:05.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-14T23:36:05.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:36:05.641 [DEBUG] [Thread-194143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:36:06.390 [DEBUG] [Thread-194141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:36:06.390 [DEBUG] [Thread-194141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:36:06.438 [DEBUG] [Thread-194141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:36:06.438 [DEBUG] [Thread-194141] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:36:06.447 [DEBUG] [Thread-194141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:36:06.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:36:06.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-14T23:36:06.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-14T23:36:06.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:36:06.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:36:06.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:36:06.489 [DEBUG] [Thread-194141] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:36:07.584 [DEBUG] [Thread-194144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:36:09.235 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:36:09.237 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:36:22.648 [DEBUG] [Thread-194145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:36:36.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:36:36.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:36:36.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-14T23:36:37.520 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:36:37.684 [DEBUG] [Thread-194146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:36:38.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 36, 16), 6.0, 65.54, 0.0, 35.53, 8.71, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:36:38.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:36:16
2026-02-14T23:36:38.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:36:39.014 [DEBUG] [Thread-194147] [transport.py] [_log()] starting thread (client mode): 0xa2d134f0
2026-02-14T23:36:39.014 [DEBUG] [Thread-194147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:36:39.033 [DEBUG] [Thread-194147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:36:39.033 [INFO] [Thread-194147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:36:39.036 [DEBUG] [Thread-194147] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:36:39.036 [DEBUG] [Thread-194147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:36:39.036 [DEBUG] [Thread-194147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:36:39.036 [DEBUG] [Thread-194147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:36:39.036 [DEBUG] [Thread-194147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:36:39.036 [DEBUG] [Thread-194147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:36:39.036 [DEBUG] [Thread-194147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:36:39.036 [DEBUG] [Thread-194147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:36:39.036 [DEBUG] [Thread-194147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:36:39.036 [DEBUG] [Thread-194147] [transport.py] [_log()] client lang: <none>
2026-02-14T23:36:39.036 [DEBUG] [Thread-194147] [transport.py] [_log()] server lang: <none>
2026-02-14T23:36:39.036 [DEBUG] [Thread-194147] [transport.py] [_log()] kex follows: False
2026-02-14T23:36:39.037 [DEBUG] [Thread-194147] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:36:39.037 [DEBUG] [Thread-194147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:36:39.037 [DEBUG] [Thread-194147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:36:39.037 [DEBUG] [Thread-194147] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:36:39.037 [DEBUG] [Thread-194147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:36:39.037 [DEBUG] [Thread-194147] [transport.py] [_log()] Compression: none
2026-02-14T23:36:39.037 [DEBUG] [Thread-194147] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:36:39.051 [DEBUG] [Thread-194147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:36:39.052 [DEBUG] [Thread-194147] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:36:39.052 [DEBUG] [Thread-194147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:36:39.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:36:39.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:36:39.053 [DEBUG] [Thread-194147] [transport.py] [_log()] userauth is OK
2026-02-14T23:36:39.053 [DEBUG] [Thread-194147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:36:39.053 [DEBUG] [Thread-194147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:36:39.053 [DEBUG] [Thread-194147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:36:39.053 [DEBUG] [Thread-194147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:36:39.081 [INFO] [Thread-194147] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:36:39.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:36:39.727 [DEBUG] [Thread-194147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:36:39.728 [DEBUG] [Thread-194147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:36:39.728 [DEBUG] [Thread-194147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:36:39.768 [DEBUG] [Thread-194147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:36:39.769 [DEBUG] [Thread-194147] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:36:39.772 [DEBUG] [Thread-194147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:36:39.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:36:39.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:36:39.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:36:39.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:36:39.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:36:39.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:36:39.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:36:39.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:36:39.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:36:39.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.900111 -999.00   +8.70  21.23     70   +3.60 1 1 1 1 1     0    0 4.53 -21.68 ZNESW 25.9 21.2 155.9 26.2 9.2 -24.4 9.0 -23.3 8.8 -22.5 9.1 -23.6
2026-02-14T23:36:39.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:36:39.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:36:39.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.900111
2026-02-14T23:36:39.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:36:39.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:36:39.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:36:39.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:36:39.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:36:39.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:36:16', tmtdew=6.0, humidity=65.54, cloud=0.0, wind=35.53, temperature=8.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:36:17', seeing=3.88, atlas_timestamp='2026-02-14T21:36:09.590', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.029749999999999943, -0.018749999999998934, -0.0035000000000007248, -0.01699999999999946, -0.009749999999998593, -0.04150000000000098, -0.004749999999999588, 0.033500000000000085, 0.0259999999999998, -0.05775000000000041, 0.016000000000000014, 0.05400000000000027, 0.028249999999999886, 0.02949999999999875, 0.014499999999999957, 0.056250000000000355, 0.06850000000000023, 0.0129999999999999, -0.030250000000000554, 0.058999999999999275, 0.00274999999999892, 0.00975000000000037, 0.04075000000000095, 0.04699999999999882, 0.028999999999999915, 0.013249999999999318, 0.0009999999999994458, 0.06550000000000011, 0.04100000000000037, 0.06150000000000233, 0.08700000000000152, 0.0722499999999986], zp_timestamp='2026-02-14T21:34:00')
2026-02-14T23:36:39.799 [DEBUG] [Thread-194147] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:36:39.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-14T23:36:39.904 [DEBUG] [Thread-194150] [transport.py] [_log()] starting thread (client mode): 0xa57d48b0
2026-02-14T23:36:39.905 [DEBUG] [Thread-194150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:36:39.919 [DEBUG] [Thread-194150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:36:39.919 [INFO] [Thread-194150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:36:39.928 [DEBUG] [Thread-194150] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:36:39.928 [DEBUG] [Thread-194150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:36:39.929 [DEBUG] [Thread-194150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:36:39.929 [DEBUG] [Thread-194150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:36:39.929 [DEBUG] [Thread-194150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:36:39.929 [DEBUG] [Thread-194150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:36:39.929 [DEBUG] [Thread-194150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:36:39.929 [DEBUG] [Thread-194150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:36:39.929 [DEBUG] [Thread-194150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:36:39.929 [DEBUG] [Thread-194150] [transport.py] [_log()] client lang: <none>
2026-02-14T23:36:39.929 [DEBUG] [Thread-194150] [transport.py] [_log()] server lang: <none>
2026-02-14T23:36:39.929 [DEBUG] [Thread-194150] [transport.py] [_log()] kex follows: False
2026-02-14T23:36:39.929 [DEBUG] [Thread-194150] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:36:39.929 [DEBUG] [Thread-194150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:36:39.929 [DEBUG] [Thread-194150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:36:39.929 [DEBUG] [Thread-194150] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:36:39.929 [DEBUG] [Thread-194150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:36:39.929 [DEBUG] [Thread-194150] [transport.py] [_log()] Compression: none
2026-02-14T23:36:39.930 [DEBUG] [Thread-194150] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:36:39.987 [DEBUG] [Thread-194150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:36:39.988 [DEBUG] [Thread-194150] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:36:39.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:36:39.989 [DEBUG] [Thread-194150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:36:39.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:36:40.047 [DEBUG] [Thread-194150] [transport.py] [_log()] userauth is OK
2026-02-14T23:36:40.048 [DEBUG] [Thread-194150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:36:40.048 [DEBUG] [Thread-194150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:36:40.048 [DEBUG] [Thread-194150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:36:40.048 [DEBUG] [Thread-194150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:36:40.066 [INFO] [Thread-194150] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:36:40.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-14T23:36:40.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:36:40.615 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:36:40.850 [DEBUG] [Thread-194150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:36:40.850 [DEBUG] [Thread-194150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:36:40.898 [DEBUG] [Thread-194150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:36:40.899 [DEBUG] [Thread-194150] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:36:40.908 [DEBUG] [Thread-194150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:36:40.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:36:40.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:36:40.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:36:40.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:36:40.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:36:40.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:36:40.945 [DEBUG] [Thread-194150] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:36:52.721 [DEBUG] [Thread-194152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:37:05.698 [DEBUG] [Thread-194153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:37:07.783 [DEBUG] [Thread-194154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:37:09.444 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:37:09.445 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:37:10.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:37:10.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:37:10.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-14T23:37:12.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 36, 52), 6.05, 66.04, 0.0, 40.18, 8.79, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:37:12.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:36:52
2026-02-14T23:37:13.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:37:13.324 [DEBUG] [Thread-194155] [transport.py] [_log()] starting thread (client mode): 0xa57d4580
2026-02-14T23:37:13.324 [DEBUG] [Thread-194155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:37:13.345 [DEBUG] [Thread-194155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:37:13.345 [INFO] [Thread-194155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:37:13.348 [DEBUG] [Thread-194155] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:37:13.348 [DEBUG] [Thread-194155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:37:13.348 [DEBUG] [Thread-194155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:37:13.348 [DEBUG] [Thread-194155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:37:13.348 [DEBUG] [Thread-194155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:37:13.348 [DEBUG] [Thread-194155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:37:13.348 [DEBUG] [Thread-194155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:37:13.348 [DEBUG] [Thread-194155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:37:13.348 [DEBUG] [Thread-194155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:37:13.348 [DEBUG] [Thread-194155] [transport.py] [_log()] client lang: <none>
2026-02-14T23:37:13.348 [DEBUG] [Thread-194155] [transport.py] [_log()] server lang: <none>
2026-02-14T23:37:13.348 [DEBUG] [Thread-194155] [transport.py] [_log()] kex follows: False
2026-02-14T23:37:13.349 [DEBUG] [Thread-194155] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:37:13.349 [DEBUG] [Thread-194155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:37:13.349 [DEBUG] [Thread-194155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:37:13.349 [DEBUG] [Thread-194155] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:37:13.349 [DEBUG] [Thread-194155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:37:13.349 [DEBUG] [Thread-194155] [transport.py] [_log()] Compression: none
2026-02-14T23:37:13.349 [DEBUG] [Thread-194155] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:37:13.367 [DEBUG] [Thread-194155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:37:13.368 [DEBUG] [Thread-194155] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:37:13.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:37:13.370 [DEBUG] [Thread-194155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:37:13.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:37:13.372 [DEBUG] [Thread-194155] [transport.py] [_log()] userauth is OK
2026-02-14T23:37:13.373 [DEBUG] [Thread-194155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:37:13.373 [DEBUG] [Thread-194155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:37:13.373 [DEBUG] [Thread-194155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:37:13.373 [DEBUG] [Thread-194155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:37:13.392 [INFO] [Thread-194155] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:37:13.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:37:14.048 [DEBUG] [Thread-194155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:37:14.048 [DEBUG] [Thread-194155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:37:14.049 [DEBUG] [Thread-194155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:37:14.089 [DEBUG] [Thread-194155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:37:14.090 [DEBUG] [Thread-194155] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:37:14.093 [DEBUG] [Thread-194155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:37:14.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:37:14.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:37:14.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:37:14.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:37:14.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:37:14.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:37:14.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:37:14.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:37:14.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:37:14.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.900458 -999.00   +8.70  37.67     70   +3.70 1 1 2 1 1     0    0 4.65 -20.33 ZNESW 43.0 37.7 167.4 44.7 9.2 -24.4 9.0 -23.4 8.8 -22.3 9.1 -23.6
2026-02-14T23:37:14.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:37:14.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:37:14.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.900458
2026-02-14T23:37:14.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:37:14.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:37:14.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:37:14.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:37:14.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:37:14.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:36:52', tmtdew=6.05, humidity=66.04, cloud=0.0, wind=40.18, temperature=8.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:36:53', seeing=3.93, atlas_timestamp='2026-02-14T21:36:39.571', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.029749999999999943, -0.018749999999998934, -0.0035000000000007248, -0.01699999999999946, -0.009749999999998593, -0.04150000000000098, -0.004749999999999588, 0.033500000000000085, 0.0259999999999998, -0.05775000000000041, 0.016000000000000014, 0.05400000000000027, 0.028249999999999886, 0.02949999999999875, 0.014499999999999957, 0.056250000000000355, 0.06850000000000023, 0.0129999999999999, -0.030250000000000554, 0.058999999999999275, 0.00274999999999892, 0.00975000000000037, 0.04075000000000095, 0.04699999999999882, 0.028999999999999915, 0.013249999999999318, 0.0009999999999994458, 0.06550000000000011, 0.04100000000000037, 0.06150000000000233, 0.08700000000000152, 0.0722499999999986], zp_timestamp='2026-02-14T21:34:00')
2026-02-14T23:37:14.121 [DEBUG] [Thread-194155] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:37:14.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-14T23:37:14.218 [DEBUG] [Thread-194158] [transport.py] [_log()] starting thread (client mode): 0xa57d5b70
2026-02-14T23:37:14.218 [DEBUG] [Thread-194158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:37:14.234 [DEBUG] [Thread-194158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:37:14.234 [INFO] [Thread-194158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:37:14.241 [DEBUG] [Thread-194158] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:37:14.242 [DEBUG] [Thread-194158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:37:14.242 [DEBUG] [Thread-194158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:37:14.242 [DEBUG] [Thread-194158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:37:14.242 [DEBUG] [Thread-194158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:37:14.242 [DEBUG] [Thread-194158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:37:14.242 [DEBUG] [Thread-194158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:37:14.242 [DEBUG] [Thread-194158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:37:14.242 [DEBUG] [Thread-194158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:37:14.243 [DEBUG] [Thread-194158] [transport.py] [_log()] client lang: <none>
2026-02-14T23:37:14.243 [DEBUG] [Thread-194158] [transport.py] [_log()] server lang: <none>
2026-02-14T23:37:14.243 [DEBUG] [Thread-194158] [transport.py] [_log()] kex follows: False
2026-02-14T23:37:14.243 [DEBUG] [Thread-194158] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:37:14.243 [DEBUG] [Thread-194158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:37:14.243 [DEBUG] [Thread-194158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:37:14.243 [DEBUG] [Thread-194158] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:37:14.243 [DEBUG] [Thread-194158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:37:14.244 [DEBUG] [Thread-194158] [transport.py] [_log()] Compression: none
2026-02-14T23:37:14.244 [DEBUG] [Thread-194158] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:37:14.300 [DEBUG] [Thread-194158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:37:14.301 [DEBUG] [Thread-194158] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:37:14.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:37:14.302 [DEBUG] [Thread-194158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:37:14.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:37:14.359 [DEBUG] [Thread-194158] [transport.py] [_log()] userauth is OK
2026-02-14T23:37:14.359 [DEBUG] [Thread-194158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:37:14.359 [DEBUG] [Thread-194158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:37:14.359 [DEBUG] [Thread-194158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:37:14.360 [DEBUG] [Thread-194158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:37:14.378 [INFO] [Thread-194158] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:37:14.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-14T23:37:14.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:37:15.159 [DEBUG] [Thread-194158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:37:15.159 [DEBUG] [Thread-194158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:37:15.207 [DEBUG] [Thread-194158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:37:15.208 [DEBUG] [Thread-194158] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:37:15.217 [DEBUG] [Thread-194158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:37:15.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:37:15.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-14T23:37:15.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-14T23:37:15.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:37:15.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:37:15.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:37:15.254 [DEBUG] [Thread-194158] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:37:22.830 [DEBUG] [Thread-194160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:37:37.893 [DEBUG] [Thread-194161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:37:45.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:37:45.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:37:45.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-14T23:37:47.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 37, 27), 6.05, 66.04, 0.0, 38.64, 8.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:37:47.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:37:27
2026-02-14T23:37:47.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:37:47.625 [DEBUG] [Thread-194162] [transport.py] [_log()] starting thread (client mode): 0xa57d7550
2026-02-14T23:37:47.625 [DEBUG] [Thread-194162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:37:47.637 [DEBUG] [Thread-194162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:37:47.637 [INFO] [Thread-194162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:37:47.639 [DEBUG] [Thread-194162] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:37:47.640 [DEBUG] [Thread-194162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:37:47.640 [DEBUG] [Thread-194162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:37:47.640 [DEBUG] [Thread-194162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:37:47.640 [DEBUG] [Thread-194162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:37:47.640 [DEBUG] [Thread-194162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:37:47.640 [DEBUG] [Thread-194162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:37:47.640 [DEBUG] [Thread-194162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:37:47.640 [DEBUG] [Thread-194162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:37:47.640 [DEBUG] [Thread-194162] [transport.py] [_log()] client lang: <none>
2026-02-14T23:37:47.640 [DEBUG] [Thread-194162] [transport.py] [_log()] server lang: <none>
2026-02-14T23:37:47.640 [DEBUG] [Thread-194162] [transport.py] [_log()] kex follows: False
2026-02-14T23:37:47.640 [DEBUG] [Thread-194162] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:37:47.640 [DEBUG] [Thread-194162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:37:47.640 [DEBUG] [Thread-194162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:37:47.640 [DEBUG] [Thread-194162] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:37:47.640 [DEBUG] [Thread-194162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:37:47.640 [DEBUG] [Thread-194162] [transport.py] [_log()] Compression: none
2026-02-14T23:37:47.640 [DEBUG] [Thread-194162] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:37:47.655 [DEBUG] [Thread-194162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:37:47.655 [DEBUG] [Thread-194162] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:37:47.656 [DEBUG] [Thread-194162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:37:47.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:37:47.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:37:47.657 [DEBUG] [Thread-194162] [transport.py] [_log()] userauth is OK
2026-02-14T23:37:47.657 [DEBUG] [Thread-194162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:37:47.657 [DEBUG] [Thread-194162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:37:47.657 [DEBUG] [Thread-194162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:37:47.657 [DEBUG] [Thread-194162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:37:47.669 [INFO] [Thread-194162] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:37:47.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:37:48.293 [DEBUG] [Thread-194162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:37:48.294 [DEBUG] [Thread-194162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:37:48.294 [DEBUG] [Thread-194162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:37:48.334 [DEBUG] [Thread-194162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:37:48.335 [DEBUG] [Thread-194162] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:37:48.338 [DEBUG] [Thread-194162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:37:48.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:37:48.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:37:48.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:37:48.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:37:48.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:37:48.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:37:48.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:37:48.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:37:48.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:37:48.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.901152 -999.00   +8.70  24.64     70   +3.70 1 1 1 1 1     0    0 4.53 -21.39 ZNESW 25.0 24.6 153.0 34.2 9.2 -24.4 9.0 -23.3 8.8 -22.5 9.1 -23.5
2026-02-14T23:37:48.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:37:48.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:37:48.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.901152
2026-02-14T23:37:48.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:37:48.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:37:48.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:37:48.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:37:48.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:37:48.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:37:27', tmtdew=6.05, humidity=66.04, cloud=0.0, wind=38.64, temperature=8.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:37:28', seeing=5.0, atlas_timestamp='2026-02-14T21:37:39.533', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.029749999999999943, -0.018749999999998934, -0.0035000000000007248, -0.01699999999999946, -0.009749999999998593, -0.04150000000000098, -0.004749999999999588, 0.033500000000000085, 0.0259999999999998, -0.05775000000000041, 0.016000000000000014, 0.05400000000000027, 0.028249999999999886, 0.02949999999999875, 0.014499999999999957, 0.056250000000000355, 0.06850000000000023, 0.0129999999999999, -0.030250000000000554, 0.058999999999999275, 0.00274999999999892, 0.00975000000000037, 0.04075000000000095, 0.04699999999999882, 0.028999999999999915, 0.013249999999999318, 0.0009999999999994458, 0.06550000000000011, 0.04100000000000037, 0.06150000000000233, 0.08700000000000152, 0.0722499999999986], zp_timestamp='2026-02-14T21:34:00')
2026-02-14T23:37:48.367 [DEBUG] [Thread-194162] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:37:48.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-14T23:37:48.464 [DEBUG] [Thread-194165] [transport.py] [_log()] starting thread (client mode): 0xa2d6ff40
2026-02-14T23:37:48.464 [DEBUG] [Thread-194165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:37:48.479 [DEBUG] [Thread-194165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:37:48.480 [INFO] [Thread-194165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:37:48.487 [DEBUG] [Thread-194165] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:37:48.488 [DEBUG] [Thread-194165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:37:48.488 [DEBUG] [Thread-194165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:37:48.488 [DEBUG] [Thread-194165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:37:48.488 [DEBUG] [Thread-194165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:37:48.488 [DEBUG] [Thread-194165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:37:48.488 [DEBUG] [Thread-194165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:37:48.488 [DEBUG] [Thread-194165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:37:48.488 [DEBUG] [Thread-194165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:37:48.488 [DEBUG] [Thread-194165] [transport.py] [_log()] client lang: <none>
2026-02-14T23:37:48.488 [DEBUG] [Thread-194165] [transport.py] [_log()] server lang: <none>
2026-02-14T23:37:48.488 [DEBUG] [Thread-194165] [transport.py] [_log()] kex follows: False
2026-02-14T23:37:48.488 [DEBUG] [Thread-194165] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:37:48.488 [DEBUG] [Thread-194165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:37:48.488 [DEBUG] [Thread-194165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:37:48.488 [DEBUG] [Thread-194165] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:37:48.489 [DEBUG] [Thread-194165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:37:48.489 [DEBUG] [Thread-194165] [transport.py] [_log()] Compression: none
2026-02-14T23:37:48.489 [DEBUG] [Thread-194165] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:37:48.548 [DEBUG] [Thread-194165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:37:48.548 [DEBUG] [Thread-194165] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:37:48.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:37:48.549 [DEBUG] [Thread-194165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:37:48.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:37:48.607 [DEBUG] [Thread-194165] [transport.py] [_log()] userauth is OK
2026-02-14T23:37:48.607 [DEBUG] [Thread-194165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:37:48.608 [DEBUG] [Thread-194165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:37:48.608 [DEBUG] [Thread-194165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:37:48.608 [DEBUG] [Thread-194165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:37:48.627 [INFO] [Thread-194165] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:37:48.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-14T23:37:48.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:37:49.402 [DEBUG] [Thread-194165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:37:49.402 [DEBUG] [Thread-194165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:37:49.450 [DEBUG] [Thread-194165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:37:49.450 [DEBUG] [Thread-194165] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:37:49.459 [DEBUG] [Thread-194165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:37:49.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:37:49.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-14T23:37:49.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-14T23:37:49.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:37:49.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:37:49.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:37:49.494 [DEBUG] [Thread-194165] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:37:52.928 [DEBUG] [Thread-194167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:38:05.303 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:38:05.755 [DEBUG] [Thread-194168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:38:07.976 [DEBUG] [Thread-194169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:38:09.644 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:38:09.645 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:38:10.102 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:38:13.175 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:38:19.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:38:19.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:38:19.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-14T23:38:19.655 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:38:21.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 38, 2), 6.04, 66.11, 0.0, 39.12, 8.77, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:38:21.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:38:02
2026-02-14T23:38:22.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:38:22.330 [DEBUG] [Thread-194170] [transport.py] [_log()] starting thread (client mode): 0xa57d5f90
2026-02-14T23:38:22.330 [DEBUG] [Thread-194170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:38:22.350 [DEBUG] [Thread-194170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:38:22.350 [INFO] [Thread-194170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:38:22.353 [DEBUG] [Thread-194170] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:38:22.353 [DEBUG] [Thread-194170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:38:22.353 [DEBUG] [Thread-194170] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:38:22.353 [DEBUG] [Thread-194170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:38:22.353 [DEBUG] [Thread-194170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:38:22.353 [DEBUG] [Thread-194170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:38:22.354 [DEBUG] [Thread-194170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:38:22.354 [DEBUG] [Thread-194170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:38:22.354 [DEBUG] [Thread-194170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:38:22.354 [DEBUG] [Thread-194170] [transport.py] [_log()] client lang: <none>
2026-02-14T23:38:22.354 [DEBUG] [Thread-194170] [transport.py] [_log()] server lang: <none>
2026-02-14T23:38:22.354 [DEBUG] [Thread-194170] [transport.py] [_log()] kex follows: False
2026-02-14T23:38:22.354 [DEBUG] [Thread-194170] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:38:22.354 [DEBUG] [Thread-194170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:38:22.354 [DEBUG] [Thread-194170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:38:22.354 [DEBUG] [Thread-194170] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:38:22.354 [DEBUG] [Thread-194170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:38:22.354 [DEBUG] [Thread-194170] [transport.py] [_log()] Compression: none
2026-02-14T23:38:22.354 [DEBUG] [Thread-194170] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:38:22.369 [DEBUG] [Thread-194170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:38:22.370 [DEBUG] [Thread-194170] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:38:22.370 [DEBUG] [Thread-194170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:38:22.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:38:22.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:38:22.372 [DEBUG] [Thread-194170] [transport.py] [_log()] userauth is OK
2026-02-14T23:38:22.372 [DEBUG] [Thread-194170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:38:22.372 [DEBUG] [Thread-194170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:38:22.373 [DEBUG] [Thread-194170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:38:22.373 [DEBUG] [Thread-194170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:38:22.408 [INFO] [Thread-194170] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:38:22.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:38:23.010 [DEBUG] [Thread-194172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:38:23.048 [DEBUG] [Thread-194170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:38:23.048 [DEBUG] [Thread-194170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:38:23.049 [DEBUG] [Thread-194170] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:38:23.091 [DEBUG] [Thread-194170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:38:23.091 [DEBUG] [Thread-194170] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:38:23.093 [DEBUG] [Thread-194170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:38:23.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:38:23.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:38:23.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:38:23.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:38:23.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:38:23.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:38:23.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:38:23.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:38:23.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:38:23.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.901500 -999.00   +8.70  28.65     70   +3.70 1 1 1 1 1     0    0 4.40 -21.73 ZNESW 31.0 28.6 159.6 32.4 9.2 -24.4 9.0 -23.4 8.8 -22.4 9.1 -23.6
2026-02-14T23:38:23.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:38:23.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:38:23.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.901500
2026-02-14T23:38:23.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:38:23.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:38:23.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:38:23.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:38:23.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:38:23.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:38:02', tmtdew=6.04, humidity=66.11, cloud=0.0, wind=39.12, temperature=8.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:38:03', seeing=3.49, atlas_timestamp='2026-02-14T21:38:09.600', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.029749999999999943, -0.018749999999998934, -0.0035000000000007248, -0.01699999999999946, -0.009749999999998593, -0.04150000000000098, -0.004749999999999588, 0.033500000000000085, 0.0259999999999998, -0.05775000000000041, 0.016000000000000014, 0.05400000000000027, 0.028249999999999886, 0.02949999999999875, 0.014499999999999957, 0.056250000000000355, 0.06850000000000023, 0.0129999999999999, -0.030250000000000554, 0.058999999999999275, 0.00274999999999892, 0.00975000000000037, 0.04075000000000095, 0.04699999999999882, 0.028999999999999915, 0.013249999999999318, 0.0009999999999994458, 0.06550000000000011, 0.04100000000000037, 0.06150000000000233, 0.08700000000000152, 0.0722499999999986], zp_timestamp='2026-02-14T21:34:00')
2026-02-14T23:38:23.117 [DEBUG] [Thread-194170] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:38:23.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-14T23:38:23.211 [DEBUG] [Thread-194174] [transport.py] [_log()] starting thread (client mode): 0xa57d7c70
2026-02-14T23:38:23.211 [DEBUG] [Thread-194174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:38:23.226 [DEBUG] [Thread-194174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:38:23.226 [INFO] [Thread-194174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:38:23.234 [DEBUG] [Thread-194174] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:38:23.234 [DEBUG] [Thread-194174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:38:23.234 [DEBUG] [Thread-194174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:38:23.235 [DEBUG] [Thread-194174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:38:23.235 [DEBUG] [Thread-194174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:38:23.235 [DEBUG] [Thread-194174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:38:23.235 [DEBUG] [Thread-194174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:38:23.235 [DEBUG] [Thread-194174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:38:23.235 [DEBUG] [Thread-194174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:38:23.235 [DEBUG] [Thread-194174] [transport.py] [_log()] client lang: <none>
2026-02-14T23:38:23.235 [DEBUG] [Thread-194174] [transport.py] [_log()] server lang: <none>
2026-02-14T23:38:23.235 [DEBUG] [Thread-194174] [transport.py] [_log()] kex follows: False
2026-02-14T23:38:23.235 [DEBUG] [Thread-194174] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:38:23.235 [DEBUG] [Thread-194174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:38:23.235 [DEBUG] [Thread-194174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:38:23.235 [DEBUG] [Thread-194174] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:38:23.235 [DEBUG] [Thread-194174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:38:23.235 [DEBUG] [Thread-194174] [transport.py] [_log()] Compression: none
2026-02-14T23:38:23.235 [DEBUG] [Thread-194174] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:38:23.291 [DEBUG] [Thread-194174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:38:23.292 [DEBUG] [Thread-194174] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:38:23.292 [DEBUG] [Thread-194174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:38:23.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:38:23.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:38:23.349 [DEBUG] [Thread-194174] [transport.py] [_log()] userauth is OK
2026-02-14T23:38:23.350 [DEBUG] [Thread-194174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:38:23.350 [DEBUG] [Thread-194174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:38:23.350 [DEBUG] [Thread-194174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:38:23.350 [DEBUG] [Thread-194174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:38:23.380 [INFO] [Thread-194174] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:38:23.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-14T23:38:23.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:38:24.200 [DEBUG] [Thread-194174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:38:24.200 [DEBUG] [Thread-194174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:38:24.249 [DEBUG] [Thread-194174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:38:24.249 [DEBUG] [Thread-194174] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:38:24.260 [DEBUG] [Thread-194174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:38:24.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:38:24.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-14T23:38:24.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-14T23:38:24.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:38:24.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:38:24.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:38:24.299 [DEBUG] [Thread-194174] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:38:38.047 [DEBUG] [Thread-194176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:38:53.099 [DEBUG] [Thread-194177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:38:54.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:38:54.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:38:54.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-14T23:38:56.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 38, 39), 6.16, 65.28, 0.0, 36.41, 9.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:38:56.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:38:39
2026-02-14T23:38:56.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:38:56.729 [DEBUG] [Thread-194178] [transport.py] [_log()] starting thread (client mode): 0xa57d57b0
2026-02-14T23:38:56.729 [DEBUG] [Thread-194178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:38:56.744 [DEBUG] [Thread-194178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:38:56.745 [INFO] [Thread-194178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:38:56.748 [DEBUG] [Thread-194178] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:38:56.748 [DEBUG] [Thread-194178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:38:56.748 [DEBUG] [Thread-194178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:38:56.748 [DEBUG] [Thread-194178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:38:56.748 [DEBUG] [Thread-194178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:38:56.748 [DEBUG] [Thread-194178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:38:56.748 [DEBUG] [Thread-194178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:38:56.748 [DEBUG] [Thread-194178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:38:56.748 [DEBUG] [Thread-194178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:38:56.748 [DEBUG] [Thread-194178] [transport.py] [_log()] client lang: <none>
2026-02-14T23:38:56.748 [DEBUG] [Thread-194178] [transport.py] [_log()] server lang: <none>
2026-02-14T23:38:56.748 [DEBUG] [Thread-194178] [transport.py] [_log()] kex follows: False
2026-02-14T23:38:56.749 [DEBUG] [Thread-194178] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:38:56.749 [DEBUG] [Thread-194178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:38:56.749 [DEBUG] [Thread-194178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:38:56.749 [DEBUG] [Thread-194178] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:38:56.749 [DEBUG] [Thread-194178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:38:56.749 [DEBUG] [Thread-194178] [transport.py] [_log()] Compression: none
2026-02-14T23:38:56.749 [DEBUG] [Thread-194178] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:38:56.767 [DEBUG] [Thread-194178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:38:56.768 [DEBUG] [Thread-194178] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:38:56.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:38:56.769 [DEBUG] [Thread-194178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:38:56.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:38:56.771 [DEBUG] [Thread-194178] [transport.py] [_log()] userauth is OK
2026-02-14T23:38:56.771 [DEBUG] [Thread-194178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:38:56.771 [DEBUG] [Thread-194178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:38:56.771 [DEBUG] [Thread-194178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:38:56.771 [DEBUG] [Thread-194178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:38:56.790 [INFO] [Thread-194178] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:38:56.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:38:57.370 [DEBUG] [Thread-194178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:38:57.371 [DEBUG] [Thread-194178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:38:57.371 [DEBUG] [Thread-194178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:38:57.411 [DEBUG] [Thread-194178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:38:57.412 [DEBUG] [Thread-194178] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:38:57.415 [DEBUG] [Thread-194178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:38:57.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:38:57.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:38:57.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:38:57.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:38:57.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:38:57.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:38:57.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:38:57.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:38:57.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:38:57.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.901847 -999.00   +8.70  35.16     70   +3.70 1 1 2 1 1     0    0 4.56 -22.86 ZNESW 27.6 35.2 153.7 37.7 9.1 -24.4 8.9 -23.3 8.8 -22.3 9.1 -23.5
2026-02-14T23:38:57.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:38:57.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:38:57.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.901847
2026-02-14T23:38:57.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:38:57.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:38:57.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:38:57.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:38:57.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:38:57.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:38:39', tmtdew=6.16, humidity=65.28, cloud=0.0, wind=36.41, temperature=9.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:38:39', seeing=4.51, atlas_timestamp='2026-02-14T21:38:39.581', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.029749999999999943, -0.018749999999998934, -0.0035000000000007248, -0.01699999999999946, -0.009749999999998593, -0.04150000000000098, -0.004749999999999588, 0.033500000000000085, 0.0259999999999998, -0.05775000000000041, 0.016000000000000014, 0.05400000000000027, 0.028249999999999886, 0.02949999999999875, 0.014499999999999957, 0.056250000000000355, 0.06850000000000023, 0.0129999999999999, -0.030250000000000554, 0.058999999999999275, 0.00274999999999892, 0.00975000000000037, 0.04075000000000095, 0.04699999999999882, 0.028999999999999915, 0.013249999999999318, 0.0009999999999994458, 0.06550000000000011, 0.04100000000000037, 0.06150000000000233, 0.08700000000000152, 0.0722499999999986], zp_timestamp='2026-02-14T21:37:00')
2026-02-14T23:38:57.442 [DEBUG] [Thread-194178] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:38: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-14T23:38:57.539 [DEBUG] [Thread-194181] [transport.py] [_log()] starting thread (client mode): 0xa57d6b00
2026-02-14T23:38:57.540 [DEBUG] [Thread-194181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:38:57.554 [DEBUG] [Thread-194181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:38:57.554 [INFO] [Thread-194181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:38:57.564 [DEBUG] [Thread-194181] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:38:57.564 [DEBUG] [Thread-194181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:38:57.564 [DEBUG] [Thread-194181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:38:57.564 [DEBUG] [Thread-194181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:38:57.564 [DEBUG] [Thread-194181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:38:57.564 [DEBUG] [Thread-194181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:38:57.564 [DEBUG] [Thread-194181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:38:57.564 [DEBUG] [Thread-194181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:38:57.565 [DEBUG] [Thread-194181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:38:57.565 [DEBUG] [Thread-194181] [transport.py] [_log()] client lang: <none>
2026-02-14T23:38:57.565 [DEBUG] [Thread-194181] [transport.py] [_log()] server lang: <none>
2026-02-14T23:38:57.565 [DEBUG] [Thread-194181] [transport.py] [_log()] kex follows: False
2026-02-14T23:38:57.565 [DEBUG] [Thread-194181] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:38:57.565 [DEBUG] [Thread-194181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:38:57.565 [DEBUG] [Thread-194181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:38:57.565 [DEBUG] [Thread-194181] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:38:57.565 [DEBUG] [Thread-194181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:38:57.565 [DEBUG] [Thread-194181] [transport.py] [_log()] Compression: none
2026-02-14T23:38:57.565 [DEBUG] [Thread-194181] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:38:57.630 [DEBUG] [Thread-194181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:38:57.630 [DEBUG] [Thread-194181] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:38:57.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:38:57.631 [DEBUG] [Thread-194181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:38:57.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:38:57.691 [DEBUG] [Thread-194181] [transport.py] [_log()] userauth is OK
2026-02-14T23:38:57.691 [DEBUG] [Thread-194181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:38:57.691 [DEBUG] [Thread-194181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:38:57.692 [DEBUG] [Thread-194181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:38:57.692 [DEBUG] [Thread-194181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:38:57.711 [INFO] [Thread-194181] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:38:57.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-14T23:38:57.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:38:58.466 [DEBUG] [Thread-194181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:38:58.466 [DEBUG] [Thread-194181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:38:58.514 [DEBUG] [Thread-194181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:38:58.514 [DEBUG] [Thread-194181] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:38:58.525 [DEBUG] [Thread-194181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:38:58.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:38:58.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:38:58.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-14T23:38:58.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:38:58.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:38:58.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:38:58.570 [DEBUG] [Thread-194181] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:39:05.828 [DEBUG] [Thread-194183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:39:08.135 [DEBUG] [Thread-194184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:39:09.847 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:39:09.848 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:39:23.198 [DEBUG] [Thread-194185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:39:28.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:39:28.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:39:28.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-14T23:39:30.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 39, 14), 6.02, 66.19, 0.0, 39.4, 8.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:39:30.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:39:14
2026-02-14T23:39:30.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:39:30.980 [DEBUG] [Thread-194186] [transport.py] [_log()] starting thread (client mode): 0xa57d4100
2026-02-14T23:39:30.980 [DEBUG] [Thread-194186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:39:30.997 [DEBUG] [Thread-194186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:39:30.997 [INFO] [Thread-194186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:39:30.998 [DEBUG] [Thread-194186] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:39:30.999 [DEBUG] [Thread-194186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:39:30.999 [DEBUG] [Thread-194186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:39:30.999 [DEBUG] [Thread-194186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:39:30.999 [DEBUG] [Thread-194186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:39:30.999 [DEBUG] [Thread-194186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:39:30.999 [DEBUG] [Thread-194186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:39:30.999 [DEBUG] [Thread-194186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:39:30.999 [DEBUG] [Thread-194186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:39:30.999 [DEBUG] [Thread-194186] [transport.py] [_log()] client lang: <none>
2026-02-14T23:39:30.999 [DEBUG] [Thread-194186] [transport.py] [_log()] server lang: <none>
2026-02-14T23:39:31.000 [DEBUG] [Thread-194186] [transport.py] [_log()] kex follows: False
2026-02-14T23:39:31.000 [DEBUG] [Thread-194186] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:39:31.000 [DEBUG] [Thread-194186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:39:31.000 [DEBUG] [Thread-194186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:39:31.000 [DEBUG] [Thread-194186] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:39:31.000 [DEBUG] [Thread-194186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:39:31.000 [DEBUG] [Thread-194186] [transport.py] [_log()] Compression: none
2026-02-14T23:39:31.000 [DEBUG] [Thread-194186] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:39:31.013 [DEBUG] [Thread-194186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:39:31.013 [DEBUG] [Thread-194186] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:39:31.014 [DEBUG] [Thread-194186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23: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-14T23:39:31.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:39:31.016 [DEBUG] [Thread-194186] [transport.py] [_log()] userauth is OK
2026-02-14T23:39:31.016 [DEBUG] [Thread-194186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:39:31.016 [DEBUG] [Thread-194186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:39:31.016 [DEBUG] [Thread-194186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:39:31.016 [DEBUG] [Thread-194186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:39:31.040 [INFO] [Thread-194186] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:39:31.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:39:31.636 [DEBUG] [Thread-194186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:39:31.636 [DEBUG] [Thread-194186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:39:31.637 [DEBUG] [Thread-194186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:39:31.677 [DEBUG] [Thread-194186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:39:31.678 [DEBUG] [Thread-194186] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:39:31.681 [DEBUG] [Thread-194186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:39:31.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:39:31.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:39:31.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:39:31.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:39:31.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:39:31.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:39:31.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:39:31.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:39:31.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:39:31.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.902194 -999.00   +8.70  28.04     70   +3.70 1 1 1 1 1     0    0 4.51 -21.85 ZNESW 30.0 28.0 168.4 35.8 9.1 -24.4 9.0 -23.4 8.8 -22.5 9.1 -23.8
2026-02-14T23:39:31.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:39:31.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:39:31.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.902194
2026-02-14T23:39:31.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:39:31.707 [DEBUG] [Thread-194186] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:39:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:39:31.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:39:31.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:39:31.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:39:31.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:39:14', tmtdew=6.02, humidity=66.19, cloud=0.0, wind=39.4, temperature=8.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:39:15', seeing=3.36, atlas_timestamp='2026-02-14T21:39:09.562', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.029749999999999943, -0.018749999999998934, -0.0035000000000007248, -0.01699999999999946, -0.009749999999998593, -0.04150000000000098, -0.004749999999999588, 0.033500000000000085, 0.0259999999999998, -0.05775000000000041, 0.016000000000000014, 0.05400000000000027, 0.028249999999999886, 0.02949999999999875, 0.014499999999999957, 0.056250000000000355, 0.06850000000000023, 0.0129999999999999, -0.030250000000000554, 0.058999999999999275, 0.00274999999999892, 0.00975000000000037, 0.04075000000000095, 0.04699999999999882, 0.028999999999999915, 0.013249999999999318, 0.0009999999999994458, 0.06550000000000011, 0.04100000000000037, 0.06150000000000233, 0.08700000000000152, 0.0722499999999986], zp_timestamp='2026-02-14T21:37:00')
2026-02-14T23:39:31.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-14T23:39:31.801 [DEBUG] [Thread-194189] [transport.py] [_log()] starting thread (client mode): 0xa2d7a560
2026-02-14T23:39:31.801 [DEBUG] [Thread-194189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:39:31.817 [DEBUG] [Thread-194189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:39:31.817 [INFO] [Thread-194189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:39:31.826 [DEBUG] [Thread-194189] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:39:31.826 [DEBUG] [Thread-194189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:39:31.826 [DEBUG] [Thread-194189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:39:31.826 [DEBUG] [Thread-194189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:39:31.826 [DEBUG] [Thread-194189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:39:31.826 [DEBUG] [Thread-194189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:39:31.827 [DEBUG] [Thread-194189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:39:31.827 [DEBUG] [Thread-194189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:39:31.827 [DEBUG] [Thread-194189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:39:31.827 [DEBUG] [Thread-194189] [transport.py] [_log()] client lang: <none>
2026-02-14T23:39:31.827 [DEBUG] [Thread-194189] [transport.py] [_log()] server lang: <none>
2026-02-14T23:39:31.827 [DEBUG] [Thread-194189] [transport.py] [_log()] kex follows: False
2026-02-14T23:39:31.827 [DEBUG] [Thread-194189] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:39:31.828 [DEBUG] [Thread-194189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:39:31.828 [DEBUG] [Thread-194189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:39:31.828 [DEBUG] [Thread-194189] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:39:31.828 [DEBUG] [Thread-194189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:39:31.828 [DEBUG] [Thread-194189] [transport.py] [_log()] Compression: none
2026-02-14T23:39:31.828 [DEBUG] [Thread-194189] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:39:31.883 [DEBUG] [Thread-194189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:39:31.884 [DEBUG] [Thread-194189] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:39:31.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:39:31.885 [DEBUG] [Thread-194189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:39:31.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:39:31.939 [DEBUG] [Thread-194189] [transport.py] [_log()] userauth is OK
2026-02-14T23:39:31.940 [DEBUG] [Thread-194189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:39:31.940 [DEBUG] [Thread-194189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:39:31.940 [DEBUG] [Thread-194189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:39:31.940 [DEBUG] [Thread-194189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:39:31.960 [INFO] [Thread-194189] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:39:31.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-14T23:39:31.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:39:32.798 [DEBUG] [Thread-194189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:39:32.798 [DEBUG] [Thread-194189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:39:32.846 [DEBUG] [Thread-194189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:39:32.847 [DEBUG] [Thread-194189] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:39:32.856 [DEBUG] [Thread-194189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:39:32.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:39:32.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')
2026-02-14T23:39:32.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-14T23:39:32.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:39:32.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:39:32.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:39:32.891 [DEBUG] [Thread-194189] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:39:38.238 [DEBUG] [Thread-194191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:39:44.409 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:39:47.531 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:39:52.625 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:39:53.294 [DEBUG] [Thread-194192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:39:58.149 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:40:02.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:40:02.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:40:02.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-14T23:40:04.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 39, 49), 5.97, 66.21, 0.0, 34.48, 8.81, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:40:04.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:39:49
2026-02-14T23:40:05.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:40:05.488 [DEBUG] [Thread-194193] [transport.py] [_log()] starting thread (client mode): 0xa2d6d0f0
2026-02-14T23:40:05.488 [DEBUG] [Thread-194193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:40:05.509 [DEBUG] [Thread-194193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:40:05.509 [INFO] [Thread-194193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:40:05.513 [DEBUG] [Thread-194193] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:40:05.513 [DEBUG] [Thread-194193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:40:05.513 [DEBUG] [Thread-194193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:40:05.513 [DEBUG] [Thread-194193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:40:05.513 [DEBUG] [Thread-194193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:40:05.514 [DEBUG] [Thread-194193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:40:05.514 [DEBUG] [Thread-194193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:40:05.514 [DEBUG] [Thread-194193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:40:05.514 [DEBUG] [Thread-194193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:40:05.514 [DEBUG] [Thread-194193] [transport.py] [_log()] client lang: <none>
2026-02-14T23:40:05.514 [DEBUG] [Thread-194193] [transport.py] [_log()] server lang: <none>
2026-02-14T23:40:05.514 [DEBUG] [Thread-194193] [transport.py] [_log()] kex follows: False
2026-02-14T23:40:05.514 [DEBUG] [Thread-194193] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:40:05.514 [DEBUG] [Thread-194193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:40:05.514 [DEBUG] [Thread-194193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:40:05.514 [DEBUG] [Thread-194193] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:40:05.514 [DEBUG] [Thread-194193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:40:05.515 [DEBUG] [Thread-194193] [transport.py] [_log()] Compression: none
2026-02-14T23:40:05.515 [DEBUG] [Thread-194193] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:40:05.535 [DEBUG] [Thread-194193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:40:05.536 [DEBUG] [Thread-194193] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:40:05.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:40:05.537 [DEBUG] [Thread-194193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:40:05.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:40:05.539 [DEBUG] [Thread-194193] [transport.py] [_log()] userauth is OK
2026-02-14T23:40:05.539 [DEBUG] [Thread-194193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:40:05.539 [DEBUG] [Thread-194193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:40:05.539 [DEBUG] [Thread-194193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:40:05.540 [DEBUG] [Thread-194193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:40:05.563 [INFO] [Thread-194193] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:40:05.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:40:05.884 [DEBUG] [Thread-194195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:40:08.332 [DEBUG] [Thread-194196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:40:09.165 [DEBUG] [Thread-194193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:40:09.165 [DEBUG] [Thread-194193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:40:09.166 [DEBUG] [Thread-194193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:40:09.206 [DEBUG] [Thread-194193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:40:09.206 [DEBUG] [Thread-194193] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:40:09.209 [DEBUG] [Thread-194193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:40:09.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:40:09.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:40:09.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:40:09.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:40:09.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:40:09.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:40:09.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:40:09.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:40:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:40:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.902541 -999.00   +8.70  25.95     70   +3.70 1 1 1 1 1     0    0 4.52 -22.30 ZNESW 27.2 25.9 171.4 35.4 9.2 -24.5 9.0 -23.4 8.7 -22.4 9.1 -23.6
2026-02-14T23:40:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:40:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:40:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.902541
2026-02-14T23:40:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:40:09.233 [DEBUG] [Thread-194193] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:40:09.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:40:09.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:40:09.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:40:09.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:40:09.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:39:49', tmtdew=5.97, humidity=66.21, cloud=0.0, wind=34.48, temperature=8.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:39:50', seeing=3.36, atlas_timestamp='2026-02-14T21:39:39.542', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.029749999999999943, -0.018749999999998934, -0.0035000000000007248, -0.01699999999999946, -0.009749999999998593, -0.04150000000000098, -0.004749999999999588, 0.033500000000000085, 0.0259999999999998, -0.05775000000000041, 0.016000000000000014, 0.05400000000000027, 0.028249999999999886, 0.02949999999999875, 0.014499999999999957, 0.056250000000000355, 0.06850000000000023, 0.0129999999999999, -0.030250000000000554, 0.058999999999999275, 0.00274999999999892, 0.00975000000000037, 0.04075000000000095, 0.04699999999999882, 0.028999999999999915, 0.013249999999999318, 0.0009999999999994458, 0.06550000000000011, 0.04100000000000037, 0.06150000000000233, 0.08700000000000152, 0.0722499999999986], zp_timestamp='2026-02-14T21:37:00')
2026-02-14T23:40:09.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-14T23:40:09.329 [DEBUG] [Thread-194198] [transport.py] [_log()] starting thread (client mode): 0xa2d6e470
2026-02-14T23:40:09.329 [DEBUG] [Thread-194198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:40:09.344 [DEBUG] [Thread-194198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:40:09.344 [INFO] [Thread-194198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:40:09.352 [DEBUG] [Thread-194198] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:40:09.352 [DEBUG] [Thread-194198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:40:09.352 [DEBUG] [Thread-194198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:40:09.352 [DEBUG] [Thread-194198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:40:09.352 [DEBUG] [Thread-194198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:40:09.352 [DEBUG] [Thread-194198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:40:09.352 [DEBUG] [Thread-194198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:40:09.352 [DEBUG] [Thread-194198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:40:09.352 [DEBUG] [Thread-194198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:40:09.352 [DEBUG] [Thread-194198] [transport.py] [_log()] client lang: <none>
2026-02-14T23:40:09.353 [DEBUG] [Thread-194198] [transport.py] [_log()] server lang: <none>
2026-02-14T23:40:09.353 [DEBUG] [Thread-194198] [transport.py] [_log()] kex follows: False
2026-02-14T23:40:09.353 [DEBUG] [Thread-194198] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:40:09.353 [DEBUG] [Thread-194198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:40:09.353 [DEBUG] [Thread-194198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:40:09.353 [DEBUG] [Thread-194198] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:40:09.353 [DEBUG] [Thread-194198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:40:09.353 [DEBUG] [Thread-194198] [transport.py] [_log()] Compression: none
2026-02-14T23:40:09.353 [DEBUG] [Thread-194198] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:40:09.411 [DEBUG] [Thread-194198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:40:09.412 [DEBUG] [Thread-194198] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:40:09.412 [DEBUG] [Thread-194198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:40:09.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:40:09.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:40:09.467 [DEBUG] [Thread-194198] [transport.py] [_log()] userauth is OK
2026-02-14T23:40:09.467 [DEBUG] [Thread-194198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:40:09.467 [DEBUG] [Thread-194198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:40:09.467 [DEBUG] [Thread-194198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:40:09.468 [DEBUG] [Thread-194198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:40:09.485 [INFO] [Thread-194198] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:40:09.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-14T23:40:09.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:40:10.050 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:40:10.052 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:40:10.255 [DEBUG] [Thread-194198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:40:10.255 [DEBUG] [Thread-194198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:40:10.304 [DEBUG] [Thread-194198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:40:10.305 [DEBUG] [Thread-194198] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:40:10.314 [DEBUG] [Thread-194198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:40:10.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:40:10.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-14T23:40:10.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-14T23:40:10.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:40:10.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:40:10.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:40:10.348 [DEBUG] [Thread-194198] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:40:17.444 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:40:21.929 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:40:23.364 [DEBUG] [Thread-194200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:40:38.410 [DEBUG] [Thread-194201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:40:40.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:40:40.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:40:40.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-14T23:40:41.260 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:40:42.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 40, 24), 5.96, 66.23, 0.0, 34.9, 8.79, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:40:42.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:40:24
2026-02-14T23:40:42.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:40:42.775 [DEBUG] [Thread-194202] [transport.py] [_log()] starting thread (client mode): 0xa57d7700
2026-02-14T23:40:42.776 [DEBUG] [Thread-194202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:40:42.794 [DEBUG] [Thread-194202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:40:42.795 [INFO] [Thread-194202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:40:42.798 [DEBUG] [Thread-194202] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:40:42.798 [DEBUG] [Thread-194202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:40:42.798 [DEBUG] [Thread-194202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:40:42.799 [DEBUG] [Thread-194202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:40:42.799 [DEBUG] [Thread-194202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:40:42.799 [DEBUG] [Thread-194202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:40:42.799 [DEBUG] [Thread-194202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:40:42.799 [DEBUG] [Thread-194202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:40:42.799 [DEBUG] [Thread-194202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:40:42.799 [DEBUG] [Thread-194202] [transport.py] [_log()] client lang: <none>
2026-02-14T23:40:42.799 [DEBUG] [Thread-194202] [transport.py] [_log()] server lang: <none>
2026-02-14T23:40:42.799 [DEBUG] [Thread-194202] [transport.py] [_log()] kex follows: False
2026-02-14T23:40:42.799 [DEBUG] [Thread-194202] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:40:42.799 [DEBUG] [Thread-194202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:40:42.799 [DEBUG] [Thread-194202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:40:42.799 [DEBUG] [Thread-194202] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:40:42.799 [DEBUG] [Thread-194202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:40:42.799 [DEBUG] [Thread-194202] [transport.py] [_log()] Compression: none
2026-02-14T23:40:42.799 [DEBUG] [Thread-194202] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:40:42.815 [DEBUG] [Thread-194202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:40:42.816 [DEBUG] [Thread-194202] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:40:42.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:40:42.817 [DEBUG] [Thread-194202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:40:42.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:40:42.861 [DEBUG] [Thread-194202] [transport.py] [_log()] userauth is OK
2026-02-14T23:40:42.861 [DEBUG] [Thread-194202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:40:42.861 [DEBUG] [Thread-194202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:40:42.861 [DEBUG] [Thread-194202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:40:42.861 [DEBUG] [Thread-194202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:40:42.881 [INFO] [Thread-194202] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:40:42.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:40:43.464 [DEBUG] [Thread-194202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:40:43.465 [DEBUG] [Thread-194202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:40:43.465 [DEBUG] [Thread-194202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:40:43.505 [DEBUG] [Thread-194202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:40:43.505 [DEBUG] [Thread-194202] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:40:43.509 [DEBUG] [Thread-194202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:40:43.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:40:43.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:40:43.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:40:43.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:40:43.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:40:43.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:40:43.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:40:43.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:40:43.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:40:43.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.903236 -999.00   +8.60  25.04     71   +3.70 1 1 1 1 1     0    0 4.52 -22.22 ZNESW 25.7 25.0 157.6 31.1 9.1 -24.6 8.9 -23.5 8.8 -22.6 9.1 -23.7
2026-02-14T23:40:43.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:40:43.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:40:43.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.903236
2026-02-14T23:40:43.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:40:43.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:40:43.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:40:43.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:40:43.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:40:43.536 [DEBUG] [Thread-194202] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:40:43.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:40:24', tmtdew=5.96, humidity=66.23, cloud=0.0, wind=34.9, temperature=8.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:40:25', seeing=3.36, atlas_timestamp='2026-02-14T21:40:39.590', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.029749999999999943, -0.018749999999998934, -0.0035000000000007248, -0.01699999999999946, -0.009749999999998593, -0.04150000000000098, -0.004749999999999588, 0.033500000000000085, 0.0259999999999998, -0.05775000000000041, 0.016000000000000014, 0.05400000000000027, 0.028249999999999886, 0.02949999999999875, 0.014499999999999957, 0.056250000000000355, 0.06850000000000023, 0.0129999999999999, -0.030250000000000554, 0.058999999999999275, 0.00274999999999892, 0.00975000000000037, 0.04075000000000095, 0.04699999999999882, 0.028999999999999915, 0.013249999999999318, 0.0009999999999994458, 0.06550000000000011, 0.04100000000000037, 0.06150000000000233, 0.08700000000000152, 0.0722499999999986], zp_timestamp='2026-02-14T21:37:00')
2026-02-14T23:40:43.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-14T23:40:43.633 [DEBUG] [Thread-194205] [transport.py] [_log()] starting thread (client mode): 0xa2d13f10
2026-02-14T23:40:43.633 [DEBUG] [Thread-194205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:40:43.651 [DEBUG] [Thread-194205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:40:43.652 [INFO] [Thread-194205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:40:43.659 [DEBUG] [Thread-194205] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:40:43.659 [DEBUG] [Thread-194205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:40:43.660 [DEBUG] [Thread-194205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:40:43.660 [DEBUG] [Thread-194205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:40:43.660 [DEBUG] [Thread-194205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:40:43.660 [DEBUG] [Thread-194205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:40:43.660 [DEBUG] [Thread-194205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:40:43.660 [DEBUG] [Thread-194205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:40:43.660 [DEBUG] [Thread-194205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:40:43.660 [DEBUG] [Thread-194205] [transport.py] [_log()] client lang: <none>
2026-02-14T23:40:43.660 [DEBUG] [Thread-194205] [transport.py] [_log()] server lang: <none>
2026-02-14T23:40:43.661 [DEBUG] [Thread-194205] [transport.py] [_log()] kex follows: False
2026-02-14T23:40:43.661 [DEBUG] [Thread-194205] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:40:43.661 [DEBUG] [Thread-194205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:40:43.661 [DEBUG] [Thread-194205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:40:43.661 [DEBUG] [Thread-194205] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:40:43.661 [DEBUG] [Thread-194205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:40:43.661 [DEBUG] [Thread-194205] [transport.py] [_log()] Compression: none
2026-02-14T23:40:43.662 [DEBUG] [Thread-194205] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:40:43.719 [DEBUG] [Thread-194205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:40:43.720 [DEBUG] [Thread-194205] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:40:43.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:40:43.721 [DEBUG] [Thread-194205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:40:43.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:40:43.779 [DEBUG] [Thread-194205] [transport.py] [_log()] userauth is OK
2026-02-14T23:40:43.779 [DEBUG] [Thread-194205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:40:43.779 [DEBUG] [Thread-194205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:40:43.779 [DEBUG] [Thread-194205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:40:43.779 [DEBUG] [Thread-194205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:40:43.804 [INFO] [Thread-194205] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:40:43.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-14T23:40:43.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:40:44.595 [DEBUG] [Thread-194205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:40:44.596 [DEBUG] [Thread-194205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:40:44.643 [DEBUG] [Thread-194205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:40:44.644 [DEBUG] [Thread-194205] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:40:44.653 [DEBUG] [Thread-194205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:40:44.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:40:44.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-14T23:40:44.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-14T23:40:44.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:40:44.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:40:44.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:40:44.690 [DEBUG] [Thread-194205] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:40:45.782 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:40:52.645 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:40:53.443 [DEBUG] [Thread-194207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:40:57.127 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:41:05.941 [DEBUG] [Thread-194208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:41:08.493 [DEBUG] [Thread-194209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:41:10.251 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:41:10.253 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:41:14.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:41:14.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:41:14.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-14T23:41:16.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 40, 24), 5.96, 66.23, 0.0, 29.5, 8.74, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:41:16.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:40:24
2026-02-14T23:41:17.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:41:17.309 [DEBUG] [Thread-194210] [transport.py] [_log()] starting thread (client mode): 0xa57d4250
2026-02-14T23:41:17.309 [DEBUG] [Thread-194210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:41:17.330 [DEBUG] [Thread-194210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:41:17.330 [INFO] [Thread-194210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:41:17.333 [DEBUG] [Thread-194210] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:41:17.333 [DEBUG] [Thread-194210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:41:17.333 [DEBUG] [Thread-194210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:41:17.333 [DEBUG] [Thread-194210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:41:17.333 [DEBUG] [Thread-194210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:41:17.333 [DEBUG] [Thread-194210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:41:17.333 [DEBUG] [Thread-194210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:41:17.333 [DEBUG] [Thread-194210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:41:17.333 [DEBUG] [Thread-194210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:41:17.333 [DEBUG] [Thread-194210] [transport.py] [_log()] client lang: <none>
2026-02-14T23:41:17.333 [DEBUG] [Thread-194210] [transport.py] [_log()] server lang: <none>
2026-02-14T23:41:17.333 [DEBUG] [Thread-194210] [transport.py] [_log()] kex follows: False
2026-02-14T23:41:17.333 [DEBUG] [Thread-194210] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:41:17.333 [DEBUG] [Thread-194210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:41:17.333 [DEBUG] [Thread-194210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:41:17.333 [DEBUG] [Thread-194210] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:41:17.333 [DEBUG] [Thread-194210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:41:17.333 [DEBUG] [Thread-194210] [transport.py] [_log()] Compression: none
2026-02-14T23:41:17.333 [DEBUG] [Thread-194210] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:41:17.348 [DEBUG] [Thread-194210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:41:17.348 [DEBUG] [Thread-194210] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:41:17.348 [DEBUG] [Thread-194210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:41:17.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:41:17.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:41:17.349 [DEBUG] [Thread-194210] [transport.py] [_log()] userauth is OK
2026-02-14T23:41:17.349 [DEBUG] [Thread-194210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:41:17.349 [DEBUG] [Thread-194210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:41:17.349 [DEBUG] [Thread-194210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:41:17.349 [DEBUG] [Thread-194210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:41:17.359 [INFO] [Thread-194210] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:41:17.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:41:17.998 [DEBUG] [Thread-194210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:41:18.008 [DEBUG] [Thread-194210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:41:18.009 [DEBUG] [Thread-194210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:41:18.039 [DEBUG] [Thread-194210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:41:18.039 [DEBUG] [Thread-194210] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:41:18.042 [DEBUG] [Thread-194210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:41:18.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:41:18.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:41:18.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:41:18.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:41:18.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:41:18.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:41:18.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:41:18.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:41:18.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:41:18.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.903236 -999.00   +8.60  25.04     71   +3.70 1 1 1 1 1     0    0 4.52 -22.22 ZNESW 25.7 25.0 157.6 31.1 9.1 -24.6 8.9 -23.5 8.8 -22.6 9.1 -23.7
2026-02-14T23:41:18.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:41:18.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:41:18.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.903236
2026-02-14T23:41:18.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:41:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:41:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:41:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:41:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:41:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:40:24', tmtdew=5.96, humidity=66.23, cloud=0.0, wind=29.5, temperature=8.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:41:00', seeing=3.44, atlas_timestamp='2026-02-14T21:40:39.590', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.029749999999999943, -0.018749999999998934, -0.0035000000000007248, -0.01699999999999946, -0.009749999999998593, -0.04150000000000098, -0.004749999999999588, 0.033500000000000085, 0.0259999999999998, -0.05775000000000041, 0.016000000000000014, 0.05400000000000027, 0.028249999999999886, 0.02949999999999875, 0.014499999999999957, 0.056250000000000355, 0.06850000000000023, 0.0129999999999999, -0.030250000000000554, 0.058999999999999275, 0.00274999999999892, 0.00975000000000037, 0.04075000000000095, 0.04699999999999882, 0.028999999999999915, 0.013249999999999318, 0.0009999999999994458, 0.06550000000000011, 0.04100000000000037, 0.06150000000000233, 0.08700000000000152, 0.0722499999999986], zp_timestamp='2026-02-14T21:37:00')
2026-02-14T23:41:18.068 [DEBUG] [Thread-194210] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:41:18.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-14T23:41:18.175 [DEBUG] [Thread-194213] [transport.py] [_log()] starting thread (client mode): 0xa2d1a800
2026-02-14T23:41:18.175 [DEBUG] [Thread-194213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:41:18.190 [DEBUG] [Thread-194213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:41:18.190 [INFO] [Thread-194213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:41:18.198 [DEBUG] [Thread-194213] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:41:18.198 [DEBUG] [Thread-194213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:41:18.198 [DEBUG] [Thread-194213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:41:18.198 [DEBUG] [Thread-194213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:41:18.198 [DEBUG] [Thread-194213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:41:18.198 [DEBUG] [Thread-194213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:41:18.198 [DEBUG] [Thread-194213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:41:18.198 [DEBUG] [Thread-194213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:41:18.198 [DEBUG] [Thread-194213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:41:18.198 [DEBUG] [Thread-194213] [transport.py] [_log()] client lang: <none>
2026-02-14T23:41:18.198 [DEBUG] [Thread-194213] [transport.py] [_log()] server lang: <none>
2026-02-14T23:41:18.198 [DEBUG] [Thread-194213] [transport.py] [_log()] kex follows: False
2026-02-14T23:41:18.198 [DEBUG] [Thread-194213] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:41:18.198 [DEBUG] [Thread-194213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:41:18.199 [DEBUG] [Thread-194213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:41:18.199 [DEBUG] [Thread-194213] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:41:18.199 [DEBUG] [Thread-194213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:41:18.199 [DEBUG] [Thread-194213] [transport.py] [_log()] Compression: none
2026-02-14T23:41:18.199 [DEBUG] [Thread-194213] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:41:18.254 [DEBUG] [Thread-194213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:41:18.255 [DEBUG] [Thread-194213] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:41:18.255 [DEBUG] [Thread-194213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:41:18.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:41:18.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:41:18.311 [DEBUG] [Thread-194213] [transport.py] [_log()] userauth is OK
2026-02-14T23:41:18.311 [DEBUG] [Thread-194213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:41:18.311 [DEBUG] [Thread-194213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:41:18.311 [DEBUG] [Thread-194213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:41:18.311 [DEBUG] [Thread-194213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:41:18.343 [INFO] [Thread-194213] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:41:18.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-14T23:41:18.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:41:19.114 [DEBUG] [Thread-194213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:41:19.114 [DEBUG] [Thread-194213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:41:19.162 [DEBUG] [Thread-194213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:41:19.163 [DEBUG] [Thread-194213] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:41:19.172 [DEBUG] [Thread-194213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:41:19.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:41:19.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-14T23:41:19.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-14T23:41:19.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:41:19.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:41:19.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:41:19.210 [DEBUG] [Thread-194213] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:41:23.529 [DEBUG] [Thread-194215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:41:38.581 [DEBUG] [Thread-194216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:41:49.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:41:49.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:41:49.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:41:51.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 41, 35), 6.1, 65.55, 0.0, 42.23, 9.11, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:41:51.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:41:35
2026-02-14T23:41:51.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:41:51.619 [DEBUG] [Thread-194217] [transport.py] [_log()] starting thread (client mode): 0xa2d7a140
2026-02-14T23:41:51.619 [DEBUG] [Thread-194217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:41:51.638 [DEBUG] [Thread-194217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:41:51.638 [INFO] [Thread-194217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:41:51.642 [DEBUG] [Thread-194217] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:41:51.642 [DEBUG] [Thread-194217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:41:51.642 [DEBUG] [Thread-194217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:41:51.642 [DEBUG] [Thread-194217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:41:51.642 [DEBUG] [Thread-194217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:41:51.642 [DEBUG] [Thread-194217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:41:51.642 [DEBUG] [Thread-194217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:41:51.642 [DEBUG] [Thread-194217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:41:51.642 [DEBUG] [Thread-194217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:41:51.642 [DEBUG] [Thread-194217] [transport.py] [_log()] client lang: <none>
2026-02-14T23:41:51.642 [DEBUG] [Thread-194217] [transport.py] [_log()] server lang: <none>
2026-02-14T23:41:51.642 [DEBUG] [Thread-194217] [transport.py] [_log()] kex follows: False
2026-02-14T23:41:51.642 [DEBUG] [Thread-194217] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:41:51.642 [DEBUG] [Thread-194217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:41:51.642 [DEBUG] [Thread-194217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:41:51.642 [DEBUG] [Thread-194217] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:41:51.642 [DEBUG] [Thread-194217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:41:51.642 [DEBUG] [Thread-194217] [transport.py] [_log()] Compression: none
2026-02-14T23:41:51.642 [DEBUG] [Thread-194217] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:41:51.658 [DEBUG] [Thread-194217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:41:51.659 [DEBUG] [Thread-194217] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:41:51.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:41:51.659 [DEBUG] [Thread-194217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:41:51.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:41:51.659 [DEBUG] [Thread-194217] [transport.py] [_log()] userauth is OK
2026-02-14T23:41:51.659 [DEBUG] [Thread-194217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:41:51.660 [DEBUG] [Thread-194217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:41:51.660 [DEBUG] [Thread-194217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:41:51.660 [DEBUG] [Thread-194217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:41:51.678 [INFO] [Thread-194217] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:41:51.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:41:52.292 [DEBUG] [Thread-194217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:41:52.292 [DEBUG] [Thread-194217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:41:52.293 [DEBUG] [Thread-194217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:41:52.333 [DEBUG] [Thread-194217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:41:52.333 [DEBUG] [Thread-194217] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:41:52.336 [DEBUG] [Thread-194217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:41:52.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:41:52.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:41:52.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:41:52.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:41:52.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:41:52.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:41:52.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:41:52.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:41:52.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:41:52.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.903583 -999.00   +8.60  22.67     71   +3.70 1 1 1 1 1     0    0 4.52 -22.38 ZNESW 24.0 22.7 164.4 34.8 9.1 -24.4 8.9 -23.4 8.7 -22.5 9.1 -23.7
2026-02-14T23:41:52.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:41:52.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:41:52.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.903583
2026-02-14T23:41:52.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:41:52.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:41:52.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:41:52.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:41:52.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:41:52.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:41:35', tmtdew=6.1, humidity=65.55, cloud=0.0, wind=42.23, temperature=9.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:41:36', seeing=2.69, atlas_timestamp='2026-02-14T21:41:09.571', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.04824999999999946, -0.031749999999998835, -0.009500000000000952, -0.03599999999999959, 0.029749999999999943, -0.018500000000001293, -0.0072499999999990905, 0.005499999999999616, 0.026500000000000412, -0.04224999999999923, 0.0039999999999995595, 0.0860000000000003, 0.034250000000000114, 0.04099999999999859, 0.0519999999999996, 0.06325000000000003, 0.057000000000000384, 0.016000000000000014, -0.0007500000000018048, 0.07099999999999795, 0.013249999999999318, 0.006250000000001421, 0.03625000000000078, 0.07699999999999996, 0.049000000000001265, 0.0017499999999994742, -0.010499999999998622, 0.08200000000000074, 0.0600000000000005, 0.058000000000001606, 0.08549999999999969, 0.02674999999999983], zp_timestamp='2026-02-14T21:40:00')
2026-02-14T23:41:52.362 [DEBUG] [Thread-194217] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:41:52.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-14T23:41:52.466 [DEBUG] [Thread-194220] [transport.py] [_log()] starting thread (client mode): 0xa2d18ee0
2026-02-14T23:41:52.466 [DEBUG] [Thread-194220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:41:52.481 [DEBUG] [Thread-194220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:41:52.482 [INFO] [Thread-194220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:41:52.489 [DEBUG] [Thread-194220] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:41:52.490 [DEBUG] [Thread-194220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:41:52.490 [DEBUG] [Thread-194220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:41:52.490 [DEBUG] [Thread-194220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:41:52.490 [DEBUG] [Thread-194220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:41:52.490 [DEBUG] [Thread-194220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:41:52.490 [DEBUG] [Thread-194220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:41:52.490 [DEBUG] [Thread-194220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:41:52.490 [DEBUG] [Thread-194220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:41:52.490 [DEBUG] [Thread-194220] [transport.py] [_log()] client lang: <none>
2026-02-14T23:41:52.490 [DEBUG] [Thread-194220] [transport.py] [_log()] server lang: <none>
2026-02-14T23:41:52.490 [DEBUG] [Thread-194220] [transport.py] [_log()] kex follows: False
2026-02-14T23:41:52.490 [DEBUG] [Thread-194220] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:41:52.490 [DEBUG] [Thread-194220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:41:52.491 [DEBUG] [Thread-194220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:41:52.491 [DEBUG] [Thread-194220] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:41:52.491 [DEBUG] [Thread-194220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:41:52.491 [DEBUG] [Thread-194220] [transport.py] [_log()] Compression: none
2026-02-14T23:41:52.491 [DEBUG] [Thread-194220] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:41:52.547 [DEBUG] [Thread-194220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:41:52.547 [DEBUG] [Thread-194220] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:41:52.548 [DEBUG] [Thread-194220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:41:52.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:41:52.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:41:52.603 [DEBUG] [Thread-194220] [transport.py] [_log()] userauth is OK
2026-02-14T23:41:52.603 [DEBUG] [Thread-194220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:41:52.603 [DEBUG] [Thread-194220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:41:52.603 [DEBUG] [Thread-194220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:41:52.603 [DEBUG] [Thread-194220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:41:52.627 [INFO] [Thread-194220] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:41:52.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-14T23:41:52.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:41:53.468 [DEBUG] [Thread-194220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:41:53.468 [DEBUG] [Thread-194220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:41:53.517 [DEBUG] [Thread-194220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:41:53.517 [DEBUG] [Thread-194220] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:41:53.526 [DEBUG] [Thread-194220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:41:53.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:41: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-14T23:41:53.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-14T23:41:53.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:41:53.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:41:53.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:41:53.564 [DEBUG] [Thread-194220] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:41:53.617 [DEBUG] [Thread-194222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:41:56.585 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:41:59.657 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:42:05.996 [DEBUG] [Thread-194223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:42:08.680 [DEBUG] [Thread-194224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:42:10.459 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:42:10.460 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:42:23.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:42:23.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:42:23.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-14T23:42:23.715 [DEBUG] [Thread-194225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:42:25.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 42, 12), 5.95, 66.27, 0.0, 37.99, 8.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:42:25.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:42:12
2026-02-14T23:42:25.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:42:25.959 [DEBUG] [Thread-194226] [transport.py] [_log()] starting thread (client mode): 0xa2d1a9b0
2026-02-14T23:42:25.959 [DEBUG] [Thread-194226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:42:25.979 [DEBUG] [Thread-194226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:42:25.979 [INFO] [Thread-194226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:42:25.982 [DEBUG] [Thread-194226] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:42:25.983 [DEBUG] [Thread-194226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:42:25.983 [DEBUG] [Thread-194226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:42:25.983 [DEBUG] [Thread-194226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:42:25.983 [DEBUG] [Thread-194226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:42:25.983 [DEBUG] [Thread-194226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:42:25.983 [DEBUG] [Thread-194226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:42:25.983 [DEBUG] [Thread-194226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:42:25.983 [DEBUG] [Thread-194226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:42:25.983 [DEBUG] [Thread-194226] [transport.py] [_log()] client lang: <none>
2026-02-14T23:42:25.983 [DEBUG] [Thread-194226] [transport.py] [_log()] server lang: <none>
2026-02-14T23:42:25.983 [DEBUG] [Thread-194226] [transport.py] [_log()] kex follows: False
2026-02-14T23:42:25.983 [DEBUG] [Thread-194226] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:42:25.983 [DEBUG] [Thread-194226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:42:25.983 [DEBUG] [Thread-194226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:42:25.983 [DEBUG] [Thread-194226] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:42:25.984 [DEBUG] [Thread-194226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:42:25.984 [DEBUG] [Thread-194226] [transport.py] [_log()] Compression: none
2026-02-14T23:42:25.984 [DEBUG] [Thread-194226] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:42:25.992 [DEBUG] [Thread-194226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:42:25.992 [DEBUG] [Thread-194226] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:42:25.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:42:25.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:42:25.994 [DEBUG] [Thread-194226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:42:25.994 [DEBUG] [Thread-194226] [transport.py] [_log()] userauth is OK
2026-02-14T23:42:25.994 [DEBUG] [Thread-194226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:42:25.994 [DEBUG] [Thread-194226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:42:25.994 [DEBUG] [Thread-194226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:42:25.994 [DEBUG] [Thread-194226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:42:26.027 [INFO] [Thread-194226] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:42:26.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:42:26.687 [DEBUG] [Thread-194226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:42:26.687 [DEBUG] [Thread-194226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:42:26.687 [DEBUG] [Thread-194226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:42:26.728 [DEBUG] [Thread-194226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:42:26.728 [DEBUG] [Thread-194226] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:42:26.731 [DEBUG] [Thread-194226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:42:26.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:42:26.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:42:26.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:42:26.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:42:26.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:42:26.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:42:26.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:42:26.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:42:26.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:42:26.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.903930 -999.00   +8.60  30.30     71   +3.70 1 1 2 1 1     0    0 4.53 -20.89 ZNESW 25.2 30.3 158.2 35.5 9.1 -24.4 8.9 -23.3 8.7 -22.4 9.1 -23.6
2026-02-14T23:42:26.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:42:26.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:42:26.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.903930
2026-02-14T23:42:26.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:42:26.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:42:26.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:42:26.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:42:26.757 [DEBUG] [Thread-194226] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:42:26.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:42:26.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:42:12', tmtdew=5.95, humidity=66.27, cloud=0.0, wind=37.99, temperature=8.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:42:12', seeing=2.72, atlas_timestamp='2026-02-14T21:41:39.552', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.04824999999999946, -0.031749999999998835, -0.009500000000000952, -0.03599999999999959, 0.029749999999999943, -0.018500000000001293, -0.0072499999999990905, 0.005499999999999616, 0.026500000000000412, -0.04224999999999923, 0.0039999999999995595, 0.0860000000000003, 0.034250000000000114, 0.04099999999999859, 0.0519999999999996, 0.06325000000000003, 0.057000000000000384, 0.016000000000000014, -0.0007500000000018048, 0.07099999999999795, 0.013249999999999318, 0.006250000000001421, 0.03625000000000078, 0.07699999999999996, 0.049000000000001265, 0.0017499999999994742, -0.010499999999998622, 0.08200000000000074, 0.0600000000000005, 0.058000000000001606, 0.08549999999999969, 0.02674999999999983], zp_timestamp='2026-02-14T21:40:00')
2026-02-14T23:42:26.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-14T23:42:26.857 [DEBUG] [Thread-194229] [transport.py] [_log()] starting thread (client mode): 0xa2d6e7a0
2026-02-14T23:42:26.857 [DEBUG] [Thread-194229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:42:26.872 [DEBUG] [Thread-194229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:42:26.872 [INFO] [Thread-194229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:42:26.880 [DEBUG] [Thread-194229] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:42:26.880 [DEBUG] [Thread-194229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:42:26.880 [DEBUG] [Thread-194229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:42:26.880 [DEBUG] [Thread-194229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:42:26.880 [DEBUG] [Thread-194229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:42:26.881 [DEBUG] [Thread-194229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:42:26.881 [DEBUG] [Thread-194229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:42:26.881 [DEBUG] [Thread-194229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:42:26.881 [DEBUG] [Thread-194229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:42:26.881 [DEBUG] [Thread-194229] [transport.py] [_log()] client lang: <none>
2026-02-14T23:42:26.881 [DEBUG] [Thread-194229] [transport.py] [_log()] server lang: <none>
2026-02-14T23:42:26.881 [DEBUG] [Thread-194229] [transport.py] [_log()] kex follows: False
2026-02-14T23:42:26.881 [DEBUG] [Thread-194229] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:42:26.881 [DEBUG] [Thread-194229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:42:26.882 [DEBUG] [Thread-194229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:42:26.882 [DEBUG] [Thread-194229] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:42:26.882 [DEBUG] [Thread-194229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:42:26.882 [DEBUG] [Thread-194229] [transport.py] [_log()] Compression: none
2026-02-14T23:42:26.882 [DEBUG] [Thread-194229] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:42:26.948 [DEBUG] [Thread-194229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:42:26.948 [DEBUG] [Thread-194229] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:42:26.949 [DEBUG] [Thread-194229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:42:26.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:42:26.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:42:27.008 [DEBUG] [Thread-194229] [transport.py] [_log()] userauth is OK
2026-02-14T23:42:27.008 [DEBUG] [Thread-194229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:42:27.008 [DEBUG] [Thread-194229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:42:27.008 [DEBUG] [Thread-194229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:42:27.009 [DEBUG] [Thread-194229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:42:27.037 [INFO] [Thread-194229] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:42:27.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-14T23:42:27.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:42:27.808 [DEBUG] [Thread-194229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:42:27.808 [DEBUG] [Thread-194229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:42:27.856 [DEBUG] [Thread-194229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:42:27.856 [DEBUG] [Thread-194229] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:42:27.865 [DEBUG] [Thread-194229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:42:27.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:42:27.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-14T23:42:27.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:42:27.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:42:27.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:42:27.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:42:27.901 [DEBUG] [Thread-194229] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:42:38.764 [DEBUG] [Thread-194231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:42:53.818 [DEBUG] [Thread-194232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:42:57.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:42:57.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:42:57.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:43:00.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 42, 47), 5.94, 66.31, 0.0, 35.8, 8.71, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:43:00.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:42:47
2026-02-14T23:43:00.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:43:00.581 [DEBUG] [Thread-194233] [transport.py] [_log()] starting thread (client mode): 0xa2d783d0
2026-02-14T23:43:00.581 [DEBUG] [Thread-194233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:43:00.601 [DEBUG] [Thread-194233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:43:00.601 [INFO] [Thread-194233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:43:00.604 [DEBUG] [Thread-194233] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:43:00.604 [DEBUG] [Thread-194233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:43:00.604 [DEBUG] [Thread-194233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:43:00.604 [DEBUG] [Thread-194233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:43:00.604 [DEBUG] [Thread-194233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:43:00.604 [DEBUG] [Thread-194233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:43:00.604 [DEBUG] [Thread-194233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:43:00.604 [DEBUG] [Thread-194233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:43:00.604 [DEBUG] [Thread-194233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:43:00.604 [DEBUG] [Thread-194233] [transport.py] [_log()] client lang: <none>
2026-02-14T23:43:00.604 [DEBUG] [Thread-194233] [transport.py] [_log()] server lang: <none>
2026-02-14T23:43:00.604 [DEBUG] [Thread-194233] [transport.py] [_log()] kex follows: False
2026-02-14T23:43:00.604 [DEBUG] [Thread-194233] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:43:00.604 [DEBUG] [Thread-194233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:43:00.604 [DEBUG] [Thread-194233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:43:00.604 [DEBUG] [Thread-194233] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:43:00.604 [DEBUG] [Thread-194233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:43:00.604 [DEBUG] [Thread-194233] [transport.py] [_log()] Compression: none
2026-02-14T23:43:00.604 [DEBUG] [Thread-194233] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:43:00.623 [DEBUG] [Thread-194233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:43:00.623 [DEBUG] [Thread-194233] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:43:00.624 [DEBUG] [Thread-194233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:43:00.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:43:00.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:43:00.626 [DEBUG] [Thread-194233] [transport.py] [_log()] userauth is OK
2026-02-14T23:43:00.626 [DEBUG] [Thread-194233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:43:00.627 [DEBUG] [Thread-194233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:43:00.627 [DEBUG] [Thread-194233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:43:00.627 [DEBUG] [Thread-194233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:43:00.651 [INFO] [Thread-194233] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:43:00.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:43:01.270 [DEBUG] [Thread-194233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:43:01.270 [DEBUG] [Thread-194233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:43:01.271 [DEBUG] [Thread-194233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:43:01.311 [DEBUG] [Thread-194233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:43:01.311 [DEBUG] [Thread-194233] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:43:01.315 [DEBUG] [Thread-194233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:43:01.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:43:01.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:43:01.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:43:01.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:43:01.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:43:01.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:43:01.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:43:01.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:43:01.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:43:01.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.904277 -999.00   +8.60  24.78     71   +3.70 1 1 1 1 1     0    0 4.43 -21.29 ZNESW 20.5 24.8 147.6 35.5 9.1 -24.3 8.9 -23.4 8.7 -22.5 9.1 -23.7
2026-02-14T23:43:01.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:43:01.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:43:01.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.904277
2026-02-14T23:43:01.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:43:01.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:43:01.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:43:01.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:43:01.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:43:01.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:42:47', tmtdew=5.94, humidity=66.31, cloud=0.0, wind=35.8, temperature=8.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:42:48', seeing=3.13, atlas_timestamp='2026-02-14T21:42:09.533', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.04824999999999946, -0.031749999999998835, -0.009500000000000952, -0.03599999999999959, 0.029749999999999943, -0.018500000000001293, -0.0072499999999990905, 0.005499999999999616, 0.026500000000000412, -0.04224999999999923, 0.0039999999999995595, 0.0860000000000003, 0.034250000000000114, 0.04099999999999859, 0.0519999999999996, 0.06325000000000003, 0.057000000000000384, 0.016000000000000014, -0.0007500000000018048, 0.07099999999999795, 0.013249999999999318, 0.006250000000001421, 0.03625000000000078, 0.07699999999999996, 0.049000000000001265, 0.0017499999999994742, -0.010499999999998622, 0.08200000000000074, 0.0600000000000005, 0.058000000000001606, 0.08549999999999969, 0.02674999999999983], zp_timestamp='2026-02-14T21:40:00')
2026-02-14T23:43:01.343 [DEBUG] [Thread-194233] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:43:01.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-14T23:43:01.441 [DEBUG] [Thread-194236] [transport.py] [_log()] starting thread (client mode): 0xa2d198d0
2026-02-14T23:43:01.441 [DEBUG] [Thread-194236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:43:01.455 [DEBUG] [Thread-194236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:43:01.455 [INFO] [Thread-194236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:43:01.463 [DEBUG] [Thread-194236] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:43:01.463 [DEBUG] [Thread-194236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:43:01.463 [DEBUG] [Thread-194236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:43:01.464 [DEBUG] [Thread-194236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:43:01.464 [DEBUG] [Thread-194236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:43:01.464 [DEBUG] [Thread-194236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:43:01.464 [DEBUG] [Thread-194236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:43:01.464 [DEBUG] [Thread-194236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:43:01.464 [DEBUG] [Thread-194236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:43:01.464 [DEBUG] [Thread-194236] [transport.py] [_log()] client lang: <none>
2026-02-14T23:43:01.464 [DEBUG] [Thread-194236] [transport.py] [_log()] server lang: <none>
2026-02-14T23:43:01.464 [DEBUG] [Thread-194236] [transport.py] [_log()] kex follows: False
2026-02-14T23:43:01.464 [DEBUG] [Thread-194236] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:43:01.464 [DEBUG] [Thread-194236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:43:01.464 [DEBUG] [Thread-194236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:43:01.464 [DEBUG] [Thread-194236] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:43:01.464 [DEBUG] [Thread-194236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:43:01.464 [DEBUG] [Thread-194236] [transport.py] [_log()] Compression: none
2026-02-14T23:43:01.464 [DEBUG] [Thread-194236] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:43:01.523 [DEBUG] [Thread-194236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:43:01.523 [DEBUG] [Thread-194236] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:43:01.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:43:01.525 [DEBUG] [Thread-194236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:43:01.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:43:01.579 [DEBUG] [Thread-194236] [transport.py] [_log()] userauth is OK
2026-02-14T23:43:01.579 [DEBUG] [Thread-194236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:43:01.579 [DEBUG] [Thread-194236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:43:01.580 [DEBUG] [Thread-194236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:43:01.580 [DEBUG] [Thread-194236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:43:01.604 [INFO] [Thread-194236] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:43:01.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-14T23:43:01.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:43:02.442 [DEBUG] [Thread-194236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:43:02.443 [DEBUG] [Thread-194236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:43:02.490 [DEBUG] [Thread-194236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:43:02.491 [DEBUG] [Thread-194236] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:43:02.500 [DEBUG] [Thread-194236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:43:02.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:43:02.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-14T23:43:02.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:43:02.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:43:02.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:43:02.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:43:02.537 [DEBUG] [Thread-194236] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:43:06.059 [DEBUG] [Thread-194238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:43:08.854 [DEBUG] [Thread-194239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:43:10.661 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:43:10.662 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:43:23.394 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:43:23.904 [DEBUG] [Thread-194240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:43:27.964 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:43:31.036 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:43:32.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:43:32.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:43:32.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-14T23:43:34.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 43, 23), 5.94, 66.32, 0.0, 37.23, 8.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:43:34.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:43:23
2026-02-14T23:43:34.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:43:34.893 [DEBUG] [Thread-194241] [transport.py] [_log()] starting thread (client mode): 0xa2d1aa70
2026-02-14T23:43:34.893 [DEBUG] [Thread-194241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:43:34.914 [DEBUG] [Thread-194241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:43:34.914 [INFO] [Thread-194241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:43:34.917 [DEBUG] [Thread-194241] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:43:34.917 [DEBUG] [Thread-194241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:43:34.917 [DEBUG] [Thread-194241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:43:34.918 [DEBUG] [Thread-194241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:43:34.918 [DEBUG] [Thread-194241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:43:34.918 [DEBUG] [Thread-194241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:43:34.918 [DEBUG] [Thread-194241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:43:34.918 [DEBUG] [Thread-194241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:43:34.918 [DEBUG] [Thread-194241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:43:34.918 [DEBUG] [Thread-194241] [transport.py] [_log()] client lang: <none>
2026-02-14T23:43:34.918 [DEBUG] [Thread-194241] [transport.py] [_log()] server lang: <none>
2026-02-14T23:43:34.918 [DEBUG] [Thread-194241] [transport.py] [_log()] kex follows: False
2026-02-14T23:43:34.918 [DEBUG] [Thread-194241] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:43:34.918 [DEBUG] [Thread-194241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:43:34.918 [DEBUG] [Thread-194241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:43:34.919 [DEBUG] [Thread-194241] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:43:34.919 [DEBUG] [Thread-194241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:43:34.919 [DEBUG] [Thread-194241] [transport.py] [_log()] Compression: none
2026-02-14T23:43:34.919 [DEBUG] [Thread-194241] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:43:34.938 [DEBUG] [Thread-194241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:43:34.939 [DEBUG] [Thread-194241] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:43:34.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:43:34.940 [DEBUG] [Thread-194241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:43:34.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:43:34.942 [DEBUG] [Thread-194241] [transport.py] [_log()] userauth is OK
2026-02-14T23:43:34.943 [DEBUG] [Thread-194241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:43:34.943 [DEBUG] [Thread-194241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:43:34.943 [DEBUG] [Thread-194241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:43:34.943 [DEBUG] [Thread-194241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:43:34.965 [INFO] [Thread-194241] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:43:34.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:43:35.729 [DEBUG] [Thread-194241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:43:35.729 [DEBUG] [Thread-194241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:43:35.729 [DEBUG] [Thread-194241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:43:35.769 [DEBUG] [Thread-194241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:43:35.769 [DEBUG] [Thread-194241] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:43:35.772 [DEBUG] [Thread-194241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:43:35.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:43:35.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:43:35.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:43:35.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:43:35.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:43:35.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:43:35.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:43:35.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:43:35.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:43:35.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.904624 -999.00   +8.60  29.96     71   +3.70 1 1 1 1 1     0    0 4.54 -20.26 ZNESW 27.1 30.0 159.4 35.8 9.1 -24.4 8.9 -23.4 8.7 -22.5 9.1 -23.6
2026-02-14T23:43:35.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:43:35.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:43:35.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.904624
2026-02-14T23:43:35.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:43:35.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:43:35.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:43:35.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:43:35.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:43:35.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:43:23', tmtdew=5.94, humidity=66.32, cloud=0.0, wind=37.23, temperature=8.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:43:23', seeing=3.67, atlas_timestamp='2026-02-14T21:42:39.514', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.04824999999999946, -0.031749999999998835, -0.009500000000000952, -0.03599999999999959, 0.029749999999999943, -0.018500000000001293, -0.0072499999999990905, 0.005499999999999616, 0.026500000000000412, -0.04224999999999923, 0.0039999999999995595, 0.0860000000000003, 0.034250000000000114, 0.04099999999999859, 0.0519999999999996, 0.06325000000000003, 0.057000000000000384, 0.016000000000000014, -0.0007500000000018048, 0.07099999999999795, 0.013249999999999318, 0.006250000000001421, 0.03625000000000078, 0.07699999999999996, 0.049000000000001265, 0.0017499999999994742, -0.010499999999998622, 0.08200000000000074, 0.0600000000000005, 0.058000000000001606, 0.08549999999999969, 0.02674999999999983], zp_timestamp='2026-02-14T21:40:00')
2026-02-14T23:43:35.799 [DEBUG] [Thread-194241] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:43:35.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-14T23:43:35.895 [DEBUG] [Thread-194244] [transport.py] [_log()] starting thread (client mode): 0xa2d19cf0
2026-02-14T23:43:35.896 [DEBUG] [Thread-194244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:43:35.909 [DEBUG] [Thread-194244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:43:35.910 [INFO] [Thread-194244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:43:35.917 [DEBUG] [Thread-194244] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:43:35.918 [DEBUG] [Thread-194244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:43:35.918 [DEBUG] [Thread-194244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:43:35.918 [DEBUG] [Thread-194244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:43:35.918 [DEBUG] [Thread-194244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:43:35.918 [DEBUG] [Thread-194244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:43:35.918 [DEBUG] [Thread-194244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:43:35.918 [DEBUG] [Thread-194244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:43:35.918 [DEBUG] [Thread-194244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:43:35.918 [DEBUG] [Thread-194244] [transport.py] [_log()] client lang: <none>
2026-02-14T23:43:35.918 [DEBUG] [Thread-194244] [transport.py] [_log()] server lang: <none>
2026-02-14T23:43:35.918 [DEBUG] [Thread-194244] [transport.py] [_log()] kex follows: False
2026-02-14T23:43:35.918 [DEBUG] [Thread-194244] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:43:35.918 [DEBUG] [Thread-194244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:43:35.918 [DEBUG] [Thread-194244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:43:35.918 [DEBUG] [Thread-194244] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:43:35.918 [DEBUG] [Thread-194244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:43:35.918 [DEBUG] [Thread-194244] [transport.py] [_log()] Compression: none
2026-02-14T23:43:35.918 [DEBUG] [Thread-194244] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:43:35.979 [DEBUG] [Thread-194244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:43:35.979 [DEBUG] [Thread-194244] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:43:35.980 [DEBUG] [Thread-194244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:43:35.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:43:35.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:43:36.035 [DEBUG] [Thread-194244] [transport.py] [_log()] userauth is OK
2026-02-14T23:43:36.035 [DEBUG] [Thread-194244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:43:36.035 [DEBUG] [Thread-194244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:43:36.035 [DEBUG] [Thread-194244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:43:36.036 [DEBUG] [Thread-194244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:43:36.054 [INFO] [Thread-194244] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:43:36.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-14T23:43:36.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:43:36.848 [DEBUG] [Thread-194244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:43:36.849 [DEBUG] [Thread-194244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:43:36.896 [DEBUG] [Thread-194244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:43:36.897 [DEBUG] [Thread-194244] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:43:36.906 [DEBUG] [Thread-194244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:43:36.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:43:36.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-14T23:43:36.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:43:36.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:43:36.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:43:36.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:43:36.943 [DEBUG] [Thread-194244] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:43:37.553 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:43:38.935 [DEBUG] [Thread-194246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:43:53.978 [DEBUG] [Thread-194247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:44:06.123 [DEBUG] [Thread-194248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:44:06.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:44:06.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:44:06.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-14T23:44:08.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 43, 58), 5.89, 66.32, 0.0, 41.27, 8.71, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:44:08.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:43:58
2026-02-14T23:44:09.017 [DEBUG] [Thread-194249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:44:09.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:44:09.343 [DEBUG] [Thread-194250] [transport.py] [_log()] starting thread (client mode): 0xa57d4790
2026-02-14T23:44:09.343 [DEBUG] [Thread-194250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:44:09.363 [DEBUG] [Thread-194250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:44:09.363 [INFO] [Thread-194250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:44:09.366 [DEBUG] [Thread-194250] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:44:09.366 [DEBUG] [Thread-194250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:44:09.366 [DEBUG] [Thread-194250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:44:09.366 [DEBUG] [Thread-194250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:44:09.366 [DEBUG] [Thread-194250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:44:09.366 [DEBUG] [Thread-194250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:44:09.366 [DEBUG] [Thread-194250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:44:09.366 [DEBUG] [Thread-194250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:44:09.366 [DEBUG] [Thread-194250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:44:09.366 [DEBUG] [Thread-194250] [transport.py] [_log()] client lang: <none>
2026-02-14T23:44:09.366 [DEBUG] [Thread-194250] [transport.py] [_log()] server lang: <none>
2026-02-14T23:44:09.366 [DEBUG] [Thread-194250] [transport.py] [_log()] kex follows: False
2026-02-14T23:44:09.366 [DEBUG] [Thread-194250] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:44:09.366 [DEBUG] [Thread-194250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:44:09.366 [DEBUG] [Thread-194250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:44:09.366 [DEBUG] [Thread-194250] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:44:09.366 [DEBUG] [Thread-194250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:44:09.366 [DEBUG] [Thread-194250] [transport.py] [_log()] Compression: none
2026-02-14T23:44:09.366 [DEBUG] [Thread-194250] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:44:09.379 [DEBUG] [Thread-194250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:44:09.379 [DEBUG] [Thread-194250] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:44:09.379 [DEBUG] [Thread-194250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:44:09.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:44:09.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:44:09.381 [DEBUG] [Thread-194250] [transport.py] [_log()] userauth is OK
2026-02-14T23:44:09.382 [DEBUG] [Thread-194250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:44:09.382 [DEBUG] [Thread-194250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:44:09.382 [DEBUG] [Thread-194250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:44:09.382 [DEBUG] [Thread-194250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:44:09.407 [INFO] [Thread-194250] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:44:09.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:44:10.050 [DEBUG] [Thread-194250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:44:10.050 [DEBUG] [Thread-194250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:44:10.051 [DEBUG] [Thread-194250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:44:10.091 [DEBUG] [Thread-194250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:44:10.092 [DEBUG] [Thread-194250] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:44:10.094 [DEBUG] [Thread-194250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:44:10.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:44:10.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:44:10.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:44:10.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:44:10.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:44:10.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:44:10.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:44:10.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:44:10.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:44:10.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.904972 -999.00   +8.60  21.54     71   +3.70 1 1 1 1 1     0    0 4.41 -21.58 ZNESW 18.0 21.5 149.7 28.5 9.1 -24.5 8.9 -23.3 8.7 -22.4 9.1 -23.7
2026-02-14T23:44:10.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:44:10.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:44:10.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.904972
2026-02-14T23:44:10.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:44:10.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:44:10.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:44:10.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:44:10.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:44:10.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:43:58', tmtdew=5.89, humidity=66.32, cloud=0.0, wind=41.27, temperature=8.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:43:58', seeing=2.95, atlas_timestamp='2026-02-14T21:43:09.581', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.04824999999999946, -0.031749999999998835, -0.009500000000000952, -0.03599999999999959, 0.029749999999999943, -0.018500000000001293, -0.0072499999999990905, 0.005499999999999616, 0.026500000000000412, -0.04224999999999923, 0.0039999999999995595, 0.0860000000000003, 0.034250000000000114, 0.04099999999999859, 0.0519999999999996, 0.06325000000000003, 0.057000000000000384, 0.016000000000000014, -0.0007500000000018048, 0.07099999999999795, 0.013249999999999318, 0.006250000000001421, 0.03625000000000078, 0.07699999999999996, 0.049000000000001265, 0.0017499999999994742, -0.010499999999998622, 0.08200000000000074, 0.0600000000000005, 0.058000000000001606, 0.08549999999999969, 0.02674999999999983], zp_timestamp='2026-02-14T21:40:00')
2026-02-14T23:44:10.122 [DEBUG] [Thread-194250] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:44:10.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-14T23:44:10.218 [DEBUG] [Thread-194253] [transport.py] [_log()] starting thread (client mode): 0xa5743f10
2026-02-14T23:44:10.218 [DEBUG] [Thread-194253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:44:10.233 [DEBUG] [Thread-194253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:44:10.233 [INFO] [Thread-194253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:44:10.241 [DEBUG] [Thread-194253] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:44:10.241 [DEBUG] [Thread-194253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:44:10.242 [DEBUG] [Thread-194253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:44:10.242 [DEBUG] [Thread-194253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:44:10.242 [DEBUG] [Thread-194253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:44:10.242 [DEBUG] [Thread-194253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:44:10.242 [DEBUG] [Thread-194253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:44:10.242 [DEBUG] [Thread-194253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:44:10.242 [DEBUG] [Thread-194253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:44:10.242 [DEBUG] [Thread-194253] [transport.py] [_log()] client lang: <none>
2026-02-14T23:44:10.242 [DEBUG] [Thread-194253] [transport.py] [_log()] server lang: <none>
2026-02-14T23:44:10.242 [DEBUG] [Thread-194253] [transport.py] [_log()] kex follows: False
2026-02-14T23:44:10.242 [DEBUG] [Thread-194253] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:44:10.242 [DEBUG] [Thread-194253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:44:10.242 [DEBUG] [Thread-194253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:44:10.242 [DEBUG] [Thread-194253] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:44:10.242 [DEBUG] [Thread-194253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:44:10.242 [DEBUG] [Thread-194253] [transport.py] [_log()] Compression: none
2026-02-14T23:44:10.242 [DEBUG] [Thread-194253] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:44:10.300 [DEBUG] [Thread-194253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:44:10.301 [DEBUG] [Thread-194253] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:44:10.302 [DEBUG] [Thread-194253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:44:10.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:44:10.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:44:10.359 [DEBUG] [Thread-194253] [transport.py] [_log()] userauth is OK
2026-02-14T23:44:10.359 [DEBUG] [Thread-194253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:44:10.359 [DEBUG] [Thread-194253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:44:10.359 [DEBUG] [Thread-194253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:44:10.359 [DEBUG] [Thread-194253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:44:10.379 [INFO] [Thread-194253] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:44:10.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-14T23:44:10.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:44:10.862 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:44:10.863 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:44:11.180 [DEBUG] [Thread-194253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:44:11.180 [DEBUG] [Thread-194253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:44:11.228 [DEBUG] [Thread-194253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:44:11.228 [DEBUG] [Thread-194253] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:44:11.237 [DEBUG] [Thread-194253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:44:11.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:44: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-14T23:44: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-14T23:44:11.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:44:11.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:44:11.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:44:11.276 [DEBUG] [Thread-194253] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:44:24.055 [DEBUG] [Thread-194255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:44:39.107 [DEBUG] [Thread-194256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:44:39.147 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:44:41.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:44:41.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:44:41.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:44:42.306 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:44:43.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 44, 33), 6.07, 65.68, 0.0, 44.95, 9.01, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:44:43.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:44:33
2026-02-14T23:44:43.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:44:43.853 [DEBUG] [Thread-194257] [transport.py] [_log()] starting thread (client mode): 0xa2d6e7a0
2026-02-14T23:44:43.853 [DEBUG] [Thread-194257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:44:43.873 [DEBUG] [Thread-194257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:44:43.873 [INFO] [Thread-194257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:44:43.876 [DEBUG] [Thread-194257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:44:43.876 [DEBUG] [Thread-194257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:44:43.876 [DEBUG] [Thread-194257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:44:43.877 [DEBUG] [Thread-194257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:44:43.877 [DEBUG] [Thread-194257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:44:43.877 [DEBUG] [Thread-194257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:44:43.877 [DEBUG] [Thread-194257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:44:43.877 [DEBUG] [Thread-194257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:44:43.877 [DEBUG] [Thread-194257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:44:43.877 [DEBUG] [Thread-194257] [transport.py] [_log()] client lang: <none>
2026-02-14T23:44:43.877 [DEBUG] [Thread-194257] [transport.py] [_log()] server lang: <none>
2026-02-14T23:44:43.877 [DEBUG] [Thread-194257] [transport.py] [_log()] kex follows: False
2026-02-14T23:44:43.877 [DEBUG] [Thread-194257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:44:43.877 [DEBUG] [Thread-194257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:44:43.877 [DEBUG] [Thread-194257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:44:43.877 [DEBUG] [Thread-194257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:44:43.878 [DEBUG] [Thread-194257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:44:43.878 [DEBUG] [Thread-194257] [transport.py] [_log()] Compression: none
2026-02-14T23:44:43.878 [DEBUG] [Thread-194257] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:44:43.891 [DEBUG] [Thread-194257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:44:43.891 [DEBUG] [Thread-194257] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:44:43.892 [DEBUG] [Thread-194257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:44:43.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:44:43.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:44:43.893 [DEBUG] [Thread-194257] [transport.py] [_log()] userauth is OK
2026-02-14T23:44:43.893 [DEBUG] [Thread-194257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:44:43.894 [DEBUG] [Thread-194257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:44:43.894 [DEBUG] [Thread-194257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:44:43.894 [DEBUG] [Thread-194257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:44:43.912 [INFO] [Thread-194257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:44:43.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:44:44.719 [DEBUG] [Thread-194257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:44:44.719 [DEBUG] [Thread-194257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:44:44.720 [DEBUG] [Thread-194257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:44:44.760 [DEBUG] [Thread-194257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:44:44.761 [DEBUG] [Thread-194257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:44:44.764 [DEBUG] [Thread-194257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:44:44.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:44:44.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:44:44.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:44:44.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:44:44.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:44:44.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:44:44.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:44:44.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:44:44.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:44:44.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.905319 -999.00   +8.60  29.03     71   +3.70 1 1 1 1 1     0    0 4.52 -21.64 ZNESW 28.2 29.0 165.2 38.7 9.1 -24.4 8.9 -23.5 8.7 -22.2 9.1 -23.4
2026-02-14T23:44:44.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:44:44.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:44:44.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.905319
2026-02-14T23:44:44.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:44:44.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:44:44.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:44:44.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:44:44.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:44:44.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:44:33', tmtdew=6.07, humidity=65.68, cloud=0.0, wind=44.95, temperature=9.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:44:33', seeing=2.65, atlas_timestamp='2026-02-14T21:43:39.562', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.04824999999999946, -0.031749999999998835, -0.009500000000000952, -0.03599999999999959, 0.029749999999999943, -0.018500000000001293, -0.0072499999999990905, 0.005499999999999616, 0.026500000000000412, -0.04224999999999923, 0.0039999999999995595, 0.0860000000000003, 0.034250000000000114, 0.04099999999999859, 0.0519999999999996, 0.06325000000000003, 0.057000000000000384, 0.016000000000000014, -0.0007500000000018048, 0.07099999999999795, 0.013249999999999318, 0.006250000000001421, 0.03625000000000078, 0.07699999999999996, 0.049000000000001265, 0.0017499999999994742, -0.010499999999998622, 0.08200000000000074, 0.0600000000000005, 0.058000000000001606, 0.08549999999999969, 0.02674999999999983], zp_timestamp='2026-02-14T21:40:00')
2026-02-14T23:44:44.784 [DEBUG] [Thread-194257] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:44:44.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-14T23:44:44.878 [DEBUG] [Thread-194260] [transport.py] [_log()] starting thread (client mode): 0xa2d13cd0
2026-02-14T23:44:44.878 [DEBUG] [Thread-194260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:44:44.892 [DEBUG] [Thread-194260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:44:44.892 [INFO] [Thread-194260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:44:44.900 [DEBUG] [Thread-194260] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:44:44.900 [DEBUG] [Thread-194260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:44:44.900 [DEBUG] [Thread-194260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:44:44.900 [DEBUG] [Thread-194260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:44:44.900 [DEBUG] [Thread-194260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:44:44.900 [DEBUG] [Thread-194260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:44:44.900 [DEBUG] [Thread-194260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:44:44.900 [DEBUG] [Thread-194260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:44:44.900 [DEBUG] [Thread-194260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:44:44.900 [DEBUG] [Thread-194260] [transport.py] [_log()] client lang: <none>
2026-02-14T23:44:44.900 [DEBUG] [Thread-194260] [transport.py] [_log()] server lang: <none>
2026-02-14T23:44:44.900 [DEBUG] [Thread-194260] [transport.py] [_log()] kex follows: False
2026-02-14T23:44:44.900 [DEBUG] [Thread-194260] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:44:44.901 [DEBUG] [Thread-194260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:44:44.901 [DEBUG] [Thread-194260] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:44:44.901 [DEBUG] [Thread-194260] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:44:44.901 [DEBUG] [Thread-194260] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:44:44.901 [DEBUG] [Thread-194260] [transport.py] [_log()] Compression: none
2026-02-14T23:44:44.901 [DEBUG] [Thread-194260] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:44:44.959 [DEBUG] [Thread-194260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:44:44.960 [DEBUG] [Thread-194260] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:44:44.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:44:44.961 [DEBUG] [Thread-194260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:44:44.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:44:45.016 [DEBUG] [Thread-194260] [transport.py] [_log()] userauth is OK
2026-02-14T23:44:45.016 [DEBUG] [Thread-194260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:44:45.016 [DEBUG] [Thread-194260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:44:45.016 [DEBUG] [Thread-194260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:44:45.016 [DEBUG] [Thread-194260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:44:45.035 [INFO] [Thread-194260] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:44:45.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-14T23:44:45.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:44:45.879 [DEBUG] [Thread-194260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:44:45.889 [DEBUG] [Thread-194260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:44:45.928 [DEBUG] [Thread-194260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:44:45.928 [DEBUG] [Thread-194260] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:44:45.937 [DEBUG] [Thread-194260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:44:45.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:44:45.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-14T23:44:45.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:44:45.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:44:45.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:44:45.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:44:45.974 [DEBUG] [Thread-194260] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:44:47.399 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:44:52.887 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:44:54.142 [DEBUG] [Thread-194262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:45:06.190 [DEBUG] [Thread-194263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:45:09.196 [DEBUG] [Thread-194264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:45:11.064 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:45:11.065 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:45:12.229 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:45:15.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:45:15.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:45:15.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-14T23:45:16.704 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:45:17.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 45, 9), 5.93, 66.36, 0.0, 29.2, 8.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:45:17.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:45:09
2026-02-14T23:45:18.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:45:18.352 [DEBUG] [Thread-194265] [transport.py] [_log()] starting thread (client mode): 0xa2d01d80
2026-02-14T23:45:18.352 [DEBUG] [Thread-194265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:45:18.373 [DEBUG] [Thread-194265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:45:18.373 [INFO] [Thread-194265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:45:18.377 [DEBUG] [Thread-194265] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:45:18.377 [DEBUG] [Thread-194265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:45:18.377 [DEBUG] [Thread-194265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:45:18.378 [DEBUG] [Thread-194265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:45:18.378 [DEBUG] [Thread-194265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:45:18.378 [DEBUG] [Thread-194265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:45:18.378 [DEBUG] [Thread-194265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:45:18.378 [DEBUG] [Thread-194265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:45:18.378 [DEBUG] [Thread-194265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:45:18.378 [DEBUG] [Thread-194265] [transport.py] [_log()] client lang: <none>
2026-02-14T23:45:18.378 [DEBUG] [Thread-194265] [transport.py] [_log()] server lang: <none>
2026-02-14T23:45:18.378 [DEBUG] [Thread-194265] [transport.py] [_log()] kex follows: False
2026-02-14T23:45:18.378 [DEBUG] [Thread-194265] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:45:18.378 [DEBUG] [Thread-194265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:45:18.378 [DEBUG] [Thread-194265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:45:18.379 [DEBUG] [Thread-194265] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:45:18.379 [DEBUG] [Thread-194265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:45:18.379 [DEBUG] [Thread-194265] [transport.py] [_log()] Compression: none
2026-02-14T23:45:18.379 [DEBUG] [Thread-194265] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:45:18.398 [DEBUG] [Thread-194265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:45:18.398 [DEBUG] [Thread-194265] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:45:18.399 [DEBUG] [Thread-194265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:45:18.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:45:18.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:45:18.401 [DEBUG] [Thread-194265] [transport.py] [_log()] userauth is OK
2026-02-14T23:45:18.401 [DEBUG] [Thread-194265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:45:18.401 [DEBUG] [Thread-194265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:45:18.402 [DEBUG] [Thread-194265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:45:18.402 [DEBUG] [Thread-194265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:45:18.426 [INFO] [Thread-194265] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:45:18.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:45:19.034 [DEBUG] [Thread-194265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:45:19.034 [DEBUG] [Thread-194265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:45:19.034 [DEBUG] [Thread-194265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:45:19.075 [DEBUG] [Thread-194265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:45:19.076 [DEBUG] [Thread-194265] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:45:19.079 [DEBUG] [Thread-194265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:45:19.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:45:19.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:45:19.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:45:19.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:45:19.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:45:19.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:45:19.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:45:19.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:45:19.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:45:19.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.906013 -999.00   +8.60  20.66     71   +3.70 1 1 1 1 1     0    0 4.42 -21.35 ZNESW 19.7 20.7 157.7 33.0 9.1 -24.4 8.9 -23.4 8.7 -22.5 9.0 -23.7
2026-02-14T23:45:19.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:45:19.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:45:19.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.906013
2026-02-14T23:45:19.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:45:19.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:45:19.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:45:19.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:45:19.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:45:19.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:45:09', tmtdew=5.93, humidity=66.36, cloud=0.0, wind=29.2, temperature=8.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:45:09', seeing=2.37, atlas_timestamp='2026-02-14T21:44:39.523', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.04824999999999946, -0.031749999999998835, -0.009500000000000952, -0.03599999999999959, 0.029749999999999943, -0.018500000000001293, -0.0072499999999990905, 0.005499999999999616, 0.026500000000000412, -0.04224999999999923, 0.0039999999999995595, 0.0860000000000003, 0.034250000000000114, 0.04099999999999859, 0.0519999999999996, 0.06325000000000003, 0.057000000000000384, 0.016000000000000014, -0.0007500000000018048, 0.07099999999999795, 0.013249999999999318, 0.006250000000001421, 0.03625000000000078, 0.07699999999999996, 0.049000000000001265, 0.0017499999999994742, -0.010499999999998622, 0.08200000000000074, 0.0600000000000005, 0.058000000000001606, 0.08549999999999969, 0.02674999999999983], zp_timestamp='2026-02-14T21:43:00')
2026-02-14T23:45:19.106 [DEBUG] [Thread-194265] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:45:19.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-14T23:45:19.202 [DEBUG] [Thread-194268] [transport.py] [_log()] starting thread (client mode): 0xa2d79330
2026-02-14T23:45:19.202 [DEBUG] [Thread-194268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:45:19.217 [DEBUG] [Thread-194268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:45:19.217 [INFO] [Thread-194268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:45:19.224 [DEBUG] [Thread-194268] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:45:19.225 [DEBUG] [Thread-194268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:45:19.225 [DEBUG] [Thread-194268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:45:19.225 [DEBUG] [Thread-194268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:45:19.225 [DEBUG] [Thread-194268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:45:19.225 [DEBUG] [Thread-194268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:45:19.225 [DEBUG] [Thread-194268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:45:19.225 [DEBUG] [Thread-194268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:45:19.226 [DEBUG] [Thread-194268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:45:19.226 [DEBUG] [Thread-194268] [transport.py] [_log()] client lang: <none>
2026-02-14T23:45:19.226 [DEBUG] [Thread-194268] [transport.py] [_log()] server lang: <none>
2026-02-14T23:45:19.226 [DEBUG] [Thread-194268] [transport.py] [_log()] kex follows: False
2026-02-14T23:45:19.226 [DEBUG] [Thread-194268] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:45:19.226 [DEBUG] [Thread-194268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:45:19.226 [DEBUG] [Thread-194268] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:45:19.226 [DEBUG] [Thread-194268] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:45:19.227 [DEBUG] [Thread-194268] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:45:19.227 [DEBUG] [Thread-194268] [transport.py] [_log()] Compression: none
2026-02-14T23:45:19.227 [DEBUG] [Thread-194268] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:45:19.282 [DEBUG] [Thread-194268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:45:19.283 [DEBUG] [Thread-194268] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:45:19.283 [DEBUG] [Thread-194268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:45:19.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:45:19.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:45:19.338 [DEBUG] [Thread-194268] [transport.py] [_log()] userauth is OK
2026-02-14T23:45:19.339 [DEBUG] [Thread-194268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:45:19.339 [DEBUG] [Thread-194268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:45:19.339 [DEBUG] [Thread-194268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:45:19.339 [DEBUG] [Thread-194268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:45:19.358 [INFO] [Thread-194268] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:45:19.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-14T23:45:19.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:45:20.146 [DEBUG] [Thread-194268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:45:20.146 [DEBUG] [Thread-194268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:45:20.193 [DEBUG] [Thread-194268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:45:20.194 [DEBUG] [Thread-194268] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:45:20.203 [DEBUG] [Thread-194268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:45:20.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:45:20.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-14T23:45:20.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-14T23:45:20.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:45:20.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:45:20.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:45:20.240 [DEBUG] [Thread-194268] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:45:24.230 [DEBUG] [Thread-194270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:45:36.043 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:45:39.282 [DEBUG] [Thread-194271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:45:40.563 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:45:47.418 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:45:50.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:45:50.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:45:50.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-14T23:45:51.901 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:45:52.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 45, 44), 5.88, 66.36, 0.0, 29.63, 8.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:45:52.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:45:44
2026-02-14T23:45:52.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:45:52.557 [DEBUG] [Thread-194272] [transport.py] [_log()] starting thread (client mode): 0xa2d1a8c0
2026-02-14T23:45:52.557 [DEBUG] [Thread-194272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:45:52.577 [DEBUG] [Thread-194272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:45:52.577 [INFO] [Thread-194272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:45:52.578 [DEBUG] [Thread-194272] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:45:52.578 [DEBUG] [Thread-194272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:45:52.579 [DEBUG] [Thread-194272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:45:52.579 [DEBUG] [Thread-194272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:45:52.579 [DEBUG] [Thread-194272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:45:52.579 [DEBUG] [Thread-194272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:45:52.579 [DEBUG] [Thread-194272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:45:52.579 [DEBUG] [Thread-194272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:45:52.579 [DEBUG] [Thread-194272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:45:52.579 [DEBUG] [Thread-194272] [transport.py] [_log()] client lang: <none>
2026-02-14T23:45:52.579 [DEBUG] [Thread-194272] [transport.py] [_log()] server lang: <none>
2026-02-14T23:45:52.579 [DEBUG] [Thread-194272] [transport.py] [_log()] kex follows: False
2026-02-14T23:45:52.579 [DEBUG] [Thread-194272] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:45:52.579 [DEBUG] [Thread-194272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:45:52.579 [DEBUG] [Thread-194272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:45:52.579 [DEBUG] [Thread-194272] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:45:52.579 [DEBUG] [Thread-194272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:45:52.579 [DEBUG] [Thread-194272] [transport.py] [_log()] Compression: none
2026-02-14T23:45:52.579 [DEBUG] [Thread-194272] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:45:52.593 [DEBUG] [Thread-194272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:45:52.593 [DEBUG] [Thread-194272] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:45:52.594 [DEBUG] [Thread-194272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:45:52.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:45:52.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:45:52.596 [DEBUG] [Thread-194272] [transport.py] [_log()] userauth is OK
2026-02-14T23:45:52.596 [DEBUG] [Thread-194272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:45:52.597 [DEBUG] [Thread-194272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:45:52.597 [DEBUG] [Thread-194272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:45:52.597 [DEBUG] [Thread-194272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:45:52.622 [INFO] [Thread-194272] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:45:52.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:45:53.354 [DEBUG] [Thread-194272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:45:53.363 [DEBUG] [Thread-194272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:45:53.363 [DEBUG] [Thread-194272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:45:53.396 [DEBUG] [Thread-194272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:45:53.396 [DEBUG] [Thread-194272] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:45:53.399 [DEBUG] [Thread-194272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:45:53.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:45:53.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:45:53.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:45:53.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:45:53.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:45:53.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:45:53.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:45:53.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:45:53.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:45:53.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.906360 -999.00   +8.60  24.72     71   +3.70 1 1 1 1 1     0    0 4.49 -20.39 ZNESW 27.1 24.7 147.8 34.2 9.1 -24.4 8.9 -23.4 8.7 -22.5 9.1 -23.7
2026-02-14T23:45:53.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:45:53.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:45:53.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.906360
2026-02-14T23:45:53.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:45:53.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:45:53.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:45:53.419 [DEBUG] [Thread-194272] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:45:53.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:45:53.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:45:53.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:45:44', tmtdew=5.88, humidity=66.36, cloud=0.0, wind=29.63, temperature=8.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:45:45', seeing=2.49, atlas_timestamp='2026-02-14T21:45:09.504', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.04824999999999946, -0.031749999999998835, -0.009500000000000952, -0.03599999999999959, 0.029749999999999943, -0.018500000000001293, -0.0072499999999990905, 0.005499999999999616, 0.026500000000000412, -0.04224999999999923, 0.0039999999999995595, 0.0860000000000003, 0.034250000000000114, 0.04099999999999859, 0.0519999999999996, 0.06325000000000003, 0.057000000000000384, 0.016000000000000014, -0.0007500000000018048, 0.07099999999999795, 0.013249999999999318, 0.006250000000001421, 0.03625000000000078, 0.07699999999999996, 0.049000000000001265, 0.0017499999999994742, -0.010499999999998622, 0.08200000000000074, 0.0600000000000005, 0.058000000000001606, 0.08549999999999969, 0.02674999999999983], zp_timestamp='2026-02-14T21:43:00')
2026-02-14T23:45:53.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T23:45:53.518 [DEBUG] [Thread-194275] [transport.py] [_log()] starting thread (client mode): 0xa2d02a10
2026-02-14T23:45:53.518 [DEBUG] [Thread-194275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:45:53.533 [DEBUG] [Thread-194275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:45:53.534 [INFO] [Thread-194275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:45:53.541 [DEBUG] [Thread-194275] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:45:53.542 [DEBUG] [Thread-194275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:45:53.542 [DEBUG] [Thread-194275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:45:53.542 [DEBUG] [Thread-194275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:45:53.542 [DEBUG] [Thread-194275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:45:53.542 [DEBUG] [Thread-194275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:45:53.542 [DEBUG] [Thread-194275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:45:53.542 [DEBUG] [Thread-194275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:45:53.543 [DEBUG] [Thread-194275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:45:53.543 [DEBUG] [Thread-194275] [transport.py] [_log()] client lang: <none>
2026-02-14T23:45:53.543 [DEBUG] [Thread-194275] [transport.py] [_log()] server lang: <none>
2026-02-14T23:45:53.543 [DEBUG] [Thread-194275] [transport.py] [_log()] kex follows: False
2026-02-14T23:45:53.543 [DEBUG] [Thread-194275] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:45:53.543 [DEBUG] [Thread-194275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:45:53.543 [DEBUG] [Thread-194275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:45:53.543 [DEBUG] [Thread-194275] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:45:53.544 [DEBUG] [Thread-194275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:45:53.544 [DEBUG] [Thread-194275] [transport.py] [_log()] Compression: none
2026-02-14T23:45:53.544 [DEBUG] [Thread-194275] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:45:53.605 [DEBUG] [Thread-194275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:45:53.606 [DEBUG] [Thread-194275] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:45:53.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:45:53.607 [DEBUG] [Thread-194275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:45:53.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:45:53.664 [DEBUG] [Thread-194275] [transport.py] [_log()] userauth is OK
2026-02-14T23:45:53.665 [DEBUG] [Thread-194275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:45:53.665 [DEBUG] [Thread-194275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:45:53.665 [DEBUG] [Thread-194275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:45:53.665 [DEBUG] [Thread-194275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:45:53.684 [INFO] [Thread-194275] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:45:53.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-14T23:45:53.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:45:54.321 [DEBUG] [Thread-194277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:45:54.498 [DEBUG] [Thread-194275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:45:54.498 [DEBUG] [Thread-194275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:45:54.546 [DEBUG] [Thread-194275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:45:54.547 [DEBUG] [Thread-194275] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:45:54.556 [DEBUG] [Thread-194275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:45:54.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:45:54.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-14T23:45:54.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-14T23:45:54.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:45:54.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:45:54.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:45:54.597 [DEBUG] [Thread-194275] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:46:06.247 [DEBUG] [Thread-194278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:46:09.374 [DEBUG] [Thread-194279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:46:11.266 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:46:11.267 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:46:24.408 [DEBUG] [Thread-194280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:46:24.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:46:24.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:46:24.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-14T23:46:26.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 45, 44), 5.88, 66.36, 0.0, 29.63, 8.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:46:26.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:45:44
2026-02-14T23:46:26.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:46:26.992 [DEBUG] [Thread-194281] [transport.py] [_log()] starting thread (client mode): 0xa2d6af20
2026-02-14T23:46:26.992 [DEBUG] [Thread-194281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:46:27.011 [DEBUG] [Thread-194281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:46:27.011 [INFO] [Thread-194281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:46:27.014 [DEBUG] [Thread-194281] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:46:27.015 [DEBUG] [Thread-194281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:46:27.015 [DEBUG] [Thread-194281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:46:27.015 [DEBUG] [Thread-194281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:46:27.015 [DEBUG] [Thread-194281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:46:27.015 [DEBUG] [Thread-194281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:46:27.015 [DEBUG] [Thread-194281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:46:27.015 [DEBUG] [Thread-194281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:46:27.015 [DEBUG] [Thread-194281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:46:27.015 [DEBUG] [Thread-194281] [transport.py] [_log()] client lang: <none>
2026-02-14T23:46:27.015 [DEBUG] [Thread-194281] [transport.py] [_log()] server lang: <none>
2026-02-14T23:46:27.015 [DEBUG] [Thread-194281] [transport.py] [_log()] kex follows: False
2026-02-14T23:46:27.015 [DEBUG] [Thread-194281] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:46:27.015 [DEBUG] [Thread-194281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:46:27.015 [DEBUG] [Thread-194281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:46:27.015 [DEBUG] [Thread-194281] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:46:27.015 [DEBUG] [Thread-194281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:46:27.015 [DEBUG] [Thread-194281] [transport.py] [_log()] Compression: none
2026-02-14T23:46:27.015 [DEBUG] [Thread-194281] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:46:27.032 [DEBUG] [Thread-194281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:46:27.032 [DEBUG] [Thread-194281] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:46:27.033 [DEBUG] [Thread-194281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:46:27.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:46:27.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:46:27.077 [DEBUG] [Thread-194281] [transport.py] [_log()] userauth is OK
2026-02-14T23:46:27.078 [DEBUG] [Thread-194281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:46:27.078 [DEBUG] [Thread-194281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:46:27.078 [DEBUG] [Thread-194281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:46:27.078 [DEBUG] [Thread-194281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:46:27.099 [INFO] [Thread-194281] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:46:27.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:46:27.724 [DEBUG] [Thread-194281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:46:27.725 [DEBUG] [Thread-194281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:46:27.725 [DEBUG] [Thread-194281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:46:27.765 [DEBUG] [Thread-194281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:46:27.766 [DEBUG] [Thread-194281] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:46:27.769 [DEBUG] [Thread-194281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:46:27.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:46:27.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:46:27.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:46:27.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:46:27.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:46:27.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:46:27.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:46:27.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:46:27.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:46:27.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.906708 -999.00   +8.60  27.93     71   +3.80 1 1 1 1 1     0    0 4.48 -19.87 ZNESW 19.4 27.9 152.2 32.9 9.1 -24.5 8.9 -23.4 8.7 -22.4 9.1 -23.7
2026-02-14T23:46:27.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:46:27.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:46:27.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.906708
2026-02-14T23:46:27.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:46:27.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:46:27.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:46:27.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:46:27.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:46:27.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:45:44', tmtdew=5.88, humidity=66.36, cloud=0.0, wind=29.63, temperature=8.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:46:20', seeing=2.64, atlas_timestamp='2026-02-14T21:45:39.571', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.04824999999999946, -0.031749999999998835, -0.009500000000000952, -0.03599999999999959, 0.029749999999999943, -0.018500000000001293, -0.0072499999999990905, 0.005499999999999616, 0.026500000000000412, -0.04224999999999923, 0.0039999999999995595, 0.0860000000000003, 0.034250000000000114, 0.04099999999999859, 0.0519999999999996, 0.06325000000000003, 0.057000000000000384, 0.016000000000000014, -0.0007500000000018048, 0.07099999999999795, 0.013249999999999318, 0.006250000000001421, 0.03625000000000078, 0.07699999999999996, 0.049000000000001265, 0.0017499999999994742, -0.010499999999998622, 0.08200000000000074, 0.0600000000000005, 0.058000000000001606, 0.08549999999999969, 0.02674999999999983], zp_timestamp='2026-02-14T21:43:00')
2026-02-14T23:46:27.795 [DEBUG] [Thread-194281] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:46:27.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-14T23:46:27.893 [DEBUG] [Thread-194284] [transport.py] [_log()] starting thread (client mode): 0xa2d19b10
2026-02-14T23:46:27.893 [DEBUG] [Thread-194284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:46:27.907 [DEBUG] [Thread-194284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:46:27.908 [INFO] [Thread-194284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:46:27.917 [DEBUG] [Thread-194284] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:46:27.917 [DEBUG] [Thread-194284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:46:27.917 [DEBUG] [Thread-194284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:46:27.918 [DEBUG] [Thread-194284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:46:27.918 [DEBUG] [Thread-194284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:46:27.918 [DEBUG] [Thread-194284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:46:27.918 [DEBUG] [Thread-194284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:46:27.918 [DEBUG] [Thread-194284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:46:27.918 [DEBUG] [Thread-194284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:46:27.918 [DEBUG] [Thread-194284] [transport.py] [_log()] client lang: <none>
2026-02-14T23:46:27.918 [DEBUG] [Thread-194284] [transport.py] [_log()] server lang: <none>
2026-02-14T23:46:27.918 [DEBUG] [Thread-194284] [transport.py] [_log()] kex follows: False
2026-02-14T23:46:27.918 [DEBUG] [Thread-194284] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:46:27.918 [DEBUG] [Thread-194284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:46:27.919 [DEBUG] [Thread-194284] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:46:27.919 [DEBUG] [Thread-194284] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:46:27.919 [DEBUG] [Thread-194284] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:46:27.919 [DEBUG] [Thread-194284] [transport.py] [_log()] Compression: none
2026-02-14T23:46:27.919 [DEBUG] [Thread-194284] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:46:27.975 [DEBUG] [Thread-194284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:46:27.976 [DEBUG] [Thread-194284] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:46:27.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:46:27.977 [DEBUG] [Thread-194284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:46:27.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:46:28.032 [DEBUG] [Thread-194284] [transport.py] [_log()] userauth is OK
2026-02-14T23:46:28.032 [DEBUG] [Thread-194284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:46:28.032 [DEBUG] [Thread-194284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:46:28.032 [DEBUG] [Thread-194284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:46:28.032 [DEBUG] [Thread-194284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:46:28.051 [INFO] [Thread-194284] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:46:28.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-14T23:46:28.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:46:28.876 [DEBUG] [Thread-194284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:46:28.876 [DEBUG] [Thread-194284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:46:28.924 [DEBUG] [Thread-194284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:46:28.925 [DEBUG] [Thread-194284] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:46:28.934 [DEBUG] [Thread-194284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:46:28.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:46:28.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-14T23:46:28.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:46:28.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:46:28.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:46:28.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:46:28.971 [DEBUG] [Thread-194284] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:46:39.442 [DEBUG] [Thread-194286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:46:51.359 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:46:54.432 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:46:54.497 [DEBUG] [Thread-194287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:46:58.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:46:58.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:46:59.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:47:01.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 46, 19), 5.88, 66.37, 0.0, 30.47, 8.72, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:47:01.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:46:19
2026-02-14T23:47:01.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:47:01.789 [DEBUG] [Thread-194288] [transport.py] [_log()] starting thread (client mode): 0xa2d6b4f0
2026-02-14T23:47:01.790 [DEBUG] [Thread-194288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:47:01.809 [DEBUG] [Thread-194288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:47:01.809 [INFO] [Thread-194288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:47:01.812 [DEBUG] [Thread-194288] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:47:01.813 [DEBUG] [Thread-194288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:47:01.813 [DEBUG] [Thread-194288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:47:01.813 [DEBUG] [Thread-194288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:47:01.813 [DEBUG] [Thread-194288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:47:01.813 [DEBUG] [Thread-194288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:47:01.813 [DEBUG] [Thread-194288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:47:01.813 [DEBUG] [Thread-194288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:47:01.813 [DEBUG] [Thread-194288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:47:01.813 [DEBUG] [Thread-194288] [transport.py] [_log()] client lang: <none>
2026-02-14T23:47:01.813 [DEBUG] [Thread-194288] [transport.py] [_log()] server lang: <none>
2026-02-14T23:47:01.813 [DEBUG] [Thread-194288] [transport.py] [_log()] kex follows: False
2026-02-14T23:47:01.813 [DEBUG] [Thread-194288] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:47:01.813 [DEBUG] [Thread-194288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:47:01.814 [DEBUG] [Thread-194288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:47:01.814 [DEBUG] [Thread-194288] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:47:01.814 [DEBUG] [Thread-194288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:47:01.814 [DEBUG] [Thread-194288] [transport.py] [_log()] Compression: none
2026-02-14T23:47:01.814 [DEBUG] [Thread-194288] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:47:01.834 [DEBUG] [Thread-194288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:47:01.834 [DEBUG] [Thread-194288] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:47:01.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:47:01.836 [DEBUG] [Thread-194288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:47:01.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:47:01.838 [DEBUG] [Thread-194288] [transport.py] [_log()] userauth is OK
2026-02-14T23:47:01.838 [DEBUG] [Thread-194288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:47:01.838 [DEBUG] [Thread-194288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:47:01.838 [DEBUG] [Thread-194288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:47:01.839 [DEBUG] [Thread-194288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:47:01.870 [INFO] [Thread-194288] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:47:01.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:47:02.497 [DEBUG] [Thread-194288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:47:02.498 [DEBUG] [Thread-194288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:47:02.498 [DEBUG] [Thread-194288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:47:02.538 [DEBUG] [Thread-194288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:47:02.539 [DEBUG] [Thread-194288] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:47:02.542 [DEBUG] [Thread-194288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:47:02.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:47:02.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:47:02.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:47:02.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:47:02.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:47:02.562 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:47:02.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:47:02.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:47:02.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:47:02.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.907055 -999.00   +8.60  28.79     71   +3.80 1 1 1 1 1     0    0 4.44 -20.89 ZNESW 26.4 28.8 161.0 35.9 9.1 -24.3 8.9 -23.4 8.7 -22.2 9.1 -23.5
2026-02-14T23:47:02.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:47:02.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:47:02.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.907055
2026-02-14T23:47:02.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:47:02.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:47:02.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:47:02.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:47:02.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:47:02.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:46:19', tmtdew=5.88, humidity=66.37, cloud=0.0, wind=30.47, temperature=8.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:46:55', seeing=2.64, atlas_timestamp='2026-02-14T21:46:09.552', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.04824999999999946, -0.031749999999998835, -0.009500000000000952, -0.03599999999999959, 0.029749999999999943, -0.018500000000001293, -0.0072499999999990905, 0.005499999999999616, 0.026500000000000412, -0.04224999999999923, 0.0039999999999995595, 0.0860000000000003, 0.034250000000000114, 0.04099999999999859, 0.0519999999999996, 0.06325000000000003, 0.057000000000000384, 0.016000000000000014, -0.0007500000000018048, 0.07099999999999795, 0.013249999999999318, 0.006250000000001421, 0.03625000000000078, 0.07699999999999996, 0.049000000000001265, 0.0017499999999994742, -0.010499999999998622, 0.08200000000000074, 0.0600000000000005, 0.058000000000001606, 0.08549999999999969, 0.02674999999999983], zp_timestamp='2026-02-14T21:43:00')
2026-02-14T23:47:02.565 [DEBUG] [Thread-194288] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:47:02.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-14T23:47:02.662 [DEBUG] [Thread-194291] [transport.py] [_log()] starting thread (client mode): 0xa57d6b30
2026-02-14T23:47:02.663 [DEBUG] [Thread-194291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:47:02.677 [DEBUG] [Thread-194291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:47:02.677 [INFO] [Thread-194291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:47:02.685 [DEBUG] [Thread-194291] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:47:02.685 [DEBUG] [Thread-194291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:47:02.685 [DEBUG] [Thread-194291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:47:02.685 [DEBUG] [Thread-194291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:47:02.685 [DEBUG] [Thread-194291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:47:02.686 [DEBUG] [Thread-194291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:47:02.686 [DEBUG] [Thread-194291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:47:02.686 [DEBUG] [Thread-194291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:47:02.686 [DEBUG] [Thread-194291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:47:02.686 [DEBUG] [Thread-194291] [transport.py] [_log()] client lang: <none>
2026-02-14T23:47:02.686 [DEBUG] [Thread-194291] [transport.py] [_log()] server lang: <none>
2026-02-14T23:47:02.686 [DEBUG] [Thread-194291] [transport.py] [_log()] kex follows: False
2026-02-14T23:47:02.686 [DEBUG] [Thread-194291] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:47:02.686 [DEBUG] [Thread-194291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:47:02.686 [DEBUG] [Thread-194291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:47:02.686 [DEBUG] [Thread-194291] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:47:02.686 [DEBUG] [Thread-194291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:47:02.686 [DEBUG] [Thread-194291] [transport.py] [_log()] Compression: none
2026-02-14T23:47:02.686 [DEBUG] [Thread-194291] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:47:02.744 [DEBUG] [Thread-194291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:47:02.744 [DEBUG] [Thread-194291] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:47:02.745 [DEBUG] [Thread-194291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:47:02.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:47:02.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:47:02.799 [DEBUG] [Thread-194291] [transport.py] [_log()] userauth is OK
2026-02-14T23:47:02.800 [DEBUG] [Thread-194291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:47:02.800 [DEBUG] [Thread-194291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:47:02.800 [DEBUG] [Thread-194291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:47:02.800 [DEBUG] [Thread-194291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:47:02.825 [INFO] [Thread-194291] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:47:02.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-14T23:47:02.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:47:03.610 [DEBUG] [Thread-194291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:47:03.611 [DEBUG] [Thread-194291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:47:03.658 [DEBUG] [Thread-194291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:47:03.659 [DEBUG] [Thread-194291] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:47:03.669 [DEBUG] [Thread-194291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:47:03.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:47:03.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-14T23:47:03.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-14T23:47:03.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:47:03.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:47:03.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:47:03.706 [DEBUG] [Thread-194291] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:47:06.314 [DEBUG] [Thread-194293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:47:09.529 [DEBUG] [Thread-194294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:47:11.475 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:47:11.477 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:47:24.580 [DEBUG] [Thread-194295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:47:33.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:47:33.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:47:33.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-14T23:47:35.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 46, 54), 5.86, 66.47, 0.0, 28.12, 8.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:47:35.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:46:54
2026-02-14T23:47:36.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:47:36.364 [DEBUG] [Thread-194296] [transport.py] [_log()] starting thread (client mode): 0xa57d5960
2026-02-14T23:47:36.364 [DEBUG] [Thread-194296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:47:36.385 [DEBUG] [Thread-194296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:47:36.385 [INFO] [Thread-194296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:47:36.387 [DEBUG] [Thread-194296] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:47:36.388 [DEBUG] [Thread-194296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:47:36.388 [DEBUG] [Thread-194296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:47:36.388 [DEBUG] [Thread-194296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:47:36.388 [DEBUG] [Thread-194296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:47:36.388 [DEBUG] [Thread-194296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:47:36.388 [DEBUG] [Thread-194296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:47:36.388 [DEBUG] [Thread-194296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:47:36.388 [DEBUG] [Thread-194296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:47:36.388 [DEBUG] [Thread-194296] [transport.py] [_log()] client lang: <none>
2026-02-14T23:47:36.388 [DEBUG] [Thread-194296] [transport.py] [_log()] server lang: <none>
2026-02-14T23:47:36.388 [DEBUG] [Thread-194296] [transport.py] [_log()] kex follows: False
2026-02-14T23:47:36.388 [DEBUG] [Thread-194296] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:47:36.388 [DEBUG] [Thread-194296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:47:36.388 [DEBUG] [Thread-194296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:47:36.388 [DEBUG] [Thread-194296] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:47:36.388 [DEBUG] [Thread-194296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:47:36.388 [DEBUG] [Thread-194296] [transport.py] [_log()] Compression: none
2026-02-14T23:47:36.388 [DEBUG] [Thread-194296] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:47:36.407 [DEBUG] [Thread-194296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:47:36.407 [DEBUG] [Thread-194296] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:47:36.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:47:36.408 [DEBUG] [Thread-194296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:47:36.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:47:36.410 [DEBUG] [Thread-194296] [transport.py] [_log()] userauth is OK
2026-02-14T23:47:36.410 [DEBUG] [Thread-194296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:47:36.410 [DEBUG] [Thread-194296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:47:36.411 [DEBUG] [Thread-194296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:47:36.411 [DEBUG] [Thread-194296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:47:36.434 [INFO] [Thread-194296] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:47:36.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:47:37.058 [DEBUG] [Thread-194296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:47:37.058 [DEBUG] [Thread-194296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:47:37.059 [DEBUG] [Thread-194296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:47:37.099 [DEBUG] [Thread-194296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:47:37.100 [DEBUG] [Thread-194296] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:47:37.103 [DEBUG] [Thread-194296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:47:37.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:47:37.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:47:37.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:47:37.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:47:37.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:47:37.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:47:37.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:47:37.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:47:37.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:47:37.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.907402 -999.00   +8.60  23.44     71   +3.80 1 1 1 1 1     0    0 4.45 -19.98 ZNESW 17.5 23.4 167.2 38.4 9.1 -24.4 8.9 -23.4 8.7 -22.4 9.1 -23.6
2026-02-14T23:47:37.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:47:37.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:47:37.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.907402
2026-02-14T23:47:37.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:47:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:47:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:47:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:47:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:47:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:46:54', tmtdew=5.86, humidity=66.47, cloud=0.0, wind=28.12, temperature=8.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:47:30', seeing=2.43, atlas_timestamp='2026-02-14T21:46:39.533', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.04824999999999946, -0.031749999999998835, -0.009500000000000952, -0.03599999999999959, 0.029749999999999943, -0.018500000000001293, -0.0072499999999990905, 0.005499999999999616, 0.026500000000000412, -0.04224999999999923, 0.0039999999999995595, 0.0860000000000003, 0.034250000000000114, 0.04099999999999859, 0.0519999999999996, 0.06325000000000003, 0.057000000000000384, 0.016000000000000014, -0.0007500000000018048, 0.07099999999999795, 0.013249999999999318, 0.006250000000001421, 0.03625000000000078, 0.07699999999999996, 0.049000000000001265, 0.0017499999999994742, -0.010499999999998622, 0.08200000000000074, 0.0600000000000005, 0.058000000000001606, 0.08549999999999969, 0.02674999999999983], zp_timestamp='2026-02-14T21:43:00')
2026-02-14T23:47:37.131 [DEBUG] [Thread-194296] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:47:37.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T23:47:37.228 [DEBUG] [Thread-194299] [transport.py] [_log()] starting thread (client mode): 0xa2d11270
2026-02-14T23:47:37.229 [DEBUG] [Thread-194299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:47:37.244 [DEBUG] [Thread-194299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:47:37.244 [INFO] [Thread-194299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:47:37.254 [DEBUG] [Thread-194299] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:47:37.254 [DEBUG] [Thread-194299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:47:37.254 [DEBUG] [Thread-194299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:47:37.254 [DEBUG] [Thread-194299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:47:37.254 [DEBUG] [Thread-194299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:47:37.254 [DEBUG] [Thread-194299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:47:37.255 [DEBUG] [Thread-194299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:47:37.255 [DEBUG] [Thread-194299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:47:37.255 [DEBUG] [Thread-194299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:47:37.255 [DEBUG] [Thread-194299] [transport.py] [_log()] client lang: <none>
2026-02-14T23:47:37.255 [DEBUG] [Thread-194299] [transport.py] [_log()] server lang: <none>
2026-02-14T23:47:37.255 [DEBUG] [Thread-194299] [transport.py] [_log()] kex follows: False
2026-02-14T23:47:37.256 [DEBUG] [Thread-194299] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:47:37.256 [DEBUG] [Thread-194299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:47:37.256 [DEBUG] [Thread-194299] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:47:37.256 [DEBUG] [Thread-194299] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:47:37.256 [DEBUG] [Thread-194299] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:47:37.256 [DEBUG] [Thread-194299] [transport.py] [_log()] Compression: none
2026-02-14T23:47:37.256 [DEBUG] [Thread-194299] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:47:37.312 [DEBUG] [Thread-194299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:47:37.313 [DEBUG] [Thread-194299] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:47:37.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:47:37.314 [DEBUG] [Thread-194299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:47:37.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:47:37.372 [DEBUG] [Thread-194299] [transport.py] [_log()] userauth is OK
2026-02-14T23:47:37.373 [DEBUG] [Thread-194299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:47:37.373 [DEBUG] [Thread-194299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:47:37.373 [DEBUG] [Thread-194299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:47:37.373 [DEBUG] [Thread-194299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:47:37.392 [INFO] [Thread-194299] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:47:37.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-14T23:47:37.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:47:38.207 [DEBUG] [Thread-194299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:47:38.207 [DEBUG] [Thread-194299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:47:38.258 [DEBUG] [Thread-194299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:47:38.258 [DEBUG] [Thread-194299] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:47:38.270 [DEBUG] [Thread-194299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:47:38.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:47:38.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-14T23:47:38.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:47:38.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:47:38.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:47:38.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:47:38.316 [DEBUG] [Thread-194299] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:47:39.614 [DEBUG] [Thread-194301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:47:54.666 [DEBUG] [Thread-194302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:48:06.370 [DEBUG] [Thread-194303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:48:08.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:48:08.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:48:08.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:48:09.704 [DEBUG] [Thread-194304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:48:10.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 47, 30), 5.86, 66.47, 0.0, 30.42, 8.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:48:10.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:47:30
2026-02-14T23:48:10.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:48:10.976 [DEBUG] [Thread-194305] [transport.py] [_log()] starting thread (client mode): 0xa2d7b0d0
2026-02-14T23:48:10.976 [DEBUG] [Thread-194305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:48:10.995 [DEBUG] [Thread-194305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:48:10.995 [INFO] [Thread-194305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:48:10.998 [DEBUG] [Thread-194305] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:48:10.998 [DEBUG] [Thread-194305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:48:10.999 [DEBUG] [Thread-194305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:48:10.999 [DEBUG] [Thread-194305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:48:10.999 [DEBUG] [Thread-194305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:48:10.999 [DEBUG] [Thread-194305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:48:10.999 [DEBUG] [Thread-194305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:48:10.999 [DEBUG] [Thread-194305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:48:10.999 [DEBUG] [Thread-194305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:48:10.999 [DEBUG] [Thread-194305] [transport.py] [_log()] client lang: <none>
2026-02-14T23:48:10.999 [DEBUG] [Thread-194305] [transport.py] [_log()] server lang: <none>
2026-02-14T23:48:10.999 [DEBUG] [Thread-194305] [transport.py] [_log()] kex follows: False
2026-02-14T23:48:10.999 [DEBUG] [Thread-194305] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:48:10.999 [DEBUG] [Thread-194305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:48:10.999 [DEBUG] [Thread-194305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:48:10.999 [DEBUG] [Thread-194305] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:48:10.999 [DEBUG] [Thread-194305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:48:10.999 [DEBUG] [Thread-194305] [transport.py] [_log()] Compression: none
2026-02-14T23:48:10.999 [DEBUG] [Thread-194305] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:48:11.016 [DEBUG] [Thread-194305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:48:11.016 [DEBUG] [Thread-194305] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:48:11.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:48:11.017 [DEBUG] [Thread-194305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:48:11.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:48:11.019 [DEBUG] [Thread-194305] [transport.py] [_log()] userauth is OK
2026-02-14T23:48:11.019 [DEBUG] [Thread-194305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:48:11.020 [DEBUG] [Thread-194305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:48:11.020 [DEBUG] [Thread-194305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:48:11.020 [DEBUG] [Thread-194305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:48:11.037 [INFO] [Thread-194305] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:48:11.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:48:11.672 [DEBUG] [Thread-194305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:48:11.673 [DEBUG] [Thread-194305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:48:11.673 [DEBUG] [Thread-194305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:48:11.682 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:48:11.683 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:48:11.713 [DEBUG] [Thread-194305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:48:11.714 [DEBUG] [Thread-194305] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:48:11.717 [DEBUG] [Thread-194305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:48:11.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:48:11.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:48:11.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:48:11.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:48:11.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:48:11.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:48:11.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:48:11.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:48:11.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:48:11.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.907749 -999.00   +8.60  27.48     71   +3.70 1 1 1 1 1     0    0 4.40 -20.21 ZNESW 21.3 27.5 160.4 33.3 9.1 -24.3 8.8 -23.3 8.7 -22.4 9.1 -23.8
2026-02-14T23:48:11.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:48:11.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:48:11.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.907749
2026-02-14T23:48:11.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:48:11.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:48:11.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:48:11.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:48:11.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:48:11.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:47:30', tmtdew=5.86, humidity=66.47, cloud=0.0, wind=30.42, temperature=8.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:48:06', seeing=2.51, atlas_timestamp='2026-02-14T21:47:09.514', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.007749999999999702, -0.013249999999999318, -0.010500000000000398, 0.0045000000000001705, 0.047250000000000014, 0.0034999999999989484, 0.02224999999999966, 0.02949999999999875, 0.04400000000000048, -0.023749999999999716, 0.031000000000000583, 0.09399999999999942, 0.051750000000000185, 0.04699999999999882, 0.04099999999999859, 0.09025000000000105, 0.07099999999999973, 0.032999999999999474, 0.02424999999999855, 0.04949999999999832, 0.009749999999998593, 0.035250000000001336, 0.059749999999999304, 0.07899999999999885, 0.02999999999999936, 0.016750000000000043, 0.0235000000000003, 0.08200000000000074, 0.04200000000000159, 0.05000000000000071, 0.11150000000000126, 0.035749999999998394], zp_timestamp='2026-02-14T21:45:00')
2026-02-14T23:48:11.744 [DEBUG] [Thread-194305] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:48:11.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-14T23:48:11.840 [DEBUG] [Thread-194308] [transport.py] [_log()] starting thread (client mode): 0xa57c26e0
2026-02-14T23:48:11.840 [DEBUG] [Thread-194308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:48:11.855 [DEBUG] [Thread-194308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:48:11.856 [INFO] [Thread-194308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:48:11.863 [DEBUG] [Thread-194308] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:48:11.863 [DEBUG] [Thread-194308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:48:11.863 [DEBUG] [Thread-194308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:48:11.863 [DEBUG] [Thread-194308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:48:11.864 [DEBUG] [Thread-194308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:48:11.864 [DEBUG] [Thread-194308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:48:11.864 [DEBUG] [Thread-194308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:48:11.864 [DEBUG] [Thread-194308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:48:11.864 [DEBUG] [Thread-194308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:48:11.864 [DEBUG] [Thread-194308] [transport.py] [_log()] client lang: <none>
2026-02-14T23:48:11.864 [DEBUG] [Thread-194308] [transport.py] [_log()] server lang: <none>
2026-02-14T23:48:11.864 [DEBUG] [Thread-194308] [transport.py] [_log()] kex follows: False
2026-02-14T23:48:11.864 [DEBUG] [Thread-194308] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:48:11.864 [DEBUG] [Thread-194308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:48:11.864 [DEBUG] [Thread-194308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:48:11.864 [DEBUG] [Thread-194308] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:48:11.864 [DEBUG] [Thread-194308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:48:11.864 [DEBUG] [Thread-194308] [transport.py] [_log()] Compression: none
2026-02-14T23:48:11.864 [DEBUG] [Thread-194308] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:48:11.922 [DEBUG] [Thread-194308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:48:11.923 [DEBUG] [Thread-194308] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:48:11.924 [DEBUG] [Thread-194308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:48:11.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:48:11.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:48:11.980 [DEBUG] [Thread-194308] [transport.py] [_log()] userauth is OK
2026-02-14T23:48:11.980 [DEBUG] [Thread-194308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:48:11.980 [DEBUG] [Thread-194308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:48:11.980 [DEBUG] [Thread-194308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:48:11.980 [DEBUG] [Thread-194308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:48:11.998 [INFO] [Thread-194308] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:48:11.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-14T23:48:11.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:48:12.848 [DEBUG] [Thread-194308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:48:12.848 [DEBUG] [Thread-194308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:48:12.896 [DEBUG] [Thread-194308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:48:12.896 [DEBUG] [Thread-194308] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:48:12.905 [DEBUG] [Thread-194308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:48:12.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:48:12.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-14T23:48:12.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-14T23:48:12.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:48:12.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:48:12.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:48:12.938 [DEBUG] [Thread-194308] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:48:19.094 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:48:23.904 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:48:24.742 [DEBUG] [Thread-194310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:48:26.976 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:48:33.454 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:48:39.796 [DEBUG] [Thread-194311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:48:42.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:48:42.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:48:42.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-14T23:48:44.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 48, 6), 5.82, 66.64, 0.0, 30.15, 8.64, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:48:44.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:48:06
2026-02-14T23:48:45.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:48:45.305 [DEBUG] [Thread-194312] [transport.py] [_log()] starting thread (client mode): 0xa2d6b6d0
2026-02-14T23:48:45.305 [DEBUG] [Thread-194312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:48:45.325 [DEBUG] [Thread-194312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:48:45.325 [INFO] [Thread-194312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:48:45.328 [DEBUG] [Thread-194312] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:48:45.328 [DEBUG] [Thread-194312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:48:45.328 [DEBUG] [Thread-194312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:48:45.328 [DEBUG] [Thread-194312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:48:45.328 [DEBUG] [Thread-194312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:48:45.328 [DEBUG] [Thread-194312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:48:45.328 [DEBUG] [Thread-194312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:48:45.328 [DEBUG] [Thread-194312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:48:45.328 [DEBUG] [Thread-194312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:48:45.328 [DEBUG] [Thread-194312] [transport.py] [_log()] client lang: <none>
2026-02-14T23:48:45.329 [DEBUG] [Thread-194312] [transport.py] [_log()] server lang: <none>
2026-02-14T23:48:45.329 [DEBUG] [Thread-194312] [transport.py] [_log()] kex follows: False
2026-02-14T23:48:45.329 [DEBUG] [Thread-194312] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:48:45.329 [DEBUG] [Thread-194312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:48:45.329 [DEBUG] [Thread-194312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:48:45.329 [DEBUG] [Thread-194312] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:48:45.329 [DEBUG] [Thread-194312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:48:45.329 [DEBUG] [Thread-194312] [transport.py] [_log()] Compression: none
2026-02-14T23:48:45.329 [DEBUG] [Thread-194312] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:48:45.347 [DEBUG] [Thread-194312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:48:45.348 [DEBUG] [Thread-194312] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:48:45.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:48:45.349 [DEBUG] [Thread-194312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:48:45.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:48:45.351 [DEBUG] [Thread-194312] [transport.py] [_log()] userauth is OK
2026-02-14T23:48:45.352 [DEBUG] [Thread-194312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:48:45.352 [DEBUG] [Thread-194312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:48:45.352 [DEBUG] [Thread-194312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:48:45.352 [DEBUG] [Thread-194312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:48:45.376 [INFO] [Thread-194312] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:48:45.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:48:45.972 [DEBUG] [Thread-194312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:48:45.972 [DEBUG] [Thread-194312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:48:45.973 [DEBUG] [Thread-194312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:48:46.013 [DEBUG] [Thread-194312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:48:46.013 [DEBUG] [Thread-194312] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:48:46.016 [DEBUG] [Thread-194312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:48:46.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:48:46.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:48:46.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:48:46.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:48:46.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:48:46.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:48:46.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:48:46.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:48:46.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:48:46.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.908444 -999.00   +8.60  21.06     71   +3.70 1 1 1 1 1     0    0 4.49 -18.69 ZNESW 21.0 21.1 159.4 32.5 9.1 -24.5 8.9 -23.4 8.7 -22.5 9.0 -23.8
2026-02-14T23:48:46.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:48:46.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:48:46.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.908444
2026-02-14T23:48:46.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:48:46.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:48:46.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:48:46.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:48:46.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:48:46.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:48:06', tmtdew=5.82, humidity=66.64, cloud=0.0, wind=30.15, temperature=8.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:48:41', seeing=2.29, atlas_timestamp='2026-02-14T21:48:09.562', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.007749999999999702, -0.013249999999999318, -0.010500000000000398, 0.0045000000000001705, 0.047250000000000014, 0.0034999999999989484, 0.02224999999999966, 0.02949999999999875, 0.04400000000000048, -0.023749999999999716, 0.031000000000000583, 0.09399999999999942, 0.051750000000000185, 0.04699999999999882, 0.04099999999999859, 0.09025000000000105, 0.07099999999999973, 0.032999999999999474, 0.02424999999999855, 0.04949999999999832, 0.009749999999998593, 0.035250000000001336, 0.059749999999999304, 0.07899999999999885, 0.02999999999999936, 0.016750000000000043, 0.0235000000000003, 0.08200000000000074, 0.04200000000000159, 0.05000000000000071, 0.11150000000000126, 0.035749999999998394], zp_timestamp='2026-02-14T21:45:00')
2026-02-14T23:48:46.032 [DEBUG] [Thread-194312] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:48:46.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-14T23:48:46.128 [DEBUG] [Thread-194315] [transport.py] [_log()] starting thread (client mode): 0xa2d68d90
2026-02-14T23:48:46.128 [DEBUG] [Thread-194315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:48:46.143 [DEBUG] [Thread-194315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:48:46.143 [INFO] [Thread-194315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:48:46.150 [DEBUG] [Thread-194315] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:48:46.150 [DEBUG] [Thread-194315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:48:46.150 [DEBUG] [Thread-194315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:48:46.150 [DEBUG] [Thread-194315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:48:46.150 [DEBUG] [Thread-194315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:48:46.150 [DEBUG] [Thread-194315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:48:46.150 [DEBUG] [Thread-194315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:48:46.150 [DEBUG] [Thread-194315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:48:46.150 [DEBUG] [Thread-194315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:48:46.150 [DEBUG] [Thread-194315] [transport.py] [_log()] client lang: <none>
2026-02-14T23:48:46.150 [DEBUG] [Thread-194315] [transport.py] [_log()] server lang: <none>
2026-02-14T23:48:46.150 [DEBUG] [Thread-194315] [transport.py] [_log()] kex follows: False
2026-02-14T23:48:46.150 [DEBUG] [Thread-194315] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:48:46.151 [DEBUG] [Thread-194315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:48:46.151 [DEBUG] [Thread-194315] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:48:46.151 [DEBUG] [Thread-194315] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:48:46.151 [DEBUG] [Thread-194315] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:48:46.151 [DEBUG] [Thread-194315] [transport.py] [_log()] Compression: none
2026-02-14T23:48:46.151 [DEBUG] [Thread-194315] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:48:46.206 [DEBUG] [Thread-194315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:48:46.207 [DEBUG] [Thread-194315] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:48:46.207 [DEBUG] [Thread-194315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:48:46.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:48:46.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:48:46.263 [DEBUG] [Thread-194315] [transport.py] [_log()] userauth is OK
2026-02-14T23:48:46.263 [DEBUG] [Thread-194315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:48:46.263 [DEBUG] [Thread-194315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:48:46.263 [DEBUG] [Thread-194315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:48:46.263 [DEBUG] [Thread-194315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:48:46.286 [INFO] [Thread-194315] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:48:46.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-14T23:48:46.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:48:47.094 [DEBUG] [Thread-194315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:48:47.094 [DEBUG] [Thread-194315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:48:47.142 [DEBUG] [Thread-194315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:48:47.142 [DEBUG] [Thread-194315] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:48:47.150 [DEBUG] [Thread-194315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:48:47.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:48:47.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:48:47.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:48:47.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:48:47.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:48:47.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:48:47.182 [DEBUG] [Thread-194315] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:48:54.830 [DEBUG] [Thread-194317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:49:06.448 [DEBUG] [Thread-194318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:49:09.886 [DEBUG] [Thread-194319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:49:11.892 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:49:11.892 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:49:17.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:49:17.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:49:17.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-14T23:49:19.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 48, 41), 5.95, 66.21, 0.0, 33.91, 8.95, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:49:19.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:48:41
2026-02-14T23:49:19.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:49:19.806 [DEBUG] [Thread-194320] [transport.py] [_log()] starting thread (client mode): 0xa57704f0
2026-02-14T23:49:19.807 [DEBUG] [Thread-194320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:49:19.826 [DEBUG] [Thread-194320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:49:19.826 [INFO] [Thread-194320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:49:19.829 [DEBUG] [Thread-194320] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:49:19.829 [DEBUG] [Thread-194320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:49:19.829 [DEBUG] [Thread-194320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:49:19.829 [DEBUG] [Thread-194320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:49:19.829 [DEBUG] [Thread-194320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:49:19.829 [DEBUG] [Thread-194320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:49:19.829 [DEBUG] [Thread-194320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:49:19.829 [DEBUG] [Thread-194320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:49:19.829 [DEBUG] [Thread-194320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:49:19.829 [DEBUG] [Thread-194320] [transport.py] [_log()] client lang: <none>
2026-02-14T23:49:19.829 [DEBUG] [Thread-194320] [transport.py] [_log()] server lang: <none>
2026-02-14T23:49:19.829 [DEBUG] [Thread-194320] [transport.py] [_log()] kex follows: False
2026-02-14T23:49:19.829 [DEBUG] [Thread-194320] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:49:19.830 [DEBUG] [Thread-194320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:49:19.830 [DEBUG] [Thread-194320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:49:19.830 [DEBUG] [Thread-194320] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:49:19.830 [DEBUG] [Thread-194320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:49:19.830 [DEBUG] [Thread-194320] [transport.py] [_log()] Compression: none
2026-02-14T23:49:19.830 [DEBUG] [Thread-194320] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:49:19.846 [DEBUG] [Thread-194320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:49:19.847 [DEBUG] [Thread-194320] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:49:19.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:49:19.848 [DEBUG] [Thread-194320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:49:19.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:49:19.850 [DEBUG] [Thread-194320] [transport.py] [_log()] userauth is OK
2026-02-14T23:49:19.850 [DEBUG] [Thread-194320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:49:19.850 [DEBUG] [Thread-194320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:49:19.850 [DEBUG] [Thread-194320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:49:19.850 [DEBUG] [Thread-194320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:49:19.886 [INFO] [Thread-194320] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:49:19.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:49:20.494 [DEBUG] [Thread-194320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:49:20.495 [DEBUG] [Thread-194320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:49:20.495 [DEBUG] [Thread-194320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:49:20.535 [DEBUG] [Thread-194320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:49:20.536 [DEBUG] [Thread-194320] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:49:20.539 [DEBUG] [Thread-194320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:49:20.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:49:20.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:49:20.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:49:20.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:49:20.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:49:20.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:49:20.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:49:20.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:49:20.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:49:20.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.908791 -999.00   +8.60  26.14     71   +3.80 1 1 1 1 1     0    0 4.56 -18.99 ZNESW 23.7 26.1 164.2 36.0 9.1 -24.3 8.9 -23.5 8.6 -22.4 9.1 -23.5
2026-02-14T23:49:20.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:49:20.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:49:20.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.908791
2026-02-14T23:49:20.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:49:20.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:49:20.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:49:20.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:49:20.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:49:20.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:48:41', tmtdew=5.95, humidity=66.21, cloud=0.0, wind=33.91, temperature=8.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:49:16', seeing=2.0, atlas_timestamp='2026-02-14T21:48:39.542', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.007749999999999702, -0.013249999999999318, -0.010500000000000398, 0.0045000000000001705, 0.047250000000000014, 0.0034999999999989484, 0.02224999999999966, 0.02949999999999875, 0.04400000000000048, -0.023749999999999716, 0.031000000000000583, 0.09399999999999942, 0.051750000000000185, 0.04699999999999882, 0.04099999999999859, 0.09025000000000105, 0.07099999999999973, 0.032999999999999474, 0.02424999999999855, 0.04949999999999832, 0.009749999999998593, 0.035250000000001336, 0.059749999999999304, 0.07899999999999885, 0.02999999999999936, 0.016750000000000043, 0.0235000000000003, 0.08200000000000074, 0.04200000000000159, 0.05000000000000071, 0.11150000000000126, 0.035749999999998394], zp_timestamp='2026-02-14T21:45:00')
2026-02-14T23:49:20.568 [DEBUG] [Thread-194320] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:49:20.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-14T23:49:20.661 [DEBUG] [Thread-194323] [transport.py] [_log()] starting thread (client mode): 0xa2d6b100
2026-02-14T23:49:20.661 [DEBUG] [Thread-194323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:49:20.676 [DEBUG] [Thread-194323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:49:20.676 [INFO] [Thread-194323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:49:20.684 [DEBUG] [Thread-194323] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:49:20.684 [DEBUG] [Thread-194323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:49:20.684 [DEBUG] [Thread-194323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:49:20.684 [DEBUG] [Thread-194323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:49:20.684 [DEBUG] [Thread-194323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:49:20.684 [DEBUG] [Thread-194323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:49:20.684 [DEBUG] [Thread-194323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:49:20.684 [DEBUG] [Thread-194323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:49:20.684 [DEBUG] [Thread-194323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:49:20.684 [DEBUG] [Thread-194323] [transport.py] [_log()] client lang: <none>
2026-02-14T23:49:20.684 [DEBUG] [Thread-194323] [transport.py] [_log()] server lang: <none>
2026-02-14T23:49:20.684 [DEBUG] [Thread-194323] [transport.py] [_log()] kex follows: False
2026-02-14T23:49:20.684 [DEBUG] [Thread-194323] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:49:20.684 [DEBUG] [Thread-194323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:49:20.684 [DEBUG] [Thread-194323] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:49:20.684 [DEBUG] [Thread-194323] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:49:20.685 [DEBUG] [Thread-194323] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:49:20.685 [DEBUG] [Thread-194323] [transport.py] [_log()] Compression: none
2026-02-14T23:49:20.685 [DEBUG] [Thread-194323] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:49:20.743 [DEBUG] [Thread-194323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:49:20.744 [DEBUG] [Thread-194323] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:49:20.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:49:20.745 [DEBUG] [Thread-194323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:49:20.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:49:20.800 [DEBUG] [Thread-194323] [transport.py] [_log()] userauth is OK
2026-02-14T23:49:20.800 [DEBUG] [Thread-194323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:49:20.800 [DEBUG] [Thread-194323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:49:20.800 [DEBUG] [Thread-194323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:49:20.800 [DEBUG] [Thread-194323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:49:20.819 [INFO] [Thread-194323] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:49:20.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T23:49:20.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:49:21.617 [DEBUG] [Thread-194323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:49:21.617 [DEBUG] [Thread-194323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:49:21.666 [DEBUG] [Thread-194323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:49:21.666 [DEBUG] [Thread-194323] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:49:21.676 [DEBUG] [Thread-194323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:49:21.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:49:21.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-14T23:49:21.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-14T23:49:21.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:49:21.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:49:21.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:49:21.714 [DEBUG] [Thread-194323] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:49:24.923 [DEBUG] [Thread-194325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:49:39.974 [DEBUG] [Thread-194326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:49:51.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:49:51.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:49:51.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:49:53.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 49, 16), 5.78, 67.11, 0.0, 28.57, 8.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:49:53.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:49:16
2026-02-14T23:49:54.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:49:54.285 [DEBUG] [Thread-194327] [transport.py] [_log()] starting thread (client mode): 0xa57c1420
2026-02-14T23:49:54.285 [DEBUG] [Thread-194327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:49:54.305 [DEBUG] [Thread-194327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:49:54.305 [INFO] [Thread-194327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:49:54.308 [DEBUG] [Thread-194327] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:49:54.309 [DEBUG] [Thread-194327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:49:54.309 [DEBUG] [Thread-194327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:49:54.309 [DEBUG] [Thread-194327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:49:54.309 [DEBUG] [Thread-194327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:49:54.309 [DEBUG] [Thread-194327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:49:54.309 [DEBUG] [Thread-194327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:49:54.309 [DEBUG] [Thread-194327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:49:54.309 [DEBUG] [Thread-194327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:49:54.309 [DEBUG] [Thread-194327] [transport.py] [_log()] client lang: <none>
2026-02-14T23:49:54.309 [DEBUG] [Thread-194327] [transport.py] [_log()] server lang: <none>
2026-02-14T23:49:54.309 [DEBUG] [Thread-194327] [transport.py] [_log()] kex follows: False
2026-02-14T23:49:54.309 [DEBUG] [Thread-194327] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:49:54.309 [DEBUG] [Thread-194327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:49:54.309 [DEBUG] [Thread-194327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:49:54.309 [DEBUG] [Thread-194327] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:49:54.309 [DEBUG] [Thread-194327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:49:54.309 [DEBUG] [Thread-194327] [transport.py] [_log()] Compression: none
2026-02-14T23:49:54.309 [DEBUG] [Thread-194327] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:49:54.326 [DEBUG] [Thread-194327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:49:54.327 [DEBUG] [Thread-194327] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:49:54.327 [DEBUG] [Thread-194327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:49:54.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:49:54.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:49:54.330 [DEBUG] [Thread-194327] [transport.py] [_log()] userauth is OK
2026-02-14T23:49:54.330 [DEBUG] [Thread-194327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:49:54.330 [DEBUG] [Thread-194327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:49:54.331 [DEBUG] [Thread-194327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:49:54.331 [DEBUG] [Thread-194327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:49:54.357 [INFO] [Thread-194327] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:49:54.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:49:55.011 [DEBUG] [Thread-194329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:49:55.123 [DEBUG] [Thread-194327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:49:55.123 [DEBUG] [Thread-194327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:49:55.124 [DEBUG] [Thread-194327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:49:55.164 [DEBUG] [Thread-194327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:49:55.165 [DEBUG] [Thread-194327] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:49:55.168 [DEBUG] [Thread-194327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:49:55.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:49:55.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:49:55.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:49:55.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:49:55.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:49:55.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:49:55.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:49:55.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:49:55.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:49:55.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.909138 -999.00   +8.60  24.16     71   +3.70 1 1 1 1 1     0    0 4.39 -18.46 ZNESW 24.2 24.2 159.0 25.6 9.0 -24.4 8.8 -23.4 8.6 -22.5 9.0 -23.5
2026-02-14T23:49:55.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:49:55.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:49:55.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.909138
2026-02-14T23:49:55.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:49:55.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:49:55.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:49:55.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:49:55.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:49:55.196 [DEBUG] [Thread-194327] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:49:55.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:49:16', tmtdew=5.78, humidity=67.11, cloud=0.0, wind=28.57, temperature=8.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:49:16', seeing=2.0, atlas_timestamp='2026-02-14T21:49:09.523', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.007749999999999702, -0.013249999999999318, -0.010500000000000398, 0.0045000000000001705, 0.047250000000000014, 0.0034999999999989484, 0.02224999999999966, 0.02949999999999875, 0.04400000000000048, -0.023749999999999716, 0.031000000000000583, 0.09399999999999942, 0.051750000000000185, 0.04699999999999882, 0.04099999999999859, 0.09025000000000105, 0.07099999999999973, 0.032999999999999474, 0.02424999999999855, 0.04949999999999832, 0.009749999999998593, 0.035250000000001336, 0.059749999999999304, 0.07899999999999885, 0.02999999999999936, 0.016750000000000043, 0.0235000000000003, 0.08200000000000074, 0.04200000000000159, 0.05000000000000071, 0.11150000000000126, 0.035749999999998394], zp_timestamp='2026-02-14T21:45:00')
2026-02-14T23:49:55.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-14T23:49:55.293 [DEBUG] [Thread-194331] [transport.py] [_log()] starting thread (client mode): 0xa57c0430
2026-02-14T23:49:55.293 [DEBUG] [Thread-194331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:49:55.308 [DEBUG] [Thread-194331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:49:55.308 [INFO] [Thread-194331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:49:55.315 [DEBUG] [Thread-194331] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:49:55.316 [DEBUG] [Thread-194331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:49:55.316 [DEBUG] [Thread-194331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:49:55.316 [DEBUG] [Thread-194331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:49:55.316 [DEBUG] [Thread-194331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:49:55.316 [DEBUG] [Thread-194331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:49:55.316 [DEBUG] [Thread-194331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:49:55.317 [DEBUG] [Thread-194331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:49:55.317 [DEBUG] [Thread-194331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:49:55.317 [DEBUG] [Thread-194331] [transport.py] [_log()] client lang: <none>
2026-02-14T23:49:55.317 [DEBUG] [Thread-194331] [transport.py] [_log()] server lang: <none>
2026-02-14T23:49:55.317 [DEBUG] [Thread-194331] [transport.py] [_log()] kex follows: False
2026-02-14T23:49:55.317 [DEBUG] [Thread-194331] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:49:55.317 [DEBUG] [Thread-194331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:49:55.317 [DEBUG] [Thread-194331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:49:55.318 [DEBUG] [Thread-194331] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:49:55.318 [DEBUG] [Thread-194331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:49:55.318 [DEBUG] [Thread-194331] [transport.py] [_log()] Compression: none
2026-02-14T23:49:55.318 [DEBUG] [Thread-194331] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:49:55.376 [DEBUG] [Thread-194331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:49:55.377 [DEBUG] [Thread-194331] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:49:55.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:49:55.379 [DEBUG] [Thread-194331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:49:55.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:49:55.436 [DEBUG] [Thread-194331] [transport.py] [_log()] userauth is OK
2026-02-14T23:49:55.436 [DEBUG] [Thread-194331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:49:55.436 [DEBUG] [Thread-194331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:49:55.436 [DEBUG] [Thread-194331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:49:55.436 [DEBUG] [Thread-194331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:49:55.455 [INFO] [Thread-194331] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:49:55.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-14T23:49:55.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:49:56.249 [DEBUG] [Thread-194331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:49:56.249 [DEBUG] [Thread-194331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:49:56.297 [DEBUG] [Thread-194331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:49:56.298 [DEBUG] [Thread-194331] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:49:56.307 [DEBUG] [Thread-194331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:49:56.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:49:56.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-14T23:49:56.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-14T23:49:56.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:49:56.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:49:56.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:49:56.344 [DEBUG] [Thread-194331] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:50:06.516 [DEBUG] [Thread-194333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:50:10.051 [DEBUG] [Thread-194334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:50:12.095 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:50:12.096 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:50:25.101 [DEBUG] [Thread-194335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:50:26.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:50:26.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:50:26.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:50:28.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 49, 52), 5.77, 67.16, 0.0, 35.45, 8.67, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:50:28.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:49:52
2026-02-14T23:50:28.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:50:28.795 [DEBUG] [Thread-194336] [transport.py] [_log()] starting thread (client mode): 0xa2d68b50
2026-02-14T23:50:28.795 [DEBUG] [Thread-194336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:50:28.810 [DEBUG] [Thread-194336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:50:28.810 [INFO] [Thread-194336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:50:28.813 [DEBUG] [Thread-194336] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:50:28.814 [DEBUG] [Thread-194336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:50:28.814 [DEBUG] [Thread-194336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:50:28.814 [DEBUG] [Thread-194336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:50:28.814 [DEBUG] [Thread-194336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:50:28.814 [DEBUG] [Thread-194336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:50:28.814 [DEBUG] [Thread-194336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:50:28.814 [DEBUG] [Thread-194336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:50:28.814 [DEBUG] [Thread-194336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:50:28.814 [DEBUG] [Thread-194336] [transport.py] [_log()] client lang: <none>
2026-02-14T23:50:28.814 [DEBUG] [Thread-194336] [transport.py] [_log()] server lang: <none>
2026-02-14T23:50:28.814 [DEBUG] [Thread-194336] [transport.py] [_log()] kex follows: False
2026-02-14T23:50:28.814 [DEBUG] [Thread-194336] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:50:28.814 [DEBUG] [Thread-194336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:50:28.814 [DEBUG] [Thread-194336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:50:28.814 [DEBUG] [Thread-194336] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:50:28.815 [DEBUG] [Thread-194336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:50:28.815 [DEBUG] [Thread-194336] [transport.py] [_log()] Compression: none
2026-02-14T23:50:28.815 [DEBUG] [Thread-194336] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:50:28.833 [DEBUG] [Thread-194336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:50:28.833 [DEBUG] [Thread-194336] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:50:28.834 [DEBUG] [Thread-194336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:50:28.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:50:28.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:50:28.836 [DEBUG] [Thread-194336] [transport.py] [_log()] userauth is OK
2026-02-14T23:50:28.836 [DEBUG] [Thread-194336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:50:28.837 [DEBUG] [Thread-194336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:50:28.837 [DEBUG] [Thread-194336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:50:28.837 [DEBUG] [Thread-194336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:50:28.856 [INFO] [Thread-194336] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:50:28.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:50:29.444 [DEBUG] [Thread-194336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:50:29.444 [DEBUG] [Thread-194336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:50:29.445 [DEBUG] [Thread-194336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:50:29.485 [DEBUG] [Thread-194336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:50:29.486 [DEBUG] [Thread-194336] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:50:29.489 [DEBUG] [Thread-194336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:50:29.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:50:29.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:50:29.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:50:29.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:50:29.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:50:29.511 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:50:29.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:50:29.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:50:29.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:50:29.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.909485 -999.00   +8.60  24.54     71   +3.70 1 1 1 1 1     0    0 4.43 -17.15 ZNESW 24.5 24.5 156.0 33.0 9.0 -24.5 8.9 -23.5 8.7 -22.5 9.0 -23.3
2026-02-14T23:50:29.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:50:29.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:50:29.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.909485
2026-02-14T23:50:29.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:50:29.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:50:29.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:50:29.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:50:29.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:50:29.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:49:52', tmtdew=5.77, humidity=67.16, cloud=0.0, wind=35.45, temperature=8.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:49:52', seeing=2.13, atlas_timestamp='2026-02-14T21:49:39.504', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.007749999999999702, -0.013249999999999318, -0.010500000000000398, 0.0045000000000001705, 0.047250000000000014, 0.0034999999999989484, 0.02224999999999966, 0.02949999999999875, 0.04400000000000048, -0.023749999999999716, 0.031000000000000583, 0.09399999999999942, 0.051750000000000185, 0.04699999999999882, 0.04099999999999859, 0.09025000000000105, 0.07099999999999973, 0.032999999999999474, 0.02424999999999855, 0.04949999999999832, 0.009749999999998593, 0.035250000000001336, 0.059749999999999304, 0.07899999999999885, 0.02999999999999936, 0.016750000000000043, 0.0235000000000003, 0.08200000000000074, 0.04200000000000159, 0.05000000000000071, 0.11150000000000126, 0.035749999999998394], zp_timestamp='2026-02-14T21:45:00')
2026-02-14T23:50:29.514 [DEBUG] [Thread-194336] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:50:29.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-14T23:50:29.610 [DEBUG] [Thread-194339] [transport.py] [_log()] starting thread (client mode): 0xa2d6be20
2026-02-14T23:50:29.610 [DEBUG] [Thread-194339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:50:29.625 [DEBUG] [Thread-194339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:50:29.625 [INFO] [Thread-194339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:50:29.637 [DEBUG] [Thread-194339] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:50:29.637 [DEBUG] [Thread-194339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:50:29.637 [DEBUG] [Thread-194339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:50:29.637 [DEBUG] [Thread-194339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:50:29.637 [DEBUG] [Thread-194339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:50:29.637 [DEBUG] [Thread-194339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:50:29.638 [DEBUG] [Thread-194339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:50:29.638 [DEBUG] [Thread-194339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:50:29.638 [DEBUG] [Thread-194339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:50:29.638 [DEBUG] [Thread-194339] [transport.py] [_log()] client lang: <none>
2026-02-14T23:50:29.638 [DEBUG] [Thread-194339] [transport.py] [_log()] server lang: <none>
2026-02-14T23:50:29.638 [DEBUG] [Thread-194339] [transport.py] [_log()] kex follows: False
2026-02-14T23:50:29.638 [DEBUG] [Thread-194339] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:50:29.638 [DEBUG] [Thread-194339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:50:29.638 [DEBUG] [Thread-194339] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:50:29.638 [DEBUG] [Thread-194339] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:50:29.638 [DEBUG] [Thread-194339] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:50:29.638 [DEBUG] [Thread-194339] [transport.py] [_log()] Compression: none
2026-02-14T23:50:29.638 [DEBUG] [Thread-194339] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:50:29.692 [DEBUG] [Thread-194339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:50:29.693 [DEBUG] [Thread-194339] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:50:29.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:50:29.694 [DEBUG] [Thread-194339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:50:29.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:50:29.752 [DEBUG] [Thread-194339] [transport.py] [_log()] userauth is OK
2026-02-14T23:50:29.752 [DEBUG] [Thread-194339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:50:29.752 [DEBUG] [Thread-194339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:50:29.752 [DEBUG] [Thread-194339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:50:29.753 [DEBUG] [Thread-194339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:50:29.771 [INFO] [Thread-194339] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:50:29.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-14T23:50:29.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:50:30.542 [DEBUG] [Thread-194339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:50:30.543 [DEBUG] [Thread-194339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:50:30.590 [DEBUG] [Thread-194339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:50:30.591 [DEBUG] [Thread-194339] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:50:30.600 [DEBUG] [Thread-194339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:50:30.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:50:30.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-14T23:50:30.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-14T23:50:30.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:50:30.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:50:30.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:50:30.640 [DEBUG] [Thread-194339] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:50:40.137 [DEBUG] [Thread-194341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:50:55.188 [DEBUG] [Thread-194342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:51:00.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:51:00.662 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:51:00.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-14T23:51:02.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 50, 27), 5.77, 67.16, 0.0, 30.79, 8.69, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:51:02.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:50:27
2026-02-14T23:51:03.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:51:03.432 [DEBUG] [Thread-194343] [transport.py] [_log()] starting thread (client mode): 0xa2d028f0
2026-02-14T23:51:03.432 [DEBUG] [Thread-194343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:51:03.452 [DEBUG] [Thread-194343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:51:03.453 [INFO] [Thread-194343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:51:03.456 [DEBUG] [Thread-194343] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:51:03.456 [DEBUG] [Thread-194343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:51:03.456 [DEBUG] [Thread-194343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:51:03.456 [DEBUG] [Thread-194343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:51:03.456 [DEBUG] [Thread-194343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:51:03.456 [DEBUG] [Thread-194343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:51:03.456 [DEBUG] [Thread-194343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:51:03.456 [DEBUG] [Thread-194343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:51:03.456 [DEBUG] [Thread-194343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:51:03.456 [DEBUG] [Thread-194343] [transport.py] [_log()] client lang: <none>
2026-02-14T23:51:03.456 [DEBUG] [Thread-194343] [transport.py] [_log()] server lang: <none>
2026-02-14T23:51:03.456 [DEBUG] [Thread-194343] [transport.py] [_log()] kex follows: False
2026-02-14T23:51:03.456 [DEBUG] [Thread-194343] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:51:03.456 [DEBUG] [Thread-194343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:51:03.456 [DEBUG] [Thread-194343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:51:03.456 [DEBUG] [Thread-194343] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:51:03.456 [DEBUG] [Thread-194343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:51:03.456 [DEBUG] [Thread-194343] [transport.py] [_log()] Compression: none
2026-02-14T23:51:03.456 [DEBUG] [Thread-194343] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:51:03.473 [DEBUG] [Thread-194343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:51:03.474 [DEBUG] [Thread-194343] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:51:03.475 [DEBUG] [Thread-194343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:51:03.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:51:03.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:51:03.477 [DEBUG] [Thread-194343] [transport.py] [_log()] userauth is OK
2026-02-14T23:51:03.477 [DEBUG] [Thread-194343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:51:03.477 [DEBUG] [Thread-194343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:51:03.477 [DEBUG] [Thread-194343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:51:03.477 [DEBUG] [Thread-194343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:51:03.495 [INFO] [Thread-194343] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:51:03.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:51:04.284 [DEBUG] [Thread-194343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:51:04.284 [DEBUG] [Thread-194343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:51:04.284 [DEBUG] [Thread-194343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:51:04.325 [DEBUG] [Thread-194343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:51:04.325 [DEBUG] [Thread-194343] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:51:04.327 [DEBUG] [Thread-194343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:51:04.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:51:04.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:51:04.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:51:04.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:51:04.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:51:04.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:51:04.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:51:04.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:51:04.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:51:04.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.909833 -999.00   +8.60  22.10     71   +3.80 1 1 1 1 1     0    0 4.58 -16.36 ZNESW 22.1 22.1 160.6 33.6 9.0 -24.5 8.9 -23.4 8.6 -22.4 9.0 -23.7
2026-02-14T23:51:04.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:51:04.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:51:04.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.909833
2026-02-14T23:51:04.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:51:04.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:51:04.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:51:04.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:51:04.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:51:04.354 [DEBUG] [Thread-194343] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:51:04.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:50:27', tmtdew=5.77, humidity=67.16, cloud=0.0, wind=30.79, temperature=8.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:50:27', seeing=2.13, atlas_timestamp='2026-02-14T21:50:09.571', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.01425000000000054, 0.004250000000000753, 0.0024999999999995026, 0.01249999999999929, 0.0417500000000004, 0.025000000000000355, 0.01025000000000098, 0.05249999999999844, 0.0600000000000005, -0.029749999999999943, 0.02999999999999936, 0.08900000000000041, 0.032249999999999446, 0.05999999999999872, 0.01950000000000074, 0.09425000000000061, 0.09500000000000064, 0.04899999999999949, 0.01574999999999882, 0.07399999999999807, 0.029749999999998167, 0.02525000000000155, 0.01774999999999949, 0.08299999999999841, 0.057000000000000384, 0.03275000000000006, 0.0045000000000001705, 0.06799999999999962, 0.0470000000000006, 0.05500000000000149, 0.12400000000000055, 0.08924999999999983], zp_timestamp='2026-02-14T21:48:00')
2026-02-14T23:51:04.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-14T23:51:04.438 [DEBUG] [Thread-194346] [transport.py] [_log()] starting thread (client mode): 0xa5741de0
2026-02-14T23:51:04.438 [DEBUG] [Thread-194346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:51:04.452 [DEBUG] [Thread-194346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:51:04.452 [INFO] [Thread-194346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:51:04.459 [DEBUG] [Thread-194346] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:51:04.459 [DEBUG] [Thread-194346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:51:04.459 [DEBUG] [Thread-194346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:51:04.459 [DEBUG] [Thread-194346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:51:04.459 [DEBUG] [Thread-194346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:51:04.459 [DEBUG] [Thread-194346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:51:04.459 [DEBUG] [Thread-194346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:51:04.459 [DEBUG] [Thread-194346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:51:04.459 [DEBUG] [Thread-194346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:51:04.459 [DEBUG] [Thread-194346] [transport.py] [_log()] client lang: <none>
2026-02-14T23:51:04.460 [DEBUG] [Thread-194346] [transport.py] [_log()] server lang: <none>
2026-02-14T23:51:04.460 [DEBUG] [Thread-194346] [transport.py] [_log()] kex follows: False
2026-02-14T23:51:04.460 [DEBUG] [Thread-194346] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:51:04.460 [DEBUG] [Thread-194346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:51:04.460 [DEBUG] [Thread-194346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:51:04.460 [DEBUG] [Thread-194346] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:51:04.460 [DEBUG] [Thread-194346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:51:04.460 [DEBUG] [Thread-194346] [transport.py] [_log()] Compression: none
2026-02-14T23:51:04.460 [DEBUG] [Thread-194346] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:51:04.522 [DEBUG] [Thread-194346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:51:04.522 [DEBUG] [Thread-194346] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:51:04.522 [DEBUG] [Thread-194346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:51:04.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:51:04.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:51:04.579 [DEBUG] [Thread-194346] [transport.py] [_log()] userauth is OK
2026-02-14T23:51:04.579 [DEBUG] [Thread-194346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:51:04.579 [DEBUG] [Thread-194346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:51:04.579 [DEBUG] [Thread-194346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:51:04.579 [DEBUG] [Thread-194346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:51:04.593 [INFO] [Thread-194346] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:51:04.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-14T23:51:04.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:51:05.393 [DEBUG] [Thread-194346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:51:05.393 [DEBUG] [Thread-194346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:51:05.442 [DEBUG] [Thread-194346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:51:05.442 [DEBUG] [Thread-194346] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:51:05.451 [DEBUG] [Thread-194346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:51:05.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:51:05.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-14T23:51:05.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-14T23:51:05.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:51:05.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:51:05.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:51:05.488 [DEBUG] [Thread-194346] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:51:06.584 [DEBUG] [Thread-194348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:51:10.226 [DEBUG] [Thread-194349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:51:12.297 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:51:12.299 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:51:25.286 [DEBUG] [Thread-194350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:51:35.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:51:35.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:51:35.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:51:37.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 51, 2), 5.76, 67.19, 0.0, 31.05, 8.71, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:51:37.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:51:02
2026-02-14T23:51:37.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:51:38.003 [DEBUG] [Thread-194351] [transport.py] [_log()] starting thread (client mode): 0xa2d024a0
2026-02-14T23:51:38.003 [DEBUG] [Thread-194351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:51:38.024 [DEBUG] [Thread-194351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:51:38.024 [INFO] [Thread-194351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:51:38.027 [DEBUG] [Thread-194351] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:51:38.027 [DEBUG] [Thread-194351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:51:38.027 [DEBUG] [Thread-194351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:51:38.027 [DEBUG] [Thread-194351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:51:38.027 [DEBUG] [Thread-194351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:51:38.027 [DEBUG] [Thread-194351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:51:38.027 [DEBUG] [Thread-194351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:51:38.027 [DEBUG] [Thread-194351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:51:38.027 [DEBUG] [Thread-194351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:51:38.027 [DEBUG] [Thread-194351] [transport.py] [_log()] client lang: <none>
2026-02-14T23:51:38.028 [DEBUG] [Thread-194351] [transport.py] [_log()] server lang: <none>
2026-02-14T23:51:38.028 [DEBUG] [Thread-194351] [transport.py] [_log()] kex follows: False
2026-02-14T23:51:38.028 [DEBUG] [Thread-194351] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:51:38.028 [DEBUG] [Thread-194351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:51:38.028 [DEBUG] [Thread-194351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:51:38.028 [DEBUG] [Thread-194351] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:51:38.028 [DEBUG] [Thread-194351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:51:38.028 [DEBUG] [Thread-194351] [transport.py] [_log()] Compression: none
2026-02-14T23:51:38.028 [DEBUG] [Thread-194351] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:51:38.045 [DEBUG] [Thread-194351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:51:38.046 [DEBUG] [Thread-194351] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:51:38.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:51:38.047 [DEBUG] [Thread-194351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:51:38.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:51:38.049 [DEBUG] [Thread-194351] [transport.py] [_log()] userauth is OK
2026-02-14T23:51:38.049 [DEBUG] [Thread-194351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:51:38.049 [DEBUG] [Thread-194351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:51:38.049 [DEBUG] [Thread-194351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:51:38.049 [DEBUG] [Thread-194351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:51:38.065 [INFO] [Thread-194351] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:51:38.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:51:38.695 [DEBUG] [Thread-194351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:51:38.695 [DEBUG] [Thread-194351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:51:38.695 [DEBUG] [Thread-194351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:51:38.736 [DEBUG] [Thread-194351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:51:38.736 [DEBUG] [Thread-194351] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:51:38.739 [DEBUG] [Thread-194351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:51:38.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:51:38.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:51:38.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:51:38.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:51:38.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:51:38.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:51:38.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:51:38.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:51:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:51:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.910527 -999.00   +8.60  27.54     71   +3.80 1 1 1 1 1     0    0 4.52 -16.87 ZNESW 27.5 27.5 150.2 38.5 9.0 -24.3 8.9 -23.3 8.7 -22.4 9.0 -23.6
2026-02-14T23:51:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:51:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:51:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.910527
2026-02-14T23:51:38.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:51:38.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:51:38.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:51:38.762 [DEBUG] [Thread-194351] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:51:38.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:51:38.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:51:38.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:51:02', tmtdew=5.76, humidity=67.19, cloud=0.0, wind=31.05, temperature=8.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:51:02', seeing=2.13, atlas_timestamp='2026-02-14T21:51:09.533', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.01425000000000054, 0.004250000000000753, 0.0024999999999995026, 0.01249999999999929, 0.0417500000000004, 0.025000000000000355, 0.01025000000000098, 0.05249999999999844, 0.0600000000000005, -0.029749999999999943, 0.02999999999999936, 0.08900000000000041, 0.032249999999999446, 0.05999999999999872, 0.01950000000000074, 0.09425000000000061, 0.09500000000000064, 0.04899999999999949, 0.01574999999999882, 0.07399999999999807, 0.029749999999998167, 0.02525000000000155, 0.01774999999999949, 0.08299999999999841, 0.057000000000000384, 0.03275000000000006, 0.0045000000000001705, 0.06799999999999962, 0.0470000000000006, 0.05500000000000149, 0.12400000000000055, 0.08924999999999983], zp_timestamp='2026-02-14T21:48:00')
2026-02-14T23:51:38.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T23:51:38.858 [DEBUG] [Thread-194354] [transport.py] [_log()] starting thread (client mode): 0xa2d00910
2026-02-14T23:51:38.858 [DEBUG] [Thread-194354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:51:38.872 [DEBUG] [Thread-194354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:51:38.872 [INFO] [Thread-194354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:51:38.880 [DEBUG] [Thread-194354] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:51:38.881 [DEBUG] [Thread-194354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:51:38.881 [DEBUG] [Thread-194354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:51:38.881 [DEBUG] [Thread-194354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:51:38.881 [DEBUG] [Thread-194354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:51:38.881 [DEBUG] [Thread-194354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:51:38.881 [DEBUG] [Thread-194354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:51:38.881 [DEBUG] [Thread-194354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:51:38.881 [DEBUG] [Thread-194354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:51:38.881 [DEBUG] [Thread-194354] [transport.py] [_log()] client lang: <none>
2026-02-14T23:51:38.881 [DEBUG] [Thread-194354] [transport.py] [_log()] server lang: <none>
2026-02-14T23:51:38.881 [DEBUG] [Thread-194354] [transport.py] [_log()] kex follows: False
2026-02-14T23:51:38.881 [DEBUG] [Thread-194354] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:51:38.881 [DEBUG] [Thread-194354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:51:38.881 [DEBUG] [Thread-194354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:51:38.882 [DEBUG] [Thread-194354] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:51:38.882 [DEBUG] [Thread-194354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:51:38.882 [DEBUG] [Thread-194354] [transport.py] [_log()] Compression: none
2026-02-14T23:51:38.882 [DEBUG] [Thread-194354] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:51:38.940 [DEBUG] [Thread-194354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:51:38.940 [DEBUG] [Thread-194354] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:51:38.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:51:38.941 [DEBUG] [Thread-194354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:51:38.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:51:38.995 [DEBUG] [Thread-194354] [transport.py] [_log()] userauth is OK
2026-02-14T23:51:38.996 [DEBUG] [Thread-194354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:51:38.996 [DEBUG] [Thread-194354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:51:38.996 [DEBUG] [Thread-194354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:51:38.996 [DEBUG] [Thread-194354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:51:39.014 [INFO] [Thread-194354] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:51:39.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-14T23:51:39.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:51:39.841 [DEBUG] [Thread-194354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:51:39.841 [DEBUG] [Thread-194354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:51:39.889 [DEBUG] [Thread-194354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:51:39.889 [DEBUG] [Thread-194354] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:51:39.898 [DEBUG] [Thread-194354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:51:39.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:51:39.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-14T23:51:39.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-14T23:51:39.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:51:39.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:51:39.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:51:39.936 [DEBUG] [Thread-194354] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:51:40.324 [DEBUG] [Thread-194356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:51:55.377 [DEBUG] [Thread-194357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:52:06.644 [DEBUG] [Thread-194358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:52:09.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:52:09.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:52:09.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-14T23:52:10.415 [DEBUG] [Thread-194359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:52:11.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 51, 38), 5.93, 66.35, 0.0, 37.51, 8.98, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:52:11.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:51:38
2026-02-14T23:52:12.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:52:12.292 [DEBUG] [Thread-194360] [transport.py] [_log()] starting thread (client mode): 0xa57c1150
2026-02-14T23:52:12.292 [DEBUG] [Thread-194360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:52:12.312 [DEBUG] [Thread-194360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:52:12.312 [INFO] [Thread-194360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:52:12.316 [DEBUG] [Thread-194360] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:52:12.316 [DEBUG] [Thread-194360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:52:12.316 [DEBUG] [Thread-194360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:52:12.316 [DEBUG] [Thread-194360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:52:12.316 [DEBUG] [Thread-194360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:52:12.316 [DEBUG] [Thread-194360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:52:12.316 [DEBUG] [Thread-194360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:52:12.316 [DEBUG] [Thread-194360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:52:12.316 [DEBUG] [Thread-194360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:52:12.316 [DEBUG] [Thread-194360] [transport.py] [_log()] client lang: <none>
2026-02-14T23:52:12.316 [DEBUG] [Thread-194360] [transport.py] [_log()] server lang: <none>
2026-02-14T23:52:12.316 [DEBUG] [Thread-194360] [transport.py] [_log()] kex follows: False
2026-02-14T23:52:12.317 [DEBUG] [Thread-194360] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:52:12.317 [DEBUG] [Thread-194360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:52:12.317 [DEBUG] [Thread-194360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:52:12.317 [DEBUG] [Thread-194360] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:52:12.317 [DEBUG] [Thread-194360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:52:12.317 [DEBUG] [Thread-194360] [transport.py] [_log()] Compression: none
2026-02-14T23:52:12.317 [DEBUG] [Thread-194360] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:52:12.326 [DEBUG] [Thread-194360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:52:12.327 [DEBUG] [Thread-194360] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:52:12.327 [DEBUG] [Thread-194360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:52:12.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:52:12.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:52:12.329 [DEBUG] [Thread-194360] [transport.py] [_log()] userauth is OK
2026-02-14T23:52:12.329 [DEBUG] [Thread-194360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:52:12.329 [DEBUG] [Thread-194360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:52:12.329 [DEBUG] [Thread-194360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:52:12.329 [DEBUG] [Thread-194360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:52:12.344 [INFO] [Thread-194360] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:52:12.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:52:12.496 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:52:12.497 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:52:13.009 [DEBUG] [Thread-194360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:52:13.009 [DEBUG] [Thread-194360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:52:13.009 [DEBUG] [Thread-194360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:52:13.050 [DEBUG] [Thread-194360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:52:13.050 [DEBUG] [Thread-194360] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:52:13.053 [DEBUG] [Thread-194360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:52:13.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:52:13.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:52:13.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:52:13.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:52:13.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:52:13.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:52:13.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:52:13.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:52:13.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:52:13.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.910874 -999.00   +8.60  23.34     71   +3.80 1 1 1 1 1     0    0 4.53 -16.34 ZNESW 23.3 23.3 155.2 39.7 9.0 -24.4 8.8 -23.5 8.6 -22.5 9.0 -23.8
2026-02-14T23:52:13.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:52:13.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:52:13.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.910874
2026-02-14T23:52:13.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:52:13.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:52:13.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:52:13.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:52:13.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:52:13.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:51:38', tmtdew=5.93, humidity=66.35, cloud=0.0, wind=37.51, temperature=8.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:51:39', seeing=3.55, atlas_timestamp='2026-02-14T21:51:39.514', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.01425000000000054, 0.004250000000000753, 0.0024999999999995026, 0.01249999999999929, 0.0417500000000004, 0.025000000000000355, 0.01025000000000098, 0.05249999999999844, 0.0600000000000005, -0.029749999999999943, 0.02999999999999936, 0.08900000000000041, 0.032249999999999446, 0.05999999999999872, 0.01950000000000074, 0.09425000000000061, 0.09500000000000064, 0.04899999999999949, 0.01574999999999882, 0.07399999999999807, 0.029749999999998167, 0.02525000000000155, 0.01774999999999949, 0.08299999999999841, 0.057000000000000384, 0.03275000000000006, 0.0045000000000001705, 0.06799999999999962, 0.0470000000000006, 0.05500000000000149, 0.12400000000000055, 0.08924999999999983], zp_timestamp='2026-02-14T21:48:00')
2026-02-14T23:52:13.074 [DEBUG] [Thread-194360] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:52:13.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-14T23:52:13.167 [DEBUG] [Thread-194363] [transport.py] [_log()] starting thread (client mode): 0xa2d136a0
2026-02-14T23:52:13.167 [DEBUG] [Thread-194363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:52:13.182 [DEBUG] [Thread-194363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:52:13.182 [INFO] [Thread-194363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:52:13.191 [DEBUG] [Thread-194363] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:52:13.191 [DEBUG] [Thread-194363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:52:13.191 [DEBUG] [Thread-194363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:52:13.191 [DEBUG] [Thread-194363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:52:13.191 [DEBUG] [Thread-194363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:52:13.192 [DEBUG] [Thread-194363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:52:13.192 [DEBUG] [Thread-194363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:52:13.192 [DEBUG] [Thread-194363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:52:13.192 [DEBUG] [Thread-194363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:52:13.192 [DEBUG] [Thread-194363] [transport.py] [_log()] client lang: <none>
2026-02-14T23:52:13.192 [DEBUG] [Thread-194363] [transport.py] [_log()] server lang: <none>
2026-02-14T23:52:13.192 [DEBUG] [Thread-194363] [transport.py] [_log()] kex follows: False
2026-02-14T23:52:13.192 [DEBUG] [Thread-194363] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:52:13.192 [DEBUG] [Thread-194363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:52:13.192 [DEBUG] [Thread-194363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:52:13.192 [DEBUG] [Thread-194363] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:52:13.192 [DEBUG] [Thread-194363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:52:13.192 [DEBUG] [Thread-194363] [transport.py] [_log()] Compression: none
2026-02-14T23:52:13.192 [DEBUG] [Thread-194363] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:52:13.247 [DEBUG] [Thread-194363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:52:13.248 [DEBUG] [Thread-194363] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:52:13.249 [DEBUG] [Thread-194363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:52:13.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:52:13.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:52:13.304 [DEBUG] [Thread-194363] [transport.py] [_log()] userauth is OK
2026-02-14T23:52:13.305 [DEBUG] [Thread-194363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:52:13.305 [DEBUG] [Thread-194363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:52:13.314 [DEBUG] [Thread-194363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:52:13.314 [DEBUG] [Thread-194363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:52:13.338 [INFO] [Thread-194363] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:52:13.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T23:52:13.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:52:14.131 [DEBUG] [Thread-194363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:52:14.131 [DEBUG] [Thread-194363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:52:14.179 [DEBUG] [Thread-194363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:52:14.179 [DEBUG] [Thread-194363] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:52:14.188 [DEBUG] [Thread-194363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:52:14.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:52:14.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')
2026-02-14T23:52:14.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-14T23:52:14.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:52:14.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:52:14.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:52:14.224 [DEBUG] [Thread-194363] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:52:25.446 [DEBUG] [Thread-194365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:52:40.507 [DEBUG] [Thread-194366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:52:44.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:52:44.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:52:44.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-14T23:52:46.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 52, 13), 5.75, 67.24, 0.0, 31.44, 8.57, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:52:46.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:52:13
2026-02-14T23:52:46.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:52:46.965 [DEBUG] [Thread-194367] [transport.py] [_log()] starting thread (client mode): 0xa2d130d0
2026-02-14T23:52:46.965 [DEBUG] [Thread-194367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:52:46.985 [DEBUG] [Thread-194367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:52:46.985 [INFO] [Thread-194367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:52:46.988 [DEBUG] [Thread-194367] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:52:46.988 [DEBUG] [Thread-194367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:52:46.988 [DEBUG] [Thread-194367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:52:46.988 [DEBUG] [Thread-194367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:52:46.988 [DEBUG] [Thread-194367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:52:46.988 [DEBUG] [Thread-194367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:52:46.988 [DEBUG] [Thread-194367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:52:46.988 [DEBUG] [Thread-194367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:52:46.988 [DEBUG] [Thread-194367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:52:46.988 [DEBUG] [Thread-194367] [transport.py] [_log()] client lang: <none>
2026-02-14T23:52:46.988 [DEBUG] [Thread-194367] [transport.py] [_log()] server lang: <none>
2026-02-14T23:52:46.988 [DEBUG] [Thread-194367] [transport.py] [_log()] kex follows: False
2026-02-14T23:52:46.989 [DEBUG] [Thread-194367] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:52:46.989 [DEBUG] [Thread-194367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:52:46.989 [DEBUG] [Thread-194367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:52:46.989 [DEBUG] [Thread-194367] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:52:46.989 [DEBUG] [Thread-194367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:52:46.989 [DEBUG] [Thread-194367] [transport.py] [_log()] Compression: none
2026-02-14T23:52:46.989 [DEBUG] [Thread-194367] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:52:47.009 [DEBUG] [Thread-194367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:52:47.009 [DEBUG] [Thread-194367] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:52:47.010 [DEBUG] [Thread-194367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:52:47.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:52:47.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:52:47.012 [DEBUG] [Thread-194367] [transport.py] [_log()] userauth is OK
2026-02-14T23:52:47.012 [DEBUG] [Thread-194367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:52:47.012 [DEBUG] [Thread-194367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:52:47.013 [DEBUG] [Thread-194367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:52:47.013 [DEBUG] [Thread-194367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:52:47.035 [INFO] [Thread-194367] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:52:47.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:52:47.670 [DEBUG] [Thread-194367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:52:47.671 [DEBUG] [Thread-194367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:52:47.671 [DEBUG] [Thread-194367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:52:47.711 [DEBUG] [Thread-194367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:52:47.711 [DEBUG] [Thread-194367] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:52:47.714 [DEBUG] [Thread-194367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:52:47.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:52:47.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:52:47.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:52:47.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:52:47.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:52:47.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:52:47.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:52:47.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:52:47.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:52:47.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.911221 -999.00   +8.60  20.07     71   +3.80 1 1 1 1 1     0    0 4.41 -16.22 ZNESW 20.1 20.1 157.1 31.0 9.0 -24.4 8.8 -23.4 8.7 -22.4 9.1 -23.5
2026-02-14T23:52:47.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:52:47.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:52:47.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.911221
2026-02-14T23:52:47.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:52:47.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:52:47.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:52:47.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:52:47.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:52:47.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:52:13', tmtdew=5.75, humidity=67.24, cloud=0.0, wind=31.44, temperature=8.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:52:14', seeing=2.32, atlas_timestamp='2026-02-14T21:52:09.494', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.01425000000000054, 0.004250000000000753, 0.0024999999999995026, 0.01249999999999929, 0.0417500000000004, 0.025000000000000355, 0.01025000000000098, 0.05249999999999844, 0.0600000000000005, -0.029749999999999943, 0.02999999999999936, 0.08900000000000041, 0.032249999999999446, 0.05999999999999872, 0.01950000000000074, 0.09425000000000061, 0.09500000000000064, 0.04899999999999949, 0.01574999999999882, 0.07399999999999807, 0.029749999999998167, 0.02525000000000155, 0.01774999999999949, 0.08299999999999841, 0.057000000000000384, 0.03275000000000006, 0.0045000000000001705, 0.06799999999999962, 0.0470000000000006, 0.05500000000000149, 0.12400000000000055, 0.08924999999999983], zp_timestamp='2026-02-14T21:48:00')
2026-02-14T23:52:47.741 [DEBUG] [Thread-194367] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:52:47.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-14T23:52:47.848 [DEBUG] [Thread-194370] [transport.py] [_log()] starting thread (client mode): 0xa2d02a10
2026-02-14T23:52:47.849 [DEBUG] [Thread-194370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:52:47.864 [DEBUG] [Thread-194370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:52:47.864 [INFO] [Thread-194370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:52:47.872 [DEBUG] [Thread-194370] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:52:47.872 [DEBUG] [Thread-194370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:52:47.872 [DEBUG] [Thread-194370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:52:47.872 [DEBUG] [Thread-194370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:52:47.872 [DEBUG] [Thread-194370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:52:47.872 [DEBUG] [Thread-194370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:52:47.872 [DEBUG] [Thread-194370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:52:47.872 [DEBUG] [Thread-194370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:52:47.873 [DEBUG] [Thread-194370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:52:47.873 [DEBUG] [Thread-194370] [transport.py] [_log()] client lang: <none>
2026-02-14T23:52:47.873 [DEBUG] [Thread-194370] [transport.py] [_log()] server lang: <none>
2026-02-14T23:52:47.873 [DEBUG] [Thread-194370] [transport.py] [_log()] kex follows: False
2026-02-14T23:52:47.873 [DEBUG] [Thread-194370] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:52:47.873 [DEBUG] [Thread-194370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:52:47.873 [DEBUG] [Thread-194370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:52:47.873 [DEBUG] [Thread-194370] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:52:47.873 [DEBUG] [Thread-194370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:52:47.873 [DEBUG] [Thread-194370] [transport.py] [_log()] Compression: none
2026-02-14T23:52:47.873 [DEBUG] [Thread-194370] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:52:47.932 [DEBUG] [Thread-194370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:52:47.932 [DEBUG] [Thread-194370] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:52:47.933 [DEBUG] [Thread-194370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:52:47.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:52:47.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:52:47.988 [DEBUG] [Thread-194370] [transport.py] [_log()] userauth is OK
2026-02-14T23:52:47.988 [DEBUG] [Thread-194370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:52:47.988 [DEBUG] [Thread-194370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:52:47.988 [DEBUG] [Thread-194370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:52:47.988 [DEBUG] [Thread-194370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:52:48.008 [INFO] [Thread-194370] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:52:48.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-14T23:52:48.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:52:48.810 [DEBUG] [Thread-194370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:52:48.810 [DEBUG] [Thread-194370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:52:48.858 [DEBUG] [Thread-194370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:52:48.858 [DEBUG] [Thread-194370] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:52:48.868 [DEBUG] [Thread-194370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:52:48.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:52:48.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:52:48.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-14T23:52:48.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:52:48.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:52:48.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:52:48.905 [DEBUG] [Thread-194370] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:52:55.543 [DEBUG] [Thread-194372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:53:06.719 [DEBUG] [Thread-194373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:53:10.591 [DEBUG] [Thread-194374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:53:12.698 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:53:12.699 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:53:18.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:53:18.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:53:18.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-14T23:53:20.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 52, 49), 5.68, 67.31, 0.0, 37.02, 8.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:53:20.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:52:49
2026-02-14T23:53:21.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:53:21.296 [DEBUG] [Thread-194375] [transport.py] [_log()] starting thread (client mode): 0xa57408b0
2026-02-14T23:53:21.296 [DEBUG] [Thread-194375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:53:21.317 [DEBUG] [Thread-194375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:53:21.317 [INFO] [Thread-194375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:53:21.320 [DEBUG] [Thread-194375] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:53:21.320 [DEBUG] [Thread-194375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:53:21.320 [DEBUG] [Thread-194375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:53:21.320 [DEBUG] [Thread-194375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:53:21.321 [DEBUG] [Thread-194375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:53:21.321 [DEBUG] [Thread-194375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:53:21.321 [DEBUG] [Thread-194375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:53:21.321 [DEBUG] [Thread-194375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:53:21.321 [DEBUG] [Thread-194375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:53:21.321 [DEBUG] [Thread-194375] [transport.py] [_log()] client lang: <none>
2026-02-14T23:53:21.321 [DEBUG] [Thread-194375] [transport.py] [_log()] server lang: <none>
2026-02-14T23:53:21.321 [DEBUG] [Thread-194375] [transport.py] [_log()] kex follows: False
2026-02-14T23:53:21.321 [DEBUG] [Thread-194375] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:53:21.321 [DEBUG] [Thread-194375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:53:21.321 [DEBUG] [Thread-194375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:53:21.321 [DEBUG] [Thread-194375] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:53:21.321 [DEBUG] [Thread-194375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:53:21.321 [DEBUG] [Thread-194375] [transport.py] [_log()] Compression: none
2026-02-14T23:53:21.321 [DEBUG] [Thread-194375] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:53:21.330 [DEBUG] [Thread-194375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:53:21.330 [DEBUG] [Thread-194375] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:53:21.331 [DEBUG] [Thread-194375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:53:21.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:53:21.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:53:21.333 [DEBUG] [Thread-194375] [transport.py] [_log()] userauth is OK
2026-02-14T23:53:21.333 [DEBUG] [Thread-194375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:53:21.333 [DEBUG] [Thread-194375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:53:21.333 [DEBUG] [Thread-194375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:53:21.333 [DEBUG] [Thread-194375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:53:21.352 [INFO] [Thread-194375] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:53:21.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:53:21.998 [DEBUG] [Thread-194375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:53:21.998 [DEBUG] [Thread-194375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:53:21.998 [DEBUG] [Thread-194375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:53:22.040 [DEBUG] [Thread-194375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:53:22.041 [DEBUG] [Thread-194375] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:53:22.044 [DEBUG] [Thread-194375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:53:22.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:53:22.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:53:22.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:53:22.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:53:22.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:53:22.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:53:22.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:53:22.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:53:22.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:53:22.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.911569 -999.00   +8.60  20.50     71   +3.80 1 1 1 1 1     0    0 4.33 -18.26 ZNESW 20.5 20.5 150.5 30.9 9.0 -24.4 8.8 -23.5 8.7 -22.4 9.0 -23.4
2026-02-14T23:53:22.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:53:22.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:53:22.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.911569
2026-02-14T23:53:22.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:53:22.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:53:22.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:53:22.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:53:22.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:53:22.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:52:49', tmtdew=5.68, humidity=67.31, cloud=0.0, wind=37.02, temperature=8.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:52:49', seeing=2.82, atlas_timestamp='2026-02-14T21:52:39.562', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.01425000000000054, 0.004250000000000753, 0.0024999999999995026, 0.01249999999999929, 0.0417500000000004, 0.025000000000000355, 0.01025000000000098, 0.05249999999999844, 0.0600000000000005, -0.029749999999999943, 0.02999999999999936, 0.08900000000000041, 0.032249999999999446, 0.05999999999999872, 0.01950000000000074, 0.09425000000000061, 0.09500000000000064, 0.04899999999999949, 0.01574999999999882, 0.07399999999999807, 0.029749999999998167, 0.02525000000000155, 0.01774999999999949, 0.08299999999999841, 0.057000000000000384, 0.03275000000000006, 0.0045000000000001705, 0.06799999999999962, 0.0470000000000006, 0.05500000000000149, 0.12400000000000055, 0.08924999999999983], zp_timestamp='2026-02-14T21:48:00')
2026-02-14T23:53:22.074 [DEBUG] [Thread-194375] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:53:22.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-14T23:53:22.169 [DEBUG] [Thread-194378] [transport.py] [_log()] starting thread (client mode): 0xa2d016c0
2026-02-14T23:53:22.169 [DEBUG] [Thread-194378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:53:22.188 [DEBUG] [Thread-194378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:53:22.188 [INFO] [Thread-194378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:53:22.195 [DEBUG] [Thread-194378] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:53:22.195 [DEBUG] [Thread-194378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:53:22.196 [DEBUG] [Thread-194378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:53:22.196 [DEBUG] [Thread-194378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:53:22.196 [DEBUG] [Thread-194378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:53:22.196 [DEBUG] [Thread-194378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:53:22.196 [DEBUG] [Thread-194378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:53:22.197 [DEBUG] [Thread-194378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:53:22.197 [DEBUG] [Thread-194378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:53:22.197 [DEBUG] [Thread-194378] [transport.py] [_log()] client lang: <none>
2026-02-14T23:53:22.197 [DEBUG] [Thread-194378] [transport.py] [_log()] server lang: <none>
2026-02-14T23:53:22.197 [DEBUG] [Thread-194378] [transport.py] [_log()] kex follows: False
2026-02-14T23:53:22.197 [DEBUG] [Thread-194378] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:53:22.197 [DEBUG] [Thread-194378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:53:22.197 [DEBUG] [Thread-194378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:53:22.197 [DEBUG] [Thread-194378] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:53:22.197 [DEBUG] [Thread-194378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:53:22.197 [DEBUG] [Thread-194378] [transport.py] [_log()] Compression: none
2026-02-14T23:53:22.197 [DEBUG] [Thread-194378] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:53:22.257 [DEBUG] [Thread-194378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:53:22.257 [DEBUG] [Thread-194378] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:53:22.258 [DEBUG] [Thread-194378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:53:22.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:53:22.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:53:22.316 [DEBUG] [Thread-194378] [transport.py] [_log()] userauth is OK
2026-02-14T23:53:22.316 [DEBUG] [Thread-194378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:53:22.316 [DEBUG] [Thread-194378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:53:22.316 [DEBUG] [Thread-194378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:53:22.316 [DEBUG] [Thread-194378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:53:22.330 [INFO] [Thread-194378] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:53:22.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T23:53:22.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:53:23.118 [DEBUG] [Thread-194378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:53:23.119 [DEBUG] [Thread-194378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:53:23.166 [DEBUG] [Thread-194378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:53:23.166 [DEBUG] [Thread-194378] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:53:23.175 [DEBUG] [Thread-194378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:53:23.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:53:23.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-14T23:53:23.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-14T23:53:23.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:53:23.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:53:23.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:53:23.209 [DEBUG] [Thread-194378] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:53:25.626 [DEBUG] [Thread-194380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:53:40.688 [DEBUG] [Thread-194381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:53:53.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:53:53.231 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:53:53.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-14T23:53:55.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 53, 25), 5.67, 67.36, 0.0, 36.03, 8.61, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:53:55.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:53:25
2026-02-14T23:53:55.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:53:55.547 [DEBUG] [Thread-194382] [transport.py] [_log()] starting thread (client mode): 0xa2d10e80
2026-02-14T23:53:55.547 [DEBUG] [Thread-194382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:53:55.566 [DEBUG] [Thread-194382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:53:55.567 [INFO] [Thread-194382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:53:55.570 [DEBUG] [Thread-194382] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:53:55.570 [DEBUG] [Thread-194382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:53:55.570 [DEBUG] [Thread-194382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:53:55.570 [DEBUG] [Thread-194382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:53:55.570 [DEBUG] [Thread-194382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:53:55.570 [DEBUG] [Thread-194382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:53:55.570 [DEBUG] [Thread-194382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:53:55.570 [DEBUG] [Thread-194382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:53:55.570 [DEBUG] [Thread-194382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:53:55.570 [DEBUG] [Thread-194382] [transport.py] [_log()] client lang: <none>
2026-02-14T23:53:55.570 [DEBUG] [Thread-194382] [transport.py] [_log()] server lang: <none>
2026-02-14T23:53:55.570 [DEBUG] [Thread-194382] [transport.py] [_log()] kex follows: False
2026-02-14T23:53:55.570 [DEBUG] [Thread-194382] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:53:55.570 [DEBUG] [Thread-194382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:53:55.570 [DEBUG] [Thread-194382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:53:55.570 [DEBUG] [Thread-194382] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:53:55.570 [DEBUG] [Thread-194382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:53:55.570 [DEBUG] [Thread-194382] [transport.py] [_log()] Compression: none
2026-02-14T23:53:55.570 [DEBUG] [Thread-194382] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:53:55.589 [DEBUG] [Thread-194382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:53:55.589 [DEBUG] [Thread-194382] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:53:55.590 [DEBUG] [Thread-194382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:53:55.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:53:55.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:53:55.592 [DEBUG] [Thread-194382] [transport.py] [_log()] userauth is OK
2026-02-14T23:53:55.593 [DEBUG] [Thread-194382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:53:55.593 [DEBUG] [Thread-194382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:53:55.593 [DEBUG] [Thread-194382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:53:55.593 [DEBUG] [Thread-194382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:53:55.618 [INFO] [Thread-194382] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:53:55.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:53:55.726 [DEBUG] [Thread-194384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:53:56.252 [DEBUG] [Thread-194382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:53:56.253 [DEBUG] [Thread-194382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:53:56.253 [DEBUG] [Thread-194382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:53:56.293 [DEBUG] [Thread-194382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:53:56.294 [DEBUG] [Thread-194382] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:53:56.297 [DEBUG] [Thread-194382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:53:56.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:53:56.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:53:56.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:53:56.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:53:56.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:53:56.323 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:53:56.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:53:56.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:53:56.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:53:56.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.911916 -999.00   +8.60  21.18     71   +3.80 1 1 1 1 1     0    0 4.44 -18.32 ZNESW 21.2 21.2 151.4 29.2 9.0 -24.3 8.8 -23.5 8.6 -22.3 9.0 -23.7
2026-02-14T23:53:56.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:53:56.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:53:56.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.911916
2026-02-14T23:53:56.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:53:56.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:53:56.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:53:56.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:53:56.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:53:56.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:53:25', tmtdew=5.67, humidity=67.36, cloud=0.0, wind=36.03, temperature=8.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:53:26', seeing=3.16, atlas_timestamp='2026-02-14T21:53:09.542', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.01425000000000054, 0.004250000000000753, 0.0024999999999995026, 0.01249999999999929, 0.0417500000000004, 0.025000000000000355, 0.01025000000000098, 0.05249999999999844, 0.0600000000000005, -0.029749999999999943, 0.02999999999999936, 0.08900000000000041, 0.032249999999999446, 0.05999999999999872, 0.01950000000000074, 0.09425000000000061, 0.09500000000000064, 0.04899999999999949, 0.01574999999999882, 0.07399999999999807, 0.029749999999998167, 0.02525000000000155, 0.01774999999999949, 0.08299999999999841, 0.057000000000000384, 0.03275000000000006, 0.0045000000000001705, 0.06799999999999962, 0.0470000000000006, 0.05500000000000149, 0.12400000000000055, 0.08924999999999983], zp_timestamp='2026-02-14T21:51:00')
2026-02-14T23:53:56.326 [DEBUG] [Thread-194382] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:53:56.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-14T23:54:06.775 [DEBUG] [Thread-194386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:54:10.763 [DEBUG] [Thread-194387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:54:12.903 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:54:12.904 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:54:25.817 [DEBUG] [Thread-194388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:54:40.854 [DEBUG] [Thread-194389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:54:55.891 [DEBUG] [Thread-194390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:55:06.833 [DEBUG] [Thread-194391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:55:10.926 [DEBUG] [Thread-194392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:55:13.105 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:55:13.106 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:55:25.960 [DEBUG] [Thread-194393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:55:40.997 [DEBUG] [Thread-194394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:55:56.034 [DEBUG] [Thread-194395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:56:06.893 [DEBUG] [Thread-194396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:56:10.944 [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-14T23:56:11.070 [DEBUG] [Thread-194397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:56:13.308 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:56:13.309 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:56:26.109 [DEBUG] [Thread-194398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:56:40.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:56:40.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:56:40.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-14T23:56:41.146 [DEBUG] [Thread-194399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:56:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 56, 24), 5.67, 67.39, 0.0, 30.58, 8.59, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:56:43.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:56:24
2026-02-14T23:56:43.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:56:43.615 [DEBUG] [Thread-194400] [transport.py] [_log()] starting thread (client mode): 0xa2d7ae60
2026-02-14T23:56:43.615 [DEBUG] [Thread-194400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:56:43.625 [DEBUG] [Thread-194400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:56:43.626 [INFO] [Thread-194400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:56:43.629 [DEBUG] [Thread-194400] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:56:43.629 [DEBUG] [Thread-194400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:56:43.629 [DEBUG] [Thread-194400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:56:43.629 [DEBUG] [Thread-194400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:56:43.629 [DEBUG] [Thread-194400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:56:43.629 [DEBUG] [Thread-194400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:56:43.629 [DEBUG] [Thread-194400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:56:43.629 [DEBUG] [Thread-194400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:56:43.629 [DEBUG] [Thread-194400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:56:43.629 [DEBUG] [Thread-194400] [transport.py] [_log()] client lang: <none>
2026-02-14T23:56:43.629 [DEBUG] [Thread-194400] [transport.py] [_log()] server lang: <none>
2026-02-14T23:56:43.629 [DEBUG] [Thread-194400] [transport.py] [_log()] kex follows: False
2026-02-14T23:56:43.629 [DEBUG] [Thread-194400] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:56:43.629 [DEBUG] [Thread-194400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:56:43.629 [DEBUG] [Thread-194400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:56:43.629 [DEBUG] [Thread-194400] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:56:43.629 [DEBUG] [Thread-194400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:56:43.629 [DEBUG] [Thread-194400] [transport.py] [_log()] Compression: none
2026-02-14T23:56:43.629 [DEBUG] [Thread-194400] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:56:43.647 [DEBUG] [Thread-194400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:56:43.648 [DEBUG] [Thread-194400] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:56:43.648 [DEBUG] [Thread-194400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:56:43.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:56:43.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:56:43.650 [DEBUG] [Thread-194400] [transport.py] [_log()] userauth is OK
2026-02-14T23:56:43.650 [DEBUG] [Thread-194400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:56:43.650 [DEBUG] [Thread-194400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:56:43.650 [DEBUG] [Thread-194400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:56:43.650 [DEBUG] [Thread-194400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:56:43.675 [INFO] [Thread-194400] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:56:43.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:56:44.314 [DEBUG] [Thread-194400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:56:44.314 [DEBUG] [Thread-194400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:56:44.314 [DEBUG] [Thread-194400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:56:44.355 [DEBUG] [Thread-194400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:56:44.356 [DEBUG] [Thread-194400] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:56:44.358 [DEBUG] [Thread-194400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:56:44.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:56:44.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:56:44.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:56:44.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:56:44.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:56:44.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:56:44.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:56:44.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:56:44.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:56:44.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.913999 -999.00   +8.50  28.79     72   +3.80 1 1 1 1 1     0    0 4.33 -19.50 ZNESW 28.8 28.8 149.8 37.4 9.0 -24.5 8.8 -23.5 8.6 -22.3 9.0 -23.6
2026-02-14T23:56:44.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:56:44.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:56:44.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.913999
2026-02-14T23:56:44.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:56:44.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:56:44.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:56:44.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:56:44.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:56:44.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:56:24', tmtdew=5.67, humidity=67.39, cloud=0.0, wind=30.58, temperature=8.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:56:25', seeing=2.4, atlas_timestamp='2026-02-14T21:56:09.514', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.01425000000000054, 0.004250000000000753, 0.0024999999999995026, 0.01249999999999929, 0.0417500000000004, 0.025000000000000355, 0.01025000000000098, 0.05249999999999844, 0.0600000000000005, -0.029749999999999943, 0.02999999999999936, 0.08900000000000041, 0.032249999999999446, 0.05999999999999872, 0.01950000000000074, 0.09425000000000061, 0.09500000000000064, 0.04899999999999949, 0.01574999999999882, 0.07399999999999807, 0.029749999999998167, 0.02525000000000155, 0.01774999999999949, 0.08299999999999841, 0.057000000000000384, 0.03275000000000006, 0.0045000000000001705, 0.06799999999999962, 0.0470000000000006, 0.05500000000000149, 0.12400000000000055, 0.08924999999999983], zp_timestamp='2026-02-14T21:51:00')
2026-02-14T23:56:44.385 [DEBUG] [Thread-194400] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:56:44.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-14T23:56:44.481 [DEBUG] [Thread-194403] [transport.py] [_log()] starting thread (client mode): 0xa2d6b7c0
2026-02-14T23:56:44.482 [DEBUG] [Thread-194403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:56:44.496 [DEBUG] [Thread-194403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:56:44.496 [INFO] [Thread-194403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:56:44.504 [DEBUG] [Thread-194403] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:56:44.504 [DEBUG] [Thread-194403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:56:44.504 [DEBUG] [Thread-194403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:56:44.504 [DEBUG] [Thread-194403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:56:44.504 [DEBUG] [Thread-194403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:56:44.504 [DEBUG] [Thread-194403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:56:44.504 [DEBUG] [Thread-194403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:56:44.504 [DEBUG] [Thread-194403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:56:44.504 [DEBUG] [Thread-194403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:56:44.504 [DEBUG] [Thread-194403] [transport.py] [_log()] client lang: <none>
2026-02-14T23:56:44.504 [DEBUG] [Thread-194403] [transport.py] [_log()] server lang: <none>
2026-02-14T23:56:44.504 [DEBUG] [Thread-194403] [transport.py] [_log()] kex follows: False
2026-02-14T23:56:44.504 [DEBUG] [Thread-194403] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:56:44.505 [DEBUG] [Thread-194403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:56:44.505 [DEBUG] [Thread-194403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:56:44.505 [DEBUG] [Thread-194403] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:56:44.505 [DEBUG] [Thread-194403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:56:44.505 [DEBUG] [Thread-194403] [transport.py] [_log()] Compression: none
2026-02-14T23:56:44.505 [DEBUG] [Thread-194403] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:56:44.563 [DEBUG] [Thread-194403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:56:44.564 [DEBUG] [Thread-194403] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:56:44.564 [DEBUG] [Thread-194403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:56:44.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:56:44.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:56:44.620 [DEBUG] [Thread-194403] [transport.py] [_log()] userauth is OK
2026-02-14T23:56:44.621 [DEBUG] [Thread-194403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:56:44.621 [DEBUG] [Thread-194403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:56:44.621 [DEBUG] [Thread-194403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:56:44.621 [DEBUG] [Thread-194403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:56:44.645 [INFO] [Thread-194403] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:56:44.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-14T23:56:44.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:56:45.456 [DEBUG] [Thread-194403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:56:45.456 [DEBUG] [Thread-194403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:56:45.505 [DEBUG] [Thread-194403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:56:45.505 [DEBUG] [Thread-194403] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:56:45.514 [DEBUG] [Thread-194403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:56:45.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:56:45.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:56:45.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:56:45.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:56:45.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:56:45.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:56:45.552 [DEBUG] [Thread-194403] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:56:56.183 [DEBUG] [Thread-194405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:57:06.953 [DEBUG] [Thread-194406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:57:11.225 [DEBUG] [Thread-194407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:57:13.513 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:57:13.514 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:57:15.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:57:15.568 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:57:15.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-14T23:57:17.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 56, 59), 5.67, 67.39, 0.0, 31.99, 8.58, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:57:17.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:56:59
2026-02-14T23:57:17.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:57:17.906 [DEBUG] [Thread-194408] [transport.py] [_log()] starting thread (client mode): 0xa57c2b30
2026-02-14T23:57:17.906 [DEBUG] [Thread-194408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:57:17.922 [DEBUG] [Thread-194408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:57:17.922 [INFO] [Thread-194408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:57:17.923 [DEBUG] [Thread-194408] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:57:17.923 [DEBUG] [Thread-194408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:57:17.924 [DEBUG] [Thread-194408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:57:17.924 [DEBUG] [Thread-194408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:57:17.924 [DEBUG] [Thread-194408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:57:17.924 [DEBUG] [Thread-194408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:57:17.924 [DEBUG] [Thread-194408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:57:17.924 [DEBUG] [Thread-194408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:57:17.924 [DEBUG] [Thread-194408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:57:17.924 [DEBUG] [Thread-194408] [transport.py] [_log()] client lang: <none>
2026-02-14T23:57:17.924 [DEBUG] [Thread-194408] [transport.py] [_log()] server lang: <none>
2026-02-14T23:57:17.924 [DEBUG] [Thread-194408] [transport.py] [_log()] kex follows: False
2026-02-14T23:57:17.924 [DEBUG] [Thread-194408] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:57:17.924 [DEBUG] [Thread-194408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:57:17.924 [DEBUG] [Thread-194408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:57:17.924 [DEBUG] [Thread-194408] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:57:17.924 [DEBUG] [Thread-194408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:57:17.924 [DEBUG] [Thread-194408] [transport.py] [_log()] Compression: none
2026-02-14T23:57:17.924 [DEBUG] [Thread-194408] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:57:17.934 [DEBUG] [Thread-194408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:57:17.934 [DEBUG] [Thread-194408] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:57:17.934 [DEBUG] [Thread-194408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:57:17.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:57:17.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:57:17.936 [DEBUG] [Thread-194408] [transport.py] [_log()] userauth is OK
2026-02-14T23:57:17.936 [DEBUG] [Thread-194408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:57:17.936 [DEBUG] [Thread-194408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:57:17.936 [DEBUG] [Thread-194408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:57:17.936 [DEBUG] [Thread-194408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:57:17.968 [INFO] [Thread-194408] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:57:17.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:57:18.576 [DEBUG] [Thread-194408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:57:18.577 [DEBUG] [Thread-194408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:57:18.577 [DEBUG] [Thread-194408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:57:18.617 [DEBUG] [Thread-194408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:57:18.617 [DEBUG] [Thread-194408] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:57:18.620 [DEBUG] [Thread-194408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:57:18.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:57:18.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:57:18.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:57:18.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:57:18.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:57:18.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:57:18.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:57:18.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:57:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:57:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.914346 -999.00   +8.50  23.65     72   +3.80 1 1 1 1 1     0    0 4.25 -20.32 ZNESW 23.6 23.6 161.1 33.3 9.0 -24.5 8.8 -23.5 8.6 -22.4 9.0 -23.8
2026-02-14T23:57:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:57:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:57:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.914346
2026-02-14T23:57:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:57:18.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:57:18.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:57:18.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:57:18.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:57:18.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:56:59', tmtdew=5.67, humidity=67.39, cloud=0.0, wind=31.99, temperature=8.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:57:00', seeing=2.27, atlas_timestamp='2026-02-14T21:56:39.494', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006249999999999645, 0.017250000000000654, -0.01699999999999946, 0.020500000000000185, 0.039250000000000895, 0.0024999999999995026, 0.03625000000000078, 0.03449999999999953, 0.04650000000000176, -0.05874999999999986, 0.045999999999999375, 0.07900000000000063, 0.06324999999999825, 0.05299999999999905, 0.0259999999999998, 0.08924999999999983, 0.08050000000000068, 0.03199999999999825, 0.009249999999997982, 0.08099999999999952, 0.020749999999999602, 0.02525000000000155, 0.06574999999999953, 0.08849999999999802, 0.0495000000000001, 0.0337499999999995, 0.0, 0.10000000000000142, 0.060000000000002274, 0.0470000000000006, 0.11500000000000021, 0.07324999999999804], zp_timestamp='2026-02-14T21:55:00')
2026-02-14T23:57:18.645 [DEBUG] [Thread-194408] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:57:18.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-14T23:57:18.749 [DEBUG] [Thread-194411] [transport.py] [_log()] starting thread (client mode): 0xa2d02f50
2026-02-14T23:57:18.749 [DEBUG] [Thread-194411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:57:18.764 [DEBUG] [Thread-194411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:57:18.764 [INFO] [Thread-194411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:57:18.772 [DEBUG] [Thread-194411] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:57:18.772 [DEBUG] [Thread-194411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:57:18.772 [DEBUG] [Thread-194411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:57:18.773 [DEBUG] [Thread-194411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:57:18.773 [DEBUG] [Thread-194411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:57:18.773 [DEBUG] [Thread-194411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:57:18.773 [DEBUG] [Thread-194411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:57:18.773 [DEBUG] [Thread-194411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:57:18.773 [DEBUG] [Thread-194411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:57:18.773 [DEBUG] [Thread-194411] [transport.py] [_log()] client lang: <none>
2026-02-14T23:57:18.773 [DEBUG] [Thread-194411] [transport.py] [_log()] server lang: <none>
2026-02-14T23:57:18.773 [DEBUG] [Thread-194411] [transport.py] [_log()] kex follows: False
2026-02-14T23:57:18.773 [DEBUG] [Thread-194411] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:57:18.773 [DEBUG] [Thread-194411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:57:18.773 [DEBUG] [Thread-194411] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:57:18.773 [DEBUG] [Thread-194411] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:57:18.773 [DEBUG] [Thread-194411] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:57:18.773 [DEBUG] [Thread-194411] [transport.py] [_log()] Compression: none
2026-02-14T23:57:18.773 [DEBUG] [Thread-194411] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:57:18.830 [DEBUG] [Thread-194411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:57:18.831 [DEBUG] [Thread-194411] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:57:18.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:57:18.832 [DEBUG] [Thread-194411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:57:18.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:57:18.887 [DEBUG] [Thread-194411] [transport.py] [_log()] userauth is OK
2026-02-14T23:57:18.888 [DEBUG] [Thread-194411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:57:18.888 [DEBUG] [Thread-194411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:57:18.888 [DEBUG] [Thread-194411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:57:18.888 [DEBUG] [Thread-194411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:57:18.910 [INFO] [Thread-194411] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:57:18.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-14T23:57:18.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:57:19.708 [DEBUG] [Thread-194411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:57:19.709 [DEBUG] [Thread-194411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:57:19.757 [DEBUG] [Thread-194411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:57:19.757 [DEBUG] [Thread-194411] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:57:19.766 [DEBUG] [Thread-194411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:57:19.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:57:19.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:57: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') -> 00000000
2026-02-14T23:57:19.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:57:19.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:57:19.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:57:19.799 [DEBUG] [Thread-194411] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:57:26.257 [DEBUG] [Thread-194413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:57:41.318 [DEBUG] [Thread-194414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:57:49.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:57:49.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:57:49.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-14T23:57:51.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 57, 34), 5.8, 66.91, 0.0, 38.71, 8.78, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:57:51.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:57:34
2026-02-14T23:57:52.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:57:52.207 [DEBUG] [Thread-194415] [transport.py] [_log()] starting thread (client mode): 0xa2d799c0
2026-02-14T23:57:52.208 [DEBUG] [Thread-194415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:57:52.226 [DEBUG] [Thread-194415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:57:52.226 [INFO] [Thread-194415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:57:52.229 [DEBUG] [Thread-194415] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:57:52.230 [DEBUG] [Thread-194415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:57:52.230 [DEBUG] [Thread-194415] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:57:52.230 [DEBUG] [Thread-194415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:57:52.230 [DEBUG] [Thread-194415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:57:52.230 [DEBUG] [Thread-194415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:57:52.230 [DEBUG] [Thread-194415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:57:52.230 [DEBUG] [Thread-194415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:57:52.230 [DEBUG] [Thread-194415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:57:52.230 [DEBUG] [Thread-194415] [transport.py] [_log()] client lang: <none>
2026-02-14T23:57:52.230 [DEBUG] [Thread-194415] [transport.py] [_log()] server lang: <none>
2026-02-14T23:57:52.231 [DEBUG] [Thread-194415] [transport.py] [_log()] kex follows: False
2026-02-14T23:57:52.231 [DEBUG] [Thread-194415] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:57:52.231 [DEBUG] [Thread-194415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:57:52.231 [DEBUG] [Thread-194415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:57:52.231 [DEBUG] [Thread-194415] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:57:52.231 [DEBUG] [Thread-194415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:57:52.231 [DEBUG] [Thread-194415] [transport.py] [_log()] Compression: none
2026-02-14T23:57:52.231 [DEBUG] [Thread-194415] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:57:52.248 [DEBUG] [Thread-194415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:57:52.249 [DEBUG] [Thread-194415] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:57:52.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:57:52.250 [DEBUG] [Thread-194415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:57:52.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:57:52.252 [DEBUG] [Thread-194415] [transport.py] [_log()] userauth is OK
2026-02-14T23:57:52.253 [DEBUG] [Thread-194415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:57:52.253 [DEBUG] [Thread-194415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:57:52.253 [DEBUG] [Thread-194415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:57:52.253 [DEBUG] [Thread-194415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:57:52.272 [INFO] [Thread-194415] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:57:52.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:57:52.904 [DEBUG] [Thread-194415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:57:52.904 [DEBUG] [Thread-194415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:57:52.905 [DEBUG] [Thread-194415] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:57:52.945 [DEBUG] [Thread-194415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:57:52.945 [DEBUG] [Thread-194415] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:57:52.948 [DEBUG] [Thread-194415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:57:52.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:57:52.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:57:52.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:57:52.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:57:52.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:57:52.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:57:52.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:57:52.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:57:52.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:57:52.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.915041 -999.00   +8.50  24.98     72   +3.80 1 1 1 1 1     0    0 4.31 -22.62 ZNESW 25.0 25.0 164.0 32.5 9.0 -24.6 8.8 -23.5 8.6 -22.6 8.9 -23.9
2026-02-14T23:57:52.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:57:52.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:57:52.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.915041
2026-02-14T23:57:52.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:57:52.967 [DEBUG] [Thread-194415] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:57:52.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:57:52.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:57:52.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:57:52.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:57:52.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:57:34', tmtdew=5.8, humidity=66.91, cloud=0.0, wind=38.71, temperature=8.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:57:35', seeing=1.84, atlas_timestamp='2026-02-14T21:57:39.542', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006249999999999645, 0.017250000000000654, -0.01699999999999946, 0.020500000000000185, 0.039250000000000895, 0.0024999999999995026, 0.03625000000000078, 0.03449999999999953, 0.04650000000000176, -0.05874999999999986, 0.045999999999999375, 0.07900000000000063, 0.06324999999999825, 0.05299999999999905, 0.0259999999999998, 0.08924999999999983, 0.08050000000000068, 0.03199999999999825, 0.009249999999997982, 0.08099999999999952, 0.020749999999999602, 0.02525000000000155, 0.06574999999999953, 0.08849999999999802, 0.0495000000000001, 0.0337499999999995, 0.0, 0.10000000000000142, 0.060000000000002274, 0.0470000000000006, 0.11500000000000021, 0.07324999999999804], zp_timestamp='2026-02-14T21:55:00')
2026-02-14T23:57:53.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-14T23:57:53.068 [DEBUG] [Thread-194418] [transport.py] [_log()] starting thread (client mode): 0xa2d69390
2026-02-14T23:57:53.068 [DEBUG] [Thread-194418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:57:53.083 [DEBUG] [Thread-194418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:57:53.083 [INFO] [Thread-194418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:57:53.090 [DEBUG] [Thread-194418] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:57:53.091 [DEBUG] [Thread-194418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:57:53.091 [DEBUG] [Thread-194418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:57:53.091 [DEBUG] [Thread-194418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:57:53.091 [DEBUG] [Thread-194418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:57:53.091 [DEBUG] [Thread-194418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:57:53.091 [DEBUG] [Thread-194418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:57:53.091 [DEBUG] [Thread-194418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:57:53.091 [DEBUG] [Thread-194418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:57:53.091 [DEBUG] [Thread-194418] [transport.py] [_log()] client lang: <none>
2026-02-14T23:57:53.091 [DEBUG] [Thread-194418] [transport.py] [_log()] server lang: <none>
2026-02-14T23:57:53.091 [DEBUG] [Thread-194418] [transport.py] [_log()] kex follows: False
2026-02-14T23:57:53.091 [DEBUG] [Thread-194418] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:57:53.092 [DEBUG] [Thread-194418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:57:53.092 [DEBUG] [Thread-194418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:57:53.092 [DEBUG] [Thread-194418] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:57:53.092 [DEBUG] [Thread-194418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:57:53.092 [DEBUG] [Thread-194418] [transport.py] [_log()] Compression: none
2026-02-14T23:57:53.092 [DEBUG] [Thread-194418] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:57:53.147 [DEBUG] [Thread-194418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:57:53.147 [DEBUG] [Thread-194418] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:57:53.148 [DEBUG] [Thread-194418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:57:53.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:57:53.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:57:53.204 [DEBUG] [Thread-194418] [transport.py] [_log()] userauth is OK
2026-02-14T23:57:53.204 [DEBUG] [Thread-194418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:57:53.204 [DEBUG] [Thread-194418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:57:53.204 [DEBUG] [Thread-194418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:57:53.204 [DEBUG] [Thread-194418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:57:53.222 [INFO] [Thread-194418] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:57:53.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-14T23:57:53.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:57:54.004 [DEBUG] [Thread-194418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:57:54.004 [DEBUG] [Thread-194418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:57:54.052 [DEBUG] [Thread-194418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:57:54.053 [DEBUG] [Thread-194418] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:57:54.062 [DEBUG] [Thread-194418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:57:54.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:57:54.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:57:54.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-14T23:57:54.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:57:54.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:57:54.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:57:54.099 [DEBUG] [Thread-194418] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:57:56.355 [DEBUG] [Thread-194420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:58:07.008 [DEBUG] [Thread-194421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:58:11.405 [DEBUG] [Thread-194422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:58:13.731 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:58:13.732 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:58:24.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:58:24.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:58:24.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-14T23:58:26.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 58, 10), 5.64, 67.52, 0.0, 35.32, 8.54, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:58:26.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:58:10
2026-02-14T23:58:26.442 [DEBUG] [Thread-194423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:58:26.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:58:26.642 [DEBUG] [Thread-194424] [transport.py] [_log()] starting thread (client mode): 0xa5773640
2026-02-14T23:58:26.642 [DEBUG] [Thread-194424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:58:26.661 [DEBUG] [Thread-194424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:58:26.661 [INFO] [Thread-194424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:58:26.664 [DEBUG] [Thread-194424] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:58:26.664 [DEBUG] [Thread-194424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:58:26.664 [DEBUG] [Thread-194424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:58:26.664 [DEBUG] [Thread-194424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:58:26.664 [DEBUG] [Thread-194424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:58:26.664 [DEBUG] [Thread-194424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:58:26.664 [DEBUG] [Thread-194424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:58:26.664 [DEBUG] [Thread-194424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:58:26.664 [DEBUG] [Thread-194424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:58:26.664 [DEBUG] [Thread-194424] [transport.py] [_log()] client lang: <none>
2026-02-14T23:58:26.664 [DEBUG] [Thread-194424] [transport.py] [_log()] server lang: <none>
2026-02-14T23:58:26.664 [DEBUG] [Thread-194424] [transport.py] [_log()] kex follows: False
2026-02-14T23:58:26.664 [DEBUG] [Thread-194424] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:58:26.664 [DEBUG] [Thread-194424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:58:26.664 [DEBUG] [Thread-194424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:58:26.664 [DEBUG] [Thread-194424] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:58:26.664 [DEBUG] [Thread-194424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:58:26.664 [DEBUG] [Thread-194424] [transport.py] [_log()] Compression: none
2026-02-14T23:58:26.664 [DEBUG] [Thread-194424] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:58:26.681 [DEBUG] [Thread-194424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:58:26.681 [DEBUG] [Thread-194424] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:58:26.682 [DEBUG] [Thread-194424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:58:26.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:58:26.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:58:26.684 [DEBUG] [Thread-194424] [transport.py] [_log()] userauth is OK
2026-02-14T23:58:26.684 [DEBUG] [Thread-194424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:58:26.684 [DEBUG] [Thread-194424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:58:26.684 [DEBUG] [Thread-194424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:58:26.684 [DEBUG] [Thread-194424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:58:26.702 [INFO] [Thread-194424] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:58:26.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:58:27.339 [DEBUG] [Thread-194424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:58:27.339 [DEBUG] [Thread-194424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:58:27.339 [DEBUG] [Thread-194424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:58:27.379 [DEBUG] [Thread-194424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:58:27.380 [DEBUG] [Thread-194424] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:58:27.383 [DEBUG] [Thread-194424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:58:27.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:58:27.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:58:27.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:58:27.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:58:27.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:58:27.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:58:27.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:58:27.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:58:27.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:58:27.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.915388 -999.00   +8.50  21.95     72   +3.80 1 1 1 1 1     0    0 4.21 -21.44 ZNESW 21.9 21.9 159.8 32.6 8.9 -24.5 8.8 -23.5 8.6 -22.6 8.9 -23.7
2026-02-14T23:58:27.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:58:27.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:58:27.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.915388
2026-02-14T23:58:27.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:58:27.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:58:27.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:58:27.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:58:27.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:58:27.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:58:10', tmtdew=5.64, humidity=67.52, cloud=0.0, wind=35.32, temperature=8.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:58:11', seeing=2.05, atlas_timestamp='2026-02-14T21:58:09.523', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006249999999999645, 0.017250000000000654, -0.01699999999999946, 0.020500000000000185, 0.039250000000000895, 0.0024999999999995026, 0.03625000000000078, 0.03449999999999953, 0.04650000000000176, -0.05874999999999986, 0.045999999999999375, 0.07900000000000063, 0.06324999999999825, 0.05299999999999905, 0.0259999999999998, 0.08924999999999983, 0.08050000000000068, 0.03199999999999825, 0.009249999999997982, 0.08099999999999952, 0.020749999999999602, 0.02525000000000155, 0.06574999999999953, 0.08849999999999802, 0.0495000000000001, 0.0337499999999995, 0.0, 0.10000000000000142, 0.060000000000002274, 0.0470000000000006, 0.11500000000000021, 0.07324999999999804], zp_timestamp='2026-02-14T21:55:00')
2026-02-14T23:58:27.407 [DEBUG] [Thread-194424] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:58:27.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-14T23:58:27.502 [DEBUG] [Thread-194427] [transport.py] [_log()] starting thread (client mode): 0xa2d7bfd0
2026-02-14T23:58:27.502 [DEBUG] [Thread-194427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:58:27.517 [DEBUG] [Thread-194427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:58:27.517 [INFO] [Thread-194427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:58:27.525 [DEBUG] [Thread-194427] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:58:27.525 [DEBUG] [Thread-194427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:58:27.525 [DEBUG] [Thread-194427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:58:27.525 [DEBUG] [Thread-194427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:58:27.525 [DEBUG] [Thread-194427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:58:27.525 [DEBUG] [Thread-194427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:58:27.525 [DEBUG] [Thread-194427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:58:27.525 [DEBUG] [Thread-194427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:58:27.525 [DEBUG] [Thread-194427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:58:27.525 [DEBUG] [Thread-194427] [transport.py] [_log()] client lang: <none>
2026-02-14T23:58:27.525 [DEBUG] [Thread-194427] [transport.py] [_log()] server lang: <none>
2026-02-14T23:58:27.525 [DEBUG] [Thread-194427] [transport.py] [_log()] kex follows: False
2026-02-14T23:58:27.525 [DEBUG] [Thread-194427] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:58:27.525 [DEBUG] [Thread-194427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:58:27.525 [DEBUG] [Thread-194427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:58:27.526 [DEBUG] [Thread-194427] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:58:27.526 [DEBUG] [Thread-194427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:58:27.526 [DEBUG] [Thread-194427] [transport.py] [_log()] Compression: none
2026-02-14T23:58:27.526 [DEBUG] [Thread-194427] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:58:27.583 [DEBUG] [Thread-194427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:58:27.584 [DEBUG] [Thread-194427] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:58:27.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:58:27.585 [DEBUG] [Thread-194427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:58:27.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:58:27.640 [DEBUG] [Thread-194427] [transport.py] [_log()] userauth is OK
2026-02-14T23:58:27.640 [DEBUG] [Thread-194427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:58:27.640 [DEBUG] [Thread-194427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:58:27.640 [DEBUG] [Thread-194427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:58:27.640 [DEBUG] [Thread-194427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:58:27.658 [INFO] [Thread-194427] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:58:27.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-14T23:58:27.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:58:28.435 [DEBUG] [Thread-194427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:58:28.436 [DEBUG] [Thread-194427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:58:28.483 [DEBUG] [Thread-194427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:58:28.484 [DEBUG] [Thread-194427] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:58:28.495 [DEBUG] [Thread-194427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:58:28.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:58:28.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-14T23:58:28.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-14T23:58:28.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:58:28.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:58:28.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:58:28.538 [DEBUG] [Thread-194427] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:58:41.480 [DEBUG] [Thread-194429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:58:56.531 [DEBUG] [Thread-194430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:58:58.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:58:58.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:58:58.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-14T23:59:00.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 58, 47), 5.58, 67.54, 0.0, 33.65, 8.56, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:59:00.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:58:47
2026-02-14T23:59:00.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:59:01.135 [DEBUG] [Thread-194431] [transport.py] [_log()] starting thread (client mode): 0xa2d13100
2026-02-14T23:59:01.135 [DEBUG] [Thread-194431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:59:01.150 [DEBUG] [Thread-194431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:59:01.150 [INFO] [Thread-194431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:59:01.152 [DEBUG] [Thread-194431] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:59:01.152 [DEBUG] [Thread-194431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:59:01.152 [DEBUG] [Thread-194431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:59:01.152 [DEBUG] [Thread-194431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:59:01.152 [DEBUG] [Thread-194431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:59:01.152 [DEBUG] [Thread-194431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:59:01.152 [DEBUG] [Thread-194431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:59:01.152 [DEBUG] [Thread-194431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:59:01.152 [DEBUG] [Thread-194431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:59:01.152 [DEBUG] [Thread-194431] [transport.py] [_log()] client lang: <none>
2026-02-14T23:59:01.152 [DEBUG] [Thread-194431] [transport.py] [_log()] server lang: <none>
2026-02-14T23:59:01.153 [DEBUG] [Thread-194431] [transport.py] [_log()] kex follows: False
2026-02-14T23:59:01.153 [DEBUG] [Thread-194431] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:59:01.153 [DEBUG] [Thread-194431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:59:01.153 [DEBUG] [Thread-194431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:59:01.153 [DEBUG] [Thread-194431] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:59:01.153 [DEBUG] [Thread-194431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:59:01.153 [DEBUG] [Thread-194431] [transport.py] [_log()] Compression: none
2026-02-14T23:59:01.153 [DEBUG] [Thread-194431] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:59:01.167 [DEBUG] [Thread-194431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:59:01.168 [DEBUG] [Thread-194431] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:59:01.168 [DEBUG] [Thread-194431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:59:01.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:59:01.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:59:01.170 [DEBUG] [Thread-194431] [transport.py] [_log()] userauth is OK
2026-02-14T23:59:01.171 [DEBUG] [Thread-194431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:59:01.171 [DEBUG] [Thread-194431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:59:01.171 [DEBUG] [Thread-194431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:59:01.171 [DEBUG] [Thread-194431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:59:01.193 [INFO] [Thread-194431] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:59:01.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:59:01.804 [DEBUG] [Thread-194431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:59:01.804 [DEBUG] [Thread-194431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:59:01.804 [DEBUG] [Thread-194431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:59:01.844 [DEBUG] [Thread-194431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:59:01.845 [DEBUG] [Thread-194431] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:59:01.848 [DEBUG] [Thread-194431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:59:01.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:59:01.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:59:01.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:59:01.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:59:01.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:59:01.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:59:01.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:59:01.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:59:01.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:59:01.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.915735 -999.00   +8.50  21.51     72   +3.80 1 1 1 1 1     0    0 4.11 -21.99 ZNESW 21.5 21.5 151.0 28.9 8.9 -24.7 8.8 -23.6 8.6 -22.6 8.9 -23.6
2026-02-14T23:59:01.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:59:01.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:59:01.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.915735
2026-02-14T23:59:01.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:59:01.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:59:01.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:59:01.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:59:01.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:59:01.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:58:47', tmtdew=5.58, humidity=67.54, cloud=0.0, wind=33.65, temperature=8.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:58:47', seeing=2.12, atlas_timestamp='2026-02-14T21:58:39.504', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006249999999999645, 0.017250000000000654, -0.01699999999999946, 0.020500000000000185, 0.039250000000000895, 0.0024999999999995026, 0.03625000000000078, 0.03449999999999953, 0.04650000000000176, -0.05874999999999986, 0.045999999999999375, 0.07900000000000063, 0.06324999999999825, 0.05299999999999905, 0.0259999999999998, 0.08924999999999983, 0.08050000000000068, 0.03199999999999825, 0.009249999999997982, 0.08099999999999952, 0.020749999999999602, 0.02525000000000155, 0.06574999999999953, 0.08849999999999802, 0.0495000000000001, 0.0337499999999995, 0.0, 0.10000000000000142, 0.060000000000002274, 0.0470000000000006, 0.11500000000000021, 0.07324999999999804], zp_timestamp='2026-02-14T21:55:00')
2026-02-14T23:59:01.876 [DEBUG] [Thread-194431] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:59:01.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-14T23:59:01.972 [DEBUG] [Thread-194434] [transport.py] [_log()] starting thread (client mode): 0xa57d7370
2026-02-14T23:59:01.972 [DEBUG] [Thread-194434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:59:01.986 [DEBUG] [Thread-194434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:59:01.987 [INFO] [Thread-194434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:59:01.994 [DEBUG] [Thread-194434] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:59:01.995 [DEBUG] [Thread-194434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:59:01.995 [DEBUG] [Thread-194434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:59:01.995 [DEBUG] [Thread-194434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:59:01.995 [DEBUG] [Thread-194434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:59:01.995 [DEBUG] [Thread-194434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:59:01.995 [DEBUG] [Thread-194434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:59:01.995 [DEBUG] [Thread-194434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:59:01.995 [DEBUG] [Thread-194434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:59:01.995 [DEBUG] [Thread-194434] [transport.py] [_log()] client lang: <none>
2026-02-14T23:59:01.995 [DEBUG] [Thread-194434] [transport.py] [_log()] server lang: <none>
2026-02-14T23:59:01.995 [DEBUG] [Thread-194434] [transport.py] [_log()] kex follows: False
2026-02-14T23:59:01.995 [DEBUG] [Thread-194434] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:59:01.995 [DEBUG] [Thread-194434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:59:01.995 [DEBUG] [Thread-194434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:59:01.995 [DEBUG] [Thread-194434] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:59:01.995 [DEBUG] [Thread-194434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:59:01.995 [DEBUG] [Thread-194434] [transport.py] [_log()] Compression: none
2026-02-14T23:59:01.995 [DEBUG] [Thread-194434] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:59:02.052 [DEBUG] [Thread-194434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:59:02.053 [DEBUG] [Thread-194434] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:59:02.053 [DEBUG] [Thread-194434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:59:02.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:59:02.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:59:02.108 [DEBUG] [Thread-194434] [transport.py] [_log()] userauth is OK
2026-02-14T23:59:02.108 [DEBUG] [Thread-194434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:59:02.108 [DEBUG] [Thread-194434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:59:02.108 [DEBUG] [Thread-194434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:59:02.108 [DEBUG] [Thread-194434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:59:02.127 [INFO] [Thread-194434] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:59:02.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-14T23:59:02.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:59:02.917 [DEBUG] [Thread-194434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:59:02.918 [DEBUG] [Thread-194434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:59:02.966 [DEBUG] [Thread-194434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:59:02.966 [DEBUG] [Thread-194434] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:59:02.975 [DEBUG] [Thread-194434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:59:02.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:59:02.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-14T23:59:02.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-14T23:59:03.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:59:03.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:59:03.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:59:03.008 [DEBUG] [Thread-194434] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:59:07.064 [DEBUG] [Thread-194436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:59:11.567 [DEBUG] [Thread-194437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:59:13.930 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:59:13.931 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:59:26.628 [DEBUG] [Thread-194438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:59:33.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-14T23:59:33.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-14T23:59:33.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-14T23:59:35.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 59, 22), 5.58, 67.59, 0.0, 34.32, 8.62, 0, 0, 0, 2, 0, 0),)
2026-02-14T23:59:35.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:59:22
2026-02-14T23:59:35.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-14T23:59:35.670 [DEBUG] [Thread-194439] [transport.py] [_log()] starting thread (client mode): 0xa2d00c70
2026-02-14T23:59:35.671 [DEBUG] [Thread-194439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:59:35.691 [DEBUG] [Thread-194439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-14T23:59:35.691 [INFO] [Thread-194439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-14T23:59:35.694 [DEBUG] [Thread-194439] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:59:35.694 [DEBUG] [Thread-194439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-14T23:59:35.694 [DEBUG] [Thread-194439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:59:35.694 [DEBUG] [Thread-194439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:59:35.694 [DEBUG] [Thread-194439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:59:35.694 [DEBUG] [Thread-194439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:59:35.694 [DEBUG] [Thread-194439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:59:35.694 [DEBUG] [Thread-194439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:59:35.694 [DEBUG] [Thread-194439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:59:35.694 [DEBUG] [Thread-194439] [transport.py] [_log()] client lang: <none>
2026-02-14T23:59:35.694 [DEBUG] [Thread-194439] [transport.py] [_log()] server lang: <none>
2026-02-14T23:59:35.694 [DEBUG] [Thread-194439] [transport.py] [_log()] kex follows: False
2026-02-14T23:59:35.694 [DEBUG] [Thread-194439] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:59:35.694 [DEBUG] [Thread-194439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:59:35.694 [DEBUG] [Thread-194439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:59:35.694 [DEBUG] [Thread-194439] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:59:35.694 [DEBUG] [Thread-194439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:59:35.694 [DEBUG] [Thread-194439] [transport.py] [_log()] Compression: none
2026-02-14T23:59:35.694 [DEBUG] [Thread-194439] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:59:35.703 [DEBUG] [Thread-194439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:59:35.703 [DEBUG] [Thread-194439] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:59:35.704 [DEBUG] [Thread-194439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-14T23:59:35.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-14T23:59:35.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:59:35.705 [DEBUG] [Thread-194439] [transport.py] [_log()] userauth is OK
2026-02-14T23:59:35.706 [DEBUG] [Thread-194439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:59:35.706 [DEBUG] [Thread-194439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:59:35.706 [DEBUG] [Thread-194439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-14T23:59:35.706 [DEBUG] [Thread-194439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:59:35.730 [INFO] [Thread-194439] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:59:35.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:59:36.325 [DEBUG] [Thread-194439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:59:36.325 [DEBUG] [Thread-194439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:59:36.325 [DEBUG] [Thread-194439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-14T23:59:36.366 [DEBUG] [Thread-194439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:59:36.366 [DEBUG] [Thread-194439] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:59:36.368 [DEBUG] [Thread-194439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:59:36.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:59:36.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-14T23:59:36.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-14T23:59:36.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-14T23:59:36.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:59:36.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-14T23:59:36.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:59:36.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:59:36.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-14T23:59:36.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.916083 -999.00   +8.50  22.24     72   +3.80 1 1 1 1 1     0    0 4.28 -22.92 ZNESW 22.2 22.2 159.0 30.7 8.9 -24.6 8.8 -23.6 8.6 -22.7 8.9 -23.8
2026-02-14T23:59:36.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-14T23:59:36.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-14T23:59:36.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.916083
2026-02-14T23:59:36.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-14T23:59:36.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-14T23:59:36.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-14T23:59:36.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-14T23:59:36.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-14T23:59:36.392 [DEBUG] [Thread-194439] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:59:36.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:59:22', tmtdew=5.58, humidity=67.59, cloud=0.0, wind=34.32, temperature=8.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:59:22', seeing=1.95, atlas_timestamp='2026-02-14T21:59:09.571', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006249999999999645, 0.017250000000000654, -0.01699999999999946, 0.020500000000000185, 0.039250000000000895, 0.0024999999999995026, 0.03625000000000078, 0.03449999999999953, 0.04650000000000176, -0.05874999999999986, 0.045999999999999375, 0.07900000000000063, 0.06324999999999825, 0.05299999999999905, 0.0259999999999998, 0.08924999999999983, 0.08050000000000068, 0.03199999999999825, 0.009249999999997982, 0.08099999999999952, 0.020749999999999602, 0.02525000000000155, 0.06574999999999953, 0.08849999999999802, 0.0495000000000001, 0.0337499999999995, 0.0, 0.10000000000000142, 0.060000000000002274, 0.0470000000000006, 0.11500000000000021, 0.07324999999999804], zp_timestamp='2026-02-14T21:55:00')
2026-02-14T23:59:36.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-14T23:59:36.487 [DEBUG] [Thread-194442] [transport.py] [_log()] starting thread (client mode): 0xa2d12860
2026-02-14T23:59:36.487 [DEBUG] [Thread-194442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-14T23:59:36.502 [DEBUG] [Thread-194442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-14T23:59:36.502 [INFO] [Thread-194442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-14T23:59:36.510 [DEBUG] [Thread-194442] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-14T23:59:36.510 [DEBUG] [Thread-194442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-14T23:59:36.510 [DEBUG] [Thread-194442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-14T23:59:36.510 [DEBUG] [Thread-194442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:59:36.510 [DEBUG] [Thread-194442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-14T23:59:36.510 [DEBUG] [Thread-194442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:59:36.510 [DEBUG] [Thread-194442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-14T23:59:36.510 [DEBUG] [Thread-194442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-14T23:59:36.510 [DEBUG] [Thread-194442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-14T23:59:36.510 [DEBUG] [Thread-194442] [transport.py] [_log()] client lang: <none>
2026-02-14T23:59:36.510 [DEBUG] [Thread-194442] [transport.py] [_log()] server lang: <none>
2026-02-14T23:59:36.510 [DEBUG] [Thread-194442] [transport.py] [_log()] kex follows: False
2026-02-14T23:59:36.510 [DEBUG] [Thread-194442] [transport.py] [_log()] === Key exchange agreements ===
2026-02-14T23:59:36.511 [DEBUG] [Thread-194442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-14T23:59:36.511 [DEBUG] [Thread-194442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-14T23:59:36.511 [DEBUG] [Thread-194442] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-14T23:59:36.511 [DEBUG] [Thread-194442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-14T23:59:36.511 [DEBUG] [Thread-194442] [transport.py] [_log()] Compression: none
2026-02-14T23:59:36.511 [DEBUG] [Thread-194442] [transport.py] [_log()] === End of kex handshake ===
2026-02-14T23:59:36.572 [DEBUG] [Thread-194442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-14T23:59:36.573 [DEBUG] [Thread-194442] [transport.py] [_log()] Switch to new keys ...
2026-02-14T23:59:36.574 [DEBUG] [Thread-194442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-14T23:59:36.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-14T23:59:36.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-14T23:59:36.628 [DEBUG] [Thread-194442] [transport.py] [_log()] userauth is OK
2026-02-14T23:59:36.629 [DEBUG] [Thread-194442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-14T23:59:36.629 [DEBUG] [Thread-194442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-14T23:59:36.629 [DEBUG] [Thread-194442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-14T23:59:36.629 [DEBUG] [Thread-194442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-14T23:59:36.648 [INFO] [Thread-194442] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-14T23:59:36.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-14T23:59:36.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-14T23:59:37.409 [DEBUG] [Thread-194442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-14T23:59:37.410 [DEBUG] [Thread-194442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-14T23:59:37.457 [DEBUG] [Thread-194442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-14T23:59:37.457 [DEBUG] [Thread-194442] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-14T23:59:37.467 [DEBUG] [Thread-194442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-14T23:59:37.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-14T23:59:37.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-14T23:59:37.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-14T23:59:37.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-14T23:59:37.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-14T23:59:37.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-14T23:59:37.505 [DEBUG] [Thread-194442] [transport.py] [_log()] EOF in transport thread
2026-02-14T23:59:41.662 [DEBUG] [Thread-194444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-14T23:59:56.713 [DEBUG] [Thread-194445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:00:07.118 [DEBUG] [Thread-194446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:00:07.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:00:07.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:00:07.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-15T00:00:09.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 14, 23, 59, 57), 5.63, 67.56, 0.0, 31.83, 8.61, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:00:09.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-14 23:59:57
2026-02-15T00:00:10.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:00:10.170 [DEBUG] [Thread-194447] [transport.py] [_log()] starting thread (client mode): 0xa57d47c0
2026-02-15T00:00:10.170 [DEBUG] [Thread-194447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:00:10.182 [DEBUG] [Thread-194447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:00:10.182 [INFO] [Thread-194447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:00:10.183 [DEBUG] [Thread-194447] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:00:10.183 [DEBUG] [Thread-194447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:00:10.183 [DEBUG] [Thread-194447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:00:10.183 [DEBUG] [Thread-194447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:00:10.183 [DEBUG] [Thread-194447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:00:10.183 [DEBUG] [Thread-194447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:00:10.184 [DEBUG] [Thread-194447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:00:10.184 [DEBUG] [Thread-194447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:00:10.184 [DEBUG] [Thread-194447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:00:10.184 [DEBUG] [Thread-194447] [transport.py] [_log()] client lang: <none>
2026-02-15T00:00:10.184 [DEBUG] [Thread-194447] [transport.py] [_log()] server lang: <none>
2026-02-15T00:00:10.184 [DEBUG] [Thread-194447] [transport.py] [_log()] kex follows: False
2026-02-15T00:00:10.184 [DEBUG] [Thread-194447] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:00:10.184 [DEBUG] [Thread-194447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:00:10.184 [DEBUG] [Thread-194447] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:00:10.184 [DEBUG] [Thread-194447] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:00:10.184 [DEBUG] [Thread-194447] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:00:10.184 [DEBUG] [Thread-194447] [transport.py] [_log()] Compression: none
2026-02-15T00:00:10.184 [DEBUG] [Thread-194447] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:00:10.195 [DEBUG] [Thread-194447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:00:10.196 [DEBUG] [Thread-194447] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:00:10.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:00:10.196 [DEBUG] [Thread-194447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:00:10.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:00:10.196 [DEBUG] [Thread-194447] [transport.py] [_log()] userauth is OK
2026-02-15T00:00:10.197 [DEBUG] [Thread-194447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:00:10.197 [DEBUG] [Thread-194447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:00:10.197 [DEBUG] [Thread-194447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:00:10.197 [DEBUG] [Thread-194447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:00:10.213 [INFO] [Thread-194447] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:00:10.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:00:10.807 [DEBUG] [Thread-194447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:00:10.807 [DEBUG] [Thread-194447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:00:10.807 [DEBUG] [Thread-194447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:00:10.848 [DEBUG] [Thread-194447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:00:10.848 [DEBUG] [Thread-194447] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:00:10.849 [DEBUG] [Thread-194447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:00:10.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:00:10.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:00:10.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:00:10.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:00:10.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:00:10.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:00:10.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:00:10.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:00:10.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:00:10.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.916430 -999.00   +8.40  22.68     72   +3.80 1 1 1 1 1     0    0 4.10 -25.22 ZNESW 22.7 22.7 155.4 26.8 8.9 -24.5 8.8 -23.6 8.6 -22.7 8.9 -23.9
2026-02-15T00:00:10.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:00:10.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:00:10.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.916430
2026-02-15T00:00:10.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:00:10.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:00:10.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:00:10.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:00:10.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:00:10.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-14T23:59:57', tmtdew=5.63, humidity=67.56, cloud=0.0, wind=31.83, temperature=8.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-14T23:59:58', seeing=2.33, atlas_timestamp='2026-02-14T21:59:39.552', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006249999999999645, 0.017250000000000654, -0.01699999999999946, 0.020500000000000185, 0.039250000000000895, 0.0024999999999995026, 0.03625000000000078, 0.03449999999999953, 0.04650000000000176, -0.05874999999999986, 0.045999999999999375, 0.07900000000000063, 0.06324999999999825, 0.05299999999999905, 0.0259999999999998, 0.08924999999999983, 0.08050000000000068, 0.03199999999999825, 0.009249999999997982, 0.08099999999999952, 0.020749999999999602, 0.02525000000000155, 0.06574999999999953, 0.08849999999999802, 0.0495000000000001, 0.0337499999999995, 0.0, 0.10000000000000142, 0.060000000000002274, 0.0470000000000006, 0.11500000000000021, 0.07324999999999804], zp_timestamp='2026-02-14T21:57:00')
2026-02-15T00:00:10.861 [DEBUG] [Thread-194447] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:00:10.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-15T00:00:10.946 [DEBUG] [Thread-194450] [transport.py] [_log()] starting thread (client mode): 0xa2d6a1a0
2026-02-15T00:00:10.946 [DEBUG] [Thread-194450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:00:10.961 [DEBUG] [Thread-194450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:00:10.961 [INFO] [Thread-194450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:00:10.969 [DEBUG] [Thread-194450] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:00:10.969 [DEBUG] [Thread-194450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:00:10.969 [DEBUG] [Thread-194450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:00:10.969 [DEBUG] [Thread-194450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:00:10.969 [DEBUG] [Thread-194450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:00:10.969 [DEBUG] [Thread-194450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:00:10.969 [DEBUG] [Thread-194450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:00:10.969 [DEBUG] [Thread-194450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:00:10.969 [DEBUG] [Thread-194450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:00:10.969 [DEBUG] [Thread-194450] [transport.py] [_log()] client lang: <none>
2026-02-15T00:00:10.969 [DEBUG] [Thread-194450] [transport.py] [_log()] server lang: <none>
2026-02-15T00:00:10.969 [DEBUG] [Thread-194450] [transport.py] [_log()] kex follows: False
2026-02-15T00:00:10.969 [DEBUG] [Thread-194450] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:00:10.969 [DEBUG] [Thread-194450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:00:10.969 [DEBUG] [Thread-194450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:00:10.969 [DEBUG] [Thread-194450] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:00:10.969 [DEBUG] [Thread-194450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:00:10.969 [DEBUG] [Thread-194450] [transport.py] [_log()] Compression: none
2026-02-15T00:00:10.969 [DEBUG] [Thread-194450] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:00:11.026 [DEBUG] [Thread-194450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:00:11.026 [DEBUG] [Thread-194450] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:00:11.026 [DEBUG] [Thread-194450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:00:11.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:00:11.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:00:11.083 [DEBUG] [Thread-194450] [transport.py] [_log()] userauth is OK
2026-02-15T00:00:11.083 [DEBUG] [Thread-194450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:00:11.083 [DEBUG] [Thread-194450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:00:11.083 [DEBUG] [Thread-194450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:00:11.083 [DEBUG] [Thread-194450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:00:11.100 [INFO] [Thread-194450] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:00:11.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-15T00:00:11.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:00:11.742 [DEBUG] [Thread-194452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:00:11.860 [DEBUG] [Thread-194450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:00:11.860 [DEBUG] [Thread-194450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:00:11.909 [DEBUG] [Thread-194450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:00:11.909 [DEBUG] [Thread-194450] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:00:11.917 [DEBUG] [Thread-194450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:00:11.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:00:11.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-15T00:00:11.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-15T00:00:11.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:00:11.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:00:11.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:00:11.950 [DEBUG] [Thread-194450] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:00:14.138 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:00:14.139 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:00:26.792 [DEBUG] [Thread-194453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:00:41.828 [DEBUG] [Thread-194454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:00:41.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:00:41.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:00:41.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-15T00:00:43.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 0, 33), 5.75, 67.14, 0.0, 40.68, 8.88, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:00:43.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:00:33
2026-02-15T00:00:44.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:00:44.447 [DEBUG] [Thread-194455] [transport.py] [_log()] starting thread (client mode): 0xa2d11e40
2026-02-15T00:00:44.447 [DEBUG] [Thread-194455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:00:44.465 [DEBUG] [Thread-194455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:00:44.465 [INFO] [Thread-194455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:00:44.467 [DEBUG] [Thread-194455] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:00:44.467 [DEBUG] [Thread-194455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:00:44.467 [DEBUG] [Thread-194455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:00:44.467 [DEBUG] [Thread-194455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:00:44.467 [DEBUG] [Thread-194455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:00:44.467 [DEBUG] [Thread-194455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:00:44.467 [DEBUG] [Thread-194455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:00:44.467 [DEBUG] [Thread-194455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:00:44.467 [DEBUG] [Thread-194455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:00:44.467 [DEBUG] [Thread-194455] [transport.py] [_log()] client lang: <none>
2026-02-15T00:00:44.467 [DEBUG] [Thread-194455] [transport.py] [_log()] server lang: <none>
2026-02-15T00:00:44.467 [DEBUG] [Thread-194455] [transport.py] [_log()] kex follows: False
2026-02-15T00:00:44.467 [DEBUG] [Thread-194455] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:00:44.467 [DEBUG] [Thread-194455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:00:44.467 [DEBUG] [Thread-194455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:00:44.467 [DEBUG] [Thread-194455] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:00:44.467 [DEBUG] [Thread-194455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:00:44.467 [DEBUG] [Thread-194455] [transport.py] [_log()] Compression: none
2026-02-15T00:00:44.467 [DEBUG] [Thread-194455] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:00:44.478 [DEBUG] [Thread-194455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:00:44.479 [DEBUG] [Thread-194455] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:00:44.479 [DEBUG] [Thread-194455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:00:44.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:00:44.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:00:44.480 [DEBUG] [Thread-194455] [transport.py] [_log()] userauth is OK
2026-02-15T00:00:44.481 [DEBUG] [Thread-194455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:00:44.481 [DEBUG] [Thread-194455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:00:44.481 [DEBUG] [Thread-194455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:00:44.481 [DEBUG] [Thread-194455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:00:44.504 [INFO] [Thread-194455] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:00:44.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:00:45.145 [DEBUG] [Thread-194455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:00:45.146 [DEBUG] [Thread-194455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:00:45.146 [DEBUG] [Thread-194455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:00:45.186 [DEBUG] [Thread-194455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:00:45.186 [DEBUG] [Thread-194455] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:00:45.189 [DEBUG] [Thread-194455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:00:45.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:00:45.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:00:45.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:00:45.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:00:45.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:00:45.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:00:45.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:00:45.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:00:45.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:00:45.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.917124 -999.00   +8.40  20.71     72   +3.80 1 1 1 1 1     0    0 4.14 -25.21 ZNESW 20.7 20.7 157.2 35.6 8.9 -24.5 8.8 -23.5 8.6 -22.7 8.9 -23.8
2026-02-15T00:00:45.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:00:45.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:00:45.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.917124
2026-02-15T00:00:45.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:00:45.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:00:45.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:00:45.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:00:45.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:00:45.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:00:33', tmtdew=5.75, humidity=67.14, cloud=0.0, wind=40.68, temperature=8.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:00:33', seeing=2.33, atlas_timestamp='2026-02-14T22:00:39.514', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006249999999999645, 0.017250000000000654, -0.01699999999999946, 0.020500000000000185, 0.039250000000000895, 0.0024999999999995026, 0.03625000000000078, 0.03449999999999953, 0.04650000000000176, -0.05874999999999986, 0.045999999999999375, 0.07900000000000063, 0.06324999999999825, 0.05299999999999905, 0.0259999999999998, 0.08924999999999983, 0.08050000000000068, 0.03199999999999825, 0.009249999999997982, 0.08099999999999952, 0.020749999999999602, 0.02525000000000155, 0.06574999999999953, 0.08849999999999802, 0.0495000000000001, 0.0337499999999995, 0.0, 0.10000000000000142, 0.060000000000002274, 0.0470000000000006, 0.11500000000000021, 0.07324999999999804], zp_timestamp='2026-02-14T21:57:00')
2026-02-15T00:00:45.215 [DEBUG] [Thread-194455] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:00:45.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-15T00:00:45.311 [DEBUG] [Thread-194458] [transport.py] [_log()] starting thread (client mode): 0xa2d03b20
2026-02-15T00:00:45.311 [DEBUG] [Thread-194458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:00:45.325 [DEBUG] [Thread-194458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:00:45.326 [INFO] [Thread-194458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:00:45.333 [DEBUG] [Thread-194458] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:00:45.334 [DEBUG] [Thread-194458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:00:45.334 [DEBUG] [Thread-194458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:00:45.334 [DEBUG] [Thread-194458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:00:45.335 [DEBUG] [Thread-194458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:00:45.335 [DEBUG] [Thread-194458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:00:45.335 [DEBUG] [Thread-194458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:00:45.335 [DEBUG] [Thread-194458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:00:45.335 [DEBUG] [Thread-194458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:00:45.335 [DEBUG] [Thread-194458] [transport.py] [_log()] client lang: <none>
2026-02-15T00:00:45.335 [DEBUG] [Thread-194458] [transport.py] [_log()] server lang: <none>
2026-02-15T00:00:45.335 [DEBUG] [Thread-194458] [transport.py] [_log()] kex follows: False
2026-02-15T00:00:45.335 [DEBUG] [Thread-194458] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:00:45.335 [DEBUG] [Thread-194458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:00:45.335 [DEBUG] [Thread-194458] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:00:45.335 [DEBUG] [Thread-194458] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:00:45.335 [DEBUG] [Thread-194458] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:00:45.335 [DEBUG] [Thread-194458] [transport.py] [_log()] Compression: none
2026-02-15T00:00:45.336 [DEBUG] [Thread-194458] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:00:45.392 [DEBUG] [Thread-194458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:00:45.392 [DEBUG] [Thread-194458] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:00:45.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:00:45.393 [DEBUG] [Thread-194458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:00:45.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:00:45.448 [DEBUG] [Thread-194458] [transport.py] [_log()] userauth is OK
2026-02-15T00:00:45.448 [DEBUG] [Thread-194458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:00:45.448 [DEBUG] [Thread-194458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:00:45.449 [DEBUG] [Thread-194458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:00:45.449 [DEBUG] [Thread-194458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:00:45.467 [INFO] [Thread-194458] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:00:45.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-15T00:00:45.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:00:46.316 [DEBUG] [Thread-194458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:00:46.316 [DEBUG] [Thread-194458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:00:46.366 [DEBUG] [Thread-194458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:00:46.367 [DEBUG] [Thread-194458] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:00:46.377 [DEBUG] [Thread-194458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:00:46.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:00:46.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-15T00:00:46.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-15T00:00:46.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:00:46.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:00:46.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:00:46.413 [DEBUG] [Thread-194458] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:00:56.863 [DEBUG] [Thread-194460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:01:07.197 [DEBUG] [Thread-194461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:01:11.923 [DEBUG] [Thread-194462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:01:14.339 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:01:14.340 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:01:16.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:01:16.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:01:16.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-15T00:01:18.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 1, 8), 5.56, 67.66, 0.0, 30.98, 8.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:01:18.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:01:08
2026-02-15T00:01:18.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:01:18.836 [DEBUG] [Thread-194463] [transport.py] [_log()] starting thread (client mode): 0xa2d11180
2026-02-15T00:01:18.836 [DEBUG] [Thread-194463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:01:18.852 [DEBUG] [Thread-194463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:01:18.852 [INFO] [Thread-194463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:01:18.853 [DEBUG] [Thread-194463] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:01:18.853 [DEBUG] [Thread-194463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:01:18.853 [DEBUG] [Thread-194463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:01:18.853 [DEBUG] [Thread-194463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:01:18.853 [DEBUG] [Thread-194463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:01:18.853 [DEBUG] [Thread-194463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:01:18.853 [DEBUG] [Thread-194463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:01:18.853 [DEBUG] [Thread-194463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:01:18.853 [DEBUG] [Thread-194463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:01:18.853 [DEBUG] [Thread-194463] [transport.py] [_log()] client lang: <none>
2026-02-15T00:01:18.853 [DEBUG] [Thread-194463] [transport.py] [_log()] server lang: <none>
2026-02-15T00:01:18.853 [DEBUG] [Thread-194463] [transport.py] [_log()] kex follows: False
2026-02-15T00:01:18.853 [DEBUG] [Thread-194463] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:01:18.853 [DEBUG] [Thread-194463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:01:18.853 [DEBUG] [Thread-194463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:01:18.853 [DEBUG] [Thread-194463] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:01:18.853 [DEBUG] [Thread-194463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:01:18.853 [DEBUG] [Thread-194463] [transport.py] [_log()] Compression: none
2026-02-15T00:01:18.853 [DEBUG] [Thread-194463] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:01:18.861 [DEBUG] [Thread-194463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:01:18.862 [DEBUG] [Thread-194463] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:01:18.862 [DEBUG] [Thread-194463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:01:18.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:01:18.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:01:18.863 [DEBUG] [Thread-194463] [transport.py] [_log()] userauth is OK
2026-02-15T00:01:18.863 [DEBUG] [Thread-194463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:01:18.863 [DEBUG] [Thread-194463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:01:18.863 [DEBUG] [Thread-194463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:01:18.864 [DEBUG] [Thread-194463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:01:18.878 [INFO] [Thread-194463] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:01:18.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:01:19.431 [DEBUG] [Thread-194463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:01:19.432 [DEBUG] [Thread-194463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:01:19.432 [DEBUG] [Thread-194463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:01:19.473 [DEBUG] [Thread-194463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:01:19.473 [DEBUG] [Thread-194463] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:01:19.482 [DEBUG] [Thread-194463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:01:19.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:01:19.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:01:19.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:01:19.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:01:19.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:01:19.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:01:19.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:01:19.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:01:19.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:01:19.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.917471 -999.00   +8.40  29.66     72   +3.80 1 1 1 1 1     0    0 4.11 -22.73 ZNESW 29.7 29.7 159.4 33.3 8.9 -24.6 8.7 -23.7 8.5 -22.6 8.9 -23.8
2026-02-15T00:01:19.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:01:19.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:01:19.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.917471
2026-02-15T00:01:19.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:01:19.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:01:19.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:01:19.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:01:19.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:01:19.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:01:08', tmtdew=5.56, humidity=67.66, cloud=0.0, wind=30.98, temperature=8.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:01:08', seeing=2.38, atlas_timestamp='2026-02-14T22:01:09.494', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006249999999999645, 0.017250000000000654, -0.01699999999999946, 0.020500000000000185, 0.039250000000000895, 0.0024999999999995026, 0.03625000000000078, 0.03449999999999953, 0.04650000000000176, -0.05874999999999986, 0.045999999999999375, 0.07900000000000063, 0.06324999999999825, 0.05299999999999905, 0.0259999999999998, 0.08924999999999983, 0.08050000000000068, 0.03199999999999825, 0.009249999999997982, 0.08099999999999952, 0.020749999999999602, 0.02525000000000155, 0.06574999999999953, 0.08849999999999802, 0.0495000000000001, 0.0337499999999995, 0.0, 0.10000000000000142, 0.060000000000002274, 0.0470000000000006, 0.11500000000000021, 0.07324999999999804], zp_timestamp='2026-02-14T21:57:00')
2026-02-15T00:01:19.509 [DEBUG] [Thread-194463] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:01:19.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-15T00:01:19.602 [DEBUG] [Thread-194466] [transport.py] [_log()] starting thread (client mode): 0xa2d12650
2026-02-15T00:01:19.603 [DEBUG] [Thread-194466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:01:19.617 [DEBUG] [Thread-194466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:01:19.618 [INFO] [Thread-194466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:01:19.625 [DEBUG] [Thread-194466] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:01:19.626 [DEBUG] [Thread-194466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:01:19.626 [DEBUG] [Thread-194466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:01:19.626 [DEBUG] [Thread-194466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:01:19.626 [DEBUG] [Thread-194466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:01:19.626 [DEBUG] [Thread-194466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:01:19.626 [DEBUG] [Thread-194466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:01:19.626 [DEBUG] [Thread-194466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:01:19.626 [DEBUG] [Thread-194466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:01:19.626 [DEBUG] [Thread-194466] [transport.py] [_log()] client lang: <none>
2026-02-15T00:01:19.626 [DEBUG] [Thread-194466] [transport.py] [_log()] server lang: <none>
2026-02-15T00:01:19.626 [DEBUG] [Thread-194466] [transport.py] [_log()] kex follows: False
2026-02-15T00:01:19.626 [DEBUG] [Thread-194466] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:01:19.626 [DEBUG] [Thread-194466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:01:19.626 [DEBUG] [Thread-194466] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:01:19.626 [DEBUG] [Thread-194466] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:01:19.626 [DEBUG] [Thread-194466] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:01:19.626 [DEBUG] [Thread-194466] [transport.py] [_log()] Compression: none
2026-02-15T00:01:19.627 [DEBUG] [Thread-194466] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:01:19.683 [DEBUG] [Thread-194466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:01:19.684 [DEBUG] [Thread-194466] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:01:19.685 [DEBUG] [Thread-194466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:01:19.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:01:19.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:01:19.740 [DEBUG] [Thread-194466] [transport.py] [_log()] userauth is OK
2026-02-15T00:01:19.740 [DEBUG] [Thread-194466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:01:19.740 [DEBUG] [Thread-194466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:01:19.740 [DEBUG] [Thread-194466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:01:19.740 [DEBUG] [Thread-194466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:01:19.759 [INFO] [Thread-194466] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:01:19.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-15T00:01:19.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:01:20.542 [DEBUG] [Thread-194466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:01:20.542 [DEBUG] [Thread-194466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:01:20.591 [DEBUG] [Thread-194466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:01:20.591 [DEBUG] [Thread-194466] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:01:20.600 [DEBUG] [Thread-194466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:01:20.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:01:20.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-15T00:01:20.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:01:20.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:01:20.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:01:20.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:01:20.637 [DEBUG] [Thread-194466] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:01:26.958 [DEBUG] [Thread-194468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:01:42.008 [DEBUG] [Thread-194469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:01:50.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:01:50.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:01:50.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-15T00:01:52.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 1, 43), 5.56, 68.14, 0.0, 33.47, 8.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:01:52.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:01:43
2026-02-15T00:01:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:01:52.991 [DEBUG] [Thread-194470] [transport.py] [_log()] starting thread (client mode): 0xa2d6e4a0
2026-02-15T00:01:52.991 [DEBUG] [Thread-194470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:01:53.011 [DEBUG] [Thread-194470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:01:53.011 [INFO] [Thread-194470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:01:53.014 [DEBUG] [Thread-194470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:01:53.015 [DEBUG] [Thread-194470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:01:53.015 [DEBUG] [Thread-194470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:01:53.015 [DEBUG] [Thread-194470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:01:53.015 [DEBUG] [Thread-194470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:01:53.015 [DEBUG] [Thread-194470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:01:53.015 [DEBUG] [Thread-194470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:01:53.015 [DEBUG] [Thread-194470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:01:53.015 [DEBUG] [Thread-194470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:01:53.015 [DEBUG] [Thread-194470] [transport.py] [_log()] client lang: <none>
2026-02-15T00:01:53.015 [DEBUG] [Thread-194470] [transport.py] [_log()] server lang: <none>
2026-02-15T00:01:53.015 [DEBUG] [Thread-194470] [transport.py] [_log()] kex follows: False
2026-02-15T00:01:53.015 [DEBUG] [Thread-194470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:01:53.015 [DEBUG] [Thread-194470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:01:53.015 [DEBUG] [Thread-194470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:01:53.016 [DEBUG] [Thread-194470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:01:53.016 [DEBUG] [Thread-194470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:01:53.016 [DEBUG] [Thread-194470] [transport.py] [_log()] Compression: none
2026-02-15T00:01:53.016 [DEBUG] [Thread-194470] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:01:53.034 [DEBUG] [Thread-194470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:01:53.035 [DEBUG] [Thread-194470] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:01:53.036 [DEBUG] [Thread-194470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:01:53.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:01:53.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:01:53.077 [DEBUG] [Thread-194470] [transport.py] [_log()] userauth is OK
2026-02-15T00:01:53.077 [DEBUG] [Thread-194470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:01:53.078 [DEBUG] [Thread-194470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:01:53.078 [DEBUG] [Thread-194470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:01:53.078 [DEBUG] [Thread-194470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:01:53.111 [INFO] [Thread-194470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:01:53.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:01:53.703 [DEBUG] [Thread-194470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:01:53.703 [DEBUG] [Thread-194470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:01:53.703 [DEBUG] [Thread-194470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:01:53.744 [DEBUG] [Thread-194470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:01:53.744 [DEBUG] [Thread-194470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:01:53.748 [DEBUG] [Thread-194470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:01:53.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:01:53.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:01:53.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:01:53.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:01:53.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:01:53.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:01:53.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:01:53.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:01:53.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:01:53.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.917471 -999.00   +8.40  29.66     72   +3.80 1 1 1 1 1     0    0 4.11 -22.73 ZNESW 29.7 29.7 159.4 33.3 8.9 -24.6 8.7 -23.7 8.5 -22.6 8.9 -23.8
2026-02-15T00:01:53.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:01:53.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:01:53.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.917471
2026-02-15T00:01:53.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:01:53.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:01:53.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:01:53.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:01:53.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:01:53.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:01:43', tmtdew=5.56, humidity=68.14, cloud=0.0, wind=33.47, temperature=8.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:01:43', seeing=2.79, atlas_timestamp='2026-02-14T22:01:09.494', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006249999999999645, 0.017250000000000654, -0.01699999999999946, 0.020500000000000185, 0.039250000000000895, 0.0024999999999995026, 0.03625000000000078, 0.03449999999999953, 0.04650000000000176, -0.05874999999999986, 0.045999999999999375, 0.07900000000000063, 0.06324999999999825, 0.05299999999999905, 0.0259999999999998, 0.08924999999999983, 0.08050000000000068, 0.03199999999999825, 0.009249999999997982, 0.08099999999999952, 0.020749999999999602, 0.02525000000000155, 0.06574999999999953, 0.08849999999999802, 0.0495000000000001, 0.0337499999999995, 0.0, 0.10000000000000142, 0.060000000000002274, 0.0470000000000006, 0.11500000000000021, 0.07324999999999804], zp_timestamp='2026-02-14T21:57:00')
2026-02-15T00:01:53.773 [DEBUG] [Thread-194470] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:01:53.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-15T00:01:53.868 [DEBUG] [Thread-194473] [transport.py] [_log()] starting thread (client mode): 0xa2d03d00
2026-02-15T00:01:53.868 [DEBUG] [Thread-194473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:01:53.882 [DEBUG] [Thread-194473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:01:53.883 [INFO] [Thread-194473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:01:53.890 [DEBUG] [Thread-194473] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:01:53.890 [DEBUG] [Thread-194473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:01:53.890 [DEBUG] [Thread-194473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:01:53.890 [DEBUG] [Thread-194473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:01:53.890 [DEBUG] [Thread-194473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:01:53.890 [DEBUG] [Thread-194473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:01:53.890 [DEBUG] [Thread-194473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:01:53.890 [DEBUG] [Thread-194473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:01:53.890 [DEBUG] [Thread-194473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:01:53.890 [DEBUG] [Thread-194473] [transport.py] [_log()] client lang: <none>
2026-02-15T00:01:53.890 [DEBUG] [Thread-194473] [transport.py] [_log()] server lang: <none>
2026-02-15T00:01:53.890 [DEBUG] [Thread-194473] [transport.py] [_log()] kex follows: False
2026-02-15T00:01:53.890 [DEBUG] [Thread-194473] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:01:53.891 [DEBUG] [Thread-194473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:01:53.891 [DEBUG] [Thread-194473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:01:53.891 [DEBUG] [Thread-194473] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:01:53.891 [DEBUG] [Thread-194473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:01:53.891 [DEBUG] [Thread-194473] [transport.py] [_log()] Compression: none
2026-02-15T00:01:53.891 [DEBUG] [Thread-194473] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:01:53.948 [DEBUG] [Thread-194473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:01:53.948 [DEBUG] [Thread-194473] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:01:53.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:01:53.950 [DEBUG] [Thread-194473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:01:53.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:01:54.003 [DEBUG] [Thread-194473] [transport.py] [_log()] userauth is OK
2026-02-15T00:01:54.003 [DEBUG] [Thread-194473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:01:54.003 [DEBUG] [Thread-194473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:01:54.003 [DEBUG] [Thread-194473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:01:54.003 [DEBUG] [Thread-194473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:01:54.021 [INFO] [Thread-194473] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:01:54.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T00:01:54.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:01:54.795 [DEBUG] [Thread-194473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:01:54.795 [DEBUG] [Thread-194473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:01:54.842 [DEBUG] [Thread-194473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:01:54.843 [DEBUG] [Thread-194473] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:01:54.852 [DEBUG] [Thread-194473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:01:54.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:01:54.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-15T00:01:54.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-15T00:01:54.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:01:54.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:01:54.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:01:54.888 [DEBUG] [Thread-194473] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:01:57.043 [DEBUG] [Thread-194475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:02:07.253 [DEBUG] [Thread-194476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:02:12.096 [DEBUG] [Thread-194477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:02:14.541 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:02:14.542 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:02:24.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:02:24.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:02:24.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:02:26.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 2, 18), 5.55, 68.19, 0.0, 36.03, 8.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:02:26.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:02:18
2026-02-15T00:02:27.131 [DEBUG] [Thread-194478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:02:27.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:02:27.479 [DEBUG] [Thread-194479] [transport.py] [_log()] starting thread (client mode): 0xa2d1a3b0
2026-02-15T00:02:27.479 [DEBUG] [Thread-194479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:02:27.499 [DEBUG] [Thread-194479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:02:27.499 [INFO] [Thread-194479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:02:27.502 [DEBUG] [Thread-194479] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:02:27.503 [DEBUG] [Thread-194479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:02:27.503 [DEBUG] [Thread-194479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:02:27.503 [DEBUG] [Thread-194479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:02:27.503 [DEBUG] [Thread-194479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:02:27.503 [DEBUG] [Thread-194479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:02:27.503 [DEBUG] [Thread-194479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:02:27.503 [DEBUG] [Thread-194479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:02:27.503 [DEBUG] [Thread-194479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:02:27.503 [DEBUG] [Thread-194479] [transport.py] [_log()] client lang: <none>
2026-02-15T00:02:27.503 [DEBUG] [Thread-194479] [transport.py] [_log()] server lang: <none>
2026-02-15T00:02:27.503 [DEBUG] [Thread-194479] [transport.py] [_log()] kex follows: False
2026-02-15T00:02:27.503 [DEBUG] [Thread-194479] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:02:27.503 [DEBUG] [Thread-194479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:02:27.504 [DEBUG] [Thread-194479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:02:27.504 [DEBUG] [Thread-194479] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:02:27.504 [DEBUG] [Thread-194479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:02:27.504 [DEBUG] [Thread-194479] [transport.py] [_log()] Compression: none
2026-02-15T00:02:27.504 [DEBUG] [Thread-194479] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:02:27.523 [DEBUG] [Thread-194479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:02:27.524 [DEBUG] [Thread-194479] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:02:27.524 [DEBUG] [Thread-194479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:02:27.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:02:27.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:02:27.527 [DEBUG] [Thread-194479] [transport.py] [_log()] userauth is OK
2026-02-15T00:02:27.527 [DEBUG] [Thread-194479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:02:27.527 [DEBUG] [Thread-194479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:02:27.527 [DEBUG] [Thread-194479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:02:27.527 [DEBUG] [Thread-194479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:02:27.544 [INFO] [Thread-194479] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:02:27.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:02:28.184 [DEBUG] [Thread-194479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:02:28.184 [DEBUG] [Thread-194479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:02:28.184 [DEBUG] [Thread-194479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:02:28.224 [DEBUG] [Thread-194479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:02:28.225 [DEBUG] [Thread-194479] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:02:28.228 [DEBUG] [Thread-194479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:02:28.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:02:28.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:02:28.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:02:28.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:02:28.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:02:28.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:02:28.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:02:28.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:02:28.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:02:28.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.917819 -999.00   +8.40  21.91     72   +3.80 1 1 1 1 1     0    0 4.18 -24.71 ZNESW 21.9 21.9 157.8 35.5 8.8 -24.7 8.8 -23.7 8.6 -22.7 8.8 -23.8
2026-02-15T00:02:28.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:02:28.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:02:28.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.917819
2026-02-15T00:02:28.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:02:28.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:02:28.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:02:28.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:02:28.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:02:28.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:02:18', tmtdew=5.55, humidity=68.19, cloud=0.0, wind=36.03, temperature=8.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:02:18', seeing=2.5, atlas_timestamp='2026-02-14T22:01:39.562', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006249999999999645, 0.017250000000000654, -0.01699999999999946, 0.020500000000000185, 0.039250000000000895, 0.0024999999999995026, 0.03625000000000078, 0.03449999999999953, 0.04650000000000176, -0.05874999999999986, 0.045999999999999375, 0.07900000000000063, 0.06324999999999825, 0.05299999999999905, 0.0259999999999998, 0.08924999999999983, 0.08050000000000068, 0.03199999999999825, 0.009249999999997982, 0.08099999999999952, 0.020749999999999602, 0.02525000000000155, 0.06574999999999953, 0.08849999999999802, 0.0495000000000001, 0.0337499999999995, 0.0, 0.10000000000000142, 0.060000000000002274, 0.0470000000000006, 0.11500000000000021, 0.07324999999999804], zp_timestamp='2026-02-14T21:57:00')
2026-02-15T00:02:28.256 [DEBUG] [Thread-194479] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:02:28.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-15T00:02:28.351 [DEBUG] [Thread-194482] [transport.py] [_log()] starting thread (client mode): 0xa2d198d0
2026-02-15T00:02:28.351 [DEBUG] [Thread-194482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:02:28.366 [DEBUG] [Thread-194482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:02:28.366 [INFO] [Thread-194482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:02:28.374 [DEBUG] [Thread-194482] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:02:28.374 [DEBUG] [Thread-194482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:02:28.374 [DEBUG] [Thread-194482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:02:28.374 [DEBUG] [Thread-194482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:02:28.374 [DEBUG] [Thread-194482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:02:28.374 [DEBUG] [Thread-194482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:02:28.374 [DEBUG] [Thread-194482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:02:28.374 [DEBUG] [Thread-194482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:02:28.374 [DEBUG] [Thread-194482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:02:28.374 [DEBUG] [Thread-194482] [transport.py] [_log()] client lang: <none>
2026-02-15T00:02:28.374 [DEBUG] [Thread-194482] [transport.py] [_log()] server lang: <none>
2026-02-15T00:02:28.375 [DEBUG] [Thread-194482] [transport.py] [_log()] kex follows: False
2026-02-15T00:02:28.375 [DEBUG] [Thread-194482] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:02:28.375 [DEBUG] [Thread-194482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:02:28.375 [DEBUG] [Thread-194482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:02:28.375 [DEBUG] [Thread-194482] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:02:28.375 [DEBUG] [Thread-194482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:02:28.375 [DEBUG] [Thread-194482] [transport.py] [_log()] Compression: none
2026-02-15T00:02:28.375 [DEBUG] [Thread-194482] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:02:28.432 [DEBUG] [Thread-194482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:02:28.432 [DEBUG] [Thread-194482] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:02:28.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:02:28.433 [DEBUG] [Thread-194482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:02:28.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:02:28.488 [DEBUG] [Thread-194482] [transport.py] [_log()] userauth is OK
2026-02-15T00:02:28.488 [DEBUG] [Thread-194482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:02:28.488 [DEBUG] [Thread-194482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:02:28.488 [DEBUG] [Thread-194482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:02:28.488 [DEBUG] [Thread-194482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:02:28.512 [INFO] [Thread-194482] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:02:28.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-15T00:02:28.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:02:29.307 [DEBUG] [Thread-194482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:02:29.308 [DEBUG] [Thread-194482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:02:29.355 [DEBUG] [Thread-194482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:02:29.355 [DEBUG] [Thread-194482] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:02:29.364 [DEBUG] [Thread-194482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:02:29.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:02:29.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:02:29.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:02:29.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:02:29.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:02:29.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:02:29.399 [DEBUG] [Thread-194482] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:02:42.164 [DEBUG] [Thread-194484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:02:57.220 [DEBUG] [Thread-194485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:02:59.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:02:59.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:02:59.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-15T00:03:01.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 2, 18), 5.55, 68.19, 0.0, 36.03, 8.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:03:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:02:18
2026-02-15T00:03:01.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:03:01.773 [DEBUG] [Thread-194486] [transport.py] [_log()] starting thread (client mode): 0xa2d1b280
2026-02-15T00:03:01.773 [DEBUG] [Thread-194486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:03:01.793 [DEBUG] [Thread-194486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:03:01.793 [INFO] [Thread-194486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:03:01.795 [DEBUG] [Thread-194486] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:03:01.795 [DEBUG] [Thread-194486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:03:01.795 [DEBUG] [Thread-194486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:03:01.795 [DEBUG] [Thread-194486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:03:01.795 [DEBUG] [Thread-194486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:03:01.795 [DEBUG] [Thread-194486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:03:01.795 [DEBUG] [Thread-194486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:03:01.795 [DEBUG] [Thread-194486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:03:01.795 [DEBUG] [Thread-194486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:03:01.795 [DEBUG] [Thread-194486] [transport.py] [_log()] client lang: <none>
2026-02-15T00:03:01.796 [DEBUG] [Thread-194486] [transport.py] [_log()] server lang: <none>
2026-02-15T00:03:01.796 [DEBUG] [Thread-194486] [transport.py] [_log()] kex follows: False
2026-02-15T00:03:01.796 [DEBUG] [Thread-194486] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:03:01.796 [DEBUG] [Thread-194486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:03:01.796 [DEBUG] [Thread-194486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:03:01.796 [DEBUG] [Thread-194486] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:03:01.796 [DEBUG] [Thread-194486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:03:01.796 [DEBUG] [Thread-194486] [transport.py] [_log()] Compression: none
2026-02-15T00:03:01.796 [DEBUG] [Thread-194486] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:03:01.811 [DEBUG] [Thread-194486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:03:01.812 [DEBUG] [Thread-194486] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:03:01.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:03:01.813 [DEBUG] [Thread-194486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:03:01.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:03:01.816 [DEBUG] [Thread-194486] [transport.py] [_log()] userauth is OK
2026-02-15T00:03:01.816 [DEBUG] [Thread-194486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:03:01.816 [DEBUG] [Thread-194486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:03:01.817 [DEBUG] [Thread-194486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:03:01.817 [DEBUG] [Thread-194486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:03:01.835 [INFO] [Thread-194486] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:03:01.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:03:02.604 [DEBUG] [Thread-194486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:03:02.605 [DEBUG] [Thread-194486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:03:02.605 [DEBUG] [Thread-194486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:03:02.645 [DEBUG] [Thread-194486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:03:02.645 [DEBUG] [Thread-194486] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:03:02.649 [DEBUG] [Thread-194486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:03:02.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:03:02.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:03:02.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:03:02.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:03:02.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:03:02.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:03:02.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:03:02.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:03:02.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:03:02.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.918166 -999.00   +8.40  22.17     72   +3.80 1 1 1 1 1     0    0 4.01 -26.02 ZNESW 22.2 22.2 159.4 31.8 8.8 -24.8 8.7 -23.6 8.5 -22.7 8.8 -23.8
2026-02-15T00:03:02.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:03:02.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:03:02.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.918166
2026-02-15T00:03:02.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:03:02.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:03:02.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:03:02.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:03:02.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:03:02.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:02:18', tmtdew=5.55, humidity=68.19, cloud=0.0, wind=36.03, temperature=8.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:02:54', seeing=2.88, atlas_timestamp='2026-02-14T22:02:09.542', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.00975000000000037, -0.023749999999999716, -0.008500000000001506, 0.011499999999999844, 0.03625000000000078, -0.0030000000000001137, 0.015249999999999986, 0.011999999999998678, 0.04499999999999993, -0.08774999999999977, 0.016000000000000014, 0.07399999999999984, 0.03524999999999956, 0.03049999999999997, 0.009999999999999787, 0.05925000000000047, 0.08450000000000024, 0.03550000000000075, -0.004750000000001364, 0.03249999999999886, 0.004749999999999588, 0.0022500000000000853, 0.06274999999999942, 0.07149999999999856, 0.06850000000000023, 0.0547500000000003, -0.0015000000000000568, 0.05900000000000105, 0.040000000000000924, 0.05100000000000193, 0.08700000000000152, 0.012749999999998707], zp_timestamp='2026-02-14T22:01:00')
2026-02-15T00:03:02.673 [DEBUG] [Thread-194486] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:03:02.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-15T00:03:02.769 [DEBUG] [Thread-194489] [transport.py] [_log()] starting thread (client mode): 0xa2d6e6b0
2026-02-15T00:03:02.769 [DEBUG] [Thread-194489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:03:02.784 [DEBUG] [Thread-194489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:03:02.784 [INFO] [Thread-194489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:03:02.792 [DEBUG] [Thread-194489] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:03:02.792 [DEBUG] [Thread-194489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:03:02.792 [DEBUG] [Thread-194489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:03:02.792 [DEBUG] [Thread-194489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:03:02.792 [DEBUG] [Thread-194489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:03:02.792 [DEBUG] [Thread-194489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:03:02.792 [DEBUG] [Thread-194489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:03:02.792 [DEBUG] [Thread-194489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:03:02.792 [DEBUG] [Thread-194489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:03:02.792 [DEBUG] [Thread-194489] [transport.py] [_log()] client lang: <none>
2026-02-15T00:03:02.792 [DEBUG] [Thread-194489] [transport.py] [_log()] server lang: <none>
2026-02-15T00:03:02.792 [DEBUG] [Thread-194489] [transport.py] [_log()] kex follows: False
2026-02-15T00:03:02.792 [DEBUG] [Thread-194489] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:03:02.792 [DEBUG] [Thread-194489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:03:02.793 [DEBUG] [Thread-194489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:03:02.793 [DEBUG] [Thread-194489] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:03:02.793 [DEBUG] [Thread-194489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:03:02.793 [DEBUG] [Thread-194489] [transport.py] [_log()] Compression: none
2026-02-15T00:03:02.793 [DEBUG] [Thread-194489] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:03:02.851 [DEBUG] [Thread-194489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:03:02.852 [DEBUG] [Thread-194489] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:03:02.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:03:02.853 [DEBUG] [Thread-194489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:03:02.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:03:02.907 [DEBUG] [Thread-194489] [transport.py] [_log()] userauth is OK
2026-02-15T00:03:02.907 [DEBUG] [Thread-194489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:03:02.907 [DEBUG] [Thread-194489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:03:02.907 [DEBUG] [Thread-194489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:03:02.907 [DEBUG] [Thread-194489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:03:02.923 [INFO] [Thread-194489] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:03:02.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-15T00:03:02.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:03:03.732 [DEBUG] [Thread-194489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:03:03.732 [DEBUG] [Thread-194489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:03:03.780 [DEBUG] [Thread-194489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:03:03.781 [DEBUG] [Thread-194489] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:03:03.790 [DEBUG] [Thread-194489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:03:03.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:03:03.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-15T00:03:03.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-15T00:03:03.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:03:03.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:03:03.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:03:03.826 [DEBUG] [Thread-194489] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:03:07.315 [DEBUG] [Thread-194491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:03:12.257 [DEBUG] [Thread-194492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:03:14.742 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:03:14.744 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:03:27.322 [DEBUG] [Thread-194493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:03:33.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:03:33.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:03:33.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:03:35.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 2, 54), 5.54, 68.24, 0.0, 31.85, 8.51, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:03:35.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:02:54
2026-02-15T00:03:36.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:03:36.481 [DEBUG] [Thread-194494] [transport.py] [_log()] starting thread (client mode): 0xa2d19f60
2026-02-15T00:03:36.481 [DEBUG] [Thread-194494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:03:36.503 [DEBUG] [Thread-194494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:03:36.503 [INFO] [Thread-194494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:03:36.507 [DEBUG] [Thread-194494] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:03:36.507 [DEBUG] [Thread-194494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:03:36.507 [DEBUG] [Thread-194494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:03:36.507 [DEBUG] [Thread-194494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:03:36.507 [DEBUG] [Thread-194494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:03:36.507 [DEBUG] [Thread-194494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:03:36.507 [DEBUG] [Thread-194494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:03:36.507 [DEBUG] [Thread-194494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:03:36.507 [DEBUG] [Thread-194494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:03:36.507 [DEBUG] [Thread-194494] [transport.py] [_log()] client lang: <none>
2026-02-15T00:03:36.507 [DEBUG] [Thread-194494] [transport.py] [_log()] server lang: <none>
2026-02-15T00:03:36.507 [DEBUG] [Thread-194494] [transport.py] [_log()] kex follows: False
2026-02-15T00:03:36.507 [DEBUG] [Thread-194494] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:03:36.507 [DEBUG] [Thread-194494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:03:36.507 [DEBUG] [Thread-194494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:03:36.507 [DEBUG] [Thread-194494] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:03:36.507 [DEBUG] [Thread-194494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:03:36.507 [DEBUG] [Thread-194494] [transport.py] [_log()] Compression: none
2026-02-15T00:03:36.507 [DEBUG] [Thread-194494] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:03:36.527 [DEBUG] [Thread-194494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:03:36.527 [DEBUG] [Thread-194494] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:03:36.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:03:36.528 [DEBUG] [Thread-194494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:03:36.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:03:36.530 [DEBUG] [Thread-194494] [transport.py] [_log()] userauth is OK
2026-02-15T00:03:36.530 [DEBUG] [Thread-194494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:03:36.530 [DEBUG] [Thread-194494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:03:36.530 [DEBUG] [Thread-194494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:03:36.530 [DEBUG] [Thread-194494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:03:36.554 [INFO] [Thread-194494] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:03:36.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:03:37.188 [DEBUG] [Thread-194494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:03:37.189 [DEBUG] [Thread-194494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:03:37.189 [DEBUG] [Thread-194494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:03:37.229 [DEBUG] [Thread-194494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:03:37.230 [DEBUG] [Thread-194494] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:03:37.233 [DEBUG] [Thread-194494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:03:37.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:03:37.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:03:37.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:03:37.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:03:37.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:03:37.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:03:37.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:03:37.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:03:37.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:03:37.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.918513 -999.00   +8.40  31.03     72   +3.80 1 1 2 1 1     0    0 4.18 -24.52 ZNESW 31.0 31.0 152.4 38.2 8.9 -24.6 8.7 -23.6 8.5 -22.6 8.9 -23.8
2026-02-15T00:03:37.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:03:37.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:03:37.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.918513
2026-02-15T00:03:37.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:03:37.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:03:37.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:03:37.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:03:37.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:03:37.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:02:54', tmtdew=5.54, humidity=68.24, cloud=0.0, wind=31.85, temperature=8.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:03:29', seeing=3.56, atlas_timestamp='2026-02-14T22:02:39.523', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.00975000000000037, -0.023749999999999716, -0.008500000000001506, 0.011499999999999844, 0.03625000000000078, -0.0030000000000001137, 0.015249999999999986, 0.011999999999998678, 0.04499999999999993, -0.08774999999999977, 0.016000000000000014, 0.07399999999999984, 0.03524999999999956, 0.03049999999999997, 0.009999999999999787, 0.05925000000000047, 0.08450000000000024, 0.03550000000000075, -0.004750000000001364, 0.03249999999999886, 0.004749999999999588, 0.0022500000000000853, 0.06274999999999942, 0.07149999999999856, 0.06850000000000023, 0.0547500000000003, -0.0015000000000000568, 0.05900000000000105, 0.040000000000000924, 0.05100000000000193, 0.08700000000000152, 0.012749999999998707], zp_timestamp='2026-02-14T22:01:00')
2026-02-15T00:03:37.257 [DEBUG] [Thread-194494] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:03:37.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-15T00:03:37.350 [DEBUG] [Thread-194497] [transport.py] [_log()] starting thread (client mode): 0xa2d1b850
2026-02-15T00:03:37.351 [DEBUG] [Thread-194497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:03:37.365 [DEBUG] [Thread-194497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:03:37.365 [INFO] [Thread-194497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:03:37.376 [DEBUG] [Thread-194497] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:03:37.376 [DEBUG] [Thread-194497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:03:37.376 [DEBUG] [Thread-194497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:03:37.377 [DEBUG] [Thread-194497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:03:37.377 [DEBUG] [Thread-194497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:03:37.377 [DEBUG] [Thread-194497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:03:37.377 [DEBUG] [Thread-194497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:03:37.377 [DEBUG] [Thread-194497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:03:37.377 [DEBUG] [Thread-194497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:03:37.377 [DEBUG] [Thread-194497] [transport.py] [_log()] client lang: <none>
2026-02-15T00:03:37.377 [DEBUG] [Thread-194497] [transport.py] [_log()] server lang: <none>
2026-02-15T00:03:37.377 [DEBUG] [Thread-194497] [transport.py] [_log()] kex follows: False
2026-02-15T00:03:37.377 [DEBUG] [Thread-194497] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:03:37.377 [DEBUG] [Thread-194497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:03:37.377 [DEBUG] [Thread-194497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:03:37.377 [DEBUG] [Thread-194497] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:03:37.378 [DEBUG] [Thread-194497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:03:37.378 [DEBUG] [Thread-194497] [transport.py] [_log()] Compression: none
2026-02-15T00:03:37.378 [DEBUG] [Thread-194497] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:03:37.436 [DEBUG] [Thread-194497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:03:37.436 [DEBUG] [Thread-194497] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:03:37.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:03:37.437 [DEBUG] [Thread-194497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:03:37.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:03:37.492 [DEBUG] [Thread-194497] [transport.py] [_log()] userauth is OK
2026-02-15T00:03:37.492 [DEBUG] [Thread-194497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:03:37.492 [DEBUG] [Thread-194497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:03:37.492 [DEBUG] [Thread-194497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:03:37.493 [DEBUG] [Thread-194497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:03:37.511 [INFO] [Thread-194497] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:03:37.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-15T00:03:37.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:03:38.328 [DEBUG] [Thread-194497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:03:38.328 [DEBUG] [Thread-194497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:03:38.376 [DEBUG] [Thread-194497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:03:38.377 [DEBUG] [Thread-194497] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:03:38.386 [DEBUG] [Thread-194497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:03:38.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:03:38.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-15T00:03:38.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:03:38.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:03:38.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:03:38.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:03:38.422 [DEBUG] [Thread-194497] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:03:42.358 [DEBUG] [Thread-194499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:03:57.409 [DEBUG] [Thread-194500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:04:07.370 [DEBUG] [Thread-194501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:04:08.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:04:08.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:04:08.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:04:10.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 3, 29), 5.53, 68.27, 0.0, 32.36, 8.53, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:04:10.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:03:29
2026-02-15T00:04:10.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:04:10.798 [DEBUG] [Thread-194502] [transport.py] [_log()] starting thread (client mode): 0xa2d6d8d0
2026-02-15T00:04:10.799 [DEBUG] [Thread-194502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:04:10.819 [DEBUG] [Thread-194502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:04:10.819 [INFO] [Thread-194502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:04:10.822 [DEBUG] [Thread-194502] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:04:10.822 [DEBUG] [Thread-194502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:04:10.822 [DEBUG] [Thread-194502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:04:10.822 [DEBUG] [Thread-194502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:04:10.822 [DEBUG] [Thread-194502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:04:10.822 [DEBUG] [Thread-194502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:04:10.823 [DEBUG] [Thread-194502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:04:10.823 [DEBUG] [Thread-194502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:04:10.823 [DEBUG] [Thread-194502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:04:10.823 [DEBUG] [Thread-194502] [transport.py] [_log()] client lang: <none>
2026-02-15T00:04:10.823 [DEBUG] [Thread-194502] [transport.py] [_log()] server lang: <none>
2026-02-15T00:04:10.823 [DEBUG] [Thread-194502] [transport.py] [_log()] kex follows: False
2026-02-15T00:04:10.823 [DEBUG] [Thread-194502] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:04:10.823 [DEBUG] [Thread-194502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:04:10.823 [DEBUG] [Thread-194502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:04:10.823 [DEBUG] [Thread-194502] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:04:10.823 [DEBUG] [Thread-194502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:04:10.823 [DEBUG] [Thread-194502] [transport.py] [_log()] Compression: none
2026-02-15T00:04:10.823 [DEBUG] [Thread-194502] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:04:10.842 [DEBUG] [Thread-194502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:04:10.842 [DEBUG] [Thread-194502] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:04:10.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:04:10.843 [DEBUG] [Thread-194502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:04:10.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:04:10.845 [DEBUG] [Thread-194502] [transport.py] [_log()] userauth is OK
2026-02-15T00:04:10.846 [DEBUG] [Thread-194502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:04:10.846 [DEBUG] [Thread-194502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:04:10.846 [DEBUG] [Thread-194502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:04:10.846 [DEBUG] [Thread-194502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:04:10.864 [INFO] [Thread-194502] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:04:10.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:04:11.663 [DEBUG] [Thread-194502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:04:11.663 [DEBUG] [Thread-194502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:04:11.663 [DEBUG] [Thread-194502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:04:11.704 [DEBUG] [Thread-194502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:04:11.704 [DEBUG] [Thread-194502] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:04:11.706 [DEBUG] [Thread-194502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:04:11.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:04:11.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:04:11.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:04:11.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:04:11.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:04:11.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:04:11.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:04:11.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.918860 -999.00   +8.40  20.04     73   +3.80 1 1 1 1 1     0    0 4.13 -24.50 ZNESW 20.0 20.0 157.8 33.1 8.9 -24.5 8.7 -23.6 8.5 -22.7 8.9 -23.9
2026-02-15T00:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.918860
2026-02-15T00:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:04:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:03:29', tmtdew=5.53, humidity=68.27, cloud=0.0, wind=32.36, temperature=8.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:04:05', seeing=3.56, atlas_timestamp='2026-02-14T22:03:09.504', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.00975000000000037, -0.023749999999999716, -0.008500000000001506, 0.011499999999999844, 0.03625000000000078, -0.0030000000000001137, 0.015249999999999986, 0.011999999999998678, 0.04499999999999993, -0.08774999999999977, 0.016000000000000014, 0.07399999999999984, 0.03524999999999956, 0.03049999999999997, 0.009999999999999787, 0.05925000000000047, 0.08450000000000024, 0.03550000000000075, -0.004750000000001364, 0.03249999999999886, 0.004749999999999588, 0.0022500000000000853, 0.06274999999999942, 0.07149999999999856, 0.06850000000000023, 0.0547500000000003, -0.0015000000000000568, 0.05900000000000105, 0.040000000000000924, 0.05100000000000193, 0.08700000000000152, 0.012749999999998707], zp_timestamp='2026-02-14T22:01:00')
2026-02-15T00:04:11.718 [DEBUG] [Thread-194502] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:04:11.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T00:04:11.802 [DEBUG] [Thread-194505] [transport.py] [_log()] starting thread (client mode): 0xa2d195d0
2026-02-15T00:04:11.803 [DEBUG] [Thread-194505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:04:11.817 [DEBUG] [Thread-194505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:04:11.818 [INFO] [Thread-194505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:04:11.825 [DEBUG] [Thread-194505] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:04:11.825 [DEBUG] [Thread-194505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:04:11.825 [DEBUG] [Thread-194505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:04:11.825 [DEBUG] [Thread-194505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:04:11.825 [DEBUG] [Thread-194505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:04:11.825 [DEBUG] [Thread-194505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:04:11.825 [DEBUG] [Thread-194505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:04:11.825 [DEBUG] [Thread-194505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:04:11.825 [DEBUG] [Thread-194505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:04:11.825 [DEBUG] [Thread-194505] [transport.py] [_log()] client lang: <none>
2026-02-15T00:04:11.825 [DEBUG] [Thread-194505] [transport.py] [_log()] server lang: <none>
2026-02-15T00:04:11.825 [DEBUG] [Thread-194505] [transport.py] [_log()] kex follows: False
2026-02-15T00:04:11.825 [DEBUG] [Thread-194505] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:04:11.825 [DEBUG] [Thread-194505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:04:11.825 [DEBUG] [Thread-194505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:04:11.825 [DEBUG] [Thread-194505] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:04:11.825 [DEBUG] [Thread-194505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:04:11.825 [DEBUG] [Thread-194505] [transport.py] [_log()] Compression: none
2026-02-15T00:04:11.825 [DEBUG] [Thread-194505] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:04:11.882 [DEBUG] [Thread-194505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:04:11.882 [DEBUG] [Thread-194505] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:04:11.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:04:11.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:04:11.883 [DEBUG] [Thread-194505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:04:11.939 [DEBUG] [Thread-194505] [transport.py] [_log()] userauth is OK
2026-02-15T00:04:11.939 [DEBUG] [Thread-194505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:04:11.939 [DEBUG] [Thread-194505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:04:11.939 [DEBUG] [Thread-194505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:04:11.939 [DEBUG] [Thread-194505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:04:11.953 [INFO] [Thread-194505] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:04:11.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T00:04:11.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:04:12.447 [DEBUG] [Thread-194507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:04:12.739 [DEBUG] [Thread-194505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:04:12.739 [DEBUG] [Thread-194505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:04:12.787 [DEBUG] [Thread-194505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:04:12.787 [DEBUG] [Thread-194505] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:04:12.796 [DEBUG] [Thread-194505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:04:12.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:04:12.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:04:12.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:04:12.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:04:12.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:04:12.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:04:12.830 [DEBUG] [Thread-194505] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:04:14.943 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:04:14.944 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:04:27.506 [DEBUG] [Thread-194508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:04:42.545 [DEBUG] [Thread-194509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:04:42.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:04:42.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:04:42.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-15T00:04:44.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 4, 5), 5.54, 68.24, 0.0, 33.05, 8.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:04:44.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:04:05
2026-02-15T00:04:45.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:04:45.468 [DEBUG] [Thread-194510] [transport.py] [_log()] starting thread (client mode): 0xa2d10a90
2026-02-15T00:04:45.468 [DEBUG] [Thread-194510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:04:45.488 [DEBUG] [Thread-194510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:04:45.489 [INFO] [Thread-194510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:04:45.491 [DEBUG] [Thread-194510] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:04:45.492 [DEBUG] [Thread-194510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:04:45.492 [DEBUG] [Thread-194510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:04:45.492 [DEBUG] [Thread-194510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:04:45.492 [DEBUG] [Thread-194510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:04:45.492 [DEBUG] [Thread-194510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:04:45.492 [DEBUG] [Thread-194510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:04:45.492 [DEBUG] [Thread-194510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:04:45.492 [DEBUG] [Thread-194510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:04:45.492 [DEBUG] [Thread-194510] [transport.py] [_log()] client lang: <none>
2026-02-15T00:04:45.492 [DEBUG] [Thread-194510] [transport.py] [_log()] server lang: <none>
2026-02-15T00:04:45.492 [DEBUG] [Thread-194510] [transport.py] [_log()] kex follows: False
2026-02-15T00:04:45.492 [DEBUG] [Thread-194510] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:04:45.492 [DEBUG] [Thread-194510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:04:45.492 [DEBUG] [Thread-194510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:04:45.493 [DEBUG] [Thread-194510] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:04:45.493 [DEBUG] [Thread-194510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:04:45.493 [DEBUG] [Thread-194510] [transport.py] [_log()] Compression: none
2026-02-15T00:04:45.493 [DEBUG] [Thread-194510] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:04:45.510 [DEBUG] [Thread-194510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:04:45.511 [DEBUG] [Thread-194510] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:04:45.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:04:45.513 [DEBUG] [Thread-194510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:04:45.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:04:45.515 [DEBUG] [Thread-194510] [transport.py] [_log()] userauth is OK
2026-02-15T00:04:45.515 [DEBUG] [Thread-194510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:04:45.516 [DEBUG] [Thread-194510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:04:45.516 [DEBUG] [Thread-194510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:04:45.516 [DEBUG] [Thread-194510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:04:45.552 [INFO] [Thread-194510] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:04:45.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:04:46.150 [DEBUG] [Thread-194510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:04:46.150 [DEBUG] [Thread-194510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:04:46.151 [DEBUG] [Thread-194510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:04:46.192 [DEBUG] [Thread-194510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:04:46.192 [DEBUG] [Thread-194510] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:04:46.195 [DEBUG] [Thread-194510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:04:46.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:04:46.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:04:46.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:04:46.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:04:46.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:04:46.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:04:46.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:04:46.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:04:46.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:04:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.919555 -999.00   +8.40  24.24     73   +3.80 1 1 1 1 1     0    0 4.12 -22.66 ZNESW 24.2 24.2 156.6 32.2 8.8 -24.6 8.7 -23.6 8.5 -22.7 8.8 -23.6
2026-02-15T00:04:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:04:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:04:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.919555
2026-02-15T00:04:46.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:04:46.222 [DEBUG] [Thread-194510] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:04:46.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:04:46.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:04:46.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:04:46.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:04:46.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:04:05', tmtdew=5.54, humidity=68.24, cloud=0.0, wind=33.05, temperature=8.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:04:40', seeing=2.46, atlas_timestamp='2026-02-14T22:04:09.552', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.00975000000000037, -0.023749999999999716, -0.008500000000001506, 0.011499999999999844, 0.03625000000000078, -0.0030000000000001137, 0.015249999999999986, 0.011999999999998678, 0.04499999999999993, -0.08774999999999977, 0.016000000000000014, 0.07399999999999984, 0.03524999999999956, 0.03049999999999997, 0.009999999999999787, 0.05925000000000047, 0.08450000000000024, 0.03550000000000075, -0.004750000000001364, 0.03249999999999886, 0.004749999999999588, 0.0022500000000000853, 0.06274999999999942, 0.07149999999999856, 0.06850000000000023, 0.0547500000000003, -0.0015000000000000568, 0.05900000000000105, 0.040000000000000924, 0.05100000000000193, 0.08700000000000152, 0.012749999999998707], zp_timestamp='2026-02-14T22:01:00')
2026-02-15T00:04:46.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-15T00:04:46.328 [DEBUG] [Thread-194513] [transport.py] [_log()] starting thread (client mode): 0xa2d6ded0
2026-02-15T00:04:46.329 [DEBUG] [Thread-194513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:04:46.345 [DEBUG] [Thread-194513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:04:46.346 [INFO] [Thread-194513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:04:46.353 [DEBUG] [Thread-194513] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:04:46.353 [DEBUG] [Thread-194513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:04:46.354 [DEBUG] [Thread-194513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:04:46.354 [DEBUG] [Thread-194513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:04:46.354 [DEBUG] [Thread-194513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:04:46.354 [DEBUG] [Thread-194513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:04:46.354 [DEBUG] [Thread-194513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:04:46.354 [DEBUG] [Thread-194513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:04:46.354 [DEBUG] [Thread-194513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:04:46.355 [DEBUG] [Thread-194513] [transport.py] [_log()] client lang: <none>
2026-02-15T00:04:46.355 [DEBUG] [Thread-194513] [transport.py] [_log()] server lang: <none>
2026-02-15T00:04:46.355 [DEBUG] [Thread-194513] [transport.py] [_log()] kex follows: False
2026-02-15T00:04:46.355 [DEBUG] [Thread-194513] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:04:46.355 [DEBUG] [Thread-194513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:04:46.355 [DEBUG] [Thread-194513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:04:46.355 [DEBUG] [Thread-194513] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:04:46.356 [DEBUG] [Thread-194513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:04:46.356 [DEBUG] [Thread-194513] [transport.py] [_log()] Compression: none
2026-02-15T00:04:46.356 [DEBUG] [Thread-194513] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:04:46.410 [DEBUG] [Thread-194513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:04:46.410 [DEBUG] [Thread-194513] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:04:46.411 [DEBUG] [Thread-194513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:04:46.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:04:46.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:04:46.468 [DEBUG] [Thread-194513] [transport.py] [_log()] userauth is OK
2026-02-15T00:04:46.469 [DEBUG] [Thread-194513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:04:46.469 [DEBUG] [Thread-194513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:04:46.469 [DEBUG] [Thread-194513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:04:46.469 [DEBUG] [Thread-194513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:04:46.493 [INFO] [Thread-194513] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:04:46.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-15T00:04:46.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:04:47.320 [DEBUG] [Thread-194513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:04:47.321 [DEBUG] [Thread-194513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:04:47.369 [DEBUG] [Thread-194513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:04:47.369 [DEBUG] [Thread-194513] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:04:47.378 [DEBUG] [Thread-194513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:04:47.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:04:47.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-15T00:04:47.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-15T00:04:47.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:04:47.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:04:47.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:04:47.417 [DEBUG] [Thread-194513] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:04:57.583 [DEBUG] [Thread-194515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:05:07.428 [DEBUG] [Thread-194516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:05:12.634 [DEBUG] [Thread-194517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:05:15.144 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:05:15.145 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:05:17.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:05:17.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:05:17.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-15T00:05:19.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 4, 40), 5.67, 67.51, 0.0, 30.98, 8.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:05:19.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:04:40
2026-02-15T00:05:20.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:05:20.333 [DEBUG] [Thread-194518] [transport.py] [_log()] starting thread (client mode): 0xa2d18790
2026-02-15T00:05:20.333 [DEBUG] [Thread-194518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:05:20.353 [DEBUG] [Thread-194518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:05:20.354 [INFO] [Thread-194518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:05:20.357 [DEBUG] [Thread-194518] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:05:20.357 [DEBUG] [Thread-194518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:05:20.357 [DEBUG] [Thread-194518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:05:20.357 [DEBUG] [Thread-194518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:05:20.357 [DEBUG] [Thread-194518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:05:20.357 [DEBUG] [Thread-194518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:05:20.357 [DEBUG] [Thread-194518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:05:20.357 [DEBUG] [Thread-194518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:05:20.357 [DEBUG] [Thread-194518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:05:20.357 [DEBUG] [Thread-194518] [transport.py] [_log()] client lang: <none>
2026-02-15T00:05:20.357 [DEBUG] [Thread-194518] [transport.py] [_log()] server lang: <none>
2026-02-15T00:05:20.358 [DEBUG] [Thread-194518] [transport.py] [_log()] kex follows: False
2026-02-15T00:05:20.358 [DEBUG] [Thread-194518] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:05:20.358 [DEBUG] [Thread-194518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:05:20.358 [DEBUG] [Thread-194518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:05:20.358 [DEBUG] [Thread-194518] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:05:20.358 [DEBUG] [Thread-194518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:05:20.358 [DEBUG] [Thread-194518] [transport.py] [_log()] Compression: none
2026-02-15T00:05:20.358 [DEBUG] [Thread-194518] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:05:20.376 [DEBUG] [Thread-194518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:05:20.376 [DEBUG] [Thread-194518] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:05:20.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:05:20.377 [DEBUG] [Thread-194518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:05:20.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:05:20.380 [DEBUG] [Thread-194518] [transport.py] [_log()] userauth is OK
2026-02-15T00:05:20.380 [DEBUG] [Thread-194518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:05:20.380 [DEBUG] [Thread-194518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:05:20.380 [DEBUG] [Thread-194518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:05:20.380 [DEBUG] [Thread-194518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:05:20.416 [INFO] [Thread-194518] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:05:20.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:05:21.078 [DEBUG] [Thread-194518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:05:21.079 [DEBUG] [Thread-194518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:05:21.079 [DEBUG] [Thread-194518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:05:21.119 [DEBUG] [Thread-194518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:05:21.120 [DEBUG] [Thread-194518] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:05:21.123 [DEBUG] [Thread-194518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:05:21.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:05:21.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:05:21.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:05:21.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:05:21.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:05:21.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:05:21.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:05:21.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:05:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:05:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.919902 -999.00   +8.40  30.15     73   +3.90 1 1 2 1 1     0    0 4.12 -23.64 ZNESW 30.1 30.1 161.6 34.3 8.8 -24.6 8.7 -23.8 8.5 -22.6 8.8 -23.9
2026-02-15T00:05:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:05:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:05:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.919902
2026-02-15T00:05:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:05:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:05:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:05:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:05:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:05:21.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:04:40', tmtdew=5.67, humidity=67.51, cloud=0.0, wind=30.98, temperature=8.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:05:15', seeing=2.87, atlas_timestamp='2026-02-14T22:04:39.533', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.00975000000000037, -0.023749999999999716, -0.008500000000001506, 0.011499999999999844, 0.03625000000000078, -0.0030000000000001137, 0.015249999999999986, 0.011999999999998678, 0.04499999999999993, -0.08774999999999977, 0.016000000000000014, 0.07399999999999984, 0.03524999999999956, 0.03049999999999997, 0.009999999999999787, 0.05925000000000047, 0.08450000000000024, 0.03550000000000075, -0.004750000000001364, 0.03249999999999886, 0.004749999999999588, 0.0022500000000000853, 0.06274999999999942, 0.07149999999999856, 0.06850000000000023, 0.0547500000000003, -0.0015000000000000568, 0.05900000000000105, 0.040000000000000924, 0.05100000000000193, 0.08700000000000152, 0.012749999999998707], zp_timestamp='2026-02-14T22:01:00')
2026-02-15T00:05:21.150 [DEBUG] [Thread-194518] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:05:21.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-15T00:05:21.245 [DEBUG] [Thread-194521] [transport.py] [_log()] starting thread (client mode): 0xa2d6e4a0
2026-02-15T00:05:21.246 [DEBUG] [Thread-194521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:05:21.260 [DEBUG] [Thread-194521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:05:21.260 [INFO] [Thread-194521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:05:21.268 [DEBUG] [Thread-194521] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:05:21.268 [DEBUG] [Thread-194521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:05:21.268 [DEBUG] [Thread-194521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:05:21.268 [DEBUG] [Thread-194521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:05:21.268 [DEBUG] [Thread-194521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:05:21.268 [DEBUG] [Thread-194521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:05:21.268 [DEBUG] [Thread-194521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:05:21.268 [DEBUG] [Thread-194521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:05:21.268 [DEBUG] [Thread-194521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:05:21.268 [DEBUG] [Thread-194521] [transport.py] [_log()] client lang: <none>
2026-02-15T00:05:21.268 [DEBUG] [Thread-194521] [transport.py] [_log()] server lang: <none>
2026-02-15T00:05:21.268 [DEBUG] [Thread-194521] [transport.py] [_log()] kex follows: False
2026-02-15T00:05:21.268 [DEBUG] [Thread-194521] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:05:21.268 [DEBUG] [Thread-194521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:05:21.268 [DEBUG] [Thread-194521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:05:21.269 [DEBUG] [Thread-194521] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:05:21.269 [DEBUG] [Thread-194521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:05:21.269 [DEBUG] [Thread-194521] [transport.py] [_log()] Compression: none
2026-02-15T00:05:21.269 [DEBUG] [Thread-194521] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:05:21.328 [DEBUG] [Thread-194521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:05:21.329 [DEBUG] [Thread-194521] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:05:21.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:05:21.330 [DEBUG] [Thread-194521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:05:21.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:05:21.388 [DEBUG] [Thread-194521] [transport.py] [_log()] userauth is OK
2026-02-15T00:05:21.389 [DEBUG] [Thread-194521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:05:21.389 [DEBUG] [Thread-194521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:05:21.389 [DEBUG] [Thread-194521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:05:21.389 [DEBUG] [Thread-194521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:05:21.407 [INFO] [Thread-194521] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:05:21.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T00:05:21.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:05:22.175 [DEBUG] [Thread-194521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:05:22.175 [DEBUG] [Thread-194521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:05:22.224 [DEBUG] [Thread-194521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:05:22.224 [DEBUG] [Thread-194521] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:05:22.233 [DEBUG] [Thread-194521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:05:22.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:05:22.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-15T00:05:22.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:05:22.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:05:22.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:05:22.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:05:22.270 [DEBUG] [Thread-194521] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:05:27.675 [DEBUG] [Thread-194523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:05:42.733 [DEBUG] [Thread-194524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:05:52.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:05:52.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:05:52.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-15T00:05:54.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 5, 15), 5.47, 68.34, 0.0, 31.9, 8.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:05:54.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:05:15
2026-02-15T00:05:54.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:05:54.968 [DEBUG] [Thread-194525] [transport.py] [_log()] starting thread (client mode): 0xa2d13ca0
2026-02-15T00:05:54.968 [DEBUG] [Thread-194525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:05:54.988 [DEBUG] [Thread-194525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:05:54.988 [INFO] [Thread-194525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:05:54.991 [DEBUG] [Thread-194525] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:05:54.992 [DEBUG] [Thread-194525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:05:54.992 [DEBUG] [Thread-194525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:05:54.992 [DEBUG] [Thread-194525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:05:54.992 [DEBUG] [Thread-194525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:05:54.992 [DEBUG] [Thread-194525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:05:54.992 [DEBUG] [Thread-194525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:05:54.992 [DEBUG] [Thread-194525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:05:54.992 [DEBUG] [Thread-194525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:05:54.992 [DEBUG] [Thread-194525] [transport.py] [_log()] client lang: <none>
2026-02-15T00:05:54.992 [DEBUG] [Thread-194525] [transport.py] [_log()] server lang: <none>
2026-02-15T00:05:54.992 [DEBUG] [Thread-194525] [transport.py] [_log()] kex follows: False
2026-02-15T00:05:54.992 [DEBUG] [Thread-194525] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:05:54.992 [DEBUG] [Thread-194525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:05:54.992 [DEBUG] [Thread-194525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:05:54.992 [DEBUG] [Thread-194525] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:05:54.992 [DEBUG] [Thread-194525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:05:54.992 [DEBUG] [Thread-194525] [transport.py] [_log()] Compression: none
2026-02-15T00:05:54.992 [DEBUG] [Thread-194525] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:05:55.009 [DEBUG] [Thread-194525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:05:55.010 [DEBUG] [Thread-194525] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:05:55.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:05:55.011 [DEBUG] [Thread-194525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:05:55.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:05:55.013 [DEBUG] [Thread-194525] [transport.py] [_log()] userauth is OK
2026-02-15T00:05:55.013 [DEBUG] [Thread-194525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:05:55.013 [DEBUG] [Thread-194525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:05:55.013 [DEBUG] [Thread-194525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:05:55.013 [DEBUG] [Thread-194525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:05:55.046 [INFO] [Thread-194525] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:05:55.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:05:55.838 [DEBUG] [Thread-194525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:05:55.838 [DEBUG] [Thread-194525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:05:55.839 [DEBUG] [Thread-194525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:05:55.879 [DEBUG] [Thread-194525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:05:55.879 [DEBUG] [Thread-194525] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:05:55.882 [DEBUG] [Thread-194525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:05:55.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:05:55.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:05:55.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:05:55.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:05:55.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:05:55.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:05:55.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:05:55.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:05:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:05:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.920249 -999.00   +8.40  28.05     73   +3.80 1 1 1 1 1     0    0 4.00 -24.01 ZNESW 28.1 28.1 158.0 33.7 8.9 -24.6 8.7 -23.5 8.6 -22.7 8.8 -23.9
2026-02-15T00:05:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:05:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:05:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.920249
2026-02-15T00:05:55.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:05:55.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:05:55.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:05:55.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:05:55.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:05:55.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:05:15', tmtdew=5.47, humidity=68.34, cloud=0.0, wind=31.9, temperature=8.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:05:51', seeing=2.24, atlas_timestamp='2026-02-14T22:05:09.514', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.011749999999999261, -0.03324999999999889, -0.008000000000000895, 0.019999999999999574, 0.024250000000000327, 0.0034999999999989484, 0.034250000000000114, 0.04249999999999865, 0.04600000000000115, -0.06475000000000009, 0.013500000000000512, 0.07900000000000063, 0.044749999999998735, 0.05600000000000094, 0.03799999999999848, 0.0702499999999997, 0.05850000000000044, 0.03200000000000003, -0.015750000000000597, 0.08249999999999957, 0.036749999999999616, 0.03325000000000067, 0.06925000000000026, 0.06899999999999906, 0.0259999999999998, 0.03324999999999889, 0.0045000000000001705, 0.07000000000000028, 0.016500000000000625, 0.05200000000000138, 0.08200000000000074, 0.07225000000000037], zp_timestamp='2026-02-14T22:04:00')
2026-02-15T00:05:55.906 [DEBUG] [Thread-194525] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:05:55.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-15T00:05:56.002 [DEBUG] [Thread-194528] [transport.py] [_log()] starting thread (client mode): 0xa2d781c0
2026-02-15T00:05:56.003 [DEBUG] [Thread-194528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:05:56.017 [DEBUG] [Thread-194528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:05:56.017 [INFO] [Thread-194528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:05:56.025 [DEBUG] [Thread-194528] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:05:56.025 [DEBUG] [Thread-194528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:05:56.026 [DEBUG] [Thread-194528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:05:56.026 [DEBUG] [Thread-194528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:05:56.026 [DEBUG] [Thread-194528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:05:56.026 [DEBUG] [Thread-194528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:05:56.026 [DEBUG] [Thread-194528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:05:56.026 [DEBUG] [Thread-194528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:05:56.026 [DEBUG] [Thread-194528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:05:56.026 [DEBUG] [Thread-194528] [transport.py] [_log()] client lang: <none>
2026-02-15T00:05:56.026 [DEBUG] [Thread-194528] [transport.py] [_log()] server lang: <none>
2026-02-15T00:05:56.026 [DEBUG] [Thread-194528] [transport.py] [_log()] kex follows: False
2026-02-15T00:05:56.026 [DEBUG] [Thread-194528] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:05:56.026 [DEBUG] [Thread-194528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:05:56.026 [DEBUG] [Thread-194528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:05:56.027 [DEBUG] [Thread-194528] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:05:56.027 [DEBUG] [Thread-194528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:05:56.027 [DEBUG] [Thread-194528] [transport.py] [_log()] Compression: none
2026-02-15T00:05:56.027 [DEBUG] [Thread-194528] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:05:56.084 [DEBUG] [Thread-194528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:05:56.085 [DEBUG] [Thread-194528] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:05:56.085 [DEBUG] [Thread-194528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:05:56.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:05:56.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:05:56.140 [DEBUG] [Thread-194528] [transport.py] [_log()] userauth is OK
2026-02-15T00:05:56.140 [DEBUG] [Thread-194528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:05:56.141 [DEBUG] [Thread-194528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:05:56.141 [DEBUG] [Thread-194528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:05:56.141 [DEBUG] [Thread-194528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:05:56.160 [INFO] [Thread-194528] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:05:56.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-15T00:05:56.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:05:56.977 [DEBUG] [Thread-194528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:05:56.977 [DEBUG] [Thread-194528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:05:57.025 [DEBUG] [Thread-194528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:05:57.025 [DEBUG] [Thread-194528] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:05:57.034 [DEBUG] [Thread-194528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:05:57.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:05:57.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-15T00:05:57.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-15T00:05:57.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:05:57.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:05:57.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:05:57.069 [DEBUG] [Thread-194528] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:05:57.764 [DEBUG] [Thread-194530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:06:07.506 [DEBUG] [Thread-194531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:06:12.829 [DEBUG] [Thread-194532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:06:15.344 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:06:15.345 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:06:27.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:06:27.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:06:27.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:06:27.868 [DEBUG] [Thread-194533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:06:29.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 5, 51), 5.45, 68.44, 0.0, 36.75, 8.53, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:06:29.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:05:51
2026-02-15T00:06:29.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:06:29.544 [DEBUG] [Thread-194534] [transport.py] [_log()] starting thread (client mode): 0xa2d7a380
2026-02-15T00:06:29.544 [DEBUG] [Thread-194534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:06:29.561 [DEBUG] [Thread-194534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:06:29.561 [INFO] [Thread-194534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:06:29.564 [DEBUG] [Thread-194534] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:06:29.564 [DEBUG] [Thread-194534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:06:29.564 [DEBUG] [Thread-194534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:06:29.564 [DEBUG] [Thread-194534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:06:29.564 [DEBUG] [Thread-194534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:06:29.564 [DEBUG] [Thread-194534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:06:29.564 [DEBUG] [Thread-194534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:06:29.564 [DEBUG] [Thread-194534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:06:29.565 [DEBUG] [Thread-194534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:06:29.565 [DEBUG] [Thread-194534] [transport.py] [_log()] client lang: <none>
2026-02-15T00:06:29.565 [DEBUG] [Thread-194534] [transport.py] [_log()] server lang: <none>
2026-02-15T00:06:29.565 [DEBUG] [Thread-194534] [transport.py] [_log()] kex follows: False
2026-02-15T00:06:29.565 [DEBUG] [Thread-194534] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:06:29.565 [DEBUG] [Thread-194534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:06:29.565 [DEBUG] [Thread-194534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:06:29.565 [DEBUG] [Thread-194534] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:06:29.565 [DEBUG] [Thread-194534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:06:29.565 [DEBUG] [Thread-194534] [transport.py] [_log()] Compression: none
2026-02-15T00:06:29.565 [DEBUG] [Thread-194534] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:06:29.583 [DEBUG] [Thread-194534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:06:29.584 [DEBUG] [Thread-194534] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:06:29.584 [DEBUG] [Thread-194534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:06:29.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:06:29.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:06:29.587 [DEBUG] [Thread-194534] [transport.py] [_log()] userauth is OK
2026-02-15T00:06:29.588 [DEBUG] [Thread-194534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:06:29.588 [DEBUG] [Thread-194534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:06:29.588 [DEBUG] [Thread-194534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:06:29.588 [DEBUG] [Thread-194534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:06:29.613 [INFO] [Thread-194534] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:06:29.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:06:30.248 [DEBUG] [Thread-194534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:06:30.248 [DEBUG] [Thread-194534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:06:30.249 [DEBUG] [Thread-194534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:06:30.289 [DEBUG] [Thread-194534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:06:30.289 [DEBUG] [Thread-194534] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:06:30.293 [DEBUG] [Thread-194534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:06:30.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:06:30.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:06:30.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:06:30.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:06:30.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:06:30.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:06:30.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:06:30.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:06:30.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:06:30.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.920596 -999.00   +8.40  24.18     73   +3.90 1 1 1 1 1     0    0 3.87 -26.48 ZNESW 24.2 24.2 146.3 31.2 8.8 -24.8 8.6 -23.6 8.5 -22.9 8.8 -23.8
2026-02-15T00:06:30.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:06:30.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:06:30.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.920596
2026-02-15T00:06:30.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:06:30.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:06:30.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:06:30.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:06:30.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:06:30.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:05:51', tmtdew=5.45, humidity=68.44, cloud=0.0, wind=36.75, temperature=8.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:05:51', seeing=2.24, atlas_timestamp='2026-02-14T22:05:39.494', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.011749999999999261, -0.03324999999999889, -0.008000000000000895, 0.019999999999999574, 0.024250000000000327, 0.0034999999999989484, 0.034250000000000114, 0.04249999999999865, 0.04600000000000115, -0.06475000000000009, 0.013500000000000512, 0.07900000000000063, 0.044749999999998735, 0.05600000000000094, 0.03799999999999848, 0.0702499999999997, 0.05850000000000044, 0.03200000000000003, -0.015750000000000597, 0.08249999999999957, 0.036749999999999616, 0.03325000000000067, 0.06925000000000026, 0.06899999999999906, 0.0259999999999998, 0.03324999999999889, 0.0045000000000001705, 0.07000000000000028, 0.016500000000000625, 0.05200000000000138, 0.08200000000000074, 0.07225000000000037], zp_timestamp='2026-02-14T22:04:00')
2026-02-15T00:06:30.321 [DEBUG] [Thread-194534] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:06:30.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T00:06:30.414 [DEBUG] [Thread-194537] [transport.py] [_log()] starting thread (client mode): 0xa57d7790
2026-02-15T00:06:30.415 [DEBUG] [Thread-194537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:06:30.429 [DEBUG] [Thread-194537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:06:30.429 [INFO] [Thread-194537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:06:30.437 [DEBUG] [Thread-194537] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:06:30.437 [DEBUG] [Thread-194537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:06:30.438 [DEBUG] [Thread-194537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:06:30.438 [DEBUG] [Thread-194537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:06:30.438 [DEBUG] [Thread-194537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:06:30.438 [DEBUG] [Thread-194537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:06:30.438 [DEBUG] [Thread-194537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:06:30.438 [DEBUG] [Thread-194537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:06:30.438 [DEBUG] [Thread-194537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:06:30.438 [DEBUG] [Thread-194537] [transport.py] [_log()] client lang: <none>
2026-02-15T00:06:30.438 [DEBUG] [Thread-194537] [transport.py] [_log()] server lang: <none>
2026-02-15T00:06:30.438 [DEBUG] [Thread-194537] [transport.py] [_log()] kex follows: False
2026-02-15T00:06:30.438 [DEBUG] [Thread-194537] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:06:30.438 [DEBUG] [Thread-194537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:06:30.438 [DEBUG] [Thread-194537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:06:30.438 [DEBUG] [Thread-194537] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:06:30.438 [DEBUG] [Thread-194537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:06:30.438 [DEBUG] [Thread-194537] [transport.py] [_log()] Compression: none
2026-02-15T00:06:30.439 [DEBUG] [Thread-194537] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:06:30.497 [DEBUG] [Thread-194537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:06:30.498 [DEBUG] [Thread-194537] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:06:30.498 [DEBUG] [Thread-194537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:06:30.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:06:30.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:06:30.559 [DEBUG] [Thread-194537] [transport.py] [_log()] userauth is OK
2026-02-15T00:06:30.559 [DEBUG] [Thread-194537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:06:30.560 [DEBUG] [Thread-194537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:06:30.560 [DEBUG] [Thread-194537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:06:30.560 [DEBUG] [Thread-194537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:06:30.582 [INFO] [Thread-194537] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:06:30.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-15T00:06:30.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:06:31.395 [DEBUG] [Thread-194537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:06:31.396 [DEBUG] [Thread-194537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:06:31.443 [DEBUG] [Thread-194537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:06:31.444 [DEBUG] [Thread-194537] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:06:31.452 [DEBUG] [Thread-194537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:06:31.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:06:31.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-15T00:06:31.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:06:31.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:06:31.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:06:31.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:06:31.488 [DEBUG] [Thread-194537] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:06:42.903 [DEBUG] [Thread-194539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:06:57.949 [DEBUG] [Thread-194540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:07:01.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:07:01.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:07:01.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-15T00:07:03.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 6, 27), 5.46, 68.37, 0.0, 36.17, 8.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:07:03.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:06:27
2026-02-15T00:07:03.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:07:04.036 [DEBUG] [Thread-194541] [transport.py] [_log()] starting thread (client mode): 0xa57d5240
2026-02-15T00:07:04.036 [DEBUG] [Thread-194541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:07:04.058 [DEBUG] [Thread-194541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:07:04.058 [INFO] [Thread-194541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:07:04.061 [DEBUG] [Thread-194541] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:07:04.061 [DEBUG] [Thread-194541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:07:04.061 [DEBUG] [Thread-194541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:07:04.061 [DEBUG] [Thread-194541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:07:04.061 [DEBUG] [Thread-194541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:07:04.061 [DEBUG] [Thread-194541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:07:04.062 [DEBUG] [Thread-194541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:07:04.062 [DEBUG] [Thread-194541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:07:04.062 [DEBUG] [Thread-194541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:07:04.062 [DEBUG] [Thread-194541] [transport.py] [_log()] client lang: <none>
2026-02-15T00:07:04.062 [DEBUG] [Thread-194541] [transport.py] [_log()] server lang: <none>
2026-02-15T00:07:04.062 [DEBUG] [Thread-194541] [transport.py] [_log()] kex follows: False
2026-02-15T00:07:04.062 [DEBUG] [Thread-194541] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:07:04.062 [DEBUG] [Thread-194541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:07:04.062 [DEBUG] [Thread-194541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:07:04.062 [DEBUG] [Thread-194541] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:07:04.062 [DEBUG] [Thread-194541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:07:04.062 [DEBUG] [Thread-194541] [transport.py] [_log()] Compression: none
2026-02-15T00:07:04.063 [DEBUG] [Thread-194541] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:07:04.080 [DEBUG] [Thread-194541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:07:04.081 [DEBUG] [Thread-194541] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:07:04.082 [DEBUG] [Thread-194541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:07:04.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:07:04.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:07:04.084 [DEBUG] [Thread-194541] [transport.py] [_log()] userauth is OK
2026-02-15T00:07:04.084 [DEBUG] [Thread-194541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:07:04.084 [DEBUG] [Thread-194541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:07:04.084 [DEBUG] [Thread-194541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:07:04.084 [DEBUG] [Thread-194541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:07:04.108 [INFO] [Thread-194541] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:07:04.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:07:04.744 [DEBUG] [Thread-194541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:07:04.744 [DEBUG] [Thread-194541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:07:04.744 [DEBUG] [Thread-194541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:07:04.785 [DEBUG] [Thread-194541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:07:04.786 [DEBUG] [Thread-194541] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:07:04.789 [DEBUG] [Thread-194541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:07:04.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:07:04.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:07:04.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:07:04.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:07:04.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:07:04.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:07:04.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:07:04.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:07:04.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:07:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.920943 -999.00   +8.40  33.11     73   +3.90 1 1 2 1 1     0    0 3.93 -24.78 ZNESW 33.1 33.1 157.0 40.8 8.9 -24.7 8.7 -23.6 8.5 -22.7 8.8 -23.6
2026-02-15T00:07:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:07:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:07:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.920943
2026-02-15T00:07:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:07:04.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:07:04.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:07:04.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:07:04.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:07:04.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:06:27', tmtdew=5.46, humidity=68.37, cloud=0.0, wind=36.17, temperature=8.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:06:27', seeing=2.39, atlas_timestamp='2026-02-14T22:06:09.475', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.011749999999999261, -0.03324999999999889, -0.008000000000000895, 0.019999999999999574, 0.024250000000000327, 0.0034999999999989484, 0.034250000000000114, 0.04249999999999865, 0.04600000000000115, -0.06475000000000009, 0.013500000000000512, 0.07900000000000063, 0.044749999999998735, 0.05600000000000094, 0.03799999999999848, 0.0702499999999997, 0.05850000000000044, 0.03200000000000003, -0.015750000000000597, 0.08249999999999957, 0.036749999999999616, 0.03325000000000067, 0.06925000000000026, 0.06899999999999906, 0.0259999999999998, 0.03324999999999889, 0.0045000000000001705, 0.07000000000000028, 0.016500000000000625, 0.05200000000000138, 0.08200000000000074, 0.07225000000000037], zp_timestamp='2026-02-14T22:04:00')
2026-02-15T00:07:04.816 [DEBUG] [Thread-194541] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:07:04.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-15T00:07:04.912 [DEBUG] [Thread-194544] [transport.py] [_log()] starting thread (client mode): 0xa5740af0
2026-02-15T00:07:04.912 [DEBUG] [Thread-194544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:07:04.926 [DEBUG] [Thread-194544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:07:04.926 [INFO] [Thread-194544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:07:04.934 [DEBUG] [Thread-194544] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:07:04.934 [DEBUG] [Thread-194544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:07:04.934 [DEBUG] [Thread-194544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:07:04.935 [DEBUG] [Thread-194544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:07:04.935 [DEBUG] [Thread-194544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:07:04.935 [DEBUG] [Thread-194544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:07:04.935 [DEBUG] [Thread-194544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:07:04.935 [DEBUG] [Thread-194544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:07:04.935 [DEBUG] [Thread-194544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:07:04.935 [DEBUG] [Thread-194544] [transport.py] [_log()] client lang: <none>
2026-02-15T00:07:04.935 [DEBUG] [Thread-194544] [transport.py] [_log()] server lang: <none>
2026-02-15T00:07:04.935 [DEBUG] [Thread-194544] [transport.py] [_log()] kex follows: False
2026-02-15T00:07:04.935 [DEBUG] [Thread-194544] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:07:04.936 [DEBUG] [Thread-194544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:07:04.936 [DEBUG] [Thread-194544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:07:04.936 [DEBUG] [Thread-194544] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:07:04.936 [DEBUG] [Thread-194544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:07:04.936 [DEBUG] [Thread-194544] [transport.py] [_log()] Compression: none
2026-02-15T00:07:04.936 [DEBUG] [Thread-194544] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:07:04.992 [DEBUG] [Thread-194544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:07:04.993 [DEBUG] [Thread-194544] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:07:04.993 [DEBUG] [Thread-194544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:07:04.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:07:04.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:07:05.048 [DEBUG] [Thread-194544] [transport.py] [_log()] userauth is OK
2026-02-15T00:07:05.048 [DEBUG] [Thread-194544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:07:05.049 [DEBUG] [Thread-194544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:07:05.049 [DEBUG] [Thread-194544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:07:05.049 [DEBUG] [Thread-194544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:07:05.067 [INFO] [Thread-194544] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:07:05.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-15T00:07:05.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:07:05.841 [DEBUG] [Thread-194544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:07:05.841 [DEBUG] [Thread-194544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:07:05.888 [DEBUG] [Thread-194544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:07:05.889 [DEBUG] [Thread-194544] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:07:05.900 [DEBUG] [Thread-194544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:07:05.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:07:05.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-15T00:07:05.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-15T00:07:05.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:07:05.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:07:05.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:07:05.942 [DEBUG] [Thread-194544] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:07:07.569 [DEBUG] [Thread-194546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:07:12.981 [DEBUG] [Thread-194547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:07:15.544 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:07:15.545 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:07:28.036 [DEBUG] [Thread-194548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:07:35.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:07:35.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:07:35.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-15T00:07:37.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 7, 2), 5.46, 68.39, 0.0, 35.15, 8.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:07:37.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:07:02
2026-02-15T00:07:38.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:07:38.347 [DEBUG] [Thread-194549] [transport.py] [_log()] starting thread (client mode): 0xa2d11270
2026-02-15T00:07:38.347 [DEBUG] [Thread-194549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:07:38.368 [DEBUG] [Thread-194549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:07:38.368 [INFO] [Thread-194549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:07:38.371 [DEBUG] [Thread-194549] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:07:38.371 [DEBUG] [Thread-194549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:07:38.371 [DEBUG] [Thread-194549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:07:38.371 [DEBUG] [Thread-194549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:07:38.371 [DEBUG] [Thread-194549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:07:38.371 [DEBUG] [Thread-194549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:07:38.371 [DEBUG] [Thread-194549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:07:38.371 [DEBUG] [Thread-194549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:07:38.371 [DEBUG] [Thread-194549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:07:38.371 [DEBUG] [Thread-194549] [transport.py] [_log()] client lang: <none>
2026-02-15T00:07:38.371 [DEBUG] [Thread-194549] [transport.py] [_log()] server lang: <none>
2026-02-15T00:07:38.371 [DEBUG] [Thread-194549] [transport.py] [_log()] kex follows: False
2026-02-15T00:07:38.371 [DEBUG] [Thread-194549] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:07:38.372 [DEBUG] [Thread-194549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:07:38.372 [DEBUG] [Thread-194549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:07:38.372 [DEBUG] [Thread-194549] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:07:38.372 [DEBUG] [Thread-194549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:07:38.372 [DEBUG] [Thread-194549] [transport.py] [_log()] Compression: none
2026-02-15T00:07:38.372 [DEBUG] [Thread-194549] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:07:38.392 [DEBUG] [Thread-194549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:07:38.392 [DEBUG] [Thread-194549] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:07:38.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:07:38.393 [DEBUG] [Thread-194549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:07:38.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:07:38.437 [DEBUG] [Thread-194549] [transport.py] [_log()] userauth is OK
2026-02-15T00:07:38.437 [DEBUG] [Thread-194549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:07:38.437 [DEBUG] [Thread-194549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:07:38.438 [DEBUG] [Thread-194549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:07:38.438 [DEBUG] [Thread-194549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:07:38.470 [INFO] [Thread-194549] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:07:38.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:07:39.118 [DEBUG] [Thread-194549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:07:39.119 [DEBUG] [Thread-194549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:07:39.119 [DEBUG] [Thread-194549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:07:39.160 [DEBUG] [Thread-194549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:07:39.161 [DEBUG] [Thread-194549] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:07:39.164 [DEBUG] [Thread-194549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:07:39.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:07:39.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:07:39.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:07:39.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:07:39.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:07:39.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:07:39.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:07:39.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:07:39.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:07:39.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.921291 -999.00   +8.40  24.59     73   +3.90 1 1 1 1 1     0    0 3.93 -24.56 ZNESW 24.6 24.6 161.2 34.4 8.8 -24.7 8.7 -23.5 8.5 -22.7 8.8 -23.8
2026-02-15T00:07:39.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:07:39.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:07:39.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.921291
2026-02-15T00:07:39.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:07:39.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:07:39.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:07:39.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:07:39.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:07:39.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:07:02', tmtdew=5.46, humidity=68.39, cloud=0.0, wind=35.15, temperature=8.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:07:02', seeing=2.25, atlas_timestamp='2026-02-14T22:06:39.542', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.011749999999999261, -0.03324999999999889, -0.008000000000000895, 0.019999999999999574, 0.024250000000000327, 0.0034999999999989484, 0.034250000000000114, 0.04249999999999865, 0.04600000000000115, -0.06475000000000009, 0.013500000000000512, 0.07900000000000063, 0.044749999999998735, 0.05600000000000094, 0.03799999999999848, 0.0702499999999997, 0.05850000000000044, 0.03200000000000003, -0.015750000000000597, 0.08249999999999957, 0.036749999999999616, 0.03325000000000067, 0.06925000000000026, 0.06899999999999906, 0.0259999999999998, 0.03324999999999889, 0.0045000000000001705, 0.07000000000000028, 0.016500000000000625, 0.05200000000000138, 0.08200000000000074, 0.07225000000000037], zp_timestamp='2026-02-14T22:04:00')
2026-02-15T00:07:39.189 [DEBUG] [Thread-194549] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:07:39.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-15T00:07:39.289 [DEBUG] [Thread-194552] [transport.py] [_log()] starting thread (client mode): 0xa57d6a70
2026-02-15T00:07:39.289 [DEBUG] [Thread-194552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:07:39.306 [DEBUG] [Thread-194552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:07:39.307 [INFO] [Thread-194552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:07:39.317 [DEBUG] [Thread-194552] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:07:39.317 [DEBUG] [Thread-194552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:07:39.317 [DEBUG] [Thread-194552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:07:39.318 [DEBUG] [Thread-194552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:07:39.318 [DEBUG] [Thread-194552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:07:39.318 [DEBUG] [Thread-194552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:07:39.318 [DEBUG] [Thread-194552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:07:39.318 [DEBUG] [Thread-194552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:07:39.318 [DEBUG] [Thread-194552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:07:39.318 [DEBUG] [Thread-194552] [transport.py] [_log()] client lang: <none>
2026-02-15T00:07:39.318 [DEBUG] [Thread-194552] [transport.py] [_log()] server lang: <none>
2026-02-15T00:07:39.318 [DEBUG] [Thread-194552] [transport.py] [_log()] kex follows: False
2026-02-15T00:07:39.319 [DEBUG] [Thread-194552] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:07:39.319 [DEBUG] [Thread-194552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:07:39.319 [DEBUG] [Thread-194552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:07:39.319 [DEBUG] [Thread-194552] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:07:39.319 [DEBUG] [Thread-194552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:07:39.319 [DEBUG] [Thread-194552] [transport.py] [_log()] Compression: none
2026-02-15T00:07:39.319 [DEBUG] [Thread-194552] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:07:39.376 [DEBUG] [Thread-194552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:07:39.377 [DEBUG] [Thread-194552] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:07:39.377 [DEBUG] [Thread-194552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:07:39.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:07:39.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:07:39.432 [DEBUG] [Thread-194552] [transport.py] [_log()] userauth is OK
2026-02-15T00:07:39.432 [DEBUG] [Thread-194552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:07:39.432 [DEBUG] [Thread-194552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:07:39.432 [DEBUG] [Thread-194552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:07:39.433 [DEBUG] [Thread-194552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:07:39.452 [INFO] [Thread-194552] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:07:39.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-15T00:07:39.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:07:40.229 [DEBUG] [Thread-194552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:07:40.230 [DEBUG] [Thread-194552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:07:40.277 [DEBUG] [Thread-194552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:07:40.277 [DEBUG] [Thread-194552] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:07:40.287 [DEBUG] [Thread-194552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:07:40.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:07:40.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-15T00:07:40.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-15T00:07:40.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:07:40.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:07:40.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:07:40.323 [DEBUG] [Thread-194552] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:07:43.080 [DEBUG] [Thread-194554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:07:58.131 [DEBUG] [Thread-194555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:08:07.637 [DEBUG] [Thread-194556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:08:10.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:08:10.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:08:10.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-15T00:08:12.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 7, 37), 5.6, 67.84, 0.0, 37.82, 8.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:08:12.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:07:37
2026-02-15T00:08:12.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:08:13.052 [DEBUG] [Thread-194557] [transport.py] [_log()] starting thread (client mode): 0xa2d6db70
2026-02-15T00:08:13.053 [DEBUG] [Thread-194557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:08:13.073 [DEBUG] [Thread-194557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:08:13.073 [INFO] [Thread-194557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:08:13.075 [DEBUG] [Thread-194557] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:08:13.075 [DEBUG] [Thread-194557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:08:13.075 [DEBUG] [Thread-194557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:08:13.075 [DEBUG] [Thread-194557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:08:13.075 [DEBUG] [Thread-194557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:08:13.075 [DEBUG] [Thread-194557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:08:13.075 [DEBUG] [Thread-194557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:08:13.075 [DEBUG] [Thread-194557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:08:13.075 [DEBUG] [Thread-194557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:08:13.076 [DEBUG] [Thread-194557] [transport.py] [_log()] client lang: <none>
2026-02-15T00:08:13.076 [DEBUG] [Thread-194557] [transport.py] [_log()] server lang: <none>
2026-02-15T00:08:13.076 [DEBUG] [Thread-194557] [transport.py] [_log()] kex follows: False
2026-02-15T00:08:13.076 [DEBUG] [Thread-194557] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:08:13.076 [DEBUG] [Thread-194557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:08:13.076 [DEBUG] [Thread-194557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:08:13.076 [DEBUG] [Thread-194557] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:08:13.076 [DEBUG] [Thread-194557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:08:13.076 [DEBUG] [Thread-194557] [transport.py] [_log()] Compression: none
2026-02-15T00:08:13.076 [DEBUG] [Thread-194557] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:08:13.086 [DEBUG] [Thread-194557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:08:13.087 [DEBUG] [Thread-194557] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:08:13.088 [DEBUG] [Thread-194557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:08:13.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:08:13.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:08:13.090 [DEBUG] [Thread-194557] [transport.py] [_log()] userauth is OK
2026-02-15T00:08:13.090 [DEBUG] [Thread-194557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:08:13.090 [DEBUG] [Thread-194557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:08:13.090 [DEBUG] [Thread-194557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:08:13.091 [DEBUG] [Thread-194557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:08:13.123 [INFO] [Thread-194557] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:08:13.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:08:13.164 [DEBUG] [Thread-194559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:08:13.779 [DEBUG] [Thread-194557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:08:13.780 [DEBUG] [Thread-194557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:08:13.780 [DEBUG] [Thread-194557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:08:13.820 [DEBUG] [Thread-194557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:08:13.821 [DEBUG] [Thread-194557] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:08:13.824 [DEBUG] [Thread-194557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:08:13.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:08:13.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:08:13.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:08:13.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:08:13.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:08:13.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:08:13.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:08:13.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:08:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:08:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.921985 -999.00   +8.40  25.57     73   +3.90 1 1 1 1 1     0    0 4.12 -23.28 ZNESW 25.6 25.6 160.8 40.1 8.8 -24.6 8.7 -23.6 8.5 -22.7 8.8 -23.8
2026-02-15T00:08:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:08:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:08:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.921985
2026-02-15T00:08:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:08:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:08:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:08:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:08:13.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:08:13.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:07:37', tmtdew=5.6, humidity=67.84, cloud=0.0, wind=37.82, temperature=8.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:07:37', seeing=2.79, atlas_timestamp='2026-02-14T22:07:39.504', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.011749999999999261, -0.03324999999999889, -0.008000000000000895, 0.019999999999999574, 0.024250000000000327, 0.0034999999999989484, 0.034250000000000114, 0.04249999999999865, 0.04600000000000115, -0.06475000000000009, 0.013500000000000512, 0.07900000000000063, 0.044749999999998735, 0.05600000000000094, 0.03799999999999848, 0.0702499999999997, 0.05850000000000044, 0.03200000000000003, -0.015750000000000597, 0.08249999999999957, 0.036749999999999616, 0.03325000000000067, 0.06925000000000026, 0.06899999999999906, 0.0259999999999998, 0.03324999999999889, 0.0045000000000001705, 0.07000000000000028, 0.016500000000000625, 0.05200000000000138, 0.08200000000000074, 0.07225000000000037], zp_timestamp='2026-02-14T22:04:00')
2026-02-15T00:08:13.851 [DEBUG] [Thread-194557] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:08:13.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-15T00:08:13.949 [DEBUG] [Thread-194561] [transport.py] [_log()] starting thread (client mode): 0xa2d7a380
2026-02-15T00:08:13.949 [DEBUG] [Thread-194561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:08:13.964 [DEBUG] [Thread-194561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:08:13.964 [INFO] [Thread-194561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:08:13.972 [DEBUG] [Thread-194561] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:08:13.972 [DEBUG] [Thread-194561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:08:13.972 [DEBUG] [Thread-194561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:08:13.972 [DEBUG] [Thread-194561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:08:13.972 [DEBUG] [Thread-194561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:08:13.972 [DEBUG] [Thread-194561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:08:13.972 [DEBUG] [Thread-194561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:08:13.972 [DEBUG] [Thread-194561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:08:13.972 [DEBUG] [Thread-194561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:08:13.972 [DEBUG] [Thread-194561] [transport.py] [_log()] client lang: <none>
2026-02-15T00:08:13.972 [DEBUG] [Thread-194561] [transport.py] [_log()] server lang: <none>
2026-02-15T00:08:13.972 [DEBUG] [Thread-194561] [transport.py] [_log()] kex follows: False
2026-02-15T00:08:13.973 [DEBUG] [Thread-194561] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:08:13.973 [DEBUG] [Thread-194561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:08:13.973 [DEBUG] [Thread-194561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:08:13.973 [DEBUG] [Thread-194561] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:08:13.973 [DEBUG] [Thread-194561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:08:13.973 [DEBUG] [Thread-194561] [transport.py] [_log()] Compression: none
2026-02-15T00:08:13.973 [DEBUG] [Thread-194561] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:08:14.034 [DEBUG] [Thread-194561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:08:14.034 [DEBUG] [Thread-194561] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:08:14.034 [DEBUG] [Thread-194561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:08:14.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:08:14.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:08:14.092 [DEBUG] [Thread-194561] [transport.py] [_log()] userauth is OK
2026-02-15T00:08:14.092 [DEBUG] [Thread-194561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:08:14.092 [DEBUG] [Thread-194561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:08:14.093 [DEBUG] [Thread-194561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:08:14.093 [DEBUG] [Thread-194561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:08:14.111 [INFO] [Thread-194561] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:08:14.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-15T00:08:14.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:08:14.899 [DEBUG] [Thread-194561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:08:14.900 [DEBUG] [Thread-194561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:08:14.947 [DEBUG] [Thread-194561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:08:14.948 [DEBUG] [Thread-194561] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:08:14.957 [DEBUG] [Thread-194561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:08:14.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:08:14.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:08:14.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-15T00:08:14.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:08:14.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:08:14.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:08:14.994 [DEBUG] [Thread-194561] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:08:15.744 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:08:15.745 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:08:28.200 [DEBUG] [Thread-194563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:08:43.255 [DEBUG] [Thread-194564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:08:45.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:08:45.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:08:45.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-15T00:08:46.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 8, 12), 5.44, 68.47, 0.0, 36.35, 8.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:08:46.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:08:12
2026-02-15T00:08:47.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:08:47.406 [DEBUG] [Thread-194565] [transport.py] [_log()] starting thread (client mode): 0xa2d7a350
2026-02-15T00:08:47.406 [DEBUG] [Thread-194565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:08:47.426 [DEBUG] [Thread-194565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:08:47.426 [INFO] [Thread-194565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:08:47.429 [DEBUG] [Thread-194565] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:08:47.429 [DEBUG] [Thread-194565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:08:47.430 [DEBUG] [Thread-194565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:08:47.430 [DEBUG] [Thread-194565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:08:47.430 [DEBUG] [Thread-194565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:08:47.430 [DEBUG] [Thread-194565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:08:47.430 [DEBUG] [Thread-194565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:08:47.430 [DEBUG] [Thread-194565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:08:47.430 [DEBUG] [Thread-194565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:08:47.430 [DEBUG] [Thread-194565] [transport.py] [_log()] client lang: <none>
2026-02-15T00:08:47.430 [DEBUG] [Thread-194565] [transport.py] [_log()] server lang: <none>
2026-02-15T00:08:47.430 [DEBUG] [Thread-194565] [transport.py] [_log()] kex follows: False
2026-02-15T00:08:47.430 [DEBUG] [Thread-194565] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:08:47.430 [DEBUG] [Thread-194565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:08:47.430 [DEBUG] [Thread-194565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:08:47.430 [DEBUG] [Thread-194565] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:08:47.430 [DEBUG] [Thread-194565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:08:47.431 [DEBUG] [Thread-194565] [transport.py] [_log()] Compression: none
2026-02-15T00:08:47.431 [DEBUG] [Thread-194565] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:08:47.451 [DEBUG] [Thread-194565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:08:47.452 [DEBUG] [Thread-194565] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:08:47.453 [DEBUG] [Thread-194565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:08:47.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:08:47.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:08:47.455 [DEBUG] [Thread-194565] [transport.py] [_log()] userauth is OK
2026-02-15T00:08:47.456 [DEBUG] [Thread-194565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:08:47.456 [DEBUG] [Thread-194565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:08:47.456 [DEBUG] [Thread-194565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:08:47.456 [DEBUG] [Thread-194565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:08:47.480 [INFO] [Thread-194565] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:08:47.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:08:48.110 [DEBUG] [Thread-194565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:08:48.111 [DEBUG] [Thread-194565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:08:48.111 [DEBUG] [Thread-194565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:08:48.152 [DEBUG] [Thread-194565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:08:48.152 [DEBUG] [Thread-194565] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:08:48.155 [DEBUG] [Thread-194565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:08:48.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:08:48.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:08:48.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:08:48.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:08:48.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:08:48.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:08:48.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:08:48.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:08:48.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:08:48.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.922332 -999.00   +8.40  24.85     73   +3.90 1 1 1 1 1     0    0 4.03 -25.62 ZNESW 24.9 24.9 145.4 32.0 8.9 -24.7 8.7 -23.6 8.4 -22.7 8.8 -23.9
2026-02-15T00:08:48.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:08:48.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:08:48.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.922332
2026-02-15T00:08:48.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:08:48.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:08:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:08:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:08:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:08:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:08:12', tmtdew=5.44, humidity=68.47, cloud=0.0, wind=36.35, temperature=8.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:08:13', seeing=2.89, atlas_timestamp='2026-02-14T22:08:09.485', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.011749999999999261, -0.03324999999999889, -0.008000000000000895, 0.019999999999999574, 0.024250000000000327, 0.0034999999999989484, 0.034250000000000114, 0.04249999999999865, 0.04600000000000115, -0.06475000000000009, 0.013500000000000512, 0.07900000000000063, 0.044749999999998735, 0.05600000000000094, 0.03799999999999848, 0.0702499999999997, 0.05850000000000044, 0.03200000000000003, -0.015750000000000597, 0.08249999999999957, 0.036749999999999616, 0.03325000000000067, 0.06925000000000026, 0.06899999999999906, 0.0259999999999998, 0.03324999999999889, 0.0045000000000001705, 0.07000000000000028, 0.016500000000000625, 0.05200000000000138, 0.08200000000000074, 0.07225000000000037], zp_timestamp='2026-02-14T22:04:00')
2026-02-15T00:08:48.181 [DEBUG] [Thread-194565] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:08:48.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-15T00:08:48.285 [DEBUG] [Thread-194568] [transport.py] [_log()] starting thread (client mode): 0xa2d6b040
2026-02-15T00:08:48.285 [DEBUG] [Thread-194568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:08:48.299 [DEBUG] [Thread-194568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:08:48.299 [INFO] [Thread-194568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:08:48.306 [DEBUG] [Thread-194568] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:08:48.307 [DEBUG] [Thread-194568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:08:48.307 [DEBUG] [Thread-194568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:08:48.307 [DEBUG] [Thread-194568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:08:48.307 [DEBUG] [Thread-194568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:08:48.307 [DEBUG] [Thread-194568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:08:48.307 [DEBUG] [Thread-194568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:08:48.307 [DEBUG] [Thread-194568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:08:48.307 [DEBUG] [Thread-194568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:08:48.307 [DEBUG] [Thread-194568] [transport.py] [_log()] client lang: <none>
2026-02-15T00:08:48.308 [DEBUG] [Thread-194568] [transport.py] [_log()] server lang: <none>
2026-02-15T00:08:48.308 [DEBUG] [Thread-194568] [transport.py] [_log()] kex follows: False
2026-02-15T00:08:48.308 [DEBUG] [Thread-194568] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:08:48.308 [DEBUG] [Thread-194568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:08:48.308 [DEBUG] [Thread-194568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:08:48.308 [DEBUG] [Thread-194568] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:08:48.308 [DEBUG] [Thread-194568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:08:48.308 [DEBUG] [Thread-194568] [transport.py] [_log()] Compression: none
2026-02-15T00:08:48.308 [DEBUG] [Thread-194568] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:08:48.364 [DEBUG] [Thread-194568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:08:48.365 [DEBUG] [Thread-194568] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:08:48.366 [DEBUG] [Thread-194568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:08:48.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:08:48.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:08:48.420 [DEBUG] [Thread-194568] [transport.py] [_log()] userauth is OK
2026-02-15T00:08:48.421 [DEBUG] [Thread-194568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:08:48.421 [DEBUG] [Thread-194568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:08:48.421 [DEBUG] [Thread-194568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:08:48.421 [DEBUG] [Thread-194568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:08:48.440 [INFO] [Thread-194568] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:08:48.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-15T00:08:48.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:08:49.194 [DEBUG] [Thread-194568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:08:49.195 [DEBUG] [Thread-194568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:08:49.242 [DEBUG] [Thread-194568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:08:49.243 [DEBUG] [Thread-194568] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:08:49.252 [DEBUG] [Thread-194568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:08:49.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:08:49.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:08:49.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-15T00:08:49.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:08:49.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:08:49.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:08:49.291 [DEBUG] [Thread-194568] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:08:58.289 [DEBUG] [Thread-194570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:09:07.704 [DEBUG] [Thread-194571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:09:13.351 [DEBUG] [Thread-194572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:09:15.945 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:09:15.946 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:09:19.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:09:19.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:09:19.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-15T00:09:21.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 8, 48), 5.43, 68.54, 0.0, 40.28, 8.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:09:21.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:08:48
2026-02-15T00:09:21.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:09:21.689 [DEBUG] [Thread-194573] [transport.py] [_log()] starting thread (client mode): 0xa2d7be50
2026-02-15T00:09:21.690 [DEBUG] [Thread-194573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:09:21.708 [DEBUG] [Thread-194573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:09:21.708 [INFO] [Thread-194573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:09:21.711 [DEBUG] [Thread-194573] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:09:21.711 [DEBUG] [Thread-194573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:09:21.712 [DEBUG] [Thread-194573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:09:21.712 [DEBUG] [Thread-194573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:09:21.712 [DEBUG] [Thread-194573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:09:21.712 [DEBUG] [Thread-194573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:09:21.712 [DEBUG] [Thread-194573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:09:21.712 [DEBUG] [Thread-194573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:09:21.712 [DEBUG] [Thread-194573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:09:21.712 [DEBUG] [Thread-194573] [transport.py] [_log()] client lang: <none>
2026-02-15T00:09:21.712 [DEBUG] [Thread-194573] [transport.py] [_log()] server lang: <none>
2026-02-15T00:09:21.712 [DEBUG] [Thread-194573] [transport.py] [_log()] kex follows: False
2026-02-15T00:09:21.712 [DEBUG] [Thread-194573] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:09:21.712 [DEBUG] [Thread-194573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:09:21.712 [DEBUG] [Thread-194573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:09:21.712 [DEBUG] [Thread-194573] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:09:21.712 [DEBUG] [Thread-194573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:09:21.713 [DEBUG] [Thread-194573] [transport.py] [_log()] Compression: none
2026-02-15T00:09:21.713 [DEBUG] [Thread-194573] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:09:21.731 [DEBUG] [Thread-194573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:09:21.731 [DEBUG] [Thread-194573] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:09:21.732 [DEBUG] [Thread-194573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:09:21.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:09:21.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:09:21.734 [DEBUG] [Thread-194573] [transport.py] [_log()] userauth is OK
2026-02-15T00:09:21.734 [DEBUG] [Thread-194573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:09:21.735 [DEBUG] [Thread-194573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:09:21.735 [DEBUG] [Thread-194573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:09:21.735 [DEBUG] [Thread-194573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:09:21.766 [INFO] [Thread-194573] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:09:21.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:09:22.398 [DEBUG] [Thread-194573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:09:22.399 [DEBUG] [Thread-194573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:09:22.399 [DEBUG] [Thread-194573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:09:22.439 [DEBUG] [Thread-194573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:09:22.439 [DEBUG] [Thread-194573] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:09:22.443 [DEBUG] [Thread-194573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:09:22.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:09:22.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:09:22.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:09:22.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:09:22.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:09:22.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:09:22.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:09:22.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:09:22.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:09:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.922679 -999.00   +8.40  21.21     73   +3.90 1 1 1 1 1     0    0 3.91 -25.57 ZNESW 21.2 21.2 158.8 43.0 8.8 -24.6 8.7 -23.6 8.4 -22.6 8.8 -23.9
2026-02-15T00:09:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:09:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:09:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.922679
2026-02-15T00:09:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:09:22.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:09:22.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:09:22.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:09:22.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:09:22.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:08:48', tmtdew=5.43, humidity=68.54, cloud=0.0, wind=40.28, temperature=8.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:08:48', seeing=2.95, atlas_timestamp='2026-02-14T22:08:39.466', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.011749999999999261, -0.03324999999999889, -0.008000000000000895, 0.019999999999999574, 0.024250000000000327, 0.0034999999999989484, 0.034250000000000114, 0.04249999999999865, 0.04600000000000115, -0.06475000000000009, 0.013500000000000512, 0.07900000000000063, 0.044749999999998735, 0.05600000000000094, 0.03799999999999848, 0.0702499999999997, 0.05850000000000044, 0.03200000000000003, -0.015750000000000597, 0.08249999999999957, 0.036749999999999616, 0.03325000000000067, 0.06925000000000026, 0.06899999999999906, 0.0259999999999998, 0.03324999999999889, 0.0045000000000001705, 0.07000000000000028, 0.016500000000000625, 0.05200000000000138, 0.08200000000000074, 0.07225000000000037], zp_timestamp='2026-02-14T22:07:00')
2026-02-15T00:09:22.471 [DEBUG] [Thread-194573] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:09:22.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-15T00:09:22.566 [DEBUG] [Thread-194576] [transport.py] [_log()] starting thread (client mode): 0xa2d7b490
2026-02-15T00:09:22.566 [DEBUG] [Thread-194576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:09:22.580 [DEBUG] [Thread-194576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:09:22.580 [INFO] [Thread-194576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:09:22.588 [DEBUG] [Thread-194576] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:09:22.588 [DEBUG] [Thread-194576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:09:22.588 [DEBUG] [Thread-194576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:09:22.589 [DEBUG] [Thread-194576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:09:22.589 [DEBUG] [Thread-194576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:09:22.589 [DEBUG] [Thread-194576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:09:22.589 [DEBUG] [Thread-194576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:09:22.589 [DEBUG] [Thread-194576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:09:22.589 [DEBUG] [Thread-194576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:09:22.589 [DEBUG] [Thread-194576] [transport.py] [_log()] client lang: <none>
2026-02-15T00:09:22.589 [DEBUG] [Thread-194576] [transport.py] [_log()] server lang: <none>
2026-02-15T00:09:22.589 [DEBUG] [Thread-194576] [transport.py] [_log()] kex follows: False
2026-02-15T00:09:22.589 [DEBUG] [Thread-194576] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:09:22.589 [DEBUG] [Thread-194576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:09:22.589 [DEBUG] [Thread-194576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:09:22.589 [DEBUG] [Thread-194576] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:09:22.589 [DEBUG] [Thread-194576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:09:22.589 [DEBUG] [Thread-194576] [transport.py] [_log()] Compression: none
2026-02-15T00:09:22.589 [DEBUG] [Thread-194576] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:09:22.647 [DEBUG] [Thread-194576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:09:22.648 [DEBUG] [Thread-194576] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:09:22.648 [DEBUG] [Thread-194576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:09:22.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:09:22.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:09:22.704 [DEBUG] [Thread-194576] [transport.py] [_log()] userauth is OK
2026-02-15T00:09:22.704 [DEBUG] [Thread-194576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:09:22.704 [DEBUG] [Thread-194576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:09:22.704 [DEBUG] [Thread-194576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:09:22.704 [DEBUG] [Thread-194576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:09:22.723 [INFO] [Thread-194576] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:09:22.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-15T00:09:22.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:09:23.589 [DEBUG] [Thread-194576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:09:23.589 [DEBUG] [Thread-194576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:09:23.637 [DEBUG] [Thread-194576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:09:23.637 [DEBUG] [Thread-194576] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:09:23.646 [DEBUG] [Thread-194576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:09:23.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:09:23.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-15T00:09:23.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-15T00:09:23.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:09:23.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:09:23.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:09:23.680 [DEBUG] [Thread-194576] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:09:28.386 [DEBUG] [Thread-194578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:09:43.438 [DEBUG] [Thread-194579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:09:53.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:09:53.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:09:53.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-15T00:09:55.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 9, 25), 5.42, 68.55, 0.0, 39.84, 8.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:09:55.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:09:25
2026-02-15T00:09:55.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:09:56.015 [DEBUG] [Thread-194580] [transport.py] [_log()] starting thread (client mode): 0xa2d78430
2026-02-15T00:09:56.015 [DEBUG] [Thread-194580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:09:56.034 [DEBUG] [Thread-194580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:09:56.034 [INFO] [Thread-194580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:09:56.037 [DEBUG] [Thread-194580] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:09:56.037 [DEBUG] [Thread-194580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:09:56.037 [DEBUG] [Thread-194580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:09:56.037 [DEBUG] [Thread-194580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:09:56.038 [DEBUG] [Thread-194580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:09:56.038 [DEBUG] [Thread-194580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:09:56.038 [DEBUG] [Thread-194580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:09:56.038 [DEBUG] [Thread-194580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:09:56.038 [DEBUG] [Thread-194580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:09:56.038 [DEBUG] [Thread-194580] [transport.py] [_log()] client lang: <none>
2026-02-15T00:09:56.038 [DEBUG] [Thread-194580] [transport.py] [_log()] server lang: <none>
2026-02-15T00:09:56.038 [DEBUG] [Thread-194580] [transport.py] [_log()] kex follows: False
2026-02-15T00:09:56.038 [DEBUG] [Thread-194580] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:09:56.038 [DEBUG] [Thread-194580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:09:56.038 [DEBUG] [Thread-194580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:09:56.038 [DEBUG] [Thread-194580] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:09:56.038 [DEBUG] [Thread-194580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:09:56.038 [DEBUG] [Thread-194580] [transport.py] [_log()] Compression: none
2026-02-15T00:09:56.038 [DEBUG] [Thread-194580] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:09:56.055 [DEBUG] [Thread-194580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:09:56.056 [DEBUG] [Thread-194580] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:09:56.056 [DEBUG] [Thread-194580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:09:56.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:09:56.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:09:56.058 [DEBUG] [Thread-194580] [transport.py] [_log()] userauth is OK
2026-02-15T00:09:56.059 [DEBUG] [Thread-194580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:09:56.059 [DEBUG] [Thread-194580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:09:56.059 [DEBUG] [Thread-194580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:09:56.059 [DEBUG] [Thread-194580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:09:56.083 [INFO] [Thread-194580] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:09:56.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:09:56.889 [DEBUG] [Thread-194580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:09:56.889 [DEBUG] [Thread-194580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:09:56.890 [DEBUG] [Thread-194580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:09:56.930 [DEBUG] [Thread-194580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:09:56.931 [DEBUG] [Thread-194580] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:09:56.934 [DEBUG] [Thread-194580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:09:56.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:09:56.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:09:56.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:09:56.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:09:56.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:09:56.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:09:56.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:09:56.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:09:56.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:09:56.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.923027 -999.00   +8.40  31.33     73   +4.00 1 1 2 1 1     0    0 3.83 -24.83 ZNESW 31.3 31.3 167.8 43.3 8.9 -24.5 8.7 -23.6 8.4 -22.6 8.8 -23.8
2026-02-15T00:09:56.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:09:56.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:09:56.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.923027
2026-02-15T00:09:56.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:09:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:09:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:09:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:09:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:09:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:09:25', tmtdew=5.42, humidity=68.55, cloud=0.0, wind=39.84, temperature=8.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:09:25', seeing=2.95, atlas_timestamp='2026-02-14T22:09:09.533', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.011749999999999261, -0.03324999999999889, -0.008000000000000895, 0.019999999999999574, 0.024250000000000327, 0.0034999999999989484, 0.034250000000000114, 0.04249999999999865, 0.04600000000000115, -0.06475000000000009, 0.013500000000000512, 0.07900000000000063, 0.044749999999998735, 0.05600000000000094, 0.03799999999999848, 0.0702499999999997, 0.05850000000000044, 0.03200000000000003, -0.015750000000000597, 0.08249999999999957, 0.036749999999999616, 0.03325000000000067, 0.06925000000000026, 0.06899999999999906, 0.0259999999999998, 0.03324999999999889, 0.0045000000000001705, 0.07000000000000028, 0.016500000000000625, 0.05200000000000138, 0.08200000000000074, 0.07225000000000037], zp_timestamp='2026-02-14T22:07:00')
2026-02-15T00:09:56.960 [DEBUG] [Thread-194580] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:09:57.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-15T00:09:57.059 [DEBUG] [Thread-194583] [transport.py] [_log()] starting thread (client mode): 0xa2d79b40
2026-02-15T00:09:57.059 [DEBUG] [Thread-194583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:09:57.074 [DEBUG] [Thread-194583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:09:57.074 [INFO] [Thread-194583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:09:57.082 [DEBUG] [Thread-194583] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:09:57.082 [DEBUG] [Thread-194583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:09:57.082 [DEBUG] [Thread-194583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:09:57.082 [DEBUG] [Thread-194583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:09:57.082 [DEBUG] [Thread-194583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:09:57.083 [DEBUG] [Thread-194583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:09:57.083 [DEBUG] [Thread-194583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:09:57.083 [DEBUG] [Thread-194583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:09:57.083 [DEBUG] [Thread-194583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:09:57.083 [DEBUG] [Thread-194583] [transport.py] [_log()] client lang: <none>
2026-02-15T00:09:57.083 [DEBUG] [Thread-194583] [transport.py] [_log()] server lang: <none>
2026-02-15T00:09:57.083 [DEBUG] [Thread-194583] [transport.py] [_log()] kex follows: False
2026-02-15T00:09:57.083 [DEBUG] [Thread-194583] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:09:57.083 [DEBUG] [Thread-194583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:09:57.083 [DEBUG] [Thread-194583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:09:57.083 [DEBUG] [Thread-194583] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:09:57.083 [DEBUG] [Thread-194583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:09:57.083 [DEBUG] [Thread-194583] [transport.py] [_log()] Compression: none
2026-02-15T00:09:57.083 [DEBUG] [Thread-194583] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:09:57.139 [DEBUG] [Thread-194583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:09:57.140 [DEBUG] [Thread-194583] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:09:57.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:09:57.141 [DEBUG] [Thread-194583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:09:57.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:09:57.196 [DEBUG] [Thread-194583] [transport.py] [_log()] userauth is OK
2026-02-15T00:09:57.196 [DEBUG] [Thread-194583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:09:57.196 [DEBUG] [Thread-194583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:09:57.197 [DEBUG] [Thread-194583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:09:57.197 [DEBUG] [Thread-194583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:09:57.214 [INFO] [Thread-194583] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:09: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-15T00:09:57.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:09:57.975 [DEBUG] [Thread-194583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:09:57.975 [DEBUG] [Thread-194583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:09:58.023 [DEBUG] [Thread-194583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:09:58.023 [DEBUG] [Thread-194583] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:09:58.032 [DEBUG] [Thread-194583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:09:58.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:09:58.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-15T00:09:58.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:09:58.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:09:58.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:09:58.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:09:58.068 [DEBUG] [Thread-194583] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:09:58.474 [DEBUG] [Thread-194585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:10:07.771 [DEBUG] [Thread-194586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:10:13.521 [DEBUG] [Thread-194587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:10:16.150 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:10:16.151 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:10:28.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:10:28.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:10:28.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:10:28.562 [DEBUG] [Thread-194588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:10:30.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 9, 25), 5.42, 69.05, 0.0, 39.84, 8.54, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:10:30.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:09:25
2026-02-15T00:10:30.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:10:31.027 [DEBUG] [Thread-194589] [transport.py] [_log()] starting thread (client mode): 0xa2d6fe80
2026-02-15T00:10:31.027 [DEBUG] [Thread-194589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:10:31.047 [DEBUG] [Thread-194589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:10:31.048 [INFO] [Thread-194589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:10:31.049 [DEBUG] [Thread-194589] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:10:31.049 [DEBUG] [Thread-194589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:10:31.049 [DEBUG] [Thread-194589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:10:31.049 [DEBUG] [Thread-194589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:10:31.049 [DEBUG] [Thread-194589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:10:31.049 [DEBUG] [Thread-194589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:10:31.049 [DEBUG] [Thread-194589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:10:31.049 [DEBUG] [Thread-194589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:10:31.049 [DEBUG] [Thread-194589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:10:31.049 [DEBUG] [Thread-194589] [transport.py] [_log()] client lang: <none>
2026-02-15T00:10:31.049 [DEBUG] [Thread-194589] [transport.py] [_log()] server lang: <none>
2026-02-15T00:10:31.049 [DEBUG] [Thread-194589] [transport.py] [_log()] kex follows: False
2026-02-15T00:10:31.049 [DEBUG] [Thread-194589] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:10:31.049 [DEBUG] [Thread-194589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:10:31.049 [DEBUG] [Thread-194589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:10:31.049 [DEBUG] [Thread-194589] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:10:31.049 [DEBUG] [Thread-194589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:10:31.049 [DEBUG] [Thread-194589] [transport.py] [_log()] Compression: none
2026-02-15T00:10:31.050 [DEBUG] [Thread-194589] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:10:31.066 [DEBUG] [Thread-194589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:10:31.067 [DEBUG] [Thread-194589] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:10:31.067 [DEBUG] [Thread-194589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:10:31.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:10:31.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:10:31.069 [DEBUG] [Thread-194589] [transport.py] [_log()] userauth is OK
2026-02-15T00:10:31.069 [DEBUG] [Thread-194589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:10:31.069 [DEBUG] [Thread-194589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:10:31.069 [DEBUG] [Thread-194589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:10:31.070 [DEBUG] [Thread-194589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:10:31.094 [INFO] [Thread-194589] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:10:31.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:10:31.690 [DEBUG] [Thread-194589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:10:31.691 [DEBUG] [Thread-194589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:10:31.691 [DEBUG] [Thread-194589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:10:31.731 [DEBUG] [Thread-194589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:10:31.732 [DEBUG] [Thread-194589] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:10:31.735 [DEBUG] [Thread-194589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:10:31.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:10:31.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:10:31.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:10:31.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:10:31.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:10:31.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:10:31.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:10:31.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:10:31.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:10:31.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.923374 -999.00   +8.40  28.81     73   +4.00 1 1 1 1 1     0    0 4.03 -24.43 ZNESW 28.8 28.8 160.4 39.4 8.8 -24.6 8.7 -23.6 8.4 -22.8 8.8 -23.8
2026-02-15T00:10:31.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:10:31.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:10:31.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.923374
2026-02-15T00:10:31.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:10:31.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:10:31.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:10:31.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:10:31.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:10:31.762 [DEBUG] [Thread-194589] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:10:31.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:09:25', tmtdew=5.42, humidity=69.05, cloud=0.0, wind=39.84, temperature=8.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:10:00', seeing=2.57, atlas_timestamp='2026-02-14T22:09:39.514', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.011749999999999261, -0.03324999999999889, -0.008000000000000895, 0.019999999999999574, 0.024250000000000327, 0.0034999999999989484, 0.034250000000000114, 0.04249999999999865, 0.04600000000000115, -0.06475000000000009, 0.013500000000000512, 0.07900000000000063, 0.044749999999998735, 0.05600000000000094, 0.03799999999999848, 0.0702499999999997, 0.05850000000000044, 0.03200000000000003, -0.015750000000000597, 0.08249999999999957, 0.036749999999999616, 0.03325000000000067, 0.06925000000000026, 0.06899999999999906, 0.0259999999999998, 0.03324999999999889, 0.0045000000000001705, 0.07000000000000028, 0.016500000000000625, 0.05200000000000138, 0.08200000000000074, 0.07225000000000037], zp_timestamp='2026-02-14T22:07:00')
2026-02-15T00:10: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-15T00:10:31.860 [DEBUG] [Thread-194592] [transport.py] [_log()] starting thread (client mode): 0xa2d6d9f0
2026-02-15T00:10:31.861 [DEBUG] [Thread-194592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:10:31.875 [DEBUG] [Thread-194592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:10:31.875 [INFO] [Thread-194592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:10:31.883 [DEBUG] [Thread-194592] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:10:31.884 [DEBUG] [Thread-194592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:10:31.884 [DEBUG] [Thread-194592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:10:31.884 [DEBUG] [Thread-194592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:10:31.884 [DEBUG] [Thread-194592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:10:31.884 [DEBUG] [Thread-194592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:10:31.884 [DEBUG] [Thread-194592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:10:31.884 [DEBUG] [Thread-194592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:10:31.884 [DEBUG] [Thread-194592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:10:31.885 [DEBUG] [Thread-194592] [transport.py] [_log()] client lang: <none>
2026-02-15T00:10:31.885 [DEBUG] [Thread-194592] [transport.py] [_log()] server lang: <none>
2026-02-15T00:10:31.885 [DEBUG] [Thread-194592] [transport.py] [_log()] kex follows: False
2026-02-15T00:10:31.885 [DEBUG] [Thread-194592] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:10:31.885 [DEBUG] [Thread-194592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:10:31.885 [DEBUG] [Thread-194592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:10:31.885 [DEBUG] [Thread-194592] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:10:31.886 [DEBUG] [Thread-194592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:10:31.886 [DEBUG] [Thread-194592] [transport.py] [_log()] Compression: none
2026-02-15T00:10:31.886 [DEBUG] [Thread-194592] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:10:31.946 [DEBUG] [Thread-194592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:10:31.947 [DEBUG] [Thread-194592] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:10:31.948 [DEBUG] [Thread-194592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:10:31.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:10:31.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:10:32.004 [DEBUG] [Thread-194592] [transport.py] [_log()] userauth is OK
2026-02-15T00:10:32.004 [DEBUG] [Thread-194592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:10:32.004 [DEBUG] [Thread-194592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:10:32.005 [DEBUG] [Thread-194592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:10:32.005 [DEBUG] [Thread-194592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:10:32.024 [INFO] [Thread-194592] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:10:32.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-15T00:10:32.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:10:32.827 [DEBUG] [Thread-194592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:10:32.827 [DEBUG] [Thread-194592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:10:32.875 [DEBUG] [Thread-194592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:10:32.875 [DEBUG] [Thread-194592] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:10:32.883 [DEBUG] [Thread-194592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:10:32.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:10:32.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-15T00:10:32.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:10:32.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:10:32.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:10:32.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:10:32.915 [DEBUG] [Thread-194592] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:10:43.602 [DEBUG] [Thread-194594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:10:58.662 [DEBUG] [Thread-194595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:11:02.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:11:02.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:11:02.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-15T00:11:04.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 10, 35), 5.51, 68.31, 0.0, 46.61, 8.75, 0, 0, 0, 2, 1, 0),)
2026-02-15T00:11:04.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:10:35
2026-02-15T00:11:05.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:11:05.300 [DEBUG] [Thread-194596] [transport.py] [_log()] starting thread (client mode): 0xa2d6be20
2026-02-15T00:11:05.300 [DEBUG] [Thread-194596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:11:05.320 [DEBUG] [Thread-194596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:11:05.320 [INFO] [Thread-194596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:11:05.323 [DEBUG] [Thread-194596] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:11:05.323 [DEBUG] [Thread-194596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:11:05.323 [DEBUG] [Thread-194596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:11:05.324 [DEBUG] [Thread-194596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:11:05.324 [DEBUG] [Thread-194596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:11:05.324 [DEBUG] [Thread-194596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:11:05.324 [DEBUG] [Thread-194596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:11:05.324 [DEBUG] [Thread-194596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:11:05.324 [DEBUG] [Thread-194596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:11:05.324 [DEBUG] [Thread-194596] [transport.py] [_log()] client lang: <none>
2026-02-15T00:11:05.324 [DEBUG] [Thread-194596] [transport.py] [_log()] server lang: <none>
2026-02-15T00:11:05.324 [DEBUG] [Thread-194596] [transport.py] [_log()] kex follows: False
2026-02-15T00:11:05.324 [DEBUG] [Thread-194596] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:11:05.324 [DEBUG] [Thread-194596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:11:05.324 [DEBUG] [Thread-194596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:11:05.324 [DEBUG] [Thread-194596] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:11:05.324 [DEBUG] [Thread-194596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:11:05.324 [DEBUG] [Thread-194596] [transport.py] [_log()] Compression: none
2026-02-15T00:11:05.324 [DEBUG] [Thread-194596] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:11:05.341 [DEBUG] [Thread-194596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:11:05.341 [DEBUG] [Thread-194596] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:11:05.342 [DEBUG] [Thread-194596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:11:05.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:11:05.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:11:05.344 [DEBUG] [Thread-194596] [transport.py] [_log()] userauth is OK
2026-02-15T00:11:05.344 [DEBUG] [Thread-194596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:11:05.344 [DEBUG] [Thread-194596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:11:05.344 [DEBUG] [Thread-194596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:11:05.344 [DEBUG] [Thread-194596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:11:05.368 [INFO] [Thread-194596] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:11:05.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:11:06.005 [DEBUG] [Thread-194596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:11:06.005 [DEBUG] [Thread-194596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:11:06.006 [DEBUG] [Thread-194596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:11:06.046 [DEBUG] [Thread-194596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:11:06.046 [DEBUG] [Thread-194596] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:11:06.049 [DEBUG] [Thread-194596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:11:06.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:11:06.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:11:06.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:11:06.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:11:06.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:11:06.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:11:06.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:11:06.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:11:06.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:11:06.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.924068 -999.00   +8.40  22.92     73   +4.00 1 1 1 1 1     0    0 3.92 -23.66 ZNESW 22.9 22.9 151.0 35.0 8.8 -24.4 8.6 -23.4 8.4 -22.6 8.8 -23.7
2026-02-15T00:11:06.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:11:06.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:11:06.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.924068
2026-02-15T00:11:06.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:11:06.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:11:06.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:11:06.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:11:06.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:11:06.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:10:35', tmtdew=5.51, humidity=68.31, cloud=0.0, wind=46.61, temperature=8.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T00:10:35', seeing=2.82, atlas_timestamp='2026-02-14T22:10:39.475', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.011749999999999261, -0.03324999999999889, -0.008000000000000895, 0.019999999999999574, 0.024250000000000327, 0.0034999999999989484, 0.034250000000000114, 0.04249999999999865, 0.04600000000000115, -0.06475000000000009, 0.013500000000000512, 0.07900000000000063, 0.044749999999998735, 0.05600000000000094, 0.03799999999999848, 0.0702499999999997, 0.05850000000000044, 0.03200000000000003, -0.015750000000000597, 0.08249999999999957, 0.036749999999999616, 0.03325000000000067, 0.06925000000000026, 0.06899999999999906, 0.0259999999999998, 0.03324999999999889, 0.0045000000000001705, 0.07000000000000028, 0.016500000000000625, 0.05200000000000138, 0.08200000000000074, 0.07225000000000037], zp_timestamp='2026-02-14T22:07:00')
2026-02-15T00:11:06.077 [DEBUG] [Thread-194596] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:11:06.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-15T00:11:06.173 [DEBUG] [Thread-194599] [transport.py] [_log()] starting thread (client mode): 0xa57d4790
2026-02-15T00:11:06.173 [DEBUG] [Thread-194599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:11:06.188 [DEBUG] [Thread-194599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:11:06.188 [INFO] [Thread-194599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:11:06.196 [DEBUG] [Thread-194599] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:11:06.196 [DEBUG] [Thread-194599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:11:06.196 [DEBUG] [Thread-194599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:11:06.196 [DEBUG] [Thread-194599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:11:06.196 [DEBUG] [Thread-194599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:11:06.196 [DEBUG] [Thread-194599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:11:06.196 [DEBUG] [Thread-194599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:11:06.196 [DEBUG] [Thread-194599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:11:06.196 [DEBUG] [Thread-194599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:11:06.196 [DEBUG] [Thread-194599] [transport.py] [_log()] client lang: <none>
2026-02-15T00:11:06.196 [DEBUG] [Thread-194599] [transport.py] [_log()] server lang: <none>
2026-02-15T00:11:06.196 [DEBUG] [Thread-194599] [transport.py] [_log()] kex follows: False
2026-02-15T00:11:06.196 [DEBUG] [Thread-194599] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:11:06.197 [DEBUG] [Thread-194599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:11:06.197 [DEBUG] [Thread-194599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:11:06.197 [DEBUG] [Thread-194599] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:11:06.197 [DEBUG] [Thread-194599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:11:06.197 [DEBUG] [Thread-194599] [transport.py] [_log()] Compression: none
2026-02-15T00:11:06.197 [DEBUG] [Thread-194599] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:11:06.256 [DEBUG] [Thread-194599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:11:06.257 [DEBUG] [Thread-194599] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:11:06.257 [DEBUG] [Thread-194599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:11:06.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:11:06.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:11:06.312 [DEBUG] [Thread-194599] [transport.py] [_log()] userauth is OK
2026-02-15T00:11:06.312 [DEBUG] [Thread-194599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:11:06.313 [DEBUG] [Thread-194599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:11:06.313 [DEBUG] [Thread-194599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:11:06.313 [DEBUG] [Thread-194599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:11:06.332 [INFO] [Thread-194599] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:11:06.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T00:11:06.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:11:07.141 [DEBUG] [Thread-194599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:11:07.141 [DEBUG] [Thread-194599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:11:07.189 [DEBUG] [Thread-194599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:11:07.190 [DEBUG] [Thread-194599] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:11:07.199 [DEBUG] [Thread-194599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:11:07.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:11:07.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:11:07.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-15T00:11:07.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:11:07.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:11:07.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:11:07.236 [DEBUG] [Thread-194599] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:11:07.837 [DEBUG] [Thread-194601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:11:13.701 [DEBUG] [Thread-194602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:11:16.351 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:11:16.352 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:11:28.763 [DEBUG] [Thread-194603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:11:37.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:11:37.231 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:11:37.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-15T00:11:39.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 11, 11), 5.33, 69.27, 0.0, 41.06, 8.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:11:39.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:11:11
2026-02-15T00:11:39.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:11:39.570 [DEBUG] [Thread-194604] [transport.py] [_log()] starting thread (client mode): 0xa57d7a30
2026-02-15T00:11:39.570 [DEBUG] [Thread-194604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:11:39.589 [DEBUG] [Thread-194604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:11:39.590 [INFO] [Thread-194604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:11:39.593 [DEBUG] [Thread-194604] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:11:39.593 [DEBUG] [Thread-194604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:11:39.593 [DEBUG] [Thread-194604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:11:39.594 [DEBUG] [Thread-194604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:11:39.594 [DEBUG] [Thread-194604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:11:39.594 [DEBUG] [Thread-194604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:11:39.594 [DEBUG] [Thread-194604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:11:39.594 [DEBUG] [Thread-194604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:11:39.594 [DEBUG] [Thread-194604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:11:39.594 [DEBUG] [Thread-194604] [transport.py] [_log()] client lang: <none>
2026-02-15T00:11:39.594 [DEBUG] [Thread-194604] [transport.py] [_log()] server lang: <none>
2026-02-15T00:11:39.594 [DEBUG] [Thread-194604] [transport.py] [_log()] kex follows: False
2026-02-15T00:11:39.594 [DEBUG] [Thread-194604] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:11:39.594 [DEBUG] [Thread-194604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:11:39.594 [DEBUG] [Thread-194604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:11:39.594 [DEBUG] [Thread-194604] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:11:39.594 [DEBUG] [Thread-194604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:11:39.594 [DEBUG] [Thread-194604] [transport.py] [_log()] Compression: none
2026-02-15T00:11:39.594 [DEBUG] [Thread-194604] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:11:39.611 [DEBUG] [Thread-194604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:11:39.611 [DEBUG] [Thread-194604] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:11:39.612 [DEBUG] [Thread-194604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:11:39.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:11:39.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:11:39.614 [DEBUG] [Thread-194604] [transport.py] [_log()] userauth is OK
2026-02-15T00:11:39.614 [DEBUG] [Thread-194604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:11:39.614 [DEBUG] [Thread-194604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:11:39.614 [DEBUG] [Thread-194604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:11:39.614 [DEBUG] [Thread-194604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:11:39.651 [INFO] [Thread-194604] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:11:39.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:11:40.256 [DEBUG] [Thread-194604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:11:40.257 [DEBUG] [Thread-194604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:11:40.257 [DEBUG] [Thread-194604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:11:40.297 [DEBUG] [Thread-194604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:11:40.298 [DEBUG] [Thread-194604] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:11:40.301 [DEBUG] [Thread-194604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:11:40.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:11:40.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:11:40.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:11:40.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:11:40.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:11:40.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:11:40.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:11:40.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:11:40.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:11:40.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.924416 -999.00   +8.40  34.68     73   +4.00 1 1 2 1 1     0    0 3.88 -24.11 ZNESW 34.7 34.7 153.4 41.3 8.8 -24.7 8.7 -23.6 8.4 -22.7 8.7 -23.8
2026-02-15T00:11:40.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:11:40.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:11:40.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.924416
2026-02-15T00:11:40.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:11:40.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:11:40.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:11:40.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:11:40.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:11:40.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:11:11', tmtdew=5.33, humidity=69.27, cloud=0.0, wind=41.06, temperature=8.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:11:12', seeing=2.37, atlas_timestamp='2026-02-14T22:11:09.542', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.011749999999999261, -0.03324999999999889, -0.008000000000000895, 0.019999999999999574, 0.024250000000000327, 0.0034999999999989484, 0.034250000000000114, 0.04249999999999865, 0.04600000000000115, -0.06475000000000009, 0.013500000000000512, 0.07900000000000063, 0.044749999999998735, 0.05600000000000094, 0.03799999999999848, 0.0702499999999997, 0.05850000000000044, 0.03200000000000003, -0.015750000000000597, 0.08249999999999957, 0.036749999999999616, 0.03325000000000067, 0.06925000000000026, 0.06899999999999906, 0.0259999999999998, 0.03324999999999889, 0.0045000000000001705, 0.07000000000000028, 0.016500000000000625, 0.05200000000000138, 0.08200000000000074, 0.07225000000000037], zp_timestamp='2026-02-14T22:07:00')
2026-02-15T00:11:40.329 [DEBUG] [Thread-194604] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:11:40.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-15T00:11:40.423 [DEBUG] [Thread-194607] [transport.py] [_log()] starting thread (client mode): 0xa2d78f40
2026-02-15T00:11:40.424 [DEBUG] [Thread-194607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:11:40.438 [DEBUG] [Thread-194607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:11:40.439 [INFO] [Thread-194607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:11:40.446 [DEBUG] [Thread-194607] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:11:40.446 [DEBUG] [Thread-194607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:11:40.447 [DEBUG] [Thread-194607] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:11:40.447 [DEBUG] [Thread-194607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:11:40.447 [DEBUG] [Thread-194607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:11:40.447 [DEBUG] [Thread-194607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:11:40.447 [DEBUG] [Thread-194607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:11:40.447 [DEBUG] [Thread-194607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:11:40.448 [DEBUG] [Thread-194607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:11:40.448 [DEBUG] [Thread-194607] [transport.py] [_log()] client lang: <none>
2026-02-15T00:11:40.448 [DEBUG] [Thread-194607] [transport.py] [_log()] server lang: <none>
2026-02-15T00:11:40.448 [DEBUG] [Thread-194607] [transport.py] [_log()] kex follows: False
2026-02-15T00:11:40.448 [DEBUG] [Thread-194607] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:11:40.448 [DEBUG] [Thread-194607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:11:40.448 [DEBUG] [Thread-194607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:11:40.448 [DEBUG] [Thread-194607] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:11:40.448 [DEBUG] [Thread-194607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:11:40.448 [DEBUG] [Thread-194607] [transport.py] [_log()] Compression: none
2026-02-15T00:11:40.448 [DEBUG] [Thread-194607] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:11:40.504 [DEBUG] [Thread-194607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:11:40.504 [DEBUG] [Thread-194607] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:11:40.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:11:40.506 [DEBUG] [Thread-194607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:11:40.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:11:40.560 [DEBUG] [Thread-194607] [transport.py] [_log()] userauth is OK
2026-02-15T00:11:40.560 [DEBUG] [Thread-194607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:11:40.560 [DEBUG] [Thread-194607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:11:40.560 [DEBUG] [Thread-194607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:11:40.560 [DEBUG] [Thread-194607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:11:40.578 [INFO] [Thread-194607] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:11:40.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-15T00:11:40.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:11:41.379 [DEBUG] [Thread-194607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:11:41.379 [DEBUG] [Thread-194607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:11:41.430 [DEBUG] [Thread-194607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:11:41.430 [DEBUG] [Thread-194607] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:11:41.440 [DEBUG] [Thread-194607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:11:41.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:11:41.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-15T00:11:41.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-15T00:11:41.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:11:41.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:11:41.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:11:41.476 [DEBUG] [Thread-194607] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:11:43.800 [DEBUG] [Thread-194609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:11:58.850 [DEBUG] [Thread-194610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:12:07.905 [DEBUG] [Thread-194611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:12:11.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:12:11.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:12:11.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-15T00:12:13.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 11, 47), 5.32, 69.32, 0.0, 39.82, 8.53, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:12:13.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:11:47
2026-02-15T00:12:13.884 [DEBUG] [Thread-194612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:12:14.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:12:14.416 [DEBUG] [Thread-194613] [transport.py] [_log()] starting thread (client mode): 0xa2d6fe80
2026-02-15T00:12:14.416 [DEBUG] [Thread-194613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:12:14.431 [DEBUG] [Thread-194613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:12:14.431 [INFO] [Thread-194613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:12:14.435 [DEBUG] [Thread-194613] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:12:14.435 [DEBUG] [Thread-194613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:12:14.435 [DEBUG] [Thread-194613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:12:14.435 [DEBUG] [Thread-194613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:12:14.435 [DEBUG] [Thread-194613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:12:14.435 [DEBUG] [Thread-194613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:12:14.435 [DEBUG] [Thread-194613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:12:14.435 [DEBUG] [Thread-194613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:12:14.435 [DEBUG] [Thread-194613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:12:14.435 [DEBUG] [Thread-194613] [transport.py] [_log()] client lang: <none>
2026-02-15T00:12:14.435 [DEBUG] [Thread-194613] [transport.py] [_log()] server lang: <none>
2026-02-15T00:12:14.435 [DEBUG] [Thread-194613] [transport.py] [_log()] kex follows: False
2026-02-15T00:12:14.435 [DEBUG] [Thread-194613] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:12:14.435 [DEBUG] [Thread-194613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:12:14.435 [DEBUG] [Thread-194613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:12:14.435 [DEBUG] [Thread-194613] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:12:14.435 [DEBUG] [Thread-194613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:12:14.435 [DEBUG] [Thread-194613] [transport.py] [_log()] Compression: none
2026-02-15T00:12:14.435 [DEBUG] [Thread-194613] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:12:14.451 [DEBUG] [Thread-194613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:12:14.451 [DEBUG] [Thread-194613] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:12:14.451 [DEBUG] [Thread-194613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:12:14.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:12:14.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:12:14.452 [DEBUG] [Thread-194613] [transport.py] [_log()] userauth is OK
2026-02-15T00:12:14.452 [DEBUG] [Thread-194613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:12:14.452 [DEBUG] [Thread-194613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:12:14.452 [DEBUG] [Thread-194613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:12:14.452 [DEBUG] [Thread-194613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:12:14.461 [INFO] [Thread-194613] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:12:14.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:12:15.093 [DEBUG] [Thread-194613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:12:15.093 [DEBUG] [Thread-194613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:12:15.093 [DEBUG] [Thread-194613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:12:15.135 [DEBUG] [Thread-194613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:12:15.135 [DEBUG] [Thread-194613] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:12:15.138 [DEBUG] [Thread-194613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:12:15.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:12:15.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:12:15.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:12:15.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:12:15.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:12:15.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:12:15.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:12:15.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:12:15.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:12:15.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.924763 -999.00   +8.40  22.31     73   +4.00 1 1 1 1 1     0    0 3.97 -23.59 ZNESW 22.3 22.3 153.2 32.9 8.8 -24.6 8.7 -23.6 8.4 -22.7 8.8 -23.8
2026-02-15T00:12:15.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:12:15.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:12:15.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.924763
2026-02-15T00:12:15.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:12:15.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:12:15.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:12:15.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:12:15.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:12:15.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:11:47', tmtdew=5.32, humidity=69.32, cloud=0.0, wind=39.82, temperature=8.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:11:47', seeing=3.08, atlas_timestamp='2026-02-14T22:11:39.523', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03524999999999956, -0.006249999999999645, -0.02200000000000024, 0.0034999999999989484, -0.01974999999999838, 0.0029999999999983373, 0.04275000000000162, 0.045999999999999375, 0.06449999999999889, -0.051750000000000185, -0.002000000000000668, 0.067499999999999, 0.04075000000000095, 0.04899999999999949, 0.013999999999999346, 0.03924999999999912, 0.06550000000000011, 0.032999999999999474, 0.0277499999999975, 0.07599999999999874, 0.025749999999998607, 0.021250000000000213, 0.08225000000000016, 0.09199999999999875, 0.0389999999999997, 0.04625000000000057, -0.011499999999999844, 0.07200000000000095, 0.017500000000001847, 0.057000000000000384, 0.1120000000000001, 0.04774999999999885], zp_timestamp='2026-02-14T22:10:00')
2026-02-15T00:12:15.163 [DEBUG] [Thread-194613] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:12:15.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-15T00:12:15.272 [DEBUG] [Thread-194616] [transport.py] [_log()] starting thread (client mode): 0xa2d6a530
2026-02-15T00:12:15.272 [DEBUG] [Thread-194616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:12:15.292 [DEBUG] [Thread-194616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:12:15.292 [INFO] [Thread-194616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:12:15.302 [DEBUG] [Thread-194616] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:12:15.302 [DEBUG] [Thread-194616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:12:15.302 [DEBUG] [Thread-194616] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:12:15.302 [DEBUG] [Thread-194616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:12:15.302 [DEBUG] [Thread-194616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:12:15.302 [DEBUG] [Thread-194616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:12:15.303 [DEBUG] [Thread-194616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:12:15.303 [DEBUG] [Thread-194616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:12:15.303 [DEBUG] [Thread-194616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:12:15.303 [DEBUG] [Thread-194616] [transport.py] [_log()] client lang: <none>
2026-02-15T00:12:15.303 [DEBUG] [Thread-194616] [transport.py] [_log()] server lang: <none>
2026-02-15T00:12:15.303 [DEBUG] [Thread-194616] [transport.py] [_log()] kex follows: False
2026-02-15T00:12:15.303 [DEBUG] [Thread-194616] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:12:15.303 [DEBUG] [Thread-194616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:12:15.303 [DEBUG] [Thread-194616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:12:15.304 [DEBUG] [Thread-194616] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:12:15.304 [DEBUG] [Thread-194616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:12:15.304 [DEBUG] [Thread-194616] [transport.py] [_log()] Compression: none
2026-02-15T00:12:15.304 [DEBUG] [Thread-194616] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:12:15.361 [DEBUG] [Thread-194616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:12:15.362 [DEBUG] [Thread-194616] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:12:15.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:12:15.364 [DEBUG] [Thread-194616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:12:15.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:12:15.421 [DEBUG] [Thread-194616] [transport.py] [_log()] userauth is OK
2026-02-15T00:12:15.422 [DEBUG] [Thread-194616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:12:15.422 [DEBUG] [Thread-194616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:12:15.422 [DEBUG] [Thread-194616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:12:15.422 [DEBUG] [Thread-194616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:12:15.441 [INFO] [Thread-194616] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:12:15.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-15T00:12:15.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:12:16.292 [DEBUG] [Thread-194616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:12:16.292 [DEBUG] [Thread-194616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:12:16.344 [DEBUG] [Thread-194616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:12:16.344 [DEBUG] [Thread-194616] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:12:16.356 [DEBUG] [Thread-194616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:12:16.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:12:16.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:12:16.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:12:16.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:12:16.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:12:16.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:12:16.406 [DEBUG] [Thread-194616] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:12:16.555 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:12:16.556 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:12:28.918 [DEBUG] [Thread-194618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:12:43.967 [DEBUG] [Thread-194619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:12:46.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:12:46.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:12:46.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-15T00:12:48.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 12, 22), 5.32, 69.34, 0.0, 39.13, 8.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:12:48.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:12:22
2026-02-15T00:12:48.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:12:48.902 [DEBUG] [Thread-194620] [transport.py] [_log()] starting thread (client mode): 0xa2d01420
2026-02-15T00:12:48.902 [DEBUG] [Thread-194620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:12:48.922 [DEBUG] [Thread-194620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:12:48.922 [INFO] [Thread-194620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:12:48.925 [DEBUG] [Thread-194620] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:12:48.926 [DEBUG] [Thread-194620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:12:48.926 [DEBUG] [Thread-194620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:12:48.926 [DEBUG] [Thread-194620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:12:48.926 [DEBUG] [Thread-194620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:12:48.926 [DEBUG] [Thread-194620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:12:48.926 [DEBUG] [Thread-194620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:12:48.926 [DEBUG] [Thread-194620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:12:48.926 [DEBUG] [Thread-194620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:12:48.926 [DEBUG] [Thread-194620] [transport.py] [_log()] client lang: <none>
2026-02-15T00:12:48.926 [DEBUG] [Thread-194620] [transport.py] [_log()] server lang: <none>
2026-02-15T00:12:48.926 [DEBUG] [Thread-194620] [transport.py] [_log()] kex follows: False
2026-02-15T00:12:48.926 [DEBUG] [Thread-194620] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:12:48.926 [DEBUG] [Thread-194620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:12:48.926 [DEBUG] [Thread-194620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:12:48.926 [DEBUG] [Thread-194620] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:12:48.926 [DEBUG] [Thread-194620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:12:48.926 [DEBUG] [Thread-194620] [transport.py] [_log()] Compression: none
2026-02-15T00:12:48.926 [DEBUG] [Thread-194620] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:12:48.944 [DEBUG] [Thread-194620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:12:48.944 [DEBUG] [Thread-194620] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:12:48.945 [DEBUG] [Thread-194620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:12:48.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:12:48.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:12:48.947 [DEBUG] [Thread-194620] [transport.py] [_log()] userauth is OK
2026-02-15T00:12:48.948 [DEBUG] [Thread-194620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:12:48.948 [DEBUG] [Thread-194620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:12:48.948 [DEBUG] [Thread-194620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:12:48.948 [DEBUG] [Thread-194620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:12:48.973 [INFO] [Thread-194620] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:12:48.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:12:49.583 [DEBUG] [Thread-194620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:12:49.583 [DEBUG] [Thread-194620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:12:49.584 [DEBUG] [Thread-194620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:12:49.624 [DEBUG] [Thread-194620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:12:49.625 [DEBUG] [Thread-194620] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:12:49.628 [DEBUG] [Thread-194620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:12:49.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:12:49.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:12:49.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:12:49.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:12:49.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:12:49.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:12:49.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:12:49.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:12:49.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:12:49.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.925110 -999.00   +8.30  26.47     74   +4.00 1 1 1 1 1     0    0 3.98 -24.25 ZNESW 26.5 26.5 147.9 34.2 8.8 -24.5 8.7 -23.5 8.4 -22.7 8.8 -23.9
2026-02-15T00:12:49.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:12:49.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:12:49.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.925110
2026-02-15T00:12:49.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:12:49.654 [DEBUG] [Thread-194620] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:12:49.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:12:49.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:12:49.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:12:49.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:12:49.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:12:22', tmtdew=5.32, humidity=69.34, cloud=0.0, wind=39.13, temperature=8.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:12:22', seeing=2.34, atlas_timestamp='2026-02-14T22:12:09.504', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03524999999999956, -0.006249999999999645, -0.02200000000000024, 0.0034999999999989484, -0.01974999999999838, 0.0029999999999983373, 0.04275000000000162, 0.045999999999999375, 0.06449999999999889, -0.051750000000000185, -0.002000000000000668, 0.067499999999999, 0.04075000000000095, 0.04899999999999949, 0.013999999999999346, 0.03924999999999912, 0.06550000000000011, 0.032999999999999474, 0.0277499999999975, 0.07599999999999874, 0.025749999999998607, 0.021250000000000213, 0.08225000000000016, 0.09199999999999875, 0.0389999999999997, 0.04625000000000057, -0.011499999999999844, 0.07200000000000095, 0.017500000000001847, 0.057000000000000384, 0.1120000000000001, 0.04774999999999885], zp_timestamp='2026-02-14T22:10:00')
2026-02-15T00:12:49.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T00:12:49.745 [DEBUG] [Thread-194623] [transport.py] [_log()] starting thread (client mode): 0xa2d10d60
2026-02-15T00:12:49.746 [DEBUG] [Thread-194623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:12:49.760 [DEBUG] [Thread-194623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:12:49.760 [INFO] [Thread-194623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:12:49.767 [DEBUG] [Thread-194623] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:12:49.768 [DEBUG] [Thread-194623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:12:49.768 [DEBUG] [Thread-194623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:12:49.768 [DEBUG] [Thread-194623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:12:49.768 [DEBUG] [Thread-194623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:12:49.768 [DEBUG] [Thread-194623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:12:49.768 [DEBUG] [Thread-194623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:12:49.768 [DEBUG] [Thread-194623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:12:49.768 [DEBUG] [Thread-194623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:12:49.768 [DEBUG] [Thread-194623] [transport.py] [_log()] client lang: <none>
2026-02-15T00:12:49.768 [DEBUG] [Thread-194623] [transport.py] [_log()] server lang: <none>
2026-02-15T00:12:49.768 [DEBUG] [Thread-194623] [transport.py] [_log()] kex follows: False
2026-02-15T00:12:49.768 [DEBUG] [Thread-194623] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:12:49.768 [DEBUG] [Thread-194623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:12:49.768 [DEBUG] [Thread-194623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:12:49.768 [DEBUG] [Thread-194623] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:12:49.768 [DEBUG] [Thread-194623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:12:49.768 [DEBUG] [Thread-194623] [transport.py] [_log()] Compression: none
2026-02-15T00:12:49.768 [DEBUG] [Thread-194623] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:12:49.827 [DEBUG] [Thread-194623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:12:49.828 [DEBUG] [Thread-194623] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:12:49.829 [DEBUG] [Thread-194623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:12:49.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:12:49.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:12:49.883 [DEBUG] [Thread-194623] [transport.py] [_log()] userauth is OK
2026-02-15T00:12:49.883 [DEBUG] [Thread-194623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:12:49.884 [DEBUG] [Thread-194623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:12:49.884 [DEBUG] [Thread-194623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:12:49.884 [DEBUG] [Thread-194623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:12:49.901 [INFO] [Thread-194623] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:12:49.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-15T00:12:49.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:12:50.673 [DEBUG] [Thread-194623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:12:50.673 [DEBUG] [Thread-194623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:12:50.721 [DEBUG] [Thread-194623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:12:50.721 [DEBUG] [Thread-194623] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:12:50.729 [DEBUG] [Thread-194623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:12:50.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:12:50.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-15T00:12:50.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-15T00:12:50.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:12:50.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:12:50.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:12:50.764 [DEBUG] [Thread-194623] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:12:59.005 [DEBUG] [Thread-194625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:13:07.964 [DEBUG] [Thread-194626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:13:14.057 [DEBUG] [Thread-194627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:13:16.761 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:13:16.763 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:13:20.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:13:20.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:13:20.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-15T00:13:22.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 12, 57), 5.27, 69.3, 0.0, 38.64, 8.46, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:13:22.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:12:57
2026-02-15T00:13:23.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:13:23.241 [DEBUG] [Thread-194628] [transport.py] [_log()] starting thread (client mode): 0xa2d69750
2026-02-15T00:13:23.242 [DEBUG] [Thread-194628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:13:23.261 [DEBUG] [Thread-194628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:13:23.262 [INFO] [Thread-194628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:13:23.265 [DEBUG] [Thread-194628] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:13:23.265 [DEBUG] [Thread-194628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:13:23.265 [DEBUG] [Thread-194628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:13:23.265 [DEBUG] [Thread-194628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:13:23.265 [DEBUG] [Thread-194628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:13:23.265 [DEBUG] [Thread-194628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:13:23.265 [DEBUG] [Thread-194628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:13:23.265 [DEBUG] [Thread-194628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:13:23.265 [DEBUG] [Thread-194628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:13:23.265 [DEBUG] [Thread-194628] [transport.py] [_log()] client lang: <none>
2026-02-15T00:13:23.265 [DEBUG] [Thread-194628] [transport.py] [_log()] server lang: <none>
2026-02-15T00:13:23.265 [DEBUG] [Thread-194628] [transport.py] [_log()] kex follows: False
2026-02-15T00:13:23.265 [DEBUG] [Thread-194628] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:13:23.265 [DEBUG] [Thread-194628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:13:23.265 [DEBUG] [Thread-194628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:13:23.265 [DEBUG] [Thread-194628] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:13:23.265 [DEBUG] [Thread-194628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:13:23.265 [DEBUG] [Thread-194628] [transport.py] [_log()] Compression: none
2026-02-15T00:13:23.265 [DEBUG] [Thread-194628] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:13:23.282 [DEBUG] [Thread-194628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:13:23.283 [DEBUG] [Thread-194628] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:13:23.283 [DEBUG] [Thread-194628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:13:23.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:13:23.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:13:23.285 [DEBUG] [Thread-194628] [transport.py] [_log()] userauth is OK
2026-02-15T00:13:23.285 [DEBUG] [Thread-194628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:13:23.286 [DEBUG] [Thread-194628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:13:23.286 [DEBUG] [Thread-194628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:13:23.286 [DEBUG] [Thread-194628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:13:23.311 [INFO] [Thread-194628] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:13:23.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:13:23.914 [DEBUG] [Thread-194628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:13:23.915 [DEBUG] [Thread-194628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:13:23.915 [DEBUG] [Thread-194628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:13:23.956 [DEBUG] [Thread-194628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:13:23.956 [DEBUG] [Thread-194628] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:13:23.959 [DEBUG] [Thread-194628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:13:23.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:13:23.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:13:23.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:13:23.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:13:23.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:13:23.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:13:23.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:13:23.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:13:23.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:13:23.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.925457 -999.00   +8.30  29.29     74   +4.00 1 1 1 1 1     0    0 3.93 -23.74 ZNESW 29.3 29.3 166.8 37.1 8.8 -24.6 8.6 -23.5 8.4 -22.6 8.8 -23.7
2026-02-15T00:13:23.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:13:23.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:13:23.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.925457
2026-02-15T00:13:23.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:13:23.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:13:23.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:13:23.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:13:23.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:13:23.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:12:57', tmtdew=5.27, humidity=69.3, cloud=0.0, wind=38.64, temperature=8.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:12:57', seeing=2.47, atlas_timestamp='2026-02-14T22:12:39.485', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03524999999999956, -0.006249999999999645, -0.02200000000000024, 0.0034999999999989484, -0.01974999999999838, 0.0029999999999983373, 0.04275000000000162, 0.045999999999999375, 0.06449999999999889, -0.051750000000000185, -0.002000000000000668, 0.067499999999999, 0.04075000000000095, 0.04899999999999949, 0.013999999999999346, 0.03924999999999912, 0.06550000000000011, 0.032999999999999474, 0.0277499999999975, 0.07599999999999874, 0.025749999999998607, 0.021250000000000213, 0.08225000000000016, 0.09199999999999875, 0.0389999999999997, 0.04625000000000057, -0.011499999999999844, 0.07200000000000095, 0.017500000000001847, 0.057000000000000384, 0.1120000000000001, 0.04774999999999885], zp_timestamp='2026-02-14T22:10:00')
2026-02-15T00:13:23.984 [DEBUG] [Thread-194628] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:13:24.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-15T00:13:24.080 [DEBUG] [Thread-194631] [transport.py] [_log()] starting thread (client mode): 0xa2d6a0e0
2026-02-15T00:13:24.080 [DEBUG] [Thread-194631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:13:24.095 [DEBUG] [Thread-194631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:13:24.095 [INFO] [Thread-194631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:13:24.103 [DEBUG] [Thread-194631] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:13:24.103 [DEBUG] [Thread-194631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:13:24.103 [DEBUG] [Thread-194631] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:13:24.103 [DEBUG] [Thread-194631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:13:24.103 [DEBUG] [Thread-194631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:13:24.103 [DEBUG] [Thread-194631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:13:24.103 [DEBUG] [Thread-194631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:13:24.103 [DEBUG] [Thread-194631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:13:24.103 [DEBUG] [Thread-194631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:13:24.104 [DEBUG] [Thread-194631] [transport.py] [_log()] client lang: <none>
2026-02-15T00:13:24.104 [DEBUG] [Thread-194631] [transport.py] [_log()] server lang: <none>
2026-02-15T00:13:24.104 [DEBUG] [Thread-194631] [transport.py] [_log()] kex follows: False
2026-02-15T00:13:24.104 [DEBUG] [Thread-194631] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:13:24.104 [DEBUG] [Thread-194631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:13:24.104 [DEBUG] [Thread-194631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:13:24.104 [DEBUG] [Thread-194631] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:13:24.104 [DEBUG] [Thread-194631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:13:24.104 [DEBUG] [Thread-194631] [transport.py] [_log()] Compression: none
2026-02-15T00:13:24.104 [DEBUG] [Thread-194631] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:13:24.165 [DEBUG] [Thread-194631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:13:24.165 [DEBUG] [Thread-194631] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:13:24.166 [DEBUG] [Thread-194631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:13:24.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:13:24.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:13:24.225 [DEBUG] [Thread-194631] [transport.py] [_log()] userauth is OK
2026-02-15T00:13:24.225 [DEBUG] [Thread-194631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:13:24.225 [DEBUG] [Thread-194631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:13:24.225 [DEBUG] [Thread-194631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:13:24.225 [DEBUG] [Thread-194631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:13:24.250 [INFO] [Thread-194631] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:13:24.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-15T00:13:24.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:13:25.059 [DEBUG] [Thread-194631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:13:25.060 [DEBUG] [Thread-194631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:13:25.107 [DEBUG] [Thread-194631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:13:25.108 [DEBUG] [Thread-194631] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:13:25.117 [DEBUG] [Thread-194631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:13:25.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:13:25.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-15T00:13:25.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-15T00:13:25.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:13:25.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:13:25.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:13:25.154 [DEBUG] [Thread-194631] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:13:29.093 [DEBUG] [Thread-194633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:13:44.155 [DEBUG] [Thread-194634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:13:55.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:13:55.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:13:55.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-15T00:13:57.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 13, 33), 5.43, 68.64, 0.0, 37.37, 8.69, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:13:57.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:13:33
2026-02-15T00:13:57.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:13:57.734 [DEBUG] [Thread-194635] [transport.py] [_log()] starting thread (client mode): 0xa57c28c0
2026-02-15T00:13:57.734 [DEBUG] [Thread-194635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:13:57.754 [DEBUG] [Thread-194635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:13:57.754 [INFO] [Thread-194635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:13:57.758 [DEBUG] [Thread-194635] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:13:57.758 [DEBUG] [Thread-194635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:13:57.758 [DEBUG] [Thread-194635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:13:57.758 [DEBUG] [Thread-194635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:13:57.758 [DEBUG] [Thread-194635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:13:57.758 [DEBUG] [Thread-194635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:13:57.758 [DEBUG] [Thread-194635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:13:57.758 [DEBUG] [Thread-194635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:13:57.758 [DEBUG] [Thread-194635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:13:57.758 [DEBUG] [Thread-194635] [transport.py] [_log()] client lang: <none>
2026-02-15T00:13:57.758 [DEBUG] [Thread-194635] [transport.py] [_log()] server lang: <none>
2026-02-15T00:13:57.758 [DEBUG] [Thread-194635] [transport.py] [_log()] kex follows: False
2026-02-15T00:13:57.758 [DEBUG] [Thread-194635] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:13:57.758 [DEBUG] [Thread-194635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:13:57.758 [DEBUG] [Thread-194635] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:13:57.758 [DEBUG] [Thread-194635] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:13:57.758 [DEBUG] [Thread-194635] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:13:57.758 [DEBUG] [Thread-194635] [transport.py] [_log()] Compression: none
2026-02-15T00:13:57.758 [DEBUG] [Thread-194635] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:13:57.775 [DEBUG] [Thread-194635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:13:57.775 [DEBUG] [Thread-194635] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:13:57.775 [DEBUG] [Thread-194635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:13:57.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:13:57.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:13:57.776 [DEBUG] [Thread-194635] [transport.py] [_log()] userauth is OK
2026-02-15T00:13:57.776 [DEBUG] [Thread-194635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:13:57.776 [DEBUG] [Thread-194635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:13:57.776 [DEBUG] [Thread-194635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:13:57.776 [DEBUG] [Thread-194635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:13:57.786 [INFO] [Thread-194635] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:13:57.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:13:58.591 [DEBUG] [Thread-194635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:13:58.591 [DEBUG] [Thread-194635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:13:58.591 [DEBUG] [Thread-194635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:13:58.631 [DEBUG] [Thread-194635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:13:58.632 [DEBUG] [Thread-194635] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:13:58.635 [DEBUG] [Thread-194635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:13:58.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:13:58.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:13:58.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:13:58.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:13:58.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:13:58.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:13:58.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:13:58.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:13:58.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:13:58.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.925804 -999.00   +8.30  25.91     74   +4.00 1 1 1 1 1     0    0 3.90 -24.57 ZNESW 25.9 25.9 146.0 37.5 8.8 -24.4 8.6 -23.5 8.4 -22.7 8.8 -23.8
2026-02-15T00:13:58.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:13:58.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:13:58.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.925804
2026-02-15T00:13:58.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:13:58.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:13:58.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:13:58.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:13:58.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:13:58.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:13:33', tmtdew=5.43, humidity=68.64, cloud=0.0, wind=37.37, temperature=8.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:13:33', seeing=2.59, atlas_timestamp='2026-02-14T22:13:09.466', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03524999999999956, -0.006249999999999645, -0.02200000000000024, 0.0034999999999989484, -0.01974999999999838, 0.0029999999999983373, 0.04275000000000162, 0.045999999999999375, 0.06449999999999889, -0.051750000000000185, -0.002000000000000668, 0.067499999999999, 0.04075000000000095, 0.04899999999999949, 0.013999999999999346, 0.03924999999999912, 0.06550000000000011, 0.032999999999999474, 0.0277499999999975, 0.07599999999999874, 0.025749999999998607, 0.021250000000000213, 0.08225000000000016, 0.09199999999999875, 0.0389999999999997, 0.04625000000000057, -0.011499999999999844, 0.07200000000000095, 0.017500000000001847, 0.057000000000000384, 0.1120000000000001, 0.04774999999999885], zp_timestamp='2026-02-14T22:10:00')
2026-02-15T00:13:58.660 [DEBUG] [Thread-194635] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:13: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-15T00:13:58.758 [DEBUG] [Thread-194638] [transport.py] [_log()] starting thread (client mode): 0xa2d02f80
2026-02-15T00:13:58.758 [DEBUG] [Thread-194638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:13:58.773 [DEBUG] [Thread-194638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:13:58.773 [INFO] [Thread-194638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:13:58.781 [DEBUG] [Thread-194638] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:13:58.781 [DEBUG] [Thread-194638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:13:58.781 [DEBUG] [Thread-194638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:13:58.781 [DEBUG] [Thread-194638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:13:58.781 [DEBUG] [Thread-194638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:13:58.782 [DEBUG] [Thread-194638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:13:58.782 [DEBUG] [Thread-194638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:13:58.782 [DEBUG] [Thread-194638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:13:58.782 [DEBUG] [Thread-194638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:13:58.782 [DEBUG] [Thread-194638] [transport.py] [_log()] client lang: <none>
2026-02-15T00:13:58.782 [DEBUG] [Thread-194638] [transport.py] [_log()] server lang: <none>
2026-02-15T00:13:58.782 [DEBUG] [Thread-194638] [transport.py] [_log()] kex follows: False
2026-02-15T00:13:58.782 [DEBUG] [Thread-194638] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:13:58.782 [DEBUG] [Thread-194638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:13:58.782 [DEBUG] [Thread-194638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:13:58.782 [DEBUG] [Thread-194638] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:13:58.782 [DEBUG] [Thread-194638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:13:58.782 [DEBUG] [Thread-194638] [transport.py] [_log()] Compression: none
2026-02-15T00:13:58.782 [DEBUG] [Thread-194638] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:13:58.839 [DEBUG] [Thread-194638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:13:58.840 [DEBUG] [Thread-194638] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:13:58.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:13:58.841 [DEBUG] [Thread-194638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:13:58.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:13:58.897 [DEBUG] [Thread-194638] [transport.py] [_log()] userauth is OK
2026-02-15T00:13:58.897 [DEBUG] [Thread-194638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:13:58.897 [DEBUG] [Thread-194638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:13:58.897 [DEBUG] [Thread-194638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:13:58.897 [DEBUG] [Thread-194638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:13:58.917 [INFO] [Thread-194638] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:13: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-15T00:13:58.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:13:59.191 [DEBUG] [Thread-194640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:13:59.719 [DEBUG] [Thread-194638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:13:59.720 [DEBUG] [Thread-194638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:13:59.767 [DEBUG] [Thread-194638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:13:59.768 [DEBUG] [Thread-194638] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:13:59.777 [DEBUG] [Thread-194638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:13:59.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:13:59.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-15T00:13:59.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-15T00:13:59.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:13:59.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:13:59.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:13:59.814 [DEBUG] [Thread-194638] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:14:08.026 [DEBUG] [Thread-194641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:14:14.244 [DEBUG] [Thread-194642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:14:16.961 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:14:16.962 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:14:29.280 [DEBUG] [Thread-194643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:14:29.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:14:29.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:14:29.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-15T00:14:31.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 14, 9), 5.25, 69.42, 0.0, 30.47, 8.38, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:14:31.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:14:09
2026-02-15T00:14:32.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:14:32.439 [DEBUG] [Thread-194644] [transport.py] [_log()] starting thread (client mode): 0xa2d10130
2026-02-15T00:14:32.439 [DEBUG] [Thread-194644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:14:32.458 [DEBUG] [Thread-194644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:14:32.458 [INFO] [Thread-194644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:14:32.461 [DEBUG] [Thread-194644] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:14:32.461 [DEBUG] [Thread-194644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:14:32.462 [DEBUG] [Thread-194644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:14:32.462 [DEBUG] [Thread-194644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:14:32.462 [DEBUG] [Thread-194644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:14:32.462 [DEBUG] [Thread-194644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:14:32.462 [DEBUG] [Thread-194644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:14:32.462 [DEBUG] [Thread-194644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:14:32.462 [DEBUG] [Thread-194644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:14:32.462 [DEBUG] [Thread-194644] [transport.py] [_log()] client lang: <none>
2026-02-15T00:14:32.462 [DEBUG] [Thread-194644] [transport.py] [_log()] server lang: <none>
2026-02-15T00:14:32.462 [DEBUG] [Thread-194644] [transport.py] [_log()] kex follows: False
2026-02-15T00:14:32.462 [DEBUG] [Thread-194644] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:14:32.462 [DEBUG] [Thread-194644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:14:32.462 [DEBUG] [Thread-194644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:14:32.462 [DEBUG] [Thread-194644] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:14:32.462 [DEBUG] [Thread-194644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:14:32.462 [DEBUG] [Thread-194644] [transport.py] [_log()] Compression: none
2026-02-15T00:14:32.462 [DEBUG] [Thread-194644] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:14:32.480 [DEBUG] [Thread-194644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:14:32.481 [DEBUG] [Thread-194644] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:14:32.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:14:32.482 [DEBUG] [Thread-194644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:14:32.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:14:32.484 [DEBUG] [Thread-194644] [transport.py] [_log()] userauth is OK
2026-02-15T00:14:32.484 [DEBUG] [Thread-194644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:14:32.484 [DEBUG] [Thread-194644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:14:32.484 [DEBUG] [Thread-194644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:14:32.484 [DEBUG] [Thread-194644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:14:32.509 [INFO] [Thread-194644] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:14:32.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:14:33.126 [DEBUG] [Thread-194644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:14:33.126 [DEBUG] [Thread-194644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:14:33.126 [DEBUG] [Thread-194644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:14:33.167 [DEBUG] [Thread-194644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:14:33.167 [DEBUG] [Thread-194644] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:14:33.169 [DEBUG] [Thread-194644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:14:33.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:14:33.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:14:33.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:14:33.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:14:33.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:14:33.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:14:33.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:14:33.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:14:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:14:33.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.926499 -999.00   +8.30  28.69     74   +4.10 1 1 1 1 1     0    0 3.69 -26.92 ZNESW 28.7 28.7 153.0 41.6 8.8 -24.4 8.6 -23.4 8.4 -22.6 8.8 -23.7
2026-02-15T00:14:33.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:14:33.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:14:33.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.926499
2026-02-15T00:14:33.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:14:33.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:14:33.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:14:33.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:14:33.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:14:33.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:14:09', tmtdew=5.25, humidity=69.42, cloud=0.0, wind=30.47, temperature=8.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:14:09', seeing=2.61, atlas_timestamp='2026-02-14T22:14:09.514', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03524999999999956, -0.006249999999999645, -0.02200000000000024, 0.0034999999999989484, -0.01974999999999838, 0.0029999999999983373, 0.04275000000000162, 0.045999999999999375, 0.06449999999999889, -0.051750000000000185, -0.002000000000000668, 0.067499999999999, 0.04075000000000095, 0.04899999999999949, 0.013999999999999346, 0.03924999999999912, 0.06550000000000011, 0.032999999999999474, 0.0277499999999975, 0.07599999999999874, 0.025749999999998607, 0.021250000000000213, 0.08225000000000016, 0.09199999999999875, 0.0389999999999997, 0.04625000000000057, -0.011499999999999844, 0.07200000000000095, 0.017500000000001847, 0.057000000000000384, 0.1120000000000001, 0.04774999999999885], zp_timestamp='2026-02-14T22:10:00')
2026-02-15T00:14:33.192 [DEBUG] [Thread-194644] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:14:33.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-15T00:14:33.291 [DEBUG] [Thread-194647] [transport.py] [_log()] starting thread (client mode): 0xa2d12860
2026-02-15T00:14:33.292 [DEBUG] [Thread-194647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:14:33.306 [DEBUG] [Thread-194647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:14:33.306 [INFO] [Thread-194647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:14:33.314 [DEBUG] [Thread-194647] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:14:33.314 [DEBUG] [Thread-194647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:14:33.314 [DEBUG] [Thread-194647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:14:33.314 [DEBUG] [Thread-194647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:14:33.314 [DEBUG] [Thread-194647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:14:33.314 [DEBUG] [Thread-194647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:14:33.314 [DEBUG] [Thread-194647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:14:33.314 [DEBUG] [Thread-194647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:14:33.314 [DEBUG] [Thread-194647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:14:33.314 [DEBUG] [Thread-194647] [transport.py] [_log()] client lang: <none>
2026-02-15T00:14:33.314 [DEBUG] [Thread-194647] [transport.py] [_log()] server lang: <none>
2026-02-15T00:14:33.314 [DEBUG] [Thread-194647] [transport.py] [_log()] kex follows: False
2026-02-15T00:14:33.314 [DEBUG] [Thread-194647] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:14:33.314 [DEBUG] [Thread-194647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:14:33.314 [DEBUG] [Thread-194647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:14:33.314 [DEBUG] [Thread-194647] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:14:33.314 [DEBUG] [Thread-194647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:14:33.315 [DEBUG] [Thread-194647] [transport.py] [_log()] Compression: none
2026-02-15T00:14:33.315 [DEBUG] [Thread-194647] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:14:33.371 [DEBUG] [Thread-194647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:14:33.372 [DEBUG] [Thread-194647] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:14:33.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:14:33.373 [DEBUG] [Thread-194647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:14:33.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:14:33.428 [DEBUG] [Thread-194647] [transport.py] [_log()] userauth is OK
2026-02-15T00:14:33.429 [DEBUG] [Thread-194647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:14:33.429 [DEBUG] [Thread-194647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:14:33.429 [DEBUG] [Thread-194647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:14:33.429 [DEBUG] [Thread-194647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:14:33.448 [INFO] [Thread-194647] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:14:33.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-15T00:14:33.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:14:34.241 [DEBUG] [Thread-194647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:14:34.242 [DEBUG] [Thread-194647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:14:34.289 [DEBUG] [Thread-194647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:14:34.289 [DEBUG] [Thread-194647] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:14:34.299 [DEBUG] [Thread-194647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:14:34.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:14:34.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-15T00:14:34.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-15T00:14:34.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:14:34.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:14:34.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:14:34.335 [DEBUG] [Thread-194647] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:14:44.318 [DEBUG] [Thread-194649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:14:59.373 [DEBUG] [Thread-194650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:15:04.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:15:04.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:15:04.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-15T00:15:06.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 14, 44), 5.18, 69.99, 0.0, 39.17, 8.34, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:15:06.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:14:44
2026-02-15T00:15:06.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:15:06.722 [DEBUG] [Thread-194651] [transport.py] [_log()] starting thread (client mode): 0xa57c03d0
2026-02-15T00:15:06.723 [DEBUG] [Thread-194651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:15:06.743 [DEBUG] [Thread-194651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:15:06.743 [INFO] [Thread-194651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:15:06.747 [DEBUG] [Thread-194651] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:15:06.747 [DEBUG] [Thread-194651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:15:06.747 [DEBUG] [Thread-194651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:15:06.747 [DEBUG] [Thread-194651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:15:06.747 [DEBUG] [Thread-194651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:15:06.747 [DEBUG] [Thread-194651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:15:06.747 [DEBUG] [Thread-194651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:15:06.747 [DEBUG] [Thread-194651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:15:06.747 [DEBUG] [Thread-194651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:15:06.747 [DEBUG] [Thread-194651] [transport.py] [_log()] client lang: <none>
2026-02-15T00:15:06.747 [DEBUG] [Thread-194651] [transport.py] [_log()] server lang: <none>
2026-02-15T00:15:06.747 [DEBUG] [Thread-194651] [transport.py] [_log()] kex follows: False
2026-02-15T00:15:06.747 [DEBUG] [Thread-194651] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:15:06.747 [DEBUG] [Thread-194651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:15:06.747 [DEBUG] [Thread-194651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:15:06.747 [DEBUG] [Thread-194651] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:15:06.747 [DEBUG] [Thread-194651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:15:06.747 [DEBUG] [Thread-194651] [transport.py] [_log()] Compression: none
2026-02-15T00:15:06.747 [DEBUG] [Thread-194651] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:15:06.764 [DEBUG] [Thread-194651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:15:06.764 [DEBUG] [Thread-194651] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:15:06.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:15:06.765 [DEBUG] [Thread-194651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:15:06.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:15:06.768 [DEBUG] [Thread-194651] [transport.py] [_log()] userauth is OK
2026-02-15T00:15:06.768 [DEBUG] [Thread-194651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:15:06.768 [DEBUG] [Thread-194651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:15:06.768 [DEBUG] [Thread-194651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:15:06.768 [DEBUG] [Thread-194651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:15:06.792 [INFO] [Thread-194651] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:15:06.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:15:08.088 [DEBUG] [Thread-194653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:15:14.408 [DEBUG] [Thread-194654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:15:17.161 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:15:17.162 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:15:23.917 [DEBUG] [Thread-194651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:15:23.917 [DEBUG] [Thread-194651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:15:23.917 [DEBUG] [Thread-194651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:15:23.958 [DEBUG] [Thread-194651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:15:23.958 [DEBUG] [Thread-194651] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:15:23.961 [DEBUG] [Thread-194651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:15:24.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:15:24.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:15:24.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:15:24.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:15:24.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:15:24.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:15:24.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:15:24.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:15:24.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:15:24.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.927193 -999.00   +8.30  32.36     74   +4.10 1 1 2 1 1     0    0 3.68 -28.26 ZNESW 32.4 32.4 162.6 39.4 8.8 -24.4 8.6 -23.4 8.4 -22.5 8.7 -23.8
2026-02-15T00:15:24.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:15:24.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:15:24.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.927193
2026-02-15T00:15:24.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:15:24.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:15:24.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:15:24.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:15:24.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:15:24.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:14:44', tmtdew=5.18, humidity=69.99, cloud=0.0, wind=39.17, temperature=8.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:14:45', seeing=2.8, atlas_timestamp='2026-02-14T22:15:09.475', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03524999999999956, -0.006249999999999645, -0.02200000000000024, 0.0034999999999989484, -0.01974999999999838, 0.0029999999999983373, 0.04275000000000162, 0.045999999999999375, 0.06449999999999889, -0.051750000000000185, -0.002000000000000668, 0.067499999999999, 0.04075000000000095, 0.04899999999999949, 0.013999999999999346, 0.03924999999999912, 0.06550000000000011, 0.032999999999999474, 0.0277499999999975, 0.07599999999999874, 0.025749999999998607, 0.021250000000000213, 0.08225000000000016, 0.09199999999999875, 0.0389999999999997, 0.04625000000000057, -0.011499999999999844, 0.07200000000000095, 0.017500000000001847, 0.057000000000000384, 0.1120000000000001, 0.04774999999999885], zp_timestamp='2026-02-14T22:13:00')
2026-02-15T00:15:24.030 [DEBUG] [Thread-194651] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:15:24.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T00:15:24.124 [DEBUG] [Thread-194656] [transport.py] [_log()] starting thread (client mode): 0xa2d035e0
2026-02-15T00:15:24.124 [DEBUG] [Thread-194656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:15:24.141 [DEBUG] [Thread-194656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:15:24.141 [INFO] [Thread-194656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:15:24.151 [DEBUG] [Thread-194656] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:15:24.152 [DEBUG] [Thread-194656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:15:24.152 [DEBUG] [Thread-194656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:15:24.152 [DEBUG] [Thread-194656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:15:24.152 [DEBUG] [Thread-194656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:15:24.152 [DEBUG] [Thread-194656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:15:24.152 [DEBUG] [Thread-194656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:15:24.152 [DEBUG] [Thread-194656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:15:24.152 [DEBUG] [Thread-194656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:15:24.152 [DEBUG] [Thread-194656] [transport.py] [_log()] client lang: <none>
2026-02-15T00:15:24.152 [DEBUG] [Thread-194656] [transport.py] [_log()] server lang: <none>
2026-02-15T00:15:24.152 [DEBUG] [Thread-194656] [transport.py] [_log()] kex follows: False
2026-02-15T00:15:24.152 [DEBUG] [Thread-194656] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:15:24.152 [DEBUG] [Thread-194656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:15:24.152 [DEBUG] [Thread-194656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:15:24.152 [DEBUG] [Thread-194656] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:15:24.153 [DEBUG] [Thread-194656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:15:24.153 [DEBUG] [Thread-194656] [transport.py] [_log()] Compression: none
2026-02-15T00:15:24.153 [DEBUG] [Thread-194656] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:15:24.211 [DEBUG] [Thread-194656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:15:24.211 [DEBUG] [Thread-194656] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:15:24.212 [DEBUG] [Thread-194656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:15:24.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:15:24.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:15:24.267 [DEBUG] [Thread-194656] [transport.py] [_log()] userauth is OK
2026-02-15T00:15:24.268 [DEBUG] [Thread-194656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:15:24.268 [DEBUG] [Thread-194656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:15:24.268 [DEBUG] [Thread-194656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:15:24.268 [DEBUG] [Thread-194656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:15:24.287 [INFO] [Thread-194656] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:15:24.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-15T00:15:24.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:15:25.107 [DEBUG] [Thread-194656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:15:25.107 [DEBUG] [Thread-194656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:15:25.155 [DEBUG] [Thread-194656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:15:25.155 [DEBUG] [Thread-194656] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:15:25.164 [DEBUG] [Thread-194656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:15:25.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:15:25.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-15T00:15:25.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-15T00:15:25.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:15:25.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:15:25.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:15:25.199 [DEBUG] [Thread-194656] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:15:29.442 [DEBUG] [Thread-194658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:15:44.503 [DEBUG] [Thread-194659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:15:55.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:15:55.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:15:55.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-15T00:15:57.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 15, 20), 5.13, 70.25, 0.0, 41.32, 8.38, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:15:57.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:15:20
2026-02-15T00:15:57.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:15:57.730 [DEBUG] [Thread-194660] [transport.py] [_log()] starting thread (client mode): 0xa2d68040
2026-02-15T00:15:57.730 [DEBUG] [Thread-194660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:15:57.750 [DEBUG] [Thread-194660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:15:57.750 [INFO] [Thread-194660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:15:57.753 [DEBUG] [Thread-194660] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:15:57.753 [DEBUG] [Thread-194660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:15:57.753 [DEBUG] [Thread-194660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:15:57.753 [DEBUG] [Thread-194660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:15:57.753 [DEBUG] [Thread-194660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:15:57.753 [DEBUG] [Thread-194660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:15:57.753 [DEBUG] [Thread-194660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:15:57.753 [DEBUG] [Thread-194660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:15:57.753 [DEBUG] [Thread-194660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:15:57.753 [DEBUG] [Thread-194660] [transport.py] [_log()] client lang: <none>
2026-02-15T00:15:57.753 [DEBUG] [Thread-194660] [transport.py] [_log()] server lang: <none>
2026-02-15T00:15:57.754 [DEBUG] [Thread-194660] [transport.py] [_log()] kex follows: False
2026-02-15T00:15:57.754 [DEBUG] [Thread-194660] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:15:57.754 [DEBUG] [Thread-194660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:15:57.754 [DEBUG] [Thread-194660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:15:57.754 [DEBUG] [Thread-194660] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:15:57.754 [DEBUG] [Thread-194660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:15:57.754 [DEBUG] [Thread-194660] [transport.py] [_log()] Compression: none
2026-02-15T00:15:57.754 [DEBUG] [Thread-194660] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:15:57.772 [DEBUG] [Thread-194660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:15:57.773 [DEBUG] [Thread-194660] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:15:57.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:15:57.774 [DEBUG] [Thread-194660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:15:57.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:15:57.777 [DEBUG] [Thread-194660] [transport.py] [_log()] userauth is OK
2026-02-15T00:15:57.777 [DEBUG] [Thread-194660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:15:57.777 [DEBUG] [Thread-194660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:15:57.777 [DEBUG] [Thread-194660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:15:57.777 [DEBUG] [Thread-194660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:15:57.803 [INFO] [Thread-194660] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:15:57.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:15:58.436 [DEBUG] [Thread-194660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:15:58.437 [DEBUG] [Thread-194660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:15:58.437 [DEBUG] [Thread-194660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:15:58.477 [DEBUG] [Thread-194660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:15:58.477 [DEBUG] [Thread-194660] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:15:58.481 [DEBUG] [Thread-194660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:15:58.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:15:58.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:15:58.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:15:58.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:15:58.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:15:58.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:15:58.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:15:58.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:15:58.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:15:58.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.927193 -999.00   +8.30  32.36     74   +4.10 1 1 2 1 1     0    0 3.68 -28.26 ZNESW 32.4 32.4 162.6 39.4 8.8 -24.4 8.6 -23.4 8.4 -22.5 8.7 -23.8
2026-02-15T00:15:58.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:15:58.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:15:58.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.927193
2026-02-15T00:15:58.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:15:58.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:15:58.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:15:58.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:15:58.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:15:58.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:15:20', tmtdew=5.13, humidity=70.25, cloud=0.0, wind=41.32, temperature=8.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:15:20', seeing=2.62, atlas_timestamp='2026-02-14T22:15:09.475', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03524999999999956, -0.006249999999999645, -0.02200000000000024, 0.0034999999999989484, -0.01974999999999838, 0.0029999999999983373, 0.04275000000000162, 0.045999999999999375, 0.06449999999999889, -0.051750000000000185, -0.002000000000000668, 0.067499999999999, 0.04075000000000095, 0.04899999999999949, 0.013999999999999346, 0.03924999999999912, 0.06550000000000011, 0.032999999999999474, 0.0277499999999975, 0.07599999999999874, 0.025749999999998607, 0.021250000000000213, 0.08225000000000016, 0.09199999999999875, 0.0389999999999997, 0.04625000000000057, -0.011499999999999844, 0.07200000000000095, 0.017500000000001847, 0.057000000000000384, 0.1120000000000001, 0.04774999999999885], zp_timestamp='2026-02-14T22:13:00')
2026-02-15T00:15:58.507 [DEBUG] [Thread-194660] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:15:58.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-15T00:15:58.604 [DEBUG] [Thread-194663] [transport.py] [_log()] starting thread (client mode): 0xa2d6a0b0
2026-02-15T00:15:58.604 [DEBUG] [Thread-194663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:15:58.619 [DEBUG] [Thread-194663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:15:58.619 [INFO] [Thread-194663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:15:58.629 [DEBUG] [Thread-194663] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:15:58.629 [DEBUG] [Thread-194663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:15:58.629 [DEBUG] [Thread-194663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:15:58.629 [DEBUG] [Thread-194663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:15:58.629 [DEBUG] [Thread-194663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:15:58.629 [DEBUG] [Thread-194663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:15:58.629 [DEBUG] [Thread-194663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:15:58.629 [DEBUG] [Thread-194663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:15:58.629 [DEBUG] [Thread-194663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:15:58.629 [DEBUG] [Thread-194663] [transport.py] [_log()] client lang: <none>
2026-02-15T00:15:58.629 [DEBUG] [Thread-194663] [transport.py] [_log()] server lang: <none>
2026-02-15T00:15:58.629 [DEBUG] [Thread-194663] [transport.py] [_log()] kex follows: False
2026-02-15T00:15:58.629 [DEBUG] [Thread-194663] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:15:58.630 [DEBUG] [Thread-194663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:15:58.630 [DEBUG] [Thread-194663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:15:58.630 [DEBUG] [Thread-194663] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:15:58.630 [DEBUG] [Thread-194663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:15:58.630 [DEBUG] [Thread-194663] [transport.py] [_log()] Compression: none
2026-02-15T00:15:58.630 [DEBUG] [Thread-194663] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:15:58.688 [DEBUG] [Thread-194663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:15:58.688 [DEBUG] [Thread-194663] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:15:58.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:15:58.689 [DEBUG] [Thread-194663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:15:58.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:15:58.744 [DEBUG] [Thread-194663] [transport.py] [_log()] userauth is OK
2026-02-15T00:15:58.744 [DEBUG] [Thread-194663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:15:58.744 [DEBUG] [Thread-194663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:15:58.744 [DEBUG] [Thread-194663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:15:58.745 [DEBUG] [Thread-194663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:15:58.763 [INFO] [Thread-194663] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:15:58.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-15T00:15:58.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:15:59.539 [DEBUG] [Thread-194665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:15:59.558 [DEBUG] [Thread-194663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:15:59.558 [DEBUG] [Thread-194663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:15:59.607 [DEBUG] [Thread-194663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:15:59.607 [DEBUG] [Thread-194663] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:15:59.616 [DEBUG] [Thread-194663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:15:59.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:15:59.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-15T00:15:59.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-15T00:15:59.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:15:59.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:15:59.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:15:59.652 [DEBUG] [Thread-194663] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:16:08.163 [DEBUG] [Thread-194666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:16:14.592 [DEBUG] [Thread-194667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:16:17.364 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:16:17.365 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:16:29.626 [DEBUG] [Thread-194668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:16:29.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:16:29.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:16:29.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:16:31.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 15, 56), 5.09, 70.43, 0.0, 39.43, 8.46, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:16:31.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:15:56
2026-02-15T00:16:31.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:16:32.013 [DEBUG] [Thread-194669] [transport.py] [_log()] starting thread (client mode): 0xa2d014e0
2026-02-15T00:16:32.013 [DEBUG] [Thread-194669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:16:32.033 [DEBUG] [Thread-194669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:16:32.033 [INFO] [Thread-194669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:16:32.036 [DEBUG] [Thread-194669] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:16:32.036 [DEBUG] [Thread-194669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:16:32.036 [DEBUG] [Thread-194669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:16:32.036 [DEBUG] [Thread-194669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:16:32.036 [DEBUG] [Thread-194669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:16:32.036 [DEBUG] [Thread-194669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:16:32.036 [DEBUG] [Thread-194669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:16:32.036 [DEBUG] [Thread-194669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:16:32.036 [DEBUG] [Thread-194669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:16:32.036 [DEBUG] [Thread-194669] [transport.py] [_log()] client lang: <none>
2026-02-15T00:16:32.036 [DEBUG] [Thread-194669] [transport.py] [_log()] server lang: <none>
2026-02-15T00:16:32.036 [DEBUG] [Thread-194669] [transport.py] [_log()] kex follows: False
2026-02-15T00:16:32.036 [DEBUG] [Thread-194669] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:16:32.036 [DEBUG] [Thread-194669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:16:32.036 [DEBUG] [Thread-194669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:16:32.036 [DEBUG] [Thread-194669] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:16:32.036 [DEBUG] [Thread-194669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:16:32.036 [DEBUG] [Thread-194669] [transport.py] [_log()] Compression: none
2026-02-15T00:16:32.036 [DEBUG] [Thread-194669] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:16:32.053 [DEBUG] [Thread-194669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:16:32.054 [DEBUG] [Thread-194669] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:16:32.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:16:32.054 [DEBUG] [Thread-194669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:16:32.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:16:32.056 [DEBUG] [Thread-194669] [transport.py] [_log()] userauth is OK
2026-02-15T00:16:32.056 [DEBUG] [Thread-194669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:16:32.056 [DEBUG] [Thread-194669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:16:32.056 [DEBUG] [Thread-194669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:16:32.056 [DEBUG] [Thread-194669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:16:32.091 [INFO] [Thread-194669] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:16:32.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:16:32.741 [DEBUG] [Thread-194669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:16:32.741 [DEBUG] [Thread-194669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:16:32.742 [DEBUG] [Thread-194669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:16:32.782 [DEBUG] [Thread-194669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:16:32.782 [DEBUG] [Thread-194669] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:16:32.785 [DEBUG] [Thread-194669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:16:32.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:16:32.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:16:32.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:16:32.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:16:32.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:16:32.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:16:32.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:16:32.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:16:32.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:16:32.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.927540 -999.00   +8.30  22.60     74   +4.10 1 1 1 1 1     0    0 3.68 -28.22 ZNESW 22.6 22.6 159.6 32.7 8.8 -24.4 8.6 -23.4 8.4 -22.5 8.7 -23.6
2026-02-15T00:16:32.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:16:32.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:16:32.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.927540
2026-02-15T00:16:32.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:16:32.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:16:32.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:16:32.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:16:32.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:16:32.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:15:56', tmtdew=5.09, humidity=70.43, cloud=0.0, wind=39.43, temperature=8.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:15:56', seeing=2.15, atlas_timestamp='2026-02-14T22:15:39.456', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03524999999999956, -0.006249999999999645, -0.02200000000000024, 0.0034999999999989484, -0.01974999999999838, 0.0029999999999983373, 0.04275000000000162, 0.045999999999999375, 0.06449999999999889, -0.051750000000000185, -0.002000000000000668, 0.067499999999999, 0.04075000000000095, 0.04899999999999949, 0.013999999999999346, 0.03924999999999912, 0.06550000000000011, 0.032999999999999474, 0.0277499999999975, 0.07599999999999874, 0.025749999999998607, 0.021250000000000213, 0.08225000000000016, 0.09199999999999875, 0.0389999999999997, 0.04625000000000057, -0.011499999999999844, 0.07200000000000095, 0.017500000000001847, 0.057000000000000384, 0.1120000000000001, 0.04774999999999885], zp_timestamp='2026-02-14T22:13:00')
2026-02-15T00:16:32.808 [DEBUG] [Thread-194669] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:16:32.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-15T00:16:32.908 [DEBUG] [Thread-194672] [transport.py] [_log()] starting thread (client mode): 0xa2d112d0
2026-02-15T00:16:32.909 [DEBUG] [Thread-194672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:16:32.924 [DEBUG] [Thread-194672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:16:32.924 [INFO] [Thread-194672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:16:32.931 [DEBUG] [Thread-194672] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:16:32.931 [DEBUG] [Thread-194672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:16:32.931 [DEBUG] [Thread-194672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:16:32.932 [DEBUG] [Thread-194672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:16:32.932 [DEBUG] [Thread-194672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:16:32.932 [DEBUG] [Thread-194672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:16:32.932 [DEBUG] [Thread-194672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:16:32.932 [DEBUG] [Thread-194672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:16:32.932 [DEBUG] [Thread-194672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:16:32.932 [DEBUG] [Thread-194672] [transport.py] [_log()] client lang: <none>
2026-02-15T00:16:32.932 [DEBUG] [Thread-194672] [transport.py] [_log()] server lang: <none>
2026-02-15T00:16:32.932 [DEBUG] [Thread-194672] [transport.py] [_log()] kex follows: False
2026-02-15T00:16:32.932 [DEBUG] [Thread-194672] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:16:32.932 [DEBUG] [Thread-194672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:16:32.933 [DEBUG] [Thread-194672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:16:32.933 [DEBUG] [Thread-194672] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:16:32.933 [DEBUG] [Thread-194672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:16:32.933 [DEBUG] [Thread-194672] [transport.py] [_log()] Compression: none
2026-02-15T00:16:32.933 [DEBUG] [Thread-194672] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:16:32.991 [DEBUG] [Thread-194672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:16:32.992 [DEBUG] [Thread-194672] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:16:32.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:16:32.992 [DEBUG] [Thread-194672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:16:32.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:16:33.047 [DEBUG] [Thread-194672] [transport.py] [_log()] userauth is OK
2026-02-15T00:16:33.048 [DEBUG] [Thread-194672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:16:33.048 [DEBUG] [Thread-194672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:16:33.048 [DEBUG] [Thread-194672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:16:33.048 [DEBUG] [Thread-194672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:16:33.069 [INFO] [Thread-194672] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:16:33.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-15T00:16:33.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:16:33.861 [DEBUG] [Thread-194672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:16:33.862 [DEBUG] [Thread-194672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:16:33.909 [DEBUG] [Thread-194672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:16:33.909 [DEBUG] [Thread-194672] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:16:33.918 [DEBUG] [Thread-194672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:16:33.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:16:33.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:16:33.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-15T00:16:33.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:16:33.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:16:33.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:16:33.951 [DEBUG] [Thread-194672] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:16:44.661 [DEBUG] [Thread-194674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:16:59.716 [DEBUG] [Thread-194675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:17:03.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:17:03.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:17:03.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:17:06.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 16, 31), 5.08, 70.5, 0.0, 38.59, 8.38, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:17:06.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:16:31
2026-02-15T00:17:06.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:17:06.682 [DEBUG] [Thread-194676] [transport.py] [_log()] starting thread (client mode): 0xa2d12680
2026-02-15T00:17:06.682 [DEBUG] [Thread-194676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:17:06.701 [DEBUG] [Thread-194676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:17:06.701 [INFO] [Thread-194676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:17:06.704 [DEBUG] [Thread-194676] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:17:06.705 [DEBUG] [Thread-194676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:17:06.705 [DEBUG] [Thread-194676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:17:06.705 [DEBUG] [Thread-194676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:17:06.705 [DEBUG] [Thread-194676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:17:06.705 [DEBUG] [Thread-194676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:17:06.705 [DEBUG] [Thread-194676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:17:06.705 [DEBUG] [Thread-194676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:17:06.705 [DEBUG] [Thread-194676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:17:06.705 [DEBUG] [Thread-194676] [transport.py] [_log()] client lang: <none>
2026-02-15T00:17:06.705 [DEBUG] [Thread-194676] [transport.py] [_log()] server lang: <none>
2026-02-15T00:17:06.705 [DEBUG] [Thread-194676] [transport.py] [_log()] kex follows: False
2026-02-15T00:17:06.705 [DEBUG] [Thread-194676] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:17:06.705 [DEBUG] [Thread-194676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:17:06.705 [DEBUG] [Thread-194676] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:17:06.705 [DEBUG] [Thread-194676] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:17:06.705 [DEBUG] [Thread-194676] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:17:06.705 [DEBUG] [Thread-194676] [transport.py] [_log()] Compression: none
2026-02-15T00:17:06.705 [DEBUG] [Thread-194676] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:17:06.720 [DEBUG] [Thread-194676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:17:06.721 [DEBUG] [Thread-194676] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:17:06.721 [DEBUG] [Thread-194676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:17:06.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:17:06.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:17:06.723 [DEBUG] [Thread-194676] [transport.py] [_log()] userauth is OK
2026-02-15T00:17:06.723 [DEBUG] [Thread-194676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:17:06.723 [DEBUG] [Thread-194676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:17:06.723 [DEBUG] [Thread-194676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:17:06.723 [DEBUG] [Thread-194676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:17:06.741 [INFO] [Thread-194676] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:17:06.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:17:07.374 [DEBUG] [Thread-194676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:17:07.374 [DEBUG] [Thread-194676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:17:07.374 [DEBUG] [Thread-194676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:17:07.416 [DEBUG] [Thread-194676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:17:07.416 [DEBUG] [Thread-194676] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:17:07.419 [DEBUG] [Thread-194676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:17:07.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:17:07.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:17:07.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:17:07.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:17:07.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:17:07.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:17:07.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:17:07.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:17:07.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:17:07.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.927888 -999.00   +8.30  23.54     74   +4.10 1 1 1 1 1     0    0 3.66 -30.16 ZNESW 23.5 23.5 158.4 35.5 8.8 -24.5 8.6 -23.3 8.4 -22.6 8.8 -23.8
2026-02-15T00:17:07.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:17:07.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:17:07.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.927888
2026-02-15T00:17:07.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:17:07.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:17:07.446 [DEBUG] [Thread-194676] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:17:07.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:17:07.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:17:07.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:17:07.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:16:31', tmtdew=5.08, humidity=70.5, cloud=0.0, wind=38.59, temperature=8.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:16:31', seeing=2.15, atlas_timestamp='2026-02-14T22:16:09.523', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03524999999999956, -0.006249999999999645, -0.02200000000000024, 0.0034999999999989484, -0.01974999999999838, 0.0029999999999983373, 0.04275000000000162, 0.045999999999999375, 0.06449999999999889, -0.051750000000000185, -0.002000000000000668, 0.067499999999999, 0.04075000000000095, 0.04899999999999949, 0.013999999999999346, 0.03924999999999912, 0.06550000000000011, 0.032999999999999474, 0.0277499999999975, 0.07599999999999874, 0.025749999999998607, 0.021250000000000213, 0.08225000000000016, 0.09199999999999875, 0.0389999999999997, 0.04625000000000057, -0.011499999999999844, 0.07200000000000095, 0.017500000000001847, 0.057000000000000384, 0.1120000000000001, 0.04774999999999885], zp_timestamp='2026-02-14T22:13:00')
2026-02-15T00:17:07.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-15T00:17:07.552 [DEBUG] [Thread-194679] [transport.py] [_log()] starting thread (client mode): 0xa2d10d60
2026-02-15T00:17:07.552 [DEBUG] [Thread-194679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:17:07.567 [DEBUG] [Thread-194679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:17:07.567 [INFO] [Thread-194679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:17:07.574 [DEBUG] [Thread-194679] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:17:07.575 [DEBUG] [Thread-194679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:17:07.575 [DEBUG] [Thread-194679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:17:07.575 [DEBUG] [Thread-194679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:17:07.576 [DEBUG] [Thread-194679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:17:07.576 [DEBUG] [Thread-194679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:17:07.576 [DEBUG] [Thread-194679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:17:07.576 [DEBUG] [Thread-194679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:17:07.576 [DEBUG] [Thread-194679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:17:07.576 [DEBUG] [Thread-194679] [transport.py] [_log()] client lang: <none>
2026-02-15T00:17:07.576 [DEBUG] [Thread-194679] [transport.py] [_log()] server lang: <none>
2026-02-15T00:17:07.576 [DEBUG] [Thread-194679] [transport.py] [_log()] kex follows: False
2026-02-15T00:17:07.576 [DEBUG] [Thread-194679] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:17:07.576 [DEBUG] [Thread-194679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:17:07.576 [DEBUG] [Thread-194679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:17:07.576 [DEBUG] [Thread-194679] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:17:07.576 [DEBUG] [Thread-194679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:17:07.576 [DEBUG] [Thread-194679] [transport.py] [_log()] Compression: none
2026-02-15T00:17:07.576 [DEBUG] [Thread-194679] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:17:07.633 [DEBUG] [Thread-194679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:17:07.633 [DEBUG] [Thread-194679] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:17:07.634 [DEBUG] [Thread-194679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:17:07.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:17:07.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:17:07.692 [DEBUG] [Thread-194679] [transport.py] [_log()] userauth is OK
2026-02-15T00:17:07.692 [DEBUG] [Thread-194679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:17:07.692 [DEBUG] [Thread-194679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:17:07.693 [DEBUG] [Thread-194679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:17:07.693 [DEBUG] [Thread-194679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:17:07.711 [INFO] [Thread-194679] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:17:07.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T00:17:07.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:17:08.228 [DEBUG] [Thread-194681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:17:08.507 [DEBUG] [Thread-194679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:17:08.507 [DEBUG] [Thread-194679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:17:08.557 [DEBUG] [Thread-194679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:17:08.557 [DEBUG] [Thread-194679] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:17:08.566 [DEBUG] [Thread-194679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:17:08.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:17:08.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-15T00:17:08.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-15T00:17:08.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:17:08.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:17:08.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:17:08.603 [DEBUG] [Thread-194679] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:17:14.755 [DEBUG] [Thread-194682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:17:17.566 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:17:17.567 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:17:29.819 [DEBUG] [Thread-194683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:17:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:17:38.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:17: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-15T00:17:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 17, 6), 5.06, 70.58, 0.0, 39.59, 8.43, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:17:40.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:17:06
2026-02-15T00:17:40.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:17:40.987 [DEBUG] [Thread-194684] [transport.py] [_log()] starting thread (client mode): 0xa2d02ce0
2026-02-15T00:17:40.987 [DEBUG] [Thread-194684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:17:41.007 [DEBUG] [Thread-194684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:17:41.008 [INFO] [Thread-194684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:17:41.009 [DEBUG] [Thread-194684] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:17:41.009 [DEBUG] [Thread-194684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:17:41.009 [DEBUG] [Thread-194684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:17:41.009 [DEBUG] [Thread-194684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:17:41.009 [DEBUG] [Thread-194684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:17:41.009 [DEBUG] [Thread-194684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:17:41.009 [DEBUG] [Thread-194684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:17:41.009 [DEBUG] [Thread-194684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:17:41.009 [DEBUG] [Thread-194684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:17:41.009 [DEBUG] [Thread-194684] [transport.py] [_log()] client lang: <none>
2026-02-15T00:17:41.009 [DEBUG] [Thread-194684] [transport.py] [_log()] server lang: <none>
2026-02-15T00:17:41.009 [DEBUG] [Thread-194684] [transport.py] [_log()] kex follows: False
2026-02-15T00:17:41.009 [DEBUG] [Thread-194684] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:17:41.009 [DEBUG] [Thread-194684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:17:41.009 [DEBUG] [Thread-194684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:17:41.009 [DEBUG] [Thread-194684] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:17:41.009 [DEBUG] [Thread-194684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:17:41.009 [DEBUG] [Thread-194684] [transport.py] [_log()] Compression: none
2026-02-15T00:17:41.009 [DEBUG] [Thread-194684] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:17:41.027 [DEBUG] [Thread-194684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:17:41.028 [DEBUG] [Thread-194684] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:17:41.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:17:41.029 [DEBUG] [Thread-194684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:17:41.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:17:41.031 [DEBUG] [Thread-194684] [transport.py] [_log()] userauth is OK
2026-02-15T00:17:41.031 [DEBUG] [Thread-194684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:17:41.031 [DEBUG] [Thread-194684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:17:41.031 [DEBUG] [Thread-194684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:17:41.031 [DEBUG] [Thread-194684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:17:41.056 [INFO] [Thread-194684] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:17:41.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:17:41.705 [DEBUG] [Thread-194684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:17:41.705 [DEBUG] [Thread-194684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:17:41.705 [DEBUG] [Thread-194684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:17:41.746 [DEBUG] [Thread-194684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:17:41.746 [DEBUG] [Thread-194684] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:17:41.748 [DEBUG] [Thread-194684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:17:41.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:17:41.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:17:41.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:17:41.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:17:41.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:17:41.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:17:41.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:17:41.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:17:41.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:17:41.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.928235 -999.00   +8.30  27.44     75   +4.10 1 1 1 1 1     0    0 3.58 -31.74 ZNESW 27.4 27.4 159.0 33.9 8.8 -24.3 8.6 -23.3 8.4 -22.4 8.8 -23.6
2026-02-15T00:17:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:17:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:17:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.928235
2026-02-15T00:17:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:17:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:17:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:17:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:17:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:17:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:17:06', tmtdew=5.06, humidity=70.58, cloud=0.0, wind=39.59, temperature=8.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:17:06', seeing=1.79, atlas_timestamp='2026-02-14T22:16:39.504', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.03524999999999956, -0.006249999999999645, -0.02200000000000024, 0.0034999999999989484, -0.01974999999999838, 0.0029999999999983373, 0.04275000000000162, 0.045999999999999375, 0.06449999999999889, -0.051750000000000185, -0.002000000000000668, 0.067499999999999, 0.04075000000000095, 0.04899999999999949, 0.013999999999999346, 0.03924999999999912, 0.06550000000000011, 0.032999999999999474, 0.0277499999999975, 0.07599999999999874, 0.025749999999998607, 0.021250000000000213, 0.08225000000000016, 0.09199999999999875, 0.0389999999999997, 0.04625000000000057, -0.011499999999999844, 0.07200000000000095, 0.017500000000001847, 0.057000000000000384, 0.1120000000000001, 0.04774999999999885], zp_timestamp='2026-02-14T22:13:00')
2026-02-15T00:17:41.768 [DEBUG] [Thread-194684] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:17:41.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-15T00:17:41.851 [DEBUG] [Thread-194687] [transport.py] [_log()] starting thread (client mode): 0xa2d78f40
2026-02-15T00:17:41.851 [DEBUG] [Thread-194687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:17:41.866 [DEBUG] [Thread-194687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:17:41.866 [INFO] [Thread-194687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:17:41.873 [DEBUG] [Thread-194687] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:17:41.873 [DEBUG] [Thread-194687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:17:41.873 [DEBUG] [Thread-194687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:17:41.873 [DEBUG] [Thread-194687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:17:41.873 [DEBUG] [Thread-194687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:17:41.873 [DEBUG] [Thread-194687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:17:41.874 [DEBUG] [Thread-194687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:17:41.874 [DEBUG] [Thread-194687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:17:41.874 [DEBUG] [Thread-194687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:17:41.874 [DEBUG] [Thread-194687] [transport.py] [_log()] client lang: <none>
2026-02-15T00:17:41.874 [DEBUG] [Thread-194687] [transport.py] [_log()] server lang: <none>
2026-02-15T00:17:41.874 [DEBUG] [Thread-194687] [transport.py] [_log()] kex follows: False
2026-02-15T00:17:41.874 [DEBUG] [Thread-194687] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:17:41.874 [DEBUG] [Thread-194687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:17:41.874 [DEBUG] [Thread-194687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:17:41.874 [DEBUG] [Thread-194687] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:17:41.874 [DEBUG] [Thread-194687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:17:41.874 [DEBUG] [Thread-194687] [transport.py] [_log()] Compression: none
2026-02-15T00:17:41.874 [DEBUG] [Thread-194687] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:17:41.930 [DEBUG] [Thread-194687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:17:41.930 [DEBUG] [Thread-194687] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:17:41.931 [DEBUG] [Thread-194687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:17:41.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:17:41.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:17:41.987 [DEBUG] [Thread-194687] [transport.py] [_log()] userauth is OK
2026-02-15T00:17:41.987 [DEBUG] [Thread-194687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:17:41.987 [DEBUG] [Thread-194687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:17:41.987 [DEBUG] [Thread-194687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:17:41.987 [DEBUG] [Thread-194687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:17:42.005 [INFO] [Thread-194687] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:17:42.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-15T00:17:42.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:17:42.790 [DEBUG] [Thread-194687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:17:42.790 [DEBUG] [Thread-194687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:17:42.838 [DEBUG] [Thread-194687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:17:42.838 [DEBUG] [Thread-194687] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:17:42.847 [DEBUG] [Thread-194687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:17:42.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:17:42.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:17:42.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:17:42.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:17:42.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:17:42.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:17:42.881 [DEBUG] [Thread-194687] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:17:44.861 [DEBUG] [Thread-194689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:17:59.905 [DEBUG] [Thread-194690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:18:08.283 [DEBUG] [Thread-194691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:18:12.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:18:12.903 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:18:12.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-15T00:18:14.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 17, 41), 5.12, 70.2, 0.0, 49.15, 8.72, 0, 0, 0, 2, 1, 0),)
2026-02-15T00:18:14.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:17:41
2026-02-15T00:18:14.941 [DEBUG] [Thread-194692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:18:15.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:18:15.382 [DEBUG] [Thread-194693] [transport.py] [_log()] starting thread (client mode): 0xa57c2620
2026-02-15T00:18:15.382 [DEBUG] [Thread-194693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:18:15.395 [DEBUG] [Thread-194693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:18:15.395 [INFO] [Thread-194693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:18:15.397 [DEBUG] [Thread-194693] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:18:15.397 [DEBUG] [Thread-194693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:18:15.397 [DEBUG] [Thread-194693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:18:15.397 [DEBUG] [Thread-194693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:18:15.397 [DEBUG] [Thread-194693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:18:15.397 [DEBUG] [Thread-194693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:18:15.397 [DEBUG] [Thread-194693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:18:15.397 [DEBUG] [Thread-194693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:18:15.397 [DEBUG] [Thread-194693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:18:15.397 [DEBUG] [Thread-194693] [transport.py] [_log()] client lang: <none>
2026-02-15T00:18:15.397 [DEBUG] [Thread-194693] [transport.py] [_log()] server lang: <none>
2026-02-15T00:18:15.397 [DEBUG] [Thread-194693] [transport.py] [_log()] kex follows: False
2026-02-15T00:18:15.397 [DEBUG] [Thread-194693] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:18:15.397 [DEBUG] [Thread-194693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:18:15.397 [DEBUG] [Thread-194693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:18:15.397 [DEBUG] [Thread-194693] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:18:15.397 [DEBUG] [Thread-194693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:18:15.397 [DEBUG] [Thread-194693] [transport.py] [_log()] Compression: none
2026-02-15T00:18:15.397 [DEBUG] [Thread-194693] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:18:15.408 [DEBUG] [Thread-194693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:18:15.408 [DEBUG] [Thread-194693] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:18:15.409 [DEBUG] [Thread-194693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:18:15.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:18:15.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:18:15.410 [DEBUG] [Thread-194693] [transport.py] [_log()] userauth is OK
2026-02-15T00:18:15.410 [DEBUG] [Thread-194693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:18:15.410 [DEBUG] [Thread-194693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:18:15.410 [DEBUG] [Thread-194693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:18:15.410 [DEBUG] [Thread-194693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:18:15.427 [INFO] [Thread-194693] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:18:15.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:18:16.208 [DEBUG] [Thread-194693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:18:16.209 [DEBUG] [Thread-194693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:18:16.209 [DEBUG] [Thread-194693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:18:16.249 [DEBUG] [Thread-194693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:18:16.250 [DEBUG] [Thread-194693] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:18:16.253 [DEBUG] [Thread-194693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:18:16.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:18:16.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:18:16.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:18:16.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:18:16.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:18:16.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:18:16.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:18:16.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:18:16.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:18:16.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.928929 -999.00   +8.30  26.12     75   +4.30 1 1 1 1 1     0    0 3.53 -32.27 ZNESW 26.1 26.1 157.4 36.8 8.8 -24.3 8.6 -23.4 8.3 -22.5 8.7 -23.6
2026-02-15T00:18:16.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:18:16.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:18:16.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.928929
2026-02-15T00:18:16.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:18:16.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:18:16.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:18:16.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:18:16.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:18:16.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:17:41', tmtdew=5.12, humidity=70.2, cloud=0.0, wind=49.15, temperature=8.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T00:17:42', seeing=1.7, atlas_timestamp='2026-02-14T22:17:39.466', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.03275000000000006, -0.049249999999998906, -0.016500000000000625, 0.011499999999999844, 0.008250000000000313, 0.0035000000000007248, 0.03774999999999906, 0.03549999999999898, 0.04100000000000037, -0.030750000000001165, 0.01649999999999885, 0.06149999999999878, 0.051750000000000185, 0.03449999999999953, -0.017000000000001236, 0.02874999999999872, 0.032999999999999474, 0.013999999999999346, 0.012249999999998096, 0.04099999999999859, 0.02874999999999872, 0.01774999999999949, 0.04124999999999979, 0.08599999999999852, 0.04349999999999987, 0.0417500000000004, -0.033500000000000085, 0.0389999999999997, 0.031000000000000583, 0.06500000000000128, 0.09100000000000108, 0.06774999999999842], zp_timestamp='2026-02-14T22:16:00')
2026-02-15T00:18:16.279 [DEBUG] [Thread-194693] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:18:16.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-15T00:18:16.373 [DEBUG] [Thread-194696] [transport.py] [_log()] starting thread (client mode): 0xa2d101c0
2026-02-15T00:18:16.373 [DEBUG] [Thread-194696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:18:16.388 [DEBUG] [Thread-194696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:18:16.388 [INFO] [Thread-194696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:18:16.395 [DEBUG] [Thread-194696] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:18:16.396 [DEBUG] [Thread-194696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:18:16.396 [DEBUG] [Thread-194696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:18:16.396 [DEBUG] [Thread-194696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:18:16.396 [DEBUG] [Thread-194696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:18:16.396 [DEBUG] [Thread-194696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:18:16.396 [DEBUG] [Thread-194696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:18:16.396 [DEBUG] [Thread-194696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:18:16.396 [DEBUG] [Thread-194696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:18:16.396 [DEBUG] [Thread-194696] [transport.py] [_log()] client lang: <none>
2026-02-15T00:18:16.396 [DEBUG] [Thread-194696] [transport.py] [_log()] server lang: <none>
2026-02-15T00:18:16.396 [DEBUG] [Thread-194696] [transport.py] [_log()] kex follows: False
2026-02-15T00:18:16.396 [DEBUG] [Thread-194696] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:18:16.396 [DEBUG] [Thread-194696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:18:16.396 [DEBUG] [Thread-194696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:18:16.396 [DEBUG] [Thread-194696] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:18:16.396 [DEBUG] [Thread-194696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:18:16.397 [DEBUG] [Thread-194696] [transport.py] [_log()] Compression: none
2026-02-15T00:18:16.397 [DEBUG] [Thread-194696] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:18:16.456 [DEBUG] [Thread-194696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:18:16.457 [DEBUG] [Thread-194696] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:18:16.457 [DEBUG] [Thread-194696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:18:16.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:18:16.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:18:16.512 [DEBUG] [Thread-194696] [transport.py] [_log()] userauth is OK
2026-02-15T00:18:16.513 [DEBUG] [Thread-194696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:18:16.513 [DEBUG] [Thread-194696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:18:16.513 [DEBUG] [Thread-194696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:18:16.513 [DEBUG] [Thread-194696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:18:16.537 [INFO] [Thread-194696] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:18:16.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-15T00:18:16.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:18:17.325 [DEBUG] [Thread-194696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:18:17.325 [DEBUG] [Thread-194696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:18:17.373 [DEBUG] [Thread-194696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:18:17.373 [DEBUG] [Thread-194696] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:18:17.382 [DEBUG] [Thread-194696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:18:17.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:18:17.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-15T00:18:17.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-15T00:18:17.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:18:17.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:18:17.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:18:17.419 [DEBUG] [Thread-194696] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:18:17.769 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:18:17.770 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:18:29.974 [DEBUG] [Thread-194698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:18:45.033 [DEBUG] [Thread-194699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:18:47.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:18:47.440 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:18:47.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-15T00:18:49.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 18, 16), 4.95, 71.15, 0.0, 42.5, 8.39, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:18:49.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:18:16
2026-02-15T00:18:49.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:18:49.823 [DEBUG] [Thread-194700] [transport.py] [_log()] starting thread (client mode): 0xa2d01b70
2026-02-15T00:18:49.823 [DEBUG] [Thread-194700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:18:49.844 [DEBUG] [Thread-194700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:18:49.844 [INFO] [Thread-194700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:18:49.845 [DEBUG] [Thread-194700] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:18:49.845 [DEBUG] [Thread-194700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:18:49.845 [DEBUG] [Thread-194700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:18:49.845 [DEBUG] [Thread-194700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:18:49.845 [DEBUG] [Thread-194700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:18:49.845 [DEBUG] [Thread-194700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:18:49.845 [DEBUG] [Thread-194700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:18:49.845 [DEBUG] [Thread-194700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:18:49.845 [DEBUG] [Thread-194700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:18:49.845 [DEBUG] [Thread-194700] [transport.py] [_log()] client lang: <none>
2026-02-15T00:18:49.845 [DEBUG] [Thread-194700] [transport.py] [_log()] server lang: <none>
2026-02-15T00:18:49.845 [DEBUG] [Thread-194700] [transport.py] [_log()] kex follows: False
2026-02-15T00:18:49.845 [DEBUG] [Thread-194700] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:18:49.846 [DEBUG] [Thread-194700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:18:49.846 [DEBUG] [Thread-194700] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:18:49.846 [DEBUG] [Thread-194700] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:18:49.846 [DEBUG] [Thread-194700] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:18:49.846 [DEBUG] [Thread-194700] [transport.py] [_log()] Compression: none
2026-02-15T00:18:49.846 [DEBUG] [Thread-194700] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:18:49.866 [DEBUG] [Thread-194700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:18:49.866 [DEBUG] [Thread-194700] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:18:49.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:18:49.867 [DEBUG] [Thread-194700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:18:49.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:18:49.869 [DEBUG] [Thread-194700] [transport.py] [_log()] userauth is OK
2026-02-15T00:18:49.869 [DEBUG] [Thread-194700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:18:49.869 [DEBUG] [Thread-194700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:18:49.870 [DEBUG] [Thread-194700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:18:49.870 [DEBUG] [Thread-194700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:18:49.892 [INFO] [Thread-194700] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:18:49.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:18:50.537 [DEBUG] [Thread-194700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:18:50.537 [DEBUG] [Thread-194700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:18:50.537 [DEBUG] [Thread-194700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:18:50.578 [DEBUG] [Thread-194700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:18:50.579 [DEBUG] [Thread-194700] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:18:50.582 [DEBUG] [Thread-194700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:18:50.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:18:50.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:18:50.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:18:50.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:18:50.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:18:50.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:18:50.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:18:50.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:18:50.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:18:50.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.929277 -999.00   +8.30  29.15     75   +4.20 1 1 1 1 1     0    0 3.46 -32.72 ZNESW 29.1 29.1 159.6 37.0 8.8 -24.3 8.6 -23.2 8.3 -22.5 8.7 -23.5
2026-02-15T00:18:50.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:18:50.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:18:50.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.929277
2026-02-15T00:18:50.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:18:50.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:18:50.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:18:50.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:18:50.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:18:50.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:18:16', tmtdew=4.95, humidity=71.15, cloud=0.0, wind=42.5, temperature=8.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:18:17', seeing=1.97, atlas_timestamp='2026-02-14T22:18:09.533', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.03275000000000006, -0.049249999999998906, -0.016500000000000625, 0.011499999999999844, 0.008250000000000313, 0.0035000000000007248, 0.03774999999999906, 0.03549999999999898, 0.04100000000000037, -0.030750000000001165, 0.01649999999999885, 0.06149999999999878, 0.051750000000000185, 0.03449999999999953, -0.017000000000001236, 0.02874999999999872, 0.032999999999999474, 0.013999999999999346, 0.012249999999998096, 0.04099999999999859, 0.02874999999999872, 0.01774999999999949, 0.04124999999999979, 0.08599999999999852, 0.04349999999999987, 0.0417500000000004, -0.033500000000000085, 0.0389999999999997, 0.031000000000000583, 0.06500000000000128, 0.09100000000000108, 0.06774999999999842], zp_timestamp='2026-02-14T22:16:00')
2026-02-15T00:18:50.610 [DEBUG] [Thread-194700] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:18:50.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-15T00:18:50.706 [DEBUG] [Thread-194703] [transport.py] [_log()] starting thread (client mode): 0xa2d6d150
2026-02-15T00:18:50.706 [DEBUG] [Thread-194703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:18:50.721 [DEBUG] [Thread-194703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:18:50.721 [INFO] [Thread-194703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:18:50.728 [DEBUG] [Thread-194703] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:18:50.729 [DEBUG] [Thread-194703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:18:50.729 [DEBUG] [Thread-194703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:18:50.729 [DEBUG] [Thread-194703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:18:50.729 [DEBUG] [Thread-194703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:18:50.729 [DEBUG] [Thread-194703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:18:50.729 [DEBUG] [Thread-194703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:18:50.729 [DEBUG] [Thread-194703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:18:50.729 [DEBUG] [Thread-194703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:18:50.729 [DEBUG] [Thread-194703] [transport.py] [_log()] client lang: <none>
2026-02-15T00:18:50.729 [DEBUG] [Thread-194703] [transport.py] [_log()] server lang: <none>
2026-02-15T00:18:50.729 [DEBUG] [Thread-194703] [transport.py] [_log()] kex follows: False
2026-02-15T00:18:50.729 [DEBUG] [Thread-194703] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:18:50.729 [DEBUG] [Thread-194703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:18:50.729 [DEBUG] [Thread-194703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:18:50.729 [DEBUG] [Thread-194703] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:18:50.729 [DEBUG] [Thread-194703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:18:50.730 [DEBUG] [Thread-194703] [transport.py] [_log()] Compression: none
2026-02-15T00:18:50.730 [DEBUG] [Thread-194703] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:18:50.788 [DEBUG] [Thread-194703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:18:50.789 [DEBUG] [Thread-194703] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:18:50.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:18:50.790 [DEBUG] [Thread-194703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:18:50.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:18:50.844 [DEBUG] [Thread-194703] [transport.py] [_log()] userauth is OK
2026-02-15T00:18:50.844 [DEBUG] [Thread-194703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:18:50.845 [DEBUG] [Thread-194703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:18:50.845 [DEBUG] [Thread-194703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:18:50.845 [DEBUG] [Thread-194703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:18:50.864 [INFO] [Thread-194703] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:18:50.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-15T00:18:50.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:18:51.663 [DEBUG] [Thread-194703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:18:51.664 [DEBUG] [Thread-194703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:18:51.711 [DEBUG] [Thread-194703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:18:51.711 [DEBUG] [Thread-194703] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:18:51.720 [DEBUG] [Thread-194703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:18:51.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:18:51.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-15T00:18:51.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-15T00:18:51.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:18:51.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:18:51.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:18:51.755 [DEBUG] [Thread-194703] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:19:00.074 [DEBUG] [Thread-194705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:19:08.345 [DEBUG] [Thread-194706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:19:15.126 [DEBUG] [Thread-194707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:19:17.971 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:19:17.972 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:19:21.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:19:21.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:19:21.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-15T00:19:24.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 18, 52), 4.95, 71.13, 0.0, 38.68, 8.39, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:19:24.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:18:52
2026-02-15T00:19:24.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:19:24.825 [DEBUG] [Thread-194708] [transport.py] [_log()] starting thread (client mode): 0xa2d02800
2026-02-15T00:19:24.825 [DEBUG] [Thread-194708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:19:24.842 [DEBUG] [Thread-194708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:19:24.842 [INFO] [Thread-194708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:19:24.846 [DEBUG] [Thread-194708] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:19:24.846 [DEBUG] [Thread-194708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:19:24.846 [DEBUG] [Thread-194708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:19:24.846 [DEBUG] [Thread-194708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:19:24.846 [DEBUG] [Thread-194708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:19:24.846 [DEBUG] [Thread-194708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:19:24.846 [DEBUG] [Thread-194708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:19:24.846 [DEBUG] [Thread-194708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:19:24.846 [DEBUG] [Thread-194708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:19:24.846 [DEBUG] [Thread-194708] [transport.py] [_log()] client lang: <none>
2026-02-15T00:19:24.846 [DEBUG] [Thread-194708] [transport.py] [_log()] server lang: <none>
2026-02-15T00:19:24.846 [DEBUG] [Thread-194708] [transport.py] [_log()] kex follows: False
2026-02-15T00:19:24.846 [DEBUG] [Thread-194708] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:19:24.846 [DEBUG] [Thread-194708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:19:24.846 [DEBUG] [Thread-194708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:19:24.846 [DEBUG] [Thread-194708] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:19:24.846 [DEBUG] [Thread-194708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:19:24.846 [DEBUG] [Thread-194708] [transport.py] [_log()] Compression: none
2026-02-15T00:19:24.847 [DEBUG] [Thread-194708] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:19:24.864 [DEBUG] [Thread-194708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:19:24.864 [DEBUG] [Thread-194708] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:19:24.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:19:24.866 [DEBUG] [Thread-194708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:19:24.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:19:24.868 [DEBUG] [Thread-194708] [transport.py] [_log()] userauth is OK
2026-02-15T00:19:24.868 [DEBUG] [Thread-194708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:19:24.868 [DEBUG] [Thread-194708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:19:24.868 [DEBUG] [Thread-194708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:19:24.868 [DEBUG] [Thread-194708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:19:24.890 [INFO] [Thread-194708] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:19:24.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:19:25.586 [DEBUG] [Thread-194708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:19:25.586 [DEBUG] [Thread-194708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:19:25.587 [DEBUG] [Thread-194708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:19:25.627 [DEBUG] [Thread-194708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:19:25.627 [DEBUG] [Thread-194708] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:19:25.630 [DEBUG] [Thread-194708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:19:25.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:19:25.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:19:25.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:19:25.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:19:25.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:19:25.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:19:25.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:19:25.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:19:25.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:19:25.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.929624 -999.00   +8.30  25.40     75   +4.20 1 1 1 1 1     0    0 3.57 -31.61 ZNESW 25.4 25.4 152.4 38.1 8.8 -24.4 8.6 -23.2 8.4 -22.3 8.7 -23.6
2026-02-15T00:19:25.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:19:25.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:19:25.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.929624
2026-02-15T00:19:25.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:19:25.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:19:25.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:19:25.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:19:25.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:19:25.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:18:52', tmtdew=4.95, humidity=71.13, cloud=0.0, wind=38.68, temperature=8.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:18:52', seeing=1.74, atlas_timestamp='2026-02-14T22:18:39.514', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.03275000000000006, -0.049249999999998906, -0.016500000000000625, 0.011499999999999844, 0.008250000000000313, 0.0035000000000007248, 0.03774999999999906, 0.03549999999999898, 0.04100000000000037, -0.030750000000001165, 0.01649999999999885, 0.06149999999999878, 0.051750000000000185, 0.03449999999999953, -0.017000000000001236, 0.02874999999999872, 0.032999999999999474, 0.013999999999999346, 0.012249999999998096, 0.04099999999999859, 0.02874999999999872, 0.01774999999999949, 0.04124999999999979, 0.08599999999999852, 0.04349999999999987, 0.0417500000000004, -0.033500000000000085, 0.0389999999999997, 0.031000000000000583, 0.06500000000000128, 0.09100000000000108, 0.06774999999999842], zp_timestamp='2026-02-14T22:16:00')
2026-02-15T00:19:25.657 [DEBUG] [Thread-194708] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:19:25.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-15T00:19:25.758 [DEBUG] [Thread-194711] [transport.py] [_log()] starting thread (client mode): 0xa2d6ac80
2026-02-15T00:19:25.758 [DEBUG] [Thread-194711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:19:25.772 [DEBUG] [Thread-194711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:19:25.772 [INFO] [Thread-194711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:19:25.783 [DEBUG] [Thread-194711] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:19:25.783 [DEBUG] [Thread-194711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:19:25.783 [DEBUG] [Thread-194711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:19:25.783 [DEBUG] [Thread-194711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:19:25.783 [DEBUG] [Thread-194711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:19:25.783 [DEBUG] [Thread-194711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:19:25.784 [DEBUG] [Thread-194711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:19:25.784 [DEBUG] [Thread-194711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:19:25.784 [DEBUG] [Thread-194711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:19:25.784 [DEBUG] [Thread-194711] [transport.py] [_log()] client lang: <none>
2026-02-15T00:19:25.784 [DEBUG] [Thread-194711] [transport.py] [_log()] server lang: <none>
2026-02-15T00:19:25.784 [DEBUG] [Thread-194711] [transport.py] [_log()] kex follows: False
2026-02-15T00:19:25.784 [DEBUG] [Thread-194711] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:19:25.784 [DEBUG] [Thread-194711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:19:25.785 [DEBUG] [Thread-194711] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:19:25.785 [DEBUG] [Thread-194711] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:19:25.785 [DEBUG] [Thread-194711] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:19:25.785 [DEBUG] [Thread-194711] [transport.py] [_log()] Compression: none
2026-02-15T00:19:25.785 [DEBUG] [Thread-194711] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:19:25.841 [DEBUG] [Thread-194711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:19:25.842 [DEBUG] [Thread-194711] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:19:25.842 [DEBUG] [Thread-194711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:19:25.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:19:25.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:19:25.905 [DEBUG] [Thread-194711] [transport.py] [_log()] userauth is OK
2026-02-15T00:19:25.905 [DEBUG] [Thread-194711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:19:25.905 [DEBUG] [Thread-194711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:19:25.905 [DEBUG] [Thread-194711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:19:25.905 [DEBUG] [Thread-194711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:19:25.924 [INFO] [Thread-194711] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:19:25.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-15T00:19:25.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:19:26.728 [DEBUG] [Thread-194711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:19:26.728 [DEBUG] [Thread-194711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:19:26.776 [DEBUG] [Thread-194711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:19:26.777 [DEBUG] [Thread-194711] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:19:26.786 [DEBUG] [Thread-194711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:19:26.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:19:26.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-15T00:19:26.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-15T00:19:26.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:19:26.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:19:26.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:19:26.823 [DEBUG] [Thread-194711] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:19:30.166 [DEBUG] [Thread-194713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:19:45.219 [DEBUG] [Thread-194714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:19:56.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:19:56.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:19:56.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-15T00:19:58.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 19, 27), 4.93, 71.22, 0.0, 37.92, 8.39, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:19:58.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:19:27
2026-02-15T00:19:59.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:19:59.213 [DEBUG] [Thread-194715] [transport.py] [_log()] starting thread (client mode): 0xa2d02650
2026-02-15T00:19:59.213 [DEBUG] [Thread-194715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:19:59.233 [DEBUG] [Thread-194715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:19:59.234 [INFO] [Thread-194715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:19:59.237 [DEBUG] [Thread-194715] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:19:59.237 [DEBUG] [Thread-194715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:19:59.237 [DEBUG] [Thread-194715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:19:59.237 [DEBUG] [Thread-194715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:19:59.237 [DEBUG] [Thread-194715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:19:59.237 [DEBUG] [Thread-194715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:19:59.237 [DEBUG] [Thread-194715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:19:59.237 [DEBUG] [Thread-194715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:19:59.237 [DEBUG] [Thread-194715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:19:59.237 [DEBUG] [Thread-194715] [transport.py] [_log()] client lang: <none>
2026-02-15T00:19:59.237 [DEBUG] [Thread-194715] [transport.py] [_log()] server lang: <none>
2026-02-15T00:19:59.237 [DEBUG] [Thread-194715] [transport.py] [_log()] kex follows: False
2026-02-15T00:19:59.237 [DEBUG] [Thread-194715] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:19:59.237 [DEBUG] [Thread-194715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:19:59.237 [DEBUG] [Thread-194715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:19:59.237 [DEBUG] [Thread-194715] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:19:59.237 [DEBUG] [Thread-194715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:19:59.237 [DEBUG] [Thread-194715] [transport.py] [_log()] Compression: none
2026-02-15T00:19:59.237 [DEBUG] [Thread-194715] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:19:59.254 [DEBUG] [Thread-194715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:19:59.255 [DEBUG] [Thread-194715] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:19:59.255 [DEBUG] [Thread-194715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:19:59.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:19:59.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:19:59.257 [DEBUG] [Thread-194715] [transport.py] [_log()] userauth is OK
2026-02-15T00:19:59.257 [DEBUG] [Thread-194715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:19:59.258 [DEBUG] [Thread-194715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:19:59.258 [DEBUG] [Thread-194715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:19:59.258 [DEBUG] [Thread-194715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:19:59.283 [INFO] [Thread-194715] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:19:59.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:19:59.950 [DEBUG] [Thread-194715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:19:59.951 [DEBUG] [Thread-194715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:19:59.951 [DEBUG] [Thread-194715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:19:59.991 [DEBUG] [Thread-194715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:19:59.992 [DEBUG] [Thread-194715] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:19:59.995 [DEBUG] [Thread-194715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:20:00.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:20:00.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:20:00.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:20:00.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:20:00.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:20:00.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:20:00.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:20:00.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:20:00.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:20:00.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.929971 -999.00   +8.30  28.40     75   +4.20 1 1 1 1 1     0    0 3.49 -32.63 ZNESW 28.4 28.4 159.4 36.6 8.7 -24.3 8.6 -23.3 8.4 -22.3 8.7 -23.6
2026-02-15T00:20:00.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:20:00.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:20:00.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.929971
2026-02-15T00:20:00.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:20:00.022 [DEBUG] [Thread-194715] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:20:00.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:20:00.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:20:00.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:20:00.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:20:00.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:19:27', tmtdew=4.93, humidity=71.22, cloud=0.0, wind=37.92, temperature=8.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:19:27', seeing=1.79, atlas_timestamp='2026-02-14T22:19:09.494', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.03275000000000006, -0.049249999999998906, -0.016500000000000625, 0.011499999999999844, 0.008250000000000313, 0.0035000000000007248, 0.03774999999999906, 0.03549999999999898, 0.04100000000000037, -0.030750000000001165, 0.01649999999999885, 0.06149999999999878, 0.051750000000000185, 0.03449999999999953, -0.017000000000001236, 0.02874999999999872, 0.032999999999999474, 0.013999999999999346, 0.012249999999998096, 0.04099999999999859, 0.02874999999999872, 0.01774999999999949, 0.04124999999999979, 0.08599999999999852, 0.04349999999999987, 0.0417500000000004, -0.033500000000000085, 0.0389999999999997, 0.031000000000000583, 0.06500000000000128, 0.09100000000000108, 0.06774999999999842], zp_timestamp='2026-02-14T22:16:00')
2026-02-15T00:20:00.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-15T00:20:00.118 [DEBUG] [Thread-194718] [transport.py] [_log()] starting thread (client mode): 0xa2d00490
2026-02-15T00:20:00.119 [DEBUG] [Thread-194718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:20:00.133 [DEBUG] [Thread-194718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:20:00.133 [INFO] [Thread-194718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:20:00.141 [DEBUG] [Thread-194718] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:20:00.141 [DEBUG] [Thread-194718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:20:00.141 [DEBUG] [Thread-194718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:20:00.141 [DEBUG] [Thread-194718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:20:00.141 [DEBUG] [Thread-194718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:20:00.141 [DEBUG] [Thread-194718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:20:00.141 [DEBUG] [Thread-194718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:20:00.141 [DEBUG] [Thread-194718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:20:00.142 [DEBUG] [Thread-194718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:20:00.142 [DEBUG] [Thread-194718] [transport.py] [_log()] client lang: <none>
2026-02-15T00:20:00.142 [DEBUG] [Thread-194718] [transport.py] [_log()] server lang: <none>
2026-02-15T00:20:00.142 [DEBUG] [Thread-194718] [transport.py] [_log()] kex follows: False
2026-02-15T00:20:00.142 [DEBUG] [Thread-194718] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:20:00.142 [DEBUG] [Thread-194718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:20:00.142 [DEBUG] [Thread-194718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:20:00.142 [DEBUG] [Thread-194718] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:20:00.142 [DEBUG] [Thread-194718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:20:00.142 [DEBUG] [Thread-194718] [transport.py] [_log()] Compression: none
2026-02-15T00:20:00.142 [DEBUG] [Thread-194718] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:20:00.199 [DEBUG] [Thread-194718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:20:00.199 [DEBUG] [Thread-194718] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:20:00.199 [DEBUG] [Thread-194718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:20:00.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:20:00.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:20:00.259 [DEBUG] [Thread-194718] [transport.py] [_log()] userauth is OK
2026-02-15T00:20:00.260 [DEBUG] [Thread-194720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:20:00.260 [DEBUG] [Thread-194718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:20:00.261 [DEBUG] [Thread-194718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:20:00.261 [DEBUG] [Thread-194718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:20:00.261 [DEBUG] [Thread-194718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:20:00.286 [INFO] [Thread-194718] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:20:00.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T00:20:00.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:20:01.095 [DEBUG] [Thread-194718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:20:01.095 [DEBUG] [Thread-194718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:20:01.144 [DEBUG] [Thread-194718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:20:01.145 [DEBUG] [Thread-194718] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:20:01.155 [DEBUG] [Thread-194718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:20:01.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:20:01.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:20:01.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-15T00:20:01.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:20:01.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:20:01.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:20:01.194 [DEBUG] [Thread-194718] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:20:08.411 [DEBUG] [Thread-194721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:20:15.318 [DEBUG] [Thread-194722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:20:18.195 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:20:18.196 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:20:30.356 [DEBUG] [Thread-194723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:20:31.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:20:31.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:20:31.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-15T00:20:33.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 20, 3), 4.93, 71.23, 0.0, 35.78, 8.36, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:20:33.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:20:03
2026-02-15T00:20:33.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:20:33.548 [DEBUG] [Thread-194724] [transport.py] [_log()] starting thread (client mode): 0xa2d6c4c0
2026-02-15T00:20:33.548 [DEBUG] [Thread-194724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:20:33.571 [DEBUG] [Thread-194724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:20:33.571 [INFO] [Thread-194724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:20:33.572 [DEBUG] [Thread-194724] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:20:33.572 [DEBUG] [Thread-194724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:20:33.572 [DEBUG] [Thread-194724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:20:33.572 [DEBUG] [Thread-194724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:20:33.572 [DEBUG] [Thread-194724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:20:33.572 [DEBUG] [Thread-194724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:20:33.572 [DEBUG] [Thread-194724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:20:33.573 [DEBUG] [Thread-194724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:20:33.573 [DEBUG] [Thread-194724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:20:33.573 [DEBUG] [Thread-194724] [transport.py] [_log()] client lang: <none>
2026-02-15T00:20:33.573 [DEBUG] [Thread-194724] [transport.py] [_log()] server lang: <none>
2026-02-15T00:20:33.573 [DEBUG] [Thread-194724] [transport.py] [_log()] kex follows: False
2026-02-15T00:20:33.573 [DEBUG] [Thread-194724] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:20:33.573 [DEBUG] [Thread-194724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:20:33.573 [DEBUG] [Thread-194724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:20:33.573 [DEBUG] [Thread-194724] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:20:33.573 [DEBUG] [Thread-194724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:20:33.573 [DEBUG] [Thread-194724] [transport.py] [_log()] Compression: none
2026-02-15T00:20:33.573 [DEBUG] [Thread-194724] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:20:33.581 [DEBUG] [Thread-194724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:20:33.582 [DEBUG] [Thread-194724] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:20:33.582 [DEBUG] [Thread-194724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:20:33.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:20:33.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:20:33.583 [DEBUG] [Thread-194724] [transport.py] [_log()] userauth is OK
2026-02-15T00:20:33.583 [DEBUG] [Thread-194724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:20:33.583 [DEBUG] [Thread-194724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:20:33.583 [DEBUG] [Thread-194724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:20:33.583 [DEBUG] [Thread-194724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:20:33.595 [INFO] [Thread-194724] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:20:33.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:20:34.171 [DEBUG] [Thread-194724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:20:34.171 [DEBUG] [Thread-194724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:20:34.172 [DEBUG] [Thread-194724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:20:34.212 [DEBUG] [Thread-194724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:20:34.212 [DEBUG] [Thread-194724] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:20:34.214 [DEBUG] [Thread-194724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:20:34.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:20:34.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:20:34.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:20:34.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:20:34.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:20:34.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:20:34.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:20:34.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:20:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:20:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.930318 -999.00   +8.30  33.39     75   +4.20 1 1 2 1 1     0    0 3.53 -32.69 ZNESW 33.4 33.4 156.2 41.0 8.8 -24.2 8.6 -23.3 8.4 -22.3 8.7 -23.6
2026-02-15T00:20:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:20:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:20:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.930318
2026-02-15T00:20:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:20:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:20:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:20:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:20:34.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:20:34.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:20:03', tmtdew=4.93, humidity=71.23, cloud=0.0, wind=35.78, temperature=8.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:20:03', seeing=1.6, atlas_timestamp='2026-02-14T22:19:39.475', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.03275000000000006, -0.049249999999998906, -0.016500000000000625, 0.011499999999999844, 0.008250000000000313, 0.0035000000000007248, 0.03774999999999906, 0.03549999999999898, 0.04100000000000037, -0.030750000000001165, 0.01649999999999885, 0.06149999999999878, 0.051750000000000185, 0.03449999999999953, -0.017000000000001236, 0.02874999999999872, 0.032999999999999474, 0.013999999999999346, 0.012249999999998096, 0.04099999999999859, 0.02874999999999872, 0.01774999999999949, 0.04124999999999979, 0.08599999999999852, 0.04349999999999987, 0.0417500000000004, -0.033500000000000085, 0.0389999999999997, 0.031000000000000583, 0.06500000000000128, 0.09100000000000108, 0.06774999999999842], zp_timestamp='2026-02-14T22:16:00')
2026-02-15T00:20:34.232 [DEBUG] [Thread-194724] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:20:34.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-15T00:20:34.316 [DEBUG] [Thread-194727] [transport.py] [_log()] starting thread (client mode): 0xa2d1a9b0
2026-02-15T00:20:34.316 [DEBUG] [Thread-194727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:20:34.333 [DEBUG] [Thread-194727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:20:34.333 [INFO] [Thread-194727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:20:34.340 [DEBUG] [Thread-194727] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:20:34.341 [DEBUG] [Thread-194727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:20:34.341 [DEBUG] [Thread-194727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:20:34.341 [DEBUG] [Thread-194727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:20:34.341 [DEBUG] [Thread-194727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:20:34.341 [DEBUG] [Thread-194727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:20:34.341 [DEBUG] [Thread-194727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:20:34.341 [DEBUG] [Thread-194727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:20:34.342 [DEBUG] [Thread-194727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:20:34.342 [DEBUG] [Thread-194727] [transport.py] [_log()] client lang: <none>
2026-02-15T00:20:34.342 [DEBUG] [Thread-194727] [transport.py] [_log()] server lang: <none>
2026-02-15T00:20:34.342 [DEBUG] [Thread-194727] [transport.py] [_log()] kex follows: False
2026-02-15T00:20:34.342 [DEBUG] [Thread-194727] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:20:34.342 [DEBUG] [Thread-194727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:20:34.342 [DEBUG] [Thread-194727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:20:34.342 [DEBUG] [Thread-194727] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:20:34.343 [DEBUG] [Thread-194727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:20:34.343 [DEBUG] [Thread-194727] [transport.py] [_log()] Compression: none
2026-02-15T00:20:34.343 [DEBUG] [Thread-194727] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:20:34.401 [DEBUG] [Thread-194727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:20:34.402 [DEBUG] [Thread-194727] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:20:34.402 [DEBUG] [Thread-194727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:20:34.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:20:34.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:20:34.460 [DEBUG] [Thread-194727] [transport.py] [_log()] userauth is OK
2026-02-15T00:20:34.461 [DEBUG] [Thread-194727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:20:34.461 [DEBUG] [Thread-194727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:20:34.461 [DEBUG] [Thread-194727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:20:34.461 [DEBUG] [Thread-194727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:20:34.480 [INFO] [Thread-194727] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:20:34.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-15T00:20:34.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:20:35.304 [DEBUG] [Thread-194727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:20:35.304 [DEBUG] [Thread-194727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:20:35.357 [DEBUG] [Thread-194727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:20:35.357 [DEBUG] [Thread-194727] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:20:35.367 [DEBUG] [Thread-194727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:20:35.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:20:35.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-15T00:20:35.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-15T00:20:35.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:20:35.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:20:35.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:20:35.405 [DEBUG] [Thread-194727] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:20:45.391 [DEBUG] [Thread-194729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:21:00.441 [DEBUG] [Thread-194730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:21:05.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:21:05.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:21:05.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:21:07.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 20, 38), 5.04, 70.56, 0.0, 43.93, 8.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:21:07.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:20:38
2026-02-15T00:21:07.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:21:08.082 [DEBUG] [Thread-194731] [transport.py] [_log()] starting thread (client mode): 0xa2d03880
2026-02-15T00:21:08.082 [DEBUG] [Thread-194731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:21:08.102 [DEBUG] [Thread-194731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:21:08.102 [INFO] [Thread-194731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:21:08.105 [DEBUG] [Thread-194731] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:21:08.106 [DEBUG] [Thread-194731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:21:08.106 [DEBUG] [Thread-194731] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:21:08.106 [DEBUG] [Thread-194731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:21:08.106 [DEBUG] [Thread-194731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:21:08.106 [DEBUG] [Thread-194731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:21:08.106 [DEBUG] [Thread-194731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:21:08.106 [DEBUG] [Thread-194731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:21:08.106 [DEBUG] [Thread-194731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:21:08.106 [DEBUG] [Thread-194731] [transport.py] [_log()] client lang: <none>
2026-02-15T00:21:08.106 [DEBUG] [Thread-194731] [transport.py] [_log()] server lang: <none>
2026-02-15T00:21:08.106 [DEBUG] [Thread-194731] [transport.py] [_log()] kex follows: False
2026-02-15T00:21:08.106 [DEBUG] [Thread-194731] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:21:08.106 [DEBUG] [Thread-194731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:21:08.107 [DEBUG] [Thread-194731] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:21:08.107 [DEBUG] [Thread-194731] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:21:08.107 [DEBUG] [Thread-194731] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:21:08.107 [DEBUG] [Thread-194731] [transport.py] [_log()] Compression: none
2026-02-15T00:21:08.107 [DEBUG] [Thread-194731] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:21:08.125 [DEBUG] [Thread-194731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:21:08.126 [DEBUG] [Thread-194731] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:21:08.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:21:08.126 [DEBUG] [Thread-194731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:21:08.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:21:08.128 [DEBUG] [Thread-194731] [transport.py] [_log()] userauth is OK
2026-02-15T00:21:08.129 [DEBUG] [Thread-194731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:21:08.129 [DEBUG] [Thread-194731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:21:08.129 [DEBUG] [Thread-194731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:21:08.129 [DEBUG] [Thread-194731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:21:08.164 [INFO] [Thread-194731] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:21:08.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:21:08.469 [DEBUG] [Thread-194733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:21:08.800 [DEBUG] [Thread-194731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:21:08.800 [DEBUG] [Thread-194731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:21:08.800 [DEBUG] [Thread-194731] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:21:08.841 [DEBUG] [Thread-194731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:21:08.842 [DEBUG] [Thread-194731] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:21:08.845 [DEBUG] [Thread-194731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:21:08.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:21:08.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:21:08.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:21:08.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:21:08.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:21:08.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:21:08.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:21:08.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:21:08.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:21:08.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.930665 -999.00   +8.30  29.04     76   +4.30 1 1 1 1 1     0    0 3.51 -31.80 ZNESW 29.0 29.0 154.6 43.0 8.7 -24.2 8.6 -23.2 8.4 -22.3 8.7 -23.6
2026-02-15T00:21:08.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:21:08.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:21:08.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.930665
2026-02-15T00:21:08.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:21:08.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:21:08.871 [DEBUG] [Thread-194731] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:21:08.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:21:08.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:21:08.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:21:08.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:20:38', tmtdew=5.04, humidity=70.56, cloud=0.0, wind=43.93, temperature=8.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:20:38', seeing=1.17, atlas_timestamp='2026-02-14T22:20:09.456', atlas_cloud=1, atlas_rain=1, zp_data=[-0.1822499999999998, -0.10975000000000001, -0.16824999999999868, -0.19350000000000023, -0.15449999999999875, -0.14624999999999844, -0.09800000000000075, -0.08424999999999905, -0.07250000000000156, -0.09299999999999997, -0.20974999999999966, -0.12599999999999945, -0.10200000000000031, -0.12375000000000114, -0.13700000000000045, -0.07500000000000107, -0.03125, -0.08949999999999925, -0.12700000000000067, -0.10325000000000095, -0.09050000000000225, -0.15625, -0.16224999999999845, -0.023249999999999105, -0.016000000000000014, -0.16049999999999898, -0.1092499999999994, -0.11749999999999972, -0.0754999999999999, -0.20399999999999885, -0.0804999999999989, 0.036000000000001364, -0.08325000000000138], zp_timestamp='2026-02-14T22:19:00')
2026-02-15T00:21:08.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T00:21:08.969 [DEBUG] [Thread-194735] [transport.py] [_log()] starting thread (client mode): 0xa2d6fca0
2026-02-15T00:21:08.969 [DEBUG] [Thread-194735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:21:08.983 [DEBUG] [Thread-194735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:21:08.983 [INFO] [Thread-194735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:21:08.991 [DEBUG] [Thread-194735] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:21:08.991 [DEBUG] [Thread-194735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:21:08.991 [DEBUG] [Thread-194735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:21:08.991 [DEBUG] [Thread-194735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:21:08.991 [DEBUG] [Thread-194735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:21:08.991 [DEBUG] [Thread-194735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:21:08.991 [DEBUG] [Thread-194735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:21:08.991 [DEBUG] [Thread-194735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:21:08.991 [DEBUG] [Thread-194735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:21:08.991 [DEBUG] [Thread-194735] [transport.py] [_log()] client lang: <none>
2026-02-15T00:21:08.991 [DEBUG] [Thread-194735] [transport.py] [_log()] server lang: <none>
2026-02-15T00:21:08.992 [DEBUG] [Thread-194735] [transport.py] [_log()] kex follows: False
2026-02-15T00:21:08.992 [DEBUG] [Thread-194735] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:21:08.992 [DEBUG] [Thread-194735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:21:08.992 [DEBUG] [Thread-194735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:21:08.992 [DEBUG] [Thread-194735] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:21:08.992 [DEBUG] [Thread-194735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:21:08.992 [DEBUG] [Thread-194735] [transport.py] [_log()] Compression: none
2026-02-15T00:21:08.992 [DEBUG] [Thread-194735] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:21:09.049 [DEBUG] [Thread-194735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:21:09.049 [DEBUG] [Thread-194735] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:21:09.050 [DEBUG] [Thread-194735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:21:09.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:21:09.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:21:09.105 [DEBUG] [Thread-194735] [transport.py] [_log()] userauth is OK
2026-02-15T00:21:09.105 [DEBUG] [Thread-194735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:21:09.105 [DEBUG] [Thread-194735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:21:09.105 [DEBUG] [Thread-194735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:21:09.105 [DEBUG] [Thread-194735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:21:09.123 [INFO] [Thread-194735] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:21: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-15T00:21:09.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:21:09.923 [DEBUG] [Thread-194735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:21:09.923 [DEBUG] [Thread-194735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:21:09.971 [DEBUG] [Thread-194735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:21:09.972 [DEBUG] [Thread-194735] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:21:09.981 [DEBUG] [Thread-194735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:21:09.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:21:09.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-15T00:21:09.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:21:10.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:21:10.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:21:10.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:21:10.018 [DEBUG] [Thread-194735] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:21:15.480 [DEBUG] [Thread-194737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:21:18.395 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:21:18.396 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:21:30.540 [DEBUG] [Thread-194738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:21:40.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:21:40.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:21:40.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:21:42.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 21, 13), 4.85, 71.4, 0.0, 41.23, 8.33, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:21:42.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:21:13
2026-02-15T00:21:42.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:21:42.581 [DEBUG] [Thread-194739] [transport.py] [_log()] starting thread (client mode): 0xa2d796c0
2026-02-15T00:21:42.581 [DEBUG] [Thread-194739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:21:42.601 [DEBUG] [Thread-194739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:21:42.601 [INFO] [Thread-194739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:21:42.604 [DEBUG] [Thread-194739] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:21:42.604 [DEBUG] [Thread-194739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:21:42.604 [DEBUG] [Thread-194739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:21:42.604 [DEBUG] [Thread-194739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:21:42.604 [DEBUG] [Thread-194739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:21:42.604 [DEBUG] [Thread-194739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:21:42.604 [DEBUG] [Thread-194739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:21:42.604 [DEBUG] [Thread-194739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:21:42.604 [DEBUG] [Thread-194739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:21:42.604 [DEBUG] [Thread-194739] [transport.py] [_log()] client lang: <none>
2026-02-15T00:21:42.604 [DEBUG] [Thread-194739] [transport.py] [_log()] server lang: <none>
2026-02-15T00:21:42.604 [DEBUG] [Thread-194739] [transport.py] [_log()] kex follows: False
2026-02-15T00:21:42.605 [DEBUG] [Thread-194739] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:21:42.605 [DEBUG] [Thread-194739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:21:42.605 [DEBUG] [Thread-194739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:21:42.605 [DEBUG] [Thread-194739] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:21:42.605 [DEBUG] [Thread-194739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:21:42.605 [DEBUG] [Thread-194739] [transport.py] [_log()] Compression: none
2026-02-15T00:21:42.605 [DEBUG] [Thread-194739] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:21:42.622 [DEBUG] [Thread-194739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:21:42.623 [DEBUG] [Thread-194739] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:21:42.623 [DEBUG] [Thread-194739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:21:42.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:21:42.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:21:42.625 [DEBUG] [Thread-194739] [transport.py] [_log()] userauth is OK
2026-02-15T00:21:42.626 [DEBUG] [Thread-194739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:21:42.626 [DEBUG] [Thread-194739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:21:42.626 [DEBUG] [Thread-194739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:21:42.626 [DEBUG] [Thread-194739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:21:42.643 [INFO] [Thread-194739] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:21:42.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:21:43.247 [DEBUG] [Thread-194739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:21:43.248 [DEBUG] [Thread-194739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:21:43.248 [DEBUG] [Thread-194739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:21:43.289 [DEBUG] [Thread-194739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:21:43.289 [DEBUG] [Thread-194739] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:21:43.292 [DEBUG] [Thread-194739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:21:43.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:21:43.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:21:43.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:21:43.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:21:43.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:21:43.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:21:43.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:21:43.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:21:43.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:21:43.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.931360 -999.00   +8.20  24.01     76   +4.30 1 1 1 1 1     0    0 3.51 -30.45 ZNESW 24.0 24.0 160.1 38.2 8.7 -24.2 8.5 -23.3 8.3 -22.3 8.7 -23.7
2026-02-15T00:21:43.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:21:43.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:21:43.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.931360
2026-02-15T00:21:43.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:21:43.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:21:43.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:21:43.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:21:43.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:21:43.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:21:13', tmtdew=4.85, humidity=71.4, cloud=0.0, wind=41.23, temperature=8.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:21:13', seeing=1.13, atlas_timestamp='2026-02-14T22:21:09.504', atlas_cloud=1, atlas_rain=1, zp_data=[-0.1822499999999998, -0.10975000000000001, -0.16824999999999868, -0.19350000000000023, -0.15449999999999875, -0.14624999999999844, -0.09800000000000075, -0.08424999999999905, -0.07250000000000156, -0.09299999999999997, -0.20974999999999966, -0.12599999999999945, -0.10200000000000031, -0.12375000000000114, -0.13700000000000045, -0.07500000000000107, -0.03125, -0.08949999999999925, -0.12700000000000067, -0.10325000000000095, -0.09050000000000225, -0.15625, -0.16224999999999845, -0.023249999999999105, -0.016000000000000014, -0.16049999999999898, -0.1092499999999994, -0.11749999999999972, -0.0754999999999999, -0.20399999999999885, -0.0804999999999989, 0.036000000000001364, -0.08325000000000138], zp_timestamp='2026-02-14T22:19:00')
2026-02-15T00:21:43.318 [DEBUG] [Thread-194739] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:21:43.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-15T00:21:43.416 [DEBUG] [Thread-194742] [transport.py] [_log()] starting thread (client mode): 0xa2d02500
2026-02-15T00:21:43.417 [DEBUG] [Thread-194742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:21:43.431 [DEBUG] [Thread-194742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:21:43.431 [INFO] [Thread-194742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:21:43.439 [DEBUG] [Thread-194742] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:21:43.439 [DEBUG] [Thread-194742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:21:43.439 [DEBUG] [Thread-194742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:21:43.439 [DEBUG] [Thread-194742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:21:43.439 [DEBUG] [Thread-194742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:21:43.439 [DEBUG] [Thread-194742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:21:43.439 [DEBUG] [Thread-194742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:21:43.439 [DEBUG] [Thread-194742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:21:43.439 [DEBUG] [Thread-194742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:21:43.439 [DEBUG] [Thread-194742] [transport.py] [_log()] client lang: <none>
2026-02-15T00:21:43.439 [DEBUG] [Thread-194742] [transport.py] [_log()] server lang: <none>
2026-02-15T00:21:43.439 [DEBUG] [Thread-194742] [transport.py] [_log()] kex follows: False
2026-02-15T00:21:43.440 [DEBUG] [Thread-194742] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:21:43.440 [DEBUG] [Thread-194742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:21:43.440 [DEBUG] [Thread-194742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:21:43.440 [DEBUG] [Thread-194742] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:21:43.440 [DEBUG] [Thread-194742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:21:43.440 [DEBUG] [Thread-194742] [transport.py] [_log()] Compression: none
2026-02-15T00:21:43.440 [DEBUG] [Thread-194742] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:21:43.497 [DEBUG] [Thread-194742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:21:43.497 [DEBUG] [Thread-194742] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:21:43.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:21:43.498 [DEBUG] [Thread-194742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:21:43.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:21:43.552 [DEBUG] [Thread-194742] [transport.py] [_log()] userauth is OK
2026-02-15T00:21:43.553 [DEBUG] [Thread-194742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:21:43.553 [DEBUG] [Thread-194742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:21:43.553 [DEBUG] [Thread-194742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:21:43.553 [DEBUG] [Thread-194742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:21:43.572 [INFO] [Thread-194742] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:21:43.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T00:21:43.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:21:44.406 [DEBUG] [Thread-194742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:21:44.406 [DEBUG] [Thread-194742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:21:44.454 [DEBUG] [Thread-194742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:21:44.455 [DEBUG] [Thread-194742] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:21:44.464 [DEBUG] [Thread-194742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:21:44.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:21:44.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-15T00:21:44.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-15T00:21:44.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:21:44.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:21:44.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:21:44.501 [DEBUG] [Thread-194742] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:21:45.574 [DEBUG] [Thread-194744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:22:00.622 [DEBUG] [Thread-194745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:22:08.529 [DEBUG] [Thread-194746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:22:14.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:22:14.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:22:14.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:22:15.660 [DEBUG] [Thread-194747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:22:16.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 21, 48), 4.78, 71.48, 0.0, 39.68, 8.33, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:22:16.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:21:48
2026-02-15T00:22:16.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:22:16.922 [DEBUG] [Thread-194748] [transport.py] [_log()] starting thread (client mode): 0xa2d7b1c0
2026-02-15T00:22:16.922 [DEBUG] [Thread-194748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:22:16.942 [DEBUG] [Thread-194748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:22:16.942 [INFO] [Thread-194748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:22:16.945 [DEBUG] [Thread-194748] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:22:16.945 [DEBUG] [Thread-194748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:22:16.945 [DEBUG] [Thread-194748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:22:16.945 [DEBUG] [Thread-194748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:22:16.945 [DEBUG] [Thread-194748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:22:16.946 [DEBUG] [Thread-194748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:22:16.946 [DEBUG] [Thread-194748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:22:16.946 [DEBUG] [Thread-194748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:22:16.946 [DEBUG] [Thread-194748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:22:16.946 [DEBUG] [Thread-194748] [transport.py] [_log()] client lang: <none>
2026-02-15T00:22:16.946 [DEBUG] [Thread-194748] [transport.py] [_log()] server lang: <none>
2026-02-15T00:22:16.946 [DEBUG] [Thread-194748] [transport.py] [_log()] kex follows: False
2026-02-15T00:22:16.946 [DEBUG] [Thread-194748] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:22:16.946 [DEBUG] [Thread-194748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:22:16.946 [DEBUG] [Thread-194748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:22:16.946 [DEBUG] [Thread-194748] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:22:16.946 [DEBUG] [Thread-194748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:22:16.946 [DEBUG] [Thread-194748] [transport.py] [_log()] Compression: none
2026-02-15T00:22:16.946 [DEBUG] [Thread-194748] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:22:16.964 [DEBUG] [Thread-194748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:22:16.965 [DEBUG] [Thread-194748] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:22:16.966 [DEBUG] [Thread-194748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:22:16.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:22:16.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:22:16.968 [DEBUG] [Thread-194748] [transport.py] [_log()] userauth is OK
2026-02-15T00:22:16.968 [DEBUG] [Thread-194748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:22:16.968 [DEBUG] [Thread-194748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:22:16.968 [DEBUG] [Thread-194748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:22:16.968 [DEBUG] [Thread-194748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:22:16.984 [INFO] [Thread-194748] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:22:16.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:22:17.610 [DEBUG] [Thread-194748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:22:17.610 [DEBUG] [Thread-194748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:22:17.611 [DEBUG] [Thread-194748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:22:17.651 [DEBUG] [Thread-194748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:22:17.652 [DEBUG] [Thread-194748] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:22:17.655 [DEBUG] [Thread-194748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:22:17.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:22:17.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:22:17.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:22:17.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:22:17.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:22:17.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:22:17.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:22:17.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:22:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:22:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.931707 -999.00   +8.20  33.68     76   +4.30 1 1 2 1 1     0    0 3.49 -30.93 ZNESW 33.7 33.7 148.6 40.2 8.7 -24.2 8.5 -23.3 8.3 -22.3 8.7 -23.5
2026-02-15T00:22:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:22:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:22:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.931707
2026-02-15T00:22:17.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:22:17.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:22:17.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:22:17.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:22:17.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:22:17.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:21:48', tmtdew=4.78, humidity=71.48, cloud=0.0, wind=39.68, temperature=8.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:21:48', seeing=1.42, atlas_timestamp='2026-02-14T22:21:39.485', atlas_cloud=1, atlas_rain=1, zp_data=[-0.1822499999999998, -0.10975000000000001, -0.16824999999999868, -0.19350000000000023, -0.15449999999999875, -0.14624999999999844, -0.09800000000000075, -0.08424999999999905, -0.07250000000000156, -0.09299999999999997, -0.20974999999999966, -0.12599999999999945, -0.10200000000000031, -0.12375000000000114, -0.13700000000000045, -0.07500000000000107, -0.03125, -0.08949999999999925, -0.12700000000000067, -0.10325000000000095, -0.09050000000000225, -0.15625, -0.16224999999999845, -0.023249999999999105, -0.016000000000000014, -0.16049999999999898, -0.1092499999999994, -0.11749999999999972, -0.0754999999999999, -0.20399999999999885, -0.0804999999999989, 0.036000000000001364, -0.08325000000000138], zp_timestamp='2026-02-14T22:19:00')
2026-02-15T00:22:17.683 [DEBUG] [Thread-194748] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:22: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-15T00:22:17.778 [DEBUG] [Thread-194751] [transport.py] [_log()] starting thread (client mode): 0xa57c1cc0
2026-02-15T00:22:17.778 [DEBUG] [Thread-194751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:22:17.794 [DEBUG] [Thread-194751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:22:17.794 [INFO] [Thread-194751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:22:17.801 [DEBUG] [Thread-194751] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:22:17.801 [DEBUG] [Thread-194751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:22:17.801 [DEBUG] [Thread-194751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:22:17.801 [DEBUG] [Thread-194751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:22:17.801 [DEBUG] [Thread-194751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:22:17.801 [DEBUG] [Thread-194751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:22:17.802 [DEBUG] [Thread-194751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:22:17.802 [DEBUG] [Thread-194751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:22:17.802 [DEBUG] [Thread-194751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:22:17.802 [DEBUG] [Thread-194751] [transport.py] [_log()] client lang: <none>
2026-02-15T00:22:17.802 [DEBUG] [Thread-194751] [transport.py] [_log()] server lang: <none>
2026-02-15T00:22:17.802 [DEBUG] [Thread-194751] [transport.py] [_log()] kex follows: False
2026-02-15T00:22:17.802 [DEBUG] [Thread-194751] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:22:17.802 [DEBUG] [Thread-194751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:22:17.802 [DEBUG] [Thread-194751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:22:17.802 [DEBUG] [Thread-194751] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:22:17.803 [DEBUG] [Thread-194751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:22:17.803 [DEBUG] [Thread-194751] [transport.py] [_log()] Compression: none
2026-02-15T00:22:17.803 [DEBUG] [Thread-194751] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:22:17.861 [DEBUG] [Thread-194751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:22:17.861 [DEBUG] [Thread-194751] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:22:17.862 [DEBUG] [Thread-194751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:22:17.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:22:17.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:22:17.917 [DEBUG] [Thread-194751] [transport.py] [_log()] userauth is OK
2026-02-15T00:22:17.917 [DEBUG] [Thread-194751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:22:17.917 [DEBUG] [Thread-194751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:22:17.917 [DEBUG] [Thread-194751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:22:17.918 [DEBUG] [Thread-194751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:22:17.936 [INFO] [Thread-194751] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:22:17.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-15T00:22:17.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:22:18.595 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:22:18.596 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:22:18.748 [DEBUG] [Thread-194751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:22:18.748 [DEBUG] [Thread-194751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:22:18.797 [DEBUG] [Thread-194751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:22:18.797 [DEBUG] [Thread-194751] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:22:18.806 [DEBUG] [Thread-194751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:22:18.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:22:18.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-15T00:22:18.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-15T00:22:18.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:22:18.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:22:18.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:22:18.843 [DEBUG] [Thread-194751] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:22:30.695 [DEBUG] [Thread-194753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:22:45.748 [DEBUG] [Thread-194754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:22:48.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:22:48.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:22:48.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-15T00:22:50.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 22, 24), 4.77, 71.53, 0.0, 37.95, 8.31, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:22:50.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:22:24
2026-02-15T00:22:51.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:22:51.478 [DEBUG] [Thread-194755] [transport.py] [_log()] starting thread (client mode): 0xa2d7a020
2026-02-15T00:22:51.478 [DEBUG] [Thread-194755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:22:51.499 [DEBUG] [Thread-194755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:22:51.499 [INFO] [Thread-194755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:22:51.502 [DEBUG] [Thread-194755] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:22:51.502 [DEBUG] [Thread-194755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:22:51.502 [DEBUG] [Thread-194755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:22:51.503 [DEBUG] [Thread-194755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:22:51.503 [DEBUG] [Thread-194755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:22:51.503 [DEBUG] [Thread-194755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:22:51.503 [DEBUG] [Thread-194755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:22:51.503 [DEBUG] [Thread-194755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:22:51.503 [DEBUG] [Thread-194755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:22:51.503 [DEBUG] [Thread-194755] [transport.py] [_log()] client lang: <none>
2026-02-15T00:22:51.503 [DEBUG] [Thread-194755] [transport.py] [_log()] server lang: <none>
2026-02-15T00:22:51.503 [DEBUG] [Thread-194755] [transport.py] [_log()] kex follows: False
2026-02-15T00:22:51.503 [DEBUG] [Thread-194755] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:22:51.503 [DEBUG] [Thread-194755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:22:51.503 [DEBUG] [Thread-194755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:22:51.503 [DEBUG] [Thread-194755] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:22:51.503 [DEBUG] [Thread-194755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:22:51.503 [DEBUG] [Thread-194755] [transport.py] [_log()] Compression: none
2026-02-15T00:22:51.503 [DEBUG] [Thread-194755] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:22:51.521 [DEBUG] [Thread-194755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:22:51.522 [DEBUG] [Thread-194755] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:22:51.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:22:51.523 [DEBUG] [Thread-194755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:22:51.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:22:51.525 [DEBUG] [Thread-194755] [transport.py] [_log()] userauth is OK
2026-02-15T00:22:51.525 [DEBUG] [Thread-194755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:22:51.525 [DEBUG] [Thread-194755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:22:51.526 [DEBUG] [Thread-194755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:22:51.526 [DEBUG] [Thread-194755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:22:51.555 [INFO] [Thread-194755] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:22:51.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:22:52.219 [DEBUG] [Thread-194755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:22:52.219 [DEBUG] [Thread-194755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:22:52.219 [DEBUG] [Thread-194755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:22:52.260 [DEBUG] [Thread-194755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:22:52.260 [DEBUG] [Thread-194755] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:22:52.263 [DEBUG] [Thread-194755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:22:52.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:22:52.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:22:52.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:22:52.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:22:52.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:22:52.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:22:52.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:22:52.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:22:52.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:22:52.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.932054 -999.00   +8.20  23.39     76   +4.30 1 1 1 1 1     0    0 3.41 -32.97 ZNESW 23.4 23.4 156.0 39.7 8.7 -24.2 8.5 -23.2 8.3 -22.4 8.7 -23.6
2026-02-15T00:22:52.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:22:52.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:22:52.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.932054
2026-02-15T00:22:52.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:22:52.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:22:52.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:22:52.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:22:52.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:22:52.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:22:24', tmtdew=4.77, humidity=71.53, cloud=0.0, wind=37.95, temperature=8.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:22:25', seeing=1.43, atlas_timestamp='2026-02-14T22:22:09.466', atlas_cloud=1, atlas_rain=1, zp_data=[-0.1822499999999998, -0.10975000000000001, -0.16824999999999868, -0.19350000000000023, -0.15449999999999875, -0.14624999999999844, -0.09800000000000075, -0.08424999999999905, -0.07250000000000156, -0.09299999999999997, -0.20974999999999966, -0.12599999999999945, -0.10200000000000031, -0.12375000000000114, -0.13700000000000045, -0.07500000000000107, -0.03125, -0.08949999999999925, -0.12700000000000067, -0.10325000000000095, -0.09050000000000225, -0.15625, -0.16224999999999845, -0.023249999999999105, -0.016000000000000014, -0.16049999999999898, -0.1092499999999994, -0.11749999999999972, -0.0754999999999999, -0.20399999999999885, -0.0804999999999989, 0.036000000000001364, -0.08325000000000138], zp_timestamp='2026-02-14T22:19:00')
2026-02-15T00:22:52.287 [DEBUG] [Thread-194755] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:22:52.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-15T00:22:52.388 [DEBUG] [Thread-194758] [transport.py] [_log()] starting thread (client mode): 0xa57d5b70
2026-02-15T00:22:52.388 [DEBUG] [Thread-194758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:22:52.401 [DEBUG] [Thread-194758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:22:52.401 [INFO] [Thread-194758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:22:52.409 [DEBUG] [Thread-194758] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:22:52.409 [DEBUG] [Thread-194758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:22:52.409 [DEBUG] [Thread-194758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:22:52.409 [DEBUG] [Thread-194758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:22:52.409 [DEBUG] [Thread-194758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:22:52.409 [DEBUG] [Thread-194758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:22:52.409 [DEBUG] [Thread-194758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:22:52.409 [DEBUG] [Thread-194758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:22:52.410 [DEBUG] [Thread-194758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:22:52.410 [DEBUG] [Thread-194758] [transport.py] [_log()] client lang: <none>
2026-02-15T00:22:52.410 [DEBUG] [Thread-194758] [transport.py] [_log()] server lang: <none>
2026-02-15T00:22:52.410 [DEBUG] [Thread-194758] [transport.py] [_log()] kex follows: False
2026-02-15T00:22:52.410 [DEBUG] [Thread-194758] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:22:52.410 [DEBUG] [Thread-194758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:22:52.410 [DEBUG] [Thread-194758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:22:52.410 [DEBUG] [Thread-194758] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:22:52.410 [DEBUG] [Thread-194758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:22:52.410 [DEBUG] [Thread-194758] [transport.py] [_log()] Compression: none
2026-02-15T00:22:52.411 [DEBUG] [Thread-194758] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:22:52.468 [DEBUG] [Thread-194758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:22:52.469 [DEBUG] [Thread-194758] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:22:52.469 [DEBUG] [Thread-194758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:22:52.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:22:52.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:22:52.524 [DEBUG] [Thread-194758] [transport.py] [_log()] userauth is OK
2026-02-15T00:22:52.524 [DEBUG] [Thread-194758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:22:52.524 [DEBUG] [Thread-194758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:22:52.524 [DEBUG] [Thread-194758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:22:52.524 [DEBUG] [Thread-194758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:22:52.548 [INFO] [Thread-194758] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:22:52.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-15T00:22:52.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:22:53.344 [DEBUG] [Thread-194758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:22:53.344 [DEBUG] [Thread-194758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:22:53.392 [DEBUG] [Thread-194758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:22:53.392 [DEBUG] [Thread-194758] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:22:53.404 [DEBUG] [Thread-194758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:22:53.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:22:53.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-15T00:22:53.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-15T00:22:53.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:22:53.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:22:53.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:22:53.442 [DEBUG] [Thread-194758] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:23:00.782 [DEBUG] [Thread-194760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:23:08.609 [DEBUG] [Thread-194761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:23:15.835 [DEBUG] [Thread-194762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:23:18.795 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:23:18.796 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:23:23.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:23:23.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:23:23.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-15T00:23:25.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 22, 59), 4.71, 72.1, 0.0, 40.39, 8.31, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:23:25.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:22:59
2026-02-15T00:23:25.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:23:25.851 [DEBUG] [Thread-194763] [transport.py] [_log()] starting thread (client mode): 0xa2d00550
2026-02-15T00:23:25.851 [DEBUG] [Thread-194763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:23:25.871 [DEBUG] [Thread-194763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:23:25.872 [INFO] [Thread-194763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:23:25.875 [DEBUG] [Thread-194763] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:23:25.875 [DEBUG] [Thread-194763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:23:25.875 [DEBUG] [Thread-194763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:23:25.875 [DEBUG] [Thread-194763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:23:25.875 [DEBUG] [Thread-194763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:23:25.875 [DEBUG] [Thread-194763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:23:25.875 [DEBUG] [Thread-194763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:23:25.875 [DEBUG] [Thread-194763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:23:25.875 [DEBUG] [Thread-194763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:23:25.875 [DEBUG] [Thread-194763] [transport.py] [_log()] client lang: <none>
2026-02-15T00:23:25.875 [DEBUG] [Thread-194763] [transport.py] [_log()] server lang: <none>
2026-02-15T00:23:25.875 [DEBUG] [Thread-194763] [transport.py] [_log()] kex follows: False
2026-02-15T00:23:25.875 [DEBUG] [Thread-194763] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:23:25.875 [DEBUG] [Thread-194763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:23:25.875 [DEBUG] [Thread-194763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:23:25.875 [DEBUG] [Thread-194763] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:23:25.875 [DEBUG] [Thread-194763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:23:25.875 [DEBUG] [Thread-194763] [transport.py] [_log()] Compression: none
2026-02-15T00:23:25.875 [DEBUG] [Thread-194763] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:23:25.893 [DEBUG] [Thread-194763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:23:25.894 [DEBUG] [Thread-194763] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:23:25.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:23:25.895 [DEBUG] [Thread-194763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:23:25.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:23:25.897 [DEBUG] [Thread-194763] [transport.py] [_log()] userauth is OK
2026-02-15T00:23:25.897 [DEBUG] [Thread-194763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:23:25.897 [DEBUG] [Thread-194763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:23:25.897 [DEBUG] [Thread-194763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:23:25.897 [DEBUG] [Thread-194763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:23:25.921 [INFO] [Thread-194763] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:23:25.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:23:26.723 [DEBUG] [Thread-194763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:23:26.723 [DEBUG] [Thread-194763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:23:26.724 [DEBUG] [Thread-194763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:23:26.764 [DEBUG] [Thread-194763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:23:26.765 [DEBUG] [Thread-194763] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:23:26.768 [DEBUG] [Thread-194763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:23:26.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:23:26.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:23:26.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:23:26.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:23:26.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:23:26.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:23:26.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:23:26.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:23:26.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:23:26.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.932401 -999.00   +8.20  21.22     76   +4.30 1 1 1 1 1     0    0 3.34 -36.72 ZNESW 21.2 21.2 152.2 34.7 8.7 -24.2 8.5 -23.2 8.3 -22.3 8.6 -23.6
2026-02-15T00:23:26.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:23:26.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:23:26.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.932401
2026-02-15T00:23:26.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:23:26.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:23:26.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:23:26.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:23:26.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:23:26.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:22:59', tmtdew=4.71, humidity=72.1, cloud=0.0, wind=40.39, temperature=8.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:23:00', seeing=1.41, atlas_timestamp='2026-02-14T22:22:39.446', atlas_cloud=1, atlas_rain=1, zp_data=[-0.1822499999999998, -0.10975000000000001, -0.16824999999999868, -0.19350000000000023, -0.15449999999999875, -0.14624999999999844, -0.09800000000000075, -0.08424999999999905, -0.07250000000000156, -0.09299999999999997, -0.20974999999999966, -0.12599999999999945, -0.10200000000000031, -0.12375000000000114, -0.13700000000000045, -0.07500000000000107, -0.03125, -0.08949999999999925, -0.12700000000000067, -0.10325000000000095, -0.09050000000000225, -0.15625, -0.16224999999999845, -0.023249999999999105, -0.016000000000000014, -0.16049999999999898, -0.1092499999999994, -0.11749999999999972, -0.0754999999999999, -0.20399999999999885, -0.0804999999999989, 0.036000000000001364, -0.08325000000000138], zp_timestamp='2026-02-14T22:19:00')
2026-02-15T00:23:26.793 [DEBUG] [Thread-194763] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:23:26.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T00:23:26.886 [DEBUG] [Thread-194766] [transport.py] [_log()] starting thread (client mode): 0xa2d00c10
2026-02-15T00:23:26.887 [DEBUG] [Thread-194766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:23:26.901 [DEBUG] [Thread-194766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:23:26.901 [INFO] [Thread-194766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:23:26.909 [DEBUG] [Thread-194766] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:23:26.909 [DEBUG] [Thread-194766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:23:26.909 [DEBUG] [Thread-194766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:23:26.909 [DEBUG] [Thread-194766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:23:26.909 [DEBUG] [Thread-194766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:23:26.909 [DEBUG] [Thread-194766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:23:26.909 [DEBUG] [Thread-194766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:23:26.909 [DEBUG] [Thread-194766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:23:26.909 [DEBUG] [Thread-194766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:23:26.909 [DEBUG] [Thread-194766] [transport.py] [_log()] client lang: <none>
2026-02-15T00:23:26.909 [DEBUG] [Thread-194766] [transport.py] [_log()] server lang: <none>
2026-02-15T00:23:26.909 [DEBUG] [Thread-194766] [transport.py] [_log()] kex follows: False
2026-02-15T00:23:26.909 [DEBUG] [Thread-194766] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:23:26.910 [DEBUG] [Thread-194766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:23:26.910 [DEBUG] [Thread-194766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:23:26.910 [DEBUG] [Thread-194766] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:23:26.910 [DEBUG] [Thread-194766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:23:26.910 [DEBUG] [Thread-194766] [transport.py] [_log()] Compression: none
2026-02-15T00:23:26.910 [DEBUG] [Thread-194766] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:23:26.972 [DEBUG] [Thread-194766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:23:26.973 [DEBUG] [Thread-194766] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:23:26.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:23:26.974 [DEBUG] [Thread-194766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:23:26.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:23:27.029 [DEBUG] [Thread-194766] [transport.py] [_log()] userauth is OK
2026-02-15T00:23:27.029 [DEBUG] [Thread-194766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:23:27.029 [DEBUG] [Thread-194766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:23:27.029 [DEBUG] [Thread-194766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:23:27.029 [DEBUG] [Thread-194766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:23:27.048 [INFO] [Thread-194766] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:23:27.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-15T00:23:27.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:23:27.809 [DEBUG] [Thread-194766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:23:27.810 [DEBUG] [Thread-194766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:23:27.857 [DEBUG] [Thread-194766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:23:27.857 [DEBUG] [Thread-194766] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:23:27.865 [DEBUG] [Thread-194766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:23:27.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:23:27.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:23:27.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-15T00:23:27.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:23:27.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:23:27.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:23:27.899 [DEBUG] [Thread-194766] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:23:30.871 [DEBUG] [Thread-194768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:23:45.925 [DEBUG] [Thread-194769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:23:57.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:23:57.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:23:57.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-15T00:23:59.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 23, 35), 4.9, 71.26, 0.0, 43.86, 8.59, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:23:59.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:23:35
2026-02-15T00:24:00.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:24:00.422 [DEBUG] [Thread-194770] [transport.py] [_log()] starting thread (client mode): 0xa57d6500
2026-02-15T00:24:00.423 [DEBUG] [Thread-194770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:24:00.442 [DEBUG] [Thread-194770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:24:00.442 [INFO] [Thread-194770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:24:00.446 [DEBUG] [Thread-194770] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:24:00.446 [DEBUG] [Thread-194770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:24:00.446 [DEBUG] [Thread-194770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:24:00.446 [DEBUG] [Thread-194770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:24:00.446 [DEBUG] [Thread-194770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:24:00.447 [DEBUG] [Thread-194770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:24:00.447 [DEBUG] [Thread-194770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:24:00.447 [DEBUG] [Thread-194770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:24:00.447 [DEBUG] [Thread-194770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:24:00.447 [DEBUG] [Thread-194770] [transport.py] [_log()] client lang: <none>
2026-02-15T00:24:00.447 [DEBUG] [Thread-194770] [transport.py] [_log()] server lang: <none>
2026-02-15T00:24:00.447 [DEBUG] [Thread-194770] [transport.py] [_log()] kex follows: False
2026-02-15T00:24:00.447 [DEBUG] [Thread-194770] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:24:00.447 [DEBUG] [Thread-194770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:24:00.447 [DEBUG] [Thread-194770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:24:00.447 [DEBUG] [Thread-194770] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:24:00.447 [DEBUG] [Thread-194770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:24:00.447 [DEBUG] [Thread-194770] [transport.py] [_log()] Compression: none
2026-02-15T00:24:00.447 [DEBUG] [Thread-194770] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:24:00.466 [DEBUG] [Thread-194770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:24:00.466 [DEBUG] [Thread-194770] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:24:00.467 [DEBUG] [Thread-194770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:24:00.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:24:00.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:24:00.469 [DEBUG] [Thread-194770] [transport.py] [_log()] userauth is OK
2026-02-15T00:24:00.469 [DEBUG] [Thread-194770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:24:00.469 [DEBUG] [Thread-194770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:24:00.469 [DEBUG] [Thread-194770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:24:00.469 [DEBUG] [Thread-194770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:24:00.487 [INFO] [Thread-194770] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:24:00.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:24:00.962 [DEBUG] [Thread-194772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:24:01.133 [DEBUG] [Thread-194770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:24:01.133 [DEBUG] [Thread-194770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:24:01.134 [DEBUG] [Thread-194770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:24:01.174 [DEBUG] [Thread-194770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:24:01.175 [DEBUG] [Thread-194770] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:24:01.178 [DEBUG] [Thread-194770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:24:01.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:24:01.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:24:01.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:24:01.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:24:01.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:24:01.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:24:01.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:24:01.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:24:01.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:24:01.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.932749 -999.00   +8.20  31.04     76   +4.40 1 1 2 1 1     0    0 3.37 -34.10 ZNESW 31.0 31.0 154.2 44.4 8.7 -24.2 8.5 -23.1 8.3 -22.3 8.7 -23.5
2026-02-15T00:24:01.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:24:01.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:24:01.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.932749
2026-02-15T00:24:01.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:24:01.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:24:01.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:24:01.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:24:01.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:24:01.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:23:35', tmtdew=4.9, humidity=71.26, cloud=0.0, wind=43.86, temperature=8.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:23:35', seeing=1.41, atlas_timestamp='2026-02-14T22:23:09.514', atlas_cloud=1, atlas_rain=1, zp_data=[-0.1822499999999998, -0.10975000000000001, -0.16824999999999868, -0.19350000000000023, -0.15449999999999875, -0.14624999999999844, -0.09800000000000075, -0.08424999999999905, -0.07250000000000156, -0.09299999999999997, -0.20974999999999966, -0.12599999999999945, -0.10200000000000031, -0.12375000000000114, -0.13700000000000045, -0.07500000000000107, -0.03125, -0.08949999999999925, -0.12700000000000067, -0.10325000000000095, -0.09050000000000225, -0.15625, -0.16224999999999845, -0.023249999999999105, -0.016000000000000014, -0.16049999999999898, -0.1092499999999994, -0.11749999999999972, -0.0754999999999999, -0.20399999999999885, -0.0804999999999989, 0.036000000000001364, -0.08325000000000138], zp_timestamp='2026-02-14T22:22:00')
2026-02-15T00:24:01.206 [DEBUG] [Thread-194770] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:24:01.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-15T00:24:01.301 [DEBUG] [Thread-194774] [transport.py] [_log()] starting thread (client mode): 0xa57d66e0
2026-02-15T00:24:01.301 [DEBUG] [Thread-194774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:24:01.316 [DEBUG] [Thread-194774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:24:01.316 [INFO] [Thread-194774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:24:01.323 [DEBUG] [Thread-194774] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:24:01.324 [DEBUG] [Thread-194774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:24:01.324 [DEBUG] [Thread-194774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:24:01.324 [DEBUG] [Thread-194774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:24:01.324 [DEBUG] [Thread-194774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:24:01.324 [DEBUG] [Thread-194774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:24:01.324 [DEBUG] [Thread-194774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:24:01.324 [DEBUG] [Thread-194774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:24:01.324 [DEBUG] [Thread-194774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:24:01.324 [DEBUG] [Thread-194774] [transport.py] [_log()] client lang: <none>
2026-02-15T00:24:01.325 [DEBUG] [Thread-194774] [transport.py] [_log()] server lang: <none>
2026-02-15T00:24:01.325 [DEBUG] [Thread-194774] [transport.py] [_log()] kex follows: False
2026-02-15T00:24:01.325 [DEBUG] [Thread-194774] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:24:01.325 [DEBUG] [Thread-194774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:24:01.325 [DEBUG] [Thread-194774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:24:01.325 [DEBUG] [Thread-194774] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:24:01.326 [DEBUG] [Thread-194774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:24:01.326 [DEBUG] [Thread-194774] [transport.py] [_log()] Compression: none
2026-02-15T00:24:01.326 [DEBUG] [Thread-194774] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:24:01.380 [DEBUG] [Thread-194774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:24:01.381 [DEBUG] [Thread-194774] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:24:01.381 [DEBUG] [Thread-194774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:24:01.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:24:01.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:24:01.437 [DEBUG] [Thread-194774] [transport.py] [_log()] userauth is OK
2026-02-15T00:24:01.437 [DEBUG] [Thread-194774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:24:01.437 [DEBUG] [Thread-194774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:24:01.437 [DEBUG] [Thread-194774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:24:01.438 [DEBUG] [Thread-194774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:24:01.455 [INFO] [Thread-194774] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:24:01.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-15T00:24:01.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:24:02.282 [DEBUG] [Thread-194774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:24:02.283 [DEBUG] [Thread-194774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:24:02.330 [DEBUG] [Thread-194774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:24:02.330 [DEBUG] [Thread-194774] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:24:02.340 [DEBUG] [Thread-194774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:24:02.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:24:02.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:24:02.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:24:02.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:24:02.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:24:02.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:24:02.376 [DEBUG] [Thread-194774] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:24:08.679 [DEBUG] [Thread-194776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:24:16.002 [DEBUG] [Thread-194777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:24:18.997 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:24:18.998 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:24:31.055 [DEBUG] [Thread-194778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:24:32.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:24:32.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:24:32.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-15T00:24:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 24, 10), 4.69, 72.2, 0.0, 42.88, 8.31, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:24:34.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:24:10
2026-02-15T00:24:34.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:24:34.794 [DEBUG] [Thread-194779] [transport.py] [_log()] starting thread (client mode): 0xa2d95420
2026-02-15T00:24:34.794 [DEBUG] [Thread-194779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:24:34.815 [DEBUG] [Thread-194779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:24:34.815 [INFO] [Thread-194779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:24:34.819 [DEBUG] [Thread-194779] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:24:34.819 [DEBUG] [Thread-194779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:24:34.819 [DEBUG] [Thread-194779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:24:34.819 [DEBUG] [Thread-194779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:24:34.820 [DEBUG] [Thread-194779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:24:34.820 [DEBUG] [Thread-194779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:24:34.820 [DEBUG] [Thread-194779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:24:34.820 [DEBUG] [Thread-194779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:24:34.820 [DEBUG] [Thread-194779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:24:34.820 [DEBUG] [Thread-194779] [transport.py] [_log()] client lang: <none>
2026-02-15T00:24:34.820 [DEBUG] [Thread-194779] [transport.py] [_log()] server lang: <none>
2026-02-15T00:24:34.820 [DEBUG] [Thread-194779] [transport.py] [_log()] kex follows: False
2026-02-15T00:24:34.820 [DEBUG] [Thread-194779] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:24:34.820 [DEBUG] [Thread-194779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:24:34.820 [DEBUG] [Thread-194779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:24:34.820 [DEBUG] [Thread-194779] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:24:34.820 [DEBUG] [Thread-194779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:24:34.820 [DEBUG] [Thread-194779] [transport.py] [_log()] Compression: none
2026-02-15T00:24:34.820 [DEBUG] [Thread-194779] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:24:34.830 [DEBUG] [Thread-194779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:24:34.830 [DEBUG] [Thread-194779] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:24:34.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:24:34.831 [DEBUG] [Thread-194779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:24:34.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:24:34.833 [DEBUG] [Thread-194779] [transport.py] [_log()] userauth is OK
2026-02-15T00:24:34.833 [DEBUG] [Thread-194779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:24:34.834 [DEBUG] [Thread-194779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:24:34.834 [DEBUG] [Thread-194779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:24:34.834 [DEBUG] [Thread-194779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:24:34.851 [INFO] [Thread-194779] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:24:34.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:24:35.481 [DEBUG] [Thread-194779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:24:35.482 [DEBUG] [Thread-194779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:24:35.482 [DEBUG] [Thread-194779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:24:35.522 [DEBUG] [Thread-194779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:24:35.523 [DEBUG] [Thread-194779] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:24:35.527 [DEBUG] [Thread-194779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:24:35.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:24:35.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:24:35.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:24:35.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:24:35.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:24:35.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:24:35.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:24:35.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:24:35.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:24:35.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.933096 -999.00   +8.20  36.06     77   +4.40 1 1 2 1 1     0    0 3.23 -35.74 ZNESW 36.1 36.1 150.6 46.4 8.7 -24.1 8.5 -23.2 8.3 -22.3 8.7 -23.5
2026-02-15T00:24:35.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:24:35.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:24:35.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.933096
2026-02-15T00:24:35.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:24:35.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:24:35.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:24:35.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:24:35.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:24:35.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:24:10', tmtdew=4.69, humidity=72.2, cloud=0.0, wind=42.88, temperature=8.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:24:11', seeing=1.39, atlas_timestamp='2026-02-14T22:23:39.494', atlas_cloud=1, atlas_rain=1, zp_data=[-0.1822499999999998, -0.10975000000000001, -0.16824999999999868, -0.19350000000000023, -0.15449999999999875, -0.14624999999999844, -0.09800000000000075, -0.08424999999999905, -0.07250000000000156, -0.09299999999999997, -0.20974999999999966, -0.12599999999999945, -0.10200000000000031, -0.12375000000000114, -0.13700000000000045, -0.07500000000000107, -0.03125, -0.08949999999999925, -0.12700000000000067, -0.10325000000000095, -0.09050000000000225, -0.15625, -0.16224999999999845, -0.023249999999999105, -0.016000000000000014, -0.16049999999999898, -0.1092499999999994, -0.11749999999999972, -0.0754999999999999, -0.20399999999999885, -0.0804999999999989, 0.036000000000001364, -0.08325000000000138], zp_timestamp='2026-02-14T22:22:00')
2026-02-15T00:24:35.551 [DEBUG] [Thread-194779] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:24:35.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-15T00:24:35.646 [DEBUG] [Thread-194782] [transport.py] [_log()] starting thread (client mode): 0xa2d947c0
2026-02-15T00:24:35.647 [DEBUG] [Thread-194782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:24:35.661 [DEBUG] [Thread-194782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:24:35.661 [INFO] [Thread-194782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:24:35.669 [DEBUG] [Thread-194782] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:24:35.669 [DEBUG] [Thread-194782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:24:35.669 [DEBUG] [Thread-194782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:24:35.669 [DEBUG] [Thread-194782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:24:35.669 [DEBUG] [Thread-194782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:24:35.669 [DEBUG] [Thread-194782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:24:35.669 [DEBUG] [Thread-194782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:24:35.669 [DEBUG] [Thread-194782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:24:35.669 [DEBUG] [Thread-194782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:24:35.669 [DEBUG] [Thread-194782] [transport.py] [_log()] client lang: <none>
2026-02-15T00:24:35.669 [DEBUG] [Thread-194782] [transport.py] [_log()] server lang: <none>
2026-02-15T00:24:35.669 [DEBUG] [Thread-194782] [transport.py] [_log()] kex follows: False
2026-02-15T00:24:35.669 [DEBUG] [Thread-194782] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:24:35.669 [DEBUG] [Thread-194782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:24:35.669 [DEBUG] [Thread-194782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:24:35.669 [DEBUG] [Thread-194782] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:24:35.669 [DEBUG] [Thread-194782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:24:35.669 [DEBUG] [Thread-194782] [transport.py] [_log()] Compression: none
2026-02-15T00:24:35.669 [DEBUG] [Thread-194782] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:24:35.729 [DEBUG] [Thread-194782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:24:35.729 [DEBUG] [Thread-194782] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:24:35.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:24:35.731 [DEBUG] [Thread-194782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:24:35.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:24:35.789 [DEBUG] [Thread-194782] [transport.py] [_log()] userauth is OK
2026-02-15T00:24:35.790 [DEBUG] [Thread-194782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:24:35.790 [DEBUG] [Thread-194782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:24:35.790 [DEBUG] [Thread-194782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:24:35.790 [DEBUG] [Thread-194782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:24:35.808 [INFO] [Thread-194782] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:24:35.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-15T00:24:35.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:24:36.626 [DEBUG] [Thread-194782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:24:36.626 [DEBUG] [Thread-194782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:24:36.673 [DEBUG] [Thread-194782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:24:36.674 [DEBUG] [Thread-194782] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:24:36.683 [DEBUG] [Thread-194782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:24:36.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:24:36.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-15T00:24:36.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-15T00:24:36.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:24:36.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:24:36.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:24:36.720 [DEBUG] [Thread-194782] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:24:46.087 [DEBUG] [Thread-194784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:25:01.136 [DEBUG] [Thread-194785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:25:06.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:25:06.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:25:06.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:25:08.757 [DEBUG] [Thread-194786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:25:09.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 24, 46), 4.67, 72.78, 0.0, 39.19, 8.29, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:25:09.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:24:46
2026-02-15T00:25:09.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:25:09.597 [DEBUG] [Thread-194787] [transport.py] [_log()] starting thread (client mode): 0xa2d96c20
2026-02-15T00:25:09.597 [DEBUG] [Thread-194787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:25:09.618 [DEBUG] [Thread-194787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:25:09.619 [INFO] [Thread-194787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:25:09.622 [DEBUG] [Thread-194787] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:25:09.622 [DEBUG] [Thread-194787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:25:09.622 [DEBUG] [Thread-194787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:25:09.622 [DEBUG] [Thread-194787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:25:09.622 [DEBUG] [Thread-194787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:25:09.622 [DEBUG] [Thread-194787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:25:09.622 [DEBUG] [Thread-194787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:25:09.622 [DEBUG] [Thread-194787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:25:09.622 [DEBUG] [Thread-194787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:25:09.622 [DEBUG] [Thread-194787] [transport.py] [_log()] client lang: <none>
2026-02-15T00:25:09.622 [DEBUG] [Thread-194787] [transport.py] [_log()] server lang: <none>
2026-02-15T00:25:09.622 [DEBUG] [Thread-194787] [transport.py] [_log()] kex follows: False
2026-02-15T00:25:09.622 [DEBUG] [Thread-194787] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:25:09.622 [DEBUG] [Thread-194787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:25:09.623 [DEBUG] [Thread-194787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:25:09.623 [DEBUG] [Thread-194787] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:25:09.623 [DEBUG] [Thread-194787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:25:09.623 [DEBUG] [Thread-194787] [transport.py] [_log()] Compression: none
2026-02-15T00:25:09.623 [DEBUG] [Thread-194787] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:25:09.640 [DEBUG] [Thread-194787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:25:09.641 [DEBUG] [Thread-194787] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:25:09.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:25:09.642 [DEBUG] [Thread-194787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:25:09.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:25:09.644 [DEBUG] [Thread-194787] [transport.py] [_log()] userauth is OK
2026-02-15T00:25:09.644 [DEBUG] [Thread-194787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:25:09.644 [DEBUG] [Thread-194787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:25:09.644 [DEBUG] [Thread-194787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:25:09.644 [DEBUG] [Thread-194787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:25:09.668 [INFO] [Thread-194787] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:25:09.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:25:16.170 [DEBUG] [Thread-194789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:25:19.197 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:25:19.198 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:25:21.594 [DEBUG] [Thread-194787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:25:21.594 [DEBUG] [Thread-194787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:25:21.595 [DEBUG] [Thread-194787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:25:21.635 [DEBUG] [Thread-194787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:25:21.636 [DEBUG] [Thread-194787] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:25:21.639 [DEBUG] [Thread-194787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:25:21.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:25:21.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:25:21.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:25:21.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:25:21.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:25:21.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:25:21.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:25:21.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:25:21.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:25:21.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.933790 -999.00   +8.20  30.38     77   +4.40 1 1 2 1 1     0    0 3.04 -43.10 ZNESW 30.4 30.4 144.4 36.8 8.7 -24.1 8.5 -23.1 8.3 -22.3 8.6 -23.5
2026-02-15T00:25:21.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:25:21.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:25:21.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.933790
2026-02-15T00:25:21.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:25:21.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:25:21.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:25:21.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:25:21.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:25:21.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:24:46', tmtdew=4.67, humidity=72.78, cloud=0.0, wind=39.19, temperature=8.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:24:46', seeing=1.62, atlas_timestamp='2026-02-14T22:24:39.456', atlas_cloud=1, atlas_rain=1, zp_data=[-0.1822499999999998, -0.10975000000000001, -0.16824999999999868, -0.19350000000000023, -0.15449999999999875, -0.14624999999999844, -0.09800000000000075, -0.08424999999999905, -0.07250000000000156, -0.09299999999999997, -0.20974999999999966, -0.12599999999999945, -0.10200000000000031, -0.12375000000000114, -0.13700000000000045, -0.07500000000000107, -0.03125, -0.08949999999999925, -0.12700000000000067, -0.10325000000000095, -0.09050000000000225, -0.15625, -0.16224999999999845, -0.023249999999999105, -0.016000000000000014, -0.16049999999999898, -0.1092499999999994, -0.11749999999999972, -0.0754999999999999, -0.20399999999999885, -0.0804999999999989, 0.036000000000001364, -0.08325000000000138], zp_timestamp='2026-02-14T22:22:00')
2026-02-15T00:25:21.815 [DEBUG] [Thread-194787] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:25:21.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-15T00:25:21.912 [DEBUG] [Thread-194791] [transport.py] [_log()] starting thread (client mode): 0xa57710c0
2026-02-15T00:25:21.912 [DEBUG] [Thread-194791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:25:21.926 [DEBUG] [Thread-194791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:25:21.926 [INFO] [Thread-194791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:25:21.943 [DEBUG] [Thread-194791] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:25:21.943 [DEBUG] [Thread-194791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:25:21.943 [DEBUG] [Thread-194791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:25:21.943 [DEBUG] [Thread-194791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:25:21.943 [DEBUG] [Thread-194791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:25:21.943 [DEBUG] [Thread-194791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:25:21.943 [DEBUG] [Thread-194791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:25:21.943 [DEBUG] [Thread-194791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:25:21.943 [DEBUG] [Thread-194791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:25:21.944 [DEBUG] [Thread-194791] [transport.py] [_log()] client lang: <none>
2026-02-15T00:25:21.944 [DEBUG] [Thread-194791] [transport.py] [_log()] server lang: <none>
2026-02-15T00:25:21.944 [DEBUG] [Thread-194791] [transport.py] [_log()] kex follows: False
2026-02-15T00:25:21.944 [DEBUG] [Thread-194791] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:25:21.944 [DEBUG] [Thread-194791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:25:21.944 [DEBUG] [Thread-194791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:25:21.944 [DEBUG] [Thread-194791] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:25:21.944 [DEBUG] [Thread-194791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:25:21.944 [DEBUG] [Thread-194791] [transport.py] [_log()] Compression: none
2026-02-15T00:25:21.944 [DEBUG] [Thread-194791] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:25:21.993 [DEBUG] [Thread-194791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:25:21.993 [DEBUG] [Thread-194791] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:25:21.994 [DEBUG] [Thread-194791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:25:21.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:25:21.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:25:22.048 [DEBUG] [Thread-194791] [transport.py] [_log()] userauth is OK
2026-02-15T00:25:22.048 [DEBUG] [Thread-194791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:25:22.048 [DEBUG] [Thread-194791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:25:22.049 [DEBUG] [Thread-194791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:25:22.049 [DEBUG] [Thread-194791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:25:22.067 [INFO] [Thread-194791] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:25:22.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-15T00:25:22.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:25:22.883 [DEBUG] [Thread-194791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:25:22.883 [DEBUG] [Thread-194791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:25:22.932 [DEBUG] [Thread-194791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:25:22.932 [DEBUG] [Thread-194791] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:25:22.941 [DEBUG] [Thread-194791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:25:22.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:25:22.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-15T00:25: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') -> 00000000
2026-02-15T00:25:22.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:25:22.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:25:22.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:25:22.974 [DEBUG] [Thread-194791] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:25:31.206 [DEBUG] [Thread-194793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:25:46.256 [DEBUG] [Thread-194794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:25:52.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:25:52.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:25:53.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-15T00:25:55.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 25, 21), 4.65, 72.86, 0.0, 36.86, 8.29, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:25:55.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:25:21
2026-02-15T00:25:55.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:25:55.986 [DEBUG] [Thread-194795] [transport.py] [_log()] starting thread (client mode): 0xa2d976d0
2026-02-15T00:25:55.986 [DEBUG] [Thread-194795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:25:56.005 [DEBUG] [Thread-194795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:25:56.005 [INFO] [Thread-194795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:25:56.008 [DEBUG] [Thread-194795] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:25:56.009 [DEBUG] [Thread-194795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:25:56.009 [DEBUG] [Thread-194795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:25:56.009 [DEBUG] [Thread-194795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:25:56.009 [DEBUG] [Thread-194795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:25:56.009 [DEBUG] [Thread-194795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:25:56.009 [DEBUG] [Thread-194795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:25:56.009 [DEBUG] [Thread-194795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:25:56.010 [DEBUG] [Thread-194795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:25:56.010 [DEBUG] [Thread-194795] [transport.py] [_log()] client lang: <none>
2026-02-15T00:25:56.010 [DEBUG] [Thread-194795] [transport.py] [_log()] server lang: <none>
2026-02-15T00:25:56.010 [DEBUG] [Thread-194795] [transport.py] [_log()] kex follows: False
2026-02-15T00:25:56.010 [DEBUG] [Thread-194795] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:25:56.010 [DEBUG] [Thread-194795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:25:56.010 [DEBUG] [Thread-194795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:25:56.010 [DEBUG] [Thread-194795] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:25:56.010 [DEBUG] [Thread-194795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:25:56.010 [DEBUG] [Thread-194795] [transport.py] [_log()] Compression: none
2026-02-15T00:25:56.010 [DEBUG] [Thread-194795] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:25:56.027 [DEBUG] [Thread-194795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:25:56.028 [DEBUG] [Thread-194795] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:25:56.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:25:56.029 [DEBUG] [Thread-194795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:25:56.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:25:56.032 [DEBUG] [Thread-194795] [transport.py] [_log()] userauth is OK
2026-02-15T00:25:56.032 [DEBUG] [Thread-194795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:25:56.033 [DEBUG] [Thread-194795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:25:56.033 [DEBUG] [Thread-194795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:25:56.033 [DEBUG] [Thread-194795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:25:56.050 [INFO] [Thread-194795] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:25:56.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:25:56.629 [DEBUG] [Thread-194795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:25:56.629 [DEBUG] [Thread-194795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:25:56.629 [DEBUG] [Thread-194795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:25:56.670 [DEBUG] [Thread-194795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:25:56.671 [DEBUG] [Thread-194795] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:25:56.674 [DEBUG] [Thread-194795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:25:56.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:25:56.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:25:56.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:25:56.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:25:56.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:25:56.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:25:56.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:25:56.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:25:56.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:25:56.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.934137 -999.00   +8.20  28.14     77   +4.40 1 1 1 1 1     0    0 2.98 -43.45 ZNESW 28.1 28.1 164.0 48.2 8.7 -24.2 8.5 -23.1 8.3 -22.3 8.6 -23.2
2026-02-15T00:25:56.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:25:56.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:25:56.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.934137
2026-02-15T00:25:56.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:25:56.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:25:56.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:25:56.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:25:56.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:25:56.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:25:21', tmtdew=4.65, humidity=72.86, cloud=0.0, wind=36.86, temperature=8.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:25:22', seeing=1.64, atlas_timestamp='2026-02-14T22:25:09.437', atlas_cloud=1, atlas_rain=1, zp_data=[-0.1822499999999998, -0.10975000000000001, -0.16824999999999868, -0.19350000000000023, -0.15449999999999875, -0.14624999999999844, -0.09800000000000075, -0.08424999999999905, -0.07250000000000156, -0.09299999999999997, -0.20974999999999966, -0.12599999999999945, -0.10200000000000031, -0.12375000000000114, -0.13700000000000045, -0.07500000000000107, -0.03125, -0.08949999999999925, -0.12700000000000067, -0.10325000000000095, -0.09050000000000225, -0.15625, -0.16224999999999845, -0.023249999999999105, -0.016000000000000014, -0.16049999999999898, -0.1092499999999994, -0.11749999999999972, -0.0754999999999999, -0.20399999999999885, -0.0804999999999989, 0.036000000000001364, -0.08325000000000138], zp_timestamp='2026-02-14T22:22:00')
2026-02-15T00:25:56.700 [DEBUG] [Thread-194795] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:25:56.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-15T00:25:56.795 [DEBUG] [Thread-194798] [transport.py] [_log()] starting thread (client mode): 0xa2d96b30
2026-02-15T00:25:56.796 [DEBUG] [Thread-194798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:25:56.811 [DEBUG] [Thread-194798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:25:56.811 [INFO] [Thread-194798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:25:56.819 [DEBUG] [Thread-194798] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:25:56.819 [DEBUG] [Thread-194798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:25:56.819 [DEBUG] [Thread-194798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:25:56.820 [DEBUG] [Thread-194798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:25:56.820 [DEBUG] [Thread-194798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:25:56.820 [DEBUG] [Thread-194798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:25:56.820 [DEBUG] [Thread-194798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:25:56.820 [DEBUG] [Thread-194798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:25:56.820 [DEBUG] [Thread-194798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:25:56.820 [DEBUG] [Thread-194798] [transport.py] [_log()] client lang: <none>
2026-02-15T00:25:56.820 [DEBUG] [Thread-194798] [transport.py] [_log()] server lang: <none>
2026-02-15T00:25:56.820 [DEBUG] [Thread-194798] [transport.py] [_log()] kex follows: False
2026-02-15T00:25:56.820 [DEBUG] [Thread-194798] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:25:56.820 [DEBUG] [Thread-194798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:25:56.820 [DEBUG] [Thread-194798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:25:56.820 [DEBUG] [Thread-194798] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:25:56.821 [DEBUG] [Thread-194798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:25:56.821 [DEBUG] [Thread-194798] [transport.py] [_log()] Compression: none
2026-02-15T00:25:56.821 [DEBUG] [Thread-194798] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:25:56.877 [DEBUG] [Thread-194798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:25:56.878 [DEBUG] [Thread-194798] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:25:56.878 [DEBUG] [Thread-194798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:25:56.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:25:56.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:25:56.932 [DEBUG] [Thread-194798] [transport.py] [_log()] userauth is OK
2026-02-15T00:25:56.933 [DEBUG] [Thread-194798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:25:56.933 [DEBUG] [Thread-194798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:25:56.933 [DEBUG] [Thread-194798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:25:56.933 [DEBUG] [Thread-194798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:25:56.955 [INFO] [Thread-194798] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:25:56.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-15T00:25:56.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:25:57.748 [DEBUG] [Thread-194798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:25:57.748 [DEBUG] [Thread-194798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:25:57.796 [DEBUG] [Thread-194798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:25:57.796 [DEBUG] [Thread-194798] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:25:57.805 [DEBUG] [Thread-194798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:25:57.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:25: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-15T00:25: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-15T00:25:57.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:25:57.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:25:57.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:25:57.841 [DEBUG] [Thread-194798] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:26:01.291 [DEBUG] [Thread-194800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:26:08.829 [DEBUG] [Thread-194801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:26:16.347 [DEBUG] [Thread-194802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:26:19.398 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:26:19.399 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:26:27.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:26:27.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:26: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-15T00:26:29.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 25, 57), 4.6, 72.86, 0.0, 44.22, 8.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:26:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:25:57
2026-02-15T00:26:30.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:26:30.285 [DEBUG] [Thread-194803] [transport.py] [_log()] starting thread (client mode): 0xa2d947c0
2026-02-15T00:26:30.286 [DEBUG] [Thread-194803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:26:30.306 [DEBUG] [Thread-194803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:26:30.306 [INFO] [Thread-194803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:26:30.309 [DEBUG] [Thread-194803] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:26:30.310 [DEBUG] [Thread-194803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:26:30.310 [DEBUG] [Thread-194803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:26:30.310 [DEBUG] [Thread-194803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:26:30.310 [DEBUG] [Thread-194803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:26:30.310 [DEBUG] [Thread-194803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:26:30.310 [DEBUG] [Thread-194803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:26:30.310 [DEBUG] [Thread-194803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:26:30.310 [DEBUG] [Thread-194803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:26:30.310 [DEBUG] [Thread-194803] [transport.py] [_log()] client lang: <none>
2026-02-15T00:26:30.310 [DEBUG] [Thread-194803] [transport.py] [_log()] server lang: <none>
2026-02-15T00:26:30.310 [DEBUG] [Thread-194803] [transport.py] [_log()] kex follows: False
2026-02-15T00:26:30.310 [DEBUG] [Thread-194803] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:26:30.310 [DEBUG] [Thread-194803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:26:30.311 [DEBUG] [Thread-194803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:26:30.311 [DEBUG] [Thread-194803] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:26:30.311 [DEBUG] [Thread-194803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:26:30.311 [DEBUG] [Thread-194803] [transport.py] [_log()] Compression: none
2026-02-15T00:26:30.311 [DEBUG] [Thread-194803] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:26:30.329 [DEBUG] [Thread-194803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:26:30.329 [DEBUG] [Thread-194803] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:26:30.330 [DEBUG] [Thread-194803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:26:30.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:26:30.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:26:30.332 [DEBUG] [Thread-194803] [transport.py] [_log()] userauth is OK
2026-02-15T00:26:30.332 [DEBUG] [Thread-194803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:26:30.332 [DEBUG] [Thread-194803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:26:30.332 [DEBUG] [Thread-194803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:26:30.333 [DEBUG] [Thread-194803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:26:30.357 [INFO] [Thread-194803] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:26:30.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:26:31.019 [DEBUG] [Thread-194803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:26:31.020 [DEBUG] [Thread-194803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:26:31.020 [DEBUG] [Thread-194803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:26:31.060 [DEBUG] [Thread-194803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:26:31.061 [DEBUG] [Thread-194803] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:26:31.064 [DEBUG] [Thread-194803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:26:31.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:26:31.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:26:31.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:26:31.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:26:31.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:26:31.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:26:31.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:26:31.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:26:31.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:26:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.934484 -999.00   +8.20  33.21     77   +4.40 1 1 2 1 1     0    0 2.89 -44.21 ZNESW 33.2 33.2 150.2 45.6 8.7 -24.2 8.5 -23.0 8.3 -22.3 8.6 -23.6
2026-02-15T00:26:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:26:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:26:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.934484
2026-02-15T00:26:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:26:31.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:26:31.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:26:31.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:26:31.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:26:31.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:25:57', tmtdew=4.6, humidity=72.86, cloud=0.0, wind=44.22, temperature=8.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:25:57', seeing=1.6, atlas_timestamp='2026-02-14T22:25:39.418', atlas_cloud=1, atlas_rain=1, zp_data=[-0.1822499999999998, -0.10975000000000001, -0.16824999999999868, -0.19350000000000023, -0.15449999999999875, -0.14624999999999844, -0.09800000000000075, -0.08424999999999905, -0.07250000000000156, -0.09299999999999997, -0.20974999999999966, -0.12599999999999945, -0.10200000000000031, -0.12375000000000114, -0.13700000000000045, -0.07500000000000107, -0.03125, -0.08949999999999925, -0.12700000000000067, -0.10325000000000095, -0.09050000000000225, -0.15625, -0.16224999999999845, -0.023249999999999105, -0.016000000000000014, -0.16049999999999898, -0.1092499999999994, -0.11749999999999972, -0.0754999999999999, -0.20399999999999885, -0.0804999999999989, 0.036000000000001364, -0.08325000000000138], zp_timestamp='2026-02-14T22:22:00')
2026-02-15T00:26:31.093 [DEBUG] [Thread-194803] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:26:31.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T00:26:31.189 [DEBUG] [Thread-194806] [transport.py] [_log()] starting thread (client mode): 0xa57d5c30
2026-02-15T00:26:31.189 [DEBUG] [Thread-194806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:26:31.204 [DEBUG] [Thread-194806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:26:31.204 [INFO] [Thread-194806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:26:31.212 [DEBUG] [Thread-194806] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:26:31.212 [DEBUG] [Thread-194806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:26:31.212 [DEBUG] [Thread-194806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:26:31.212 [DEBUG] [Thread-194806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:26:31.212 [DEBUG] [Thread-194806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:26:31.212 [DEBUG] [Thread-194806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:26:31.213 [DEBUG] [Thread-194806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:26:31.213 [DEBUG] [Thread-194806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:26:31.213 [DEBUG] [Thread-194806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:26:31.213 [DEBUG] [Thread-194806] [transport.py] [_log()] client lang: <none>
2026-02-15T00:26:31.213 [DEBUG] [Thread-194806] [transport.py] [_log()] server lang: <none>
2026-02-15T00:26:31.213 [DEBUG] [Thread-194806] [transport.py] [_log()] kex follows: False
2026-02-15T00:26:31.213 [DEBUG] [Thread-194806] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:26:31.213 [DEBUG] [Thread-194806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:26:31.214 [DEBUG] [Thread-194806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:26:31.214 [DEBUG] [Thread-194806] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:26:31.214 [DEBUG] [Thread-194806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:26:31.214 [DEBUG] [Thread-194806] [transport.py] [_log()] Compression: none
2026-02-15T00:26:31.214 [DEBUG] [Thread-194806] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:26:31.269 [DEBUG] [Thread-194806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:26:31.270 [DEBUG] [Thread-194806] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:26:31.270 [DEBUG] [Thread-194806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:26:31.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:26:31.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:26:31.325 [DEBUG] [Thread-194806] [transport.py] [_log()] userauth is OK
2026-02-15T00:26:31.325 [DEBUG] [Thread-194806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:26:31.325 [DEBUG] [Thread-194806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:26:31.325 [DEBUG] [Thread-194806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:26:31.325 [DEBUG] [Thread-194806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:26:31.344 [INFO] [Thread-194806] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:26:31.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-15T00:26:31.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:26:31.381 [DEBUG] [Thread-194808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:26:32.226 [DEBUG] [Thread-194806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:26:32.226 [DEBUG] [Thread-194806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:26:32.274 [DEBUG] [Thread-194806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:26:32.275 [DEBUG] [Thread-194806] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:26:32.284 [DEBUG] [Thread-194806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:26:32.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:26:32.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-15T00:26:32.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-15T00:26:32.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:26:32.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:26:32.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:26:32.321 [DEBUG] [Thread-194806] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:26:46.432 [DEBUG] [Thread-194809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:27:01.469 [DEBUG] [Thread-194810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:27:02.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:27:02.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:27:02.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-15T00:27:04.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 26, 33), 4.77, 71.89, 0.0, 41.85, 8.46, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:27:04.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:26:33
2026-02-15T00:27:04.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:27:04.698 [DEBUG] [Thread-194811] [transport.py] [_log()] starting thread (client mode): 0xa57d72b0
2026-02-15T00:27:04.698 [DEBUG] [Thread-194811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:27:04.719 [DEBUG] [Thread-194811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:27:04.719 [INFO] [Thread-194811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:27:04.722 [DEBUG] [Thread-194811] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:27:04.722 [DEBUG] [Thread-194811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:27:04.723 [DEBUG] [Thread-194811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:27:04.723 [DEBUG] [Thread-194811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:27:04.723 [DEBUG] [Thread-194811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:27:04.723 [DEBUG] [Thread-194811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:27:04.723 [DEBUG] [Thread-194811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:27:04.723 [DEBUG] [Thread-194811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:27:04.723 [DEBUG] [Thread-194811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:27:04.723 [DEBUG] [Thread-194811] [transport.py] [_log()] client lang: <none>
2026-02-15T00:27:04.723 [DEBUG] [Thread-194811] [transport.py] [_log()] server lang: <none>
2026-02-15T00:27:04.723 [DEBUG] [Thread-194811] [transport.py] [_log()] kex follows: False
2026-02-15T00:27:04.723 [DEBUG] [Thread-194811] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:27:04.723 [DEBUG] [Thread-194811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:27:04.723 [DEBUG] [Thread-194811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:27:04.723 [DEBUG] [Thread-194811] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:27:04.723 [DEBUG] [Thread-194811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:27:04.723 [DEBUG] [Thread-194811] [transport.py] [_log()] Compression: none
2026-02-15T00:27:04.723 [DEBUG] [Thread-194811] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:27:04.731 [DEBUG] [Thread-194811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:27:04.732 [DEBUG] [Thread-194811] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:27:04.732 [DEBUG] [Thread-194811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:27:04.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:27:04.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:27:04.734 [DEBUG] [Thread-194811] [transport.py] [_log()] userauth is OK
2026-02-15T00:27:04.734 [DEBUG] [Thread-194811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:27:04.734 [DEBUG] [Thread-194811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:27:04.734 [DEBUG] [Thread-194811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:27:04.734 [DEBUG] [Thread-194811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:27:04.758 [INFO] [Thread-194811] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:27:04.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:27:05.386 [DEBUG] [Thread-194811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:27:05.387 [DEBUG] [Thread-194811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:27:05.387 [DEBUG] [Thread-194811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:27:05.427 [DEBUG] [Thread-194811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:27:05.428 [DEBUG] [Thread-194811] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:27:05.431 [DEBUG] [Thread-194811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:27:05.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:27:05.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:27:05.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:27:05.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:27:05.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:27:05.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:27:05.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:27:05.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:27:05.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:27:05.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.934832 -999.00   +8.20  36.70     77   +4.40 1 1 2 1 1     0    0 2.84 -46.55 ZNESW 36.7 36.7 163.2 46.9 8.7 -24.2 8.5 -23.3 8.3 -22.1 8.6 -23.5
2026-02-15T00:27:05.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:27:05.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:27:05.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.934832
2026-02-15T00:27:05.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:27:05.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:27:05.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:27:05.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:27:05.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:27:05.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:26:33', tmtdew=4.77, humidity=71.89, cloud=0.0, wind=41.85, temperature=8.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:26:34', seeing=1.57, atlas_timestamp='2026-02-14T22:26:09.485', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.005250000000000199, -0.05074999999999896, -0.0495000000000001, 0.010500000000000398, 0.039250000000000895, -0.0259999999999998, 0.06375000000000064, 0.00849999999999973, 0.054999999999999716, -0.05375000000000085, 0.009999999999999787, 0.07099999999999973, 0.03625000000000078, 0.017999999999998906, 0.02949999999999875, 0.034250000000000114, 0.041499999999999204, 0.009999999999999787, -0.011250000000000426, 0.025499999999997414, 0.04224999999999923, 0.02575000000000216, 0.06625000000000014, 0.04849999999999888, 0.019000000000000128, 0.040749999999999176, -0.018499999999999517, 0.06449999999999889, 0.0010000000000012221, 0.04400000000000048, 0.10400000000000098, 0.027749999999999275], zp_timestamp='2026-02-14T22:25:00')
2026-02-15T00:27:05.457 [DEBUG] [Thread-194811] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:27:05.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T00:27:05.555 [DEBUG] [Thread-194814] [transport.py] [_log()] starting thread (client mode): 0xa2d97490
2026-02-15T00:27:05.556 [DEBUG] [Thread-194814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:27:05.571 [DEBUG] [Thread-194814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:27:05.571 [INFO] [Thread-194814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:27:05.586 [DEBUG] [Thread-194814] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:27:05.587 [DEBUG] [Thread-194814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:27:05.587 [DEBUG] [Thread-194814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:27:05.587 [DEBUG] [Thread-194814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:27:05.587 [DEBUG] [Thread-194814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:27:05.587 [DEBUG] [Thread-194814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:27:05.587 [DEBUG] [Thread-194814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:27:05.587 [DEBUG] [Thread-194814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:27:05.588 [DEBUG] [Thread-194814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:27:05.588 [DEBUG] [Thread-194814] [transport.py] [_log()] client lang: <none>
2026-02-15T00:27:05.588 [DEBUG] [Thread-194814] [transport.py] [_log()] server lang: <none>
2026-02-15T00:27:05.588 [DEBUG] [Thread-194814] [transport.py] [_log()] kex follows: False
2026-02-15T00:27:05.588 [DEBUG] [Thread-194814] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:27:05.588 [DEBUG] [Thread-194814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:27:05.588 [DEBUG] [Thread-194814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:27:05.588 [DEBUG] [Thread-194814] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:27:05.588 [DEBUG] [Thread-194814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:27:05.589 [DEBUG] [Thread-194814] [transport.py] [_log()] Compression: none
2026-02-15T00:27:05.589 [DEBUG] [Thread-194814] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:27:05.644 [DEBUG] [Thread-194814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:27:05.645 [DEBUG] [Thread-194814] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:27:05.646 [DEBUG] [Thread-194814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:27:05.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:27:05.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:27:05.701 [DEBUG] [Thread-194814] [transport.py] [_log()] userauth is OK
2026-02-15T00:27:05.701 [DEBUG] [Thread-194814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:27:05.701 [DEBUG] [Thread-194814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:27:05.701 [DEBUG] [Thread-194814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:27:05.701 [DEBUG] [Thread-194814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:27:05.726 [INFO] [Thread-194814] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:27:05.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-15T00:27:05.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:27:06.554 [DEBUG] [Thread-194814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:27:06.554 [DEBUG] [Thread-194814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:27:06.602 [DEBUG] [Thread-194814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:27:06.602 [DEBUG] [Thread-194814] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:27:06.611 [DEBUG] [Thread-194814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:27:06.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:27:06.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-15T00:27:06.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:27:06.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:27:06.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:27:06.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:27:06.647 [DEBUG] [Thread-194814] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:27:08.909 [DEBUG] [Thread-194816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:27:16.500 [DEBUG] [Thread-194817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:27:19.601 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:27:19.602 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:27:31.552 [DEBUG] [Thread-194818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:27:36.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:27:36.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:27:36.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:27:38.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 27, 9), 4.57, 73.01, 0.0, 36.21, 8.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:27:38.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:27:09
2026-02-15T00:27:39.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:27:39.466 [DEBUG] [Thread-194819] [transport.py] [_log()] starting thread (client mode): 0xa2d185e0
2026-02-15T00:27:39.466 [DEBUG] [Thread-194819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:27:39.486 [DEBUG] [Thread-194819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:27:39.486 [INFO] [Thread-194819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:27:39.490 [DEBUG] [Thread-194819] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:27:39.490 [DEBUG] [Thread-194819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:27:39.490 [DEBUG] [Thread-194819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:27:39.490 [DEBUG] [Thread-194819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:27:39.490 [DEBUG] [Thread-194819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:27:39.490 [DEBUG] [Thread-194819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:27:39.490 [DEBUG] [Thread-194819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:27:39.490 [DEBUG] [Thread-194819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:27:39.490 [DEBUG] [Thread-194819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:27:39.490 [DEBUG] [Thread-194819] [transport.py] [_log()] client lang: <none>
2026-02-15T00:27:39.490 [DEBUG] [Thread-194819] [transport.py] [_log()] server lang: <none>
2026-02-15T00:27:39.490 [DEBUG] [Thread-194819] [transport.py] [_log()] kex follows: False
2026-02-15T00:27:39.490 [DEBUG] [Thread-194819] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:27:39.490 [DEBUG] [Thread-194819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:27:39.490 [DEBUG] [Thread-194819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:27:39.490 [DEBUG] [Thread-194819] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:27:39.491 [DEBUG] [Thread-194819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:27:39.491 [DEBUG] [Thread-194819] [transport.py] [_log()] Compression: none
2026-02-15T00:27:39.491 [DEBUG] [Thread-194819] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:27:39.508 [DEBUG] [Thread-194819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:27:39.509 [DEBUG] [Thread-194819] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:27:39.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:27:39.510 [DEBUG] [Thread-194819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:27:39.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:27:39.512 [DEBUG] [Thread-194819] [transport.py] [_log()] userauth is OK
2026-02-15T00:27:39.512 [DEBUG] [Thread-194819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:27:39.512 [DEBUG] [Thread-194819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:27:39.512 [DEBUG] [Thread-194819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:27:39.512 [DEBUG] [Thread-194819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:27:39.537 [INFO] [Thread-194819] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:27:39.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:27:40.156 [DEBUG] [Thread-194819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:27:40.157 [DEBUG] [Thread-194819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:27:40.157 [DEBUG] [Thread-194819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:27:40.197 [DEBUG] [Thread-194819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:27:40.198 [DEBUG] [Thread-194819] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:27:40.201 [DEBUG] [Thread-194819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:27:40.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:27:40.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:27:40.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:27:40.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:27:40.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:27:40.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:27:40.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:27:40.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:27:40.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:27:40.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.935179 -999.00   +8.10  19.48     77   +4.40 1 1 1 1 1     0    0 2.82 -46.76 ZNESW 19.5 19.5 158.7 37.8 8.6 -24.2 8.5 -23.2 8.3 -22.3 8.6 -23.5
2026-02-15T00:27:40.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:27:40.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:27:40.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.935179
2026-02-15T00:27:40.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:27:40.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:27:40.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:27:40.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:27:40.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:27:40.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:27:09', tmtdew=4.57, humidity=73.01, cloud=0.0, wind=36.21, temperature=8.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:27:09', seeing=1.29, atlas_timestamp='2026-02-14T22:26:39.466', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.005250000000000199, -0.05074999999999896, -0.0495000000000001, 0.010500000000000398, 0.039250000000000895, -0.0259999999999998, 0.06375000000000064, 0.00849999999999973, 0.054999999999999716, -0.05375000000000085, 0.009999999999999787, 0.07099999999999973, 0.03625000000000078, 0.017999999999998906, 0.02949999999999875, 0.034250000000000114, 0.041499999999999204, 0.009999999999999787, -0.011250000000000426, 0.025499999999997414, 0.04224999999999923, 0.02575000000000216, 0.06625000000000014, 0.04849999999999888, 0.019000000000000128, 0.040749999999999176, -0.018499999999999517, 0.06449999999999889, 0.0010000000000012221, 0.04400000000000048, 0.10400000000000098, 0.027749999999999275], zp_timestamp='2026-02-14T22:25:00')
2026-02-15T00:27:40.230 [DEBUG] [Thread-194819] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:27:40.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-15T00:27:40.337 [DEBUG] [Thread-194822] [transport.py] [_log()] starting thread (client mode): 0xa2d195d0
2026-02-15T00:27:40.337 [DEBUG] [Thread-194822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:27:40.351 [DEBUG] [Thread-194822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:27:40.352 [INFO] [Thread-194822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:27:40.359 [DEBUG] [Thread-194822] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:27:40.359 [DEBUG] [Thread-194822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:27:40.360 [DEBUG] [Thread-194822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:27:40.360 [DEBUG] [Thread-194822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:27:40.360 [DEBUG] [Thread-194822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:27:40.360 [DEBUG] [Thread-194822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:27:40.360 [DEBUG] [Thread-194822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:27:40.360 [DEBUG] [Thread-194822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:27:40.360 [DEBUG] [Thread-194822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:27:40.360 [DEBUG] [Thread-194822] [transport.py] [_log()] client lang: <none>
2026-02-15T00:27:40.361 [DEBUG] [Thread-194822] [transport.py] [_log()] server lang: <none>
2026-02-15T00:27:40.361 [DEBUG] [Thread-194822] [transport.py] [_log()] kex follows: False
2026-02-15T00:27:40.361 [DEBUG] [Thread-194822] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:27:40.361 [DEBUG] [Thread-194822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:27:40.361 [DEBUG] [Thread-194822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:27:40.361 [DEBUG] [Thread-194822] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:27:40.361 [DEBUG] [Thread-194822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:27:40.362 [DEBUG] [Thread-194822] [transport.py] [_log()] Compression: none
2026-02-15T00:27:40.362 [DEBUG] [Thread-194822] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:27:40.418 [DEBUG] [Thread-194822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:27:40.418 [DEBUG] [Thread-194822] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:27:40.419 [DEBUG] [Thread-194822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:27:40.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:27:40.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:27:40.478 [DEBUG] [Thread-194822] [transport.py] [_log()] userauth is OK
2026-02-15T00:27:40.478 [DEBUG] [Thread-194822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:27:40.478 [DEBUG] [Thread-194822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:27:40.478 [DEBUG] [Thread-194822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:27:40.479 [DEBUG] [Thread-194822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:27:40.497 [INFO] [Thread-194822] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:27:40.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T00:27:40.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:27:41.323 [DEBUG] [Thread-194822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:27:41.324 [DEBUG] [Thread-194822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:27:41.371 [DEBUG] [Thread-194822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:27:41.372 [DEBUG] [Thread-194822] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:27:41.381 [DEBUG] [Thread-194822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:27:41.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:27:41.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-15T00:27:41.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-15T00:27:41.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:27:41.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:27:41.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:27:41.418 [DEBUG] [Thread-194822] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:27:46.584 [DEBUG] [Thread-194824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:28:01.635 [DEBUG] [Thread-194825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:28:08.975 [DEBUG] [Thread-194826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:28:11.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:28:11.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:28:11.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-15T00:28:13.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 27, 44), 4.52, 73.01, 0.0, 39.33, 8.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:28:13.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:27:44
2026-02-15T00:28:14.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:28:14.389 [DEBUG] [Thread-194827] [transport.py] [_log()] starting thread (client mode): 0xa2d96c20
2026-02-15T00:28:14.390 [DEBUG] [Thread-194827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:28:14.409 [DEBUG] [Thread-194827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:28:14.409 [INFO] [Thread-194827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:28:14.412 [DEBUG] [Thread-194827] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:28:14.412 [DEBUG] [Thread-194827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:28:14.412 [DEBUG] [Thread-194827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:28:14.412 [DEBUG] [Thread-194827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:28:14.412 [DEBUG] [Thread-194827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:28:14.413 [DEBUG] [Thread-194827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:28:14.413 [DEBUG] [Thread-194827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:28:14.413 [DEBUG] [Thread-194827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:28:14.413 [DEBUG] [Thread-194827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:28:14.413 [DEBUG] [Thread-194827] [transport.py] [_log()] client lang: <none>
2026-02-15T00:28:14.413 [DEBUG] [Thread-194827] [transport.py] [_log()] server lang: <none>
2026-02-15T00:28:14.413 [DEBUG] [Thread-194827] [transport.py] [_log()] kex follows: False
2026-02-15T00:28:14.413 [DEBUG] [Thread-194827] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:28:14.413 [DEBUG] [Thread-194827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:28:14.413 [DEBUG] [Thread-194827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:28:14.413 [DEBUG] [Thread-194827] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:28:14.413 [DEBUG] [Thread-194827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:28:14.413 [DEBUG] [Thread-194827] [transport.py] [_log()] Compression: none
2026-02-15T00:28:14.413 [DEBUG] [Thread-194827] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:28:14.430 [DEBUG] [Thread-194827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:28:14.431 [DEBUG] [Thread-194827] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:28:14.432 [DEBUG] [Thread-194827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:28:14.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:28:14.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:28:14.434 [DEBUG] [Thread-194827] [transport.py] [_log()] userauth is OK
2026-02-15T00:28:14.434 [DEBUG] [Thread-194827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:28:14.434 [DEBUG] [Thread-194827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:28:14.434 [DEBUG] [Thread-194827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:28:14.434 [DEBUG] [Thread-194827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:28:14.452 [INFO] [Thread-194827] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:28:14.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:28:15.247 [DEBUG] [Thread-194827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:28:15.247 [DEBUG] [Thread-194827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:28:15.248 [DEBUG] [Thread-194827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:28:15.288 [DEBUG] [Thread-194827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:28:15.289 [DEBUG] [Thread-194827] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:28:15.292 [DEBUG] [Thread-194827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:28:15.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:28:15.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:28:15.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:28:15.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:28:15.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:28:15.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:28:15.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:28:15.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:28:15.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:28:15.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.935526 -999.00   +8.10  21.94     77   +4.40 1 1 1 1 1     0    0 2.69 -50.78 ZNESW 21.9 21.9 160.4 28.6 8.7 -24.1 8.5 -23.3 8.3 -22.1 8.6 -23.6
2026-02-15T00:28:15.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:28:15.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:28:15.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.935526
2026-02-15T00:28:15.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:28:15.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:28:15.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:28:15.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:28:15.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:28:15.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:27:44', tmtdew=4.52, humidity=73.01, cloud=0.0, wind=39.33, temperature=8.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:27:44', seeing=1.28, atlas_timestamp='2026-02-14T22:27:09.446', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.005250000000000199, -0.05074999999999896, -0.0495000000000001, 0.010500000000000398, 0.039250000000000895, -0.0259999999999998, 0.06375000000000064, 0.00849999999999973, 0.054999999999999716, -0.05375000000000085, 0.009999999999999787, 0.07099999999999973, 0.03625000000000078, 0.017999999999998906, 0.02949999999999875, 0.034250000000000114, 0.041499999999999204, 0.009999999999999787, -0.011250000000000426, 0.025499999999997414, 0.04224999999999923, 0.02575000000000216, 0.06625000000000014, 0.04849999999999888, 0.019000000000000128, 0.040749999999999176, -0.018499999999999517, 0.06449999999999889, 0.0010000000000012221, 0.04400000000000048, 0.10400000000000098, 0.027749999999999275], zp_timestamp='2026-02-14T22:25:00')
2026-02-15T00:28:15.319 [DEBUG] [Thread-194827] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:28:15.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T00:28:15.414 [DEBUG] [Thread-194830] [transport.py] [_log()] starting thread (client mode): 0xa57d5180
2026-02-15T00:28:15.414 [DEBUG] [Thread-194830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:28:15.428 [DEBUG] [Thread-194830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:28:15.429 [INFO] [Thread-194830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:28:15.436 [DEBUG] [Thread-194830] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:28:15.437 [DEBUG] [Thread-194830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:28:15.437 [DEBUG] [Thread-194830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:28:15.437 [DEBUG] [Thread-194830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:28:15.437 [DEBUG] [Thread-194830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:28:15.437 [DEBUG] [Thread-194830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:28:15.437 [DEBUG] [Thread-194830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:28:15.437 [DEBUG] [Thread-194830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:28:15.437 [DEBUG] [Thread-194830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:28:15.437 [DEBUG] [Thread-194830] [transport.py] [_log()] client lang: <none>
2026-02-15T00:28:15.437 [DEBUG] [Thread-194830] [transport.py] [_log()] server lang: <none>
2026-02-15T00:28:15.437 [DEBUG] [Thread-194830] [transport.py] [_log()] kex follows: False
2026-02-15T00:28:15.437 [DEBUG] [Thread-194830] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:28:15.437 [DEBUG] [Thread-194830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:28:15.437 [DEBUG] [Thread-194830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:28:15.437 [DEBUG] [Thread-194830] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:28:15.437 [DEBUG] [Thread-194830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:28:15.437 [DEBUG] [Thread-194830] [transport.py] [_log()] Compression: none
2026-02-15T00:28:15.437 [DEBUG] [Thread-194830] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:28:15.498 [DEBUG] [Thread-194830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:28:15.498 [DEBUG] [Thread-194830] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:28:15.499 [DEBUG] [Thread-194830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:28:15.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:28:15.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:28:15.561 [DEBUG] [Thread-194830] [transport.py] [_log()] userauth is OK
2026-02-15T00:28:15.561 [DEBUG] [Thread-194830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:28:15.561 [DEBUG] [Thread-194830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:28:15.561 [DEBUG] [Thread-194830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:28:15.562 [DEBUG] [Thread-194830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:28:15.580 [INFO] [Thread-194830] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:28:15.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T00:28:15.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:28:16.413 [DEBUG] [Thread-194830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:28:16.413 [DEBUG] [Thread-194830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:28:16.461 [DEBUG] [Thread-194830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:28:16.461 [DEBUG] [Thread-194830] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:28:16.471 [DEBUG] [Thread-194830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:28:16.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:28:16.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-15T00:28:16.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-15T00:28:16.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:28:16.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:28:16.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:28:16.508 [DEBUG] [Thread-194830] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:28:16.673 [DEBUG] [Thread-194832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:28:19.801 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:28:19.802 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:28:31.736 [DEBUG] [Thread-194833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:28:46.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:28:46.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:28:46.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-15T00:28:46.772 [DEBUG] [Thread-194834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:28:48.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 28, 20), 4.5, 73.13, 0.0, 36.61, 8.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:28:48.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:28:20
2026-02-15T00:28:48.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:28:48.973 [DEBUG] [Thread-194835] [transport.py] [_log()] starting thread (client mode): 0xa57d6a70
2026-02-15T00:28:48.973 [DEBUG] [Thread-194835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:28:48.993 [DEBUG] [Thread-194835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:28:48.993 [INFO] [Thread-194835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:28:48.996 [DEBUG] [Thread-194835] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:28:48.996 [DEBUG] [Thread-194835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:28:48.997 [DEBUG] [Thread-194835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:28:48.997 [DEBUG] [Thread-194835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:28:48.997 [DEBUG] [Thread-194835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:28:48.997 [DEBUG] [Thread-194835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:28:48.997 [DEBUG] [Thread-194835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:28:48.997 [DEBUG] [Thread-194835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:28:48.997 [DEBUG] [Thread-194835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:28:48.997 [DEBUG] [Thread-194835] [transport.py] [_log()] client lang: <none>
2026-02-15T00:28:48.997 [DEBUG] [Thread-194835] [transport.py] [_log()] server lang: <none>
2026-02-15T00:28:48.997 [DEBUG] [Thread-194835] [transport.py] [_log()] kex follows: False
2026-02-15T00:28:48.997 [DEBUG] [Thread-194835] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:28:48.997 [DEBUG] [Thread-194835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:28:48.997 [DEBUG] [Thread-194835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:28:48.998 [DEBUG] [Thread-194835] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:28:48.998 [DEBUG] [Thread-194835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:28:48.998 [DEBUG] [Thread-194835] [transport.py] [_log()] Compression: none
2026-02-15T00:28:48.998 [DEBUG] [Thread-194835] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:28:49.019 [DEBUG] [Thread-194835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:28:49.020 [DEBUG] [Thread-194835] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:28:49.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:28:49.022 [DEBUG] [Thread-194835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:28:49.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:28:49.025 [DEBUG] [Thread-194835] [transport.py] [_log()] userauth is OK
2026-02-15T00:28:49.025 [DEBUG] [Thread-194835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:28:49.025 [DEBUG] [Thread-194835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:28:49.025 [DEBUG] [Thread-194835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:28:49.025 [DEBUG] [Thread-194835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:28:49.046 [INFO] [Thread-194835] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:28:49.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:28:49.696 [DEBUG] [Thread-194835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:28:49.696 [DEBUG] [Thread-194835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:28:49.696 [DEBUG] [Thread-194835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:28:49.737 [DEBUG] [Thread-194835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:28:49.738 [DEBUG] [Thread-194835] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:28:49.741 [DEBUG] [Thread-194835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:28:49.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:28:49.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:28:49.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:28:49.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:28:49.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:28:49.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:28:49.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:28:49.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:28:49.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:28:49.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.936221 -999.00   +8.10  33.62     77   +4.40 1 1 2 1 1     0    0 2.64 -52.00 ZNESW 33.6 33.6 155.4 43.7 8.7 -24.1 8.5 -23.1 8.3 -22.2 8.6 -23.4
2026-02-15T00:28:49.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:28:49.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:28:49.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.936221
2026-02-15T00:28:49.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:28:49.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:28:49.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:28:49.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:28:49.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:28:49.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:28:20', tmtdew=4.5, humidity=73.13, cloud=0.0, wind=36.61, temperature=8.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:28:20', seeing=1.46, atlas_timestamp='2026-02-14T22:28:09.494', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.005250000000000199, -0.05074999999999896, -0.0495000000000001, 0.010500000000000398, 0.039250000000000895, -0.0259999999999998, 0.06375000000000064, 0.00849999999999973, 0.054999999999999716, -0.05375000000000085, 0.009999999999999787, 0.07099999999999973, 0.03625000000000078, 0.017999999999998906, 0.02949999999999875, 0.034250000000000114, 0.041499999999999204, 0.009999999999999787, -0.011250000000000426, 0.025499999999997414, 0.04224999999999923, 0.02575000000000216, 0.06625000000000014, 0.04849999999999888, 0.019000000000000128, 0.040749999999999176, -0.018499999999999517, 0.06449999999999889, 0.0010000000000012221, 0.04400000000000048, 0.10400000000000098, 0.027749999999999275], zp_timestamp='2026-02-14T22:25:00')
2026-02-15T00:28:49.770 [DEBUG] [Thread-194835] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:28:49.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-15T00:28:49.869 [DEBUG] [Thread-194838] [transport.py] [_log()] starting thread (client mode): 0xa57d51e0
2026-02-15T00:28:49.869 [DEBUG] [Thread-194838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:28:49.884 [DEBUG] [Thread-194838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:28:49.884 [INFO] [Thread-194838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:28:49.891 [DEBUG] [Thread-194838] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:28:49.892 [DEBUG] [Thread-194838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:28:49.892 [DEBUG] [Thread-194838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:28:49.892 [DEBUG] [Thread-194838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:28:49.892 [DEBUG] [Thread-194838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:28:49.892 [DEBUG] [Thread-194838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:28:49.892 [DEBUG] [Thread-194838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:28:49.892 [DEBUG] [Thread-194838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:28:49.892 [DEBUG] [Thread-194838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:28:49.892 [DEBUG] [Thread-194838] [transport.py] [_log()] client lang: <none>
2026-02-15T00:28:49.892 [DEBUG] [Thread-194838] [transport.py] [_log()] server lang: <none>
2026-02-15T00:28:49.892 [DEBUG] [Thread-194838] [transport.py] [_log()] kex follows: False
2026-02-15T00:28:49.892 [DEBUG] [Thread-194838] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:28:49.892 [DEBUG] [Thread-194838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:28:49.892 [DEBUG] [Thread-194838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:28:49.892 [DEBUG] [Thread-194838] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:28:49.893 [DEBUG] [Thread-194838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:28:49.893 [DEBUG] [Thread-194838] [transport.py] [_log()] Compression: none
2026-02-15T00:28:49.893 [DEBUG] [Thread-194838] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:28:49.949 [DEBUG] [Thread-194838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:28:49.949 [DEBUG] [Thread-194838] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:28:49.950 [DEBUG] [Thread-194838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:28:49.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:28:49.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:28:50.005 [DEBUG] [Thread-194838] [transport.py] [_log()] userauth is OK
2026-02-15T00:28:50.005 [DEBUG] [Thread-194838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:28:50.006 [DEBUG] [Thread-194838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:28:50.006 [DEBUG] [Thread-194838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:28:50.006 [DEBUG] [Thread-194838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:28:50.024 [INFO] [Thread-194838] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:28:50.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-15T00:28:50.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:28:50.841 [DEBUG] [Thread-194838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:28:50.842 [DEBUG] [Thread-194838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:28:50.889 [DEBUG] [Thread-194838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:28:50.890 [DEBUG] [Thread-194838] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:28:50.898 [DEBUG] [Thread-194838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:28:50.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:28:50.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-15T00:28:50.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-15T00:28:50.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:28:50.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:28:50.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:28:50.930 [DEBUG] [Thread-194838] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:29:01.808 [DEBUG] [Thread-194840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:29:09.044 [DEBUG] [Thread-194841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:29:16.856 [DEBUG] [Thread-194842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:29:20.011 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:29:20.012 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:29:20.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:29:20.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:29:20.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-15T00:29:23.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 28, 56), 4.51, 73.08, 0.0, 42.65, 8.13, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:29:23.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:28:56
2026-02-15T00:29:23.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:29:24.091 [DEBUG] [Thread-194843] [transport.py] [_log()] starting thread (client mode): 0xa2d972b0
2026-02-15T00:29:24.092 [DEBUG] [Thread-194843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:29:24.111 [DEBUG] [Thread-194843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:29:24.111 [INFO] [Thread-194843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:29:24.114 [DEBUG] [Thread-194843] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:29:24.114 [DEBUG] [Thread-194843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:29:24.114 [DEBUG] [Thread-194843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:29:24.114 [DEBUG] [Thread-194843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:29:24.114 [DEBUG] [Thread-194843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:29:24.114 [DEBUG] [Thread-194843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:29:24.114 [DEBUG] [Thread-194843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:29:24.114 [DEBUG] [Thread-194843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:29:24.114 [DEBUG] [Thread-194843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:29:24.114 [DEBUG] [Thread-194843] [transport.py] [_log()] client lang: <none>
2026-02-15T00:29:24.114 [DEBUG] [Thread-194843] [transport.py] [_log()] server lang: <none>
2026-02-15T00:29:24.114 [DEBUG] [Thread-194843] [transport.py] [_log()] kex follows: False
2026-02-15T00:29:24.114 [DEBUG] [Thread-194843] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:29:24.114 [DEBUG] [Thread-194843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:29:24.114 [DEBUG] [Thread-194843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:29:24.114 [DEBUG] [Thread-194843] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:29:24.114 [DEBUG] [Thread-194843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:29:24.114 [DEBUG] [Thread-194843] [transport.py] [_log()] Compression: none
2026-02-15T00:29:24.114 [DEBUG] [Thread-194843] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:29:24.123 [DEBUG] [Thread-194843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:29:24.123 [DEBUG] [Thread-194843] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:29:24.123 [DEBUG] [Thread-194843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:29:24.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:29:24.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:29:24.125 [DEBUG] [Thread-194843] [transport.py] [_log()] userauth is OK
2026-02-15T00:29:24.125 [DEBUG] [Thread-194843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:29:24.125 [DEBUG] [Thread-194843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:29:24.125 [DEBUG] [Thread-194843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:29:24.125 [DEBUG] [Thread-194843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:29:24.160 [INFO] [Thread-194843] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:29:24.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:29:24.833 [DEBUG] [Thread-194843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:29:24.833 [DEBUG] [Thread-194843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:29:24.834 [DEBUG] [Thread-194843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:29:24.874 [DEBUG] [Thread-194843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:29:24.874 [DEBUG] [Thread-194843] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:29:24.877 [DEBUG] [Thread-194843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:29:24.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:29:24.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:29:24.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:29:24.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:29:24.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:29:24.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:29:24.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:29:24.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:29:24.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:29:24.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.936568 -999.00   +8.10  25.65     77   +4.40 1 1 1 1 1     0    0 2.33 -59.62 ZNESW 25.6 25.6 162.6 43.5 8.6 -24.1 8.4 -23.1 8.2 -22.2 8.6 -23.4
2026-02-15T00:29:24.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:29:24.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:29:24.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.936568
2026-02-15T00:29:24.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:29:24.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:29:24.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:29:24.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:29:24.901 [DEBUG] [Thread-194843] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:29:24.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:29:24.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:28:56', tmtdew=4.51, humidity=73.08, cloud=0.0, wind=42.65, temperature=8.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:28:56', seeing=1.41, atlas_timestamp='2026-02-14T22:28:39.475', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.005250000000000199, -0.05074999999999896, -0.0495000000000001, 0.010500000000000398, 0.039250000000000895, -0.0259999999999998, 0.06375000000000064, 0.00849999999999973, 0.054999999999999716, -0.05375000000000085, 0.009999999999999787, 0.07099999999999973, 0.03625000000000078, 0.017999999999998906, 0.02949999999999875, 0.034250000000000114, 0.041499999999999204, 0.009999999999999787, -0.011250000000000426, 0.025499999999997414, 0.04224999999999923, 0.02575000000000216, 0.06625000000000014, 0.04849999999999888, 0.019000000000000128, 0.040749999999999176, -0.018499999999999517, 0.06449999999999889, 0.0010000000000012221, 0.04400000000000048, 0.10400000000000098, 0.027749999999999275], zp_timestamp='2026-02-14T22:25:00')
2026-02-15T00:29:24.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-15T00:29:25.000 [DEBUG] [Thread-194846] [transport.py] [_log()] starting thread (client mode): 0xa2d7a7a0
2026-02-15T00:29:25.000 [DEBUG] [Thread-194846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:29:25.015 [DEBUG] [Thread-194846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:29:25.015 [INFO] [Thread-194846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:29:25.022 [DEBUG] [Thread-194846] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:29:25.023 [DEBUG] [Thread-194846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:29:25.023 [DEBUG] [Thread-194846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:29:25.023 [DEBUG] [Thread-194846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:29:25.023 [DEBUG] [Thread-194846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:29:25.023 [DEBUG] [Thread-194846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:29:25.023 [DEBUG] [Thread-194846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:29:25.023 [DEBUG] [Thread-194846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:29:25.023 [DEBUG] [Thread-194846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:29:25.023 [DEBUG] [Thread-194846] [transport.py] [_log()] client lang: <none>
2026-02-15T00:29:25.023 [DEBUG] [Thread-194846] [transport.py] [_log()] server lang: <none>
2026-02-15T00:29:25.023 [DEBUG] [Thread-194846] [transport.py] [_log()] kex follows: False
2026-02-15T00:29:25.023 [DEBUG] [Thread-194846] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:29:25.023 [DEBUG] [Thread-194846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:29:25.023 [DEBUG] [Thread-194846] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:29:25.023 [DEBUG] [Thread-194846] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:29:25.024 [DEBUG] [Thread-194846] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:29:25.024 [DEBUG] [Thread-194846] [transport.py] [_log()] Compression: none
2026-02-15T00:29:25.024 [DEBUG] [Thread-194846] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:29:25.082 [DEBUG] [Thread-194846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:29:25.082 [DEBUG] [Thread-194846] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:29:25.083 [DEBUG] [Thread-194846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:29:25.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:29:25.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:29:25.137 [DEBUG] [Thread-194846] [transport.py] [_log()] userauth is OK
2026-02-15T00:29:25.137 [DEBUG] [Thread-194846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:29:25.138 [DEBUG] [Thread-194846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:29:25.138 [DEBUG] [Thread-194846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:29:25.138 [DEBUG] [Thread-194846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:29:25.156 [INFO] [Thread-194846] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:29:25.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-15T00:29:25.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:29:25.991 [DEBUG] [Thread-194846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:29:25.991 [DEBUG] [Thread-194846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:29:26.039 [DEBUG] [Thread-194846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:29:26.039 [DEBUG] [Thread-194846] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:29:26.049 [DEBUG] [Thread-194846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:29:26.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:29:26.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:29:26.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-15T00:29:26.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:29:26.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:29:26.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:29:26.087 [DEBUG] [Thread-194846] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:29:31.888 [DEBUG] [Thread-194848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:29:46.942 [DEBUG] [Thread-194849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:29:56.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:29:56.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:29:56.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:29:57.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 29, 31), 4.51, 73.08, 0.0, 42.07, 8.13, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:29:57.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:29:31
2026-02-15T00:29:58.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:29:58.468 [DEBUG] [Thread-194850] [transport.py] [_log()] starting thread (client mode): 0xa57d7ee0
2026-02-15T00:29:58.469 [DEBUG] [Thread-194850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:29:58.489 [DEBUG] [Thread-194850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:29:58.489 [INFO] [Thread-194850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:29:58.492 [DEBUG] [Thread-194850] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:29:58.492 [DEBUG] [Thread-194850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:29:58.492 [DEBUG] [Thread-194850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:29:58.492 [DEBUG] [Thread-194850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:29:58.492 [DEBUG] [Thread-194850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:29:58.492 [DEBUG] [Thread-194850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:29:58.492 [DEBUG] [Thread-194850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:29:58.492 [DEBUG] [Thread-194850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:29:58.492 [DEBUG] [Thread-194850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:29:58.492 [DEBUG] [Thread-194850] [transport.py] [_log()] client lang: <none>
2026-02-15T00:29:58.492 [DEBUG] [Thread-194850] [transport.py] [_log()] server lang: <none>
2026-02-15T00:29:58.493 [DEBUG] [Thread-194850] [transport.py] [_log()] kex follows: False
2026-02-15T00:29:58.493 [DEBUG] [Thread-194850] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:29:58.493 [DEBUG] [Thread-194850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:29:58.493 [DEBUG] [Thread-194850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:29:58.493 [DEBUG] [Thread-194850] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:29:58.493 [DEBUG] [Thread-194850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:29:58.493 [DEBUG] [Thread-194850] [transport.py] [_log()] Compression: none
2026-02-15T00:29:58.493 [DEBUG] [Thread-194850] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:29:58.511 [DEBUG] [Thread-194850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:29:58.511 [DEBUG] [Thread-194850] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:29:58.512 [DEBUG] [Thread-194850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:29:58.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:29:58.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:29:58.514 [DEBUG] [Thread-194850] [transport.py] [_log()] userauth is OK
2026-02-15T00:29:58.514 [DEBUG] [Thread-194850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:29:58.514 [DEBUG] [Thread-194850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:29:58.515 [DEBUG] [Thread-194850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:29:58.515 [DEBUG] [Thread-194850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:29:58.539 [INFO] [Thread-194850] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:29:58.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:29:59.166 [DEBUG] [Thread-194850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:29:59.166 [DEBUG] [Thread-194850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:29:59.167 [DEBUG] [Thread-194850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:29:59.207 [DEBUG] [Thread-194850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:29:59.208 [DEBUG] [Thread-194850] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:29:59.211 [DEBUG] [Thread-194850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:29:59.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:29:59.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:29:59.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:29:59.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:29:59.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:29:59.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:29:59.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:29:59.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:29:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:29:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.936915 -999.00   +8.10  26.13     77   +4.40 1 1 1 1 1     0    0 2.48 -54.04 ZNESW 26.1 26.1 152.2 41.7 8.6 -24.1 8.4 -23.0 8.2 -22.3 8.6 -23.4
2026-02-15T00:29:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:29:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:29:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.936915
2026-02-15T00:29:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:29:59.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:29:59.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:29:59.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:29:59.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:29:59.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:29:31', tmtdew=4.51, humidity=73.08, cloud=0.0, wind=42.07, temperature=8.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:29:32', seeing=1.41, atlas_timestamp='2026-02-14T22:29:09.456', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.005250000000000199, -0.05074999999999896, -0.0495000000000001, 0.010500000000000398, 0.039250000000000895, -0.0259999999999998, 0.06375000000000064, 0.00849999999999973, 0.054999999999999716, -0.05375000000000085, 0.009999999999999787, 0.07099999999999973, 0.03625000000000078, 0.017999999999998906, 0.02949999999999875, 0.034250000000000114, 0.041499999999999204, 0.009999999999999787, -0.011250000000000426, 0.025499999999997414, 0.04224999999999923, 0.02575000000000216, 0.06625000000000014, 0.04849999999999888, 0.019000000000000128, 0.040749999999999176, -0.018499999999999517, 0.06449999999999889, 0.0010000000000012221, 0.04400000000000048, 0.10400000000000098, 0.027749999999999275], zp_timestamp='2026-02-14T22:25:00')
2026-02-15T00:29:59.238 [DEBUG] [Thread-194850] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:29:59.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-15T00:29:59.330 [DEBUG] [Thread-194853] [transport.py] [_log()] starting thread (client mode): 0xa57d4be0
2026-02-15T00:29:59.330 [DEBUG] [Thread-194853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:29:59.344 [DEBUG] [Thread-194853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:29:59.344 [INFO] [Thread-194853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:29:59.351 [DEBUG] [Thread-194853] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:29:59.352 [DEBUG] [Thread-194853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:29:59.352 [DEBUG] [Thread-194853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:29:59.352 [DEBUG] [Thread-194853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:29:59.352 [DEBUG] [Thread-194853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:29:59.352 [DEBUG] [Thread-194853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:29:59.352 [DEBUG] [Thread-194853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:29:59.352 [DEBUG] [Thread-194853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:29:59.353 [DEBUG] [Thread-194853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:29:59.353 [DEBUG] [Thread-194853] [transport.py] [_log()] client lang: <none>
2026-02-15T00:29:59.353 [DEBUG] [Thread-194853] [transport.py] [_log()] server lang: <none>
2026-02-15T00:29:59.353 [DEBUG] [Thread-194853] [transport.py] [_log()] kex follows: False
2026-02-15T00:29:59.353 [DEBUG] [Thread-194853] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:29:59.353 [DEBUG] [Thread-194853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:29:59.353 [DEBUG] [Thread-194853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:29:59.353 [DEBUG] [Thread-194853] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:29:59.353 [DEBUG] [Thread-194853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:29:59.354 [DEBUG] [Thread-194853] [transport.py] [_log()] Compression: none
2026-02-15T00:29:59.354 [DEBUG] [Thread-194853] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:29:59.413 [DEBUG] [Thread-194853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:29:59.414 [DEBUG] [Thread-194853] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:29:59.415 [DEBUG] [Thread-194853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:29:59.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:29:59.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:29:59.469 [DEBUG] [Thread-194853] [transport.py] [_log()] userauth is OK
2026-02-15T00:29:59.469 [DEBUG] [Thread-194853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:29:59.469 [DEBUG] [Thread-194853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:29:59.470 [DEBUG] [Thread-194853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:29:59.470 [DEBUG] [Thread-194853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:29:59.488 [INFO] [Thread-194853] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:29:59.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-15T00:29:59.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:30:00.315 [DEBUG] [Thread-194853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:30:00.315 [DEBUG] [Thread-194853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:30:00.365 [DEBUG] [Thread-194853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:30:00.366 [DEBUG] [Thread-194853] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:30:00.381 [DEBUG] [Thread-194853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:30:00.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:30:00.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-15T00:30:00.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:30:00.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:30:00.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:30:00.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:30:00.428 [DEBUG] [Thread-194853] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:30:01.975 [DEBUG] [Thread-194855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:30:09.114 [DEBUG] [Thread-194856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:30:17.016 [DEBUG] [Thread-194857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:30:20.212 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:30:20.213 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:30:30.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:30:30.451 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:30:30.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:30:32.052 [DEBUG] [Thread-194858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:30:32.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 30, 7), 4.49, 73.14, 0.0, 43.28, 8.13, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:30:32.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:30:07
2026-02-15T00:30:32.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:30:32.764 [DEBUG] [Thread-194859] [transport.py] [_log()] starting thread (client mode): 0xa57d64d0
2026-02-15T00:30:32.764 [DEBUG] [Thread-194859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:30:32.784 [DEBUG] [Thread-194859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:30:32.784 [INFO] [Thread-194859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:30:32.787 [DEBUG] [Thread-194859] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:30:32.788 [DEBUG] [Thread-194859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:30:32.788 [DEBUG] [Thread-194859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:30:32.788 [DEBUG] [Thread-194859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:30:32.788 [DEBUG] [Thread-194859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:30:32.788 [DEBUG] [Thread-194859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:30:32.788 [DEBUG] [Thread-194859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:30:32.788 [DEBUG] [Thread-194859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:30:32.788 [DEBUG] [Thread-194859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:30:32.788 [DEBUG] [Thread-194859] [transport.py] [_log()] client lang: <none>
2026-02-15T00:30:32.788 [DEBUG] [Thread-194859] [transport.py] [_log()] server lang: <none>
2026-02-15T00:30:32.788 [DEBUG] [Thread-194859] [transport.py] [_log()] kex follows: False
2026-02-15T00:30:32.788 [DEBUG] [Thread-194859] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:30:32.788 [DEBUG] [Thread-194859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:30:32.788 [DEBUG] [Thread-194859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:30:32.788 [DEBUG] [Thread-194859] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:30:32.788 [DEBUG] [Thread-194859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:30:32.788 [DEBUG] [Thread-194859] [transport.py] [_log()] Compression: none
2026-02-15T00:30:32.788 [DEBUG] [Thread-194859] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:30:32.798 [DEBUG] [Thread-194859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:30:32.799 [DEBUG] [Thread-194859] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:30:32.799 [DEBUG] [Thread-194859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:30:32.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:30:32.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:30:32.801 [DEBUG] [Thread-194859] [transport.py] [_log()] userauth is OK
2026-02-15T00:30:32.801 [DEBUG] [Thread-194859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:30:32.801 [DEBUG] [Thread-194859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:30:32.801 [DEBUG] [Thread-194859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:30:32.801 [DEBUG] [Thread-194859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:30:32.826 [INFO] [Thread-194859] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:30:32.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:30:33.433 [DEBUG] [Thread-194859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:30:33.433 [DEBUG] [Thread-194859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:30:33.434 [DEBUG] [Thread-194859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:30:33.474 [DEBUG] [Thread-194859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:30:33.475 [DEBUG] [Thread-194859] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:30:33.478 [DEBUG] [Thread-194859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:30:33.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:30:33.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:30:33.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:30:33.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:30:33.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:30:33.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:30:33.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:30:33.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:30:33.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:30:33.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.937262 -999.00   +8.10  25.52     77   +4.40 1 1 1 1 1     0    0 2.44 -56.06 ZNESW 25.5 25.5 158.4 39.8 8.6 -24.1 8.4 -23.1 8.2 -22.0 8.6 -23.3
2026-02-15T00:30:33.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:30:33.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:30:33.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.937262
2026-02-15T00:30:33.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:30:33.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:30:33.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:30:33.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:30:33.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:30:33.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:30:07', tmtdew=4.49, humidity=73.14, cloud=0.0, wind=43.28, temperature=8.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:30:07', seeing=1.27, atlas_timestamp='2026-02-14T22:29:39.437', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.005250000000000199, -0.05074999999999896, -0.0495000000000001, 0.010500000000000398, 0.039250000000000895, -0.0259999999999998, 0.06375000000000064, 0.00849999999999973, 0.054999999999999716, -0.05375000000000085, 0.009999999999999787, 0.07099999999999973, 0.03625000000000078, 0.017999999999998906, 0.02949999999999875, 0.034250000000000114, 0.041499999999999204, 0.009999999999999787, -0.011250000000000426, 0.025499999999997414, 0.04224999999999923, 0.02575000000000216, 0.06625000000000014, 0.04849999999999888, 0.019000000000000128, 0.040749999999999176, -0.018499999999999517, 0.06449999999999889, 0.0010000000000012221, 0.04400000000000048, 0.10400000000000098, 0.027749999999999275], zp_timestamp='2026-02-14T22:28:00')
2026-02-15T00:30:33.506 [DEBUG] [Thread-194859] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:30:33.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-15T00:30:33.601 [DEBUG] [Thread-194862] [transport.py] [_log()] starting thread (client mode): 0xa2d00310
2026-02-15T00:30:33.601 [DEBUG] [Thread-194862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:30:33.619 [DEBUG] [Thread-194862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:30:33.619 [INFO] [Thread-194862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:30:33.626 [DEBUG] [Thread-194862] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:30:33.627 [DEBUG] [Thread-194862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:30:33.627 [DEBUG] [Thread-194862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:30:33.627 [DEBUG] [Thread-194862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:30:33.627 [DEBUG] [Thread-194862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:30:33.627 [DEBUG] [Thread-194862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:30:33.627 [DEBUG] [Thread-194862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:30:33.627 [DEBUG] [Thread-194862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:30:33.627 [DEBUG] [Thread-194862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:30:33.627 [DEBUG] [Thread-194862] [transport.py] [_log()] client lang: <none>
2026-02-15T00:30:33.627 [DEBUG] [Thread-194862] [transport.py] [_log()] server lang: <none>
2026-02-15T00:30:33.627 [DEBUG] [Thread-194862] [transport.py] [_log()] kex follows: False
2026-02-15T00:30:33.627 [DEBUG] [Thread-194862] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:30:33.627 [DEBUG] [Thread-194862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:30:33.627 [DEBUG] [Thread-194862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:30:33.627 [DEBUG] [Thread-194862] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:30:33.628 [DEBUG] [Thread-194862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:30:33.628 [DEBUG] [Thread-194862] [transport.py] [_log()] Compression: none
2026-02-15T00:30:33.628 [DEBUG] [Thread-194862] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:30:33.685 [DEBUG] [Thread-194862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:30:33.686 [DEBUG] [Thread-194862] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:30:33.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:30:33.687 [DEBUG] [Thread-194862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:30:33.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:30:33.741 [DEBUG] [Thread-194862] [transport.py] [_log()] userauth is OK
2026-02-15T00:30:33.742 [DEBUG] [Thread-194862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:30:33.742 [DEBUG] [Thread-194862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:30:33.742 [DEBUG] [Thread-194862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:30:33.742 [DEBUG] [Thread-194862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:30:33.761 [INFO] [Thread-194862] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:30:33.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-15T00:30:33.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:30:34.599 [DEBUG] [Thread-194862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:30:34.599 [DEBUG] [Thread-194862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:30:34.647 [DEBUG] [Thread-194862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:30:34.648 [DEBUG] [Thread-194862] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:30:34.657 [DEBUG] [Thread-194862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:30:34.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:30:34.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:30:34.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-15T00:30:34.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:30:34.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:30:34.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:30:34.694 [DEBUG] [Thread-194862] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:30:47.089 [DEBUG] [Thread-194864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:31:02.143 [DEBUG] [Thread-194865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:31:04.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:31:04.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:31:04.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-15T00:31:06.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 30, 42), 4.68, 72.36, 0.0, 37.96, 8.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:31:06.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:30:42
2026-02-15T00:31:06.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:31:07.056 [DEBUG] [Thread-194866] [transport.py] [_log()] starting thread (client mode): 0xa2d003a0
2026-02-15T00:31:07.056 [DEBUG] [Thread-194866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:31:07.077 [DEBUG] [Thread-194866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:31:07.077 [INFO] [Thread-194866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:31:07.080 [DEBUG] [Thread-194866] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:31:07.080 [DEBUG] [Thread-194866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:31:07.080 [DEBUG] [Thread-194866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:31:07.080 [DEBUG] [Thread-194866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:31:07.080 [DEBUG] [Thread-194866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:31:07.080 [DEBUG] [Thread-194866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:31:07.080 [DEBUG] [Thread-194866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:31:07.080 [DEBUG] [Thread-194866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:31:07.080 [DEBUG] [Thread-194866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:31:07.080 [DEBUG] [Thread-194866] [transport.py] [_log()] client lang: <none>
2026-02-15T00:31:07.081 [DEBUG] [Thread-194866] [transport.py] [_log()] server lang: <none>
2026-02-15T00:31:07.081 [DEBUG] [Thread-194866] [transport.py] [_log()] kex follows: False
2026-02-15T00:31:07.081 [DEBUG] [Thread-194866] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:31:07.081 [DEBUG] [Thread-194866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:31:07.081 [DEBUG] [Thread-194866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:31:07.081 [DEBUG] [Thread-194866] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:31:07.081 [DEBUG] [Thread-194866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:31:07.081 [DEBUG] [Thread-194866] [transport.py] [_log()] Compression: none
2026-02-15T00:31:07.081 [DEBUG] [Thread-194866] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:31:07.100 [DEBUG] [Thread-194866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:31:07.100 [DEBUG] [Thread-194866] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:31:07.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:31:07.102 [DEBUG] [Thread-194866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:31:07.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:31:07.104 [DEBUG] [Thread-194866] [transport.py] [_log()] userauth is OK
2026-02-15T00:31:07.104 [DEBUG] [Thread-194866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:31:07.104 [DEBUG] [Thread-194866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:31:07.104 [DEBUG] [Thread-194866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:31:07.104 [DEBUG] [Thread-194866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:31:07.129 [INFO] [Thread-194866] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:31:07.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:31:07.754 [DEBUG] [Thread-194866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:31:07.754 [DEBUG] [Thread-194866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:31:07.754 [DEBUG] [Thread-194866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:31:07.795 [DEBUG] [Thread-194866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:31:07.795 [DEBUG] [Thread-194866] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:31:07.797 [DEBUG] [Thread-194866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:31:07.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:31:07.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:31:07.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:31:07.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:31:07.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:31:07.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:31:07.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:31:07.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:31:07.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:31:07.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.937609 -999.00   +8.10  29.55     77   +4.50 1 1 1 1 1     0    0 2.22 -58.49 ZNESW 29.6 29.6 160.2 44.3 8.6 -24.1 8.4 -23.0 8.2 -22.2 8.6 -23.3
2026-02-15T00:31:07.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:31:07.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:31:07.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.937609
2026-02-15T00:31:07.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:31:07.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:31:07.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:31:07.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:31:07.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:31:07.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:30:42', tmtdew=4.68, humidity=72.36, cloud=0.0, wind=37.96, temperature=8.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:30:43', seeing=1.21, atlas_timestamp='2026-02-14T22:30:09.418', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.005250000000000199, -0.05074999999999896, -0.0495000000000001, 0.010500000000000398, 0.039250000000000895, -0.0259999999999998, 0.06375000000000064, 0.00849999999999973, 0.054999999999999716, -0.05375000000000085, 0.009999999999999787, 0.07099999999999973, 0.03625000000000078, 0.017999999999998906, 0.02949999999999875, 0.034250000000000114, 0.041499999999999204, 0.009999999999999787, -0.011250000000000426, 0.025499999999997414, 0.04224999999999923, 0.02575000000000216, 0.06625000000000014, 0.04849999999999888, 0.019000000000000128, 0.040749999999999176, -0.018499999999999517, 0.06449999999999889, 0.0010000000000012221, 0.04400000000000048, 0.10400000000000098, 0.027749999999999275], zp_timestamp='2026-02-14T22:28:00')
2026-02-15T00:31:07.818 [DEBUG] [Thread-194866] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:31:07.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-15T00:31:07.902 [DEBUG] [Thread-194869] [transport.py] [_log()] starting thread (client mode): 0xa2d949d0
2026-02-15T00:31:07.902 [DEBUG] [Thread-194869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:31:07.916 [DEBUG] [Thread-194869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:31:07.916 [INFO] [Thread-194869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:31:07.924 [DEBUG] [Thread-194869] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:31:07.924 [DEBUG] [Thread-194869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:31:07.924 [DEBUG] [Thread-194869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:31:07.924 [DEBUG] [Thread-194869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:31:07.924 [DEBUG] [Thread-194869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:31:07.924 [DEBUG] [Thread-194869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:31:07.924 [DEBUG] [Thread-194869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:31:07.924 [DEBUG] [Thread-194869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:31:07.924 [DEBUG] [Thread-194869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:31:07.924 [DEBUG] [Thread-194869] [transport.py] [_log()] client lang: <none>
2026-02-15T00:31:07.924 [DEBUG] [Thread-194869] [transport.py] [_log()] server lang: <none>
2026-02-15T00:31:07.924 [DEBUG] [Thread-194869] [transport.py] [_log()] kex follows: False
2026-02-15T00:31:07.924 [DEBUG] [Thread-194869] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:31:07.924 [DEBUG] [Thread-194869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:31:07.924 [DEBUG] [Thread-194869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:31:07.924 [DEBUG] [Thread-194869] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:31:07.924 [DEBUG] [Thread-194869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:31:07.924 [DEBUG] [Thread-194869] [transport.py] [_log()] Compression: none
2026-02-15T00:31:07.924 [DEBUG] [Thread-194869] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:31:07.983 [DEBUG] [Thread-194869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:31:07.984 [DEBUG] [Thread-194869] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:31:07.984 [DEBUG] [Thread-194869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:31:07.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:31:07.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:31:08.041 [DEBUG] [Thread-194869] [transport.py] [_log()] userauth is OK
2026-02-15T00:31:08.041 [DEBUG] [Thread-194869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:31:08.041 [DEBUG] [Thread-194869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:31:08.041 [DEBUG] [Thread-194869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:31:08.041 [DEBUG] [Thread-194869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:31:08.054 [INFO] [Thread-194869] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:31:08.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-15T00:31:08.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:31:08.874 [DEBUG] [Thread-194869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:31:08.874 [DEBUG] [Thread-194869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:31:08.923 [DEBUG] [Thread-194869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:31:08.923 [DEBUG] [Thread-194869] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:31:08.932 [DEBUG] [Thread-194869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:31:08.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:31:08.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-15T00:31:08.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:31:08.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:31:08.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:31:08.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:31:08.969 [DEBUG] [Thread-194869] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:31:09.186 [DEBUG] [Thread-194871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:31:17.178 [DEBUG] [Thread-194872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:31:20.417 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:31:20.418 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:31:32.225 [DEBUG] [Thread-194873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:31:38.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:31:38.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:31:38.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-15T00:31:41.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 31, 18), 4.46, 73.31, 0.0, 38.94, 8.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:31:41.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:31:18
2026-02-15T00:31:41.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:31:41.601 [DEBUG] [Thread-194874] [transport.py] [_log()] starting thread (client mode): 0xa2d78640
2026-02-15T00:31:41.601 [DEBUG] [Thread-194874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:31:41.621 [DEBUG] [Thread-194874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:31:41.621 [INFO] [Thread-194874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:31:41.624 [DEBUG] [Thread-194874] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:31:41.624 [DEBUG] [Thread-194874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:31:41.624 [DEBUG] [Thread-194874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:31:41.624 [DEBUG] [Thread-194874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:31:41.624 [DEBUG] [Thread-194874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:31:41.624 [DEBUG] [Thread-194874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:31:41.624 [DEBUG] [Thread-194874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:31:41.624 [DEBUG] [Thread-194874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:31:41.624 [DEBUG] [Thread-194874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:31:41.624 [DEBUG] [Thread-194874] [transport.py] [_log()] client lang: <none>
2026-02-15T00:31:41.624 [DEBUG] [Thread-194874] [transport.py] [_log()] server lang: <none>
2026-02-15T00:31:41.624 [DEBUG] [Thread-194874] [transport.py] [_log()] kex follows: False
2026-02-15T00:31:41.624 [DEBUG] [Thread-194874] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:31:41.624 [DEBUG] [Thread-194874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:31:41.624 [DEBUG] [Thread-194874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:31:41.624 [DEBUG] [Thread-194874] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:31:41.624 [DEBUG] [Thread-194874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:31:41.624 [DEBUG] [Thread-194874] [transport.py] [_log()] Compression: none
2026-02-15T00:31:41.624 [DEBUG] [Thread-194874] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:31:41.641 [DEBUG] [Thread-194874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:31:41.642 [DEBUG] [Thread-194874] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:31:41.642 [DEBUG] [Thread-194874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:31:41.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:31:41.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:31:41.644 [DEBUG] [Thread-194874] [transport.py] [_log()] userauth is OK
2026-02-15T00:31:41.645 [DEBUG] [Thread-194874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:31:41.645 [DEBUG] [Thread-194874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:31:41.645 [DEBUG] [Thread-194874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:31:41.645 [DEBUG] [Thread-194874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:31:41.662 [INFO] [Thread-194874] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:31:41.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:31:42.282 [DEBUG] [Thread-194874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:31:42.282 [DEBUG] [Thread-194874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:31:42.282 [DEBUG] [Thread-194874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:31:42.324 [DEBUG] [Thread-194874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:31:42.324 [DEBUG] [Thread-194874] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:31:42.327 [DEBUG] [Thread-194874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:31:42.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:31:42.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:31:42.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:31:42.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:31:42.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:31:42.351 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:31:42.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:31:42.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:31:42.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:31:42.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.937957 -999.00   +8.10  36.60     78   +4.50 1 1 2 1 1     0    0 2.28 -61.91 ZNESW 36.6 36.6 152.3 46.0 8.6 -24.0 8.4 -22.9 8.2 -22.1 8.6 -23.4
2026-02-15T00:31:42.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:31:42.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:31:42.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.937957
2026-02-15T00:31:42.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:31:42.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:31:42.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:31:42.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:31:42.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:31:42.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:31:18', tmtdew=4.46, humidity=73.31, cloud=0.0, wind=38.94, temperature=8.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:31:18', seeing=1.27, atlas_timestamp='2026-02-14T22:30:39.485', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.005250000000000199, -0.05074999999999896, -0.0495000000000001, 0.010500000000000398, 0.039250000000000895, -0.0259999999999998, 0.06375000000000064, 0.00849999999999973, 0.054999999999999716, -0.05375000000000085, 0.009999999999999787, 0.07099999999999973, 0.03625000000000078, 0.017999999999998906, 0.02949999999999875, 0.034250000000000114, 0.041499999999999204, 0.009999999999999787, -0.011250000000000426, 0.025499999999997414, 0.04224999999999923, 0.02575000000000216, 0.06625000000000014, 0.04849999999999888, 0.019000000000000128, 0.040749999999999176, -0.018499999999999517, 0.06449999999999889, 0.0010000000000012221, 0.04400000000000048, 0.10400000000000098, 0.027749999999999275], zp_timestamp='2026-02-14T22:28:00')
2026-02-15T00:31:42.354 [DEBUG] [Thread-194874] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:31:42.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T00:31:42.448 [DEBUG] [Thread-194877] [transport.py] [_log()] starting thread (client mode): 0xa2d6c0d0
2026-02-15T00:31:42.449 [DEBUG] [Thread-194877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:31:42.464 [DEBUG] [Thread-194877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:31:42.464 [INFO] [Thread-194877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:31:42.472 [DEBUG] [Thread-194877] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:31:42.472 [DEBUG] [Thread-194877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:31:42.472 [DEBUG] [Thread-194877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:31:42.472 [DEBUG] [Thread-194877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:31:42.472 [DEBUG] [Thread-194877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:31:42.472 [DEBUG] [Thread-194877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:31:42.472 [DEBUG] [Thread-194877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:31:42.472 [DEBUG] [Thread-194877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:31:42.472 [DEBUG] [Thread-194877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:31:42.472 [DEBUG] [Thread-194877] [transport.py] [_log()] client lang: <none>
2026-02-15T00:31:42.472 [DEBUG] [Thread-194877] [transport.py] [_log()] server lang: <none>
2026-02-15T00:31:42.472 [DEBUG] [Thread-194877] [transport.py] [_log()] kex follows: False
2026-02-15T00:31:42.472 [DEBUG] [Thread-194877] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:31:42.472 [DEBUG] [Thread-194877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:31:42.473 [DEBUG] [Thread-194877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:31:42.473 [DEBUG] [Thread-194877] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:31:42.473 [DEBUG] [Thread-194877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:31:42.473 [DEBUG] [Thread-194877] [transport.py] [_log()] Compression: none
2026-02-15T00:31:42.473 [DEBUG] [Thread-194877] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:31:42.529 [DEBUG] [Thread-194877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:31:42.529 [DEBUG] [Thread-194877] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:31:42.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:31:42.530 [DEBUG] [Thread-194877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:31:42.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:31:42.585 [DEBUG] [Thread-194877] [transport.py] [_log()] userauth is OK
2026-02-15T00:31:42.586 [DEBUG] [Thread-194877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:31:42.586 [DEBUG] [Thread-194877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:31:42.586 [DEBUG] [Thread-194877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:31:42.586 [DEBUG] [Thread-194877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:31:42.604 [INFO] [Thread-194877] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:31:42.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-15T00:31:42.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:31:43.427 [DEBUG] [Thread-194877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:31:43.427 [DEBUG] [Thread-194877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:31:43.475 [DEBUG] [Thread-194877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:31:43.476 [DEBUG] [Thread-194877] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:31:43.485 [DEBUG] [Thread-194877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:31:43.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:31:43.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-15T00:31: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-15T00:31:43.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:31:43.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:31:43.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:31:43.521 [DEBUG] [Thread-194877] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:31:47.262 [DEBUG] [Thread-194879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:32:02.323 [DEBUG] [Thread-194880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:32:09.243 [DEBUG] [Thread-194881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:32:13.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:32:13.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:32:13.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-15T00:32:15.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 31, 53), 4.33, 73.96, 0.0, 35.31, 8.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:32:15.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:31:53
2026-02-15T00:32:15.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:32:16.013 [DEBUG] [Thread-194882] [transport.py] [_log()] starting thread (client mode): 0xa2d02ec0
2026-02-15T00:32:16.013 [DEBUG] [Thread-194882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:32:16.036 [DEBUG] [Thread-194882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:32:16.036 [INFO] [Thread-194882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:32:16.039 [DEBUG] [Thread-194882] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:32:16.039 [DEBUG] [Thread-194882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:32:16.039 [DEBUG] [Thread-194882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:32:16.039 [DEBUG] [Thread-194882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:32:16.039 [DEBUG] [Thread-194882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:32:16.040 [DEBUG] [Thread-194882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:32:16.040 [DEBUG] [Thread-194882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:32:16.040 [DEBUG] [Thread-194882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:32:16.040 [DEBUG] [Thread-194882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:32:16.040 [DEBUG] [Thread-194882] [transport.py] [_log()] client lang: <none>
2026-02-15T00:32:16.040 [DEBUG] [Thread-194882] [transport.py] [_log()] server lang: <none>
2026-02-15T00:32:16.040 [DEBUG] [Thread-194882] [transport.py] [_log()] kex follows: False
2026-02-15T00:32:16.040 [DEBUG] [Thread-194882] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:32:16.040 [DEBUG] [Thread-194882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:32:16.040 [DEBUG] [Thread-194882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:32:16.040 [DEBUG] [Thread-194882] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:32:16.041 [DEBUG] [Thread-194882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:32:16.041 [DEBUG] [Thread-194882] [transport.py] [_log()] Compression: none
2026-02-15T00:32:16.041 [DEBUG] [Thread-194882] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:32:16.059 [DEBUG] [Thread-194882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:32:16.060 [DEBUG] [Thread-194882] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:32:16.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:32:16.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:32:16.062 [DEBUG] [Thread-194882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:32:16.063 [DEBUG] [Thread-194882] [transport.py] [_log()] userauth is OK
2026-02-15T00:32:16.063 [DEBUG] [Thread-194882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:32:16.063 [DEBUG] [Thread-194882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:32:16.063 [DEBUG] [Thread-194882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:32:16.063 [DEBUG] [Thread-194882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:32:16.099 [INFO] [Thread-194882] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:32:16.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:32:16.670 [DEBUG] [Thread-194882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:32:16.670 [DEBUG] [Thread-194882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:32:16.670 [DEBUG] [Thread-194882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:32:16.710 [DEBUG] [Thread-194882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:32:16.711 [DEBUG] [Thread-194882] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:32:16.714 [DEBUG] [Thread-194882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:32:16.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:32:16.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:32:16.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:32:16.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:32:16.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:32:16.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:32:16.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:32:16.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:32:16.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:32:16.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.938651 -999.00   +8.10  24.80     78   +4.50 1 1 1 1 1     0    0 1.81 -74.45 ZNESW 24.8 24.8 146.4 43.8 8.6 -24.0 8.4 -23.0 8.2 -22.1 8.6 -23.2
2026-02-15T00:32:16.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:32:16.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:32:16.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.938651
2026-02-15T00:32:16.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:32:16.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:32:16.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:32:16.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:32:16.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:32:16.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:31:53', tmtdew=4.33, humidity=73.96, cloud=0.0, wind=35.31, temperature=8.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:31:53', seeing=1.19, atlas_timestamp='2026-02-14T22:31:39.446', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.005250000000000199, -0.05074999999999896, -0.0495000000000001, 0.010500000000000398, 0.039250000000000895, -0.0259999999999998, 0.06375000000000064, 0.00849999999999973, 0.054999999999999716, -0.05375000000000085, 0.009999999999999787, 0.07099999999999973, 0.03625000000000078, 0.017999999999998906, 0.02949999999999875, 0.034250000000000114, 0.041499999999999204, 0.009999999999999787, -0.011250000000000426, 0.025499999999997414, 0.04224999999999923, 0.02575000000000216, 0.06625000000000014, 0.04849999999999888, 0.019000000000000128, 0.040749999999999176, -0.018499999999999517, 0.06449999999999889, 0.0010000000000012221, 0.04400000000000048, 0.10400000000000098, 0.027749999999999275], zp_timestamp='2026-02-14T22:28:00')
2026-02-15T00:32:16.741 [DEBUG] [Thread-194882] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:32:16.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T00:32:16.845 [DEBUG] [Thread-194885] [transport.py] [_log()] starting thread (client mode): 0xa2d13eb0
2026-02-15T00:32:16.846 [DEBUG] [Thread-194885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:32:16.859 [DEBUG] [Thread-194885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:32:16.859 [INFO] [Thread-194885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:32:16.866 [DEBUG] [Thread-194885] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:32:16.867 [DEBUG] [Thread-194885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:32:16.867 [DEBUG] [Thread-194885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:32:16.867 [DEBUG] [Thread-194885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:32:16.867 [DEBUG] [Thread-194885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:32:16.867 [DEBUG] [Thread-194885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:32:16.867 [DEBUG] [Thread-194885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:32:16.867 [DEBUG] [Thread-194885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:32:16.867 [DEBUG] [Thread-194885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:32:16.867 [DEBUG] [Thread-194885] [transport.py] [_log()] client lang: <none>
2026-02-15T00:32:16.867 [DEBUG] [Thread-194885] [transport.py] [_log()] server lang: <none>
2026-02-15T00:32:16.867 [DEBUG] [Thread-194885] [transport.py] [_log()] kex follows: False
2026-02-15T00:32:16.867 [DEBUG] [Thread-194885] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:32:16.867 [DEBUG] [Thread-194885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:32:16.867 [DEBUG] [Thread-194885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:32:16.867 [DEBUG] [Thread-194885] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:32:16.867 [DEBUG] [Thread-194885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:32:16.867 [DEBUG] [Thread-194885] [transport.py] [_log()] Compression: none
2026-02-15T00:32:16.867 [DEBUG] [Thread-194885] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:32:16.925 [DEBUG] [Thread-194885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:32:16.926 [DEBUG] [Thread-194885] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:32:16.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:32:16.927 [DEBUG] [Thread-194885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:32:16.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:32:16.981 [DEBUG] [Thread-194885] [transport.py] [_log()] userauth is OK
2026-02-15T00:32:16.982 [DEBUG] [Thread-194885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:32:16.982 [DEBUG] [Thread-194885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:32:16.982 [DEBUG] [Thread-194885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:32:16.982 [DEBUG] [Thread-194885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:32:17.000 [INFO] [Thread-194885] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:32:17.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T00:32:17.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:32:17.360 [DEBUG] [Thread-194887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:32:17.813 [DEBUG] [Thread-194885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:32:17.814 [DEBUG] [Thread-194885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:32:17.861 [DEBUG] [Thread-194885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:32:17.861 [DEBUG] [Thread-194885] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:32:17.869 [DEBUG] [Thread-194885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:32:17.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:32:17.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:32:17.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-15T00:32:17.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:32:17.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:32:17.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:32:17.900 [DEBUG] [Thread-194885] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:32:20.624 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:32:20.625 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:32:32.420 [DEBUG] [Thread-194888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:32:47.461 [DEBUG] [Thread-194889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:32:47.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:32:47.894 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:32:47.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-15T00:32:49.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 32, 28), 4.32, 74.04, 0.0, 39.13, 8.13, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:32:49.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:32:28
2026-02-15T00:32:50.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:32:50.484 [DEBUG] [Thread-194890] [transport.py] [_log()] starting thread (client mode): 0xa2d94d90
2026-02-15T00:32:50.484 [DEBUG] [Thread-194890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:32:50.505 [DEBUG] [Thread-194890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:32:50.505 [INFO] [Thread-194890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:32:50.509 [DEBUG] [Thread-194890] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:32:50.509 [DEBUG] [Thread-194890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:32:50.509 [DEBUG] [Thread-194890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:32:50.509 [DEBUG] [Thread-194890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:32:50.509 [DEBUG] [Thread-194890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:32:50.509 [DEBUG] [Thread-194890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:32:50.509 [DEBUG] [Thread-194890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:32:50.509 [DEBUG] [Thread-194890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:32:50.509 [DEBUG] [Thread-194890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:32:50.509 [DEBUG] [Thread-194890] [transport.py] [_log()] client lang: <none>
2026-02-15T00:32:50.509 [DEBUG] [Thread-194890] [transport.py] [_log()] server lang: <none>
2026-02-15T00:32:50.509 [DEBUG] [Thread-194890] [transport.py] [_log()] kex follows: False
2026-02-15T00:32:50.509 [DEBUG] [Thread-194890] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:32:50.509 [DEBUG] [Thread-194890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:32:50.509 [DEBUG] [Thread-194890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:32:50.509 [DEBUG] [Thread-194890] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:32:50.509 [DEBUG] [Thread-194890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:32:50.509 [DEBUG] [Thread-194890] [transport.py] [_log()] Compression: none
2026-02-15T00:32:50.509 [DEBUG] [Thread-194890] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:32:50.527 [DEBUG] [Thread-194890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:32:50.528 [DEBUG] [Thread-194890] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:32:50.528 [DEBUG] [Thread-194890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:32:50.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:32:50.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:32:50.530 [DEBUG] [Thread-194890] [transport.py] [_log()] userauth is OK
2026-02-15T00:32:50.530 [DEBUG] [Thread-194890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:32:50.531 [DEBUG] [Thread-194890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:32:50.531 [DEBUG] [Thread-194890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:32:50.531 [DEBUG] [Thread-194890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:32:50.553 [INFO] [Thread-194890] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:32:50.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:32:51.160 [DEBUG] [Thread-194890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:32:51.161 [DEBUG] [Thread-194890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:32:51.161 [DEBUG] [Thread-194890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:32:51.201 [DEBUG] [Thread-194890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:32:51.201 [DEBUG] [Thread-194890] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:32:51.204 [DEBUG] [Thread-194890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:32:51.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:32:51.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:32:51.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:32:51.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:32:51.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:32:51.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:32:51.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:32:51.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:32:51.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:32:51.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.938998 -999.00   +8.00  23.46     78   +4.50 1 1 1 1 1     0    0 1.94 -68.93 ZNESW 23.5 23.5 146.6 32.7 8.6 -24.0 8.4 -22.9 8.2 -22.2 8.6 -23.4
2026-02-15T00:32:51.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:32:51.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:32:51.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.938998
2026-02-15T00:32:51.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:32:51.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:32:51.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:32:51.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:32:51.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:32:51.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:32:28', tmtdew=4.32, humidity=74.04, cloud=0.0, wind=39.13, temperature=8.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:32:28', seeing=1.43, atlas_timestamp='2026-02-14T22:32:09.427', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03625000000000078, -0.005250000000000199, -0.05074999999999896, -0.0495000000000001, 0.010500000000000398, 0.039250000000000895, -0.0259999999999998, 0.06375000000000064, 0.00849999999999973, 0.054999999999999716, -0.05375000000000085, 0.009999999999999787, 0.07099999999999973, 0.03625000000000078, 0.017999999999998906, 0.02949999999999875, 0.034250000000000114, 0.041499999999999204, 0.009999999999999787, -0.011250000000000426, 0.025499999999997414, 0.04224999999999923, 0.02575000000000216, 0.06625000000000014, 0.04849999999999888, 0.019000000000000128, 0.040749999999999176, -0.018499999999999517, 0.06449999999999889, 0.0010000000000012221, 0.04400000000000048, 0.10400000000000098, 0.027749999999999275], zp_timestamp='2026-02-14T22:28:00')
2026-02-15T00:32:51.224 [DEBUG] [Thread-194890] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:32:51.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T00:32:51.314 [DEBUG] [Thread-194893] [transport.py] [_log()] starting thread (client mode): 0xa2d7b490
2026-02-15T00:32:51.314 [DEBUG] [Thread-194893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:32:51.328 [DEBUG] [Thread-194893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:32:51.328 [INFO] [Thread-194893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:32:51.336 [DEBUG] [Thread-194893] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:32:51.336 [DEBUG] [Thread-194893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:32:51.336 [DEBUG] [Thread-194893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:32:51.336 [DEBUG] [Thread-194893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:32:51.336 [DEBUG] [Thread-194893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:32:51.336 [DEBUG] [Thread-194893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:32:51.336 [DEBUG] [Thread-194893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:32:51.336 [DEBUG] [Thread-194893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:32:51.336 [DEBUG] [Thread-194893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:32:51.336 [DEBUG] [Thread-194893] [transport.py] [_log()] client lang: <none>
2026-02-15T00:32:51.337 [DEBUG] [Thread-194893] [transport.py] [_log()] server lang: <none>
2026-02-15T00:32:51.337 [DEBUG] [Thread-194893] [transport.py] [_log()] kex follows: False
2026-02-15T00:32:51.337 [DEBUG] [Thread-194893] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:32:51.337 [DEBUG] [Thread-194893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:32:51.337 [DEBUG] [Thread-194893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:32:51.337 [DEBUG] [Thread-194893] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:32:51.337 [DEBUG] [Thread-194893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:32:51.337 [DEBUG] [Thread-194893] [transport.py] [_log()] Compression: none
2026-02-15T00:32:51.337 [DEBUG] [Thread-194893] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:32:51.392 [DEBUG] [Thread-194893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:32:51.392 [DEBUG] [Thread-194893] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:32:51.392 [DEBUG] [Thread-194893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:32:51.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:32:51.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:32:51.449 [DEBUG] [Thread-194893] [transport.py] [_log()] userauth is OK
2026-02-15T00:32:51.449 [DEBUG] [Thread-194893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:32:51.449 [DEBUG] [Thread-194893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:32:51.449 [DEBUG] [Thread-194893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:32:51.449 [DEBUG] [Thread-194893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:32:51.471 [INFO] [Thread-194893] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:32:51.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T00:32:51.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:32:52.246 [DEBUG] [Thread-194893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:32:52.247 [DEBUG] [Thread-194893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:32:52.294 [DEBUG] [Thread-194893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:32:52.294 [DEBUG] [Thread-194893] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:32:52.304 [DEBUG] [Thread-194893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:32:52.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:32:52.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:32:52.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:32:52.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:32:52.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:32:52.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:32:52.342 [DEBUG] [Thread-194893] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:33:02.499 [DEBUG] [Thread-194895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:33:09.299 [DEBUG] [Thread-194896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:33:17.561 [DEBUG] [Thread-194897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:33:20.826 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:33:20.827 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:33:22.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:33:22.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:33:22.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-15T00:33:24.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 33, 3), 4.31, 74.06, 0.0, 38.83, 8.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:33:24.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:33:03
2026-02-15T00:33:24.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:33:24.748 [DEBUG] [Thread-194898] [transport.py] [_log()] starting thread (client mode): 0xa2d6e980
2026-02-15T00:33:24.749 [DEBUG] [Thread-194898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:33:24.767 [DEBUG] [Thread-194898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:33:24.767 [INFO] [Thread-194898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:33:24.771 [DEBUG] [Thread-194898] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:33:24.771 [DEBUG] [Thread-194898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:33:24.771 [DEBUG] [Thread-194898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:33:24.771 [DEBUG] [Thread-194898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:33:24.771 [DEBUG] [Thread-194898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:33:24.771 [DEBUG] [Thread-194898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:33:24.771 [DEBUG] [Thread-194898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:33:24.771 [DEBUG] [Thread-194898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:33:24.771 [DEBUG] [Thread-194898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:33:24.771 [DEBUG] [Thread-194898] [transport.py] [_log()] client lang: <none>
2026-02-15T00:33:24.771 [DEBUG] [Thread-194898] [transport.py] [_log()] server lang: <none>
2026-02-15T00:33:24.771 [DEBUG] [Thread-194898] [transport.py] [_log()] kex follows: False
2026-02-15T00:33:24.771 [DEBUG] [Thread-194898] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:33:24.771 [DEBUG] [Thread-194898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:33:24.771 [DEBUG] [Thread-194898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:33:24.772 [DEBUG] [Thread-194898] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:33:24.772 [DEBUG] [Thread-194898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:33:24.772 [DEBUG] [Thread-194898] [transport.py] [_log()] Compression: none
2026-02-15T00:33:24.772 [DEBUG] [Thread-194898] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:33:24.790 [DEBUG] [Thread-194898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:33:24.791 [DEBUG] [Thread-194898] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:33:24.791 [DEBUG] [Thread-194898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:33:24.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:33:24.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:33:24.793 [DEBUG] [Thread-194898] [transport.py] [_log()] userauth is OK
2026-02-15T00:33:24.793 [DEBUG] [Thread-194898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:33:24.793 [DEBUG] [Thread-194898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:33:24.793 [DEBUG] [Thread-194898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:33:24.794 [DEBUG] [Thread-194898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:33:24.811 [INFO] [Thread-194898] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:33:24.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:33:25.601 [DEBUG] [Thread-194898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:33:25.602 [DEBUG] [Thread-194898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:33:25.602 [DEBUG] [Thread-194898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:33:25.642 [DEBUG] [Thread-194898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:33:25.642 [DEBUG] [Thread-194898] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:33:25.645 [DEBUG] [Thread-194898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:33:25.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:33:25.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:33:25.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:33:25.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:33:25.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:33:25.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:33:25.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:33:25.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:33:25.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:33:25.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.939346 -999.00   +8.00  33.41     78   +4.50 1 1 2 1 1     0    0 2.00 -65.24 ZNESW 33.4 33.4 160.6 40.0 8.6 -24.1 8.4 -23.0 8.2 -22.1 8.5 -23.4
2026-02-15T00:33:25.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:33:25.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:33:25.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.939346
2026-02-15T00:33:25.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:33:25.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:33:25.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:33:25.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:33:25.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:33:25.671 [DEBUG] [Thread-194898] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:33:25.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:33:03', tmtdew=4.31, humidity=74.06, cloud=0.0, wind=38.83, temperature=8.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:33:04', seeing=1.11, atlas_timestamp='2026-02-14T22:32:39.494', atlas_cloud=1, atlas_rain=1, zp_data=[0.03575000000000017, 0.043250000000000455, 0.03575000000000017, 0.050499999999999545, 0.04049999999999976, 0.11925000000000097, 0.07199999999999918, 0.08325000000000138, 0.0884999999999998, 0.10599999999999987, 0.019249999999999545, 0.06300000000000061, 0.10599999999999987, 0.1042500000000004, 0.10799999999999876, 0.08799999999999919, 0.11474999999999902, 0.1095000000000006, 0.06999999999999851, 0.04274999999999807, 0.12399999999999878, 0.1117499999999989, 0.08174999999999955, 0.14374999999999893, 0.14399999999999835, 0.10250000000000092, 0.10975000000000001, 0.061500000000000554, 0.12700000000000067, 0.11000000000000121, 0.13500000000000156, 0.2190000000000012, 0.11874999999999858], zp_timestamp='2026-02-14T22:31:00')
2026-02-15T00:33:25.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-15T00:33:25.789 [DEBUG] [Thread-194901] [transport.py] [_log()] starting thread (client mode): 0xa57424d0
2026-02-15T00:33:25.789 [DEBUG] [Thread-194901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:33:25.802 [DEBUG] [Thread-194901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:33:25.803 [INFO] [Thread-194901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:33:25.810 [DEBUG] [Thread-194901] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:33:25.810 [DEBUG] [Thread-194901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:33:25.810 [DEBUG] [Thread-194901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:33:25.810 [DEBUG] [Thread-194901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:33:25.810 [DEBUG] [Thread-194901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:33:25.811 [DEBUG] [Thread-194901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:33:25.811 [DEBUG] [Thread-194901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:33:25.811 [DEBUG] [Thread-194901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:33:25.811 [DEBUG] [Thread-194901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:33:25.811 [DEBUG] [Thread-194901] [transport.py] [_log()] client lang: <none>
2026-02-15T00:33:25.811 [DEBUG] [Thread-194901] [transport.py] [_log()] server lang: <none>
2026-02-15T00:33:25.811 [DEBUG] [Thread-194901] [transport.py] [_log()] kex follows: False
2026-02-15T00:33:25.811 [DEBUG] [Thread-194901] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:33:25.811 [DEBUG] [Thread-194901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:33:25.812 [DEBUG] [Thread-194901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:33:25.812 [DEBUG] [Thread-194901] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:33:25.812 [DEBUG] [Thread-194901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:33:25.812 [DEBUG] [Thread-194901] [transport.py] [_log()] Compression: none
2026-02-15T00:33:25.812 [DEBUG] [Thread-194901] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:33:25.869 [DEBUG] [Thread-194901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:33:25.869 [DEBUG] [Thread-194901] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:33:25.870 [DEBUG] [Thread-194901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:33:25.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:33:25.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:33:25.925 [DEBUG] [Thread-194901] [transport.py] [_log()] userauth is OK
2026-02-15T00:33:25.925 [DEBUG] [Thread-194901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:33:25.925 [DEBUG] [Thread-194901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:33:25.925 [DEBUG] [Thread-194901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:33:25.925 [DEBUG] [Thread-194901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:33:25.947 [INFO] [Thread-194901] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:33:25.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-15T00:33:25.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:33:26.743 [DEBUG] [Thread-194901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:33:26.744 [DEBUG] [Thread-194901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:33:26.791 [DEBUG] [Thread-194901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:33:26.792 [DEBUG] [Thread-194901] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:33:26.801 [DEBUG] [Thread-194901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:33:26.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:33:26.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-15T00:33:26.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-15T00:33:26.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:33:26.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:33:26.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:33:26.840 [DEBUG] [Thread-194901] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:33:32.594 [DEBUG] [Thread-194903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:33:47.656 [DEBUG] [Thread-194904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:33:56.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:33:56.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:33:56.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-15T00:33:58.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 33, 39), 4.49, 73.32, 0.0, 42.37, 8.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:33:58.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:33:39
2026-02-15T00:33:59.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:33:59.208 [DEBUG] [Thread-194905] [transport.py] [_log()] starting thread (client mode): 0xa2d6ee90
2026-02-15T00:33:59.208 [DEBUG] [Thread-194905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:33:59.228 [DEBUG] [Thread-194905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:33:59.228 [INFO] [Thread-194905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:33:59.229 [DEBUG] [Thread-194905] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:33:59.229 [DEBUG] [Thread-194905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:33:59.229 [DEBUG] [Thread-194905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:33:59.229 [DEBUG] [Thread-194905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:33:59.229 [DEBUG] [Thread-194905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:33:59.229 [DEBUG] [Thread-194905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:33:59.229 [DEBUG] [Thread-194905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:33:59.229 [DEBUG] [Thread-194905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:33:59.229 [DEBUG] [Thread-194905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:33:59.229 [DEBUG] [Thread-194905] [transport.py] [_log()] client lang: <none>
2026-02-15T00:33:59.229 [DEBUG] [Thread-194905] [transport.py] [_log()] server lang: <none>
2026-02-15T00:33:59.229 [DEBUG] [Thread-194905] [transport.py] [_log()] kex follows: False
2026-02-15T00:33:59.229 [DEBUG] [Thread-194905] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:33:59.229 [DEBUG] [Thread-194905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:33:59.229 [DEBUG] [Thread-194905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:33:59.229 [DEBUG] [Thread-194905] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:33:59.229 [DEBUG] [Thread-194905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:33:59.229 [DEBUG] [Thread-194905] [transport.py] [_log()] Compression: none
2026-02-15T00:33:59.229 [DEBUG] [Thread-194905] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:33:59.238 [DEBUG] [Thread-194905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:33:59.238 [DEBUG] [Thread-194905] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:33:59.239 [DEBUG] [Thread-194905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:33:59.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:33:59.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:33:59.240 [DEBUG] [Thread-194905] [transport.py] [_log()] userauth is OK
2026-02-15T00:33:59.240 [DEBUG] [Thread-194905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:33:59.240 [DEBUG] [Thread-194905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:33:59.241 [DEBUG] [Thread-194905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:33:59.241 [DEBUG] [Thread-194905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:33:59.258 [INFO] [Thread-194905] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:33:59.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:33:59.873 [DEBUG] [Thread-194905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:33:59.874 [DEBUG] [Thread-194905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:33:59.874 [DEBUG] [Thread-194905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:33:59.915 [DEBUG] [Thread-194905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:33:59.915 [DEBUG] [Thread-194905] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:33:59.918 [DEBUG] [Thread-194905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:33:59.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:33:59.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:33:59.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:33:59.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:33:59.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:33:59.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:33:59.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:33:59.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:33:59.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:33:59.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.939693 -999.00   +8.00  29.43     78   +4.60 1 1 1 1 1     0    0 2.05 -64.74 ZNESW 29.4 29.4 152.6 44.8 8.6 -24.0 8.4 -23.1 8.1 -22.1 8.5 -23.4
2026-02-15T00:33:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:33:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:33:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.939693
2026-02-15T00:33:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:33:59.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:33:59.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:33:59.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:33:59.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:33:59.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:33:39', tmtdew=4.49, humidity=73.32, cloud=0.0, wind=42.37, temperature=8.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:33:39', seeing=1.19, atlas_timestamp='2026-02-14T22:33:09.475', atlas_cloud=1, atlas_rain=1, zp_data=[0.03575000000000017, 0.043250000000000455, 0.03575000000000017, 0.050499999999999545, 0.04049999999999976, 0.11925000000000097, 0.07199999999999918, 0.08325000000000138, 0.0884999999999998, 0.10599999999999987, 0.019249999999999545, 0.06300000000000061, 0.10599999999999987, 0.1042500000000004, 0.10799999999999876, 0.08799999999999919, 0.11474999999999902, 0.1095000000000006, 0.06999999999999851, 0.04274999999999807, 0.12399999999999878, 0.1117499999999989, 0.08174999999999955, 0.14374999999999893, 0.14399999999999835, 0.10250000000000092, 0.10975000000000001, 0.061500000000000554, 0.12700000000000067, 0.11000000000000121, 0.13500000000000156, 0.2190000000000012, 0.11874999999999858], zp_timestamp='2026-02-14T22:31:00')
2026-02-15T00:33:59.947 [DEBUG] [Thread-194905] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:34:00.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-15T00:34:00.041 [DEBUG] [Thread-194908] [transport.py] [_log()] starting thread (client mode): 0xa2d6fdc0
2026-02-15T00:34:00.041 [DEBUG] [Thread-194908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:34:00.055 [DEBUG] [Thread-194908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:34:00.055 [INFO] [Thread-194908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:34:00.062 [DEBUG] [Thread-194908] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:34:00.062 [DEBUG] [Thread-194908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:34:00.063 [DEBUG] [Thread-194908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:34:00.063 [DEBUG] [Thread-194908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:34:00.063 [DEBUG] [Thread-194908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:34:00.063 [DEBUG] [Thread-194908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:34:00.063 [DEBUG] [Thread-194908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:34:00.063 [DEBUG] [Thread-194908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:34:00.063 [DEBUG] [Thread-194908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:34:00.063 [DEBUG] [Thread-194908] [transport.py] [_log()] client lang: <none>
2026-02-15T00:34:00.063 [DEBUG] [Thread-194908] [transport.py] [_log()] server lang: <none>
2026-02-15T00:34:00.064 [DEBUG] [Thread-194908] [transport.py] [_log()] kex follows: False
2026-02-15T00:34:00.064 [DEBUG] [Thread-194908] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:34:00.064 [DEBUG] [Thread-194908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:34:00.064 [DEBUG] [Thread-194908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:34:00.064 [DEBUG] [Thread-194908] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:34:00.064 [DEBUG] [Thread-194908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:34:00.064 [DEBUG] [Thread-194908] [transport.py] [_log()] Compression: none
2026-02-15T00:34:00.064 [DEBUG] [Thread-194908] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:34:00.122 [DEBUG] [Thread-194908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:34:00.123 [DEBUG] [Thread-194908] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:34:00.123 [DEBUG] [Thread-194908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:34:00.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:34:00.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:34:00.177 [DEBUG] [Thread-194908] [transport.py] [_log()] userauth is OK
2026-02-15T00:34:00.177 [DEBUG] [Thread-194908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:34:00.177 [DEBUG] [Thread-194908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:34:00.178 [DEBUG] [Thread-194908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:34:00.178 [DEBUG] [Thread-194908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:34:00.199 [INFO] [Thread-194908] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:34:00.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-15T00:34:00.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:34:00.964 [DEBUG] [Thread-194908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:34:00.964 [DEBUG] [Thread-194908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:34:01.011 [DEBUG] [Thread-194908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:34:01.011 [DEBUG] [Thread-194908] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:34:01.020 [DEBUG] [Thread-194908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:34:01.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:34:01.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-15T00:34:01.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-15T00:34:01.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:34:01.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:34:01.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:34:01.053 [DEBUG] [Thread-194908] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:34:02.694 [DEBUG] [Thread-194910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:34:09.375 [DEBUG] [Thread-194911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:34:17.749 [DEBUG] [Thread-194912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:34:21.026 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:34:21.027 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:34:31.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:34:31.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:34:31.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:34:32.786 [DEBUG] [Thread-194913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:34:32.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 34, 14), 4.23, 74.71, 0.0, 45.54, 8.11, 0, 0, 0, 2, 1, 0),)
2026-02-15T00:34:32.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:34:14
2026-02-15T00:34:33.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:34:33.424 [DEBUG] [Thread-194914] [transport.py] [_log()] starting thread (client mode): 0xa2d18790
2026-02-15T00:34:33.424 [DEBUG] [Thread-194914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:34:33.434 [DEBUG] [Thread-194914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:34:33.434 [INFO] [Thread-194914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:34:33.437 [DEBUG] [Thread-194914] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:34:33.437 [DEBUG] [Thread-194914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:34:33.437 [DEBUG] [Thread-194914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:34:33.437 [DEBUG] [Thread-194914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:34:33.437 [DEBUG] [Thread-194914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:34:33.437 [DEBUG] [Thread-194914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:34:33.438 [DEBUG] [Thread-194914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:34:33.438 [DEBUG] [Thread-194914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:34:33.438 [DEBUG] [Thread-194914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:34:33.438 [DEBUG] [Thread-194914] [transport.py] [_log()] client lang: <none>
2026-02-15T00:34:33.438 [DEBUG] [Thread-194914] [transport.py] [_log()] server lang: <none>
2026-02-15T00:34:33.438 [DEBUG] [Thread-194914] [transport.py] [_log()] kex follows: False
2026-02-15T00:34:33.438 [DEBUG] [Thread-194914] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:34:33.438 [DEBUG] [Thread-194914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:34:33.438 [DEBUG] [Thread-194914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:34:33.438 [DEBUG] [Thread-194914] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:34:33.438 [DEBUG] [Thread-194914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:34:33.438 [DEBUG] [Thread-194914] [transport.py] [_log()] Compression: none
2026-02-15T00:34:33.438 [DEBUG] [Thread-194914] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:34:33.455 [DEBUG] [Thread-194914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:34:33.455 [DEBUG] [Thread-194914] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:34:33.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:34:33.456 [DEBUG] [Thread-194914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:34:33.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:34:33.458 [DEBUG] [Thread-194914] [transport.py] [_log()] userauth is OK
2026-02-15T00:34:33.458 [DEBUG] [Thread-194914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:34:33.458 [DEBUG] [Thread-194914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:34:33.458 [DEBUG] [Thread-194914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:34:33.458 [DEBUG] [Thread-194914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:34:33.478 [INFO] [Thread-194914] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:34:33.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:34:34.096 [DEBUG] [Thread-194914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:34:34.096 [DEBUG] [Thread-194914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:34:34.096 [DEBUG] [Thread-194914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:34:34.136 [DEBUG] [Thread-194914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:34:34.136 [DEBUG] [Thread-194914] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:34:34.140 [DEBUG] [Thread-194914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:34:34.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:34:34.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:34:34.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:34:34.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:34:34.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:34:34.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:34:34.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:34:34.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:34:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:34:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.940040 -999.00   +8.00  26.27     79   +4.60 1 1 1 1 1     0    0 1.96 -65.49 ZNESW 26.3 26.3 150.2 44.4 8.6 -24.0 8.3 -23.0 8.1 -22.2 8.5 -23.3
2026-02-15T00:34:34.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:34:34.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:34:34.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.940040
2026-02-15T00:34:34.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:34:34.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:34:34.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:34:34.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:34:34.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:34:34.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:34:14', tmtdew=4.23, humidity=74.71, cloud=0.0, wind=45.54, temperature=8.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T00:34:14', seeing=1.21, atlas_timestamp='2026-02-14T22:33:39.456', atlas_cloud=1, atlas_rain=1, zp_data=[0.03575000000000017, 0.043250000000000455, 0.03575000000000017, 0.050499999999999545, 0.04049999999999976, 0.11925000000000097, 0.07199999999999918, 0.08325000000000138, 0.0884999999999998, 0.10599999999999987, 0.019249999999999545, 0.06300000000000061, 0.10599999999999987, 0.1042500000000004, 0.10799999999999876, 0.08799999999999919, 0.11474999999999902, 0.1095000000000006, 0.06999999999999851, 0.04274999999999807, 0.12399999999999878, 0.1117499999999989, 0.08174999999999955, 0.14374999999999893, 0.14399999999999835, 0.10250000000000092, 0.10975000000000001, 0.061500000000000554, 0.12700000000000067, 0.11000000000000121, 0.13500000000000156, 0.2190000000000012, 0.11874999999999858], zp_timestamp='2026-02-14T22:31:00')
2026-02-15T00:34:34.170 [DEBUG] [Thread-194914] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:34:34.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-15T00:34:34.268 [DEBUG] [Thread-194917] [transport.py] [_log()] starting thread (client mode): 0xa2d13f10
2026-02-15T00:34:34.268 [DEBUG] [Thread-194917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:34:34.282 [DEBUG] [Thread-194917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:34:34.282 [INFO] [Thread-194917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:34:34.290 [DEBUG] [Thread-194917] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:34:34.290 [DEBUG] [Thread-194917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:34:34.290 [DEBUG] [Thread-194917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:34:34.290 [DEBUG] [Thread-194917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:34:34.290 [DEBUG] [Thread-194917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:34:34.290 [DEBUG] [Thread-194917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:34:34.290 [DEBUG] [Thread-194917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:34:34.290 [DEBUG] [Thread-194917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:34:34.290 [DEBUG] [Thread-194917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:34:34.290 [DEBUG] [Thread-194917] [transport.py] [_log()] client lang: <none>
2026-02-15T00:34:34.291 [DEBUG] [Thread-194917] [transport.py] [_log()] server lang: <none>
2026-02-15T00:34:34.291 [DEBUG] [Thread-194917] [transport.py] [_log()] kex follows: False
2026-02-15T00:34:34.291 [DEBUG] [Thread-194917] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:34:34.291 [DEBUG] [Thread-194917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:34:34.291 [DEBUG] [Thread-194917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:34:34.291 [DEBUG] [Thread-194917] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:34:34.291 [DEBUG] [Thread-194917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:34:34.291 [DEBUG] [Thread-194917] [transport.py] [_log()] Compression: none
2026-02-15T00:34:34.291 [DEBUG] [Thread-194917] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:34:34.349 [DEBUG] [Thread-194917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:34:34.349 [DEBUG] [Thread-194917] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:34:34.350 [DEBUG] [Thread-194917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:34:34.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:34:34.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:34:34.406 [DEBUG] [Thread-194917] [transport.py] [_log()] userauth is OK
2026-02-15T00:34:34.406 [DEBUG] [Thread-194917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:34:34.406 [DEBUG] [Thread-194917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:34:34.406 [DEBUG] [Thread-194917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:34:34.406 [DEBUG] [Thread-194917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:34:34.424 [INFO] [Thread-194917] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:34:34.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-15T00:34:34.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:34:35.215 [DEBUG] [Thread-194917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:34:35.215 [DEBUG] [Thread-194917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:34:35.263 [DEBUG] [Thread-194917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:34:35.264 [DEBUG] [Thread-194917] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:34:35.273 [DEBUG] [Thread-194917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:34:35.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:34:35.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-15T00:34:35.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-15T00:34:35.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:34:35.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:34:35.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:34:35.310 [DEBUG] [Thread-194917] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:34:47.824 [DEBUG] [Thread-194919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:35:02.876 [DEBUG] [Thread-194920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:35:05.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:35:05.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:35:05.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-15T00:35:07.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 34, 49), 4.2, 74.87, 0.0, 48.66, 8.11, 0, 0, 0, 2, 1, 0),)
2026-02-15T00:35:07.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:34:49
2026-02-15T00:35:07.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:35:07.831 [DEBUG] [Thread-194921] [transport.py] [_log()] starting thread (client mode): 0xa2d6ece0
2026-02-15T00:35:07.832 [DEBUG] [Thread-194921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:35:07.851 [DEBUG] [Thread-194921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:35:07.852 [INFO] [Thread-194921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:35:07.855 [DEBUG] [Thread-194921] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:35:07.855 [DEBUG] [Thread-194921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:35:07.855 [DEBUG] [Thread-194921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:35:07.855 [DEBUG] [Thread-194921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:35:07.855 [DEBUG] [Thread-194921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:35:07.855 [DEBUG] [Thread-194921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:35:07.855 [DEBUG] [Thread-194921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:35:07.855 [DEBUG] [Thread-194921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:35:07.855 [DEBUG] [Thread-194921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:35:07.855 [DEBUG] [Thread-194921] [transport.py] [_log()] client lang: <none>
2026-02-15T00:35:07.855 [DEBUG] [Thread-194921] [transport.py] [_log()] server lang: <none>
2026-02-15T00:35:07.855 [DEBUG] [Thread-194921] [transport.py] [_log()] kex follows: False
2026-02-15T00:35:07.855 [DEBUG] [Thread-194921] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:35:07.855 [DEBUG] [Thread-194921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:35:07.855 [DEBUG] [Thread-194921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:35:07.855 [DEBUG] [Thread-194921] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:35:07.855 [DEBUG] [Thread-194921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:35:07.855 [DEBUG] [Thread-194921] [transport.py] [_log()] Compression: none
2026-02-15T00:35:07.855 [DEBUG] [Thread-194921] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:35:07.870 [DEBUG] [Thread-194921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:35:07.870 [DEBUG] [Thread-194921] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:35:07.871 [DEBUG] [Thread-194921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:35:07.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:35:07.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:35:07.912 [DEBUG] [Thread-194921] [transport.py] [_log()] userauth is OK
2026-02-15T00:35:07.913 [DEBUG] [Thread-194921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:35:07.913 [DEBUG] [Thread-194921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:35:07.913 [DEBUG] [Thread-194921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:35:07.913 [DEBUG] [Thread-194921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:35:07.951 [INFO] [Thread-194921] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:35:07.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:35:09.444 [DEBUG] [Thread-194923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:35:17.206 [DEBUG] [Thread-194921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:35:17.207 [DEBUG] [Thread-194921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:35:17.207 [DEBUG] [Thread-194921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:35:17.247 [DEBUG] [Thread-194921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:35:17.247 [DEBUG] [Thread-194921] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:35:17.250 [DEBUG] [Thread-194921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:35:17.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:35:17.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:35:17.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:35:17.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:35:17.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:35:17.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:35:17.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:35:17.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:35:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:35:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.940387 -999.00   +8.00  30.69     78   +4.60 1 1 2 1 1     0    0 2.05 -66.01 ZNESW 30.7 30.7 158.9 41.0 8.6 -24.1 8.3 -23.1 8.1 -22.1 8.5 -23.4
2026-02-15T00:35:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:35:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:35:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.940387
2026-02-15T00:35:17.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:35:17.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:35:17.341 [DEBUG] [Thread-194921] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:35:17.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:35:17.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:35:17.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:35:17.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:34:49', tmtdew=4.2, humidity=74.87, cloud=0.0, wind=48.66, temperature=8.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T00:34:49', seeing=1.3, atlas_timestamp='2026-02-14T22:34:09.437', atlas_cloud=1, atlas_rain=1, zp_data=[0.03575000000000017, 0.043250000000000455, 0.03575000000000017, 0.050499999999999545, 0.04049999999999976, 0.11925000000000097, 0.07199999999999918, 0.08325000000000138, 0.0884999999999998, 0.10599999999999987, 0.019249999999999545, 0.06300000000000061, 0.10599999999999987, 0.1042500000000004, 0.10799999999999876, 0.08799999999999919, 0.11474999999999902, 0.1095000000000006, 0.06999999999999851, 0.04274999999999807, 0.12399999999999878, 0.1117499999999989, 0.08174999999999955, 0.14374999999999893, 0.14399999999999835, 0.10250000000000092, 0.10975000000000001, 0.061500000000000554, 0.12700000000000067, 0.11000000000000121, 0.13500000000000156, 0.2190000000000012, 0.11874999999999858], zp_timestamp='2026-02-14T22:31:00')
2026-02-15T00:35:17.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-15T00:35:17.430 [DEBUG] [Thread-194925] [transport.py] [_log()] starting thread (client mode): 0xa2d19930
2026-02-15T00:35:17.430 [DEBUG] [Thread-194925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:35:17.445 [DEBUG] [Thread-194925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:35:17.445 [INFO] [Thread-194925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:35:17.453 [DEBUG] [Thread-194925] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:35:17.453 [DEBUG] [Thread-194925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:35:17.453 [DEBUG] [Thread-194925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:35:17.453 [DEBUG] [Thread-194925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:35:17.454 [DEBUG] [Thread-194925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:35:17.454 [DEBUG] [Thread-194925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:35:17.454 [DEBUG] [Thread-194925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:35:17.454 [DEBUG] [Thread-194925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:35:17.454 [DEBUG] [Thread-194925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:35:17.454 [DEBUG] [Thread-194925] [transport.py] [_log()] client lang: <none>
2026-02-15T00:35:17.454 [DEBUG] [Thread-194925] [transport.py] [_log()] server lang: <none>
2026-02-15T00:35:17.454 [DEBUG] [Thread-194925] [transport.py] [_log()] kex follows: False
2026-02-15T00:35:17.454 [DEBUG] [Thread-194925] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:35:17.455 [DEBUG] [Thread-194925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:35:17.455 [DEBUG] [Thread-194925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:35:17.455 [DEBUG] [Thread-194925] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:35:17.455 [DEBUG] [Thread-194925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:35:17.455 [DEBUG] [Thread-194925] [transport.py] [_log()] Compression: none
2026-02-15T00:35:17.455 [DEBUG] [Thread-194925] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:35:17.513 [DEBUG] [Thread-194925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:35:17.513 [DEBUG] [Thread-194925] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:35:17.514 [DEBUG] [Thread-194925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:35:17.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:35:17.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:35:17.569 [DEBUG] [Thread-194925] [transport.py] [_log()] userauth is OK
2026-02-15T00:35:17.569 [DEBUG] [Thread-194925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:35:17.570 [DEBUG] [Thread-194925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:35:17.570 [DEBUG] [Thread-194925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:35:17.570 [DEBUG] [Thread-194925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:35:17.592 [INFO] [Thread-194925] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:35:17.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-15T00:35:17.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:35:17.912 [DEBUG] [Thread-194927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:35:18.360 [DEBUG] [Thread-194925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:35:18.360 [DEBUG] [Thread-194925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:35:18.409 [DEBUG] [Thread-194925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:35:18.409 [DEBUG] [Thread-194925] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:35:18.418 [DEBUG] [Thread-194925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:35:18.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:35:18.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:35:18.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:35:18.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:35:18.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:35:18.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:35:18.455 [DEBUG] [Thread-194925] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:35:21.228 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:35:21.229 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:35:32.964 [DEBUG] [Thread-194928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:35:47.995 [DEBUG] [Thread-194929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:35:48.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:35:48.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:35:48.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:35:50.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 35, 25), 4.2, 74.89, 0.0, 48.57, 8.08, 0, 0, 0, 2, 1, 0),)
2026-02-15T00:35:50.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:35:25
2026-02-15T00:35:50.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:35:50.881 [DEBUG] [Thread-194930] [transport.py] [_log()] starting thread (client mode): 0xa2d688e0
2026-02-15T00:35:50.881 [DEBUG] [Thread-194930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:35:50.901 [DEBUG] [Thread-194930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:35:50.901 [INFO] [Thread-194930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:35:50.904 [DEBUG] [Thread-194930] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:35:50.904 [DEBUG] [Thread-194930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:35:50.904 [DEBUG] [Thread-194930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:35:50.904 [DEBUG] [Thread-194930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:35:50.904 [DEBUG] [Thread-194930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:35:50.904 [DEBUG] [Thread-194930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:35:50.904 [DEBUG] [Thread-194930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:35:50.904 [DEBUG] [Thread-194930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:35:50.904 [DEBUG] [Thread-194930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:35:50.904 [DEBUG] [Thread-194930] [transport.py] [_log()] client lang: <none>
2026-02-15T00:35:50.904 [DEBUG] [Thread-194930] [transport.py] [_log()] server lang: <none>
2026-02-15T00:35:50.904 [DEBUG] [Thread-194930] [transport.py] [_log()] kex follows: False
2026-02-15T00:35:50.904 [DEBUG] [Thread-194930] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:35:50.904 [DEBUG] [Thread-194930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:35:50.904 [DEBUG] [Thread-194930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:35:50.904 [DEBUG] [Thread-194930] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:35:50.904 [DEBUG] [Thread-194930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:35:50.904 [DEBUG] [Thread-194930] [transport.py] [_log()] Compression: none
2026-02-15T00:35:50.904 [DEBUG] [Thread-194930] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:35:50.922 [DEBUG] [Thread-194930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:35:50.923 [DEBUG] [Thread-194930] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:35:50.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:35:50.924 [DEBUG] [Thread-194930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:35:50.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:35:50.926 [DEBUG] [Thread-194930] [transport.py] [_log()] userauth is OK
2026-02-15T00:35:50.926 [DEBUG] [Thread-194930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:35:50.926 [DEBUG] [Thread-194930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:35:50.926 [DEBUG] [Thread-194930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:35:50.926 [DEBUG] [Thread-194930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:35:50.951 [INFO] [Thread-194930] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:35:50.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:35:51.576 [DEBUG] [Thread-194930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:35:51.577 [DEBUG] [Thread-194930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:35:51.577 [DEBUG] [Thread-194930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:35:51.617 [DEBUG] [Thread-194930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:35:51.617 [DEBUG] [Thread-194930] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:35:51.620 [DEBUG] [Thread-194930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:35:51.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:35:51.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:35:51.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:35:51.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:35:51.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:35:51.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:35:51.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:35:51.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:35:51.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:35:51.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.941081 -999.00   +8.00  31.37     79   +4.60 1 1 2 1 1     0    0 1.75 -73.47 ZNESW 31.4 31.4 148.8 46.2 8.5 -24.1 8.3 -23.1 8.1 -22.0 8.5 -23.5
2026-02-15T00:35:51.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:35:51.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:35:51.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.941081
2026-02-15T00:35:51.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:35:51.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:35:51.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:35:51.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:35:51.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:35:51.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:35:25', tmtdew=4.2, humidity=74.89, cloud=0.0, wind=48.57, temperature=8.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T00:35:25', seeing=1.24, atlas_timestamp='2026-02-14T22:35:09.398', atlas_cloud=1, atlas_rain=1, zp_data=[0.03575000000000017, 0.043250000000000455, 0.03575000000000017, 0.050499999999999545, 0.04049999999999976, 0.11925000000000097, 0.07199999999999918, 0.08325000000000138, 0.0884999999999998, 0.10599999999999987, 0.019249999999999545, 0.06300000000000061, 0.10599999999999987, 0.1042500000000004, 0.10799999999999876, 0.08799999999999919, 0.11474999999999902, 0.1095000000000006, 0.06999999999999851, 0.04274999999999807, 0.12399999999999878, 0.1117499999999989, 0.08174999999999955, 0.14374999999999893, 0.14399999999999835, 0.10250000000000092, 0.10975000000000001, 0.061500000000000554, 0.12700000000000067, 0.11000000000000121, 0.13500000000000156, 0.2190000000000012, 0.11874999999999858], zp_timestamp='2026-02-14T22:31:00')
2026-02-15T00:35:51.646 [DEBUG] [Thread-194930] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:35:51.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-15T00:35:51.748 [DEBUG] [Thread-194933] [transport.py] [_log()] starting thread (client mode): 0xa2d69c90
2026-02-15T00:35:51.748 [DEBUG] [Thread-194933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:35:51.762 [DEBUG] [Thread-194933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:35:51.763 [INFO] [Thread-194933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:35:51.770 [DEBUG] [Thread-194933] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:35:51.770 [DEBUG] [Thread-194933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:35:51.770 [DEBUG] [Thread-194933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:35:51.770 [DEBUG] [Thread-194933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:35:51.770 [DEBUG] [Thread-194933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:35:51.770 [DEBUG] [Thread-194933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:35:51.770 [DEBUG] [Thread-194933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:35:51.770 [DEBUG] [Thread-194933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:35:51.770 [DEBUG] [Thread-194933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:35:51.770 [DEBUG] [Thread-194933] [transport.py] [_log()] client lang: <none>
2026-02-15T00:35:51.770 [DEBUG] [Thread-194933] [transport.py] [_log()] server lang: <none>
2026-02-15T00:35:51.770 [DEBUG] [Thread-194933] [transport.py] [_log()] kex follows: False
2026-02-15T00:35:51.770 [DEBUG] [Thread-194933] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:35:51.771 [DEBUG] [Thread-194933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:35:51.771 [DEBUG] [Thread-194933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:35:51.771 [DEBUG] [Thread-194933] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:35:51.771 [DEBUG] [Thread-194933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:35:51.771 [DEBUG] [Thread-194933] [transport.py] [_log()] Compression: none
2026-02-15T00:35:51.771 [DEBUG] [Thread-194933] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:35:51.828 [DEBUG] [Thread-194933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:35:51.829 [DEBUG] [Thread-194933] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:35:51.829 [DEBUG] [Thread-194933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:35:51.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:35:51.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:35:51.885 [DEBUG] [Thread-194933] [transport.py] [_log()] userauth is OK
2026-02-15T00:35:51.886 [DEBUG] [Thread-194933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:35:51.886 [DEBUG] [Thread-194933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:35:51.886 [DEBUG] [Thread-194933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:35:51.886 [DEBUG] [Thread-194933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:35:51.910 [INFO] [Thread-194933] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:35:51.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-15T00:35:51.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:35:52.701 [DEBUG] [Thread-194933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:35:52.702 [DEBUG] [Thread-194933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:35:52.750 [DEBUG] [Thread-194933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:35:52.751 [DEBUG] [Thread-194933] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:35:52.760 [DEBUG] [Thread-194933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:35:52.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:35:52.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-15T00:35:52.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-15T00:35:52.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:35:52.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:35:52.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:35:52.797 [DEBUG] [Thread-194933] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:36:03.029 [DEBUG] [Thread-194935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:36:09.500 [DEBUG] [Thread-194936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:36:18.078 [DEBUG] [Thread-194937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:36:21.431 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:36:21.432 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:36:22.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:36:22.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:36:22.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:36:24.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 35, 25), 4.2, 74.89, 0.0, 48.57, 8.08, 0, 0, 0, 2, 1, 0),)
2026-02-15T00:36:24.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:35:25
2026-02-15T00:36:25.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:36:25.226 [DEBUG] [Thread-194938] [transport.py] [_log()] starting thread (client mode): 0xa2d6aa70
2026-02-15T00:36:25.226 [DEBUG] [Thread-194938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:36:25.244 [DEBUG] [Thread-194938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:36:25.244 [INFO] [Thread-194938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:36:25.246 [DEBUG] [Thread-194938] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:36:25.246 [DEBUG] [Thread-194938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:36:25.247 [DEBUG] [Thread-194938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:36:25.247 [DEBUG] [Thread-194938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:36:25.247 [DEBUG] [Thread-194938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:36:25.247 [DEBUG] [Thread-194938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:36:25.247 [DEBUG] [Thread-194938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:36:25.247 [DEBUG] [Thread-194938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:36:25.247 [DEBUG] [Thread-194938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:36:25.247 [DEBUG] [Thread-194938] [transport.py] [_log()] client lang: <none>
2026-02-15T00:36:25.247 [DEBUG] [Thread-194938] [transport.py] [_log()] server lang: <none>
2026-02-15T00:36:25.247 [DEBUG] [Thread-194938] [transport.py] [_log()] kex follows: False
2026-02-15T00:36:25.247 [DEBUG] [Thread-194938] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:36:25.247 [DEBUG] [Thread-194938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:36:25.247 [DEBUG] [Thread-194938] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:36:25.247 [DEBUG] [Thread-194938] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:36:25.247 [DEBUG] [Thread-194938] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:36:25.247 [DEBUG] [Thread-194938] [transport.py] [_log()] Compression: none
2026-02-15T00:36:25.247 [DEBUG] [Thread-194938] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:36:25.256 [DEBUG] [Thread-194938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:36:25.256 [DEBUG] [Thread-194938] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:36:25.257 [DEBUG] [Thread-194938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:36:25.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:36:25.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:36:25.258 [DEBUG] [Thread-194938] [transport.py] [_log()] userauth is OK
2026-02-15T00:36:25.258 [DEBUG] [Thread-194938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:36:25.258 [DEBUG] [Thread-194938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:36:25.258 [DEBUG] [Thread-194938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:36:25.258 [DEBUG] [Thread-194938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:36:25.281 [INFO] [Thread-194938] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:36:25.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:36:25.907 [DEBUG] [Thread-194938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:36:25.907 [DEBUG] [Thread-194938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:36:25.908 [DEBUG] [Thread-194938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:36:25.949 [DEBUG] [Thread-194938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:36:25.949 [DEBUG] [Thread-194938] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:36:25.953 [DEBUG] [Thread-194938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:36:25.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:36:25.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:36:25.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:36:25.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:36:25.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:36:25.977 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:36:25.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:36:25.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:36:25.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:36:25.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.941429 -999.00   +7.90  24.63     79   +4.60 1 1 1 1 1     0    0 1.90 -66.11 ZNESW 24.6 24.6 161.4 47.6 8.5 -24.0 8.3 -23.1 8.1 -22.2 8.5 -23.2
2026-02-15T00:36:25.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:36:25.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:36:25.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.941429
2026-02-15T00:36:25.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:36:25.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:36:25.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:36:25.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:36:25.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:36:25.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:35:25', tmtdew=4.2, humidity=74.89, cloud=0.0, wind=48.57, temperature=8.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T00:36:00', seeing=1.24, atlas_timestamp='2026-02-14T22:35:39.466', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, 0.016250000000001208, -0.02824999999999811, -0.017500000000001847, 0.01249999999999929, 0.007250000000000867, 0.03449999999999953, 0.02925000000000111, 0.03449999999999953, 0.06650000000000134, -0.03575000000000017, -0.0045000000000001705, 0.0625, 0.049249999999998906, 0.05299999999999905, 0.019999999999999574, 0.07075000000000031, 0.05349999999999966, 0.028999999999999915, 0.010249999999999204, 0.08199999999999896, 0.04974999999999952, 0.011250000000000426, 0.07474999999999987, 0.07699999999999996, 0.04150000000000098, 0.02874999999999872, 0.03200000000000003, 0.08150000000000013, 0.06150000000000233, 0.08950000000000102, 0.13100000000000023, 0.06274999999999942], zp_timestamp='2026-02-14T22:34:00')
2026-02-15T00:36:25.985 [DEBUG] [Thread-194938] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:36:26.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T00:36:26.075 [DEBUG] [Thread-194941] [transport.py] [_log()] starting thread (client mode): 0xa2d03610
2026-02-15T00:36:26.075 [DEBUG] [Thread-194941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:36:26.089 [DEBUG] [Thread-194941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:36:26.089 [INFO] [Thread-194941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:36:26.096 [DEBUG] [Thread-194941] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:36:26.096 [DEBUG] [Thread-194941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:36:26.096 [DEBUG] [Thread-194941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:36:26.097 [DEBUG] [Thread-194941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:36:26.097 [DEBUG] [Thread-194941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:36:26.097 [DEBUG] [Thread-194941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:36:26.097 [DEBUG] [Thread-194941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:36:26.097 [DEBUG] [Thread-194941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:36:26.097 [DEBUG] [Thread-194941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:36:26.097 [DEBUG] [Thread-194941] [transport.py] [_log()] client lang: <none>
2026-02-15T00:36:26.097 [DEBUG] [Thread-194941] [transport.py] [_log()] server lang: <none>
2026-02-15T00:36:26.097 [DEBUG] [Thread-194941] [transport.py] [_log()] kex follows: False
2026-02-15T00:36:26.097 [DEBUG] [Thread-194941] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:36:26.097 [DEBUG] [Thread-194941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:36:26.097 [DEBUG] [Thread-194941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:36:26.097 [DEBUG] [Thread-194941] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:36:26.097 [DEBUG] [Thread-194941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:36:26.098 [DEBUG] [Thread-194941] [transport.py] [_log()] Compression: none
2026-02-15T00:36:26.098 [DEBUG] [Thread-194941] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:36:26.157 [DEBUG] [Thread-194941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:36:26.158 [DEBUG] [Thread-194941] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:36:26.158 [DEBUG] [Thread-194941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:36:26.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:36:26.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:36:26.213 [DEBUG] [Thread-194941] [transport.py] [_log()] userauth is OK
2026-02-15T00:36:26.214 [DEBUG] [Thread-194941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:36:26.214 [DEBUG] [Thread-194941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:36:26.214 [DEBUG] [Thread-194941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:36:26.214 [DEBUG] [Thread-194941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:36:26.233 [INFO] [Thread-194941] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:36:26.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-15T00:36:26.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:36:27.019 [DEBUG] [Thread-194941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:36:27.019 [DEBUG] [Thread-194941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:36:27.067 [DEBUG] [Thread-194941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:36:27.067 [DEBUG] [Thread-194941] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:36:27.077 [DEBUG] [Thread-194941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:36:27.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:36:27.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-15T00:36:27.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-15T00:36:27.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:36:27.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:36:27.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:36:27.112 [DEBUG] [Thread-194941] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:36:33.113 [DEBUG] [Thread-194943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:36:48.171 [DEBUG] [Thread-194944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:36:57.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:36:57.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:36:57.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:36:58.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 36, 35), 4.36, 73.98, 0.0, 53.24, 8.26, 0, 0, 0, 2, 1, 0),)
2026-02-15T00:36:58.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:36:35
2026-02-15T00:36:59.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:36:59.510 [DEBUG] [Thread-194945] [transport.py] [_log()] starting thread (client mode): 0xa2d688e0
2026-02-15T00:36:59.511 [DEBUG] [Thread-194945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:36:59.533 [DEBUG] [Thread-194945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:36:59.533 [INFO] [Thread-194945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:36:59.536 [DEBUG] [Thread-194945] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:36:59.536 [DEBUG] [Thread-194945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:36:59.536 [DEBUG] [Thread-194945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:36:59.536 [DEBUG] [Thread-194945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:36:59.537 [DEBUG] [Thread-194945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:36:59.537 [DEBUG] [Thread-194945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:36:59.537 [DEBUG] [Thread-194945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:36:59.537 [DEBUG] [Thread-194945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:36:59.537 [DEBUG] [Thread-194945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:36:59.537 [DEBUG] [Thread-194945] [transport.py] [_log()] client lang: <none>
2026-02-15T00:36:59.537 [DEBUG] [Thread-194945] [transport.py] [_log()] server lang: <none>
2026-02-15T00:36:59.537 [DEBUG] [Thread-194945] [transport.py] [_log()] kex follows: False
2026-02-15T00:36:59.537 [DEBUG] [Thread-194945] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:36:59.537 [DEBUG] [Thread-194945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:36:59.538 [DEBUG] [Thread-194945] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:36:59.538 [DEBUG] [Thread-194945] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:36:59.538 [DEBUG] [Thread-194945] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:36:59.538 [DEBUG] [Thread-194945] [transport.py] [_log()] Compression: none
2026-02-15T00:36:59.538 [DEBUG] [Thread-194945] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:36:59.557 [DEBUG] [Thread-194945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:36:59.558 [DEBUG] [Thread-194945] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:36:59.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:36:59.559 [DEBUG] [Thread-194945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:36:59.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:36:59.561 [DEBUG] [Thread-194945] [transport.py] [_log()] userauth is OK
2026-02-15T00:36:59.561 [DEBUG] [Thread-194945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:36:59.561 [DEBUG] [Thread-194945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:36:59.562 [DEBUG] [Thread-194945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:36:59.562 [DEBUG] [Thread-194945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:36:59.586 [INFO] [Thread-194945] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:36:59.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:37:00.261 [DEBUG] [Thread-194945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:37:00.261 [DEBUG] [Thread-194945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:37:00.261 [DEBUG] [Thread-194945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:37:00.302 [DEBUG] [Thread-194945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:37:00.302 [DEBUG] [Thread-194945] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:37:00.305 [DEBUG] [Thread-194945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:37:00.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:37:00.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:37:00.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:37:00.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:37:00.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:37:00.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:37:00.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:37:00.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:37:00.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:37:00.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.941776 -999.00   +7.90  30.90     79   +4.60 1 1 2 1 1     0    0 1.54 -78.81 ZNESW 30.9 30.9 142.4 42.2 8.5 -24.1 8.3 -23.0 8.1 -22.1 8.4 -23.3
2026-02-15T00:37:00.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:37:00.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:37:00.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.941776
2026-02-15T00:37:00.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:37:00.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:37:00.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:37:00.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:37:00.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:37:00.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:36:35', tmtdew=4.36, humidity=73.98, cloud=0.0, wind=53.24, temperature=8.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T00:36:35', seeing=1.24, atlas_timestamp='2026-02-14T22:36:09.446', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, 0.016250000000001208, -0.02824999999999811, -0.017500000000001847, 0.01249999999999929, 0.007250000000000867, 0.03449999999999953, 0.02925000000000111, 0.03449999999999953, 0.06650000000000134, -0.03575000000000017, -0.0045000000000001705, 0.0625, 0.049249999999998906, 0.05299999999999905, 0.019999999999999574, 0.07075000000000031, 0.05349999999999966, 0.028999999999999915, 0.010249999999999204, 0.08199999999999896, 0.04974999999999952, 0.011250000000000426, 0.07474999999999987, 0.07699999999999996, 0.04150000000000098, 0.02874999999999872, 0.03200000000000003, 0.08150000000000013, 0.06150000000000233, 0.08950000000000102, 0.13100000000000023, 0.06274999999999942], zp_timestamp='2026-02-14T22:34:00')
2026-02-15T00:37:00.332 [DEBUG] [Thread-194945] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:37:00.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-15T00:37:00.437 [DEBUG] [Thread-194948] [transport.py] [_log()] starting thread (client mode): 0xa2d6d960
2026-02-15T00:37:00.437 [DEBUG] [Thread-194948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:37:00.451 [DEBUG] [Thread-194948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:37:00.451 [INFO] [Thread-194948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:37:00.459 [DEBUG] [Thread-194948] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:37:00.459 [DEBUG] [Thread-194948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:37:00.459 [DEBUG] [Thread-194948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:37:00.459 [DEBUG] [Thread-194948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:37:00.460 [DEBUG] [Thread-194948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:37:00.460 [DEBUG] [Thread-194948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:37:00.460 [DEBUG] [Thread-194948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:37:00.460 [DEBUG] [Thread-194948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:37:00.460 [DEBUG] [Thread-194948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:37:00.460 [DEBUG] [Thread-194948] [transport.py] [_log()] client lang: <none>
2026-02-15T00:37:00.460 [DEBUG] [Thread-194948] [transport.py] [_log()] server lang: <none>
2026-02-15T00:37:00.460 [DEBUG] [Thread-194948] [transport.py] [_log()] kex follows: False
2026-02-15T00:37:00.460 [DEBUG] [Thread-194948] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:37:00.460 [DEBUG] [Thread-194948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:37:00.460 [DEBUG] [Thread-194948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:37:00.460 [DEBUG] [Thread-194948] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:37:00.460 [DEBUG] [Thread-194948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:37:00.460 [DEBUG] [Thread-194948] [transport.py] [_log()] Compression: none
2026-02-15T00:37:00.460 [DEBUG] [Thread-194948] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:37:00.517 [DEBUG] [Thread-194948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:37:00.518 [DEBUG] [Thread-194948] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:37:00.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:37:00.519 [DEBUG] [Thread-194948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:37:00.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:37:00.573 [DEBUG] [Thread-194948] [transport.py] [_log()] userauth is OK
2026-02-15T00:37:00.574 [DEBUG] [Thread-194948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:37:00.574 [DEBUG] [Thread-194948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:37:00.574 [DEBUG] [Thread-194948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:37:00.574 [DEBUG] [Thread-194948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:37:00.598 [INFO] [Thread-194948] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:37:00.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-15T00:37:00.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:37:01.448 [DEBUG] [Thread-194948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:37:01.448 [DEBUG] [Thread-194948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:37:01.496 [DEBUG] [Thread-194948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:37:01.496 [DEBUG] [Thread-194948] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:37:01.505 [DEBUG] [Thread-194948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:37:01.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:37:01.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-15T00:37:01.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-15T00:37:01.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:37:01.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:37:01.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:37:01.541 [DEBUG] [Thread-194948] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:37:03.205 [DEBUG] [Thread-194950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:37:09.592 [DEBUG] [Thread-194951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:37:18.248 [DEBUG] [Thread-194952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:37:21.634 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:37:21.635 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:37:31.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:37:31.564 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:37:31.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-15T00:37:33.283 [DEBUG] [Thread-194953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:37:33.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 37, 10), 4.12, 75.04, 0.0, 45.72, 7.98, 0, 0, 0, 2, 1, 0),)
2026-02-15T00:37:33.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:37:10
2026-02-15T00:37:33.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:37:34.118 [DEBUG] [Thread-194954] [transport.py] [_log()] starting thread (client mode): 0xa2d6b0d0
2026-02-15T00:37:34.118 [DEBUG] [Thread-194954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:37:34.141 [DEBUG] [Thread-194954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:37:34.141 [INFO] [Thread-194954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:37:34.145 [DEBUG] [Thread-194954] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:37:34.145 [DEBUG] [Thread-194954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:37:34.145 [DEBUG] [Thread-194954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:37:34.145 [DEBUG] [Thread-194954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:37:34.145 [DEBUG] [Thread-194954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:37:34.146 [DEBUG] [Thread-194954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:37:34.146 [DEBUG] [Thread-194954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:37:34.146 [DEBUG] [Thread-194954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:37:34.146 [DEBUG] [Thread-194954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:37:34.146 [DEBUG] [Thread-194954] [transport.py] [_log()] client lang: <none>
2026-02-15T00:37:34.146 [DEBUG] [Thread-194954] [transport.py] [_log()] server lang: <none>
2026-02-15T00:37:34.146 [DEBUG] [Thread-194954] [transport.py] [_log()] kex follows: False
2026-02-15T00:37:34.146 [DEBUG] [Thread-194954] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:37:34.146 [DEBUG] [Thread-194954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:37:34.146 [DEBUG] [Thread-194954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:37:34.146 [DEBUG] [Thread-194954] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:37:34.147 [DEBUG] [Thread-194954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:37:34.147 [DEBUG] [Thread-194954] [transport.py] [_log()] Compression: none
2026-02-15T00:37:34.147 [DEBUG] [Thread-194954] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:37:34.165 [DEBUG] [Thread-194954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:37:34.166 [DEBUG] [Thread-194954] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:37:34.166 [DEBUG] [Thread-194954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:37:34.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:37:34.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:37:34.168 [DEBUG] [Thread-194954] [transport.py] [_log()] userauth is OK
2026-02-15T00:37:34.168 [DEBUG] [Thread-194954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:37:34.169 [DEBUG] [Thread-194954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:37:34.169 [DEBUG] [Thread-194954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:37:34.169 [DEBUG] [Thread-194954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:37:34.179 [INFO] [Thread-194954] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:37:34.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:37:34.828 [DEBUG] [Thread-194954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:37:34.828 [DEBUG] [Thread-194954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:37:34.829 [DEBUG] [Thread-194954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:37:34.869 [DEBUG] [Thread-194954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:37:34.870 [DEBUG] [Thread-194954] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:37:34.873 [DEBUG] [Thread-194954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:37:34.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:37:34.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:37:34.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:37:34.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:37:34.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:37:34.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:37:34.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:37:34.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:37:34.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:37:34.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.942123 -999.00   +7.90  28.30     79   +4.60 1 1 1 1 1     0    0 1.80 -68.45 ZNESW 28.3 28.3 154.5 44.6 8.5 -24.0 8.2 -23.1 8.1 -22.1 8.5 -23.4
2026-02-15T00:37:34.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:37:34.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:37:34.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.942123
2026-02-15T00:37:34.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:37:34.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:37:34.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:37:34.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:37:34.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:37:34.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:37:10', tmtdew=4.12, humidity=75.04, cloud=0.0, wind=45.72, temperature=7.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T00:37:11', seeing=1.25, atlas_timestamp='2026-02-14T22:36:39.427', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, 0.016250000000001208, -0.02824999999999811, -0.017500000000001847, 0.01249999999999929, 0.007250000000000867, 0.03449999999999953, 0.02925000000000111, 0.03449999999999953, 0.06650000000000134, -0.03575000000000017, -0.0045000000000001705, 0.0625, 0.049249999999998906, 0.05299999999999905, 0.019999999999999574, 0.07075000000000031, 0.05349999999999966, 0.028999999999999915, 0.010249999999999204, 0.08199999999999896, 0.04974999999999952, 0.011250000000000426, 0.07474999999999987, 0.07699999999999996, 0.04150000000000098, 0.02874999999999872, 0.03200000000000003, 0.08150000000000013, 0.06150000000000233, 0.08950000000000102, 0.13100000000000023, 0.06274999999999942], zp_timestamp='2026-02-14T22:34:00')
2026-02-15T00:37:34.901 [DEBUG] [Thread-194954] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:37:34.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-15T00:37:35.001 [DEBUG] [Thread-194957] [transport.py] [_log()] starting thread (client mode): 0xa2d6be50
2026-02-15T00:37:35.001 [DEBUG] [Thread-194957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:37:35.016 [DEBUG] [Thread-194957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:37:35.016 [INFO] [Thread-194957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:37:35.027 [DEBUG] [Thread-194957] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:37:35.027 [DEBUG] [Thread-194957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:37:35.027 [DEBUG] [Thread-194957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:37:35.027 [DEBUG] [Thread-194957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:37:35.027 [DEBUG] [Thread-194957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:37:35.027 [DEBUG] [Thread-194957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:37:35.027 [DEBUG] [Thread-194957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:37:35.027 [DEBUG] [Thread-194957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:37:35.028 [DEBUG] [Thread-194957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:37:35.028 [DEBUG] [Thread-194957] [transport.py] [_log()] client lang: <none>
2026-02-15T00:37:35.028 [DEBUG] [Thread-194957] [transport.py] [_log()] server lang: <none>
2026-02-15T00:37:35.028 [DEBUG] [Thread-194957] [transport.py] [_log()] kex follows: False
2026-02-15T00:37:35.028 [DEBUG] [Thread-194957] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:37:35.028 [DEBUG] [Thread-194957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:37:35.028 [DEBUG] [Thread-194957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:37:35.028 [DEBUG] [Thread-194957] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:37:35.028 [DEBUG] [Thread-194957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:37:35.028 [DEBUG] [Thread-194957] [transport.py] [_log()] Compression: none
2026-02-15T00:37:35.028 [DEBUG] [Thread-194957] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:37:35.090 [DEBUG] [Thread-194957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:37:35.090 [DEBUG] [Thread-194957] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:37:35.091 [DEBUG] [Thread-194957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:37:35.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:37:35.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:37:35.146 [DEBUG] [Thread-194957] [transport.py] [_log()] userauth is OK
2026-02-15T00:37:35.147 [DEBUG] [Thread-194957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:37:35.147 [DEBUG] [Thread-194957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:37:35.147 [DEBUG] [Thread-194957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:37:35.147 [DEBUG] [Thread-194957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:37:35.166 [INFO] [Thread-194957] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:37:35.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-15T00:37:35.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:37:35.944 [DEBUG] [Thread-194957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:37:35.944 [DEBUG] [Thread-194957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:37:35.993 [DEBUG] [Thread-194957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:37:35.993 [DEBUG] [Thread-194957] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:37:36.001 [DEBUG] [Thread-194957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:37:36.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:37:36.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:37:36.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-15T00:37:36.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:37:36.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:37:36.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:37:36.034 [DEBUG] [Thread-194957] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:37:48.317 [DEBUG] [Thread-194959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:38:03.364 [DEBUG] [Thread-194960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:38:06.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:38:06.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:38:06.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-15T00:38:08.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 37, 45), 4.11, 75.06, 0.0, 46.14, 7.98, 0, 0, 0, 2, 1, 0),)
2026-02-15T00:38:08.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:37:45
2026-02-15T00:38:08.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:38:08.780 [DEBUG] [Thread-194961] [transport.py] [_log()] starting thread (client mode): 0xa2d6b4c0
2026-02-15T00:38:08.781 [DEBUG] [Thread-194961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:38:08.797 [DEBUG] [Thread-194961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:38:08.798 [INFO] [Thread-194961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:38:08.801 [DEBUG] [Thread-194961] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:38:08.801 [DEBUG] [Thread-194961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:38:08.801 [DEBUG] [Thread-194961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:38:08.801 [DEBUG] [Thread-194961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:38:08.801 [DEBUG] [Thread-194961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:38:08.801 [DEBUG] [Thread-194961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:38:08.801 [DEBUG] [Thread-194961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:38:08.801 [DEBUG] [Thread-194961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:38:08.801 [DEBUG] [Thread-194961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:38:08.801 [DEBUG] [Thread-194961] [transport.py] [_log()] client lang: <none>
2026-02-15T00:38:08.801 [DEBUG] [Thread-194961] [transport.py] [_log()] server lang: <none>
2026-02-15T00:38:08.801 [DEBUG] [Thread-194961] [transport.py] [_log()] kex follows: False
2026-02-15T00:38:08.801 [DEBUG] [Thread-194961] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:38:08.801 [DEBUG] [Thread-194961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:38:08.801 [DEBUG] [Thread-194961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:38:08.801 [DEBUG] [Thread-194961] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:38:08.801 [DEBUG] [Thread-194961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:38:08.801 [DEBUG] [Thread-194961] [transport.py] [_log()] Compression: none
2026-02-15T00:38:08.801 [DEBUG] [Thread-194961] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:38:08.814 [DEBUG] [Thread-194961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:38:08.815 [DEBUG] [Thread-194961] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:38:08.815 [DEBUG] [Thread-194961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:38:08.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:38:08.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:38:08.817 [DEBUG] [Thread-194961] [transport.py] [_log()] userauth is OK
2026-02-15T00:38:08.817 [DEBUG] [Thread-194961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:38:08.817 [DEBUG] [Thread-194961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:38:08.817 [DEBUG] [Thread-194961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:38:08.817 [DEBUG] [Thread-194961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:38:08.835 [INFO] [Thread-194961] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:38:08.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:38:09.500 [DEBUG] [Thread-194961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:38:09.500 [DEBUG] [Thread-194961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:38:09.501 [DEBUG] [Thread-194961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:38:09.541 [DEBUG] [Thread-194961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:38:09.542 [DEBUG] [Thread-194961] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:38:09.545 [DEBUG] [Thread-194961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:38:09.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:38:09.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:38:09.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:38:09.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:38:09.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:38:09.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:38:09.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:38:09.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:38:09.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:38:09.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.942471 -999.00   +7.90  35.96     79   +4.60 1 1 2 1 1     0    0 1.79 -68.78 ZNESW 36.0 36.0 162.8 42.1 8.5 -24.0 8.2 -23.0 8.1 -22.1 8.4 -23.3
2026-02-15T00:38:09.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:38:09.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:38:09.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.942471
2026-02-15T00:38:09.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:38:09.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:38:09.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:38:09.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:38:09.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:38:09.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:37:45', tmtdew=4.11, humidity=75.06, cloud=0.0, wind=46.14, temperature=7.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T00:37:46', seeing=1.32, atlas_timestamp='2026-02-14T22:37:09.494', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, 0.016250000000001208, -0.02824999999999811, -0.017500000000001847, 0.01249999999999929, 0.007250000000000867, 0.03449999999999953, 0.02925000000000111, 0.03449999999999953, 0.06650000000000134, -0.03575000000000017, -0.0045000000000001705, 0.0625, 0.049249999999998906, 0.05299999999999905, 0.019999999999999574, 0.07075000000000031, 0.05349999999999966, 0.028999999999999915, 0.010249999999999204, 0.08199999999999896, 0.04974999999999952, 0.011250000000000426, 0.07474999999999987, 0.07699999999999996, 0.04150000000000098, 0.02874999999999872, 0.03200000000000003, 0.08150000000000013, 0.06150000000000233, 0.08950000000000102, 0.13100000000000023, 0.06274999999999942], zp_timestamp='2026-02-14T22:34:00')
2026-02-15T00:38:09.578 [DEBUG] [Thread-194961] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:38:09.644 [DEBUG] [Thread-194964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:38:09.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-15T00:38:09.676 [DEBUG] [Thread-194965] [transport.py] [_log()] starting thread (client mode): 0xa2d11630
2026-02-15T00:38:09.676 [DEBUG] [Thread-194965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:38:09.690 [DEBUG] [Thread-194965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:38:09.691 [INFO] [Thread-194965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:38:09.698 [DEBUG] [Thread-194965] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:38:09.698 [DEBUG] [Thread-194965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:38:09.698 [DEBUG] [Thread-194965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:38:09.698 [DEBUG] [Thread-194965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:38:09.698 [DEBUG] [Thread-194965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:38:09.698 [DEBUG] [Thread-194965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:38:09.698 [DEBUG] [Thread-194965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:38:09.698 [DEBUG] [Thread-194965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:38:09.698 [DEBUG] [Thread-194965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:38:09.698 [DEBUG] [Thread-194965] [transport.py] [_log()] client lang: <none>
2026-02-15T00:38:09.698 [DEBUG] [Thread-194965] [transport.py] [_log()] server lang: <none>
2026-02-15T00:38:09.699 [DEBUG] [Thread-194965] [transport.py] [_log()] kex follows: False
2026-02-15T00:38:09.699 [DEBUG] [Thread-194965] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:38:09.699 [DEBUG] [Thread-194965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:38:09.699 [DEBUG] [Thread-194965] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:38:09.699 [DEBUG] [Thread-194965] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:38:09.699 [DEBUG] [Thread-194965] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:38:09.699 [DEBUG] [Thread-194965] [transport.py] [_log()] Compression: none
2026-02-15T00:38:09.699 [DEBUG] [Thread-194965] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:38:09.758 [DEBUG] [Thread-194965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:38:09.758 [DEBUG] [Thread-194965] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:38:09.759 [DEBUG] [Thread-194965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:38:09.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:38:09.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:38:09.814 [DEBUG] [Thread-194965] [transport.py] [_log()] userauth is OK
2026-02-15T00:38:09.814 [DEBUG] [Thread-194965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:38:09.814 [DEBUG] [Thread-194965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:38:09.814 [DEBUG] [Thread-194965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:38:09.814 [DEBUG] [Thread-194965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:38:09.832 [INFO] [Thread-194965] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:38: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-15T00:38:09.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:38:10.613 [DEBUG] [Thread-194965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:38:10.614 [DEBUG] [Thread-194965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:38:10.661 [DEBUG] [Thread-194965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:38:10.662 [DEBUG] [Thread-194965] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:38:10.671 [DEBUG] [Thread-194965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:38:10.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:38:10.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:38:10.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:38:10.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:38:10.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:38:10.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:38:10.708 [DEBUG] [Thread-194965] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:38:18.402 [DEBUG] [Thread-194967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:38:21.851 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:38:21.852 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:38:33.463 [DEBUG] [Thread-194968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:38:40.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:38:40.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:38:40.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-15T00:38:42.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 38, 20), 4.1, 75.14, 0.0, 44.02, 8.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:38:42.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:38:20
2026-02-15T00:38:42.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:38:43.080 [DEBUG] [Thread-194969] [transport.py] [_log()] starting thread (client mode): 0xa5740ac0
2026-02-15T00:38:43.080 [DEBUG] [Thread-194969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:38:43.101 [DEBUG] [Thread-194969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:38:43.101 [INFO] [Thread-194969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:38:43.104 [DEBUG] [Thread-194969] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:38:43.104 [DEBUG] [Thread-194969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:38:43.104 [DEBUG] [Thread-194969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:38:43.105 [DEBUG] [Thread-194969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:38:43.105 [DEBUG] [Thread-194969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:38:43.105 [DEBUG] [Thread-194969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:38:43.105 [DEBUG] [Thread-194969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:38:43.105 [DEBUG] [Thread-194969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:38:43.105 [DEBUG] [Thread-194969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:38:43.105 [DEBUG] [Thread-194969] [transport.py] [_log()] client lang: <none>
2026-02-15T00:38:43.105 [DEBUG] [Thread-194969] [transport.py] [_log()] server lang: <none>
2026-02-15T00:38:43.106 [DEBUG] [Thread-194969] [transport.py] [_log()] kex follows: False
2026-02-15T00:38:43.106 [DEBUG] [Thread-194969] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:38:43.106 [DEBUG] [Thread-194969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:38:43.106 [DEBUG] [Thread-194969] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:38:43.106 [DEBUG] [Thread-194969] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:38:43.106 [DEBUG] [Thread-194969] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:38:43.106 [DEBUG] [Thread-194969] [transport.py] [_log()] Compression: none
2026-02-15T00:38:43.106 [DEBUG] [Thread-194969] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:38:43.124 [DEBUG] [Thread-194969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:38:43.124 [DEBUG] [Thread-194969] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:38:43.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:38:43.125 [DEBUG] [Thread-194969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:38:43.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:38:43.127 [DEBUG] [Thread-194969] [transport.py] [_log()] userauth is OK
2026-02-15T00:38:43.127 [DEBUG] [Thread-194969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:38:43.127 [DEBUG] [Thread-194969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:38:43.127 [DEBUG] [Thread-194969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:38:43.128 [DEBUG] [Thread-194969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:38:43.163 [INFO] [Thread-194969] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:38:43.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:38:43.783 [DEBUG] [Thread-194969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:38:43.783 [DEBUG] [Thread-194969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:38:43.784 [DEBUG] [Thread-194969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:38:43.824 [DEBUG] [Thread-194969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:38:43.825 [DEBUG] [Thread-194969] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:38:43.828 [DEBUG] [Thread-194969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:38:43.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:38:43.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:38:43.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:38:43.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:38:43.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:38:43.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:38:43.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:38:43.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:38:43.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:38:43.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.942818 -999.00   +7.90  37.56     79   +4.60 1 1 2 1 1     0    0 1.70 -68.89 ZNESW 37.6 37.6 160.2 46.7 8.5 -24.0 8.3 -23.1 8.1 -22.1 8.5 -23.4
2026-02-15T00:38:43.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:38:43.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:38:43.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.942818
2026-02-15T00:38:43.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:38:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:38:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:38:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:38:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:38:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:38:20', tmtdew=4.1, humidity=75.14, cloud=0.0, wind=44.02, temperature=8.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:38:21', seeing=1.2, atlas_timestamp='2026-02-14T22:37:39.475', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, 0.016250000000001208, -0.02824999999999811, -0.017500000000001847, 0.01249999999999929, 0.007250000000000867, 0.03449999999999953, 0.02925000000000111, 0.03449999999999953, 0.06650000000000134, -0.03575000000000017, -0.0045000000000001705, 0.0625, 0.049249999999998906, 0.05299999999999905, 0.019999999999999574, 0.07075000000000031, 0.05349999999999966, 0.028999999999999915, 0.010249999999999204, 0.08199999999999896, 0.04974999999999952, 0.011250000000000426, 0.07474999999999987, 0.07699999999999996, 0.04150000000000098, 0.02874999999999872, 0.03200000000000003, 0.08150000000000013, 0.06150000000000233, 0.08950000000000102, 0.13100000000000023, 0.06274999999999942], zp_timestamp='2026-02-14T22:34:00')
2026-02-15T00:38:43.854 [DEBUG] [Thread-194969] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:38:43.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-15T00:38:43.951 [DEBUG] [Thread-194972] [transport.py] [_log()] starting thread (client mode): 0xa5742c50
2026-02-15T00:38:43.951 [DEBUG] [Thread-194972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:38:43.965 [DEBUG] [Thread-194972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:38:43.966 [INFO] [Thread-194972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:38:43.973 [DEBUG] [Thread-194972] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:38:43.973 [DEBUG] [Thread-194972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:38:43.973 [DEBUG] [Thread-194972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:38:43.973 [DEBUG] [Thread-194972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:38:43.973 [DEBUG] [Thread-194972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:38:43.973 [DEBUG] [Thread-194972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:38:43.973 [DEBUG] [Thread-194972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:38:43.973 [DEBUG] [Thread-194972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:38:43.973 [DEBUG] [Thread-194972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:38:43.973 [DEBUG] [Thread-194972] [transport.py] [_log()] client lang: <none>
2026-02-15T00:38:43.973 [DEBUG] [Thread-194972] [transport.py] [_log()] server lang: <none>
2026-02-15T00:38:43.973 [DEBUG] [Thread-194972] [transport.py] [_log()] kex follows: False
2026-02-15T00:38:43.974 [DEBUG] [Thread-194972] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:38:43.974 [DEBUG] [Thread-194972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:38:43.974 [DEBUG] [Thread-194972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:38:43.974 [DEBUG] [Thread-194972] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:38:43.974 [DEBUG] [Thread-194972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:38:43.974 [DEBUG] [Thread-194972] [transport.py] [_log()] Compression: none
2026-02-15T00:38:43.974 [DEBUG] [Thread-194972] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:38:44.033 [DEBUG] [Thread-194972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:38:44.034 [DEBUG] [Thread-194972] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:38:44.034 [DEBUG] [Thread-194972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:38:44.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:38:44.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:38:44.089 [DEBUG] [Thread-194972] [transport.py] [_log()] userauth is OK
2026-02-15T00:38:44.089 [DEBUG] [Thread-194972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:38:44.090 [DEBUG] [Thread-194972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:38:44.090 [DEBUG] [Thread-194972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:38:44.090 [DEBUG] [Thread-194972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:38:44.109 [INFO] [Thread-194972] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:38:44.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-15T00:38:44.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:38:44.956 [DEBUG] [Thread-194972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:38:44.956 [DEBUG] [Thread-194972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:38:45.004 [DEBUG] [Thread-194972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:38:45.005 [DEBUG] [Thread-194972] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:38:45.014 [DEBUG] [Thread-194972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:38:45.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:38:45.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:38:45.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-15T00:38:45.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:38:45.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:38:45.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:38:45.051 [DEBUG] [Thread-194972] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:38:48.502 [DEBUG] [Thread-194974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:39:03.556 [DEBUG] [Thread-194975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:39:09.697 [DEBUG] [Thread-194976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:39:15.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:39:15.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:39:15.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-15T00:39:16.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 38, 56), 4.09, 75.19, 0.0, 41.52, 8.04, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:39:16.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:38:56
2026-02-15T00:39:17.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:39:17.445 [DEBUG] [Thread-194977] [transport.py] [_log()] starting thread (client mode): 0xa2d6aa40
2026-02-15T00:39:17.445 [DEBUG] [Thread-194977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:39:17.460 [DEBUG] [Thread-194977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:39:17.460 [INFO] [Thread-194977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:39:17.463 [DEBUG] [Thread-194977] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:39:17.463 [DEBUG] [Thread-194977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:39:17.463 [DEBUG] [Thread-194977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:39:17.464 [DEBUG] [Thread-194977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:39:17.464 [DEBUG] [Thread-194977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:39:17.464 [DEBUG] [Thread-194977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:39:17.464 [DEBUG] [Thread-194977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:39:17.464 [DEBUG] [Thread-194977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:39:17.464 [DEBUG] [Thread-194977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:39:17.464 [DEBUG] [Thread-194977] [transport.py] [_log()] client lang: <none>
2026-02-15T00:39:17.464 [DEBUG] [Thread-194977] [transport.py] [_log()] server lang: <none>
2026-02-15T00:39:17.464 [DEBUG] [Thread-194977] [transport.py] [_log()] kex follows: False
2026-02-15T00:39:17.464 [DEBUG] [Thread-194977] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:39:17.464 [DEBUG] [Thread-194977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:39:17.464 [DEBUG] [Thread-194977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:39:17.464 [DEBUG] [Thread-194977] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:39:17.464 [DEBUG] [Thread-194977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:39:17.464 [DEBUG] [Thread-194977] [transport.py] [_log()] Compression: none
2026-02-15T00:39:17.464 [DEBUG] [Thread-194977] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:39:17.481 [DEBUG] [Thread-194977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:39:17.481 [DEBUG] [Thread-194977] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:39:17.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:39:17.482 [DEBUG] [Thread-194977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:39:17.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:39:17.484 [DEBUG] [Thread-194977] [transport.py] [_log()] userauth is OK
2026-02-15T00:39:17.485 [DEBUG] [Thread-194977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:39:17.485 [DEBUG] [Thread-194977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:39:17.485 [DEBUG] [Thread-194977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:39:17.485 [DEBUG] [Thread-194977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:39:17.499 [INFO] [Thread-194977] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:39:17.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:39:18.270 [DEBUG] [Thread-194977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:39:18.270 [DEBUG] [Thread-194977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:39:18.271 [DEBUG] [Thread-194977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:39:18.311 [DEBUG] [Thread-194977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:39:18.312 [DEBUG] [Thread-194977] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:39:18.315 [DEBUG] [Thread-194977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:39:18.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:39:18.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:39:18.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:39:18.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:39:18.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:39:18.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:39:18.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:39:18.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:39:18.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:39:18.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.943513 -999.00   +7.90  32.55     79   +4.60 1 1 2 1 1     0    0 1.60 -71.75 ZNESW 32.5 32.5 149.8 46.4 8.5 -23.9 8.2 -23.1 8.0 -22.0 8.4 -23.3
2026-02-15T00:39:18.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:39:18.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:39:18.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.943513
2026-02-15T00:39:18.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:39:18.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:39:18.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:39:18.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:39:18.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:39:18.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:38:56', tmtdew=4.09, humidity=75.19, cloud=0.0, wind=41.52, temperature=8.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:38:56', seeing=1.27, atlas_timestamp='2026-02-14T22:38:39.523', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, 0.016250000000001208, -0.02824999999999811, -0.017500000000001847, 0.01249999999999929, 0.007250000000000867, 0.03449999999999953, 0.02925000000000111, 0.03449999999999953, 0.06650000000000134, -0.03575000000000017, -0.0045000000000001705, 0.0625, 0.049249999999998906, 0.05299999999999905, 0.019999999999999574, 0.07075000000000031, 0.05349999999999966, 0.028999999999999915, 0.010249999999999204, 0.08199999999999896, 0.04974999999999952, 0.011250000000000426, 0.07474999999999987, 0.07699999999999996, 0.04150000000000098, 0.02874999999999872, 0.03200000000000003, 0.08150000000000013, 0.06150000000000233, 0.08950000000000102, 0.13100000000000023, 0.06274999999999942], zp_timestamp='2026-02-14T22:37:00')
2026-02-15T00:39:18.340 [DEBUG] [Thread-194977] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:39:18.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-15T00:39:18.427 [DEBUG] [Thread-194980] [transport.py] [_log()] starting thread (client mode): 0xa2d685e0
2026-02-15T00:39:18.427 [DEBUG] [Thread-194980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:39:18.441 [DEBUG] [Thread-194980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:39:18.441 [INFO] [Thread-194980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:39:18.449 [DEBUG] [Thread-194980] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:39:18.449 [DEBUG] [Thread-194980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:39:18.449 [DEBUG] [Thread-194980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:39:18.449 [DEBUG] [Thread-194980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:39:18.449 [DEBUG] [Thread-194980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:39:18.450 [DEBUG] [Thread-194980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:39:18.450 [DEBUG] [Thread-194980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:39:18.450 [DEBUG] [Thread-194980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:39:18.450 [DEBUG] [Thread-194980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:39:18.450 [DEBUG] [Thread-194980] [transport.py] [_log()] client lang: <none>
2026-02-15T00:39:18.450 [DEBUG] [Thread-194980] [transport.py] [_log()] server lang: <none>
2026-02-15T00:39:18.450 [DEBUG] [Thread-194980] [transport.py] [_log()] kex follows: False
2026-02-15T00:39:18.450 [DEBUG] [Thread-194980] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:39:18.450 [DEBUG] [Thread-194980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:39:18.450 [DEBUG] [Thread-194980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:39:18.450 [DEBUG] [Thread-194980] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:39:18.450 [DEBUG] [Thread-194980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:39:18.450 [DEBUG] [Thread-194980] [transport.py] [_log()] Compression: none
2026-02-15T00:39:18.450 [DEBUG] [Thread-194980] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:39:18.509 [DEBUG] [Thread-194980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:39:18.509 [DEBUG] [Thread-194980] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:39:18.510 [DEBUG] [Thread-194980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:39:18.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:39:18.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:39:18.566 [DEBUG] [Thread-194980] [transport.py] [_log()] userauth is OK
2026-02-15T00:39:18.566 [DEBUG] [Thread-194980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:39:18.566 [DEBUG] [Thread-194980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:39:18.566 [DEBUG] [Thread-194980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:39:18.566 [DEBUG] [Thread-194980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:39:18.584 [INFO] [Thread-194980] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:39:18.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-15T00:39:18.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:39:18.596 [DEBUG] [Thread-194982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:39:19.379 [DEBUG] [Thread-194980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:39:19.380 [DEBUG] [Thread-194980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:39:19.427 [DEBUG] [Thread-194980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:39:19.428 [DEBUG] [Thread-194980] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:39:19.437 [DEBUG] [Thread-194980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:39:19.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:39:19.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:39:19.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-15T00:39:19.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:39:19.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:39:19.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:39:19.474 [DEBUG] [Thread-194980] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:39:22.055 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:39:22.057 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:39:33.655 [DEBUG] [Thread-194983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:39:48.692 [DEBUG] [Thread-194984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:39:49.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:39:49.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:39:49.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:39:51.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 39, 31), 4.07, 75.27, 0.0, 41.18, 8.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:39:51.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:39:31
2026-02-15T00:39:51.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:39:51.942 [DEBUG] [Thread-194985] [transport.py] [_log()] starting thread (client mode): 0xa5742080
2026-02-15T00:39:51.942 [DEBUG] [Thread-194985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:39:51.964 [DEBUG] [Thread-194985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:39:51.964 [INFO] [Thread-194985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:39:51.967 [DEBUG] [Thread-194985] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:39:51.968 [DEBUG] [Thread-194985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:39:51.968 [DEBUG] [Thread-194985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:39:51.968 [DEBUG] [Thread-194985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:39:51.968 [DEBUG] [Thread-194985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:39:51.968 [DEBUG] [Thread-194985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:39:51.968 [DEBUG] [Thread-194985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:39:51.968 [DEBUG] [Thread-194985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:39:51.968 [DEBUG] [Thread-194985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:39:51.968 [DEBUG] [Thread-194985] [transport.py] [_log()] client lang: <none>
2026-02-15T00:39:51.968 [DEBUG] [Thread-194985] [transport.py] [_log()] server lang: <none>
2026-02-15T00:39:51.969 [DEBUG] [Thread-194985] [transport.py] [_log()] kex follows: False
2026-02-15T00:39:51.969 [DEBUG] [Thread-194985] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:39:51.969 [DEBUG] [Thread-194985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:39:51.969 [DEBUG] [Thread-194985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:39:51.969 [DEBUG] [Thread-194985] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:39:51.969 [DEBUG] [Thread-194985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:39:51.969 [DEBUG] [Thread-194985] [transport.py] [_log()] Compression: none
2026-02-15T00:39:51.969 [DEBUG] [Thread-194985] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:39:51.988 [DEBUG] [Thread-194985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:39:51.989 [DEBUG] [Thread-194985] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:39:51.990 [DEBUG] [Thread-194985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:39:51.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:39:51.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:39:51.992 [DEBUG] [Thread-194985] [transport.py] [_log()] userauth is OK
2026-02-15T00:39:51.993 [DEBUG] [Thread-194985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:39:51.993 [DEBUG] [Thread-194985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:39:51.993 [DEBUG] [Thread-194985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:39:51.993 [DEBUG] [Thread-194985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:39:52.025 [INFO] [Thread-194985] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:39:52.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:39:52.686 [DEBUG] [Thread-194985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:39:52.686 [DEBUG] [Thread-194985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:39:52.686 [DEBUG] [Thread-194985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:39:52.727 [DEBUG] [Thread-194985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:39:52.727 [DEBUG] [Thread-194985] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:39:52.730 [DEBUG] [Thread-194985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:39:52.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:39:52.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:39:52.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:39:52.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:39:52.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:39:52.750 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:39:52.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:39:52.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:39:52.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:39:52.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.943859 -999.00   +7.90  33.00     79   +4.60 1 1 2 1 1     0    0 1.27 -81.71 ZNESW 33.0 33.0 156.0 45.8 8.4 -24.1 8.2 -23.1 8.0 -22.1 8.4 -23.4
2026-02-15T00:39:52.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:39:52.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:39:52.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.943859
2026-02-15T00:39:52.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:39:52.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:39:52.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:39:52.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:39:52.752 [DEBUG] [Thread-194985] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:39:52.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:39:52.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:39:31', tmtdew=4.07, humidity=75.27, cloud=0.0, wind=41.18, temperature=8.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:39:31', seeing=1.27, atlas_timestamp='2026-02-14T22:39:09.418', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, 0.016250000000001208, -0.02824999999999811, -0.017500000000001847, 0.01249999999999929, 0.007250000000000867, 0.03449999999999953, 0.02925000000000111, 0.03449999999999953, 0.06650000000000134, -0.03575000000000017, -0.0045000000000001705, 0.0625, 0.049249999999998906, 0.05299999999999905, 0.019999999999999574, 0.07075000000000031, 0.05349999999999966, 0.028999999999999915, 0.010249999999999204, 0.08199999999999896, 0.04974999999999952, 0.011250000000000426, 0.07474999999999987, 0.07699999999999996, 0.04150000000000098, 0.02874999999999872, 0.03200000000000003, 0.08150000000000013, 0.06150000000000233, 0.08950000000000102, 0.13100000000000023, 0.06274999999999942], zp_timestamp='2026-02-14T22:37:00')
2026-02-15T00:39:52.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T00:39:52.845 [DEBUG] [Thread-194988] [transport.py] [_log()] starting thread (client mode): 0xa2d6b430
2026-02-15T00:39:52.846 [DEBUG] [Thread-194988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:39:52.860 [DEBUG] [Thread-194988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:39:52.860 [INFO] [Thread-194988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:39:52.867 [DEBUG] [Thread-194988] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:39:52.867 [DEBUG] [Thread-194988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:39:52.867 [DEBUG] [Thread-194988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:39:52.867 [DEBUG] [Thread-194988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:39:52.867 [DEBUG] [Thread-194988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:39:52.867 [DEBUG] [Thread-194988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:39:52.867 [DEBUG] [Thread-194988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:39:52.867 [DEBUG] [Thread-194988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:39:52.867 [DEBUG] [Thread-194988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:39:52.868 [DEBUG] [Thread-194988] [transport.py] [_log()] client lang: <none>
2026-02-15T00:39:52.868 [DEBUG] [Thread-194988] [transport.py] [_log()] server lang: <none>
2026-02-15T00:39:52.868 [DEBUG] [Thread-194988] [transport.py] [_log()] kex follows: False
2026-02-15T00:39:52.868 [DEBUG] [Thread-194988] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:39:52.868 [DEBUG] [Thread-194988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:39:52.868 [DEBUG] [Thread-194988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:39:52.868 [DEBUG] [Thread-194988] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:39:52.868 [DEBUG] [Thread-194988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:39:52.868 [DEBUG] [Thread-194988] [transport.py] [_log()] Compression: none
2026-02-15T00:39:52.868 [DEBUG] [Thread-194988] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:39:52.924 [DEBUG] [Thread-194988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:39:52.924 [DEBUG] [Thread-194988] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:39:52.924 [DEBUG] [Thread-194988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:39:52.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:39:52.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:39:52.980 [DEBUG] [Thread-194988] [transport.py] [_log()] userauth is OK
2026-02-15T00:39:52.981 [DEBUG] [Thread-194988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:39:52.981 [DEBUG] [Thread-194988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:39:52.981 [DEBUG] [Thread-194988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:39:52.981 [DEBUG] [Thread-194988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:39:52.998 [INFO] [Thread-194988] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:39:52.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-15T00:39:52.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:39:53.804 [DEBUG] [Thread-194988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:39:53.804 [DEBUG] [Thread-194988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:39:53.852 [DEBUG] [Thread-194988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:39:53.852 [DEBUG] [Thread-194988] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:39:53.861 [DEBUG] [Thread-194988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:39:53.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:39:53.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-15T00:39:53.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-15T00:39:53.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:39:53.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:39:53.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:39:53.894 [DEBUG] [Thread-194988] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:40:03.724 [DEBUG] [Thread-194990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:40:09.755 [DEBUG] [Thread-194991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:40:18.785 [DEBUG] [Thread-194992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:40:22.274 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:40:22.275 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:40:23.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:40:23.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:40:23.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-15T00:40:25.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 40, 6), 4.08, 75.26, 0.0, 39.75, 7.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:40:25.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:40:06
2026-02-15T00:40:26.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:40:26.248 [DEBUG] [Thread-194993] [transport.py] [_log()] starting thread (client mode): 0xa2d10a90
2026-02-15T00:40:26.248 [DEBUG] [Thread-194993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:40:26.267 [DEBUG] [Thread-194993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:40:26.268 [INFO] [Thread-194993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:40:26.269 [DEBUG] [Thread-194993] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:40:26.269 [DEBUG] [Thread-194993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:40:26.269 [DEBUG] [Thread-194993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:40:26.269 [DEBUG] [Thread-194993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:40:26.269 [DEBUG] [Thread-194993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:40:26.269 [DEBUG] [Thread-194993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:40:26.269 [DEBUG] [Thread-194993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:40:26.269 [DEBUG] [Thread-194993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:40:26.269 [DEBUG] [Thread-194993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:40:26.269 [DEBUG] [Thread-194993] [transport.py] [_log()] client lang: <none>
2026-02-15T00:40:26.269 [DEBUG] [Thread-194993] [transport.py] [_log()] server lang: <none>
2026-02-15T00:40:26.269 [DEBUG] [Thread-194993] [transport.py] [_log()] kex follows: False
2026-02-15T00:40:26.269 [DEBUG] [Thread-194993] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:40:26.270 [DEBUG] [Thread-194993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:40:26.270 [DEBUG] [Thread-194993] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:40:26.270 [DEBUG] [Thread-194993] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:40:26.270 [DEBUG] [Thread-194993] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:40:26.270 [DEBUG] [Thread-194993] [transport.py] [_log()] Compression: none
2026-02-15T00:40:26.270 [DEBUG] [Thread-194993] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:40:26.279 [DEBUG] [Thread-194993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:40:26.280 [DEBUG] [Thread-194993] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:40:26.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:40:26.281 [DEBUG] [Thread-194993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:40:26.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:40:26.283 [DEBUG] [Thread-194993] [transport.py] [_log()] userauth is OK
2026-02-15T00:40:26.283 [DEBUG] [Thread-194993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:40:26.283 [DEBUG] [Thread-194993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:40:26.284 [DEBUG] [Thread-194993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:40:26.284 [DEBUG] [Thread-194993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:40:26.320 [INFO] [Thread-194993] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:40:26.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:40:26.867 [DEBUG] [Thread-194993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:40:26.868 [DEBUG] [Thread-194993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:40:26.868 [DEBUG] [Thread-194993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:40:26.908 [DEBUG] [Thread-194993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:40:26.908 [DEBUG] [Thread-194993] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:40:26.912 [DEBUG] [Thread-194993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:40:26.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:40:26.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:40:26.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:40:26.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:40:26.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:40:26.936 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:40:26.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:40:26.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:40:26.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:40:26.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.944207 -999.00   +7.90  27.04     79   +4.60 1 1 1 1 1     0    0 1.62 -72.10 ZNESW 27.0 27.0 150.0 40.6 8.4 -24.0 8.2 -23.1 8.1 -22.1 8.4 -23.3
2026-02-15T00:40:26.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:40:26.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:40:26.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.944207
2026-02-15T00:40:26.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:40:26.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:40:26.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:40:26.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:40:26.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:40:26.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:40:06', tmtdew=4.08, humidity=75.26, cloud=0.0, wind=39.75, temperature=7.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:40:07', seeing=1.16, atlas_timestamp='2026-02-14T22:39:39.485', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, 0.016250000000001208, -0.02824999999999811, -0.017500000000001847, 0.01249999999999929, 0.007250000000000867, 0.03449999999999953, 0.02925000000000111, 0.03449999999999953, 0.06650000000000134, -0.03575000000000017, -0.0045000000000001705, 0.0625, 0.049249999999998906, 0.05299999999999905, 0.019999999999999574, 0.07075000000000031, 0.05349999999999966, 0.028999999999999915, 0.010249999999999204, 0.08199999999999896, 0.04974999999999952, 0.011250000000000426, 0.07474999999999987, 0.07699999999999996, 0.04150000000000098, 0.02874999999999872, 0.03200000000000003, 0.08150000000000013, 0.06150000000000233, 0.08950000000000102, 0.13100000000000023, 0.06274999999999942], zp_timestamp='2026-02-14T22:37:00')
2026-02-15T00:40:26.939 [DEBUG] [Thread-194993] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:40:27.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-15T00:40:27.032 [DEBUG] [Thread-194996] [transport.py] [_log()] starting thread (client mode): 0xa2d11510
2026-02-15T00:40:27.032 [DEBUG] [Thread-194996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:40:27.047 [DEBUG] [Thread-194996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:40:27.048 [INFO] [Thread-194996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:40:27.055 [DEBUG] [Thread-194996] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:40:27.056 [DEBUG] [Thread-194996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:40:27.056 [DEBUG] [Thread-194996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:40:27.056 [DEBUG] [Thread-194996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:40:27.056 [DEBUG] [Thread-194996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:40:27.056 [DEBUG] [Thread-194996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:40:27.056 [DEBUG] [Thread-194996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:40:27.056 [DEBUG] [Thread-194996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:40:27.056 [DEBUG] [Thread-194996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:40:27.056 [DEBUG] [Thread-194996] [transport.py] [_log()] client lang: <none>
2026-02-15T00:40:27.056 [DEBUG] [Thread-194996] [transport.py] [_log()] server lang: <none>
2026-02-15T00:40:27.056 [DEBUG] [Thread-194996] [transport.py] [_log()] kex follows: False
2026-02-15T00:40:27.056 [DEBUG] [Thread-194996] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:40:27.056 [DEBUG] [Thread-194996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:40:27.056 [DEBUG] [Thread-194996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:40:27.056 [DEBUG] [Thread-194996] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:40:27.056 [DEBUG] [Thread-194996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:40:27.056 [DEBUG] [Thread-194996] [transport.py] [_log()] Compression: none
2026-02-15T00:40:27.056 [DEBUG] [Thread-194996] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:40:27.114 [DEBUG] [Thread-194996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:40:27.115 [DEBUG] [Thread-194996] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:40:27.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:40:27.116 [DEBUG] [Thread-194996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:40:27.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:40:27.174 [DEBUG] [Thread-194996] [transport.py] [_log()] userauth is OK
2026-02-15T00:40:27.174 [DEBUG] [Thread-194996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:40:27.174 [DEBUG] [Thread-194996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:40:27.174 [DEBUG] [Thread-194996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:40:27.174 [DEBUG] [Thread-194996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:40:27.193 [INFO] [Thread-194996] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:40:27.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-15T00:40:27.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:40:27.977 [DEBUG] [Thread-194996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:40:27.977 [DEBUG] [Thread-194996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:40:28.026 [DEBUG] [Thread-194996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:40:28.026 [DEBUG] [Thread-194996] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:40:28.035 [DEBUG] [Thread-194996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:40:28.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:40:28.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:40:28.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:40:28.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:40:28.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:40:28.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:40:28.070 [DEBUG] [Thread-194996] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:40:33.825 [DEBUG] [Thread-194998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:40:48.875 [DEBUG] [Thread-194999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:40:58.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:40:58.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:40:58.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-15T00:41:00.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 40, 42), 4.23, 74.65, 0.0, 47.38, 8.29, 0, 0, 0, 2, 1, 0),)
2026-02-15T00:41:00.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:40:42
2026-02-15T00:41:00.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:41:00.495 [DEBUG] [Thread-195000] [transport.py] [_log()] starting thread (client mode): 0xa2d69180
2026-02-15T00:41:00.496 [DEBUG] [Thread-195000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:41:00.516 [DEBUG] [Thread-195000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:41:00.516 [INFO] [Thread-195000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:41:00.519 [DEBUG] [Thread-195000] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:41:00.520 [DEBUG] [Thread-195000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:41:00.520 [DEBUG] [Thread-195000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:41:00.520 [DEBUG] [Thread-195000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:41:00.520 [DEBUG] [Thread-195000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:41:00.520 [DEBUG] [Thread-195000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:41:00.520 [DEBUG] [Thread-195000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:41:00.520 [DEBUG] [Thread-195000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:41:00.520 [DEBUG] [Thread-195000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:41:00.520 [DEBUG] [Thread-195000] [transport.py] [_log()] client lang: <none>
2026-02-15T00:41:00.520 [DEBUG] [Thread-195000] [transport.py] [_log()] server lang: <none>
2026-02-15T00:41:00.520 [DEBUG] [Thread-195000] [transport.py] [_log()] kex follows: False
2026-02-15T00:41:00.521 [DEBUG] [Thread-195000] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:41:00.521 [DEBUG] [Thread-195000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:41:00.521 [DEBUG] [Thread-195000] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:41:00.521 [DEBUG] [Thread-195000] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:41:00.521 [DEBUG] [Thread-195000] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:41:00.521 [DEBUG] [Thread-195000] [transport.py] [_log()] Compression: none
2026-02-15T00:41:00.521 [DEBUG] [Thread-195000] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:41:00.541 [DEBUG] [Thread-195000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:41:00.541 [DEBUG] [Thread-195000] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:41:00.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:41:00.543 [DEBUG] [Thread-195000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:41:00.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:41:00.544 [DEBUG] [Thread-195000] [transport.py] [_log()] userauth is OK
2026-02-15T00:41:00.545 [DEBUG] [Thread-195000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:41:00.545 [DEBUG] [Thread-195000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:41:00.545 [DEBUG] [Thread-195000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:41:00.545 [DEBUG] [Thread-195000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:41:00.569 [INFO] [Thread-195000] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:41:00.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:41:01.216 [DEBUG] [Thread-195000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:41:01.216 [DEBUG] [Thread-195000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:41:01.216 [DEBUG] [Thread-195000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:41:01.257 [DEBUG] [Thread-195000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:41:01.258 [DEBUG] [Thread-195000] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:41:01.261 [DEBUG] [Thread-195000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:41:01.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:41:01.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:41:01.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:41:01.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:41:01.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:41:01.284 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:41:01.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:41:01.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:41:01.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:41:01.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.944554 -999.00   +7.90  29.22     79   +4.60 1 1 1 1 1     0    0 1.35 -76.69 ZNESW 29.2 29.2 163.2 38.0 8.4 -24.1 8.2 -23.0 8.0 -22.1 8.4 -23.3
2026-02-15T00:41:01.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:41:01.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:41:01.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.944554
2026-02-15T00:41:01.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:41:01.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:41:01.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:41:01.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:41:01.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:41:01.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:40:42', tmtdew=4.23, humidity=74.65, cloud=0.0, wind=47.38, temperature=8.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T00:40:42', seeing=1.28, atlas_timestamp='2026-02-14T22:40:09.466', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, 0.016250000000001208, -0.02824999999999811, -0.017500000000001847, 0.01249999999999929, 0.007250000000000867, 0.03449999999999953, 0.02925000000000111, 0.03449999999999953, 0.06650000000000134, -0.03575000000000017, -0.0045000000000001705, 0.0625, 0.049249999999998906, 0.05299999999999905, 0.019999999999999574, 0.07075000000000031, 0.05349999999999966, 0.028999999999999915, 0.010249999999999204, 0.08199999999999896, 0.04974999999999952, 0.011250000000000426, 0.07474999999999987, 0.07699999999999996, 0.04150000000000098, 0.02874999999999872, 0.03200000000000003, 0.08150000000000013, 0.06150000000000233, 0.08950000000000102, 0.13100000000000023, 0.06274999999999942], zp_timestamp='2026-02-14T22:37:00')
2026-02-15T00:41:01.287 [DEBUG] [Thread-195000] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:41:01.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-15T00:41:01.382 [DEBUG] [Thread-195003] [transport.py] [_log()] starting thread (client mode): 0xa2d790f0
2026-02-15T00:41:01.383 [DEBUG] [Thread-195003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:41:01.397 [DEBUG] [Thread-195003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:41:01.398 [INFO] [Thread-195003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:41:01.405 [DEBUG] [Thread-195003] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:41:01.405 [DEBUG] [Thread-195003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:41:01.405 [DEBUG] [Thread-195003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:41:01.405 [DEBUG] [Thread-195003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:41:01.405 [DEBUG] [Thread-195003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:41:01.405 [DEBUG] [Thread-195003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:41:01.405 [DEBUG] [Thread-195003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:41:01.405 [DEBUG] [Thread-195003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:41:01.405 [DEBUG] [Thread-195003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:41:01.405 [DEBUG] [Thread-195003] [transport.py] [_log()] client lang: <none>
2026-02-15T00:41:01.405 [DEBUG] [Thread-195003] [transport.py] [_log()] server lang: <none>
2026-02-15T00:41:01.406 [DEBUG] [Thread-195003] [transport.py] [_log()] kex follows: False
2026-02-15T00:41:01.406 [DEBUG] [Thread-195003] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:41:01.406 [DEBUG] [Thread-195003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:41:01.406 [DEBUG] [Thread-195003] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:41:01.406 [DEBUG] [Thread-195003] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:41:01.406 [DEBUG] [Thread-195003] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:41:01.406 [DEBUG] [Thread-195003] [transport.py] [_log()] Compression: none
2026-02-15T00:41:01.406 [DEBUG] [Thread-195003] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:41:01.465 [DEBUG] [Thread-195003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:41:01.466 [DEBUG] [Thread-195003] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:41:01.466 [DEBUG] [Thread-195003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:41:01.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:41:01.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:41:01.521 [DEBUG] [Thread-195003] [transport.py] [_log()] userauth is OK
2026-02-15T00:41:01.522 [DEBUG] [Thread-195003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:41:01.522 [DEBUG] [Thread-195003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:41:01.522 [DEBUG] [Thread-195003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:41:01.522 [DEBUG] [Thread-195003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:41:01.540 [INFO] [Thread-195003] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:41:01.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-15T00:41:01.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:41:02.373 [DEBUG] [Thread-195003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:41:02.374 [DEBUG] [Thread-195003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:41:02.422 [DEBUG] [Thread-195003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:41:02.422 [DEBUG] [Thread-195003] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:41:02.431 [DEBUG] [Thread-195003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:41:02.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:41:02.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-15T00:41:02.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-15T00:41:02.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:41:02.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:41:02.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:41:02.465 [DEBUG] [Thread-195003] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:41:03.912 [DEBUG] [Thread-195005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:41:09.822 [DEBUG] [Thread-195006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:41:18.965 [DEBUG] [Thread-195007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:41:22.480 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:41:22.481 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:41:32.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:41:32.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:41:32.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:41:34.002 [DEBUG] [Thread-195008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:41:34.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 41, 18), 4.06, 75.86, 0.0, 36.08, 7.95, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:41:34.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:41:18
2026-02-15T00:41:34.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:41:34.997 [DEBUG] [Thread-195009] [transport.py] [_log()] starting thread (client mode): 0xa2d01f30
2026-02-15T00:41:34.997 [DEBUG] [Thread-195009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:41:35.017 [DEBUG] [Thread-195009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:41:35.017 [INFO] [Thread-195009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:41:35.021 [DEBUG] [Thread-195009] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:41:35.021 [DEBUG] [Thread-195009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:41:35.021 [DEBUG] [Thread-195009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:41:35.021 [DEBUG] [Thread-195009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:41:35.021 [DEBUG] [Thread-195009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:41:35.021 [DEBUG] [Thread-195009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:41:35.021 [DEBUG] [Thread-195009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:41:35.021 [DEBUG] [Thread-195009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:41:35.021 [DEBUG] [Thread-195009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:41:35.022 [DEBUG] [Thread-195009] [transport.py] [_log()] client lang: <none>
2026-02-15T00:41:35.022 [DEBUG] [Thread-195009] [transport.py] [_log()] server lang: <none>
2026-02-15T00:41:35.022 [DEBUG] [Thread-195009] [transport.py] [_log()] kex follows: False
2026-02-15T00:41:35.022 [DEBUG] [Thread-195009] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:41:35.022 [DEBUG] [Thread-195009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:41:35.022 [DEBUG] [Thread-195009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:41:35.022 [DEBUG] [Thread-195009] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:41:35.022 [DEBUG] [Thread-195009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:41:35.022 [DEBUG] [Thread-195009] [transport.py] [_log()] Compression: none
2026-02-15T00:41:35.022 [DEBUG] [Thread-195009] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:41:35.039 [DEBUG] [Thread-195009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:41:35.040 [DEBUG] [Thread-195009] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:41:35.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:41:35.041 [DEBUG] [Thread-195009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:41:35.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:41:35.042 [DEBUG] [Thread-195009] [transport.py] [_log()] userauth is OK
2026-02-15T00:41:35.042 [DEBUG] [Thread-195009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:41:35.042 [DEBUG] [Thread-195009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:41:35.043 [DEBUG] [Thread-195009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:41:35.043 [DEBUG] [Thread-195009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:41:35.063 [INFO] [Thread-195009] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:41:35.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:41:35.708 [DEBUG] [Thread-195009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:41:35.708 [DEBUG] [Thread-195009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:41:35.708 [DEBUG] [Thread-195009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:41:35.749 [DEBUG] [Thread-195009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:41:35.750 [DEBUG] [Thread-195009] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:41:35.753 [DEBUG] [Thread-195009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:41:35.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:41:35.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:41:35.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:41:35.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:41:35.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:41:35.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:41:35.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:41:35.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:41:35.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:41:35.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.944901 -999.00   +7.90  35.74     79   +4.60 1 1 2 1 1     0    0 1.26 -81.71 ZNESW 35.7 35.7 145.0 44.9 8.4 -24.1 8.2 -23.0 8.0 -22.2 8.4 -23.2
2026-02-15T00:41:35.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:41:35.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:41:35.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.944901
2026-02-15T00:41:35.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:41:35.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:41:35.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:41:35.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:41:35.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:41:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:41:18', tmtdew=4.06, humidity=75.86, cloud=0.0, wind=36.08, temperature=7.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:41:18', seeing=1.48, atlas_timestamp='2026-02-14T22:40:39.446', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, 0.016250000000001208, -0.02824999999999811, -0.017500000000001847, 0.01249999999999929, 0.007250000000000867, 0.03449999999999953, 0.02925000000000111, 0.03449999999999953, 0.06650000000000134, -0.03575000000000017, -0.0045000000000001705, 0.0625, 0.049249999999998906, 0.05299999999999905, 0.019999999999999574, 0.07075000000000031, 0.05349999999999966, 0.028999999999999915, 0.010249999999999204, 0.08199999999999896, 0.04974999999999952, 0.011250000000000426, 0.07474999999999987, 0.07699999999999996, 0.04150000000000098, 0.02874999999999872, 0.03200000000000003, 0.08150000000000013, 0.06150000000000233, 0.08950000000000102, 0.13100000000000023, 0.06274999999999942], zp_timestamp='2026-02-14T22:37:00')
2026-02-15T00:41:35.781 [DEBUG] [Thread-195009] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:41:35.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-15T00:41:35.875 [DEBUG] [Thread-195012] [transport.py] [_log()] starting thread (client mode): 0xa2d12530
2026-02-15T00:41:35.875 [DEBUG] [Thread-195012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:41:35.890 [DEBUG] [Thread-195012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:41:35.890 [INFO] [Thread-195012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:41:35.898 [DEBUG] [Thread-195012] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:41:35.898 [DEBUG] [Thread-195012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:41:35.898 [DEBUG] [Thread-195012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:41:35.898 [DEBUG] [Thread-195012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:41:35.898 [DEBUG] [Thread-195012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:41:35.898 [DEBUG] [Thread-195012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:41:35.898 [DEBUG] [Thread-195012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:41:35.898 [DEBUG] [Thread-195012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:41:35.898 [DEBUG] [Thread-195012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:41:35.898 [DEBUG] [Thread-195012] [transport.py] [_log()] client lang: <none>
2026-02-15T00:41:35.898 [DEBUG] [Thread-195012] [transport.py] [_log()] server lang: <none>
2026-02-15T00:41:35.898 [DEBUG] [Thread-195012] [transport.py] [_log()] kex follows: False
2026-02-15T00:41:35.898 [DEBUG] [Thread-195012] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:41:35.898 [DEBUG] [Thread-195012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:41:35.898 [DEBUG] [Thread-195012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:41:35.899 [DEBUG] [Thread-195012] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:41:35.899 [DEBUG] [Thread-195012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:41:35.899 [DEBUG] [Thread-195012] [transport.py] [_log()] Compression: none
2026-02-15T00:41:35.899 [DEBUG] [Thread-195012] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:41:35.957 [DEBUG] [Thread-195012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:41:35.957 [DEBUG] [Thread-195012] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:41:35.958 [DEBUG] [Thread-195012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:41:35.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:41:35.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:41:36.013 [DEBUG] [Thread-195012] [transport.py] [_log()] userauth is OK
2026-02-15T00:41:36.014 [DEBUG] [Thread-195012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:41:36.014 [DEBUG] [Thread-195012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:41:36.014 [DEBUG] [Thread-195012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:41:36.014 [DEBUG] [Thread-195012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:41:36.033 [INFO] [Thread-195012] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:41:36.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-15T00:41:36.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:41:36.817 [DEBUG] [Thread-195012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:41:36.817 [DEBUG] [Thread-195012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:41:36.865 [DEBUG] [Thread-195012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:41:36.866 [DEBUG] [Thread-195012] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:41:36.874 [DEBUG] [Thread-195012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:41:36.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:41:36.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-15T00:41:36.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:41:36.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:41:36.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:41:36.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:41:36.911 [DEBUG] [Thread-195012] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:41:49.038 [DEBUG] [Thread-195014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:42:04.087 [DEBUG] [Thread-195015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:42:06.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:42:06.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:42:06.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:42:08.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 41, 53), 4.0, 75.91, 0.0, 41.55, 7.98, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:42:08.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:41:53
2026-02-15T00:42:09.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:42:09.347 [DEBUG] [Thread-195016] [transport.py] [_log()] starting thread (client mode): 0xa2d69300
2026-02-15T00:42:09.347 [DEBUG] [Thread-195016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:42:09.367 [DEBUG] [Thread-195016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:42:09.367 [INFO] [Thread-195016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:42:09.370 [DEBUG] [Thread-195016] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:42:09.370 [DEBUG] [Thread-195016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:42:09.370 [DEBUG] [Thread-195016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:42:09.370 [DEBUG] [Thread-195016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:42:09.370 [DEBUG] [Thread-195016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:42:09.370 [DEBUG] [Thread-195016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:42:09.370 [DEBUG] [Thread-195016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:42:09.370 [DEBUG] [Thread-195016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:42:09.370 [DEBUG] [Thread-195016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:42:09.371 [DEBUG] [Thread-195016] [transport.py] [_log()] client lang: <none>
2026-02-15T00:42:09.371 [DEBUG] [Thread-195016] [transport.py] [_log()] server lang: <none>
2026-02-15T00:42:09.371 [DEBUG] [Thread-195016] [transport.py] [_log()] kex follows: False
2026-02-15T00:42:09.371 [DEBUG] [Thread-195016] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:42:09.371 [DEBUG] [Thread-195016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:42:09.371 [DEBUG] [Thread-195016] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:42:09.371 [DEBUG] [Thread-195016] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:42:09.371 [DEBUG] [Thread-195016] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:42:09.371 [DEBUG] [Thread-195016] [transport.py] [_log()] Compression: none
2026-02-15T00:42:09.371 [DEBUG] [Thread-195016] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:42:09.387 [DEBUG] [Thread-195016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:42:09.388 [DEBUG] [Thread-195016] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:42:09.389 [DEBUG] [Thread-195016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:42:09.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:42:09.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:42:09.391 [DEBUG] [Thread-195016] [transport.py] [_log()] userauth is OK
2026-02-15T00:42:09.392 [DEBUG] [Thread-195016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:42:09.392 [DEBUG] [Thread-195016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:42:09.392 [DEBUG] [Thread-195016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:42:09.392 [DEBUG] [Thread-195016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:42:09.414 [INFO] [Thread-195016] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:42:09.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:42:09.887 [DEBUG] [Thread-195018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:42:10.209 [DEBUG] [Thread-195016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:42:10.210 [DEBUG] [Thread-195016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:42:10.210 [DEBUG] [Thread-195016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:42:10.250 [DEBUG] [Thread-195016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:42:10.251 [DEBUG] [Thread-195016] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:42:10.254 [DEBUG] [Thread-195016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:42:10.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:42:10.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:42:10.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:42:10.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:42:10.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:42:10.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:42:10.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:42:10.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:42:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:42:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.945248 -999.00   +7.90  30.22     80   +4.60 1 1 2 2 1     0    0 1.39 -77.77 ZNESW 30.2 30.2 159.4 42.9 8.4 -24.1 8.2 -23.0 8.0 -22.2 8.3 -23.3
2026-02-15T00:42:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:42:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:42:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.945248
2026-02-15T00:42:10.277 [DEBUG] [Thread-195016] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:42:10.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:42:10.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:42:10.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:42:10.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:42:10.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:42:10.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:41:53', tmtdew=4.0, humidity=75.91, cloud=0.0, wind=41.55, temperature=7.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:41:54', seeing=1.94, atlas_timestamp='2026-02-14T22:41:09.427', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, 0.010749999999999815, -0.06174999999999997, -0.020500000000000185, -0.005499999999999616, 0.052250000000000796, 0.036999999999999034, 0.04525000000000112, 0.033500000000000085, 0.04499999999999993, -0.05825000000000102, 0.023999999999999133, 0.06799999999999962, 0.03524999999999956, 0.0365000000000002, 0.049999999999998934, 0.07124999999999915, 0.046499999999999986, 0.010999999999999233, 0.008749999999999147, 0.05999999999999872, 0.06474999999999831, -0.012749999999998707, 0.07375000000000043, 0.07299999999999862, 0.016500000000000625, 0.04475000000000051, 0.025000000000000355, 0.05850000000000044, 0.03450000000000131, 0.0710000000000015, 0.10400000000000098, 0.07724999999999937], zp_timestamp='2026-02-14T22:41:00')
2026-02-15T00:42:10.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-15T00:42:10.375 [DEBUG] [Thread-195020] [transport.py] [_log()] starting thread (client mode): 0xa5742470
2026-02-15T00:42:10.376 [DEBUG] [Thread-195020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:42:10.394 [DEBUG] [Thread-195020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:42:10.395 [INFO] [Thread-195020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:42:10.405 [DEBUG] [Thread-195020] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:42:10.406 [DEBUG] [Thread-195020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:42:10.406 [DEBUG] [Thread-195020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:42:10.406 [DEBUG] [Thread-195020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:42:10.406 [DEBUG] [Thread-195020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:42:10.406 [DEBUG] [Thread-195020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:42:10.406 [DEBUG] [Thread-195020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:42:10.406 [DEBUG] [Thread-195020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:42:10.406 [DEBUG] [Thread-195020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:42:10.406 [DEBUG] [Thread-195020] [transport.py] [_log()] client lang: <none>
2026-02-15T00:42:10.406 [DEBUG] [Thread-195020] [transport.py] [_log()] server lang: <none>
2026-02-15T00:42:10.406 [DEBUG] [Thread-195020] [transport.py] [_log()] kex follows: False
2026-02-15T00:42:10.406 [DEBUG] [Thread-195020] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:42:10.406 [DEBUG] [Thread-195020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:42:10.406 [DEBUG] [Thread-195020] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:42:10.407 [DEBUG] [Thread-195020] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:42:10.407 [DEBUG] [Thread-195020] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:42:10.407 [DEBUG] [Thread-195020] [transport.py] [_log()] Compression: none
2026-02-15T00:42:10.407 [DEBUG] [Thread-195020] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:42:10.465 [DEBUG] [Thread-195020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:42:10.466 [DEBUG] [Thread-195020] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:42:10.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:42:10.467 [DEBUG] [Thread-195020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:42:10.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:42:10.525 [DEBUG] [Thread-195020] [transport.py] [_log()] userauth is OK
2026-02-15T00:42:10.526 [DEBUG] [Thread-195020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:42:10.526 [DEBUG] [Thread-195020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:42:10.526 [DEBUG] [Thread-195020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:42:10.526 [DEBUG] [Thread-195020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:42:10.544 [INFO] [Thread-195020] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:42:10.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-15T00:42:10.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:42:11.554 [DEBUG] [Thread-195020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:42:11.555 [DEBUG] [Thread-195020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:42:11.602 [DEBUG] [Thread-195020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:42:11.603 [DEBUG] [Thread-195020] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:42:11.612 [DEBUG] [Thread-195020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:42:11.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:42:11.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-15T00:42:11.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:42:11.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:42:11.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:42:11.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:42:11.648 [DEBUG] [Thread-195020] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:42:19.123 [DEBUG] [Thread-195022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:42:22.680 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:42:22.681 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:42:34.188 [DEBUG] [Thread-195023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:42:41.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:42:41.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:42:41.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-15T00:42:43.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 42, 29), 3.99, 75.97, 0.0, 41.27, 7.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:42:43.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:42:29
2026-02-15T00:42:43.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:42:44.032 [DEBUG] [Thread-195024] [transport.py] [_log()] starting thread (client mode): 0xa2d11630
2026-02-15T00:42:44.032 [DEBUG] [Thread-195024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:42:44.053 [DEBUG] [Thread-195024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:42:44.053 [INFO] [Thread-195024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:42:44.054 [DEBUG] [Thread-195024] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:42:44.054 [DEBUG] [Thread-195024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:42:44.054 [DEBUG] [Thread-195024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:42:44.054 [DEBUG] [Thread-195024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:42:44.054 [DEBUG] [Thread-195024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:42:44.054 [DEBUG] [Thread-195024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:42:44.054 [DEBUG] [Thread-195024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:42:44.054 [DEBUG] [Thread-195024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:42:44.054 [DEBUG] [Thread-195024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:42:44.054 [DEBUG] [Thread-195024] [transport.py] [_log()] client lang: <none>
2026-02-15T00:42:44.055 [DEBUG] [Thread-195024] [transport.py] [_log()] server lang: <none>
2026-02-15T00:42:44.055 [DEBUG] [Thread-195024] [transport.py] [_log()] kex follows: False
2026-02-15T00:42:44.055 [DEBUG] [Thread-195024] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:42:44.055 [DEBUG] [Thread-195024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:42:44.055 [DEBUG] [Thread-195024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:42:44.055 [DEBUG] [Thread-195024] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:42:44.055 [DEBUG] [Thread-195024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:42:44.055 [DEBUG] [Thread-195024] [transport.py] [_log()] Compression: none
2026-02-15T00:42:44.055 [DEBUG] [Thread-195024] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:42:44.063 [DEBUG] [Thread-195024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:42:44.063 [DEBUG] [Thread-195024] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:42:44.064 [DEBUG] [Thread-195024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:42:44.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:42:44.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:42:44.066 [DEBUG] [Thread-195024] [transport.py] [_log()] userauth is OK
2026-02-15T00:42:44.066 [DEBUG] [Thread-195024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:42:44.066 [DEBUG] [Thread-195024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:42:44.066 [DEBUG] [Thread-195024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:42:44.066 [DEBUG] [Thread-195024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:42:44.084 [INFO] [Thread-195024] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:42:44.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:42:44.715 [DEBUG] [Thread-195024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:42:44.715 [DEBUG] [Thread-195024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:42:44.716 [DEBUG] [Thread-195024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:42:44.756 [DEBUG] [Thread-195024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:42:44.757 [DEBUG] [Thread-195024] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:42:44.760 [DEBUG] [Thread-195024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:42:44.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:42:44.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:42:44.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:42:44.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:42:44.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:42:44.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:42:44.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:42:44.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:42:44.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:42:44.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.945943 -999.00   +7.80  29.31     80   +4.60 1 1 1 2 1     0    0 1.58 -70.10 ZNESW 29.3 29.3 153.4 51.6 8.4 -23.9 8.2 -23.0 8.0 -22.1 8.3 -23.2
2026-02-15T00:42:44.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:42:44.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:42:44.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.945943
2026-02-15T00:42:44.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:42:44.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:42:44.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:42:44.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:42:44.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:42:44.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:42:29', tmtdew=3.99, humidity=75.97, cloud=0.0, wind=41.27, temperature=7.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:42:29', seeing=1.6, atlas_timestamp='2026-02-14T22:42:09.475', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, 0.010749999999999815, -0.06174999999999997, -0.020500000000000185, -0.005499999999999616, 0.052250000000000796, 0.036999999999999034, 0.04525000000000112, 0.033500000000000085, 0.04499999999999993, -0.05825000000000102, 0.023999999999999133, 0.06799999999999962, 0.03524999999999956, 0.0365000000000002, 0.049999999999998934, 0.07124999999999915, 0.046499999999999986, 0.010999999999999233, 0.008749999999999147, 0.05999999999999872, 0.06474999999999831, -0.012749999999998707, 0.07375000000000043, 0.07299999999999862, 0.016500000000000625, 0.04475000000000051, 0.025000000000000355, 0.05850000000000044, 0.03450000000000131, 0.0710000000000015, 0.10400000000000098, 0.07724999999999937], zp_timestamp='2026-02-14T22:41:00')
2026-02-15T00:42:44.785 [DEBUG] [Thread-195024] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:42:44.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-15T00:42:44.881 [DEBUG] [Thread-195027] [transport.py] [_log()] starting thread (client mode): 0xa2d7b4c0
2026-02-15T00:42:44.881 [DEBUG] [Thread-195027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:42:44.895 [DEBUG] [Thread-195027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:42:44.895 [INFO] [Thread-195027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:42:44.903 [DEBUG] [Thread-195027] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:42:44.904 [DEBUG] [Thread-195027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:42:44.904 [DEBUG] [Thread-195027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:42:44.904 [DEBUG] [Thread-195027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:42:44.904 [DEBUG] [Thread-195027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:42:44.904 [DEBUG] [Thread-195027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:42:44.904 [DEBUG] [Thread-195027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:42:44.904 [DEBUG] [Thread-195027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:42:44.904 [DEBUG] [Thread-195027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:42:44.904 [DEBUG] [Thread-195027] [transport.py] [_log()] client lang: <none>
2026-02-15T00:42:44.904 [DEBUG] [Thread-195027] [transport.py] [_log()] server lang: <none>
2026-02-15T00:42:44.904 [DEBUG] [Thread-195027] [transport.py] [_log()] kex follows: False
2026-02-15T00:42:44.904 [DEBUG] [Thread-195027] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:42:44.904 [DEBUG] [Thread-195027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:42:44.904 [DEBUG] [Thread-195027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:42:44.904 [DEBUG] [Thread-195027] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:42:44.905 [DEBUG] [Thread-195027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:42:44.905 [DEBUG] [Thread-195027] [transport.py] [_log()] Compression: none
2026-02-15T00:42:44.905 [DEBUG] [Thread-195027] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:42:44.961 [DEBUG] [Thread-195027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:42:44.962 [DEBUG] [Thread-195027] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:42:44.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:42:44.963 [DEBUG] [Thread-195027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:42:44.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:42:45.017 [DEBUG] [Thread-195027] [transport.py] [_log()] userauth is OK
2026-02-15T00:42:45.017 [DEBUG] [Thread-195027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:42:45.018 [DEBUG] [Thread-195027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:42:45.018 [DEBUG] [Thread-195027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:42:45.018 [DEBUG] [Thread-195027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:42:45.042 [INFO] [Thread-195027] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:42: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-15T00:42:45.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:42:45.888 [DEBUG] [Thread-195027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:42:45.889 [DEBUG] [Thread-195027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:42:45.936 [DEBUG] [Thread-195027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:42:45.937 [DEBUG] [Thread-195027] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:42:45.945 [DEBUG] [Thread-195027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:42:45.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:42:45.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:42:45.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-15T00:42:45.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:42:45.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:42:45.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:42:45.983 [DEBUG] [Thread-195027] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:42:49.225 [DEBUG] [Thread-195029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:43:04.285 [DEBUG] [Thread-195030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:43:09.948 [DEBUG] [Thread-195031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:43:16.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:43:16.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:43:16.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-15T00:43:17.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 43, 4), 3.99, 75.97, 0.0, 39.49, 7.98, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:43:17.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:43:04
2026-02-15T00:43:18.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:43:18.369 [DEBUG] [Thread-195032] [transport.py] [_log()] starting thread (client mode): 0xa2d965f0
2026-02-15T00:43:18.369 [DEBUG] [Thread-195032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:43:18.389 [DEBUG] [Thread-195032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:43:18.389 [INFO] [Thread-195032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:43:18.391 [DEBUG] [Thread-195032] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:43:18.391 [DEBUG] [Thread-195032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:43:18.391 [DEBUG] [Thread-195032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:43:18.391 [DEBUG] [Thread-195032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:43:18.391 [DEBUG] [Thread-195032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:43:18.391 [DEBUG] [Thread-195032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:43:18.391 [DEBUG] [Thread-195032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:43:18.391 [DEBUG] [Thread-195032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:43:18.391 [DEBUG] [Thread-195032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:43:18.391 [DEBUG] [Thread-195032] [transport.py] [_log()] client lang: <none>
2026-02-15T00:43:18.391 [DEBUG] [Thread-195032] [transport.py] [_log()] server lang: <none>
2026-02-15T00:43:18.391 [DEBUG] [Thread-195032] [transport.py] [_log()] kex follows: False
2026-02-15T00:43:18.391 [DEBUG] [Thread-195032] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:43:18.391 [DEBUG] [Thread-195032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:43:18.391 [DEBUG] [Thread-195032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:43:18.391 [DEBUG] [Thread-195032] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:43:18.391 [DEBUG] [Thread-195032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:43:18.391 [DEBUG] [Thread-195032] [transport.py] [_log()] Compression: none
2026-02-15T00:43:18.391 [DEBUG] [Thread-195032] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:43:18.408 [DEBUG] [Thread-195032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:43:18.409 [DEBUG] [Thread-195032] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:43:18.409 [DEBUG] [Thread-195032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:43:18.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:43:18.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:43:18.411 [DEBUG] [Thread-195032] [transport.py] [_log()] userauth is OK
2026-02-15T00:43:18.412 [DEBUG] [Thread-195032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:43:18.412 [DEBUG] [Thread-195032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:43:18.412 [DEBUG] [Thread-195032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:43:18.412 [DEBUG] [Thread-195032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:43:18.436 [INFO] [Thread-195032] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:43:18.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:43:19.144 [DEBUG] [Thread-195032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:43:19.145 [DEBUG] [Thread-195032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:43:19.145 [DEBUG] [Thread-195032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:43:19.185 [DEBUG] [Thread-195032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:43:19.186 [DEBUG] [Thread-195032] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:43:19.188 [DEBUG] [Thread-195032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:43:19.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:43:19.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:43:19.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:43:19.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:43:19.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:43:19.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:43:19.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:43:19.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:43:19.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:43:19.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.946290 -999.00   +7.80  32.65     80   +4.60 1 1 2 2 1     0    0 1.60 -65.32 ZNESW 32.6 32.6 163.0 40.1 8.4 -23.9 8.2 -23.0 8.0 -22.0 8.3 -23.3
2026-02-15T00:43:19.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:43:19.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:43:19.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.946290
2026-02-15T00:43:19.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:43:19.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:43:19.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:43:19.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:43:19.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:43:19.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:43:04', tmtdew=3.99, humidity=75.97, cloud=0.0, wind=39.49, temperature=7.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:43:04', seeing=1.79, atlas_timestamp='2026-02-14T22:42:39.456', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, 0.010749999999999815, -0.06174999999999997, -0.020500000000000185, -0.005499999999999616, 0.052250000000000796, 0.036999999999999034, 0.04525000000000112, 0.033500000000000085, 0.04499999999999993, -0.05825000000000102, 0.023999999999999133, 0.06799999999999962, 0.03524999999999956, 0.0365000000000002, 0.049999999999998934, 0.07124999999999915, 0.046499999999999986, 0.010999999999999233, 0.008749999999999147, 0.05999999999999872, 0.06474999999999831, -0.012749999999998707, 0.07375000000000043, 0.07299999999999862, 0.016500000000000625, 0.04475000000000051, 0.025000000000000355, 0.05850000000000044, 0.03450000000000131, 0.0710000000000015, 0.10400000000000098, 0.07724999999999937], zp_timestamp='2026-02-14T22:41:00')
2026-02-15T00:43:19.213 [DEBUG] [Thread-195032] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:43:19.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-15T00:43:19.309 [DEBUG] [Thread-195035] [transport.py] [_log()] starting thread (client mode): 0xa2d796c0
2026-02-15T00:43:19.309 [DEBUG] [Thread-195035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:43:19.323 [DEBUG] [Thread-195036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:43:19.323 [DEBUG] [Thread-195035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:43:19.323 [INFO] [Thread-195035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:43:19.331 [DEBUG] [Thread-195035] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:43:19.331 [DEBUG] [Thread-195035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:43:19.331 [DEBUG] [Thread-195035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:43:19.331 [DEBUG] [Thread-195035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:43:19.331 [DEBUG] [Thread-195035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:43:19.331 [DEBUG] [Thread-195035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:43:19.331 [DEBUG] [Thread-195035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:43:19.332 [DEBUG] [Thread-195035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:43:19.332 [DEBUG] [Thread-195035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:43:19.332 [DEBUG] [Thread-195035] [transport.py] [_log()] client lang: <none>
2026-02-15T00:43:19.332 [DEBUG] [Thread-195035] [transport.py] [_log()] server lang: <none>
2026-02-15T00:43:19.332 [DEBUG] [Thread-195035] [transport.py] [_log()] kex follows: False
2026-02-15T00:43:19.332 [DEBUG] [Thread-195035] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:43:19.332 [DEBUG] [Thread-195035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:43:19.332 [DEBUG] [Thread-195035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:43:19.333 [DEBUG] [Thread-195035] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:43:19.333 [DEBUG] [Thread-195035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:43:19.333 [DEBUG] [Thread-195035] [transport.py] [_log()] Compression: none
2026-02-15T00:43:19.333 [DEBUG] [Thread-195035] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:43:19.390 [DEBUG] [Thread-195035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:43:19.390 [DEBUG] [Thread-195035] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:43:19.391 [DEBUG] [Thread-195035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:43:19.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:43:19.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:43:19.446 [DEBUG] [Thread-195035] [transport.py] [_log()] userauth is OK
2026-02-15T00:43:19.446 [DEBUG] [Thread-195035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:43:19.446 [DEBUG] [Thread-195035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:43:19.446 [DEBUG] [Thread-195035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:43:19.446 [DEBUG] [Thread-195035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:43:19.465 [INFO] [Thread-195035] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:43:19.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-15T00:43:19.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:43:20.282 [DEBUG] [Thread-195035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:43:20.283 [DEBUG] [Thread-195035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:43:20.333 [DEBUG] [Thread-195035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:43:20.333 [DEBUG] [Thread-195035] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:43:20.345 [DEBUG] [Thread-195035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:43:20.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:43:20.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:43:20.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-15T00:43:20.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:43:20.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:43:20.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:43:20.381 [DEBUG] [Thread-195035] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:43:22.880 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:43:22.881 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:43:34.373 [DEBUG] [Thread-195038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:43:49.409 [DEBUG] [Thread-195039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:43:50.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:43:50.402 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:43:50.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-15T00:43:52.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 43, 39), 4.16, 74.98, 0.0, 41.46, 8.26, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:43:52.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:43:39
2026-02-15T00:43:53.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:43:53.275 [DEBUG] [Thread-195040] [transport.py] [_log()] starting thread (client mode): 0xa5741000
2026-02-15T00:43:53.275 [DEBUG] [Thread-195040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:43:53.295 [DEBUG] [Thread-195040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:43:53.295 [INFO] [Thread-195040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:43:53.298 [DEBUG] [Thread-195040] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:43:53.299 [DEBUG] [Thread-195040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:43:53.299 [DEBUG] [Thread-195040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:43:53.299 [DEBUG] [Thread-195040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:43:53.299 [DEBUG] [Thread-195040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:43:53.299 [DEBUG] [Thread-195040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:43:53.299 [DEBUG] [Thread-195040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:43:53.299 [DEBUG] [Thread-195040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:43:53.299 [DEBUG] [Thread-195040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:43:53.299 [DEBUG] [Thread-195040] [transport.py] [_log()] client lang: <none>
2026-02-15T00:43:53.299 [DEBUG] [Thread-195040] [transport.py] [_log()] server lang: <none>
2026-02-15T00:43:53.299 [DEBUG] [Thread-195040] [transport.py] [_log()] kex follows: False
2026-02-15T00:43:53.299 [DEBUG] [Thread-195040] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:43:53.299 [DEBUG] [Thread-195040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:43:53.299 [DEBUG] [Thread-195040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:43:53.299 [DEBUG] [Thread-195040] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:43:53.299 [DEBUG] [Thread-195040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:43:53.299 [DEBUG] [Thread-195040] [transport.py] [_log()] Compression: none
2026-02-15T00:43:53.299 [DEBUG] [Thread-195040] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:43:53.317 [DEBUG] [Thread-195040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:43:53.317 [DEBUG] [Thread-195040] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:43:53.318 [DEBUG] [Thread-195040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:43:53.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:43:53.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:43:53.361 [DEBUG] [Thread-195040] [transport.py] [_log()] userauth is OK
2026-02-15T00:43:53.361 [DEBUG] [Thread-195040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:43:53.362 [DEBUG] [Thread-195040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:43:53.362 [DEBUG] [Thread-195040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:43:53.362 [DEBUG] [Thread-195040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:43:53.382 [INFO] [Thread-195040] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:43:53.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:43:53.988 [DEBUG] [Thread-195040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:43:53.988 [DEBUG] [Thread-195040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:43:53.989 [DEBUG] [Thread-195040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:43:54.029 [DEBUG] [Thread-195040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:43:54.030 [DEBUG] [Thread-195040] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:43:54.033 [DEBUG] [Thread-195040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:43:54.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:43:54.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:43:54.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:43:54.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:43:54.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:43:54.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:43:54.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:43:54.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:43:54.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:43:54.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.946637 -999.00   +7.80  35.65     80   +4.60 1 1 2 2 1     0    0 1.79 -62.78 ZNESW 35.6 35.6 160.6 44.9 8.4 -23.9 8.2 -22.9 8.0 -22.0 8.3 -23.2
2026-02-15T00:43:54.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:43:54.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:43:54.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.946637
2026-02-15T00:43:54.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:43:54.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:43:54.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:43:54.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:43:54.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:43:54.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:43:39', tmtdew=4.16, humidity=74.98, cloud=0.0, wind=41.46, temperature=8.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:43:40', seeing=1.51, atlas_timestamp='2026-02-14T22:43:09.437', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, 0.010749999999999815, -0.06174999999999997, -0.020500000000000185, -0.005499999999999616, 0.052250000000000796, 0.036999999999999034, 0.04525000000000112, 0.033500000000000085, 0.04499999999999993, -0.05825000000000102, 0.023999999999999133, 0.06799999999999962, 0.03524999999999956, 0.0365000000000002, 0.049999999999998934, 0.07124999999999915, 0.046499999999999986, 0.010999999999999233, 0.008749999999999147, 0.05999999999999872, 0.06474999999999831, -0.012749999999998707, 0.07375000000000043, 0.07299999999999862, 0.016500000000000625, 0.04475000000000051, 0.025000000000000355, 0.05850000000000044, 0.03450000000000131, 0.0710000000000015, 0.10400000000000098, 0.07724999999999937], zp_timestamp='2026-02-14T22:41:00')
2026-02-15T00:43:54.056 [DEBUG] [Thread-195040] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:43:54.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-15T00:43:54.163 [DEBUG] [Thread-195043] [transport.py] [_log()] starting thread (client mode): 0xa2d6e620
2026-02-15T00:43:54.163 [DEBUG] [Thread-195043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:43:54.178 [DEBUG] [Thread-195043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:43:54.178 [INFO] [Thread-195043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:43:54.185 [DEBUG] [Thread-195043] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:43:54.186 [DEBUG] [Thread-195043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:43:54.186 [DEBUG] [Thread-195043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:43:54.186 [DEBUG] [Thread-195043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:43:54.186 [DEBUG] [Thread-195043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:43:54.186 [DEBUG] [Thread-195043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:43:54.186 [DEBUG] [Thread-195043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:43:54.186 [DEBUG] [Thread-195043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:43:54.186 [DEBUG] [Thread-195043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:43:54.187 [DEBUG] [Thread-195043] [transport.py] [_log()] client lang: <none>
2026-02-15T00:43:54.187 [DEBUG] [Thread-195043] [transport.py] [_log()] server lang: <none>
2026-02-15T00:43:54.187 [DEBUG] [Thread-195043] [transport.py] [_log()] kex follows: False
2026-02-15T00:43:54.187 [DEBUG] [Thread-195043] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:43:54.187 [DEBUG] [Thread-195043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:43:54.187 [DEBUG] [Thread-195043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:43:54.187 [DEBUG] [Thread-195043] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:43:54.187 [DEBUG] [Thread-195043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:43:54.188 [DEBUG] [Thread-195043] [transport.py] [_log()] Compression: none
2026-02-15T00:43:54.188 [DEBUG] [Thread-195043] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:43:54.245 [DEBUG] [Thread-195043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:43:54.246 [DEBUG] [Thread-195043] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:43:54.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:43:54.247 [DEBUG] [Thread-195043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:43:54.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:43:54.301 [DEBUG] [Thread-195043] [transport.py] [_log()] userauth is OK
2026-02-15T00:43:54.302 [DEBUG] [Thread-195043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:43:54.302 [DEBUG] [Thread-195043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:43:54.302 [DEBUG] [Thread-195043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:43:54.302 [DEBUG] [Thread-195043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:43:54.321 [INFO] [Thread-195043] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:43:54.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T00:43:54.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:43:55.143 [DEBUG] [Thread-195043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:43:55.143 [DEBUG] [Thread-195043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:43:55.191 [DEBUG] [Thread-195043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:43:55.191 [DEBUG] [Thread-195043] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:43:55.200 [DEBUG] [Thread-195043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:43:55.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:43:55.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-15T00:43:55.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-15T00:43:55.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:43:55.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:43:55.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:43:55.235 [DEBUG] [Thread-195043] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:44:04.449 [DEBUG] [Thread-195045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:44:10.016 [DEBUG] [Thread-195046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:44:19.499 [DEBUG] [Thread-195047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:44:23.080 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:44:23.081 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:44:25.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:44:25.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:44:25.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-15T00:44:27.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 44, 15), 3.99, 75.96, 0.0, 37.9, 7.91, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:44:27.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:44:15
2026-02-15T00:44:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:44:27.645 [DEBUG] [Thread-195048] [transport.py] [_log()] starting thread (client mode): 0xa2d13100
2026-02-15T00:44:27.645 [DEBUG] [Thread-195048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:44:27.666 [DEBUG] [Thread-195048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:44:27.666 [INFO] [Thread-195048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:44:27.668 [DEBUG] [Thread-195048] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:44:27.669 [DEBUG] [Thread-195048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:44:27.669 [DEBUG] [Thread-195048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:44:27.669 [DEBUG] [Thread-195048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:44:27.669 [DEBUG] [Thread-195048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:44:27.669 [DEBUG] [Thread-195048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:44:27.669 [DEBUG] [Thread-195048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:44:27.669 [DEBUG] [Thread-195048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:44:27.669 [DEBUG] [Thread-195048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:44:27.669 [DEBUG] [Thread-195048] [transport.py] [_log()] client lang: <none>
2026-02-15T00:44:27.669 [DEBUG] [Thread-195048] [transport.py] [_log()] server lang: <none>
2026-02-15T00:44:27.669 [DEBUG] [Thread-195048] [transport.py] [_log()] kex follows: False
2026-02-15T00:44:27.669 [DEBUG] [Thread-195048] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:44:27.669 [DEBUG] [Thread-195048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:44:27.669 [DEBUG] [Thread-195048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:44:27.669 [DEBUG] [Thread-195048] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:44:27.669 [DEBUG] [Thread-195048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:44:27.669 [DEBUG] [Thread-195048] [transport.py] [_log()] Compression: none
2026-02-15T00:44:27.669 [DEBUG] [Thread-195048] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:44:27.685 [DEBUG] [Thread-195048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:44:27.686 [DEBUG] [Thread-195048] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:44:27.686 [DEBUG] [Thread-195048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:44:27.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:44:27.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:44:27.688 [DEBUG] [Thread-195048] [transport.py] [_log()] userauth is OK
2026-02-15T00:44:27.688 [DEBUG] [Thread-195048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:44:27.688 [DEBUG] [Thread-195048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:44:27.689 [DEBUG] [Thread-195048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:44:27.689 [DEBUG] [Thread-195048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:44:27.704 [INFO] [Thread-195048] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:44:27.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:44:28.341 [DEBUG] [Thread-195048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:44:28.342 [DEBUG] [Thread-195048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:44:28.342 [DEBUG] [Thread-195048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:44:28.382 [DEBUG] [Thread-195048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:44:28.382 [DEBUG] [Thread-195048] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:44:28.385 [DEBUG] [Thread-195048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:44:28.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:44:28.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:44:28.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:44:28.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:44:28.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:44:28.409 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:44:28.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:44:28.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:44:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:44:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.946984 -999.00   +7.80  31.33     80   +4.60 1 1 2 2 1     0    0 1.63 -65.14 ZNESW 31.3 31.3 158.2 50.9 8.4 -23.9 8.2 -22.9 8.0 -21.9 8.3 -23.3
2026-02-15T00:44:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:44:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:44:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.946984
2026-02-15T00:44:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:44:28.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:44:28.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:44:28.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:44:28.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:44:28.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:44:15', tmtdew=3.99, humidity=75.96, cloud=0.0, wind=37.9, temperature=7.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:44:15', seeing=1.71, atlas_timestamp='2026-02-14T22:43:39.418', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, 0.010749999999999815, -0.06174999999999997, -0.020500000000000185, -0.005499999999999616, 0.052250000000000796, 0.036999999999999034, 0.04525000000000112, 0.033500000000000085, 0.04499999999999993, -0.05825000000000102, 0.023999999999999133, 0.06799999999999962, 0.03524999999999956, 0.0365000000000002, 0.049999999999998934, 0.07124999999999915, 0.046499999999999986, 0.010999999999999233, 0.008749999999999147, 0.05999999999999872, 0.06474999999999831, -0.012749999999998707, 0.07375000000000043, 0.07299999999999862, 0.016500000000000625, 0.04475000000000051, 0.025000000000000355, 0.05850000000000044, 0.03450000000000131, 0.0710000000000015, 0.10400000000000098, 0.07724999999999937], zp_timestamp='2026-02-14T22:41:00')
2026-02-15T00:44:28.411 [DEBUG] [Thread-195048] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:44:28.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-15T00:44:28.506 [DEBUG] [Thread-195051] [transport.py] [_log()] starting thread (client mode): 0xa5742470
2026-02-15T00:44:28.506 [DEBUG] [Thread-195051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:44:28.520 [DEBUG] [Thread-195051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:44:28.521 [INFO] [Thread-195051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:44:28.528 [DEBUG] [Thread-195051] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:44:28.528 [DEBUG] [Thread-195051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:44:28.528 [DEBUG] [Thread-195051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:44:28.528 [DEBUG] [Thread-195051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:44:28.529 [DEBUG] [Thread-195051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:44:28.529 [DEBUG] [Thread-195051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:44:28.529 [DEBUG] [Thread-195051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:44:28.529 [DEBUG] [Thread-195051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:44:28.529 [DEBUG] [Thread-195051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:44:28.529 [DEBUG] [Thread-195051] [transport.py] [_log()] client lang: <none>
2026-02-15T00:44:28.529 [DEBUG] [Thread-195051] [transport.py] [_log()] server lang: <none>
2026-02-15T00:44:28.529 [DEBUG] [Thread-195051] [transport.py] [_log()] kex follows: False
2026-02-15T00:44:28.529 [DEBUG] [Thread-195051] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:44:28.529 [DEBUG] [Thread-195051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:44:28.529 [DEBUG] [Thread-195051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:44:28.529 [DEBUG] [Thread-195051] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:44:28.529 [DEBUG] [Thread-195051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:44:28.529 [DEBUG] [Thread-195051] [transport.py] [_log()] Compression: none
2026-02-15T00:44:28.529 [DEBUG] [Thread-195051] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:44:28.584 [DEBUG] [Thread-195051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:44:28.584 [DEBUG] [Thread-195051] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:44:28.585 [DEBUG] [Thread-195051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:44:28.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:44:28.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:44:28.641 [DEBUG] [Thread-195051] [transport.py] [_log()] userauth is OK
2026-02-15T00:44:28.641 [DEBUG] [Thread-195051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:44:28.641 [DEBUG] [Thread-195051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:44:28.641 [DEBUG] [Thread-195051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:44:28.641 [DEBUG] [Thread-195051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:44:28.659 [INFO] [Thread-195051] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:44:28.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-15T00:44:28.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:44:29.510 [DEBUG] [Thread-195051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:44:29.510 [DEBUG] [Thread-195051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:44:29.558 [DEBUG] [Thread-195051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:44:29.558 [DEBUG] [Thread-195051] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:44:29.566 [DEBUG] [Thread-195051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:44:29.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:44: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-15T00:44: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-15T00:44:29.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:44:29.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:44:29.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:44:29.601 [DEBUG] [Thread-195051] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:44:34.534 [DEBUG] [Thread-195053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:44:49.588 [DEBUG] [Thread-195054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:44:59.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:44:59.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:44:59.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:45:01.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 44, 50), 3.97, 76.04, 0.0, 35.36, 7.93, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:45:01.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:44:50
2026-02-15T00:45:01.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:45:02.083 [DEBUG] [Thread-195055] [transport.py] [_log()] starting thread (client mode): 0xa2d94460
2026-02-15T00:45:02.083 [DEBUG] [Thread-195055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:45:02.093 [DEBUG] [Thread-195055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:45:02.094 [INFO] [Thread-195055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:45:02.095 [DEBUG] [Thread-195055] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:45:02.095 [DEBUG] [Thread-195055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:45:02.095 [DEBUG] [Thread-195055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:45:02.095 [DEBUG] [Thread-195055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:45:02.095 [DEBUG] [Thread-195055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:45:02.095 [DEBUG] [Thread-195055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:45:02.095 [DEBUG] [Thread-195055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:45:02.095 [DEBUG] [Thread-195055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:45:02.095 [DEBUG] [Thread-195055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:45:02.095 [DEBUG] [Thread-195055] [transport.py] [_log()] client lang: <none>
2026-02-15T00:45:02.095 [DEBUG] [Thread-195055] [transport.py] [_log()] server lang: <none>
2026-02-15T00:45:02.095 [DEBUG] [Thread-195055] [transport.py] [_log()] kex follows: False
2026-02-15T00:45:02.095 [DEBUG] [Thread-195055] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:45:02.095 [DEBUG] [Thread-195055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:45:02.095 [DEBUG] [Thread-195055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:45:02.096 [DEBUG] [Thread-195055] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:45:02.096 [DEBUG] [Thread-195055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:45:02.096 [DEBUG] [Thread-195055] [transport.py] [_log()] Compression: none
2026-02-15T00:45:02.096 [DEBUG] [Thread-195055] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:45:02.106 [DEBUG] [Thread-195055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:45:02.106 [DEBUG] [Thread-195055] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:45:02.106 [DEBUG] [Thread-195055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:45:02.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:45:02.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:45:02.107 [DEBUG] [Thread-195055] [transport.py] [_log()] userauth is OK
2026-02-15T00:45:02.107 [DEBUG] [Thread-195055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:45:02.107 [DEBUG] [Thread-195055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:45:02.107 [DEBUG] [Thread-195055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:45:02.107 [DEBUG] [Thread-195055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:45:02.126 [INFO] [Thread-195055] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:45:02.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:45:02.748 [DEBUG] [Thread-195055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:45:02.748 [DEBUG] [Thread-195055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:45:02.749 [DEBUG] [Thread-195055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:45:02.789 [DEBUG] [Thread-195055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:45:02.790 [DEBUG] [Thread-195055] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:45:02.793 [DEBUG] [Thread-195055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:45:02.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:45:02.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:45:02.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:45:02.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:45:02.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:45:02.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:45:02.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:45:02.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:45:02.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:45:02.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.947331 -999.00   +7.80  33.28     80   +4.60 1 1 2 2 1     0    0 1.67 -63.73 ZNESW 33.3 33.3 157.4 39.8 8.4 -23.9 8.2 -23.1 8.0 -22.1 8.3 -23.3
2026-02-15T00:45:02.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:45:02.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:45:02.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.947331
2026-02-15T00:45:02.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:45:02.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:45:02.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:45:02.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:45:02.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:45:02.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:44:50', tmtdew=3.97, humidity=76.04, cloud=0.0, wind=35.36, temperature=7.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:44:50', seeing=1.69, atlas_timestamp='2026-02-14T22:44:09.398', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, 0.010749999999999815, -0.06174999999999997, -0.020500000000000185, -0.005499999999999616, 0.052250000000000796, 0.036999999999999034, 0.04525000000000112, 0.033500000000000085, 0.04499999999999993, -0.05825000000000102, 0.023999999999999133, 0.06799999999999962, 0.03524999999999956, 0.0365000000000002, 0.049999999999998934, 0.07124999999999915, 0.046499999999999986, 0.010999999999999233, 0.008749999999999147, 0.05999999999999872, 0.06474999999999831, -0.012749999999998707, 0.07375000000000043, 0.07299999999999862, 0.016500000000000625, 0.04475000000000051, 0.025000000000000355, 0.05850000000000044, 0.03450000000000131, 0.0710000000000015, 0.10400000000000098, 0.07724999999999937], zp_timestamp='2026-02-14T22:41:00')
2026-02-15T00:45:02.822 [DEBUG] [Thread-195055] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:45:02.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-15T00:45:02.914 [DEBUG] [Thread-195058] [transport.py] [_log()] starting thread (client mode): 0xa2d94550
2026-02-15T00:45:02.914 [DEBUG] [Thread-195058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:45:02.928 [DEBUG] [Thread-195058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:45:02.928 [INFO] [Thread-195058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:45:02.936 [DEBUG] [Thread-195058] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:45:02.936 [DEBUG] [Thread-195058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:45:02.936 [DEBUG] [Thread-195058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:45:02.936 [DEBUG] [Thread-195058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:45:02.936 [DEBUG] [Thread-195058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:45:02.936 [DEBUG] [Thread-195058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:45:02.936 [DEBUG] [Thread-195058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:45:02.936 [DEBUG] [Thread-195058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:45:02.936 [DEBUG] [Thread-195058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:45:02.936 [DEBUG] [Thread-195058] [transport.py] [_log()] client lang: <none>
2026-02-15T00:45:02.936 [DEBUG] [Thread-195058] [transport.py] [_log()] server lang: <none>
2026-02-15T00:45:02.936 [DEBUG] [Thread-195058] [transport.py] [_log()] kex follows: False
2026-02-15T00:45:02.936 [DEBUG] [Thread-195058] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:45:02.936 [DEBUG] [Thread-195058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:45:02.936 [DEBUG] [Thread-195058] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:45:02.936 [DEBUG] [Thread-195058] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:45:02.936 [DEBUG] [Thread-195058] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:45:02.936 [DEBUG] [Thread-195058] [transport.py] [_log()] Compression: none
2026-02-15T00:45:02.936 [DEBUG] [Thread-195058] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:45:02.993 [DEBUG] [Thread-195058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:45:02.994 [DEBUG] [Thread-195058] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:45:02.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:45:02.995 [DEBUG] [Thread-195058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:45:02.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:45:03.049 [DEBUG] [Thread-195058] [transport.py] [_log()] userauth is OK
2026-02-15T00:45:03.049 [DEBUG] [Thread-195058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:45:03.049 [DEBUG] [Thread-195058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:45:03.049 [DEBUG] [Thread-195058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:45:03.049 [DEBUG] [Thread-195058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:45:03.071 [INFO] [Thread-195058] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:45:03.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-15T00:45:03.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:45:03.889 [DEBUG] [Thread-195058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:45:03.889 [DEBUG] [Thread-195058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:45:03.936 [DEBUG] [Thread-195058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:45:03.937 [DEBUG] [Thread-195058] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:45:03.946 [DEBUG] [Thread-195058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:45:03.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:45:03.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:45:03.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-15T00:45:03.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:45:03.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:45:03.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:45:03.982 [DEBUG] [Thread-195058] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:45:04.629 [DEBUG] [Thread-195060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:45:10.075 [DEBUG] [Thread-195061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:45:19.679 [DEBUG] [Thread-195062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:45:23.283 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:45:23.283 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:45:33.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:45:33.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:45:33.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-15T00:45:34.715 [DEBUG] [Thread-195063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:45:35.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 45, 25), 3.97, 76.07, 0.0, 32.61, 7.93, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:45:35.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:45:25
2026-02-15T00:45:36.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:45:36.382 [DEBUG] [Thread-195064] [transport.py] [_log()] starting thread (client mode): 0xa2d00f10
2026-02-15T00:45:36.382 [DEBUG] [Thread-195064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:45:36.402 [DEBUG] [Thread-195064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:45:36.403 [INFO] [Thread-195064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:45:36.404 [DEBUG] [Thread-195064] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:45:36.404 [DEBUG] [Thread-195064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:45:36.404 [DEBUG] [Thread-195064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:45:36.404 [DEBUG] [Thread-195064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:45:36.404 [DEBUG] [Thread-195064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:45:36.404 [DEBUG] [Thread-195064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:45:36.404 [DEBUG] [Thread-195064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:45:36.404 [DEBUG] [Thread-195064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:45:36.405 [DEBUG] [Thread-195064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:45:36.405 [DEBUG] [Thread-195064] [transport.py] [_log()] client lang: <none>
2026-02-15T00:45:36.405 [DEBUG] [Thread-195064] [transport.py] [_log()] server lang: <none>
2026-02-15T00:45:36.405 [DEBUG] [Thread-195064] [transport.py] [_log()] kex follows: False
2026-02-15T00:45:36.405 [DEBUG] [Thread-195064] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:45:36.405 [DEBUG] [Thread-195064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:45:36.405 [DEBUG] [Thread-195064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:45:36.405 [DEBUG] [Thread-195064] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:45:36.405 [DEBUG] [Thread-195064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:45:36.405 [DEBUG] [Thread-195064] [transport.py] [_log()] Compression: none
2026-02-15T00:45:36.405 [DEBUG] [Thread-195064] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:45:36.415 [DEBUG] [Thread-195064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:45:36.415 [DEBUG] [Thread-195064] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:45:36.415 [DEBUG] [Thread-195064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:45:36.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:45:36.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:45:36.417 [DEBUG] [Thread-195064] [transport.py] [_log()] userauth is OK
2026-02-15T00:45:36.418 [DEBUG] [Thread-195064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:45:36.418 [DEBUG] [Thread-195064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:45:36.418 [DEBUG] [Thread-195064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:45:36.418 [DEBUG] [Thread-195064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:45:36.454 [INFO] [Thread-195064] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:45:36.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:45:37.060 [DEBUG] [Thread-195064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:45:37.061 [DEBUG] [Thread-195064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:45:37.061 [DEBUG] [Thread-195064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:45:37.101 [DEBUG] [Thread-195064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:45:37.102 [DEBUG] [Thread-195064] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:45:37.105 [DEBUG] [Thread-195064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:45:37.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:45:37.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:45:37.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:45:37.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:45:37.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:45:37.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:45:37.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:45:37.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:45:37.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:45:37.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.947679 -999.00   +7.80  30.10     80   +4.60 1 1 2 2 1     0    0 1.71 -62.17 ZNESW 30.1 30.1 152.4 44.6 8.3 -24.0 8.2 -23.0 8.0 -22.0 8.4 -23.3
2026-02-15T00:45:37.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:45:37.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:45:37.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.947679
2026-02-15T00:45:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:45:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:45:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:45:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:45:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:45:37.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:45:25', tmtdew=3.97, humidity=76.07, cloud=0.0, wind=32.61, temperature=7.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:45:25', seeing=1.69, atlas_timestamp='2026-02-14T22:44:39.466', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, 0.010749999999999815, -0.06174999999999997, -0.020500000000000185, -0.005499999999999616, 0.052250000000000796, 0.036999999999999034, 0.04525000000000112, 0.033500000000000085, 0.04499999999999993, -0.05825000000000102, 0.023999999999999133, 0.06799999999999962, 0.03524999999999956, 0.0365000000000002, 0.049999999999998934, 0.07124999999999915, 0.046499999999999986, 0.010999999999999233, 0.008749999999999147, 0.05999999999999872, 0.06474999999999831, -0.012749999999998707, 0.07375000000000043, 0.07299999999999862, 0.016500000000000625, 0.04475000000000051, 0.025000000000000355, 0.05850000000000044, 0.03450000000000131, 0.0710000000000015, 0.10400000000000098, 0.07724999999999937], zp_timestamp='2026-02-14T22:43:00')
2026-02-15T00:45:37.132 [DEBUG] [Thread-195064] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:45:37.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-15T00:45:37.228 [DEBUG] [Thread-195067] [transport.py] [_log()] starting thread (client mode): 0xa2d1ae00
2026-02-15T00:45:37.228 [DEBUG] [Thread-195067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:45:37.243 [DEBUG] [Thread-195067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:45:37.243 [INFO] [Thread-195067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:45:37.251 [DEBUG] [Thread-195067] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:45:37.251 [DEBUG] [Thread-195067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:45:37.251 [DEBUG] [Thread-195067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:45:37.251 [DEBUG] [Thread-195067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:45:37.251 [DEBUG] [Thread-195067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:45:37.251 [DEBUG] [Thread-195067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:45:37.251 [DEBUG] [Thread-195067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:45:37.251 [DEBUG] [Thread-195067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:45:37.251 [DEBUG] [Thread-195067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:45:37.251 [DEBUG] [Thread-195067] [transport.py] [_log()] client lang: <none>
2026-02-15T00:45:37.251 [DEBUG] [Thread-195067] [transport.py] [_log()] server lang: <none>
2026-02-15T00:45:37.251 [DEBUG] [Thread-195067] [transport.py] [_log()] kex follows: False
2026-02-15T00:45:37.251 [DEBUG] [Thread-195067] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:45:37.251 [DEBUG] [Thread-195067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:45:37.251 [DEBUG] [Thread-195067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:45:37.252 [DEBUG] [Thread-195067] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:45:37.252 [DEBUG] [Thread-195067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:45:37.252 [DEBUG] [Thread-195067] [transport.py] [_log()] Compression: none
2026-02-15T00:45:37.252 [DEBUG] [Thread-195067] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:45:37.311 [DEBUG] [Thread-195067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:45:37.311 [DEBUG] [Thread-195067] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:45:37.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:45:37.313 [DEBUG] [Thread-195067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:45:37.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:45:37.369 [DEBUG] [Thread-195067] [transport.py] [_log()] userauth is OK
2026-02-15T00:45:37.369 [DEBUG] [Thread-195067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:45:37.369 [DEBUG] [Thread-195067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:45:37.370 [DEBUG] [Thread-195067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:45:37.370 [DEBUG] [Thread-195067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:45:37.389 [INFO] [Thread-195067] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:45:37.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T00:45:37.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:45:38.206 [DEBUG] [Thread-195067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:45:38.206 [DEBUG] [Thread-195067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:45:38.253 [DEBUG] [Thread-195067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:45:38.253 [DEBUG] [Thread-195067] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:45:38.262 [DEBUG] [Thread-195067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:45:38.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:45:38.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-15T00:45:38.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-15T00:45:38.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:45:38.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:45:38.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:45:38.293 [DEBUG] [Thread-195067] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:45:49.754 [DEBUG] [Thread-195069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:46:04.807 [DEBUG] [Thread-195070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:46:08.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:46:08.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:46:08.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-15T00:46:10.131 [DEBUG] [Thread-195071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:46:10.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 46, 1), 3.98, 76.01, 0.0, 35.75, 7.88, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:46:10.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:46:01
2026-02-15T00:46:10.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:46:10.763 [DEBUG] [Thread-195072] [transport.py] [_log()] starting thread (client mode): 0xa2d6b220
2026-02-15T00:46:10.763 [DEBUG] [Thread-195072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:46:10.783 [DEBUG] [Thread-195072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:46:10.783 [INFO] [Thread-195072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:46:10.786 [DEBUG] [Thread-195072] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:46:10.786 [DEBUG] [Thread-195072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:46:10.786 [DEBUG] [Thread-195072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:46:10.786 [DEBUG] [Thread-195072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:46:10.786 [DEBUG] [Thread-195072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:46:10.786 [DEBUG] [Thread-195072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:46:10.786 [DEBUG] [Thread-195072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:46:10.786 [DEBUG] [Thread-195072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:46:10.786 [DEBUG] [Thread-195072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:46:10.786 [DEBUG] [Thread-195072] [transport.py] [_log()] client lang: <none>
2026-02-15T00:46:10.786 [DEBUG] [Thread-195072] [transport.py] [_log()] server lang: <none>
2026-02-15T00:46:10.786 [DEBUG] [Thread-195072] [transport.py] [_log()] kex follows: False
2026-02-15T00:46:10.786 [DEBUG] [Thread-195072] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:46:10.786 [DEBUG] [Thread-195072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:46:10.786 [DEBUG] [Thread-195072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:46:10.786 [DEBUG] [Thread-195072] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:46:10.786 [DEBUG] [Thread-195072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:46:10.786 [DEBUG] [Thread-195072] [transport.py] [_log()] Compression: none
2026-02-15T00:46:10.786 [DEBUG] [Thread-195072] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:46:10.802 [DEBUG] [Thread-195072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:46:10.803 [DEBUG] [Thread-195072] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:46:10.803 [DEBUG] [Thread-195072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:46:10.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:46:10.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:46:10.805 [DEBUG] [Thread-195072] [transport.py] [_log()] userauth is OK
2026-02-15T00:46:10.805 [DEBUG] [Thread-195072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:46:10.805 [DEBUG] [Thread-195072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:46:10.805 [DEBUG] [Thread-195072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:46:10.805 [DEBUG] [Thread-195072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:46:10.820 [INFO] [Thread-195072] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:46:10.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:46:11.435 [DEBUG] [Thread-195072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:46:11.435 [DEBUG] [Thread-195072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:46:11.436 [DEBUG] [Thread-195072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:46:11.476 [DEBUG] [Thread-195072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:46:11.476 [DEBUG] [Thread-195072] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:46:11.479 [DEBUG] [Thread-195072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:46:11.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:46:11.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:46:11.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:46:11.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:46:11.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:46:11.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:46:11.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:46:11.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:46:11.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:46:11.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.948373 -999.00   +7.80  21.20     80   +4.60 1 1 1 2 1     0    0 1.78 -59.56 ZNESW 21.2 21.2 157.7 37.8 8.3 -24.0 8.1 -23.1 7.9 -22.2 8.3 -23.4
2026-02-15T00:46:11.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:46:11.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:46:11.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.948373
2026-02-15T00:46:11.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:46:11.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:46:11.503 [DEBUG] [Thread-195072] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:46:11.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:46:11.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:46:11.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:46:11.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:46:01', tmtdew=3.98, humidity=76.01, cloud=0.0, wind=35.75, temperature=7.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:46:02', seeing=1.45, atlas_timestamp='2026-02-14T22:45:39.427', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, 0.010749999999999815, -0.06174999999999997, -0.020500000000000185, -0.005499999999999616, 0.052250000000000796, 0.036999999999999034, 0.04525000000000112, 0.033500000000000085, 0.04499999999999993, -0.05825000000000102, 0.023999999999999133, 0.06799999999999962, 0.03524999999999956, 0.0365000000000002, 0.049999999999998934, 0.07124999999999915, 0.046499999999999986, 0.010999999999999233, 0.008749999999999147, 0.05999999999999872, 0.06474999999999831, -0.012749999999998707, 0.07375000000000043, 0.07299999999999862, 0.016500000000000625, 0.04475000000000051, 0.025000000000000355, 0.05850000000000044, 0.03450000000000131, 0.0710000000000015, 0.10400000000000098, 0.07724999999999937], zp_timestamp='2026-02-14T22:43:00')
2026-02-15T00:46:11.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-15T00:46:11.597 [DEBUG] [Thread-195075] [transport.py] [_log()] starting thread (client mode): 0xa2d6e620
2026-02-15T00:46:11.597 [DEBUG] [Thread-195075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:46:11.612 [DEBUG] [Thread-195075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:46:11.613 [INFO] [Thread-195075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:46:11.620 [DEBUG] [Thread-195075] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:46:11.620 [DEBUG] [Thread-195075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:46:11.620 [DEBUG] [Thread-195075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:46:11.620 [DEBUG] [Thread-195075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:46:11.621 [DEBUG] [Thread-195075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:46:11.621 [DEBUG] [Thread-195075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:46:11.621 [DEBUG] [Thread-195075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:46:11.621 [DEBUG] [Thread-195075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:46:11.621 [DEBUG] [Thread-195075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:46:11.621 [DEBUG] [Thread-195075] [transport.py] [_log()] client lang: <none>
2026-02-15T00:46:11.621 [DEBUG] [Thread-195075] [transport.py] [_log()] server lang: <none>
2026-02-15T00:46:11.621 [DEBUG] [Thread-195075] [transport.py] [_log()] kex follows: False
2026-02-15T00:46:11.621 [DEBUG] [Thread-195075] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:46:11.621 [DEBUG] [Thread-195075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:46:11.622 [DEBUG] [Thread-195075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:46:11.622 [DEBUG] [Thread-195075] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:46:11.622 [DEBUG] [Thread-195075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:46:11.622 [DEBUG] [Thread-195075] [transport.py] [_log()] Compression: none
2026-02-15T00:46:11.622 [DEBUG] [Thread-195075] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:46:11.677 [DEBUG] [Thread-195075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:46:11.678 [DEBUG] [Thread-195075] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:46:11.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:46:11.679 [DEBUG] [Thread-195075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:46:11.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:46:11.737 [DEBUG] [Thread-195075] [transport.py] [_log()] userauth is OK
2026-02-15T00:46:11.738 [DEBUG] [Thread-195075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:46:11.738 [DEBUG] [Thread-195075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:46:11.738 [DEBUG] [Thread-195075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:46:11.738 [DEBUG] [Thread-195075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:46:11.758 [INFO] [Thread-195075] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:46:11.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T00:46:11.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:46:12.572 [DEBUG] [Thread-195075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:46:12.572 [DEBUG] [Thread-195075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:46:12.620 [DEBUG] [Thread-195075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:46:12.621 [DEBUG] [Thread-195075] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:46:12.630 [DEBUG] [Thread-195075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:46:12.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:46:12.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-15T00:46:12.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-15T00:46:12.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:46:12.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:46:12.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:46:12.667 [DEBUG] [Thread-195075] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:46:19.847 [DEBUG] [Thread-195077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:46:23.483 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:46:23.484 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:46:34.896 [DEBUG] [Thread-195078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:46:42.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:46:42.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:46:42.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-15T00:46:44.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 46, 37), 4.11, 75.24, 0.0, 47.88, 8.19, 0, 0, 0, 2, 1, 0),)
2026-02-15T00:46:44.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:46:37
2026-02-15T00:46:45.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:46:45.324 [DEBUG] [Thread-195079] [transport.py] [_log()] starting thread (client mode): 0xa2d1add0
2026-02-15T00:46:45.324 [DEBUG] [Thread-195079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:46:45.345 [DEBUG] [Thread-195079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:46:45.345 [INFO] [Thread-195079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:46:45.348 [DEBUG] [Thread-195079] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:46:45.348 [DEBUG] [Thread-195079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:46:45.348 [DEBUG] [Thread-195079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:46:45.348 [DEBUG] [Thread-195079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:46:45.348 [DEBUG] [Thread-195079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:46:45.348 [DEBUG] [Thread-195079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:46:45.348 [DEBUG] [Thread-195079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:46:45.348 [DEBUG] [Thread-195079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:46:45.349 [DEBUG] [Thread-195079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:46:45.349 [DEBUG] [Thread-195079] [transport.py] [_log()] client lang: <none>
2026-02-15T00:46:45.349 [DEBUG] [Thread-195079] [transport.py] [_log()] server lang: <none>
2026-02-15T00:46:45.349 [DEBUG] [Thread-195079] [transport.py] [_log()] kex follows: False
2026-02-15T00:46:45.349 [DEBUG] [Thread-195079] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:46:45.349 [DEBUG] [Thread-195079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:46:45.349 [DEBUG] [Thread-195079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:46:45.349 [DEBUG] [Thread-195079] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:46:45.349 [DEBUG] [Thread-195079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:46:45.349 [DEBUG] [Thread-195079] [transport.py] [_log()] Compression: none
2026-02-15T00:46:45.349 [DEBUG] [Thread-195079] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:46:45.369 [DEBUG] [Thread-195079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:46:45.369 [DEBUG] [Thread-195079] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:46:45.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:46:45.370 [DEBUG] [Thread-195079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:46:45.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:46:45.373 [DEBUG] [Thread-195079] [transport.py] [_log()] userauth is OK
2026-02-15T00:46:45.373 [DEBUG] [Thread-195079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:46:45.373 [DEBUG] [Thread-195079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:46:45.373 [DEBUG] [Thread-195079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:46:45.373 [DEBUG] [Thread-195079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:46:45.398 [INFO] [Thread-195079] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:46:45.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:46:46.048 [DEBUG] [Thread-195079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:46:46.048 [DEBUG] [Thread-195079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:46:46.049 [DEBUG] [Thread-195079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:46:46.090 [DEBUG] [Thread-195079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:46:46.090 [DEBUG] [Thread-195079] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:46:46.093 [DEBUG] [Thread-195079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:46:46.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:46:46.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:46:46.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:46:46.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:46:46.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:46:46.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:46:46.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:46:46.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:46:46.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:46:46.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.948720 -999.00   +7.80  26.11     80   +4.60 1 1 1 2 1     0    0 1.69 -59.36 ZNESW 26.1 26.1 159.0 34.8 8.3 -24.1 8.1 -23.0 7.9 -22.0 8.3 -23.4
2026-02-15T00:46:46.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:46:46.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:46:46.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.948720
2026-02-15T00:46:46.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:46:46.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:46:46.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:46:46.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:46:46.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:46:46.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:46:37', tmtdew=4.11, humidity=75.24, cloud=0.0, wind=47.88, temperature=8.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T00:46:37', seeing=2.01, atlas_timestamp='2026-02-14T22:46:09.408', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, 0.010749999999999815, -0.06174999999999997, -0.020500000000000185, -0.005499999999999616, 0.052250000000000796, 0.036999999999999034, 0.04525000000000112, 0.033500000000000085, 0.04499999999999993, -0.05825000000000102, 0.023999999999999133, 0.06799999999999962, 0.03524999999999956, 0.0365000000000002, 0.049999999999998934, 0.07124999999999915, 0.046499999999999986, 0.010999999999999233, 0.008749999999999147, 0.05999999999999872, 0.06474999999999831, -0.012749999999998707, 0.07375000000000043, 0.07299999999999862, 0.016500000000000625, 0.04475000000000051, 0.025000000000000355, 0.05850000000000044, 0.03450000000000131, 0.0710000000000015, 0.10400000000000098, 0.07724999999999937], zp_timestamp='2026-02-14T22:43:00')
2026-02-15T00:46:46.120 [DEBUG] [Thread-195079] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:46:46.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-15T00:46:46.216 [DEBUG] [Thread-195082] [transport.py] [_log()] starting thread (client mode): 0xa2d13eb0
2026-02-15T00:46:46.216 [DEBUG] [Thread-195082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:46:46.230 [DEBUG] [Thread-195082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:46:46.230 [INFO] [Thread-195082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:46:46.237 [DEBUG] [Thread-195082] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:46:46.238 [DEBUG] [Thread-195082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:46:46.238 [DEBUG] [Thread-195082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:46:46.238 [DEBUG] [Thread-195082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:46:46.238 [DEBUG] [Thread-195082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:46:46.238 [DEBUG] [Thread-195082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:46:46.238 [DEBUG] [Thread-195082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:46:46.238 [DEBUG] [Thread-195082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:46:46.239 [DEBUG] [Thread-195082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:46:46.239 [DEBUG] [Thread-195082] [transport.py] [_log()] client lang: <none>
2026-02-15T00:46:46.239 [DEBUG] [Thread-195082] [transport.py] [_log()] server lang: <none>
2026-02-15T00:46:46.239 [DEBUG] [Thread-195082] [transport.py] [_log()] kex follows: False
2026-02-15T00:46:46.239 [DEBUG] [Thread-195082] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:46:46.239 [DEBUG] [Thread-195082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:46:46.239 [DEBUG] [Thread-195082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:46:46.239 [DEBUG] [Thread-195082] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:46:46.240 [DEBUG] [Thread-195082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:46:46.240 [DEBUG] [Thread-195082] [transport.py] [_log()] Compression: none
2026-02-15T00:46:46.240 [DEBUG] [Thread-195082] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:46:46.299 [DEBUG] [Thread-195082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:46:46.299 [DEBUG] [Thread-195082] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:46:46.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:46:46.301 [DEBUG] [Thread-195082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:46:46.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:46:46.357 [DEBUG] [Thread-195082] [transport.py] [_log()] userauth is OK
2026-02-15T00:46:46.358 [DEBUG] [Thread-195082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:46:46.358 [DEBUG] [Thread-195082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:46:46.358 [DEBUG] [Thread-195082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:46:46.358 [DEBUG] [Thread-195082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:46:46.380 [INFO] [Thread-195082] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:46:46.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T00:46:46.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:46:47.215 [DEBUG] [Thread-195082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:46:47.215 [DEBUG] [Thread-195082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:46:47.262 [DEBUG] [Thread-195082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:46:47.262 [DEBUG] [Thread-195082] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:46:47.272 [DEBUG] [Thread-195082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:46:47.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:46:47.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:46:47.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-15T00:46:47.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:46:47.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:46:47.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:46:47.308 [DEBUG] [Thread-195082] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:46:49.936 [DEBUG] [Thread-195084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:47:04.992 [DEBUG] [Thread-195085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:47:10.188 [DEBUG] [Thread-195086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:47:17.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:47:17.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:47:17.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-15T00:47:19.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 46, 37), 4.11, 75.24, 0.0, 47.88, 8.19, 0, 0, 0, 2, 1, 0),)
2026-02-15T00:47:19.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:46:37
2026-02-15T00:47:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:47:19.732 [DEBUG] [Thread-195087] [transport.py] [_log()] starting thread (client mode): 0xa2d6f160
2026-02-15T00:47:19.732 [DEBUG] [Thread-195087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:47:19.756 [DEBUG] [Thread-195087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:47:19.756 [INFO] [Thread-195087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:47:19.760 [DEBUG] [Thread-195087] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:47:19.760 [DEBUG] [Thread-195087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:47:19.760 [DEBUG] [Thread-195087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:47:19.760 [DEBUG] [Thread-195087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:47:19.760 [DEBUG] [Thread-195087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:47:19.760 [DEBUG] [Thread-195087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:47:19.760 [DEBUG] [Thread-195087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:47:19.760 [DEBUG] [Thread-195087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:47:19.760 [DEBUG] [Thread-195087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:47:19.760 [DEBUG] [Thread-195087] [transport.py] [_log()] client lang: <none>
2026-02-15T00:47:19.760 [DEBUG] [Thread-195087] [transport.py] [_log()] server lang: <none>
2026-02-15T00:47:19.760 [DEBUG] [Thread-195087] [transport.py] [_log()] kex follows: False
2026-02-15T00:47:19.760 [DEBUG] [Thread-195087] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:47:19.760 [DEBUG] [Thread-195087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:47:19.760 [DEBUG] [Thread-195087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:47:19.760 [DEBUG] [Thread-195087] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:47:19.761 [DEBUG] [Thread-195087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:47:19.761 [DEBUG] [Thread-195087] [transport.py] [_log()] Compression: none
2026-02-15T00:47:19.761 [DEBUG] [Thread-195087] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:47:19.780 [DEBUG] [Thread-195087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:47:19.781 [DEBUG] [Thread-195087] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:47:19.782 [DEBUG] [Thread-195087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:47:19.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:47:19.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:47:19.784 [DEBUG] [Thread-195087] [transport.py] [_log()] userauth is OK
2026-02-15T00:47:19.784 [DEBUG] [Thread-195087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:47:19.784 [DEBUG] [Thread-195087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:47:19.784 [DEBUG] [Thread-195087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:47:19.784 [DEBUG] [Thread-195087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:47:19.809 [INFO] [Thread-195087] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:47:19.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:47:20.029 [DEBUG] [Thread-195089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:47:20.451 [DEBUG] [Thread-195087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:47:20.451 [DEBUG] [Thread-195087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:47:20.451 [DEBUG] [Thread-195087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:47:20.492 [DEBUG] [Thread-195087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:47:20.493 [DEBUG] [Thread-195087] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:47:20.496 [DEBUG] [Thread-195087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:47:20.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:47:20.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:47:20.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:47:20.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:47:20.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:47:20.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:47:20.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:47:20.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:47:20.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:47:20.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.949068 -999.00   +7.80  28.89     80   +4.60 1 1 1 2 1     0    0 1.71 -59.92 ZNESW 28.9 28.9 142.6 35.4 8.3 -24.1 8.1 -23.1 8.0 -22.1 8.3 -23.3
2026-02-15T00:47:20.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:47:20.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:47:20.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.949068
2026-02-15T00:47:20.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:47:20.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:47:20.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:47:20.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:47:20.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:47:20.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:46:37', tmtdew=4.11, humidity=75.24, cloud=0.0, wind=47.88, temperature=8.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T00:47:12', seeing=2.18, atlas_timestamp='2026-02-14T22:46:39.475', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, 0.010749999999999815, -0.06174999999999997, -0.020500000000000185, -0.005499999999999616, 0.052250000000000796, 0.036999999999999034, 0.04525000000000112, 0.033500000000000085, 0.04499999999999993, -0.05825000000000102, 0.023999999999999133, 0.06799999999999962, 0.03524999999999956, 0.0365000000000002, 0.049999999999998934, 0.07124999999999915, 0.046499999999999986, 0.010999999999999233, 0.008749999999999147, 0.05999999999999872, 0.06474999999999831, -0.012749999999998707, 0.07375000000000043, 0.07299999999999862, 0.016500000000000625, 0.04475000000000051, 0.025000000000000355, 0.05850000000000044, 0.03450000000000131, 0.0710000000000015, 0.10400000000000098, 0.07724999999999937], zp_timestamp='2026-02-14T22:43:00')
2026-02-15T00:47:20.525 [DEBUG] [Thread-195087] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:47:20.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-15T00:47:20.631 [DEBUG] [Thread-195091] [transport.py] [_log()] starting thread (client mode): 0xa57d5600
2026-02-15T00:47:20.631 [DEBUG] [Thread-195091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:47:20.646 [DEBUG] [Thread-195091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:47:20.646 [INFO] [Thread-195091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:47:20.656 [DEBUG] [Thread-195091] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:47:20.657 [DEBUG] [Thread-195091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:47:20.657 [DEBUG] [Thread-195091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:47:20.657 [DEBUG] [Thread-195091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:47:20.657 [DEBUG] [Thread-195091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:47:20.657 [DEBUG] [Thread-195091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:47:20.657 [DEBUG] [Thread-195091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:47:20.657 [DEBUG] [Thread-195091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:47:20.657 [DEBUG] [Thread-195091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:47:20.657 [DEBUG] [Thread-195091] [transport.py] [_log()] client lang: <none>
2026-02-15T00:47:20.657 [DEBUG] [Thread-195091] [transport.py] [_log()] server lang: <none>
2026-02-15T00:47:20.657 [DEBUG] [Thread-195091] [transport.py] [_log()] kex follows: False
2026-02-15T00:47:20.657 [DEBUG] [Thread-195091] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:47:20.657 [DEBUG] [Thread-195091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:47:20.658 [DEBUG] [Thread-195091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:47:20.658 [DEBUG] [Thread-195091] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:47:20.658 [DEBUG] [Thread-195091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:47:20.658 [DEBUG] [Thread-195091] [transport.py] [_log()] Compression: none
2026-02-15T00:47:20.658 [DEBUG] [Thread-195091] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:47:20.714 [DEBUG] [Thread-195091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:47:20.714 [DEBUG] [Thread-195091] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:47:20.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:47:20.715 [DEBUG] [Thread-195091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:47:20.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:47:20.771 [DEBUG] [Thread-195091] [transport.py] [_log()] userauth is OK
2026-02-15T00:47:20.772 [DEBUG] [Thread-195091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:47:20.772 [DEBUG] [Thread-195091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:47:20.772 [DEBUG] [Thread-195091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:47:20.772 [DEBUG] [Thread-195091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:47:20.795 [INFO] [Thread-195091] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:47:20.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-15T00:47:20.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:47:21.608 [DEBUG] [Thread-195091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:47:21.617 [DEBUG] [Thread-195091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:47:21.657 [DEBUG] [Thread-195091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:47:21.657 [DEBUG] [Thread-195091] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:47:21.666 [DEBUG] [Thread-195091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:47:21.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:47:21.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-15T00:47:21.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-15T00:47:21.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:47:21.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:47:21.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:47:21.712 [DEBUG] [Thread-195091] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:47:23.703 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:47:23.704 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:47:35.066 [DEBUG] [Thread-195093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:47:50.119 [DEBUG] [Thread-195094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:47:51.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:47:51.733 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:47: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-15T00:47:53.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 47, 12), 3.9, 76.14, 0.0, 35.45, 7.85, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:47:53.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:47:12
2026-02-15T00:47:54.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:47:54.406 [DEBUG] [Thread-195095] [transport.py] [_log()] starting thread (client mode): 0xa57d4490
2026-02-15T00:47:54.406 [DEBUG] [Thread-195095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:47:54.426 [DEBUG] [Thread-195095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:47:54.426 [INFO] [Thread-195095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:47:54.429 [DEBUG] [Thread-195095] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:47:54.430 [DEBUG] [Thread-195095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:47:54.430 [DEBUG] [Thread-195095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:47:54.430 [DEBUG] [Thread-195095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:47:54.430 [DEBUG] [Thread-195095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:47:54.430 [DEBUG] [Thread-195095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:47:54.430 [DEBUG] [Thread-195095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:47:54.430 [DEBUG] [Thread-195095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:47:54.430 [DEBUG] [Thread-195095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:47:54.430 [DEBUG] [Thread-195095] [transport.py] [_log()] client lang: <none>
2026-02-15T00:47:54.430 [DEBUG] [Thread-195095] [transport.py] [_log()] server lang: <none>
2026-02-15T00:47:54.430 [DEBUG] [Thread-195095] [transport.py] [_log()] kex follows: False
2026-02-15T00:47:54.430 [DEBUG] [Thread-195095] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:47:54.430 [DEBUG] [Thread-195095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:47:54.430 [DEBUG] [Thread-195095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:47:54.430 [DEBUG] [Thread-195095] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:47:54.430 [DEBUG] [Thread-195095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:47:54.430 [DEBUG] [Thread-195095] [transport.py] [_log()] Compression: none
2026-02-15T00:47:54.430 [DEBUG] [Thread-195095] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:47:54.447 [DEBUG] [Thread-195095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:47:54.447 [DEBUG] [Thread-195095] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:47:54.448 [DEBUG] [Thread-195095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:47:54.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:47:54.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:47:54.450 [DEBUG] [Thread-195095] [transport.py] [_log()] userauth is OK
2026-02-15T00:47:54.450 [DEBUG] [Thread-195095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:47:54.450 [DEBUG] [Thread-195095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:47:54.450 [DEBUG] [Thread-195095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:47:54.451 [DEBUG] [Thread-195095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:47:54.486 [INFO] [Thread-195095] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:47:54.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:47:55.116 [DEBUG] [Thread-195095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:47:55.116 [DEBUG] [Thread-195095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:47:55.116 [DEBUG] [Thread-195095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:47:55.157 [DEBUG] [Thread-195095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:47:55.157 [DEBUG] [Thread-195095] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:47:55.159 [DEBUG] [Thread-195095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:47:55.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:47:55.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:47:55.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:47:55.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:47:55.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:47:55.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:47:55.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:47:55.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:47:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:47:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.949415 -999.00   +7.70  23.45     80   +4.60 1 1 1 2 1     0    0 1.76 -58.96 ZNESW 23.4 23.4 161.2 34.4 8.3 -24.1 8.1 -23.1 7.9 -22.2 8.3 -23.3
2026-02-15T00:47:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:47:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:47:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.949415
2026-02-15T00:47:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:47:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:47:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:47:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:47:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:47:55.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:47:12', tmtdew=3.9, humidity=76.14, cloud=0.0, wind=35.45, temperature=7.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:47:47', seeing=1.92, atlas_timestamp='2026-02-14T22:47:09.456', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, 0.010749999999999815, -0.06174999999999997, -0.020500000000000185, -0.005499999999999616, 0.052250000000000796, 0.036999999999999034, 0.04525000000000112, 0.033500000000000085, 0.04499999999999993, -0.05825000000000102, 0.023999999999999133, 0.06799999999999962, 0.03524999999999956, 0.0365000000000002, 0.049999999999998934, 0.07124999999999915, 0.046499999999999986, 0.010999999999999233, 0.008749999999999147, 0.05999999999999872, 0.06474999999999831, -0.012749999999998707, 0.07375000000000043, 0.07299999999999862, 0.016500000000000625, 0.04475000000000051, 0.025000000000000355, 0.05850000000000044, 0.03450000000000131, 0.0710000000000015, 0.10400000000000098, 0.07724999999999937], zp_timestamp='2026-02-14T22:43:00')
2026-02-15T00:47:55.179 [DEBUG] [Thread-195095] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:47:55.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-15T00:47:55.264 [DEBUG] [Thread-195098] [transport.py] [_log()] starting thread (client mode): 0xa2d01510
2026-02-15T00:47:55.264 [DEBUG] [Thread-195098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:47:55.278 [DEBUG] [Thread-195098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:47:55.278 [INFO] [Thread-195098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:47:55.286 [DEBUG] [Thread-195098] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:47:55.286 [DEBUG] [Thread-195098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:47:55.286 [DEBUG] [Thread-195098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:47:55.286 [DEBUG] [Thread-195098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:47:55.286 [DEBUG] [Thread-195098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:47:55.287 [DEBUG] [Thread-195098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:47:55.287 [DEBUG] [Thread-195098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:47:55.287 [DEBUG] [Thread-195098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:47:55.287 [DEBUG] [Thread-195098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:47:55.287 [DEBUG] [Thread-195098] [transport.py] [_log()] client lang: <none>
2026-02-15T00:47:55.287 [DEBUG] [Thread-195098] [transport.py] [_log()] server lang: <none>
2026-02-15T00:47:55.287 [DEBUG] [Thread-195098] [transport.py] [_log()] kex follows: False
2026-02-15T00:47:55.287 [DEBUG] [Thread-195098] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:47:55.287 [DEBUG] [Thread-195098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:47:55.287 [DEBUG] [Thread-195098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:47:55.287 [DEBUG] [Thread-195098] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:47:55.287 [DEBUG] [Thread-195098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:47:55.287 [DEBUG] [Thread-195098] [transport.py] [_log()] Compression: none
2026-02-15T00:47:55.287 [DEBUG] [Thread-195098] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:47:55.346 [DEBUG] [Thread-195098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:47:55.346 [DEBUG] [Thread-195098] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:47:55.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:47:55.347 [DEBUG] [Thread-195098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:47:55.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:47:55.405 [DEBUG] [Thread-195098] [transport.py] [_log()] userauth is OK
2026-02-15T00:47:55.406 [DEBUG] [Thread-195098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:47:55.406 [DEBUG] [Thread-195098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:47:55.406 [DEBUG] [Thread-195098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:47:55.406 [DEBUG] [Thread-195098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:47:55.425 [INFO] [Thread-195098] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:47:55.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-15T00:47:55.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:47:56.220 [DEBUG] [Thread-195098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:47:56.220 [DEBUG] [Thread-195098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:47:56.268 [DEBUG] [Thread-195098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:47:56.269 [DEBUG] [Thread-195098] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:47:56.279 [DEBUG] [Thread-195098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:47:56.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:47:56.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-15T00:47:56.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-15T00:47:56.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:47:56.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:47:56.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:47:56.316 [DEBUG] [Thread-195098] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:48:05.155 [DEBUG] [Thread-195100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:48:10.243 [DEBUG] [Thread-195101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:48:20.206 [DEBUG] [Thread-195102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:48:23.903 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:48:23.904 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:48:26.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:48:26.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:48:26.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:48:28.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 47, 47), 3.9, 76.14, 0.0, 38.27, 7.81, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:48:28.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:47:47
2026-02-15T00:48:28.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:48:28.921 [DEBUG] [Thread-195103] [transport.py] [_log()] starting thread (client mode): 0xa57d6a70
2026-02-15T00:48:28.922 [DEBUG] [Thread-195103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:48:28.941 [DEBUG] [Thread-195103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:48:28.941 [INFO] [Thread-195103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:48:28.945 [DEBUG] [Thread-195103] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:48:28.945 [DEBUG] [Thread-195103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:48:28.945 [DEBUG] [Thread-195103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:48:28.945 [DEBUG] [Thread-195103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:48:28.945 [DEBUG] [Thread-195103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:48:28.945 [DEBUG] [Thread-195103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:48:28.945 [DEBUG] [Thread-195103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:48:28.945 [DEBUG] [Thread-195103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:48:28.945 [DEBUG] [Thread-195103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:48:28.945 [DEBUG] [Thread-195103] [transport.py] [_log()] client lang: <none>
2026-02-15T00:48:28.945 [DEBUG] [Thread-195103] [transport.py] [_log()] server lang: <none>
2026-02-15T00:48:28.945 [DEBUG] [Thread-195103] [transport.py] [_log()] kex follows: False
2026-02-15T00:48:28.945 [DEBUG] [Thread-195103] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:48:28.945 [DEBUG] [Thread-195103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:48:28.945 [DEBUG] [Thread-195103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:48:28.946 [DEBUG] [Thread-195103] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:48:28.946 [DEBUG] [Thread-195103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:48:28.946 [DEBUG] [Thread-195103] [transport.py] [_log()] Compression: none
2026-02-15T00:48:28.946 [DEBUG] [Thread-195103] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:48:28.963 [DEBUG] [Thread-195103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:48:28.964 [DEBUG] [Thread-195103] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:48:28.964 [DEBUG] [Thread-195103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:48:28.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:48:28.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:48:28.966 [DEBUG] [Thread-195103] [transport.py] [_log()] userauth is OK
2026-02-15T00:48:28.966 [DEBUG] [Thread-195103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:48:28.966 [DEBUG] [Thread-195103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:48:28.966 [DEBUG] [Thread-195103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:48:28.966 [DEBUG] [Thread-195103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:48:29.001 [INFO] [Thread-195103] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:48:29.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:48:29.717 [DEBUG] [Thread-195103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:48:29.717 [DEBUG] [Thread-195103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:48:29.718 [DEBUG] [Thread-195103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:48:29.758 [DEBUG] [Thread-195103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:48:29.758 [DEBUG] [Thread-195103] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:48:29.760 [DEBUG] [Thread-195103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:48:29.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:48:29.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:48:29.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:48:29.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:48:29.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:48:29.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:48:29.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:48:29.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:48:29.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:48:29.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.949762 -999.00   +7.70  27.24     80   +4.60 1 1 1 2 1     0    0 1.81 -57.37 ZNESW 27.2 27.2 163.2 43.4 8.3 -24.2 8.1 -23.2 7.9 -22.1 8.2 -23.2
2026-02-15T00:48:29.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:48:29.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:48:29.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.949762
2026-02-15T00:48:29.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:48:29.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:48:29.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:48:29.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:48:29.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:48:29.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:47:47', tmtdew=3.9, humidity=76.14, cloud=0.0, wind=38.27, temperature=7.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:48:23', seeing=1.75, atlas_timestamp='2026-02-14T22:47:39.437', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.016250000000001208, -0.025750000000000384, -0.011499999999999844, -0.009499999999999176, 0.006250000000001421, 0.028499999999999304, 0.055749999999999744, 0.045499999999998764, 0.06300000000000061, -0.023749999999999716, -0.0009999999999994458, 0.07199999999999918, 0.02624999999999922, 0.054999999999999716, 0.009999999999999787, 0.05824999999999925, 0.054999999999999716, 0.019999999999999574, 0.012249999999998096, 0.04399999999999871, 0.05274999999999963, 0.030250000000000554, 0.07774999999999999, 0.1034999999999986, 0.046499999999999986, 0.03775000000000084, 0.06400000000000006, 0.06799999999999962, 0.013000000000001677, 0.07000000000000028, 0.10000000000000142, 0.08274999999999899], zp_timestamp='2026-02-14T22:46:00')
2026-02-15T00:48:29.784 [DEBUG] [Thread-195103] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:48:29.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-15T00:48:29.880 [DEBUG] [Thread-195106] [transport.py] [_log()] starting thread (client mode): 0xa2d69ed0
2026-02-15T00:48:29.880 [DEBUG] [Thread-195106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:48:29.895 [DEBUG] [Thread-195106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:48:29.895 [INFO] [Thread-195106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:48:29.903 [DEBUG] [Thread-195106] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:48:29.903 [DEBUG] [Thread-195106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:48:29.903 [DEBUG] [Thread-195106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:48:29.903 [DEBUG] [Thread-195106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:48:29.903 [DEBUG] [Thread-195106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:48:29.903 [DEBUG] [Thread-195106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:48:29.903 [DEBUG] [Thread-195106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:48:29.903 [DEBUG] [Thread-195106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:48:29.904 [DEBUG] [Thread-195106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:48:29.904 [DEBUG] [Thread-195106] [transport.py] [_log()] client lang: <none>
2026-02-15T00:48:29.904 [DEBUG] [Thread-195106] [transport.py] [_log()] server lang: <none>
2026-02-15T00:48:29.904 [DEBUG] [Thread-195106] [transport.py] [_log()] kex follows: False
2026-02-15T00:48:29.904 [DEBUG] [Thread-195106] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:48:29.904 [DEBUG] [Thread-195106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:48:29.904 [DEBUG] [Thread-195106] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:48:29.904 [DEBUG] [Thread-195106] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:48:29.905 [DEBUG] [Thread-195106] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:48:29.905 [DEBUG] [Thread-195106] [transport.py] [_log()] Compression: none
2026-02-15T00:48:29.905 [DEBUG] [Thread-195106] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:48:29.964 [DEBUG] [Thread-195106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:48:29.965 [DEBUG] [Thread-195106] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:48:29.965 [DEBUG] [Thread-195106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:48:29.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:48:29.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:48:30.021 [DEBUG] [Thread-195106] [transport.py] [_log()] userauth is OK
2026-02-15T00:48:30.021 [DEBUG] [Thread-195106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:48:30.021 [DEBUG] [Thread-195106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:48:30.021 [DEBUG] [Thread-195106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:48:30.021 [DEBUG] [Thread-195106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:48:30.043 [INFO] [Thread-195106] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:48:30.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-15T00:48:30.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:48:30.849 [DEBUG] [Thread-195106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:48:30.849 [DEBUG] [Thread-195106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:48:30.897 [DEBUG] [Thread-195106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:48:30.897 [DEBUG] [Thread-195106] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:48:30.905 [DEBUG] [Thread-195106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:48:30.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:48:30.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-15T00:48:30.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-15T00:48:30.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:48:30.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:48:30.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:48:30.936 [DEBUG] [Thread-195106] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:48:35.236 [DEBUG] [Thread-195108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:48:50.291 [DEBUG] [Thread-195109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:49:00.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:49:00.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:49:00.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-15T00:49:02.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 48, 23), 3.89, 76.19, 0.0, 36.17, 7.85, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:49:02.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:48:23
2026-02-15T00:49:03.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:49:03.394 [DEBUG] [Thread-195110] [transport.py] [_log()] starting thread (client mode): 0xa57d6dd0
2026-02-15T00:49:03.395 [DEBUG] [Thread-195110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:49:03.414 [DEBUG] [Thread-195110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:49:03.414 [INFO] [Thread-195110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:49:03.416 [DEBUG] [Thread-195110] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:49:03.416 [DEBUG] [Thread-195110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:49:03.416 [DEBUG] [Thread-195110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:49:03.416 [DEBUG] [Thread-195110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:49:03.416 [DEBUG] [Thread-195110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:49:03.416 [DEBUG] [Thread-195110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:49:03.416 [DEBUG] [Thread-195110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:49:03.416 [DEBUG] [Thread-195110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:49:03.416 [DEBUG] [Thread-195110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:49:03.416 [DEBUG] [Thread-195110] [transport.py] [_log()] client lang: <none>
2026-02-15T00:49:03.416 [DEBUG] [Thread-195110] [transport.py] [_log()] server lang: <none>
2026-02-15T00:49:03.416 [DEBUG] [Thread-195110] [transport.py] [_log()] kex follows: False
2026-02-15T00:49:03.416 [DEBUG] [Thread-195110] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:49:03.416 [DEBUG] [Thread-195110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:49:03.416 [DEBUG] [Thread-195110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:49:03.416 [DEBUG] [Thread-195110] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:49:03.416 [DEBUG] [Thread-195110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:49:03.416 [DEBUG] [Thread-195110] [transport.py] [_log()] Compression: none
2026-02-15T00:49:03.416 [DEBUG] [Thread-195110] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:49:03.427 [DEBUG] [Thread-195110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:49:03.428 [DEBUG] [Thread-195110] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:49:03.428 [DEBUG] [Thread-195110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:49:03.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:49:03.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:49:03.430 [DEBUG] [Thread-195110] [transport.py] [_log()] userauth is OK
2026-02-15T00:49:03.430 [DEBUG] [Thread-195110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:49:03.430 [DEBUG] [Thread-195110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:49:03.430 [DEBUG] [Thread-195110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:49:03.430 [DEBUG] [Thread-195110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:49:03.467 [INFO] [Thread-195110] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:49:03.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:49:04.122 [DEBUG] [Thread-195110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:49:04.122 [DEBUG] [Thread-195110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:49:04.123 [DEBUG] [Thread-195110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:49:04.163 [DEBUG] [Thread-195110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:49:04.164 [DEBUG] [Thread-195110] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:49:04.167 [DEBUG] [Thread-195110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:49:04.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:49:04.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:49:04.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:49:04.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:49:04.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:49:04.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:49:04.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:49:04.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:49:04.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:49:04.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.950109 -999.00   +7.70  31.79     80   +4.60 1 1 2 2 1     0    0 1.74 -56.72 ZNESW 31.8 31.8 163.8 40.5 8.3 -24.1 8.1 -23.0 7.9 -22.3 8.3 -23.4
2026-02-15T00:49:04.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:49:04.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:49:04.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.950109
2026-02-15T00:49:04.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:49:04.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:49:04.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:49:04.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:49:04.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:49:04.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:48:23', tmtdew=3.89, humidity=76.19, cloud=0.0, wind=36.17, temperature=7.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:48:58', seeing=1.74, atlas_timestamp='2026-02-14T22:48:09.418', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.016250000000001208, -0.025750000000000384, -0.011499999999999844, -0.009499999999999176, 0.006250000000001421, 0.028499999999999304, 0.055749999999999744, 0.045499999999998764, 0.06300000000000061, -0.023749999999999716, -0.0009999999999994458, 0.07199999999999918, 0.02624999999999922, 0.054999999999999716, 0.009999999999999787, 0.05824999999999925, 0.054999999999999716, 0.019999999999999574, 0.012249999999998096, 0.04399999999999871, 0.05274999999999963, 0.030250000000000554, 0.07774999999999999, 0.1034999999999986, 0.046499999999999986, 0.03775000000000084, 0.06400000000000006, 0.06799999999999962, 0.013000000000001677, 0.07000000000000028, 0.10000000000000142, 0.08274999999999899], zp_timestamp='2026-02-14T22:46:00')
2026-02-15T00:49:04.196 [DEBUG] [Thread-195110] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:49:04.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T00:49:04.291 [DEBUG] [Thread-195113] [transport.py] [_log()] starting thread (client mode): 0xa57d67a0
2026-02-15T00:49:04.291 [DEBUG] [Thread-195113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:49:04.306 [DEBUG] [Thread-195113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:49:04.306 [INFO] [Thread-195113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:49:04.314 [DEBUG] [Thread-195113] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:49:04.314 [DEBUG] [Thread-195113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:49:04.314 [DEBUG] [Thread-195113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:49:04.314 [DEBUG] [Thread-195113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:49:04.314 [DEBUG] [Thread-195113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:49:04.314 [DEBUG] [Thread-195113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:49:04.314 [DEBUG] [Thread-195113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:49:04.314 [DEBUG] [Thread-195113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:49:04.314 [DEBUG] [Thread-195113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:49:04.314 [DEBUG] [Thread-195113] [transport.py] [_log()] client lang: <none>
2026-02-15T00:49:04.314 [DEBUG] [Thread-195113] [transport.py] [_log()] server lang: <none>
2026-02-15T00:49:04.314 [DEBUG] [Thread-195113] [transport.py] [_log()] kex follows: False
2026-02-15T00:49:04.314 [DEBUG] [Thread-195113] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:49:04.314 [DEBUG] [Thread-195113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:49:04.314 [DEBUG] [Thread-195113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:49:04.314 [DEBUG] [Thread-195113] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:49:04.315 [DEBUG] [Thread-195113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:49:04.315 [DEBUG] [Thread-195113] [transport.py] [_log()] Compression: none
2026-02-15T00:49:04.315 [DEBUG] [Thread-195113] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:49:04.373 [DEBUG] [Thread-195113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:49:04.374 [DEBUG] [Thread-195113] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:49:04.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:49:04.375 [DEBUG] [Thread-195113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:49:04.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:49:04.429 [DEBUG] [Thread-195113] [transport.py] [_log()] userauth is OK
2026-02-15T00:49:04.429 [DEBUG] [Thread-195113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:49:04.429 [DEBUG] [Thread-195113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:49:04.430 [DEBUG] [Thread-195113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:49:04.430 [DEBUG] [Thread-195113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:49:04.449 [INFO] [Thread-195113] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:49:04.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-15T00:49:04.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:49:05.224 [DEBUG] [Thread-195113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:49:05.224 [DEBUG] [Thread-195113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:49:05.272 [DEBUG] [Thread-195113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:49:05.272 [DEBUG] [Thread-195113] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:49:05.281 [DEBUG] [Thread-195113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:49:05.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:49:05.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:49:05.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-15T00:49:05.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:49:05.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:49:05.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:49:05.318 [DEBUG] [Thread-195113] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:49:05.327 [DEBUG] [Thread-195115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:49:10.319 [DEBUG] [Thread-195116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:49:20.383 [DEBUG] [Thread-195117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:49:24.106 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:49:24.107 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:49:35.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:49:35.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:49:35.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:49:35.421 [DEBUG] [Thread-195118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:49:37.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 48, 58), 3.84, 76.7, 0.0, 39.44, 7.81, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:49:37.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:48:58
2026-02-15T00:49:38.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:49:38.274 [DEBUG] [Thread-195119] [transport.py] [_log()] starting thread (client mode): 0xa57d4610
2026-02-15T00:49:38.275 [DEBUG] [Thread-195119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:49:38.295 [DEBUG] [Thread-195119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:49:38.295 [INFO] [Thread-195119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:49:38.298 [DEBUG] [Thread-195119] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:49:38.298 [DEBUG] [Thread-195119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:49:38.298 [DEBUG] [Thread-195119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:49:38.298 [DEBUG] [Thread-195119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:49:38.298 [DEBUG] [Thread-195119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:49:38.298 [DEBUG] [Thread-195119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:49:38.298 [DEBUG] [Thread-195119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:49:38.298 [DEBUG] [Thread-195119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:49:38.298 [DEBUG] [Thread-195119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:49:38.298 [DEBUG] [Thread-195119] [transport.py] [_log()] client lang: <none>
2026-02-15T00:49:38.299 [DEBUG] [Thread-195119] [transport.py] [_log()] server lang: <none>
2026-02-15T00:49:38.299 [DEBUG] [Thread-195119] [transport.py] [_log()] kex follows: False
2026-02-15T00:49:38.299 [DEBUG] [Thread-195119] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:49:38.299 [DEBUG] [Thread-195119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:49:38.299 [DEBUG] [Thread-195119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:49:38.299 [DEBUG] [Thread-195119] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:49:38.299 [DEBUG] [Thread-195119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:49:38.299 [DEBUG] [Thread-195119] [transport.py] [_log()] Compression: none
2026-02-15T00:49:38.299 [DEBUG] [Thread-195119] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:49:38.315 [DEBUG] [Thread-195119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:49:38.315 [DEBUG] [Thread-195119] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:49:38.316 [DEBUG] [Thread-195119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:49:38.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:49:38.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:49:38.318 [DEBUG] [Thread-195119] [transport.py] [_log()] userauth is OK
2026-02-15T00:49:38.318 [DEBUG] [Thread-195119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:49:38.318 [DEBUG] [Thread-195119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:49:38.318 [DEBUG] [Thread-195119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:49:38.318 [DEBUG] [Thread-195119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:49:38.336 [INFO] [Thread-195119] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:49:38.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:49:38.976 [DEBUG] [Thread-195119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:49:38.977 [DEBUG] [Thread-195119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:49:38.977 [DEBUG] [Thread-195119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:49:39.017 [DEBUG] [Thread-195119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:49:39.018 [DEBUG] [Thread-195119] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:49:39.021 [DEBUG] [Thread-195119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:49:39.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:49:39.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:49:39.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:49:39.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:49:39.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:49:39.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:49:39.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:49:39.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:49:39.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:49:39.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.950804 -999.00   +7.70  26.11     80   +4.60 1 1 1 2 1     0    0 1.66 -58.58 ZNESW 26.1 26.1 153.4 41.3 8.3 -24.2 8.1 -23.1 7.9 -22.2 8.2 -23.3
2026-02-15T00:49:39.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:49:39.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:49:39.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.950804
2026-02-15T00:49:39.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:49:39.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:49:39.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:49:39.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:49:39.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:49:39.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:48:58', tmtdew=3.84, humidity=76.7, cloud=0.0, wind=39.44, temperature=7.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:49:34', seeing=1.94, atlas_timestamp='2026-02-14T22:49:09.466', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.016250000000001208, -0.025750000000000384, -0.011499999999999844, -0.009499999999999176, 0.006250000000001421, 0.028499999999999304, 0.055749999999999744, 0.045499999999998764, 0.06300000000000061, -0.023749999999999716, -0.0009999999999994458, 0.07199999999999918, 0.02624999999999922, 0.054999999999999716, 0.009999999999999787, 0.05824999999999925, 0.054999999999999716, 0.019999999999999574, 0.012249999999998096, 0.04399999999999871, 0.05274999999999963, 0.030250000000000554, 0.07774999999999999, 0.1034999999999986, 0.046499999999999986, 0.03775000000000084, 0.06400000000000006, 0.06799999999999962, 0.013000000000001677, 0.07000000000000028, 0.10000000000000142, 0.08274999999999899], zp_timestamp='2026-02-14T22:46:00')
2026-02-15T00:49:39.050 [DEBUG] [Thread-195119] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:49:39.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-15T00:49:39.146 [DEBUG] [Thread-195122] [transport.py] [_log()] starting thread (client mode): 0xa2d6fd00
2026-02-15T00:49:39.147 [DEBUG] [Thread-195122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:49:39.161 [DEBUG] [Thread-195122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:49:39.162 [INFO] [Thread-195122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:49:39.169 [DEBUG] [Thread-195122] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:49:39.169 [DEBUG] [Thread-195122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:49:39.169 [DEBUG] [Thread-195122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:49:39.169 [DEBUG] [Thread-195122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:49:39.169 [DEBUG] [Thread-195122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:49:39.169 [DEBUG] [Thread-195122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:49:39.169 [DEBUG] [Thread-195122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:49:39.170 [DEBUG] [Thread-195122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:49:39.170 [DEBUG] [Thread-195122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:49:39.170 [DEBUG] [Thread-195122] [transport.py] [_log()] client lang: <none>
2026-02-15T00:49:39.170 [DEBUG] [Thread-195122] [transport.py] [_log()] server lang: <none>
2026-02-15T00:49:39.170 [DEBUG] [Thread-195122] [transport.py] [_log()] kex follows: False
2026-02-15T00:49:39.170 [DEBUG] [Thread-195122] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:49:39.170 [DEBUG] [Thread-195122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:49:39.170 [DEBUG] [Thread-195122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:49:39.170 [DEBUG] [Thread-195122] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:49:39.170 [DEBUG] [Thread-195122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:49:39.170 [DEBUG] [Thread-195122] [transport.py] [_log()] Compression: none
2026-02-15T00:49:39.170 [DEBUG] [Thread-195122] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:49:39.229 [DEBUG] [Thread-195122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:49:39.229 [DEBUG] [Thread-195122] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:49:39.230 [DEBUG] [Thread-195122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:49:39.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:49:39.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:49:39.285 [DEBUG] [Thread-195122] [transport.py] [_log()] userauth is OK
2026-02-15T00:49:39.285 [DEBUG] [Thread-195122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:49:39.285 [DEBUG] [Thread-195122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:49:39.285 [DEBUG] [Thread-195122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:49:39.286 [DEBUG] [Thread-195122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:49:39.306 [INFO] [Thread-195122] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:49:39.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-15T00:49:39.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:49:40.094 [DEBUG] [Thread-195122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:49:40.094 [DEBUG] [Thread-195122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:49:40.141 [DEBUG] [Thread-195122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:49:40.142 [DEBUG] [Thread-195122] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:49:40.151 [DEBUG] [Thread-195122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:49:40.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:49:40.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:49:40.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:49:40.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:49:40.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:49:40.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:49:40.186 [DEBUG] [Thread-195122] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:49:50.459 [DEBUG] [Thread-195124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:50:00.964 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:50:05.509 [DEBUG] [Thread-195126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:50:10.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:50:10.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:50:10.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-15T00:50:10.375 [DEBUG] [Thread-195127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:50:12.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 49, 33), 4.09, 75.34, 0.0, 44.56, 8.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:50:12.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:49:33
2026-02-15T00:50:12.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:50:12.789 [DEBUG] [Thread-195128] [transport.py] [_log()] starting thread (client mode): 0xa2d1a650
2026-02-15T00:50:12.789 [DEBUG] [Thread-195128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:50:12.808 [DEBUG] [Thread-195128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:50:12.809 [INFO] [Thread-195128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:50:12.810 [DEBUG] [Thread-195128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:50:12.810 [DEBUG] [Thread-195128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:50:12.810 [DEBUG] [Thread-195128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:50:12.811 [DEBUG] [Thread-195128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:50:12.811 [DEBUG] [Thread-195128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:50:12.811 [DEBUG] [Thread-195128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:50:12.811 [DEBUG] [Thread-195128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:50:12.811 [DEBUG] [Thread-195128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:50:12.811 [DEBUG] [Thread-195128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:50:12.811 [DEBUG] [Thread-195128] [transport.py] [_log()] client lang: <none>
2026-02-15T00:50:12.811 [DEBUG] [Thread-195128] [transport.py] [_log()] server lang: <none>
2026-02-15T00:50:12.811 [DEBUG] [Thread-195128] [transport.py] [_log()] kex follows: False
2026-02-15T00:50:12.811 [DEBUG] [Thread-195128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:50:12.811 [DEBUG] [Thread-195128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:50:12.811 [DEBUG] [Thread-195128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:50:12.811 [DEBUG] [Thread-195128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:50:12.811 [DEBUG] [Thread-195128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:50:12.811 [DEBUG] [Thread-195128] [transport.py] [_log()] Compression: none
2026-02-15T00:50:12.811 [DEBUG] [Thread-195128] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:50:12.826 [DEBUG] [Thread-195128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:50:12.827 [DEBUG] [Thread-195128] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:50:12.827 [DEBUG] [Thread-195128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:50:12.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:50:12.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:50:12.827 [DEBUG] [Thread-195128] [transport.py] [_log()] userauth is OK
2026-02-15T00:50:12.828 [DEBUG] [Thread-195128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:50:12.828 [DEBUG] [Thread-195128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:50:12.828 [DEBUG] [Thread-195128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:50:12.828 [DEBUG] [Thread-195128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:50:12.840 [INFO] [Thread-195128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:50:12.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:50:19.864 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:50:20.547 [DEBUG] [Thread-195130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:50:22.267 [DEBUG] [Thread-195128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:50:22.268 [DEBUG] [Thread-195128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:50:22.268 [DEBUG] [Thread-195128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:50:22.308 [DEBUG] [Thread-195128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:50:22.308 [DEBUG] [Thread-195128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:50:22.311 [DEBUG] [Thread-195128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:50:22.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:50:22.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:50:22.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:50:22.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:50:22.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:50:22.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:50:22.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:50:22.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:50:22.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:50:22.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.951151 -999.00   +7.70  35.34     80   +4.60 1 1 2 2 1     0    0 1.52 -62.47 ZNESW 35.3 35.3 164.8 41.9 8.2 -24.2 8.1 -23.1 7.8 -22.2 8.2 -23.4
2026-02-15T00:50:22.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:50:22.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:50:22.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.951151
2026-02-15T00:50:22.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:50:22.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:50:22.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:50:22.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:50:22.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:50:22.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:49:33', tmtdew=4.09, humidity=75.34, cloud=0.0, wind=44.56, temperature=8.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:50:10', seeing=2.54, atlas_timestamp='2026-02-14T22:49:39.446', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.016250000000001208, -0.025750000000000384, -0.011499999999999844, -0.009499999999999176, 0.006250000000001421, 0.028499999999999304, 0.055749999999999744, 0.045499999999998764, 0.06300000000000061, -0.023749999999999716, -0.0009999999999994458, 0.07199999999999918, 0.02624999999999922, 0.054999999999999716, 0.009999999999999787, 0.05824999999999925, 0.054999999999999716, 0.019999999999999574, 0.012249999999998096, 0.04399999999999871, 0.05274999999999963, 0.030250000000000554, 0.07774999999999999, 0.1034999999999986, 0.046499999999999986, 0.03775000000000084, 0.06400000000000006, 0.06799999999999962, 0.013000000000001677, 0.07000000000000028, 0.10000000000000142, 0.08274999999999899], zp_timestamp='2026-02-14T22:46:00')
2026-02-15T00:50:22.349 [DEBUG] [Thread-195128] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:50:22.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-15T00:50:22.450 [DEBUG] [Thread-195132] [transport.py] [_log()] starting thread (client mode): 0xa2d19b70
2026-02-15T00:50:22.450 [DEBUG] [Thread-195132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:50:22.465 [DEBUG] [Thread-195132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:50:22.465 [INFO] [Thread-195132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:50:22.473 [DEBUG] [Thread-195132] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:50:22.473 [DEBUG] [Thread-195132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:50:22.473 [DEBUG] [Thread-195132] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:50:22.473 [DEBUG] [Thread-195132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:50:22.473 [DEBUG] [Thread-195132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:50:22.473 [DEBUG] [Thread-195132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:50:22.473 [DEBUG] [Thread-195132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:50:22.473 [DEBUG] [Thread-195132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:50:22.474 [DEBUG] [Thread-195132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:50:22.474 [DEBUG] [Thread-195132] [transport.py] [_log()] client lang: <none>
2026-02-15T00:50:22.474 [DEBUG] [Thread-195132] [transport.py] [_log()] server lang: <none>
2026-02-15T00:50:22.474 [DEBUG] [Thread-195132] [transport.py] [_log()] kex follows: False
2026-02-15T00:50:22.474 [DEBUG] [Thread-195132] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:50:22.474 [DEBUG] [Thread-195132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:50:22.474 [DEBUG] [Thread-195132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:50:22.474 [DEBUG] [Thread-195132] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:50:22.474 [DEBUG] [Thread-195132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:50:22.474 [DEBUG] [Thread-195132] [transport.py] [_log()] Compression: none
2026-02-15T00:50:22.474 [DEBUG] [Thread-195132] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:50:22.535 [DEBUG] [Thread-195132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:50:22.535 [DEBUG] [Thread-195132] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:50:22.536 [DEBUG] [Thread-195132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:50:22.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:50:22.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:50:22.593 [DEBUG] [Thread-195132] [transport.py] [_log()] userauth is OK
2026-02-15T00:50:22.594 [DEBUG] [Thread-195132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:50:22.594 [DEBUG] [Thread-195132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:50:22.594 [DEBUG] [Thread-195132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:50:22.594 [DEBUG] [Thread-195132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:50:22.613 [INFO] [Thread-195132] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:50:22.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-15T00:50:22.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:50:23.412 [DEBUG] [Thread-195132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:50:23.412 [DEBUG] [Thread-195132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:50:23.460 [DEBUG] [Thread-195132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:50:23.460 [DEBUG] [Thread-195132] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:50:23.471 [DEBUG] [Thread-195132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:50:23.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:50:23.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:50:23.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-15T00:50:23.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:50:23.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:50:23.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:50:23.508 [DEBUG] [Thread-195132] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:50:24.304 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:50:24.305 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:50:35.587 [DEBUG] [Thread-195134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:50:38.507 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:50:50.636 [DEBUG] [Thread-195135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:50:53.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:50:53.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:50:53.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-15T00:50:55.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 50, 45), 3.82, 76.8, 0.0, 41.25, 7.81, 0, 0, 0, 2, 0, 0),)
2026-02-15T00:50:55.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:50:45
2026-02-15T00:50:55.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:50:55.906 [DEBUG] [Thread-195136] [transport.py] [_log()] starting thread (client mode): 0xa2d979d0
2026-02-15T00:50:55.906 [DEBUG] [Thread-195136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:50:55.927 [DEBUG] [Thread-195136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:50:55.927 [INFO] [Thread-195136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:50:55.930 [DEBUG] [Thread-195136] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:50:55.930 [DEBUG] [Thread-195136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:50:55.931 [DEBUG] [Thread-195136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:50:55.931 [DEBUG] [Thread-195136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:50:55.931 [DEBUG] [Thread-195136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:50:55.931 [DEBUG] [Thread-195136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:50:55.931 [DEBUG] [Thread-195136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:50:55.931 [DEBUG] [Thread-195136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:50:55.931 [DEBUG] [Thread-195136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:50:55.931 [DEBUG] [Thread-195136] [transport.py] [_log()] client lang: <none>
2026-02-15T00:50:55.931 [DEBUG] [Thread-195136] [transport.py] [_log()] server lang: <none>
2026-02-15T00:50:55.931 [DEBUG] [Thread-195136] [transport.py] [_log()] kex follows: False
2026-02-15T00:50:55.931 [DEBUG] [Thread-195136] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:50:55.931 [DEBUG] [Thread-195136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:50:55.931 [DEBUG] [Thread-195136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:50:55.931 [DEBUG] [Thread-195136] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:50:55.931 [DEBUG] [Thread-195136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:50:55.931 [DEBUG] [Thread-195136] [transport.py] [_log()] Compression: none
2026-02-15T00:50:55.931 [DEBUG] [Thread-195136] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:50:55.949 [DEBUG] [Thread-195136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:50:55.949 [DEBUG] [Thread-195136] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:50:55.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:50:55.951 [DEBUG] [Thread-195136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:50:55.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:50:55.953 [DEBUG] [Thread-195136] [transport.py] [_log()] userauth is OK
2026-02-15T00:50:55.953 [DEBUG] [Thread-195136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:50:55.953 [DEBUG] [Thread-195136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:50:55.953 [DEBUG] [Thread-195136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:50:55.953 [DEBUG] [Thread-195136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:50:55.974 [INFO] [Thread-195136] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:50:55.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:50:56.602 [DEBUG] [Thread-195136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:50:56.602 [DEBUG] [Thread-195136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:50:56.602 [DEBUG] [Thread-195136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:50:56.643 [DEBUG] [Thread-195136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:50:56.644 [DEBUG] [Thread-195136] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:50:56.647 [DEBUG] [Thread-195136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:50:56.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:50:56.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:50:56.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:50:56.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:50:56.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:50:56.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:50:56.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:50:56.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:50:56.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:50:56.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.951498 -999.00   +7.70  29.52     80   +4.60 1 1 1 2 1     0    0 1.54 -61.28 ZNESW 29.5 29.5 159.0 44.5 8.3 -24.1 8.1 -23.2 7.8 -22.0 8.2 -23.3
2026-02-15T00:50:56.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:50:56.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:50:56.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.951498
2026-02-15T00:50:56.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:50:56.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:50:56.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:50:56.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:50:56.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:50:56.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:50:45', tmtdew=3.82, humidity=76.8, cloud=0.0, wind=41.25, temperature=7.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:50:45', seeing=2.54, atlas_timestamp='2026-02-14T22:50:09.427', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.016250000000001208, -0.025750000000000384, -0.011499999999999844, -0.009499999999999176, 0.006250000000001421, 0.028499999999999304, 0.055749999999999744, 0.045499999999998764, 0.06300000000000061, -0.023749999999999716, -0.0009999999999994458, 0.07199999999999918, 0.02624999999999922, 0.054999999999999716, 0.009999999999999787, 0.05824999999999925, 0.054999999999999716, 0.019999999999999574, 0.012249999999998096, 0.04399999999999871, 0.05274999999999963, 0.030250000000000554, 0.07774999999999999, 0.1034999999999986, 0.046499999999999986, 0.03775000000000084, 0.06400000000000006, 0.06799999999999962, 0.013000000000001677, 0.07000000000000028, 0.10000000000000142, 0.08274999999999899], zp_timestamp='2026-02-14T22:46:00')
2026-02-15T00:50:56.673 [DEBUG] [Thread-195136] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:50:56.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-15T00:50:56.768 [DEBUG] [Thread-195139] [transport.py] [_log()] starting thread (client mode): 0xa2d96bc0
2026-02-15T00:50:56.769 [DEBUG] [Thread-195139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:50:56.783 [DEBUG] [Thread-195139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:50:56.783 [INFO] [Thread-195139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:50:56.791 [DEBUG] [Thread-195139] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:50:56.791 [DEBUG] [Thread-195139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:50:56.791 [DEBUG] [Thread-195139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:50:56.791 [DEBUG] [Thread-195139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:50:56.791 [DEBUG] [Thread-195139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:50:56.791 [DEBUG] [Thread-195139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:50:56.791 [DEBUG] [Thread-195139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:50:56.792 [DEBUG] [Thread-195139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:50:56.792 [DEBUG] [Thread-195139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:50:56.792 [DEBUG] [Thread-195139] [transport.py] [_log()] client lang: <none>
2026-02-15T00:50:56.792 [DEBUG] [Thread-195139] [transport.py] [_log()] server lang: <none>
2026-02-15T00:50:56.792 [DEBUG] [Thread-195139] [transport.py] [_log()] kex follows: False
2026-02-15T00:50:56.792 [DEBUG] [Thread-195139] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:50:56.792 [DEBUG] [Thread-195139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:50:56.792 [DEBUG] [Thread-195139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:50:56.792 [DEBUG] [Thread-195139] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:50:56.792 [DEBUG] [Thread-195139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:50:56.792 [DEBUG] [Thread-195139] [transport.py] [_log()] Compression: none
2026-02-15T00:50:56.792 [DEBUG] [Thread-195139] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:50:56.851 [DEBUG] [Thread-195139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:50:56.852 [DEBUG] [Thread-195139] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:50:56.852 [DEBUG] [Thread-195139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:50:56.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:50:56.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:50:56.907 [DEBUG] [Thread-195139] [transport.py] [_log()] userauth is OK
2026-02-15T00:50:56.907 [DEBUG] [Thread-195139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:50:56.907 [DEBUG] [Thread-195139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:50:56.908 [DEBUG] [Thread-195139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:50:56.908 [DEBUG] [Thread-195139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:50:56.926 [INFO] [Thread-195139] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:50:56.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-15T00:50:56.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:50:57.155 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:50:57.670 [DEBUG] [Thread-195139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:50:57.670 [DEBUG] [Thread-195139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:50:57.718 [DEBUG] [Thread-195139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:50:57.718 [DEBUG] [Thread-195139] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:50:57.728 [DEBUG] [Thread-195139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:50:57.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:50:57.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-15T00:50:57.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-15T00:50:57.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:50:57.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:50:57.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:50:57.764 [DEBUG] [Thread-195139] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:51:05.671 [DEBUG] [Thread-195141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:51:10.436 [DEBUG] [Thread-195142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:51:15.804 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:51:20.719 [DEBUG] [Thread-195143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:51:24.506 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:51:24.507 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:51:27.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:51:27.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:51:27.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-15T00:51:29.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 51, 20), 2.54, 84.57, 0.0, 38.94, 5.07, 0, 1, 0, 2, 0, 0),)
2026-02-15T00:51:29.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:51:20
2026-02-15T00:51:29.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:51:30.139 [DEBUG] [Thread-195144] [transport.py] [_log()] starting thread (client mode): 0xa57d6740
2026-02-15T00:51:30.139 [DEBUG] [Thread-195144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:51:30.158 [DEBUG] [Thread-195144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:51:30.158 [INFO] [Thread-195144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:51:30.161 [DEBUG] [Thread-195144] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:51:30.162 [DEBUG] [Thread-195144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:51:30.162 [DEBUG] [Thread-195144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:51:30.162 [DEBUG] [Thread-195144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:51:30.162 [DEBUG] [Thread-195144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:51:30.162 [DEBUG] [Thread-195144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:51:30.162 [DEBUG] [Thread-195144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:51:30.162 [DEBUG] [Thread-195144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:51:30.162 [DEBUG] [Thread-195144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:51:30.162 [DEBUG] [Thread-195144] [transport.py] [_log()] client lang: <none>
2026-02-15T00:51:30.162 [DEBUG] [Thread-195144] [transport.py] [_log()] server lang: <none>
2026-02-15T00:51:30.162 [DEBUG] [Thread-195144] [transport.py] [_log()] kex follows: False
2026-02-15T00:51:30.162 [DEBUG] [Thread-195144] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:51:30.162 [DEBUG] [Thread-195144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:51:30.162 [DEBUG] [Thread-195144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:51:30.162 [DEBUG] [Thread-195144] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:51:30.162 [DEBUG] [Thread-195144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:51:30.162 [DEBUG] [Thread-195144] [transport.py] [_log()] Compression: none
2026-02-15T00:51:30.162 [DEBUG] [Thread-195144] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:51:30.175 [DEBUG] [Thread-195144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:51:30.175 [DEBUG] [Thread-195144] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:51:30.175 [DEBUG] [Thread-195144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:51:30.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:51:30.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:51:30.176 [DEBUG] [Thread-195144] [transport.py] [_log()] userauth is OK
2026-02-15T00:51:30.176 [DEBUG] [Thread-195144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:51:30.176 [DEBUG] [Thread-195144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:51:30.176 [DEBUG] [Thread-195144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:51:30.176 [DEBUG] [Thread-195144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:51:30.189 [INFO] [Thread-195144] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:51:30.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:51:30.867 [DEBUG] [Thread-195144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:51:30.867 [DEBUG] [Thread-195144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:51:30.867 [DEBUG] [Thread-195144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:51:30.908 [DEBUG] [Thread-195144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:51:30.908 [DEBUG] [Thread-195144] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:51:30.912 [DEBUG] [Thread-195144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:51:30.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:51:30.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:51:30.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:51:30.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:51:30.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:51:30.930 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:51:30.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:51:30.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:51:30.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:51:30.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.951845 -999.00   +7.70  25.05     80   +4.60 1 1 1 2 1     0    0 1.55 -60.01 ZNESW 25.1 25.1 152.8 41.2 8.3 -24.0 8.1 -23.1 7.8 -22.1 8.2 -23.3
2026-02-15T00:51:30.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:51:30.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:51:30.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.951845
2026-02-15T00:51:30.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:51:30.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:51:30.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:51:30.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:51:30.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:51:30.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:51:20', tmtdew=2.54, humidity=84.57, cloud=0.0, wind=38.94, temperature=5.07, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:51:20', seeing=2.54, atlas_timestamp='2026-02-14T22:50:39.408', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.0017500000000012506, -0.03275000000000006, -0.04150000000000098, 0.0019999999999988916, 0.047250000000000014, 0.016000000000000014, 0.03225000000000122, 0.06849999999999845, 0.040000000000000924, -0.014750000000001151, -0.006000000000000227, 0.051000000000000156, 0.02624999999999922, 0.04049999999999798, 0.032999999999999474, 0.06874999999999964, 0.06550000000000011, 0.02999999999999936, 0.02874999999999872, 0.034999999999998366, 0.0747499999999981, 0.00975000000000037, 0.045249999999999346, 0.06799999999999962, 0.016500000000000625, 0.028249999999999886, 0.026500000000000412, 0.06350000000000122, 0.015000000000000568, 0.09850000000000136, 0.11500000000000021, 0.04974999999999952], zp_timestamp='2026-02-14T22:49:00')
2026-02-15T00:51:30.932 [DEBUG] [Thread-195144] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:51: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-15T00:51:31.028 [DEBUG] [Thread-195147] [transport.py] [_log()] starting thread (client mode): 0xa2d1b880
2026-02-15T00:51:31.028 [DEBUG] [Thread-195147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:51:31.042 [DEBUG] [Thread-195147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:51:31.043 [INFO] [Thread-195147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:51:31.050 [DEBUG] [Thread-195147] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:51:31.050 [DEBUG] [Thread-195147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:51:31.051 [DEBUG] [Thread-195147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:51:31.051 [DEBUG] [Thread-195147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:51:31.051 [DEBUG] [Thread-195147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:51:31.051 [DEBUG] [Thread-195147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:51:31.051 [DEBUG] [Thread-195147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:51:31.051 [DEBUG] [Thread-195147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:51:31.051 [DEBUG] [Thread-195147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:51:31.051 [DEBUG] [Thread-195147] [transport.py] [_log()] client lang: <none>
2026-02-15T00:51:31.051 [DEBUG] [Thread-195147] [transport.py] [_log()] server lang: <none>
2026-02-15T00:51:31.051 [DEBUG] [Thread-195147] [transport.py] [_log()] kex follows: False
2026-02-15T00:51:31.051 [DEBUG] [Thread-195147] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:51:31.051 [DEBUG] [Thread-195147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:51:31.051 [DEBUG] [Thread-195147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:51:31.051 [DEBUG] [Thread-195147] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:51:31.051 [DEBUG] [Thread-195147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:51:31.051 [DEBUG] [Thread-195147] [transport.py] [_log()] Compression: none
2026-02-15T00:51:31.052 [DEBUG] [Thread-195147] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:51:31.109 [DEBUG] [Thread-195147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:51:31.109 [DEBUG] [Thread-195147] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:51:31.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:51:31.111 [DEBUG] [Thread-195147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:51:31.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:51:31.165 [DEBUG] [Thread-195147] [transport.py] [_log()] userauth is OK
2026-02-15T00:51:31.165 [DEBUG] [Thread-195147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:51:31.166 [DEBUG] [Thread-195147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:51:31.166 [DEBUG] [Thread-195147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:51:31.166 [DEBUG] [Thread-195147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:51:31.184 [INFO] [Thread-195147] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:51:31.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-15T00:51:31.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:51:32.007 [DEBUG] [Thread-195147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:51:32.008 [DEBUG] [Thread-195147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:51:32.055 [DEBUG] [Thread-195147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:51:32.055 [DEBUG] [Thread-195147] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:51:32.063 [DEBUG] [Thread-195147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:51:32.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:51:32.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:51:32.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:51:32.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:51:32.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:51:32.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:51:32.102 [DEBUG] [Thread-195147] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:51:34.476 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:51:35.753 [DEBUG] [Thread-195149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:51:50.811 [DEBUG] [Thread-195150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:51:53.123 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:52:02.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:52:02.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:52:02.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:52:04.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 51, 20), 2.54, 84.57, 0.0, 38.94, 5.07, 0, 1, 0, 2, 0, 0),)
2026-02-15T00:52:04.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:51:20
2026-02-15T00:52:04.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:52:04.805 [DEBUG] [Thread-195151] [transport.py] [_log()] starting thread (client mode): 0xa2d96fe0
2026-02-15T00:52:04.805 [DEBUG] [Thread-195151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:52:04.825 [DEBUG] [Thread-195151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:52:04.825 [INFO] [Thread-195151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:52:04.828 [DEBUG] [Thread-195151] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:52:04.829 [DEBUG] [Thread-195151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:52:04.829 [DEBUG] [Thread-195151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:52:04.829 [DEBUG] [Thread-195151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:52:04.829 [DEBUG] [Thread-195151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:52:04.829 [DEBUG] [Thread-195151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:52:04.829 [DEBUG] [Thread-195151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:52:04.829 [DEBUG] [Thread-195151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:52:04.829 [DEBUG] [Thread-195151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:52:04.829 [DEBUG] [Thread-195151] [transport.py] [_log()] client lang: <none>
2026-02-15T00:52:04.829 [DEBUG] [Thread-195151] [transport.py] [_log()] server lang: <none>
2026-02-15T00:52:04.829 [DEBUG] [Thread-195151] [transport.py] [_log()] kex follows: False
2026-02-15T00:52:04.829 [DEBUG] [Thread-195151] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:52:04.830 [DEBUG] [Thread-195151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:52:04.830 [DEBUG] [Thread-195151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:52:04.830 [DEBUG] [Thread-195151] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:52:04.830 [DEBUG] [Thread-195151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:52:04.830 [DEBUG] [Thread-195151] [transport.py] [_log()] Compression: none
2026-02-15T00:52:04.830 [DEBUG] [Thread-195151] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:52:04.846 [DEBUG] [Thread-195151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:52:04.847 [DEBUG] [Thread-195151] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:52:04.847 [DEBUG] [Thread-195151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:52:04.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:52:04.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:52:04.850 [DEBUG] [Thread-195151] [transport.py] [_log()] userauth is OK
2026-02-15T00:52:04.850 [DEBUG] [Thread-195151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:52:04.850 [DEBUG] [Thread-195151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:52:04.850 [DEBUG] [Thread-195151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:52:04.850 [DEBUG] [Thread-195151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:52:04.875 [INFO] [Thread-195151] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:52:04.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:52:05.529 [DEBUG] [Thread-195151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:52:05.529 [DEBUG] [Thread-195151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:52:05.530 [DEBUG] [Thread-195151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:52:05.571 [DEBUG] [Thread-195151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:52:05.571 [DEBUG] [Thread-195151] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:52:05.574 [DEBUG] [Thread-195151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:52:05.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:52:05.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:52:05.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:52:05.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:52:05.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:52:05.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:52:05.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:52:05.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:52:05.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:52:05.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.952192 -999.00   +7.70  32.18     80   +4.60 1 1 2 2 1     0    0 1.88 -48.72 ZNESW 32.2 32.2 157.4 40.2 8.3 -24.2 8.1 -23.1 7.8 -22.1 8.2 -23.5
2026-02-15T00:52:05.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:52:05.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:52:05.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.952192
2026-02-15T00:52:05.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:52:05.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:52:05.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:52:05.601 [DEBUG] [Thread-195151] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:52:05.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:52:05.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:52:05.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:51:20', tmtdew=2.54, humidity=84.57, cloud=0.0, wind=38.94, temperature=5.07, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:51:56', seeing=2.84, atlas_timestamp='2026-02-14T22:51:09.389', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.0017500000000012506, -0.03275000000000006, -0.04150000000000098, 0.0019999999999988916, 0.047250000000000014, 0.016000000000000014, 0.03225000000000122, 0.06849999999999845, 0.040000000000000924, -0.014750000000001151, -0.006000000000000227, 0.051000000000000156, 0.02624999999999922, 0.04049999999999798, 0.032999999999999474, 0.06874999999999964, 0.06550000000000011, 0.02999999999999936, 0.02874999999999872, 0.034999999999998366, 0.0747499999999981, 0.00975000000000037, 0.045249999999999346, 0.06799999999999962, 0.016500000000000625, 0.028249999999999886, 0.026500000000000412, 0.06350000000000122, 0.015000000000000568, 0.09850000000000136, 0.11500000000000021, 0.04974999999999952], zp_timestamp='2026-02-14T22:49:00')
2026-02-15T00:52:05.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-15T00:52:05.695 [DEBUG] [Thread-195154] [transport.py] [_log()] starting thread (client mode): 0xa2d1b280
2026-02-15T00:52:05.695 [DEBUG] [Thread-195154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:52:05.710 [DEBUG] [Thread-195154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:52:05.710 [INFO] [Thread-195154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:52:05.717 [DEBUG] [Thread-195154] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:52:05.718 [DEBUG] [Thread-195154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:52:05.718 [DEBUG] [Thread-195154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:52:05.718 [DEBUG] [Thread-195154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:52:05.718 [DEBUG] [Thread-195154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:52:05.718 [DEBUG] [Thread-195154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:52:05.718 [DEBUG] [Thread-195154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:52:05.718 [DEBUG] [Thread-195154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:52:05.718 [DEBUG] [Thread-195154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:52:05.718 [DEBUG] [Thread-195154] [transport.py] [_log()] client lang: <none>
2026-02-15T00:52:05.719 [DEBUG] [Thread-195154] [transport.py] [_log()] server lang: <none>
2026-02-15T00:52:05.719 [DEBUG] [Thread-195154] [transport.py] [_log()] kex follows: False
2026-02-15T00:52:05.719 [DEBUG] [Thread-195154] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:52:05.719 [DEBUG] [Thread-195154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:52:05.719 [DEBUG] [Thread-195154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:52:05.720 [DEBUG] [Thread-195154] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:52:05.720 [DEBUG] [Thread-195154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:52:05.720 [DEBUG] [Thread-195154] [transport.py] [_log()] Compression: none
2026-02-15T00:52:05.720 [DEBUG] [Thread-195154] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:52:05.775 [DEBUG] [Thread-195154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:52:05.775 [DEBUG] [Thread-195154] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:52:05.776 [DEBUG] [Thread-195154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:52:05.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:52:05.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:52:05.835 [DEBUG] [Thread-195154] [transport.py] [_log()] userauth is OK
2026-02-15T00:52:05.836 [DEBUG] [Thread-195154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:52:05.836 [DEBUG] [Thread-195154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:52:05.836 [DEBUG] [Thread-195154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:52:05.836 [DEBUG] [Thread-195154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:52:05.852 [DEBUG] [Thread-195156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:52:05.855 [INFO] [Thread-195154] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:52:05.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-15T00:52:05.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:52:06.733 [DEBUG] [Thread-195154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:52:06.733 [DEBUG] [Thread-195154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:52:06.782 [DEBUG] [Thread-195154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:52:06.782 [DEBUG] [Thread-195154] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:52:06.791 [DEBUG] [Thread-195154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:52:06.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:52:06.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')
2026-02-15T00:52:06.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-15T00:52:06.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:52:06.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:52:06.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:52:06.828 [DEBUG] [Thread-195154] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:52:10.493 [DEBUG] [Thread-195157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:52:11.912 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:52:20.905 [DEBUG] [Thread-195158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:52:24.707 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:52:24.708 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:52:30.588 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:52:35.941 [DEBUG] [Thread-195159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:52:36.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:52:36.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:52:36.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-15T00:52:38.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 51, 56), 2.54, 84.59, 0.0, 45.29, 5.07, 0, 1, 0, 2, 1, 0),)
2026-02-15T00:52:38.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:51:56
2026-02-15T00:52:39.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:52:39.334 [DEBUG] [Thread-195160] [transport.py] [_log()] starting thread (client mode): 0xa2d94580
2026-02-15T00:52:39.334 [DEBUG] [Thread-195160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:52:39.355 [DEBUG] [Thread-195160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:52:39.355 [INFO] [Thread-195160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:52:39.358 [DEBUG] [Thread-195160] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:52:39.358 [DEBUG] [Thread-195160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:52:39.358 [DEBUG] [Thread-195160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:52:39.358 [DEBUG] [Thread-195160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:52:39.358 [DEBUG] [Thread-195160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:52:39.358 [DEBUG] [Thread-195160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:52:39.358 [DEBUG] [Thread-195160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:52:39.358 [DEBUG] [Thread-195160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:52:39.359 [DEBUG] [Thread-195160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:52:39.359 [DEBUG] [Thread-195160] [transport.py] [_log()] client lang: <none>
2026-02-15T00:52:39.359 [DEBUG] [Thread-195160] [transport.py] [_log()] server lang: <none>
2026-02-15T00:52:39.359 [DEBUG] [Thread-195160] [transport.py] [_log()] kex follows: False
2026-02-15T00:52:39.359 [DEBUG] [Thread-195160] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:52:39.359 [DEBUG] [Thread-195160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:52:39.359 [DEBUG] [Thread-195160] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:52:39.359 [DEBUG] [Thread-195160] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:52:39.359 [DEBUG] [Thread-195160] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:52:39.359 [DEBUG] [Thread-195160] [transport.py] [_log()] Compression: none
2026-02-15T00:52:39.359 [DEBUG] [Thread-195160] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:52:39.375 [DEBUG] [Thread-195160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:52:39.376 [DEBUG] [Thread-195160] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:52:39.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:52:39.377 [DEBUG] [Thread-195160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:52:39.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:52:39.379 [DEBUG] [Thread-195160] [transport.py] [_log()] userauth is OK
2026-02-15T00:52:39.379 [DEBUG] [Thread-195160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:52:39.379 [DEBUG] [Thread-195160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:52:39.379 [DEBUG] [Thread-195160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:52:39.379 [DEBUG] [Thread-195160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:52:39.402 [INFO] [Thread-195160] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:52:39.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:52:40.049 [DEBUG] [Thread-195160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:52:40.049 [DEBUG] [Thread-195160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:52:40.049 [DEBUG] [Thread-195160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:52:40.090 [DEBUG] [Thread-195160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:52:40.090 [DEBUG] [Thread-195160] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:52:40.093 [DEBUG] [Thread-195160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:52:40.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:52:40.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:52:40.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:52:40.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:52:40.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:52:40.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:52:40.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:52:40.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:52:40.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:52:40.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.952540 -999.00   +7.60  30.96     80   +4.60 1 1 2 2 1     0    0 1.90 -49.02 ZNESW 31.0 31.0 164.6 37.8 8.3 -24.1 8.0 -23.1 7.8 -22.1 8.2 -23.3
2026-02-15T00:52:40.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:52:40.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:52:40.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.952540
2026-02-15T00:52:40.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:52:40.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:52:40.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:52:40.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:52:40.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:52:40.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:51:56', tmtdew=2.54, humidity=84.59, cloud=0.0, wind=45.29, temperature=5.07, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T00:52:32', seeing=2.5, atlas_timestamp='2026-02-14T22:51:39.456', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.0017500000000012506, -0.03275000000000006, -0.04150000000000098, 0.0019999999999988916, 0.047250000000000014, 0.016000000000000014, 0.03225000000000122, 0.06849999999999845, 0.040000000000000924, -0.014750000000001151, -0.006000000000000227, 0.051000000000000156, 0.02624999999999922, 0.04049999999999798, 0.032999999999999474, 0.06874999999999964, 0.06550000000000011, 0.02999999999999936, 0.02874999999999872, 0.034999999999998366, 0.0747499999999981, 0.00975000000000037, 0.045249999999999346, 0.06799999999999962, 0.016500000000000625, 0.028249999999999886, 0.026500000000000412, 0.06350000000000122, 0.015000000000000568, 0.09850000000000136, 0.11500000000000021, 0.04974999999999952], zp_timestamp='2026-02-14T22:49:00')
2026-02-15T00:52:40.116 [DEBUG] [Thread-195160] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:52:40.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-15T00:52:40.211 [DEBUG] [Thread-195163] [transport.py] [_log()] starting thread (client mode): 0xa2d78790
2026-02-15T00:52:40.211 [DEBUG] [Thread-195163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:52:40.226 [DEBUG] [Thread-195163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:52:40.226 [INFO] [Thread-195163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:52:40.233 [DEBUG] [Thread-195163] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:52:40.233 [DEBUG] [Thread-195163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:52:40.234 [DEBUG] [Thread-195163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:52:40.234 [DEBUG] [Thread-195163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:52:40.234 [DEBUG] [Thread-195163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:52:40.234 [DEBUG] [Thread-195163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:52:40.234 [DEBUG] [Thread-195163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:52:40.234 [DEBUG] [Thread-195163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:52:40.234 [DEBUG] [Thread-195163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:52:40.234 [DEBUG] [Thread-195163] [transport.py] [_log()] client lang: <none>
2026-02-15T00:52:40.234 [DEBUG] [Thread-195163] [transport.py] [_log()] server lang: <none>
2026-02-15T00:52:40.234 [DEBUG] [Thread-195163] [transport.py] [_log()] kex follows: False
2026-02-15T00:52:40.234 [DEBUG] [Thread-195163] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:52:40.234 [DEBUG] [Thread-195163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:52:40.234 [DEBUG] [Thread-195163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:52:40.234 [DEBUG] [Thread-195163] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:52:40.234 [DEBUG] [Thread-195163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:52:40.234 [DEBUG] [Thread-195163] [transport.py] [_log()] Compression: none
2026-02-15T00:52:40.234 [DEBUG] [Thread-195163] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:52:40.291 [DEBUG] [Thread-195163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:52:40.292 [DEBUG] [Thread-195163] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:52:40.292 [DEBUG] [Thread-195163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:52:40.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:52:40.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:52:40.348 [DEBUG] [Thread-195163] [transport.py] [_log()] userauth is OK
2026-02-15T00:52:40.348 [DEBUG] [Thread-195163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:52:40.348 [DEBUG] [Thread-195163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:52:40.348 [DEBUG] [Thread-195163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:52:40.349 [DEBUG] [Thread-195163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:52:40.371 [INFO] [Thread-195163] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:52:40.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-15T00:52:40.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:52:41.159 [DEBUG] [Thread-195163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:52:41.160 [DEBUG] [Thread-195163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:52:41.207 [DEBUG] [Thread-195163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:52:41.207 [DEBUG] [Thread-195163] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:52:41.216 [DEBUG] [Thread-195163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:52:41.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:52:41.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-15T00:52: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') -> 00000000
2026-02-15T00:52:41.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:52:41.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:52:41.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:52:41.249 [DEBUG] [Thread-195163] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:52:49.259 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:52:50.975 [DEBUG] [Thread-195165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:53:06.025 [DEBUG] [Thread-195166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:53:07.964 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:53:10.544 [DEBUG] [Thread-195167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:53:11.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:53:11.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:53:11.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-15T00:53:13.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 52, 32), 2.53, 84.61, 0.0, 42.21, 5.06, 0, 1, 0, 2, 0, 0),)
2026-02-15T00:53:13.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:52:32
2026-02-15T00:53:13.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:53:13.777 [DEBUG] [Thread-195168] [transport.py] [_log()] starting thread (client mode): 0xa2d1bb80
2026-02-15T00:53:13.777 [DEBUG] [Thread-195168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:53:13.797 [DEBUG] [Thread-195168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:53:13.797 [INFO] [Thread-195168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:53:13.800 [DEBUG] [Thread-195168] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:53:13.800 [DEBUG] [Thread-195168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:53:13.800 [DEBUG] [Thread-195168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:53:13.800 [DEBUG] [Thread-195168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:53:13.800 [DEBUG] [Thread-195168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:53:13.800 [DEBUG] [Thread-195168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:53:13.800 [DEBUG] [Thread-195168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:53:13.800 [DEBUG] [Thread-195168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:53:13.800 [DEBUG] [Thread-195168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:53:13.800 [DEBUG] [Thread-195168] [transport.py] [_log()] client lang: <none>
2026-02-15T00:53:13.800 [DEBUG] [Thread-195168] [transport.py] [_log()] server lang: <none>
2026-02-15T00:53:13.800 [DEBUG] [Thread-195168] [transport.py] [_log()] kex follows: False
2026-02-15T00:53:13.800 [DEBUG] [Thread-195168] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:53:13.800 [DEBUG] [Thread-195168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:53:13.800 [DEBUG] [Thread-195168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:53:13.800 [DEBUG] [Thread-195168] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:53:13.800 [DEBUG] [Thread-195168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:53:13.800 [DEBUG] [Thread-195168] [transport.py] [_log()] Compression: none
2026-02-15T00:53:13.800 [DEBUG] [Thread-195168] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:53:13.809 [DEBUG] [Thread-195168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:53:13.809 [DEBUG] [Thread-195168] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:53:13.809 [DEBUG] [Thread-195168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:53:13.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:53:13.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:53:13.811 [DEBUG] [Thread-195168] [transport.py] [_log()] userauth is OK
2026-02-15T00:53:13.811 [DEBUG] [Thread-195168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:53:13.811 [DEBUG] [Thread-195168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:53:13.811 [DEBUG] [Thread-195168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:53:13.811 [DEBUG] [Thread-195168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:53:13.829 [INFO] [Thread-195168] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:53:13.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:53:14.483 [DEBUG] [Thread-195168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:53:14.492 [DEBUG] [Thread-195168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:53:14.492 [DEBUG] [Thread-195168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:53:14.524 [DEBUG] [Thread-195168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:53:14.524 [DEBUG] [Thread-195168] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:53:14.528 [DEBUG] [Thread-195168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:53:14.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:53:14.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:53:14.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:53:14.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:53:14.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:53:14.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:53:14.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:53:14.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:53:14.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:53:14.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.953234 -999.00   +7.60  33.89     81   +4.60 1 1 2 2 1     0    0 2.01 -44.48 ZNESW 33.9 33.9 149.4 47.0 8.2 -24.1 8.0 -23.1 7.8 -22.2 8.2 -23.4
2026-02-15T00:53:14.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:53:14.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:53:14.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.953234
2026-02-15T00:53:14.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:53:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:53:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:53:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:53:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:53:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:52:32', tmtdew=2.53, humidity=84.61, cloud=0.0, wind=42.21, temperature=5.06, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:53:07', seeing=2.15, atlas_timestamp='2026-02-14T22:52:39.418', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.0017500000000012506, -0.03275000000000006, -0.04150000000000098, 0.0019999999999988916, 0.047250000000000014, 0.016000000000000014, 0.03225000000000122, 0.06849999999999845, 0.040000000000000924, -0.014750000000001151, -0.006000000000000227, 0.051000000000000156, 0.02624999999999922, 0.04049999999999798, 0.032999999999999474, 0.06874999999999964, 0.06550000000000011, 0.02999999999999936, 0.02874999999999872, 0.034999999999998366, 0.0747499999999981, 0.00975000000000037, 0.045249999999999346, 0.06799999999999962, 0.016500000000000625, 0.028249999999999886, 0.026500000000000412, 0.06350000000000122, 0.015000000000000568, 0.09850000000000136, 0.11500000000000021, 0.04974999999999952], zp_timestamp='2026-02-14T22:49:00')
2026-02-15T00:53:14.556 [DEBUG] [Thread-195168] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:53:14.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-15T00:53:14.652 [DEBUG] [Thread-195171] [transport.py] [_log()] starting thread (client mode): 0xa2d19510
2026-02-15T00:53:14.652 [DEBUG] [Thread-195171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:53:14.674 [DEBUG] [Thread-195171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:53:14.675 [INFO] [Thread-195171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:53:14.682 [DEBUG] [Thread-195171] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:53:14.683 [DEBUG] [Thread-195171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:53:14.683 [DEBUG] [Thread-195171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:53:14.683 [DEBUG] [Thread-195171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:53:14.683 [DEBUG] [Thread-195171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:53:14.683 [DEBUG] [Thread-195171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:53:14.683 [DEBUG] [Thread-195171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:53:14.683 [DEBUG] [Thread-195171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:53:14.683 [DEBUG] [Thread-195171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:53:14.683 [DEBUG] [Thread-195171] [transport.py] [_log()] client lang: <none>
2026-02-15T00:53:14.683 [DEBUG] [Thread-195171] [transport.py] [_log()] server lang: <none>
2026-02-15T00:53:14.683 [DEBUG] [Thread-195171] [transport.py] [_log()] kex follows: False
2026-02-15T00:53:14.683 [DEBUG] [Thread-195171] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:53:14.683 [DEBUG] [Thread-195171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:53:14.683 [DEBUG] [Thread-195171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:53:14.683 [DEBUG] [Thread-195171] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:53:14.683 [DEBUG] [Thread-195171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:53:14.684 [DEBUG] [Thread-195171] [transport.py] [_log()] Compression: none
2026-02-15T00:53:14.684 [DEBUG] [Thread-195171] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:53:14.742 [DEBUG] [Thread-195171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:53:14.742 [DEBUG] [Thread-195171] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:53:14.743 [DEBUG] [Thread-195171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:53:14.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:53:14.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:53:14.798 [DEBUG] [Thread-195171] [transport.py] [_log()] userauth is OK
2026-02-15T00:53:14.799 [DEBUG] [Thread-195171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:53:14.799 [DEBUG] [Thread-195171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:53:14.799 [DEBUG] [Thread-195171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:53:14.799 [DEBUG] [Thread-195171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:53:14.818 [INFO] [Thread-195171] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:53:14.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T00:53:14.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:53:15.594 [DEBUG] [Thread-195171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:53:15.595 [DEBUG] [Thread-195171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:53:15.643 [DEBUG] [Thread-195171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:53:15.643 [DEBUG] [Thread-195171] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:53:15.651 [DEBUG] [Thread-195171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:53:15.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:53:15.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:53:15.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-15T00:53:15.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:53:15.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:53:15.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:53:15.687 [DEBUG] [Thread-195171] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:53:21.060 [DEBUG] [Thread-195173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:53:24.908 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:53:24.909 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:53:26.603 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:53:36.113 [DEBUG] [Thread-195174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:53:45.310 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:53:45.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:53:45.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:53:45.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:53:47.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 53, 7), 2.53, 84.64, 0.0, 41.53, 5.05, 0, 1, 0, 2, 0, 0),)
2026-02-15T00:53:47.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:53:07
2026-02-15T00:53:48.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:53:48.507 [DEBUG] [Thread-195175] [transport.py] [_log()] starting thread (client mode): 0xa57d5780
2026-02-15T00:53:48.507 [DEBUG] [Thread-195175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:53:48.527 [DEBUG] [Thread-195175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:53:48.527 [INFO] [Thread-195175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:53:48.530 [DEBUG] [Thread-195175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:53:48.530 [DEBUG] [Thread-195175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:53:48.530 [DEBUG] [Thread-195175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:53:48.530 [DEBUG] [Thread-195175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:53:48.530 [DEBUG] [Thread-195175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:53:48.530 [DEBUG] [Thread-195175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:53:48.530 [DEBUG] [Thread-195175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:53:48.530 [DEBUG] [Thread-195175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:53:48.530 [DEBUG] [Thread-195175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:53:48.530 [DEBUG] [Thread-195175] [transport.py] [_log()] client lang: <none>
2026-02-15T00:53:48.530 [DEBUG] [Thread-195175] [transport.py] [_log()] server lang: <none>
2026-02-15T00:53:48.530 [DEBUG] [Thread-195175] [transport.py] [_log()] kex follows: False
2026-02-15T00:53:48.530 [DEBUG] [Thread-195175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:53:48.531 [DEBUG] [Thread-195175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:53:48.531 [DEBUG] [Thread-195175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:53:48.531 [DEBUG] [Thread-195175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:53:48.531 [DEBUG] [Thread-195175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:53:48.531 [DEBUG] [Thread-195175] [transport.py] [_log()] Compression: none
2026-02-15T00:53:48.531 [DEBUG] [Thread-195175] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:53:48.548 [DEBUG] [Thread-195175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:53:48.548 [DEBUG] [Thread-195175] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:53:48.549 [DEBUG] [Thread-195175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:53:48.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:53:48.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:53:48.593 [DEBUG] [Thread-195175] [transport.py] [_log()] userauth is OK
2026-02-15T00:53:48.593 [DEBUG] [Thread-195175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:53:48.593 [DEBUG] [Thread-195175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:53:48.593 [DEBUG] [Thread-195175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:53:48.593 [DEBUG] [Thread-195175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:53:48.613 [INFO] [Thread-195175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:53:48.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:53:49.248 [DEBUG] [Thread-195175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:53:49.248 [DEBUG] [Thread-195175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:53:49.249 [DEBUG] [Thread-195175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:53:49.289 [DEBUG] [Thread-195175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:53:49.289 [DEBUG] [Thread-195175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:53:49.293 [DEBUG] [Thread-195175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:53:49.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:53:49.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:53:49.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:53:49.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:53:49.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:53:49.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:53:49.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:53:49.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:53:49.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:53:49.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.953581 -999.00   +7.60  21.48     81   +4.60 1 1 1 2 1     0    0 2.10 -41.94 ZNESW 21.5 21.5 151.4 40.4 8.2 -24.1 8.0 -23.2 7.8 -22.2 8.2 -23.3
2026-02-15T00:53:49.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:53:49.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:53:49.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.953581
2026-02-15T00:53:49.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:53:49.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:53:49.322 [DEBUG] [Thread-195175] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:53:49.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:53:49.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:53:49.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:53:49.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:53:07', tmtdew=2.53, humidity=84.64, cloud=0.0, wind=41.53, temperature=5.05, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:53:43', seeing=2.54, atlas_timestamp='2026-02-14T22:53:09.398', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.0017500000000012506, -0.03275000000000006, -0.04150000000000098, 0.0019999999999988916, 0.047250000000000014, 0.016000000000000014, 0.03225000000000122, 0.06849999999999845, 0.040000000000000924, -0.014750000000001151, -0.006000000000000227, 0.051000000000000156, 0.02624999999999922, 0.04049999999999798, 0.032999999999999474, 0.06874999999999964, 0.06550000000000011, 0.02999999999999936, 0.02874999999999872, 0.034999999999998366, 0.0747499999999981, 0.00975000000000037, 0.045249999999999346, 0.06799999999999962, 0.016500000000000625, 0.028249999999999886, 0.026500000000000412, 0.06350000000000122, 0.015000000000000568, 0.09850000000000136, 0.11500000000000021, 0.04974999999999952], zp_timestamp='2026-02-14T22:49:00')
2026-02-15T00:53:49.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-15T00:53:49.417 [DEBUG] [Thread-195178] [transport.py] [_log()] starting thread (client mode): 0xa5743280
2026-02-15T00:53:49.417 [DEBUG] [Thread-195178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:53:49.431 [DEBUG] [Thread-195178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:53:49.432 [INFO] [Thread-195178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:53:49.439 [DEBUG] [Thread-195178] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:53:49.439 [DEBUG] [Thread-195178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:53:49.439 [DEBUG] [Thread-195178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:53:49.439 [DEBUG] [Thread-195178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:53:49.439 [DEBUG] [Thread-195178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:53:49.439 [DEBUG] [Thread-195178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:53:49.440 [DEBUG] [Thread-195178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:53:49.440 [DEBUG] [Thread-195178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:53:49.440 [DEBUG] [Thread-195178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:53:49.440 [DEBUG] [Thread-195178] [transport.py] [_log()] client lang: <none>
2026-02-15T00:53:49.440 [DEBUG] [Thread-195178] [transport.py] [_log()] server lang: <none>
2026-02-15T00:53:49.440 [DEBUG] [Thread-195178] [transport.py] [_log()] kex follows: False
2026-02-15T00:53:49.440 [DEBUG] [Thread-195178] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:53:49.440 [DEBUG] [Thread-195178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:53:49.440 [DEBUG] [Thread-195178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:53:49.440 [DEBUG] [Thread-195178] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:53:49.440 [DEBUG] [Thread-195178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:53:49.440 [DEBUG] [Thread-195178] [transport.py] [_log()] Compression: none
2026-02-15T00:53:49.440 [DEBUG] [Thread-195178] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:53:49.501 [DEBUG] [Thread-195178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:53:49.502 [DEBUG] [Thread-195178] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:53:49.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:53:49.503 [DEBUG] [Thread-195178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:53:49.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:53:49.560 [DEBUG] [Thread-195178] [transport.py] [_log()] userauth is OK
2026-02-15T00:53:49.560 [DEBUG] [Thread-195178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:53:49.560 [DEBUG] [Thread-195178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:53:49.561 [DEBUG] [Thread-195178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:53:49.561 [DEBUG] [Thread-195178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:53:49.580 [INFO] [Thread-195178] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:53:49.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-15T00:53:49.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:53:50.373 [DEBUG] [Thread-195178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:53:50.373 [DEBUG] [Thread-195178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:53:50.421 [DEBUG] [Thread-195178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:53:50.421 [DEBUG] [Thread-195178] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:53:50.430 [DEBUG] [Thread-195178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:53:50.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:53:50.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-15T00:53:50.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:53:50.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:53:50.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:53:50.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:53:50.465 [DEBUG] [Thread-195178] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:53:51.151 [DEBUG] [Thread-195180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:54:04.175 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:54:06.202 [DEBUG] [Thread-195181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:54:10.601 [DEBUG] [Thread-195182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:54:20.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:54:20.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:54:20.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-15T00:54:21.238 [DEBUG] [Thread-195183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:54:22.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 53, 42), 1.98, 88.0, 0.0, 41.0, 3.83, 1, 1, 0, 2, 0, 0),)
2026-02-15T00:54:22.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:53:42
2026-02-15T00:54:22.830 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:54:22.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:54:23.113 [DEBUG] [Thread-195184] [transport.py] [_log()] starting thread (client mode): 0xa5740820
2026-02-15T00:54:23.113 [DEBUG] [Thread-195184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:54:23.134 [DEBUG] [Thread-195184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:54:23.134 [INFO] [Thread-195184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:54:23.137 [DEBUG] [Thread-195184] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:54:23.137 [DEBUG] [Thread-195184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:54:23.137 [DEBUG] [Thread-195184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:54:23.137 [DEBUG] [Thread-195184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:54:23.137 [DEBUG] [Thread-195184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:54:23.137 [DEBUG] [Thread-195184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:54:23.137 [DEBUG] [Thread-195184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:54:23.137 [DEBUG] [Thread-195184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:54:23.138 [DEBUG] [Thread-195184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:54:23.138 [DEBUG] [Thread-195184] [transport.py] [_log()] client lang: <none>
2026-02-15T00:54:23.138 [DEBUG] [Thread-195184] [transport.py] [_log()] server lang: <none>
2026-02-15T00:54:23.138 [DEBUG] [Thread-195184] [transport.py] [_log()] kex follows: False
2026-02-15T00:54:23.138 [DEBUG] [Thread-195184] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:54:23.138 [DEBUG] [Thread-195184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:54:23.138 [DEBUG] [Thread-195184] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:54:23.138 [DEBUG] [Thread-195184] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:54:23.138 [DEBUG] [Thread-195184] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:54:23.138 [DEBUG] [Thread-195184] [transport.py] [_log()] Compression: none
2026-02-15T00:54:23.138 [DEBUG] [Thread-195184] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:54:23.155 [DEBUG] [Thread-195184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:54:23.155 [DEBUG] [Thread-195184] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:54:23.156 [DEBUG] [Thread-195184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:54:23.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:54:23.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:54:23.158 [DEBUG] [Thread-195184] [transport.py] [_log()] userauth is OK
2026-02-15T00:54:23.158 [DEBUG] [Thread-195184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:54:23.158 [DEBUG] [Thread-195184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:54:23.158 [DEBUG] [Thread-195184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:54:23.158 [DEBUG] [Thread-195184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:54:23.176 [INFO] [Thread-195184] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:54:23.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:54:23.945 [DEBUG] [Thread-195184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:54:23.945 [DEBUG] [Thread-195184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:54:23.945 [DEBUG] [Thread-195184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:54:23.986 [DEBUG] [Thread-195184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:54:23.986 [DEBUG] [Thread-195184] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:54:23.989 [DEBUG] [Thread-195184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:54:24.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:54:24.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:54:24.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:54:24.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:54:24.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:54:24.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:54:24.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:54:24.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:54:24.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:54:24.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.953929 -999.00   +7.60  23.80     81   +4.70 1 1 1 2 1     0    0 2.03 -42.36 ZNESW 23.8 23.8 149.4 51.4 8.2 -24.0 8.0 -23.0 7.8 -22.0 8.2 -23.1
2026-02-15T00:54:24.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:54:24.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:54:24.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.953929
2026-02-15T00:54:24.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:54:24.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:54:24.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:54:24.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:54:24.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:54:24.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:53:42', tmtdew=1.98, humidity=88.0, cloud=0.0, wind=41.0, temperature=3.83, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:54:18', seeing=2.11, atlas_timestamp='2026-02-14T22:53:39.466', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.0017500000000012506, -0.03275000000000006, -0.04150000000000098, 0.0019999999999988916, 0.047250000000000014, 0.016000000000000014, 0.03225000000000122, 0.06849999999999845, 0.040000000000000924, -0.014750000000001151, -0.006000000000000227, 0.051000000000000156, 0.02624999999999922, 0.04049999999999798, 0.032999999999999474, 0.06874999999999964, 0.06550000000000011, 0.02999999999999936, 0.02874999999999872, 0.034999999999998366, 0.0747499999999981, 0.00975000000000037, 0.045249999999999346, 0.06799999999999962, 0.016500000000000625, 0.028249999999999886, 0.026500000000000412, 0.06350000000000122, 0.015000000000000568, 0.09850000000000136, 0.11500000000000021, 0.04974999999999952], zp_timestamp='2026-02-14T22:53:00')
2026-02-15T00:54:24.014 [DEBUG] [Thread-195184] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:54:24.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-15T00:54:24.108 [DEBUG] [Thread-195187] [transport.py] [_log()] starting thread (client mode): 0xa2d6e860
2026-02-15T00:54:24.108 [DEBUG] [Thread-195187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:54:24.122 [DEBUG] [Thread-195187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:54:24.122 [INFO] [Thread-195187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:54:24.130 [DEBUG] [Thread-195187] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:54:24.130 [DEBUG] [Thread-195187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:54:24.130 [DEBUG] [Thread-195187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:54:24.130 [DEBUG] [Thread-195187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:54:24.130 [DEBUG] [Thread-195187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:54:24.130 [DEBUG] [Thread-195187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:54:24.130 [DEBUG] [Thread-195187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:54:24.130 [DEBUG] [Thread-195187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:54:24.130 [DEBUG] [Thread-195187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:54:24.130 [DEBUG] [Thread-195187] [transport.py] [_log()] client lang: <none>
2026-02-15T00:54:24.130 [DEBUG] [Thread-195187] [transport.py] [_log()] server lang: <none>
2026-02-15T00:54:24.130 [DEBUG] [Thread-195187] [transport.py] [_log()] kex follows: False
2026-02-15T00:54:24.130 [DEBUG] [Thread-195187] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:54:24.131 [DEBUG] [Thread-195187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:54:24.131 [DEBUG] [Thread-195187] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:54:24.131 [DEBUG] [Thread-195187] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:54:24.131 [DEBUG] [Thread-195187] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:54:24.131 [DEBUG] [Thread-195187] [transport.py] [_log()] Compression: none
2026-02-15T00:54:24.131 [DEBUG] [Thread-195187] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:54:24.188 [DEBUG] [Thread-195187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:54:24.189 [DEBUG] [Thread-195187] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:54:24.189 [DEBUG] [Thread-195187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:54:24.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:54:24.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:54:24.248 [DEBUG] [Thread-195187] [transport.py] [_log()] userauth is OK
2026-02-15T00:54:24.249 [DEBUG] [Thread-195187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:54:24.249 [DEBUG] [Thread-195187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:54:24.249 [DEBUG] [Thread-195187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:54:24.249 [DEBUG] [Thread-195187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:54:24.268 [INFO] [Thread-195187] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:54:24.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-15T00:54:24.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:54:25.094 [DEBUG] [Thread-195187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:54:25.094 [DEBUG] [Thread-195187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:54:25.112 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:54:25.113 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:54:25.142 [DEBUG] [Thread-195187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:54:25.143 [DEBUG] [Thread-195187] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:54:25.152 [DEBUG] [Thread-195187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:54:25.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:54:25.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T00:54:25.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:54:25.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:54:25.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:54:25.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:54:25.189 [DEBUG] [Thread-195187] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:54:36.274 [DEBUG] [Thread-195189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:54:41.483 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:54:51.326 [DEBUG] [Thread-195190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:54:55.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:54:55.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:54:55.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-15T00:54:57.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 54, 18), 2.52, 84.68, 0.0, 44.96, 5.02, 0, 1, 0, 2, 0, 0),)
2026-02-15T00:54:57.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:54:18
2026-02-15T00:54:57.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:54:57.821 [DEBUG] [Thread-195191] [transport.py] [_log()] starting thread (client mode): 0xa2d95f90
2026-02-15T00:54:57.822 [DEBUG] [Thread-195191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:54:57.842 [DEBUG] [Thread-195191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:54:57.842 [INFO] [Thread-195191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:54:57.845 [DEBUG] [Thread-195191] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:54:57.845 [DEBUG] [Thread-195191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:54:57.846 [DEBUG] [Thread-195191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:54:57.846 [DEBUG] [Thread-195191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:54:57.846 [DEBUG] [Thread-195191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:54:57.846 [DEBUG] [Thread-195191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:54:57.846 [DEBUG] [Thread-195191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:54:57.846 [DEBUG] [Thread-195191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:54:57.846 [DEBUG] [Thread-195191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:54:57.846 [DEBUG] [Thread-195191] [transport.py] [_log()] client lang: <none>
2026-02-15T00:54:57.846 [DEBUG] [Thread-195191] [transport.py] [_log()] server lang: <none>
2026-02-15T00:54:57.846 [DEBUG] [Thread-195191] [transport.py] [_log()] kex follows: False
2026-02-15T00:54:57.846 [DEBUG] [Thread-195191] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:54:57.846 [DEBUG] [Thread-195191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:54:57.846 [DEBUG] [Thread-195191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:54:57.846 [DEBUG] [Thread-195191] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:54:57.846 [DEBUG] [Thread-195191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:54:57.846 [DEBUG] [Thread-195191] [transport.py] [_log()] Compression: none
2026-02-15T00:54:57.846 [DEBUG] [Thread-195191] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:54:57.864 [DEBUG] [Thread-195191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:54:57.864 [DEBUG] [Thread-195191] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:54:57.865 [DEBUG] [Thread-195191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:54:57.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:54:57.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:54:57.867 [DEBUG] [Thread-195191] [transport.py] [_log()] userauth is OK
2026-02-15T00:54:57.867 [DEBUG] [Thread-195191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:54:57.868 [DEBUG] [Thread-195191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:54:57.868 [DEBUG] [Thread-195191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:54:57.868 [DEBUG] [Thread-195191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:54:57.887 [INFO] [Thread-195191] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:54:57.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:54:58.499 [DEBUG] [Thread-195191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:54:58.499 [DEBUG] [Thread-195191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:54:58.500 [DEBUG] [Thread-195191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:54:58.540 [DEBUG] [Thread-195191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:54:58.540 [DEBUG] [Thread-195191] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:54:58.544 [DEBUG] [Thread-195191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:54:58.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:54:58.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:54:58.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:54:58.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:54:58.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:54:58.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:54:58.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:54:58.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:54:58.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:54:58.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.954276 -999.00   +7.60  37.29     81   +4.70 1 1 2 2 1     0    0 2.08 -42.38 ZNESW 37.3 37.3 141.6 46.5 8.2 -24.0 8.0 -23.0 7.8 -22.1 8.2 -23.3
2026-02-15T00:54:58.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:54:58.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:54:58.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.954276
2026-02-15T00:54:58.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:54:58.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:54:58.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:54:58.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:54:58.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:54:58.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:54:18', tmtdew=2.52, humidity=84.68, cloud=0.0, wind=44.96, temperature=5.02, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:54:54', seeing=2.24, atlas_timestamp='2026-02-14T22:54:09.446', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, 0.0017500000000012506, -0.03275000000000006, -0.04150000000000098, 0.0019999999999988916, 0.047250000000000014, 0.016000000000000014, 0.03225000000000122, 0.06849999999999845, 0.040000000000000924, -0.014750000000001151, -0.006000000000000227, 0.051000000000000156, 0.02624999999999922, 0.04049999999999798, 0.032999999999999474, 0.06874999999999964, 0.06550000000000011, 0.02999999999999936, 0.02874999999999872, 0.034999999999998366, 0.0747499999999981, 0.00975000000000037, 0.045249999999999346, 0.06799999999999962, 0.016500000000000625, 0.028249999999999886, 0.026500000000000412, 0.06350000000000122, 0.015000000000000568, 0.09850000000000136, 0.11500000000000021, 0.04974999999999952], zp_timestamp='2026-02-14T22:53:00')
2026-02-15T00:54:58.571 [DEBUG] [Thread-195191] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:54:58.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-15T00:55:00.298 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:55:06.361 [DEBUG] [Thread-195194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:55:10.669 [DEBUG] [Thread-195195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:55:19.423 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:55:21.414 [DEBUG] [Thread-195196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:55:25.314 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:55:25.316 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:55:36.451 [DEBUG] [Thread-195197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:55:38.123 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:55:51.486 [DEBUG] [Thread-195198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:55:56.760 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:56:06.523 [DEBUG] [Thread-195199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:56:10.725 [DEBUG] [Thread-195200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:56:15.454 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:56:21.560 [DEBUG] [Thread-195201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:56:25.516 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:56:25.517 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:56:34.412 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:56:36.595 [DEBUG] [Thread-195202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:56:51.628 [DEBUG] [Thread-195203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:56:53.360 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:57:06.661 [DEBUG] [Thread-195204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:57:10.784 [DEBUG] [Thread-195205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:57:12.060 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:57:12.760 [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-15T00:57:21.700 [DEBUG] [Thread-195206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:57:25.718 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:57:25.719 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:57:30.727 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:57:36.738 [DEBUG] [Thread-195207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:57:42.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:57:42.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:57:42.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-15T00:57:44.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 57, 15), 2.46, 85.16, 0.0, 44.55, 5.0, 1, 1, 0, 2, 0, 0),)
2026-02-15T00:57:44.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:57:15
2026-02-15T00:57:45.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:57:45.275 [DEBUG] [Thread-195208] [transport.py] [_log()] starting thread (client mode): 0xa2d94a00
2026-02-15T00:57:45.275 [DEBUG] [Thread-195208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:57:45.296 [DEBUG] [Thread-195208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:57:45.296 [INFO] [Thread-195208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:57:45.299 [DEBUG] [Thread-195208] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:57:45.299 [DEBUG] [Thread-195208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:57:45.299 [DEBUG] [Thread-195208] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:57:45.299 [DEBUG] [Thread-195208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:57:45.299 [DEBUG] [Thread-195208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:57:45.299 [DEBUG] [Thread-195208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:57:45.299 [DEBUG] [Thread-195208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:57:45.299 [DEBUG] [Thread-195208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:57:45.299 [DEBUG] [Thread-195208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:57:45.299 [DEBUG] [Thread-195208] [transport.py] [_log()] client lang: <none>
2026-02-15T00:57:45.299 [DEBUG] [Thread-195208] [transport.py] [_log()] server lang: <none>
2026-02-15T00:57:45.300 [DEBUG] [Thread-195208] [transport.py] [_log()] kex follows: False
2026-02-15T00:57:45.300 [DEBUG] [Thread-195208] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:57:45.300 [DEBUG] [Thread-195208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:57:45.300 [DEBUG] [Thread-195208] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:57:45.300 [DEBUG] [Thread-195208] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:57:45.300 [DEBUG] [Thread-195208] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:57:45.300 [DEBUG] [Thread-195208] [transport.py] [_log()] Compression: none
2026-02-15T00:57:45.300 [DEBUG] [Thread-195208] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:57:45.317 [DEBUG] [Thread-195208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:57:45.317 [DEBUG] [Thread-195208] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:57:45.318 [DEBUG] [Thread-195208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:57:45.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:57:45.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:57:45.320 [DEBUG] [Thread-195208] [transport.py] [_log()] userauth is OK
2026-02-15T00:57:45.320 [DEBUG] [Thread-195208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:57:45.320 [DEBUG] [Thread-195208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:57:45.320 [DEBUG] [Thread-195208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:57:45.320 [DEBUG] [Thread-195208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:57:45.337 [INFO] [Thread-195208] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:57:45.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:57:46.106 [DEBUG] [Thread-195208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:57:46.106 [DEBUG] [Thread-195208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:57:46.107 [DEBUG] [Thread-195208] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:57:46.147 [DEBUG] [Thread-195208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:57:46.148 [DEBUG] [Thread-195208] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:57:46.151 [DEBUG] [Thread-195208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:57:46.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:57:46.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:57:46.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:57:46.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:57:46.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:57:46.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:57:46.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:57:46.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:57:46.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:57:46.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.956359 -999.00   +7.60  23.59     81   +4.70 1 1 1 2 1     0    0 2.13 -38.00 ZNESW 23.6 23.6 160.5 39.0 8.1 -24.2 7.9 -23.0 7.8 -22.1 8.1 -23.4
2026-02-15T00:57:46.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:57:46.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:57:46.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.956359
2026-02-15T00:57:46.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:57:46.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:57:46.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:57:46.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:57:46.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:57:46.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:57:15', tmtdew=2.46, humidity=85.16, cloud=0.0, wind=44.55, temperature=5.0, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:57:16', seeing=2.76, atlas_timestamp='2026-02-14T22:57:09.418', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.0012500000000006395, -0.04224999999999923, -0.022500000000000853, -0.014499999999999957, 0.02525000000000155, 0.04399999999999871, 0.05424999999999969, 0.043499999999998096, 0.030000000000001137, -0.023749999999999716, 0.009000000000000341, 0.058999999999999275, 0.030250000000000554, 0.0779999999999994, 0.023999999999999133, 0.07874999999999943, 0.04349999999999987, 0.03349999999999831, 0.04224999999999923, 0.07699999999999818, 0.08024999999999949, 0.021750000000000824, 0.06375000000000064, 0.06899999999999906, 0.038000000000000256, 0.040749999999999176, -0.00849999999999973, 0.07499999999999929, 0.021000000000000796, 0.11800000000000033, 0.14000000000000057, 0.07874999999999943], zp_timestamp='2026-02-14T22:55:00')
2026-02-15T00:57:46.180 [DEBUG] [Thread-195208] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:57:46.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-15T00:57:46.277 [DEBUG] [Thread-195211] [transport.py] [_log()] starting thread (client mode): 0xa2d1a740
2026-02-15T00:57:46.277 [DEBUG] [Thread-195211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:57:46.292 [DEBUG] [Thread-195211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:57:46.292 [INFO] [Thread-195211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:57:46.300 [DEBUG] [Thread-195211] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:57:46.300 [DEBUG] [Thread-195211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:57:46.300 [DEBUG] [Thread-195211] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:57:46.300 [DEBUG] [Thread-195211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:57:46.300 [DEBUG] [Thread-195211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:57:46.300 [DEBUG] [Thread-195211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:57:46.300 [DEBUG] [Thread-195211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:57:46.300 [DEBUG] [Thread-195211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:57:46.300 [DEBUG] [Thread-195211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:57:46.300 [DEBUG] [Thread-195211] [transport.py] [_log()] client lang: <none>
2026-02-15T00:57:46.300 [DEBUG] [Thread-195211] [transport.py] [_log()] server lang: <none>
2026-02-15T00:57:46.300 [DEBUG] [Thread-195211] [transport.py] [_log()] kex follows: False
2026-02-15T00:57:46.300 [DEBUG] [Thread-195211] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:57:46.300 [DEBUG] [Thread-195211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:57:46.301 [DEBUG] [Thread-195211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:57:46.301 [DEBUG] [Thread-195211] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:57:46.301 [DEBUG] [Thread-195211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:57:46.301 [DEBUG] [Thread-195211] [transport.py] [_log()] Compression: none
2026-02-15T00:57:46.301 [DEBUG] [Thread-195211] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:57:46.358 [DEBUG] [Thread-195211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:57:46.358 [DEBUG] [Thread-195211] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:57:46.359 [DEBUG] [Thread-195211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:57:46.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:57:46.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:57:46.416 [DEBUG] [Thread-195211] [transport.py] [_log()] userauth is OK
2026-02-15T00:57:46.416 [DEBUG] [Thread-195211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:57:46.416 [DEBUG] [Thread-195211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:57:46.416 [DEBUG] [Thread-195211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:57:46.416 [DEBUG] [Thread-195211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:57:46.430 [INFO] [Thread-195211] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:57:46.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-15T00:57:46.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:57:47.310 [DEBUG] [Thread-195211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:57:47.311 [DEBUG] [Thread-195211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:57:47.358 [DEBUG] [Thread-195211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:57:47.359 [DEBUG] [Thread-195211] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:57:47.368 [DEBUG] [Thread-195211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:57:47.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:57:47.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-15T00:57:47.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-15T00:57:47.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:57:47.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:57:47.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:57:47.405 [DEBUG] [Thread-195211] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:57:49.376 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:57:51.772 [DEBUG] [Thread-195213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:58:06.820 [DEBUG] [Thread-195214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:58:08.205 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:58:10.849 [DEBUG] [Thread-195215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:58:17.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:58:17.417 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:58:17.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-15T00:58:19.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 57, 51), 2.41, 85.22, 0.0, 44.71, 4.99, 1, 1, 0, 2, 0, 0),)
2026-02-15T00:58:19.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:57:51
2026-02-15T00:58:20.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:58:20.507 [DEBUG] [Thread-195216] [transport.py] [_log()] starting thread (client mode): 0xa2d69960
2026-02-15T00:58:20.507 [DEBUG] [Thread-195216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:58:20.527 [DEBUG] [Thread-195216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:58:20.527 [INFO] [Thread-195216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:58:20.530 [DEBUG] [Thread-195216] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:58:20.530 [DEBUG] [Thread-195216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:58:20.530 [DEBUG] [Thread-195216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:58:20.530 [DEBUG] [Thread-195216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:58:20.530 [DEBUG] [Thread-195216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:58:20.530 [DEBUG] [Thread-195216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:58:20.530 [DEBUG] [Thread-195216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:58:20.530 [DEBUG] [Thread-195216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:58:20.530 [DEBUG] [Thread-195216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:58:20.530 [DEBUG] [Thread-195216] [transport.py] [_log()] client lang: <none>
2026-02-15T00:58:20.530 [DEBUG] [Thread-195216] [transport.py] [_log()] server lang: <none>
2026-02-15T00:58:20.530 [DEBUG] [Thread-195216] [transport.py] [_log()] kex follows: False
2026-02-15T00:58:20.530 [DEBUG] [Thread-195216] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:58:20.530 [DEBUG] [Thread-195216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:58:20.530 [DEBUG] [Thread-195216] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:58:20.530 [DEBUG] [Thread-195216] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:58:20.530 [DEBUG] [Thread-195216] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:58:20.530 [DEBUG] [Thread-195216] [transport.py] [_log()] Compression: none
2026-02-15T00:58:20.530 [DEBUG] [Thread-195216] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:58:20.549 [DEBUG] [Thread-195216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:58:20.550 [DEBUG] [Thread-195216] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:58:20.550 [DEBUG] [Thread-195216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:58:20.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:58:20.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:58:20.593 [DEBUG] [Thread-195216] [transport.py] [_log()] userauth is OK
2026-02-15T00:58:20.593 [DEBUG] [Thread-195216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:58:20.594 [DEBUG] [Thread-195216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:58:20.594 [DEBUG] [Thread-195216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:58:20.594 [DEBUG] [Thread-195216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:58:20.619 [INFO] [Thread-195216] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:58:20.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:58:21.270 [DEBUG] [Thread-195216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:58:21.270 [DEBUG] [Thread-195216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:58:21.270 [DEBUG] [Thread-195216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:58:21.311 [DEBUG] [Thread-195216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:58:21.312 [DEBUG] [Thread-195216] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:58:21.315 [DEBUG] [Thread-195216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:58:21.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:58:21.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:58:21.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:58:21.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:58:21.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:58:21.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:58:21.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:58:21.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:58:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:58:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.956706 -999.00   +7.60  31.36     81   +4.70 1 1 2 2 1     0    0 2.12 -37.55 ZNESW 31.4 31.4 145.4 45.6 8.1 -24.1 8.0 -23.2 7.7 -22.1 8.1 -23.4
2026-02-15T00:58:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:58:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:58:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.956706
2026-02-15T00:58:21.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:58:21.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:58:21.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:58:21.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:58:21.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:58:21.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:57:51', tmtdew=2.41, humidity=85.22, cloud=0.0, wind=44.71, temperature=4.99, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:57:51', seeing=2.29, atlas_timestamp='2026-02-14T22:57:39.398', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.0012500000000006395, -0.04224999999999923, -0.022500000000000853, -0.014499999999999957, 0.02525000000000155, 0.04399999999999871, 0.05424999999999969, 0.043499999999998096, 0.030000000000001137, -0.023749999999999716, 0.009000000000000341, 0.058999999999999275, 0.030250000000000554, 0.0779999999999994, 0.023999999999999133, 0.07874999999999943, 0.04349999999999987, 0.03349999999999831, 0.04224999999999923, 0.07699999999999818, 0.08024999999999949, 0.021750000000000824, 0.06375000000000064, 0.06899999999999906, 0.038000000000000256, 0.040749999999999176, -0.00849999999999973, 0.07499999999999929, 0.021000000000000796, 0.11800000000000033, 0.14000000000000057, 0.07874999999999943], zp_timestamp='2026-02-14T22:55:00')
2026-02-15T00:58:21.342 [DEBUG] [Thread-195216] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:58:21.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-15T00:58:21.436 [DEBUG] [Thread-195219] [transport.py] [_log()] starting thread (client mode): 0xa2d6e1d0
2026-02-15T00:58:21.437 [DEBUG] [Thread-195219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:58:21.451 [DEBUG] [Thread-195219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:58:21.451 [INFO] [Thread-195219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:58:21.458 [DEBUG] [Thread-195219] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:58:21.459 [DEBUG] [Thread-195219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:58:21.459 [DEBUG] [Thread-195219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:58:21.459 [DEBUG] [Thread-195219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:58:21.459 [DEBUG] [Thread-195219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:58:21.459 [DEBUG] [Thread-195219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:58:21.459 [DEBUG] [Thread-195219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:58:21.460 [DEBUG] [Thread-195219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:58:21.460 [DEBUG] [Thread-195219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:58:21.460 [DEBUG] [Thread-195219] [transport.py] [_log()] client lang: <none>
2026-02-15T00:58:21.460 [DEBUG] [Thread-195219] [transport.py] [_log()] server lang: <none>
2026-02-15T00:58:21.460 [DEBUG] [Thread-195219] [transport.py] [_log()] kex follows: False
2026-02-15T00:58:21.460 [DEBUG] [Thread-195219] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:58:21.460 [DEBUG] [Thread-195219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:58:21.460 [DEBUG] [Thread-195219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:58:21.460 [DEBUG] [Thread-195219] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:58:21.461 [DEBUG] [Thread-195219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:58:21.461 [DEBUG] [Thread-195219] [transport.py] [_log()] Compression: none
2026-02-15T00:58:21.461 [DEBUG] [Thread-195219] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:58:21.518 [DEBUG] [Thread-195219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:58:21.519 [DEBUG] [Thread-195219] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:58:21.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:58:21.520 [DEBUG] [Thread-195219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:58:21.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:58:21.578 [DEBUG] [Thread-195219] [transport.py] [_log()] userauth is OK
2026-02-15T00:58:21.578 [DEBUG] [Thread-195219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:58:21.578 [DEBUG] [Thread-195219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:58:21.578 [DEBUG] [Thread-195219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:58:21.579 [DEBUG] [Thread-195219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:58:21.601 [INFO] [Thread-195219] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:58:21.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-15T00:58:21.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:58:21.858 [DEBUG] [Thread-195221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:58:22.417 [DEBUG] [Thread-195219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:58:22.417 [DEBUG] [Thread-195219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:58:22.465 [DEBUG] [Thread-195219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:58:22.466 [DEBUG] [Thread-195219] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:58:22.475 [DEBUG] [Thread-195219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:58:22.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:58:22.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-15T00:58:22.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-15T00:58:22.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:58:22.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:58:22.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:58:22.512 [DEBUG] [Thread-195219] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:58:25.917 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:58:25.919 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:58:26.850 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:58:36.923 [DEBUG] [Thread-195222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:58:45.504 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:58:51.958 [DEBUG] [Thread-195223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:58:52.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:58:52.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:58:52.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-15T00:58:54.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 58, 26), 2.4, 85.3, 0.0, 44.6, 5.0, 1, 1, 0, 2, 0, 0),)
2026-02-15T00:58:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:58:26
2026-02-15T00:58:54.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:58:54.886 [DEBUG] [Thread-195224] [transport.py] [_log()] starting thread (client mode): 0xa5741510
2026-02-15T00:58:54.886 [DEBUG] [Thread-195224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:58:54.907 [DEBUG] [Thread-195224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:58:54.908 [INFO] [Thread-195224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:58:54.909 [DEBUG] [Thread-195224] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:58:54.909 [DEBUG] [Thread-195224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:58:54.909 [DEBUG] [Thread-195224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:58:54.909 [DEBUG] [Thread-195224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:58:54.909 [DEBUG] [Thread-195224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:58:54.909 [DEBUG] [Thread-195224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:58:54.909 [DEBUG] [Thread-195224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:58:54.909 [DEBUG] [Thread-195224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:58:54.909 [DEBUG] [Thread-195224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:58:54.909 [DEBUG] [Thread-195224] [transport.py] [_log()] client lang: <none>
2026-02-15T00:58:54.909 [DEBUG] [Thread-195224] [transport.py] [_log()] server lang: <none>
2026-02-15T00:58:54.909 [DEBUG] [Thread-195224] [transport.py] [_log()] kex follows: False
2026-02-15T00:58:54.909 [DEBUG] [Thread-195224] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:58:54.909 [DEBUG] [Thread-195224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:58:54.909 [DEBUG] [Thread-195224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:58:54.909 [DEBUG] [Thread-195224] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:58:54.909 [DEBUG] [Thread-195224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:58:54.909 [DEBUG] [Thread-195224] [transport.py] [_log()] Compression: none
2026-02-15T00:58:54.909 [DEBUG] [Thread-195224] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:58:54.923 [DEBUG] [Thread-195224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:58:54.924 [DEBUG] [Thread-195224] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:58:54.924 [DEBUG] [Thread-195224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:58:54.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:58:54.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:58:54.927 [DEBUG] [Thread-195224] [transport.py] [_log()] userauth is OK
2026-02-15T00:58:54.927 [DEBUG] [Thread-195224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:58:54.927 [DEBUG] [Thread-195224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:58:54.927 [DEBUG] [Thread-195224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:58:54.927 [DEBUG] [Thread-195224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:58:54.946 [INFO] [Thread-195224] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:58:54.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:58:55.590 [DEBUG] [Thread-195224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:58:55.590 [DEBUG] [Thread-195224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:58:55.591 [DEBUG] [Thread-195224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:58:55.632 [DEBUG] [Thread-195224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:58:55.632 [DEBUG] [Thread-195224] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:58:55.635 [DEBUG] [Thread-195224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:58:55.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:58:55.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:58:55.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:58:55.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:58:55.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:58:55.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:58:55.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:58:55.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:58:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:58:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.957053 -999.00   +7.60  28.81     82   +4.70 1 1 1 2 1     0    0 2.07 -38.00 ZNESW 28.8 28.8 157.4 44.4 8.2 -24.3 7.9 -23.1 7.7 -22.1 8.1 -23.3
2026-02-15T00:58:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:58:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:58:55.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.957053
2026-02-15T00:58:55.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:58:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:58:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:58:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:58:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:58:55.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:58:26', tmtdew=2.4, humidity=85.3, cloud=0.0, wind=44.6, temperature=5.0, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:58:27', seeing=2.37, atlas_timestamp='2026-02-14T22:58:09.379', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.0012500000000006395, -0.04224999999999923, -0.022500000000000853, -0.014499999999999957, 0.02525000000000155, 0.04399999999999871, 0.05424999999999969, 0.043499999999998096, 0.030000000000001137, -0.023749999999999716, 0.009000000000000341, 0.058999999999999275, 0.030250000000000554, 0.0779999999999994, 0.023999999999999133, 0.07874999999999943, 0.04349999999999987, 0.03349999999999831, 0.04224999999999923, 0.07699999999999818, 0.08024999999999949, 0.021750000000000824, 0.06375000000000064, 0.06899999999999906, 0.038000000000000256, 0.040749999999999176, -0.00849999999999973, 0.07499999999999929, 0.021000000000000796, 0.11800000000000033, 0.14000000000000057, 0.07874999999999943], zp_timestamp='2026-02-14T22:55:00')
2026-02-15T00:58:55.663 [DEBUG] [Thread-195224] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:58:55.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-15T00:58:55.760 [DEBUG] [Thread-195227] [transport.py] [_log()] starting thread (client mode): 0xa5740b20
2026-02-15T00:58:55.760 [DEBUG] [Thread-195227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:58:55.774 [DEBUG] [Thread-195227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:58:55.775 [INFO] [Thread-195227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:58:55.782 [DEBUG] [Thread-195227] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:58:55.782 [DEBUG] [Thread-195227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:58:55.782 [DEBUG] [Thread-195227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:58:55.783 [DEBUG] [Thread-195227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:58:55.783 [DEBUG] [Thread-195227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:58:55.783 [DEBUG] [Thread-195227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:58:55.783 [DEBUG] [Thread-195227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:58:55.783 [DEBUG] [Thread-195227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:58:55.783 [DEBUG] [Thread-195227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:58:55.783 [DEBUG] [Thread-195227] [transport.py] [_log()] client lang: <none>
2026-02-15T00:58:55.783 [DEBUG] [Thread-195227] [transport.py] [_log()] server lang: <none>
2026-02-15T00:58:55.783 [DEBUG] [Thread-195227] [transport.py] [_log()] kex follows: False
2026-02-15T00:58:55.783 [DEBUG] [Thread-195227] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:58:55.783 [DEBUG] [Thread-195227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:58:55.783 [DEBUG] [Thread-195227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:58:55.783 [DEBUG] [Thread-195227] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:58:55.783 [DEBUG] [Thread-195227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:58:55.783 [DEBUG] [Thread-195227] [transport.py] [_log()] Compression: none
2026-02-15T00:58:55.783 [DEBUG] [Thread-195227] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:58:55.842 [DEBUG] [Thread-195227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:58:55.843 [DEBUG] [Thread-195227] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:58:55.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:58:55.844 [DEBUG] [Thread-195227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:58:55.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:58:55.900 [DEBUG] [Thread-195227] [transport.py] [_log()] userauth is OK
2026-02-15T00:58:55.900 [DEBUG] [Thread-195227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:58:55.901 [DEBUG] [Thread-195227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:58:55.901 [DEBUG] [Thread-195227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:58:55.901 [DEBUG] [Thread-195227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:58:55.919 [INFO] [Thread-195227] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:58:55.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-15T00:58:55.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:58:56.696 [DEBUG] [Thread-195227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:58:56.696 [DEBUG] [Thread-195227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:58:56.744 [DEBUG] [Thread-195227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:58:56.744 [DEBUG] [Thread-195227] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:58:56.753 [DEBUG] [Thread-195227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:58:56.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:58:56.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-15T00:58:56.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-15T00:58:56.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:58:56.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:58:56.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:58:56.790 [DEBUG] [Thread-195227] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:59:04.398 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:59:06.991 [DEBUG] [Thread-195229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:59:10.917 [DEBUG] [Thread-195230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:59:22.044 [DEBUG] [Thread-195231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:59:23.443 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:59:26.118 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:59:26.119 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:59:26.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T00:59:26.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T00:59:26.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T00:59:28.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 59, 2), 2.4, 85.3, 0.0, 46.95, 4.99, 1, 1, 0, 2, 1, 0),)
2026-02-15T00:59:28.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:59:02
2026-02-15T00:59:28.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T00:59:29.135 [DEBUG] [Thread-195232] [transport.py] [_log()] starting thread (client mode): 0xa57d7940
2026-02-15T00:59:29.135 [DEBUG] [Thread-195232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:59:29.155 [DEBUG] [Thread-195232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T00:59:29.155 [INFO] [Thread-195232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T00:59:29.158 [DEBUG] [Thread-195232] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:59:29.159 [DEBUG] [Thread-195232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T00:59:29.159 [DEBUG] [Thread-195232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:59:29.159 [DEBUG] [Thread-195232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:59:29.159 [DEBUG] [Thread-195232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:59:29.159 [DEBUG] [Thread-195232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:59:29.159 [DEBUG] [Thread-195232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:59:29.159 [DEBUG] [Thread-195232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:59:29.159 [DEBUG] [Thread-195232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:59:29.159 [DEBUG] [Thread-195232] [transport.py] [_log()] client lang: <none>
2026-02-15T00:59:29.159 [DEBUG] [Thread-195232] [transport.py] [_log()] server lang: <none>
2026-02-15T00:59:29.159 [DEBUG] [Thread-195232] [transport.py] [_log()] kex follows: False
2026-02-15T00:59:29.159 [DEBUG] [Thread-195232] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:59:29.159 [DEBUG] [Thread-195232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:59:29.159 [DEBUG] [Thread-195232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:59:29.159 [DEBUG] [Thread-195232] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:59:29.159 [DEBUG] [Thread-195232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:59:29.159 [DEBUG] [Thread-195232] [transport.py] [_log()] Compression: none
2026-02-15T00:59:29.159 [DEBUG] [Thread-195232] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:59:29.178 [DEBUG] [Thread-195232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:59:29.179 [DEBUG] [Thread-195232] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:59:29.179 [DEBUG] [Thread-195232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T00:59:29.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T00:59:29.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:59:29.221 [DEBUG] [Thread-195232] [transport.py] [_log()] userauth is OK
2026-02-15T00:59:29.221 [DEBUG] [Thread-195232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:59:29.221 [DEBUG] [Thread-195232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:59:29.221 [DEBUG] [Thread-195232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T00:59:29.221 [DEBUG] [Thread-195232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:59:29.260 [INFO] [Thread-195232] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:59:29.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:59:29.911 [DEBUG] [Thread-195232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:59:29.911 [DEBUG] [Thread-195232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:59:29.912 [DEBUG] [Thread-195232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T00:59:29.952 [DEBUG] [Thread-195232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:59:29.952 [DEBUG] [Thread-195232] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:59:29.956 [DEBUG] [Thread-195232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:59:29.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:59:29.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T00:59:29.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T00:59:29.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T00:59:29.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:59:29.982 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T00:59:29.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:59:29.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:59:29.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T00:59:29.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.957401 -999.00   +7.60  35.06     82   +4.70 1 1 2 2 1     0    0 1.97 -38.34 ZNESW 35.1 35.1 155.2 44.2 8.1 -24.1 7.9 -23.2 7.7 -22.2 8.1 -23.4
2026-02-15T00:59:29.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T00:59:29.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T00:59:29.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.957401
2026-02-15T00:59:29.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T00:59:29.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T00:59:29.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T00:59:29.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T00:59:29.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T00:59:29.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:59:02', tmtdew=2.4, humidity=85.3, cloud=0.0, wind=46.95, temperature=4.99, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T00:59:02', seeing=2.01, atlas_timestamp='2026-02-14T22:58:39.446', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.0012500000000006395, -0.04224999999999923, -0.022500000000000853, -0.014499999999999957, 0.02525000000000155, 0.04399999999999871, 0.05424999999999969, 0.043499999999998096, 0.030000000000001137, -0.023749999999999716, 0.009000000000000341, 0.058999999999999275, 0.030250000000000554, 0.0779999999999994, 0.023999999999999133, 0.07874999999999943, 0.04349999999999987, 0.03349999999999831, 0.04224999999999923, 0.07699999999999818, 0.08024999999999949, 0.021750000000000824, 0.06375000000000064, 0.06899999999999906, 0.038000000000000256, 0.040749999999999176, -0.00849999999999973, 0.07499999999999929, 0.021000000000000796, 0.11800000000000033, 0.14000000000000057, 0.07874999999999943], zp_timestamp='2026-02-14T22:55:00')
2026-02-15T00:59:29.986 [DEBUG] [Thread-195232] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:59:30.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-15T00:59:30.082 [DEBUG] [Thread-195235] [transport.py] [_log()] starting thread (client mode): 0xa5742a70
2026-02-15T00:59:30.082 [DEBUG] [Thread-195235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T00:59:30.098 [DEBUG] [Thread-195235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T00:59:30.098 [INFO] [Thread-195235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T00:59:30.106 [DEBUG] [Thread-195235] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T00:59:30.106 [DEBUG] [Thread-195235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T00:59:30.106 [DEBUG] [Thread-195235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T00:59:30.106 [DEBUG] [Thread-195235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:59:30.106 [DEBUG] [Thread-195235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T00:59:30.106 [DEBUG] [Thread-195235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:59:30.106 [DEBUG] [Thread-195235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T00:59:30.106 [DEBUG] [Thread-195235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T00:59:30.106 [DEBUG] [Thread-195235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T00:59:30.106 [DEBUG] [Thread-195235] [transport.py] [_log()] client lang: <none>
2026-02-15T00:59:30.106 [DEBUG] [Thread-195235] [transport.py] [_log()] server lang: <none>
2026-02-15T00:59:30.106 [DEBUG] [Thread-195235] [transport.py] [_log()] kex follows: False
2026-02-15T00:59:30.107 [DEBUG] [Thread-195235] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T00:59:30.107 [DEBUG] [Thread-195235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T00:59:30.107 [DEBUG] [Thread-195235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T00:59:30.107 [DEBUG] [Thread-195235] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T00:59:30.107 [DEBUG] [Thread-195235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T00:59:30.107 [DEBUG] [Thread-195235] [transport.py] [_log()] Compression: none
2026-02-15T00:59:30.107 [DEBUG] [Thread-195235] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T00:59:30.163 [DEBUG] [Thread-195235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T00:59:30.164 [DEBUG] [Thread-195235] [transport.py] [_log()] Switch to new keys ...
2026-02-15T00:59:30.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T00:59:30.165 [DEBUG] [Thread-195235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T00:59:30.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T00:59:30.219 [DEBUG] [Thread-195235] [transport.py] [_log()] userauth is OK
2026-02-15T00:59:30.219 [DEBUG] [Thread-195235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T00:59:30.219 [DEBUG] [Thread-195235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T00:59:30.219 [DEBUG] [Thread-195235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T00:59:30.219 [DEBUG] [Thread-195235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T00:59:30.233 [INFO] [Thread-195235] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T00:59:30.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T00:59:30.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T00:59:31.067 [DEBUG] [Thread-195235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T00:59:31.068 [DEBUG] [Thread-195235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T00:59:31.115 [DEBUG] [Thread-195235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T00:59:31.115 [DEBUG] [Thread-195235] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T00:59:31.125 [DEBUG] [Thread-195235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T00:59:31.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T00:59:31.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-15T00:59:31.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T00:59:31.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T00:59:31.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T00:59:31.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T00:59:31.162 [DEBUG] [Thread-195235] [transport.py] [_log()] EOF in transport thread
2026-02-15T00:59:37.080 [DEBUG] [Thread-195237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:59:42.203 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T00:59:52.133 [DEBUG] [Thread-195238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:00:00.852 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:00:01.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:00:01.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:00:01.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-15T01:00:03.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 0, 59, 37), 1.89, 88.5, 0.0, 41.99, 3.83, 1, 1, 0, 2, 0, 0),)
2026-02-15T01:00:03.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 00:59:37
2026-02-15T01:00:03.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:00:03.795 [DEBUG] [Thread-195239] [transport.py] [_log()] starting thread (client mode): 0xa57d50c0
2026-02-15T01:00:03.795 [DEBUG] [Thread-195239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:00:03.815 [DEBUG] [Thread-195239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:00:03.815 [INFO] [Thread-195239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:00:03.818 [DEBUG] [Thread-195239] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:00:03.818 [DEBUG] [Thread-195239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:00:03.818 [DEBUG] [Thread-195239] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:00:03.818 [DEBUG] [Thread-195239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:00:03.818 [DEBUG] [Thread-195239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:00:03.819 [DEBUG] [Thread-195239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:00:03.819 [DEBUG] [Thread-195239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:00:03.819 [DEBUG] [Thread-195239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:00:03.819 [DEBUG] [Thread-195239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:00:03.819 [DEBUG] [Thread-195239] [transport.py] [_log()] client lang: <none>
2026-02-15T01:00:03.819 [DEBUG] [Thread-195239] [transport.py] [_log()] server lang: <none>
2026-02-15T01:00:03.819 [DEBUG] [Thread-195239] [transport.py] [_log()] kex follows: False
2026-02-15T01:00:03.819 [DEBUG] [Thread-195239] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:00:03.819 [DEBUG] [Thread-195239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:00:03.819 [DEBUG] [Thread-195239] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:00:03.819 [DEBUG] [Thread-195239] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:00:03.819 [DEBUG] [Thread-195239] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:00:03.819 [DEBUG] [Thread-195239] [transport.py] [_log()] Compression: none
2026-02-15T01:00:03.819 [DEBUG] [Thread-195239] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:00:03.827 [DEBUG] [Thread-195239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:00:03.827 [DEBUG] [Thread-195239] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:00:03.827 [DEBUG] [Thread-195239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:00:03.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:00:03.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:00:03.829 [DEBUG] [Thread-195239] [transport.py] [_log()] userauth is OK
2026-02-15T01:00:03.829 [DEBUG] [Thread-195239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:00:03.829 [DEBUG] [Thread-195239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:00:03.829 [DEBUG] [Thread-195239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:00:03.829 [DEBUG] [Thread-195239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:00:03.845 [INFO] [Thread-195239] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:00:03.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:00:07.167 [DEBUG] [Thread-195241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:00:10.994 [DEBUG] [Thread-195242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:00:17.882 [DEBUG] [Thread-195239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:00:17.882 [DEBUG] [Thread-195239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:00:17.883 [DEBUG] [Thread-195239] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:00:17.922 [DEBUG] [Thread-195239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:00:17.922 [DEBUG] [Thread-195239] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:00:17.925 [DEBUG] [Thread-195239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:00:18.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:00:18.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:00:18.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:00:18.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:00:18.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:00:18.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:00:18.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:00:18.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:00:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:00:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.958095 -999.00   +7.60  39.03     82   +4.70 1 1 2 2 1     0    0 2.09 -35.42 ZNESW 39.0 39.0 142.2 47.1 8.1 -24.1 7.9 -23.1 7.7 -22.2 8.1 -23.4
2026-02-15T01:00:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:00:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:00:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.958095
2026-02-15T01:00:18.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:00:18.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:00:18.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:00:18.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:00:18.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:00:18.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T00:59:37', tmtdew=1.89, humidity=88.5, cloud=0.0, wind=41.99, temperature=3.83, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T00:59:37', seeing=2.47, atlas_timestamp='2026-02-14T22:59:39.408', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.0012500000000006395, -0.04224999999999923, -0.022500000000000853, -0.014499999999999957, 0.02525000000000155, 0.04399999999999871, 0.05424999999999969, 0.043499999999998096, 0.030000000000001137, -0.023749999999999716, 0.009000000000000341, 0.058999999999999275, 0.030250000000000554, 0.0779999999999994, 0.023999999999999133, 0.07874999999999943, 0.04349999999999987, 0.03349999999999831, 0.04224999999999923, 0.07699999999999818, 0.08024999999999949, 0.021750000000000824, 0.06375000000000064, 0.06899999999999906, 0.038000000000000256, 0.040749999999999176, -0.00849999999999973, 0.07499999999999929, 0.021000000000000796, 0.11800000000000033, 0.14000000000000057, 0.07874999999999943], zp_timestamp='2026-02-14T22:55:00')
2026-02-15T01:00:18.069 [DEBUG] [Thread-195239] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:00:18.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-15T01:00:18.167 [DEBUG] [Thread-195244] [transport.py] [_log()] starting thread (client mode): 0xa2d11630
2026-02-15T01:00:18.167 [DEBUG] [Thread-195244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:00:18.182 [DEBUG] [Thread-195244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:00:18.182 [INFO] [Thread-195244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:00:18.189 [DEBUG] [Thread-195244] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:00:18.189 [DEBUG] [Thread-195244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:00:18.190 [DEBUG] [Thread-195244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:00:18.190 [DEBUG] [Thread-195244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:00:18.190 [DEBUG] [Thread-195244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:00:18.190 [DEBUG] [Thread-195244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:00:18.190 [DEBUG] [Thread-195244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:00:18.190 [DEBUG] [Thread-195244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:00:18.190 [DEBUG] [Thread-195244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:00:18.190 [DEBUG] [Thread-195244] [transport.py] [_log()] client lang: <none>
2026-02-15T01:00:18.190 [DEBUG] [Thread-195244] [transport.py] [_log()] server lang: <none>
2026-02-15T01:00:18.191 [DEBUG] [Thread-195244] [transport.py] [_log()] kex follows: False
2026-02-15T01:00:18.191 [DEBUG] [Thread-195244] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:00:18.191 [DEBUG] [Thread-195244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:00:18.191 [DEBUG] [Thread-195244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:00:18.191 [DEBUG] [Thread-195244] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:00:18.191 [DEBUG] [Thread-195244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:00:18.191 [DEBUG] [Thread-195244] [transport.py] [_log()] Compression: none
2026-02-15T01:00:18.192 [DEBUG] [Thread-195244] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:00:18.249 [DEBUG] [Thread-195244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:00:18.250 [DEBUG] [Thread-195244] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:00:18.250 [DEBUG] [Thread-195244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:00:18.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:00:18.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:00:18.311 [DEBUG] [Thread-195244] [transport.py] [_log()] userauth is OK
2026-02-15T01:00:18.311 [DEBUG] [Thread-195244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:00:18.311 [DEBUG] [Thread-195244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:00:18.311 [DEBUG] [Thread-195244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:00:18.312 [DEBUG] [Thread-195244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:00:18.331 [INFO] [Thread-195244] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:00:18.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-15T01:00:18.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:00:19.121 [DEBUG] [Thread-195244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:00:19.121 [DEBUG] [Thread-195244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:00:19.171 [DEBUG] [Thread-195244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:00:19.172 [DEBUG] [Thread-195244] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:00:19.183 [DEBUG] [Thread-195244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:00:19.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:00:19.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:00:19.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:00:19.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:00:19.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:00:19.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:00:19.221 [DEBUG] [Thread-195244] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:00:19.511 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:00:22.207 [DEBUG] [Thread-195246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:00:26.321 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:00:26.323 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:00:37.266 [DEBUG] [Thread-195247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:00:38.184 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:00:49.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:00:49.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:00:49.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:00:51.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 0, 12), 2.36, 85.33, 0.0, 43.85, 5.0, 1, 1, 0, 2, 0, 0),)
2026-02-15T01:00:51.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:00:12
2026-02-15T01:00:51.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:00:51.696 [DEBUG] [Thread-195248] [transport.py] [_log()] starting thread (client mode): 0xa2d00e20
2026-02-15T01:00:51.696 [DEBUG] [Thread-195248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:00:51.715 [DEBUG] [Thread-195248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:00:51.715 [INFO] [Thread-195248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:00:51.718 [DEBUG] [Thread-195248] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:00:51.718 [DEBUG] [Thread-195248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:00:51.719 [DEBUG] [Thread-195248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:00:51.719 [DEBUG] [Thread-195248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:00:51.719 [DEBUG] [Thread-195248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:00:51.719 [DEBUG] [Thread-195248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:00:51.719 [DEBUG] [Thread-195248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:00:51.719 [DEBUG] [Thread-195248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:00:51.719 [DEBUG] [Thread-195248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:00:51.719 [DEBUG] [Thread-195248] [transport.py] [_log()] client lang: <none>
2026-02-15T01:00:51.719 [DEBUG] [Thread-195248] [transport.py] [_log()] server lang: <none>
2026-02-15T01:00:51.719 [DEBUG] [Thread-195248] [transport.py] [_log()] kex follows: False
2026-02-15T01:00:51.719 [DEBUG] [Thread-195248] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:00:51.719 [DEBUG] [Thread-195248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:00:51.719 [DEBUG] [Thread-195248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:00:51.719 [DEBUG] [Thread-195248] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:00:51.719 [DEBUG] [Thread-195248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:00:51.719 [DEBUG] [Thread-195248] [transport.py] [_log()] Compression: none
2026-02-15T01:00:51.719 [DEBUG] [Thread-195248] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:00:51.735 [DEBUG] [Thread-195248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:00:51.735 [DEBUG] [Thread-195248] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:00:51.735 [DEBUG] [Thread-195248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:00:51.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:00:51.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:00:51.736 [DEBUG] [Thread-195248] [transport.py] [_log()] userauth is OK
2026-02-15T01:00:51.736 [DEBUG] [Thread-195248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:00:51.736 [DEBUG] [Thread-195248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:00:51.736 [DEBUG] [Thread-195248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:00:51.736 [DEBUG] [Thread-195248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:00:51.745 [INFO] [Thread-195248] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:00:51.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:00:52.304 [DEBUG] [Thread-195250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:00:52.357 [DEBUG] [Thread-195248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:00:52.357 [DEBUG] [Thread-195248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:00:52.357 [DEBUG] [Thread-195248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:00:52.398 [DEBUG] [Thread-195248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:00:52.398 [DEBUG] [Thread-195248] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:00:52.400 [DEBUG] [Thread-195248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:00:52.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:00:52.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:00:52.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:00:52.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:00:52.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:00:52.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:00:52.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:00:52.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:00:52.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:00:52.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.958442 -999.00   +7.60  25.75     82   +4.70 1 1 1 2 1     0    0 2.07 -35.03 ZNESW 25.8 25.8 155.4 40.8 8.1 -24.2 7.9 -23.1 7.7 -22.1 8.1 -23.4
2026-02-15T01:00:52.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:00:52.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:00:52.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.958442
2026-02-15T01:00:52.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:00:52.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:00:52.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:00:52.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:00:52.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:00:52.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:00:12', tmtdew=2.36, humidity=85.33, cloud=0.0, wind=43.85, temperature=5.0, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:00:48', seeing=2.12, atlas_timestamp='2026-02-14T23:00:09.389', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.0012500000000006395, -0.04224999999999923, -0.022500000000000853, -0.014499999999999957, 0.02525000000000155, 0.04399999999999871, 0.05424999999999969, 0.043499999999998096, 0.030000000000001137, -0.023749999999999716, 0.009000000000000341, 0.058999999999999275, 0.030250000000000554, 0.0779999999999994, 0.023999999999999133, 0.07874999999999943, 0.04349999999999987, 0.03349999999999831, 0.04224999999999923, 0.07699999999999818, 0.08024999999999949, 0.021750000000000824, 0.06375000000000064, 0.06899999999999906, 0.038000000000000256, 0.040749999999999176, -0.00849999999999973, 0.07499999999999929, 0.021000000000000796, 0.11800000000000033, 0.14000000000000057, 0.07874999999999943], zp_timestamp='2026-02-14T22:59:00')
2026-02-15T01:00:52.419 [DEBUG] [Thread-195248] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:00:52.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T01:00:52.506 [DEBUG] [Thread-195252] [transport.py] [_log()] starting thread (client mode): 0xa57d5540
2026-02-15T01:00:52.506 [DEBUG] [Thread-195252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:00:52.520 [DEBUG] [Thread-195252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:00:52.520 [INFO] [Thread-195252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:00:52.528 [DEBUG] [Thread-195252] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:00:52.529 [DEBUG] [Thread-195252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:00:52.529 [DEBUG] [Thread-195252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:00:52.529 [DEBUG] [Thread-195252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:00:52.529 [DEBUG] [Thread-195252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:00:52.529 [DEBUG] [Thread-195252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:00:52.529 [DEBUG] [Thread-195252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:00:52.529 [DEBUG] [Thread-195252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:00:52.529 [DEBUG] [Thread-195252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:00:52.529 [DEBUG] [Thread-195252] [transport.py] [_log()] client lang: <none>
2026-02-15T01:00:52.529 [DEBUG] [Thread-195252] [transport.py] [_log()] server lang: <none>
2026-02-15T01:00:52.529 [DEBUG] [Thread-195252] [transport.py] [_log()] kex follows: False
2026-02-15T01:00:52.529 [DEBUG] [Thread-195252] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:00:52.529 [DEBUG] [Thread-195252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:00:52.529 [DEBUG] [Thread-195252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:00:52.529 [DEBUG] [Thread-195252] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:00:52.529 [DEBUG] [Thread-195252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:00:52.529 [DEBUG] [Thread-195252] [transport.py] [_log()] Compression: none
2026-02-15T01:00:52.530 [DEBUG] [Thread-195252] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:00:52.589 [DEBUG] [Thread-195252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:00:52.590 [DEBUG] [Thread-195252] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:00:52.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:00:52.591 [DEBUG] [Thread-195252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:00:52.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:00:52.645 [DEBUG] [Thread-195252] [transport.py] [_log()] userauth is OK
2026-02-15T01:00:52.645 [DEBUG] [Thread-195252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:00:52.646 [DEBUG] [Thread-195252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:00:52.646 [DEBUG] [Thread-195252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:00:52.646 [DEBUG] [Thread-195252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:00:52.665 [INFO] [Thread-195252] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:00:52.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-15T01:00:52.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:00:53.496 [DEBUG] [Thread-195252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:00:53.497 [DEBUG] [Thread-195252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:00:53.544 [DEBUG] [Thread-195252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:00:53.545 [DEBUG] [Thread-195252] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:00:53.554 [DEBUG] [Thread-195252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:00:53.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:00:53.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-15T01:00:53.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-15T01:00:53.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:00:53.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:00:53.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:00:53.591 [DEBUG] [Thread-195252] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:00:56.818 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:01:07.342 [DEBUG] [Thread-195254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:01:11.064 [DEBUG] [Thread-195255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:01:15.478 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:01:22.393 [DEBUG] [Thread-195256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:01:23.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:01:23.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:01:23.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-15T01:01:25.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 0, 47), 2.35, 85.71, 0.0, 41.13, 4.94, 1, 1, 0, 2, 0, 0),)
2026-02-15T01:01:25.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:00:47
2026-02-15T01:01:25.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:01:26.057 [DEBUG] [Thread-195257] [transport.py] [_log()] starting thread (client mode): 0xa2d84c10
2026-02-15T01:01:26.057 [DEBUG] [Thread-195257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:01:26.072 [DEBUG] [Thread-195257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:01:26.072 [INFO] [Thread-195257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:01:26.075 [DEBUG] [Thread-195257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:01:26.075 [DEBUG] [Thread-195257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:01:26.075 [DEBUG] [Thread-195257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:01:26.076 [DEBUG] [Thread-195257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:01:26.076 [DEBUG] [Thread-195257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:01:26.076 [DEBUG] [Thread-195257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:01:26.076 [DEBUG] [Thread-195257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:01:26.076 [DEBUG] [Thread-195257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:01:26.076 [DEBUG] [Thread-195257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:01:26.076 [DEBUG] [Thread-195257] [transport.py] [_log()] client lang: <none>
2026-02-15T01:01:26.076 [DEBUG] [Thread-195257] [transport.py] [_log()] server lang: <none>
2026-02-15T01:01:26.076 [DEBUG] [Thread-195257] [transport.py] [_log()] kex follows: False
2026-02-15T01:01:26.076 [DEBUG] [Thread-195257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:01:26.076 [DEBUG] [Thread-195257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:01:26.076 [DEBUG] [Thread-195257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:01:26.076 [DEBUG] [Thread-195257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:01:26.076 [DEBUG] [Thread-195257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:01:26.076 [DEBUG] [Thread-195257] [transport.py] [_log()] Compression: none
2026-02-15T01:01:26.076 [DEBUG] [Thread-195257] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:01:26.084 [DEBUG] [Thread-195257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:01:26.084 [DEBUG] [Thread-195257] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:01:26.084 [DEBUG] [Thread-195257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:01:26.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:01:26.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:01:26.086 [DEBUG] [Thread-195257] [transport.py] [_log()] userauth is OK
2026-02-15T01:01:26.086 [DEBUG] [Thread-195257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:01:26.086 [DEBUG] [Thread-195257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:01:26.086 [DEBUG] [Thread-195257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:01:26.086 [DEBUG] [Thread-195257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:01:26.101 [INFO] [Thread-195257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:01:26.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:01:26.521 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:01:26.523 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:01:26.734 [DEBUG] [Thread-195257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:01:26.734 [DEBUG] [Thread-195257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:01:26.734 [DEBUG] [Thread-195257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:01:26.775 [DEBUG] [Thread-195257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:01:26.776 [DEBUG] [Thread-195257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:01:26.779 [DEBUG] [Thread-195257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:01:26.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:01:26.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:01:26.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:01:26.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:01:26.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:01:26.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:01:26.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:01:26.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:01:26.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:01:26.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.958790 -999.00   +7.50  27.01     82   +4.70 1 1 1 2 1     0    0 2.08 -33.80 ZNESW 27.0 27.0 149.2 41.3 8.1 -24.1 7.9 -23.2 7.7 -22.1 8.0 -23.2
2026-02-15T01:01:26.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:01:26.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:01:26.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.958790
2026-02-15T01:01:26.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:01:26.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:01:26.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:01:26.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:01:26.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:01:26.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:00:47', tmtdew=2.35, humidity=85.71, cloud=0.0, wind=41.13, temperature=4.94, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:01:23', seeing=2.61, atlas_timestamp='2026-02-14T23:00:39.456', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.0012500000000006395, -0.04224999999999923, -0.022500000000000853, -0.014499999999999957, 0.02525000000000155, 0.04399999999999871, 0.05424999999999969, 0.043499999999998096, 0.030000000000001137, -0.023749999999999716, 0.009000000000000341, 0.058999999999999275, 0.030250000000000554, 0.0779999999999994, 0.023999999999999133, 0.07874999999999943, 0.04349999999999987, 0.03349999999999831, 0.04224999999999923, 0.07699999999999818, 0.08024999999999949, 0.021750000000000824, 0.06375000000000064, 0.06899999999999906, 0.038000000000000256, 0.040749999999999176, -0.00849999999999973, 0.07499999999999929, 0.021000000000000796, 0.11800000000000033, 0.14000000000000057, 0.07874999999999943], zp_timestamp='2026-02-14T22:59:00')
2026-02-15T01:01:26.806 [DEBUG] [Thread-195257] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:01:26.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-15T01:01:26.901 [DEBUG] [Thread-195260] [transport.py] [_log()] starting thread (client mode): 0xa57d49a0
2026-02-15T01:01:26.901 [DEBUG] [Thread-195260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:01:26.918 [DEBUG] [Thread-195260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:01:26.918 [INFO] [Thread-195260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:01:26.926 [DEBUG] [Thread-195260] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:01:26.926 [DEBUG] [Thread-195260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:01:26.926 [DEBUG] [Thread-195260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:01:26.927 [DEBUG] [Thread-195260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:01:26.927 [DEBUG] [Thread-195260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:01:26.927 [DEBUG] [Thread-195260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:01:26.927 [DEBUG] [Thread-195260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:01:26.927 [DEBUG] [Thread-195260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:01:26.927 [DEBUG] [Thread-195260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:01:26.927 [DEBUG] [Thread-195260] [transport.py] [_log()] client lang: <none>
2026-02-15T01:01:26.927 [DEBUG] [Thread-195260] [transport.py] [_log()] server lang: <none>
2026-02-15T01:01:26.927 [DEBUG] [Thread-195260] [transport.py] [_log()] kex follows: False
2026-02-15T01:01:26.928 [DEBUG] [Thread-195260] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:01:26.928 [DEBUG] [Thread-195260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:01:26.928 [DEBUG] [Thread-195260] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:01:26.928 [DEBUG] [Thread-195260] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:01:26.928 [DEBUG] [Thread-195260] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:01:26.928 [DEBUG] [Thread-195260] [transport.py] [_log()] Compression: none
2026-02-15T01:01:26.928 [DEBUG] [Thread-195260] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:01:26.986 [DEBUG] [Thread-195260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:01:26.987 [DEBUG] [Thread-195260] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:01:26.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:01:26.988 [DEBUG] [Thread-195260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:01:26.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:01:27.042 [DEBUG] [Thread-195260] [transport.py] [_log()] userauth is OK
2026-02-15T01:01:27.042 [DEBUG] [Thread-195260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:01:27.043 [DEBUG] [Thread-195260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:01:27.043 [DEBUG] [Thread-195260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:01:27.043 [DEBUG] [Thread-195260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:01:27.062 [INFO] [Thread-195260] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:01:27.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-15T01:01:27.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:01:27.859 [DEBUG] [Thread-195260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:01:27.860 [DEBUG] [Thread-195260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:01:27.908 [DEBUG] [Thread-195260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:01:27.908 [DEBUG] [Thread-195260] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:01:27.918 [DEBUG] [Thread-195260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:01:27.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:01:27.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-15T01:01:27.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-15T01:01:27.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:01:27.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:01:27.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:01:27.954 [DEBUG] [Thread-195260] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:01:34.320 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:01:37.431 [DEBUG] [Thread-195262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:01:52.482 [DEBUG] [Thread-195263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:01:53.038 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:01:57.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:01:57.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:01:57.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-15T01:02:00.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 1, 23), 2.35, 85.72, 0.0, 41.36, 4.94, 1, 1, 0, 2, 0, 0),)
2026-02-15T01:02:00.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:01:23
2026-02-15T01:02:00.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:02:00.562 [DEBUG] [Thread-195264] [transport.py] [_log()] starting thread (client mode): 0xa2d7bd30
2026-02-15T01:02:00.563 [DEBUG] [Thread-195264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:02:00.582 [DEBUG] [Thread-195264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:02:00.582 [INFO] [Thread-195264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:02:00.586 [DEBUG] [Thread-195264] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:02:00.586 [DEBUG] [Thread-195264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:02:00.586 [DEBUG] [Thread-195264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:02:00.586 [DEBUG] [Thread-195264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:02:00.586 [DEBUG] [Thread-195264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:02:00.586 [DEBUG] [Thread-195264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:02:00.586 [DEBUG] [Thread-195264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:02:00.586 [DEBUG] [Thread-195264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:02:00.586 [DEBUG] [Thread-195264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:02:00.586 [DEBUG] [Thread-195264] [transport.py] [_log()] client lang: <none>
2026-02-15T01:02:00.586 [DEBUG] [Thread-195264] [transport.py] [_log()] server lang: <none>
2026-02-15T01:02:00.586 [DEBUG] [Thread-195264] [transport.py] [_log()] kex follows: False
2026-02-15T01:02:00.586 [DEBUG] [Thread-195264] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:02:00.586 [DEBUG] [Thread-195264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:02:00.586 [DEBUG] [Thread-195264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:02:00.586 [DEBUG] [Thread-195264] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:02:00.586 [DEBUG] [Thread-195264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:02:00.586 [DEBUG] [Thread-195264] [transport.py] [_log()] Compression: none
2026-02-15T01:02:00.586 [DEBUG] [Thread-195264] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:02:00.603 [DEBUG] [Thread-195264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:02:00.604 [DEBUG] [Thread-195264] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:02:00.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:02:00.605 [DEBUG] [Thread-195264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:02:00.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:02:00.607 [DEBUG] [Thread-195264] [transport.py] [_log()] userauth is OK
2026-02-15T01:02:00.608 [DEBUG] [Thread-195264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:02:00.608 [DEBUG] [Thread-195264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:02:00.608 [DEBUG] [Thread-195264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:02:00.608 [DEBUG] [Thread-195264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:02:00.632 [INFO] [Thread-195264] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:02:00.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:02:01.257 [DEBUG] [Thread-195264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:02:01.257 [DEBUG] [Thread-195264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:02:01.257 [DEBUG] [Thread-195264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:02:01.298 [DEBUG] [Thread-195264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:02:01.299 [DEBUG] [Thread-195264] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:02:01.302 [DEBUG] [Thread-195264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:02:01.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:02:01.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:02:01.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:02:01.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:02:01.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:02:01.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:02:01.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:02:01.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:02:01.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:02:01.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.959137 -999.00   +7.50  32.77     82   +4.70 1 1 2 2 1     0    0 2.18 -31.26 ZNESW 32.8 32.8 142.3 42.7 8.1 -24.1 7.8 -23.1 7.7 -22.1 8.1 -23.3
2026-02-15T01:02:01.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:02:01.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:02:01.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.959137
2026-02-15T01:02:01.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:02:01.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:02:01.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:02:01.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:02:01.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:02:01.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:01:23', tmtdew=2.35, humidity=85.72, cloud=0.0, wind=41.36, temperature=4.94, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:01:23', seeing=2.61, atlas_timestamp='2026-02-14T23:01:09.437', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.0012500000000006395, -0.04224999999999923, -0.022500000000000853, -0.014499999999999957, 0.02525000000000155, 0.04399999999999871, 0.05424999999999969, 0.043499999999998096, 0.030000000000001137, -0.023749999999999716, 0.009000000000000341, 0.058999999999999275, 0.030250000000000554, 0.0779999999999994, 0.023999999999999133, 0.07874999999999943, 0.04349999999999987, 0.03349999999999831, 0.04224999999999923, 0.07699999999999818, 0.08024999999999949, 0.021750000000000824, 0.06375000000000064, 0.06899999999999906, 0.038000000000000256, 0.040749999999999176, -0.00849999999999973, 0.07499999999999929, 0.021000000000000796, 0.11800000000000033, 0.14000000000000057, 0.07874999999999943], zp_timestamp='2026-02-14T22:59:00')
2026-02-15T01:02:01.331 [DEBUG] [Thread-195264] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:02:01.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-15T01:02:01.426 [DEBUG] [Thread-195267] [transport.py] [_log()] starting thread (client mode): 0xa2d01d50
2026-02-15T01:02:01.426 [DEBUG] [Thread-195267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:02:01.440 [DEBUG] [Thread-195267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:02:01.440 [INFO] [Thread-195267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:02:01.448 [DEBUG] [Thread-195267] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:02:01.448 [DEBUG] [Thread-195267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:02:01.448 [DEBUG] [Thread-195267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:02:01.448 [DEBUG] [Thread-195267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:02:01.448 [DEBUG] [Thread-195267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:02:01.448 [DEBUG] [Thread-195267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:02:01.448 [DEBUG] [Thread-195267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:02:01.448 [DEBUG] [Thread-195267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:02:01.448 [DEBUG] [Thread-195267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:02:01.448 [DEBUG] [Thread-195267] [transport.py] [_log()] client lang: <none>
2026-02-15T01:02:01.448 [DEBUG] [Thread-195267] [transport.py] [_log()] server lang: <none>
2026-02-15T01:02:01.448 [DEBUG] [Thread-195267] [transport.py] [_log()] kex follows: False
2026-02-15T01:02:01.448 [DEBUG] [Thread-195267] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:02:01.448 [DEBUG] [Thread-195267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:02:01.448 [DEBUG] [Thread-195267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:02:01.449 [DEBUG] [Thread-195267] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:02:01.449 [DEBUG] [Thread-195267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:02:01.449 [DEBUG] [Thread-195267] [transport.py] [_log()] Compression: none
2026-02-15T01:02:01.449 [DEBUG] [Thread-195267] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:02:01.506 [DEBUG] [Thread-195267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:02:01.507 [DEBUG] [Thread-195267] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:02:01.507 [DEBUG] [Thread-195267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:02:01.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:02:01.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:02:01.562 [DEBUG] [Thread-195267] [transport.py] [_log()] userauth is OK
2026-02-15T01:02:01.562 [DEBUG] [Thread-195267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:02:01.563 [DEBUG] [Thread-195267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:02:01.563 [DEBUG] [Thread-195267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:02:01.563 [DEBUG] [Thread-195267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:02:01.581 [INFO] [Thread-195267] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:02: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-15T01:02:01.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:02:02.383 [DEBUG] [Thread-195267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:02:02.383 [DEBUG] [Thread-195267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:02:02.431 [DEBUG] [Thread-195267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:02:02.431 [DEBUG] [Thread-195267] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:02:02.439 [DEBUG] [Thread-195267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:02:02.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:02:02.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-15T01:02:02.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:02:02.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:02:02.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:02:02.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:02:02.471 [DEBUG] [Thread-195267] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:02:07.520 [DEBUG] [Thread-195269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:02:11.136 [DEBUG] [Thread-195270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:02:11.710 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:02:22.573 [DEBUG] [Thread-195271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:02:26.723 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:02:26.724 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:02:30.364 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:02:32.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:02:32.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:02: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-15T01:02:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 1, 58), 2.34, 85.76, 0.0, 42.96, 4.91, 1, 1, 0, 2, 0, 0),)
2026-02-15T01:02:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:01:58
2026-02-15T01:02:34.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:02:35.133 [DEBUG] [Thread-195272] [transport.py] [_log()] starting thread (client mode): 0xa2d7a350
2026-02-15T01:02:35.133 [DEBUG] [Thread-195272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:02:35.153 [DEBUG] [Thread-195272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:02:35.154 [INFO] [Thread-195272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:02:35.157 [DEBUG] [Thread-195272] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:02:35.157 [DEBUG] [Thread-195272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:02:35.157 [DEBUG] [Thread-195272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:02:35.157 [DEBUG] [Thread-195272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:02:35.157 [DEBUG] [Thread-195272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:02:35.157 [DEBUG] [Thread-195272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:02:35.157 [DEBUG] [Thread-195272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:02:35.157 [DEBUG] [Thread-195272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:02:35.157 [DEBUG] [Thread-195272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:02:35.157 [DEBUG] [Thread-195272] [transport.py] [_log()] client lang: <none>
2026-02-15T01:02:35.157 [DEBUG] [Thread-195272] [transport.py] [_log()] server lang: <none>
2026-02-15T01:02:35.157 [DEBUG] [Thread-195272] [transport.py] [_log()] kex follows: False
2026-02-15T01:02:35.157 [DEBUG] [Thread-195272] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:02:35.157 [DEBUG] [Thread-195272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:02:35.157 [DEBUG] [Thread-195272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:02:35.157 [DEBUG] [Thread-195272] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:02:35.157 [DEBUG] [Thread-195272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:02:35.157 [DEBUG] [Thread-195272] [transport.py] [_log()] Compression: none
2026-02-15T01:02:35.157 [DEBUG] [Thread-195272] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:02:35.173 [DEBUG] [Thread-195272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:02:35.173 [DEBUG] [Thread-195272] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:02:35.173 [DEBUG] [Thread-195272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:02:35.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:02:35.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:02:35.174 [DEBUG] [Thread-195272] [transport.py] [_log()] userauth is OK
2026-02-15T01:02:35.174 [DEBUG] [Thread-195272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:02:35.174 [DEBUG] [Thread-195272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:02:35.174 [DEBUG] [Thread-195272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:02:35.174 [DEBUG] [Thread-195272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:02:35.183 [INFO] [Thread-195272] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:02:35.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:02:35.794 [DEBUG] [Thread-195272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:02:35.794 [DEBUG] [Thread-195272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:02:35.795 [DEBUG] [Thread-195272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:02:35.835 [DEBUG] [Thread-195272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:02:35.836 [DEBUG] [Thread-195272] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:02:35.839 [DEBUG] [Thread-195272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:02:35.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:02:35.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:02:35.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:02:35.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:02:35.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:02:35.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:02:35.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:02:35.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:02:35.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:02:35.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.959484 -999.00   +7.50  28.64     82   +4.70 1 1 1 2 1     0    0 2.22 -32.03 ZNESW 28.6 28.6 138.0 46.6 8.1 -24.1 7.9 -23.1 7.7 -22.1 8.1 -23.3
2026-02-15T01:02:35.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:02:35.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:02:35.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.959484
2026-02-15T01:02:35.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:02:35.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:02:35.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:02:35.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:02:35.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:02:35.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:01:58', tmtdew=2.34, humidity=85.76, cloud=0.0, wind=42.96, temperature=4.91, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:01:58', seeing=2.55, atlas_timestamp='2026-02-14T23:01:39.418', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.0012500000000006395, -0.04224999999999923, -0.022500000000000853, -0.014499999999999957, 0.02525000000000155, 0.04399999999999871, 0.05424999999999969, 0.043499999999998096, 0.030000000000001137, -0.023749999999999716, 0.009000000000000341, 0.058999999999999275, 0.030250000000000554, 0.0779999999999994, 0.023999999999999133, 0.07874999999999943, 0.04349999999999987, 0.03349999999999831, 0.04224999999999923, 0.07699999999999818, 0.08024999999999949, 0.021750000000000824, 0.06375000000000064, 0.06899999999999906, 0.038000000000000256, 0.040749999999999176, -0.00849999999999973, 0.07499999999999929, 0.021000000000000796, 0.11800000000000033, 0.14000000000000057, 0.07874999999999943], zp_timestamp='2026-02-14T22:59:00')
2026-02-15T01:02:35.878 [DEBUG] [Thread-195272] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:02:35.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-15T01:02:35.975 [DEBUG] [Thread-195275] [transport.py] [_log()] starting thread (client mode): 0xa2d12c20
2026-02-15T01:02:35.975 [DEBUG] [Thread-195275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:02:35.990 [DEBUG] [Thread-195275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:02:35.990 [INFO] [Thread-195275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:02:35.998 [DEBUG] [Thread-195275] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:02:35.998 [DEBUG] [Thread-195275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:02:35.998 [DEBUG] [Thread-195275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:02:35.998 [DEBUG] [Thread-195275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:02:35.999 [DEBUG] [Thread-195275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:02:35.999 [DEBUG] [Thread-195275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:02:35.999 [DEBUG] [Thread-195275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:02:35.999 [DEBUG] [Thread-195275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:02:35.999 [DEBUG] [Thread-195275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:02:35.999 [DEBUG] [Thread-195275] [transport.py] [_log()] client lang: <none>
2026-02-15T01:02:35.999 [DEBUG] [Thread-195275] [transport.py] [_log()] server lang: <none>
2026-02-15T01:02:35.999 [DEBUG] [Thread-195275] [transport.py] [_log()] kex follows: False
2026-02-15T01:02:35.999 [DEBUG] [Thread-195275] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:02:36.000 [DEBUG] [Thread-195275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:02:36.000 [DEBUG] [Thread-195275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:02:36.000 [DEBUG] [Thread-195275] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:02:36.000 [DEBUG] [Thread-195275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:02:36.000 [DEBUG] [Thread-195275] [transport.py] [_log()] Compression: none
2026-02-15T01:02:36.000 [DEBUG] [Thread-195275] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:02:36.055 [DEBUG] [Thread-195275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:02:36.056 [DEBUG] [Thread-195275] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:02:36.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:02:36.057 [DEBUG] [Thread-195275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:02:36.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:02:36.111 [DEBUG] [Thread-195275] [transport.py] [_log()] userauth is OK
2026-02-15T01:02:36.112 [DEBUG] [Thread-195275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:02:36.112 [DEBUG] [Thread-195275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:02:36.112 [DEBUG] [Thread-195275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:02:36.112 [DEBUG] [Thread-195275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:02:36.131 [INFO] [Thread-195275] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:02:36.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-15T01:02:36.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:02:36.923 [DEBUG] [Thread-195275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:02:36.924 [DEBUG] [Thread-195275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:02:36.971 [DEBUG] [Thread-195275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:02:36.972 [DEBUG] [Thread-195275] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:02:36.981 [DEBUG] [Thread-195275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:02:36.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:02:36.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:02:36.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:02:37.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:02:37.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:02:37.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:02:37.018 [DEBUG] [Thread-195275] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:02:37.611 [DEBUG] [Thread-195277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:02:49.030 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:02:52.665 [DEBUG] [Thread-195278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:03:07.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:03:07.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:03:07.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:03:07.679 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:03:07.703 [DEBUG] [Thread-195279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:03:08.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 2, 34), 1.84, 88.77, 0.0, 47.74, 3.8, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:03:08.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:02:34
2026-02-15T01:03:09.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:03:09.545 [DEBUG] [Thread-195280] [transport.py] [_log()] starting thread (client mode): 0xa2d006a0
2026-02-15T01:03:09.546 [DEBUG] [Thread-195280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:03:09.566 [DEBUG] [Thread-195280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:03:09.566 [INFO] [Thread-195280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:03:09.567 [DEBUG] [Thread-195280] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:03:09.568 [DEBUG] [Thread-195280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:03:09.568 [DEBUG] [Thread-195280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:03:09.568 [DEBUG] [Thread-195280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:03:09.568 [DEBUG] [Thread-195280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:03:09.568 [DEBUG] [Thread-195280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:03:09.568 [DEBUG] [Thread-195280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:03:09.568 [DEBUG] [Thread-195280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:03:09.568 [DEBUG] [Thread-195280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:03:09.568 [DEBUG] [Thread-195280] [transport.py] [_log()] client lang: <none>
2026-02-15T01:03:09.568 [DEBUG] [Thread-195280] [transport.py] [_log()] server lang: <none>
2026-02-15T01:03:09.568 [DEBUG] [Thread-195280] [transport.py] [_log()] kex follows: False
2026-02-15T01:03:09.568 [DEBUG] [Thread-195280] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:03:09.568 [DEBUG] [Thread-195280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:03:09.568 [DEBUG] [Thread-195280] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:03:09.568 [DEBUG] [Thread-195280] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:03:09.568 [DEBUG] [Thread-195280] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:03:09.568 [DEBUG] [Thread-195280] [transport.py] [_log()] Compression: none
2026-02-15T01:03:09.568 [DEBUG] [Thread-195280] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:03:09.582 [DEBUG] [Thread-195280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:03:09.582 [DEBUG] [Thread-195280] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:03:09.583 [DEBUG] [Thread-195280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:03:09.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:03:09.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:03:09.585 [DEBUG] [Thread-195280] [transport.py] [_log()] userauth is OK
2026-02-15T01:03:09.585 [DEBUG] [Thread-195280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:03:09.585 [DEBUG] [Thread-195280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:03:09.585 [DEBUG] [Thread-195280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:03:09.585 [DEBUG] [Thread-195280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:03:09.621 [INFO] [Thread-195280] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:03:09.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:03:10.218 [DEBUG] [Thread-195280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:03:10.218 [DEBUG] [Thread-195280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:03:10.219 [DEBUG] [Thread-195280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:03:10.259 [DEBUG] [Thread-195280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:03:10.259 [DEBUG] [Thread-195280] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:03:10.263 [DEBUG] [Thread-195280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:03:10.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:03:10.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:03:10.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:03:10.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:03:10.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:03:10.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:03:10.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:03:10.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:03:10.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:03:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.959831 -999.00   +7.50  35.46     82   +4.70 1 1 2 2 1     0    0 2.05 -36.04 ZNESW 35.5 35.5 160.3 46.3 8.1 -24.1 7.9 -23.1 7.7 -22.2 8.0 -23.3
2026-02-15T01:03:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:03:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:03:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.959831
2026-02-15T01:03:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:03:10.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:03:10.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:03:10.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:03:10.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:03:10.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:02:34', tmtdew=1.84, humidity=88.77, cloud=0.0, wind=47.74, temperature=3.8, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:02:34', seeing=2.29, atlas_timestamp='2026-02-14T23:02:09.398', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, -0.0072499999999990905, -0.05074999999999896, -0.06450000000000067, -0.037499999999999645, 0.02775000000000105, -0.027000000000001023, -0.007749999999999702, 0.02099999999999902, 0.019000000000000128, -0.04675000000000118, -0.015000000000000568, 0.06199999999999939, 0.01624999999999943, 0.03999999999999915, 0.054999999999999716, 0.040749999999999176, 0.03550000000000075, 0.009999999999999787, -0.00975000000000037, 0.02899999999999814, 0.06274999999999942, 0.026250000000000995, 0.03575000000000017, 0.06549999999999834, 0.00849999999999973, 0.0442499999999999, -0.006999999999999673, 0.06850000000000023, -0.006499999999999062, 0.08650000000000091, 0.09500000000000064, 0.03874999999999851], zp_timestamp='2026-02-14T23:01:00')
2026-02-15T01:03:10.292 [DEBUG] [Thread-195280] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:03:10.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-15T01:03:10.398 [DEBUG] [Thread-195283] [transport.py] [_log()] starting thread (client mode): 0xa2d6de10
2026-02-15T01:03:10.398 [DEBUG] [Thread-195283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:03:10.412 [DEBUG] [Thread-195283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:03:10.412 [INFO] [Thread-195283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:03:10.420 [DEBUG] [Thread-195283] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:03:10.420 [DEBUG] [Thread-195283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:03:10.420 [DEBUG] [Thread-195283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:03:10.421 [DEBUG] [Thread-195283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:03:10.421 [DEBUG] [Thread-195283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:03:10.421 [DEBUG] [Thread-195283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:03:10.421 [DEBUG] [Thread-195283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:03:10.421 [DEBUG] [Thread-195283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:03:10.421 [DEBUG] [Thread-195283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:03:10.421 [DEBUG] [Thread-195283] [transport.py] [_log()] client lang: <none>
2026-02-15T01:03:10.421 [DEBUG] [Thread-195283] [transport.py] [_log()] server lang: <none>
2026-02-15T01:03:10.421 [DEBUG] [Thread-195283] [transport.py] [_log()] kex follows: False
2026-02-15T01:03:10.421 [DEBUG] [Thread-195283] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:03:10.422 [DEBUG] [Thread-195283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:03:10.422 [DEBUG] [Thread-195283] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:03:10.422 [DEBUG] [Thread-195283] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:03:10.422 [DEBUG] [Thread-195283] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:03:10.422 [DEBUG] [Thread-195283] [transport.py] [_log()] Compression: none
2026-02-15T01:03:10.422 [DEBUG] [Thread-195283] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:03:10.480 [DEBUG] [Thread-195283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:03:10.481 [DEBUG] [Thread-195283] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:03:10.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:03:10.482 [DEBUG] [Thread-195283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:03:10.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:03:10.536 [DEBUG] [Thread-195283] [transport.py] [_log()] userauth is OK
2026-02-15T01:03:10.536 [DEBUG] [Thread-195283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:03:10.536 [DEBUG] [Thread-195283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:03:10.536 [DEBUG] [Thread-195283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:03:10.536 [DEBUG] [Thread-195283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:03:10.555 [INFO] [Thread-195283] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:03:10.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-15T01:03:10.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:03:11.191 [DEBUG] [Thread-195285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:03:11.339 [DEBUG] [Thread-195283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:03:11.339 [DEBUG] [Thread-195283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:03:11.387 [DEBUG] [Thread-195283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:03:11.387 [DEBUG] [Thread-195283] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:03:11.396 [DEBUG] [Thread-195283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:03:11.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:03:11.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:03:11.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-15T01:03:11.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:03:11.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:03:11.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:03:11.433 [DEBUG] [Thread-195283] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:03:22.739 [DEBUG] [Thread-195286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:03:26.326 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:03:26.924 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:03:26.926 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:03:37.801 [DEBUG] [Thread-195287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:03:41.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:03:41.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:03:41.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-15T01:03:43.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 3, 10), 2.29, 85.87, 0.0, 44.34, 4.96, 1, 1, 0, 2, 0, 0),)
2026-02-15T01:03:43.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:03:10
2026-02-15T01:03:43.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:03:43.815 [DEBUG] [Thread-195288] [transport.py] [_log()] starting thread (client mode): 0xa2d86f80
2026-02-15T01:03:43.816 [DEBUG] [Thread-195288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:03:43.837 [DEBUG] [Thread-195288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:03:43.837 [INFO] [Thread-195288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:03:43.840 [DEBUG] [Thread-195288] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:03:43.840 [DEBUG] [Thread-195288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:03:43.840 [DEBUG] [Thread-195288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:03:43.840 [DEBUG] [Thread-195288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:03:43.840 [DEBUG] [Thread-195288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:03:43.840 [DEBUG] [Thread-195288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:03:43.840 [DEBUG] [Thread-195288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:03:43.840 [DEBUG] [Thread-195288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:03:43.840 [DEBUG] [Thread-195288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:03:43.840 [DEBUG] [Thread-195288] [transport.py] [_log()] client lang: <none>
2026-02-15T01:03:43.840 [DEBUG] [Thread-195288] [transport.py] [_log()] server lang: <none>
2026-02-15T01:03:43.840 [DEBUG] [Thread-195288] [transport.py] [_log()] kex follows: False
2026-02-15T01:03:43.840 [DEBUG] [Thread-195288] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:03:43.840 [DEBUG] [Thread-195288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:03:43.840 [DEBUG] [Thread-195288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:03:43.840 [DEBUG] [Thread-195288] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:03:43.840 [DEBUG] [Thread-195288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:03:43.840 [DEBUG] [Thread-195288] [transport.py] [_log()] Compression: none
2026-02-15T01:03:43.840 [DEBUG] [Thread-195288] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:03:43.856 [DEBUG] [Thread-195288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:03:43.857 [DEBUG] [Thread-195288] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:03:43.857 [DEBUG] [Thread-195288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:03:43.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:03:43.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:03:43.859 [DEBUG] [Thread-195288] [transport.py] [_log()] userauth is OK
2026-02-15T01:03:43.859 [DEBUG] [Thread-195288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:03:43.860 [DEBUG] [Thread-195288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:03:43.860 [DEBUG] [Thread-195288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:03:43.860 [DEBUG] [Thread-195288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:03:43.885 [INFO] [Thread-195288] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:03:43.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:03:44.506 [DEBUG] [Thread-195288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:03:44.507 [DEBUG] [Thread-195288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:03:44.507 [DEBUG] [Thread-195288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:03:44.547 [DEBUG] [Thread-195288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:03:44.548 [DEBUG] [Thread-195288] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:03:44.551 [DEBUG] [Thread-195288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:03:44.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:03:44.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:03:44.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:03:44.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:03:44.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:03:44.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:03:44.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:03:44.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:03:44.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:03:44.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.960526 -999.00   +7.50  33.54     82   +4.80 1 1 2 2 1     0    0 1.89 -36.64 ZNESW 33.5 33.5 145.0 42.4 8.1 -24.2 7.8 -23.1 7.7 -22.2 8.1 -23.5
2026-02-15T01:03:44.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:03:44.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:03:44.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.960526
2026-02-15T01:03:44.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:03:44.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:03:44.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:03:44.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:03:44.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:03:44.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:03:10', tmtdew=2.29, humidity=85.87, cloud=0.0, wind=44.34, temperature=4.96, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:03:10', seeing=2.09, atlas_timestamp='2026-02-14T23:03:09.446', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, -0.0072499999999990905, -0.05074999999999896, -0.06450000000000067, -0.037499999999999645, 0.02775000000000105, -0.027000000000001023, -0.007749999999999702, 0.02099999999999902, 0.019000000000000128, -0.04675000000000118, -0.015000000000000568, 0.06199999999999939, 0.01624999999999943, 0.03999999999999915, 0.054999999999999716, 0.040749999999999176, 0.03550000000000075, 0.009999999999999787, -0.00975000000000037, 0.02899999999999814, 0.06274999999999942, 0.026250000000000995, 0.03575000000000017, 0.06549999999999834, 0.00849999999999973, 0.0442499999999999, -0.006999999999999673, 0.06850000000000023, -0.006499999999999062, 0.08650000000000091, 0.09500000000000064, 0.03874999999999851], zp_timestamp='2026-02-14T23:01:00')
2026-02-15T01:03:44.576 [DEBUG] [Thread-195288] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:03:44.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-15T01:03:44.674 [DEBUG] [Thread-195291] [transport.py] [_log()] starting thread (client mode): 0xa2d87b50
2026-02-15T01:03:44.674 [DEBUG] [Thread-195291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:03:44.689 [DEBUG] [Thread-195291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:03:44.689 [INFO] [Thread-195291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:03:44.697 [DEBUG] [Thread-195291] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:03:44.698 [DEBUG] [Thread-195291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:03:44.698 [DEBUG] [Thread-195291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:03:44.698 [DEBUG] [Thread-195291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:03:44.698 [DEBUG] [Thread-195291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:03:44.698 [DEBUG] [Thread-195291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:03:44.698 [DEBUG] [Thread-195291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:03:44.698 [DEBUG] [Thread-195291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:03:44.698 [DEBUG] [Thread-195291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:03:44.698 [DEBUG] [Thread-195291] [transport.py] [_log()] client lang: <none>
2026-02-15T01:03:44.698 [DEBUG] [Thread-195291] [transport.py] [_log()] server lang: <none>
2026-02-15T01:03:44.698 [DEBUG] [Thread-195291] [transport.py] [_log()] kex follows: False
2026-02-15T01:03:44.698 [DEBUG] [Thread-195291] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:03:44.698 [DEBUG] [Thread-195291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:03:44.698 [DEBUG] [Thread-195291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:03:44.698 [DEBUG] [Thread-195291] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:03:44.698 [DEBUG] [Thread-195291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:03:44.699 [DEBUG] [Thread-195291] [transport.py] [_log()] Compression: none
2026-02-15T01:03:44.699 [DEBUG] [Thread-195291] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:03:44.757 [DEBUG] [Thread-195291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:03:44.757 [DEBUG] [Thread-195291] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:03:44.758 [DEBUG] [Thread-195291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:03:44.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:03:44.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:03:44.813 [DEBUG] [Thread-195291] [transport.py] [_log()] userauth is OK
2026-02-15T01:03:44.813 [DEBUG] [Thread-195291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:03:44.813 [DEBUG] [Thread-195291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:03:44.813 [DEBUG] [Thread-195291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:03:44.813 [DEBUG] [Thread-195291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:03:44.838 [INFO] [Thread-195291] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:03:44.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-15T01:03:44.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:03:45.176 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:03:45.615 [DEBUG] [Thread-195291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:03:45.615 [DEBUG] [Thread-195291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:03:45.663 [DEBUG] [Thread-195291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:03:45.663 [DEBUG] [Thread-195291] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:03:45.673 [DEBUG] [Thread-195291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:03:45.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:03:45.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-15T01:03:45.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-15T01:03:45.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:03:45.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:03:45.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:03:45.709 [DEBUG] [Thread-195291] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:03:52.837 [DEBUG] [Thread-195293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:04:04.005 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:04:07.892 [DEBUG] [Thread-195294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:04:11.271 [DEBUG] [Thread-195295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:04:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:04:15.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:04:15.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-15T01:04:17.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 3, 46), 2.28, 85.89, 0.0, 42.4, 4.94, 1, 1, 0, 2, 0, 0),)
2026-02-15T01:04:17.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:03:46
2026-02-15T01:04:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:04:18.069 [DEBUG] [Thread-195296] [transport.py] [_log()] starting thread (client mode): 0xa2d127d0
2026-02-15T01:04:18.069 [DEBUG] [Thread-195296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:04:18.090 [DEBUG] [Thread-195296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:04:18.090 [INFO] [Thread-195296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:04:18.093 [DEBUG] [Thread-195296] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:04:18.093 [DEBUG] [Thread-195296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:04:18.093 [DEBUG] [Thread-195296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:04:18.093 [DEBUG] [Thread-195296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:04:18.093 [DEBUG] [Thread-195296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:04:18.093 [DEBUG] [Thread-195296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:04:18.093 [DEBUG] [Thread-195296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:04:18.093 [DEBUG] [Thread-195296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:04:18.094 [DEBUG] [Thread-195296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:04:18.094 [DEBUG] [Thread-195296] [transport.py] [_log()] client lang: <none>
2026-02-15T01:04:18.094 [DEBUG] [Thread-195296] [transport.py] [_log()] server lang: <none>
2026-02-15T01:04:18.094 [DEBUG] [Thread-195296] [transport.py] [_log()] kex follows: False
2026-02-15T01:04:18.094 [DEBUG] [Thread-195296] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:04:18.094 [DEBUG] [Thread-195296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:04:18.094 [DEBUG] [Thread-195296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:04:18.094 [DEBUG] [Thread-195296] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:04:18.094 [DEBUG] [Thread-195296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:04:18.094 [DEBUG] [Thread-195296] [transport.py] [_log()] Compression: none
2026-02-15T01:04:18.094 [DEBUG] [Thread-195296] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:04:18.112 [DEBUG] [Thread-195296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:04:18.113 [DEBUG] [Thread-195296] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:04:18.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:04:18.114 [DEBUG] [Thread-195296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:04:18.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:04:18.115 [DEBUG] [Thread-195296] [transport.py] [_log()] userauth is OK
2026-02-15T01:04:18.116 [DEBUG] [Thread-195296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:04:18.116 [DEBUG] [Thread-195296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:04:18.116 [DEBUG] [Thread-195296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:04:18.116 [DEBUG] [Thread-195296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:04:18.139 [INFO] [Thread-195296] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:04:18.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:04:18.951 [DEBUG] [Thread-195296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:04:18.952 [DEBUG] [Thread-195296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:04:18.952 [DEBUG] [Thread-195296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:04:18.992 [DEBUG] [Thread-195296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:04:18.993 [DEBUG] [Thread-195296] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:04:18.996 [DEBUG] [Thread-195296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:04:19.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:04:19.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:04:19.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:04:19.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:04:19.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:04:19.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:04:19.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:04:19.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:04:19.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:04:19.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.960873 -999.00   +7.50  30.64     82   +4.70 1 1 2 2 1     0    0 1.97 -35.71 ZNESW 30.6 30.6 148.8 45.5 8.0 -24.2 7.8 -23.1 7.7 -22.2 8.0 -23.4
2026-02-15T01:04:19.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:04:19.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:04:19.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.960873
2026-02-15T01:04:19.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:04:19.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:04:19.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:04:19.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:04:19.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:04:19.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:03:46', tmtdew=2.28, humidity=85.89, cloud=0.0, wind=42.4, temperature=4.94, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:03:46', seeing=2.17, atlas_timestamp='2026-02-14T23:03:39.427', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, -0.0072499999999990905, -0.05074999999999896, -0.06450000000000067, -0.037499999999999645, 0.02775000000000105, -0.027000000000001023, -0.007749999999999702, 0.02099999999999902, 0.019000000000000128, -0.04675000000000118, -0.015000000000000568, 0.06199999999999939, 0.01624999999999943, 0.03999999999999915, 0.054999999999999716, 0.040749999999999176, 0.03550000000000075, 0.009999999999999787, -0.00975000000000037, 0.02899999999999814, 0.06274999999999942, 0.026250000000000995, 0.03575000000000017, 0.06549999999999834, 0.00849999999999973, 0.0442499999999999, -0.006999999999999673, 0.06850000000000023, -0.006499999999999062, 0.08650000000000091, 0.09500000000000064, 0.03874999999999851], zp_timestamp='2026-02-14T23:01:00')
2026-02-15T01:04:19.022 [DEBUG] [Thread-195296] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:04:19.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-15T01:04:19.117 [DEBUG] [Thread-195299] [transport.py] [_log()] starting thread (client mode): 0xa2d118d0
2026-02-15T01:04:19.117 [DEBUG] [Thread-195299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:04:19.132 [DEBUG] [Thread-195299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:04:19.132 [INFO] [Thread-195299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:04:19.140 [DEBUG] [Thread-195299] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:04:19.141 [DEBUG] [Thread-195299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:04:19.141 [DEBUG] [Thread-195299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:04:19.141 [DEBUG] [Thread-195299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:04:19.141 [DEBUG] [Thread-195299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:04:19.141 [DEBUG] [Thread-195299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:04:19.141 [DEBUG] [Thread-195299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:04:19.141 [DEBUG] [Thread-195299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:04:19.141 [DEBUG] [Thread-195299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:04:19.142 [DEBUG] [Thread-195299] [transport.py] [_log()] client lang: <none>
2026-02-15T01:04:19.142 [DEBUG] [Thread-195299] [transport.py] [_log()] server lang: <none>
2026-02-15T01:04:19.142 [DEBUG] [Thread-195299] [transport.py] [_log()] kex follows: False
2026-02-15T01:04:19.142 [DEBUG] [Thread-195299] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:04:19.142 [DEBUG] [Thread-195299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:04:19.142 [DEBUG] [Thread-195299] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:04:19.142 [DEBUG] [Thread-195299] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:04:19.142 [DEBUG] [Thread-195299] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:04:19.143 [DEBUG] [Thread-195299] [transport.py] [_log()] Compression: none
2026-02-15T01:04:19.143 [DEBUG] [Thread-195299] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:04:19.198 [DEBUG] [Thread-195299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:04:19.199 [DEBUG] [Thread-195299] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:04:19.200 [DEBUG] [Thread-195299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:04:19.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:04:19.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:04:19.253 [DEBUG] [Thread-195299] [transport.py] [_log()] userauth is OK
2026-02-15T01:04:19.254 [DEBUG] [Thread-195299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:04:19.254 [DEBUG] [Thread-195299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:04:19.254 [DEBUG] [Thread-195299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:04:19.254 [DEBUG] [Thread-195299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:04:19.277 [INFO] [Thread-195299] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:04:19.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-15T01:04:19.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:04:20.094 [DEBUG] [Thread-195299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:04:20.094 [DEBUG] [Thread-195299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:04:20.142 [DEBUG] [Thread-195299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:04:20.142 [DEBUG] [Thread-195299] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:04:20.151 [DEBUG] [Thread-195299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:04:20.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:04:20.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-15T01:04:20.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-15T01:04:20.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:04:20.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:04:20.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:04:20.187 [DEBUG] [Thread-195299] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:04:22.668 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:04:22.926 [DEBUG] [Thread-195301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:04:27.146 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:04:27.147 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:04:37.974 [DEBUG] [Thread-195302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:04:41.316 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:04:50.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:04:50.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:04:50.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-15T01:04:52.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 4, 21), 2.28, 85.9, 0.0, 45.54, 4.96, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:04:52.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:04:21
2026-02-15T01:04:52.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:04:52.804 [DEBUG] [Thread-195303] [transport.py] [_log()] starting thread (client mode): 0xa2d84eb0
2026-02-15T01:04:52.804 [DEBUG] [Thread-195303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:04:52.826 [DEBUG] [Thread-195303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:04:52.826 [INFO] [Thread-195303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:04:52.827 [DEBUG] [Thread-195303] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:04:52.827 [DEBUG] [Thread-195303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:04:52.827 [DEBUG] [Thread-195303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:04:52.827 [DEBUG] [Thread-195303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:04:52.827 [DEBUG] [Thread-195303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:04:52.827 [DEBUG] [Thread-195303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:04:52.827 [DEBUG] [Thread-195303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:04:52.827 [DEBUG] [Thread-195303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:04:52.827 [DEBUG] [Thread-195303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:04:52.827 [DEBUG] [Thread-195303] [transport.py] [_log()] client lang: <none>
2026-02-15T01:04:52.827 [DEBUG] [Thread-195303] [transport.py] [_log()] server lang: <none>
2026-02-15T01:04:52.827 [DEBUG] [Thread-195303] [transport.py] [_log()] kex follows: False
2026-02-15T01:04:52.827 [DEBUG] [Thread-195303] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:04:52.827 [DEBUG] [Thread-195303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:04:52.827 [DEBUG] [Thread-195303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:04:52.827 [DEBUG] [Thread-195303] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:04:52.827 [DEBUG] [Thread-195303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:04:52.828 [DEBUG] [Thread-195303] [transport.py] [_log()] Compression: none
2026-02-15T01:04:52.828 [DEBUG] [Thread-195303] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:04:52.835 [DEBUG] [Thread-195303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:04:52.835 [DEBUG] [Thread-195303] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:04:52.835 [DEBUG] [Thread-195303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:04:52.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:04:52.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:04:52.836 [DEBUG] [Thread-195303] [transport.py] [_log()] userauth is OK
2026-02-15T01:04:52.836 [DEBUG] [Thread-195303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:04:52.836 [DEBUG] [Thread-195303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:04:52.836 [DEBUG] [Thread-195303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:04:52.836 [DEBUG] [Thread-195303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:04:52.851 [INFO] [Thread-195303] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:04:52.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:04:53.008 [DEBUG] [Thread-195305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:04:53.467 [DEBUG] [Thread-195303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:04:53.467 [DEBUG] [Thread-195303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:04:53.468 [DEBUG] [Thread-195303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:04:53.508 [DEBUG] [Thread-195303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:04:53.509 [DEBUG] [Thread-195303] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:04:53.512 [DEBUG] [Thread-195303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:04:53.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:04:53.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:04:53.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:04:53.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:04:53.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:04:53.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:04:53.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:04:53.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:04:53.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:04:53.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.961220 -999.00   +7.50  42.73     82   +4.80 1 1 2 2 1     0    0 1.85 -37.08 ZNESW 42.7 42.7 144.0 47.7 8.1 -24.2 7.8 -23.1 7.7 -22.2 8.0 -23.2
2026-02-15T01:04:53.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:04:53.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:04:53.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.961220
2026-02-15T01:04:53.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:04:53.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:04:53.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:04:53.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:04:53.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:04:53.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:04:21', tmtdew=2.28, humidity=85.9, cloud=0.0, wind=45.54, temperature=4.96, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:04:21', seeing=1.98, atlas_timestamp='2026-02-14T23:04:09.408', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, -0.0072499999999990905, -0.05074999999999896, -0.06450000000000067, -0.037499999999999645, 0.02775000000000105, -0.027000000000001023, -0.007749999999999702, 0.02099999999999902, 0.019000000000000128, -0.04675000000000118, -0.015000000000000568, 0.06199999999999939, 0.01624999999999943, 0.03999999999999915, 0.054999999999999716, 0.040749999999999176, 0.03550000000000075, 0.009999999999999787, -0.00975000000000037, 0.02899999999999814, 0.06274999999999942, 0.026250000000000995, 0.03575000000000017, 0.06549999999999834, 0.00849999999999973, 0.0442499999999999, -0.006999999999999673, 0.06850000000000023, -0.006499999999999062, 0.08650000000000091, 0.09500000000000064, 0.03874999999999851], zp_timestamp='2026-02-14T23:01:00')
2026-02-15T01:04:53.539 [DEBUG] [Thread-195303] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:04:53.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-15T01:04:53.638 [DEBUG] [Thread-195307] [transport.py] [_log()] starting thread (client mode): 0xa2d6f460
2026-02-15T01:04:53.638 [DEBUG] [Thread-195307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:04:53.653 [DEBUG] [Thread-195307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:04:53.653 [INFO] [Thread-195307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:04:53.661 [DEBUG] [Thread-195307] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:04:53.661 [DEBUG] [Thread-195307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:04:53.661 [DEBUG] [Thread-195307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:04:53.661 [DEBUG] [Thread-195307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:04:53.661 [DEBUG] [Thread-195307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:04:53.661 [DEBUG] [Thread-195307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:04:53.661 [DEBUG] [Thread-195307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:04:53.661 [DEBUG] [Thread-195307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:04:53.661 [DEBUG] [Thread-195307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:04:53.661 [DEBUG] [Thread-195307] [transport.py] [_log()] client lang: <none>
2026-02-15T01:04:53.661 [DEBUG] [Thread-195307] [transport.py] [_log()] server lang: <none>
2026-02-15T01:04:53.661 [DEBUG] [Thread-195307] [transport.py] [_log()] kex follows: False
2026-02-15T01:04:53.661 [DEBUG] [Thread-195307] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:04:53.662 [DEBUG] [Thread-195307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:04:53.662 [DEBUG] [Thread-195307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:04:53.662 [DEBUG] [Thread-195307] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:04:53.662 [DEBUG] [Thread-195307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:04:53.662 [DEBUG] [Thread-195307] [transport.py] [_log()] Compression: none
2026-02-15T01:04:53.662 [DEBUG] [Thread-195307] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:04:53.718 [DEBUG] [Thread-195307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:04:53.719 [DEBUG] [Thread-195307] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:04:53.719 [DEBUG] [Thread-195307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:04:53.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:04:53.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:04:53.774 [DEBUG] [Thread-195307] [transport.py] [_log()] userauth is OK
2026-02-15T01:04:53.774 [DEBUG] [Thread-195307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:04:53.774 [DEBUG] [Thread-195307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:04:53.774 [DEBUG] [Thread-195307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:04:53.775 [DEBUG] [Thread-195307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:04:53.794 [INFO] [Thread-195307] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:04:53.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T01:04:53.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:04:54.606 [DEBUG] [Thread-195307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:04:54.606 [DEBUG] [Thread-195307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:04:54.655 [DEBUG] [Thread-195307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:04:54.656 [DEBUG] [Thread-195307] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:04:54.665 [DEBUG] [Thread-195307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:04:54.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:04:54.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:04:54.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-15T01:04:54.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:04:54.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:04:54.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:04:54.715 [DEBUG] [Thread-195307] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:05:00.224 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:05:08.046 [DEBUG] [Thread-195309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:05:11.334 [DEBUG] [Thread-195310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:05:19.094 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:05:23.106 [DEBUG] [Thread-195311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:05:24.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:05:24.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:05:24.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-15T01:05:26.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 4, 56), 2.28, 85.93, 0.0, 42.27, 4.92, 1, 1, 0, 2, 0, 0),)
2026-02-15T01:05:26.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:04:56
2026-02-15T01:05:26.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:05:27.070 [DEBUG] [Thread-195312] [transport.py] [_log()] starting thread (client mode): 0xa2d6dba0
2026-02-15T01:05:27.070 [DEBUG] [Thread-195312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:05:27.087 [DEBUG] [Thread-195312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:05:27.087 [INFO] [Thread-195312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:05:27.090 [DEBUG] [Thread-195312] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:05:27.090 [DEBUG] [Thread-195312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:05:27.090 [DEBUG] [Thread-195312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:05:27.090 [DEBUG] [Thread-195312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:05:27.091 [DEBUG] [Thread-195312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:05:27.091 [DEBUG] [Thread-195312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:05:27.091 [DEBUG] [Thread-195312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:05:27.091 [DEBUG] [Thread-195312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:05:27.091 [DEBUG] [Thread-195312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:05:27.091 [DEBUG] [Thread-195312] [transport.py] [_log()] client lang: <none>
2026-02-15T01:05:27.091 [DEBUG] [Thread-195312] [transport.py] [_log()] server lang: <none>
2026-02-15T01:05:27.091 [DEBUG] [Thread-195312] [transport.py] [_log()] kex follows: False
2026-02-15T01:05:27.091 [DEBUG] [Thread-195312] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:05:27.091 [DEBUG] [Thread-195312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:05:27.091 [DEBUG] [Thread-195312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:05:27.091 [DEBUG] [Thread-195312] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:05:27.091 [DEBUG] [Thread-195312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:05:27.091 [DEBUG] [Thread-195312] [transport.py] [_log()] Compression: none
2026-02-15T01:05:27.091 [DEBUG] [Thread-195312] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:05:27.110 [DEBUG] [Thread-195312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:05:27.110 [DEBUG] [Thread-195312] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:05:27.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:05:27.112 [DEBUG] [Thread-195312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:05:27.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:05:27.114 [DEBUG] [Thread-195312] [transport.py] [_log()] userauth is OK
2026-02-15T01:05:27.114 [DEBUG] [Thread-195312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:05:27.114 [DEBUG] [Thread-195312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:05:27.115 [DEBUG] [Thread-195312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:05:27.115 [DEBUG] [Thread-195312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:05:27.141 [INFO] [Thread-195312] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:05:27.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:05:27.346 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:05:27.347 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:05:27.765 [DEBUG] [Thread-195312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:05:27.765 [DEBUG] [Thread-195312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:05:27.765 [DEBUG] [Thread-195312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:05:27.806 [DEBUG] [Thread-195312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:05:27.806 [DEBUG] [Thread-195312] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:05:27.809 [DEBUG] [Thread-195312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:05:27.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:05:27.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:05:27.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:05:27.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:05:27.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:05:27.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:05:27.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:05:27.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:05:27.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:05:27.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.961567 -999.00   +7.50  35.03     82   +4.80 1 1 2 2 1     0    0 1.96 -36.73 ZNESW 35.0 35.0 151.8 46.5 8.0 -24.1 7.8 -23.1 7.7 -22.1 8.0 -23.4
2026-02-15T01:05:27.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:05:27.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:05:27.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.961567
2026-02-15T01:05:27.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:05:27.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:05:27.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:05:27.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:05:27.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:05:27.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:04:56', tmtdew=2.28, humidity=85.93, cloud=0.0, wind=42.27, temperature=4.92, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:04:56', seeing=1.98, atlas_timestamp='2026-02-14T23:04:39.389', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, -0.0072499999999990905, -0.05074999999999896, -0.06450000000000067, -0.037499999999999645, 0.02775000000000105, -0.027000000000001023, -0.007749999999999702, 0.02099999999999902, 0.019000000000000128, -0.04675000000000118, -0.015000000000000568, 0.06199999999999939, 0.01624999999999943, 0.03999999999999915, 0.054999999999999716, 0.040749999999999176, 0.03550000000000075, 0.009999999999999787, -0.00975000000000037, 0.02899999999999814, 0.06274999999999942, 0.026250000000000995, 0.03575000000000017, 0.06549999999999834, 0.00849999999999973, 0.0442499999999999, -0.006999999999999673, 0.06850000000000023, -0.006499999999999062, 0.08650000000000091, 0.09500000000000064, 0.03874999999999851], zp_timestamp='2026-02-14T23:01:00')
2026-02-15T01:05:27.832 [DEBUG] [Thread-195312] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:05:27.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-15T01:05:27.930 [DEBUG] [Thread-195315] [transport.py] [_log()] starting thread (client mode): 0xa2d851b0
2026-02-15T01:05:27.930 [DEBUG] [Thread-195315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:05:27.952 [DEBUG] [Thread-195315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:05:27.953 [INFO] [Thread-195315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:05:27.960 [DEBUG] [Thread-195315] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:05:27.960 [DEBUG] [Thread-195315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:05:27.960 [DEBUG] [Thread-195315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:05:27.960 [DEBUG] [Thread-195315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:05:27.960 [DEBUG] [Thread-195315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:05:27.961 [DEBUG] [Thread-195315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:05:27.961 [DEBUG] [Thread-195315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:05:27.961 [DEBUG] [Thread-195315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:05:27.961 [DEBUG] [Thread-195315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:05:27.961 [DEBUG] [Thread-195315] [transport.py] [_log()] client lang: <none>
2026-02-15T01:05:27.961 [DEBUG] [Thread-195315] [transport.py] [_log()] server lang: <none>
2026-02-15T01:05:27.961 [DEBUG] [Thread-195315] [transport.py] [_log()] kex follows: False
2026-02-15T01:05:27.961 [DEBUG] [Thread-195315] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:05:27.961 [DEBUG] [Thread-195315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:05:27.962 [DEBUG] [Thread-195315] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:05:27.962 [DEBUG] [Thread-195315] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:05:27.962 [DEBUG] [Thread-195315] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:05:27.962 [DEBUG] [Thread-195315] [transport.py] [_log()] Compression: none
2026-02-15T01:05:27.962 [DEBUG] [Thread-195315] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:05:28.018 [DEBUG] [Thread-195315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:05:28.019 [DEBUG] [Thread-195315] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:05:28.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:05:28.020 [DEBUG] [Thread-195315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:05:28.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:05:28.074 [DEBUG] [Thread-195315] [transport.py] [_log()] userauth is OK
2026-02-15T01:05:28.074 [DEBUG] [Thread-195315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:05:28.075 [DEBUG] [Thread-195315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:05:28.075 [DEBUG] [Thread-195315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:05:28.075 [DEBUG] [Thread-195315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:05:28.097 [INFO] [Thread-195315] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:05:28.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T01:05:28.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:05:28.923 [DEBUG] [Thread-195315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:05:28.923 [DEBUG] [Thread-195315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:05:28.971 [DEBUG] [Thread-195315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:05:28.971 [DEBUG] [Thread-195315] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:05:28.980 [DEBUG] [Thread-195315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:05:28.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:05:28.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')
2026-02-15T01:05:28.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-15T01:05:29.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:05:29.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:05:29.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:05:29.013 [DEBUG] [Thread-195315] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:05:37.859 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:05:38.142 [DEBUG] [Thread-195317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:05:53.190 [DEBUG] [Thread-195318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:05:56.507 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:05:59.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:05:59.020 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:05:59.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-15T01:06:00.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 5, 31), 2.27, 85.95, 0.0, 40.7, 4.93, 1, 1, 0, 2, 0, 0),)
2026-02-15T01:06:00.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:05:31
2026-02-15T01:06:01.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:06:01.490 [DEBUG] [Thread-195319] [transport.py] [_log()] starting thread (client mode): 0xa2d6f0d0
2026-02-15T01:06:01.491 [DEBUG] [Thread-195319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:06:01.511 [DEBUG] [Thread-195319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:06:01.511 [INFO] [Thread-195319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:06:01.514 [DEBUG] [Thread-195319] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:06:01.514 [DEBUG] [Thread-195319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:06:01.514 [DEBUG] [Thread-195319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:06:01.514 [DEBUG] [Thread-195319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:06:01.514 [DEBUG] [Thread-195319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:06:01.514 [DEBUG] [Thread-195319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:06:01.515 [DEBUG] [Thread-195319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:06:01.515 [DEBUG] [Thread-195319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:06:01.515 [DEBUG] [Thread-195319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:06:01.515 [DEBUG] [Thread-195319] [transport.py] [_log()] client lang: <none>
2026-02-15T01:06:01.515 [DEBUG] [Thread-195319] [transport.py] [_log()] server lang: <none>
2026-02-15T01:06:01.515 [DEBUG] [Thread-195319] [transport.py] [_log()] kex follows: False
2026-02-15T01:06:01.515 [DEBUG] [Thread-195319] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:06:01.515 [DEBUG] [Thread-195319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:06:01.515 [DEBUG] [Thread-195319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:06:01.515 [DEBUG] [Thread-195319] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:06:01.515 [DEBUG] [Thread-195319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:06:01.515 [DEBUG] [Thread-195319] [transport.py] [_log()] Compression: none
2026-02-15T01:06:01.515 [DEBUG] [Thread-195319] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:06:01.531 [DEBUG] [Thread-195319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:06:01.531 [DEBUG] [Thread-195319] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:06:01.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:06:01.532 [DEBUG] [Thread-195319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:06:01.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:06:01.534 [DEBUG] [Thread-195319] [transport.py] [_log()] userauth is OK
2026-02-15T01:06:01.534 [DEBUG] [Thread-195319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:06:01.535 [DEBUG] [Thread-195319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:06:01.535 [DEBUG] [Thread-195319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:06:01.535 [DEBUG] [Thread-195319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:06:01.570 [INFO] [Thread-195319] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:06:01.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:06:02.192 [DEBUG] [Thread-195319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:06:02.192 [DEBUG] [Thread-195319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:06:02.192 [DEBUG] [Thread-195319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:06:02.233 [DEBUG] [Thread-195319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:06:02.234 [DEBUG] [Thread-195319] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:06:02.237 [DEBUG] [Thread-195319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:06:02.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:06:02.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:06:02.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:06:02.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:06:02.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:06:02.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:06:02.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:06:02.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:06:02.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:06:02.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.961914 -999.00   +7.50  32.52     82   +4.80 1 1 2 2 1     0    0 1.98 -35.72 ZNESW 32.5 32.5 149.6 46.9 8.0 -24.1 7.9 -23.2 7.7 -22.3 8.0 -23.5
2026-02-15T01:06:02.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:06:02.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:06:02.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.961914
2026-02-15T01:06:02.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:06:02.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:06:02.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:06:02.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:06:02.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:06:02.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:05:31', tmtdew=2.27, humidity=85.95, cloud=0.0, wind=40.7, temperature=4.93, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:05:32', seeing=2.13, atlas_timestamp='2026-02-14T23:05:09.370', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, -0.0072499999999990905, -0.05074999999999896, -0.06450000000000067, -0.037499999999999645, 0.02775000000000105, -0.027000000000001023, -0.007749999999999702, 0.02099999999999902, 0.019000000000000128, -0.04675000000000118, -0.015000000000000568, 0.06199999999999939, 0.01624999999999943, 0.03999999999999915, 0.054999999999999716, 0.040749999999999176, 0.03550000000000075, 0.009999999999999787, -0.00975000000000037, 0.02899999999999814, 0.06274999999999942, 0.026250000000000995, 0.03575000000000017, 0.06549999999999834, 0.00849999999999973, 0.0442499999999999, -0.006999999999999673, 0.06850000000000023, -0.006499999999999062, 0.08650000000000091, 0.09500000000000064, 0.03874999999999851], zp_timestamp='2026-02-14T23:01:00')
2026-02-15T01:06:02.261 [DEBUG] [Thread-195319] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:06:02.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T01:06:02.356 [DEBUG] [Thread-195322] [transport.py] [_log()] starting thread (client mode): 0xa2d6f910
2026-02-15T01:06:02.356 [DEBUG] [Thread-195322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:06:02.371 [DEBUG] [Thread-195322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:06:02.371 [INFO] [Thread-195322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:06:02.378 [DEBUG] [Thread-195322] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:06:02.378 [DEBUG] [Thread-195322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:06:02.379 [DEBUG] [Thread-195322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:06:02.379 [DEBUG] [Thread-195322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:06:02.379 [DEBUG] [Thread-195322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:06:02.379 [DEBUG] [Thread-195322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:06:02.379 [DEBUG] [Thread-195322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:06:02.379 [DEBUG] [Thread-195322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:06:02.379 [DEBUG] [Thread-195322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:06:02.379 [DEBUG] [Thread-195322] [transport.py] [_log()] client lang: <none>
2026-02-15T01:06:02.379 [DEBUG] [Thread-195322] [transport.py] [_log()] server lang: <none>
2026-02-15T01:06:02.379 [DEBUG] [Thread-195322] [transport.py] [_log()] kex follows: False
2026-02-15T01:06:02.380 [DEBUG] [Thread-195322] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:06:02.380 [DEBUG] [Thread-195322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:06:02.380 [DEBUG] [Thread-195322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:06:02.380 [DEBUG] [Thread-195322] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:06:02.380 [DEBUG] [Thread-195322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:06:02.380 [DEBUG] [Thread-195322] [transport.py] [_log()] Compression: none
2026-02-15T01:06:02.380 [DEBUG] [Thread-195322] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:06:02.440 [DEBUG] [Thread-195322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:06:02.441 [DEBUG] [Thread-195322] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:06:02.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:06:02.442 [DEBUG] [Thread-195322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:06:02.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:06:02.499 [DEBUG] [Thread-195322] [transport.py] [_log()] userauth is OK
2026-02-15T01:06:02.499 [DEBUG] [Thread-195322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:06:02.500 [DEBUG] [Thread-195322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:06:02.500 [DEBUG] [Thread-195322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:06:02.500 [DEBUG] [Thread-195322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:06:02.519 [INFO] [Thread-195322] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:06:02.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-15T01:06:02.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:06:03.325 [DEBUG] [Thread-195322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:06:03.325 [DEBUG] [Thread-195322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:06:03.373 [DEBUG] [Thread-195322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:06:03.374 [DEBUG] [Thread-195322] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:06:03.383 [DEBUG] [Thread-195322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:06:03.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:06:03.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-15T01:06:03.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-15T01:06:03.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:06:03.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:06:03.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:06:03.420 [DEBUG] [Thread-195322] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:06:08.227 [DEBUG] [Thread-195324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:06:11.402 [DEBUG] [Thread-195325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:06:15.154 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:06:23.276 [DEBUG] [Thread-195326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:06:27.550 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:06:27.551 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:06:33.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:06:33.413 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:06:33.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-15T01:06:34.091 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:06:35.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 6, 7), 2.27, 85.98, 0.0, 42.47, 4.9, 1, 1, 0, 2, 0, 0),)
2026-02-15T01:06:35.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:06:07
2026-02-15T01:06:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:06:35.740 [DEBUG] [Thread-195327] [transport.py] [_log()] starting thread (client mode): 0xa2d01de0
2026-02-15T01:06:35.740 [DEBUG] [Thread-195327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:06:35.759 [DEBUG] [Thread-195327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:06:35.759 [INFO] [Thread-195327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:06:35.762 [DEBUG] [Thread-195327] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:06:35.762 [DEBUG] [Thread-195327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:06:35.762 [DEBUG] [Thread-195327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:06:35.762 [DEBUG] [Thread-195327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:06:35.762 [DEBUG] [Thread-195327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:06:35.762 [DEBUG] [Thread-195327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:06:35.762 [DEBUG] [Thread-195327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:06:35.762 [DEBUG] [Thread-195327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:06:35.762 [DEBUG] [Thread-195327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:06:35.762 [DEBUG] [Thread-195327] [transport.py] [_log()] client lang: <none>
2026-02-15T01:06:35.762 [DEBUG] [Thread-195327] [transport.py] [_log()] server lang: <none>
2026-02-15T01:06:35.762 [DEBUG] [Thread-195327] [transport.py] [_log()] kex follows: False
2026-02-15T01:06:35.762 [DEBUG] [Thread-195327] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:06:35.762 [DEBUG] [Thread-195327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:06:35.763 [DEBUG] [Thread-195327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:06:35.763 [DEBUG] [Thread-195327] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:06:35.763 [DEBUG] [Thread-195327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:06:35.763 [DEBUG] [Thread-195327] [transport.py] [_log()] Compression: none
2026-02-15T01:06:35.763 [DEBUG] [Thread-195327] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:06:35.779 [DEBUG] [Thread-195327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:06:35.780 [DEBUG] [Thread-195327] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:06:35.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:06:35.781 [DEBUG] [Thread-195327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:06:35.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:06:35.783 [DEBUG] [Thread-195327] [transport.py] [_log()] userauth is OK
2026-02-15T01:06:35.783 [DEBUG] [Thread-195327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:06:35.784 [DEBUG] [Thread-195327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:06:35.784 [DEBUG] [Thread-195327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:06:35.784 [DEBUG] [Thread-195327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:06:35.798 [INFO] [Thread-195327] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:06:35.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:06:36.418 [DEBUG] [Thread-195327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:06:36.418 [DEBUG] [Thread-195327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:06:36.419 [DEBUG] [Thread-195327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:06:36.460 [DEBUG] [Thread-195327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:06:36.460 [DEBUG] [Thread-195327] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:06:36.464 [DEBUG] [Thread-195327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:06:36.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:06:36.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:06:36.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:06:36.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:06:36.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:06:36.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:06:36.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:06:36.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:06:36.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:06:36.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.962262 -999.00   +7.50  25.00     82   +4.80 1 1 1 2 1     0    0 1.79 -39.95 ZNESW 25.0 25.0 152.2 41.6 8.1 -24.2 7.8 -23.1 7.7 -22.4 8.0 -23.5
2026-02-15T01:06:36.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:06:36.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:06:36.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.962262
2026-02-15T01:06:36.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:06:36.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:06:36.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:06:36.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:06:36.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:06:36.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:06:07', tmtdew=2.27, humidity=85.98, cloud=0.0, wind=42.47, temperature=4.9, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:06:07', seeing=1.94, atlas_timestamp='2026-02-14T23:05:39.437', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, 0.008250000000000313, -0.059749999999999304, -0.0365000000000002, -0.027000000000001023, 0.04125000000000156, 0.02800000000000047, 0.048250000000001236, 0.04749999999999943, 0.03500000000000014, -0.006249999999999645, 0.016000000000000014, 0.07099999999999973, 0.02024999999999899, 0.06299999999999883, 0.058499999999998664, 0.03125, 0.027499999999999858, 0.02749999999999808, 0.03774999999999906, 0.05599999999999916, 0.044249999999998124, 0.048250000000001236, 0.03575000000000017, 0.09399999999999942, 0.016500000000000625, 0.06375000000000064, 0.04349999999999987, 0.0235000000000003, 0.04800000000000182, 0.10000000000000142, 0.12600000000000122, 0.029749999999999943], zp_timestamp='2026-02-14T23:04:00')
2026-02-15T01:06:36.488 [DEBUG] [Thread-195327] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:06:36.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-15T01:06:36.582 [DEBUG] [Thread-195330] [transport.py] [_log()] starting thread (client mode): 0xa2d02b30
2026-02-15T01:06:36.582 [DEBUG] [Thread-195330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:06:36.596 [DEBUG] [Thread-195330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:06:36.596 [INFO] [Thread-195330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:06:36.604 [DEBUG] [Thread-195330] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:06:36.604 [DEBUG] [Thread-195330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:06:36.604 [DEBUG] [Thread-195330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:06:36.604 [DEBUG] [Thread-195330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:06:36.604 [DEBUG] [Thread-195330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:06:36.604 [DEBUG] [Thread-195330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:06:36.604 [DEBUG] [Thread-195330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:06:36.604 [DEBUG] [Thread-195330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:06:36.604 [DEBUG] [Thread-195330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:06:36.604 [DEBUG] [Thread-195330] [transport.py] [_log()] client lang: <none>
2026-02-15T01:06:36.605 [DEBUG] [Thread-195330] [transport.py] [_log()] server lang: <none>
2026-02-15T01:06:36.605 [DEBUG] [Thread-195330] [transport.py] [_log()] kex follows: False
2026-02-15T01:06:36.605 [DEBUG] [Thread-195330] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:06:36.605 [DEBUG] [Thread-195330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:06:36.605 [DEBUG] [Thread-195330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:06:36.605 [DEBUG] [Thread-195330] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:06:36.605 [DEBUG] [Thread-195330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:06:36.605 [DEBUG] [Thread-195330] [transport.py] [_log()] Compression: none
2026-02-15T01:06:36.605 [DEBUG] [Thread-195330] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:06:36.664 [DEBUG] [Thread-195330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:06:36.664 [DEBUG] [Thread-195330] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:06:36.665 [DEBUG] [Thread-195330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:06:36.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:06:36.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:06:36.719 [DEBUG] [Thread-195330] [transport.py] [_log()] userauth is OK
2026-02-15T01:06:36.719 [DEBUG] [Thread-195330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:06:36.719 [DEBUG] [Thread-195330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:06:36.719 [DEBUG] [Thread-195330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:06:36.719 [DEBUG] [Thread-195330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:06:36.734 [INFO] [Thread-195330] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:06:36.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-15T01:06:36.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:06:37.554 [DEBUG] [Thread-195330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:06:37.554 [DEBUG] [Thread-195330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:06:37.601 [DEBUG] [Thread-195330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:06:37.602 [DEBUG] [Thread-195330] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:06:37.611 [DEBUG] [Thread-195330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:06:37.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:06:37.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-15T01:06:37.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:06:37.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:06:37.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:06:37.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:06:37.648 [DEBUG] [Thread-195330] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:06:38.312 [DEBUG] [Thread-195332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:06:52.750 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:06:53.369 [DEBUG] [Thread-195333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:07:07.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:07:07.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:07:07.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:07:08.404 [DEBUG] [Thread-195334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:07:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 6, 42), 3.6, 77.96, 0.0, 45.41, 7.96, 0, 0, 0, 2, 1, 0),)
2026-02-15T01:07:09.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:06:42
2026-02-15T01:07:09.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:07:09.978 [DEBUG] [Thread-195335] [transport.py] [_log()] starting thread (client mode): 0xa57d46a0
2026-02-15T01:07:09.979 [DEBUG] [Thread-195335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:07:09.994 [DEBUG] [Thread-195335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:07:09.994 [INFO] [Thread-195335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:07:09.997 [DEBUG] [Thread-195335] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:07:09.998 [DEBUG] [Thread-195335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:07:09.998 [DEBUG] [Thread-195335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:07:09.998 [DEBUG] [Thread-195335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:07:09.998 [DEBUG] [Thread-195335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:07:09.998 [DEBUG] [Thread-195335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:07:09.998 [DEBUG] [Thread-195335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:07:09.998 [DEBUG] [Thread-195335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:07:09.998 [DEBUG] [Thread-195335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:07:09.998 [DEBUG] [Thread-195335] [transport.py] [_log()] client lang: <none>
2026-02-15T01:07:09.998 [DEBUG] [Thread-195335] [transport.py] [_log()] server lang: <none>
2026-02-15T01:07:09.998 [DEBUG] [Thread-195335] [transport.py] [_log()] kex follows: False
2026-02-15T01:07:09.998 [DEBUG] [Thread-195335] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:07:09.998 [DEBUG] [Thread-195335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:07:09.998 [DEBUG] [Thread-195335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:07:09.998 [DEBUG] [Thread-195335] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:07:09.998 [DEBUG] [Thread-195335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:07:09.998 [DEBUG] [Thread-195335] [transport.py] [_log()] Compression: none
2026-02-15T01:07:09.998 [DEBUG] [Thread-195335] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:07:10.013 [DEBUG] [Thread-195335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:07:10.013 [DEBUG] [Thread-195335] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:07:10.013 [DEBUG] [Thread-195335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:07:10.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:07:10.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:07:10.015 [DEBUG] [Thread-195335] [transport.py] [_log()] userauth is OK
2026-02-15T01:07:10.015 [DEBUG] [Thread-195335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:07:10.015 [DEBUG] [Thread-195335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:07:10.015 [DEBUG] [Thread-195335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:07:10.015 [DEBUG] [Thread-195335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:07:10.044 [INFO] [Thread-195335] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:07:10.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:07:10.707 [DEBUG] [Thread-195335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:07:10.707 [DEBUG] [Thread-195335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:07:10.708 [DEBUG] [Thread-195335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:07:10.748 [DEBUG] [Thread-195335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:07:10.748 [DEBUG] [Thread-195335] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:07:10.751 [DEBUG] [Thread-195335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:07:10.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:07:10.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:07:10.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:07:10.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:07:10.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:07:10.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:07:10.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:07:10.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:07:10.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:07:10.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.962956 -999.00   +7.50  32.40     83   +4.80 1 1 2 2 1     0    0 1.76 -40.23 ZNESW 32.4 32.4 149.0 44.6 8.1 -24.3 7.8 -23.4 7.6 -22.2 8.0 -23.4
2026-02-15T01:07:10.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:07:10.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:07:10.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.962956
2026-02-15T01:07:10.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:07:10.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:07:10.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:07:10.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:07:10.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:07:10.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:06:42', tmtdew=3.6, humidity=77.96, cloud=0.0, wind=45.41, temperature=7.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:06:43', seeing=1.98, atlas_timestamp='2026-02-14T23:06:39.398', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, 0.008250000000000313, -0.059749999999999304, -0.0365000000000002, -0.027000000000001023, 0.04125000000000156, 0.02800000000000047, 0.048250000000001236, 0.04749999999999943, 0.03500000000000014, -0.006249999999999645, 0.016000000000000014, 0.07099999999999973, 0.02024999999999899, 0.06299999999999883, 0.058499999999998664, 0.03125, 0.027499999999999858, 0.02749999999999808, 0.03774999999999906, 0.05599999999999916, 0.044249999999998124, 0.048250000000001236, 0.03575000000000017, 0.09399999999999942, 0.016500000000000625, 0.06375000000000064, 0.04349999999999987, 0.0235000000000003, 0.04800000000000182, 0.10000000000000142, 0.12600000000000122, 0.029749999999999943], zp_timestamp='2026-02-14T23:04:00')
2026-02-15T01:07:10.776 [DEBUG] [Thread-195335] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:07:10.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-15T01:07:10.881 [DEBUG] [Thread-195338] [transport.py] [_log()] starting thread (client mode): 0xa2d12ce0
2026-02-15T01:07:10.882 [DEBUG] [Thread-195338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:07:10.897 [DEBUG] [Thread-195338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:07:10.897 [INFO] [Thread-195338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:07:10.905 [DEBUG] [Thread-195338] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:07:10.905 [DEBUG] [Thread-195338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:07:10.905 [DEBUG] [Thread-195338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:07:10.905 [DEBUG] [Thread-195338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:07:10.905 [DEBUG] [Thread-195338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:07:10.905 [DEBUG] [Thread-195338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:07:10.905 [DEBUG] [Thread-195338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:07:10.905 [DEBUG] [Thread-195338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:07:10.906 [DEBUG] [Thread-195338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:07:10.906 [DEBUG] [Thread-195338] [transport.py] [_log()] client lang: <none>
2026-02-15T01:07:10.906 [DEBUG] [Thread-195338] [transport.py] [_log()] server lang: <none>
2026-02-15T01:07:10.906 [DEBUG] [Thread-195338] [transport.py] [_log()] kex follows: False
2026-02-15T01:07:10.906 [DEBUG] [Thread-195338] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:07:10.906 [DEBUG] [Thread-195338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:07:10.906 [DEBUG] [Thread-195338] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:07:10.906 [DEBUG] [Thread-195338] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:07:10.906 [DEBUG] [Thread-195338] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:07:10.906 [DEBUG] [Thread-195338] [transport.py] [_log()] Compression: none
2026-02-15T01:07:10.906 [DEBUG] [Thread-195338] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:07:10.964 [DEBUG] [Thread-195338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:07:10.965 [DEBUG] [Thread-195338] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:07:10.966 [DEBUG] [Thread-195338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:07:10.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:07:10.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:07:11.020 [DEBUG] [Thread-195338] [transport.py] [_log()] userauth is OK
2026-02-15T01:07:11.021 [DEBUG] [Thread-195338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:07:11.021 [DEBUG] [Thread-195338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:07:11.021 [DEBUG] [Thread-195338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:07:11.021 [DEBUG] [Thread-195338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:07:11.040 [INFO] [Thread-195338] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:07:11.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T01:07:11.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:07:11.422 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:07:11.468 [DEBUG] [Thread-195340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:07:11.912 [DEBUG] [Thread-195338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:07:11.912 [DEBUG] [Thread-195338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:07:11.960 [DEBUG] [Thread-195338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:07:11.961 [DEBUG] [Thread-195338] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:07:11.970 [DEBUG] [Thread-195338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:07:11.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:07:11.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-15T01:07:11.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-15T01:07:12.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:07:12.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:07:12.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:07:12.009 [DEBUG] [Thread-195338] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:07:23.441 [DEBUG] [Thread-195341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:07:27.751 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:07:27.752 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:07:30.061 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:07:38.494 [DEBUG] [Thread-195342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:07:42.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:07:42.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:07:42.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-15T01:07:43.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 7, 17), 3.34, 79.05, 0.0, 45.17, 7.56, 0, 0, 0, 2, 1, 0),)
2026-02-15T01:07:43.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:07:17
2026-02-15T01:07:44.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:07:44.414 [DEBUG] [Thread-195343] [transport.py] [_log()] starting thread (client mode): 0xa2d87910
2026-02-15T01:07:44.415 [DEBUG] [Thread-195343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:07:44.435 [DEBUG] [Thread-195343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:07:44.436 [INFO] [Thread-195343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:07:44.438 [DEBUG] [Thread-195343] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:07:44.439 [DEBUG] [Thread-195343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:07:44.439 [DEBUG] [Thread-195343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:07:44.439 [DEBUG] [Thread-195343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:07:44.439 [DEBUG] [Thread-195343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:07:44.439 [DEBUG] [Thread-195343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:07:44.439 [DEBUG] [Thread-195343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:07:44.439 [DEBUG] [Thread-195343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:07:44.439 [DEBUG] [Thread-195343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:07:44.439 [DEBUG] [Thread-195343] [transport.py] [_log()] client lang: <none>
2026-02-15T01:07:44.439 [DEBUG] [Thread-195343] [transport.py] [_log()] server lang: <none>
2026-02-15T01:07:44.439 [DEBUG] [Thread-195343] [transport.py] [_log()] kex follows: False
2026-02-15T01:07:44.439 [DEBUG] [Thread-195343] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:07:44.439 [DEBUG] [Thread-195343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:07:44.439 [DEBUG] [Thread-195343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:07:44.439 [DEBUG] [Thread-195343] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:07:44.439 [DEBUG] [Thread-195343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:07:44.439 [DEBUG] [Thread-195343] [transport.py] [_log()] Compression: none
2026-02-15T01:07:44.439 [DEBUG] [Thread-195343] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:07:44.447 [DEBUG] [Thread-195343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:07:44.448 [DEBUG] [Thread-195343] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:07:44.448 [DEBUG] [Thread-195343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:07:44.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:07:44.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:07:44.450 [DEBUG] [Thread-195343] [transport.py] [_log()] userauth is OK
2026-02-15T01:07:44.450 [DEBUG] [Thread-195343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:07:44.450 [DEBUG] [Thread-195343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:07:44.450 [DEBUG] [Thread-195343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:07:44.450 [DEBUG] [Thread-195343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:07:44.468 [INFO] [Thread-195343] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:07:44.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:07:45.098 [DEBUG] [Thread-195343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:07:45.099 [DEBUG] [Thread-195343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:07:45.099 [DEBUG] [Thread-195343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:07:45.140 [DEBUG] [Thread-195343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:07:45.140 [DEBUG] [Thread-195343] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:07:45.143 [DEBUG] [Thread-195343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:07:45.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:07:45.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:07:45.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:07:45.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:07:45.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:07:45.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:07:45.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:07:45.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:07:45.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:07:45.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.963304 -999.00   +7.50  33.56     83   +4.80 1 1 2 2 1     0    0 1.91 -37.45 ZNESW 33.6 33.6 139.2 42.7 8.0 -24.2 7.8 -23.3 7.6 -22.4 8.0 -23.5
2026-02-15T01:07:45.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:07:45.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:07:45.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.963304
2026-02-15T01:07:45.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:07:45.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:07:45.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:07:45.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:07:45.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:07:45.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:07:17', tmtdew=3.34, humidity=79.05, cloud=0.0, wind=45.17, temperature=7.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:07:18', seeing=2.02, atlas_timestamp='2026-02-14T23:07:09.466', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, 0.008250000000000313, -0.059749999999999304, -0.0365000000000002, -0.027000000000001023, 0.04125000000000156, 0.02800000000000047, 0.048250000000001236, 0.04749999999999943, 0.03500000000000014, -0.006249999999999645, 0.016000000000000014, 0.07099999999999973, 0.02024999999999899, 0.06299999999999883, 0.058499999999998664, 0.03125, 0.027499999999999858, 0.02749999999999808, 0.03774999999999906, 0.05599999999999916, 0.044249999999998124, 0.048250000000001236, 0.03575000000000017, 0.09399999999999942, 0.016500000000000625, 0.06375000000000064, 0.04349999999999987, 0.0235000000000003, 0.04800000000000182, 0.10000000000000142, 0.12600000000000122, 0.029749999999999943], zp_timestamp='2026-02-14T23:04:00')
2026-02-15T01:07:45.169 [DEBUG] [Thread-195343] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:07:45.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-15T01:07:45.265 [DEBUG] [Thread-195346] [transport.py] [_log()] starting thread (client mode): 0xa2d86f80
2026-02-15T01:07:45.265 [DEBUG] [Thread-195346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:07:45.279 [DEBUG] [Thread-195346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:07:45.279 [INFO] [Thread-195346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:07:45.287 [DEBUG] [Thread-195346] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:07:45.287 [DEBUG] [Thread-195346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:07:45.287 [DEBUG] [Thread-195346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:07:45.287 [DEBUG] [Thread-195346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:07:45.287 [DEBUG] [Thread-195346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:07:45.287 [DEBUG] [Thread-195346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:07:45.287 [DEBUG] [Thread-195346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:07:45.287 [DEBUG] [Thread-195346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:07:45.287 [DEBUG] [Thread-195346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:07:45.287 [DEBUG] [Thread-195346] [transport.py] [_log()] client lang: <none>
2026-02-15T01:07:45.287 [DEBUG] [Thread-195346] [transport.py] [_log()] server lang: <none>
2026-02-15T01:07:45.287 [DEBUG] [Thread-195346] [transport.py] [_log()] kex follows: False
2026-02-15T01:07:45.287 [DEBUG] [Thread-195346] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:07:45.287 [DEBUG] [Thread-195346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:07:45.287 [DEBUG] [Thread-195346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:07:45.287 [DEBUG] [Thread-195346] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:07:45.287 [DEBUG] [Thread-195346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:07:45.287 [DEBUG] [Thread-195346] [transport.py] [_log()] Compression: none
2026-02-15T01:07:45.287 [DEBUG] [Thread-195346] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:07:45.347 [DEBUG] [Thread-195346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:07:45.348 [DEBUG] [Thread-195346] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:07:45.348 [DEBUG] [Thread-195346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:07:45.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:07:45.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:07:45.408 [DEBUG] [Thread-195346] [transport.py] [_log()] userauth is OK
2026-02-15T01:07:45.408 [DEBUG] [Thread-195346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:07:45.408 [DEBUG] [Thread-195346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:07:45.408 [DEBUG] [Thread-195346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:07:45.408 [DEBUG] [Thread-195346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:07:45.427 [INFO] [Thread-195346] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:07:45.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T01:07:45.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:07:46.240 [DEBUG] [Thread-195346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:07:46.241 [DEBUG] [Thread-195346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:07:46.288 [DEBUG] [Thread-195346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:07:46.289 [DEBUG] [Thread-195346] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:07:46.298 [DEBUG] [Thread-195346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:07:46.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:07:46.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-15T01:07:46.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-15T01:07:46.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:07:46.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:07:46.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:07:46.334 [DEBUG] [Thread-195346] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:07:48.780 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:07:53.531 [DEBUG] [Thread-195348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:08:07.535 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:08:08.592 [DEBUG] [Thread-195349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:08:11.536 [DEBUG] [Thread-195350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:08:16.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:08:16.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:08:16.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-15T01:08:18.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 7, 53), 3.33, 79.61, 0.0, 39.56, 7.63, 0, 0, 0, 2, 0, 0),)
2026-02-15T01:08:18.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:07:53
2026-02-15T01:08:18.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:08:18.727 [DEBUG] [Thread-195351] [transport.py] [_log()] starting thread (client mode): 0xa57d6320
2026-02-15T01:08:18.727 [DEBUG] [Thread-195351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:08:18.747 [DEBUG] [Thread-195351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:08:18.747 [INFO] [Thread-195351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:08:18.750 [DEBUG] [Thread-195351] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:08:18.750 [DEBUG] [Thread-195351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:08:18.750 [DEBUG] [Thread-195351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:08:18.750 [DEBUG] [Thread-195351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:08:18.750 [DEBUG] [Thread-195351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:08:18.750 [DEBUG] [Thread-195351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:08:18.750 [DEBUG] [Thread-195351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:08:18.750 [DEBUG] [Thread-195351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:08:18.750 [DEBUG] [Thread-195351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:08:18.750 [DEBUG] [Thread-195351] [transport.py] [_log()] client lang: <none>
2026-02-15T01:08:18.750 [DEBUG] [Thread-195351] [transport.py] [_log()] server lang: <none>
2026-02-15T01:08:18.750 [DEBUG] [Thread-195351] [transport.py] [_log()] kex follows: False
2026-02-15T01:08:18.750 [DEBUG] [Thread-195351] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:08:18.751 [DEBUG] [Thread-195351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:08:18.751 [DEBUG] [Thread-195351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:08:18.751 [DEBUG] [Thread-195351] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:08:18.751 [DEBUG] [Thread-195351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:08:18.751 [DEBUG] [Thread-195351] [transport.py] [_log()] Compression: none
2026-02-15T01:08:18.751 [DEBUG] [Thread-195351] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:08:18.768 [DEBUG] [Thread-195351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:08:18.769 [DEBUG] [Thread-195351] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:08:18.769 [DEBUG] [Thread-195351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:08:18.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:08:18.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:08:18.771 [DEBUG] [Thread-195351] [transport.py] [_log()] userauth is OK
2026-02-15T01:08:18.772 [DEBUG] [Thread-195351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:08:18.772 [DEBUG] [Thread-195351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:08:18.772 [DEBUG] [Thread-195351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:08:18.772 [DEBUG] [Thread-195351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:08:18.786 [INFO] [Thread-195351] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:08:18.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:08:19.568 [DEBUG] [Thread-195351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:08:19.569 [DEBUG] [Thread-195351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:08:19.569 [DEBUG] [Thread-195351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:08:19.609 [DEBUG] [Thread-195351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:08:19.610 [DEBUG] [Thread-195351] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:08:19.613 [DEBUG] [Thread-195351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:08:19.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:08:19.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:08:19.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:08:19.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:08:19.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:08:19.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:08:19.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:08:19.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:08:19.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:08:19.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.963651 -999.00   +7.50  26.78     83   +4.80 1 1 1 2 1     0    0 1.90 -38.19 ZNESW 26.8 26.8 138.8 41.0 8.0 -24.2 7.8 -23.2 7.6 -22.2 8.0 -23.4
2026-02-15T01:08:19.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:08:19.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:08:19.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.963651
2026-02-15T01:08:19.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:08:19.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:08:19.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:08:19.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:08:19.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:08:19.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:07:53', tmtdew=3.33, humidity=79.61, cloud=0.0, wind=39.56, temperature=7.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:07:53', seeing=2.46, atlas_timestamp='2026-02-14T23:07:39.446', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, 0.008250000000000313, -0.059749999999999304, -0.0365000000000002, -0.027000000000001023, 0.04125000000000156, 0.02800000000000047, 0.048250000000001236, 0.04749999999999943, 0.03500000000000014, -0.006249999999999645, 0.016000000000000014, 0.07099999999999973, 0.02024999999999899, 0.06299999999999883, 0.058499999999998664, 0.03125, 0.027499999999999858, 0.02749999999999808, 0.03774999999999906, 0.05599999999999916, 0.044249999999998124, 0.048250000000001236, 0.03575000000000017, 0.09399999999999942, 0.016500000000000625, 0.06375000000000064, 0.04349999999999987, 0.0235000000000003, 0.04800000000000182, 0.10000000000000142, 0.12600000000000122, 0.029749999999999943], zp_timestamp='2026-02-14T23:04:00')
2026-02-15T01:08:19.638 [DEBUG] [Thread-195351] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:08:19.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-15T01:08:19.737 [DEBUG] [Thread-195354] [transport.py] [_log()] starting thread (client mode): 0xa2d031f0
2026-02-15T01:08:19.737 [DEBUG] [Thread-195354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:08:19.751 [DEBUG] [Thread-195354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:08:19.752 [INFO] [Thread-195354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:08:19.760 [DEBUG] [Thread-195354] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:08:19.761 [DEBUG] [Thread-195354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:08:19.761 [DEBUG] [Thread-195354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:08:19.761 [DEBUG] [Thread-195354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:08:19.761 [DEBUG] [Thread-195354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:08:19.761 [DEBUG] [Thread-195354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:08:19.761 [DEBUG] [Thread-195354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:08:19.761 [DEBUG] [Thread-195354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:08:19.762 [DEBUG] [Thread-195354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:08:19.762 [DEBUG] [Thread-195354] [transport.py] [_log()] client lang: <none>
2026-02-15T01:08:19.762 [DEBUG] [Thread-195354] [transport.py] [_log()] server lang: <none>
2026-02-15T01:08:19.762 [DEBUG] [Thread-195354] [transport.py] [_log()] kex follows: False
2026-02-15T01:08:19.762 [DEBUG] [Thread-195354] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:08:19.762 [DEBUG] [Thread-195354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:08:19.762 [DEBUG] [Thread-195354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:08:19.763 [DEBUG] [Thread-195354] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:08:19.763 [DEBUG] [Thread-195354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:08:19.763 [DEBUG] [Thread-195354] [transport.py] [_log()] Compression: none
2026-02-15T01:08:19.763 [DEBUG] [Thread-195354] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:08:19.817 [DEBUG] [Thread-195354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:08:19.819 [DEBUG] [Thread-195354] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:08:19.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:08:19.820 [DEBUG] [Thread-195354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:08:19.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:08:19.873 [DEBUG] [Thread-195354] [transport.py] [_log()] userauth is OK
2026-02-15T01:08:19.873 [DEBUG] [Thread-195354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:08:19.873 [DEBUG] [Thread-195354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:08:19.873 [DEBUG] [Thread-195354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:08:19.873 [DEBUG] [Thread-195354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:08:19.892 [INFO] [Thread-195354] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:08:19.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-15T01:08:19.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:08:20.719 [DEBUG] [Thread-195354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:08:20.719 [DEBUG] [Thread-195354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:08:20.768 [DEBUG] [Thread-195354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:08:20.768 [DEBUG] [Thread-195354] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:08:20.777 [DEBUG] [Thread-195354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:08:20.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:08:20.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-15T01:08:20.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:08:20.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:08:20.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:08:20.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:08:20.821 [DEBUG] [Thread-195354] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:08:23.627 [DEBUG] [Thread-195356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:08:26.195 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:08:27.952 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:08:27.954 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:08:38.676 [DEBUG] [Thread-195357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:08:44.960 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:08:50.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:08:50.828 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:08:50.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-15T01:08:53.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 8, 29), 3.32, 79.65, 0.0, 41.64, 7.6, 0, 0, 0, 2, 0, 0),)
2026-02-15T01:08:53.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:08:29
2026-02-15T01:08:53.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:08:53.713 [DEBUG] [Thread-195358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:08:53.773 [DEBUG] [Thread-195359] [transport.py] [_log()] starting thread (client mode): 0xa2d02740
2026-02-15T01:08:53.774 [DEBUG] [Thread-195359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:08:53.794 [DEBUG] [Thread-195359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:08:53.795 [INFO] [Thread-195359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:08:53.798 [DEBUG] [Thread-195359] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:08:53.798 [DEBUG] [Thread-195359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:08:53.798 [DEBUG] [Thread-195359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:08:53.799 [DEBUG] [Thread-195359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:08:53.799 [DEBUG] [Thread-195359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:08:53.799 [DEBUG] [Thread-195359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:08:53.799 [DEBUG] [Thread-195359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:08:53.799 [DEBUG] [Thread-195359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:08:53.799 [DEBUG] [Thread-195359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:08:53.799 [DEBUG] [Thread-195359] [transport.py] [_log()] client lang: <none>
2026-02-15T01:08:53.799 [DEBUG] [Thread-195359] [transport.py] [_log()] server lang: <none>
2026-02-15T01:08:53.799 [DEBUG] [Thread-195359] [transport.py] [_log()] kex follows: False
2026-02-15T01:08:53.799 [DEBUG] [Thread-195359] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:08:53.799 [DEBUG] [Thread-195359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:08:53.799 [DEBUG] [Thread-195359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:08:53.799 [DEBUG] [Thread-195359] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:08:53.799 [DEBUG] [Thread-195359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:08:53.799 [DEBUG] [Thread-195359] [transport.py] [_log()] Compression: none
2026-02-15T01:08:53.799 [DEBUG] [Thread-195359] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:08:53.817 [DEBUG] [Thread-195359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:08:53.818 [DEBUG] [Thread-195359] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:08:53.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:08:53.819 [DEBUG] [Thread-195359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:08:53.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:08:53.821 [DEBUG] [Thread-195359] [transport.py] [_log()] userauth is OK
2026-02-15T01:08:53.821 [DEBUG] [Thread-195359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:08:53.822 [DEBUG] [Thread-195359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:08:53.822 [DEBUG] [Thread-195359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:08:53.822 [DEBUG] [Thread-195359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:08:53.846 [INFO] [Thread-195359] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:08:53.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:08:54.494 [DEBUG] [Thread-195359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:08:54.495 [DEBUG] [Thread-195359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:08:54.495 [DEBUG] [Thread-195359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:08:54.535 [DEBUG] [Thread-195359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:08:54.536 [DEBUG] [Thread-195359] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:08:54.539 [DEBUG] [Thread-195359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:08:54.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:08:54.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:08:54.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:08:54.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:08:54.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:08:54.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:08:54.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:08:54.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:08:54.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:08:54.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.963998 -999.00   +7.50  28.75     83   +4.90 1 1 1 2 1     0    0 1.82 -38.33 ZNESW 28.8 28.8 150.0 41.8 8.0 -24.1 7.8 -23.3 7.6 -22.3 7.9 -23.6
2026-02-15T01:08:54.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:08:54.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:08:54.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.963998
2026-02-15T01:08:54.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:08:54.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:08:54.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:08:54.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:08:54.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:08:54.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:08:29', tmtdew=3.32, humidity=79.65, cloud=0.0, wind=41.64, temperature=7.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:08:29', seeing=2.46, atlas_timestamp='2026-02-14T23:08:09.427', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, 0.008250000000000313, -0.059749999999999304, -0.0365000000000002, -0.027000000000001023, 0.04125000000000156, 0.02800000000000047, 0.048250000000001236, 0.04749999999999943, 0.03500000000000014, -0.006249999999999645, 0.016000000000000014, 0.07099999999999973, 0.02024999999999899, 0.06299999999999883, 0.058499999999998664, 0.03125, 0.027499999999999858, 0.02749999999999808, 0.03774999999999906, 0.05599999999999916, 0.044249999999998124, 0.048250000000001236, 0.03575000000000017, 0.09399999999999942, 0.016500000000000625, 0.06375000000000064, 0.04349999999999987, 0.0235000000000003, 0.04800000000000182, 0.10000000000000142, 0.12600000000000122, 0.029749999999999943], zp_timestamp='2026-02-14T23:04:00')
2026-02-15T01:08:54.566 [DEBUG] [Thread-195359] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:08:54.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-15T01:08:54.662 [DEBUG] [Thread-195362] [transport.py] [_log()] starting thread (client mode): 0xa2d6a860
2026-02-15T01:08:54.663 [DEBUG] [Thread-195362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:08:54.677 [DEBUG] [Thread-195362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:08:54.677 [INFO] [Thread-195362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:08:54.685 [DEBUG] [Thread-195362] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:08:54.685 [DEBUG] [Thread-195362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:08:54.685 [DEBUG] [Thread-195362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:08:54.685 [DEBUG] [Thread-195362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:08:54.685 [DEBUG] [Thread-195362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:08:54.685 [DEBUG] [Thread-195362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:08:54.686 [DEBUG] [Thread-195362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:08:54.686 [DEBUG] [Thread-195362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:08:54.686 [DEBUG] [Thread-195362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:08:54.686 [DEBUG] [Thread-195362] [transport.py] [_log()] client lang: <none>
2026-02-15T01:08:54.686 [DEBUG] [Thread-195362] [transport.py] [_log()] server lang: <none>
2026-02-15T01:08:54.686 [DEBUG] [Thread-195362] [transport.py] [_log()] kex follows: False
2026-02-15T01:08:54.686 [DEBUG] [Thread-195362] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:08:54.686 [DEBUG] [Thread-195362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:08:54.686 [DEBUG] [Thread-195362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:08:54.686 [DEBUG] [Thread-195362] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:08:54.686 [DEBUG] [Thread-195362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:08:54.686 [DEBUG] [Thread-195362] [transport.py] [_log()] Compression: none
2026-02-15T01:08:54.686 [DEBUG] [Thread-195362] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:08:54.745 [DEBUG] [Thread-195362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:08:54.746 [DEBUG] [Thread-195362] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:08:54.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:08:54.747 [DEBUG] [Thread-195362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:08:54.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:08:54.801 [DEBUG] [Thread-195362] [transport.py] [_log()] userauth is OK
2026-02-15T01:08:54.802 [DEBUG] [Thread-195362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:08:54.802 [DEBUG] [Thread-195362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:08:54.802 [DEBUG] [Thread-195362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:08:54.802 [DEBUG] [Thread-195362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:08:54.821 [INFO] [Thread-195362] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:08:54.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-15T01:08:54.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:08:55.618 [DEBUG] [Thread-195362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:08:55.618 [DEBUG] [Thread-195362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:08:55.666 [DEBUG] [Thread-195362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:08:55.667 [DEBUG] [Thread-195362] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:08:55.676 [DEBUG] [Thread-195362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:08:55.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:08:55.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-15T01:08:55.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-15T01:08:55.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:08:55.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:08:55.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:08:55.712 [DEBUG] [Thread-195362] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:09:03.689 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:09:08.745 [DEBUG] [Thread-195364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:09:11.610 [DEBUG] [Thread-195365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:09:22.385 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:09:23.795 [DEBUG] [Thread-195366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:09:25.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:09:25.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:09:25.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:09:27.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 9, 4), 3.31, 79.7, 0.0, 39.45, 7.61, 0, 0, 0, 2, 0, 0),)
2026-02-15T01:09:27.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:09:04
2026-02-15T01:09:27.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:09:28.096 [DEBUG] [Thread-195367] [transport.py] [_log()] starting thread (client mode): 0xa2d6f370
2026-02-15T01:09:28.096 [DEBUG] [Thread-195367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:09:28.115 [DEBUG] [Thread-195367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:09:28.115 [INFO] [Thread-195367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:09:28.116 [DEBUG] [Thread-195367] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:09:28.116 [DEBUG] [Thread-195367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:09:28.116 [DEBUG] [Thread-195367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:09:28.116 [DEBUG] [Thread-195367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:09:28.116 [DEBUG] [Thread-195367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:09:28.116 [DEBUG] [Thread-195367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:09:28.116 [DEBUG] [Thread-195367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:09:28.117 [DEBUG] [Thread-195367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:09:28.117 [DEBUG] [Thread-195367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:09:28.117 [DEBUG] [Thread-195367] [transport.py] [_log()] client lang: <none>
2026-02-15T01:09:28.117 [DEBUG] [Thread-195367] [transport.py] [_log()] server lang: <none>
2026-02-15T01:09:28.117 [DEBUG] [Thread-195367] [transport.py] [_log()] kex follows: False
2026-02-15T01:09:28.117 [DEBUG] [Thread-195367] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:09:28.117 [DEBUG] [Thread-195367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:09:28.117 [DEBUG] [Thread-195367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:09:28.117 [DEBUG] [Thread-195367] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:09:28.117 [DEBUG] [Thread-195367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:09:28.117 [DEBUG] [Thread-195367] [transport.py] [_log()] Compression: none
2026-02-15T01:09:28.117 [DEBUG] [Thread-195367] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:09:28.132 [DEBUG] [Thread-195367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:09:28.133 [DEBUG] [Thread-195367] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:09:28.133 [DEBUG] [Thread-195367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:09:28.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:09:28.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:09:28.136 [DEBUG] [Thread-195367] [transport.py] [_log()] userauth is OK
2026-02-15T01:09:28.136 [DEBUG] [Thread-195367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:09:28.136 [DEBUG] [Thread-195367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:09:28.136 [DEBUG] [Thread-195367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:09:28.137 [DEBUG] [Thread-195367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:09:28.154 [INFO] [Thread-195367] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:09:28.154 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:09:28.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:09:28.155 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:09:28.804 [DEBUG] [Thread-195367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:09:28.805 [DEBUG] [Thread-195367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:09:28.805 [DEBUG] [Thread-195367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:09:28.845 [DEBUG] [Thread-195367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:09:28.846 [DEBUG] [Thread-195367] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:09:28.849 [DEBUG] [Thread-195367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:09:28.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:09:28.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:09:28.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:09:28.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:09:28.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:09:28.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:09:28.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:09:28.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:09:28.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:09:28.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.964345 -999.00   +7.50  32.25     83   +4.80 1 1 2 2 1     0    0 1.68 -40.96 ZNESW 32.2 32.2 154.4 41.3 8.0 -24.2 7.8 -23.3 7.6 -22.3 8.0 -23.5
2026-02-15T01:09:28.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:09:28.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:09:28.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.964345
2026-02-15T01:09:28.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:09:28.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:09:28.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:09:28.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:09:28.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:09:28.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:09:04', tmtdew=3.31, humidity=79.7, cloud=0.0, wind=39.45, temperature=7.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:09:04', seeing=2.46, atlas_timestamp='2026-02-14T23:08:39.408', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, 0.008250000000000313, -0.059749999999999304, -0.0365000000000002, -0.027000000000001023, 0.04125000000000156, 0.02800000000000047, 0.048250000000001236, 0.04749999999999943, 0.03500000000000014, -0.006249999999999645, 0.016000000000000014, 0.07099999999999973, 0.02024999999999899, 0.06299999999999883, 0.058499999999998664, 0.03125, 0.027499999999999858, 0.02749999999999808, 0.03774999999999906, 0.05599999999999916, 0.044249999999998124, 0.048250000000001236, 0.03575000000000017, 0.09399999999999942, 0.016500000000000625, 0.06375000000000064, 0.04349999999999987, 0.0235000000000003, 0.04800000000000182, 0.10000000000000142, 0.12600000000000122, 0.029749999999999943], zp_timestamp='2026-02-14T23:07:00')
2026-02-15T01:09:28.878 [DEBUG] [Thread-195367] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:09:28.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-15T01:09:28.973 [DEBUG] [Thread-195370] [transport.py] [_log()] starting thread (client mode): 0xa2d03460
2026-02-15T01:09:28.973 [DEBUG] [Thread-195370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:09:28.988 [DEBUG] [Thread-195370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:09:28.988 [INFO] [Thread-195370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:09:28.996 [DEBUG] [Thread-195370] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:09:28.996 [DEBUG] [Thread-195370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:09:28.996 [DEBUG] [Thread-195370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:09:28.996 [DEBUG] [Thread-195370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:09:28.996 [DEBUG] [Thread-195370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:09:28.996 [DEBUG] [Thread-195370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:09:28.996 [DEBUG] [Thread-195370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:09:28.996 [DEBUG] [Thread-195370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:09:28.996 [DEBUG] [Thread-195370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:09:28.997 [DEBUG] [Thread-195370] [transport.py] [_log()] client lang: <none>
2026-02-15T01:09:28.997 [DEBUG] [Thread-195370] [transport.py] [_log()] server lang: <none>
2026-02-15T01:09:28.997 [DEBUG] [Thread-195370] [transport.py] [_log()] kex follows: False
2026-02-15T01:09:28.997 [DEBUG] [Thread-195370] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:09:28.997 [DEBUG] [Thread-195370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:09:28.997 [DEBUG] [Thread-195370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:09:28.997 [DEBUG] [Thread-195370] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:09:28.997 [DEBUG] [Thread-195370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:09:28.997 [DEBUG] [Thread-195370] [transport.py] [_log()] Compression: none
2026-02-15T01:09:28.997 [DEBUG] [Thread-195370] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:09:29.053 [DEBUG] [Thread-195370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:09:29.053 [DEBUG] [Thread-195370] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:09:29.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:09:29.055 [DEBUG] [Thread-195370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:09:29.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:09:29.109 [DEBUG] [Thread-195370] [transport.py] [_log()] userauth is OK
2026-02-15T01:09:29.110 [DEBUG] [Thread-195370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:09:29.110 [DEBUG] [Thread-195370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:09:29.110 [DEBUG] [Thread-195370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:09:29.110 [DEBUG] [Thread-195370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:09:29.129 [INFO] [Thread-195370] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:09:29.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-15T01:09:29.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:09:29.917 [DEBUG] [Thread-195370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:09:29.917 [DEBUG] [Thread-195370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:09:29.965 [DEBUG] [Thread-195370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:09:29.966 [DEBUG] [Thread-195370] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:09:29.975 [DEBUG] [Thread-195370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:09:29.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:09: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')
2026-02-15T01:09:29.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-15T01:09:30.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:09:30.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:09:30.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:09:30.010 [DEBUG] [Thread-195370] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:09:38.842 [DEBUG] [Thread-195372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:09:41.040 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:09:53.892 [DEBUG] [Thread-195373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:09:59.828 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:10:00.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:10:00.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:10:00.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:10:01.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 9, 39), 3.49, 78.53, 0.0, 48.09, 7.89, 0, 0, 0, 2, 1, 0),)
2026-02-15T01:10:01.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:09:39
2026-02-15T01:10:02.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:10:02.380 [DEBUG] [Thread-195374] [transport.py] [_log()] starting thread (client mode): 0xa2d00f40
2026-02-15T01:10:02.380 [DEBUG] [Thread-195374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:10:02.399 [DEBUG] [Thread-195374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:10:02.399 [INFO] [Thread-195374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:10:02.402 [DEBUG] [Thread-195374] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:10:02.402 [DEBUG] [Thread-195374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:10:02.402 [DEBUG] [Thread-195374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:10:02.402 [DEBUG] [Thread-195374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:10:02.402 [DEBUG] [Thread-195374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:10:02.402 [DEBUG] [Thread-195374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:10:02.402 [DEBUG] [Thread-195374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:10:02.402 [DEBUG] [Thread-195374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:10:02.402 [DEBUG] [Thread-195374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:10:02.402 [DEBUG] [Thread-195374] [transport.py] [_log()] client lang: <none>
2026-02-15T01:10:02.402 [DEBUG] [Thread-195374] [transport.py] [_log()] server lang: <none>
2026-02-15T01:10:02.402 [DEBUG] [Thread-195374] [transport.py] [_log()] kex follows: False
2026-02-15T01:10:02.402 [DEBUG] [Thread-195374] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:10:02.402 [DEBUG] [Thread-195374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:10:02.402 [DEBUG] [Thread-195374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:10:02.403 [DEBUG] [Thread-195374] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:10:02.403 [DEBUG] [Thread-195374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:10:02.403 [DEBUG] [Thread-195374] [transport.py] [_log()] Compression: none
2026-02-15T01:10:02.403 [DEBUG] [Thread-195374] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:10:02.410 [DEBUG] [Thread-195374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:10:02.410 [DEBUG] [Thread-195374] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:10:02.410 [DEBUG] [Thread-195374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:10:02.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:10:02.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:10:02.411 [DEBUG] [Thread-195374] [transport.py] [_log()] userauth is OK
2026-02-15T01:10:02.412 [DEBUG] [Thread-195374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:10:02.412 [DEBUG] [Thread-195374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:10:02.412 [DEBUG] [Thread-195374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:10:02.412 [DEBUG] [Thread-195374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:10:02.423 [INFO] [Thread-195374] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:10:02.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:10:08.027 [DEBUG] [Thread-195374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:10:08.027 [DEBUG] [Thread-195374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:10:08.028 [DEBUG] [Thread-195374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:10:08.068 [DEBUG] [Thread-195374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:10:08.068 [DEBUG] [Thread-195374] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:10:08.072 [DEBUG] [Thread-195374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:10:08.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:10:08.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:10:08.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:10:08.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:10:08.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:10:08.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:10:08.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:10:08.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:10:08.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:10:08.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.964692 -999.00   +7.40  28.01     83   +4.80 1 1 1 2 1     0    0 1.71 -40.40 ZNESW 28.0 28.0 147.6 45.7 8.0 -24.2 7.8 -23.2 7.5 -22.2 8.0 -23.5
2026-02-15T01:10:08.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:10:08.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:10:08.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.964692
2026-02-15T01:10:08.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:10:08.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:10:08.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:10:08.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:10:08.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:10:08.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:09:39', tmtdew=3.49, humidity=78.53, cloud=0.0, wind=48.09, temperature=7.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:09:40', seeing=2.48, atlas_timestamp='2026-02-14T23:09:09.389', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, 0.008250000000000313, -0.059749999999999304, -0.0365000000000002, -0.027000000000001023, 0.04125000000000156, 0.02800000000000047, 0.048250000000001236, 0.04749999999999943, 0.03500000000000014, -0.006249999999999645, 0.016000000000000014, 0.07099999999999973, 0.02024999999999899, 0.06299999999999883, 0.058499999999998664, 0.03125, 0.027499999999999858, 0.02749999999999808, 0.03774999999999906, 0.05599999999999916, 0.044249999999998124, 0.048250000000001236, 0.03575000000000017, 0.09399999999999942, 0.016500000000000625, 0.06375000000000064, 0.04349999999999987, 0.0235000000000003, 0.04800000000000182, 0.10000000000000142, 0.12600000000000122, 0.029749999999999943], zp_timestamp='2026-02-14T23:07:00')
2026-02-15T01:10:08.211 [DEBUG] [Thread-195374] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:10:08.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-15T01:10:08.307 [DEBUG] [Thread-195377] [transport.py] [_log()] starting thread (client mode): 0xa2d78ac0
2026-02-15T01:10:08.307 [DEBUG] [Thread-195377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:10:08.322 [DEBUG] [Thread-195377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:10:08.322 [INFO] [Thread-195377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:10:08.330 [DEBUG] [Thread-195377] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:10:08.330 [DEBUG] [Thread-195377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:10:08.330 [DEBUG] [Thread-195377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:10:08.330 [DEBUG] [Thread-195377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:10:08.330 [DEBUG] [Thread-195377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:10:08.330 [DEBUG] [Thread-195377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:10:08.330 [DEBUG] [Thread-195377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:10:08.330 [DEBUG] [Thread-195377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:10:08.330 [DEBUG] [Thread-195377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:10:08.330 [DEBUG] [Thread-195377] [transport.py] [_log()] client lang: <none>
2026-02-15T01:10:08.330 [DEBUG] [Thread-195377] [transport.py] [_log()] server lang: <none>
2026-02-15T01:10:08.330 [DEBUG] [Thread-195377] [transport.py] [_log()] kex follows: False
2026-02-15T01:10:08.330 [DEBUG] [Thread-195377] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:10:08.330 [DEBUG] [Thread-195377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:10:08.331 [DEBUG] [Thread-195377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:10:08.331 [DEBUG] [Thread-195377] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:10:08.331 [DEBUG] [Thread-195377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:10:08.331 [DEBUG] [Thread-195377] [transport.py] [_log()] Compression: none
2026-02-15T01:10:08.331 [DEBUG] [Thread-195377] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:10:08.391 [DEBUG] [Thread-195377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:10:08.392 [DEBUG] [Thread-195377] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:10:08.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:10:08.393 [DEBUG] [Thread-195377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:10:08.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:10:08.450 [DEBUG] [Thread-195377] [transport.py] [_log()] userauth is OK
2026-02-15T01:10:08.451 [DEBUG] [Thread-195377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:10:08.451 [DEBUG] [Thread-195377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:10:08.451 [DEBUG] [Thread-195377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:10:08.451 [DEBUG] [Thread-195377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:10:08.470 [INFO] [Thread-195377] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:10:08.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-15T01:10:08.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:10:08.929 [DEBUG] [Thread-195379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:10:09.257 [DEBUG] [Thread-195377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:10:09.257 [DEBUG] [Thread-195377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:10:09.305 [DEBUG] [Thread-195377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:10:09.306 [DEBUG] [Thread-195377] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:10:09.315 [DEBUG] [Thread-195377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:10:09.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:10:09.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-15T01:10:09.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-15T01:10:09.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:10:09.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:10:09.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:10:09.352 [DEBUG] [Thread-195377] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:10:11.678 [DEBUG] [Thread-195380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:10:18.776 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:10:23.990 [DEBUG] [Thread-195381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:10:28.355 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:10:28.356 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:10:37.667 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:10:39.032 [DEBUG] [Thread-195382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:10:39.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:10:39.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:10:39.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-15T01:10:41.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 10, 15), 3.23, 79.88, 0.0, 41.46, 7.53, 0, 0, 0, 2, 0, 0),)
2026-02-15T01:10:41.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:10:15
2026-02-15T01:10:41.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:10:41.941 [DEBUG] [Thread-195383] [transport.py] [_log()] starting thread (client mode): 0xa57432e0
2026-02-15T01:10:41.942 [DEBUG] [Thread-195383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:10:41.962 [DEBUG] [Thread-195383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:10:41.962 [INFO] [Thread-195383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:10:41.964 [DEBUG] [Thread-195383] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:10:41.964 [DEBUG] [Thread-195383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:10:41.964 [DEBUG] [Thread-195383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:10:41.964 [DEBUG] [Thread-195383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:10:41.964 [DEBUG] [Thread-195383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:10:41.964 [DEBUG] [Thread-195383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:10:41.964 [DEBUG] [Thread-195383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:10:41.964 [DEBUG] [Thread-195383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:10:41.964 [DEBUG] [Thread-195383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:10:41.964 [DEBUG] [Thread-195383] [transport.py] [_log()] client lang: <none>
2026-02-15T01:10:41.964 [DEBUG] [Thread-195383] [transport.py] [_log()] server lang: <none>
2026-02-15T01:10:41.964 [DEBUG] [Thread-195383] [transport.py] [_log()] kex follows: False
2026-02-15T01:10:41.964 [DEBUG] [Thread-195383] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:10:41.964 [DEBUG] [Thread-195383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:10:41.964 [DEBUG] [Thread-195383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:10:41.964 [DEBUG] [Thread-195383] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:10:41.964 [DEBUG] [Thread-195383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:10:41.964 [DEBUG] [Thread-195383] [transport.py] [_log()] Compression: none
2026-02-15T01:10:41.964 [DEBUG] [Thread-195383] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:10:41.980 [DEBUG] [Thread-195383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:10:41.981 [DEBUG] [Thread-195383] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:10:41.981 [DEBUG] [Thread-195383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:10:41.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:10:41.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:10:41.983 [DEBUG] [Thread-195383] [transport.py] [_log()] userauth is OK
2026-02-15T01:10:41.983 [DEBUG] [Thread-195383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:10:41.983 [DEBUG] [Thread-195383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:10:41.983 [DEBUG] [Thread-195383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:10:41.983 [DEBUG] [Thread-195383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:10:41.998 [INFO] [Thread-195383] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:10:41.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:10:42.557 [DEBUG] [Thread-195383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:10:42.557 [DEBUG] [Thread-195383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:10:42.557 [DEBUG] [Thread-195383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:10:42.598 [DEBUG] [Thread-195383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:10:42.598 [DEBUG] [Thread-195383] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:10:42.600 [DEBUG] [Thread-195383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:10:42.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:10:42.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:10:42.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:10:42.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:10:42.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:10:42.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:10:42.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:10:42.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:10:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:10:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.965386 -999.00   +7.40  30.75     83   +4.90 1 1 2 2 1     0    0 1.76 -40.79 ZNESW 30.8 30.8 149.9 40.6 8.0 -24.2 7.8 -23.1 7.5 -22.2 8.0 -23.6
2026-02-15T01:10:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:10:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:10:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.965386
2026-02-15T01:10:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:10:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:10:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:10:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:10:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:10:42.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:10:15', tmtdew=3.23, humidity=79.88, cloud=0.0, wind=41.46, temperature=7.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:10:15', seeing=2.38, atlas_timestamp='2026-02-14T23:10:09.350', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, 0.008250000000000313, -0.059749999999999304, -0.0365000000000002, -0.027000000000001023, 0.04125000000000156, 0.02800000000000047, 0.048250000000001236, 0.04749999999999943, 0.03500000000000014, -0.006249999999999645, 0.016000000000000014, 0.07099999999999973, 0.02024999999999899, 0.06299999999999883, 0.058499999999998664, 0.03125, 0.027499999999999858, 0.02749999999999808, 0.03774999999999906, 0.05599999999999916, 0.044249999999998124, 0.048250000000001236, 0.03575000000000017, 0.09399999999999942, 0.016500000000000625, 0.06375000000000064, 0.04349999999999987, 0.0235000000000003, 0.04800000000000182, 0.10000000000000142, 0.12600000000000122, 0.029749999999999943], zp_timestamp='2026-02-14T23:07:00')
2026-02-15T01:10:42.620 [DEBUG] [Thread-195383] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:10:42.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-15T01:10:42.703 [DEBUG] [Thread-195386] [transport.py] [_log()] starting thread (client mode): 0xa2d85f00
2026-02-15T01:10:42.703 [DEBUG] [Thread-195386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:10:42.717 [DEBUG] [Thread-195386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:10:42.717 [INFO] [Thread-195386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:10:42.724 [DEBUG] [Thread-195386] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:10:42.725 [DEBUG] [Thread-195386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:10:42.725 [DEBUG] [Thread-195386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:10:42.725 [DEBUG] [Thread-195386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:10:42.725 [DEBUG] [Thread-195386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:10:42.725 [DEBUG] [Thread-195386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:10:42.725 [DEBUG] [Thread-195386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:10:42.725 [DEBUG] [Thread-195386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:10:42.725 [DEBUG] [Thread-195386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:10:42.725 [DEBUG] [Thread-195386] [transport.py] [_log()] client lang: <none>
2026-02-15T01:10:42.725 [DEBUG] [Thread-195386] [transport.py] [_log()] server lang: <none>
2026-02-15T01:10:42.725 [DEBUG] [Thread-195386] [transport.py] [_log()] kex follows: False
2026-02-15T01:10:42.725 [DEBUG] [Thread-195386] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:10:42.725 [DEBUG] [Thread-195386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:10:42.725 [DEBUG] [Thread-195386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:10:42.725 [DEBUG] [Thread-195386] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:10:42.725 [DEBUG] [Thread-195386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:10:42.725 [DEBUG] [Thread-195386] [transport.py] [_log()] Compression: none
2026-02-15T01:10:42.725 [DEBUG] [Thread-195386] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:10:42.780 [DEBUG] [Thread-195386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:10:42.780 [DEBUG] [Thread-195386] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:10:42.781 [DEBUG] [Thread-195386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:10:42.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:10:42.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:10:42.838 [DEBUG] [Thread-195386] [transport.py] [_log()] userauth is OK
2026-02-15T01:10:42.838 [DEBUG] [Thread-195386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:10:42.838 [DEBUG] [Thread-195386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:10:42.838 [DEBUG] [Thread-195386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:10:42.838 [DEBUG] [Thread-195386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:10:42.851 [INFO] [Thread-195386] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:10:42.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-15T01:10:42.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:10:43.680 [DEBUG] [Thread-195386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:10:43.680 [DEBUG] [Thread-195386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:10:43.728 [DEBUG] [Thread-195386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:10:43.728 [DEBUG] [Thread-195386] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:10:43.736 [DEBUG] [Thread-195386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:10:43.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:10:43.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:10:43.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-15T01:10:43.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:10:43.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:10:43.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:10:43.768 [DEBUG] [Thread-195386] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:10:54.068 [DEBUG] [Thread-195388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:10:56.459 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:11:09.119 [DEBUG] [Thread-195389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:11:11.744 [DEBUG] [Thread-195390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:11:13.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:11:13.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:11:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:11:15.168 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:11:16.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 10, 50), 3.16, 80.46, 0.0, 47.82, 7.6, 0, 1, 0, 2, 1, 0),)
2026-02-15T01:11:16.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:10:50
2026-02-15T01:11:16.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:11:16.685 [DEBUG] [Thread-195391] [transport.py] [_log()] starting thread (client mode): 0xa5743790
2026-02-15T01:11:16.685 [DEBUG] [Thread-195391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:11:16.706 [DEBUG] [Thread-195391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:11:16.706 [INFO] [Thread-195391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:11:16.710 [DEBUG] [Thread-195391] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:11:16.710 [DEBUG] [Thread-195391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:11:16.710 [DEBUG] [Thread-195391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:11:16.710 [DEBUG] [Thread-195391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:11:16.710 [DEBUG] [Thread-195391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:11:16.710 [DEBUG] [Thread-195391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:11:16.710 [DEBUG] [Thread-195391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:11:16.710 [DEBUG] [Thread-195391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:11:16.710 [DEBUG] [Thread-195391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:11:16.710 [DEBUG] [Thread-195391] [transport.py] [_log()] client lang: <none>
2026-02-15T01:11:16.710 [DEBUG] [Thread-195391] [transport.py] [_log()] server lang: <none>
2026-02-15T01:11:16.711 [DEBUG] [Thread-195391] [transport.py] [_log()] kex follows: False
2026-02-15T01:11:16.711 [DEBUG] [Thread-195391] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:11:16.711 [DEBUG] [Thread-195391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:11:16.711 [DEBUG] [Thread-195391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:11:16.711 [DEBUG] [Thread-195391] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:11:16.711 [DEBUG] [Thread-195391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:11:16.711 [DEBUG] [Thread-195391] [transport.py] [_log()] Compression: none
2026-02-15T01:11:16.711 [DEBUG] [Thread-195391] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:11:16.728 [DEBUG] [Thread-195391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:11:16.729 [DEBUG] [Thread-195391] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:11:16.729 [DEBUG] [Thread-195391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:11:16.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:11:16.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:11:16.731 [DEBUG] [Thread-195391] [transport.py] [_log()] userauth is OK
2026-02-15T01:11:16.732 [DEBUG] [Thread-195391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:11:16.732 [DEBUG] [Thread-195391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:11:16.732 [DEBUG] [Thread-195391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:11:16.732 [DEBUG] [Thread-195391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:11:16.755 [INFO] [Thread-195391] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:11:16.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:11:17.419 [DEBUG] [Thread-195391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:11:17.419 [DEBUG] [Thread-195391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:11:17.420 [DEBUG] [Thread-195391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:11:17.460 [DEBUG] [Thread-195391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:11:17.461 [DEBUG] [Thread-195391] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:11:17.464 [DEBUG] [Thread-195391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:11:17.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:11:17.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:11:17.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:11:17.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:11:17.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:11:17.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:11:17.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:11:17.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:11:17.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:11:17.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.965734 -999.00   +7.40  28.28     84   +4.90 1 1 1 2 1     0    0 1.67 -40.67 ZNESW 28.3 28.3 154.8 44.9 8.0 -24.2 7.8 -23.2 7.6 -22.1 8.0 -23.3
2026-02-15T01:11:17.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:11:17.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:11:17.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.965734
2026-02-15T01:11:17.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:11:17.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:11:17.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:11:17.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:11:17.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:11:17.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:10:50', tmtdew=3.16, humidity=80.46, cloud=0.0, wind=47.82, temperature=7.6, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:10:50', seeing=2.38, atlas_timestamp='2026-02-14T23:10:39.418', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, 0.008250000000000313, -0.059749999999999304, -0.0365000000000002, -0.027000000000001023, 0.04125000000000156, 0.02800000000000047, 0.048250000000001236, 0.04749999999999943, 0.03500000000000014, -0.006249999999999645, 0.016000000000000014, 0.07099999999999973, 0.02024999999999899, 0.06299999999999883, 0.058499999999998664, 0.03125, 0.027499999999999858, 0.02749999999999808, 0.03774999999999906, 0.05599999999999916, 0.044249999999998124, 0.048250000000001236, 0.03575000000000017, 0.09399999999999942, 0.016500000000000625, 0.06375000000000064, 0.04349999999999987, 0.0235000000000003, 0.04800000000000182, 0.10000000000000142, 0.12600000000000122, 0.029749999999999943], zp_timestamp='2026-02-14T23:07:00')
2026-02-15T01:11:17.492 [DEBUG] [Thread-195391] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:11: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-15T01:11:17.587 [DEBUG] [Thread-195394] [transport.py] [_log()] starting thread (client mode): 0xa57423b0
2026-02-15T01:11:17.588 [DEBUG] [Thread-195394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:11:17.602 [DEBUG] [Thread-195394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:11:17.602 [INFO] [Thread-195394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:11:17.610 [DEBUG] [Thread-195394] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:11:17.610 [DEBUG] [Thread-195394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:11:17.610 [DEBUG] [Thread-195394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:11:17.610 [DEBUG] [Thread-195394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:11:17.610 [DEBUG] [Thread-195394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:11:17.610 [DEBUG] [Thread-195394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:11:17.610 [DEBUG] [Thread-195394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:11:17.610 [DEBUG] [Thread-195394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:11:17.610 [DEBUG] [Thread-195394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:11:17.610 [DEBUG] [Thread-195394] [transport.py] [_log()] client lang: <none>
2026-02-15T01:11:17.610 [DEBUG] [Thread-195394] [transport.py] [_log()] server lang: <none>
2026-02-15T01:11:17.610 [DEBUG] [Thread-195394] [transport.py] [_log()] kex follows: False
2026-02-15T01:11:17.610 [DEBUG] [Thread-195394] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:11:17.611 [DEBUG] [Thread-195394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:11:17.611 [DEBUG] [Thread-195394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:11:17.611 [DEBUG] [Thread-195394] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:11:17.611 [DEBUG] [Thread-195394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:11:17.611 [DEBUG] [Thread-195394] [transport.py] [_log()] Compression: none
2026-02-15T01:11:17.611 [DEBUG] [Thread-195394] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:11:17.667 [DEBUG] [Thread-195394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:11:17.668 [DEBUG] [Thread-195394] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:11:17.668 [DEBUG] [Thread-195394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:11:17.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:11:17.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:11:17.723 [DEBUG] [Thread-195394] [transport.py] [_log()] userauth is OK
2026-02-15T01:11:17.723 [DEBUG] [Thread-195394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:11:17.724 [DEBUG] [Thread-195394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:11:17.724 [DEBUG] [Thread-195394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:11:17.724 [DEBUG] [Thread-195394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:11:17.747 [INFO] [Thread-195394] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:11:17.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-15T01:11:17.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:11:18.533 [DEBUG] [Thread-195394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:11:18.533 [DEBUG] [Thread-195394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:11:18.582 [DEBUG] [Thread-195394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:11:18.582 [DEBUG] [Thread-195394] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:11:18.591 [DEBUG] [Thread-195394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:11:18.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:11:18.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-15T01:11:18.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-15T01:11:18.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:11:18.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:11:18.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:11:18.625 [DEBUG] [Thread-195394] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:11:24.153 [DEBUG] [Thread-195396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:11:28.557 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:11:28.558 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:11:33.807 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:11:39.211 [DEBUG] [Thread-195397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:11:48.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:11:48.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:11:48.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-15T01:11:50.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 11, 25), 3.15, 80.51, 0.0, 44.29, 7.56, 0, 1, 0, 2, 0, 0),)
2026-02-15T01:11:50.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:11:25
2026-02-15T01:11:50.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:11:50.961 [DEBUG] [Thread-195398] [transport.py] [_log()] starting thread (client mode): 0xa2d19090
2026-02-15T01:11:50.961 [DEBUG] [Thread-195398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:11:50.982 [DEBUG] [Thread-195398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:11:50.982 [INFO] [Thread-195398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:11:50.985 [DEBUG] [Thread-195398] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:11:50.985 [DEBUG] [Thread-195398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:11:50.985 [DEBUG] [Thread-195398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:11:50.985 [DEBUG] [Thread-195398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:11:50.985 [DEBUG] [Thread-195398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:11:50.985 [DEBUG] [Thread-195398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:11:50.985 [DEBUG] [Thread-195398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:11:50.985 [DEBUG] [Thread-195398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:11:50.985 [DEBUG] [Thread-195398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:11:50.985 [DEBUG] [Thread-195398] [transport.py] [_log()] client lang: <none>
2026-02-15T01:11:50.985 [DEBUG] [Thread-195398] [transport.py] [_log()] server lang: <none>
2026-02-15T01:11:50.985 [DEBUG] [Thread-195398] [transport.py] [_log()] kex follows: False
2026-02-15T01:11:50.985 [DEBUG] [Thread-195398] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:11:50.985 [DEBUG] [Thread-195398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:11:50.985 [DEBUG] [Thread-195398] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:11:50.985 [DEBUG] [Thread-195398] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:11:50.985 [DEBUG] [Thread-195398] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:11:50.985 [DEBUG] [Thread-195398] [transport.py] [_log()] Compression: none
2026-02-15T01:11:50.985 [DEBUG] [Thread-195398] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:11:51.001 [DEBUG] [Thread-195398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:11:51.001 [DEBUG] [Thread-195398] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:11:51.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:11:51.001 [DEBUG] [Thread-195398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:11:51.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:11:51.002 [DEBUG] [Thread-195398] [transport.py] [_log()] userauth is OK
2026-02-15T01:11:51.002 [DEBUG] [Thread-195398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:11:51.002 [DEBUG] [Thread-195398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:11:51.002 [DEBUG] [Thread-195398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:11:51.002 [DEBUG] [Thread-195398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:11:51.011 [INFO] [Thread-195398] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:11:51.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:11:51.638 [DEBUG] [Thread-195398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:11:51.638 [DEBUG] [Thread-195398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:11:51.638 [DEBUG] [Thread-195398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:11:51.679 [DEBUG] [Thread-195398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:11:51.679 [DEBUG] [Thread-195398] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:11:51.681 [DEBUG] [Thread-195398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:11:51.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:11:51.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:11:51.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:11:51.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:11:51.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:11:51.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:11:51.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:11:51.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:11:51.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:11:51.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.966081 -999.00   +7.40  29.40     84   +5.00 1 1 1 2 1     0    0 1.61 -42.75 ZNESW 29.4 29.4 146.8 52.3 7.9 -24.2 7.8 -23.1 7.6 -22.2 7.9 -23.5
2026-02-15T01:11:51.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:11:51.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:11:51.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.966081
2026-02-15T01:11:51.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:11:51.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:11:51.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:11:51.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:11:51.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:11:51.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:11:25', tmtdew=3.15, humidity=80.51, cloud=0.0, wind=44.29, temperature=7.56, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:11:26', seeing=2.45, atlas_timestamp='2026-02-14T23:11:09.398', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, 0.008250000000000313, -0.059749999999999304, -0.0365000000000002, -0.027000000000001023, 0.04125000000000156, 0.02800000000000047, 0.048250000000001236, 0.04749999999999943, 0.03500000000000014, -0.006249999999999645, 0.016000000000000014, 0.07099999999999973, 0.02024999999999899, 0.06299999999999883, 0.058499999999998664, 0.03125, 0.027499999999999858, 0.02749999999999808, 0.03774999999999906, 0.05599999999999916, 0.044249999999998124, 0.048250000000001236, 0.03575000000000017, 0.09399999999999942, 0.016500000000000625, 0.06375000000000064, 0.04349999999999987, 0.0235000000000003, 0.04800000000000182, 0.10000000000000142, 0.12600000000000122, 0.029749999999999943], zp_timestamp='2026-02-14T23:07:00')
2026-02-15T01:11:51.706 [DEBUG] [Thread-195398] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:11:51.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-15T01:11:51.807 [DEBUG] [Thread-195401] [transport.py] [_log()] starting thread (client mode): 0xa2d197e0
2026-02-15T01:11:51.807 [DEBUG] [Thread-195401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:11:51.824 [DEBUG] [Thread-195401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:11:51.824 [INFO] [Thread-195401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:11:51.832 [DEBUG] [Thread-195401] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:11:51.832 [DEBUG] [Thread-195401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:11:51.832 [DEBUG] [Thread-195401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:11:51.832 [DEBUG] [Thread-195401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:11:51.832 [DEBUG] [Thread-195401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:11:51.832 [DEBUG] [Thread-195401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:11:51.833 [DEBUG] [Thread-195401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:11:51.833 [DEBUG] [Thread-195401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:11:51.833 [DEBUG] [Thread-195401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:11:51.833 [DEBUG] [Thread-195401] [transport.py] [_log()] client lang: <none>
2026-02-15T01:11:51.833 [DEBUG] [Thread-195401] [transport.py] [_log()] server lang: <none>
2026-02-15T01:11:51.833 [DEBUG] [Thread-195401] [transport.py] [_log()] kex follows: False
2026-02-15T01:11:51.833 [DEBUG] [Thread-195401] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:11:51.833 [DEBUG] [Thread-195401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:11:51.833 [DEBUG] [Thread-195401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:11:51.833 [DEBUG] [Thread-195401] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:11:51.833 [DEBUG] [Thread-195401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:11:51.833 [DEBUG] [Thread-195401] [transport.py] [_log()] Compression: none
2026-02-15T01:11:51.833 [DEBUG] [Thread-195401] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:11:51.891 [DEBUG] [Thread-195401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:11:51.891 [DEBUG] [Thread-195401] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:11:51.892 [DEBUG] [Thread-195401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:11:51.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:11:51.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:11:51.947 [DEBUG] [Thread-195401] [transport.py] [_log()] userauth is OK
2026-02-15T01:11:51.947 [DEBUG] [Thread-195401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:11:51.947 [DEBUG] [Thread-195401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:11:51.947 [DEBUG] [Thread-195401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:11:51.947 [DEBUG] [Thread-195401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:11:51.970 [INFO] [Thread-195401] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:11:51.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-15T01:11:51.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:11:52.545 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:11:52.785 [DEBUG] [Thread-195401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:11:52.786 [DEBUG] [Thread-195401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:11:52.834 [DEBUG] [Thread-195401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:11:52.834 [DEBUG] [Thread-195401] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:11:52.842 [DEBUG] [Thread-195401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:11:52.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:11:52.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-15T01:11:52.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-15T01:11:52.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:11:52.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:11:52.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:11:52.876 [DEBUG] [Thread-195401] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:11:54.245 [DEBUG] [Thread-195403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:12:09.293 [DEBUG] [Thread-195404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:12:11.195 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:12:11.800 [DEBUG] [Thread-195405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:12:22.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:12:22.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:12:22.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-15T01:12:24.329 [DEBUG] [Thread-195406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:12:24.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 12, 1), 3.13, 80.61, 0.0, 46.58, 7.56, 0, 1, 0, 2, 1, 0),)
2026-02-15T01:12:24.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:12:01
2026-02-15T01:12:25.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:12:25.294 [DEBUG] [Thread-195407] [transport.py] [_log()] starting thread (client mode): 0xa2d187c0
2026-02-15T01:12:25.294 [DEBUG] [Thread-195407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:12:25.315 [DEBUG] [Thread-195407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:12:25.315 [INFO] [Thread-195407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:12:25.318 [DEBUG] [Thread-195407] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:12:25.318 [DEBUG] [Thread-195407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:12:25.318 [DEBUG] [Thread-195407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:12:25.318 [DEBUG] [Thread-195407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:12:25.318 [DEBUG] [Thread-195407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:12:25.318 [DEBUG] [Thread-195407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:12:25.318 [DEBUG] [Thread-195407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:12:25.318 [DEBUG] [Thread-195407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:12:25.318 [DEBUG] [Thread-195407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:12:25.318 [DEBUG] [Thread-195407] [transport.py] [_log()] client lang: <none>
2026-02-15T01:12:25.319 [DEBUG] [Thread-195407] [transport.py] [_log()] server lang: <none>
2026-02-15T01:12:25.319 [DEBUG] [Thread-195407] [transport.py] [_log()] kex follows: False
2026-02-15T01:12:25.319 [DEBUG] [Thread-195407] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:12:25.319 [DEBUG] [Thread-195407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:12:25.319 [DEBUG] [Thread-195407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:12:25.319 [DEBUG] [Thread-195407] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:12:25.319 [DEBUG] [Thread-195407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:12:25.319 [DEBUG] [Thread-195407] [transport.py] [_log()] Compression: none
2026-02-15T01:12:25.319 [DEBUG] [Thread-195407] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:12:25.336 [DEBUG] [Thread-195407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:12:25.337 [DEBUG] [Thread-195407] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:12:25.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:12:25.338 [DEBUG] [Thread-195407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:12:25.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:12:25.340 [DEBUG] [Thread-195407] [transport.py] [_log()] userauth is OK
2026-02-15T01:12:25.340 [DEBUG] [Thread-195407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:12:25.340 [DEBUG] [Thread-195407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:12:25.340 [DEBUG] [Thread-195407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:12:25.340 [DEBUG] [Thread-195407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:12:25.355 [INFO] [Thread-195407] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:12:25.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:12:25.953 [DEBUG] [Thread-195407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:12:25.953 [DEBUG] [Thread-195407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:12:25.953 [DEBUG] [Thread-195407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:12:25.994 [DEBUG] [Thread-195407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:12:25.995 [DEBUG] [Thread-195407] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:12:25.998 [DEBUG] [Thread-195407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:12:26.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:12:26.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:12:26.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:12:26.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:12:26.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:12:26.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:12:26.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:12:26.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:12:26.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:12:26.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.966428 -999.00   +7.40  31.21     84   +5.00 1 1 2 2 1     0    0 1.54 -42.18 ZNESW 31.2 31.2 155.2 41.8 8.0 -24.2 7.8 -23.2 7.6 -22.3 7.9 -23.2
2026-02-15T01:12:26.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:12:26.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:12:26.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.966428
2026-02-15T01:12:26.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:12:26.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:12:26.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:12:26.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:12:26.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:12:26.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:12:01', tmtdew=3.13, humidity=80.61, cloud=0.0, wind=46.58, temperature=7.56, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:12:02', seeing=2.49, atlas_timestamp='2026-02-14T23:11:39.379', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0027500000000006963, 0.008250000000000313, -0.05025000000000013, -0.010500000000000398, -0.022499999999999076, 0.052250000000000796, 0.018499999999999517, 0.039250000000000895, 0.06349999999999945, 0.05900000000000105, -0.015250000000001762, 0.022999999999999687, 0.07099999999999973, 0.036249999999999005, 0.02999999999999936, 0.04899999999999949, 0.07525000000000048, 0.03950000000000031, 0.027999999999998693, 0.017249999999998877, 0.04949999999999832, 0.06974999999999909, 0.047750000000000625, 0.07375000000000043, 0.09799999999999898, 0.04399999999999871, 0.07174999999999976, 0.02200000000000024, 0.07500000000000107, 0.009500000000000952, 0.06950000000000145, 0.09000000000000163, 0.05424999999999969], zp_timestamp='2026-02-14T23:10:00')
2026-02-15T01:12:26.025 [DEBUG] [Thread-195407] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:12:26.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-15T01:12:26.124 [DEBUG] [Thread-195410] [transport.py] [_log()] starting thread (client mode): 0xa5741de0
2026-02-15T01:12:26.124 [DEBUG] [Thread-195410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:12:26.139 [DEBUG] [Thread-195410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:12:26.139 [INFO] [Thread-195410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:12:26.146 [DEBUG] [Thread-195410] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:12:26.147 [DEBUG] [Thread-195410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:12:26.147 [DEBUG] [Thread-195410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:12:26.147 [DEBUG] [Thread-195410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:12:26.147 [DEBUG] [Thread-195410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:12:26.147 [DEBUG] [Thread-195410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:12:26.147 [DEBUG] [Thread-195410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:12:26.147 [DEBUG] [Thread-195410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:12:26.147 [DEBUG] [Thread-195410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:12:26.147 [DEBUG] [Thread-195410] [transport.py] [_log()] client lang: <none>
2026-02-15T01:12:26.147 [DEBUG] [Thread-195410] [transport.py] [_log()] server lang: <none>
2026-02-15T01:12:26.147 [DEBUG] [Thread-195410] [transport.py] [_log()] kex follows: False
2026-02-15T01:12:26.147 [DEBUG] [Thread-195410] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:12:26.147 [DEBUG] [Thread-195410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:12:26.147 [DEBUG] [Thread-195410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:12:26.147 [DEBUG] [Thread-195410] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:12:26.148 [DEBUG] [Thread-195410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:12:26.148 [DEBUG] [Thread-195410] [transport.py] [_log()] Compression: none
2026-02-15T01:12:26.148 [DEBUG] [Thread-195410] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:12:26.203 [DEBUG] [Thread-195410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:12:26.204 [DEBUG] [Thread-195410] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:12:26.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:12:26.205 [DEBUG] [Thread-195410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:12:26.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:12:26.260 [DEBUG] [Thread-195410] [transport.py] [_log()] userauth is OK
2026-02-15T01:12:26.260 [DEBUG] [Thread-195410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:12:26.260 [DEBUG] [Thread-195410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:12:26.261 [DEBUG] [Thread-195410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:12:26.261 [DEBUG] [Thread-195410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:12:26.280 [INFO] [Thread-195410] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:12:26.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-15T01:12:26.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:12:27.097 [DEBUG] [Thread-195410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:12:27.097 [DEBUG] [Thread-195410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:12:27.145 [DEBUG] [Thread-195410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:12:27.146 [DEBUG] [Thread-195410] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:12:27.155 [DEBUG] [Thread-195410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:12:27.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:12:27.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-15T01:12:27.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-15T01:12:27.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:12:27.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:12:27.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:12:27.200 [DEBUG] [Thread-195410] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:12:28.760 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:12:28.761 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:12:29.864 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:12:39.365 [DEBUG] [Thread-195412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:12:48.723 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:12:54.414 [DEBUG] [Thread-195413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:12:57.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:12:57.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:12:57.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:12:59.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 12, 37), 3.38, 79.23, 0.0, 44.32, 8.26, 0, 0, 0, 2, 0, 0),)
2026-02-15T01:12:59.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:12:37
2026-02-15T01:12:59.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:12:59.990 [DEBUG] [Thread-195414] [transport.py] [_log()] starting thread (client mode): 0xa2d782e0
2026-02-15T01:12:59.990 [DEBUG] [Thread-195414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:13:00.010 [DEBUG] [Thread-195414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:13:00.010 [INFO] [Thread-195414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:13:00.013 [DEBUG] [Thread-195414] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:13:00.014 [DEBUG] [Thread-195414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:13:00.014 [DEBUG] [Thread-195414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:13:00.014 [DEBUG] [Thread-195414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:13:00.014 [DEBUG] [Thread-195414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:13:00.014 [DEBUG] [Thread-195414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:13:00.014 [DEBUG] [Thread-195414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:13:00.014 [DEBUG] [Thread-195414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:13:00.014 [DEBUG] [Thread-195414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:13:00.014 [DEBUG] [Thread-195414] [transport.py] [_log()] client lang: <none>
2026-02-15T01:13:00.014 [DEBUG] [Thread-195414] [transport.py] [_log()] server lang: <none>
2026-02-15T01:13:00.014 [DEBUG] [Thread-195414] [transport.py] [_log()] kex follows: False
2026-02-15T01:13:00.014 [DEBUG] [Thread-195414] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:13:00.014 [DEBUG] [Thread-195414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:13:00.014 [DEBUG] [Thread-195414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:13:00.014 [DEBUG] [Thread-195414] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:13:00.014 [DEBUG] [Thread-195414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:13:00.014 [DEBUG] [Thread-195414] [transport.py] [_log()] Compression: none
2026-02-15T01:13:00.014 [DEBUG] [Thread-195414] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:13:00.029 [DEBUG] [Thread-195414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:13:00.030 [DEBUG] [Thread-195414] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:13:00.030 [DEBUG] [Thread-195414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:13:00.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:13:00.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:13:00.032 [DEBUG] [Thread-195414] [transport.py] [_log()] userauth is OK
2026-02-15T01:13:00.032 [DEBUG] [Thread-195414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:13:00.032 [DEBUG] [Thread-195414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:13:00.033 [DEBUG] [Thread-195414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:13:00.033 [DEBUG] [Thread-195414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:13:00.057 [INFO] [Thread-195414] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:13:00.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:13:00.706 [DEBUG] [Thread-195414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:13:00.706 [DEBUG] [Thread-195414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:13:00.707 [DEBUG] [Thread-195414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:13:00.747 [DEBUG] [Thread-195414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:13:00.747 [DEBUG] [Thread-195414] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:13:00.749 [DEBUG] [Thread-195414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:13:00.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:13:00.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:13:00.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:13:00.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:13:00.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:13:00.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:13:00.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:13:00.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:13:00.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:13:00.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.966775 -999.00   +7.40  34.08     84   +5.00 1 1 2 2 1     0    0 1.55 -44.15 ZNESW 34.1 34.1 163.0 48.8 7.9 -24.2 7.7 -23.3 7.5 -22.2 7.9 -23.4
2026-02-15T01:13:00.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:13:00.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:13:00.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.966775
2026-02-15T01:13:00.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:13:00.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:13:00.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:13:00.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:13:00.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:13:00.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:12:37', tmtdew=3.38, humidity=79.23, cloud=0.0, wind=44.32, temperature=8.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:12:37', seeing=2.21, atlas_timestamp='2026-02-14T23:12:09.360', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0027500000000006963, 0.008250000000000313, -0.05025000000000013, -0.010500000000000398, -0.022499999999999076, 0.052250000000000796, 0.018499999999999517, 0.039250000000000895, 0.06349999999999945, 0.05900000000000105, -0.015250000000001762, 0.022999999999999687, 0.07099999999999973, 0.036249999999999005, 0.02999999999999936, 0.04899999999999949, 0.07525000000000048, 0.03950000000000031, 0.027999999999998693, 0.017249999999998877, 0.04949999999999832, 0.06974999999999909, 0.047750000000000625, 0.07375000000000043, 0.09799999999999898, 0.04399999999999871, 0.07174999999999976, 0.02200000000000024, 0.07500000000000107, 0.009500000000000952, 0.06950000000000145, 0.09000000000000163, 0.05424999999999969], zp_timestamp='2026-02-14T23:10:00')
2026-02-15T01:13:00.774 [DEBUG] [Thread-195414] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:13:00.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T01:13:00.864 [DEBUG] [Thread-195417] [transport.py] [_log()] starting thread (client mode): 0xa2d97880
2026-02-15T01:13:00.864 [DEBUG] [Thread-195417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:13:00.879 [DEBUG] [Thread-195417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:13:00.879 [INFO] [Thread-195417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:13:00.887 [DEBUG] [Thread-195417] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:13:00.887 [DEBUG] [Thread-195417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:13:00.887 [DEBUG] [Thread-195417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:13:00.887 [DEBUG] [Thread-195417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:13:00.887 [DEBUG] [Thread-195417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:13:00.888 [DEBUG] [Thread-195417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:13:00.888 [DEBUG] [Thread-195417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:13:00.888 [DEBUG] [Thread-195417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:13:00.888 [DEBUG] [Thread-195417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:13:00.888 [DEBUG] [Thread-195417] [transport.py] [_log()] client lang: <none>
2026-02-15T01:13:00.888 [DEBUG] [Thread-195417] [transport.py] [_log()] server lang: <none>
2026-02-15T01:13:00.888 [DEBUG] [Thread-195417] [transport.py] [_log()] kex follows: False
2026-02-15T01:13:00.888 [DEBUG] [Thread-195417] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:13:00.888 [DEBUG] [Thread-195417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:13:00.888 [DEBUG] [Thread-195417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:13:00.888 [DEBUG] [Thread-195417] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:13:00.888 [DEBUG] [Thread-195417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:13:00.888 [DEBUG] [Thread-195417] [transport.py] [_log()] Compression: none
2026-02-15T01:13:00.888 [DEBUG] [Thread-195417] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:13:00.944 [DEBUG] [Thread-195417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:13:00.945 [DEBUG] [Thread-195417] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:13:00.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:13:00.946 [DEBUG] [Thread-195417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:13:00.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:13:01.001 [DEBUG] [Thread-195417] [transport.py] [_log()] userauth is OK
2026-02-15T01:13:01.001 [DEBUG] [Thread-195417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:13:01.001 [DEBUG] [Thread-195417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:13:01.001 [DEBUG] [Thread-195417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:13:01.001 [DEBUG] [Thread-195417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:13:01.020 [INFO] [Thread-195417] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:13:01.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-15T01:13:01.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:13:01.841 [DEBUG] [Thread-195417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:13:01.842 [DEBUG] [Thread-195417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:13:01.889 [DEBUG] [Thread-195417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:13:01.890 [DEBUG] [Thread-195417] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:13:01.899 [DEBUG] [Thread-195417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:13:01.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:13: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-15T01:13: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-15T01:13:01.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:13:01.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:13:01.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:13:01.937 [DEBUG] [Thread-195417] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:13:07.414 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:13:09.453 [DEBUG] [Thread-195419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:13:11.876 [DEBUG] [Thread-195420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:13:24.505 [DEBUG] [Thread-195421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:13:26.083 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:13:28.961 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:13:28.963 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:13:31.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:13:31.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:13:31.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-15T01:13:33.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 13, 13), 3.05, 80.8, 0.0, 41.13, 7.51, 0, 1, 0, 2, 0, 0),)
2026-02-15T01:13:33.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:13:13
2026-02-15T01:13:34.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:13:34.375 [DEBUG] [Thread-195422] [transport.py] [_log()] starting thread (client mode): 0xa2d790f0
2026-02-15T01:13:34.375 [DEBUG] [Thread-195422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:13:34.395 [DEBUG] [Thread-195422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:13:34.395 [INFO] [Thread-195422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:13:34.399 [DEBUG] [Thread-195422] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:13:34.399 [DEBUG] [Thread-195422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:13:34.399 [DEBUG] [Thread-195422] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:13:34.399 [DEBUG] [Thread-195422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:13:34.399 [DEBUG] [Thread-195422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:13:34.399 [DEBUG] [Thread-195422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:13:34.399 [DEBUG] [Thread-195422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:13:34.399 [DEBUG] [Thread-195422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:13:34.399 [DEBUG] [Thread-195422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:13:34.399 [DEBUG] [Thread-195422] [transport.py] [_log()] client lang: <none>
2026-02-15T01:13:34.399 [DEBUG] [Thread-195422] [transport.py] [_log()] server lang: <none>
2026-02-15T01:13:34.399 [DEBUG] [Thread-195422] [transport.py] [_log()] kex follows: False
2026-02-15T01:13:34.399 [DEBUG] [Thread-195422] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:13:34.399 [DEBUG] [Thread-195422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:13:34.399 [DEBUG] [Thread-195422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:13:34.399 [DEBUG] [Thread-195422] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:13:34.399 [DEBUG] [Thread-195422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:13:34.399 [DEBUG] [Thread-195422] [transport.py] [_log()] Compression: none
2026-02-15T01:13:34.399 [DEBUG] [Thread-195422] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:13:34.415 [DEBUG] [Thread-195422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:13:34.415 [DEBUG] [Thread-195422] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:13:34.416 [DEBUG] [Thread-195422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:13:34.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:13:34.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:13:34.418 [DEBUG] [Thread-195422] [transport.py] [_log()] userauth is OK
2026-02-15T01:13:34.418 [DEBUG] [Thread-195422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:13:34.418 [DEBUG] [Thread-195422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:13:34.418 [DEBUG] [Thread-195422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:13:34.418 [DEBUG] [Thread-195422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:13:34.443 [INFO] [Thread-195422] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:13:34.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:13:35.233 [DEBUG] [Thread-195422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:13:35.233 [DEBUG] [Thread-195422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:13:35.234 [DEBUG] [Thread-195422] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:13:35.274 [DEBUG] [Thread-195422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:13:35.275 [DEBUG] [Thread-195422] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:13:35.277 [DEBUG] [Thread-195422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:13:35.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:13:35.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:13:35.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:13:35.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:13:35.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:13:35.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:13:35.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:13:35.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:13:35.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:13:35.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.967123 -999.00   +7.40  31.26     84   +5.00 1 1 2 2 1     0    0 1.44 -44.47 ZNESW 31.3 31.3 148.9 49.0 7.9 -24.3 7.8 -23.1 7.5 -22.3 7.9 -23.5
2026-02-15T01:13:35.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:13:35.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:13:35.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.967123
2026-02-15T01:13:35.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:13:35.308 [DEBUG] [Thread-195422] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:13:35.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:13:35.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:13:35.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:13:35.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:13:35.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:13:13', tmtdew=3.05, humidity=80.8, cloud=0.0, wind=41.13, temperature=7.51, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:13:13', seeing=2.56, atlas_timestamp='2026-02-14T23:12:39.427', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0027500000000006963, 0.008250000000000313, -0.05025000000000013, -0.010500000000000398, -0.022499999999999076, 0.052250000000000796, 0.018499999999999517, 0.039250000000000895, 0.06349999999999945, 0.05900000000000105, -0.015250000000001762, 0.022999999999999687, 0.07099999999999973, 0.036249999999999005, 0.02999999999999936, 0.04899999999999949, 0.07525000000000048, 0.03950000000000031, 0.027999999999998693, 0.017249999999998877, 0.04949999999999832, 0.06974999999999909, 0.047750000000000625, 0.07375000000000043, 0.09799999999999898, 0.04399999999999871, 0.07174999999999976, 0.02200000000000024, 0.07500000000000107, 0.009500000000000952, 0.06950000000000145, 0.09000000000000163, 0.05424999999999969], zp_timestamp='2026-02-14T23:10:00')
2026-02-15T01:13:35.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-15T01:13:35.406 [DEBUG] [Thread-195425] [transport.py] [_log()] starting thread (client mode): 0xa2d007c0
2026-02-15T01:13:35.406 [DEBUG] [Thread-195425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:13:35.420 [DEBUG] [Thread-195425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:13:35.420 [INFO] [Thread-195425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:13:35.428 [DEBUG] [Thread-195425] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:13:35.428 [DEBUG] [Thread-195425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:13:35.428 [DEBUG] [Thread-195425] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:13:35.429 [DEBUG] [Thread-195425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:13:35.429 [DEBUG] [Thread-195425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:13:35.429 [DEBUG] [Thread-195425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:13:35.429 [DEBUG] [Thread-195425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:13:35.429 [DEBUG] [Thread-195425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:13:35.429 [DEBUG] [Thread-195425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:13:35.429 [DEBUG] [Thread-195425] [transport.py] [_log()] client lang: <none>
2026-02-15T01:13:35.429 [DEBUG] [Thread-195425] [transport.py] [_log()] server lang: <none>
2026-02-15T01:13:35.429 [DEBUG] [Thread-195425] [transport.py] [_log()] kex follows: False
2026-02-15T01:13:35.430 [DEBUG] [Thread-195425] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:13:35.430 [DEBUG] [Thread-195425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:13:35.430 [DEBUG] [Thread-195425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:13:35.430 [DEBUG] [Thread-195425] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:13:35.430 [DEBUG] [Thread-195425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:13:35.430 [DEBUG] [Thread-195425] [transport.py] [_log()] Compression: none
2026-02-15T01:13:35.430 [DEBUG] [Thread-195425] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:13:35.489 [DEBUG] [Thread-195425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:13:35.490 [DEBUG] [Thread-195425] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:13:35.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:13:35.491 [DEBUG] [Thread-195425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:13:35.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:13:35.545 [DEBUG] [Thread-195425] [transport.py] [_log()] userauth is OK
2026-02-15T01:13:35.545 [DEBUG] [Thread-195425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:13:35.546 [DEBUG] [Thread-195425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:13:35.546 [DEBUG] [Thread-195425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:13:35.546 [DEBUG] [Thread-195425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:13:35.565 [INFO] [Thread-195425] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:13:35.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-15T01:13:35.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:13:36.382 [DEBUG] [Thread-195425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:13:36.382 [DEBUG] [Thread-195425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:13:36.430 [DEBUG] [Thread-195425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:13:36.431 [DEBUG] [Thread-195425] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:13:36.440 [DEBUG] [Thread-195425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:13:36.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:13:36.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-15T01:13: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') -> 00000000
2026-02-15T01:13:36.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:13:36.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:13:36.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:13:36.477 [DEBUG] [Thread-195425] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:13:39.545 [DEBUG] [Thread-195427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:13:44.734 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:13:54.597 [DEBUG] [Thread-195428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:14:03.617 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:14:06.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:14:06.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:14:06.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-15T01:14:08.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 13, 49), 2.98, 81.41, 0.0, 47.02, 7.5, 0, 1, 0, 2, 1, 0),)
2026-02-15T01:14:08.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:13:49
2026-02-15T01:14:08.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:14:08.856 [DEBUG] [Thread-195429] [transport.py] [_log()] starting thread (client mode): 0xa2d79570
2026-02-15T01:14:08.856 [DEBUG] [Thread-195429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:14:08.876 [DEBUG] [Thread-195429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:14:08.876 [INFO] [Thread-195429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:14:08.879 [DEBUG] [Thread-195429] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:14:08.879 [DEBUG] [Thread-195429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:14:08.879 [DEBUG] [Thread-195429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:14:08.879 [DEBUG] [Thread-195429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:14:08.879 [DEBUG] [Thread-195429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:14:08.879 [DEBUG] [Thread-195429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:14:08.880 [DEBUG] [Thread-195429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:14:08.880 [DEBUG] [Thread-195429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:14:08.880 [DEBUG] [Thread-195429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:14:08.880 [DEBUG] [Thread-195429] [transport.py] [_log()] client lang: <none>
2026-02-15T01:14:08.880 [DEBUG] [Thread-195429] [transport.py] [_log()] server lang: <none>
2026-02-15T01:14:08.880 [DEBUG] [Thread-195429] [transport.py] [_log()] kex follows: False
2026-02-15T01:14:08.880 [DEBUG] [Thread-195429] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:14:08.880 [DEBUG] [Thread-195429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:14:08.880 [DEBUG] [Thread-195429] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:14:08.880 [DEBUG] [Thread-195429] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:14:08.880 [DEBUG] [Thread-195429] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:14:08.880 [DEBUG] [Thread-195429] [transport.py] [_log()] Compression: none
2026-02-15T01:14:08.880 [DEBUG] [Thread-195429] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:14:08.897 [DEBUG] [Thread-195429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:14:08.897 [DEBUG] [Thread-195429] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:14:08.898 [DEBUG] [Thread-195429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:14:08.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:14:08.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:14:08.899 [DEBUG] [Thread-195429] [transport.py] [_log()] userauth is OK
2026-02-15T01:14:08.900 [DEBUG] [Thread-195429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:14:08.900 [DEBUG] [Thread-195429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:14:08.900 [DEBUG] [Thread-195429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:14:08.900 [DEBUG] [Thread-195429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:14:08.920 [INFO] [Thread-195429] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:14:08.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:14:09.550 [DEBUG] [Thread-195429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:14:09.550 [DEBUG] [Thread-195429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:14:09.550 [DEBUG] [Thread-195429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:14:09.591 [DEBUG] [Thread-195429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:14:09.592 [DEBUG] [Thread-195429] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:14:09.595 [DEBUG] [Thread-195429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:14:09.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:14:09.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:14:09.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:14:09.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:14:09.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:14:09.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:14:09.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:14:09.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:14:09.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:14:09.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.967817 -999.00   +7.40  25.01     84   +5.00 1 1 1 2 1     0    0 1.51 -43.29 ZNESW 25.0 25.0 148.5 42.0 7.9 -24.1 7.8 -23.3 7.5 -22.2 7.9 -23.5
2026-02-15T01:14:09.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:14:09.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:14:09.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.967817
2026-02-15T01:14:09.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:14:09.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:14:09.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:14:09.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:14:09.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:14:09.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:13:49', tmtdew=2.98, humidity=81.41, cloud=0.0, wind=47.02, temperature=7.5, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:13:49', seeing=2.87, atlas_timestamp='2026-02-14T23:13:39.389', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0027500000000006963, 0.008250000000000313, -0.05025000000000013, -0.010500000000000398, -0.022499999999999076, 0.052250000000000796, 0.018499999999999517, 0.039250000000000895, 0.06349999999999945, 0.05900000000000105, -0.015250000000001762, 0.022999999999999687, 0.07099999999999973, 0.036249999999999005, 0.02999999999999936, 0.04899999999999949, 0.07525000000000048, 0.03950000000000031, 0.027999999999998693, 0.017249999999998877, 0.04949999999999832, 0.06974999999999909, 0.047750000000000625, 0.07375000000000043, 0.09799999999999898, 0.04399999999999871, 0.07174999999999976, 0.02200000000000024, 0.07500000000000107, 0.009500000000000952, 0.06950000000000145, 0.09000000000000163, 0.05424999999999969], zp_timestamp='2026-02-14T23:10:00')
2026-02-15T01:14:09.623 [DEBUG] [Thread-195429] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:14:09.633 [DEBUG] [Thread-195432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:14:09.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-15T01:14:09.720 [DEBUG] [Thread-195433] [transport.py] [_log()] starting thread (client mode): 0xa2d11e70
2026-02-15T01:14:09.721 [DEBUG] [Thread-195433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:14:09.736 [DEBUG] [Thread-195433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:14:09.736 [INFO] [Thread-195433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:14:09.747 [DEBUG] [Thread-195433] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:14:09.747 [DEBUG] [Thread-195433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:14:09.747 [DEBUG] [Thread-195433] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:14:09.748 [DEBUG] [Thread-195433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:14:09.748 [DEBUG] [Thread-195433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:14:09.748 [DEBUG] [Thread-195433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:14:09.748 [DEBUG] [Thread-195433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:14:09.748 [DEBUG] [Thread-195433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:14:09.748 [DEBUG] [Thread-195433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:14:09.748 [DEBUG] [Thread-195433] [transport.py] [_log()] client lang: <none>
2026-02-15T01:14:09.748 [DEBUG] [Thread-195433] [transport.py] [_log()] server lang: <none>
2026-02-15T01:14:09.748 [DEBUG] [Thread-195433] [transport.py] [_log()] kex follows: False
2026-02-15T01:14:09.748 [DEBUG] [Thread-195433] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:14:09.748 [DEBUG] [Thread-195433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:14:09.748 [DEBUG] [Thread-195433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:14:09.748 [DEBUG] [Thread-195433] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:14:09.748 [DEBUG] [Thread-195433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:14:09.748 [DEBUG] [Thread-195433] [transport.py] [_log()] Compression: none
2026-02-15T01:14:09.748 [DEBUG] [Thread-195433] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:14:09.801 [DEBUG] [Thread-195433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:14:09.801 [DEBUG] [Thread-195433] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:14:09.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:14:09.803 [DEBUG] [Thread-195433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:14:09.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:14:09.857 [DEBUG] [Thread-195433] [transport.py] [_log()] userauth is OK
2026-02-15T01:14:09.858 [DEBUG] [Thread-195433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:14:09.858 [DEBUG] [Thread-195433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:14:09.858 [DEBUG] [Thread-195433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:14:09.858 [DEBUG] [Thread-195433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:14:09.878 [INFO] [Thread-195433] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:14:09.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-15T01:14:09.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:14:10.708 [DEBUG] [Thread-195433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:14:10.708 [DEBUG] [Thread-195433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:14:10.757 [DEBUG] [Thread-195433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:14:10.757 [DEBUG] [Thread-195433] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:14:10.766 [DEBUG] [Thread-195433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:14:10.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:14:10.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:14:10.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-15T01:14:10.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:14:10.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:14:10.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:14:10.804 [DEBUG] [Thread-195433] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:14:11.936 [DEBUG] [Thread-195435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:14:22.580 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:14:24.680 [DEBUG] [Thread-195436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:14:29.160 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:14:29.161 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:14:39.713 [DEBUG] [Thread-195437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:14:40.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:14:40.824 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:14:40.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:14:41.277 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:14:42.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 14, 25), 2.96, 81.51, 0.0, 43.19, 7.53, 0, 1, 0, 2, 0, 0),)
2026-02-15T01:14:42.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:14:25
2026-02-15T01:14:43.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:14:43.271 [DEBUG] [Thread-195438] [transport.py] [_log()] starting thread (client mode): 0xa2d94ca0
2026-02-15T01:14:43.271 [DEBUG] [Thread-195438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:14:43.290 [DEBUG] [Thread-195438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:14:43.290 [INFO] [Thread-195438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:14:43.300 [DEBUG] [Thread-195438] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:14:43.300 [DEBUG] [Thread-195438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:14:43.300 [DEBUG] [Thread-195438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:14:43.300 [DEBUG] [Thread-195438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:14:43.300 [DEBUG] [Thread-195438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:14:43.300 [DEBUG] [Thread-195438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:14:43.300 [DEBUG] [Thread-195438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:14:43.300 [DEBUG] [Thread-195438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:14:43.300 [DEBUG] [Thread-195438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:14:43.300 [DEBUG] [Thread-195438] [transport.py] [_log()] client lang: <none>
2026-02-15T01:14:43.300 [DEBUG] [Thread-195438] [transport.py] [_log()] server lang: <none>
2026-02-15T01:14:43.301 [DEBUG] [Thread-195438] [transport.py] [_log()] kex follows: False
2026-02-15T01:14:43.301 [DEBUG] [Thread-195438] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:14:43.301 [DEBUG] [Thread-195438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:14:43.301 [DEBUG] [Thread-195438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:14:43.301 [DEBUG] [Thread-195438] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:14:43.301 [DEBUG] [Thread-195438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:14:43.301 [DEBUG] [Thread-195438] [transport.py] [_log()] Compression: none
2026-02-15T01:14:43.301 [DEBUG] [Thread-195438] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:14:43.320 [DEBUG] [Thread-195438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:14:43.320 [DEBUG] [Thread-195438] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:14:43.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:14:43.321 [DEBUG] [Thread-195438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:14:43.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:14:43.323 [DEBUG] [Thread-195438] [transport.py] [_log()] userauth is OK
2026-02-15T01:14:43.324 [DEBUG] [Thread-195438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:14:43.324 [DEBUG] [Thread-195438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:14:43.324 [DEBUG] [Thread-195438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:14:43.324 [DEBUG] [Thread-195438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:14:43.347 [INFO] [Thread-195438] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:14:43.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:14:44.109 [DEBUG] [Thread-195438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:14:44.110 [DEBUG] [Thread-195438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:14:44.110 [DEBUG] [Thread-195438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:14:44.150 [DEBUG] [Thread-195438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:14:44.150 [DEBUG] [Thread-195438] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:14:44.153 [DEBUG] [Thread-195438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:14:44.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:14:44.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:14:44.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:14:44.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:14:44.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:14:44.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:14:44.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:14:44.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:14:44.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:14:44.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.968164 -999.00   +7.40  33.48     84   +5.00 1 1 2 2 1     0    0 1.35 -47.35 ZNESW 33.5 33.5 146.2 43.0 7.9 -24.2 7.7 -23.3 7.5 -22.3 7.9 -23.4
2026-02-15T01:14:44.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:14:44.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:14:44.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.968164
2026-02-15T01:14:44.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:14:44.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:14:44.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:14:44.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:14:44.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:14:44.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:14:25', tmtdew=2.96, humidity=81.51, cloud=0.0, wind=43.19, temperature=7.53, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:14:25', seeing=2.87, atlas_timestamp='2026-02-14T23:14:09.370', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0027500000000006963, 0.008250000000000313, -0.05025000000000013, -0.010500000000000398, -0.022499999999999076, 0.052250000000000796, 0.018499999999999517, 0.039250000000000895, 0.06349999999999945, 0.05900000000000105, -0.015250000000001762, 0.022999999999999687, 0.07099999999999973, 0.036249999999999005, 0.02999999999999936, 0.04899999999999949, 0.07525000000000048, 0.03950000000000031, 0.027999999999998693, 0.017249999999998877, 0.04949999999999832, 0.06974999999999909, 0.047750000000000625, 0.07375000000000043, 0.09799999999999898, 0.04399999999999871, 0.07174999999999976, 0.02200000000000024, 0.07500000000000107, 0.009500000000000952, 0.06950000000000145, 0.09000000000000163, 0.05424999999999969], zp_timestamp='2026-02-14T23:10:00')
2026-02-15T01:14:44.178 [DEBUG] [Thread-195438] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:14:44.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-15T01:14:44.281 [DEBUG] [Thread-195441] [transport.py] [_log()] starting thread (client mode): 0xa2d6d7e0
2026-02-15T01:14:44.281 [DEBUG] [Thread-195441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:14:44.295 [DEBUG] [Thread-195441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:14:44.295 [INFO] [Thread-195441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:14:44.303 [DEBUG] [Thread-195441] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:14:44.303 [DEBUG] [Thread-195441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:14:44.303 [DEBUG] [Thread-195441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:14:44.303 [DEBUG] [Thread-195441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:14:44.303 [DEBUG] [Thread-195441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:14:44.303 [DEBUG] [Thread-195441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:14:44.303 [DEBUG] [Thread-195441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:14:44.303 [DEBUG] [Thread-195441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:14:44.303 [DEBUG] [Thread-195441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:14:44.303 [DEBUG] [Thread-195441] [transport.py] [_log()] client lang: <none>
2026-02-15T01:14:44.303 [DEBUG] [Thread-195441] [transport.py] [_log()] server lang: <none>
2026-02-15T01:14:44.303 [DEBUG] [Thread-195441] [transport.py] [_log()] kex follows: False
2026-02-15T01:14:44.304 [DEBUG] [Thread-195441] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:14:44.304 [DEBUG] [Thread-195441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:14:44.304 [DEBUG] [Thread-195441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:14:44.304 [DEBUG] [Thread-195441] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:14:44.304 [DEBUG] [Thread-195441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:14:44.304 [DEBUG] [Thread-195441] [transport.py] [_log()] Compression: none
2026-02-15T01:14:44.304 [DEBUG] [Thread-195441] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:14:44.366 [DEBUG] [Thread-195441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:14:44.366 [DEBUG] [Thread-195441] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:14:44.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:14:44.368 [DEBUG] [Thread-195441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:14:44.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:14:44.421 [DEBUG] [Thread-195441] [transport.py] [_log()] userauth is OK
2026-02-15T01:14:44.421 [DEBUG] [Thread-195441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:14:44.421 [DEBUG] [Thread-195441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:14:44.422 [DEBUG] [Thread-195441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:14:44.422 [DEBUG] [Thread-195441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:14:44.440 [INFO] [Thread-195441] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:14:44.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-15T01:14:44.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:14:45.239 [DEBUG] [Thread-195441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:14:45.239 [DEBUG] [Thread-195441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:14:45.288 [DEBUG] [Thread-195441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:14:45.288 [DEBUG] [Thread-195441] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:14:45.296 [DEBUG] [Thread-195441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:14:45.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:14:45.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-15T01:14:45.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:14:45.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:14:45.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:14:45.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:14:45.328 [DEBUG] [Thread-195441] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:14:54.751 [DEBUG] [Thread-195443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:14:59.940 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:15:09.802 [DEBUG] [Thread-195444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:15:11.994 [DEBUG] [Thread-195445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:15:15.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:15:15.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:15:15.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:15:17.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 15), 2.94, 81.63, 0.0, 45.86, 7.53, 0, 1, 0, 2, 1, 0),)
2026-02-15T01:15:17.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:15:00
2026-02-15T01:15:17.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:15:17.842 [DEBUG] [Thread-195446] [transport.py] [_log()] starting thread (client mode): 0xa2d781c0
2026-02-15T01:15:17.842 [DEBUG] [Thread-195446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:15:17.862 [DEBUG] [Thread-195446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:15:17.863 [INFO] [Thread-195446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:15:17.866 [DEBUG] [Thread-195446] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:15:17.866 [DEBUG] [Thread-195446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:15:17.866 [DEBUG] [Thread-195446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:15:17.866 [DEBUG] [Thread-195446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:15:17.866 [DEBUG] [Thread-195446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:15:17.866 [DEBUG] [Thread-195446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:15:17.866 [DEBUG] [Thread-195446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:15:17.866 [DEBUG] [Thread-195446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:15:17.866 [DEBUG] [Thread-195446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:15:17.866 [DEBUG] [Thread-195446] [transport.py] [_log()] client lang: <none>
2026-02-15T01:15:17.866 [DEBUG] [Thread-195446] [transport.py] [_log()] server lang: <none>
2026-02-15T01:15:17.866 [DEBUG] [Thread-195446] [transport.py] [_log()] kex follows: False
2026-02-15T01:15:17.866 [DEBUG] [Thread-195446] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:15:17.866 [DEBUG] [Thread-195446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:15:17.867 [DEBUG] [Thread-195446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:15:17.867 [DEBUG] [Thread-195446] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:15:17.867 [DEBUG] [Thread-195446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:15:17.867 [DEBUG] [Thread-195446] [transport.py] [_log()] Compression: none
2026-02-15T01:15:17.867 [DEBUG] [Thread-195446] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:15:17.884 [DEBUG] [Thread-195446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:15:17.884 [DEBUG] [Thread-195446] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:15:17.885 [DEBUG] [Thread-195446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:15:17.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:15:17.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:15:17.887 [DEBUG] [Thread-195446] [transport.py] [_log()] userauth is OK
2026-02-15T01:15:17.887 [DEBUG] [Thread-195446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:15:17.887 [DEBUG] [Thread-195446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:15:17.887 [DEBUG] [Thread-195446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:15:17.887 [DEBUG] [Thread-195446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:15:17.912 [INFO] [Thread-195446] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:15:17.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:15:18.518 [DEBUG] [Thread-195446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:15:18.518 [DEBUG] [Thread-195446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:15:18.519 [DEBUG] [Thread-195446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:15:18.560 [DEBUG] [Thread-195446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:15:18.560 [DEBUG] [Thread-195446] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:15:18.564 [DEBUG] [Thread-195446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:15:18.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:15:18.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:15:18.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:15:18.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:15:18.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:15:18.586 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:15:18.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:15:18.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:15:18.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:15:18.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:15:18.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.968512 -999.00   +7.40  38.29     85   +5.00 1 1 2 2 1     0    0 1.40 -43.55 ZNESW 38.3 38.3 141.6 44.2 7.9 -24.3 7.7 -23.3 7.5 -22.3 7.9 -23.6
2026-02-15T01:15:18.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:15:18.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:15:18.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.968512
2026-02-15T01:15:18.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:15:18.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:15:18.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:15:18.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:15:18.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:15:18.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:15:00', tmtdew=2.94, humidity=81.63, cloud=0.0, wind=45.86, temperature=7.53, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:15:00', seeing=2.92, atlas_timestamp='2026-02-14T23:14:39.437', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0027500000000006963, 0.008250000000000313, -0.05025000000000013, -0.010500000000000398, -0.022499999999999076, 0.052250000000000796, 0.018499999999999517, 0.039250000000000895, 0.06349999999999945, 0.05900000000000105, -0.015250000000001762, 0.022999999999999687, 0.07099999999999973, 0.036249999999999005, 0.02999999999999936, 0.04899999999999949, 0.07525000000000048, 0.03950000000000031, 0.027999999999998693, 0.017249999999998877, 0.04949999999999832, 0.06974999999999909, 0.047750000000000625, 0.07375000000000043, 0.09799999999999898, 0.04399999999999871, 0.07174999999999976, 0.02200000000000024, 0.07500000000000107, 0.009500000000000952, 0.06950000000000145, 0.09000000000000163, 0.05424999999999969], zp_timestamp='2026-02-14T23:14:00')
2026-02-15T01:15:18.590 [DEBUG] [Thread-195446] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:15:18.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-15T01:15:18.685 [DEBUG] [Thread-195449] [transport.py] [_log()] starting thread (client mode): 0xa2d954b0
2026-02-15T01:15:18.685 [DEBUG] [Thread-195449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:15:18.700 [DEBUG] [Thread-195449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:15:18.700 [INFO] [Thread-195449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:15:18.707 [DEBUG] [Thread-195449] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:15:18.707 [DEBUG] [Thread-195449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:15:18.707 [DEBUG] [Thread-195449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:15:18.707 [DEBUG] [Thread-195449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:15:18.707 [DEBUG] [Thread-195449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:15:18.707 [DEBUG] [Thread-195449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:15:18.707 [DEBUG] [Thread-195449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:15:18.708 [DEBUG] [Thread-195449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:15:18.708 [DEBUG] [Thread-195449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:15:18.708 [DEBUG] [Thread-195449] [transport.py] [_log()] client lang: <none>
2026-02-15T01:15:18.708 [DEBUG] [Thread-195449] [transport.py] [_log()] server lang: <none>
2026-02-15T01:15:18.708 [DEBUG] [Thread-195449] [transport.py] [_log()] kex follows: False
2026-02-15T01:15:18.708 [DEBUG] [Thread-195449] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:15:18.708 [DEBUG] [Thread-195449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:15:18.708 [DEBUG] [Thread-195449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:15:18.708 [DEBUG] [Thread-195449] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:15:18.708 [DEBUG] [Thread-195449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:15:18.708 [DEBUG] [Thread-195449] [transport.py] [_log()] Compression: none
2026-02-15T01:15:18.708 [DEBUG] [Thread-195449] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:15:18.765 [DEBUG] [Thread-195449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:15:18.766 [DEBUG] [Thread-195449] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:15:18.767 [DEBUG] [Thread-195449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:15:18.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:15:18.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:15:18.822 [DEBUG] [Thread-195449] [transport.py] [_log()] userauth is OK
2026-02-15T01:15:18.822 [DEBUG] [Thread-195449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:15:18.822 [DEBUG] [Thread-195449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:15:18.822 [DEBUG] [Thread-195449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:15:18.822 [DEBUG] [Thread-195449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:15:18.841 [INFO] [Thread-195449] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:15:18.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-15T01:15:18.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:15:19.683 [DEBUG] [Thread-195449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:15:19.683 [DEBUG] [Thread-195449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:15:19.732 [DEBUG] [Thread-195449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:15:19.732 [DEBUG] [Thread-195449] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:15:19.741 [DEBUG] [Thread-195449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:15:19.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:15:19.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-15T01:15:19.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-15T01:15:19.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:15:19.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:15:19.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:15:19.777 [DEBUG] [Thread-195449] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:15:24.839 [DEBUG] [Thread-195451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:15:29.361 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:15:29.362 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:15:37.487 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:15:39.890 [DEBUG] [Thread-195452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:15:49.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:15:49.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:15:49.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-15T01:15:51.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 15, 35), 3.15, 80.45, 0.0, 40.26, 7.83, 0, 1, 0, 2, 0, 0),)
2026-02-15T01:15:51.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:15:35
2026-02-15T01:15:51.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:15:52.103 [DEBUG] [Thread-195453] [transport.py] [_log()] starting thread (client mode): 0xa2d979d0
2026-02-15T01:15:52.103 [DEBUG] [Thread-195453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:15:52.124 [DEBUG] [Thread-195453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:15:52.125 [INFO] [Thread-195453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:15:52.128 [DEBUG] [Thread-195453] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:15:52.128 [DEBUG] [Thread-195453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:15:52.129 [DEBUG] [Thread-195453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:15:52.129 [DEBUG] [Thread-195453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:15:52.129 [DEBUG] [Thread-195453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:15:52.129 [DEBUG] [Thread-195453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:15:52.129 [DEBUG] [Thread-195453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:15:52.129 [DEBUG] [Thread-195453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:15:52.129 [DEBUG] [Thread-195453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:15:52.129 [DEBUG] [Thread-195453] [transport.py] [_log()] client lang: <none>
2026-02-15T01:15:52.129 [DEBUG] [Thread-195453] [transport.py] [_log()] server lang: <none>
2026-02-15T01:15:52.129 [DEBUG] [Thread-195453] [transport.py] [_log()] kex follows: False
2026-02-15T01:15:52.129 [DEBUG] [Thread-195453] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:15:52.129 [DEBUG] [Thread-195453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:15:52.129 [DEBUG] [Thread-195453] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:15:52.129 [DEBUG] [Thread-195453] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:15:52.129 [DEBUG] [Thread-195453] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:15:52.129 [DEBUG] [Thread-195453] [transport.py] [_log()] Compression: none
2026-02-15T01:15:52.129 [DEBUG] [Thread-195453] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:15:52.145 [DEBUG] [Thread-195453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:15:52.145 [DEBUG] [Thread-195453] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:15:52.145 [DEBUG] [Thread-195453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:15:52.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:15:52.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:15:52.146 [DEBUG] [Thread-195453] [transport.py] [_log()] userauth is OK
2026-02-15T01:15:52.146 [DEBUG] [Thread-195453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:15:52.146 [DEBUG] [Thread-195453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:15:52.146 [DEBUG] [Thread-195453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:15:52.146 [DEBUG] [Thread-195453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:15:52.161 [INFO] [Thread-195453] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:15:52.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:15:53.027 [DEBUG] [Thread-195453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:15:53.028 [DEBUG] [Thread-195453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:15:53.028 [DEBUG] [Thread-195453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:15:53.069 [DEBUG] [Thread-195453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:15:53.069 [DEBUG] [Thread-195453] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:15:53.072 [DEBUG] [Thread-195453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:15:53.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:15:53.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:15:53.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:15:53.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:15:53.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:15:53.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:15:53.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:15:53.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:15:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:15:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.968859 -999.00   +7.40  32.09     85   +5.00 1 1 2 2 1     0    0 1.46 -42.26 ZNESW 32.1 32.1 147.2 44.7 7.9 -24.2 7.7 -23.1 7.5 -22.1 7.9 -23.1
2026-02-15T01:15:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:15:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:15:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.968859
2026-02-15T01:15:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:15:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:15:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:15:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:15:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:15:53.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:15:35', tmtdew=3.15, humidity=80.45, cloud=0.0, wind=40.26, temperature=7.83, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:15:36', seeing=3.06, atlas_timestamp='2026-02-14T23:15:09.418', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0027500000000006963, 0.008250000000000313, -0.05025000000000013, -0.010500000000000398, -0.022499999999999076, 0.052250000000000796, 0.018499999999999517, 0.039250000000000895, 0.06349999999999945, 0.05900000000000105, -0.015250000000001762, 0.022999999999999687, 0.07099999999999973, 0.036249999999999005, 0.02999999999999936, 0.04899999999999949, 0.07525000000000048, 0.03950000000000031, 0.027999999999998693, 0.017249999999998877, 0.04949999999999832, 0.06974999999999909, 0.047750000000000625, 0.07375000000000043, 0.09799999999999898, 0.04399999999999871, 0.07174999999999976, 0.02200000000000024, 0.07500000000000107, 0.009500000000000952, 0.06950000000000145, 0.09000000000000163, 0.05424999999999969], zp_timestamp='2026-02-14T23:14:00')
2026-02-15T01:15:53.091 [DEBUG] [Thread-195453] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:15:53.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-15T01:15:53.183 [DEBUG] [Thread-195456] [transport.py] [_log()] starting thread (client mode): 0xa2d1ad70
2026-02-15T01:15:53.183 [DEBUG] [Thread-195456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:15:53.198 [DEBUG] [Thread-195456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:15:53.198 [INFO] [Thread-195456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:15:53.206 [DEBUG] [Thread-195456] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:15:53.206 [DEBUG] [Thread-195456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:15:53.206 [DEBUG] [Thread-195456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:15:53.206 [DEBUG] [Thread-195456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:15:53.207 [DEBUG] [Thread-195456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:15:53.207 [DEBUG] [Thread-195456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:15:53.207 [DEBUG] [Thread-195456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:15:53.207 [DEBUG] [Thread-195456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:15:53.207 [DEBUG] [Thread-195456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:15:53.207 [DEBUG] [Thread-195456] [transport.py] [_log()] client lang: <none>
2026-02-15T01:15:53.207 [DEBUG] [Thread-195456] [transport.py] [_log()] server lang: <none>
2026-02-15T01:15:53.207 [DEBUG] [Thread-195456] [transport.py] [_log()] kex follows: False
2026-02-15T01:15:53.207 [DEBUG] [Thread-195456] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:15:53.207 [DEBUG] [Thread-195456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:15:53.207 [DEBUG] [Thread-195456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:15:53.207 [DEBUG] [Thread-195456] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:15:53.207 [DEBUG] [Thread-195456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:15:53.207 [DEBUG] [Thread-195456] [transport.py] [_log()] Compression: none
2026-02-15T01:15:53.207 [DEBUG] [Thread-195456] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:15:53.265 [DEBUG] [Thread-195456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:15:53.266 [DEBUG] [Thread-195456] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:15:53.266 [DEBUG] [Thread-195456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:15:53.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:15:53.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:15:53.321 [DEBUG] [Thread-195456] [transport.py] [_log()] userauth is OK
2026-02-15T01:15:53.322 [DEBUG] [Thread-195456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:15:53.322 [DEBUG] [Thread-195456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:15:53.322 [DEBUG] [Thread-195456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:15:53.322 [DEBUG] [Thread-195456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:15:53.341 [INFO] [Thread-195456] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:15: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-15T01:15:53.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:15:54.175 [DEBUG] [Thread-195456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:15:54.175 [DEBUG] [Thread-195456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:15:54.224 [DEBUG] [Thread-195456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:15:54.224 [DEBUG] [Thread-195456] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:15:54.233 [DEBUG] [Thread-195456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:15:54.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:15:54.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-15T01:15:54.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:15:54.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:15:54.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:15:54.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:15:54.270 [DEBUG] [Thread-195456] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:15:54.926 [DEBUG] [Thread-195458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:15:56.195 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:16:09.976 [DEBUG] [Thread-195459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:16:12.056 [DEBUG] [Thread-195460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:16:14.879 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:16:24.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:16:24.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:16:24.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-15T01:16:25.008 [DEBUG] [Thread-195461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:16:26.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 16, 10), 2.9, 81.86, 0.0, 45.73, 7.51, 0, 1, 2, 2, 1, 0),)
2026-02-15T01:16:26.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:16:10
2026-02-15T01:16:26.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:16:26.593 [DEBUG] [Thread-195462] [transport.py] [_log()] starting thread (client mode): 0xa2d19ae0
2026-02-15T01:16:26.594 [DEBUG] [Thread-195462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:16:26.613 [DEBUG] [Thread-195462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:16:26.614 [INFO] [Thread-195462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:16:26.617 [DEBUG] [Thread-195462] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:16:26.617 [DEBUG] [Thread-195462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:16:26.617 [DEBUG] [Thread-195462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:16:26.617 [DEBUG] [Thread-195462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:16:26.617 [DEBUG] [Thread-195462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:16:26.618 [DEBUG] [Thread-195462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:16:26.618 [DEBUG] [Thread-195462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:16:26.618 [DEBUG] [Thread-195462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:16:26.618 [DEBUG] [Thread-195462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:16:26.618 [DEBUG] [Thread-195462] [transport.py] [_log()] client lang: <none>
2026-02-15T01:16:26.618 [DEBUG] [Thread-195462] [transport.py] [_log()] server lang: <none>
2026-02-15T01:16:26.618 [DEBUG] [Thread-195462] [transport.py] [_log()] kex follows: False
2026-02-15T01:16:26.618 [DEBUG] [Thread-195462] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:16:26.618 [DEBUG] [Thread-195462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:16:26.618 [DEBUG] [Thread-195462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:16:26.618 [DEBUG] [Thread-195462] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:16:26.618 [DEBUG] [Thread-195462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:16:26.618 [DEBUG] [Thread-195462] [transport.py] [_log()] Compression: none
2026-02-15T01:16:26.618 [DEBUG] [Thread-195462] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:16:26.636 [DEBUG] [Thread-195462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:16:26.636 [DEBUG] [Thread-195462] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:16:26.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:16:26.637 [DEBUG] [Thread-195462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:16:26.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:16:26.639 [DEBUG] [Thread-195462] [transport.py] [_log()] userauth is OK
2026-02-15T01:16:26.639 [DEBUG] [Thread-195462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:16:26.640 [DEBUG] [Thread-195462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:16:26.640 [DEBUG] [Thread-195462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:16:26.640 [DEBUG] [Thread-195462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:16:26.661 [INFO] [Thread-195462] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:16:26.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:16:27.286 [DEBUG] [Thread-195462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:16:27.286 [DEBUG] [Thread-195462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:16:27.286 [DEBUG] [Thread-195462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:16:27.327 [DEBUG] [Thread-195462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:16:27.328 [DEBUG] [Thread-195462] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:16:27.331 [DEBUG] [Thread-195462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:16:27.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:16:27.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:16:27.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:16:27.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:16:27.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:16:27.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:16:27.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:16:27.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:16:27.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:16:27.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.969206 -999.00   +7.40  28.25     85   +5.00 1 1 1 2 1     0    0 1.60 -40.40 ZNESW 28.2 28.2 148.4 47.4 7.9 -24.1 7.7 -22.6 7.5 -21.6 7.9 -23.5
2026-02-15T01:16:27.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:16:27.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:16:27.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.969206
2026-02-15T01:16:27.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:16:27.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:16:27.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:16:27.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:16:27.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:16:27.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:16:10', tmtdew=2.9, humidity=81.86, cloud=0.0, wind=45.73, temperature=7.51, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:16:11', seeing=2.53, atlas_timestamp='2026-02-14T23:15:39.398', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0027500000000006963, 0.008250000000000313, -0.05025000000000013, -0.010500000000000398, -0.022499999999999076, 0.052250000000000796, 0.018499999999999517, 0.039250000000000895, 0.06349999999999945, 0.05900000000000105, -0.015250000000001762, 0.022999999999999687, 0.07099999999999973, 0.036249999999999005, 0.02999999999999936, 0.04899999999999949, 0.07525000000000048, 0.03950000000000031, 0.027999999999998693, 0.017249999999998877, 0.04949999999999832, 0.06974999999999909, 0.047750000000000625, 0.07375000000000043, 0.09799999999999898, 0.04399999999999871, 0.07174999999999976, 0.02200000000000024, 0.07500000000000107, 0.009500000000000952, 0.06950000000000145, 0.09000000000000163, 0.05424999999999969], zp_timestamp='2026-02-14T23:14:00')
2026-02-15T01:16:27.357 [DEBUG] [Thread-195462] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:16:27.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-15T01:16:27.453 [DEBUG] [Thread-195465] [transport.py] [_log()] starting thread (client mode): 0xa2d97310
2026-02-15T01:16:27.453 [DEBUG] [Thread-195465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:16:27.467 [DEBUG] [Thread-195465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:16:27.468 [INFO] [Thread-195465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:16:27.475 [DEBUG] [Thread-195465] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:16:27.476 [DEBUG] [Thread-195465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:16:27.476 [DEBUG] [Thread-195465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:16:27.476 [DEBUG] [Thread-195465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:16:27.476 [DEBUG] [Thread-195465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:16:27.476 [DEBUG] [Thread-195465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:16:27.476 [DEBUG] [Thread-195465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:16:27.476 [DEBUG] [Thread-195465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:16:27.476 [DEBUG] [Thread-195465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:16:27.476 [DEBUG] [Thread-195465] [transport.py] [_log()] client lang: <none>
2026-02-15T01:16:27.476 [DEBUG] [Thread-195465] [transport.py] [_log()] server lang: <none>
2026-02-15T01:16:27.476 [DEBUG] [Thread-195465] [transport.py] [_log()] kex follows: False
2026-02-15T01:16:27.476 [DEBUG] [Thread-195465] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:16:27.476 [DEBUG] [Thread-195465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:16:27.476 [DEBUG] [Thread-195465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:16:27.476 [DEBUG] [Thread-195465] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:16:27.476 [DEBUG] [Thread-195465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:16:27.477 [DEBUG] [Thread-195465] [transport.py] [_log()] Compression: none
2026-02-15T01:16:27.477 [DEBUG] [Thread-195465] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:16:27.534 [DEBUG] [Thread-195465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:16:27.534 [DEBUG] [Thread-195465] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:16:27.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:16:27.535 [DEBUG] [Thread-195465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:16:27.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:16:27.590 [DEBUG] [Thread-195465] [transport.py] [_log()] userauth is OK
2026-02-15T01:16:27.590 [DEBUG] [Thread-195465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:16:27.590 [DEBUG] [Thread-195465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:16:27.590 [DEBUG] [Thread-195465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:16:27.590 [DEBUG] [Thread-195465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:16:27.605 [INFO] [Thread-195465] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:16:27.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-15T01:16:27.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:16:28.407 [DEBUG] [Thread-195465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:16:28.408 [DEBUG] [Thread-195465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:16:28.455 [DEBUG] [Thread-195465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:16:28.456 [DEBUG] [Thread-195465] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:16:28.465 [DEBUG] [Thread-195465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:16:28.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:16:28.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:16:28.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-15T01:16:28.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:16:28.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:16:28.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:16:28.501 [DEBUG] [Thread-195465] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:16:29.566 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:16:29.567 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:16:33.528 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:16:40.046 [DEBUG] [Thread-195467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:16:52.174 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:16:55.111 [DEBUG] [Thread-195468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:16:58.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:16:58.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:16:58.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:17:00.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 16, 46), 2.76, 82.56, 0.0, 45.75, 7.51, 0, 1, 2, 2, 1, 0),)
2026-02-15T01:17:00.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:16:46
2026-02-15T01:17:00.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:17:00.940 [DEBUG] [Thread-195469] [transport.py] [_log()] starting thread (client mode): 0xa2d6fe20
2026-02-15T01:17:00.940 [DEBUG] [Thread-195469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:17:00.950 [DEBUG] [Thread-195469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:17:00.950 [INFO] [Thread-195469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:17:00.951 [DEBUG] [Thread-195469] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:17:00.951 [DEBUG] [Thread-195469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:17:00.951 [DEBUG] [Thread-195469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:17:00.951 [DEBUG] [Thread-195469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:17:00.951 [DEBUG] [Thread-195469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:17:00.951 [DEBUG] [Thread-195469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:17:00.951 [DEBUG] [Thread-195469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:17:00.951 [DEBUG] [Thread-195469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:17:00.951 [DEBUG] [Thread-195469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:17:00.951 [DEBUG] [Thread-195469] [transport.py] [_log()] client lang: <none>
2026-02-15T01:17:00.951 [DEBUG] [Thread-195469] [transport.py] [_log()] server lang: <none>
2026-02-15T01:17:00.951 [DEBUG] [Thread-195469] [transport.py] [_log()] kex follows: False
2026-02-15T01:17:00.951 [DEBUG] [Thread-195469] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:17:00.951 [DEBUG] [Thread-195469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:17:00.952 [DEBUG] [Thread-195469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:17:00.952 [DEBUG] [Thread-195469] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:17:00.952 [DEBUG] [Thread-195469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:17:00.952 [DEBUG] [Thread-195469] [transport.py] [_log()] Compression: none
2026-02-15T01:17:00.952 [DEBUG] [Thread-195469] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:17:00.960 [DEBUG] [Thread-195469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:17:00.961 [DEBUG] [Thread-195469] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:17:00.961 [DEBUG] [Thread-195469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:17:00.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:17:00.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:17:00.962 [DEBUG] [Thread-195469] [transport.py] [_log()] userauth is OK
2026-02-15T01:17:00.962 [DEBUG] [Thread-195469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:17:00.962 [DEBUG] [Thread-195469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:17:00.962 [DEBUG] [Thread-195469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:17:00.962 [DEBUG] [Thread-195469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:17:00.982 [INFO] [Thread-195469] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:17:00.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:17:01.612 [DEBUG] [Thread-195469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:17:01.612 [DEBUG] [Thread-195469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:17:01.613 [DEBUG] [Thread-195469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:17:01.653 [DEBUG] [Thread-195469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:17:01.653 [DEBUG] [Thread-195469] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:17:01.657 [DEBUG] [Thread-195469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:17:01.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:17:01.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:17:01.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:17:01.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:17:01.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:17:01.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:17:01.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:17:01.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:17:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:17:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.969553 -999.00   +7.30  34.37     85   +5.10 1 1 2 2 1     0    0 1.49 -42.09 ZNESW 34.4 34.4 142.8 46.8 7.9 -24.2 7.8 -23.0 7.5 -22.3 7.9 -23.4
2026-02-15T01:17:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:17:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:17:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.969553
2026-02-15T01:17:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:17:01.676 [DEBUG] [Thread-195469] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:17:01.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:17:01.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:17:01.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:17:01.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:17:01.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:16:46', tmtdew=2.76, humidity=82.56, cloud=0.0, wind=45.75, temperature=7.51, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:16:46', seeing=2.99, atlas_timestamp='2026-02-14T23:16:09.379', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0027500000000006963, 0.008250000000000313, -0.05025000000000013, -0.010500000000000398, -0.022499999999999076, 0.052250000000000796, 0.018499999999999517, 0.039250000000000895, 0.06349999999999945, 0.05900000000000105, -0.015250000000001762, 0.022999999999999687, 0.07099999999999973, 0.036249999999999005, 0.02999999999999936, 0.04899999999999949, 0.07525000000000048, 0.03950000000000031, 0.027999999999998693, 0.017249999999998877, 0.04949999999999832, 0.06974999999999909, 0.047750000000000625, 0.07375000000000043, 0.09799999999999898, 0.04399999999999871, 0.07174999999999976, 0.02200000000000024, 0.07500000000000107, 0.009500000000000952, 0.06950000000000145, 0.09000000000000163, 0.05424999999999969], zp_timestamp='2026-02-14T23:14:00')
2026-02-15T01:17:01.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-15T01:17:01.789 [DEBUG] [Thread-195472] [transport.py] [_log()] starting thread (client mode): 0xa2d7ae60
2026-02-15T01:17:01.789 [DEBUG] [Thread-195472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:17:01.804 [DEBUG] [Thread-195472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:17:01.805 [INFO] [Thread-195472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:17:01.812 [DEBUG] [Thread-195472] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:17:01.812 [DEBUG] [Thread-195472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:17:01.812 [DEBUG] [Thread-195472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:17:01.812 [DEBUG] [Thread-195472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:17:01.812 [DEBUG] [Thread-195472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:17:01.812 [DEBUG] [Thread-195472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:17:01.812 [DEBUG] [Thread-195472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:17:01.812 [DEBUG] [Thread-195472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:17:01.813 [DEBUG] [Thread-195472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:17:01.813 [DEBUG] [Thread-195472] [transport.py] [_log()] client lang: <none>
2026-02-15T01:17:01.813 [DEBUG] [Thread-195472] [transport.py] [_log()] server lang: <none>
2026-02-15T01:17:01.813 [DEBUG] [Thread-195472] [transport.py] [_log()] kex follows: False
2026-02-15T01:17:01.813 [DEBUG] [Thread-195472] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:17:01.813 [DEBUG] [Thread-195472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:17:01.813 [DEBUG] [Thread-195472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:17:01.813 [DEBUG] [Thread-195472] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:17:01.813 [DEBUG] [Thread-195472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:17:01.813 [DEBUG] [Thread-195472] [transport.py] [_log()] Compression: none
2026-02-15T01:17:01.813 [DEBUG] [Thread-195472] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:17:01.875 [DEBUG] [Thread-195472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:17:01.876 [DEBUG] [Thread-195472] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:17:01.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:17:01.877 [DEBUG] [Thread-195472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:17:01.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:17:01.931 [DEBUG] [Thread-195472] [transport.py] [_log()] userauth is OK
2026-02-15T01:17:01.931 [DEBUG] [Thread-195472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:17:01.931 [DEBUG] [Thread-195472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:17:01.931 [DEBUG] [Thread-195472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:17:01.931 [DEBUG] [Thread-195472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:17:01.949 [INFO] [Thread-195472] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:17:01.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-15T01:17:01.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:17:02.777 [DEBUG] [Thread-195472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:17:02.777 [DEBUG] [Thread-195472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:17:02.825 [DEBUG] [Thread-195472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:17:02.826 [DEBUG] [Thread-195472] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:17:02.835 [DEBUG] [Thread-195472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:17:02.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:17: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-15T01:17:02.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-15T01:17:02.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:17:02.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:17:02.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:17:02.870 [DEBUG] [Thread-195472] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:17:10.149 [DEBUG] [Thread-195474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:17:11.067 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:17:12.124 [DEBUG] [Thread-195475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:17:25.202 [DEBUG] [Thread-195476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:17:29.742 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:17:29.766 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:17:29.767 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:17:32.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:17:32.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:17:32.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-15T01:17:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 17, 21), 2.75, 82.63, 0.0, 47.55, 7.5, 0, 1, 2, 2, 1, 0),)
2026-02-15T01:17:34.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:17:21
2026-02-15T01:17:35.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:17:35.260 [DEBUG] [Thread-195477] [transport.py] [_log()] starting thread (client mode): 0xa2d6d780
2026-02-15T01:17:35.260 [DEBUG] [Thread-195477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:17:35.280 [DEBUG] [Thread-195477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:17:35.280 [INFO] [Thread-195477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:17:35.283 [DEBUG] [Thread-195477] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:17:35.283 [DEBUG] [Thread-195477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:17:35.283 [DEBUG] [Thread-195477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:17:35.284 [DEBUG] [Thread-195477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:17:35.284 [DEBUG] [Thread-195477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:17:35.284 [DEBUG] [Thread-195477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:17:35.284 [DEBUG] [Thread-195477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:17:35.284 [DEBUG] [Thread-195477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:17:35.284 [DEBUG] [Thread-195477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:17:35.284 [DEBUG] [Thread-195477] [transport.py] [_log()] client lang: <none>
2026-02-15T01:17:35.284 [DEBUG] [Thread-195477] [transport.py] [_log()] server lang: <none>
2026-02-15T01:17:35.284 [DEBUG] [Thread-195477] [transport.py] [_log()] kex follows: False
2026-02-15T01:17:35.284 [DEBUG] [Thread-195477] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:17:35.284 [DEBUG] [Thread-195477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:17:35.284 [DEBUG] [Thread-195477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:17:35.284 [DEBUG] [Thread-195477] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:17:35.284 [DEBUG] [Thread-195477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:17:35.284 [DEBUG] [Thread-195477] [transport.py] [_log()] Compression: none
2026-02-15T01:17:35.285 [DEBUG] [Thread-195477] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:17:35.303 [DEBUG] [Thread-195477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:17:35.303 [DEBUG] [Thread-195477] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:17:35.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:17:35.304 [DEBUG] [Thread-195477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:17:35.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:17:35.307 [DEBUG] [Thread-195477] [transport.py] [_log()] userauth is OK
2026-02-15T01:17:35.307 [DEBUG] [Thread-195477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:17:35.307 [DEBUG] [Thread-195477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:17:35.307 [DEBUG] [Thread-195477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:17:35.307 [DEBUG] [Thread-195477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:17:35.331 [INFO] [Thread-195477] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:17:35.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:17:35.959 [DEBUG] [Thread-195477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:17:35.959 [DEBUG] [Thread-195477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:17:35.960 [DEBUG] [Thread-195477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:17:36.001 [DEBUG] [Thread-195477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:17:36.001 [DEBUG] [Thread-195477] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:17:36.005 [DEBUG] [Thread-195477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:17:36.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:17:36.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:17:36.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:17:36.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:17:36.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:17:36.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:17:36.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:17:36.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:17:36.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:17:36.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.970248 -999.00   +7.30  39.45     86   +5.20 1 1 2 2 1     0    0 1.40 -42.26 ZNESW 39.5 39.5 142.6 44.8 7.9 -22.4 7.7 -20.8 7.5 -19.9 7.9 -21.7
2026-02-15T01:17:36.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:17:36.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:17:36.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.970248
2026-02-15T01:17:36.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:17:36.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:17:36.031 [DEBUG] [Thread-195477] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:17:36.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:17:36.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:17:36.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:17:36.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:17:21', tmtdew=2.75, humidity=82.63, cloud=0.0, wind=47.55, temperature=7.5, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:17:21', seeing=2.99, atlas_timestamp='2026-02-14T23:17:09.427', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0027500000000006963, 0.008250000000000313, -0.05025000000000013, -0.010500000000000398, -0.022499999999999076, 0.052250000000000796, 0.018499999999999517, 0.039250000000000895, 0.06349999999999945, 0.05900000000000105, -0.015250000000001762, 0.022999999999999687, 0.07099999999999973, 0.036249999999999005, 0.02999999999999936, 0.04899999999999949, 0.07525000000000048, 0.03950000000000031, 0.027999999999998693, 0.017249999999998877, 0.04949999999999832, 0.06974999999999909, 0.047750000000000625, 0.07375000000000043, 0.09799999999999898, 0.04399999999999871, 0.07174999999999976, 0.02200000000000024, 0.07500000000000107, 0.009500000000000952, 0.06950000000000145, 0.09000000000000163, 0.05424999999999969], zp_timestamp='2026-02-14T23:14:00')
2026-02-15T01:17:36.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-15T01:17:36.129 [DEBUG] [Thread-195480] [transport.py] [_log()] starting thread (client mode): 0xa5740d90
2026-02-15T01:17:36.130 [DEBUG] [Thread-195480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:17:36.144 [DEBUG] [Thread-195480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:17:36.145 [INFO] [Thread-195480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:17:36.152 [DEBUG] [Thread-195480] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:17:36.153 [DEBUG] [Thread-195480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:17:36.153 [DEBUG] [Thread-195480] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:17:36.153 [DEBUG] [Thread-195480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:17:36.153 [DEBUG] [Thread-195480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:17:36.153 [DEBUG] [Thread-195480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:17:36.153 [DEBUG] [Thread-195480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:17:36.154 [DEBUG] [Thread-195480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:17:36.154 [DEBUG] [Thread-195480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:17:36.154 [DEBUG] [Thread-195480] [transport.py] [_log()] client lang: <none>
2026-02-15T01:17:36.154 [DEBUG] [Thread-195480] [transport.py] [_log()] server lang: <none>
2026-02-15T01:17:36.154 [DEBUG] [Thread-195480] [transport.py] [_log()] kex follows: False
2026-02-15T01:17:36.154 [DEBUG] [Thread-195480] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:17:36.154 [DEBUG] [Thread-195480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:17:36.154 [DEBUG] [Thread-195480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:17:36.155 [DEBUG] [Thread-195480] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:17:36.155 [DEBUG] [Thread-195480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:17:36.155 [DEBUG] [Thread-195480] [transport.py] [_log()] Compression: none
2026-02-15T01:17:36.155 [DEBUG] [Thread-195480] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:17:36.216 [DEBUG] [Thread-195480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:17:36.216 [DEBUG] [Thread-195480] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:17:36.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:17:36.218 [DEBUG] [Thread-195480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:17:36.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:17:36.275 [DEBUG] [Thread-195480] [transport.py] [_log()] userauth is OK
2026-02-15T01:17:36.275 [DEBUG] [Thread-195480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:17:36.275 [DEBUG] [Thread-195480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:17:36.275 [DEBUG] [Thread-195480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:17:36.275 [DEBUG] [Thread-195480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:17:36.294 [INFO] [Thread-195480] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:17:36.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-15T01:17:36.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:17:37.109 [DEBUG] [Thread-195480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:17:37.109 [DEBUG] [Thread-195480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:17:37.156 [DEBUG] [Thread-195480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:17:37.157 [DEBUG] [Thread-195480] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:17:37.166 [DEBUG] [Thread-195480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:17:37.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:17:37.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-15T01:17:37.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:17:37.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:17:37.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:17:37.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:17:37.202 [DEBUG] [Thread-195480] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:17:40.237 [DEBUG] [Thread-195482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:17:48.396 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:17:55.283 [DEBUG] [Thread-195483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:18:07.052 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:18:07.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:18:07.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:18:07.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-15T01:18:09.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 17, 56), 2.61, 83.34, 0.0, 47.59, 7.53, 0, 1, 2, 2, 1, 0),)
2026-02-15T01:18:09.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:17:56
2026-02-15T01:18:09.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:18:09.596 [DEBUG] [Thread-195484] [transport.py] [_log()] starting thread (client mode): 0xa2d7bfd0
2026-02-15T01:18:09.596 [DEBUG] [Thread-195484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:18:09.617 [DEBUG] [Thread-195484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:18:09.617 [INFO] [Thread-195484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:18:09.620 [DEBUG] [Thread-195484] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:18:09.620 [DEBUG] [Thread-195484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:18:09.620 [DEBUG] [Thread-195484] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:18:09.620 [DEBUG] [Thread-195484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:18:09.620 [DEBUG] [Thread-195484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:18:09.620 [DEBUG] [Thread-195484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:18:09.620 [DEBUG] [Thread-195484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:18:09.620 [DEBUG] [Thread-195484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:18:09.620 [DEBUG] [Thread-195484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:18:09.620 [DEBUG] [Thread-195484] [transport.py] [_log()] client lang: <none>
2026-02-15T01:18:09.620 [DEBUG] [Thread-195484] [transport.py] [_log()] server lang: <none>
2026-02-15T01:18:09.620 [DEBUG] [Thread-195484] [transport.py] [_log()] kex follows: False
2026-02-15T01:18:09.620 [DEBUG] [Thread-195484] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:18:09.620 [DEBUG] [Thread-195484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:18:09.620 [DEBUG] [Thread-195484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:18:09.620 [DEBUG] [Thread-195484] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:18:09.621 [DEBUG] [Thread-195484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:18:09.621 [DEBUG] [Thread-195484] [transport.py] [_log()] Compression: none
2026-02-15T01:18:09.621 [DEBUG] [Thread-195484] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:18:09.638 [DEBUG] [Thread-195484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:18:09.638 [DEBUG] [Thread-195484] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:18:09.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:18:09.639 [DEBUG] [Thread-195484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:18:09.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:18:09.641 [DEBUG] [Thread-195484] [transport.py] [_log()] userauth is OK
2026-02-15T01:18:09.642 [DEBUG] [Thread-195484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:18:09.642 [DEBUG] [Thread-195484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:18:09.642 [DEBUG] [Thread-195484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:18:09.642 [DEBUG] [Thread-195484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:18:09.660 [INFO] [Thread-195484] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:18:09.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:18:10.279 [DEBUG] [Thread-195484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:18:10.280 [DEBUG] [Thread-195484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:18:10.280 [DEBUG] [Thread-195484] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:18:10.318 [DEBUG] [Thread-195486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:18:10.320 [DEBUG] [Thread-195484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:18:10.320 [DEBUG] [Thread-195484] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:18:10.323 [DEBUG] [Thread-195484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:18:10.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:18:10.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:18:10.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:18:10.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:18:10.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:18:10.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:18:10.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:18:10.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:18:10.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:18:10.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.970595 -999.00   +7.30  31.44     87   +5.30 1 1 2 2 1     0    0 1.44 -40.22 ZNESW 31.4 31.4 149.2 51.2 7.9 -22.7 7.8 -22.2 7.5 -21.3 7.8 -22.3
2026-02-15T01:18:10.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:18:10.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:18:10.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.970595
2026-02-15T01:18:10.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:18:10.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:18:10.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:18:10.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:18:10.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:18:10.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:17:56', tmtdew=2.61, humidity=83.34, cloud=0.0, wind=47.59, temperature=7.53, tmtdew_warn=0, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:17:56', seeing=2.36, atlas_timestamp='2026-02-14T23:17:39.408', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0027500000000006963, 0.008250000000000313, -0.05025000000000013, -0.010500000000000398, -0.022499999999999076, 0.052250000000000796, 0.018499999999999517, 0.039250000000000895, 0.06349999999999945, 0.05900000000000105, -0.015250000000001762, 0.022999999999999687, 0.07099999999999973, 0.036249999999999005, 0.02999999999999936, 0.04899999999999949, 0.07525000000000048, 0.03950000000000031, 0.027999999999998693, 0.017249999999998877, 0.04949999999999832, 0.06974999999999909, 0.047750000000000625, 0.07375000000000043, 0.09799999999999898, 0.04399999999999871, 0.07174999999999976, 0.02200000000000024, 0.07500000000000107, 0.009500000000000952, 0.06950000000000145, 0.09000000000000163, 0.05424999999999969], zp_timestamp='2026-02-14T23:14:00')
2026-02-15T01:18:10.348 [DEBUG] [Thread-195484] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:18:10.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-15T01:18:10.446 [DEBUG] [Thread-195488] [transport.py] [_log()] starting thread (client mode): 0xa2d193f0
2026-02-15T01:18:10.447 [DEBUG] [Thread-195488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:18:10.461 [DEBUG] [Thread-195488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:18:10.461 [INFO] [Thread-195488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:18:10.468 [DEBUG] [Thread-195488] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:18:10.469 [DEBUG] [Thread-195488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:18:10.469 [DEBUG] [Thread-195488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:18:10.469 [DEBUG] [Thread-195488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:18:10.469 [DEBUG] [Thread-195488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:18:10.469 [DEBUG] [Thread-195488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:18:10.469 [DEBUG] [Thread-195488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:18:10.469 [DEBUG] [Thread-195488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:18:10.469 [DEBUG] [Thread-195488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:18:10.469 [DEBUG] [Thread-195488] [transport.py] [_log()] client lang: <none>
2026-02-15T01:18:10.469 [DEBUG] [Thread-195488] [transport.py] [_log()] server lang: <none>
2026-02-15T01:18:10.469 [DEBUG] [Thread-195488] [transport.py] [_log()] kex follows: False
2026-02-15T01:18:10.469 [DEBUG] [Thread-195488] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:18:10.469 [DEBUG] [Thread-195488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:18:10.469 [DEBUG] [Thread-195488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:18:10.469 [DEBUG] [Thread-195488] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:18:10.469 [DEBUG] [Thread-195488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:18:10.469 [DEBUG] [Thread-195488] [transport.py] [_log()] Compression: none
2026-02-15T01:18:10.469 [DEBUG] [Thread-195488] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:18:10.527 [DEBUG] [Thread-195488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:18:10.528 [DEBUG] [Thread-195488] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:18:10.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:18:10.529 [DEBUG] [Thread-195488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:18:10.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:18:10.584 [DEBUG] [Thread-195488] [transport.py] [_log()] userauth is OK
2026-02-15T01:18:10.584 [DEBUG] [Thread-195488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:18:10.584 [DEBUG] [Thread-195488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:18:10.585 [DEBUG] [Thread-195488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:18:10.585 [DEBUG] [Thread-195488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:18:10.603 [INFO] [Thread-195488] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:18:10.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-15T01:18:10.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:18:11.404 [DEBUG] [Thread-195488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:18:11.405 [DEBUG] [Thread-195488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:18:11.452 [DEBUG] [Thread-195488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:18:11.452 [DEBUG] [Thread-195488] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:18:11.461 [DEBUG] [Thread-195488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:18:11.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:18:11.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')
2026-02-15T01:18:11.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-15T01:18:11.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:18:11.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:18:11.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:18:11.494 [DEBUG] [Thread-195488] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:18:12.197 [DEBUG] [Thread-195490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:18:25.354 [DEBUG] [Thread-195491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:18:25.726 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:18:29.966 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:18:29.967 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:18:40.405 [DEBUG] [Thread-195492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:18:41.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:18:41.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:18:41.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:18:43.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 18, 31), 2.59, 83.51, 0.0, 47.53, 7.51, 0, 1, 0, 2, 1, 0),)
2026-02-15T01:18:43.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:18:31
2026-02-15T01:18:43.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:18:44.037 [DEBUG] [Thread-195493] [transport.py] [_log()] starting thread (client mode): 0xa2d68d00
2026-02-15T01:18:44.037 [DEBUG] [Thread-195493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:18:44.052 [DEBUG] [Thread-195493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:18:44.052 [INFO] [Thread-195493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:18:44.055 [DEBUG] [Thread-195493] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:18:44.055 [DEBUG] [Thread-195493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:18:44.055 [DEBUG] [Thread-195493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:18:44.055 [DEBUG] [Thread-195493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:18:44.055 [DEBUG] [Thread-195493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:18:44.055 [DEBUG] [Thread-195493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:18:44.055 [DEBUG] [Thread-195493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:18:44.055 [DEBUG] [Thread-195493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:18:44.055 [DEBUG] [Thread-195493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:18:44.055 [DEBUG] [Thread-195493] [transport.py] [_log()] client lang: <none>
2026-02-15T01:18:44.055 [DEBUG] [Thread-195493] [transport.py] [_log()] server lang: <none>
2026-02-15T01:18:44.055 [DEBUG] [Thread-195493] [transport.py] [_log()] kex follows: False
2026-02-15T01:18:44.056 [DEBUG] [Thread-195493] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:18:44.056 [DEBUG] [Thread-195493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:18:44.056 [DEBUG] [Thread-195493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:18:44.056 [DEBUG] [Thread-195493] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:18:44.056 [DEBUG] [Thread-195493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:18:44.056 [DEBUG] [Thread-195493] [transport.py] [_log()] Compression: none
2026-02-15T01:18:44.056 [DEBUG] [Thread-195493] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:18:44.073 [DEBUG] [Thread-195493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:18:44.074 [DEBUG] [Thread-195493] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:18:44.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:18:44.076 [DEBUG] [Thread-195493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:18:44.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:18:44.078 [DEBUG] [Thread-195493] [transport.py] [_log()] userauth is OK
2026-02-15T01:18:44.078 [DEBUG] [Thread-195493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:18:44.078 [DEBUG] [Thread-195493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:18:44.079 [DEBUG] [Thread-195493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:18:44.079 [DEBUG] [Thread-195493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:18:44.104 [INFO] [Thread-195493] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:18:44.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:18:44.365 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:18:44.747 [DEBUG] [Thread-195493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:18:44.747 [DEBUG] [Thread-195493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:18:44.748 [DEBUG] [Thread-195493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:18:44.788 [DEBUG] [Thread-195493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:18:44.789 [DEBUG] [Thread-195493] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:18:44.792 [DEBUG] [Thread-195493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:18:44.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:18:44.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:18:44.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:18:44.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:18:44.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:18:44.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:18:44.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:18:44.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:18:44.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:18:44.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.970942 -999.00   +7.30  43.29     87   +5.30 1 1 2 2 1     0    0 1.35 -43.28 ZNESW 43.3 43.3 143.4 50.3 7.9 -23.6 7.7 -23.0 7.5 -21.8 7.8 -22.9
2026-02-15T01:18:44.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:18:44.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:18:44.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.970942
2026-02-15T01:18:44.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:18:44.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:18:44.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:18:44.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:18:44.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:18:44.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:18:31', tmtdew=2.59, humidity=83.51, cloud=0.0, wind=47.53, temperature=7.51, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:18:31', seeing=2.36, atlas_timestamp='2026-02-14T23:18:09.389', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, 0.02725000000000044, -0.08274999999999899, -0.053500000000001435, -0.06550000000000011, 0.022750000000002046, 0.01249999999999929, 0.020250000000000767, 0.02549999999999919, 0.030000000000001137, -0.02224999999999966, -0.02400000000000091, 0.05799999999999983, 0.010249999999999204, 0.02999999999999936, 0.009999999999999787, 0.014749999999999375, 0.005499999999999616, 0.022499999999999076, 0.010249999999999204, 0.05999999999999872, 0.04974999999999952, 0.03225000000000122, 0.060750000000000526, 0.09699999999999953, 0.015499999999999403, 0.04625000000000057, -0.024499999999999744, 0.06700000000000017, -0.02049999999999841, 0.06700000000000017, 0.0730000000000004, 0.0677500000000002], zp_timestamp='2026-02-14T23:17:00')
2026-02-15T01:18:44.817 [DEBUG] [Thread-195493] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:18:44.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-15T01:18:44.912 [DEBUG] [Thread-195496] [transport.py] [_log()] starting thread (client mode): 0xa2d7b520
2026-02-15T01:18:44.912 [DEBUG] [Thread-195496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:18:44.926 [DEBUG] [Thread-195496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:18:44.926 [INFO] [Thread-195496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:18:44.934 [DEBUG] [Thread-195496] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:18:44.934 [DEBUG] [Thread-195496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:18:44.934 [DEBUG] [Thread-195496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:18:44.934 [DEBUG] [Thread-195496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:18:44.934 [DEBUG] [Thread-195496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:18:44.934 [DEBUG] [Thread-195496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:18:44.934 [DEBUG] [Thread-195496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:18:44.934 [DEBUG] [Thread-195496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:18:44.934 [DEBUG] [Thread-195496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:18:44.934 [DEBUG] [Thread-195496] [transport.py] [_log()] client lang: <none>
2026-02-15T01:18:44.934 [DEBUG] [Thread-195496] [transport.py] [_log()] server lang: <none>
2026-02-15T01:18:44.935 [DEBUG] [Thread-195496] [transport.py] [_log()] kex follows: False
2026-02-15T01:18:44.935 [DEBUG] [Thread-195496] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:18:44.935 [DEBUG] [Thread-195496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:18:44.935 [DEBUG] [Thread-195496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:18:44.935 [DEBUG] [Thread-195496] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:18:44.935 [DEBUG] [Thread-195496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:18:44.935 [DEBUG] [Thread-195496] [transport.py] [_log()] Compression: none
2026-02-15T01:18:44.935 [DEBUG] [Thread-195496] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:18:44.991 [DEBUG] [Thread-195496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:18:44.992 [DEBUG] [Thread-195496] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:18:44.993 [DEBUG] [Thread-195496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:18:44.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:18:44.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:18:45.048 [DEBUG] [Thread-195496] [transport.py] [_log()] userauth is OK
2026-02-15T01:18:45.048 [DEBUG] [Thread-195496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:18:45.048 [DEBUG] [Thread-195496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:18:45.048 [DEBUG] [Thread-195496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:18:45.049 [DEBUG] [Thread-195496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:18:45.067 [INFO] [Thread-195496] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:18:45.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-15T01:18:45.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:18:45.873 [DEBUG] [Thread-195496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:18:45.873 [DEBUG] [Thread-195496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:18:45.923 [DEBUG] [Thread-195496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:18:45.923 [DEBUG] [Thread-195496] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:18:45.931 [DEBUG] [Thread-195496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:18:45.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:18:45.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:18:45.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:18:45.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:18:45.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:18:45.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:18:45.964 [DEBUG] [Thread-195496] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:18:55.440 [DEBUG] [Thread-195498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:19:03.103 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:19:10.498 [DEBUG] [Thread-195499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:19:12.255 [DEBUG] [Thread-195500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:19:15.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:19:15.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:19:15.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-15T01:19:18.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 19, 6), 2.55, 83.71, 0.0, 50.21, 7.53, 0, 1, 0, 2, 1, 0),)
2026-02-15T01:19:18.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:19:06
2026-02-15T01:19:18.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:19:18.544 [DEBUG] [Thread-195501] [transport.py] [_log()] starting thread (client mode): 0xa2d97130
2026-02-15T01:19:18.544 [DEBUG] [Thread-195501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:19:18.565 [DEBUG] [Thread-195501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:19:18.565 [INFO] [Thread-195501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:19:18.568 [DEBUG] [Thread-195501] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:19:18.568 [DEBUG] [Thread-195501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:19:18.568 [DEBUG] [Thread-195501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:19:18.568 [DEBUG] [Thread-195501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:19:18.568 [DEBUG] [Thread-195501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:19:18.568 [DEBUG] [Thread-195501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:19:18.568 [DEBUG] [Thread-195501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:19:18.568 [DEBUG] [Thread-195501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:19:18.568 [DEBUG] [Thread-195501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:19:18.568 [DEBUG] [Thread-195501] [transport.py] [_log()] client lang: <none>
2026-02-15T01:19:18.569 [DEBUG] [Thread-195501] [transport.py] [_log()] server lang: <none>
2026-02-15T01:19:18.569 [DEBUG] [Thread-195501] [transport.py] [_log()] kex follows: False
2026-02-15T01:19:18.569 [DEBUG] [Thread-195501] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:19:18.569 [DEBUG] [Thread-195501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:19:18.569 [DEBUG] [Thread-195501] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:19:18.569 [DEBUG] [Thread-195501] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:19:18.569 [DEBUG] [Thread-195501] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:19:18.569 [DEBUG] [Thread-195501] [transport.py] [_log()] Compression: none
2026-02-15T01:19:18.569 [DEBUG] [Thread-195501] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:19:18.587 [DEBUG] [Thread-195501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:19:18.587 [DEBUG] [Thread-195501] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:19:18.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:19:18.588 [DEBUG] [Thread-195501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:19:18.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:19:18.591 [DEBUG] [Thread-195501] [transport.py] [_log()] userauth is OK
2026-02-15T01:19:18.591 [DEBUG] [Thread-195501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:19:18.591 [DEBUG] [Thread-195501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:19:18.591 [DEBUG] [Thread-195501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:19:18.591 [DEBUG] [Thread-195501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:19:18.616 [INFO] [Thread-195501] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:19:18.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:19:19.277 [DEBUG] [Thread-195501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:19:19.277 [DEBUG] [Thread-195501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:19:19.277 [DEBUG] [Thread-195501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:19:19.318 [DEBUG] [Thread-195501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:19:19.319 [DEBUG] [Thread-195501] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:19:19.323 [DEBUG] [Thread-195501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:19:19.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:19:19.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:19:19.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:19:19.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:19:19.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:19:19.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:19:19.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:19:19.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:19:19.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:19:19.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.971289 -999.00   +7.30  37.51     87   +5.30 1 1 2 2 1     0    0 1.26 -47.03 ZNESW 37.5 37.5 150.6 42.3 7.9 -21.0 7.7 -21.4 7.5 -20.6 7.8 -21.8
2026-02-15T01:19:19.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:19:19.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:19:19.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.971289
2026-02-15T01:19:19.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:19:19.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:19:19.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:19:19.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:19:19.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:19:19.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:19:06', tmtdew=2.55, humidity=83.71, cloud=0.0, wind=50.21, temperature=7.53, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:19:07', seeing=2.4, atlas_timestamp='2026-02-14T23:18:39.370', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, 0.02725000000000044, -0.08274999999999899, -0.053500000000001435, -0.06550000000000011, 0.022750000000002046, 0.01249999999999929, 0.020250000000000767, 0.02549999999999919, 0.030000000000001137, -0.02224999999999966, -0.02400000000000091, 0.05799999999999983, 0.010249999999999204, 0.02999999999999936, 0.009999999999999787, 0.014749999999999375, 0.005499999999999616, 0.022499999999999076, 0.010249999999999204, 0.05999999999999872, 0.04974999999999952, 0.03225000000000122, 0.060750000000000526, 0.09699999999999953, 0.015499999999999403, 0.04625000000000057, -0.024499999999999744, 0.06700000000000017, -0.02049999999999841, 0.06700000000000017, 0.0730000000000004, 0.0677500000000002], zp_timestamp='2026-02-14T23:17:00')
2026-02-15T01:19:19.347 [DEBUG] [Thread-195501] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:19:19.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-15T01:19:19.442 [DEBUG] [Thread-195504] [transport.py] [_log()] starting thread (client mode): 0xa2d19750
2026-02-15T01:19:19.442 [DEBUG] [Thread-195504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:19:19.457 [DEBUG] [Thread-195504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:19:19.457 [INFO] [Thread-195504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:19:19.465 [DEBUG] [Thread-195504] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:19:19.465 [DEBUG] [Thread-195504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:19:19.465 [DEBUG] [Thread-195504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:19:19.465 [DEBUG] [Thread-195504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:19:19.465 [DEBUG] [Thread-195504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:19:19.465 [DEBUG] [Thread-195504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:19:19.465 [DEBUG] [Thread-195504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:19:19.465 [DEBUG] [Thread-195504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:19:19.465 [DEBUG] [Thread-195504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:19:19.465 [DEBUG] [Thread-195504] [transport.py] [_log()] client lang: <none>
2026-02-15T01:19:19.465 [DEBUG] [Thread-195504] [transport.py] [_log()] server lang: <none>
2026-02-15T01:19:19.465 [DEBUG] [Thread-195504] [transport.py] [_log()] kex follows: False
2026-02-15T01:19:19.465 [DEBUG] [Thread-195504] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:19:19.465 [DEBUG] [Thread-195504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:19:19.466 [DEBUG] [Thread-195504] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:19:19.466 [DEBUG] [Thread-195504] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:19:19.466 [DEBUG] [Thread-195504] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:19:19.466 [DEBUG] [Thread-195504] [transport.py] [_log()] Compression: none
2026-02-15T01:19:19.466 [DEBUG] [Thread-195504] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:19:19.524 [DEBUG] [Thread-195504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:19:19.525 [DEBUG] [Thread-195504] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:19:19.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:19:19.526 [DEBUG] [Thread-195504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:19:19.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:19:19.580 [DEBUG] [Thread-195504] [transport.py] [_log()] userauth is OK
2026-02-15T01:19:19.580 [DEBUG] [Thread-195504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:19:19.580 [DEBUG] [Thread-195504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:19:19.580 [DEBUG] [Thread-195504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:19:19.581 [DEBUG] [Thread-195504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:19:19.599 [INFO] [Thread-195504] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:19:19.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T01:19:19.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:19:20.414 [DEBUG] [Thread-195504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:19:20.414 [DEBUG] [Thread-195504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:19:20.462 [DEBUG] [Thread-195504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:19:20.463 [DEBUG] [Thread-195504] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:19:20.472 [DEBUG] [Thread-195504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:19:20.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:19: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')
2026-02-15T01:19:20.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:19:20.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:19:20.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:19:20.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:19:20.508 [DEBUG] [Thread-195504] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:19:22.051 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:19:25.537 [DEBUG] [Thread-195506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:19:30.174 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:19:30.176 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:19:40.590 [DEBUG] [Thread-195507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:19:40.738 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:19:50.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:19:50.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:19:50.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-15T01:19:52.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 19, 42), 2.78, 82.51, 0.0, 48.87, 7.86, 0, 1, 0, 2, 1, 0),)
2026-02-15T01:19:52.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:19:42
2026-02-15T01:19:53.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:19:53.193 [DEBUG] [Thread-195508] [transport.py] [_log()] starting thread (client mode): 0xa2d1ae00
2026-02-15T01:19:53.193 [DEBUG] [Thread-195508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:19:53.213 [DEBUG] [Thread-195508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:19:53.213 [INFO] [Thread-195508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:19:53.216 [DEBUG] [Thread-195508] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:19:53.216 [DEBUG] [Thread-195508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:19:53.217 [DEBUG] [Thread-195508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:19:53.217 [DEBUG] [Thread-195508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:19:53.217 [DEBUG] [Thread-195508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:19:53.217 [DEBUG] [Thread-195508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:19:53.217 [DEBUG] [Thread-195508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:19:53.217 [DEBUG] [Thread-195508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:19:53.217 [DEBUG] [Thread-195508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:19:53.217 [DEBUG] [Thread-195508] [transport.py] [_log()] client lang: <none>
2026-02-15T01:19:53.217 [DEBUG] [Thread-195508] [transport.py] [_log()] server lang: <none>
2026-02-15T01:19:53.217 [DEBUG] [Thread-195508] [transport.py] [_log()] kex follows: False
2026-02-15T01:19:53.217 [DEBUG] [Thread-195508] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:19:53.217 [DEBUG] [Thread-195508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:19:53.217 [DEBUG] [Thread-195508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:19:53.217 [DEBUG] [Thread-195508] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:19:53.217 [DEBUG] [Thread-195508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:19:53.217 [DEBUG] [Thread-195508] [transport.py] [_log()] Compression: none
2026-02-15T01:19:53.217 [DEBUG] [Thread-195508] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:19:53.234 [DEBUG] [Thread-195508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:19:53.235 [DEBUG] [Thread-195508] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:19:53.235 [DEBUG] [Thread-195508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:19:53.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:19:53.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:19:53.237 [DEBUG] [Thread-195508] [transport.py] [_log()] userauth is OK
2026-02-15T01:19:53.238 [DEBUG] [Thread-195508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:19:53.238 [DEBUG] [Thread-195508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:19:53.238 [DEBUG] [Thread-195508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:19:53.238 [DEBUG] [Thread-195508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:19:53.257 [INFO] [Thread-195508] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:19:53.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:19:54.028 [DEBUG] [Thread-195508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:19:54.029 [DEBUG] [Thread-195508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:19:54.029 [DEBUG] [Thread-195508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:19:54.069 [DEBUG] [Thread-195508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:19:54.069 [DEBUG] [Thread-195508] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:19:54.072 [DEBUG] [Thread-195508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:19:54.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:19:54.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:19:54.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:19:54.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:19:54.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:19:54.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:19:54.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:19:54.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:19:54.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:19:54.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.971636 -999.00   +7.30  29.82     87   +5.30 1 1 1 2 1     0    0 1.14 -47.77 ZNESW 29.8 29.8 160.0 46.6 7.9 -21.9 7.7 -21.7 7.5 -20.7 7.8 -21.1
2026-02-15T01:19:54.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:19:54.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:19:54.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.971636
2026-02-15T01:19:54.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:19:54.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:19:54.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:19:54.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:19:54.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:19:54.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:19:42', tmtdew=2.78, humidity=82.51, cloud=0.0, wind=48.87, temperature=7.86, tmtdew_warn=0, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:19:42', seeing=2.4, atlas_timestamp='2026-02-14T23:19:09.350', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, 0.02725000000000044, -0.08274999999999899, -0.053500000000001435, -0.06550000000000011, 0.022750000000002046, 0.01249999999999929, 0.020250000000000767, 0.02549999999999919, 0.030000000000001137, -0.02224999999999966, -0.02400000000000091, 0.05799999999999983, 0.010249999999999204, 0.02999999999999936, 0.009999999999999787, 0.014749999999999375, 0.005499999999999616, 0.022499999999999076, 0.010249999999999204, 0.05999999999999872, 0.04974999999999952, 0.03225000000000122, 0.060750000000000526, 0.09699999999999953, 0.015499999999999403, 0.04625000000000057, -0.024499999999999744, 0.06700000000000017, -0.02049999999999841, 0.06700000000000017, 0.0730000000000004, 0.0677500000000002], zp_timestamp='2026-02-14T23:17:00')
2026-02-15T01:19:54.098 [DEBUG] [Thread-195508] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:19:54.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-15T01:19:54.194 [DEBUG] [Thread-195511] [transport.py] [_log()] starting thread (client mode): 0xa5740610
2026-02-15T01:19:54.194 [DEBUG] [Thread-195511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:19:54.210 [DEBUG] [Thread-195511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:19:54.210 [INFO] [Thread-195511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:19:54.218 [DEBUG] [Thread-195511] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:19:54.218 [DEBUG] [Thread-195511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:19:54.218 [DEBUG] [Thread-195511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:19:54.219 [DEBUG] [Thread-195511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:19:54.219 [DEBUG] [Thread-195511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:19:54.219 [DEBUG] [Thread-195511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:19:54.219 [DEBUG] [Thread-195511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:19:54.219 [DEBUG] [Thread-195511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:19:54.219 [DEBUG] [Thread-195511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:19:54.219 [DEBUG] [Thread-195511] [transport.py] [_log()] client lang: <none>
2026-02-15T01:19:54.219 [DEBUG] [Thread-195511] [transport.py] [_log()] server lang: <none>
2026-02-15T01:19:54.219 [DEBUG] [Thread-195511] [transport.py] [_log()] kex follows: False
2026-02-15T01:19:54.219 [DEBUG] [Thread-195511] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:19:54.219 [DEBUG] [Thread-195511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:19:54.219 [DEBUG] [Thread-195511] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:19:54.219 [DEBUG] [Thread-195511] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:19:54.219 [DEBUG] [Thread-195511] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:19:54.219 [DEBUG] [Thread-195511] [transport.py] [_log()] Compression: none
2026-02-15T01:19:54.219 [DEBUG] [Thread-195511] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:19:54.277 [DEBUG] [Thread-195511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:19:54.278 [DEBUG] [Thread-195511] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:19:54.278 [DEBUG] [Thread-195511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:19:54.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:19:54.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:19:54.336 [DEBUG] [Thread-195511] [transport.py] [_log()] userauth is OK
2026-02-15T01:19:54.336 [DEBUG] [Thread-195511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:19:54.336 [DEBUG] [Thread-195511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:19:54.336 [DEBUG] [Thread-195511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:19:54.336 [DEBUG] [Thread-195511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:19:54.354 [INFO] [Thread-195511] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:19:54.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T01:19:54.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:19:55.162 [DEBUG] [Thread-195511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:19:55.162 [DEBUG] [Thread-195511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:19:55.210 [DEBUG] [Thread-195511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:19:55.210 [DEBUG] [Thread-195511] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:19:55.219 [DEBUG] [Thread-195511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:19:55.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:19:55.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:19:55.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:19:55.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:19:55.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:19:55.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:19:55.256 [DEBUG] [Thread-195511] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:19:55.624 [DEBUG] [Thread-195513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:19:59.374 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:20:10.675 [DEBUG] [Thread-195514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:20:12.323 [DEBUG] [Thread-195515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:20:18.084 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:20:25.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:20:25.279 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:20:25.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-15T01:20:25.711 [DEBUG] [Thread-195516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:20:27.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 20, 17), 2.41, 84.42, 0.0, 48.7, 7.45, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:20:27.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:20:17
2026-02-15T01:20:27.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:20:27.676 [DEBUG] [Thread-195517] [transport.py] [_log()] starting thread (client mode): 0xa5741ae0
2026-02-15T01:20:27.676 [DEBUG] [Thread-195517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:20:27.696 [DEBUG] [Thread-195517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:20:27.696 [INFO] [Thread-195517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:20:27.700 [DEBUG] [Thread-195517] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:20:27.700 [DEBUG] [Thread-195517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:20:27.700 [DEBUG] [Thread-195517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:20:27.700 [DEBUG] [Thread-195517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:20:27.700 [DEBUG] [Thread-195517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:20:27.700 [DEBUG] [Thread-195517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:20:27.700 [DEBUG] [Thread-195517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:20:27.701 [DEBUG] [Thread-195517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:20:27.701 [DEBUG] [Thread-195517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:20:27.701 [DEBUG] [Thread-195517] [transport.py] [_log()] client lang: <none>
2026-02-15T01:20:27.701 [DEBUG] [Thread-195517] [transport.py] [_log()] server lang: <none>
2026-02-15T01:20:27.701 [DEBUG] [Thread-195517] [transport.py] [_log()] kex follows: False
2026-02-15T01:20:27.701 [DEBUG] [Thread-195517] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:20:27.701 [DEBUG] [Thread-195517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:20:27.701 [DEBUG] [Thread-195517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:20:27.701 [DEBUG] [Thread-195517] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:20:27.701 [DEBUG] [Thread-195517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:20:27.701 [DEBUG] [Thread-195517] [transport.py] [_log()] Compression: none
2026-02-15T01:20:27.701 [DEBUG] [Thread-195517] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:20:27.717 [DEBUG] [Thread-195517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:20:27.718 [DEBUG] [Thread-195517] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:20:27.718 [DEBUG] [Thread-195517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:20:27.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:20:27.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:20:27.721 [DEBUG] [Thread-195517] [transport.py] [_log()] userauth is OK
2026-02-15T01:20:27.721 [DEBUG] [Thread-195517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:20:27.721 [DEBUG] [Thread-195517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:20:27.721 [DEBUG] [Thread-195517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:20:27.721 [DEBUG] [Thread-195517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:20:27.739 [INFO] [Thread-195517] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:20:27.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:20:28.373 [DEBUG] [Thread-195517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:20:28.373 [DEBUG] [Thread-195517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:20:28.374 [DEBUG] [Thread-195517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:20:28.414 [DEBUG] [Thread-195517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:20:28.415 [DEBUG] [Thread-195517] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:20:28.418 [DEBUG] [Thread-195517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:20:28.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:20:28.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:20:28.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:20:28.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:20:28.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:20:28.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:20:28.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:20:28.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:20:28.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:20:28.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.971984 -999.00   +7.30  28.38     87   +5.30 1 2 1 2 1     0    0 1.08 -52.26 ZnESW 28.4 28.4 143.6 35.3 7.9 -22.5 7.7 -22.1 7.5 -21.1 7.8 -22.4
2026-02-15T01:20:28.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:20:28.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:20:28.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.971984
2026-02-15T01:20:28.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:20:28.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:20:28.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:20:28.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:20:28.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T01:20:28.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:20:17', tmtdew=2.41, humidity=84.42, cloud=0.0, wind=48.7, temperature=7.45, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:20:17', seeing=2.29, atlas_timestamp='2026-02-14T23:19:39.418', atlas_cloud=2, atlas_rain=1, zp_data=[-0.010249999999999204, 0.02725000000000044, -0.08274999999999899, -0.053500000000001435, -0.06550000000000011, 0.022750000000002046, 0.01249999999999929, 0.020250000000000767, 0.02549999999999919, 0.030000000000001137, -0.02224999999999966, -0.02400000000000091, 0.05799999999999983, 0.010249999999999204, 0.02999999999999936, 0.009999999999999787, 0.014749999999999375, 0.005499999999999616, 0.022499999999999076, 0.010249999999999204, 0.05999999999999872, 0.04974999999999952, 0.03225000000000122, 0.060750000000000526, 0.09699999999999953, 0.015499999999999403, 0.04625000000000057, -0.024499999999999744, 0.06700000000000017, -0.02049999999999841, 0.06700000000000017, 0.0730000000000004, 0.0677500000000002], zp_timestamp='2026-02-14T23:17:00')
2026-02-15T01:20:28.447 [DEBUG] [Thread-195517] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:20:28.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T01:20:28.541 [DEBUG] [Thread-195520] [transport.py] [_log()] starting thread (client mode): 0xa57d5600
2026-02-15T01:20:28.541 [DEBUG] [Thread-195520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:20:28.556 [DEBUG] [Thread-195520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:20:28.556 [INFO] [Thread-195520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:20:28.564 [DEBUG] [Thread-195520] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:20:28.564 [DEBUG] [Thread-195520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:20:28.564 [DEBUG] [Thread-195520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:20:28.564 [DEBUG] [Thread-195520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:20:28.564 [DEBUG] [Thread-195520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:20:28.564 [DEBUG] [Thread-195520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:20:28.564 [DEBUG] [Thread-195520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:20:28.564 [DEBUG] [Thread-195520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:20:28.564 [DEBUG] [Thread-195520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:20:28.564 [DEBUG] [Thread-195520] [transport.py] [_log()] client lang: <none>
2026-02-15T01:20:28.564 [DEBUG] [Thread-195520] [transport.py] [_log()] server lang: <none>
2026-02-15T01:20:28.565 [DEBUG] [Thread-195520] [transport.py] [_log()] kex follows: False
2026-02-15T01:20:28.565 [DEBUG] [Thread-195520] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:20:28.565 [DEBUG] [Thread-195520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:20:28.565 [DEBUG] [Thread-195520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:20:28.565 [DEBUG] [Thread-195520] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:20:28.565 [DEBUG] [Thread-195520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:20:28.565 [DEBUG] [Thread-195520] [transport.py] [_log()] Compression: none
2026-02-15T01:20:28.565 [DEBUG] [Thread-195520] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:20:28.625 [DEBUG] [Thread-195520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:20:28.626 [DEBUG] [Thread-195520] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:20:28.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:20:28.627 [DEBUG] [Thread-195520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:20:28.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:20:28.680 [DEBUG] [Thread-195520] [transport.py] [_log()] userauth is OK
2026-02-15T01:20:28.681 [DEBUG] [Thread-195520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:20:28.681 [DEBUG] [Thread-195520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:20:28.681 [DEBUG] [Thread-195520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:20:28.681 [DEBUG] [Thread-195520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:20:28.700 [INFO] [Thread-195520] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:20:28.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-15T01:20:28.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:20:29.508 [DEBUG] [Thread-195520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:20:29.508 [DEBUG] [Thread-195520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:20:29.557 [DEBUG] [Thread-195520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:20:29.557 [DEBUG] [Thread-195520] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:20:29.566 [DEBUG] [Thread-195520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:20:29.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:20: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')
2026-02-15T01:20:29.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:20:29.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:20:29.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:20:29.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:20:29.603 [DEBUG] [Thread-195520] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:20:30.374 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:20:30.376 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:20:36.861 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:20:40.746 [DEBUG] [Thread-195522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:20:55.803 [DEBUG] [Thread-195523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:20:55.822 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:20:59.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:20:59.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:20: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-15T01:21:01.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 20, 52), 2.39, 85.07, 0.0, 48.98, 7.53, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:21:01.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:20:52
2026-02-15T01:21:01.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:21:02.025 [DEBUG] [Thread-195524] [transport.py] [_log()] starting thread (client mode): 0xa57d7100
2026-02-15T01:21:02.025 [DEBUG] [Thread-195524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:21:02.045 [DEBUG] [Thread-195524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:21:02.045 [INFO] [Thread-195524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:21:02.048 [DEBUG] [Thread-195524] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:21:02.048 [DEBUG] [Thread-195524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:21:02.048 [DEBUG] [Thread-195524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:21:02.048 [DEBUG] [Thread-195524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:21:02.048 [DEBUG] [Thread-195524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:21:02.049 [DEBUG] [Thread-195524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:21:02.049 [DEBUG] [Thread-195524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:21:02.049 [DEBUG] [Thread-195524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:21:02.049 [DEBUG] [Thread-195524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:21:02.049 [DEBUG] [Thread-195524] [transport.py] [_log()] client lang: <none>
2026-02-15T01:21:02.049 [DEBUG] [Thread-195524] [transport.py] [_log()] server lang: <none>
2026-02-15T01:21:02.049 [DEBUG] [Thread-195524] [transport.py] [_log()] kex follows: False
2026-02-15T01:21:02.049 [DEBUG] [Thread-195524] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:21:02.049 [DEBUG] [Thread-195524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:21:02.049 [DEBUG] [Thread-195524] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:21:02.049 [DEBUG] [Thread-195524] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:21:02.049 [DEBUG] [Thread-195524] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:21:02.049 [DEBUG] [Thread-195524] [transport.py] [_log()] Compression: none
2026-02-15T01:21:02.049 [DEBUG] [Thread-195524] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:21:02.058 [DEBUG] [Thread-195524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:21:02.058 [DEBUG] [Thread-195524] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:21:02.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:21:02.059 [DEBUG] [Thread-195524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:21:02.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:21:02.061 [DEBUG] [Thread-195524] [transport.py] [_log()] userauth is OK
2026-02-15T01:21:02.061 [DEBUG] [Thread-195524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:21:02.061 [DEBUG] [Thread-195524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:21:02.061 [DEBUG] [Thread-195524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:21:02.061 [DEBUG] [Thread-195524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:21:02.086 [INFO] [Thread-195524] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:21:02.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:21:02.715 [DEBUG] [Thread-195524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:21:02.715 [DEBUG] [Thread-195524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:21:02.716 [DEBUG] [Thread-195524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:21:02.757 [DEBUG] [Thread-195524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:21:02.757 [DEBUG] [Thread-195524] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:21:02.760 [DEBUG] [Thread-195524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:21:02.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:21:02.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:21:02.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:21:02.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:21:02.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:21:02.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:21:02.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:21:02.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:21:02.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:21:02.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.972678 -999.00   +7.30  31.64     87   +5.40 1 2 2 2 1     0    0 0.94 -53.16 ZnESW 31.6 31.6 151.6 54.5 7.8 -20.0 7.7 -19.4 7.5 -19.0 7.8 -21.2
2026-02-15T01:21:02.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:21:02.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:21:02.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.972678
2026-02-15T01:21:02.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:21:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:21:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:21:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:21:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T01:21:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:20:52', tmtdew=2.39, humidity=85.07, cloud=0.0, wind=48.98, temperature=7.53, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:20:53', seeing=2.39, atlas_timestamp='2026-02-14T23:20:39.379', atlas_cloud=2, atlas_rain=1, zp_data=[-0.010249999999999204, 0.02725000000000044, -0.08274999999999899, -0.053500000000001435, -0.06550000000000011, 0.022750000000002046, 0.01249999999999929, 0.020250000000000767, 0.02549999999999919, 0.030000000000001137, -0.02224999999999966, -0.02400000000000091, 0.05799999999999983, 0.010249999999999204, 0.02999999999999936, 0.009999999999999787, 0.014749999999999375, 0.005499999999999616, 0.022499999999999076, 0.010249999999999204, 0.05999999999999872, 0.04974999999999952, 0.03225000000000122, 0.060750000000000526, 0.09699999999999953, 0.015499999999999403, 0.04625000000000057, -0.024499999999999744, 0.06700000000000017, -0.02049999999999841, 0.06700000000000017, 0.0730000000000004, 0.0677500000000002], zp_timestamp='2026-02-14T23:17:00')
2026-02-15T01:21:02.785 [DEBUG] [Thread-195524] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:21:02.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-15T01:21:02.884 [DEBUG] [Thread-195527] [transport.py] [_log()] starting thread (client mode): 0xa5740850
2026-02-15T01:21:02.885 [DEBUG] [Thread-195527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:21:02.900 [DEBUG] [Thread-195527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:21:02.900 [INFO] [Thread-195527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:21:02.908 [DEBUG] [Thread-195527] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:21:02.908 [DEBUG] [Thread-195527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:21:02.908 [DEBUG] [Thread-195527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:21:02.908 [DEBUG] [Thread-195527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:21:02.908 [DEBUG] [Thread-195527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:21:02.908 [DEBUG] [Thread-195527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:21:02.908 [DEBUG] [Thread-195527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:21:02.909 [DEBUG] [Thread-195527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:21:02.909 [DEBUG] [Thread-195527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:21:02.909 [DEBUG] [Thread-195527] [transport.py] [_log()] client lang: <none>
2026-02-15T01:21:02.909 [DEBUG] [Thread-195527] [transport.py] [_log()] server lang: <none>
2026-02-15T01:21:02.909 [DEBUG] [Thread-195527] [transport.py] [_log()] kex follows: False
2026-02-15T01:21:02.909 [DEBUG] [Thread-195527] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:21:02.909 [DEBUG] [Thread-195527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:21:02.909 [DEBUG] [Thread-195527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:21:02.910 [DEBUG] [Thread-195527] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:21:02.910 [DEBUG] [Thread-195527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:21:02.910 [DEBUG] [Thread-195527] [transport.py] [_log()] Compression: none
2026-02-15T01:21:02.910 [DEBUG] [Thread-195527] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:21:02.964 [DEBUG] [Thread-195527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:21:02.965 [DEBUG] [Thread-195527] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:21:02.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:21:02.966 [DEBUG] [Thread-195527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:21:02.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:21:03.020 [DEBUG] [Thread-195527] [transport.py] [_log()] userauth is OK
2026-02-15T01:21:03.020 [DEBUG] [Thread-195527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:21:03.021 [DEBUG] [Thread-195527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:21:03.021 [DEBUG] [Thread-195527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:21:03.021 [DEBUG] [Thread-195527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:21:03.038 [INFO] [Thread-195527] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:21:03.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-15T01:21:03.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:21:03.883 [DEBUG] [Thread-195527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:21:03.883 [DEBUG] [Thread-195527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:21:03.931 [DEBUG] [Thread-195527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:21:03.932 [DEBUG] [Thread-195527] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:21:03.941 [DEBUG] [Thread-195527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:21:03.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:21:03.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-15T01:21:03.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:21:03.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:21:03.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:21:03.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:21:03.978 [DEBUG] [Thread-195527] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:21:10.839 [DEBUG] [Thread-195529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:21:12.389 [DEBUG] [Thread-195530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:21:15.006 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:21:25.881 [DEBUG] [Thread-195531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:21:30.589 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:21:30.590 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:21:33.932 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:21:33.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:21:33.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:21:34.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-15T01:21:35.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 21, 28), 2.37, 85.17, 0.0, 50.69, 7.51, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:21:35.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:21:28
2026-02-15T01:21:36.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:21:36.345 [DEBUG] [Thread-195532] [transport.py] [_log()] starting thread (client mode): 0xa57d6f50
2026-02-15T01:21:36.345 [DEBUG] [Thread-195532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:21:36.365 [DEBUG] [Thread-195532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:21:36.365 [INFO] [Thread-195532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:21:36.368 [DEBUG] [Thread-195532] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:21:36.368 [DEBUG] [Thread-195532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:21:36.369 [DEBUG] [Thread-195532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:21:36.369 [DEBUG] [Thread-195532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:21:36.369 [DEBUG] [Thread-195532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:21:36.369 [DEBUG] [Thread-195532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:21:36.369 [DEBUG] [Thread-195532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:21:36.369 [DEBUG] [Thread-195532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:21:36.369 [DEBUG] [Thread-195532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:21:36.369 [DEBUG] [Thread-195532] [transport.py] [_log()] client lang: <none>
2026-02-15T01:21:36.369 [DEBUG] [Thread-195532] [transport.py] [_log()] server lang: <none>
2026-02-15T01:21:36.369 [DEBUG] [Thread-195532] [transport.py] [_log()] kex follows: False
2026-02-15T01:21:36.369 [DEBUG] [Thread-195532] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:21:36.369 [DEBUG] [Thread-195532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:21:36.369 [DEBUG] [Thread-195532] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:21:36.369 [DEBUG] [Thread-195532] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:21:36.369 [DEBUG] [Thread-195532] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:21:36.369 [DEBUG] [Thread-195532] [transport.py] [_log()] Compression: none
2026-02-15T01:21:36.369 [DEBUG] [Thread-195532] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:21:36.391 [DEBUG] [Thread-195532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:21:36.392 [DEBUG] [Thread-195532] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:21:36.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:21:36.393 [DEBUG] [Thread-195532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:21:36.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:21:36.396 [DEBUG] [Thread-195532] [transport.py] [_log()] userauth is OK
2026-02-15T01:21:36.396 [DEBUG] [Thread-195532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:21:36.396 [DEBUG] [Thread-195532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:21:36.396 [DEBUG] [Thread-195532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:21:36.396 [DEBUG] [Thread-195532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:21:36.421 [INFO] [Thread-195532] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:21:36.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:21:37.044 [DEBUG] [Thread-195532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:21:37.044 [DEBUG] [Thread-195532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:21:37.044 [DEBUG] [Thread-195532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:21:37.085 [DEBUG] [Thread-195532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:21:37.086 [DEBUG] [Thread-195532] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:21:37.088 [DEBUG] [Thread-195532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:21:37.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:21:37.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:21:37.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:21:37.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:21:37.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:21:37.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:21:37.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:21:37.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:21:37.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:21:37.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.973025 -999.00   +7.30  32.62     87   +5.40 1 2 2 2 1     0    0 0.97 -51.45 ZnESW 32.6 32.6 143.4 48.3 7.9 -21.5 7.7 -21.2 7.5 -20.2 7.8 -21.0
2026-02-15T01:21:37.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:21:37.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:21:37.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.973025
2026-02-15T01:21:37.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:21:37.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:21:37.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:21:37.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:21:37.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T01:21:37.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:21:28', tmtdew=2.37, humidity=85.17, cloud=0.0, wind=50.69, temperature=7.51, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:21:28', seeing=2.29, atlas_timestamp='2026-02-14T23:21:09.360', atlas_cloud=2, atlas_rain=1, zp_data=[0.17425000000000068, 0.1647500000000015, -0.00975000000000037, 0.05999999999999872, 0.08750000000000036, 0.2872500000000002, 0.36299999999999955, 0.43074999999999974, 0.37650000000000006, 0.15600000000000058, 0.07124999999999915, 0.08799999999999919, 0.1479999999999997, 0.22724999999999973, 0.41499999999999915, 0.7329999999999997, 0.3512500000000003, 0.10299999999999976, 0.12399999999999878, 0.08424999999999905, 0.13549999999999862, 0.14074999999999882, 0.3992500000000003, 1.1687500000000002, 0.4454999999999991, 0.10550000000000104, 0.10275000000000034, 0.007500000000000284, 0.040000000000000924, 0.045000000000001705, 0.3100000000000014, 0.44200000000000106, 0.5377499999999991], zp_timestamp='2026-02-14T23:19:00')
2026-02-15T01:21:37.115 [DEBUG] [Thread-195532] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:21:37.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-15T01:21:40.917 [DEBUG] [Thread-195535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:21:53.218 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:21:55.971 [DEBUG] [Thread-195536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:22:11.008 [DEBUG] [Thread-195537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:22:11.854 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:22:12.457 [DEBUG] [Thread-195538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:22:26.044 [DEBUG] [Thread-195539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:22:30.516 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:22:30.791 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:22:30.792 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:22:41.079 [DEBUG] [Thread-195540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:22:49.161 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:22:56.115 [DEBUG] [Thread-195541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:23:07.998 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:23:11.154 [DEBUG] [Thread-195542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:23:12.519 [DEBUG] [Thread-195543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:23:26.190 [DEBUG] [Thread-195544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:23:26.638 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:23:30.990 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:23:30.991 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:23:41.231 [DEBUG] [Thread-195545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:23:45.346 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:23:50.200 [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-15T01:23:56.268 [DEBUG] [Thread-195546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:24:04.204 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:24:11.304 [DEBUG] [Thread-195547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:24:12.575 [DEBUG] [Thread-195548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:24:20.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:24:20.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:24:20.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-15T01:24:22.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 23, 48), 2.16, 86.0, 0.0, 48.38, 7.36, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:24:22.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:23:48
2026-02-15T01:24:22.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:24:22.834 [DEBUG] [Thread-195549] [transport.py] [_log()] starting thread (client mode): 0xa2d96a40
2026-02-15T01:24:22.834 [DEBUG] [Thread-195549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:24:22.848 [DEBUG] [Thread-195549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:24:22.848 [INFO] [Thread-195549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:24:22.851 [DEBUG] [Thread-195549] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:24:22.851 [DEBUG] [Thread-195549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:24:22.851 [DEBUG] [Thread-195549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:24:22.851 [DEBUG] [Thread-195549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:24:22.851 [DEBUG] [Thread-195549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:24:22.851 [DEBUG] [Thread-195549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:24:22.851 [DEBUG] [Thread-195549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:24:22.851 [DEBUG] [Thread-195549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:24:22.851 [DEBUG] [Thread-195549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:24:22.851 [DEBUG] [Thread-195549] [transport.py] [_log()] client lang: <none>
2026-02-15T01:24:22.851 [DEBUG] [Thread-195549] [transport.py] [_log()] server lang: <none>
2026-02-15T01:24:22.851 [DEBUG] [Thread-195549] [transport.py] [_log()] kex follows: False
2026-02-15T01:24:22.851 [DEBUG] [Thread-195549] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:24:22.851 [DEBUG] [Thread-195549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:24:22.851 [DEBUG] [Thread-195549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:24:22.851 [DEBUG] [Thread-195549] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:24:22.851 [DEBUG] [Thread-195549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:24:22.851 [DEBUG] [Thread-195549] [transport.py] [_log()] Compression: none
2026-02-15T01:24:22.851 [DEBUG] [Thread-195549] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:24:22.867 [DEBUG] [Thread-195549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:24:22.867 [DEBUG] [Thread-195549] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:24:22.867 [DEBUG] [Thread-195549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:24:22.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:24:22.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:24:22.869 [DEBUG] [Thread-195549] [transport.py] [_log()] userauth is OK
2026-02-15T01:24:22.869 [DEBUG] [Thread-195549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:24:22.869 [DEBUG] [Thread-195549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:24:22.869 [DEBUG] [Thread-195549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:24:22.869 [DEBUG] [Thread-195549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:24:22.887 [INFO] [Thread-195549] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:24:22.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:24:23.339 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:24:23.486 [DEBUG] [Thread-195549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:24:23.486 [DEBUG] [Thread-195549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:24:23.487 [DEBUG] [Thread-195549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:24:23.527 [DEBUG] [Thread-195549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:24:23.527 [DEBUG] [Thread-195549] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:24:23.530 [DEBUG] [Thread-195549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:24:23.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:24:23.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:24:23.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:24:23.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:24:23.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:24:23.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:24:23.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:24:23.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:24:23.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:24:23.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.975109 -999.00   +7.20  32.21     88   +5.40 1 2 2 3 1     0    0 0.40 -68.59 ZNEsW 32.2 32.2 149.6 46.7 7.9 -18.3 7.7 -16.6 7.5 -16.6 7.8 -19.4
2026-02-15T01:24:23.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:24:23.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:24:23.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.975109
2026-02-15T01:24:23.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:24:23.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:24:23.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:24:23.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:24:23.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T01:24:23.544 [DEBUG] [Thread-195549] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:24:23.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:23:48', tmtdew=2.16, humidity=86.0, cloud=0.0, wind=48.38, temperature=7.36, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:23:49', seeing=2.87, atlas_timestamp='2026-02-14T23:24:09.418', atlas_cloud=2, atlas_rain=1, zp_data=[0.17425000000000068, 0.1647500000000015, -0.00975000000000037, 0.05999999999999872, 0.08750000000000036, 0.2872500000000002, 0.36299999999999955, 0.43074999999999974, 0.37650000000000006, 0.15600000000000058, 0.07124999999999915, 0.08799999999999919, 0.1479999999999997, 0.22724999999999973, 0.41499999999999915, 0.7329999999999997, 0.3512500000000003, 0.10299999999999976, 0.12399999999999878, 0.08424999999999905, 0.13549999999999862, 0.14074999999999882, 0.3992500000000003, 1.1687500000000002, 0.4454999999999991, 0.10550000000000104, 0.10275000000000034, 0.007500000000000284, 0.040000000000000924, 0.045000000000001705, 0.3100000000000014, 0.44200000000000106, 0.5377499999999991], zp_timestamp='2026-02-14T23:23:00')
2026-02-15T01:24:23.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-15T01:24:23.632 [DEBUG] [Thread-195552] [transport.py] [_log()] starting thread (client mode): 0xa2d6af50
2026-02-15T01:24:23.632 [DEBUG] [Thread-195552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:24:23.646 [DEBUG] [Thread-195552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:24:23.646 [INFO] [Thread-195552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:24:23.654 [DEBUG] [Thread-195552] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:24:23.654 [DEBUG] [Thread-195552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:24:23.654 [DEBUG] [Thread-195552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:24:23.654 [DEBUG] [Thread-195552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:24:23.655 [DEBUG] [Thread-195552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:24:23.655 [DEBUG] [Thread-195552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:24:23.655 [DEBUG] [Thread-195552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:24:23.655 [DEBUG] [Thread-195552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:24:23.655 [DEBUG] [Thread-195552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:24:23.655 [DEBUG] [Thread-195552] [transport.py] [_log()] client lang: <none>
2026-02-15T01:24:23.655 [DEBUG] [Thread-195552] [transport.py] [_log()] server lang: <none>
2026-02-15T01:24:23.655 [DEBUG] [Thread-195552] [transport.py] [_log()] kex follows: False
2026-02-15T01:24:23.655 [DEBUG] [Thread-195552] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:24:23.655 [DEBUG] [Thread-195552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:24:23.655 [DEBUG] [Thread-195552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:24:23.655 [DEBUG] [Thread-195552] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:24:23.655 [DEBUG] [Thread-195552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:24:23.655 [DEBUG] [Thread-195552] [transport.py] [_log()] Compression: none
2026-02-15T01:24:23.655 [DEBUG] [Thread-195552] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:24:23.713 [DEBUG] [Thread-195552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:24:23.714 [DEBUG] [Thread-195552] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:24:23.714 [DEBUG] [Thread-195552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:24:23.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:24:23.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:24:23.774 [DEBUG] [Thread-195552] [transport.py] [_log()] userauth is OK
2026-02-15T01:24:23.774 [DEBUG] [Thread-195552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:24:23.774 [DEBUG] [Thread-195552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:24:23.774 [DEBUG] [Thread-195552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:24:23.775 [DEBUG] [Thread-195552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:24:23.793 [INFO] [Thread-195552] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:24:23.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-15T01:24:23.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:24:24.620 [DEBUG] [Thread-195552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:24:24.620 [DEBUG] [Thread-195552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:24:24.668 [DEBUG] [Thread-195552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:24:24.668 [DEBUG] [Thread-195552] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:24:24.676 [DEBUG] [Thread-195552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:24:24.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:24:24.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-15T01:24:24.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-15T01:24:24.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:24:24.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:24:24.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:24:24.708 [DEBUG] [Thread-195552] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:24:26.345 [DEBUG] [Thread-195554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:24:31.189 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:24:31.190 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:24:41.397 [DEBUG] [Thread-195555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:24:42.083 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:24:54.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:24:54.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:24:54.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-15T01:24:56.434 [DEBUG] [Thread-195556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:24:56.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 24, 24), 2.15, 86.05, 0.0, 49.44, 7.38, 1, 1, 2, 2, 1, 0),)
2026-02-15T01:24:56.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:24:24
2026-02-15T01:24:56.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:24:57.127 [DEBUG] [Thread-195557] [transport.py] [_log()] starting thread (client mode): 0xa2d69600
2026-02-15T01:24:57.128 [DEBUG] [Thread-195557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:24:57.148 [DEBUG] [Thread-195557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:24:57.148 [INFO] [Thread-195557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:24:57.150 [DEBUG] [Thread-195557] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:24:57.150 [DEBUG] [Thread-195557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:24:57.150 [DEBUG] [Thread-195557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:24:57.150 [DEBUG] [Thread-195557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:24:57.151 [DEBUG] [Thread-195557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:24:57.151 [DEBUG] [Thread-195557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:24:57.151 [DEBUG] [Thread-195557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:24:57.151 [DEBUG] [Thread-195557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:24:57.151 [DEBUG] [Thread-195557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:24:57.151 [DEBUG] [Thread-195557] [transport.py] [_log()] client lang: <none>
2026-02-15T01:24:57.151 [DEBUG] [Thread-195557] [transport.py] [_log()] server lang: <none>
2026-02-15T01:24:57.151 [DEBUG] [Thread-195557] [transport.py] [_log()] kex follows: False
2026-02-15T01:24:57.151 [DEBUG] [Thread-195557] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:24:57.151 [DEBUG] [Thread-195557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:24:57.151 [DEBUG] [Thread-195557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:24:57.151 [DEBUG] [Thread-195557] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:24:57.151 [DEBUG] [Thread-195557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:24:57.151 [DEBUG] [Thread-195557] [transport.py] [_log()] Compression: none
2026-02-15T01:24:57.151 [DEBUG] [Thread-195557] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:24:57.167 [DEBUG] [Thread-195557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:24:57.167 [DEBUG] [Thread-195557] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:24:57.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:24:57.168 [DEBUG] [Thread-195557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:24:57.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:24:57.170 [DEBUG] [Thread-195557] [transport.py] [_log()] userauth is OK
2026-02-15T01:24:57.170 [DEBUG] [Thread-195557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:24:57.170 [DEBUG] [Thread-195557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:24:57.171 [DEBUG] [Thread-195557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:24:57.171 [DEBUG] [Thread-195557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:24:57.196 [INFO] [Thread-195557] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:24:57.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:24:57.884 [DEBUG] [Thread-195557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:24:57.885 [DEBUG] [Thread-195557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:24:57.885 [DEBUG] [Thread-195557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:24:57.926 [DEBUG] [Thread-195557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:24:57.927 [DEBUG] [Thread-195557] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:24:57.929 [DEBUG] [Thread-195557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:24:57.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:24:57.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:24:57.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:24:57.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:24:57.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:24:57.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:24:57.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:24:57.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:24:57.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:24:57.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.975456 -999.00   +7.20  41.06     88   +5.40 1 2 2 3 1     0    0 0.41 -67.93 ZNesW 41.1 41.1 141.2 59.4 7.9 -22.5 7.7 -19.8 7.5 -19.3 7.8 -20.2
2026-02-15T01:24:57.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:24:57.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:24:57.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.975456
2026-02-15T01:24:57.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:24:57.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:24:57.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:24:57.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:24:57.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T01:24:57.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:24:24', tmtdew=2.15, humidity=86.05, cloud=0.0, wind=49.44, temperature=7.38, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:24:24', seeing=2.87, atlas_timestamp='2026-02-14T23:24:39.398', atlas_cloud=2, atlas_rain=1, zp_data=[0.17425000000000068, 0.1647500000000015, -0.00975000000000037, 0.05999999999999872, 0.08750000000000036, 0.2872500000000002, 0.36299999999999955, 0.43074999999999974, 0.37650000000000006, 0.15600000000000058, 0.07124999999999915, 0.08799999999999919, 0.1479999999999997, 0.22724999999999973, 0.41499999999999915, 0.7329999999999997, 0.3512500000000003, 0.10299999999999976, 0.12399999999999878, 0.08424999999999905, 0.13549999999999862, 0.14074999999999882, 0.3992500000000003, 1.1687500000000002, 0.4454999999999991, 0.10550000000000104, 0.10275000000000034, 0.007500000000000284, 0.040000000000000924, 0.045000000000001705, 0.3100000000000014, 0.44200000000000106, 0.5377499999999991], zp_timestamp='2026-02-14T23:23:00')
2026-02-15T01:24:57.958 [DEBUG] [Thread-195557] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:24:58.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T01:24:58.064 [DEBUG] [Thread-195560] [transport.py] [_log()] starting thread (client mode): 0xa5740ca0
2026-02-15T01:24:58.064 [DEBUG] [Thread-195560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:24:58.078 [DEBUG] [Thread-195560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:24:58.078 [INFO] [Thread-195560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:24:58.086 [DEBUG] [Thread-195560] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:24:58.086 [DEBUG] [Thread-195560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:24:58.086 [DEBUG] [Thread-195560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:24:58.087 [DEBUG] [Thread-195560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:24:58.087 [DEBUG] [Thread-195560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:24:58.087 [DEBUG] [Thread-195560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:24:58.087 [DEBUG] [Thread-195560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:24:58.087 [DEBUG] [Thread-195560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:24:58.087 [DEBUG] [Thread-195560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:24:58.087 [DEBUG] [Thread-195560] [transport.py] [_log()] client lang: <none>
2026-02-15T01:24:58.087 [DEBUG] [Thread-195560] [transport.py] [_log()] server lang: <none>
2026-02-15T01:24:58.087 [DEBUG] [Thread-195560] [transport.py] [_log()] kex follows: False
2026-02-15T01:24:58.087 [DEBUG] [Thread-195560] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:24:58.087 [DEBUG] [Thread-195560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:24:58.087 [DEBUG] [Thread-195560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:24:58.087 [DEBUG] [Thread-195560] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:24:58.087 [DEBUG] [Thread-195560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:24:58.087 [DEBUG] [Thread-195560] [transport.py] [_log()] Compression: none
2026-02-15T01:24:58.087 [DEBUG] [Thread-195560] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:24:58.146 [DEBUG] [Thread-195560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:24:58.147 [DEBUG] [Thread-195560] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:24:58.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:24:58.148 [DEBUG] [Thread-195560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:24:58.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:24:58.206 [DEBUG] [Thread-195560] [transport.py] [_log()] userauth is OK
2026-02-15T01:24:58.207 [DEBUG] [Thread-195560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:24:58.207 [DEBUG] [Thread-195560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:24:58.207 [DEBUG] [Thread-195560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:24:58.207 [DEBUG] [Thread-195560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:24:58.224 [INFO] [Thread-195560] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:24:58.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T01:24:58.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:24:59.115 [DEBUG] [Thread-195560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:24:59.115 [DEBUG] [Thread-195560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:24:59.162 [DEBUG] [Thread-195560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:24:59.163 [DEBUG] [Thread-195560] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:24:59.172 [DEBUG] [Thread-195560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:24:59.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:24:59.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:24:59.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-15T01:24:59.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:24:59.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:24:59.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:24:59.208 [DEBUG] [Thread-195560] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:25:01.145 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:25:11.473 [DEBUG] [Thread-195562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:25:12.636 [DEBUG] [Thread-195563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:25:20.093 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:25:26.537 [DEBUG] [Thread-195564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:25:29.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:25:29.231 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:25:29.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-15T01:25:31.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 24, 59), 2.09, 86.62, 0.0, 52.4, 7.35, 1, 1, 2, 2, 1, 0),)
2026-02-15T01:25:31.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:24:59
2026-02-15T01:25:31.391 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:25:31.392 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:25:31.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:25:31.605 [DEBUG] [Thread-195565] [transport.py] [_log()] starting thread (client mode): 0xa2d79b40
2026-02-15T01:25:31.606 [DEBUG] [Thread-195565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:25:31.625 [DEBUG] [Thread-195565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:25:31.626 [INFO] [Thread-195565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:25:31.629 [DEBUG] [Thread-195565] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:25:31.629 [DEBUG] [Thread-195565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:25:31.629 [DEBUG] [Thread-195565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:25:31.629 [DEBUG] [Thread-195565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:25:31.629 [DEBUG] [Thread-195565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:25:31.629 [DEBUG] [Thread-195565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:25:31.629 [DEBUG] [Thread-195565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:25:31.629 [DEBUG] [Thread-195565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:25:31.629 [DEBUG] [Thread-195565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:25:31.629 [DEBUG] [Thread-195565] [transport.py] [_log()] client lang: <none>
2026-02-15T01:25:31.629 [DEBUG] [Thread-195565] [transport.py] [_log()] server lang: <none>
2026-02-15T01:25:31.629 [DEBUG] [Thread-195565] [transport.py] [_log()] kex follows: False
2026-02-15T01:25:31.629 [DEBUG] [Thread-195565] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:25:31.630 [DEBUG] [Thread-195565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:25:31.630 [DEBUG] [Thread-195565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:25:31.630 [DEBUG] [Thread-195565] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:25:31.630 [DEBUG] [Thread-195565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:25:31.630 [DEBUG] [Thread-195565] [transport.py] [_log()] Compression: none
2026-02-15T01:25:31.630 [DEBUG] [Thread-195565] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:25:31.646 [DEBUG] [Thread-195565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:25:31.647 [DEBUG] [Thread-195565] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:25:31.647 [DEBUG] [Thread-195565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:25:31.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:25:31.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:25:31.650 [DEBUG] [Thread-195565] [transport.py] [_log()] userauth is OK
2026-02-15T01:25:31.650 [DEBUG] [Thread-195565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:25:31.650 [DEBUG] [Thread-195565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:25:31.650 [DEBUG] [Thread-195565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:25:31.651 [DEBUG] [Thread-195565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:25:31.670 [INFO] [Thread-195565] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:25:31.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:25:32.231 [DEBUG] [Thread-195565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:25:32.231 [DEBUG] [Thread-195565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:25:32.231 [DEBUG] [Thread-195565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:25:32.272 [DEBUG] [Thread-195565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:25:32.272 [DEBUG] [Thread-195565] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:25:32.275 [DEBUG] [Thread-195565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:25:32.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:25:32.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:25:32.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:25:32.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:25:32.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:25:32.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:25:32.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:25:32.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:25:32.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:25:32.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.975456 -999.00   +7.20  41.06     88   +5.40 1 2 2 3 1     0    0 0.41 -67.93 ZNesW 41.1 41.1 141.2 59.4 7.9 -22.5 7.7 -19.8 7.5 -19.3 7.8 -20.2
2026-02-15T01:25:32.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:25:32.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:25:32.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.975456
2026-02-15T01:25:32.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:25:32.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:25:32.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:25:32.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:25:32.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T01:25:32.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:24:59', tmtdew=2.09, humidity=86.62, cloud=0.0, wind=52.4, temperature=7.35, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:25:00', seeing=2.87, atlas_timestamp='2026-02-14T23:24:39.398', atlas_cloud=2, atlas_rain=1, zp_data=[0.17425000000000068, 0.1647500000000015, -0.00975000000000037, 0.05999999999999872, 0.08750000000000036, 0.2872500000000002, 0.36299999999999955, 0.43074999999999974, 0.37650000000000006, 0.15600000000000058, 0.07124999999999915, 0.08799999999999919, 0.1479999999999997, 0.22724999999999973, 0.41499999999999915, 0.7329999999999997, 0.3512500000000003, 0.10299999999999976, 0.12399999999999878, 0.08424999999999905, 0.13549999999999862, 0.14074999999999882, 0.3992500000000003, 1.1687500000000002, 0.4454999999999991, 0.10550000000000104, 0.10275000000000034, 0.007500000000000284, 0.040000000000000924, 0.045000000000001705, 0.3100000000000014, 0.44200000000000106, 0.5377499999999991], zp_timestamp='2026-02-14T23:23:00')
2026-02-15T01:25:32.310 [DEBUG] [Thread-195565] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:25:32.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-15T01:25:32.416 [DEBUG] [Thread-195568] [transport.py] [_log()] starting thread (client mode): 0xa57d6050
2026-02-15T01:25:32.416 [DEBUG] [Thread-195568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:25:32.431 [DEBUG] [Thread-195568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:25:32.431 [INFO] [Thread-195568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:25:32.439 [DEBUG] [Thread-195568] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:25:32.439 [DEBUG] [Thread-195568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:25:32.439 [DEBUG] [Thread-195568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:25:32.439 [DEBUG] [Thread-195568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:25:32.440 [DEBUG] [Thread-195568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:25:32.440 [DEBUG] [Thread-195568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:25:32.440 [DEBUG] [Thread-195568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:25:32.440 [DEBUG] [Thread-195568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:25:32.440 [DEBUG] [Thread-195568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:25:32.440 [DEBUG] [Thread-195568] [transport.py] [_log()] client lang: <none>
2026-02-15T01:25:32.440 [DEBUG] [Thread-195568] [transport.py] [_log()] server lang: <none>
2026-02-15T01:25:32.440 [DEBUG] [Thread-195568] [transport.py] [_log()] kex follows: False
2026-02-15T01:25:32.440 [DEBUG] [Thread-195568] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:25:32.440 [DEBUG] [Thread-195568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:25:32.440 [DEBUG] [Thread-195568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:25:32.440 [DEBUG] [Thread-195568] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:25:32.440 [DEBUG] [Thread-195568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:25:32.440 [DEBUG] [Thread-195568] [transport.py] [_log()] Compression: none
2026-02-15T01:25:32.440 [DEBUG] [Thread-195568] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:25:32.499 [DEBUG] [Thread-195568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:25:32.499 [DEBUG] [Thread-195568] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:25:32.500 [DEBUG] [Thread-195568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:25:32.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:25:32.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:25:32.555 [DEBUG] [Thread-195568] [transport.py] [_log()] userauth is OK
2026-02-15T01:25:32.555 [DEBUG] [Thread-195568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:25:32.556 [DEBUG] [Thread-195568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:25:32.556 [DEBUG] [Thread-195568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:25:32.556 [DEBUG] [Thread-195568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:25:32.577 [INFO] [Thread-195568] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:25:32.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-15T01:25:32.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:25:33.388 [DEBUG] [Thread-195568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:25:33.388 [DEBUG] [Thread-195568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:25:33.436 [DEBUG] [Thread-195568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:25:33.437 [DEBUG] [Thread-195568] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:25:33.445 [DEBUG] [Thread-195568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:25:33.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:25:33.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-15T01:25:33.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-15T01:25:33.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:25:33.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:25:33.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:25:33.482 [DEBUG] [Thread-195568] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:25:38.893 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:25:41.573 [DEBUG] [Thread-195570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:25:56.617 [DEBUG] [Thread-195571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:25:57.539 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:26:03.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:26:03.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:26:03.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:26:05.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 25, 35), 2.45, 84.44, 0.0, 50.31, 7.7, 1, 1, 2, 2, 1, 0),)
2026-02-15T01:26:05.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:25:35
2026-02-15T01:26:05.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:26:05.765 [DEBUG] [Thread-195572] [transport.py] [_log()] starting thread (client mode): 0xa57d6b60
2026-02-15T01:26:05.765 [DEBUG] [Thread-195572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:26:05.785 [DEBUG] [Thread-195572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:26:05.785 [INFO] [Thread-195572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:26:05.788 [DEBUG] [Thread-195572] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:26:05.788 [DEBUG] [Thread-195572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:26:05.788 [DEBUG] [Thread-195572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:26:05.788 [DEBUG] [Thread-195572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:26:05.788 [DEBUG] [Thread-195572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:26:05.788 [DEBUG] [Thread-195572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:26:05.788 [DEBUG] [Thread-195572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:26:05.789 [DEBUG] [Thread-195572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:26:05.789 [DEBUG] [Thread-195572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:26:05.789 [DEBUG] [Thread-195572] [transport.py] [_log()] client lang: <none>
2026-02-15T01:26:05.789 [DEBUG] [Thread-195572] [transport.py] [_log()] server lang: <none>
2026-02-15T01:26:05.789 [DEBUG] [Thread-195572] [transport.py] [_log()] kex follows: False
2026-02-15T01:26:05.789 [DEBUG] [Thread-195572] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:26:05.789 [DEBUG] [Thread-195572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:26:05.789 [DEBUG] [Thread-195572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:26:05.789 [DEBUG] [Thread-195572] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:26:05.789 [DEBUG] [Thread-195572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:26:05.789 [DEBUG] [Thread-195572] [transport.py] [_log()] Compression: none
2026-02-15T01:26:05.789 [DEBUG] [Thread-195572] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:26:05.808 [DEBUG] [Thread-195572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:26:05.809 [DEBUG] [Thread-195572] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:26:05.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:26:05.811 [DEBUG] [Thread-195572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:26:05.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:26:05.813 [DEBUG] [Thread-195572] [transport.py] [_log()] userauth is OK
2026-02-15T01:26:05.813 [DEBUG] [Thread-195572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:26:05.814 [DEBUG] [Thread-195572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:26:05.814 [DEBUG] [Thread-195572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:26:05.814 [DEBUG] [Thread-195572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:26:05.838 [INFO] [Thread-195572] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:26:05.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:26:06.459 [DEBUG] [Thread-195572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:26:06.459 [DEBUG] [Thread-195572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:26:06.460 [DEBUG] [Thread-195572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:26:06.500 [DEBUG] [Thread-195572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:26:06.501 [DEBUG] [Thread-195572] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:26:06.504 [DEBUG] [Thread-195572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:26:06.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:26:06.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:26:06.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:26:06.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:26:06.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:26:06.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:26:06.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:26:06.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:26:06.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:26:06.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.975803 -999.00   +7.20  31.52     88   +5.40 1 2 2 3 1     0    0 0.55 -61.75 ZNesW 31.5 31.5 154.4 51.3 7.9 -18.7 7.7 -17.2 7.5 -17.0 7.9 -19.2
2026-02-15T01:26:06.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:26:06.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:26:06.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.975803
2026-02-15T01:26:06.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:26:06.528 [DEBUG] [Thread-195572] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:26:06.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:26:06.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:26:06.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:26:06.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T01:26:06.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:25:35', tmtdew=2.45, humidity=84.44, cloud=0.0, wind=50.31, temperature=7.7, tmtdew_warn=1, humidity_warn=1, rain_warn=2, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:25:35', seeing=2.87, atlas_timestamp='2026-02-14T23:25:09.379', atlas_cloud=2, atlas_rain=1, zp_data=[0.17425000000000068, 0.1647500000000015, -0.00975000000000037, 0.05999999999999872, 0.08750000000000036, 0.2872500000000002, 0.36299999999999955, 0.43074999999999974, 0.37650000000000006, 0.15600000000000058, 0.07124999999999915, 0.08799999999999919, 0.1479999999999997, 0.22724999999999973, 0.41499999999999915, 0.7329999999999997, 0.3512500000000003, 0.10299999999999976, 0.12399999999999878, 0.08424999999999905, 0.13549999999999862, 0.14074999999999882, 0.3992500000000003, 1.1687500000000002, 0.4454999999999991, 0.10550000000000104, 0.10275000000000034, 0.007500000000000284, 0.040000000000000924, 0.045000000000001705, 0.3100000000000014, 0.44200000000000106, 0.5377499999999991], zp_timestamp='2026-02-14T23:23:00')
2026-02-15T01:26:06.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-15T01:26:06.624 [DEBUG] [Thread-195575] [transport.py] [_log()] starting thread (client mode): 0xa57d7b50
2026-02-15T01:26:06.624 [DEBUG] [Thread-195575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:26:06.638 [DEBUG] [Thread-195575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:26:06.639 [INFO] [Thread-195575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:26:06.646 [DEBUG] [Thread-195575] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:26:06.647 [DEBUG] [Thread-195575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:26:06.647 [DEBUG] [Thread-195575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:26:06.647 [DEBUG] [Thread-195575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:26:06.647 [DEBUG] [Thread-195575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:26:06.647 [DEBUG] [Thread-195575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:26:06.647 [DEBUG] [Thread-195575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:26:06.647 [DEBUG] [Thread-195575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:26:06.648 [DEBUG] [Thread-195575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:26:06.648 [DEBUG] [Thread-195575] [transport.py] [_log()] client lang: <none>
2026-02-15T01:26:06.648 [DEBUG] [Thread-195575] [transport.py] [_log()] server lang: <none>
2026-02-15T01:26:06.648 [DEBUG] [Thread-195575] [transport.py] [_log()] kex follows: False
2026-02-15T01:26:06.648 [DEBUG] [Thread-195575] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:26:06.648 [DEBUG] [Thread-195575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:26:06.648 [DEBUG] [Thread-195575] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:26:06.648 [DEBUG] [Thread-195575] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:26:06.649 [DEBUG] [Thread-195575] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:26:06.649 [DEBUG] [Thread-195575] [transport.py] [_log()] Compression: none
2026-02-15T01:26:06.649 [DEBUG] [Thread-195575] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:26:06.705 [DEBUG] [Thread-195575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:26:06.706 [DEBUG] [Thread-195575] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:26:06.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:26:06.707 [DEBUG] [Thread-195575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:26:06.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:26:06.763 [DEBUG] [Thread-195575] [transport.py] [_log()] userauth is OK
2026-02-15T01:26:06.763 [DEBUG] [Thread-195575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:26:06.763 [DEBUG] [Thread-195575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:26:06.763 [DEBUG] [Thread-195575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:26:06.763 [DEBUG] [Thread-195575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:26:06.782 [INFO] [Thread-195575] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:26:06.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-15T01:26:06.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:26:07.560 [DEBUG] [Thread-195575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:26:07.561 [DEBUG] [Thread-195575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:26:07.608 [DEBUG] [Thread-195575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:26:07.609 [DEBUG] [Thread-195575] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:26:07.618 [DEBUG] [Thread-195575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:26:07.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:26:07.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:26:07.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-15T01:26:07.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:26:07.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:26:07.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:26:07.654 [DEBUG] [Thread-195575] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:26:11.654 [DEBUG] [Thread-195577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:26:12.695 [DEBUG] [Thread-195578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:26:16.221 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:26:26.705 [DEBUG] [Thread-195579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:26:31.590 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:26:31.592 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:26:34.894 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:26:37.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:26:37.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:26:37.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-15T01:26:40.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 26, 10), 2.01, 86.82, 0.0, 44.04, 7.33, 1, 1, 0, 2, 0, 0),)
2026-02-15T01:26:40.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:26:10
2026-02-15T01:26:40.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:26:40.589 [DEBUG] [Thread-195580] [transport.py] [_log()] starting thread (client mode): 0xa2d69330
2026-02-15T01:26:40.589 [DEBUG] [Thread-195580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:26:40.608 [DEBUG] [Thread-195580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:26:40.608 [INFO] [Thread-195580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:26:40.612 [DEBUG] [Thread-195580] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:26:40.612 [DEBUG] [Thread-195580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:26:40.612 [DEBUG] [Thread-195580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:26:40.612 [DEBUG] [Thread-195580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:26:40.612 [DEBUG] [Thread-195580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:26:40.612 [DEBUG] [Thread-195580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:26:40.612 [DEBUG] [Thread-195580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:26:40.612 [DEBUG] [Thread-195580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:26:40.612 [DEBUG] [Thread-195580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:26:40.612 [DEBUG] [Thread-195580] [transport.py] [_log()] client lang: <none>
2026-02-15T01:26:40.613 [DEBUG] [Thread-195580] [transport.py] [_log()] server lang: <none>
2026-02-15T01:26:40.613 [DEBUG] [Thread-195580] [transport.py] [_log()] kex follows: False
2026-02-15T01:26:40.613 [DEBUG] [Thread-195580] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:26:40.613 [DEBUG] [Thread-195580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:26:40.613 [DEBUG] [Thread-195580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:26:40.613 [DEBUG] [Thread-195580] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:26:40.613 [DEBUG] [Thread-195580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:26:40.613 [DEBUG] [Thread-195580] [transport.py] [_log()] Compression: none
2026-02-15T01:26:40.613 [DEBUG] [Thread-195580] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:26:40.630 [DEBUG] [Thread-195580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:26:40.631 [DEBUG] [Thread-195580] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:26:40.631 [DEBUG] [Thread-195580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:26:40.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:26:40.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:26:40.633 [DEBUG] [Thread-195580] [transport.py] [_log()] userauth is OK
2026-02-15T01:26:40.633 [DEBUG] [Thread-195580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:26:40.633 [DEBUG] [Thread-195580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:26:40.633 [DEBUG] [Thread-195580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:26:40.634 [DEBUG] [Thread-195580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:26:40.655 [INFO] [Thread-195580] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:26:40.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:26:41.274 [DEBUG] [Thread-195580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:26:41.274 [DEBUG] [Thread-195580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:26:41.275 [DEBUG] [Thread-195580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:26:41.315 [DEBUG] [Thread-195580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:26:41.315 [DEBUG] [Thread-195580] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:26:41.318 [DEBUG] [Thread-195580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:26:41.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:26:41.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:26:41.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:26:41.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:26:41.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:26:41.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:26:41.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:26:41.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:26:41.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:26:41.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.976150 -999.00   +7.20  29.42     88   +5.40 1 1 1 3 1     0    0 0.54 -59.25 ZNESW 29.4 29.4 142.8 41.7 7.9 -12.0 7.8 -11.0 7.5 -10.8 7.8 -13.7
2026-02-15T01:26:41.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:26:41.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:26:41.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.976150
2026-02-15T01:26:41.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:26:41.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:26:41.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:26:41.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:26:41.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:26:41.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:26:10', tmtdew=2.01, humidity=86.82, cloud=0.0, wind=44.04, temperature=7.33, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:25:39.360', atlas_cloud=1, atlas_rain=1, zp_data=[0.17425000000000068, 0.1647500000000015, -0.00975000000000037, 0.05999999999999872, 0.08750000000000036, 0.2872500000000002, 0.36299999999999955, 0.43074999999999974, 0.37650000000000006, 0.15600000000000058, 0.07124999999999915, 0.08799999999999919, 0.1479999999999997, 0.22724999999999973, 0.41499999999999915, 0.7329999999999997, 0.3512500000000003, 0.10299999999999976, 0.12399999999999878, 0.08424999999999905, 0.13549999999999862, 0.14074999999999882, 0.3992500000000003, 1.1687500000000002, 0.4454999999999991, 0.10550000000000104, 0.10275000000000034, 0.007500000000000284, 0.040000000000000924, 0.045000000000001705, 0.3100000000000014, 0.44200000000000106, 0.5377499999999991], zp_timestamp='2026-02-14T23:23:00')
2026-02-15T01:26:41.341 [DEBUG] [Thread-195580] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:26:41.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-15T01:26:41.437 [DEBUG] [Thread-195583] [transport.py] [_log()] starting thread (client mode): 0xa2d6b4c0
2026-02-15T01:26:41.437 [DEBUG] [Thread-195583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:26:41.452 [DEBUG] [Thread-195583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:26:41.452 [INFO] [Thread-195583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:26:41.459 [DEBUG] [Thread-195583] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:26:41.459 [DEBUG] [Thread-195583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:26:41.459 [DEBUG] [Thread-195583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:26:41.459 [DEBUG] [Thread-195583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:26:41.460 [DEBUG] [Thread-195583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:26:41.460 [DEBUG] [Thread-195583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:26:41.460 [DEBUG] [Thread-195583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:26:41.460 [DEBUG] [Thread-195583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:26:41.460 [DEBUG] [Thread-195583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:26:41.460 [DEBUG] [Thread-195583] [transport.py] [_log()] client lang: <none>
2026-02-15T01:26:41.460 [DEBUG] [Thread-195583] [transport.py] [_log()] server lang: <none>
2026-02-15T01:26:41.460 [DEBUG] [Thread-195583] [transport.py] [_log()] kex follows: False
2026-02-15T01:26:41.460 [DEBUG] [Thread-195583] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:26:41.460 [DEBUG] [Thread-195583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:26:41.460 [DEBUG] [Thread-195583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:26:41.460 [DEBUG] [Thread-195583] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:26:41.460 [DEBUG] [Thread-195583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:26:41.460 [DEBUG] [Thread-195583] [transport.py] [_log()] Compression: none
2026-02-15T01:26:41.460 [DEBUG] [Thread-195583] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:26:41.518 [DEBUG] [Thread-195583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:26:41.518 [DEBUG] [Thread-195583] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:26:41.519 [DEBUG] [Thread-195583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:26:41.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:26:41.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:26:41.575 [DEBUG] [Thread-195583] [transport.py] [_log()] userauth is OK
2026-02-15T01:26:41.576 [DEBUG] [Thread-195583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:26:41.576 [DEBUG] [Thread-195583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:26:41.576 [DEBUG] [Thread-195583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:26:41.576 [DEBUG] [Thread-195583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:26:41.594 [INFO] [Thread-195583] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:26:41.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-15T01:26:41.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:26:41.747 [DEBUG] [Thread-195585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:26:42.359 [DEBUG] [Thread-195583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:26:42.359 [DEBUG] [Thread-195583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:26:42.407 [DEBUG] [Thread-195583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:26:42.407 [DEBUG] [Thread-195583] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:26:42.416 [DEBUG] [Thread-195583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:26:42.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:26:42.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-15T01:26: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-15T01:26:42.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:26:42.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:26:42.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:26:42.451 [DEBUG] [Thread-195583] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:26:53.528 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:26:56.809 [DEBUG] [Thread-195586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:27:11.846 [DEBUG] [Thread-195587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:27:12.217 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:27:12.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:27:12.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:27:12.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-15T01:27:12.751 [DEBUG] [Thread-195588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:27:14.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 26, 45), 2.01, 86.82, 0.0, 42.19, 7.3, 1, 1, 0, 2, 0, 0),)
2026-02-15T01:27:14.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:26:45
2026-02-15T01:27:14.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:27:14.822 [DEBUG] [Thread-195589] [transport.py] [_log()] starting thread (client mode): 0xa2d6b910
2026-02-15T01:27:14.822 [DEBUG] [Thread-195589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:27:14.841 [DEBUG] [Thread-195589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:27:14.842 [INFO] [Thread-195589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:27:14.843 [DEBUG] [Thread-195589] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:27:14.843 [DEBUG] [Thread-195589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:27:14.843 [DEBUG] [Thread-195589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:27:14.843 [DEBUG] [Thread-195589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:27:14.843 [DEBUG] [Thread-195589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:27:14.843 [DEBUG] [Thread-195589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:27:14.843 [DEBUG] [Thread-195589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:27:14.843 [DEBUG] [Thread-195589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:27:14.843 [DEBUG] [Thread-195589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:27:14.843 [DEBUG] [Thread-195589] [transport.py] [_log()] client lang: <none>
2026-02-15T01:27:14.843 [DEBUG] [Thread-195589] [transport.py] [_log()] server lang: <none>
2026-02-15T01:27:14.843 [DEBUG] [Thread-195589] [transport.py] [_log()] kex follows: False
2026-02-15T01:27:14.843 [DEBUG] [Thread-195589] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:27:14.843 [DEBUG] [Thread-195589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:27:14.843 [DEBUG] [Thread-195589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:27:14.843 [DEBUG] [Thread-195589] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:27:14.843 [DEBUG] [Thread-195589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:27:14.843 [DEBUG] [Thread-195589] [transport.py] [_log()] Compression: none
2026-02-15T01:27:14.843 [DEBUG] [Thread-195589] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:27:14.860 [DEBUG] [Thread-195589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:27:14.860 [DEBUG] [Thread-195589] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:27:14.861 [DEBUG] [Thread-195589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:27:14.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:27:14.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:27:14.863 [DEBUG] [Thread-195589] [transport.py] [_log()] userauth is OK
2026-02-15T01:27:14.863 [DEBUG] [Thread-195589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:27:14.863 [DEBUG] [Thread-195589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:27:14.864 [DEBUG] [Thread-195589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:27:14.864 [DEBUG] [Thread-195589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:27:14.900 [INFO] [Thread-195589] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:27:14.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:27:15.733 [DEBUG] [Thread-195589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:27:15.733 [DEBUG] [Thread-195589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:27:15.734 [DEBUG] [Thread-195589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:27:15.774 [DEBUG] [Thread-195589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:27:15.775 [DEBUG] [Thread-195589] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:27:15.778 [DEBUG] [Thread-195589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:27:15.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:27:15.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:27:15.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:27:15.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:27:15.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:27:15.801 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:27:15.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:27:15.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:27:15.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:27:15.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.976497 -999.00   +7.20  37.53     88   +5.50 1 1 2 3 1     0    0 0.40 -62.23 ZNESW 37.5 37.5 144.6 52.1 7.9 -17.0 7.8 -18.1 7.5 -17.5 7.9 -16.8
2026-02-15T01:27:15.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:27:15.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:27:15.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.976497
2026-02-15T01:27:15.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:27:15.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:27:15.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:27:15.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:27:15.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:27:15.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:26:45', tmtdew=2.01, humidity=86.82, cloud=0.0, wind=42.19, temperature=7.3, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:26:09.341', atlas_cloud=1, atlas_rain=1, zp_data=[0.17425000000000068, 0.1647500000000015, -0.00975000000000037, 0.05999999999999872, 0.08750000000000036, 0.2872500000000002, 0.36299999999999955, 0.43074999999999974, 0.37650000000000006, 0.15600000000000058, 0.07124999999999915, 0.08799999999999919, 0.1479999999999997, 0.22724999999999973, 0.41499999999999915, 0.7329999999999997, 0.3512500000000003, 0.10299999999999976, 0.12399999999999878, 0.08424999999999905, 0.13549999999999862, 0.14074999999999882, 0.3992500000000003, 1.1687500000000002, 0.4454999999999991, 0.10550000000000104, 0.10275000000000034, 0.007500000000000284, 0.040000000000000924, 0.045000000000001705, 0.3100000000000014, 0.44200000000000106, 0.5377499999999991], zp_timestamp='2026-02-14T23:23:00')
2026-02-15T01:27:15.804 [DEBUG] [Thread-195589] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:27:15.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-15T01:27:15.901 [DEBUG] [Thread-195592] [transport.py] [_log()] starting thread (client mode): 0xa2d851e0
2026-02-15T01:27:15.901 [DEBUG] [Thread-195592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:27:15.917 [DEBUG] [Thread-195592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:27:15.917 [INFO] [Thread-195592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:27:15.925 [DEBUG] [Thread-195592] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:27:15.925 [DEBUG] [Thread-195592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:27:15.925 [DEBUG] [Thread-195592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:27:15.925 [DEBUG] [Thread-195592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:27:15.925 [DEBUG] [Thread-195592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:27:15.925 [DEBUG] [Thread-195592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:27:15.925 [DEBUG] [Thread-195592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:27:15.925 [DEBUG] [Thread-195592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:27:15.925 [DEBUG] [Thread-195592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:27:15.925 [DEBUG] [Thread-195592] [transport.py] [_log()] client lang: <none>
2026-02-15T01:27:15.925 [DEBUG] [Thread-195592] [transport.py] [_log()] server lang: <none>
2026-02-15T01:27:15.925 [DEBUG] [Thread-195592] [transport.py] [_log()] kex follows: False
2026-02-15T01:27:15.925 [DEBUG] [Thread-195592] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:27:15.925 [DEBUG] [Thread-195592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:27:15.925 [DEBUG] [Thread-195592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:27:15.925 [DEBUG] [Thread-195592] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:27:15.925 [DEBUG] [Thread-195592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:27:15.925 [DEBUG] [Thread-195592] [transport.py] [_log()] Compression: none
2026-02-15T01:27:15.925 [DEBUG] [Thread-195592] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:27:15.983 [DEBUG] [Thread-195592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:27:15.983 [DEBUG] [Thread-195592] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:27:15.983 [DEBUG] [Thread-195592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:27:15.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:27:15.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:27:16.040 [DEBUG] [Thread-195592] [transport.py] [_log()] userauth is OK
2026-02-15T01:27:16.040 [DEBUG] [Thread-195592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:27:16.041 [DEBUG] [Thread-195592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:27:16.041 [DEBUG] [Thread-195592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:27:16.041 [DEBUG] [Thread-195592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:27:16.060 [INFO] [Thread-195592] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:27:16.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-15T01:27:16.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:27:16.912 [DEBUG] [Thread-195592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:27:16.913 [DEBUG] [Thread-195592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:27:16.960 [DEBUG] [Thread-195592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:27:16.961 [DEBUG] [Thread-195592] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:27:16.970 [DEBUG] [Thread-195592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:27:16.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:27:16.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:27:16.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:27:16.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:27:16.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:27:16.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:27:17.007 [DEBUG] [Thread-195592] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:27:26.884 [DEBUG] [Thread-195594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:27:31.080 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:27:31.811 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:27:31.812 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:27:41.938 [DEBUG] [Thread-195595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:27:47.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:27:47.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:27:47.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:27:49.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 27, 21), 1.99, 86.92, 0.0, 41.73, 7.31, 1, 1, 0, 2, 0, 0),)
2026-02-15T01:27:49.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:27:21
2026-02-15T01:27:49.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:27:49.682 [DEBUG] [Thread-195596] [transport.py] [_log()] starting thread (client mode): 0xa2d844c0
2026-02-15T01:27:49.682 [DEBUG] [Thread-195596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:27:49.702 [DEBUG] [Thread-195596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:27:49.702 [INFO] [Thread-195596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:27:49.705 [DEBUG] [Thread-195596] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:27:49.705 [DEBUG] [Thread-195596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:27:49.705 [DEBUG] [Thread-195596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:27:49.705 [DEBUG] [Thread-195596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:27:49.705 [DEBUG] [Thread-195596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:27:49.705 [DEBUG] [Thread-195596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:27:49.706 [DEBUG] [Thread-195596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:27:49.706 [DEBUG] [Thread-195596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:27:49.706 [DEBUG] [Thread-195596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:27:49.706 [DEBUG] [Thread-195596] [transport.py] [_log()] client lang: <none>
2026-02-15T01:27:49.706 [DEBUG] [Thread-195596] [transport.py] [_log()] server lang: <none>
2026-02-15T01:27:49.706 [DEBUG] [Thread-195596] [transport.py] [_log()] kex follows: False
2026-02-15T01:27:49.706 [DEBUG] [Thread-195596] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:27:49.706 [DEBUG] [Thread-195596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:27:49.706 [DEBUG] [Thread-195596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:27:49.706 [DEBUG] [Thread-195596] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:27:49.706 [DEBUG] [Thread-195596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:27:49.706 [DEBUG] [Thread-195596] [transport.py] [_log()] Compression: none
2026-02-15T01:27:49.706 [DEBUG] [Thread-195596] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:27:49.724 [DEBUG] [Thread-195596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:27:49.725 [DEBUG] [Thread-195596] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:27:49.725 [DEBUG] [Thread-195596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:27:49.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:27:49.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:27:49.728 [DEBUG] [Thread-195596] [transport.py] [_log()] userauth is OK
2026-02-15T01:27:49.728 [DEBUG] [Thread-195596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:27:49.728 [DEBUG] [Thread-195596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:27:49.728 [DEBUG] [Thread-195596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:27:49.728 [DEBUG] [Thread-195596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:27:49.752 [INFO] [Thread-195596] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:27:49.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:27:49.805 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:27:50.390 [DEBUG] [Thread-195596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:27:50.390 [DEBUG] [Thread-195596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:27:50.391 [DEBUG] [Thread-195596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:27:50.431 [DEBUG] [Thread-195596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:27:50.432 [DEBUG] [Thread-195596] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:27:50.435 [DEBUG] [Thread-195596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:27:50.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:27:50.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:27:50.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:27:50.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:27:50.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:27:50.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:27:50.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:27:50.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:27:50.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:27:50.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.977192 -999.00   +7.20  34.50     88   +5.50 1 3 2 3 1     0    0 0.36 -64.10 Z.ESW 34.5 34.5 140.6 49.4 7.9 -12.8 7.8 -9.1 7.5 -9.2 8.0 -10.5
2026-02-15T01:27:50.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:27:50.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:27:50.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.977192
2026-02-15T01:27:50.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:27:50.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:27:50.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:27:50.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:27:50.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T01:27:50.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:27:21', tmtdew=1.99, humidity=86.92, cloud=0.0, wind=41.73, temperature=7.31, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:27:09.389', atlas_cloud=3, atlas_rain=1, zp_data=[0.17474999999999952, 0.33225000000000016, 0.44725000000000037, 0.38349999999999973, 0.1775000000000002, 0.14675000000000082, 0.19899999999999984, 0.1662499999999998, 0.2444999999999986, 0.6875, 0.7052499999999995, 0.4969999999999999, 0.28999999999999915, 0.14124999999999943, 0.24499999999999922, 0.22499999999999964, 0.32225000000000037, 0.7859999999999996, 1.3484999999999996, 1.015249999999999, 0.37849999999999895, 0.2707499999999996, 0.3512500000000003, 0.6537500000000005, 0.5669999999999993, 0.6764999999999999, 0.7937500000000002, 0.3875000000000002, 0.5754999999999999, 0.3280000000000012, 0.5520000000000014, 1.0700000000000012, 0.8077499999999995], zp_timestamp='2026-02-14T23:26:00')
2026-02-15T01:27:50.463 [DEBUG] [Thread-195596] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:27:50.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-15T01:27:50.558 [DEBUG] [Thread-195599] [transport.py] [_log()] starting thread (client mode): 0xa2d7beb0
2026-02-15T01:27:50.559 [DEBUG] [Thread-195599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:27:50.573 [DEBUG] [Thread-195599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:27:50.573 [INFO] [Thread-195599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:27:50.581 [DEBUG] [Thread-195599] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:27:50.581 [DEBUG] [Thread-195599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:27:50.581 [DEBUG] [Thread-195599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:27:50.581 [DEBUG] [Thread-195599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:27:50.581 [DEBUG] [Thread-195599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:27:50.581 [DEBUG] [Thread-195599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:27:50.581 [DEBUG] [Thread-195599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:27:50.581 [DEBUG] [Thread-195599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:27:50.581 [DEBUG] [Thread-195599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:27:50.581 [DEBUG] [Thread-195599] [transport.py] [_log()] client lang: <none>
2026-02-15T01:27:50.581 [DEBUG] [Thread-195599] [transport.py] [_log()] server lang: <none>
2026-02-15T01:27:50.581 [DEBUG] [Thread-195599] [transport.py] [_log()] kex follows: False
2026-02-15T01:27:50.581 [DEBUG] [Thread-195599] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:27:50.581 [DEBUG] [Thread-195599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:27:50.581 [DEBUG] [Thread-195599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:27:50.581 [DEBUG] [Thread-195599] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:27:50.581 [DEBUG] [Thread-195599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:27:50.582 [DEBUG] [Thread-195599] [transport.py] [_log()] Compression: none
2026-02-15T01:27:50.582 [DEBUG] [Thread-195599] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:27:50.640 [DEBUG] [Thread-195599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:27:50.641 [DEBUG] [Thread-195599] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:27:50.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:27:50.642 [DEBUG] [Thread-195599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:27:50.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:27:50.696 [DEBUG] [Thread-195599] [transport.py] [_log()] userauth is OK
2026-02-15T01:27:50.696 [DEBUG] [Thread-195599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:27:50.696 [DEBUG] [Thread-195599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:27:50.696 [DEBUG] [Thread-195599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:27:50.696 [DEBUG] [Thread-195599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:27:50.714 [INFO] [Thread-195599] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:27:50.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-15T01:27:50.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:27:51.502 [DEBUG] [Thread-195599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:27:51.502 [DEBUG] [Thread-195599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:27:51.550 [DEBUG] [Thread-195599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:27:51.550 [DEBUG] [Thread-195599] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:27:51.558 [DEBUG] [Thread-195599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:27:51.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:27:51.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:27:51.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-15T01:27:51.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:27:51.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:27:51.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:27:51.592 [DEBUG] [Thread-195599] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:27:56.975 [DEBUG] [Thread-195601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:28:08.457 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:28:12.030 [DEBUG] [Thread-195602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:28:12.810 [DEBUG] [Thread-195603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:28:21.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:28:21.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:28:21.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-15T01:28:23.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 27, 57), 1.99, 87.42, 0.0, 46.02, 7.27, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:28:23.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:27:57
2026-02-15T01:28:24.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:28:24.272 [DEBUG] [Thread-195604] [transport.py] [_log()] starting thread (client mode): 0xa5740ca0
2026-02-15T01:28:24.273 [DEBUG] [Thread-195604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:28:24.292 [DEBUG] [Thread-195604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:28:24.292 [INFO] [Thread-195604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:28:24.295 [DEBUG] [Thread-195604] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:28:24.296 [DEBUG] [Thread-195604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:28:24.296 [DEBUG] [Thread-195604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:28:24.296 [DEBUG] [Thread-195604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:28:24.296 [DEBUG] [Thread-195604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:28:24.296 [DEBUG] [Thread-195604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:28:24.296 [DEBUG] [Thread-195604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:28:24.296 [DEBUG] [Thread-195604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:28:24.296 [DEBUG] [Thread-195604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:28:24.296 [DEBUG] [Thread-195604] [transport.py] [_log()] client lang: <none>
2026-02-15T01:28:24.296 [DEBUG] [Thread-195604] [transport.py] [_log()] server lang: <none>
2026-02-15T01:28:24.296 [DEBUG] [Thread-195604] [transport.py] [_log()] kex follows: False
2026-02-15T01:28:24.296 [DEBUG] [Thread-195604] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:28:24.296 [DEBUG] [Thread-195604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:28:24.296 [DEBUG] [Thread-195604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:28:24.296 [DEBUG] [Thread-195604] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:28:24.297 [DEBUG] [Thread-195604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:28:24.297 [DEBUG] [Thread-195604] [transport.py] [_log()] Compression: none
2026-02-15T01:28:24.297 [DEBUG] [Thread-195604] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:28:24.312 [DEBUG] [Thread-195604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:28:24.312 [DEBUG] [Thread-195604] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:28:24.313 [DEBUG] [Thread-195604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:28:24.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:28:24.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:28:24.315 [DEBUG] [Thread-195604] [transport.py] [_log()] userauth is OK
2026-02-15T01:28:24.315 [DEBUG] [Thread-195604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:28:24.315 [DEBUG] [Thread-195604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:28:24.315 [DEBUG] [Thread-195604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:28:24.315 [DEBUG] [Thread-195604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:28:24.340 [INFO] [Thread-195604] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:28:24.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:28:24.974 [DEBUG] [Thread-195604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:28:24.975 [DEBUG] [Thread-195604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:28:24.975 [DEBUG] [Thread-195604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:28:25.015 [DEBUG] [Thread-195604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:28:25.015 [DEBUG] [Thread-195604] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:28:25.018 [DEBUG] [Thread-195604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:28:25.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:28:25.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:28:25.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:28:25.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:28:25.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:28:25.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:28:25.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:28:25.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:28:25.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:28:25.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.977539 -999.00   +7.20  38.12     88   +5.50 1 2 2 3 1     0    0 0.26 -68.29 Z.ESW 38.1 38.1 147.4 46.7 7.9 -17.6 7.8 -14.8 7.6 -14.6 8.0 -14.8
2026-02-15T01:28:25.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:28:25.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:28:25.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.977539
2026-02-15T01:28:25.050 [DEBUG] [Thread-195604] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:28:25.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:28:25.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:28:25.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:28:25.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:28:25.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T01:28:25.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:27:57', tmtdew=1.99, humidity=87.42, cloud=0.0, wind=46.02, temperature=7.27, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:27:39.370', atlas_cloud=2, atlas_rain=1, zp_data=[0.17474999999999952, 0.33225000000000016, 0.44725000000000037, 0.38349999999999973, 0.1775000000000002, 0.14675000000000082, 0.19899999999999984, 0.1662499999999998, 0.2444999999999986, 0.6875, 0.7052499999999995, 0.4969999999999999, 0.28999999999999915, 0.14124999999999943, 0.24499999999999922, 0.22499999999999964, 0.32225000000000037, 0.7859999999999996, 1.3484999999999996, 1.015249999999999, 0.37849999999999895, 0.2707499999999996, 0.3512500000000003, 0.6537500000000005, 0.5669999999999993, 0.6764999999999999, 0.7937500000000002, 0.3875000000000002, 0.5754999999999999, 0.3280000000000012, 0.5520000000000014, 1.0700000000000012, 0.8077499999999995], zp_timestamp='2026-02-14T23:26:00')
2026-02-15T01:28:25.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T01:28:25.148 [DEBUG] [Thread-195607] [transport.py] [_log()] starting thread (client mode): 0xa2d87b20
2026-02-15T01:28:25.148 [DEBUG] [Thread-195607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:28:25.169 [DEBUG] [Thread-195607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:28:25.169 [INFO] [Thread-195607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:28:25.178 [DEBUG] [Thread-195607] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:28:25.178 [DEBUG] [Thread-195607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:28:25.178 [DEBUG] [Thread-195607] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:28:25.178 [DEBUG] [Thread-195607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:28:25.178 [DEBUG] [Thread-195607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:28:25.179 [DEBUG] [Thread-195607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:28:25.179 [DEBUG] [Thread-195607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:28:25.179 [DEBUG] [Thread-195607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:28:25.179 [DEBUG] [Thread-195607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:28:25.179 [DEBUG] [Thread-195607] [transport.py] [_log()] client lang: <none>
2026-02-15T01:28:25.179 [DEBUG] [Thread-195607] [transport.py] [_log()] server lang: <none>
2026-02-15T01:28:25.179 [DEBUG] [Thread-195607] [transport.py] [_log()] kex follows: False
2026-02-15T01:28:25.179 [DEBUG] [Thread-195607] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:28:25.179 [DEBUG] [Thread-195607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:28:25.179 [DEBUG] [Thread-195607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:28:25.179 [DEBUG] [Thread-195607] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:28:25.179 [DEBUG] [Thread-195607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:28:25.179 [DEBUG] [Thread-195607] [transport.py] [_log()] Compression: none
2026-02-15T01:28:25.179 [DEBUG] [Thread-195607] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:28:25.236 [DEBUG] [Thread-195607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:28:25.237 [DEBUG] [Thread-195607] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:28:25.237 [DEBUG] [Thread-195607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:28:25.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:28:25.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:28:25.292 [DEBUG] [Thread-195607] [transport.py] [_log()] userauth is OK
2026-02-15T01:28:25.292 [DEBUG] [Thread-195607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:28:25.293 [DEBUG] [Thread-195607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:28:25.293 [DEBUG] [Thread-195607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:28:25.293 [DEBUG] [Thread-195607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:28:25.311 [INFO] [Thread-195607] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:28:25.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T01:28:25.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:28:26.210 [DEBUG] [Thread-195607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:28:26.210 [DEBUG] [Thread-195607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:28:26.258 [DEBUG] [Thread-195607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:28:26.259 [DEBUG] [Thread-195607] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:28:26.268 [DEBUG] [Thread-195607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:28:26.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:28:26.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-15T01:28:26.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-15T01:28:26.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:28:26.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:28:26.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:28:26.303 [DEBUG] [Thread-195607] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:28:27.070 [DEBUG] [Thread-195609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:28:27.096 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:28:32.012 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:28:32.014 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:28:42.133 [DEBUG] [Thread-195610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:28:45.897 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:28:56.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:28:56.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:28:56.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-15T01:28:57.165 [DEBUG] [Thread-195611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:28:58.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 28, 32), 1.97, 87.53, 0.0, 44.87, 7.33, 1, 1, 0, 2, 0, 0),)
2026-02-15T01:28:58.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:28:32
2026-02-15T01:28:58.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:28:58.789 [DEBUG] [Thread-195612] [transport.py] [_log()] starting thread (client mode): 0xa57425f0
2026-02-15T01:28:58.789 [DEBUG] [Thread-195612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:28:58.810 [DEBUG] [Thread-195612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:28:58.810 [INFO] [Thread-195612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:28:58.813 [DEBUG] [Thread-195612] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:28:58.813 [DEBUG] [Thread-195612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:28:58.813 [DEBUG] [Thread-195612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:28:58.813 [DEBUG] [Thread-195612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:28:58.813 [DEBUG] [Thread-195612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:28:58.814 [DEBUG] [Thread-195612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:28:58.814 [DEBUG] [Thread-195612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:28:58.814 [DEBUG] [Thread-195612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:28:58.814 [DEBUG] [Thread-195612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:28:58.814 [DEBUG] [Thread-195612] [transport.py] [_log()] client lang: <none>
2026-02-15T01:28:58.814 [DEBUG] [Thread-195612] [transport.py] [_log()] server lang: <none>
2026-02-15T01:28:58.814 [DEBUG] [Thread-195612] [transport.py] [_log()] kex follows: False
2026-02-15T01:28:58.814 [DEBUG] [Thread-195612] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:28:58.814 [DEBUG] [Thread-195612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:28:58.814 [DEBUG] [Thread-195612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:28:58.814 [DEBUG] [Thread-195612] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:28:58.814 [DEBUG] [Thread-195612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:28:58.815 [DEBUG] [Thread-195612] [transport.py] [_log()] Compression: none
2026-02-15T01:28:58.815 [DEBUG] [Thread-195612] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:28:58.834 [DEBUG] [Thread-195612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:28:58.835 [DEBUG] [Thread-195612] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:28:58.835 [DEBUG] [Thread-195612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:28:58.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:28:58.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:28:58.837 [DEBUG] [Thread-195612] [transport.py] [_log()] userauth is OK
2026-02-15T01:28:58.837 [DEBUG] [Thread-195612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:28:58.838 [DEBUG] [Thread-195612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:28:58.838 [DEBUG] [Thread-195612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:28:58.838 [DEBUG] [Thread-195612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:28:58.861 [INFO] [Thread-195612] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:28:58.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:28:59.496 [DEBUG] [Thread-195612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:28:59.496 [DEBUG] [Thread-195612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:28:59.496 [DEBUG] [Thread-195612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:28:59.536 [DEBUG] [Thread-195612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:28:59.536 [DEBUG] [Thread-195612] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:28:59.538 [DEBUG] [Thread-195612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:28:59.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:28:59.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:28:59.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:28:59.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:28:59.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:28:59.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:28:59.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:28:59.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:28:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:28:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.977886 -999.00   +7.20  37.25     88   +5.50 1 2 2 3 1     0    0 0.25 -66.86 .NE.. 37.2 37.2 143.6 50.3 7.9 -21.4 7.8 -15.8 7.6 -15.2 7.9 -17.0
2026-02-15T01:28:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:28:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:28:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.977886
2026-02-15T01:28:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:28:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:28:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:28:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:28:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T01:28:59.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:28:32', tmtdew=1.97, humidity=87.53, cloud=0.0, wind=44.87, temperature=7.33, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:28:09.350', atlas_cloud=2, atlas_rain=1, zp_data=[0.17474999999999952, 0.33225000000000016, 0.44725000000000037, 0.38349999999999973, 0.1775000000000002, 0.14675000000000082, 0.19899999999999984, 0.1662499999999998, 0.2444999999999986, 0.6875, 0.7052499999999995, 0.4969999999999999, 0.28999999999999915, 0.14124999999999943, 0.24499999999999922, 0.22499999999999964, 0.32225000000000037, 0.7859999999999996, 1.3484999999999996, 1.015249999999999, 0.37849999999999895, 0.2707499999999996, 0.3512500000000003, 0.6537500000000005, 0.5669999999999993, 0.6764999999999999, 0.7937500000000002, 0.3875000000000002, 0.5754999999999999, 0.3280000000000012, 0.5520000000000014, 1.0700000000000012, 0.8077499999999995], zp_timestamp='2026-02-14T23:26:00')
2026-02-15T01:28:59.558 [DEBUG] [Thread-195612] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:28:59.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T01:28:59.648 [DEBUG] [Thread-195615] [transport.py] [_log()] starting thread (client mode): 0xa2d03610
2026-02-15T01:28:59.648 [DEBUG] [Thread-195615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:28:59.669 [DEBUG] [Thread-195615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:28:59.669 [INFO] [Thread-195615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:28:59.681 [DEBUG] [Thread-195615] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:28:59.681 [DEBUG] [Thread-195615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:28:59.681 [DEBUG] [Thread-195615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:28:59.681 [DEBUG] [Thread-195615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:28:59.681 [DEBUG] [Thread-195615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:28:59.681 [DEBUG] [Thread-195615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:28:59.681 [DEBUG] [Thread-195615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:28:59.681 [DEBUG] [Thread-195615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:28:59.681 [DEBUG] [Thread-195615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:28:59.682 [DEBUG] [Thread-195615] [transport.py] [_log()] client lang: <none>
2026-02-15T01:28:59.682 [DEBUG] [Thread-195615] [transport.py] [_log()] server lang: <none>
2026-02-15T01:28:59.682 [DEBUG] [Thread-195615] [transport.py] [_log()] kex follows: False
2026-02-15T01:28:59.682 [DEBUG] [Thread-195615] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:28:59.682 [DEBUG] [Thread-195615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:28:59.682 [DEBUG] [Thread-195615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:28:59.682 [DEBUG] [Thread-195615] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:28:59.682 [DEBUG] [Thread-195615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:28:59.682 [DEBUG] [Thread-195615] [transport.py] [_log()] Compression: none
2026-02-15T01:28:59.682 [DEBUG] [Thread-195615] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:28:59.736 [DEBUG] [Thread-195615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:28:59.736 [DEBUG] [Thread-195615] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:28:59.736 [DEBUG] [Thread-195615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:28:59.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:28:59.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:28:59.792 [DEBUG] [Thread-195615] [transport.py] [_log()] userauth is OK
2026-02-15T01:28:59.793 [DEBUG] [Thread-195615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:28:59.793 [DEBUG] [Thread-195615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:28:59.793 [DEBUG] [Thread-195615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:28:59.793 [DEBUG] [Thread-195615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:28:59.812 [INFO] [Thread-195615] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:28:59.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-15T01:28:59.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:29:00.636 [DEBUG] [Thread-195615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:29:00.637 [DEBUG] [Thread-195615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:29:00.684 [DEBUG] [Thread-195615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:29:00.685 [DEBUG] [Thread-195615] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:29:00.694 [DEBUG] [Thread-195615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:29:00.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:29: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')
2026-02-15T01:29:00.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-15T01:29:00.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:29:00.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:29:00.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:29:00.731 [DEBUG] [Thread-195615] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:29:04.931 [DEBUG] [Thread-195125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:29:12.201 [DEBUG] [Thread-195617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:29:12.874 [DEBUG] [Thread-195618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:29:27.259 [DEBUG] [Thread-195619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:29:30.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:29:30.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:29:30.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-15T01:29:32.216 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:29:32.217 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:29:32.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 29, 7), 1.97, 87.52, 0.0, 50.74, 7.32, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:29:32.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:29:07
2026-02-15T01:29:33.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:29:33.179 [DEBUG] [Thread-195620] [transport.py] [_log()] starting thread (client mode): 0xa2d00c10
2026-02-15T01:29:33.179 [DEBUG] [Thread-195620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:29:33.198 [DEBUG] [Thread-195620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:29:33.198 [INFO] [Thread-195620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:29:33.201 [DEBUG] [Thread-195620] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:29:33.201 [DEBUG] [Thread-195620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:29:33.201 [DEBUG] [Thread-195620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:29:33.202 [DEBUG] [Thread-195620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:29:33.202 [DEBUG] [Thread-195620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:29:33.202 [DEBUG] [Thread-195620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:29:33.202 [DEBUG] [Thread-195620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:29:33.202 [DEBUG] [Thread-195620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:29:33.202 [DEBUG] [Thread-195620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:29:33.202 [DEBUG] [Thread-195620] [transport.py] [_log()] client lang: <none>
2026-02-15T01:29:33.202 [DEBUG] [Thread-195620] [transport.py] [_log()] server lang: <none>
2026-02-15T01:29:33.202 [DEBUG] [Thread-195620] [transport.py] [_log()] kex follows: False
2026-02-15T01:29:33.202 [DEBUG] [Thread-195620] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:29:33.202 [DEBUG] [Thread-195620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:29:33.202 [DEBUG] [Thread-195620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:29:33.202 [DEBUG] [Thread-195620] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:29:33.202 [DEBUG] [Thread-195620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:29:33.202 [DEBUG] [Thread-195620] [transport.py] [_log()] Compression: none
2026-02-15T01:29:33.202 [DEBUG] [Thread-195620] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:29:33.218 [DEBUG] [Thread-195620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:29:33.218 [DEBUG] [Thread-195620] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:29:33.219 [DEBUG] [Thread-195620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:29:33.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:29:33.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:29:33.261 [DEBUG] [Thread-195620] [transport.py] [_log()] userauth is OK
2026-02-15T01:29:33.261 [DEBUG] [Thread-195620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:29:33.261 [DEBUG] [Thread-195620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:29:33.261 [DEBUG] [Thread-195620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:29:33.261 [DEBUG] [Thread-195620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:29:33.287 [INFO] [Thread-195620] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:29:33.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:29:33.923 [DEBUG] [Thread-195620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:29:33.923 [DEBUG] [Thread-195620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:29:33.923 [DEBUG] [Thread-195620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:29:33.964 [DEBUG] [Thread-195620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:29:33.965 [DEBUG] [Thread-195620] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:29:33.968 [DEBUG] [Thread-195620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:29:33.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:29:33.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:29:33.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:29:33.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:29:33.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:29:33.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:29:33.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:29:33.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:29:33.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:29:33.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.978233 -999.00   +7.10  44.81     88   +5.40 1 1 2 3 1     0    0 0.23 -67.07 ZNESW 44.8 44.8 141.6 56.8 7.9 -22.1 7.8 -22.7 7.5 -21.7 7.9 -22.8
2026-02-15T01:29:33.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:29:33.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:29:33.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.978233
2026-02-15T01:29:33.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:29:33.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:29:33.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:29:33.994 [DEBUG] [Thread-195620] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:29:33.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:29:33.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:29:33.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:29:07', tmtdew=1.97, humidity=87.52, cloud=0.0, wind=50.74, temperature=7.32, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:28:39.331', atlas_cloud=1, atlas_rain=1, zp_data=[0.17474999999999952, 0.33225000000000016, 0.44725000000000037, 0.38349999999999973, 0.1775000000000002, 0.14675000000000082, 0.19899999999999984, 0.1662499999999998, 0.2444999999999986, 0.6875, 0.7052499999999995, 0.4969999999999999, 0.28999999999999915, 0.14124999999999943, 0.24499999999999922, 0.22499999999999964, 0.32225000000000037, 0.7859999999999996, 1.3484999999999996, 1.015249999999999, 0.37849999999999895, 0.2707499999999996, 0.3512500000000003, 0.6537500000000005, 0.5669999999999993, 0.6764999999999999, 0.7937500000000002, 0.3875000000000002, 0.5754999999999999, 0.3280000000000012, 0.5520000000000014, 1.0700000000000012, 0.8077499999999995], zp_timestamp='2026-02-14T23:26:00')
2026-02-15T01:29:34.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T01:29:42.295 [DEBUG] [Thread-195623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:29:57.359 [DEBUG] [Thread-195624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:30:12.398 [DEBUG] [Thread-195625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:30:12.947 [DEBUG] [Thread-195626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:30:27.439 [DEBUG] [Thread-195627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:30:32.418 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:30:32.419 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:30:42.474 [DEBUG] [Thread-195628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:30:57.510 [DEBUG] [Thread-195629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:31:12.545 [DEBUG] [Thread-195630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:31:13.024 [DEBUG] [Thread-195631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:31:27.581 [DEBUG] [Thread-195632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:31:32.618 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:31:32.620 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:31:42.618 [DEBUG] [Thread-195633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:31:49.432 [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-15T01:31:57.658 [DEBUG] [Thread-195634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:32:12.696 [DEBUG] [Thread-195635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:32:13.104 [DEBUG] [Thread-195636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:32:19.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:32:19.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:32:19.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:32:21.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 32, 6), 1.88, 87.75, 0.0, 49.95, 7.22, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:32:21.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:32:06
2026-02-15T01:32:21.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:32:22.104 [DEBUG] [Thread-195637] [transport.py] [_log()] starting thread (client mode): 0xa2d03be0
2026-02-15T01:32:22.104 [DEBUG] [Thread-195637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:32:22.124 [DEBUG] [Thread-195637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:32:22.124 [INFO] [Thread-195637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:32:22.127 [DEBUG] [Thread-195637] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:32:22.127 [DEBUG] [Thread-195637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:32:22.128 [DEBUG] [Thread-195637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:32:22.128 [DEBUG] [Thread-195637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:32:22.128 [DEBUG] [Thread-195637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:32:22.128 [DEBUG] [Thread-195637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:32:22.128 [DEBUG] [Thread-195637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:32:22.128 [DEBUG] [Thread-195637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:32:22.128 [DEBUG] [Thread-195637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:32:22.128 [DEBUG] [Thread-195637] [transport.py] [_log()] client lang: <none>
2026-02-15T01:32:22.128 [DEBUG] [Thread-195637] [transport.py] [_log()] server lang: <none>
2026-02-15T01:32:22.128 [DEBUG] [Thread-195637] [transport.py] [_log()] kex follows: False
2026-02-15T01:32:22.128 [DEBUG] [Thread-195637] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:32:22.128 [DEBUG] [Thread-195637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:32:22.128 [DEBUG] [Thread-195637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:32:22.128 [DEBUG] [Thread-195637] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:32:22.128 [DEBUG] [Thread-195637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:32:22.128 [DEBUG] [Thread-195637] [transport.py] [_log()] Compression: none
2026-02-15T01:32:22.128 [DEBUG] [Thread-195637] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:32:22.148 [DEBUG] [Thread-195637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:32:22.149 [DEBUG] [Thread-195637] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:32:22.149 [DEBUG] [Thread-195637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:32:22.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:32:22.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:32:22.152 [DEBUG] [Thread-195637] [transport.py] [_log()] userauth is OK
2026-02-15T01:32:22.152 [DEBUG] [Thread-195637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:32:22.152 [DEBUG] [Thread-195637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:32:22.152 [DEBUG] [Thread-195637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:32:22.152 [DEBUG] [Thread-195637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:32:22.175 [INFO] [Thread-195637] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:32:22.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:32:22.803 [DEBUG] [Thread-195637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:32:22.803 [DEBUG] [Thread-195637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:32:22.803 [DEBUG] [Thread-195637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:32:22.844 [DEBUG] [Thread-195637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:32:22.845 [DEBUG] [Thread-195637] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:32:22.848 [DEBUG] [Thread-195637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:32:22.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:32:22.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:32:22.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:32:22.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:32:22.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:32:22.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:32:22.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:32:22.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:32:22.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:32:22.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.980317 -999.00   +7.10  31.67     89   +5.40 1 1 2 3 1     0    0 0.32 -58.92 ZNESW 31.7 31.7 144.8 47.1 7.8 -22.1 7.7 -21.6 7.4 -20.7 7.9 -23.0
2026-02-15T01:32:22.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:32:22.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:32:22.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.980317
2026-02-15T01:32:22.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:32:22.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:32:22.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:32:22.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:32:22.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:32:22.880 [DEBUG] [Thread-195637] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:32:22.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:32:06', tmtdew=1.88, humidity=87.75, cloud=0.0, wind=49.95, temperature=7.22, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:31:39.389', atlas_cloud=1, atlas_rain=1, zp_data=[1.2147499999999996, 1.3752500000000003, 1.3592500000000003, 1.2394999999999996, 1.0335, 1.2342500000000012, 1.0229999999999997, 0.9132500000000006, 1.0014999999999992, 1.7610000000000001, 1.4967499999999996, 1.1210000000000013, 1.1790000000000003, 1.0172499999999998, 0.7459999999999996, 0.6049999999999995, 0.6847500000000002, 1.1094999999999997, 1.644499999999999, 1.4312499999999986, 1.2459999999999987, 0.9807499999999987, 0.627250000000001, 0.5097500000000004, 0.44599999999999973, 0.6494999999999997, 1.1062500000000002, 1.1665, 1.4595000000000002, 0.5630000000000006, 0.4660000000000011, 0.4175000000000004, 0.28474999999999895], zp_timestamp='2026-02-14T23:28:00')
2026-02-15T01:32:22.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-15T01:32:22.980 [DEBUG] [Thread-195640] [transport.py] [_log()] starting thread (client mode): 0xa2d85db0
2026-02-15T01:32:22.980 [DEBUG] [Thread-195640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:32:22.994 [DEBUG] [Thread-195640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:32:22.994 [INFO] [Thread-195640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:32:23.002 [DEBUG] [Thread-195640] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:32:23.002 [DEBUG] [Thread-195640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:32:23.002 [DEBUG] [Thread-195640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:32:23.002 [DEBUG] [Thread-195640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:32:23.002 [DEBUG] [Thread-195640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:32:23.002 [DEBUG] [Thread-195640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:32:23.002 [DEBUG] [Thread-195640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:32:23.002 [DEBUG] [Thread-195640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:32:23.002 [DEBUG] [Thread-195640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:32:23.002 [DEBUG] [Thread-195640] [transport.py] [_log()] client lang: <none>
2026-02-15T01:32:23.002 [DEBUG] [Thread-195640] [transport.py] [_log()] server lang: <none>
2026-02-15T01:32:23.002 [DEBUG] [Thread-195640] [transport.py] [_log()] kex follows: False
2026-02-15T01:32:23.002 [DEBUG] [Thread-195640] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:32:23.002 [DEBUG] [Thread-195640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:32:23.002 [DEBUG] [Thread-195640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:32:23.002 [DEBUG] [Thread-195640] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:32:23.002 [DEBUG] [Thread-195640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:32:23.002 [DEBUG] [Thread-195640] [transport.py] [_log()] Compression: none
2026-02-15T01:32:23.002 [DEBUG] [Thread-195640] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:32:23.061 [DEBUG] [Thread-195640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:32:23.062 [DEBUG] [Thread-195640] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:32:23.062 [DEBUG] [Thread-195640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:32:23.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:32:23.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:32:23.117 [DEBUG] [Thread-195640] [transport.py] [_log()] userauth is OK
2026-02-15T01:32:23.118 [DEBUG] [Thread-195640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:32:23.118 [DEBUG] [Thread-195640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:32:23.118 [DEBUG] [Thread-195640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:32:23.118 [DEBUG] [Thread-195640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:32:23.140 [INFO] [Thread-195640] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:32:23.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-15T01:32:23.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:32:23.954 [DEBUG] [Thread-195640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:32:23.954 [DEBUG] [Thread-195640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:32:24.002 [DEBUG] [Thread-195640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:32:24.002 [DEBUG] [Thread-195640] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:32:24.011 [DEBUG] [Thread-195640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:32:24.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:32:24.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-15T01:32:24.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-15T01:32:24.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:32:24.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:32:24.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:32:24.046 [DEBUG] [Thread-195640] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:32:27.734 [DEBUG] [Thread-195642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:32:32.819 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:32:32.820 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:32:42.800 [DEBUG] [Thread-195643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:32:54.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:32:54.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:32:54.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-15T01:32:55.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 32, 41), 2.25, 85.6, 0.0, 52.39, 7.56, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:32:55.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:32:41
2026-02-15T01:32:56.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:32:56.440 [DEBUG] [Thread-195644] [transport.py] [_log()] starting thread (client mode): 0xa2d84dc0
2026-02-15T01:32:56.440 [DEBUG] [Thread-195644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:32:56.460 [DEBUG] [Thread-195644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:32:56.460 [INFO] [Thread-195644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:32:56.463 [DEBUG] [Thread-195644] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:32:56.463 [DEBUG] [Thread-195644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:32:56.463 [DEBUG] [Thread-195644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:32:56.463 [DEBUG] [Thread-195644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:32:56.463 [DEBUG] [Thread-195644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:32:56.463 [DEBUG] [Thread-195644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:32:56.463 [DEBUG] [Thread-195644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:32:56.463 [DEBUG] [Thread-195644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:32:56.463 [DEBUG] [Thread-195644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:32:56.463 [DEBUG] [Thread-195644] [transport.py] [_log()] client lang: <none>
2026-02-15T01:32:56.463 [DEBUG] [Thread-195644] [transport.py] [_log()] server lang: <none>
2026-02-15T01:32:56.463 [DEBUG] [Thread-195644] [transport.py] [_log()] kex follows: False
2026-02-15T01:32:56.463 [DEBUG] [Thread-195644] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:32:56.463 [DEBUG] [Thread-195644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:32:56.463 [DEBUG] [Thread-195644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:32:56.464 [DEBUG] [Thread-195644] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:32:56.464 [DEBUG] [Thread-195644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:32:56.464 [DEBUG] [Thread-195644] [transport.py] [_log()] Compression: none
2026-02-15T01:32:56.464 [DEBUG] [Thread-195644] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:32:56.486 [DEBUG] [Thread-195644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:32:56.487 [DEBUG] [Thread-195644] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:32:56.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:32:56.488 [DEBUG] [Thread-195644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:32:56.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:32:56.490 [DEBUG] [Thread-195644] [transport.py] [_log()] userauth is OK
2026-02-15T01:32:56.490 [DEBUG] [Thread-195644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:32:56.491 [DEBUG] [Thread-195644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:32:56.491 [DEBUG] [Thread-195644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:32:56.491 [DEBUG] [Thread-195644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:32:56.515 [INFO] [Thread-195644] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:32:56.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:32:57.110 [DEBUG] [Thread-195644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:32:57.110 [DEBUG] [Thread-195644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:32:57.111 [DEBUG] [Thread-195644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:32:57.151 [DEBUG] [Thread-195644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:32:57.152 [DEBUG] [Thread-195644] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:32:57.155 [DEBUG] [Thread-195644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:32:57.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:32:57.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:32:57.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:32:57.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:32:57.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:32:57.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:32:57.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:32:57.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:32:57.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:32:57.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.981011 -999.00   +7.10  38.37     89   +5.40 1 1 2 3 1     0    0 0.39 -57.24 ZNESW 38.4 38.4 141.6 48.1 7.8 -20.8 7.7 -16.8 7.5 -16.8 7.8 -18.2
2026-02-15T01:32:57.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:32:57.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:32:57.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.981011
2026-02-15T01:32:57.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:32:57.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:32:57.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:32:57.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:32:57.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:32:57.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:32:41', tmtdew=2.25, humidity=85.6, cloud=0.0, wind=52.39, temperature=7.56, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:32:39.350', atlas_cloud=1, atlas_rain=1, zp_data=[1.2147499999999996, 1.3752500000000003, 1.3592500000000003, 1.2394999999999996, 1.0335, 1.2342500000000012, 1.0229999999999997, 0.9132500000000006, 1.0014999999999992, 1.7610000000000001, 1.4967499999999996, 1.1210000000000013, 1.1790000000000003, 1.0172499999999998, 0.7459999999999996, 0.6049999999999995, 0.6847500000000002, 1.1094999999999997, 1.644499999999999, 1.4312499999999986, 1.2459999999999987, 0.9807499999999987, 0.627250000000001, 0.5097500000000004, 0.44599999999999973, 0.6494999999999997, 1.1062500000000002, 1.1665, 1.4595000000000002, 0.5630000000000006, 0.4660000000000011, 0.4175000000000004, 0.28474999999999895], zp_timestamp='2026-02-14T23:28:00')
2026-02-15T01:32:57.184 [DEBUG] [Thread-195644] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:32:57.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-15T01:32:57.282 [DEBUG] [Thread-195647] [transport.py] [_log()] starting thread (client mode): 0xa2d12770
2026-02-15T01:32:57.282 [DEBUG] [Thread-195647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:32:57.296 [DEBUG] [Thread-195647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:32:57.297 [INFO] [Thread-195647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:32:57.304 [DEBUG] [Thread-195647] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:32:57.305 [DEBUG] [Thread-195647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:32:57.305 [DEBUG] [Thread-195647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:32:57.305 [DEBUG] [Thread-195647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:32:57.305 [DEBUG] [Thread-195647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:32:57.305 [DEBUG] [Thread-195647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:32:57.305 [DEBUG] [Thread-195647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:32:57.306 [DEBUG] [Thread-195647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:32:57.306 [DEBUG] [Thread-195647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:32:57.306 [DEBUG] [Thread-195647] [transport.py] [_log()] client lang: <none>
2026-02-15T01:32:57.306 [DEBUG] [Thread-195647] [transport.py] [_log()] server lang: <none>
2026-02-15T01:32:57.306 [DEBUG] [Thread-195647] [transport.py] [_log()] kex follows: False
2026-02-15T01:32:57.306 [DEBUG] [Thread-195647] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:32:57.306 [DEBUG] [Thread-195647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:32:57.306 [DEBUG] [Thread-195647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:32:57.307 [DEBUG] [Thread-195647] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:32:57.307 [DEBUG] [Thread-195647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:32:57.307 [DEBUG] [Thread-195647] [transport.py] [_log()] Compression: none
2026-02-15T01:32:57.307 [DEBUG] [Thread-195647] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:32:57.362 [DEBUG] [Thread-195647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:32:57.363 [DEBUG] [Thread-195647] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:32:57.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:32:57.364 [DEBUG] [Thread-195647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:32:57.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:32:57.418 [DEBUG] [Thread-195647] [transport.py] [_log()] userauth is OK
2026-02-15T01:32:57.418 [DEBUG] [Thread-195647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:32:57.419 [DEBUG] [Thread-195647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:32:57.419 [DEBUG] [Thread-195647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:32:57.419 [DEBUG] [Thread-195647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:32:57.438 [INFO] [Thread-195647] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:32:57.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-15T01:32:57.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:32:57.836 [DEBUG] [Thread-195649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:32:58.229 [DEBUG] [Thread-195647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:32:58.229 [DEBUG] [Thread-195647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:32:58.277 [DEBUG] [Thread-195647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:32:58.277 [DEBUG] [Thread-195647] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:32:58.287 [DEBUG] [Thread-195647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:32:58.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:32:58.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:32:58.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-15T01:32:58.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:32:58.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:32:58.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:32:58.323 [DEBUG] [Thread-195647] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:33:12.883 [DEBUG] [Thread-195650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:33:13.169 [DEBUG] [Thread-195651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:33:27.916 [DEBUG] [Thread-195652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:33:28.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:33:28.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:33:28.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-15T01:33:30.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 33, 16), 1.87, 87.85, 0.0, 46.35, 7.23, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:33:30.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:33:16
2026-02-15T01:33:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:33:30.604 [DEBUG] [Thread-195653] [transport.py] [_log()] starting thread (client mode): 0xa2d859c0
2026-02-15T01:33:30.604 [DEBUG] [Thread-195653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:33:30.624 [DEBUG] [Thread-195653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:33:30.624 [INFO] [Thread-195653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:33:30.627 [DEBUG] [Thread-195653] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:33:30.627 [DEBUG] [Thread-195653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:33:30.627 [DEBUG] [Thread-195653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:33:30.627 [DEBUG] [Thread-195653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:33:30.627 [DEBUG] [Thread-195653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:33:30.627 [DEBUG] [Thread-195653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:33:30.627 [DEBUG] [Thread-195653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:33:30.627 [DEBUG] [Thread-195653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:33:30.627 [DEBUG] [Thread-195653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:33:30.627 [DEBUG] [Thread-195653] [transport.py] [_log()] client lang: <none>
2026-02-15T01:33:30.627 [DEBUG] [Thread-195653] [transport.py] [_log()] server lang: <none>
2026-02-15T01:33:30.627 [DEBUG] [Thread-195653] [transport.py] [_log()] kex follows: False
2026-02-15T01:33:30.627 [DEBUG] [Thread-195653] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:33:30.627 [DEBUG] [Thread-195653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:33:30.627 [DEBUG] [Thread-195653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:33:30.627 [DEBUG] [Thread-195653] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:33:30.627 [DEBUG] [Thread-195653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:33:30.627 [DEBUG] [Thread-195653] [transport.py] [_log()] Compression: none
2026-02-15T01:33:30.627 [DEBUG] [Thread-195653] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:33:30.643 [DEBUG] [Thread-195653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:33:30.643 [DEBUG] [Thread-195653] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:33:30.644 [DEBUG] [Thread-195653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:33:30.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:33:30.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:33:30.646 [DEBUG] [Thread-195653] [transport.py] [_log()] userauth is OK
2026-02-15T01:33:30.646 [DEBUG] [Thread-195653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:33:30.646 [DEBUG] [Thread-195653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:33:30.646 [DEBUG] [Thread-195653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:33:30.646 [DEBUG] [Thread-195653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:33:30.667 [INFO] [Thread-195653] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:33:30.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:33:31.311 [DEBUG] [Thread-195653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:33:31.311 [DEBUG] [Thread-195653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:33:31.311 [DEBUG] [Thread-195653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:33:31.352 [DEBUG] [Thread-195653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:33:31.353 [DEBUG] [Thread-195653] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:33:31.356 [DEBUG] [Thread-195653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:33:31.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:33:31.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:33:31.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:33:31.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:33:31.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:33:31.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:33:31.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:33:31.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:33:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:33:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.981358 -999.00   +7.10  40.41     89   +5.40 1 2 2 3 1     0    0 0.52 -52.19 ZNEsW 40.4 40.4 147.2 46.6 7.8 -17.0 7.7 -17.8 7.4 -17.9 7.8 -21.2
2026-02-15T01:33:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:33:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:33:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.981358
2026-02-15T01:33:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:33:31.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:33:31.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:33:31.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:33:31.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T01:33:31.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:33:16', tmtdew=1.87, humidity=87.85, cloud=0.0, wind=46.35, temperature=7.23, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:33:09.331', atlas_cloud=2, atlas_rain=1, zp_data=[1.2147499999999996, 1.3752500000000003, 1.3592500000000003, 1.2394999999999996, 1.0335, 1.2342500000000012, 1.0229999999999997, 0.9132500000000006, 1.0014999999999992, 1.7610000000000001, 1.4967499999999996, 1.1210000000000013, 1.1790000000000003, 1.0172499999999998, 0.7459999999999996, 0.6049999999999995, 0.6847500000000002, 1.1094999999999997, 1.644499999999999, 1.4312499999999986, 1.2459999999999987, 0.9807499999999987, 0.627250000000001, 0.5097500000000004, 0.44599999999999973, 0.6494999999999997, 1.1062500000000002, 1.1665, 1.4595000000000002, 0.5630000000000006, 0.4660000000000011, 0.4175000000000004, 0.28474999999999895], zp_timestamp='2026-02-14T23:32:00')
2026-02-15T01:33:31.382 [DEBUG] [Thread-195653] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:33:31.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-15T01:33:31.477 [DEBUG] [Thread-195656] [transport.py] [_log()] starting thread (client mode): 0xa2d1baf0
2026-02-15T01:33:31.478 [DEBUG] [Thread-195656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:33:31.491 [DEBUG] [Thread-195656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:33:31.492 [INFO] [Thread-195656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:33:31.499 [DEBUG] [Thread-195656] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:33:31.499 [DEBUG] [Thread-195656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:33:31.500 [DEBUG] [Thread-195656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:33:31.500 [DEBUG] [Thread-195656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:33:31.500 [DEBUG] [Thread-195656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:33:31.500 [DEBUG] [Thread-195656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:33:31.500 [DEBUG] [Thread-195656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:33:31.500 [DEBUG] [Thread-195656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:33:31.500 [DEBUG] [Thread-195656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:33:31.500 [DEBUG] [Thread-195656] [transport.py] [_log()] client lang: <none>
2026-02-15T01:33:31.500 [DEBUG] [Thread-195656] [transport.py] [_log()] server lang: <none>
2026-02-15T01:33:31.500 [DEBUG] [Thread-195656] [transport.py] [_log()] kex follows: False
2026-02-15T01:33:31.500 [DEBUG] [Thread-195656] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:33:31.500 [DEBUG] [Thread-195656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:33:31.500 [DEBUG] [Thread-195656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:33:31.500 [DEBUG] [Thread-195656] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:33:31.500 [DEBUG] [Thread-195656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:33:31.500 [DEBUG] [Thread-195656] [transport.py] [_log()] Compression: none
2026-02-15T01:33:31.500 [DEBUG] [Thread-195656] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:33:31.559 [DEBUG] [Thread-195656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:33:31.559 [DEBUG] [Thread-195656] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:33:31.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:33:31.561 [DEBUG] [Thread-195656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:33:31.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:33:31.614 [DEBUG] [Thread-195656] [transport.py] [_log()] userauth is OK
2026-02-15T01:33:31.614 [DEBUG] [Thread-195656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:33:31.615 [DEBUG] [Thread-195656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:33:31.615 [DEBUG] [Thread-195656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:33:31.615 [DEBUG] [Thread-195656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:33:31.638 [INFO] [Thread-195656] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:33:31.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-15T01:33:31.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:33:32.442 [DEBUG] [Thread-195656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:33:32.442 [DEBUG] [Thread-195656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:33:32.490 [DEBUG] [Thread-195656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:33:32.491 [DEBUG] [Thread-195656] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:33:32.500 [DEBUG] [Thread-195656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:33:32.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:33:32.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:33:32.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-15T01:33:32.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:33:32.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:33:32.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:33:32.537 [DEBUG] [Thread-195656] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:33:33.023 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:33:33.024 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:33:42.952 [DEBUG] [Thread-195658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:33:58.002 [DEBUG] [Thread-195659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:34:02.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:34:02.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:34:02.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-15T01:34:04.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 33, 52), 1.86, 87.88, 0.0, 52.39, 7.2, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:34:04.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:33:52
2026-02-15T01:34:04.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:34:05.119 [DEBUG] [Thread-195660] [transport.py] [_log()] starting thread (client mode): 0xa2d01570
2026-02-15T01:34:05.120 [DEBUG] [Thread-195660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:34:05.140 [DEBUG] [Thread-195660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:34:05.140 [INFO] [Thread-195660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:34:05.143 [DEBUG] [Thread-195660] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:34:05.143 [DEBUG] [Thread-195660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:34:05.143 [DEBUG] [Thread-195660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:34:05.143 [DEBUG] [Thread-195660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:34:05.143 [DEBUG] [Thread-195660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:34:05.143 [DEBUG] [Thread-195660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:34:05.143 [DEBUG] [Thread-195660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:34:05.143 [DEBUG] [Thread-195660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:34:05.143 [DEBUG] [Thread-195660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:34:05.143 [DEBUG] [Thread-195660] [transport.py] [_log()] client lang: <none>
2026-02-15T01:34:05.143 [DEBUG] [Thread-195660] [transport.py] [_log()] server lang: <none>
2026-02-15T01:34:05.143 [DEBUG] [Thread-195660] [transport.py] [_log()] kex follows: False
2026-02-15T01:34:05.143 [DEBUG] [Thread-195660] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:34:05.143 [DEBUG] [Thread-195660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:34:05.143 [DEBUG] [Thread-195660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:34:05.143 [DEBUG] [Thread-195660] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:34:05.144 [DEBUG] [Thread-195660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:34:05.144 [DEBUG] [Thread-195660] [transport.py] [_log()] Compression: none
2026-02-15T01:34:05.144 [DEBUG] [Thread-195660] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:34:05.161 [DEBUG] [Thread-195660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:34:05.161 [DEBUG] [Thread-195660] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:34:05.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:34:05.162 [DEBUG] [Thread-195660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:34:05.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:34:05.165 [DEBUG] [Thread-195660] [transport.py] [_log()] userauth is OK
2026-02-15T01:34:05.165 [DEBUG] [Thread-195660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:34:05.165 [DEBUG] [Thread-195660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:34:05.165 [DEBUG] [Thread-195660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:34:05.165 [DEBUG] [Thread-195660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:34:05.191 [INFO] [Thread-195660] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:34:05.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:34:05.815 [DEBUG] [Thread-195660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:34:05.815 [DEBUG] [Thread-195660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:34:05.816 [DEBUG] [Thread-195660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:34:05.856 [DEBUG] [Thread-195660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:34:05.856 [DEBUG] [Thread-195660] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:34:05.859 [DEBUG] [Thread-195660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:34:05.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:34:05.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:34:05.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:34:05.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:34:05.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:34:05.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:34:05.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:34:05.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:34:05.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:34:05.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.981705 -999.00   +7.10  34.84     89   +5.40 1 2 2 3 1     0    0 0.56 -49.28 ZNEsW 34.8 34.8 147.8 53.5 7.8 -18.6 7.7 -17.8 7.5 -18.0 7.8 -18.7
2026-02-15T01:34:05.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:34:05.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:34:05.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.981705
2026-02-15T01:34:05.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:34:05.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:34:05.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:34:05.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:34:05.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T01:34:05.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:33:52', tmtdew=1.86, humidity=87.88, cloud=0.0, wind=52.39, temperature=7.2, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:33:39.312', atlas_cloud=2, atlas_rain=1, zp_data=[1.2147499999999996, 1.3752500000000003, 1.3592500000000003, 1.2394999999999996, 1.0335, 1.2342500000000012, 1.0229999999999997, 0.9132500000000006, 1.0014999999999992, 1.7610000000000001, 1.4967499999999996, 1.1210000000000013, 1.1790000000000003, 1.0172499999999998, 0.7459999999999996, 0.6049999999999995, 0.6847500000000002, 1.1094999999999997, 1.644499999999999, 1.4312499999999986, 1.2459999999999987, 0.9807499999999987, 0.627250000000001, 0.5097500000000004, 0.44599999999999973, 0.6494999999999997, 1.1062500000000002, 1.1665, 1.4595000000000002, 0.5630000000000006, 0.4660000000000011, 0.4175000000000004, 0.28474999999999895], zp_timestamp='2026-02-14T23:32:00')
2026-02-15T01:34:05.886 [DEBUG] [Thread-195660] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:34:05.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-15T01:34:05.981 [DEBUG] [Thread-195663] [transport.py] [_log()] starting thread (client mode): 0xa2d004c0
2026-02-15T01:34:05.981 [DEBUG] [Thread-195663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:34:05.996 [DEBUG] [Thread-195663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:34:05.996 [INFO] [Thread-195663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:34:06.004 [DEBUG] [Thread-195663] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:34:06.004 [DEBUG] [Thread-195663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:34:06.004 [DEBUG] [Thread-195663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:34:06.004 [DEBUG] [Thread-195663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:34:06.004 [DEBUG] [Thread-195663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:34:06.004 [DEBUG] [Thread-195663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:34:06.004 [DEBUG] [Thread-195663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:34:06.004 [DEBUG] [Thread-195663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:34:06.004 [DEBUG] [Thread-195663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:34:06.004 [DEBUG] [Thread-195663] [transport.py] [_log()] client lang: <none>
2026-02-15T01:34:06.004 [DEBUG] [Thread-195663] [transport.py] [_log()] server lang: <none>
2026-02-15T01:34:06.004 [DEBUG] [Thread-195663] [transport.py] [_log()] kex follows: False
2026-02-15T01:34:06.005 [DEBUG] [Thread-195663] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:34:06.005 [DEBUG] [Thread-195663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:34:06.005 [DEBUG] [Thread-195663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:34:06.005 [DEBUG] [Thread-195663] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:34:06.005 [DEBUG] [Thread-195663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:34:06.005 [DEBUG] [Thread-195663] [transport.py] [_log()] Compression: none
2026-02-15T01:34:06.005 [DEBUG] [Thread-195663] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:34:06.062 [DEBUG] [Thread-195663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:34:06.063 [DEBUG] [Thread-195663] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:34:06.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:34:06.064 [DEBUG] [Thread-195663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:34:06.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:34:06.119 [DEBUG] [Thread-195663] [transport.py] [_log()] userauth is OK
2026-02-15T01:34:06.119 [DEBUG] [Thread-195663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:34:06.119 [DEBUG] [Thread-195663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:34:06.119 [DEBUG] [Thread-195663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:34:06.120 [DEBUG] [Thread-195663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:34:06.138 [INFO] [Thread-195663] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:34:06.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-15T01:34:06.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:34:06.924 [DEBUG] [Thread-195663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:34:06.924 [DEBUG] [Thread-195663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:34:06.972 [DEBUG] [Thread-195663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:34:06.972 [DEBUG] [Thread-195663] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:34:06.981 [DEBUG] [Thread-195663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:34:06.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:34:06.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-15T01:34:07.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-15T01:34:07.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:34:07.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:34:07.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:34:07.018 [DEBUG] [Thread-195663] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:34:13.037 [DEBUG] [Thread-195665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:34:13.239 [DEBUG] [Thread-195666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:34:28.081 [DEBUG] [Thread-195667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:34:33.228 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:34:33.229 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:34:37.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:34:37.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:34:37.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:34:38.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 34, 27), 1.86, 87.88, 0.0, 50.34, 7.23, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:34:38.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:34:27
2026-02-15T01:34:39.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:34:39.361 [DEBUG] [Thread-195668] [transport.py] [_log()] starting thread (client mode): 0xa2d84340
2026-02-15T01:34:39.361 [DEBUG] [Thread-195668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:34:39.381 [DEBUG] [Thread-195668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:34:39.381 [INFO] [Thread-195668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:34:39.384 [DEBUG] [Thread-195668] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:34:39.384 [DEBUG] [Thread-195668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:34:39.384 [DEBUG] [Thread-195668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:34:39.384 [DEBUG] [Thread-195668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:34:39.384 [DEBUG] [Thread-195668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:34:39.384 [DEBUG] [Thread-195668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:34:39.384 [DEBUG] [Thread-195668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:34:39.384 [DEBUG] [Thread-195668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:34:39.384 [DEBUG] [Thread-195668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:34:39.384 [DEBUG] [Thread-195668] [transport.py] [_log()] client lang: <none>
2026-02-15T01:34:39.384 [DEBUG] [Thread-195668] [transport.py] [_log()] server lang: <none>
2026-02-15T01:34:39.384 [DEBUG] [Thread-195668] [transport.py] [_log()] kex follows: False
2026-02-15T01:34:39.384 [DEBUG] [Thread-195668] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:34:39.384 [DEBUG] [Thread-195668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:34:39.384 [DEBUG] [Thread-195668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:34:39.384 [DEBUG] [Thread-195668] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:34:39.384 [DEBUG] [Thread-195668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:34:39.384 [DEBUG] [Thread-195668] [transport.py] [_log()] Compression: none
2026-02-15T01:34:39.384 [DEBUG] [Thread-195668] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:34:39.402 [DEBUG] [Thread-195668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:34:39.402 [DEBUG] [Thread-195668] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:34:39.402 [DEBUG] [Thread-195668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:34:39.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:34:39.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:34:39.403 [DEBUG] [Thread-195668] [transport.py] [_log()] userauth is OK
2026-02-15T01:34:39.403 [DEBUG] [Thread-195668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:34:39.403 [DEBUG] [Thread-195668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:34:39.403 [DEBUG] [Thread-195668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:34:39.403 [DEBUG] [Thread-195668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:34:39.422 [INFO] [Thread-195668] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:34:39.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:34:40.052 [DEBUG] [Thread-195668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:34:40.052 [DEBUG] [Thread-195668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:34:40.053 [DEBUG] [Thread-195668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:34:40.093 [DEBUG] [Thread-195668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:34:40.094 [DEBUG] [Thread-195668] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:34:40.097 [DEBUG] [Thread-195668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:34:40.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:34:40.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:34:40.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:34:40.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:34:40.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:34:40.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:34:40.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:34:40.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:34:40.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:34:40.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.982053 -999.00   +7.10  31.10     89   +5.40 1 1 2 3 1     0    0 0.53 -50.04 ZNESW 31.1 31.1 147.0 48.0 7.8 -20.8 7.7 -19.4 7.4 -18.8 7.8 -19.2
2026-02-15T01:34:40.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:34:40.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:34:40.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.982053
2026-02-15T01:34:40.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:34:40.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:34:40.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:34:40.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:34:40.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:34:40.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:34:27', tmtdew=1.86, humidity=87.88, cloud=0.0, wind=50.34, temperature=7.23, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:34:09.379', atlas_cloud=1, atlas_rain=1, zp_data=[1.2147499999999996, 1.3752500000000003, 1.3592500000000003, 1.2394999999999996, 1.0335, 1.2342500000000012, 1.0229999999999997, 0.9132500000000006, 1.0014999999999992, 1.7610000000000001, 1.4967499999999996, 1.1210000000000013, 1.1790000000000003, 1.0172499999999998, 0.7459999999999996, 0.6049999999999995, 0.6847500000000002, 1.1094999999999997, 1.644499999999999, 1.4312499999999986, 1.2459999999999987, 0.9807499999999987, 0.627250000000001, 0.5097500000000004, 0.44599999999999973, 0.6494999999999997, 1.1062500000000002, 1.1665, 1.4595000000000002, 0.5630000000000006, 0.4660000000000011, 0.4175000000000004, 0.28474999999999895], zp_timestamp='2026-02-14T23:32:00')
2026-02-15T01:34:40.125 [DEBUG] [Thread-195668] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:34:40.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-15T01:34:40.223 [DEBUG] [Thread-195671] [transport.py] [_log()] starting thread (client mode): 0xa2d86f80
2026-02-15T01:34:40.223 [DEBUG] [Thread-195671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:34:40.237 [DEBUG] [Thread-195671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:34:40.238 [INFO] [Thread-195671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:34:40.245 [DEBUG] [Thread-195671] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:34:40.245 [DEBUG] [Thread-195671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:34:40.245 [DEBUG] [Thread-195671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:34:40.245 [DEBUG] [Thread-195671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:34:40.245 [DEBUG] [Thread-195671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:34:40.245 [DEBUG] [Thread-195671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:34:40.245 [DEBUG] [Thread-195671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:34:40.245 [DEBUG] [Thread-195671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:34:40.245 [DEBUG] [Thread-195671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:34:40.246 [DEBUG] [Thread-195671] [transport.py] [_log()] client lang: <none>
2026-02-15T01:34:40.246 [DEBUG] [Thread-195671] [transport.py] [_log()] server lang: <none>
2026-02-15T01:34:40.246 [DEBUG] [Thread-195671] [transport.py] [_log()] kex follows: False
2026-02-15T01:34:40.246 [DEBUG] [Thread-195671] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:34:40.246 [DEBUG] [Thread-195671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:34:40.246 [DEBUG] [Thread-195671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:34:40.246 [DEBUG] [Thread-195671] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:34:40.246 [DEBUG] [Thread-195671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:34:40.246 [DEBUG] [Thread-195671] [transport.py] [_log()] Compression: none
2026-02-15T01:34:40.246 [DEBUG] [Thread-195671] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:34:40.303 [DEBUG] [Thread-195671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:34:40.304 [DEBUG] [Thread-195671] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:34:40.304 [DEBUG] [Thread-195671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:34:40.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:34:40.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:34:40.359 [DEBUG] [Thread-195671] [transport.py] [_log()] userauth is OK
2026-02-15T01:34:40.359 [DEBUG] [Thread-195671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:34:40.359 [DEBUG] [Thread-195671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:34:40.359 [DEBUG] [Thread-195671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:34:40.360 [DEBUG] [Thread-195671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:34:40.378 [INFO] [Thread-195671] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:34:40.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-15T01:34:40.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:34:41.186 [DEBUG] [Thread-195671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:34:41.187 [DEBUG] [Thread-195671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:34:41.234 [DEBUG] [Thread-195671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:34:41.234 [DEBUG] [Thread-195671] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:34:41.244 [DEBUG] [Thread-195671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:34:41.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:34:41.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:34:41.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:34:41.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:34:41.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:34:41.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:34:41.281 [DEBUG] [Thread-195671] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:34:43.118 [DEBUG] [Thread-195673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:34:58.168 [DEBUG] [Thread-195674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:35:11.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:35:11.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:35:11.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-15T01:35:13.203 [DEBUG] [Thread-195675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:35:13.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 35, 3), 1.86, 87.87, 0.0, 49.28, 7.18, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:35:13.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:35:03
2026-02-15T01:35:13.318 [DEBUG] [Thread-195676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:35:13.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:35:13.740 [DEBUG] [Thread-195677] [transport.py] [_log()] starting thread (client mode): 0xa2d84400
2026-02-15T01:35:13.740 [DEBUG] [Thread-195677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:35:13.760 [DEBUG] [Thread-195677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:35:13.760 [INFO] [Thread-195677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:35:13.764 [DEBUG] [Thread-195677] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:35:13.764 [DEBUG] [Thread-195677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:35:13.764 [DEBUG] [Thread-195677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:35:13.764 [DEBUG] [Thread-195677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:35:13.764 [DEBUG] [Thread-195677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:35:13.764 [DEBUG] [Thread-195677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:35:13.764 [DEBUG] [Thread-195677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:35:13.764 [DEBUG] [Thread-195677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:35:13.764 [DEBUG] [Thread-195677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:35:13.764 [DEBUG] [Thread-195677] [transport.py] [_log()] client lang: <none>
2026-02-15T01:35:13.764 [DEBUG] [Thread-195677] [transport.py] [_log()] server lang: <none>
2026-02-15T01:35:13.764 [DEBUG] [Thread-195677] [transport.py] [_log()] kex follows: False
2026-02-15T01:35:13.764 [DEBUG] [Thread-195677] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:35:13.764 [DEBUG] [Thread-195677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:35:13.764 [DEBUG] [Thread-195677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:35:13.764 [DEBUG] [Thread-195677] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:35:13.764 [DEBUG] [Thread-195677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:35:13.764 [DEBUG] [Thread-195677] [transport.py] [_log()] Compression: none
2026-02-15T01:35:13.764 [DEBUG] [Thread-195677] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:35:13.782 [DEBUG] [Thread-195677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:35:13.783 [DEBUG] [Thread-195677] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:35:13.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:35:13.784 [DEBUG] [Thread-195677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:35:13.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:35:13.786 [DEBUG] [Thread-195677] [transport.py] [_log()] userauth is OK
2026-02-15T01:35:13.786 [DEBUG] [Thread-195677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:35:13.787 [DEBUG] [Thread-195677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:35:13.787 [DEBUG] [Thread-195677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:35:13.787 [DEBUG] [Thread-195677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:35:13.822 [INFO] [Thread-195677] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:35:13.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:35:14.760 [DEBUG] [Thread-195677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:35:14.761 [DEBUG] [Thread-195677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:35:14.761 [DEBUG] [Thread-195677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:35:14.801 [DEBUG] [Thread-195677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:35:14.802 [DEBUG] [Thread-195677] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:35:14.805 [DEBUG] [Thread-195677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:35:14.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:35:14.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:35:14.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:35:14.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:35:14.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:35:14.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:35:14.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:35:14.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:35:14.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:35:14.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.982400 -999.00   +7.10  35.79     89   +5.40 1 1 2 3 1     0    0 0.41 -53.91 ZNESW 35.8 35.8 146.3 48.9 7.8 -24.2 7.6 -23.1 7.4 -22.3 7.8 -23.2
2026-02-15T01:35:14.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:35:14.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:35:14.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.982400
2026-02-15T01:35:14.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:35:14.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:35:14.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:35:14.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:35:14.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:35:14.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:35:03', tmtdew=1.86, humidity=87.87, cloud=0.0, wind=49.28, temperature=7.18, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:34:39.360', atlas_cloud=1, atlas_rain=1, zp_data=[1.2147499999999996, 1.3752500000000003, 1.3592500000000003, 1.2394999999999996, 1.0335, 1.2342500000000012, 1.0229999999999997, 0.9132500000000006, 1.0014999999999992, 1.7610000000000001, 1.4967499999999996, 1.1210000000000013, 1.1790000000000003, 1.0172499999999998, 0.7459999999999996, 0.6049999999999995, 0.6847500000000002, 1.1094999999999997, 1.644499999999999, 1.4312499999999986, 1.2459999999999987, 0.9807499999999987, 0.627250000000001, 0.5097500000000004, 0.44599999999999973, 0.6494999999999997, 1.1062500000000002, 1.1665, 1.4595000000000002, 0.5630000000000006, 0.4660000000000011, 0.4175000000000004, 0.28474999999999895], zp_timestamp='2026-02-14T23:32:00')
2026-02-15T01:35:14.837 [DEBUG] [Thread-195677] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:35:14.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T01:35:14.933 [DEBUG] [Thread-195680] [transport.py] [_log()] starting thread (client mode): 0xa57d7b20
2026-02-15T01:35:14.934 [DEBUG] [Thread-195680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:35:14.948 [DEBUG] [Thread-195680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:35:14.948 [INFO] [Thread-195680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:35:14.955 [DEBUG] [Thread-195680] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:35:14.956 [DEBUG] [Thread-195680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:35:14.956 [DEBUG] [Thread-195680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:35:14.956 [DEBUG] [Thread-195680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:35:14.956 [DEBUG] [Thread-195680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:35:14.956 [DEBUG] [Thread-195680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:35:14.956 [DEBUG] [Thread-195680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:35:14.956 [DEBUG] [Thread-195680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:35:14.956 [DEBUG] [Thread-195680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:35:14.956 [DEBUG] [Thread-195680] [transport.py] [_log()] client lang: <none>
2026-02-15T01:35:14.956 [DEBUG] [Thread-195680] [transport.py] [_log()] server lang: <none>
2026-02-15T01:35:14.956 [DEBUG] [Thread-195680] [transport.py] [_log()] kex follows: False
2026-02-15T01:35:14.956 [DEBUG] [Thread-195680] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:35:14.956 [DEBUG] [Thread-195680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:35:14.956 [DEBUG] [Thread-195680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:35:14.956 [DEBUG] [Thread-195680] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:35:14.956 [DEBUG] [Thread-195680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:35:14.956 [DEBUG] [Thread-195680] [transport.py] [_log()] Compression: none
2026-02-15T01:35:14.956 [DEBUG] [Thread-195680] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:35:15.014 [DEBUG] [Thread-195680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:35:15.014 [DEBUG] [Thread-195680] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:35:15.015 [DEBUG] [Thread-195680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:35:15.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:35:15.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:35:15.071 [DEBUG] [Thread-195680] [transport.py] [_log()] userauth is OK
2026-02-15T01:35:15.071 [DEBUG] [Thread-195680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:35:15.071 [DEBUG] [Thread-195680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:35:15.071 [DEBUG] [Thread-195680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:35:15.071 [DEBUG] [Thread-195680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:35:15.089 [INFO] [Thread-195680] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:35:15.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T01:35:15.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:35:15.889 [DEBUG] [Thread-195680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:35:15.890 [DEBUG] [Thread-195680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:35:15.938 [DEBUG] [Thread-195680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:35:15.938 [DEBUG] [Thread-195680] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:35:15.947 [DEBUG] [Thread-195680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:35:15.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:35:15.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:35:15.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-15T01:35:15.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:35:15.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:35:15.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:35:15.980 [DEBUG] [Thread-195680] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:35:28.234 [DEBUG] [Thread-195682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:35:33.430 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:35:33.431 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:35:43.284 [DEBUG] [Thread-195683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:35:46.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:35:46.003 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:35:46.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-15T01:35:48.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 35, 38), 2.24, 85.67, 0.0, 49.71, 7.4, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:35:48.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:35:38
2026-02-15T01:35:48.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:35:48.550 [DEBUG] [Thread-195684] [transport.py] [_log()] starting thread (client mode): 0xa2d86800
2026-02-15T01:35:48.550 [DEBUG] [Thread-195684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:35:48.570 [DEBUG] [Thread-195684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:35:48.570 [INFO] [Thread-195684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:35:48.573 [DEBUG] [Thread-195684] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:35:48.574 [DEBUG] [Thread-195684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:35:48.574 [DEBUG] [Thread-195684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:35:48.574 [DEBUG] [Thread-195684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:35:48.574 [DEBUG] [Thread-195684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:35:48.574 [DEBUG] [Thread-195684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:35:48.574 [DEBUG] [Thread-195684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:35:48.574 [DEBUG] [Thread-195684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:35:48.574 [DEBUG] [Thread-195684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:35:48.575 [DEBUG] [Thread-195684] [transport.py] [_log()] client lang: <none>
2026-02-15T01:35:48.575 [DEBUG] [Thread-195684] [transport.py] [_log()] server lang: <none>
2026-02-15T01:35:48.575 [DEBUG] [Thread-195684] [transport.py] [_log()] kex follows: False
2026-02-15T01:35:48.575 [DEBUG] [Thread-195684] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:35:48.575 [DEBUG] [Thread-195684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:35:48.575 [DEBUG] [Thread-195684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:35:48.575 [DEBUG] [Thread-195684] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:35:48.575 [DEBUG] [Thread-195684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:35:48.575 [DEBUG] [Thread-195684] [transport.py] [_log()] Compression: none
2026-02-15T01:35:48.575 [DEBUG] [Thread-195684] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:35:48.593 [DEBUG] [Thread-195684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:35:48.593 [DEBUG] [Thread-195684] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:35:48.593 [DEBUG] [Thread-195684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:35:48.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:35:48.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:35:48.594 [DEBUG] [Thread-195684] [transport.py] [_log()] userauth is OK
2026-02-15T01:35:48.594 [DEBUG] [Thread-195684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:35:48.594 [DEBUG] [Thread-195684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:35:48.594 [DEBUG] [Thread-195684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:35:48.594 [DEBUG] [Thread-195684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:35:48.620 [INFO] [Thread-195684] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:35:48.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:35:49.256 [DEBUG] [Thread-195684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:35:49.257 [DEBUG] [Thread-195684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:35:49.257 [DEBUG] [Thread-195684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:35:49.297 [DEBUG] [Thread-195684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:35:49.298 [DEBUG] [Thread-195684] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:35:49.301 [DEBUG] [Thread-195684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:35:49.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:35:49.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:35:49.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:35:49.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:35:49.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:35:49.327 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:35:49.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:35:49.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:35:49.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:35:49.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.982747 -999.00   +7.10  29.59     89   +5.40 1 1 1 3 1     0    0 0.35 -54.87 ZNESW 29.6 29.6 144.6 44.5 7.8 -23.8 7.6 -23.1 7.4 -22.3 7.8 -23.5
2026-02-15T01:35:49.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:35:49.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:35:49.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.982747
2026-02-15T01:35:49.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:35:49.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:35:49.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:35:49.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:35:49.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:35:49.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:35:38', tmtdew=2.24, humidity=85.67, cloud=0.0, wind=49.71, temperature=7.4, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:35:09.341', atlas_cloud=1, atlas_rain=1, zp_data=[1.2147499999999996, 1.3752500000000003, 1.3592500000000003, 1.2394999999999996, 1.0335, 1.2342500000000012, 1.0229999999999997, 0.9132500000000006, 1.0014999999999992, 1.7610000000000001, 1.4967499999999996, 1.1210000000000013, 1.1790000000000003, 1.0172499999999998, 0.7459999999999996, 0.6049999999999995, 0.6847500000000002, 1.1094999999999997, 1.644499999999999, 1.4312499999999986, 1.2459999999999987, 0.9807499999999987, 0.627250000000001, 0.5097500000000004, 0.44599999999999973, 0.6494999999999997, 1.1062500000000002, 1.1665, 1.4595000000000002, 0.5630000000000006, 0.4660000000000011, 0.4175000000000004, 0.28474999999999895], zp_timestamp='2026-02-14T23:32:00')
2026-02-15T01:35:49.330 [DEBUG] [Thread-195684] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:35:49.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-15T01:35:49.427 [DEBUG] [Thread-195687] [transport.py] [_log()] starting thread (client mode): 0xa2d86b30
2026-02-15T01:35:49.427 [DEBUG] [Thread-195687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:35:49.442 [DEBUG] [Thread-195687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:35:49.442 [INFO] [Thread-195687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:35:49.449 [DEBUG] [Thread-195687] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:35:49.449 [DEBUG] [Thread-195687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:35:49.449 [DEBUG] [Thread-195687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:35:49.449 [DEBUG] [Thread-195687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:35:49.450 [DEBUG] [Thread-195687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:35:49.450 [DEBUG] [Thread-195687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:35:49.450 [DEBUG] [Thread-195687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:35:49.450 [DEBUG] [Thread-195687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:35:49.450 [DEBUG] [Thread-195687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:35:49.450 [DEBUG] [Thread-195687] [transport.py] [_log()] client lang: <none>
2026-02-15T01:35:49.450 [DEBUG] [Thread-195687] [transport.py] [_log()] server lang: <none>
2026-02-15T01:35:49.450 [DEBUG] [Thread-195687] [transport.py] [_log()] kex follows: False
2026-02-15T01:35:49.450 [DEBUG] [Thread-195687] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:35:49.450 [DEBUG] [Thread-195687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:35:49.450 [DEBUG] [Thread-195687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:35:49.450 [DEBUG] [Thread-195687] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:35:49.450 [DEBUG] [Thread-195687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:35:49.450 [DEBUG] [Thread-195687] [transport.py] [_log()] Compression: none
2026-02-15T01:35:49.450 [DEBUG] [Thread-195687] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:35:49.508 [DEBUG] [Thread-195687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:35:49.508 [DEBUG] [Thread-195687] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:35:49.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:35:49.509 [DEBUG] [Thread-195687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:35:49.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:35:49.563 [DEBUG] [Thread-195687] [transport.py] [_log()] userauth is OK
2026-02-15T01:35:49.563 [DEBUG] [Thread-195687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:35:49.563 [DEBUG] [Thread-195687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:35:49.564 [DEBUG] [Thread-195687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:35:49.564 [DEBUG] [Thread-195687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:35:49.584 [INFO] [Thread-195687] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:35:49.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-15T01:35:49.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:35:50.448 [DEBUG] [Thread-195687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:35:50.449 [DEBUG] [Thread-195687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:35:50.496 [DEBUG] [Thread-195687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:35:50.496 [DEBUG] [Thread-195687] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:35:50.506 [DEBUG] [Thread-195687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:35:50.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:35:50.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-15T01:35:50.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-15T01:35:50.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:35:50.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:35:50.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:35:50.542 [DEBUG] [Thread-195687] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:35:58.321 [DEBUG] [Thread-195689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:36:13.374 [DEBUG] [Thread-195690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:36:13.398 [DEBUG] [Thread-195691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:36:20.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:36:20.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:36:20.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-15T01:36:22.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 36, 13), 1.86, 87.92, 0.0, 49.74, 7.17, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:36:22.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:36:13
2026-02-15T01:36:22.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:36:22.957 [DEBUG] [Thread-195692] [transport.py] [_log()] starting thread (client mode): 0xa2d19510
2026-02-15T01:36:22.957 [DEBUG] [Thread-195692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:36:22.977 [DEBUG] [Thread-195692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:36:22.977 [INFO] [Thread-195692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:36:22.980 [DEBUG] [Thread-195692] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:36:22.980 [DEBUG] [Thread-195692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:36:22.980 [DEBUG] [Thread-195692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:36:22.980 [DEBUG] [Thread-195692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:36:22.980 [DEBUG] [Thread-195692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:36:22.980 [DEBUG] [Thread-195692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:36:22.980 [DEBUG] [Thread-195692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:36:22.980 [DEBUG] [Thread-195692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:36:22.980 [DEBUG] [Thread-195692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:36:22.980 [DEBUG] [Thread-195692] [transport.py] [_log()] client lang: <none>
2026-02-15T01:36:22.980 [DEBUG] [Thread-195692] [transport.py] [_log()] server lang: <none>
2026-02-15T01:36:22.980 [DEBUG] [Thread-195692] [transport.py] [_log()] kex follows: False
2026-02-15T01:36:22.980 [DEBUG] [Thread-195692] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:36:22.980 [DEBUG] [Thread-195692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:36:22.981 [DEBUG] [Thread-195692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:36:22.981 [DEBUG] [Thread-195692] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:36:22.981 [DEBUG] [Thread-195692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:36:22.981 [DEBUG] [Thread-195692] [transport.py] [_log()] Compression: none
2026-02-15T01:36:22.981 [DEBUG] [Thread-195692] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:36:22.999 [DEBUG] [Thread-195692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:36:22.999 [DEBUG] [Thread-195692] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:36:23.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:36:23.001 [DEBUG] [Thread-195692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:36:23.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:36:23.002 [DEBUG] [Thread-195692] [transport.py] [_log()] userauth is OK
2026-02-15T01:36:23.002 [DEBUG] [Thread-195692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:36:23.003 [DEBUG] [Thread-195692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:36:23.003 [DEBUG] [Thread-195692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:36:23.003 [DEBUG] [Thread-195692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:36:23.026 [INFO] [Thread-195692] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:36:23.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:36:23.655 [DEBUG] [Thread-195692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:36:23.655 [DEBUG] [Thread-195692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:36:23.655 [DEBUG] [Thread-195692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:36:23.696 [DEBUG] [Thread-195692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:36:23.696 [DEBUG] [Thread-195692] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:36:23.699 [DEBUG] [Thread-195692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:36:23.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:36:23.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:36:23.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:36:23.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:36:23.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:36:23.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:36:23.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:36:23.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:36:23.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:36:23.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.983441 -999.00   +7.00  35.74     89   +5.40 1 1 2 3 1     0    0 0.49 -49.26 ZNESW 35.7 35.7 155.5 52.2 7.7 -21.6 7.6 -17.9 7.3 -17.7 7.8 -18.9
2026-02-15T01:36:23.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:36:23.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:36:23.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.983441
2026-02-15T01:36:23.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:36:23.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:36:23.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:36:23.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:36:23.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:36:23.722 [DEBUG] [Thread-195692] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:36:23.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:36:13', tmtdew=1.86, humidity=87.92, cloud=0.0, wind=49.74, temperature=7.17, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:36:09.302', atlas_cloud=1, atlas_rain=1, zp_data=[0.6427499999999995, 0.5662500000000001, 0.6222500000000002, 0.753499999999999, 0.8425000000000002, 0.6962500000000009, 0.7439999999999998, 0.7882500000000006, 0.6510000000000007, 0.527000000000001, 0.7662499999999994, 0.8819999999999997, 1.0079999999999991, 0.6362499999999995, 0.6359999999999992, 0.9594999999999994, 0.6972499999999995, 0.5969999999999995, 0.9599999999999991, 1.0462499999999988, 1.052999999999999, 0.4077499999999983, 0.3472500000000007, 0.6857500000000005, 0.7054999999999989, 1.0835, 1.26375, 1.3100000000000005, 0.6360000000000001, 0.1695000000000011, 0.21799999999999997, 0.2575000000000003, 0.7297499999999992], zp_timestamp='2026-02-14T23:35:00')
2026-02-15T01:36:23.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-15T01:36:23.822 [DEBUG] [Thread-195695] [transport.py] [_log()] starting thread (client mode): 0xa2d68fa0
2026-02-15T01:36:23.822 [DEBUG] [Thread-195695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:36:23.836 [DEBUG] [Thread-195695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:36:23.836 [INFO] [Thread-195695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:36:23.844 [DEBUG] [Thread-195695] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:36:23.844 [DEBUG] [Thread-195695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:36:23.844 [DEBUG] [Thread-195695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:36:23.844 [DEBUG] [Thread-195695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:36:23.844 [DEBUG] [Thread-195695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:36:23.844 [DEBUG] [Thread-195695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:36:23.844 [DEBUG] [Thread-195695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:36:23.844 [DEBUG] [Thread-195695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:36:23.844 [DEBUG] [Thread-195695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:36:23.844 [DEBUG] [Thread-195695] [transport.py] [_log()] client lang: <none>
2026-02-15T01:36:23.844 [DEBUG] [Thread-195695] [transport.py] [_log()] server lang: <none>
2026-02-15T01:36:23.844 [DEBUG] [Thread-195695] [transport.py] [_log()] kex follows: False
2026-02-15T01:36:23.844 [DEBUG] [Thread-195695] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:36:23.844 [DEBUG] [Thread-195695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:36:23.845 [DEBUG] [Thread-195695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:36:23.845 [DEBUG] [Thread-195695] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:36:23.845 [DEBUG] [Thread-195695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:36:23.845 [DEBUG] [Thread-195695] [transport.py] [_log()] Compression: none
2026-02-15T01:36:23.845 [DEBUG] [Thread-195695] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:36:23.903 [DEBUG] [Thread-195695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:36:23.904 [DEBUG] [Thread-195695] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:36:23.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:36:23.905 [DEBUG] [Thread-195695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:36:23.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:36:23.959 [DEBUG] [Thread-195695] [transport.py] [_log()] userauth is OK
2026-02-15T01:36:23.959 [DEBUG] [Thread-195695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:36:23.960 [DEBUG] [Thread-195695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:36:23.960 [DEBUG] [Thread-195695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:36:23.960 [DEBUG] [Thread-195695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:36:23.977 [INFO] [Thread-195695] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:36:23.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T01:36:23.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:36:24.760 [DEBUG] [Thread-195695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:36:24.761 [DEBUG] [Thread-195695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:36:24.809 [DEBUG] [Thread-195695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:36:24.809 [DEBUG] [Thread-195695] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:36:24.818 [DEBUG] [Thread-195695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:36:24.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:36:24.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:36:24.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:36:24.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:36:24.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:36:24.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:36:24.852 [DEBUG] [Thread-195695] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:36:28.409 [DEBUG] [Thread-195697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:36:33.634 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:36:33.635 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:36:43.470 [DEBUG] [Thread-195698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:36:54.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:36:54.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:36:54.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:36:56.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 36, 13), 1.86, 87.92, 0.0, 49.74, 7.17, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:36:56.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:36:13
2026-02-15T01:36:57.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:36:57.290 [DEBUG] [Thread-195699] [transport.py] [_log()] starting thread (client mode): 0xa2d844c0
2026-02-15T01:36:57.290 [DEBUG] [Thread-195699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:36:57.310 [DEBUG] [Thread-195699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:36:57.310 [INFO] [Thread-195699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:36:57.312 [DEBUG] [Thread-195699] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:36:57.312 [DEBUG] [Thread-195699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:36:57.312 [DEBUG] [Thread-195699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:36:57.312 [DEBUG] [Thread-195699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:36:57.312 [DEBUG] [Thread-195699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:36:57.312 [DEBUG] [Thread-195699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:36:57.312 [DEBUG] [Thread-195699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:36:57.312 [DEBUG] [Thread-195699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:36:57.312 [DEBUG] [Thread-195699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:36:57.312 [DEBUG] [Thread-195699] [transport.py] [_log()] client lang: <none>
2026-02-15T01:36:57.312 [DEBUG] [Thread-195699] [transport.py] [_log()] server lang: <none>
2026-02-15T01:36:57.312 [DEBUG] [Thread-195699] [transport.py] [_log()] kex follows: False
2026-02-15T01:36:57.312 [DEBUG] [Thread-195699] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:36:57.312 [DEBUG] [Thread-195699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:36:57.312 [DEBUG] [Thread-195699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:36:57.313 [DEBUG] [Thread-195699] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:36:57.313 [DEBUG] [Thread-195699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:36:57.313 [DEBUG] [Thread-195699] [transport.py] [_log()] Compression: none
2026-02-15T01:36:57.313 [DEBUG] [Thread-195699] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:36:57.321 [DEBUG] [Thread-195699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:36:57.321 [DEBUG] [Thread-195699] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:36:57.321 [DEBUG] [Thread-195699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:36:57.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:36:57.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:36:57.322 [DEBUG] [Thread-195699] [transport.py] [_log()] userauth is OK
2026-02-15T01:36:57.323 [DEBUG] [Thread-195699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:36:57.323 [DEBUG] [Thread-195699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:36:57.323 [DEBUG] [Thread-195699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:36:57.323 [DEBUG] [Thread-195699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:36:57.342 [INFO] [Thread-195699] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:36:57.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:36:57.963 [DEBUG] [Thread-195699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:36:57.963 [DEBUG] [Thread-195699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:36:57.964 [DEBUG] [Thread-195699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:36:58.004 [DEBUG] [Thread-195699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:36:58.005 [DEBUG] [Thread-195699] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:36:58.008 [DEBUG] [Thread-195699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:36:58.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:36:58.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:36:58.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:36:58.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:36:58.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:36:58.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:36:58.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:36:58.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:36:58.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:36:58.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.983789 -999.00   +7.00  43.70     89   +5.40 1 1 2 3 1     0    0 0.39 -52.52 ZNESW 43.7 43.7 158.0 58.0 7.8 -20.9 7.5 -20.5 7.3 -19.9 7.7 -21.1
2026-02-15T01:36:58.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:36:58.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:36:58.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.983789
2026-02-15T01:36:58.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:36:58.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:36:58.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:36:58.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:36:58.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:36:58.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:36:13', tmtdew=1.86, humidity=87.92, cloud=0.0, wind=49.74, temperature=7.17, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:36:39.370', atlas_cloud=1, atlas_rain=1, zp_data=[0.6427499999999995, 0.5662500000000001, 0.6222500000000002, 0.753499999999999, 0.8425000000000002, 0.6962500000000009, 0.7439999999999998, 0.7882500000000006, 0.6510000000000007, 0.527000000000001, 0.7662499999999994, 0.8819999999999997, 1.0079999999999991, 0.6362499999999995, 0.6359999999999992, 0.9594999999999994, 0.6972499999999995, 0.5969999999999995, 0.9599999999999991, 1.0462499999999988, 1.052999999999999, 0.4077499999999983, 0.3472500000000007, 0.6857500000000005, 0.7054999999999989, 1.0835, 1.26375, 1.3100000000000005, 0.6360000000000001, 0.1695000000000011, 0.21799999999999997, 0.2575000000000003, 0.7297499999999992], zp_timestamp='2026-02-14T23:35:00')
2026-02-15T01:36:58.039 [DEBUG] [Thread-195699] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:36:58.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T01:36:58.133 [DEBUG] [Thread-195702] [transport.py] [_log()] starting thread (client mode): 0xa2d85060
2026-02-15T01:36:58.133 [DEBUG] [Thread-195702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:36:58.147 [DEBUG] [Thread-195702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:36:58.147 [INFO] [Thread-195702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:36:58.155 [DEBUG] [Thread-195702] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:36:58.155 [DEBUG] [Thread-195702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:36:58.155 [DEBUG] [Thread-195702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:36:58.155 [DEBUG] [Thread-195702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:36:58.155 [DEBUG] [Thread-195702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:36:58.155 [DEBUG] [Thread-195702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:36:58.155 [DEBUG] [Thread-195702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:36:58.156 [DEBUG] [Thread-195702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:36:58.156 [DEBUG] [Thread-195702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:36:58.156 [DEBUG] [Thread-195702] [transport.py] [_log()] client lang: <none>
2026-02-15T01:36:58.156 [DEBUG] [Thread-195702] [transport.py] [_log()] server lang: <none>
2026-02-15T01:36:58.156 [DEBUG] [Thread-195702] [transport.py] [_log()] kex follows: False
2026-02-15T01:36:58.156 [DEBUG] [Thread-195702] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:36:58.156 [DEBUG] [Thread-195702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:36:58.156 [DEBUG] [Thread-195702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:36:58.156 [DEBUG] [Thread-195702] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:36:58.156 [DEBUG] [Thread-195702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:36:58.156 [DEBUG] [Thread-195702] [transport.py] [_log()] Compression: none
2026-02-15T01:36:58.156 [DEBUG] [Thread-195702] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:36:58.211 [DEBUG] [Thread-195702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:36:58.212 [DEBUG] [Thread-195702] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:36:58.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:36:58.213 [DEBUG] [Thread-195702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:36:58.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:36:58.272 [DEBUG] [Thread-195702] [transport.py] [_log()] userauth is OK
2026-02-15T01:36:58.272 [DEBUG] [Thread-195702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:36:58.273 [DEBUG] [Thread-195702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:36:58.273 [DEBUG] [Thread-195702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:36:58.273 [DEBUG] [Thread-195702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:36:58.291 [INFO] [Thread-195702] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:36:58.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-15T01:36:58.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:36:58.510 [DEBUG] [Thread-195704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:36:59.066 [DEBUG] [Thread-195702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:36:59.066 [DEBUG] [Thread-195702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:36:59.114 [DEBUG] [Thread-195702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:36:59.114 [DEBUG] [Thread-195702] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:36:59.124 [DEBUG] [Thread-195702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:36:59.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:36:59.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:36:59.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-15T01:36:59.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:36:59.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:36:59.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:36:59.161 [DEBUG] [Thread-195702] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:37:13.482 [DEBUG] [Thread-195705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:37:13.571 [DEBUG] [Thread-195706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:37:28.602 [DEBUG] [Thread-195707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:37:29.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:37:29.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:37:29.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-15T01:37:31.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 36, 50), 1.86, 87.92, 0.0, 45.94, 7.13, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:37:31.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:36:50
2026-02-15T01:37:31.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:37:31.644 [DEBUG] [Thread-195708] [transport.py] [_log()] starting thread (client mode): 0xa2d86110
2026-02-15T01:37:31.644 [DEBUG] [Thread-195708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:37:31.664 [DEBUG] [Thread-195708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:37:31.664 [INFO] [Thread-195708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:37:31.667 [DEBUG] [Thread-195708] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:37:31.667 [DEBUG] [Thread-195708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:37:31.667 [DEBUG] [Thread-195708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:37:31.667 [DEBUG] [Thread-195708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:37:31.667 [DEBUG] [Thread-195708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:37:31.667 [DEBUG] [Thread-195708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:37:31.668 [DEBUG] [Thread-195708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:37:31.668 [DEBUG] [Thread-195708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:37:31.668 [DEBUG] [Thread-195708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:37:31.668 [DEBUG] [Thread-195708] [transport.py] [_log()] client lang: <none>
2026-02-15T01:37:31.668 [DEBUG] [Thread-195708] [transport.py] [_log()] server lang: <none>
2026-02-15T01:37:31.668 [DEBUG] [Thread-195708] [transport.py] [_log()] kex follows: False
2026-02-15T01:37:31.668 [DEBUG] [Thread-195708] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:37:31.668 [DEBUG] [Thread-195708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:37:31.668 [DEBUG] [Thread-195708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:37:31.668 [DEBUG] [Thread-195708] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:37:31.668 [DEBUG] [Thread-195708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:37:31.668 [DEBUG] [Thread-195708] [transport.py] [_log()] Compression: none
2026-02-15T01:37:31.668 [DEBUG] [Thread-195708] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:37:31.686 [DEBUG] [Thread-195708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:37:31.687 [DEBUG] [Thread-195708] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:37:31.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:37:31.688 [DEBUG] [Thread-195708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:37:31.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:37:31.690 [DEBUG] [Thread-195708] [transport.py] [_log()] userauth is OK
2026-02-15T01:37:31.690 [DEBUG] [Thread-195708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:37:31.690 [DEBUG] [Thread-195708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:37:31.690 [DEBUG] [Thread-195708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:37:31.691 [DEBUG] [Thread-195708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:37:31.715 [INFO] [Thread-195708] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:37:31.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:37:32.319 [DEBUG] [Thread-195708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:37:32.319 [DEBUG] [Thread-195708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:37:32.319 [DEBUG] [Thread-195708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:37:32.361 [DEBUG] [Thread-195708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:37:32.361 [DEBUG] [Thread-195708] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:37:32.364 [DEBUG] [Thread-195708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:37:32.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:37:32.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:37:32.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:37:32.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:37:32.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:37:32.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:37:32.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:37:32.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:37:32.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:37:32.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.984136 -999.00   +7.00  34.06     89   +5.40 1 1 2 3 1     0    0 0.42 -50.53 ZNESW 34.1 34.1 155.0 49.7 7.8 -17.7 7.5 -19.1 7.4 -19.0 7.8 -19.3
2026-02-15T01:37:32.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:37:32.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:37:32.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.984136
2026-02-15T01:37:32.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:37:32.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:37:32.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:37:32.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:37:32.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:37:32.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:36:50', tmtdew=1.86, humidity=87.92, cloud=0.0, wind=45.94, temperature=7.13, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:37:09.350', atlas_cloud=1, atlas_rain=1, zp_data=[0.6427499999999995, 0.5662500000000001, 0.6222500000000002, 0.753499999999999, 0.8425000000000002, 0.6962500000000009, 0.7439999999999998, 0.7882500000000006, 0.6510000000000007, 0.527000000000001, 0.7662499999999994, 0.8819999999999997, 1.0079999999999991, 0.6362499999999995, 0.6359999999999992, 0.9594999999999994, 0.6972499999999995, 0.5969999999999995, 0.9599999999999991, 1.0462499999999988, 1.052999999999999, 0.4077499999999983, 0.3472500000000007, 0.6857500000000005, 0.7054999999999989, 1.0835, 1.26375, 1.3100000000000005, 0.6360000000000001, 0.1695000000000011, 0.21799999999999997, 0.2575000000000003, 0.7297499999999992], zp_timestamp='2026-02-14T23:35:00')
2026-02-15T01:37:32.392 [DEBUG] [Thread-195708] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:37:32.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-15T01:37:32.488 [DEBUG] [Thread-195711] [transport.py] [_log()] starting thread (client mode): 0xa57d6710
2026-02-15T01:37:32.488 [DEBUG] [Thread-195711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:37:32.502 [DEBUG] [Thread-195711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:37:32.503 [INFO] [Thread-195711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:37:32.511 [DEBUG] [Thread-195711] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:37:32.512 [DEBUG] [Thread-195711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:37:32.512 [DEBUG] [Thread-195711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:37:32.512 [DEBUG] [Thread-195711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:37:32.512 [DEBUG] [Thread-195711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:37:32.512 [DEBUG] [Thread-195711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:37:32.512 [DEBUG] [Thread-195711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:37:32.512 [DEBUG] [Thread-195711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:37:32.512 [DEBUG] [Thread-195711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:37:32.512 [DEBUG] [Thread-195711] [transport.py] [_log()] client lang: <none>
2026-02-15T01:37:32.512 [DEBUG] [Thread-195711] [transport.py] [_log()] server lang: <none>
2026-02-15T01:37:32.512 [DEBUG] [Thread-195711] [transport.py] [_log()] kex follows: False
2026-02-15T01:37:32.512 [DEBUG] [Thread-195711] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:37:32.512 [DEBUG] [Thread-195711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:37:32.512 [DEBUG] [Thread-195711] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:37:32.512 [DEBUG] [Thread-195711] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:37:32.512 [DEBUG] [Thread-195711] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:37:32.513 [DEBUG] [Thread-195711] [transport.py] [_log()] Compression: none
2026-02-15T01:37:32.513 [DEBUG] [Thread-195711] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:37:32.568 [DEBUG] [Thread-195711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:37:32.568 [DEBUG] [Thread-195711] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:37:32.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:37:32.570 [DEBUG] [Thread-195711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:37:32.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:37:32.625 [DEBUG] [Thread-195711] [transport.py] [_log()] userauth is OK
2026-02-15T01:37:32.625 [DEBUG] [Thread-195711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:37:32.625 [DEBUG] [Thread-195711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:37:32.625 [DEBUG] [Thread-195711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:37:32.625 [DEBUG] [Thread-195711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:37:32.644 [INFO] [Thread-195711] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:37:32.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-15T01:37:32.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:37:33.453 [DEBUG] [Thread-195711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:37:33.453 [DEBUG] [Thread-195711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:37:33.500 [DEBUG] [Thread-195711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:37:33.500 [DEBUG] [Thread-195711] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:37:33.510 [DEBUG] [Thread-195711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:37:33.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:37:33.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-15T01:37:33.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-15T01:37:33.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:37:33.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:37:33.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:37:33.545 [DEBUG] [Thread-195711] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:37:33.840 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:37:33.842 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:37:43.640 [DEBUG] [Thread-195713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:37:58.691 [DEBUG] [Thread-195714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:38:03.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:38:03.568 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:38:03.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-15T01:38:05.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 37, 25), 1.85, 87.95, 0.0, 48.15, 7.17, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:38:05.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:37:25
2026-02-15T01:38:05.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:38:06.090 [DEBUG] [Thread-195715] [transport.py] [_log()] starting thread (client mode): 0xa2d6a8c0
2026-02-15T01:38:06.090 [DEBUG] [Thread-195715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:38:06.110 [DEBUG] [Thread-195715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:38:06.111 [INFO] [Thread-195715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:38:06.114 [DEBUG] [Thread-195715] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:38:06.114 [DEBUG] [Thread-195715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:38:06.114 [DEBUG] [Thread-195715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:38:06.114 [DEBUG] [Thread-195715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:38:06.114 [DEBUG] [Thread-195715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:38:06.114 [DEBUG] [Thread-195715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:38:06.114 [DEBUG] [Thread-195715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:38:06.114 [DEBUG] [Thread-195715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:38:06.114 [DEBUG] [Thread-195715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:38:06.114 [DEBUG] [Thread-195715] [transport.py] [_log()] client lang: <none>
2026-02-15T01:38:06.114 [DEBUG] [Thread-195715] [transport.py] [_log()] server lang: <none>
2026-02-15T01:38:06.114 [DEBUG] [Thread-195715] [transport.py] [_log()] kex follows: False
2026-02-15T01:38:06.114 [DEBUG] [Thread-195715] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:38:06.114 [DEBUG] [Thread-195715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:38:06.114 [DEBUG] [Thread-195715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:38:06.114 [DEBUG] [Thread-195715] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:38:06.114 [DEBUG] [Thread-195715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:38:06.115 [DEBUG] [Thread-195715] [transport.py] [_log()] Compression: none
2026-02-15T01:38:06.115 [DEBUG] [Thread-195715] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:38:06.131 [DEBUG] [Thread-195715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:38:06.132 [DEBUG] [Thread-195715] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:38:06.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:38:06.133 [DEBUG] [Thread-195715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:38:06.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:38:06.135 [DEBUG] [Thread-195715] [transport.py] [_log()] userauth is OK
2026-02-15T01:38:06.135 [DEBUG] [Thread-195715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:38:06.135 [DEBUG] [Thread-195715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:38:06.135 [DEBUG] [Thread-195715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:38:06.135 [DEBUG] [Thread-195715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:38:06.161 [INFO] [Thread-195715] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:38:06.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:38:06.794 [DEBUG] [Thread-195715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:38:06.795 [DEBUG] [Thread-195715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:38:06.795 [DEBUG] [Thread-195715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:38:06.835 [DEBUG] [Thread-195715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:38:06.835 [DEBUG] [Thread-195715] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:38:06.839 [DEBUG] [Thread-195715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:38:06.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:38:06.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:38:06.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:38:06.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:38:06.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:38:06.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:38:06.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:38:06.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:38:06.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:38:06.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.984483 -999.00   +7.00  27.63     89   +5.30 1 1 1 3 1     0    0 0.49 -47.54 ZNESW 27.6 27.6 143.4 48.9 7.7 -19.8 7.5 -17.1 7.4 -16.9 7.7 -17.5
2026-02-15T01:38:06.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:38:06.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:38:06.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.984483
2026-02-15T01:38:06.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:38:06.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:38:06.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:38:06.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:38:06.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:38:06.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:37:25', tmtdew=1.85, humidity=87.95, cloud=0.0, wind=48.15, temperature=7.17, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:37:39.331', atlas_cloud=1, atlas_rain=1, zp_data=[0.6427499999999995, 0.5662500000000001, 0.6222500000000002, 0.753499999999999, 0.8425000000000002, 0.6962500000000009, 0.7439999999999998, 0.7882500000000006, 0.6510000000000007, 0.527000000000001, 0.7662499999999994, 0.8819999999999997, 1.0079999999999991, 0.6362499999999995, 0.6359999999999992, 0.9594999999999994, 0.6972499999999995, 0.5969999999999995, 0.9599999999999991, 1.0462499999999988, 1.052999999999999, 0.4077499999999983, 0.3472500000000007, 0.6857500000000005, 0.7054999999999989, 1.0835, 1.26375, 1.3100000000000005, 0.6360000000000001, 0.1695000000000011, 0.21799999999999997, 0.2575000000000003, 0.7297499999999992], zp_timestamp='2026-02-14T23:35:00')
2026-02-15T01:38:06.864 [DEBUG] [Thread-195715] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:38:06.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-15T01:38:06.960 [DEBUG] [Thread-195718] [transport.py] [_log()] starting thread (client mode): 0xa2d00d90
2026-02-15T01:38:06.960 [DEBUG] [Thread-195718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:38:06.975 [DEBUG] [Thread-195718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:38:06.975 [INFO] [Thread-195718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:38:06.983 [DEBUG] [Thread-195718] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:38:06.983 [DEBUG] [Thread-195718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:38:06.983 [DEBUG] [Thread-195718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:38:06.983 [DEBUG] [Thread-195718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:38:06.983 [DEBUG] [Thread-195718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:38:06.983 [DEBUG] [Thread-195718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:38:06.983 [DEBUG] [Thread-195718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:38:06.983 [DEBUG] [Thread-195718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:38:06.983 [DEBUG] [Thread-195718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:38:06.983 [DEBUG] [Thread-195718] [transport.py] [_log()] client lang: <none>
2026-02-15T01:38:06.983 [DEBUG] [Thread-195718] [transport.py] [_log()] server lang: <none>
2026-02-15T01:38:06.983 [DEBUG] [Thread-195718] [transport.py] [_log()] kex follows: False
2026-02-15T01:38:06.983 [DEBUG] [Thread-195718] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:38:06.984 [DEBUG] [Thread-195718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:38:06.984 [DEBUG] [Thread-195718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:38:06.984 [DEBUG] [Thread-195718] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:38:06.984 [DEBUG] [Thread-195718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:38:06.984 [DEBUG] [Thread-195718] [transport.py] [_log()] Compression: none
2026-02-15T01:38:06.984 [DEBUG] [Thread-195718] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:38:07.041 [DEBUG] [Thread-195718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:38:07.042 [DEBUG] [Thread-195718] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:38:07.042 [DEBUG] [Thread-195718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:38:07.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:38:07.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:38:07.100 [DEBUG] [Thread-195718] [transport.py] [_log()] userauth is OK
2026-02-15T01:38:07.101 [DEBUG] [Thread-195718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:38:07.101 [DEBUG] [Thread-195718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:38:07.101 [DEBUG] [Thread-195718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:38:07.101 [DEBUG] [Thread-195718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:38:07.121 [INFO] [Thread-195718] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:38:07.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-15T01:38:07.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:38:07.901 [DEBUG] [Thread-195718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:38:07.901 [DEBUG] [Thread-195718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:38:07.949 [DEBUG] [Thread-195718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:38:07.950 [DEBUG] [Thread-195718] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:38:07.959 [DEBUG] [Thread-195718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:38:07.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:38:07.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-15T01:38:07.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-15T01:38:07.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:38:07.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:38:07.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:38:07.995 [DEBUG] [Thread-195718] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:38:13.537 [DEBUG] [Thread-195720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:38:13.727 [DEBUG] [Thread-195721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:38:28.778 [DEBUG] [Thread-195722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:38:34.050 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:38:34.052 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:38:38.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:38:38.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:38:38.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:38:39.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 38), 1.85, 87.92, 0.0, 48.66, 7.12, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:38:39.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:38:00
2026-02-15T01:38:40.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:38:40.496 [DEBUG] [Thread-195723] [transport.py] [_log()] starting thread (client mode): 0xa2d68190
2026-02-15T01:38:40.496 [DEBUG] [Thread-195723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:38:40.517 [DEBUG] [Thread-195723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:38:40.517 [INFO] [Thread-195723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:38:40.520 [DEBUG] [Thread-195723] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:38:40.521 [DEBUG] [Thread-195723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:38:40.521 [DEBUG] [Thread-195723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:38:40.521 [DEBUG] [Thread-195723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:38:40.521 [DEBUG] [Thread-195723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:38:40.521 [DEBUG] [Thread-195723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:38:40.521 [DEBUG] [Thread-195723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:38:40.521 [DEBUG] [Thread-195723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:38:40.521 [DEBUG] [Thread-195723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:38:40.521 [DEBUG] [Thread-195723] [transport.py] [_log()] client lang: <none>
2026-02-15T01:38:40.521 [DEBUG] [Thread-195723] [transport.py] [_log()] server lang: <none>
2026-02-15T01:38:40.521 [DEBUG] [Thread-195723] [transport.py] [_log()] kex follows: False
2026-02-15T01:38:40.521 [DEBUG] [Thread-195723] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:38:40.522 [DEBUG] [Thread-195723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:38:40.522 [DEBUG] [Thread-195723] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:38:40.522 [DEBUG] [Thread-195723] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:38:40.522 [DEBUG] [Thread-195723] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:38:40.522 [DEBUG] [Thread-195723] [transport.py] [_log()] Compression: none
2026-02-15T01:38:40.522 [DEBUG] [Thread-195723] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:38:40.540 [DEBUG] [Thread-195723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:38:40.541 [DEBUG] [Thread-195723] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:38:40.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:38:40.542 [DEBUG] [Thread-195723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:38:40.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:38:40.544 [DEBUG] [Thread-195723] [transport.py] [_log()] userauth is OK
2026-02-15T01:38:40.544 [DEBUG] [Thread-195723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:38:40.544 [DEBUG] [Thread-195723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:38:40.544 [DEBUG] [Thread-195723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:38:40.545 [DEBUG] [Thread-195723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:38:40.580 [INFO] [Thread-195723] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:38:40.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:38:41.161 [DEBUG] [Thread-195723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:38:41.161 [DEBUG] [Thread-195723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:38:41.162 [DEBUG] [Thread-195723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:38:41.201 [DEBUG] [Thread-195723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:38:41.202 [DEBUG] [Thread-195723] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:38:41.205 [DEBUG] [Thread-195723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:38:41.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:38:41.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:38:41.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:38:41.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:38:41.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:38:41.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:38:41.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:38:41.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:38:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:38:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.984830 -999.00   +7.00  33.66     89   +5.30 1 1 2 3 1     0    0 0.45 -47.91 ZNESW 33.7 33.7 149.6 47.6 7.7 -16.8 7.5 -18.3 7.3 -18.1 7.7 -20.4
2026-02-15T01:38:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:38:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:38:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.984830
2026-02-15T01:38:41.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:38:41.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:38:41.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:38:41.234 [DEBUG] [Thread-195723] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:38:41.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:38:41.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:38:41.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:38:00', tmtdew=1.85, humidity=87.92, cloud=0.0, wind=48.66, temperature=7.12, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:38:09.312', atlas_cloud=1, atlas_rain=1, zp_data=[0.6427499999999995, 0.5662500000000001, 0.6222500000000002, 0.753499999999999, 0.8425000000000002, 0.6962500000000009, 0.7439999999999998, 0.7882500000000006, 0.6510000000000007, 0.527000000000001, 0.7662499999999994, 0.8819999999999997, 1.0079999999999991, 0.6362499999999995, 0.6359999999999992, 0.9594999999999994, 0.6972499999999995, 0.5969999999999995, 0.9599999999999991, 1.0462499999999988, 1.052999999999999, 0.4077499999999983, 0.3472500000000007, 0.6857500000000005, 0.7054999999999989, 1.0835, 1.26375, 1.3100000000000005, 0.6360000000000001, 0.1695000000000011, 0.21799999999999997, 0.2575000000000003, 0.7297499999999992], zp_timestamp='2026-02-14T23:35:00')
2026-02-15T01:38:41.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-15T01:38:41.329 [DEBUG] [Thread-195726] [transport.py] [_log()] starting thread (client mode): 0xa2d18e50
2026-02-15T01:38:41.329 [DEBUG] [Thread-195726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:38:41.344 [DEBUG] [Thread-195726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:38:41.344 [INFO] [Thread-195726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:38:41.351 [DEBUG] [Thread-195726] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:38:41.351 [DEBUG] [Thread-195726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:38:41.351 [DEBUG] [Thread-195726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:38:41.352 [DEBUG] [Thread-195726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:38:41.352 [DEBUG] [Thread-195726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:38:41.352 [DEBUG] [Thread-195726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:38:41.352 [DEBUG] [Thread-195726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:38:41.352 [DEBUG] [Thread-195726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:38:41.352 [DEBUG] [Thread-195726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:38:41.352 [DEBUG] [Thread-195726] [transport.py] [_log()] client lang: <none>
2026-02-15T01:38:41.352 [DEBUG] [Thread-195726] [transport.py] [_log()] server lang: <none>
2026-02-15T01:38:41.352 [DEBUG] [Thread-195726] [transport.py] [_log()] kex follows: False
2026-02-15T01:38:41.352 [DEBUG] [Thread-195726] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:38:41.352 [DEBUG] [Thread-195726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:38:41.352 [DEBUG] [Thread-195726] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:38:41.352 [DEBUG] [Thread-195726] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:38:41.352 [DEBUG] [Thread-195726] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:38:41.352 [DEBUG] [Thread-195726] [transport.py] [_log()] Compression: none
2026-02-15T01:38:41.353 [DEBUG] [Thread-195726] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:38:41.409 [DEBUG] [Thread-195726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:38:41.410 [DEBUG] [Thread-195726] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:38:41.410 [DEBUG] [Thread-195726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:38:41.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:38:41.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:38:41.464 [DEBUG] [Thread-195726] [transport.py] [_log()] userauth is OK
2026-02-15T01:38:41.465 [DEBUG] [Thread-195726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:38:41.465 [DEBUG] [Thread-195726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:38:41.465 [DEBUG] [Thread-195726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:38:41.465 [DEBUG] [Thread-195726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:38:41.488 [INFO] [Thread-195726] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:38:41.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-15T01:38:41.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:38:42.302 [DEBUG] [Thread-195726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:38:42.302 [DEBUG] [Thread-195726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:38:42.350 [DEBUG] [Thread-195726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:38:42.351 [DEBUG] [Thread-195726] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:38:42.360 [DEBUG] [Thread-195726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:38:42.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:38:42.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-15T01:38:42.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:38:42.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:38:42.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:38:42.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:38:42.395 [DEBUG] [Thread-195726] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:38:43.816 [DEBUG] [Thread-195728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:38:58.868 [DEBUG] [Thread-195729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:39:12.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:39:12.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:39:12.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-15T01:39:13.623 [DEBUG] [Thread-195730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:39:13.904 [DEBUG] [Thread-195731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:39:14.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 38, 36), 2.19, 85.93, 0.0, 48.9, 7.46, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:39:14.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:38:36
2026-02-15T01:39:14.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:39:15.015 [DEBUG] [Thread-195732] [transport.py] [_log()] starting thread (client mode): 0xa2d1b790
2026-02-15T01:39:15.015 [DEBUG] [Thread-195732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:39:15.036 [DEBUG] [Thread-195732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:39:15.036 [INFO] [Thread-195732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:39:15.039 [DEBUG] [Thread-195732] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:39:15.039 [DEBUG] [Thread-195732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:39:15.039 [DEBUG] [Thread-195732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:39:15.039 [DEBUG] [Thread-195732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:39:15.039 [DEBUG] [Thread-195732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:39:15.039 [DEBUG] [Thread-195732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:39:15.039 [DEBUG] [Thread-195732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:39:15.039 [DEBUG] [Thread-195732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:39:15.039 [DEBUG] [Thread-195732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:39:15.039 [DEBUG] [Thread-195732] [transport.py] [_log()] client lang: <none>
2026-02-15T01:39:15.039 [DEBUG] [Thread-195732] [transport.py] [_log()] server lang: <none>
2026-02-15T01:39:15.039 [DEBUG] [Thread-195732] [transport.py] [_log()] kex follows: False
2026-02-15T01:39:15.039 [DEBUG] [Thread-195732] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:39:15.039 [DEBUG] [Thread-195732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:39:15.039 [DEBUG] [Thread-195732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:39:15.039 [DEBUG] [Thread-195732] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:39:15.039 [DEBUG] [Thread-195732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:39:15.039 [DEBUG] [Thread-195732] [transport.py] [_log()] Compression: none
2026-02-15T01:39:15.039 [DEBUG] [Thread-195732] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:39:15.056 [DEBUG] [Thread-195732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:39:15.057 [DEBUG] [Thread-195732] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:39:15.057 [DEBUG] [Thread-195732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:39:15.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:39:15.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:39:15.059 [DEBUG] [Thread-195732] [transport.py] [_log()] userauth is OK
2026-02-15T01:39:15.059 [DEBUG] [Thread-195732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:39:15.059 [DEBUG] [Thread-195732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:39:15.059 [DEBUG] [Thread-195732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:39:15.059 [DEBUG] [Thread-195732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:39:15.082 [INFO] [Thread-195732] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:39:15.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:39:15.695 [DEBUG] [Thread-195732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:39:15.695 [DEBUG] [Thread-195732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:39:15.696 [DEBUG] [Thread-195732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:39:15.736 [DEBUG] [Thread-195732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:39:15.737 [DEBUG] [Thread-195732] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:39:15.740 [DEBUG] [Thread-195732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:39:15.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:39:15.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:39:15.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:39:15.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:39:15.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:39:15.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:39:15.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:39:15.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:39:15.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:39:15.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.985178 -999.00   +7.00  29.77     89   +5.30 1 1 1 3 1     0    0 0.61 -43.15 ZNESW 29.8 29.8 164.6 50.5 7.8 -13.7 7.5 -14.6 7.4 -14.3 7.7 -14.6
2026-02-15T01:39:15.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:39:15.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:39:15.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.985178
2026-02-15T01:39:15.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:39:15.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:39:15.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:39:15.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:39:15.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:39:15.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:38:36', tmtdew=2.19, humidity=85.93, cloud=0.0, wind=48.9, temperature=7.46, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:38:39.379', atlas_cloud=1, atlas_rain=1, zp_data=[0.6427499999999995, 0.5662500000000001, 0.6222500000000002, 0.753499999999999, 0.8425000000000002, 0.6962500000000009, 0.7439999999999998, 0.7882500000000006, 0.6510000000000007, 0.527000000000001, 0.7662499999999994, 0.8819999999999997, 1.0079999999999991, 0.6362499999999995, 0.6359999999999992, 0.9594999999999994, 0.6972499999999995, 0.5969999999999995, 0.9599999999999991, 1.0462499999999988, 1.052999999999999, 0.4077499999999983, 0.3472500000000007, 0.6857500000000005, 0.7054999999999989, 1.0835, 1.26375, 1.3100000000000005, 0.6360000000000001, 0.1695000000000011, 0.21799999999999997, 0.2575000000000003, 0.7297499999999992], zp_timestamp='2026-02-14T23:35:00')
2026-02-15T01:39:15.768 [DEBUG] [Thread-195732] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:39:15.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-15T01:39:15.870 [DEBUG] [Thread-195735] [transport.py] [_log()] starting thread (client mode): 0xa2d19930
2026-02-15T01:39:15.870 [DEBUG] [Thread-195735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:39:15.888 [DEBUG] [Thread-195735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:39:15.888 [INFO] [Thread-195735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:39:15.896 [DEBUG] [Thread-195735] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:39:15.896 [DEBUG] [Thread-195735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:39:15.896 [DEBUG] [Thread-195735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:39:15.896 [DEBUG] [Thread-195735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:39:15.896 [DEBUG] [Thread-195735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:39:15.896 [DEBUG] [Thread-195735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:39:15.896 [DEBUG] [Thread-195735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:39:15.896 [DEBUG] [Thread-195735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:39:15.897 [DEBUG] [Thread-195735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:39:15.897 [DEBUG] [Thread-195735] [transport.py] [_log()] client lang: <none>
2026-02-15T01:39:15.897 [DEBUG] [Thread-195735] [transport.py] [_log()] server lang: <none>
2026-02-15T01:39:15.897 [DEBUG] [Thread-195735] [transport.py] [_log()] kex follows: False
2026-02-15T01:39:15.897 [DEBUG] [Thread-195735] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:39:15.897 [DEBUG] [Thread-195735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:39:15.897 [DEBUG] [Thread-195735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:39:15.897 [DEBUG] [Thread-195735] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:39:15.897 [DEBUG] [Thread-195735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:39:15.897 [DEBUG] [Thread-195735] [transport.py] [_log()] Compression: none
2026-02-15T01:39:15.897 [DEBUG] [Thread-195735] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:39:15.957 [DEBUG] [Thread-195735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:39:15.957 [DEBUG] [Thread-195735] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:39:15.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:39:15.959 [DEBUG] [Thread-195735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:39:15.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:39:16.013 [DEBUG] [Thread-195735] [transport.py] [_log()] userauth is OK
2026-02-15T01:39:16.013 [DEBUG] [Thread-195735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:39:16.013 [DEBUG] [Thread-195735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:39:16.013 [DEBUG] [Thread-195735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:39:16.013 [DEBUG] [Thread-195735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:39:16.032 [INFO] [Thread-195735] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:39:16.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-15T01:39:16.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:39:16.832 [DEBUG] [Thread-195735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:39:16.833 [DEBUG] [Thread-195735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:39:16.880 [DEBUG] [Thread-195735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:39:16.881 [DEBUG] [Thread-195735] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:39:16.890 [DEBUG] [Thread-195735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:39:16.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:39:16.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-15T01:39:16.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:39:16.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:39:16.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:39:16.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:39:16.926 [DEBUG] [Thread-195735] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:39:28.942 [DEBUG] [Thread-195737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:39:34.254 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:39:34.256 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:39:44.004 [DEBUG] [Thread-195738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:39:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:39:46.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:39:46.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-15T01:39:49.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 39, 11), 1.84, 88.02, 0.0, 41.15, 7.13, 1, 1, 0, 2, 0, 0),)
2026-02-15T01:39:49.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:39:11
2026-02-15T01:39:49.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:39:49.582 [DEBUG] [Thread-195739] [transport.py] [_log()] starting thread (client mode): 0xa57d4be0
2026-02-15T01:39:49.582 [DEBUG] [Thread-195739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:39:49.602 [DEBUG] [Thread-195739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:39:49.602 [INFO] [Thread-195739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:39:49.605 [DEBUG] [Thread-195739] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:39:49.605 [DEBUG] [Thread-195739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:39:49.605 [DEBUG] [Thread-195739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:39:49.605 [DEBUG] [Thread-195739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:39:49.605 [DEBUG] [Thread-195739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:39:49.605 [DEBUG] [Thread-195739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:39:49.605 [DEBUG] [Thread-195739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:39:49.605 [DEBUG] [Thread-195739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:39:49.606 [DEBUG] [Thread-195739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:39:49.606 [DEBUG] [Thread-195739] [transport.py] [_log()] client lang: <none>
2026-02-15T01:39:49.606 [DEBUG] [Thread-195739] [transport.py] [_log()] server lang: <none>
2026-02-15T01:39:49.606 [DEBUG] [Thread-195739] [transport.py] [_log()] kex follows: False
2026-02-15T01:39:49.606 [DEBUG] [Thread-195739] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:39:49.606 [DEBUG] [Thread-195739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:39:49.606 [DEBUG] [Thread-195739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:39:49.606 [DEBUG] [Thread-195739] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:39:49.606 [DEBUG] [Thread-195739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:39:49.606 [DEBUG] [Thread-195739] [transport.py] [_log()] Compression: none
2026-02-15T01:39:49.606 [DEBUG] [Thread-195739] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:39:49.616 [DEBUG] [Thread-195739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:39:49.616 [DEBUG] [Thread-195739] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:39:49.617 [DEBUG] [Thread-195739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:39:49.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:39:49.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:39:49.618 [DEBUG] [Thread-195739] [transport.py] [_log()] userauth is OK
2026-02-15T01:39:49.618 [DEBUG] [Thread-195739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:39:49.619 [DEBUG] [Thread-195739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:39:49.619 [DEBUG] [Thread-195739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:39:49.619 [DEBUG] [Thread-195739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:39:49.638 [INFO] [Thread-195739] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:39:49.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:39:50.270 [DEBUG] [Thread-195739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:39:50.270 [DEBUG] [Thread-195739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:39:50.271 [DEBUG] [Thread-195739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:39:50.311 [DEBUG] [Thread-195739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:39:50.312 [DEBUG] [Thread-195739] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:39:50.315 [DEBUG] [Thread-195739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:39:50.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:39:50.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:39:50.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:39:50.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:39:50.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:39:50.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:39:50.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:39:50.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:39:50.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:39:50.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.985872 -999.00   +7.00  34.73     89   +5.30 1 2 2 3 1     0    0 0.71 -38.22 zNESW 34.7 34.7 144.8 46.4 7.8 -15.7 7.5 -19.0 7.3 -18.4 7.7 -19.6
2026-02-15T01:39:50.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:39:50.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:39:50.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.985872
2026-02-15T01:39:50.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:39:50.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:39:50.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:39:50.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:39:50.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T01:39:50.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:39:11', tmtdew=1.84, humidity=88.02, cloud=0.0, wind=41.15, temperature=7.13, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:39:39.341', atlas_cloud=2, atlas_rain=1, zp_data=[0.6427499999999995, 0.5662500000000001, 0.6222500000000002, 0.753499999999999, 0.8425000000000002, 0.6962500000000009, 0.7439999999999998, 0.7882500000000006, 0.6510000000000007, 0.527000000000001, 0.7662499999999994, 0.8819999999999997, 1.0079999999999991, 0.6362499999999995, 0.6359999999999992, 0.9594999999999994, 0.6972499999999995, 0.5969999999999995, 0.9599999999999991, 1.0462499999999988, 1.052999999999999, 0.4077499999999983, 0.3472500000000007, 0.6857500000000005, 0.7054999999999989, 1.0835, 1.26375, 1.3100000000000005, 0.6360000000000001, 0.1695000000000011, 0.21799999999999997, 0.2575000000000003, 0.7297499999999992], zp_timestamp='2026-02-14T23:38:00')
2026-02-15T01:39:50.344 [DEBUG] [Thread-195739] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:39:50.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-15T01:39:50.440 [DEBUG] [Thread-195742] [transport.py] [_log()] starting thread (client mode): 0xa57d5f00
2026-02-15T01:39:50.440 [DEBUG] [Thread-195742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:39:50.454 [DEBUG] [Thread-195742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:39:50.454 [INFO] [Thread-195742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:39:50.461 [DEBUG] [Thread-195742] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:39:50.462 [DEBUG] [Thread-195742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:39:50.462 [DEBUG] [Thread-195742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:39:50.462 [DEBUG] [Thread-195742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:39:50.462 [DEBUG] [Thread-195742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:39:50.462 [DEBUG] [Thread-195742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:39:50.462 [DEBUG] [Thread-195742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:39:50.462 [DEBUG] [Thread-195742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:39:50.462 [DEBUG] [Thread-195742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:39:50.462 [DEBUG] [Thread-195742] [transport.py] [_log()] client lang: <none>
2026-02-15T01:39:50.462 [DEBUG] [Thread-195742] [transport.py] [_log()] server lang: <none>
2026-02-15T01:39:50.462 [DEBUG] [Thread-195742] [transport.py] [_log()] kex follows: False
2026-02-15T01:39:50.462 [DEBUG] [Thread-195742] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:39:50.462 [DEBUG] [Thread-195742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:39:50.462 [DEBUG] [Thread-195742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:39:50.463 [DEBUG] [Thread-195742] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:39:50.463 [DEBUG] [Thread-195742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:39:50.463 [DEBUG] [Thread-195742] [transport.py] [_log()] Compression: none
2026-02-15T01:39:50.463 [DEBUG] [Thread-195742] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:39:50.525 [DEBUG] [Thread-195742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:39:50.526 [DEBUG] [Thread-195742] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:39:50.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:39:50.527 [DEBUG] [Thread-195742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:39:50.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:39:50.581 [DEBUG] [Thread-195742] [transport.py] [_log()] userauth is OK
2026-02-15T01:39:50.581 [DEBUG] [Thread-195742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:39:50.581 [DEBUG] [Thread-195742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:39:50.581 [DEBUG] [Thread-195742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:39:50.581 [DEBUG] [Thread-195742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:39:50.599 [INFO] [Thread-195742] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:39:50.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-15T01:39:50.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:39:51.400 [DEBUG] [Thread-195742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:39:51.401 [DEBUG] [Thread-195742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:39:51.448 [DEBUG] [Thread-195742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:39:51.448 [DEBUG] [Thread-195742] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:39:51.456 [DEBUG] [Thread-195742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:39:51.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:39:51.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-15T01:39:51.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:39:51.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:39:51.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:39:51.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:39:51.490 [DEBUG] [Thread-195742] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:39:59.040 [DEBUG] [Thread-195744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:40:13.698 [DEBUG] [Thread-195745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:40:14.099 [DEBUG] [Thread-195746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:40:21.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:40:21.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:40:21.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:40:23.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 39, 46), 1.84, 88.02, 0.0, 49.21, 7.1, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:40:23.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:39:46
2026-02-15T01:40:23.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:40:23.905 [DEBUG] [Thread-195747] [transport.py] [_log()] starting thread (client mode): 0xa2d7b550
2026-02-15T01:40:23.905 [DEBUG] [Thread-195747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:40:23.925 [DEBUG] [Thread-195747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:40:23.925 [INFO] [Thread-195747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:40:23.929 [DEBUG] [Thread-195747] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:40:23.929 [DEBUG] [Thread-195747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:40:23.929 [DEBUG] [Thread-195747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:40:23.929 [DEBUG] [Thread-195747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:40:23.929 [DEBUG] [Thread-195747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:40:23.929 [DEBUG] [Thread-195747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:40:23.929 [DEBUG] [Thread-195747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:40:23.929 [DEBUG] [Thread-195747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:40:23.929 [DEBUG] [Thread-195747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:40:23.929 [DEBUG] [Thread-195747] [transport.py] [_log()] client lang: <none>
2026-02-15T01:40:23.929 [DEBUG] [Thread-195747] [transport.py] [_log()] server lang: <none>
2026-02-15T01:40:23.929 [DEBUG] [Thread-195747] [transport.py] [_log()] kex follows: False
2026-02-15T01:40:23.929 [DEBUG] [Thread-195747] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:40:23.929 [DEBUG] [Thread-195747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:40:23.929 [DEBUG] [Thread-195747] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:40:23.929 [DEBUG] [Thread-195747] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:40:23.929 [DEBUG] [Thread-195747] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:40:23.929 [DEBUG] [Thread-195747] [transport.py] [_log()] Compression: none
2026-02-15T01:40:23.929 [DEBUG] [Thread-195747] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:40:23.946 [DEBUG] [Thread-195747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:40:23.946 [DEBUG] [Thread-195747] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:40:23.947 [DEBUG] [Thread-195747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:40:23.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:40:23.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:40:23.949 [DEBUG] [Thread-195747] [transport.py] [_log()] userauth is OK
2026-02-15T01:40:23.949 [DEBUG] [Thread-195747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:40:23.949 [DEBUG] [Thread-195747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:40:23.949 [DEBUG] [Thread-195747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:40:23.949 [DEBUG] [Thread-195747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:40:23.985 [INFO] [Thread-195747] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:40:23.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:40:24.769 [DEBUG] [Thread-195747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:40:24.769 [DEBUG] [Thread-195747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:40:24.770 [DEBUG] [Thread-195747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:40:24.810 [DEBUG] [Thread-195747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:40:24.810 [DEBUG] [Thread-195747] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:40:24.812 [DEBUG] [Thread-195747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:40:24.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:40:24.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:40:24.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:40:24.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:40:24.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:40:24.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:40:24.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:40:24.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:40:24.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:40:24.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.985872 -999.00   +7.00  34.73     89   +5.30 1 2 2 3 1     0    0 0.71 -38.22 zNESW 34.7 34.7 144.8 46.4 7.8 -15.7 7.5 -19.0 7.3 -18.4 7.7 -19.6
2026-02-15T01:40:24.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:40:24.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:40:24.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.985872
2026-02-15T01:40:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:40:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:40:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:40:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:40:24.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T01:40:24.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:39:46', tmtdew=1.84, humidity=88.02, cloud=0.0, wind=49.21, temperature=7.1, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:39:39.341', atlas_cloud=2, atlas_rain=1, zp_data=[0.6427499999999995, 0.5662500000000001, 0.6222500000000002, 0.753499999999999, 0.8425000000000002, 0.6962500000000009, 0.7439999999999998, 0.7882500000000006, 0.6510000000000007, 0.527000000000001, 0.7662499999999994, 0.8819999999999997, 1.0079999999999991, 0.6362499999999995, 0.6359999999999992, 0.9594999999999994, 0.6972499999999995, 0.5969999999999995, 0.9599999999999991, 1.0462499999999988, 1.052999999999999, 0.4077499999999983, 0.3472500000000007, 0.6857500000000005, 0.7054999999999989, 1.0835, 1.26375, 1.3100000000000005, 0.6360000000000001, 0.1695000000000011, 0.21799999999999997, 0.2575000000000003, 0.7297499999999992], zp_timestamp='2026-02-14T23:38:00')
2026-02-15T01:40:24.892 [DEBUG] [Thread-195747] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:40:24.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-15T01:40:24.976 [DEBUG] [Thread-195750] [transport.py] [_log()] starting thread (client mode): 0xa2d6a4a0
2026-02-15T01:40:24.977 [DEBUG] [Thread-195750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:40:24.991 [DEBUG] [Thread-195750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:40:24.991 [INFO] [Thread-195750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:40:24.999 [DEBUG] [Thread-195750] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:40:24.999 [DEBUG] [Thread-195750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:40:24.999 [DEBUG] [Thread-195750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:40:24.999 [DEBUG] [Thread-195750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:40:24.999 [DEBUG] [Thread-195750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:40:24.999 [DEBUG] [Thread-195750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:40:24.999 [DEBUG] [Thread-195750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:40:24.999 [DEBUG] [Thread-195750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:40:24.999 [DEBUG] [Thread-195750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:40:24.999 [DEBUG] [Thread-195750] [transport.py] [_log()] client lang: <none>
2026-02-15T01:40:24.999 [DEBUG] [Thread-195750] [transport.py] [_log()] server lang: <none>
2026-02-15T01:40:24.999 [DEBUG] [Thread-195750] [transport.py] [_log()] kex follows: False
2026-02-15T01:40:24.999 [DEBUG] [Thread-195750] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:40:24.999 [DEBUG] [Thread-195750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:40:24.999 [DEBUG] [Thread-195750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:40:25.000 [DEBUG] [Thread-195750] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:40:25.000 [DEBUG] [Thread-195750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:40:25.000 [DEBUG] [Thread-195750] [transport.py] [_log()] Compression: none
2026-02-15T01:40:25.000 [DEBUG] [Thread-195750] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:40:25.056 [DEBUG] [Thread-195750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:40:25.057 [DEBUG] [Thread-195750] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:40:25.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:40:25.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:40:25.059 [DEBUG] [Thread-195750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:40:25.113 [DEBUG] [Thread-195750] [transport.py] [_log()] userauth is OK
2026-02-15T01:40:25.113 [DEBUG] [Thread-195750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:40:25.113 [DEBUG] [Thread-195750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:40:25.113 [DEBUG] [Thread-195750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:40:25.113 [DEBUG] [Thread-195750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:40:25.131 [INFO] [Thread-195750] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:40:25.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-15T01:40:25.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:40:26.005 [DEBUG] [Thread-195750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:40:26.006 [DEBUG] [Thread-195750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:40:26.055 [DEBUG] [Thread-195750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:40:26.056 [DEBUG] [Thread-195750] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:40:26.065 [DEBUG] [Thread-195750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:40:26.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:40:26.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:40:26.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:40:26.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:40:26.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:40:26.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:40:26.102 [DEBUG] [Thread-195750] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:40:29.138 [DEBUG] [Thread-195752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:40:34.458 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:40:34.459 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:40:44.184 [DEBUG] [Thread-195753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:40:56.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:40:56.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:40:56.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:40:57.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 40, 22), 1.83, 88.07, 0.0, 48.54, 7.13, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:40:57.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:40:22
2026-02-15T01:40:58.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:40:58.510 [DEBUG] [Thread-195754] [transport.py] [_log()] starting thread (client mode): 0xa2d79330
2026-02-15T01:40:58.510 [DEBUG] [Thread-195754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:40:58.530 [DEBUG] [Thread-195754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:40:58.530 [INFO] [Thread-195754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:40:58.533 [DEBUG] [Thread-195754] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:40:58.533 [DEBUG] [Thread-195754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:40:58.533 [DEBUG] [Thread-195754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:40:58.533 [DEBUG] [Thread-195754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:40:58.533 [DEBUG] [Thread-195754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:40:58.533 [DEBUG] [Thread-195754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:40:58.533 [DEBUG] [Thread-195754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:40:58.533 [DEBUG] [Thread-195754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:40:58.533 [DEBUG] [Thread-195754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:40:58.533 [DEBUG] [Thread-195754] [transport.py] [_log()] client lang: <none>
2026-02-15T01:40:58.534 [DEBUG] [Thread-195754] [transport.py] [_log()] server lang: <none>
2026-02-15T01:40:58.534 [DEBUG] [Thread-195754] [transport.py] [_log()] kex follows: False
2026-02-15T01:40:58.534 [DEBUG] [Thread-195754] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:40:58.534 [DEBUG] [Thread-195754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:40:58.534 [DEBUG] [Thread-195754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:40:58.534 [DEBUG] [Thread-195754] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:40:58.534 [DEBUG] [Thread-195754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:40:58.534 [DEBUG] [Thread-195754] [transport.py] [_log()] Compression: none
2026-02-15T01:40:58.534 [DEBUG] [Thread-195754] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:40:58.552 [DEBUG] [Thread-195754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:40:58.553 [DEBUG] [Thread-195754] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:40:58.553 [DEBUG] [Thread-195754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:40:58.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:40:58.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:40:58.596 [DEBUG] [Thread-195754] [transport.py] [_log()] userauth is OK
2026-02-15T01:40:58.597 [DEBUG] [Thread-195754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:40:58.597 [DEBUG] [Thread-195754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:40:58.597 [DEBUG] [Thread-195754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:40:58.597 [DEBUG] [Thread-195754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:40:58.629 [INFO] [Thread-195754] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:40:58.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:40:59.224 [DEBUG] [Thread-195756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:40:59.276 [DEBUG] [Thread-195754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:40:59.277 [DEBUG] [Thread-195754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:40:59.277 [DEBUG] [Thread-195754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:40:59.317 [DEBUG] [Thread-195754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:40:59.318 [DEBUG] [Thread-195754] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:40:59.321 [DEBUG] [Thread-195754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:40:59.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:40:59.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:40:59.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:40:59.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:40:59.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:40:59.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:40:59.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:40:59.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:40:59.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:40:59.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.986219 -999.00   +7.00  36.23     89   +5.30 1 2 2 3 1     0    0 0.69 -38.94 zNESW 36.2 36.2 148.6 46.5 7.8 -12.8 7.5 -13.2 7.3 -13.0 7.7 -14.0
2026-02-15T01:40:59.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:40:59.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:40:59.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.986219
2026-02-15T01:40:59.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:40:59.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:40:59.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:40:59.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:40:59.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T01:40:59.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:40:22', tmtdew=1.83, humidity=88.07, cloud=0.0, wind=48.54, temperature=7.13, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:40:09.322', atlas_cloud=2, atlas_rain=1, zp_data=[0.6427499999999995, 0.5662500000000001, 0.6222500000000002, 0.753499999999999, 0.8425000000000002, 0.6962500000000009, 0.7439999999999998, 0.7882500000000006, 0.6510000000000007, 0.527000000000001, 0.7662499999999994, 0.8819999999999997, 1.0079999999999991, 0.6362499999999995, 0.6359999999999992, 0.9594999999999994, 0.6972499999999995, 0.5969999999999995, 0.9599999999999991, 1.0462499999999988, 1.052999999999999, 0.4077499999999983, 0.3472500000000007, 0.6857500000000005, 0.7054999999999989, 1.0835, 1.26375, 1.3100000000000005, 0.6360000000000001, 0.1695000000000011, 0.21799999999999997, 0.2575000000000003, 0.7297499999999992], zp_timestamp='2026-02-14T23:38:00')
2026-02-15T01:40:59.350 [DEBUG] [Thread-195754] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:40:59.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-15T01:40:59.446 [DEBUG] [Thread-195758] [transport.py] [_log()] starting thread (client mode): 0xa2d84d00
2026-02-15T01:40:59.446 [DEBUG] [Thread-195758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:40:59.460 [DEBUG] [Thread-195758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:40:59.460 [INFO] [Thread-195758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:40:59.468 [DEBUG] [Thread-195758] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:40:59.468 [DEBUG] [Thread-195758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:40:59.468 [DEBUG] [Thread-195758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:40:59.468 [DEBUG] [Thread-195758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:40:59.468 [DEBUG] [Thread-195758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:40:59.468 [DEBUG] [Thread-195758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:40:59.469 [DEBUG] [Thread-195758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:40:59.469 [DEBUG] [Thread-195758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:40:59.469 [DEBUG] [Thread-195758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:40:59.469 [DEBUG] [Thread-195758] [transport.py] [_log()] client lang: <none>
2026-02-15T01:40:59.469 [DEBUG] [Thread-195758] [transport.py] [_log()] server lang: <none>
2026-02-15T01:40:59.469 [DEBUG] [Thread-195758] [transport.py] [_log()] kex follows: False
2026-02-15T01:40:59.469 [DEBUG] [Thread-195758] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:40:59.469 [DEBUG] [Thread-195758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:40:59.469 [DEBUG] [Thread-195758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:40:59.469 [DEBUG] [Thread-195758] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:40:59.469 [DEBUG] [Thread-195758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:40:59.469 [DEBUG] [Thread-195758] [transport.py] [_log()] Compression: none
2026-02-15T01:40:59.469 [DEBUG] [Thread-195758] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:40:59.527 [DEBUG] [Thread-195758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:40:59.527 [DEBUG] [Thread-195758] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:40:59.528 [DEBUG] [Thread-195758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:40:59.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:40:59.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:40:59.586 [DEBUG] [Thread-195758] [transport.py] [_log()] userauth is OK
2026-02-15T01:40:59.586 [DEBUG] [Thread-195758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:40:59.586 [DEBUG] [Thread-195758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:40:59.587 [DEBUG] [Thread-195758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:40:59.587 [DEBUG] [Thread-195758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:40:59.604 [INFO] [Thread-195758] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:40:59.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-15T01:40:59.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:41:00.410 [DEBUG] [Thread-195758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:41:00.410 [DEBUG] [Thread-195758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:41:00.458 [DEBUG] [Thread-195758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:41:00.459 [DEBUG] [Thread-195758] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:41:00.468 [DEBUG] [Thread-195758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:41:00.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:41:00.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-15T01:41:00.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:41:00.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:41:00.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:41:00.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:41:00.502 [DEBUG] [Thread-195758] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:41:13.759 [DEBUG] [Thread-195760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:41:14.266 [DEBUG] [Thread-195761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:41:29.320 [DEBUG] [Thread-195762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:41:30.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:41:30.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:41:30.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-15T01:41:32.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 40, 57), 1.83, 88.05, 0.0, 49.12, 7.1, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:41:32.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:40:57
2026-02-15T01:41:32.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:41:32.820 [DEBUG] [Thread-195763] [transport.py] [_log()] starting thread (client mode): 0xa2d1ad70
2026-02-15T01:41:32.820 [DEBUG] [Thread-195763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:41:32.840 [DEBUG] [Thread-195763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:41:32.840 [INFO] [Thread-195763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:41:32.843 [DEBUG] [Thread-195763] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:41:32.843 [DEBUG] [Thread-195763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:41:32.843 [DEBUG] [Thread-195763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:41:32.843 [DEBUG] [Thread-195763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:41:32.843 [DEBUG] [Thread-195763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:41:32.843 [DEBUG] [Thread-195763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:41:32.843 [DEBUG] [Thread-195763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:41:32.843 [DEBUG] [Thread-195763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:41:32.843 [DEBUG] [Thread-195763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:41:32.843 [DEBUG] [Thread-195763] [transport.py] [_log()] client lang: <none>
2026-02-15T01:41:32.843 [DEBUG] [Thread-195763] [transport.py] [_log()] server lang: <none>
2026-02-15T01:41:32.843 [DEBUG] [Thread-195763] [transport.py] [_log()] kex follows: False
2026-02-15T01:41:32.843 [DEBUG] [Thread-195763] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:41:32.843 [DEBUG] [Thread-195763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:41:32.843 [DEBUG] [Thread-195763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:41:32.843 [DEBUG] [Thread-195763] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:41:32.843 [DEBUG] [Thread-195763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:41:32.843 [DEBUG] [Thread-195763] [transport.py] [_log()] Compression: none
2026-02-15T01:41:32.843 [DEBUG] [Thread-195763] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:41:32.859 [DEBUG] [Thread-195763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:41:32.860 [DEBUG] [Thread-195763] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:41:32.860 [DEBUG] [Thread-195763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:41:32.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:41:32.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:41:32.862 [DEBUG] [Thread-195763] [transport.py] [_log()] userauth is OK
2026-02-15T01:41:32.862 [DEBUG] [Thread-195763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:41:32.862 [DEBUG] [Thread-195763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:41:32.862 [DEBUG] [Thread-195763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:41:32.862 [DEBUG] [Thread-195763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:41:32.875 [INFO] [Thread-195763] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:41:32.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:41:33.526 [DEBUG] [Thread-195763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:41:33.527 [DEBUG] [Thread-195763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:41:33.527 [DEBUG] [Thread-195763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:41:33.567 [DEBUG] [Thread-195763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:41:33.568 [DEBUG] [Thread-195763] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:41:33.571 [DEBUG] [Thread-195763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:41:33.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:41:33.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:41:33.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:41:33.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:41:33.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:41:33.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:41:33.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:41:33.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:41:33.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:41:33.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.986566 -999.00   +6.90  33.98     89   +5.30 1 2 2 3 1     0    0 0.86 -33.52 Z.ESW 34.0 34.0 153.3 52.1 7.7 -23.3 7.5 -16.9 7.3 -16.7 7.7 -14.3
2026-02-15T01:41:33.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:41:33.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:41:33.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.986566
2026-02-15T01:41:33.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:41:33.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:41:33.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:41:33.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:41:33.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T01:41:33.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:40:57', tmtdew=1.83, humidity=88.05, cloud=0.0, wind=49.12, temperature=7.1, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:40:39.302', atlas_cloud=2, atlas_rain=1, zp_data=[0.6427499999999995, 0.5662500000000001, 0.6222500000000002, 0.753499999999999, 0.8425000000000002, 0.6962500000000009, 0.7439999999999998, 0.7882500000000006, 0.6510000000000007, 0.527000000000001, 0.7662499999999994, 0.8819999999999997, 1.0079999999999991, 0.6362499999999995, 0.6359999999999992, 0.9594999999999994, 0.6972499999999995, 0.5969999999999995, 0.9599999999999991, 1.0462499999999988, 1.052999999999999, 0.4077499999999983, 0.3472500000000007, 0.6857500000000005, 0.7054999999999989, 1.0835, 1.26375, 1.3100000000000005, 0.6360000000000001, 0.1695000000000011, 0.21799999999999997, 0.2575000000000003, 0.7297499999999992], zp_timestamp='2026-02-14T23:38:00')
2026-02-15T01:41:33.592 [DEBUG] [Thread-195763] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:41:33.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-15T01:41:33.688 [DEBUG] [Thread-195766] [transport.py] [_log()] starting thread (client mode): 0xa2d7bc10
2026-02-15T01:41:33.688 [DEBUG] [Thread-195766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:41:33.703 [DEBUG] [Thread-195766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:41:33.703 [INFO] [Thread-195766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:41:33.711 [DEBUG] [Thread-195766] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:41:33.711 [DEBUG] [Thread-195766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:41:33.711 [DEBUG] [Thread-195766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:41:33.711 [DEBUG] [Thread-195766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:41:33.711 [DEBUG] [Thread-195766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:41:33.711 [DEBUG] [Thread-195766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:41:33.711 [DEBUG] [Thread-195766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:41:33.711 [DEBUG] [Thread-195766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:41:33.711 [DEBUG] [Thread-195766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:41:33.711 [DEBUG] [Thread-195766] [transport.py] [_log()] client lang: <none>
2026-02-15T01:41:33.712 [DEBUG] [Thread-195766] [transport.py] [_log()] server lang: <none>
2026-02-15T01:41:33.712 [DEBUG] [Thread-195766] [transport.py] [_log()] kex follows: False
2026-02-15T01:41:33.712 [DEBUG] [Thread-195766] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:41:33.712 [DEBUG] [Thread-195766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:41:33.712 [DEBUG] [Thread-195766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:41:33.712 [DEBUG] [Thread-195766] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:41:33.712 [DEBUG] [Thread-195766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:41:33.712 [DEBUG] [Thread-195766] [transport.py] [_log()] Compression: none
2026-02-15T01:41:33.712 [DEBUG] [Thread-195766] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:41:33.770 [DEBUG] [Thread-195766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:41:33.771 [DEBUG] [Thread-195766] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:41:33.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:41:33.772 [DEBUG] [Thread-195766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:41:33.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:41:33.826 [DEBUG] [Thread-195766] [transport.py] [_log()] userauth is OK
2026-02-15T01:41:33.826 [DEBUG] [Thread-195766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:41:33.827 [DEBUG] [Thread-195766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:41:33.827 [DEBUG] [Thread-195766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:41:33.827 [DEBUG] [Thread-195766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:41:33.845 [INFO] [Thread-195766] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:41:33.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-15T01:41:33.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:41:34.628 [DEBUG] [Thread-195766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:41:34.628 [DEBUG] [Thread-195766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:41:34.669 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:41:34.670 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:41:34.676 [DEBUG] [Thread-195766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:41:34.677 [DEBUG] [Thread-195766] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:41:34.686 [DEBUG] [Thread-195766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:41:34.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:41:34.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-15T01:41:34.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-15T01:41:34.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:41:34.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:41:34.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:41:34.736 [DEBUG] [Thread-195766] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:41:44.352 [DEBUG] [Thread-195768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:41:59.404 [DEBUG] [Thread-195769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:42:04.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:42:04.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:42:04.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-15T01:42:06.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 41, 32), 1.83, 88.08, 0.0, 51.03, 7.12, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:42:06.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:41:32
2026-02-15T01:42:07.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:42:07.305 [DEBUG] [Thread-195770] [transport.py] [_log()] starting thread (client mode): 0xa2d970a0
2026-02-15T01:42:07.305 [DEBUG] [Thread-195770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:42:07.325 [DEBUG] [Thread-195770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:42:07.325 [INFO] [Thread-195770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:42:07.328 [DEBUG] [Thread-195770] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:42:07.328 [DEBUG] [Thread-195770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:42:07.328 [DEBUG] [Thread-195770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:42:07.328 [DEBUG] [Thread-195770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:42:07.328 [DEBUG] [Thread-195770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:42:07.328 [DEBUG] [Thread-195770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:42:07.328 [DEBUG] [Thread-195770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:42:07.328 [DEBUG] [Thread-195770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:42:07.328 [DEBUG] [Thread-195770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:42:07.328 [DEBUG] [Thread-195770] [transport.py] [_log()] client lang: <none>
2026-02-15T01:42:07.328 [DEBUG] [Thread-195770] [transport.py] [_log()] server lang: <none>
2026-02-15T01:42:07.329 [DEBUG] [Thread-195770] [transport.py] [_log()] kex follows: False
2026-02-15T01:42:07.329 [DEBUG] [Thread-195770] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:42:07.329 [DEBUG] [Thread-195770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:42:07.329 [DEBUG] [Thread-195770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:42:07.329 [DEBUG] [Thread-195770] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:42:07.329 [DEBUG] [Thread-195770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:42:07.329 [DEBUG] [Thread-195770] [transport.py] [_log()] Compression: none
2026-02-15T01:42:07.329 [DEBUG] [Thread-195770] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:42:07.342 [DEBUG] [Thread-195770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:42:07.343 [DEBUG] [Thread-195770] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:42:07.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:42:07.344 [DEBUG] [Thread-195770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:42:07.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:42:07.346 [DEBUG] [Thread-195770] [transport.py] [_log()] userauth is OK
2026-02-15T01:42:07.346 [DEBUG] [Thread-195770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:42:07.346 [DEBUG] [Thread-195770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:42:07.346 [DEBUG] [Thread-195770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:42:07.347 [DEBUG] [Thread-195770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:42:07.359 [INFO] [Thread-195770] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:42:07.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:42:08.019 [DEBUG] [Thread-195770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:42:08.019 [DEBUG] [Thread-195770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:42:08.020 [DEBUG] [Thread-195770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:42:08.060 [DEBUG] [Thread-195770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:42:08.060 [DEBUG] [Thread-195770] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:42:08.063 [DEBUG] [Thread-195770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:42:08.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:42:08.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:42:08.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:42:08.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:42:08.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:42:08.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:42:08.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:42:08.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:42:08.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:42:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.986914 -999.00   +6.90  36.55     89   +5.30 1 2 2 3 1     0    0 0.89 -32.04 Z.ESW 36.5 36.5 139.8 44.8 7.7 -23.1 7.5 -22.6 7.3 -21.7 7.7 -23.1
2026-02-15T01:42:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:42:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:42:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.986914
2026-02-15T01:42:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:42:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:42:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:42:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:42:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T01:42:08.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:41:32', tmtdew=1.83, humidity=88.08, cloud=0.0, wind=51.03, temperature=7.12, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:41:09.370', atlas_cloud=2, atlas_rain=1, zp_data=[0.6427499999999995, 0.5662500000000001, 0.6222500000000002, 0.753499999999999, 0.8425000000000002, 0.6962500000000009, 0.7439999999999998, 0.7882500000000006, 0.6510000000000007, 0.527000000000001, 0.7662499999999994, 0.8819999999999997, 1.0079999999999991, 0.6362499999999995, 0.6359999999999992, 0.9594999999999994, 0.6972499999999995, 0.5969999999999995, 0.9599999999999991, 1.0462499999999988, 1.052999999999999, 0.4077499999999983, 0.3472500000000007, 0.6857500000000005, 0.7054999999999989, 1.0835, 1.26375, 1.3100000000000005, 0.6360000000000001, 0.1695000000000011, 0.21799999999999997, 0.2575000000000003, 0.7297499999999992], zp_timestamp='2026-02-14T23:38:00')
2026-02-15T01:42:08.094 [DEBUG] [Thread-195770] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:42:08.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-15T01:42:08.191 [DEBUG] [Thread-195773] [transport.py] [_log()] starting thread (client mode): 0xa2d7b8b0
2026-02-15T01:42:08.192 [DEBUG] [Thread-195773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:42:08.206 [DEBUG] [Thread-195773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:42:08.206 [INFO] [Thread-195773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:42:08.214 [DEBUG] [Thread-195773] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:42:08.214 [DEBUG] [Thread-195773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:42:08.214 [DEBUG] [Thread-195773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:42:08.214 [DEBUG] [Thread-195773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:42:08.215 [DEBUG] [Thread-195773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:42:08.215 [DEBUG] [Thread-195773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:42:08.215 [DEBUG] [Thread-195773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:42:08.215 [DEBUG] [Thread-195773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:42:08.215 [DEBUG] [Thread-195773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:42:08.215 [DEBUG] [Thread-195773] [transport.py] [_log()] client lang: <none>
2026-02-15T01:42:08.215 [DEBUG] [Thread-195773] [transport.py] [_log()] server lang: <none>
2026-02-15T01:42:08.215 [DEBUG] [Thread-195773] [transport.py] [_log()] kex follows: False
2026-02-15T01:42:08.215 [DEBUG] [Thread-195773] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:42:08.215 [DEBUG] [Thread-195773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:42:08.215 [DEBUG] [Thread-195773] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:42:08.215 [DEBUG] [Thread-195773] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:42:08.215 [DEBUG] [Thread-195773] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:42:08.215 [DEBUG] [Thread-195773] [transport.py] [_log()] Compression: none
2026-02-15T01:42:08.215 [DEBUG] [Thread-195773] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:42:08.274 [DEBUG] [Thread-195773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:42:08.275 [DEBUG] [Thread-195773] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:42:08.275 [DEBUG] [Thread-195773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:42:08.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:42:08.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:42:08.330 [DEBUG] [Thread-195773] [transport.py] [_log()] userauth is OK
2026-02-15T01:42:08.331 [DEBUG] [Thread-195773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:42:08.331 [DEBUG] [Thread-195773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:42:08.331 [DEBUG] [Thread-195773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:42:08.331 [DEBUG] [Thread-195773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:42:08.349 [INFO] [Thread-195773] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:42:08.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-15T01:42:08.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:42:09.152 [DEBUG] [Thread-195773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:42:09.152 [DEBUG] [Thread-195773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:42:09.200 [DEBUG] [Thread-195773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:42:09.201 [DEBUG] [Thread-195773] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:42:09.210 [DEBUG] [Thread-195773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:42:09.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:42:09.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:42:09.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-15T01:42:09.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:42:09.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:42:09.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:42:09.247 [DEBUG] [Thread-195773] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:42:13.826 [DEBUG] [Thread-195775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:42:14.445 [DEBUG] [Thread-195776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:42:29.498 [DEBUG] [Thread-195777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:42:34.871 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:42:34.872 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:42:39.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:42:39.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:42:39.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-15T01:42:41.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 42, 7), 1.83, 88.08, 0.0, 51.19, 7.1, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:42:41.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:42:07
2026-02-15T01:42:41.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:42:41.609 [DEBUG] [Thread-195778] [transport.py] [_log()] starting thread (client mode): 0xa5743eb0
2026-02-15T01:42:41.609 [DEBUG] [Thread-195778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:42:41.630 [DEBUG] [Thread-195778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:42:41.630 [INFO] [Thread-195778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:42:41.633 [DEBUG] [Thread-195778] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:42:41.633 [DEBUG] [Thread-195778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:42:41.633 [DEBUG] [Thread-195778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:42:41.633 [DEBUG] [Thread-195778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:42:41.633 [DEBUG] [Thread-195778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:42:41.633 [DEBUG] [Thread-195778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:42:41.633 [DEBUG] [Thread-195778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:42:41.633 [DEBUG] [Thread-195778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:42:41.633 [DEBUG] [Thread-195778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:42:41.633 [DEBUG] [Thread-195778] [transport.py] [_log()] client lang: <none>
2026-02-15T01:42:41.633 [DEBUG] [Thread-195778] [transport.py] [_log()] server lang: <none>
2026-02-15T01:42:41.633 [DEBUG] [Thread-195778] [transport.py] [_log()] kex follows: False
2026-02-15T01:42:41.633 [DEBUG] [Thread-195778] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:42:41.633 [DEBUG] [Thread-195778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:42:41.633 [DEBUG] [Thread-195778] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:42:41.633 [DEBUG] [Thread-195778] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:42:41.633 [DEBUG] [Thread-195778] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:42:41.633 [DEBUG] [Thread-195778] [transport.py] [_log()] Compression: none
2026-02-15T01:42:41.633 [DEBUG] [Thread-195778] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:42:41.648 [DEBUG] [Thread-195778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:42:41.649 [DEBUG] [Thread-195778] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:42:41.649 [DEBUG] [Thread-195778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:42:41.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:42:41.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:42:41.649 [DEBUG] [Thread-195778] [transport.py] [_log()] userauth is OK
2026-02-15T01:42:41.649 [DEBUG] [Thread-195778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:42:41.649 [DEBUG] [Thread-195778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:42:41.649 [DEBUG] [Thread-195778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:42:41.649 [DEBUG] [Thread-195778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:42:41.659 [INFO] [Thread-195778] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:42:41.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:42:42.252 [DEBUG] [Thread-195778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:42:42.252 [DEBUG] [Thread-195778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:42:42.252 [DEBUG] [Thread-195778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:42:42.292 [DEBUG] [Thread-195778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:42:42.293 [DEBUG] [Thread-195778] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:42:42.296 [DEBUG] [Thread-195778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:42:42.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:42:42.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:42:42.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:42:42.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:42:42.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:42:42.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:42:42.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:42:42.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:42:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:42:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.987261 -999.00   +6.90  45.45     89   +5.30 1 2 2 3 1     0    0 0.85 -32.85 znESw 45.5 45.5 144.6 54.6 7.7 -23.8 7.5 -23.1 7.2 -22.0 7.7 -23.2
2026-02-15T01:42:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:42:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:42:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.987261
2026-02-15T01:42:42.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:42:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:42:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:42:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:42:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T01:42:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:42:07', tmtdew=1.83, humidity=88.08, cloud=0.0, wind=51.19, temperature=7.1, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:41:39.350', atlas_cloud=2, atlas_rain=1, zp_data=[2.03775, 2.17525, 1.07125, 1.7274999999999991, 1.8104999999999993, 1.664250000000001, 1.7349999999999994, 1.9262500000000005, 1.8599999999999994, 1.8950000000000005, 1.2312499999999993, 1.5945, 1.9774999999999991, 1.4332499999999992, 1.6609999999999996, 2.538499999999999, 1.9342499999999996, 0.9554999999999998, 0.5510000000000002, 0.7432499999999989, 1.7269999999999985, 0.941749999999999, 1.0602500000000008, 2.4967500000000005, 2.344999999999999, 0.40000000000000036, 0.3172499999999996, 0.359, 0.900500000000001, 0.40800000000000125, 0.527000000000001, 1.2500000000000009, 1.8172499999999996], zp_timestamp='2026-02-14T23:41:00')
2026-02-15T01:42:42.323 [DEBUG] [Thread-195778] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:42:42.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-15T01:42:42.433 [DEBUG] [Thread-195781] [transport.py] [_log()] starting thread (client mode): 0xa2d84130
2026-02-15T01:42:42.433 [DEBUG] [Thread-195781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:42:42.448 [DEBUG] [Thread-195781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:42:42.448 [INFO] [Thread-195781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:42:42.456 [DEBUG] [Thread-195781] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:42:42.456 [DEBUG] [Thread-195781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:42:42.456 [DEBUG] [Thread-195781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:42:42.456 [DEBUG] [Thread-195781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:42:42.456 [DEBUG] [Thread-195781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:42:42.456 [DEBUG] [Thread-195781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:42:42.456 [DEBUG] [Thread-195781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:42:42.456 [DEBUG] [Thread-195781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:42:42.456 [DEBUG] [Thread-195781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:42:42.456 [DEBUG] [Thread-195781] [transport.py] [_log()] client lang: <none>
2026-02-15T01:42:42.456 [DEBUG] [Thread-195781] [transport.py] [_log()] server lang: <none>
2026-02-15T01:42:42.456 [DEBUG] [Thread-195781] [transport.py] [_log()] kex follows: False
2026-02-15T01:42:42.456 [DEBUG] [Thread-195781] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:42:42.456 [DEBUG] [Thread-195781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:42:42.456 [DEBUG] [Thread-195781] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:42:42.456 [DEBUG] [Thread-195781] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:42:42.456 [DEBUG] [Thread-195781] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:42:42.456 [DEBUG] [Thread-195781] [transport.py] [_log()] Compression: none
2026-02-15T01:42:42.456 [DEBUG] [Thread-195781] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:42:42.513 [DEBUG] [Thread-195781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:42:42.514 [DEBUG] [Thread-195781] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:42:42.514 [DEBUG] [Thread-195781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:42:42.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:42:42.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:42:42.570 [DEBUG] [Thread-195781] [transport.py] [_log()] userauth is OK
2026-02-15T01:42:42.571 [DEBUG] [Thread-195781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:42:42.571 [DEBUG] [Thread-195781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:42:42.571 [DEBUG] [Thread-195781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:42:42.571 [DEBUG] [Thread-195781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:42:42.590 [INFO] [Thread-195781] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:42:42.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-15T01:42:42.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:42:43.379 [DEBUG] [Thread-195781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:42:43.379 [DEBUG] [Thread-195781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:42:43.427 [DEBUG] [Thread-195781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:42:43.427 [DEBUG] [Thread-195781] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:42:43.436 [DEBUG] [Thread-195781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:42:43.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:42:43.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-15T01:42:43.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-15T01:42:43.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:42:43.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:42:43.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:42:43.471 [DEBUG] [Thread-195781] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:42:44.534 [DEBUG] [Thread-195783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:42:59.597 [DEBUG] [Thread-195784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:43:13.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:43:13.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:43:13.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-15T01:43:13.897 [DEBUG] [Thread-195785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:43:14.634 [DEBUG] [Thread-195786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:43:15.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 42, 43), 1.77, 88.62, 0.0, 50.44, 7.07, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:43:15.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:42:43
2026-02-15T01:43:15.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:43:15.803 [DEBUG] [Thread-195787] [transport.py] [_log()] starting thread (client mode): 0xa2d19c90
2026-02-15T01:43:15.803 [DEBUG] [Thread-195787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:43:15.823 [DEBUG] [Thread-195787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:43:15.823 [INFO] [Thread-195787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:43:15.824 [DEBUG] [Thread-195787] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:43:15.824 [DEBUG] [Thread-195787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:43:15.824 [DEBUG] [Thread-195787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:43:15.824 [DEBUG] [Thread-195787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:43:15.824 [DEBUG] [Thread-195787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:43:15.824 [DEBUG] [Thread-195787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:43:15.824 [DEBUG] [Thread-195787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:43:15.824 [DEBUG] [Thread-195787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:43:15.824 [DEBUG] [Thread-195787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:43:15.825 [DEBUG] [Thread-195787] [transport.py] [_log()] client lang: <none>
2026-02-15T01:43:15.825 [DEBUG] [Thread-195787] [transport.py] [_log()] server lang: <none>
2026-02-15T01:43:15.825 [DEBUG] [Thread-195787] [transport.py] [_log()] kex follows: False
2026-02-15T01:43:15.825 [DEBUG] [Thread-195787] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:43:15.825 [DEBUG] [Thread-195787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:43:15.825 [DEBUG] [Thread-195787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:43:15.825 [DEBUG] [Thread-195787] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:43:15.825 [DEBUG] [Thread-195787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:43:15.825 [DEBUG] [Thread-195787] [transport.py] [_log()] Compression: none
2026-02-15T01:43:15.825 [DEBUG] [Thread-195787] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:43:15.833 [DEBUG] [Thread-195787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:43:15.834 [DEBUG] [Thread-195787] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:43:15.834 [DEBUG] [Thread-195787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:43:15.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:43:15.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:43:15.836 [DEBUG] [Thread-195787] [transport.py] [_log()] userauth is OK
2026-02-15T01:43:15.836 [DEBUG] [Thread-195787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:43:15.836 [DEBUG] [Thread-195787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:43:15.836 [DEBUG] [Thread-195787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:43:15.836 [DEBUG] [Thread-195787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:43:15.871 [INFO] [Thread-195787] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:43:15.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:43:16.674 [DEBUG] [Thread-195787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:43:16.674 [DEBUG] [Thread-195787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:43:16.674 [DEBUG] [Thread-195787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:43:16.714 [DEBUG] [Thread-195787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:43:16.715 [DEBUG] [Thread-195787] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:43:16.718 [DEBUG] [Thread-195787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:43:16.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:43:16.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:43:16.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:43:16.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:43:16.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:43:16.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:43:16.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:43:16.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:43:16.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:43:16.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.987955 -999.00   +6.90  33.85     89   +5.30 1 1 2 3 1     0    0 0.93 -29.32 ZNESW 33.9 33.9 147.6 45.1 7.7 -20.0 7.5 -15.7 7.2 -14.9 7.6 -16.3
2026-02-15T01:43:16.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:43:16.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:43:16.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.987955
2026-02-15T01:43:16.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:43:16.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:43:16.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:43:16.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:43:16.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:43:16.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:42:43', tmtdew=1.77, humidity=88.62, cloud=0.0, wind=50.44, temperature=7.07, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:42:39.312', atlas_cloud=1, atlas_rain=1, zp_data=[2.03775, 2.17525, 1.07125, 1.7274999999999991, 1.8104999999999993, 1.664250000000001, 1.7349999999999994, 1.9262500000000005, 1.8599999999999994, 1.8950000000000005, 1.2312499999999993, 1.5945, 1.9774999999999991, 1.4332499999999992, 1.6609999999999996, 2.538499999999999, 1.9342499999999996, 0.9554999999999998, 0.5510000000000002, 0.7432499999999989, 1.7269999999999985, 0.941749999999999, 1.0602500000000008, 2.4967500000000005, 2.344999999999999, 0.40000000000000036, 0.3172499999999996, 0.359, 0.900500000000001, 0.40800000000000125, 0.527000000000001, 1.2500000000000009, 1.8172499999999996], zp_timestamp='2026-02-14T23:41:00')
2026-02-15T01:43:16.745 [DEBUG] [Thread-195787] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:43:16.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-15T01:43:16.843 [DEBUG] [Thread-195790] [transport.py] [_log()] starting thread (client mode): 0xa2d187c0
2026-02-15T01:43:16.844 [DEBUG] [Thread-195790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:43:16.858 [DEBUG] [Thread-195790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:43:16.858 [INFO] [Thread-195790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:43:16.865 [DEBUG] [Thread-195790] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:43:16.866 [DEBUG] [Thread-195790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:43:16.866 [DEBUG] [Thread-195790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:43:16.866 [DEBUG] [Thread-195790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:43:16.866 [DEBUG] [Thread-195790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:43:16.866 [DEBUG] [Thread-195790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:43:16.866 [DEBUG] [Thread-195790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:43:16.866 [DEBUG] [Thread-195790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:43:16.866 [DEBUG] [Thread-195790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:43:16.867 [DEBUG] [Thread-195790] [transport.py] [_log()] client lang: <none>
2026-02-15T01:43:16.867 [DEBUG] [Thread-195790] [transport.py] [_log()] server lang: <none>
2026-02-15T01:43:16.867 [DEBUG] [Thread-195790] [transport.py] [_log()] kex follows: False
2026-02-15T01:43:16.867 [DEBUG] [Thread-195790] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:43:16.867 [DEBUG] [Thread-195790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:43:16.867 [DEBUG] [Thread-195790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:43:16.867 [DEBUG] [Thread-195790] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:43:16.868 [DEBUG] [Thread-195790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:43:16.868 [DEBUG] [Thread-195790] [transport.py] [_log()] Compression: none
2026-02-15T01:43:16.868 [DEBUG] [Thread-195790] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:43:16.923 [DEBUG] [Thread-195790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:43:16.924 [DEBUG] [Thread-195790] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:43:16.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:43:16.925 [DEBUG] [Thread-195790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:43:16.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:43:16.982 [DEBUG] [Thread-195790] [transport.py] [_log()] userauth is OK
2026-02-15T01:43:16.983 [DEBUG] [Thread-195790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:43:16.983 [DEBUG] [Thread-195790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:43:16.983 [DEBUG] [Thread-195790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:43:16.983 [DEBUG] [Thread-195790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:43:17.001 [INFO] [Thread-195790] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:43:17.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T01:43:17.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:43:17.768 [DEBUG] [Thread-195790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:43:17.768 [DEBUG] [Thread-195790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:43:17.816 [DEBUG] [Thread-195790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:43:17.817 [DEBUG] [Thread-195790] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:43:17.826 [DEBUG] [Thread-195790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:43:17.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:43:17.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:43:17.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-15T01:43:17.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:43:17.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:43:17.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:43:17.864 [DEBUG] [Thread-195790] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:43:29.674 [DEBUG] [Thread-195792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:43:35.073 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:43:35.074 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:43:44.728 [DEBUG] [Thread-195793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:43:47.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:43:47.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:43:47.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-15T01:43:49.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 43, 18), 1.77, 88.63, 0.0, 49.21, 7.0, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:43:49.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:43:18
2026-02-15T01:43:50.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:43:50.416 [DEBUG] [Thread-195794] [transport.py] [_log()] starting thread (client mode): 0xa2d1b280
2026-02-15T01:43:50.416 [DEBUG] [Thread-195794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:43:50.436 [DEBUG] [Thread-195794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:43:50.436 [INFO] [Thread-195794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:43:50.439 [DEBUG] [Thread-195794] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:43:50.439 [DEBUG] [Thread-195794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:43:50.439 [DEBUG] [Thread-195794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:43:50.439 [DEBUG] [Thread-195794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:43:50.439 [DEBUG] [Thread-195794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:43:50.439 [DEBUG] [Thread-195794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:43:50.439 [DEBUG] [Thread-195794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:43:50.439 [DEBUG] [Thread-195794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:43:50.439 [DEBUG] [Thread-195794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:43:50.439 [DEBUG] [Thread-195794] [transport.py] [_log()] client lang: <none>
2026-02-15T01:43:50.439 [DEBUG] [Thread-195794] [transport.py] [_log()] server lang: <none>
2026-02-15T01:43:50.439 [DEBUG] [Thread-195794] [transport.py] [_log()] kex follows: False
2026-02-15T01:43:50.439 [DEBUG] [Thread-195794] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:43:50.439 [DEBUG] [Thread-195794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:43:50.439 [DEBUG] [Thread-195794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:43:50.439 [DEBUG] [Thread-195794] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:43:50.440 [DEBUG] [Thread-195794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:43:50.440 [DEBUG] [Thread-195794] [transport.py] [_log()] Compression: none
2026-02-15T01:43:50.440 [DEBUG] [Thread-195794] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:43:50.457 [DEBUG] [Thread-195794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:43:50.457 [DEBUG] [Thread-195794] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:43:50.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:43:50.458 [DEBUG] [Thread-195794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:43:50.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:43:50.460 [DEBUG] [Thread-195794] [transport.py] [_log()] userauth is OK
2026-02-15T01:43:50.460 [DEBUG] [Thread-195794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:43:50.460 [DEBUG] [Thread-195794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:43:50.460 [DEBUG] [Thread-195794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:43:50.460 [DEBUG] [Thread-195794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:43:50.495 [INFO] [Thread-195794] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:43:50.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:43:51.141 [DEBUG] [Thread-195794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:43:51.141 [DEBUG] [Thread-195794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:43:51.141 [DEBUG] [Thread-195794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:43:51.182 [DEBUG] [Thread-195794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:43:51.182 [DEBUG] [Thread-195794] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:43:51.185 [DEBUG] [Thread-195794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:43:51.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:43:51.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:43:51.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:43:51.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:43:51.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:43:51.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:43:51.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:43:51.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:43:51.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:43:51.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.988303 -999.00   +6.90  33.54     89   +5.30 1 1 2 3 1     0    0 0.96 -27.64 ZNESW 33.5 33.5 150.0 53.6 7.7 -17.2 7.5 -17.4 7.3 -17.1 7.6 -19.0
2026-02-15T01:43:51.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:43:51.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:43:51.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.988303
2026-02-15T01:43:51.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:43:51.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:43:51.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:43:51.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:43:51.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:43:51.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:43:18', tmtdew=1.77, humidity=88.63, cloud=0.0, wind=49.21, temperature=7.0, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:43:09.379', atlas_cloud=1, atlas_rain=1, zp_data=[2.03775, 2.17525, 1.07125, 1.7274999999999991, 1.8104999999999993, 1.664250000000001, 1.7349999999999994, 1.9262500000000005, 1.8599999999999994, 1.8950000000000005, 1.2312499999999993, 1.5945, 1.9774999999999991, 1.4332499999999992, 1.6609999999999996, 2.538499999999999, 1.9342499999999996, 0.9554999999999998, 0.5510000000000002, 0.7432499999999989, 1.7269999999999985, 0.941749999999999, 1.0602500000000008, 2.4967500000000005, 2.344999999999999, 0.40000000000000036, 0.3172499999999996, 0.359, 0.900500000000001, 0.40800000000000125, 0.527000000000001, 1.2500000000000009, 1.8172499999999996], zp_timestamp='2026-02-14T23:41:00')
2026-02-15T01:43:51.208 [DEBUG] [Thread-195794] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:43:51.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-15T01:43:51.305 [DEBUG] [Thread-195797] [transport.py] [_log()] starting thread (client mode): 0xa2d193f0
2026-02-15T01:43:51.305 [DEBUG] [Thread-195797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:43:51.320 [DEBUG] [Thread-195797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:43:51.321 [INFO] [Thread-195797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:43:51.328 [DEBUG] [Thread-195797] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:43:51.328 [DEBUG] [Thread-195797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:43:51.328 [DEBUG] [Thread-195797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:43:51.328 [DEBUG] [Thread-195797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:43:51.328 [DEBUG] [Thread-195797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:43:51.328 [DEBUG] [Thread-195797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:43:51.328 [DEBUG] [Thread-195797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:43:51.328 [DEBUG] [Thread-195797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:43:51.328 [DEBUG] [Thread-195797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:43:51.328 [DEBUG] [Thread-195797] [transport.py] [_log()] client lang: <none>
2026-02-15T01:43:51.328 [DEBUG] [Thread-195797] [transport.py] [_log()] server lang: <none>
2026-02-15T01:43:51.329 [DEBUG] [Thread-195797] [transport.py] [_log()] kex follows: False
2026-02-15T01:43:51.329 [DEBUG] [Thread-195797] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:43:51.329 [DEBUG] [Thread-195797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:43:51.329 [DEBUG] [Thread-195797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:43:51.329 [DEBUG] [Thread-195797] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:43:51.329 [DEBUG] [Thread-195797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:43:51.329 [DEBUG] [Thread-195797] [transport.py] [_log()] Compression: none
2026-02-15T01:43:51.329 [DEBUG] [Thread-195797] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:43:51.388 [DEBUG] [Thread-195797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:43:51.389 [DEBUG] [Thread-195797] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:43:51.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:43:51.390 [DEBUG] [Thread-195797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:43:51.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:43:51.453 [DEBUG] [Thread-195797] [transport.py] [_log()] userauth is OK
2026-02-15T01:43:51.453 [DEBUG] [Thread-195797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:43:51.453 [DEBUG] [Thread-195797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:43:51.454 [DEBUG] [Thread-195797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:43:51.454 [DEBUG] [Thread-195797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:43:51.474 [INFO] [Thread-195797] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:43:51.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-15T01:43:51.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:43:52.280 [DEBUG] [Thread-195797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:43:52.280 [DEBUG] [Thread-195797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:43:52.328 [DEBUG] [Thread-195797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:43:52.328 [DEBUG] [Thread-195797] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:43:52.337 [DEBUG] [Thread-195797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:43:52.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:43:52.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')
2026-02-15T01:43:52.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-15T01:43:52.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:43:52.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:43:52.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:43:52.373 [DEBUG] [Thread-195797] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:43:59.763 [DEBUG] [Thread-195799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:44:13.955 [DEBUG] [Thread-195800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:44:14.818 [DEBUG] [Thread-195801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:44:22.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:44:22.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:44:22.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:44:24.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 43, 53), 1.7, 88.71, 0.0, 48.29, 7.05, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:44:24.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:43:53
2026-02-15T01:44:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:44:24.954 [DEBUG] [Thread-195802] [transport.py] [_log()] starting thread (client mode): 0xa2d10790
2026-02-15T01:44:24.955 [DEBUG] [Thread-195802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:44:24.975 [DEBUG] [Thread-195802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:44:24.975 [INFO] [Thread-195802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:44:24.978 [DEBUG] [Thread-195802] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:44:24.978 [DEBUG] [Thread-195802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:44:24.978 [DEBUG] [Thread-195802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:44:24.978 [DEBUG] [Thread-195802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:44:24.978 [DEBUG] [Thread-195802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:44:24.978 [DEBUG] [Thread-195802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:44:24.978 [DEBUG] [Thread-195802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:44:24.978 [DEBUG] [Thread-195802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:44:24.979 [DEBUG] [Thread-195802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:44:24.979 [DEBUG] [Thread-195802] [transport.py] [_log()] client lang: <none>
2026-02-15T01:44:24.979 [DEBUG] [Thread-195802] [transport.py] [_log()] server lang: <none>
2026-02-15T01:44:24.979 [DEBUG] [Thread-195802] [transport.py] [_log()] kex follows: False
2026-02-15T01:44:24.979 [DEBUG] [Thread-195802] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:44:24.979 [DEBUG] [Thread-195802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:44:24.979 [DEBUG] [Thread-195802] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:44:24.979 [DEBUG] [Thread-195802] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:44:24.979 [DEBUG] [Thread-195802] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:44:24.979 [DEBUG] [Thread-195802] [transport.py] [_log()] Compression: none
2026-02-15T01:44:24.979 [DEBUG] [Thread-195802] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:44:24.997 [DEBUG] [Thread-195802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:44:24.998 [DEBUG] [Thread-195802] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:44:24.998 [DEBUG] [Thread-195802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:44:24.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:44:24.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:44:25.040 [DEBUG] [Thread-195802] [transport.py] [_log()] userauth is OK
2026-02-15T01:44:25.040 [DEBUG] [Thread-195802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:44:25.040 [DEBUG] [Thread-195802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:44:25.040 [DEBUG] [Thread-195802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:44:25.040 [DEBUG] [Thread-195802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:44:25.072 [INFO] [Thread-195802] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:44:25.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:44:25.707 [DEBUG] [Thread-195802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:44:25.708 [DEBUG] [Thread-195802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:44:25.708 [DEBUG] [Thread-195802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:44:25.749 [DEBUG] [Thread-195802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:44:25.749 [DEBUG] [Thread-195802] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:44:25.752 [DEBUG] [Thread-195802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:44:25.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:44:25.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:44:25.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:44:25.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:44:25.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:44:25.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:44:25.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:44:25.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:44:25.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:44:25.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.988650 -999.00   +6.90  38.20     89   +5.30 1 1 2 3 1     0    0 1.00 -26.78 ZNESW 38.2 38.2 150.2 46.1 7.6 -18.3 7.5 -19.0 7.2 -17.7 7.6 -18.6
2026-02-15T01:44:25.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:44:25.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:44:25.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.988650
2026-02-15T01:44:25.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:44:25.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:44:25.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:44:25.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:44:25.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:44:25.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:43:53', tmtdew=1.7, humidity=88.71, cloud=0.0, wind=48.29, temperature=7.05, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:43:39.360', atlas_cloud=1, atlas_rain=1, zp_data=[2.03775, 2.17525, 1.07125, 1.7274999999999991, 1.8104999999999993, 1.664250000000001, 1.7349999999999994, 1.9262500000000005, 1.8599999999999994, 1.8950000000000005, 1.2312499999999993, 1.5945, 1.9774999999999991, 1.4332499999999992, 1.6609999999999996, 2.538499999999999, 1.9342499999999996, 0.9554999999999998, 0.5510000000000002, 0.7432499999999989, 1.7269999999999985, 0.941749999999999, 1.0602500000000008, 2.4967500000000005, 2.344999999999999, 0.40000000000000036, 0.3172499999999996, 0.359, 0.900500000000001, 0.40800000000000125, 0.527000000000001, 1.2500000000000009, 1.8172499999999996], zp_timestamp='2026-02-14T23:41:00')
2026-02-15T01:44:25.781 [DEBUG] [Thread-195802] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:44:25.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-15T01:44:25.875 [DEBUG] [Thread-195805] [transport.py] [_log()] starting thread (client mode): 0xa2d94f40
2026-02-15T01:44:25.876 [DEBUG] [Thread-195805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:44:25.890 [DEBUG] [Thread-195805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:44:25.890 [INFO] [Thread-195805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:44:25.898 [DEBUG] [Thread-195805] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:44:25.898 [DEBUG] [Thread-195805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:44:25.898 [DEBUG] [Thread-195805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:44:25.898 [DEBUG] [Thread-195805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:44:25.898 [DEBUG] [Thread-195805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:44:25.898 [DEBUG] [Thread-195805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:44:25.898 [DEBUG] [Thread-195805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:44:25.899 [DEBUG] [Thread-195805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:44:25.899 [DEBUG] [Thread-195805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:44:25.899 [DEBUG] [Thread-195805] [transport.py] [_log()] client lang: <none>
2026-02-15T01:44:25.899 [DEBUG] [Thread-195805] [transport.py] [_log()] server lang: <none>
2026-02-15T01:44:25.899 [DEBUG] [Thread-195805] [transport.py] [_log()] kex follows: False
2026-02-15T01:44:25.899 [DEBUG] [Thread-195805] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:44:25.899 [DEBUG] [Thread-195805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:44:25.899 [DEBUG] [Thread-195805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:44:25.899 [DEBUG] [Thread-195805] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:44:25.899 [DEBUG] [Thread-195805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:44:25.899 [DEBUG] [Thread-195805] [transport.py] [_log()] Compression: none
2026-02-15T01:44:25.899 [DEBUG] [Thread-195805] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:44:25.955 [DEBUG] [Thread-195805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:44:25.955 [DEBUG] [Thread-195805] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:44:25.956 [DEBUG] [Thread-195805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:44:25.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:44:25.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:44:26.011 [DEBUG] [Thread-195805] [transport.py] [_log()] userauth is OK
2026-02-15T01:44:26.011 [DEBUG] [Thread-195805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:44:26.012 [DEBUG] [Thread-195805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:44:26.012 [DEBUG] [Thread-195805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:44:26.012 [DEBUG] [Thread-195805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:44:26.031 [INFO] [Thread-195805] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:44:26.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-15T01:44:26.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:44:26.835 [DEBUG] [Thread-195805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:44:26.835 [DEBUG] [Thread-195805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:44:26.883 [DEBUG] [Thread-195805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:44:26.884 [DEBUG] [Thread-195805] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:44:26.893 [DEBUG] [Thread-195805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:44:26.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:44:26.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:44:26.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:44:26.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:44:26.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:44:26.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:44:26.929 [DEBUG] [Thread-195805] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:44:29.855 [DEBUG] [Thread-195807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:44:35.277 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:44:35.279 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:44:44.908 [DEBUG] [Thread-195808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:44:56.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:44:56.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:44:56.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-15T01:44:58.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 44, 28), 1.69, 88.81, 0.0, 46.32, 7.08, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:44:58.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:44:28
2026-02-15T01:44:59.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:44:59.272 [DEBUG] [Thread-195809] [transport.py] [_log()] starting thread (client mode): 0xa2d7a7a0
2026-02-15T01:44:59.273 [DEBUG] [Thread-195809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:44:59.292 [DEBUG] [Thread-195809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:44:59.292 [INFO] [Thread-195809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:44:59.295 [DEBUG] [Thread-195809] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:44:59.295 [DEBUG] [Thread-195809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:44:59.296 [DEBUG] [Thread-195809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:44:59.296 [DEBUG] [Thread-195809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:44:59.296 [DEBUG] [Thread-195809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:44:59.296 [DEBUG] [Thread-195809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:44:59.296 [DEBUG] [Thread-195809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:44:59.296 [DEBUG] [Thread-195809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:44:59.296 [DEBUG] [Thread-195809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:44:59.296 [DEBUG] [Thread-195809] [transport.py] [_log()] client lang: <none>
2026-02-15T01:44:59.296 [DEBUG] [Thread-195809] [transport.py] [_log()] server lang: <none>
2026-02-15T01:44:59.296 [DEBUG] [Thread-195809] [transport.py] [_log()] kex follows: False
2026-02-15T01:44:59.296 [DEBUG] [Thread-195809] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:44:59.296 [DEBUG] [Thread-195809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:44:59.296 [DEBUG] [Thread-195809] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:44:59.296 [DEBUG] [Thread-195809] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:44:59.296 [DEBUG] [Thread-195809] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:44:59.296 [DEBUG] [Thread-195809] [transport.py] [_log()] Compression: none
2026-02-15T01:44:59.296 [DEBUG] [Thread-195809] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:44:59.314 [DEBUG] [Thread-195809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:44:59.314 [DEBUG] [Thread-195809] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:44:59.315 [DEBUG] [Thread-195809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:44:59.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:44:59.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:44:59.317 [DEBUG] [Thread-195809] [transport.py] [_log()] userauth is OK
2026-02-15T01:44:59.317 [DEBUG] [Thread-195809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:44:59.317 [DEBUG] [Thread-195809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:44:59.317 [DEBUG] [Thread-195809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:44:59.317 [DEBUG] [Thread-195809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:44:59.343 [INFO] [Thread-195809] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:44:59.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:44:59.948 [DEBUG] [Thread-195811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:44:59.974 [DEBUG] [Thread-195809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:44:59.974 [DEBUG] [Thread-195809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:44:59.975 [DEBUG] [Thread-195809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:45:00.015 [DEBUG] [Thread-195809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:45:00.015 [DEBUG] [Thread-195809] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:45:00.018 [DEBUG] [Thread-195809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:45:00.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:45:00.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:45:00.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:45:00.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:45:00.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:45:00.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:45:00.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:45:00.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:45:00.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:45:00.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.988997 -999.00   +6.90  37.63     90   +5.40 1 1 2 3 1     0    0 0.99 -26.36 ZNESW 37.6 37.6 144.4 49.2 7.6 -22.9 7.5 -21.1 7.2 -20.7 7.6 -19.8
2026-02-15T01:45:00.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:45:00.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:45:00.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.988997
2026-02-15T01:45:00.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:45:00.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:45:00.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:45:00.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:45:00.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:45:00.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:44:28', tmtdew=1.69, humidity=88.81, cloud=0.0, wind=46.32, temperature=7.08, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:44:09.341', atlas_cloud=1, atlas_rain=1, zp_data=[2.03775, 2.17525, 1.07125, 1.7274999999999991, 1.8104999999999993, 1.664250000000001, 1.7349999999999994, 1.9262500000000005, 1.8599999999999994, 1.8950000000000005, 1.2312499999999993, 1.5945, 1.9774999999999991, 1.4332499999999992, 1.6609999999999996, 2.538499999999999, 1.9342499999999996, 0.9554999999999998, 0.5510000000000002, 0.7432499999999989, 1.7269999999999985, 0.941749999999999, 1.0602500000000008, 2.4967500000000005, 2.344999999999999, 0.40000000000000036, 0.3172499999999996, 0.359, 0.900500000000001, 0.40800000000000125, 0.527000000000001, 1.2500000000000009, 1.8172499999999996], zp_timestamp='2026-02-14T23:41:00')
2026-02-15T01:45:00.043 [DEBUG] [Thread-195809] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:45:00.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-15T01:45:00.139 [DEBUG] [Thread-195813] [transport.py] [_log()] starting thread (client mode): 0xa2d78cd0
2026-02-15T01:45:00.140 [DEBUG] [Thread-195813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:45:00.154 [DEBUG] [Thread-195813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:45:00.154 [INFO] [Thread-195813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:45:00.162 [DEBUG] [Thread-195813] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:45:00.162 [DEBUG] [Thread-195813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:45:00.162 [DEBUG] [Thread-195813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:45:00.162 [DEBUG] [Thread-195813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:45:00.162 [DEBUG] [Thread-195813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:45:00.162 [DEBUG] [Thread-195813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:45:00.162 [DEBUG] [Thread-195813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:45:00.162 [DEBUG] [Thread-195813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:45:00.162 [DEBUG] [Thread-195813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:45:00.162 [DEBUG] [Thread-195813] [transport.py] [_log()] client lang: <none>
2026-02-15T01:45:00.162 [DEBUG] [Thread-195813] [transport.py] [_log()] server lang: <none>
2026-02-15T01:45:00.163 [DEBUG] [Thread-195813] [transport.py] [_log()] kex follows: False
2026-02-15T01:45:00.163 [DEBUG] [Thread-195813] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:45:00.163 [DEBUG] [Thread-195813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:45:00.163 [DEBUG] [Thread-195813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:45:00.163 [DEBUG] [Thread-195813] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:45:00.163 [DEBUG] [Thread-195813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:45:00.163 [DEBUG] [Thread-195813] [transport.py] [_log()] Compression: none
2026-02-15T01:45:00.163 [DEBUG] [Thread-195813] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:45:00.219 [DEBUG] [Thread-195813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:45:00.219 [DEBUG] [Thread-195813] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:45:00.220 [DEBUG] [Thread-195813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:45:00.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:45:00.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:45:00.275 [DEBUG] [Thread-195813] [transport.py] [_log()] userauth is OK
2026-02-15T01:45:00.275 [DEBUG] [Thread-195813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:45:00.275 [DEBUG] [Thread-195813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:45:00.275 [DEBUG] [Thread-195813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:45:00.275 [DEBUG] [Thread-195813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:45:00.290 [INFO] [Thread-195813] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:45:00.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-15T01:45:00.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:45:01.120 [DEBUG] [Thread-195813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:45:01.120 [DEBUG] [Thread-195813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:45:01.168 [DEBUG] [Thread-195813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:45:01.169 [DEBUG] [Thread-195813] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:45:01.178 [DEBUG] [Thread-195813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:45:01.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:45:01.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:45: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') -> 00000000
2026-02-15T01:45:01.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:45:01.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:45:01.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:45:01.215 [DEBUG] [Thread-195813] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:45:14.023 [DEBUG] [Thread-195815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:45:14.984 [DEBUG] [Thread-195816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:45:30.033 [DEBUG] [Thread-195817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:45:31.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:45:31.238 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:45:31.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-15T01:45:33.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 45, 4), 1.69, 88.81, 0.0, 45.1, 7.05, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:45:33.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:45:04
2026-02-15T01:45:33.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:45:33.525 [DEBUG] [Thread-195818] [transport.py] [_log()] starting thread (client mode): 0xa2d949d0
2026-02-15T01:45:33.525 [DEBUG] [Thread-195818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:45:33.546 [DEBUG] [Thread-195818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:45:33.546 [INFO] [Thread-195818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:45:33.549 [DEBUG] [Thread-195818] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:45:33.549 [DEBUG] [Thread-195818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:45:33.549 [DEBUG] [Thread-195818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:45:33.549 [DEBUG] [Thread-195818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:45:33.549 [DEBUG] [Thread-195818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:45:33.549 [DEBUG] [Thread-195818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:45:33.549 [DEBUG] [Thread-195818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:45:33.550 [DEBUG] [Thread-195818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:45:33.550 [DEBUG] [Thread-195818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:45:33.550 [DEBUG] [Thread-195818] [transport.py] [_log()] client lang: <none>
2026-02-15T01:45:33.550 [DEBUG] [Thread-195818] [transport.py] [_log()] server lang: <none>
2026-02-15T01:45:33.550 [DEBUG] [Thread-195818] [transport.py] [_log()] kex follows: False
2026-02-15T01:45:33.550 [DEBUG] [Thread-195818] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:45:33.550 [DEBUG] [Thread-195818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:45:33.550 [DEBUG] [Thread-195818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:45:33.550 [DEBUG] [Thread-195818] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:45:33.550 [DEBUG] [Thread-195818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:45:33.550 [DEBUG] [Thread-195818] [transport.py] [_log()] Compression: none
2026-02-15T01:45:33.550 [DEBUG] [Thread-195818] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:45:33.567 [DEBUG] [Thread-195818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:45:33.568 [DEBUG] [Thread-195818] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:45:33.569 [DEBUG] [Thread-195818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:45:33.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:45:33.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:45:33.571 [DEBUG] [Thread-195818] [transport.py] [_log()] userauth is OK
2026-02-15T01:45:33.571 [DEBUG] [Thread-195818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:45:33.571 [DEBUG] [Thread-195818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:45:33.571 [DEBUG] [Thread-195818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:45:33.571 [DEBUG] [Thread-195818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:45:33.597 [INFO] [Thread-195818] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:45:33.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:45:34.259 [DEBUG] [Thread-195818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:45:34.260 [DEBUG] [Thread-195818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:45:34.260 [DEBUG] [Thread-195818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:45:34.300 [DEBUG] [Thread-195818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:45:34.300 [DEBUG] [Thread-195818] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:45:34.303 [DEBUG] [Thread-195818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:45:34.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:45:34.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:45:34.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:45:34.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:45:34.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:45:34.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:45:34.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:45:34.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:45:34.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:45:34.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.989344 -999.00   +6.90  35.83     90   +5.40 1 2 2 3 1     0    0 0.99 -25.92 Z.EsW 35.8 35.8 149.0 44.5 7.7 -23.4 7.4 -21.8 7.2 -21.3 7.6 -22.8
2026-02-15T01:45:34.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:45:34.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:45:34.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.989344
2026-02-15T01:45:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:45:34.333 [DEBUG] [Thread-195818] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:45:34.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:45:34.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:45:34.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:45:34.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T01:45:34.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:45:04', tmtdew=1.69, humidity=88.81, cloud=0.0, wind=45.1, temperature=7.05, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:44:39.322', atlas_cloud=2, atlas_rain=1, zp_data=[0.17824999999999847, 0.16875000000000107, 0.2837499999999995, 0.31049999999999933, 0.16750000000000043, 0.4197500000000005, 1.0079999999999991, 1.1692500000000008, 0.5874999999999995, 0.36599999999999966, 0.66425, 0.6360000000000001, 0.2859999999999996, 0.4342499999999987, 1.2119999999999997, 2.1469999999999994, 0.8652499999999996, 0.5674999999999999, 1.1594999999999995, 1.5437499999999993, 0.2934999999999981, 0.42524999999999835, 1.098250000000001, 2.4487500000000004, 0.990499999999999, 0.5994999999999999, 1.0347499999999998, 1.1645000000000003, 0.3959999999999999, 0.46050000000000235, 0.6240000000000014, nan, 1.220749999999999], zp_timestamp='2026-02-14T23:44:00')
2026-02-15T01:45:34.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-15T01:45:34.441 [DEBUG] [Thread-195821] [transport.py] [_log()] starting thread (client mode): 0xa2d1a740
2026-02-15T01:45:34.442 [DEBUG] [Thread-195821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:45:34.457 [DEBUG] [Thread-195821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:45:34.457 [INFO] [Thread-195821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:45:34.464 [DEBUG] [Thread-195821] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:45:34.465 [DEBUG] [Thread-195821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:45:34.465 [DEBUG] [Thread-195821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:45:34.465 [DEBUG] [Thread-195821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:45:34.465 [DEBUG] [Thread-195821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:45:34.465 [DEBUG] [Thread-195821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:45:34.465 [DEBUG] [Thread-195821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:45:34.465 [DEBUG] [Thread-195821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:45:34.465 [DEBUG] [Thread-195821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:45:34.465 [DEBUG] [Thread-195821] [transport.py] [_log()] client lang: <none>
2026-02-15T01:45:34.465 [DEBUG] [Thread-195821] [transport.py] [_log()] server lang: <none>
2026-02-15T01:45:34.465 [DEBUG] [Thread-195821] [transport.py] [_log()] kex follows: False
2026-02-15T01:45:34.466 [DEBUG] [Thread-195821] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:45:34.466 [DEBUG] [Thread-195821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:45:34.466 [DEBUG] [Thread-195821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:45:34.466 [DEBUG] [Thread-195821] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:45:34.466 [DEBUG] [Thread-195821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:45:34.466 [DEBUG] [Thread-195821] [transport.py] [_log()] Compression: none
2026-02-15T01:45:34.466 [DEBUG] [Thread-195821] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:45:34.523 [DEBUG] [Thread-195821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:45:34.524 [DEBUG] [Thread-195821] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:45:34.525 [DEBUG] [Thread-195821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:45:34.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:45:34.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:45:34.580 [DEBUG] [Thread-195821] [transport.py] [_log()] userauth is OK
2026-02-15T01:45:34.580 [DEBUG] [Thread-195821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:45:34.580 [DEBUG] [Thread-195821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:45:34.580 [DEBUG] [Thread-195821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:45:34.580 [DEBUG] [Thread-195821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:45:34.598 [INFO] [Thread-195821] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:45:34.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-15T01:45:34.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:45:35.409 [DEBUG] [Thread-195821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:45:35.409 [DEBUG] [Thread-195821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:45:35.457 [DEBUG] [Thread-195821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:45:35.457 [DEBUG] [Thread-195821] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:45:35.465 [DEBUG] [Thread-195821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:45:35.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:45:35.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-15T01:45:35.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:45:35.483 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:45:35.485 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:45:35.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:45:35.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:45:35.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:45:35.500 [DEBUG] [Thread-195821] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:45:45.069 [DEBUG] [Thread-195823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:46:00.120 [DEBUG] [Thread-195824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:46:05.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:46:05.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:46:05.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-15T01:46:07.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 45, 40), 2.05, 86.76, 0.0, 50.38, 7.4, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:46:07.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:45:40
2026-02-15T01:46:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:46:07.987 [DEBUG] [Thread-195825] [transport.py] [_log()] starting thread (client mode): 0xa2d1a560
2026-02-15T01:46:07.987 [DEBUG] [Thread-195825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:46:08.008 [DEBUG] [Thread-195825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:46:08.008 [INFO] [Thread-195825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:46:08.010 [DEBUG] [Thread-195825] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:46:08.011 [DEBUG] [Thread-195825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:46:08.011 [DEBUG] [Thread-195825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:46:08.011 [DEBUG] [Thread-195825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:46:08.011 [DEBUG] [Thread-195825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:46:08.011 [DEBUG] [Thread-195825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:46:08.011 [DEBUG] [Thread-195825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:46:08.011 [DEBUG] [Thread-195825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:46:08.011 [DEBUG] [Thread-195825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:46:08.011 [DEBUG] [Thread-195825] [transport.py] [_log()] client lang: <none>
2026-02-15T01:46:08.011 [DEBUG] [Thread-195825] [transport.py] [_log()] server lang: <none>
2026-02-15T01:46:08.011 [DEBUG] [Thread-195825] [transport.py] [_log()] kex follows: False
2026-02-15T01:46:08.011 [DEBUG] [Thread-195825] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:46:08.011 [DEBUG] [Thread-195825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:46:08.011 [DEBUG] [Thread-195825] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:46:08.011 [DEBUG] [Thread-195825] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:46:08.011 [DEBUG] [Thread-195825] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:46:08.011 [DEBUG] [Thread-195825] [transport.py] [_log()] Compression: none
2026-02-15T01:46:08.011 [DEBUG] [Thread-195825] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:46:08.031 [DEBUG] [Thread-195825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:46:08.032 [DEBUG] [Thread-195825] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:46:08.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:46:08.033 [DEBUG] [Thread-195825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:46:08.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:46:08.035 [DEBUG] [Thread-195825] [transport.py] [_log()] userauth is OK
2026-02-15T01:46:08.036 [DEBUG] [Thread-195825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:46:08.036 [DEBUG] [Thread-195825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:46:08.036 [DEBUG] [Thread-195825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:46:08.036 [DEBUG] [Thread-195825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:46:08.059 [INFO] [Thread-195825] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:46:08.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:46:08.721 [DEBUG] [Thread-195825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:46:08.722 [DEBUG] [Thread-195825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:46:08.722 [DEBUG] [Thread-195825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:46:08.763 [DEBUG] [Thread-195825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:46:08.763 [DEBUG] [Thread-195825] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:46:08.767 [DEBUG] [Thread-195825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:46:08.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:46:08.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:46:08.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:46:08.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:46:08.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:46:08.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:46:08.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:46:08.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:46:08.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:46:08.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.989691 -999.00   +6.90  41.54     90   +5.40 1 2 2 3 1     0    0 1.09 -22.72 Z.ESW 41.5 41.5 146.4 48.3 7.6 -24.0 7.5 -21.1 7.2 -20.0 7.6 -22.7
2026-02-15T01:46:08.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:46:08.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:46:08.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.989691
2026-02-15T01:46:08.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:46:08.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:46:08.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:46:08.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:46:08.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T01:46:08.794 [DEBUG] [Thread-195825] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:46:08.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:45:40', tmtdew=2.05, humidity=86.76, cloud=0.0, wind=50.38, temperature=7.4, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:45:09.302', atlas_cloud=2, atlas_rain=1, zp_data=[0.17824999999999847, 0.16875000000000107, 0.2837499999999995, 0.31049999999999933, 0.16750000000000043, 0.4197500000000005, 1.0079999999999991, 1.1692500000000008, 0.5874999999999995, 0.36599999999999966, 0.66425, 0.6360000000000001, 0.2859999999999996, 0.4342499999999987, 1.2119999999999997, 2.1469999999999994, 0.8652499999999996, 0.5674999999999999, 1.1594999999999995, 1.5437499999999993, 0.2934999999999981, 0.42524999999999835, 1.098250000000001, 2.4487500000000004, 0.990499999999999, 0.5994999999999999, 1.0347499999999998, 1.1645000000000003, 0.3959999999999999, 0.46050000000000235, 0.6240000000000014, nan, 1.220749999999999], zp_timestamp='2026-02-14T23:44:00')
2026-02-15T01:46:08.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T01:46:08.893 [DEBUG] [Thread-195828] [transport.py] [_log()] starting thread (client mode): 0xa2d19ed0
2026-02-15T01:46:08.893 [DEBUG] [Thread-195828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:46:08.907 [DEBUG] [Thread-195828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:46:08.907 [INFO] [Thread-195828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:46:08.914 [DEBUG] [Thread-195828] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:46:08.915 [DEBUG] [Thread-195828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:46:08.915 [DEBUG] [Thread-195828] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:46:08.915 [DEBUG] [Thread-195828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:46:08.915 [DEBUG] [Thread-195828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:46:08.915 [DEBUG] [Thread-195828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:46:08.915 [DEBUG] [Thread-195828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:46:08.915 [DEBUG] [Thread-195828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:46:08.915 [DEBUG] [Thread-195828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:46:08.915 [DEBUG] [Thread-195828] [transport.py] [_log()] client lang: <none>
2026-02-15T01:46:08.915 [DEBUG] [Thread-195828] [transport.py] [_log()] server lang: <none>
2026-02-15T01:46:08.915 [DEBUG] [Thread-195828] [transport.py] [_log()] kex follows: False
2026-02-15T01:46:08.915 [DEBUG] [Thread-195828] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:46:08.915 [DEBUG] [Thread-195828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:46:08.915 [DEBUG] [Thread-195828] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:46:08.916 [DEBUG] [Thread-195828] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:46:08.916 [DEBUG] [Thread-195828] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:46:08.916 [DEBUG] [Thread-195828] [transport.py] [_log()] Compression: none
2026-02-15T01:46:08.916 [DEBUG] [Thread-195828] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:46:08.975 [DEBUG] [Thread-195828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:46:08.976 [DEBUG] [Thread-195828] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:46:08.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:46:08.977 [DEBUG] [Thread-195828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:46:08.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:46:09.032 [DEBUG] [Thread-195828] [transport.py] [_log()] userauth is OK
2026-02-15T01:46:09.032 [DEBUG] [Thread-195828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:46:09.032 [DEBUG] [Thread-195828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:46:09.032 [DEBUG] [Thread-195828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:46:09.032 [DEBUG] [Thread-195828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:46:09.050 [INFO] [Thread-195828] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:46:09.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-15T01:46:09.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:46:09.865 [DEBUG] [Thread-195828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:46:09.866 [DEBUG] [Thread-195828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:46:09.913 [DEBUG] [Thread-195828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:46:09.914 [DEBUG] [Thread-195828] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:46:09.923 [DEBUG] [Thread-195828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:46:09.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:46:09.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-15T01:46:09.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-15T01:46:09.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:46:09.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:46:09.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:46:09.960 [DEBUG] [Thread-195828] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:46:14.081 [DEBUG] [Thread-195830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:46:15.157 [DEBUG] [Thread-195831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:46:30.201 [DEBUG] [Thread-195832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:46:35.689 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:46:35.691 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:46:39.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:46:39.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:46:39.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:46:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 46, 15), 1.61, 89.46, 0.0, 43.91, 7.08, 1, 1, 0, 2, 0, 0),)
2026-02-15T01:46:41.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:46:15
2026-02-15T01:46:42.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:46:42.454 [DEBUG] [Thread-195833] [transport.py] [_log()] starting thread (client mode): 0xa2d96e60
2026-02-15T01:46:42.454 [DEBUG] [Thread-195833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:46:42.476 [DEBUG] [Thread-195833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:46:42.476 [INFO] [Thread-195833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:46:42.480 [DEBUG] [Thread-195833] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:46:42.480 [DEBUG] [Thread-195833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:46:42.480 [DEBUG] [Thread-195833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:46:42.480 [DEBUG] [Thread-195833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:46:42.480 [DEBUG] [Thread-195833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:46:42.480 [DEBUG] [Thread-195833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:46:42.480 [DEBUG] [Thread-195833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:46:42.480 [DEBUG] [Thread-195833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:46:42.480 [DEBUG] [Thread-195833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:46:42.480 [DEBUG] [Thread-195833] [transport.py] [_log()] client lang: <none>
2026-02-15T01:46:42.480 [DEBUG] [Thread-195833] [transport.py] [_log()] server lang: <none>
2026-02-15T01:46:42.480 [DEBUG] [Thread-195833] [transport.py] [_log()] kex follows: False
2026-02-15T01:46:42.480 [DEBUG] [Thread-195833] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:46:42.480 [DEBUG] [Thread-195833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:46:42.480 [DEBUG] [Thread-195833] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:46:42.480 [DEBUG] [Thread-195833] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:46:42.480 [DEBUG] [Thread-195833] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:46:42.480 [DEBUG] [Thread-195833] [transport.py] [_log()] Compression: none
2026-02-15T01:46:42.480 [DEBUG] [Thread-195833] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:46:42.494 [DEBUG] [Thread-195833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:46:42.494 [DEBUG] [Thread-195833] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:46:42.494 [DEBUG] [Thread-195833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:46:42.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:46:42.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:46:42.495 [DEBUG] [Thread-195833] [transport.py] [_log()] userauth is OK
2026-02-15T01:46:42.495 [DEBUG] [Thread-195833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:46:42.495 [DEBUG] [Thread-195833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:46:42.495 [DEBUG] [Thread-195833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:46:42.495 [DEBUG] [Thread-195833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:46:42.505 [INFO] [Thread-195833] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:46:42.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:46:43.155 [DEBUG] [Thread-195833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:46:43.155 [DEBUG] [Thread-195833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:46:43.155 [DEBUG] [Thread-195833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:46:43.196 [DEBUG] [Thread-195833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:46:43.196 [DEBUG] [Thread-195833] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:46:43.199 [DEBUG] [Thread-195833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:46:43.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:46:43.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:46:43.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:46:43.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:46:43.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:46:43.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:46:43.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:46:43.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:46:43.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:46:43.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.990386 -999.00   +6.90  37.94     90   +5.40 1 1 2 3 1     0    0 1.07 -21.44 ZNESW 37.9 37.9 142.8 46.3 7.5 -24.0 7.4 -22.9 7.2 -22.1 7.5 -23.4
2026-02-15T01:46:43.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:46:43.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:46:43.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.990386
2026-02-15T01:46:43.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:46:43.225 [DEBUG] [Thread-195833] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:46:43.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:46:43.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:46:43.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:46:43.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:46:43.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:46:15', tmtdew=1.61, humidity=89.46, cloud=0.0, wind=43.91, temperature=7.08, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:46:09.350', atlas_cloud=1, atlas_rain=1, zp_data=[0.17824999999999847, 0.16875000000000107, 0.2837499999999995, 0.31049999999999933, 0.16750000000000043, 0.4197500000000005, 1.0079999999999991, 1.1692500000000008, 0.5874999999999995, 0.36599999999999966, 0.66425, 0.6360000000000001, 0.2859999999999996, 0.4342499999999987, 1.2119999999999997, 2.1469999999999994, 0.8652499999999996, 0.5674999999999999, 1.1594999999999995, 1.5437499999999993, 0.2934999999999981, 0.42524999999999835, 1.098250000000001, 2.4487500000000004, 0.990499999999999, 0.5994999999999999, 1.0347499999999998, 1.1645000000000003, 0.3959999999999999, 0.46050000000000235, 0.6240000000000014, nan, 1.220749999999999], zp_timestamp='2026-02-14T23:44:00')
2026-02-15T01:46:43.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-15T01:46:43.337 [DEBUG] [Thread-195836] [transport.py] [_log()] starting thread (client mode): 0xa5742860
2026-02-15T01:46:43.337 [DEBUG] [Thread-195836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:46:43.351 [DEBUG] [Thread-195836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:46:43.351 [INFO] [Thread-195836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:46:43.359 [DEBUG] [Thread-195836] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:46:43.359 [DEBUG] [Thread-195836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:46:43.359 [DEBUG] [Thread-195836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:46:43.360 [DEBUG] [Thread-195836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:46:43.360 [DEBUG] [Thread-195836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:46:43.360 [DEBUG] [Thread-195836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:46:43.360 [DEBUG] [Thread-195836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:46:43.360 [DEBUG] [Thread-195836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:46:43.360 [DEBUG] [Thread-195836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:46:43.360 [DEBUG] [Thread-195836] [transport.py] [_log()] client lang: <none>
2026-02-15T01:46:43.360 [DEBUG] [Thread-195836] [transport.py] [_log()] server lang: <none>
2026-02-15T01:46:43.360 [DEBUG] [Thread-195836] [transport.py] [_log()] kex follows: False
2026-02-15T01:46:43.360 [DEBUG] [Thread-195836] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:46:43.360 [DEBUG] [Thread-195836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:46:43.360 [DEBUG] [Thread-195836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:46:43.360 [DEBUG] [Thread-195836] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:46:43.360 [DEBUG] [Thread-195836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:46:43.360 [DEBUG] [Thread-195836] [transport.py] [_log()] Compression: none
2026-02-15T01:46:43.360 [DEBUG] [Thread-195836] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:46:43.415 [DEBUG] [Thread-195836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:46:43.415 [DEBUG] [Thread-195836] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:46:43.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:46:43.416 [DEBUG] [Thread-195836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:46:43.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:46:43.472 [DEBUG] [Thread-195836] [transport.py] [_log()] userauth is OK
2026-02-15T01:46:43.472 [DEBUG] [Thread-195836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:46:43.472 [DEBUG] [Thread-195836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:46:43.472 [DEBUG] [Thread-195836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:46:43.473 [DEBUG] [Thread-195836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:46:43.490 [INFO] [Thread-195836] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:46:43.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-15T01:46:43.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:46:44.298 [DEBUG] [Thread-195836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:46:44.298 [DEBUG] [Thread-195836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:46:44.346 [DEBUG] [Thread-195836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:46:44.347 [DEBUG] [Thread-195836] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:46:44.358 [DEBUG] [Thread-195836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:46:44.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:46:44.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-15T01:46:44.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:46:44.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:46:44.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:46:44.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:46:44.396 [DEBUG] [Thread-195836] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:46:45.239 [DEBUG] [Thread-195838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:47:00.292 [DEBUG] [Thread-195839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:47:14.137 [DEBUG] [Thread-195840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:47:14.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:47:14.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:47:14.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-15T01:47:15.329 [DEBUG] [Thread-195841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:47:16.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 46, 50), 1.55, 89.51, 0.0, 51.08, 7.02, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:47:16.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:46:50
2026-02-15T01:47:16.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:47:16.840 [DEBUG] [Thread-195842] [transport.py] [_log()] starting thread (client mode): 0xa2d1a260
2026-02-15T01:47:16.840 [DEBUG] [Thread-195842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:47:16.860 [DEBUG] [Thread-195842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:47:16.860 [INFO] [Thread-195842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:47:16.863 [DEBUG] [Thread-195842] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:47:16.863 [DEBUG] [Thread-195842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:47:16.863 [DEBUG] [Thread-195842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:47:16.863 [DEBUG] [Thread-195842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:47:16.863 [DEBUG] [Thread-195842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:47:16.863 [DEBUG] [Thread-195842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:47:16.864 [DEBUG] [Thread-195842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:47:16.864 [DEBUG] [Thread-195842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:47:16.864 [DEBUG] [Thread-195842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:47:16.864 [DEBUG] [Thread-195842] [transport.py] [_log()] client lang: <none>
2026-02-15T01:47:16.864 [DEBUG] [Thread-195842] [transport.py] [_log()] server lang: <none>
2026-02-15T01:47:16.864 [DEBUG] [Thread-195842] [transport.py] [_log()] kex follows: False
2026-02-15T01:47:16.864 [DEBUG] [Thread-195842] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:47:16.864 [DEBUG] [Thread-195842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:47:16.864 [DEBUG] [Thread-195842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:47:16.864 [DEBUG] [Thread-195842] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:47:16.864 [DEBUG] [Thread-195842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:47:16.864 [DEBUG] [Thread-195842] [transport.py] [_log()] Compression: none
2026-02-15T01:47:16.864 [DEBUG] [Thread-195842] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:47:16.884 [DEBUG] [Thread-195842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:47:16.884 [DEBUG] [Thread-195842] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:47:16.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:47:16.885 [DEBUG] [Thread-195842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:47:16.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:47:16.888 [DEBUG] [Thread-195842] [transport.py] [_log()] userauth is OK
2026-02-15T01:47:16.888 [DEBUG] [Thread-195842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:47:16.888 [DEBUG] [Thread-195842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:47:16.888 [DEBUG] [Thread-195842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:47:16.888 [DEBUG] [Thread-195842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:47:16.912 [INFO] [Thread-195842] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:47:16.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:47:17.660 [DEBUG] [Thread-195842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:47:17.660 [DEBUG] [Thread-195842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:47:17.660 [DEBUG] [Thread-195842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:47:17.700 [DEBUG] [Thread-195842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:47:17.700 [DEBUG] [Thread-195842] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:47:17.704 [DEBUG] [Thread-195842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:47:17.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:47:17.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:47:17.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:47:17.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:47:17.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:47:17.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:47:17.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:47:17.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:47:17.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:47:17.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.990733 -999.00   +6.90  33.69     90   +5.40 1 1 2 3 1     0    0 1.11 -19.52 ZNESW 33.7 33.7 151.4 51.6 7.5 -24.1 7.4 -23.0 7.2 -22.0 7.5 -23.1
2026-02-15T01:47:17.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:47:17.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:47:17.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.990733
2026-02-15T01:47:17.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:47:17.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:47:17.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:47:17.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:47:17.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:47:17.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:46:50', tmtdew=1.55, humidity=89.51, cloud=0.0, wind=51.08, temperature=7.02, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:46:39.331', atlas_cloud=1, atlas_rain=1, zp_data=[0.17824999999999847, 0.16875000000000107, 0.2837499999999995, 0.31049999999999933, 0.16750000000000043, 0.4197500000000005, 1.0079999999999991, 1.1692500000000008, 0.5874999999999995, 0.36599999999999966, 0.66425, 0.6360000000000001, 0.2859999999999996, 0.4342499999999987, 1.2119999999999997, 2.1469999999999994, 0.8652499999999996, 0.5674999999999999, 1.1594999999999995, 1.5437499999999993, 0.2934999999999981, 0.42524999999999835, 1.098250000000001, 2.4487500000000004, 0.990499999999999, 0.5994999999999999, 1.0347499999999998, 1.1645000000000003, 0.3959999999999999, 0.46050000000000235, 0.6240000000000014, nan, 1.220749999999999], zp_timestamp='2026-02-14T23:44:00')
2026-02-15T01:47:17.733 [DEBUG] [Thread-195842] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:47:17.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-15T01:47:17.839 [DEBUG] [Thread-195845] [transport.py] [_log()] starting thread (client mode): 0xa2d799c0
2026-02-15T01:47:17.839 [DEBUG] [Thread-195845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:47:17.854 [DEBUG] [Thread-195845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:47:17.854 [INFO] [Thread-195845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:47:17.861 [DEBUG] [Thread-195845] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:47:17.862 [DEBUG] [Thread-195845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:47:17.862 [DEBUG] [Thread-195845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:47:17.862 [DEBUG] [Thread-195845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:47:17.862 [DEBUG] [Thread-195845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:47:17.863 [DEBUG] [Thread-195845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:47:17.863 [DEBUG] [Thread-195845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:47:17.863 [DEBUG] [Thread-195845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:47:17.863 [DEBUG] [Thread-195845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:47:17.863 [DEBUG] [Thread-195845] [transport.py] [_log()] client lang: <none>
2026-02-15T01:47:17.863 [DEBUG] [Thread-195845] [transport.py] [_log()] server lang: <none>
2026-02-15T01:47:17.863 [DEBUG] [Thread-195845] [transport.py] [_log()] kex follows: False
2026-02-15T01:47:17.863 [DEBUG] [Thread-195845] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:47:17.863 [DEBUG] [Thread-195845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:47:17.863 [DEBUG] [Thread-195845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:47:17.863 [DEBUG] [Thread-195845] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:47:17.863 [DEBUG] [Thread-195845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:47:17.863 [DEBUG] [Thread-195845] [transport.py] [_log()] Compression: none
2026-02-15T01:47:17.863 [DEBUG] [Thread-195845] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:47:17.920 [DEBUG] [Thread-195845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:47:17.921 [DEBUG] [Thread-195845] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:47:17.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:47:17.922 [DEBUG] [Thread-195845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:47:17.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:47:17.976 [DEBUG] [Thread-195845] [transport.py] [_log()] userauth is OK
2026-02-15T01:47:17.977 [DEBUG] [Thread-195845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:47:17.977 [DEBUG] [Thread-195845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:47:17.977 [DEBUG] [Thread-195845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:47:17.977 [DEBUG] [Thread-195845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:47:17.995 [INFO] [Thread-195845] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:47:17.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-15T01:47:17.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:47:18.804 [DEBUG] [Thread-195845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:47:18.804 [DEBUG] [Thread-195845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:47:18.852 [DEBUG] [Thread-195845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:47:18.853 [DEBUG] [Thread-195845] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:47:18.862 [DEBUG] [Thread-195845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:47:18.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:47:18.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:47:18.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-15T01:47:18.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:47:18.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:47:18.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:47:18.899 [DEBUG] [Thread-195845] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:47:30.365 [DEBUG] [Thread-195847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:47:35.896 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:47:35.897 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:47:45.426 [DEBUG] [Thread-195848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:47:48.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:47:48.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:47:48.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-15T01:47:51.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 47, 27), 1.54, 89.58, 0.0, 48.8, 7.03, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:47:51.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:47:27
2026-02-15T01:47:51.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:47:51.672 [DEBUG] [Thread-195849] [transport.py] [_log()] starting thread (client mode): 0xa2d19510
2026-02-15T01:47:51.672 [DEBUG] [Thread-195849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:47:51.692 [DEBUG] [Thread-195849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:47:51.692 [INFO] [Thread-195849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:47:51.695 [DEBUG] [Thread-195849] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:47:51.695 [DEBUG] [Thread-195849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:47:51.695 [DEBUG] [Thread-195849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:47:51.695 [DEBUG] [Thread-195849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:47:51.695 [DEBUG] [Thread-195849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:47:51.695 [DEBUG] [Thread-195849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:47:51.695 [DEBUG] [Thread-195849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:47:51.695 [DEBUG] [Thread-195849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:47:51.695 [DEBUG] [Thread-195849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:47:51.695 [DEBUG] [Thread-195849] [transport.py] [_log()] client lang: <none>
2026-02-15T01:47:51.695 [DEBUG] [Thread-195849] [transport.py] [_log()] server lang: <none>
2026-02-15T01:47:51.695 [DEBUG] [Thread-195849] [transport.py] [_log()] kex follows: False
2026-02-15T01:47:51.695 [DEBUG] [Thread-195849] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:47:51.695 [DEBUG] [Thread-195849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:47:51.695 [DEBUG] [Thread-195849] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:47:51.696 [DEBUG] [Thread-195849] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:47:51.696 [DEBUG] [Thread-195849] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:47:51.696 [DEBUG] [Thread-195849] [transport.py] [_log()] Compression: none
2026-02-15T01:47:51.696 [DEBUG] [Thread-195849] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:47:51.714 [DEBUG] [Thread-195849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:47:51.715 [DEBUG] [Thread-195849] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:47:51.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:47:51.716 [DEBUG] [Thread-195849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:47:51.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:47:51.717 [DEBUG] [Thread-195849] [transport.py] [_log()] userauth is OK
2026-02-15T01:47:51.717 [DEBUG] [Thread-195849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:47:51.717 [DEBUG] [Thread-195849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:47:51.717 [DEBUG] [Thread-195849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:47:51.718 [DEBUG] [Thread-195849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:47:51.742 [INFO] [Thread-195849] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:47:51.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:47:52.406 [DEBUG] [Thread-195849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:47:52.406 [DEBUG] [Thread-195849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:47:52.406 [DEBUG] [Thread-195849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:47:52.447 [DEBUG] [Thread-195849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:47:52.447 [DEBUG] [Thread-195849] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:47:52.451 [DEBUG] [Thread-195849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:47:52.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:47:52.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:47:52.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:47:52.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:47:52.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:47:52.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:47:52.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:47:52.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:47:52.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:47:52.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.991080 -999.00   +6.90  34.58     90   +5.40 1 1 2 3 1     0    0 1.14 -18.01 ZNESW 34.6 34.6 155.0 45.4 7.5 -23.8 7.3 -23.0 7.2 -21.9 7.5 -23.4
2026-02-15T01:47:52.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:47:52.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:47:52.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.991080
2026-02-15T01:47:52.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:47:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:47:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:47:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:47:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:47:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:47:27', tmtdew=1.54, humidity=89.58, cloud=0.0, wind=48.8, temperature=7.03, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:47:09.312', atlas_cloud=1, atlas_rain=1, zp_data=[0.17824999999999847, 0.16875000000000107, 0.2837499999999995, 0.31049999999999933, 0.16750000000000043, 0.4197500000000005, 1.0079999999999991, 1.1692500000000008, 0.5874999999999995, 0.36599999999999966, 0.66425, 0.6360000000000001, 0.2859999999999996, 0.4342499999999987, 1.2119999999999997, 2.1469999999999994, 0.8652499999999996, 0.5674999999999999, 1.1594999999999995, 1.5437499999999993, 0.2934999999999981, 0.42524999999999835, 1.098250000000001, 2.4487500000000004, 0.990499999999999, 0.5994999999999999, 1.0347499999999998, 1.1645000000000003, 0.3959999999999999, 0.46050000000000235, 0.6240000000000014, nan, 1.220749999999999], zp_timestamp='2026-02-14T23:44:00')
2026-02-15T01:47:52.479 [DEBUG] [Thread-195849] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:47:52.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T01:47:52.575 [DEBUG] [Thread-195852] [transport.py] [_log()] starting thread (client mode): 0xa2d6fc40
2026-02-15T01:47:52.575 [DEBUG] [Thread-195852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:47:52.590 [DEBUG] [Thread-195852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:47:52.591 [INFO] [Thread-195852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:47:52.598 [DEBUG] [Thread-195852] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:47:52.598 [DEBUG] [Thread-195852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:47:52.598 [DEBUG] [Thread-195852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:47:52.598 [DEBUG] [Thread-195852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:47:52.598 [DEBUG] [Thread-195852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:47:52.599 [DEBUG] [Thread-195852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:47:52.599 [DEBUG] [Thread-195852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:47:52.599 [DEBUG] [Thread-195852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:47:52.599 [DEBUG] [Thread-195852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:47:52.599 [DEBUG] [Thread-195852] [transport.py] [_log()] client lang: <none>
2026-02-15T01:47:52.599 [DEBUG] [Thread-195852] [transport.py] [_log()] server lang: <none>
2026-02-15T01:47:52.599 [DEBUG] [Thread-195852] [transport.py] [_log()] kex follows: False
2026-02-15T01:47:52.599 [DEBUG] [Thread-195852] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:47:52.599 [DEBUG] [Thread-195852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:47:52.600 [DEBUG] [Thread-195852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:47:52.600 [DEBUG] [Thread-195852] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:47:52.600 [DEBUG] [Thread-195852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:47:52.600 [DEBUG] [Thread-195852] [transport.py] [_log()] Compression: none
2026-02-15T01:47:52.600 [DEBUG] [Thread-195852] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:47:52.655 [DEBUG] [Thread-195852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:47:52.655 [DEBUG] [Thread-195852] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:47:52.655 [DEBUG] [Thread-195852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:47:52.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:47:52.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:47:52.712 [DEBUG] [Thread-195852] [transport.py] [_log()] userauth is OK
2026-02-15T01:47:52.712 [DEBUG] [Thread-195852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:47:52.713 [DEBUG] [Thread-195852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:47:52.713 [DEBUG] [Thread-195852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:47:52.713 [DEBUG] [Thread-195852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:47:52.735 [INFO] [Thread-195852] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:47:52.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-15T01:47:52.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:47:53.554 [DEBUG] [Thread-195852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:47:53.554 [DEBUG] [Thread-195852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:47:53.602 [DEBUG] [Thread-195852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:47:53.602 [DEBUG] [Thread-195852] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:47:53.611 [DEBUG] [Thread-195852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:47:53.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:47:53.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-15T01:47:53.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:47:53.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:47:53.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:47:53.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:47:53.648 [DEBUG] [Thread-195852] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:48:00.464 [DEBUG] [Thread-195854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:48:14.195 [DEBUG] [Thread-195855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:48:15.525 [DEBUG] [Thread-195856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:48:23.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:48:23.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:48:23.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-15T01:48:25.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 48, 2), 1.53, 89.65, 0.0, 47.83, 7.05, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:48:25.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:48:02
2026-02-15T01:48:26.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:48:26.327 [DEBUG] [Thread-195857] [transport.py] [_log()] starting thread (client mode): 0xa2d942e0
2026-02-15T01:48:26.328 [DEBUG] [Thread-195857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:48:26.348 [DEBUG] [Thread-195857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:48:26.348 [INFO] [Thread-195857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:48:26.351 [DEBUG] [Thread-195857] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:48:26.351 [DEBUG] [Thread-195857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:48:26.351 [DEBUG] [Thread-195857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:48:26.351 [DEBUG] [Thread-195857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:48:26.351 [DEBUG] [Thread-195857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:48:26.351 [DEBUG] [Thread-195857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:48:26.351 [DEBUG] [Thread-195857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:48:26.352 [DEBUG] [Thread-195857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:48:26.352 [DEBUG] [Thread-195857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:48:26.352 [DEBUG] [Thread-195857] [transport.py] [_log()] client lang: <none>
2026-02-15T01:48:26.352 [DEBUG] [Thread-195857] [transport.py] [_log()] server lang: <none>
2026-02-15T01:48:26.352 [DEBUG] [Thread-195857] [transport.py] [_log()] kex follows: False
2026-02-15T01:48:26.352 [DEBUG] [Thread-195857] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:48:26.352 [DEBUG] [Thread-195857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:48:26.352 [DEBUG] [Thread-195857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:48:26.352 [DEBUG] [Thread-195857] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:48:26.352 [DEBUG] [Thread-195857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:48:26.352 [DEBUG] [Thread-195857] [transport.py] [_log()] Compression: none
2026-02-15T01:48:26.352 [DEBUG] [Thread-195857] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:48:26.370 [DEBUG] [Thread-195857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:48:26.370 [DEBUG] [Thread-195857] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:48:26.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:48:26.371 [DEBUG] [Thread-195857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:48:26.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:48:26.374 [DEBUG] [Thread-195857] [transport.py] [_log()] userauth is OK
2026-02-15T01:48:26.374 [DEBUG] [Thread-195857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:48:26.374 [DEBUG] [Thread-195857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:48:26.374 [DEBUG] [Thread-195857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:48:26.374 [DEBUG] [Thread-195857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:48:26.395 [INFO] [Thread-195857] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:48:26.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:48:27.029 [DEBUG] [Thread-195857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:48:27.029 [DEBUG] [Thread-195857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:48:27.029 [DEBUG] [Thread-195857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:48:27.070 [DEBUG] [Thread-195857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:48:27.070 [DEBUG] [Thread-195857] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:48:27.073 [DEBUG] [Thread-195857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:48:27.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:48:27.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:48:27.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:48:27.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:48:27.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:48:27.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:48:27.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:48:27.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:48:27.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:48:27.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.991427 -999.00   +6.90  25.53     90   +5.40 1 1 1 3 1     0    0 1.15 -17.62 ZNESW 25.5 25.5 151.0 49.0 7.5 -24.1 7.3 -23.2 7.2 -22.1 7.5 -23.2
2026-02-15T01:48:27.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:48:27.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:48:27.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.991427
2026-02-15T01:48:27.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:48:27.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:48:27.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:48:27.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:48:27.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:48:27.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:48:02', tmtdew=1.53, humidity=89.65, cloud=0.0, wind=47.83, temperature=7.05, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:47:39.293', atlas_cloud=1, atlas_rain=1, zp_data=[0.17824999999999847, 0.16875000000000107, 0.2837499999999995, 0.31049999999999933, 0.16750000000000043, 0.4197500000000005, 1.0079999999999991, 1.1692500000000008, 0.5874999999999995, 0.36599999999999966, 0.66425, 0.6360000000000001, 0.2859999999999996, 0.4342499999999987, 1.2119999999999997, 2.1469999999999994, 0.8652499999999996, 0.5674999999999999, 1.1594999999999995, 1.5437499999999993, 0.2934999999999981, 0.42524999999999835, 1.098250000000001, 2.4487500000000004, 0.990499999999999, 0.5994999999999999, 1.0347499999999998, 1.1645000000000003, 0.3959999999999999, 0.46050000000000235, 0.6240000000000014, nan, 1.220749999999999], zp_timestamp='2026-02-14T23:47:00')
2026-02-15T01:48:27.101 [DEBUG] [Thread-195857] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:48:27.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-15T01:48:27.196 [DEBUG] [Thread-195860] [transport.py] [_log()] starting thread (client mode): 0xa2d95180
2026-02-15T01:48:27.196 [DEBUG] [Thread-195860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:48:27.210 [DEBUG] [Thread-195860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:48:27.210 [INFO] [Thread-195860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:48:27.217 [DEBUG] [Thread-195860] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:48:27.217 [DEBUG] [Thread-195860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:48:27.218 [DEBUG] [Thread-195860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:48:27.218 [DEBUG] [Thread-195860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:48:27.218 [DEBUG] [Thread-195860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:48:27.218 [DEBUG] [Thread-195860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:48:27.218 [DEBUG] [Thread-195860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:48:27.218 [DEBUG] [Thread-195860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:48:27.218 [DEBUG] [Thread-195860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:48:27.218 [DEBUG] [Thread-195860] [transport.py] [_log()] client lang: <none>
2026-02-15T01:48:27.218 [DEBUG] [Thread-195860] [transport.py] [_log()] server lang: <none>
2026-02-15T01:48:27.219 [DEBUG] [Thread-195860] [transport.py] [_log()] kex follows: False
2026-02-15T01:48:27.219 [DEBUG] [Thread-195860] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:48:27.219 [DEBUG] [Thread-195860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:48:27.219 [DEBUG] [Thread-195860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:48:27.219 [DEBUG] [Thread-195860] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:48:27.219 [DEBUG] [Thread-195860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:48:27.219 [DEBUG] [Thread-195860] [transport.py] [_log()] Compression: none
2026-02-15T01:48:27.219 [DEBUG] [Thread-195860] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:48:27.282 [DEBUG] [Thread-195860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:48:27.282 [DEBUG] [Thread-195860] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:48:27.283 [DEBUG] [Thread-195860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:48:27.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:48:27.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:48:27.341 [DEBUG] [Thread-195860] [transport.py] [_log()] userauth is OK
2026-02-15T01:48:27.341 [DEBUG] [Thread-195860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:48:27.341 [DEBUG] [Thread-195860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:48:27.341 [DEBUG] [Thread-195860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:48:27.341 [DEBUG] [Thread-195860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:48:27.360 [INFO] [Thread-195860] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:48:27.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-15T01:48:27.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:48:28.158 [DEBUG] [Thread-195860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:48:28.158 [DEBUG] [Thread-195860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:48:28.206 [DEBUG] [Thread-195860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:48:28.207 [DEBUG] [Thread-195860] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:48:28.216 [DEBUG] [Thread-195860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:48:28.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:48:28.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-15T01:48:28.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-15T01:48:28.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:48:28.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:48:28.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:48:28.253 [DEBUG] [Thread-195860] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:48:30.567 [DEBUG] [Thread-195862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:48:36.104 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:48:36.105 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:48:45.621 [DEBUG] [Thread-195863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:48:58.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:48:58.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:48:58.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:49:00.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 48, 37), 1.95, 87.36, 0.0, 49.43, 7.3, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:49:00.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:48:37
2026-02-15T01:49:00.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:49:00.657 [DEBUG] [Thread-195864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:49:00.672 [DEBUG] [Thread-195865] [transport.py] [_log()] starting thread (client mode): 0xa2d6a200
2026-02-15T01:49:00.672 [DEBUG] [Thread-195865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:49:00.691 [DEBUG] [Thread-195865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:49:00.692 [INFO] [Thread-195865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:49:00.695 [DEBUG] [Thread-195865] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:49:00.695 [DEBUG] [Thread-195865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:49:00.695 [DEBUG] [Thread-195865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:49:00.695 [DEBUG] [Thread-195865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:49:00.695 [DEBUG] [Thread-195865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:49:00.696 [DEBUG] [Thread-195865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:49:00.696 [DEBUG] [Thread-195865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:49:00.696 [DEBUG] [Thread-195865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:49:00.696 [DEBUG] [Thread-195865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:49:00.696 [DEBUG] [Thread-195865] [transport.py] [_log()] client lang: <none>
2026-02-15T01:49:00.696 [DEBUG] [Thread-195865] [transport.py] [_log()] server lang: <none>
2026-02-15T01:49:00.696 [DEBUG] [Thread-195865] [transport.py] [_log()] kex follows: False
2026-02-15T01:49:00.696 [DEBUG] [Thread-195865] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:49:00.696 [DEBUG] [Thread-195865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:49:00.696 [DEBUG] [Thread-195865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:49:00.696 [DEBUG] [Thread-195865] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:49:00.696 [DEBUG] [Thread-195865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:49:00.696 [DEBUG] [Thread-195865] [transport.py] [_log()] Compression: none
2026-02-15T01:49:00.696 [DEBUG] [Thread-195865] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:49:00.714 [DEBUG] [Thread-195865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:49:00.714 [DEBUG] [Thread-195865] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:49:00.715 [DEBUG] [Thread-195865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:49:00.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:49:00.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:49:00.717 [DEBUG] [Thread-195865] [transport.py] [_log()] userauth is OK
2026-02-15T01:49:00.717 [DEBUG] [Thread-195865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:49:00.717 [DEBUG] [Thread-195865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:49:00.718 [DEBUG] [Thread-195865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:49:00.718 [DEBUG] [Thread-195865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:49:00.742 [INFO] [Thread-195865] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:49:00.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:49:01.385 [DEBUG] [Thread-195865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:49:01.385 [DEBUG] [Thread-195865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:49:01.386 [DEBUG] [Thread-195865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:49:01.426 [DEBUG] [Thread-195865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:49:01.426 [DEBUG] [Thread-195865] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:49:01.430 [DEBUG] [Thread-195865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:49:01.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:49:01.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:49:01.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:49:01.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:49:01.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:49:01.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:49:01.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:49:01.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:49:01.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:49:01.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.991775 -999.00   +6.90  32.42     90   +5.40 1 1 2 3 1     0    0 1.08 -19.42 ZNESW 32.4 32.4 150.8 46.1 7.5 -23.3 7.3 -22.8 7.2 -21.5 7.5 -23.0
2026-02-15T01:49:01.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:49:01.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:49:01.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.991775
2026-02-15T01:49:01.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:49:01.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:49:01.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:49:01.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:49:01.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:49:01.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:48:37', tmtdew=1.95, humidity=87.36, cloud=0.0, wind=49.43, temperature=7.3, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:48:09.360', atlas_cloud=1, atlas_rain=1, zp_data=[0.17824999999999847, 0.16875000000000107, 0.2837499999999995, 0.31049999999999933, 0.16750000000000043, 0.4197500000000005, 1.0079999999999991, 1.1692500000000008, 0.5874999999999995, 0.36599999999999966, 0.66425, 0.6360000000000001, 0.2859999999999996, 0.4342499999999987, 1.2119999999999997, 2.1469999999999994, 0.8652499999999996, 0.5674999999999999, 1.1594999999999995, 1.5437499999999993, 0.2934999999999981, 0.42524999999999835, 1.098250000000001, 2.4487500000000004, 0.990499999999999, 0.5994999999999999, 1.0347499999999998, 1.1645000000000003, 0.3959999999999999, 0.46050000000000235, 0.6240000000000014, nan, 1.220749999999999], zp_timestamp='2026-02-14T23:47:00')
2026-02-15T01:49:01.457 [DEBUG] [Thread-195865] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:49:01.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T01:49:01.552 [DEBUG] [Thread-195868] [transport.py] [_log()] starting thread (client mode): 0xa5742c80
2026-02-15T01:49:01.552 [DEBUG] [Thread-195868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:49:01.567 [DEBUG] [Thread-195868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:49:01.568 [INFO] [Thread-195868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:49:01.576 [DEBUG] [Thread-195868] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:49:01.576 [DEBUG] [Thread-195868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:49:01.576 [DEBUG] [Thread-195868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:49:01.576 [DEBUG] [Thread-195868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:49:01.576 [DEBUG] [Thread-195868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:49:01.576 [DEBUG] [Thread-195868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:49:01.577 [DEBUG] [Thread-195868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:49:01.577 [DEBUG] [Thread-195868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:49:01.577 [DEBUG] [Thread-195868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:49:01.577 [DEBUG] [Thread-195868] [transport.py] [_log()] client lang: <none>
2026-02-15T01:49:01.577 [DEBUG] [Thread-195868] [transport.py] [_log()] server lang: <none>
2026-02-15T01:49:01.577 [DEBUG] [Thread-195868] [transport.py] [_log()] kex follows: False
2026-02-15T01:49:01.577 [DEBUG] [Thread-195868] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:49:01.577 [DEBUG] [Thread-195868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:49:01.578 [DEBUG] [Thread-195868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:49:01.578 [DEBUG] [Thread-195868] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:49:01.578 [DEBUG] [Thread-195868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:49:01.578 [DEBUG] [Thread-195868] [transport.py] [_log()] Compression: none
2026-02-15T01:49:01.578 [DEBUG] [Thread-195868] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:49:01.633 [DEBUG] [Thread-195868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:49:01.634 [DEBUG] [Thread-195868] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:49:01.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:49:01.635 [DEBUG] [Thread-195868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:49:01.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:49:01.688 [DEBUG] [Thread-195868] [transport.py] [_log()] userauth is OK
2026-02-15T01:49:01.688 [DEBUG] [Thread-195868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:49:01.689 [DEBUG] [Thread-195868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:49:01.689 [DEBUG] [Thread-195868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:49:01.689 [DEBUG] [Thread-195868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:49:01.706 [INFO] [Thread-195868] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:49:01.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-15T01:49:01.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:49:02.540 [DEBUG] [Thread-195868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:49:02.540 [DEBUG] [Thread-195868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:49:02.588 [DEBUG] [Thread-195868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:49:02.589 [DEBUG] [Thread-195868] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:49:02.598 [DEBUG] [Thread-195868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:49:02.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:49:02.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:49:02.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:49:02.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:49:02.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:49:02.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:49:02.634 [DEBUG] [Thread-195868] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:49:14.251 [DEBUG] [Thread-195870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:49:15.690 [DEBUG] [Thread-195871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:49:30.748 [DEBUG] [Thread-195872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:49:32.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:49:32.657 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:49:32.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:49:34.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 49, 13), 1.52, 90.25, 0.0, 41.2, 7.03, 1, 2, 0, 2, 0, 0),)
2026-02-15T01:49:34.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:49:13
2026-02-15T01:49:34.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:49:35.147 [DEBUG] [Thread-195873] [transport.py] [_log()] starting thread (client mode): 0xa2d6b430
2026-02-15T01:49:35.147 [DEBUG] [Thread-195873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:49:35.160 [DEBUG] [Thread-195873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:49:35.160 [INFO] [Thread-195873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:49:35.163 [DEBUG] [Thread-195873] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:49:35.163 [DEBUG] [Thread-195873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:49:35.163 [DEBUG] [Thread-195873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:49:35.163 [DEBUG] [Thread-195873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:49:35.163 [DEBUG] [Thread-195873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:49:35.163 [DEBUG] [Thread-195873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:49:35.163 [DEBUG] [Thread-195873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:49:35.163 [DEBUG] [Thread-195873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:49:35.163 [DEBUG] [Thread-195873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:49:35.163 [DEBUG] [Thread-195873] [transport.py] [_log()] client lang: <none>
2026-02-15T01:49:35.163 [DEBUG] [Thread-195873] [transport.py] [_log()] server lang: <none>
2026-02-15T01:49:35.163 [DEBUG] [Thread-195873] [transport.py] [_log()] kex follows: False
2026-02-15T01:49:35.163 [DEBUG] [Thread-195873] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:49:35.163 [DEBUG] [Thread-195873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:49:35.163 [DEBUG] [Thread-195873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:49:35.164 [DEBUG] [Thread-195873] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:49:35.164 [DEBUG] [Thread-195873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:49:35.164 [DEBUG] [Thread-195873] [transport.py] [_log()] Compression: none
2026-02-15T01:49:35.164 [DEBUG] [Thread-195873] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:49:35.182 [DEBUG] [Thread-195873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:49:35.182 [DEBUG] [Thread-195873] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:49:35.183 [DEBUG] [Thread-195873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:49:35.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:49:35.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:49:35.185 [DEBUG] [Thread-195873] [transport.py] [_log()] userauth is OK
2026-02-15T01:49:35.185 [DEBUG] [Thread-195873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:49:35.185 [DEBUG] [Thread-195873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:49:35.185 [DEBUG] [Thread-195873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:49:35.185 [DEBUG] [Thread-195873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:49:35.210 [INFO] [Thread-195873] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:49:35.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:49:35.846 [DEBUG] [Thread-195873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:49:35.847 [DEBUG] [Thread-195873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:49:35.847 [DEBUG] [Thread-195873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:49:35.887 [DEBUG] [Thread-195873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:49:35.888 [DEBUG] [Thread-195873] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:49:35.891 [DEBUG] [Thread-195873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:49:35.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:49:35.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:49:35.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:49:35.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:49:35.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:49:35.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:49:35.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:49:35.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:49:35.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:49:35.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.992122 -999.00   +6.90  30.73     90   +5.40 1 1 2 3 1     0    0 1.08 -19.46 ZNESW 30.7 30.7 154.6 48.4 7.5 -21.6 7.3 -22.5 7.1 -21.7 7.5 -22.9
2026-02-15T01:49:35.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:49:35.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:49:35.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.992122
2026-02-15T01:49:35.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:49:35.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:49:35.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:49:35.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:49:35.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:49:35.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:49:13', tmtdew=1.52, humidity=90.25, cloud=0.0, wind=41.2, temperature=7.03, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:48:39.341', atlas_cloud=1, atlas_rain=1, zp_data=[0.17824999999999847, 0.16875000000000107, 0.2837499999999995, 0.31049999999999933, 0.16750000000000043, 0.4197500000000005, 1.0079999999999991, 1.1692500000000008, 0.5874999999999995, 0.36599999999999966, 0.66425, 0.6360000000000001, 0.2859999999999996, 0.4342499999999987, 1.2119999999999997, 2.1469999999999994, 0.8652499999999996, 0.5674999999999999, 1.1594999999999995, 1.5437499999999993, 0.2934999999999981, 0.42524999999999835, 1.098250000000001, 2.4487500000000004, 0.990499999999999, 0.5994999999999999, 1.0347499999999998, 1.1645000000000003, 0.3959999999999999, 0.46050000000000235, 0.6240000000000014, nan, 1.220749999999999], zp_timestamp='2026-02-14T23:47:00')
2026-02-15T01:49:35.917 [DEBUG] [Thread-195873] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:49:36.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-15T01:49:36.015 [DEBUG] [Thread-195876] [transport.py] [_log()] starting thread (client mode): 0xa57d6770
2026-02-15T01:49:36.016 [DEBUG] [Thread-195876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:49:36.030 [DEBUG] [Thread-195876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:49:36.030 [INFO] [Thread-195876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:49:36.038 [DEBUG] [Thread-195876] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:49:36.038 [DEBUG] [Thread-195876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:49:36.038 [DEBUG] [Thread-195876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:49:36.038 [DEBUG] [Thread-195876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:49:36.038 [DEBUG] [Thread-195876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:49:36.038 [DEBUG] [Thread-195876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:49:36.038 [DEBUG] [Thread-195876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:49:36.038 [DEBUG] [Thread-195876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:49:36.038 [DEBUG] [Thread-195876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:49:36.038 [DEBUG] [Thread-195876] [transport.py] [_log()] client lang: <none>
2026-02-15T01:49:36.038 [DEBUG] [Thread-195876] [transport.py] [_log()] server lang: <none>
2026-02-15T01:49:36.038 [DEBUG] [Thread-195876] [transport.py] [_log()] kex follows: False
2026-02-15T01:49:36.038 [DEBUG] [Thread-195876] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:49:36.038 [DEBUG] [Thread-195876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:49:36.039 [DEBUG] [Thread-195876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:49:36.039 [DEBUG] [Thread-195876] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:49:36.039 [DEBUG] [Thread-195876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:49:36.039 [DEBUG] [Thread-195876] [transport.py] [_log()] Compression: none
2026-02-15T01:49:36.039 [DEBUG] [Thread-195876] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:49:36.097 [DEBUG] [Thread-195876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:49:36.097 [DEBUG] [Thread-195876] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:49:36.098 [DEBUG] [Thread-195876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:49:36.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:49:36.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:49:36.154 [DEBUG] [Thread-195876] [transport.py] [_log()] userauth is OK
2026-02-15T01:49:36.154 [DEBUG] [Thread-195876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:49:36.154 [DEBUG] [Thread-195876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:49:36.154 [DEBUG] [Thread-195876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:49:36.154 [DEBUG] [Thread-195876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:49:36.173 [INFO] [Thread-195876] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:49: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-15T01:49:36.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:49:36.306 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:49:36.307 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:49:36.990 [DEBUG] [Thread-195876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:49:36.990 [DEBUG] [Thread-195876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:49:37.039 [DEBUG] [Thread-195876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:49:37.039 [DEBUG] [Thread-195876] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:49:37.048 [DEBUG] [Thread-195876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:49:37.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:49:37.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:49:37.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T01:49:37.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:49:37.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:49:37.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:49:37.085 [DEBUG] [Thread-195876] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:49:45.787 [DEBUG] [Thread-195878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:50:00.841 [DEBUG] [Thread-195879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:50:07.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:50:07.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:50:07.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-15T01:50:09.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 49, 49), 1.51, 90.31, 0.0, 43.02, 7.03, 1, 2, 0, 2, 0, 0),)
2026-02-15T01:50:09.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:49:49
2026-02-15T01:50:09.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:50:09.697 [DEBUG] [Thread-195880] [transport.py] [_log()] starting thread (client mode): 0xa2d190f0
2026-02-15T01:50:09.697 [DEBUG] [Thread-195880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:50:09.712 [DEBUG] [Thread-195880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:50:09.712 [INFO] [Thread-195880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:50:09.714 [DEBUG] [Thread-195880] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:50:09.714 [DEBUG] [Thread-195880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:50:09.714 [DEBUG] [Thread-195880] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:50:09.714 [DEBUG] [Thread-195880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:50:09.714 [DEBUG] [Thread-195880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:50:09.714 [DEBUG] [Thread-195880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:50:09.714 [DEBUG] [Thread-195880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:50:09.714 [DEBUG] [Thread-195880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:50:09.714 [DEBUG] [Thread-195880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:50:09.715 [DEBUG] [Thread-195880] [transport.py] [_log()] client lang: <none>
2026-02-15T01:50:09.715 [DEBUG] [Thread-195880] [transport.py] [_log()] server lang: <none>
2026-02-15T01:50:09.715 [DEBUG] [Thread-195880] [transport.py] [_log()] kex follows: False
2026-02-15T01:50:09.715 [DEBUG] [Thread-195880] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:50:09.715 [DEBUG] [Thread-195880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:50:09.715 [DEBUG] [Thread-195880] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:50:09.715 [DEBUG] [Thread-195880] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:50:09.715 [DEBUG] [Thread-195880] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:50:09.715 [DEBUG] [Thread-195880] [transport.py] [_log()] Compression: none
2026-02-15T01:50:09.715 [DEBUG] [Thread-195880] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:50:09.731 [DEBUG] [Thread-195880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:50:09.731 [DEBUG] [Thread-195880] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:50:09.731 [DEBUG] [Thread-195880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:50:09.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:50:09.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:50:09.735 [DEBUG] [Thread-195880] [transport.py] [_log()] userauth is OK
2026-02-15T01:50:09.735 [DEBUG] [Thread-195880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:50:09.735 [DEBUG] [Thread-195880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:50:09.735 [DEBUG] [Thread-195880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:50:09.735 [DEBUG] [Thread-195880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:50:09.766 [INFO] [Thread-195880] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:50:09.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:50:14.321 [DEBUG] [Thread-195882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:50:15.875 [DEBUG] [Thread-195883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:50:23.856 [DEBUG] [Thread-195880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:50:23.857 [DEBUG] [Thread-195880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:50:23.857 [DEBUG] [Thread-195880] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:50:23.897 [DEBUG] [Thread-195880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:50:23.897 [DEBUG] [Thread-195880] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:50:23.900 [DEBUG] [Thread-195880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:50:24.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:50:24.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:50:24.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:50:24.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:50:24.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:50:24.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:50:24.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:50:24.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:50:24.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:50:24.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.992816 -999.00   +6.90  34.56     90   +5.40 1 1 2 3 1     0    0 1.09 -19.38 ZNESW 34.6 34.6 144.2 44.4 7.5 -22.7 7.4 -22.4 7.2 -21.2 7.5 -22.9
2026-02-15T01:50:24.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:50:24.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:50:24.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.992816
2026-02-15T01:50:24.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:50:24.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:50:24.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:50:24.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:50:24.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:50:24.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:49:49', tmtdew=1.51, humidity=90.31, cloud=0.0, wind=43.02, temperature=7.03, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:49:39.302', atlas_cloud=1, atlas_rain=1, zp_data=[0.17824999999999847, 0.16875000000000107, 0.2837499999999995, 0.31049999999999933, 0.16750000000000043, 0.4197500000000005, 1.0079999999999991, 1.1692500000000008, 0.5874999999999995, 0.36599999999999966, 0.66425, 0.6360000000000001, 0.2859999999999996, 0.4342499999999987, 1.2119999999999997, 2.1469999999999994, 0.8652499999999996, 0.5674999999999999, 1.1594999999999995, 1.5437499999999993, 0.2934999999999981, 0.42524999999999835, 1.098250000000001, 2.4487500000000004, 0.990499999999999, 0.5994999999999999, 1.0347499999999998, 1.1645000000000003, 0.3959999999999999, 0.46050000000000235, 0.6240000000000014, nan, 1.220749999999999], zp_timestamp='2026-02-14T23:47:00')
2026-02-15T01:50:24.147 [DEBUG] [Thread-195880] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:50: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-15T01:50:24.243 [DEBUG] [Thread-195885] [transport.py] [_log()] starting thread (client mode): 0xa57430a0
2026-02-15T01:50:24.243 [DEBUG] [Thread-195885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:50:24.258 [DEBUG] [Thread-195885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:50:24.258 [INFO] [Thread-195885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:50:24.265 [DEBUG] [Thread-195885] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:50:24.265 [DEBUG] [Thread-195885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:50:24.266 [DEBUG] [Thread-195885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:50:24.266 [DEBUG] [Thread-195885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:50:24.266 [DEBUG] [Thread-195885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:50:24.266 [DEBUG] [Thread-195885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:50:24.266 [DEBUG] [Thread-195885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:50:24.266 [DEBUG] [Thread-195885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:50:24.266 [DEBUG] [Thread-195885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:50:24.266 [DEBUG] [Thread-195885] [transport.py] [_log()] client lang: <none>
2026-02-15T01:50:24.266 [DEBUG] [Thread-195885] [transport.py] [_log()] server lang: <none>
2026-02-15T01:50:24.266 [DEBUG] [Thread-195885] [transport.py] [_log()] kex follows: False
2026-02-15T01:50:24.266 [DEBUG] [Thread-195885] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:50:24.266 [DEBUG] [Thread-195885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:50:24.266 [DEBUG] [Thread-195885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:50:24.266 [DEBUG] [Thread-195885] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:50:24.266 [DEBUG] [Thread-195885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:50:24.266 [DEBUG] [Thread-195885] [transport.py] [_log()] Compression: none
2026-02-15T01:50:24.266 [DEBUG] [Thread-195885] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:50:24.333 [DEBUG] [Thread-195885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:50:24.334 [DEBUG] [Thread-195885] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:50:24.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:50:24.335 [DEBUG] [Thread-195885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:50:24.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:50:24.389 [DEBUG] [Thread-195885] [transport.py] [_log()] userauth is OK
2026-02-15T01:50:24.389 [DEBUG] [Thread-195885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:50:24.390 [DEBUG] [Thread-195885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:50:24.390 [DEBUG] [Thread-195885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:50:24.390 [DEBUG] [Thread-195885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:50:24.409 [INFO] [Thread-195885] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:50:24.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-15T01:50:24.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:50:25.232 [DEBUG] [Thread-195885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:50:25.232 [DEBUG] [Thread-195885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:50:25.279 [DEBUG] [Thread-195885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:50:25.280 [DEBUG] [Thread-195885] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:50:25.289 [DEBUG] [Thread-195885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:50:25.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:50: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')
2026-02-15T01:50:25.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-15T01:50:25.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:50:25.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:50:25.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:50:25.326 [DEBUG] [Thread-195885] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:50:30.914 [DEBUG] [Thread-195887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:50:36.509 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:50:36.510 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:50:45.967 [DEBUG] [Thread-195888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:50:55.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:50:55.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:50:55.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:50:57.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 50, 24), 1.5, 90.33, 0.0, 43.86, 7.02, 1, 2, 0, 2, 0, 0),)
2026-02-15T01:50:57.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:50:24
2026-02-15T01:50:58.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:50:58.326 [DEBUG] [Thread-195889] [transport.py] [_log()] starting thread (client mode): 0xa5741ff0
2026-02-15T01:50:58.326 [DEBUG] [Thread-195889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:50:58.346 [DEBUG] [Thread-195889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:50:58.346 [INFO] [Thread-195889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:50:58.349 [DEBUG] [Thread-195889] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:50:58.349 [DEBUG] [Thread-195889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:50:58.349 [DEBUG] [Thread-195889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:50:58.349 [DEBUG] [Thread-195889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:50:58.349 [DEBUG] [Thread-195889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:50:58.349 [DEBUG] [Thread-195889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:50:58.349 [DEBUG] [Thread-195889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:50:58.349 [DEBUG] [Thread-195889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:50:58.349 [DEBUG] [Thread-195889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:50:58.349 [DEBUG] [Thread-195889] [transport.py] [_log()] client lang: <none>
2026-02-15T01:50:58.349 [DEBUG] [Thread-195889] [transport.py] [_log()] server lang: <none>
2026-02-15T01:50:58.349 [DEBUG] [Thread-195889] [transport.py] [_log()] kex follows: False
2026-02-15T01:50:58.349 [DEBUG] [Thread-195889] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:50:58.350 [DEBUG] [Thread-195889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:50:58.350 [DEBUG] [Thread-195889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:50:58.350 [DEBUG] [Thread-195889] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:50:58.350 [DEBUG] [Thread-195889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:50:58.350 [DEBUG] [Thread-195889] [transport.py] [_log()] Compression: none
2026-02-15T01:50:58.350 [DEBUG] [Thread-195889] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:50:58.367 [DEBUG] [Thread-195889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:50:58.367 [DEBUG] [Thread-195889] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:50:58.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:50:58.368 [DEBUG] [Thread-195889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:50:58.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:50:58.370 [DEBUG] [Thread-195889] [transport.py] [_log()] userauth is OK
2026-02-15T01:50:58.371 [DEBUG] [Thread-195889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:50:58.371 [DEBUG] [Thread-195889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:50:58.371 [DEBUG] [Thread-195889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:50:58.371 [DEBUG] [Thread-195889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:50:58.402 [INFO] [Thread-195889] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:50:58.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:50:58.998 [DEBUG] [Thread-195889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:50:58.999 [DEBUG] [Thread-195889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:50:58.999 [DEBUG] [Thread-195889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:50:59.039 [DEBUG] [Thread-195889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:50:59.040 [DEBUG] [Thread-195889] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:50:59.043 [DEBUG] [Thread-195889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:50:59.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:50:59.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:50:59.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:50:59.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:50:59.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:50:59.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:50:59.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:50:59.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:50:59.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:50:59.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.993163 -999.00   +6.90  33.44     90   +5.40 1 1 2 3 1     0    0 1.10 -17.71 ZNESW 33.4 33.4 145.8 47.6 7.5 -23.8 7.3 -21.9 7.1 -21.6 7.5 -22.2
2026-02-15T01:50:59.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:50:59.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:50:59.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.993163
2026-02-15T01:50:59.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:50:59.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:50:59.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:50:59.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:50:59.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:50:59.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:50:24', tmtdew=1.5, humidity=90.33, cloud=0.0, wind=43.86, temperature=7.02, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:50:09.283', atlas_cloud=1, atlas_rain=1, zp_data=[0.17824999999999847, 0.16875000000000107, 0.2837499999999995, 0.31049999999999933, 0.16750000000000043, 0.4197500000000005, 1.0079999999999991, 1.1692500000000008, 0.5874999999999995, 0.36599999999999966, 0.66425, 0.6360000000000001, 0.2859999999999996, 0.4342499999999987, 1.2119999999999997, 2.1469999999999994, 0.8652499999999996, 0.5674999999999999, 1.1594999999999995, 1.5437499999999993, 0.2934999999999981, 0.42524999999999835, 1.098250000000001, 2.4487500000000004, 0.990499999999999, 0.5994999999999999, 1.0347499999999998, 1.1645000000000003, 0.3959999999999999, 0.46050000000000235, 0.6240000000000014, nan, 1.220749999999999], zp_timestamp='2026-02-14T23:47:00')
2026-02-15T01:50:59.071 [DEBUG] [Thread-195889] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:50:59.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-15T01:50:59.167 [DEBUG] [Thread-195892] [transport.py] [_log()] starting thread (client mode): 0xa2d6d990
2026-02-15T01:50:59.167 [DEBUG] [Thread-195892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:50:59.183 [DEBUG] [Thread-195892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:50:59.183 [INFO] [Thread-195892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:50:59.190 [DEBUG] [Thread-195892] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:50:59.191 [DEBUG] [Thread-195892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:50:59.191 [DEBUG] [Thread-195892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:50:59.191 [DEBUG] [Thread-195892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:50:59.192 [DEBUG] [Thread-195892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:50:59.192 [DEBUG] [Thread-195892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:50:59.192 [DEBUG] [Thread-195892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:50:59.192 [DEBUG] [Thread-195892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:50:59.192 [DEBUG] [Thread-195892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:50:59.192 [DEBUG] [Thread-195892] [transport.py] [_log()] client lang: <none>
2026-02-15T01:50:59.192 [DEBUG] [Thread-195892] [transport.py] [_log()] server lang: <none>
2026-02-15T01:50:59.192 [DEBUG] [Thread-195892] [transport.py] [_log()] kex follows: False
2026-02-15T01:50:59.192 [DEBUG] [Thread-195892] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:50:59.192 [DEBUG] [Thread-195892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:50:59.192 [DEBUG] [Thread-195892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:50:59.192 [DEBUG] [Thread-195892] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:50:59.192 [DEBUG] [Thread-195892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:50:59.193 [DEBUG] [Thread-195892] [transport.py] [_log()] Compression: none
2026-02-15T01:50:59.193 [DEBUG] [Thread-195892] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:50:59.250 [DEBUG] [Thread-195892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:50:59.250 [DEBUG] [Thread-195892] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:50:59.251 [DEBUG] [Thread-195892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:50:59.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:50:59.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:50:59.306 [DEBUG] [Thread-195892] [transport.py] [_log()] userauth is OK
2026-02-15T01:50:59.306 [DEBUG] [Thread-195892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:50:59.306 [DEBUG] [Thread-195892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:50:59.306 [DEBUG] [Thread-195892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:50:59.307 [DEBUG] [Thread-195892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:50:59.326 [INFO] [Thread-195892] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:50:59.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T01:50:59.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:51:00.108 [DEBUG] [Thread-195892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:51:00.108 [DEBUG] [Thread-195892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:51:00.156 [DEBUG] [Thread-195892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:51:00.156 [DEBUG] [Thread-195892] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:51:00.166 [DEBUG] [Thread-195892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:51:00.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:51: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')
2026-02-15T01:51:00.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-15T01:51:00.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:51:00.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:51:00.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:51:00.202 [DEBUG] [Thread-195892] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:51:01.005 [DEBUG] [Thread-195894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:51:14.396 [DEBUG] [Thread-195895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:51:16.056 [DEBUG] [Thread-195896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:51:30.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:51:30.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:51:30.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-15T01:51:31.091 [DEBUG] [Thread-195897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:51:32.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 51, 1), 1.5, 90.36, 0.0, 43.3, 7.03, 2, 2, 0, 2, 0, 0),)
2026-02-15T01:51:32.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:51:01
2026-02-15T01:51:32.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:51:32.606 [DEBUG] [Thread-195898] [transport.py] [_log()] starting thread (client mode): 0xa2d190f0
2026-02-15T01:51:32.607 [DEBUG] [Thread-195898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:51:32.626 [DEBUG] [Thread-195898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:51:32.626 [INFO] [Thread-195898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:51:32.629 [DEBUG] [Thread-195898] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:51:32.630 [DEBUG] [Thread-195898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:51:32.630 [DEBUG] [Thread-195898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:51:32.630 [DEBUG] [Thread-195898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:51:32.630 [DEBUG] [Thread-195898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:51:32.630 [DEBUG] [Thread-195898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:51:32.630 [DEBUG] [Thread-195898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:51:32.630 [DEBUG] [Thread-195898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:51:32.630 [DEBUG] [Thread-195898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:51:32.630 [DEBUG] [Thread-195898] [transport.py] [_log()] client lang: <none>
2026-02-15T01:51:32.630 [DEBUG] [Thread-195898] [transport.py] [_log()] server lang: <none>
2026-02-15T01:51:32.630 [DEBUG] [Thread-195898] [transport.py] [_log()] kex follows: False
2026-02-15T01:51:32.630 [DEBUG] [Thread-195898] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:51:32.630 [DEBUG] [Thread-195898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:51:32.630 [DEBUG] [Thread-195898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:51:32.631 [DEBUG] [Thread-195898] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:51:32.631 [DEBUG] [Thread-195898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:51:32.631 [DEBUG] [Thread-195898] [transport.py] [_log()] Compression: none
2026-02-15T01:51:32.631 [DEBUG] [Thread-195898] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:51:32.650 [DEBUG] [Thread-195898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:51:32.650 [DEBUG] [Thread-195898] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:51:32.651 [DEBUG] [Thread-195898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:51:32.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:51:32.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:51:32.692 [DEBUG] [Thread-195898] [transport.py] [_log()] userauth is OK
2026-02-15T01:51:32.693 [DEBUG] [Thread-195898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:51:32.693 [DEBUG] [Thread-195898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:51:32.693 [DEBUG] [Thread-195898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:51:32.693 [DEBUG] [Thread-195898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:51:32.725 [INFO] [Thread-195898] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:51:32.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:51:33.306 [DEBUG] [Thread-195898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:51:33.307 [DEBUG] [Thread-195898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:51:33.307 [DEBUG] [Thread-195898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:51:33.348 [DEBUG] [Thread-195898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:51:33.348 [DEBUG] [Thread-195898] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:51:33.351 [DEBUG] [Thread-195898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:51:33.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:51:33.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:51:33.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:51:33.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:51:33.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:51:33.369 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:51:33.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:51:33.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:51:33.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:51:33.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.993511 -999.00   +6.90  25.86     90   +5.40 1 1 1 3 1     0    0 1.07 -19.12 ZNESW 25.9 25.9 149.8 45.6 7.5 -23.3 7.3 -22.7 7.1 -21.8 7.5 -22.7
2026-02-15T01:51:33.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:51:33.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:51:33.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.993511
2026-02-15T01:51:33.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:51:33.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:51:33.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:51:33.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:51:33.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:51:33.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:51:01', tmtdew=1.5, humidity=90.36, cloud=0.0, wind=43.3, temperature=7.03, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:50:39.350', atlas_cloud=1, atlas_rain=1, zp_data=[0.13475000000000037, 0.22325000000000017, 0.04525000000000112, 0.0625, 0.10000000000000142, 0.14425000000000132, 0.12599999999999945, 0.151250000000001, 0.1319999999999979, 0.18299999999999983, 0.00975000000000037, 0.032999999999999474, 0.12650000000000006, 0.10125000000000028, 0.11999999999999922, 0.09999999999999964, 0.18925000000000125, 0.16999999999999993, 0.10099999999999909, 0.05624999999999858, 0.10699999999999932, 0.11274999999999835, 0.1252500000000012, 0.1432500000000001, 0.18099999999999916, 0.1515000000000004, 0.20274999999999999, 0.04049999999999976, 0.09100000000000108, 0.07000000000000028, 0.1590000000000007, 0.1750000000000007, 0.17125000000000057], zp_timestamp='2026-02-14T23:50:00')
2026-02-15T01:51:33.371 [DEBUG] [Thread-195898] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:51:33.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-15T01:51:36.714 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:51:36.715 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:51:46.127 [DEBUG] [Thread-195901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:52:01.180 [DEBUG] [Thread-195902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:52:14.468 [DEBUG] [Thread-195903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:52:16.215 [DEBUG] [Thread-195904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:52:31.250 [DEBUG] [Thread-195905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:52:36.926 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:52:36.927 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:52:46.287 [DEBUG] [Thread-195906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:53:01.325 [DEBUG] [Thread-195907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:53:14.524 [DEBUG] [Thread-195908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:53:16.362 [DEBUG] [Thread-195909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:53:31.398 [DEBUG] [Thread-195910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:53:37.133 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:53:37.134 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:53:46.432 [DEBUG] [Thread-195911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:53:48.344 [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-15T01:54:01.470 [DEBUG] [Thread-195912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:54:14.592 [DEBUG] [Thread-195913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:54:16.505 [DEBUG] [Thread-195914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:54:18.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:54:18.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:54:18.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:54:20.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 53, 59), 1.42, 90.53, 0.0, 43.42, 7.0, 2, 2, 0, 2, 0, 0),)
2026-02-15T01:54:20.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:53:59
2026-02-15T01:54:20.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:54:20.996 [DEBUG] [Thread-195915] [transport.py] [_log()] starting thread (client mode): 0xa2d014e0
2026-02-15T01:54:20.996 [DEBUG] [Thread-195915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:54:21.016 [DEBUG] [Thread-195915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:54:21.016 [INFO] [Thread-195915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:54:21.019 [DEBUG] [Thread-195915] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:54:21.020 [DEBUG] [Thread-195915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:54:21.020 [DEBUG] [Thread-195915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:54:21.020 [DEBUG] [Thread-195915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:54:21.020 [DEBUG] [Thread-195915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:54:21.020 [DEBUG] [Thread-195915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:54:21.020 [DEBUG] [Thread-195915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:54:21.020 [DEBUG] [Thread-195915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:54:21.020 [DEBUG] [Thread-195915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:54:21.020 [DEBUG] [Thread-195915] [transport.py] [_log()] client lang: <none>
2026-02-15T01:54:21.020 [DEBUG] [Thread-195915] [transport.py] [_log()] server lang: <none>
2026-02-15T01:54:21.020 [DEBUG] [Thread-195915] [transport.py] [_log()] kex follows: False
2026-02-15T01:54:21.020 [DEBUG] [Thread-195915] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:54:21.021 [DEBUG] [Thread-195915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:54:21.021 [DEBUG] [Thread-195915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:54:21.021 [DEBUG] [Thread-195915] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:54:21.021 [DEBUG] [Thread-195915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:54:21.022 [DEBUG] [Thread-195915] [transport.py] [_log()] Compression: none
2026-02-15T01:54:21.022 [DEBUG] [Thread-195915] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:54:21.043 [DEBUG] [Thread-195915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:54:21.044 [DEBUG] [Thread-195915] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:54:21.045 [DEBUG] [Thread-195915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:54:21.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:54:21.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:54:21.047 [DEBUG] [Thread-195915] [transport.py] [_log()] userauth is OK
2026-02-15T01:54:21.047 [DEBUG] [Thread-195915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:54:21.047 [DEBUG] [Thread-195915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:54:21.047 [DEBUG] [Thread-195915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:54:21.047 [DEBUG] [Thread-195915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:54:21.071 [INFO] [Thread-195915] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:54:21.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:54:21.883 [DEBUG] [Thread-195915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:54:21.884 [DEBUG] [Thread-195915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:54:21.884 [DEBUG] [Thread-195915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:54:21.924 [DEBUG] [Thread-195915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:54:21.925 [DEBUG] [Thread-195915] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:54:21.928 [DEBUG] [Thread-195915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:54:21.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:54:21.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:54:21.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:54:21.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:54:21.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:54:21.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:54:21.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:54:21.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:54:21.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:54:21.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.995594 -999.00   +6.80  30.87     90   +5.40 1 1 2 3 1     0    0 0.84 -25.60 ZNESW 30.9 30.9 143.8 36.9 7.4 -23.9 7.3 -22.4 7.0 -21.5 7.4 -22.9
2026-02-15T01:54:21.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:54:21.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:54:21.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.995594
2026-02-15T01:54:21.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:54:21.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:54:21.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:54:21.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:54:21.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:54:21.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:53:59', tmtdew=1.42, humidity=90.53, cloud=0.0, wind=43.42, temperature=7.0, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:53:39.322', atlas_cloud=1, atlas_rain=1, zp_data=[0.13475000000000037, 0.22325000000000017, 0.04525000000000112, 0.0625, 0.10000000000000142, 0.14425000000000132, 0.12599999999999945, 0.151250000000001, 0.1319999999999979, 0.18299999999999983, 0.00975000000000037, 0.032999999999999474, 0.12650000000000006, 0.10125000000000028, 0.11999999999999922, 0.09999999999999964, 0.18925000000000125, 0.16999999999999993, 0.10099999999999909, 0.05624999999999858, 0.10699999999999932, 0.11274999999999835, 0.1252500000000012, 0.1432500000000001, 0.18099999999999916, 0.1515000000000004, 0.20274999999999999, 0.04049999999999976, 0.09100000000000108, 0.07000000000000028, 0.1590000000000007, 0.1750000000000007, 0.17125000000000057], zp_timestamp='2026-02-14T23:50:00')
2026-02-15T01:54:21.954 [DEBUG] [Thread-195915] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:54:22.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-15T01:54:22.058 [DEBUG] [Thread-195918] [transport.py] [_log()] starting thread (client mode): 0xa2d85b40
2026-02-15T01:54:22.058 [DEBUG] [Thread-195918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:54:22.078 [DEBUG] [Thread-195918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:54:22.078 [INFO] [Thread-195918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:54:22.085 [DEBUG] [Thread-195918] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:54:22.086 [DEBUG] [Thread-195918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:54:22.086 [DEBUG] [Thread-195918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:54:22.086 [DEBUG] [Thread-195918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:54:22.086 [DEBUG] [Thread-195918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:54:22.086 [DEBUG] [Thread-195918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:54:22.086 [DEBUG] [Thread-195918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:54:22.086 [DEBUG] [Thread-195918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:54:22.086 [DEBUG] [Thread-195918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:54:22.086 [DEBUG] [Thread-195918] [transport.py] [_log()] client lang: <none>
2026-02-15T01:54:22.086 [DEBUG] [Thread-195918] [transport.py] [_log()] server lang: <none>
2026-02-15T01:54:22.086 [DEBUG] [Thread-195918] [transport.py] [_log()] kex follows: False
2026-02-15T01:54:22.086 [DEBUG] [Thread-195918] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:54:22.086 [DEBUG] [Thread-195918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:54:22.086 [DEBUG] [Thread-195918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:54:22.087 [DEBUG] [Thread-195918] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:54:22.087 [DEBUG] [Thread-195918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:54:22.087 [DEBUG] [Thread-195918] [transport.py] [_log()] Compression: none
2026-02-15T01:54:22.087 [DEBUG] [Thread-195918] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:54:22.149 [DEBUG] [Thread-195918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:54:22.150 [DEBUG] [Thread-195918] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:54:22.150 [DEBUG] [Thread-195918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:54:22.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:54:22.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:54:22.213 [DEBUG] [Thread-195918] [transport.py] [_log()] userauth is OK
2026-02-15T01:54:22.213 [DEBUG] [Thread-195918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:54:22.213 [DEBUG] [Thread-195918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:54:22.213 [DEBUG] [Thread-195918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:54:22.214 [DEBUG] [Thread-195918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:54:22.235 [INFO] [Thread-195918] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:54:22.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-15T01:54:22.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:54:23.033 [DEBUG] [Thread-195918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:54:23.033 [DEBUG] [Thread-195918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:54:23.081 [DEBUG] [Thread-195918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:54:23.081 [DEBUG] [Thread-195918] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:54:23.090 [DEBUG] [Thread-195918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:54:23.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:54:23.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T01:54:23.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-15T01:54:23.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:54:23.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:54:23.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:54:23.124 [DEBUG] [Thread-195918] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:54:31.538 [DEBUG] [Thread-195920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:54:37.345 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:54:37.346 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:54:46.592 [DEBUG] [Thread-195921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:54:53.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:54:53.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:54:53.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-15T01:54:55.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 54, 34), 1.83, 88.09, 0.0, 46.71, 7.3, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:54:55.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:54:34
2026-02-15T01:54:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:54:55.641 [DEBUG] [Thread-195922] [transport.py] [_log()] starting thread (client mode): 0xa57d56f0
2026-02-15T01:54:55.641 [DEBUG] [Thread-195922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:54:55.662 [DEBUG] [Thread-195922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:54:55.662 [INFO] [Thread-195922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:54:55.665 [DEBUG] [Thread-195922] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:54:55.665 [DEBUG] [Thread-195922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:54:55.665 [DEBUG] [Thread-195922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:54:55.665 [DEBUG] [Thread-195922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:54:55.665 [DEBUG] [Thread-195922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:54:55.665 [DEBUG] [Thread-195922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:54:55.665 [DEBUG] [Thread-195922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:54:55.665 [DEBUG] [Thread-195922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:54:55.665 [DEBUG] [Thread-195922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:54:55.665 [DEBUG] [Thread-195922] [transport.py] [_log()] client lang: <none>
2026-02-15T01:54:55.665 [DEBUG] [Thread-195922] [transport.py] [_log()] server lang: <none>
2026-02-15T01:54:55.665 [DEBUG] [Thread-195922] [transport.py] [_log()] kex follows: False
2026-02-15T01:54:55.665 [DEBUG] [Thread-195922] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:54:55.665 [DEBUG] [Thread-195922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:54:55.665 [DEBUG] [Thread-195922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:54:55.665 [DEBUG] [Thread-195922] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:54:55.665 [DEBUG] [Thread-195922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:54:55.665 [DEBUG] [Thread-195922] [transport.py] [_log()] Compression: none
2026-02-15T01:54:55.665 [DEBUG] [Thread-195922] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:54:55.680 [DEBUG] [Thread-195922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:54:55.680 [DEBUG] [Thread-195922] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:54:55.680 [DEBUG] [Thread-195922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:54:55.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:54:55.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:54:55.682 [DEBUG] [Thread-195922] [transport.py] [_log()] userauth is OK
2026-02-15T01:54:55.682 [DEBUG] [Thread-195922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:54:55.682 [DEBUG] [Thread-195922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:54:55.682 [DEBUG] [Thread-195922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:54:55.682 [DEBUG] [Thread-195922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:54:55.700 [INFO] [Thread-195922] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:54:55.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:54:56.346 [DEBUG] [Thread-195922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:54:56.346 [DEBUG] [Thread-195922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:54:56.347 [DEBUG] [Thread-195922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:54:56.387 [DEBUG] [Thread-195922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:54:56.388 [DEBUG] [Thread-195922] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:54:56.391 [DEBUG] [Thread-195922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:54:56.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:54:56.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:54:56.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:54:56.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:54:56.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:54:56.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:54:56.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:54:56.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:54:56.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:54:56.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.995941 -999.00   +6.80  35.11     90   +5.40 1 1 2 3 1     0    0 0.75 -28.36 ZNESW 35.1 35.1 146.2 40.5 7.4 -23.9 7.2 -23.1 7.0 -21.9 7.4 -23.3
2026-02-15T01:54:56.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:54:56.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:54:56.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.995941
2026-02-15T01:54:56.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:54:56.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:54:56.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:54:56.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:54:56.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:54:56.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:54:34', tmtdew=1.83, humidity=88.09, cloud=0.0, wind=46.71, temperature=7.3, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:54:09.302', atlas_cloud=1, atlas_rain=1, zp_data=[0.13475000000000037, 0.22325000000000017, 0.04525000000000112, 0.0625, 0.10000000000000142, 0.14425000000000132, 0.12599999999999945, 0.151250000000001, 0.1319999999999979, 0.18299999999999983, 0.00975000000000037, 0.032999999999999474, 0.12650000000000006, 0.10125000000000028, 0.11999999999999922, 0.09999999999999964, 0.18925000000000125, 0.16999999999999993, 0.10099999999999909, 0.05624999999999858, 0.10699999999999932, 0.11274999999999835, 0.1252500000000012, 0.1432500000000001, 0.18099999999999916, 0.1515000000000004, 0.20274999999999999, 0.04049999999999976, 0.09100000000000108, 0.07000000000000028, 0.1590000000000007, 0.1750000000000007, 0.17125000000000057], zp_timestamp='2026-02-14T23:53:00')
2026-02-15T01:54:56.421 [DEBUG] [Thread-195922] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:54:56.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-15T01:55:01.628 [DEBUG] [Thread-195925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:55:14.665 [DEBUG] [Thread-195926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:55:16.683 [DEBUG] [Thread-195927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:55:31.720 [DEBUG] [Thread-195928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:55:37.553 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:55:37.554 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:55:46.760 [DEBUG] [Thread-195929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:56:01.802 [DEBUG] [Thread-195930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:56:14.721 [DEBUG] [Thread-195931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:56:16.838 [DEBUG] [Thread-195932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:56:31.873 [DEBUG] [Thread-195933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:56:37.753 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:56:37.754 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:56:46.908 [DEBUG] [Thread-195934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:57:01.949 [DEBUG] [Thread-195935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:57:09.048 [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-15T01:57:14.778 [DEBUG] [Thread-195936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:57:16.986 [DEBUG] [Thread-195937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:57:32.022 [DEBUG] [Thread-195938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:57:37.964 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:57:37.965 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:57:39.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:57:39.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:57:39.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-15T01:57:40.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 57, 30), 1.35, 91.16, 0.0, 43.21, 7.0, 2, 2, 0, 2, 0, 0),)
2026-02-15T01:57:40.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:57:30
2026-02-15T01:57:41.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:57:41.499 [DEBUG] [Thread-195939] [transport.py] [_log()] starting thread (client mode): 0xa57d5990
2026-02-15T01:57:41.499 [DEBUG] [Thread-195939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:57:41.519 [DEBUG] [Thread-195939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:57:41.519 [INFO] [Thread-195939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:57:41.522 [DEBUG] [Thread-195939] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:57:41.522 [DEBUG] [Thread-195939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:57:41.522 [DEBUG] [Thread-195939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:57:41.522 [DEBUG] [Thread-195939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:57:41.522 [DEBUG] [Thread-195939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:57:41.522 [DEBUG] [Thread-195939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:57:41.522 [DEBUG] [Thread-195939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:57:41.522 [DEBUG] [Thread-195939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:57:41.522 [DEBUG] [Thread-195939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:57:41.522 [DEBUG] [Thread-195939] [transport.py] [_log()] client lang: <none>
2026-02-15T01:57:41.523 [DEBUG] [Thread-195939] [transport.py] [_log()] server lang: <none>
2026-02-15T01:57:41.523 [DEBUG] [Thread-195939] [transport.py] [_log()] kex follows: False
2026-02-15T01:57:41.523 [DEBUG] [Thread-195939] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:57:41.523 [DEBUG] [Thread-195939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:57:41.523 [DEBUG] [Thread-195939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:57:41.523 [DEBUG] [Thread-195939] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:57:41.523 [DEBUG] [Thread-195939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:57:41.523 [DEBUG] [Thread-195939] [transport.py] [_log()] Compression: none
2026-02-15T01:57:41.523 [DEBUG] [Thread-195939] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:57:41.540 [DEBUG] [Thread-195939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:57:41.541 [DEBUG] [Thread-195939] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:57:41.542 [DEBUG] [Thread-195939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:57:41.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:57:41.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:57:41.584 [DEBUG] [Thread-195939] [transport.py] [_log()] userauth is OK
2026-02-15T01:57:41.584 [DEBUG] [Thread-195939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:57:41.584 [DEBUG] [Thread-195939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:57:41.584 [DEBUG] [Thread-195939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:57:41.584 [DEBUG] [Thread-195939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:57:41.619 [INFO] [Thread-195939] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:57:41.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:57:42.403 [DEBUG] [Thread-195939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:57:42.403 [DEBUG] [Thread-195939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:57:42.403 [DEBUG] [Thread-195939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:57:42.444 [DEBUG] [Thread-195939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:57:42.445 [DEBUG] [Thread-195939] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:57:42.448 [DEBUG] [Thread-195939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:57:42.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:57:42.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:57:42.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:57:42.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:57:42.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:57:42.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:57:42.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:57:42.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:57:42.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:57:42.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.998025 -999.00   +6.80  34.70     90   +5.40 1 1 2 3 1     0    0 0.74 -26.36 ZNESW 34.7 34.7 149.2 46.2 7.4 -24.0 7.2 -23.2 7.0 -21.9 7.4 -23.2
2026-02-15T01:57:42.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:57:42.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:57:42.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.998025
2026-02-15T01:57:42.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:57:42.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:57:42.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:57:42.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:57:42.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:57:42.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:57:30', tmtdew=1.35, humidity=91.16, cloud=0.0, wind=43.21, temperature=7.0, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:57:09.360', atlas_cloud=1, atlas_rain=1, zp_data=[0.1842499999999987, 0.1412500000000012, 0.05525000000000091, 0.1064999999999987, 0.19650000000000034, 0.2322500000000005, 0.2560000000000002, 0.15525000000000055, 0.09649999999999892, 0.16049999999999898, 0.09975000000000023, 0.06850000000000023, 0.19200000000000017, 0.16324999999999967, 0.17849999999999966, 0.13149999999999906, 0.1792499999999997, 0.23150000000000048, 0.16149999999999842, 0.09274999999999878, 0.14499999999999957, 0.12374999999999936, 0.17125000000000057, 0.28275000000000006, 0.17049999999999876, 0.17549999999999955, 0.1797500000000003, 0.07500000000000107, 0.11100000000000065, 0.09050000000000225, 0.20200000000000173, 0.39250000000000007, 0.15274999999999928], zp_timestamp='2026-02-14T23:56:00')
2026-02-15T01:57:42.475 [DEBUG] [Thread-195939] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:57:42.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-15T01:57:42.583 [DEBUG] [Thread-195942] [transport.py] [_log()] starting thread (client mode): 0xa2d6de10
2026-02-15T01:57:42.583 [DEBUG] [Thread-195942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:57:42.602 [DEBUG] [Thread-195942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:57:42.602 [INFO] [Thread-195942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:57:42.610 [DEBUG] [Thread-195942] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:57:42.610 [DEBUG] [Thread-195942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:57:42.610 [DEBUG] [Thread-195942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:57:42.610 [DEBUG] [Thread-195942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:57:42.610 [DEBUG] [Thread-195942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:57:42.610 [DEBUG] [Thread-195942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:57:42.610 [DEBUG] [Thread-195942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:57:42.610 [DEBUG] [Thread-195942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:57:42.610 [DEBUG] [Thread-195942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:57:42.610 [DEBUG] [Thread-195942] [transport.py] [_log()] client lang: <none>
2026-02-15T01:57:42.610 [DEBUG] [Thread-195942] [transport.py] [_log()] server lang: <none>
2026-02-15T01:57:42.610 [DEBUG] [Thread-195942] [transport.py] [_log()] kex follows: False
2026-02-15T01:57:42.610 [DEBUG] [Thread-195942] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:57:42.611 [DEBUG] [Thread-195942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:57:42.611 [DEBUG] [Thread-195942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:57:42.611 [DEBUG] [Thread-195942] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:57:42.611 [DEBUG] [Thread-195942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:57:42.611 [DEBUG] [Thread-195942] [transport.py] [_log()] Compression: none
2026-02-15T01:57:42.611 [DEBUG] [Thread-195942] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:57:42.668 [DEBUG] [Thread-195942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:57:42.669 [DEBUG] [Thread-195942] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:57:42.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:57:42.670 [DEBUG] [Thread-195942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:57:42.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:57:42.725 [DEBUG] [Thread-195942] [transport.py] [_log()] userauth is OK
2026-02-15T01:57:42.725 [DEBUG] [Thread-195942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:57:42.725 [DEBUG] [Thread-195942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:57:42.725 [DEBUG] [Thread-195942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:57:42.725 [DEBUG] [Thread-195942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:57:42.744 [INFO] [Thread-195942] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:57:42.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-15T01:57:42.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:57:43.547 [DEBUG] [Thread-195942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:57:43.547 [DEBUG] [Thread-195942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:57:43.595 [DEBUG] [Thread-195942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:57:43.595 [DEBUG] [Thread-195942] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:57:43.603 [DEBUG] [Thread-195942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:57:43.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:57:43.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-15T01:57:43.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-15T01:57:43.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:57:43.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:57:43.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:57:43.637 [DEBUG] [Thread-195942] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:57:47.059 [DEBUG] [Thread-195944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:58:02.120 [DEBUG] [Thread-195945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:58:13.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:58:13.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:58:13.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:58:14.846 [DEBUG] [Thread-195946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:58:16.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 58, 6), 1.34, 91.19, 0.0, 41.89, 7.0, 2, 2, 0, 2, 0, 0),)
2026-02-15T01:58:16.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:58:06
2026-02-15T01:58:16.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:58:16.615 [DEBUG] [Thread-195947] [transport.py] [_log()] starting thread (client mode): 0xa2d6f0d0
2026-02-15T01:58:16.616 [DEBUG] [Thread-195947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:58:16.636 [DEBUG] [Thread-195947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:58:16.636 [INFO] [Thread-195947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:58:16.639 [DEBUG] [Thread-195947] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:58:16.639 [DEBUG] [Thread-195947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:58:16.639 [DEBUG] [Thread-195947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:58:16.639 [DEBUG] [Thread-195947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:58:16.639 [DEBUG] [Thread-195947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:58:16.640 [DEBUG] [Thread-195947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:58:16.640 [DEBUG] [Thread-195947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:58:16.640 [DEBUG] [Thread-195947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:58:16.640 [DEBUG] [Thread-195947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:58:16.640 [DEBUG] [Thread-195947] [transport.py] [_log()] client lang: <none>
2026-02-15T01:58:16.640 [DEBUG] [Thread-195947] [transport.py] [_log()] server lang: <none>
2026-02-15T01:58:16.640 [DEBUG] [Thread-195947] [transport.py] [_log()] kex follows: False
2026-02-15T01:58:16.640 [DEBUG] [Thread-195947] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:58:16.640 [DEBUG] [Thread-195947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:58:16.640 [DEBUG] [Thread-195947] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:58:16.641 [DEBUG] [Thread-195947] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:58:16.641 [DEBUG] [Thread-195947] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:58:16.641 [DEBUG] [Thread-195947] [transport.py] [_log()] Compression: none
2026-02-15T01:58:16.641 [DEBUG] [Thread-195947] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:58:16.658 [DEBUG] [Thread-195947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:58:16.659 [DEBUG] [Thread-195947] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:58:16.659 [DEBUG] [Thread-195947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:58:16.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:58:16.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:58:16.662 [DEBUG] [Thread-195947] [transport.py] [_log()] userauth is OK
2026-02-15T01:58:16.662 [DEBUG] [Thread-195947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:58:16.662 [DEBUG] [Thread-195947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:58:16.662 [DEBUG] [Thread-195947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:58:16.662 [DEBUG] [Thread-195947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:58:16.678 [INFO] [Thread-195947] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:58:16.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:58:17.156 [DEBUG] [Thread-195949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:58:17.263 [DEBUG] [Thread-195947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:58:17.263 [DEBUG] [Thread-195947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:58:17.264 [DEBUG] [Thread-195947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:58:17.304 [DEBUG] [Thread-195947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:58:17.305 [DEBUG] [Thread-195947] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:58:17.308 [DEBUG] [Thread-195947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:58:17.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:58:17.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:58:17.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:58:17.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:58:17.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:58:17.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:58:17.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:58:17.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:58:17.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:58:17.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.998372 -999.00   +6.80  30.46     90   +5.40 1 1 2 3 1     0    0 0.78 -24.27 ZNESW 30.5 30.5 141.6 42.2 7.4 -23.8 7.2 -23.1 7.0 -21.8 7.4 -23.1
2026-02-15T01:58:17.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:58:17.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:58:17.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.998372
2026-02-15T01:58:17.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:58:17.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:58:17.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:58:17.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:58:17.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:58:17.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:58:06', tmtdew=1.34, humidity=91.19, cloud=0.0, wind=41.89, temperature=7.0, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:57:39.341', atlas_cloud=1, atlas_rain=1, zp_data=[0.1842499999999987, 0.1412500000000012, 0.05525000000000091, 0.1064999999999987, 0.19650000000000034, 0.2322500000000005, 0.2560000000000002, 0.15525000000000055, 0.09649999999999892, 0.16049999999999898, 0.09975000000000023, 0.06850000000000023, 0.19200000000000017, 0.16324999999999967, 0.17849999999999966, 0.13149999999999906, 0.1792499999999997, 0.23150000000000048, 0.16149999999999842, 0.09274999999999878, 0.14499999999999957, 0.12374999999999936, 0.17125000000000057, 0.28275000000000006, 0.17049999999999876, 0.17549999999999955, 0.1797500000000003, 0.07500000000000107, 0.11100000000000065, 0.09050000000000225, 0.20200000000000173, 0.39250000000000007, 0.15274999999999928], zp_timestamp='2026-02-14T23:56:00')
2026-02-15T01:58:17.334 [DEBUG] [Thread-195947] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:58:17.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-15T01:58:17.430 [DEBUG] [Thread-195951] [transport.py] [_log()] starting thread (client mode): 0xa2d78b50
2026-02-15T01:58:17.430 [DEBUG] [Thread-195951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:58:17.445 [DEBUG] [Thread-195951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:58:17.445 [INFO] [Thread-195951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:58:17.453 [DEBUG] [Thread-195951] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:58:17.453 [DEBUG] [Thread-195951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:58:17.453 [DEBUG] [Thread-195951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:58:17.453 [DEBUG] [Thread-195951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:58:17.453 [DEBUG] [Thread-195951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:58:17.453 [DEBUG] [Thread-195951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:58:17.453 [DEBUG] [Thread-195951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:58:17.453 [DEBUG] [Thread-195951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:58:17.453 [DEBUG] [Thread-195951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:58:17.453 [DEBUG] [Thread-195951] [transport.py] [_log()] client lang: <none>
2026-02-15T01:58:17.453 [DEBUG] [Thread-195951] [transport.py] [_log()] server lang: <none>
2026-02-15T01:58:17.453 [DEBUG] [Thread-195951] [transport.py] [_log()] kex follows: False
2026-02-15T01:58:17.453 [DEBUG] [Thread-195951] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:58:17.453 [DEBUG] [Thread-195951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:58:17.453 [DEBUG] [Thread-195951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:58:17.453 [DEBUG] [Thread-195951] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:58:17.454 [DEBUG] [Thread-195951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:58:17.454 [DEBUG] [Thread-195951] [transport.py] [_log()] Compression: none
2026-02-15T01:58:17.454 [DEBUG] [Thread-195951] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:58:17.513 [DEBUG] [Thread-195951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:58:17.513 [DEBUG] [Thread-195951] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:58:17.514 [DEBUG] [Thread-195951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:58:17.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:58:17.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:58:17.569 [DEBUG] [Thread-195951] [transport.py] [_log()] userauth is OK
2026-02-15T01:58:17.569 [DEBUG] [Thread-195951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:58:17.569 [DEBUG] [Thread-195951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:58:17.569 [DEBUG] [Thread-195951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:58:17.569 [DEBUG] [Thread-195951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:58:17.594 [INFO] [Thread-195951] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:58:17.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-15T01:58:17.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:58:18.342 [DEBUG] [Thread-195951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:58:18.342 [DEBUG] [Thread-195951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:58:18.389 [DEBUG] [Thread-195951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:58:18.390 [DEBUG] [Thread-195951] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:58:18.399 [DEBUG] [Thread-195951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:58:18.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:58:18.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-15T01:58:18.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-15T01:58:18.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:58:18.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:58:18.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:58:18.436 [DEBUG] [Thread-195951] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:58:32.190 [DEBUG] [Thread-195953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:58:38.166 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:58:38.167 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:58:47.243 [DEBUG] [Thread-195954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:58:48.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:58:48.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:58:48.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-15T01:58:50.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 58, 41), 1.78, 88.42, 0.0, 46.78, 7.33, 1, 1, 0, 2, 1, 0),)
2026-02-15T01:58:50.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:58:41
2026-02-15T01:58:50.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:58:50.933 [DEBUG] [Thread-195955] [transport.py] [_log()] starting thread (client mode): 0xa2de1420
2026-02-15T01:58:50.933 [DEBUG] [Thread-195955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:58:50.953 [DEBUG] [Thread-195955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:58:50.953 [INFO] [Thread-195955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:58:50.957 [DEBUG] [Thread-195955] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:58:50.957 [DEBUG] [Thread-195955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:58:50.957 [DEBUG] [Thread-195955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:58:50.957 [DEBUG] [Thread-195955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:58:50.957 [DEBUG] [Thread-195955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:58:50.957 [DEBUG] [Thread-195955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:58:50.957 [DEBUG] [Thread-195955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:58:50.957 [DEBUG] [Thread-195955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:58:50.957 [DEBUG] [Thread-195955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:58:50.957 [DEBUG] [Thread-195955] [transport.py] [_log()] client lang: <none>
2026-02-15T01:58:50.957 [DEBUG] [Thread-195955] [transport.py] [_log()] server lang: <none>
2026-02-15T01:58:50.958 [DEBUG] [Thread-195955] [transport.py] [_log()] kex follows: False
2026-02-15T01:58:50.958 [DEBUG] [Thread-195955] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:58:50.958 [DEBUG] [Thread-195955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:58:50.958 [DEBUG] [Thread-195955] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:58:50.958 [DEBUG] [Thread-195955] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:58:50.958 [DEBUG] [Thread-195955] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:58:50.958 [DEBUG] [Thread-195955] [transport.py] [_log()] Compression: none
2026-02-15T01:58:50.958 [DEBUG] [Thread-195955] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:58:50.974 [DEBUG] [Thread-195955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:58:50.974 [DEBUG] [Thread-195955] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:58:50.974 [DEBUG] [Thread-195955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:58:50.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:58:50.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:58:50.975 [DEBUG] [Thread-195955] [transport.py] [_log()] userauth is OK
2026-02-15T01:58:50.975 [DEBUG] [Thread-195955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:58:50.975 [DEBUG] [Thread-195955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:58:50.975 [DEBUG] [Thread-195955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:58:50.975 [DEBUG] [Thread-195955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:58:50.984 [INFO] [Thread-195955] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:58:50.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:58:51.603 [DEBUG] [Thread-195955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:58:51.604 [DEBUG] [Thread-195955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:58:51.604 [DEBUG] [Thread-195955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:58:51.644 [DEBUG] [Thread-195955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:58:51.645 [DEBUG] [Thread-195955] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:58:51.647 [DEBUG] [Thread-195955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:58:51.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:58:51.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:58:51.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:58:51.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:58:51.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:58:51.671 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:58:51.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:58:51.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:58:51.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:58:51.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.998719 -999.00   +6.80  27.62     90   +5.40 1 1 1 3 1     0    0 0.84 -22.87 ZNESW 27.6 27.6 140.8 40.8 7.4 -23.9 7.2 -22.9 7.0 -21.9 7.3 -23.0
2026-02-15T01:58:51.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:58:51.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:58:51.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.998719
2026-02-15T01:58:51.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:58:51.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:58:51.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:58:51.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:58:51.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:58:51.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:58:41', tmtdew=1.78, humidity=88.42, cloud=0.0, wind=46.78, temperature=7.33, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:58:09.322', atlas_cloud=1, atlas_rain=1, zp_data=[0.1842499999999987, 0.1412500000000012, 0.05525000000000091, 0.1064999999999987, 0.19650000000000034, 0.2322500000000005, 0.2560000000000002, 0.15525000000000055, 0.09649999999999892, 0.16049999999999898, 0.09975000000000023, 0.06850000000000023, 0.19200000000000017, 0.16324999999999967, 0.17849999999999966, 0.13149999999999906, 0.1792499999999997, 0.23150000000000048, 0.16149999999999842, 0.09274999999999878, 0.14499999999999957, 0.12374999999999936, 0.17125000000000057, 0.28275000000000006, 0.17049999999999876, 0.17549999999999955, 0.1797500000000003, 0.07500000000000107, 0.11100000000000065, 0.09050000000000225, 0.20200000000000173, 0.39250000000000007, 0.15274999999999928], zp_timestamp='2026-02-14T23:56:00')
2026-02-15T01:58:51.673 [DEBUG] [Thread-195955] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:58:51.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-15T01:58:51.771 [DEBUG] [Thread-195958] [transport.py] [_log()] starting thread (client mode): 0xa2de0040
2026-02-15T01:58:51.771 [DEBUG] [Thread-195958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:58:51.786 [DEBUG] [Thread-195958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:58:51.786 [INFO] [Thread-195958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:58:51.794 [DEBUG] [Thread-195958] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:58:51.794 [DEBUG] [Thread-195958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:58:51.794 [DEBUG] [Thread-195958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:58:51.794 [DEBUG] [Thread-195958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:58:51.794 [DEBUG] [Thread-195958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:58:51.794 [DEBUG] [Thread-195958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:58:51.794 [DEBUG] [Thread-195958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:58:51.794 [DEBUG] [Thread-195958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:58:51.794 [DEBUG] [Thread-195958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:58:51.794 [DEBUG] [Thread-195958] [transport.py] [_log()] client lang: <none>
2026-02-15T01:58:51.794 [DEBUG] [Thread-195958] [transport.py] [_log()] server lang: <none>
2026-02-15T01:58:51.794 [DEBUG] [Thread-195958] [transport.py] [_log()] kex follows: False
2026-02-15T01:58:51.794 [DEBUG] [Thread-195958] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:58:51.794 [DEBUG] [Thread-195958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:58:51.794 [DEBUG] [Thread-195958] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:58:51.794 [DEBUG] [Thread-195958] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:58:51.794 [DEBUG] [Thread-195958] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:58:51.794 [DEBUG] [Thread-195958] [transport.py] [_log()] Compression: none
2026-02-15T01:58:51.794 [DEBUG] [Thread-195958] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:58:51.855 [DEBUG] [Thread-195958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:58:51.855 [DEBUG] [Thread-195958] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:58:51.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:58:51.856 [DEBUG] [Thread-195958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:58:51.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:58:51.911 [DEBUG] [Thread-195958] [transport.py] [_log()] userauth is OK
2026-02-15T01:58:51.912 [DEBUG] [Thread-195958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:58:51.912 [DEBUG] [Thread-195958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:58:51.912 [DEBUG] [Thread-195958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:58:51.912 [DEBUG] [Thread-195958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:58:51.936 [INFO] [Thread-195958] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:58:51.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-15T01:58:51.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:58:52.753 [DEBUG] [Thread-195958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:58:52.753 [DEBUG] [Thread-195958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:58:52.801 [DEBUG] [Thread-195958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:58:52.802 [DEBUG] [Thread-195958] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:58:52.811 [DEBUG] [Thread-195958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:58:52.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:58:52.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-15T01:58:52.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-15T01:58:52.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:58:52.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:58:52.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:58:52.847 [DEBUG] [Thread-195958] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:59:02.279 [DEBUG] [Thread-195960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:59:14.932 [DEBUG] [Thread-195961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:59:17.324 [DEBUG] [Thread-195962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:59:22.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:59:22.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:59:22.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T01:59:24.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 59, 17), 1.28, 91.26, 0.0, 40.92, 6.95, 2, 2, 0, 2, 0, 0),)
2026-02-15T01:59:24.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:59:17
2026-02-15T01:59:25.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:59:25.247 [DEBUG] [Thread-195963] [transport.py] [_log()] starting thread (client mode): 0xa57d5600
2026-02-15T01:59:25.247 [DEBUG] [Thread-195963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:59:25.267 [DEBUG] [Thread-195963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:59:25.267 [INFO] [Thread-195963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:59:25.270 [DEBUG] [Thread-195963] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:59:25.270 [DEBUG] [Thread-195963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:59:25.270 [DEBUG] [Thread-195963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:59:25.270 [DEBUG] [Thread-195963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:59:25.270 [DEBUG] [Thread-195963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:59:25.270 [DEBUG] [Thread-195963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:59:25.270 [DEBUG] [Thread-195963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:59:25.271 [DEBUG] [Thread-195963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:59:25.271 [DEBUG] [Thread-195963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:59:25.271 [DEBUG] [Thread-195963] [transport.py] [_log()] client lang: <none>
2026-02-15T01:59:25.271 [DEBUG] [Thread-195963] [transport.py] [_log()] server lang: <none>
2026-02-15T01:59:25.271 [DEBUG] [Thread-195963] [transport.py] [_log()] kex follows: False
2026-02-15T01:59:25.271 [DEBUG] [Thread-195963] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:59:25.271 [DEBUG] [Thread-195963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:59:25.271 [DEBUG] [Thread-195963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:59:25.271 [DEBUG] [Thread-195963] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:59:25.271 [DEBUG] [Thread-195963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:59:25.271 [DEBUG] [Thread-195963] [transport.py] [_log()] Compression: none
2026-02-15T01:59:25.271 [DEBUG] [Thread-195963] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:59:25.287 [DEBUG] [Thread-195963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:59:25.287 [DEBUG] [Thread-195963] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:59:25.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:59:25.288 [DEBUG] [Thread-195963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:59:25.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:59:25.332 [DEBUG] [Thread-195963] [transport.py] [_log()] userauth is OK
2026-02-15T01:59:25.333 [DEBUG] [Thread-195963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:59:25.333 [DEBUG] [Thread-195963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:59:25.333 [DEBUG] [Thread-195963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:59:25.333 [DEBUG] [Thread-195963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:59:25.353 [INFO] [Thread-195963] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:59:25.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:59:25.989 [DEBUG] [Thread-195963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:59:25.990 [DEBUG] [Thread-195963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:59:25.990 [DEBUG] [Thread-195963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T01:59:26.030 [DEBUG] [Thread-195963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:59:26.031 [DEBUG] [Thread-195963] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:59:26.034 [DEBUG] [Thread-195963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:59:26.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:59:26.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T01:59:26.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T01:59:26.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T01:59:26.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:59:26.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T01:59:26.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:59:26.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:59:26.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T01:59:26.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.999066 -999.00   +6.80  40.59     90   +5.40 1 1 2 3 1     0    0 0.83 -23.52 ZNESW 40.6 40.6 149.0 47.7 7.4 -23.7 7.2 -23.2 7.0 -22.0 7.4 -23.2
2026-02-15T01:59:26.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T01:59:26.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T01:59:26.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.999066
2026-02-15T01:59:26.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T01:59:26.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T01:59:26.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T01:59:26.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T01:59:26.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T01:59:26.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:59:17', tmtdew=1.28, humidity=91.26, cloud=0.0, wind=40.92, temperature=6.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:58:39.302', atlas_cloud=1, atlas_rain=1, zp_data=[0.1842499999999987, 0.1412500000000012, 0.05525000000000091, 0.1064999999999987, 0.19650000000000034, 0.2322500000000005, 0.2560000000000002, 0.15525000000000055, 0.09649999999999892, 0.16049999999999898, 0.09975000000000023, 0.06850000000000023, 0.19200000000000017, 0.16324999999999967, 0.17849999999999966, 0.13149999999999906, 0.1792499999999997, 0.23150000000000048, 0.16149999999999842, 0.09274999999999878, 0.14499999999999957, 0.12374999999999936, 0.17125000000000057, 0.28275000000000006, 0.17049999999999876, 0.17549999999999955, 0.1797500000000003, 0.07500000000000107, 0.11100000000000065, 0.09050000000000225, 0.20200000000000173, 0.39250000000000007, 0.15274999999999928], zp_timestamp='2026-02-14T23:56:00')
2026-02-15T01:59:26.062 [DEBUG] [Thread-195963] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:59:26.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T01:59:26.157 [DEBUG] [Thread-195966] [transport.py] [_log()] starting thread (client mode): 0xa2d69000
2026-02-15T01:59:26.157 [DEBUG] [Thread-195966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:59:26.172 [DEBUG] [Thread-195966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T01:59:26.172 [INFO] [Thread-195966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T01:59:26.179 [DEBUG] [Thread-195966] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:59:26.180 [DEBUG] [Thread-195966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T01:59:26.180 [DEBUG] [Thread-195966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:59:26.180 [DEBUG] [Thread-195966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:59:26.180 [DEBUG] [Thread-195966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:59:26.180 [DEBUG] [Thread-195966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:59:26.180 [DEBUG] [Thread-195966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:59:26.180 [DEBUG] [Thread-195966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:59:26.180 [DEBUG] [Thread-195966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:59:26.180 [DEBUG] [Thread-195966] [transport.py] [_log()] client lang: <none>
2026-02-15T01:59:26.180 [DEBUG] [Thread-195966] [transport.py] [_log()] server lang: <none>
2026-02-15T01:59:26.180 [DEBUG] [Thread-195966] [transport.py] [_log()] kex follows: False
2026-02-15T01:59:26.181 [DEBUG] [Thread-195966] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:59:26.181 [DEBUG] [Thread-195966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:59:26.181 [DEBUG] [Thread-195966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:59:26.181 [DEBUG] [Thread-195966] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:59:26.181 [DEBUG] [Thread-195966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:59:26.181 [DEBUG] [Thread-195966] [transport.py] [_log()] Compression: none
2026-02-15T01:59:26.181 [DEBUG] [Thread-195966] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:59:26.239 [DEBUG] [Thread-195966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:59:26.240 [DEBUG] [Thread-195966] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:59:26.241 [DEBUG] [Thread-195966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T01:59:26.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T01:59:26.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:59:26.296 [DEBUG] [Thread-195966] [transport.py] [_log()] userauth is OK
2026-02-15T01:59:26.296 [DEBUG] [Thread-195966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:59:26.296 [DEBUG] [Thread-195966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:59:26.296 [DEBUG] [Thread-195966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T01:59:26.297 [DEBUG] [Thread-195966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:59:26.315 [INFO] [Thread-195966] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:59:26.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-15T01:59:26.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T01:59:27.129 [DEBUG] [Thread-195966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T01:59:27.130 [DEBUG] [Thread-195966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T01:59:27.177 [DEBUG] [Thread-195966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T01:59:27.177 [DEBUG] [Thread-195966] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T01:59:27.188 [DEBUG] [Thread-195966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T01:59:27.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T01:59:27.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-15T01:59:27.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-15T01:59:27.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T01:59:27.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T01:59:27.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T01:59:27.221 [DEBUG] [Thread-195966] [transport.py] [_log()] EOF in transport thread
2026-02-15T01:59:32.357 [DEBUG] [Thread-195968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:59:38.368 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:59:38.369 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:59:47.411 [DEBUG] [Thread-195969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T01:59:57.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T01:59:57.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T01:59:57.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-15T01:59:59.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 59, 17), 1.28, 91.26, 0.0, 40.92, 6.95, 2, 2, 0, 2, 0, 0),)
2026-02-15T01:59:59.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:59:17
2026-02-15T01:59:59.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T01:59:59.842 [DEBUG] [Thread-195970] [transport.py] [_log()] starting thread (client mode): 0xa2de0a60
2026-02-15T01:59:59.842 [DEBUG] [Thread-195970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T01:59:59.861 [DEBUG] [Thread-195970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T01:59:59.861 [INFO] [Thread-195970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T01:59:59.864 [DEBUG] [Thread-195970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T01:59:59.865 [DEBUG] [Thread-195970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T01:59:59.865 [DEBUG] [Thread-195970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T01:59:59.865 [DEBUG] [Thread-195970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:59:59.865 [DEBUG] [Thread-195970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T01:59:59.865 [DEBUG] [Thread-195970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:59:59.865 [DEBUG] [Thread-195970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T01:59:59.865 [DEBUG] [Thread-195970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T01:59:59.865 [DEBUG] [Thread-195970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T01:59:59.865 [DEBUG] [Thread-195970] [transport.py] [_log()] client lang: <none>
2026-02-15T01:59:59.865 [DEBUG] [Thread-195970] [transport.py] [_log()] server lang: <none>
2026-02-15T01:59:59.865 [DEBUG] [Thread-195970] [transport.py] [_log()] kex follows: False
2026-02-15T01:59:59.865 [DEBUG] [Thread-195970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T01:59:59.865 [DEBUG] [Thread-195970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T01:59:59.865 [DEBUG] [Thread-195970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T01:59:59.865 [DEBUG] [Thread-195970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T01:59:59.866 [DEBUG] [Thread-195970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T01:59:59.866 [DEBUG] [Thread-195970] [transport.py] [_log()] Compression: none
2026-02-15T01:59:59.866 [DEBUG] [Thread-195970] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T01:59:59.878 [DEBUG] [Thread-195970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T01:59:59.878 [DEBUG] [Thread-195970] [transport.py] [_log()] Switch to new keys ...
2026-02-15T01:59:59.879 [DEBUG] [Thread-195970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T01:59:59.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T01:59:59.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T01:59:59.881 [DEBUG] [Thread-195970] [transport.py] [_log()] userauth is OK
2026-02-15T01:59:59.881 [DEBUG] [Thread-195970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T01:59:59.882 [DEBUG] [Thread-195970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T01:59:59.882 [DEBUG] [Thread-195970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T01:59:59.882 [DEBUG] [Thread-195970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T01:59:59.904 [INFO] [Thread-195970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T01:59:59.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:00:00.564 [DEBUG] [Thread-195970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:00:00.564 [DEBUG] [Thread-195970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:00:00.564 [DEBUG] [Thread-195970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:00:00.605 [DEBUG] [Thread-195970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:00:00.605 [DEBUG] [Thread-195970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:00:00.608 [DEBUG] [Thread-195970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:00:00.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:00:00.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:00:00.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:00:00.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:00:00.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:00:00.632 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:00:00.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:00:00.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:00:00.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:00:00.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61085.999761 -999.00   +6.80  30.86     90   +5.40 1 1 2 3 1     0    0 0.84 -24.15 ZNESW 30.9 30.9 149.8 47.0 7.4 -23.8 7.2 -22.7 7.0 -21.7 7.3 -22.8
2026-02-15T02:00:00.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:00:00.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:00:00.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61085.999761
2026-02-15T02:00:00.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:00:00.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:00:00.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:00:00.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:00:00.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:00:00.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:59:17', tmtdew=1.28, humidity=91.26, cloud=0.0, wind=40.92, temperature=6.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-14T23:59:39.350', atlas_cloud=1, atlas_rain=1, zp_data=[0.1842499999999987, 0.1412500000000012, 0.05525000000000091, 0.1064999999999987, 0.19650000000000034, 0.2322500000000005, 0.2560000000000002, 0.15525000000000055, 0.09649999999999892, 0.16049999999999898, 0.09975000000000023, 0.06850000000000023, 0.19200000000000017, 0.16324999999999967, 0.17849999999999966, 0.13149999999999906, 0.1792499999999997, 0.23150000000000048, 0.16149999999999842, 0.09274999999999878, 0.14499999999999957, 0.12374999999999936, 0.17125000000000057, 0.28275000000000006, 0.17049999999999876, 0.17549999999999955, 0.1797500000000003, 0.07500000000000107, 0.11100000000000065, 0.09050000000000225, 0.20200000000000173, 0.39250000000000007, 0.15274999999999928], zp_timestamp='2026-02-14T23:56:00')
2026-02-15T02:00:00.635 [DEBUG] [Thread-195970] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:00:00.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-15T02:00:00.731 [DEBUG] [Thread-195973] [transport.py] [_log()] starting thread (client mode): 0xa2de05b0
2026-02-15T02:00:00.731 [DEBUG] [Thread-195973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:00:00.746 [DEBUG] [Thread-195973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:00:00.746 [INFO] [Thread-195973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:00:00.753 [DEBUG] [Thread-195973] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:00:00.754 [DEBUG] [Thread-195973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:00:00.754 [DEBUG] [Thread-195973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:00:00.754 [DEBUG] [Thread-195973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:00:00.754 [DEBUG] [Thread-195973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:00:00.754 [DEBUG] [Thread-195973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:00:00.754 [DEBUG] [Thread-195973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:00:00.754 [DEBUG] [Thread-195973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:00:00.754 [DEBUG] [Thread-195973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:00:00.754 [DEBUG] [Thread-195973] [transport.py] [_log()] client lang: <none>
2026-02-15T02:00:00.754 [DEBUG] [Thread-195973] [transport.py] [_log()] server lang: <none>
2026-02-15T02:00:00.754 [DEBUG] [Thread-195973] [transport.py] [_log()] kex follows: False
2026-02-15T02:00:00.754 [DEBUG] [Thread-195973] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:00:00.754 [DEBUG] [Thread-195973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:00:00.754 [DEBUG] [Thread-195973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:00:00.755 [DEBUG] [Thread-195973] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:00:00.755 [DEBUG] [Thread-195973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:00:00.755 [DEBUG] [Thread-195973] [transport.py] [_log()] Compression: none
2026-02-15T02:00:00.755 [DEBUG] [Thread-195973] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:00:00.812 [DEBUG] [Thread-195973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:00:00.812 [DEBUG] [Thread-195973] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:00:00.813 [DEBUG] [Thread-195973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:00:00.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:00:00.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:00:00.868 [DEBUG] [Thread-195973] [transport.py] [_log()] userauth is OK
2026-02-15T02:00:00.868 [DEBUG] [Thread-195973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:00:00.868 [DEBUG] [Thread-195973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:00:00.869 [DEBUG] [Thread-195973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:00:00.869 [DEBUG] [Thread-195973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:00:00.887 [INFO] [Thread-195973] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:00:00.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T02:00:00.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:00:01.694 [DEBUG] [Thread-195973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:00:01.694 [DEBUG] [Thread-195973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:00:01.742 [DEBUG] [Thread-195973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:00:01.742 [DEBUG] [Thread-195973] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:00:01.751 [DEBUG] [Thread-195973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:00:01.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:00:01.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-15T02:00:01.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-15T02:00:01.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:00:01.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:00:01.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:00:01.785 [DEBUG] [Thread-195973] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:00:02.449 [DEBUG] [Thread-195975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:00:15.015 [DEBUG] [Thread-195976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:00:17.491 [DEBUG] [Thread-195977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:00:31.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:00:31.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:00:31.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:00:32.528 [DEBUG] [Thread-195978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:00:33.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 1, 59, 52), 1.33, 91.24, 0.0, 39.36, 6.95, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:00:33.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 01:59:52
2026-02-15T02:00:34.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:00:34.210 [DEBUG] [Thread-195979] [transport.py] [_log()] starting thread (client mode): 0xa2de1570
2026-02-15T02:00:34.211 [DEBUG] [Thread-195979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:00:34.231 [DEBUG] [Thread-195979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:00:34.231 [INFO] [Thread-195979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:00:34.235 [DEBUG] [Thread-195979] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:00:34.235 [DEBUG] [Thread-195979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:00:34.235 [DEBUG] [Thread-195979] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:00:34.235 [DEBUG] [Thread-195979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:00:34.235 [DEBUG] [Thread-195979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:00:34.235 [DEBUG] [Thread-195979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:00:34.235 [DEBUG] [Thread-195979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:00:34.235 [DEBUG] [Thread-195979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:00:34.235 [DEBUG] [Thread-195979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:00:34.235 [DEBUG] [Thread-195979] [transport.py] [_log()] client lang: <none>
2026-02-15T02:00:34.235 [DEBUG] [Thread-195979] [transport.py] [_log()] server lang: <none>
2026-02-15T02:00:34.235 [DEBUG] [Thread-195979] [transport.py] [_log()] kex follows: False
2026-02-15T02:00:34.235 [DEBUG] [Thread-195979] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:00:34.235 [DEBUG] [Thread-195979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:00:34.235 [DEBUG] [Thread-195979] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:00:34.235 [DEBUG] [Thread-195979] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:00:34.235 [DEBUG] [Thread-195979] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:00:34.235 [DEBUG] [Thread-195979] [transport.py] [_log()] Compression: none
2026-02-15T02:00:34.235 [DEBUG] [Thread-195979] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:00:34.250 [DEBUG] [Thread-195979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:00:34.250 [DEBUG] [Thread-195979] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:00:34.251 [DEBUG] [Thread-195979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:00:34.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:00:34.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:00:34.251 [DEBUG] [Thread-195979] [transport.py] [_log()] userauth is OK
2026-02-15T02:00:34.251 [DEBUG] [Thread-195979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:00:34.251 [DEBUG] [Thread-195979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:00:34.252 [DEBUG] [Thread-195979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:00:34.252 [DEBUG] [Thread-195979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:00:34.262 [INFO] [Thread-195979] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:00:34.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:00:34.903 [DEBUG] [Thread-195979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:00:34.904 [DEBUG] [Thread-195979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:00:34.904 [DEBUG] [Thread-195979] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:00:34.944 [DEBUG] [Thread-195979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:00:34.945 [DEBUG] [Thread-195979] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:00:34.948 [DEBUG] [Thread-195979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:00:34.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:00:34.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:00:34.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:00:34.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:00:34.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:00:34.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:00:34.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:00:34.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:00:34.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:00:34.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.000108 -999.00   +6.90  32.50     90   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 32.5 32.5 138.6 43.4 7.4 -23.3 7.2 -22.4 7.0 -21.5 7.3 -23.0
2026-02-15T02:00:34.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:00:34.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:00:34.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.000108
2026-02-15T02:00:34.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:00:34.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:00:34.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:00:34.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:00:34.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:00:34.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T01:59:52', tmtdew=1.33, humidity=91.24, cloud=0.0, wind=39.36, temperature=6.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:00:09.331', atlas_cloud=1, atlas_rain=1, zp_data=[0.6967499999999998, 0.17075000000000173, 0.13724999999999987, 0.3619999999999983, 0.617, 0.5972500000000007, 0.7374999999999989, 0.322750000000001, 0.1534999999999993, 0.12599999999999945, 0.0727499999999992, 0.1534999999999993, 0.34949999999999903, 0.32624999999999993, 0.3019999999999996, 0.2289999999999992, 0.1407500000000006, 0.12049999999999983, 0.1269999999999989, 0.1322499999999991, 0.1919999999999984, 0.16574999999999918, 0.17225000000000001, 0.167250000000001, 0.09499999999999886, 0.15000000000000036, 0.17425000000000068, 0.13199999999999967, 0.1745000000000001, 0.10200000000000031, 0.2035000000000018, 0.20300000000000118, 0.12324999999999875], zp_timestamp='2026-02-14T23:59:00')
2026-02-15T02:00:34.974 [DEBUG] [Thread-195979] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:00:35.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-15T02:00:35.070 [DEBUG] [Thread-195982] [transport.py] [_log()] starting thread (client mode): 0xa2d6c820
2026-02-15T02:00:35.070 [DEBUG] [Thread-195982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:00:35.085 [DEBUG] [Thread-195982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:00:35.085 [INFO] [Thread-195982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:00:35.092 [DEBUG] [Thread-195982] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:00:35.092 [DEBUG] [Thread-195982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:00:35.093 [DEBUG] [Thread-195982] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:00:35.093 [DEBUG] [Thread-195982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:00:35.093 [DEBUG] [Thread-195982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:00:35.093 [DEBUG] [Thread-195982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:00:35.093 [DEBUG] [Thread-195982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:00:35.093 [DEBUG] [Thread-195982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:00:35.093 [DEBUG] [Thread-195982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:00:35.093 [DEBUG] [Thread-195982] [transport.py] [_log()] client lang: <none>
2026-02-15T02:00:35.093 [DEBUG] [Thread-195982] [transport.py] [_log()] server lang: <none>
2026-02-15T02:00:35.094 [DEBUG] [Thread-195982] [transport.py] [_log()] kex follows: False
2026-02-15T02:00:35.094 [DEBUG] [Thread-195982] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:00:35.094 [DEBUG] [Thread-195982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:00:35.094 [DEBUG] [Thread-195982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:00:35.094 [DEBUG] [Thread-195982] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:00:35.094 [DEBUG] [Thread-195982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:00:35.094 [DEBUG] [Thread-195982] [transport.py] [_log()] Compression: none
2026-02-15T02:00:35.094 [DEBUG] [Thread-195982] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:00:35.152 [DEBUG] [Thread-195982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:00:35.153 [DEBUG] [Thread-195982] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:00:35.153 [DEBUG] [Thread-195982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:00:35.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:00:35.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:00:35.209 [DEBUG] [Thread-195982] [transport.py] [_log()] userauth is OK
2026-02-15T02:00:35.209 [DEBUG] [Thread-195982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:00:35.209 [DEBUG] [Thread-195982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:00:35.209 [DEBUG] [Thread-195982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:00:35.209 [DEBUG] [Thread-195982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:00:35.228 [INFO] [Thread-195982] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:00:35.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-15T02:00:35.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:00:36.022 [DEBUG] [Thread-195982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:00:36.022 [DEBUG] [Thread-195982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:00:36.071 [DEBUG] [Thread-195982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:00:36.071 [DEBUG] [Thread-195982] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:00:36.080 [DEBUG] [Thread-195982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:00:36.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:00:36.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:00:36.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-15T02:00:36.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:00:36.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:00:36.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:00:36.117 [DEBUG] [Thread-195982] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:00:38.571 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:00:38.572 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:00:47.562 [DEBUG] [Thread-195984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:01:02.613 [DEBUG] [Thread-195985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:01:06.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:01:06.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:01:06.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-15T02:01:08.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 0, 28), 1.34, 91.21, 0.0, 36.75, 6.98, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:01:08.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:00:28
2026-02-15T02:01:08.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:01:08.696 [DEBUG] [Thread-195986] [transport.py] [_log()] starting thread (client mode): 0xa2de0370
2026-02-15T02:01:08.696 [DEBUG] [Thread-195986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:01:08.717 [DEBUG] [Thread-195986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:01:08.717 [INFO] [Thread-195986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:01:08.720 [DEBUG] [Thread-195986] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:01:08.720 [DEBUG] [Thread-195986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:01:08.720 [DEBUG] [Thread-195986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:01:08.720 [DEBUG] [Thread-195986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:01:08.720 [DEBUG] [Thread-195986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:01:08.720 [DEBUG] [Thread-195986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:01:08.720 [DEBUG] [Thread-195986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:01:08.721 [DEBUG] [Thread-195986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:01:08.721 [DEBUG] [Thread-195986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:01:08.721 [DEBUG] [Thread-195986] [transport.py] [_log()] client lang: <none>
2026-02-15T02:01:08.721 [DEBUG] [Thread-195986] [transport.py] [_log()] server lang: <none>
2026-02-15T02:01:08.721 [DEBUG] [Thread-195986] [transport.py] [_log()] kex follows: False
2026-02-15T02:01:08.721 [DEBUG] [Thread-195986] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:01:08.721 [DEBUG] [Thread-195986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:01:08.721 [DEBUG] [Thread-195986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:01:08.721 [DEBUG] [Thread-195986] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:01:08.721 [DEBUG] [Thread-195986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:01:08.721 [DEBUG] [Thread-195986] [transport.py] [_log()] Compression: none
2026-02-15T02:01:08.721 [DEBUG] [Thread-195986] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:01:08.738 [DEBUG] [Thread-195986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:01:08.739 [DEBUG] [Thread-195986] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:01:08.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:01:08.740 [DEBUG] [Thread-195986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:01:08.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:01:08.742 [DEBUG] [Thread-195986] [transport.py] [_log()] userauth is OK
2026-02-15T02:01:08.742 [DEBUG] [Thread-195986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:01:08.742 [DEBUG] [Thread-195986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:01:08.742 [DEBUG] [Thread-195986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:01:08.742 [DEBUG] [Thread-195986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:01:08.762 [INFO] [Thread-195986] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:01:08.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:01:09.336 [DEBUG] [Thread-195986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:01:09.337 [DEBUG] [Thread-195986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:01:09.337 [DEBUG] [Thread-195986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:01:09.377 [DEBUG] [Thread-195986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:01:09.378 [DEBUG] [Thread-195986] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:01:09.381 [DEBUG] [Thread-195986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:01:09.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:01:09.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:01:09.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:01:09.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:01:09.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:01:09.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:01:09.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:01:09.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:01:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:01:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.000455 -999.00   +6.80  31.87     90   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 31.9 31.9 144.4 42.4 7.4 -23.8 7.2 -21.2 7.0 -21.0 7.4 -22.2
2026-02-15T02:01:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:01:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:01:09.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.000455
2026-02-15T02:01:09.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:01:09.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:01:09.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:01:09.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:01:09.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:01:09.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:00:28', tmtdew=1.34, humidity=91.21, cloud=0.0, wind=36.75, temperature=6.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:00:39.312', atlas_cloud=1, atlas_rain=1, zp_data=[0.6967499999999998, 0.17075000000000173, 0.13724999999999987, 0.3619999999999983, 0.617, 0.5972500000000007, 0.7374999999999989, 0.322750000000001, 0.1534999999999993, 0.12599999999999945, 0.0727499999999992, 0.1534999999999993, 0.34949999999999903, 0.32624999999999993, 0.3019999999999996, 0.2289999999999992, 0.1407500000000006, 0.12049999999999983, 0.1269999999999989, 0.1322499999999991, 0.1919999999999984, 0.16574999999999918, 0.17225000000000001, 0.167250000000001, 0.09499999999999886, 0.15000000000000036, 0.17425000000000068, 0.13199999999999967, 0.1745000000000001, 0.10200000000000031, 0.2035000000000018, 0.20300000000000118, 0.12324999999999875], zp_timestamp='2026-02-14T23:59:00')
2026-02-15T02:01:09.408 [DEBUG] [Thread-195986] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:01:09.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-15T02:01:09.504 [DEBUG] [Thread-195989] [transport.py] [_log()] starting thread (client mode): 0xa2de2170
2026-02-15T02:01:09.504 [DEBUG] [Thread-195989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:01:09.519 [DEBUG] [Thread-195989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:01:09.519 [INFO] [Thread-195989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:01:09.526 [DEBUG] [Thread-195989] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:01:09.527 [DEBUG] [Thread-195989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:01:09.527 [DEBUG] [Thread-195989] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:01:09.527 [DEBUG] [Thread-195989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:01:09.527 [DEBUG] [Thread-195989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:01:09.527 [DEBUG] [Thread-195989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:01:09.527 [DEBUG] [Thread-195989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:01:09.527 [DEBUG] [Thread-195989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:01:09.527 [DEBUG] [Thread-195989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:01:09.527 [DEBUG] [Thread-195989] [transport.py] [_log()] client lang: <none>
2026-02-15T02:01:09.527 [DEBUG] [Thread-195989] [transport.py] [_log()] server lang: <none>
2026-02-15T02:01:09.527 [DEBUG] [Thread-195989] [transport.py] [_log()] kex follows: False
2026-02-15T02:01:09.527 [DEBUG] [Thread-195989] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:01:09.527 [DEBUG] [Thread-195989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:01:09.528 [DEBUG] [Thread-195989] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:01:09.528 [DEBUG] [Thread-195989] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:01:09.528 [DEBUG] [Thread-195989] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:01:09.528 [DEBUG] [Thread-195989] [transport.py] [_log()] Compression: none
2026-02-15T02:01:09.528 [DEBUG] [Thread-195989] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:01:09.585 [DEBUG] [Thread-195989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:01:09.585 [DEBUG] [Thread-195989] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:01:09.586 [DEBUG] [Thread-195989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:01:09.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:01:09.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:01:09.641 [DEBUG] [Thread-195989] [transport.py] [_log()] userauth is OK
2026-02-15T02:01:09.641 [DEBUG] [Thread-195989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:01:09.642 [DEBUG] [Thread-195989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:01:09.642 [DEBUG] [Thread-195989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:01:09.642 [DEBUG] [Thread-195989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:01:09.660 [INFO] [Thread-195989] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:01:09.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-15T02:01:09.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:01:10.519 [DEBUG] [Thread-195989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:01:10.519 [DEBUG] [Thread-195989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:01:10.567 [DEBUG] [Thread-195989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:01:10.567 [DEBUG] [Thread-195989] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:01:10.577 [DEBUG] [Thread-195989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:01:10.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:01:10.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-15T02:01:10.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-15T02:01:10.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:01:10.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:01:10.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:01:10.613 [DEBUG] [Thread-195989] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:01:15.086 [DEBUG] [Thread-195991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:01:17.653 [DEBUG] [Thread-195992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:01:32.703 [DEBUG] [Thread-195993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:01:38.775 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:01:38.776 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:01:40.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:01:40.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:01:40.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-15T02:01:43.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 1, 4), 1.34, 91.19, 0.0, 38.94, 6.98, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:01:43.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:01:04
2026-02-15T02:01:43.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:01:43.677 [DEBUG] [Thread-195994] [transport.py] [_log()] starting thread (client mode): 0xa2de3fd0
2026-02-15T02:01:43.677 [DEBUG] [Thread-195994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:01:43.697 [DEBUG] [Thread-195994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:01:43.698 [INFO] [Thread-195994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:01:43.701 [DEBUG] [Thread-195994] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:01:43.701 [DEBUG] [Thread-195994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:01:43.701 [DEBUG] [Thread-195994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:01:43.701 [DEBUG] [Thread-195994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:01:43.701 [DEBUG] [Thread-195994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:01:43.701 [DEBUG] [Thread-195994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:01:43.701 [DEBUG] [Thread-195994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:01:43.701 [DEBUG] [Thread-195994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:01:43.701 [DEBUG] [Thread-195994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:01:43.701 [DEBUG] [Thread-195994] [transport.py] [_log()] client lang: <none>
2026-02-15T02:01:43.701 [DEBUG] [Thread-195994] [transport.py] [_log()] server lang: <none>
2026-02-15T02:01:43.701 [DEBUG] [Thread-195994] [transport.py] [_log()] kex follows: False
2026-02-15T02:01:43.701 [DEBUG] [Thread-195994] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:01:43.701 [DEBUG] [Thread-195994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:01:43.701 [DEBUG] [Thread-195994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:01:43.702 [DEBUG] [Thread-195994] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:01:43.702 [DEBUG] [Thread-195994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:01:43.702 [DEBUG] [Thread-195994] [transport.py] [_log()] Compression: none
2026-02-15T02:01:43.702 [DEBUG] [Thread-195994] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:01:43.718 [DEBUG] [Thread-195994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:01:43.719 [DEBUG] [Thread-195994] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:01:43.719 [DEBUG] [Thread-195994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:01:43.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:01:43.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:01:43.721 [DEBUG] [Thread-195994] [transport.py] [_log()] userauth is OK
2026-02-15T02:01:43.721 [DEBUG] [Thread-195994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:01:43.721 [DEBUG] [Thread-195994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:01:43.722 [DEBUG] [Thread-195994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:01:43.722 [DEBUG] [Thread-195994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:01:43.740 [INFO] [Thread-195994] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:01:43.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:01:44.378 [DEBUG] [Thread-195994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:01:44.378 [DEBUG] [Thread-195994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:01:44.378 [DEBUG] [Thread-195994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:01:44.418 [DEBUG] [Thread-195994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:01:44.418 [DEBUG] [Thread-195994] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:01:44.422 [DEBUG] [Thread-195994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:01:44.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:01:44.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:01:44.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:01:44.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:01:44.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:01:44.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:01:44.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:01:44.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:01:44.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:01:44.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.000802 -999.00   +6.90  33.22     90   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 33.2 33.2 147.5 38.8 7.4 -23.3 7.2 -22.8 7.0 -21.5 7.3 -23.0
2026-02-15T02:01:44.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:01:44.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:01:44.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.000802
2026-02-15T02:01:44.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:01:44.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:01:44.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:01:44.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:01:44.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:01:44.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:01:04', tmtdew=1.34, humidity=91.19, cloud=0.0, wind=38.94, temperature=6.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:01:09.293', atlas_cloud=1, atlas_rain=1, zp_data=[0.6967499999999998, 0.17075000000000173, 0.13724999999999987, 0.3619999999999983, 0.617, 0.5972500000000007, 0.7374999999999989, 0.322750000000001, 0.1534999999999993, 0.12599999999999945, 0.0727499999999992, 0.1534999999999993, 0.34949999999999903, 0.32624999999999993, 0.3019999999999996, 0.2289999999999992, 0.1407500000000006, 0.12049999999999983, 0.1269999999999989, 0.1322499999999991, 0.1919999999999984, 0.16574999999999918, 0.17225000000000001, 0.167250000000001, 0.09499999999999886, 0.15000000000000036, 0.17425000000000068, 0.13199999999999967, 0.1745000000000001, 0.10200000000000031, 0.2035000000000018, 0.20300000000000118, 0.12324999999999875], zp_timestamp='2026-02-14T23:59:00')
2026-02-15T02:01:44.449 [DEBUG] [Thread-195994] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:01:44.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-15T02:01:44.546 [DEBUG] [Thread-195997] [transport.py] [_log()] starting thread (client mode): 0xa2d856c0
2026-02-15T02:01:44.546 [DEBUG] [Thread-195997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:01:44.560 [DEBUG] [Thread-195997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:01:44.560 [INFO] [Thread-195997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:01:44.568 [DEBUG] [Thread-195997] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:01:44.568 [DEBUG] [Thread-195997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:01:44.568 [DEBUG] [Thread-195997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:01:44.568 [DEBUG] [Thread-195997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:01:44.569 [DEBUG] [Thread-195997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:01:44.569 [DEBUG] [Thread-195997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:01:44.569 [DEBUG] [Thread-195997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:01:44.569 [DEBUG] [Thread-195997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:01:44.569 [DEBUG] [Thread-195997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:01:44.569 [DEBUG] [Thread-195997] [transport.py] [_log()] client lang: <none>
2026-02-15T02:01:44.569 [DEBUG] [Thread-195997] [transport.py] [_log()] server lang: <none>
2026-02-15T02:01:44.569 [DEBUG] [Thread-195997] [transport.py] [_log()] kex follows: False
2026-02-15T02:01:44.569 [DEBUG] [Thread-195997] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:01:44.569 [DEBUG] [Thread-195997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:01:44.569 [DEBUG] [Thread-195997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:01:44.569 [DEBUG] [Thread-195997] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:01:44.569 [DEBUG] [Thread-195997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:01:44.569 [DEBUG] [Thread-195997] [transport.py] [_log()] Compression: none
2026-02-15T02:01:44.569 [DEBUG] [Thread-195997] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:01:44.625 [DEBUG] [Thread-195997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:01:44.625 [DEBUG] [Thread-195997] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:01:44.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:01:44.626 [DEBUG] [Thread-195997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:01:44.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:01:44.682 [DEBUG] [Thread-195997] [transport.py] [_log()] userauth is OK
2026-02-15T02:01:44.682 [DEBUG] [Thread-195997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:01:44.682 [DEBUG] [Thread-195997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:01:44.682 [DEBUG] [Thread-195997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:01:44.682 [DEBUG] [Thread-195997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:01:44.702 [INFO] [Thread-195997] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:01:44.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-15T02:01:44.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:01:45.500 [DEBUG] [Thread-195997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:01:45.500 [DEBUG] [Thread-195997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:01:45.548 [DEBUG] [Thread-195997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:01:45.549 [DEBUG] [Thread-195997] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:01:45.558 [DEBUG] [Thread-195997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:01:45.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:01:45.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-15T02:01:45.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-15T02:01:45.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:01:45.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:01:45.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:01:45.595 [DEBUG] [Thread-195997] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:01:47.741 [DEBUG] [Thread-195999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:02:02.793 [DEBUG] [Thread-196000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:02:15.143 [DEBUG] [Thread-196001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:02:15.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:02:15.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:02:15.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-15T02:02:17.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 1, 39), 1.78, 88.45, 0.0, 46.08, 7.37, 1, 1, 0, 2, 1, 0),)
2026-02-15T02:02:17.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:01:39
2026-02-15T02:02:17.831 [DEBUG] [Thread-196002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:02:18.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:02:18.206 [DEBUG] [Thread-196003] [transport.py] [_log()] starting thread (client mode): 0xa2d86440
2026-02-15T02:02:18.206 [DEBUG] [Thread-196003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:02:18.226 [DEBUG] [Thread-196003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:02:18.226 [INFO] [Thread-196003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:02:18.229 [DEBUG] [Thread-196003] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:02:18.229 [DEBUG] [Thread-196003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:02:18.229 [DEBUG] [Thread-196003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:02:18.229 [DEBUG] [Thread-196003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:02:18.230 [DEBUG] [Thread-196003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:02:18.230 [DEBUG] [Thread-196003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:02:18.230 [DEBUG] [Thread-196003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:02:18.230 [DEBUG] [Thread-196003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:02:18.230 [DEBUG] [Thread-196003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:02:18.230 [DEBUG] [Thread-196003] [transport.py] [_log()] client lang: <none>
2026-02-15T02:02:18.230 [DEBUG] [Thread-196003] [transport.py] [_log()] server lang: <none>
2026-02-15T02:02:18.230 [DEBUG] [Thread-196003] [transport.py] [_log()] kex follows: False
2026-02-15T02:02:18.230 [DEBUG] [Thread-196003] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:02:18.230 [DEBUG] [Thread-196003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:02:18.230 [DEBUG] [Thread-196003] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:02:18.230 [DEBUG] [Thread-196003] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:02:18.230 [DEBUG] [Thread-196003] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:02:18.230 [DEBUG] [Thread-196003] [transport.py] [_log()] Compression: none
2026-02-15T02:02:18.230 [DEBUG] [Thread-196003] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:02:18.248 [DEBUG] [Thread-196003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:02:18.248 [DEBUG] [Thread-196003] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:02:18.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:02:18.249 [DEBUG] [Thread-196003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:02:18.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:02:18.251 [DEBUG] [Thread-196003] [transport.py] [_log()] userauth is OK
2026-02-15T02:02:18.252 [DEBUG] [Thread-196003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:02:18.252 [DEBUG] [Thread-196003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:02:18.252 [DEBUG] [Thread-196003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:02:18.252 [DEBUG] [Thread-196003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:02:18.286 [INFO] [Thread-196003] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:02:18.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:02:18.921 [DEBUG] [Thread-196003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:02:18.922 [DEBUG] [Thread-196003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:02:18.922 [DEBUG] [Thread-196003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:02:18.962 [DEBUG] [Thread-196003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:02:18.963 [DEBUG] [Thread-196003] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:02:18.966 [DEBUG] [Thread-196003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:02:18.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:02:18.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:02:18.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:02:18.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:02:18.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:02:18.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:02:18.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:02:18.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:02:18.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:02:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.001149 -999.00   +6.80  30.53     90   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 30.5 30.5 144.0 43.7 7.4 -23.8 7.2 -22.5 7.0 -21.7 7.3 -22.9
2026-02-15T02:02:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:02:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:02:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.001149
2026-02-15T02:02:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:02:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:02:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:02:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:02:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:02:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:01:39', tmtdew=1.78, humidity=88.45, cloud=0.0, wind=46.08, temperature=7.37, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:01:39.274', atlas_cloud=1, atlas_rain=1, zp_data=[0.6967499999999998, 0.17075000000000173, 0.13724999999999987, 0.3619999999999983, 0.617, 0.5972500000000007, 0.7374999999999989, 0.322750000000001, 0.1534999999999993, 0.12599999999999945, 0.0727499999999992, 0.1534999999999993, 0.34949999999999903, 0.32624999999999993, 0.3019999999999996, 0.2289999999999992, 0.1407500000000006, 0.12049999999999983, 0.1269999999999989, 0.1322499999999991, 0.1919999999999984, 0.16574999999999918, 0.17225000000000001, 0.167250000000001, 0.09499999999999886, 0.15000000000000036, 0.17425000000000068, 0.13199999999999967, 0.1745000000000001, 0.10200000000000031, 0.2035000000000018, 0.20300000000000118, 0.12324999999999875], zp_timestamp='2026-02-14T23:59:00')
2026-02-15T02:02:18.996 [DEBUG] [Thread-196003] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:02:19.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-15T02:02:19.085 [DEBUG] [Thread-196006] [transport.py] [_log()] starting thread (client mode): 0xa2de1d20
2026-02-15T02:02:19.085 [DEBUG] [Thread-196006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:02:19.099 [DEBUG] [Thread-196006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:02:19.100 [INFO] [Thread-196006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:02:19.107 [DEBUG] [Thread-196006] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:02:19.107 [DEBUG] [Thread-196006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:02:19.107 [DEBUG] [Thread-196006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:02:19.108 [DEBUG] [Thread-196006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:02:19.108 [DEBUG] [Thread-196006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:02:19.108 [DEBUG] [Thread-196006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:02:19.108 [DEBUG] [Thread-196006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:02:19.108 [DEBUG] [Thread-196006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:02:19.108 [DEBUG] [Thread-196006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:02:19.108 [DEBUG] [Thread-196006] [transport.py] [_log()] client lang: <none>
2026-02-15T02:02:19.109 [DEBUG] [Thread-196006] [transport.py] [_log()] server lang: <none>
2026-02-15T02:02:19.109 [DEBUG] [Thread-196006] [transport.py] [_log()] kex follows: False
2026-02-15T02:02:19.109 [DEBUG] [Thread-196006] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:02:19.109 [DEBUG] [Thread-196006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:02:19.109 [DEBUG] [Thread-196006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:02:19.109 [DEBUG] [Thread-196006] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:02:19.109 [DEBUG] [Thread-196006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:02:19.110 [DEBUG] [Thread-196006] [transport.py] [_log()] Compression: none
2026-02-15T02:02:19.110 [DEBUG] [Thread-196006] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:02:19.167 [DEBUG] [Thread-196006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:02:19.167 [DEBUG] [Thread-196006] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:02:19.168 [DEBUG] [Thread-196006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:02:19.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:02:19.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:02:19.223 [DEBUG] [Thread-196006] [transport.py] [_log()] userauth is OK
2026-02-15T02:02:19.223 [DEBUG] [Thread-196006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:02:19.223 [DEBUG] [Thread-196006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:02:19.223 [DEBUG] [Thread-196006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:02:19.224 [DEBUG] [Thread-196006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:02:19.242 [INFO] [Thread-196006] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:02:19.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-15T02:02:19.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:02:20.077 [DEBUG] [Thread-196006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:02:20.077 [DEBUG] [Thread-196006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:02:20.125 [DEBUG] [Thread-196006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:02:20.125 [DEBUG] [Thread-196006] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:02:20.134 [DEBUG] [Thread-196006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:02:20.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:02:20.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-15T02:02:20.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-15T02:02:20.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:02:20.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:02:20.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:02:20.171 [DEBUG] [Thread-196006] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:02:32.866 [DEBUG] [Thread-196008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:02:38.983 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:02:38.984 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:02:47.911 [DEBUG] [Thread-196009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:02:50.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:02:50.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:02: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-15T02:02:52.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 2, 15), 1.34, 91.21, 0.0, 40.35, 7.05, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:02:52.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:02:15
2026-02-15T02:02:52.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:02:52.906 [DEBUG] [Thread-196010] [transport.py] [_log()] starting thread (client mode): 0xa2d6d0f0
2026-02-15T02:02:52.906 [DEBUG] [Thread-196010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:02:52.926 [DEBUG] [Thread-196010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:02:52.927 [INFO] [Thread-196010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:02:52.930 [DEBUG] [Thread-196010] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:02:52.930 [DEBUG] [Thread-196010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:02:52.930 [DEBUG] [Thread-196010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:02:52.930 [DEBUG] [Thread-196010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:02:52.930 [DEBUG] [Thread-196010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:02:52.930 [DEBUG] [Thread-196010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:02:52.930 [DEBUG] [Thread-196010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:02:52.930 [DEBUG] [Thread-196010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:02:52.930 [DEBUG] [Thread-196010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:02:52.930 [DEBUG] [Thread-196010] [transport.py] [_log()] client lang: <none>
2026-02-15T02:02:52.930 [DEBUG] [Thread-196010] [transport.py] [_log()] server lang: <none>
2026-02-15T02:02:52.931 [DEBUG] [Thread-196010] [transport.py] [_log()] kex follows: False
2026-02-15T02:02:52.931 [DEBUG] [Thread-196010] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:02:52.931 [DEBUG] [Thread-196010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:02:52.931 [DEBUG] [Thread-196010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:02:52.931 [DEBUG] [Thread-196010] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:02:52.931 [DEBUG] [Thread-196010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:02:52.931 [DEBUG] [Thread-196010] [transport.py] [_log()] Compression: none
2026-02-15T02:02:52.931 [DEBUG] [Thread-196010] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:02:52.948 [DEBUG] [Thread-196010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:02:52.948 [DEBUG] [Thread-196010] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:02:52.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:02:52.949 [DEBUG] [Thread-196010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:02:52.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:02:52.951 [DEBUG] [Thread-196010] [transport.py] [_log()] userauth is OK
2026-02-15T02:02:52.951 [DEBUG] [Thread-196010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:02:52.951 [DEBUG] [Thread-196010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:02:52.951 [DEBUG] [Thread-196010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:02:52.951 [DEBUG] [Thread-196010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:02:52.971 [INFO] [Thread-196010] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:02:52.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:02:53.622 [DEBUG] [Thread-196010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:02:53.622 [DEBUG] [Thread-196010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:02:53.623 [DEBUG] [Thread-196010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:02:53.663 [DEBUG] [Thread-196010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:02:53.664 [DEBUG] [Thread-196010] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:02:53.667 [DEBUG] [Thread-196010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:02:53.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:02:53.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:02:53.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:02:53.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:02:53.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:02:53.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:02:53.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:02:53.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:02:53.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:02:53.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.001497 -999.00   +6.80  30.87     90   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 30.9 30.9 142.2 42.7 7.4 -24.0 7.2 -22.9 7.0 -21.8 7.4 -23.1
2026-02-15T02:02:53.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:02:53.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:02:53.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.001497
2026-02-15T02:02:53.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:02:53.690 [DEBUG] [Thread-196010] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:02:53.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:02:53.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:02:53.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:02:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:02:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:02:15', tmtdew=1.34, humidity=91.21, cloud=0.0, wind=40.35, temperature=7.05, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:02:09.341', atlas_cloud=1, atlas_rain=1, zp_data=[0.6967499999999998, 0.17075000000000173, 0.13724999999999987, 0.3619999999999983, 0.617, 0.5972500000000007, 0.7374999999999989, 0.322750000000001, 0.1534999999999993, 0.12599999999999945, 0.0727499999999992, 0.1534999999999993, 0.34949999999999903, 0.32624999999999993, 0.3019999999999996, 0.2289999999999992, 0.1407500000000006, 0.12049999999999983, 0.1269999999999989, 0.1322499999999991, 0.1919999999999984, 0.16574999999999918, 0.17225000000000001, 0.167250000000001, 0.09499999999999886, 0.15000000000000036, 0.17425000000000068, 0.13199999999999967, 0.1745000000000001, 0.10200000000000031, 0.2035000000000018, 0.20300000000000118, 0.12324999999999875], zp_timestamp='2026-02-14T23:59:00')
2026-02-15T02:02:53.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T02:02:53.791 [DEBUG] [Thread-196013] [transport.py] [_log()] starting thread (client mode): 0xa2d6ff10
2026-02-15T02:02:53.792 [DEBUG] [Thread-196013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:02:53.806 [DEBUG] [Thread-196013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:02:53.807 [INFO] [Thread-196013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:02:53.814 [DEBUG] [Thread-196013] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:02:53.814 [DEBUG] [Thread-196013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:02:53.814 [DEBUG] [Thread-196013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:02:53.814 [DEBUG] [Thread-196013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:02:53.814 [DEBUG] [Thread-196013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:02:53.814 [DEBUG] [Thread-196013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:02:53.814 [DEBUG] [Thread-196013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:02:53.814 [DEBUG] [Thread-196013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:02:53.814 [DEBUG] [Thread-196013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:02:53.815 [DEBUG] [Thread-196013] [transport.py] [_log()] client lang: <none>
2026-02-15T02:02:53.815 [DEBUG] [Thread-196013] [transport.py] [_log()] server lang: <none>
2026-02-15T02:02:53.815 [DEBUG] [Thread-196013] [transport.py] [_log()] kex follows: False
2026-02-15T02:02:53.815 [DEBUG] [Thread-196013] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:02:53.815 [DEBUG] [Thread-196013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:02:53.815 [DEBUG] [Thread-196013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:02:53.815 [DEBUG] [Thread-196013] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:02:53.815 [DEBUG] [Thread-196013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:02:53.815 [DEBUG] [Thread-196013] [transport.py] [_log()] Compression: none
2026-02-15T02:02:53.815 [DEBUG] [Thread-196013] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:02:53.872 [DEBUG] [Thread-196013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:02:53.873 [DEBUG] [Thread-196013] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:02:53.874 [DEBUG] [Thread-196013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:02:53.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:02:53.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:02:53.928 [DEBUG] [Thread-196013] [transport.py] [_log()] userauth is OK
2026-02-15T02:02:53.929 [DEBUG] [Thread-196013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:02:53.929 [DEBUG] [Thread-196013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:02:53.929 [DEBUG] [Thread-196013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:02:53.929 [DEBUG] [Thread-196013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:02:53.948 [INFO] [Thread-196013] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:02:53.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-15T02:02:53.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:02:54.749 [DEBUG] [Thread-196013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:02:54.749 [DEBUG] [Thread-196013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:02:54.797 [DEBUG] [Thread-196013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:02:54.797 [DEBUG] [Thread-196013] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:02:54.806 [DEBUG] [Thread-196013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:02:54.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:02:54.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-15T02:02:54.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-15T02:02:54.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:02:54.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:02:54.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:02:54.839 [DEBUG] [Thread-196013] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:03:02.943 [DEBUG] [Thread-196015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:03:15.210 [DEBUG] [Thread-196016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:03:17.987 [DEBUG] [Thread-196017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:03:24.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:03:24.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:03:24.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-15T02:03:26.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 2, 50), 1.35, 91.16, 0.0, 40.63, 7.0, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:03:26.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:02:50
2026-02-15T02:03:27.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:03:27.343 [DEBUG] [Thread-196018] [transport.py] [_log()] starting thread (client mode): 0xa2de03a0
2026-02-15T02:03:27.343 [DEBUG] [Thread-196018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:03:27.363 [DEBUG] [Thread-196018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:03:27.364 [INFO] [Thread-196018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:03:27.367 [DEBUG] [Thread-196018] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:03:27.367 [DEBUG] [Thread-196018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:03:27.367 [DEBUG] [Thread-196018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:03:27.367 [DEBUG] [Thread-196018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:03:27.367 [DEBUG] [Thread-196018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:03:27.367 [DEBUG] [Thread-196018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:03:27.367 [DEBUG] [Thread-196018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:03:27.368 [DEBUG] [Thread-196018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:03:27.368 [DEBUG] [Thread-196018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:03:27.368 [DEBUG] [Thread-196018] [transport.py] [_log()] client lang: <none>
2026-02-15T02:03:27.368 [DEBUG] [Thread-196018] [transport.py] [_log()] server lang: <none>
2026-02-15T02:03:27.368 [DEBUG] [Thread-196018] [transport.py] [_log()] kex follows: False
2026-02-15T02:03:27.368 [DEBUG] [Thread-196018] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:03:27.368 [DEBUG] [Thread-196018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:03:27.368 [DEBUG] [Thread-196018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:03:27.368 [DEBUG] [Thread-196018] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:03:27.368 [DEBUG] [Thread-196018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:03:27.368 [DEBUG] [Thread-196018] [transport.py] [_log()] Compression: none
2026-02-15T02:03:27.368 [DEBUG] [Thread-196018] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:03:27.385 [DEBUG] [Thread-196018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:03:27.386 [DEBUG] [Thread-196018] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:03:27.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:03:27.387 [DEBUG] [Thread-196018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:03:27.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:03:27.389 [DEBUG] [Thread-196018] [transport.py] [_log()] userauth is OK
2026-02-15T02:03:27.389 [DEBUG] [Thread-196018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:03:27.390 [DEBUG] [Thread-196018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:03:27.390 [DEBUG] [Thread-196018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:03:27.390 [DEBUG] [Thread-196018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:03:27.425 [INFO] [Thread-196018] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:03:27.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:03:28.077 [DEBUG] [Thread-196018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:03:28.077 [DEBUG] [Thread-196018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:03:28.077 [DEBUG] [Thread-196018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:03:28.118 [DEBUG] [Thread-196018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:03:28.118 [DEBUG] [Thread-196018] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:03:28.121 [DEBUG] [Thread-196018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:03:28.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:03:28.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:03:28.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:03:28.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:03:28.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:03:28.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:03:28.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:03:28.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:03:28.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:03:28.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.002191 -999.00   +6.80  31.50     90   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 31.5 31.5 143.2 42.0 7.4 -23.8 7.2 -23.0 7.0 -21.8 7.3 -23.1
2026-02-15T02:03:28.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:03:28.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:03:28.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.002191
2026-02-15T02:03:28.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:03:28.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:03:28.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:03:28.146 [DEBUG] [Thread-196018] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:03:28.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:03:28.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:03:28.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:02:50', tmtdew=1.35, humidity=91.16, cloud=0.0, wind=40.63, temperature=7.0, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:03:09.302', atlas_cloud=1, atlas_rain=1, zp_data=[0.6967499999999998, 0.17075000000000173, 0.13724999999999987, 0.3619999999999983, 0.617, 0.5972500000000007, 0.7374999999999989, 0.322750000000001, 0.1534999999999993, 0.12599999999999945, 0.0727499999999992, 0.1534999999999993, 0.34949999999999903, 0.32624999999999993, 0.3019999999999996, 0.2289999999999992, 0.1407500000000006, 0.12049999999999983, 0.1269999999999989, 0.1322499999999991, 0.1919999999999984, 0.16574999999999918, 0.17225000000000001, 0.167250000000001, 0.09499999999999886, 0.15000000000000036, 0.17425000000000068, 0.13199999999999967, 0.1745000000000001, 0.10200000000000031, 0.2035000000000018, 0.20300000000000118, 0.12324999999999875], zp_timestamp='2026-02-15T00:02:00')
2026-02-15T02:03:28.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T02:03:28.241 [DEBUG] [Thread-196021] [transport.py] [_log()] starting thread (client mode): 0xa57d5c30
2026-02-15T02:03:28.241 [DEBUG] [Thread-196021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:03:28.256 [DEBUG] [Thread-196021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:03:28.257 [INFO] [Thread-196021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:03:28.264 [DEBUG] [Thread-196021] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:03:28.264 [DEBUG] [Thread-196021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:03:28.265 [DEBUG] [Thread-196021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:03:28.265 [DEBUG] [Thread-196021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:03:28.265 [DEBUG] [Thread-196021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:03:28.265 [DEBUG] [Thread-196021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:03:28.265 [DEBUG] [Thread-196021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:03:28.266 [DEBUG] [Thread-196021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:03:28.266 [DEBUG] [Thread-196021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:03:28.266 [DEBUG] [Thread-196021] [transport.py] [_log()] client lang: <none>
2026-02-15T02:03:28.266 [DEBUG] [Thread-196021] [transport.py] [_log()] server lang: <none>
2026-02-15T02:03:28.266 [DEBUG] [Thread-196021] [transport.py] [_log()] kex follows: False
2026-02-15T02:03:28.266 [DEBUG] [Thread-196021] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:03:28.266 [DEBUG] [Thread-196021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:03:28.266 [DEBUG] [Thread-196021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:03:28.266 [DEBUG] [Thread-196021] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:03:28.266 [DEBUG] [Thread-196021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:03:28.266 [DEBUG] [Thread-196021] [transport.py] [_log()] Compression: none
2026-02-15T02:03:28.266 [DEBUG] [Thread-196021] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:03:28.322 [DEBUG] [Thread-196021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:03:28.322 [DEBUG] [Thread-196021] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:03:28.323 [DEBUG] [Thread-196021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:03:28.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:03:28.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:03:28.378 [DEBUG] [Thread-196021] [transport.py] [_log()] userauth is OK
2026-02-15T02:03:28.378 [DEBUG] [Thread-196021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:03:28.378 [DEBUG] [Thread-196021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:03:28.378 [DEBUG] [Thread-196021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:03:28.378 [DEBUG] [Thread-196021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:03:28.403 [INFO] [Thread-196021] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:03:28.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-15T02:03:28.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:03:29.194 [DEBUG] [Thread-196021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:03:29.194 [DEBUG] [Thread-196021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:03:29.242 [DEBUG] [Thread-196021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:03:29.243 [DEBUG] [Thread-196021] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:03:29.252 [DEBUG] [Thread-196021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:03:29.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:03:29.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-15T02:03:29.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-15T02:03:29.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:03:29.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:03:29.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:03:29.289 [DEBUG] [Thread-196021] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:03:33.023 [DEBUG] [Thread-196023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:03:39.195 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:03:39.196 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:03:48.081 [DEBUG] [Thread-196024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:03:59.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:03:59.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:03:59.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-15T02:04:01.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 3, 26), 1.34, 91.21, 0.0, 42.43, 7.03, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:04:01.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:03:26
2026-02-15T02:04:01.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:04:01.798 [DEBUG] [Thread-196025] [transport.py] [_log()] starting thread (client mode): 0xa2d01fc0
2026-02-15T02:04:01.798 [DEBUG] [Thread-196025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:04:01.819 [DEBUG] [Thread-196025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:04:01.819 [INFO] [Thread-196025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:04:01.822 [DEBUG] [Thread-196025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:04:01.822 [DEBUG] [Thread-196025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:04:01.822 [DEBUG] [Thread-196025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:04:01.822 [DEBUG] [Thread-196025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:04:01.822 [DEBUG] [Thread-196025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:04:01.822 [DEBUG] [Thread-196025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:04:01.823 [DEBUG] [Thread-196025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:04:01.823 [DEBUG] [Thread-196025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:04:01.823 [DEBUG] [Thread-196025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:04:01.823 [DEBUG] [Thread-196025] [transport.py] [_log()] client lang: <none>
2026-02-15T02:04:01.823 [DEBUG] [Thread-196025] [transport.py] [_log()] server lang: <none>
2026-02-15T02:04:01.823 [DEBUG] [Thread-196025] [transport.py] [_log()] kex follows: False
2026-02-15T02:04:01.823 [DEBUG] [Thread-196025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:04:01.823 [DEBUG] [Thread-196025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:04:01.823 [DEBUG] [Thread-196025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:04:01.823 [DEBUG] [Thread-196025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:04:01.823 [DEBUG] [Thread-196025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:04:01.824 [DEBUG] [Thread-196025] [transport.py] [_log()] Compression: none
2026-02-15T02:04:01.824 [DEBUG] [Thread-196025] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:04:01.845 [DEBUG] [Thread-196025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:04:01.845 [DEBUG] [Thread-196025] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:04:01.846 [DEBUG] [Thread-196025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:04:01.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:04:01.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:04:01.848 [DEBUG] [Thread-196025] [transport.py] [_log()] userauth is OK
2026-02-15T02:04:01.848 [DEBUG] [Thread-196025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:04:01.848 [DEBUG] [Thread-196025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:04:01.849 [DEBUG] [Thread-196025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:04:01.849 [DEBUG] [Thread-196025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:04:01.884 [INFO] [Thread-196025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:04:01.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:04:02.517 [DEBUG] [Thread-196025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:04:02.517 [DEBUG] [Thread-196025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:04:02.518 [DEBUG] [Thread-196025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:04:02.558 [DEBUG] [Thread-196025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:04:02.559 [DEBUG] [Thread-196025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:04:02.562 [DEBUG] [Thread-196025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:04:02.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:04:02.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:04:02.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:04:02.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:04:02.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:04:02.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:04:02.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:04:02.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:04:02.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:04:02.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.002538 -999.00   +6.80  27.56     90   +5.40 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 27.6 27.6 145.6 39.1 7.4 -23.9 7.2 -22.5 7.0 -21.8 7.4 -23.1
2026-02-15T02:04:02.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:04:02.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:04:02.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.002538
2026-02-15T02:04:02.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:04:02.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:04:02.588 [DEBUG] [Thread-196025] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:04:02.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:04:02.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:04:02.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:04:02.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:03:26', tmtdew=1.34, humidity=91.21, cloud=0.0, wind=42.43, temperature=7.03, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:03:39.283', atlas_cloud=1, atlas_rain=1, zp_data=[0.6967499999999998, 0.17075000000000173, 0.13724999999999987, 0.3619999999999983, 0.617, 0.5972500000000007, 0.7374999999999989, 0.322750000000001, 0.1534999999999993, 0.12599999999999945, 0.0727499999999992, 0.1534999999999993, 0.34949999999999903, 0.32624999999999993, 0.3019999999999996, 0.2289999999999992, 0.1407500000000006, 0.12049999999999983, 0.1269999999999989, 0.1322499999999991, 0.1919999999999984, 0.16574999999999918, 0.17225000000000001, 0.167250000000001, 0.09499999999999886, 0.15000000000000036, 0.17425000000000068, 0.13199999999999967, 0.1745000000000001, 0.10200000000000031, 0.2035000000000018, 0.20300000000000118, 0.12324999999999875], zp_timestamp='2026-02-15T00:02:00')
2026-02-15T02:04:02.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-15T02:04:02.682 [DEBUG] [Thread-196028] [transport.py] [_log()] starting thread (client mode): 0xa2d87850
2026-02-15T02:04:02.682 [DEBUG] [Thread-196028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:04:02.697 [DEBUG] [Thread-196028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:04:02.697 [INFO] [Thread-196028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:04:02.705 [DEBUG] [Thread-196028] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:04:02.705 [DEBUG] [Thread-196028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:04:02.705 [DEBUG] [Thread-196028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:04:02.705 [DEBUG] [Thread-196028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:04:02.705 [DEBUG] [Thread-196028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:04:02.705 [DEBUG] [Thread-196028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:04:02.706 [DEBUG] [Thread-196028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:04:02.706 [DEBUG] [Thread-196028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:04:02.706 [DEBUG] [Thread-196028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:04:02.706 [DEBUG] [Thread-196028] [transport.py] [_log()] client lang: <none>
2026-02-15T02:04:02.706 [DEBUG] [Thread-196028] [transport.py] [_log()] server lang: <none>
2026-02-15T02:04:02.706 [DEBUG] [Thread-196028] [transport.py] [_log()] kex follows: False
2026-02-15T02:04:02.706 [DEBUG] [Thread-196028] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:04:02.706 [DEBUG] [Thread-196028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:04:02.706 [DEBUG] [Thread-196028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:04:02.706 [DEBUG] [Thread-196028] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:04:02.706 [DEBUG] [Thread-196028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:04:02.706 [DEBUG] [Thread-196028] [transport.py] [_log()] Compression: none
2026-02-15T02:04:02.706 [DEBUG] [Thread-196028] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:04:02.768 [DEBUG] [Thread-196028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:04:02.768 [DEBUG] [Thread-196028] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:04:02.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:04:02.770 [DEBUG] [Thread-196028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:04:02.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:04:02.827 [DEBUG] [Thread-196028] [transport.py] [_log()] userauth is OK
2026-02-15T02:04:02.828 [DEBUG] [Thread-196028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:04:02.828 [DEBUG] [Thread-196028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:04:02.828 [DEBUG] [Thread-196028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:04:02.828 [DEBUG] [Thread-196028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:04:02.846 [INFO] [Thread-196028] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:04:02.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-15T02:04:02.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:04:03.120 [DEBUG] [Thread-196030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:04:03.661 [DEBUG] [Thread-196028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:04:03.661 [DEBUG] [Thread-196028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:04:03.708 [DEBUG] [Thread-196028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:04:03.709 [DEBUG] [Thread-196028] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:04:03.718 [DEBUG] [Thread-196028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:04:03.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:04:03.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-15T02:04:03.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:04:03.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:04:03.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:04:03.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:04:03.755 [DEBUG] [Thread-196028] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:04:15.276 [DEBUG] [Thread-196031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:04:18.169 [DEBUG] [Thread-196032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:04:33.205 [DEBUG] [Thread-196033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:04:33.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:04:33.768 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:04:33.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-15T02:04:35.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 4, 1), 1.34, 91.19, 0.0, 42.29, 7.02, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:04:35.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:04:01
2026-02-15T02:04:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:04:36.091 [DEBUG] [Thread-196034] [transport.py] [_log()] starting thread (client mode): 0xa2d6fc70
2026-02-15T02:04:36.091 [DEBUG] [Thread-196034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:04:36.111 [DEBUG] [Thread-196034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:04:36.111 [INFO] [Thread-196034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:04:36.114 [DEBUG] [Thread-196034] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:04:36.114 [DEBUG] [Thread-196034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:04:36.114 [DEBUG] [Thread-196034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:04:36.115 [DEBUG] [Thread-196034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:04:36.115 [DEBUG] [Thread-196034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:04:36.115 [DEBUG] [Thread-196034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:04:36.115 [DEBUG] [Thread-196034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:04:36.115 [DEBUG] [Thread-196034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:04:36.115 [DEBUG] [Thread-196034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:04:36.115 [DEBUG] [Thread-196034] [transport.py] [_log()] client lang: <none>
2026-02-15T02:04:36.115 [DEBUG] [Thread-196034] [transport.py] [_log()] server lang: <none>
2026-02-15T02:04:36.115 [DEBUG] [Thread-196034] [transport.py] [_log()] kex follows: False
2026-02-15T02:04:36.115 [DEBUG] [Thread-196034] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:04:36.115 [DEBUG] [Thread-196034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:04:36.115 [DEBUG] [Thread-196034] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:04:36.115 [DEBUG] [Thread-196034] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:04:36.115 [DEBUG] [Thread-196034] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:04:36.115 [DEBUG] [Thread-196034] [transport.py] [_log()] Compression: none
2026-02-15T02:04:36.115 [DEBUG] [Thread-196034] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:04:36.134 [DEBUG] [Thread-196034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:04:36.134 [DEBUG] [Thread-196034] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:04:36.135 [DEBUG] [Thread-196034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:04:36.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:04:36.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:04:36.137 [DEBUG] [Thread-196034] [transport.py] [_log()] userauth is OK
2026-02-15T02:04:36.137 [DEBUG] [Thread-196034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:04:36.137 [DEBUG] [Thread-196034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:04:36.137 [DEBUG] [Thread-196034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:04:36.137 [DEBUG] [Thread-196034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:04:36.176 [INFO] [Thread-196034] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:04:36.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:04:36.769 [DEBUG] [Thread-196034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:04:36.769 [DEBUG] [Thread-196034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:04:36.770 [DEBUG] [Thread-196034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:04:36.810 [DEBUG] [Thread-196034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:04:36.811 [DEBUG] [Thread-196034] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:04:36.814 [DEBUG] [Thread-196034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:04:36.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:04:36.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:04:36.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:04:36.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:04:36.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:04:36.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:04:36.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:04:36.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:04:36.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:04:36.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.002885 -999.00   +6.90  39.89     90   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 39.9 39.9 147.8 47.4 7.4 -23.9 7.2 -22.9 6.9 -21.7 7.3 -23.0
2026-02-15T02:04:36.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:04:36.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:04:36.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.002885
2026-02-15T02:04:36.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:04:36.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:04:36.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:04:36.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:04:36.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:04:36.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:04:01', tmtdew=1.34, humidity=91.19, cloud=0.0, wind=42.29, temperature=7.02, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:04:09.264', atlas_cloud=1, atlas_rain=1, zp_data=[0.6967499999999998, 0.17075000000000173, 0.13724999999999987, 0.3619999999999983, 0.617, 0.5972500000000007, 0.7374999999999989, 0.322750000000001, 0.1534999999999993, 0.12599999999999945, 0.0727499999999992, 0.1534999999999993, 0.34949999999999903, 0.32624999999999993, 0.3019999999999996, 0.2289999999999992, 0.1407500000000006, 0.12049999999999983, 0.1269999999999989, 0.1322499999999991, 0.1919999999999984, 0.16574999999999918, 0.17225000000000001, 0.167250000000001, 0.09499999999999886, 0.15000000000000036, 0.17425000000000068, 0.13199999999999967, 0.1745000000000001, 0.10200000000000031, 0.2035000000000018, 0.20300000000000118, 0.12324999999999875], zp_timestamp='2026-02-15T00:02:00')
2026-02-15T02:04:36.842 [DEBUG] [Thread-196034] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:04: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-15T02:04:36.940 [DEBUG] [Thread-196037] [transport.py] [_log()] starting thread (client mode): 0xa2d19b10
2026-02-15T02:04:36.940 [DEBUG] [Thread-196037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:04:36.953 [DEBUG] [Thread-196037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:04:36.954 [INFO] [Thread-196037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:04:36.961 [DEBUG] [Thread-196037] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:04:36.961 [DEBUG] [Thread-196037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:04:36.961 [DEBUG] [Thread-196037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:04:36.961 [DEBUG] [Thread-196037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:04:36.961 [DEBUG] [Thread-196037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:04:36.961 [DEBUG] [Thread-196037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:04:36.961 [DEBUG] [Thread-196037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:04:36.961 [DEBUG] [Thread-196037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:04:36.961 [DEBUG] [Thread-196037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:04:36.962 [DEBUG] [Thread-196037] [transport.py] [_log()] client lang: <none>
2026-02-15T02:04:36.962 [DEBUG] [Thread-196037] [transport.py] [_log()] server lang: <none>
2026-02-15T02:04:36.962 [DEBUG] [Thread-196037] [transport.py] [_log()] kex follows: False
2026-02-15T02:04:36.962 [DEBUG] [Thread-196037] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:04:36.962 [DEBUG] [Thread-196037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:04:36.962 [DEBUG] [Thread-196037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:04:36.962 [DEBUG] [Thread-196037] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:04:36.962 [DEBUG] [Thread-196037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:04:36.962 [DEBUG] [Thread-196037] [transport.py] [_log()] Compression: none
2026-02-15T02:04:36.962 [DEBUG] [Thread-196037] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:04:37.021 [DEBUG] [Thread-196037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:04:37.022 [DEBUG] [Thread-196037] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:04:37.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:04:37.023 [DEBUG] [Thread-196037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:04:37.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:04:37.080 [DEBUG] [Thread-196037] [transport.py] [_log()] userauth is OK
2026-02-15T02:04:37.080 [DEBUG] [Thread-196037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:04:37.080 [DEBUG] [Thread-196037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:04:37.080 [DEBUG] [Thread-196037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:04:37.081 [DEBUG] [Thread-196037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:04:37.099 [INFO] [Thread-196037] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:04:37.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-15T02:04:37.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:04:37.903 [DEBUG] [Thread-196037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:04:37.903 [DEBUG] [Thread-196037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:04:37.951 [DEBUG] [Thread-196037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:04:37.951 [DEBUG] [Thread-196037] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:04:37.959 [DEBUG] [Thread-196037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:04:37.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:04:37.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-15T02:04:37.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-15T02:04:37.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:04:37.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:04:37.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:04:37.992 [DEBUG] [Thread-196037] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:04:39.400 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:04:39.401 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:04:48.242 [DEBUG] [Thread-196039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:05:03.290 [DEBUG] [Thread-196040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:05:08.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:05:08.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:05:08.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:05:10.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 4, 36), 1.78, 88.42, 0.0, 42.69, 7.33, 1, 1, 0, 2, 0, 0),)
2026-02-15T02:05:10.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:04:36
2026-02-15T02:05:10.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:05:10.643 [DEBUG] [Thread-196041] [transport.py] [_log()] starting thread (client mode): 0xa2d19c90
2026-02-15T02:05:10.643 [DEBUG] [Thread-196041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:05:10.654 [DEBUG] [Thread-196041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:05:10.654 [INFO] [Thread-196041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:05:10.656 [DEBUG] [Thread-196041] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:05:10.656 [DEBUG] [Thread-196041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:05:10.656 [DEBUG] [Thread-196041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:05:10.656 [DEBUG] [Thread-196041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:05:10.656 [DEBUG] [Thread-196041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:05:10.656 [DEBUG] [Thread-196041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:05:10.656 [DEBUG] [Thread-196041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:05:10.656 [DEBUG] [Thread-196041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:05:10.656 [DEBUG] [Thread-196041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:05:10.656 [DEBUG] [Thread-196041] [transport.py] [_log()] client lang: <none>
2026-02-15T02:05:10.656 [DEBUG] [Thread-196041] [transport.py] [_log()] server lang: <none>
2026-02-15T02:05:10.656 [DEBUG] [Thread-196041] [transport.py] [_log()] kex follows: False
2026-02-15T02:05:10.656 [DEBUG] [Thread-196041] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:05:10.656 [DEBUG] [Thread-196041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:05:10.656 [DEBUG] [Thread-196041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:05:10.656 [DEBUG] [Thread-196041] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:05:10.656 [DEBUG] [Thread-196041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:05:10.656 [DEBUG] [Thread-196041] [transport.py] [_log()] Compression: none
2026-02-15T02:05:10.656 [DEBUG] [Thread-196041] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:05:10.665 [DEBUG] [Thread-196041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:05:10.666 [DEBUG] [Thread-196041] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:05:10.666 [DEBUG] [Thread-196041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:05:10.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:05:10.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:05:10.667 [DEBUG] [Thread-196041] [transport.py] [_log()] userauth is OK
2026-02-15T02:05:10.667 [DEBUG] [Thread-196041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:05:10.667 [DEBUG] [Thread-196041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:05:10.667 [DEBUG] [Thread-196041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:05:10.667 [DEBUG] [Thread-196041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:05:10.680 [INFO] [Thread-196041] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:05:10.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:05:11.516 [DEBUG] [Thread-196041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:05:11.516 [DEBUG] [Thread-196041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:05:11.517 [DEBUG] [Thread-196041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:05:11.557 [DEBUG] [Thread-196041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:05:11.557 [DEBUG] [Thread-196041] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:05:11.560 [DEBUG] [Thread-196041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:05:11.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:05:11.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:05:11.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:05:11.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:05:11.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:05:11.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:05:11.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:05:11.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:05:11.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:05:11.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.003233 -999.00   +6.80  32.32     90   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 32.3 32.3 146.0 40.4 7.3 -24.0 7.2 -22.9 7.0 -21.9 7.3 -23.0
2026-02-15T02:05:11.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:05:11.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:05:11.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.003233
2026-02-15T02:05:11.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:05:11.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:05:11.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:05:11.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:05:11.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:05:11.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:04:36', tmtdew=1.78, humidity=88.42, cloud=0.0, wind=42.69, temperature=7.33, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:04:39.331', atlas_cloud=1, atlas_rain=1, zp_data=[0.6967499999999998, 0.17075000000000173, 0.13724999999999987, 0.3619999999999983, 0.617, 0.5972500000000007, 0.7374999999999989, 0.322750000000001, 0.1534999999999993, 0.12599999999999945, 0.0727499999999992, 0.1534999999999993, 0.34949999999999903, 0.32624999999999993, 0.3019999999999996, 0.2289999999999992, 0.1407500000000006, 0.12049999999999983, 0.1269999999999989, 0.1322499999999991, 0.1919999999999984, 0.16574999999999918, 0.17225000000000001, 0.167250000000001, 0.09499999999999886, 0.15000000000000036, 0.17425000000000068, 0.13199999999999967, 0.1745000000000001, 0.10200000000000031, 0.2035000000000018, 0.20300000000000118, 0.12324999999999875], zp_timestamp='2026-02-15T00:02:00')
2026-02-15T02:05:11.586 [DEBUG] [Thread-196041] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:05:11.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-15T02:05:11.682 [DEBUG] [Thread-196044] [transport.py] [_log()] starting thread (client mode): 0xa2d1a650
2026-02-15T02:05:11.682 [DEBUG] [Thread-196044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:05:11.701 [DEBUG] [Thread-196044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:05:11.701 [INFO] [Thread-196044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:05:11.708 [DEBUG] [Thread-196044] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:05:11.708 [DEBUG] [Thread-196044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:05:11.709 [DEBUG] [Thread-196044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:05:11.709 [DEBUG] [Thread-196044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:05:11.709 [DEBUG] [Thread-196044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:05:11.709 [DEBUG] [Thread-196044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:05:11.709 [DEBUG] [Thread-196044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:05:11.709 [DEBUG] [Thread-196044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:05:11.709 [DEBUG] [Thread-196044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:05:11.709 [DEBUG] [Thread-196044] [transport.py] [_log()] client lang: <none>
2026-02-15T02:05:11.709 [DEBUG] [Thread-196044] [transport.py] [_log()] server lang: <none>
2026-02-15T02:05:11.710 [DEBUG] [Thread-196044] [transport.py] [_log()] kex follows: False
2026-02-15T02:05:11.710 [DEBUG] [Thread-196044] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:05:11.710 [DEBUG] [Thread-196044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:05:11.710 [DEBUG] [Thread-196044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:05:11.710 [DEBUG] [Thread-196044] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:05:11.710 [DEBUG] [Thread-196044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:05:11.710 [DEBUG] [Thread-196044] [transport.py] [_log()] Compression: none
2026-02-15T02:05:11.710 [DEBUG] [Thread-196044] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:05:11.767 [DEBUG] [Thread-196044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:05:11.768 [DEBUG] [Thread-196044] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:05:11.768 [DEBUG] [Thread-196044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:05:11.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:05:11.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:05:11.827 [DEBUG] [Thread-196044] [transport.py] [_log()] userauth is OK
2026-02-15T02:05:11.827 [DEBUG] [Thread-196044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:05:11.827 [DEBUG] [Thread-196044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:05:11.828 [DEBUG] [Thread-196044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:05:11.828 [DEBUG] [Thread-196044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:05:11.846 [INFO] [Thread-196044] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:05:11.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-15T02:05:11.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:05:12.649 [DEBUG] [Thread-196044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:05:12.649 [DEBUG] [Thread-196044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:05:12.697 [DEBUG] [Thread-196044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:05:12.698 [DEBUG] [Thread-196044] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:05:12.707 [DEBUG] [Thread-196044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:05:12.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:05:12.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-15T02:05:12.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-15T02:05:12.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:05:12.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:05:12.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:05:12.744 [DEBUG] [Thread-196044] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:05:15.344 [DEBUG] [Thread-196046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:05:18.324 [DEBUG] [Thread-196047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:05:33.381 [DEBUG] [Thread-196048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:05:39.605 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:05:39.606 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:05:42.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:05:42.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:05:42.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:05:44.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 5, 11), 1.34, 91.21, 0.0, 39.28, 7.03, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:05:44.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:05:11
2026-02-15T02:05:45.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:05:45.233 [DEBUG] [Thread-196049] [transport.py] [_log()] starting thread (client mode): 0xa57d4400
2026-02-15T02:05:45.233 [DEBUG] [Thread-196049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:05:45.245 [DEBUG] [Thread-196049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:05:45.245 [INFO] [Thread-196049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:05:45.246 [DEBUG] [Thread-196049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:05:45.246 [DEBUG] [Thread-196049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:05:45.246 [DEBUG] [Thread-196049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:05:45.246 [DEBUG] [Thread-196049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:05:45.246 [DEBUG] [Thread-196049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:05:45.246 [DEBUG] [Thread-196049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:05:45.246 [DEBUG] [Thread-196049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:05:45.246 [DEBUG] [Thread-196049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:05:45.246 [DEBUG] [Thread-196049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:05:45.246 [DEBUG] [Thread-196049] [transport.py] [_log()] client lang: <none>
2026-02-15T02:05:45.246 [DEBUG] [Thread-196049] [transport.py] [_log()] server lang: <none>
2026-02-15T02:05:45.246 [DEBUG] [Thread-196049] [transport.py] [_log()] kex follows: False
2026-02-15T02:05:45.246 [DEBUG] [Thread-196049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:05:45.246 [DEBUG] [Thread-196049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:05:45.246 [DEBUG] [Thread-196049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:05:45.246 [DEBUG] [Thread-196049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:05:45.246 [DEBUG] [Thread-196049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:05:45.246 [DEBUG] [Thread-196049] [transport.py] [_log()] Compression: none
2026-02-15T02:05:45.246 [DEBUG] [Thread-196049] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:05:45.255 [DEBUG] [Thread-196049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:05:45.256 [DEBUG] [Thread-196049] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:05:45.256 [DEBUG] [Thread-196049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:05:45.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:05:45.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:05:45.257 [DEBUG] [Thread-196049] [transport.py] [_log()] userauth is OK
2026-02-15T02:05:45.257 [DEBUG] [Thread-196049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:05:45.257 [DEBUG] [Thread-196049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:05:45.257 [DEBUG] [Thread-196049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:05:45.257 [DEBUG] [Thread-196049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:05:45.277 [INFO] [Thread-196049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:05:45.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:05:45.884 [DEBUG] [Thread-196049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:05:45.885 [DEBUG] [Thread-196049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:05:45.885 [DEBUG] [Thread-196049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:05:45.925 [DEBUG] [Thread-196049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:05:45.925 [DEBUG] [Thread-196049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:05:45.929 [DEBUG] [Thread-196049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:05:45.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:05:45.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:05:45.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:05:45.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:05:45.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:05:45.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:05:45.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:05:45.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:05:45.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:05:45.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.003580 -999.00   +6.80  29.82     90   +5.40 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 29.8 29.8 146.8 36.6 7.4 -23.7 7.2 -23.0 7.0 -22.0 7.3 -23.3
2026-02-15T02:05:45.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:05:45.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:05:45.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.003580
2026-02-15T02:05:45.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:05:45.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:05:45.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:05:45.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:05:45.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:05:45.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:05:11', tmtdew=1.34, humidity=91.21, cloud=0.0, wind=39.28, temperature=7.03, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:05:09.312', atlas_cloud=1, atlas_rain=1, zp_data=[0.6967499999999998, 0.17075000000000173, 0.13724999999999987, 0.3619999999999983, 0.617, 0.5972500000000007, 0.7374999999999989, 0.322750000000001, 0.1534999999999993, 0.12599999999999945, 0.0727499999999992, 0.1534999999999993, 0.34949999999999903, 0.32624999999999993, 0.3019999999999996, 0.2289999999999992, 0.1407500000000006, 0.12049999999999983, 0.1269999999999989, 0.1322499999999991, 0.1919999999999984, 0.16574999999999918, 0.17225000000000001, 0.167250000000001, 0.09499999999999886, 0.15000000000000036, 0.17425000000000068, 0.13199999999999967, 0.1745000000000001, 0.10200000000000031, 0.2035000000000018, 0.20300000000000118, 0.12324999999999875], zp_timestamp='2026-02-15T00:02:00')
2026-02-15T02:05:45.961 [DEBUG] [Thread-196049] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:05:46.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-15T02:05:46.057 [DEBUG] [Thread-196052] [transport.py] [_log()] starting thread (client mode): 0xa2d01c60
2026-02-15T02:05:46.057 [DEBUG] [Thread-196052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:05:46.071 [DEBUG] [Thread-196052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:05:46.072 [INFO] [Thread-196052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:05:46.079 [DEBUG] [Thread-196052] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:05:46.079 [DEBUG] [Thread-196052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:05:46.079 [DEBUG] [Thread-196052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:05:46.080 [DEBUG] [Thread-196052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:05:46.080 [DEBUG] [Thread-196052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:05:46.080 [DEBUG] [Thread-196052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:05:46.080 [DEBUG] [Thread-196052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:05:46.080 [DEBUG] [Thread-196052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:05:46.080 [DEBUG] [Thread-196052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:05:46.080 [DEBUG] [Thread-196052] [transport.py] [_log()] client lang: <none>
2026-02-15T02:05:46.080 [DEBUG] [Thread-196052] [transport.py] [_log()] server lang: <none>
2026-02-15T02:05:46.080 [DEBUG] [Thread-196052] [transport.py] [_log()] kex follows: False
2026-02-15T02:05:46.081 [DEBUG] [Thread-196052] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:05:46.081 [DEBUG] [Thread-196052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:05:46.081 [DEBUG] [Thread-196052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:05:46.081 [DEBUG] [Thread-196052] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:05:46.081 [DEBUG] [Thread-196052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:05:46.081 [DEBUG] [Thread-196052] [transport.py] [_log()] Compression: none
2026-02-15T02:05:46.082 [DEBUG] [Thread-196052] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:05:46.137 [DEBUG] [Thread-196052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:05:46.138 [DEBUG] [Thread-196052] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:05:46.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:05:46.139 [DEBUG] [Thread-196052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:05:46.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:05:46.193 [DEBUG] [Thread-196052] [transport.py] [_log()] userauth is OK
2026-02-15T02:05:46.193 [DEBUG] [Thread-196052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:05:46.193 [DEBUG] [Thread-196052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:05:46.193 [DEBUG] [Thread-196052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:05:46.193 [DEBUG] [Thread-196052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:05:46.212 [INFO] [Thread-196052] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:05:46.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T02:05:46.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:05:47.034 [DEBUG] [Thread-196052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:05:47.034 [DEBUG] [Thread-196052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:05:47.081 [DEBUG] [Thread-196052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:05:47.081 [DEBUG] [Thread-196052] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:05:47.090 [DEBUG] [Thread-196052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:05:47.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:05:47.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-15T02:05:47.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:05:47.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:05:47.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:05:47.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:05:47.127 [DEBUG] [Thread-196052] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:05:48.418 [DEBUG] [Thread-196054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:06:03.471 [DEBUG] [Thread-196055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:06:15.411 [DEBUG] [Thread-196056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:06:17.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:06:17.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:06:17.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:06:18.508 [DEBUG] [Thread-196057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:06:19.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 5, 46), 1.34, 91.19, 0.0, 37.46, 7.02, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:06:19.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:05:46
2026-02-15T02:06:19.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:06:19.575 [DEBUG] [Thread-196058] [transport.py] [_log()] starting thread (client mode): 0xa2d01870
2026-02-15T02:06:19.575 [DEBUG] [Thread-196058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:06:19.595 [DEBUG] [Thread-196058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:06:19.595 [INFO] [Thread-196058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:06:19.598 [DEBUG] [Thread-196058] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:06:19.598 [DEBUG] [Thread-196058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:06:19.598 [DEBUG] [Thread-196058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:06:19.598 [DEBUG] [Thread-196058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:06:19.598 [DEBUG] [Thread-196058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:06:19.598 [DEBUG] [Thread-196058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:06:19.598 [DEBUG] [Thread-196058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:06:19.598 [DEBUG] [Thread-196058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:06:19.598 [DEBUG] [Thread-196058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:06:19.598 [DEBUG] [Thread-196058] [transport.py] [_log()] client lang: <none>
2026-02-15T02:06:19.598 [DEBUG] [Thread-196058] [transport.py] [_log()] server lang: <none>
2026-02-15T02:06:19.598 [DEBUG] [Thread-196058] [transport.py] [_log()] kex follows: False
2026-02-15T02:06:19.598 [DEBUG] [Thread-196058] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:06:19.598 [DEBUG] [Thread-196058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:06:19.599 [DEBUG] [Thread-196058] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:06:19.599 [DEBUG] [Thread-196058] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:06:19.599 [DEBUG] [Thread-196058] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:06:19.599 [DEBUG] [Thread-196058] [transport.py] [_log()] Compression: none
2026-02-15T02:06:19.599 [DEBUG] [Thread-196058] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:06:19.615 [DEBUG] [Thread-196058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:06:19.616 [DEBUG] [Thread-196058] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:06:19.616 [DEBUG] [Thread-196058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:06:19.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:06:19.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:06:19.618 [DEBUG] [Thread-196058] [transport.py] [_log()] userauth is OK
2026-02-15T02:06:19.618 [DEBUG] [Thread-196058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:06:19.618 [DEBUG] [Thread-196058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:06:19.618 [DEBUG] [Thread-196058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:06:19.618 [DEBUG] [Thread-196058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:06:19.644 [INFO] [Thread-196058] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:06:19.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:06:20.254 [DEBUG] [Thread-196058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:06:20.255 [DEBUG] [Thread-196058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:06:20.255 [DEBUG] [Thread-196058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:06:20.295 [DEBUG] [Thread-196058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:06:20.296 [DEBUG] [Thread-196058] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:06:20.298 [DEBUG] [Thread-196058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:06:20.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:06:20.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:06:20.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:06:20.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:06:20.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:06:20.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:06:20.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:06:20.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:06:20.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:06:20.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.004274 -999.00   +6.80  25.57     90   +5.40 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 25.6 25.6 149.6 43.9 7.4 -23.5 7.2 -22.9 7.0 -21.7 7.3 -23.0
2026-02-15T02:06:20.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:06:20.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:06:20.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.004274
2026-02-15T02:06:20.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:06:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:06:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:06:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:06:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:06:20.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:05:46', tmtdew=1.34, humidity=91.19, cloud=0.0, wind=37.46, temperature=7.02, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:06:09.274', atlas_cloud=1, atlas_rain=1, zp_data=[0.6967499999999998, 0.17075000000000173, 0.13724999999999987, 0.3619999999999983, 0.617, 0.5972500000000007, 0.7374999999999989, 0.322750000000001, 0.1534999999999993, 0.12599999999999945, 0.0727499999999992, 0.1534999999999993, 0.34949999999999903, 0.32624999999999993, 0.3019999999999996, 0.2289999999999992, 0.1407500000000006, 0.12049999999999983, 0.1269999999999989, 0.1322499999999991, 0.1919999999999984, 0.16574999999999918, 0.17225000000000001, 0.167250000000001, 0.09499999999999886, 0.15000000000000036, 0.17425000000000068, 0.13199999999999967, 0.1745000000000001, 0.10200000000000031, 0.2035000000000018, 0.20300000000000118, 0.12324999999999875], zp_timestamp='2026-02-15T00:02:00')
2026-02-15T02:06:20.321 [DEBUG] [Thread-196058] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:06:20.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-15T02:06:20.417 [DEBUG] [Thread-196061] [transport.py] [_log()] starting thread (client mode): 0xa5742170
2026-02-15T02:06:20.417 [DEBUG] [Thread-196061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:06:20.430 [DEBUG] [Thread-196061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:06:20.431 [INFO] [Thread-196061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:06:20.438 [DEBUG] [Thread-196061] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:06:20.438 [DEBUG] [Thread-196061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:06:20.438 [DEBUG] [Thread-196061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:06:20.439 [DEBUG] [Thread-196061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:06:20.439 [DEBUG] [Thread-196061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:06:20.439 [DEBUG] [Thread-196061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:06:20.439 [DEBUG] [Thread-196061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:06:20.439 [DEBUG] [Thread-196061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:06:20.439 [DEBUG] [Thread-196061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:06:20.439 [DEBUG] [Thread-196061] [transport.py] [_log()] client lang: <none>
2026-02-15T02:06:20.439 [DEBUG] [Thread-196061] [transport.py] [_log()] server lang: <none>
2026-02-15T02:06:20.439 [DEBUG] [Thread-196061] [transport.py] [_log()] kex follows: False
2026-02-15T02:06:20.440 [DEBUG] [Thread-196061] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:06:20.440 [DEBUG] [Thread-196061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:06:20.440 [DEBUG] [Thread-196061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:06:20.440 [DEBUG] [Thread-196061] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:06:20.440 [DEBUG] [Thread-196061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:06:20.440 [DEBUG] [Thread-196061] [transport.py] [_log()] Compression: none
2026-02-15T02:06:20.440 [DEBUG] [Thread-196061] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:06:20.499 [DEBUG] [Thread-196061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:06:20.500 [DEBUG] [Thread-196061] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:06:20.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:06:20.502 [DEBUG] [Thread-196061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:06:20.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:06:20.559 [DEBUG] [Thread-196061] [transport.py] [_log()] userauth is OK
2026-02-15T02:06:20.560 [DEBUG] [Thread-196061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:06:20.560 [DEBUG] [Thread-196061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:06:20.560 [DEBUG] [Thread-196061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:06:20.560 [DEBUG] [Thread-196061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:06:20.585 [INFO] [Thread-196061] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:06:20.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-15T02:06:20.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:06:21.378 [DEBUG] [Thread-196061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:06:21.378 [DEBUG] [Thread-196061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:06:21.425 [DEBUG] [Thread-196061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:06:21.425 [DEBUG] [Thread-196061] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:06:21.434 [DEBUG] [Thread-196061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:06:21.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:06:21.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-15T02:06:21.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-15T02:06:21.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:06:21.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:06:21.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:06:21.469 [DEBUG] [Thread-196061] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:06:33.541 [DEBUG] [Thread-196063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:06:39.808 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:06:39.808 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:06:48.603 [DEBUG] [Thread-196064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:06:51.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:06:51.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:06:51.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-15T02:06:53.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 6, 22), 1.34, 91.23, 0.0, 40.12, 7.02, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:06:53.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:06:22
2026-02-15T02:06:53.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:06:53.812 [DEBUG] [Thread-196065] [transport.py] [_log()] starting thread (client mode): 0xa57d5570
2026-02-15T02:06:53.812 [DEBUG] [Thread-196065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:06:53.831 [DEBUG] [Thread-196065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:06:53.831 [INFO] [Thread-196065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:06:53.834 [DEBUG] [Thread-196065] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:06:53.834 [DEBUG] [Thread-196065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:06:53.834 [DEBUG] [Thread-196065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:06:53.834 [DEBUG] [Thread-196065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:06:53.834 [DEBUG] [Thread-196065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:06:53.834 [DEBUG] [Thread-196065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:06:53.834 [DEBUG] [Thread-196065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:06:53.834 [DEBUG] [Thread-196065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:06:53.834 [DEBUG] [Thread-196065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:06:53.835 [DEBUG] [Thread-196065] [transport.py] [_log()] client lang: <none>
2026-02-15T02:06:53.835 [DEBUG] [Thread-196065] [transport.py] [_log()] server lang: <none>
2026-02-15T02:06:53.835 [DEBUG] [Thread-196065] [transport.py] [_log()] kex follows: False
2026-02-15T02:06:53.835 [DEBUG] [Thread-196065] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:06:53.835 [DEBUG] [Thread-196065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:06:53.835 [DEBUG] [Thread-196065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:06:53.835 [DEBUG] [Thread-196065] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:06:53.835 [DEBUG] [Thread-196065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:06:53.835 [DEBUG] [Thread-196065] [transport.py] [_log()] Compression: none
2026-02-15T02:06:53.835 [DEBUG] [Thread-196065] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:06:53.852 [DEBUG] [Thread-196065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:06:53.852 [DEBUG] [Thread-196065] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:06:53.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:06:53.853 [DEBUG] [Thread-196065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:06:53.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:06:53.855 [DEBUG] [Thread-196065] [transport.py] [_log()] userauth is OK
2026-02-15T02:06:53.856 [DEBUG] [Thread-196065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:06:53.856 [DEBUG] [Thread-196065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:06:53.856 [DEBUG] [Thread-196065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:06:53.856 [DEBUG] [Thread-196065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:06:53.881 [INFO] [Thread-196065] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:06:53.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:06:54.484 [DEBUG] [Thread-196065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:06:54.484 [DEBUG] [Thread-196065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:06:54.485 [DEBUG] [Thread-196065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:06:54.525 [DEBUG] [Thread-196065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:06:54.526 [DEBUG] [Thread-196065] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:06:54.529 [DEBUG] [Thread-196065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:06:54.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:06:54.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:06:54.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:06:54.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:06:54.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:06:54.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:06:54.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:06:54.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:06:54.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:06:54.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.004621 -999.00   +6.80  36.90     90   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 36.9 36.9 142.2 44.4 7.4 -23.3 7.2 -21.8 7.0 -21.2 7.3 -22.0
2026-02-15T02:06:54.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:06:54.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:06:54.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.004621
2026-02-15T02:06:54.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:06:54.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:06:54.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:06:54.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:06:54.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:06:54.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:06:22', tmtdew=1.34, humidity=91.23, cloud=0.0, wind=40.12, temperature=7.02, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:06:39.254', atlas_cloud=1, atlas_rain=1, zp_data=[0.8777499999999998, 0.1172500000000003, 0.14775000000000027, 0.31349999999999945, 0.7795000000000014, 0.707250000000001, 1.0019999999999998, 0.39025000000000176, 0.14399999999999835, 0.10400000000000098, 0.13175000000000026, 0.21899999999999942, 0.41300000000000026, 0.3432499999999994, 0.36249999999999893, 0.17999999999999972, 0.1322499999999991, 0.12449999999999939, 0.7359999999999989, 0.3932499999999983, 0.2024999999999988, 0.19874999999999865, 0.16925000000000168, 0.1407500000000006, 0.14400000000000013, 0.20350000000000001, 0.5427499999999998, 0.2705000000000002, 0.15600000000000058, 0.10300000000000153, 0.2240000000000002, 0.1750000000000007, 0.12274999999999991], zp_timestamp='2026-02-15T00:05:00')
2026-02-15T02:06:54.556 [DEBUG] [Thread-196065] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:06:54.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T02:06:54.652 [DEBUG] [Thread-196068] [transport.py] [_log()] starting thread (client mode): 0xa57d4100
2026-02-15T02:06:54.652 [DEBUG] [Thread-196068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:06:54.667 [DEBUG] [Thread-196068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:06:54.668 [INFO] [Thread-196068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:06:54.675 [DEBUG] [Thread-196068] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:06:54.675 [DEBUG] [Thread-196068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:06:54.675 [DEBUG] [Thread-196068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:06:54.675 [DEBUG] [Thread-196068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:06:54.676 [DEBUG] [Thread-196068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:06:54.676 [DEBUG] [Thread-196068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:06:54.676 [DEBUG] [Thread-196068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:06:54.676 [DEBUG] [Thread-196068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:06:54.676 [DEBUG] [Thread-196068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:06:54.676 [DEBUG] [Thread-196068] [transport.py] [_log()] client lang: <none>
2026-02-15T02:06:54.676 [DEBUG] [Thread-196068] [transport.py] [_log()] server lang: <none>
2026-02-15T02:06:54.676 [DEBUG] [Thread-196068] [transport.py] [_log()] kex follows: False
2026-02-15T02:06:54.676 [DEBUG] [Thread-196068] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:06:54.676 [DEBUG] [Thread-196068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:06:54.676 [DEBUG] [Thread-196068] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:06:54.676 [DEBUG] [Thread-196068] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:06:54.676 [DEBUG] [Thread-196068] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:06:54.676 [DEBUG] [Thread-196068] [transport.py] [_log()] Compression: none
2026-02-15T02:06:54.676 [DEBUG] [Thread-196068] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:06:54.733 [DEBUG] [Thread-196068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:06:54.733 [DEBUG] [Thread-196068] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:06:54.734 [DEBUG] [Thread-196068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:06:54.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:06:54.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:06:54.789 [DEBUG] [Thread-196068] [transport.py] [_log()] userauth is OK
2026-02-15T02:06:54.789 [DEBUG] [Thread-196068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:06:54.790 [DEBUG] [Thread-196068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:06:54.790 [DEBUG] [Thread-196068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:06:54.790 [DEBUG] [Thread-196068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:06:54.809 [INFO] [Thread-196068] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:06:54.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T02:06:54.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:06:55.601 [DEBUG] [Thread-196068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:06:55.601 [DEBUG] [Thread-196068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:06:55.649 [DEBUG] [Thread-196068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:06:55.650 [DEBUG] [Thread-196068] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:06:55.659 [DEBUG] [Thread-196068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:06:55.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:06:55.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-15T02:06:55.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-15T02:06:55.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:06:55.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:06:55.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:06:55.696 [DEBUG] [Thread-196068] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:07:03.637 [DEBUG] [Thread-196070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:07:15.488 [DEBUG] [Thread-196071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:07:18.684 [DEBUG] [Thread-196072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:07:25.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:07:25.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:07:25.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-15T02:07:27.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 6, 58), 1.34, 91.19, 0.0, 42.15, 6.93, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:07:27.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:06:58
2026-02-15T02:07:27.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:07:28.076 [DEBUG] [Thread-196073] [transport.py] [_log()] starting thread (client mode): 0xa57d5930
2026-02-15T02:07:28.076 [DEBUG] [Thread-196073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:07:28.094 [DEBUG] [Thread-196073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:07:28.095 [INFO] [Thread-196073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:07:28.097 [DEBUG] [Thread-196073] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:07:28.098 [DEBUG] [Thread-196073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:07:28.098 [DEBUG] [Thread-196073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:07:28.098 [DEBUG] [Thread-196073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:07:28.098 [DEBUG] [Thread-196073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:07:28.098 [DEBUG] [Thread-196073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:07:28.098 [DEBUG] [Thread-196073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:07:28.098 [DEBUG] [Thread-196073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:07:28.098 [DEBUG] [Thread-196073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:07:28.098 [DEBUG] [Thread-196073] [transport.py] [_log()] client lang: <none>
2026-02-15T02:07:28.098 [DEBUG] [Thread-196073] [transport.py] [_log()] server lang: <none>
2026-02-15T02:07:28.098 [DEBUG] [Thread-196073] [transport.py] [_log()] kex follows: False
2026-02-15T02:07:28.098 [DEBUG] [Thread-196073] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:07:28.099 [DEBUG] [Thread-196073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:07:28.099 [DEBUG] [Thread-196073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:07:28.099 [DEBUG] [Thread-196073] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:07:28.099 [DEBUG] [Thread-196073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:07:28.099 [DEBUG] [Thread-196073] [transport.py] [_log()] Compression: none
2026-02-15T02:07:28.099 [DEBUG] [Thread-196073] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:07:28.107 [DEBUG] [Thread-196073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:07:28.107 [DEBUG] [Thread-196073] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:07:28.108 [DEBUG] [Thread-196073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:07:28.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:07:28.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:07:28.109 [DEBUG] [Thread-196073] [transport.py] [_log()] userauth is OK
2026-02-15T02:07:28.110 [DEBUG] [Thread-196073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:07:28.110 [DEBUG] [Thread-196073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:07:28.110 [DEBUG] [Thread-196073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:07:28.110 [DEBUG] [Thread-196073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:07:28.130 [INFO] [Thread-196073] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:07:28.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:07:28.739 [DEBUG] [Thread-196073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:07:28.739 [DEBUG] [Thread-196073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:07:28.740 [DEBUG] [Thread-196073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:07:28.790 [DEBUG] [Thread-196073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:07:28.790 [DEBUG] [Thread-196073] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:07:28.796 [DEBUG] [Thread-196073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:07:28.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:07:28.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:07:28.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:07:28.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:07:28.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:07:28.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:07:28.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:07:28.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:07:28.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:07:28.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.004969 -999.00   +6.80  28.82     90   +5.40 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 28.8 28.8 144.0 38.0 7.4 -20.1 7.2 -20.4 7.0 -18.3 7.3 -21.0
2026-02-15T02:07:28.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:07:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:07:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.004969
2026-02-15T02:07:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:07:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:07:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:07:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:07:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:07:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:06:58', tmtdew=1.34, humidity=91.19, cloud=0.0, wind=42.15, temperature=6.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:07:09.322', atlas_cloud=1, atlas_rain=1, zp_data=[0.8777499999999998, 0.1172500000000003, 0.14775000000000027, 0.31349999999999945, 0.7795000000000014, 0.707250000000001, 1.0019999999999998, 0.39025000000000176, 0.14399999999999835, 0.10400000000000098, 0.13175000000000026, 0.21899999999999942, 0.41300000000000026, 0.3432499999999994, 0.36249999999999893, 0.17999999999999972, 0.1322499999999991, 0.12449999999999939, 0.7359999999999989, 0.3932499999999983, 0.2024999999999988, 0.19874999999999865, 0.16925000000000168, 0.1407500000000006, 0.14400000000000013, 0.20350000000000001, 0.5427499999999998, 0.2705000000000002, 0.15600000000000058, 0.10300000000000153, 0.2240000000000002, 0.1750000000000007, 0.12274999999999991], zp_timestamp='2026-02-15T00:05:00')
2026-02-15T02:07:28.826 [DEBUG] [Thread-196073] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:07:28.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-15T02:07:28.922 [DEBUG] [Thread-196076] [transport.py] [_log()] starting thread (client mode): 0xa2d79780
2026-02-15T02:07:28.923 [DEBUG] [Thread-196076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:07:28.937 [DEBUG] [Thread-196076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:07:28.937 [INFO] [Thread-196076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:07:28.945 [DEBUG] [Thread-196076] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:07:28.945 [DEBUG] [Thread-196076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:07:28.945 [DEBUG] [Thread-196076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:07:28.945 [DEBUG] [Thread-196076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:07:28.945 [DEBUG] [Thread-196076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:07:28.945 [DEBUG] [Thread-196076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:07:28.945 [DEBUG] [Thread-196076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:07:28.945 [DEBUG] [Thread-196076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:07:28.946 [DEBUG] [Thread-196076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:07:28.946 [DEBUG] [Thread-196076] [transport.py] [_log()] client lang: <none>
2026-02-15T02:07:28.946 [DEBUG] [Thread-196076] [transport.py] [_log()] server lang: <none>
2026-02-15T02:07:28.946 [DEBUG] [Thread-196076] [transport.py] [_log()] kex follows: False
2026-02-15T02:07:28.946 [DEBUG] [Thread-196076] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:07:28.946 [DEBUG] [Thread-196076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:07:28.946 [DEBUG] [Thread-196076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:07:28.946 [DEBUG] [Thread-196076] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:07:28.946 [DEBUG] [Thread-196076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:07:28.946 [DEBUG] [Thread-196076] [transport.py] [_log()] Compression: none
2026-02-15T02:07:28.946 [DEBUG] [Thread-196076] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:07:29.004 [DEBUG] [Thread-196076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:07:29.004 [DEBUG] [Thread-196076] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:07:29.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:07:29.006 [DEBUG] [Thread-196076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:07:29.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:07:29.063 [DEBUG] [Thread-196076] [transport.py] [_log()] userauth is OK
2026-02-15T02:07:29.063 [DEBUG] [Thread-196076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:07:29.063 [DEBUG] [Thread-196076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:07:29.064 [DEBUG] [Thread-196076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:07:29.064 [DEBUG] [Thread-196076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:07:29.084 [INFO] [Thread-196076] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:07:29.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-15T02:07:29.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:07:29.898 [DEBUG] [Thread-196076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:07:29.898 [DEBUG] [Thread-196076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:07:29.946 [DEBUG] [Thread-196076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:07:29.947 [DEBUG] [Thread-196076] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:07:29.956 [DEBUG] [Thread-196076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:07:29.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:07:29.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-15T02:07:29.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:07:29.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:07:29.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:07:29.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:07:29.992 [DEBUG] [Thread-196076] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:07:33.725 [DEBUG] [Thread-196078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:07:40.016 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:07:40.017 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:07:48.778 [DEBUG] [Thread-196079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:07:59.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:07:59.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:07:59.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-15T02:08:01.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 7, 33), 1.77, 88.45, 0.0, 48.13, 7.33, 1, 1, 0, 2, 1, 0),)
2026-02-15T02:08:01.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:07:33
2026-02-15T02:08:02.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:08:02.492 [DEBUG] [Thread-196080] [transport.py] [_log()] starting thread (client mode): 0xa57d7b20
2026-02-15T02:08:02.493 [DEBUG] [Thread-196080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:08:02.515 [DEBUG] [Thread-196080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:08:02.515 [INFO] [Thread-196080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:08:02.516 [DEBUG] [Thread-196080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:08:02.516 [DEBUG] [Thread-196080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:08:02.516 [DEBUG] [Thread-196080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:08:02.516 [DEBUG] [Thread-196080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:08:02.516 [DEBUG] [Thread-196080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:08:02.516 [DEBUG] [Thread-196080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:08:02.516 [DEBUG] [Thread-196080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:08:02.516 [DEBUG] [Thread-196080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:08:02.516 [DEBUG] [Thread-196080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:08:02.516 [DEBUG] [Thread-196080] [transport.py] [_log()] client lang: <none>
2026-02-15T02:08:02.516 [DEBUG] [Thread-196080] [transport.py] [_log()] server lang: <none>
2026-02-15T02:08:02.516 [DEBUG] [Thread-196080] [transport.py] [_log()] kex follows: False
2026-02-15T02:08:02.516 [DEBUG] [Thread-196080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:08:02.517 [DEBUG] [Thread-196080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:08:02.517 [DEBUG] [Thread-196080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:08:02.517 [DEBUG] [Thread-196080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:08:02.517 [DEBUG] [Thread-196080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:08:02.517 [DEBUG] [Thread-196080] [transport.py] [_log()] Compression: none
2026-02-15T02:08:02.517 [DEBUG] [Thread-196080] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:08:02.528 [DEBUG] [Thread-196080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:08:02.529 [DEBUG] [Thread-196080] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:08:02.529 [DEBUG] [Thread-196080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:08:02.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:08:02.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:08:02.531 [DEBUG] [Thread-196080] [transport.py] [_log()] userauth is OK
2026-02-15T02:08:02.531 [DEBUG] [Thread-196080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:08:02.531 [DEBUG] [Thread-196080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:08:02.531 [DEBUG] [Thread-196080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:08:02.532 [DEBUG] [Thread-196080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:08:02.550 [INFO] [Thread-196080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:08:02.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:08:03.115 [DEBUG] [Thread-196080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:08:03.115 [DEBUG] [Thread-196080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:08:03.115 [DEBUG] [Thread-196080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:08:03.156 [DEBUG] [Thread-196080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:08:03.156 [DEBUG] [Thread-196080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:08:03.158 [DEBUG] [Thread-196080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:08:03.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:08:03.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:08:03.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:08:03.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:08:03.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:08:03.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:08:03.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:08:03.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:08:03.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:08:03.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.005316 -999.00   +6.80  32.57     90   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 32.6 32.6 140.6 46.0 7.4 -21.9 7.2 -21.8 7.0 -21.2 7.4 -22.1
2026-02-15T02:08:03.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:08:03.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:08:03.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.005316
2026-02-15T02:08:03.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:08:03.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:08:03.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:08:03.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:08:03.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:08:03.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:07:33', tmtdew=1.77, humidity=88.45, cloud=0.0, wind=48.13, temperature=7.33, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:07:39.302', atlas_cloud=1, atlas_rain=1, zp_data=[0.8777499999999998, 0.1172500000000003, 0.14775000000000027, 0.31349999999999945, 0.7795000000000014, 0.707250000000001, 1.0019999999999998, 0.39025000000000176, 0.14399999999999835, 0.10400000000000098, 0.13175000000000026, 0.21899999999999942, 0.41300000000000026, 0.3432499999999994, 0.36249999999999893, 0.17999999999999972, 0.1322499999999991, 0.12449999999999939, 0.7359999999999989, 0.3932499999999983, 0.2024999999999988, 0.19874999999999865, 0.16925000000000168, 0.1407500000000006, 0.14400000000000013, 0.20350000000000001, 0.5427499999999998, 0.2705000000000002, 0.15600000000000058, 0.10300000000000153, 0.2240000000000002, 0.1750000000000007, 0.12274999999999991], zp_timestamp='2026-02-15T00:05:00')
2026-02-15T02:08:03.172 [DEBUG] [Thread-196080] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:08:03.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-15T02:08:03.269 [DEBUG] [Thread-196083] [transport.py] [_log()] starting thread (client mode): 0xa2de3700
2026-02-15T02:08:03.270 [DEBUG] [Thread-196083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:08:03.284 [DEBUG] [Thread-196083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:08:03.284 [INFO] [Thread-196083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:08:03.291 [DEBUG] [Thread-196083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:08:03.292 [DEBUG] [Thread-196083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:08:03.292 [DEBUG] [Thread-196083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:08:03.292 [DEBUG] [Thread-196083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:08:03.292 [DEBUG] [Thread-196083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:08:03.292 [DEBUG] [Thread-196083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:08:03.292 [DEBUG] [Thread-196083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:08:03.292 [DEBUG] [Thread-196083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:08:03.292 [DEBUG] [Thread-196083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:08:03.292 [DEBUG] [Thread-196083] [transport.py] [_log()] client lang: <none>
2026-02-15T02:08:03.293 [DEBUG] [Thread-196083] [transport.py] [_log()] server lang: <none>
2026-02-15T02:08:03.293 [DEBUG] [Thread-196083] [transport.py] [_log()] kex follows: False
2026-02-15T02:08:03.293 [DEBUG] [Thread-196083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:08:03.293 [DEBUG] [Thread-196083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:08:03.293 [DEBUG] [Thread-196083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:08:03.293 [DEBUG] [Thread-196083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:08:03.293 [DEBUG] [Thread-196083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:08:03.293 [DEBUG] [Thread-196083] [transport.py] [_log()] Compression: none
2026-02-15T02:08:03.294 [DEBUG] [Thread-196083] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:08:03.350 [DEBUG] [Thread-196083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:08:03.351 [DEBUG] [Thread-196083] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:08:03.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:08:03.352 [DEBUG] [Thread-196083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:08:03.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:08:03.405 [DEBUG] [Thread-196083] [transport.py] [_log()] userauth is OK
2026-02-15T02:08:03.405 [DEBUG] [Thread-196083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:08:03.406 [DEBUG] [Thread-196083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:08:03.406 [DEBUG] [Thread-196083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:08:03.406 [DEBUG] [Thread-196083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:08:03.429 [INFO] [Thread-196083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:08:03.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-15T02:08:03.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:08:03.820 [DEBUG] [Thread-196085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:08:04.252 [DEBUG] [Thread-196083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:08:04.252 [DEBUG] [Thread-196083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:08:04.300 [DEBUG] [Thread-196083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:08:04.301 [DEBUG] [Thread-196083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:08:04.310 [DEBUG] [Thread-196083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:08:04.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:08:04.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:08:04.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:08:04.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:08:04.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:08:04.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:08:04.351 [DEBUG] [Thread-196083] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:08:15.544 [DEBUG] [Thread-196086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:08:18.874 [DEBUG] [Thread-196087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:08:33.912 [DEBUG] [Thread-196088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:08:34.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:08:34.370 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:08:34.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-15T02:08:36.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 8, 8), 1.33, 91.26, 0.0, 45.86, 7.05, 2, 2, 0, 2, 1, 0),)
2026-02-15T02:08:36.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:08:08
2026-02-15T02:08:36.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:08:36.728 [DEBUG] [Thread-196089] [transport.py] [_log()] starting thread (client mode): 0xa5740df0
2026-02-15T02:08:36.728 [DEBUG] [Thread-196089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:08:36.738 [DEBUG] [Thread-196089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:08:36.738 [INFO] [Thread-196089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:08:36.741 [DEBUG] [Thread-196089] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:08:36.741 [DEBUG] [Thread-196089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:08:36.741 [DEBUG] [Thread-196089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:08:36.741 [DEBUG] [Thread-196089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:08:36.742 [DEBUG] [Thread-196089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:08:36.742 [DEBUG] [Thread-196089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:08:36.742 [DEBUG] [Thread-196089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:08:36.742 [DEBUG] [Thread-196089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:08:36.742 [DEBUG] [Thread-196089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:08:36.742 [DEBUG] [Thread-196089] [transport.py] [_log()] client lang: <none>
2026-02-15T02:08:36.742 [DEBUG] [Thread-196089] [transport.py] [_log()] server lang: <none>
2026-02-15T02:08:36.742 [DEBUG] [Thread-196089] [transport.py] [_log()] kex follows: False
2026-02-15T02:08:36.742 [DEBUG] [Thread-196089] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:08:36.742 [DEBUG] [Thread-196089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:08:36.742 [DEBUG] [Thread-196089] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:08:36.742 [DEBUG] [Thread-196089] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:08:36.742 [DEBUG] [Thread-196089] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:08:36.742 [DEBUG] [Thread-196089] [transport.py] [_log()] Compression: none
2026-02-15T02:08:36.742 [DEBUG] [Thread-196089] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:08:36.756 [DEBUG] [Thread-196089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:08:36.756 [DEBUG] [Thread-196089] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:08:36.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:08:36.757 [DEBUG] [Thread-196089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:08:36.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:08:36.759 [DEBUG] [Thread-196089] [transport.py] [_log()] userauth is OK
2026-02-15T02:08:36.759 [DEBUG] [Thread-196089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:08:36.760 [DEBUG] [Thread-196089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:08:36.760 [DEBUG] [Thread-196089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:08:36.760 [DEBUG] [Thread-196089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:08:36.787 [INFO] [Thread-196089] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:08:36.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:08:37.391 [DEBUG] [Thread-196089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:08:37.392 [DEBUG] [Thread-196089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:08:37.392 [DEBUG] [Thread-196089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:08:37.432 [DEBUG] [Thread-196089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:08:37.433 [DEBUG] [Thread-196089] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:08:37.436 [DEBUG] [Thread-196089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:08:37.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:08:37.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:08:37.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:08:37.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:08:37.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:08:37.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:08:37.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:08:37.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:08:37.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:08:37.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.005663 -999.00   +6.80  31.63     90   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 31.6 31.6 142.2 42.2 7.4 -18.0 7.2 -20.4 7.0 -19.4 7.3 -21.3
2026-02-15T02:08:37.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:08:37.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:08:37.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.005663
2026-02-15T02:08:37.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:08:37.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:08:37.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:08:37.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:08:37.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:08:37.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:08:08', tmtdew=1.33, humidity=91.26, cloud=0.0, wind=45.86, temperature=7.05, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:08:09.283', atlas_cloud=1, atlas_rain=1, zp_data=[0.8777499999999998, 0.1172500000000003, 0.14775000000000027, 0.31349999999999945, 0.7795000000000014, 0.707250000000001, 1.0019999999999998, 0.39025000000000176, 0.14399999999999835, 0.10400000000000098, 0.13175000000000026, 0.21899999999999942, 0.41300000000000026, 0.3432499999999994, 0.36249999999999893, 0.17999999999999972, 0.1322499999999991, 0.12449999999999939, 0.7359999999999989, 0.3932499999999983, 0.2024999999999988, 0.19874999999999865, 0.16925000000000168, 0.1407500000000006, 0.14400000000000013, 0.20350000000000001, 0.5427499999999998, 0.2705000000000002, 0.15600000000000058, 0.10300000000000153, 0.2240000000000002, 0.1750000000000007, 0.12274999999999991], zp_timestamp='2026-02-15T00:05:00')
2026-02-15T02:08:37.462 [DEBUG] [Thread-196089] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:08:37.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-15T02:08:37.558 [DEBUG] [Thread-196092] [transport.py] [_log()] starting thread (client mode): 0xa5742f80
2026-02-15T02:08:37.558 [DEBUG] [Thread-196092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:08:37.573 [DEBUG] [Thread-196092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:08:37.574 [INFO] [Thread-196092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:08:37.581 [DEBUG] [Thread-196092] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:08:37.582 [DEBUG] [Thread-196092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:08:37.582 [DEBUG] [Thread-196092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:08:37.582 [DEBUG] [Thread-196092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:08:37.582 [DEBUG] [Thread-196092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:08:37.582 [DEBUG] [Thread-196092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:08:37.582 [DEBUG] [Thread-196092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:08:37.582 [DEBUG] [Thread-196092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:08:37.582 [DEBUG] [Thread-196092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:08:37.582 [DEBUG] [Thread-196092] [transport.py] [_log()] client lang: <none>
2026-02-15T02:08:37.582 [DEBUG] [Thread-196092] [transport.py] [_log()] server lang: <none>
2026-02-15T02:08:37.582 [DEBUG] [Thread-196092] [transport.py] [_log()] kex follows: False
2026-02-15T02:08:37.582 [DEBUG] [Thread-196092] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:08:37.582 [DEBUG] [Thread-196092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:08:37.582 [DEBUG] [Thread-196092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:08:37.582 [DEBUG] [Thread-196092] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:08:37.582 [DEBUG] [Thread-196092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:08:37.583 [DEBUG] [Thread-196092] [transport.py] [_log()] Compression: none
2026-02-15T02:08:37.583 [DEBUG] [Thread-196092] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:08:37.639 [DEBUG] [Thread-196092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:08:37.640 [DEBUG] [Thread-196092] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:08:37.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:08:37.641 [DEBUG] [Thread-196092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:08:37.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:08:37.695 [DEBUG] [Thread-196092] [transport.py] [_log()] userauth is OK
2026-02-15T02:08:37.696 [DEBUG] [Thread-196092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:08:37.696 [DEBUG] [Thread-196092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:08:37.696 [DEBUG] [Thread-196092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:08:37.696 [DEBUG] [Thread-196092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:08:37.713 [INFO] [Thread-196092] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:08:37.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-15T02:08:37.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:08:38.509 [DEBUG] [Thread-196092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:08:38.509 [DEBUG] [Thread-196092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:08:38.557 [DEBUG] [Thread-196092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:08:38.558 [DEBUG] [Thread-196092] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:08:38.567 [DEBUG] [Thread-196092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:08:38.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:08:38.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-15T02:08:38.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-15T02:08:38.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:08:38.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:08:38.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:08:38.601 [DEBUG] [Thread-196092] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:08:40.217 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:08:40.218 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:08:48.949 [DEBUG] [Thread-196094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:09:04.004 [DEBUG] [Thread-196095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:09:08.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:09:08.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:09:08.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-15T02:09:10.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 8, 44), 1.28, 91.24, 0.0, 41.92, 7.03, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:09:10.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:08:44
2026-02-15T02:09:10.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:09:11.057 [DEBUG] [Thread-196096] [transport.py] [_log()] starting thread (client mode): 0xa2d00f70
2026-02-15T02:09:11.057 [DEBUG] [Thread-196096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:09:11.076 [DEBUG] [Thread-196096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:09:11.076 [INFO] [Thread-196096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:09:11.078 [DEBUG] [Thread-196096] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:09:11.078 [DEBUG] [Thread-196096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:09:11.079 [DEBUG] [Thread-196096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:09:11.079 [DEBUG] [Thread-196096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:09:11.079 [DEBUG] [Thread-196096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:09:11.079 [DEBUG] [Thread-196096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:09:11.079 [DEBUG] [Thread-196096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:09:11.079 [DEBUG] [Thread-196096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:09:11.079 [DEBUG] [Thread-196096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:09:11.079 [DEBUG] [Thread-196096] [transport.py] [_log()] client lang: <none>
2026-02-15T02:09:11.079 [DEBUG] [Thread-196096] [transport.py] [_log()] server lang: <none>
2026-02-15T02:09:11.079 [DEBUG] [Thread-196096] [transport.py] [_log()] kex follows: False
2026-02-15T02:09:11.079 [DEBUG] [Thread-196096] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:09:11.079 [DEBUG] [Thread-196096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:09:11.079 [DEBUG] [Thread-196096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:09:11.079 [DEBUG] [Thread-196096] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:09:11.079 [DEBUG] [Thread-196096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:09:11.079 [DEBUG] [Thread-196096] [transport.py] [_log()] Compression: none
2026-02-15T02:09:11.079 [DEBUG] [Thread-196096] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:09:11.094 [DEBUG] [Thread-196096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:09:11.095 [DEBUG] [Thread-196096] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:09:11.095 [DEBUG] [Thread-196096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:09:11.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:09:11.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:09:11.097 [DEBUG] [Thread-196096] [transport.py] [_log()] userauth is OK
2026-02-15T02:09:11.097 [DEBUG] [Thread-196096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:09:11.097 [DEBUG] [Thread-196096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:09:11.098 [DEBUG] [Thread-196096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:09:11.098 [DEBUG] [Thread-196096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:09:11.115 [INFO] [Thread-196096] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:09:11.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:09:11.702 [DEBUG] [Thread-196096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:09:11.702 [DEBUG] [Thread-196096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:09:11.703 [DEBUG] [Thread-196096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:09:11.743 [DEBUG] [Thread-196096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:09:11.743 [DEBUG] [Thread-196096] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:09:11.747 [DEBUG] [Thread-196096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:09:11.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:09:11.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:09:11.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:09:11.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:09:11.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:09:11.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:09:11.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:09:11.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:09:11.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:09:11.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.006010 -999.00   +6.90  30.25     90   +5.50 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 30.2 30.2 146.4 37.9 7.4 -18.0 7.2 -17.1 7.0 -17.3 7.3 -19.2
2026-02-15T02:09:11.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:09:11.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:09:11.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.006010
2026-02-15T02:09:11.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:09:11.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:09:11.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:09:11.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:09:11.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:09:11.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:08:44', tmtdew=1.28, humidity=91.24, cloud=0.0, wind=41.92, temperature=7.03, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:08:39.264', atlas_cloud=1, atlas_rain=1, zp_data=[0.8777499999999998, 0.1172500000000003, 0.14775000000000027, 0.31349999999999945, 0.7795000000000014, 0.707250000000001, 1.0019999999999998, 0.39025000000000176, 0.14399999999999835, 0.10400000000000098, 0.13175000000000026, 0.21899999999999942, 0.41300000000000026, 0.3432499999999994, 0.36249999999999893, 0.17999999999999972, 0.1322499999999991, 0.12449999999999939, 0.7359999999999989, 0.3932499999999983, 0.2024999999999988, 0.19874999999999865, 0.16925000000000168, 0.1407500000000006, 0.14400000000000013, 0.20350000000000001, 0.5427499999999998, 0.2705000000000002, 0.15600000000000058, 0.10300000000000153, 0.2240000000000002, 0.1750000000000007, 0.12274999999999991], zp_timestamp='2026-02-15T00:05:00')
2026-02-15T02:09:11.776 [DEBUG] [Thread-196096] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:09:11.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-15T02:09:11.883 [DEBUG] [Thread-196099] [transport.py] [_log()] starting thread (client mode): 0xa2d87b20
2026-02-15T02:09:11.883 [DEBUG] [Thread-196099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:09:11.898 [DEBUG] [Thread-196099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:09:11.898 [INFO] [Thread-196099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:09:11.906 [DEBUG] [Thread-196099] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:09:11.906 [DEBUG] [Thread-196099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:09:11.906 [DEBUG] [Thread-196099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:09:11.906 [DEBUG] [Thread-196099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:09:11.907 [DEBUG] [Thread-196099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:09:11.907 [DEBUG] [Thread-196099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:09:11.907 [DEBUG] [Thread-196099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:09:11.907 [DEBUG] [Thread-196099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:09:11.907 [DEBUG] [Thread-196099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:09:11.907 [DEBUG] [Thread-196099] [transport.py] [_log()] client lang: <none>
2026-02-15T02:09:11.907 [DEBUG] [Thread-196099] [transport.py] [_log()] server lang: <none>
2026-02-15T02:09:11.907 [DEBUG] [Thread-196099] [transport.py] [_log()] kex follows: False
2026-02-15T02:09:11.907 [DEBUG] [Thread-196099] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:09:11.907 [DEBUG] [Thread-196099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:09:11.907 [DEBUG] [Thread-196099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:09:11.907 [DEBUG] [Thread-196099] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:09:11.907 [DEBUG] [Thread-196099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:09:11.907 [DEBUG] [Thread-196099] [transport.py] [_log()] Compression: none
2026-02-15T02:09:11.907 [DEBUG] [Thread-196099] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:09:11.966 [DEBUG] [Thread-196099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:09:11.967 [DEBUG] [Thread-196099] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:09:11.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:09:11.968 [DEBUG] [Thread-196099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:09:11.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:09:12.023 [DEBUG] [Thread-196099] [transport.py] [_log()] userauth is OK
2026-02-15T02:09:12.023 [DEBUG] [Thread-196099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:09:12.023 [DEBUG] [Thread-196099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:09:12.023 [DEBUG] [Thread-196099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:09:12.023 [DEBUG] [Thread-196099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:09:12.042 [INFO] [Thread-196099] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:09:12.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-15T02:09:12.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:09:12.890 [DEBUG] [Thread-196099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:09:12.891 [DEBUG] [Thread-196099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:09:12.940 [DEBUG] [Thread-196099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:09:12.941 [DEBUG] [Thread-196099] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:09:12.953 [DEBUG] [Thread-196099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:09:12.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:09:12.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-15T02:09:12.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-15T02:09:12.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:09:12.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:09:12.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:09:12.986 [DEBUG] [Thread-196099] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:09:15.616 [DEBUG] [Thread-196101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:09:19.040 [DEBUG] [Thread-196102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:09:34.097 [DEBUG] [Thread-196103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:09:40.421 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:09:40.422 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:09:43.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:09:43.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:09:43.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-15T02:09:44.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 9, 19), 1.28, 91.28, 0.0, 42.17, 7.02, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:09:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:09:19
2026-02-15T02:09:45.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:09:45.356 [DEBUG] [Thread-196104] [transport.py] [_log()] starting thread (client mode): 0xa2de3640
2026-02-15T02:09:45.356 [DEBUG] [Thread-196104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:09:45.377 [DEBUG] [Thread-196104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:09:45.377 [INFO] [Thread-196104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:09:45.380 [DEBUG] [Thread-196104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:09:45.380 [DEBUG] [Thread-196104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:09:45.380 [DEBUG] [Thread-196104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:09:45.380 [DEBUG] [Thread-196104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:09:45.381 [DEBUG] [Thread-196104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:09:45.381 [DEBUG] [Thread-196104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:09:45.381 [DEBUG] [Thread-196104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:09:45.381 [DEBUG] [Thread-196104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:09:45.381 [DEBUG] [Thread-196104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:09:45.381 [DEBUG] [Thread-196104] [transport.py] [_log()] client lang: <none>
2026-02-15T02:09:45.381 [DEBUG] [Thread-196104] [transport.py] [_log()] server lang: <none>
2026-02-15T02:09:45.381 [DEBUG] [Thread-196104] [transport.py] [_log()] kex follows: False
2026-02-15T02:09:45.381 [DEBUG] [Thread-196104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:09:45.381 [DEBUG] [Thread-196104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:09:45.381 [DEBUG] [Thread-196104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:09:45.381 [DEBUG] [Thread-196104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:09:45.381 [DEBUG] [Thread-196104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:09:45.381 [DEBUG] [Thread-196104] [transport.py] [_log()] Compression: none
2026-02-15T02:09:45.381 [DEBUG] [Thread-196104] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:09:45.398 [DEBUG] [Thread-196104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:09:45.399 [DEBUG] [Thread-196104] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:09:45.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:09:45.400 [DEBUG] [Thread-196104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:09:45.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:09:45.402 [DEBUG] [Thread-196104] [transport.py] [_log()] userauth is OK
2026-02-15T02:09:45.403 [DEBUG] [Thread-196104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:09:45.403 [DEBUG] [Thread-196104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:09:45.403 [DEBUG] [Thread-196104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:09:45.403 [DEBUG] [Thread-196104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:09:45.419 [INFO] [Thread-196104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:09:45.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:09:46.006 [DEBUG] [Thread-196104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:09:46.007 [DEBUG] [Thread-196104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:09:46.007 [DEBUG] [Thread-196104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:09:46.047 [DEBUG] [Thread-196104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:09:46.047 [DEBUG] [Thread-196104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:09:46.050 [DEBUG] [Thread-196104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:09:46.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:09:46.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:09:46.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:09:46.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:09:46.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:09:46.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:09:46.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:09:46.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:09:46.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:09:46.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.006010 -999.00   +6.90  30.25     90   +5.50 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 30.2 30.2 146.4 37.9 7.4 -18.0 7.2 -17.1 7.0 -17.3 7.3 -19.2
2026-02-15T02:09:46.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:09:46.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:09:46.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.006010
2026-02-15T02:09:46.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:09:46.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:09:46.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:09:46.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:09:46.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:09:46.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:09:19', tmtdew=1.28, humidity=91.28, cloud=0.0, wind=42.17, temperature=7.02, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:08:39.264', atlas_cloud=1, atlas_rain=1, zp_data=[0.8777499999999998, 0.1172500000000003, 0.14775000000000027, 0.31349999999999945, 0.7795000000000014, 0.707250000000001, 1.0019999999999998, 0.39025000000000176, 0.14399999999999835, 0.10400000000000098, 0.13175000000000026, 0.21899999999999942, 0.41300000000000026, 0.3432499999999994, 0.36249999999999893, 0.17999999999999972, 0.1322499999999991, 0.12449999999999939, 0.7359999999999989, 0.3932499999999983, 0.2024999999999988, 0.19874999999999865, 0.16925000000000168, 0.1407500000000006, 0.14400000000000013, 0.20350000000000001, 0.5427499999999998, 0.2705000000000002, 0.15600000000000058, 0.10300000000000153, 0.2240000000000002, 0.1750000000000007, 0.12274999999999991], zp_timestamp='2026-02-15T00:08:00')
2026-02-15T02:09:46.076 [DEBUG] [Thread-196104] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:09:46.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T02:09:46.175 [DEBUG] [Thread-196107] [transport.py] [_log()] starting thread (client mode): 0xa57d6140
2026-02-15T02:09:46.175 [DEBUG] [Thread-196107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:09:46.190 [DEBUG] [Thread-196107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:09:46.190 [INFO] [Thread-196107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:09:46.198 [DEBUG] [Thread-196107] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:09:46.198 [DEBUG] [Thread-196107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:09:46.198 [DEBUG] [Thread-196107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:09:46.198 [DEBUG] [Thread-196107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:09:46.199 [DEBUG] [Thread-196107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:09:46.199 [DEBUG] [Thread-196107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:09:46.199 [DEBUG] [Thread-196107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:09:46.199 [DEBUG] [Thread-196107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:09:46.199 [DEBUG] [Thread-196107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:09:46.199 [DEBUG] [Thread-196107] [transport.py] [_log()] client lang: <none>
2026-02-15T02:09:46.199 [DEBUG] [Thread-196107] [transport.py] [_log()] server lang: <none>
2026-02-15T02:09:46.199 [DEBUG] [Thread-196107] [transport.py] [_log()] kex follows: False
2026-02-15T02:09:46.199 [DEBUG] [Thread-196107] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:09:46.200 [DEBUG] [Thread-196107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:09:46.200 [DEBUG] [Thread-196107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:09:46.200 [DEBUG] [Thread-196107] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:09:46.200 [DEBUG] [Thread-196107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:09:46.200 [DEBUG] [Thread-196107] [transport.py] [_log()] Compression: none
2026-02-15T02:09:46.200 [DEBUG] [Thread-196107] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:09:46.258 [DEBUG] [Thread-196107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:09:46.259 [DEBUG] [Thread-196107] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:09:46.260 [DEBUG] [Thread-196107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:09:46.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:09:46.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:09:46.317 [DEBUG] [Thread-196107] [transport.py] [_log()] userauth is OK
2026-02-15T02:09:46.318 [DEBUG] [Thread-196107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:09:46.318 [DEBUG] [Thread-196107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:09:46.318 [DEBUG] [Thread-196107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:09:46.318 [DEBUG] [Thread-196107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:09:46.337 [INFO] [Thread-196107] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:09:46.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T02:09:46.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:09:47.182 [DEBUG] [Thread-196107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:09:47.182 [DEBUG] [Thread-196107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:09:47.230 [DEBUG] [Thread-196107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:09:47.230 [DEBUG] [Thread-196107] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:09:47.238 [DEBUG] [Thread-196107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:09:47.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:09:47.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-15T02:09:47.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:09:47.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:09:47.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:09:47.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:09:47.270 [DEBUG] [Thread-196107] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:09:49.135 [DEBUG] [Thread-196109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:10:04.188 [DEBUG] [Thread-196110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:10:15.672 [DEBUG] [Thread-196111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:10:17.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:10:17.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:10:17.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-15T02:10:19.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 9, 54), 1.32, 91.36, 0.0, 42.91, 7.03, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:10:19.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:09:54
2026-02-15T02:10:19.225 [DEBUG] [Thread-196112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:10:19.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:10:19.640 [DEBUG] [Thread-196113] [transport.py] [_log()] starting thread (client mode): 0xa2d85060
2026-02-15T02:10:19.640 [DEBUG] [Thread-196113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:10:19.661 [DEBUG] [Thread-196113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:10:19.661 [INFO] [Thread-196113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:10:19.664 [DEBUG] [Thread-196113] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:10:19.664 [DEBUG] [Thread-196113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:10:19.664 [DEBUG] [Thread-196113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:10:19.664 [DEBUG] [Thread-196113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:10:19.664 [DEBUG] [Thread-196113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:10:19.664 [DEBUG] [Thread-196113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:10:19.664 [DEBUG] [Thread-196113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:10:19.664 [DEBUG] [Thread-196113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:10:19.664 [DEBUG] [Thread-196113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:10:19.664 [DEBUG] [Thread-196113] [transport.py] [_log()] client lang: <none>
2026-02-15T02:10:19.664 [DEBUG] [Thread-196113] [transport.py] [_log()] server lang: <none>
2026-02-15T02:10:19.664 [DEBUG] [Thread-196113] [transport.py] [_log()] kex follows: False
2026-02-15T02:10:19.664 [DEBUG] [Thread-196113] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:10:19.664 [DEBUG] [Thread-196113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:10:19.664 [DEBUG] [Thread-196113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:10:19.664 [DEBUG] [Thread-196113] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:10:19.664 [DEBUG] [Thread-196113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:10:19.664 [DEBUG] [Thread-196113] [transport.py] [_log()] Compression: none
2026-02-15T02:10:19.664 [DEBUG] [Thread-196113] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:10:19.679 [DEBUG] [Thread-196113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:10:19.679 [DEBUG] [Thread-196113] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:10:19.679 [DEBUG] [Thread-196113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:10:19.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:10:19.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:10:19.680 [DEBUG] [Thread-196113] [transport.py] [_log()] userauth is OK
2026-02-15T02:10:19.680 [DEBUG] [Thread-196113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:10:19.680 [DEBUG] [Thread-196113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:10:19.680 [DEBUG] [Thread-196113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:10:19.680 [DEBUG] [Thread-196113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:10:19.689 [INFO] [Thread-196113] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:10:19.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:10:20.310 [DEBUG] [Thread-196113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:10:20.310 [DEBUG] [Thread-196113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:10:20.310 [DEBUG] [Thread-196113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:10:20.350 [DEBUG] [Thread-196113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:10:20.350 [DEBUG] [Thread-196113] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:10:20.353 [DEBUG] [Thread-196113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:10:20.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:10:20.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:10:20.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:10:20.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:10:20.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:10:20.377 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:10:20.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:10:20.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:10:20.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:10:20.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.006705 -999.00   +6.80  27.66     90   +5.40 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 27.7 27.7 142.8 38.9 7.4 -23.7 7.2 -22.6 7.0 -21.5 7.4 -22.9
2026-02-15T02:10:20.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:10:20.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:10:20.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.006705
2026-02-15T02:10:20.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:10:20.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:10:20.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:10:20.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:10:20.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:10:20.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:09:54', tmtdew=1.32, humidity=91.36, cloud=0.0, wind=42.91, temperature=7.03, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:09:39.312', atlas_cloud=1, atlas_rain=1, zp_data=[0.8777499999999998, 0.1172500000000003, 0.14775000000000027, 0.31349999999999945, 0.7795000000000014, 0.707250000000001, 1.0019999999999998, 0.39025000000000176, 0.14399999999999835, 0.10400000000000098, 0.13175000000000026, 0.21899999999999942, 0.41300000000000026, 0.3432499999999994, 0.36249999999999893, 0.17999999999999972, 0.1322499999999991, 0.12449999999999939, 0.7359999999999989, 0.3932499999999983, 0.2024999999999988, 0.19874999999999865, 0.16925000000000168, 0.1407500000000006, 0.14400000000000013, 0.20350000000000001, 0.5427499999999998, 0.2705000000000002, 0.15600000000000058, 0.10300000000000153, 0.2240000000000002, 0.1750000000000007, 0.12274999999999991], zp_timestamp='2026-02-15T00:08:00')
2026-02-15T02:10:20.381 [DEBUG] [Thread-196113] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:10:20.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-15T02:10:20.478 [DEBUG] [Thread-196116] [transport.py] [_log()] starting thread (client mode): 0xa2d10790
2026-02-15T02:10:20.479 [DEBUG] [Thread-196116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:10:20.494 [DEBUG] [Thread-196116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:10:20.494 [INFO] [Thread-196116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:10:20.502 [DEBUG] [Thread-196116] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:10:20.502 [DEBUG] [Thread-196116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:10:20.502 [DEBUG] [Thread-196116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:10:20.502 [DEBUG] [Thread-196116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:10:20.502 [DEBUG] [Thread-196116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:10:20.502 [DEBUG] [Thread-196116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:10:20.502 [DEBUG] [Thread-196116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:10:20.502 [DEBUG] [Thread-196116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:10:20.502 [DEBUG] [Thread-196116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:10:20.502 [DEBUG] [Thread-196116] [transport.py] [_log()] client lang: <none>
2026-02-15T02:10:20.502 [DEBUG] [Thread-196116] [transport.py] [_log()] server lang: <none>
2026-02-15T02:10:20.502 [DEBUG] [Thread-196116] [transport.py] [_log()] kex follows: False
2026-02-15T02:10:20.502 [DEBUG] [Thread-196116] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:10:20.502 [DEBUG] [Thread-196116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:10:20.502 [DEBUG] [Thread-196116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:10:20.503 [DEBUG] [Thread-196116] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:10:20.503 [DEBUG] [Thread-196116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:10:20.503 [DEBUG] [Thread-196116] [transport.py] [_log()] Compression: none
2026-02-15T02:10:20.503 [DEBUG] [Thread-196116] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:10:20.560 [DEBUG] [Thread-196116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:10:20.561 [DEBUG] [Thread-196116] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:10:20.561 [DEBUG] [Thread-196116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:10:20.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:10:20.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:10:20.616 [DEBUG] [Thread-196116] [transport.py] [_log()] userauth is OK
2026-02-15T02:10:20.616 [DEBUG] [Thread-196116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:10:20.616 [DEBUG] [Thread-196116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:10:20.617 [DEBUG] [Thread-196116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:10:20.617 [DEBUG] [Thread-196116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:10:20.636 [INFO] [Thread-196116] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:10:20.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-15T02:10:20.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:10:21.412 [DEBUG] [Thread-196116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:10:21.413 [DEBUG] [Thread-196116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:10:21.460 [DEBUG] [Thread-196116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:10:21.461 [DEBUG] [Thread-196116] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:10:21.470 [DEBUG] [Thread-196116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:10:21.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:10: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-15T02:10:21.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-15T02:10:21.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:10:21.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:10:21.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:10:21.507 [DEBUG] [Thread-196116] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:10:34.260 [DEBUG] [Thread-196118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:10:40.627 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:10:40.628 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:10:49.313 [DEBUG] [Thread-196119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:10:51.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:10:51.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:10:51.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:10:53.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 10, 29), 1.33, 91.29, 0.0, 42.01, 7.0, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:10:53.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:10:29
2026-02-15T02:10:53.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:10:53.935 [DEBUG] [Thread-196120] [transport.py] [_log()] starting thread (client mode): 0xa2d79780
2026-02-15T02:10:53.935 [DEBUG] [Thread-196120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:10:53.955 [DEBUG] [Thread-196120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:10:53.955 [INFO] [Thread-196120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:10:53.958 [DEBUG] [Thread-196120] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:10:53.958 [DEBUG] [Thread-196120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:10:53.958 [DEBUG] [Thread-196120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:10:53.958 [DEBUG] [Thread-196120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:10:53.958 [DEBUG] [Thread-196120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:10:53.958 [DEBUG] [Thread-196120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:10:53.958 [DEBUG] [Thread-196120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:10:53.958 [DEBUG] [Thread-196120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:10:53.958 [DEBUG] [Thread-196120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:10:53.958 [DEBUG] [Thread-196120] [transport.py] [_log()] client lang: <none>
2026-02-15T02:10:53.958 [DEBUG] [Thread-196120] [transport.py] [_log()] server lang: <none>
2026-02-15T02:10:53.958 [DEBUG] [Thread-196120] [transport.py] [_log()] kex follows: False
2026-02-15T02:10:53.958 [DEBUG] [Thread-196120] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:10:53.958 [DEBUG] [Thread-196120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:10:53.958 [DEBUG] [Thread-196120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:10:53.958 [DEBUG] [Thread-196120] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:10:53.959 [DEBUG] [Thread-196120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:10:53.959 [DEBUG] [Thread-196120] [transport.py] [_log()] Compression: none
2026-02-15T02:10:53.959 [DEBUG] [Thread-196120] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:10:53.975 [DEBUG] [Thread-196120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:10:53.975 [DEBUG] [Thread-196120] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:10:53.975 [DEBUG] [Thread-196120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:10:53.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:10:53.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:10:54.020 [DEBUG] [Thread-196120] [transport.py] [_log()] userauth is OK
2026-02-15T02:10:54.021 [DEBUG] [Thread-196120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:10:54.021 [DEBUG] [Thread-196120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:10:54.021 [DEBUG] [Thread-196120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:10:54.021 [DEBUG] [Thread-196120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:10:54.046 [INFO] [Thread-196120] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:10:54.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:10:54.687 [DEBUG] [Thread-196120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:10:54.687 [DEBUG] [Thread-196120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:10:54.687 [DEBUG] [Thread-196120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:10:54.727 [DEBUG] [Thread-196120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:10:54.728 [DEBUG] [Thread-196120] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:10:54.731 [DEBUG] [Thread-196120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:10:54.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:10:54.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:10:54.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:10:54.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:10:54.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:10:54.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:10:54.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:10:54.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:10:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:10:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.007052 -999.00   +6.80  34.39     90   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 34.4 34.4 133.0 44.5 7.4 -23.3 7.2 -20.3 7.0 -18.6 7.3 -21.1
2026-02-15T02:10:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:10:54.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:10:54.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.007052
2026-02-15T02:10:54.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:10:54.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:10:54.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:10:54.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:10:54.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:10:54.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:10:29', tmtdew=1.33, humidity=91.29, cloud=0.0, wind=42.01, temperature=7.0, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:10:09.293', atlas_cloud=1, atlas_rain=1, zp_data=[0.8777499999999998, 0.1172500000000003, 0.14775000000000027, 0.31349999999999945, 0.7795000000000014, 0.707250000000001, 1.0019999999999998, 0.39025000000000176, 0.14399999999999835, 0.10400000000000098, 0.13175000000000026, 0.21899999999999942, 0.41300000000000026, 0.3432499999999994, 0.36249999999999893, 0.17999999999999972, 0.1322499999999991, 0.12449999999999939, 0.7359999999999989, 0.3932499999999983, 0.2024999999999988, 0.19874999999999865, 0.16925000000000168, 0.1407500000000006, 0.14400000000000013, 0.20350000000000001, 0.5427499999999998, 0.2705000000000002, 0.15600000000000058, 0.10300000000000153, 0.2240000000000002, 0.1750000000000007, 0.12274999999999991], zp_timestamp='2026-02-15T00:08:00')
2026-02-15T02:10:54.758 [DEBUG] [Thread-196120] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:10:54.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-15T02:10:54.854 [DEBUG] [Thread-196123] [transport.py] [_log()] starting thread (client mode): 0xa2d95570
2026-02-15T02:10:54.854 [DEBUG] [Thread-196123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:10:54.869 [DEBUG] [Thread-196123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:10:54.869 [INFO] [Thread-196123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:10:54.886 [DEBUG] [Thread-196123] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:10:54.886 [DEBUG] [Thread-196123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:10:54.886 [DEBUG] [Thread-196123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:10:54.886 [DEBUG] [Thread-196123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:10:54.886 [DEBUG] [Thread-196123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:10:54.886 [DEBUG] [Thread-196123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:10:54.887 [DEBUG] [Thread-196123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:10:54.887 [DEBUG] [Thread-196123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:10:54.887 [DEBUG] [Thread-196123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:10:54.887 [DEBUG] [Thread-196123] [transport.py] [_log()] client lang: <none>
2026-02-15T02:10:54.887 [DEBUG] [Thread-196123] [transport.py] [_log()] server lang: <none>
2026-02-15T02:10:54.887 [DEBUG] [Thread-196123] [transport.py] [_log()] kex follows: False
2026-02-15T02:10:54.887 [DEBUG] [Thread-196123] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:10:54.887 [DEBUG] [Thread-196123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:10:54.887 [DEBUG] [Thread-196123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:10:54.887 [DEBUG] [Thread-196123] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:10:54.887 [DEBUG] [Thread-196123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:10:54.887 [DEBUG] [Thread-196123] [transport.py] [_log()] Compression: none
2026-02-15T02:10:54.887 [DEBUG] [Thread-196123] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:10:54.933 [DEBUG] [Thread-196123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:10:54.934 [DEBUG] [Thread-196123] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:10:54.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:10:54.935 [DEBUG] [Thread-196123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:10:54.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:10:54.990 [DEBUG] [Thread-196123] [transport.py] [_log()] userauth is OK
2026-02-15T02:10:54.990 [DEBUG] [Thread-196123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:10:54.990 [DEBUG] [Thread-196123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:10:54.990 [DEBUG] [Thread-196123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:10:54.990 [DEBUG] [Thread-196123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:10:55.010 [INFO] [Thread-196123] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:10:55.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-15T02:10:55.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:10:55.823 [DEBUG] [Thread-196123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:10:55.823 [DEBUG] [Thread-196123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:10:55.871 [DEBUG] [Thread-196123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:10:55.872 [DEBUG] [Thread-196123] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:10:55.881 [DEBUG] [Thread-196123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:10:55.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:10:55.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-15T02:10:55.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-15T02:10:55.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:10:55.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:10:55.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:10:55.918 [DEBUG] [Thread-196123] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:11:04.349 [DEBUG] [Thread-196125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:11:15.729 [DEBUG] [Thread-196126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:11:19.400 [DEBUG] [Thread-196127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:11:25.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:11:25.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:11:25.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-15T02:11:27.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 11, 5), 1.32, 91.36, 0.0, 44.5, 7.02, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:11:27.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:11:05
2026-02-15T02:11:28.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:11:28.347 [DEBUG] [Thread-196128] [transport.py] [_log()] starting thread (client mode): 0xa2d121d0
2026-02-15T02:11:28.347 [DEBUG] [Thread-196128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:11:28.368 [DEBUG] [Thread-196128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:11:28.369 [INFO] [Thread-196128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:11:28.372 [DEBUG] [Thread-196128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:11:28.372 [DEBUG] [Thread-196128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:11:28.372 [DEBUG] [Thread-196128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:11:28.372 [DEBUG] [Thread-196128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:11:28.372 [DEBUG] [Thread-196128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:11:28.372 [DEBUG] [Thread-196128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:11:28.372 [DEBUG] [Thread-196128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:11:28.372 [DEBUG] [Thread-196128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:11:28.372 [DEBUG] [Thread-196128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:11:28.373 [DEBUG] [Thread-196128] [transport.py] [_log()] client lang: <none>
2026-02-15T02:11:28.373 [DEBUG] [Thread-196128] [transport.py] [_log()] server lang: <none>
2026-02-15T02:11:28.373 [DEBUG] [Thread-196128] [transport.py] [_log()] kex follows: False
2026-02-15T02:11:28.373 [DEBUG] [Thread-196128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:11:28.373 [DEBUG] [Thread-196128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:11:28.373 [DEBUG] [Thread-196128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:11:28.373 [DEBUG] [Thread-196128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:11:28.373 [DEBUG] [Thread-196128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:11:28.373 [DEBUG] [Thread-196128] [transport.py] [_log()] Compression: none
2026-02-15T02:11:28.373 [DEBUG] [Thread-196128] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:11:28.392 [DEBUG] [Thread-196128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:11:28.392 [DEBUG] [Thread-196128] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:11:28.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:11:28.393 [DEBUG] [Thread-196128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:11:28.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:11:28.395 [DEBUG] [Thread-196128] [transport.py] [_log()] userauth is OK
2026-02-15T02:11:28.395 [DEBUG] [Thread-196128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:11:28.395 [DEBUG] [Thread-196128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:11:28.396 [DEBUG] [Thread-196128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:11:28.396 [DEBUG] [Thread-196128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:11:28.420 [INFO] [Thread-196128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:11:28.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:11:29.058 [DEBUG] [Thread-196128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:11:29.058 [DEBUG] [Thread-196128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:11:29.058 [DEBUG] [Thread-196128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:11:29.099 [DEBUG] [Thread-196128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:11:29.099 [DEBUG] [Thread-196128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:11:29.101 [DEBUG] [Thread-196128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:11:29.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:11:29.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:11:29.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:11:29.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:11:29.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:11:29.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:11:29.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:11:29.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:11:29.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:11:29.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.007399 -999.00   +6.90  31.73     90   +5.50 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 31.7 31.7 146.6 39.2 7.4 -23.6 7.2 -22.9 7.0 -21.9 7.4 -23.1
2026-02-15T02:11:29.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:11:29.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:11:29.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.007399
2026-02-15T02:11:29.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:11:29.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:11:29.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:11:29.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:11:29.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:11:29.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:11:05', tmtdew=1.32, humidity=91.36, cloud=0.0, wind=44.5, temperature=7.02, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:10:39.274', atlas_cloud=1, atlas_rain=1, zp_data=[0.8777499999999998, 0.1172500000000003, 0.14775000000000027, 0.31349999999999945, 0.7795000000000014, 0.707250000000001, 1.0019999999999998, 0.39025000000000176, 0.14399999999999835, 0.10400000000000098, 0.13175000000000026, 0.21899999999999942, 0.41300000000000026, 0.3432499999999994, 0.36249999999999893, 0.17999999999999972, 0.1322499999999991, 0.12449999999999939, 0.7359999999999989, 0.3932499999999983, 0.2024999999999988, 0.19874999999999865, 0.16925000000000168, 0.1407500000000006, 0.14400000000000013, 0.20350000000000001, 0.5427499999999998, 0.2705000000000002, 0.15600000000000058, 0.10300000000000153, 0.2240000000000002, 0.1750000000000007, 0.12274999999999991], zp_timestamp='2026-02-15T00:08:00')
2026-02-15T02:11:29.121 [DEBUG] [Thread-196128] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:11:29.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-15T02:11:29.208 [DEBUG] [Thread-196131] [transport.py] [_log()] starting thread (client mode): 0xa2d6e860
2026-02-15T02:11:29.208 [DEBUG] [Thread-196131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:11:29.222 [DEBUG] [Thread-196131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:11:29.222 [INFO] [Thread-196131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:11:29.230 [DEBUG] [Thread-196131] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:11:29.230 [DEBUG] [Thread-196131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:11:29.230 [DEBUG] [Thread-196131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:11:29.230 [DEBUG] [Thread-196131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:11:29.230 [DEBUG] [Thread-196131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:11:29.231 [DEBUG] [Thread-196131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:11:29.231 [DEBUG] [Thread-196131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:11:29.231 [DEBUG] [Thread-196131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:11:29.231 [DEBUG] [Thread-196131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:11:29.231 [DEBUG] [Thread-196131] [transport.py] [_log()] client lang: <none>
2026-02-15T02:11:29.231 [DEBUG] [Thread-196131] [transport.py] [_log()] server lang: <none>
2026-02-15T02:11:29.231 [DEBUG] [Thread-196131] [transport.py] [_log()] kex follows: False
2026-02-15T02:11:29.231 [DEBUG] [Thread-196131] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:11:29.231 [DEBUG] [Thread-196131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:11:29.231 [DEBUG] [Thread-196131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:11:29.232 [DEBUG] [Thread-196131] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:11:29.232 [DEBUG] [Thread-196131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:11:29.232 [DEBUG] [Thread-196131] [transport.py] [_log()] Compression: none
2026-02-15T02:11:29.232 [DEBUG] [Thread-196131] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:11:29.288 [DEBUG] [Thread-196131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:11:29.289 [DEBUG] [Thread-196131] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:11:29.289 [DEBUG] [Thread-196131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:11:29.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:11:29.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:11:29.344 [DEBUG] [Thread-196131] [transport.py] [_log()] userauth is OK
2026-02-15T02:11:29.345 [DEBUG] [Thread-196131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:11:29.345 [DEBUG] [Thread-196131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:11:29.345 [DEBUG] [Thread-196131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:11:29.345 [DEBUG] [Thread-196131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:11:29.363 [INFO] [Thread-196131] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:11:29.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-15T02:11:29.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:11:30.214 [DEBUG] [Thread-196131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:11:30.214 [DEBUG] [Thread-196131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:11:30.262 [DEBUG] [Thread-196131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:11:30.262 [DEBUG] [Thread-196131] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:11:30.271 [DEBUG] [Thread-196131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:11:30.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:11:30.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-15T02:11:30.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:11:30.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:11:30.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:11:30.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:11:30.307 [DEBUG] [Thread-196131] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:11:34.433 [DEBUG] [Thread-196133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:11:40.848 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:11:40.849 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:11:49.486 [DEBUG] [Thread-196134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:12:00.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:12:00.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:12:00.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-15T02:12:02.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 11, 42), 1.73, 88.75, 0.0, 44.77, 7.3, 1, 1, 0, 2, 0, 0),)
2026-02-15T02:12:02.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:11:42
2026-02-15T02:12:02.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:12:03.159 [DEBUG] [Thread-196135] [transport.py] [_log()] starting thread (client mode): 0xa2d94f70
2026-02-15T02:12:03.160 [DEBUG] [Thread-196135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:12:03.180 [DEBUG] [Thread-196135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:12:03.180 [INFO] [Thread-196135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:12:03.183 [DEBUG] [Thread-196135] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:12:03.183 [DEBUG] [Thread-196135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:12:03.183 [DEBUG] [Thread-196135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:12:03.183 [DEBUG] [Thread-196135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:12:03.183 [DEBUG] [Thread-196135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:12:03.184 [DEBUG] [Thread-196135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:12:03.184 [DEBUG] [Thread-196135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:12:03.184 [DEBUG] [Thread-196135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:12:03.184 [DEBUG] [Thread-196135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:12:03.184 [DEBUG] [Thread-196135] [transport.py] [_log()] client lang: <none>
2026-02-15T02:12:03.184 [DEBUG] [Thread-196135] [transport.py] [_log()] server lang: <none>
2026-02-15T02:12:03.184 [DEBUG] [Thread-196135] [transport.py] [_log()] kex follows: False
2026-02-15T02:12:03.184 [DEBUG] [Thread-196135] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:12:03.184 [DEBUG] [Thread-196135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:12:03.184 [DEBUG] [Thread-196135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:12:03.184 [DEBUG] [Thread-196135] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:12:03.184 [DEBUG] [Thread-196135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:12:03.184 [DEBUG] [Thread-196135] [transport.py] [_log()] Compression: none
2026-02-15T02:12:03.184 [DEBUG] [Thread-196135] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:12:03.201 [DEBUG] [Thread-196135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:12:03.201 [DEBUG] [Thread-196135] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:12:03.202 [DEBUG] [Thread-196135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:12:03.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:12:03.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:12:03.204 [DEBUG] [Thread-196135] [transport.py] [_log()] userauth is OK
2026-02-15T02:12:03.204 [DEBUG] [Thread-196135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:12:03.204 [DEBUG] [Thread-196135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:12:03.204 [DEBUG] [Thread-196135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:12:03.204 [DEBUG] [Thread-196135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:12:03.226 [INFO] [Thread-196135] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:12:03.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:12:03.880 [DEBUG] [Thread-196135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:12:03.881 [DEBUG] [Thread-196135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:12:03.881 [DEBUG] [Thread-196135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:12:03.921 [DEBUG] [Thread-196135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:12:03.922 [DEBUG] [Thread-196135] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:12:03.925 [DEBUG] [Thread-196135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:12:03.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:12:03.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:12:03.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:12:03.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:12:03.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:12:03.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:12:03.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:12:03.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:12:03.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:12:03.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.007746 -999.00   +6.80  30.74     90   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 30.7 30.7 143.6 40.4 7.4 -23.3 7.2 -22.6 7.0 -21.9 7.3 -22.8
2026-02-15T02:12:03.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:12:03.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:12:03.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.007746
2026-02-15T02:12:03.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:12:03.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:12:03.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:12:03.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:12:03.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:12:03.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:11:42', tmtdew=1.73, humidity=88.75, cloud=0.0, wind=44.77, temperature=7.3, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:11:09.254', atlas_cloud=1, atlas_rain=1, zp_data=[0.8777499999999998, 0.1172500000000003, 0.14775000000000027, 0.31349999999999945, 0.7795000000000014, 0.707250000000001, 1.0019999999999998, 0.39025000000000176, 0.14399999999999835, 0.10400000000000098, 0.13175000000000026, 0.21899999999999942, 0.41300000000000026, 0.3432499999999994, 0.36249999999999893, 0.17999999999999972, 0.1322499999999991, 0.12449999999999939, 0.7359999999999989, 0.3932499999999983, 0.2024999999999988, 0.19874999999999865, 0.16925000000000168, 0.1407500000000006, 0.14400000000000013, 0.20350000000000001, 0.5427499999999998, 0.2705000000000002, 0.15600000000000058, 0.10300000000000153, 0.2240000000000002, 0.1750000000000007, 0.12274999999999991], zp_timestamp='2026-02-15T00:08:00')
2026-02-15T02:12:03.951 [DEBUG] [Thread-196135] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:12:04.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-15T02:12:04.046 [DEBUG] [Thread-196138] [transport.py] [_log()] starting thread (client mode): 0xa2d6a860
2026-02-15T02:12:04.047 [DEBUG] [Thread-196138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:12:04.061 [DEBUG] [Thread-196138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:12:04.061 [INFO] [Thread-196138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:12:04.069 [DEBUG] [Thread-196138] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:12:04.069 [DEBUG] [Thread-196138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:12:04.069 [DEBUG] [Thread-196138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:12:04.069 [DEBUG] [Thread-196138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:12:04.069 [DEBUG] [Thread-196138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:12:04.070 [DEBUG] [Thread-196138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:12:04.070 [DEBUG] [Thread-196138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:12:04.070 [DEBUG] [Thread-196138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:12:04.070 [DEBUG] [Thread-196138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:12:04.070 [DEBUG] [Thread-196138] [transport.py] [_log()] client lang: <none>
2026-02-15T02:12:04.070 [DEBUG] [Thread-196138] [transport.py] [_log()] server lang: <none>
2026-02-15T02:12:04.070 [DEBUG] [Thread-196138] [transport.py] [_log()] kex follows: False
2026-02-15T02:12:04.070 [DEBUG] [Thread-196138] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:12:04.070 [DEBUG] [Thread-196138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:12:04.070 [DEBUG] [Thread-196138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:12:04.070 [DEBUG] [Thread-196138] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:12:04.070 [DEBUG] [Thread-196138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:12:04.070 [DEBUG] [Thread-196138] [transport.py] [_log()] Compression: none
2026-02-15T02:12:04.070 [DEBUG] [Thread-196138] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:12:04.128 [DEBUG] [Thread-196138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:12:04.129 [DEBUG] [Thread-196138] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:12:04.130 [DEBUG] [Thread-196138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:12:04.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:12:04.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:12:04.184 [DEBUG] [Thread-196138] [transport.py] [_log()] userauth is OK
2026-02-15T02:12:04.185 [DEBUG] [Thread-196138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:12:04.185 [DEBUG] [Thread-196138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:12:04.185 [DEBUG] [Thread-196138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:12:04.185 [DEBUG] [Thread-196138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:12:04.203 [INFO] [Thread-196138] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:12:04.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-15T02:12:04.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:12:04.524 [DEBUG] [Thread-196140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:12:05.003 [DEBUG] [Thread-196138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:12:05.004 [DEBUG] [Thread-196138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:12:05.051 [DEBUG] [Thread-196138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:12:05.052 [DEBUG] [Thread-196138] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:12:05.061 [DEBUG] [Thread-196138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:12:05.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:12:05.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-15T02:12:05.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-15T02:12:05.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:12:05.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:12:05.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:12:05.096 [DEBUG] [Thread-196138] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:12:15.817 [DEBUG] [Thread-196141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:12:19.579 [DEBUG] [Thread-196142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:12:34.615 [DEBUG] [Thread-196143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:12:35.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:12:35.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:12:35.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:12:36.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 12, 18), 1.32, 91.33, 0.0, 39.95, 7.02, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:12:36.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:12:18
2026-02-15T02:12:37.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:12:37.490 [DEBUG] [Thread-196144] [transport.py] [_log()] starting thread (client mode): 0xa2d6c430
2026-02-15T02:12:37.490 [DEBUG] [Thread-196144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:12:37.510 [DEBUG] [Thread-196144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:12:37.510 [INFO] [Thread-196144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:12:37.513 [DEBUG] [Thread-196144] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:12:37.513 [DEBUG] [Thread-196144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:12:37.513 [DEBUG] [Thread-196144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:12:37.513 [DEBUG] [Thread-196144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:12:37.514 [DEBUG] [Thread-196144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:12:37.514 [DEBUG] [Thread-196144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:12:37.514 [DEBUG] [Thread-196144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:12:37.514 [DEBUG] [Thread-196144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:12:37.514 [DEBUG] [Thread-196144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:12:37.514 [DEBUG] [Thread-196144] [transport.py] [_log()] client lang: <none>
2026-02-15T02:12:37.514 [DEBUG] [Thread-196144] [transport.py] [_log()] server lang: <none>
2026-02-15T02:12:37.514 [DEBUG] [Thread-196144] [transport.py] [_log()] kex follows: False
2026-02-15T02:12:37.514 [DEBUG] [Thread-196144] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:12:37.514 [DEBUG] [Thread-196144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:12:37.514 [DEBUG] [Thread-196144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:12:37.514 [DEBUG] [Thread-196144] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:12:37.514 [DEBUG] [Thread-196144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:12:37.514 [DEBUG] [Thread-196144] [transport.py] [_log()] Compression: none
2026-02-15T02:12:37.514 [DEBUG] [Thread-196144] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:12:37.533 [DEBUG] [Thread-196144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:12:37.534 [DEBUG] [Thread-196144] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:12:37.534 [DEBUG] [Thread-196144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:12:37.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:12:37.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:12:37.536 [DEBUG] [Thread-196144] [transport.py] [_log()] userauth is OK
2026-02-15T02:12:37.536 [DEBUG] [Thread-196144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:12:37.536 [DEBUG] [Thread-196144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:12:37.537 [DEBUG] [Thread-196144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:12:37.537 [DEBUG] [Thread-196144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:12:37.552 [INFO] [Thread-196144] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:12:37.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:12:38.191 [DEBUG] [Thread-196144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:12:38.192 [DEBUG] [Thread-196144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:12:38.192 [DEBUG] [Thread-196144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:12:38.232 [DEBUG] [Thread-196144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:12:38.233 [DEBUG] [Thread-196144] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:12:38.236 [DEBUG] [Thread-196144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:12:38.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:12:38.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:12:38.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:12:38.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:12:38.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:12:38.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:12:38.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:12:38.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:12:38.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:12:38.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.008094 -999.00   +6.80  39.48     91   +5.50 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 39.5 39.5 143.0 45.7 7.4 -24.0 7.2 -23.0 7.0 -21.9 7.4 -23.3
2026-02-15T02:12:38.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:12:38.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:12:38.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.008094
2026-02-15T02:12:38.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:12:38.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:12:38.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:12:38.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:12:38.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:12:38.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:12:18', tmtdew=1.32, humidity=91.33, cloud=0.0, wind=39.95, temperature=7.02, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:11:39.322', atlas_cloud=1, atlas_rain=1, zp_data=[2.1957499999999994, 1.4152500000000003, 1.5387500000000003, 0.8454999999999995, 2.6195000000000004, 2.045750000000001, 1.4309999999999992, 0.5792500000000009, 0.5234999999999985, 1.3100000000000005, 1.34375, 1.2190000000000003, 1.5559999999999992, 0.8052499999999991, 0.6959999999999997, 0.3439999999999994, 0.45674999999999955, 1.2974999999999994, 1.2154999999999987, 1.1712499999999988, 0.8899999999999988, 0.5597499999999984, 0.4772500000000006, 0.28275000000000006, 0.32899999999999885, 0.5215000000000005, 0.6457500000000005, 0.6515000000000004, 0.5170000000000003, 0.3150000000000013, 0.2890000000000006, 0.22250000000000014, 0.2697499999999984], zp_timestamp='2026-02-15T00:10:00')
2026-02-15T02:12:38.263 [DEBUG] [Thread-196144] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:12:38.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-15T02:12:38.370 [DEBUG] [Thread-196147] [transport.py] [_log()] starting thread (client mode): 0xa2d977c0
2026-02-15T02:12:38.370 [DEBUG] [Thread-196147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:12:38.385 [DEBUG] [Thread-196147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:12:38.385 [INFO] [Thread-196147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:12:38.392 [DEBUG] [Thread-196147] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:12:38.393 [DEBUG] [Thread-196147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:12:38.393 [DEBUG] [Thread-196147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:12:38.393 [DEBUG] [Thread-196147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:12:38.393 [DEBUG] [Thread-196147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:12:38.393 [DEBUG] [Thread-196147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:12:38.393 [DEBUG] [Thread-196147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:12:38.393 [DEBUG] [Thread-196147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:12:38.393 [DEBUG] [Thread-196147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:12:38.393 [DEBUG] [Thread-196147] [transport.py] [_log()] client lang: <none>
2026-02-15T02:12:38.393 [DEBUG] [Thread-196147] [transport.py] [_log()] server lang: <none>
2026-02-15T02:12:38.393 [DEBUG] [Thread-196147] [transport.py] [_log()] kex follows: False
2026-02-15T02:12:38.393 [DEBUG] [Thread-196147] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:12:38.393 [DEBUG] [Thread-196147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:12:38.393 [DEBUG] [Thread-196147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:12:38.393 [DEBUG] [Thread-196147] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:12:38.393 [DEBUG] [Thread-196147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:12:38.393 [DEBUG] [Thread-196147] [transport.py] [_log()] Compression: none
2026-02-15T02:12:38.393 [DEBUG] [Thread-196147] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:12:38.450 [DEBUG] [Thread-196147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:12:38.451 [DEBUG] [Thread-196147] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:12:38.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:12:38.452 [DEBUG] [Thread-196147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:12:38.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:12:38.507 [DEBUG] [Thread-196147] [transport.py] [_log()] userauth is OK
2026-02-15T02:12:38.507 [DEBUG] [Thread-196147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:12:38.507 [DEBUG] [Thread-196147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:12:38.507 [DEBUG] [Thread-196147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:12:38.508 [DEBUG] [Thread-196147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:12:38.526 [INFO] [Thread-196147] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:12:38.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T02:12:38.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:12:39.279 [DEBUG] [Thread-196147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:12:39.279 [DEBUG] [Thread-196147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:12:39.327 [DEBUG] [Thread-196147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:12:39.327 [DEBUG] [Thread-196147] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:12:39.337 [DEBUG] [Thread-196147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:12:39.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:12:39.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-15T02:12:39.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:12:39.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:12:39.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:12:39.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:12:39.372 [DEBUG] [Thread-196147] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:12:41.054 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:12:41.055 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:12:49.651 [DEBUG] [Thread-196149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:13:04.708 [DEBUG] [Thread-196150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:13:09.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:13:09.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:13:09.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-15T02:13:11.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 12, 53), 1.27, 91.31, 0.0, 39.33, 6.97, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:13:11.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:12:53
2026-02-15T02:13:11.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:13:11.796 [DEBUG] [Thread-196151] [transport.py] [_log()] starting thread (client mode): 0xa2d1ab60
2026-02-15T02:13:11.796 [DEBUG] [Thread-196151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:13:11.814 [DEBUG] [Thread-196151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:13:11.814 [INFO] [Thread-196151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:13:11.817 [DEBUG] [Thread-196151] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:13:11.818 [DEBUG] [Thread-196151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:13:11.818 [DEBUG] [Thread-196151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:13:11.818 [DEBUG] [Thread-196151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:13:11.818 [DEBUG] [Thread-196151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:13:11.818 [DEBUG] [Thread-196151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:13:11.818 [DEBUG] [Thread-196151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:13:11.818 [DEBUG] [Thread-196151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:13:11.818 [DEBUG] [Thread-196151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:13:11.818 [DEBUG] [Thread-196151] [transport.py] [_log()] client lang: <none>
2026-02-15T02:13:11.818 [DEBUG] [Thread-196151] [transport.py] [_log()] server lang: <none>
2026-02-15T02:13:11.818 [DEBUG] [Thread-196151] [transport.py] [_log()] kex follows: False
2026-02-15T02:13:11.818 [DEBUG] [Thread-196151] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:13:11.818 [DEBUG] [Thread-196151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:13:11.818 [DEBUG] [Thread-196151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:13:11.818 [DEBUG] [Thread-196151] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:13:11.818 [DEBUG] [Thread-196151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:13:11.818 [DEBUG] [Thread-196151] [transport.py] [_log()] Compression: none
2026-02-15T02:13:11.818 [DEBUG] [Thread-196151] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:13:11.838 [DEBUG] [Thread-196151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:13:11.838 [DEBUG] [Thread-196151] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:13:11.839 [DEBUG] [Thread-196151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:13:11.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:13:11.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:13:11.842 [DEBUG] [Thread-196151] [transport.py] [_log()] userauth is OK
2026-02-15T02:13:11.842 [DEBUG] [Thread-196151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:13:11.842 [DEBUG] [Thread-196151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:13:11.842 [DEBUG] [Thread-196151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:13:11.842 [DEBUG] [Thread-196151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:13:11.878 [INFO] [Thread-196151] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:13:11.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:13:12.642 [DEBUG] [Thread-196151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:13:12.642 [DEBUG] [Thread-196151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:13:12.642 [DEBUG] [Thread-196151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:13:12.682 [DEBUG] [Thread-196151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:13:12.683 [DEBUG] [Thread-196151] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:13:12.686 [DEBUG] [Thread-196151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:13:12.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:13:12.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:13:12.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:13:12.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:13:12.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:13:12.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:13:12.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:13:12.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:13:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:13:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.008441 -999.00   +6.80  26.99     91   +5.40 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 27.0 27.0 136.4 36.9 7.4 -24.0 7.2 -23.2 7.0 -22.1 7.3 -23.4
2026-02-15T02:13:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:13:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:13:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.008441
2026-02-15T02:13:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:13:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:13:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:13:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:13:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:13:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:12:53', tmtdew=1.27, humidity=91.31, cloud=0.0, wind=39.33, temperature=6.97, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:12:09.302', atlas_cloud=1, atlas_rain=1, zp_data=[2.1957499999999994, 1.4152500000000003, 1.5387500000000003, 0.8454999999999995, 2.6195000000000004, 2.045750000000001, 1.4309999999999992, 0.5792500000000009, 0.5234999999999985, 1.3100000000000005, 1.34375, 1.2190000000000003, 1.5559999999999992, 0.8052499999999991, 0.6959999999999997, 0.3439999999999994, 0.45674999999999955, 1.2974999999999994, 1.2154999999999987, 1.1712499999999988, 0.8899999999999988, 0.5597499999999984, 0.4772500000000006, 0.28275000000000006, 0.32899999999999885, 0.5215000000000005, 0.6457500000000005, 0.6515000000000004, 0.5170000000000003, 0.3150000000000013, 0.2890000000000006, 0.22250000000000014, 0.2697499999999984], zp_timestamp='2026-02-15T00:10:00')
2026-02-15T02:13:12.709 [DEBUG] [Thread-196151] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:13:12.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T02:13:12.796 [DEBUG] [Thread-196154] [transport.py] [_log()] starting thread (client mode): 0xa2d1add0
2026-02-15T02:13:12.796 [DEBUG] [Thread-196154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:13:12.810 [DEBUG] [Thread-196154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:13:12.810 [INFO] [Thread-196154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:13:12.818 [DEBUG] [Thread-196154] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:13:12.818 [DEBUG] [Thread-196154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:13:12.818 [DEBUG] [Thread-196154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:13:12.818 [DEBUG] [Thread-196154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:13:12.818 [DEBUG] [Thread-196154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:13:12.818 [DEBUG] [Thread-196154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:13:12.818 [DEBUG] [Thread-196154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:13:12.818 [DEBUG] [Thread-196154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:13:12.818 [DEBUG] [Thread-196154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:13:12.818 [DEBUG] [Thread-196154] [transport.py] [_log()] client lang: <none>
2026-02-15T02:13:12.818 [DEBUG] [Thread-196154] [transport.py] [_log()] server lang: <none>
2026-02-15T02:13:12.818 [DEBUG] [Thread-196154] [transport.py] [_log()] kex follows: False
2026-02-15T02:13:12.818 [DEBUG] [Thread-196154] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:13:12.818 [DEBUG] [Thread-196154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:13:12.819 [DEBUG] [Thread-196154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:13:12.819 [DEBUG] [Thread-196154] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:13:12.819 [DEBUG] [Thread-196154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:13:12.819 [DEBUG] [Thread-196154] [transport.py] [_log()] Compression: none
2026-02-15T02:13:12.819 [DEBUG] [Thread-196154] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:13:12.876 [DEBUG] [Thread-196154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:13:12.876 [DEBUG] [Thread-196154] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:13:12.877 [DEBUG] [Thread-196154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:13:12.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:13:12.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:13:12.933 [DEBUG] [Thread-196154] [transport.py] [_log()] userauth is OK
2026-02-15T02:13:12.933 [DEBUG] [Thread-196154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:13:12.933 [DEBUG] [Thread-196154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:13:12.933 [DEBUG] [Thread-196154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:13:12.934 [DEBUG] [Thread-196154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:13:12.954 [INFO] [Thread-196154] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:13:12.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-15T02:13:12.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:13:13.778 [DEBUG] [Thread-196154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:13:13.779 [DEBUG] [Thread-196154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:13:13.826 [DEBUG] [Thread-196154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:13:13.826 [DEBUG] [Thread-196154] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:13:13.836 [DEBUG] [Thread-196154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:13:13.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:13:13.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-15T02:13: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-15T02:13:13.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:13:13.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:13:13.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:13:13.873 [DEBUG] [Thread-196154] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:13:15.875 [DEBUG] [Thread-196156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:13:19.744 [DEBUG] [Thread-196157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:13:34.796 [DEBUG] [Thread-196158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:13:41.259 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:13:41.261 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:13:43.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:13:43.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:13:43.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-15T02:13:45.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 13, 28), 1.27, 91.33, 0.0, 36.13, 6.98, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:13:45.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:13:28
2026-02-15T02:13:46.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:13:46.487 [DEBUG] [Thread-196159] [transport.py] [_log()] starting thread (client mode): 0xa2d94370
2026-02-15T02:13:46.487 [DEBUG] [Thread-196159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:13:46.506 [DEBUG] [Thread-196159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:13:46.506 [INFO] [Thread-196159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:13:46.510 [DEBUG] [Thread-196159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:13:46.510 [DEBUG] [Thread-196159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:13:46.510 [DEBUG] [Thread-196159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:13:46.510 [DEBUG] [Thread-196159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:13:46.510 [DEBUG] [Thread-196159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:13:46.510 [DEBUG] [Thread-196159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:13:46.510 [DEBUG] [Thread-196159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:13:46.510 [DEBUG] [Thread-196159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:13:46.510 [DEBUG] [Thread-196159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:13:46.510 [DEBUG] [Thread-196159] [transport.py] [_log()] client lang: <none>
2026-02-15T02:13:46.510 [DEBUG] [Thread-196159] [transport.py] [_log()] server lang: <none>
2026-02-15T02:13:46.510 [DEBUG] [Thread-196159] [transport.py] [_log()] kex follows: False
2026-02-15T02:13:46.510 [DEBUG] [Thread-196159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:13:46.510 [DEBUG] [Thread-196159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:13:46.510 [DEBUG] [Thread-196159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:13:46.510 [DEBUG] [Thread-196159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:13:46.510 [DEBUG] [Thread-196159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:13:46.510 [DEBUG] [Thread-196159] [transport.py] [_log()] Compression: none
2026-02-15T02:13:46.510 [DEBUG] [Thread-196159] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:13:46.529 [DEBUG] [Thread-196159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:13:46.529 [DEBUG] [Thread-196159] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:13:46.530 [DEBUG] [Thread-196159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:13:46.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:13:46.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:13:46.532 [DEBUG] [Thread-196159] [transport.py] [_log()] userauth is OK
2026-02-15T02:13:46.532 [DEBUG] [Thread-196159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:13:46.532 [DEBUG] [Thread-196159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:13:46.532 [DEBUG] [Thread-196159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:13:46.532 [DEBUG] [Thread-196159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:13:46.546 [INFO] [Thread-196159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:13:46.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:13:47.198 [DEBUG] [Thread-196159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:13:47.199 [DEBUG] [Thread-196159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:13:47.199 [DEBUG] [Thread-196159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:13:47.239 [DEBUG] [Thread-196159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:13:47.239 [DEBUG] [Thread-196159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:13:47.242 [DEBUG] [Thread-196159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:13:47.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:13:47.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:13:47.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:13:47.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:13:47.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:13:47.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:13:47.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:13:47.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:13:47.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:13:47.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.009135 -999.00   +6.80  37.66     90   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 37.7 37.7 143.4 44.4 7.4 -23.6 7.2 -22.7 7.0 -21.5 7.3 -22.8
2026-02-15T02:13:47.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:13:47.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:13:47.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.009135
2026-02-15T02:13:47.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:13:47.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:13:47.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:13:47.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:13:47.271 [DEBUG] [Thread-196159] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:13:47.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:13:47.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:13:28', tmtdew=1.27, humidity=91.33, cloud=0.0, wind=36.13, temperature=6.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:13:09.264', atlas_cloud=1, atlas_rain=1, zp_data=[2.1957499999999994, 1.4152500000000003, 1.5387500000000003, 0.8454999999999995, 2.6195000000000004, 2.045750000000001, 1.4309999999999992, 0.5792500000000009, 0.5234999999999985, 1.3100000000000005, 1.34375, 1.2190000000000003, 1.5559999999999992, 0.8052499999999991, 0.6959999999999997, 0.3439999999999994, 0.45674999999999955, 1.2974999999999994, 1.2154999999999987, 1.1712499999999988, 0.8899999999999988, 0.5597499999999984, 0.4772500000000006, 0.28275000000000006, 0.32899999999999885, 0.5215000000000005, 0.6457500000000005, 0.6515000000000004, 0.5170000000000003, 0.3150000000000013, 0.2890000000000006, 0.22250000000000014, 0.2697499999999984], zp_timestamp='2026-02-15T00:10:00')
2026-02-15T02:13:47.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-15T02:13:47.368 [DEBUG] [Thread-196162] [transport.py] [_log()] starting thread (client mode): 0xa2d97880
2026-02-15T02:13:47.369 [DEBUG] [Thread-196162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:13:47.383 [DEBUG] [Thread-196162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:13:47.383 [INFO] [Thread-196162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:13:47.391 [DEBUG] [Thread-196162] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:13:47.391 [DEBUG] [Thread-196162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:13:47.391 [DEBUG] [Thread-196162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:13:47.391 [DEBUG] [Thread-196162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:13:47.391 [DEBUG] [Thread-196162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:13:47.392 [DEBUG] [Thread-196162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:13:47.392 [DEBUG] [Thread-196162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:13:47.392 [DEBUG] [Thread-196162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:13:47.392 [DEBUG] [Thread-196162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:13:47.392 [DEBUG] [Thread-196162] [transport.py] [_log()] client lang: <none>
2026-02-15T02:13:47.392 [DEBUG] [Thread-196162] [transport.py] [_log()] server lang: <none>
2026-02-15T02:13:47.392 [DEBUG] [Thread-196162] [transport.py] [_log()] kex follows: False
2026-02-15T02:13:47.392 [DEBUG] [Thread-196162] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:13:47.392 [DEBUG] [Thread-196162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:13:47.392 [DEBUG] [Thread-196162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:13:47.392 [DEBUG] [Thread-196162] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:13:47.392 [DEBUG] [Thread-196162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:13:47.392 [DEBUG] [Thread-196162] [transport.py] [_log()] Compression: none
2026-02-15T02:13:47.392 [DEBUG] [Thread-196162] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:13:47.449 [DEBUG] [Thread-196162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:13:47.449 [DEBUG] [Thread-196162] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:13:47.450 [DEBUG] [Thread-196162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:13:47.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:13:47.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:13:47.505 [DEBUG] [Thread-196162] [transport.py] [_log()] userauth is OK
2026-02-15T02:13:47.506 [DEBUG] [Thread-196162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:13:47.506 [DEBUG] [Thread-196162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:13:47.506 [DEBUG] [Thread-196162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:13:47.506 [DEBUG] [Thread-196162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:13:47.529 [INFO] [Thread-196162] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:13:47.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-15T02:13:47.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:13:48.307 [DEBUG] [Thread-196162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:13:48.308 [DEBUG] [Thread-196162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:13:48.355 [DEBUG] [Thread-196162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:13:48.356 [DEBUG] [Thread-196162] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:13:48.365 [DEBUG] [Thread-196162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:13:48.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:13:48.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-15T02:13:48.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:13:48.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:13:48.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:13:48.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:13:48.402 [DEBUG] [Thread-196162] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:13:49.831 [DEBUG] [Thread-196164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:14:04.884 [DEBUG] [Thread-196165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:14:15.933 [DEBUG] [Thread-196166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:14:18.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:14:18.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:14:18.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-15T02:14:19.920 [DEBUG] [Thread-196167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:14:20.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 14, 4), 1.28, 91.29, 0.0, 36.28, 6.95, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:14:20.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:14:04
2026-02-15T02:14:20.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:14:20.889 [DEBUG] [Thread-196168] [transport.py] [_log()] starting thread (client mode): 0xa2d6b9a0
2026-02-15T02:14:20.889 [DEBUG] [Thread-196168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:14:20.910 [DEBUG] [Thread-196168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:14:20.910 [INFO] [Thread-196168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:14:20.913 [DEBUG] [Thread-196168] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:14:20.913 [DEBUG] [Thread-196168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:14:20.913 [DEBUG] [Thread-196168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:14:20.913 [DEBUG] [Thread-196168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:14:20.913 [DEBUG] [Thread-196168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:14:20.913 [DEBUG] [Thread-196168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:14:20.913 [DEBUG] [Thread-196168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:14:20.913 [DEBUG] [Thread-196168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:14:20.913 [DEBUG] [Thread-196168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:14:20.913 [DEBUG] [Thread-196168] [transport.py] [_log()] client lang: <none>
2026-02-15T02:14:20.913 [DEBUG] [Thread-196168] [transport.py] [_log()] server lang: <none>
2026-02-15T02:14:20.913 [DEBUG] [Thread-196168] [transport.py] [_log()] kex follows: False
2026-02-15T02:14:20.913 [DEBUG] [Thread-196168] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:14:20.913 [DEBUG] [Thread-196168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:14:20.913 [DEBUG] [Thread-196168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:14:20.914 [DEBUG] [Thread-196168] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:14:20.914 [DEBUG] [Thread-196168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:14:20.914 [DEBUG] [Thread-196168] [transport.py] [_log()] Compression: none
2026-02-15T02:14:20.914 [DEBUG] [Thread-196168] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:14:20.930 [DEBUG] [Thread-196168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:14:20.930 [DEBUG] [Thread-196168] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:14:20.931 [DEBUG] [Thread-196168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:14:20.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:14:20.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:14:20.933 [DEBUG] [Thread-196168] [transport.py] [_log()] userauth is OK
2026-02-15T02:14:20.933 [DEBUG] [Thread-196168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:14:20.933 [DEBUG] [Thread-196168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:14:20.933 [DEBUG] [Thread-196168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:14:20.933 [DEBUG] [Thread-196168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:14:20.969 [INFO] [Thread-196168] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:14:20.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:14:21.590 [DEBUG] [Thread-196168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:14:21.591 [DEBUG] [Thread-196168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:14:21.591 [DEBUG] [Thread-196168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:14:21.631 [DEBUG] [Thread-196168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:14:21.632 [DEBUG] [Thread-196168] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:14:21.635 [DEBUG] [Thread-196168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:14:21.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:14:21.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:14:21.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:14:21.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:14:21.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:14:21.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:14:21.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:14:21.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:14:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:14:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.009483 -999.00   +6.80  31.87     90   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 31.9 31.9 145.8 41.4 7.4 -23.6 7.2 -22.9 7.0 -21.8 7.4 -23.0
2026-02-15T02:14:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:14:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:14:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.009483
2026-02-15T02:14:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:14:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:14:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:14:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:14:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:14:21.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:14:04', tmtdew=1.28, humidity=91.29, cloud=0.0, wind=36.28, temperature=6.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:13:39.331', atlas_cloud=1, atlas_rain=1, zp_data=[2.1957499999999994, 1.4152500000000003, 1.5387500000000003, 0.8454999999999995, 2.6195000000000004, 2.045750000000001, 1.4309999999999992, 0.5792500000000009, 0.5234999999999985, 1.3100000000000005, 1.34375, 1.2190000000000003, 1.5559999999999992, 0.8052499999999991, 0.6959999999999997, 0.3439999999999994, 0.45674999999999955, 1.2974999999999994, 1.2154999999999987, 1.1712499999999988, 0.8899999999999988, 0.5597499999999984, 0.4772500000000006, 0.28275000000000006, 0.32899999999999885, 0.5215000000000005, 0.6457500000000005, 0.6515000000000004, 0.5170000000000003, 0.3150000000000013, 0.2890000000000006, 0.22250000000000014, 0.2697499999999984], zp_timestamp='2026-02-15T00:10:00')
2026-02-15T02:14:21.661 [DEBUG] [Thread-196168] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:14:21.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-15T02:14:21.756 [DEBUG] [Thread-196171] [transport.py] [_log()] starting thread (client mode): 0xa2d6c820
2026-02-15T02:14:21.756 [DEBUG] [Thread-196171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:14:21.770 [DEBUG] [Thread-196171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:14:21.770 [INFO] [Thread-196171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:14:21.778 [DEBUG] [Thread-196171] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:14:21.779 [DEBUG] [Thread-196171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:14:21.779 [DEBUG] [Thread-196171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:14:21.779 [DEBUG] [Thread-196171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:14:21.779 [DEBUG] [Thread-196171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:14:21.779 [DEBUG] [Thread-196171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:14:21.779 [DEBUG] [Thread-196171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:14:21.779 [DEBUG] [Thread-196171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:14:21.779 [DEBUG] [Thread-196171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:14:21.779 [DEBUG] [Thread-196171] [transport.py] [_log()] client lang: <none>
2026-02-15T02:14:21.779 [DEBUG] [Thread-196171] [transport.py] [_log()] server lang: <none>
2026-02-15T02:14:21.779 [DEBUG] [Thread-196171] [transport.py] [_log()] kex follows: False
2026-02-15T02:14:21.779 [DEBUG] [Thread-196171] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:14:21.779 [DEBUG] [Thread-196171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:14:21.779 [DEBUG] [Thread-196171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:14:21.780 [DEBUG] [Thread-196171] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:14:21.780 [DEBUG] [Thread-196171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:14:21.780 [DEBUG] [Thread-196171] [transport.py] [_log()] Compression: none
2026-02-15T02:14:21.780 [DEBUG] [Thread-196171] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:14:21.842 [DEBUG] [Thread-196171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:14:21.843 [DEBUG] [Thread-196171] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:14:21.844 [DEBUG] [Thread-196171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:14:21.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:14:21.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:14:21.904 [DEBUG] [Thread-196171] [transport.py] [_log()] userauth is OK
2026-02-15T02:14:21.904 [DEBUG] [Thread-196171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:14:21.904 [DEBUG] [Thread-196171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:14:21.904 [DEBUG] [Thread-196171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:14:21.905 [DEBUG] [Thread-196171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:14:21.923 [INFO] [Thread-196171] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:14:21.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T02:14:21.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:14:22.715 [DEBUG] [Thread-196171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:14:22.716 [DEBUG] [Thread-196171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:14:22.763 [DEBUG] [Thread-196171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:14:22.764 [DEBUG] [Thread-196171] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:14:22.773 [DEBUG] [Thread-196171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:14:22.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:14:22.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-15T02:14:22.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-15T02:14:22.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:14:22.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:14:22.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:14:22.806 [DEBUG] [Thread-196171] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:14:34.956 [DEBUG] [Thread-196173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:14:41.465 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:14:41.466 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:14:50.005 [DEBUG] [Thread-196174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:14:52.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:14:52.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:14:52.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-15T02:14:54.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 14, 39), 1.74, 88.65, 0.0, 46.29, 7.37, 1, 1, 0, 2, 1, 0),)
2026-02-15T02:14:54.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:14:39
2026-02-15T02:14:54.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:14:55.120 [DEBUG] [Thread-196175] [transport.py] [_log()] starting thread (client mode): 0xa2d1b790
2026-02-15T02:14:55.120 [DEBUG] [Thread-196175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:14:55.139 [DEBUG] [Thread-196175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:14:55.139 [INFO] [Thread-196175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:14:55.142 [DEBUG] [Thread-196175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:14:55.142 [DEBUG] [Thread-196175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:14:55.142 [DEBUG] [Thread-196175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:14:55.142 [DEBUG] [Thread-196175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:14:55.142 [DEBUG] [Thread-196175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:14:55.142 [DEBUG] [Thread-196175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:14:55.142 [DEBUG] [Thread-196175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:14:55.142 [DEBUG] [Thread-196175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:14:55.142 [DEBUG] [Thread-196175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:14:55.142 [DEBUG] [Thread-196175] [transport.py] [_log()] client lang: <none>
2026-02-15T02:14:55.142 [DEBUG] [Thread-196175] [transport.py] [_log()] server lang: <none>
2026-02-15T02:14:55.142 [DEBUG] [Thread-196175] [transport.py] [_log()] kex follows: False
2026-02-15T02:14:55.142 [DEBUG] [Thread-196175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:14:55.142 [DEBUG] [Thread-196175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:14:55.142 [DEBUG] [Thread-196175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:14:55.142 [DEBUG] [Thread-196175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:14:55.143 [DEBUG] [Thread-196175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:14:55.143 [DEBUG] [Thread-196175] [transport.py] [_log()] Compression: none
2026-02-15T02:14:55.143 [DEBUG] [Thread-196175] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:14:55.159 [DEBUG] [Thread-196175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:14:55.160 [DEBUG] [Thread-196175] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:14:55.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:14:55.161 [DEBUG] [Thread-196175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:14:55.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:14:55.163 [DEBUG] [Thread-196175] [transport.py] [_log()] userauth is OK
2026-02-15T02:14:55.163 [DEBUG] [Thread-196175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:14:55.163 [DEBUG] [Thread-196175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:14:55.163 [DEBUG] [Thread-196175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:14:55.163 [DEBUG] [Thread-196175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:14:55.189 [INFO] [Thread-196175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:14:55.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:14:55.803 [DEBUG] [Thread-196175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:14:55.803 [DEBUG] [Thread-196175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:14:55.803 [DEBUG] [Thread-196175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:14:55.843 [DEBUG] [Thread-196175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:14:55.844 [DEBUG] [Thread-196175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:14:55.847 [DEBUG] [Thread-196175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:14:55.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:14:55.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:14:55.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:14:55.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:14:55.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:14:55.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:14:55.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:14:55.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:14:55.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:14:55.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.009830 -999.00   +6.80  29.75     90   +5.40 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 29.8 29.8 151.6 46.8 7.4 -23.7 7.2 -22.7 7.0 -21.6 7.4 -22.9
2026-02-15T02:14:55.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:14:55.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:14:55.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.009830
2026-02-15T02:14:55.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:14:55.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:14:55.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:14:55.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:14:55.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:14:55.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:14:39', tmtdew=1.74, humidity=88.65, cloud=0.0, wind=46.29, temperature=7.37, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:14:09.312', atlas_cloud=1, atlas_rain=1, zp_data=[2.1957499999999994, 1.4152500000000003, 1.5387500000000003, 0.8454999999999995, 2.6195000000000004, 2.045750000000001, 1.4309999999999992, 0.5792500000000009, 0.5234999999999985, 1.3100000000000005, 1.34375, 1.2190000000000003, 1.5559999999999992, 0.8052499999999991, 0.6959999999999997, 0.3439999999999994, 0.45674999999999955, 1.2974999999999994, 1.2154999999999987, 1.1712499999999988, 0.8899999999999988, 0.5597499999999984, 0.4772500000000006, 0.28275000000000006, 0.32899999999999885, 0.5215000000000005, 0.6457500000000005, 0.6515000000000004, 0.5170000000000003, 0.3150000000000013, 0.2890000000000006, 0.22250000000000014, 0.2697499999999984], zp_timestamp='2026-02-15T00:10:00')
2026-02-15T02:14:55.875 [DEBUG] [Thread-196175] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:14:55.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-15T02:14:55.970 [DEBUG] [Thread-196178] [transport.py] [_log()] starting thread (client mode): 0xa2d00f70
2026-02-15T02:14:55.970 [DEBUG] [Thread-196178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:14:55.986 [DEBUG] [Thread-196178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:14:55.986 [INFO] [Thread-196178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:14:55.993 [DEBUG] [Thread-196178] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:14:55.994 [DEBUG] [Thread-196178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:14:55.994 [DEBUG] [Thread-196178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:14:55.994 [DEBUG] [Thread-196178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:14:55.994 [DEBUG] [Thread-196178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:14:55.995 [DEBUG] [Thread-196178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:14:55.995 [DEBUG] [Thread-196178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:14:55.995 [DEBUG] [Thread-196178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:14:55.995 [DEBUG] [Thread-196178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:14:55.995 [DEBUG] [Thread-196178] [transport.py] [_log()] client lang: <none>
2026-02-15T02:14:55.995 [DEBUG] [Thread-196178] [transport.py] [_log()] server lang: <none>
2026-02-15T02:14:55.995 [DEBUG] [Thread-196178] [transport.py] [_log()] kex follows: False
2026-02-15T02:14:55.995 [DEBUG] [Thread-196178] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:14:55.995 [DEBUG] [Thread-196178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:14:55.995 [DEBUG] [Thread-196178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:14:55.995 [DEBUG] [Thread-196178] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:14:55.995 [DEBUG] [Thread-196178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:14:55.995 [DEBUG] [Thread-196178] [transport.py] [_log()] Compression: none
2026-02-15T02:14:55.995 [DEBUG] [Thread-196178] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:14:56.051 [DEBUG] [Thread-196178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:14:56.051 [DEBUG] [Thread-196178] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:14:56.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:14:56.053 [DEBUG] [Thread-196178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:14:56.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:14:56.108 [DEBUG] [Thread-196178] [transport.py] [_log()] userauth is OK
2026-02-15T02:14:56.108 [DEBUG] [Thread-196178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:14:56.108 [DEBUG] [Thread-196178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:14:56.108 [DEBUG] [Thread-196178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:14:56.109 [DEBUG] [Thread-196178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:14:56.128 [INFO] [Thread-196178] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:14:56.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-15T02:14:56.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:14:56.908 [DEBUG] [Thread-196178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:14:56.908 [DEBUG] [Thread-196178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:14:56.957 [DEBUG] [Thread-196178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:14:56.958 [DEBUG] [Thread-196178] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:14:56.967 [DEBUG] [Thread-196178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:14:56.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:14:56.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-15T02:14:56.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-15T02:14:56.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:14:56.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:14:56.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:14:57.003 [DEBUG] [Thread-196178] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:15:05.041 [DEBUG] [Thread-196180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:15:15.990 [DEBUG] [Thread-196181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:15:20.092 [DEBUG] [Thread-196182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:15:26.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:15:26.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:15:27.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:15:29.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 15, 14), 1.29, 91.23, 0.0, 44.29, 6.95, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:15:29.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:15:14
2026-02-15T02:15:29.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:15:29.530 [DEBUG] [Thread-196183] [transport.py] [_log()] starting thread (client mode): 0xa2d6bf70
2026-02-15T02:15:29.530 [DEBUG] [Thread-196183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:15:29.550 [DEBUG] [Thread-196183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:15:29.551 [INFO] [Thread-196183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:15:29.554 [DEBUG] [Thread-196183] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:15:29.554 [DEBUG] [Thread-196183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:15:29.554 [DEBUG] [Thread-196183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:15:29.554 [DEBUG] [Thread-196183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:15:29.554 [DEBUG] [Thread-196183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:15:29.554 [DEBUG] [Thread-196183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:15:29.554 [DEBUG] [Thread-196183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:15:29.554 [DEBUG] [Thread-196183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:15:29.554 [DEBUG] [Thread-196183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:15:29.554 [DEBUG] [Thread-196183] [transport.py] [_log()] client lang: <none>
2026-02-15T02:15:29.554 [DEBUG] [Thread-196183] [transport.py] [_log()] server lang: <none>
2026-02-15T02:15:29.554 [DEBUG] [Thread-196183] [transport.py] [_log()] kex follows: False
2026-02-15T02:15:29.554 [DEBUG] [Thread-196183] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:15:29.554 [DEBUG] [Thread-196183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:15:29.554 [DEBUG] [Thread-196183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:15:29.554 [DEBUG] [Thread-196183] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:15:29.554 [DEBUG] [Thread-196183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:15:29.554 [DEBUG] [Thread-196183] [transport.py] [_log()] Compression: none
2026-02-15T02:15:29.555 [DEBUG] [Thread-196183] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:15:29.573 [DEBUG] [Thread-196183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:15:29.574 [DEBUG] [Thread-196183] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:15:29.574 [DEBUG] [Thread-196183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:15:29.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:15:29.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:15:29.577 [DEBUG] [Thread-196183] [transport.py] [_log()] userauth is OK
2026-02-15T02:15:29.577 [DEBUG] [Thread-196183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:15:29.577 [DEBUG] [Thread-196183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:15:29.577 [DEBUG] [Thread-196183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:15:29.577 [DEBUG] [Thread-196183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:15:29.613 [INFO] [Thread-196183] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:15:29.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:15:30.256 [DEBUG] [Thread-196183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:15:30.257 [DEBUG] [Thread-196183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:15:30.257 [DEBUG] [Thread-196183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:15:30.297 [DEBUG] [Thread-196183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:15:30.298 [DEBUG] [Thread-196183] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:15:30.301 [DEBUG] [Thread-196183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:15:30.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:15:30.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:15:30.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:15:30.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:15:30.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:15:30.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:15:30.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:15:30.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:15:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:15:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.010177 -999.00   +6.80  33.28     90   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 33.3 33.3 143.2 43.2 7.4 -23.4 7.2 -22.2 7.0 -21.4 7.3 -22.7
2026-02-15T02:15:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:15:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:15:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.010177
2026-02-15T02:15:30.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:15:30.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:15:30.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:15:30.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:15:30.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:15:30.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:15:14', tmtdew=1.29, humidity=91.23, cloud=0.0, wind=44.29, temperature=6.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:14:39.293', atlas_cloud=1, atlas_rain=1, zp_data=[1.0887499999999992, 0.11575000000000024, 0.1592500000000019, 0.254999999999999, 1.21, 1.0157500000000006, 1.4254999999999995, 0.3882500000000011, 0.1144999999999996, 0.09399999999999942, 0.0727499999999992, 0.14899999999999913, 0.4559999999999995, 0.46974999999999945, 0.4714999999999989, 0.18499999999999872, 0.17624999999999957, 0.13449999999999918, 0.19299999999999962, 0.18124999999999858, 0.18599999999999817, 0.2107499999999991, 0.2032500000000006, 0.15775000000000006, 0.15999999999999837, 0.1485000000000003, 0.20274999999999999, 0.14450000000000074, 0.1620000000000008, 0.1620000000000008, 0.1460000000000008, 0.17600000000000016, 0.22174999999999834], zp_timestamp='2026-02-15T00:14:00')
2026-02-15T02:15:30.328 [DEBUG] [Thread-196183] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:15:30.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-15T02:15:30.434 [DEBUG] [Thread-196186] [transport.py] [_log()] starting thread (client mode): 0xa2d6eb00
2026-02-15T02:15:30.435 [DEBUG] [Thread-196186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:15:30.449 [DEBUG] [Thread-196186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:15:30.449 [INFO] [Thread-196186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:15:30.457 [DEBUG] [Thread-196186] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:15:30.457 [DEBUG] [Thread-196186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:15:30.457 [DEBUG] [Thread-196186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:15:30.457 [DEBUG] [Thread-196186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:15:30.457 [DEBUG] [Thread-196186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:15:30.457 [DEBUG] [Thread-196186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:15:30.457 [DEBUG] [Thread-196186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:15:30.457 [DEBUG] [Thread-196186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:15:30.457 [DEBUG] [Thread-196186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:15:30.457 [DEBUG] [Thread-196186] [transport.py] [_log()] client lang: <none>
2026-02-15T02:15:30.457 [DEBUG] [Thread-196186] [transport.py] [_log()] server lang: <none>
2026-02-15T02:15:30.457 [DEBUG] [Thread-196186] [transport.py] [_log()] kex follows: False
2026-02-15T02:15:30.457 [DEBUG] [Thread-196186] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:15:30.458 [DEBUG] [Thread-196186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:15:30.458 [DEBUG] [Thread-196186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:15:30.458 [DEBUG] [Thread-196186] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:15:30.458 [DEBUG] [Thread-196186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:15:30.458 [DEBUG] [Thread-196186] [transport.py] [_log()] Compression: none
2026-02-15T02:15:30.458 [DEBUG] [Thread-196186] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:15:30.514 [DEBUG] [Thread-196186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:15:30.515 [DEBUG] [Thread-196186] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:15:30.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:15:30.516 [DEBUG] [Thread-196186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:15:30.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:15:30.576 [DEBUG] [Thread-196186] [transport.py] [_log()] userauth is OK
2026-02-15T02:15:30.576 [DEBUG] [Thread-196186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:15:30.576 [DEBUG] [Thread-196186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:15:30.576 [DEBUG] [Thread-196186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:15:30.576 [DEBUG] [Thread-196186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:15:30.594 [INFO] [Thread-196186] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:15:30.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-15T02:15:30.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:15:31.395 [DEBUG] [Thread-196186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:15:31.395 [DEBUG] [Thread-196186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:15:31.443 [DEBUG] [Thread-196186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:15:31.443 [DEBUG] [Thread-196186] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:15:31.452 [DEBUG] [Thread-196186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:15:31.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:15:31.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-15T02:15:31.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:15:31.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:15:31.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:15:31.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:15:31.489 [DEBUG] [Thread-196186] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:15:35.128 [DEBUG] [Thread-196188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:15:41.673 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:15:41.674 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:15:50.187 [DEBUG] [Thread-196189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:16:01.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:16:01.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:16:01.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-15T02:16:03.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 15, 50), 1.33, 91.26, 0.0, 40.55, 6.93, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:16:03.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:15:50
2026-02-15T02:16:03.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:16:04.128 [DEBUG] [Thread-196190] [transport.py] [_log()] starting thread (client mode): 0xa2d6b8e0
2026-02-15T02:16:04.128 [DEBUG] [Thread-196190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:16:04.148 [DEBUG] [Thread-196190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:16:04.149 [INFO] [Thread-196190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:16:04.151 [DEBUG] [Thread-196190] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:16:04.151 [DEBUG] [Thread-196190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:16:04.151 [DEBUG] [Thread-196190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:16:04.151 [DEBUG] [Thread-196190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:16:04.151 [DEBUG] [Thread-196190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:16:04.151 [DEBUG] [Thread-196190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:16:04.152 [DEBUG] [Thread-196190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:16:04.152 [DEBUG] [Thread-196190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:16:04.152 [DEBUG] [Thread-196190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:16:04.152 [DEBUG] [Thread-196190] [transport.py] [_log()] client lang: <none>
2026-02-15T02:16:04.152 [DEBUG] [Thread-196190] [transport.py] [_log()] server lang: <none>
2026-02-15T02:16:04.152 [DEBUG] [Thread-196190] [transport.py] [_log()] kex follows: False
2026-02-15T02:16:04.152 [DEBUG] [Thread-196190] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:16:04.152 [DEBUG] [Thread-196190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:16:04.152 [DEBUG] [Thread-196190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:16:04.152 [DEBUG] [Thread-196190] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:16:04.152 [DEBUG] [Thread-196190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:16:04.152 [DEBUG] [Thread-196190] [transport.py] [_log()] Compression: none
2026-02-15T02:16:04.152 [DEBUG] [Thread-196190] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:16:04.170 [DEBUG] [Thread-196190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:16:04.170 [DEBUG] [Thread-196190] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:16:04.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:16:04.171 [DEBUG] [Thread-196190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:16:04.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:16:04.173 [DEBUG] [Thread-196190] [transport.py] [_log()] userauth is OK
2026-02-15T02:16:04.174 [DEBUG] [Thread-196190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:16:04.174 [DEBUG] [Thread-196190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:16:04.174 [DEBUG] [Thread-196190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:16:04.174 [DEBUG] [Thread-196190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:16:04.193 [INFO] [Thread-196190] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:16:04.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:16:04.977 [DEBUG] [Thread-196190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:16:04.977 [DEBUG] [Thread-196190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:16:04.978 [DEBUG] [Thread-196190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:16:05.018 [DEBUG] [Thread-196190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:16:05.018 [DEBUG] [Thread-196190] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:16:05.021 [DEBUG] [Thread-196190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:16:05.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:16:05.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:16:05.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:16:05.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:16:05.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:16:05.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:16:05.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:16:05.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:16:05.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:16:05.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.010871 -999.00   +6.80  28.20     90   +5.40 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 28.2 28.2 140.0 40.6 7.4 -22.4 7.2 -21.2 7.0 -20.7 7.4 -22.5
2026-02-15T02:16:05.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:16:05.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:16:05.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.010871
2026-02-15T02:16:05.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:16:05.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:16:05.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:16:05.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:16:05.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:16:05.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:15:50', tmtdew=1.33, humidity=91.26, cloud=0.0, wind=40.55, temperature=6.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:15:39.254', atlas_cloud=1, atlas_rain=1, zp_data=[1.0887499999999992, 0.11575000000000024, 0.1592500000000019, 0.254999999999999, 1.21, 1.0157500000000006, 1.4254999999999995, 0.3882500000000011, 0.1144999999999996, 0.09399999999999942, 0.0727499999999992, 0.14899999999999913, 0.4559999999999995, 0.46974999999999945, 0.4714999999999989, 0.18499999999999872, 0.17624999999999957, 0.13449999999999918, 0.19299999999999962, 0.18124999999999858, 0.18599999999999817, 0.2107499999999991, 0.2032500000000006, 0.15775000000000006, 0.15999999999999837, 0.1485000000000003, 0.20274999999999999, 0.14450000000000074, 0.1620000000000008, 0.1620000000000008, 0.1460000000000008, 0.17600000000000016, 0.22174999999999834], zp_timestamp='2026-02-15T00:14:00')
2026-02-15T02:16:05.047 [DEBUG] [Thread-196190] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:16:05.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-15T02:16:05.143 [DEBUG] [Thread-196193] [transport.py] [_log()] starting thread (client mode): 0xa2d6f850
2026-02-15T02:16:05.143 [DEBUG] [Thread-196193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:16:05.156 [DEBUG] [Thread-196193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:16:05.157 [INFO] [Thread-196193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:16:05.165 [DEBUG] [Thread-196193] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:16:05.165 [DEBUG] [Thread-196193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:16:05.165 [DEBUG] [Thread-196193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:16:05.165 [DEBUG] [Thread-196193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:16:05.165 [DEBUG] [Thread-196193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:16:05.165 [DEBUG] [Thread-196193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:16:05.165 [DEBUG] [Thread-196193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:16:05.166 [DEBUG] [Thread-196193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:16:05.166 [DEBUG] [Thread-196193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:16:05.166 [DEBUG] [Thread-196193] [transport.py] [_log()] client lang: <none>
2026-02-15T02:16:05.166 [DEBUG] [Thread-196193] [transport.py] [_log()] server lang: <none>
2026-02-15T02:16:05.166 [DEBUG] [Thread-196193] [transport.py] [_log()] kex follows: False
2026-02-15T02:16:05.166 [DEBUG] [Thread-196193] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:16:05.166 [DEBUG] [Thread-196193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:16:05.166 [DEBUG] [Thread-196193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:16:05.167 [DEBUG] [Thread-196193] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:16:05.167 [DEBUG] [Thread-196193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:16:05.167 [DEBUG] [Thread-196193] [transport.py] [_log()] Compression: none
2026-02-15T02:16:05.167 [DEBUG] [Thread-196193] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:16:05.222 [DEBUG] [Thread-196195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:16:05.229 [DEBUG] [Thread-196193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:16:05.229 [DEBUG] [Thread-196193] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:16:05.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:16:05.230 [DEBUG] [Thread-196193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:16:05.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:16:05.287 [DEBUG] [Thread-196193] [transport.py] [_log()] userauth is OK
2026-02-15T02:16:05.288 [DEBUG] [Thread-196193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:16:05.288 [DEBUG] [Thread-196193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:16:05.288 [DEBUG] [Thread-196193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:16:05.288 [DEBUG] [Thread-196193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:16:05.306 [INFO] [Thread-196193] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:16:05.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-15T02:16:05.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:16:06.090 [DEBUG] [Thread-196193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:16:06.090 [DEBUG] [Thread-196193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:16:06.139 [DEBUG] [Thread-196193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:16:06.140 [DEBUG] [Thread-196193] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:16:06.149 [DEBUG] [Thread-196193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:16:06.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:16: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')
2026-02-15T02:16:06.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:16:06.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:16:06.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:16:06.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:16:06.186 [DEBUG] [Thread-196193] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:16:16.041 [DEBUG] [Thread-196196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:16:20.274 [DEBUG] [Thread-196197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:16:35.307 [DEBUG] [Thread-196198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:16:36.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:16:36.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:16:36.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-15T02:16:38.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 16, 25), 1.33, 91.26, 0.0, 40.9, 6.93, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:16:38.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:16:25
2026-02-15T02:16:38.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:16:38.641 [DEBUG] [Thread-196199] [transport.py] [_log()] starting thread (client mode): 0xa2d199c0
2026-02-15T02:16:38.641 [DEBUG] [Thread-196199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:16:38.663 [DEBUG] [Thread-196199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:16:38.663 [INFO] [Thread-196199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:16:38.666 [DEBUG] [Thread-196199] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:16:38.667 [DEBUG] [Thread-196199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:16:38.667 [DEBUG] [Thread-196199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:16:38.667 [DEBUG] [Thread-196199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:16:38.667 [DEBUG] [Thread-196199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:16:38.667 [DEBUG] [Thread-196199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:16:38.667 [DEBUG] [Thread-196199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:16:38.667 [DEBUG] [Thread-196199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:16:38.667 [DEBUG] [Thread-196199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:16:38.667 [DEBUG] [Thread-196199] [transport.py] [_log()] client lang: <none>
2026-02-15T02:16:38.667 [DEBUG] [Thread-196199] [transport.py] [_log()] server lang: <none>
2026-02-15T02:16:38.667 [DEBUG] [Thread-196199] [transport.py] [_log()] kex follows: False
2026-02-15T02:16:38.667 [DEBUG] [Thread-196199] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:16:38.667 [DEBUG] [Thread-196199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:16:38.667 [DEBUG] [Thread-196199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:16:38.667 [DEBUG] [Thread-196199] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:16:38.667 [DEBUG] [Thread-196199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:16:38.667 [DEBUG] [Thread-196199] [transport.py] [_log()] Compression: none
2026-02-15T02:16:38.667 [DEBUG] [Thread-196199] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:16:38.685 [DEBUG] [Thread-196199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:16:38.686 [DEBUG] [Thread-196199] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:16:38.686 [DEBUG] [Thread-196199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:16:38.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:16:38.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:16:38.688 [DEBUG] [Thread-196199] [transport.py] [_log()] userauth is OK
2026-02-15T02:16:38.689 [DEBUG] [Thread-196199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:16:38.689 [DEBUG] [Thread-196199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:16:38.689 [DEBUG] [Thread-196199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:16:38.689 [DEBUG] [Thread-196199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:16:38.706 [INFO] [Thread-196199] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:16:38.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:16:39.352 [DEBUG] [Thread-196199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:16:39.352 [DEBUG] [Thread-196199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:16:39.352 [DEBUG] [Thread-196199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:16:39.392 [DEBUG] [Thread-196199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:16:39.392 [DEBUG] [Thread-196199] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:16:39.395 [DEBUG] [Thread-196199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:16:39.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:16:39.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:16:39.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:16:39.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:16:39.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:16:39.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:16:39.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:16:39.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:16:39.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:16:39.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.011218 -999.00   +6.80  40.18     90   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 40.2 40.2 147.6 45.2 7.4 -20.0 7.2 -17.3 7.0 -17.7 7.4 -19.3
2026-02-15T02:16:39.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:16:39.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:16:39.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.011218
2026-02-15T02:16:39.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:16:39.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:16:39.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:16:39.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:16:39.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:16:39.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:16:25', tmtdew=1.33, humidity=91.26, cloud=0.0, wind=40.9, temperature=6.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:16:09.235', atlas_cloud=1, atlas_rain=1, zp_data=[1.0887499999999992, 0.11575000000000024, 0.1592500000000019, 0.254999999999999, 1.21, 1.0157500000000006, 1.4254999999999995, 0.3882500000000011, 0.1144999999999996, 0.09399999999999942, 0.0727499999999992, 0.14899999999999913, 0.4559999999999995, 0.46974999999999945, 0.4714999999999989, 0.18499999999999872, 0.17624999999999957, 0.13449999999999918, 0.19299999999999962, 0.18124999999999858, 0.18599999999999817, 0.2107499999999991, 0.2032500000000006, 0.15775000000000006, 0.15999999999999837, 0.1485000000000003, 0.20274999999999999, 0.14450000000000074, 0.1620000000000008, 0.1620000000000008, 0.1460000000000008, 0.17600000000000016, 0.22174999999999834], zp_timestamp='2026-02-15T00:14:00')
2026-02-15T02:16:39.420 [DEBUG] [Thread-196199] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:16:39.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T02:16:39.517 [DEBUG] [Thread-196202] [transport.py] [_log()] starting thread (client mode): 0xa5740130
2026-02-15T02:16:39.518 [DEBUG] [Thread-196202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:16:39.533 [DEBUG] [Thread-196202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:16:39.533 [INFO] [Thread-196202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:16:39.541 [DEBUG] [Thread-196202] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:16:39.541 [DEBUG] [Thread-196202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:16:39.541 [DEBUG] [Thread-196202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:16:39.541 [DEBUG] [Thread-196202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:16:39.541 [DEBUG] [Thread-196202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:16:39.541 [DEBUG] [Thread-196202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:16:39.541 [DEBUG] [Thread-196202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:16:39.541 [DEBUG] [Thread-196202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:16:39.541 [DEBUG] [Thread-196202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:16:39.541 [DEBUG] [Thread-196202] [transport.py] [_log()] client lang: <none>
2026-02-15T02:16:39.541 [DEBUG] [Thread-196202] [transport.py] [_log()] server lang: <none>
2026-02-15T02:16:39.541 [DEBUG] [Thread-196202] [transport.py] [_log()] kex follows: False
2026-02-15T02:16:39.542 [DEBUG] [Thread-196202] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:16:39.542 [DEBUG] [Thread-196202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:16:39.542 [DEBUG] [Thread-196202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:16:39.542 [DEBUG] [Thread-196202] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:16:39.542 [DEBUG] [Thread-196202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:16:39.542 [DEBUG] [Thread-196202] [transport.py] [_log()] Compression: none
2026-02-15T02:16:39.542 [DEBUG] [Thread-196202] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:16:39.600 [DEBUG] [Thread-196202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:16:39.601 [DEBUG] [Thread-196202] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:16:39.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:16:39.602 [DEBUG] [Thread-196202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:16:39.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:16:39.657 [DEBUG] [Thread-196202] [transport.py] [_log()] userauth is OK
2026-02-15T02:16:39.657 [DEBUG] [Thread-196202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:16:39.657 [DEBUG] [Thread-196202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:16:39.657 [DEBUG] [Thread-196202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:16:39.658 [DEBUG] [Thread-196202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:16:39.677 [INFO] [Thread-196202] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:16:39.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-15T02:16:39.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:16:40.466 [DEBUG] [Thread-196202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:16:40.466 [DEBUG] [Thread-196202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:16:40.514 [DEBUG] [Thread-196202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:16:40.514 [DEBUG] [Thread-196202] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:16:40.524 [DEBUG] [Thread-196202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:16:40.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:16:40.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-15T02:16:40.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-15T02:16:40.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:16:40.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:16:40.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:16:40.561 [DEBUG] [Thread-196202] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:16:41.878 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:16:41.879 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:16:50.346 [DEBUG] [Thread-196204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:17:05.394 [DEBUG] [Thread-196205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:17:10.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:17:10.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:17:10.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-15T02:17:12.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 17, 1), 1.33, 91.28, 0.0, 40.88, 6.95, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:17:12.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:17:01
2026-02-15T02:17:12.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:17:12.973 [DEBUG] [Thread-196206] [transport.py] [_log()] starting thread (client mode): 0xa2d94a00
2026-02-15T02:17:12.973 [DEBUG] [Thread-196206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:17:12.995 [DEBUG] [Thread-196206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:17:12.995 [INFO] [Thread-196206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:17:12.998 [DEBUG] [Thread-196206] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:17:12.998 [DEBUG] [Thread-196206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:17:12.998 [DEBUG] [Thread-196206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:17:12.998 [DEBUG] [Thread-196206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:17:12.998 [DEBUG] [Thread-196206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:17:12.998 [DEBUG] [Thread-196206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:17:12.998 [DEBUG] [Thread-196206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:17:12.998 [DEBUG] [Thread-196206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:17:12.998 [DEBUG] [Thread-196206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:17:12.998 [DEBUG] [Thread-196206] [transport.py] [_log()] client lang: <none>
2026-02-15T02:17:12.998 [DEBUG] [Thread-196206] [transport.py] [_log()] server lang: <none>
2026-02-15T02:17:12.998 [DEBUG] [Thread-196206] [transport.py] [_log()] kex follows: False
2026-02-15T02:17:12.998 [DEBUG] [Thread-196206] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:17:12.998 [DEBUG] [Thread-196206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:17:12.998 [DEBUG] [Thread-196206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:17:12.998 [DEBUG] [Thread-196206] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:17:12.998 [DEBUG] [Thread-196206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:17:12.998 [DEBUG] [Thread-196206] [transport.py] [_log()] Compression: none
2026-02-15T02:17:12.998 [DEBUG] [Thread-196206] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:17:13.015 [DEBUG] [Thread-196206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:17:13.015 [DEBUG] [Thread-196206] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:17:13.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:17:13.016 [DEBUG] [Thread-196206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:17:13.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:17:13.017 [DEBUG] [Thread-196206] [transport.py] [_log()] userauth is OK
2026-02-15T02:17:13.017 [DEBUG] [Thread-196206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:17:13.017 [DEBUG] [Thread-196206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:17:13.017 [DEBUG] [Thread-196206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:17:13.017 [DEBUG] [Thread-196206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:17:13.034 [INFO] [Thread-196206] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:17:13.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:17:13.639 [DEBUG] [Thread-196206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:17:13.640 [DEBUG] [Thread-196206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:17:13.640 [DEBUG] [Thread-196206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:17:13.681 [DEBUG] [Thread-196206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:17:13.681 [DEBUG] [Thread-196206] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:17:13.684 [DEBUG] [Thread-196206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:17:13.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:17:13.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:17:13.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:17:13.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:17:13.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:17:13.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:17:13.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:17:13.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:17:13.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:17:13.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.011566 -999.00   +6.80  31.44     90   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 31.4 31.4 148.1 41.8 7.4 -21.6 7.2 -19.0 7.0 -19.5 7.4 -21.6
2026-02-15T02:17:13.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:17:13.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:17:13.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.011566
2026-02-15T02:17:13.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:17:13.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:17:13.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:17:13.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:17:13.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:17:13.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:17:01', tmtdew=1.33, humidity=91.28, cloud=0.0, wind=40.88, temperature=6.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:16:39.302', atlas_cloud=1, atlas_rain=1, zp_data=[1.0887499999999992, 0.11575000000000024, 0.1592500000000019, 0.254999999999999, 1.21, 1.0157500000000006, 1.4254999999999995, 0.3882500000000011, 0.1144999999999996, 0.09399999999999942, 0.0727499999999992, 0.14899999999999913, 0.4559999999999995, 0.46974999999999945, 0.4714999999999989, 0.18499999999999872, 0.17624999999999957, 0.13449999999999918, 0.19299999999999962, 0.18124999999999858, 0.18599999999999817, 0.2107499999999991, 0.2032500000000006, 0.15775000000000006, 0.15999999999999837, 0.1485000000000003, 0.20274999999999999, 0.14450000000000074, 0.1620000000000008, 0.1620000000000008, 0.1460000000000008, 0.17600000000000016, 0.22174999999999834], zp_timestamp='2026-02-15T00:14:00')
2026-02-15T02:17:13.712 [DEBUG] [Thread-196206] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:17:13.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-15T02:17:13.807 [DEBUG] [Thread-196209] [transport.py] [_log()] starting thread (client mode): 0xa2d79360
2026-02-15T02:17:13.807 [DEBUG] [Thread-196209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:17:13.824 [DEBUG] [Thread-196209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:17:13.824 [INFO] [Thread-196209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:17:13.832 [DEBUG] [Thread-196209] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:17:13.832 [DEBUG] [Thread-196209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:17:13.832 [DEBUG] [Thread-196209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:17:13.832 [DEBUG] [Thread-196209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:17:13.833 [DEBUG] [Thread-196209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:17:13.833 [DEBUG] [Thread-196209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:17:13.833 [DEBUG] [Thread-196209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:17:13.833 [DEBUG] [Thread-196209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:17:13.833 [DEBUG] [Thread-196209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:17:13.833 [DEBUG] [Thread-196209] [transport.py] [_log()] client lang: <none>
2026-02-15T02:17:13.833 [DEBUG] [Thread-196209] [transport.py] [_log()] server lang: <none>
2026-02-15T02:17:13.833 [DEBUG] [Thread-196209] [transport.py] [_log()] kex follows: False
2026-02-15T02:17:13.833 [DEBUG] [Thread-196209] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:17:13.833 [DEBUG] [Thread-196209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:17:13.833 [DEBUG] [Thread-196209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:17:13.833 [DEBUG] [Thread-196209] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:17:13.833 [DEBUG] [Thread-196209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:17:13.833 [DEBUG] [Thread-196209] [transport.py] [_log()] Compression: none
2026-02-15T02:17:13.833 [DEBUG] [Thread-196209] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:17:13.891 [DEBUG] [Thread-196209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:17:13.892 [DEBUG] [Thread-196209] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:17:13.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:17:13.893 [DEBUG] [Thread-196209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:17:13.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:17:13.947 [DEBUG] [Thread-196209] [transport.py] [_log()] userauth is OK
2026-02-15T02:17:13.948 [DEBUG] [Thread-196209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:17:13.948 [DEBUG] [Thread-196209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:17:13.948 [DEBUG] [Thread-196209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:17:13.948 [DEBUG] [Thread-196209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:17:13.972 [INFO] [Thread-196209] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:17:13.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T02:17:13.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:17:14.799 [DEBUG] [Thread-196209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:17:14.799 [DEBUG] [Thread-196209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:17:14.848 [DEBUG] [Thread-196209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:17:14.848 [DEBUG] [Thread-196209] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:17:14.858 [DEBUG] [Thread-196209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:17:14.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:17:14.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:17:14.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:17:14.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:17:14.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:17:14.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:17:14.895 [DEBUG] [Thread-196209] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:17:16.099 [DEBUG] [Thread-196211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:17:20.426 [DEBUG] [Thread-196212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:17:35.488 [DEBUG] [Thread-196213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:17:42.083 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:17:42.084 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:17:44.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:17:44.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:17:44.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:17:47.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 17, 37), 1.75, 88.59, 0.0, 35.07, 7.23, 1, 1, 0, 2, 0, 0),)
2026-02-15T02:17:47.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:17:37
2026-02-15T02:17:47.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:17:47.824 [DEBUG] [Thread-196214] [transport.py] [_log()] starting thread (client mode): 0xa2d97c70
2026-02-15T02:17:47.824 [DEBUG] [Thread-196214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:17:47.843 [DEBUG] [Thread-196214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:17:47.844 [INFO] [Thread-196214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:17:47.847 [DEBUG] [Thread-196214] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:17:47.847 [DEBUG] [Thread-196214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:17:47.847 [DEBUG] [Thread-196214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:17:47.847 [DEBUG] [Thread-196214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:17:47.847 [DEBUG] [Thread-196214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:17:47.847 [DEBUG] [Thread-196214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:17:47.847 [DEBUG] [Thread-196214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:17:47.847 [DEBUG] [Thread-196214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:17:47.847 [DEBUG] [Thread-196214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:17:47.847 [DEBUG] [Thread-196214] [transport.py] [_log()] client lang: <none>
2026-02-15T02:17:47.847 [DEBUG] [Thread-196214] [transport.py] [_log()] server lang: <none>
2026-02-15T02:17:47.847 [DEBUG] [Thread-196214] [transport.py] [_log()] kex follows: False
2026-02-15T02:17:47.847 [DEBUG] [Thread-196214] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:17:47.848 [DEBUG] [Thread-196214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:17:47.848 [DEBUG] [Thread-196214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:17:47.848 [DEBUG] [Thread-196214] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:17:47.848 [DEBUG] [Thread-196214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:17:47.848 [DEBUG] [Thread-196214] [transport.py] [_log()] Compression: none
2026-02-15T02:17:47.848 [DEBUG] [Thread-196214] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:17:47.864 [DEBUG] [Thread-196214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:17:47.864 [DEBUG] [Thread-196214] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:17:47.865 [DEBUG] [Thread-196214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:17:47.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:17:47.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:17:47.867 [DEBUG] [Thread-196214] [transport.py] [_log()] userauth is OK
2026-02-15T02:17:47.867 [DEBUG] [Thread-196214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:17:47.867 [DEBUG] [Thread-196214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:17:47.867 [DEBUG] [Thread-196214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:17:47.867 [DEBUG] [Thread-196214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:17:47.892 [INFO] [Thread-196214] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:17:47.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:17:48.534 [DEBUG] [Thread-196214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:17:48.535 [DEBUG] [Thread-196214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:17:48.535 [DEBUG] [Thread-196214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:17:48.576 [DEBUG] [Thread-196214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:17:48.576 [DEBUG] [Thread-196214] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:17:48.579 [DEBUG] [Thread-196214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:17:48.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:17:48.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:17:48.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:17:48.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:17:48.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:17:48.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:17:48.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:17:48.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:17:48.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:17:48.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.011913 -999.00   +6.80  33.08     90   +5.40 1 2 2 3 1     0    0 -999.00 0.00 ZNEsW 33.1 33.1 155.0 47.5 7.4 -21.0 7.2 -19.5 7.0 -20.7 7.3 -21.8
2026-02-15T02:17:48.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:17:48.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:17:48.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.011913
2026-02-15T02:17:48.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:17:48.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:17:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:17:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:17:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:17:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:17:37', tmtdew=1.75, humidity=88.59, cloud=0.0, wind=35.07, temperature=7.23, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:17:09.283', atlas_cloud=2, atlas_rain=1, zp_data=[1.0887499999999992, 0.11575000000000024, 0.1592500000000019, 0.254999999999999, 1.21, 1.0157500000000006, 1.4254999999999995, 0.3882500000000011, 0.1144999999999996, 0.09399999999999942, 0.0727499999999992, 0.14899999999999913, 0.4559999999999995, 0.46974999999999945, 0.4714999999999989, 0.18499999999999872, 0.17624999999999957, 0.13449999999999918, 0.19299999999999962, 0.18124999999999858, 0.18599999999999817, 0.2107499999999991, 0.2032500000000006, 0.15775000000000006, 0.15999999999999837, 0.1485000000000003, 0.20274999999999999, 0.14450000000000074, 0.1620000000000008, 0.1620000000000008, 0.1460000000000008, 0.17600000000000016, 0.22174999999999834], zp_timestamp='2026-02-15T00:14:00')
2026-02-15T02:17:48.606 [DEBUG] [Thread-196214] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:17:48.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-15T02:17:48.704 [DEBUG] [Thread-196217] [transport.py] [_log()] starting thread (client mode): 0xa57d4af0
2026-02-15T02:17:48.704 [DEBUG] [Thread-196217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:17:48.719 [DEBUG] [Thread-196217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:17:48.720 [INFO] [Thread-196217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:17:48.728 [DEBUG] [Thread-196217] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:17:48.729 [DEBUG] [Thread-196217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:17:48.729 [DEBUG] [Thread-196217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:17:48.729 [DEBUG] [Thread-196217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:17:48.729 [DEBUG] [Thread-196217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:17:48.729 [DEBUG] [Thread-196217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:17:48.729 [DEBUG] [Thread-196217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:17:48.729 [DEBUG] [Thread-196217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:17:48.729 [DEBUG] [Thread-196217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:17:48.729 [DEBUG] [Thread-196217] [transport.py] [_log()] client lang: <none>
2026-02-15T02:17:48.729 [DEBUG] [Thread-196217] [transport.py] [_log()] server lang: <none>
2026-02-15T02:17:48.729 [DEBUG] [Thread-196217] [transport.py] [_log()] kex follows: False
2026-02-15T02:17:48.729 [DEBUG] [Thread-196217] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:17:48.729 [DEBUG] [Thread-196217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:17:48.729 [DEBUG] [Thread-196217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:17:48.729 [DEBUG] [Thread-196217] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:17:48.730 [DEBUG] [Thread-196217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:17:48.730 [DEBUG] [Thread-196217] [transport.py] [_log()] Compression: none
2026-02-15T02:17:48.730 [DEBUG] [Thread-196217] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:17:48.787 [DEBUG] [Thread-196217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:17:48.787 [DEBUG] [Thread-196217] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:17:48.788 [DEBUG] [Thread-196217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:17:48.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:17:48.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:17:48.843 [DEBUG] [Thread-196217] [transport.py] [_log()] userauth is OK
2026-02-15T02:17:48.844 [DEBUG] [Thread-196217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:17:48.844 [DEBUG] [Thread-196217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:17:48.844 [DEBUG] [Thread-196217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:17:48.844 [DEBUG] [Thread-196217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:17:48.863 [INFO] [Thread-196217] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:17:48.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-15T02:17:48.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:17:49.675 [DEBUG] [Thread-196217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:17:49.675 [DEBUG] [Thread-196217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:17:49.723 [DEBUG] [Thread-196217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:17:49.723 [DEBUG] [Thread-196217] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:17:49.732 [DEBUG] [Thread-196217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:17:49.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:17:49.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:17:49.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:17:49.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:17:49.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:17:49.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:17:49.767 [DEBUG] [Thread-196217] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:17:50.524 [DEBUG] [Thread-196219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:18:05.572 [DEBUG] [Thread-196220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:18:16.156 [DEBUG] [Thread-196221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:18:19.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:18:19.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:18:19.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:18:20.613 [DEBUG] [Thread-196222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:18:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 17, 37), 1.75, 88.59, 0.0, 35.07, 7.23, 1, 1, 0, 2, 0, 0),)
2026-02-15T02:18:21.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:17:37
2026-02-15T02:18:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:18:22.169 [DEBUG] [Thread-196223] [transport.py] [_log()] starting thread (client mode): 0xa2d6e440
2026-02-15T02:18:22.169 [DEBUG] [Thread-196223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:18:22.189 [DEBUG] [Thread-196223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:18:22.189 [INFO] [Thread-196223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:18:22.193 [DEBUG] [Thread-196223] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:18:22.193 [DEBUG] [Thread-196223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:18:22.193 [DEBUG] [Thread-196223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:18:22.193 [DEBUG] [Thread-196223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:18:22.193 [DEBUG] [Thread-196223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:18:22.193 [DEBUG] [Thread-196223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:18:22.193 [DEBUG] [Thread-196223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:18:22.193 [DEBUG] [Thread-196223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:18:22.193 [DEBUG] [Thread-196223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:18:22.193 [DEBUG] [Thread-196223] [transport.py] [_log()] client lang: <none>
2026-02-15T02:18:22.193 [DEBUG] [Thread-196223] [transport.py] [_log()] server lang: <none>
2026-02-15T02:18:22.193 [DEBUG] [Thread-196223] [transport.py] [_log()] kex follows: False
2026-02-15T02:18:22.193 [DEBUG] [Thread-196223] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:18:22.193 [DEBUG] [Thread-196223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:18:22.193 [DEBUG] [Thread-196223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:18:22.193 [DEBUG] [Thread-196223] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:18:22.193 [DEBUG] [Thread-196223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:18:22.193 [DEBUG] [Thread-196223] [transport.py] [_log()] Compression: none
2026-02-15T02:18:22.193 [DEBUG] [Thread-196223] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:18:22.210 [DEBUG] [Thread-196223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:18:22.211 [DEBUG] [Thread-196223] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:18:22.211 [DEBUG] [Thread-196223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:18:22.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:18:22.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:18:22.214 [DEBUG] [Thread-196223] [transport.py] [_log()] userauth is OK
2026-02-15T02:18:22.214 [DEBUG] [Thread-196223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:18:22.214 [DEBUG] [Thread-196223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:18:22.215 [DEBUG] [Thread-196223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:18:22.215 [DEBUG] [Thread-196223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:18:22.236 [INFO] [Thread-196223] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:18:22.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:18:22.857 [DEBUG] [Thread-196223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:18:22.857 [DEBUG] [Thread-196223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:18:22.857 [DEBUG] [Thread-196223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:18:22.898 [DEBUG] [Thread-196223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:18:22.898 [DEBUG] [Thread-196223] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:18:22.901 [DEBUG] [Thread-196223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:18:22.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:18:22.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:18:22.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:18:22.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:18:22.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:18:22.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:18:22.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:18:22.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:18:22.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:18:22.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.012260 -999.00   +6.80  30.01     90   +5.40 1 2 2 3 1     0    0 -999.00 0.00 ZNEsW 30.0 30.0 149.4 41.6 7.4 -23.3 7.2 -21.6 7.0 -20.6 7.4 -22.6
2026-02-15T02:18:22.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:18:22.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:18:22.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.012260
2026-02-15T02:18:22.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:18:22.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:18:22.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:18:22.923 [DEBUG] [Thread-196223] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:18:22.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:18:22.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:18:22.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:17:37', tmtdew=1.75, humidity=88.59, cloud=0.0, wind=35.07, temperature=7.23, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:17:39.264', atlas_cloud=2, atlas_rain=1, zp_data=[1.0887499999999992, 0.11575000000000024, 0.1592500000000019, 0.254999999999999, 1.21, 1.0157500000000006, 1.4254999999999995, 0.3882500000000011, 0.1144999999999996, 0.09399999999999942, 0.0727499999999992, 0.14899999999999913, 0.4559999999999995, 0.46974999999999945, 0.4714999999999989, 0.18499999999999872, 0.17624999999999957, 0.13449999999999918, 0.19299999999999962, 0.18124999999999858, 0.18599999999999817, 0.2107499999999991, 0.2032500000000006, 0.15775000000000006, 0.15999999999999837, 0.1485000000000003, 0.20274999999999999, 0.14450000000000074, 0.1620000000000008, 0.1620000000000008, 0.1460000000000008, 0.17600000000000016, 0.22174999999999834], zp_timestamp='2026-02-15T00:14:00')
2026-02-15T02:18:23.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-15T02:18:23.017 [DEBUG] [Thread-196226] [transport.py] [_log()] starting thread (client mode): 0xa2d6ec80
2026-02-15T02:18:23.017 [DEBUG] [Thread-196226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:18:23.031 [DEBUG] [Thread-196226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:18:23.032 [INFO] [Thread-196226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:18:23.040 [DEBUG] [Thread-196226] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:18:23.040 [DEBUG] [Thread-196226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:18:23.040 [DEBUG] [Thread-196226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:18:23.040 [DEBUG] [Thread-196226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:18:23.040 [DEBUG] [Thread-196226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:18:23.040 [DEBUG] [Thread-196226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:18:23.040 [DEBUG] [Thread-196226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:18:23.041 [DEBUG] [Thread-196226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:18:23.041 [DEBUG] [Thread-196226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:18:23.041 [DEBUG] [Thread-196226] [transport.py] [_log()] client lang: <none>
2026-02-15T02:18:23.041 [DEBUG] [Thread-196226] [transport.py] [_log()] server lang: <none>
2026-02-15T02:18:23.041 [DEBUG] [Thread-196226] [transport.py] [_log()] kex follows: False
2026-02-15T02:18:23.041 [DEBUG] [Thread-196226] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:18:23.041 [DEBUG] [Thread-196226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:18:23.041 [DEBUG] [Thread-196226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:18:23.041 [DEBUG] [Thread-196226] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:18:23.042 [DEBUG] [Thread-196226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:18:23.042 [DEBUG] [Thread-196226] [transport.py] [_log()] Compression: none
2026-02-15T02:18:23.042 [DEBUG] [Thread-196226] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:18:23.097 [DEBUG] [Thread-196226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:18:23.097 [DEBUG] [Thread-196226] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:18:23.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:18:23.098 [DEBUG] [Thread-196226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:18:23.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:18:23.153 [DEBUG] [Thread-196226] [transport.py] [_log()] userauth is OK
2026-02-15T02:18:23.154 [DEBUG] [Thread-196226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:18:23.154 [DEBUG] [Thread-196226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:18:23.154 [DEBUG] [Thread-196226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:18:23.154 [DEBUG] [Thread-196226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:18:23.176 [INFO] [Thread-196226] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:18:23.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-15T02:18:23.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:18:23.965 [DEBUG] [Thread-196226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:18:23.965 [DEBUG] [Thread-196226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:18:24.013 [DEBUG] [Thread-196226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:18:24.014 [DEBUG] [Thread-196226] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:18:24.022 [DEBUG] [Thread-196226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:18:24.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:18:24.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-15T02:18:24.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:18:24.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:18:24.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:18:24.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:18:24.058 [DEBUG] [Thread-196226] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:18:35.648 [DEBUG] [Thread-196228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:18:42.287 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:18:42.288 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:18:50.696 [DEBUG] [Thread-196229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:18:54.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:18:54.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:18:54.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-15T02:18:56.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 18, 14), 1.32, 91.34, 0.0, 37.9, 6.92, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:18:56.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:18:14
2026-02-15T02:18:56.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:18:56.631 [DEBUG] [Thread-196230] [transport.py] [_log()] starting thread (client mode): 0xa2de2d40
2026-02-15T02:18:56.632 [DEBUG] [Thread-196230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:18:56.651 [DEBUG] [Thread-196230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:18:56.652 [INFO] [Thread-196230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:18:56.655 [DEBUG] [Thread-196230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:18:56.655 [DEBUG] [Thread-196230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:18:56.655 [DEBUG] [Thread-196230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:18:56.655 [DEBUG] [Thread-196230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:18:56.656 [DEBUG] [Thread-196230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:18:56.656 [DEBUG] [Thread-196230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:18:56.656 [DEBUG] [Thread-196230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:18:56.656 [DEBUG] [Thread-196230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:18:56.656 [DEBUG] [Thread-196230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:18:56.656 [DEBUG] [Thread-196230] [transport.py] [_log()] client lang: <none>
2026-02-15T02:18:56.656 [DEBUG] [Thread-196230] [transport.py] [_log()] server lang: <none>
2026-02-15T02:18:56.656 [DEBUG] [Thread-196230] [transport.py] [_log()] kex follows: False
2026-02-15T02:18:56.656 [DEBUG] [Thread-196230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:18:56.656 [DEBUG] [Thread-196230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:18:56.656 [DEBUG] [Thread-196230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:18:56.656 [DEBUG] [Thread-196230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:18:56.657 [DEBUG] [Thread-196230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:18:56.657 [DEBUG] [Thread-196230] [transport.py] [_log()] Compression: none
2026-02-15T02:18:56.657 [DEBUG] [Thread-196230] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:18:56.673 [DEBUG] [Thread-196230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:18:56.674 [DEBUG] [Thread-196230] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:18:56.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:18:56.675 [DEBUG] [Thread-196230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:18:56.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:18:56.677 [DEBUG] [Thread-196230] [transport.py] [_log()] userauth is OK
2026-02-15T02:18:56.677 [DEBUG] [Thread-196230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:18:56.677 [DEBUG] [Thread-196230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:18:56.677 [DEBUG] [Thread-196230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:18:56.677 [DEBUG] [Thread-196230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:18:56.713 [INFO] [Thread-196230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:18:56.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:18:57.496 [DEBUG] [Thread-196230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:18:57.496 [DEBUG] [Thread-196230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:18:57.496 [DEBUG] [Thread-196230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:18:57.536 [DEBUG] [Thread-196230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:18:57.537 [DEBUG] [Thread-196230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:18:57.540 [DEBUG] [Thread-196230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:18:57.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:18:57.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:18:57.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:18:57.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:18:57.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:18:57.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:18:57.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:18:57.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:18:57.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:18:57.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.012607 -999.00   +6.80  28.76     90   +5.40 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 28.8 28.8 147.4 41.5 7.4 -20.8 7.2 -18.0 7.0 -17.0 7.3 -19.9
2026-02-15T02:18:57.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:18:57.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:18:57.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.012607
2026-02-15T02:18:57.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:18:57.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:18:57.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:18:57.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:18:57.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:18:57.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:18:14', tmtdew=1.32, humidity=91.34, cloud=0.0, wind=37.9, temperature=6.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:18:09.245', atlas_cloud=1, atlas_rain=1, zp_data=[1.0887499999999992, 0.11575000000000024, 0.1592500000000019, 0.254999999999999, 1.21, 1.0157500000000006, 1.4254999999999995, 0.3882500000000011, 0.1144999999999996, 0.09399999999999942, 0.0727499999999992, 0.14899999999999913, 0.4559999999999995, 0.46974999999999945, 0.4714999999999989, 0.18499999999999872, 0.17624999999999957, 0.13449999999999918, 0.19299999999999962, 0.18124999999999858, 0.18599999999999817, 0.2107499999999991, 0.2032500000000006, 0.15775000000000006, 0.15999999999999837, 0.1485000000000003, 0.20274999999999999, 0.14450000000000074, 0.1620000000000008, 0.1620000000000008, 0.1460000000000008, 0.17600000000000016, 0.22174999999999834], zp_timestamp='2026-02-15T00:17:00')
2026-02-15T02:18:57.567 [DEBUG] [Thread-196230] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:18:57.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T02:18:57.677 [DEBUG] [Thread-196233] [transport.py] [_log()] starting thread (client mode): 0xa2d970d0
2026-02-15T02:18:57.677 [DEBUG] [Thread-196233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:18:57.693 [DEBUG] [Thread-196233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:18:57.693 [INFO] [Thread-196233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:18:57.701 [DEBUG] [Thread-196233] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:18:57.701 [DEBUG] [Thread-196233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:18:57.702 [DEBUG] [Thread-196233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:18:57.702 [DEBUG] [Thread-196233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:18:57.702 [DEBUG] [Thread-196233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:18:57.702 [DEBUG] [Thread-196233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:18:57.702 [DEBUG] [Thread-196233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:18:57.702 [DEBUG] [Thread-196233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:18:57.702 [DEBUG] [Thread-196233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:18:57.702 [DEBUG] [Thread-196233] [transport.py] [_log()] client lang: <none>
2026-02-15T02:18:57.702 [DEBUG] [Thread-196233] [transport.py] [_log()] server lang: <none>
2026-02-15T02:18:57.702 [DEBUG] [Thread-196233] [transport.py] [_log()] kex follows: False
2026-02-15T02:18:57.702 [DEBUG] [Thread-196233] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:18:57.702 [DEBUG] [Thread-196233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:18:57.702 [DEBUG] [Thread-196233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:18:57.702 [DEBUG] [Thread-196233] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:18:57.702 [DEBUG] [Thread-196233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:18:57.703 [DEBUG] [Thread-196233] [transport.py] [_log()] Compression: none
2026-02-15T02:18:57.703 [DEBUG] [Thread-196233] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:18:57.762 [DEBUG] [Thread-196233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:18:57.762 [DEBUG] [Thread-196233] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:18:57.763 [DEBUG] [Thread-196233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:18:57.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:18:57.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:18:57.821 [DEBUG] [Thread-196233] [transport.py] [_log()] userauth is OK
2026-02-15T02:18:57.822 [DEBUG] [Thread-196233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:18:57.822 [DEBUG] [Thread-196233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:18:57.822 [DEBUG] [Thread-196233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:18:57.822 [DEBUG] [Thread-196233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:18:57.842 [INFO] [Thread-196233] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:18:57.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-15T02:18:57.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:18:58.611 [DEBUG] [Thread-196233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:18:58.612 [DEBUG] [Thread-196233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:18:58.660 [DEBUG] [Thread-196233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:18:58.660 [DEBUG] [Thread-196233] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:18:58.670 [DEBUG] [Thread-196233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:18:58.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:18:58.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:18:58.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-15T02:18:58.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:18:58.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:18:58.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:18:58.707 [DEBUG] [Thread-196233] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:19:05.733 [DEBUG] [Thread-196235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:19:16.214 [DEBUG] [Thread-196236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:19:20.788 [DEBUG] [Thread-196237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:19:28.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:19:28.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:19:28.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-15T02:19:30.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 18, 49), 1.31, 91.36, 0.0, 36.08, 6.88, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:19:30.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:18:49
2026-02-15T02:19:30.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:19:31.071 [DEBUG] [Thread-196238] [transport.py] [_log()] starting thread (client mode): 0xa2de2920
2026-02-15T02:19:31.072 [DEBUG] [Thread-196238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:19:31.091 [DEBUG] [Thread-196238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:19:31.092 [INFO] [Thread-196238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:19:31.095 [DEBUG] [Thread-196238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:19:31.095 [DEBUG] [Thread-196238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:19:31.096 [DEBUG] [Thread-196238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:19:31.096 [DEBUG] [Thread-196238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:19:31.096 [DEBUG] [Thread-196238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:19:31.096 [DEBUG] [Thread-196238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:19:31.096 [DEBUG] [Thread-196238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:19:31.096 [DEBUG] [Thread-196238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:19:31.096 [DEBUG] [Thread-196238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:19:31.096 [DEBUG] [Thread-196238] [transport.py] [_log()] client lang: <none>
2026-02-15T02:19:31.096 [DEBUG] [Thread-196238] [transport.py] [_log()] server lang: <none>
2026-02-15T02:19:31.096 [DEBUG] [Thread-196238] [transport.py] [_log()] kex follows: False
2026-02-15T02:19:31.096 [DEBUG] [Thread-196238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:19:31.096 [DEBUG] [Thread-196238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:19:31.096 [DEBUG] [Thread-196238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:19:31.096 [DEBUG] [Thread-196238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:19:31.096 [DEBUG] [Thread-196238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:19:31.096 [DEBUG] [Thread-196238] [transport.py] [_log()] Compression: none
2026-02-15T02:19:31.096 [DEBUG] [Thread-196238] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:19:31.114 [DEBUG] [Thread-196238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:19:31.114 [DEBUG] [Thread-196238] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:19:31.115 [DEBUG] [Thread-196238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:19:31.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:19:31.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:19:31.117 [DEBUG] [Thread-196238] [transport.py] [_log()] userauth is OK
2026-02-15T02:19:31.117 [DEBUG] [Thread-196238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:19:31.117 [DEBUG] [Thread-196238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:19:31.117 [DEBUG] [Thread-196238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:19:31.117 [DEBUG] [Thread-196238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:19:31.139 [INFO] [Thread-196238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:19:31.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:19:31.770 [DEBUG] [Thread-196238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:19:31.770 [DEBUG] [Thread-196238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:19:31.770 [DEBUG] [Thread-196238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:19:31.811 [DEBUG] [Thread-196238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:19:31.812 [DEBUG] [Thread-196238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:19:31.815 [DEBUG] [Thread-196238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:19:31.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:19:31.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:19:31.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:19:31.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:19:31.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:19:31.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:19:31.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:19:31.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:19:31.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:19:31.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.013302 -999.00   +6.80  27.53     90   +5.40 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 27.5 27.5 144.0 40.7 7.4 -20.1 7.2 -20.4 7.0 -20.0 7.4 -20.5
2026-02-15T02:19:31.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:19:31.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:19:31.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.013302
2026-02-15T02:19:31.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:19:31.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:19:31.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:19:31.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:19:31.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:19:31.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:18:49', tmtdew=1.31, humidity=91.36, cloud=0.0, wind=36.08, temperature=6.88, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:19:09.293', atlas_cloud=1, atlas_rain=1, zp_data=[1.0887499999999992, 0.11575000000000024, 0.1592500000000019, 0.254999999999999, 1.21, 1.0157500000000006, 1.4254999999999995, 0.3882500000000011, 0.1144999999999996, 0.09399999999999942, 0.0727499999999992, 0.14899999999999913, 0.4559999999999995, 0.46974999999999945, 0.4714999999999989, 0.18499999999999872, 0.17624999999999957, 0.13449999999999918, 0.19299999999999962, 0.18124999999999858, 0.18599999999999817, 0.2107499999999991, 0.2032500000000006, 0.15775000000000006, 0.15999999999999837, 0.1485000000000003, 0.20274999999999999, 0.14450000000000074, 0.1620000000000008, 0.1620000000000008, 0.1460000000000008, 0.17600000000000016, 0.22174999999999834], zp_timestamp='2026-02-15T00:17:00')
2026-02-15T02:19:31.842 [DEBUG] [Thread-196238] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:19:31.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-15T02:19:31.938 [DEBUG] [Thread-196241] [transport.py] [_log()] starting thread (client mode): 0xa2d00580
2026-02-15T02:19:31.938 [DEBUG] [Thread-196241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:19:31.953 [DEBUG] [Thread-196241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:19:31.953 [INFO] [Thread-196241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:19:31.960 [DEBUG] [Thread-196241] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:19:31.960 [DEBUG] [Thread-196241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:19:31.960 [DEBUG] [Thread-196241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:19:31.960 [DEBUG] [Thread-196241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:19:31.960 [DEBUG] [Thread-196241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:19:31.960 [DEBUG] [Thread-196241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:19:31.960 [DEBUG] [Thread-196241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:19:31.960 [DEBUG] [Thread-196241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:19:31.960 [DEBUG] [Thread-196241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:19:31.960 [DEBUG] [Thread-196241] [transport.py] [_log()] client lang: <none>
2026-02-15T02:19:31.960 [DEBUG] [Thread-196241] [transport.py] [_log()] server lang: <none>
2026-02-15T02:19:31.961 [DEBUG] [Thread-196241] [transport.py] [_log()] kex follows: False
2026-02-15T02:19:31.961 [DEBUG] [Thread-196241] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:19:31.961 [DEBUG] [Thread-196241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:19:31.961 [DEBUG] [Thread-196241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:19:31.961 [DEBUG] [Thread-196241] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:19:31.961 [DEBUG] [Thread-196241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:19:31.961 [DEBUG] [Thread-196241] [transport.py] [_log()] Compression: none
2026-02-15T02:19:31.961 [DEBUG] [Thread-196241] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:19:32.019 [DEBUG] [Thread-196241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:19:32.019 [DEBUG] [Thread-196241] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:19:32.019 [DEBUG] [Thread-196241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:19:32.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:19:32.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:19:32.077 [DEBUG] [Thread-196241] [transport.py] [_log()] userauth is OK
2026-02-15T02:19:32.077 [DEBUG] [Thread-196241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:19:32.077 [DEBUG] [Thread-196241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:19:32.077 [DEBUG] [Thread-196241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:19:32.078 [DEBUG] [Thread-196241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:19:32.097 [INFO] [Thread-196241] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:19:32.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T02:19:32.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:19:32.911 [DEBUG] [Thread-196241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:19:32.911 [DEBUG] [Thread-196241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:19:32.962 [DEBUG] [Thread-196241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:19:32.962 [DEBUG] [Thread-196241] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:19:32.972 [DEBUG] [Thread-196241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:19:32.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:19: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')
2026-02-15T02:19: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') -> 00000000
2026-02-15T02:19:33.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:19:33.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:19:33.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:19:33.010 [DEBUG] [Thread-196241] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:19:35.827 [DEBUG] [Thread-196243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:19:42.492 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:19:42.493 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:19:50.880 [DEBUG] [Thread-196244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:20:03.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:20:03.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:20:03.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:20:05.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 19, 25), 1.31, 91.38, 0.0, 36.91, 6.93, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:20:05.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:19:25
2026-02-15T02:20:05.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:20:05.629 [DEBUG] [Thread-196245] [transport.py] [_log()] starting thread (client mode): 0xa57d4160
2026-02-15T02:20:05.629 [DEBUG] [Thread-196245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:20:05.644 [DEBUG] [Thread-196245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:20:05.644 [INFO] [Thread-196245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:20:05.646 [DEBUG] [Thread-196245] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:20:05.647 [DEBUG] [Thread-196245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:20:05.647 [DEBUG] [Thread-196245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:20:05.647 [DEBUG] [Thread-196245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:20:05.647 [DEBUG] [Thread-196245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:20:05.647 [DEBUG] [Thread-196245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:20:05.647 [DEBUG] [Thread-196245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:20:05.647 [DEBUG] [Thread-196245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:20:05.647 [DEBUG] [Thread-196245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:20:05.647 [DEBUG] [Thread-196245] [transport.py] [_log()] client lang: <none>
2026-02-15T02:20:05.647 [DEBUG] [Thread-196245] [transport.py] [_log()] server lang: <none>
2026-02-15T02:20:05.647 [DEBUG] [Thread-196245] [transport.py] [_log()] kex follows: False
2026-02-15T02:20:05.647 [DEBUG] [Thread-196245] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:20:05.647 [DEBUG] [Thread-196245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:20:05.647 [DEBUG] [Thread-196245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:20:05.647 [DEBUG] [Thread-196245] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:20:05.647 [DEBUG] [Thread-196245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:20:05.647 [DEBUG] [Thread-196245] [transport.py] [_log()] Compression: none
2026-02-15T02:20:05.647 [DEBUG] [Thread-196245] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:20:05.654 [DEBUG] [Thread-196245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:20:05.654 [DEBUG] [Thread-196245] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:20:05.654 [DEBUG] [Thread-196245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:20:05.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:20:05.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:20:05.655 [DEBUG] [Thread-196245] [transport.py] [_log()] userauth is OK
2026-02-15T02:20:05.655 [DEBUG] [Thread-196245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:20:05.655 [DEBUG] [Thread-196245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:20:05.655 [DEBUG] [Thread-196245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:20:05.655 [DEBUG] [Thread-196245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:20:05.666 [INFO] [Thread-196245] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:20:05.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:20:05.911 [DEBUG] [Thread-196247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:20:08.961 [DEBUG] [Thread-196245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:20:08.961 [DEBUG] [Thread-196245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:20:08.962 [DEBUG] [Thread-196245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:20:09.002 [DEBUG] [Thread-196245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:20:09.003 [DEBUG] [Thread-196245] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:20:09.006 [DEBUG] [Thread-196245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:20:09.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:20:09.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:20:09.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:20:09.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:20:09.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:20:09.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:20:09.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:20:09.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:20:09.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:20:09.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.013649 -999.00   +6.70  34.06     90   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 34.1 34.1 146.1 41.5 7.4 -19.1 7.3 -18.1 7.0 -18.5 7.3 -18.9
2026-02-15T02:20:09.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:20:09.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:20:09.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.013649
2026-02-15T02:20:09.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:20:09.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:20:09.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:20:09.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:20:09.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:20:09.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:19:25', tmtdew=1.31, humidity=91.38, cloud=0.0, wind=36.91, temperature=6.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:19:39.274', atlas_cloud=1, atlas_rain=1, zp_data=[1.0887499999999992, 0.11575000000000024, 0.1592500000000019, 0.254999999999999, 1.21, 1.0157500000000006, 1.4254999999999995, 0.3882500000000011, 0.1144999999999996, 0.09399999999999942, 0.0727499999999992, 0.14899999999999913, 0.4559999999999995, 0.46974999999999945, 0.4714999999999989, 0.18499999999999872, 0.17624999999999957, 0.13449999999999918, 0.19299999999999962, 0.18124999999999858, 0.18599999999999817, 0.2107499999999991, 0.2032500000000006, 0.15775000000000006, 0.15999999999999837, 0.1485000000000003, 0.20274999999999999, 0.14450000000000074, 0.1620000000000008, 0.1620000000000008, 0.1460000000000008, 0.17600000000000016, 0.22174999999999834], zp_timestamp='2026-02-15T00:17:00')
2026-02-15T02:20:09.046 [DEBUG] [Thread-196245] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:20:09.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-15T02:20:09.144 [DEBUG] [Thread-196249] [transport.py] [_log()] starting thread (client mode): 0xa2d6beb0
2026-02-15T02:20:09.144 [DEBUG] [Thread-196249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:20:09.158 [DEBUG] [Thread-196249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:20:09.158 [INFO] [Thread-196249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:20:09.166 [DEBUG] [Thread-196249] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:20:09.166 [DEBUG] [Thread-196249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:20:09.167 [DEBUG] [Thread-196249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:20:09.167 [DEBUG] [Thread-196249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:20:09.167 [DEBUG] [Thread-196249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:20:09.167 [DEBUG] [Thread-196249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:20:09.167 [DEBUG] [Thread-196249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:20:09.167 [DEBUG] [Thread-196249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:20:09.167 [DEBUG] [Thread-196249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:20:09.167 [DEBUG] [Thread-196249] [transport.py] [_log()] client lang: <none>
2026-02-15T02:20:09.167 [DEBUG] [Thread-196249] [transport.py] [_log()] server lang: <none>
2026-02-15T02:20:09.167 [DEBUG] [Thread-196249] [transport.py] [_log()] kex follows: False
2026-02-15T02:20:09.167 [DEBUG] [Thread-196249] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:20:09.167 [DEBUG] [Thread-196249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:20:09.167 [DEBUG] [Thread-196249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:20:09.167 [DEBUG] [Thread-196249] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:20:09.167 [DEBUG] [Thread-196249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:20:09.167 [DEBUG] [Thread-196249] [transport.py] [_log()] Compression: none
2026-02-15T02:20:09.167 [DEBUG] [Thread-196249] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:20:09.224 [DEBUG] [Thread-196249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:20:09.225 [DEBUG] [Thread-196249] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:20:09.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:20:09.227 [DEBUG] [Thread-196249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:20:09.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:20:09.284 [DEBUG] [Thread-196249] [transport.py] [_log()] userauth is OK
2026-02-15T02:20:09.285 [DEBUG] [Thread-196249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:20:09.285 [DEBUG] [Thread-196249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:20:09.285 [DEBUG] [Thread-196249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:20:09.285 [DEBUG] [Thread-196249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:20:09.309 [INFO] [Thread-196249] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:20:09.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-15T02:20:09.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:20:10.109 [DEBUG] [Thread-196249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:20:10.109 [DEBUG] [Thread-196249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:20:10.157 [DEBUG] [Thread-196249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:20:10.158 [DEBUG] [Thread-196249] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:20:10.167 [DEBUG] [Thread-196249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:20:10.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:20:10.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-15T02:20:10.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-15T02:20:10.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:20:10.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:20:10.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:20:10.206 [DEBUG] [Thread-196249] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:20:16.281 [DEBUG] [Thread-196251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:20:20.948 [DEBUG] [Thread-196252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:20:36.000 [DEBUG] [Thread-196253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:20:40.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:20:40.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:20:40.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-15T02:20:42.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 19, 25), 1.31, 91.38, 0.0, 38.71, 6.93, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:20:42.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:19:25
2026-02-15T02:20:42.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:20:42.694 [DEBUG] [Thread-196254] [transport.py] [_log()] starting thread (client mode): 0xa2d86920
2026-02-15T02:20:42.694 [DEBUG] [Thread-196254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:20:42.695 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:20:42.696 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:20:42.713 [DEBUG] [Thread-196254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:20:42.713 [INFO] [Thread-196254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:20:42.717 [DEBUG] [Thread-196254] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:20:42.717 [DEBUG] [Thread-196254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:20:42.717 [DEBUG] [Thread-196254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:20:42.717 [DEBUG] [Thread-196254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:20:42.717 [DEBUG] [Thread-196254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:20:42.717 [DEBUG] [Thread-196254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:20:42.717 [DEBUG] [Thread-196254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:20:42.717 [DEBUG] [Thread-196254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:20:42.717 [DEBUG] [Thread-196254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:20:42.717 [DEBUG] [Thread-196254] [transport.py] [_log()] client lang: <none>
2026-02-15T02:20:42.717 [DEBUG] [Thread-196254] [transport.py] [_log()] server lang: <none>
2026-02-15T02:20:42.717 [DEBUG] [Thread-196254] [transport.py] [_log()] kex follows: False
2026-02-15T02:20:42.717 [DEBUG] [Thread-196254] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:20:42.717 [DEBUG] [Thread-196254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:20:42.717 [DEBUG] [Thread-196254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:20:42.717 [DEBUG] [Thread-196254] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:20:42.717 [DEBUG] [Thread-196254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:20:42.717 [DEBUG] [Thread-196254] [transport.py] [_log()] Compression: none
2026-02-15T02:20:42.717 [DEBUG] [Thread-196254] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:20:42.735 [DEBUG] [Thread-196254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:20:42.736 [DEBUG] [Thread-196254] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:20:42.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:20:42.737 [DEBUG] [Thread-196254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:20:42.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:20:42.739 [DEBUG] [Thread-196254] [transport.py] [_log()] userauth is OK
2026-02-15T02:20:42.739 [DEBUG] [Thread-196254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:20:42.739 [DEBUG] [Thread-196254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:20:42.739 [DEBUG] [Thread-196254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:20:42.739 [DEBUG] [Thread-196254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:20:42.756 [INFO] [Thread-196254] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:20:42.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:20:43.364 [DEBUG] [Thread-196254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:20:43.364 [DEBUG] [Thread-196254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:20:43.364 [DEBUG] [Thread-196254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:20:43.405 [DEBUG] [Thread-196254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:20:43.405 [DEBUG] [Thread-196254] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:20:43.408 [DEBUG] [Thread-196254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:20:43.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:20:43.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:20:43.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:20:43.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:20:43.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:20:43.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:20:43.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:20:43.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:20:43.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:20:43.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.013996 -999.00   +6.80  31.46     91   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 31.5 31.5 144.4 44.0 7.4 -21.7 7.2 -21.2 7.0 -21.5 7.4 -22.9
2026-02-15T02:20:43.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:20:43.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:20:43.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.013996
2026-02-15T02:20:43.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:20:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:20:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:20:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:20:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:20:43.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:19:25', tmtdew=1.31, humidity=91.38, cloud=0.0, wind=38.71, temperature=6.93, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:20:09.254', atlas_cloud=1, atlas_rain=1, zp_data=[1.0887499999999992, 0.11575000000000024, 0.1592500000000019, 0.254999999999999, 1.21, 1.0157500000000006, 1.4254999999999995, 0.3882500000000011, 0.1144999999999996, 0.09399999999999942, 0.0727499999999992, 0.14899999999999913, 0.4559999999999995, 0.46974999999999945, 0.4714999999999989, 0.18499999999999872, 0.17624999999999957, 0.13449999999999918, 0.19299999999999962, 0.18124999999999858, 0.18599999999999817, 0.2107499999999991, 0.2032500000000006, 0.15775000000000006, 0.15999999999999837, 0.1485000000000003, 0.20274999999999999, 0.14450000000000074, 0.1620000000000008, 0.1620000000000008, 0.1460000000000008, 0.17600000000000016, 0.22174999999999834], zp_timestamp='2026-02-15T00:17:00')
2026-02-15T02:20:43.434 [DEBUG] [Thread-196254] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:20:43.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-15T02:20:43.531 [DEBUG] [Thread-196257] [transport.py] [_log()] starting thread (client mode): 0xa2d96050
2026-02-15T02:20:43.532 [DEBUG] [Thread-196257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:20:43.549 [DEBUG] [Thread-196257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:20:43.550 [INFO] [Thread-196257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:20:43.561 [DEBUG] [Thread-196257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:20:43.561 [DEBUG] [Thread-196257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:20:43.561 [DEBUG] [Thread-196257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:20:43.561 [DEBUG] [Thread-196257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:20:43.561 [DEBUG] [Thread-196257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:20:43.562 [DEBUG] [Thread-196257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:20:43.562 [DEBUG] [Thread-196257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:20:43.562 [DEBUG] [Thread-196257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:20:43.562 [DEBUG] [Thread-196257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:20:43.562 [DEBUG] [Thread-196257] [transport.py] [_log()] client lang: <none>
2026-02-15T02:20:43.562 [DEBUG] [Thread-196257] [transport.py] [_log()] server lang: <none>
2026-02-15T02:20:43.562 [DEBUG] [Thread-196257] [transport.py] [_log()] kex follows: False
2026-02-15T02:20:43.562 [DEBUG] [Thread-196257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:20:43.562 [DEBUG] [Thread-196257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:20:43.562 [DEBUG] [Thread-196257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:20:43.562 [DEBUG] [Thread-196257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:20:43.562 [DEBUG] [Thread-196257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:20:43.562 [DEBUG] [Thread-196257] [transport.py] [_log()] Compression: none
2026-02-15T02:20:43.563 [DEBUG] [Thread-196257] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:20:43.622 [DEBUG] [Thread-196257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:20:43.623 [DEBUG] [Thread-196257] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:20:43.623 [DEBUG] [Thread-196257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:20:43.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:20:43.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:20:43.686 [DEBUG] [Thread-196257] [transport.py] [_log()] userauth is OK
2026-02-15T02:20:43.686 [DEBUG] [Thread-196257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:20:43.686 [DEBUG] [Thread-196257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:20:43.686 [DEBUG] [Thread-196257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:20:43.686 [DEBUG] [Thread-196257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:20:43.711 [INFO] [Thread-196257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:20:43.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T02:20:43.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:20:44.508 [DEBUG] [Thread-196257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:20:44.508 [DEBUG] [Thread-196257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:20:44.557 [DEBUG] [Thread-196257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:20:44.557 [DEBUG] [Thread-196257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:20:44.566 [DEBUG] [Thread-196257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:20:44.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:20:44.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:20:44.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-15T02:20:44.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:20:44.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:20:44.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:20:44.603 [DEBUG] [Thread-196257] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:20:51.035 [DEBUG] [Thread-196259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:21:06.084 [DEBUG] [Thread-196260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:21:14.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:21:14.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:21:14.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-15T02:21:16.338 [DEBUG] [Thread-196261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:21:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 20, 35), 1.73, 88.72, 0.0, 37.29, 7.2, 1, 1, 0, 2, 0, 0),)
2026-02-15T02:21:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:20:35
2026-02-15T02:21:17.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:21:17.204 [DEBUG] [Thread-196262] [transport.py] [_log()] starting thread (client mode): 0xa2d950c0
2026-02-15T02:21:17.205 [DEBUG] [Thread-196262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:21:17.225 [DEBUG] [Thread-196262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:21:17.226 [INFO] [Thread-196262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:21:17.229 [DEBUG] [Thread-196262] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:21:17.229 [DEBUG] [Thread-196262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:21:17.229 [DEBUG] [Thread-196262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:21:17.229 [DEBUG] [Thread-196262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:21:17.229 [DEBUG] [Thread-196262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:21:17.229 [DEBUG] [Thread-196262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:21:17.229 [DEBUG] [Thread-196262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:21:17.229 [DEBUG] [Thread-196262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:21:17.229 [DEBUG] [Thread-196262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:21:17.229 [DEBUG] [Thread-196262] [transport.py] [_log()] client lang: <none>
2026-02-15T02:21:17.229 [DEBUG] [Thread-196262] [transport.py] [_log()] server lang: <none>
2026-02-15T02:21:17.229 [DEBUG] [Thread-196262] [transport.py] [_log()] kex follows: False
2026-02-15T02:21:17.229 [DEBUG] [Thread-196262] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:21:17.229 [DEBUG] [Thread-196262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:21:17.229 [DEBUG] [Thread-196262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:21:17.229 [DEBUG] [Thread-196262] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:21:17.229 [DEBUG] [Thread-196262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:21:17.229 [DEBUG] [Thread-196262] [transport.py] [_log()] Compression: none
2026-02-15T02:21:17.229 [DEBUG] [Thread-196262] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:21:17.246 [DEBUG] [Thread-196262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:21:17.246 [DEBUG] [Thread-196262] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:21:17.247 [DEBUG] [Thread-196262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:21:17.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:21:17.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:21:17.249 [DEBUG] [Thread-196262] [transport.py] [_log()] userauth is OK
2026-02-15T02:21:17.249 [DEBUG] [Thread-196262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:21:17.249 [DEBUG] [Thread-196262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:21:17.249 [DEBUG] [Thread-196262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:21:17.249 [DEBUG] [Thread-196262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:21:17.266 [INFO] [Thread-196262] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:21:17.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:21:17.903 [DEBUG] [Thread-196262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:21:17.903 [DEBUG] [Thread-196262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:21:17.904 [DEBUG] [Thread-196262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:21:17.945 [DEBUG] [Thread-196262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:21:17.945 [DEBUG] [Thread-196262] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:21:17.948 [DEBUG] [Thread-196262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:21:17.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:21:17.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:21:17.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:21:17.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:21:17.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:21:17.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:21:17.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:21:17.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:21:17.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:21:17.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.014343 -999.00   +6.70  25.69     91   +5.40 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 25.7 25.7 137.6 40.0 7.4 -23.0 7.2 -21.5 6.9 -20.4 7.3 -22.4
2026-02-15T02:21:17.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:21:17.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:21:17.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.014343
2026-02-15T02:21:17.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:21:17.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:21:17.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:21:17.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:21:17.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:21:17.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:20:35', tmtdew=1.73, humidity=88.72, cloud=0.0, wind=37.29, temperature=7.2, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:20:39.235', atlas_cloud=1, atlas_rain=1, zp_data=[1.0887499999999992, 0.11575000000000024, 0.1592500000000019, 0.254999999999999, 1.21, 1.0157500000000006, 1.4254999999999995, 0.3882500000000011, 0.1144999999999996, 0.09399999999999942, 0.0727499999999992, 0.14899999999999913, 0.4559999999999995, 0.46974999999999945, 0.4714999999999989, 0.18499999999999872, 0.17624999999999957, 0.13449999999999918, 0.19299999999999962, 0.18124999999999858, 0.18599999999999817, 0.2107499999999991, 0.2032500000000006, 0.15775000000000006, 0.15999999999999837, 0.1485000000000003, 0.20274999999999999, 0.14450000000000074, 0.1620000000000008, 0.1620000000000008, 0.1460000000000008, 0.17600000000000016, 0.22174999999999834], zp_timestamp='2026-02-15T00:17:00')
2026-02-15T02:21:17.975 [DEBUG] [Thread-196262] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:21:18.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-15T02:21:18.073 [DEBUG] [Thread-196265] [transport.py] [_log()] starting thread (client mode): 0xa2d6b190
2026-02-15T02:21:18.073 [DEBUG] [Thread-196265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:21:18.087 [DEBUG] [Thread-196265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:21:18.087 [INFO] [Thread-196265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:21:18.095 [DEBUG] [Thread-196265] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:21:18.095 [DEBUG] [Thread-196265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:21:18.095 [DEBUG] [Thread-196265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:21:18.095 [DEBUG] [Thread-196265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:21:18.095 [DEBUG] [Thread-196265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:21:18.095 [DEBUG] [Thread-196265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:21:18.095 [DEBUG] [Thread-196265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:21:18.095 [DEBUG] [Thread-196265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:21:18.095 [DEBUG] [Thread-196265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:21:18.095 [DEBUG] [Thread-196265] [transport.py] [_log()] client lang: <none>
2026-02-15T02:21:18.095 [DEBUG] [Thread-196265] [transport.py] [_log()] server lang: <none>
2026-02-15T02:21:18.095 [DEBUG] [Thread-196265] [transport.py] [_log()] kex follows: False
2026-02-15T02:21:18.095 [DEBUG] [Thread-196265] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:21:18.095 [DEBUG] [Thread-196265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:21:18.096 [DEBUG] [Thread-196265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:21:18.096 [DEBUG] [Thread-196265] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:21:18.096 [DEBUG] [Thread-196265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:21:18.096 [DEBUG] [Thread-196265] [transport.py] [_log()] Compression: none
2026-02-15T02:21:18.096 [DEBUG] [Thread-196265] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:21:18.153 [DEBUG] [Thread-196265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:21:18.154 [DEBUG] [Thread-196265] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:21:18.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:21:18.155 [DEBUG] [Thread-196265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:21:18.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:21:18.211 [DEBUG] [Thread-196265] [transport.py] [_log()] userauth is OK
2026-02-15T02:21:18.212 [DEBUG] [Thread-196265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:21:18.212 [DEBUG] [Thread-196265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:21:18.212 [DEBUG] [Thread-196265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:21:18.212 [DEBUG] [Thread-196265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:21:18.231 [INFO] [Thread-196265] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:21:18.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T02:21:18.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:21:18.987 [DEBUG] [Thread-196265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:21:18.987 [DEBUG] [Thread-196265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:21:19.035 [DEBUG] [Thread-196265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:21:19.035 [DEBUG] [Thread-196265] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:21:19.047 [DEBUG] [Thread-196265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:21:19.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:21:19.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-15T02:21:19.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-15T02:21:19.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:21:19.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:21:19.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:21:19.086 [DEBUG] [Thread-196265] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:21:21.119 [DEBUG] [Thread-196267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:21:36.171 [DEBUG] [Thread-196268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:21:42.897 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:21:42.898 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:21:49.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:21:49.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:21:49.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-15T02:21:51.208 [DEBUG] [Thread-196269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:21:51.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 21, 11), 1.31, 91.41, 0.0, 38.25, 6.87, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:21:51.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:21:11
2026-02-15T02:21:51.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:21:51.888 [DEBUG] [Thread-196270] [transport.py] [_log()] starting thread (client mode): 0xa2d843d0
2026-02-15T02:21:51.889 [DEBUG] [Thread-196270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:21:51.909 [DEBUG] [Thread-196270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:21:51.909 [INFO] [Thread-196270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:21:51.912 [DEBUG] [Thread-196270] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:21:51.913 [DEBUG] [Thread-196270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:21:51.913 [DEBUG] [Thread-196270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:21:51.913 [DEBUG] [Thread-196270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:21:51.913 [DEBUG] [Thread-196270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:21:51.913 [DEBUG] [Thread-196270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:21:51.913 [DEBUG] [Thread-196270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:21:51.913 [DEBUG] [Thread-196270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:21:51.913 [DEBUG] [Thread-196270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:21:51.913 [DEBUG] [Thread-196270] [transport.py] [_log()] client lang: <none>
2026-02-15T02:21:51.913 [DEBUG] [Thread-196270] [transport.py] [_log()] server lang: <none>
2026-02-15T02:21:51.913 [DEBUG] [Thread-196270] [transport.py] [_log()] kex follows: False
2026-02-15T02:21:51.914 [DEBUG] [Thread-196270] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:21:51.914 [DEBUG] [Thread-196270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:21:51.914 [DEBUG] [Thread-196270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:21:51.914 [DEBUG] [Thread-196270] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:21:51.914 [DEBUG] [Thread-196270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:21:51.914 [DEBUG] [Thread-196270] [transport.py] [_log()] Compression: none
2026-02-15T02:21:51.914 [DEBUG] [Thread-196270] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:21:51.933 [DEBUG] [Thread-196270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:21:51.934 [DEBUG] [Thread-196270] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:21:51.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:21:51.935 [DEBUG] [Thread-196270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:21:51.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:21:51.937 [DEBUG] [Thread-196270] [transport.py] [_log()] userauth is OK
2026-02-15T02:21:51.937 [DEBUG] [Thread-196270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:21:51.937 [DEBUG] [Thread-196270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:21:51.937 [DEBUG] [Thread-196270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:21:51.937 [DEBUG] [Thread-196270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:21:51.973 [INFO] [Thread-196270] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:21:51.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:21:52.637 [DEBUG] [Thread-196270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:21:52.637 [DEBUG] [Thread-196270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:21:52.637 [DEBUG] [Thread-196270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:21:52.678 [DEBUG] [Thread-196270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:21:52.679 [DEBUG] [Thread-196270] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:21:52.682 [DEBUG] [Thread-196270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:21:52.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:21:52.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:21:52.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:21:52.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:21:52.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:21:52.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:21:52.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:21:52.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:21:52.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:21:52.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.014691 -999.00   +6.70  29.87     91   +5.40 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 29.9 29.9 141.4 40.2 7.4 -20.6 7.2 -17.9 7.0 -15.7 7.4 -18.3
2026-02-15T02:21:52.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:21:52.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:21:52.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.014691
2026-02-15T02:21:52.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:21:52.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:21:52.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:21:52.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:21:52.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:21:52.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:21:11', tmtdew=1.31, humidity=91.41, cloud=0.0, wind=38.25, temperature=6.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:21:09.302', atlas_cloud=1, atlas_rain=1, zp_data=[1.0812499999999998, 0.7902500000000003, 0.7772500000000004, 0.6674999999999995, 1.8565000000000005, 1.4472500000000013, 1.7279999999999998, 0.6682500000000005, 0.636499999999999, 0.8530000000000006, 0.8312499999999998, 0.8709999999999996, 1.0299999999999994, 0.7257499999999997, 0.5844999999999994, 0.45399999999999885, 0.8042499999999997, 1.0205000000000002, 1.137999999999999, 1.1607499999999993, 0.879999999999999, 0.3862500000000004, 0.2582500000000003, 0.2787500000000005, 0.7359999999999989, 0.6065000000000005, 0.48475, 0.48850000000000016, 0.835, 0.2400000000000002, 0.3025000000000011, 0.3500000000000014, 1.068249999999999], zp_timestamp='2026-02-15T00:19:00')
2026-02-15T02:21:52.712 [DEBUG] [Thread-196270] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:21:52.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-15T02:21:52.809 [DEBUG] [Thread-196273] [transport.py] [_log()] starting thread (client mode): 0xa2d6e920
2026-02-15T02:21:52.809 [DEBUG] [Thread-196273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:21:52.823 [DEBUG] [Thread-196273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:21:52.823 [INFO] [Thread-196273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:21:52.831 [DEBUG] [Thread-196273] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:21:52.832 [DEBUG] [Thread-196273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:21:52.832 [DEBUG] [Thread-196273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:21:52.832 [DEBUG] [Thread-196273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:21:52.832 [DEBUG] [Thread-196273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:21:52.832 [DEBUG] [Thread-196273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:21:52.832 [DEBUG] [Thread-196273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:21:52.832 [DEBUG] [Thread-196273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:21:52.832 [DEBUG] [Thread-196273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:21:52.832 [DEBUG] [Thread-196273] [transport.py] [_log()] client lang: <none>
2026-02-15T02:21:52.832 [DEBUG] [Thread-196273] [transport.py] [_log()] server lang: <none>
2026-02-15T02:21:52.832 [DEBUG] [Thread-196273] [transport.py] [_log()] kex follows: False
2026-02-15T02:21:52.832 [DEBUG] [Thread-196273] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:21:52.832 [DEBUG] [Thread-196273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:21:52.832 [DEBUG] [Thread-196273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:21:52.832 [DEBUG] [Thread-196273] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:21:52.832 [DEBUG] [Thread-196273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:21:52.832 [DEBUG] [Thread-196273] [transport.py] [_log()] Compression: none
2026-02-15T02:21:52.832 [DEBUG] [Thread-196273] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:21:52.894 [DEBUG] [Thread-196273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:21:52.894 [DEBUG] [Thread-196273] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:21:52.895 [DEBUG] [Thread-196273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:21:52.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:21:52.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:21:52.950 [DEBUG] [Thread-196273] [transport.py] [_log()] userauth is OK
2026-02-15T02:21:52.951 [DEBUG] [Thread-196273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:21:52.951 [DEBUG] [Thread-196273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:21:52.951 [DEBUG] [Thread-196273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:21:52.951 [DEBUG] [Thread-196273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:21:52.973 [INFO] [Thread-196273] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:21:52.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T02:21:52.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:21:53.747 [DEBUG] [Thread-196273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:21:53.747 [DEBUG] [Thread-196273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:21:53.795 [DEBUG] [Thread-196273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:21:53.795 [DEBUG] [Thread-196273] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:21:53.804 [DEBUG] [Thread-196273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:21:53.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:21:53.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-15T02:21:53.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-15T02:21:53.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:21:53.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:21:53.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:21:53.840 [DEBUG] [Thread-196273] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:22:06.243 [DEBUG] [Thread-196275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:22:16.411 [DEBUG] [Thread-196276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:22:21.300 [DEBUG] [Thread-196277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:22:23.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:22:23.833 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:22:23.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-15T02:22:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 21, 46), 1.26, 91.41, 0.0, 36.91, 6.83, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:22:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:21:46
2026-02-15T02:22:26.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:22:26.779 [DEBUG] [Thread-196278] [transport.py] [_log()] starting thread (client mode): 0xa2d86770
2026-02-15T02:22:26.779 [DEBUG] [Thread-196278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:22:26.799 [DEBUG] [Thread-196278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:22:26.799 [INFO] [Thread-196278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:22:26.802 [DEBUG] [Thread-196278] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:22:26.802 [DEBUG] [Thread-196278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:22:26.802 [DEBUG] [Thread-196278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:22:26.803 [DEBUG] [Thread-196278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:22:26.803 [DEBUG] [Thread-196278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:22:26.803 [DEBUG] [Thread-196278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:22:26.803 [DEBUG] [Thread-196278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:22:26.803 [DEBUG] [Thread-196278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:22:26.803 [DEBUG] [Thread-196278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:22:26.803 [DEBUG] [Thread-196278] [transport.py] [_log()] client lang: <none>
2026-02-15T02:22:26.803 [DEBUG] [Thread-196278] [transport.py] [_log()] server lang: <none>
2026-02-15T02:22:26.803 [DEBUG] [Thread-196278] [transport.py] [_log()] kex follows: False
2026-02-15T02:22:26.803 [DEBUG] [Thread-196278] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:22:26.803 [DEBUG] [Thread-196278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:22:26.803 [DEBUG] [Thread-196278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:22:26.803 [DEBUG] [Thread-196278] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:22:26.803 [DEBUG] [Thread-196278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:22:26.803 [DEBUG] [Thread-196278] [transport.py] [_log()] Compression: none
2026-02-15T02:22:26.803 [DEBUG] [Thread-196278] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:22:26.819 [DEBUG] [Thread-196278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:22:26.820 [DEBUG] [Thread-196278] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:22:26.820 [DEBUG] [Thread-196278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:22:26.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:22:26.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:22:26.822 [DEBUG] [Thread-196278] [transport.py] [_log()] userauth is OK
2026-02-15T02:22:26.823 [DEBUG] [Thread-196278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:22:26.823 [DEBUG] [Thread-196278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:22:26.823 [DEBUG] [Thread-196278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:22:26.823 [DEBUG] [Thread-196278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:22:26.848 [INFO] [Thread-196278] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:22:26.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:22:27.471 [DEBUG] [Thread-196278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:22:27.471 [DEBUG] [Thread-196278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:22:27.472 [DEBUG] [Thread-196278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:22:27.512 [DEBUG] [Thread-196278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:22:27.512 [DEBUG] [Thread-196278] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:22:27.515 [DEBUG] [Thread-196278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:22:27.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:22:27.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:22:27.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:22:27.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:22:27.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:22:27.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:22:27.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:22:27.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:22:27.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:22:27.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.015038 -999.00   +6.70  32.41     91   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 32.4 32.4 139.0 40.1 7.4 -12.6 7.2 -13.0 7.0 -14.9 7.3 -14.6
2026-02-15T02:22:27.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:22:27.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:22:27.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.015038
2026-02-15T02:22:27.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:22:27.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:22:27.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:22:27.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:22:27.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:22:27.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:21:46', tmtdew=1.26, humidity=91.41, cloud=0.0, wind=36.91, temperature=6.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:21:39.283', atlas_cloud=1, atlas_rain=1, zp_data=[1.0812499999999998, 0.7902500000000003, 0.7772500000000004, 0.6674999999999995, 1.8565000000000005, 1.4472500000000013, 1.7279999999999998, 0.6682500000000005, 0.636499999999999, 0.8530000000000006, 0.8312499999999998, 0.8709999999999996, 1.0299999999999994, 0.7257499999999997, 0.5844999999999994, 0.45399999999999885, 0.8042499999999997, 1.0205000000000002, 1.137999999999999, 1.1607499999999993, 0.879999999999999, 0.3862500000000004, 0.2582500000000003, 0.2787500000000005, 0.7359999999999989, 0.6065000000000005, 0.48475, 0.48850000000000016, 0.835, 0.2400000000000002, 0.3025000000000011, 0.3500000000000014, 1.068249999999999], zp_timestamp='2026-02-15T00:19:00')
2026-02-15T02:22:27.533 [DEBUG] [Thread-196278] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:22:27.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-15T02:22:27.617 [DEBUG] [Thread-196281] [transport.py] [_log()] starting thread (client mode): 0xa2d86c20
2026-02-15T02:22:27.617 [DEBUG] [Thread-196281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:22:27.635 [DEBUG] [Thread-196281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:22:27.636 [INFO] [Thread-196281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:22:27.643 [DEBUG] [Thread-196281] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:22:27.644 [DEBUG] [Thread-196281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:22:27.644 [DEBUG] [Thread-196281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:22:27.644 [DEBUG] [Thread-196281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:22:27.644 [DEBUG] [Thread-196281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:22:27.644 [DEBUG] [Thread-196281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:22:27.644 [DEBUG] [Thread-196281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:22:27.644 [DEBUG] [Thread-196281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:22:27.644 [DEBUG] [Thread-196281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:22:27.644 [DEBUG] [Thread-196281] [transport.py] [_log()] client lang: <none>
2026-02-15T02:22:27.644 [DEBUG] [Thread-196281] [transport.py] [_log()] server lang: <none>
2026-02-15T02:22:27.644 [DEBUG] [Thread-196281] [transport.py] [_log()] kex follows: False
2026-02-15T02:22:27.644 [DEBUG] [Thread-196281] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:22:27.644 [DEBUG] [Thread-196281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:22:27.644 [DEBUG] [Thread-196281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:22:27.645 [DEBUG] [Thread-196281] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:22:27.645 [DEBUG] [Thread-196281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:22:27.645 [DEBUG] [Thread-196281] [transport.py] [_log()] Compression: none
2026-02-15T02:22:27.645 [DEBUG] [Thread-196281] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:22:27.702 [DEBUG] [Thread-196281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:22:27.702 [DEBUG] [Thread-196281] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:22:27.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:22:27.704 [DEBUG] [Thread-196281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:22:27.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:22:27.758 [DEBUG] [Thread-196281] [transport.py] [_log()] userauth is OK
2026-02-15T02:22:27.758 [DEBUG] [Thread-196281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:22:27.758 [DEBUG] [Thread-196281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:22:27.758 [DEBUG] [Thread-196281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:22:27.758 [DEBUG] [Thread-196281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:22:27.777 [INFO] [Thread-196281] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:22:27.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-15T02:22:27.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:22:28.572 [DEBUG] [Thread-196281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:22:28.573 [DEBUG] [Thread-196281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:22:28.621 [DEBUG] [Thread-196281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:22:28.621 [DEBUG] [Thread-196281] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:22:28.630 [DEBUG] [Thread-196281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:22:28.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:22:28.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-15T02:22:28.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:22:28.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:22:28.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:22:28.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:22:28.667 [DEBUG] [Thread-196281] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:22:36.335 [DEBUG] [Thread-196283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:22:43.098 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:22:43.100 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:22:51.382 [DEBUG] [Thread-196284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:22:58.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:22:58.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:22:58.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-15T02:23:00.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 22, 22), 1.25, 91.43, 0.0, 38.38, 6.85, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:23:00.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:22:22
2026-02-15T02:23:01.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:23:01.276 [DEBUG] [Thread-196285] [transport.py] [_log()] starting thread (client mode): 0xa2d84bb0
2026-02-15T02:23:01.277 [DEBUG] [Thread-196285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:23:01.298 [DEBUG] [Thread-196285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:23:01.298 [INFO] [Thread-196285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:23:01.301 [DEBUG] [Thread-196285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:23:01.302 [DEBUG] [Thread-196285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:23:01.302 [DEBUG] [Thread-196285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:23:01.302 [DEBUG] [Thread-196285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:23:01.302 [DEBUG] [Thread-196285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:23:01.302 [DEBUG] [Thread-196285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:23:01.302 [DEBUG] [Thread-196285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:23:01.302 [DEBUG] [Thread-196285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:23:01.302 [DEBUG] [Thread-196285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:23:01.302 [DEBUG] [Thread-196285] [transport.py] [_log()] client lang: <none>
2026-02-15T02:23:01.302 [DEBUG] [Thread-196285] [transport.py] [_log()] server lang: <none>
2026-02-15T02:23:01.302 [DEBUG] [Thread-196285] [transport.py] [_log()] kex follows: False
2026-02-15T02:23:01.302 [DEBUG] [Thread-196285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:23:01.302 [DEBUG] [Thread-196285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:23:01.302 [DEBUG] [Thread-196285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:23:01.302 [DEBUG] [Thread-196285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:23:01.302 [DEBUG] [Thread-196285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:23:01.302 [DEBUG] [Thread-196285] [transport.py] [_log()] Compression: none
2026-02-15T02:23:01.302 [DEBUG] [Thread-196285] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:23:01.320 [DEBUG] [Thread-196285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:23:01.321 [DEBUG] [Thread-196285] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:23:01.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:23:01.322 [DEBUG] [Thread-196285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:23:01.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:23:01.324 [DEBUG] [Thread-196285] [transport.py] [_log()] userauth is OK
2026-02-15T02:23:01.324 [DEBUG] [Thread-196285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:23:01.324 [DEBUG] [Thread-196285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:23:01.324 [DEBUG] [Thread-196285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:23:01.324 [DEBUG] [Thread-196285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:23:01.348 [INFO] [Thread-196285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:23:01.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:23:02.146 [DEBUG] [Thread-196285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:23:02.146 [DEBUG] [Thread-196285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:23:02.146 [DEBUG] [Thread-196285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:23:02.187 [DEBUG] [Thread-196285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:23:02.187 [DEBUG] [Thread-196285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:23:02.191 [DEBUG] [Thread-196285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:23:02.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:23:02.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:23:02.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:23:02.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:23:02.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:23:02.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:23:02.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:23:02.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:23:02.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:23:02.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.015732 -999.00   +6.70  31.46     91   +5.40 1 2 2 3 1     0    0 -999.00 0.00 zN.SW 31.5 31.5 140.6 41.1 7.4 -21.0 7.2 -19.7 7.0 -18.9 7.4 -20.3
2026-02-15T02:23:02.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:23:02.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:23:02.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.015732
2026-02-15T02:23:02.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:23:02.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:23:02.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:23:02.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:23:02.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:23:02.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:22:22', tmtdew=1.25, humidity=91.43, cloud=0.0, wind=38.38, temperature=6.85, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:22:39.245', atlas_cloud=2, atlas_rain=1, zp_data=[1.0812499999999998, 0.7902500000000003, 0.7772500000000004, 0.6674999999999995, 1.8565000000000005, 1.4472500000000013, 1.7279999999999998, 0.6682500000000005, 0.636499999999999, 0.8530000000000006, 0.8312499999999998, 0.8709999999999996, 1.0299999999999994, 0.7257499999999997, 0.5844999999999994, 0.45399999999999885, 0.8042499999999997, 1.0205000000000002, 1.137999999999999, 1.1607499999999993, 0.879999999999999, 0.3862500000000004, 0.2582500000000003, 0.2787500000000005, 0.7359999999999989, 0.6065000000000005, 0.48475, 0.48850000000000016, 0.835, 0.2400000000000002, 0.3025000000000011, 0.3500000000000014, 1.068249999999999], zp_timestamp='2026-02-15T00:19:00')
2026-02-15T02:23:02.226 [DEBUG] [Thread-196285] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:23:02.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-15T02:23:06.418 [DEBUG] [Thread-196288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:23:16.471 [DEBUG] [Thread-196289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:23:21.468 [DEBUG] [Thread-196290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:23:36.504 [DEBUG] [Thread-196291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:23:43.316 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:23:43.317 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:23:51.542 [DEBUG] [Thread-196292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:24:06.581 [DEBUG] [Thread-196293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:24:16.530 [DEBUG] [Thread-196294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:24:21.615 [DEBUG] [Thread-196295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:24:36.649 [DEBUG] [Thread-196296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:24:43.524 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:24:43.526 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:24:51.685 [DEBUG] [Thread-196297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:25:06.721 [DEBUG] [Thread-196298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:25:16.599 [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-15T02:25:16.606 [DEBUG] [Thread-196299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:25:21.763 [DEBUG] [Thread-196300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:25:36.799 [DEBUG] [Thread-196301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:25:43.728 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:25:43.729 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:25:46.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:25:46.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:25:46.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-15T02:25:48.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 25, 19), 1.18, 92.06, 0.0, 35.8, 6.8, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:25:48.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:25:19
2026-02-15T02:25:49.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:25:49.326 [DEBUG] [Thread-196302] [transport.py] [_log()] starting thread (client mode): 0xa2d86770
2026-02-15T02:25:49.326 [DEBUG] [Thread-196302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:25:49.347 [DEBUG] [Thread-196302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:25:49.347 [INFO] [Thread-196302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:25:49.351 [DEBUG] [Thread-196302] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:25:49.351 [DEBUG] [Thread-196302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:25:49.351 [DEBUG] [Thread-196302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:25:49.351 [DEBUG] [Thread-196302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:25:49.351 [DEBUG] [Thread-196302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:25:49.351 [DEBUG] [Thread-196302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:25:49.351 [DEBUG] [Thread-196302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:25:49.351 [DEBUG] [Thread-196302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:25:49.351 [DEBUG] [Thread-196302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:25:49.351 [DEBUG] [Thread-196302] [transport.py] [_log()] client lang: <none>
2026-02-15T02:25:49.351 [DEBUG] [Thread-196302] [transport.py] [_log()] server lang: <none>
2026-02-15T02:25:49.351 [DEBUG] [Thread-196302] [transport.py] [_log()] kex follows: False
2026-02-15T02:25:49.351 [DEBUG] [Thread-196302] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:25:49.351 [DEBUG] [Thread-196302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:25:49.351 [DEBUG] [Thread-196302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:25:49.351 [DEBUG] [Thread-196302] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:25:49.351 [DEBUG] [Thread-196302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:25:49.351 [DEBUG] [Thread-196302] [transport.py] [_log()] Compression: none
2026-02-15T02:25:49.351 [DEBUG] [Thread-196302] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:25:49.369 [DEBUG] [Thread-196302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:25:49.369 [DEBUG] [Thread-196302] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:25:49.370 [DEBUG] [Thread-196302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:25:49.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:25:49.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:25:49.372 [DEBUG] [Thread-196302] [transport.py] [_log()] userauth is OK
2026-02-15T02:25:49.372 [DEBUG] [Thread-196302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:25:49.372 [DEBUG] [Thread-196302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:25:49.372 [DEBUG] [Thread-196302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:25:49.372 [DEBUG] [Thread-196302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:25:49.397 [INFO] [Thread-196302] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:25:49.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:25:50.019 [DEBUG] [Thread-196302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:25:50.019 [DEBUG] [Thread-196302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:25:50.020 [DEBUG] [Thread-196302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:25:50.060 [DEBUG] [Thread-196302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:25:50.061 [DEBUG] [Thread-196302] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:25:50.064 [DEBUG] [Thread-196302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:25:50.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:25:50.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:25:50.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:25:50.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:25:50.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:25:50.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:25:50.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:25:50.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:25:50.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:25:50.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.017468 -999.00   +6.70  27.81     91   +5.40 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 27.8 27.8 148.2 42.3 7.3 -21.2 7.2 -22.2 6.9 -22.1 7.3 -23.0
2026-02-15T02:25:50.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:25:50.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:25:50.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.017468
2026-02-15T02:25:50.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:25:50.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:25:50.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:25:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:25:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:25:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:25:19', tmtdew=1.18, humidity=92.06, cloud=0.0, wind=35.8, temperature=6.8, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:25:09.235', atlas_cloud=1, atlas_rain=1, zp_data=[1.0812499999999998, 0.7902500000000003, 0.7772500000000004, 0.6674999999999995, 1.8565000000000005, 1.4472500000000013, 1.7279999999999998, 0.6682500000000005, 0.636499999999999, 0.8530000000000006, 0.8312499999999998, 0.8709999999999996, 1.0299999999999994, 0.7257499999999997, 0.5844999999999994, 0.45399999999999885, 0.8042499999999997, 1.0205000000000002, 1.137999999999999, 1.1607499999999993, 0.879999999999999, 0.3862500000000004, 0.2582500000000003, 0.2787500000000005, 0.7359999999999989, 0.6065000000000005, 0.48475, 0.48850000000000016, 0.835, 0.2400000000000002, 0.3025000000000011, 0.3500000000000014, 1.068249999999999], zp_timestamp='2026-02-15T00:23:00')
2026-02-15T02:25:50.093 [DEBUG] [Thread-196302] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:25:50.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-15T02:25:50.205 [DEBUG] [Thread-196305] [transport.py] [_log()] starting thread (client mode): 0xa2d84280
2026-02-15T02:25:50.205 [DEBUG] [Thread-196305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:25:50.220 [DEBUG] [Thread-196305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:25:50.221 [INFO] [Thread-196305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:25:50.228 [DEBUG] [Thread-196305] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:25:50.228 [DEBUG] [Thread-196305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:25:50.229 [DEBUG] [Thread-196305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:25:50.229 [DEBUG] [Thread-196305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:25:50.229 [DEBUG] [Thread-196305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:25:50.229 [DEBUG] [Thread-196305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:25:50.229 [DEBUG] [Thread-196305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:25:50.229 [DEBUG] [Thread-196305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:25:50.229 [DEBUG] [Thread-196305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:25:50.229 [DEBUG] [Thread-196305] [transport.py] [_log()] client lang: <none>
2026-02-15T02:25:50.229 [DEBUG] [Thread-196305] [transport.py] [_log()] server lang: <none>
2026-02-15T02:25:50.229 [DEBUG] [Thread-196305] [transport.py] [_log()] kex follows: False
2026-02-15T02:25:50.229 [DEBUG] [Thread-196305] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:25:50.229 [DEBUG] [Thread-196305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:25:50.229 [DEBUG] [Thread-196305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:25:50.229 [DEBUG] [Thread-196305] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:25:50.230 [DEBUG] [Thread-196305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:25:50.230 [DEBUG] [Thread-196305] [transport.py] [_log()] Compression: none
2026-02-15T02:25:50.230 [DEBUG] [Thread-196305] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:25:50.286 [DEBUG] [Thread-196305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:25:50.287 [DEBUG] [Thread-196305] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:25:50.288 [DEBUG] [Thread-196305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:25:50.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:25:50.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:25:50.347 [DEBUG] [Thread-196305] [transport.py] [_log()] userauth is OK
2026-02-15T02:25:50.347 [DEBUG] [Thread-196305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:25:50.347 [DEBUG] [Thread-196305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:25:50.347 [DEBUG] [Thread-196305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:25:50.348 [DEBUG] [Thread-196305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:25:50.367 [INFO] [Thread-196305] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:25:50.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-15T02:25:50.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:25:51.149 [DEBUG] [Thread-196305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:25:51.149 [DEBUG] [Thread-196305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:25:51.200 [DEBUG] [Thread-196305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:25:51.200 [DEBUG] [Thread-196305] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:25:51.209 [DEBUG] [Thread-196305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:25:51.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:25:51.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-15T02:25:51.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-15T02:25:51.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:25:51.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:25:51.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:25:51.247 [DEBUG] [Thread-196305] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:25:51.839 [DEBUG] [Thread-196307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:26:06.888 [DEBUG] [Thread-196308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:26:16.664 [DEBUG] [Thread-196309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:26:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:26:21.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:26:21.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-15T02:26:21.921 [DEBUG] [Thread-196310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:26:23.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 25, 54), 1.18, 92.08, 0.0, 36.96, 6.83, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:26:23.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:25:54
2026-02-15T02:26:23.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:26:23.628 [DEBUG] [Thread-196311] [transport.py] [_log()] starting thread (client mode): 0xa2d85780
2026-02-15T02:26:23.628 [DEBUG] [Thread-196311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:26:23.648 [DEBUG] [Thread-196311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:26:23.648 [INFO] [Thread-196311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:26:23.651 [DEBUG] [Thread-196311] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:26:23.651 [DEBUG] [Thread-196311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:26:23.651 [DEBUG] [Thread-196311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:26:23.651 [DEBUG] [Thread-196311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:26:23.651 [DEBUG] [Thread-196311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:26:23.651 [DEBUG] [Thread-196311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:26:23.651 [DEBUG] [Thread-196311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:26:23.651 [DEBUG] [Thread-196311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:26:23.651 [DEBUG] [Thread-196311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:26:23.651 [DEBUG] [Thread-196311] [transport.py] [_log()] client lang: <none>
2026-02-15T02:26:23.651 [DEBUG] [Thread-196311] [transport.py] [_log()] server lang: <none>
2026-02-15T02:26:23.651 [DEBUG] [Thread-196311] [transport.py] [_log()] kex follows: False
2026-02-15T02:26:23.651 [DEBUG] [Thread-196311] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:26:23.651 [DEBUG] [Thread-196311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:26:23.652 [DEBUG] [Thread-196311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:26:23.652 [DEBUG] [Thread-196311] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:26:23.652 [DEBUG] [Thread-196311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:26:23.652 [DEBUG] [Thread-196311] [transport.py] [_log()] Compression: none
2026-02-15T02:26:23.652 [DEBUG] [Thread-196311] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:26:23.670 [DEBUG] [Thread-196311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:26:23.670 [DEBUG] [Thread-196311] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:26:23.670 [DEBUG] [Thread-196311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:26:23.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:26:23.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:26:23.672 [DEBUG] [Thread-196311] [transport.py] [_log()] userauth is OK
2026-02-15T02:26:23.672 [DEBUG] [Thread-196311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:26:23.672 [DEBUG] [Thread-196311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:26:23.672 [DEBUG] [Thread-196311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:26:23.672 [DEBUG] [Thread-196311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:26:23.696 [INFO] [Thread-196311] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:26:23.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:26:24.348 [DEBUG] [Thread-196311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:26:24.348 [DEBUG] [Thread-196311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:26:24.349 [DEBUG] [Thread-196311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:26:24.389 [DEBUG] [Thread-196311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:26:24.389 [DEBUG] [Thread-196311] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:26:24.393 [DEBUG] [Thread-196311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:26:24.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:26:24.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:26:24.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:26:24.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:26:24.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:26:24.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:26:24.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:26:24.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:26:24.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:26:24.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.018163 -999.00   +6.70  29.69     91   +5.40 1 2 1 3 1     0    0 -999.00 0.00 ZNeSW 29.7 29.7 145.8 38.5 7.3 -22.6 7.1 -20.7 7.0 -21.0 7.3 -22.3
2026-02-15T02:26:24.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:26:24.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:26:24.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.018163
2026-02-15T02:26:24.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:26:24.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:26:24.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:26:24.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:26:24.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:26:24.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:25:54', tmtdew=1.18, humidity=92.08, cloud=0.0, wind=36.96, temperature=6.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:26:09.283', atlas_cloud=2, atlas_rain=1, zp_data=[1.0812499999999998, 0.7902500000000003, 0.7772500000000004, 0.6674999999999995, 1.8565000000000005, 1.4472500000000013, 1.7279999999999998, 0.6682500000000005, 0.636499999999999, 0.8530000000000006, 0.8312499999999998, 0.8709999999999996, 1.0299999999999994, 0.7257499999999997, 0.5844999999999994, 0.45399999999999885, 0.8042499999999997, 1.0205000000000002, 1.137999999999999, 1.1607499999999993, 0.879999999999999, 0.3862500000000004, 0.2582500000000003, 0.2787500000000005, 0.7359999999999989, 0.6065000000000005, 0.48475, 0.48850000000000016, 0.835, 0.2400000000000002, 0.3025000000000011, 0.3500000000000014, 1.068249999999999], zp_timestamp='2026-02-15T00:23:00')
2026-02-15T02:26:24.412 [DEBUG] [Thread-196311] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:26:24.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T02:26:24.512 [DEBUG] [Thread-196314] [transport.py] [_log()] starting thread (client mode): 0xa57d6b60
2026-02-15T02:26:24.512 [DEBUG] [Thread-196314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:26:24.527 [DEBUG] [Thread-196314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:26:24.527 [INFO] [Thread-196314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:26:24.537 [DEBUG] [Thread-196314] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:26:24.537 [DEBUG] [Thread-196314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:26:24.537 [DEBUG] [Thread-196314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:26:24.537 [DEBUG] [Thread-196314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:26:24.537 [DEBUG] [Thread-196314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:26:24.537 [DEBUG] [Thread-196314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:26:24.537 [DEBUG] [Thread-196314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:26:24.537 [DEBUG] [Thread-196314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:26:24.537 [DEBUG] [Thread-196314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:26:24.537 [DEBUG] [Thread-196314] [transport.py] [_log()] client lang: <none>
2026-02-15T02:26:24.537 [DEBUG] [Thread-196314] [transport.py] [_log()] server lang: <none>
2026-02-15T02:26:24.538 [DEBUG] [Thread-196314] [transport.py] [_log()] kex follows: False
2026-02-15T02:26:24.538 [DEBUG] [Thread-196314] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:26:24.538 [DEBUG] [Thread-196314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:26:24.538 [DEBUG] [Thread-196314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:26:24.538 [DEBUG] [Thread-196314] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:26:24.538 [DEBUG] [Thread-196314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:26:24.538 [DEBUG] [Thread-196314] [transport.py] [_log()] Compression: none
2026-02-15T02:26:24.538 [DEBUG] [Thread-196314] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:26:24.593 [DEBUG] [Thread-196314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:26:24.594 [DEBUG] [Thread-196314] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:26:24.594 [DEBUG] [Thread-196314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:26:24.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:26:24.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:26:24.649 [DEBUG] [Thread-196314] [transport.py] [_log()] userauth is OK
2026-02-15T02:26:24.650 [DEBUG] [Thread-196314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:26:24.650 [DEBUG] [Thread-196314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:26:24.650 [DEBUG] [Thread-196314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:26:24.650 [DEBUG] [Thread-196314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:26:24.669 [INFO] [Thread-196314] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:26:24.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-15T02:26:24.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:26:25.477 [DEBUG] [Thread-196314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:26:25.477 [DEBUG] [Thread-196314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:26:25.525 [DEBUG] [Thread-196314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:26:25.525 [DEBUG] [Thread-196314] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:26:25.535 [DEBUG] [Thread-196314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:26:25.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:26:25.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-15T02:26:25.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-15T02:26:25.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:26:25.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:26:25.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:26:25.573 [DEBUG] [Thread-196314] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:26:36.958 [DEBUG] [Thread-196316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:26:43.934 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:26:43.935 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:26:52.010 [DEBUG] [Thread-196317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:26:55.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:26:55.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:26:55.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-15T02:26:57.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 26, 30), 1.17, 92.13, 0.0, 37.0, 6.83, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:26:57.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:26:30
2026-02-15T02:26:57.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:26:58.147 [DEBUG] [Thread-196318] [transport.py] [_log()] starting thread (client mode): 0xa2d847f0
2026-02-15T02:26:58.147 [DEBUG] [Thread-196318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:26:58.164 [DEBUG] [Thread-196318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:26:58.165 [INFO] [Thread-196318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:26:58.168 [DEBUG] [Thread-196318] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:26:58.168 [DEBUG] [Thread-196318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:26:58.168 [DEBUG] [Thread-196318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:26:58.168 [DEBUG] [Thread-196318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:26:58.168 [DEBUG] [Thread-196318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:26:58.168 [DEBUG] [Thread-196318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:26:58.168 [DEBUG] [Thread-196318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:26:58.168 [DEBUG] [Thread-196318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:26:58.168 [DEBUG] [Thread-196318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:26:58.168 [DEBUG] [Thread-196318] [transport.py] [_log()] client lang: <none>
2026-02-15T02:26:58.168 [DEBUG] [Thread-196318] [transport.py] [_log()] server lang: <none>
2026-02-15T02:26:58.168 [DEBUG] [Thread-196318] [transport.py] [_log()] kex follows: False
2026-02-15T02:26:58.168 [DEBUG] [Thread-196318] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:26:58.168 [DEBUG] [Thread-196318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:26:58.168 [DEBUG] [Thread-196318] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:26:58.168 [DEBUG] [Thread-196318] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:26:58.168 [DEBUG] [Thread-196318] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:26:58.169 [DEBUG] [Thread-196318] [transport.py] [_log()] Compression: none
2026-02-15T02:26:58.169 [DEBUG] [Thread-196318] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:26:58.187 [DEBUG] [Thread-196318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:26:58.188 [DEBUG] [Thread-196318] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:26:58.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:26:58.189 [DEBUG] [Thread-196318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:26:58.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:26:58.192 [DEBUG] [Thread-196318] [transport.py] [_log()] userauth is OK
2026-02-15T02:26:58.192 [DEBUG] [Thread-196318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:26:58.192 [DEBUG] [Thread-196318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:26:58.193 [DEBUG] [Thread-196318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:26:58.193 [DEBUG] [Thread-196318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:26:58.208 [INFO] [Thread-196318] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:26:58.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:26:58.847 [DEBUG] [Thread-196318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:26:58.847 [DEBUG] [Thread-196318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:26:58.848 [DEBUG] [Thread-196318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:26:58.888 [DEBUG] [Thread-196318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:26:58.889 [DEBUG] [Thread-196318] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:26:58.892 [DEBUG] [Thread-196318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:26:58.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:26:58.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:26:58.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:26:58.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:26:58.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:26:58.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:26:58.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:26:58.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:26:58.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:26:58.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.018510 -999.00   +6.70  27.68     91   +5.40 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 27.7 27.7 140.2 38.1 7.3 -24.0 7.1 -23.2 6.9 -22.1 7.3 -23.4
2026-02-15T02:26:58.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:26:58.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:26:58.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.018510
2026-02-15T02:26:58.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:26:58.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:26:58.920 [DEBUG] [Thread-196318] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:26:58.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:26:58.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:26:58.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:26:58.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:26:30', tmtdew=1.17, humidity=92.13, cloud=0.0, wind=37.0, temperature=6.83, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:26:39.264', atlas_cloud=1, atlas_rain=1, zp_data=[1.0812499999999998, 0.7902500000000003, 0.7772500000000004, 0.6674999999999995, 1.8565000000000005, 1.4472500000000013, 1.7279999999999998, 0.6682500000000005, 0.636499999999999, 0.8530000000000006, 0.8312499999999998, 0.8709999999999996, 1.0299999999999994, 0.7257499999999997, 0.5844999999999994, 0.45399999999999885, 0.8042499999999997, 1.0205000000000002, 1.137999999999999, 1.1607499999999993, 0.879999999999999, 0.3862500000000004, 0.2582500000000003, 0.2787500000000005, 0.7359999999999989, 0.6065000000000005, 0.48475, 0.48850000000000016, 0.835, 0.2400000000000002, 0.3025000000000011, 0.3500000000000014, 1.068249999999999], zp_timestamp='2026-02-15T00:23:00')
2026-02-15T02:26:59.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-15T02:26:59.015 [DEBUG] [Thread-196321] [transport.py] [_log()] starting thread (client mode): 0xa2d858a0
2026-02-15T02:26:59.015 [DEBUG] [Thread-196321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:26:59.030 [DEBUG] [Thread-196321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:26:59.030 [INFO] [Thread-196321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:26:59.038 [DEBUG] [Thread-196321] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:26:59.038 [DEBUG] [Thread-196321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:26:59.038 [DEBUG] [Thread-196321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:26:59.038 [DEBUG] [Thread-196321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:26:59.038 [DEBUG] [Thread-196321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:26:59.038 [DEBUG] [Thread-196321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:26:59.038 [DEBUG] [Thread-196321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:26:59.038 [DEBUG] [Thread-196321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:26:59.039 [DEBUG] [Thread-196321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:26:59.039 [DEBUG] [Thread-196321] [transport.py] [_log()] client lang: <none>
2026-02-15T02:26:59.039 [DEBUG] [Thread-196321] [transport.py] [_log()] server lang: <none>
2026-02-15T02:26:59.039 [DEBUG] [Thread-196321] [transport.py] [_log()] kex follows: False
2026-02-15T02:26:59.039 [DEBUG] [Thread-196321] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:26:59.039 [DEBUG] [Thread-196321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:26:59.039 [DEBUG] [Thread-196321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:26:59.039 [DEBUG] [Thread-196321] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:26:59.039 [DEBUG] [Thread-196321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:26:59.039 [DEBUG] [Thread-196321] [transport.py] [_log()] Compression: none
2026-02-15T02:26:59.039 [DEBUG] [Thread-196321] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:26:59.097 [DEBUG] [Thread-196321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:26:59.098 [DEBUG] [Thread-196321] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:26:59.098 [DEBUG] [Thread-196321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:26:59.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:26:59.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:26:59.153 [DEBUG] [Thread-196321] [transport.py] [_log()] userauth is OK
2026-02-15T02:26:59.153 [DEBUG] [Thread-196321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:26:59.154 [DEBUG] [Thread-196321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:26:59.154 [DEBUG] [Thread-196321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:26:59.154 [DEBUG] [Thread-196321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:26:59.172 [INFO] [Thread-196321] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:26:59.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-15T02:26:59.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:26:59.983 [DEBUG] [Thread-196321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:26:59.983 [DEBUG] [Thread-196321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:27:00.031 [DEBUG] [Thread-196321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:27:00.032 [DEBUG] [Thread-196321] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:27:00.041 [DEBUG] [Thread-196321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:27:00.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:27:00.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:27:00.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:27:00.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:27:00.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:27:00.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:27:00.076 [DEBUG] [Thread-196321] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:27:07.051 [DEBUG] [Thread-196323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:27:16.721 [DEBUG] [Thread-196324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:27:22.106 [DEBUG] [Thread-196325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:27:30.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:27:30.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:27:30.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-15T02:27:32.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 27, 5), 1.17, 92.11, 0.0, 36.15, 6.8, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:27:32.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:27:05
2026-02-15T02:27:32.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:27:32.584 [DEBUG] [Thread-196326] [transport.py] [_log()] starting thread (client mode): 0xa2d84d60
2026-02-15T02:27:32.585 [DEBUG] [Thread-196326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:27:32.607 [DEBUG] [Thread-196326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:27:32.607 [INFO] [Thread-196326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:27:32.610 [DEBUG] [Thread-196326] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:27:32.610 [DEBUG] [Thread-196326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:27:32.610 [DEBUG] [Thread-196326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:27:32.610 [DEBUG] [Thread-196326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:27:32.610 [DEBUG] [Thread-196326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:27:32.610 [DEBUG] [Thread-196326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:27:32.610 [DEBUG] [Thread-196326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:27:32.610 [DEBUG] [Thread-196326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:27:32.610 [DEBUG] [Thread-196326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:27:32.610 [DEBUG] [Thread-196326] [transport.py] [_log()] client lang: <none>
2026-02-15T02:27:32.610 [DEBUG] [Thread-196326] [transport.py] [_log()] server lang: <none>
2026-02-15T02:27:32.610 [DEBUG] [Thread-196326] [transport.py] [_log()] kex follows: False
2026-02-15T02:27:32.610 [DEBUG] [Thread-196326] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:27:32.610 [DEBUG] [Thread-196326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:27:32.611 [DEBUG] [Thread-196326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:27:32.611 [DEBUG] [Thread-196326] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:27:32.611 [DEBUG] [Thread-196326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:27:32.611 [DEBUG] [Thread-196326] [transport.py] [_log()] Compression: none
2026-02-15T02:27:32.611 [DEBUG] [Thread-196326] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:27:32.628 [DEBUG] [Thread-196326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:27:32.629 [DEBUG] [Thread-196326] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:27:32.630 [DEBUG] [Thread-196326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:27:32.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:27:32.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:27:32.632 [DEBUG] [Thread-196326] [transport.py] [_log()] userauth is OK
2026-02-15T02:27:32.632 [DEBUG] [Thread-196326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:27:32.632 [DEBUG] [Thread-196326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:27:32.632 [DEBUG] [Thread-196326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:27:32.632 [DEBUG] [Thread-196326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:27:32.652 [INFO] [Thread-196326] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:27:32.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:27:33.250 [DEBUG] [Thread-196326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:27:33.250 [DEBUG] [Thread-196326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:27:33.250 [DEBUG] [Thread-196326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:27:33.291 [DEBUG] [Thread-196326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:27:33.291 [DEBUG] [Thread-196326] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:27:33.294 [DEBUG] [Thread-196326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:27:33.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:27:33.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:27:33.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:27:33.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:27:33.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:27:33.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:27:33.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:27:33.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:27:33.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:27:33.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.018857 -999.00   +6.70  31.86     91   +5.40 1 1 2 3 1     0    0 -999.00 0.00 ZNESW 31.9 31.9 139.2 42.0 7.3 -24.0 7.1 -22.9 6.9 -21.9 7.3 -23.3
2026-02-15T02:27:33.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:27:33.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:27:33.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.018857
2026-02-15T02:27:33.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:27:33.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:27:33.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:27:33.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:27:33.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:27:33.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:27:05', tmtdew=1.17, humidity=92.11, cloud=0.0, wind=36.15, temperature=6.8, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:27:09.245', atlas_cloud=1, atlas_rain=1, zp_data=[0.8257499999999993, 0.6402500000000009, 0.5437500000000011, 0.5174999999999992, 1.5830000000000002, 1.4902500000000005, 2.2089999999999996, 0.6577500000000001, 0.6319999999999997, 0.7004999999999999, 0.7782499999999999, 0.5264999999999995, 0.5349999999999993, 0.6622499999999993, 0.8429999999999991, 0.833499999999999, 0.8182499999999999, 0.9734999999999996, 1.1809999999999992, 0.6582499999999989, 0.3514999999999979, 0.3697499999999998, 0.6312500000000005, 0.8907499999999997, 0.9059999999999988, 0.9235000000000015, 0.8282499999999997, 0.4375, 0.37650000000000006, 0.21300000000000097, 0.5290000000000008, 0.6740000000000004, 0.6037499999999989], zp_timestamp='2026-02-15T00:26:00')
2026-02-15T02:27:33.325 [DEBUG] [Thread-196326] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:27:33.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T02:27:33.415 [DEBUG] [Thread-196329] [transport.py] [_log()] starting thread (client mode): 0xa2d86530
2026-02-15T02:27:33.415 [DEBUG] [Thread-196329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:27:33.431 [DEBUG] [Thread-196329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:27:33.431 [INFO] [Thread-196329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:27:33.439 [DEBUG] [Thread-196329] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:27:33.439 [DEBUG] [Thread-196329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:27:33.439 [DEBUG] [Thread-196329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:27:33.439 [DEBUG] [Thread-196329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:27:33.439 [DEBUG] [Thread-196329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:27:33.439 [DEBUG] [Thread-196329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:27:33.439 [DEBUG] [Thread-196329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:27:33.439 [DEBUG] [Thread-196329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:27:33.439 [DEBUG] [Thread-196329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:27:33.439 [DEBUG] [Thread-196329] [transport.py] [_log()] client lang: <none>
2026-02-15T02:27:33.440 [DEBUG] [Thread-196329] [transport.py] [_log()] server lang: <none>
2026-02-15T02:27:33.440 [DEBUG] [Thread-196329] [transport.py] [_log()] kex follows: False
2026-02-15T02:27:33.440 [DEBUG] [Thread-196329] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:27:33.440 [DEBUG] [Thread-196329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:27:33.440 [DEBUG] [Thread-196329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:27:33.440 [DEBUG] [Thread-196329] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:27:33.440 [DEBUG] [Thread-196329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:27:33.440 [DEBUG] [Thread-196329] [transport.py] [_log()] Compression: none
2026-02-15T02:27:33.440 [DEBUG] [Thread-196329] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:27:33.497 [DEBUG] [Thread-196329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:27:33.498 [DEBUG] [Thread-196329] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:27:33.498 [DEBUG] [Thread-196329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:27:33.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:27:33.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:27:33.557 [DEBUG] [Thread-196329] [transport.py] [_log()] userauth is OK
2026-02-15T02:27:33.557 [DEBUG] [Thread-196329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:27:33.558 [DEBUG] [Thread-196329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:27:33.558 [DEBUG] [Thread-196329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:27:33.558 [DEBUG] [Thread-196329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:27:33.577 [INFO] [Thread-196329] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:27:33.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-15T02:27:33.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:27:34.383 [DEBUG] [Thread-196329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:27:34.384 [DEBUG] [Thread-196329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:27:34.432 [DEBUG] [Thread-196329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:27:34.432 [DEBUG] [Thread-196329] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:27:34.441 [DEBUG] [Thread-196329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:27:34.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:27:34.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-15T02:27:34.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-15T02:27:34.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:27:34.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:27:34.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:27:34.480 [DEBUG] [Thread-196329] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:27:37.144 [DEBUG] [Thread-196331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:27:44.144 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:27:44.145 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:27:52.198 [DEBUG] [Thread-196332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:28:04.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:28:04.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:28:04.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:28:06.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 27, 41), 1.63, 89.35, 0.0, 39.98, 7.07, 1, 1, 0, 2, 0, 0),)
2026-02-15T02:28:06.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:27:41
2026-02-15T02:28:06.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:28:06.884 [DEBUG] [Thread-196333] [transport.py] [_log()] starting thread (client mode): 0xa2d6eb00
2026-02-15T02:28:06.884 [DEBUG] [Thread-196333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:28:06.899 [DEBUG] [Thread-196333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:28:06.899 [INFO] [Thread-196333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:28:06.902 [DEBUG] [Thread-196333] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:28:06.902 [DEBUG] [Thread-196333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:28:06.902 [DEBUG] [Thread-196333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:28:06.902 [DEBUG] [Thread-196333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:28:06.902 [DEBUG] [Thread-196333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:28:06.902 [DEBUG] [Thread-196333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:28:06.902 [DEBUG] [Thread-196333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:28:06.902 [DEBUG] [Thread-196333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:28:06.902 [DEBUG] [Thread-196333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:28:06.902 [DEBUG] [Thread-196333] [transport.py] [_log()] client lang: <none>
2026-02-15T02:28:06.902 [DEBUG] [Thread-196333] [transport.py] [_log()] server lang: <none>
2026-02-15T02:28:06.902 [DEBUG] [Thread-196333] [transport.py] [_log()] kex follows: False
2026-02-15T02:28:06.902 [DEBUG] [Thread-196333] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:28:06.902 [DEBUG] [Thread-196333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:28:06.902 [DEBUG] [Thread-196333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:28:06.903 [DEBUG] [Thread-196333] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:28:06.903 [DEBUG] [Thread-196333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:28:06.903 [DEBUG] [Thread-196333] [transport.py] [_log()] Compression: none
2026-02-15T02:28:06.903 [DEBUG] [Thread-196333] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:28:06.919 [DEBUG] [Thread-196333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:28:06.920 [DEBUG] [Thread-196333] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:28:06.921 [DEBUG] [Thread-196333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:28:06.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:28:06.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:28:06.923 [DEBUG] [Thread-196333] [transport.py] [_log()] userauth is OK
2026-02-15T02:28:06.923 [DEBUG] [Thread-196333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:28:06.923 [DEBUG] [Thread-196333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:28:06.923 [DEBUG] [Thread-196333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:28:06.923 [DEBUG] [Thread-196333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:28:06.939 [INFO] [Thread-196333] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:28:06.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:28:07.238 [DEBUG] [Thread-196335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:28:07.600 [DEBUG] [Thread-196333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:28:07.601 [DEBUG] [Thread-196333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:28:07.601 [DEBUG] [Thread-196333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:28:07.641 [DEBUG] [Thread-196333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:28:07.642 [DEBUG] [Thread-196333] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:28:07.645 [DEBUG] [Thread-196333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:28:07.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:28:07.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:28:07.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:28:07.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:28:07.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:28:07.669 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:28:07.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:28:07.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:28:07.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:28:07.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.019204 -999.00   +6.70  27.91     91   +5.40 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 27.9 27.9 145.2 39.7 7.3 -23.4 7.1 -22.5 6.9 -21.6 7.2 -22.8
2026-02-15T02:28:07.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:28:07.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:28:07.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.019204
2026-02-15T02:28:07.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:28:07.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:28:07.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:28:07.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:28:07.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:28:07.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:27:41', tmtdew=1.63, humidity=89.35, cloud=0.0, wind=39.98, temperature=7.07, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:27:39.226', atlas_cloud=1, atlas_rain=1, zp_data=[0.8257499999999993, 0.6402500000000009, 0.5437500000000011, 0.5174999999999992, 1.5830000000000002, 1.4902500000000005, 2.2089999999999996, 0.6577500000000001, 0.6319999999999997, 0.7004999999999999, 0.7782499999999999, 0.5264999999999995, 0.5349999999999993, 0.6622499999999993, 0.8429999999999991, 0.833499999999999, 0.8182499999999999, 0.9734999999999996, 1.1809999999999992, 0.6582499999999989, 0.3514999999999979, 0.3697499999999998, 0.6312500000000005, 0.8907499999999997, 0.9059999999999988, 0.9235000000000015, 0.8282499999999997, 0.4375, 0.37650000000000006, 0.21300000000000097, 0.5290000000000008, 0.6740000000000004, 0.6037499999999989], zp_timestamp='2026-02-15T00:26:00')
2026-02-15T02:28:07.672 [DEBUG] [Thread-196333] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:28:07.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-15T02:28:07.776 [DEBUG] [Thread-196337] [transport.py] [_log()] starting thread (client mode): 0xa2d85150
2026-02-15T02:28:07.776 [DEBUG] [Thread-196337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:28:07.790 [DEBUG] [Thread-196337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:28:07.790 [INFO] [Thread-196337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:28:07.798 [DEBUG] [Thread-196337] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:28:07.798 [DEBUG] [Thread-196337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:28:07.798 [DEBUG] [Thread-196337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:28:07.798 [DEBUG] [Thread-196337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:28:07.798 [DEBUG] [Thread-196337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:28:07.798 [DEBUG] [Thread-196337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:28:07.798 [DEBUG] [Thread-196337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:28:07.798 [DEBUG] [Thread-196337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:28:07.799 [DEBUG] [Thread-196337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:28:07.799 [DEBUG] [Thread-196337] [transport.py] [_log()] client lang: <none>
2026-02-15T02:28:07.799 [DEBUG] [Thread-196337] [transport.py] [_log()] server lang: <none>
2026-02-15T02:28:07.799 [DEBUG] [Thread-196337] [transport.py] [_log()] kex follows: False
2026-02-15T02:28:07.799 [DEBUG] [Thread-196337] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:28:07.799 [DEBUG] [Thread-196337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:28:07.799 [DEBUG] [Thread-196337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:28:07.799 [DEBUG] [Thread-196337] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:28:07.799 [DEBUG] [Thread-196337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:28:07.799 [DEBUG] [Thread-196337] [transport.py] [_log()] Compression: none
2026-02-15T02:28:07.799 [DEBUG] [Thread-196337] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:28:07.857 [DEBUG] [Thread-196337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:28:07.857 [DEBUG] [Thread-196337] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:28:07.858 [DEBUG] [Thread-196337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:28:07.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:28:07.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:28:07.916 [DEBUG] [Thread-196337] [transport.py] [_log()] userauth is OK
2026-02-15T02:28:07.916 [DEBUG] [Thread-196337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:28:07.917 [DEBUG] [Thread-196337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:28:07.917 [DEBUG] [Thread-196337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:28:07.917 [DEBUG] [Thread-196337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:28:07.941 [INFO] [Thread-196337] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:28:07.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-15T02:28:07.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:28:08.723 [DEBUG] [Thread-196337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:28:08.723 [DEBUG] [Thread-196337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:28:08.771 [DEBUG] [Thread-196337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:28:08.772 [DEBUG] [Thread-196337] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:28:08.781 [DEBUG] [Thread-196337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:28:08.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:28: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-15T02:28:08.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-15T02:28:08.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:28:08.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:28:08.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:28:08.818 [DEBUG] [Thread-196337] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:28:16.790 [DEBUG] [Thread-196339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:28:22.279 [DEBUG] [Thread-196340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:28:37.332 [DEBUG] [Thread-196341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:28:38.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:28:38.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:28:38.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:28:40.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 28, 17), 1.16, 92.19, 0.0, 34.64, 6.78, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:28:40.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:28:17
2026-02-15T02:28:41.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:28:41.163 [DEBUG] [Thread-196342] [transport.py] [_log()] starting thread (client mode): 0xa2d11270
2026-02-15T02:28:41.163 [DEBUG] [Thread-196342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:28:41.183 [DEBUG] [Thread-196342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:28:41.183 [INFO] [Thread-196342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:28:41.186 [DEBUG] [Thread-196342] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:28:41.186 [DEBUG] [Thread-196342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:28:41.186 [DEBUG] [Thread-196342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:28:41.186 [DEBUG] [Thread-196342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:28:41.186 [DEBUG] [Thread-196342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:28:41.186 [DEBUG] [Thread-196342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:28:41.186 [DEBUG] [Thread-196342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:28:41.186 [DEBUG] [Thread-196342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:28:41.186 [DEBUG] [Thread-196342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:28:41.186 [DEBUG] [Thread-196342] [transport.py] [_log()] client lang: <none>
2026-02-15T02:28:41.186 [DEBUG] [Thread-196342] [transport.py] [_log()] server lang: <none>
2026-02-15T02:28:41.187 [DEBUG] [Thread-196342] [transport.py] [_log()] kex follows: False
2026-02-15T02:28:41.187 [DEBUG] [Thread-196342] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:28:41.187 [DEBUG] [Thread-196342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:28:41.187 [DEBUG] [Thread-196342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:28:41.187 [DEBUG] [Thread-196342] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:28:41.187 [DEBUG] [Thread-196342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:28:41.187 [DEBUG] [Thread-196342] [transport.py] [_log()] Compression: none
2026-02-15T02:28:41.187 [DEBUG] [Thread-196342] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:28:41.205 [DEBUG] [Thread-196342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:28:41.205 [DEBUG] [Thread-196342] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:28:41.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:28:41.207 [DEBUG] [Thread-196342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:28:41.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:28:41.209 [DEBUG] [Thread-196342] [transport.py] [_log()] userauth is OK
2026-02-15T02:28:41.209 [DEBUG] [Thread-196342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:28:41.209 [DEBUG] [Thread-196342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:28:41.210 [DEBUG] [Thread-196342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:28:41.210 [DEBUG] [Thread-196342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:28:41.248 [INFO] [Thread-196342] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:28:41.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:28:41.835 [DEBUG] [Thread-196342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:28:41.835 [DEBUG] [Thread-196342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:28:41.836 [DEBUG] [Thread-196342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:28:41.876 [DEBUG] [Thread-196342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:28:41.877 [DEBUG] [Thread-196342] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:28:41.880 [DEBUG] [Thread-196342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:28:41.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:28:41.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:28:41.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:28:41.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:28:41.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:28:41.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:28:41.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:28:41.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:28:41.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:28:41.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.019552 -999.00   +6.70  23.62     91   +5.40 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 23.6 23.6 139.2 32.5 7.3 -23.6 7.1 -23.0 6.8 -22.0 7.2 -23.1
2026-02-15T02:28:41.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:28:41.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:28:41.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.019552
2026-02-15T02:28:41.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:28:41.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:28:41.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:28:41.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:28:41.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:28:41.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:28:17', tmtdew=1.16, humidity=92.19, cloud=0.0, wind=34.64, temperature=6.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:28:09.293', atlas_cloud=1, atlas_rain=1, zp_data=[0.8257499999999993, 0.6402500000000009, 0.5437500000000011, 0.5174999999999992, 1.5830000000000002, 1.4902500000000005, 2.2089999999999996, 0.6577500000000001, 0.6319999999999997, 0.7004999999999999, 0.7782499999999999, 0.5264999999999995, 0.5349999999999993, 0.6622499999999993, 0.8429999999999991, 0.833499999999999, 0.8182499999999999, 0.9734999999999996, 1.1809999999999992, 0.6582499999999989, 0.3514999999999979, 0.3697499999999998, 0.6312500000000005, 0.8907499999999997, 0.9059999999999988, 0.9235000000000015, 0.8282499999999997, 0.4375, 0.37650000000000006, 0.21300000000000097, 0.5290000000000008, 0.6740000000000004, 0.6037499999999989], zp_timestamp='2026-02-15T00:26:00')
2026-02-15T02:28:41.906 [DEBUG] [Thread-196342] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:28:41.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-15T02:28:42.002 [DEBUG] [Thread-196345] [transport.py] [_log()] starting thread (client mode): 0xa2d848e0
2026-02-15T02:28:42.002 [DEBUG] [Thread-196345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:28:42.018 [DEBUG] [Thread-196345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:28:42.018 [INFO] [Thread-196345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:28:42.027 [DEBUG] [Thread-196345] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:28:42.027 [DEBUG] [Thread-196345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:28:42.027 [DEBUG] [Thread-196345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:28:42.027 [DEBUG] [Thread-196345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:28:42.027 [DEBUG] [Thread-196345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:28:42.027 [DEBUG] [Thread-196345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:28:42.027 [DEBUG] [Thread-196345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:28:42.027 [DEBUG] [Thread-196345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:28:42.027 [DEBUG] [Thread-196345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:28:42.027 [DEBUG] [Thread-196345] [transport.py] [_log()] client lang: <none>
2026-02-15T02:28:42.027 [DEBUG] [Thread-196345] [transport.py] [_log()] server lang: <none>
2026-02-15T02:28:42.027 [DEBUG] [Thread-196345] [transport.py] [_log()] kex follows: False
2026-02-15T02:28:42.028 [DEBUG] [Thread-196345] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:28:42.028 [DEBUG] [Thread-196345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:28:42.028 [DEBUG] [Thread-196345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:28:42.028 [DEBUG] [Thread-196345] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:28:42.028 [DEBUG] [Thread-196345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:28:42.028 [DEBUG] [Thread-196345] [transport.py] [_log()] Compression: none
2026-02-15T02:28:42.028 [DEBUG] [Thread-196345] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:28:42.084 [DEBUG] [Thread-196345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:28:42.084 [DEBUG] [Thread-196345] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:28:42.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:28:42.085 [DEBUG] [Thread-196345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:28:42.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:28:42.140 [DEBUG] [Thread-196345] [transport.py] [_log()] userauth is OK
2026-02-15T02:28:42.140 [DEBUG] [Thread-196345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:28:42.140 [DEBUG] [Thread-196345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:28:42.141 [DEBUG] [Thread-196345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:28:42.141 [DEBUG] [Thread-196345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:28:42.159 [INFO] [Thread-196345] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:28:42.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T02:28:42.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:28:42.940 [DEBUG] [Thread-196345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:28:42.940 [DEBUG] [Thread-196345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:28:42.988 [DEBUG] [Thread-196345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:28:42.988 [DEBUG] [Thread-196345] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:28:42.997 [DEBUG] [Thread-196345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:28:43.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:28:43.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:28:43.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:28:43.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:28:43.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:28:43.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:28:43.036 [DEBUG] [Thread-196345] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:28:44.365 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:28:44.366 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:28:52.369 [DEBUG] [Thread-196347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:29:07.422 [DEBUG] [Thread-196348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:29:13.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:29:13.036 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:29:13.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-15T02:29:14.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 28, 53), 1.16, 92.21, 0.0, 37.07, 6.78, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:29:14.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:28:53
2026-02-15T02:29:15.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:29:15.388 [DEBUG] [Thread-196349] [transport.py] [_log()] starting thread (client mode): 0xa2de0e80
2026-02-15T02:29:15.388 [DEBUG] [Thread-196349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:29:15.408 [DEBUG] [Thread-196349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:29:15.408 [INFO] [Thread-196349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:29:15.411 [DEBUG] [Thread-196349] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:29:15.411 [DEBUG] [Thread-196349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:29:15.411 [DEBUG] [Thread-196349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:29:15.411 [DEBUG] [Thread-196349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:29:15.411 [DEBUG] [Thread-196349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:29:15.411 [DEBUG] [Thread-196349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:29:15.411 [DEBUG] [Thread-196349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:29:15.411 [DEBUG] [Thread-196349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:29:15.411 [DEBUG] [Thread-196349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:29:15.411 [DEBUG] [Thread-196349] [transport.py] [_log()] client lang: <none>
2026-02-15T02:29:15.411 [DEBUG] [Thread-196349] [transport.py] [_log()] server lang: <none>
2026-02-15T02:29:15.411 [DEBUG] [Thread-196349] [transport.py] [_log()] kex follows: False
2026-02-15T02:29:15.411 [DEBUG] [Thread-196349] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:29:15.412 [DEBUG] [Thread-196349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:29:15.412 [DEBUG] [Thread-196349] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:29:15.412 [DEBUG] [Thread-196349] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:29:15.412 [DEBUG] [Thread-196349] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:29:15.412 [DEBUG] [Thread-196349] [transport.py] [_log()] Compression: none
2026-02-15T02:29:15.412 [DEBUG] [Thread-196349] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:29:15.432 [DEBUG] [Thread-196349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:29:15.433 [DEBUG] [Thread-196349] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:29:15.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:29:15.434 [DEBUG] [Thread-196349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:29:15.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:29:15.437 [DEBUG] [Thread-196349] [transport.py] [_log()] userauth is OK
2026-02-15T02:29:15.437 [DEBUG] [Thread-196349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:29:15.438 [DEBUG] [Thread-196349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:29:15.438 [DEBUG] [Thread-196349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:29:15.438 [DEBUG] [Thread-196349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:29:15.469 [INFO] [Thread-196349] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:29:15.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:29:16.072 [DEBUG] [Thread-196349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:29:16.072 [DEBUG] [Thread-196349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:29:16.072 [DEBUG] [Thread-196349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:29:16.112 [DEBUG] [Thread-196349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:29:16.113 [DEBUG] [Thread-196349] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:29:16.116 [DEBUG] [Thread-196349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:29:16.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:29:16.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:29:16.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:29:16.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:29:16.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:29:16.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:29:16.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:29:16.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:29:16.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:29:16.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.019899 -999.00   +6.70  22.91     91   +5.40 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 22.9 22.9 144.0 28.7 7.3 -24.0 7.1 -23.2 6.8 -22.1 7.2 -23.3
2026-02-15T02:29:16.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:29:16.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:29:16.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.019899
2026-02-15T02:29:16.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:29:16.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:29:16.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:29:16.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:29:16.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:29:16.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:28:53', tmtdew=1.16, humidity=92.21, cloud=0.0, wind=37.07, temperature=6.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:28:39.274', atlas_cloud=1, atlas_rain=1, zp_data=[0.8257499999999993, 0.6402500000000009, 0.5437500000000011, 0.5174999999999992, 1.5830000000000002, 1.4902500000000005, 2.2089999999999996, 0.6577500000000001, 0.6319999999999997, 0.7004999999999999, 0.7782499999999999, 0.5264999999999995, 0.5349999999999993, 0.6622499999999993, 0.8429999999999991, 0.833499999999999, 0.8182499999999999, 0.9734999999999996, 1.1809999999999992, 0.6582499999999989, 0.3514999999999979, 0.3697499999999998, 0.6312500000000005, 0.8907499999999997, 0.9059999999999988, 0.9235000000000015, 0.8282499999999997, 0.4375, 0.37650000000000006, 0.21300000000000097, 0.5290000000000008, 0.6740000000000004, 0.6037499999999989], zp_timestamp='2026-02-15T00:26:00')
2026-02-15T02:29:16.142 [DEBUG] [Thread-196349] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:29:16.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-15T02:29:16.238 [DEBUG] [Thread-196352] [transport.py] [_log()] starting thread (client mode): 0xa2d7b490
2026-02-15T02:29:16.238 [DEBUG] [Thread-196352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:29:16.253 [DEBUG] [Thread-196352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:29:16.253 [INFO] [Thread-196352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:29:16.260 [DEBUG] [Thread-196352] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:29:16.261 [DEBUG] [Thread-196352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:29:16.261 [DEBUG] [Thread-196352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:29:16.261 [DEBUG] [Thread-196352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:29:16.261 [DEBUG] [Thread-196352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:29:16.261 [DEBUG] [Thread-196352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:29:16.261 [DEBUG] [Thread-196352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:29:16.262 [DEBUG] [Thread-196352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:29:16.262 [DEBUG] [Thread-196352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:29:16.262 [DEBUG] [Thread-196352] [transport.py] [_log()] client lang: <none>
2026-02-15T02:29:16.262 [DEBUG] [Thread-196352] [transport.py] [_log()] server lang: <none>
2026-02-15T02:29:16.262 [DEBUG] [Thread-196352] [transport.py] [_log()] kex follows: False
2026-02-15T02:29:16.262 [DEBUG] [Thread-196352] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:29:16.262 [DEBUG] [Thread-196352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:29:16.262 [DEBUG] [Thread-196352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:29:16.263 [DEBUG] [Thread-196352] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:29:16.263 [DEBUG] [Thread-196352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:29:16.263 [DEBUG] [Thread-196352] [transport.py] [_log()] Compression: none
2026-02-15T02:29:16.263 [DEBUG] [Thread-196352] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:29:16.319 [DEBUG] [Thread-196352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:29:16.319 [DEBUG] [Thread-196352] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:29:16.320 [DEBUG] [Thread-196352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:29:16.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:29:16.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:29:16.375 [DEBUG] [Thread-196352] [transport.py] [_log()] userauth is OK
2026-02-15T02:29:16.376 [DEBUG] [Thread-196352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:29:16.376 [DEBUG] [Thread-196352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:29:16.376 [DEBUG] [Thread-196352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:29:16.376 [DEBUG] [Thread-196352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:29:16.395 [INFO] [Thread-196352] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:29:16.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-15T02:29:16.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:29:16.860 [DEBUG] [Thread-196354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:29:17.192 [DEBUG] [Thread-196352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:29:17.192 [DEBUG] [Thread-196352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:29:17.240 [DEBUG] [Thread-196352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:29:17.240 [DEBUG] [Thread-196352] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:29:17.250 [DEBUG] [Thread-196352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:29:17.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:29:17.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:29:17.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-15T02:29:17.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:29:17.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:29:17.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:29:17.287 [DEBUG] [Thread-196352] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:29:22.464 [DEBUG] [Thread-196355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:29:37.525 [DEBUG] [Thread-196356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:29:44.568 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:29:44.569 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:29:47.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:29:47.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:29:47.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-15T02:29:49.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 29, 28), 1.15, 92.24, 0.0, 34.6, 6.77, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:29:49.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:29:28
2026-02-15T02:29:49.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:29:49.889 [DEBUG] [Thread-196357] [transport.py] [_log()] starting thread (client mode): 0xa2d78730
2026-02-15T02:29:49.889 [DEBUG] [Thread-196357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:29:49.905 [DEBUG] [Thread-196357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:29:49.906 [INFO] [Thread-196357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:29:49.908 [DEBUG] [Thread-196357] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:29:49.908 [DEBUG] [Thread-196357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:29:49.908 [DEBUG] [Thread-196357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:29:49.908 [DEBUG] [Thread-196357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:29:49.908 [DEBUG] [Thread-196357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:29:49.908 [DEBUG] [Thread-196357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:29:49.908 [DEBUG] [Thread-196357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:29:49.908 [DEBUG] [Thread-196357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:29:49.908 [DEBUG] [Thread-196357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:29:49.908 [DEBUG] [Thread-196357] [transport.py] [_log()] client lang: <none>
2026-02-15T02:29:49.908 [DEBUG] [Thread-196357] [transport.py] [_log()] server lang: <none>
2026-02-15T02:29:49.908 [DEBUG] [Thread-196357] [transport.py] [_log()] kex follows: False
2026-02-15T02:29:49.908 [DEBUG] [Thread-196357] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:29:49.909 [DEBUG] [Thread-196357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:29:49.909 [DEBUG] [Thread-196357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:29:49.909 [DEBUG] [Thread-196357] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:29:49.909 [DEBUG] [Thread-196357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:29:49.909 [DEBUG] [Thread-196357] [transport.py] [_log()] Compression: none
2026-02-15T02:29:49.909 [DEBUG] [Thread-196357] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:29:49.925 [DEBUG] [Thread-196357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:29:49.926 [DEBUG] [Thread-196357] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:29:49.926 [DEBUG] [Thread-196357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:29:49.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:29:49.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:29:49.928 [DEBUG] [Thread-196357] [transport.py] [_log()] userauth is OK
2026-02-15T02:29:49.928 [DEBUG] [Thread-196357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:29:49.928 [DEBUG] [Thread-196357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:29:49.928 [DEBUG] [Thread-196357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:29:49.928 [DEBUG] [Thread-196357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:29:49.942 [INFO] [Thread-196357] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:29:49.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:29:50.599 [DEBUG] [Thread-196357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:29:50.599 [DEBUG] [Thread-196357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:29:50.600 [DEBUG] [Thread-196357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:29:50.640 [DEBUG] [Thread-196357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:29:50.641 [DEBUG] [Thread-196357] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:29:50.644 [DEBUG] [Thread-196357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:29:50.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:29:50.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:29:50.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:29:50.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:29:50.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:29:50.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:29:50.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:29:50.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:29:50.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:29:50.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.020593 -999.00   +6.70  26.22     91   +5.40 1 1 1 3 1     0    0 -999.00 0.00 ZNESW 26.2 26.2 140.8 33.4 7.2 -23.1 7.1 -22.6 6.8 -21.7 7.2 -22.6
2026-02-15T02:29:50.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:29:50.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:29:50.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.020593
2026-02-15T02:29:50.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:29:50.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:29:50.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:29:50.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:29:50.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:29:50.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:29:28', tmtdew=1.15, humidity=92.24, cloud=0.0, wind=34.6, temperature=6.77, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:29:39.235', atlas_cloud=1, atlas_rain=1, zp_data=[0.8257499999999993, 0.6402500000000009, 0.5437500000000011, 0.5174999999999992, 1.5830000000000002, 1.4902500000000005, 2.2089999999999996, 0.6577500000000001, 0.6319999999999997, 0.7004999999999999, 0.7782499999999999, 0.5264999999999995, 0.5349999999999993, 0.6622499999999993, 0.8429999999999991, 0.833499999999999, 0.8182499999999999, 0.9734999999999996, 1.1809999999999992, 0.6582499999999989, 0.3514999999999979, 0.3697499999999998, 0.6312500000000005, 0.8907499999999997, 0.9059999999999988, 0.9235000000000015, 0.8282499999999997, 0.4375, 0.37650000000000006, 0.21300000000000097, 0.5290000000000008, 0.6740000000000004, 0.6037499999999989], zp_timestamp='2026-02-15T00:26:00')
2026-02-15T02:29:50.671 [DEBUG] [Thread-196357] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:29:50.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-15T02:29:50.768 [DEBUG] [Thread-196360] [transport.py] [_log()] starting thread (client mode): 0xa2de3100
2026-02-15T02:29:50.768 [DEBUG] [Thread-196360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:29:50.784 [DEBUG] [Thread-196360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:29:50.785 [INFO] [Thread-196360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:29:50.798 [DEBUG] [Thread-196360] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:29:50.799 [DEBUG] [Thread-196360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:29:50.799 [DEBUG] [Thread-196360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:29:50.799 [DEBUG] [Thread-196360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:29:50.799 [DEBUG] [Thread-196360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:29:50.799 [DEBUG] [Thread-196360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:29:50.799 [DEBUG] [Thread-196360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:29:50.799 [DEBUG] [Thread-196360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:29:50.799 [DEBUG] [Thread-196360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:29:50.799 [DEBUG] [Thread-196360] [transport.py] [_log()] client lang: <none>
2026-02-15T02:29:50.799 [DEBUG] [Thread-196360] [transport.py] [_log()] server lang: <none>
2026-02-15T02:29:50.799 [DEBUG] [Thread-196360] [transport.py] [_log()] kex follows: False
2026-02-15T02:29:50.799 [DEBUG] [Thread-196360] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:29:50.800 [DEBUG] [Thread-196360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:29:50.800 [DEBUG] [Thread-196360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:29:50.800 [DEBUG] [Thread-196360] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:29:50.800 [DEBUG] [Thread-196360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:29:50.800 [DEBUG] [Thread-196360] [transport.py] [_log()] Compression: none
2026-02-15T02:29:50.800 [DEBUG] [Thread-196360] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:29:50.851 [DEBUG] [Thread-196360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:29:50.852 [DEBUG] [Thread-196360] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:29:50.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:29:50.853 [DEBUG] [Thread-196360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:29:50.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:29:50.908 [DEBUG] [Thread-196360] [transport.py] [_log()] userauth is OK
2026-02-15T02:29:50.908 [DEBUG] [Thread-196360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:29:50.908 [DEBUG] [Thread-196360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:29:50.908 [DEBUG] [Thread-196360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:29:50.908 [DEBUG] [Thread-196360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:29:50.927 [INFO] [Thread-196360] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:29:50.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-15T02:29:50.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:29:51.719 [DEBUG] [Thread-196360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:29:51.719 [DEBUG] [Thread-196360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:29:51.768 [DEBUG] [Thread-196360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:29:51.769 [DEBUG] [Thread-196360] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:29:51.777 [DEBUG] [Thread-196360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:29:51.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:29:51.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-15T02:29:51.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:29:51.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:29:51.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:29:51.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:29:51.811 [DEBUG] [Thread-196360] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:29:52.562 [DEBUG] [Thread-196362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:30:07.615 [DEBUG] [Thread-196363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:30:16.918 [DEBUG] [Thread-196364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:30:21.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:30:21.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:30:21.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-15T02:30:22.651 [DEBUG] [Thread-196365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:30:23.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 30, 3), 1.15, 92.24, 0.0, 34.53, 6.78, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:30:23.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:30:03
2026-02-15T02:30:24.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:30:24.278 [DEBUG] [Thread-196366] [transport.py] [_log()] starting thread (client mode): 0xa2d97430
2026-02-15T02:30:24.278 [DEBUG] [Thread-196366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:30:24.297 [DEBUG] [Thread-196366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:30:24.297 [INFO] [Thread-196366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:30:24.298 [DEBUG] [Thread-196366] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:30:24.298 [DEBUG] [Thread-196366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:30:24.298 [DEBUG] [Thread-196366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:30:24.298 [DEBUG] [Thread-196366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:30:24.298 [DEBUG] [Thread-196366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:30:24.298 [DEBUG] [Thread-196366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:30:24.298 [DEBUG] [Thread-196366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:30:24.298 [DEBUG] [Thread-196366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:30:24.298 [DEBUG] [Thread-196366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:30:24.298 [DEBUG] [Thread-196366] [transport.py] [_log()] client lang: <none>
2026-02-15T02:30:24.298 [DEBUG] [Thread-196366] [transport.py] [_log()] server lang: <none>
2026-02-15T02:30:24.298 [DEBUG] [Thread-196366] [transport.py] [_log()] kex follows: False
2026-02-15T02:30:24.298 [DEBUG] [Thread-196366] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:30:24.299 [DEBUG] [Thread-196366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:30:24.299 [DEBUG] [Thread-196366] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:30:24.299 [DEBUG] [Thread-196366] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:30:24.299 [DEBUG] [Thread-196366] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:30:24.299 [DEBUG] [Thread-196366] [transport.py] [_log()] Compression: none
2026-02-15T02:30:24.299 [DEBUG] [Thread-196366] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:30:24.320 [DEBUG] [Thread-196366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:30:24.321 [DEBUG] [Thread-196366] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:30:24.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:30:24.322 [DEBUG] [Thread-196366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:30:24.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:30:24.323 [DEBUG] [Thread-196366] [transport.py] [_log()] userauth is OK
2026-02-15T02:30:24.324 [DEBUG] [Thread-196366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:30:24.324 [DEBUG] [Thread-196366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:30:24.324 [DEBUG] [Thread-196366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:30:24.324 [DEBUG] [Thread-196366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:30:24.359 [INFO] [Thread-196366] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:30:24.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:30:24.924 [DEBUG] [Thread-196366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:30:24.924 [DEBUG] [Thread-196366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:30:24.924 [DEBUG] [Thread-196366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:30:24.965 [DEBUG] [Thread-196366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:30:24.965 [DEBUG] [Thread-196366] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:30:24.968 [DEBUG] [Thread-196366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:30:24.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:30:24.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:30:24.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:30:24.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:30:24.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:30:24.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:30:24.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:30:24.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:30:24.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:30:24.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.020940 -999.00   +6.70  29.49     91   +5.40 1 1 1 3 1     0    0 1.16 -7.07 ZNESW 29.5 29.5 141.6 37.4 7.2 -24.0 7.1 -23.1 6.8 -21.9 7.2 -23.2
2026-02-15T02:30:24.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:30:24.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:30:24.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.020940
2026-02-15T02:30:24.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:30:24.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:30:24.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:30:24.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:30:24.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:30:24.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:30:03', tmtdew=1.15, humidity=92.24, cloud=0.0, wind=34.53, temperature=6.78, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:30:09.216', atlas_cloud=1, atlas_rain=1, zp_data=[0.8257499999999993, 0.6402500000000009, 0.5437500000000011, 0.5174999999999992, 1.5830000000000002, 1.4902500000000005, 2.2089999999999996, 0.6577500000000001, 0.6319999999999997, 0.7004999999999999, 0.7782499999999999, 0.5264999999999995, 0.5349999999999993, 0.6622499999999993, 0.8429999999999991, 0.833499999999999, 0.8182499999999999, 0.9734999999999996, 1.1809999999999992, 0.6582499999999989, 0.3514999999999979, 0.3697499999999998, 0.6312500000000005, 0.8907499999999997, 0.9059999999999988, 0.9235000000000015, 0.8282499999999997, 0.4375, 0.37650000000000006, 0.21300000000000097, 0.5290000000000008, 0.6740000000000004, 0.6037499999999989], zp_timestamp='2026-02-15T00:26:00')
2026-02-15T02:30:24.995 [DEBUG] [Thread-196366] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:30:25.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-15T02:30:25.092 [DEBUG] [Thread-196369] [transport.py] [_log()] starting thread (client mode): 0xa2d121d0
2026-02-15T02:30:25.092 [DEBUG] [Thread-196369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:30:25.112 [DEBUG] [Thread-196369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:30:25.112 [INFO] [Thread-196369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:30:25.123 [DEBUG] [Thread-196369] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:30:25.124 [DEBUG] [Thread-196369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:30:25.124 [DEBUG] [Thread-196369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:30:25.124 [DEBUG] [Thread-196369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:30:25.124 [DEBUG] [Thread-196369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:30:25.124 [DEBUG] [Thread-196369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:30:25.124 [DEBUG] [Thread-196369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:30:25.124 [DEBUG] [Thread-196369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:30:25.124 [DEBUG] [Thread-196369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:30:25.124 [DEBUG] [Thread-196369] [transport.py] [_log()] client lang: <none>
2026-02-15T02:30:25.124 [DEBUG] [Thread-196369] [transport.py] [_log()] server lang: <none>
2026-02-15T02:30:25.124 [DEBUG] [Thread-196369] [transport.py] [_log()] kex follows: False
2026-02-15T02:30:25.124 [DEBUG] [Thread-196369] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:30:25.124 [DEBUG] [Thread-196369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:30:25.124 [DEBUG] [Thread-196369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:30:25.125 [DEBUG] [Thread-196369] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:30:25.125 [DEBUG] [Thread-196369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:30:25.125 [DEBUG] [Thread-196369] [transport.py] [_log()] Compression: none
2026-02-15T02:30:25.125 [DEBUG] [Thread-196369] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:30:25.182 [DEBUG] [Thread-196369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:30:25.183 [DEBUG] [Thread-196369] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:30:25.184 [DEBUG] [Thread-196369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:30:25.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:30:25.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:30:25.239 [DEBUG] [Thread-196369] [transport.py] [_log()] userauth is OK
2026-02-15T02:30:25.239 [DEBUG] [Thread-196369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:30:25.239 [DEBUG] [Thread-196369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:30:25.239 [DEBUG] [Thread-196369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:30:25.239 [DEBUG] [Thread-196369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:30:25.264 [INFO] [Thread-196369] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:30:25.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-15T02:30:25.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:30:26.061 [DEBUG] [Thread-196369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:30:26.061 [DEBUG] [Thread-196369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:30:26.110 [DEBUG] [Thread-196369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:30:26.110 [DEBUG] [Thread-196369] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:30:26.119 [DEBUG] [Thread-196369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:30:26.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:30:26.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-15T02:30:26.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-15T02:30:26.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:30:26.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:30:26.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:30:26.156 [DEBUG] [Thread-196369] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:30:37.685 [DEBUG] [Thread-196371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:30:44.774 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:30:44.775 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:30:52.731 [DEBUG] [Thread-196372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:30:56.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:30:56.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:30:56.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-15T02:30:58.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 30, 39), 1.6, 89.52, 0.0, 35.28, 7.04, 1, 1, 0, 2, 0, 0),)
2026-02-15T02:30:58.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:30:39
2026-02-15T02:30:58.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:30:58.586 [DEBUG] [Thread-196373] [transport.py] [_log()] starting thread (client mode): 0xa2d79390
2026-02-15T02:30:58.587 [DEBUG] [Thread-196373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:30:58.606 [DEBUG] [Thread-196373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:30:58.606 [INFO] [Thread-196373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:30:58.608 [DEBUG] [Thread-196373] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:30:58.608 [DEBUG] [Thread-196373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:30:58.609 [DEBUG] [Thread-196373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:30:58.609 [DEBUG] [Thread-196373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:30:58.609 [DEBUG] [Thread-196373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:30:58.609 [DEBUG] [Thread-196373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:30:58.609 [DEBUG] [Thread-196373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:30:58.609 [DEBUG] [Thread-196373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:30:58.609 [DEBUG] [Thread-196373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:30:58.609 [DEBUG] [Thread-196373] [transport.py] [_log()] client lang: <none>
2026-02-15T02:30:58.609 [DEBUG] [Thread-196373] [transport.py] [_log()] server lang: <none>
2026-02-15T02:30:58.609 [DEBUG] [Thread-196373] [transport.py] [_log()] kex follows: False
2026-02-15T02:30:58.609 [DEBUG] [Thread-196373] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:30:58.609 [DEBUG] [Thread-196373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:30:58.609 [DEBUG] [Thread-196373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:30:58.609 [DEBUG] [Thread-196373] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:30:58.609 [DEBUG] [Thread-196373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:30:58.609 [DEBUG] [Thread-196373] [transport.py] [_log()] Compression: none
2026-02-15T02:30:58.610 [DEBUG] [Thread-196373] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:30:58.627 [DEBUG] [Thread-196373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:30:58.628 [DEBUG] [Thread-196373] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:30:58.629 [DEBUG] [Thread-196373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:30:58.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:30:58.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:30:58.631 [DEBUG] [Thread-196373] [transport.py] [_log()] userauth is OK
2026-02-15T02:30:58.631 [DEBUG] [Thread-196373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:30:58.631 [DEBUG] [Thread-196373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:30:58.631 [DEBUG] [Thread-196373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:30:58.631 [DEBUG] [Thread-196373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:30:58.655 [INFO] [Thread-196373] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:30:58.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:30:59.266 [DEBUG] [Thread-196373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:30:59.266 [DEBUG] [Thread-196373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:30:59.267 [DEBUG] [Thread-196373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:30:59.308 [DEBUG] [Thread-196373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:30:59.308 [DEBUG] [Thread-196373] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:30:59.311 [DEBUG] [Thread-196373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:30:59.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:30:59.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:30:59.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:30:59.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:30:59.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:30:59.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:30:59.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:30:59.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:30:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:30:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.021288 -999.00   +6.70  25.25     91   +5.40 1 1 1 3 1     0    0 1.14 -6.33 ZNESW 25.2 25.2 141.6 39.5 7.2 -23.7 7.0 -22.8 6.8 -21.9 7.2 -23.1
2026-02-15T02:30:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:30:59.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:30:59.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.021288
2026-02-15T02:30:59.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:30:59.331 [DEBUG] [Thread-196373] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:30:59.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:30:59.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:30:59.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:30:59.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:30:59.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:30:39', tmtdew=1.6, humidity=89.52, cloud=0.0, wind=35.28, temperature=7.04, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:30:39.283', atlas_cloud=1, atlas_rain=1, zp_data=[1.095749999999999, 0.15775000000000006, 0.21825000000000117, 0.3614999999999995, 1.6820000000000004, 1.497250000000001, 1.9734999999999996, 0.5082500000000003, 0.21899999999999942, 0.08000000000000007, 0.10224999999999973, 0.23099999999999987, 0.5314999999999994, 0.6492499999999994, 0.6489999999999991, 0.31400000000000006, 0.17875000000000085, 0.10449999999999982, 0.16050000000000075, 0.16924999999999812, 0.24899999999999878, 0.28224999999999945, 0.29325000000000045, 0.1927500000000002, 0.1739999999999995, 0.11450000000000138, 0.1877500000000012, 0.12599999999999945, 0.1899999999999995, 0.15850000000000009, 0.23100000000000165, 0.15549999999999997, 0.11074999999999946], zp_timestamp='2026-02-15T00:29:00')
2026-02-15T02:30:59.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-15T02:30:59.428 [DEBUG] [Thread-196376] [transport.py] [_log()] starting thread (client mode): 0xa2d03850
2026-02-15T02:30:59.428 [DEBUG] [Thread-196376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:30:59.443 [DEBUG] [Thread-196376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:30:59.443 [INFO] [Thread-196376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:30:59.451 [DEBUG] [Thread-196376] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:30:59.451 [DEBUG] [Thread-196376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:30:59.451 [DEBUG] [Thread-196376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:30:59.451 [DEBUG] [Thread-196376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:30:59.451 [DEBUG] [Thread-196376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:30:59.451 [DEBUG] [Thread-196376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:30:59.451 [DEBUG] [Thread-196376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:30:59.451 [DEBUG] [Thread-196376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:30:59.451 [DEBUG] [Thread-196376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:30:59.451 [DEBUG] [Thread-196376] [transport.py] [_log()] client lang: <none>
2026-02-15T02:30:59.451 [DEBUG] [Thread-196376] [transport.py] [_log()] server lang: <none>
2026-02-15T02:30:59.451 [DEBUG] [Thread-196376] [transport.py] [_log()] kex follows: False
2026-02-15T02:30:59.451 [DEBUG] [Thread-196376] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:30:59.451 [DEBUG] [Thread-196376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:30:59.451 [DEBUG] [Thread-196376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:30:59.452 [DEBUG] [Thread-196376] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:30:59.452 [DEBUG] [Thread-196376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:30:59.452 [DEBUG] [Thread-196376] [transport.py] [_log()] Compression: none
2026-02-15T02:30:59.452 [DEBUG] [Thread-196376] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:30:59.511 [DEBUG] [Thread-196376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:30:59.511 [DEBUG] [Thread-196376] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:30:59.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:30:59.513 [DEBUG] [Thread-196376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:30:59.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:30:59.570 [DEBUG] [Thread-196376] [transport.py] [_log()] userauth is OK
2026-02-15T02:30:59.570 [DEBUG] [Thread-196376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:30:59.571 [DEBUG] [Thread-196376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:30:59.571 [DEBUG] [Thread-196376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:30:59.571 [DEBUG] [Thread-196376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:30:59.592 [INFO] [Thread-196376] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:30:59.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-15T02:30:59.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:31:00.387 [DEBUG] [Thread-196376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:31:00.388 [DEBUG] [Thread-196376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:31:00.435 [DEBUG] [Thread-196376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:31:00.436 [DEBUG] [Thread-196376] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:31:00.445 [DEBUG] [Thread-196376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:31:00.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:31:00.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-15T02:31:00.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-15T02:31:00.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:31:00.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:31:00.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:31:00.482 [DEBUG] [Thread-196376] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:31:07.768 [DEBUG] [Thread-196378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:31:16.989 [DEBUG] [Thread-196379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:31:22.843 [DEBUG] [Thread-196380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:31:30.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:31:30.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:31:30.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-15T02:31:32.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 31, 14), 1.09, 92.81, 0.0, 33.95, 6.73, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:31:32.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:31:14
2026-02-15T02:31:33.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:31:33.227 [DEBUG] [Thread-196381] [transport.py] [_log()] starting thread (client mode): 0xa2d857b0
2026-02-15T02:31:33.228 [DEBUG] [Thread-196381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:31:33.248 [DEBUG] [Thread-196381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:31:33.248 [INFO] [Thread-196381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:31:33.251 [DEBUG] [Thread-196381] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:31:33.251 [DEBUG] [Thread-196381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:31:33.251 [DEBUG] [Thread-196381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:31:33.251 [DEBUG] [Thread-196381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:31:33.251 [DEBUG] [Thread-196381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:31:33.251 [DEBUG] [Thread-196381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:31:33.251 [DEBUG] [Thread-196381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:31:33.251 [DEBUG] [Thread-196381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:31:33.251 [DEBUG] [Thread-196381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:31:33.251 [DEBUG] [Thread-196381] [transport.py] [_log()] client lang: <none>
2026-02-15T02:31:33.251 [DEBUG] [Thread-196381] [transport.py] [_log()] server lang: <none>
2026-02-15T02:31:33.251 [DEBUG] [Thread-196381] [transport.py] [_log()] kex follows: False
2026-02-15T02:31:33.251 [DEBUG] [Thread-196381] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:31:33.251 [DEBUG] [Thread-196381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:31:33.251 [DEBUG] [Thread-196381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:31:33.251 [DEBUG] [Thread-196381] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:31:33.251 [DEBUG] [Thread-196381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:31:33.251 [DEBUG] [Thread-196381] [transport.py] [_log()] Compression: none
2026-02-15T02:31:33.251 [DEBUG] [Thread-196381] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:31:33.259 [DEBUG] [Thread-196381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:31:33.260 [DEBUG] [Thread-196381] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:31:33.260 [DEBUG] [Thread-196381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:31:33.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:31:33.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:31:33.261 [DEBUG] [Thread-196381] [transport.py] [_log()] userauth is OK
2026-02-15T02:31:33.262 [DEBUG] [Thread-196381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:31:33.262 [DEBUG] [Thread-196381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:31:33.262 [DEBUG] [Thread-196381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:31:33.262 [DEBUG] [Thread-196381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:31:33.281 [INFO] [Thread-196381] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:31:33.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:31:33.873 [DEBUG] [Thread-196381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:31:33.874 [DEBUG] [Thread-196381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:31:33.874 [DEBUG] [Thread-196381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:31:33.914 [DEBUG] [Thread-196381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:31:33.915 [DEBUG] [Thread-196381] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:31:33.918 [DEBUG] [Thread-196381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:31:33.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:31:33.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:31:33.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:31:33.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:31:33.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:31:33.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:31:33.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:31:33.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:31:33.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:31:33.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.021635 -999.00   +6.70  31.59     91   +5.40 1 1 2 3 1     0    0 1.14 -6.35 ZNESW 31.6 31.6 143.4 36.6 7.2 -24.0 7.1 -23.2 6.8 -22.0 7.2 -23.0
2026-02-15T02:31:33.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:31:33.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:31:33.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.021635
2026-02-15T02:31:33.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:31:33.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:31:33.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:31:33.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:31:33.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:31:33.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:31:14', tmtdew=1.09, humidity=92.81, cloud=0.0, wind=33.95, temperature=6.73, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:31:09.264', atlas_cloud=1, atlas_rain=1, zp_data=[1.095749999999999, 0.15775000000000006, 0.21825000000000117, 0.3614999999999995, 1.6820000000000004, 1.497250000000001, 1.9734999999999996, 0.5082500000000003, 0.21899999999999942, 0.08000000000000007, 0.10224999999999973, 0.23099999999999987, 0.5314999999999994, 0.6492499999999994, 0.6489999999999991, 0.31400000000000006, 0.17875000000000085, 0.10449999999999982, 0.16050000000000075, 0.16924999999999812, 0.24899999999999878, 0.28224999999999945, 0.29325000000000045, 0.1927500000000002, 0.1739999999999995, 0.11450000000000138, 0.1877500000000012, 0.12599999999999945, 0.1899999999999995, 0.15850000000000009, 0.23100000000000165, 0.15549999999999997, 0.11074999999999946], zp_timestamp='2026-02-15T00:29:00')
2026-02-15T02:31:33.945 [DEBUG] [Thread-196381] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:31:34.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-15T02:31:34.043 [DEBUG] [Thread-196384] [transport.py] [_log()] starting thread (client mode): 0xa57d4b20
2026-02-15T02:31:34.043 [DEBUG] [Thread-196384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:31:34.058 [DEBUG] [Thread-196384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:31:34.058 [INFO] [Thread-196384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:31:34.066 [DEBUG] [Thread-196384] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:31:34.066 [DEBUG] [Thread-196384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:31:34.066 [DEBUG] [Thread-196384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:31:34.066 [DEBUG] [Thread-196384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:31:34.066 [DEBUG] [Thread-196384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:31:34.066 [DEBUG] [Thread-196384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:31:34.066 [DEBUG] [Thread-196384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:31:34.066 [DEBUG] [Thread-196384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:31:34.066 [DEBUG] [Thread-196384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:31:34.066 [DEBUG] [Thread-196384] [transport.py] [_log()] client lang: <none>
2026-02-15T02:31:34.067 [DEBUG] [Thread-196384] [transport.py] [_log()] server lang: <none>
2026-02-15T02:31:34.067 [DEBUG] [Thread-196384] [transport.py] [_log()] kex follows: False
2026-02-15T02:31:34.067 [DEBUG] [Thread-196384] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:31:34.067 [DEBUG] [Thread-196384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:31:34.067 [DEBUG] [Thread-196384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:31:34.067 [DEBUG] [Thread-196384] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:31:34.067 [DEBUG] [Thread-196384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:31:34.067 [DEBUG] [Thread-196384] [transport.py] [_log()] Compression: none
2026-02-15T02:31:34.067 [DEBUG] [Thread-196384] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:31:34.126 [DEBUG] [Thread-196384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:31:34.127 [DEBUG] [Thread-196384] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:31:34.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:31:34.128 [DEBUG] [Thread-196384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:31:34.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:31:34.185 [DEBUG] [Thread-196384] [transport.py] [_log()] userauth is OK
2026-02-15T02:31:34.186 [DEBUG] [Thread-196384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:31:34.186 [DEBUG] [Thread-196384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:31:34.186 [DEBUG] [Thread-196384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:31:34.186 [DEBUG] [Thread-196384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:31:34.209 [INFO] [Thread-196384] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:31:34.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-15T02:31:34.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:31:34.984 [DEBUG] [Thread-196384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:31:34.984 [DEBUG] [Thread-196384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:31:35.034 [DEBUG] [Thread-196384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:31:35.035 [DEBUG] [Thread-196384] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:31:35.044 [DEBUG] [Thread-196384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:31:35.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:31:35.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:31:35.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:31:35.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:31:35.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:31:35.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:31:35.081 [DEBUG] [Thread-196384] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:31:37.878 [DEBUG] [Thread-196386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:31:44.979 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:31:44.980 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:31:52.938 [DEBUG] [Thread-196387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:32:05.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:32:05.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:32:05.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-15T02:32:06.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 31, 49), 1.1, 92.76, 0.0, 32.62, 6.67, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:32:06.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:31:49
2026-02-15T02:32:07.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:32:07.472 [DEBUG] [Thread-196388] [transport.py] [_log()] starting thread (client mode): 0xa57d7be0
2026-02-15T02:32:07.472 [DEBUG] [Thread-196388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:32:07.483 [DEBUG] [Thread-196388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:32:07.483 [INFO] [Thread-196388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:32:07.486 [DEBUG] [Thread-196388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:32:07.486 [DEBUG] [Thread-196388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:32:07.486 [DEBUG] [Thread-196388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:32:07.486 [DEBUG] [Thread-196388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:32:07.486 [DEBUG] [Thread-196388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:32:07.486 [DEBUG] [Thread-196388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:32:07.486 [DEBUG] [Thread-196388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:32:07.487 [DEBUG] [Thread-196388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:32:07.487 [DEBUG] [Thread-196388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:32:07.487 [DEBUG] [Thread-196388] [transport.py] [_log()] client lang: <none>
2026-02-15T02:32:07.487 [DEBUG] [Thread-196388] [transport.py] [_log()] server lang: <none>
2026-02-15T02:32:07.487 [DEBUG] [Thread-196388] [transport.py] [_log()] kex follows: False
2026-02-15T02:32:07.487 [DEBUG] [Thread-196388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:32:07.487 [DEBUG] [Thread-196388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:32:07.487 [DEBUG] [Thread-196388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:32:07.487 [DEBUG] [Thread-196388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:32:07.487 [DEBUG] [Thread-196388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:32:07.487 [DEBUG] [Thread-196388] [transport.py] [_log()] Compression: none
2026-02-15T02:32:07.487 [DEBUG] [Thread-196388] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:32:07.499 [DEBUG] [Thread-196388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:32:07.499 [DEBUG] [Thread-196388] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:32:07.499 [DEBUG] [Thread-196388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:32:07.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:32:07.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:32:07.501 [DEBUG] [Thread-196388] [transport.py] [_log()] userauth is OK
2026-02-15T02:32:07.501 [DEBUG] [Thread-196388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:32:07.501 [DEBUG] [Thread-196388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:32:07.501 [DEBUG] [Thread-196388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:32:07.501 [DEBUG] [Thread-196388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:32:07.515 [INFO] [Thread-196388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:32:07.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:32:07.974 [DEBUG] [Thread-196390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:32:08.153 [DEBUG] [Thread-196388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:32:08.153 [DEBUG] [Thread-196388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:32:08.154 [DEBUG] [Thread-196388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:32:08.194 [DEBUG] [Thread-196388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:32:08.195 [DEBUG] [Thread-196388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:32:08.197 [DEBUG] [Thread-196388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:32:08.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:32:08.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:32:08.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:32:08.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:32:08.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:32:08.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:32:08.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:32:08.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:32:08.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:32:08.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.021982 -999.00   +6.70  28.28     91   +5.40 1 1 1 3 1     0    0 1.15 -6.51 ZNESW 28.3 28.3 143.0 34.8 7.2 -23.9 7.0 -23.1 6.8 -22.0 7.2 -23.2
2026-02-15T02:32:08.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:32:08.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:32:08.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.021982
2026-02-15T02:32:08.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:32:08.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:32:08.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:32:08.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:32:08.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:32:08.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:31:49', tmtdew=1.1, humidity=92.76, cloud=0.0, wind=32.62, temperature=6.67, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:31:39.245', atlas_cloud=1, atlas_rain=1, zp_data=[1.095749999999999, 0.15775000000000006, 0.21825000000000117, 0.3614999999999995, 1.6820000000000004, 1.497250000000001, 1.9734999999999996, 0.5082500000000003, 0.21899999999999942, 0.08000000000000007, 0.10224999999999973, 0.23099999999999987, 0.5314999999999994, 0.6492499999999994, 0.6489999999999991, 0.31400000000000006, 0.17875000000000085, 0.10449999999999982, 0.16050000000000075, 0.16924999999999812, 0.24899999999999878, 0.28224999999999945, 0.29325000000000045, 0.1927500000000002, 0.1739999999999995, 0.11450000000000138, 0.1877500000000012, 0.12599999999999945, 0.1899999999999995, 0.15850000000000009, 0.23100000000000165, 0.15549999999999997, 0.11074999999999946], zp_timestamp='2026-02-15T00:29:00')
2026-02-15T02:32:08.221 [DEBUG] [Thread-196388] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:32:08.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-15T02:32:08.316 [DEBUG] [Thread-196392] [transport.py] [_log()] starting thread (client mode): 0xa57d61d0
2026-02-15T02:32:08.316 [DEBUG] [Thread-196392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:32:08.330 [DEBUG] [Thread-196392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:32:08.330 [INFO] [Thread-196392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:32:08.338 [DEBUG] [Thread-196392] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:32:08.338 [DEBUG] [Thread-196392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:32:08.338 [DEBUG] [Thread-196392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:32:08.338 [DEBUG] [Thread-196392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:32:08.338 [DEBUG] [Thread-196392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:32:08.338 [DEBUG] [Thread-196392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:32:08.338 [DEBUG] [Thread-196392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:32:08.338 [DEBUG] [Thread-196392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:32:08.338 [DEBUG] [Thread-196392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:32:08.338 [DEBUG] [Thread-196392] [transport.py] [_log()] client lang: <none>
2026-02-15T02:32:08.338 [DEBUG] [Thread-196392] [transport.py] [_log()] server lang: <none>
2026-02-15T02:32:08.338 [DEBUG] [Thread-196392] [transport.py] [_log()] kex follows: False
2026-02-15T02:32:08.338 [DEBUG] [Thread-196392] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:32:08.338 [DEBUG] [Thread-196392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:32:08.339 [DEBUG] [Thread-196392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:32:08.339 [DEBUG] [Thread-196392] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:32:08.339 [DEBUG] [Thread-196392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:32:08.339 [DEBUG] [Thread-196392] [transport.py] [_log()] Compression: none
2026-02-15T02:32:08.339 [DEBUG] [Thread-196392] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:32:08.397 [DEBUG] [Thread-196392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:32:08.398 [DEBUG] [Thread-196392] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:32:08.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:32:08.399 [DEBUG] [Thread-196392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:32:08.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:32:08.454 [DEBUG] [Thread-196392] [transport.py] [_log()] userauth is OK
2026-02-15T02:32:08.454 [DEBUG] [Thread-196392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:32:08.454 [DEBUG] [Thread-196392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:32:08.454 [DEBUG] [Thread-196392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:32:08.454 [DEBUG] [Thread-196392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:32:08.474 [INFO] [Thread-196392] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:32:08.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-15T02:32:08.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:32:09.265 [DEBUG] [Thread-196392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:32:09.265 [DEBUG] [Thread-196392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:32:09.313 [DEBUG] [Thread-196392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:32:09.314 [DEBUG] [Thread-196392] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:32:09.323 [DEBUG] [Thread-196392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:32:09.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:32:09.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-15T02:32:09.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-15T02:32:09.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:32:09.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:32:09.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:32:09.360 [DEBUG] [Thread-196392] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:32:17.058 [DEBUG] [Thread-196394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:32:23.010 [DEBUG] [Thread-196395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:32:38.071 [DEBUG] [Thread-196396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:32:39.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:32:39.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:32:39.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-15T02:32:41.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 32, 25), 1.09, 92.84, 0.0, 35.8, 6.73, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:32:41.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:32:25
2026-02-15T02:32:41.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:32:41.735 [DEBUG] [Thread-196397] [transport.py] [_log()] starting thread (client mode): 0xa2d185e0
2026-02-15T02:32:41.735 [DEBUG] [Thread-196397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:32:41.751 [DEBUG] [Thread-196397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:32:41.752 [INFO] [Thread-196397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:32:41.754 [DEBUG] [Thread-196397] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:32:41.754 [DEBUG] [Thread-196397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:32:41.754 [DEBUG] [Thread-196397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:32:41.754 [DEBUG] [Thread-196397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:32:41.754 [DEBUG] [Thread-196397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:32:41.754 [DEBUG] [Thread-196397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:32:41.754 [DEBUG] [Thread-196397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:32:41.754 [DEBUG] [Thread-196397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:32:41.754 [DEBUG] [Thread-196397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:32:41.754 [DEBUG] [Thread-196397] [transport.py] [_log()] client lang: <none>
2026-02-15T02:32:41.754 [DEBUG] [Thread-196397] [transport.py] [_log()] server lang: <none>
2026-02-15T02:32:41.754 [DEBUG] [Thread-196397] [transport.py] [_log()] kex follows: False
2026-02-15T02:32:41.754 [DEBUG] [Thread-196397] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:32:41.755 [DEBUG] [Thread-196397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:32:41.755 [DEBUG] [Thread-196397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:32:41.755 [DEBUG] [Thread-196397] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:32:41.755 [DEBUG] [Thread-196397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:32:41.755 [DEBUG] [Thread-196397] [transport.py] [_log()] Compression: none
2026-02-15T02:32:41.755 [DEBUG] [Thread-196397] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:32:41.763 [DEBUG] [Thread-196397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:32:41.764 [DEBUG] [Thread-196397] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:32:41.764 [DEBUG] [Thread-196397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:32:41.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:32:41.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:32:41.812 [DEBUG] [Thread-196397] [transport.py] [_log()] userauth is OK
2026-02-15T02:32:41.813 [DEBUG] [Thread-196397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:32:41.813 [DEBUG] [Thread-196397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:32:41.813 [DEBUG] [Thread-196397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:32:41.813 [DEBUG] [Thread-196397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:32:41.849 [INFO] [Thread-196397] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:32:41.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:32:42.433 [DEBUG] [Thread-196397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:32:42.434 [DEBUG] [Thread-196397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:32:42.434 [DEBUG] [Thread-196397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:32:42.474 [DEBUG] [Thread-196397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:32:42.474 [DEBUG] [Thread-196397] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:32:42.476 [DEBUG] [Thread-196397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:32:42.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:32:42.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:32:42.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:32:42.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:32:42.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:32:42.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:32:42.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:32:42.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:32:42.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:32:42.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.022329 -999.00   +6.60  31.24     91   +5.30 1 1 2 3 1     0    0 1.16 -6.17 ZNESW 31.2 31.2 141.8 36.8 7.2 -24.0 7.0 -23.1 6.8 -22.0 7.2 -23.1
2026-02-15T02:32:42.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:32:42.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:32:42.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.022329
2026-02-15T02:32:42.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:32:42.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:32:42.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:32:42.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:32:42.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:32:42.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:32:25', tmtdew=1.09, humidity=92.84, cloud=0.0, wind=35.8, temperature=6.73, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:32:09.226', atlas_cloud=1, atlas_rain=1, zp_data=[1.095749999999999, 0.15775000000000006, 0.21825000000000117, 0.3614999999999995, 1.6820000000000004, 1.497250000000001, 1.9734999999999996, 0.5082500000000003, 0.21899999999999942, 0.08000000000000007, 0.10224999999999973, 0.23099999999999987, 0.5314999999999994, 0.6492499999999994, 0.6489999999999991, 0.31400000000000006, 0.17875000000000085, 0.10449999999999982, 0.16050000000000075, 0.16924999999999812, 0.24899999999999878, 0.28224999999999945, 0.29325000000000045, 0.1927500000000002, 0.1739999999999995, 0.11450000000000138, 0.1877500000000012, 0.12599999999999945, 0.1899999999999995, 0.15850000000000009, 0.23100000000000165, 0.15549999999999997, 0.11074999999999946], zp_timestamp='2026-02-15T00:29:00')
2026-02-15T02:32:42.498 [DEBUG] [Thread-196397] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:32:42.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T02:32:42.595 [DEBUG] [Thread-196400] [transport.py] [_log()] starting thread (client mode): 0xa2d78d90
2026-02-15T02:32:42.595 [DEBUG] [Thread-196400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:32:42.609 [DEBUG] [Thread-196400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:32:42.610 [INFO] [Thread-196400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:32:42.618 [DEBUG] [Thread-196400] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:32:42.618 [DEBUG] [Thread-196400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:32:42.618 [DEBUG] [Thread-196400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:32:42.618 [DEBUG] [Thread-196400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:32:42.618 [DEBUG] [Thread-196400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:32:42.618 [DEBUG] [Thread-196400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:32:42.618 [DEBUG] [Thread-196400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:32:42.618 [DEBUG] [Thread-196400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:32:42.618 [DEBUG] [Thread-196400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:32:42.618 [DEBUG] [Thread-196400] [transport.py] [_log()] client lang: <none>
2026-02-15T02:32:42.618 [DEBUG] [Thread-196400] [transport.py] [_log()] server lang: <none>
2026-02-15T02:32:42.618 [DEBUG] [Thread-196400] [transport.py] [_log()] kex follows: False
2026-02-15T02:32:42.618 [DEBUG] [Thread-196400] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:32:42.618 [DEBUG] [Thread-196400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:32:42.618 [DEBUG] [Thread-196400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:32:42.619 [DEBUG] [Thread-196400] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:32:42.619 [DEBUG] [Thread-196400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:32:42.619 [DEBUG] [Thread-196400] [transport.py] [_log()] Compression: none
2026-02-15T02:32:42.619 [DEBUG] [Thread-196400] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:32:42.677 [DEBUG] [Thread-196400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:32:42.678 [DEBUG] [Thread-196400] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:32:42.678 [DEBUG] [Thread-196400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:32:42.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:32:42.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:32:42.733 [DEBUG] [Thread-196400] [transport.py] [_log()] userauth is OK
2026-02-15T02:32:42.734 [DEBUG] [Thread-196400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:32:42.734 [DEBUG] [Thread-196400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:32:42.734 [DEBUG] [Thread-196400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:32:42.734 [DEBUG] [Thread-196400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:32:42.753 [INFO] [Thread-196400] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:32:42.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-15T02:32:42.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:32:43.544 [DEBUG] [Thread-196400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:32:43.544 [DEBUG] [Thread-196400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:32:43.593 [DEBUG] [Thread-196400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:32:43.593 [DEBUG] [Thread-196400] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:32:43.602 [DEBUG] [Thread-196400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:32:43.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:32:43.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-15T02:32:43.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-15T02:32:43.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:32:43.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:32:43.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:32:43.640 [DEBUG] [Thread-196400] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:32:45.182 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:32:45.183 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:32:53.105 [DEBUG] [Thread-196402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:33:08.151 [DEBUG] [Thread-196403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:33:13.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:33:13.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:33:13.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-15T02:33:15.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 33, 1), 1.08, 92.86, 0.0, 33.84, 6.73, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:33:15.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:33:01
2026-02-15T02:33:16.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:33:16.322 [DEBUG] [Thread-196404] [transport.py] [_log()] starting thread (client mode): 0xa5742500
2026-02-15T02:33:16.322 [DEBUG] [Thread-196404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:33:16.342 [DEBUG] [Thread-196404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:33:16.342 [INFO] [Thread-196404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:33:16.344 [DEBUG] [Thread-196404] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:33:16.344 [DEBUG] [Thread-196404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:33:16.344 [DEBUG] [Thread-196404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:33:16.344 [DEBUG] [Thread-196404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:33:16.344 [DEBUG] [Thread-196404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:33:16.344 [DEBUG] [Thread-196404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:33:16.344 [DEBUG] [Thread-196404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:33:16.344 [DEBUG] [Thread-196404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:33:16.344 [DEBUG] [Thread-196404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:33:16.344 [DEBUG] [Thread-196404] [transport.py] [_log()] client lang: <none>
2026-02-15T02:33:16.344 [DEBUG] [Thread-196404] [transport.py] [_log()] server lang: <none>
2026-02-15T02:33:16.344 [DEBUG] [Thread-196404] [transport.py] [_log()] kex follows: False
2026-02-15T02:33:16.344 [DEBUG] [Thread-196404] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:33:16.344 [DEBUG] [Thread-196404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:33:16.344 [DEBUG] [Thread-196404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:33:16.344 [DEBUG] [Thread-196404] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:33:16.344 [DEBUG] [Thread-196404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:33:16.344 [DEBUG] [Thread-196404] [transport.py] [_log()] Compression: none
2026-02-15T02:33:16.344 [DEBUG] [Thread-196404] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:33:16.356 [DEBUG] [Thread-196404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:33:16.356 [DEBUG] [Thread-196404] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:33:16.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:33:16.357 [DEBUG] [Thread-196404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:33:16.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:33:16.361 [DEBUG] [Thread-196404] [transport.py] [_log()] userauth is OK
2026-02-15T02:33:16.361 [DEBUG] [Thread-196404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:33:16.361 [DEBUG] [Thread-196404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:33:16.362 [DEBUG] [Thread-196404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:33:16.362 [DEBUG] [Thread-196404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:33:16.381 [INFO] [Thread-196404] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:33:16.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:33:16.956 [DEBUG] [Thread-196404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:33:16.957 [DEBUG] [Thread-196404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:33:16.957 [DEBUG] [Thread-196404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:33:16.998 [DEBUG] [Thread-196404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:33:16.998 [DEBUG] [Thread-196404] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:33:17.000 [DEBUG] [Thread-196404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:33:17.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:33:17.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:33:17.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:33:17.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:33:17.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:33:17.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:33:17.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:33:17.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:33:17.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:33:17.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.023024 -999.00   +6.60  27.05     91   +5.30 1 1 1 3 1     0    0 1.19 -5.70 ZNESW 27.1 27.1 150.6 35.5 7.2 -23.8 7.0 -23.1 6.8 -22.0 7.2 -23.1
2026-02-15T02:33:17.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:33:17.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:33:17.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.023024
2026-02-15T02:33:17.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:33:17.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:33:17.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:33:17.020 [DEBUG] [Thread-196404] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:33:17.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:33:17.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:33:17.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:33:01', tmtdew=1.08, humidity=92.86, cloud=0.0, wind=33.84, temperature=6.73, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:33:09.274', atlas_cloud=1, atlas_rain=1, zp_data=[1.095749999999999, 0.15775000000000006, 0.21825000000000117, 0.3614999999999995, 1.6820000000000004, 1.497250000000001, 1.9734999999999996, 0.5082500000000003, 0.21899999999999942, 0.08000000000000007, 0.10224999999999973, 0.23099999999999987, 0.5314999999999994, 0.6492499999999994, 0.6489999999999991, 0.31400000000000006, 0.17875000000000085, 0.10449999999999982, 0.16050000000000075, 0.16924999999999812, 0.24899999999999878, 0.28224999999999945, 0.29325000000000045, 0.1927500000000002, 0.1739999999999995, 0.11450000000000138, 0.1877500000000012, 0.12599999999999945, 0.1899999999999995, 0.15850000000000009, 0.23100000000000165, 0.15549999999999997, 0.11074999999999946], zp_timestamp='2026-02-15T00:29:00')
2026-02-15T02:33:17.108 [DEBUG] [Thread-196407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:33:17.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-15T02:33:17.127 [DEBUG] [Thread-196408] [transport.py] [_log()] starting thread (client mode): 0xa2d6e1d0
2026-02-15T02:33:17.127 [DEBUG] [Thread-196408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:33:17.142 [DEBUG] [Thread-196408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:33:17.143 [INFO] [Thread-196408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:33:17.150 [DEBUG] [Thread-196408] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:33:17.151 [DEBUG] [Thread-196408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:33:17.151 [DEBUG] [Thread-196408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:33:17.151 [DEBUG] [Thread-196408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:33:17.151 [DEBUG] [Thread-196408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:33:17.151 [DEBUG] [Thread-196408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:33:17.151 [DEBUG] [Thread-196408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:33:17.151 [DEBUG] [Thread-196408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:33:17.151 [DEBUG] [Thread-196408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:33:17.151 [DEBUG] [Thread-196408] [transport.py] [_log()] client lang: <none>
2026-02-15T02:33:17.151 [DEBUG] [Thread-196408] [transport.py] [_log()] server lang: <none>
2026-02-15T02:33:17.151 [DEBUG] [Thread-196408] [transport.py] [_log()] kex follows: False
2026-02-15T02:33:17.151 [DEBUG] [Thread-196408] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:33:17.151 [DEBUG] [Thread-196408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:33:17.151 [DEBUG] [Thread-196408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:33:17.151 [DEBUG] [Thread-196408] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:33:17.151 [DEBUG] [Thread-196408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:33:17.151 [DEBUG] [Thread-196408] [transport.py] [_log()] Compression: none
2026-02-15T02:33:17.151 [DEBUG] [Thread-196408] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:33:17.212 [DEBUG] [Thread-196408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:33:17.212 [DEBUG] [Thread-196408] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:33:17.213 [DEBUG] [Thread-196408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:33:17.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:33:17.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:33:17.272 [DEBUG] [Thread-196408] [transport.py] [_log()] userauth is OK
2026-02-15T02:33:17.272 [DEBUG] [Thread-196408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:33:17.273 [DEBUG] [Thread-196408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:33:17.273 [DEBUG] [Thread-196408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:33:17.273 [DEBUG] [Thread-196408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:33:17.302 [INFO] [Thread-196408] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:33:17.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-15T02:33:17.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:33:18.100 [DEBUG] [Thread-196408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:33:18.100 [DEBUG] [Thread-196408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:33:18.149 [DEBUG] [Thread-196408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:33:18.149 [DEBUG] [Thread-196408] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:33:18.158 [DEBUG] [Thread-196408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:33:18.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:33:18.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:33:18.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-15T02:33:18.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:33:18.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:33:18.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:33:18.195 [DEBUG] [Thread-196408] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:33:23.187 [DEBUG] [Thread-196410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:33:38.236 [DEBUG] [Thread-196411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:33:45.388 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:33:45.389 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:33:48.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:33:48.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:33:48.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-15T02:33:50.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 33, 37), 1.56, 89.78, 0.0, 36.77, 7.07, 1, 1, 0, 2, 0, 0),)
2026-02-15T02:33:50.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:33:37
2026-02-15T02:33:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:33:51.273 [DEBUG] [Thread-196412] [transport.py] [_log()] starting thread (client mode): 0xa2d03a90
2026-02-15T02:33:51.273 [DEBUG] [Thread-196412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:33:51.291 [DEBUG] [Thread-196412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:33:51.291 [INFO] [Thread-196412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:33:51.294 [DEBUG] [Thread-196412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:33:51.294 [DEBUG] [Thread-196412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:33:51.294 [DEBUG] [Thread-196412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:33:51.294 [DEBUG] [Thread-196412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:33:51.294 [DEBUG] [Thread-196412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:33:51.294 [DEBUG] [Thread-196412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:33:51.294 [DEBUG] [Thread-196412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:33:51.294 [DEBUG] [Thread-196412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:33:51.294 [DEBUG] [Thread-196412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:33:51.294 [DEBUG] [Thread-196412] [transport.py] [_log()] client lang: <none>
2026-02-15T02:33:51.294 [DEBUG] [Thread-196412] [transport.py] [_log()] server lang: <none>
2026-02-15T02:33:51.294 [DEBUG] [Thread-196412] [transport.py] [_log()] kex follows: False
2026-02-15T02:33:51.294 [DEBUG] [Thread-196412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:33:51.294 [DEBUG] [Thread-196412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:33:51.294 [DEBUG] [Thread-196412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:33:51.294 [DEBUG] [Thread-196412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:33:51.294 [DEBUG] [Thread-196412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:33:51.294 [DEBUG] [Thread-196412] [transport.py] [_log()] Compression: none
2026-02-15T02:33:51.294 [DEBUG] [Thread-196412] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:33:51.311 [DEBUG] [Thread-196412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:33:51.311 [DEBUG] [Thread-196412] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:33:51.312 [DEBUG] [Thread-196412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:33:51.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:33:51.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:33:51.313 [DEBUG] [Thread-196412] [transport.py] [_log()] userauth is OK
2026-02-15T02:33:51.314 [DEBUG] [Thread-196412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:33:51.314 [DEBUG] [Thread-196412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:33:51.314 [DEBUG] [Thread-196412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:33:51.314 [DEBUG] [Thread-196412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:33:51.327 [INFO] [Thread-196412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:33:51.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:33:51.915 [DEBUG] [Thread-196412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:33:51.915 [DEBUG] [Thread-196412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:33:51.916 [DEBUG] [Thread-196412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:33:51.957 [DEBUG] [Thread-196412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:33:51.957 [DEBUG] [Thread-196412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:33:51.959 [DEBUG] [Thread-196412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:33:51.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:33:51.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:33:51.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:33:51.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:33:51.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:33:51.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:33:51.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:33:51.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:33:51.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:33:51.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.023371 -999.00   +6.60  30.17     91   +5.30 1 1 2 3 1     0    0 1.17 -5.56 ZNESW 30.2 30.2 145.2 32.9 7.2 -23.9 7.0 -23.1 6.8 -21.9 7.2 -23.1
2026-02-15T02:33:51.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:33:51.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:33:51.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.023371
2026-02-15T02:33:51.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:33:51.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:33:51.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:33:51.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:33:51.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:33:51.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:33:37', tmtdew=1.56, humidity=89.78, cloud=0.0, wind=36.77, temperature=7.07, tmtdew_warn=1, humidity_warn=1, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:33:39.254', atlas_cloud=1, atlas_rain=1, zp_data=[1.095749999999999, 0.15775000000000006, 0.21825000000000117, 0.3614999999999995, 1.6820000000000004, 1.497250000000001, 1.9734999999999996, 0.5082500000000003, 0.21899999999999942, 0.08000000000000007, 0.10224999999999973, 0.23099999999999987, 0.5314999999999994, 0.6492499999999994, 0.6489999999999991, 0.31400000000000006, 0.17875000000000085, 0.10449999999999982, 0.16050000000000075, 0.16924999999999812, 0.24899999999999878, 0.28224999999999945, 0.29325000000000045, 0.1927500000000002, 0.1739999999999995, 0.11450000000000138, 0.1877500000000012, 0.12599999999999945, 0.1899999999999995, 0.15850000000000009, 0.23100000000000165, 0.15549999999999997, 0.11074999999999946], zp_timestamp='2026-02-15T00:32:00')
2026-02-15T02:33:51.978 [DEBUG] [Thread-196412] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:33:52.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-15T02:33:52.074 [DEBUG] [Thread-196415] [transport.py] [_log()] starting thread (client mode): 0xa2d68c40
2026-02-15T02:33:52.075 [DEBUG] [Thread-196415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:33:52.089 [DEBUG] [Thread-196415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:33:52.089 [INFO] [Thread-196415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:33:52.097 [DEBUG] [Thread-196415] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:33:52.097 [DEBUG] [Thread-196415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:33:52.097 [DEBUG] [Thread-196415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:33:52.097 [DEBUG] [Thread-196415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:33:52.097 [DEBUG] [Thread-196415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:33:52.097 [DEBUG] [Thread-196415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:33:52.097 [DEBUG] [Thread-196415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:33:52.097 [DEBUG] [Thread-196415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:33:52.097 [DEBUG] [Thread-196415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:33:52.097 [DEBUG] [Thread-196415] [transport.py] [_log()] client lang: <none>
2026-02-15T02:33:52.097 [DEBUG] [Thread-196415] [transport.py] [_log()] server lang: <none>
2026-02-15T02:33:52.097 [DEBUG] [Thread-196415] [transport.py] [_log()] kex follows: False
2026-02-15T02:33:52.097 [DEBUG] [Thread-196415] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:33:52.097 [DEBUG] [Thread-196415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:33:52.097 [DEBUG] [Thread-196415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:33:52.098 [DEBUG] [Thread-196415] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:33:52.098 [DEBUG] [Thread-196415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:33:52.098 [DEBUG] [Thread-196415] [transport.py] [_log()] Compression: none
2026-02-15T02:33:52.098 [DEBUG] [Thread-196415] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:33:52.155 [DEBUG] [Thread-196415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:33:52.155 [DEBUG] [Thread-196415] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:33:52.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:33:52.157 [DEBUG] [Thread-196415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:33:52.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:33:52.211 [DEBUG] [Thread-196415] [transport.py] [_log()] userauth is OK
2026-02-15T02:33:52.211 [DEBUG] [Thread-196415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:33:52.211 [DEBUG] [Thread-196415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:33:52.211 [DEBUG] [Thread-196415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:33:52.212 [DEBUG] [Thread-196415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:33:52.234 [INFO] [Thread-196415] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:33:52.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-15T02:33:52.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:33:53.007 [DEBUG] [Thread-196415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:33:53.007 [DEBUG] [Thread-196415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:33:53.056 [DEBUG] [Thread-196415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:33:53.056 [DEBUG] [Thread-196415] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:33:53.065 [DEBUG] [Thread-196415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:33:53.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:33:53.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:33:53.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:33:53.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:33:53.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:33:53.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:33:53.099 [DEBUG] [Thread-196415] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:33:53.272 [DEBUG] [Thread-196417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:34:08.317 [DEBUG] [Thread-196418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:34:17.173 [DEBUG] [Thread-196419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:34:23.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:34:23.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:34:23.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:34:23.357 [DEBUG] [Thread-196420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:34:25.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 34, 13), 1.08, 92.89, 0.0, 33.79, 6.72, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:34:25.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:34:13
2026-02-15T02:34:25.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:34:25.522 [DEBUG] [Thread-196421] [transport.py] [_log()] starting thread (client mode): 0xa2de2050
2026-02-15T02:34:25.522 [DEBUG] [Thread-196421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:34:25.543 [DEBUG] [Thread-196421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:34:25.543 [INFO] [Thread-196421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:34:25.546 [DEBUG] [Thread-196421] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:34:25.546 [DEBUG] [Thread-196421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:34:25.546 [DEBUG] [Thread-196421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:34:25.546 [DEBUG] [Thread-196421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:34:25.546 [DEBUG] [Thread-196421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:34:25.546 [DEBUG] [Thread-196421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:34:25.546 [DEBUG] [Thread-196421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:34:25.546 [DEBUG] [Thread-196421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:34:25.547 [DEBUG] [Thread-196421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:34:25.547 [DEBUG] [Thread-196421] [transport.py] [_log()] client lang: <none>
2026-02-15T02:34:25.547 [DEBUG] [Thread-196421] [transport.py] [_log()] server lang: <none>
2026-02-15T02:34:25.547 [DEBUG] [Thread-196421] [transport.py] [_log()] kex follows: False
2026-02-15T02:34:25.547 [DEBUG] [Thread-196421] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:34:25.547 [DEBUG] [Thread-196421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:34:25.547 [DEBUG] [Thread-196421] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:34:25.547 [DEBUG] [Thread-196421] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:34:25.547 [DEBUG] [Thread-196421] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:34:25.547 [DEBUG] [Thread-196421] [transport.py] [_log()] Compression: none
2026-02-15T02:34:25.547 [DEBUG] [Thread-196421] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:34:25.566 [DEBUG] [Thread-196421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:34:25.566 [DEBUG] [Thread-196421] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:34:25.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:34:25.567 [DEBUG] [Thread-196421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:34:25.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:34:25.570 [DEBUG] [Thread-196421] [transport.py] [_log()] userauth is OK
2026-02-15T02:34:25.570 [DEBUG] [Thread-196421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:34:25.570 [DEBUG] [Thread-196421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:34:25.570 [DEBUG] [Thread-196421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:34:25.570 [DEBUG] [Thread-196421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:34:25.596 [INFO] [Thread-196421] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:34:25.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:34:26.167 [DEBUG] [Thread-196421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:34:26.167 [DEBUG] [Thread-196421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:34:26.167 [DEBUG] [Thread-196421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:34:26.207 [DEBUG] [Thread-196421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:34:26.208 [DEBUG] [Thread-196421] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:34:26.210 [DEBUG] [Thread-196421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:34:26.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:34:26.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:34:26.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:34:26.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:34:26.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:34:26.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:34:26.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:34:26.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:34:26.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:34:26.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.023718 -999.00   +6.60  23.60     91   +5.30 1 1 1 3 1     0    0 1.18 -5.72 ZNESW 23.6 23.6 144.8 29.5 7.2 -23.8 7.0 -23.1 6.8 -21.9 7.1 -23.0
2026-02-15T02:34:26.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:34:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:34:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.023718
2026-02-15T02:34:26.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:34:26.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:34:26.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:34:26.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:34:26.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:34:26.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:34:13', tmtdew=1.08, humidity=92.89, cloud=0.0, wind=33.79, temperature=6.72, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:34:09.235', atlas_cloud=1, atlas_rain=1, zp_data=[1.095749999999999, 0.15775000000000006, 0.21825000000000117, 0.3614999999999995, 1.6820000000000004, 1.497250000000001, 1.9734999999999996, 0.5082500000000003, 0.21899999999999942, 0.08000000000000007, 0.10224999999999973, 0.23099999999999987, 0.5314999999999994, 0.6492499999999994, 0.6489999999999991, 0.31400000000000006, 0.17875000000000085, 0.10449999999999982, 0.16050000000000075, 0.16924999999999812, 0.24899999999999878, 0.28224999999999945, 0.29325000000000045, 0.1927500000000002, 0.1739999999999995, 0.11450000000000138, 0.1877500000000012, 0.12599999999999945, 0.1899999999999995, 0.15850000000000009, 0.23100000000000165, 0.15549999999999997, 0.11074999999999946], zp_timestamp='2026-02-15T00:32:00')
2026-02-15T02:34:26.238 [DEBUG] [Thread-196421] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:34:26.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-15T02:34:26.335 [DEBUG] [Thread-196424] [transport.py] [_log()] starting thread (client mode): 0xa2d00c40
2026-02-15T02:34:26.335 [DEBUG] [Thread-196424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:34:26.351 [DEBUG] [Thread-196424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:34:26.351 [INFO] [Thread-196424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:34:26.359 [DEBUG] [Thread-196424] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:34:26.359 [DEBUG] [Thread-196424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:34:26.359 [DEBUG] [Thread-196424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:34:26.359 [DEBUG] [Thread-196424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:34:26.360 [DEBUG] [Thread-196424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:34:26.360 [DEBUG] [Thread-196424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:34:26.360 [DEBUG] [Thread-196424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:34:26.360 [DEBUG] [Thread-196424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:34:26.360 [DEBUG] [Thread-196424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:34:26.360 [DEBUG] [Thread-196424] [transport.py] [_log()] client lang: <none>
2026-02-15T02:34:26.360 [DEBUG] [Thread-196424] [transport.py] [_log()] server lang: <none>
2026-02-15T02:34:26.360 [DEBUG] [Thread-196424] [transport.py] [_log()] kex follows: False
2026-02-15T02:34:26.360 [DEBUG] [Thread-196424] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:34:26.361 [DEBUG] [Thread-196424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:34:26.361 [DEBUG] [Thread-196424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:34:26.361 [DEBUG] [Thread-196424] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:34:26.361 [DEBUG] [Thread-196424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:34:26.361 [DEBUG] [Thread-196424] [transport.py] [_log()] Compression: none
2026-02-15T02:34:26.361 [DEBUG] [Thread-196424] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:34:26.420 [DEBUG] [Thread-196424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:34:26.421 [DEBUG] [Thread-196424] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:34:26.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:34:26.422 [DEBUG] [Thread-196424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:34:26.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:34:26.476 [DEBUG] [Thread-196424] [transport.py] [_log()] userauth is OK
2026-02-15T02:34:26.476 [DEBUG] [Thread-196424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:34:26.476 [DEBUG] [Thread-196424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:34:26.476 [DEBUG] [Thread-196424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:34:26.477 [DEBUG] [Thread-196424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:34:26.496 [INFO] [Thread-196424] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:34:26.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-15T02:34:26.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:34:27.342 [DEBUG] [Thread-196424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:34:27.342 [DEBUG] [Thread-196424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:34:27.391 [DEBUG] [Thread-196424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:34:27.391 [DEBUG] [Thread-196424] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:34:27.401 [DEBUG] [Thread-196424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:34:27.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:34:27.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:34:27.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-15T02:34:27.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:34:27.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:34:27.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:34:27.439 [DEBUG] [Thread-196424] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:34:38.393 [DEBUG] [Thread-196426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:34:45.590 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:34:45.592 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:34:53.442 [DEBUG] [Thread-196427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:34:57.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:34:57.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:34:57.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-15T02:34:59.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 34, 48), 1.07, 92.93, 0.0, 34.46, 6.72, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:34:59.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:34:48
2026-02-15T02:34:59.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:34:59.858 [DEBUG] [Thread-196428] [transport.py] [_log()] starting thread (client mode): 0xa2d69570
2026-02-15T02:34:59.858 [DEBUG] [Thread-196428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:34:59.878 [DEBUG] [Thread-196428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:34:59.878 [INFO] [Thread-196428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:34:59.880 [DEBUG] [Thread-196428] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:34:59.880 [DEBUG] [Thread-196428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:34:59.880 [DEBUG] [Thread-196428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:34:59.880 [DEBUG] [Thread-196428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:34:59.880 [DEBUG] [Thread-196428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:34:59.880 [DEBUG] [Thread-196428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:34:59.880 [DEBUG] [Thread-196428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:34:59.880 [DEBUG] [Thread-196428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:34:59.880 [DEBUG] [Thread-196428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:34:59.880 [DEBUG] [Thread-196428] [transport.py] [_log()] client lang: <none>
2026-02-15T02:34:59.880 [DEBUG] [Thread-196428] [transport.py] [_log()] server lang: <none>
2026-02-15T02:34:59.880 [DEBUG] [Thread-196428] [transport.py] [_log()] kex follows: False
2026-02-15T02:34:59.880 [DEBUG] [Thread-196428] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:34:59.880 [DEBUG] [Thread-196428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:34:59.880 [DEBUG] [Thread-196428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:34:59.881 [DEBUG] [Thread-196428] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:34:59.881 [DEBUG] [Thread-196428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:34:59.881 [DEBUG] [Thread-196428] [transport.py] [_log()] Compression: none
2026-02-15T02:34:59.881 [DEBUG] [Thread-196428] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:34:59.891 [DEBUG] [Thread-196428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:34:59.892 [DEBUG] [Thread-196428] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:34:59.892 [DEBUG] [Thread-196428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:34:59.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:34:59.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:34:59.894 [DEBUG] [Thread-196428] [transport.py] [_log()] userauth is OK
2026-02-15T02:34:59.895 [DEBUG] [Thread-196428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:34:59.895 [DEBUG] [Thread-196428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:34:59.895 [DEBUG] [Thread-196428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:34:59.895 [DEBUG] [Thread-196428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:34:59.911 [INFO] [Thread-196428] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:34:59.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:35:00.526 [DEBUG] [Thread-196428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:35:00.526 [DEBUG] [Thread-196428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:35:00.527 [DEBUG] [Thread-196428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:35:00.567 [DEBUG] [Thread-196428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:35:00.567 [DEBUG] [Thread-196428] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:35:00.569 [DEBUG] [Thread-196428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:35:00.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:35:00.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:35:00.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:35:00.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:35:00.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:35:00.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:35:00.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:35:00.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:35:00.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:35:00.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.024065 -999.00   +6.50  23.52     91   +5.30 1 1 1 3 1     0    0 1.17 -6.03 ZNESW 23.5 23.5 147.2 37.3 7.2 -24.0 7.0 -23.1 6.8 -22.1 7.1 -23.1
2026-02-15T02:35:00.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:35:00.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:35:00.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.024065
2026-02-15T02:35:00.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:35:00.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:35:00.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:35:00.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:35:00.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:35:00.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:34:48', tmtdew=1.07, humidity=92.93, cloud=0.0, wind=34.46, temperature=6.72, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:34:39.216', atlas_cloud=1, atlas_rain=1, zp_data=[1.095749999999999, 0.15775000000000006, 0.21825000000000117, 0.3614999999999995, 1.6820000000000004, 1.497250000000001, 1.9734999999999996, 0.5082500000000003, 0.21899999999999942, 0.08000000000000007, 0.10224999999999973, 0.23099999999999987, 0.5314999999999994, 0.6492499999999994, 0.6489999999999991, 0.31400000000000006, 0.17875000000000085, 0.10449999999999982, 0.16050000000000075, 0.16924999999999812, 0.24899999999999878, 0.28224999999999945, 0.29325000000000045, 0.1927500000000002, 0.1739999999999995, 0.11450000000000138, 0.1877500000000012, 0.12599999999999945, 0.1899999999999995, 0.15850000000000009, 0.23100000000000165, 0.15549999999999997, 0.11074999999999946], zp_timestamp='2026-02-15T00:32:00')
2026-02-15T02:35:00.588 [DEBUG] [Thread-196428] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:35:00.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-15T02:35:00.685 [DEBUG] [Thread-196431] [transport.py] [_log()] starting thread (client mode): 0xa2d021a0
2026-02-15T02:35:00.685 [DEBUG] [Thread-196431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:35:00.700 [DEBUG] [Thread-196431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:35:00.700 [INFO] [Thread-196431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:35:00.707 [DEBUG] [Thread-196431] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:35:00.708 [DEBUG] [Thread-196431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:35:00.708 [DEBUG] [Thread-196431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:35:00.708 [DEBUG] [Thread-196431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:35:00.708 [DEBUG] [Thread-196431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:35:00.708 [DEBUG] [Thread-196431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:35:00.708 [DEBUG] [Thread-196431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:35:00.708 [DEBUG] [Thread-196431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:35:00.708 [DEBUG] [Thread-196431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:35:00.708 [DEBUG] [Thread-196431] [transport.py] [_log()] client lang: <none>
2026-02-15T02:35:00.709 [DEBUG] [Thread-196431] [transport.py] [_log()] server lang: <none>
2026-02-15T02:35:00.709 [DEBUG] [Thread-196431] [transport.py] [_log()] kex follows: False
2026-02-15T02:35:00.709 [DEBUG] [Thread-196431] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:35:00.709 [DEBUG] [Thread-196431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:35:00.709 [DEBUG] [Thread-196431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:35:00.709 [DEBUG] [Thread-196431] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:35:00.709 [DEBUG] [Thread-196431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:35:00.709 [DEBUG] [Thread-196431] [transport.py] [_log()] Compression: none
2026-02-15T02:35:00.709 [DEBUG] [Thread-196431] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:35:00.764 [DEBUG] [Thread-196431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:35:00.765 [DEBUG] [Thread-196431] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:35:00.765 [DEBUG] [Thread-196431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:35:00.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:35:00.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:35:00.820 [DEBUG] [Thread-196431] [transport.py] [_log()] userauth is OK
2026-02-15T02:35:00.820 [DEBUG] [Thread-196431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:35:00.821 [DEBUG] [Thread-196431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:35:00.821 [DEBUG] [Thread-196431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:35:00.821 [DEBUG] [Thread-196431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:35:00.843 [INFO] [Thread-196431] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:35:00.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-15T02:35:00.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:35:01.626 [DEBUG] [Thread-196431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:35:01.627 [DEBUG] [Thread-196431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:35:01.675 [DEBUG] [Thread-196431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:35:01.675 [DEBUG] [Thread-196431] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:35:01.684 [DEBUG] [Thread-196431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:35:01.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:35:01.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:35:01.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:35:01.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:35:01.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:35:01.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:35:01.721 [DEBUG] [Thread-196431] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:35:08.473 [DEBUG] [Thread-196433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:35:17.236 [DEBUG] [Thread-196434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:35:23.525 [DEBUG] [Thread-196435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:35:31.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:35:31.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:35:31.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-15T02:35:33.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 35, 23), 1.07, 92.94, 0.0, 35.16, 6.68, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:35:33.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:35:23
2026-02-15T02:35:34.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:35:34.349 [DEBUG] [Thread-196436] [transport.py] [_log()] starting thread (client mode): 0xa2d7a380
2026-02-15T02:35:34.349 [DEBUG] [Thread-196436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:35:34.369 [DEBUG] [Thread-196436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:35:34.369 [INFO] [Thread-196436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:35:34.374 [DEBUG] [Thread-196436] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:35:34.374 [DEBUG] [Thread-196436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:35:34.374 [DEBUG] [Thread-196436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:35:34.374 [DEBUG] [Thread-196436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:35:34.374 [DEBUG] [Thread-196436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:35:34.374 [DEBUG] [Thread-196436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:35:34.374 [DEBUG] [Thread-196436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:35:34.374 [DEBUG] [Thread-196436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:35:34.374 [DEBUG] [Thread-196436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:35:34.374 [DEBUG] [Thread-196436] [transport.py] [_log()] client lang: <none>
2026-02-15T02:35:34.374 [DEBUG] [Thread-196436] [transport.py] [_log()] server lang: <none>
2026-02-15T02:35:34.374 [DEBUG] [Thread-196436] [transport.py] [_log()] kex follows: False
2026-02-15T02:35:34.374 [DEBUG] [Thread-196436] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:35:34.374 [DEBUG] [Thread-196436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:35:34.374 [DEBUG] [Thread-196436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:35:34.374 [DEBUG] [Thread-196436] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:35:34.374 [DEBUG] [Thread-196436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:35:34.374 [DEBUG] [Thread-196436] [transport.py] [_log()] Compression: none
2026-02-15T02:35:34.374 [DEBUG] [Thread-196436] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:35:34.391 [DEBUG] [Thread-196436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:35:34.392 [DEBUG] [Thread-196436] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:35:34.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:35:34.393 [DEBUG] [Thread-196436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:35:34.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:35:34.395 [DEBUG] [Thread-196436] [transport.py] [_log()] userauth is OK
2026-02-15T02:35:34.395 [DEBUG] [Thread-196436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:35:34.395 [DEBUG] [Thread-196436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:35:34.395 [DEBUG] [Thread-196436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:35:34.396 [DEBUG] [Thread-196436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:35:34.419 [INFO] [Thread-196436] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:35:34.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:35:35.019 [DEBUG] [Thread-196436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:35:35.019 [DEBUG] [Thread-196436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:35:35.020 [DEBUG] [Thread-196436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:35:35.060 [DEBUG] [Thread-196436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:35:35.060 [DEBUG] [Thread-196436] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:35:35.063 [DEBUG] [Thread-196436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:35:35.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:35:35.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:35:35.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:35:35.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:35:35.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:35:35.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:35:35.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:35:35.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:35:35.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:35:35.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.024065 -999.00   +6.50  23.52     91   +5.30 1 1 1 3 1     0    0 1.17 -6.03 ZNESW 23.5 23.5 147.2 37.3 7.2 -24.0 7.0 -23.1 6.8 -22.1 7.1 -23.1
2026-02-15T02:35:35.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:35:35.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:35:35.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.024065
2026-02-15T02:35:35.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:35:35.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:35:35.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:35:35.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:35:35.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:35:35.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:35:23', tmtdew=1.07, humidity=92.94, cloud=0.0, wind=35.16, temperature=6.68, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:34:39.216', atlas_cloud=1, atlas_rain=1, zp_data=[1.095749999999999, 0.15775000000000006, 0.21825000000000117, 0.3614999999999995, 1.6820000000000004, 1.497250000000001, 1.9734999999999996, 0.5082500000000003, 0.21899999999999942, 0.08000000000000007, 0.10224999999999973, 0.23099999999999987, 0.5314999999999994, 0.6492499999999994, 0.6489999999999991, 0.31400000000000006, 0.17875000000000085, 0.10449999999999982, 0.16050000000000075, 0.16924999999999812, 0.24899999999999878, 0.28224999999999945, 0.29325000000000045, 0.1927500000000002, 0.1739999999999995, 0.11450000000000138, 0.1877500000000012, 0.12599999999999945, 0.1899999999999995, 0.15850000000000009, 0.23100000000000165, 0.15549999999999997, 0.11074999999999946], zp_timestamp='2026-02-15T00:32:00')
2026-02-15T02:35:35.089 [DEBUG] [Thread-196436] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:35:35.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-15T02:35:35.186 [DEBUG] [Thread-196439] [transport.py] [_log()] starting thread (client mode): 0xa5741fc0
2026-02-15T02:35:35.186 [DEBUG] [Thread-196439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:35:35.201 [DEBUG] [Thread-196439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:35:35.201 [INFO] [Thread-196439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:35:35.208 [DEBUG] [Thread-196439] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:35:35.209 [DEBUG] [Thread-196439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:35:35.209 [DEBUG] [Thread-196439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:35:35.209 [DEBUG] [Thread-196439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:35:35.209 [DEBUG] [Thread-196439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:35:35.209 [DEBUG] [Thread-196439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:35:35.209 [DEBUG] [Thread-196439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:35:35.210 [DEBUG] [Thread-196439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:35:35.210 [DEBUG] [Thread-196439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:35:35.210 [DEBUG] [Thread-196439] [transport.py] [_log()] client lang: <none>
2026-02-15T02:35:35.210 [DEBUG] [Thread-196439] [transport.py] [_log()] server lang: <none>
2026-02-15T02:35:35.210 [DEBUG] [Thread-196439] [transport.py] [_log()] kex follows: False
2026-02-15T02:35:35.210 [DEBUG] [Thread-196439] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:35:35.210 [DEBUG] [Thread-196439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:35:35.210 [DEBUG] [Thread-196439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:35:35.210 [DEBUG] [Thread-196439] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:35:35.211 [DEBUG] [Thread-196439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:35:35.211 [DEBUG] [Thread-196439] [transport.py] [_log()] Compression: none
2026-02-15T02:35:35.211 [DEBUG] [Thread-196439] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:35:35.270 [DEBUG] [Thread-196439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:35:35.271 [DEBUG] [Thread-196439] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:35:35.271 [DEBUG] [Thread-196439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:35:35.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:35:35.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:35:35.330 [DEBUG] [Thread-196439] [transport.py] [_log()] userauth is OK
2026-02-15T02:35:35.331 [DEBUG] [Thread-196439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:35:35.331 [DEBUG] [Thread-196439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:35:35.331 [DEBUG] [Thread-196439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:35:35.331 [DEBUG] [Thread-196439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:35:35.356 [INFO] [Thread-196439] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:35:35.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-15T02:35:35.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:35:36.143 [DEBUG] [Thread-196439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:35:36.143 [DEBUG] [Thread-196439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:35:36.191 [DEBUG] [Thread-196439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:35:36.191 [DEBUG] [Thread-196439] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:35:36.200 [DEBUG] [Thread-196439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:35:36.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:35:36.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-15T02:35:36.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:35:36.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:35:36.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:35:36.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:35:36.237 [DEBUG] [Thread-196439] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:35:38.560 [DEBUG] [Thread-196441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:35:45.796 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:35:45.797 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:35:53.619 [DEBUG] [Thread-196442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:36:06.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:36:06.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:36:06.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-15T02:36:08.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 35, 59), 1.03, 92.89, 0.0, 34.78, 6.57, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:36:08.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:35:59
2026-02-15T02:36:08.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:36:08.611 [DEBUG] [Thread-196443] [transport.py] [_log()] starting thread (client mode): 0xa2d68040
2026-02-15T02:36:08.611 [DEBUG] [Thread-196443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:36:08.631 [DEBUG] [Thread-196443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:36:08.631 [INFO] [Thread-196443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:36:08.635 [DEBUG] [Thread-196443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:36:08.635 [DEBUG] [Thread-196443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:36:08.635 [DEBUG] [Thread-196443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:36:08.635 [DEBUG] [Thread-196443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:36:08.635 [DEBUG] [Thread-196443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:36:08.635 [DEBUG] [Thread-196443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:36:08.635 [DEBUG] [Thread-196443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:36:08.635 [DEBUG] [Thread-196443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:36:08.635 [DEBUG] [Thread-196443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:36:08.635 [DEBUG] [Thread-196443] [transport.py] [_log()] client lang: <none>
2026-02-15T02:36:08.635 [DEBUG] [Thread-196443] [transport.py] [_log()] server lang: <none>
2026-02-15T02:36:08.636 [DEBUG] [Thread-196443] [transport.py] [_log()] kex follows: False
2026-02-15T02:36:08.636 [DEBUG] [Thread-196443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:36:08.636 [DEBUG] [Thread-196443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:36:08.636 [DEBUG] [Thread-196443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:36:08.636 [DEBUG] [Thread-196443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:36:08.636 [DEBUG] [Thread-196443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:36:08.636 [DEBUG] [Thread-196443] [transport.py] [_log()] Compression: none
2026-02-15T02:36:08.636 [DEBUG] [Thread-196443] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:36:08.655 [DEBUG] [Thread-196443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:36:08.656 [DEBUG] [Thread-196443] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:36:08.657 [DEBUG] [Thread-196443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:36:08.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:36:08.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:36:08.659 [DEBUG] [Thread-196445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:36:08.696 [DEBUG] [Thread-196443] [transport.py] [_log()] userauth is OK
2026-02-15T02:36:08.696 [DEBUG] [Thread-196443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:36:08.696 [DEBUG] [Thread-196443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:36:08.696 [DEBUG] [Thread-196443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:36:08.697 [DEBUG] [Thread-196443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:36:08.732 [INFO] [Thread-196443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:36:08.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:36:09.393 [DEBUG] [Thread-196443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:36:09.402 [DEBUG] [Thread-196443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:36:09.402 [DEBUG] [Thread-196443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:36:09.434 [DEBUG] [Thread-196443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:36:09.434 [DEBUG] [Thread-196443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:36:09.437 [DEBUG] [Thread-196443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:36:09.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:36:09.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:36:09.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:36:09.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:36:09.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:36:09.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:36:09.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:36:09.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:36:09.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:36:09.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.024412 -999.00   +6.60  25.72     91   +5.30 1 1 1 3 1     0    0 1.17 -5.61 ZNESW 25.7 25.7 157.4 39.1 7.2 -24.0 6.9 -23.1 6.8 -22.1 7.1 -23.4
2026-02-15T02:36:09.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:36:09.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:36:09.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.024412
2026-02-15T02:36:09.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:36:09.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:36:09.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:36:09.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:36:09.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:36:09.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:35:59', tmtdew=1.03, humidity=92.89, cloud=0.0, wind=34.78, temperature=6.57, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:35:09.197', atlas_cloud=1, atlas_rain=1, zp_data=[1.095749999999999, 0.15775000000000006, 0.21825000000000117, 0.3614999999999995, 1.6820000000000004, 1.497250000000001, 1.9734999999999996, 0.5082500000000003, 0.21899999999999942, 0.08000000000000007, 0.10224999999999973, 0.23099999999999987, 0.5314999999999994, 0.6492499999999994, 0.6489999999999991, 0.31400000000000006, 0.17875000000000085, 0.10449999999999982, 0.16050000000000075, 0.16924999999999812, 0.24899999999999878, 0.28224999999999945, 0.29325000000000045, 0.1927500000000002, 0.1739999999999995, 0.11450000000000138, 0.1877500000000012, 0.12599999999999945, 0.1899999999999995, 0.15850000000000009, 0.23100000000000165, 0.15549999999999997, 0.11074999999999946], zp_timestamp='2026-02-15T00:32:00')
2026-02-15T02:36:09.461 [DEBUG] [Thread-196443] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:36:09.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-15T02:36:09.556 [DEBUG] [Thread-196447] [transport.py] [_log()] starting thread (client mode): 0xa2d6ac80
2026-02-15T02:36:09.556 [DEBUG] [Thread-196447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:36:09.571 [DEBUG] [Thread-196447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:36:09.571 [INFO] [Thread-196447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:36:09.579 [DEBUG] [Thread-196447] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:36:09.579 [DEBUG] [Thread-196447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:36:09.579 [DEBUG] [Thread-196447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:36:09.579 [DEBUG] [Thread-196447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:36:09.579 [DEBUG] [Thread-196447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:36:09.579 [DEBUG] [Thread-196447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:36:09.579 [DEBUG] [Thread-196447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:36:09.579 [DEBUG] [Thread-196447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:36:09.579 [DEBUG] [Thread-196447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:36:09.579 [DEBUG] [Thread-196447] [transport.py] [_log()] client lang: <none>
2026-02-15T02:36:09.579 [DEBUG] [Thread-196447] [transport.py] [_log()] server lang: <none>
2026-02-15T02:36:09.579 [DEBUG] [Thread-196447] [transport.py] [_log()] kex follows: False
2026-02-15T02:36:09.579 [DEBUG] [Thread-196447] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:36:09.579 [DEBUG] [Thread-196447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:36:09.579 [DEBUG] [Thread-196447] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:36:09.580 [DEBUG] [Thread-196447] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:36:09.580 [DEBUG] [Thread-196447] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:36:09.580 [DEBUG] [Thread-196447] [transport.py] [_log()] Compression: none
2026-02-15T02:36:09.580 [DEBUG] [Thread-196447] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:36:09.638 [DEBUG] [Thread-196447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:36:09.639 [DEBUG] [Thread-196447] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:36:09.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:36:09.640 [DEBUG] [Thread-196447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:36:09.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:36:09.694 [DEBUG] [Thread-196447] [transport.py] [_log()] userauth is OK
2026-02-15T02:36:09.694 [DEBUG] [Thread-196447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:36:09.694 [DEBUG] [Thread-196447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:36:09.694 [DEBUG] [Thread-196447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:36:09.694 [DEBUG] [Thread-196447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:36:09.710 [INFO] [Thread-196447] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:36:09.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T02:36:09.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:36:10.496 [DEBUG] [Thread-196447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:36:10.497 [DEBUG] [Thread-196447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:36:10.545 [DEBUG] [Thread-196447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:36:10.545 [DEBUG] [Thread-196447] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:36:10.554 [DEBUG] [Thread-196447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:36:10.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:36:10.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:36:10.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:36:10.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:36:10.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:36:10.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:36:10.591 [DEBUG] [Thread-196447] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:36:17.306 [DEBUG] [Thread-196449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:36:23.696 [DEBUG] [Thread-196450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:36:38.745 [DEBUG] [Thread-196451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:36:40.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:36:40.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:36:40.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-15T02:36:42.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 36, 34), 1.52, 90.02, 0.0, 35.28, 6.94, 1, 2, 0, 2, 0, 0),)
2026-02-15T02:36:42.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:36:34
2026-02-15T02:36:42.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:36:42.946 [DEBUG] [Thread-196452] [transport.py] [_log()] starting thread (client mode): 0xa2de8d90
2026-02-15T02:36:42.946 [DEBUG] [Thread-196452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:36:42.966 [DEBUG] [Thread-196452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:36:42.966 [INFO] [Thread-196452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:36:42.969 [DEBUG] [Thread-196452] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:36:42.970 [DEBUG] [Thread-196452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:36:42.970 [DEBUG] [Thread-196452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:36:42.970 [DEBUG] [Thread-196452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:36:42.970 [DEBUG] [Thread-196452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:36:42.970 [DEBUG] [Thread-196452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:36:42.970 [DEBUG] [Thread-196452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:36:42.970 [DEBUG] [Thread-196452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:36:42.970 [DEBUG] [Thread-196452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:36:42.970 [DEBUG] [Thread-196452] [transport.py] [_log()] client lang: <none>
2026-02-15T02:36:42.970 [DEBUG] [Thread-196452] [transport.py] [_log()] server lang: <none>
2026-02-15T02:36:42.970 [DEBUG] [Thread-196452] [transport.py] [_log()] kex follows: False
2026-02-15T02:36:42.970 [DEBUG] [Thread-196452] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:36:42.970 [DEBUG] [Thread-196452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:36:42.970 [DEBUG] [Thread-196452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:36:42.970 [DEBUG] [Thread-196452] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:36:42.970 [DEBUG] [Thread-196452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:36:42.970 [DEBUG] [Thread-196452] [transport.py] [_log()] Compression: none
2026-02-15T02:36:42.970 [DEBUG] [Thread-196452] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:36:42.989 [DEBUG] [Thread-196452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:36:42.989 [DEBUG] [Thread-196452] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:36:42.990 [DEBUG] [Thread-196452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:36:42.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:36:42.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:36:42.992 [DEBUG] [Thread-196452] [transport.py] [_log()] userauth is OK
2026-02-15T02:36:42.992 [DEBUG] [Thread-196452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:36:42.993 [DEBUG] [Thread-196452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:36:42.993 [DEBUG] [Thread-196452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:36:42.993 [DEBUG] [Thread-196452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:36:43.011 [INFO] [Thread-196452] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:36:43.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:36:43.624 [DEBUG] [Thread-196452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:36:43.624 [DEBUG] [Thread-196452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:36:43.625 [DEBUG] [Thread-196452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:36:43.664 [DEBUG] [Thread-196452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:36:43.665 [DEBUG] [Thread-196452] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:36:43.668 [DEBUG] [Thread-196452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:36:43.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:36:43.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:36:43.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:36:43.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:36:43.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:36:43.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:36:43.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:36:43.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:36:43.701 [DEBUG] [Thread-196452] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:36:43.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:36:43.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.024760 -999.00   +6.50  28.13     91   +5.30 1 2 1 3 1     0    0 1.15 -6.06 zNESW 28.1 28.1 144.0 37.5 7.2 -24.0 6.9 -23.2 6.7 -22.0 7.1 -23.1
2026-02-15T02:36:43.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:36:43.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:36:43.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.024760
2026-02-15T02:36:43.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:36:43.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:36:43.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:36:43.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:36:43.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:36:43.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:36:34', tmtdew=1.52, humidity=90.02, cloud=0.0, wind=35.28, temperature=6.94, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:35:39.264', atlas_cloud=2, atlas_rain=1, zp_data=[2.2192499999999997, 0.5772500000000003, 0.7367500000000007, 0.4944999999999986, 2.316, 2.128750000000001, 2.226, 1.417250000000001, 0.766, 0.21750000000000114, 0.31824999999999903, 0.7119999999999997, 1.1349999999999998, 1.0172499999999998, 1.2289999999999992, 0.7809999999999997, 0.2942499999999999, 0.17849999999999966, 0.2959999999999994, 0.3802499999999984, 0.5304999999999991, 0.5462499999999988, 0.6072500000000005, 0.3567499999999999, 0.2724999999999991, 0.19250000000000078, 0.34025000000000105, 0.20650000000000013, 0.2765000000000004, 0.2890000000000006, 0.29800000000000093, 0.2685000000000013, 0.15024999999999977], zp_timestamp='2026-02-15T00:35:00')
2026-02-15T02:36:43.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T02:36:43.792 [DEBUG] [Thread-196455] [transport.py] [_log()] starting thread (client mode): 0xa2d6ece0
2026-02-15T02:36:43.793 [DEBUG] [Thread-196455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:36:43.809 [DEBUG] [Thread-196455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:36:43.809 [INFO] [Thread-196455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:36:43.817 [DEBUG] [Thread-196455] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:36:43.817 [DEBUG] [Thread-196455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:36:43.818 [DEBUG] [Thread-196455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:36:43.818 [DEBUG] [Thread-196455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:36:43.818 [DEBUG] [Thread-196455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:36:43.818 [DEBUG] [Thread-196455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:36:43.818 [DEBUG] [Thread-196455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:36:43.818 [DEBUG] [Thread-196455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:36:43.818 [DEBUG] [Thread-196455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:36:43.818 [DEBUG] [Thread-196455] [transport.py] [_log()] client lang: <none>
2026-02-15T02:36:43.818 [DEBUG] [Thread-196455] [transport.py] [_log()] server lang: <none>
2026-02-15T02:36:43.818 [DEBUG] [Thread-196455] [transport.py] [_log()] kex follows: False
2026-02-15T02:36:43.818 [DEBUG] [Thread-196455] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:36:43.818 [DEBUG] [Thread-196455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:36:43.818 [DEBUG] [Thread-196455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:36:43.818 [DEBUG] [Thread-196455] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:36:43.819 [DEBUG] [Thread-196455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:36:43.819 [DEBUG] [Thread-196455] [transport.py] [_log()] Compression: none
2026-02-15T02:36:43.819 [DEBUG] [Thread-196455] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:36:43.879 [DEBUG] [Thread-196455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:36:43.880 [DEBUG] [Thread-196455] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:36:43.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:36:43.881 [DEBUG] [Thread-196455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:36:43.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:36:43.935 [DEBUG] [Thread-196455] [transport.py] [_log()] userauth is OK
2026-02-15T02:36:43.936 [DEBUG] [Thread-196455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:36:43.936 [DEBUG] [Thread-196455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:36:43.936 [DEBUG] [Thread-196455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:36:43.936 [DEBUG] [Thread-196455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:36:43.955 [INFO] [Thread-196455] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:36:43.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-15T02:36:43.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:36:44.751 [DEBUG] [Thread-196455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:36:44.751 [DEBUG] [Thread-196455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:36:44.801 [DEBUG] [Thread-196455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:36:44.801 [DEBUG] [Thread-196455] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:36:44.811 [DEBUG] [Thread-196455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:36:44.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:36:44.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:36:44.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:36:44.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:36:44.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:36:44.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:36:44.853 [DEBUG] [Thread-196455] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:36:46.004 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:36:46.005 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:36:53.781 [DEBUG] [Thread-196457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:37:08.839 [DEBUG] [Thread-196458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:37:14.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:37:14.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:37:14.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-15T02:37:16.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 36, 34), 1.52, 90.02, 0.0, 35.28, 6.94, 1, 2, 0, 2, 0, 0),)
2026-02-15T02:37:16.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:36:34
2026-02-15T02:37:17.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:37:17.326 [DEBUG] [Thread-196459] [transport.py] [_log()] starting thread (client mode): 0xa2d11270
2026-02-15T02:37:17.326 [DEBUG] [Thread-196459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:37:17.345 [DEBUG] [Thread-196459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:37:17.345 [INFO] [Thread-196459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:37:17.349 [DEBUG] [Thread-196459] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:37:17.349 [DEBUG] [Thread-196459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:37:17.349 [DEBUG] [Thread-196459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:37:17.349 [DEBUG] [Thread-196459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:37:17.349 [DEBUG] [Thread-196459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:37:17.349 [DEBUG] [Thread-196459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:37:17.349 [DEBUG] [Thread-196459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:37:17.349 [DEBUG] [Thread-196459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:37:17.349 [DEBUG] [Thread-196459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:37:17.349 [DEBUG] [Thread-196459] [transport.py] [_log()] client lang: <none>
2026-02-15T02:37:17.349 [DEBUG] [Thread-196459] [transport.py] [_log()] server lang: <none>
2026-02-15T02:37:17.349 [DEBUG] [Thread-196459] [transport.py] [_log()] kex follows: False
2026-02-15T02:37:17.349 [DEBUG] [Thread-196459] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:37:17.349 [DEBUG] [Thread-196459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:37:17.349 [DEBUG] [Thread-196459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:37:17.349 [DEBUG] [Thread-196459] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:37:17.349 [DEBUG] [Thread-196459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:37:17.349 [DEBUG] [Thread-196459] [transport.py] [_log()] Compression: none
2026-02-15T02:37:17.349 [DEBUG] [Thread-196459] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:37:17.357 [DEBUG] [Thread-196461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:37:17.365 [DEBUG] [Thread-196459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:37:17.365 [DEBUG] [Thread-196459] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:37:17.365 [DEBUG] [Thread-196459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:37:17.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:37:17.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:37:17.366 [DEBUG] [Thread-196459] [transport.py] [_log()] userauth is OK
2026-02-15T02:37:17.366 [DEBUG] [Thread-196459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:37:17.366 [DEBUG] [Thread-196459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:37:17.366 [DEBUG] [Thread-196459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:37:17.366 [DEBUG] [Thread-196459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:37:17.380 [INFO] [Thread-196459] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:37:17.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:37:18.029 [DEBUG] [Thread-196459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:37:18.030 [DEBUG] [Thread-196459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:37:18.030 [DEBUG] [Thread-196459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:37:18.070 [DEBUG] [Thread-196459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:37:18.070 [DEBUG] [Thread-196459] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:37:18.073 [DEBUG] [Thread-196459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:37:18.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:37:18.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:37:18.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:37:18.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:37:18.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:37:18.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:37:18.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:37:18.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:37:18.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:37:18.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.025454 -999.00   +6.50  28.81     91   +5.20 1 2 1 3 1     0    0 1.13 -6.81 zNESW 28.8 28.8 141.0 39.0 7.1 -23.9 6.9 -23.2 6.7 -22.0 7.1 -23.5
2026-02-15T02:37:18.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:37:18.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:37:18.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.025454
2026-02-15T02:37:18.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:37:18.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:37:18.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:37:18.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:37:18.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:37:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:36:34', tmtdew=1.52, humidity=90.02, cloud=0.0, wind=35.28, temperature=6.94, tmtdew_warn=1, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:36:39.226', atlas_cloud=2, atlas_rain=1, zp_data=[2.2192499999999997, 0.5772500000000003, 0.7367500000000007, 0.4944999999999986, 2.316, 2.128750000000001, 2.226, 1.417250000000001, 0.766, 0.21750000000000114, 0.31824999999999903, 0.7119999999999997, 1.1349999999999998, 1.0172499999999998, 1.2289999999999992, 0.7809999999999997, 0.2942499999999999, 0.17849999999999966, 0.2959999999999994, 0.3802499999999984, 0.5304999999999991, 0.5462499999999988, 0.6072500000000005, 0.3567499999999999, 0.2724999999999991, 0.19250000000000078, 0.34025000000000105, 0.20650000000000013, 0.2765000000000004, 0.2890000000000006, 0.29800000000000093, 0.2685000000000013, 0.15024999999999977], zp_timestamp='2026-02-15T00:35:00')
2026-02-15T02:37:18.099 [DEBUG] [Thread-196459] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:37:18.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-15T02:37:18.198 [DEBUG] [Thread-196463] [transport.py] [_log()] starting thread (client mode): 0xa2d12a70
2026-02-15T02:37:18.198 [DEBUG] [Thread-196463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:37:18.214 [DEBUG] [Thread-196463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:37:18.214 [INFO] [Thread-196463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:37:18.222 [DEBUG] [Thread-196463] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:37:18.222 [DEBUG] [Thread-196463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:37:18.222 [DEBUG] [Thread-196463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:37:18.222 [DEBUG] [Thread-196463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:37:18.223 [DEBUG] [Thread-196463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:37:18.223 [DEBUG] [Thread-196463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:37:18.223 [DEBUG] [Thread-196463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:37:18.223 [DEBUG] [Thread-196463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:37:18.223 [DEBUG] [Thread-196463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:37:18.223 [DEBUG] [Thread-196463] [transport.py] [_log()] client lang: <none>
2026-02-15T02:37:18.223 [DEBUG] [Thread-196463] [transport.py] [_log()] server lang: <none>
2026-02-15T02:37:18.223 [DEBUG] [Thread-196463] [transport.py] [_log()] kex follows: False
2026-02-15T02:37:18.223 [DEBUG] [Thread-196463] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:37:18.223 [DEBUG] [Thread-196463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:37:18.223 [DEBUG] [Thread-196463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:37:18.223 [DEBUG] [Thread-196463] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:37:18.223 [DEBUG] [Thread-196463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:37:18.223 [DEBUG] [Thread-196463] [transport.py] [_log()] Compression: none
2026-02-15T02:37:18.223 [DEBUG] [Thread-196463] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:37:18.279 [DEBUG] [Thread-196463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:37:18.280 [DEBUG] [Thread-196463] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:37:18.281 [DEBUG] [Thread-196463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:37:18.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:37:18.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:37:18.336 [DEBUG] [Thread-196463] [transport.py] [_log()] userauth is OK
2026-02-15T02:37:18.336 [DEBUG] [Thread-196463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:37:18.336 [DEBUG] [Thread-196463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:37:18.336 [DEBUG] [Thread-196463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:37:18.336 [DEBUG] [Thread-196463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:37:18.355 [INFO] [Thread-196463] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:37:18.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-15T02:37:18.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:37:19.144 [DEBUG] [Thread-196463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:37:19.144 [DEBUG] [Thread-196463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:37:19.192 [DEBUG] [Thread-196463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:37:19.192 [DEBUG] [Thread-196463] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:37:19.201 [DEBUG] [Thread-196463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:37:19.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:37:19.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:37:19.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:37:19.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:37:19.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:37:19.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:37:19.239 [DEBUG] [Thread-196463] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:37:23.874 [DEBUG] [Thread-196465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:37:38.923 [DEBUG] [Thread-196466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:37:46.211 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:37:46.212 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:37:49.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:37:49.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:37:49.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:37:51.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 37, 9), 1.06, 93.03, 0.0, 35.01, 6.6, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:37:51.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:37:09
2026-02-15T02:37:51.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:37:51.678 [DEBUG] [Thread-196467] [transport.py] [_log()] starting thread (client mode): 0xa2de9060
2026-02-15T02:37:51.678 [DEBUG] [Thread-196467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:37:51.695 [DEBUG] [Thread-196467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:37:51.695 [INFO] [Thread-196467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:37:51.696 [DEBUG] [Thread-196467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:37:51.696 [DEBUG] [Thread-196467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:37:51.697 [DEBUG] [Thread-196467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:37:51.697 [DEBUG] [Thread-196467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:37:51.697 [DEBUG] [Thread-196467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:37:51.697 [DEBUG] [Thread-196467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:37:51.697 [DEBUG] [Thread-196467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:37:51.697 [DEBUG] [Thread-196467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:37:51.697 [DEBUG] [Thread-196467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:37:51.697 [DEBUG] [Thread-196467] [transport.py] [_log()] client lang: <none>
2026-02-15T02:37:51.697 [DEBUG] [Thread-196467] [transport.py] [_log()] server lang: <none>
2026-02-15T02:37:51.697 [DEBUG] [Thread-196467] [transport.py] [_log()] kex follows: False
2026-02-15T02:37:51.697 [DEBUG] [Thread-196467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:37:51.697 [DEBUG] [Thread-196467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:37:51.697 [DEBUG] [Thread-196467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:37:51.697 [DEBUG] [Thread-196467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:37:51.697 [DEBUG] [Thread-196467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:37:51.697 [DEBUG] [Thread-196467] [transport.py] [_log()] Compression: none
2026-02-15T02:37:51.697 [DEBUG] [Thread-196467] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:37:51.705 [DEBUG] [Thread-196467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:37:51.705 [DEBUG] [Thread-196467] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:37:51.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:37:51.706 [DEBUG] [Thread-196467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:37:51.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:37:51.714 [DEBUG] [Thread-196467] [transport.py] [_log()] userauth is OK
2026-02-15T02:37:51.714 [DEBUG] [Thread-196467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:37:51.715 [DEBUG] [Thread-196467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:37:51.715 [DEBUG] [Thread-196467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:37:51.715 [DEBUG] [Thread-196467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:37:51.735 [INFO] [Thread-196467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:37:51.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:37:52.410 [DEBUG] [Thread-196467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:37:52.410 [DEBUG] [Thread-196467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:37:52.411 [DEBUG] [Thread-196467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:37:52.451 [DEBUG] [Thread-196467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:37:52.452 [DEBUG] [Thread-196467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:37:52.455 [DEBUG] [Thread-196467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:37:52.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:37:52.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:37:52.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:37:52.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:37:52.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:37:52.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:37:52.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:37:52.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:37:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:37:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.025801 -999.00   +6.50  23.40     91   +5.20 1 2 1 3 1     0    0 1.16 -6.29 zNESW 23.4 23.4 148.6 35.0 7.1 -23.7 6.9 -23.1 6.7 -21.9 7.0 -23.2
2026-02-15T02:37:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:37:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:37:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.025801
2026-02-15T02:37:52.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:37:52.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:37:52.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:37:52.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:37:52.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:37:52.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:37:09', tmtdew=1.06, humidity=93.03, cloud=0.0, wind=35.01, temperature=6.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:37:09.206', atlas_cloud=2, atlas_rain=1, zp_data=[2.2192499999999997, 0.5772500000000003, 0.7367500000000007, 0.4944999999999986, 2.316, 2.128750000000001, 2.226, 1.417250000000001, 0.766, 0.21750000000000114, 0.31824999999999903, 0.7119999999999997, 1.1349999999999998, 1.0172499999999998, 1.2289999999999992, 0.7809999999999997, 0.2942499999999999, 0.17849999999999966, 0.2959999999999994, 0.3802499999999984, 0.5304999999999991, 0.5462499999999988, 0.6072500000000005, 0.3567499999999999, 0.2724999999999991, 0.19250000000000078, 0.34025000000000105, 0.20650000000000013, 0.2765000000000004, 0.2890000000000006, 0.29800000000000093, 0.2685000000000013, 0.15024999999999977], zp_timestamp='2026-02-15T00:35:00')
2026-02-15T02:37:52.483 [DEBUG] [Thread-196467] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:37:52.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-15T02:37:52.574 [DEBUG] [Thread-196470] [transport.py] [_log()] starting thread (client mode): 0xa2de86d0
2026-02-15T02:37:52.574 [DEBUG] [Thread-196470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:37:52.588 [DEBUG] [Thread-196470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:37:52.589 [INFO] [Thread-196470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:37:52.597 [DEBUG] [Thread-196470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:37:52.597 [DEBUG] [Thread-196470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:37:52.598 [DEBUG] [Thread-196470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:37:52.598 [DEBUG] [Thread-196470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:37:52.598 [DEBUG] [Thread-196470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:37:52.598 [DEBUG] [Thread-196470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:37:52.598 [DEBUG] [Thread-196470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:37:52.598 [DEBUG] [Thread-196470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:37:52.598 [DEBUG] [Thread-196470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:37:52.598 [DEBUG] [Thread-196470] [transport.py] [_log()] client lang: <none>
2026-02-15T02:37:52.598 [DEBUG] [Thread-196470] [transport.py] [_log()] server lang: <none>
2026-02-15T02:37:52.598 [DEBUG] [Thread-196470] [transport.py] [_log()] kex follows: False
2026-02-15T02:37:52.598 [DEBUG] [Thread-196470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:37:52.598 [DEBUG] [Thread-196470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:37:52.598 [DEBUG] [Thread-196470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:37:52.598 [DEBUG] [Thread-196470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:37:52.599 [DEBUG] [Thread-196470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:37:52.599 [DEBUG] [Thread-196470] [transport.py] [_log()] Compression: none
2026-02-15T02:37:52.599 [DEBUG] [Thread-196470] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:37:52.656 [DEBUG] [Thread-196470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:37:52.657 [DEBUG] [Thread-196470] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:37:52.657 [DEBUG] [Thread-196470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:37:52.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:37:52.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:37:52.713 [DEBUG] [Thread-196470] [transport.py] [_log()] userauth is OK
2026-02-15T02:37:52.713 [DEBUG] [Thread-196470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:37:52.713 [DEBUG] [Thread-196470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:37:52.713 [DEBUG] [Thread-196470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:37:52.713 [DEBUG] [Thread-196470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:37:52.732 [INFO] [Thread-196470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:37:52.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T02:37:52.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:37:53.524 [DEBUG] [Thread-196470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:37:53.524 [DEBUG] [Thread-196470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:37:53.573 [DEBUG] [Thread-196470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:37:53.573 [DEBUG] [Thread-196470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:37:53.583 [DEBUG] [Thread-196470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:37:53.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:37:53.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-15T02:37: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-15T02:37:53.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:37:53.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:37:53.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:37:53.623 [DEBUG] [Thread-196470] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:37:53.958 [DEBUG] [Thread-196472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:38:09.011 [DEBUG] [Thread-196473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:38:17.425 [DEBUG] [Thread-196474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:38:23.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:38:23.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:38:23.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:38:24.047 [DEBUG] [Thread-196475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:38:25.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 37, 45), 1.0, 93.06, 0.0, 36.45, 6.55, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:38:25.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:37:45
2026-02-15T02:38:26.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:38:26.290 [DEBUG] [Thread-196476] [transport.py] [_log()] starting thread (client mode): 0xa2debdc0
2026-02-15T02:38:26.290 [DEBUG] [Thread-196476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:38:26.311 [DEBUG] [Thread-196476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:38:26.311 [INFO] [Thread-196476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:38:26.314 [DEBUG] [Thread-196476] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:38:26.314 [DEBUG] [Thread-196476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:38:26.314 [DEBUG] [Thread-196476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:38:26.314 [DEBUG] [Thread-196476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:38:26.314 [DEBUG] [Thread-196476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:38:26.314 [DEBUG] [Thread-196476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:38:26.314 [DEBUG] [Thread-196476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:38:26.314 [DEBUG] [Thread-196476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:38:26.314 [DEBUG] [Thread-196476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:38:26.314 [DEBUG] [Thread-196476] [transport.py] [_log()] client lang: <none>
2026-02-15T02:38:26.315 [DEBUG] [Thread-196476] [transport.py] [_log()] server lang: <none>
2026-02-15T02:38:26.315 [DEBUG] [Thread-196476] [transport.py] [_log()] kex follows: False
2026-02-15T02:38:26.315 [DEBUG] [Thread-196476] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:38:26.315 [DEBUG] [Thread-196476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:38:26.315 [DEBUG] [Thread-196476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:38:26.315 [DEBUG] [Thread-196476] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:38:26.315 [DEBUG] [Thread-196476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:38:26.315 [DEBUG] [Thread-196476] [transport.py] [_log()] Compression: none
2026-02-15T02:38:26.315 [DEBUG] [Thread-196476] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:38:26.332 [DEBUG] [Thread-196476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:38:26.333 [DEBUG] [Thread-196476] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:38:26.333 [DEBUG] [Thread-196476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:38:26.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:38:26.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:38:26.336 [DEBUG] [Thread-196476] [transport.py] [_log()] userauth is OK
2026-02-15T02:38:26.336 [DEBUG] [Thread-196476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:38:26.336 [DEBUG] [Thread-196476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:38:26.336 [DEBUG] [Thread-196476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:38:26.336 [DEBUG] [Thread-196476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:38:26.372 [INFO] [Thread-196476] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:38:26.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:38:27.033 [DEBUG] [Thread-196476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:38:27.034 [DEBUG] [Thread-196476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:38:27.034 [DEBUG] [Thread-196476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:38:27.074 [DEBUG] [Thread-196476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:38:27.075 [DEBUG] [Thread-196476] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:38:27.078 [DEBUG] [Thread-196476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:38:27.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:38:27.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:38:27.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:38:27.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:38:27.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:38:27.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:38:27.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:38:27.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:38:27.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:38:27.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.026149 -999.00   +6.40  27.70     91   +5.20 1 2 1 3 1     0    0 1.13 -6.03 zNESW 27.7 27.7 145.4 32.5 7.1 -23.7 6.9 -22.8 6.7 -21.5 7.0 -22.9
2026-02-15T02:38:27.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:38:27.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:38:27.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.026149
2026-02-15T02:38:27.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:38:27.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:38:27.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:38:27.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:38:27.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:38:27.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:37:45', tmtdew=1.0, humidity=93.06, cloud=0.0, wind=36.45, temperature=6.55, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:37:39.274', atlas_cloud=2, atlas_rain=1, zp_data=[2.2192499999999997, 0.5772500000000003, 0.7367500000000007, 0.4944999999999986, 2.316, 2.128750000000001, 2.226, 1.417250000000001, 0.766, 0.21750000000000114, 0.31824999999999903, 0.7119999999999997, 1.1349999999999998, 1.0172499999999998, 1.2289999999999992, 0.7809999999999997, 0.2942499999999999, 0.17849999999999966, 0.2959999999999994, 0.3802499999999984, 0.5304999999999991, 0.5462499999999988, 0.6072500000000005, 0.3567499999999999, 0.2724999999999991, 0.19250000000000078, 0.34025000000000105, 0.20650000000000013, 0.2765000000000004, 0.2890000000000006, 0.29800000000000093, 0.2685000000000013, 0.15024999999999977], zp_timestamp='2026-02-15T00:35:00')
2026-02-15T02:38:27.106 [DEBUG] [Thread-196476] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:38:27.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-15T02:38:27.205 [DEBUG] [Thread-196479] [transport.py] [_log()] starting thread (client mode): 0xa2d1aa10
2026-02-15T02:38:27.206 [DEBUG] [Thread-196479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:38:27.224 [DEBUG] [Thread-196479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:38:27.224 [INFO] [Thread-196479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:38:27.236 [DEBUG] [Thread-196479] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:38:27.236 [DEBUG] [Thread-196479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:38:27.236 [DEBUG] [Thread-196479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:38:27.236 [DEBUG] [Thread-196479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:38:27.236 [DEBUG] [Thread-196479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:38:27.236 [DEBUG] [Thread-196479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:38:27.236 [DEBUG] [Thread-196479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:38:27.236 [DEBUG] [Thread-196479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:38:27.236 [DEBUG] [Thread-196479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:38:27.236 [DEBUG] [Thread-196479] [transport.py] [_log()] client lang: <none>
2026-02-15T02:38:27.237 [DEBUG] [Thread-196479] [transport.py] [_log()] server lang: <none>
2026-02-15T02:38:27.237 [DEBUG] [Thread-196479] [transport.py] [_log()] kex follows: False
2026-02-15T02:38:27.237 [DEBUG] [Thread-196479] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:38:27.237 [DEBUG] [Thread-196479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:38:27.237 [DEBUG] [Thread-196479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:38:27.237 [DEBUG] [Thread-196479] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:38:27.237 [DEBUG] [Thread-196479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:38:27.237 [DEBUG] [Thread-196479] [transport.py] [_log()] Compression: none
2026-02-15T02:38:27.237 [DEBUG] [Thread-196479] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:38:27.300 [DEBUG] [Thread-196479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:38:27.300 [DEBUG] [Thread-196479] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:38:27.300 [DEBUG] [Thread-196479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:38:27.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:38:27.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:38:27.357 [DEBUG] [Thread-196479] [transport.py] [_log()] userauth is OK
2026-02-15T02:38:27.357 [DEBUG] [Thread-196479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:38:27.357 [DEBUG] [Thread-196479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:38:27.357 [DEBUG] [Thread-196479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:38:27.358 [DEBUG] [Thread-196479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:38:27.382 [INFO] [Thread-196479] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:38:27.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-15T02:38:27.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:38:28.186 [DEBUG] [Thread-196479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:38:28.186 [DEBUG] [Thread-196479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:38:28.234 [DEBUG] [Thread-196479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:38:28.235 [DEBUG] [Thread-196479] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:38:28.244 [DEBUG] [Thread-196479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:38:28.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:38:28.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-15T02:38: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') -> 00000000
2026-02-15T02:38:28.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:38:28.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:38:28.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:38:28.281 [DEBUG] [Thread-196479] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:38:39.084 [DEBUG] [Thread-196481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:38:46.415 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:38:46.416 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:38:54.146 [DEBUG] [Thread-196482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:38:58.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:38:58.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:38:58.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-15T02:39:00.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 38, 20), 1.01, 93.03, 0.0, 37.44, 6.5, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:39:00.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:38:20
2026-02-15T02:39:01.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:39:01.202 [DEBUG] [Thread-196483] [transport.py] [_log()] starting thread (client mode): 0xa2d6d4b0
2026-02-15T02:39:01.203 [DEBUG] [Thread-196483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:39:01.223 [DEBUG] [Thread-196483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:39:01.224 [INFO] [Thread-196483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:39:01.225 [DEBUG] [Thread-196483] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:39:01.225 [DEBUG] [Thread-196483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:39:01.225 [DEBUG] [Thread-196483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:39:01.225 [DEBUG] [Thread-196483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:39:01.225 [DEBUG] [Thread-196483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:39:01.225 [DEBUG] [Thread-196483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:39:01.225 [DEBUG] [Thread-196483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:39:01.226 [DEBUG] [Thread-196483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:39:01.226 [DEBUG] [Thread-196483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:39:01.226 [DEBUG] [Thread-196483] [transport.py] [_log()] client lang: <none>
2026-02-15T02:39:01.226 [DEBUG] [Thread-196483] [transport.py] [_log()] server lang: <none>
2026-02-15T02:39:01.226 [DEBUG] [Thread-196483] [transport.py] [_log()] kex follows: False
2026-02-15T02:39:01.226 [DEBUG] [Thread-196483] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:39:01.226 [DEBUG] [Thread-196483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:39:01.226 [DEBUG] [Thread-196483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:39:01.226 [DEBUG] [Thread-196483] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:39:01.226 [DEBUG] [Thread-196483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:39:01.226 [DEBUG] [Thread-196483] [transport.py] [_log()] Compression: none
2026-02-15T02:39:01.226 [DEBUG] [Thread-196483] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:39:01.245 [DEBUG] [Thread-196483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:39:01.245 [DEBUG] [Thread-196483] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:39:01.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:39:01.247 [DEBUG] [Thread-196483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:39:01.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:39:01.249 [DEBUG] [Thread-196483] [transport.py] [_log()] userauth is OK
2026-02-15T02:39:01.250 [DEBUG] [Thread-196483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:39:01.250 [DEBUG] [Thread-196483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:39:01.250 [DEBUG] [Thread-196483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:39:01.250 [DEBUG] [Thread-196483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:39:01.276 [INFO] [Thread-196483] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:39:01.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:39:01.929 [DEBUG] [Thread-196483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:39:01.929 [DEBUG] [Thread-196483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:39:01.929 [DEBUG] [Thread-196483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:39:01.970 [DEBUG] [Thread-196483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:39:01.971 [DEBUG] [Thread-196483] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:39:01.974 [DEBUG] [Thread-196483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:39:01.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:39:01.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:39:01.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:39:01.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:39:01.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:39:01.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:39:01.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:39:01.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:39:01.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:39:01.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.026496 -999.00   +6.40  25.12     91   +5.20 1 1 1 3 1     0    0 1.13 -5.84 ZNESW 25.1 25.1 151.0 38.6 7.0 -23.2 6.9 -22.1 6.7 -21.5 7.0 -22.4
2026-02-15T02:39:01.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:39:01.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:39:01.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.026496
2026-02-15T02:39:01.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:39:02.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:39:02.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:39:02.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:39:02.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:39:02.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:38:20', tmtdew=1.01, humidity=93.03, cloud=0.0, wind=37.44, temperature=6.5, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:38:09.254', atlas_cloud=1, atlas_rain=1, zp_data=[2.2192499999999997, 0.5772500000000003, 0.7367500000000007, 0.4944999999999986, 2.316, 2.128750000000001, 2.226, 1.417250000000001, 0.766, 0.21750000000000114, 0.31824999999999903, 0.7119999999999997, 1.1349999999999998, 1.0172499999999998, 1.2289999999999992, 0.7809999999999997, 0.2942499999999999, 0.17849999999999966, 0.2959999999999994, 0.3802499999999984, 0.5304999999999991, 0.5462499999999988, 0.6072500000000005, 0.3567499999999999, 0.2724999999999991, 0.19250000000000078, 0.34025000000000105, 0.20650000000000013, 0.2765000000000004, 0.2890000000000006, 0.29800000000000093, 0.2685000000000013, 0.15024999999999977], zp_timestamp='2026-02-15T00:35:00')
2026-02-15T02:39:02.001 [DEBUG] [Thread-196483] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:39:02.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-15T02:39:02.096 [DEBUG] [Thread-196486] [transport.py] [_log()] starting thread (client mode): 0xa2d1a230
2026-02-15T02:39:02.096 [DEBUG] [Thread-196486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:39:02.112 [DEBUG] [Thread-196486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:39:02.112 [INFO] [Thread-196486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:39:02.121 [DEBUG] [Thread-196486] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:39:02.121 [DEBUG] [Thread-196486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:39:02.121 [DEBUG] [Thread-196486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:39:02.121 [DEBUG] [Thread-196486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:39:02.121 [DEBUG] [Thread-196486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:39:02.122 [DEBUG] [Thread-196486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:39:02.122 [DEBUG] [Thread-196486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:39:02.122 [DEBUG] [Thread-196486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:39:02.122 [DEBUG] [Thread-196486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:39:02.122 [DEBUG] [Thread-196486] [transport.py] [_log()] client lang: <none>
2026-02-15T02:39:02.122 [DEBUG] [Thread-196486] [transport.py] [_log()] server lang: <none>
2026-02-15T02:39:02.122 [DEBUG] [Thread-196486] [transport.py] [_log()] kex follows: False
2026-02-15T02:39:02.122 [DEBUG] [Thread-196486] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:39:02.122 [DEBUG] [Thread-196486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:39:02.122 [DEBUG] [Thread-196486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:39:02.122 [DEBUG] [Thread-196486] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:39:02.122 [DEBUG] [Thread-196486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:39:02.122 [DEBUG] [Thread-196486] [transport.py] [_log()] Compression: none
2026-02-15T02:39:02.122 [DEBUG] [Thread-196486] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:39:02.185 [DEBUG] [Thread-196486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:39:02.186 [DEBUG] [Thread-196486] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:39:02.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:39:02.187 [DEBUG] [Thread-196486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:39:02.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:39:02.243 [DEBUG] [Thread-196486] [transport.py] [_log()] userauth is OK
2026-02-15T02:39:02.243 [DEBUG] [Thread-196486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:39:02.243 [DEBUG] [Thread-196486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:39:02.243 [DEBUG] [Thread-196486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:39:02.243 [DEBUG] [Thread-196486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:39:02.268 [INFO] [Thread-196486] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:39:02.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-15T02:39:02.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:39:03.095 [DEBUG] [Thread-196486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:39:03.095 [DEBUG] [Thread-196486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:39:03.144 [DEBUG] [Thread-196486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:39:03.145 [DEBUG] [Thread-196486] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:39:03.154 [DEBUG] [Thread-196486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:39:03.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:39:03.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-15T02:39:03.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-15T02:39:03.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:39:03.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:39:03.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:39:03.190 [DEBUG] [Thread-196486] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:39:09.182 [DEBUG] [Thread-196488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:39:17.501 [DEBUG] [Thread-196489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:39:24.234 [DEBUG] [Thread-196490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:39:33.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:39:33.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:39:33.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-15T02:39:35.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 38, 55), 0.99, 93.09, 0.0, 34.34, 6.5, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:39:35.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:38:55
2026-02-15T02:39:36.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:39:36.321 [DEBUG] [Thread-196491] [transport.py] [_log()] starting thread (client mode): 0xa2de9030
2026-02-15T02:39:36.322 [DEBUG] [Thread-196491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:39:36.343 [DEBUG] [Thread-196491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:39:36.344 [INFO] [Thread-196491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:39:36.347 [DEBUG] [Thread-196491] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:39:36.347 [DEBUG] [Thread-196491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:39:36.347 [DEBUG] [Thread-196491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:39:36.347 [DEBUG] [Thread-196491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:39:36.347 [DEBUG] [Thread-196491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:39:36.347 [DEBUG] [Thread-196491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:39:36.347 [DEBUG] [Thread-196491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:39:36.347 [DEBUG] [Thread-196491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:39:36.347 [DEBUG] [Thread-196491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:39:36.347 [DEBUG] [Thread-196491] [transport.py] [_log()] client lang: <none>
2026-02-15T02:39:36.347 [DEBUG] [Thread-196491] [transport.py] [_log()] server lang: <none>
2026-02-15T02:39:36.347 [DEBUG] [Thread-196491] [transport.py] [_log()] kex follows: False
2026-02-15T02:39:36.347 [DEBUG] [Thread-196491] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:39:36.347 [DEBUG] [Thread-196491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:39:36.347 [DEBUG] [Thread-196491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:39:36.347 [DEBUG] [Thread-196491] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:39:36.347 [DEBUG] [Thread-196491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:39:36.347 [DEBUG] [Thread-196491] [transport.py] [_log()] Compression: none
2026-02-15T02:39:36.347 [DEBUG] [Thread-196491] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:39:36.365 [DEBUG] [Thread-196491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:39:36.366 [DEBUG] [Thread-196491] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:39:36.366 [DEBUG] [Thread-196491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:39:36.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:39:36.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:39:36.368 [DEBUG] [Thread-196491] [transport.py] [_log()] userauth is OK
2026-02-15T02:39:36.369 [DEBUG] [Thread-196491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:39:36.369 [DEBUG] [Thread-196491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:39:36.369 [DEBUG] [Thread-196491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:39:36.369 [DEBUG] [Thread-196491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:39:36.394 [INFO] [Thread-196491] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:39:36.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:39:37.174 [DEBUG] [Thread-196491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:39:37.175 [DEBUG] [Thread-196491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:39:37.175 [DEBUG] [Thread-196491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:39:37.215 [DEBUG] [Thread-196491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:39:37.215 [DEBUG] [Thread-196491] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:39:37.219 [DEBUG] [Thread-196491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:39:37.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:39:37.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:39:37.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:39:37.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:39:37.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:39:37.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:39:37.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:39:37.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:39:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:39:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.026843 -999.00   +6.40  24.70     91   +5.20 1 1 1 3 1     0    0 1.11 -6.41 ZNESW 24.7 24.7 143.4 32.8 7.0 -23.4 6.9 -22.9 6.7 -21.9 7.0 -23.1
2026-02-15T02:39:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:39:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:39:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.026843
2026-02-15T02:39:37.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:39:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:39:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:39:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:39:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:39:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:38:55', tmtdew=0.99, humidity=93.09, cloud=0.0, wind=34.34, temperature=6.5, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:38:39.235', atlas_cloud=1, atlas_rain=1, zp_data=[2.2192499999999997, 0.5772500000000003, 0.7367500000000007, 0.4944999999999986, 2.316, 2.128750000000001, 2.226, 1.417250000000001, 0.766, 0.21750000000000114, 0.31824999999999903, 0.7119999999999997, 1.1349999999999998, 1.0172499999999998, 1.2289999999999992, 0.7809999999999997, 0.2942499999999999, 0.17849999999999966, 0.2959999999999994, 0.3802499999999984, 0.5304999999999991, 0.5462499999999988, 0.6072500000000005, 0.3567499999999999, 0.2724999999999991, 0.19250000000000078, 0.34025000000000105, 0.20650000000000013, 0.2765000000000004, 0.2890000000000006, 0.29800000000000093, 0.2685000000000013, 0.15024999999999977], zp_timestamp='2026-02-15T00:38:00')
2026-02-15T02:39:37.245 [DEBUG] [Thread-196491] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:39: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-15T02:39:37.341 [DEBUG] [Thread-196494] [transport.py] [_log()] starting thread (client mode): 0xa2d6ac80
2026-02-15T02:39:37.341 [DEBUG] [Thread-196494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:39:37.356 [DEBUG] [Thread-196494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:39:37.356 [INFO] [Thread-196494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:39:37.365 [DEBUG] [Thread-196494] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:39:37.365 [DEBUG] [Thread-196494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:39:37.365 [DEBUG] [Thread-196494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:39:37.365 [DEBUG] [Thread-196494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:39:37.365 [DEBUG] [Thread-196494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:39:37.365 [DEBUG] [Thread-196494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:39:37.365 [DEBUG] [Thread-196494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:39:37.365 [DEBUG] [Thread-196494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:39:37.365 [DEBUG] [Thread-196494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:39:37.365 [DEBUG] [Thread-196494] [transport.py] [_log()] client lang: <none>
2026-02-15T02:39:37.365 [DEBUG] [Thread-196494] [transport.py] [_log()] server lang: <none>
2026-02-15T02:39:37.365 [DEBUG] [Thread-196494] [transport.py] [_log()] kex follows: False
2026-02-15T02:39:37.365 [DEBUG] [Thread-196494] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:39:37.366 [DEBUG] [Thread-196494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:39:37.366 [DEBUG] [Thread-196494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:39:37.366 [DEBUG] [Thread-196494] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:39:37.366 [DEBUG] [Thread-196494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:39:37.366 [DEBUG] [Thread-196494] [transport.py] [_log()] Compression: none
2026-02-15T02:39:37.366 [DEBUG] [Thread-196494] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:39:37.427 [DEBUG] [Thread-196494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:39:37.428 [DEBUG] [Thread-196494] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:39:37.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:39:37.429 [DEBUG] [Thread-196494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:39:37.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:39:37.487 [DEBUG] [Thread-196494] [transport.py] [_log()] userauth is OK
2026-02-15T02:39:37.487 [DEBUG] [Thread-196494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:39:37.488 [DEBUG] [Thread-196494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:39:37.488 [DEBUG] [Thread-196494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:39:37.488 [DEBUG] [Thread-196494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:39:37.507 [INFO] [Thread-196494] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:39:37.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-15T02:39:37.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:39:38.327 [DEBUG] [Thread-196494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:39:38.327 [DEBUG] [Thread-196494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:39:38.375 [DEBUG] [Thread-196494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:39:38.376 [DEBUG] [Thread-196494] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:39:38.385 [DEBUG] [Thread-196494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:39:38.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:39:38.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-15T02:39:38.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-15T02:39:38.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:39:38.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:39:38.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:39:38.420 [DEBUG] [Thread-196494] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:39:39.272 [DEBUG] [Thread-196496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:39:46.618 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:39:46.619 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:39:54.334 [DEBUG] [Thread-196497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:40:08.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:40:08.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:40:08.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-15T02:40:09.371 [DEBUG] [Thread-196498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:40:10.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 39, 31), 1.0, 93.04, 0.0, 34.34, 6.47, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:40:10.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:39:31
2026-02-15T02:40:11.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:40:11.307 [DEBUG] [Thread-196499] [transport.py] [_log()] starting thread (client mode): 0xa2d7b4f0
2026-02-15T02:40:11.308 [DEBUG] [Thread-196499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:40:11.328 [DEBUG] [Thread-196499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:40:11.329 [INFO] [Thread-196499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:40:11.332 [DEBUG] [Thread-196499] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:40:11.332 [DEBUG] [Thread-196499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:40:11.332 [DEBUG] [Thread-196499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:40:11.332 [DEBUG] [Thread-196499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:40:11.332 [DEBUG] [Thread-196499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:40:11.332 [DEBUG] [Thread-196499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:40:11.332 [DEBUG] [Thread-196499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:40:11.332 [DEBUG] [Thread-196499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:40:11.332 [DEBUG] [Thread-196499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:40:11.332 [DEBUG] [Thread-196499] [transport.py] [_log()] client lang: <none>
2026-02-15T02:40:11.332 [DEBUG] [Thread-196499] [transport.py] [_log()] server lang: <none>
2026-02-15T02:40:11.332 [DEBUG] [Thread-196499] [transport.py] [_log()] kex follows: False
2026-02-15T02:40:11.332 [DEBUG] [Thread-196499] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:40:11.332 [DEBUG] [Thread-196499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:40:11.332 [DEBUG] [Thread-196499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:40:11.332 [DEBUG] [Thread-196499] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:40:11.332 [DEBUG] [Thread-196499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:40:11.332 [DEBUG] [Thread-196499] [transport.py] [_log()] Compression: none
2026-02-15T02:40:11.332 [DEBUG] [Thread-196499] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:40:11.347 [DEBUG] [Thread-196499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:40:11.348 [DEBUG] [Thread-196499] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:40:11.348 [DEBUG] [Thread-196499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:40:11.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:40:11.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:40:11.350 [DEBUG] [Thread-196499] [transport.py] [_log()] userauth is OK
2026-02-15T02:40:11.351 [DEBUG] [Thread-196499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:40:11.351 [DEBUG] [Thread-196499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:40:11.351 [DEBUG] [Thread-196499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:40:11.351 [DEBUG] [Thread-196499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:40:11.376 [INFO] [Thread-196499] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:40:11.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:40:13.688 [DEBUG] [Thread-196499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:40:13.688 [DEBUG] [Thread-196499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:40:13.689 [DEBUG] [Thread-196499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:40:13.728 [DEBUG] [Thread-196499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:40:13.729 [DEBUG] [Thread-196499] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:40:13.732 [DEBUG] [Thread-196499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:40:13.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:40:13.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:40:13.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:40:13.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:40:13.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:40:13.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:40:13.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:40:13.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:40:13.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:40:13.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.027190 -999.00   +6.40  20.94     91   +5.20 1 2 1 3 1     0    0 1.12 -6.14 zNESW 20.9 20.9 152.4 36.4 7.0 -24.1 6.8 -23.2 6.7 -21.9 7.0 -23.3
2026-02-15T02:40:13.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:40:13.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:40:13.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.027190
2026-02-15T02:40:13.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:40:13.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:40:13.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:40:13.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:40:13.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:40:13.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:39:31', tmtdew=1.0, humidity=93.04, cloud=0.0, wind=34.34, temperature=6.47, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:39:09.216', atlas_cloud=2, atlas_rain=1, zp_data=[2.2192499999999997, 0.5772500000000003, 0.7367500000000007, 0.4944999999999986, 2.316, 2.128750000000001, 2.226, 1.417250000000001, 0.766, 0.21750000000000114, 0.31824999999999903, 0.7119999999999997, 1.1349999999999998, 1.0172499999999998, 1.2289999999999992, 0.7809999999999997, 0.2942499999999999, 0.17849999999999966, 0.2959999999999994, 0.3802499999999984, 0.5304999999999991, 0.5462499999999988, 0.6072500000000005, 0.3567499999999999, 0.2724999999999991, 0.19250000000000078, 0.34025000000000105, 0.20650000000000013, 0.2765000000000004, 0.2890000000000006, 0.29800000000000093, 0.2685000000000013, 0.15024999999999977], zp_timestamp='2026-02-15T00:38:00')
2026-02-15T02:40:13.758 [DEBUG] [Thread-196499] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:40:13.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-15T02:40:13.855 [DEBUG] [Thread-196502] [transport.py] [_log()] starting thread (client mode): 0xa2d1bfa0
2026-02-15T02:40:13.856 [DEBUG] [Thread-196502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:40:13.870 [DEBUG] [Thread-196502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:40:13.871 [INFO] [Thread-196502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:40:13.878 [DEBUG] [Thread-196502] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:40:13.879 [DEBUG] [Thread-196502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:40:13.879 [DEBUG] [Thread-196502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:40:13.879 [DEBUG] [Thread-196502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:40:13.879 [DEBUG] [Thread-196502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:40:13.879 [DEBUG] [Thread-196502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:40:13.879 [DEBUG] [Thread-196502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:40:13.879 [DEBUG] [Thread-196502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:40:13.879 [DEBUG] [Thread-196502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:40:13.879 [DEBUG] [Thread-196502] [transport.py] [_log()] client lang: <none>
2026-02-15T02:40:13.879 [DEBUG] [Thread-196502] [transport.py] [_log()] server lang: <none>
2026-02-15T02:40:13.879 [DEBUG] [Thread-196502] [transport.py] [_log()] kex follows: False
2026-02-15T02:40:13.879 [DEBUG] [Thread-196502] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:40:13.879 [DEBUG] [Thread-196502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:40:13.879 [DEBUG] [Thread-196502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:40:13.880 [DEBUG] [Thread-196502] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:40:13.880 [DEBUG] [Thread-196502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:40:13.880 [DEBUG] [Thread-196502] [transport.py] [_log()] Compression: none
2026-02-15T02:40:13.880 [DEBUG] [Thread-196502] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:40:13.938 [DEBUG] [Thread-196502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:40:13.939 [DEBUG] [Thread-196502] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:40:13.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:40:13.940 [DEBUG] [Thread-196502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:40:13.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:40:13.994 [DEBUG] [Thread-196502] [transport.py] [_log()] userauth is OK
2026-02-15T02:40:13.994 [DEBUG] [Thread-196502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:40:13.994 [DEBUG] [Thread-196502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:40:13.994 [DEBUG] [Thread-196502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:40:13.994 [DEBUG] [Thread-196502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:40:14.013 [INFO] [Thread-196502] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:40:14.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-15T02:40:14.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:40:14.814 [DEBUG] [Thread-196502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:40:14.815 [DEBUG] [Thread-196502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:40:14.862 [DEBUG] [Thread-196502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:40:14.863 [DEBUG] [Thread-196502] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:40:14.872 [DEBUG] [Thread-196502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:40:14.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:40:14.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-15T02:40:14.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-15T02:40:14.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:40:14.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:40:14.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:40:14.910 [DEBUG] [Thread-196502] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:40:17.557 [DEBUG] [Thread-196504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:40:24.406 [DEBUG] [Thread-196505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:40:39.457 [DEBUG] [Thread-196506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:40:44.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:40:44.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:40:44.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:40:46.827 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:40:46.829 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:40:47.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 40, 8), 0.99, 93.12, 0.0, 34.37, 6.52, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:40:47.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:40:08
2026-02-15T02:40:47.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:40:47.633 [DEBUG] [Thread-196507] [transport.py] [_log()] starting thread (client mode): 0xa5743760
2026-02-15T02:40:47.633 [DEBUG] [Thread-196507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:40:47.653 [DEBUG] [Thread-196507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:40:47.653 [INFO] [Thread-196507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:40:47.655 [DEBUG] [Thread-196507] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:40:47.655 [DEBUG] [Thread-196507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:40:47.655 [DEBUG] [Thread-196507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:40:47.655 [DEBUG] [Thread-196507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:40:47.655 [DEBUG] [Thread-196507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:40:47.655 [DEBUG] [Thread-196507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:40:47.655 [DEBUG] [Thread-196507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:40:47.655 [DEBUG] [Thread-196507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:40:47.656 [DEBUG] [Thread-196507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:40:47.656 [DEBUG] [Thread-196507] [transport.py] [_log()] client lang: <none>
2026-02-15T02:40:47.656 [DEBUG] [Thread-196507] [transport.py] [_log()] server lang: <none>
2026-02-15T02:40:47.656 [DEBUG] [Thread-196507] [transport.py] [_log()] kex follows: False
2026-02-15T02:40:47.656 [DEBUG] [Thread-196507] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:40:47.656 [DEBUG] [Thread-196507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:40:47.656 [DEBUG] [Thread-196507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:40:47.656 [DEBUG] [Thread-196507] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:40:47.656 [DEBUG] [Thread-196507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:40:47.656 [DEBUG] [Thread-196507] [transport.py] [_log()] Compression: none
2026-02-15T02:40:47.656 [DEBUG] [Thread-196507] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:40:47.668 [DEBUG] [Thread-196507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:40:47.669 [DEBUG] [Thread-196507] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:40:47.669 [DEBUG] [Thread-196507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:40:47.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:40:47.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:40:47.671 [DEBUG] [Thread-196507] [transport.py] [_log()] userauth is OK
2026-02-15T02:40:47.671 [DEBUG] [Thread-196507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:40:47.671 [DEBUG] [Thread-196507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:40:47.671 [DEBUG] [Thread-196507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:40:47.671 [DEBUG] [Thread-196507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:40:47.696 [INFO] [Thread-196507] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:40:47.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:40:48.352 [DEBUG] [Thread-196507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:40:48.352 [DEBUG] [Thread-196507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:40:48.352 [DEBUG] [Thread-196507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:40:48.393 [DEBUG] [Thread-196507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:40:48.393 [DEBUG] [Thread-196507] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:40:48.397 [DEBUG] [Thread-196507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:40:48.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:40:48.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:40:48.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:40:48.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:40:48.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:40:48.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:40:48.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:40:48.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:40:48.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:40:48.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.027885 -999.00   +6.40  24.49     92   +5.20 1 2 1 3 1     0    0 1.10 -6.71 zNESW 24.5 24.5 139.6 39.5 7.0 -24.1 6.8 -23.1 6.6 -22.1 7.0 -23.2
2026-02-15T02:40:48.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:40:48.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:40:48.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.027885
2026-02-15T02:40:48.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:40:48.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:40:48.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:40:48.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:40:48.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:40:48.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:40:08', tmtdew=0.99, humidity=93.12, cloud=0.0, wind=34.37, temperature=6.52, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:40:09.264', atlas_cloud=2, atlas_rain=1, zp_data=[2.2192499999999997, 0.5772500000000003, 0.7367500000000007, 0.4944999999999986, 2.316, 2.128750000000001, 2.226, 1.417250000000001, 0.766, 0.21750000000000114, 0.31824999999999903, 0.7119999999999997, 1.1349999999999998, 1.0172499999999998, 1.2289999999999992, 0.7809999999999997, 0.2942499999999999, 0.17849999999999966, 0.2959999999999994, 0.3802499999999984, 0.5304999999999991, 0.5462499999999988, 0.6072500000000005, 0.3567499999999999, 0.2724999999999991, 0.19250000000000078, 0.34025000000000105, 0.20650000000000013, 0.2765000000000004, 0.2890000000000006, 0.29800000000000093, 0.2685000000000013, 0.15024999999999977], zp_timestamp='2026-02-15T00:38:00')
2026-02-15T02:40:48.422 [DEBUG] [Thread-196507] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:40:48.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-15T02:40:48.517 [DEBUG] [Thread-196510] [transport.py] [_log()] starting thread (client mode): 0xa5740850
2026-02-15T02:40:48.518 [DEBUG] [Thread-196510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:40:48.532 [DEBUG] [Thread-196510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:40:48.532 [INFO] [Thread-196510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:40:48.540 [DEBUG] [Thread-196510] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:40:48.540 [DEBUG] [Thread-196510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:40:48.540 [DEBUG] [Thread-196510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:40:48.540 [DEBUG] [Thread-196510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:40:48.540 [DEBUG] [Thread-196510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:40:48.540 [DEBUG] [Thread-196510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:40:48.540 [DEBUG] [Thread-196510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:40:48.540 [DEBUG] [Thread-196510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:40:48.540 [DEBUG] [Thread-196510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:40:48.541 [DEBUG] [Thread-196510] [transport.py] [_log()] client lang: <none>
2026-02-15T02:40:48.541 [DEBUG] [Thread-196510] [transport.py] [_log()] server lang: <none>
2026-02-15T02:40:48.541 [DEBUG] [Thread-196510] [transport.py] [_log()] kex follows: False
2026-02-15T02:40:48.541 [DEBUG] [Thread-196510] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:40:48.541 [DEBUG] [Thread-196510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:40:48.541 [DEBUG] [Thread-196510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:40:48.541 [DEBUG] [Thread-196510] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:40:48.541 [DEBUG] [Thread-196510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:40:48.541 [DEBUG] [Thread-196510] [transport.py] [_log()] Compression: none
2026-02-15T02:40:48.541 [DEBUG] [Thread-196510] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:40:48.602 [DEBUG] [Thread-196510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:40:48.603 [DEBUG] [Thread-196510] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:40:48.603 [DEBUG] [Thread-196510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:40:48.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:40:48.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:40:48.659 [DEBUG] [Thread-196510] [transport.py] [_log()] userauth is OK
2026-02-15T02:40:48.659 [DEBUG] [Thread-196510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:40:48.659 [DEBUG] [Thread-196510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:40:48.659 [DEBUG] [Thread-196510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:40:48.659 [DEBUG] [Thread-196510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:40:48.681 [INFO] [Thread-196510] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:40:48.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-15T02:40:48.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:40:49.453 [DEBUG] [Thread-196510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:40:49.453 [DEBUG] [Thread-196510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:40:49.502 [DEBUG] [Thread-196510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:40:49.502 [DEBUG] [Thread-196510] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:40:49.514 [DEBUG] [Thread-196510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:40:49.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:40:49.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-15T02:40:49.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-15T02:40:49.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:40:49.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:40:49.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:40:49.551 [DEBUG] [Thread-196510] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:40:54.497 [DEBUG] [Thread-196512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:41:09.552 [DEBUG] [Thread-196513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:41:17.634 [DEBUG] [Thread-196514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:41:19.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:41:19.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:41:19.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-15T02:41:21.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 40, 43), 0.99, 93.62, 0.0, 34.51, 6.45, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:41:21.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:40:43
2026-02-15T02:41:22.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:41:22.272 [DEBUG] [Thread-196515] [transport.py] [_log()] starting thread (client mode): 0xa2de83d0
2026-02-15T02:41:22.272 [DEBUG] [Thread-196515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:41:22.293 [DEBUG] [Thread-196515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:41:22.293 [INFO] [Thread-196515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:41:22.297 [DEBUG] [Thread-196515] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:41:22.297 [DEBUG] [Thread-196515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:41:22.297 [DEBUG] [Thread-196515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:41:22.297 [DEBUG] [Thread-196515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:41:22.297 [DEBUG] [Thread-196515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:41:22.297 [DEBUG] [Thread-196515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:41:22.297 [DEBUG] [Thread-196515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:41:22.297 [DEBUG] [Thread-196515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:41:22.297 [DEBUG] [Thread-196515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:41:22.298 [DEBUG] [Thread-196515] [transport.py] [_log()] client lang: <none>
2026-02-15T02:41:22.298 [DEBUG] [Thread-196515] [transport.py] [_log()] server lang: <none>
2026-02-15T02:41:22.298 [DEBUG] [Thread-196515] [transport.py] [_log()] kex follows: False
2026-02-15T02:41:22.298 [DEBUG] [Thread-196515] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:41:22.298 [DEBUG] [Thread-196515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:41:22.298 [DEBUG] [Thread-196515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:41:22.298 [DEBUG] [Thread-196515] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:41:22.298 [DEBUG] [Thread-196515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:41:22.298 [DEBUG] [Thread-196515] [transport.py] [_log()] Compression: none
2026-02-15T02:41:22.298 [DEBUG] [Thread-196515] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:41:22.316 [DEBUG] [Thread-196515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:41:22.316 [DEBUG] [Thread-196515] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:41:22.317 [DEBUG] [Thread-196515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02: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-15T02:41:22.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:41:22.319 [DEBUG] [Thread-196515] [transport.py] [_log()] userauth is OK
2026-02-15T02:41:22.319 [DEBUG] [Thread-196515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:41:22.319 [DEBUG] [Thread-196515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:41:22.319 [DEBUG] [Thread-196515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:41:22.319 [DEBUG] [Thread-196515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:41:22.345 [INFO] [Thread-196515] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:41:22.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:41:22.989 [DEBUG] [Thread-196515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:41:22.989 [DEBUG] [Thread-196515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:41:22.990 [DEBUG] [Thread-196515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:41:23.031 [DEBUG] [Thread-196515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:41:23.031 [DEBUG] [Thread-196515] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:41:23.033 [DEBUG] [Thread-196515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:41:23.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:41:23.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:41:23.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:41:23.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:41:23.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:41:23.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:41:23.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:41:23.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:41:23.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:41:23.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.028232 -999.00   +6.30  27.64     92   +5.10 1 2 1 3 1     0    0 1.12 -6.92 zNESW 27.6 27.6 146.6 35.2 7.0 -23.9 6.8 -23.1 6.6 -22.0 7.0 -23.2
2026-02-15T02:41:23.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:41:23.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:41:23.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.028232
2026-02-15T02:41:23.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:41:23.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:41:23.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:41:23.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:41:23.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:41:23.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:40:43', tmtdew=0.99, humidity=93.62, cloud=0.0, wind=34.51, temperature=6.45, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:40:39.245', atlas_cloud=2, atlas_rain=1, zp_data=[2.2192499999999997, 0.5772500000000003, 0.7367500000000007, 0.4944999999999986, 2.316, 2.128750000000001, 2.226, 1.417250000000001, 0.766, 0.21750000000000114, 0.31824999999999903, 0.7119999999999997, 1.1349999999999998, 1.0172499999999998, 1.2289999999999992, 0.7809999999999997, 0.2942499999999999, 0.17849999999999966, 0.2959999999999994, 0.3802499999999984, 0.5304999999999991, 0.5462499999999988, 0.6072500000000005, 0.3567499999999999, 0.2724999999999991, 0.19250000000000078, 0.34025000000000105, 0.20650000000000013, 0.2765000000000004, 0.2890000000000006, 0.29800000000000093, 0.2685000000000013, 0.15024999999999977], zp_timestamp='2026-02-15T00:38:00')
2026-02-15T02:41:23.057 [DEBUG] [Thread-196515] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:41:23.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-15T02:41:23.150 [DEBUG] [Thread-196518] [transport.py] [_log()] starting thread (client mode): 0xa2d796c0
2026-02-15T02:41:23.151 [DEBUG] [Thread-196518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:41:23.165 [DEBUG] [Thread-196518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:41:23.165 [INFO] [Thread-196518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:41:23.172 [DEBUG] [Thread-196518] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:41:23.173 [DEBUG] [Thread-196518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:41:23.173 [DEBUG] [Thread-196518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:41:23.173 [DEBUG] [Thread-196518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:41:23.173 [DEBUG] [Thread-196518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:41:23.173 [DEBUG] [Thread-196518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:41:23.173 [DEBUG] [Thread-196518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:41:23.173 [DEBUG] [Thread-196518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:41:23.173 [DEBUG] [Thread-196518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:41:23.173 [DEBUG] [Thread-196518] [transport.py] [_log()] client lang: <none>
2026-02-15T02:41:23.173 [DEBUG] [Thread-196518] [transport.py] [_log()] server lang: <none>
2026-02-15T02:41:23.173 [DEBUG] [Thread-196518] [transport.py] [_log()] kex follows: False
2026-02-15T02:41:23.173 [DEBUG] [Thread-196518] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:41:23.173 [DEBUG] [Thread-196518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:41:23.173 [DEBUG] [Thread-196518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:41:23.173 [DEBUG] [Thread-196518] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:41:23.173 [DEBUG] [Thread-196518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:41:23.173 [DEBUG] [Thread-196518] [transport.py] [_log()] Compression: none
2026-02-15T02:41:23.173 [DEBUG] [Thread-196518] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:41:23.230 [DEBUG] [Thread-196518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:41:23.231 [DEBUG] [Thread-196518] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:41:23.231 [DEBUG] [Thread-196518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:41:23.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:41:23.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:41:23.287 [DEBUG] [Thread-196518] [transport.py] [_log()] userauth is OK
2026-02-15T02:41:23.287 [DEBUG] [Thread-196518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:41:23.287 [DEBUG] [Thread-196518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:41:23.287 [DEBUG] [Thread-196518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:41:23.287 [DEBUG] [Thread-196518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:41:23.310 [INFO] [Thread-196518] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:41:23.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-15T02:41:23.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:41:24.125 [DEBUG] [Thread-196518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:41:24.125 [DEBUG] [Thread-196518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:41:24.172 [DEBUG] [Thread-196518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:41:24.173 [DEBUG] [Thread-196518] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:41:24.182 [DEBUG] [Thread-196518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:41:24.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:41:24.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-15T02:41:24.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-15T02:41:24.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:41:24.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:41:24.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:41:24.216 [DEBUG] [Thread-196518] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:41:24.585 [DEBUG] [Thread-196520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:41:39.635 [DEBUG] [Thread-196521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:41:47.038 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:41:47.039 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:41:54.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:41:54.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:41:54.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:41:54.674 [DEBUG] [Thread-196522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:41:56.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 41, 19), 0.97, 93.72, 0.0, 35.25, 6.47, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:41:56.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:41:19
2026-02-15T02:41:56.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:41:56.710 [DEBUG] [Thread-196523] [transport.py] [_log()] starting thread (client mode): 0xa2d6e860
2026-02-15T02:41:56.711 [DEBUG] [Thread-196523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:41:56.729 [DEBUG] [Thread-196523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:41:56.730 [INFO] [Thread-196523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:41:56.733 [DEBUG] [Thread-196523] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:41:56.733 [DEBUG] [Thread-196523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:41:56.733 [DEBUG] [Thread-196523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:41:56.733 [DEBUG] [Thread-196523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:41:56.733 [DEBUG] [Thread-196523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:41:56.733 [DEBUG] [Thread-196523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:41:56.733 [DEBUG] [Thread-196523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:41:56.733 [DEBUG] [Thread-196523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:41:56.733 [DEBUG] [Thread-196523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:41:56.733 [DEBUG] [Thread-196523] [transport.py] [_log()] client lang: <none>
2026-02-15T02:41:56.733 [DEBUG] [Thread-196523] [transport.py] [_log()] server lang: <none>
2026-02-15T02:41:56.733 [DEBUG] [Thread-196523] [transport.py] [_log()] kex follows: False
2026-02-15T02:41:56.733 [DEBUG] [Thread-196523] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:41:56.733 [DEBUG] [Thread-196523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:41:56.733 [DEBUG] [Thread-196523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:41:56.733 [DEBUG] [Thread-196523] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:41:56.733 [DEBUG] [Thread-196523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:41:56.734 [DEBUG] [Thread-196523] [transport.py] [_log()] Compression: none
2026-02-15T02:41:56.734 [DEBUG] [Thread-196523] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:41:56.752 [DEBUG] [Thread-196523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:41:56.753 [DEBUG] [Thread-196523] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:41:56.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:41:56.754 [DEBUG] [Thread-196523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:41:56.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:41:56.757 [DEBUG] [Thread-196523] [transport.py] [_log()] userauth is OK
2026-02-15T02:41:56.757 [DEBUG] [Thread-196523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:41:56.757 [DEBUG] [Thread-196523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:41:56.758 [DEBUG] [Thread-196523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:41:56.758 [DEBUG] [Thread-196523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:41:56.782 [INFO] [Thread-196523] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:41:56.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:41:57.406 [DEBUG] [Thread-196523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:41:57.406 [DEBUG] [Thread-196523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:41:57.407 [DEBUG] [Thread-196523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:41:57.447 [DEBUG] [Thread-196523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:41:57.448 [DEBUG] [Thread-196523] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:41:57.451 [DEBUG] [Thread-196523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:41:57.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:41:57.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:41:57.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:41:57.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:41:57.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:41:57.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:41:57.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:41:57.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:41:57.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:41:57.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.028579 -999.00   +6.30  23.18     92   +5.10 1 2 1 3 1     0    0 1.09 -7.51 zNESW 23.2 23.2 141.2 35.1 7.0 -23.9 6.8 -23.3 6.6 -22.0 7.0 -23.2
2026-02-15T02:41:57.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:41:57.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:41:57.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.028579
2026-02-15T02:41:57.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:41:57.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:41:57.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:41:57.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:41:57.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:41:57.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:41:19', tmtdew=0.97, humidity=93.72, cloud=0.0, wind=35.25, temperature=6.47, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:41:09.226', atlas_cloud=2, atlas_rain=1, zp_data=[2.2192499999999997, 0.5772500000000003, 0.7367500000000007, 0.4944999999999986, 2.316, 2.128750000000001, 2.226, 1.417250000000001, 0.766, 0.21750000000000114, 0.31824999999999903, 0.7119999999999997, 1.1349999999999998, 1.0172499999999998, 1.2289999999999992, 0.7809999999999997, 0.2942499999999999, 0.17849999999999966, 0.2959999999999994, 0.3802499999999984, 0.5304999999999991, 0.5462499999999988, 0.6072500000000005, 0.3567499999999999, 0.2724999999999991, 0.19250000000000078, 0.34025000000000105, 0.20650000000000013, 0.2765000000000004, 0.2890000000000006, 0.29800000000000093, 0.2685000000000013, 0.15024999999999977], zp_timestamp='2026-02-15T00:38:00')
2026-02-15T02:41:57.478 [DEBUG] [Thread-196523] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:41:57.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-15T02:41:57.573 [DEBUG] [Thread-196526] [transport.py] [_log()] starting thread (client mode): 0xa2d6b880
2026-02-15T02:41:57.573 [DEBUG] [Thread-196526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:41:57.588 [DEBUG] [Thread-196526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:41:57.588 [INFO] [Thread-196526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:41:57.596 [DEBUG] [Thread-196526] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:41:57.596 [DEBUG] [Thread-196526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:41:57.596 [DEBUG] [Thread-196526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:41:57.596 [DEBUG] [Thread-196526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:41:57.596 [DEBUG] [Thread-196526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:41:57.596 [DEBUG] [Thread-196526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:41:57.596 [DEBUG] [Thread-196526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:41:57.596 [DEBUG] [Thread-196526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:41:57.597 [DEBUG] [Thread-196526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:41:57.597 [DEBUG] [Thread-196526] [transport.py] [_log()] client lang: <none>
2026-02-15T02:41:57.597 [DEBUG] [Thread-196526] [transport.py] [_log()] server lang: <none>
2026-02-15T02:41:57.597 [DEBUG] [Thread-196526] [transport.py] [_log()] kex follows: False
2026-02-15T02:41:57.597 [DEBUG] [Thread-196526] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:41:57.597 [DEBUG] [Thread-196526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:41:57.597 [DEBUG] [Thread-196526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:41:57.597 [DEBUG] [Thread-196526] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:41:57.597 [DEBUG] [Thread-196526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:41:57.597 [DEBUG] [Thread-196526] [transport.py] [_log()] Compression: none
2026-02-15T02:41:57.597 [DEBUG] [Thread-196526] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:41:57.656 [DEBUG] [Thread-196526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:41:57.656 [DEBUG] [Thread-196526] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:41:57.657 [DEBUG] [Thread-196526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:41:57.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:41:57.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:41:57.712 [DEBUG] [Thread-196526] [transport.py] [_log()] userauth is OK
2026-02-15T02:41:57.712 [DEBUG] [Thread-196526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:41:57.712 [DEBUG] [Thread-196526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:41:57.712 [DEBUG] [Thread-196526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:41:57.712 [DEBUG] [Thread-196526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:41:57.731 [INFO] [Thread-196526] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:41:57.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-15T02:41:57.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:41:58.531 [DEBUG] [Thread-196526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:41:58.532 [DEBUG] [Thread-196526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:41:58.580 [DEBUG] [Thread-196526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:41:58.580 [DEBUG] [Thread-196526] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:41:58.589 [DEBUG] [Thread-196526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:41:58.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:41:58.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-15T02:41:58.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-15T02:41:58.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:41:58.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:41:58.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:41:58.627 [DEBUG] [Thread-196526] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:42:09.712 [DEBUG] [Thread-196528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:42:17.700 [DEBUG] [Thread-196529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:42:24.764 [DEBUG] [Thread-196530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:42:28.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:42:28.649 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:42:28.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-15T02:42:30.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 41, 54), 0.98, 93.71, 0.0, 33.84, 6.42, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:42:30.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:41:54
2026-02-15T02:42:31.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:42:31.524 [DEBUG] [Thread-196531] [transport.py] [_log()] starting thread (client mode): 0xa2d6aec0
2026-02-15T02:42:31.525 [DEBUG] [Thread-196531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:42:31.543 [DEBUG] [Thread-196531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:42:31.543 [INFO] [Thread-196531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:42:31.546 [DEBUG] [Thread-196531] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:42:31.546 [DEBUG] [Thread-196531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:42:31.546 [DEBUG] [Thread-196531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:42:31.546 [DEBUG] [Thread-196531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:42:31.546 [DEBUG] [Thread-196531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:42:31.546 [DEBUG] [Thread-196531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:42:31.546 [DEBUG] [Thread-196531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:42:31.547 [DEBUG] [Thread-196531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:42:31.547 [DEBUG] [Thread-196531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:42:31.547 [DEBUG] [Thread-196531] [transport.py] [_log()] client lang: <none>
2026-02-15T02:42:31.547 [DEBUG] [Thread-196531] [transport.py] [_log()] server lang: <none>
2026-02-15T02:42:31.547 [DEBUG] [Thread-196531] [transport.py] [_log()] kex follows: False
2026-02-15T02:42:31.547 [DEBUG] [Thread-196531] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:42:31.547 [DEBUG] [Thread-196531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:42:31.547 [DEBUG] [Thread-196531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:42:31.547 [DEBUG] [Thread-196531] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:42:31.547 [DEBUG] [Thread-196531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:42:31.547 [DEBUG] [Thread-196531] [transport.py] [_log()] Compression: none
2026-02-15T02:42:31.547 [DEBUG] [Thread-196531] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:42:31.564 [DEBUG] [Thread-196531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:42:31.565 [DEBUG] [Thread-196531] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:42:31.566 [DEBUG] [Thread-196531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:42:31.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:42:31.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:42:31.568 [DEBUG] [Thread-196531] [transport.py] [_log()] userauth is OK
2026-02-15T02:42:31.568 [DEBUG] [Thread-196531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:42:31.568 [DEBUG] [Thread-196531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:42:31.568 [DEBUG] [Thread-196531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:42:31.568 [DEBUG] [Thread-196531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:42:31.587 [INFO] [Thread-196531] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:42:31.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:42:32.368 [DEBUG] [Thread-196531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:42:32.368 [DEBUG] [Thread-196531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:42:32.368 [DEBUG] [Thread-196531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:42:32.408 [DEBUG] [Thread-196531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:42:32.408 [DEBUG] [Thread-196531] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:42:32.411 [DEBUG] [Thread-196531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:42:32.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:42:32.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:42:32.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:42:32.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:42:32.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:42:32.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:42:32.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:42:32.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:42:32.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:42:32.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.028926 -999.00   +6.30  23.94     92   +5.10 1 2 1 3 1     0    0 1.08 -7.06 zNESW 23.9 23.9 148.4 34.2 7.0 -24.0 6.8 -23.2 6.6 -21.9 7.0 -23.5
2026-02-15T02:42:32.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:42:32.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:42:32.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.028926
2026-02-15T02:42:32.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:42:32.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:42:32.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:42:32.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:42:32.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:42:32.433 [DEBUG] [Thread-196531] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:42:32.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:41:54', tmtdew=0.98, humidity=93.71, cloud=0.0, wind=33.84, temperature=6.42, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:41:39.206', atlas_cloud=2, atlas_rain=1, zp_data=[2.2192499999999997, 0.5772500000000003, 0.7367500000000007, 0.4944999999999986, 2.316, 2.128750000000001, 2.226, 1.417250000000001, 0.766, 0.21750000000000114, 0.31824999999999903, 0.7119999999999997, 1.1349999999999998, 1.0172499999999998, 1.2289999999999992, 0.7809999999999997, 0.2942499999999999, 0.17849999999999966, 0.2959999999999994, 0.3802499999999984, 0.5304999999999991, 0.5462499999999988, 0.6072500000000005, 0.3567499999999999, 0.2724999999999991, 0.19250000000000078, 0.34025000000000105, 0.20650000000000013, 0.2765000000000004, 0.2890000000000006, 0.29800000000000093, 0.2685000000000013, 0.15024999999999977], zp_timestamp='2026-02-15T00:38:00')
2026-02-15T02:42:32.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-15T02:42:32.530 [DEBUG] [Thread-196534] [transport.py] [_log()] starting thread (client mode): 0xa2d7a9b0
2026-02-15T02:42:32.530 [DEBUG] [Thread-196534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:42:32.545 [DEBUG] [Thread-196534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:42:32.545 [INFO] [Thread-196534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:42:32.554 [DEBUG] [Thread-196534] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:42:32.554 [DEBUG] [Thread-196534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:42:32.554 [DEBUG] [Thread-196534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:42:32.554 [DEBUG] [Thread-196534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:42:32.554 [DEBUG] [Thread-196534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:42:32.555 [DEBUG] [Thread-196534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:42:32.555 [DEBUG] [Thread-196534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:42:32.555 [DEBUG] [Thread-196534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:42:32.555 [DEBUG] [Thread-196534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:42:32.555 [DEBUG] [Thread-196534] [transport.py] [_log()] client lang: <none>
2026-02-15T02:42:32.555 [DEBUG] [Thread-196534] [transport.py] [_log()] server lang: <none>
2026-02-15T02:42:32.555 [DEBUG] [Thread-196534] [transport.py] [_log()] kex follows: False
2026-02-15T02:42:32.555 [DEBUG] [Thread-196534] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:42:32.555 [DEBUG] [Thread-196534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:42:32.555 [DEBUG] [Thread-196534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:42:32.555 [DEBUG] [Thread-196534] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:42:32.555 [DEBUG] [Thread-196534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:42:32.555 [DEBUG] [Thread-196534] [transport.py] [_log()] Compression: none
2026-02-15T02:42:32.555 [DEBUG] [Thread-196534] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:42:32.613 [DEBUG] [Thread-196534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:42:32.614 [DEBUG] [Thread-196534] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:42:32.614 [DEBUG] [Thread-196534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:42:32.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:42:32.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:42:32.672 [DEBUG] [Thread-196534] [transport.py] [_log()] userauth is OK
2026-02-15T02:42:32.672 [DEBUG] [Thread-196534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:42:32.672 [DEBUG] [Thread-196534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:42:32.672 [DEBUG] [Thread-196534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:42:32.672 [DEBUG] [Thread-196534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:42:32.695 [INFO] [Thread-196534] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:42:32.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-15T02:42:32.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:42:33.463 [DEBUG] [Thread-196534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:42:33.463 [DEBUG] [Thread-196534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:42:33.511 [DEBUG] [Thread-196534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:42:33.512 [DEBUG] [Thread-196534] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:42:33.523 [DEBUG] [Thread-196534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:42:33.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:42:33.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-15T02:42:33.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-15T02:42:33.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:42:33.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:42:33.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:42:33.563 [DEBUG] [Thread-196534] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:42:39.799 [DEBUG] [Thread-196536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:42:47.241 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:42:47.243 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:42:54.847 [DEBUG] [Thread-196537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:43:03.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:43:03.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:43:03.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-15T02:43:05.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 42, 29), 0.97, 93.72, 0.0, 34.62, 6.44, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:43:05.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:42:29
2026-02-15T02:43:05.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:43:05.981 [DEBUG] [Thread-196538] [transport.py] [_log()] starting thread (client mode): 0xa2d1b790
2026-02-15T02:43:05.981 [DEBUG] [Thread-196538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:43:06.000 [DEBUG] [Thread-196538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:43:06.000 [INFO] [Thread-196538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:43:06.004 [DEBUG] [Thread-196538] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:43:06.004 [DEBUG] [Thread-196538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:43:06.004 [DEBUG] [Thread-196538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:43:06.004 [DEBUG] [Thread-196538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:43:06.004 [DEBUG] [Thread-196538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:43:06.004 [DEBUG] [Thread-196538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:43:06.004 [DEBUG] [Thread-196538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:43:06.004 [DEBUG] [Thread-196538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:43:06.004 [DEBUG] [Thread-196538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:43:06.004 [DEBUG] [Thread-196538] [transport.py] [_log()] client lang: <none>
2026-02-15T02:43:06.004 [DEBUG] [Thread-196538] [transport.py] [_log()] server lang: <none>
2026-02-15T02:43:06.004 [DEBUG] [Thread-196538] [transport.py] [_log()] kex follows: False
2026-02-15T02:43:06.004 [DEBUG] [Thread-196538] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:43:06.004 [DEBUG] [Thread-196538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:43:06.005 [DEBUG] [Thread-196538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:43:06.005 [DEBUG] [Thread-196538] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:43:06.005 [DEBUG] [Thread-196538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:43:06.005 [DEBUG] [Thread-196538] [transport.py] [_log()] Compression: none
2026-02-15T02:43:06.005 [DEBUG] [Thread-196538] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:43:06.021 [DEBUG] [Thread-196538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:43:06.021 [DEBUG] [Thread-196538] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:43:06.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:43:06.022 [DEBUG] [Thread-196538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:43:06.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:43:06.023 [DEBUG] [Thread-196538] [transport.py] [_log()] userauth is OK
2026-02-15T02:43:06.023 [DEBUG] [Thread-196538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:43:06.023 [DEBUG] [Thread-196538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:43:06.023 [DEBUG] [Thread-196538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:43:06.023 [DEBUG] [Thread-196538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:43:06.046 [INFO] [Thread-196538] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:43:06.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:43:06.673 [DEBUG] [Thread-196538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:43:06.673 [DEBUG] [Thread-196538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:43:06.674 [DEBUG] [Thread-196538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:43:06.714 [DEBUG] [Thread-196538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:43:06.714 [DEBUG] [Thread-196538] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:43:06.718 [DEBUG] [Thread-196538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:43:06.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:43:06.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:43:06.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:43:06.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:43:06.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:43:06.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:43:06.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:43:06.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:43:06.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:43:06.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.029273 -999.00   +6.30  29.83     92   +5.10 1 2 1 3 1     0    0 1.11 -7.29 zNESW 29.8 29.8 146.0 37.3 6.9 -23.4 6.8 -22.8 6.6 -22.0 7.0 -23.1
2026-02-15T02:43:06.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:43:06.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:43:06.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.029273
2026-02-15T02:43:06.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:43:06.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:43:06.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:43:06.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:43:06.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:43:06.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:42:29', tmtdew=0.97, humidity=93.72, cloud=0.0, wind=34.62, temperature=6.44, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:42:09.187', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.0352500000000004, 1.3902500000000009, 0.9374999999999991, nan, nan, nan, nan, 1.5054999999999996, 0.359, 0.5332499999999989, 1.0140000000000002, 1.721, 1.5532499999999994, 1.8594999999999997, 1.608999999999999, 0.5242500000000003, 0.24649999999999928, 0.3644999999999996, 0.5517499999999993, 0.8209999999999988, 0.7212499999999995, 0.8657500000000011, 0.48625000000000007, 0.34299999999999997, 0.21649999999999991, 0.32225000000000037, 0.2995000000000001, 0.3774999999999995, 0.30350000000000144, 0.40250000000000163, 0.37100000000000044, 0.24774999999999991], zp_timestamp='2026-02-15T00:41:00')
2026-02-15T02:43:06.743 [DEBUG] [Thread-196538] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:43:06.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-15T02:43:06.838 [DEBUG] [Thread-196541] [transport.py] [_log()] starting thread (client mode): 0xa2d6ac50
2026-02-15T02:43:06.838 [DEBUG] [Thread-196541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:43:06.855 [DEBUG] [Thread-196541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:43:06.856 [INFO] [Thread-196541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:43:06.865 [DEBUG] [Thread-196541] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:43:06.865 [DEBUG] [Thread-196541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:43:06.865 [DEBUG] [Thread-196541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:43:06.866 [DEBUG] [Thread-196541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:43:06.866 [DEBUG] [Thread-196541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:43:06.866 [DEBUG] [Thread-196541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:43:06.866 [DEBUG] [Thread-196541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:43:06.866 [DEBUG] [Thread-196541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:43:06.866 [DEBUG] [Thread-196541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:43:06.866 [DEBUG] [Thread-196541] [transport.py] [_log()] client lang: <none>
2026-02-15T02:43:06.866 [DEBUG] [Thread-196541] [transport.py] [_log()] server lang: <none>
2026-02-15T02:43:06.866 [DEBUG] [Thread-196541] [transport.py] [_log()] kex follows: False
2026-02-15T02:43:06.866 [DEBUG] [Thread-196541] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:43:06.866 [DEBUG] [Thread-196541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:43:06.866 [DEBUG] [Thread-196541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:43:06.866 [DEBUG] [Thread-196541] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:43:06.867 [DEBUG] [Thread-196541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:43:06.867 [DEBUG] [Thread-196541] [transport.py] [_log()] Compression: none
2026-02-15T02:43:06.867 [DEBUG] [Thread-196541] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:43:06.927 [DEBUG] [Thread-196541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:43:06.927 [DEBUG] [Thread-196541] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:43:06.927 [DEBUG] [Thread-196541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:43:06.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:43:06.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:43:06.986 [DEBUG] [Thread-196541] [transport.py] [_log()] userauth is OK
2026-02-15T02:43:06.986 [DEBUG] [Thread-196541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:43:06.986 [DEBUG] [Thread-196541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:43:06.986 [DEBUG] [Thread-196541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:43:06.986 [DEBUG] [Thread-196541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:43:07.005 [INFO] [Thread-196541] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:43:07.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-15T02:43:07.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:43:07.792 [DEBUG] [Thread-196541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:43:07.793 [DEBUG] [Thread-196541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:43:07.840 [DEBUG] [Thread-196541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:43:07.841 [DEBUG] [Thread-196541] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:43:07.851 [DEBUG] [Thread-196541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:43:07.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:43:07.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-15T02:43:07.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-15T02:43:07.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:43:07.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:43:07.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:43:07.892 [DEBUG] [Thread-196541] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:43:09.883 [DEBUG] [Thread-196543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:43:17.773 [DEBUG] [Thread-196544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:43:24.945 [DEBUG] [Thread-196545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:43:37.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:43:37.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:43:37.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-15T02:43:39.977 [DEBUG] [Thread-196546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:43:40.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 43, 5), 0.97, 93.77, 0.0, 34.53, 6.42, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:43:40.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:43:05
2026-02-15T02:43:40.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:43:40.642 [DEBUG] [Thread-196547] [transport.py] [_log()] starting thread (client mode): 0xa2d6a8c0
2026-02-15T02:43:40.642 [DEBUG] [Thread-196547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:43:40.660 [DEBUG] [Thread-196547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:43:40.660 [INFO] [Thread-196547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:43:40.662 [DEBUG] [Thread-196547] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:43:40.663 [DEBUG] [Thread-196547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:43:40.663 [DEBUG] [Thread-196547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:43:40.663 [DEBUG] [Thread-196547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:43:40.663 [DEBUG] [Thread-196547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:43:40.663 [DEBUG] [Thread-196547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:43:40.663 [DEBUG] [Thread-196547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:43:40.663 [DEBUG] [Thread-196547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:43:40.663 [DEBUG] [Thread-196547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:43:40.663 [DEBUG] [Thread-196547] [transport.py] [_log()] client lang: <none>
2026-02-15T02:43:40.663 [DEBUG] [Thread-196547] [transport.py] [_log()] server lang: <none>
2026-02-15T02:43:40.663 [DEBUG] [Thread-196547] [transport.py] [_log()] kex follows: False
2026-02-15T02:43:40.663 [DEBUG] [Thread-196547] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:43:40.663 [DEBUG] [Thread-196547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:43:40.663 [DEBUG] [Thread-196547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:43:40.663 [DEBUG] [Thread-196547] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:43:40.663 [DEBUG] [Thread-196547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:43:40.663 [DEBUG] [Thread-196547] [transport.py] [_log()] Compression: none
2026-02-15T02:43:40.663 [DEBUG] [Thread-196547] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:43:40.671 [DEBUG] [Thread-196547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:43:40.671 [DEBUG] [Thread-196547] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:43:40.671 [DEBUG] [Thread-196547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:43:40.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:43:40.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:43:40.673 [DEBUG] [Thread-196547] [transport.py] [_log()] userauth is OK
2026-02-15T02:43:40.673 [DEBUG] [Thread-196547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:43:40.673 [DEBUG] [Thread-196547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:43:40.673 [DEBUG] [Thread-196547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:43:40.674 [DEBUG] [Thread-196547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:43:40.688 [INFO] [Thread-196547] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:43:40.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:43:41.352 [DEBUG] [Thread-196547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:43:41.352 [DEBUG] [Thread-196547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:43:41.352 [DEBUG] [Thread-196547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:43:41.393 [DEBUG] [Thread-196547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:43:41.394 [DEBUG] [Thread-196547] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:43:41.397 [DEBUG] [Thread-196547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:43:41.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:43:41.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:43:41.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:43:41.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:43:41.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:43:41.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:43:41.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:43:41.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:43:41.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:43:41.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.029621 -999.00   +6.30  23.01     92   +5.10 1 2 1 3 1     0    0 1.07 -8.05 zNESW 23.0 23.0 146.2 33.0 7.0 -23.9 6.8 -23.2 6.5 -22.1 6.9 -23.3
2026-02-15T02:43:41.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:43:41.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:43:41.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.029621
2026-02-15T02:43:41.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:43:41.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:43:41.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:43:41.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:43:41.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:43:41.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:43:05', tmtdew=0.97, humidity=93.77, cloud=0.0, wind=34.53, temperature=6.42, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:42:39.254', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.0352500000000004, 1.3902500000000009, 0.9374999999999991, nan, nan, nan, nan, 1.5054999999999996, 0.359, 0.5332499999999989, 1.0140000000000002, 1.721, 1.5532499999999994, 1.8594999999999997, 1.608999999999999, 0.5242500000000003, 0.24649999999999928, 0.3644999999999996, 0.5517499999999993, 0.8209999999999988, 0.7212499999999995, 0.8657500000000011, 0.48625000000000007, 0.34299999999999997, 0.21649999999999991, 0.32225000000000037, 0.2995000000000001, 0.3774999999999995, 0.30350000000000144, 0.40250000000000163, 0.37100000000000044, 0.24774999999999991], zp_timestamp='2026-02-15T00:41:00')
2026-02-15T02:43:41.425 [DEBUG] [Thread-196547] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:43:41.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-15T02:43:41.520 [DEBUG] [Thread-196550] [transport.py] [_log()] starting thread (client mode): 0xa2d94f10
2026-02-15T02:43:41.520 [DEBUG] [Thread-196550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:43:41.534 [DEBUG] [Thread-196550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:43:41.534 [INFO] [Thread-196550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:43:41.542 [DEBUG] [Thread-196550] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:43:41.542 [DEBUG] [Thread-196550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:43:41.542 [DEBUG] [Thread-196550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:43:41.543 [DEBUG] [Thread-196550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:43:41.543 [DEBUG] [Thread-196550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:43:41.543 [DEBUG] [Thread-196550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:43:41.543 [DEBUG] [Thread-196550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:43:41.543 [DEBUG] [Thread-196550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:43:41.543 [DEBUG] [Thread-196550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:43:41.543 [DEBUG] [Thread-196550] [transport.py] [_log()] client lang: <none>
2026-02-15T02:43:41.543 [DEBUG] [Thread-196550] [transport.py] [_log()] server lang: <none>
2026-02-15T02:43:41.543 [DEBUG] [Thread-196550] [transport.py] [_log()] kex follows: False
2026-02-15T02:43:41.543 [DEBUG] [Thread-196550] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:43:41.543 [DEBUG] [Thread-196550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:43:41.543 [DEBUG] [Thread-196550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:43:41.543 [DEBUG] [Thread-196550] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:43:41.543 [DEBUG] [Thread-196550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:43:41.543 [DEBUG] [Thread-196550] [transport.py] [_log()] Compression: none
2026-02-15T02:43:41.543 [DEBUG] [Thread-196550] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:43:41.599 [DEBUG] [Thread-196550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:43:41.600 [DEBUG] [Thread-196550] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:43:41.600 [DEBUG] [Thread-196550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:43:41.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:43:41.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:43:41.657 [DEBUG] [Thread-196550] [transport.py] [_log()] userauth is OK
2026-02-15T02:43:41.657 [DEBUG] [Thread-196550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:43:41.657 [DEBUG] [Thread-196550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:43:41.657 [DEBUG] [Thread-196550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:43:41.657 [DEBUG] [Thread-196550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:43:41.676 [INFO] [Thread-196550] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:43:41.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-15T02:43:41.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:43:42.489 [DEBUG] [Thread-196550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:43:42.490 [DEBUG] [Thread-196550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:43:42.537 [DEBUG] [Thread-196550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:43:42.538 [DEBUG] [Thread-196550] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:43:42.547 [DEBUG] [Thread-196550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:43:42.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:43:42.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-15T02:43:42.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-15T02:43:42.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:43:42.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:43:42.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:43:42.585 [DEBUG] [Thread-196550] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:43:47.446 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:43:47.447 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:43:55.014 [DEBUG] [Thread-196552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:44:10.068 [DEBUG] [Thread-196553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:44:12.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:44:12.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:44:12.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-15T02:44:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 43, 41), 1.44, 90.48, 0.0, 37.89, 6.7, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:44:14.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:43:41
2026-02-15T02:44:14.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:44:15.096 [DEBUG] [Thread-196554] [transport.py] [_log()] starting thread (client mode): 0xa5743eb0
2026-02-15T02:44:15.096 [DEBUG] [Thread-196554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:44:15.117 [DEBUG] [Thread-196554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:44:15.117 [INFO] [Thread-196554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:44:15.120 [DEBUG] [Thread-196554] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:44:15.120 [DEBUG] [Thread-196554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:44:15.120 [DEBUG] [Thread-196554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:44:15.120 [DEBUG] [Thread-196554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:44:15.120 [DEBUG] [Thread-196554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:44:15.120 [DEBUG] [Thread-196554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:44:15.120 [DEBUG] [Thread-196554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:44:15.120 [DEBUG] [Thread-196554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:44:15.120 [DEBUG] [Thread-196554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:44:15.120 [DEBUG] [Thread-196554] [transport.py] [_log()] client lang: <none>
2026-02-15T02:44:15.120 [DEBUG] [Thread-196554] [transport.py] [_log()] server lang: <none>
2026-02-15T02:44:15.120 [DEBUG] [Thread-196554] [transport.py] [_log()] kex follows: False
2026-02-15T02:44:15.120 [DEBUG] [Thread-196554] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:44:15.121 [DEBUG] [Thread-196554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:44:15.121 [DEBUG] [Thread-196554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:44:15.121 [DEBUG] [Thread-196554] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:44:15.121 [DEBUG] [Thread-196554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:44:15.121 [DEBUG] [Thread-196554] [transport.py] [_log()] Compression: none
2026-02-15T02:44:15.121 [DEBUG] [Thread-196554] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:44:15.139 [DEBUG] [Thread-196554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:44:15.139 [DEBUG] [Thread-196554] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:44:15.140 [DEBUG] [Thread-196554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:44:15.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:44:15.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:44:15.142 [DEBUG] [Thread-196554] [transport.py] [_log()] userauth is OK
2026-02-15T02:44:15.142 [DEBUG] [Thread-196554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:44:15.143 [DEBUG] [Thread-196554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:44:15.143 [DEBUG] [Thread-196554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:44:15.143 [DEBUG] [Thread-196554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:44:15.169 [INFO] [Thread-196554] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:44:15.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:44:15.825 [DEBUG] [Thread-196554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:44:15.825 [DEBUG] [Thread-196554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:44:15.825 [DEBUG] [Thread-196554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:44:15.865 [DEBUG] [Thread-196554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:44:15.866 [DEBUG] [Thread-196554] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:44:15.869 [DEBUG] [Thread-196554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:44:15.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:44:15.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:44:15.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:44:15.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:44:15.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:44:15.892 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:44:15.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:44:15.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:44:15.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:44:15.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.030315 -999.00   +6.20  24.60     92   +5.10 1 1 1 3 1     0    0 0.98 -10.12 ZNESW 24.6 24.6 142.0 31.6 6.9 -23.9 6.7 -22.9 6.5 -21.2 6.9 -22.7
2026-02-15T02:44:15.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:44:15.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:44:15.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.030315
2026-02-15T02:44:15.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:44:15.894 [DEBUG] [Thread-196554] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:44:15.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:44:15.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:44:15.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:44:15.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:44:15.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:43:41', tmtdew=1.44, humidity=90.48, cloud=0.0, wind=37.89, temperature=6.7, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:43:39.216', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.0352500000000004, 1.3902500000000009, 0.9374999999999991, nan, nan, nan, nan, 1.5054999999999996, 0.359, 0.5332499999999989, 1.0140000000000002, 1.721, 1.5532499999999994, 1.8594999999999997, 1.608999999999999, 0.5242500000000003, 0.24649999999999928, 0.3644999999999996, 0.5517499999999993, 0.8209999999999988, 0.7212499999999995, 0.8657500000000011, 0.48625000000000007, 0.34299999999999997, 0.21649999999999991, 0.32225000000000037, 0.2995000000000001, 0.3774999999999995, 0.30350000000000144, 0.40250000000000163, 0.37100000000000044, 0.24774999999999991], zp_timestamp='2026-02-15T00:41:00')
2026-02-15T02:44:15.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-15T02:44:15.991 [DEBUG] [Thread-196557] [transport.py] [_log()] starting thread (client mode): 0xa2d01870
2026-02-15T02:44:15.991 [DEBUG] [Thread-196557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:44:16.005 [DEBUG] [Thread-196557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:44:16.006 [INFO] [Thread-196557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:44:16.013 [DEBUG] [Thread-196557] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:44:16.014 [DEBUG] [Thread-196557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:44:16.014 [DEBUG] [Thread-196557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:44:16.014 [DEBUG] [Thread-196557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:44:16.014 [DEBUG] [Thread-196557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:44:16.014 [DEBUG] [Thread-196557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:44:16.014 [DEBUG] [Thread-196557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:44:16.015 [DEBUG] [Thread-196557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:44:16.015 [DEBUG] [Thread-196557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:44:16.015 [DEBUG] [Thread-196557] [transport.py] [_log()] client lang: <none>
2026-02-15T02:44:16.015 [DEBUG] [Thread-196557] [transport.py] [_log()] server lang: <none>
2026-02-15T02:44:16.015 [DEBUG] [Thread-196557] [transport.py] [_log()] kex follows: False
2026-02-15T02:44:16.015 [DEBUG] [Thread-196557] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:44:16.015 [DEBUG] [Thread-196557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:44:16.015 [DEBUG] [Thread-196557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:44:16.016 [DEBUG] [Thread-196557] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:44:16.016 [DEBUG] [Thread-196557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:44:16.016 [DEBUG] [Thread-196557] [transport.py] [_log()] Compression: none
2026-02-15T02:44:16.016 [DEBUG] [Thread-196557] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:44:16.077 [DEBUG] [Thread-196557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:44:16.078 [DEBUG] [Thread-196557] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:44:16.078 [DEBUG] [Thread-196557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:44:16.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:44:16.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:44:16.140 [DEBUG] [Thread-196557] [transport.py] [_log()] userauth is OK
2026-02-15T02:44:16.141 [DEBUG] [Thread-196557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:44:16.141 [DEBUG] [Thread-196557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:44:16.141 [DEBUG] [Thread-196557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:44:16.141 [DEBUG] [Thread-196557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:44:16.160 [INFO] [Thread-196557] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:44:16.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-15T02:44:16.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:44:16.982 [DEBUG] [Thread-196557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:44:16.982 [DEBUG] [Thread-196557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:44:17.030 [DEBUG] [Thread-196557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:44:17.030 [DEBUG] [Thread-196557] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:44:17.039 [DEBUG] [Thread-196557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:44:17.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:44: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-15T02:44: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-15T02:44:17.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:44:17.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:44:17.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:44:17.076 [DEBUG] [Thread-196557] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:44:17.831 [DEBUG] [Thread-196559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:44:25.104 [DEBUG] [Thread-196560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:44:40.153 [DEBUG] [Thread-196561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:44:47.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:44:47.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:44:47.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-15T02:44:47.652 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:44:47.654 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:44:49.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 44, 17), 0.96, 93.81, 0.0, 34.83, 6.39, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:44:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:44:17
2026-02-15T02:44:49.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:44:49.545 [DEBUG] [Thread-196562] [transport.py] [_log()] starting thread (client mode): 0xa2d6e920
2026-02-15T02:44:49.546 [DEBUG] [Thread-196562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:44:49.565 [DEBUG] [Thread-196562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:44:49.565 [INFO] [Thread-196562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:44:49.568 [DEBUG] [Thread-196562] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:44:49.569 [DEBUG] [Thread-196562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:44:49.569 [DEBUG] [Thread-196562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:44:49.569 [DEBUG] [Thread-196562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:44:49.569 [DEBUG] [Thread-196562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:44:49.569 [DEBUG] [Thread-196562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:44:49.569 [DEBUG] [Thread-196562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:44:49.569 [DEBUG] [Thread-196562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:44:49.569 [DEBUG] [Thread-196562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:44:49.569 [DEBUG] [Thread-196562] [transport.py] [_log()] client lang: <none>
2026-02-15T02:44:49.569 [DEBUG] [Thread-196562] [transport.py] [_log()] server lang: <none>
2026-02-15T02:44:49.569 [DEBUG] [Thread-196562] [transport.py] [_log()] kex follows: False
2026-02-15T02:44:49.569 [DEBUG] [Thread-196562] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:44:49.569 [DEBUG] [Thread-196562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:44:49.570 [DEBUG] [Thread-196562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:44:49.570 [DEBUG] [Thread-196562] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:44:49.570 [DEBUG] [Thread-196562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:44:49.570 [DEBUG] [Thread-196562] [transport.py] [_log()] Compression: none
2026-02-15T02:44:49.570 [DEBUG] [Thread-196562] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:44:49.589 [DEBUG] [Thread-196562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:44:49.590 [DEBUG] [Thread-196562] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:44:49.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:44:49.591 [DEBUG] [Thread-196562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:44:49.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:44:49.593 [DEBUG] [Thread-196562] [transport.py] [_log()] userauth is OK
2026-02-15T02:44:49.594 [DEBUG] [Thread-196562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:44:49.594 [DEBUG] [Thread-196562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:44:49.594 [DEBUG] [Thread-196562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:44:49.594 [DEBUG] [Thread-196562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:44:49.629 [INFO] [Thread-196562] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:44:49.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:44:50.248 [DEBUG] [Thread-196562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:44:50.248 [DEBUG] [Thread-196562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:44:50.249 [DEBUG] [Thread-196562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:44:50.289 [DEBUG] [Thread-196562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:44:50.290 [DEBUG] [Thread-196562] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:44:50.293 [DEBUG] [Thread-196562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:44:50.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:44:50.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:44:50.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:44:50.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:44:50.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:44:50.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:44:50.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:44:50.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:44:50.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:44:50.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.030662 -999.00   +6.20  30.18     92   +5.00 1 1 2 3 1     0    0 1.02 -9.33 ZNESW 30.2 30.2 148.2 38.2 6.9 -23.5 6.7 -23.0 6.5 -22.0 6.8 -23.1
2026-02-15T02:44:50.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:44:50.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:44:50.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.030662
2026-02-15T02:44:50.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:44:50.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:44:50.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:44:50.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:44:50.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T02:44:50.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:44:17', tmtdew=0.96, humidity=93.81, cloud=0.0, wind=34.83, temperature=6.39, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:44:09.197', atlas_cloud=1, atlas_rain=1, zp_data=[nan, 1.0352500000000004, 1.3902500000000009, 0.9374999999999991, nan, nan, nan, nan, 1.5054999999999996, 0.359, 0.5332499999999989, 1.0140000000000002, 1.721, 1.5532499999999994, 1.8594999999999997, 1.608999999999999, 0.5242500000000003, 0.24649999999999928, 0.3644999999999996, 0.5517499999999993, 0.8209999999999988, 0.7212499999999995, 0.8657500000000011, 0.48625000000000007, 0.34299999999999997, 0.21649999999999991, 0.32225000000000037, 0.2995000000000001, 0.3774999999999995, 0.30350000000000144, 0.40250000000000163, 0.37100000000000044, 0.24774999999999991], zp_timestamp='2026-02-15T00:41:00')
2026-02-15T02:44:50.320 [DEBUG] [Thread-196562] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:44:50.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-15T02:44:50.424 [DEBUG] [Thread-196565] [transport.py] [_log()] starting thread (client mode): 0xa2debeb0
2026-02-15T02:44:50.424 [DEBUG] [Thread-196565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:44:50.444 [DEBUG] [Thread-196565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:44:50.444 [INFO] [Thread-196565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:44:50.452 [DEBUG] [Thread-196565] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:44:50.452 [DEBUG] [Thread-196565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:44:50.452 [DEBUG] [Thread-196565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:44:50.453 [DEBUG] [Thread-196565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:44:50.453 [DEBUG] [Thread-196565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:44:50.453 [DEBUG] [Thread-196565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:44:50.453 [DEBUG] [Thread-196565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:44:50.453 [DEBUG] [Thread-196565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:44:50.453 [DEBUG] [Thread-196565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:44:50.453 [DEBUG] [Thread-196565] [transport.py] [_log()] client lang: <none>
2026-02-15T02:44:50.453 [DEBUG] [Thread-196565] [transport.py] [_log()] server lang: <none>
2026-02-15T02:44:50.453 [DEBUG] [Thread-196565] [transport.py] [_log()] kex follows: False
2026-02-15T02:44:50.453 [DEBUG] [Thread-196565] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:44:50.453 [DEBUG] [Thread-196565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:44:50.453 [DEBUG] [Thread-196565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:44:50.453 [DEBUG] [Thread-196565] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:44:50.453 [DEBUG] [Thread-196565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:44:50.454 [DEBUG] [Thread-196565] [transport.py] [_log()] Compression: none
2026-02-15T02:44:50.454 [DEBUG] [Thread-196565] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:44:50.512 [DEBUG] [Thread-196565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:44:50.513 [DEBUG] [Thread-196565] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:44:50.513 [DEBUG] [Thread-196565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:44:50.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:44:50.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:44:50.569 [DEBUG] [Thread-196565] [transport.py] [_log()] userauth is OK
2026-02-15T02:44:50.569 [DEBUG] [Thread-196565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:44:50.569 [DEBUG] [Thread-196565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:44:50.569 [DEBUG] [Thread-196565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:44:50.569 [DEBUG] [Thread-196565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:44:50.588 [INFO] [Thread-196565] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:44:50.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-15T02:44:50.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:44:51.347 [DEBUG] [Thread-196565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:44:51.348 [DEBUG] [Thread-196565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:44:51.395 [DEBUG] [Thread-196565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:44:51.395 [DEBUG] [Thread-196565] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:44:51.404 [DEBUG] [Thread-196565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:44:51.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:44: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-15T02:44:51.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-15T02:44:51.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:44:51.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:44:51.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:44:51.439 [DEBUG] [Thread-196565] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:44:55.193 [DEBUG] [Thread-196567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:45:10.244 [DEBUG] [Thread-196568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:45:17.888 [DEBUG] [Thread-196569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:45:21.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:45:21.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:45:21.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-15T02:45:23.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 44, 52), 0.9, 93.86, 0.0, 33.72, 6.3, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:45:23.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:44:52
2026-02-15T02:45:24.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:45:24.373 [DEBUG] [Thread-196570] [transport.py] [_log()] starting thread (client mode): 0xa2d1bf70
2026-02-15T02:45:24.374 [DEBUG] [Thread-196570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:45:24.394 [DEBUG] [Thread-196570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:45:24.394 [INFO] [Thread-196570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:45:24.397 [DEBUG] [Thread-196570] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:45:24.397 [DEBUG] [Thread-196570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:45:24.397 [DEBUG] [Thread-196570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:45:24.397 [DEBUG] [Thread-196570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:45:24.398 [DEBUG] [Thread-196570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:45:24.398 [DEBUG] [Thread-196570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:45:24.398 [DEBUG] [Thread-196570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:45:24.398 [DEBUG] [Thread-196570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:45:24.398 [DEBUG] [Thread-196570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:45:24.398 [DEBUG] [Thread-196570] [transport.py] [_log()] client lang: <none>
2026-02-15T02:45:24.398 [DEBUG] [Thread-196570] [transport.py] [_log()] server lang: <none>
2026-02-15T02:45:24.398 [DEBUG] [Thread-196570] [transport.py] [_log()] kex follows: False
2026-02-15T02:45:24.398 [DEBUG] [Thread-196570] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:45:24.398 [DEBUG] [Thread-196570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:45:24.398 [DEBUG] [Thread-196570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:45:24.398 [DEBUG] [Thread-196570] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:45:24.398 [DEBUG] [Thread-196570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:45:24.398 [DEBUG] [Thread-196570] [transport.py] [_log()] Compression: none
2026-02-15T02:45:24.398 [DEBUG] [Thread-196570] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:45:24.407 [DEBUG] [Thread-196570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:45:24.407 [DEBUG] [Thread-196570] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:45:24.407 [DEBUG] [Thread-196570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:45:24.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:45:24.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:45:24.409 [DEBUG] [Thread-196570] [transport.py] [_log()] userauth is OK
2026-02-15T02:45:24.409 [DEBUG] [Thread-196570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:45:24.410 [DEBUG] [Thread-196570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:45:24.410 [DEBUG] [Thread-196570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:45:24.410 [DEBUG] [Thread-196570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:45:24.434 [INFO] [Thread-196570] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:45:24.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:45:25.074 [DEBUG] [Thread-196570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:45:25.074 [DEBUG] [Thread-196570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:45:25.075 [DEBUG] [Thread-196570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:45:25.115 [DEBUG] [Thread-196570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:45:25.115 [DEBUG] [Thread-196570] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:45:25.118 [DEBUG] [Thread-196570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:45:25.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:45:25.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:45:25.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:45:25.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:45:25.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:45:25.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:45:25.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:45:25.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:45:25.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:45:25.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.031010 -999.00   +6.20  26.97     92   +5.00 1 2 1 3 1     0    0 0.99 -9.14 zNESW 27.0 27.0 144.2 34.7 6.9 -24.1 6.7 -23.2 6.5 -22.0 6.8 -23.4
2026-02-15T02:45:25.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:45:25.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:45:25.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.031010
2026-02-15T02:45:25.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:45:25.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:45:25.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:45:25.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:45:25.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:45:25.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:44:52', tmtdew=0.9, humidity=93.86, cloud=0.0, wind=33.72, temperature=6.3, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:44:39.264', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.0352500000000004, 1.3902500000000009, 0.9374999999999991, nan, nan, nan, nan, 1.5054999999999996, 0.359, 0.5332499999999989, 1.0140000000000002, 1.721, 1.5532499999999994, 1.8594999999999997, 1.608999999999999, 0.5242500000000003, 0.24649999999999928, 0.3644999999999996, 0.5517499999999993, 0.8209999999999988, 0.7212499999999995, 0.8657500000000011, 0.48625000000000007, 0.34299999999999997, 0.21649999999999991, 0.32225000000000037, 0.2995000000000001, 0.3774999999999995, 0.30350000000000144, 0.40250000000000163, 0.37100000000000044, 0.24774999999999991], zp_timestamp='2026-02-15T00:41:00')
2026-02-15T02:45:25.143 [DEBUG] [Thread-196570] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:45:25.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-15T02:45:25.238 [DEBUG] [Thread-196573] [transport.py] [_log()] starting thread (client mode): 0xa2d6c430
2026-02-15T02:45:25.238 [DEBUG] [Thread-196573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:45:25.254 [DEBUG] [Thread-196573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:45:25.254 [INFO] [Thread-196573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:45:25.262 [DEBUG] [Thread-196573] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:45:25.262 [DEBUG] [Thread-196573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:45:25.262 [DEBUG] [Thread-196573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:45:25.262 [DEBUG] [Thread-196573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:45:25.262 [DEBUG] [Thread-196573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:45:25.262 [DEBUG] [Thread-196573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:45:25.262 [DEBUG] [Thread-196573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:45:25.262 [DEBUG] [Thread-196573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:45:25.262 [DEBUG] [Thread-196573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:45:25.262 [DEBUG] [Thread-196573] [transport.py] [_log()] client lang: <none>
2026-02-15T02:45:25.262 [DEBUG] [Thread-196573] [transport.py] [_log()] server lang: <none>
2026-02-15T02:45:25.262 [DEBUG] [Thread-196573] [transport.py] [_log()] kex follows: False
2026-02-15T02:45:25.262 [DEBUG] [Thread-196573] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:45:25.263 [DEBUG] [Thread-196573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:45:25.263 [DEBUG] [Thread-196573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:45:25.263 [DEBUG] [Thread-196573] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:45:25.263 [DEBUG] [Thread-196573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:45:25.263 [DEBUG] [Thread-196573] [transport.py] [_log()] Compression: none
2026-02-15T02:45:25.263 [DEBUG] [Thread-196573] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:45:25.280 [DEBUG] [Thread-196575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:45:25.320 [DEBUG] [Thread-196573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:45:25.320 [DEBUG] [Thread-196573] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:45:25.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:45:25.322 [DEBUG] [Thread-196573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:45:25.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:45:25.377 [DEBUG] [Thread-196573] [transport.py] [_log()] userauth is OK
2026-02-15T02:45:25.377 [DEBUG] [Thread-196573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:45:25.377 [DEBUG] [Thread-196573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:45:25.377 [DEBUG] [Thread-196573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:45:25.377 [DEBUG] [Thread-196573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:45:25.397 [INFO] [Thread-196573] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:45:25.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-15T02:45:25.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:45:26.209 [DEBUG] [Thread-196573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:45:26.209 [DEBUG] [Thread-196573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:45:26.261 [DEBUG] [Thread-196573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:45:26.261 [DEBUG] [Thread-196573] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:45:26.272 [DEBUG] [Thread-196573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:45:26.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:45:26.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-15T02:45:26.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-15T02:45:26.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:45:26.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:45:26.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:45:26.315 [DEBUG] [Thread-196573] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:45:40.330 [DEBUG] [Thread-196576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:45:47.856 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:45:47.858 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:45:55.365 [DEBUG] [Thread-196577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:45:56.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:45:56.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:45:56.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-15T02:45:58.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 45, 27), 0.91, 93.82, 0.0, 34.02, 6.27, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:45:58.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:45:27
2026-02-15T02:45:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:45:58.757 [DEBUG] [Thread-196578] [transport.py] [_log()] starting thread (client mode): 0xa2d69030
2026-02-15T02:45:58.758 [DEBUG] [Thread-196578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:45:58.778 [DEBUG] [Thread-196578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:45:58.778 [INFO] [Thread-196578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:45:58.781 [DEBUG] [Thread-196578] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:45:58.781 [DEBUG] [Thread-196578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:45:58.782 [DEBUG] [Thread-196578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:45:58.782 [DEBUG] [Thread-196578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:45:58.782 [DEBUG] [Thread-196578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:45:58.782 [DEBUG] [Thread-196578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:45:58.782 [DEBUG] [Thread-196578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:45:58.782 [DEBUG] [Thread-196578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:45:58.782 [DEBUG] [Thread-196578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:45:58.782 [DEBUG] [Thread-196578] [transport.py] [_log()] client lang: <none>
2026-02-15T02:45:58.782 [DEBUG] [Thread-196578] [transport.py] [_log()] server lang: <none>
2026-02-15T02:45:58.782 [DEBUG] [Thread-196578] [transport.py] [_log()] kex follows: False
2026-02-15T02:45:58.782 [DEBUG] [Thread-196578] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:45:58.782 [DEBUG] [Thread-196578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:45:58.782 [DEBUG] [Thread-196578] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:45:58.782 [DEBUG] [Thread-196578] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:45:58.782 [DEBUG] [Thread-196578] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:45:58.782 [DEBUG] [Thread-196578] [transport.py] [_log()] Compression: none
2026-02-15T02:45:58.782 [DEBUG] [Thread-196578] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:45:58.802 [DEBUG] [Thread-196578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:45:58.802 [DEBUG] [Thread-196578] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:45:58.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:45:58.803 [DEBUG] [Thread-196578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:45:58.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:45:58.805 [DEBUG] [Thread-196578] [transport.py] [_log()] userauth is OK
2026-02-15T02:45:58.806 [DEBUG] [Thread-196578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:45:58.806 [DEBUG] [Thread-196578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:45:58.806 [DEBUG] [Thread-196578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:45:58.806 [DEBUG] [Thread-196578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:45:58.829 [INFO] [Thread-196578] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:45:58.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:45:59.487 [DEBUG] [Thread-196578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:45:59.487 [DEBUG] [Thread-196578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:45:59.487 [DEBUG] [Thread-196578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:45:59.528 [DEBUG] [Thread-196578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:45:59.528 [DEBUG] [Thread-196578] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:45:59.531 [DEBUG] [Thread-196578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:45:59.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:45:59.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:45:59.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:45:59.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:45:59.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:45:59.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:45:59.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:45:59.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:45:59.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:45:59.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.031357 -999.00   +6.20  29.53     92   +5.00 1 2 1 3 1     0    0 0.98 -9.35 zNESW 29.5 29.5 144.4 35.1 6.9 -24.0 6.7 -23.3 6.5 -22.0 6.8 -23.3
2026-02-15T02:45:59.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:45:59.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:45:59.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.031357
2026-02-15T02:45:59.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:45:59.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:45:59.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:45:59.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:45:59.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:45:59.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:45:27', tmtdew=0.91, humidity=93.82, cloud=0.0, wind=34.02, temperature=6.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:45:09.245', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.5772500000000003, 2.22875, 0.8329999999999993, nan, nan, nan, nan, nan, 0.5970000000000004, 1.1452499999999999, 2.013, 2.3774999999999995, 1.8672499999999994, 2.172999999999999, 1.8504999999999994, 0.6372499999999999, 0.41549999999999976, 0.5989999999999993, 0.8122499999999988, 1.2049999999999983, 0.9647499999999987, 1.293750000000001, 0.6072500000000005, 0.37599999999999945, 0.33000000000000007, 0.3777500000000007, 0.36549999999999994, 0.5495000000000001, 0.3760000000000012, 0.5000000000000009, 0.40250000000000075, 0.3017499999999993], zp_timestamp='2026-02-15T00:45:00')
2026-02-15T02:45:59.560 [DEBUG] [Thread-196578] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:45:59.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T02:45:59.657 [DEBUG] [Thread-196581] [transport.py] [_log()] starting thread (client mode): 0xa2d86b00
2026-02-15T02:45:59.658 [DEBUG] [Thread-196581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:45:59.672 [DEBUG] [Thread-196581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:45:59.672 [INFO] [Thread-196581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:45:59.679 [DEBUG] [Thread-196581] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:45:59.679 [DEBUG] [Thread-196581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:45:59.679 [DEBUG] [Thread-196581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:45:59.679 [DEBUG] [Thread-196581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:45:59.679 [DEBUG] [Thread-196581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:45:59.679 [DEBUG] [Thread-196581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:45:59.679 [DEBUG] [Thread-196581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:45:59.679 [DEBUG] [Thread-196581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:45:59.679 [DEBUG] [Thread-196581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:45:59.679 [DEBUG] [Thread-196581] [transport.py] [_log()] client lang: <none>
2026-02-15T02:45:59.679 [DEBUG] [Thread-196581] [transport.py] [_log()] server lang: <none>
2026-02-15T02:45:59.679 [DEBUG] [Thread-196581] [transport.py] [_log()] kex follows: False
2026-02-15T02:45:59.679 [DEBUG] [Thread-196581] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:45:59.679 [DEBUG] [Thread-196581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:45:59.680 [DEBUG] [Thread-196581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:45:59.680 [DEBUG] [Thread-196581] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:45:59.680 [DEBUG] [Thread-196581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:45:59.680 [DEBUG] [Thread-196581] [transport.py] [_log()] Compression: none
2026-02-15T02:45:59.680 [DEBUG] [Thread-196581] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:45:59.737 [DEBUG] [Thread-196581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:45:59.738 [DEBUG] [Thread-196581] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:45:59.738 [DEBUG] [Thread-196581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:45:59.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:45:59.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:45:59.793 [DEBUG] [Thread-196581] [transport.py] [_log()] userauth is OK
2026-02-15T02:45:59.794 [DEBUG] [Thread-196581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:45:59.794 [DEBUG] [Thread-196581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:45:59.794 [DEBUG] [Thread-196581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:45:59.794 [DEBUG] [Thread-196581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:45:59.813 [INFO] [Thread-196581] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:45:59.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-15T02:45:59.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:46:00.621 [DEBUG] [Thread-196581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:46:00.621 [DEBUG] [Thread-196581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:46:00.670 [DEBUG] [Thread-196581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:46:00.670 [DEBUG] [Thread-196581] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:46:00.679 [DEBUG] [Thread-196581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:46:00.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:46:00.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-15T02:46:00.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-15T02:46:00.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:46:00.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:46:00.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:46:00.719 [DEBUG] [Thread-196581] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:46:10.400 [DEBUG] [Thread-196583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:46:17.946 [DEBUG] [Thread-196584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:46:25.456 [DEBUG] [Thread-196585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:46:30.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:46:30.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:46:30.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-15T02:46:32.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 46, 3), 0.91, 93.81, 0.0, 34.55, 6.22, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:46:32.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:46:03
2026-02-15T02:46:33.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:46:33.480 [DEBUG] [Thread-196586] [transport.py] [_log()] starting thread (client mode): 0xa2d97e20
2026-02-15T02:46:33.480 [DEBUG] [Thread-196586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:46:33.499 [DEBUG] [Thread-196586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:46:33.500 [INFO] [Thread-196586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:46:33.503 [DEBUG] [Thread-196586] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:46:33.503 [DEBUG] [Thread-196586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:46:33.503 [DEBUG] [Thread-196586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:46:33.503 [DEBUG] [Thread-196586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:46:33.503 [DEBUG] [Thread-196586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:46:33.503 [DEBUG] [Thread-196586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:46:33.503 [DEBUG] [Thread-196586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:46:33.503 [DEBUG] [Thread-196586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:46:33.503 [DEBUG] [Thread-196586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:46:33.504 [DEBUG] [Thread-196586] [transport.py] [_log()] client lang: <none>
2026-02-15T02:46:33.504 [DEBUG] [Thread-196586] [transport.py] [_log()] server lang: <none>
2026-02-15T02:46:33.504 [DEBUG] [Thread-196586] [transport.py] [_log()] kex follows: False
2026-02-15T02:46:33.504 [DEBUG] [Thread-196586] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:46:33.504 [DEBUG] [Thread-196586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:46:33.504 [DEBUG] [Thread-196586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:46:33.504 [DEBUG] [Thread-196586] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:46:33.504 [DEBUG] [Thread-196586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:46:33.504 [DEBUG] [Thread-196586] [transport.py] [_log()] Compression: none
2026-02-15T02:46:33.504 [DEBUG] [Thread-196586] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:46:33.513 [DEBUG] [Thread-196586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:46:33.513 [DEBUG] [Thread-196586] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:46:33.514 [DEBUG] [Thread-196586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:46:33.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:46:33.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:46:33.515 [DEBUG] [Thread-196586] [transport.py] [_log()] userauth is OK
2026-02-15T02:46:33.515 [DEBUG] [Thread-196586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:46:33.516 [DEBUG] [Thread-196586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:46:33.516 [DEBUG] [Thread-196586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:46:33.516 [DEBUG] [Thread-196586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:46:33.533 [INFO] [Thread-196586] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:46:33.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:46:34.151 [DEBUG] [Thread-196586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:46:34.152 [DEBUG] [Thread-196586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:46:34.152 [DEBUG] [Thread-196586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:46:34.192 [DEBUG] [Thread-196586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:46:34.193 [DEBUG] [Thread-196586] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:46:34.196 [DEBUG] [Thread-196586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:46:34.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:46:34.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:46:34.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:46:34.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:46:34.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:46:34.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:46:34.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:46:34.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:46:34.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:46:34.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.031704 -999.00   +6.10  30.02     92   +5.00 1 2 2 3 1     0    0 0.98 -10.29 zNESW 30.0 30.0 146.2 36.7 6.9 -24.0 6.7 -23.3 6.5 -22.1 6.8 -23.4
2026-02-15T02:46:34.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:46:34.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:46:34.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.031704
2026-02-15T02:46:34.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:46:34.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:46:34.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:46:34.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:46:34.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:46:34.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:46:03', tmtdew=0.91, humidity=93.81, cloud=0.0, wind=34.55, temperature=6.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:45:39.226', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.5772500000000003, 2.22875, 0.8329999999999993, nan, nan, nan, nan, nan, 0.5970000000000004, 1.1452499999999999, 2.013, 2.3774999999999995, 1.8672499999999994, 2.172999999999999, 1.8504999999999994, 0.6372499999999999, 0.41549999999999976, 0.5989999999999993, 0.8122499999999988, 1.2049999999999983, 0.9647499999999987, 1.293750000000001, 0.6072500000000005, 0.37599999999999945, 0.33000000000000007, 0.3777500000000007, 0.36549999999999994, 0.5495000000000001, 0.3760000000000012, 0.5000000000000009, 0.40250000000000075, 0.3017499999999993], zp_timestamp='2026-02-15T00:45:00')
2026-02-15T02:46:34.224 [DEBUG] [Thread-196586] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:46:34.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-15T02:46:34.327 [DEBUG] [Thread-196589] [transport.py] [_log()] starting thread (client mode): 0xa2d94f10
2026-02-15T02:46:34.327 [DEBUG] [Thread-196589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:46:34.343 [DEBUG] [Thread-196589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:46:34.343 [INFO] [Thread-196589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:46:34.350 [DEBUG] [Thread-196589] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:46:34.351 [DEBUG] [Thread-196589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:46:34.351 [DEBUG] [Thread-196589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:46:34.351 [DEBUG] [Thread-196589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:46:34.351 [DEBUG] [Thread-196589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:46:34.351 [DEBUG] [Thread-196589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:46:34.351 [DEBUG] [Thread-196589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:46:34.351 [DEBUG] [Thread-196589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:46:34.351 [DEBUG] [Thread-196589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:46:34.351 [DEBUG] [Thread-196589] [transport.py] [_log()] client lang: <none>
2026-02-15T02:46:34.351 [DEBUG] [Thread-196589] [transport.py] [_log()] server lang: <none>
2026-02-15T02:46:34.351 [DEBUG] [Thread-196589] [transport.py] [_log()] kex follows: False
2026-02-15T02:46:34.351 [DEBUG] [Thread-196589] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:46:34.351 [DEBUG] [Thread-196589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:46:34.351 [DEBUG] [Thread-196589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:46:34.351 [DEBUG] [Thread-196589] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:46:34.351 [DEBUG] [Thread-196589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:46:34.351 [DEBUG] [Thread-196589] [transport.py] [_log()] Compression: none
2026-02-15T02:46:34.351 [DEBUG] [Thread-196589] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:46:34.409 [DEBUG] [Thread-196589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:46:34.410 [DEBUG] [Thread-196589] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:46:34.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:46:34.411 [DEBUG] [Thread-196589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:46:34.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:46:34.465 [DEBUG] [Thread-196589] [transport.py] [_log()] userauth is OK
2026-02-15T02:46:34.466 [DEBUG] [Thread-196589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:46:34.466 [DEBUG] [Thread-196589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:46:34.466 [DEBUG] [Thread-196589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:46:34.466 [DEBUG] [Thread-196589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:46:34.485 [INFO] [Thread-196589] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:46:34.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-15T02:46:34.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:46:35.343 [DEBUG] [Thread-196589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:46:35.343 [DEBUG] [Thread-196589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:46:35.391 [DEBUG] [Thread-196589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:46:35.391 [DEBUG] [Thread-196589] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:46:35.402 [DEBUG] [Thread-196589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:46:35.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:46:35.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:46:35.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-15T02:46:35.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:46:35.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:46:35.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:46:35.440 [DEBUG] [Thread-196589] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:46:40.494 [DEBUG] [Thread-196591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:46:48.065 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:46:48.066 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:46:55.546 [DEBUG] [Thread-196592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:47:05.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:47:05.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:47:05.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-15T02:47:07.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 46, 39), 1.39, 90.78, 0.0, 36.62, 6.6, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:47:07.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:46:39
2026-02-15T02:47:07.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:47:08.090 [DEBUG] [Thread-196593] [transport.py] [_log()] starting thread (client mode): 0xa2d85870
2026-02-15T02:47:08.090 [DEBUG] [Thread-196593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:47:08.110 [DEBUG] [Thread-196593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:47:08.110 [INFO] [Thread-196593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:47:08.113 [DEBUG] [Thread-196593] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:47:08.114 [DEBUG] [Thread-196593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:47:08.114 [DEBUG] [Thread-196593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:47:08.114 [DEBUG] [Thread-196593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:47:08.114 [DEBUG] [Thread-196593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:47:08.114 [DEBUG] [Thread-196593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:47:08.114 [DEBUG] [Thread-196593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:47:08.114 [DEBUG] [Thread-196593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:47:08.114 [DEBUG] [Thread-196593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:47:08.114 [DEBUG] [Thread-196593] [transport.py] [_log()] client lang: <none>
2026-02-15T02:47:08.114 [DEBUG] [Thread-196593] [transport.py] [_log()] server lang: <none>
2026-02-15T02:47:08.114 [DEBUG] [Thread-196593] [transport.py] [_log()] kex follows: False
2026-02-15T02:47:08.114 [DEBUG] [Thread-196593] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:47:08.114 [DEBUG] [Thread-196593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:47:08.114 [DEBUG] [Thread-196593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:47:08.114 [DEBUG] [Thread-196593] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:47:08.114 [DEBUG] [Thread-196593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:47:08.114 [DEBUG] [Thread-196593] [transport.py] [_log()] Compression: none
2026-02-15T02:47:08.115 [DEBUG] [Thread-196593] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:47:08.125 [DEBUG] [Thread-196593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:47:08.126 [DEBUG] [Thread-196593] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:47:08.135 [DEBUG] [Thread-196593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:47:08.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:47:08.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:47:08.138 [DEBUG] [Thread-196593] [transport.py] [_log()] userauth is OK
2026-02-15T02:47:08.138 [DEBUG] [Thread-196593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:47:08.138 [DEBUG] [Thread-196593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:47:08.138 [DEBUG] [Thread-196593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:47:08.138 [DEBUG] [Thread-196593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:47:08.161 [INFO] [Thread-196593] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:47:08.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:47:08.825 [DEBUG] [Thread-196593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:47:08.825 [DEBUG] [Thread-196593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:47:08.825 [DEBUG] [Thread-196593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:47:08.865 [DEBUG] [Thread-196593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:47:08.865 [DEBUG] [Thread-196593] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:47:08.868 [DEBUG] [Thread-196593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:47:08.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:47:08.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:47:08.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:47:08.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:47:08.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:47:08.892 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:47:08.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:47:08.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:47:08.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:47:08.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.032051 -999.00   +6.10  26.81     92   +5.00 1 2 1 3 1     0    0 0.91 -11.58 zNESW 26.8 26.8 145.4 37.2 6.8 -24.0 6.7 -23.2 6.4 -21.9 6.8 -23.3
2026-02-15T02:47:08.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:47:08.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:47:08.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.032051
2026-02-15T02:47:08.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:47:08.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:47:08.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:47:08.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:47:08.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:47:08.900 [DEBUG] [Thread-196593] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:47:08.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:46:39', tmtdew=1.39, humidity=90.78, cloud=0.0, wind=36.62, temperature=6.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:46:09.206', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.5772500000000003, 2.22875, 0.8329999999999993, nan, nan, nan, nan, nan, 0.5970000000000004, 1.1452499999999999, 2.013, 2.3774999999999995, 1.8672499999999994, 2.172999999999999, 1.8504999999999994, 0.6372499999999999, 0.41549999999999976, 0.5989999999999993, 0.8122499999999988, 1.2049999999999983, 0.9647499999999987, 1.293750000000001, 0.6072500000000005, 0.37599999999999945, 0.33000000000000007, 0.3777500000000007, 0.36549999999999994, 0.5495000000000001, 0.3760000000000012, 0.5000000000000009, 0.40250000000000075, 0.3017499999999993], zp_timestamp='2026-02-15T00:45:00')
2026-02-15T02:47:08.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-15T02:47:08.997 [DEBUG] [Thread-196596] [transport.py] [_log()] starting thread (client mode): 0xa2d03730
2026-02-15T02:47:08.997 [DEBUG] [Thread-196596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:47:09.012 [DEBUG] [Thread-196596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:47:09.013 [INFO] [Thread-196596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:47:09.020 [DEBUG] [Thread-196596] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:47:09.021 [DEBUG] [Thread-196596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:47:09.021 [DEBUG] [Thread-196596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:47:09.021 [DEBUG] [Thread-196596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:47:09.021 [DEBUG] [Thread-196596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:47:09.021 [DEBUG] [Thread-196596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:47:09.021 [DEBUG] [Thread-196596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:47:09.021 [DEBUG] [Thread-196596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:47:09.021 [DEBUG] [Thread-196596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:47:09.022 [DEBUG] [Thread-196596] [transport.py] [_log()] client lang: <none>
2026-02-15T02:47:09.022 [DEBUG] [Thread-196596] [transport.py] [_log()] server lang: <none>
2026-02-15T02:47:09.022 [DEBUG] [Thread-196596] [transport.py] [_log()] kex follows: False
2026-02-15T02:47:09.022 [DEBUG] [Thread-196596] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:47:09.022 [DEBUG] [Thread-196596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:47:09.022 [DEBUG] [Thread-196596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:47:09.022 [DEBUG] [Thread-196596] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:47:09.023 [DEBUG] [Thread-196596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:47:09.023 [DEBUG] [Thread-196596] [transport.py] [_log()] Compression: none
2026-02-15T02:47:09.023 [DEBUG] [Thread-196596] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:47:09.081 [DEBUG] [Thread-196596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:47:09.082 [DEBUG] [Thread-196596] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:47:09.083 [DEBUG] [Thread-196596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:47:09.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:47:09.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:47:09.137 [DEBUG] [Thread-196596] [transport.py] [_log()] userauth is OK
2026-02-15T02:47:09.137 [DEBUG] [Thread-196596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:47:09.138 [DEBUG] [Thread-196596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:47:09.138 [DEBUG] [Thread-196596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:47:09.138 [DEBUG] [Thread-196596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:47:09.163 [INFO] [Thread-196596] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:47:09.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-15T02:47:09.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:47:09.953 [DEBUG] [Thread-196596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:47:09.953 [DEBUG] [Thread-196596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:47:10.002 [DEBUG] [Thread-196596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:47:10.002 [DEBUG] [Thread-196596] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:47:10.011 [DEBUG] [Thread-196596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:47:10.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:47:10.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:47:10.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-15T02:47:10.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:47:10.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:47:10.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:47:10.048 [DEBUG] [Thread-196596] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:47:10.585 [DEBUG] [Thread-196598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:47:18.011 [DEBUG] [Thread-196599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:47:25.639 [DEBUG] [Thread-196600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:47:40.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:47:40.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:47:40.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-15T02:47:40.676 [DEBUG] [Thread-196601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:47:42.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 47, 14), 0.89, 94.42, 0.0, 32.43, 6.25, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:47:42.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:47:14
2026-02-15T02:47:42.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:47:43.111 [DEBUG] [Thread-196602] [transport.py] [_log()] starting thread (client mode): 0xa57421a0
2026-02-15T02:47:43.111 [DEBUG] [Thread-196602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:47:43.129 [DEBUG] [Thread-196602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:47:43.129 [INFO] [Thread-196602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:47:43.131 [DEBUG] [Thread-196602] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:47:43.131 [DEBUG] [Thread-196602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:47:43.131 [DEBUG] [Thread-196602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:47:43.131 [DEBUG] [Thread-196602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:47:43.131 [DEBUG] [Thread-196602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:47:43.131 [DEBUG] [Thread-196602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:47:43.131 [DEBUG] [Thread-196602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:47:43.131 [DEBUG] [Thread-196602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:47:43.131 [DEBUG] [Thread-196602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:47:43.131 [DEBUG] [Thread-196602] [transport.py] [_log()] client lang: <none>
2026-02-15T02:47:43.131 [DEBUG] [Thread-196602] [transport.py] [_log()] server lang: <none>
2026-02-15T02:47:43.132 [DEBUG] [Thread-196602] [transport.py] [_log()] kex follows: False
2026-02-15T02:47:43.132 [DEBUG] [Thread-196602] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:47:43.132 [DEBUG] [Thread-196602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:47:43.132 [DEBUG] [Thread-196602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:47:43.132 [DEBUG] [Thread-196602] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:47:43.132 [DEBUG] [Thread-196602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:47:43.132 [DEBUG] [Thread-196602] [transport.py] [_log()] Compression: none
2026-02-15T02:47:43.132 [DEBUG] [Thread-196602] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:47:43.147 [DEBUG] [Thread-196602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:47:43.148 [DEBUG] [Thread-196602] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:47:43.148 [DEBUG] [Thread-196602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:47:43.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:47:43.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:47:43.150 [DEBUG] [Thread-196602] [transport.py] [_log()] userauth is OK
2026-02-15T02:47:43.150 [DEBUG] [Thread-196602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:47:43.151 [DEBUG] [Thread-196602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:47:43.151 [DEBUG] [Thread-196602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:47:43.151 [DEBUG] [Thread-196602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:47:43.174 [INFO] [Thread-196602] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:47:43.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:47:43.811 [DEBUG] [Thread-196602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:47:43.811 [DEBUG] [Thread-196602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:47:43.811 [DEBUG] [Thread-196602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:47:43.852 [DEBUG] [Thread-196602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:47:43.852 [DEBUG] [Thread-196602] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:47:43.855 [DEBUG] [Thread-196602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:47:43.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:47:43.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:47:43.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:47:43.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:47:43.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:47:43.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:47:43.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:47:43.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:47:43.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:47:43.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.032746 -999.00   +6.10  28.53     92   +5.00 1 2 1 3 1     0    0 0.92 -10.38 .NESW 28.5 28.5 147.8 35.1 6.8 -23.8 6.7 -23.2 6.4 -22.1 6.8 -23.2
2026-02-15T02:47:43.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:47:43.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:47:43.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.032746
2026-02-15T02:47:43.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:47:43.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:47:43.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:47:43.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:47:43.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:47:43.879 [DEBUG] [Thread-196602] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:47:43.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:47:14', tmtdew=0.89, humidity=94.42, cloud=0.0, wind=32.43, temperature=6.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:47:09.254', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.5772500000000003, 2.22875, 0.8329999999999993, nan, nan, nan, nan, nan, 0.5970000000000004, 1.1452499999999999, 2.013, 2.3774999999999995, 1.8672499999999994, 2.172999999999999, 1.8504999999999994, 0.6372499999999999, 0.41549999999999976, 0.5989999999999993, 0.8122499999999988, 1.2049999999999983, 0.9647499999999987, 1.293750000000001, 0.6072500000000005, 0.37599999999999945, 0.33000000000000007, 0.3777500000000007, 0.36549999999999994, 0.5495000000000001, 0.3760000000000012, 0.5000000000000009, 0.40250000000000075, 0.3017499999999993], zp_timestamp='2026-02-15T00:45:00')
2026-02-15T02:47:43.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-15T02:47:43.979 [DEBUG] [Thread-196605] [transport.py] [_log()] starting thread (client mode): 0xa2d68c10
2026-02-15T02:47:43.979 [DEBUG] [Thread-196605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:47:43.994 [DEBUG] [Thread-196605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:47:43.994 [INFO] [Thread-196605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:47:44.001 [DEBUG] [Thread-196605] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:47:44.002 [DEBUG] [Thread-196605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:47:44.002 [DEBUG] [Thread-196605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:47:44.002 [DEBUG] [Thread-196605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:47:44.002 [DEBUG] [Thread-196605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:47:44.002 [DEBUG] [Thread-196605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:47:44.002 [DEBUG] [Thread-196605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:47:44.002 [DEBUG] [Thread-196605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:47:44.003 [DEBUG] [Thread-196605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:47:44.003 [DEBUG] [Thread-196605] [transport.py] [_log()] client lang: <none>
2026-02-15T02:47:44.003 [DEBUG] [Thread-196605] [transport.py] [_log()] server lang: <none>
2026-02-15T02:47:44.003 [DEBUG] [Thread-196605] [transport.py] [_log()] kex follows: False
2026-02-15T02:47:44.003 [DEBUG] [Thread-196605] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:47:44.003 [DEBUG] [Thread-196605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:47:44.003 [DEBUG] [Thread-196605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:47:44.003 [DEBUG] [Thread-196605] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:47:44.003 [DEBUG] [Thread-196605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:47:44.003 [DEBUG] [Thread-196605] [transport.py] [_log()] Compression: none
2026-02-15T02:47:44.003 [DEBUG] [Thread-196605] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:47:44.060 [DEBUG] [Thread-196605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:47:44.060 [DEBUG] [Thread-196605] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:47:44.061 [DEBUG] [Thread-196605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:47:44.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:47:44.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:47:44.117 [DEBUG] [Thread-196605] [transport.py] [_log()] userauth is OK
2026-02-15T02:47:44.117 [DEBUG] [Thread-196605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:47:44.117 [DEBUG] [Thread-196605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:47:44.117 [DEBUG] [Thread-196605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:47:44.117 [DEBUG] [Thread-196605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:47:44.139 [INFO] [Thread-196605] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:47:44.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T02:47:44.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:47:44.969 [DEBUG] [Thread-196605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:47:44.969 [DEBUG] [Thread-196605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:47:45.017 [DEBUG] [Thread-196605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:47:45.017 [DEBUG] [Thread-196605] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:47:45.025 [DEBUG] [Thread-196605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:47:45.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:47:45.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:47:45.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-15T02:47:45.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:47:45.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:47:45.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:47:45.059 [DEBUG] [Thread-196605] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:47:48.271 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:47:48.272 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:47:55.712 [DEBUG] [Thread-196607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:48:10.763 [DEBUG] [Thread-196608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:48:15.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:48:15.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:48:15.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:48:17.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 47, 49), 0.84, 94.41, 0.0, 36.89, 6.22, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:48:17.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:47:49
2026-02-15T02:48:17.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:48:17.526 [DEBUG] [Thread-196609] [transport.py] [_log()] starting thread (client mode): 0xa2d840d0
2026-02-15T02:48:17.526 [DEBUG] [Thread-196609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:48:17.547 [DEBUG] [Thread-196609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:48:17.547 [INFO] [Thread-196609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:48:17.550 [DEBUG] [Thread-196609] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:48:17.550 [DEBUG] [Thread-196609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:48:17.550 [DEBUG] [Thread-196609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:48:17.551 [DEBUG] [Thread-196609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:48:17.551 [DEBUG] [Thread-196609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:48:17.551 [DEBUG] [Thread-196609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:48:17.551 [DEBUG] [Thread-196609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:48:17.551 [DEBUG] [Thread-196609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:48:17.551 [DEBUG] [Thread-196609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:48:17.551 [DEBUG] [Thread-196609] [transport.py] [_log()] client lang: <none>
2026-02-15T02:48:17.551 [DEBUG] [Thread-196609] [transport.py] [_log()] server lang: <none>
2026-02-15T02:48:17.551 [DEBUG] [Thread-196609] [transport.py] [_log()] kex follows: False
2026-02-15T02:48:17.551 [DEBUG] [Thread-196609] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:48:17.551 [DEBUG] [Thread-196609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:48:17.551 [DEBUG] [Thread-196609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:48:17.551 [DEBUG] [Thread-196609] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:48:17.551 [DEBUG] [Thread-196609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:48:17.551 [DEBUG] [Thread-196609] [transport.py] [_log()] Compression: none
2026-02-15T02:48:17.551 [DEBUG] [Thread-196609] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:48:17.567 [DEBUG] [Thread-196609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:48:17.568 [DEBUG] [Thread-196609] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:48:17.568 [DEBUG] [Thread-196609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:48:17.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:48:17.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:48:17.570 [DEBUG] [Thread-196609] [transport.py] [_log()] userauth is OK
2026-02-15T02:48:17.570 [DEBUG] [Thread-196609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:48:17.570 [DEBUG] [Thread-196609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:48:17.571 [DEBUG] [Thread-196609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:48:17.571 [DEBUG] [Thread-196609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:48:17.585 [INFO] [Thread-196609] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:48:17.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:48:18.072 [DEBUG] [Thread-196611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:48:18.176 [DEBUG] [Thread-196609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:48:18.177 [DEBUG] [Thread-196609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:48:18.177 [DEBUG] [Thread-196609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:48:18.217 [DEBUG] [Thread-196609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:48:18.218 [DEBUG] [Thread-196609] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:48:18.221 [DEBUG] [Thread-196609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:48:18.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:48:18.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:48:18.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:48:18.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:48:18.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:48:18.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:48:18.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:48:18.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:48:18.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:48:18.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.033093 -999.00   +6.10  25.44     92   +5.00 1 2 1 3 1     0    0 0.94 -10.61 .NESW 25.4 25.4 152.8 35.4 6.8 -23.9 6.6 -23.0 6.4 -22.0 6.8 -23.3
2026-02-15T02:48:18.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:48:18.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:48:18.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.033093
2026-02-15T02:48:18.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:48:18.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:48:18.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:48:18.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:48:18.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:48:18.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:47:49', tmtdew=0.84, humidity=94.41, cloud=0.0, wind=36.89, temperature=6.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:47:39.235', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.5772500000000003, 2.22875, 0.8329999999999993, nan, nan, nan, nan, nan, 0.5970000000000004, 1.1452499999999999, 2.013, 2.3774999999999995, 1.8672499999999994, 2.172999999999999, 1.8504999999999994, 0.6372499999999999, 0.41549999999999976, 0.5989999999999993, 0.8122499999999988, 1.2049999999999983, 0.9647499999999987, 1.293750000000001, 0.6072500000000005, 0.37599999999999945, 0.33000000000000007, 0.3777500000000007, 0.36549999999999994, 0.5495000000000001, 0.3760000000000012, 0.5000000000000009, 0.40250000000000075, 0.3017499999999993], zp_timestamp='2026-02-15T00:45:00')
2026-02-15T02:48:18.250 [DEBUG] [Thread-196609] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:48:18.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-15T02:48:18.348 [DEBUG] [Thread-196613] [transport.py] [_log()] starting thread (client mode): 0xa2d6d4b0
2026-02-15T02:48:18.349 [DEBUG] [Thread-196613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:48:18.363 [DEBUG] [Thread-196613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:48:18.363 [INFO] [Thread-196613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:48:18.372 [DEBUG] [Thread-196613] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:48:18.373 [DEBUG] [Thread-196613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:48:18.373 [DEBUG] [Thread-196613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:48:18.373 [DEBUG] [Thread-196613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:48:18.373 [DEBUG] [Thread-196613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:48:18.373 [DEBUG] [Thread-196613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:48:18.373 [DEBUG] [Thread-196613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:48:18.373 [DEBUG] [Thread-196613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:48:18.373 [DEBUG] [Thread-196613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:48:18.373 [DEBUG] [Thread-196613] [transport.py] [_log()] client lang: <none>
2026-02-15T02:48:18.373 [DEBUG] [Thread-196613] [transport.py] [_log()] server lang: <none>
2026-02-15T02:48:18.373 [DEBUG] [Thread-196613] [transport.py] [_log()] kex follows: False
2026-02-15T02:48:18.373 [DEBUG] [Thread-196613] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:48:18.373 [DEBUG] [Thread-196613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:48:18.373 [DEBUG] [Thread-196613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:48:18.373 [DEBUG] [Thread-196613] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:48:18.374 [DEBUG] [Thread-196613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:48:18.374 [DEBUG] [Thread-196613] [transport.py] [_log()] Compression: none
2026-02-15T02:48:18.374 [DEBUG] [Thread-196613] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:48:18.429 [DEBUG] [Thread-196613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:48:18.429 [DEBUG] [Thread-196613] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:48:18.430 [DEBUG] [Thread-196613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:48:18.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:48:18.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:48:18.487 [DEBUG] [Thread-196613] [transport.py] [_log()] userauth is OK
2026-02-15T02:48:18.487 [DEBUG] [Thread-196613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:48:18.487 [DEBUG] [Thread-196613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:48:18.487 [DEBUG] [Thread-196613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:48:18.487 [DEBUG] [Thread-196613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:48:18.506 [INFO] [Thread-196613] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:48:18.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-15T02:48:18.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:48:19.292 [DEBUG] [Thread-196613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:48:19.293 [DEBUG] [Thread-196613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:48:19.341 [DEBUG] [Thread-196613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:48:19.341 [DEBUG] [Thread-196613] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:48:19.351 [DEBUG] [Thread-196613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:48:19.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:48:19.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:48:19.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-15T02:48:19.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:48:19.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:48:19.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:48:19.388 [DEBUG] [Thread-196613] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:48:25.801 [DEBUG] [Thread-196615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:48:40.855 [DEBUG] [Thread-196616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:48:48.476 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:48:48.477 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:48:49.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:48:49.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:48:49.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-15T02:48:51.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 48, 25), 0.84, 94.41, 0.0, 36.86, 6.2, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:48:51.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:48:25
2026-02-15T02:48:51.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:48:51.869 [DEBUG] [Thread-196617] [transport.py] [_log()] starting thread (client mode): 0xa2de1d80
2026-02-15T02:48:51.869 [DEBUG] [Thread-196617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:48:51.896 [DEBUG] [Thread-196617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:48:51.897 [INFO] [Thread-196617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:48:51.898 [DEBUG] [Thread-196617] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:48:51.898 [DEBUG] [Thread-196617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:48:51.898 [DEBUG] [Thread-196617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:48:51.898 [DEBUG] [Thread-196617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:48:51.899 [DEBUG] [Thread-196617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:48:51.899 [DEBUG] [Thread-196617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:48:51.899 [DEBUG] [Thread-196617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:48:51.899 [DEBUG] [Thread-196617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:48:51.899 [DEBUG] [Thread-196617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:48:51.899 [DEBUG] [Thread-196617] [transport.py] [_log()] client lang: <none>
2026-02-15T02:48:51.899 [DEBUG] [Thread-196617] [transport.py] [_log()] server lang: <none>
2026-02-15T02:48:51.899 [DEBUG] [Thread-196617] [transport.py] [_log()] kex follows: False
2026-02-15T02:48:51.899 [DEBUG] [Thread-196617] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:48:51.899 [DEBUG] [Thread-196617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:48:51.899 [DEBUG] [Thread-196617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:48:51.899 [DEBUG] [Thread-196617] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:48:51.899 [DEBUG] [Thread-196617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:48:51.899 [DEBUG] [Thread-196617] [transport.py] [_log()] Compression: none
2026-02-15T02:48:51.899 [DEBUG] [Thread-196617] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:48:51.914 [DEBUG] [Thread-196617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:48:51.914 [DEBUG] [Thread-196617] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:48:51.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:48:51.915 [DEBUG] [Thread-196617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:48:51.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:48:51.917 [DEBUG] [Thread-196617] [transport.py] [_log()] userauth is OK
2026-02-15T02:48:51.918 [DEBUG] [Thread-196617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:48:51.918 [DEBUG] [Thread-196617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:48:51.918 [DEBUG] [Thread-196617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:48:51.918 [DEBUG] [Thread-196617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:48:51.933 [INFO] [Thread-196617] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:48:51.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:48:52.691 [DEBUG] [Thread-196617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:48:52.691 [DEBUG] [Thread-196617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:48:52.691 [DEBUG] [Thread-196617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:48:52.733 [DEBUG] [Thread-196617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:48:52.733 [DEBUG] [Thread-196617] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:48:52.735 [DEBUG] [Thread-196617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:48:52.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:48:52.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:48:52.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:48:52.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:48:52.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:48:52.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:48:52.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:48:52.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:48:52.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:48:52.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.033440 -999.00   +6.10  29.11     92   +5.00 1 2 1 3 1     0    0 0.92 -10.81 .NESW 29.1 29.1 145.0 34.5 6.8 -23.9 6.6 -23.0 6.4 -22.1 6.8 -23.3
2026-02-15T02:48:52.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:48:52.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:48:52.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.033440
2026-02-15T02:48:52.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:48:52.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:48:52.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:48:52.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:48:52.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:48:52.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:48:25', tmtdew=0.84, humidity=94.41, cloud=0.0, wind=36.86, temperature=6.2, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:48:09.216', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.5772500000000003, 2.22875, 0.8329999999999993, nan, nan, nan, nan, nan, 0.5970000000000004, 1.1452499999999999, 2.013, 2.3774999999999995, 1.8672499999999994, 2.172999999999999, 1.8504999999999994, 0.6372499999999999, 0.41549999999999976, 0.5989999999999993, 0.8122499999999988, 1.2049999999999983, 0.9647499999999987, 1.293750000000001, 0.6072500000000005, 0.37599999999999945, 0.33000000000000007, 0.3777500000000007, 0.36549999999999994, 0.5495000000000001, 0.3760000000000012, 0.5000000000000009, 0.40250000000000075, 0.3017499999999993], zp_timestamp='2026-02-15T00:47:00')
2026-02-15T02:48:52.755 [DEBUG] [Thread-196617] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:48:52.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-15T02:48:52.841 [DEBUG] [Thread-196620] [transport.py] [_log()] starting thread (client mode): 0xa2de2e60
2026-02-15T02:48:52.841 [DEBUG] [Thread-196620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:48:52.856 [DEBUG] [Thread-196620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:48:52.856 [INFO] [Thread-196620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:48:52.864 [DEBUG] [Thread-196620] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:48:52.864 [DEBUG] [Thread-196620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:48:52.864 [DEBUG] [Thread-196620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:48:52.864 [DEBUG] [Thread-196620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:48:52.864 [DEBUG] [Thread-196620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:48:52.864 [DEBUG] [Thread-196620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:48:52.864 [DEBUG] [Thread-196620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:48:52.864 [DEBUG] [Thread-196620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:48:52.864 [DEBUG] [Thread-196620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:48:52.864 [DEBUG] [Thread-196620] [transport.py] [_log()] client lang: <none>
2026-02-15T02:48:52.864 [DEBUG] [Thread-196620] [transport.py] [_log()] server lang: <none>
2026-02-15T02:48:52.864 [DEBUG] [Thread-196620] [transport.py] [_log()] kex follows: False
2026-02-15T02:48:52.864 [DEBUG] [Thread-196620] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:48:52.864 [DEBUG] [Thread-196620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:48:52.864 [DEBUG] [Thread-196620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:48:52.864 [DEBUG] [Thread-196620] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:48:52.864 [DEBUG] [Thread-196620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:48:52.864 [DEBUG] [Thread-196620] [transport.py] [_log()] Compression: none
2026-02-15T02:48:52.864 [DEBUG] [Thread-196620] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:48:52.919 [DEBUG] [Thread-196620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:48:52.919 [DEBUG] [Thread-196620] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:48:52.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:48:52.920 [DEBUG] [Thread-196620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:48:52.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:48:52.977 [DEBUG] [Thread-196620] [transport.py] [_log()] userauth is OK
2026-02-15T02:48:52.977 [DEBUG] [Thread-196620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:48:52.977 [DEBUG] [Thread-196620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:48:52.977 [DEBUG] [Thread-196620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:48:52.977 [DEBUG] [Thread-196620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:48:52.991 [INFO] [Thread-196620] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:48:52.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-15T02:48:52.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:48:53.774 [DEBUG] [Thread-196620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:48:53.774 [DEBUG] [Thread-196620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:48:53.822 [DEBUG] [Thread-196620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:48:53.822 [DEBUG] [Thread-196620] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:48:53.832 [DEBUG] [Thread-196620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:48:53.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:48:53.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-15T02:48:53.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-15T02:48:53.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:48:53.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:48:53.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:48:53.869 [DEBUG] [Thread-196620] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:48:55.892 [DEBUG] [Thread-196622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:49:10.944 [DEBUG] [Thread-196623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:49:18.142 [DEBUG] [Thread-196624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:49:23.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:49:23.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:49:23.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-15T02:49:25.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 49, 1), 0.83, 94.51, 0.0, 36.61, 6.25, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:49:25.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:49:01
2026-02-15T02:49:25.983 [DEBUG] [Thread-196625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:49:26.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:49:26.386 [DEBUG] [Thread-196626] [transport.py] [_log()] starting thread (client mode): 0xa2de3e80
2026-02-15T02:49:26.386 [DEBUG] [Thread-196626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:49:26.407 [DEBUG] [Thread-196626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:49:26.407 [INFO] [Thread-196626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:49:26.410 [DEBUG] [Thread-196626] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:49:26.410 [DEBUG] [Thread-196626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:49:26.410 [DEBUG] [Thread-196626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:49:26.410 [DEBUG] [Thread-196626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:49:26.410 [DEBUG] [Thread-196626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:49:26.410 [DEBUG] [Thread-196626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:49:26.410 [DEBUG] [Thread-196626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:49:26.410 [DEBUG] [Thread-196626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:49:26.410 [DEBUG] [Thread-196626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:49:26.410 [DEBUG] [Thread-196626] [transport.py] [_log()] client lang: <none>
2026-02-15T02:49:26.410 [DEBUG] [Thread-196626] [transport.py] [_log()] server lang: <none>
2026-02-15T02:49:26.410 [DEBUG] [Thread-196626] [transport.py] [_log()] kex follows: False
2026-02-15T02:49:26.410 [DEBUG] [Thread-196626] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:49:26.411 [DEBUG] [Thread-196626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:49:26.411 [DEBUG] [Thread-196626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:49:26.411 [DEBUG] [Thread-196626] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:49:26.411 [DEBUG] [Thread-196626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:49:26.411 [DEBUG] [Thread-196626] [transport.py] [_log()] Compression: none
2026-02-15T02:49:26.411 [DEBUG] [Thread-196626] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:49:26.428 [DEBUG] [Thread-196626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:49:26.429 [DEBUG] [Thread-196626] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:49:26.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:49:26.430 [DEBUG] [Thread-196626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:49:26.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:49:26.433 [DEBUG] [Thread-196626] [transport.py] [_log()] userauth is OK
2026-02-15T02:49:26.433 [DEBUG] [Thread-196626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:49:26.433 [DEBUG] [Thread-196626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:49:26.433 [DEBUG] [Thread-196626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:49:26.434 [DEBUG] [Thread-196626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:49:26.458 [INFO] [Thread-196626] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:49:26.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:49:27.113 [DEBUG] [Thread-196626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:49:27.113 [DEBUG] [Thread-196626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:49:27.113 [DEBUG] [Thread-196626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:49:27.153 [DEBUG] [Thread-196626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:49:27.154 [DEBUG] [Thread-196626] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:49:27.157 [DEBUG] [Thread-196626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:49:27.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:49:27.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:49:27.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:49:27.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:49:27.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:49:27.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:49:27.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:49:27.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:49:27.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:49:27.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.033787 -999.00   +6.10  28.99     92   +5.00 1 2 1 3 1     0    0 0.92 -10.70 .NESW 29.0 29.0 143.6 38.3 6.8 -23.8 6.6 -23.1 6.4 -21.9 6.7 -23.3
2026-02-15T02:49:27.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:49:27.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:49:27.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.033787
2026-02-15T02:49:27.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:49:27.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:49:27.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:49:27.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:49:27.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:49:27.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:49:01', tmtdew=0.83, humidity=94.51, cloud=0.0, wind=36.61, temperature=6.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:48:39.197', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.5772500000000003, 2.22875, 0.8329999999999993, nan, nan, nan, nan, nan, 0.5970000000000004, 1.1452499999999999, 2.013, 2.3774999999999995, 1.8672499999999994, 2.172999999999999, 1.8504999999999994, 0.6372499999999999, 0.41549999999999976, 0.5989999999999993, 0.8122499999999988, 1.2049999999999983, 0.9647499999999987, 1.293750000000001, 0.6072500000000005, 0.37599999999999945, 0.33000000000000007, 0.3777500000000007, 0.36549999999999994, 0.5495000000000001, 0.3760000000000012, 0.5000000000000009, 0.40250000000000075, 0.3017499999999993], zp_timestamp='2026-02-15T00:47:00')
2026-02-15T02:49:27.183 [DEBUG] [Thread-196626] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:49:27.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-15T02:49:27.277 [DEBUG] [Thread-196629] [transport.py] [_log()] starting thread (client mode): 0xa57d4100
2026-02-15T02:49:27.277 [DEBUG] [Thread-196629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:49:27.292 [DEBUG] [Thread-196629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:49:27.293 [INFO] [Thread-196629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:49:27.300 [DEBUG] [Thread-196629] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:49:27.301 [DEBUG] [Thread-196629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:49:27.301 [DEBUG] [Thread-196629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:49:27.301 [DEBUG] [Thread-196629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:49:27.301 [DEBUG] [Thread-196629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:49:27.301 [DEBUG] [Thread-196629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:49:27.301 [DEBUG] [Thread-196629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:49:27.301 [DEBUG] [Thread-196629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:49:27.301 [DEBUG] [Thread-196629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:49:27.301 [DEBUG] [Thread-196629] [transport.py] [_log()] client lang: <none>
2026-02-15T02:49:27.302 [DEBUG] [Thread-196629] [transport.py] [_log()] server lang: <none>
2026-02-15T02:49:27.302 [DEBUG] [Thread-196629] [transport.py] [_log()] kex follows: False
2026-02-15T02:49:27.302 [DEBUG] [Thread-196629] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:49:27.302 [DEBUG] [Thread-196629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:49:27.302 [DEBUG] [Thread-196629] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:49:27.302 [DEBUG] [Thread-196629] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:49:27.302 [DEBUG] [Thread-196629] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:49:27.302 [DEBUG] [Thread-196629] [transport.py] [_log()] Compression: none
2026-02-15T02:49:27.303 [DEBUG] [Thread-196629] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:49:27.363 [DEBUG] [Thread-196629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:49:27.363 [DEBUG] [Thread-196629] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:49:27.364 [DEBUG] [Thread-196629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:49:27.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:49:27.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:49:27.422 [DEBUG] [Thread-196629] [transport.py] [_log()] userauth is OK
2026-02-15T02:49:27.422 [DEBUG] [Thread-196629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:49:27.423 [DEBUG] [Thread-196629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:49:27.423 [DEBUG] [Thread-196629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:49:27.423 [DEBUG] [Thread-196629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:49:27.442 [INFO] [Thread-196629] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02: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-15T02:49:27.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:49:28.221 [DEBUG] [Thread-196629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:49:28.222 [DEBUG] [Thread-196629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:49:28.269 [DEBUG] [Thread-196629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:49:28.269 [DEBUG] [Thread-196629] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:49:28.279 [DEBUG] [Thread-196629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:49:28.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:49:28.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-15T02:49:28.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-15T02:49:28.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:49:28.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:49:28.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:49:28.317 [DEBUG] [Thread-196629] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:49:41.020 [DEBUG] [Thread-196631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:49:48.679 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:49:48.680 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:49:56.078 [DEBUG] [Thread-196632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:49:58.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:49:58.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:49:58.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-15T02:50:00.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 49, 37), 1.37, 90.95, 0.0, 36.41, 6.57, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:50:00.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:49:37
2026-02-15T02:50:00.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:50:00.810 [DEBUG] [Thread-196633] [transport.py] [_log()] starting thread (client mode): 0xa2de0100
2026-02-15T02:50:00.810 [DEBUG] [Thread-196633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:50:00.831 [DEBUG] [Thread-196633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:50:00.831 [INFO] [Thread-196633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:50:00.834 [DEBUG] [Thread-196633] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:50:00.834 [DEBUG] [Thread-196633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:50:00.834 [DEBUG] [Thread-196633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:50:00.834 [DEBUG] [Thread-196633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:50:00.834 [DEBUG] [Thread-196633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:50:00.834 [DEBUG] [Thread-196633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:50:00.834 [DEBUG] [Thread-196633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:50:00.834 [DEBUG] [Thread-196633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:50:00.834 [DEBUG] [Thread-196633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:50:00.834 [DEBUG] [Thread-196633] [transport.py] [_log()] client lang: <none>
2026-02-15T02:50:00.834 [DEBUG] [Thread-196633] [transport.py] [_log()] server lang: <none>
2026-02-15T02:50:00.834 [DEBUG] [Thread-196633] [transport.py] [_log()] kex follows: False
2026-02-15T02:50:00.835 [DEBUG] [Thread-196633] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:50:00.835 [DEBUG] [Thread-196633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:50:00.835 [DEBUG] [Thread-196633] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:50:00.835 [DEBUG] [Thread-196633] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:50:00.835 [DEBUG] [Thread-196633] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:50:00.835 [DEBUG] [Thread-196633] [transport.py] [_log()] Compression: none
2026-02-15T02:50:00.835 [DEBUG] [Thread-196633] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:50:00.854 [DEBUG] [Thread-196633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:50:00.854 [DEBUG] [Thread-196633] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:50:00.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:50:00.856 [DEBUG] [Thread-196633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:50:00.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:50:00.858 [DEBUG] [Thread-196633] [transport.py] [_log()] userauth is OK
2026-02-15T02:50:00.859 [DEBUG] [Thread-196633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:50:00.859 [DEBUG] [Thread-196633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:50:00.859 [DEBUG] [Thread-196633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:50:00.859 [DEBUG] [Thread-196633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:50:00.872 [INFO] [Thread-196633] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:50:00.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:50:01.470 [DEBUG] [Thread-196633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:50:01.470 [DEBUG] [Thread-196633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:50:01.470 [DEBUG] [Thread-196633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:50:01.511 [DEBUG] [Thread-196633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:50:01.512 [DEBUG] [Thread-196633] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:50:01.515 [DEBUG] [Thread-196633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:50:01.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:50:01.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:50:01.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:50:01.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:50:01.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:50:01.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:50:01.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:50:01.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:50:01.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:50:01.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.034134 -999.00   +6.10  31.83     92   +5.00 1 2 2 3 1     0    0 0.89 -10.95 .NESW 31.8 31.8 144.4 38.4 6.7 -23.9 6.6 -23.1 6.4 -21.9 6.8 -23.2
2026-02-15T02:50:01.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:50:01.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:50:01.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.034134
2026-02-15T02:50:01.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:50:01.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:50:01.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:50:01.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:50:01.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:50:01.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:49:37', tmtdew=1.37, humidity=90.95, cloud=0.0, wind=36.41, temperature=6.57, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:49:09.178', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.5772500000000003, 2.22875, 0.8329999999999993, nan, nan, nan, nan, nan, 0.5970000000000004, 1.1452499999999999, 2.013, 2.3774999999999995, 1.8672499999999994, 2.172999999999999, 1.8504999999999994, 0.6372499999999999, 0.41549999999999976, 0.5989999999999993, 0.8122499999999988, 1.2049999999999983, 0.9647499999999987, 1.293750000000001, 0.6072500000000005, 0.37599999999999945, 0.33000000000000007, 0.3777500000000007, 0.36549999999999994, 0.5495000000000001, 0.3760000000000012, 0.5000000000000009, 0.40250000000000075, 0.3017499999999993], zp_timestamp='2026-02-15T00:47:00')
2026-02-15T02:50:01.541 [DEBUG] [Thread-196633] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:50:01.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T02:50:01.636 [DEBUG] [Thread-196636] [transport.py] [_log()] starting thread (client mode): 0xa57d56f0
2026-02-15T02:50:01.636 [DEBUG] [Thread-196636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:50:01.651 [DEBUG] [Thread-196636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:50:01.652 [INFO] [Thread-196636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:50:01.659 [DEBUG] [Thread-196636] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:50:01.659 [DEBUG] [Thread-196636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:50:01.659 [DEBUG] [Thread-196636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:50:01.659 [DEBUG] [Thread-196636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:50:01.659 [DEBUG] [Thread-196636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:50:01.660 [DEBUG] [Thread-196636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:50:01.660 [DEBUG] [Thread-196636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:50:01.660 [DEBUG] [Thread-196636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:50:01.660 [DEBUG] [Thread-196636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:50:01.660 [DEBUG] [Thread-196636] [transport.py] [_log()] client lang: <none>
2026-02-15T02:50:01.660 [DEBUG] [Thread-196636] [transport.py] [_log()] server lang: <none>
2026-02-15T02:50:01.660 [DEBUG] [Thread-196636] [transport.py] [_log()] kex follows: False
2026-02-15T02:50:01.660 [DEBUG] [Thread-196636] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:50:01.660 [DEBUG] [Thread-196636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:50:01.660 [DEBUG] [Thread-196636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:50:01.660 [DEBUG] [Thread-196636] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:50:01.660 [DEBUG] [Thread-196636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:50:01.660 [DEBUG] [Thread-196636] [transport.py] [_log()] Compression: none
2026-02-15T02:50:01.660 [DEBUG] [Thread-196636] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:50:01.717 [DEBUG] [Thread-196636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:50:01.718 [DEBUG] [Thread-196636] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:50:01.719 [DEBUG] [Thread-196636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:50:01.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:50:01.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:50:01.773 [DEBUG] [Thread-196636] [transport.py] [_log()] userauth is OK
2026-02-15T02:50:01.774 [DEBUG] [Thread-196636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:50:01.774 [DEBUG] [Thread-196636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:50:01.774 [DEBUG] [Thread-196636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:50:01.774 [DEBUG] [Thread-196636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:50:01.792 [INFO] [Thread-196636] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:50:01.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-15T02:50:01.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:50:02.594 [DEBUG] [Thread-196636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:50:02.595 [DEBUG] [Thread-196636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:50:02.646 [DEBUG] [Thread-196636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:50:02.646 [DEBUG] [Thread-196636] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:50:02.655 [DEBUG] [Thread-196636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:50:02.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:50:02.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')
2026-02-15T02:50:02.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:50:02.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:50:02.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:50:02.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:50:02.692 [DEBUG] [Thread-196636] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:50:11.115 [DEBUG] [Thread-196638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:50:18.207 [DEBUG] [Thread-196639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:50:26.171 [DEBUG] [Thread-196640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:50:32.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:50:32.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:50:32.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-15T02:50:34.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 50, 12), 0.83, 94.49, 0.0, 35.52, 6.25, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:50:34.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:50:12
2026-02-15T02:50:35.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:50:35.237 [DEBUG] [Thread-196641] [transport.py] [_log()] starting thread (client mode): 0xa2d6fc40
2026-02-15T02:50:35.237 [DEBUG] [Thread-196641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:50:35.257 [DEBUG] [Thread-196641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:50:35.257 [INFO] [Thread-196641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:50:35.260 [DEBUG] [Thread-196641] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:50:35.260 [DEBUG] [Thread-196641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:50:35.260 [DEBUG] [Thread-196641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:50:35.261 [DEBUG] [Thread-196641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:50:35.261 [DEBUG] [Thread-196641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:50:35.261 [DEBUG] [Thread-196641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:50:35.261 [DEBUG] [Thread-196641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:50:35.261 [DEBUG] [Thread-196641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:50:35.261 [DEBUG] [Thread-196641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:50:35.261 [DEBUG] [Thread-196641] [transport.py] [_log()] client lang: <none>
2026-02-15T02:50:35.261 [DEBUG] [Thread-196641] [transport.py] [_log()] server lang: <none>
2026-02-15T02:50:35.261 [DEBUG] [Thread-196641] [transport.py] [_log()] kex follows: False
2026-02-15T02:50:35.261 [DEBUG] [Thread-196641] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:50:35.261 [DEBUG] [Thread-196641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:50:35.261 [DEBUG] [Thread-196641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:50:35.261 [DEBUG] [Thread-196641] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:50:35.261 [DEBUG] [Thread-196641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:50:35.261 [DEBUG] [Thread-196641] [transport.py] [_log()] Compression: none
2026-02-15T02:50:35.261 [DEBUG] [Thread-196641] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:50:35.281 [DEBUG] [Thread-196641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:50:35.282 [DEBUG] [Thread-196641] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:50:35.282 [DEBUG] [Thread-196641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:50:35.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:50:35.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:50:35.284 [DEBUG] [Thread-196641] [transport.py] [_log()] userauth is OK
2026-02-15T02:50:35.285 [DEBUG] [Thread-196641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:50:35.285 [DEBUG] [Thread-196641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:50:35.285 [DEBUG] [Thread-196641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:50:35.285 [DEBUG] [Thread-196641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:50:35.308 [INFO] [Thread-196641] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:50:35.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:50:35.947 [DEBUG] [Thread-196641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:50:35.947 [DEBUG] [Thread-196641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:50:35.948 [DEBUG] [Thread-196641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:50:35.988 [DEBUG] [Thread-196641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:50:35.989 [DEBUG] [Thread-196641] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:50:35.992 [DEBUG] [Thread-196641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:50:36.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:50:36.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:50:36.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:50:36.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:50:36.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:50:36.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:50:36.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:50:36.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:50:36.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:50:36.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.034482 -999.00   +6.10  26.12     92   +5.00 1 2 1 3 1     0    0 0.92 -10.40 .NESW 26.1 26.1 150.2 34.4 6.8 -23.8 6.6 -23.0 6.4 -21.9 6.8 -23.2
2026-02-15T02:50:36.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:50:36.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:50:36.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.034482
2026-02-15T02:50:36.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:50:36.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:50:36.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:50:36.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:50:36.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:50:36.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:50:12', tmtdew=0.83, humidity=94.49, cloud=0.0, wind=35.52, temperature=6.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:49:39.245', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.5772500000000003, 2.22875, 0.8329999999999993, nan, nan, nan, nan, nan, 0.5970000000000004, 1.1452499999999999, 2.013, 2.3774999999999995, 1.8672499999999994, 2.172999999999999, 1.8504999999999994, 0.6372499999999999, 0.41549999999999976, 0.5989999999999993, 0.8122499999999988, 1.2049999999999983, 0.9647499999999987, 1.293750000000001, 0.6072500000000005, 0.37599999999999945, 0.33000000000000007, 0.3777500000000007, 0.36549999999999994, 0.5495000000000001, 0.3760000000000012, 0.5000000000000009, 0.40250000000000075, 0.3017499999999993], zp_timestamp='2026-02-15T00:47:00')
2026-02-15T02:50:36.021 [DEBUG] [Thread-196641] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:50:36.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-15T02:50:36.119 [DEBUG] [Thread-196644] [transport.py] [_log()] starting thread (client mode): 0xa2d6e440
2026-02-15T02:50:36.119 [DEBUG] [Thread-196644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:50:36.133 [DEBUG] [Thread-196644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:50:36.133 [INFO] [Thread-196644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:50:36.141 [DEBUG] [Thread-196644] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:50:36.141 [DEBUG] [Thread-196644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:50:36.141 [DEBUG] [Thread-196644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:50:36.141 [DEBUG] [Thread-196644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:50:36.141 [DEBUG] [Thread-196644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:50:36.141 [DEBUG] [Thread-196644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:50:36.141 [DEBUG] [Thread-196644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:50:36.141 [DEBUG] [Thread-196644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:50:36.141 [DEBUG] [Thread-196644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:50:36.141 [DEBUG] [Thread-196644] [transport.py] [_log()] client lang: <none>
2026-02-15T02:50:36.141 [DEBUG] [Thread-196644] [transport.py] [_log()] server lang: <none>
2026-02-15T02:50:36.141 [DEBUG] [Thread-196644] [transport.py] [_log()] kex follows: False
2026-02-15T02:50:36.141 [DEBUG] [Thread-196644] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:50:36.141 [DEBUG] [Thread-196644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:50:36.142 [DEBUG] [Thread-196644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:50:36.142 [DEBUG] [Thread-196644] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:50:36.142 [DEBUG] [Thread-196644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:50:36.142 [DEBUG] [Thread-196644] [transport.py] [_log()] Compression: none
2026-02-15T02:50:36.142 [DEBUG] [Thread-196644] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:50:36.200 [DEBUG] [Thread-196644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:50:36.201 [DEBUG] [Thread-196644] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:50:36.202 [DEBUG] [Thread-196644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:50:36.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:50:36.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:50:36.257 [DEBUG] [Thread-196644] [transport.py] [_log()] userauth is OK
2026-02-15T02:50:36.258 [DEBUG] [Thread-196644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:50:36.258 [DEBUG] [Thread-196644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:50:36.258 [DEBUG] [Thread-196644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:50:36.258 [DEBUG] [Thread-196644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:50:36.277 [INFO] [Thread-196644] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:50:36.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-15T02:50:36.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:50:37.046 [DEBUG] [Thread-196644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:50:37.047 [DEBUG] [Thread-196644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:50:37.094 [DEBUG] [Thread-196644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:50:37.095 [DEBUG] [Thread-196644] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:50:37.104 [DEBUG] [Thread-196644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:50:37.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:50:37.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-15T02:50:37.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:50:37.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:50:37.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:50:37.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:50:37.141 [DEBUG] [Thread-196644] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:50:41.208 [DEBUG] [Thread-196646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:50:48.881 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:50:48.882 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:50:56.262 [DEBUG] [Thread-196647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:51:07.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:51:07.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:51:07.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-15T02:51:09.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 50, 48), 0.82, 94.54, 0.0, 35.13, 6.27, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:51:09.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:50:48
2026-02-15T02:51:09.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:51:09.555 [DEBUG] [Thread-196648] [transport.py] [_log()] starting thread (client mode): 0xa2de1c90
2026-02-15T02:51:09.555 [DEBUG] [Thread-196648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:51:09.575 [DEBUG] [Thread-196648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:51:09.576 [INFO] [Thread-196648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:51:09.579 [DEBUG] [Thread-196648] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:51:09.579 [DEBUG] [Thread-196648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:51:09.579 [DEBUG] [Thread-196648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:51:09.579 [DEBUG] [Thread-196648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:51:09.579 [DEBUG] [Thread-196648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:51:09.579 [DEBUG] [Thread-196648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:51:09.579 [DEBUG] [Thread-196648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:51:09.579 [DEBUG] [Thread-196648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:51:09.579 [DEBUG] [Thread-196648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:51:09.579 [DEBUG] [Thread-196648] [transport.py] [_log()] client lang: <none>
2026-02-15T02:51:09.579 [DEBUG] [Thread-196648] [transport.py] [_log()] server lang: <none>
2026-02-15T02:51:09.580 [DEBUG] [Thread-196648] [transport.py] [_log()] kex follows: False
2026-02-15T02:51:09.580 [DEBUG] [Thread-196648] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:51:09.580 [DEBUG] [Thread-196648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:51:09.580 [DEBUG] [Thread-196648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:51:09.580 [DEBUG] [Thread-196648] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:51:09.580 [DEBUG] [Thread-196648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:51:09.580 [DEBUG] [Thread-196648] [transport.py] [_log()] Compression: none
2026-02-15T02:51:09.580 [DEBUG] [Thread-196648] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:51:09.596 [DEBUG] [Thread-196648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:51:09.597 [DEBUG] [Thread-196648] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:51:09.597 [DEBUG] [Thread-196648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:51:09.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:51:09.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:51:09.599 [DEBUG] [Thread-196648] [transport.py] [_log()] userauth is OK
2026-02-15T02:51:09.599 [DEBUG] [Thread-196648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:51:09.599 [DEBUG] [Thread-196648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:51:09.599 [DEBUG] [Thread-196648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:51:09.599 [DEBUG] [Thread-196648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:51:09.616 [INFO] [Thread-196648] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:51:09.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:51:10.257 [DEBUG] [Thread-196648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:51:10.257 [DEBUG] [Thread-196648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:51:10.258 [DEBUG] [Thread-196648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:51:10.298 [DEBUG] [Thread-196648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:51:10.299 [DEBUG] [Thread-196648] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:51:10.303 [DEBUG] [Thread-196648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:51:10.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:51:10.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:51:10.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:51:10.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:51:10.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:51:10.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:51:10.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:51:10.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:51:10.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:51:10.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.035176 -999.00   +6.10  32.54     92   +5.00 1 2 2 3 1     0    0 0.86 -10.97 .NESW 32.5 32.5 142.4 40.0 6.7 -23.8 6.6 -23.0 6.4 -21.8 6.7 -23.1
2026-02-15T02:51:10.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:51:10.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:51:10.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.035176
2026-02-15T02:51:10.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:51:10.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:51:10.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:51:10.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:51:10.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:51:10.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:50:48', tmtdew=0.82, humidity=94.54, cloud=0.0, wind=35.13, temperature=6.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:50:39.206', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 1.5772500000000003, 2.22875, 0.8329999999999993, nan, nan, nan, nan, nan, 0.5970000000000004, 1.1452499999999999, 2.013, 2.3774999999999995, 1.8672499999999994, 2.172999999999999, 1.8504999999999994, 0.6372499999999999, 0.41549999999999976, 0.5989999999999993, 0.8122499999999988, 1.2049999999999983, 0.9647499999999987, 1.293750000000001, 0.6072500000000005, 0.37599999999999945, 0.33000000000000007, 0.3777500000000007, 0.36549999999999994, 0.5495000000000001, 0.3760000000000012, 0.5000000000000009, 0.40250000000000075, 0.3017499999999993], zp_timestamp='2026-02-15T00:47:00')
2026-02-15T02:51:10.331 [DEBUG] [Thread-196648] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:51:10.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-15T02:51:10.428 [DEBUG] [Thread-196651] [transport.py] [_log()] starting thread (client mode): 0xa2d84f40
2026-02-15T02:51:10.428 [DEBUG] [Thread-196651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:51:10.445 [DEBUG] [Thread-196651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:51:10.445 [INFO] [Thread-196651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:51:10.454 [DEBUG] [Thread-196651] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:51:10.454 [DEBUG] [Thread-196651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:51:10.454 [DEBUG] [Thread-196651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:51:10.454 [DEBUG] [Thread-196651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:51:10.454 [DEBUG] [Thread-196651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:51:10.454 [DEBUG] [Thread-196651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:51:10.454 [DEBUG] [Thread-196651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:51:10.454 [DEBUG] [Thread-196651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:51:10.454 [DEBUG] [Thread-196651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:51:10.454 [DEBUG] [Thread-196651] [transport.py] [_log()] client lang: <none>
2026-02-15T02:51:10.454 [DEBUG] [Thread-196651] [transport.py] [_log()] server lang: <none>
2026-02-15T02:51:10.455 [DEBUG] [Thread-196651] [transport.py] [_log()] kex follows: False
2026-02-15T02:51:10.455 [DEBUG] [Thread-196651] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:51:10.455 [DEBUG] [Thread-196651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:51:10.455 [DEBUG] [Thread-196651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:51:10.455 [DEBUG] [Thread-196651] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:51:10.455 [DEBUG] [Thread-196651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:51:10.455 [DEBUG] [Thread-196651] [transport.py] [_log()] Compression: none
2026-02-15T02:51:10.455 [DEBUG] [Thread-196651] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:51:10.514 [DEBUG] [Thread-196651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:51:10.515 [DEBUG] [Thread-196651] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:51:10.515 [DEBUG] [Thread-196651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:51:10.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:51:10.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:51:10.573 [DEBUG] [Thread-196651] [transport.py] [_log()] userauth is OK
2026-02-15T02:51:10.574 [DEBUG] [Thread-196651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:51:10.574 [DEBUG] [Thread-196651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:51:10.574 [DEBUG] [Thread-196651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:51:10.574 [DEBUG] [Thread-196651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:51:10.594 [INFO] [Thread-196651] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:51:10.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-15T02:51:10.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:51:11.297 [DEBUG] [Thread-196653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:51:11.389 [DEBUG] [Thread-196651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:51:11.389 [DEBUG] [Thread-196651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:51:11.437 [DEBUG] [Thread-196651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:51:11.438 [DEBUG] [Thread-196651] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:51:11.447 [DEBUG] [Thread-196651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:51:11.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:51:11.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:51:11.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:51:11.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:51:11.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:51:11.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:51:11.485 [DEBUG] [Thread-196651] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:51:18.283 [DEBUG] [Thread-196654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:51:26.342 [DEBUG] [Thread-196655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:51:41.377 [DEBUG] [Thread-196656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:51:41.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:51:41.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:51:41.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-15T02:51:43.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 51, 23), 0.82, 94.54, 0.0, 33.93, 6.29, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:51:43.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:51:23
2026-02-15T02:51:43.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:51:43.931 [DEBUG] [Thread-196657] [transport.py] [_log()] starting thread (client mode): 0xa2d6de10
2026-02-15T02:51:43.931 [DEBUG] [Thread-196657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:51:43.951 [DEBUG] [Thread-196657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:51:43.952 [INFO] [Thread-196657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:51:43.955 [DEBUG] [Thread-196657] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:51:43.955 [DEBUG] [Thread-196657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:51:43.955 [DEBUG] [Thread-196657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:51:43.955 [DEBUG] [Thread-196657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:51:43.955 [DEBUG] [Thread-196657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:51:43.955 [DEBUG] [Thread-196657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:51:43.955 [DEBUG] [Thread-196657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:51:43.955 [DEBUG] [Thread-196657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:51:43.955 [DEBUG] [Thread-196657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:51:43.955 [DEBUG] [Thread-196657] [transport.py] [_log()] client lang: <none>
2026-02-15T02:51:43.955 [DEBUG] [Thread-196657] [transport.py] [_log()] server lang: <none>
2026-02-15T02:51:43.955 [DEBUG] [Thread-196657] [transport.py] [_log()] kex follows: False
2026-02-15T02:51:43.956 [DEBUG] [Thread-196657] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:51:43.956 [DEBUG] [Thread-196657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:51:43.956 [DEBUG] [Thread-196657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:51:43.956 [DEBUG] [Thread-196657] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:51:43.956 [DEBUG] [Thread-196657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:51:43.956 [DEBUG] [Thread-196657] [transport.py] [_log()] Compression: none
2026-02-15T02:51:43.956 [DEBUG] [Thread-196657] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:51:43.974 [DEBUG] [Thread-196657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:51:43.975 [DEBUG] [Thread-196657] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:51:43.975 [DEBUG] [Thread-196657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:51:43.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:51:43.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:51:44.017 [DEBUG] [Thread-196657] [transport.py] [_log()] userauth is OK
2026-02-15T02:51:44.017 [DEBUG] [Thread-196657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:51:44.017 [DEBUG] [Thread-196657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:51:44.017 [DEBUG] [Thread-196657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:51:44.018 [DEBUG] [Thread-196657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:51:44.052 [INFO] [Thread-196657] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:51:44.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:51:44.645 [DEBUG] [Thread-196657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:51:44.646 [DEBUG] [Thread-196657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:51:44.646 [DEBUG] [Thread-196657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:51:44.686 [DEBUG] [Thread-196657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:51:44.686 [DEBUG] [Thread-196657] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:51:44.690 [DEBUG] [Thread-196657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:51:44.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:51:44.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:51:44.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:51:44.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:51:44.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:51:44.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:51:44.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:51:44.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:51:44.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:51:44.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.035523 -999.00   +6.10  26.87     92   +5.00 1 2 1 3 1     0    0 0.86 -11.38 .NESW 26.9 26.9 146.9 36.8 6.7 -23.8 6.6 -23.0 6.4 -21.9 6.7 -23.0
2026-02-15T02:51:44.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:51:44.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:51:44.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.035523
2026-02-15T02:51:44.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:51:44.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:51:44.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:51:44.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:51:44.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:51:44.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:51:23', tmtdew=0.82, humidity=94.54, cloud=0.0, wind=33.93, temperature=6.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:51:09.187', atlas_cloud=2, atlas_rain=1, zp_data=[2.5707499999999994, 1.7482500000000005, 2.3512500000000003, 1.971499999999999, nan, nan, nan, nan, nan, 0.601, 1.2087500000000002, 1.9130000000000003, 2.654, 1.9862499999999992, 2.379999999999999, 1.9379999999999997, 0.7232500000000002, 0.3414999999999999, 0.5619999999999994, 0.9942499999999992, 1.3089999999999984, 1.2827499999999983, 1.6182500000000006, 0.9762500000000003, 0.4789999999999992, 0.31049999999999933, 0.47675, 0.43350000000000044, 0.5555000000000003, 0.5130000000000008, 0.6260000000000012, 0.49100000000000055, 0.2727499999999985], zp_timestamp='2026-02-15T00:51:00')
2026-02-15T02:51:44.710 [DEBUG] [Thread-196657] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:51:44.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-15T02:51:44.813 [DEBUG] [Thread-196660] [transport.py] [_log()] starting thread (client mode): 0xa57d63b0
2026-02-15T02:51:44.813 [DEBUG] [Thread-196660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:51:44.828 [DEBUG] [Thread-196660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:51:44.828 [INFO] [Thread-196660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:51:44.836 [DEBUG] [Thread-196660] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:51:44.836 [DEBUG] [Thread-196660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:51:44.836 [DEBUG] [Thread-196660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:51:44.836 [DEBUG] [Thread-196660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:51:44.836 [DEBUG] [Thread-196660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:51:44.836 [DEBUG] [Thread-196660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:51:44.836 [DEBUG] [Thread-196660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:51:44.836 [DEBUG] [Thread-196660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:51:44.836 [DEBUG] [Thread-196660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:51:44.836 [DEBUG] [Thread-196660] [transport.py] [_log()] client lang: <none>
2026-02-15T02:51:44.836 [DEBUG] [Thread-196660] [transport.py] [_log()] server lang: <none>
2026-02-15T02:51:44.836 [DEBUG] [Thread-196660] [transport.py] [_log()] kex follows: False
2026-02-15T02:51:44.836 [DEBUG] [Thread-196660] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:51:44.836 [DEBUG] [Thread-196660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:51:44.836 [DEBUG] [Thread-196660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:51:44.836 [DEBUG] [Thread-196660] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:51:44.836 [DEBUG] [Thread-196660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:51:44.836 [DEBUG] [Thread-196660] [transport.py] [_log()] Compression: none
2026-02-15T02:51:44.836 [DEBUG] [Thread-196660] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:51:44.893 [DEBUG] [Thread-196660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:51:44.893 [DEBUG] [Thread-196660] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:51:44.894 [DEBUG] [Thread-196660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:51:44.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:51:44.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:51:44.949 [DEBUG] [Thread-196660] [transport.py] [_log()] userauth is OK
2026-02-15T02:51:44.950 [DEBUG] [Thread-196660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:51:44.950 [DEBUG] [Thread-196660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:51:44.950 [DEBUG] [Thread-196660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:51:44.950 [DEBUG] [Thread-196660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:51:44.971 [INFO] [Thread-196660] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:51:44.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T02:51:44.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:51:45.779 [DEBUG] [Thread-196660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:51:45.780 [DEBUG] [Thread-196660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:51:45.827 [DEBUG] [Thread-196660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:51:45.828 [DEBUG] [Thread-196660] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:51:45.837 [DEBUG] [Thread-196660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:51:45.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:51:45.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-15T02:51:45.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-15T02:51:45.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:51:45.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:51:45.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:51:45.876 [DEBUG] [Thread-196660] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:51:49.084 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:51:49.085 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:51:56.412 [DEBUG] [Thread-196662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:52:11.463 [DEBUG] [Thread-196663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:52:15.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:52:15.870 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:52:15.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-15T02:52:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 51, 58), 0.82, 94.54, 0.0, 33.01, 6.24, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:52:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:51:58
2026-02-15T02:52:18.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:52:18.322 [DEBUG] [Thread-196664] [transport.py] [_log()] starting thread (client mode): 0xa2de25c0
2026-02-15T02:52:18.323 [DEBUG] [Thread-196664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:52:18.340 [DEBUG] [Thread-196664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:52:18.340 [INFO] [Thread-196664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:52:18.344 [DEBUG] [Thread-196664] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:52:18.344 [DEBUG] [Thread-196664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:52:18.344 [DEBUG] [Thread-196664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:52:18.344 [DEBUG] [Thread-196664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:52:18.344 [DEBUG] [Thread-196664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:52:18.344 [DEBUG] [Thread-196664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:52:18.344 [DEBUG] [Thread-196664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:52:18.344 [DEBUG] [Thread-196664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:52:18.344 [DEBUG] [Thread-196664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:52:18.344 [DEBUG] [Thread-196664] [transport.py] [_log()] client lang: <none>
2026-02-15T02:52:18.344 [DEBUG] [Thread-196664] [transport.py] [_log()] server lang: <none>
2026-02-15T02:52:18.344 [DEBUG] [Thread-196664] [transport.py] [_log()] kex follows: False
2026-02-15T02:52:18.344 [DEBUG] [Thread-196664] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:52:18.344 [DEBUG] [Thread-196664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:52:18.344 [DEBUG] [Thread-196664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:52:18.344 [DEBUG] [Thread-196664] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:52:18.344 [DEBUG] [Thread-196664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:52:18.344 [DEBUG] [Thread-196664] [transport.py] [_log()] Compression: none
2026-02-15T02:52:18.344 [DEBUG] [Thread-196664] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:52:18.345 [DEBUG] [Thread-196666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:52:18.360 [DEBUG] [Thread-196664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:52:18.360 [DEBUG] [Thread-196664] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:52:18.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:52:18.360 [DEBUG] [Thread-196664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:52:18.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:52:18.361 [DEBUG] [Thread-196664] [transport.py] [_log()] userauth is OK
2026-02-15T02:52:18.361 [DEBUG] [Thread-196664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:52:18.361 [DEBUG] [Thread-196664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:52:18.361 [DEBUG] [Thread-196664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:52:18.361 [DEBUG] [Thread-196664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:52:18.378 [INFO] [Thread-196664] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:52:18.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:52:19.001 [DEBUG] [Thread-196664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:52:19.002 [DEBUG] [Thread-196664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:52:19.002 [DEBUG] [Thread-196664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:52:19.042 [DEBUG] [Thread-196664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:52:19.042 [DEBUG] [Thread-196664] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:52:19.046 [DEBUG] [Thread-196664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:52:19.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:52:19.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:52:19.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:52:19.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:52:19.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:52:19.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:52:19.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:52:19.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:52:19.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:52:19.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.035870 -999.00   +6.20  36.84     92   +5.00 1 2 2 3 1     0    0 0.88 -10.85 .NESW 36.8 36.8 143.4 40.5 6.7 -23.8 6.6 -23.0 6.4 -21.9 6.7 -23.0
2026-02-15T02:52:19.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:52:19.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:52:19.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.035870
2026-02-15T02:52:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:52:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:52:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:52:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:52:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:52:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:51:58', tmtdew=0.82, humidity=94.54, cloud=0.0, wind=33.01, temperature=6.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:51:39.168', atlas_cloud=2, atlas_rain=1, zp_data=[2.5707499999999994, 1.7482500000000005, 2.3512500000000003, 1.971499999999999, nan, nan, nan, nan, nan, 0.601, 1.2087500000000002, 1.9130000000000003, 2.654, 1.9862499999999992, 2.379999999999999, 1.9379999999999997, 0.7232500000000002, 0.3414999999999999, 0.5619999999999994, 0.9942499999999992, 1.3089999999999984, 1.2827499999999983, 1.6182500000000006, 0.9762500000000003, 0.4789999999999992, 0.31049999999999933, 0.47675, 0.43350000000000044, 0.5555000000000003, 0.5130000000000008, 0.6260000000000012, 0.49100000000000055, 0.2727499999999985], zp_timestamp='2026-02-15T00:51:00')
2026-02-15T02:52:19.074 [DEBUG] [Thread-196664] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:52:19.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-15T02:52:19.170 [DEBUG] [Thread-196668] [transport.py] [_log()] starting thread (client mode): 0xa2d6f850
2026-02-15T02:52:19.170 [DEBUG] [Thread-196668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:52:19.185 [DEBUG] [Thread-196668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:52:19.185 [INFO] [Thread-196668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:52:19.192 [DEBUG] [Thread-196668] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:52:19.193 [DEBUG] [Thread-196668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:52:19.193 [DEBUG] [Thread-196668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:52:19.193 [DEBUG] [Thread-196668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:52:19.193 [DEBUG] [Thread-196668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:52:19.193 [DEBUG] [Thread-196668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:52:19.193 [DEBUG] [Thread-196668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:52:19.193 [DEBUG] [Thread-196668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:52:19.193 [DEBUG] [Thread-196668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:52:19.193 [DEBUG] [Thread-196668] [transport.py] [_log()] client lang: <none>
2026-02-15T02:52:19.193 [DEBUG] [Thread-196668] [transport.py] [_log()] server lang: <none>
2026-02-15T02:52:19.193 [DEBUG] [Thread-196668] [transport.py] [_log()] kex follows: False
2026-02-15T02:52:19.193 [DEBUG] [Thread-196668] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:52:19.193 [DEBUG] [Thread-196668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:52:19.193 [DEBUG] [Thread-196668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:52:19.193 [DEBUG] [Thread-196668] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:52:19.193 [DEBUG] [Thread-196668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:52:19.194 [DEBUG] [Thread-196668] [transport.py] [_log()] Compression: none
2026-02-15T02:52:19.194 [DEBUG] [Thread-196668] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:52:19.253 [DEBUG] [Thread-196668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:52:19.254 [DEBUG] [Thread-196668] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:52:19.254 [DEBUG] [Thread-196668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:52:19.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:52:19.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:52:19.309 [DEBUG] [Thread-196668] [transport.py] [_log()] userauth is OK
2026-02-15T02:52:19.310 [DEBUG] [Thread-196668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:52:19.310 [DEBUG] [Thread-196668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:52:19.310 [DEBUG] [Thread-196668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:52:19.310 [DEBUG] [Thread-196668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:52:19.328 [INFO] [Thread-196668] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:52:19.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-15T02:52:19.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:52:20.178 [DEBUG] [Thread-196668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:52:20.179 [DEBUG] [Thread-196668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:52:20.227 [DEBUG] [Thread-196668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:52:20.227 [DEBUG] [Thread-196668] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:52:20.236 [DEBUG] [Thread-196668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:52:20.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:52:20.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-15T02:52:20.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-15T02:52:20.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:52:20.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:52:20.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:52:20.273 [DEBUG] [Thread-196668] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:52:26.551 [DEBUG] [Thread-196670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:52:41.602 [DEBUG] [Thread-196671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:52:49.292 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:52:49.293 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:52:50.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:52:50.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:52:50.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:52:52.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 52, 33), 1.33, 91.18, 0.0, 37.75, 6.6, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:52:52.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:52:33
2026-02-15T02:52:52.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:52:52.751 [DEBUG] [Thread-196672] [transport.py] [_log()] starting thread (client mode): 0xa2de3c10
2026-02-15T02:52:52.751 [DEBUG] [Thread-196672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:52:52.771 [DEBUG] [Thread-196672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:52:52.771 [INFO] [Thread-196672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:52:52.774 [DEBUG] [Thread-196672] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:52:52.774 [DEBUG] [Thread-196672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:52:52.775 [DEBUG] [Thread-196672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:52:52.775 [DEBUG] [Thread-196672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:52:52.775 [DEBUG] [Thread-196672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:52:52.775 [DEBUG] [Thread-196672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:52:52.775 [DEBUG] [Thread-196672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:52:52.775 [DEBUG] [Thread-196672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:52:52.775 [DEBUG] [Thread-196672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:52:52.775 [DEBUG] [Thread-196672] [transport.py] [_log()] client lang: <none>
2026-02-15T02:52:52.775 [DEBUG] [Thread-196672] [transport.py] [_log()] server lang: <none>
2026-02-15T02:52:52.775 [DEBUG] [Thread-196672] [transport.py] [_log()] kex follows: False
2026-02-15T02:52:52.775 [DEBUG] [Thread-196672] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:52:52.775 [DEBUG] [Thread-196672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:52:52.775 [DEBUG] [Thread-196672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:52:52.776 [DEBUG] [Thread-196672] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:52:52.776 [DEBUG] [Thread-196672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:52:52.776 [DEBUG] [Thread-196672] [transport.py] [_log()] Compression: none
2026-02-15T02:52:52.776 [DEBUG] [Thread-196672] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:52:52.795 [DEBUG] [Thread-196672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:52:52.796 [DEBUG] [Thread-196672] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:52:52.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:52:52.797 [DEBUG] [Thread-196672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:52:52.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:52:52.799 [DEBUG] [Thread-196672] [transport.py] [_log()] userauth is OK
2026-02-15T02:52:52.799 [DEBUG] [Thread-196672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:52:52.799 [DEBUG] [Thread-196672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:52:52.800 [DEBUG] [Thread-196672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:52:52.800 [DEBUG] [Thread-196672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:52:52.817 [INFO] [Thread-196672] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:52:52.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:52:53.527 [DEBUG] [Thread-196672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:52:53.528 [DEBUG] [Thread-196672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:52:53.528 [DEBUG] [Thread-196672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:52:53.568 [DEBUG] [Thread-196672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:52:53.568 [DEBUG] [Thread-196672] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:52:53.571 [DEBUG] [Thread-196672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:52:53.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:52:53.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:52:53.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:52:53.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:52:53.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:52:53.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:52:53.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:52:53.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:52:53.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:52:53.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.036218 -999.00   +6.20  25.67     92   +5.00 1 2 1 3 1     0    0 0.89 -10.64 .NESW 25.7 25.7 143.2 37.0 6.8 -23.9 6.6 -23.0 6.3 -21.9 6.8 -23.2
2026-02-15T02:52:53.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:52:53.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:52:53.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.036218
2026-02-15T02:52:53.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:52:53.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:52:53.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:52:53.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:52:53.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:52:53.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:52:33', tmtdew=1.33, humidity=91.18, cloud=0.0, wind=37.75, temperature=6.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:52:09.235', atlas_cloud=2, atlas_rain=1, zp_data=[2.5707499999999994, 1.7482500000000005, 2.3512500000000003, 1.971499999999999, nan, nan, nan, nan, nan, 0.601, 1.2087500000000002, 1.9130000000000003, 2.654, 1.9862499999999992, 2.379999999999999, 1.9379999999999997, 0.7232500000000002, 0.3414999999999999, 0.5619999999999994, 0.9942499999999992, 1.3089999999999984, 1.2827499999999983, 1.6182500000000006, 0.9762500000000003, 0.4789999999999992, 0.31049999999999933, 0.47675, 0.43350000000000044, 0.5555000000000003, 0.5130000000000008, 0.6260000000000012, 0.49100000000000055, 0.2727499999999985], zp_timestamp='2026-02-15T00:51:00')
2026-02-15T02:52:53.590 [DEBUG] [Thread-196672] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:52:53.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-15T02:52:53.685 [DEBUG] [Thread-196675] [transport.py] [_log()] starting thread (client mode): 0xa2d86920
2026-02-15T02:52:53.685 [DEBUG] [Thread-196675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:52:53.703 [DEBUG] [Thread-196675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:52:53.704 [INFO] [Thread-196675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:52:53.712 [DEBUG] [Thread-196675] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:52:53.712 [DEBUG] [Thread-196675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:52:53.712 [DEBUG] [Thread-196675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:52:53.712 [DEBUG] [Thread-196675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:52:53.712 [DEBUG] [Thread-196675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:52:53.712 [DEBUG] [Thread-196675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:52:53.713 [DEBUG] [Thread-196675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:52:53.713 [DEBUG] [Thread-196675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:52:53.713 [DEBUG] [Thread-196675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:52:53.713 [DEBUG] [Thread-196675] [transport.py] [_log()] client lang: <none>
2026-02-15T02:52:53.713 [DEBUG] [Thread-196675] [transport.py] [_log()] server lang: <none>
2026-02-15T02:52:53.713 [DEBUG] [Thread-196675] [transport.py] [_log()] kex follows: False
2026-02-15T02:52:53.713 [DEBUG] [Thread-196675] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:52:53.713 [DEBUG] [Thread-196675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:52:53.714 [DEBUG] [Thread-196675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:52:53.714 [DEBUG] [Thread-196675] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:52:53.714 [DEBUG] [Thread-196675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:52:53.714 [DEBUG] [Thread-196675] [transport.py] [_log()] Compression: none
2026-02-15T02:52:53.714 [DEBUG] [Thread-196675] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:52:53.770 [DEBUG] [Thread-196675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:52:53.771 [DEBUG] [Thread-196675] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:52:53.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:52:53.773 [DEBUG] [Thread-196675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:52:53.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:52:53.829 [DEBUG] [Thread-196675] [transport.py] [_log()] userauth is OK
2026-02-15T02:52:53.830 [DEBUG] [Thread-196675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:52:53.830 [DEBUG] [Thread-196675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:52:53.830 [DEBUG] [Thread-196675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:52:53.830 [DEBUG] [Thread-196675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:52:53.849 [INFO] [Thread-196675] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:52:53.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T02:52:53.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:52:54.663 [DEBUG] [Thread-196675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:52:54.663 [DEBUG] [Thread-196675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:52:54.711 [DEBUG] [Thread-196675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:52:54.712 [DEBUG] [Thread-196675] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:52:54.721 [DEBUG] [Thread-196675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:52:54.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:52:54.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-15T02:52:54.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-15T02:52:54.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:52:54.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:52:54.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:52:54.759 [DEBUG] [Thread-196675] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:52:56.637 [DEBUG] [Thread-196677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:53:11.689 [DEBUG] [Thread-196678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:53:18.423 [DEBUG] [Thread-196679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:53:24.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:53:24.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:53:24.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-15T02:53:26.724 [DEBUG] [Thread-196680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:53:27.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 53, 10), 0.87, 94.57, 0.0, 37.69, 6.3, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:53:27.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:53:10
2026-02-15T02:53:27.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:53:27.601 [DEBUG] [Thread-196681] [transport.py] [_log()] starting thread (client mode): 0xa57d4160
2026-02-15T02:53:27.601 [DEBUG] [Thread-196681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:53:27.621 [DEBUG] [Thread-196681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:53:27.621 [INFO] [Thread-196681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:53:27.624 [DEBUG] [Thread-196681] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:53:27.624 [DEBUG] [Thread-196681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:53:27.624 [DEBUG] [Thread-196681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:53:27.624 [DEBUG] [Thread-196681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:53:27.624 [DEBUG] [Thread-196681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:53:27.625 [DEBUG] [Thread-196681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:53:27.625 [DEBUG] [Thread-196681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:53:27.625 [DEBUG] [Thread-196681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:53:27.625 [DEBUG] [Thread-196681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:53:27.625 [DEBUG] [Thread-196681] [transport.py] [_log()] client lang: <none>
2026-02-15T02:53:27.625 [DEBUG] [Thread-196681] [transport.py] [_log()] server lang: <none>
2026-02-15T02:53:27.625 [DEBUG] [Thread-196681] [transport.py] [_log()] kex follows: False
2026-02-15T02:53:27.625 [DEBUG] [Thread-196681] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:53:27.625 [DEBUG] [Thread-196681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:53:27.625 [DEBUG] [Thread-196681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:53:27.625 [DEBUG] [Thread-196681] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:53:27.625 [DEBUG] [Thread-196681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:53:27.625 [DEBUG] [Thread-196681] [transport.py] [_log()] Compression: none
2026-02-15T02:53:27.625 [DEBUG] [Thread-196681] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:53:27.643 [DEBUG] [Thread-196681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:53:27.643 [DEBUG] [Thread-196681] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:53:27.644 [DEBUG] [Thread-196681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:53:27.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:53:27.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:53:27.646 [DEBUG] [Thread-196681] [transport.py] [_log()] userauth is OK
2026-02-15T02:53:27.646 [DEBUG] [Thread-196681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:53:27.647 [DEBUG] [Thread-196681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:53:27.647 [DEBUG] [Thread-196681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:53:27.647 [DEBUG] [Thread-196681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:53:27.672 [INFO] [Thread-196681] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:53:27.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:53:28.332 [DEBUG] [Thread-196681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:53:28.333 [DEBUG] [Thread-196681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:53:28.333 [DEBUG] [Thread-196681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:53:28.374 [DEBUG] [Thread-196681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:53:28.374 [DEBUG] [Thread-196681] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:53:28.378 [DEBUG] [Thread-196681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:53:28.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:53:28.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:53:28.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:53:28.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:53:28.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:53:28.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:53:28.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:53:28.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:53:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:53:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.036565 -999.00   +6.20  25.76     92   +5.00 1 2 1 3 1     0    0 0.91 -10.34 .NESW 25.8 25.8 141.8 39.3 6.8 -23.9 6.6 -23.1 6.3 -21.9 6.7 -23.1
2026-02-15T02:53:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:53:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:53:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.036565
2026-02-15T02:53:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:53:28.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:53:28.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:53:28.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:53:28.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:53:28.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:53:10', tmtdew=0.87, humidity=94.57, cloud=0.0, wind=37.69, temperature=6.3, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:52:39.216', atlas_cloud=2, atlas_rain=1, zp_data=[2.5707499999999994, 1.7482500000000005, 2.3512500000000003, 1.971499999999999, nan, nan, nan, nan, nan, 0.601, 1.2087500000000002, 1.9130000000000003, 2.654, 1.9862499999999992, 2.379999999999999, 1.9379999999999997, 0.7232500000000002, 0.3414999999999999, 0.5619999999999994, 0.9942499999999992, 1.3089999999999984, 1.2827499999999983, 1.6182500000000006, 0.9762500000000003, 0.4789999999999992, 0.31049999999999933, 0.47675, 0.43350000000000044, 0.5555000000000003, 0.5130000000000008, 0.6260000000000012, 0.49100000000000055, 0.2727499999999985], zp_timestamp='2026-02-15T00:51:00')
2026-02-15T02:53:28.402 [DEBUG] [Thread-196681] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:53:28.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T02:53:28.498 [DEBUG] [Thread-196684] [transport.py] [_log()] starting thread (client mode): 0xa2d853c0
2026-02-15T02:53:28.498 [DEBUG] [Thread-196684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:53:28.522 [DEBUG] [Thread-196684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:53:28.522 [INFO] [Thread-196684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:53:28.530 [DEBUG] [Thread-196684] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:53:28.530 [DEBUG] [Thread-196684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:53:28.530 [DEBUG] [Thread-196684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:53:28.530 [DEBUG] [Thread-196684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:53:28.530 [DEBUG] [Thread-196684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:53:28.530 [DEBUG] [Thread-196684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:53:28.530 [DEBUG] [Thread-196684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:53:28.530 [DEBUG] [Thread-196684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:53:28.530 [DEBUG] [Thread-196684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:53:28.530 [DEBUG] [Thread-196684] [transport.py] [_log()] client lang: <none>
2026-02-15T02:53:28.530 [DEBUG] [Thread-196684] [transport.py] [_log()] server lang: <none>
2026-02-15T02:53:28.531 [DEBUG] [Thread-196684] [transport.py] [_log()] kex follows: False
2026-02-15T02:53:28.531 [DEBUG] [Thread-196684] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:53:28.531 [DEBUG] [Thread-196684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:53:28.531 [DEBUG] [Thread-196684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:53:28.531 [DEBUG] [Thread-196684] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:53:28.531 [DEBUG] [Thread-196684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:53:28.531 [DEBUG] [Thread-196684] [transport.py] [_log()] Compression: none
2026-02-15T02:53:28.531 [DEBUG] [Thread-196684] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:53:28.589 [DEBUG] [Thread-196684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:53:28.590 [DEBUG] [Thread-196684] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:53:28.590 [DEBUG] [Thread-196684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:53:28.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:53:28.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:53:28.645 [DEBUG] [Thread-196684] [transport.py] [_log()] userauth is OK
2026-02-15T02:53:28.646 [DEBUG] [Thread-196684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:53:28.646 [DEBUG] [Thread-196684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:53:28.646 [DEBUG] [Thread-196684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:53:28.646 [DEBUG] [Thread-196684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:53:28.664 [INFO] [Thread-196684] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:53: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-15T02:53:28.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:53:29.418 [DEBUG] [Thread-196684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:53:29.418 [DEBUG] [Thread-196684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:53:29.466 [DEBUG] [Thread-196684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:53:29.467 [DEBUG] [Thread-196684] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:53:29.476 [DEBUG] [Thread-196684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:53:29.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:53:29.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-15T02:53:29.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-15T02:53:29.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:53:29.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:53:29.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:53:29.521 [DEBUG] [Thread-196684] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:53:41.764 [DEBUG] [Thread-196686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:53:49.495 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:53:49.496 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:53:56.816 [DEBUG] [Thread-196687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:53:59.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:53:59.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:53:59.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-15T02:54:01.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 53, 46), 0.87, 94.04, 0.0, 36.77, 6.29, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:54:01.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:53:46
2026-02-15T02:54:01.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:54:01.913 [DEBUG] [Thread-196688] [transport.py] [_log()] starting thread (client mode): 0xa2de2a10
2026-02-15T02:54:01.914 [DEBUG] [Thread-196688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:54:01.933 [DEBUG] [Thread-196688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:54:01.933 [INFO] [Thread-196688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:54:01.935 [DEBUG] [Thread-196688] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:54:01.935 [DEBUG] [Thread-196688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:54:01.935 [DEBUG] [Thread-196688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:54:01.935 [DEBUG] [Thread-196688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:54:01.935 [DEBUG] [Thread-196688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:54:01.935 [DEBUG] [Thread-196688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:54:01.935 [DEBUG] [Thread-196688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:54:01.935 [DEBUG] [Thread-196688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:54:01.935 [DEBUG] [Thread-196688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:54:01.935 [DEBUG] [Thread-196688] [transport.py] [_log()] client lang: <none>
2026-02-15T02:54:01.935 [DEBUG] [Thread-196688] [transport.py] [_log()] server lang: <none>
2026-02-15T02:54:01.935 [DEBUG] [Thread-196688] [transport.py] [_log()] kex follows: False
2026-02-15T02:54:01.935 [DEBUG] [Thread-196688] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:54:01.935 [DEBUG] [Thread-196688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:54:01.935 [DEBUG] [Thread-196688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:54:01.935 [DEBUG] [Thread-196688] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:54:01.936 [DEBUG] [Thread-196688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:54:01.936 [DEBUG] [Thread-196688] [transport.py] [_log()] Compression: none
2026-02-15T02:54:01.936 [DEBUG] [Thread-196688] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:54:01.952 [DEBUG] [Thread-196688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:54:01.953 [DEBUG] [Thread-196688] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:54:01.953 [DEBUG] [Thread-196688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:54:01.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:54:01.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:54:01.955 [DEBUG] [Thread-196688] [transport.py] [_log()] userauth is OK
2026-02-15T02:54:01.955 [DEBUG] [Thread-196688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:54:01.956 [DEBUG] [Thread-196688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:54:01.956 [DEBUG] [Thread-196688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:54:01.956 [DEBUG] [Thread-196688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:54:01.971 [INFO] [Thread-196688] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:54:01.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:54:02.635 [DEBUG] [Thread-196688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:54:02.635 [DEBUG] [Thread-196688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:54:02.636 [DEBUG] [Thread-196688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:54:02.676 [DEBUG] [Thread-196688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:54:02.677 [DEBUG] [Thread-196688] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:54:02.680 [DEBUG] [Thread-196688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:54:02.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:54:02.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:54:02.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:54:02.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:54:02.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:54:02.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:54:02.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:54:02.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:54:02.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:54:02.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.036912 -999.00   +6.20  25.38     92   +5.00 1 2 1 3 1     0    0 0.90 -9.98 .NESW 25.4 25.4 137.0 36.9 6.7 -23.8 6.6 -22.9 6.4 -21.9 6.7 -23.3
2026-02-15T02:54:02.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:54:02.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:54:02.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.036912
2026-02-15T02:54:02.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:54:02.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:54:02.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:54:02.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:54:02.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:54:02.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:53:46', tmtdew=0.87, humidity=94.04, cloud=0.0, wind=36.77, temperature=6.29, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:53:09.197', atlas_cloud=2, atlas_rain=1, zp_data=[2.5707499999999994, 1.7482500000000005, 2.3512500000000003, 1.971499999999999, nan, nan, nan, nan, nan, 0.601, 1.2087500000000002, 1.9130000000000003, 2.654, 1.9862499999999992, 2.379999999999999, 1.9379999999999997, 0.7232500000000002, 0.3414999999999999, 0.5619999999999994, 0.9942499999999992, 1.3089999999999984, 1.2827499999999983, 1.6182500000000006, 0.9762500000000003, 0.4789999999999992, 0.31049999999999933, 0.47675, 0.43350000000000044, 0.5555000000000003, 0.5130000000000008, 0.6260000000000012, 0.49100000000000055, 0.2727499999999985], zp_timestamp='2026-02-15T00:51:00')
2026-02-15T02:54:02.708 [DEBUG] [Thread-196688] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:54:02.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-15T02:54:02.804 [DEBUG] [Thread-196691] [transport.py] [_log()] starting thread (client mode): 0xa57d4160
2026-02-15T02:54:02.804 [DEBUG] [Thread-196691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:54:02.819 [DEBUG] [Thread-196691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:54:02.819 [INFO] [Thread-196691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:54:02.827 [DEBUG] [Thread-196691] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:54:02.827 [DEBUG] [Thread-196691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:54:02.827 [DEBUG] [Thread-196691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:54:02.827 [DEBUG] [Thread-196691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:54:02.827 [DEBUG] [Thread-196691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:54:02.827 [DEBUG] [Thread-196691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:54:02.827 [DEBUG] [Thread-196691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:54:02.827 [DEBUG] [Thread-196691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:54:02.827 [DEBUG] [Thread-196691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:54:02.827 [DEBUG] [Thread-196691] [transport.py] [_log()] client lang: <none>
2026-02-15T02:54:02.827 [DEBUG] [Thread-196691] [transport.py] [_log()] server lang: <none>
2026-02-15T02:54:02.827 [DEBUG] [Thread-196691] [transport.py] [_log()] kex follows: False
2026-02-15T02:54:02.827 [DEBUG] [Thread-196691] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:54:02.827 [DEBUG] [Thread-196691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:54:02.828 [DEBUG] [Thread-196691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:54:02.828 [DEBUG] [Thread-196691] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:54:02.828 [DEBUG] [Thread-196691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:54:02.828 [DEBUG] [Thread-196691] [transport.py] [_log()] Compression: none
2026-02-15T02:54:02.828 [DEBUG] [Thread-196691] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:54:02.885 [DEBUG] [Thread-196691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:54:02.885 [DEBUG] [Thread-196691] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:54:02.885 [DEBUG] [Thread-196691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:54:02.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:54:02.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:54:02.940 [DEBUG] [Thread-196691] [transport.py] [_log()] userauth is OK
2026-02-15T02:54:02.941 [DEBUG] [Thread-196691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:54:02.941 [DEBUG] [Thread-196691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:54:02.941 [DEBUG] [Thread-196691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:54:02.941 [DEBUG] [Thread-196691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:54:02.960 [INFO] [Thread-196691] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:54:02.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-15T02:54:02.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:54:03.756 [DEBUG] [Thread-196691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:54:03.756 [DEBUG] [Thread-196691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:54:03.804 [DEBUG] [Thread-196691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:54:03.805 [DEBUG] [Thread-196691] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:54:03.814 [DEBUG] [Thread-196691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:54:03.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:54: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-15T02:54: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-15T02:54:03.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:54:03.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:54:03.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:54:03.851 [DEBUG] [Thread-196691] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:54:11.852 [DEBUG] [Thread-196693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:54:18.478 [DEBUG] [Thread-196694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:54:26.901 [DEBUG] [Thread-196695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:54:33.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:54:33.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:54: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-15T02:54:35.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 54, 23), 0.87, 94.04, 0.0, 34.28, 6.27, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:54:35.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:54:23
2026-02-15T02:54:36.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:54:36.495 [DEBUG] [Thread-196696] [transport.py] [_log()] starting thread (client mode): 0xa2d976a0
2026-02-15T02:54:36.495 [DEBUG] [Thread-196696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:54:36.516 [DEBUG] [Thread-196696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:54:36.516 [INFO] [Thread-196696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:54:36.517 [DEBUG] [Thread-196696] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:54:36.517 [DEBUG] [Thread-196696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:54:36.517 [DEBUG] [Thread-196696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:54:36.517 [DEBUG] [Thread-196696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:54:36.517 [DEBUG] [Thread-196696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:54:36.517 [DEBUG] [Thread-196696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:54:36.517 [DEBUG] [Thread-196696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:54:36.517 [DEBUG] [Thread-196696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:54:36.517 [DEBUG] [Thread-196696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:54:36.517 [DEBUG] [Thread-196696] [transport.py] [_log()] client lang: <none>
2026-02-15T02:54:36.517 [DEBUG] [Thread-196696] [transport.py] [_log()] server lang: <none>
2026-02-15T02:54:36.517 [DEBUG] [Thread-196696] [transport.py] [_log()] kex follows: False
2026-02-15T02:54:36.517 [DEBUG] [Thread-196696] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:54:36.517 [DEBUG] [Thread-196696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:54:36.517 [DEBUG] [Thread-196696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:54:36.517 [DEBUG] [Thread-196696] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:54:36.518 [DEBUG] [Thread-196696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:54:36.518 [DEBUG] [Thread-196696] [transport.py] [_log()] Compression: none
2026-02-15T02:54:36.518 [DEBUG] [Thread-196696] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:54:36.526 [DEBUG] [Thread-196696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:54:36.526 [DEBUG] [Thread-196696] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:54:36.527 [DEBUG] [Thread-196696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:54:36.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:54:36.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:54:36.529 [DEBUG] [Thread-196696] [transport.py] [_log()] userauth is OK
2026-02-15T02:54:36.529 [DEBUG] [Thread-196696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:54:36.529 [DEBUG] [Thread-196696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:54:36.529 [DEBUG] [Thread-196696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:54:36.529 [DEBUG] [Thread-196696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:54:36.566 [INFO] [Thread-196696] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:54:36.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:54:37.242 [DEBUG] [Thread-196696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:54:37.242 [DEBUG] [Thread-196696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:54:37.243 [DEBUG] [Thread-196696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:54:37.283 [DEBUG] [Thread-196696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:54:37.284 [DEBUG] [Thread-196696] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:54:37.287 [DEBUG] [Thread-196696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:54:37.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:54:37.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:54:37.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:54:37.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:54:37.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:54:37.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:54:37.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:54:37.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:54:37.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:54:37.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.037607 -999.00   +6.10  21.30     91   +4.90 1 2 1 3 1     0    0 0.93 -9.55 .NESW 21.3 21.3 142.6 35.9 6.7 -24.0 6.6 -23.0 6.3 -22.0 6.7 -23.2
2026-02-15T02:54:37.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:54:37.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:54:37.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.037607
2026-02-15T02:54:37.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:54:37.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:54:37.314 [DEBUG] [Thread-196696] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:54:37.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:54:37.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:54:37.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:54:37.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:54:23', tmtdew=0.87, humidity=94.04, cloud=0.0, wind=34.28, temperature=6.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:54:09.245', atlas_cloud=2, atlas_rain=1, zp_data=[2.5707499999999994, 1.7482500000000005, 2.3512500000000003, 1.971499999999999, nan, nan, nan, nan, nan, 0.601, 1.2087500000000002, 1.9130000000000003, 2.654, 1.9862499999999992, 2.379999999999999, 1.9379999999999997, 0.7232500000000002, 0.3414999999999999, 0.5619999999999994, 0.9942499999999992, 1.3089999999999984, 1.2827499999999983, 1.6182500000000006, 0.9762500000000003, 0.4789999999999992, 0.31049999999999933, 0.47675, 0.43350000000000044, 0.5555000000000003, 0.5130000000000008, 0.6260000000000012, 0.49100000000000055, 0.2727499999999985], zp_timestamp='2026-02-15T00:51:00')
2026-02-15T02:54:37.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T02:54:37.410 [DEBUG] [Thread-196699] [transport.py] [_log()] starting thread (client mode): 0xa2d03a90
2026-02-15T02:54:37.410 [DEBUG] [Thread-196699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:54:37.426 [DEBUG] [Thread-196699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:54:37.426 [INFO] [Thread-196699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:54:37.433 [DEBUG] [Thread-196699] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:54:37.434 [DEBUG] [Thread-196699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:54:37.434 [DEBUG] [Thread-196699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:54:37.434 [DEBUG] [Thread-196699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:54:37.434 [DEBUG] [Thread-196699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:54:37.434 [DEBUG] [Thread-196699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:54:37.434 [DEBUG] [Thread-196699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:54:37.434 [DEBUG] [Thread-196699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:54:37.434 [DEBUG] [Thread-196699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:54:37.434 [DEBUG] [Thread-196699] [transport.py] [_log()] client lang: <none>
2026-02-15T02:54:37.434 [DEBUG] [Thread-196699] [transport.py] [_log()] server lang: <none>
2026-02-15T02:54:37.434 [DEBUG] [Thread-196699] [transport.py] [_log()] kex follows: False
2026-02-15T02:54:37.434 [DEBUG] [Thread-196699] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:54:37.434 [DEBUG] [Thread-196699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:54:37.434 [DEBUG] [Thread-196699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:54:37.434 [DEBUG] [Thread-196699] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:54:37.434 [DEBUG] [Thread-196699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:54:37.434 [DEBUG] [Thread-196699] [transport.py] [_log()] Compression: none
2026-02-15T02:54:37.434 [DEBUG] [Thread-196699] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:54:37.493 [DEBUG] [Thread-196699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:54:37.494 [DEBUG] [Thread-196699] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:54:37.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:54:37.495 [DEBUG] [Thread-196699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:54:37.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:54:37.549 [DEBUG] [Thread-196699] [transport.py] [_log()] userauth is OK
2026-02-15T02:54:37.549 [DEBUG] [Thread-196699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:54:37.549 [DEBUG] [Thread-196699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:54:37.549 [DEBUG] [Thread-196699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:54:37.549 [DEBUG] [Thread-196699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:54:37.568 [INFO] [Thread-196699] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:54:37.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-15T02:54:37.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:54:38.353 [DEBUG] [Thread-196699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:54:38.354 [DEBUG] [Thread-196699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:54:38.401 [DEBUG] [Thread-196699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:54:38.401 [DEBUG] [Thread-196699] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:54:38.409 [DEBUG] [Thread-196699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:54:38.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:54:38.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:54:38.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-15T02:54:38.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:54:38.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:54:38.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:54:38.443 [DEBUG] [Thread-196699] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:54:41.937 [DEBUG] [Thread-196701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:54:49.702 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:54:49.703 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:54:56.988 [DEBUG] [Thread-196702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:55:08.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:55:08.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:55:08.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-15T02:55:10.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 54, 23), 0.87, 94.04, 0.0, 34.28, 6.22, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:55:10.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:54:23
2026-02-15T02:55:11.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:55:11.419 [DEBUG] [Thread-196703] [transport.py] [_log()] starting thread (client mode): 0xa2d01cc0
2026-02-15T02:55:11.419 [DEBUG] [Thread-196703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:55:11.439 [DEBUG] [Thread-196703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:55:11.439 [INFO] [Thread-196703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:55:11.442 [DEBUG] [Thread-196703] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:55:11.442 [DEBUG] [Thread-196703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:55:11.442 [DEBUG] [Thread-196703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:55:11.442 [DEBUG] [Thread-196703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:55:11.442 [DEBUG] [Thread-196703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:55:11.442 [DEBUG] [Thread-196703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:55:11.442 [DEBUG] [Thread-196703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:55:11.442 [DEBUG] [Thread-196703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:55:11.442 [DEBUG] [Thread-196703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:55:11.442 [DEBUG] [Thread-196703] [transport.py] [_log()] client lang: <none>
2026-02-15T02:55:11.443 [DEBUG] [Thread-196703] [transport.py] [_log()] server lang: <none>
2026-02-15T02:55:11.443 [DEBUG] [Thread-196703] [transport.py] [_log()] kex follows: False
2026-02-15T02:55:11.443 [DEBUG] [Thread-196703] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:55:11.443 [DEBUG] [Thread-196703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:55:11.443 [DEBUG] [Thread-196703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:55:11.443 [DEBUG] [Thread-196703] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:55:11.443 [DEBUG] [Thread-196703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:55:11.443 [DEBUG] [Thread-196703] [transport.py] [_log()] Compression: none
2026-02-15T02:55:11.443 [DEBUG] [Thread-196703] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:55:11.459 [DEBUG] [Thread-196703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:55:11.459 [DEBUG] [Thread-196703] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:55:11.460 [DEBUG] [Thread-196703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:55:11.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:55:11.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:55:11.504 [DEBUG] [Thread-196703] [transport.py] [_log()] userauth is OK
2026-02-15T02:55:11.505 [DEBUG] [Thread-196703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:55:11.505 [DEBUG] [Thread-196703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:55:11.505 [DEBUG] [Thread-196703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:55:11.505 [DEBUG] [Thread-196703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:55:11.542 [INFO] [Thread-196703] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:55:11.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:55:12.025 [DEBUG] [Thread-196705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:55:14.572 [DEBUG] [Thread-196703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:55:14.573 [DEBUG] [Thread-196703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:55:14.573 [DEBUG] [Thread-196703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:55:14.613 [DEBUG] [Thread-196703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:55:14.613 [DEBUG] [Thread-196703] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:55:14.616 [DEBUG] [Thread-196703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:55:14.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:55:14.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:55:14.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:55:14.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:55:14.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:55:14.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:55:14.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:55:14.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:55:14.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:55:14.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.037954 -999.00   +6.10  31.89     91   +4.90 1 2 2 3 1     0    0 0.94 -9.74 .NESW 31.9 31.9 145.6 41.7 6.8 -23.9 6.6 -23.0 6.3 -22.0 6.7 -23.1
2026-02-15T02:55:14.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:55:14.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:55:14.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.037954
2026-02-15T02:55:14.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:55:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:55:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:55:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:55:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:55:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:54:23', tmtdew=0.87, humidity=94.04, cloud=0.0, wind=34.28, temperature=6.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:54:39.226', atlas_cloud=2, atlas_rain=1, zp_data=[2.5707499999999994, 1.7482500000000005, 2.3512500000000003, 1.971499999999999, nan, nan, nan, nan, nan, 0.601, 1.2087500000000002, 1.9130000000000003, 2.654, 1.9862499999999992, 2.379999999999999, 1.9379999999999997, 0.7232500000000002, 0.3414999999999999, 0.5619999999999994, 0.9942499999999992, 1.3089999999999984, 1.2827499999999983, 1.6182500000000006, 0.9762500000000003, 0.4789999999999992, 0.31049999999999933, 0.47675, 0.43350000000000044, 0.5555000000000003, 0.5130000000000008, 0.6260000000000012, 0.49100000000000055, 0.2727499999999985], zp_timestamp='2026-02-15T00:53:00')
2026-02-15T02:55:14.666 [DEBUG] [Thread-196703] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:55:14.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T02:55:14.762 [DEBUG] [Thread-196707] [transport.py] [_log()] starting thread (client mode): 0xa2d6a170
2026-02-15T02:55:14.763 [DEBUG] [Thread-196707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:55:14.777 [DEBUG] [Thread-196707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:55:14.777 [INFO] [Thread-196707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:55:14.784 [DEBUG] [Thread-196707] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:55:14.785 [DEBUG] [Thread-196707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:55:14.785 [DEBUG] [Thread-196707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:55:14.785 [DEBUG] [Thread-196707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:55:14.785 [DEBUG] [Thread-196707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:55:14.785 [DEBUG] [Thread-196707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:55:14.785 [DEBUG] [Thread-196707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:55:14.786 [DEBUG] [Thread-196707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:55:14.786 [DEBUG] [Thread-196707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:55:14.786 [DEBUG] [Thread-196707] [transport.py] [_log()] client lang: <none>
2026-02-15T02:55:14.786 [DEBUG] [Thread-196707] [transport.py] [_log()] server lang: <none>
2026-02-15T02:55:14.786 [DEBUG] [Thread-196707] [transport.py] [_log()] kex follows: False
2026-02-15T02:55:14.786 [DEBUG] [Thread-196707] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:55:14.786 [DEBUG] [Thread-196707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:55:14.786 [DEBUG] [Thread-196707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:55:14.787 [DEBUG] [Thread-196707] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:55:14.787 [DEBUG] [Thread-196707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:55:14.787 [DEBUG] [Thread-196707] [transport.py] [_log()] Compression: none
2026-02-15T02:55:14.787 [DEBUG] [Thread-196707] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:55:14.845 [DEBUG] [Thread-196707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:55:14.846 [DEBUG] [Thread-196707] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:55:14.846 [DEBUG] [Thread-196707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:55:14.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:55:14.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:55:14.903 [DEBUG] [Thread-196707] [transport.py] [_log()] userauth is OK
2026-02-15T02:55:14.903 [DEBUG] [Thread-196707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:55:14.903 [DEBUG] [Thread-196707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:55:14.903 [DEBUG] [Thread-196707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:55:14.904 [DEBUG] [Thread-196707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:55:14.922 [INFO] [Thread-196707] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:55:14.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T02:55:14.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:55:15.694 [DEBUG] [Thread-196707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:55:15.694 [DEBUG] [Thread-196707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:55:15.741 [DEBUG] [Thread-196707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:55:15.742 [DEBUG] [Thread-196707] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:55:15.751 [DEBUG] [Thread-196707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:55:15.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:55:15.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-15T02:55:15.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-15T02:55:15.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:55:15.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:55:15.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:55:15.788 [DEBUG] [Thread-196707] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:55:18.554 [DEBUG] [Thread-196709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:55:27.067 [DEBUG] [Thread-196710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:55:42.122 [DEBUG] [Thread-196711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:55:45.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:55:45.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:55:45.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-15T02:55:47.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 55, 36), 1.35, 91.08, 0.0, 37.75, 6.6, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:55:47.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:55:36
2026-02-15T02:55:48.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:55:48.191 [DEBUG] [Thread-196712] [transport.py] [_log()] starting thread (client mode): 0xa2de2f50
2026-02-15T02:55:48.191 [DEBUG] [Thread-196712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:55:48.211 [DEBUG] [Thread-196712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:55:48.212 [INFO] [Thread-196712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:55:48.215 [DEBUG] [Thread-196712] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:55:48.215 [DEBUG] [Thread-196712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:55:48.215 [DEBUG] [Thread-196712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:55:48.216 [DEBUG] [Thread-196712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:55:48.216 [DEBUG] [Thread-196712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:55:48.216 [DEBUG] [Thread-196712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:55:48.216 [DEBUG] [Thread-196712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:55:48.216 [DEBUG] [Thread-196712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:55:48.216 [DEBUG] [Thread-196712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:55:48.216 [DEBUG] [Thread-196712] [transport.py] [_log()] client lang: <none>
2026-02-15T02:55:48.216 [DEBUG] [Thread-196712] [transport.py] [_log()] server lang: <none>
2026-02-15T02:55:48.216 [DEBUG] [Thread-196712] [transport.py] [_log()] kex follows: False
2026-02-15T02:55:48.216 [DEBUG] [Thread-196712] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:55:48.216 [DEBUG] [Thread-196712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:55:48.216 [DEBUG] [Thread-196712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:55:48.216 [DEBUG] [Thread-196712] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:55:48.216 [DEBUG] [Thread-196712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:55:48.216 [DEBUG] [Thread-196712] [transport.py] [_log()] Compression: none
2026-02-15T02:55:48.216 [DEBUG] [Thread-196712] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:55:48.233 [DEBUG] [Thread-196712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:55:48.234 [DEBUG] [Thread-196712] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:55:48.234 [DEBUG] [Thread-196712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:55:48.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:55:48.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:55:48.276 [DEBUG] [Thread-196712] [transport.py] [_log()] userauth is OK
2026-02-15T02:55:48.277 [DEBUG] [Thread-196712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:55:48.277 [DEBUG] [Thread-196712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:55:48.277 [DEBUG] [Thread-196712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:55:48.277 [DEBUG] [Thread-196712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:55:48.314 [INFO] [Thread-196712] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:55:48.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:55:48.968 [DEBUG] [Thread-196712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:55:48.968 [DEBUG] [Thread-196712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:55:48.968 [DEBUG] [Thread-196712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:55:49.009 [DEBUG] [Thread-196712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:55:49.010 [DEBUG] [Thread-196712] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:55:49.013 [DEBUG] [Thread-196712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:55:49.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:55:49.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:55:49.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:55:49.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:55:49.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:55:49.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:55:49.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:55:49.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:55:49.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:55:49.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.038301 -999.00   +6.20  30.00     91   +4.90 1 2 2 3 1     0    0 0.95 -8.71 .NESW 30.0 30.0 140.4 36.2 6.7 -24.0 6.5 -23.1 6.3 -22.0 6.7 -23.3
2026-02-15T02:55:49.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:55:49.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:55:49.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.038301
2026-02-15T02:55:49.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:55:49.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:55:49.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:55:49.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:55:49.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:55:49.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:55:36', tmtdew=1.35, humidity=91.08, cloud=0.0, wind=37.75, temperature=6.6, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:55:09.206', atlas_cloud=2, atlas_rain=1, zp_data=[2.5707499999999994, 1.7482500000000005, 2.3512500000000003, 1.971499999999999, nan, nan, nan, nan, nan, 0.601, 1.2087500000000002, 1.9130000000000003, 2.654, 1.9862499999999992, 2.379999999999999, 1.9379999999999997, 0.7232500000000002, 0.3414999999999999, 0.5619999999999994, 0.9942499999999992, 1.3089999999999984, 1.2827499999999983, 1.6182500000000006, 0.9762500000000003, 0.4789999999999992, 0.31049999999999933, 0.47675, 0.43350000000000044, 0.5555000000000003, 0.5130000000000008, 0.6260000000000012, 0.49100000000000055, 0.2727499999999985], zp_timestamp='2026-02-15T00:53:00')
2026-02-15T02:55:49.035 [DEBUG] [Thread-196712] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:55:49.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-15T02:55:49.120 [DEBUG] [Thread-196715] [transport.py] [_log()] starting thread (client mode): 0xa2de34f0
2026-02-15T02:55:49.120 [DEBUG] [Thread-196715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:55:49.134 [DEBUG] [Thread-196715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:55:49.135 [INFO] [Thread-196715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:55:49.142 [DEBUG] [Thread-196715] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:55:49.143 [DEBUG] [Thread-196715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:55:49.143 [DEBUG] [Thread-196715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:55:49.143 [DEBUG] [Thread-196715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:55:49.144 [DEBUG] [Thread-196715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:55:49.144 [DEBUG] [Thread-196715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:55:49.144 [DEBUG] [Thread-196715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:55:49.144 [DEBUG] [Thread-196715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:55:49.144 [DEBUG] [Thread-196715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:55:49.144 [DEBUG] [Thread-196715] [transport.py] [_log()] client lang: <none>
2026-02-15T02:55:49.144 [DEBUG] [Thread-196715] [transport.py] [_log()] server lang: <none>
2026-02-15T02:55:49.144 [DEBUG] [Thread-196715] [transport.py] [_log()] kex follows: False
2026-02-15T02:55:49.144 [DEBUG] [Thread-196715] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:55:49.144 [DEBUG] [Thread-196715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:55:49.144 [DEBUG] [Thread-196715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:55:49.144 [DEBUG] [Thread-196715] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:55:49.144 [DEBUG] [Thread-196715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:55:49.145 [DEBUG] [Thread-196715] [transport.py] [_log()] Compression: none
2026-02-15T02:55:49.145 [DEBUG] [Thread-196715] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:55:49.207 [DEBUG] [Thread-196715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:55:49.208 [DEBUG] [Thread-196715] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:55:49.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:55:49.209 [DEBUG] [Thread-196715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:55:49.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:55:49.265 [DEBUG] [Thread-196715] [transport.py] [_log()] userauth is OK
2026-02-15T02:55:49.265 [DEBUG] [Thread-196715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:55:49.265 [DEBUG] [Thread-196715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:55:49.266 [DEBUG] [Thread-196715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:55:49.266 [DEBUG] [Thread-196715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:55:49.284 [INFO] [Thread-196715] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:55:49.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-15T02:55:49.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:55:49.906 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:55:49.907 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:55:50.027 [DEBUG] [Thread-196715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:55:50.028 [DEBUG] [Thread-196715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:55:50.076 [DEBUG] [Thread-196715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:55:50.076 [DEBUG] [Thread-196715] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:55:50.086 [DEBUG] [Thread-196715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:55:50.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:55:50.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-15T02:55:50.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:55:50.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:55:50.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:55:50.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:55:50.137 [DEBUG] [Thread-196715] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:55:57.158 [DEBUG] [Thread-196717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:56:12.211 [DEBUG] [Thread-196718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:56:18.625 [DEBUG] [Thread-196719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:56:20.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:56:20.131 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:56:20.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T02:56:21.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 56, 11), 0.88, 93.97, 0.0, 35.08, 6.19, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:56:21.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:56:11
2026-02-15T02:56:22.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:56:22.458 [DEBUG] [Thread-196720] [transport.py] [_log()] starting thread (client mode): 0xa5743760
2026-02-15T02:56:22.458 [DEBUG] [Thread-196720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:56:22.478 [DEBUG] [Thread-196720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:56:22.479 [INFO] [Thread-196720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:56:22.482 [DEBUG] [Thread-196720] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:56:22.482 [DEBUG] [Thread-196720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:56:22.482 [DEBUG] [Thread-196720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:56:22.482 [DEBUG] [Thread-196720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:56:22.482 [DEBUG] [Thread-196720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:56:22.482 [DEBUG] [Thread-196720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:56:22.482 [DEBUG] [Thread-196720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:56:22.482 [DEBUG] [Thread-196720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:56:22.482 [DEBUG] [Thread-196720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:56:22.482 [DEBUG] [Thread-196720] [transport.py] [_log()] client lang: <none>
2026-02-15T02:56:22.482 [DEBUG] [Thread-196720] [transport.py] [_log()] server lang: <none>
2026-02-15T02:56:22.482 [DEBUG] [Thread-196720] [transport.py] [_log()] kex follows: False
2026-02-15T02:56:22.483 [DEBUG] [Thread-196720] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:56:22.483 [DEBUG] [Thread-196720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:56:22.483 [DEBUG] [Thread-196720] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:56:22.483 [DEBUG] [Thread-196720] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:56:22.483 [DEBUG] [Thread-196720] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:56:22.483 [DEBUG] [Thread-196720] [transport.py] [_log()] Compression: none
2026-02-15T02:56:22.483 [DEBUG] [Thread-196720] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:56:22.501 [DEBUG] [Thread-196720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:56:22.502 [DEBUG] [Thread-196720] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:56:22.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:56:22.504 [DEBUG] [Thread-196720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:56:22.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:56:22.506 [DEBUG] [Thread-196720] [transport.py] [_log()] userauth is OK
2026-02-15T02:56:22.506 [DEBUG] [Thread-196720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:56:22.506 [DEBUG] [Thread-196720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:56:22.506 [DEBUG] [Thread-196720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:56:22.507 [DEBUG] [Thread-196720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:56:22.532 [INFO] [Thread-196720] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:56:22.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:56:23.153 [DEBUG] [Thread-196720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:56:23.153 [DEBUG] [Thread-196720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:56:23.154 [DEBUG] [Thread-196720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:56:23.195 [DEBUG] [Thread-196720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:56:23.195 [DEBUG] [Thread-196720] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:56:23.198 [DEBUG] [Thread-196720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:56:23.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:56:23.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:56:23.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:56:23.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:56:23.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:56:23.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:56:23.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:56:23.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:56:23.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:56:23.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.038648 -999.00   +6.10  31.21     91   +4.90 1 2 2 3 1     0    0 0.95 -9.01 .NESW 31.2 31.2 134.2 40.2 6.7 -24.0 6.6 -23.2 6.3 -22.1 6.7 -23.2
2026-02-15T02:56:23.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:56:23.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:56:23.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.038648
2026-02-15T02:56:23.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:56:23.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:56:23.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:56:23.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:56:23.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:56:23.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:56:11', tmtdew=0.88, humidity=93.97, cloud=0.0, wind=35.08, temperature=6.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:55:39.187', atlas_cloud=2, atlas_rain=1, zp_data=[2.5707499999999994, 1.7482500000000005, 2.3512500000000003, 1.971499999999999, nan, nan, nan, nan, nan, 0.601, 1.2087500000000002, 1.9130000000000003, 2.654, 1.9862499999999992, 2.379999999999999, 1.9379999999999997, 0.7232500000000002, 0.3414999999999999, 0.5619999999999994, 0.9942499999999992, 1.3089999999999984, 1.2827499999999983, 1.6182500000000006, 0.9762500000000003, 0.4789999999999992, 0.31049999999999933, 0.47675, 0.43350000000000044, 0.5555000000000003, 0.5130000000000008, 0.6260000000000012, 0.49100000000000055, 0.2727499999999985], zp_timestamp='2026-02-15T00:53:00')
2026-02-15T02:56:23.220 [DEBUG] [Thread-196720] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:56:23.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-15T02:56:23.321 [DEBUG] [Thread-196723] [transport.py] [_log()] starting thread (client mode): 0xa2d03e50
2026-02-15T02:56:23.321 [DEBUG] [Thread-196723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:56:23.336 [DEBUG] [Thread-196723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:56:23.336 [INFO] [Thread-196723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:56:23.343 [DEBUG] [Thread-196723] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:56:23.344 [DEBUG] [Thread-196723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:56:23.344 [DEBUG] [Thread-196723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:56:23.344 [DEBUG] [Thread-196723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:56:23.344 [DEBUG] [Thread-196723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:56:23.344 [DEBUG] [Thread-196723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:56:23.344 [DEBUG] [Thread-196723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:56:23.344 [DEBUG] [Thread-196723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:56:23.344 [DEBUG] [Thread-196723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:56:23.344 [DEBUG] [Thread-196723] [transport.py] [_log()] client lang: <none>
2026-02-15T02:56:23.344 [DEBUG] [Thread-196723] [transport.py] [_log()] server lang: <none>
2026-02-15T02:56:23.344 [DEBUG] [Thread-196723] [transport.py] [_log()] kex follows: False
2026-02-15T02:56:23.344 [DEBUG] [Thread-196723] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:56:23.344 [DEBUG] [Thread-196723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:56:23.344 [DEBUG] [Thread-196723] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:56:23.345 [DEBUG] [Thread-196723] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:56:23.345 [DEBUG] [Thread-196723] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:56:23.345 [DEBUG] [Thread-196723] [transport.py] [_log()] Compression: none
2026-02-15T02:56:23.345 [DEBUG] [Thread-196723] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:56:23.405 [DEBUG] [Thread-196723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:56:23.405 [DEBUG] [Thread-196723] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:56:23.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:56:23.407 [DEBUG] [Thread-196723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:56:23.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:56:23.464 [DEBUG] [Thread-196723] [transport.py] [_log()] userauth is OK
2026-02-15T02:56:23.464 [DEBUG] [Thread-196723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:56:23.464 [DEBUG] [Thread-196723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:56:23.465 [DEBUG] [Thread-196723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:56:23.465 [DEBUG] [Thread-196723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:56:23.484 [INFO] [Thread-196723] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:56:23.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-15T02:56:23.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:56:24.314 [DEBUG] [Thread-196723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:56:24.314 [DEBUG] [Thread-196723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:56:24.363 [DEBUG] [Thread-196723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:56:24.363 [DEBUG] [Thread-196723] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:56:24.372 [DEBUG] [Thread-196723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:56:24.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:56:24.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-15T02:56:24.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-15T02:56:24.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:56:24.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:56:24.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:56:24.409 [DEBUG] [Thread-196723] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:56:27.245 [DEBUG] [Thread-196725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:56:42.299 [DEBUG] [Thread-196726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:56:50.110 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:56:50.111 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:56:54.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:56:54.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:56:54.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-15T02:56:56.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 56, 46), 0.89, 93.96, 0.0, 35.36, 6.24, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:56:56.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:56:46
2026-02-15T02:56:56.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:56:56.776 [DEBUG] [Thread-196727] [transport.py] [_log()] starting thread (client mode): 0xa2d1add0
2026-02-15T02:56:56.776 [DEBUG] [Thread-196727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:56:56.797 [DEBUG] [Thread-196727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:56:56.797 [INFO] [Thread-196727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:56:56.801 [DEBUG] [Thread-196727] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:56:56.801 [DEBUG] [Thread-196727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:56:56.801 [DEBUG] [Thread-196727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:56:56.801 [DEBUG] [Thread-196727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:56:56.801 [DEBUG] [Thread-196727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:56:56.801 [DEBUG] [Thread-196727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:56:56.801 [DEBUG] [Thread-196727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:56:56.801 [DEBUG] [Thread-196727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:56:56.801 [DEBUG] [Thread-196727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:56:56.802 [DEBUG] [Thread-196727] [transport.py] [_log()] client lang: <none>
2026-02-15T02:56:56.802 [DEBUG] [Thread-196727] [transport.py] [_log()] server lang: <none>
2026-02-15T02:56:56.802 [DEBUG] [Thread-196727] [transport.py] [_log()] kex follows: False
2026-02-15T02:56:56.802 [DEBUG] [Thread-196727] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:56:56.802 [DEBUG] [Thread-196727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:56:56.802 [DEBUG] [Thread-196727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:56:56.802 [DEBUG] [Thread-196727] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:56:56.802 [DEBUG] [Thread-196727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:56:56.802 [DEBUG] [Thread-196727] [transport.py] [_log()] Compression: none
2026-02-15T02:56:56.802 [DEBUG] [Thread-196727] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:56:56.823 [DEBUG] [Thread-196727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:56:56.823 [DEBUG] [Thread-196727] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:56:56.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:56:56.825 [DEBUG] [Thread-196727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:56:56.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:56:56.827 [DEBUG] [Thread-196727] [transport.py] [_log()] userauth is OK
2026-02-15T02:56:56.828 [DEBUG] [Thread-196727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:56:56.828 [DEBUG] [Thread-196727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:56:56.828 [DEBUG] [Thread-196727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:56:56.828 [DEBUG] [Thread-196727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:56:56.851 [INFO] [Thread-196727] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:56:56.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:56:57.335 [DEBUG] [Thread-196729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:56:57.486 [DEBUG] [Thread-196727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:56:57.486 [DEBUG] [Thread-196727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:56:57.487 [DEBUG] [Thread-196727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:56:57.528 [DEBUG] [Thread-196727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:56:57.528 [DEBUG] [Thread-196727] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:56:57.531 [DEBUG] [Thread-196727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:56:57.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:56:57.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:56:57.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:56:57.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:56:57.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:56:57.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:56:57.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:56:57.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:56:57.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:56:57.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.038995 -999.00   +6.10  26.39     91   +4.90 1 2 1 3 1     0    0 0.95 -8.11 .NESW 26.4 26.4 140.6 33.7 6.7 -24.0 6.6 -23.2 6.3 -22.0 6.7 -23.4
2026-02-15T02:56:57.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:56:57.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:56:57.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.038995
2026-02-15T02:56:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:56:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:56:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:56:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:56:57.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:56:57.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:56:46', tmtdew=0.89, humidity=93.96, cloud=0.0, wind=35.36, temperature=6.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:56:09.168', atlas_cloud=2, atlas_rain=1, zp_data=[2.5707499999999994, 1.7482500000000005, 2.3512500000000003, 1.971499999999999, nan, nan, nan, nan, nan, 0.601, 1.2087500000000002, 1.9130000000000003, 2.654, 1.9862499999999992, 2.379999999999999, 1.9379999999999997, 0.7232500000000002, 0.3414999999999999, 0.5619999999999994, 0.9942499999999992, 1.3089999999999984, 1.2827499999999983, 1.6182500000000006, 0.9762500000000003, 0.4789999999999992, 0.31049999999999933, 0.47675, 0.43350000000000044, 0.5555000000000003, 0.5130000000000008, 0.6260000000000012, 0.49100000000000055, 0.2727499999999985], zp_timestamp='2026-02-15T00:53:00')
2026-02-15T02:56:57.558 [DEBUG] [Thread-196727] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:56:57.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-15T02:56:57.654 [DEBUG] [Thread-196731] [transport.py] [_log()] starting thread (client mode): 0xa2d6dae0
2026-02-15T02:56:57.654 [DEBUG] [Thread-196731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:56:57.669 [DEBUG] [Thread-196731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:56:57.669 [INFO] [Thread-196731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:56:57.677 [DEBUG] [Thread-196731] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:56:57.677 [DEBUG] [Thread-196731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:56:57.677 [DEBUG] [Thread-196731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:56:57.677 [DEBUG] [Thread-196731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:56:57.677 [DEBUG] [Thread-196731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:56:57.677 [DEBUG] [Thread-196731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:56:57.677 [DEBUG] [Thread-196731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:56:57.677 [DEBUG] [Thread-196731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:56:57.678 [DEBUG] [Thread-196731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:56:57.678 [DEBUG] [Thread-196731] [transport.py] [_log()] client lang: <none>
2026-02-15T02:56:57.678 [DEBUG] [Thread-196731] [transport.py] [_log()] server lang: <none>
2026-02-15T02:56:57.678 [DEBUG] [Thread-196731] [transport.py] [_log()] kex follows: False
2026-02-15T02:56:57.678 [DEBUG] [Thread-196731] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:56:57.678 [DEBUG] [Thread-196731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:56:57.678 [DEBUG] [Thread-196731] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:56:57.678 [DEBUG] [Thread-196731] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:56:57.678 [DEBUG] [Thread-196731] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:56:57.678 [DEBUG] [Thread-196731] [transport.py] [_log()] Compression: none
2026-02-15T02:56:57.678 [DEBUG] [Thread-196731] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:56:57.737 [DEBUG] [Thread-196731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:56:57.738 [DEBUG] [Thread-196731] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:56:57.738 [DEBUG] [Thread-196731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:56:57.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:56:57.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:56:57.793 [DEBUG] [Thread-196731] [transport.py] [_log()] userauth is OK
2026-02-15T02:56:57.793 [DEBUG] [Thread-196731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:56:57.793 [DEBUG] [Thread-196731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:56:57.793 [DEBUG] [Thread-196731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:56:57.793 [DEBUG] [Thread-196731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:56:57.812 [INFO] [Thread-196731] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:56:57.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-15T02:56:57.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:56:58.632 [DEBUG] [Thread-196731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:56:58.633 [DEBUG] [Thread-196731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:56:58.680 [DEBUG] [Thread-196731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:56:58.681 [DEBUG] [Thread-196731] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:56:58.690 [DEBUG] [Thread-196731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:56:58.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:56:58.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-15T02:56:58.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-15T02:56:58.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:56:58.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:56:58.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:56:58.728 [DEBUG] [Thread-196731] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:57:12.372 [DEBUG] [Thread-196733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:57:18.699 [DEBUG] [Thread-196734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:57:27.427 [DEBUG] [Thread-196735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:57:28.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:57:28.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:57:28.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-15T02:57:31.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 57, 21), 0.88, 93.97, 0.0, 35.32, 6.22, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:57:31.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:57:21
2026-02-15T02:57:31.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:57:31.701 [DEBUG] [Thread-196736] [transport.py] [_log()] starting thread (client mode): 0xa2d005e0
2026-02-15T02:57:31.701 [DEBUG] [Thread-196736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:57:31.721 [DEBUG] [Thread-196736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:57:31.721 [INFO] [Thread-196736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:57:31.722 [DEBUG] [Thread-196736] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:57:31.722 [DEBUG] [Thread-196736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:57:31.722 [DEBUG] [Thread-196736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:57:31.722 [DEBUG] [Thread-196736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:57:31.722 [DEBUG] [Thread-196736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:57:31.722 [DEBUG] [Thread-196736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:57:31.722 [DEBUG] [Thread-196736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:57:31.722 [DEBUG] [Thread-196736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:57:31.723 [DEBUG] [Thread-196736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:57:31.723 [DEBUG] [Thread-196736] [transport.py] [_log()] client lang: <none>
2026-02-15T02:57:31.723 [DEBUG] [Thread-196736] [transport.py] [_log()] server lang: <none>
2026-02-15T02:57:31.723 [DEBUG] [Thread-196736] [transport.py] [_log()] kex follows: False
2026-02-15T02:57:31.723 [DEBUG] [Thread-196736] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:57:31.723 [DEBUG] [Thread-196736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:57:31.723 [DEBUG] [Thread-196736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:57:31.723 [DEBUG] [Thread-196736] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:57:31.723 [DEBUG] [Thread-196736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:57:31.723 [DEBUG] [Thread-196736] [transport.py] [_log()] Compression: none
2026-02-15T02:57:31.723 [DEBUG] [Thread-196736] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:57:31.731 [DEBUG] [Thread-196736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:57:31.731 [DEBUG] [Thread-196736] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:57:31.732 [DEBUG] [Thread-196736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:57:31.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:57:31.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:57:31.733 [DEBUG] [Thread-196736] [transport.py] [_log()] userauth is OK
2026-02-15T02:57:31.733 [DEBUG] [Thread-196736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:57:31.733 [DEBUG] [Thread-196736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:57:31.733 [DEBUG] [Thread-196736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:57:31.733 [DEBUG] [Thread-196736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:57:31.750 [INFO] [Thread-196736] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:57:31.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:57:32.339 [DEBUG] [Thread-196736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:57:32.339 [DEBUG] [Thread-196736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:57:32.340 [DEBUG] [Thread-196736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:57:32.380 [DEBUG] [Thread-196736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:57:32.381 [DEBUG] [Thread-196736] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:57:32.384 [DEBUG] [Thread-196736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:57:32.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:57:32.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:57:32.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:57:32.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:57:32.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:57:32.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:57:32.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:57:32.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:57:32.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:57:32.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.039343 -999.00   +6.10  26.09     91   +4.90 1 2 1 3 1     0    0 0.96 -8.09 .NESW 26.1 26.1 139.6 36.4 6.7 -24.0 6.6 -23.3 6.3 -22.0 6.7 -23.4
2026-02-15T02:57:32.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:57:32.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:57:32.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.039343
2026-02-15T02:57:32.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:57:32.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:57:32.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:57:32.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:57:32.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:57:32.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:57:21', tmtdew=0.88, humidity=93.97, cloud=0.0, wind=35.32, temperature=6.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:56:39.235', atlas_cloud=2, atlas_rain=1, zp_data=[2.5707499999999994, 1.7482500000000005, 2.3512500000000003, 1.971499999999999, nan, nan, nan, nan, nan, 0.601, 1.2087500000000002, 1.9130000000000003, 2.654, 1.9862499999999992, 2.379999999999999, 1.9379999999999997, 0.7232500000000002, 0.3414999999999999, 0.5619999999999994, 0.9942499999999992, 1.3089999999999984, 1.2827499999999983, 1.6182500000000006, 0.9762500000000003, 0.4789999999999992, 0.31049999999999933, 0.47675, 0.43350000000000044, 0.5555000000000003, 0.5130000000000008, 0.6260000000000012, 0.49100000000000055, 0.2727499999999985], zp_timestamp='2026-02-15T00:53:00')
2026-02-15T02:57:32.411 [DEBUG] [Thread-196736] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:57:32.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-15T02:57:32.506 [DEBUG] [Thread-196739] [transport.py] [_log()] starting thread (client mode): 0xa2d69570
2026-02-15T02:57:32.506 [DEBUG] [Thread-196739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:57:32.521 [DEBUG] [Thread-196739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:57:32.521 [INFO] [Thread-196739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:57:32.529 [DEBUG] [Thread-196739] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:57:32.529 [DEBUG] [Thread-196739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:57:32.529 [DEBUG] [Thread-196739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:57:32.529 [DEBUG] [Thread-196739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:57:32.529 [DEBUG] [Thread-196739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:57:32.530 [DEBUG] [Thread-196739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:57:32.530 [DEBUG] [Thread-196739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:57:32.530 [DEBUG] [Thread-196739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:57:32.530 [DEBUG] [Thread-196739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:57:32.530 [DEBUG] [Thread-196739] [transport.py] [_log()] client lang: <none>
2026-02-15T02:57:32.530 [DEBUG] [Thread-196739] [transport.py] [_log()] server lang: <none>
2026-02-15T02:57:32.530 [DEBUG] [Thread-196739] [transport.py] [_log()] kex follows: False
2026-02-15T02:57:32.530 [DEBUG] [Thread-196739] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:57:32.530 [DEBUG] [Thread-196739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:57:32.531 [DEBUG] [Thread-196739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:57:32.531 [DEBUG] [Thread-196739] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:57:32.531 [DEBUG] [Thread-196739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:57:32.531 [DEBUG] [Thread-196739] [transport.py] [_log()] Compression: none
2026-02-15T02:57:32.531 [DEBUG] [Thread-196739] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:57:32.589 [DEBUG] [Thread-196739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:57:32.590 [DEBUG] [Thread-196739] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:57:32.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:57:32.591 [DEBUG] [Thread-196739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:57:32.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:57:32.645 [DEBUG] [Thread-196739] [transport.py] [_log()] userauth is OK
2026-02-15T02:57:32.645 [DEBUG] [Thread-196739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:57:32.646 [DEBUG] [Thread-196739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:57:32.646 [DEBUG] [Thread-196739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:57:32.646 [DEBUG] [Thread-196739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:57:32.665 [INFO] [Thread-196739] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:57:32.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-15T02:57:32.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:57:33.471 [DEBUG] [Thread-196739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:57:33.471 [DEBUG] [Thread-196739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:57:33.518 [DEBUG] [Thread-196739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:57:33.519 [DEBUG] [Thread-196739] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:57:33.528 [DEBUG] [Thread-196739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:57:33.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:57:33.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T02:57:33.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T02:57:33.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:57:33.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:57:33.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:57:33.565 [DEBUG] [Thread-196739] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:57:42.463 [DEBUG] [Thread-196741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:57:50.314 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:57:50.315 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:57:57.516 [DEBUG] [Thread-196742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:58:03.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:58:03.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:58:03.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-15T02:58:05.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 57, 57), 0.93, 93.97, 0.0, 33.51, 6.24, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:58:05.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:57:57
2026-02-15T02:58:05.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:58:06.011 [DEBUG] [Thread-196743] [transport.py] [_log()] starting thread (client mode): 0xa2d697e0
2026-02-15T02:58:06.012 [DEBUG] [Thread-196743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:58:06.033 [DEBUG] [Thread-196743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:58:06.033 [INFO] [Thread-196743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:58:06.037 [DEBUG] [Thread-196743] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:58:06.037 [DEBUG] [Thread-196743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:58:06.037 [DEBUG] [Thread-196743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:58:06.037 [DEBUG] [Thread-196743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:58:06.037 [DEBUG] [Thread-196743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:58:06.037 [DEBUG] [Thread-196743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:58:06.037 [DEBUG] [Thread-196743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:58:06.037 [DEBUG] [Thread-196743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:58:06.037 [DEBUG] [Thread-196743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:58:06.037 [DEBUG] [Thread-196743] [transport.py] [_log()] client lang: <none>
2026-02-15T02:58:06.037 [DEBUG] [Thread-196743] [transport.py] [_log()] server lang: <none>
2026-02-15T02:58:06.038 [DEBUG] [Thread-196743] [transport.py] [_log()] kex follows: False
2026-02-15T02:58:06.038 [DEBUG] [Thread-196743] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:58:06.038 [DEBUG] [Thread-196743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:58:06.038 [DEBUG] [Thread-196743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:58:06.038 [DEBUG] [Thread-196743] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:58:06.038 [DEBUG] [Thread-196743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:58:06.038 [DEBUG] [Thread-196743] [transport.py] [_log()] Compression: none
2026-02-15T02:58:06.038 [DEBUG] [Thread-196743] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:58:06.057 [DEBUG] [Thread-196743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:58:06.057 [DEBUG] [Thread-196743] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:58:06.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:58:06.059 [DEBUG] [Thread-196743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:58:06.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:58:06.061 [DEBUG] [Thread-196743] [transport.py] [_log()] userauth is OK
2026-02-15T02:58:06.061 [DEBUG] [Thread-196743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:58:06.061 [DEBUG] [Thread-196743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:58:06.061 [DEBUG] [Thread-196743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:58:06.061 [DEBUG] [Thread-196743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:58:06.086 [INFO] [Thread-196743] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:58:06.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:58:06.870 [DEBUG] [Thread-196743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:58:06.871 [DEBUG] [Thread-196743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:58:06.871 [DEBUG] [Thread-196743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:58:06.911 [DEBUG] [Thread-196743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:58:06.911 [DEBUG] [Thread-196743] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:58:06.914 [DEBUG] [Thread-196743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:58:06.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:58:06.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:58:06.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:58:06.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:58:06.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:58:06.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:58:06.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:58:06.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:58:06.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:58:06.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.040037 -999.00   +6.10  27.31     91   +4.90 1 2 1 3 1     0    0 0.90 -8.88 .NESW 27.3 27.3 143.6 34.7 6.8 -24.1 6.5 -23.2 6.3 -22.1 6.7 -23.5
2026-02-15T02:58:06.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:58:06.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:58:06.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.040037
2026-02-15T02:58:06.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:58:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:58:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:58:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:58:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:58:06.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:57:57', tmtdew=0.93, humidity=93.97, cloud=0.0, wind=33.51, temperature=6.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:57:39.197', atlas_cloud=2, atlas_rain=1, zp_data=[2.7167499999999993, 2.1012500000000003, 2.57425, 2.0299999999999994, nan, nan, nan, nan, nan, 0.5620000000000012, 1.23325, 2.0380000000000003, 2.7969999999999997, 2.2632499999999993, 2.440999999999999, nan, 0.6822499999999998, 0.34949999999999903, 0.5544999999999991, 0.9967499999999987, 1.4529999999999985, 1.4537499999999985, 1.7092500000000008, 0.8947500000000002, 0.45699999999999896, 0.30049999999999955, 0.4942500000000001, 0.4110000000000005, 0.5659999999999998, 0.5065000000000008, 0.5885000000000025, 0.46550000000000047, 0.2612500000000004], zp_timestamp='2026-02-15T00:56:00')
2026-02-15T02:58:06.939 [DEBUG] [Thread-196743] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:58:07.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-15T02:58:07.047 [DEBUG] [Thread-196746] [transport.py] [_log()] starting thread (client mode): 0xa2d690f0
2026-02-15T02:58:07.047 [DEBUG] [Thread-196746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:58:07.061 [DEBUG] [Thread-196746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:58:07.061 [INFO] [Thread-196746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:58:07.069 [DEBUG] [Thread-196746] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:58:07.069 [DEBUG] [Thread-196746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:58:07.069 [DEBUG] [Thread-196746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:58:07.069 [DEBUG] [Thread-196746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:58:07.070 [DEBUG] [Thread-196746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:58:07.070 [DEBUG] [Thread-196746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:58:07.070 [DEBUG] [Thread-196746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:58:07.070 [DEBUG] [Thread-196746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:58:07.070 [DEBUG] [Thread-196746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:58:07.070 [DEBUG] [Thread-196746] [transport.py] [_log()] client lang: <none>
2026-02-15T02:58:07.070 [DEBUG] [Thread-196746] [transport.py] [_log()] server lang: <none>
2026-02-15T02:58:07.070 [DEBUG] [Thread-196746] [transport.py] [_log()] kex follows: False
2026-02-15T02:58:07.070 [DEBUG] [Thread-196746] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:58:07.070 [DEBUG] [Thread-196746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:58:07.070 [DEBUG] [Thread-196746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:58:07.070 [DEBUG] [Thread-196746] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:58:07.070 [DEBUG] [Thread-196746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:58:07.070 [DEBUG] [Thread-196746] [transport.py] [_log()] Compression: none
2026-02-15T02:58:07.070 [DEBUG] [Thread-196746] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:58:07.129 [DEBUG] [Thread-196746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:58:07.129 [DEBUG] [Thread-196746] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:58:07.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:58:07.131 [DEBUG] [Thread-196746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:58:07.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:58:07.184 [DEBUG] [Thread-196746] [transport.py] [_log()] userauth is OK
2026-02-15T02:58:07.185 [DEBUG] [Thread-196746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:58:07.185 [DEBUG] [Thread-196746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:58:07.185 [DEBUG] [Thread-196746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:58:07.185 [DEBUG] [Thread-196746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:58:07.204 [INFO] [Thread-196746] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:58:07.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-15T02:58:07.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:58:07.989 [DEBUG] [Thread-196746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:58:07.990 [DEBUG] [Thread-196746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:58:08.037 [DEBUG] [Thread-196746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:58:08.038 [DEBUG] [Thread-196746] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:58:08.047 [DEBUG] [Thread-196746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:58:08.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:58:08.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-15T02:58:08.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-15T02:58:08.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:58:08.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:58:08.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:58:08.084 [DEBUG] [Thread-196746] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:58:12.555 [DEBUG] [Thread-196748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:58:18.761 [DEBUG] [Thread-196749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:58:27.615 [DEBUG] [Thread-196750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:58:38.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:58:38.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:58:38.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-15T02:58:39.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 57, 57), 0.93, 93.97, 0.0, 33.51, 6.24, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:58:39.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:57:57
2026-02-15T02:58:40.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:58:40.459 [DEBUG] [Thread-196751] [transport.py] [_log()] starting thread (client mode): 0xa2de1930
2026-02-15T02:58:40.459 [DEBUG] [Thread-196751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:58:40.480 [DEBUG] [Thread-196751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:58:40.480 [INFO] [Thread-196751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:58:40.483 [DEBUG] [Thread-196751] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:58:40.483 [DEBUG] [Thread-196751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:58:40.483 [DEBUG] [Thread-196751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:58:40.483 [DEBUG] [Thread-196751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:58:40.483 [DEBUG] [Thread-196751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:58:40.483 [DEBUG] [Thread-196751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:58:40.483 [DEBUG] [Thread-196751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:58:40.483 [DEBUG] [Thread-196751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:58:40.484 [DEBUG] [Thread-196751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:58:40.484 [DEBUG] [Thread-196751] [transport.py] [_log()] client lang: <none>
2026-02-15T02:58:40.484 [DEBUG] [Thread-196751] [transport.py] [_log()] server lang: <none>
2026-02-15T02:58:40.484 [DEBUG] [Thread-196751] [transport.py] [_log()] kex follows: False
2026-02-15T02:58:40.484 [DEBUG] [Thread-196751] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:58:40.484 [DEBUG] [Thread-196751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:58:40.484 [DEBUG] [Thread-196751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:58:40.484 [DEBUG] [Thread-196751] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:58:40.484 [DEBUG] [Thread-196751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:58:40.484 [DEBUG] [Thread-196751] [transport.py] [_log()] Compression: none
2026-02-15T02:58:40.484 [DEBUG] [Thread-196751] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:58:40.496 [DEBUG] [Thread-196751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:58:40.497 [DEBUG] [Thread-196751] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:58:40.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:58:40.499 [DEBUG] [Thread-196751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:58:40.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:58:40.541 [DEBUG] [Thread-196751] [transport.py] [_log()] userauth is OK
2026-02-15T02:58:40.542 [DEBUG] [Thread-196751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:58:40.542 [DEBUG] [Thread-196751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:58:40.542 [DEBUG] [Thread-196751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:58:40.542 [DEBUG] [Thread-196751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:58:40.566 [INFO] [Thread-196751] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:58:40.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:58:41.218 [DEBUG] [Thread-196751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:58:41.218 [DEBUG] [Thread-196751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:58:41.219 [DEBUG] [Thread-196751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:58:41.259 [DEBUG] [Thread-196751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:58:41.260 [DEBUG] [Thread-196751] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:58:41.263 [DEBUG] [Thread-196751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:58:41.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:58:41.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:58:41.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:58:41.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:58:41.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:58:41.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:58:41.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:58:41.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:58:41.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:58:41.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.040384 -999.00   +6.10  24.06     91   +4.90 1 2 1 3 1     0    0 0.97 -7.55 .NESW 24.1 24.1 150.4 32.4 6.7 -24.0 6.5 -23.3 6.3 -22.1 6.7 -23.4
2026-02-15T02:58:41.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:58:41.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:58:41.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.040384
2026-02-15T02:58:41.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:58:41.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:58:41.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:58:41.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:58:41.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:58:41.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:57:57', tmtdew=0.93, humidity=93.97, cloud=0.0, wind=33.51, temperature=6.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:58:09.178', atlas_cloud=2, atlas_rain=1, zp_data=[2.7167499999999993, 2.1012500000000003, 2.57425, 2.0299999999999994, nan, nan, nan, nan, nan, 0.5620000000000012, 1.23325, 2.0380000000000003, 2.7969999999999997, 2.2632499999999993, 2.440999999999999, nan, 0.6822499999999998, 0.34949999999999903, 0.5544999999999991, 0.9967499999999987, 1.4529999999999985, 1.4537499999999985, 1.7092500000000008, 0.8947500000000002, 0.45699999999999896, 0.30049999999999955, 0.4942500000000001, 0.4110000000000005, 0.5659999999999998, 0.5065000000000008, 0.5885000000000025, 0.46550000000000047, 0.2612500000000004], zp_timestamp='2026-02-15T00:56:00')
2026-02-15T02:58:41.291 [DEBUG] [Thread-196751] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:58:41.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T02:58:41.396 [DEBUG] [Thread-196754] [transport.py] [_log()] starting thread (client mode): 0xa2de1de0
2026-02-15T02:58:41.397 [DEBUG] [Thread-196754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:58:41.412 [DEBUG] [Thread-196754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:58:41.412 [INFO] [Thread-196754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:58:41.420 [DEBUG] [Thread-196754] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:58:41.420 [DEBUG] [Thread-196754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:58:41.421 [DEBUG] [Thread-196754] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:58:41.421 [DEBUG] [Thread-196754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:58:41.421 [DEBUG] [Thread-196754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:58:41.421 [DEBUG] [Thread-196754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:58:41.421 [DEBUG] [Thread-196754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:58:41.421 [DEBUG] [Thread-196754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:58:41.421 [DEBUG] [Thread-196754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:58:41.421 [DEBUG] [Thread-196754] [transport.py] [_log()] client lang: <none>
2026-02-15T02:58:41.421 [DEBUG] [Thread-196754] [transport.py] [_log()] server lang: <none>
2026-02-15T02:58:41.421 [DEBUG] [Thread-196754] [transport.py] [_log()] kex follows: False
2026-02-15T02:58:41.421 [DEBUG] [Thread-196754] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:58:41.421 [DEBUG] [Thread-196754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:58:41.421 [DEBUG] [Thread-196754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:58:41.421 [DEBUG] [Thread-196754] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:58:41.421 [DEBUG] [Thread-196754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:58:41.421 [DEBUG] [Thread-196754] [transport.py] [_log()] Compression: none
2026-02-15T02:58:41.422 [DEBUG] [Thread-196754] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:58:41.481 [DEBUG] [Thread-196754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:58:41.481 [DEBUG] [Thread-196754] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:58:41.482 [DEBUG] [Thread-196754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:58:41.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:58:41.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:58:41.540 [DEBUG] [Thread-196754] [transport.py] [_log()] userauth is OK
2026-02-15T02:58:41.541 [DEBUG] [Thread-196754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:58:41.541 [DEBUG] [Thread-196754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:58:41.541 [DEBUG] [Thread-196754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:58:41.541 [DEBUG] [Thread-196754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:58:41.566 [INFO] [Thread-196754] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:58:41.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T02:58:41.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:58:42.384 [DEBUG] [Thread-196754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:58:42.384 [DEBUG] [Thread-196754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:58:42.432 [DEBUG] [Thread-196754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:58:42.432 [DEBUG] [Thread-196754] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:58:42.440 [DEBUG] [Thread-196754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:58:42.648 [DEBUG] [Thread-196756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:58:42.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:58:42.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-15T02:58:42.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-15T02:58:42.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:58:42.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:58:42.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:58:42.698 [DEBUG] [Thread-196754] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:58:50.516 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:58:50.517 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:58:57.701 [DEBUG] [Thread-196757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:59:12.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:59:12.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:59:12.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-15T02:59:12.749 [DEBUG] [Thread-196758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:59:14.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 58, 32), 0.94, 93.96, 0.0, 33.63, 6.22, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:59:14.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:58:32
2026-02-15T02:59:15.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:59:15.459 [DEBUG] [Thread-196759] [transport.py] [_log()] starting thread (client mode): 0xa2d1b880
2026-02-15T02:59:15.459 [DEBUG] [Thread-196759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:59:15.479 [DEBUG] [Thread-196759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:59:15.479 [INFO] [Thread-196759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:59:15.482 [DEBUG] [Thread-196759] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:59:15.482 [DEBUG] [Thread-196759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:59:15.482 [DEBUG] [Thread-196759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:59:15.482 [DEBUG] [Thread-196759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:59:15.482 [DEBUG] [Thread-196759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:59:15.482 [DEBUG] [Thread-196759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:59:15.482 [DEBUG] [Thread-196759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:59:15.482 [DEBUG] [Thread-196759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:59:15.482 [DEBUG] [Thread-196759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:59:15.482 [DEBUG] [Thread-196759] [transport.py] [_log()] client lang: <none>
2026-02-15T02:59:15.482 [DEBUG] [Thread-196759] [transport.py] [_log()] server lang: <none>
2026-02-15T02:59:15.482 [DEBUG] [Thread-196759] [transport.py] [_log()] kex follows: False
2026-02-15T02:59:15.482 [DEBUG] [Thread-196759] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:59:15.482 [DEBUG] [Thread-196759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:59:15.482 [DEBUG] [Thread-196759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:59:15.482 [DEBUG] [Thread-196759] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:59:15.482 [DEBUG] [Thread-196759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:59:15.482 [DEBUG] [Thread-196759] [transport.py] [_log()] Compression: none
2026-02-15T02:59:15.482 [DEBUG] [Thread-196759] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:59:15.498 [DEBUG] [Thread-196759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:59:15.499 [DEBUG] [Thread-196759] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:59:15.499 [DEBUG] [Thread-196759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:59:15.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:59:15.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:59:15.540 [DEBUG] [Thread-196759] [transport.py] [_log()] userauth is OK
2026-02-15T02:59:15.540 [DEBUG] [Thread-196759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:59:15.540 [DEBUG] [Thread-196759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:59:15.540 [DEBUG] [Thread-196759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:59:15.540 [DEBUG] [Thread-196759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:59:15.563 [INFO] [Thread-196759] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:59:15.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:59:16.173 [DEBUG] [Thread-196759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:59:16.173 [DEBUG] [Thread-196759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:59:16.173 [DEBUG] [Thread-196759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:59:16.213 [DEBUG] [Thread-196759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:59:16.214 [DEBUG] [Thread-196759] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:59:16.217 [DEBUG] [Thread-196759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:59:16.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:59:16.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:59:16.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:59:16.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:59:16.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:59:16.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:59:16.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:59:16.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:59:16.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:59:16.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.040731 -999.00   +6.10  25.71     91   +4.90 1 2 1 3 1     0    0 1.00 -7.00 .NESW 25.7 25.7 133.0 34.1 6.7 -24.0 6.5 -23.2 6.3 -22.1 6.7 -23.5
2026-02-15T02:59:16.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:59:16.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:59:16.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.040731
2026-02-15T02:59:16.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:59:16.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:59:16.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:59:16.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:59:16.245 [DEBUG] [Thread-196759] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:59:16.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:59:16.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:58:32', tmtdew=0.94, humidity=93.96, cloud=0.0, wind=33.63, temperature=6.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:58:39.158', atlas_cloud=2, atlas_rain=1, zp_data=[2.7167499999999993, 2.1012500000000003, 2.57425, 2.0299999999999994, nan, nan, nan, nan, nan, 0.5620000000000012, 1.23325, 2.0380000000000003, 2.7969999999999997, 2.2632499999999993, 2.440999999999999, nan, 0.6822499999999998, 0.34949999999999903, 0.5544999999999991, 0.9967499999999987, 1.4529999999999985, 1.4537499999999985, 1.7092500000000008, 0.8947500000000002, 0.45699999999999896, 0.30049999999999955, 0.4942500000000001, 0.4110000000000005, 0.5659999999999998, 0.5065000000000008, 0.5885000000000025, 0.46550000000000047, 0.2612500000000004], zp_timestamp='2026-02-15T00:56:00')
2026-02-15T02:59:16.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-15T02:59:16.343 [DEBUG] [Thread-196762] [transport.py] [_log()] starting thread (client mode): 0xa5740850
2026-02-15T02:59:16.343 [DEBUG] [Thread-196762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:59:16.358 [DEBUG] [Thread-196762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:59:16.359 [INFO] [Thread-196762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:59:16.366 [DEBUG] [Thread-196762] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:59:16.367 [DEBUG] [Thread-196762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:59:16.367 [DEBUG] [Thread-196762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:59:16.367 [DEBUG] [Thread-196762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:59:16.368 [DEBUG] [Thread-196762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:59:16.368 [DEBUG] [Thread-196762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:59:16.368 [DEBUG] [Thread-196762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:59:16.368 [DEBUG] [Thread-196762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:59:16.368 [DEBUG] [Thread-196762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:59:16.368 [DEBUG] [Thread-196762] [transport.py] [_log()] client lang: <none>
2026-02-15T02:59:16.368 [DEBUG] [Thread-196762] [transport.py] [_log()] server lang: <none>
2026-02-15T02:59:16.368 [DEBUG] [Thread-196762] [transport.py] [_log()] kex follows: False
2026-02-15T02:59:16.368 [DEBUG] [Thread-196762] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:59:16.368 [DEBUG] [Thread-196762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:59:16.368 [DEBUG] [Thread-196762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:59:16.368 [DEBUG] [Thread-196762] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:59:16.368 [DEBUG] [Thread-196762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:59:16.368 [DEBUG] [Thread-196762] [transport.py] [_log()] Compression: none
2026-02-15T02:59:16.369 [DEBUG] [Thread-196762] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:59:16.424 [DEBUG] [Thread-196762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:59:16.425 [DEBUG] [Thread-196762] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:59:16.426 [DEBUG] [Thread-196762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:59:16.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:59:16.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:59:16.480 [DEBUG] [Thread-196762] [transport.py] [_log()] userauth is OK
2026-02-15T02:59:16.480 [DEBUG] [Thread-196762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:59:16.480 [DEBUG] [Thread-196762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:59:16.481 [DEBUG] [Thread-196762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:59:16.481 [DEBUG] [Thread-196762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:59:16.499 [INFO] [Thread-196762] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:59:16.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-15T02:59:16.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:59:17.359 [DEBUG] [Thread-196762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:59:17.359 [DEBUG] [Thread-196762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:59:17.406 [DEBUG] [Thread-196762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:59:17.406 [DEBUG] [Thread-196762] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:59:17.415 [DEBUG] [Thread-196762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:59:17.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:59:17.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-15T02:59:17.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-15T02:59:17.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:59:17.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:59:17.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:59:17.450 [DEBUG] [Thread-196762] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:59:18.817 [DEBUG] [Thread-196764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:59:27.788 [DEBUG] [Thread-196765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:59:42.850 [DEBUG] [Thread-196766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:59:47.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T02:59:47.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T02:59:47.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-15T02:59:49.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 59, 7), 0.94, 93.92, 0.0, 32.27, 6.22, 2, 2, 0, 2, 0, 0),)
2026-02-15T02:59:49.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:59:07
2026-02-15T02:59:50.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T02:59:50.356 [DEBUG] [Thread-196767] [transport.py] [_log()] starting thread (client mode): 0xa2d79210
2026-02-15T02:59:50.356 [DEBUG] [Thread-196767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:59:50.371 [DEBUG] [Thread-196767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T02:59:50.372 [INFO] [Thread-196767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T02:59:50.383 [DEBUG] [Thread-196767] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:59:50.384 [DEBUG] [Thread-196767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T02:59:50.384 [DEBUG] [Thread-196767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:59:50.384 [DEBUG] [Thread-196767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:59:50.384 [DEBUG] [Thread-196767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:59:50.384 [DEBUG] [Thread-196767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:59:50.384 [DEBUG] [Thread-196767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:59:50.384 [DEBUG] [Thread-196767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:59:50.384 [DEBUG] [Thread-196767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:59:50.384 [DEBUG] [Thread-196767] [transport.py] [_log()] client lang: <none>
2026-02-15T02:59:50.384 [DEBUG] [Thread-196767] [transport.py] [_log()] server lang: <none>
2026-02-15T02:59:50.384 [DEBUG] [Thread-196767] [transport.py] [_log()] kex follows: False
2026-02-15T02:59:50.385 [DEBUG] [Thread-196767] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:59:50.385 [DEBUG] [Thread-196767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:59:50.385 [DEBUG] [Thread-196767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:59:50.385 [DEBUG] [Thread-196767] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:59:50.385 [DEBUG] [Thread-196767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:59:50.385 [DEBUG] [Thread-196767] [transport.py] [_log()] Compression: none
2026-02-15T02:59:50.385 [DEBUG] [Thread-196767] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:59:50.403 [DEBUG] [Thread-196767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:59:50.403 [DEBUG] [Thread-196767] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:59:50.404 [DEBUG] [Thread-196767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T02:59:50.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T02:59:50.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:59:50.405 [DEBUG] [Thread-196767] [transport.py] [_log()] userauth is OK
2026-02-15T02:59:50.406 [DEBUG] [Thread-196767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:59:50.406 [DEBUG] [Thread-196767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:59:50.406 [DEBUG] [Thread-196767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T02:59:50.406 [DEBUG] [Thread-196767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:59:50.423 [INFO] [Thread-196767] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:59:50.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:59:50.720 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:59:50.721 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T02:59:51.136 [DEBUG] [Thread-196767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:59:51.136 [DEBUG] [Thread-196767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:59:51.137 [DEBUG] [Thread-196767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T02:59:51.178 [DEBUG] [Thread-196767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:59:51.178 [DEBUG] [Thread-196767] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:59:51.180 [DEBUG] [Thread-196767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:59:51.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:59:51.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T02:59:51.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T02:59:51.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T02:59:51.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:59:51.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T02:59:51.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:59:51.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:59:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T02:59:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.041079 -999.00   +6.10  24.74     92   +4.90 1 2 1 3 1     0    0 1.00 -6.44 .NESW 24.7 24.7 140.8 41.7 6.7 -23.9 6.5 -23.0 6.3 -22.0 6.7 -23.2
2026-02-15T02:59:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T02:59:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T02:59:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.041079
2026-02-15T02:59:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T02:59:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T02:59:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T02:59:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T02:59:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T02:59:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:59:07', tmtdew=0.94, humidity=93.92, cloud=0.0, wind=32.27, temperature=6.22, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:59:09.226', atlas_cloud=2, atlas_rain=1, zp_data=[2.7167499999999993, 2.1012500000000003, 2.57425, 2.0299999999999994, nan, nan, nan, nan, nan, 0.5620000000000012, 1.23325, 2.0380000000000003, 2.7969999999999997, 2.2632499999999993, 2.440999999999999, nan, 0.6822499999999998, 0.34949999999999903, 0.5544999999999991, 0.9967499999999987, 1.4529999999999985, 1.4537499999999985, 1.7092500000000008, 0.8947500000000002, 0.45699999999999896, 0.30049999999999955, 0.4942500000000001, 0.4110000000000005, 0.5659999999999998, 0.5065000000000008, 0.5885000000000025, 0.46550000000000047, 0.2612500000000004], zp_timestamp='2026-02-15T00:56:00')
2026-02-15T02:59:51.193 [DEBUG] [Thread-196767] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:59:51.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-15T02:59:51.278 [DEBUG] [Thread-196770] [transport.py] [_log()] starting thread (client mode): 0xa2d6eb00
2026-02-15T02:59:51.278 [DEBUG] [Thread-196770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T02:59:51.294 [DEBUG] [Thread-196770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T02:59:51.295 [INFO] [Thread-196770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T02:59:51.302 [DEBUG] [Thread-196770] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T02:59:51.303 [DEBUG] [Thread-196770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T02:59:51.303 [DEBUG] [Thread-196770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T02:59:51.303 [DEBUG] [Thread-196770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:59:51.303 [DEBUG] [Thread-196770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T02:59:51.303 [DEBUG] [Thread-196770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:59:51.303 [DEBUG] [Thread-196770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T02:59:51.304 [DEBUG] [Thread-196770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T02:59:51.304 [DEBUG] [Thread-196770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T02:59:51.304 [DEBUG] [Thread-196770] [transport.py] [_log()] client lang: <none>
2026-02-15T02:59:51.304 [DEBUG] [Thread-196770] [transport.py] [_log()] server lang: <none>
2026-02-15T02:59:51.304 [DEBUG] [Thread-196770] [transport.py] [_log()] kex follows: False
2026-02-15T02:59:51.304 [DEBUG] [Thread-196770] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T02:59:51.304 [DEBUG] [Thread-196770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T02:59:51.304 [DEBUG] [Thread-196770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T02:59:51.305 [DEBUG] [Thread-196770] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T02:59:51.305 [DEBUG] [Thread-196770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T02:59:51.305 [DEBUG] [Thread-196770] [transport.py] [_log()] Compression: none
2026-02-15T02:59:51.305 [DEBUG] [Thread-196770] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T02:59:51.359 [DEBUG] [Thread-196770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T02:59:51.359 [DEBUG] [Thread-196770] [transport.py] [_log()] Switch to new keys ...
2026-02-15T02:59:51.360 [DEBUG] [Thread-196770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T02:59:51.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T02:59:51.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T02:59:51.415 [DEBUG] [Thread-196770] [transport.py] [_log()] userauth is OK
2026-02-15T02:59:51.416 [DEBUG] [Thread-196770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T02:59:51.416 [DEBUG] [Thread-196770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T02:59:51.416 [DEBUG] [Thread-196770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T02:59:51.416 [DEBUG] [Thread-196770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T02:59:51.432 [INFO] [Thread-196770] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T02:59:51.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-15T02:59:51.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T02:59:52.222 [DEBUG] [Thread-196770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T02:59:52.222 [DEBUG] [Thread-196770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T02:59:52.270 [DEBUG] [Thread-196770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T02:59:52.270 [DEBUG] [Thread-196770] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T02:59:52.279 [DEBUG] [Thread-196770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T02:59:52.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T02:59:52.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-15T02:59:52.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-15T02:59:52.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T02:59:52.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T02:59:52.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T02:59:52.315 [DEBUG] [Thread-196770] [transport.py] [_log()] EOF in transport thread
2026-02-15T02:59:57.886 [DEBUG] [Thread-196772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:00:12.938 [DEBUG] [Thread-196773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:00:18.886 [DEBUG] [Thread-196774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:00:22.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:00:22.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:00:22.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-15T03:00:24.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 2, 59, 44), 0.94, 93.91, 0.0, 36.61, 6.2, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:00:24.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 02:59:44
2026-02-15T03:00:25.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:00:25.215 [DEBUG] [Thread-196775] [transport.py] [_log()] starting thread (client mode): 0xa2deac80
2026-02-15T03:00:25.216 [DEBUG] [Thread-196775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:00:25.235 [DEBUG] [Thread-196775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:00:25.236 [INFO] [Thread-196775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:00:25.238 [DEBUG] [Thread-196775] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:00:25.239 [DEBUG] [Thread-196775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:00:25.239 [DEBUG] [Thread-196775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:00:25.239 [DEBUG] [Thread-196775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:00:25.239 [DEBUG] [Thread-196775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:00:25.239 [DEBUG] [Thread-196775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:00:25.239 [DEBUG] [Thread-196775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:00:25.239 [DEBUG] [Thread-196775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:00:25.239 [DEBUG] [Thread-196775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:00:25.239 [DEBUG] [Thread-196775] [transport.py] [_log()] client lang: <none>
2026-02-15T03:00:25.239 [DEBUG] [Thread-196775] [transport.py] [_log()] server lang: <none>
2026-02-15T03:00:25.239 [DEBUG] [Thread-196775] [transport.py] [_log()] kex follows: False
2026-02-15T03:00:25.239 [DEBUG] [Thread-196775] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:00:25.240 [DEBUG] [Thread-196775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:00:25.240 [DEBUG] [Thread-196775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:00:25.240 [DEBUG] [Thread-196775] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:00:25.240 [DEBUG] [Thread-196775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:00:25.240 [DEBUG] [Thread-196775] [transport.py] [_log()] Compression: none
2026-02-15T03:00:25.240 [DEBUG] [Thread-196775] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:00:25.258 [DEBUG] [Thread-196775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:00:25.258 [DEBUG] [Thread-196775] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:00:25.259 [DEBUG] [Thread-196775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:00:25.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:00:25.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:00:25.261 [DEBUG] [Thread-196775] [transport.py] [_log()] userauth is OK
2026-02-15T03:00:25.261 [DEBUG] [Thread-196775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:00:25.262 [DEBUG] [Thread-196775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:00:25.262 [DEBUG] [Thread-196775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:00:25.262 [DEBUG] [Thread-196775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:00:25.286 [INFO] [Thread-196775] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:00:25.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:00:25.935 [DEBUG] [Thread-196775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:00:25.936 [DEBUG] [Thread-196775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:00:25.936 [DEBUG] [Thread-196775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:00:25.976 [DEBUG] [Thread-196775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:00:25.977 [DEBUG] [Thread-196775] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:00:25.980 [DEBUG] [Thread-196775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:00:25.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:00:25.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:00:25.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:00:25.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:00:26.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:00:26.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:00:26.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:00:26.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:00:26.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:00:26.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.041426 -999.00   +6.10  23.16     91   +4.90 1 2 1 3 1     0    0 1.01 -5.97 .NESW 23.2 23.2 140.2 34.3 6.7 -23.9 6.5 -23.1 6.3 -22.0 6.7 -23.4
2026-02-15T03:00:26.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:00:26.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:00:26.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.041426
2026-02-15T03:00:26.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:00:26.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:00:26.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:00:26.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:00:26.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:00:26.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T02:59:44', tmtdew=0.94, humidity=93.91, cloud=0.0, wind=36.61, temperature=6.2, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T00:59:39.206', atlas_cloud=2, atlas_rain=1, zp_data=[2.7167499999999993, 2.1012500000000003, 2.57425, 2.0299999999999994, nan, nan, nan, nan, nan, 0.5620000000000012, 1.23325, 2.0380000000000003, 2.7969999999999997, 2.2632499999999993, 2.440999999999999, nan, 0.6822499999999998, 0.34949999999999903, 0.5544999999999991, 0.9967499999999987, 1.4529999999999985, 1.4537499999999985, 1.7092500000000008, 0.8947500000000002, 0.45699999999999896, 0.30049999999999955, 0.4942500000000001, 0.4110000000000005, 0.5659999999999998, 0.5065000000000008, 0.5885000000000025, 0.46550000000000047, 0.2612500000000004], zp_timestamp='2026-02-15T00:56:00')
2026-02-15T03:00:26.009 [DEBUG] [Thread-196775] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:00:26.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-15T03:00:26.103 [DEBUG] [Thread-196778] [transport.py] [_log()] starting thread (client mode): 0xa2deb9a0
2026-02-15T03:00:26.103 [DEBUG] [Thread-196778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:00:26.118 [DEBUG] [Thread-196778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:00:26.118 [INFO] [Thread-196778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:00:26.126 [DEBUG] [Thread-196778] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:00:26.126 [DEBUG] [Thread-196778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:00:26.126 [DEBUG] [Thread-196778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:00:26.126 [DEBUG] [Thread-196778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:00:26.126 [DEBUG] [Thread-196778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:00:26.126 [DEBUG] [Thread-196778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:00:26.126 [DEBUG] [Thread-196778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:00:26.127 [DEBUG] [Thread-196778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:00:26.127 [DEBUG] [Thread-196778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:00:26.127 [DEBUG] [Thread-196778] [transport.py] [_log()] client lang: <none>
2026-02-15T03:00:26.127 [DEBUG] [Thread-196778] [transport.py] [_log()] server lang: <none>
2026-02-15T03:00:26.127 [DEBUG] [Thread-196778] [transport.py] [_log()] kex follows: False
2026-02-15T03:00:26.127 [DEBUG] [Thread-196778] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:00:26.127 [DEBUG] [Thread-196778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:00:26.127 [DEBUG] [Thread-196778] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:00:26.127 [DEBUG] [Thread-196778] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:00:26.127 [DEBUG] [Thread-196778] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:00:26.127 [DEBUG] [Thread-196778] [transport.py] [_log()] Compression: none
2026-02-15T03:00:26.127 [DEBUG] [Thread-196778] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:00:26.183 [DEBUG] [Thread-196778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:00:26.184 [DEBUG] [Thread-196778] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:00:26.184 [DEBUG] [Thread-196778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:00:26.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:00:26.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:00:26.241 [DEBUG] [Thread-196778] [transport.py] [_log()] userauth is OK
2026-02-15T03:00:26.241 [DEBUG] [Thread-196778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:00:26.241 [DEBUG] [Thread-196778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:00:26.242 [DEBUG] [Thread-196778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:00:26.242 [DEBUG] [Thread-196778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:00:26.261 [INFO] [Thread-196778] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:00:26.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:00:26.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:00:27.064 [DEBUG] [Thread-196778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:00:27.064 [DEBUG] [Thread-196778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:00:27.112 [DEBUG] [Thread-196778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:00:27.113 [DEBUG] [Thread-196778] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:00:27.121 [DEBUG] [Thread-196778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:00:27.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:00:27.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-15T03:00:27.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-15T03:00:27.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:00:27.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:00:27.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:00:27.155 [DEBUG] [Thread-196778] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:00:27.976 [DEBUG] [Thread-196780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:00:43.033 [DEBUG] [Thread-196781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:00:50.927 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:00:50.928 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:00:57.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:00:57.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:00:57.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-15T03:00:58.069 [DEBUG] [Thread-196782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:00:59.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 0, 20), 0.94, 93.92, 0.0, 37.42, 6.19, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:00:59.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:00:20
2026-02-15T03:00:59.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:00:59.779 [DEBUG] [Thread-196783] [transport.py] [_log()] starting thread (client mode): 0xa2d6e1d0
2026-02-15T03:00:59.779 [DEBUG] [Thread-196783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:00:59.799 [DEBUG] [Thread-196783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:00:59.799 [INFO] [Thread-196783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:00:59.802 [DEBUG] [Thread-196783] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:00:59.802 [DEBUG] [Thread-196783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:00:59.803 [DEBUG] [Thread-196783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:00:59.803 [DEBUG] [Thread-196783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:00:59.803 [DEBUG] [Thread-196783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:00:59.803 [DEBUG] [Thread-196783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:00:59.803 [DEBUG] [Thread-196783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:00:59.803 [DEBUG] [Thread-196783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:00:59.803 [DEBUG] [Thread-196783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:00:59.803 [DEBUG] [Thread-196783] [transport.py] [_log()] client lang: <none>
2026-02-15T03:00:59.803 [DEBUG] [Thread-196783] [transport.py] [_log()] server lang: <none>
2026-02-15T03:00:59.803 [DEBUG] [Thread-196783] [transport.py] [_log()] kex follows: False
2026-02-15T03:00:59.803 [DEBUG] [Thread-196783] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:00:59.803 [DEBUG] [Thread-196783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:00:59.803 [DEBUG] [Thread-196783] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:00:59.803 [DEBUG] [Thread-196783] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:00:59.804 [DEBUG] [Thread-196783] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:00:59.804 [DEBUG] [Thread-196783] [transport.py] [_log()] Compression: none
2026-02-15T03:00:59.804 [DEBUG] [Thread-196783] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:00:59.822 [DEBUG] [Thread-196783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:00:59.822 [DEBUG] [Thread-196783] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:00:59.823 [DEBUG] [Thread-196783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:00:59.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:00:59.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:00:59.825 [DEBUG] [Thread-196783] [transport.py] [_log()] userauth is OK
2026-02-15T03:00:59.825 [DEBUG] [Thread-196783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:00:59.825 [DEBUG] [Thread-196783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:00:59.825 [DEBUG] [Thread-196783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:00:59.826 [DEBUG] [Thread-196783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:00:59.844 [INFO] [Thread-196783] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:00:59.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:01:00.491 [DEBUG] [Thread-196783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:01:00.491 [DEBUG] [Thread-196783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:01:00.491 [DEBUG] [Thread-196783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:01:00.531 [DEBUG] [Thread-196783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:01:00.532 [DEBUG] [Thread-196783] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:01:00.535 [DEBUG] [Thread-196783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:01:00.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:01:00.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:01:00.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:01:00.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:01:00.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:01:00.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:01:00.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:01:00.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:01:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:01:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.042120 -999.00   +6.10  31.80     91   +4.90 1 2 2 3 1     0    0 1.04 -4.91 .NESW 31.8 31.8 146.0 36.0 6.7 -23.9 6.5 -23.2 6.3 -22.0 6.6 -23.5
2026-02-15T03:01:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:01:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:01:00.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.042120
2026-02-15T03:01:00.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:01:00.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:01:00.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:01:00.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:01:00.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:01:00.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:00:20', tmtdew=0.94, humidity=93.92, cloud=0.0, wind=37.42, temperature=6.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:00:39.168', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 2.391250000000001, 2.5252500000000007, 2.0294999999999996, nan, nan, nan, nan, nan, 0.5250000000000004, 1.18525, 2.1025, 2.848, nan, 2.641499999999999, nan, 0.5832499999999996, 0.2765000000000004, 0.488999999999999, 0.9192499999999981, 1.5634999999999994, 1.5207499999999996, 1.6137500000000005, 0.7517499999999995, 0.3460000000000001, 0.2535000000000007, 0.3857499999999998, 0.33950000000000014, 0.4790000000000001, 0.3995000000000024, 0.5520000000000014, 0.37650000000000095, 0.13674999999999926], zp_timestamp='2026-02-15T00:59:00')
2026-02-15T03:01:00.562 [DEBUG] [Thread-196783] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:01:00.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:01:00.658 [DEBUG] [Thread-196786] [transport.py] [_log()] starting thread (client mode): 0xa2debcd0
2026-02-15T03:01:00.658 [DEBUG] [Thread-196786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:01:00.672 [DEBUG] [Thread-196786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:01:00.672 [INFO] [Thread-196786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:01:00.681 [DEBUG] [Thread-196786] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:01:00.681 [DEBUG] [Thread-196786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:01:00.681 [DEBUG] [Thread-196786] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:01:00.681 [DEBUG] [Thread-196786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:01:00.681 [DEBUG] [Thread-196786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:01:00.681 [DEBUG] [Thread-196786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:01:00.681 [DEBUG] [Thread-196786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:01:00.681 [DEBUG] [Thread-196786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:01:00.681 [DEBUG] [Thread-196786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:01:00.682 [DEBUG] [Thread-196786] [transport.py] [_log()] client lang: <none>
2026-02-15T03:01:00.682 [DEBUG] [Thread-196786] [transport.py] [_log()] server lang: <none>
2026-02-15T03:01:00.682 [DEBUG] [Thread-196786] [transport.py] [_log()] kex follows: False
2026-02-15T03:01:00.682 [DEBUG] [Thread-196786] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:01:00.682 [DEBUG] [Thread-196786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:01:00.682 [DEBUG] [Thread-196786] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:01:00.682 [DEBUG] [Thread-196786] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:01:00.682 [DEBUG] [Thread-196786] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:01:00.682 [DEBUG] [Thread-196786] [transport.py] [_log()] Compression: none
2026-02-15T03:01:00.682 [DEBUG] [Thread-196786] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:01:00.739 [DEBUG] [Thread-196786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:01:00.740 [DEBUG] [Thread-196786] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:01:00.740 [DEBUG] [Thread-196786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:01:00.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:01:00.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:01:00.796 [DEBUG] [Thread-196786] [transport.py] [_log()] userauth is OK
2026-02-15T03:01:00.796 [DEBUG] [Thread-196786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:01:00.797 [DEBUG] [Thread-196786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:01:00.797 [DEBUG] [Thread-196786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:01:00.797 [DEBUG] [Thread-196786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:01:00.815 [INFO] [Thread-196786] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:01:00.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-15T03:01:00.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:01:01.640 [DEBUG] [Thread-196786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:01:01.640 [DEBUG] [Thread-196786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:01:01.688 [DEBUG] [Thread-196786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:01:01.689 [DEBUG] [Thread-196786] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:01:01.698 [DEBUG] [Thread-196786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:01:01.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:01:01.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:01:01.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:01:01.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:01:01.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:01:01.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:01:01.745 [DEBUG] [Thread-196786] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:01:13.103 [DEBUG] [Thread-196788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:01:18.959 [DEBUG] [Thread-196789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:01:28.153 [DEBUG] [Thread-196790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:01:31.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:01:31.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:01:31.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-15T03:01:34.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 0, 56), 0.94, 93.94, 0.0, 35.47, 6.17, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:01:34.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:00:56
2026-02-15T03:01:34.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:01:34.727 [DEBUG] [Thread-196791] [transport.py] [_log()] starting thread (client mode): 0xa2dea7a0
2026-02-15T03:01:34.727 [DEBUG] [Thread-196791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:01:34.747 [DEBUG] [Thread-196791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:01:34.747 [INFO] [Thread-196791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:01:34.750 [DEBUG] [Thread-196791] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:01:34.750 [DEBUG] [Thread-196791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:01:34.750 [DEBUG] [Thread-196791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:01:34.750 [DEBUG] [Thread-196791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:01:34.750 [DEBUG] [Thread-196791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:01:34.750 [DEBUG] [Thread-196791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:01:34.750 [DEBUG] [Thread-196791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:01:34.750 [DEBUG] [Thread-196791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:01:34.751 [DEBUG] [Thread-196791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:01:34.751 [DEBUG] [Thread-196791] [transport.py] [_log()] client lang: <none>
2026-02-15T03:01:34.751 [DEBUG] [Thread-196791] [transport.py] [_log()] server lang: <none>
2026-02-15T03:01:34.751 [DEBUG] [Thread-196791] [transport.py] [_log()] kex follows: False
2026-02-15T03:01:34.751 [DEBUG] [Thread-196791] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:01:34.751 [DEBUG] [Thread-196791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:01:34.751 [DEBUG] [Thread-196791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:01:34.751 [DEBUG] [Thread-196791] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:01:34.751 [DEBUG] [Thread-196791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:01:34.751 [DEBUG] [Thread-196791] [transport.py] [_log()] Compression: none
2026-02-15T03:01:34.751 [DEBUG] [Thread-196791] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:01:34.767 [DEBUG] [Thread-196791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:01:34.767 [DEBUG] [Thread-196791] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:01:34.768 [DEBUG] [Thread-196791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:01:34.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:01:34.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:01:34.770 [DEBUG] [Thread-196791] [transport.py] [_log()] userauth is OK
2026-02-15T03:01:34.770 [DEBUG] [Thread-196791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:01:34.770 [DEBUG] [Thread-196791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:01:34.770 [DEBUG] [Thread-196791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:01:34.770 [DEBUG] [Thread-196791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:01:34.786 [INFO] [Thread-196791] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:01:34.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:01:35.397 [DEBUG] [Thread-196791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:01:35.397 [DEBUG] [Thread-196791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:01:35.398 [DEBUG] [Thread-196791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:01:35.438 [DEBUG] [Thread-196791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:01:35.439 [DEBUG] [Thread-196791] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:01:35.442 [DEBUG] [Thread-196791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:01:35.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:01:35.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:01:35.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:01:35.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:01:35.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:01:35.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:01:35.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:01:35.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:01:35.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:01:35.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.042468 -999.00   +6.10  26.83     91   +4.90 1 2 1 3 1     0    0 1.06 -4.28 .NESW 26.8 26.8 141.6 40.7 6.7 -24.0 6.5 -23.1 6.2 -22.1 6.6 -23.4
2026-02-15T03:01:35.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:01:35.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:01:35.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.042468
2026-02-15T03:01:35.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:01:35.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:01:35.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:01:35.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:01:35.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:01:35.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:00:56', tmtdew=0.94, humidity=93.94, cloud=0.0, wind=35.47, temperature=6.17, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:01:09.235', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 2.391250000000001, 2.5252500000000007, 2.0294999999999996, nan, nan, nan, nan, nan, 0.5250000000000004, 1.18525, 2.1025, 2.848, nan, 2.641499999999999, nan, 0.5832499999999996, 0.2765000000000004, 0.488999999999999, 0.9192499999999981, 1.5634999999999994, 1.5207499999999996, 1.6137500000000005, 0.7517499999999995, 0.3460000000000001, 0.2535000000000007, 0.3857499999999998, 0.33950000000000014, 0.4790000000000001, 0.3995000000000024, 0.5520000000000014, 0.37650000000000095, 0.13674999999999926], zp_timestamp='2026-02-15T00:59:00')
2026-02-15T03:01:35.468 [DEBUG] [Thread-196791] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:01:35.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-15T03:01:35.563 [DEBUG] [Thread-196794] [transport.py] [_log()] starting thread (client mode): 0xa2d782e0
2026-02-15T03:01:35.563 [DEBUG] [Thread-196794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:01:35.579 [DEBUG] [Thread-196794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:01:35.579 [INFO] [Thread-196794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:01:35.586 [DEBUG] [Thread-196794] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:01:35.587 [DEBUG] [Thread-196794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:01:35.587 [DEBUG] [Thread-196794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:01:35.587 [DEBUG] [Thread-196794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:01:35.587 [DEBUG] [Thread-196794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:01:35.587 [DEBUG] [Thread-196794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:01:35.588 [DEBUG] [Thread-196794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:01:35.588 [DEBUG] [Thread-196794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:01:35.588 [DEBUG] [Thread-196794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:01:35.588 [DEBUG] [Thread-196794] [transport.py] [_log()] client lang: <none>
2026-02-15T03:01:35.588 [DEBUG] [Thread-196794] [transport.py] [_log()] server lang: <none>
2026-02-15T03:01:35.588 [DEBUG] [Thread-196794] [transport.py] [_log()] kex follows: False
2026-02-15T03:01:35.588 [DEBUG] [Thread-196794] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:01:35.588 [DEBUG] [Thread-196794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:01:35.588 [DEBUG] [Thread-196794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:01:35.588 [DEBUG] [Thread-196794] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:01:35.588 [DEBUG] [Thread-196794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:01:35.588 [DEBUG] [Thread-196794] [transport.py] [_log()] Compression: none
2026-02-15T03:01:35.588 [DEBUG] [Thread-196794] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:01:35.643 [DEBUG] [Thread-196794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:01:35.644 [DEBUG] [Thread-196794] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:01:35.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:01:35.645 [DEBUG] [Thread-196794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:01:35.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:01:35.700 [DEBUG] [Thread-196794] [transport.py] [_log()] userauth is OK
2026-02-15T03:01:35.700 [DEBUG] [Thread-196794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:01:35.700 [DEBUG] [Thread-196794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:01:35.701 [DEBUG] [Thread-196794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:01:35.701 [DEBUG] [Thread-196794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:01:35.719 [INFO] [Thread-196794] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:01:35.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-15T03:01:35.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:01:36.521 [DEBUG] [Thread-196794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:01:36.521 [DEBUG] [Thread-196794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:01:36.570 [DEBUG] [Thread-196794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:01:36.570 [DEBUG] [Thread-196794] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:01:36.580 [DEBUG] [Thread-196794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:01:36.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:01:36.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-15T03:01:36.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:01:36.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:01:36.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:01:36.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:01:36.617 [DEBUG] [Thread-196794] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:01:43.192 [DEBUG] [Thread-196796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:01:51.131 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:01:51.132 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:01:58.246 [DEBUG] [Thread-196797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:02:06.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:02:06.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:02:06.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-15T03:02:08.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 1, 31), 0.94, 93.91, 0.0, 37.3, 6.19, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:02:08.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:01:31
2026-02-15T03:02:08.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:02:09.018 [DEBUG] [Thread-196798] [transport.py] [_log()] starting thread (client mode): 0xa2d6eb00
2026-02-15T03:02:09.019 [DEBUG] [Thread-196798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:02:09.038 [DEBUG] [Thread-196798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:02:09.039 [INFO] [Thread-196798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:02:09.041 [DEBUG] [Thread-196798] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:02:09.042 [DEBUG] [Thread-196798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:02:09.042 [DEBUG] [Thread-196798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:02:09.042 [DEBUG] [Thread-196798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:02:09.042 [DEBUG] [Thread-196798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:02:09.042 [DEBUG] [Thread-196798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:02:09.042 [DEBUG] [Thread-196798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:02:09.042 [DEBUG] [Thread-196798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:02:09.042 [DEBUG] [Thread-196798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:02:09.042 [DEBUG] [Thread-196798] [transport.py] [_log()] client lang: <none>
2026-02-15T03:02:09.042 [DEBUG] [Thread-196798] [transport.py] [_log()] server lang: <none>
2026-02-15T03:02:09.042 [DEBUG] [Thread-196798] [transport.py] [_log()] kex follows: False
2026-02-15T03:02:09.042 [DEBUG] [Thread-196798] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:02:09.042 [DEBUG] [Thread-196798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:02:09.043 [DEBUG] [Thread-196798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:02:09.043 [DEBUG] [Thread-196798] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:02:09.043 [DEBUG] [Thread-196798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:02:09.043 [DEBUG] [Thread-196798] [transport.py] [_log()] Compression: none
2026-02-15T03:02:09.043 [DEBUG] [Thread-196798] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:02:09.061 [DEBUG] [Thread-196798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:02:09.062 [DEBUG] [Thread-196798] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:02:09.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:02:09.064 [DEBUG] [Thread-196798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:02:09.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:02:09.066 [DEBUG] [Thread-196798] [transport.py] [_log()] userauth is OK
2026-02-15T03:02:09.066 [DEBUG] [Thread-196798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:02:09.066 [DEBUG] [Thread-196798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:02:09.066 [DEBUG] [Thread-196798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:02:09.066 [DEBUG] [Thread-196798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:02:09.081 [INFO] [Thread-196798] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:02:09.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:02:09.690 [DEBUG] [Thread-196798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:02:09.690 [DEBUG] [Thread-196798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:02:09.691 [DEBUG] [Thread-196798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:02:09.731 [DEBUG] [Thread-196798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:02:09.732 [DEBUG] [Thread-196798] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:02:09.735 [DEBUG] [Thread-196798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:02:09.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:02:09.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:02:09.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:02:09.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:02:09.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:02:09.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:02:09.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:02:09.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:02:09.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:02:09.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.042815 -999.00   +6.10  28.63     91   +4.90 1 2 1 3 1     0    0 1.10 -3.87 .NESw 28.6 28.6 143.2 36.3 6.7 -24.1 6.5 -23.3 6.3 -22.1 6.6 -23.5
2026-02-15T03:02:09.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:02:09.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:02:09.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.042815
2026-02-15T03:02:09.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:02:09.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:02:09.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:02:09.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:02:09.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:02:09.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:01:31', tmtdew=0.94, humidity=93.91, cloud=0.0, wind=37.3, temperature=6.19, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:01:39.216', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 2.391250000000001, 2.5252500000000007, 2.0294999999999996, nan, nan, nan, nan, nan, 0.5250000000000004, 1.18525, 2.1025, 2.848, nan, 2.641499999999999, nan, 0.5832499999999996, 0.2765000000000004, 0.488999999999999, 0.9192499999999981, 1.5634999999999994, 1.5207499999999996, 1.6137500000000005, 0.7517499999999995, 0.3460000000000001, 0.2535000000000007, 0.3857499999999998, 0.33950000000000014, 0.4790000000000001, 0.3995000000000024, 0.5520000000000014, 0.37650000000000095, 0.13674999999999926], zp_timestamp='2026-02-15T00:59:00')
2026-02-15T03:02:09.762 [DEBUG] [Thread-196798] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:02:09.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-15T03:02:09.859 [DEBUG] [Thread-196801] [transport.py] [_log()] starting thread (client mode): 0xa2d796c0
2026-02-15T03:02:09.859 [DEBUG] [Thread-196801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:02:09.874 [DEBUG] [Thread-196801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:02:09.875 [INFO] [Thread-196801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:02:09.882 [DEBUG] [Thread-196801] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:02:09.883 [DEBUG] [Thread-196801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:02:09.883 [DEBUG] [Thread-196801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:02:09.883 [DEBUG] [Thread-196801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:02:09.883 [DEBUG] [Thread-196801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:02:09.883 [DEBUG] [Thread-196801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:02:09.883 [DEBUG] [Thread-196801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:02:09.883 [DEBUG] [Thread-196801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:02:09.883 [DEBUG] [Thread-196801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:02:09.883 [DEBUG] [Thread-196801] [transport.py] [_log()] client lang: <none>
2026-02-15T03:02:09.883 [DEBUG] [Thread-196801] [transport.py] [_log()] server lang: <none>
2026-02-15T03:02:09.883 [DEBUG] [Thread-196801] [transport.py] [_log()] kex follows: False
2026-02-15T03:02:09.883 [DEBUG] [Thread-196801] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:02:09.883 [DEBUG] [Thread-196801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:02:09.883 [DEBUG] [Thread-196801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:02:09.883 [DEBUG] [Thread-196801] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:02:09.883 [DEBUG] [Thread-196801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:02:09.883 [DEBUG] [Thread-196801] [transport.py] [_log()] Compression: none
2026-02-15T03:02:09.884 [DEBUG] [Thread-196801] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:02:09.939 [DEBUG] [Thread-196801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:02:09.940 [DEBUG] [Thread-196801] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:02:09.940 [DEBUG] [Thread-196801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:02:09.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:02:09.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:02:09.995 [DEBUG] [Thread-196801] [transport.py] [_log()] userauth is OK
2026-02-15T03:02:09.996 [DEBUG] [Thread-196801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:02:09.996 [DEBUG] [Thread-196801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:02:09.996 [DEBUG] [Thread-196801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:02:09.996 [DEBUG] [Thread-196801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:02:10.014 [INFO] [Thread-196801] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:02:10.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-15T03:02:10.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:02:10.802 [DEBUG] [Thread-196801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:02:10.803 [DEBUG] [Thread-196801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:02:10.850 [DEBUG] [Thread-196801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:02:10.851 [DEBUG] [Thread-196801] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:02:10.860 [DEBUG] [Thread-196801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:02:10.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:02:10.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-15T03:02:10.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-15T03:02:10.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:02:10.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:02:10.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:02:10.897 [DEBUG] [Thread-196801] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:02:13.281 [DEBUG] [Thread-196803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:02:19.018 [DEBUG] [Thread-196804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:02:28.336 [DEBUG] [Thread-196805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:02:40.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:02:40.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:02:40.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-15T03:02:42.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 2, 8), 0.94, 93.91, 0.0, 38.04, 6.17, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:02:42.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:02:08
2026-02-15T03:02:43.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:02:43.263 [DEBUG] [Thread-196806] [transport.py] [_log()] starting thread (client mode): 0xa2d1b670
2026-02-15T03:02:43.263 [DEBUG] [Thread-196806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:02:43.283 [DEBUG] [Thread-196806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:02:43.283 [INFO] [Thread-196806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:02:43.286 [DEBUG] [Thread-196806] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:02:43.286 [DEBUG] [Thread-196806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:02:43.286 [DEBUG] [Thread-196806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:02:43.286 [DEBUG] [Thread-196806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:02:43.286 [DEBUG] [Thread-196806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:02:43.286 [DEBUG] [Thread-196806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:02:43.286 [DEBUG] [Thread-196806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:02:43.286 [DEBUG] [Thread-196806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:02:43.287 [DEBUG] [Thread-196806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:02:43.287 [DEBUG] [Thread-196806] [transport.py] [_log()] client lang: <none>
2026-02-15T03:02:43.287 [DEBUG] [Thread-196806] [transport.py] [_log()] server lang: <none>
2026-02-15T03:02:43.287 [DEBUG] [Thread-196806] [transport.py] [_log()] kex follows: False
2026-02-15T03:02:43.287 [DEBUG] [Thread-196806] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:02:43.287 [DEBUG] [Thread-196806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:02:43.287 [DEBUG] [Thread-196806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:02:43.287 [DEBUG] [Thread-196806] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:02:43.287 [DEBUG] [Thread-196806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:02:43.287 [DEBUG] [Thread-196806] [transport.py] [_log()] Compression: none
2026-02-15T03:02:43.287 [DEBUG] [Thread-196806] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:02:43.306 [DEBUG] [Thread-196806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:02:43.307 [DEBUG] [Thread-196806] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:02:43.307 [DEBUG] [Thread-196806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:02:43.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:02:43.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:02:43.309 [DEBUG] [Thread-196806] [transport.py] [_log()] userauth is OK
2026-02-15T03:02:43.309 [DEBUG] [Thread-196806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:02:43.310 [DEBUG] [Thread-196806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:02:43.310 [DEBUG] [Thread-196806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:02:43.310 [DEBUG] [Thread-196806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:02:43.333 [INFO] [Thread-196806] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:02:43.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:02:43.370 [DEBUG] [Thread-196808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:02:43.919 [DEBUG] [Thread-196806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:02:43.920 [DEBUG] [Thread-196806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:02:43.920 [DEBUG] [Thread-196806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:02:43.960 [DEBUG] [Thread-196806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:02:43.960 [DEBUG] [Thread-196806] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:02:43.962 [DEBUG] [Thread-196806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:02:43.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:02:43.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:02:43.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:02:43.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:02:43.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:02:43.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:02:43.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:02:43.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:02:43.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:02:43.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.043162 -999.00   +6.10  28.22     91   +4.90 1 2 1 3 1     0    0 1.07 -3.50 .NESw 28.2 28.2 139.6 36.4 6.6 -24.0 6.5 -23.3 6.3 -22.1 6.6 -23.4
2026-02-15T03:02:43.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:02:43.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:02:43.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.043162
2026-02-15T03:02:43.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:02:43.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:02:43.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:02:43.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:02:43.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:02:43.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:02:08', tmtdew=0.94, humidity=93.91, cloud=0.0, wind=38.04, temperature=6.17, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:02:09.197', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 2.391250000000001, 2.5252500000000007, 2.0294999999999996, nan, nan, nan, nan, nan, 0.5250000000000004, 1.18525, 2.1025, 2.848, nan, 2.641499999999999, nan, 0.5832499999999996, 0.2765000000000004, 0.488999999999999, 0.9192499999999981, 1.5634999999999994, 1.5207499999999996, 1.6137500000000005, 0.7517499999999995, 0.3460000000000001, 0.2535000000000007, 0.3857499999999998, 0.33950000000000014, 0.4790000000000001, 0.3995000000000024, 0.5520000000000014, 0.37650000000000095, 0.13674999999999926], zp_timestamp='2026-02-15T00:59:00')
2026-02-15T03:02:43.986 [DEBUG] [Thread-196806] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:02:44.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-15T03:02:44.076 [DEBUG] [Thread-196810] [transport.py] [_log()] starting thread (client mode): 0xa2d6fd00
2026-02-15T03:02:44.076 [DEBUG] [Thread-196810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:02:44.090 [DEBUG] [Thread-196810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:02:44.091 [INFO] [Thread-196810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:02:44.098 [DEBUG] [Thread-196810] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:02:44.098 [DEBUG] [Thread-196810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:02:44.098 [DEBUG] [Thread-196810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:02:44.099 [DEBUG] [Thread-196810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:02:44.099 [DEBUG] [Thread-196810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:02:44.099 [DEBUG] [Thread-196810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:02:44.099 [DEBUG] [Thread-196810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:02:44.099 [DEBUG] [Thread-196810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:02:44.099 [DEBUG] [Thread-196810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:02:44.099 [DEBUG] [Thread-196810] [transport.py] [_log()] client lang: <none>
2026-02-15T03:02:44.099 [DEBUG] [Thread-196810] [transport.py] [_log()] server lang: <none>
2026-02-15T03:02:44.099 [DEBUG] [Thread-196810] [transport.py] [_log()] kex follows: False
2026-02-15T03:02:44.099 [DEBUG] [Thread-196810] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:02:44.100 [DEBUG] [Thread-196810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:02:44.100 [DEBUG] [Thread-196810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:02:44.100 [DEBUG] [Thread-196810] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:02:44.100 [DEBUG] [Thread-196810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:02:44.100 [DEBUG] [Thread-196810] [transport.py] [_log()] Compression: none
2026-02-15T03:02:44.100 [DEBUG] [Thread-196810] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:02:44.155 [DEBUG] [Thread-196810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:02:44.156 [DEBUG] [Thread-196810] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:02:44.157 [DEBUG] [Thread-196810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:02:44.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:02:44.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:02:44.211 [DEBUG] [Thread-196810] [transport.py] [_log()] userauth is OK
2026-02-15T03:02:44.211 [DEBUG] [Thread-196810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:02:44.211 [DEBUG] [Thread-196810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:02:44.211 [DEBUG] [Thread-196810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:02:44.211 [DEBUG] [Thread-196810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:02:44.232 [INFO] [Thread-196810] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:02:44.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:02:44.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:02:45.026 [DEBUG] [Thread-196810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:02:45.026 [DEBUG] [Thread-196810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:02:45.074 [DEBUG] [Thread-196810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:02:45.074 [DEBUG] [Thread-196810] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:02:45.082 [DEBUG] [Thread-196810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:02:45.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:02:45.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-15T03:02:45.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-15T03:02:45.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:02:45.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:02:45.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:02:45.114 [DEBUG] [Thread-196810] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:02:51.337 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:02:51.339 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:02:58.409 [DEBUG] [Thread-196812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:03:13.465 [DEBUG] [Thread-196813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:03:15.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:03:15.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:03:15.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T03:03:17.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 2, 43), 0.95, 93.89, 0.0, 36.36, 6.12, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:03:17.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:02:43
2026-02-15T03:03:17.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:03:17.639 [DEBUG] [Thread-196814] [transport.py] [_log()] starting thread (client mode): 0xa2d6b430
2026-02-15T03:03:17.640 [DEBUG] [Thread-196814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:03:17.660 [DEBUG] [Thread-196814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:03:17.661 [INFO] [Thread-196814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:03:17.663 [DEBUG] [Thread-196814] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:03:17.664 [DEBUG] [Thread-196814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:03:17.664 [DEBUG] [Thread-196814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:03:17.664 [DEBUG] [Thread-196814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:03:17.664 [DEBUG] [Thread-196814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:03:17.664 [DEBUG] [Thread-196814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:03:17.664 [DEBUG] [Thread-196814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:03:17.664 [DEBUG] [Thread-196814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:03:17.664 [DEBUG] [Thread-196814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:03:17.664 [DEBUG] [Thread-196814] [transport.py] [_log()] client lang: <none>
2026-02-15T03:03:17.664 [DEBUG] [Thread-196814] [transport.py] [_log()] server lang: <none>
2026-02-15T03:03:17.664 [DEBUG] [Thread-196814] [transport.py] [_log()] kex follows: False
2026-02-15T03:03:17.664 [DEBUG] [Thread-196814] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:03:17.664 [DEBUG] [Thread-196814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:03:17.664 [DEBUG] [Thread-196814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:03:17.664 [DEBUG] [Thread-196814] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:03:17.664 [DEBUG] [Thread-196814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:03:17.664 [DEBUG] [Thread-196814] [transport.py] [_log()] Compression: none
2026-02-15T03:03:17.664 [DEBUG] [Thread-196814] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:03:17.682 [DEBUG] [Thread-196814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:03:17.682 [DEBUG] [Thread-196814] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:03:17.683 [DEBUG] [Thread-196814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:03:17.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:03:17.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:03:17.685 [DEBUG] [Thread-196814] [transport.py] [_log()] userauth is OK
2026-02-15T03:03:17.685 [DEBUG] [Thread-196814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:03:17.685 [DEBUG] [Thread-196814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:03:17.686 [DEBUG] [Thread-196814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:03:17.686 [DEBUG] [Thread-196814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:03:17.710 [INFO] [Thread-196814] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:03:17.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:03:18.332 [DEBUG] [Thread-196814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:03:18.332 [DEBUG] [Thread-196814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:03:18.332 [DEBUG] [Thread-196814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:03:18.372 [DEBUG] [Thread-196814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:03:18.373 [DEBUG] [Thread-196814] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:03:18.376 [DEBUG] [Thread-196814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:03:18.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:03:18.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:03:18.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:03:18.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:03:18.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:03:18.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:03:18.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:03:18.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:03:18.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:03:18.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.043509 -999.00   +6.10  24.75     91   +4.80 1 2 1 3 1     0    0 1.08 -2.65 .NESW 24.8 24.8 143.0 37.5 6.7 -24.1 6.5 -23.3 6.2 -22.1 6.6 -23.4
2026-02-15T03:03:18.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:03:18.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:03:18.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.043509
2026-02-15T03:03:18.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:03:18.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:03:18.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:03:18.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:03:18.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:03:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:02:43', tmtdew=0.95, humidity=93.89, cloud=0.0, wind=36.36, temperature=6.12, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:02:39.178', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 2.391250000000001, 2.5252500000000007, 2.0294999999999996, nan, nan, nan, nan, nan, 0.5250000000000004, 1.18525, 2.1025, 2.848, nan, 2.641499999999999, nan, 0.5832499999999996, 0.2765000000000004, 0.488999999999999, 0.9192499999999981, 1.5634999999999994, 1.5207499999999996, 1.6137500000000005, 0.7517499999999995, 0.3460000000000001, 0.2535000000000007, 0.3857499999999998, 0.33950000000000014, 0.4790000000000001, 0.3995000000000024, 0.5520000000000014, 0.37650000000000095, 0.13674999999999926], zp_timestamp='2026-02-15T00:59:00')
2026-02-15T03:03:18.403 [DEBUG] [Thread-196814] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:03:18.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:03:18.496 [DEBUG] [Thread-196817] [transport.py] [_log()] starting thread (client mode): 0xa2d7b550
2026-02-15T03:03:18.497 [DEBUG] [Thread-196817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:03:18.511 [DEBUG] [Thread-196817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:03:18.512 [INFO] [Thread-196817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:03:18.519 [DEBUG] [Thread-196817] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:03:18.519 [DEBUG] [Thread-196817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:03:18.519 [DEBUG] [Thread-196817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:03:18.520 [DEBUG] [Thread-196817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:03:18.520 [DEBUG] [Thread-196817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:03:18.520 [DEBUG] [Thread-196817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:03:18.520 [DEBUG] [Thread-196817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:03:18.520 [DEBUG] [Thread-196817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:03:18.520 [DEBUG] [Thread-196817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:03:18.520 [DEBUG] [Thread-196817] [transport.py] [_log()] client lang: <none>
2026-02-15T03:03:18.520 [DEBUG] [Thread-196817] [transport.py] [_log()] server lang: <none>
2026-02-15T03:03:18.520 [DEBUG] [Thread-196817] [transport.py] [_log()] kex follows: False
2026-02-15T03:03:18.520 [DEBUG] [Thread-196817] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:03:18.521 [DEBUG] [Thread-196817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:03:18.521 [DEBUG] [Thread-196817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:03:18.521 [DEBUG] [Thread-196817] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:03:18.521 [DEBUG] [Thread-196817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:03:18.521 [DEBUG] [Thread-196817] [transport.py] [_log()] Compression: none
2026-02-15T03:03:18.521 [DEBUG] [Thread-196817] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:03:18.580 [DEBUG] [Thread-196817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:03:18.581 [DEBUG] [Thread-196817] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:03:18.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:03:18.582 [DEBUG] [Thread-196817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:03:18.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:03:18.640 [DEBUG] [Thread-196817] [transport.py] [_log()] userauth is OK
2026-02-15T03:03:18.640 [DEBUG] [Thread-196817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:03:18.640 [DEBUG] [Thread-196817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:03:18.640 [DEBUG] [Thread-196817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:03:18.640 [DEBUG] [Thread-196817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:03:18.658 [INFO] [Thread-196817] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:03:18.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-15T03:03:18.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:03:19.091 [DEBUG] [Thread-196819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:03:19.471 [DEBUG] [Thread-196817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:03:19.471 [DEBUG] [Thread-196817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:03:19.519 [DEBUG] [Thread-196817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:03:19.519 [DEBUG] [Thread-196817] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:03:19.527 [DEBUG] [Thread-196817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:03:19.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:03: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-15T03:03: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-15T03:03:19.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:03:19.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:03:19.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:03:19.560 [DEBUG] [Thread-196817] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:03:28.505 [DEBUG] [Thread-196820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:03:43.557 [DEBUG] [Thread-196821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:03:49.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:03:49.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:03:49.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-15T03:03:51.543 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:03:51.544 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:03:51.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 3, 18), 0.94, 93.91, 0.0, 34.39, 6.1, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:03:51.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:03:18
2026-02-15T03:03:52.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:03:52.287 [DEBUG] [Thread-196822] [transport.py] [_log()] starting thread (client mode): 0xa5740d90
2026-02-15T03:03:52.287 [DEBUG] [Thread-196822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:03:52.306 [DEBUG] [Thread-196822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:03:52.306 [INFO] [Thread-196822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:03:52.310 [DEBUG] [Thread-196822] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:03:52.310 [DEBUG] [Thread-196822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:03:52.310 [DEBUG] [Thread-196822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:03:52.310 [DEBUG] [Thread-196822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:03:52.310 [DEBUG] [Thread-196822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:03:52.310 [DEBUG] [Thread-196822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:03:52.310 [DEBUG] [Thread-196822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:03:52.310 [DEBUG] [Thread-196822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:03:52.310 [DEBUG] [Thread-196822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:03:52.310 [DEBUG] [Thread-196822] [transport.py] [_log()] client lang: <none>
2026-02-15T03:03:52.310 [DEBUG] [Thread-196822] [transport.py] [_log()] server lang: <none>
2026-02-15T03:03:52.310 [DEBUG] [Thread-196822] [transport.py] [_log()] kex follows: False
2026-02-15T03:03:52.310 [DEBUG] [Thread-196822] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:03:52.310 [DEBUG] [Thread-196822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:03:52.310 [DEBUG] [Thread-196822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:03:52.310 [DEBUG] [Thread-196822] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:03:52.310 [DEBUG] [Thread-196822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:03:52.310 [DEBUG] [Thread-196822] [transport.py] [_log()] Compression: none
2026-02-15T03:03:52.310 [DEBUG] [Thread-196822] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:03:52.326 [DEBUG] [Thread-196822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:03:52.326 [DEBUG] [Thread-196822] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:03:52.326 [DEBUG] [Thread-196822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:03:52.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:03:52.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:03:52.327 [DEBUG] [Thread-196822] [transport.py] [_log()] userauth is OK
2026-02-15T03:03:52.327 [DEBUG] [Thread-196822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:03:52.327 [DEBUG] [Thread-196822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:03:52.327 [DEBUG] [Thread-196822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:03:52.327 [DEBUG] [Thread-196822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:03:52.337 [INFO] [Thread-196822] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:03:52.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:03:52.980 [DEBUG] [Thread-196822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:03:52.980 [DEBUG] [Thread-196822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:03:52.980 [DEBUG] [Thread-196822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:03:53.022 [DEBUG] [Thread-196822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:03:53.022 [DEBUG] [Thread-196822] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:03:53.025 [DEBUG] [Thread-196822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:03:53.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:03:53.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:03:53.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:03:53.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:03:53.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:03:53.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:03:53.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:03:53.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:03:53.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:03:53.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.044204 -999.00   +6.10  28.32     91   +4.90 1 2 1 3 1     0    0 1.14 -1.07 .NESW 28.3 28.3 141.2 34.6 6.7 -24.0 6.5 -23.2 6.2 -22.2 6.6 -23.4
2026-02-15T03:03:53.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:03:53.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:03:53.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.044204
2026-02-15T03:03:53.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:03:53.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:03:53.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:03:53.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:03:53.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:03:53.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:03:18', tmtdew=0.94, humidity=93.91, cloud=0.0, wind=34.39, temperature=6.1, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:03:39.226', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 2.391250000000001, 2.5252500000000007, 2.0294999999999996, nan, nan, nan, nan, nan, 0.5250000000000004, 1.18525, 2.1025, 2.848, nan, 2.641499999999999, nan, 0.5832499999999996, 0.2765000000000004, 0.488999999999999, 0.9192499999999981, 1.5634999999999994, 1.5207499999999996, 1.6137500000000005, 0.7517499999999995, 0.3460000000000001, 0.2535000000000007, 0.3857499999999998, 0.33950000000000014, 0.4790000000000001, 0.3995000000000024, 0.5520000000000014, 0.37650000000000095, 0.13674999999999926], zp_timestamp='2026-02-15T01:02:00')
2026-02-15T03:03:53.049 [DEBUG] [Thread-196822] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:03:53.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-15T03:03:53.144 [DEBUG] [Thread-196825] [transport.py] [_log()] starting thread (client mode): 0xa2d7bd30
2026-02-15T03:03:53.144 [DEBUG] [Thread-196825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:03:53.159 [DEBUG] [Thread-196825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:03:53.159 [INFO] [Thread-196825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:03:53.166 [DEBUG] [Thread-196825] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:03:53.166 [DEBUG] [Thread-196825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:03:53.166 [DEBUG] [Thread-196825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:03:53.166 [DEBUG] [Thread-196825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:03:53.166 [DEBUG] [Thread-196825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:03:53.166 [DEBUG] [Thread-196825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:03:53.167 [DEBUG] [Thread-196825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:03:53.167 [DEBUG] [Thread-196825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:03:53.167 [DEBUG] [Thread-196825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:03:53.167 [DEBUG] [Thread-196825] [transport.py] [_log()] client lang: <none>
2026-02-15T03:03:53.167 [DEBUG] [Thread-196825] [transport.py] [_log()] server lang: <none>
2026-02-15T03:03:53.167 [DEBUG] [Thread-196825] [transport.py] [_log()] kex follows: False
2026-02-15T03:03:53.167 [DEBUG] [Thread-196825] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:03:53.167 [DEBUG] [Thread-196825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:03:53.167 [DEBUG] [Thread-196825] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:03:53.167 [DEBUG] [Thread-196825] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:03:53.167 [DEBUG] [Thread-196825] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:03:53.167 [DEBUG] [Thread-196825] [transport.py] [_log()] Compression: none
2026-02-15T03:03:53.167 [DEBUG] [Thread-196825] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:03:53.223 [DEBUG] [Thread-196825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:03:53.224 [DEBUG] [Thread-196825] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:03:53.224 [DEBUG] [Thread-196825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:03:53.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:03:53.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:03:53.279 [DEBUG] [Thread-196825] [transport.py] [_log()] userauth is OK
2026-02-15T03:03:53.280 [DEBUG] [Thread-196825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:03:53.280 [DEBUG] [Thread-196825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:03:53.280 [DEBUG] [Thread-196825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:03:53.280 [DEBUG] [Thread-196825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:03:53.299 [INFO] [Thread-196825] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:03:53.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:03:53.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:03:54.094 [DEBUG] [Thread-196825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:03:54.094 [DEBUG] [Thread-196825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:03:54.143 [DEBUG] [Thread-196825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:03:54.143 [DEBUG] [Thread-196825] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:03:54.153 [DEBUG] [Thread-196825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:03:54.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:03:54.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:03:54.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-15T03:03:54.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:03:54.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:03:54.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:03:54.189 [DEBUG] [Thread-196825] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:03:58.593 [DEBUG] [Thread-196827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:04:13.647 [DEBUG] [Thread-196828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:04:19.153 [DEBUG] [Thread-196829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:04:24.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:04:24.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:04:24.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-15T03:04:26.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 3, 54), 0.95, 93.39, 0.0, 34.46, 6.12, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:04:26.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:03:54
2026-02-15T03:04:26.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:04:26.586 [DEBUG] [Thread-196830] [transport.py] [_log()] starting thread (client mode): 0xa2de8070
2026-02-15T03:04:26.586 [DEBUG] [Thread-196830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:04:26.607 [DEBUG] [Thread-196830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:04:26.607 [INFO] [Thread-196830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:04:26.610 [DEBUG] [Thread-196830] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:04:26.610 [DEBUG] [Thread-196830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:04:26.610 [DEBUG] [Thread-196830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:04:26.610 [DEBUG] [Thread-196830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:04:26.610 [DEBUG] [Thread-196830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:04:26.610 [DEBUG] [Thread-196830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:04:26.610 [DEBUG] [Thread-196830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:04:26.610 [DEBUG] [Thread-196830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:04:26.611 [DEBUG] [Thread-196830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:04:26.611 [DEBUG] [Thread-196830] [transport.py] [_log()] client lang: <none>
2026-02-15T03:04:26.611 [DEBUG] [Thread-196830] [transport.py] [_log()] server lang: <none>
2026-02-15T03:04:26.611 [DEBUG] [Thread-196830] [transport.py] [_log()] kex follows: False
2026-02-15T03:04:26.611 [DEBUG] [Thread-196830] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:04:26.611 [DEBUG] [Thread-196830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:04:26.611 [DEBUG] [Thread-196830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:04:26.611 [DEBUG] [Thread-196830] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:04:26.611 [DEBUG] [Thread-196830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:04:26.611 [DEBUG] [Thread-196830] [transport.py] [_log()] Compression: none
2026-02-15T03:04:26.611 [DEBUG] [Thread-196830] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:04:26.627 [DEBUG] [Thread-196830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:04:26.627 [DEBUG] [Thread-196830] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:04:26.627 [DEBUG] [Thread-196830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:04:26.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:04:26.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:04:26.629 [DEBUG] [Thread-196830] [transport.py] [_log()] userauth is OK
2026-02-15T03:04:26.629 [DEBUG] [Thread-196830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:04:26.629 [DEBUG] [Thread-196830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:04:26.629 [DEBUG] [Thread-196830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:04:26.629 [DEBUG] [Thread-196830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:04:26.652 [INFO] [Thread-196830] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:04:26.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:04:27.232 [DEBUG] [Thread-196830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:04:27.233 [DEBUG] [Thread-196830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:04:27.233 [DEBUG] [Thread-196830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:04:27.273 [DEBUG] [Thread-196830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:04:27.274 [DEBUG] [Thread-196830] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:04:27.277 [DEBUG] [Thread-196830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:04:27.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:04:27.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:04:27.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:04:27.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:04:27.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:04:27.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:04:27.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:04:27.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:04:27.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:04:27.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.044551 -999.00   +6.10  27.66     91   +4.80 1 2 1 3 1     0    0 1.15 -0.10 .NESw 27.7 27.7 138.8 35.1 6.7 -24.1 6.5 -23.2 6.2 -22.0 6.6 -23.3
2026-02-15T03:04:27.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:04:27.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:04:27.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.044551
2026-02-15T03:04:27.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:04:27.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:04:27.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:04:27.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:04:27.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:04:27.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:03:54', tmtdew=0.95, humidity=93.39, cloud=0.0, wind=34.46, temperature=6.12, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:04:09.206', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 2.391250000000001, 2.5252500000000007, 2.0294999999999996, nan, nan, nan, nan, nan, 0.5250000000000004, 1.18525, 2.1025, 2.848, nan, 2.641499999999999, nan, 0.5832499999999996, 0.2765000000000004, 0.488999999999999, 0.9192499999999981, 1.5634999999999994, 1.5207499999999996, 1.6137500000000005, 0.7517499999999995, 0.3460000000000001, 0.2535000000000007, 0.3857499999999998, 0.33950000000000014, 0.4790000000000001, 0.3995000000000024, 0.5520000000000014, 0.37650000000000095, 0.13674999999999926], zp_timestamp='2026-02-15T01:02:00')
2026-02-15T03:04:27.304 [DEBUG] [Thread-196830] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:04:27.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-15T03:04:27.400 [DEBUG] [Thread-196833] [transport.py] [_log()] starting thread (client mode): 0xa2d19090
2026-02-15T03:04:27.401 [DEBUG] [Thread-196833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:04:27.415 [DEBUG] [Thread-196833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:04:27.415 [INFO] [Thread-196833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:04:27.423 [DEBUG] [Thread-196833] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:04:27.423 [DEBUG] [Thread-196833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:04:27.423 [DEBUG] [Thread-196833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:04:27.423 [DEBUG] [Thread-196833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:04:27.423 [DEBUG] [Thread-196833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:04:27.423 [DEBUG] [Thread-196833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:04:27.423 [DEBUG] [Thread-196833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:04:27.423 [DEBUG] [Thread-196833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:04:27.423 [DEBUG] [Thread-196833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:04:27.423 [DEBUG] [Thread-196833] [transport.py] [_log()] client lang: <none>
2026-02-15T03:04:27.423 [DEBUG] [Thread-196833] [transport.py] [_log()] server lang: <none>
2026-02-15T03:04:27.423 [DEBUG] [Thread-196833] [transport.py] [_log()] kex follows: False
2026-02-15T03:04:27.424 [DEBUG] [Thread-196833] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:04:27.424 [DEBUG] [Thread-196833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:04:27.424 [DEBUG] [Thread-196833] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:04:27.424 [DEBUG] [Thread-196833] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:04:27.424 [DEBUG] [Thread-196833] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:04:27.424 [DEBUG] [Thread-196833] [transport.py] [_log()] Compression: none
2026-02-15T03:04:27.424 [DEBUG] [Thread-196833] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:04:27.484 [DEBUG] [Thread-196833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:04:27.484 [DEBUG] [Thread-196833] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:04:27.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:04:27.485 [DEBUG] [Thread-196833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:04:27.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:04:27.540 [DEBUG] [Thread-196833] [transport.py] [_log()] userauth is OK
2026-02-15T03:04:27.540 [DEBUG] [Thread-196833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:04:27.540 [DEBUG] [Thread-196833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:04:27.540 [DEBUG] [Thread-196833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:04:27.541 [DEBUG] [Thread-196833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:04:27.560 [INFO] [Thread-196833] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:04:27.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-15T03:04:27.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:04:28.349 [DEBUG] [Thread-196833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:04:28.349 [DEBUG] [Thread-196833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:04:28.397 [DEBUG] [Thread-196833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:04:28.398 [DEBUG] [Thread-196833] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:04:28.407 [DEBUG] [Thread-196833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:04:28.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:04:28.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:04:28.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:04:28.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:04:28.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:04:28.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:04:28.445 [DEBUG] [Thread-196833] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:04:28.682 [DEBUG] [Thread-196835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:04:43.745 [DEBUG] [Thread-196836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:04:51.762 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:04:51.763 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:04:58.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:04:58.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:04:58.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T03:04:58.780 [DEBUG] [Thread-196837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:05:00.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 4, 29), 0.95, 93.34, 0.0, 34.11, 6.07, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:05:00.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:04:29
2026-02-15T03:05:00.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:05:00.838 [DEBUG] [Thread-196838] [transport.py] [_log()] starting thread (client mode): 0xa2d6d990
2026-02-15T03:05:00.838 [DEBUG] [Thread-196838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:05:00.859 [DEBUG] [Thread-196838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:05:00.859 [INFO] [Thread-196838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:05:00.862 [DEBUG] [Thread-196838] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:05:00.862 [DEBUG] [Thread-196838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:05:00.863 [DEBUG] [Thread-196838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:05:00.863 [DEBUG] [Thread-196838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:05:00.863 [DEBUG] [Thread-196838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:05:00.863 [DEBUG] [Thread-196838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:05:00.863 [DEBUG] [Thread-196838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:05:00.863 [DEBUG] [Thread-196838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:05:00.863 [DEBUG] [Thread-196838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:05:00.863 [DEBUG] [Thread-196838] [transport.py] [_log()] client lang: <none>
2026-02-15T03:05:00.863 [DEBUG] [Thread-196838] [transport.py] [_log()] server lang: <none>
2026-02-15T03:05:00.863 [DEBUG] [Thread-196838] [transport.py] [_log()] kex follows: False
2026-02-15T03:05:00.863 [DEBUG] [Thread-196838] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:05:00.863 [DEBUG] [Thread-196838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:05:00.863 [DEBUG] [Thread-196838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:05:00.863 [DEBUG] [Thread-196838] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:05:00.863 [DEBUG] [Thread-196838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:05:00.863 [DEBUG] [Thread-196838] [transport.py] [_log()] Compression: none
2026-02-15T03:05:00.863 [DEBUG] [Thread-196838] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:05:00.880 [DEBUG] [Thread-196838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:05:00.881 [DEBUG] [Thread-196838] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:05:00.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:05:00.882 [DEBUG] [Thread-196838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:05:00.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:05:00.884 [DEBUG] [Thread-196838] [transport.py] [_log()] userauth is OK
2026-02-15T03:05:00.885 [DEBUG] [Thread-196838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:05:00.885 [DEBUG] [Thread-196838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:05:00.885 [DEBUG] [Thread-196838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:05:00.885 [DEBUG] [Thread-196838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:05:00.918 [INFO] [Thread-196838] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:05:00.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:05:01.541 [DEBUG] [Thread-196838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:05:01.541 [DEBUG] [Thread-196838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:05:01.542 [DEBUG] [Thread-196838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:05:01.582 [DEBUG] [Thread-196838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:05:01.582 [DEBUG] [Thread-196838] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:05:01.585 [DEBUG] [Thread-196838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:05:01.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:05:01.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:05:01.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:05:01.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:05:01.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:05:01.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:05:01.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:05:01.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:05:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:05:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.044898 -999.00   +6.10  33.32     91   +4.80 1 2 2 3 1     0    0 1.21 0.22 .NESw 33.3 33.3 143.0 38.0 6.6 -24.0 6.5 -23.2 6.3 -22.2 6.6 -23.4
2026-02-15T03:05:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:05:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:05:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.044898
2026-02-15T03:05:01.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:05:01.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:05:01.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:05:01.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:05:01.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:05:01.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:04:29', tmtdew=0.95, humidity=93.34, cloud=0.0, wind=34.11, temperature=6.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:04:39.187', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 2.391250000000001, 2.5252500000000007, 2.0294999999999996, nan, nan, nan, nan, nan, 0.5250000000000004, 1.18525, 2.1025, 2.848, nan, 2.641499999999999, nan, 0.5832499999999996, 0.2765000000000004, 0.488999999999999, 0.9192499999999981, 1.5634999999999994, 1.5207499999999996, 1.6137500000000005, 0.7517499999999995, 0.3460000000000001, 0.2535000000000007, 0.3857499999999998, 0.33950000000000014, 0.4790000000000001, 0.3995000000000024, 0.5520000000000014, 0.37650000000000095, 0.13674999999999926], zp_timestamp='2026-02-15T01:02:00')
2026-02-15T03:05:01.602 [DEBUG] [Thread-196838] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:05:01.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:05:01.693 [DEBUG] [Thread-196841] [transport.py] [_log()] starting thread (client mode): 0xa2d68a00
2026-02-15T03:05:01.693 [DEBUG] [Thread-196841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:05:01.708 [DEBUG] [Thread-196841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:05:01.708 [INFO] [Thread-196841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:05:01.716 [DEBUG] [Thread-196841] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:05:01.716 [DEBUG] [Thread-196841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:05:01.716 [DEBUG] [Thread-196841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:05:01.716 [DEBUG] [Thread-196841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:05:01.717 [DEBUG] [Thread-196841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:05:01.717 [DEBUG] [Thread-196841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:05:01.717 [DEBUG] [Thread-196841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:05:01.717 [DEBUG] [Thread-196841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:05:01.717 [DEBUG] [Thread-196841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:05:01.717 [DEBUG] [Thread-196841] [transport.py] [_log()] client lang: <none>
2026-02-15T03:05:01.717 [DEBUG] [Thread-196841] [transport.py] [_log()] server lang: <none>
2026-02-15T03:05:01.717 [DEBUG] [Thread-196841] [transport.py] [_log()] kex follows: False
2026-02-15T03:05:01.717 [DEBUG] [Thread-196841] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:05:01.717 [DEBUG] [Thread-196841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:05:01.717 [DEBUG] [Thread-196841] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:05:01.717 [DEBUG] [Thread-196841] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:05:01.717 [DEBUG] [Thread-196841] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:05:01.717 [DEBUG] [Thread-196841] [transport.py] [_log()] Compression: none
2026-02-15T03:05:01.717 [DEBUG] [Thread-196841] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:05:01.776 [DEBUG] [Thread-196841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:05:01.776 [DEBUG] [Thread-196841] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:05:01.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:05:01.777 [DEBUG] [Thread-196841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:05:01.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:05:01.835 [DEBUG] [Thread-196841] [transport.py] [_log()] userauth is OK
2026-02-15T03:05:01.835 [DEBUG] [Thread-196841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:05:01.835 [DEBUG] [Thread-196841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:05:01.836 [DEBUG] [Thread-196841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:05:01.836 [DEBUG] [Thread-196841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:05:01.855 [INFO] [Thread-196841] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:05:01.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-15T03:05:01.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:05:02.674 [DEBUG] [Thread-196841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:05:02.674 [DEBUG] [Thread-196841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:05:02.723 [DEBUG] [Thread-196841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:05:02.723 [DEBUG] [Thread-196841] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:05:02.732 [DEBUG] [Thread-196841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:05:02.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:05:02.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-15T03:05:02.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-15T03:05:02.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:05:02.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:05:02.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:05:02.769 [DEBUG] [Thread-196841] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:05:13.819 [DEBUG] [Thread-196843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:05:19.208 [DEBUG] [Thread-196844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:05:28.881 [DEBUG] [Thread-196845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:05:32.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:05:32.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:05:32.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-15T03:05:34.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 5, 5), 0.94, 93.41, 0.0, 33.89, 6.14, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:05:34.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:05:05
2026-02-15T03:05:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:05:35.284 [DEBUG] [Thread-196846] [transport.py] [_log()] starting thread (client mode): 0xa2de90c0
2026-02-15T03:05:35.284 [DEBUG] [Thread-196846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:05:35.303 [DEBUG] [Thread-196846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:05:35.303 [INFO] [Thread-196846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:05:35.306 [DEBUG] [Thread-196846] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:05:35.306 [DEBUG] [Thread-196846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:05:35.306 [DEBUG] [Thread-196846] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:05:35.307 [DEBUG] [Thread-196846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:05:35.307 [DEBUG] [Thread-196846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:05:35.307 [DEBUG] [Thread-196846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:05:35.307 [DEBUG] [Thread-196846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:05:35.307 [DEBUG] [Thread-196846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:05:35.307 [DEBUG] [Thread-196846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:05:35.307 [DEBUG] [Thread-196846] [transport.py] [_log()] client lang: <none>
2026-02-15T03:05:35.307 [DEBUG] [Thread-196846] [transport.py] [_log()] server lang: <none>
2026-02-15T03:05:35.307 [DEBUG] [Thread-196846] [transport.py] [_log()] kex follows: False
2026-02-15T03:05:35.307 [DEBUG] [Thread-196846] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:05:35.307 [DEBUG] [Thread-196846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:05:35.307 [DEBUG] [Thread-196846] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:05:35.307 [DEBUG] [Thread-196846] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:05:35.308 [DEBUG] [Thread-196846] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:05:35.308 [DEBUG] [Thread-196846] [transport.py] [_log()] Compression: none
2026-02-15T03:05:35.308 [DEBUG] [Thread-196846] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:05:35.326 [DEBUG] [Thread-196846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:05:35.326 [DEBUG] [Thread-196846] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:05:35.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:05:35.327 [DEBUG] [Thread-196846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:05:35.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:05:35.329 [DEBUG] [Thread-196846] [transport.py] [_log()] userauth is OK
2026-02-15T03:05:35.329 [DEBUG] [Thread-196846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:05:35.329 [DEBUG] [Thread-196846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:05:35.329 [DEBUG] [Thread-196846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:05:35.329 [DEBUG] [Thread-196846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:05:35.346 [INFO] [Thread-196846] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:05:35.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:05:35.918 [DEBUG] [Thread-196846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:05:35.918 [DEBUG] [Thread-196846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:05:35.919 [DEBUG] [Thread-196846] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:05:35.959 [DEBUG] [Thread-196846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:05:35.960 [DEBUG] [Thread-196846] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:05:35.963 [DEBUG] [Thread-196846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:05:35.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:05:35.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:05:35.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:05:35.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:05:35.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:05:35.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:05:35.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:05:35.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:05:35.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:05:35.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.045245 -999.00   +6.10  30.21     91   +4.80 1 2 2 3 1     0    0 1.25 1.04 .NESw 30.2 30.2 134.6 40.3 6.6 -24.0 6.4 -23.2 6.2 -22.1 6.6 -23.4
2026-02-15T03:05:35.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:05:35.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:05:35.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.045245
2026-02-15T03:05:35.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:05:35.991 [DEBUG] [Thread-196846] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:05:35.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:05:35.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:05:35.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:05:35.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:05:35.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:05:05', tmtdew=0.94, humidity=93.41, cloud=0.0, wind=33.89, temperature=6.14, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:05:09.168', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 2.391250000000001, 2.5252500000000007, 2.0294999999999996, nan, nan, nan, nan, nan, 0.5250000000000004, 1.18525, 2.1025, 2.848, nan, 2.641499999999999, nan, 0.5832499999999996, 0.2765000000000004, 0.488999999999999, 0.9192499999999981, 1.5634999999999994, 1.5207499999999996, 1.6137500000000005, 0.7517499999999995, 0.3460000000000001, 0.2535000000000007, 0.3857499999999998, 0.33950000000000014, 0.4790000000000001, 0.3995000000000024, 0.5520000000000014, 0.37650000000000095, 0.13674999999999926], zp_timestamp='2026-02-15T01:02:00')
2026-02-15T03:05:36.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-15T03:05:36.107 [DEBUG] [Thread-196849] [transport.py] [_log()] starting thread (client mode): 0xa2d94fd0
2026-02-15T03:05:36.107 [DEBUG] [Thread-196849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:05:36.129 [DEBUG] [Thread-196849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:05:36.129 [INFO] [Thread-196849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:05:36.142 [DEBUG] [Thread-196849] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:05:36.142 [DEBUG] [Thread-196849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:05:36.142 [DEBUG] [Thread-196849] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:05:36.142 [DEBUG] [Thread-196849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:05:36.142 [DEBUG] [Thread-196849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:05:36.143 [DEBUG] [Thread-196849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:05:36.143 [DEBUG] [Thread-196849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:05:36.143 [DEBUG] [Thread-196849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:05:36.143 [DEBUG] [Thread-196849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:05:36.143 [DEBUG] [Thread-196849] [transport.py] [_log()] client lang: <none>
2026-02-15T03:05:36.143 [DEBUG] [Thread-196849] [transport.py] [_log()] server lang: <none>
2026-02-15T03:05:36.143 [DEBUG] [Thread-196849] [transport.py] [_log()] kex follows: False
2026-02-15T03:05:36.143 [DEBUG] [Thread-196849] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:05:36.143 [DEBUG] [Thread-196849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:05:36.143 [DEBUG] [Thread-196849] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:05:36.143 [DEBUG] [Thread-196849] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:05:36.143 [DEBUG] [Thread-196849] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:05:36.143 [DEBUG] [Thread-196849] [transport.py] [_log()] Compression: none
2026-02-15T03:05:36.143 [DEBUG] [Thread-196849] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:05:36.222 [DEBUG] [Thread-196849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:05:36.223 [DEBUG] [Thread-196849] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:05:36.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:05:36.224 [DEBUG] [Thread-196849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:05:36.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:05:36.297 [DEBUG] [Thread-196849] [transport.py] [_log()] userauth is OK
2026-02-15T03:05:36.297 [DEBUG] [Thread-196849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:05:36.297 [DEBUG] [Thread-196849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:05:36.297 [DEBUG] [Thread-196849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:05:36.297 [DEBUG] [Thread-196849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:05:36.321 [INFO] [Thread-196849] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:05:36.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-15T03:05:36.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:05:37.133 [DEBUG] [Thread-196849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:05:37.134 [DEBUG] [Thread-196849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:05:37.186 [DEBUG] [Thread-196849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:05:37.187 [DEBUG] [Thread-196849] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:05:37.196 [DEBUG] [Thread-196849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:05:37.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:05:37.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-15T03:05:37.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:05:37.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:05:37.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:05:37.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:05:37.233 [DEBUG] [Thread-196849] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:05:43.918 [DEBUG] [Thread-196851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:05:51.967 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:05:51.967 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:05:58.974 [DEBUG] [Thread-196852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:06:07.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:06:07.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:06:07.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T03:06:09.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 5, 40), 1.39, 90.81, 0.0, 38.04, 6.41, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:06:09.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:05:40
2026-02-15T03:06:09.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:06:09.633 [DEBUG] [Thread-196853] [transport.py] [_log()] starting thread (client mode): 0xa2d028f0
2026-02-15T03:06:09.633 [DEBUG] [Thread-196853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:06:09.654 [DEBUG] [Thread-196853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:06:09.654 [INFO] [Thread-196853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:06:09.657 [DEBUG] [Thread-196853] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:06:09.657 [DEBUG] [Thread-196853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:06:09.658 [DEBUG] [Thread-196853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:06:09.658 [DEBUG] [Thread-196853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:06:09.658 [DEBUG] [Thread-196853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:06:09.658 [DEBUG] [Thread-196853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:06:09.658 [DEBUG] [Thread-196853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:06:09.658 [DEBUG] [Thread-196853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:06:09.658 [DEBUG] [Thread-196853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:06:09.658 [DEBUG] [Thread-196853] [transport.py] [_log()] client lang: <none>
2026-02-15T03:06:09.658 [DEBUG] [Thread-196853] [transport.py] [_log()] server lang: <none>
2026-02-15T03:06:09.658 [DEBUG] [Thread-196853] [transport.py] [_log()] kex follows: False
2026-02-15T03:06:09.658 [DEBUG] [Thread-196853] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:06:09.658 [DEBUG] [Thread-196853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:06:09.658 [DEBUG] [Thread-196853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:06:09.658 [DEBUG] [Thread-196853] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:06:09.658 [DEBUG] [Thread-196853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:06:09.658 [DEBUG] [Thread-196853] [transport.py] [_log()] Compression: none
2026-02-15T03:06:09.658 [DEBUG] [Thread-196853] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:06:09.672 [DEBUG] [Thread-196853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:06:09.673 [DEBUG] [Thread-196853] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:06:09.673 [DEBUG] [Thread-196853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:06:09.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:06:09.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:06:09.675 [DEBUG] [Thread-196853] [transport.py] [_log()] userauth is OK
2026-02-15T03:06:09.675 [DEBUG] [Thread-196853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:06:09.675 [DEBUG] [Thread-196853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:06:09.676 [DEBUG] [Thread-196853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:06:09.676 [DEBUG] [Thread-196853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:06:09.695 [INFO] [Thread-196853] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:06:09.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:06:10.318 [DEBUG] [Thread-196853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:06:10.319 [DEBUG] [Thread-196853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:06:10.319 [DEBUG] [Thread-196853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:06:10.359 [DEBUG] [Thread-196853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:06:10.360 [DEBUG] [Thread-196853] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:06:10.363 [DEBUG] [Thread-196853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:06:10.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:06:10.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:06:10.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:06:10.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:06:10.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:06:10.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:06:10.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:06:10.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:06:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:06:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.045592 -999.00   +6.10  26.57     91   +4.80 1 2 1 3 1     0    0 1.23 1.67 .NESw 26.6 26.6 140.6 36.2 6.6 -24.1 6.5 -23.3 6.3 -22.1 6.6 -23.4
2026-02-15T03:06:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:06:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:06:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.045592
2026-02-15T03:06:10.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:06:10.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:06:10.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:06:10.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:06:10.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:06:10.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:05:40', tmtdew=1.39, humidity=90.81, cloud=0.0, wind=38.04, temperature=6.41, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:05:39.149', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 2.391250000000001, 2.5252500000000007, 2.0294999999999996, nan, nan, nan, nan, nan, 0.5250000000000004, 1.18525, 2.1025, 2.848, nan, 2.641499999999999, nan, 0.5832499999999996, 0.2765000000000004, 0.488999999999999, 0.9192499999999981, 1.5634999999999994, 1.5207499999999996, 1.6137500000000005, 0.7517499999999995, 0.3460000000000001, 0.2535000000000007, 0.3857499999999998, 0.33950000000000014, 0.4790000000000001, 0.3995000000000024, 0.5520000000000014, 0.37650000000000095, 0.13674999999999926], zp_timestamp='2026-02-15T01:02:00')
2026-02-15T03:06:10.386 [DEBUG] [Thread-196853] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:06:10.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-15T03:06:10.493 [DEBUG] [Thread-196856] [transport.py] [_log()] starting thread (client mode): 0xa2d68700
2026-02-15T03:06:10.493 [DEBUG] [Thread-196856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:06:10.507 [DEBUG] [Thread-196856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:06:10.507 [INFO] [Thread-196856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:06:10.515 [DEBUG] [Thread-196856] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:06:10.515 [DEBUG] [Thread-196856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:06:10.515 [DEBUG] [Thread-196856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:06:10.515 [DEBUG] [Thread-196856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:06:10.515 [DEBUG] [Thread-196856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:06:10.515 [DEBUG] [Thread-196856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:06:10.515 [DEBUG] [Thread-196856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:06:10.516 [DEBUG] [Thread-196856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:06:10.516 [DEBUG] [Thread-196856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:06:10.516 [DEBUG] [Thread-196856] [transport.py] [_log()] client lang: <none>
2026-02-15T03:06:10.516 [DEBUG] [Thread-196856] [transport.py] [_log()] server lang: <none>
2026-02-15T03:06:10.516 [DEBUG] [Thread-196856] [transport.py] [_log()] kex follows: False
2026-02-15T03:06:10.516 [DEBUG] [Thread-196856] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:06:10.516 [DEBUG] [Thread-196856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:06:10.516 [DEBUG] [Thread-196856] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:06:10.516 [DEBUG] [Thread-196856] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:06:10.516 [DEBUG] [Thread-196856] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:06:10.517 [DEBUG] [Thread-196856] [transport.py] [_log()] Compression: none
2026-02-15T03:06:10.517 [DEBUG] [Thread-196856] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:06:10.579 [DEBUG] [Thread-196856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:06:10.580 [DEBUG] [Thread-196856] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:06:10.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:06:10.590 [DEBUG] [Thread-196856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:06:10.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:06:10.639 [DEBUG] [Thread-196856] [transport.py] [_log()] userauth is OK
2026-02-15T03:06:10.639 [DEBUG] [Thread-196856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:06:10.639 [DEBUG] [Thread-196856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:06:10.639 [DEBUG] [Thread-196856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:06:10.639 [DEBUG] [Thread-196856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:06:10.658 [INFO] [Thread-196856] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:06:10.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-15T03:06:10.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:06:11.427 [DEBUG] [Thread-196856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:06:11.428 [DEBUG] [Thread-196856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:06:11.475 [DEBUG] [Thread-196856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:06:11.476 [DEBUG] [Thread-196856] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:06:11.485 [DEBUG] [Thread-196856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:06:11.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:06:11.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-15T03:06:11.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-15T03:06:11.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:06:11.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:06:11.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:06:11.521 [DEBUG] [Thread-196856] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:06:14.013 [DEBUG] [Thread-196858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:06:19.268 [DEBUG] [Thread-196859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:06:29.065 [DEBUG] [Thread-196860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:06:41.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:06:41.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:06:41.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-15T03:06:43.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 6, 16), 0.95, 93.39, 0.0, 33.88, 6.1, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:06:43.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:06:16
2026-02-15T03:06:43.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:06:43.913 [DEBUG] [Thread-196861] [transport.py] [_log()] starting thread (client mode): 0xa2d68040
2026-02-15T03:06:43.913 [DEBUG] [Thread-196861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:06:43.933 [DEBUG] [Thread-196861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:06:43.933 [INFO] [Thread-196861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:06:43.936 [DEBUG] [Thread-196861] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:06:43.937 [DEBUG] [Thread-196861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:06:43.937 [DEBUG] [Thread-196861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:06:43.937 [DEBUG] [Thread-196861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:06:43.937 [DEBUG] [Thread-196861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:06:43.937 [DEBUG] [Thread-196861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:06:43.937 [DEBUG] [Thread-196861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:06:43.937 [DEBUG] [Thread-196861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:06:43.937 [DEBUG] [Thread-196861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:06:43.937 [DEBUG] [Thread-196861] [transport.py] [_log()] client lang: <none>
2026-02-15T03:06:43.937 [DEBUG] [Thread-196861] [transport.py] [_log()] server lang: <none>
2026-02-15T03:06:43.937 [DEBUG] [Thread-196861] [transport.py] [_log()] kex follows: False
2026-02-15T03:06:43.937 [DEBUG] [Thread-196861] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:06:43.937 [DEBUG] [Thread-196861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:06:43.937 [DEBUG] [Thread-196861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:06:43.937 [DEBUG] [Thread-196861] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:06:43.938 [DEBUG] [Thread-196861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:06:43.938 [DEBUG] [Thread-196861] [transport.py] [_log()] Compression: none
2026-02-15T03:06:43.938 [DEBUG] [Thread-196861] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:06:43.956 [DEBUG] [Thread-196861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:06:43.957 [DEBUG] [Thread-196861] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:06:43.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:06:43.959 [DEBUG] [Thread-196861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:06:43.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:06:43.961 [DEBUG] [Thread-196861] [transport.py] [_log()] userauth is OK
2026-02-15T03:06:43.961 [DEBUG] [Thread-196861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:06:43.961 [DEBUG] [Thread-196861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:06:43.962 [DEBUG] [Thread-196861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:06:43.962 [DEBUG] [Thread-196861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:06:43.988 [INFO] [Thread-196861] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:06:43.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:06:44.102 [DEBUG] [Thread-196863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:06:44.617 [DEBUG] [Thread-196861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:06:44.617 [DEBUG] [Thread-196861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:06:44.618 [DEBUG] [Thread-196861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:06:44.658 [DEBUG] [Thread-196861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:06:44.659 [DEBUG] [Thread-196861] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:06:44.662 [DEBUG] [Thread-196861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:06:44.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:06:44.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:06:44.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:06:44.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:06:44.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:06:44.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:06:44.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:06:44.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:06:44.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:06:44.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.045940 -999.00   +6.00  21.49     91   +4.80 1 2 1 3 1     0    0 1.26 2.22 .NESw 21.5 21.5 140.0 34.1 6.6 -24.1 6.4 -23.2 6.2 -22.2 6.6 -23.4
2026-02-15T03:06:44.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:06:44.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:06:44.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.045940
2026-02-15T03:06:44.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:06:44.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:06:44.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:06:44.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:06:44.690 [DEBUG] [Thread-196861] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:06:44.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:06:44.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:06:16', tmtdew=0.95, humidity=93.39, cloud=0.0, wind=33.88, temperature=6.1, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:06:09.216', atlas_cloud=2, atlas_rain=1, zp_data=[2.462249999999999, 2.5402500000000003, 2.53125, 2.453499999999999, nan, nan, nan, nan, nan, 0.4239999999999995, 1.06325, 2.2379999999999995, 2.9535, 2.7112499999999997, 2.781999999999999, 2.3499999999999996, 0.39724999999999966, 0.2554999999999996, 0.4429999999999996, 0.903249999999999, 1.626999999999999, 1.6137499999999987, 1.8232500000000007, 0.5282499999999999, 0.317499999999999, 0.2829999999999995, 0.39525000000000077, 0.2925000000000004, 0.4065000000000003, 0.4955000000000007, 0.5115000000000016, 0.3650000000000011, 0.1947499999999991], zp_timestamp='2026-02-15T01:05:00')
2026-02-15T03:06:44.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-15T03:06:44.794 [DEBUG] [Thread-196865] [transport.py] [_log()] starting thread (client mode): 0xa2d6b610
2026-02-15T03:06:44.794 [DEBUG] [Thread-196865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:06:44.810 [DEBUG] [Thread-196865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:06:44.811 [INFO] [Thread-196865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:06:44.820 [DEBUG] [Thread-196865] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:06:44.820 [DEBUG] [Thread-196865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:06:44.820 [DEBUG] [Thread-196865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:06:44.821 [DEBUG] [Thread-196865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:06:44.821 [DEBUG] [Thread-196865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:06:44.821 [DEBUG] [Thread-196865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:06:44.821 [DEBUG] [Thread-196865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:06:44.821 [DEBUG] [Thread-196865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:06:44.821 [DEBUG] [Thread-196865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:06:44.821 [DEBUG] [Thread-196865] [transport.py] [_log()] client lang: <none>
2026-02-15T03:06:44.821 [DEBUG] [Thread-196865] [transport.py] [_log()] server lang: <none>
2026-02-15T03:06:44.822 [DEBUG] [Thread-196865] [transport.py] [_log()] kex follows: False
2026-02-15T03:06:44.822 [DEBUG] [Thread-196865] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:06:44.822 [DEBUG] [Thread-196865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:06:44.822 [DEBUG] [Thread-196865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:06:44.823 [DEBUG] [Thread-196865] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:06:44.823 [DEBUG] [Thread-196865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:06:44.823 [DEBUG] [Thread-196865] [transport.py] [_log()] Compression: none
2026-02-15T03:06:44.823 [DEBUG] [Thread-196865] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:06:44.878 [DEBUG] [Thread-196865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:06:44.879 [DEBUG] [Thread-196865] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:06:44.879 [DEBUG] [Thread-196865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:06:44.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:06:44.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:06:44.934 [DEBUG] [Thread-196865] [transport.py] [_log()] userauth is OK
2026-02-15T03:06:44.935 [DEBUG] [Thread-196865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:06:44.935 [DEBUG] [Thread-196865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:06:44.935 [DEBUG] [Thread-196865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:06:44.935 [DEBUG] [Thread-196865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:06:44.958 [INFO] [Thread-196865] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:06:44.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:06:44.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:06:45.751 [DEBUG] [Thread-196865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:06:45.752 [DEBUG] [Thread-196865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:06:45.808 [DEBUG] [Thread-196865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:06:45.808 [DEBUG] [Thread-196865] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:06:45.822 [DEBUG] [Thread-196865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:06:45.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:06:45.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-15T03:06:45.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:06:45.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:06:45.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:06:45.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:06:45.869 [DEBUG] [Thread-196865] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:06:52.170 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:06:52.171 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:06:59.135 [DEBUG] [Thread-196867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:07:14.196 [DEBUG] [Thread-196868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:07:15.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:07:15.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:07:15.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-15T03:07:18.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 6, 51), 0.95, 93.39, 0.0, 40.07, 6.09, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:07:18.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:06:51
2026-02-15T03:07:18.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:07:18.645 [DEBUG] [Thread-196869] [transport.py] [_log()] starting thread (client mode): 0xa2de9de0
2026-02-15T03:07:18.645 [DEBUG] [Thread-196869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:07:18.664 [DEBUG] [Thread-196869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:07:18.664 [INFO] [Thread-196869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:07:18.667 [DEBUG] [Thread-196869] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:07:18.667 [DEBUG] [Thread-196869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:07:18.667 [DEBUG] [Thread-196869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:07:18.667 [DEBUG] [Thread-196869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:07:18.667 [DEBUG] [Thread-196869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:07:18.667 [DEBUG] [Thread-196869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:07:18.667 [DEBUG] [Thread-196869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:07:18.667 [DEBUG] [Thread-196869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:07:18.667 [DEBUG] [Thread-196869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:07:18.668 [DEBUG] [Thread-196869] [transport.py] [_log()] client lang: <none>
2026-02-15T03:07:18.668 [DEBUG] [Thread-196869] [transport.py] [_log()] server lang: <none>
2026-02-15T03:07:18.668 [DEBUG] [Thread-196869] [transport.py] [_log()] kex follows: False
2026-02-15T03:07:18.668 [DEBUG] [Thread-196869] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:07:18.668 [DEBUG] [Thread-196869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:07:18.668 [DEBUG] [Thread-196869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:07:18.668 [DEBUG] [Thread-196869] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:07:18.668 [DEBUG] [Thread-196869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:07:18.668 [DEBUG] [Thread-196869] [transport.py] [_log()] Compression: none
2026-02-15T03:07:18.668 [DEBUG] [Thread-196869] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:07:18.685 [DEBUG] [Thread-196869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:07:18.686 [DEBUG] [Thread-196869] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:07:18.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:07:18.687 [DEBUG] [Thread-196869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:07:18.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:07:18.689 [DEBUG] [Thread-196869] [transport.py] [_log()] userauth is OK
2026-02-15T03:07:18.689 [DEBUG] [Thread-196869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:07:18.689 [DEBUG] [Thread-196869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:07:18.689 [DEBUG] [Thread-196869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:07:18.689 [DEBUG] [Thread-196869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:07:18.714 [INFO] [Thread-196869] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:07:18.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:07:19.325 [DEBUG] [Thread-196871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:07:19.339 [DEBUG] [Thread-196869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:07:19.339 [DEBUG] [Thread-196869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:07:19.339 [DEBUG] [Thread-196869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:07:19.380 [DEBUG] [Thread-196869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:07:19.381 [DEBUG] [Thread-196869] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:07:19.384 [DEBUG] [Thread-196869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:07:19.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:07:19.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:07:19.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:07:19.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:07:19.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:07:19.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:07:19.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:07:19.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:07:19.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:07:19.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.046634 -999.00   +6.00  30.55     91   +4.80 1 2 2 3 1     0    0 1.31 3.40 .NESw 30.6 30.6 140.8 35.4 6.6 -24.1 6.4 -23.3 6.2 -22.2 6.6 -23.5
2026-02-15T03:07:19.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:07:19.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:07:19.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.046634
2026-02-15T03:07:19.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:07:19.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:07:19.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:07:19.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:07:19.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:07:19.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:06:51', tmtdew=0.95, humidity=93.39, cloud=0.0, wind=40.07, temperature=6.09, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:07:09.178', atlas_cloud=2, atlas_rain=1, zp_data=[2.462249999999999, 2.5402500000000003, 2.53125, 2.453499999999999, nan, nan, nan, nan, nan, 0.4239999999999995, 1.06325, 2.2379999999999995, 2.9535, 2.7112499999999997, 2.781999999999999, 2.3499999999999996, 0.39724999999999966, 0.2554999999999996, 0.4429999999999996, 0.903249999999999, 1.626999999999999, 1.6137499999999987, 1.8232500000000007, 0.5282499999999999, 0.317499999999999, 0.2829999999999995, 0.39525000000000077, 0.2925000000000004, 0.4065000000000003, 0.4955000000000007, 0.5115000000000016, 0.3650000000000011, 0.1947499999999991], zp_timestamp='2026-02-15T01:05:00')
2026-02-15T03:07:19.410 [DEBUG] [Thread-196869] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:07:19.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-15T03:07:19.505 [DEBUG] [Thread-196873] [transport.py] [_log()] starting thread (client mode): 0xa2d00d90
2026-02-15T03:07:19.505 [DEBUG] [Thread-196873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:07:19.520 [DEBUG] [Thread-196873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:07:19.520 [INFO] [Thread-196873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:07:19.528 [DEBUG] [Thread-196873] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:07:19.529 [DEBUG] [Thread-196873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:07:19.529 [DEBUG] [Thread-196873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:07:19.529 [DEBUG] [Thread-196873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:07:19.530 [DEBUG] [Thread-196873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:07:19.530 [DEBUG] [Thread-196873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:07:19.530 [DEBUG] [Thread-196873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:07:19.530 [DEBUG] [Thread-196873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:07:19.530 [DEBUG] [Thread-196873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:07:19.530 [DEBUG] [Thread-196873] [transport.py] [_log()] client lang: <none>
2026-02-15T03:07:19.530 [DEBUG] [Thread-196873] [transport.py] [_log()] server lang: <none>
2026-02-15T03:07:19.530 [DEBUG] [Thread-196873] [transport.py] [_log()] kex follows: False
2026-02-15T03:07:19.530 [DEBUG] [Thread-196873] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:07:19.530 [DEBUG] [Thread-196873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:07:19.530 [DEBUG] [Thread-196873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:07:19.530 [DEBUG] [Thread-196873] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:07:19.530 [DEBUG] [Thread-196873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:07:19.530 [DEBUG] [Thread-196873] [transport.py] [_log()] Compression: none
2026-02-15T03:07:19.531 [DEBUG] [Thread-196873] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:07:19.588 [DEBUG] [Thread-196873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:07:19.589 [DEBUG] [Thread-196873] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:07:19.589 [DEBUG] [Thread-196873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:07:19.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:07:19.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:07:19.644 [DEBUG] [Thread-196873] [transport.py] [_log()] userauth is OK
2026-02-15T03:07:19.645 [DEBUG] [Thread-196873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:07:19.645 [DEBUG] [Thread-196873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:07:19.645 [DEBUG] [Thread-196873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:07:19.645 [DEBUG] [Thread-196873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:07:19.664 [INFO] [Thread-196873] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:07:19.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-15T03:07:19.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:07:20.472 [DEBUG] [Thread-196873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:07:20.472 [DEBUG] [Thread-196873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:07:20.520 [DEBUG] [Thread-196873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:07:20.521 [DEBUG] [Thread-196873] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:07:20.530 [DEBUG] [Thread-196873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:07:20.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:07:20.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:07:20.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:07:20.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:07:20.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:07:20.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:07:20.568 [DEBUG] [Thread-196873] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:07:29.234 [DEBUG] [Thread-196875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:07:44.289 [DEBUG] [Thread-196876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:07:50.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:07:50.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:07:50.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-15T03:07:52.373 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:07:52.374 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:07:52.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 7, 26), 0.94, 93.41, 0.0, 39.72, 6.12, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:07:52.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:07:26
2026-02-15T03:07:53.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:07:53.283 [DEBUG] [Thread-196877] [transport.py] [_log()] starting thread (client mode): 0xa2d02560
2026-02-15T03:07:53.283 [DEBUG] [Thread-196877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:07:53.313 [DEBUG] [Thread-196877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:07:53.314 [INFO] [Thread-196877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:07:53.316 [DEBUG] [Thread-196877] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:07:53.317 [DEBUG] [Thread-196877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:07:53.317 [DEBUG] [Thread-196877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:07:53.317 [DEBUG] [Thread-196877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:07:53.317 [DEBUG] [Thread-196877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:07:53.317 [DEBUG] [Thread-196877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:07:53.317 [DEBUG] [Thread-196877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:07:53.317 [DEBUG] [Thread-196877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:07:53.317 [DEBUG] [Thread-196877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:07:53.317 [DEBUG] [Thread-196877] [transport.py] [_log()] client lang: <none>
2026-02-15T03:07:53.317 [DEBUG] [Thread-196877] [transport.py] [_log()] server lang: <none>
2026-02-15T03:07:53.317 [DEBUG] [Thread-196877] [transport.py] [_log()] kex follows: False
2026-02-15T03:07:53.317 [DEBUG] [Thread-196877] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:07:53.317 [DEBUG] [Thread-196877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:07:53.317 [DEBUG] [Thread-196877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:07:53.318 [DEBUG] [Thread-196877] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:07:53.318 [DEBUG] [Thread-196877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:07:53.318 [DEBUG] [Thread-196877] [transport.py] [_log()] Compression: none
2026-02-15T03:07:53.318 [DEBUG] [Thread-196877] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:07:53.336 [DEBUG] [Thread-196877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:07:53.337 [DEBUG] [Thread-196877] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:07:53.338 [DEBUG] [Thread-196877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:07:53.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:07:53.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:07:53.340 [DEBUG] [Thread-196877] [transport.py] [_log()] userauth is OK
2026-02-15T03:07:53.340 [DEBUG] [Thread-196877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:07:53.340 [DEBUG] [Thread-196877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:07:53.340 [DEBUG] [Thread-196877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:07:53.340 [DEBUG] [Thread-196877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:07:53.360 [INFO] [Thread-196877] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:07:53.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:07:54.047 [DEBUG] [Thread-196877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:07:54.047 [DEBUG] [Thread-196877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:07:54.047 [DEBUG] [Thread-196877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:07:54.087 [DEBUG] [Thread-196877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:07:54.088 [DEBUG] [Thread-196877] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:07:54.091 [DEBUG] [Thread-196877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:07:54.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:07:54.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:07:54.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:07:54.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:07:54.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:07:54.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:07:54.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:07:54.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:07:54.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:07:54.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.046981 -999.00   +6.00  32.95     91   +4.80 1 2 2 3 1     0    0 1.32 3.61 .NESw 33.0 33.0 138.2 41.1 6.6 -24.0 6.4 -23.2 6.2 -22.2 6.6 -23.4
2026-02-15T03:07:54.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:07:54.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:07:54.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.046981
2026-02-15T03:07:54.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:07:54.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:07:54.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:07:54.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:07:54.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:07:54.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:07:26', tmtdew=0.94, humidity=93.41, cloud=0.0, wind=39.72, temperature=6.12, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:07:39.158', atlas_cloud=2, atlas_rain=1, zp_data=[2.462249999999999, 2.5402500000000003, 2.53125, 2.453499999999999, nan, nan, nan, nan, nan, 0.4239999999999995, 1.06325, 2.2379999999999995, 2.9535, 2.7112499999999997, 2.781999999999999, 2.3499999999999996, 0.39724999999999966, 0.2554999999999996, 0.4429999999999996, 0.903249999999999, 1.626999999999999, 1.6137499999999987, 1.8232500000000007, 0.5282499999999999, 0.317499999999999, 0.2829999999999995, 0.39525000000000077, 0.2925000000000004, 0.4065000000000003, 0.4955000000000007, 0.5115000000000016, 0.3650000000000011, 0.1947499999999991], zp_timestamp='2026-02-15T01:05:00')
2026-02-15T03:07:54.119 [DEBUG] [Thread-196877] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:07:54.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:07:54.214 [DEBUG] [Thread-196880] [transport.py] [_log()] starting thread (client mode): 0xa2d979d0
2026-02-15T03:07:54.215 [DEBUG] [Thread-196880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:07:54.231 [DEBUG] [Thread-196880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:07:54.231 [INFO] [Thread-196880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:07:54.238 [DEBUG] [Thread-196880] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:07:54.238 [DEBUG] [Thread-196880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:07:54.238 [DEBUG] [Thread-196880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:07:54.239 [DEBUG] [Thread-196880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:07:54.239 [DEBUG] [Thread-196880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:07:54.239 [DEBUG] [Thread-196880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:07:54.239 [DEBUG] [Thread-196880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:07:54.239 [DEBUG] [Thread-196880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:07:54.239 [DEBUG] [Thread-196880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:07:54.239 [DEBUG] [Thread-196880] [transport.py] [_log()] client lang: <none>
2026-02-15T03:07:54.239 [DEBUG] [Thread-196880] [transport.py] [_log()] server lang: <none>
2026-02-15T03:07:54.239 [DEBUG] [Thread-196880] [transport.py] [_log()] kex follows: False
2026-02-15T03:07:54.239 [DEBUG] [Thread-196880] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:07:54.239 [DEBUG] [Thread-196880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:07:54.239 [DEBUG] [Thread-196880] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:07:54.239 [DEBUG] [Thread-196880] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:07:54.239 [DEBUG] [Thread-196880] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:07:54.239 [DEBUG] [Thread-196880] [transport.py] [_log()] Compression: none
2026-02-15T03:07:54.239 [DEBUG] [Thread-196880] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:07:54.299 [DEBUG] [Thread-196880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:07:54.300 [DEBUG] [Thread-196880] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:07:54.300 [DEBUG] [Thread-196880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:07:54.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:07:54.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:07:54.355 [DEBUG] [Thread-196880] [transport.py] [_log()] userauth is OK
2026-02-15T03:07:54.355 [DEBUG] [Thread-196880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:07:54.355 [DEBUG] [Thread-196880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:07:54.355 [DEBUG] [Thread-196880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:07:54.355 [DEBUG] [Thread-196880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:07:54.378 [INFO] [Thread-196880] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:07:54.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-15T03:07:54.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:07:55.177 [DEBUG] [Thread-196880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:07:55.177 [DEBUG] [Thread-196880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:07:55.225 [DEBUG] [Thread-196880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:07:55.226 [DEBUG] [Thread-196880] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:07:55.235 [DEBUG] [Thread-196880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:07:55.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:07:55.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-15T03:07:55.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-15T03:07:55.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:07:55.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:07:55.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:07:55.272 [DEBUG] [Thread-196880] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:07:59.326 [DEBUG] [Thread-196882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:08:14.379 [DEBUG] [Thread-196883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:08:19.387 [DEBUG] [Thread-196884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:08:25.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:08:25.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:08: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-15T03:08:27.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 8, 2), 0.94, 93.42, 0.0, 38.27, 6.1, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:08:27.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:08:02
2026-02-15T03:08:27.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:08:27.669 [DEBUG] [Thread-196885] [transport.py] [_log()] starting thread (client mode): 0xa2d024a0
2026-02-15T03:08:27.670 [DEBUG] [Thread-196885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:08:27.688 [DEBUG] [Thread-196885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:08:27.688 [INFO] [Thread-196885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:08:27.691 [DEBUG] [Thread-196885] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:08:27.691 [DEBUG] [Thread-196885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:08:27.692 [DEBUG] [Thread-196885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:08:27.692 [DEBUG] [Thread-196885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:08:27.692 [DEBUG] [Thread-196885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:08:27.692 [DEBUG] [Thread-196885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:08:27.692 [DEBUG] [Thread-196885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:08:27.692 [DEBUG] [Thread-196885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:08:27.692 [DEBUG] [Thread-196885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:08:27.692 [DEBUG] [Thread-196885] [transport.py] [_log()] client lang: <none>
2026-02-15T03:08:27.692 [DEBUG] [Thread-196885] [transport.py] [_log()] server lang: <none>
2026-02-15T03:08:27.692 [DEBUG] [Thread-196885] [transport.py] [_log()] kex follows: False
2026-02-15T03:08:27.692 [DEBUG] [Thread-196885] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:08:27.692 [DEBUG] [Thread-196885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:08:27.692 [DEBUG] [Thread-196885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:08:27.692 [DEBUG] [Thread-196885] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:08:27.693 [DEBUG] [Thread-196885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:08:27.693 [DEBUG] [Thread-196885] [transport.py] [_log()] Compression: none
2026-02-15T03:08:27.693 [DEBUG] [Thread-196885] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:08:27.712 [DEBUG] [Thread-196885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:08:27.713 [DEBUG] [Thread-196885] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:08:27.713 [DEBUG] [Thread-196885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:08:27.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:08:27.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:08:27.715 [DEBUG] [Thread-196885] [transport.py] [_log()] userauth is OK
2026-02-15T03:08:27.715 [DEBUG] [Thread-196885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:08:27.715 [DEBUG] [Thread-196885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:08:27.716 [DEBUG] [Thread-196885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:08:27.716 [DEBUG] [Thread-196885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:08:27.735 [INFO] [Thread-196885] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:08:27.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:08:28.385 [DEBUG] [Thread-196885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:08:28.386 [DEBUG] [Thread-196885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:08:28.386 [DEBUG] [Thread-196885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:08:28.426 [DEBUG] [Thread-196885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:08:28.427 [DEBUG] [Thread-196885] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:08:28.430 [DEBUG] [Thread-196885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:08:28.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:08:28.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:08:28.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:08:28.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:08:28.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:08:28.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:08:28.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:08:28.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:08:28.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:08:28.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.047328 -999.00   +6.00  25.01     92   +4.80 1 2 1 3 1     0    0 1.29 3.53 .NESw 25.0 25.0 140.8 32.0 6.6 -24.1 6.4 -23.3 6.2 -22.1 6.5 -23.5
2026-02-15T03:08:28.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:08:28.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:08:28.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.047328
2026-02-15T03:08:28.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:08:28.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:08:28.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:08:28.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:08:28.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:08:28.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:08:02', tmtdew=0.94, humidity=93.42, cloud=0.0, wind=38.27, temperature=6.1, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:08:09.139', atlas_cloud=2, atlas_rain=1, zp_data=[2.462249999999999, 2.5402500000000003, 2.53125, 2.453499999999999, nan, nan, nan, nan, nan, 0.4239999999999995, 1.06325, 2.2379999999999995, 2.9535, 2.7112499999999997, 2.781999999999999, 2.3499999999999996, 0.39724999999999966, 0.2554999999999996, 0.4429999999999996, 0.903249999999999, 1.626999999999999, 1.6137499999999987, 1.8232500000000007, 0.5282499999999999, 0.317499999999999, 0.2829999999999995, 0.39525000000000077, 0.2925000000000004, 0.4065000000000003, 0.4955000000000007, 0.5115000000000016, 0.3650000000000011, 0.1947499999999991], zp_timestamp='2026-02-15T01:05:00')
2026-02-15T03:08:28.457 [DEBUG] [Thread-196885] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:08:28.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-15T03:08:28.544 [DEBUG] [Thread-196888] [transport.py] [_log()] starting thread (client mode): 0xa2d78850
2026-02-15T03:08:28.544 [DEBUG] [Thread-196888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:08:28.559 [DEBUG] [Thread-196888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:08:28.559 [INFO] [Thread-196888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:08:28.566 [DEBUG] [Thread-196888] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:08:28.567 [DEBUG] [Thread-196888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:08:28.567 [DEBUG] [Thread-196888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:08:28.567 [DEBUG] [Thread-196888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:08:28.567 [DEBUG] [Thread-196888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:08:28.567 [DEBUG] [Thread-196888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:08:28.567 [DEBUG] [Thread-196888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:08:28.567 [DEBUG] [Thread-196888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:08:28.567 [DEBUG] [Thread-196888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:08:28.567 [DEBUG] [Thread-196888] [transport.py] [_log()] client lang: <none>
2026-02-15T03:08:28.567 [DEBUG] [Thread-196888] [transport.py] [_log()] server lang: <none>
2026-02-15T03:08:28.567 [DEBUG] [Thread-196888] [transport.py] [_log()] kex follows: False
2026-02-15T03:08:28.568 [DEBUG] [Thread-196888] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:08:28.568 [DEBUG] [Thread-196888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:08:28.568 [DEBUG] [Thread-196888] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:08:28.568 [DEBUG] [Thread-196888] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:08:28.568 [DEBUG] [Thread-196888] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:08:28.568 [DEBUG] [Thread-196888] [transport.py] [_log()] Compression: none
2026-02-15T03:08:28.568 [DEBUG] [Thread-196888] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:08:28.630 [DEBUG] [Thread-196888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:08:28.631 [DEBUG] [Thread-196888] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:08:28.631 [DEBUG] [Thread-196888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:08:28.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:08:28.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:08:28.699 [DEBUG] [Thread-196888] [transport.py] [_log()] userauth is OK
2026-02-15T03:08:28.700 [DEBUG] [Thread-196888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:08:28.700 [DEBUG] [Thread-196888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:08:28.700 [DEBUG] [Thread-196888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:08:28.700 [DEBUG] [Thread-196888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:08:28.723 [INFO] [Thread-196888] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:08:28.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-15T03:08:28.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:08:29.415 [DEBUG] [Thread-196890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:08:29.488 [DEBUG] [Thread-196888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:08:29.488 [DEBUG] [Thread-196888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:08:29.536 [DEBUG] [Thread-196888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:08:29.537 [DEBUG] [Thread-196888] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:08:29.546 [DEBUG] [Thread-196888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:08:29.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:08:29.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:08:29.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-15T03:08:29.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:08:29.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:08:29.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:08:29.582 [DEBUG] [Thread-196888] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:08:44.468 [DEBUG] [Thread-196891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:08:52.574 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:08:52.576 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:08:59.507 [DEBUG] [Thread-196892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:08:59.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:08:59.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:08:59.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-15T03:09:01.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 8, 37), 1.38, 90.81, 0.0, 37.01, 6.34, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:09:01.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:08:37
2026-02-15T03:09:02.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:09:02.346 [DEBUG] [Thread-196893] [transport.py] [_log()] starting thread (client mode): 0xa5742800
2026-02-15T03:09:02.346 [DEBUG] [Thread-196893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:09:02.366 [DEBUG] [Thread-196893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:09:02.366 [INFO] [Thread-196893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:09:02.369 [DEBUG] [Thread-196893] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:09:02.369 [DEBUG] [Thread-196893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:09:02.369 [DEBUG] [Thread-196893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:09:02.369 [DEBUG] [Thread-196893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:09:02.369 [DEBUG] [Thread-196893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:09:02.369 [DEBUG] [Thread-196893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:09:02.369 [DEBUG] [Thread-196893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:09:02.369 [DEBUG] [Thread-196893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:09:02.369 [DEBUG] [Thread-196893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:09:02.369 [DEBUG] [Thread-196893] [transport.py] [_log()] client lang: <none>
2026-02-15T03:09:02.369 [DEBUG] [Thread-196893] [transport.py] [_log()] server lang: <none>
2026-02-15T03:09:02.369 [DEBUG] [Thread-196893] [transport.py] [_log()] kex follows: False
2026-02-15T03:09:02.369 [DEBUG] [Thread-196893] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:09:02.369 [DEBUG] [Thread-196893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:09:02.369 [DEBUG] [Thread-196893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:09:02.370 [DEBUG] [Thread-196893] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:09:02.370 [DEBUG] [Thread-196893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:09:02.370 [DEBUG] [Thread-196893] [transport.py] [_log()] Compression: none
2026-02-15T03:09:02.370 [DEBUG] [Thread-196893] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:09:02.385 [DEBUG] [Thread-196893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:09:02.386 [DEBUG] [Thread-196893] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:09:02.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:09:02.386 [DEBUG] [Thread-196893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:09:02.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:09:02.388 [DEBUG] [Thread-196893] [transport.py] [_log()] userauth is OK
2026-02-15T03:09:02.389 [DEBUG] [Thread-196893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:09:02.389 [DEBUG] [Thread-196893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:09:02.389 [DEBUG] [Thread-196893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:09:02.389 [DEBUG] [Thread-196893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:09:02.406 [INFO] [Thread-196893] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:09:02.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:09:03.055 [DEBUG] [Thread-196893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:09:03.055 [DEBUG] [Thread-196893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:09:03.055 [DEBUG] [Thread-196893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:09:03.096 [DEBUG] [Thread-196893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:09:03.096 [DEBUG] [Thread-196893] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:09:03.099 [DEBUG] [Thread-196893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:09:03.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:09:03.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:09:03.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:09:03.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:09:03.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:09:03.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:09:03.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:09:03.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:09:03.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:09:03.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.047676 -999.00   +6.00  28.89     91   +4.80 1 2 1 3 1     0    0 1.30 3.47 .NESw 28.9 28.9 141.0 36.7 6.6 -24.2 6.4 -23.3 6.2 -22.3 6.5 -23.5
2026-02-15T03:09:03.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:09:03.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:09:03.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.047676
2026-02-15T03:09:03.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:09:03.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:09:03.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:09:03.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:09:03.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:09:03.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:08:37', tmtdew=1.38, humidity=90.81, cloud=0.0, wind=37.01, temperature=6.34, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:08:39.206', atlas_cloud=2, atlas_rain=1, zp_data=[2.462249999999999, 2.5402500000000003, 2.53125, 2.453499999999999, nan, nan, nan, nan, nan, 0.4239999999999995, 1.06325, 2.2379999999999995, 2.9535, 2.7112499999999997, 2.781999999999999, 2.3499999999999996, 0.39724999999999966, 0.2554999999999996, 0.4429999999999996, 0.903249999999999, 1.626999999999999, 1.6137499999999987, 1.8232500000000007, 0.5282499999999999, 0.317499999999999, 0.2829999999999995, 0.39525000000000077, 0.2925000000000004, 0.4065000000000003, 0.4955000000000007, 0.5115000000000016, 0.3650000000000011, 0.1947499999999991], zp_timestamp='2026-02-15T01:05:00')
2026-02-15T03:09:03.119 [DEBUG] [Thread-196893] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:09:03.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-15T03:09:03.208 [DEBUG] [Thread-196896] [transport.py] [_log()] starting thread (client mode): 0xa2de1de0
2026-02-15T03:09:03.208 [DEBUG] [Thread-196896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:09:03.223 [DEBUG] [Thread-196896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:09:03.223 [INFO] [Thread-196896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:09:03.234 [DEBUG] [Thread-196896] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:09:03.234 [DEBUG] [Thread-196896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:09:03.234 [DEBUG] [Thread-196896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:09:03.234 [DEBUG] [Thread-196896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:09:03.235 [DEBUG] [Thread-196896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:09:03.235 [DEBUG] [Thread-196896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:09:03.235 [DEBUG] [Thread-196896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:09:03.235 [DEBUG] [Thread-196896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:09:03.235 [DEBUG] [Thread-196896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:09:03.235 [DEBUG] [Thread-196896] [transport.py] [_log()] client lang: <none>
2026-02-15T03:09:03.235 [DEBUG] [Thread-196896] [transport.py] [_log()] server lang: <none>
2026-02-15T03:09:03.235 [DEBUG] [Thread-196896] [transport.py] [_log()] kex follows: False
2026-02-15T03:09:03.235 [DEBUG] [Thread-196896] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:09:03.236 [DEBUG] [Thread-196896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:09:03.236 [DEBUG] [Thread-196896] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:09:03.236 [DEBUG] [Thread-196896] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:09:03.236 [DEBUG] [Thread-196896] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:09:03.236 [DEBUG] [Thread-196896] [transport.py] [_log()] Compression: none
2026-02-15T03:09:03.236 [DEBUG] [Thread-196896] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:09:03.291 [DEBUG] [Thread-196896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:09:03.292 [DEBUG] [Thread-196896] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:09:03.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:09:03.294 [DEBUG] [Thread-196896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:09:03.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:09:03.347 [DEBUG] [Thread-196896] [transport.py] [_log()] userauth is OK
2026-02-15T03:09:03.347 [DEBUG] [Thread-196896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:09:03.347 [DEBUG] [Thread-196896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:09:03.347 [DEBUG] [Thread-196896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:09:03.347 [DEBUG] [Thread-196896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:09:03.370 [INFO] [Thread-196896] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:09:03.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-15T03:09:03.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:09:04.155 [DEBUG] [Thread-196896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:09:04.155 [DEBUG] [Thread-196896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:09:04.203 [DEBUG] [Thread-196896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:09:04.203 [DEBUG] [Thread-196896] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:09:04.212 [DEBUG] [Thread-196896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:09:04.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:09: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-15T03:09:04.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-15T03:09:04.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:09:04.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:09:04.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:09:04.247 [DEBUG] [Thread-196896] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:09:14.544 [DEBUG] [Thread-196898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:09:19.452 [DEBUG] [Thread-196899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:09:29.596 [DEBUG] [Thread-196900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:09:34.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:09:34.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:09:34.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-15T03:09:36.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 9, 12), 0.94, 93.39, 0.0, 36.54, 6.05, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:09:36.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:09:12
2026-02-15T03:09:36.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:09:36.670 [DEBUG] [Thread-196901] [transport.py] [_log()] starting thread (client mode): 0xa57d4a60
2026-02-15T03:09:36.671 [DEBUG] [Thread-196901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:09:36.690 [DEBUG] [Thread-196901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:09:36.690 [INFO] [Thread-196901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:09:36.693 [DEBUG] [Thread-196901] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:09:36.693 [DEBUG] [Thread-196901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:09:36.693 [DEBUG] [Thread-196901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:09:36.693 [DEBUG] [Thread-196901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:09:36.693 [DEBUG] [Thread-196901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:09:36.693 [DEBUG] [Thread-196901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:09:36.693 [DEBUG] [Thread-196901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:09:36.693 [DEBUG] [Thread-196901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:09:36.693 [DEBUG] [Thread-196901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:09:36.693 [DEBUG] [Thread-196901] [transport.py] [_log()] client lang: <none>
2026-02-15T03:09:36.693 [DEBUG] [Thread-196901] [transport.py] [_log()] server lang: <none>
2026-02-15T03:09:36.694 [DEBUG] [Thread-196901] [transport.py] [_log()] kex follows: False
2026-02-15T03:09:36.694 [DEBUG] [Thread-196901] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:09:36.694 [DEBUG] [Thread-196901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:09:36.694 [DEBUG] [Thread-196901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:09:36.694 [DEBUG] [Thread-196901] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:09:36.694 [DEBUG] [Thread-196901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:09:36.694 [DEBUG] [Thread-196901] [transport.py] [_log()] Compression: none
2026-02-15T03:09:36.694 [DEBUG] [Thread-196901] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:09:36.711 [DEBUG] [Thread-196901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:09:36.712 [DEBUG] [Thread-196901] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:09:36.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:09:36.713 [DEBUG] [Thread-196901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:09:36.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:09:36.715 [DEBUG] [Thread-196901] [transport.py] [_log()] userauth is OK
2026-02-15T03:09:36.715 [DEBUG] [Thread-196901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:09:36.715 [DEBUG] [Thread-196901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:09:36.716 [DEBUG] [Thread-196901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:09:36.716 [DEBUG] [Thread-196901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:09:36.739 [INFO] [Thread-196901] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:09:36.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:09:37.355 [DEBUG] [Thread-196901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:09:37.356 [DEBUG] [Thread-196901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:09:37.356 [DEBUG] [Thread-196901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:09:37.396 [DEBUG] [Thread-196901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:09:37.397 [DEBUG] [Thread-196901] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:09:37.400 [DEBUG] [Thread-196901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:09:37.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:09:37.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:09:37.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:09:37.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:09:37.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:09:37.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:09:37.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:09:37.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:09:37.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:09:37.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.048023 -999.00   +6.00  30.12     92   +4.80 1 2 2 3 1     0    0 1.31 3.33 .NESw 30.1 30.1 138.0 37.8 6.5 -24.1 6.4 -23.2 6.2 -22.2 6.5 -23.4
2026-02-15T03:09:37.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:09:37.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:09:37.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.048023
2026-02-15T03:09:37.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:09:37.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:09:37.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:09:37.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:09:37.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:09:37.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:09:12', tmtdew=0.94, humidity=93.39, cloud=0.0, wind=36.54, temperature=6.05, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:09:09.187', atlas_cloud=2, atlas_rain=1, zp_data=[2.462249999999999, 2.5402500000000003, 2.53125, 2.453499999999999, nan, nan, nan, nan, nan, 0.4239999999999995, 1.06325, 2.2379999999999995, 2.9535, 2.7112499999999997, 2.781999999999999, 2.3499999999999996, 0.39724999999999966, 0.2554999999999996, 0.4429999999999996, 0.903249999999999, 1.626999999999999, 1.6137499999999987, 1.8232500000000007, 0.5282499999999999, 0.317499999999999, 0.2829999999999995, 0.39525000000000077, 0.2925000000000004, 0.4065000000000003, 0.4955000000000007, 0.5115000000000016, 0.3650000000000011, 0.1947499999999991], zp_timestamp='2026-02-15T01:05:00')
2026-02-15T03:09:37.430 [DEBUG] [Thread-196901] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:09:37.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:09:37.527 [DEBUG] [Thread-196904] [transport.py] [_log()] starting thread (client mode): 0xa2d031f0
2026-02-15T03:09:37.527 [DEBUG] [Thread-196904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:09:37.542 [DEBUG] [Thread-196904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:09:37.542 [INFO] [Thread-196904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:09:37.550 [DEBUG] [Thread-196904] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:09:37.550 [DEBUG] [Thread-196904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:09:37.550 [DEBUG] [Thread-196904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:09:37.550 [DEBUG] [Thread-196904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:09:37.550 [DEBUG] [Thread-196904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:09:37.550 [DEBUG] [Thread-196904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:09:37.550 [DEBUG] [Thread-196904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:09:37.550 [DEBUG] [Thread-196904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:09:37.550 [DEBUG] [Thread-196904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:09:37.550 [DEBUG] [Thread-196904] [transport.py] [_log()] client lang: <none>
2026-02-15T03:09:37.550 [DEBUG] [Thread-196904] [transport.py] [_log()] server lang: <none>
2026-02-15T03:09:37.550 [DEBUG] [Thread-196904] [transport.py] [_log()] kex follows: False
2026-02-15T03:09:37.550 [DEBUG] [Thread-196904] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:09:37.550 [DEBUG] [Thread-196904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:09:37.551 [DEBUG] [Thread-196904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:09:37.551 [DEBUG] [Thread-196904] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:09:37.551 [DEBUG] [Thread-196904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:09:37.551 [DEBUG] [Thread-196904] [transport.py] [_log()] Compression: none
2026-02-15T03:09:37.551 [DEBUG] [Thread-196904] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:09:37.608 [DEBUG] [Thread-196904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:09:37.609 [DEBUG] [Thread-196904] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:09:37.610 [DEBUG] [Thread-196904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:09:37.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:09:37.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:09:37.666 [DEBUG] [Thread-196904] [transport.py] [_log()] userauth is OK
2026-02-15T03:09:37.666 [DEBUG] [Thread-196904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:09:37.666 [DEBUG] [Thread-196904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:09:37.666 [DEBUG] [Thread-196904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:09:37.666 [DEBUG] [Thread-196904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:09:37.684 [INFO] [Thread-196904] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:09: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-15T03:09:37.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:09:38.493 [DEBUG] [Thread-196904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:09:38.493 [DEBUG] [Thread-196904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:09:38.542 [DEBUG] [Thread-196904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:09:38.542 [DEBUG] [Thread-196904] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:09:38.551 [DEBUG] [Thread-196904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:09:38.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:09:38.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-15T03:09:38.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-15T03:09:38.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:09:38.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:09:38.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:09:38.588 [DEBUG] [Thread-196904] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:09:44.634 [DEBUG] [Thread-196906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:09:52.784 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:09:52.786 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:09:59.695 [DEBUG] [Thread-196907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:10:08.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:10:08.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:10:08.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-15T03:10:10.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 9, 48), 0.94, 93.42, 0.0, 35.55, 6.09, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:10:10.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:09:48
2026-02-15T03:10:10.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:10:11.001 [DEBUG] [Thread-196908] [transport.py] [_log()] starting thread (client mode): 0xa2d009d0
2026-02-15T03:10:11.002 [DEBUG] [Thread-196908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:10:11.021 [DEBUG] [Thread-196908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:10:11.022 [INFO] [Thread-196908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:10:11.025 [DEBUG] [Thread-196908] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:10:11.025 [DEBUG] [Thread-196908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:10:11.025 [DEBUG] [Thread-196908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:10:11.025 [DEBUG] [Thread-196908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:10:11.026 [DEBUG] [Thread-196908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:10:11.026 [DEBUG] [Thread-196908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:10:11.026 [DEBUG] [Thread-196908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:10:11.026 [DEBUG] [Thread-196908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:10:11.026 [DEBUG] [Thread-196908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:10:11.026 [DEBUG] [Thread-196908] [transport.py] [_log()] client lang: <none>
2026-02-15T03:10:11.026 [DEBUG] [Thread-196908] [transport.py] [_log()] server lang: <none>
2026-02-15T03:10:11.026 [DEBUG] [Thread-196908] [transport.py] [_log()] kex follows: False
2026-02-15T03:10:11.026 [DEBUG] [Thread-196908] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:10:11.026 [DEBUG] [Thread-196908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:10:11.026 [DEBUG] [Thread-196908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:10:11.026 [DEBUG] [Thread-196908] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:10:11.026 [DEBUG] [Thread-196908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:10:11.026 [DEBUG] [Thread-196908] [transport.py] [_log()] Compression: none
2026-02-15T03:10:11.026 [DEBUG] [Thread-196908] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:10:11.047 [DEBUG] [Thread-196908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:10:11.047 [DEBUG] [Thread-196908] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:10:11.048 [DEBUG] [Thread-196908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:10:11.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:10:11.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:10:11.050 [DEBUG] [Thread-196908] [transport.py] [_log()] userauth is OK
2026-02-15T03:10:11.050 [DEBUG] [Thread-196908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:10:11.050 [DEBUG] [Thread-196908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:10:11.050 [DEBUG] [Thread-196908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:10:11.050 [DEBUG] [Thread-196908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:10:11.088 [INFO] [Thread-196908] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:10:11.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:10:14.733 [DEBUG] [Thread-196910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:10:17.191 [DEBUG] [Thread-196908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:10:17.192 [DEBUG] [Thread-196908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:10:17.192 [DEBUG] [Thread-196908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:10:17.232 [DEBUG] [Thread-196908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:10:17.233 [DEBUG] [Thread-196908] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:10:17.236 [DEBUG] [Thread-196908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:10:17.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:10:17.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:10:17.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:10:17.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:10:17.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:10:17.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:10:17.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:10:17.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:10:17.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:10:17.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.048023 -999.00   +6.00  30.12     92   +4.80 1 2 2 3 1     0    0 1.31 3.33 .NESw 30.1 30.1 138.0 37.8 6.5 -24.1 6.4 -23.2 6.2 -22.2 6.5 -23.4
2026-02-15T03:10:17.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:10:17.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:10:17.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.048023
2026-02-15T03:10:17.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:10:17.261 [DEBUG] [Thread-196908] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:10:17.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:10:17.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:10:17.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:10:17.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:10:17.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:09:48', tmtdew=0.94, humidity=93.42, cloud=0.0, wind=35.55, temperature=6.09, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:09:09.187', atlas_cloud=2, atlas_rain=1, zp_data=[2.462249999999999, 2.5402500000000003, 2.53125, 2.453499999999999, nan, nan, nan, nan, nan, 0.4239999999999995, 1.06325, 2.2379999999999995, 2.9535, 2.7112499999999997, 2.781999999999999, 2.3499999999999996, 0.39724999999999966, 0.2554999999999996, 0.4429999999999996, 0.903249999999999, 1.626999999999999, 1.6137499999999987, 1.8232500000000007, 0.5282499999999999, 0.317499999999999, 0.2829999999999995, 0.39525000000000077, 0.2925000000000004, 0.4065000000000003, 0.4955000000000007, 0.5115000000000016, 0.3650000000000011, 0.1947499999999991], zp_timestamp='2026-02-15T01:09:00')
2026-02-15T03:10:17.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-15T03:10:17.361 [DEBUG] [Thread-196912] [transport.py] [_log()] starting thread (client mode): 0xa2d038e0
2026-02-15T03:10:17.361 [DEBUG] [Thread-196912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:10:17.380 [DEBUG] [Thread-196912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:10:17.380 [INFO] [Thread-196912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:10:17.390 [DEBUG] [Thread-196912] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:10:17.390 [DEBUG] [Thread-196912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:10:17.390 [DEBUG] [Thread-196912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:10:17.391 [DEBUG] [Thread-196912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:10:17.391 [DEBUG] [Thread-196912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:10:17.391 [DEBUG] [Thread-196912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:10:17.391 [DEBUG] [Thread-196912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:10:17.391 [DEBUG] [Thread-196912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:10:17.391 [DEBUG] [Thread-196912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:10:17.391 [DEBUG] [Thread-196912] [transport.py] [_log()] client lang: <none>
2026-02-15T03:10:17.391 [DEBUG] [Thread-196912] [transport.py] [_log()] server lang: <none>
2026-02-15T03:10:17.391 [DEBUG] [Thread-196912] [transport.py] [_log()] kex follows: False
2026-02-15T03:10:17.391 [DEBUG] [Thread-196912] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:10:17.391 [DEBUG] [Thread-196912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:10:17.391 [DEBUG] [Thread-196912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:10:17.391 [DEBUG] [Thread-196912] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:10:17.391 [DEBUG] [Thread-196912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:10:17.391 [DEBUG] [Thread-196912] [transport.py] [_log()] Compression: none
2026-02-15T03:10:17.392 [DEBUG] [Thread-196912] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:10:17.451 [DEBUG] [Thread-196912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:10:17.452 [DEBUG] [Thread-196912] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:10:17.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:10:17.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:10:17.454 [DEBUG] [Thread-196912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:10:17.516 [DEBUG] [Thread-196912] [transport.py] [_log()] userauth is OK
2026-02-15T03:10:17.517 [DEBUG] [Thread-196912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:10:17.517 [DEBUG] [Thread-196912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:10:17.517 [DEBUG] [Thread-196912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:10:17.517 [DEBUG] [Thread-196912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:10:17.540 [INFO] [Thread-196912] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:10:17.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-15T03:10:17.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:10:18.302 [DEBUG] [Thread-196912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:10:18.302 [DEBUG] [Thread-196912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:10:18.351 [DEBUG] [Thread-196912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:10:18.351 [DEBUG] [Thread-196912] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:10:18.359 [DEBUG] [Thread-196912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:10:18.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:10:18.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-15T03:10:18.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-15T03:10:18.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:10:18.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:10:18.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:10:18.393 [DEBUG] [Thread-196912] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:10:19.536 [DEBUG] [Thread-196914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:10:29.770 [DEBUG] [Thread-196915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:10:44.823 [DEBUG] [Thread-196916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:10:48.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:10:48.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:10:48.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-15T03:10:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 10, 24), 0.94, 93.41, 0.0, 35.71, 6.07, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:10:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:10:24
2026-02-15T03:10:50.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:10:50.760 [DEBUG] [Thread-196917] [transport.py] [_log()] starting thread (client mode): 0xa2de2590
2026-02-15T03:10:50.760 [DEBUG] [Thread-196917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:10:50.772 [DEBUG] [Thread-196917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:10:50.772 [INFO] [Thread-196917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:10:50.777 [DEBUG] [Thread-196917] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:10:50.777 [DEBUG] [Thread-196917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:10:50.777 [DEBUG] [Thread-196917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:10:50.777 [DEBUG] [Thread-196917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:10:50.777 [DEBUG] [Thread-196917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:10:50.777 [DEBUG] [Thread-196917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:10:50.777 [DEBUG] [Thread-196917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:10:50.777 [DEBUG] [Thread-196917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:10:50.777 [DEBUG] [Thread-196917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:10:50.777 [DEBUG] [Thread-196917] [transport.py] [_log()] client lang: <none>
2026-02-15T03:10:50.777 [DEBUG] [Thread-196917] [transport.py] [_log()] server lang: <none>
2026-02-15T03:10:50.777 [DEBUG] [Thread-196917] [transport.py] [_log()] kex follows: False
2026-02-15T03:10:50.777 [DEBUG] [Thread-196917] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:10:50.777 [DEBUG] [Thread-196917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:10:50.778 [DEBUG] [Thread-196917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:10:50.778 [DEBUG] [Thread-196917] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:10:50.778 [DEBUG] [Thread-196917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:10:50.778 [DEBUG] [Thread-196917] [transport.py] [_log()] Compression: none
2026-02-15T03:10:50.778 [DEBUG] [Thread-196917] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:10:50.797 [DEBUG] [Thread-196917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:10:50.798 [DEBUG] [Thread-196917] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:10:50.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:10:50.798 [DEBUG] [Thread-196917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:10:50.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:10:50.801 [DEBUG] [Thread-196917] [transport.py] [_log()] userauth is OK
2026-02-15T03:10:50.801 [DEBUG] [Thread-196917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:10:50.801 [DEBUG] [Thread-196917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:10:50.801 [DEBUG] [Thread-196917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:10:50.801 [DEBUG] [Thread-196917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:10:50.819 [INFO] [Thread-196917] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:10:50.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:10:51.382 [DEBUG] [Thread-196917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:10:51.383 [DEBUG] [Thread-196917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:10:51.383 [DEBUG] [Thread-196917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:10:51.423 [DEBUG] [Thread-196917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:10:51.423 [DEBUG] [Thread-196917] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:10:51.426 [DEBUG] [Thread-196917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:10:51.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:10:51.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:10:51.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:10:51.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:10:51.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:10:51.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:10:51.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:10:51.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:10:51.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:10:51.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.048370 -999.00   +6.00  25.23     92   +4.80 1 2 1 3 1     0    0 1.31 3.64 .NESw 25.2 25.2 139.0 34.9 6.5 -24.0 6.4 -23.3 6.2 -22.2 6.5 -23.5
2026-02-15T03:10:51.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:10:51.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:10:51.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.048370
2026-02-15T03:10:51.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:10:51.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:10:51.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:10:51.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:10:51.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:10:51.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:10:24', tmtdew=0.94, humidity=93.41, cloud=0.0, wind=35.71, temperature=6.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:09:39.168', atlas_cloud=2, atlas_rain=1, zp_data=[2.462249999999999, 2.5402500000000003, 2.53125, 2.453499999999999, nan, nan, nan, nan, nan, 0.4239999999999995, 1.06325, 2.2379999999999995, 2.9535, 2.7112499999999997, 2.781999999999999, 2.3499999999999996, 0.39724999999999966, 0.2554999999999996, 0.4429999999999996, 0.903249999999999, 1.626999999999999, 1.6137499999999987, 1.8232500000000007, 0.5282499999999999, 0.317499999999999, 0.2829999999999995, 0.39525000000000077, 0.2925000000000004, 0.4065000000000003, 0.4955000000000007, 0.5115000000000016, 0.3650000000000011, 0.1947499999999991], zp_timestamp='2026-02-15T01:09:00')
2026-02-15T03:10:51.448 [DEBUG] [Thread-196917] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:10:51.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-15T03:10:51.541 [DEBUG] [Thread-196920] [transport.py] [_log()] starting thread (client mode): 0xa2de8610
2026-02-15T03:10:51.541 [DEBUG] [Thread-196920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:10:51.558 [DEBUG] [Thread-196920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:10:51.558 [INFO] [Thread-196920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:10:51.566 [DEBUG] [Thread-196920] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:10:51.566 [DEBUG] [Thread-196920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:10:51.566 [DEBUG] [Thread-196920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:10:51.566 [DEBUG] [Thread-196920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:10:51.567 [DEBUG] [Thread-196920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:10:51.567 [DEBUG] [Thread-196920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:10:51.567 [DEBUG] [Thread-196920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:10:51.567 [DEBUG] [Thread-196920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:10:51.567 [DEBUG] [Thread-196920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:10:51.567 [DEBUG] [Thread-196920] [transport.py] [_log()] client lang: <none>
2026-02-15T03:10:51.567 [DEBUG] [Thread-196920] [transport.py] [_log()] server lang: <none>
2026-02-15T03:10:51.567 [DEBUG] [Thread-196920] [transport.py] [_log()] kex follows: False
2026-02-15T03:10:51.567 [DEBUG] [Thread-196920] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:10:51.567 [DEBUG] [Thread-196920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:10:51.567 [DEBUG] [Thread-196920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:10:51.567 [DEBUG] [Thread-196920] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:10:51.567 [DEBUG] [Thread-196920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:10:51.567 [DEBUG] [Thread-196920] [transport.py] [_log()] Compression: none
2026-02-15T03:10:51.567 [DEBUG] [Thread-196920] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:10:51.625 [DEBUG] [Thread-196920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:10:51.626 [DEBUG] [Thread-196920] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:10:51.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:10:51.627 [DEBUG] [Thread-196920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:10:51.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:10:51.682 [DEBUG] [Thread-196920] [transport.py] [_log()] userauth is OK
2026-02-15T03:10:51.682 [DEBUG] [Thread-196920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:10:51.683 [DEBUG] [Thread-196920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:10:51.683 [DEBUG] [Thread-196920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:10:51.683 [DEBUG] [Thread-196920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:10:51.705 [INFO] [Thread-196920] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:10:51.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-15T03:10:51.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:10:52.512 [DEBUG] [Thread-196920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:10:52.513 [DEBUG] [Thread-196920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:10:52.560 [DEBUG] [Thread-196920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:10:52.561 [DEBUG] [Thread-196920] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:10:52.571 [DEBUG] [Thread-196920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:10:52.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:10:52.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:10:52.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:10:52.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:10:52.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:10:52.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:10:52.616 [DEBUG] [Thread-196920] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:10:52.987 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:10:52.988 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:10:59.862 [DEBUG] [Thread-196922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:11:14.912 [DEBUG] [Thread-196923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:11:19.593 [DEBUG] [Thread-196924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:11:22.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:11:22.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:11:22.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T03:11:24.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 10, 59), 0.99, 93.44, 0.0, 35.06, 6.04, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:11:24.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:10:59
2026-02-15T03:11:25.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:11:25.489 [DEBUG] [Thread-196925] [transport.py] [_log()] starting thread (client mode): 0xa2de1ff0
2026-02-15T03:11:25.499 [DEBUG] [Thread-196925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:11:25.513 [DEBUG] [Thread-196925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:11:25.513 [INFO] [Thread-196925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:11:25.514 [DEBUG] [Thread-196925] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:11:25.514 [DEBUG] [Thread-196925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:11:25.514 [DEBUG] [Thread-196925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:11:25.514 [DEBUG] [Thread-196925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:11:25.514 [DEBUG] [Thread-196925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:11:25.514 [DEBUG] [Thread-196925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:11:25.515 [DEBUG] [Thread-196925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:11:25.515 [DEBUG] [Thread-196925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:11:25.515 [DEBUG] [Thread-196925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:11:25.515 [DEBUG] [Thread-196925] [transport.py] [_log()] client lang: <none>
2026-02-15T03:11:25.515 [DEBUG] [Thread-196925] [transport.py] [_log()] server lang: <none>
2026-02-15T03:11:25.515 [DEBUG] [Thread-196925] [transport.py] [_log()] kex follows: False
2026-02-15T03:11:25.515 [DEBUG] [Thread-196925] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:11:25.515 [DEBUG] [Thread-196925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:11:25.515 [DEBUG] [Thread-196925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:11:25.515 [DEBUG] [Thread-196925] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:11:25.515 [DEBUG] [Thread-196925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:11:25.515 [DEBUG] [Thread-196925] [transport.py] [_log()] Compression: none
2026-02-15T03:11:25.515 [DEBUG] [Thread-196925] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:11:25.525 [DEBUG] [Thread-196925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:11:25.525 [DEBUG] [Thread-196925] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:11:25.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:11:25.526 [DEBUG] [Thread-196925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:11:25.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:11:25.528 [DEBUG] [Thread-196925] [transport.py] [_log()] userauth is OK
2026-02-15T03:11:25.528 [DEBUG] [Thread-196925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:11:25.528 [DEBUG] [Thread-196925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:11:25.528 [DEBUG] [Thread-196925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:11:25.529 [DEBUG] [Thread-196925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:11:25.554 [INFO] [Thread-196925] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:11:25.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:11:26.163 [DEBUG] [Thread-196925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:11:26.164 [DEBUG] [Thread-196925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:11:26.164 [DEBUG] [Thread-196925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:11:26.205 [DEBUG] [Thread-196925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:11:26.205 [DEBUG] [Thread-196925] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:11:26.208 [DEBUG] [Thread-196925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:11:26.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:11:26.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:11:26.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:11:26.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:11:26.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:11:26.241 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:11:26.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:11:26.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:11:26.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:11:26.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.049065 -999.00   +6.00  28.60     92   +4.80 1 2 1 3 1     0    0 1.31 3.92 .NESw 28.6 28.6 143.2 32.6 6.5 -24.1 6.4 -23.2 6.2 -22.0 6.5 -23.4
2026-02-15T03:11:26.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:11:26.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:11:26.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.049065
2026-02-15T03:11:26.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:11:26.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:11:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:11:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:11:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:11:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:10:59', tmtdew=0.99, humidity=93.44, cloud=0.0, wind=35.06, temperature=6.04, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:10:39.216', atlas_cloud=2, atlas_rain=1, zp_data=[2.462249999999999, 2.5402500000000003, 2.53125, 2.453499999999999, nan, nan, nan, nan, nan, 0.4239999999999995, 1.06325, 2.2379999999999995, 2.9535, 2.7112499999999997, 2.781999999999999, 2.3499999999999996, 0.39724999999999966, 0.2554999999999996, 0.4429999999999996, 0.903249999999999, 1.626999999999999, 1.6137499999999987, 1.8232500000000007, 0.5282499999999999, 0.317499999999999, 0.2829999999999995, 0.39525000000000077, 0.2925000000000004, 0.4065000000000003, 0.4955000000000007, 0.5115000000000016, 0.3650000000000011, 0.1947499999999991], zp_timestamp='2026-02-15T01:09:00')
2026-02-15T03:11:26.244 [DEBUG] [Thread-196925] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:11:26.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-15T03:11:26.340 [DEBUG] [Thread-196928] [transport.py] [_log()] starting thread (client mode): 0xa2d6e920
2026-02-15T03:11:26.340 [DEBUG] [Thread-196928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:11:26.354 [DEBUG] [Thread-196928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:11:26.354 [INFO] [Thread-196928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:11:26.362 [DEBUG] [Thread-196928] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:11:26.362 [DEBUG] [Thread-196928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:11:26.362 [DEBUG] [Thread-196928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:11:26.362 [DEBUG] [Thread-196928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:11:26.362 [DEBUG] [Thread-196928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:11:26.362 [DEBUG] [Thread-196928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:11:26.362 [DEBUG] [Thread-196928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:11:26.362 [DEBUG] [Thread-196928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:11:26.362 [DEBUG] [Thread-196928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:11:26.362 [DEBUG] [Thread-196928] [transport.py] [_log()] client lang: <none>
2026-02-15T03:11:26.362 [DEBUG] [Thread-196928] [transport.py] [_log()] server lang: <none>
2026-02-15T03:11:26.362 [DEBUG] [Thread-196928] [transport.py] [_log()] kex follows: False
2026-02-15T03:11:26.362 [DEBUG] [Thread-196928] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:11:26.363 [DEBUG] [Thread-196928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:11:26.363 [DEBUG] [Thread-196928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:11:26.363 [DEBUG] [Thread-196928] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:11:26.363 [DEBUG] [Thread-196928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:11:26.363 [DEBUG] [Thread-196928] [transport.py] [_log()] Compression: none
2026-02-15T03:11:26.363 [DEBUG] [Thread-196928] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:11:26.420 [DEBUG] [Thread-196928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:11:26.421 [DEBUG] [Thread-196928] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:11:26.421 [DEBUG] [Thread-196928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:11:26.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:11:26.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:11:26.480 [DEBUG] [Thread-196928] [transport.py] [_log()] userauth is OK
2026-02-15T03:11:26.480 [DEBUG] [Thread-196928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:11:26.480 [DEBUG] [Thread-196928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:11:26.480 [DEBUG] [Thread-196928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:11:26.480 [DEBUG] [Thread-196928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:11:26.499 [INFO] [Thread-196928] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:11:26.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-15T03:11:26.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:11:27.255 [DEBUG] [Thread-196928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:11:27.256 [DEBUG] [Thread-196928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:11:27.303 [DEBUG] [Thread-196928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:11:27.304 [DEBUG] [Thread-196928] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:11:27.313 [DEBUG] [Thread-196928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:11:27.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:11:27.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:11:27.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-15T03:11:27.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:11:27.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:11:27.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:11:27.350 [DEBUG] [Thread-196928] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:11:29.949 [DEBUG] [Thread-196930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:11:45.003 [DEBUG] [Thread-196931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:11:53.194 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:11:53.195 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:11:57.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:11:57.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:11:57.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-15T03:11:59.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 11, 35), 1.37, 90.88, 0.0, 40.22, 6.31, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:11:59.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:11:35
2026-02-15T03:11:59.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:11:59.717 [DEBUG] [Thread-196932] [transport.py] [_log()] starting thread (client mode): 0xa2d85270
2026-02-15T03:11:59.717 [DEBUG] [Thread-196932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:11:59.733 [DEBUG] [Thread-196932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:11:59.734 [INFO] [Thread-196932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:11:59.737 [DEBUG] [Thread-196932] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:11:59.737 [DEBUG] [Thread-196932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:11:59.737 [DEBUG] [Thread-196932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:11:59.737 [DEBUG] [Thread-196932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:11:59.737 [DEBUG] [Thread-196932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:11:59.737 [DEBUG] [Thread-196932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:11:59.737 [DEBUG] [Thread-196932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:11:59.737 [DEBUG] [Thread-196932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:11:59.737 [DEBUG] [Thread-196932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:11:59.737 [DEBUG] [Thread-196932] [transport.py] [_log()] client lang: <none>
2026-02-15T03:11:59.737 [DEBUG] [Thread-196932] [transport.py] [_log()] server lang: <none>
2026-02-15T03:11:59.737 [DEBUG] [Thread-196932] [transport.py] [_log()] kex follows: False
2026-02-15T03:11:59.737 [DEBUG] [Thread-196932] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:11:59.737 [DEBUG] [Thread-196932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:11:59.738 [DEBUG] [Thread-196932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:11:59.738 [DEBUG] [Thread-196932] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:11:59.738 [DEBUG] [Thread-196932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:11:59.738 [DEBUG] [Thread-196932] [transport.py] [_log()] Compression: none
2026-02-15T03:11:59.738 [DEBUG] [Thread-196932] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:11:59.756 [DEBUG] [Thread-196932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:11:59.757 [DEBUG] [Thread-196932] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:11:59.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:11:59.759 [DEBUG] [Thread-196932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:11:59.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:11:59.761 [DEBUG] [Thread-196932] [transport.py] [_log()] userauth is OK
2026-02-15T03:11:59.762 [DEBUG] [Thread-196932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:11:59.762 [DEBUG] [Thread-196932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:11:59.762 [DEBUG] [Thread-196932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:11:59.762 [DEBUG] [Thread-196932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:11:59.799 [INFO] [Thread-196932] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:11:59.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:12:00.039 [DEBUG] [Thread-196934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:12:00.435 [DEBUG] [Thread-196932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:12:00.435 [DEBUG] [Thread-196932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:12:00.436 [DEBUG] [Thread-196932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:12:00.476 [DEBUG] [Thread-196932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:12:00.477 [DEBUG] [Thread-196932] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:12:00.480 [DEBUG] [Thread-196932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:12:00.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:12:00.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:12:00.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:12:00.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:12:00.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:12:00.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:12:00.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:12:00.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:12:00.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:12:00.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.049412 -999.00   +6.00  25.30     92   +4.80 1 2 1 3 1     0    0 1.32 4.15 .NES. 25.3 25.3 139.6 36.0 6.5 -24.0 6.3 -23.2 6.2 -22.2 6.5 -23.4
2026-02-15T03:12:00.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:12:00.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:12:00.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.049412
2026-02-15T03:12:00.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:12:00.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:12:00.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:12:00.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:12:00.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:12:00.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:11:35', tmtdew=1.37, humidity=90.88, cloud=0.0, wind=40.22, temperature=6.31, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:11:09.197', atlas_cloud=2, atlas_rain=1, zp_data=[2.462249999999999, 2.5402500000000003, 2.53125, 2.453499999999999, nan, nan, nan, nan, nan, 0.4239999999999995, 1.06325, 2.2379999999999995, 2.9535, 2.7112499999999997, 2.781999999999999, 2.3499999999999996, 0.39724999999999966, 0.2554999999999996, 0.4429999999999996, 0.903249999999999, 1.626999999999999, 1.6137499999999987, 1.8232500000000007, 0.5282499999999999, 0.317499999999999, 0.2829999999999995, 0.39525000000000077, 0.2925000000000004, 0.4065000000000003, 0.4955000000000007, 0.5115000000000016, 0.3650000000000011, 0.1947499999999991], zp_timestamp='2026-02-15T01:09:00')
2026-02-15T03:12:00.507 [DEBUG] [Thread-196932] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:12:00.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-15T03:12:00.614 [DEBUG] [Thread-196936] [transport.py] [_log()] starting thread (client mode): 0xa57d5570
2026-02-15T03:12:00.614 [DEBUG] [Thread-196936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:12:00.631 [DEBUG] [Thread-196936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:12:00.632 [INFO] [Thread-196936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:12:00.639 [DEBUG] [Thread-196936] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:12:00.639 [DEBUG] [Thread-196936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:12:00.639 [DEBUG] [Thread-196936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:12:00.639 [DEBUG] [Thread-196936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:12:00.639 [DEBUG] [Thread-196936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:12:00.640 [DEBUG] [Thread-196936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:12:00.640 [DEBUG] [Thread-196936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:12:00.640 [DEBUG] [Thread-196936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:12:00.640 [DEBUG] [Thread-196936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:12:00.640 [DEBUG] [Thread-196936] [transport.py] [_log()] client lang: <none>
2026-02-15T03:12:00.640 [DEBUG] [Thread-196936] [transport.py] [_log()] server lang: <none>
2026-02-15T03:12:00.640 [DEBUG] [Thread-196936] [transport.py] [_log()] kex follows: False
2026-02-15T03:12:00.640 [DEBUG] [Thread-196936] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:12:00.640 [DEBUG] [Thread-196936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:12:00.640 [DEBUG] [Thread-196936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:12:00.640 [DEBUG] [Thread-196936] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:12:00.640 [DEBUG] [Thread-196936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:12:00.640 [DEBUG] [Thread-196936] [transport.py] [_log()] Compression: none
2026-02-15T03:12:00.640 [DEBUG] [Thread-196936] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:12:00.697 [DEBUG] [Thread-196936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:12:00.697 [DEBUG] [Thread-196936] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:12:00.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:12:00.699 [DEBUG] [Thread-196936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:12:00.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:12:00.753 [DEBUG] [Thread-196936] [transport.py] [_log()] userauth is OK
2026-02-15T03:12:00.754 [DEBUG] [Thread-196936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:12:00.754 [DEBUG] [Thread-196936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:12:00.754 [DEBUG] [Thread-196936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:12:00.754 [DEBUG] [Thread-196936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:12:00.773 [INFO] [Thread-196936] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:12:00.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-15T03:12:00.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:12:01.572 [DEBUG] [Thread-196936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:12:01.573 [DEBUG] [Thread-196936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:12:01.621 [DEBUG] [Thread-196936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:12:01.621 [DEBUG] [Thread-196936] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:12:01.630 [DEBUG] [Thread-196936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:12:01.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:12:01.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-15T03:12:01.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-15T03:12:01.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:12:01.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:12:01.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:12:01.666 [DEBUG] [Thread-196936] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:12:15.075 [DEBUG] [Thread-196938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:12:19.657 [DEBUG] [Thread-196939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:12:30.123 [DEBUG] [Thread-196940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:12:31.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:12:31.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:12:31.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-15T03:12:33.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 12, 10), 0.98, 93.47, 0.0, 34.44, 6.09, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:12:33.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:12:10
2026-02-15T03:12:33.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:12:34.395 [DEBUG] [Thread-196941] [transport.py] [_log()] starting thread (client mode): 0xa2de3130
2026-02-15T03:12:34.395 [DEBUG] [Thread-196941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:12:34.395 [DEBUG] [Thread-196941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:12:34.395 [INFO] [Thread-196941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:12:34.400 [DEBUG] [Thread-196941] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:12:34.400 [DEBUG] [Thread-196941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:12:34.400 [DEBUG] [Thread-196941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:12:34.400 [DEBUG] [Thread-196941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:12:34.400 [DEBUG] [Thread-196941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:12:34.400 [DEBUG] [Thread-196941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:12:34.400 [DEBUG] [Thread-196941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:12:34.401 [DEBUG] [Thread-196941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:12:34.401 [DEBUG] [Thread-196941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:12:34.401 [DEBUG] [Thread-196941] [transport.py] [_log()] client lang: <none>
2026-02-15T03:12:34.401 [DEBUG] [Thread-196941] [transport.py] [_log()] server lang: <none>
2026-02-15T03:12:34.401 [DEBUG] [Thread-196941] [transport.py] [_log()] kex follows: False
2026-02-15T03:12:34.401 [DEBUG] [Thread-196941] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:12:34.401 [DEBUG] [Thread-196941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:12:34.401 [DEBUG] [Thread-196941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:12:34.401 [DEBUG] [Thread-196941] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:12:34.401 [DEBUG] [Thread-196941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:12:34.401 [DEBUG] [Thread-196941] [transport.py] [_log()] Compression: none
2026-02-15T03:12:34.401 [DEBUG] [Thread-196941] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:12:34.418 [DEBUG] [Thread-196941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:12:34.418 [DEBUG] [Thread-196941] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:12:34.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:12:34.419 [DEBUG] [Thread-196941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:12:34.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:12:34.421 [DEBUG] [Thread-196941] [transport.py] [_log()] userauth is OK
2026-02-15T03:12:34.421 [DEBUG] [Thread-196941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:12:34.421 [DEBUG] [Thread-196941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:12:34.422 [DEBUG] [Thread-196941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:12:34.422 [DEBUG] [Thread-196941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:12:34.440 [INFO] [Thread-196941] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:12:34.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:12:35.080 [DEBUG] [Thread-196941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:12:35.081 [DEBUG] [Thread-196941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:12:35.081 [DEBUG] [Thread-196941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:12:35.121 [DEBUG] [Thread-196941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:12:35.121 [DEBUG] [Thread-196941] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:12:35.124 [DEBUG] [Thread-196941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:12:35.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:12:35.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:12:35.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:12:35.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:12:35.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:12:35.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:12:35.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:12:35.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:12:35.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:12:35.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.049759 -999.00   +6.00  30.52     92   +4.80 1 2 2 3 1     0    0 1.33 4.08 .NES. 30.5 30.5 131.4 38.5 6.5 -24.1 6.4 -23.3 6.2 -22.2 6.6 -23.5
2026-02-15T03:12:35.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:12:35.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:12:35.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.049759
2026-02-15T03:12:35.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:12:35.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:12:35.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:12:35.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:12:35.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:12:35.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:12:10', tmtdew=0.98, humidity=93.47, cloud=0.0, wind=34.44, temperature=6.09, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:11:39.178', atlas_cloud=2, atlas_rain=1, zp_data=[2.462249999999999, 2.5402500000000003, 2.53125, 2.453499999999999, nan, nan, nan, nan, nan, 0.4239999999999995, 1.06325, 2.2379999999999995, 2.9535, 2.7112499999999997, 2.781999999999999, 2.3499999999999996, 0.39724999999999966, 0.2554999999999996, 0.4429999999999996, 0.903249999999999, 1.626999999999999, 1.6137499999999987, 1.8232500000000007, 0.5282499999999999, 0.317499999999999, 0.2829999999999995, 0.39525000000000077, 0.2925000000000004, 0.4065000000000003, 0.4955000000000007, 0.5115000000000016, 0.3650000000000011, 0.1947499999999991], zp_timestamp='2026-02-15T01:09:00')
2026-02-15T03:12:35.141 [DEBUG] [Thread-196941] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:12:35.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-15T03:12:35.229 [DEBUG] [Thread-196944] [transport.py] [_log()] starting thread (client mode): 0xa2d85fc0
2026-02-15T03:12:35.229 [DEBUG] [Thread-196944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:12:35.244 [DEBUG] [Thread-196944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:12:35.244 [INFO] [Thread-196944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:12:35.252 [DEBUG] [Thread-196944] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:12:35.252 [DEBUG] [Thread-196944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:12:35.252 [DEBUG] [Thread-196944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:12:35.252 [DEBUG] [Thread-196944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:12:35.252 [DEBUG] [Thread-196944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:12:35.252 [DEBUG] [Thread-196944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:12:35.252 [DEBUG] [Thread-196944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:12:35.252 [DEBUG] [Thread-196944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:12:35.252 [DEBUG] [Thread-196944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:12:35.252 [DEBUG] [Thread-196944] [transport.py] [_log()] client lang: <none>
2026-02-15T03:12:35.252 [DEBUG] [Thread-196944] [transport.py] [_log()] server lang: <none>
2026-02-15T03:12:35.252 [DEBUG] [Thread-196944] [transport.py] [_log()] kex follows: False
2026-02-15T03:12:35.252 [DEBUG] [Thread-196944] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:12:35.252 [DEBUG] [Thread-196944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:12:35.252 [DEBUG] [Thread-196944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:12:35.252 [DEBUG] [Thread-196944] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:12:35.252 [DEBUG] [Thread-196944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:12:35.252 [DEBUG] [Thread-196944] [transport.py] [_log()] Compression: none
2026-02-15T03:12:35.252 [DEBUG] [Thread-196944] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:12:35.312 [DEBUG] [Thread-196944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:12:35.312 [DEBUG] [Thread-196944] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:12:35.312 [DEBUG] [Thread-196944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:12:35.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:12:35.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:12:35.370 [DEBUG] [Thread-196944] [transport.py] [_log()] userauth is OK
2026-02-15T03:12:35.370 [DEBUG] [Thread-196944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:12:35.370 [DEBUG] [Thread-196944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:12:35.370 [DEBUG] [Thread-196944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:12:35.370 [DEBUG] [Thread-196944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:12:35.384 [INFO] [Thread-196944] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:12:35.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:12:35.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:12:36.233 [DEBUG] [Thread-196944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:12:36.233 [DEBUG] [Thread-196944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:12:36.280 [DEBUG] [Thread-196944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:12:36.280 [DEBUG] [Thread-196944] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:12:36.290 [DEBUG] [Thread-196944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:12:36.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:12:36.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-15T03:12:36.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-15T03:12:36.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:12:36.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:12:36.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:12:36.328 [DEBUG] [Thread-196944] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:12:45.162 [DEBUG] [Thread-196946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:12:53.397 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:12:53.398 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:13:00.213 [DEBUG] [Thread-196947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:13:06.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:13:06.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:13:06.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-15T03:13:08.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 12, 45), 0.98, 93.46, 0.0, 37.16, 6.07, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:13:08.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:12:45
2026-02-15T03:13:08.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:13:08.861 [DEBUG] [Thread-196948] [transport.py] [_log()] starting thread (client mode): 0xa2d865f0
2026-02-15T03:13:08.862 [DEBUG] [Thread-196948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:13:08.883 [DEBUG] [Thread-196948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:13:08.884 [INFO] [Thread-196948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:13:08.885 [DEBUG] [Thread-196948] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:13:08.885 [DEBUG] [Thread-196948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:13:08.885 [DEBUG] [Thread-196948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:13:08.885 [DEBUG] [Thread-196948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:13:08.885 [DEBUG] [Thread-196948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:13:08.885 [DEBUG] [Thread-196948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:13:08.885 [DEBUG] [Thread-196948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:13:08.885 [DEBUG] [Thread-196948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:13:08.885 [DEBUG] [Thread-196948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:13:08.885 [DEBUG] [Thread-196948] [transport.py] [_log()] client lang: <none>
2026-02-15T03:13:08.885 [DEBUG] [Thread-196948] [transport.py] [_log()] server lang: <none>
2026-02-15T03:13:08.885 [DEBUG] [Thread-196948] [transport.py] [_log()] kex follows: False
2026-02-15T03:13:08.885 [DEBUG] [Thread-196948] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:13:08.885 [DEBUG] [Thread-196948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:13:08.885 [DEBUG] [Thread-196948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:13:08.886 [DEBUG] [Thread-196948] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:13:08.886 [DEBUG] [Thread-196948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:13:08.886 [DEBUG] [Thread-196948] [transport.py] [_log()] Compression: none
2026-02-15T03:13:08.886 [DEBUG] [Thread-196948] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:13:08.901 [DEBUG] [Thread-196948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:13:08.902 [DEBUG] [Thread-196948] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:13:08.902 [DEBUG] [Thread-196948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:13:08.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:13:08.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:13:08.904 [DEBUG] [Thread-196948] [transport.py] [_log()] userauth is OK
2026-02-15T03:13:08.905 [DEBUG] [Thread-196948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:13:08.905 [DEBUG] [Thread-196948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:13:08.905 [DEBUG] [Thread-196948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:13:08.905 [DEBUG] [Thread-196948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:13:08.924 [INFO] [Thread-196948] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:13:08.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:13:09.737 [DEBUG] [Thread-196948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:13:09.737 [DEBUG] [Thread-196948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:13:09.738 [DEBUG] [Thread-196948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:13:09.778 [DEBUG] [Thread-196948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:13:09.779 [DEBUG] [Thread-196948] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:13:09.782 [DEBUG] [Thread-196948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:13:09.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:13:09.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:13:09.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:13:09.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:13:09.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:13:09.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:13:09.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:13:09.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:13:09.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:13:09.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.050106 -999.00   +6.00  31.16     92   +4.80 1 2 2 3 1     0    0 1.31 4.26 .NES. 31.2 31.2 134.6 38.6 6.6 -24.0 6.4 -23.2 6.2 -22.3 6.5 -23.5
2026-02-15T03:13:09.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:13:09.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:13:09.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.050106
2026-02-15T03:13:09.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:13:09.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:13:09.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:13:09.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:13:09.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:13:09.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:12:45', tmtdew=0.98, humidity=93.46, cloud=0.0, wind=37.16, temperature=6.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:12:09.158', atlas_cloud=2, atlas_rain=1, zp_data=[2.4007499999999995, 2.4642500000000007, 2.4292500000000006, 1.4614999999999991, nan, nan, nan, nan, nan, 0.3620000000000001, 1.2882499999999997, 2.0759999999999996, 2.8809999999999993, nan, nan, nan, 0.37824999999999953, 0.21250000000000036, 0.4604999999999979, 0.9022499999999987, 1.6759999999999984, 1.699749999999998, 1.7662500000000012, 0.5372500000000002, 0.27699999999999925, 0.28850000000000087, 0.34275000000000055, 0.31350000000000033, 0.43599999999999994, 0.4660000000000011, 0.4780000000000024, 0.3720000000000008, 0.17974999999999852], zp_timestamp='2026-02-15T01:11:00')
2026-02-15T03:13:09.811 [DEBUG] [Thread-196948] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:13:09.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-15T03:13:09.907 [DEBUG] [Thread-196951] [transport.py] [_log()] starting thread (client mode): 0xa2d86080
2026-02-15T03:13:09.907 [DEBUG] [Thread-196951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:13:09.922 [DEBUG] [Thread-196951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:13:09.922 [INFO] [Thread-196951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:13:09.930 [DEBUG] [Thread-196951] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:13:09.930 [DEBUG] [Thread-196951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:13:09.930 [DEBUG] [Thread-196951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:13:09.930 [DEBUG] [Thread-196951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:13:09.930 [DEBUG] [Thread-196951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:13:09.931 [DEBUG] [Thread-196951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:13:09.931 [DEBUG] [Thread-196951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:13:09.931 [DEBUG] [Thread-196951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:13:09.931 [DEBUG] [Thread-196951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:13:09.931 [DEBUG] [Thread-196951] [transport.py] [_log()] client lang: <none>
2026-02-15T03:13:09.931 [DEBUG] [Thread-196951] [transport.py] [_log()] server lang: <none>
2026-02-15T03:13:09.931 [DEBUG] [Thread-196951] [transport.py] [_log()] kex follows: False
2026-02-15T03:13:09.931 [DEBUG] [Thread-196951] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:13:09.931 [DEBUG] [Thread-196951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:13:09.931 [DEBUG] [Thread-196951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:13:09.931 [DEBUG] [Thread-196951] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:13:09.931 [DEBUG] [Thread-196951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:13:09.931 [DEBUG] [Thread-196951] [transport.py] [_log()] Compression: none
2026-02-15T03:13:09.931 [DEBUG] [Thread-196951] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:13:09.988 [DEBUG] [Thread-196951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:13:09.988 [DEBUG] [Thread-196951] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:13:09.989 [DEBUG] [Thread-196951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:13:09.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:13:09.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:13:10.044 [DEBUG] [Thread-196951] [transport.py] [_log()] userauth is OK
2026-02-15T03:13:10.044 [DEBUG] [Thread-196951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:13:10.044 [DEBUG] [Thread-196951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:13:10.044 [DEBUG] [Thread-196951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:13:10.044 [DEBUG] [Thread-196951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:13:10.064 [INFO] [Thread-196951] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:13:10.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-15T03:13:10.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:13:10.879 [DEBUG] [Thread-196951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:13:10.880 [DEBUG] [Thread-196951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:13:10.927 [DEBUG] [Thread-196951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:13:10.928 [DEBUG] [Thread-196951] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:13:10.937 [DEBUG] [Thread-196951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:13:10.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:13:10.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-15T03:13:10.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:13:10.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:13:10.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:13:10.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:13:10.973 [DEBUG] [Thread-196951] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:13:15.250 [DEBUG] [Thread-196953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:13:19.720 [DEBUG] [Thread-196954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:13:30.300 [DEBUG] [Thread-196955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:13:40.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:13:40.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:13:40.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-15T03:13:43.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 13, 20), 0.99, 93.44, 0.0, 38.39, 6.07, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:13:43.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:13:20
2026-02-15T03:13:43.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:13:43.659 [DEBUG] [Thread-196956] [transport.py] [_log()] starting thread (client mode): 0xa2d86a10
2026-02-15T03:13:43.659 [DEBUG] [Thread-196956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:13:43.680 [DEBUG] [Thread-196956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:13:43.680 [INFO] [Thread-196956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:13:43.683 [DEBUG] [Thread-196956] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:13:43.683 [DEBUG] [Thread-196956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:13:43.683 [DEBUG] [Thread-196956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:13:43.683 [DEBUG] [Thread-196956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:13:43.683 [DEBUG] [Thread-196956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:13:43.683 [DEBUG] [Thread-196956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:13:43.683 [DEBUG] [Thread-196956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:13:43.683 [DEBUG] [Thread-196956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:13:43.683 [DEBUG] [Thread-196956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:13:43.683 [DEBUG] [Thread-196956] [transport.py] [_log()] client lang: <none>
2026-02-15T03:13:43.683 [DEBUG] [Thread-196956] [transport.py] [_log()] server lang: <none>
2026-02-15T03:13:43.683 [DEBUG] [Thread-196956] [transport.py] [_log()] kex follows: False
2026-02-15T03:13:43.683 [DEBUG] [Thread-196956] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:13:43.683 [DEBUG] [Thread-196956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:13:43.683 [DEBUG] [Thread-196956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:13:43.683 [DEBUG] [Thread-196956] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:13:43.683 [DEBUG] [Thread-196956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:13:43.683 [DEBUG] [Thread-196956] [transport.py] [_log()] Compression: none
2026-02-15T03:13:43.683 [DEBUG] [Thread-196956] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:13:43.699 [DEBUG] [Thread-196956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:13:43.699 [DEBUG] [Thread-196956] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:13:43.700 [DEBUG] [Thread-196956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:13:43.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:13:43.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:13:43.700 [DEBUG] [Thread-196956] [transport.py] [_log()] userauth is OK
2026-02-15T03:13:43.700 [DEBUG] [Thread-196956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:13:43.700 [DEBUG] [Thread-196956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:13:43.700 [DEBUG] [Thread-196956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:13:43.700 [DEBUG] [Thread-196956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:13:43.709 [INFO] [Thread-196956] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:13:43.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:13:44.336 [DEBUG] [Thread-196956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:13:44.337 [DEBUG] [Thread-196956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:13:44.337 [DEBUG] [Thread-196956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:13:44.377 [DEBUG] [Thread-196956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:13:44.377 [DEBUG] [Thread-196956] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:13:44.381 [DEBUG] [Thread-196956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:13:44.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:13:44.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:13:44.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:13:44.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:13:44.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:13:44.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:13:44.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:13:44.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:13:44.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:13:44.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.050453 -999.00   +6.00  27.41     91   +4.80 1 2 1 3 1     0    0 1.32 4.36 .NES. 27.4 27.4 134.2 38.0 6.5 -24.1 6.3 -23.3 6.1 -22.1 6.5 -23.5
2026-02-15T03:13:44.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:13:44.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:13:44.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.050453
2026-02-15T03:13:44.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:13:44.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:13:44.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:13:44.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:13:44.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:13:44.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:13:20', tmtdew=0.99, humidity=93.44, cloud=0.0, wind=38.39, temperature=6.07, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:12:39.139', atlas_cloud=2, atlas_rain=1, zp_data=[2.4007499999999995, 2.4642500000000007, 2.4292500000000006, 1.4614999999999991, nan, nan, nan, nan, nan, 0.3620000000000001, 1.2882499999999997, 2.0759999999999996, 2.8809999999999993, nan, nan, nan, 0.37824999999999953, 0.21250000000000036, 0.4604999999999979, 0.9022499999999987, 1.6759999999999984, 1.699749999999998, 1.7662500000000012, 0.5372500000000002, 0.27699999999999925, 0.28850000000000087, 0.34275000000000055, 0.31350000000000033, 0.43599999999999994, 0.4660000000000011, 0.4780000000000024, 0.3720000000000008, 0.17974999999999852], zp_timestamp='2026-02-15T01:11:00')
2026-02-15T03:13:44.404 [DEBUG] [Thread-196956] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:13:44.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-15T03:13:44.494 [DEBUG] [Thread-196959] [transport.py] [_log()] starting thread (client mode): 0xa2d846d0
2026-02-15T03:13:44.494 [DEBUG] [Thread-196959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:13:44.510 [DEBUG] [Thread-196959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:13:44.510 [INFO] [Thread-196959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:13:44.518 [DEBUG] [Thread-196959] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:13:44.518 [DEBUG] [Thread-196959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:13:44.518 [DEBUG] [Thread-196959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:13:44.518 [DEBUG] [Thread-196959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:13:44.519 [DEBUG] [Thread-196959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:13:44.519 [DEBUG] [Thread-196959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:13:44.519 [DEBUG] [Thread-196959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:13:44.519 [DEBUG] [Thread-196959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:13:44.519 [DEBUG] [Thread-196959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:13:44.519 [DEBUG] [Thread-196959] [transport.py] [_log()] client lang: <none>
2026-02-15T03:13:44.519 [DEBUG] [Thread-196959] [transport.py] [_log()] server lang: <none>
2026-02-15T03:13:44.519 [DEBUG] [Thread-196959] [transport.py] [_log()] kex follows: False
2026-02-15T03:13:44.519 [DEBUG] [Thread-196959] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:13:44.519 [DEBUG] [Thread-196959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:13:44.519 [DEBUG] [Thread-196959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:13:44.519 [DEBUG] [Thread-196959] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:13:44.519 [DEBUG] [Thread-196959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:13:44.519 [DEBUG] [Thread-196959] [transport.py] [_log()] Compression: none
2026-02-15T03:13:44.519 [DEBUG] [Thread-196959] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:13:44.578 [DEBUG] [Thread-196959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:13:44.579 [DEBUG] [Thread-196959] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:13:44.579 [DEBUG] [Thread-196959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:13:44.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:13:44.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:13:44.637 [DEBUG] [Thread-196959] [transport.py] [_log()] userauth is OK
2026-02-15T03:13:44.637 [DEBUG] [Thread-196959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:13:44.637 [DEBUG] [Thread-196959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:13:44.638 [DEBUG] [Thread-196959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:13:44.638 [DEBUG] [Thread-196959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:13:44.656 [INFO] [Thread-196959] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:13:44.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-15T03:13:44.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:13:45.336 [DEBUG] [Thread-196961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:13:45.505 [DEBUG] [Thread-196959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:13:45.505 [DEBUG] [Thread-196959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:13:45.553 [DEBUG] [Thread-196959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:13:45.554 [DEBUG] [Thread-196959] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:13:45.562 [DEBUG] [Thread-196959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:13:45.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:13:45.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-15T03:13:45.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-15T03:13:45.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:13:45.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:13:45.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:13:45.600 [DEBUG] [Thread-196959] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:13:53.602 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:13:53.603 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:14:00.389 [DEBUG] [Thread-196962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:14:15.428 [DEBUG] [Thread-196963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:14:15.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:14:15.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:14:15.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T03:14:17.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 13, 55), 0.94, 93.41, 0.0, 31.83, 5.99, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:14:17.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:13:55
2026-02-15T03:14:17.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:14:18.077 [DEBUG] [Thread-196964] [transport.py] [_log()] starting thread (client mode): 0xa2d868c0
2026-02-15T03:14:18.077 [DEBUG] [Thread-196964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:14:18.097 [DEBUG] [Thread-196964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:14:18.097 [INFO] [Thread-196964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:14:18.100 [DEBUG] [Thread-196964] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:14:18.100 [DEBUG] [Thread-196964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:14:18.100 [DEBUG] [Thread-196964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:14:18.100 [DEBUG] [Thread-196964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:14:18.100 [DEBUG] [Thread-196964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:14:18.100 [DEBUG] [Thread-196964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:14:18.100 [DEBUG] [Thread-196964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:14:18.100 [DEBUG] [Thread-196964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:14:18.100 [DEBUG] [Thread-196964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:14:18.100 [DEBUG] [Thread-196964] [transport.py] [_log()] client lang: <none>
2026-02-15T03:14:18.100 [DEBUG] [Thread-196964] [transport.py] [_log()] server lang: <none>
2026-02-15T03:14:18.100 [DEBUG] [Thread-196964] [transport.py] [_log()] kex follows: False
2026-02-15T03:14:18.100 [DEBUG] [Thread-196964] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:14:18.100 [DEBUG] [Thread-196964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:14:18.100 [DEBUG] [Thread-196964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:14:18.100 [DEBUG] [Thread-196964] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:14:18.100 [DEBUG] [Thread-196964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:14:18.100 [DEBUG] [Thread-196964] [transport.py] [_log()] Compression: none
2026-02-15T03:14:18.100 [DEBUG] [Thread-196964] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:14:18.117 [DEBUG] [Thread-196964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:14:18.118 [DEBUG] [Thread-196964] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:14:18.118 [DEBUG] [Thread-196964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:14:18.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:14:18.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:14:18.120 [DEBUG] [Thread-196964] [transport.py] [_log()] userauth is OK
2026-02-15T03:14:18.120 [DEBUG] [Thread-196964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:14:18.120 [DEBUG] [Thread-196964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:14:18.120 [DEBUG] [Thread-196964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:14:18.120 [DEBUG] [Thread-196964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:14:18.138 [INFO] [Thread-196964] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:14:18.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:14:18.774 [DEBUG] [Thread-196964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:14:18.774 [DEBUG] [Thread-196964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:14:18.775 [DEBUG] [Thread-196964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:14:18.815 [DEBUG] [Thread-196964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:14:18.815 [DEBUG] [Thread-196964] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:14:18.818 [DEBUG] [Thread-196964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:14:18.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:14:18.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:14:18.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:14:18.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:14:18.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:14:18.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:14:18.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:14:18.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:14:18.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:14:18.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.051148 -999.00   +6.00  32.36     91   +4.80 1 2 2 3 1     0    0 1.32 3.84 .NESw 32.4 32.4 131.2 38.1 6.5 -24.2 6.4 -23.3 6.1 -22.2 6.5 -23.5
2026-02-15T03:14:18.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:14:18.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:14:18.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.051148
2026-02-15T03:14:18.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:14:18.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:14:18.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:14:18.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:14:18.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:14:18.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:13:55', tmtdew=0.94, humidity=93.41, cloud=0.0, wind=31.83, temperature=5.99, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:13:39.187', atlas_cloud=2, atlas_rain=1, zp_data=[2.4007499999999995, 2.4642500000000007, 2.4292500000000006, 1.4614999999999991, nan, nan, nan, nan, nan, 0.3620000000000001, 1.2882499999999997, 2.0759999999999996, 2.8809999999999993, nan, nan, nan, 0.37824999999999953, 0.21250000000000036, 0.4604999999999979, 0.9022499999999987, 1.6759999999999984, 1.699749999999998, 1.7662500000000012, 0.5372500000000002, 0.27699999999999925, 0.28850000000000087, 0.34275000000000055, 0.31350000000000033, 0.43599999999999994, 0.4660000000000011, 0.4780000000000024, 0.3720000000000008, 0.17974999999999852], zp_timestamp='2026-02-15T01:11:00')
2026-02-15T03:14:18.840 [DEBUG] [Thread-196964] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:14:18.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-15T03:14:18.936 [DEBUG] [Thread-196967] [transport.py] [_log()] starting thread (client mode): 0xa2d87fd0
2026-02-15T03:14:18.937 [DEBUG] [Thread-196967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:14:18.951 [DEBUG] [Thread-196967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:14:18.951 [INFO] [Thread-196967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:14:18.958 [DEBUG] [Thread-196967] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:14:18.959 [DEBUG] [Thread-196967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:14:18.959 [DEBUG] [Thread-196967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:14:18.959 [DEBUG] [Thread-196967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:14:18.959 [DEBUG] [Thread-196967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:14:18.959 [DEBUG] [Thread-196967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:14:18.959 [DEBUG] [Thread-196967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:14:18.959 [DEBUG] [Thread-196967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:14:18.959 [DEBUG] [Thread-196967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:14:18.959 [DEBUG] [Thread-196967] [transport.py] [_log()] client lang: <none>
2026-02-15T03:14:18.959 [DEBUG] [Thread-196967] [transport.py] [_log()] server lang: <none>
2026-02-15T03:14:18.959 [DEBUG] [Thread-196967] [transport.py] [_log()] kex follows: False
2026-02-15T03:14:18.959 [DEBUG] [Thread-196967] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:14:18.959 [DEBUG] [Thread-196967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:14:18.959 [DEBUG] [Thread-196967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:14:18.959 [DEBUG] [Thread-196967] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:14:18.959 [DEBUG] [Thread-196967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:14:18.959 [DEBUG] [Thread-196967] [transport.py] [_log()] Compression: none
2026-02-15T03:14:18.959 [DEBUG] [Thread-196967] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:14:19.018 [DEBUG] [Thread-196967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:14:19.019 [DEBUG] [Thread-196967] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:14:19.019 [DEBUG] [Thread-196967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:14:19.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:14:19.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:14:19.078 [DEBUG] [Thread-196967] [transport.py] [_log()] userauth is OK
2026-02-15T03:14:19.078 [DEBUG] [Thread-196967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:14:19.079 [DEBUG] [Thread-196967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:14:19.079 [DEBUG] [Thread-196967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:14:19.079 [DEBUG] [Thread-196967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:14:19.097 [INFO] [Thread-196967] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:14:19.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:14:19.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:14:19.777 [DEBUG] [Thread-196969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:14:19.908 [DEBUG] [Thread-196967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:14:19.908 [DEBUG] [Thread-196967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:14:19.960 [DEBUG] [Thread-196967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:14:19.960 [DEBUG] [Thread-196967] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:14:19.973 [DEBUG] [Thread-196967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:14:19.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:14:19.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-15T03:14:19.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-15T03:14:20.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:14:20.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:14:20.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:14:20.017 [DEBUG] [Thread-196967] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:14:30.465 [DEBUG] [Thread-196970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:14:45.516 [DEBUG] [Thread-196971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:14:50.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:14:50.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:14:50.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-15T03:14:51.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 14, 31), 0.94, 93.42, 0.0, 32.25, 6.0, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:14:51.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:14:31
2026-02-15T03:14:52.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:14:52.382 [DEBUG] [Thread-196972] [transport.py] [_log()] starting thread (client mode): 0xa2d85990
2026-02-15T03:14:52.382 [DEBUG] [Thread-196972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:14:52.402 [DEBUG] [Thread-196972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:14:52.402 [INFO] [Thread-196972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:14:52.405 [DEBUG] [Thread-196972] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:14:52.405 [DEBUG] [Thread-196972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:14:52.405 [DEBUG] [Thread-196972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:14:52.405 [DEBUG] [Thread-196972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:14:52.406 [DEBUG] [Thread-196972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:14:52.406 [DEBUG] [Thread-196972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:14:52.406 [DEBUG] [Thread-196972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:14:52.406 [DEBUG] [Thread-196972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:14:52.406 [DEBUG] [Thread-196972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:14:52.406 [DEBUG] [Thread-196972] [transport.py] [_log()] client lang: <none>
2026-02-15T03:14:52.406 [DEBUG] [Thread-196972] [transport.py] [_log()] server lang: <none>
2026-02-15T03:14:52.406 [DEBUG] [Thread-196972] [transport.py] [_log()] kex follows: False
2026-02-15T03:14:52.406 [DEBUG] [Thread-196972] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:14:52.406 [DEBUG] [Thread-196972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:14:52.406 [DEBUG] [Thread-196972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:14:52.406 [DEBUG] [Thread-196972] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:14:52.406 [DEBUG] [Thread-196972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:14:52.407 [DEBUG] [Thread-196972] [transport.py] [_log()] Compression: none
2026-02-15T03:14:52.407 [DEBUG] [Thread-196972] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:14:52.425 [DEBUG] [Thread-196972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:14:52.425 [DEBUG] [Thread-196972] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:14:52.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:14:52.427 [DEBUG] [Thread-196972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:14:52.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:14:52.429 [DEBUG] [Thread-196972] [transport.py] [_log()] userauth is OK
2026-02-15T03:14:52.430 [DEBUG] [Thread-196972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:14:52.431 [DEBUG] [Thread-196972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:14:52.431 [DEBUG] [Thread-196972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:14:52.431 [DEBUG] [Thread-196972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:14:52.446 [INFO] [Thread-196972] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:14:52.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:14:53.111 [DEBUG] [Thread-196972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:14:53.111 [DEBUG] [Thread-196972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:14:53.111 [DEBUG] [Thread-196972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:14:53.153 [DEBUG] [Thread-196972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:14:53.153 [DEBUG] [Thread-196972] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:14:53.155 [DEBUG] [Thread-196972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:14:53.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:14:53.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:14:53.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:14:53.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:14:53.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:14:53.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:14:53.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:14:53.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:14:53.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:14:53.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.051495 -999.00   +6.00  29.25     91   +4.80 1 2 1 3 1     0    0 1.33 3.86 .NESw 29.2 29.2 133.4 36.6 6.5 -24.1 6.4 -23.5 6.1 -22.1 6.5 -23.4
2026-02-15T03:14:53.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:14:53.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:14:53.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.051495
2026-02-15T03:14:53.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:14:53.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:14:53.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:14:53.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:14:53.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:14:53.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:14:31', tmtdew=0.94, humidity=93.42, cloud=0.0, wind=32.25, temperature=6.0, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:14:09.168', atlas_cloud=2, atlas_rain=1, zp_data=[2.4007499999999995, 2.4642500000000007, 2.4292500000000006, 1.4614999999999991, nan, nan, nan, nan, nan, 0.3620000000000001, 1.2882499999999997, 2.0759999999999996, 2.8809999999999993, nan, nan, nan, 0.37824999999999953, 0.21250000000000036, 0.4604999999999979, 0.9022499999999987, 1.6759999999999984, 1.699749999999998, 1.7662500000000012, 0.5372500000000002, 0.27699999999999925, 0.28850000000000087, 0.34275000000000055, 0.31350000000000033, 0.43599999999999994, 0.4660000000000011, 0.4780000000000024, 0.3720000000000008, 0.17974999999999852], zp_timestamp='2026-02-15T01:11:00')
2026-02-15T03:14:53.180 [DEBUG] [Thread-196972] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:14:53.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:14:53.276 [DEBUG] [Thread-196975] [transport.py] [_log()] starting thread (client mode): 0xa2d87fd0
2026-02-15T03:14:53.276 [DEBUG] [Thread-196975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:14:53.290 [DEBUG] [Thread-196975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:14:53.290 [INFO] [Thread-196975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:14:53.298 [DEBUG] [Thread-196975] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:14:53.298 [DEBUG] [Thread-196975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:14:53.299 [DEBUG] [Thread-196975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:14:53.299 [DEBUG] [Thread-196975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:14:53.299 [DEBUG] [Thread-196975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:14:53.299 [DEBUG] [Thread-196975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:14:53.299 [DEBUG] [Thread-196975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:14:53.299 [DEBUG] [Thread-196975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:14:53.299 [DEBUG] [Thread-196975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:14:53.299 [DEBUG] [Thread-196975] [transport.py] [_log()] client lang: <none>
2026-02-15T03:14:53.299 [DEBUG] [Thread-196975] [transport.py] [_log()] server lang: <none>
2026-02-15T03:14:53.299 [DEBUG] [Thread-196975] [transport.py] [_log()] kex follows: False
2026-02-15T03:14:53.299 [DEBUG] [Thread-196975] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:14:53.299 [DEBUG] [Thread-196975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:14:53.299 [DEBUG] [Thread-196975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:14:53.299 [DEBUG] [Thread-196975] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:14:53.299 [DEBUG] [Thread-196975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:14:53.299 [DEBUG] [Thread-196975] [transport.py] [_log()] Compression: none
2026-02-15T03:14:53.299 [DEBUG] [Thread-196975] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:14:53.364 [DEBUG] [Thread-196975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:14:53.364 [DEBUG] [Thread-196975] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:14:53.365 [DEBUG] [Thread-196975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:14:53.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:14:53.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:14:53.421 [DEBUG] [Thread-196975] [transport.py] [_log()] userauth is OK
2026-02-15T03:14:53.421 [DEBUG] [Thread-196975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:14:53.421 [DEBUG] [Thread-196975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:14:53.421 [DEBUG] [Thread-196975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:14:53.421 [DEBUG] [Thread-196975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:14:53.440 [INFO] [Thread-196975] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:14:53.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-15T03:14:53.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:14:53.806 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:14:53.807 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:14:54.233 [DEBUG] [Thread-196975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:14:54.233 [DEBUG] [Thread-196975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:14:54.280 [DEBUG] [Thread-196975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:14:54.280 [DEBUG] [Thread-196975] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:14:54.289 [DEBUG] [Thread-196975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:14:54.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:14:54.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:14:54.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-15T03:14:54.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:14:54.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:14:54.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:14:54.326 [DEBUG] [Thread-196975] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:15:00.550 [DEBUG] [Thread-196977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:15:15.604 [DEBUG] [Thread-196978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:15:19.846 [DEBUG] [Thread-196979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:15:24.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:15:24.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:15:24.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-15T03:15:26.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 15, 6), 0.93, 93.47, 0.0, 31.58, 6.04, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:15:26.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:15:06
2026-02-15T03:15:26.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:15:26.692 [DEBUG] [Thread-196980] [transport.py] [_log()] starting thread (client mode): 0xa2d86320
2026-02-15T03:15:26.692 [DEBUG] [Thread-196980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:15:26.713 [DEBUG] [Thread-196980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:15:26.714 [INFO] [Thread-196980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:15:26.717 [DEBUG] [Thread-196980] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:15:26.717 [DEBUG] [Thread-196980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:15:26.717 [DEBUG] [Thread-196980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:15:26.717 [DEBUG] [Thread-196980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:15:26.717 [DEBUG] [Thread-196980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:15:26.717 [DEBUG] [Thread-196980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:15:26.717 [DEBUG] [Thread-196980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:15:26.717 [DEBUG] [Thread-196980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:15:26.717 [DEBUG] [Thread-196980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:15:26.717 [DEBUG] [Thread-196980] [transport.py] [_log()] client lang: <none>
2026-02-15T03:15:26.717 [DEBUG] [Thread-196980] [transport.py] [_log()] server lang: <none>
2026-02-15T03:15:26.718 [DEBUG] [Thread-196980] [transport.py] [_log()] kex follows: False
2026-02-15T03:15:26.718 [DEBUG] [Thread-196980] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:15:26.718 [DEBUG] [Thread-196980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:15:26.718 [DEBUG] [Thread-196980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:15:26.718 [DEBUG] [Thread-196980] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:15:26.718 [DEBUG] [Thread-196980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:15:26.718 [DEBUG] [Thread-196980] [transport.py] [_log()] Compression: none
2026-02-15T03:15:26.718 [DEBUG] [Thread-196980] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:15:26.734 [DEBUG] [Thread-196980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:15:26.735 [DEBUG] [Thread-196980] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:15:26.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:15:26.736 [DEBUG] [Thread-196980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:15:26.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:15:26.737 [DEBUG] [Thread-196980] [transport.py] [_log()] userauth is OK
2026-02-15T03:15:26.737 [DEBUG] [Thread-196980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:15:26.737 [DEBUG] [Thread-196980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:15:26.738 [DEBUG] [Thread-196980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:15:26.738 [DEBUG] [Thread-196980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:15:26.753 [INFO] [Thread-196980] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:15:26.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:15:27.459 [DEBUG] [Thread-196980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:15:27.459 [DEBUG] [Thread-196980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:15:27.460 [DEBUG] [Thread-196980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:15:27.500 [DEBUG] [Thread-196980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:15:27.500 [DEBUG] [Thread-196980] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:15:27.503 [DEBUG] [Thread-196980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:15:27.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:15:27.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:15:27.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:15:27.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:15:27.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:15:27.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:15:27.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:15:27.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:15:27.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:15:27.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.051842 -999.00   +6.00  23.99     91   +4.80 1 2 1 3 1     0    0 1.33 4.36 .NESw 24.0 24.0 137.6 32.8 6.5 -24.2 6.4 -23.3 6.1 -22.3 6.5 -23.2
2026-02-15T03:15:27.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:15:27.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:15:27.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.051842
2026-02-15T03:15:27.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:15:27.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:15:27.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:15:27.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:15:27.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:15:27.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:15:06', tmtdew=0.93, humidity=93.47, cloud=0.0, wind=31.58, temperature=6.04, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:14:39.149', atlas_cloud=2, atlas_rain=1, zp_data=[2.4007499999999995, 2.4642500000000007, 2.4292500000000006, 1.4614999999999991, nan, nan, nan, nan, nan, 0.3620000000000001, 1.2882499999999997, 2.0759999999999996, 2.8809999999999993, nan, nan, nan, 0.37824999999999953, 0.21250000000000036, 0.4604999999999979, 0.9022499999999987, 1.6759999999999984, 1.699749999999998, 1.7662500000000012, 0.5372500000000002, 0.27699999999999925, 0.28850000000000087, 0.34275000000000055, 0.31350000000000033, 0.43599999999999994, 0.4660000000000011, 0.4780000000000024, 0.3720000000000008, 0.17974999999999852], zp_timestamp='2026-02-15T01:11:00')
2026-02-15T03:15:27.526 [DEBUG] [Thread-196980] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:15:27.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-15T03:15:27.625 [DEBUG] [Thread-196983] [transport.py] [_log()] starting thread (client mode): 0xa2d87f70
2026-02-15T03:15:27.625 [DEBUG] [Thread-196983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:15:27.640 [DEBUG] [Thread-196983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:15:27.640 [INFO] [Thread-196983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:15:27.647 [DEBUG] [Thread-196983] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:15:27.647 [DEBUG] [Thread-196983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:15:27.648 [DEBUG] [Thread-196983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:15:27.648 [DEBUG] [Thread-196983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:15:27.648 [DEBUG] [Thread-196983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:15:27.648 [DEBUG] [Thread-196983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:15:27.648 [DEBUG] [Thread-196983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:15:27.648 [DEBUG] [Thread-196983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:15:27.648 [DEBUG] [Thread-196983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:15:27.648 [DEBUG] [Thread-196983] [transport.py] [_log()] client lang: <none>
2026-02-15T03:15:27.648 [DEBUG] [Thread-196983] [transport.py] [_log()] server lang: <none>
2026-02-15T03:15:27.648 [DEBUG] [Thread-196983] [transport.py] [_log()] kex follows: False
2026-02-15T03:15:27.648 [DEBUG] [Thread-196983] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:15:27.648 [DEBUG] [Thread-196983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:15:27.649 [DEBUG] [Thread-196983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:15:27.649 [DEBUG] [Thread-196983] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:15:27.649 [DEBUG] [Thread-196983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:15:27.649 [DEBUG] [Thread-196983] [transport.py] [_log()] Compression: none
2026-02-15T03:15:27.649 [DEBUG] [Thread-196983] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:15:27.709 [DEBUG] [Thread-196983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:15:27.710 [DEBUG] [Thread-196983] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:15:27.710 [DEBUG] [Thread-196983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:15:27.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:15:27.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:15:27.765 [DEBUG] [Thread-196983] [transport.py] [_log()] userauth is OK
2026-02-15T03:15:27.765 [DEBUG] [Thread-196983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:15:27.766 [DEBUG] [Thread-196983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:15:27.766 [DEBUG] [Thread-196983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:15:27.766 [DEBUG] [Thread-196983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:15:27.785 [INFO] [Thread-196983] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:15:27.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-15T03:15:27.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:15:28.592 [DEBUG] [Thread-196983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:15:28.592 [DEBUG] [Thread-196983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:15:28.640 [DEBUG] [Thread-196983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:15:28.641 [DEBUG] [Thread-196983] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:15:28.649 [DEBUG] [Thread-196983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:15:28.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:15:28.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-15T03:15:28.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-15T03:15:28.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:15:28.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:15:28.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:15:28.684 [DEBUG] [Thread-196983] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:15:30.638 [DEBUG] [Thread-196985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:15:45.687 [DEBUG] [Thread-196986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:15:54.012 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:15:54.013 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:15:58.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:15:58.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:15:58.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-15T03:16:00.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 15, 41), 1.37, 90.88, 0.0, 34.23, 6.31, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:16:00.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:15:41
2026-02-15T03:16:00.723 [DEBUG] [Thread-196987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:16:00.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:16:01.089 [DEBUG] [Thread-196988] [transport.py] [_log()] starting thread (client mode): 0xa57d4a00
2026-02-15T03:16:01.089 [DEBUG] [Thread-196988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:16:01.109 [DEBUG] [Thread-196988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:16:01.110 [INFO] [Thread-196988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:16:01.112 [DEBUG] [Thread-196988] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:16:01.112 [DEBUG] [Thread-196988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:16:01.112 [DEBUG] [Thread-196988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:16:01.112 [DEBUG] [Thread-196988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:16:01.112 [DEBUG] [Thread-196988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:16:01.112 [DEBUG] [Thread-196988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:16:01.112 [DEBUG] [Thread-196988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:16:01.112 [DEBUG] [Thread-196988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:16:01.112 [DEBUG] [Thread-196988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:16:01.112 [DEBUG] [Thread-196988] [transport.py] [_log()] client lang: <none>
2026-02-15T03:16:01.112 [DEBUG] [Thread-196988] [transport.py] [_log()] server lang: <none>
2026-02-15T03:16:01.112 [DEBUG] [Thread-196988] [transport.py] [_log()] kex follows: False
2026-02-15T03:16:01.112 [DEBUG] [Thread-196988] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:16:01.112 [DEBUG] [Thread-196988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:16:01.112 [DEBUG] [Thread-196988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:16:01.113 [DEBUG] [Thread-196988] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:16:01.113 [DEBUG] [Thread-196988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:16:01.113 [DEBUG] [Thread-196988] [transport.py] [_log()] Compression: none
2026-02-15T03:16:01.113 [DEBUG] [Thread-196988] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:16:01.129 [DEBUG] [Thread-196988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:16:01.129 [DEBUG] [Thread-196988] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:16:01.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:16:01.130 [DEBUG] [Thread-196988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:16:01.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:16:01.133 [DEBUG] [Thread-196988] [transport.py] [_log()] userauth is OK
2026-02-15T03:16:01.133 [DEBUG] [Thread-196988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:16:01.133 [DEBUG] [Thread-196988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:16:01.133 [DEBUG] [Thread-196988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:16:01.133 [DEBUG] [Thread-196988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:16:01.158 [INFO] [Thread-196988] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:16:01.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:16:01.778 [DEBUG] [Thread-196988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:16:01.779 [DEBUG] [Thread-196988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:16:01.779 [DEBUG] [Thread-196988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:16:01.819 [DEBUG] [Thread-196988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:16:01.819 [DEBUG] [Thread-196988] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:16:01.822 [DEBUG] [Thread-196988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:16:01.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:16:01.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:16:01.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:16:01.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:16:01.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:16:01.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:16:01.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:16:01.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:16:01.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:16:01.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.052189 -999.00   +6.00  26.48     91   +4.70 1 1 1 3 1     0    0 1.32 4.51 .NES. 26.5 26.5 139.4 33.8 6.5 -24.2 6.4 -23.3 6.2 -22.1 -999.0 -999.0
2026-02-15T03:16:01.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:16:01.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:16:01.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.052189
2026-02-15T03:16:01.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:16:01.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:16:01.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:16:01.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:16:01.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T03:16:01.845 [DEBUG] [Thread-196988] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:16:01.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:15:41', tmtdew=1.37, humidity=90.88, cloud=0.0, wind=34.23, temperature=6.31, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:15:09.130', atlas_cloud=1, atlas_rain=1, zp_data=[2.6027499999999995, 2.5192500000000004, 2.3302500000000004, 1.3314999999999992, nan, nan, nan, nan, nan, 0.32649999999999935, 1.0562499999999995, 2.157, 2.827, nan, 2.4769999999999994, nan, 0.3272499999999994, 0.18149999999999977, 0.4169999999999998, 0.8672499999999985, 1.6439999999999984, 1.7297499999999983, 1.8742500000000009, 0.4397500000000001, 0.24499999999999922, 0.23850000000000016, 0.36625000000000085, 0.2605000000000004, 0.4039999999999999, 0.3985000000000012, 0.4800000000000013, 0.3200000000000012, 0.19324999999999903], zp_timestamp='2026-02-15T01:14:00')
2026-02-15T03:16:01.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-15T03:16:01.950 [DEBUG] [Thread-196991] [transport.py] [_log()] starting thread (client mode): 0xa57d5ff0
2026-02-15T03:16:01.951 [DEBUG] [Thread-196991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:16:01.966 [DEBUG] [Thread-196991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:16:01.966 [INFO] [Thread-196991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:16:01.973 [DEBUG] [Thread-196991] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:16:01.973 [DEBUG] [Thread-196991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:16:01.973 [DEBUG] [Thread-196991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:16:01.973 [DEBUG] [Thread-196991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:16:01.974 [DEBUG] [Thread-196991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:16:01.974 [DEBUG] [Thread-196991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:16:01.974 [DEBUG] [Thread-196991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:16:01.974 [DEBUG] [Thread-196991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:16:01.974 [DEBUG] [Thread-196991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:16:01.974 [DEBUG] [Thread-196991] [transport.py] [_log()] client lang: <none>
2026-02-15T03:16:01.974 [DEBUG] [Thread-196991] [transport.py] [_log()] server lang: <none>
2026-02-15T03:16:01.974 [DEBUG] [Thread-196991] [transport.py] [_log()] kex follows: False
2026-02-15T03:16:01.974 [DEBUG] [Thread-196991] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:16:01.974 [DEBUG] [Thread-196991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:16:01.974 [DEBUG] [Thread-196991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:16:01.974 [DEBUG] [Thread-196991] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:16:01.974 [DEBUG] [Thread-196991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:16:01.974 [DEBUG] [Thread-196991] [transport.py] [_log()] Compression: none
2026-02-15T03:16:01.974 [DEBUG] [Thread-196991] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:16:02.034 [DEBUG] [Thread-196991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:16:02.035 [DEBUG] [Thread-196991] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:16:02.035 [DEBUG] [Thread-196991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:16:02.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:16:02.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:16:02.094 [DEBUG] [Thread-196991] [transport.py] [_log()] userauth is OK
2026-02-15T03:16:02.095 [DEBUG] [Thread-196991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:16:02.095 [DEBUG] [Thread-196991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:16:02.095 [DEBUG] [Thread-196991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:16:02.095 [DEBUG] [Thread-196991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:16:02.114 [INFO] [Thread-196991] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:16:02.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:16:02.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:16:02.936 [DEBUG] [Thread-196991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:16:02.936 [DEBUG] [Thread-196991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:16:02.985 [DEBUG] [Thread-196991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:16:02.985 [DEBUG] [Thread-196991] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:16:02.994 [DEBUG] [Thread-196991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:16:03.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:16:03.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-15T03:16:03.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-15T03:16:03.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:16:03.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:16:03.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:16:03.027 [DEBUG] [Thread-196991] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:16:15.763 [DEBUG] [Thread-196993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:16:19.915 [DEBUG] [Thread-196994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:16:30.829 [DEBUG] [Thread-196995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:16:33.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:16:33.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:16:33.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-15T03:16:35.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 16, 16), 0.93, 93.46, 0.0, 33.75, 6.0, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:16:35.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:16:16
2026-02-15T03:16:35.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:16:35.561 [DEBUG] [Thread-196996] [transport.py] [_log()] starting thread (client mode): 0xa2d87f10
2026-02-15T03:16:35.562 [DEBUG] [Thread-196996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:16:35.582 [DEBUG] [Thread-196996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:16:35.582 [INFO] [Thread-196996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:16:35.584 [DEBUG] [Thread-196996] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:16:35.584 [DEBUG] [Thread-196996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:16:35.584 [DEBUG] [Thread-196996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:16:35.584 [DEBUG] [Thread-196996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:16:35.584 [DEBUG] [Thread-196996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:16:35.585 [DEBUG] [Thread-196996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:16:35.585 [DEBUG] [Thread-196996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:16:35.585 [DEBUG] [Thread-196996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:16:35.585 [DEBUG] [Thread-196996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:16:35.585 [DEBUG] [Thread-196996] [transport.py] [_log()] client lang: <none>
2026-02-15T03:16:35.585 [DEBUG] [Thread-196996] [transport.py] [_log()] server lang: <none>
2026-02-15T03:16:35.585 [DEBUG] [Thread-196996] [transport.py] [_log()] kex follows: False
2026-02-15T03:16:35.585 [DEBUG] [Thread-196996] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:16:35.585 [DEBUG] [Thread-196996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:16:35.585 [DEBUG] [Thread-196996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:16:35.585 [DEBUG] [Thread-196996] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:16:35.585 [DEBUG] [Thread-196996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:16:35.585 [DEBUG] [Thread-196996] [transport.py] [_log()] Compression: none
2026-02-15T03:16:35.585 [DEBUG] [Thread-196996] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:16:35.603 [DEBUG] [Thread-196996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:16:35.604 [DEBUG] [Thread-196996] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:16:35.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:16:35.604 [DEBUG] [Thread-196996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:16:35.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:16:35.607 [DEBUG] [Thread-196996] [transport.py] [_log()] userauth is OK
2026-02-15T03:16:35.607 [DEBUG] [Thread-196996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:16:35.607 [DEBUG] [Thread-196996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:16:35.607 [DEBUG] [Thread-196996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:16:35.607 [DEBUG] [Thread-196996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:16:35.631 [INFO] [Thread-196996] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:16:35.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:16:36.216 [DEBUG] [Thread-196996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:16:36.216 [DEBUG] [Thread-196996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:16:36.216 [DEBUG] [Thread-196996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:16:36.257 [DEBUG] [Thread-196996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:16:36.258 [DEBUG] [Thread-196996] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:16:36.261 [DEBUG] [Thread-196996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:16:36.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:16:36.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:16:36.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:16:36.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:16:36.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:16:36.284 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:16:36.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:16:36.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:16:36.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:16:36.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.052537 -999.00   +6.00  30.85     91   +4.80 1 2 2 3 1     0    0 1.36 4.65 .NES. 30.9 30.9 135.4 37.3 6.5 -24.1 6.3 -23.2 6.1 -22.1 6.5 -23.4
2026-02-15T03:16:36.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:16:36.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:16:36.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.052537
2026-02-15T03:16:36.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:16:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:16:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:16:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:16:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:16:36.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:16:16', tmtdew=0.93, humidity=93.46, cloud=0.0, wind=33.75, temperature=6.0, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:15:39.197', atlas_cloud=2, atlas_rain=1, zp_data=[2.6027499999999995, 2.5192500000000004, 2.3302500000000004, 1.3314999999999992, nan, nan, nan, nan, nan, 0.32649999999999935, 1.0562499999999995, 2.157, 2.827, nan, 2.4769999999999994, nan, 0.3272499999999994, 0.18149999999999977, 0.4169999999999998, 0.8672499999999985, 1.6439999999999984, 1.7297499999999983, 1.8742500000000009, 0.4397500000000001, 0.24499999999999922, 0.23850000000000016, 0.36625000000000085, 0.2605000000000004, 0.4039999999999999, 0.3985000000000012, 0.4800000000000013, 0.3200000000000012, 0.19324999999999903], zp_timestamp='2026-02-15T01:14:00')
2026-02-15T03:16:36.288 [DEBUG] [Thread-196996] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:16:36.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-15T03:16:36.384 [DEBUG] [Thread-196999] [transport.py] [_log()] starting thread (client mode): 0xa2d87bb0
2026-02-15T03:16:36.384 [DEBUG] [Thread-196999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:16:36.398 [DEBUG] [Thread-196999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:16:36.398 [INFO] [Thread-196999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:16:36.406 [DEBUG] [Thread-196999] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:16:36.406 [DEBUG] [Thread-196999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:16:36.406 [DEBUG] [Thread-196999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:16:36.406 [DEBUG] [Thread-196999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:16:36.406 [DEBUG] [Thread-196999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:16:36.406 [DEBUG] [Thread-196999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:16:36.406 [DEBUG] [Thread-196999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:16:36.406 [DEBUG] [Thread-196999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:16:36.406 [DEBUG] [Thread-196999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:16:36.406 [DEBUG] [Thread-196999] [transport.py] [_log()] client lang: <none>
2026-02-15T03:16:36.406 [DEBUG] [Thread-196999] [transport.py] [_log()] server lang: <none>
2026-02-15T03:16:36.406 [DEBUG] [Thread-196999] [transport.py] [_log()] kex follows: False
2026-02-15T03:16:36.406 [DEBUG] [Thread-196999] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:16:36.406 [DEBUG] [Thread-196999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:16:36.407 [DEBUG] [Thread-196999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:16:36.407 [DEBUG] [Thread-196999] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:16:36.407 [DEBUG] [Thread-196999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:16:36.407 [DEBUG] [Thread-196999] [transport.py] [_log()] Compression: none
2026-02-15T03:16:36.407 [DEBUG] [Thread-196999] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:16:36.463 [DEBUG] [Thread-196999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:16:36.464 [DEBUG] [Thread-196999] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:16:36.465 [DEBUG] [Thread-196999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:16:36.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:16:36.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:16:36.519 [DEBUG] [Thread-196999] [transport.py] [_log()] userauth is OK
2026-02-15T03:16:36.519 [DEBUG] [Thread-196999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:16:36.520 [DEBUG] [Thread-196999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:16:36.520 [DEBUG] [Thread-196999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:16:36.520 [DEBUG] [Thread-196999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:16:36.544 [INFO] [Thread-196999] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:16:36.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-15T03:16:36.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:16:37.352 [DEBUG] [Thread-196999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:16:37.352 [DEBUG] [Thread-196999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:16:37.400 [DEBUG] [Thread-196999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:16:37.401 [DEBUG] [Thread-196999] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:16:37.410 [DEBUG] [Thread-196999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:16:37.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:16:37.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-15T03:16:37.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:16:37.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:16:37.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:16:37.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:16:37.446 [DEBUG] [Thread-196999] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:16:45.868 [DEBUG] [Thread-197001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:16:54.219 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:16:54.222 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:17:00.920 [DEBUG] [Thread-197002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:17:07.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:17:07.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:17:07.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-15T03:17:09.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 16, 52), 0.99, 93.42, 0.0, 34.74, 6.02, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:17:09.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:16:52
2026-02-15T03:17:10.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:17:10.289 [DEBUG] [Thread-197003] [transport.py] [_log()] starting thread (client mode): 0xa57d4370
2026-02-15T03:17:10.289 [DEBUG] [Thread-197003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:17:10.310 [DEBUG] [Thread-197003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:17:10.310 [INFO] [Thread-197003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:17:10.313 [DEBUG] [Thread-197003] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:17:10.314 [DEBUG] [Thread-197003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:17:10.314 [DEBUG] [Thread-197003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:17:10.314 [DEBUG] [Thread-197003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:17:10.314 [DEBUG] [Thread-197003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:17:10.314 [DEBUG] [Thread-197003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:17:10.314 [DEBUG] [Thread-197003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:17:10.314 [DEBUG] [Thread-197003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:17:10.314 [DEBUG] [Thread-197003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:17:10.314 [DEBUG] [Thread-197003] [transport.py] [_log()] client lang: <none>
2026-02-15T03:17:10.314 [DEBUG] [Thread-197003] [transport.py] [_log()] server lang: <none>
2026-02-15T03:17:10.314 [DEBUG] [Thread-197003] [transport.py] [_log()] kex follows: False
2026-02-15T03:17:10.314 [DEBUG] [Thread-197003] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:17:10.314 [DEBUG] [Thread-197003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:17:10.314 [DEBUG] [Thread-197003] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:17:10.314 [DEBUG] [Thread-197003] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:17:10.314 [DEBUG] [Thread-197003] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:17:10.314 [DEBUG] [Thread-197003] [transport.py] [_log()] Compression: none
2026-02-15T03:17:10.314 [DEBUG] [Thread-197003] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:17:10.329 [DEBUG] [Thread-197003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:17:10.329 [DEBUG] [Thread-197003] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:17:10.329 [DEBUG] [Thread-197003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:17:10.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:17:10.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:17:10.330 [DEBUG] [Thread-197003] [transport.py] [_log()] userauth is OK
2026-02-15T03:17:10.331 [DEBUG] [Thread-197003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:17:10.331 [DEBUG] [Thread-197003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:17:10.331 [DEBUG] [Thread-197003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:17:10.331 [DEBUG] [Thread-197003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:17:10.352 [INFO] [Thread-197003] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:17:10.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:17:10.974 [DEBUG] [Thread-197003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:17:10.975 [DEBUG] [Thread-197003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:17:10.975 [DEBUG] [Thread-197003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:17:11.015 [DEBUG] [Thread-197003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:17:11.016 [DEBUG] [Thread-197003] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:17:11.019 [DEBUG] [Thread-197003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:17:11.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:17:11.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:17:11.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:17:11.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:17:11.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:17:11.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:17:11.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:17:11.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:17:11.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:17:11.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.052884 -999.00   +6.00  23.19     91   +4.70 1 2 1 3 1     0    0 1.33 4.33 .NES. 23.2 23.2 134.2 37.8 6.5 -24.2 6.3 -23.2 6.1 -22.0 6.5 -23.3
2026-02-15T03:17:11.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:17:11.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:17:11.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.052884
2026-02-15T03:17:11.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:17:11.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:17:11.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:17:11.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:17:11.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:17:11.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:16:52', tmtdew=0.99, humidity=93.42, cloud=0.0, wind=34.74, temperature=6.02, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:16:09.178', atlas_cloud=2, atlas_rain=1, zp_data=[2.6027499999999995, 2.5192500000000004, 2.3302500000000004, 1.3314999999999992, nan, nan, nan, nan, nan, 0.32649999999999935, 1.0562499999999995, 2.157, 2.827, nan, 2.4769999999999994, nan, 0.3272499999999994, 0.18149999999999977, 0.4169999999999998, 0.8672499999999985, 1.6439999999999984, 1.7297499999999983, 1.8742500000000009, 0.4397500000000001, 0.24499999999999922, 0.23850000000000016, 0.36625000000000085, 0.2605000000000004, 0.4039999999999999, 0.3985000000000012, 0.4800000000000013, 0.3200000000000012, 0.19324999999999903], zp_timestamp='2026-02-15T01:14:00')
2026-02-15T03:17:11.044 [DEBUG] [Thread-197003] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:17:11.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-15T03:17:11.142 [DEBUG] [Thread-197006] [transport.py] [_log()] starting thread (client mode): 0xa57d5750
2026-02-15T03:17:11.142 [DEBUG] [Thread-197006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:17:11.157 [DEBUG] [Thread-197006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:17:11.157 [INFO] [Thread-197006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:17:11.165 [DEBUG] [Thread-197006] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:17:11.165 [DEBUG] [Thread-197006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:17:11.165 [DEBUG] [Thread-197006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:17:11.165 [DEBUG] [Thread-197006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:17:11.165 [DEBUG] [Thread-197006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:17:11.165 [DEBUG] [Thread-197006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:17:11.165 [DEBUG] [Thread-197006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:17:11.165 [DEBUG] [Thread-197006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:17:11.165 [DEBUG] [Thread-197006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:17:11.165 [DEBUG] [Thread-197006] [transport.py] [_log()] client lang: <none>
2026-02-15T03:17:11.165 [DEBUG] [Thread-197006] [transport.py] [_log()] server lang: <none>
2026-02-15T03:17:11.165 [DEBUG] [Thread-197006] [transport.py] [_log()] kex follows: False
2026-02-15T03:17:11.165 [DEBUG] [Thread-197006] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:17:11.166 [DEBUG] [Thread-197006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:17:11.166 [DEBUG] [Thread-197006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:17:11.166 [DEBUG] [Thread-197006] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:17:11.166 [DEBUG] [Thread-197006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:17:11.166 [DEBUG] [Thread-197006] [transport.py] [_log()] Compression: none
2026-02-15T03:17:11.166 [DEBUG] [Thread-197006] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:17:11.224 [DEBUG] [Thread-197006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:17:11.224 [DEBUG] [Thread-197006] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:17:11.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:17:11.226 [DEBUG] [Thread-197006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:17:11.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:17:11.280 [DEBUG] [Thread-197006] [transport.py] [_log()] userauth is OK
2026-02-15T03:17:11.280 [DEBUG] [Thread-197006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:17:11.280 [DEBUG] [Thread-197006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:17:11.281 [DEBUG] [Thread-197006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:17:11.281 [DEBUG] [Thread-197006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:17:11.299 [INFO] [Thread-197006] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:17:11.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-15T03:17:11.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:17:12.081 [DEBUG] [Thread-197006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:17:12.081 [DEBUG] [Thread-197006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:17:12.128 [DEBUG] [Thread-197006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:17:12.129 [DEBUG] [Thread-197006] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:17:12.139 [DEBUG] [Thread-197006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:17:12.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:17:12.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-15T03:17:12.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:17:12.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:17:12.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:17:12.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:17:12.176 [DEBUG] [Thread-197006] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:17:15.959 [DEBUG] [Thread-197008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:17:19.972 [DEBUG] [Thread-197009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:17:31.013 [DEBUG] [Thread-197010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:17:42.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:17:42.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:17:42.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-15T03:17:44.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 17, 27), 0.99, 93.44, 0.0, 34.18, 6.05, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:17:44.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:17:27
2026-02-15T03:17:44.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:17:44.661 [DEBUG] [Thread-197011] [transport.py] [_log()] starting thread (client mode): 0xa57d6920
2026-02-15T03:17:44.661 [DEBUG] [Thread-197011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:17:44.681 [DEBUG] [Thread-197011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:17:44.682 [INFO] [Thread-197011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:17:44.685 [DEBUG] [Thread-197011] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:17:44.685 [DEBUG] [Thread-197011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:17:44.685 [DEBUG] [Thread-197011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:17:44.685 [DEBUG] [Thread-197011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:17:44.685 [DEBUG] [Thread-197011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:17:44.685 [DEBUG] [Thread-197011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:17:44.685 [DEBUG] [Thread-197011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:17:44.685 [DEBUG] [Thread-197011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:17:44.685 [DEBUG] [Thread-197011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:17:44.685 [DEBUG] [Thread-197011] [transport.py] [_log()] client lang: <none>
2026-02-15T03:17:44.685 [DEBUG] [Thread-197011] [transport.py] [_log()] server lang: <none>
2026-02-15T03:17:44.685 [DEBUG] [Thread-197011] [transport.py] [_log()] kex follows: False
2026-02-15T03:17:44.685 [DEBUG] [Thread-197011] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:17:44.685 [DEBUG] [Thread-197011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:17:44.685 [DEBUG] [Thread-197011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:17:44.685 [DEBUG] [Thread-197011] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:17:44.686 [DEBUG] [Thread-197011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:17:44.686 [DEBUG] [Thread-197011] [transport.py] [_log()] Compression: none
2026-02-15T03:17:44.686 [DEBUG] [Thread-197011] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:17:44.703 [DEBUG] [Thread-197011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:17:44.703 [DEBUG] [Thread-197011] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:17:44.704 [DEBUG] [Thread-197011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:17:44.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:17:44.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:17:44.706 [DEBUG] [Thread-197011] [transport.py] [_log()] userauth is OK
2026-02-15T03:17:44.706 [DEBUG] [Thread-197011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:17:44.706 [DEBUG] [Thread-197011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:17:44.706 [DEBUG] [Thread-197011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:17:44.707 [DEBUG] [Thread-197011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:17:44.731 [INFO] [Thread-197011] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:17:44.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:17:45.346 [DEBUG] [Thread-197011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:17:45.346 [DEBUG] [Thread-197011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:17:45.346 [DEBUG] [Thread-197011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:17:45.387 [DEBUG] [Thread-197011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:17:45.388 [DEBUG] [Thread-197011] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:17:45.391 [DEBUG] [Thread-197011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:17:45.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:17:45.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:17:45.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:17:45.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:17:45.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:17:45.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:17:45.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:17:45.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:17:45.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:17:45.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.053578 -999.00   +6.00  28.43     92   +4.70 1 2 1 3 1     0    0 1.32 3.98 .NES. 28.4 28.4 130.2 34.8 6.5 -24.2 6.4 -23.3 6.1 -22.2 6.5 -23.4
2026-02-15T03:17:45.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:17:45.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:17:45.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.053578
2026-02-15T03:17:45.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:17:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:17:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:17:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:17:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:17:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:17:27', tmtdew=0.99, humidity=93.44, cloud=0.0, wind=34.18, temperature=6.05, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:17:09.139', atlas_cloud=2, atlas_rain=1, zp_data=[2.6027499999999995, 2.5192500000000004, 2.3302500000000004, 1.3314999999999992, nan, nan, nan, nan, nan, 0.32649999999999935, 1.0562499999999995, 2.157, 2.827, nan, 2.4769999999999994, nan, 0.3272499999999994, 0.18149999999999977, 0.4169999999999998, 0.8672499999999985, 1.6439999999999984, 1.7297499999999983, 1.8742500000000009, 0.4397500000000001, 0.24499999999999922, 0.23850000000000016, 0.36625000000000085, 0.2605000000000004, 0.4039999999999999, 0.3985000000000012, 0.4800000000000013, 0.3200000000000012, 0.19324999999999903], zp_timestamp='2026-02-15T01:14:00')
2026-02-15T03:17:45.418 [DEBUG] [Thread-197011] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:17:45.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-15T03:17:45.514 [DEBUG] [Thread-197014] [transport.py] [_log()] starting thread (client mode): 0xa57d50f0
2026-02-15T03:17:45.514 [DEBUG] [Thread-197014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:17:45.529 [DEBUG] [Thread-197014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:17:45.529 [INFO] [Thread-197014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:17:45.536 [DEBUG] [Thread-197014] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:17:45.537 [DEBUG] [Thread-197014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:17:45.537 [DEBUG] [Thread-197014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:17:45.537 [DEBUG] [Thread-197014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:17:45.537 [DEBUG] [Thread-197014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:17:45.537 [DEBUG] [Thread-197014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:17:45.537 [DEBUG] [Thread-197014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:17:45.537 [DEBUG] [Thread-197014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:17:45.537 [DEBUG] [Thread-197014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:17:45.538 [DEBUG] [Thread-197014] [transport.py] [_log()] client lang: <none>
2026-02-15T03:17:45.538 [DEBUG] [Thread-197014] [transport.py] [_log()] server lang: <none>
2026-02-15T03:17:45.538 [DEBUG] [Thread-197014] [transport.py] [_log()] kex follows: False
2026-02-15T03:17:45.538 [DEBUG] [Thread-197014] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:17:45.538 [DEBUG] [Thread-197014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:17:45.538 [DEBUG] [Thread-197014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:17:45.538 [DEBUG] [Thread-197014] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:17:45.538 [DEBUG] [Thread-197014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:17:45.539 [DEBUG] [Thread-197014] [transport.py] [_log()] Compression: none
2026-02-15T03:17:45.539 [DEBUG] [Thread-197014] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:17:45.602 [DEBUG] [Thread-197014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:17:45.603 [DEBUG] [Thread-197014] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:17:45.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:17:45.604 [DEBUG] [Thread-197014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:17:45.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:17:45.661 [DEBUG] [Thread-197014] [transport.py] [_log()] userauth is OK
2026-02-15T03:17:45.661 [DEBUG] [Thread-197014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:17:45.661 [DEBUG] [Thread-197014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:17:45.662 [DEBUG] [Thread-197014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:17:45.662 [DEBUG] [Thread-197014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:17:45.680 [INFO] [Thread-197014] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:17:45.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-15T03:17:45.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:17:46.047 [DEBUG] [Thread-197016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:17:46.475 [DEBUG] [Thread-197014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:17:46.475 [DEBUG] [Thread-197014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:17:46.523 [DEBUG] [Thread-197014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:17:46.523 [DEBUG] [Thread-197014] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:17:46.531 [DEBUG] [Thread-197014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:17:46.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:17:46.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:17:46.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-15T03:17:46.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:17:46.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:17:46.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:17:46.563 [DEBUG] [Thread-197014] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:17:54.438 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:17:54.440 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:18:01.100 [DEBUG] [Thread-197017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:18:16.136 [DEBUG] [Thread-197018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:18:16.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:18:16.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:18:16.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-15T03:18:18.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 18, 2), 0.99, 93.42, 0.0, 33.89, 6.05, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:18:18.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:18:02
2026-02-15T03:18:18.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:18:18.968 [DEBUG] [Thread-197019] [transport.py] [_log()] starting thread (client mode): 0xa57d4910
2026-02-15T03:18:18.968 [DEBUG] [Thread-197019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:18:18.987 [DEBUG] [Thread-197019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:18:18.987 [INFO] [Thread-197019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:18:18.989 [DEBUG] [Thread-197019] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:18:18.989 [DEBUG] [Thread-197019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:18:18.989 [DEBUG] [Thread-197019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:18:18.989 [DEBUG] [Thread-197019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:18:18.989 [DEBUG] [Thread-197019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:18:18.989 [DEBUG] [Thread-197019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:18:18.989 [DEBUG] [Thread-197019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:18:18.989 [DEBUG] [Thread-197019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:18:18.989 [DEBUG] [Thread-197019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:18:18.989 [DEBUG] [Thread-197019] [transport.py] [_log()] client lang: <none>
2026-02-15T03:18:18.989 [DEBUG] [Thread-197019] [transport.py] [_log()] server lang: <none>
2026-02-15T03:18:18.989 [DEBUG] [Thread-197019] [transport.py] [_log()] kex follows: False
2026-02-15T03:18:18.989 [DEBUG] [Thread-197019] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:18:18.989 [DEBUG] [Thread-197019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:18:18.989 [DEBUG] [Thread-197019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:18:18.990 [DEBUG] [Thread-197019] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:18:18.990 [DEBUG] [Thread-197019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:18:18.990 [DEBUG] [Thread-197019] [transport.py] [_log()] Compression: none
2026-02-15T03:18:18.990 [DEBUG] [Thread-197019] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:18:19.001 [DEBUG] [Thread-197019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:18:19.001 [DEBUG] [Thread-197019] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:18:19.002 [DEBUG] [Thread-197019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:18:19.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:18:19.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:18:19.003 [DEBUG] [Thread-197019] [transport.py] [_log()] userauth is OK
2026-02-15T03:18:19.004 [DEBUG] [Thread-197019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:18:19.004 [DEBUG] [Thread-197019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:18:19.004 [DEBUG] [Thread-197019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:18:19.004 [DEBUG] [Thread-197019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:18:19.024 [INFO] [Thread-197019] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:18:19.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:18:19.777 [DEBUG] [Thread-197019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:18:19.777 [DEBUG] [Thread-197019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:18:19.777 [DEBUG] [Thread-197019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:18:19.819 [DEBUG] [Thread-197019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:18:19.819 [DEBUG] [Thread-197019] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:18:19.821 [DEBUG] [Thread-197019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:18:19.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:18:19.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:18:19.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:18:19.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:18:19.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:18:19.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:18:19.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:18:19.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:18:19.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:18:19.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.053925 -999.00   +5.90  27.05     91   +4.70 1 2 1 3 1     0    0 1.29 3.37 .NES. 27.1 27.1 134.0 34.3 6.5 -24.2 6.4 -23.4 6.1 -22.2 6.5 -23.5
2026-02-15T03:18:19.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:18:19.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:18:19.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.053925
2026-02-15T03:18:19.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:18:19.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:18:19.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:18:19.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:18:19.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:18:19.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:18:02', tmtdew=0.99, humidity=93.42, cloud=0.0, wind=33.89, temperature=6.05, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:17:39.120', atlas_cloud=2, atlas_rain=1, zp_data=[2.6027499999999995, 2.5192500000000004, 2.3302500000000004, 1.3314999999999992, nan, nan, nan, nan, nan, 0.32649999999999935, 1.0562499999999995, 2.157, 2.827, nan, 2.4769999999999994, nan, 0.3272499999999994, 0.18149999999999977, 0.4169999999999998, 0.8672499999999985, 1.6439999999999984, 1.7297499999999983, 1.8742500000000009, 0.4397500000000001, 0.24499999999999922, 0.23850000000000016, 0.36625000000000085, 0.2605000000000004, 0.4039999999999999, 0.3985000000000012, 0.4800000000000013, 0.3200000000000012, 0.19324999999999903], zp_timestamp='2026-02-15T01:14:00')
2026-02-15T03:18:19.835 [DEBUG] [Thread-197019] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:18:19.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:18:19.917 [DEBUG] [Thread-197022] [transport.py] [_log()] starting thread (client mode): 0xa57d4070
2026-02-15T03:18:19.917 [DEBUG] [Thread-197022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:18:19.935 [DEBUG] [Thread-197022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:18:19.936 [INFO] [Thread-197022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:18:19.943 [DEBUG] [Thread-197022] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:18:19.944 [DEBUG] [Thread-197022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:18:19.944 [DEBUG] [Thread-197022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:18:19.944 [DEBUG] [Thread-197022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:18:19.944 [DEBUG] [Thread-197022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:18:19.944 [DEBUG] [Thread-197022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:18:19.944 [DEBUG] [Thread-197022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:18:19.945 [DEBUG] [Thread-197022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:18:19.945 [DEBUG] [Thread-197022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:18:19.945 [DEBUG] [Thread-197022] [transport.py] [_log()] client lang: <none>
2026-02-15T03:18:19.945 [DEBUG] [Thread-197022] [transport.py] [_log()] server lang: <none>
2026-02-15T03:18:19.945 [DEBUG] [Thread-197022] [transport.py] [_log()] kex follows: False
2026-02-15T03:18:19.945 [DEBUG] [Thread-197022] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:18:19.945 [DEBUG] [Thread-197022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:18:19.945 [DEBUG] [Thread-197022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:18:19.946 [DEBUG] [Thread-197022] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:18:19.946 [DEBUG] [Thread-197022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:18:19.946 [DEBUG] [Thread-197022] [transport.py] [_log()] Compression: none
2026-02-15T03:18:19.946 [DEBUG] [Thread-197022] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:18:20.000 [DEBUG] [Thread-197022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:18:20.001 [DEBUG] [Thread-197022] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:18:20.001 [DEBUG] [Thread-197022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:18:20.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:18:20.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:18:20.029 [DEBUG] [Thread-197024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:18:20.058 [DEBUG] [Thread-197022] [transport.py] [_log()] userauth is OK
2026-02-15T03:18:20.058 [DEBUG] [Thread-197022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:18:20.058 [DEBUG] [Thread-197022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:18:20.059 [DEBUG] [Thread-197022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:18:20.059 [DEBUG] [Thread-197022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:18:20.078 [INFO] [Thread-197022] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:18:20.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-15T03:18:20.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:18:20.888 [DEBUG] [Thread-197022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:18:20.888 [DEBUG] [Thread-197022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:18:20.939 [DEBUG] [Thread-197022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:18:20.939 [DEBUG] [Thread-197022] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:18:20.947 [DEBUG] [Thread-197022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:18:20.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:18:20.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-15T03:18:20.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-15T03:18:20.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:18:20.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:18:20.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:18:20.984 [DEBUG] [Thread-197022] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:18:31.171 [DEBUG] [Thread-197025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:18:46.225 [DEBUG] [Thread-197026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:18:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:18:50.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:18:50.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T03:18:52.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 18, 38), 1.39, 90.78, 0.0, 35.0, 6.24, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:18:52.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:18:38
2026-02-15T03:18:53.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:18:53.413 [DEBUG] [Thread-197027] [transport.py] [_log()] starting thread (client mode): 0xa57d75e0
2026-02-15T03:18:53.414 [DEBUG] [Thread-197027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:18:53.433 [DEBUG] [Thread-197027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:18:53.433 [INFO] [Thread-197027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:18:53.437 [DEBUG] [Thread-197027] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:18:53.437 [DEBUG] [Thread-197027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:18:53.437 [DEBUG] [Thread-197027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:18:53.437 [DEBUG] [Thread-197027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:18:53.437 [DEBUG] [Thread-197027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:18:53.437 [DEBUG] [Thread-197027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:18:53.437 [DEBUG] [Thread-197027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:18:53.438 [DEBUG] [Thread-197027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:18:53.438 [DEBUG] [Thread-197027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:18:53.438 [DEBUG] [Thread-197027] [transport.py] [_log()] client lang: <none>
2026-02-15T03:18:53.438 [DEBUG] [Thread-197027] [transport.py] [_log()] server lang: <none>
2026-02-15T03:18:53.438 [DEBUG] [Thread-197027] [transport.py] [_log()] kex follows: False
2026-02-15T03:18:53.438 [DEBUG] [Thread-197027] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:18:53.438 [DEBUG] [Thread-197027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:18:53.438 [DEBUG] [Thread-197027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:18:53.438 [DEBUG] [Thread-197027] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:18:53.438 [DEBUG] [Thread-197027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:18:53.438 [DEBUG] [Thread-197027] [transport.py] [_log()] Compression: none
2026-02-15T03:18:53.438 [DEBUG] [Thread-197027] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:18:53.454 [DEBUG] [Thread-197027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:18:53.455 [DEBUG] [Thread-197027] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:18:53.456 [DEBUG] [Thread-197027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:18:53.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:18:53.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:18:53.458 [DEBUG] [Thread-197027] [transport.py] [_log()] userauth is OK
2026-02-15T03:18:53.458 [DEBUG] [Thread-197027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:18:53.458 [DEBUG] [Thread-197027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:18:53.458 [DEBUG] [Thread-197027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:18:53.458 [DEBUG] [Thread-197027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:18:53.473 [INFO] [Thread-197027] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:18:53.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:18:54.103 [DEBUG] [Thread-197027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:18:54.103 [DEBUG] [Thread-197027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:18:54.104 [DEBUG] [Thread-197027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:18:54.144 [DEBUG] [Thread-197027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:18:54.145 [DEBUG] [Thread-197027] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:18:54.148 [DEBUG] [Thread-197027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:18:54.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:18:54.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:18:54.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:18:54.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:18:54.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:18:54.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:18:54.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:18:54.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:18:54.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:18:54.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.054273 -999.00   +6.00  26.88     91   +4.70 1 2 1 3 1     0    0 1.33 3.29 .NES. 26.9 26.9 134.6 35.6 6.5 -24.1 6.4 -23.4 6.1 -22.3 6.5 -23.5
2026-02-15T03:18:54.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:18:54.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:18:54.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.054273
2026-02-15T03:18:54.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:18:54.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:18:54.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:18:54.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:18:54.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:18:54.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:18:38', tmtdew=1.39, humidity=90.78, cloud=0.0, wind=35.0, temperature=6.24, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:18:09.187', atlas_cloud=2, atlas_rain=1, zp_data=[2.6027499999999995, 2.5192500000000004, 2.3302500000000004, 1.3314999999999992, nan, nan, nan, nan, nan, 0.32649999999999935, 1.0562499999999995, 2.157, 2.827, nan, 2.4769999999999994, nan, 0.3272499999999994, 0.18149999999999977, 0.4169999999999998, 0.8672499999999985, 1.6439999999999984, 1.7297499999999983, 1.8742500000000009, 0.4397500000000001, 0.24499999999999922, 0.23850000000000016, 0.36625000000000085, 0.2605000000000004, 0.4039999999999999, 0.3985000000000012, 0.4800000000000013, 0.3200000000000012, 0.19324999999999903], zp_timestamp='2026-02-15T01:17:00')
2026-02-15T03:18:54.174 [DEBUG] [Thread-197027] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:18:54.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:18:54.269 [DEBUG] [Thread-197030] [transport.py] [_log()] starting thread (client mode): 0xa57d5960
2026-02-15T03:18:54.269 [DEBUG] [Thread-197030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:18:54.284 [DEBUG] [Thread-197030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:18:54.284 [INFO] [Thread-197030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:18:54.292 [DEBUG] [Thread-197030] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:18:54.292 [DEBUG] [Thread-197030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:18:54.292 [DEBUG] [Thread-197030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:18:54.292 [DEBUG] [Thread-197030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:18:54.292 [DEBUG] [Thread-197030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:18:54.292 [DEBUG] [Thread-197030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:18:54.292 [DEBUG] [Thread-197030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:18:54.292 [DEBUG] [Thread-197030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:18:54.293 [DEBUG] [Thread-197030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:18:54.293 [DEBUG] [Thread-197030] [transport.py] [_log()] client lang: <none>
2026-02-15T03:18:54.293 [DEBUG] [Thread-197030] [transport.py] [_log()] server lang: <none>
2026-02-15T03:18:54.293 [DEBUG] [Thread-197030] [transport.py] [_log()] kex follows: False
2026-02-15T03:18:54.293 [DEBUG] [Thread-197030] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:18:54.293 [DEBUG] [Thread-197030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:18:54.293 [DEBUG] [Thread-197030] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:18:54.293 [DEBUG] [Thread-197030] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:18:54.293 [DEBUG] [Thread-197030] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:18:54.293 [DEBUG] [Thread-197030] [transport.py] [_log()] Compression: none
2026-02-15T03:18:54.293 [DEBUG] [Thread-197030] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:18:54.351 [DEBUG] [Thread-197030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:18:54.351 [DEBUG] [Thread-197030] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:18:54.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:18:54.352 [DEBUG] [Thread-197030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:18:54.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:18:54.406 [DEBUG] [Thread-197030] [transport.py] [_log()] userauth is OK
2026-02-15T03:18:54.407 [DEBUG] [Thread-197030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:18:54.407 [DEBUG] [Thread-197030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:18:54.407 [DEBUG] [Thread-197030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:18:54.407 [DEBUG] [Thread-197030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:18:54.421 [INFO] [Thread-197030] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:18:54.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-15T03:18:54.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:18:54.646 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:18:54.647 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:18:55.237 [DEBUG] [Thread-197030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:18:55.237 [DEBUG] [Thread-197030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:18:55.284 [DEBUG] [Thread-197030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:18:55.285 [DEBUG] [Thread-197030] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:18:55.294 [DEBUG] [Thread-197030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:18:55.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:18:55.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:18:55.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-15T03:18:55.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:18:55.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:18:55.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:18:55.331 [DEBUG] [Thread-197030] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:19:01.263 [DEBUG] [Thread-197032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:19:16.321 [DEBUG] [Thread-197033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:19:20.090 [DEBUG] [Thread-197034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:19:25.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:19:25.332 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:19:25.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-15T03:19:27.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 19, 13), 0.99, 93.42, 0.0, 32.82, 6.0, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:19:27.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:19:13
2026-02-15T03:19:27.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:19:27.699 [DEBUG] [Thread-197035] [transport.py] [_log()] starting thread (client mode): 0xa2d87520
2026-02-15T03:19:27.699 [DEBUG] [Thread-197035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:19:27.719 [DEBUG] [Thread-197035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:19:27.719 [INFO] [Thread-197035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:19:27.722 [DEBUG] [Thread-197035] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:19:27.722 [DEBUG] [Thread-197035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:19:27.722 [DEBUG] [Thread-197035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:19:27.723 [DEBUG] [Thread-197035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:19:27.723 [DEBUG] [Thread-197035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:19:27.723 [DEBUG] [Thread-197035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:19:27.723 [DEBUG] [Thread-197035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:19:27.723 [DEBUG] [Thread-197035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:19:27.723 [DEBUG] [Thread-197035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:19:27.723 [DEBUG] [Thread-197035] [transport.py] [_log()] client lang: <none>
2026-02-15T03:19:27.723 [DEBUG] [Thread-197035] [transport.py] [_log()] server lang: <none>
2026-02-15T03:19:27.723 [DEBUG] [Thread-197035] [transport.py] [_log()] kex follows: False
2026-02-15T03:19:27.723 [DEBUG] [Thread-197035] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:19:27.723 [DEBUG] [Thread-197035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:19:27.723 [DEBUG] [Thread-197035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:19:27.723 [DEBUG] [Thread-197035] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:19:27.723 [DEBUG] [Thread-197035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:19:27.723 [DEBUG] [Thread-197035] [transport.py] [_log()] Compression: none
2026-02-15T03:19:27.723 [DEBUG] [Thread-197035] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:19:27.740 [DEBUG] [Thread-197035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:19:27.741 [DEBUG] [Thread-197035] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:19:27.741 [DEBUG] [Thread-197035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:19:27.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:19:27.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:19:27.785 [DEBUG] [Thread-197035] [transport.py] [_log()] userauth is OK
2026-02-15T03:19:27.785 [DEBUG] [Thread-197035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:19:27.786 [DEBUG] [Thread-197035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:19:27.786 [DEBUG] [Thread-197035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:19:27.786 [DEBUG] [Thread-197035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:19:27.808 [INFO] [Thread-197035] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:19:27.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:19:28.460 [DEBUG] [Thread-197035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:19:28.460 [DEBUG] [Thread-197035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:19:28.461 [DEBUG] [Thread-197035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:19:28.501 [DEBUG] [Thread-197035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:19:28.502 [DEBUG] [Thread-197035] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:19:28.505 [DEBUG] [Thread-197035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:19:28.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:19:28.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:19:28.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:19:28.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:19:28.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:19:28.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:19:28.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:19:28.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:19:28.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:19:28.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.054620 -999.00   +5.90  29.45     91   +4.70 1 2 1 3 1     0    0 1.30 2.94 .NES. 29.4 29.4 132.2 33.5 6.5 -24.2 6.3 -23.3 6.1 -22.2 6.5 -23.4
2026-02-15T03:19:28.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:19:28.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:19:28.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.054620
2026-02-15T03:19:28.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:19:28.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:19:28.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:19:28.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:19:28.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:19:28.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:19:13', tmtdew=0.99, humidity=93.42, cloud=0.0, wind=32.82, temperature=6.0, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:18:39.168', atlas_cloud=2, atlas_rain=1, zp_data=[2.6027499999999995, 2.5192500000000004, 2.3302500000000004, 1.3314999999999992, nan, nan, nan, nan, nan, 0.32649999999999935, 1.0562499999999995, 2.157, 2.827, nan, 2.4769999999999994, nan, 0.3272499999999994, 0.18149999999999977, 0.4169999999999998, 0.8672499999999985, 1.6439999999999984, 1.7297499999999983, 1.8742500000000009, 0.4397500000000001, 0.24499999999999922, 0.23850000000000016, 0.36625000000000085, 0.2605000000000004, 0.4039999999999999, 0.3985000000000012, 0.4800000000000013, 0.3200000000000012, 0.19324999999999903], zp_timestamp='2026-02-15T01:17:00')
2026-02-15T03:19:28.534 [DEBUG] [Thread-197035] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:19:28.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-15T03:19:28.630 [DEBUG] [Thread-197038] [transport.py] [_log()] starting thread (client mode): 0xa57d7550
2026-02-15T03:19:28.631 [DEBUG] [Thread-197038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:19:28.647 [DEBUG] [Thread-197038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:19:28.648 [INFO] [Thread-197038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:19:28.655 [DEBUG] [Thread-197038] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:19:28.656 [DEBUG] [Thread-197038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:19:28.656 [DEBUG] [Thread-197038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:19:28.656 [DEBUG] [Thread-197038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:19:28.656 [DEBUG] [Thread-197038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:19:28.656 [DEBUG] [Thread-197038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:19:28.656 [DEBUG] [Thread-197038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:19:28.657 [DEBUG] [Thread-197038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:19:28.657 [DEBUG] [Thread-197038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:19:28.657 [DEBUG] [Thread-197038] [transport.py] [_log()] client lang: <none>
2026-02-15T03:19:28.657 [DEBUG] [Thread-197038] [transport.py] [_log()] server lang: <none>
2026-02-15T03:19:28.657 [DEBUG] [Thread-197038] [transport.py] [_log()] kex follows: False
2026-02-15T03:19:28.657 [DEBUG] [Thread-197038] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:19:28.657 [DEBUG] [Thread-197038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:19:28.657 [DEBUG] [Thread-197038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:19:28.658 [DEBUG] [Thread-197038] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:19:28.658 [DEBUG] [Thread-197038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:19:28.658 [DEBUG] [Thread-197038] [transport.py] [_log()] Compression: none
2026-02-15T03:19:28.658 [DEBUG] [Thread-197038] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:19:28.715 [DEBUG] [Thread-197038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:19:28.716 [DEBUG] [Thread-197038] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:19:28.717 [DEBUG] [Thread-197038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:19:28.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:19:28.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:19:28.771 [DEBUG] [Thread-197038] [transport.py] [_log()] userauth is OK
2026-02-15T03:19:28.772 [DEBUG] [Thread-197038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:19:28.772 [DEBUG] [Thread-197038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:19:28.772 [DEBUG] [Thread-197038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:19:28.772 [DEBUG] [Thread-197038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:19:28.791 [INFO] [Thread-197038] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:19:28.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-15T03:19:28.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:19:29.593 [DEBUG] [Thread-197038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:19:29.593 [DEBUG] [Thread-197038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:19:29.641 [DEBUG] [Thread-197038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:19:29.642 [DEBUG] [Thread-197038] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:19:29.651 [DEBUG] [Thread-197038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:19:29.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:19:29.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')
2026-02-15T03:19:29.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:19:29.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:19:29.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:19:29.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:19:29.688 [DEBUG] [Thread-197038] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:19:31.358 [DEBUG] [Thread-197040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:19:46.408 [DEBUG] [Thread-197041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:19:54.849 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:19:54.851 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:19:59.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:19:59.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:19:59.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-15T03:20:01.447 [DEBUG] [Thread-197042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:20:01.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 19, 48), 0.98, 93.46, 0.0, 33.79, 6.02, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:20:01.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:19:48
2026-02-15T03:20:01.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:20:02.028 [DEBUG] [Thread-197043] [transport.py] [_log()] starting thread (client mode): 0xa57d5ab0
2026-02-15T03:20:02.028 [DEBUG] [Thread-197043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:20:02.038 [DEBUG] [Thread-197043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:20:02.039 [INFO] [Thread-197043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:20:02.040 [DEBUG] [Thread-197043] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:20:02.040 [DEBUG] [Thread-197043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:20:02.040 [DEBUG] [Thread-197043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:20:02.040 [DEBUG] [Thread-197043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:20:02.040 [DEBUG] [Thread-197043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:20:02.040 [DEBUG] [Thread-197043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:20:02.040 [DEBUG] [Thread-197043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:20:02.040 [DEBUG] [Thread-197043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:20:02.040 [DEBUG] [Thread-197043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:20:02.040 [DEBUG] [Thread-197043] [transport.py] [_log()] client lang: <none>
2026-02-15T03:20:02.040 [DEBUG] [Thread-197043] [transport.py] [_log()] server lang: <none>
2026-02-15T03:20:02.040 [DEBUG] [Thread-197043] [transport.py] [_log()] kex follows: False
2026-02-15T03:20:02.041 [DEBUG] [Thread-197043] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:20:02.041 [DEBUG] [Thread-197043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:20:02.041 [DEBUG] [Thread-197043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:20:02.041 [DEBUG] [Thread-197043] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:20:02.041 [DEBUG] [Thread-197043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:20:02.041 [DEBUG] [Thread-197043] [transport.py] [_log()] Compression: none
2026-02-15T03:20:02.041 [DEBUG] [Thread-197043] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:20:02.049 [DEBUG] [Thread-197043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:20:02.049 [DEBUG] [Thread-197043] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:20:02.049 [DEBUG] [Thread-197043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:20:02.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:20:02.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:20:02.050 [DEBUG] [Thread-197043] [transport.py] [_log()] userauth is OK
2026-02-15T03:20:02.050 [DEBUG] [Thread-197043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:20:02.050 [DEBUG] [Thread-197043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:20:02.050 [DEBUG] [Thread-197043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:20:02.050 [DEBUG] [Thread-197043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:20:02.063 [INFO] [Thread-197043] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:20:02.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:20:02.701 [DEBUG] [Thread-197043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:20:02.702 [DEBUG] [Thread-197043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:20:02.702 [DEBUG] [Thread-197043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:20:02.742 [DEBUG] [Thread-197043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:20:02.743 [DEBUG] [Thread-197043] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:20:02.746 [DEBUG] [Thread-197043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:20:02.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:20:02.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:20:02.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:20:02.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:20:02.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:20:02.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:20:02.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:20:02.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:20:02.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:20:02.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.054967 -999.00   +5.90  22.10     91   +4.70 1 2 1 3 1     0    0 1.30 2.45 .NES. 22.1 22.1 142.7 29.9 6.5 -24.0 6.3 -23.2 6.1 -22.2 6.5 -23.4
2026-02-15T03:20:02.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:20:02.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:20:02.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.054967
2026-02-15T03:20:02.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:20:02.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:20:02.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:20:02.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:20:02.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:20:02.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:19:48', tmtdew=0.98, humidity=93.46, cloud=0.0, wind=33.79, temperature=6.02, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:19:09.149', atlas_cloud=2, atlas_rain=1, zp_data=[2.6027499999999995, 2.5192500000000004, 2.3302500000000004, 1.3314999999999992, nan, nan, nan, nan, nan, 0.32649999999999935, 1.0562499999999995, 2.157, 2.827, nan, 2.4769999999999994, nan, 0.3272499999999994, 0.18149999999999977, 0.4169999999999998, 0.8672499999999985, 1.6439999999999984, 1.7297499999999983, 1.8742500000000009, 0.4397500000000001, 0.24499999999999922, 0.23850000000000016, 0.36625000000000085, 0.2605000000000004, 0.4039999999999999, 0.3985000000000012, 0.4800000000000013, 0.3200000000000012, 0.19324999999999903], zp_timestamp='2026-02-15T01:17:00')
2026-02-15T03:20:02.776 [DEBUG] [Thread-197043] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:20:02.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-15T03:20:02.871 [DEBUG] [Thread-197046] [transport.py] [_log()] starting thread (client mode): 0xa57d6b00
2026-02-15T03:20:02.871 [DEBUG] [Thread-197046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:20:02.886 [DEBUG] [Thread-197046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:20:02.886 [INFO] [Thread-197046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:20:02.893 [DEBUG] [Thread-197046] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:20:02.893 [DEBUG] [Thread-197046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:20:02.894 [DEBUG] [Thread-197046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:20:02.894 [DEBUG] [Thread-197046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:20:02.894 [DEBUG] [Thread-197046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:20:02.894 [DEBUG] [Thread-197046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:20:02.894 [DEBUG] [Thread-197046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:20:02.894 [DEBUG] [Thread-197046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:20:02.894 [DEBUG] [Thread-197046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:20:02.894 [DEBUG] [Thread-197046] [transport.py] [_log()] client lang: <none>
2026-02-15T03:20:02.894 [DEBUG] [Thread-197046] [transport.py] [_log()] server lang: <none>
2026-02-15T03:20:02.895 [DEBUG] [Thread-197046] [transport.py] [_log()] kex follows: False
2026-02-15T03:20:02.895 [DEBUG] [Thread-197046] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:20:02.895 [DEBUG] [Thread-197046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:20:02.895 [DEBUG] [Thread-197046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:20:02.895 [DEBUG] [Thread-197046] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:20:02.895 [DEBUG] [Thread-197046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:20:02.896 [DEBUG] [Thread-197046] [transport.py] [_log()] Compression: none
2026-02-15T03:20:02.896 [DEBUG] [Thread-197046] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:20:02.952 [DEBUG] [Thread-197046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:20:02.952 [DEBUG] [Thread-197046] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:20:02.953 [DEBUG] [Thread-197046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:20:02.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:20:02.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:20:03.007 [DEBUG] [Thread-197046] [transport.py] [_log()] userauth is OK
2026-02-15T03:20:03.007 [DEBUG] [Thread-197046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:20:03.008 [DEBUG] [Thread-197046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:20:03.008 [DEBUG] [Thread-197046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:20:03.008 [DEBUG] [Thread-197046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:20:03.028 [INFO] [Thread-197046] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:20:03.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-15T03:20:03.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:20:03.829 [DEBUG] [Thread-197046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:20:03.830 [DEBUG] [Thread-197046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:20:03.877 [DEBUG] [Thread-197046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:20:03.877 [DEBUG] [Thread-197046] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:20:03.887 [DEBUG] [Thread-197046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:20:03.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:20:03.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-15T03:20:03.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:20:03.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:20:03.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:20:03.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:20:03.924 [DEBUG] [Thread-197046] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:20:16.485 [DEBUG] [Thread-197048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:20:20.158 [DEBUG] [Thread-197049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:20:31.539 [DEBUG] [Thread-197050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:20:33.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:20:33.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:20:33.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T03:20:35.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 20, 24), 0.99, 93.42, 0.0, 34.27, 5.99, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:20:35.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:20:24
2026-02-15T03:20:36.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:20:36.475 [DEBUG] [Thread-197051] [transport.py] [_log()] starting thread (client mode): 0xa5773f70
2026-02-15T03:20:36.475 [DEBUG] [Thread-197051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:20:36.496 [DEBUG] [Thread-197051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:20:36.496 [INFO] [Thread-197051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:20:36.499 [DEBUG] [Thread-197051] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:20:36.499 [DEBUG] [Thread-197051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:20:36.499 [DEBUG] [Thread-197051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:20:36.499 [DEBUG] [Thread-197051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:20:36.500 [DEBUG] [Thread-197051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:20:36.500 [DEBUG] [Thread-197051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:20:36.500 [DEBUG] [Thread-197051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:20:36.500 [DEBUG] [Thread-197051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:20:36.500 [DEBUG] [Thread-197051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:20:36.500 [DEBUG] [Thread-197051] [transport.py] [_log()] client lang: <none>
2026-02-15T03:20:36.500 [DEBUG] [Thread-197051] [transport.py] [_log()] server lang: <none>
2026-02-15T03:20:36.500 [DEBUG] [Thread-197051] [transport.py] [_log()] kex follows: False
2026-02-15T03:20:36.500 [DEBUG] [Thread-197051] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:20:36.500 [DEBUG] [Thread-197051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:20:36.500 [DEBUG] [Thread-197051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:20:36.500 [DEBUG] [Thread-197051] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:20:36.500 [DEBUG] [Thread-197051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:20:36.500 [DEBUG] [Thread-197051] [transport.py] [_log()] Compression: none
2026-02-15T03:20:36.500 [DEBUG] [Thread-197051] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:20:36.519 [DEBUG] [Thread-197051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:20:36.520 [DEBUG] [Thread-197051] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:20:36.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:20:36.521 [DEBUG] [Thread-197051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:20:36.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:20:36.523 [DEBUG] [Thread-197051] [transport.py] [_log()] userauth is OK
2026-02-15T03:20:36.523 [DEBUG] [Thread-197051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:20:36.524 [DEBUG] [Thread-197051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:20:36.524 [DEBUG] [Thread-197051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:20:36.524 [DEBUG] [Thread-197051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:20:36.559 [INFO] [Thread-197051] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:20:36.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:20:37.185 [DEBUG] [Thread-197051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:20:37.186 [DEBUG] [Thread-197051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:20:37.186 [DEBUG] [Thread-197051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:20:37.226 [DEBUG] [Thread-197051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:20:37.227 [DEBUG] [Thread-197051] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:20:37.229 [DEBUG] [Thread-197051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:20:37.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:20:37.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:20:37.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:20:37.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:20:37.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:20:37.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:20:37.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:20:37.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:20:37.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:20:37.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.055314 -999.00   +5.90  24.69     92   +4.70 1 2 1 3 1     0    0 1.28 1.90 .NES. 24.7 24.7 136.4 35.5 6.5 -24.0 6.3 -23.2 6.1 -22.0 6.4 -23.4
2026-02-15T03:20:37.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:20:37.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:20:37.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.055314
2026-02-15T03:20:37.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:20:37.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:20:37.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:20:37.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:20:37.255 [DEBUG] [Thread-197051] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:20:37.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:20:37.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:20:24', tmtdew=0.99, humidity=93.42, cloud=0.0, wind=34.27, temperature=5.99, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:19:39.130', atlas_cloud=2, atlas_rain=1, zp_data=[2.6027499999999995, 2.5192500000000004, 2.3302500000000004, 1.3314999999999992, nan, nan, nan, nan, nan, 0.32649999999999935, 1.0562499999999995, 2.157, 2.827, nan, 2.4769999999999994, nan, 0.3272499999999994, 0.18149999999999977, 0.4169999999999998, 0.8672499999999985, 1.6439999999999984, 1.7297499999999983, 1.8742500000000009, 0.4397500000000001, 0.24499999999999922, 0.23850000000000016, 0.36625000000000085, 0.2605000000000004, 0.4039999999999999, 0.3985000000000012, 0.4800000000000013, 0.3200000000000012, 0.19324999999999903], zp_timestamp='2026-02-15T01:17:00')
2026-02-15T03:20:37.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-15T03:20:37.360 [DEBUG] [Thread-197054] [transport.py] [_log()] starting thread (client mode): 0xa5771990
2026-02-15T03:20:37.361 [DEBUG] [Thread-197054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:20:37.375 [DEBUG] [Thread-197054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:20:37.375 [INFO] [Thread-197054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:20:37.383 [DEBUG] [Thread-197054] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:20:37.384 [DEBUG] [Thread-197054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:20:37.384 [DEBUG] [Thread-197054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:20:37.384 [DEBUG] [Thread-197054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:20:37.384 [DEBUG] [Thread-197054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:20:37.384 [DEBUG] [Thread-197054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:20:37.384 [DEBUG] [Thread-197054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:20:37.384 [DEBUG] [Thread-197054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:20:37.384 [DEBUG] [Thread-197054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:20:37.385 [DEBUG] [Thread-197054] [transport.py] [_log()] client lang: <none>
2026-02-15T03:20:37.385 [DEBUG] [Thread-197054] [transport.py] [_log()] server lang: <none>
2026-02-15T03:20:37.385 [DEBUG] [Thread-197054] [transport.py] [_log()] kex follows: False
2026-02-15T03:20:37.385 [DEBUG] [Thread-197054] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:20:37.385 [DEBUG] [Thread-197054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:20:37.385 [DEBUG] [Thread-197054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:20:37.385 [DEBUG] [Thread-197054] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:20:37.386 [DEBUG] [Thread-197054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:20:37.386 [DEBUG] [Thread-197054] [transport.py] [_log()] Compression: none
2026-02-15T03:20:37.386 [DEBUG] [Thread-197054] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:20:37.441 [DEBUG] [Thread-197054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:20:37.441 [DEBUG] [Thread-197054] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:20:37.442 [DEBUG] [Thread-197054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:20:37.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:20:37.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:20:37.497 [DEBUG] [Thread-197054] [transport.py] [_log()] userauth is OK
2026-02-15T03:20:37.497 [DEBUG] [Thread-197054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:20:37.497 [DEBUG] [Thread-197054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:20:37.497 [DEBUG] [Thread-197054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:20:37.497 [DEBUG] [Thread-197054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:20:37.519 [INFO] [Thread-197054] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:20:37.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-15T03:20:37.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:20:38.297 [DEBUG] [Thread-197054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:20:38.297 [DEBUG] [Thread-197054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:20:38.349 [DEBUG] [Thread-197054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:20:38.349 [DEBUG] [Thread-197054] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:20:38.362 [DEBUG] [Thread-197054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:20:38.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:20:38.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-15T03:20:38.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-15T03:20:38.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:20:38.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:20:38.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:20:38.415 [DEBUG] [Thread-197054] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:20:46.577 [DEBUG] [Thread-197056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:20:55.054 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:20:55.055 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:21:01.631 [DEBUG] [Thread-197057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:21:08.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:21:08.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:21:08.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-15T03:21:10.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 20, 24), 0.99, 93.42, 0.0, 34.27, 5.99, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:21:10.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:20:24
2026-02-15T03:21:10.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:21:11.119 [DEBUG] [Thread-197058] [transport.py] [_log()] starting thread (client mode): 0xa57d5b10
2026-02-15T03:21:11.119 [DEBUG] [Thread-197058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:21:11.138 [DEBUG] [Thread-197058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:21:11.138 [INFO] [Thread-197058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:21:11.141 [DEBUG] [Thread-197058] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:21:11.141 [DEBUG] [Thread-197058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:21:11.141 [DEBUG] [Thread-197058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:21:11.141 [DEBUG] [Thread-197058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:21:11.141 [DEBUG] [Thread-197058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:21:11.142 [DEBUG] [Thread-197058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:21:11.142 [DEBUG] [Thread-197058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:21:11.142 [DEBUG] [Thread-197058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:21:11.142 [DEBUG] [Thread-197058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:21:11.142 [DEBUG] [Thread-197058] [transport.py] [_log()] client lang: <none>
2026-02-15T03:21:11.142 [DEBUG] [Thread-197058] [transport.py] [_log()] server lang: <none>
2026-02-15T03:21:11.142 [DEBUG] [Thread-197058] [transport.py] [_log()] kex follows: False
2026-02-15T03:21:11.142 [DEBUG] [Thread-197058] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:21:11.142 [DEBUG] [Thread-197058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:21:11.142 [DEBUG] [Thread-197058] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:21:11.142 [DEBUG] [Thread-197058] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:21:11.142 [DEBUG] [Thread-197058] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:21:11.142 [DEBUG] [Thread-197058] [transport.py] [_log()] Compression: none
2026-02-15T03:21:11.142 [DEBUG] [Thread-197058] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:21:11.158 [DEBUG] [Thread-197058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:21:11.159 [DEBUG] [Thread-197058] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:21:11.159 [DEBUG] [Thread-197058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:21:11.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:21:11.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:21:11.161 [DEBUG] [Thread-197058] [transport.py] [_log()] userauth is OK
2026-02-15T03:21:11.161 [DEBUG] [Thread-197058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:21:11.161 [DEBUG] [Thread-197058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:21:11.161 [DEBUG] [Thread-197058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:21:11.161 [DEBUG] [Thread-197058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:21:11.175 [INFO] [Thread-197058] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:21:11.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:21:11.817 [DEBUG] [Thread-197058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:21:11.817 [DEBUG] [Thread-197058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:21:11.818 [DEBUG] [Thread-197058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:21:11.857 [DEBUG] [Thread-197058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:21:11.857 [DEBUG] [Thread-197058] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:21:11.860 [DEBUG] [Thread-197058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:21:11.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:21:11.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:21:11.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:21:11.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:21:11.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:21:11.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:21:11.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:21:11.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:21:11.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:21:11.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.056009 -999.00   +5.90  28.56     92   +4.70 1 2 1 3 1     0    0 1.25 0.98 .NES. 28.6 28.6 139.2 37.0 6.5 -24.1 6.3 -23.4 6.1 -22.2 6.4 -23.5
2026-02-15T03:21:11.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:21:11.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:21:11.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.056009
2026-02-15T03:21:11.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:21:11.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:21:11.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:21:11.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:21:11.886 [DEBUG] [Thread-197058] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:21:11.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:21:11.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:20:24', tmtdew=0.99, humidity=93.42, cloud=0.0, wind=34.27, temperature=5.99, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:20:39.178', atlas_cloud=2, atlas_rain=1, zp_data=[2.6027499999999995, 2.5192500000000004, 2.3302500000000004, 1.3314999999999992, nan, nan, nan, nan, nan, 0.32649999999999935, 1.0562499999999995, 2.157, 2.827, nan, 2.4769999999999994, nan, 0.3272499999999994, 0.18149999999999977, 0.4169999999999998, 0.8672499999999985, 1.6439999999999984, 1.7297499999999983, 1.8742500000000009, 0.4397500000000001, 0.24499999999999922, 0.23850000000000016, 0.36625000000000085, 0.2605000000000004, 0.4039999999999999, 0.3985000000000012, 0.4800000000000013, 0.3200000000000012, 0.19324999999999903], zp_timestamp='2026-02-15T01:17:00')
2026-02-15T03:21:11.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-15T03:21:11.985 [DEBUG] [Thread-197061] [transport.py] [_log()] starting thread (client mode): 0xa57d5db0
2026-02-15T03:21:11.985 [DEBUG] [Thread-197061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:21:11.999 [DEBUG] [Thread-197061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:21:12.000 [INFO] [Thread-197061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:21:12.007 [DEBUG] [Thread-197061] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:21:12.007 [DEBUG] [Thread-197061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:21:12.007 [DEBUG] [Thread-197061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:21:12.007 [DEBUG] [Thread-197061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:21:12.007 [DEBUG] [Thread-197061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:21:12.007 [DEBUG] [Thread-197061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:21:12.007 [DEBUG] [Thread-197061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:21:12.007 [DEBUG] [Thread-197061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:21:12.007 [DEBUG] [Thread-197061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:21:12.007 [DEBUG] [Thread-197061] [transport.py] [_log()] client lang: <none>
2026-02-15T03:21:12.007 [DEBUG] [Thread-197061] [transport.py] [_log()] server lang: <none>
2026-02-15T03:21:12.007 [DEBUG] [Thread-197061] [transport.py] [_log()] kex follows: False
2026-02-15T03:21:12.007 [DEBUG] [Thread-197061] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:21:12.007 [DEBUG] [Thread-197061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:21:12.007 [DEBUG] [Thread-197061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:21:12.007 [DEBUG] [Thread-197061] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:21:12.007 [DEBUG] [Thread-197061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:21:12.007 [DEBUG] [Thread-197061] [transport.py] [_log()] Compression: none
2026-02-15T03:21:12.007 [DEBUG] [Thread-197061] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:21:12.069 [DEBUG] [Thread-197061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:21:12.070 [DEBUG] [Thread-197061] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:21:12.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:21:12.071 [DEBUG] [Thread-197061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:21:12.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:21:12.126 [DEBUG] [Thread-197061] [transport.py] [_log()] userauth is OK
2026-02-15T03:21:12.126 [DEBUG] [Thread-197061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:21:12.126 [DEBUG] [Thread-197061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:21:12.126 [DEBUG] [Thread-197061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:21:12.126 [DEBUG] [Thread-197061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:21:12.146 [INFO] [Thread-197061] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:21:12.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-15T03:21:12.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:21:12.936 [DEBUG] [Thread-197061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:21:12.937 [DEBUG] [Thread-197061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:21:12.984 [DEBUG] [Thread-197061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:21:12.984 [DEBUG] [Thread-197061] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:21:12.993 [DEBUG] [Thread-197061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:21:13.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:21:13.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:21:13.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-15T03:21:13.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:21:13.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:21:13.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:21:13.027 [DEBUG] [Thread-197061] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:21:16.668 [DEBUG] [Thread-197063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:21:20.219 [DEBUG] [Thread-197064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:21:31.720 [DEBUG] [Thread-197065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:21:43.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:21:43.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:21:43.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-15T03:21:44.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 21, 35), 1.37, 90.88, 0.0, 33.84, 6.27, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:21:44.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:21:35
2026-02-15T03:21:45.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:21:45.469 [DEBUG] [Thread-197066] [transport.py] [_log()] starting thread (client mode): 0xa5773760
2026-02-15T03:21:45.469 [DEBUG] [Thread-197066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:21:45.488 [DEBUG] [Thread-197066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:21:45.488 [INFO] [Thread-197066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:21:45.491 [DEBUG] [Thread-197066] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:21:45.491 [DEBUG] [Thread-197066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:21:45.491 [DEBUG] [Thread-197066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:21:45.491 [DEBUG] [Thread-197066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:21:45.491 [DEBUG] [Thread-197066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:21:45.491 [DEBUG] [Thread-197066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:21:45.491 [DEBUG] [Thread-197066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:21:45.491 [DEBUG] [Thread-197066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:21:45.491 [DEBUG] [Thread-197066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:21:45.491 [DEBUG] [Thread-197066] [transport.py] [_log()] client lang: <none>
2026-02-15T03:21:45.491 [DEBUG] [Thread-197066] [transport.py] [_log()] server lang: <none>
2026-02-15T03:21:45.492 [DEBUG] [Thread-197066] [transport.py] [_log()] kex follows: False
2026-02-15T03:21:45.492 [DEBUG] [Thread-197066] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:21:45.492 [DEBUG] [Thread-197066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:21:45.492 [DEBUG] [Thread-197066] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:21:45.492 [DEBUG] [Thread-197066] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:21:45.492 [DEBUG] [Thread-197066] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:21:45.492 [DEBUG] [Thread-197066] [transport.py] [_log()] Compression: none
2026-02-15T03:21:45.492 [DEBUG] [Thread-197066] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:21:45.509 [DEBUG] [Thread-197066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:21:45.509 [DEBUG] [Thread-197066] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:21:45.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:21:45.510 [DEBUG] [Thread-197066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:21:45.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:21:45.512 [DEBUG] [Thread-197066] [transport.py] [_log()] userauth is OK
2026-02-15T03:21:45.512 [DEBUG] [Thread-197066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:21:45.513 [DEBUG] [Thread-197066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:21:45.513 [DEBUG] [Thread-197066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:21:45.513 [DEBUG] [Thread-197066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:21:45.537 [INFO] [Thread-197066] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:21:45.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:21:46.307 [DEBUG] [Thread-197066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:21:46.308 [DEBUG] [Thread-197066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:21:46.308 [DEBUG] [Thread-197066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:21:46.348 [DEBUG] [Thread-197066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:21:46.348 [DEBUG] [Thread-197066] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:21:46.352 [DEBUG] [Thread-197066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:21:46.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:21:46.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:21:46.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:21:46.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:21:46.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:21:46.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:21:46.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:21:46.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:21:46.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:21:46.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.056356 -999.00   +5.90  22.98     92   +4.70 1 2 1 3 1     0    0 1.23 0.37 .NES. 23.0 23.0 139.4 34.6 6.5 -24.2 6.3 -23.2 6.1 -22.0 6.5 -23.3
2026-02-15T03:21:46.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:21:46.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:21:46.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.056356
2026-02-15T03:21:46.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:21:46.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:21:46.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:21:46.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:21:46.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:21:46.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:21:35', tmtdew=1.37, humidity=90.88, cloud=0.0, wind=33.84, temperature=6.27, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:21:09.158', atlas_cloud=2, atlas_rain=1, zp_data=[2.6027499999999995, 2.5192500000000004, 2.3302500000000004, 1.3314999999999992, nan, nan, nan, nan, nan, 0.32649999999999935, 1.0562499999999995, 2.157, 2.827, nan, 2.4769999999999994, nan, 0.3272499999999994, 0.18149999999999977, 0.4169999999999998, 0.8672499999999985, 1.6439999999999984, 1.7297499999999983, 1.8742500000000009, 0.4397500000000001, 0.24499999999999922, 0.23850000000000016, 0.36625000000000085, 0.2605000000000004, 0.4039999999999999, 0.3985000000000012, 0.4800000000000013, 0.3200000000000012, 0.19324999999999903], zp_timestamp='2026-02-15T01:17:00')
2026-02-15T03:21:46.376 [DEBUG] [Thread-197066] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:21:46.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-15T03:21:46.471 [DEBUG] [Thread-197069] [transport.py] [_log()] starting thread (client mode): 0xa5772170
2026-02-15T03:21:46.471 [DEBUG] [Thread-197069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:21:46.486 [DEBUG] [Thread-197069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:21:46.486 [INFO] [Thread-197069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:21:46.494 [DEBUG] [Thread-197069] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:21:46.494 [DEBUG] [Thread-197069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:21:46.495 [DEBUG] [Thread-197069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:21:46.495 [DEBUG] [Thread-197069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:21:46.495 [DEBUG] [Thread-197069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:21:46.495 [DEBUG] [Thread-197069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:21:46.495 [DEBUG] [Thread-197069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:21:46.495 [DEBUG] [Thread-197069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:21:46.495 [DEBUG] [Thread-197069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:21:46.495 [DEBUG] [Thread-197069] [transport.py] [_log()] client lang: <none>
2026-02-15T03:21:46.495 [DEBUG] [Thread-197069] [transport.py] [_log()] server lang: <none>
2026-02-15T03:21:46.495 [DEBUG] [Thread-197069] [transport.py] [_log()] kex follows: False
2026-02-15T03:21:46.495 [DEBUG] [Thread-197069] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:21:46.495 [DEBUG] [Thread-197069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:21:46.495 [DEBUG] [Thread-197069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:21:46.495 [DEBUG] [Thread-197069] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:21:46.495 [DEBUG] [Thread-197069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:21:46.495 [DEBUG] [Thread-197069] [transport.py] [_log()] Compression: none
2026-02-15T03:21:46.495 [DEBUG] [Thread-197069] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:21:46.554 [DEBUG] [Thread-197069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:21:46.554 [DEBUG] [Thread-197069] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:21:46.555 [DEBUG] [Thread-197069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:21:46.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:21:46.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:21:46.610 [DEBUG] [Thread-197069] [transport.py] [_log()] userauth is OK
2026-02-15T03:21:46.610 [DEBUG] [Thread-197069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:21:46.610 [DEBUG] [Thread-197069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:21:46.611 [DEBUG] [Thread-197069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:21:46.611 [DEBUG] [Thread-197069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:21:46.630 [INFO] [Thread-197069] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:21:46.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-15T03:21:46.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:21:46.755 [DEBUG] [Thread-197071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:21:47.451 [DEBUG] [Thread-197069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:21:47.451 [DEBUG] [Thread-197069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:21:47.498 [DEBUG] [Thread-197069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:21:47.498 [DEBUG] [Thread-197069] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:21:47.507 [DEBUG] [Thread-197069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:21:47.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:21:47.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')
2026-02-15T03:21:47.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-15T03:21:47.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:21:47.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:21:47.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:21:47.541 [DEBUG] [Thread-197069] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:21:55.259 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:21:55.260 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:22:01.805 [DEBUG] [Thread-197072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:22:16.842 [DEBUG] [Thread-197073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:22:17.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:22:17.564 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:22:17.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-15T03:22:19.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 22, 11), 0.94, 93.44, 0.0, 33.56, 5.92, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:22:19.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:22:11
2026-02-15T03:22:19.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:22:19.869 [DEBUG] [Thread-197074] [transport.py] [_log()] starting thread (client mode): 0xa5773df0
2026-02-15T03:22:19.869 [DEBUG] [Thread-197074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:22:19.889 [DEBUG] [Thread-197074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:22:19.889 [INFO] [Thread-197074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:22:19.892 [DEBUG] [Thread-197074] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:22:19.892 [DEBUG] [Thread-197074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:22:19.892 [DEBUG] [Thread-197074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:22:19.892 [DEBUG] [Thread-197074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:22:19.892 [DEBUG] [Thread-197074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:22:19.892 [DEBUG] [Thread-197074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:22:19.892 [DEBUG] [Thread-197074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:22:19.892 [DEBUG] [Thread-197074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:22:19.892 [DEBUG] [Thread-197074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:22:19.892 [DEBUG] [Thread-197074] [transport.py] [_log()] client lang: <none>
2026-02-15T03:22:19.892 [DEBUG] [Thread-197074] [transport.py] [_log()] server lang: <none>
2026-02-15T03:22:19.892 [DEBUG] [Thread-197074] [transport.py] [_log()] kex follows: False
2026-02-15T03:22:19.892 [DEBUG] [Thread-197074] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:22:19.892 [DEBUG] [Thread-197074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:22:19.892 [DEBUG] [Thread-197074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:22:19.892 [DEBUG] [Thread-197074] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:22:19.892 [DEBUG] [Thread-197074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:22:19.892 [DEBUG] [Thread-197074] [transport.py] [_log()] Compression: none
2026-02-15T03:22:19.892 [DEBUG] [Thread-197074] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:22:19.912 [DEBUG] [Thread-197074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:22:19.912 [DEBUG] [Thread-197074] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:22:19.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:22:19.913 [DEBUG] [Thread-197074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:22:19.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:22:19.915 [DEBUG] [Thread-197074] [transport.py] [_log()] userauth is OK
2026-02-15T03:22:19.915 [DEBUG] [Thread-197074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:22:19.915 [DEBUG] [Thread-197074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:22:19.916 [DEBUG] [Thread-197074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:22:19.916 [DEBUG] [Thread-197074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:22:19.950 [INFO] [Thread-197074] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:22:19.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:22:20.286 [DEBUG] [Thread-197076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:22:20.599 [DEBUG] [Thread-197074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:22:20.599 [DEBUG] [Thread-197074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:22:20.599 [DEBUG] [Thread-197074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:22:20.640 [DEBUG] [Thread-197074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:22:20.640 [DEBUG] [Thread-197074] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:22:20.644 [DEBUG] [Thread-197074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:22:20.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:22:20.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:22:20.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:22:20.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:22:20.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:22:20.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:22:20.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:22:20.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:22:20.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:22:20.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.056703 -999.00   +5.90  24.25     92   +4.70 1 2 1 3 1     0    0 1.22 0.07 .NES. 24.2 24.2 146.4 31.1 6.5 -24.1 6.3 -23.3 6.1 -22.2 6.4 -23.5
2026-02-15T03:22:20.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:22:20.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:22:20.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.056703
2026-02-15T03:22:20.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:22:20.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:22:20.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:22:20.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:22:20.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:22:20.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:22:11', tmtdew=0.94, humidity=93.44, cloud=0.0, wind=33.56, temperature=5.92, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:21:39.139', atlas_cloud=2, atlas_rain=1, zp_data=[2.6247499999999997, 2.56475, 2.420250000000001, 2.0824999999999996, nan, nan, nan, nan, nan, 0.2995000000000001, 0.9777500000000003, 2.33, 2.8359999999999994, nan, 2.76, nan, 0.2967499999999994, 0.19950000000000045, 0.3879999999999999, 0.8672499999999985, 1.6464999999999987, 1.800749999999999, 2.186250000000001, 0.4867499999999998, 0.24099999999999966, 0.22250000000000014, 0.37175000000000047, 0.2840000000000007, 0.4190000000000005, 0.386000000000001, 0.4455000000000009, 0.30400000000000116, 0.16274999999999906], zp_timestamp='2026-02-15T01:21:00')
2026-02-15T03:22:20.671 [DEBUG] [Thread-197074] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:22:20.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-15T03:22:20.765 [DEBUG] [Thread-197078] [transport.py] [_log()] starting thread (client mode): 0xa57d4a30
2026-02-15T03:22:20.765 [DEBUG] [Thread-197078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:22:20.780 [DEBUG] [Thread-197078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:22:20.780 [INFO] [Thread-197078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:22:20.787 [DEBUG] [Thread-197078] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:22:20.787 [DEBUG] [Thread-197078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:22:20.788 [DEBUG] [Thread-197078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:22:20.788 [DEBUG] [Thread-197078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:22:20.788 [DEBUG] [Thread-197078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:22:20.788 [DEBUG] [Thread-197078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:22:20.788 [DEBUG] [Thread-197078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:22:20.788 [DEBUG] [Thread-197078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:22:20.788 [DEBUG] [Thread-197078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:22:20.788 [DEBUG] [Thread-197078] [transport.py] [_log()] client lang: <none>
2026-02-15T03:22:20.788 [DEBUG] [Thread-197078] [transport.py] [_log()] server lang: <none>
2026-02-15T03:22:20.789 [DEBUG] [Thread-197078] [transport.py] [_log()] kex follows: False
2026-02-15T03:22:20.789 [DEBUG] [Thread-197078] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:22:20.789 [DEBUG] [Thread-197078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:22:20.789 [DEBUG] [Thread-197078] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:22:20.789 [DEBUG] [Thread-197078] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:22:20.789 [DEBUG] [Thread-197078] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:22:20.789 [DEBUG] [Thread-197078] [transport.py] [_log()] Compression: none
2026-02-15T03:22:20.789 [DEBUG] [Thread-197078] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:22:20.847 [DEBUG] [Thread-197078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:22:20.848 [DEBUG] [Thread-197078] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:22:20.848 [DEBUG] [Thread-197078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:22:20.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:22:20.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:22:20.907 [DEBUG] [Thread-197078] [transport.py] [_log()] userauth is OK
2026-02-15T03:22:20.907 [DEBUG] [Thread-197078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:22:20.908 [DEBUG] [Thread-197078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:22:20.908 [DEBUG] [Thread-197078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:22:20.908 [DEBUG] [Thread-197078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:22:20.927 [INFO] [Thread-197078] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:22:20.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:22:20.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:22:21.729 [DEBUG] [Thread-197078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:22:21.729 [DEBUG] [Thread-197078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:22:21.777 [DEBUG] [Thread-197078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:22:21.778 [DEBUG] [Thread-197078] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:22:21.787 [DEBUG] [Thread-197078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:22:21.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:22:21.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:22:21.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-15T03:22:21.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:22:21.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:22:21.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:22:21.824 [DEBUG] [Thread-197078] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:22:31.878 [DEBUG] [Thread-197080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:22:46.933 [DEBUG] [Thread-197081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:22:51.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:22:51.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:22:51.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-15T03:22:53.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 22, 46), 0.94, 93.44, 0.0, 32.8, 5.9, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:22:53.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:22:46
2026-02-15T03:22:53.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:22:54.143 [DEBUG] [Thread-197082] [transport.py] [_log()] starting thread (client mode): 0xa2d87790
2026-02-15T03:22:54.143 [DEBUG] [Thread-197082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:22:54.163 [DEBUG] [Thread-197082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:22:54.163 [INFO] [Thread-197082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:22:54.166 [DEBUG] [Thread-197082] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:22:54.167 [DEBUG] [Thread-197082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:22:54.167 [DEBUG] [Thread-197082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:22:54.167 [DEBUG] [Thread-197082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:22:54.167 [DEBUG] [Thread-197082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:22:54.167 [DEBUG] [Thread-197082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:22:54.167 [DEBUG] [Thread-197082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:22:54.167 [DEBUG] [Thread-197082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:22:54.167 [DEBUG] [Thread-197082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:22:54.167 [DEBUG] [Thread-197082] [transport.py] [_log()] client lang: <none>
2026-02-15T03:22:54.167 [DEBUG] [Thread-197082] [transport.py] [_log()] server lang: <none>
2026-02-15T03:22:54.167 [DEBUG] [Thread-197082] [transport.py] [_log()] kex follows: False
2026-02-15T03:22:54.167 [DEBUG] [Thread-197082] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:22:54.167 [DEBUG] [Thread-197082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:22:54.167 [DEBUG] [Thread-197082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:22:54.167 [DEBUG] [Thread-197082] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:22:54.167 [DEBUG] [Thread-197082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:22:54.167 [DEBUG] [Thread-197082] [transport.py] [_log()] Compression: none
2026-02-15T03:22:54.167 [DEBUG] [Thread-197082] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:22:54.185 [DEBUG] [Thread-197082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:22:54.185 [DEBUG] [Thread-197082] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:22:54.186 [DEBUG] [Thread-197082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:22:54.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:22:54.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:22:54.188 [DEBUG] [Thread-197082] [transport.py] [_log()] userauth is OK
2026-02-15T03:22:54.188 [DEBUG] [Thread-197082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:22:54.188 [DEBUG] [Thread-197082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:22:54.188 [DEBUG] [Thread-197082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:22:54.188 [DEBUG] [Thread-197082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:22:54.213 [INFO] [Thread-197082] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:22:54.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:22:54.846 [DEBUG] [Thread-197082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:22:54.846 [DEBUG] [Thread-197082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:22:54.847 [DEBUG] [Thread-197082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:22:54.887 [DEBUG] [Thread-197082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:22:54.888 [DEBUG] [Thread-197082] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:22:54.891 [DEBUG] [Thread-197082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:22:54.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:22:54.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:22:54.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:22:54.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:22:54.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:22:54.915 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:22:54.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:22:54.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:22:54.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:22:54.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.057050 -999.00   +5.90  30.68     92   +4.70 1 2 2 3 1     0    0 1.21 -0.07 .NES. 30.7 30.7 145.4 32.4 6.4 -24.0 6.3 -23.3 6.1 -22.2 6.4 -23.5
2026-02-15T03:22:54.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:22:54.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:22:54.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.057050
2026-02-15T03:22:54.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:22:54.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:22:54.917 [DEBUG] [Thread-197082] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:22:54.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:22:54.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:22:54.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:22:54.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:22:46', tmtdew=0.94, humidity=93.44, cloud=0.0, wind=32.8, temperature=5.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:22:09.120', atlas_cloud=2, atlas_rain=1, zp_data=[2.6247499999999997, 2.56475, 2.420250000000001, 2.0824999999999996, nan, nan, nan, nan, nan, 0.2995000000000001, 0.9777500000000003, 2.33, 2.8359999999999994, nan, 2.76, nan, 0.2967499999999994, 0.19950000000000045, 0.3879999999999999, 0.8672499999999985, 1.6464999999999987, 1.800749999999999, 2.186250000000001, 0.4867499999999998, 0.24099999999999966, 0.22250000000000014, 0.37175000000000047, 0.2840000000000007, 0.4190000000000005, 0.386000000000001, 0.4455000000000009, 0.30400000000000116, 0.16274999999999906], zp_timestamp='2026-02-15T01:21:00')
2026-02-15T03:22: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-15T03:22:55.016 [DEBUG] [Thread-197085] [transport.py] [_log()] starting thread (client mode): 0xa2d87f10
2026-02-15T03:22:55.016 [DEBUG] [Thread-197085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:22:55.030 [DEBUG] [Thread-197085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:22:55.030 [INFO] [Thread-197085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:22:55.038 [DEBUG] [Thread-197085] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:22:55.038 [DEBUG] [Thread-197085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:22:55.038 [DEBUG] [Thread-197085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:22:55.039 [DEBUG] [Thread-197085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:22:55.039 [DEBUG] [Thread-197085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:22:55.039 [DEBUG] [Thread-197085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:22:55.039 [DEBUG] [Thread-197085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:22:55.039 [DEBUG] [Thread-197085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:22:55.039 [DEBUG] [Thread-197085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:22:55.039 [DEBUG] [Thread-197085] [transport.py] [_log()] client lang: <none>
2026-02-15T03:22:55.039 [DEBUG] [Thread-197085] [transport.py] [_log()] server lang: <none>
2026-02-15T03:22:55.039 [DEBUG] [Thread-197085] [transport.py] [_log()] kex follows: False
2026-02-15T03:22:55.039 [DEBUG] [Thread-197085] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:22:55.039 [DEBUG] [Thread-197085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:22:55.039 [DEBUG] [Thread-197085] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:22:55.039 [DEBUG] [Thread-197085] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:22:55.039 [DEBUG] [Thread-197085] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:22:55.039 [DEBUG] [Thread-197085] [transport.py] [_log()] Compression: none
2026-02-15T03:22:55.039 [DEBUG] [Thread-197085] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:22:55.098 [DEBUG] [Thread-197085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:22:55.099 [DEBUG] [Thread-197085] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:22:55.099 [DEBUG] [Thread-197085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:22:55.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:22:55.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:22:55.155 [DEBUG] [Thread-197085] [transport.py] [_log()] userauth is OK
2026-02-15T03:22:55.156 [DEBUG] [Thread-197085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:22:55.156 [DEBUG] [Thread-197085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:22:55.156 [DEBUG] [Thread-197085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:22:55.156 [DEBUG] [Thread-197085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:22:55.174 [INFO] [Thread-197085] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:22:55.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-15T03:22:55.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:22:55.462 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:22:55.464 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:22:55.973 [DEBUG] [Thread-197085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:22:55.974 [DEBUG] [Thread-197085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:22:56.021 [DEBUG] [Thread-197085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:22:56.022 [DEBUG] [Thread-197085] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:22:56.031 [DEBUG] [Thread-197085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:22:56.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:22:56.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:22:56.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:22:56.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:22:56.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:22:56.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:22:56.069 [DEBUG] [Thread-197085] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:23:01.970 [DEBUG] [Thread-197087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:23:17.023 [DEBUG] [Thread-197088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:23:20.350 [DEBUG] [Thread-197089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:23:26.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:23:26.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:23:26.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-15T03:23:28.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 22, 46), 0.94, 93.44, 0.0, 32.8, 5.9, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:23:28.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:22:46
2026-02-15T03:23:28.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:23:28.743 [DEBUG] [Thread-197090] [transport.py] [_log()] starting thread (client mode): 0xa2d3e5c0
2026-02-15T03:23:28.743 [DEBUG] [Thread-197090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:23:28.762 [DEBUG] [Thread-197090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:23:28.762 [INFO] [Thread-197090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:23:28.765 [DEBUG] [Thread-197090] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:23:28.766 [DEBUG] [Thread-197090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:23:28.766 [DEBUG] [Thread-197090] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:23:28.766 [DEBUG] [Thread-197090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:23:28.766 [DEBUG] [Thread-197090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:23:28.766 [DEBUG] [Thread-197090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:23:28.766 [DEBUG] [Thread-197090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:23:28.766 [DEBUG] [Thread-197090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:23:28.766 [DEBUG] [Thread-197090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:23:28.767 [DEBUG] [Thread-197090] [transport.py] [_log()] client lang: <none>
2026-02-15T03:23:28.767 [DEBUG] [Thread-197090] [transport.py] [_log()] server lang: <none>
2026-02-15T03:23:28.767 [DEBUG] [Thread-197090] [transport.py] [_log()] kex follows: False
2026-02-15T03:23:28.767 [DEBUG] [Thread-197090] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:23:28.767 [DEBUG] [Thread-197090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:23:28.767 [DEBUG] [Thread-197090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:23:28.767 [DEBUG] [Thread-197090] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:23:28.767 [DEBUG] [Thread-197090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:23:28.767 [DEBUG] [Thread-197090] [transport.py] [_log()] Compression: none
2026-02-15T03:23:28.767 [DEBUG] [Thread-197090] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:23:28.785 [DEBUG] [Thread-197090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:23:28.786 [DEBUG] [Thread-197090] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:23:28.786 [DEBUG] [Thread-197090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:23:28.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:23:28.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:23:28.828 [DEBUG] [Thread-197090] [transport.py] [_log()] userauth is OK
2026-02-15T03:23:28.829 [DEBUG] [Thread-197090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:23:28.829 [DEBUG] [Thread-197090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:23:28.829 [DEBUG] [Thread-197090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:23:28.829 [DEBUG] [Thread-197090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:23:28.849 [INFO] [Thread-197090] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:23:28.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:23:29.491 [DEBUG] [Thread-197090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:23:29.492 [DEBUG] [Thread-197090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:23:29.492 [DEBUG] [Thread-197090] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:23:29.532 [DEBUG] [Thread-197090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:23:29.533 [DEBUG] [Thread-197090] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:23:29.536 [DEBUG] [Thread-197090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:23:29.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:23:29.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:23:29.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:23:29.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:23:29.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:23:29.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:23:29.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:23:29.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:23:29.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:23:29.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.057398 -999.00   +5.90  24.34     92   +4.70 1 2 1 3 1     0    0 1.19 -0.22 .NES. 24.3 24.3 142.6 32.4 6.4 -24.1 6.3 -23.4 6.0 -22.2 6.4 -23.4
2026-02-15T03:23:29.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:23:29.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:23:29.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.057398
2026-02-15T03:23:29.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:23:29.568 [DEBUG] [Thread-197090] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:23:29.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:23:29.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:23:29.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:23:29.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:23:29.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:22:46', tmtdew=0.94, humidity=93.44, cloud=0.0, wind=32.8, temperature=5.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:22:39.187', atlas_cloud=2, atlas_rain=1, zp_data=[2.6247499999999997, 2.56475, 2.420250000000001, 2.0824999999999996, nan, nan, nan, nan, nan, 0.2995000000000001, 0.9777500000000003, 2.33, 2.8359999999999994, nan, 2.76, nan, 0.2967499999999994, 0.19950000000000045, 0.3879999999999999, 0.8672499999999985, 1.6464999999999987, 1.800749999999999, 2.186250000000001, 0.4867499999999998, 0.24099999999999966, 0.22250000000000014, 0.37175000000000047, 0.2840000000000007, 0.4190000000000005, 0.386000000000001, 0.4455000000000009, 0.30400000000000116, 0.16274999999999906], zp_timestamp='2026-02-15T01:21:00')
2026-02-15T03:23:29.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-15T03:23:29.665 [DEBUG] [Thread-197093] [transport.py] [_log()] starting thread (client mode): 0xa2d3c460
2026-02-15T03:23:29.666 [DEBUG] [Thread-197093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:23:29.681 [DEBUG] [Thread-197093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:23:29.681 [INFO] [Thread-197093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:23:29.689 [DEBUG] [Thread-197093] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:23:29.689 [DEBUG] [Thread-197093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:23:29.689 [DEBUG] [Thread-197093] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:23:29.689 [DEBUG] [Thread-197093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:23:29.689 [DEBUG] [Thread-197093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:23:29.689 [DEBUG] [Thread-197093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:23:29.689 [DEBUG] [Thread-197093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:23:29.689 [DEBUG] [Thread-197093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:23:29.689 [DEBUG] [Thread-197093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:23:29.689 [DEBUG] [Thread-197093] [transport.py] [_log()] client lang: <none>
2026-02-15T03:23:29.689 [DEBUG] [Thread-197093] [transport.py] [_log()] server lang: <none>
2026-02-15T03:23:29.689 [DEBUG] [Thread-197093] [transport.py] [_log()] kex follows: False
2026-02-15T03:23:29.689 [DEBUG] [Thread-197093] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:23:29.690 [DEBUG] [Thread-197093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:23:29.690 [DEBUG] [Thread-197093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:23:29.690 [DEBUG] [Thread-197093] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:23:29.690 [DEBUG] [Thread-197093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:23:29.690 [DEBUG] [Thread-197093] [transport.py] [_log()] Compression: none
2026-02-15T03:23:29.690 [DEBUG] [Thread-197093] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:23:29.747 [DEBUG] [Thread-197093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:23:29.748 [DEBUG] [Thread-197093] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:23:29.749 [DEBUG] [Thread-197093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:23:29.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:23:29.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:23:29.804 [DEBUG] [Thread-197093] [transport.py] [_log()] userauth is OK
2026-02-15T03:23:29.804 [DEBUG] [Thread-197093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:23:29.804 [DEBUG] [Thread-197093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:23:29.804 [DEBUG] [Thread-197093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:23:29.804 [DEBUG] [Thread-197093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:23:29.823 [INFO] [Thread-197093] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:23:29.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:23:29.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:23:30.597 [DEBUG] [Thread-197093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:23:30.597 [DEBUG] [Thread-197093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:23:30.645 [DEBUG] [Thread-197093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:23:30.646 [DEBUG] [Thread-197093] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:23:30.655 [DEBUG] [Thread-197093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:23:30.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:23:30.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')
2026-02-15T03:23: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') -> 00000000
2026-02-15T03:23:30.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:23:30.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:23:30.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:23:30.692 [DEBUG] [Thread-197093] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:23:32.060 [DEBUG] [Thread-197095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:23:47.114 [DEBUG] [Thread-197096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:23:55.666 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:23:55.667 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:24:00.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:24:00.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:24:00.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T03:24:02.147 [DEBUG] [Thread-197097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:24:02.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 23, 21), 0.95, 93.37, 0.0, 32.55, 5.87, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:24:02.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:23:21
2026-02-15T03:24:03.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:24:03.288 [DEBUG] [Thread-197098] [transport.py] [_log()] starting thread (client mode): 0xa2d3ef80
2026-02-15T03:24:03.288 [DEBUG] [Thread-197098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:24:03.308 [DEBUG] [Thread-197098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:24:03.308 [INFO] [Thread-197098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:24:03.310 [DEBUG] [Thread-197098] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:24:03.310 [DEBUG] [Thread-197098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:24:03.310 [DEBUG] [Thread-197098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:24:03.310 [DEBUG] [Thread-197098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:24:03.310 [DEBUG] [Thread-197098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:24:03.310 [DEBUG] [Thread-197098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:24:03.310 [DEBUG] [Thread-197098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:24:03.310 [DEBUG] [Thread-197098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:24:03.310 [DEBUG] [Thread-197098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:24:03.310 [DEBUG] [Thread-197098] [transport.py] [_log()] client lang: <none>
2026-02-15T03:24:03.310 [DEBUG] [Thread-197098] [transport.py] [_log()] server lang: <none>
2026-02-15T03:24:03.310 [DEBUG] [Thread-197098] [transport.py] [_log()] kex follows: False
2026-02-15T03:24:03.310 [DEBUG] [Thread-197098] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:24:03.310 [DEBUG] [Thread-197098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:24:03.310 [DEBUG] [Thread-197098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:24:03.310 [DEBUG] [Thread-197098] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:24:03.310 [DEBUG] [Thread-197098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:24:03.310 [DEBUG] [Thread-197098] [transport.py] [_log()] Compression: none
2026-02-15T03:24:03.310 [DEBUG] [Thread-197098] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:24:03.320 [DEBUG] [Thread-197098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:24:03.320 [DEBUG] [Thread-197098] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:24:03.320 [DEBUG] [Thread-197098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:24:03.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:24:03.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:24:03.321 [DEBUG] [Thread-197098] [transport.py] [_log()] userauth is OK
2026-02-15T03:24:03.321 [DEBUG] [Thread-197098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:24:03.321 [DEBUG] [Thread-197098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:24:03.321 [DEBUG] [Thread-197098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:24:03.321 [DEBUG] [Thread-197098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:24:03.335 [INFO] [Thread-197098] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:24:03.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:24:03.977 [DEBUG] [Thread-197098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:24:03.978 [DEBUG] [Thread-197098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:24:03.978 [DEBUG] [Thread-197098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:24:04.019 [DEBUG] [Thread-197098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:24:04.019 [DEBUG] [Thread-197098] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:24:04.022 [DEBUG] [Thread-197098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:24:04.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:24:04.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:24:04.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:24:04.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:24:04.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:24:04.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:24:04.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:24:04.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:24:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:24:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.058092 -999.00   +5.90  26.14     92   +4.70 1 2 1 3 1     0    0 1.19 -0.52 .NES. 26.1 26.1 142.8 37.4 6.4 -24.1 6.2 -23.3 6.0 -22.2 6.4 -23.3
2026-02-15T03:24:04.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:24:04.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:24:04.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.058092
2026-02-15T03:24:04.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:24:04.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:24:04.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:24:04.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:24:04.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:24:04.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:23:21', tmtdew=0.95, humidity=93.37, cloud=0.0, wind=32.55, temperature=5.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:23:39.149', atlas_cloud=2, atlas_rain=1, zp_data=[2.6247499999999997, 2.56475, 2.420250000000001, 2.0824999999999996, nan, nan, nan, nan, nan, 0.2995000000000001, 0.9777500000000003, 2.33, 2.8359999999999994, nan, 2.76, nan, 0.2967499999999994, 0.19950000000000045, 0.3879999999999999, 0.8672499999999985, 1.6464999999999987, 1.800749999999999, 2.186250000000001, 0.4867499999999998, 0.24099999999999966, 0.22250000000000014, 0.37175000000000047, 0.2840000000000007, 0.4190000000000005, 0.386000000000001, 0.4455000000000009, 0.30400000000000116, 0.16274999999999906], zp_timestamp='2026-02-15T01:21:00')
2026-02-15T03:24:04.051 [DEBUG] [Thread-197098] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:24:04.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-15T03:24:04.147 [DEBUG] [Thread-197101] [transport.py] [_log()] starting thread (client mode): 0xa2d3d3c0
2026-02-15T03:24:04.147 [DEBUG] [Thread-197101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:24:04.161 [DEBUG] [Thread-197101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:24:04.161 [INFO] [Thread-197101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:24:04.169 [DEBUG] [Thread-197101] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:24:04.169 [DEBUG] [Thread-197101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:24:04.169 [DEBUG] [Thread-197101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:24:04.169 [DEBUG] [Thread-197101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:24:04.169 [DEBUG] [Thread-197101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:24:04.169 [DEBUG] [Thread-197101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:24:04.169 [DEBUG] [Thread-197101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:24:04.169 [DEBUG] [Thread-197101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:24:04.170 [DEBUG] [Thread-197101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:24:04.170 [DEBUG] [Thread-197101] [transport.py] [_log()] client lang: <none>
2026-02-15T03:24:04.170 [DEBUG] [Thread-197101] [transport.py] [_log()] server lang: <none>
2026-02-15T03:24:04.170 [DEBUG] [Thread-197101] [transport.py] [_log()] kex follows: False
2026-02-15T03:24:04.170 [DEBUG] [Thread-197101] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:24:04.170 [DEBUG] [Thread-197101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:24:04.170 [DEBUG] [Thread-197101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:24:04.170 [DEBUG] [Thread-197101] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:24:04.170 [DEBUG] [Thread-197101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:24:04.170 [DEBUG] [Thread-197101] [transport.py] [_log()] Compression: none
2026-02-15T03:24:04.170 [DEBUG] [Thread-197101] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:24:04.228 [DEBUG] [Thread-197101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:24:04.228 [DEBUG] [Thread-197101] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:24:04.229 [DEBUG] [Thread-197101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:24:04.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:24:04.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:24:04.284 [DEBUG] [Thread-197101] [transport.py] [_log()] userauth is OK
2026-02-15T03:24:04.285 [DEBUG] [Thread-197101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:24:04.285 [DEBUG] [Thread-197101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:24:04.285 [DEBUG] [Thread-197101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:24:04.285 [DEBUG] [Thread-197101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:24:04.303 [INFO] [Thread-197101] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:24:04.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:24:04.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:24:05.102 [DEBUG] [Thread-197101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:24:05.102 [DEBUG] [Thread-197101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:24:05.150 [DEBUG] [Thread-197101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:24:05.151 [DEBUG] [Thread-197101] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:24:05.160 [DEBUG] [Thread-197101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:24:05.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:24:05.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-15T03:24:05.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-15T03:24:05.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:24:05.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:24:05.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:24:05.197 [DEBUG] [Thread-197101] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:24:17.185 [DEBUG] [Thread-197103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:24:20.419 [DEBUG] [Thread-197104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:24:32.239 [DEBUG] [Thread-197105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:24:35.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:24:35.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:24:35.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-15T03:24:37.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 23, 57), 0.93, 93.46, 0.0, 31.49, 5.94, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:24:37.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:23:57
2026-02-15T03:24:37.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:24:38.106 [DEBUG] [Thread-197106] [transport.py] [_log()] starting thread (client mode): 0xa2d3e290
2026-02-15T03:24:38.106 [DEBUG] [Thread-197106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:24:38.125 [DEBUG] [Thread-197106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:24:38.125 [INFO] [Thread-197106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:24:38.128 [DEBUG] [Thread-197106] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:24:38.129 [DEBUG] [Thread-197106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:24:38.129 [DEBUG] [Thread-197106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:24:38.129 [DEBUG] [Thread-197106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:24:38.129 [DEBUG] [Thread-197106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:24:38.129 [DEBUG] [Thread-197106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:24:38.129 [DEBUG] [Thread-197106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:24:38.129 [DEBUG] [Thread-197106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:24:38.129 [DEBUG] [Thread-197106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:24:38.129 [DEBUG] [Thread-197106] [transport.py] [_log()] client lang: <none>
2026-02-15T03:24:38.129 [DEBUG] [Thread-197106] [transport.py] [_log()] server lang: <none>
2026-02-15T03:24:38.129 [DEBUG] [Thread-197106] [transport.py] [_log()] kex follows: False
2026-02-15T03:24:38.129 [DEBUG] [Thread-197106] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:24:38.129 [DEBUG] [Thread-197106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:24:38.129 [DEBUG] [Thread-197106] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:24:38.129 [DEBUG] [Thread-197106] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:24:38.129 [DEBUG] [Thread-197106] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:24:38.129 [DEBUG] [Thread-197106] [transport.py] [_log()] Compression: none
2026-02-15T03:24:38.129 [DEBUG] [Thread-197106] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:24:38.145 [DEBUG] [Thread-197106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:24:38.146 [DEBUG] [Thread-197106] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:24:38.146 [DEBUG] [Thread-197106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:24:38.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:24:38.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:24:38.148 [DEBUG] [Thread-197106] [transport.py] [_log()] userauth is OK
2026-02-15T03:24:38.148 [DEBUG] [Thread-197106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:24:38.148 [DEBUG] [Thread-197106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:24:38.148 [DEBUG] [Thread-197106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:24:38.148 [DEBUG] [Thread-197106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:24:38.166 [INFO] [Thread-197106] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:24:38.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:24:38.966 [DEBUG] [Thread-197106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:24:38.966 [DEBUG] [Thread-197106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:24:38.967 [DEBUG] [Thread-197106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:24:39.007 [DEBUG] [Thread-197106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:24:39.008 [DEBUG] [Thread-197106] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:24:39.011 [DEBUG] [Thread-197106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:24:39.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:24:39.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:24:39.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:24:39.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:24:39.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:24:39.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:24:39.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:24:39.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:24:39.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:24:39.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.058439 -999.00   +5.90  25.62     92   +4.70 1 2 1 3 1     0    0 1.21 -0.56 .NES. 25.6 25.6 142.4 35.3 6.4 -24.1 6.3 -23.2 6.0 -22.2 6.4 -23.6
2026-02-15T03:24:39.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:24:39.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:24:39.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.058439
2026-02-15T03:24:39.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:24:39.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:24:39.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:24:39.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:24:39.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:24:39.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:23:57', tmtdew=0.93, humidity=93.46, cloud=0.0, wind=31.49, temperature=5.94, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:24:09.130', atlas_cloud=2, atlas_rain=1, zp_data=[2.6247499999999997, 2.56475, 2.420250000000001, 2.0824999999999996, nan, nan, nan, nan, nan, 0.2995000000000001, 0.9777500000000003, 2.33, 2.8359999999999994, nan, 2.76, nan, 0.2967499999999994, 0.19950000000000045, 0.3879999999999999, 0.8672499999999985, 1.6464999999999987, 1.800749999999999, 2.186250000000001, 0.4867499999999998, 0.24099999999999966, 0.22250000000000014, 0.37175000000000047, 0.2840000000000007, 0.4190000000000005, 0.386000000000001, 0.4455000000000009, 0.30400000000000116, 0.16274999999999906], zp_timestamp='2026-02-15T01:21:00')
2026-02-15T03:24:39.038 [DEBUG] [Thread-197106] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:24: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-15T03:24:39.133 [DEBUG] [Thread-197109] [transport.py] [_log()] starting thread (client mode): 0xa2d3cca0
2026-02-15T03:24:39.133 [DEBUG] [Thread-197109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:24:39.148 [DEBUG] [Thread-197109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:24:39.148 [INFO] [Thread-197109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:24:39.157 [DEBUG] [Thread-197109] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:24:39.157 [DEBUG] [Thread-197109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:24:39.157 [DEBUG] [Thread-197109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:24:39.157 [DEBUG] [Thread-197109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:24:39.157 [DEBUG] [Thread-197109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:24:39.157 [DEBUG] [Thread-197109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:24:39.157 [DEBUG] [Thread-197109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:24:39.157 [DEBUG] [Thread-197109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:24:39.157 [DEBUG] [Thread-197109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:24:39.157 [DEBUG] [Thread-197109] [transport.py] [_log()] client lang: <none>
2026-02-15T03:24:39.157 [DEBUG] [Thread-197109] [transport.py] [_log()] server lang: <none>
2026-02-15T03:24:39.158 [DEBUG] [Thread-197109] [transport.py] [_log()] kex follows: False
2026-02-15T03:24:39.158 [DEBUG] [Thread-197109] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:24:39.158 [DEBUG] [Thread-197109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:24:39.158 [DEBUG] [Thread-197109] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:24:39.158 [DEBUG] [Thread-197109] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:24:39.158 [DEBUG] [Thread-197109] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:24:39.158 [DEBUG] [Thread-197109] [transport.py] [_log()] Compression: none
2026-02-15T03:24:39.158 [DEBUG] [Thread-197109] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:24:39.216 [DEBUG] [Thread-197109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:24:39.217 [DEBUG] [Thread-197109] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:24:39.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:24:39.218 [DEBUG] [Thread-197109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:24:39.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:24:39.274 [DEBUG] [Thread-197109] [transport.py] [_log()] userauth is OK
2026-02-15T03:24:39.274 [DEBUG] [Thread-197109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:24:39.274 [DEBUG] [Thread-197109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:24:39.275 [DEBUG] [Thread-197109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:24:39.275 [DEBUG] [Thread-197109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:24:39.293 [INFO] [Thread-197109] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:24: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-15T03:24:39.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:24:40.147 [DEBUG] [Thread-197109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:24:40.147 [DEBUG] [Thread-197109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:24:40.195 [DEBUG] [Thread-197109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:24:40.196 [DEBUG] [Thread-197109] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:24:40.206 [DEBUG] [Thread-197109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:24:40.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:24:40.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-15T03:24:40.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-15T03:24:40.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:24:40.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:24:40.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:24:40.245 [DEBUG] [Thread-197109] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:24:47.279 [DEBUG] [Thread-197111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:24:55.872 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:24:55.874 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:25:02.331 [DEBUG] [Thread-197112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:25:10.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:25:10.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:25:10.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-15T03:25:12.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 24, 32), 0.93, 93.49, 0.0, 30.72, 5.95, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:25:12.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:24:32
2026-02-15T03:25:12.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:25:12.997 [DEBUG] [Thread-197113] [transport.py] [_log()] starting thread (client mode): 0xa2d3cb80
2026-02-15T03:25:12.997 [DEBUG] [Thread-197113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:25:13.017 [DEBUG] [Thread-197113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:25:13.017 [INFO] [Thread-197113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:25:13.021 [DEBUG] [Thread-197113] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:25:13.021 [DEBUG] [Thread-197113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:25:13.021 [DEBUG] [Thread-197113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:25:13.021 [DEBUG] [Thread-197113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:25:13.021 [DEBUG] [Thread-197113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:25:13.021 [DEBUG] [Thread-197113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:25:13.021 [DEBUG] [Thread-197113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:25:13.021 [DEBUG] [Thread-197113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:25:13.021 [DEBUG] [Thread-197113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:25:13.021 [DEBUG] [Thread-197113] [transport.py] [_log()] client lang: <none>
2026-02-15T03:25:13.021 [DEBUG] [Thread-197113] [transport.py] [_log()] server lang: <none>
2026-02-15T03:25:13.021 [DEBUG] [Thread-197113] [transport.py] [_log()] kex follows: False
2026-02-15T03:25:13.021 [DEBUG] [Thread-197113] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:25:13.021 [DEBUG] [Thread-197113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:25:13.021 [DEBUG] [Thread-197113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:25:13.021 [DEBUG] [Thread-197113] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:25:13.022 [DEBUG] [Thread-197113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:25:13.022 [DEBUG] [Thread-197113] [transport.py] [_log()] Compression: none
2026-02-15T03:25:13.022 [DEBUG] [Thread-197113] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:25:13.038 [DEBUG] [Thread-197113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:25:13.039 [DEBUG] [Thread-197113] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:25:13.039 [DEBUG] [Thread-197113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:25:13.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:25:13.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:25:13.042 [DEBUG] [Thread-197113] [transport.py] [_log()] userauth is OK
2026-02-15T03:25:13.042 [DEBUG] [Thread-197113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:25:13.042 [DEBUG] [Thread-197113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:25:13.042 [DEBUG] [Thread-197113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:25:13.042 [DEBUG] [Thread-197113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:25:13.065 [INFO] [Thread-197113] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:25:13.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:25:14.188 [DEBUG] [Thread-197113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:25:14.189 [DEBUG] [Thread-197113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:25:14.189 [DEBUG] [Thread-197113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:25:14.229 [DEBUG] [Thread-197113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:25:14.230 [DEBUG] [Thread-197113] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:25:14.233 [DEBUG] [Thread-197113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:25:14.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:25:14.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:25:14.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:25:14.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:25:14.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:25:14.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:25:14.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:25:14.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:25:14.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:25:14.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.058786 -999.00   +5.80  25.06     92   +4.60 1 2 1 3 1     0    0 1.21 -0.77 .NES. 25.1 25.1 143.8 31.5 6.4 -24.1 6.2 -23.4 6.0 -22.3 6.4 -23.7
2026-02-15T03:25:14.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:25:14.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:25:14.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.058786
2026-02-15T03:25:14.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:25:14.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:25:14.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:25:14.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:25:14.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:25:14.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:24:32', tmtdew=0.93, humidity=93.49, cloud=0.0, wind=30.72, temperature=5.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:24:39.110', atlas_cloud=2, atlas_rain=1, zp_data=[2.6247499999999997, 2.56475, 2.420250000000001, 2.0824999999999996, nan, nan, nan, nan, nan, 0.2995000000000001, 0.9777500000000003, 2.33, 2.8359999999999994, nan, 2.76, nan, 0.2967499999999994, 0.19950000000000045, 0.3879999999999999, 0.8672499999999985, 1.6464999999999987, 1.800749999999999, 2.186250000000001, 0.4867499999999998, 0.24099999999999966, 0.22250000000000014, 0.37175000000000047, 0.2840000000000007, 0.4190000000000005, 0.386000000000001, 0.4455000000000009, 0.30400000000000116, 0.16274999999999906], zp_timestamp='2026-02-15T01:23:00')
2026-02-15T03:25:14.260 [DEBUG] [Thread-197113] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:25: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-15T03:25:14.356 [DEBUG] [Thread-197116] [transport.py] [_log()] starting thread (client mode): 0xa2d3ca30
2026-02-15T03:25:14.356 [DEBUG] [Thread-197116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:25:14.370 [DEBUG] [Thread-197116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:25:14.371 [INFO] [Thread-197116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:25:14.378 [DEBUG] [Thread-197116] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:25:14.379 [DEBUG] [Thread-197116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:25:14.379 [DEBUG] [Thread-197116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:25:14.379 [DEBUG] [Thread-197116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:25:14.379 [DEBUG] [Thread-197116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:25:14.379 [DEBUG] [Thread-197116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:25:14.379 [DEBUG] [Thread-197116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:25:14.379 [DEBUG] [Thread-197116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:25:14.379 [DEBUG] [Thread-197116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:25:14.380 [DEBUG] [Thread-197116] [transport.py] [_log()] client lang: <none>
2026-02-15T03:25:14.380 [DEBUG] [Thread-197116] [transport.py] [_log()] server lang: <none>
2026-02-15T03:25:14.380 [DEBUG] [Thread-197116] [transport.py] [_log()] kex follows: False
2026-02-15T03:25:14.380 [DEBUG] [Thread-197116] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:25:14.380 [DEBUG] [Thread-197116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:25:14.380 [DEBUG] [Thread-197116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:25:14.380 [DEBUG] [Thread-197116] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:25:14.381 [DEBUG] [Thread-197116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:25:14.381 [DEBUG] [Thread-197116] [transport.py] [_log()] Compression: none
2026-02-15T03:25:14.381 [DEBUG] [Thread-197116] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:25:14.437 [DEBUG] [Thread-197116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:25:14.438 [DEBUG] [Thread-197116] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:25:14.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:25:14.439 [DEBUG] [Thread-197116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:25:14.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:25:14.493 [DEBUG] [Thread-197116] [transport.py] [_log()] userauth is OK
2026-02-15T03:25:14.493 [DEBUG] [Thread-197116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:25:14.494 [DEBUG] [Thread-197116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:25:14.494 [DEBUG] [Thread-197116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:25:14.494 [DEBUG] [Thread-197116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:25:14.512 [INFO] [Thread-197116] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:25:14.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-15T03:25:14.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:25:15.316 [DEBUG] [Thread-197116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:25:15.316 [DEBUG] [Thread-197116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:25:15.363 [DEBUG] [Thread-197116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:25:15.364 [DEBUG] [Thread-197116] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:25:15.373 [DEBUG] [Thread-197116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:25:15.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:25: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-15T03:25:15.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-15T03:25:15.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:25:15.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:25:15.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:25:15.410 [DEBUG] [Thread-197116] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:25:17.366 [DEBUG] [Thread-197118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:25:20.475 [DEBUG] [Thread-197119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:25:32.421 [DEBUG] [Thread-197120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:25:45.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:25:45.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:25:45.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-15T03:25:47.458 [DEBUG] [Thread-197121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:25:47.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 25, 8), 0.93, 93.49, 0.0, 30.3, 5.95, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:25:47.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:25:08
2026-02-15T03:25:48.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:25:48.499 [DEBUG] [Thread-197122] [transport.py] [_log()] starting thread (client mode): 0xa2d3c580
2026-02-15T03:25:48.500 [DEBUG] [Thread-197122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:25:48.520 [DEBUG] [Thread-197122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:25:48.520 [INFO] [Thread-197122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:25:48.523 [DEBUG] [Thread-197122] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:25:48.523 [DEBUG] [Thread-197122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:25:48.523 [DEBUG] [Thread-197122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:25:48.524 [DEBUG] [Thread-197122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:25:48.524 [DEBUG] [Thread-197122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:25:48.524 [DEBUG] [Thread-197122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:25:48.524 [DEBUG] [Thread-197122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:25:48.524 [DEBUG] [Thread-197122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:25:48.524 [DEBUG] [Thread-197122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:25:48.524 [DEBUG] [Thread-197122] [transport.py] [_log()] client lang: <none>
2026-02-15T03:25:48.524 [DEBUG] [Thread-197122] [transport.py] [_log()] server lang: <none>
2026-02-15T03:25:48.524 [DEBUG] [Thread-197122] [transport.py] [_log()] kex follows: False
2026-02-15T03:25:48.524 [DEBUG] [Thread-197122] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:25:48.524 [DEBUG] [Thread-197122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:25:48.524 [DEBUG] [Thread-197122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:25:48.524 [DEBUG] [Thread-197122] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:25:48.525 [DEBUG] [Thread-197122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:25:48.525 [DEBUG] [Thread-197122] [transport.py] [_log()] Compression: none
2026-02-15T03:25:48.525 [DEBUG] [Thread-197122] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:25:48.545 [DEBUG] [Thread-197122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:25:48.546 [DEBUG] [Thread-197122] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:25:48.547 [DEBUG] [Thread-197122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:25:48.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:25:48.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:25:48.549 [DEBUG] [Thread-197122] [transport.py] [_log()] userauth is OK
2026-02-15T03:25:48.550 [DEBUG] [Thread-197122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:25:48.550 [DEBUG] [Thread-197122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:25:48.550 [DEBUG] [Thread-197122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:25:48.550 [DEBUG] [Thread-197122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:25:48.564 [INFO] [Thread-197122] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:25:48.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:25:49.187 [DEBUG] [Thread-197122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:25:49.188 [DEBUG] [Thread-197122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:25:49.188 [DEBUG] [Thread-197122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:25:49.228 [DEBUG] [Thread-197122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:25:49.228 [DEBUG] [Thread-197122] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:25:49.232 [DEBUG] [Thread-197122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:25:49.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:25:49.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:25:49.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:25:49.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:25:49.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:25:49.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:25:49.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:25:49.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:25:49.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:25:49.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.059133 -999.00   +5.80  23.46     92   +4.70 1 2 1 3 1     0    0 1.18 -0.70 .NES. 23.5 23.5 147.0 33.9 6.4 -24.1 6.2 -23.3 6.0 -22.1 6.4 -23.5
2026-02-15T03:25:49.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:25:49.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:25:49.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.059133
2026-02-15T03:25:49.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:25:49.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:25:49.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:25:49.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:25:49.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:25:49.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:25:08', tmtdew=0.93, humidity=93.49, cloud=0.0, wind=30.3, temperature=5.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:25:09.091', atlas_cloud=2, atlas_rain=1, zp_data=[2.6247499999999997, 2.56475, 2.420250000000001, 2.0824999999999996, nan, nan, nan, nan, nan, 0.2995000000000001, 0.9777500000000003, 2.33, 2.8359999999999994, nan, 2.76, nan, 0.2967499999999994, 0.19950000000000045, 0.3879999999999999, 0.8672499999999985, 1.6464999999999987, 1.800749999999999, 2.186250000000001, 0.4867499999999998, 0.24099999999999966, 0.22250000000000014, 0.37175000000000047, 0.2840000000000007, 0.4190000000000005, 0.386000000000001, 0.4455000000000009, 0.30400000000000116, 0.16274999999999906], zp_timestamp='2026-02-15T01:23:00')
2026-02-15T03:25:49.260 [DEBUG] [Thread-197122] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:25: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-15T03:25:49.356 [DEBUG] [Thread-197125] [transport.py] [_log()] starting thread (client mode): 0xa2d3c160
2026-02-15T03:25:49.356 [DEBUG] [Thread-197125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:25:49.370 [DEBUG] [Thread-197125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:25:49.370 [INFO] [Thread-197125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:25:49.378 [DEBUG] [Thread-197125] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:25:49.378 [DEBUG] [Thread-197125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:25:49.378 [DEBUG] [Thread-197125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:25:49.378 [DEBUG] [Thread-197125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:25:49.378 [DEBUG] [Thread-197125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:25:49.378 [DEBUG] [Thread-197125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:25:49.379 [DEBUG] [Thread-197125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:25:49.379 [DEBUG] [Thread-197125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:25:49.379 [DEBUG] [Thread-197125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:25:49.379 [DEBUG] [Thread-197125] [transport.py] [_log()] client lang: <none>
2026-02-15T03:25:49.379 [DEBUG] [Thread-197125] [transport.py] [_log()] server lang: <none>
2026-02-15T03:25:49.379 [DEBUG] [Thread-197125] [transport.py] [_log()] kex follows: False
2026-02-15T03:25:49.379 [DEBUG] [Thread-197125] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:25:49.379 [DEBUG] [Thread-197125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:25:49.379 [DEBUG] [Thread-197125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:25:49.379 [DEBUG] [Thread-197125] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:25:49.379 [DEBUG] [Thread-197125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:25:49.379 [DEBUG] [Thread-197125] [transport.py] [_log()] Compression: none
2026-02-15T03:25:49.379 [DEBUG] [Thread-197125] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:25:49.438 [DEBUG] [Thread-197125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:25:49.439 [DEBUG] [Thread-197125] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:25:49.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:25:49.440 [DEBUG] [Thread-197125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:25:49.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:25:49.498 [DEBUG] [Thread-197125] [transport.py] [_log()] userauth is OK
2026-02-15T03:25:49.498 [DEBUG] [Thread-197125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:25:49.498 [DEBUG] [Thread-197125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:25:49.498 [DEBUG] [Thread-197125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:25:49.498 [DEBUG] [Thread-197125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:25:49.516 [INFO] [Thread-197125] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:25:49.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-15T03:25:49.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:25:50.315 [DEBUG] [Thread-197125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:25:50.315 [DEBUG] [Thread-197125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:25:50.363 [DEBUG] [Thread-197125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:25:50.364 [DEBUG] [Thread-197125] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:25:50.373 [DEBUG] [Thread-197125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:25:50.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:25:50.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-15T03:25:50.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:25:50.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:25:50.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:25:50.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:25:50.409 [DEBUG] [Thread-197125] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:25:56.086 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:25:56.087 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:26:02.496 [DEBUG] [Thread-197127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:26:17.549 [DEBUG] [Thread-197128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:26:20.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:26:20.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:26:20.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-15T03:26:20.547 [DEBUG] [Thread-197129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:26:22.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 25, 43), 0.93, 94.01, 0.0, 32.85, 5.89, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:26:22.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:25:43
2026-02-15T03:26:22.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:26:23.105 [DEBUG] [Thread-197130] [transport.py] [_log()] starting thread (client mode): 0xa2d3c2b0
2026-02-15T03:26:23.105 [DEBUG] [Thread-197130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:26:23.124 [DEBUG] [Thread-197130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:26:23.124 [INFO] [Thread-197130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:26:23.127 [DEBUG] [Thread-197130] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:26:23.127 [DEBUG] [Thread-197130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:26:23.127 [DEBUG] [Thread-197130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:26:23.127 [DEBUG] [Thread-197130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:26:23.127 [DEBUG] [Thread-197130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:26:23.127 [DEBUG] [Thread-197130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:26:23.127 [DEBUG] [Thread-197130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:26:23.127 [DEBUG] [Thread-197130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:26:23.127 [DEBUG] [Thread-197130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:26:23.127 [DEBUG] [Thread-197130] [transport.py] [_log()] client lang: <none>
2026-02-15T03:26:23.127 [DEBUG] [Thread-197130] [transport.py] [_log()] server lang: <none>
2026-02-15T03:26:23.128 [DEBUG] [Thread-197130] [transport.py] [_log()] kex follows: False
2026-02-15T03:26:23.128 [DEBUG] [Thread-197130] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:26:23.128 [DEBUG] [Thread-197130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:26:23.128 [DEBUG] [Thread-197130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:26:23.128 [DEBUG] [Thread-197130] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:26:23.128 [DEBUG] [Thread-197130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:26:23.128 [DEBUG] [Thread-197130] [transport.py] [_log()] Compression: none
2026-02-15T03:26:23.128 [DEBUG] [Thread-197130] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:26:23.142 [DEBUG] [Thread-197130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:26:23.143 [DEBUG] [Thread-197130] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:26:23.143 [DEBUG] [Thread-197130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:26:23.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:26:23.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:26:23.145 [DEBUG] [Thread-197130] [transport.py] [_log()] userauth is OK
2026-02-15T03:26:23.146 [DEBUG] [Thread-197130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:26:23.146 [DEBUG] [Thread-197130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:26:23.146 [DEBUG] [Thread-197130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:26:23.146 [DEBUG] [Thread-197130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:26:23.170 [INFO] [Thread-197130] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:26:23.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:26:23.814 [DEBUG] [Thread-197130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:26:23.815 [DEBUG] [Thread-197130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:26:23.815 [DEBUG] [Thread-197130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:26:23.855 [DEBUG] [Thread-197130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:26:23.855 [DEBUG] [Thread-197130] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:26:23.858 [DEBUG] [Thread-197130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:26:23.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:26:23.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:26:23.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:26:23.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:26:23.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:26:23.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:26:23.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:26:23.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:26:23.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:26:23.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.059481 -999.00   +5.80  25.08     92   +4.70 1 2 1 3 1     0    0 1.18 -0.86 .NES. 25.1 25.1 148.8 35.2 6.4 -24.0 6.2 -23.2 6.0 -22.1 6.4 -23.3
2026-02-15T03:26:23.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:26:23.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:26:23.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.059481
2026-02-15T03:26:23.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:26:23.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:26:23.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:26:23.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:26:23.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:26:23.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:25:43', tmtdew=0.93, humidity=94.01, cloud=0.0, wind=32.85, temperature=5.89, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:25:39.158', atlas_cloud=2, atlas_rain=1, zp_data=[2.6247499999999997, 2.56475, 2.420250000000001, 2.0824999999999996, nan, nan, nan, nan, nan, 0.2995000000000001, 0.9777500000000003, 2.33, 2.8359999999999994, nan, 2.76, nan, 0.2967499999999994, 0.19950000000000045, 0.3879999999999999, 0.8672499999999985, 1.6464999999999987, 1.800749999999999, 2.186250000000001, 0.4867499999999998, 0.24099999999999966, 0.22250000000000014, 0.37175000000000047, 0.2840000000000007, 0.4190000000000005, 0.386000000000001, 0.4455000000000009, 0.30400000000000116, 0.16274999999999906], zp_timestamp='2026-02-15T01:23:00')
2026-02-15T03:26:23.882 [DEBUG] [Thread-197130] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:26:23.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-15T03:26:23.987 [DEBUG] [Thread-197133] [transport.py] [_log()] starting thread (client mode): 0xa2d3f790
2026-02-15T03:26:23.987 [DEBUG] [Thread-197133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:26:24.002 [DEBUG] [Thread-197133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:26:24.002 [INFO] [Thread-197133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:26:24.009 [DEBUG] [Thread-197133] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:26:24.009 [DEBUG] [Thread-197133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:26:24.009 [DEBUG] [Thread-197133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:26:24.010 [DEBUG] [Thread-197133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:26:24.010 [DEBUG] [Thread-197133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:26:24.010 [DEBUG] [Thread-197133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:26:24.010 [DEBUG] [Thread-197133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:26:24.010 [DEBUG] [Thread-197133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:26:24.010 [DEBUG] [Thread-197133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:26:24.010 [DEBUG] [Thread-197133] [transport.py] [_log()] client lang: <none>
2026-02-15T03:26:24.010 [DEBUG] [Thread-197133] [transport.py] [_log()] server lang: <none>
2026-02-15T03:26:24.010 [DEBUG] [Thread-197133] [transport.py] [_log()] kex follows: False
2026-02-15T03:26:24.010 [DEBUG] [Thread-197133] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:26:24.010 [DEBUG] [Thread-197133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:26:24.010 [DEBUG] [Thread-197133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:26:24.010 [DEBUG] [Thread-197133] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:26:24.010 [DEBUG] [Thread-197133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:26:24.010 [DEBUG] [Thread-197133] [transport.py] [_log()] Compression: none
2026-02-15T03:26:24.010 [DEBUG] [Thread-197133] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:26:24.069 [DEBUG] [Thread-197133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:26:24.069 [DEBUG] [Thread-197133] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:26:24.070 [DEBUG] [Thread-197133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:26:24.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:26:24.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:26:24.126 [DEBUG] [Thread-197133] [transport.py] [_log()] userauth is OK
2026-02-15T03:26:24.126 [DEBUG] [Thread-197133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:26:24.126 [DEBUG] [Thread-197133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:26:24.126 [DEBUG] [Thread-197133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:26:24.126 [DEBUG] [Thread-197133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:26:24.148 [INFO] [Thread-197133] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:26:24.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-15T03:26:24.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:26:24.944 [DEBUG] [Thread-197133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:26:24.944 [DEBUG] [Thread-197133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:26:24.992 [DEBUG] [Thread-197133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:26:24.992 [DEBUG] [Thread-197133] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:26:25.001 [DEBUG] [Thread-197133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:26:25.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:26:25.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-15T03:26:25.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:26:25.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:26:25.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:26:25.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:26:25.036 [DEBUG] [Thread-197133] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:26:32.589 [DEBUG] [Thread-197135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:26:47.648 [DEBUG] [Thread-197136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:26:55.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:26:55.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:26:55.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-15T03:26:56.291 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:26:56.293 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:26:57.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 26, 20), 0.92, 94.02, 0.0, 32.71, 5.9, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:26:57.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:26:20
2026-02-15T03:26:57.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:26:57.580 [DEBUG] [Thread-197137] [transport.py] [_log()] starting thread (client mode): 0xa2d3c6a0
2026-02-15T03:26:57.580 [DEBUG] [Thread-197137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:26:57.600 [DEBUG] [Thread-197137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:26:57.601 [INFO] [Thread-197137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:26:57.604 [DEBUG] [Thread-197137] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:26:57.604 [DEBUG] [Thread-197137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:26:57.604 [DEBUG] [Thread-197137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:26:57.604 [DEBUG] [Thread-197137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:26:57.604 [DEBUG] [Thread-197137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:26:57.604 [DEBUG] [Thread-197137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:26:57.604 [DEBUG] [Thread-197137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:26:57.604 [DEBUG] [Thread-197137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:26:57.604 [DEBUG] [Thread-197137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:26:57.604 [DEBUG] [Thread-197137] [transport.py] [_log()] client lang: <none>
2026-02-15T03:26:57.604 [DEBUG] [Thread-197137] [transport.py] [_log()] server lang: <none>
2026-02-15T03:26:57.604 [DEBUG] [Thread-197137] [transport.py] [_log()] kex follows: False
2026-02-15T03:26:57.604 [DEBUG] [Thread-197137] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:26:57.604 [DEBUG] [Thread-197137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:26:57.604 [DEBUG] [Thread-197137] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:26:57.604 [DEBUG] [Thread-197137] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:26:57.605 [DEBUG] [Thread-197137] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:26:57.605 [DEBUG] [Thread-197137] [transport.py] [_log()] Compression: none
2026-02-15T03:26:57.605 [DEBUG] [Thread-197137] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:26:57.622 [DEBUG] [Thread-197137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:26:57.623 [DEBUG] [Thread-197137] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:26:57.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:26:57.624 [DEBUG] [Thread-197137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:26:57.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:26:57.626 [DEBUG] [Thread-197137] [transport.py] [_log()] userauth is OK
2026-02-15T03:26:57.627 [DEBUG] [Thread-197137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:26:57.627 [DEBUG] [Thread-197137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:26:57.627 [DEBUG] [Thread-197137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:26:57.627 [DEBUG] [Thread-197137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:26:57.664 [INFO] [Thread-197137] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:26:57.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:26:58.337 [DEBUG] [Thread-197137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:26:58.337 [DEBUG] [Thread-197137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:26:58.337 [DEBUG] [Thread-197137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:26:58.377 [DEBUG] [Thread-197137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:26:58.377 [DEBUG] [Thread-197137] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:26:58.381 [DEBUG] [Thread-197137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:26:58.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:26:58.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:26:58.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:26:58.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:26:58.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:26:58.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:26:58.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:26:58.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:26:58.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:26:58.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.059828 -999.00   +5.80  24.21     92   +4.70 1 2 1 3 1     0    0 1.14 -1.49 .NES. 24.2 24.2 148.2 40.5 6.4 -24.1 6.2 -23.3 6.0 -22.2 6.4 -23.3
2026-02-15T03:26:58.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:26:58.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:26:58.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.059828
2026-02-15T03:26:58.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:26:58.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:26:58.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:26:58.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:26:58.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:26:58.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:26:20', tmtdew=0.92, humidity=94.02, cloud=0.0, wind=32.71, temperature=5.9, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:26:09.139', atlas_cloud=2, atlas_rain=1, zp_data=[2.6247499999999997, 2.56475, 2.420250000000001, 2.0824999999999996, nan, nan, nan, nan, nan, 0.2995000000000001, 0.9777500000000003, 2.33, 2.8359999999999994, nan, 2.76, nan, 0.2967499999999994, 0.19950000000000045, 0.3879999999999999, 0.8672499999999985, 1.6464999999999987, 1.800749999999999, 2.186250000000001, 0.4867499999999998, 0.24099999999999966, 0.22250000000000014, 0.37175000000000047, 0.2840000000000007, 0.4190000000000005, 0.386000000000001, 0.4455000000000009, 0.30400000000000116, 0.16274999999999906], zp_timestamp='2026-02-15T01:23:00')
2026-02-15T03:26:58.408 [DEBUG] [Thread-197137] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:26:58.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-15T03:26:58.505 [DEBUG] [Thread-197140] [transport.py] [_log()] starting thread (client mode): 0xa2d3cc40
2026-02-15T03:26:58.505 [DEBUG] [Thread-197140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:26:58.520 [DEBUG] [Thread-197140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:26:58.520 [INFO] [Thread-197140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:26:58.528 [DEBUG] [Thread-197140] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:26:58.529 [DEBUG] [Thread-197140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:26:58.529 [DEBUG] [Thread-197140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:26:58.529 [DEBUG] [Thread-197140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:26:58.529 [DEBUG] [Thread-197140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:26:58.529 [DEBUG] [Thread-197140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:26:58.529 [DEBUG] [Thread-197140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:26:58.529 [DEBUG] [Thread-197140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:26:58.529 [DEBUG] [Thread-197140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:26:58.529 [DEBUG] [Thread-197140] [transport.py] [_log()] client lang: <none>
2026-02-15T03:26:58.529 [DEBUG] [Thread-197140] [transport.py] [_log()] server lang: <none>
2026-02-15T03:26:58.529 [DEBUG] [Thread-197140] [transport.py] [_log()] kex follows: False
2026-02-15T03:26:58.529 [DEBUG] [Thread-197140] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:26:58.529 [DEBUG] [Thread-197140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:26:58.529 [DEBUG] [Thread-197140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:26:58.529 [DEBUG] [Thread-197140] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:26:58.529 [DEBUG] [Thread-197140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:26:58.530 [DEBUG] [Thread-197140] [transport.py] [_log()] Compression: none
2026-02-15T03:26:58.530 [DEBUG] [Thread-197140] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:26:58.587 [DEBUG] [Thread-197140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:26:58.587 [DEBUG] [Thread-197140] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:26:58.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:26:58.588 [DEBUG] [Thread-197140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:26:58.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:26:58.646 [DEBUG] [Thread-197140] [transport.py] [_log()] userauth is OK
2026-02-15T03:26:58.646 [DEBUG] [Thread-197140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:26:58.646 [DEBUG] [Thread-197140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:26:58.646 [DEBUG] [Thread-197140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:26:58.646 [DEBUG] [Thread-197140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:26:58.660 [INFO] [Thread-197140] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:26:58.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-15T03:26:58.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:26:59.470 [DEBUG] [Thread-197140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:26:59.470 [DEBUG] [Thread-197140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:26:59.518 [DEBUG] [Thread-197140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:26:59.519 [DEBUG] [Thread-197140] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:26:59.528 [DEBUG] [Thread-197140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:26:59.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:26: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')
2026-02-15T03:26:59.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-15T03:26:59.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:26:59.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:26:59.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:26:59.570 [DEBUG] [Thread-197140] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:27:02.687 [DEBUG] [Thread-197142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:27:17.738 [DEBUG] [Thread-197143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:27:20.603 [DEBUG] [Thread-197144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:27:29.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:27:29.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:27:29.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-15T03:27:32.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 26, 55), 0.93, 94.01, 0.0, 33.44, 5.89, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:27:32.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:26:55
2026-02-15T03:27:32.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:27:32.600 [DEBUG] [Thread-197145] [transport.py] [_log()] starting thread (client mode): 0xa2d3d480
2026-02-15T03:27:32.600 [DEBUG] [Thread-197145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:27:32.620 [DEBUG] [Thread-197145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:27:32.620 [INFO] [Thread-197145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:27:32.623 [DEBUG] [Thread-197145] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:27:32.624 [DEBUG] [Thread-197145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:27:32.624 [DEBUG] [Thread-197145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:27:32.624 [DEBUG] [Thread-197145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:27:32.624 [DEBUG] [Thread-197145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:27:32.624 [DEBUG] [Thread-197145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:27:32.624 [DEBUG] [Thread-197145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:27:32.624 [DEBUG] [Thread-197145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:27:32.624 [DEBUG] [Thread-197145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:27:32.624 [DEBUG] [Thread-197145] [transport.py] [_log()] client lang: <none>
2026-02-15T03:27:32.624 [DEBUG] [Thread-197145] [transport.py] [_log()] server lang: <none>
2026-02-15T03:27:32.624 [DEBUG] [Thread-197145] [transport.py] [_log()] kex follows: False
2026-02-15T03:27:32.624 [DEBUG] [Thread-197145] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:27:32.625 [DEBUG] [Thread-197145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:27:32.625 [DEBUG] [Thread-197145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:27:32.625 [DEBUG] [Thread-197145] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:27:32.625 [DEBUG] [Thread-197145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:27:32.625 [DEBUG] [Thread-197145] [transport.py] [_log()] Compression: none
2026-02-15T03:27:32.625 [DEBUG] [Thread-197145] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:27:32.643 [DEBUG] [Thread-197145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:27:32.644 [DEBUG] [Thread-197145] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:27:32.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:27:32.646 [DEBUG] [Thread-197145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:27:32.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:27:32.648 [DEBUG] [Thread-197145] [transport.py] [_log()] userauth is OK
2026-02-15T03:27:32.648 [DEBUG] [Thread-197145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:27:32.648 [DEBUG] [Thread-197145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:27:32.649 [DEBUG] [Thread-197145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:27:32.649 [DEBUG] [Thread-197145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:27:32.672 [INFO] [Thread-197145] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:27:32.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:27:32.776 [DEBUG] [Thread-197147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:27:33.421 [DEBUG] [Thread-197145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:27:33.422 [DEBUG] [Thread-197145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:27:33.422 [DEBUG] [Thread-197145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:27:33.462 [DEBUG] [Thread-197145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:27:33.463 [DEBUG] [Thread-197145] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:27:33.466 [DEBUG] [Thread-197145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:27:33.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:27:33.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:27:33.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:27:33.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:27:33.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:27:33.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:27:33.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:27:33.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:27:33.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:27:33.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.060176 -999.00   +5.80  27.53     92   +4.60 1 2 1 3 1     0    0 1.15 -1.87 .NES. 27.5 27.5 143.4 32.3 6.4 -24.1 6.2 -23.3 6.0 -22.2 6.4 -23.4
2026-02-15T03:27:33.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:27:33.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:27:33.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.060176
2026-02-15T03:27:33.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:27:33.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:27:33.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:27:33.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:27:33.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:27:33.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:26:55', tmtdew=0.93, humidity=94.01, cloud=0.0, wind=33.44, temperature=5.89, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:26:39.206', atlas_cloud=2, atlas_rain=1, zp_data=[2.6247499999999997, 2.56475, 2.420250000000001, 2.0824999999999996, nan, nan, nan, nan, nan, 0.2995000000000001, 0.9777500000000003, 2.33, 2.8359999999999994, nan, 2.76, nan, 0.2967499999999994, 0.19950000000000045, 0.3879999999999999, 0.8672499999999985, 1.6464999999999987, 1.800749999999999, 2.186250000000001, 0.4867499999999998, 0.24099999999999966, 0.22250000000000014, 0.37175000000000047, 0.2840000000000007, 0.4190000000000005, 0.386000000000001, 0.4455000000000009, 0.30400000000000116, 0.16274999999999906], zp_timestamp='2026-02-15T01:23:00')
2026-02-15T03:27:33.496 [DEBUG] [Thread-197145] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:27:33.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-15T03:27:33.591 [DEBUG] [Thread-197149] [transport.py] [_log()] starting thread (client mode): 0xa5773970
2026-02-15T03:27:33.591 [DEBUG] [Thread-197149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:27:33.606 [DEBUG] [Thread-197149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:27:33.606 [INFO] [Thread-197149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:27:33.613 [DEBUG] [Thread-197149] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:27:33.613 [DEBUG] [Thread-197149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:27:33.614 [DEBUG] [Thread-197149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:27:33.614 [DEBUG] [Thread-197149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:27:33.614 [DEBUG] [Thread-197149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:27:33.614 [DEBUG] [Thread-197149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:27:33.614 [DEBUG] [Thread-197149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:27:33.614 [DEBUG] [Thread-197149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:27:33.614 [DEBUG] [Thread-197149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:27:33.614 [DEBUG] [Thread-197149] [transport.py] [_log()] client lang: <none>
2026-02-15T03:27:33.614 [DEBUG] [Thread-197149] [transport.py] [_log()] server lang: <none>
2026-02-15T03:27:33.614 [DEBUG] [Thread-197149] [transport.py] [_log()] kex follows: False
2026-02-15T03:27:33.615 [DEBUG] [Thread-197149] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:27:33.615 [DEBUG] [Thread-197149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:27:33.615 [DEBUG] [Thread-197149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:27:33.615 [DEBUG] [Thread-197149] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:27:33.615 [DEBUG] [Thread-197149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:27:33.615 [DEBUG] [Thread-197149] [transport.py] [_log()] Compression: none
2026-02-15T03:27:33.615 [DEBUG] [Thread-197149] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:27:33.671 [DEBUG] [Thread-197149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:27:33.671 [DEBUG] [Thread-197149] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:27:33.672 [DEBUG] [Thread-197149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:27:33.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:27:33.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:27:33.727 [DEBUG] [Thread-197149] [transport.py] [_log()] userauth is OK
2026-02-15T03:27:33.727 [DEBUG] [Thread-197149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:27:33.727 [DEBUG] [Thread-197149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:27:33.728 [DEBUG] [Thread-197149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:27:33.728 [DEBUG] [Thread-197149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:27:33.747 [INFO] [Thread-197149] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:27:33.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:27:33.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:27:34.554 [DEBUG] [Thread-197149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:27:34.554 [DEBUG] [Thread-197149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:27:34.602 [DEBUG] [Thread-197149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:27:34.603 [DEBUG] [Thread-197149] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:27:34.612 [DEBUG] [Thread-197149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:27:34.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:27:34.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-15T03:27:34.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:27:34.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:27:34.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:27:34.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:27:34.651 [DEBUG] [Thread-197149] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:27:47.812 [DEBUG] [Thread-197151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:27:56.495 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:27:56.496 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:28:02.863 [DEBUG] [Thread-197152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:28:04.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:28:04.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:28:04.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-15T03:28:06.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 27, 30), 0.92, 94.02, 0.0, 32.29, 5.89, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:28:06.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:27:30
2026-02-15T03:28:06.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:28:07.119 [DEBUG] [Thread-197153] [transport.py] [_log()] starting thread (client mode): 0xa5772b00
2026-02-15T03:28:07.119 [DEBUG] [Thread-197153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:28:07.139 [DEBUG] [Thread-197153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:28:07.139 [INFO] [Thread-197153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:28:07.142 [DEBUG] [Thread-197153] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:28:07.142 [DEBUG] [Thread-197153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:28:07.142 [DEBUG] [Thread-197153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:28:07.142 [DEBUG] [Thread-197153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:28:07.142 [DEBUG] [Thread-197153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:28:07.143 [DEBUG] [Thread-197153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:28:07.143 [DEBUG] [Thread-197153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:28:07.143 [DEBUG] [Thread-197153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:28:07.143 [DEBUG] [Thread-197153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:28:07.143 [DEBUG] [Thread-197153] [transport.py] [_log()] client lang: <none>
2026-02-15T03:28:07.143 [DEBUG] [Thread-197153] [transport.py] [_log()] server lang: <none>
2026-02-15T03:28:07.143 [DEBUG] [Thread-197153] [transport.py] [_log()] kex follows: False
2026-02-15T03:28:07.143 [DEBUG] [Thread-197153] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:28:07.143 [DEBUG] [Thread-197153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:28:07.143 [DEBUG] [Thread-197153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:28:07.143 [DEBUG] [Thread-197153] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:28:07.143 [DEBUG] [Thread-197153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:28:07.143 [DEBUG] [Thread-197153] [transport.py] [_log()] Compression: none
2026-02-15T03:28:07.143 [DEBUG] [Thread-197153] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:28:07.162 [DEBUG] [Thread-197153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:28:07.163 [DEBUG] [Thread-197153] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:28:07.163 [DEBUG] [Thread-197153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:28:07.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:28:07.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:28:07.204 [DEBUG] [Thread-197153] [transport.py] [_log()] userauth is OK
2026-02-15T03:28:07.204 [DEBUG] [Thread-197153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:28:07.204 [DEBUG] [Thread-197153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:28:07.205 [DEBUG] [Thread-197153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:28:07.205 [DEBUG] [Thread-197153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:28:07.241 [INFO] [Thread-197153] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:28:07.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:28:07.842 [DEBUG] [Thread-197153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:28:07.842 [DEBUG] [Thread-197153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:28:07.843 [DEBUG] [Thread-197153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:28:07.883 [DEBUG] [Thread-197153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:28:07.883 [DEBUG] [Thread-197153] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:28:07.886 [DEBUG] [Thread-197153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:28:07.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:28:07.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:28:07.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:28:07.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:28:07.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:28:07.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:28:07.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:28:07.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:28:07.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:28:07.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.060870 -999.00   +5.80  24.06     92   +4.60 1 2 1 3 1     0    0 1.13 -1.91 .NES. 24.1 24.1 155.2 35.4 6.4 -23.6 6.2 -23.0 6.0 -22.2 6.3 -23.5
2026-02-15T03:28:07.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:28:07.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:28:07.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.060870
2026-02-15T03:28:07.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:28:07.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:28:07.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:28:07.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:28:07.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:28:07.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:27:30', tmtdew=0.92, humidity=94.02, cloud=0.0, wind=32.29, temperature=5.89, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:27:39.168', atlas_cloud=2, atlas_rain=1, zp_data=[2.510249999999999, 2.57125, 2.4392500000000004, 2.4254999999999995, nan, nan, nan, nan, nan, 0.2889999999999997, 0.8907499999999997, 2.1884999999999994, 2.6734999999999998, 2.55175, 2.685999999999999, 1.150999999999999, 0.32225000000000037, 0.17549999999999955, 0.40199999999999925, 0.7867499999999996, 1.6409999999999991, 1.8877499999999987, 1.617750000000001, 0.4007500000000004, 0.23599999999999888, 0.21950000000000003, 0.33525000000000027, 0.2795000000000005, 0.40500000000000025, 0.45200000000000085, 0.5010000000000012, 0.25700000000000145, 0.1437500000000007], zp_timestamp='2026-02-15T01:26:00')
2026-02-15T03:28:07.908 [DEBUG] [Thread-197153] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:28:07.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-15T03:28:08.003 [DEBUG] [Thread-197156] [transport.py] [_log()] starting thread (client mode): 0xa5771300
2026-02-15T03:28:08.004 [DEBUG] [Thread-197156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:28:08.018 [DEBUG] [Thread-197156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:28:08.018 [INFO] [Thread-197156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:28:08.026 [DEBUG] [Thread-197156] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:28:08.026 [DEBUG] [Thread-197156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:28:08.026 [DEBUG] [Thread-197156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:28:08.026 [DEBUG] [Thread-197156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:28:08.026 [DEBUG] [Thread-197156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:28:08.026 [DEBUG] [Thread-197156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:28:08.026 [DEBUG] [Thread-197156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:28:08.026 [DEBUG] [Thread-197156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:28:08.026 [DEBUG] [Thread-197156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:28:08.027 [DEBUG] [Thread-197156] [transport.py] [_log()] client lang: <none>
2026-02-15T03:28:08.027 [DEBUG] [Thread-197156] [transport.py] [_log()] server lang: <none>
2026-02-15T03:28:08.027 [DEBUG] [Thread-197156] [transport.py] [_log()] kex follows: False
2026-02-15T03:28:08.027 [DEBUG] [Thread-197156] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:28:08.027 [DEBUG] [Thread-197156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:28:08.027 [DEBUG] [Thread-197156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:28:08.027 [DEBUG] [Thread-197156] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:28:08.027 [DEBUG] [Thread-197156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:28:08.027 [DEBUG] [Thread-197156] [transport.py] [_log()] Compression: none
2026-02-15T03:28:08.027 [DEBUG] [Thread-197156] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:28:08.086 [DEBUG] [Thread-197156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:28:08.087 [DEBUG] [Thread-197156] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:28:08.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:28:08.088 [DEBUG] [Thread-197156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:28:08.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:28:08.143 [DEBUG] [Thread-197156] [transport.py] [_log()] userauth is OK
2026-02-15T03:28:08.143 [DEBUG] [Thread-197156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:28:08.143 [DEBUG] [Thread-197156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:28:08.143 [DEBUG] [Thread-197156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:28:08.143 [DEBUG] [Thread-197156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:28:08.165 [INFO] [Thread-197156] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:28:08.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:28:08.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:28:08.932 [DEBUG] [Thread-197156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:28:08.933 [DEBUG] [Thread-197156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:28:08.980 [DEBUG] [Thread-197156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:28:08.981 [DEBUG] [Thread-197156] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:28:08.990 [DEBUG] [Thread-197156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:28:08.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:28:09.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')
2026-02-15T03:28:09.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-15T03:28:09.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:28:09.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:28:09.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:28:09.027 [DEBUG] [Thread-197156] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:28:17.896 [DEBUG] [Thread-197158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:28:20.676 [DEBUG] [Thread-197159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:28:32.946 [DEBUG] [Thread-197160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:28:39.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:28:39.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:28:39.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-15T03:28:40.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 28, 6), 0.92, 94.04, 0.0, 33.82, 5.87, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:28:40.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:28:06
2026-02-15T03:28:41.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:28:41.422 [DEBUG] [Thread-197161] [transport.py] [_log()] starting thread (client mode): 0xa2d3d300
2026-02-15T03:28:41.423 [DEBUG] [Thread-197161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:28:41.442 [DEBUG] [Thread-197161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:28:41.442 [INFO] [Thread-197161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:28:41.446 [DEBUG] [Thread-197161] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:28:41.446 [DEBUG] [Thread-197161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:28:41.446 [DEBUG] [Thread-197161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:28:41.446 [DEBUG] [Thread-197161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:28:41.446 [DEBUG] [Thread-197161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:28:41.446 [DEBUG] [Thread-197161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:28:41.446 [DEBUG] [Thread-197161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:28:41.446 [DEBUG] [Thread-197161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:28:41.446 [DEBUG] [Thread-197161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:28:41.446 [DEBUG] [Thread-197161] [transport.py] [_log()] client lang: <none>
2026-02-15T03:28:41.446 [DEBUG] [Thread-197161] [transport.py] [_log()] server lang: <none>
2026-02-15T03:28:41.446 [DEBUG] [Thread-197161] [transport.py] [_log()] kex follows: False
2026-02-15T03:28:41.446 [DEBUG] [Thread-197161] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:28:41.447 [DEBUG] [Thread-197161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:28:41.447 [DEBUG] [Thread-197161] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:28:41.447 [DEBUG] [Thread-197161] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:28:41.447 [DEBUG] [Thread-197161] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:28:41.447 [DEBUG] [Thread-197161] [transport.py] [_log()] Compression: none
2026-02-15T03:28:41.447 [DEBUG] [Thread-197161] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:28:41.463 [DEBUG] [Thread-197161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:28:41.464 [DEBUG] [Thread-197161] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:28:41.464 [DEBUG] [Thread-197161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:28:41.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:28:41.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:28:41.467 [DEBUG] [Thread-197161] [transport.py] [_log()] userauth is OK
2026-02-15T03:28:41.467 [DEBUG] [Thread-197161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:28:41.467 [DEBUG] [Thread-197161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:28:41.467 [DEBUG] [Thread-197161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:28:41.467 [DEBUG] [Thread-197161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:28:41.503 [INFO] [Thread-197161] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:28:41.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:28:42.135 [DEBUG] [Thread-197161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:28:42.135 [DEBUG] [Thread-197161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:28:42.136 [DEBUG] [Thread-197161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:28:42.176 [DEBUG] [Thread-197161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:28:42.176 [DEBUG] [Thread-197161] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:28:42.178 [DEBUG] [Thread-197161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:28:42.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:28:42.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:28:42.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:28:42.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:28:42.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:28:42.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:28:42.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:28:42.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:28:42.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:28:42.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.061217 -999.00   +5.80  26.14     92   +4.60 1 2 1 3 1     0    0 1.17 -2.19 .NES. 26.1 26.1 147.0 35.5 6.4 -23.6 6.2 -22.7 6.0 -21.1 6.3 -22.3
2026-02-15T03:28:42.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:28:42.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:28:42.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.061217
2026-02-15T03:28:42.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:28:42.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:28:42.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:28:42.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:28:42.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:28:42.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:28:06', tmtdew=0.92, humidity=94.04, cloud=0.0, wind=33.82, temperature=5.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:28:09.149', atlas_cloud=2, atlas_rain=1, zp_data=[2.510249999999999, 2.57125, 2.4392500000000004, 2.4254999999999995, nan, nan, nan, nan, nan, 0.2889999999999997, 0.8907499999999997, 2.1884999999999994, 2.6734999999999998, 2.55175, 2.685999999999999, 1.150999999999999, 0.32225000000000037, 0.17549999999999955, 0.40199999999999925, 0.7867499999999996, 1.6409999999999991, 1.8877499999999987, 1.617750000000001, 0.4007500000000004, 0.23599999999999888, 0.21950000000000003, 0.33525000000000027, 0.2795000000000005, 0.40500000000000025, 0.45200000000000085, 0.5010000000000012, 0.25700000000000145, 0.1437500000000007], zp_timestamp='2026-02-15T01:26:00')
2026-02-15T03:28:42.199 [DEBUG] [Thread-197161] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:28:42.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:28:42.289 [DEBUG] [Thread-197164] [transport.py] [_log()] starting thread (client mode): 0xa2d3fe20
2026-02-15T03:28:42.289 [DEBUG] [Thread-197164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:28:42.304 [DEBUG] [Thread-197164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:28:42.304 [INFO] [Thread-197164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:28:42.312 [DEBUG] [Thread-197164] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:28:42.312 [DEBUG] [Thread-197164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:28:42.313 [DEBUG] [Thread-197164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:28:42.313 [DEBUG] [Thread-197164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:28:42.313 [DEBUG] [Thread-197164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:28:42.313 [DEBUG] [Thread-197164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:28:42.313 [DEBUG] [Thread-197164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:28:42.313 [DEBUG] [Thread-197164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:28:42.313 [DEBUG] [Thread-197164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:28:42.313 [DEBUG] [Thread-197164] [transport.py] [_log()] client lang: <none>
2026-02-15T03:28:42.313 [DEBUG] [Thread-197164] [transport.py] [_log()] server lang: <none>
2026-02-15T03:28:42.313 [DEBUG] [Thread-197164] [transport.py] [_log()] kex follows: False
2026-02-15T03:28:42.313 [DEBUG] [Thread-197164] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:28:42.313 [DEBUG] [Thread-197164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:28:42.313 [DEBUG] [Thread-197164] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:28:42.313 [DEBUG] [Thread-197164] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:28:42.313 [DEBUG] [Thread-197164] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:28:42.313 [DEBUG] [Thread-197164] [transport.py] [_log()] Compression: none
2026-02-15T03:28:42.313 [DEBUG] [Thread-197164] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:28:42.371 [DEBUG] [Thread-197164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:28:42.372 [DEBUG] [Thread-197164] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:28:42.373 [DEBUG] [Thread-197164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:28:42.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:28:42.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:28:42.427 [DEBUG] [Thread-197164] [transport.py] [_log()] userauth is OK
2026-02-15T03:28:42.428 [DEBUG] [Thread-197164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:28:42.428 [DEBUG] [Thread-197164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:28:42.428 [DEBUG] [Thread-197164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:28:42.428 [DEBUG] [Thread-197164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:28:42.447 [INFO] [Thread-197164] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:28:42.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-15T03:28:42.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:28:43.267 [DEBUG] [Thread-197164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:28:43.267 [DEBUG] [Thread-197164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:28:43.316 [DEBUG] [Thread-197164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:28:43.316 [DEBUG] [Thread-197164] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:28:43.325 [DEBUG] [Thread-197164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:28:43.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:28:43.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:28:43.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-15T03:28:43.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:28:43.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:28:43.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:28:43.359 [DEBUG] [Thread-197164] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:28:47.982 [DEBUG] [Thread-197166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:28:56.700 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:28:56.701 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:29:03.030 [DEBUG] [Thread-197167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:29:13.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:29:13.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:29:13.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-15T03:29:15.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 28, 42), 1.34, 91.08, 0.0, 35.18, 6.18, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:29:15.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:28:42
2026-02-15T03:29:16.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:29:16.243 [DEBUG] [Thread-197168] [transport.py] [_log()] starting thread (client mode): 0xa5770dc0
2026-02-15T03:29:16.243 [DEBUG] [Thread-197168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:29:16.263 [DEBUG] [Thread-197168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:29:16.263 [INFO] [Thread-197168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:29:16.266 [DEBUG] [Thread-197168] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:29:16.267 [DEBUG] [Thread-197168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:29:16.267 [DEBUG] [Thread-197168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:29:16.267 [DEBUG] [Thread-197168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:29:16.267 [DEBUG] [Thread-197168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:29:16.267 [DEBUG] [Thread-197168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:29:16.267 [DEBUG] [Thread-197168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:29:16.267 [DEBUG] [Thread-197168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:29:16.267 [DEBUG] [Thread-197168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:29:16.267 [DEBUG] [Thread-197168] [transport.py] [_log()] client lang: <none>
2026-02-15T03:29:16.267 [DEBUG] [Thread-197168] [transport.py] [_log()] server lang: <none>
2026-02-15T03:29:16.267 [DEBUG] [Thread-197168] [transport.py] [_log()] kex follows: False
2026-02-15T03:29:16.267 [DEBUG] [Thread-197168] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:29:16.267 [DEBUG] [Thread-197168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:29:16.267 [DEBUG] [Thread-197168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:29:16.267 [DEBUG] [Thread-197168] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:29:16.267 [DEBUG] [Thread-197168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:29:16.267 [DEBUG] [Thread-197168] [transport.py] [_log()] Compression: none
2026-02-15T03:29:16.267 [DEBUG] [Thread-197168] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:29:16.285 [DEBUG] [Thread-197168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:29:16.285 [DEBUG] [Thread-197168] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:29:16.286 [DEBUG] [Thread-197168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:29:16.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:29:16.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:29:16.328 [DEBUG] [Thread-197168] [transport.py] [_log()] userauth is OK
2026-02-15T03:29:16.329 [DEBUG] [Thread-197168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:29:16.329 [DEBUG] [Thread-197168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:29:16.329 [DEBUG] [Thread-197168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:29:16.329 [DEBUG] [Thread-197168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:29:16.360 [INFO] [Thread-197168] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:29:16.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:29:16.980 [DEBUG] [Thread-197168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:29:16.981 [DEBUG] [Thread-197168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:29:16.981 [DEBUG] [Thread-197168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:29:17.021 [DEBUG] [Thread-197168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:29:17.022 [DEBUG] [Thread-197168] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:29:17.025 [DEBUG] [Thread-197168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:29:17.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:29:17.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:29:17.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:29:17.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:29:17.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:29:17.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:29:17.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:29:17.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:29:17.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:29:17.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.061564 -999.00   +5.80  24.13     92   +4.60 1 2 1 3 1     0    0 1.14 -2.42 .NES. 24.1 24.1 150.7 32.0 6.3 -22.2 6.2 -22.2 6.0 -21.5 6.3 -22.7
2026-02-15T03:29:17.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:29:17.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:29:17.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.061564
2026-02-15T03:29:17.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:29:17.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:29:17.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:29:17.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:29:17.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:29:17.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:28:42', tmtdew=1.34, humidity=91.08, cloud=0.0, wind=35.18, temperature=6.18, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:28:39.130', atlas_cloud=2, atlas_rain=1, zp_data=[2.510249999999999, 2.57125, 2.4392500000000004, 2.4254999999999995, nan, nan, nan, nan, nan, 0.2889999999999997, 0.8907499999999997, 2.1884999999999994, 2.6734999999999998, 2.55175, 2.685999999999999, 1.150999999999999, 0.32225000000000037, 0.17549999999999955, 0.40199999999999925, 0.7867499999999996, 1.6409999999999991, 1.8877499999999987, 1.617750000000001, 0.4007500000000004, 0.23599999999999888, 0.21950000000000003, 0.33525000000000027, 0.2795000000000005, 0.40500000000000025, 0.45200000000000085, 0.5010000000000012, 0.25700000000000145, 0.1437500000000007], zp_timestamp='2026-02-15T01:26:00')
2026-02-15T03:29:17.051 [DEBUG] [Thread-197168] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:29:17.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-15T03:29:17.156 [DEBUG] [Thread-197171] [transport.py] [_log()] starting thread (client mode): 0xa5772800
2026-02-15T03:29:17.156 [DEBUG] [Thread-197171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:29:17.171 [DEBUG] [Thread-197171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:29:17.171 [INFO] [Thread-197171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:29:17.179 [DEBUG] [Thread-197171] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:29:17.179 [DEBUG] [Thread-197171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:29:17.179 [DEBUG] [Thread-197171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:29:17.180 [DEBUG] [Thread-197171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:29:17.180 [DEBUG] [Thread-197171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:29:17.180 [DEBUG] [Thread-197171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:29:17.180 [DEBUG] [Thread-197171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:29:17.180 [DEBUG] [Thread-197171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:29:17.180 [DEBUG] [Thread-197171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:29:17.180 [DEBUG] [Thread-197171] [transport.py] [_log()] client lang: <none>
2026-02-15T03:29:17.180 [DEBUG] [Thread-197171] [transport.py] [_log()] server lang: <none>
2026-02-15T03:29:17.180 [DEBUG] [Thread-197171] [transport.py] [_log()] kex follows: False
2026-02-15T03:29:17.180 [DEBUG] [Thread-197171] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:29:17.180 [DEBUG] [Thread-197171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:29:17.180 [DEBUG] [Thread-197171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:29:17.180 [DEBUG] [Thread-197171] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:29:17.180 [DEBUG] [Thread-197171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:29:17.180 [DEBUG] [Thread-197171] [transport.py] [_log()] Compression: none
2026-02-15T03:29:17.180 [DEBUG] [Thread-197171] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:29:17.240 [DEBUG] [Thread-197171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:29:17.241 [DEBUG] [Thread-197171] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:29:17.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:29:17.242 [DEBUG] [Thread-197171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:29:17.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:29:17.300 [DEBUG] [Thread-197171] [transport.py] [_log()] userauth is OK
2026-02-15T03:29:17.300 [DEBUG] [Thread-197171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:29:17.300 [DEBUG] [Thread-197171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:29:17.301 [DEBUG] [Thread-197171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:29:17.301 [DEBUG] [Thread-197171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:29:17.325 [INFO] [Thread-197171] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:29:17.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:29:17.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:29:18.064 [DEBUG] [Thread-197173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:29:18.103 [DEBUG] [Thread-197171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:29:18.103 [DEBUG] [Thread-197171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:29:18.151 [DEBUG] [Thread-197171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:29:18.151 [DEBUG] [Thread-197171] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:29:18.160 [DEBUG] [Thread-197171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:29:18.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:29:18.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:29:18.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-15T03:29:18.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:29:18.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:29:18.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:29:18.197 [DEBUG] [Thread-197171] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:29:20.748 [DEBUG] [Thread-197174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:29:33.115 [DEBUG] [Thread-197175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:29:48.149 [DEBUG] [Thread-197176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:29:48.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:29:48.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:29:48.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T03:29:50.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 29, 17), 0.91, 94.09, 0.0, 33.67, 5.87, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:29:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:29:17
2026-02-15T03:29:50.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:29:51.146 [DEBUG] [Thread-197177] [transport.py] [_log()] starting thread (client mode): 0xa5770430
2026-02-15T03:29:51.146 [DEBUG] [Thread-197177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:29:51.167 [DEBUG] [Thread-197177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:29:51.167 [INFO] [Thread-197177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:29:51.170 [DEBUG] [Thread-197177] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:29:51.170 [DEBUG] [Thread-197177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:29:51.170 [DEBUG] [Thread-197177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:29:51.170 [DEBUG] [Thread-197177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:29:51.170 [DEBUG] [Thread-197177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:29:51.170 [DEBUG] [Thread-197177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:29:51.170 [DEBUG] [Thread-197177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:29:51.170 [DEBUG] [Thread-197177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:29:51.170 [DEBUG] [Thread-197177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:29:51.170 [DEBUG] [Thread-197177] [transport.py] [_log()] client lang: <none>
2026-02-15T03:29:51.170 [DEBUG] [Thread-197177] [transport.py] [_log()] server lang: <none>
2026-02-15T03:29:51.170 [DEBUG] [Thread-197177] [transport.py] [_log()] kex follows: False
2026-02-15T03:29:51.170 [DEBUG] [Thread-197177] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:29:51.170 [DEBUG] [Thread-197177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:29:51.170 [DEBUG] [Thread-197177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:29:51.170 [DEBUG] [Thread-197177] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:29:51.170 [DEBUG] [Thread-197177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:29:51.170 [DEBUG] [Thread-197177] [transport.py] [_log()] Compression: none
2026-02-15T03:29:51.170 [DEBUG] [Thread-197177] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:29:51.188 [DEBUG] [Thread-197177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:29:51.189 [DEBUG] [Thread-197177] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:29:51.189 [DEBUG] [Thread-197177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:29:51.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:29:51.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:29:51.190 [DEBUG] [Thread-197177] [transport.py] [_log()] userauth is OK
2026-02-15T03:29:51.190 [DEBUG] [Thread-197177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:29:51.190 [DEBUG] [Thread-197177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:29:51.190 [DEBUG] [Thread-197177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:29:51.190 [DEBUG] [Thread-197177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:29:51.208 [INFO] [Thread-197177] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:29:51.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:29:51.870 [DEBUG] [Thread-197177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:29:51.870 [DEBUG] [Thread-197177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:29:51.870 [DEBUG] [Thread-197177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:29:51.910 [DEBUG] [Thread-197177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:29:51.910 [DEBUG] [Thread-197177] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:29:51.913 [DEBUG] [Thread-197177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:29:51.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:29:51.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:29:51.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:29:51.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:29:51.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:29:51.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:29:51.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:29:51.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:29:51.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:29:51.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.061911 -999.00   +5.80  25.49     92   +4.70 1 2 1 3 1     0    0 1.14 -2.87 .NES. 25.5 25.5 158.0 31.8 6.3 -23.7 6.2 -22.3 6.0 -20.6 6.3 -21.3
2026-02-15T03:29:51.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:29:51.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:29:51.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.061911
2026-02-15T03:29:51.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:29:51.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:29:51.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:29:51.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:29:51.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:29:51.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:29:17', tmtdew=0.91, humidity=94.09, cloud=0.0, wind=33.67, temperature=5.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:29:09.110', atlas_cloud=2, atlas_rain=1, zp_data=[2.510249999999999, 2.57125, 2.4392500000000004, 2.4254999999999995, nan, nan, nan, nan, nan, 0.2889999999999997, 0.8907499999999997, 2.1884999999999994, 2.6734999999999998, 2.55175, 2.685999999999999, 1.150999999999999, 0.32225000000000037, 0.17549999999999955, 0.40199999999999925, 0.7867499999999996, 1.6409999999999991, 1.8877499999999987, 1.617750000000001, 0.4007500000000004, 0.23599999999999888, 0.21950000000000003, 0.33525000000000027, 0.2795000000000005, 0.40500000000000025, 0.45200000000000085, 0.5010000000000012, 0.25700000000000145, 0.1437500000000007], zp_timestamp='2026-02-15T01:26:00')
2026-02-15T03:29:51.936 [DEBUG] [Thread-197177] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:29:52.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:29:52.048 [DEBUG] [Thread-197180] [transport.py] [_log()] starting thread (client mode): 0xa5773a60
2026-02-15T03:29:52.048 [DEBUG] [Thread-197180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:29:52.062 [DEBUG] [Thread-197180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:29:52.063 [INFO] [Thread-197180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:29:52.070 [DEBUG] [Thread-197180] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:29:52.070 [DEBUG] [Thread-197180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:29:52.070 [DEBUG] [Thread-197180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:29:52.070 [DEBUG] [Thread-197180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:29:52.070 [DEBUG] [Thread-197180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:29:52.070 [DEBUG] [Thread-197180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:29:52.071 [DEBUG] [Thread-197180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:29:52.071 [DEBUG] [Thread-197180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:29:52.071 [DEBUG] [Thread-197180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:29:52.071 [DEBUG] [Thread-197180] [transport.py] [_log()] client lang: <none>
2026-02-15T03:29:52.071 [DEBUG] [Thread-197180] [transport.py] [_log()] server lang: <none>
2026-02-15T03:29:52.071 [DEBUG] [Thread-197180] [transport.py] [_log()] kex follows: False
2026-02-15T03:29:52.071 [DEBUG] [Thread-197180] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:29:52.071 [DEBUG] [Thread-197180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:29:52.071 [DEBUG] [Thread-197180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:29:52.071 [DEBUG] [Thread-197180] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:29:52.071 [DEBUG] [Thread-197180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:29:52.071 [DEBUG] [Thread-197180] [transport.py] [_log()] Compression: none
2026-02-15T03:29:52.071 [DEBUG] [Thread-197180] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:29:52.132 [DEBUG] [Thread-197180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:29:52.132 [DEBUG] [Thread-197180] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:29:52.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:29:52.134 [DEBUG] [Thread-197180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:29:52.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:29:52.188 [DEBUG] [Thread-197180] [transport.py] [_log()] userauth is OK
2026-02-15T03:29:52.188 [DEBUG] [Thread-197180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:29:52.189 [DEBUG] [Thread-197180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:29:52.189 [DEBUG] [Thread-197180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:29:52.189 [DEBUG] [Thread-197180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:29:52.207 [INFO] [Thread-197180] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:29:52.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-15T03:29:52.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:29:53.000 [DEBUG] [Thread-197180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:29:53.000 [DEBUG] [Thread-197180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:29:53.049 [DEBUG] [Thread-197180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:29:53.049 [DEBUG] [Thread-197180] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:29:53.058 [DEBUG] [Thread-197180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:29:53.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:29:53.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:29:53.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:29:53.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:29:53.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:29:53.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:29:53.092 [DEBUG] [Thread-197180] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:29:56.913 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:29:56.914 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:30:03.184 [DEBUG] [Thread-197182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:30:18.228 [DEBUG] [Thread-197183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:30:20.809 [DEBUG] [Thread-197184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:30:23.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:30:23.113 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:30:23.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-15T03:30:25.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 29, 53), 0.92, 94.04, 0.0, 33.81, 5.84, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:30:25.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:29:53
2026-02-15T03:30:25.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:30:25.665 [DEBUG] [Thread-197185] [transport.py] [_log()] starting thread (client mode): 0xa2d3e9b0
2026-02-15T03:30:25.665 [DEBUG] [Thread-197185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:30:25.686 [DEBUG] [Thread-197185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:30:25.686 [INFO] [Thread-197185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:30:25.690 [DEBUG] [Thread-197185] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:30:25.690 [DEBUG] [Thread-197185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:30:25.690 [DEBUG] [Thread-197185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:30:25.690 [DEBUG] [Thread-197185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:30:25.690 [DEBUG] [Thread-197185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:30:25.690 [DEBUG] [Thread-197185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:30:25.690 [DEBUG] [Thread-197185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:30:25.690 [DEBUG] [Thread-197185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:30:25.690 [DEBUG] [Thread-197185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:30:25.691 [DEBUG] [Thread-197185] [transport.py] [_log()] client lang: <none>
2026-02-15T03:30:25.691 [DEBUG] [Thread-197185] [transport.py] [_log()] server lang: <none>
2026-02-15T03:30:25.691 [DEBUG] [Thread-197185] [transport.py] [_log()] kex follows: False
2026-02-15T03:30:25.691 [DEBUG] [Thread-197185] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:30:25.691 [DEBUG] [Thread-197185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:30:25.691 [DEBUG] [Thread-197185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:30:25.691 [DEBUG] [Thread-197185] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:30:25.691 [DEBUG] [Thread-197185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:30:25.691 [DEBUG] [Thread-197185] [transport.py] [_log()] Compression: none
2026-02-15T03:30:25.691 [DEBUG] [Thread-197185] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:30:25.709 [DEBUG] [Thread-197185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:30:25.709 [DEBUG] [Thread-197185] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:30:25.709 [DEBUG] [Thread-197185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:30:25.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:30:25.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:30:25.710 [DEBUG] [Thread-197185] [transport.py] [_log()] userauth is OK
2026-02-15T03:30:25.710 [DEBUG] [Thread-197185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:30:25.710 [DEBUG] [Thread-197185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:30:25.710 [DEBUG] [Thread-197185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:30:25.710 [DEBUG] [Thread-197185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:30:25.741 [INFO] [Thread-197185] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:30:25.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:30:26.371 [DEBUG] [Thread-197185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:30:26.371 [DEBUG] [Thread-197185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:30:26.372 [DEBUG] [Thread-197185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:30:26.412 [DEBUG] [Thread-197185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:30:26.412 [DEBUG] [Thread-197185] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:30:26.415 [DEBUG] [Thread-197185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:30:26.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:30:26.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:30:26.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:30:26.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:30:26.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:30:26.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:30:26.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:30:26.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:30:26.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:30:26.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.062259 -999.00   +5.80  23.33     92   +4.70 1 2 1 3 1     0    0 1.10 -3.57 .NES. 23.3 23.3 151.2 34.3 6.4 -23.4 6.2 -22.9 6.0 -21.8 6.3 -23.1
2026-02-15T03:30:26.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:30:26.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:30:26.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.062259
2026-02-15T03:30:26.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:30:26.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:30:26.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:30:26.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:30:26.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:30:26.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:29:53', tmtdew=0.92, humidity=94.04, cloud=0.0, wind=33.81, temperature=5.84, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:29:39.178', atlas_cloud=2, atlas_rain=1, zp_data=[2.510249999999999, 2.57125, 2.4392500000000004, 2.4254999999999995, nan, nan, nan, nan, nan, 0.2889999999999997, 0.8907499999999997, 2.1884999999999994, 2.6734999999999998, 2.55175, 2.685999999999999, 1.150999999999999, 0.32225000000000037, 0.17549999999999955, 0.40199999999999925, 0.7867499999999996, 1.6409999999999991, 1.8877499999999987, 1.617750000000001, 0.4007500000000004, 0.23599999999999888, 0.21950000000000003, 0.33525000000000027, 0.2795000000000005, 0.40500000000000025, 0.45200000000000085, 0.5010000000000012, 0.25700000000000145, 0.1437500000000007], zp_timestamp='2026-02-15T01:26:00')
2026-02-15T03:30:26.438 [DEBUG] [Thread-197185] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:30:26.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:30:26.536 [DEBUG] [Thread-197188] [transport.py] [_log()] starting thread (client mode): 0xa2d3d930
2026-02-15T03:30:26.536 [DEBUG] [Thread-197188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:30:26.550 [DEBUG] [Thread-197188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:30:26.550 [INFO] [Thread-197188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:30:26.558 [DEBUG] [Thread-197188] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:30:26.558 [DEBUG] [Thread-197188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:30:26.558 [DEBUG] [Thread-197188] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:30:26.558 [DEBUG] [Thread-197188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:30:26.558 [DEBUG] [Thread-197188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:30:26.558 [DEBUG] [Thread-197188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:30:26.558 [DEBUG] [Thread-197188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:30:26.558 [DEBUG] [Thread-197188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:30:26.559 [DEBUG] [Thread-197188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:30:26.559 [DEBUG] [Thread-197188] [transport.py] [_log()] client lang: <none>
2026-02-15T03:30:26.559 [DEBUG] [Thread-197188] [transport.py] [_log()] server lang: <none>
2026-02-15T03:30:26.559 [DEBUG] [Thread-197188] [transport.py] [_log()] kex follows: False
2026-02-15T03:30:26.559 [DEBUG] [Thread-197188] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:30:26.559 [DEBUG] [Thread-197188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:30:26.559 [DEBUG] [Thread-197188] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:30:26.559 [DEBUG] [Thread-197188] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:30:26.559 [DEBUG] [Thread-197188] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:30:26.559 [DEBUG] [Thread-197188] [transport.py] [_log()] Compression: none
2026-02-15T03:30:26.559 [DEBUG] [Thread-197188] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:30:26.614 [DEBUG] [Thread-197188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:30:26.615 [DEBUG] [Thread-197188] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:30:26.615 [DEBUG] [Thread-197188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:30:26.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:30:26.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:30:26.672 [DEBUG] [Thread-197188] [transport.py] [_log()] userauth is OK
2026-02-15T03:30:26.672 [DEBUG] [Thread-197188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:30:26.672 [DEBUG] [Thread-197188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:30:26.672 [DEBUG] [Thread-197188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:30:26.672 [DEBUG] [Thread-197188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:30:26.691 [INFO] [Thread-197188] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:30:26.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:30:26.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:30:27.532 [DEBUG] [Thread-197188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:30:27.532 [DEBUG] [Thread-197188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:30:27.579 [DEBUG] [Thread-197188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:30:27.580 [DEBUG] [Thread-197188] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:30:27.589 [DEBUG] [Thread-197188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:30:27.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:30:27.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-15T03:30:27.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-15T03:30:27.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:30:27.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:30:27.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:30:27.625 [DEBUG] [Thread-197188] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:30:33.267 [DEBUG] [Thread-197190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:30:48.318 [DEBUG] [Thread-197191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:30:57.118 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:30:57.119 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:30:57.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:30:57.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:30:57.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-15T03:30:59.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 30, 30), 0.91, 94.09, 0.0, 33.97, 5.87, 2, 2, 2, 2, 0, 0),)
2026-02-15T03:30:59.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:30:30
2026-02-15T03:31:00.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:31:00.181 [DEBUG] [Thread-197192] [transport.py] [_log()] starting thread (client mode): 0xa57d7910
2026-02-15T03:31:00.181 [DEBUG] [Thread-197192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:31:00.200 [DEBUG] [Thread-197192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:31:00.201 [INFO] [Thread-197192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:31:00.203 [DEBUG] [Thread-197192] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:31:00.203 [DEBUG] [Thread-197192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:31:00.204 [DEBUG] [Thread-197192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:31:00.204 [DEBUG] [Thread-197192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:31:00.204 [DEBUG] [Thread-197192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:31:00.204 [DEBUG] [Thread-197192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:31:00.204 [DEBUG] [Thread-197192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:31:00.204 [DEBUG] [Thread-197192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:31:00.204 [DEBUG] [Thread-197192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:31:00.204 [DEBUG] [Thread-197192] [transport.py] [_log()] client lang: <none>
2026-02-15T03:31:00.204 [DEBUG] [Thread-197192] [transport.py] [_log()] server lang: <none>
2026-02-15T03:31:00.204 [DEBUG] [Thread-197192] [transport.py] [_log()] kex follows: False
2026-02-15T03:31:00.204 [DEBUG] [Thread-197192] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:31:00.204 [DEBUG] [Thread-197192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:31:00.204 [DEBUG] [Thread-197192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:31:00.204 [DEBUG] [Thread-197192] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:31:00.204 [DEBUG] [Thread-197192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:31:00.204 [DEBUG] [Thread-197192] [transport.py] [_log()] Compression: none
2026-02-15T03:31:00.204 [DEBUG] [Thread-197192] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:31:00.220 [DEBUG] [Thread-197192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:31:00.221 [DEBUG] [Thread-197192] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:31:00.221 [DEBUG] [Thread-197192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:31:00.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:31:00.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:31:00.224 [DEBUG] [Thread-197192] [transport.py] [_log()] userauth is OK
2026-02-15T03:31:00.224 [DEBUG] [Thread-197192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:31:00.224 [DEBUG] [Thread-197192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:31:00.224 [DEBUG] [Thread-197192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:31:00.224 [DEBUG] [Thread-197192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:31:00.249 [INFO] [Thread-197192] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:31:00.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:31:00.883 [DEBUG] [Thread-197192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:31:00.883 [DEBUG] [Thread-197192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:31:00.883 [DEBUG] [Thread-197192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:31:00.924 [DEBUG] [Thread-197192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:31:00.925 [DEBUG] [Thread-197192] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:31:00.928 [DEBUG] [Thread-197192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:31:00.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:31:00.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:31:00.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:31:00.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:31:00.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:31:00.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:31:00.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:31:00.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:31:00.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:31:00.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.062953 -999.00   +5.80  27.32     93   +4.70 1 2 1 3 1     0    0 1.06 -4.40 .NEs. 27.3 27.3 148.4 34.2 6.3 -17.8 6.2 -20.2 6.0 -18.0 6.3 -19.8
2026-02-15T03:31:00.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:31:00.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:31:00.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.062953
2026-02-15T03:31:00.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:31:00.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:31:00.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:31:00.958 [DEBUG] [Thread-197192] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:31:00.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:31:00.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:31:00.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:30:30', tmtdew=0.91, humidity=94.09, cloud=0.0, wind=33.97, temperature=5.87, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:30:39.139', atlas_cloud=2, atlas_rain=1, zp_data=[2.55725, 2.61125, 2.3272500000000003, 2.499999999999999, nan, nan, nan, nan, nan, 0.5210000000000008, 1.1037499999999998, 2.4049999999999994, 2.8549999999999995, nan, nan, nan, 0.8612500000000001, 0.3254999999999999, 0.48999999999999844, 1.0622499999999988, 2.1019999999999985, 2.1427499999999986, 2.0992500000000005, 0.6557500000000003, 0.7319999999999993, 0.3310000000000013, 0.5607499999999996, 0.6135000000000002, 0.49600000000000044, 0.5440000000000014, 0.604000000000001, 0.44700000000000095, 0.7007499999999993], zp_timestamp='2026-02-15T01:29:00')
2026-02-15T03:31:01.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-15T03:31:03.355 [DEBUG] [Thread-197195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:31:18.417 [DEBUG] [Thread-197196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:31:20.877 [DEBUG] [Thread-197197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:31:33.452 [DEBUG] [Thread-197198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:31:48.493 [DEBUG] [Thread-197199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:31:57.326 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:31:57.327 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:32:03.529 [DEBUG] [Thread-197200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:32:18.569 [DEBUG] [Thread-197201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:32:20.937 [DEBUG] [Thread-197202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:32:33.602 [DEBUG] [Thread-197203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:32:48.636 [DEBUG] [Thread-197204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:32:57.529 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:32:57.530 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:33:03.677 [DEBUG] [Thread-197205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:33:16.215 [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-15T03:33:18.718 [DEBUG] [Thread-197206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:33:21.013 [DEBUG] [Thread-197207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:33:33.754 [DEBUG] [Thread-197208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:33:46.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:33:46.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:33:46.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-15T03:33:48.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 33, 30), 0.73, 95.28, 0.0, 39.12, 5.82, 2, 2, 2, 2, 0, 0),)
2026-02-15T03:33:48.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:33:30
2026-02-15T03:33:48.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:33:48.676 [DEBUG] [Thread-197209] [transport.py] [_log()] starting thread (client mode): 0xa57d4430
2026-02-15T03:33:48.676 [DEBUG] [Thread-197209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:33:48.696 [DEBUG] [Thread-197209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:33:48.697 [INFO] [Thread-197209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:33:48.700 [DEBUG] [Thread-197209] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:33:48.700 [DEBUG] [Thread-197209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:33:48.700 [DEBUG] [Thread-197209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:33:48.700 [DEBUG] [Thread-197209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:33:48.700 [DEBUG] [Thread-197209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:33:48.700 [DEBUG] [Thread-197209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:33:48.700 [DEBUG] [Thread-197209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:33:48.700 [DEBUG] [Thread-197209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:33:48.700 [DEBUG] [Thread-197209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:33:48.700 [DEBUG] [Thread-197209] [transport.py] [_log()] client lang: <none>
2026-02-15T03:33:48.700 [DEBUG] [Thread-197209] [transport.py] [_log()] server lang: <none>
2026-02-15T03:33:48.700 [DEBUG] [Thread-197209] [transport.py] [_log()] kex follows: False
2026-02-15T03:33:48.700 [DEBUG] [Thread-197209] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:33:48.700 [DEBUG] [Thread-197209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:33:48.700 [DEBUG] [Thread-197209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:33:48.700 [DEBUG] [Thread-197209] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:33:48.701 [DEBUG] [Thread-197209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:33:48.701 [DEBUG] [Thread-197209] [transport.py] [_log()] Compression: none
2026-02-15T03:33:48.701 [DEBUG] [Thread-197209] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:33:48.716 [DEBUG] [Thread-197209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:33:48.716 [DEBUG] [Thread-197209] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:33:48.717 [DEBUG] [Thread-197209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:33:48.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:33:48.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:33:48.719 [DEBUG] [Thread-197209] [transport.py] [_log()] userauth is OK
2026-02-15T03:33:48.719 [DEBUG] [Thread-197209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:33:48.719 [DEBUG] [Thread-197209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:33:48.719 [DEBUG] [Thread-197209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:33:48.719 [DEBUG] [Thread-197209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:33:48.744 [INFO] [Thread-197209] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:33:48.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:33:48.792 [DEBUG] [Thread-197211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:33:49.331 [DEBUG] [Thread-197209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:33:49.331 [DEBUG] [Thread-197209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:33:49.332 [DEBUG] [Thread-197209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:33:49.372 [DEBUG] [Thread-197209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:33:49.373 [DEBUG] [Thread-197209] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:33:49.376 [DEBUG] [Thread-197209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:33:49.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:33:49.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:33:49.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:33:49.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:33:49.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:33:49.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:33:49.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:33:49.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:33:49.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:33:49.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.065036 -999.00   +5.70  31.29     93   +4.80 1 3 2 3 1     0    0 0.90 -9.40 ..Es. 31.3 31.3 139.6 38.1 6.5 -7.8 6.3 -6.7 6.0 -7.2 6.4 -9.0
2026-02-15T03:33:49.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:33:49.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:33:49.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.065036
2026-02-15T03:33:49.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:33:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:33:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:33:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:33:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:33:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:33:30', tmtdew=0.73, humidity=95.28, cloud=0.0, wind=39.12, temperature=5.82, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:33:39.110', atlas_cloud=3, atlas_rain=1, zp_data=[2.55725, 2.61125, 2.3272500000000003, 2.499999999999999, nan, nan, nan, nan, nan, 0.5210000000000008, 1.1037499999999998, 2.4049999999999994, 2.8549999999999995, nan, nan, nan, 0.8612500000000001, 0.3254999999999999, 0.48999999999999844, 1.0622499999999988, 2.1019999999999985, 2.1427499999999986, 2.0992500000000005, 0.6557500000000003, 0.7319999999999993, 0.3310000000000013, 0.5607499999999996, 0.6135000000000002, 0.49600000000000044, 0.5440000000000014, 0.604000000000001, 0.44700000000000095, 0.7007499999999993], zp_timestamp='2026-02-15T01:29:00')
2026-02-15T03:33:49.403 [DEBUG] [Thread-197209] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:33:49.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:33:49.497 [DEBUG] [Thread-197213] [transport.py] [_log()] starting thread (client mode): 0xa57d7ac0
2026-02-15T03:33:49.497 [DEBUG] [Thread-197213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:33:49.511 [DEBUG] [Thread-197213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:33:49.511 [INFO] [Thread-197213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:33:49.519 [DEBUG] [Thread-197213] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:33:49.519 [DEBUG] [Thread-197213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:33:49.519 [DEBUG] [Thread-197213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:33:49.519 [DEBUG] [Thread-197213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:33:49.519 [DEBUG] [Thread-197213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:33:49.519 [DEBUG] [Thread-197213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:33:49.519 [DEBUG] [Thread-197213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:33:49.519 [DEBUG] [Thread-197213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:33:49.520 [DEBUG] [Thread-197213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:33:49.520 [DEBUG] [Thread-197213] [transport.py] [_log()] client lang: <none>
2026-02-15T03:33:49.520 [DEBUG] [Thread-197213] [transport.py] [_log()] server lang: <none>
2026-02-15T03:33:49.520 [DEBUG] [Thread-197213] [transport.py] [_log()] kex follows: False
2026-02-15T03:33:49.520 [DEBUG] [Thread-197213] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:33:49.520 [DEBUG] [Thread-197213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:33:49.520 [DEBUG] [Thread-197213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:33:49.520 [DEBUG] [Thread-197213] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:33:49.520 [DEBUG] [Thread-197213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:33:49.520 [DEBUG] [Thread-197213] [transport.py] [_log()] Compression: none
2026-02-15T03:33:49.520 [DEBUG] [Thread-197213] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:33:49.578 [DEBUG] [Thread-197213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:33:49.578 [DEBUG] [Thread-197213] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:33:49.579 [DEBUG] [Thread-197213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:33:49.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:33:49.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:33:49.634 [DEBUG] [Thread-197213] [transport.py] [_log()] userauth is OK
2026-02-15T03:33:49.634 [DEBUG] [Thread-197213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:33:49.634 [DEBUG] [Thread-197213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:33:49.634 [DEBUG] [Thread-197213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:33:49.634 [DEBUG] [Thread-197213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:33:49.653 [INFO] [Thread-197213] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:33: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-15T03:33:49.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:33:50.484 [DEBUG] [Thread-197213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:33:50.484 [DEBUG] [Thread-197213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:33:50.532 [DEBUG] [Thread-197213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:33:50.533 [DEBUG] [Thread-197213] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:33:50.542 [DEBUG] [Thread-197213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:33:50.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:33:50.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:33:50.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-15T03:33:50.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:33:50.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:33:50.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:33:50.578 [DEBUG] [Thread-197213] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:33:57.749 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:33:57.750 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:34:03.829 [DEBUG] [Thread-197215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:34:18.887 [DEBUG] [Thread-197216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:34:20.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:34:20.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:34:20.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-15T03:34:21.070 [DEBUG] [Thread-197217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:34:22.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 34, 6), 0.72, 95.34, 0.0, 38.66, 5.86, 2, 2, 2, 2, 0, 0),)
2026-02-15T03:34:22.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:34:06
2026-02-15T03:34:22.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:34:22.904 [DEBUG] [Thread-197218] [transport.py] [_log()] starting thread (client mode): 0xa5773bb0
2026-02-15T03:34:22.904 [DEBUG] [Thread-197218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:34:22.924 [DEBUG] [Thread-197218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:34:22.924 [INFO] [Thread-197218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:34:22.928 [DEBUG] [Thread-197218] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:34:22.928 [DEBUG] [Thread-197218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:34:22.928 [DEBUG] [Thread-197218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:34:22.928 [DEBUG] [Thread-197218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:34:22.928 [DEBUG] [Thread-197218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:34:22.928 [DEBUG] [Thread-197218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:34:22.928 [DEBUG] [Thread-197218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:34:22.928 [DEBUG] [Thread-197218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:34:22.928 [DEBUG] [Thread-197218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:34:22.928 [DEBUG] [Thread-197218] [transport.py] [_log()] client lang: <none>
2026-02-15T03:34:22.928 [DEBUG] [Thread-197218] [transport.py] [_log()] server lang: <none>
2026-02-15T03:34:22.928 [DEBUG] [Thread-197218] [transport.py] [_log()] kex follows: False
2026-02-15T03:34:22.928 [DEBUG] [Thread-197218] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:34:22.928 [DEBUG] [Thread-197218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:34:22.928 [DEBUG] [Thread-197218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:34:22.928 [DEBUG] [Thread-197218] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:34:22.928 [DEBUG] [Thread-197218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:34:22.928 [DEBUG] [Thread-197218] [transport.py] [_log()] Compression: none
2026-02-15T03:34:22.928 [DEBUG] [Thread-197218] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:34:22.945 [DEBUG] [Thread-197218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:34:22.946 [DEBUG] [Thread-197218] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:34:22.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:34:22.947 [DEBUG] [Thread-197218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:34:22.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:34:22.948 [DEBUG] [Thread-197218] [transport.py] [_log()] userauth is OK
2026-02-15T03:34:22.948 [DEBUG] [Thread-197218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:34:22.948 [DEBUG] [Thread-197218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:34:22.949 [DEBUG] [Thread-197218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:34:22.949 [DEBUG] [Thread-197218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:34:22.967 [INFO] [Thread-197218] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:34:22.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:34:23.639 [DEBUG] [Thread-197218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:34:23.639 [DEBUG] [Thread-197218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:34:23.639 [DEBUG] [Thread-197218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:34:23.680 [DEBUG] [Thread-197218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:34:23.680 [DEBUG] [Thread-197218] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:34:23.683 [DEBUG] [Thread-197218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:34:23.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:34:23.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:34:23.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:34:23.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:34:23.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:34:23.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:34:23.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:34:23.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:34:23.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:34:23.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.065383 -999.00   +5.70  28.11     93   +4.80 1 3 1 3 1     0    0 0.87 -9.92 ..Es. 28.1 28.1 150.4 35.3 6.5 -7.1 6.3 -8.4 6.1 -8.3 6.4 -8.1
2026-02-15T03:34:23.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:34:23.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:34:23.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.065383
2026-02-15T03:34:23.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:34:23.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:34:23.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:34:23.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:34:23.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:34:23.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:34:06', tmtdew=0.72, humidity=95.34, cloud=0.0, wind=38.66, temperature=5.86, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:34:09.091', atlas_cloud=3, atlas_rain=1, zp_data=[2.55725, 2.61125, 2.3272500000000003, 2.499999999999999, nan, nan, nan, nan, nan, 0.5210000000000008, 1.1037499999999998, 2.4049999999999994, 2.8549999999999995, nan, nan, nan, 0.8612500000000001, 0.3254999999999999, 0.48999999999999844, 1.0622499999999988, 2.1019999999999985, 2.1427499999999986, 2.0992500000000005, 0.6557500000000003, 0.7319999999999993, 0.3310000000000013, 0.5607499999999996, 0.6135000000000002, 0.49600000000000044, 0.5440000000000014, 0.604000000000001, 0.44700000000000095, 0.7007499999999993], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:34:23.710 [DEBUG] [Thread-197218] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:34:23.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-15T03:34:23.806 [DEBUG] [Thread-197221] [transport.py] [_log()] starting thread (client mode): 0xa57706a0
2026-02-15T03:34:23.806 [DEBUG] [Thread-197221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:34:23.820 [DEBUG] [Thread-197221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:34:23.820 [INFO] [Thread-197221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:34:23.828 [DEBUG] [Thread-197221] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:34:23.828 [DEBUG] [Thread-197221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:34:23.829 [DEBUG] [Thread-197221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:34:23.829 [DEBUG] [Thread-197221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:34:23.829 [DEBUG] [Thread-197221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:34:23.829 [DEBUG] [Thread-197221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:34:23.829 [DEBUG] [Thread-197221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:34:23.829 [DEBUG] [Thread-197221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:34:23.829 [DEBUG] [Thread-197221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:34:23.829 [DEBUG] [Thread-197221] [transport.py] [_log()] client lang: <none>
2026-02-15T03:34:23.829 [DEBUG] [Thread-197221] [transport.py] [_log()] server lang: <none>
2026-02-15T03:34:23.829 [DEBUG] [Thread-197221] [transport.py] [_log()] kex follows: False
2026-02-15T03:34:23.829 [DEBUG] [Thread-197221] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:34:23.829 [DEBUG] [Thread-197221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:34:23.829 [DEBUG] [Thread-197221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:34:23.829 [DEBUG] [Thread-197221] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:34:23.829 [DEBUG] [Thread-197221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:34:23.829 [DEBUG] [Thread-197221] [transport.py] [_log()] Compression: none
2026-02-15T03:34:23.829 [DEBUG] [Thread-197221] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:34:23.885 [DEBUG] [Thread-197221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:34:23.886 [DEBUG] [Thread-197221] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:34:23.886 [DEBUG] [Thread-197221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:34:23.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:34:23.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:34:23.942 [DEBUG] [Thread-197221] [transport.py] [_log()] userauth is OK
2026-02-15T03:34:23.942 [DEBUG] [Thread-197221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:34:23.942 [DEBUG] [Thread-197221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:34:23.942 [DEBUG] [Thread-197221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:34:23.942 [DEBUG] [Thread-197221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:34:23.961 [INFO] [Thread-197221] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:34:23.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-15T03:34:23.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:34:24.785 [DEBUG] [Thread-197221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:34:24.785 [DEBUG] [Thread-197221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:34:24.833 [DEBUG] [Thread-197221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:34:24.833 [DEBUG] [Thread-197221] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:34:24.843 [DEBUG] [Thread-197221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:34:24.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:34:24.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-15T03:34:24.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-15T03:34:24.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:34:24.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:34:24.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:34:24.877 [DEBUG] [Thread-197221] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:34:33.925 [DEBUG] [Thread-197223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:34:48.974 [DEBUG] [Thread-197224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:34:54.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:34:54.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:34:54.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-15T03:34:56.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 34, 41), 1.25, 91.65, 0.0, 38.53, 6.15, 2, 2, 2, 2, 0, 0),)
2026-02-15T03:34:56.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:34:41
2026-02-15T03:34:57.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:34:57.482 [DEBUG] [Thread-197225] [transport.py] [_log()] starting thread (client mode): 0xa57d48e0
2026-02-15T03:34:57.482 [DEBUG] [Thread-197225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:34:57.503 [DEBUG] [Thread-197225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:34:57.503 [INFO] [Thread-197225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:34:57.506 [DEBUG] [Thread-197225] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:34:57.506 [DEBUG] [Thread-197225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:34:57.506 [DEBUG] [Thread-197225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:34:57.506 [DEBUG] [Thread-197225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:34:57.506 [DEBUG] [Thread-197225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:34:57.506 [DEBUG] [Thread-197225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:34:57.506 [DEBUG] [Thread-197225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:34:57.506 [DEBUG] [Thread-197225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:34:57.506 [DEBUG] [Thread-197225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:34:57.506 [DEBUG] [Thread-197225] [transport.py] [_log()] client lang: <none>
2026-02-15T03:34:57.506 [DEBUG] [Thread-197225] [transport.py] [_log()] server lang: <none>
2026-02-15T03:34:57.506 [DEBUG] [Thread-197225] [transport.py] [_log()] kex follows: False
2026-02-15T03:34:57.506 [DEBUG] [Thread-197225] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:34:57.506 [DEBUG] [Thread-197225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:34:57.506 [DEBUG] [Thread-197225] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:34:57.506 [DEBUG] [Thread-197225] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:34:57.506 [DEBUG] [Thread-197225] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:34:57.506 [DEBUG] [Thread-197225] [transport.py] [_log()] Compression: none
2026-02-15T03:34:57.506 [DEBUG] [Thread-197225] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:34:57.524 [DEBUG] [Thread-197225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:34:57.524 [DEBUG] [Thread-197225] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:34:57.525 [DEBUG] [Thread-197225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:34:57.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:34:57.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:34:57.527 [DEBUG] [Thread-197225] [transport.py] [_log()] userauth is OK
2026-02-15T03:34:57.527 [DEBUG] [Thread-197225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:34:57.527 [DEBUG] [Thread-197225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:34:57.527 [DEBUG] [Thread-197225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:34:57.527 [DEBUG] [Thread-197225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:34:57.559 [INFO] [Thread-197225] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:34:57.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:34:57.955 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:34:57.956 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:34:58.182 [DEBUG] [Thread-197225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:34:58.182 [DEBUG] [Thread-197225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:34:58.182 [DEBUG] [Thread-197225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:34:58.223 [DEBUG] [Thread-197225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:34:58.223 [DEBUG] [Thread-197225] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:34:58.225 [DEBUG] [Thread-197225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:34:58.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:34:58.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:34:58.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:34:58.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:34:58.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:34:58.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:34:58.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:34:58.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:34:58.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:34:58.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.065731 -999.00   +5.80  27.74     93   +4.90 1 3 1 3 1     0    0 0.82 -11.06 ----- 27.7 27.7 154.6 40.6 6.6 -6.7 6.4 -5.3 6.1 -5.0 6.5 -5.6
2026-02-15T03:34:58.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:34:58.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:34:58.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.065731
2026-02-15T03:34:58.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:34:58.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:34:58.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:34:58.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:34:58.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:34:58.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:34:41', tmtdew=1.25, humidity=91.65, cloud=0.0, wind=38.53, temperature=6.15, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:34:39.158', atlas_cloud=3, atlas_rain=1, zp_data=[2.55725, 2.61125, 2.3272500000000003, 2.499999999999999, nan, nan, nan, nan, nan, 0.5210000000000008, 1.1037499999999998, 2.4049999999999994, 2.8549999999999995, nan, nan, nan, 0.8612500000000001, 0.3254999999999999, 0.48999999999999844, 1.0622499999999988, 2.1019999999999985, 2.1427499999999986, 2.0992500000000005, 0.6557500000000003, 0.7319999999999993, 0.3310000000000013, 0.5607499999999996, 0.6135000000000002, 0.49600000000000044, 0.5440000000000014, 0.604000000000001, 0.44700000000000095, 0.7007499999999993], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:34:58.243 [DEBUG] [Thread-197225] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:34:58.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-15T03:34:58.327 [DEBUG] [Thread-197228] [transport.py] [_log()] starting thread (client mode): 0xa57d4d60
2026-02-15T03:34:58.327 [DEBUG] [Thread-197228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:34:58.341 [DEBUG] [Thread-197228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:34:58.342 [INFO] [Thread-197228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:34:58.349 [DEBUG] [Thread-197228] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:34:58.349 [DEBUG] [Thread-197228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:34:58.349 [DEBUG] [Thread-197228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:34:58.349 [DEBUG] [Thread-197228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:34:58.349 [DEBUG] [Thread-197228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:34:58.349 [DEBUG] [Thread-197228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:34:58.349 [DEBUG] [Thread-197228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:34:58.349 [DEBUG] [Thread-197228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:34:58.349 [DEBUG] [Thread-197228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:34:58.349 [DEBUG] [Thread-197228] [transport.py] [_log()] client lang: <none>
2026-02-15T03:34:58.349 [DEBUG] [Thread-197228] [transport.py] [_log()] server lang: <none>
2026-02-15T03:34:58.349 [DEBUG] [Thread-197228] [transport.py] [_log()] kex follows: False
2026-02-15T03:34:58.349 [DEBUG] [Thread-197228] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:34:58.349 [DEBUG] [Thread-197228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:34:58.349 [DEBUG] [Thread-197228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:34:58.349 [DEBUG] [Thread-197228] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:34:58.349 [DEBUG] [Thread-197228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:34:58.349 [DEBUG] [Thread-197228] [transport.py] [_log()] Compression: none
2026-02-15T03:34:58.349 [DEBUG] [Thread-197228] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:34:58.404 [DEBUG] [Thread-197228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:34:58.405 [DEBUG] [Thread-197228] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:34:58.405 [DEBUG] [Thread-197228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:34:58.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:34:58.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:34:58.462 [DEBUG] [Thread-197228] [transport.py] [_log()] userauth is OK
2026-02-15T03:34:58.462 [DEBUG] [Thread-197228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:34:58.462 [DEBUG] [Thread-197228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:34:58.462 [DEBUG] [Thread-197228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:34:58.462 [DEBUG] [Thread-197228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:34:58.476 [INFO] [Thread-197228] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:34:58.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-15T03:34:58.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:34:59.265 [DEBUG] [Thread-197228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:34:59.265 [DEBUG] [Thread-197228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:34:59.312 [DEBUG] [Thread-197228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:34:59.313 [DEBUG] [Thread-197228] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:34:59.322 [DEBUG] [Thread-197228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:34:59.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:34:59.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-15T03:34:59.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:34:59.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:34:59.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:34:59.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:34:59.360 [DEBUG] [Thread-197228] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:35:04.009 [DEBUG] [Thread-197230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:35:19.064 [DEBUG] [Thread-197231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:35:21.133 [DEBUG] [Thread-197232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:35:29.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:35:29.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:35:29.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-15T03:35:31.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 35, 18), 0.66, 95.44, 0.0, 37.88, 5.91, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:35:31.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:35:18
2026-02-15T03:35:31.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:35:31.788 [DEBUG] [Thread-197233] [transport.py] [_log()] starting thread (client mode): 0xa57d4040
2026-02-15T03:35:31.788 [DEBUG] [Thread-197233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:35:31.808 [DEBUG] [Thread-197233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:35:31.808 [INFO] [Thread-197233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:35:31.811 [DEBUG] [Thread-197233] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:35:31.812 [DEBUG] [Thread-197233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:35:31.812 [DEBUG] [Thread-197233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:35:31.812 [DEBUG] [Thread-197233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:35:31.812 [DEBUG] [Thread-197233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:35:31.812 [DEBUG] [Thread-197233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:35:31.812 [DEBUG] [Thread-197233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:35:31.812 [DEBUG] [Thread-197233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:35:31.812 [DEBUG] [Thread-197233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:35:31.812 [DEBUG] [Thread-197233] [transport.py] [_log()] client lang: <none>
2026-02-15T03:35:31.812 [DEBUG] [Thread-197233] [transport.py] [_log()] server lang: <none>
2026-02-15T03:35:31.812 [DEBUG] [Thread-197233] [transport.py] [_log()] kex follows: False
2026-02-15T03:35:31.812 [DEBUG] [Thread-197233] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:35:31.813 [DEBUG] [Thread-197233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:35:31.813 [DEBUG] [Thread-197233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:35:31.813 [DEBUG] [Thread-197233] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:35:31.813 [DEBUG] [Thread-197233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:35:31.813 [DEBUG] [Thread-197233] [transport.py] [_log()] Compression: none
2026-02-15T03:35:31.813 [DEBUG] [Thread-197233] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:35:31.832 [DEBUG] [Thread-197233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:35:31.832 [DEBUG] [Thread-197233] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:35:31.833 [DEBUG] [Thread-197233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:35:31.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:35:31.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:35:31.835 [DEBUG] [Thread-197233] [transport.py] [_log()] userauth is OK
2026-02-15T03:35:31.835 [DEBUG] [Thread-197233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:35:31.836 [DEBUG] [Thread-197233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:35:31.836 [DEBUG] [Thread-197233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:35:31.836 [DEBUG] [Thread-197233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:35:31.860 [INFO] [Thread-197233] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:35:31.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:35:32.480 [DEBUG] [Thread-197233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:35:32.481 [DEBUG] [Thread-197233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:35:32.481 [DEBUG] [Thread-197233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:35:32.521 [DEBUG] [Thread-197233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:35:32.522 [DEBUG] [Thread-197233] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:35:32.525 [DEBUG] [Thread-197233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:35:32.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:35:32.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:35:32.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:35:32.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:35:32.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:35:32.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:35:32.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:35:32.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:35:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:35:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.066078 -999.00   +5.80  25.62     93   +4.90 1 3 1 3 1     0    0 0.79 -12.01 ----- 25.6 25.6 149.2 35.3 6.6 -8.8 6.4 -7.7 6.2 -7.0 6.5 -7.4
2026-02-15T03:35:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:35:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:35:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.066078
2026-02-15T03:35:32.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:35:32.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:35:32.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:35:32.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:35:32.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:35:32.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:35:18', tmtdew=0.66, humidity=95.44, cloud=0.0, wind=37.88, temperature=5.91, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:35:09.139', atlas_cloud=3, atlas_rain=1, zp_data=[2.55725, 2.61125, 2.3272500000000003, 2.499999999999999, nan, nan, nan, nan, nan, 0.5210000000000008, 1.1037499999999998, 2.4049999999999994, 2.8549999999999995, nan, nan, nan, 0.8612500000000001, 0.3254999999999999, 0.48999999999999844, 1.0622499999999988, 2.1019999999999985, 2.1427499999999986, 2.0992500000000005, 0.6557500000000003, 0.7319999999999993, 0.3310000000000013, 0.5607499999999996, 0.6135000000000002, 0.49600000000000044, 0.5440000000000014, 0.604000000000001, 0.44700000000000095, 0.7007499999999993], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:35:32.551 [DEBUG] [Thread-197233] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:35:32.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:35:32.656 [DEBUG] [Thread-197236] [transport.py] [_log()] starting thread (client mode): 0xa57d4b20
2026-02-15T03:35:32.656 [DEBUG] [Thread-197236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:35:32.670 [DEBUG] [Thread-197236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:35:32.671 [INFO] [Thread-197236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:35:32.678 [DEBUG] [Thread-197236] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:35:32.678 [DEBUG] [Thread-197236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:35:32.678 [DEBUG] [Thread-197236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:35:32.678 [DEBUG] [Thread-197236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:35:32.678 [DEBUG] [Thread-197236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:35:32.678 [DEBUG] [Thread-197236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:35:32.678 [DEBUG] [Thread-197236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:35:32.678 [DEBUG] [Thread-197236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:35:32.678 [DEBUG] [Thread-197236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:35:32.678 [DEBUG] [Thread-197236] [transport.py] [_log()] client lang: <none>
2026-02-15T03:35:32.678 [DEBUG] [Thread-197236] [transport.py] [_log()] server lang: <none>
2026-02-15T03:35:32.678 [DEBUG] [Thread-197236] [transport.py] [_log()] kex follows: False
2026-02-15T03:35:32.678 [DEBUG] [Thread-197236] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:35:32.678 [DEBUG] [Thread-197236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:35:32.678 [DEBUG] [Thread-197236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:35:32.678 [DEBUG] [Thread-197236] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:35:32.678 [DEBUG] [Thread-197236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:35:32.678 [DEBUG] [Thread-197236] [transport.py] [_log()] Compression: none
2026-02-15T03:35:32.678 [DEBUG] [Thread-197236] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:35:32.738 [DEBUG] [Thread-197236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:35:32.738 [DEBUG] [Thread-197236] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:35:32.739 [DEBUG] [Thread-197236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:35:32.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:35:32.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:35:32.794 [DEBUG] [Thread-197236] [transport.py] [_log()] userauth is OK
2026-02-15T03:35:32.794 [DEBUG] [Thread-197236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:35:32.794 [DEBUG] [Thread-197236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:35:32.794 [DEBUG] [Thread-197236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:35:32.794 [DEBUG] [Thread-197236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:35:32.809 [INFO] [Thread-197236] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:35:32.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:35:32.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:35:33.636 [DEBUG] [Thread-197236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:35:33.636 [DEBUG] [Thread-197236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:35:33.685 [DEBUG] [Thread-197236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:35:33.685 [DEBUG] [Thread-197236] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:35:33.694 [DEBUG] [Thread-197236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:35:33.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:35:33.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-15T03:35:33.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-15T03:35:33.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:35:33.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:35:33.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:35:33.731 [DEBUG] [Thread-197236] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:35:34.099 [DEBUG] [Thread-197238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:35:49.159 [DEBUG] [Thread-197239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:35:58.160 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:35:58.161 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:36:03.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:36:03.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:36:03.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-15T03:36:04.191 [DEBUG] [Thread-197240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:36:05.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 35, 53), 0.65, 95.48, 0.0, 39.84, 5.89, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:36:05.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:35:53
2026-02-15T03:36:05.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:36:06.088 [DEBUG] [Thread-197241] [transport.py] [_log()] starting thread (client mode): 0xa57d5540
2026-02-15T03:36:06.088 [DEBUG] [Thread-197241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:36:06.108 [DEBUG] [Thread-197241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:36:06.108 [INFO] [Thread-197241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:36:06.111 [DEBUG] [Thread-197241] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:36:06.112 [DEBUG] [Thread-197241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:36:06.112 [DEBUG] [Thread-197241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:36:06.112 [DEBUG] [Thread-197241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:36:06.112 [DEBUG] [Thread-197241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:36:06.112 [DEBUG] [Thread-197241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:36:06.112 [DEBUG] [Thread-197241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:36:06.112 [DEBUG] [Thread-197241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:36:06.112 [DEBUG] [Thread-197241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:36:06.112 [DEBUG] [Thread-197241] [transport.py] [_log()] client lang: <none>
2026-02-15T03:36:06.112 [DEBUG] [Thread-197241] [transport.py] [_log()] server lang: <none>
2026-02-15T03:36:06.112 [DEBUG] [Thread-197241] [transport.py] [_log()] kex follows: False
2026-02-15T03:36:06.112 [DEBUG] [Thread-197241] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:36:06.112 [DEBUG] [Thread-197241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:36:06.113 [DEBUG] [Thread-197241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:36:06.113 [DEBUG] [Thread-197241] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:36:06.113 [DEBUG] [Thread-197241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:36:06.113 [DEBUG] [Thread-197241] [transport.py] [_log()] Compression: none
2026-02-15T03:36:06.113 [DEBUG] [Thread-197241] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:36:06.131 [DEBUG] [Thread-197241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:36:06.132 [DEBUG] [Thread-197241] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:36:06.133 [DEBUG] [Thread-197241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:36:06.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:36:06.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:36:06.136 [DEBUG] [Thread-197241] [transport.py] [_log()] userauth is OK
2026-02-15T03:36:06.136 [DEBUG] [Thread-197241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:36:06.136 [DEBUG] [Thread-197241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:36:06.136 [DEBUG] [Thread-197241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:36:06.136 [DEBUG] [Thread-197241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:36:06.156 [INFO] [Thread-197241] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:36:06.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:36:06.815 [DEBUG] [Thread-197241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:36:06.815 [DEBUG] [Thread-197241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:36:06.815 [DEBUG] [Thread-197241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:36:06.856 [DEBUG] [Thread-197241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:36:06.857 [DEBUG] [Thread-197241] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:36:06.860 [DEBUG] [Thread-197241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:36:06.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:36:06.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:36:06.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:36:06.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:36:06.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:36:06.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:36:06.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:36:06.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:36:06.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:36:06.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.066425 -999.00   +5.80  26.61     94   +4.90 1 3 1 3 1     0    0 0.79 -11.94 ----- 26.6 26.6 155.8 34.7 6.7 -8.0 6.5 -7.4 6.2 -6.9 6.6 -6.9
2026-02-15T03:36:06.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:36:06.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:36:06.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.066425
2026-02-15T03:36:06.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:36:06.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:36:06.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:36:06.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:36:06.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:36:06.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:35:53', tmtdew=0.65, humidity=95.48, cloud=0.0, wind=39.84, temperature=5.89, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:35:39.120', atlas_cloud=3, atlas_rain=1, zp_data=[2.55725, 2.61125, 2.3272500000000003, 2.499999999999999, nan, nan, nan, nan, nan, 0.5210000000000008, 1.1037499999999998, 2.4049999999999994, 2.8549999999999995, nan, nan, nan, 0.8612500000000001, 0.3254999999999999, 0.48999999999999844, 1.0622499999999988, 2.1019999999999985, 2.1427499999999986, 2.0992500000000005, 0.6557500000000003, 0.7319999999999993, 0.3310000000000013, 0.5607499999999996, 0.6135000000000002, 0.49600000000000044, 0.5440000000000014, 0.604000000000001, 0.44700000000000095, 0.7007499999999993], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:36:06.887 [DEBUG] [Thread-197241] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:36:06.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-15T03:36:06.982 [DEBUG] [Thread-197244] [transport.py] [_log()] starting thread (client mode): 0xa5770ca0
2026-02-15T03:36:06.982 [DEBUG] [Thread-197244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:36:06.997 [DEBUG] [Thread-197244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:36:06.997 [INFO] [Thread-197244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:36:07.005 [DEBUG] [Thread-197244] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:36:07.006 [DEBUG] [Thread-197244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:36:07.006 [DEBUG] [Thread-197244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:36:07.006 [DEBUG] [Thread-197244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:36:07.006 [DEBUG] [Thread-197244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:36:07.006 [DEBUG] [Thread-197244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:36:07.006 [DEBUG] [Thread-197244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:36:07.006 [DEBUG] [Thread-197244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:36:07.006 [DEBUG] [Thread-197244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:36:07.006 [DEBUG] [Thread-197244] [transport.py] [_log()] client lang: <none>
2026-02-15T03:36:07.006 [DEBUG] [Thread-197244] [transport.py] [_log()] server lang: <none>
2026-02-15T03:36:07.006 [DEBUG] [Thread-197244] [transport.py] [_log()] kex follows: False
2026-02-15T03:36:07.006 [DEBUG] [Thread-197244] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:36:07.006 [DEBUG] [Thread-197244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:36:07.006 [DEBUG] [Thread-197244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:36:07.006 [DEBUG] [Thread-197244] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:36:07.006 [DEBUG] [Thread-197244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:36:07.006 [DEBUG] [Thread-197244] [transport.py] [_log()] Compression: none
2026-02-15T03:36:07.006 [DEBUG] [Thread-197244] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:36:07.063 [DEBUG] [Thread-197244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:36:07.064 [DEBUG] [Thread-197244] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:36:07.065 [DEBUG] [Thread-197244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:36:07.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:36:07.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:36:07.123 [DEBUG] [Thread-197244] [transport.py] [_log()] userauth is OK
2026-02-15T03:36:07.124 [DEBUG] [Thread-197244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:36:07.124 [DEBUG] [Thread-197244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:36:07.124 [DEBUG] [Thread-197244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:36:07.124 [DEBUG] [Thread-197244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:36:07.142 [INFO] [Thread-197244] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:36:07.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-15T03:36:07.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:36:07.942 [DEBUG] [Thread-197244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:36:07.943 [DEBUG] [Thread-197244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:36:07.990 [DEBUG] [Thread-197244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:36:07.991 [DEBUG] [Thread-197244] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:36:08.000 [DEBUG] [Thread-197244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:36:08.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:36:08.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:36:08.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:36:08.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:36:08.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:36:08.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:36:08.035 [DEBUG] [Thread-197244] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:36:19.228 [DEBUG] [Thread-197246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:36:21.206 [DEBUG] [Thread-197247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:36:34.280 [DEBUG] [Thread-197248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:36:38.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:36:38.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:36:38.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-15T03:36:40.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 36, 28), 0.65, 95.49, 0.0, 38.57, 5.86, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:36:40.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:36:28
2026-02-15T03:36:40.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:36:40.543 [DEBUG] [Thread-197249] [transport.py] [_log()] starting thread (client mode): 0xa2d87310
2026-02-15T03:36:40.543 [DEBUG] [Thread-197249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:36:40.565 [DEBUG] [Thread-197249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:36:40.565 [INFO] [Thread-197249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:36:40.568 [DEBUG] [Thread-197249] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:36:40.569 [DEBUG] [Thread-197249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:36:40.569 [DEBUG] [Thread-197249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:36:40.569 [DEBUG] [Thread-197249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:36:40.569 [DEBUG] [Thread-197249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:36:40.569 [DEBUG] [Thread-197249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:36:40.569 [DEBUG] [Thread-197249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:36:40.569 [DEBUG] [Thread-197249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:36:40.569 [DEBUG] [Thread-197249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:36:40.569 [DEBUG] [Thread-197249] [transport.py] [_log()] client lang: <none>
2026-02-15T03:36:40.569 [DEBUG] [Thread-197249] [transport.py] [_log()] server lang: <none>
2026-02-15T03:36:40.569 [DEBUG] [Thread-197249] [transport.py] [_log()] kex follows: False
2026-02-15T03:36:40.569 [DEBUG] [Thread-197249] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:36:40.569 [DEBUG] [Thread-197249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:36:40.570 [DEBUG] [Thread-197249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:36:40.570 [DEBUG] [Thread-197249] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:36:40.570 [DEBUG] [Thread-197249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:36:40.570 [DEBUG] [Thread-197249] [transport.py] [_log()] Compression: none
2026-02-15T03:36:40.570 [DEBUG] [Thread-197249] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:36:40.589 [DEBUG] [Thread-197249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:36:40.589 [DEBUG] [Thread-197249] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:36:40.590 [DEBUG] [Thread-197249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:36:40.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:36:40.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:36:40.592 [DEBUG] [Thread-197249] [transport.py] [_log()] userauth is OK
2026-02-15T03:36:40.592 [DEBUG] [Thread-197249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:36:40.592 [DEBUG] [Thread-197249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:36:40.592 [DEBUG] [Thread-197249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:36:40.592 [DEBUG] [Thread-197249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:36:40.613 [INFO] [Thread-197249] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:36:40.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:36:41.267 [DEBUG] [Thread-197249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:36:41.267 [DEBUG] [Thread-197249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:36:41.268 [DEBUG] [Thread-197249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:36:41.308 [DEBUG] [Thread-197249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:36:41.308 [DEBUG] [Thread-197249] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:36:41.312 [DEBUG] [Thread-197249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:36:41.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:36:41.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:36:41.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:36:41.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:36:41.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:36:41.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:36:41.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:36:41.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:36:41.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:36:41.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.066773 -999.00   +5.80  23.96     94   +4.90 1 3 1 3 1     0    0 0.79 -11.34 ----- 24.0 24.0 150.9 36.2 6.7 -6.8 6.5 -7.0 6.3 -6.5 6.6 -7.0
2026-02-15T03:36:41.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:36:41.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:36:41.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.066773
2026-02-15T03:36:41.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:36:41.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:36:41.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:36:41.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:36:41.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:36:41.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:36:28', tmtdew=0.65, humidity=95.49, cloud=0.0, wind=38.57, temperature=5.86, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:36:09.187', atlas_cloud=3, atlas_rain=1, zp_data=[2.55725, 2.61125, 2.3272500000000003, 2.499999999999999, nan, nan, nan, nan, nan, 0.5210000000000008, 1.1037499999999998, 2.4049999999999994, 2.8549999999999995, nan, nan, nan, 0.8612500000000001, 0.3254999999999999, 0.48999999999999844, 1.0622499999999988, 2.1019999999999985, 2.1427499999999986, 2.0992500000000005, 0.6557500000000003, 0.7319999999999993, 0.3310000000000013, 0.5607499999999996, 0.6135000000000002, 0.49600000000000044, 0.5440000000000014, 0.604000000000001, 0.44700000000000095, 0.7007499999999993], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:36:41.338 [DEBUG] [Thread-197249] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:36:41.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-15T03:36:41.434 [DEBUG] [Thread-197252] [transport.py] [_log()] starting thread (client mode): 0xa2d87460
2026-02-15T03:36:41.435 [DEBUG] [Thread-197252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:36:41.449 [DEBUG] [Thread-197252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:36:41.449 [INFO] [Thread-197252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:36:41.456 [DEBUG] [Thread-197252] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:36:41.457 [DEBUG] [Thread-197252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:36:41.457 [DEBUG] [Thread-197252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:36:41.457 [DEBUG] [Thread-197252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:36:41.457 [DEBUG] [Thread-197252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:36:41.458 [DEBUG] [Thread-197252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:36:41.458 [DEBUG] [Thread-197252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:36:41.458 [DEBUG] [Thread-197252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:36:41.458 [DEBUG] [Thread-197252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:36:41.458 [DEBUG] [Thread-197252] [transport.py] [_log()] client lang: <none>
2026-02-15T03:36:41.458 [DEBUG] [Thread-197252] [transport.py] [_log()] server lang: <none>
2026-02-15T03:36:41.458 [DEBUG] [Thread-197252] [transport.py] [_log()] kex follows: False
2026-02-15T03:36:41.458 [DEBUG] [Thread-197252] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:36:41.458 [DEBUG] [Thread-197252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:36:41.458 [DEBUG] [Thread-197252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:36:41.458 [DEBUG] [Thread-197252] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:36:41.458 [DEBUG] [Thread-197252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:36:41.458 [DEBUG] [Thread-197252] [transport.py] [_log()] Compression: none
2026-02-15T03:36:41.458 [DEBUG] [Thread-197252] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:36:41.515 [DEBUG] [Thread-197252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:36:41.516 [DEBUG] [Thread-197252] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:36:41.517 [DEBUG] [Thread-197252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:36:41.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:36:41.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:36:41.572 [DEBUG] [Thread-197252] [transport.py] [_log()] userauth is OK
2026-02-15T03:36:41.572 [DEBUG] [Thread-197252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:36:41.572 [DEBUG] [Thread-197252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:36:41.572 [DEBUG] [Thread-197252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:36:41.572 [DEBUG] [Thread-197252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:36:41.591 [INFO] [Thread-197252] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:36:41.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-15T03:36:41.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:36:42.389 [DEBUG] [Thread-197252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:36:42.389 [DEBUG] [Thread-197252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:36:42.437 [DEBUG] [Thread-197252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:36:42.437 [DEBUG] [Thread-197252] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:36:42.446 [DEBUG] [Thread-197252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:36:42.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:36:42.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-15T03:36:42.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:36:42.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:36:42.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:36:42.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:36:42.482 [DEBUG] [Thread-197252] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:36:49.318 [DEBUG] [Thread-197254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:36:58.364 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:36:58.365 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:37:04.374 [DEBUG] [Thread-197255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:37:12.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:37:12.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:37:12.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-15T03:37:14.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 37, 4), 0.65, 95.51, 0.0, 39.08, 5.89, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:37:14.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:37:04
2026-02-15T03:37:14.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:37:15.145 [DEBUG] [Thread-197256] [transport.py] [_log()] starting thread (client mode): 0xa2d867a0
2026-02-15T03:37:15.145 [DEBUG] [Thread-197256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:37:15.166 [DEBUG] [Thread-197256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:37:15.166 [INFO] [Thread-197256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:37:15.169 [DEBUG] [Thread-197256] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:37:15.169 [DEBUG] [Thread-197256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:37:15.169 [DEBUG] [Thread-197256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:37:15.169 [DEBUG] [Thread-197256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:37:15.169 [DEBUG] [Thread-197256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:37:15.169 [DEBUG] [Thread-197256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:37:15.169 [DEBUG] [Thread-197256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:37:15.169 [DEBUG] [Thread-197256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:37:15.169 [DEBUG] [Thread-197256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:37:15.169 [DEBUG] [Thread-197256] [transport.py] [_log()] client lang: <none>
2026-02-15T03:37:15.169 [DEBUG] [Thread-197256] [transport.py] [_log()] server lang: <none>
2026-02-15T03:37:15.169 [DEBUG] [Thread-197256] [transport.py] [_log()] kex follows: False
2026-02-15T03:37:15.169 [DEBUG] [Thread-197256] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:37:15.169 [DEBUG] [Thread-197256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:37:15.169 [DEBUG] [Thread-197256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:37:15.169 [DEBUG] [Thread-197256] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:37:15.169 [DEBUG] [Thread-197256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:37:15.169 [DEBUG] [Thread-197256] [transport.py] [_log()] Compression: none
2026-02-15T03:37:15.169 [DEBUG] [Thread-197256] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:37:15.187 [DEBUG] [Thread-197256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:37:15.187 [DEBUG] [Thread-197256] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:37:15.188 [DEBUG] [Thread-197256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:37:15.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:37:15.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:37:15.190 [DEBUG] [Thread-197256] [transport.py] [_log()] userauth is OK
2026-02-15T03:37:15.190 [DEBUG] [Thread-197256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:37:15.190 [DEBUG] [Thread-197256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:37:15.190 [DEBUG] [Thread-197256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:37:15.191 [DEBUG] [Thread-197256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:37:15.209 [INFO] [Thread-197256] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:37:15.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:37:15.810 [DEBUG] [Thread-197256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:37:15.810 [DEBUG] [Thread-197256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:37:15.810 [DEBUG] [Thread-197256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:37:15.851 [DEBUG] [Thread-197256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:37:15.852 [DEBUG] [Thread-197256] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:37:15.854 [DEBUG] [Thread-197256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:37:15.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:37:15.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:37:15.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:37:15.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:37:15.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:37:15.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:37:15.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:37:15.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:37:15.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:37:15.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.067120 -999.00   +5.70  30.69     94   +4.90 1 3 2 3 1     0    0 0.75 -13.13 ----- 30.7 30.7 142.4 37.7 6.7 -7.7 6.5 -9.8 6.3 -8.6 6.6 -8.7
2026-02-15T03:37:15.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:37:15.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:37:15.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.067120
2026-02-15T03:37:15.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:37:15.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:37:15.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:37:15.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:37:15.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:37:15.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:37:04', tmtdew=0.65, humidity=95.51, cloud=0.0, wind=39.08, temperature=5.89, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:36:39.168', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:37:15.882 [DEBUG] [Thread-197256] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:37:15.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-15T03:37:15.977 [DEBUG] [Thread-197259] [transport.py] [_log()] starting thread (client mode): 0xa2d879d0
2026-02-15T03:37:15.977 [DEBUG] [Thread-197259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:37:15.992 [DEBUG] [Thread-197259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:37:15.992 [INFO] [Thread-197259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:37:15.999 [DEBUG] [Thread-197259] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:37:16.000 [DEBUG] [Thread-197259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:37:16.000 [DEBUG] [Thread-197259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:37:16.000 [DEBUG] [Thread-197259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:37:16.000 [DEBUG] [Thread-197259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:37:16.000 [DEBUG] [Thread-197259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:37:16.000 [DEBUG] [Thread-197259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:37:16.000 [DEBUG] [Thread-197259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:37:16.000 [DEBUG] [Thread-197259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:37:16.000 [DEBUG] [Thread-197259] [transport.py] [_log()] client lang: <none>
2026-02-15T03:37:16.001 [DEBUG] [Thread-197259] [transport.py] [_log()] server lang: <none>
2026-02-15T03:37:16.001 [DEBUG] [Thread-197259] [transport.py] [_log()] kex follows: False
2026-02-15T03:37:16.001 [DEBUG] [Thread-197259] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:37:16.001 [DEBUG] [Thread-197259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:37:16.001 [DEBUG] [Thread-197259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:37:16.001 [DEBUG] [Thread-197259] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:37:16.001 [DEBUG] [Thread-197259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:37:16.002 [DEBUG] [Thread-197259] [transport.py] [_log()] Compression: none
2026-02-15T03:37:16.002 [DEBUG] [Thread-197259] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:37:16.060 [DEBUG] [Thread-197259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:37:16.061 [DEBUG] [Thread-197259] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:37:16.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:37:16.062 [DEBUG] [Thread-197259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:37:16.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:37:16.120 [DEBUG] [Thread-197259] [transport.py] [_log()] userauth is OK
2026-02-15T03:37:16.120 [DEBUG] [Thread-197259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:37:16.120 [DEBUG] [Thread-197259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:37:16.121 [DEBUG] [Thread-197259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:37:16.121 [DEBUG] [Thread-197259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:37:16.141 [INFO] [Thread-197259] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:37:16.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:37:16.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:37:16.944 [DEBUG] [Thread-197259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:37:16.944 [DEBUG] [Thread-197259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:37:16.992 [DEBUG] [Thread-197259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:37:16.993 [DEBUG] [Thread-197259] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:37:17.002 [DEBUG] [Thread-197259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:37:17.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:37:17.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-15T03:37:17.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-15T03:37:17.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:37:17.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:37:17.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:37:17.039 [DEBUG] [Thread-197259] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:37:19.414 [DEBUG] [Thread-197261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:37:21.286 [DEBUG] [Thread-197262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:37:34.465 [DEBUG] [Thread-197263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:37:47.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:37:47.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:37:47.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T03:37:49.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 37, 40), 1.18, 92.12, 0.0, 37.51, 6.21, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:37:49.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:37:40
2026-02-15T03:37:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:37:49.502 [DEBUG] [Thread-197264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:37:49.551 [DEBUG] [Thread-197265] [transport.py] [_log()] starting thread (client mode): 0xa2d87d60
2026-02-15T03:37:49.551 [DEBUG] [Thread-197265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:37:49.572 [DEBUG] [Thread-197265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:37:49.572 [INFO] [Thread-197265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:37:49.575 [DEBUG] [Thread-197265] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:37:49.575 [DEBUG] [Thread-197265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:37:49.575 [DEBUG] [Thread-197265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:37:49.575 [DEBUG] [Thread-197265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:37:49.575 [DEBUG] [Thread-197265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:37:49.575 [DEBUG] [Thread-197265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:37:49.576 [DEBUG] [Thread-197265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:37:49.576 [DEBUG] [Thread-197265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:37:49.576 [DEBUG] [Thread-197265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:37:49.576 [DEBUG] [Thread-197265] [transport.py] [_log()] client lang: <none>
2026-02-15T03:37:49.576 [DEBUG] [Thread-197265] [transport.py] [_log()] server lang: <none>
2026-02-15T03:37:49.576 [DEBUG] [Thread-197265] [transport.py] [_log()] kex follows: False
2026-02-15T03:37:49.576 [DEBUG] [Thread-197265] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:37:49.576 [DEBUG] [Thread-197265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:37:49.576 [DEBUG] [Thread-197265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:37:49.576 [DEBUG] [Thread-197265] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:37:49.576 [DEBUG] [Thread-197265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:37:49.576 [DEBUG] [Thread-197265] [transport.py] [_log()] Compression: none
2026-02-15T03:37:49.576 [DEBUG] [Thread-197265] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:37:49.584 [DEBUG] [Thread-197265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:37:49.585 [DEBUG] [Thread-197265] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:37:49.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:37:49.586 [DEBUG] [Thread-197265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:37:49.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:37:49.587 [DEBUG] [Thread-197265] [transport.py] [_log()] userauth is OK
2026-02-15T03:37:49.588 [DEBUG] [Thread-197265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:37:49.588 [DEBUG] [Thread-197265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:37:49.588 [DEBUG] [Thread-197265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:37:49.588 [DEBUG] [Thread-197265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:37:49.612 [INFO] [Thread-197265] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:37:49.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:37:50.229 [DEBUG] [Thread-197265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:37:50.229 [DEBUG] [Thread-197265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:37:50.230 [DEBUG] [Thread-197265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:37:50.270 [DEBUG] [Thread-197265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:37:50.271 [DEBUG] [Thread-197265] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:37:50.274 [DEBUG] [Thread-197265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:37:50.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:37:50.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:37:50.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:37:50.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:37:50.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:37:50.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:37:50.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:37:50.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:37:50.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:37:50.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.067467 -999.00   +5.80  21.43     94   +4.90 1 3 1 3 1     0    0 0.73 -13.47 ----- 21.4 21.4 149.8 39.4 6.7 -4.1 6.5 -4.4 6.3 -5.9 6.7 -6.1
2026-02-15T03:37:50.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:37:50.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:37:50.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.067467
2026-02-15T03:37:50.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:37:50.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:37:50.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:37:50.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:37:50.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:37:50.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:37:40', tmtdew=1.18, humidity=92.12, cloud=0.0, wind=37.51, temperature=6.21, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:37:09.149', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:37:50.302 [DEBUG] [Thread-197265] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:37:50.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-15T03:37:50.402 [DEBUG] [Thread-197268] [transport.py] [_log()] starting thread (client mode): 0xa2d862c0
2026-02-15T03:37:50.402 [DEBUG] [Thread-197268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:37:50.416 [DEBUG] [Thread-197268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:37:50.417 [INFO] [Thread-197268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:37:50.424 [DEBUG] [Thread-197268] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:37:50.424 [DEBUG] [Thread-197268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:37:50.424 [DEBUG] [Thread-197268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:37:50.424 [DEBUG] [Thread-197268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:37:50.425 [DEBUG] [Thread-197268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:37:50.425 [DEBUG] [Thread-197268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:37:50.425 [DEBUG] [Thread-197268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:37:50.425 [DEBUG] [Thread-197268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:37:50.425 [DEBUG] [Thread-197268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:37:50.425 [DEBUG] [Thread-197268] [transport.py] [_log()] client lang: <none>
2026-02-15T03:37:50.425 [DEBUG] [Thread-197268] [transport.py] [_log()] server lang: <none>
2026-02-15T03:37:50.425 [DEBUG] [Thread-197268] [transport.py] [_log()] kex follows: False
2026-02-15T03:37:50.425 [DEBUG] [Thread-197268] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:37:50.425 [DEBUG] [Thread-197268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:37:50.425 [DEBUG] [Thread-197268] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:37:50.425 [DEBUG] [Thread-197268] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:37:50.425 [DEBUG] [Thread-197268] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:37:50.425 [DEBUG] [Thread-197268] [transport.py] [_log()] Compression: none
2026-02-15T03:37:50.425 [DEBUG] [Thread-197268] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:37:50.484 [DEBUG] [Thread-197268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:37:50.484 [DEBUG] [Thread-197268] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:37:50.485 [DEBUG] [Thread-197268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:37:50.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:37:50.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:37:50.540 [DEBUG] [Thread-197268] [transport.py] [_log()] userauth is OK
2026-02-15T03:37:50.540 [DEBUG] [Thread-197268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:37:50.541 [DEBUG] [Thread-197268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:37:50.541 [DEBUG] [Thread-197268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:37:50.541 [DEBUG] [Thread-197268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:37:50.560 [INFO] [Thread-197268] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:37:50.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-15T03:37:50.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:37:51.403 [DEBUG] [Thread-197268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:37:51.403 [DEBUG] [Thread-197268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:37:51.451 [DEBUG] [Thread-197268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:37:51.451 [DEBUG] [Thread-197268] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:37:51.460 [DEBUG] [Thread-197268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:37:51.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:37: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-15T03:37: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-15T03:37:51.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:37:51.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:37:51.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:37:51.495 [DEBUG] [Thread-197268] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:37:58.571 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:37:58.572 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:38:04.534 [DEBUG] [Thread-197270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:38:19.590 [DEBUG] [Thread-197271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:38:21.343 [DEBUG] [Thread-197272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:38:21.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:38:21.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:38:21.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-15T03:38:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 38, 15), 0.63, 95.61, 0.0, 36.45, 5.91, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:38:23.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:38:15
2026-02-15T03:38:23.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:38:23.913 [DEBUG] [Thread-197273] [transport.py] [_log()] starting thread (client mode): 0xa2d86e30
2026-02-15T03:38:23.913 [DEBUG] [Thread-197273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:38:23.934 [DEBUG] [Thread-197273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:38:23.934 [INFO] [Thread-197273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:38:23.937 [DEBUG] [Thread-197273] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:38:23.937 [DEBUG] [Thread-197273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:38:23.937 [DEBUG] [Thread-197273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:38:23.937 [DEBUG] [Thread-197273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:38:23.937 [DEBUG] [Thread-197273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:38:23.937 [DEBUG] [Thread-197273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:38:23.937 [DEBUG] [Thread-197273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:38:23.937 [DEBUG] [Thread-197273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:38:23.937 [DEBUG] [Thread-197273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:38:23.937 [DEBUG] [Thread-197273] [transport.py] [_log()] client lang: <none>
2026-02-15T03:38:23.937 [DEBUG] [Thread-197273] [transport.py] [_log()] server lang: <none>
2026-02-15T03:38:23.937 [DEBUG] [Thread-197273] [transport.py] [_log()] kex follows: False
2026-02-15T03:38:23.937 [DEBUG] [Thread-197273] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:38:23.937 [DEBUG] [Thread-197273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:38:23.937 [DEBUG] [Thread-197273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:38:23.937 [DEBUG] [Thread-197273] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:38:23.937 [DEBUG] [Thread-197273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:38:23.937 [DEBUG] [Thread-197273] [transport.py] [_log()] Compression: none
2026-02-15T03:38:23.937 [DEBUG] [Thread-197273] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:38:23.953 [DEBUG] [Thread-197273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:38:23.953 [DEBUG] [Thread-197273] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:38:23.953 [DEBUG] [Thread-197273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:38:23.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:38:23.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:38:23.954 [DEBUG] [Thread-197273] [transport.py] [_log()] userauth is OK
2026-02-15T03:38:23.954 [DEBUG] [Thread-197273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:38:23.954 [DEBUG] [Thread-197273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:38:23.955 [DEBUG] [Thread-197273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:38:23.955 [DEBUG] [Thread-197273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:38:23.972 [INFO] [Thread-197273] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:38:23.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:38:24.612 [DEBUG] [Thread-197273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:38:24.612 [DEBUG] [Thread-197273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:38:24.612 [DEBUG] [Thread-197273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:38:24.653 [DEBUG] [Thread-197273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:38:24.654 [DEBUG] [Thread-197273] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:38:24.657 [DEBUG] [Thread-197273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:38:24.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:38:24.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:38:24.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:38:24.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:38:24.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:38:24.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:38:24.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:38:24.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:38:24.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:38:24.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.068161 -999.00   +5.80  26.79     94   +4.90 1 3 1 3 1     0    0 0.66 -15.03 ----- 26.8 26.8 147.0 38.5 6.8 -7.2 6.6 -6.8 6.4 -5.8 6.8 -5.6
2026-02-15T03:38:24.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:38:24.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:38:24.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.068161
2026-02-15T03:38:24.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:38:24.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:38:24.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:38:24.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:38:24.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:38:24.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:38:15', tmtdew=0.63, humidity=95.61, cloud=0.0, wind=36.45, temperature=5.91, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:38:09.110', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:38:24.684 [DEBUG] [Thread-197273] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:38:24.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-15T03:38:24.785 [DEBUG] [Thread-197276] [transport.py] [_log()] starting thread (client mode): 0xa2d85ba0
2026-02-15T03:38:24.785 [DEBUG] [Thread-197276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:38:24.802 [DEBUG] [Thread-197276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:38:24.802 [INFO] [Thread-197276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:38:24.809 [DEBUG] [Thread-197276] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:38:24.809 [DEBUG] [Thread-197276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:38:24.809 [DEBUG] [Thread-197276] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:38:24.809 [DEBUG] [Thread-197276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:38:24.809 [DEBUG] [Thread-197276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:38:24.809 [DEBUG] [Thread-197276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:38:24.809 [DEBUG] [Thread-197276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:38:24.809 [DEBUG] [Thread-197276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:38:24.809 [DEBUG] [Thread-197276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:38:24.809 [DEBUG] [Thread-197276] [transport.py] [_log()] client lang: <none>
2026-02-15T03:38:24.809 [DEBUG] [Thread-197276] [transport.py] [_log()] server lang: <none>
2026-02-15T03:38:24.809 [DEBUG] [Thread-197276] [transport.py] [_log()] kex follows: False
2026-02-15T03:38:24.809 [DEBUG] [Thread-197276] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:38:24.809 [DEBUG] [Thread-197276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:38:24.809 [DEBUG] [Thread-197276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:38:24.809 [DEBUG] [Thread-197276] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:38:24.809 [DEBUG] [Thread-197276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:38:24.809 [DEBUG] [Thread-197276] [transport.py] [_log()] Compression: none
2026-02-15T03:38:24.809 [DEBUG] [Thread-197276] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:38:24.874 [DEBUG] [Thread-197276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:38:24.875 [DEBUG] [Thread-197276] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:38:24.875 [DEBUG] [Thread-197276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:38:24.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:38:24.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:38:24.938 [DEBUG] [Thread-197276] [transport.py] [_log()] userauth is OK
2026-02-15T03:38:24.938 [DEBUG] [Thread-197276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:38:24.938 [DEBUG] [Thread-197276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:38:24.938 [DEBUG] [Thread-197276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:38:24.938 [DEBUG] [Thread-197276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:38:24.959 [INFO] [Thread-197276] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:38:24.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-15T03:38:24.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:38:25.789 [DEBUG] [Thread-197276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:38:25.789 [DEBUG] [Thread-197276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:38:25.842 [DEBUG] [Thread-197276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:38:25.842 [DEBUG] [Thread-197276] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:38:25.855 [DEBUG] [Thread-197276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:38:25.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:38:25.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:38:25.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-15T03:38:25.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:38:25.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:38:25.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:38:25.902 [DEBUG] [Thread-197276] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:38:34.628 [DEBUG] [Thread-197278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:38:49.684 [DEBUG] [Thread-197279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:38:55.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:38:55.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:38:55.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-15T03:38:58.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 38, 15), 0.63, 95.61, 0.0, 36.45, 5.91, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:38:58.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:38:15
2026-02-15T03:38:58.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:38:58.554 [DEBUG] [Thread-197280] [transport.py] [_log()] starting thread (client mode): 0xa2d86e00
2026-02-15T03:38:58.554 [DEBUG] [Thread-197280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:38:58.573 [DEBUG] [Thread-197280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:38:58.573 [INFO] [Thread-197280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:38:58.576 [DEBUG] [Thread-197280] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:38:58.576 [DEBUG] [Thread-197280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:38:58.576 [DEBUG] [Thread-197280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:38:58.576 [DEBUG] [Thread-197280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:38:58.576 [DEBUG] [Thread-197280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:38:58.576 [DEBUG] [Thread-197280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:38:58.576 [DEBUG] [Thread-197280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:38:58.576 [DEBUG] [Thread-197280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:38:58.576 [DEBUG] [Thread-197280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:38:58.577 [DEBUG] [Thread-197280] [transport.py] [_log()] client lang: <none>
2026-02-15T03:38:58.577 [DEBUG] [Thread-197280] [transport.py] [_log()] server lang: <none>
2026-02-15T03:38:58.577 [DEBUG] [Thread-197280] [transport.py] [_log()] kex follows: False
2026-02-15T03:38:58.577 [DEBUG] [Thread-197280] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:38:58.577 [DEBUG] [Thread-197280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:38:58.577 [DEBUG] [Thread-197280] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:38:58.577 [DEBUG] [Thread-197280] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:38:58.577 [DEBUG] [Thread-197280] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:38:58.577 [DEBUG] [Thread-197280] [transport.py] [_log()] Compression: none
2026-02-15T03:38:58.577 [DEBUG] [Thread-197280] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:38:58.593 [DEBUG] [Thread-197280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:38:58.594 [DEBUG] [Thread-197280] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:38:58.594 [DEBUG] [Thread-197280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:38:58.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:38:58.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:38:58.596 [DEBUG] [Thread-197280] [transport.py] [_log()] userauth is OK
2026-02-15T03:38:58.596 [DEBUG] [Thread-197280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:38:58.596 [DEBUG] [Thread-197280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:38:58.596 [DEBUG] [Thread-197280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:38:58.596 [DEBUG] [Thread-197280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:38:58.631 [INFO] [Thread-197280] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:38:58.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:38:58.773 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:38:58.774 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:38:59.272 [DEBUG] [Thread-197280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:38:59.272 [DEBUG] [Thread-197280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:38:59.273 [DEBUG] [Thread-197280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:38:59.314 [DEBUG] [Thread-197280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:38:59.314 [DEBUG] [Thread-197280] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:38:59.317 [DEBUG] [Thread-197280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:38:59.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:38:59.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:38:59.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:38:59.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:38:59.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:38:59.340 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:38:59.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:38:59.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:38:59.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:38:59.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.068508 -999.00   +5.70  28.02     94   +4.90 1 3 1 3 1     0    0 0.60 -16.07 ----- 28.0 28.0 145.0 37.6 6.8 -8.4 6.6 -7.4 6.4 -7.2 6.8 -7.9
2026-02-15T03:38:59.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:38:59.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:38:59.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.068508
2026-02-15T03:38:59.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:38:59.342 [DEBUG] [Thread-197280] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:38:59.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:38:59.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:38:59.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:38:59.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:38:59.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:38:15', tmtdew=0.63, humidity=95.61, cloud=0.0, wind=36.45, temperature=5.91, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:38:39.091', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:38:59.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-15T03:38:59.438 [DEBUG] [Thread-197283] [transport.py] [_log()] starting thread (client mode): 0xa2d87fa0
2026-02-15T03:38:59.438 [DEBUG] [Thread-197283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:38:59.452 [DEBUG] [Thread-197283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:38:59.453 [INFO] [Thread-197283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:38:59.460 [DEBUG] [Thread-197283] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:38:59.460 [DEBUG] [Thread-197283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:38:59.460 [DEBUG] [Thread-197283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:38:59.460 [DEBUG] [Thread-197283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:38:59.460 [DEBUG] [Thread-197283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:38:59.460 [DEBUG] [Thread-197283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:38:59.460 [DEBUG] [Thread-197283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:38:59.461 [DEBUG] [Thread-197283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:38:59.461 [DEBUG] [Thread-197283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:38:59.461 [DEBUG] [Thread-197283] [transport.py] [_log()] client lang: <none>
2026-02-15T03:38:59.461 [DEBUG] [Thread-197283] [transport.py] [_log()] server lang: <none>
2026-02-15T03:38:59.461 [DEBUG] [Thread-197283] [transport.py] [_log()] kex follows: False
2026-02-15T03:38:59.461 [DEBUG] [Thread-197283] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:38:59.461 [DEBUG] [Thread-197283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:38:59.461 [DEBUG] [Thread-197283] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:38:59.461 [DEBUG] [Thread-197283] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:38:59.461 [DEBUG] [Thread-197283] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:38:59.461 [DEBUG] [Thread-197283] [transport.py] [_log()] Compression: none
2026-02-15T03:38:59.461 [DEBUG] [Thread-197283] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:38:59.520 [DEBUG] [Thread-197283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:38:59.520 [DEBUG] [Thread-197283] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:38:59.521 [DEBUG] [Thread-197283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:38:59.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:38:59.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:38:59.576 [DEBUG] [Thread-197283] [transport.py] [_log()] userauth is OK
2026-02-15T03:38:59.577 [DEBUG] [Thread-197283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:38:59.577 [DEBUG] [Thread-197283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:38:59.577 [DEBUG] [Thread-197283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:38:59.577 [DEBUG] [Thread-197283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:38:59.595 [INFO] [Thread-197283] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:38:59.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-15T03:38:59.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:39:00.405 [DEBUG] [Thread-197283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:39:00.406 [DEBUG] [Thread-197283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:39:00.454 [DEBUG] [Thread-197283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:39:00.454 [DEBUG] [Thread-197283] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:39:00.462 [DEBUG] [Thread-197283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:39:00.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:39:00.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:39:00.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:39:00.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:39:00.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:39:00.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:39:00.496 [DEBUG] [Thread-197283] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:39:04.722 [DEBUG] [Thread-197285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:39:19.778 [DEBUG] [Thread-197286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:39:21.409 [DEBUG] [Thread-197287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:39:30.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:39:30.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:39:30.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-15T03:39:32.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 38, 50), 0.63, 95.61, 0.0, 36.72, 5.86, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:39:32.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:38:50
2026-02-15T03:39:32.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:39:32.862 [DEBUG] [Thread-197288] [transport.py] [_log()] starting thread (client mode): 0xa2d877c0
2026-02-15T03:39:32.862 [DEBUG] [Thread-197288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:39:32.882 [DEBUG] [Thread-197288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:39:32.882 [INFO] [Thread-197288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:39:32.885 [DEBUG] [Thread-197288] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:39:32.885 [DEBUG] [Thread-197288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:39:32.885 [DEBUG] [Thread-197288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:39:32.885 [DEBUG] [Thread-197288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:39:32.885 [DEBUG] [Thread-197288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:39:32.885 [DEBUG] [Thread-197288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:39:32.885 [DEBUG] [Thread-197288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:39:32.885 [DEBUG] [Thread-197288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:39:32.885 [DEBUG] [Thread-197288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:39:32.885 [DEBUG] [Thread-197288] [transport.py] [_log()] client lang: <none>
2026-02-15T03:39:32.885 [DEBUG] [Thread-197288] [transport.py] [_log()] server lang: <none>
2026-02-15T03:39:32.885 [DEBUG] [Thread-197288] [transport.py] [_log()] kex follows: False
2026-02-15T03:39:32.885 [DEBUG] [Thread-197288] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:39:32.885 [DEBUG] [Thread-197288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:39:32.885 [DEBUG] [Thread-197288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:39:32.885 [DEBUG] [Thread-197288] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:39:32.885 [DEBUG] [Thread-197288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:39:32.885 [DEBUG] [Thread-197288] [transport.py] [_log()] Compression: none
2026-02-15T03:39:32.885 [DEBUG] [Thread-197288] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:39:32.893 [DEBUG] [Thread-197288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:39:32.893 [DEBUG] [Thread-197288] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:39:32.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:39:32.894 [DEBUG] [Thread-197288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:39:32.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:39:32.895 [DEBUG] [Thread-197288] [transport.py] [_log()] userauth is OK
2026-02-15T03:39:32.895 [DEBUG] [Thread-197288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:39:32.895 [DEBUG] [Thread-197288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:39:32.895 [DEBUG] [Thread-197288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:39:32.895 [DEBUG] [Thread-197288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:39:32.920 [INFO] [Thread-197288] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:39:32.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:39:33.551 [DEBUG] [Thread-197288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:39:33.551 [DEBUG] [Thread-197288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:39:33.552 [DEBUG] [Thread-197288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:39:33.593 [DEBUG] [Thread-197288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:39:33.593 [DEBUG] [Thread-197288] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:39:33.596 [DEBUG] [Thread-197288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:39:33.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:39:33.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:39:33.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:39:33.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:39:33.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:39:33.622 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:39:33.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:39:33.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:39:33.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:39:33.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.068856 -999.00   +5.80  25.26     94   +4.90 1 3 1 3 1     0    0 0.56 -17.94 ----- 25.3 25.3 152.1 33.8 6.8 -6.2 6.6 -5.9 6.4 -7.8 6.8 -8.5
2026-02-15T03:39:33.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:39:33.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:39:33.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.068856
2026-02-15T03:39:33.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:39:33.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:39:33.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:39:33.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:39:33.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:39:33.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:38:50', tmtdew=0.63, humidity=95.61, cloud=0.0, wind=36.72, temperature=5.86, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:39:09.158', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:39:33.624 [DEBUG] [Thread-197288] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:39:33.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-15T03:39:33.724 [DEBUG] [Thread-197291] [transport.py] [_log()] starting thread (client mode): 0xa2d87250
2026-02-15T03:39:33.724 [DEBUG] [Thread-197291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:39:33.739 [DEBUG] [Thread-197291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:39:33.739 [INFO] [Thread-197291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:39:33.747 [DEBUG] [Thread-197291] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:39:33.747 [DEBUG] [Thread-197291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:39:33.747 [DEBUG] [Thread-197291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:39:33.747 [DEBUG] [Thread-197291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:39:33.747 [DEBUG] [Thread-197291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:39:33.747 [DEBUG] [Thread-197291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:39:33.747 [DEBUG] [Thread-197291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:39:33.747 [DEBUG] [Thread-197291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:39:33.747 [DEBUG] [Thread-197291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:39:33.747 [DEBUG] [Thread-197291] [transport.py] [_log()] client lang: <none>
2026-02-15T03:39:33.748 [DEBUG] [Thread-197291] [transport.py] [_log()] server lang: <none>
2026-02-15T03:39:33.748 [DEBUG] [Thread-197291] [transport.py] [_log()] kex follows: False
2026-02-15T03:39:33.748 [DEBUG] [Thread-197291] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:39:33.748 [DEBUG] [Thread-197291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:39:33.748 [DEBUG] [Thread-197291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:39:33.748 [DEBUG] [Thread-197291] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:39:33.748 [DEBUG] [Thread-197291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:39:33.748 [DEBUG] [Thread-197291] [transport.py] [_log()] Compression: none
2026-02-15T03:39:33.748 [DEBUG] [Thread-197291] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:39:33.804 [DEBUG] [Thread-197291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:39:33.805 [DEBUG] [Thread-197291] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:39:33.805 [DEBUG] [Thread-197291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:39:33.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:39:33.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:39:33.860 [DEBUG] [Thread-197291] [transport.py] [_log()] userauth is OK
2026-02-15T03:39:33.861 [DEBUG] [Thread-197291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:39:33.861 [DEBUG] [Thread-197291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:39:33.861 [DEBUG] [Thread-197291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:39:33.861 [DEBUG] [Thread-197291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:39:33.881 [INFO] [Thread-197291] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:39:33.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:39:33.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:39:34.753 [DEBUG] [Thread-197291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:39:34.753 [DEBUG] [Thread-197291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:39:34.801 [DEBUG] [Thread-197291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:39:34.801 [DEBUG] [Thread-197291] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:39:34.810 [DEBUG] [Thread-197291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:39:34.817 [DEBUG] [Thread-197293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:39:34.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:39:34.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-15T03:39:34.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-15T03:39:34.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:39:34.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:39:34.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:39:34.846 [DEBUG] [Thread-197291] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:39:49.870 [DEBUG] [Thread-197294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:39:58.982 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:39:58.983 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:40:04.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:40:04.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:40:04.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-15T03:40:04.906 [DEBUG] [Thread-197295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:40:07.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 39, 26), 0.62, 95.67, 0.0, 33.93, 5.87, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:40:07.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:39:26
2026-02-15T03:40:07.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:40:07.534 [DEBUG] [Thread-197296] [transport.py] [_log()] starting thread (client mode): 0xa57d5810
2026-02-15T03:40:07.534 [DEBUG] [Thread-197296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:40:07.554 [DEBUG] [Thread-197296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:40:07.554 [INFO] [Thread-197296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:40:07.558 [DEBUG] [Thread-197296] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:40:07.558 [DEBUG] [Thread-197296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:40:07.558 [DEBUG] [Thread-197296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:40:07.558 [DEBUG] [Thread-197296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:40:07.558 [DEBUG] [Thread-197296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:40:07.558 [DEBUG] [Thread-197296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:40:07.558 [DEBUG] [Thread-197296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:40:07.558 [DEBUG] [Thread-197296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:40:07.558 [DEBUG] [Thread-197296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:40:07.558 [DEBUG] [Thread-197296] [transport.py] [_log()] client lang: <none>
2026-02-15T03:40:07.558 [DEBUG] [Thread-197296] [transport.py] [_log()] server lang: <none>
2026-02-15T03:40:07.558 [DEBUG] [Thread-197296] [transport.py] [_log()] kex follows: False
2026-02-15T03:40:07.558 [DEBUG] [Thread-197296] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:40:07.558 [DEBUG] [Thread-197296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:40:07.558 [DEBUG] [Thread-197296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:40:07.558 [DEBUG] [Thread-197296] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:40:07.558 [DEBUG] [Thread-197296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:40:07.558 [DEBUG] [Thread-197296] [transport.py] [_log()] Compression: none
2026-02-15T03:40:07.558 [DEBUG] [Thread-197296] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:40:07.576 [DEBUG] [Thread-197296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:40:07.577 [DEBUG] [Thread-197296] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:40:07.577 [DEBUG] [Thread-197296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:40:07.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:40:07.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:40:07.579 [DEBUG] [Thread-197296] [transport.py] [_log()] userauth is OK
2026-02-15T03:40:07.579 [DEBUG] [Thread-197296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:40:07.580 [DEBUG] [Thread-197296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:40:07.580 [DEBUG] [Thread-197296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:40:07.580 [DEBUG] [Thread-197296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:40:07.604 [INFO] [Thread-197296] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:40:07.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:40:10.359 [DEBUG] [Thread-197296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:40:10.359 [DEBUG] [Thread-197296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:40:10.359 [DEBUG] [Thread-197296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:40:10.400 [DEBUG] [Thread-197296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:40:10.401 [DEBUG] [Thread-197296] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:40:10.404 [DEBUG] [Thread-197296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:40:10.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:40:10.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:40:10.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:40:10.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:40:10.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:40:10.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:40:10.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:40:10.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:40:10.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:40:10.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.069203 -999.00   +5.80  23.89     94   +4.90 1 3 1 3 1     0    0 0.51 -18.52 ----- 23.9 23.9 143.0 34.7 6.9 -3.9 6.7 -4.1 6.5 -6.8 6.8 -7.2
2026-02-15T03:40:10.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:40:10.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:40:10.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.069203
2026-02-15T03:40:10.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:40:10.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:40:10.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:40:10.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:40:10.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:40:10.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:39:26', tmtdew=0.62, humidity=95.67, cloud=0.0, wind=33.93, temperature=5.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:39:39.139', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:40:10.463 [DEBUG] [Thread-197296] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:40:10.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-15T03:40:10.551 [DEBUG] [Thread-197299] [transport.py] [_log()] starting thread (client mode): 0xa57d7340
2026-02-15T03:40:10.551 [DEBUG] [Thread-197299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:40:10.566 [DEBUG] [Thread-197299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:40:10.566 [INFO] [Thread-197299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:40:10.574 [DEBUG] [Thread-197299] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:40:10.574 [DEBUG] [Thread-197299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:40:10.574 [DEBUG] [Thread-197299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:40:10.574 [DEBUG] [Thread-197299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:40:10.574 [DEBUG] [Thread-197299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:40:10.574 [DEBUG] [Thread-197299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:40:10.574 [DEBUG] [Thread-197299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:40:10.575 [DEBUG] [Thread-197299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:40:10.575 [DEBUG] [Thread-197299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:40:10.575 [DEBUG] [Thread-197299] [transport.py] [_log()] client lang: <none>
2026-02-15T03:40:10.575 [DEBUG] [Thread-197299] [transport.py] [_log()] server lang: <none>
2026-02-15T03:40:10.575 [DEBUG] [Thread-197299] [transport.py] [_log()] kex follows: False
2026-02-15T03:40:10.575 [DEBUG] [Thread-197299] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:40:10.575 [DEBUG] [Thread-197299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:40:10.575 [DEBUG] [Thread-197299] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:40:10.575 [DEBUG] [Thread-197299] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:40:10.575 [DEBUG] [Thread-197299] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:40:10.575 [DEBUG] [Thread-197299] [transport.py] [_log()] Compression: none
2026-02-15T03:40:10.575 [DEBUG] [Thread-197299] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:40:10.632 [DEBUG] [Thread-197299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:40:10.633 [DEBUG] [Thread-197299] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:40:10.634 [DEBUG] [Thread-197299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:40:10.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:40:10.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:40:10.689 [DEBUG] [Thread-197299] [transport.py] [_log()] userauth is OK
2026-02-15T03:40:10.689 [DEBUG] [Thread-197299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:40:10.690 [DEBUG] [Thread-197299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:40:10.690 [DEBUG] [Thread-197299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:40:10.690 [DEBUG] [Thread-197299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:40:10.709 [INFO] [Thread-197299] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:40:10.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-15T03:40:10.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:40:11.505 [DEBUG] [Thread-197299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:40:11.505 [DEBUG] [Thread-197299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:40:11.553 [DEBUG] [Thread-197299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:40:11.553 [DEBUG] [Thread-197299] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:40:11.562 [DEBUG] [Thread-197299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:40:11.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:40:11.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-15T03:40:11.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-15T03:40:11.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:40:11.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:40:11.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:40:11.596 [DEBUG] [Thread-197299] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:40:19.945 [DEBUG] [Thread-197301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:40:21.469 [DEBUG] [Thread-197302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:40:35.007 [DEBUG] [Thread-197303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:40:41.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:40:41.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:40:41.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T03:40:43.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 40, 1), 0.62, 95.67, 0.0, 36.61, 5.87, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:40:43.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:40:01
2026-02-15T03:40:43.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:40:44.094 [DEBUG] [Thread-197304] [transport.py] [_log()] starting thread (client mode): 0xa2d843d0
2026-02-15T03:40:44.094 [DEBUG] [Thread-197304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:40:44.115 [DEBUG] [Thread-197304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:40:44.115 [INFO] [Thread-197304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:40:44.117 [DEBUG] [Thread-197304] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:40:44.117 [DEBUG] [Thread-197304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:40:44.117 [DEBUG] [Thread-197304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:40:44.117 [DEBUG] [Thread-197304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:40:44.117 [DEBUG] [Thread-197304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:40:44.117 [DEBUG] [Thread-197304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:40:44.117 [DEBUG] [Thread-197304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:40:44.117 [DEBUG] [Thread-197304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:40:44.117 [DEBUG] [Thread-197304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:40:44.117 [DEBUG] [Thread-197304] [transport.py] [_log()] client lang: <none>
2026-02-15T03:40:44.117 [DEBUG] [Thread-197304] [transport.py] [_log()] server lang: <none>
2026-02-15T03:40:44.117 [DEBUG] [Thread-197304] [transport.py] [_log()] kex follows: False
2026-02-15T03:40:44.117 [DEBUG] [Thread-197304] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:40:44.117 [DEBUG] [Thread-197304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:40:44.117 [DEBUG] [Thread-197304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:40:44.117 [DEBUG] [Thread-197304] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:40:44.117 [DEBUG] [Thread-197304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:40:44.117 [DEBUG] [Thread-197304] [transport.py] [_log()] Compression: none
2026-02-15T03:40:44.117 [DEBUG] [Thread-197304] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:40:44.126 [DEBUG] [Thread-197304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:40:44.126 [DEBUG] [Thread-197304] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:40:44.126 [DEBUG] [Thread-197304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:40:44.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:40:44.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:40:44.127 [DEBUG] [Thread-197304] [transport.py] [_log()] userauth is OK
2026-02-15T03:40:44.128 [DEBUG] [Thread-197304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:40:44.128 [DEBUG] [Thread-197304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:40:44.128 [DEBUG] [Thread-197304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:40:44.128 [DEBUG] [Thread-197304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:40:44.140 [INFO] [Thread-197304] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:40:44.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:40:44.761 [DEBUG] [Thread-197304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:40:44.762 [DEBUG] [Thread-197304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:40:44.762 [DEBUG] [Thread-197304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:40:44.802 [DEBUG] [Thread-197304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:40:44.802 [DEBUG] [Thread-197304] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:40:44.806 [DEBUG] [Thread-197304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:40:44.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:40:44.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:40:44.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:40:44.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:40:44.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:40:44.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:40:44.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:40:44.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:40:44.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:40:44.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.069550 -999.00   +5.80  19.96     94   +4.90 1 3 1 3 1     0    0 0.50 -20.06 ----- 20.0 20.0 157.7 30.3 6.9 -4.9 6.7 -3.5 6.5 -4.1 6.8 -4.5
2026-02-15T03:40:44.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:40:44.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:40:44.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.069550
2026-02-15T03:40:44.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:40:44.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:40:44.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:40:44.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:40:44.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:40:44.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:40:01', tmtdew=0.62, humidity=95.67, cloud=0.0, wind=36.61, temperature=5.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:40:09.120', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:40:44.831 [DEBUG] [Thread-197304] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:40:44.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-15T03:40:44.927 [DEBUG] [Thread-197307] [transport.py] [_log()] starting thread (client mode): 0xa2d85c30
2026-02-15T03:40:44.927 [DEBUG] [Thread-197307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:40:44.942 [DEBUG] [Thread-197307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:40:44.942 [INFO] [Thread-197307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:40:44.950 [DEBUG] [Thread-197307] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:40:44.950 [DEBUG] [Thread-197307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:40:44.950 [DEBUG] [Thread-197307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:40:44.950 [DEBUG] [Thread-197307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:40:44.950 [DEBUG] [Thread-197307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:40:44.950 [DEBUG] [Thread-197307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:40:44.950 [DEBUG] [Thread-197307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:40:44.950 [DEBUG] [Thread-197307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:40:44.950 [DEBUG] [Thread-197307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:40:44.951 [DEBUG] [Thread-197307] [transport.py] [_log()] client lang: <none>
2026-02-15T03:40:44.951 [DEBUG] [Thread-197307] [transport.py] [_log()] server lang: <none>
2026-02-15T03:40:44.951 [DEBUG] [Thread-197307] [transport.py] [_log()] kex follows: False
2026-02-15T03:40:44.951 [DEBUG] [Thread-197307] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:40:44.951 [DEBUG] [Thread-197307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:40:44.951 [DEBUG] [Thread-197307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:40:44.951 [DEBUG] [Thread-197307] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:40:44.951 [DEBUG] [Thread-197307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:40:44.951 [DEBUG] [Thread-197307] [transport.py] [_log()] Compression: none
2026-02-15T03:40:44.951 [DEBUG] [Thread-197307] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:40:45.009 [DEBUG] [Thread-197307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:40:45.009 [DEBUG] [Thread-197307] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:40:45.010 [DEBUG] [Thread-197307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:40:45.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:40:45.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:40:45.064 [DEBUG] [Thread-197307] [transport.py] [_log()] userauth is OK
2026-02-15T03:40:45.065 [DEBUG] [Thread-197307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:40:45.065 [DEBUG] [Thread-197307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:40:45.065 [DEBUG] [Thread-197307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:40:45.065 [DEBUG] [Thread-197307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:40:45.083 [INFO] [Thread-197307] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:40:45.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-15T03:40:45.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:40:45.908 [DEBUG] [Thread-197307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:40:45.908 [DEBUG] [Thread-197307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:40:45.957 [DEBUG] [Thread-197307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:40:45.957 [DEBUG] [Thread-197307] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:40:45.966 [DEBUG] [Thread-197307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:40:45.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:40:45.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-15T03:40:45.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-15T03:40:45.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:40:45.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:40:45.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:40:46.006 [DEBUG] [Thread-197307] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:40:50.043 [DEBUG] [Thread-197309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:40:59.184 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:40:59.185 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:41:05.080 [DEBUG] [Thread-197310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:41:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:41:16.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:41:16.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-15T03:41:18.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 40, 36), 1.13, 92.42, 0.0, 33.73, 6.25, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:41:18.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:40:36
2026-02-15T03:41:19.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:41:19.312 [DEBUG] [Thread-197311] [transport.py] [_log()] starting thread (client mode): 0xa2d87220
2026-02-15T03:41:19.313 [DEBUG] [Thread-197311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:41:19.334 [DEBUG] [Thread-197311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:41:19.334 [INFO] [Thread-197311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:41:19.337 [DEBUG] [Thread-197311] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:41:19.337 [DEBUG] [Thread-197311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:41:19.337 [DEBUG] [Thread-197311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:41:19.337 [DEBUG] [Thread-197311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:41:19.337 [DEBUG] [Thread-197311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:41:19.338 [DEBUG] [Thread-197311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:41:19.338 [DEBUG] [Thread-197311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:41:19.338 [DEBUG] [Thread-197311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:41:19.338 [DEBUG] [Thread-197311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:41:19.338 [DEBUG] [Thread-197311] [transport.py] [_log()] client lang: <none>
2026-02-15T03:41:19.338 [DEBUG] [Thread-197311] [transport.py] [_log()] server lang: <none>
2026-02-15T03:41:19.338 [DEBUG] [Thread-197311] [transport.py] [_log()] kex follows: False
2026-02-15T03:41:19.338 [DEBUG] [Thread-197311] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:41:19.338 [DEBUG] [Thread-197311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:41:19.338 [DEBUG] [Thread-197311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:41:19.338 [DEBUG] [Thread-197311] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:41:19.338 [DEBUG] [Thread-197311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:41:19.339 [DEBUG] [Thread-197311] [transport.py] [_log()] Compression: none
2026-02-15T03:41:19.339 [DEBUG] [Thread-197311] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:41:19.357 [DEBUG] [Thread-197311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:41:19.358 [DEBUG] [Thread-197311] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:41:19.359 [DEBUG] [Thread-197311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:41:19.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:41:19.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:41:19.362 [DEBUG] [Thread-197311] [transport.py] [_log()] userauth is OK
2026-02-15T03:41:19.362 [DEBUG] [Thread-197311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:41:19.362 [DEBUG] [Thread-197311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:41:19.363 [DEBUG] [Thread-197311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:41:19.363 [DEBUG] [Thread-197311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:41:19.384 [INFO] [Thread-197311] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:41:19.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:41:20.024 [DEBUG] [Thread-197311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:41:20.024 [DEBUG] [Thread-197311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:41:20.025 [DEBUG] [Thread-197311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:41:20.065 [DEBUG] [Thread-197311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:41:20.065 [DEBUG] [Thread-197311] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:41:20.068 [DEBUG] [Thread-197311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:41:20.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:41:20.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:41:20.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:41:20.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:41:20.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:41:20.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:41:20.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:41:20.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:41:20.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:41:20.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.069897 -999.00   +5.80  23.65     94   +5.00 1 3 1 3 1     0    0 0.40 -21.76 ----- 23.6 23.6 149.2 31.9 6.9 -3.6 6.7 -3.6 6.5 -4.1 6.9 -4.6
2026-02-15T03:41:20.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:41:20.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:41:20.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.069897
2026-02-15T03:41:20.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:41:20.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:41:20.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:41:20.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:41:20.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:41:20.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:40:36', tmtdew=1.13, humidity=92.42, cloud=0.0, wind=33.73, temperature=6.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:40:39.101', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:41:20.093 [DEBUG] [Thread-197311] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:41:20.114 [DEBUG] [Thread-197314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:41:20.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:41:20.189 [DEBUG] [Thread-197315] [transport.py] [_log()] starting thread (client mode): 0xa2d85f60
2026-02-15T03:41:20.189 [DEBUG] [Thread-197315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:41:20.203 [DEBUG] [Thread-197315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:41:20.204 [INFO] [Thread-197315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:41:20.212 [DEBUG] [Thread-197315] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:41:20.212 [DEBUG] [Thread-197315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:41:20.212 [DEBUG] [Thread-197315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:41:20.212 [DEBUG] [Thread-197315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:41:20.212 [DEBUG] [Thread-197315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:41:20.212 [DEBUG] [Thread-197315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:41:20.212 [DEBUG] [Thread-197315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:41:20.212 [DEBUG] [Thread-197315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:41:20.212 [DEBUG] [Thread-197315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:41:20.212 [DEBUG] [Thread-197315] [transport.py] [_log()] client lang: <none>
2026-02-15T03:41:20.212 [DEBUG] [Thread-197315] [transport.py] [_log()] server lang: <none>
2026-02-15T03:41:20.212 [DEBUG] [Thread-197315] [transport.py] [_log()] kex follows: False
2026-02-15T03:41:20.212 [DEBUG] [Thread-197315] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:41:20.212 [DEBUG] [Thread-197315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:41:20.212 [DEBUG] [Thread-197315] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:41:20.213 [DEBUG] [Thread-197315] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:41:20.213 [DEBUG] [Thread-197315] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:41:20.213 [DEBUG] [Thread-197315] [transport.py] [_log()] Compression: none
2026-02-15T03:41:20.213 [DEBUG] [Thread-197315] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:41:20.269 [DEBUG] [Thread-197315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:41:20.269 [DEBUG] [Thread-197315] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:41:20.270 [DEBUG] [Thread-197315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:41:20.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:41:20.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:41:20.325 [DEBUG] [Thread-197315] [transport.py] [_log()] userauth is OK
2026-02-15T03:41:20.326 [DEBUG] [Thread-197315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:41:20.326 [DEBUG] [Thread-197315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:41:20.326 [DEBUG] [Thread-197315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:41:20.326 [DEBUG] [Thread-197315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:41:20.350 [INFO] [Thread-197315] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:41:20.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-15T03:41:20.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:41:21.143 [DEBUG] [Thread-197315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:41:21.143 [DEBUG] [Thread-197315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:41:21.191 [DEBUG] [Thread-197315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:41:21.192 [DEBUG] [Thread-197315] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:41:21.201 [DEBUG] [Thread-197315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:41:21.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:41:21.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:41:21.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:41:21.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:41:21.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:41:21.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:41:21.239 [DEBUG] [Thread-197315] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:41:21.528 [DEBUG] [Thread-197317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:41:35.155 [DEBUG] [Thread-197318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:41:50.191 [DEBUG] [Thread-197319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:41:51.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:41:51.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:41: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-15T03:41:53.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 41, 12), 0.61, 95.77, 0.0, 36.29, 5.87, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:41:53.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:41:12
2026-02-15T03:41:54.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:41:54.342 [DEBUG] [Thread-197320] [transport.py] [_log()] starting thread (client mode): 0xa57d40a0
2026-02-15T03:41:54.342 [DEBUG] [Thread-197320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:41:54.362 [DEBUG] [Thread-197320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:41:54.362 [INFO] [Thread-197320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:41:54.365 [DEBUG] [Thread-197320] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:41:54.366 [DEBUG] [Thread-197320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:41:54.366 [DEBUG] [Thread-197320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:41:54.366 [DEBUG] [Thread-197320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:41:54.366 [DEBUG] [Thread-197320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:41:54.366 [DEBUG] [Thread-197320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:41:54.366 [DEBUG] [Thread-197320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:41:54.366 [DEBUG] [Thread-197320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:41:54.366 [DEBUG] [Thread-197320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:41:54.366 [DEBUG] [Thread-197320] [transport.py] [_log()] client lang: <none>
2026-02-15T03:41:54.366 [DEBUG] [Thread-197320] [transport.py] [_log()] server lang: <none>
2026-02-15T03:41:54.366 [DEBUG] [Thread-197320] [transport.py] [_log()] kex follows: False
2026-02-15T03:41:54.366 [DEBUG] [Thread-197320] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:41:54.366 [DEBUG] [Thread-197320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:41:54.366 [DEBUG] [Thread-197320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:41:54.366 [DEBUG] [Thread-197320] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:41:54.367 [DEBUG] [Thread-197320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:41:54.367 [DEBUG] [Thread-197320] [transport.py] [_log()] Compression: none
2026-02-15T03:41:54.367 [DEBUG] [Thread-197320] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:41:54.385 [DEBUG] [Thread-197320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:41:54.385 [DEBUG] [Thread-197320] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:41:54.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:41:54.387 [DEBUG] [Thread-197320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:41:54.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:41:54.388 [DEBUG] [Thread-197320] [transport.py] [_log()] userauth is OK
2026-02-15T03:41:54.389 [DEBUG] [Thread-197320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:41:54.389 [DEBUG] [Thread-197320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:41:54.389 [DEBUG] [Thread-197320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:41:54.389 [DEBUG] [Thread-197320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:41:54.413 [INFO] [Thread-197320] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:41:54.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:41:55.048 [DEBUG] [Thread-197320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:41:55.048 [DEBUG] [Thread-197320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:41:55.048 [DEBUG] [Thread-197320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:41:55.088 [DEBUG] [Thread-197320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:41:55.088 [DEBUG] [Thread-197320] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:41:55.091 [DEBUG] [Thread-197320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:41:55.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:41:55.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:41:55.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:41:55.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:41:55.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:41:55.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:41:55.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:41:55.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:41:55.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:41:55.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.070244 -999.00   +5.80  23.84     94   +4.90 1 3 1 3 1     0    0 0.36 -23.04 ----- 23.8 23.8 158.3 36.5 7.0 -6.2 6.7 -5.5 6.5 -4.6 7.0 -4.3
2026-02-15T03:41:55.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:41:55.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:41:55.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.070244
2026-02-15T03:41:55.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:41:55.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:41:55.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:41:55.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:41:55.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:41:55.117 [DEBUG] [Thread-197320] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:41:55.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:41:12', tmtdew=0.61, humidity=95.77, cloud=0.0, wind=36.29, temperature=5.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:41:09.082', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:41:55.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-15T03:41:55.224 [DEBUG] [Thread-197323] [transport.py] [_log()] starting thread (client mode): 0xa57d67d0
2026-02-15T03:41:55.225 [DEBUG] [Thread-197323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:41:55.239 [DEBUG] [Thread-197323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:41:55.239 [INFO] [Thread-197323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:41:55.247 [DEBUG] [Thread-197323] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:41:55.247 [DEBUG] [Thread-197323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:41:55.247 [DEBUG] [Thread-197323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:41:55.247 [DEBUG] [Thread-197323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:41:55.247 [DEBUG] [Thread-197323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:41:55.247 [DEBUG] [Thread-197323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:41:55.247 [DEBUG] [Thread-197323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:41:55.247 [DEBUG] [Thread-197323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:41:55.247 [DEBUG] [Thread-197323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:41:55.247 [DEBUG] [Thread-197323] [transport.py] [_log()] client lang: <none>
2026-02-15T03:41:55.247 [DEBUG] [Thread-197323] [transport.py] [_log()] server lang: <none>
2026-02-15T03:41:55.247 [DEBUG] [Thread-197323] [transport.py] [_log()] kex follows: False
2026-02-15T03:41:55.247 [DEBUG] [Thread-197323] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:41:55.247 [DEBUG] [Thread-197323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:41:55.247 [DEBUG] [Thread-197323] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:41:55.247 [DEBUG] [Thread-197323] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:41:55.247 [DEBUG] [Thread-197323] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:41:55.248 [DEBUG] [Thread-197323] [transport.py] [_log()] Compression: none
2026-02-15T03:41:55.248 [DEBUG] [Thread-197323] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:41:55.304 [DEBUG] [Thread-197323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:41:55.305 [DEBUG] [Thread-197323] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:41:55.305 [DEBUG] [Thread-197323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:41:55.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:41:55.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:41:55.360 [DEBUG] [Thread-197323] [transport.py] [_log()] userauth is OK
2026-02-15T03:41:55.360 [DEBUG] [Thread-197323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:41:55.360 [DEBUG] [Thread-197323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:41:55.360 [DEBUG] [Thread-197323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:41:55.360 [DEBUG] [Thread-197323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:41:55.380 [INFO] [Thread-197323] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:41:55.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-15T03:41:55.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:41:56.199 [DEBUG] [Thread-197323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:41:56.200 [DEBUG] [Thread-197323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:41:56.247 [DEBUG] [Thread-197323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:41:56.248 [DEBUG] [Thread-197323] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:41:56.257 [DEBUG] [Thread-197323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:41:56.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:41:56.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:41:56.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-15T03:41:56.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:41:56.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:41:56.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:41:56.293 [DEBUG] [Thread-197323] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:41:59.390 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:41:59.391 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:42:05.229 [DEBUG] [Thread-197325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:42:20.283 [DEBUG] [Thread-197326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:42:21.589 [DEBUG] [Thread-197327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:42:26.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:42:26.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:42:26.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T03:42:28.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 41, 48), 0.6, 95.81, 0.0, 37.19, 5.86, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:42:28.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:41:48
2026-02-15T03:42:29.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:42:29.342 [DEBUG] [Thread-197328] [transport.py] [_log()] starting thread (client mode): 0xa2d84f10
2026-02-15T03:42:29.342 [DEBUG] [Thread-197328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:42:29.366 [DEBUG] [Thread-197328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:42:29.366 [INFO] [Thread-197328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:42:29.368 [DEBUG] [Thread-197328] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:42:29.368 [DEBUG] [Thread-197328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:42:29.368 [DEBUG] [Thread-197328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:42:29.368 [DEBUG] [Thread-197328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:42:29.368 [DEBUG] [Thread-197328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:42:29.368 [DEBUG] [Thread-197328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:42:29.368 [DEBUG] [Thread-197328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:42:29.368 [DEBUG] [Thread-197328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:42:29.368 [DEBUG] [Thread-197328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:42:29.368 [DEBUG] [Thread-197328] [transport.py] [_log()] client lang: <none>
2026-02-15T03:42:29.368 [DEBUG] [Thread-197328] [transport.py] [_log()] server lang: <none>
2026-02-15T03:42:29.368 [DEBUG] [Thread-197328] [transport.py] [_log()] kex follows: False
2026-02-15T03:42:29.368 [DEBUG] [Thread-197328] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:42:29.368 [DEBUG] [Thread-197328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:42:29.368 [DEBUG] [Thread-197328] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:42:29.368 [DEBUG] [Thread-197328] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:42:29.368 [DEBUG] [Thread-197328] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:42:29.368 [DEBUG] [Thread-197328] [transport.py] [_log()] Compression: none
2026-02-15T03:42:29.368 [DEBUG] [Thread-197328] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:42:29.391 [DEBUG] [Thread-197328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:42:29.391 [DEBUG] [Thread-197328] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:42:29.392 [DEBUG] [Thread-197328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:42:29.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:42:29.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:42:29.394 [DEBUG] [Thread-197328] [transport.py] [_log()] userauth is OK
2026-02-15T03:42:29.394 [DEBUG] [Thread-197328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:42:29.394 [DEBUG] [Thread-197328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:42:29.394 [DEBUG] [Thread-197328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:42:29.394 [DEBUG] [Thread-197328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:42:29.420 [INFO] [Thread-197328] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:42:29.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:42:30.043 [DEBUG] [Thread-197328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:42:30.044 [DEBUG] [Thread-197328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:42:30.044 [DEBUG] [Thread-197328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:42:30.084 [DEBUG] [Thread-197328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:42:30.084 [DEBUG] [Thread-197328] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:42:30.088 [DEBUG] [Thread-197328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:42:30.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:42:30.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:42:30.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:42:30.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:42:30.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:42:30.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:42:30.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:42:30.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:42:30.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:42:30.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.070939 -999.00   +5.80  24.87     94   +5.00 1 3 1 3 1     0    0 0.28 -26.09 ----- 24.9 24.9 152.6 29.4 7.0 -5.4 6.8 -5.8 6.5 -5.0 7.0 -5.0
2026-02-15T03:42:30.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:42:30.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:42:30.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.070939
2026-02-15T03:42:30.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:42:30.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:42:30.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:42:30.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:42:30.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:42:30.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:41:48', tmtdew=0.6, humidity=95.81, cloud=0.0, wind=37.19, temperature=5.86, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:42:09.130', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:42:30.115 [DEBUG] [Thread-197328] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:42:30.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-15T03:42:30.210 [DEBUG] [Thread-197331] [transport.py] [_log()] starting thread (client mode): 0xa2d87af0
2026-02-15T03:42:30.210 [DEBUG] [Thread-197331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:42:30.228 [DEBUG] [Thread-197331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:42:30.228 [INFO] [Thread-197331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:42:30.236 [DEBUG] [Thread-197331] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:42:30.236 [DEBUG] [Thread-197331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:42:30.236 [DEBUG] [Thread-197331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:42:30.236 [DEBUG] [Thread-197331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:42:30.236 [DEBUG] [Thread-197331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:42:30.236 [DEBUG] [Thread-197331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:42:30.236 [DEBUG] [Thread-197331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:42:30.236 [DEBUG] [Thread-197331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:42:30.236 [DEBUG] [Thread-197331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:42:30.236 [DEBUG] [Thread-197331] [transport.py] [_log()] client lang: <none>
2026-02-15T03:42:30.236 [DEBUG] [Thread-197331] [transport.py] [_log()] server lang: <none>
2026-02-15T03:42:30.236 [DEBUG] [Thread-197331] [transport.py] [_log()] kex follows: False
2026-02-15T03:42:30.237 [DEBUG] [Thread-197331] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:42:30.237 [DEBUG] [Thread-197331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:42:30.237 [DEBUG] [Thread-197331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:42:30.237 [DEBUG] [Thread-197331] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:42:30.237 [DEBUG] [Thread-197331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:42:30.237 [DEBUG] [Thread-197331] [transport.py] [_log()] Compression: none
2026-02-15T03:42:30.237 [DEBUG] [Thread-197331] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:42:30.296 [DEBUG] [Thread-197331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:42:30.296 [DEBUG] [Thread-197331] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:42:30.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:42:30.297 [DEBUG] [Thread-197331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:42:30.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:42:30.351 [DEBUG] [Thread-197331] [transport.py] [_log()] userauth is OK
2026-02-15T03:42:30.352 [DEBUG] [Thread-197331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:42:30.352 [DEBUG] [Thread-197331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:42:30.352 [DEBUG] [Thread-197331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:42:30.352 [DEBUG] [Thread-197331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:42:30.371 [INFO] [Thread-197331] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:42:30.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:42:30.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:42:31.176 [DEBUG] [Thread-197331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:42:31.176 [DEBUG] [Thread-197331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:42:31.224 [DEBUG] [Thread-197331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:42:31.225 [DEBUG] [Thread-197331] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:42:31.234 [DEBUG] [Thread-197331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:42:31.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:42: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')
2026-02-15T03:42:31.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-15T03:42:31.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:42:31.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:42:31.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:42:31.271 [DEBUG] [Thread-197331] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:42:35.319 [DEBUG] [Thread-197333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:42:50.375 [DEBUG] [Thread-197334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:42:59.594 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:42:59.596 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:43:01.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:43:01.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:43:01.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-15T03:43:03.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 42, 25), 0.6, 95.82, 0.0, 35.61, 5.89, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:43:03.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:42:25
2026-02-15T03:43:03.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:43:04.023 [DEBUG] [Thread-197335] [transport.py] [_log()] starting thread (client mode): 0xa5773e50
2026-02-15T03:43:04.023 [DEBUG] [Thread-197335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:43:04.042 [DEBUG] [Thread-197335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:43:04.043 [INFO] [Thread-197335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:43:04.046 [DEBUG] [Thread-197335] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:43:04.046 [DEBUG] [Thread-197335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:43:04.046 [DEBUG] [Thread-197335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:43:04.046 [DEBUG] [Thread-197335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:43:04.046 [DEBUG] [Thread-197335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:43:04.046 [DEBUG] [Thread-197335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:43:04.046 [DEBUG] [Thread-197335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:43:04.046 [DEBUG] [Thread-197335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:43:04.046 [DEBUG] [Thread-197335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:43:04.046 [DEBUG] [Thread-197335] [transport.py] [_log()] client lang: <none>
2026-02-15T03:43:04.046 [DEBUG] [Thread-197335] [transport.py] [_log()] server lang: <none>
2026-02-15T03:43:04.046 [DEBUG] [Thread-197335] [transport.py] [_log()] kex follows: False
2026-02-15T03:43:04.046 [DEBUG] [Thread-197335] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:43:04.046 [DEBUG] [Thread-197335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:43:04.046 [DEBUG] [Thread-197335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:43:04.046 [DEBUG] [Thread-197335] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:43:04.046 [DEBUG] [Thread-197335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:43:04.046 [DEBUG] [Thread-197335] [transport.py] [_log()] Compression: none
2026-02-15T03:43:04.046 [DEBUG] [Thread-197335] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:43:04.056 [DEBUG] [Thread-197335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:43:04.056 [DEBUG] [Thread-197335] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:43:04.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:43:04.057 [DEBUG] [Thread-197335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:43:04.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:43:04.059 [DEBUG] [Thread-197335] [transport.py] [_log()] userauth is OK
2026-02-15T03:43:04.059 [DEBUG] [Thread-197335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:43:04.059 [DEBUG] [Thread-197335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:43:04.060 [DEBUG] [Thread-197335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:43:04.060 [DEBUG] [Thread-197335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:43:04.077 [INFO] [Thread-197335] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:43:04.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:43:04.698 [DEBUG] [Thread-197335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:43:04.698 [DEBUG] [Thread-197335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:43:04.698 [DEBUG] [Thread-197335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:43:04.739 [DEBUG] [Thread-197335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:43:04.740 [DEBUG] [Thread-197335] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:43:04.743 [DEBUG] [Thread-197335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:43:04.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:43:04.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:43:04.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:43:04.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:43:04.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:43:04.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:43:04.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:43:04.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:43:04.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:43:04.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.071286 -999.00   +5.80  28.18     94   +5.00 1 3 1 3 1     0    0 0.15 -29.16 ----- 28.2 28.2 155.6 38.2 7.0 -6.0 6.8 -5.4 6.6 -5.3 7.0 -5.3
2026-02-15T03:43:04.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:43:04.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:43:04.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.071286
2026-02-15T03:43:04.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:43:04.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:43:04.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:43:04.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:43:04.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:43:04.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:42:25', tmtdew=0.6, humidity=95.82, cloud=0.0, wind=35.61, temperature=5.89, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:42:39.110', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:43:04.770 [DEBUG] [Thread-197335] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:43:04.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:43:04.865 [DEBUG] [Thread-197338] [transport.py] [_log()] starting thread (client mode): 0xa57732b0
2026-02-15T03:43:04.865 [DEBUG] [Thread-197338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:43:04.882 [DEBUG] [Thread-197338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:43:04.882 [INFO] [Thread-197338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:43:04.890 [DEBUG] [Thread-197338] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:43:04.890 [DEBUG] [Thread-197338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:43:04.890 [DEBUG] [Thread-197338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:43:04.890 [DEBUG] [Thread-197338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:43:04.890 [DEBUG] [Thread-197338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:43:04.890 [DEBUG] [Thread-197338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:43:04.890 [DEBUG] [Thread-197338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:43:04.890 [DEBUG] [Thread-197338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:43:04.890 [DEBUG] [Thread-197338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:43:04.890 [DEBUG] [Thread-197338] [transport.py] [_log()] client lang: <none>
2026-02-15T03:43:04.890 [DEBUG] [Thread-197338] [transport.py] [_log()] server lang: <none>
2026-02-15T03:43:04.890 [DEBUG] [Thread-197338] [transport.py] [_log()] kex follows: False
2026-02-15T03:43:04.890 [DEBUG] [Thread-197338] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:43:04.890 [DEBUG] [Thread-197338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:43:04.890 [DEBUG] [Thread-197338] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:43:04.890 [DEBUG] [Thread-197338] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:43:04.891 [DEBUG] [Thread-197338] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:43:04.891 [DEBUG] [Thread-197338] [transport.py] [_log()] Compression: none
2026-02-15T03:43:04.891 [DEBUG] [Thread-197338] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:43:04.947 [DEBUG] [Thread-197338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:43:04.947 [DEBUG] [Thread-197338] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:43:04.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:43:04.949 [DEBUG] [Thread-197338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:43:04.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:43:05.008 [DEBUG] [Thread-197338] [transport.py] [_log()] userauth is OK
2026-02-15T03:43:05.008 [DEBUG] [Thread-197338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:43:05.008 [DEBUG] [Thread-197338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:43:05.008 [DEBUG] [Thread-197338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:43:05.008 [DEBUG] [Thread-197338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:43:05.027 [INFO] [Thread-197338] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:43:05.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-15T03:43:05.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:43:05.411 [DEBUG] [Thread-197340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:43:05.845 [DEBUG] [Thread-197338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:43:05.845 [DEBUG] [Thread-197338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:43:05.893 [DEBUG] [Thread-197338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:43:05.894 [DEBUG] [Thread-197338] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:43:05.903 [DEBUG] [Thread-197338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:43:05.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:43:05.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-15T03:43:05.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-15T03:43:05.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:43:05.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:43:05.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:43:05.940 [DEBUG] [Thread-197338] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:43:20.461 [DEBUG] [Thread-197341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:43:21.647 [DEBUG] [Thread-197342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:43:35.499 [DEBUG] [Thread-197343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:43:35.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:43:35.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:43:35.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-15T03:43:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 43, 1), 0.6, 95.84, 0.0, 36.63, 5.86, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:43:38.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:43:01
2026-02-15T03:43:38.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:43:38.658 [DEBUG] [Thread-197344] [transport.py] [_log()] starting thread (client mode): 0xa57d4fa0
2026-02-15T03:43:38.658 [DEBUG] [Thread-197344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:43:38.677 [DEBUG] [Thread-197344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:43:38.677 [INFO] [Thread-197344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:43:38.681 [DEBUG] [Thread-197344] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:43:38.681 [DEBUG] [Thread-197344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:43:38.681 [DEBUG] [Thread-197344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:43:38.681 [DEBUG] [Thread-197344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:43:38.681 [DEBUG] [Thread-197344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:43:38.681 [DEBUG] [Thread-197344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:43:38.681 [DEBUG] [Thread-197344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:43:38.681 [DEBUG] [Thread-197344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:43:38.681 [DEBUG] [Thread-197344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:43:38.681 [DEBUG] [Thread-197344] [transport.py] [_log()] client lang: <none>
2026-02-15T03:43:38.681 [DEBUG] [Thread-197344] [transport.py] [_log()] server lang: <none>
2026-02-15T03:43:38.681 [DEBUG] [Thread-197344] [transport.py] [_log()] kex follows: False
2026-02-15T03:43:38.681 [DEBUG] [Thread-197344] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:43:38.681 [DEBUG] [Thread-197344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:43:38.681 [DEBUG] [Thread-197344] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:43:38.681 [DEBUG] [Thread-197344] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:43:38.681 [DEBUG] [Thread-197344] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:43:38.681 [DEBUG] [Thread-197344] [transport.py] [_log()] Compression: none
2026-02-15T03:43:38.681 [DEBUG] [Thread-197344] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:43:38.699 [DEBUG] [Thread-197344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:43:38.699 [DEBUG] [Thread-197344] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:43:38.700 [DEBUG] [Thread-197344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:43:38.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:43:38.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:43:38.702 [DEBUG] [Thread-197344] [transport.py] [_log()] userauth is OK
2026-02-15T03:43:38.702 [DEBUG] [Thread-197344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:43:38.702 [DEBUG] [Thread-197344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:43:38.702 [DEBUG] [Thread-197344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:43:38.702 [DEBUG] [Thread-197344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:43:38.727 [INFO] [Thread-197344] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:43:38.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:43:39.374 [DEBUG] [Thread-197344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:43:39.374 [DEBUG] [Thread-197344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:43:39.374 [DEBUG] [Thread-197344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:43:39.415 [DEBUG] [Thread-197344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:43:39.415 [DEBUG] [Thread-197344] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:43:39.417 [DEBUG] [Thread-197344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:43:39.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:43:39.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:43:39.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:43:39.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:43:39.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:43:39.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:43:39.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:43:39.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:43:39.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:43:39.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.071633 -999.00   +5.70  24.91     94   +4.90 1 3 1 3 1     0    0 0.15 -29.06 ----- 24.9 24.9 155.6 34.3 7.0 -5.4 6.8 -4.4 6.5 -4.8 7.0 -5.3
2026-02-15T03:43:39.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:43:39.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:43:39.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.071633
2026-02-15T03:43:39.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:43:39.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:43:39.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:43:39.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:43:39.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:43:39.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:43:01', tmtdew=0.6, humidity=95.84, cloud=0.0, wind=36.63, temperature=5.86, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:43:09.091', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:43:39.436 [DEBUG] [Thread-197344] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:43:39.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-15T03:43:39.518 [DEBUG] [Thread-197347] [transport.py] [_log()] starting thread (client mode): 0xa57d4640
2026-02-15T03:43:39.518 [DEBUG] [Thread-197347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:43:39.536 [DEBUG] [Thread-197347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:43:39.536 [INFO] [Thread-197347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:43:39.544 [DEBUG] [Thread-197347] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:43:39.544 [DEBUG] [Thread-197347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:43:39.544 [DEBUG] [Thread-197347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:43:39.544 [DEBUG] [Thread-197347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:43:39.544 [DEBUG] [Thread-197347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:43:39.544 [DEBUG] [Thread-197347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:43:39.544 [DEBUG] [Thread-197347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:43:39.544 [DEBUG] [Thread-197347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:43:39.544 [DEBUG] [Thread-197347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:43:39.544 [DEBUG] [Thread-197347] [transport.py] [_log()] client lang: <none>
2026-02-15T03:43:39.544 [DEBUG] [Thread-197347] [transport.py] [_log()] server lang: <none>
2026-02-15T03:43:39.545 [DEBUG] [Thread-197347] [transport.py] [_log()] kex follows: False
2026-02-15T03:43:39.545 [DEBUG] [Thread-197347] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:43:39.545 [DEBUG] [Thread-197347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:43:39.545 [DEBUG] [Thread-197347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:43:39.545 [DEBUG] [Thread-197347] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:43:39.545 [DEBUG] [Thread-197347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:43:39.545 [DEBUG] [Thread-197347] [transport.py] [_log()] Compression: none
2026-02-15T03:43:39.545 [DEBUG] [Thread-197347] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:43:39.603 [DEBUG] [Thread-197347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:43:39.603 [DEBUG] [Thread-197347] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:43:39.604 [DEBUG] [Thread-197347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:43:39.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:43:39.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:43:39.659 [DEBUG] [Thread-197347] [transport.py] [_log()] userauth is OK
2026-02-15T03:43:39.659 [DEBUG] [Thread-197347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:43:39.659 [DEBUG] [Thread-197347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:43:39.659 [DEBUG] [Thread-197347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:43:39.659 [DEBUG] [Thread-197347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:43:39.678 [INFO] [Thread-197347] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:43:39.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-15T03:43:39.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:43:40.475 [DEBUG] [Thread-197347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:43:40.475 [DEBUG] [Thread-197347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:43:40.523 [DEBUG] [Thread-197347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:43:40.524 [DEBUG] [Thread-197347] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:43:40.533 [DEBUG] [Thread-197347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:43:40.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:43:40.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-15T03:43:40.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:43:40.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:43:40.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:43:40.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:43:40.570 [DEBUG] [Thread-197347] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:43:50.537 [DEBUG] [Thread-197349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:43:59.797 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:43:59.799 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:44:05.591 [DEBUG] [Thread-197350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:44:10.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:44:10.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:44:10.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-15T03:44:12.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 43, 37), 1.07, 92.81, 0.0, 37.68, 6.31, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:44:12.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:43:37
2026-02-15T03:44:12.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:44:12.956 [DEBUG] [Thread-197351] [transport.py] [_log()] starting thread (client mode): 0xa5773eb0
2026-02-15T03:44:12.957 [DEBUG] [Thread-197351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:44:12.977 [DEBUG] [Thread-197351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:44:12.977 [INFO] [Thread-197351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:44:12.981 [DEBUG] [Thread-197351] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:44:12.981 [DEBUG] [Thread-197351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:44:12.981 [DEBUG] [Thread-197351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:44:12.981 [DEBUG] [Thread-197351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:44:12.981 [DEBUG] [Thread-197351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:44:12.981 [DEBUG] [Thread-197351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:44:12.981 [DEBUG] [Thread-197351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:44:12.981 [DEBUG] [Thread-197351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:44:12.981 [DEBUG] [Thread-197351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:44:12.981 [DEBUG] [Thread-197351] [transport.py] [_log()] client lang: <none>
2026-02-15T03:44:12.981 [DEBUG] [Thread-197351] [transport.py] [_log()] server lang: <none>
2026-02-15T03:44:12.981 [DEBUG] [Thread-197351] [transport.py] [_log()] kex follows: False
2026-02-15T03:44:12.981 [DEBUG] [Thread-197351] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:44:12.982 [DEBUG] [Thread-197351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:44:12.982 [DEBUG] [Thread-197351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:44:12.982 [DEBUG] [Thread-197351] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:44:12.982 [DEBUG] [Thread-197351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:44:12.982 [DEBUG] [Thread-197351] [transport.py] [_log()] Compression: none
2026-02-15T03:44:12.982 [DEBUG] [Thread-197351] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:44:12.998 [DEBUG] [Thread-197351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:44:12.998 [DEBUG] [Thread-197351] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:44:12.999 [DEBUG] [Thread-197351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:44:12.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:44:12.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:44:13.000 [DEBUG] [Thread-197351] [transport.py] [_log()] userauth is OK
2026-02-15T03:44:13.000 [DEBUG] [Thread-197351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:44:13.000 [DEBUG] [Thread-197351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:44:13.000 [DEBUG] [Thread-197351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:44:13.000 [DEBUG] [Thread-197351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:44:13.010 [INFO] [Thread-197351] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:44:13.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:44:13.619 [DEBUG] [Thread-197351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:44:13.620 [DEBUG] [Thread-197351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:44:13.620 [DEBUG] [Thread-197351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:44:13.660 [DEBUG] [Thread-197351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:44:13.661 [DEBUG] [Thread-197351] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:44:13.664 [DEBUG] [Thread-197351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:44:13.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:44:13.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:44:13.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:44:13.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:44:13.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:44:13.687 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:44:13.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:44:13.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:44:13.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:44:13.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.071980 -999.00   +5.70  21.00     94   +4.90 1 3 1 3 1     0    0 0.16 -28.88 ----- 21.0 21.0 159.4 32.3 7.0 -6.9 6.8 -6.9 6.6 -6.1 7.0 -6.4
2026-02-15T03:44:13.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:44:13.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:44:13.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.071980
2026-02-15T03:44:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:44:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:44:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:44:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:44:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:44:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:43:37', tmtdew=1.07, humidity=92.81, cloud=0.0, wind=37.68, temperature=6.31, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:43:39.072', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:44:13.690 [DEBUG] [Thread-197351] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:44:13.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:44:13.788 [DEBUG] [Thread-197354] [transport.py] [_log()] starting thread (client mode): 0xa57715a0
2026-02-15T03:44:13.788 [DEBUG] [Thread-197354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:44:13.803 [DEBUG] [Thread-197354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:44:13.803 [INFO] [Thread-197354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:44:13.811 [DEBUG] [Thread-197354] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:44:13.811 [DEBUG] [Thread-197354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:44:13.811 [DEBUG] [Thread-197354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:44:13.811 [DEBUG] [Thread-197354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:44:13.812 [DEBUG] [Thread-197354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:44:13.812 [DEBUG] [Thread-197354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:44:13.812 [DEBUG] [Thread-197354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:44:13.812 [DEBUG] [Thread-197354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:44:13.812 [DEBUG] [Thread-197354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:44:13.812 [DEBUG] [Thread-197354] [transport.py] [_log()] client lang: <none>
2026-02-15T03:44:13.812 [DEBUG] [Thread-197354] [transport.py] [_log()] server lang: <none>
2026-02-15T03:44:13.812 [DEBUG] [Thread-197354] [transport.py] [_log()] kex follows: False
2026-02-15T03:44:13.812 [DEBUG] [Thread-197354] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:44:13.812 [DEBUG] [Thread-197354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:44:13.812 [DEBUG] [Thread-197354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:44:13.812 [DEBUG] [Thread-197354] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:44:13.812 [DEBUG] [Thread-197354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:44:13.812 [DEBUG] [Thread-197354] [transport.py] [_log()] Compression: none
2026-02-15T03:44:13.812 [DEBUG] [Thread-197354] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:44:13.877 [DEBUG] [Thread-197354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:44:13.878 [DEBUG] [Thread-197354] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:44:13.878 [DEBUG] [Thread-197354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:44:13.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:44:13.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:44:13.935 [DEBUG] [Thread-197354] [transport.py] [_log()] userauth is OK
2026-02-15T03:44:13.935 [DEBUG] [Thread-197354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:44:13.935 [DEBUG] [Thread-197354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:44:13.935 [DEBUG] [Thread-197354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:44:13.936 [DEBUG] [Thread-197354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:44:13.955 [INFO] [Thread-197354] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:44:13.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:44:13.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:44:14.768 [DEBUG] [Thread-197354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:44:14.768 [DEBUG] [Thread-197354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:44:14.817 [DEBUG] [Thread-197354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:44:14.817 [DEBUG] [Thread-197354] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:44:14.826 [DEBUG] [Thread-197354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:44:14.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:44:14.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:44:14.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:44:14.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:44:14.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:44:14.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:44:14.863 [DEBUG] [Thread-197354] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:44:20.631 [DEBUG] [Thread-197356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:44:21.716 [DEBUG] [Thread-197357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:44:35.693 [DEBUG] [Thread-197358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:44:44.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:44:44.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:44:44.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-15T03:44:46.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 44, 12), 0.58, 95.92, 0.0, 37.0, 5.87, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:44:46.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:44:12
2026-02-15T03:44:47.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:44:47.392 [DEBUG] [Thread-197359] [transport.py] [_log()] starting thread (client mode): 0xa5771ab0
2026-02-15T03:44:47.392 [DEBUG] [Thread-197359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:44:47.411 [DEBUG] [Thread-197359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:44:47.412 [INFO] [Thread-197359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:44:47.415 [DEBUG] [Thread-197359] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:44:47.415 [DEBUG] [Thread-197359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:44:47.415 [DEBUG] [Thread-197359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:44:47.415 [DEBUG] [Thread-197359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:44:47.415 [DEBUG] [Thread-197359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:44:47.415 [DEBUG] [Thread-197359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:44:47.416 [DEBUG] [Thread-197359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:44:47.416 [DEBUG] [Thread-197359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:44:47.416 [DEBUG] [Thread-197359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:44:47.416 [DEBUG] [Thread-197359] [transport.py] [_log()] client lang: <none>
2026-02-15T03:44:47.416 [DEBUG] [Thread-197359] [transport.py] [_log()] server lang: <none>
2026-02-15T03:44:47.416 [DEBUG] [Thread-197359] [transport.py] [_log()] kex follows: False
2026-02-15T03:44:47.416 [DEBUG] [Thread-197359] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:44:47.416 [DEBUG] [Thread-197359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:44:47.416 [DEBUG] [Thread-197359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:44:47.416 [DEBUG] [Thread-197359] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:44:47.416 [DEBUG] [Thread-197359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:44:47.416 [DEBUG] [Thread-197359] [transport.py] [_log()] Compression: none
2026-02-15T03:44:47.416 [DEBUG] [Thread-197359] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:44:47.434 [DEBUG] [Thread-197359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:44:47.435 [DEBUG] [Thread-197359] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:44:47.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:44:47.437 [DEBUG] [Thread-197359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:44:47.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:44:47.440 [DEBUG] [Thread-197359] [transport.py] [_log()] userauth is OK
2026-02-15T03:44:47.440 [DEBUG] [Thread-197359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:44:47.441 [DEBUG] [Thread-197359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:44:47.441 [DEBUG] [Thread-197359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:44:47.441 [DEBUG] [Thread-197359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:44:47.465 [INFO] [Thread-197359] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:44:47.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:44:48.113 [DEBUG] [Thread-197359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:44:48.113 [DEBUG] [Thread-197359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:44:48.113 [DEBUG] [Thread-197359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:44:48.154 [DEBUG] [Thread-197359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:44:48.154 [DEBUG] [Thread-197359] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:44:48.157 [DEBUG] [Thread-197359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:44:48.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:44:48.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:44:48.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:44:48.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:44:48.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:44:48.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:44:48.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:44:48.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:44:48.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:44:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.072328 -999.00   +5.70  21.82     94   +4.90 1 3 1 3 1     0    0 0.11 -29.99 ----- 21.8 21.8 152.6 38.6 7.0 -5.8 6.8 -6.0 6.6 -6.4 7.0 -6.7
2026-02-15T03:44:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:44:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:44:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.072328
2026-02-15T03:44:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:44:48.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:44:48.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:44:48.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:44:48.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:44:48.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:44:12', tmtdew=0.58, humidity=95.92, cloud=0.0, wind=37.0, temperature=5.87, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:44:09.139', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:44:48.182 [DEBUG] [Thread-197359] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:44:48.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:44:48.290 [DEBUG] [Thread-197362] [transport.py] [_log()] starting thread (client mode): 0xa5771990
2026-02-15T03:44:48.290 [DEBUG] [Thread-197362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:44:48.305 [DEBUG] [Thread-197362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:44:48.305 [INFO] [Thread-197362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:44:48.313 [DEBUG] [Thread-197362] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:44:48.313 [DEBUG] [Thread-197362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:44:48.313 [DEBUG] [Thread-197362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:44:48.313 [DEBUG] [Thread-197362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:44:48.313 [DEBUG] [Thread-197362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:44:48.313 [DEBUG] [Thread-197362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:44:48.313 [DEBUG] [Thread-197362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:44:48.313 [DEBUG] [Thread-197362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:44:48.313 [DEBUG] [Thread-197362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:44:48.313 [DEBUG] [Thread-197362] [transport.py] [_log()] client lang: <none>
2026-02-15T03:44:48.313 [DEBUG] [Thread-197362] [transport.py] [_log()] server lang: <none>
2026-02-15T03:44:48.313 [DEBUG] [Thread-197362] [transport.py] [_log()] kex follows: False
2026-02-15T03:44:48.313 [DEBUG] [Thread-197362] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:44:48.313 [DEBUG] [Thread-197362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:44:48.313 [DEBUG] [Thread-197362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:44:48.314 [DEBUG] [Thread-197362] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:44:48.314 [DEBUG] [Thread-197362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:44:48.314 [DEBUG] [Thread-197362] [transport.py] [_log()] Compression: none
2026-02-15T03:44:48.314 [DEBUG] [Thread-197362] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:44:48.370 [DEBUG] [Thread-197362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:44:48.370 [DEBUG] [Thread-197362] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:44:48.371 [DEBUG] [Thread-197362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:44:48.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:44:48.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:44:48.426 [DEBUG] [Thread-197362] [transport.py] [_log()] userauth is OK
2026-02-15T03:44:48.426 [DEBUG] [Thread-197362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:44:48.427 [DEBUG] [Thread-197362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:44:48.427 [DEBUG] [Thread-197362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:44:48.427 [DEBUG] [Thread-197362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:44:48.445 [INFO] [Thread-197362] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:44:48.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:44:48.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:44:49.246 [DEBUG] [Thread-197362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:44:49.246 [DEBUG] [Thread-197362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:44:49.294 [DEBUG] [Thread-197362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:44:49.295 [DEBUG] [Thread-197362] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:44:49.304 [DEBUG] [Thread-197362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:44:49.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:44:49.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-15T03:44:49.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-15T03:44:49.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:44:49.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:44:49.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:44:49.340 [DEBUG] [Thread-197362] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:44:50.731 [DEBUG] [Thread-197364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:45:00.004 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:45:00.005 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:45:05.773 [DEBUG] [Thread-197365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:45:19.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:45:19.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:45:19.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-15T03:45:20.805 [DEBUG] [Thread-197366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:45:21.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 44, 47), 0.58, 95.94, 0.0, 34.99, 5.84, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:45:21.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:44:47
2026-02-15T03:45:21.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:45:21.767 [DEBUG] [Thread-197367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:45:21.828 [DEBUG] [Thread-197368] [transport.py] [_log()] starting thread (client mode): 0xa2d87af0
2026-02-15T03:45:21.828 [DEBUG] [Thread-197368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:45:21.848 [DEBUG] [Thread-197368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:45:21.848 [INFO] [Thread-197368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:45:21.851 [DEBUG] [Thread-197368] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:45:21.852 [DEBUG] [Thread-197368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:45:21.852 [DEBUG] [Thread-197368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:45:21.852 [DEBUG] [Thread-197368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:45:21.852 [DEBUG] [Thread-197368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:45:21.852 [DEBUG] [Thread-197368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:45:21.852 [DEBUG] [Thread-197368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:45:21.852 [DEBUG] [Thread-197368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:45:21.852 [DEBUG] [Thread-197368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:45:21.852 [DEBUG] [Thread-197368] [transport.py] [_log()] client lang: <none>
2026-02-15T03:45:21.852 [DEBUG] [Thread-197368] [transport.py] [_log()] server lang: <none>
2026-02-15T03:45:21.852 [DEBUG] [Thread-197368] [transport.py] [_log()] kex follows: False
2026-02-15T03:45:21.852 [DEBUG] [Thread-197368] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:45:21.852 [DEBUG] [Thread-197368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:45:21.852 [DEBUG] [Thread-197368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:45:21.852 [DEBUG] [Thread-197368] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:45:21.852 [DEBUG] [Thread-197368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:45:21.852 [DEBUG] [Thread-197368] [transport.py] [_log()] Compression: none
2026-02-15T03:45:21.852 [DEBUG] [Thread-197368] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:45:21.877 [DEBUG] [Thread-197368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:45:21.877 [DEBUG] [Thread-197368] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:45:21.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:45:21.878 [DEBUG] [Thread-197368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:45:21.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:45:21.881 [DEBUG] [Thread-197368] [transport.py] [_log()] userauth is OK
2026-02-15T03:45:21.881 [DEBUG] [Thread-197368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:45:21.881 [DEBUG] [Thread-197368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:45:21.881 [DEBUG] [Thread-197368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:45:21.881 [DEBUG] [Thread-197368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:45:21.905 [INFO] [Thread-197368] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:45:21.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:45:22.533 [DEBUG] [Thread-197368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:45:22.534 [DEBUG] [Thread-197368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:45:22.534 [DEBUG] [Thread-197368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:45:22.575 [DEBUG] [Thread-197368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:45:22.575 [DEBUG] [Thread-197368] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:45:22.578 [DEBUG] [Thread-197368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:45:22.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:45:22.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:45:22.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:45:22.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:45:22.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:45:22.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:45:22.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:45:22.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:45:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:45:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.072675 -999.00   +5.70  23.64     94   +4.90 1 3 1 3 1     0    0 0.08 -30.58 ----- 23.6 23.6 156.0 35.0 7.0 -6.5 6.8 -5.7 6.6 -5.1 7.0 -5.4
2026-02-15T03:45:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:45:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:45:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.072675
2026-02-15T03:45:22.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:45:22.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:45:22.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:45:22.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:45:22.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:45:22.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:44:47', tmtdew=0.58, humidity=95.94, cloud=0.0, wind=34.99, temperature=5.84, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:44:39.120', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:45:22.609 [DEBUG] [Thread-197368] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:45:22.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-15T03:45:22.705 [DEBUG] [Thread-197371] [transport.py] [_log()] starting thread (client mode): 0xa2d84280
2026-02-15T03:45:22.705 [DEBUG] [Thread-197371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:45:22.719 [DEBUG] [Thread-197371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:45:22.719 [INFO] [Thread-197371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:45:22.727 [DEBUG] [Thread-197371] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:45:22.727 [DEBUG] [Thread-197371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:45:22.727 [DEBUG] [Thread-197371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:45:22.727 [DEBUG] [Thread-197371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:45:22.727 [DEBUG] [Thread-197371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:45:22.727 [DEBUG] [Thread-197371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:45:22.727 [DEBUG] [Thread-197371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:45:22.728 [DEBUG] [Thread-197371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:45:22.728 [DEBUG] [Thread-197371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:45:22.728 [DEBUG] [Thread-197371] [transport.py] [_log()] client lang: <none>
2026-02-15T03:45:22.728 [DEBUG] [Thread-197371] [transport.py] [_log()] server lang: <none>
2026-02-15T03:45:22.728 [DEBUG] [Thread-197371] [transport.py] [_log()] kex follows: False
2026-02-15T03:45:22.728 [DEBUG] [Thread-197371] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:45:22.728 [DEBUG] [Thread-197371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:45:22.728 [DEBUG] [Thread-197371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:45:22.729 [DEBUG] [Thread-197371] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:45:22.729 [DEBUG] [Thread-197371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:45:22.729 [DEBUG] [Thread-197371] [transport.py] [_log()] Compression: none
2026-02-15T03:45:22.729 [DEBUG] [Thread-197371] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:45:22.786 [DEBUG] [Thread-197371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:45:22.786 [DEBUG] [Thread-197371] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:45:22.787 [DEBUG] [Thread-197371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:45:22.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:45:22.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:45:22.842 [DEBUG] [Thread-197371] [transport.py] [_log()] userauth is OK
2026-02-15T03:45:22.842 [DEBUG] [Thread-197371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:45:22.842 [DEBUG] [Thread-197371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:45:22.843 [DEBUG] [Thread-197371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:45:22.843 [DEBUG] [Thread-197371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:45:22.861 [INFO] [Thread-197371] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:45:22.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:45:22.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:45:23.673 [DEBUG] [Thread-197371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:45:23.674 [DEBUG] [Thread-197371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:45:23.721 [DEBUG] [Thread-197371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:45:23.721 [DEBUG] [Thread-197371] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:45:23.730 [DEBUG] [Thread-197371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:45:23.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:45:23.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-15T03:45:23.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-15T03:45:23.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:45:23.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:45:23.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:45:23.765 [DEBUG] [Thread-197371] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:45:35.843 [DEBUG] [Thread-197373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:45:50.903 [DEBUG] [Thread-197374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:45:53.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:45:53.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:45:53.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-15T03:45:55.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 45, 22), 0.58, 95.94, 0.0, 37.81, 5.86, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:45:55.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:45:22
2026-02-15T03:45:56.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:45:56.484 [DEBUG] [Thread-197375] [transport.py] [_log()] starting thread (client mode): 0xa57d76a0
2026-02-15T03:45:56.484 [DEBUG] [Thread-197375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:45:56.503 [DEBUG] [Thread-197375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:45:56.504 [INFO] [Thread-197375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:45:56.507 [DEBUG] [Thread-197375] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:45:56.507 [DEBUG] [Thread-197375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:45:56.507 [DEBUG] [Thread-197375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:45:56.507 [DEBUG] [Thread-197375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:45:56.507 [DEBUG] [Thread-197375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:45:56.507 [DEBUG] [Thread-197375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:45:56.507 [DEBUG] [Thread-197375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:45:56.507 [DEBUG] [Thread-197375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:45:56.507 [DEBUG] [Thread-197375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:45:56.507 [DEBUG] [Thread-197375] [transport.py] [_log()] client lang: <none>
2026-02-15T03:45:56.507 [DEBUG] [Thread-197375] [transport.py] [_log()] server lang: <none>
2026-02-15T03:45:56.507 [DEBUG] [Thread-197375] [transport.py] [_log()] kex follows: False
2026-02-15T03:45:56.507 [DEBUG] [Thread-197375] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:45:56.507 [DEBUG] [Thread-197375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:45:56.507 [DEBUG] [Thread-197375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:45:56.507 [DEBUG] [Thread-197375] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:45:56.507 [DEBUG] [Thread-197375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:45:56.507 [DEBUG] [Thread-197375] [transport.py] [_log()] Compression: none
2026-02-15T03:45:56.507 [DEBUG] [Thread-197375] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:45:56.526 [DEBUG] [Thread-197375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:45:56.527 [DEBUG] [Thread-197375] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:45:56.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:45:56.528 [DEBUG] [Thread-197375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:45:56.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:45:56.531 [DEBUG] [Thread-197375] [transport.py] [_log()] userauth is OK
2026-02-15T03:45:56.531 [DEBUG] [Thread-197375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:45:56.531 [DEBUG] [Thread-197375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:45:56.531 [DEBUG] [Thread-197375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:45:56.532 [DEBUG] [Thread-197375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:45:56.555 [INFO] [Thread-197375] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:45:56.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:45:57.210 [DEBUG] [Thread-197375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:45:57.210 [DEBUG] [Thread-197375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:45:57.210 [DEBUG] [Thread-197375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:45:57.251 [DEBUG] [Thread-197375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:45:57.252 [DEBUG] [Thread-197375] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:45:57.255 [DEBUG] [Thread-197375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:45:57.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:45:57.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:45:57.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:45:57.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:45:57.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:45:57.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:45:57.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:45:57.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:45:57.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:45:57.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.073369 -999.00   +5.70  25.83     94   +4.90 1 3 1 3 1     0    0 0.00 -33.00 ----- 25.8 25.8 162.4 31.6 7.0 -8.5 6.8 -7.1 6.7 -6.9 7.0 -7.0
2026-02-15T03:45:57.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:45:57.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:45:57.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.073369
2026-02-15T03:45:57.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:45:57.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:45:57.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:45:57.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:45:57.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:45:57.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:45:22', tmtdew=0.58, humidity=95.94, cloud=0.0, wind=37.81, temperature=5.86, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:45:39.082', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:45:57.283 [DEBUG] [Thread-197375] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:45:57.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:45:57.379 [DEBUG] [Thread-197378] [transport.py] [_log()] starting thread (client mode): 0xa57d6e30
2026-02-15T03:45:57.379 [DEBUG] [Thread-197378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:45:57.393 [DEBUG] [Thread-197378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:45:57.393 [INFO] [Thread-197378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:45:57.400 [DEBUG] [Thread-197378] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:45:57.401 [DEBUG] [Thread-197378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:45:57.401 [DEBUG] [Thread-197378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:45:57.401 [DEBUG] [Thread-197378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:45:57.401 [DEBUG] [Thread-197378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:45:57.401 [DEBUG] [Thread-197378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:45:57.401 [DEBUG] [Thread-197378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:45:57.401 [DEBUG] [Thread-197378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:45:57.401 [DEBUG] [Thread-197378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:45:57.401 [DEBUG] [Thread-197378] [transport.py] [_log()] client lang: <none>
2026-02-15T03:45:57.401 [DEBUG] [Thread-197378] [transport.py] [_log()] server lang: <none>
2026-02-15T03:45:57.401 [DEBUG] [Thread-197378] [transport.py] [_log()] kex follows: False
2026-02-15T03:45:57.401 [DEBUG] [Thread-197378] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:45:57.401 [DEBUG] [Thread-197378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:45:57.402 [DEBUG] [Thread-197378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:45:57.402 [DEBUG] [Thread-197378] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:45:57.402 [DEBUG] [Thread-197378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:45:57.402 [DEBUG] [Thread-197378] [transport.py] [_log()] Compression: none
2026-02-15T03:45:57.402 [DEBUG] [Thread-197378] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:45:57.457 [DEBUG] [Thread-197378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:45:57.458 [DEBUG] [Thread-197378] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:45:57.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:45:57.459 [DEBUG] [Thread-197378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:45:57.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:45:57.513 [DEBUG] [Thread-197378] [transport.py] [_log()] userauth is OK
2026-02-15T03:45:57.514 [DEBUG] [Thread-197378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:45:57.514 [DEBUG] [Thread-197378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:45:57.514 [DEBUG] [Thread-197378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:45:57.514 [DEBUG] [Thread-197378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:45:57.532 [INFO] [Thread-197378] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:45:57.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:45:57.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:45:58.329 [DEBUG] [Thread-197378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:45:58.329 [DEBUG] [Thread-197378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:45:58.377 [DEBUG] [Thread-197378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:45:58.378 [DEBUG] [Thread-197378] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:45:58.387 [DEBUG] [Thread-197378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:45:58.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:45:58.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:45:58.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-15T03:45:58.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:45:58.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:45:58.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:45:58.421 [DEBUG] [Thread-197378] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:46:00.210 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:46:00.211 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:46:05.941 [DEBUG] [Thread-197380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:46:21.002 [DEBUG] [Thread-197381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:46:21.823 [DEBUG] [Thread-197382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:46:28.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:46:28.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:46:28.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-15T03:46:30.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 45, 58), 0.58, 95.96, 0.0, 32.18, 5.81, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:46:30.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:45:58
2026-02-15T03:46:30.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:46:30.815 [DEBUG] [Thread-197383] [transport.py] [_log()] starting thread (client mode): 0xa2d3f2e0
2026-02-15T03:46:30.815 [DEBUG] [Thread-197383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:46:30.834 [DEBUG] [Thread-197383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:46:30.835 [INFO] [Thread-197383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:46:30.838 [DEBUG] [Thread-197383] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:46:30.838 [DEBUG] [Thread-197383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:46:30.839 [DEBUG] [Thread-197383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:46:30.839 [DEBUG] [Thread-197383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:46:30.839 [DEBUG] [Thread-197383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:46:30.839 [DEBUG] [Thread-197383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:46:30.839 [DEBUG] [Thread-197383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:46:30.839 [DEBUG] [Thread-197383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:46:30.839 [DEBUG] [Thread-197383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:46:30.839 [DEBUG] [Thread-197383] [transport.py] [_log()] client lang: <none>
2026-02-15T03:46:30.839 [DEBUG] [Thread-197383] [transport.py] [_log()] server lang: <none>
2026-02-15T03:46:30.839 [DEBUG] [Thread-197383] [transport.py] [_log()] kex follows: False
2026-02-15T03:46:30.839 [DEBUG] [Thread-197383] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:46:30.839 [DEBUG] [Thread-197383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:46:30.839 [DEBUG] [Thread-197383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:46:30.839 [DEBUG] [Thread-197383] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:46:30.839 [DEBUG] [Thread-197383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:46:30.839 [DEBUG] [Thread-197383] [transport.py] [_log()] Compression: none
2026-02-15T03:46:30.839 [DEBUG] [Thread-197383] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:46:30.856 [DEBUG] [Thread-197383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:46:30.856 [DEBUG] [Thread-197383] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:46:30.857 [DEBUG] [Thread-197383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:46:30.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:46:30.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:46:30.858 [DEBUG] [Thread-197383] [transport.py] [_log()] userauth is OK
2026-02-15T03:46:30.859 [DEBUG] [Thread-197383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:46:30.859 [DEBUG] [Thread-197383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:46:30.859 [DEBUG] [Thread-197383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:46:30.859 [DEBUG] [Thread-197383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:46:30.875 [INFO] [Thread-197383] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:46:30.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:46:31.515 [DEBUG] [Thread-197383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:46:31.516 [DEBUG] [Thread-197383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:46:31.516 [DEBUG] [Thread-197383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:46:31.556 [DEBUG] [Thread-197383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:46:31.557 [DEBUG] [Thread-197383] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:46:31.560 [DEBUG] [Thread-197383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:46:31.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:46:31.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:46:31.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:46:31.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:46:31.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:46:31.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:46:31.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:46:31.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:46:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:46:31.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.073717 -999.00   +5.70  24.18     94   +4.90 1 3 1 3 1     0    0 -0.02 -33.93 ----- 24.2 24.2 151.9 30.1 7.0 -6.5 6.8 -5.5 6.6 -5.1 7.0 -5.3
2026-02-15T03:46:31.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:46:31.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:46:31.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.073717
2026-02-15T03:46:31.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:46:31.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:46:31.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:46:31.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:46:31.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:46:31.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:45:58', tmtdew=0.58, humidity=95.96, cloud=0.0, wind=32.18, temperature=5.81, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:46:09.149', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:46:31.589 [DEBUG] [Thread-197383] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:46:31.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-15T03:46:31.685 [DEBUG] [Thread-197386] [transport.py] [_log()] starting thread (client mode): 0xa5770970
2026-02-15T03:46:31.685 [DEBUG] [Thread-197386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:46:31.701 [DEBUG] [Thread-197386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:46:31.701 [INFO] [Thread-197386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:46:31.708 [DEBUG] [Thread-197386] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:46:31.709 [DEBUG] [Thread-197386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:46:31.709 [DEBUG] [Thread-197386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:46:31.709 [DEBUG] [Thread-197386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:46:31.709 [DEBUG] [Thread-197386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:46:31.709 [DEBUG] [Thread-197386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:46:31.709 [DEBUG] [Thread-197386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:46:31.709 [DEBUG] [Thread-197386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:46:31.709 [DEBUG] [Thread-197386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:46:31.709 [DEBUG] [Thread-197386] [transport.py] [_log()] client lang: <none>
2026-02-15T03:46:31.709 [DEBUG] [Thread-197386] [transport.py] [_log()] server lang: <none>
2026-02-15T03:46:31.709 [DEBUG] [Thread-197386] [transport.py] [_log()] kex follows: False
2026-02-15T03:46:31.709 [DEBUG] [Thread-197386] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:46:31.709 [DEBUG] [Thread-197386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:46:31.709 [DEBUG] [Thread-197386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:46:31.709 [DEBUG] [Thread-197386] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:46:31.710 [DEBUG] [Thread-197386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:46:31.710 [DEBUG] [Thread-197386] [transport.py] [_log()] Compression: none
2026-02-15T03:46:31.710 [DEBUG] [Thread-197386] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:46:31.770 [DEBUG] [Thread-197386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:46:31.770 [DEBUG] [Thread-197386] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:46:31.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:46:31.772 [DEBUG] [Thread-197386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:46:31.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:46:31.829 [DEBUG] [Thread-197386] [transport.py] [_log()] userauth is OK
2026-02-15T03:46:31.830 [DEBUG] [Thread-197386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:46:31.830 [DEBUG] [Thread-197386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:46:31.830 [DEBUG] [Thread-197386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:46:31.830 [DEBUG] [Thread-197386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:46:31.855 [INFO] [Thread-197386] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:46:31.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:46:31.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:46:32.657 [DEBUG] [Thread-197386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:46:32.657 [DEBUG] [Thread-197386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:46:32.704 [DEBUG] [Thread-197386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:46:32.705 [DEBUG] [Thread-197386] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:46:32.714 [DEBUG] [Thread-197386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:46:32.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:46: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-15T03:46: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-15T03:46:32.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:46:32.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:46:32.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:46:32.751 [DEBUG] [Thread-197386] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:46:36.039 [DEBUG] [Thread-197388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:46:51.091 [DEBUG] [Thread-197389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:47:00.412 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:47:00.413 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:47:02.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:47:02.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:47:02.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-15T03:47:05.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 46, 33), 1.03, 93.05, 0.0, 35.95, 6.25, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:47:05.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:46:33
2026-02-15T03:47:05.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:47:05.716 [DEBUG] [Thread-197390] [transport.py] [_log()] starting thread (client mode): 0xa5770fa0
2026-02-15T03:47:05.716 [DEBUG] [Thread-197390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:47:05.735 [DEBUG] [Thread-197390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:47:05.735 [INFO] [Thread-197390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:47:05.738 [DEBUG] [Thread-197390] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:47:05.739 [DEBUG] [Thread-197390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:47:05.739 [DEBUG] [Thread-197390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:47:05.739 [DEBUG] [Thread-197390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:47:05.739 [DEBUG] [Thread-197390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:47:05.739 [DEBUG] [Thread-197390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:47:05.739 [DEBUG] [Thread-197390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:47:05.739 [DEBUG] [Thread-197390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:47:05.739 [DEBUG] [Thread-197390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:47:05.739 [DEBUG] [Thread-197390] [transport.py] [_log()] client lang: <none>
2026-02-15T03:47:05.740 [DEBUG] [Thread-197390] [transport.py] [_log()] server lang: <none>
2026-02-15T03:47:05.740 [DEBUG] [Thread-197390] [transport.py] [_log()] kex follows: False
2026-02-15T03:47:05.740 [DEBUG] [Thread-197390] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:47:05.740 [DEBUG] [Thread-197390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:47:05.740 [DEBUG] [Thread-197390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:47:05.740 [DEBUG] [Thread-197390] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:47:05.740 [DEBUG] [Thread-197390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:47:05.740 [DEBUG] [Thread-197390] [transport.py] [_log()] Compression: none
2026-02-15T03:47:05.740 [DEBUG] [Thread-197390] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:47:05.759 [DEBUG] [Thread-197390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:47:05.760 [DEBUG] [Thread-197390] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:47:05.760 [DEBUG] [Thread-197390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:47:05.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:47:05.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:47:05.762 [DEBUG] [Thread-197390] [transport.py] [_log()] userauth is OK
2026-02-15T03:47:05.762 [DEBUG] [Thread-197390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:47:05.763 [DEBUG] [Thread-197390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:47:05.763 [DEBUG] [Thread-197390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:47:05.763 [DEBUG] [Thread-197390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:47:05.785 [INFO] [Thread-197390] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:47:05.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:47:06.122 [DEBUG] [Thread-197392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:47:06.421 [DEBUG] [Thread-197390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:47:06.422 [DEBUG] [Thread-197390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:47:06.422 [DEBUG] [Thread-197390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:47:06.463 [DEBUG] [Thread-197390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:47:06.463 [DEBUG] [Thread-197390] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:47:06.466 [DEBUG] [Thread-197390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:47:06.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:47:06.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:47:06.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:47:06.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:47:06.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:47:06.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:47:06.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:47:06.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:47:06.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:47:06.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.074064 -999.00   +5.70  30.31     94   +4.90 1 3 2 3 1     0    0 0.09 -29.76 ----- 30.3 30.3 155.2 33.7 7.0 -6.3 6.8 -5.2 6.6 -6.3 7.0 -6.4
2026-02-15T03:47:06.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:47:06.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:47:06.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.074064
2026-02-15T03:47:06.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:47:06.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:47:06.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:47:06.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:47:06.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:47:06.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:46:33', tmtdew=1.03, humidity=93.05, cloud=0.0, wind=35.95, temperature=6.25, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:46:39.130', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:47:06.493 [DEBUG] [Thread-197390] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:47:06.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-15T03:47:06.597 [DEBUG] [Thread-197394] [transport.py] [_log()] starting thread (client mode): 0xa5773eb0
2026-02-15T03:47:06.597 [DEBUG] [Thread-197394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:47:06.613 [DEBUG] [Thread-197394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:47:06.613 [INFO] [Thread-197394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:47:06.620 [DEBUG] [Thread-197394] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:47:06.621 [DEBUG] [Thread-197394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:47:06.621 [DEBUG] [Thread-197394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:47:06.621 [DEBUG] [Thread-197394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:47:06.621 [DEBUG] [Thread-197394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:47:06.621 [DEBUG] [Thread-197394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:47:06.621 [DEBUG] [Thread-197394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:47:06.621 [DEBUG] [Thread-197394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:47:06.621 [DEBUG] [Thread-197394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:47:06.622 [DEBUG] [Thread-197394] [transport.py] [_log()] client lang: <none>
2026-02-15T03:47:06.622 [DEBUG] [Thread-197394] [transport.py] [_log()] server lang: <none>
2026-02-15T03:47:06.622 [DEBUG] [Thread-197394] [transport.py] [_log()] kex follows: False
2026-02-15T03:47:06.622 [DEBUG] [Thread-197394] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:47:06.622 [DEBUG] [Thread-197394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:47:06.622 [DEBUG] [Thread-197394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:47:06.622 [DEBUG] [Thread-197394] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:47:06.622 [DEBUG] [Thread-197394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:47:06.623 [DEBUG] [Thread-197394] [transport.py] [_log()] Compression: none
2026-02-15T03:47:06.623 [DEBUG] [Thread-197394] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:47:06.681 [DEBUG] [Thread-197394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:47:06.682 [DEBUG] [Thread-197394] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:47:06.683 [DEBUG] [Thread-197394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:47:06.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:47:06.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:47:06.742 [DEBUG] [Thread-197394] [transport.py] [_log()] userauth is OK
2026-02-15T03:47:06.742 [DEBUG] [Thread-197394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:47:06.742 [DEBUG] [Thread-197394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:47:06.742 [DEBUG] [Thread-197394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:47:06.742 [DEBUG] [Thread-197394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:47:06.761 [INFO] [Thread-197394] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:47: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-15T03:47:06.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:47:07.559 [DEBUG] [Thread-197394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:47:07.560 [DEBUG] [Thread-197394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:47:07.612 [DEBUG] [Thread-197394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:47:07.612 [DEBUG] [Thread-197394] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:47:07.625 [DEBUG] [Thread-197394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:47:07.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:47:07.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-15T03:47:07.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:47:07.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:47:07.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:47:07.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:47:07.667 [DEBUG] [Thread-197394] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:47:21.159 [DEBUG] [Thread-197396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:47:21.891 [DEBUG] [Thread-197397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:47:36.207 [DEBUG] [Thread-197398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:47:37.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:47:37.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:47:37.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T03:47:39.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 47, 9), 0.57, 95.97, 0.0, 33.1, 5.74, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:47:39.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:47:09
2026-02-15T03:47:39.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:47:40.067 [DEBUG] [Thread-197399] [transport.py] [_log()] starting thread (client mode): 0xa2d55ed0
2026-02-15T03:47:40.067 [DEBUG] [Thread-197399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:47:40.087 [DEBUG] [Thread-197399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:47:40.087 [INFO] [Thread-197399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:47:40.090 [DEBUG] [Thread-197399] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:47:40.091 [DEBUG] [Thread-197399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:47:40.091 [DEBUG] [Thread-197399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:47:40.091 [DEBUG] [Thread-197399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:47:40.091 [DEBUG] [Thread-197399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:47:40.091 [DEBUG] [Thread-197399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:47:40.091 [DEBUG] [Thread-197399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:47:40.091 [DEBUG] [Thread-197399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:47:40.091 [DEBUG] [Thread-197399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:47:40.091 [DEBUG] [Thread-197399] [transport.py] [_log()] client lang: <none>
2026-02-15T03:47:40.091 [DEBUG] [Thread-197399] [transport.py] [_log()] server lang: <none>
2026-02-15T03:47:40.091 [DEBUG] [Thread-197399] [transport.py] [_log()] kex follows: False
2026-02-15T03:47:40.091 [DEBUG] [Thread-197399] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:47:40.091 [DEBUG] [Thread-197399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:47:40.091 [DEBUG] [Thread-197399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:47:40.091 [DEBUG] [Thread-197399] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:47:40.091 [DEBUG] [Thread-197399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:47:40.091 [DEBUG] [Thread-197399] [transport.py] [_log()] Compression: none
2026-02-15T03:47:40.091 [DEBUG] [Thread-197399] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:47:40.109 [DEBUG] [Thread-197399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:47:40.110 [DEBUG] [Thread-197399] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:47:40.110 [DEBUG] [Thread-197399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:47:40.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:47:40.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:47:40.113 [DEBUG] [Thread-197399] [transport.py] [_log()] userauth is OK
2026-02-15T03:47:40.113 [DEBUG] [Thread-197399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:47:40.113 [DEBUG] [Thread-197399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:47:40.113 [DEBUG] [Thread-197399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:47:40.113 [DEBUG] [Thread-197399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:47:40.138 [INFO] [Thread-197399] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:47:40.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:47:40.758 [DEBUG] [Thread-197399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:47:40.759 [DEBUG] [Thread-197399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:47:40.759 [DEBUG] [Thread-197399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:47:40.800 [DEBUG] [Thread-197399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:47:40.800 [DEBUG] [Thread-197399] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:47:40.803 [DEBUG] [Thread-197399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:47:40.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:47:40.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:47:40.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:47:40.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:47:40.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:47:40.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:47:40.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:47:40.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:47:40.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:47:40.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.074411 -999.00   +5.70  24.85     94   +4.90 1 3 1 3 1     0    0 0.06 -30.38 ----- 24.9 24.9 146.2 33.5 7.0 -7.4 6.8 -5.9 6.6 -6.5 7.0 -6.7
2026-02-15T03:47:40.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:47:40.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:47:40.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.074411
2026-02-15T03:47:40.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:47:40.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:47:40.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:47:40.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:47:40.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:47:40.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:47:09', tmtdew=0.57, humidity=95.97, cloud=0.0, wind=33.1, temperature=5.74, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:47:09.110', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:47:40.832 [DEBUG] [Thread-197399] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:47:40.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-15T03:47:40.928 [DEBUG] [Thread-197402] [transport.py] [_log()] starting thread (client mode): 0xa2d3c730
2026-02-15T03:47:40.928 [DEBUG] [Thread-197402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:47:40.942 [DEBUG] [Thread-197402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:47:40.942 [INFO] [Thread-197402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:47:40.950 [DEBUG] [Thread-197402] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:47:40.950 [DEBUG] [Thread-197402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:47:40.950 [DEBUG] [Thread-197402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:47:40.950 [DEBUG] [Thread-197402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:47:40.950 [DEBUG] [Thread-197402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:47:40.950 [DEBUG] [Thread-197402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:47:40.950 [DEBUG] [Thread-197402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:47:40.950 [DEBUG] [Thread-197402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:47:40.950 [DEBUG] [Thread-197402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:47:40.950 [DEBUG] [Thread-197402] [transport.py] [_log()] client lang: <none>
2026-02-15T03:47:40.950 [DEBUG] [Thread-197402] [transport.py] [_log()] server lang: <none>
2026-02-15T03:47:40.950 [DEBUG] [Thread-197402] [transport.py] [_log()] kex follows: False
2026-02-15T03:47:40.950 [DEBUG] [Thread-197402] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:47:40.950 [DEBUG] [Thread-197402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:47:40.950 [DEBUG] [Thread-197402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:47:40.951 [DEBUG] [Thread-197402] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:47:40.951 [DEBUG] [Thread-197402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:47:40.951 [DEBUG] [Thread-197402] [transport.py] [_log()] Compression: none
2026-02-15T03:47:40.951 [DEBUG] [Thread-197402] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:47:41.016 [DEBUG] [Thread-197402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:47:41.017 [DEBUG] [Thread-197402] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:47:41.018 [DEBUG] [Thread-197402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:47:41.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:47:41.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:47:41.074 [DEBUG] [Thread-197402] [transport.py] [_log()] userauth is OK
2026-02-15T03:47:41.074 [DEBUG] [Thread-197402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:47:41.075 [DEBUG] [Thread-197402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:47:41.075 [DEBUG] [Thread-197402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:47:41.075 [DEBUG] [Thread-197402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:47:41.094 [INFO] [Thread-197402] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:47:41.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:47:41.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:47:41.862 [DEBUG] [Thread-197402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:47:41.862 [DEBUG] [Thread-197402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:47:41.910 [DEBUG] [Thread-197402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:47:41.911 [DEBUG] [Thread-197402] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:47:41.920 [DEBUG] [Thread-197402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:47:41.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:47:41.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-15T03:47:41.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:47:41.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:47:41.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:47:41.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:47:41.957 [DEBUG] [Thread-197402] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:47:51.243 [DEBUG] [Thread-197404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:48:00.620 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:48:00.621 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:48:06.287 [DEBUG] [Thread-197405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:48:11.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:48:11.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:48:11.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-15T03:48:13.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 47, 45), 0.56, 96.04, 0.0, 34.97, 5.81, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:48:13.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:47:45
2026-02-15T03:48:14.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:48:14.392 [DEBUG] [Thread-197406] [transport.py] [_log()] starting thread (client mode): 0xa2d3e230
2026-02-15T03:48:14.392 [DEBUG] [Thread-197406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:48:14.412 [DEBUG] [Thread-197406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:48:14.412 [INFO] [Thread-197406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:48:14.415 [DEBUG] [Thread-197406] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:48:14.415 [DEBUG] [Thread-197406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:48:14.415 [DEBUG] [Thread-197406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:48:14.415 [DEBUG] [Thread-197406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:48:14.415 [DEBUG] [Thread-197406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:48:14.415 [DEBUG] [Thread-197406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:48:14.415 [DEBUG] [Thread-197406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:48:14.415 [DEBUG] [Thread-197406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:48:14.415 [DEBUG] [Thread-197406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:48:14.415 [DEBUG] [Thread-197406] [transport.py] [_log()] client lang: <none>
2026-02-15T03:48:14.415 [DEBUG] [Thread-197406] [transport.py] [_log()] server lang: <none>
2026-02-15T03:48:14.415 [DEBUG] [Thread-197406] [transport.py] [_log()] kex follows: False
2026-02-15T03:48:14.415 [DEBUG] [Thread-197406] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:48:14.415 [DEBUG] [Thread-197406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:48:14.415 [DEBUG] [Thread-197406] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:48:14.415 [DEBUG] [Thread-197406] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:48:14.416 [DEBUG] [Thread-197406] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:48:14.416 [DEBUG] [Thread-197406] [transport.py] [_log()] Compression: none
2026-02-15T03:48:14.416 [DEBUG] [Thread-197406] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:48:14.434 [DEBUG] [Thread-197406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:48:14.434 [DEBUG] [Thread-197406] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:48:14.435 [DEBUG] [Thread-197406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:48:14.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:48:14.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:48:14.437 [DEBUG] [Thread-197406] [transport.py] [_log()] userauth is OK
2026-02-15T03:48:14.437 [DEBUG] [Thread-197406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:48:14.438 [DEBUG] [Thread-197406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:48:14.438 [DEBUG] [Thread-197406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:48:14.438 [DEBUG] [Thread-197406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:48:14.462 [INFO] [Thread-197406] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:48:14.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:48:15.098 [DEBUG] [Thread-197406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:48:15.098 [DEBUG] [Thread-197406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:48:15.098 [DEBUG] [Thread-197406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:48:15.139 [DEBUG] [Thread-197406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:48:15.139 [DEBUG] [Thread-197406] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:48:15.142 [DEBUG] [Thread-197406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:48:15.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:48:15.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:48:15.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:48:15.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:48:15.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:48:15.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:48:15.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:48:15.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:48:15.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:48:15.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.074758 -999.00   +5.70  22.95     94   +4.90 1 3 1 3 1     0    0 0.06 -29.84 ----- 22.9 22.9 152.0 31.4 7.0 -6.9 6.8 -6.5 6.6 -6.1 7.0 -6.4
2026-02-15T03:48:15.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:48:15.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:48:15.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.074758
2026-02-15T03:48:15.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:48:15.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:48:15.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:48:15.167 [DEBUG] [Thread-197406] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:48:15.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:48:15.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:48:15.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:47:45', tmtdew=0.56, humidity=96.04, cloud=0.0, wind=34.97, temperature=5.81, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:47:39.091', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:48:15.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-15T03:48:15.263 [DEBUG] [Thread-197409] [transport.py] [_log()] starting thread (client mode): 0xa2d3ecb0
2026-02-15T03:48:15.263 [DEBUG] [Thread-197409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:48:15.279 [DEBUG] [Thread-197409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:48:15.279 [INFO] [Thread-197409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:48:15.287 [DEBUG] [Thread-197409] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:48:15.287 [DEBUG] [Thread-197409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:48:15.287 [DEBUG] [Thread-197409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:48:15.287 [DEBUG] [Thread-197409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:48:15.287 [DEBUG] [Thread-197409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:48:15.287 [DEBUG] [Thread-197409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:48:15.287 [DEBUG] [Thread-197409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:48:15.287 [DEBUG] [Thread-197409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:48:15.287 [DEBUG] [Thread-197409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:48:15.287 [DEBUG] [Thread-197409] [transport.py] [_log()] client lang: <none>
2026-02-15T03:48:15.287 [DEBUG] [Thread-197409] [transport.py] [_log()] server lang: <none>
2026-02-15T03:48:15.288 [DEBUG] [Thread-197409] [transport.py] [_log()] kex follows: False
2026-02-15T03:48:15.288 [DEBUG] [Thread-197409] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:48:15.288 [DEBUG] [Thread-197409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:48:15.288 [DEBUG] [Thread-197409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:48:15.288 [DEBUG] [Thread-197409] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:48:15.288 [DEBUG] [Thread-197409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:48:15.288 [DEBUG] [Thread-197409] [transport.py] [_log()] Compression: none
2026-02-15T03:48:15.288 [DEBUG] [Thread-197409] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:48:15.344 [DEBUG] [Thread-197409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:48:15.345 [DEBUG] [Thread-197409] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:48:15.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:48:15.346 [DEBUG] [Thread-197409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:48:15.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:48:15.401 [DEBUG] [Thread-197409] [transport.py] [_log()] userauth is OK
2026-02-15T03:48:15.401 [DEBUG] [Thread-197409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:48:15.401 [DEBUG] [Thread-197409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:48:15.401 [DEBUG] [Thread-197409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:48:15.401 [DEBUG] [Thread-197409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:48:15.420 [INFO] [Thread-197409] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:48:15.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-15T03:48:15.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:48:16.244 [DEBUG] [Thread-197409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:48:16.244 [DEBUG] [Thread-197409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:48:16.291 [DEBUG] [Thread-197409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:48:16.292 [DEBUG] [Thread-197409] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:48:16.301 [DEBUG] [Thread-197409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:48:16.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:48:16.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-15T03:48:16.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-15T03:48:16.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:48:16.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:48:16.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:48:16.338 [DEBUG] [Thread-197409] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:48:21.325 [DEBUG] [Thread-197411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:48:21.946 [DEBUG] [Thread-197412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:48:36.373 [DEBUG] [Thread-197413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:48:46.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:48:46.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:48:46.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-15T03:48:48.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 48, 21), 0.56, 96.06, 0.0, 35.18, 5.77, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:48:48.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:48:21
2026-02-15T03:48:48.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:48:48.726 [DEBUG] [Thread-197414] [transport.py] [_log()] starting thread (client mode): 0xa2d3c280
2026-02-15T03:48:48.727 [DEBUG] [Thread-197414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:48:48.748 [DEBUG] [Thread-197414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:48:48.748 [INFO] [Thread-197414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:48:48.752 [DEBUG] [Thread-197414] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:48:48.752 [DEBUG] [Thread-197414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:48:48.752 [DEBUG] [Thread-197414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:48:48.752 [DEBUG] [Thread-197414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:48:48.752 [DEBUG] [Thread-197414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:48:48.752 [DEBUG] [Thread-197414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:48:48.752 [DEBUG] [Thread-197414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:48:48.753 [DEBUG] [Thread-197414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:48:48.753 [DEBUG] [Thread-197414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:48:48.753 [DEBUG] [Thread-197414] [transport.py] [_log()] client lang: <none>
2026-02-15T03:48:48.753 [DEBUG] [Thread-197414] [transport.py] [_log()] server lang: <none>
2026-02-15T03:48:48.753 [DEBUG] [Thread-197414] [transport.py] [_log()] kex follows: False
2026-02-15T03:48:48.753 [DEBUG] [Thread-197414] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:48:48.753 [DEBUG] [Thread-197414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:48:48.753 [DEBUG] [Thread-197414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:48:48.754 [DEBUG] [Thread-197414] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:48:48.754 [DEBUG] [Thread-197414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:48:48.754 [DEBUG] [Thread-197414] [transport.py] [_log()] Compression: none
2026-02-15T03:48:48.754 [DEBUG] [Thread-197414] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:48:48.770 [DEBUG] [Thread-197414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:48:48.771 [DEBUG] [Thread-197414] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:48:48.771 [DEBUG] [Thread-197414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:48:48.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:48:48.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:48:48.773 [DEBUG] [Thread-197414] [transport.py] [_log()] userauth is OK
2026-02-15T03:48:48.773 [DEBUG] [Thread-197414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:48:48.773 [DEBUG] [Thread-197414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:48:48.774 [DEBUG] [Thread-197414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:48:48.774 [DEBUG] [Thread-197414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:48:48.798 [INFO] [Thread-197414] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:48:48.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:48:49.406 [DEBUG] [Thread-197414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:48:49.406 [DEBUG] [Thread-197414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:48:49.407 [DEBUG] [Thread-197414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:48:49.447 [DEBUG] [Thread-197414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:48:49.447 [DEBUG] [Thread-197414] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:48:49.450 [DEBUG] [Thread-197414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:48:49.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:48:49.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:48:49.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:48:49.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:48:49.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:48:49.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:48:49.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:48:49.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:48:49.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:48:49.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.075105 -999.00   +5.60  22.08     94   +4.80 1 3 1 3 1     0    0 0.05 -30.58 ----- 22.1 22.1 160.6 31.2 7.0 -6.9 6.8 -8.0 6.6 -8.3 7.0 -8.5
2026-02-15T03:48:49.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:48:49.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:48:49.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.075105
2026-02-15T03:48:49.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:48:49.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:48:49.474 [DEBUG] [Thread-197414] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:48:49.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:48:49.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:48:49.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:48:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:48:21', tmtdew=0.56, humidity=96.06, cloud=0.0, wind=35.18, temperature=5.77, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:48:09.072', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:48:49.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-15T03:48:49.569 [DEBUG] [Thread-197417] [transport.py] [_log()] starting thread (client mode): 0xa2d3f8e0
2026-02-15T03:48:49.569 [DEBUG] [Thread-197417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:48:49.584 [DEBUG] [Thread-197417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:48:49.584 [INFO] [Thread-197417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:48:49.591 [DEBUG] [Thread-197417] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:48:49.591 [DEBUG] [Thread-197417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:48:49.591 [DEBUG] [Thread-197417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:48:49.591 [DEBUG] [Thread-197417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:48:49.592 [DEBUG] [Thread-197417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:48:49.592 [DEBUG] [Thread-197417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:48:49.592 [DEBUG] [Thread-197417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:48:49.592 [DEBUG] [Thread-197417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:48:49.592 [DEBUG] [Thread-197417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:48:49.592 [DEBUG] [Thread-197417] [transport.py] [_log()] client lang: <none>
2026-02-15T03:48:49.592 [DEBUG] [Thread-197417] [transport.py] [_log()] server lang: <none>
2026-02-15T03:48:49.592 [DEBUG] [Thread-197417] [transport.py] [_log()] kex follows: False
2026-02-15T03:48:49.592 [DEBUG] [Thread-197417] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:48:49.592 [DEBUG] [Thread-197417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:48:49.592 [DEBUG] [Thread-197417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:48:49.592 [DEBUG] [Thread-197417] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:48:49.592 [DEBUG] [Thread-197417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:48:49.592 [DEBUG] [Thread-197417] [transport.py] [_log()] Compression: none
2026-02-15T03:48:49.592 [DEBUG] [Thread-197417] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:48:49.652 [DEBUG] [Thread-197417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:48:49.653 [DEBUG] [Thread-197417] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:48:49.653 [DEBUG] [Thread-197417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:48:49.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:48:49.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:48:49.708 [DEBUG] [Thread-197417] [transport.py] [_log()] userauth is OK
2026-02-15T03:48:49.708 [DEBUG] [Thread-197417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:48:49.708 [DEBUG] [Thread-197417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:48:49.708 [DEBUG] [Thread-197417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:48:49.708 [DEBUG] [Thread-197417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:48:49.724 [INFO] [Thread-197417] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:48:49.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-15T03:48:49.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:48:50.577 [DEBUG] [Thread-197417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:48:50.578 [DEBUG] [Thread-197417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:48:50.626 [DEBUG] [Thread-197417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:48:50.626 [DEBUG] [Thread-197417] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:48:50.634 [DEBUG] [Thread-197417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:48:50.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:48:50.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:48:50.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-15T03:48:50.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:48:50.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:48:50.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:48:50.666 [DEBUG] [Thread-197417] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:48:51.407 [DEBUG] [Thread-197419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:49:00.824 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:49:00.825 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:49:06.446 [DEBUG] [Thread-197420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:49:20.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:49:20.662 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:49:20.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-15T03:49:21.483 [DEBUG] [Thread-197421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:49:22.016 [DEBUG] [Thread-197422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:49:22.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 48, 56), 0.56, 96.09, 0.0, 36.58, 5.77, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:49:22.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:48:56
2026-02-15T03:49:22.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:49:22.988 [DEBUG] [Thread-197423] [transport.py] [_log()] starting thread (client mode): 0xa2d3c250
2026-02-15T03:49:22.988 [DEBUG] [Thread-197423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:49:23.008 [DEBUG] [Thread-197423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:49:23.008 [INFO] [Thread-197423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:49:23.011 [DEBUG] [Thread-197423] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:49:23.012 [DEBUG] [Thread-197423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:49:23.012 [DEBUG] [Thread-197423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:49:23.012 [DEBUG] [Thread-197423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:49:23.012 [DEBUG] [Thread-197423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:49:23.012 [DEBUG] [Thread-197423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:49:23.012 [DEBUG] [Thread-197423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:49:23.012 [DEBUG] [Thread-197423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:49:23.012 [DEBUG] [Thread-197423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:49:23.012 [DEBUG] [Thread-197423] [transport.py] [_log()] client lang: <none>
2026-02-15T03:49:23.012 [DEBUG] [Thread-197423] [transport.py] [_log()] server lang: <none>
2026-02-15T03:49:23.012 [DEBUG] [Thread-197423] [transport.py] [_log()] kex follows: False
2026-02-15T03:49:23.012 [DEBUG] [Thread-197423] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:49:23.012 [DEBUG] [Thread-197423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:49:23.012 [DEBUG] [Thread-197423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:49:23.012 [DEBUG] [Thread-197423] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:49:23.012 [DEBUG] [Thread-197423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:49:23.012 [DEBUG] [Thread-197423] [transport.py] [_log()] Compression: none
2026-02-15T03:49:23.012 [DEBUG] [Thread-197423] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:49:23.029 [DEBUG] [Thread-197423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:49:23.030 [DEBUG] [Thread-197423] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:49:23.030 [DEBUG] [Thread-197423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:49:23.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:49:23.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:49:23.032 [DEBUG] [Thread-197423] [transport.py] [_log()] userauth is OK
2026-02-15T03:49:23.033 [DEBUG] [Thread-197423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:49:23.033 [DEBUG] [Thread-197423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:49:23.033 [DEBUG] [Thread-197423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:49:23.033 [DEBUG] [Thread-197423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:49:23.058 [INFO] [Thread-197423] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:49:23.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:49:23.677 [DEBUG] [Thread-197423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:49:23.677 [DEBUG] [Thread-197423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:49:23.677 [DEBUG] [Thread-197423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:49:23.718 [DEBUG] [Thread-197423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:49:23.718 [DEBUG] [Thread-197423] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:49:23.721 [DEBUG] [Thread-197423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:49:23.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:49:23.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:49:23.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:49:23.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:49:23.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:49:23.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:49:23.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:49:23.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:49:23.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:49:23.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.075453 -999.00   +5.60  22.72     94   +4.90 1 3 1 3 1     0    0 0.12 -27.48 ----- 22.7 22.7 150.0 34.7 7.0 -7.8 6.8 -7.3 6.7 -7.4 7.0 -7.5
2026-02-15T03:49:23.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:49:23.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:49:23.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.075453
2026-02-15T03:49:23.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:49:23.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:49:23.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:49:23.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:49:23.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:49:23.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:48:56', tmtdew=0.56, humidity=96.09, cloud=0.0, wind=36.58, temperature=5.77, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:48:39.139', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:49:23.745 [DEBUG] [Thread-197423] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:49:23.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-15T03:49:23.841 [DEBUG] [Thread-197426] [transport.py] [_log()] starting thread (client mode): 0xa2d3e050
2026-02-15T03:49:23.842 [DEBUG] [Thread-197426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:49:23.856 [DEBUG] [Thread-197426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:49:23.856 [INFO] [Thread-197426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:49:23.864 [DEBUG] [Thread-197426] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:49:23.864 [DEBUG] [Thread-197426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:49:23.864 [DEBUG] [Thread-197426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:49:23.865 [DEBUG] [Thread-197426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:49:23.865 [DEBUG] [Thread-197426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:49:23.865 [DEBUG] [Thread-197426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:49:23.865 [DEBUG] [Thread-197426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:49:23.865 [DEBUG] [Thread-197426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:49:23.865 [DEBUG] [Thread-197426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:49:23.865 [DEBUG] [Thread-197426] [transport.py] [_log()] client lang: <none>
2026-02-15T03:49:23.865 [DEBUG] [Thread-197426] [transport.py] [_log()] server lang: <none>
2026-02-15T03:49:23.865 [DEBUG] [Thread-197426] [transport.py] [_log()] kex follows: False
2026-02-15T03:49:23.865 [DEBUG] [Thread-197426] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:49:23.866 [DEBUG] [Thread-197426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:49:23.866 [DEBUG] [Thread-197426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:49:23.866 [DEBUG] [Thread-197426] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:49:23.866 [DEBUG] [Thread-197426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:49:23.866 [DEBUG] [Thread-197426] [transport.py] [_log()] Compression: none
2026-02-15T03:49:23.866 [DEBUG] [Thread-197426] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:49:23.924 [DEBUG] [Thread-197426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:49:23.924 [DEBUG] [Thread-197426] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:49:23.925 [DEBUG] [Thread-197426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:49:23.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:49:23.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:49:23.980 [DEBUG] [Thread-197426] [transport.py] [_log()] userauth is OK
2026-02-15T03:49:23.980 [DEBUG] [Thread-197426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:49:23.980 [DEBUG] [Thread-197426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:49:23.980 [DEBUG] [Thread-197426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:49:23.980 [DEBUG] [Thread-197426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:49:24.003 [INFO] [Thread-197426] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:49:24.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-15T03:49:24.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:49:24.803 [DEBUG] [Thread-197426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:49:24.804 [DEBUG] [Thread-197426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:49:24.852 [DEBUG] [Thread-197426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:49:24.852 [DEBUG] [Thread-197426] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:49:24.860 [DEBUG] [Thread-197426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:49:24.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:49:24.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-15T03:49:24.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-15T03:49:24.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:49:24.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:49:24.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:49:24.893 [DEBUG] [Thread-197426] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:49:36.519 [DEBUG] [Thread-197428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:49:51.579 [DEBUG] [Thread-197429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:49:54.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:49:54.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:49:54.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T03:49:57.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 49, 31), 0.56, 96.07, 0.0, 37.18, 5.74, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:49:57.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:49:31
2026-02-15T03:49:57.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:49:57.898 [DEBUG] [Thread-197430] [transport.py] [_log()] starting thread (client mode): 0xa2d3cb20
2026-02-15T03:49:57.898 [DEBUG] [Thread-197430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:49:57.919 [DEBUG] [Thread-197430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:49:57.919 [INFO] [Thread-197430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:49:57.922 [DEBUG] [Thread-197430] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:49:57.922 [DEBUG] [Thread-197430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:49:57.922 [DEBUG] [Thread-197430] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:49:57.922 [DEBUG] [Thread-197430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:49:57.922 [DEBUG] [Thread-197430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:49:57.922 [DEBUG] [Thread-197430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:49:57.922 [DEBUG] [Thread-197430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:49:57.922 [DEBUG] [Thread-197430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:49:57.922 [DEBUG] [Thread-197430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:49:57.922 [DEBUG] [Thread-197430] [transport.py] [_log()] client lang: <none>
2026-02-15T03:49:57.922 [DEBUG] [Thread-197430] [transport.py] [_log()] server lang: <none>
2026-02-15T03:49:57.922 [DEBUG] [Thread-197430] [transport.py] [_log()] kex follows: False
2026-02-15T03:49:57.922 [DEBUG] [Thread-197430] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:49:57.922 [DEBUG] [Thread-197430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:49:57.922 [DEBUG] [Thread-197430] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:49:57.922 [DEBUG] [Thread-197430] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:49:57.923 [DEBUG] [Thread-197430] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:49:57.923 [DEBUG] [Thread-197430] [transport.py] [_log()] Compression: none
2026-02-15T03:49:57.923 [DEBUG] [Thread-197430] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:49:57.939 [DEBUG] [Thread-197430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:49:57.940 [DEBUG] [Thread-197430] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:49:57.940 [DEBUG] [Thread-197430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:49:57.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:49:57.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:49:57.942 [DEBUG] [Thread-197430] [transport.py] [_log()] userauth is OK
2026-02-15T03:49:57.942 [DEBUG] [Thread-197430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:49:57.942 [DEBUG] [Thread-197430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:49:57.942 [DEBUG] [Thread-197430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:49:57.942 [DEBUG] [Thread-197430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:49:57.979 [INFO] [Thread-197430] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:49:57.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:49:58.630 [DEBUG] [Thread-197430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:49:58.631 [DEBUG] [Thread-197430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:49:58.631 [DEBUG] [Thread-197430] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:49:58.671 [DEBUG] [Thread-197430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:49:58.671 [DEBUG] [Thread-197430] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:49:58.674 [DEBUG] [Thread-197430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:49:58.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:49:58.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:49:58.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:49:58.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:49:58.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:49:58.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:49:58.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:49:58.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:49:58.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:49:58.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.076147 -999.00   +5.60  23.93     94   +4.90 1 3 1 3 1     0    0 0.07 -28.83 ----- 23.9 23.9 144.9 33.1 7.0 -6.4 6.8 -6.9 6.6 -6.5 7.0 -6.9
2026-02-15T03:49:58.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:49:58.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:49:58.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.076147
2026-02-15T03:49:58.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:49:58.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:49:58.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:49:58.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:49:58.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:49:58.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:49:31', tmtdew=0.56, humidity=96.07, cloud=0.0, wind=37.18, temperature=5.74, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:49:39.101', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:49:58.699 [DEBUG] [Thread-197430] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:49:58.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:49:58.796 [DEBUG] [Thread-197433] [transport.py] [_log()] starting thread (client mode): 0xa2d3cb50
2026-02-15T03:49:58.796 [DEBUG] [Thread-197433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:49:58.811 [DEBUG] [Thread-197433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:49:58.811 [INFO] [Thread-197433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:49:58.819 [DEBUG] [Thread-197433] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:49:58.819 [DEBUG] [Thread-197433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:49:58.819 [DEBUG] [Thread-197433] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:49:58.819 [DEBUG] [Thread-197433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:49:58.820 [DEBUG] [Thread-197433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:49:58.820 [DEBUG] [Thread-197433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:49:58.820 [DEBUG] [Thread-197433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:49:58.820 [DEBUG] [Thread-197433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:49:58.820 [DEBUG] [Thread-197433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:49:58.820 [DEBUG] [Thread-197433] [transport.py] [_log()] client lang: <none>
2026-02-15T03:49:58.820 [DEBUG] [Thread-197433] [transport.py] [_log()] server lang: <none>
2026-02-15T03:49:58.820 [DEBUG] [Thread-197433] [transport.py] [_log()] kex follows: False
2026-02-15T03:49:58.820 [DEBUG] [Thread-197433] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:49:58.820 [DEBUG] [Thread-197433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:49:58.820 [DEBUG] [Thread-197433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:49:58.820 [DEBUG] [Thread-197433] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:49:58.820 [DEBUG] [Thread-197433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:49:58.820 [DEBUG] [Thread-197433] [transport.py] [_log()] Compression: none
2026-02-15T03:49:58.820 [DEBUG] [Thread-197433] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:49:58.875 [DEBUG] [Thread-197433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:49:58.875 [DEBUG] [Thread-197433] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:49:58.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:49:58.876 [DEBUG] [Thread-197433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:49:58.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:49:58.932 [DEBUG] [Thread-197433] [transport.py] [_log()] userauth is OK
2026-02-15T03:49:58.932 [DEBUG] [Thread-197433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:49:58.932 [DEBUG] [Thread-197433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:49:58.932 [DEBUG] [Thread-197433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:49:58.932 [DEBUG] [Thread-197433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:49:58.949 [INFO] [Thread-197433] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:49:58.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-15T03:49:58.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:49:59.763 [DEBUG] [Thread-197433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:49:59.763 [DEBUG] [Thread-197433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:49:59.811 [DEBUG] [Thread-197433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:49:59.812 [DEBUG] [Thread-197433] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:49:59.821 [DEBUG] [Thread-197433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:49:59.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:49:59.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-15T03:49:59.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-15T03:49:59.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:49:59.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:49:59.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:49:59.858 [DEBUG] [Thread-197433] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:50:01.028 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:50:01.029 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:50:06.615 [DEBUG] [Thread-197435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:50:21.675 [DEBUG] [Thread-197436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:50:22.085 [DEBUG] [Thread-197437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:50:29.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:50:29.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:50:29.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-15T03:50:31.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 50, 6), 0.55, 96.14, 0.0, 34.92, 5.79, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:50:31.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:50:06
2026-02-15T03:50:32.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:50:32.201 [DEBUG] [Thread-197438] [transport.py] [_log()] starting thread (client mode): 0xa2d3c910
2026-02-15T03:50:32.201 [DEBUG] [Thread-197438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:50:32.222 [DEBUG] [Thread-197438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:50:32.222 [INFO] [Thread-197438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:50:32.225 [DEBUG] [Thread-197438] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:50:32.225 [DEBUG] [Thread-197438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:50:32.225 [DEBUG] [Thread-197438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:50:32.225 [DEBUG] [Thread-197438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:50:32.225 [DEBUG] [Thread-197438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:50:32.225 [DEBUG] [Thread-197438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:50:32.225 [DEBUG] [Thread-197438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:50:32.225 [DEBUG] [Thread-197438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:50:32.225 [DEBUG] [Thread-197438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:50:32.225 [DEBUG] [Thread-197438] [transport.py] [_log()] client lang: <none>
2026-02-15T03:50:32.225 [DEBUG] [Thread-197438] [transport.py] [_log()] server lang: <none>
2026-02-15T03:50:32.225 [DEBUG] [Thread-197438] [transport.py] [_log()] kex follows: False
2026-02-15T03:50:32.225 [DEBUG] [Thread-197438] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:50:32.225 [DEBUG] [Thread-197438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:50:32.225 [DEBUG] [Thread-197438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:50:32.225 [DEBUG] [Thread-197438] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:50:32.225 [DEBUG] [Thread-197438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:50:32.225 [DEBUG] [Thread-197438] [transport.py] [_log()] Compression: none
2026-02-15T03:50:32.225 [DEBUG] [Thread-197438] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:50:32.244 [DEBUG] [Thread-197438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:50:32.245 [DEBUG] [Thread-197438] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:50:32.245 [DEBUG] [Thread-197438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:50:32.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:50:32.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:50:32.247 [DEBUG] [Thread-197438] [transport.py] [_log()] userauth is OK
2026-02-15T03:50:32.248 [DEBUG] [Thread-197438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:50:32.248 [DEBUG] [Thread-197438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:50:32.248 [DEBUG] [Thread-197438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:50:32.248 [DEBUG] [Thread-197438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:50:32.267 [INFO] [Thread-197438] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:50:32.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:50:32.898 [DEBUG] [Thread-197438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:50:32.899 [DEBUG] [Thread-197438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:50:32.899 [DEBUG] [Thread-197438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:50:32.940 [DEBUG] [Thread-197438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:50:32.940 [DEBUG] [Thread-197438] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:50:32.943 [DEBUG] [Thread-197438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:50:32.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:50:32.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:50:32.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:50:32.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:50:32.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:50:32.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:50:32.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:50:32.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:50:32.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:50:32.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.076494 -999.00   +5.60  20.35     94   +4.90 1 3 1 3 1     0    0 0.12 -26.73 ----- 20.4 20.4 154.8 28.6 7.0 -8.7 6.8 -7.2 6.6 -8.3 7.0 -9.1
2026-02-15T03:50:32.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:50:32.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:50:32.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.076494
2026-02-15T03:50:32.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:50:32.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:50:32.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:50:32.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:50:32.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:50:32.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:50:06', tmtdew=0.55, humidity=96.14, cloud=0.0, wind=34.92, temperature=5.79, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:50:09.082', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:50:32.963 [DEBUG] [Thread-197438] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:50:33.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:50:33.059 [DEBUG] [Thread-197441] [transport.py] [_log()] starting thread (client mode): 0xa5773160
2026-02-15T03:50:33.060 [DEBUG] [Thread-197441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:50:33.074 [DEBUG] [Thread-197441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:50:33.074 [INFO] [Thread-197441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:50:33.081 [DEBUG] [Thread-197441] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:50:33.081 [DEBUG] [Thread-197441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:50:33.081 [DEBUG] [Thread-197441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:50:33.081 [DEBUG] [Thread-197441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:50:33.081 [DEBUG] [Thread-197441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:50:33.081 [DEBUG] [Thread-197441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:50:33.082 [DEBUG] [Thread-197441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:50:33.082 [DEBUG] [Thread-197441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:50:33.082 [DEBUG] [Thread-197441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:50:33.082 [DEBUG] [Thread-197441] [transport.py] [_log()] client lang: <none>
2026-02-15T03:50:33.082 [DEBUG] [Thread-197441] [transport.py] [_log()] server lang: <none>
2026-02-15T03:50:33.082 [DEBUG] [Thread-197441] [transport.py] [_log()] kex follows: False
2026-02-15T03:50:33.082 [DEBUG] [Thread-197441] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:50:33.082 [DEBUG] [Thread-197441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:50:33.082 [DEBUG] [Thread-197441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:50:33.082 [DEBUG] [Thread-197441] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:50:33.082 [DEBUG] [Thread-197441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:50:33.082 [DEBUG] [Thread-197441] [transport.py] [_log()] Compression: none
2026-02-15T03:50:33.082 [DEBUG] [Thread-197441] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:50:33.138 [DEBUG] [Thread-197441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:50:33.139 [DEBUG] [Thread-197441] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:50:33.139 [DEBUG] [Thread-197441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:50:33.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:50:33.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:50:33.196 [DEBUG] [Thread-197441] [transport.py] [_log()] userauth is OK
2026-02-15T03:50:33.196 [DEBUG] [Thread-197441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:50:33.196 [DEBUG] [Thread-197441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:50:33.196 [DEBUG] [Thread-197441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:50:33.197 [DEBUG] [Thread-197441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:50:33.216 [INFO] [Thread-197441] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:50:33.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:50:33.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:50:34.016 [DEBUG] [Thread-197441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:50:34.017 [DEBUG] [Thread-197441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:50:34.064 [DEBUG] [Thread-197441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:50:34.064 [DEBUG] [Thread-197441] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:50:34.074 [DEBUG] [Thread-197441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:50:34.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:50:34.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-15T03:50:34.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-15T03:50:34.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:50:34.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:50:34.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:50:34.110 [DEBUG] [Thread-197441] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:50:36.710 [DEBUG] [Thread-197443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:50:51.763 [DEBUG] [Thread-197444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:51:01.241 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:51:01.242 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:51:04.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:51:04.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:51:04.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-15T03:51:06.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 50, 41), 1.0, 93.25, 0.0, 34.61, 6.08, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:51:06.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:50:41
2026-02-15T03:51:06.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:51:06.756 [DEBUG] [Thread-197445] [transport.py] [_log()] starting thread (client mode): 0xa57730a0
2026-02-15T03:51:06.756 [DEBUG] [Thread-197445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:51:06.776 [DEBUG] [Thread-197445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:51:06.776 [INFO] [Thread-197445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:51:06.779 [DEBUG] [Thread-197445] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:51:06.780 [DEBUG] [Thread-197445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:51:06.780 [DEBUG] [Thread-197445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:51:06.780 [DEBUG] [Thread-197445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:51:06.780 [DEBUG] [Thread-197445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:51:06.780 [DEBUG] [Thread-197445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:51:06.780 [DEBUG] [Thread-197445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:51:06.780 [DEBUG] [Thread-197445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:51:06.780 [DEBUG] [Thread-197445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:51:06.780 [DEBUG] [Thread-197445] [transport.py] [_log()] client lang: <none>
2026-02-15T03:51:06.780 [DEBUG] [Thread-197445] [transport.py] [_log()] server lang: <none>
2026-02-15T03:51:06.780 [DEBUG] [Thread-197445] [transport.py] [_log()] kex follows: False
2026-02-15T03:51:06.780 [DEBUG] [Thread-197445] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:51:06.780 [DEBUG] [Thread-197445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:51:06.781 [DEBUG] [Thread-197445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:51:06.781 [DEBUG] [Thread-197445] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:51:06.781 [DEBUG] [Thread-197445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:51:06.781 [DEBUG] [Thread-197445] [transport.py] [_log()] Compression: none
2026-02-15T03:51:06.781 [DEBUG] [Thread-197445] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:51:06.798 [DEBUG] [Thread-197447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:51:06.801 [DEBUG] [Thread-197445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:51:06.802 [DEBUG] [Thread-197445] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:51:06.803 [DEBUG] [Thread-197445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:51:06.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:51:06.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:51:06.805 [DEBUG] [Thread-197445] [transport.py] [_log()] userauth is OK
2026-02-15T03:51:06.806 [DEBUG] [Thread-197445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:51:06.806 [DEBUG] [Thread-197445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:51:06.806 [DEBUG] [Thread-197445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:51:06.806 [DEBUG] [Thread-197445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:51:06.829 [INFO] [Thread-197445] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:51:06.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:51:07.458 [DEBUG] [Thread-197445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:51:07.458 [DEBUG] [Thread-197445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:51:07.458 [DEBUG] [Thread-197445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:51:07.499 [DEBUG] [Thread-197445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:51:07.500 [DEBUG] [Thread-197445] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:51:07.503 [DEBUG] [Thread-197445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:51:07.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:51:07.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:51:07.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:51:07.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:51:07.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:51:07.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:51:07.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:51:07.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:51:07.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:51:07.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.076841 -999.00   +5.60  21.25     94   +4.80 1 3 1 3 1     0    0 0.10 -27.20 ----- 21.2 21.2 148.8 32.4 7.0 -6.7 6.8 -6.4 6.6 -6.7 7.0 -7.4
2026-02-15T03:51:07.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:51:07.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:51:07.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.076841
2026-02-15T03:51:07.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:51:07.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:51:07.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:51:07.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:51:07.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:51:07.530 [DEBUG] [Thread-197445] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:51:07.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:50:41', tmtdew=1.0, humidity=93.25, cloud=0.0, wind=34.61, temperature=6.08, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:50:39.062', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:51:07.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-15T03:51:07.629 [DEBUG] [Thread-197449] [transport.py] [_log()] starting thread (client mode): 0xa2d3f6a0
2026-02-15T03:51:07.630 [DEBUG] [Thread-197449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:51:07.645 [DEBUG] [Thread-197449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:51:07.645 [INFO] [Thread-197449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:51:07.653 [DEBUG] [Thread-197449] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:51:07.653 [DEBUG] [Thread-197449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:51:07.653 [DEBUG] [Thread-197449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:51:07.653 [DEBUG] [Thread-197449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:51:07.653 [DEBUG] [Thread-197449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:51:07.653 [DEBUG] [Thread-197449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:51:07.653 [DEBUG] [Thread-197449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:51:07.653 [DEBUG] [Thread-197449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:51:07.653 [DEBUG] [Thread-197449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:51:07.653 [DEBUG] [Thread-197449] [transport.py] [_log()] client lang: <none>
2026-02-15T03:51:07.653 [DEBUG] [Thread-197449] [transport.py] [_log()] server lang: <none>
2026-02-15T03:51:07.653 [DEBUG] [Thread-197449] [transport.py] [_log()] kex follows: False
2026-02-15T03:51:07.653 [DEBUG] [Thread-197449] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:51:07.653 [DEBUG] [Thread-197449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:51:07.654 [DEBUG] [Thread-197449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:51:07.654 [DEBUG] [Thread-197449] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:51:07.654 [DEBUG] [Thread-197449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:51:07.654 [DEBUG] [Thread-197449] [transport.py] [_log()] Compression: none
2026-02-15T03:51:07.654 [DEBUG] [Thread-197449] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:51:07.711 [DEBUG] [Thread-197449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:51:07.712 [DEBUG] [Thread-197449] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:51:07.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:51:07.713 [DEBUG] [Thread-197449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:51:07.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:51:07.772 [DEBUG] [Thread-197449] [transport.py] [_log()] userauth is OK
2026-02-15T03:51:07.772 [DEBUG] [Thread-197449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:51:07.773 [DEBUG] [Thread-197449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:51:07.773 [DEBUG] [Thread-197449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:51:07.773 [DEBUG] [Thread-197449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:51:07.791 [INFO] [Thread-197449] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:51:07.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T03:51:07.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:51:08.554 [DEBUG] [Thread-197449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:51:08.554 [DEBUG] [Thread-197449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:51:08.603 [DEBUG] [Thread-197449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:51:08.603 [DEBUG] [Thread-197449] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:51:08.612 [DEBUG] [Thread-197449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:51:08.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:51:08.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-15T03:51:08.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:51:08.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:51:08.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:51:08.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:51:08.649 [DEBUG] [Thread-197449] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:51:21.837 [DEBUG] [Thread-197451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:51:22.153 [DEBUG] [Thread-197452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:51:36.888 [DEBUG] [Thread-197453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:51:38.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:51:38.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:51:38.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-15T03:51:40.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 51, 17), 0.54, 96.17, 0.0, 34.3, 5.72, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:51:40.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:51:17
2026-02-15T03:51:40.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:51:41.013 [DEBUG] [Thread-197454] [transport.py] [_log()] starting thread (client mode): 0xa2d3ead0
2026-02-15T03:51:41.013 [DEBUG] [Thread-197454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:51:41.033 [DEBUG] [Thread-197454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:51:41.033 [INFO] [Thread-197454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:51:41.036 [DEBUG] [Thread-197454] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:51:41.036 [DEBUG] [Thread-197454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:51:41.036 [DEBUG] [Thread-197454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:51:41.036 [DEBUG] [Thread-197454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:51:41.036 [DEBUG] [Thread-197454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:51:41.036 [DEBUG] [Thread-197454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:51:41.036 [DEBUG] [Thread-197454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:51:41.036 [DEBUG] [Thread-197454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:51:41.036 [DEBUG] [Thread-197454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:51:41.036 [DEBUG] [Thread-197454] [transport.py] [_log()] client lang: <none>
2026-02-15T03:51:41.036 [DEBUG] [Thread-197454] [transport.py] [_log()] server lang: <none>
2026-02-15T03:51:41.036 [DEBUG] [Thread-197454] [transport.py] [_log()] kex follows: False
2026-02-15T03:51:41.036 [DEBUG] [Thread-197454] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:51:41.036 [DEBUG] [Thread-197454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:51:41.036 [DEBUG] [Thread-197454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:51:41.036 [DEBUG] [Thread-197454] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:51:41.036 [DEBUG] [Thread-197454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:51:41.036 [DEBUG] [Thread-197454] [transport.py] [_log()] Compression: none
2026-02-15T03:51:41.036 [DEBUG] [Thread-197454] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:51:41.052 [DEBUG] [Thread-197454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:51:41.053 [DEBUG] [Thread-197454] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:51:41.053 [DEBUG] [Thread-197454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:51:41.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:51:41.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:51:41.055 [DEBUG] [Thread-197454] [transport.py] [_log()] userauth is OK
2026-02-15T03:51:41.055 [DEBUG] [Thread-197454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:51:41.056 [DEBUG] [Thread-197454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:51:41.056 [DEBUG] [Thread-197454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:51:41.056 [DEBUG] [Thread-197454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:51:41.073 [INFO] [Thread-197454] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:51:41.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:51:41.707 [DEBUG] [Thread-197454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:51:41.707 [DEBUG] [Thread-197454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:51:41.708 [DEBUG] [Thread-197454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:51:41.748 [DEBUG] [Thread-197454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:51:41.748 [DEBUG] [Thread-197454] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:51:41.751 [DEBUG] [Thread-197454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:51:41.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:51:41.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:51:41.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:51:41.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:51:41.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:51:41.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:51:41.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:51:41.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:51:41.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:51:41.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.077189 -999.00   +5.60  26.26     94   +4.80 1 3 1 3 1     0    0 0.05 -28.73 ----- 26.3 26.3 145.6 33.1 7.0 -7.8 6.8 -8.3 6.6 -7.8 7.0 -7.8
2026-02-15T03:51:41.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:51:41.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:51:41.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.077189
2026-02-15T03:51:41.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:51:41.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:51:41.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:51:41.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:51:41.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:51:41.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:51:17', tmtdew=0.54, humidity=96.17, cloud=0.0, wind=34.3, temperature=5.72, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:51:09.130', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:51:41.774 [DEBUG] [Thread-197454] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:51:41.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-15T03:51:41.870 [DEBUG] [Thread-197457] [transport.py] [_log()] starting thread (client mode): 0xa2d3cc40
2026-02-15T03:51:41.871 [DEBUG] [Thread-197457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:51:41.885 [DEBUG] [Thread-197457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:51:41.885 [INFO] [Thread-197457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:51:41.892 [DEBUG] [Thread-197457] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:51:41.893 [DEBUG] [Thread-197457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:51:41.893 [DEBUG] [Thread-197457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:51:41.893 [DEBUG] [Thread-197457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:51:41.893 [DEBUG] [Thread-197457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:51:41.893 [DEBUG] [Thread-197457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:51:41.893 [DEBUG] [Thread-197457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:51:41.893 [DEBUG] [Thread-197457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:51:41.893 [DEBUG] [Thread-197457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:51:41.893 [DEBUG] [Thread-197457] [transport.py] [_log()] client lang: <none>
2026-02-15T03:51:41.893 [DEBUG] [Thread-197457] [transport.py] [_log()] server lang: <none>
2026-02-15T03:51:41.893 [DEBUG] [Thread-197457] [transport.py] [_log()] kex follows: False
2026-02-15T03:51:41.893 [DEBUG] [Thread-197457] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:51:41.893 [DEBUG] [Thread-197457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:51:41.893 [DEBUG] [Thread-197457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:51:41.893 [DEBUG] [Thread-197457] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:51:41.893 [DEBUG] [Thread-197457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:51:41.893 [DEBUG] [Thread-197457] [transport.py] [_log()] Compression: none
2026-02-15T03:51:41.893 [DEBUG] [Thread-197457] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:51:41.950 [DEBUG] [Thread-197457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:51:41.951 [DEBUG] [Thread-197457] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:51:41.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:51:41.952 [DEBUG] [Thread-197457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:51:41.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:51:42.007 [DEBUG] [Thread-197457] [transport.py] [_log()] userauth is OK
2026-02-15T03:51:42.007 [DEBUG] [Thread-197457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:51:42.007 [DEBUG] [Thread-197457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:51:42.007 [DEBUG] [Thread-197457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:51:42.007 [DEBUG] [Thread-197457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:51:42.030 [INFO] [Thread-197457] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:51:42.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-15T03:51:42.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:51:42.828 [DEBUG] [Thread-197457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:51:42.828 [DEBUG] [Thread-197457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:51:42.876 [DEBUG] [Thread-197457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:51:42.876 [DEBUG] [Thread-197457] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:51:42.884 [DEBUG] [Thread-197457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:51:42.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:51:42.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-15T03:51:42.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-15T03:51:42.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:51:42.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:51:42.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:51:42.918 [DEBUG] [Thread-197457] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:51:51.916 [DEBUG] [Thread-197459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:52:01.443 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:52:01.444 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:52:06.964 [DEBUG] [Thread-197460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:52:12.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:52:12.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:52:12.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-15T03:52:14.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 51, 52), 0.54, 96.19, 0.0, 35.98, 5.71, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:52:14.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:51:52
2026-02-15T03:52:15.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:52:15.287 [DEBUG] [Thread-197461] [transport.py] [_log()] starting thread (client mode): 0xa5771930
2026-02-15T03:52:15.287 [DEBUG] [Thread-197461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:52:15.310 [DEBUG] [Thread-197461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:52:15.310 [INFO] [Thread-197461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:52:15.313 [DEBUG] [Thread-197461] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:52:15.314 [DEBUG] [Thread-197461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:52:15.314 [DEBUG] [Thread-197461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:52:15.314 [DEBUG] [Thread-197461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:52:15.314 [DEBUG] [Thread-197461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:52:15.314 [DEBUG] [Thread-197461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:52:15.314 [DEBUG] [Thread-197461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:52:15.314 [DEBUG] [Thread-197461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:52:15.314 [DEBUG] [Thread-197461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:52:15.314 [DEBUG] [Thread-197461] [transport.py] [_log()] client lang: <none>
2026-02-15T03:52:15.314 [DEBUG] [Thread-197461] [transport.py] [_log()] server lang: <none>
2026-02-15T03:52:15.315 [DEBUG] [Thread-197461] [transport.py] [_log()] kex follows: False
2026-02-15T03:52:15.315 [DEBUG] [Thread-197461] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:52:15.315 [DEBUG] [Thread-197461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:52:15.315 [DEBUG] [Thread-197461] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:52:15.315 [DEBUG] [Thread-197461] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:52:15.315 [DEBUG] [Thread-197461] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:52:15.315 [DEBUG] [Thread-197461] [transport.py] [_log()] Compression: none
2026-02-15T03:52:15.315 [DEBUG] [Thread-197461] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:52:15.334 [DEBUG] [Thread-197461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:52:15.334 [DEBUG] [Thread-197461] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:52:15.334 [DEBUG] [Thread-197461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:52:15.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:52:15.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:52:15.335 [DEBUG] [Thread-197461] [transport.py] [_log()] userauth is OK
2026-02-15T03:52:15.335 [DEBUG] [Thread-197461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:52:15.335 [DEBUG] [Thread-197461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:52:15.335 [DEBUG] [Thread-197461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:52:15.335 [DEBUG] [Thread-197461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:52:15.357 [INFO] [Thread-197461] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:52:15.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:52:15.977 [DEBUG] [Thread-197461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:52:15.978 [DEBUG] [Thread-197461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:52:15.978 [DEBUG] [Thread-197461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:52:16.019 [DEBUG] [Thread-197461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:52:16.019 [DEBUG] [Thread-197461] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:52:16.022 [DEBUG] [Thread-197461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:52:16.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:52:16.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:52:16.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:52:16.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:52:16.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:52:16.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:52:16.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:52:16.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:52:16.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:52:16.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.077536 -999.00   +5.60  22.33     94   +4.80 1 3 1 3 1     0    0 0.01 -29.95 ----- 22.3 22.3 153.8 33.3 7.0 -10.2 6.7 -9.9 6.5 -9.3 7.0 -10.1
2026-02-15T03:52:16.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:52:16.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:52:16.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.077536
2026-02-15T03:52:16.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:52:16.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:52:16.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:52:16.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:52:16.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:52:16.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:51:52', tmtdew=0.54, humidity=96.19, cloud=0.0, wind=35.98, temperature=5.71, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:51:39.110', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:52:16.051 [DEBUG] [Thread-197461] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:52:16.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-15T03:52:16.147 [DEBUG] [Thread-197464] [transport.py] [_log()] starting thread (client mode): 0xa57718a0
2026-02-15T03:52:16.147 [DEBUG] [Thread-197464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:52:16.162 [DEBUG] [Thread-197464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:52:16.163 [INFO] [Thread-197464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:52:16.170 [DEBUG] [Thread-197464] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:52:16.171 [DEBUG] [Thread-197464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:52:16.171 [DEBUG] [Thread-197464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:52:16.171 [DEBUG] [Thread-197464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:52:16.171 [DEBUG] [Thread-197464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:52:16.171 [DEBUG] [Thread-197464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:52:16.171 [DEBUG] [Thread-197464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:52:16.171 [DEBUG] [Thread-197464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:52:16.171 [DEBUG] [Thread-197464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:52:16.171 [DEBUG] [Thread-197464] [transport.py] [_log()] client lang: <none>
2026-02-15T03:52:16.171 [DEBUG] [Thread-197464] [transport.py] [_log()] server lang: <none>
2026-02-15T03:52:16.171 [DEBUG] [Thread-197464] [transport.py] [_log()] kex follows: False
2026-02-15T03:52:16.171 [DEBUG] [Thread-197464] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:52:16.171 [DEBUG] [Thread-197464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:52:16.171 [DEBUG] [Thread-197464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:52:16.171 [DEBUG] [Thread-197464] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:52:16.172 [DEBUG] [Thread-197464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:52:16.172 [DEBUG] [Thread-197464] [transport.py] [_log()] Compression: none
2026-02-15T03:52:16.172 [DEBUG] [Thread-197464] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:52:16.231 [DEBUG] [Thread-197464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:52:16.232 [DEBUG] [Thread-197464] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:52:16.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:52:16.233 [DEBUG] [Thread-197464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:52:16.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:52:16.288 [DEBUG] [Thread-197464] [transport.py] [_log()] userauth is OK
2026-02-15T03:52:16.288 [DEBUG] [Thread-197464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:52:16.288 [DEBUG] [Thread-197464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:52:16.288 [DEBUG] [Thread-197464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:52:16.288 [DEBUG] [Thread-197464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:52:16.307 [INFO] [Thread-197464] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:52:16.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-15T03:52:16.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:52:17.127 [DEBUG] [Thread-197464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:52:17.127 [DEBUG] [Thread-197464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:52:17.176 [DEBUG] [Thread-197464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:52:17.176 [DEBUG] [Thread-197464] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:52:17.186 [DEBUG] [Thread-197464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:52:17.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:52:17.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-15T03:52:17.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:52:17.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:52:17.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:52:17.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:52:17.223 [DEBUG] [Thread-197464] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:52:21.999 [DEBUG] [Thread-197466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:52:22.226 [DEBUG] [Thread-197467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:52:37.047 [DEBUG] [Thread-197468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:52:47.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:52:47.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:52:47.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-15T03:52:49.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 52, 27), 0.54, 96.19, 0.0, 35.15, 5.69, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:52:49.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:52:27
2026-02-15T03:52:49.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:52:49.662 [DEBUG] [Thread-197469] [transport.py] [_log()] starting thread (client mode): 0xa2d3cac0
2026-02-15T03:52:49.662 [DEBUG] [Thread-197469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:52:49.682 [DEBUG] [Thread-197469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:52:49.682 [INFO] [Thread-197469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:52:49.685 [DEBUG] [Thread-197469] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:52:49.686 [DEBUG] [Thread-197469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:52:49.686 [DEBUG] [Thread-197469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:52:49.686 [DEBUG] [Thread-197469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:52:49.686 [DEBUG] [Thread-197469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:52:49.686 [DEBUG] [Thread-197469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:52:49.686 [DEBUG] [Thread-197469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:52:49.686 [DEBUG] [Thread-197469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:52:49.686 [DEBUG] [Thread-197469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:52:49.686 [DEBUG] [Thread-197469] [transport.py] [_log()] client lang: <none>
2026-02-15T03:52:49.686 [DEBUG] [Thread-197469] [transport.py] [_log()] server lang: <none>
2026-02-15T03:52:49.686 [DEBUG] [Thread-197469] [transport.py] [_log()] kex follows: False
2026-02-15T03:52:49.686 [DEBUG] [Thread-197469] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:52:49.686 [DEBUG] [Thread-197469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:52:49.687 [DEBUG] [Thread-197469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:52:49.687 [DEBUG] [Thread-197469] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:52:49.687 [DEBUG] [Thread-197469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:52:49.687 [DEBUG] [Thread-197469] [transport.py] [_log()] Compression: none
2026-02-15T03:52:49.687 [DEBUG] [Thread-197469] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:52:49.704 [DEBUG] [Thread-197469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:52:49.704 [DEBUG] [Thread-197469] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:52:49.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:52:49.705 [DEBUG] [Thread-197469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:52:49.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:52:49.707 [DEBUG] [Thread-197469] [transport.py] [_log()] userauth is OK
2026-02-15T03:52:49.707 [DEBUG] [Thread-197469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:52:49.707 [DEBUG] [Thread-197469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:52:49.707 [DEBUG] [Thread-197469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:52:49.708 [DEBUG] [Thread-197469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:52:49.731 [INFO] [Thread-197469] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:52:49.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:52:50.371 [DEBUG] [Thread-197469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:52:50.371 [DEBUG] [Thread-197469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:52:50.372 [DEBUG] [Thread-197469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:52:50.412 [DEBUG] [Thread-197469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:52:50.413 [DEBUG] [Thread-197469] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:52:50.416 [DEBUG] [Thread-197469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:52:50.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:52:50.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:52:50.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:52:50.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:52:50.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:52:50.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:52:50.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:52:50.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:52:50.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:52:50.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.077883 -999.00   +5.60  20.20     94   +4.80 1 3 1 3 1     0    0 0.07 -27.59 ----- 20.2 20.2 158.2 33.1 7.0 -12.8 6.7 -12.1 6.5 -13.4 7.0 -14.3
2026-02-15T03:52:50.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:52:50.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:52:50.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.077883
2026-02-15T03:52:50.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:52:50.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:52:50.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:52:50.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:52:50.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:52:50.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:52:27', tmtdew=0.54, humidity=96.19, cloud=0.0, wind=35.15, temperature=5.69, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:52:09.091', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:52:50.443 [DEBUG] [Thread-197469] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:52:50.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:52:50.540 [DEBUG] [Thread-197472] [transport.py] [_log()] starting thread (client mode): 0xa2d3d750
2026-02-15T03:52:50.540 [DEBUG] [Thread-197472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:52:50.554 [DEBUG] [Thread-197472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:52:50.554 [INFO] [Thread-197472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:52:50.562 [DEBUG] [Thread-197472] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:52:50.562 [DEBUG] [Thread-197472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:52:50.562 [DEBUG] [Thread-197472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:52:50.562 [DEBUG] [Thread-197472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:52:50.562 [DEBUG] [Thread-197472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:52:50.562 [DEBUG] [Thread-197472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:52:50.562 [DEBUG] [Thread-197472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:52:50.562 [DEBUG] [Thread-197472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:52:50.562 [DEBUG] [Thread-197472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:52:50.562 [DEBUG] [Thread-197472] [transport.py] [_log()] client lang: <none>
2026-02-15T03:52:50.562 [DEBUG] [Thread-197472] [transport.py] [_log()] server lang: <none>
2026-02-15T03:52:50.562 [DEBUG] [Thread-197472] [transport.py] [_log()] kex follows: False
2026-02-15T03:52:50.562 [DEBUG] [Thread-197472] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:52:50.563 [DEBUG] [Thread-197472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:52:50.563 [DEBUG] [Thread-197472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:52:50.563 [DEBUG] [Thread-197472] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:52:50.563 [DEBUG] [Thread-197472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:52:50.563 [DEBUG] [Thread-197472] [transport.py] [_log()] Compression: none
2026-02-15T03:52:50.563 [DEBUG] [Thread-197472] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:52:50.618 [DEBUG] [Thread-197472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:52:50.619 [DEBUG] [Thread-197472] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:52:50.620 [DEBUG] [Thread-197472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:52:50.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:52:50.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:52:50.675 [DEBUG] [Thread-197472] [transport.py] [_log()] userauth is OK
2026-02-15T03:52:50.676 [DEBUG] [Thread-197472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:52:50.676 [DEBUG] [Thread-197472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:52:50.676 [DEBUG] [Thread-197472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:52:50.676 [DEBUG] [Thread-197472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:52:50.694 [INFO] [Thread-197472] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:52:50.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-15T03:52:50.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:52:51.493 [DEBUG] [Thread-197472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:52:51.493 [DEBUG] [Thread-197472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:52:51.541 [DEBUG] [Thread-197472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:52:51.541 [DEBUG] [Thread-197472] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:52:51.549 [DEBUG] [Thread-197472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:52:51.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:52:51.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:52:51.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-15T03:52:51.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:52:51.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:52:51.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:52:51.584 [DEBUG] [Thread-197472] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:52:52.081 [DEBUG] [Thread-197474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:53:01.646 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:53:01.648 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:53:07.124 [DEBUG] [Thread-197475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:53:21.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:53:21.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:53:21.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-15T03:53:22.160 [DEBUG] [Thread-197476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:53:22.284 [DEBUG] [Thread-197477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:53:23.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 53, 2), 0.54, 96.22, 0.0, 35.71, 5.66, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:53:23.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:53:02
2026-02-15T03:53:23.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:53:23.901 [DEBUG] [Thread-197478] [transport.py] [_log()] starting thread (client mode): 0xa5772980
2026-02-15T03:53:23.902 [DEBUG] [Thread-197478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:53:23.921 [DEBUG] [Thread-197478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:53:23.922 [INFO] [Thread-197478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:53:23.925 [DEBUG] [Thread-197478] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:53:23.925 [DEBUG] [Thread-197478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:53:23.925 [DEBUG] [Thread-197478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:53:23.925 [DEBUG] [Thread-197478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:53:23.925 [DEBUG] [Thread-197478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:53:23.925 [DEBUG] [Thread-197478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:53:23.925 [DEBUG] [Thread-197478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:53:23.925 [DEBUG] [Thread-197478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:53:23.926 [DEBUG] [Thread-197478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:53:23.926 [DEBUG] [Thread-197478] [transport.py] [_log()] client lang: <none>
2026-02-15T03:53:23.926 [DEBUG] [Thread-197478] [transport.py] [_log()] server lang: <none>
2026-02-15T03:53:23.926 [DEBUG] [Thread-197478] [transport.py] [_log()] kex follows: False
2026-02-15T03:53:23.926 [DEBUG] [Thread-197478] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:53:23.926 [DEBUG] [Thread-197478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:53:23.926 [DEBUG] [Thread-197478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:53:23.926 [DEBUG] [Thread-197478] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:53:23.926 [DEBUG] [Thread-197478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:53:23.926 [DEBUG] [Thread-197478] [transport.py] [_log()] Compression: none
2026-02-15T03:53:23.926 [DEBUG] [Thread-197478] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:53:23.943 [DEBUG] [Thread-197478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:53:23.943 [DEBUG] [Thread-197478] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:53:23.943 [DEBUG] [Thread-197478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:53:23.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:53:23.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:53:23.944 [DEBUG] [Thread-197478] [transport.py] [_log()] userauth is OK
2026-02-15T03:53:23.944 [DEBUG] [Thread-197478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:53:23.944 [DEBUG] [Thread-197478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:53:23.944 [DEBUG] [Thread-197478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:53:23.944 [DEBUG] [Thread-197478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:53:23.952 [INFO] [Thread-197478] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:53:23.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:53:24.592 [DEBUG] [Thread-197478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:53:24.592 [DEBUG] [Thread-197478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:53:24.592 [DEBUG] [Thread-197478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:53:24.632 [DEBUG] [Thread-197478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:53:24.633 [DEBUG] [Thread-197478] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:53:24.636 [DEBUG] [Thread-197478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:53:24.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:53:24.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:53:24.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:53:24.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:53:24.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:53:24.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:53:24.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:53:24.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:53:24.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:53:24.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.078230 -999.00   +5.60  28.98     94   +4.80 1 3 1 3 1     0    0 0.09 -26.12 ----- 29.0 29.0 148.8 30.5 7.0 -11.1 6.7 -9.7 6.5 -10.9 7.0 -11.8
2026-02-15T03:53:24.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:53:24.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:53:24.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.078230
2026-02-15T03:53:24.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:53:24.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:53:24.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:53:24.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:53:24.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:53:24.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:53:02', tmtdew=0.54, humidity=96.22, cloud=0.0, wind=35.71, temperature=5.66, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:52:39.072', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:53:24.662 [DEBUG] [Thread-197478] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:53:24.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-15T03:53:24.756 [DEBUG] [Thread-197481] [transport.py] [_log()] starting thread (client mode): 0xa57d5f30
2026-02-15T03:53:24.756 [DEBUG] [Thread-197481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:53:24.770 [DEBUG] [Thread-197481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:53:24.770 [INFO] [Thread-197481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:53:24.778 [DEBUG] [Thread-197481] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:53:24.778 [DEBUG] [Thread-197481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:53:24.778 [DEBUG] [Thread-197481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:53:24.778 [DEBUG] [Thread-197481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:53:24.778 [DEBUG] [Thread-197481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:53:24.778 [DEBUG] [Thread-197481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:53:24.778 [DEBUG] [Thread-197481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:53:24.778 [DEBUG] [Thread-197481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:53:24.778 [DEBUG] [Thread-197481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:53:24.778 [DEBUG] [Thread-197481] [transport.py] [_log()] client lang: <none>
2026-02-15T03:53:24.778 [DEBUG] [Thread-197481] [transport.py] [_log()] server lang: <none>
2026-02-15T03:53:24.778 [DEBUG] [Thread-197481] [transport.py] [_log()] kex follows: False
2026-02-15T03:53:24.778 [DEBUG] [Thread-197481] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:53:24.778 [DEBUG] [Thread-197481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:53:24.778 [DEBUG] [Thread-197481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:53:24.778 [DEBUG] [Thread-197481] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:53:24.778 [DEBUG] [Thread-197481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:53:24.778 [DEBUG] [Thread-197481] [transport.py] [_log()] Compression: none
2026-02-15T03:53:24.778 [DEBUG] [Thread-197481] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:53:24.833 [DEBUG] [Thread-197481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:53:24.833 [DEBUG] [Thread-197481] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:53:24.833 [DEBUG] [Thread-197481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:53:24.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:53:24.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:53:24.891 [DEBUG] [Thread-197481] [transport.py] [_log()] userauth is OK
2026-02-15T03:53:24.892 [DEBUG] [Thread-197481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:53:24.892 [DEBUG] [Thread-197481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:53:24.892 [DEBUG] [Thread-197481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:53:24.892 [DEBUG] [Thread-197481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:53:24.911 [INFO] [Thread-197481] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:53: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-15T03:53:24.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:53:25.748 [DEBUG] [Thread-197481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:53:25.749 [DEBUG] [Thread-197481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:53:25.796 [DEBUG] [Thread-197481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:53:25.797 [DEBUG] [Thread-197481] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:53:25.806 [DEBUG] [Thread-197481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:53:25.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:53:25.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:53: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') -> 00000000
2026-02-15T03:53:25.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:53:25.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:53:25.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:53:25.843 [DEBUG] [Thread-197481] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:53:37.196 [DEBUG] [Thread-197483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:53:52.251 [DEBUG] [Thread-197484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:53:55.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:53:55.865 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:53:55.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-15T03:53:57.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 53, 37), 0.96, 93.51, 0.0, 36.59, 6.01, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:53:57.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:53:37
2026-02-15T03:53:58.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:53:58.545 [DEBUG] [Thread-197485] [transport.py] [_log()] starting thread (client mode): 0xa57d7310
2026-02-15T03:53:58.545 [DEBUG] [Thread-197485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:53:58.565 [DEBUG] [Thread-197485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:53:58.565 [INFO] [Thread-197485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:53:58.568 [DEBUG] [Thread-197485] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:53:58.569 [DEBUG] [Thread-197485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:53:58.569 [DEBUG] [Thread-197485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:53:58.569 [DEBUG] [Thread-197485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:53:58.569 [DEBUG] [Thread-197485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:53:58.569 [DEBUG] [Thread-197485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:53:58.569 [DEBUG] [Thread-197485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:53:58.569 [DEBUG] [Thread-197485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:53:58.569 [DEBUG] [Thread-197485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:53:58.569 [DEBUG] [Thread-197485] [transport.py] [_log()] client lang: <none>
2026-02-15T03:53:58.569 [DEBUG] [Thread-197485] [transport.py] [_log()] server lang: <none>
2026-02-15T03:53:58.569 [DEBUG] [Thread-197485] [transport.py] [_log()] kex follows: False
2026-02-15T03:53:58.569 [DEBUG] [Thread-197485] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:53:58.569 [DEBUG] [Thread-197485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:53:58.569 [DEBUG] [Thread-197485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:53:58.570 [DEBUG] [Thread-197485] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:53:58.570 [DEBUG] [Thread-197485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:53:58.570 [DEBUG] [Thread-197485] [transport.py] [_log()] Compression: none
2026-02-15T03:53:58.570 [DEBUG] [Thread-197485] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:53:58.592 [DEBUG] [Thread-197485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:53:58.593 [DEBUG] [Thread-197485] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:53:58.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:53:58.593 [DEBUG] [Thread-197485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:53:58.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:53:58.596 [DEBUG] [Thread-197485] [transport.py] [_log()] userauth is OK
2026-02-15T03:53:58.596 [DEBUG] [Thread-197485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:53:58.596 [DEBUG] [Thread-197485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:53:58.597 [DEBUG] [Thread-197485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:53:58.597 [DEBUG] [Thread-197485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:53:58.632 [INFO] [Thread-197485] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:53:58.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:53:59.280 [DEBUG] [Thread-197485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:53:59.280 [DEBUG] [Thread-197485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:53:59.280 [DEBUG] [Thread-197485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:53:59.321 [DEBUG] [Thread-197485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:53:59.321 [DEBUG] [Thread-197485] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:53:59.324 [DEBUG] [Thread-197485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:53:59.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:53:59.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:53:59.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:53:59.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:53:59.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:53:59.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:53:59.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:53:59.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:53:59.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:53:59.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.078925 -999.00   +5.60  20.88     94   +4.80 1 3 1 3 1     0    0 0.15 -24.52 ----- 20.9 20.9 144.6 35.1 6.9 -12.1 6.7 -10.8 6.5 -10.6 6.9 -11.1
2026-02-15T03:53:59.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:53:59.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:53:59.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.078925
2026-02-15T03:53:59.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:53:59.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:53:59.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:53:59.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:53:59.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:53:59.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:53:37', tmtdew=0.96, humidity=93.51, cloud=0.0, wind=36.59, temperature=6.01, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:53:39.120', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:53:59.349 [DEBUG] [Thread-197485] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:53:59.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-15T03:53:59.445 [DEBUG] [Thread-197488] [transport.py] [_log()] starting thread (client mode): 0xa2d3d1e0
2026-02-15T03:53:59.445 [DEBUG] [Thread-197488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:53:59.461 [DEBUG] [Thread-197488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:53:59.461 [INFO] [Thread-197488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:53:59.469 [DEBUG] [Thread-197488] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:53:59.469 [DEBUG] [Thread-197488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:53:59.469 [DEBUG] [Thread-197488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:53:59.469 [DEBUG] [Thread-197488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:53:59.469 [DEBUG] [Thread-197488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:53:59.470 [DEBUG] [Thread-197488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:53:59.470 [DEBUG] [Thread-197488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:53:59.470 [DEBUG] [Thread-197488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:53:59.470 [DEBUG] [Thread-197488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:53:59.470 [DEBUG] [Thread-197488] [transport.py] [_log()] client lang: <none>
2026-02-15T03:53:59.470 [DEBUG] [Thread-197488] [transport.py] [_log()] server lang: <none>
2026-02-15T03:53:59.470 [DEBUG] [Thread-197488] [transport.py] [_log()] kex follows: False
2026-02-15T03:53:59.470 [DEBUG] [Thread-197488] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:53:59.470 [DEBUG] [Thread-197488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:53:59.471 [DEBUG] [Thread-197488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:53:59.471 [DEBUG] [Thread-197488] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:53:59.471 [DEBUG] [Thread-197488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:53:59.471 [DEBUG] [Thread-197488] [transport.py] [_log()] Compression: none
2026-02-15T03:53:59.471 [DEBUG] [Thread-197488] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:53:59.527 [DEBUG] [Thread-197488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:53:59.527 [DEBUG] [Thread-197488] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:53:59.528 [DEBUG] [Thread-197488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:53:59.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:53:59.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:53:59.584 [DEBUG] [Thread-197488] [transport.py] [_log()] userauth is OK
2026-02-15T03:53:59.584 [DEBUG] [Thread-197488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:53:59.584 [DEBUG] [Thread-197488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:53:59.584 [DEBUG] [Thread-197488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:53:59.584 [DEBUG] [Thread-197488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:53:59.603 [INFO] [Thread-197488] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:53:59.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-15T03:53:59.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:54:00.410 [DEBUG] [Thread-197488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:54:00.410 [DEBUG] [Thread-197488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:54:00.458 [DEBUG] [Thread-197488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:54:00.459 [DEBUG] [Thread-197488] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:54:00.468 [DEBUG] [Thread-197488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:54:00.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:54:00.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-15T03:54:00.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-15T03:54:00.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:54:00.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:54:00.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:54:00.505 [DEBUG] [Thread-197488] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:54:01.864 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:54:01.865 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:54:07.289 [DEBUG] [Thread-197490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:54:22.342 [DEBUG] [Thread-197491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:54:22.350 [DEBUG] [Thread-197492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:54:30.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:54:30.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:54:30.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-15T03:54:32.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 54, 13), 0.53, 96.29, 0.0, 32.55, 5.67, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:54:32.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:54:13
2026-02-15T03:54:32.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:54:32.805 [DEBUG] [Thread-197493] [transport.py] [_log()] starting thread (client mode): 0xa5773ac0
2026-02-15T03:54:32.805 [DEBUG] [Thread-197493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:54:32.825 [DEBUG] [Thread-197493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:54:32.826 [INFO] [Thread-197493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:54:32.828 [DEBUG] [Thread-197493] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:54:32.829 [DEBUG] [Thread-197493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:54:32.829 [DEBUG] [Thread-197493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:54:32.829 [DEBUG] [Thread-197493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:54:32.829 [DEBUG] [Thread-197493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:54:32.829 [DEBUG] [Thread-197493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:54:32.829 [DEBUG] [Thread-197493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:54:32.829 [DEBUG] [Thread-197493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:54:32.829 [DEBUG] [Thread-197493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:54:32.829 [DEBUG] [Thread-197493] [transport.py] [_log()] client lang: <none>
2026-02-15T03:54:32.829 [DEBUG] [Thread-197493] [transport.py] [_log()] server lang: <none>
2026-02-15T03:54:32.829 [DEBUG] [Thread-197493] [transport.py] [_log()] kex follows: False
2026-02-15T03:54:32.829 [DEBUG] [Thread-197493] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:54:32.829 [DEBUG] [Thread-197493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:54:32.829 [DEBUG] [Thread-197493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:54:32.829 [DEBUG] [Thread-197493] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:54:32.829 [DEBUG] [Thread-197493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:54:32.829 [DEBUG] [Thread-197493] [transport.py] [_log()] Compression: none
2026-02-15T03:54:32.829 [DEBUG] [Thread-197493] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:54:32.847 [DEBUG] [Thread-197493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:54:32.847 [DEBUG] [Thread-197493] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:54:32.848 [DEBUG] [Thread-197493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:54:32.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:54:32.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:54:32.850 [DEBUG] [Thread-197493] [transport.py] [_log()] userauth is OK
2026-02-15T03:54:32.850 [DEBUG] [Thread-197493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:54:32.850 [DEBUG] [Thread-197493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:54:32.850 [DEBUG] [Thread-197493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:54:32.850 [DEBUG] [Thread-197493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:54:32.874 [INFO] [Thread-197493] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:54:32.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:54:33.507 [DEBUG] [Thread-197493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:54:33.507 [DEBUG] [Thread-197493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:54:33.507 [DEBUG] [Thread-197493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:54:33.547 [DEBUG] [Thread-197493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:54:33.548 [DEBUG] [Thread-197493] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:54:33.550 [DEBUG] [Thread-197493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:54:33.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:54:33.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:54:33.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:54:33.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:54:33.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:54:33.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:54:33.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:54:33.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:54:33.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:54:33.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.079272 -999.00   +5.60  21.17     94   +4.80 1 3 1 3 1     0    0 0.18 -22.99 ----- 21.2 21.2 143.9 34.5 6.9 -12.7 6.7 -11.7 6.5 -11.5 6.9 -12.1
2026-02-15T03:54:33.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:54:33.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:54:33.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.079272
2026-02-15T03:54:33.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:54:33.577 [DEBUG] [Thread-197493] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:54:33.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:54:33.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:54:33.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:54:33.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:54:33.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:54:13', tmtdew=0.53, humidity=96.29, cloud=0.0, wind=32.55, temperature=5.67, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:54:09.101', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:54:33.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-15T03:54:33.683 [DEBUG] [Thread-197496] [transport.py] [_log()] starting thread (client mode): 0xa2d3c310
2026-02-15T03:54:33.683 [DEBUG] [Thread-197496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:54:33.698 [DEBUG] [Thread-197496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:54:33.698 [INFO] [Thread-197496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:54:33.706 [DEBUG] [Thread-197496] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:54:33.706 [DEBUG] [Thread-197496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:54:33.706 [DEBUG] [Thread-197496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:54:33.706 [DEBUG] [Thread-197496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:54:33.706 [DEBUG] [Thread-197496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:54:33.707 [DEBUG] [Thread-197496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:54:33.707 [DEBUG] [Thread-197496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:54:33.707 [DEBUG] [Thread-197496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:54:33.707 [DEBUG] [Thread-197496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:54:33.707 [DEBUG] [Thread-197496] [transport.py] [_log()] client lang: <none>
2026-02-15T03:54:33.707 [DEBUG] [Thread-197496] [transport.py] [_log()] server lang: <none>
2026-02-15T03:54:33.707 [DEBUG] [Thread-197496] [transport.py] [_log()] kex follows: False
2026-02-15T03:54:33.707 [DEBUG] [Thread-197496] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:54:33.707 [DEBUG] [Thread-197496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:54:33.707 [DEBUG] [Thread-197496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:54:33.707 [DEBUG] [Thread-197496] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:54:33.707 [DEBUG] [Thread-197496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:54:33.707 [DEBUG] [Thread-197496] [transport.py] [_log()] Compression: none
2026-02-15T03:54:33.707 [DEBUG] [Thread-197496] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:54:33.763 [DEBUG] [Thread-197496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:54:33.763 [DEBUG] [Thread-197496] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:54:33.764 [DEBUG] [Thread-197496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:54:33.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:54:33.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:54:33.819 [DEBUG] [Thread-197496] [transport.py] [_log()] userauth is OK
2026-02-15T03:54:33.820 [DEBUG] [Thread-197496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:54:33.820 [DEBUG] [Thread-197496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:54:33.820 [DEBUG] [Thread-197496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:54:33.820 [DEBUG] [Thread-197496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:54:33.839 [INFO] [Thread-197496] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:54:33.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-15T03:54:33.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:54:34.660 [DEBUG] [Thread-197496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:54:34.660 [DEBUG] [Thread-197496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:54:34.708 [DEBUG] [Thread-197496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:54:34.709 [DEBUG] [Thread-197496] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:54:34.719 [DEBUG] [Thread-197496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:54:34.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:54:34.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-15T03:54:34.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:54:34.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:54:34.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:54:34.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:54:34.758 [DEBUG] [Thread-197496] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:54:37.384 [DEBUG] [Thread-197498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:54:52.439 [DEBUG] [Thread-197499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:55:02.070 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:55:02.071 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:55:04.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:55:04.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:55:04.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-15T03:55:06.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 54, 49), 0.54, 96.21, 0.0, 35.36, 5.61, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:55:06.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:54:49
2026-02-15T03:55:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:55:07.395 [DEBUG] [Thread-197500] [transport.py] [_log()] starting thread (client mode): 0xa57d42b0
2026-02-15T03:55:07.396 [DEBUG] [Thread-197500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:55:07.416 [DEBUG] [Thread-197500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:55:07.416 [INFO] [Thread-197500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:55:07.419 [DEBUG] [Thread-197500] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:55:07.419 [DEBUG] [Thread-197500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:55:07.419 [DEBUG] [Thread-197500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:55:07.419 [DEBUG] [Thread-197500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:55:07.419 [DEBUG] [Thread-197500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:55:07.419 [DEBUG] [Thread-197500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:55:07.420 [DEBUG] [Thread-197500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:55:07.420 [DEBUG] [Thread-197500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:55:07.420 [DEBUG] [Thread-197500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:55:07.420 [DEBUG] [Thread-197500] [transport.py] [_log()] client lang: <none>
2026-02-15T03:55:07.420 [DEBUG] [Thread-197500] [transport.py] [_log()] server lang: <none>
2026-02-15T03:55:07.420 [DEBUG] [Thread-197500] [transport.py] [_log()] kex follows: False
2026-02-15T03:55:07.420 [DEBUG] [Thread-197500] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:55:07.420 [DEBUG] [Thread-197500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:55:07.420 [DEBUG] [Thread-197500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:55:07.420 [DEBUG] [Thread-197500] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:55:07.420 [DEBUG] [Thread-197500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:55:07.420 [DEBUG] [Thread-197500] [transport.py] [_log()] Compression: none
2026-02-15T03:55:07.420 [DEBUG] [Thread-197500] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:55:07.438 [DEBUG] [Thread-197500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:55:07.439 [DEBUG] [Thread-197500] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:55:07.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:55:07.441 [DEBUG] [Thread-197500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:55:07.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:55:07.443 [DEBUG] [Thread-197500] [transport.py] [_log()] userauth is OK
2026-02-15T03:55:07.443 [DEBUG] [Thread-197500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:55:07.443 [DEBUG] [Thread-197500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:55:07.443 [DEBUG] [Thread-197500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:55:07.443 [DEBUG] [Thread-197500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:55:07.465 [INFO] [Thread-197500] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:55:07.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:55:07.478 [DEBUG] [Thread-197502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:55:16.460 [DEBUG] [Thread-197500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:55:16.460 [DEBUG] [Thread-197500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:55:16.470 [DEBUG] [Thread-197500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:55:16.501 [DEBUG] [Thread-197500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:55:16.501 [DEBUG] [Thread-197500] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:55:16.506 [DEBUG] [Thread-197500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:55:16.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:55:16.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:55:16.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:55:16.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:55:16.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:55:16.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:55:16.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:55:16.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:55:16.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:55:16.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.079619 -999.00   +5.50  23.24     94   +4.80 1 3 1 3 1     0    0 0.17 -22.60 ----- 23.2 23.2 156.0 37.1 6.9 -11.7 6.7 -11.8 6.5 -11.4 6.9 -11.6
2026-02-15T03:55:16.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:55:16.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:55:16.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.079619
2026-02-15T03:55:16.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:55:16.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:55:16.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:55:16.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:55:16.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:55:16.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:54:49', tmtdew=0.54, humidity=96.21, cloud=0.0, wind=35.36, temperature=5.61, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:54:39.082', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:55:16.622 [DEBUG] [Thread-197500] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:55:16.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T03:55:16.718 [DEBUG] [Thread-197504] [transport.py] [_log()] starting thread (client mode): 0xa57d4e80
2026-02-15T03:55:16.718 [DEBUG] [Thread-197504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:55:16.734 [DEBUG] [Thread-197504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:55:16.735 [INFO] [Thread-197504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:55:16.742 [DEBUG] [Thread-197504] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:55:16.742 [DEBUG] [Thread-197504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:55:16.742 [DEBUG] [Thread-197504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:55:16.742 [DEBUG] [Thread-197504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:55:16.743 [DEBUG] [Thread-197504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:55:16.743 [DEBUG] [Thread-197504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:55:16.743 [DEBUG] [Thread-197504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:55:16.743 [DEBUG] [Thread-197504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:55:16.743 [DEBUG] [Thread-197504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:55:16.743 [DEBUG] [Thread-197504] [transport.py] [_log()] client lang: <none>
2026-02-15T03:55:16.743 [DEBUG] [Thread-197504] [transport.py] [_log()] server lang: <none>
2026-02-15T03:55:16.743 [DEBUG] [Thread-197504] [transport.py] [_log()] kex follows: False
2026-02-15T03:55:16.743 [DEBUG] [Thread-197504] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:55:16.743 [DEBUG] [Thread-197504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:55:16.743 [DEBUG] [Thread-197504] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:55:16.743 [DEBUG] [Thread-197504] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:55:16.743 [DEBUG] [Thread-197504] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:55:16.743 [DEBUG] [Thread-197504] [transport.py] [_log()] Compression: none
2026-02-15T03:55:16.743 [DEBUG] [Thread-197504] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:55:16.803 [DEBUG] [Thread-197504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:55:16.804 [DEBUG] [Thread-197504] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:55:16.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:55:16.805 [DEBUG] [Thread-197504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:55:16.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:55:16.862 [DEBUG] [Thread-197504] [transport.py] [_log()] userauth is OK
2026-02-15T03:55:16.863 [DEBUG] [Thread-197504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:55:16.863 [DEBUG] [Thread-197504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:55:16.863 [DEBUG] [Thread-197504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:55:16.863 [DEBUG] [Thread-197504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:55:16.883 [INFO] [Thread-197504] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:55:16.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-15T03:55:16.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:55:17.698 [DEBUG] [Thread-197504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:55:17.698 [DEBUG] [Thread-197504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:55:17.746 [DEBUG] [Thread-197504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:55:17.746 [DEBUG] [Thread-197504] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:55:17.755 [DEBUG] [Thread-197504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:55:17.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:55:17.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-15T03:55:17.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-15T03:55:17.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:55:17.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:55:17.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:55:17.788 [DEBUG] [Thread-197504] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:55:22.405 [DEBUG] [Thread-197506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:55:22.514 [DEBUG] [Thread-197507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:55:37.574 [DEBUG] [Thread-197508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:55:47.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:55:47.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:55:47.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T03:55:49.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 55, 24), 0.52, 96.32, 0.0, 35.34, 5.69, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:55:49.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:55:24
2026-02-15T03:55:50.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:55:50.233 [DEBUG] [Thread-197509] [transport.py] [_log()] starting thread (client mode): 0xa2d85cf0
2026-02-15T03:55:50.234 [DEBUG] [Thread-197509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:55:50.254 [DEBUG] [Thread-197509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:55:50.254 [INFO] [Thread-197509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:55:50.257 [DEBUG] [Thread-197509] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:55:50.258 [DEBUG] [Thread-197509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:55:50.258 [DEBUG] [Thread-197509] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:55:50.258 [DEBUG] [Thread-197509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:55:50.258 [DEBUG] [Thread-197509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:55:50.258 [DEBUG] [Thread-197509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:55:50.258 [DEBUG] [Thread-197509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:55:50.258 [DEBUG] [Thread-197509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:55:50.258 [DEBUG] [Thread-197509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:55:50.258 [DEBUG] [Thread-197509] [transport.py] [_log()] client lang: <none>
2026-02-15T03:55:50.258 [DEBUG] [Thread-197509] [transport.py] [_log()] server lang: <none>
2026-02-15T03:55:50.258 [DEBUG] [Thread-197509] [transport.py] [_log()] kex follows: False
2026-02-15T03:55:50.258 [DEBUG] [Thread-197509] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:55:50.258 [DEBUG] [Thread-197509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:55:50.258 [DEBUG] [Thread-197509] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:55:50.258 [DEBUG] [Thread-197509] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:55:50.258 [DEBUG] [Thread-197509] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:55:50.258 [DEBUG] [Thread-197509] [transport.py] [_log()] Compression: none
2026-02-15T03:55:50.258 [DEBUG] [Thread-197509] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:55:50.276 [DEBUG] [Thread-197509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:55:50.277 [DEBUG] [Thread-197509] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:55:50.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:55:50.278 [DEBUG] [Thread-197509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:55:50.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:55:50.280 [DEBUG] [Thread-197509] [transport.py] [_log()] userauth is OK
2026-02-15T03:55:50.280 [DEBUG] [Thread-197509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:55:50.280 [DEBUG] [Thread-197509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:55:50.281 [DEBUG] [Thread-197509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:55:50.281 [DEBUG] [Thread-197509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:55:50.305 [INFO] [Thread-197509] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:55:50.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:55:50.962 [DEBUG] [Thread-197509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:55:50.962 [DEBUG] [Thread-197509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:55:50.962 [DEBUG] [Thread-197509] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:55:51.002 [DEBUG] [Thread-197509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:55:51.003 [DEBUG] [Thread-197509] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:55:51.006 [DEBUG] [Thread-197509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:55:51.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:55:51.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:55:51.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:55:51.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:55:51.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:55:51.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:55:51.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:55:51.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:55:51.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:55:51.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.079966 -999.00   +5.50  22.62     94   +4.80 1 3 1 3 1     0    0 0.24 -20.67 ----- 22.6 22.6 143.2 29.3 6.9 -11.5 6.6 -11.4 6.5 -12.1 6.8 -12.7
2026-02-15T03:55:51.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:55:51.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:55:51.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.079966
2026-02-15T03:55:51.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:55:51.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:55:51.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:55:51.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:55:51.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:55:51.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:55:24', tmtdew=0.52, humidity=96.32, cloud=0.0, wind=35.34, temperature=5.69, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:55:09.062', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:55:51.031 [DEBUG] [Thread-197509] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:55:51.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-15T03:55:51.128 [DEBUG] [Thread-197512] [transport.py] [_log()] starting thread (client mode): 0xa2d843a0
2026-02-15T03:55:51.128 [DEBUG] [Thread-197512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:55:51.143 [DEBUG] [Thread-197512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:55:51.143 [INFO] [Thread-197512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:55:51.150 [DEBUG] [Thread-197512] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:55:51.150 [DEBUG] [Thread-197512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:55:51.150 [DEBUG] [Thread-197512] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:55:51.150 [DEBUG] [Thread-197512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:55:51.150 [DEBUG] [Thread-197512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:55:51.150 [DEBUG] [Thread-197512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:55:51.150 [DEBUG] [Thread-197512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:55:51.150 [DEBUG] [Thread-197512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:55:51.150 [DEBUG] [Thread-197512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:55:51.150 [DEBUG] [Thread-197512] [transport.py] [_log()] client lang: <none>
2026-02-15T03:55:51.150 [DEBUG] [Thread-197512] [transport.py] [_log()] server lang: <none>
2026-02-15T03:55:51.150 [DEBUG] [Thread-197512] [transport.py] [_log()] kex follows: False
2026-02-15T03:55:51.150 [DEBUG] [Thread-197512] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:55:51.150 [DEBUG] [Thread-197512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:55:51.150 [DEBUG] [Thread-197512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:55:51.150 [DEBUG] [Thread-197512] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:55:51.150 [DEBUG] [Thread-197512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:55:51.150 [DEBUG] [Thread-197512] [transport.py] [_log()] Compression: none
2026-02-15T03:55:51.150 [DEBUG] [Thread-197512] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:55:51.205 [DEBUG] [Thread-197512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:55:51.205 [DEBUG] [Thread-197512] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:55:51.205 [DEBUG] [Thread-197512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:55:51.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:55:51.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:55:51.262 [DEBUG] [Thread-197512] [transport.py] [_log()] userauth is OK
2026-02-15T03:55:51.263 [DEBUG] [Thread-197512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:55:51.263 [DEBUG] [Thread-197512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:55:51.263 [DEBUG] [Thread-197512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:55:51.263 [DEBUG] [Thread-197512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:55:51.286 [INFO] [Thread-197512] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:55:51.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-15T03:55:51.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:55:52.089 [DEBUG] [Thread-197512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:55:52.089 [DEBUG] [Thread-197512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:55:52.137 [DEBUG] [Thread-197512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:55:52.138 [DEBUG] [Thread-197512] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:55:52.148 [DEBUG] [Thread-197512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:55:52.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:55:52.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-15T03:55:52.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-15T03:55:52.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:55:52.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:55:52.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:55:52.184 [DEBUG] [Thread-197512] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:55:52.613 [DEBUG] [Thread-197514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:56:02.272 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:56:02.273 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:56:07.669 [DEBUG] [Thread-197515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:56:22.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:56:22.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:56:22.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-15T03:56:22.469 [DEBUG] [Thread-197516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:56:22.709 [DEBUG] [Thread-197517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:56:24.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 55, 59), 0.52, 96.32, 0.0, 32.4, 5.69, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:56:24.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:55:59
2026-02-15T03:56:24.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:56:24.500 [DEBUG] [Thread-197518] [transport.py] [_log()] starting thread (client mode): 0xa5771360
2026-02-15T03:56:24.500 [DEBUG] [Thread-197518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:56:24.520 [DEBUG] [Thread-197518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:56:24.520 [INFO] [Thread-197518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:56:24.523 [DEBUG] [Thread-197518] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:56:24.523 [DEBUG] [Thread-197518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:56:24.523 [DEBUG] [Thread-197518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:56:24.523 [DEBUG] [Thread-197518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:56:24.523 [DEBUG] [Thread-197518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:56:24.523 [DEBUG] [Thread-197518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:56:24.523 [DEBUG] [Thread-197518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:56:24.523 [DEBUG] [Thread-197518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:56:24.523 [DEBUG] [Thread-197518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:56:24.523 [DEBUG] [Thread-197518] [transport.py] [_log()] client lang: <none>
2026-02-15T03:56:24.523 [DEBUG] [Thread-197518] [transport.py] [_log()] server lang: <none>
2026-02-15T03:56:24.523 [DEBUG] [Thread-197518] [transport.py] [_log()] kex follows: False
2026-02-15T03:56:24.523 [DEBUG] [Thread-197518] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:56:24.523 [DEBUG] [Thread-197518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:56:24.523 [DEBUG] [Thread-197518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:56:24.523 [DEBUG] [Thread-197518] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:56:24.523 [DEBUG] [Thread-197518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:56:24.523 [DEBUG] [Thread-197518] [transport.py] [_log()] Compression: none
2026-02-15T03:56:24.523 [DEBUG] [Thread-197518] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:56:24.539 [DEBUG] [Thread-197518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:56:24.540 [DEBUG] [Thread-197518] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:56:24.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:56:24.541 [DEBUG] [Thread-197518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:56:24.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:56:24.543 [DEBUG] [Thread-197518] [transport.py] [_log()] userauth is OK
2026-02-15T03:56:24.543 [DEBUG] [Thread-197518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:56:24.544 [DEBUG] [Thread-197518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:56:24.544 [DEBUG] [Thread-197518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:56:24.544 [DEBUG] [Thread-197518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:56:24.568 [INFO] [Thread-197518] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:56:24.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:56:25.193 [DEBUG] [Thread-197518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:56:25.194 [DEBUG] [Thread-197518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:56:25.194 [DEBUG] [Thread-197518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:56:25.234 [DEBUG] [Thread-197518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:56:25.234 [DEBUG] [Thread-197518] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:56:25.238 [DEBUG] [Thread-197518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:56:25.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:56:25.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:56:25.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:56:25.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:56:25.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:56:25.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:56:25.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:56:25.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:56:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:56:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.080314 -999.00   +5.50  27.26     94   +4.80 1 3 1 3 1     0    0 0.26 -20.05 ----- 27.3 27.3 145.4 34.0 6.9 -12.9 6.6 -13.3 6.5 -13.3 6.8 -14.2
2026-02-15T03:56:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:56:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:56:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.080314
2026-02-15T03:56:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:56:25.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:56:25.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:56:25.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:56:25.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:56:25.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:55:59', tmtdew=0.52, humidity=96.32, cloud=0.0, wind=32.4, temperature=5.69, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:55:39.130', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:56:25.265 [DEBUG] [Thread-197518] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:56:25.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-15T03:56:25.359 [DEBUG] [Thread-197521] [transport.py] [_log()] starting thread (client mode): 0xa2d3f070
2026-02-15T03:56:25.360 [DEBUG] [Thread-197521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:56:25.374 [DEBUG] [Thread-197521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:56:25.374 [INFO] [Thread-197521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:56:25.382 [DEBUG] [Thread-197521] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:56:25.382 [DEBUG] [Thread-197521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:56:25.382 [DEBUG] [Thread-197521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:56:25.382 [DEBUG] [Thread-197521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:56:25.382 [DEBUG] [Thread-197521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:56:25.383 [DEBUG] [Thread-197521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:56:25.383 [DEBUG] [Thread-197521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:56:25.383 [DEBUG] [Thread-197521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:56:25.383 [DEBUG] [Thread-197521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:56:25.383 [DEBUG] [Thread-197521] [transport.py] [_log()] client lang: <none>
2026-02-15T03:56:25.383 [DEBUG] [Thread-197521] [transport.py] [_log()] server lang: <none>
2026-02-15T03:56:25.383 [DEBUG] [Thread-197521] [transport.py] [_log()] kex follows: False
2026-02-15T03:56:25.383 [DEBUG] [Thread-197521] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:56:25.383 [DEBUG] [Thread-197521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:56:25.383 [DEBUG] [Thread-197521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:56:25.384 [DEBUG] [Thread-197521] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:56:25.384 [DEBUG] [Thread-197521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:56:25.384 [DEBUG] [Thread-197521] [transport.py] [_log()] Compression: none
2026-02-15T03:56:25.384 [DEBUG] [Thread-197521] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:56:25.440 [DEBUG] [Thread-197521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:56:25.441 [DEBUG] [Thread-197521] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:56:25.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:56:25.442 [DEBUG] [Thread-197521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:56:25.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:56:25.499 [DEBUG] [Thread-197521] [transport.py] [_log()] userauth is OK
2026-02-15T03:56:25.499 [DEBUG] [Thread-197521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:56:25.500 [DEBUG] [Thread-197521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:56:25.500 [DEBUG] [Thread-197521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:56:25.500 [DEBUG] [Thread-197521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:56:25.525 [INFO] [Thread-197521] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:56:25.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-15T03:56:25.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:56:26.328 [DEBUG] [Thread-197521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:56:26.328 [DEBUG] [Thread-197521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:56:26.376 [DEBUG] [Thread-197521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:56:26.377 [DEBUG] [Thread-197521] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:56:26.386 [DEBUG] [Thread-197521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:56:26.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:56:26.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-15T03:56:26.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:56:26.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:56:26.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:56:26.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:56:26.424 [DEBUG] [Thread-197521] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:56:37.749 [DEBUG] [Thread-197523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:56:52.800 [DEBUG] [Thread-197524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:56:56.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:56:56.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:56:56.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-15T03:56:58.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 56, 35), 0.93, 93.71, 0.0, 33.38, 6.05, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:56:58.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:56:35
2026-02-15T03:56:58.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:56:58.775 [DEBUG] [Thread-197525] [transport.py] [_log()] starting thread (client mode): 0xa57d4e50
2026-02-15T03:56:58.775 [DEBUG] [Thread-197525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:56:58.795 [DEBUG] [Thread-197525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:56:58.795 [INFO] [Thread-197525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:56:58.798 [DEBUG] [Thread-197525] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:56:58.799 [DEBUG] [Thread-197525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:56:58.799 [DEBUG] [Thread-197525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:56:58.799 [DEBUG] [Thread-197525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:56:58.799 [DEBUG] [Thread-197525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:56:58.799 [DEBUG] [Thread-197525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:56:58.799 [DEBUG] [Thread-197525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:56:58.799 [DEBUG] [Thread-197525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:56:58.799 [DEBUG] [Thread-197525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:56:58.799 [DEBUG] [Thread-197525] [transport.py] [_log()] client lang: <none>
2026-02-15T03:56:58.799 [DEBUG] [Thread-197525] [transport.py] [_log()] server lang: <none>
2026-02-15T03:56:58.799 [DEBUG] [Thread-197525] [transport.py] [_log()] kex follows: False
2026-02-15T03:56:58.799 [DEBUG] [Thread-197525] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:56:58.799 [DEBUG] [Thread-197525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:56:58.800 [DEBUG] [Thread-197525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:56:58.800 [DEBUG] [Thread-197525] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:56:58.800 [DEBUG] [Thread-197525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:56:58.800 [DEBUG] [Thread-197525] [transport.py] [_log()] Compression: none
2026-02-15T03:56:58.800 [DEBUG] [Thread-197525] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:56:58.818 [DEBUG] [Thread-197525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:56:58.819 [DEBUG] [Thread-197525] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:56:58.819 [DEBUG] [Thread-197525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:56:58.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:56:58.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:56:58.861 [DEBUG] [Thread-197525] [transport.py] [_log()] userauth is OK
2026-02-15T03:56:58.861 [DEBUG] [Thread-197525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:56:58.861 [DEBUG] [Thread-197525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:56:58.862 [DEBUG] [Thread-197525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:56:58.862 [DEBUG] [Thread-197525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:56:58.882 [INFO] [Thread-197525] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:56:58.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:56:59.550 [DEBUG] [Thread-197525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:56:59.550 [DEBUG] [Thread-197525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:56:59.551 [DEBUG] [Thread-197525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:56:59.591 [DEBUG] [Thread-197525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:56:59.592 [DEBUG] [Thread-197525] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:56:59.595 [DEBUG] [Thread-197525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:56:59.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:56:59.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:56:59.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:56:59.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:56:59.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:56:59.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:56:59.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:56:59.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:56:59.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:56:59.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.080661 -999.00   +5.50  24.52     94   +4.80 1 3 1 3 1     0    0 0.23 -20.64 ----- 24.5 24.5 147.8 40.1 6.8 -12.4 6.6 -11.1 6.4 -10.5 6.8 -10.9
2026-02-15T03:56:59.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:56:59.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:56:59.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.080661
2026-02-15T03:56:59.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:56:59.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:56:59.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:56:59.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:56:59.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T03:56:59.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:56:35', tmtdew=0.93, humidity=93.71, cloud=0.0, wind=33.38, temperature=6.05, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:56:09.110', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:56:59.620 [DEBUG] [Thread-197525] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:56:59.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-15T03:56:59.721 [DEBUG] [Thread-197528] [transport.py] [_log()] starting thread (client mode): 0xa2d84070
2026-02-15T03:56:59.721 [DEBUG] [Thread-197528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:56:59.736 [DEBUG] [Thread-197528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:56:59.736 [INFO] [Thread-197528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:56:59.744 [DEBUG] [Thread-197528] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:56:59.744 [DEBUG] [Thread-197528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:56:59.744 [DEBUG] [Thread-197528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:56:59.744 [DEBUG] [Thread-197528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:56:59.744 [DEBUG] [Thread-197528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:56:59.744 [DEBUG] [Thread-197528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:56:59.744 [DEBUG] [Thread-197528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:56:59.744 [DEBUG] [Thread-197528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:56:59.744 [DEBUG] [Thread-197528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:56:59.744 [DEBUG] [Thread-197528] [transport.py] [_log()] client lang: <none>
2026-02-15T03:56:59.744 [DEBUG] [Thread-197528] [transport.py] [_log()] server lang: <none>
2026-02-15T03:56:59.744 [DEBUG] [Thread-197528] [transport.py] [_log()] kex follows: False
2026-02-15T03:56:59.744 [DEBUG] [Thread-197528] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:56:59.744 [DEBUG] [Thread-197528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:56:59.744 [DEBUG] [Thread-197528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:56:59.744 [DEBUG] [Thread-197528] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:56:59.745 [DEBUG] [Thread-197528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:56:59.745 [DEBUG] [Thread-197528] [transport.py] [_log()] Compression: none
2026-02-15T03:56:59.745 [DEBUG] [Thread-197528] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:56:59.802 [DEBUG] [Thread-197528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:56:59.803 [DEBUG] [Thread-197528] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:56:59.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:56:59.804 [DEBUG] [Thread-197528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:56:59.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:56:59.858 [DEBUG] [Thread-197528] [transport.py] [_log()] userauth is OK
2026-02-15T03:56:59.859 [DEBUG] [Thread-197528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:56:59.859 [DEBUG] [Thread-197528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:56:59.859 [DEBUG] [Thread-197528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:56:59.859 [DEBUG] [Thread-197528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:56:59.878 [INFO] [Thread-197528] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:56:59.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-15T03:56:59.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:57:00.717 [DEBUG] [Thread-197528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:57:00.717 [DEBUG] [Thread-197528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:57:00.765 [DEBUG] [Thread-197528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:57:00.766 [DEBUG] [Thread-197528] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:57:00.775 [DEBUG] [Thread-197528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:57:00.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:57:00.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-15T03:57:00.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T03:57:00.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:57:00.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:57:00.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:57:00.812 [DEBUG] [Thread-197528] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:57:02.477 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:57:02.477 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:57:07.838 [DEBUG] [Thread-197530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:57:22.526 [DEBUG] [Thread-197531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:57:22.887 [DEBUG] [Thread-197532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:57:30.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:57:30.835 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:57:30.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-15T03:57:32.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 57, 10), 0.52, 96.34, 0.0, 36.29, 5.64, 2, 2, 2, 2, 0, 0),)
2026-02-15T03:57:32.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:57:10
2026-02-15T03:57:32.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:57:33.123 [DEBUG] [Thread-197533] [transport.py] [_log()] starting thread (client mode): 0xa57d7250
2026-02-15T03:57:33.124 [DEBUG] [Thread-197533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:57:33.143 [DEBUG] [Thread-197533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:57:33.143 [INFO] [Thread-197533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:57:33.147 [DEBUG] [Thread-197533] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:57:33.147 [DEBUG] [Thread-197533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:57:33.147 [DEBUG] [Thread-197533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:57:33.147 [DEBUG] [Thread-197533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:57:33.147 [DEBUG] [Thread-197533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:57:33.147 [DEBUG] [Thread-197533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:57:33.147 [DEBUG] [Thread-197533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:57:33.147 [DEBUG] [Thread-197533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:57:33.147 [DEBUG] [Thread-197533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:57:33.147 [DEBUG] [Thread-197533] [transport.py] [_log()] client lang: <none>
2026-02-15T03:57:33.147 [DEBUG] [Thread-197533] [transport.py] [_log()] server lang: <none>
2026-02-15T03:57:33.147 [DEBUG] [Thread-197533] [transport.py] [_log()] kex follows: False
2026-02-15T03:57:33.147 [DEBUG] [Thread-197533] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:57:33.147 [DEBUG] [Thread-197533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:57:33.147 [DEBUG] [Thread-197533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:57:33.147 [DEBUG] [Thread-197533] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:57:33.147 [DEBUG] [Thread-197533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:57:33.147 [DEBUG] [Thread-197533] [transport.py] [_log()] Compression: none
2026-02-15T03:57:33.147 [DEBUG] [Thread-197533] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:57:33.164 [DEBUG] [Thread-197533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:57:33.164 [DEBUG] [Thread-197533] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:57:33.165 [DEBUG] [Thread-197533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:57:33.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:57:33.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:57:33.167 [DEBUG] [Thread-197533] [transport.py] [_log()] userauth is OK
2026-02-15T03:57:33.167 [DEBUG] [Thread-197533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:57:33.167 [DEBUG] [Thread-197533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:57:33.167 [DEBUG] [Thread-197533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:57:33.167 [DEBUG] [Thread-197533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:57:33.191 [INFO] [Thread-197533] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:57:33.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:57:33.833 [DEBUG] [Thread-197533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:57:33.834 [DEBUG] [Thread-197533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:57:33.834 [DEBUG] [Thread-197533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:57:33.874 [DEBUG] [Thread-197533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:57:33.874 [DEBUG] [Thread-197533] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:57:33.877 [DEBUG] [Thread-197533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:57:33.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:57:33.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:57:33.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:57:33.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:57:33.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:57:33.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:57:33.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:57:33.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:57:33.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:57:33.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.081008 -999.00   +5.50  22.53     94   +4.70 1 2 1 3 1     0    0 0.32 -18.02 ..E.. 22.5 22.5 145.4 31.2 6.8 -13.0 6.6 -12.7 6.5 -12.5 6.8 -12.7
2026-02-15T03:57:33.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:57:33.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:57:33.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.081008
2026-02-15T03:57:33.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:57:33.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:57:33.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:57:33.903 [DEBUG] [Thread-197533] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:57:33.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:57:33.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:57:33.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:57:10', tmtdew=0.52, humidity=96.34, cloud=0.0, wind=36.29, temperature=5.64, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:56:39.091', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:57:33.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-15T03:57:34.004 [DEBUG] [Thread-197536] [transport.py] [_log()] starting thread (client mode): 0xa57d7d00
2026-02-15T03:57:34.004 [DEBUG] [Thread-197536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:57:34.023 [DEBUG] [Thread-197536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:57:34.023 [INFO] [Thread-197536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:57:34.034 [DEBUG] [Thread-197536] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:57:34.034 [DEBUG] [Thread-197536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:57:34.034 [DEBUG] [Thread-197536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:57:34.034 [DEBUG] [Thread-197536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:57:34.034 [DEBUG] [Thread-197536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:57:34.035 [DEBUG] [Thread-197536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:57:34.035 [DEBUG] [Thread-197536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:57:34.035 [DEBUG] [Thread-197536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:57:34.035 [DEBUG] [Thread-197536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:57:34.035 [DEBUG] [Thread-197536] [transport.py] [_log()] client lang: <none>
2026-02-15T03:57:34.035 [DEBUG] [Thread-197536] [transport.py] [_log()] server lang: <none>
2026-02-15T03:57:34.035 [DEBUG] [Thread-197536] [transport.py] [_log()] kex follows: False
2026-02-15T03:57:34.035 [DEBUG] [Thread-197536] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:57:34.035 [DEBUG] [Thread-197536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:57:34.035 [DEBUG] [Thread-197536] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:57:34.035 [DEBUG] [Thread-197536] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:57:34.035 [DEBUG] [Thread-197536] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:57:34.035 [DEBUG] [Thread-197536] [transport.py] [_log()] Compression: none
2026-02-15T03:57:34.035 [DEBUG] [Thread-197536] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:57:34.097 [DEBUG] [Thread-197536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:57:34.098 [DEBUG] [Thread-197536] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:57:34.099 [DEBUG] [Thread-197536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:57:34.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:57:34.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:57:34.155 [DEBUG] [Thread-197536] [transport.py] [_log()] userauth is OK
2026-02-15T03:57:34.156 [DEBUG] [Thread-197536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:57:34.156 [DEBUG] [Thread-197536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:57:34.156 [DEBUG] [Thread-197536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:57:34.156 [DEBUG] [Thread-197536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:57:34.176 [INFO] [Thread-197536] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:57:34.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-15T03:57:34.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:57:34.982 [DEBUG] [Thread-197536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:57:34.983 [DEBUG] [Thread-197536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:57:35.031 [DEBUG] [Thread-197536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:57:35.031 [DEBUG] [Thread-197536] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:57:35.040 [DEBUG] [Thread-197536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:57:35.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:57:35.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-15T03:57:35.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-15T03:57:35.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:57:35.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:57:35.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:57:35.078 [DEBUG] [Thread-197536] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:57:37.921 [DEBUG] [Thread-197538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:57:52.981 [DEBUG] [Thread-197539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:58:02.681 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:58:02.682 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:58:05.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:58:05.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:58:05.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T03:58:06.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 57, 46), 0.52, 96.36, 0.0, 31.76, 5.61, 2, 2, 2, 2, 0, 0),)
2026-02-15T03:58:06.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:57:46
2026-02-15T03:58:07.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:58:07.463 [DEBUG] [Thread-197540] [transport.py] [_log()] starting thread (client mode): 0xa2d3d1b0
2026-02-15T03:58:07.463 [DEBUG] [Thread-197540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:58:07.482 [DEBUG] [Thread-197540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:58:07.482 [INFO] [Thread-197540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:58:07.484 [DEBUG] [Thread-197540] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:58:07.484 [DEBUG] [Thread-197540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:58:07.484 [DEBUG] [Thread-197540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:58:07.484 [DEBUG] [Thread-197540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:58:07.484 [DEBUG] [Thread-197540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:58:07.484 [DEBUG] [Thread-197540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:58:07.484 [DEBUG] [Thread-197540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:58:07.484 [DEBUG] [Thread-197540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:58:07.484 [DEBUG] [Thread-197540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:58:07.484 [DEBUG] [Thread-197540] [transport.py] [_log()] client lang: <none>
2026-02-15T03:58:07.484 [DEBUG] [Thread-197540] [transport.py] [_log()] server lang: <none>
2026-02-15T03:58:07.484 [DEBUG] [Thread-197540] [transport.py] [_log()] kex follows: False
2026-02-15T03:58:07.484 [DEBUG] [Thread-197540] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:58:07.484 [DEBUG] [Thread-197540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:58:07.484 [DEBUG] [Thread-197540] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:58:07.484 [DEBUG] [Thread-197540] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:58:07.484 [DEBUG] [Thread-197540] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:58:07.484 [DEBUG] [Thread-197540] [transport.py] [_log()] Compression: none
2026-02-15T03:58:07.484 [DEBUG] [Thread-197540] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:58:07.501 [DEBUG] [Thread-197540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:58:07.501 [DEBUG] [Thread-197540] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:58:07.501 [DEBUG] [Thread-197540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:58:07.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:58:07.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:58:07.503 [DEBUG] [Thread-197540] [transport.py] [_log()] userauth is OK
2026-02-15T03:58:07.503 [DEBUG] [Thread-197540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:58:07.504 [DEBUG] [Thread-197540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:58:07.504 [DEBUG] [Thread-197540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:58:07.504 [DEBUG] [Thread-197540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:58:07.527 [INFO] [Thread-197540] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:58:07.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:58:08.012 [DEBUG] [Thread-197542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:58:08.307 [DEBUG] [Thread-197540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:58:08.307 [DEBUG] [Thread-197540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:58:08.308 [DEBUG] [Thread-197540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:58:08.348 [DEBUG] [Thread-197540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:58:08.348 [DEBUG] [Thread-197540] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:58:08.350 [DEBUG] [Thread-197540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:58:08.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:58:08.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:58:08.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:58:08.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:58:08.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:58:08.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:58:08.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:58:08.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:58:08.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:58:08.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.081702 -999.00   +5.50  21.66     94   +4.70 1 2 1 3 1     0    0 0.37 -15.20 ..E.. 21.7 21.7 143.2 27.8 6.8 -10.8 6.6 -12.0 6.5 -12.1 6.8 -12.5
2026-02-15T03:58:08.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:58:08.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:58:08.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.081702
2026-02-15T03:58:08.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:58:08.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:58:08.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:58:08.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:58:08.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:58:08.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:57:46', tmtdew=0.52, humidity=96.36, cloud=0.0, wind=31.76, temperature=5.61, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:57:39.053', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:58:08.373 [DEBUG] [Thread-197540] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:58:08.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-15T03:58:08.471 [DEBUG] [Thread-197544] [transport.py] [_log()] starting thread (client mode): 0xa2d86950
2026-02-15T03:58:08.471 [DEBUG] [Thread-197544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:58:08.486 [DEBUG] [Thread-197544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:58:08.486 [INFO] [Thread-197544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:58:08.493 [DEBUG] [Thread-197544] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:58:08.493 [DEBUG] [Thread-197544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:58:08.493 [DEBUG] [Thread-197544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:58:08.493 [DEBUG] [Thread-197544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:58:08.493 [DEBUG] [Thread-197544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:58:08.494 [DEBUG] [Thread-197544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:58:08.494 [DEBUG] [Thread-197544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:58:08.494 [DEBUG] [Thread-197544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:58:08.494 [DEBUG] [Thread-197544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:58:08.494 [DEBUG] [Thread-197544] [transport.py] [_log()] client lang: <none>
2026-02-15T03:58:08.494 [DEBUG] [Thread-197544] [transport.py] [_log()] server lang: <none>
2026-02-15T03:58:08.494 [DEBUG] [Thread-197544] [transport.py] [_log()] kex follows: False
2026-02-15T03:58:08.494 [DEBUG] [Thread-197544] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:58:08.494 [DEBUG] [Thread-197544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:58:08.494 [DEBUG] [Thread-197544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:58:08.494 [DEBUG] [Thread-197544] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:58:08.494 [DEBUG] [Thread-197544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:58:08.494 [DEBUG] [Thread-197544] [transport.py] [_log()] Compression: none
2026-02-15T03:58:08.494 [DEBUG] [Thread-197544] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:58:08.557 [DEBUG] [Thread-197544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:58:08.558 [DEBUG] [Thread-197544] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:58:08.559 [DEBUG] [Thread-197544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:58:08.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:58:08.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:58:08.615 [DEBUG] [Thread-197544] [transport.py] [_log()] userauth is OK
2026-02-15T03:58:08.615 [DEBUG] [Thread-197544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:58:08.615 [DEBUG] [Thread-197544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:58:08.615 [DEBUG] [Thread-197544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:58:08.616 [DEBUG] [Thread-197544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:58:08.635 [INFO] [Thread-197544] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:58:08.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-15T03:58:08.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:58:09.433 [DEBUG] [Thread-197544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:58:09.433 [DEBUG] [Thread-197544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:58:09.482 [DEBUG] [Thread-197544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:58:09.482 [DEBUG] [Thread-197544] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:58:09.491 [DEBUG] [Thread-197544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:58:09.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:58:09.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-15T03:58:09.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-15T03:58:09.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:58:09.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:58:09.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:58:09.526 [DEBUG] [Thread-197544] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:58:22.604 [DEBUG] [Thread-197546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:58:23.047 [DEBUG] [Thread-197547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:58:38.101 [DEBUG] [Thread-197548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:58:39.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:58:39.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:58:39.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-15T03:58:41.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 58, 21), 0.52, 96.36, 0.0, 32.5, 5.59, 2, 2, 2, 2, 0, 0),)
2026-02-15T03:58:41.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:58:21
2026-02-15T03:58:41.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:58:41.868 [DEBUG] [Thread-197549] [transport.py] [_log()] starting thread (client mode): 0xa2d879d0
2026-02-15T03:58:41.868 [DEBUG] [Thread-197549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:58:41.887 [DEBUG] [Thread-197549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:58:41.887 [INFO] [Thread-197549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:58:41.889 [DEBUG] [Thread-197549] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:58:41.889 [DEBUG] [Thread-197549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:58:41.889 [DEBUG] [Thread-197549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:58:41.889 [DEBUG] [Thread-197549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:58:41.889 [DEBUG] [Thread-197549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:58:41.889 [DEBUG] [Thread-197549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:58:41.889 [DEBUG] [Thread-197549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:58:41.889 [DEBUG] [Thread-197549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:58:41.889 [DEBUG] [Thread-197549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:58:41.889 [DEBUG] [Thread-197549] [transport.py] [_log()] client lang: <none>
2026-02-15T03:58:41.890 [DEBUG] [Thread-197549] [transport.py] [_log()] server lang: <none>
2026-02-15T03:58:41.890 [DEBUG] [Thread-197549] [transport.py] [_log()] kex follows: False
2026-02-15T03:58:41.890 [DEBUG] [Thread-197549] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:58:41.890 [DEBUG] [Thread-197549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:58:41.890 [DEBUG] [Thread-197549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:58:41.890 [DEBUG] [Thread-197549] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:58:41.890 [DEBUG] [Thread-197549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:58:41.890 [DEBUG] [Thread-197549] [transport.py] [_log()] Compression: none
2026-02-15T03:58:41.890 [DEBUG] [Thread-197549] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:58:41.903 [DEBUG] [Thread-197549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:58:41.904 [DEBUG] [Thread-197549] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:58:41.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:58:41.905 [DEBUG] [Thread-197549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:58:41.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:58:41.908 [DEBUG] [Thread-197549] [transport.py] [_log()] userauth is OK
2026-02-15T03:58:41.908 [DEBUG] [Thread-197549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:58:41.909 [DEBUG] [Thread-197549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:58:41.909 [DEBUG] [Thread-197549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:58:41.909 [DEBUG] [Thread-197549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:58:41.931 [INFO] [Thread-197549] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:58:41.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:58:42.577 [DEBUG] [Thread-197549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:58:42.578 [DEBUG] [Thread-197549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:58:42.578 [DEBUG] [Thread-197549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:58:42.618 [DEBUG] [Thread-197549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:58:42.618 [DEBUG] [Thread-197549] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:58:42.622 [DEBUG] [Thread-197549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:58:42.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:58:42.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:58:42.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:58:42.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:58:42.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:58:42.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:58:42.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:58:42.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:58:42.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:58:42.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.082050 -999.00   +5.50  25.79     94   +4.70 1 2 1 3 1     0    0 0.42 -13.59 ..E.. 25.8 25.8 157.8 32.2 6.8 -16.4 6.6 -13.1 6.4 -13.4 6.8 -14.6
2026-02-15T03:58:42.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:58:42.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:58:42.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.082050
2026-02-15T03:58:42.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:58:42.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:58:42.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:58:42.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:58:42.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:58:42.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:58:21', tmtdew=0.52, humidity=96.36, cloud=0.0, wind=32.5, temperature=5.59, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:58:09.120', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:58:42.650 [DEBUG] [Thread-197549] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:58:42.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-15T03:58:42.743 [DEBUG] [Thread-197552] [transport.py] [_log()] starting thread (client mode): 0xa2d874c0
2026-02-15T03:58:42.744 [DEBUG] [Thread-197552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:58:42.759 [DEBUG] [Thread-197552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:58:42.759 [INFO] [Thread-197552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:58:42.766 [DEBUG] [Thread-197552] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:58:42.767 [DEBUG] [Thread-197552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:58:42.767 [DEBUG] [Thread-197552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:58:42.767 [DEBUG] [Thread-197552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:58:42.767 [DEBUG] [Thread-197552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:58:42.767 [DEBUG] [Thread-197552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:58:42.767 [DEBUG] [Thread-197552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:58:42.767 [DEBUG] [Thread-197552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:58:42.767 [DEBUG] [Thread-197552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:58:42.767 [DEBUG] [Thread-197552] [transport.py] [_log()] client lang: <none>
2026-02-15T03:58:42.767 [DEBUG] [Thread-197552] [transport.py] [_log()] server lang: <none>
2026-02-15T03:58:42.767 [DEBUG] [Thread-197552] [transport.py] [_log()] kex follows: False
2026-02-15T03:58:42.767 [DEBUG] [Thread-197552] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:58:42.767 [DEBUG] [Thread-197552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:58:42.767 [DEBUG] [Thread-197552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:58:42.768 [DEBUG] [Thread-197552] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:58:42.768 [DEBUG] [Thread-197552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:58:42.768 [DEBUG] [Thread-197552] [transport.py] [_log()] Compression: none
2026-02-15T03:58:42.768 [DEBUG] [Thread-197552] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:58:42.827 [DEBUG] [Thread-197552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:58:42.827 [DEBUG] [Thread-197552] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:58:42.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:58:42.828 [DEBUG] [Thread-197552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:58:42.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:58:42.882 [DEBUG] [Thread-197552] [transport.py] [_log()] userauth is OK
2026-02-15T03:58:42.882 [DEBUG] [Thread-197552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:58:42.882 [DEBUG] [Thread-197552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:58:42.883 [DEBUG] [Thread-197552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:58:42.883 [DEBUG] [Thread-197552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:58:42.906 [INFO] [Thread-197552] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:58:42.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-15T03:58:42.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:58:43.711 [DEBUG] [Thread-197552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:58:43.711 [DEBUG] [Thread-197552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:58:43.759 [DEBUG] [Thread-197552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:58:43.760 [DEBUG] [Thread-197552] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:58:43.769 [DEBUG] [Thread-197552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:58:43.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:58:43.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:58:43.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-15T03:58:43.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:58:43.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:58:43.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:58:43.806 [DEBUG] [Thread-197552] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:58:53.137 [DEBUG] [Thread-197554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:59:02.883 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:59:02.884 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:59:08.195 [DEBUG] [Thread-197555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:59:13.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:59:13.825 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:59:13.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-15T03:59:15.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 58, 57), 0.52, 96.34, 0.0, 35.73, 5.61, 2, 2, 0, 2, 0, 0),)
2026-02-15T03:59:15.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:58:57
2026-02-15T03:59:16.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:59:16.473 [DEBUG] [Thread-197556] [transport.py] [_log()] starting thread (client mode): 0xa57d5cf0
2026-02-15T03:59:16.473 [DEBUG] [Thread-197556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:59:16.488 [DEBUG] [Thread-197556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:59:16.488 [INFO] [Thread-197556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:59:16.492 [DEBUG] [Thread-197556] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:59:16.492 [DEBUG] [Thread-197556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:59:16.492 [DEBUG] [Thread-197556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:59:16.492 [DEBUG] [Thread-197556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:59:16.492 [DEBUG] [Thread-197556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:59:16.492 [DEBUG] [Thread-197556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:59:16.492 [DEBUG] [Thread-197556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:59:16.492 [DEBUG] [Thread-197556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:59:16.492 [DEBUG] [Thread-197556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:59:16.492 [DEBUG] [Thread-197556] [transport.py] [_log()] client lang: <none>
2026-02-15T03:59:16.492 [DEBUG] [Thread-197556] [transport.py] [_log()] server lang: <none>
2026-02-15T03:59:16.492 [DEBUG] [Thread-197556] [transport.py] [_log()] kex follows: False
2026-02-15T03:59:16.492 [DEBUG] [Thread-197556] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:59:16.492 [DEBUG] [Thread-197556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:59:16.492 [DEBUG] [Thread-197556] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:59:16.492 [DEBUG] [Thread-197556] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:59:16.492 [DEBUG] [Thread-197556] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:59:16.492 [DEBUG] [Thread-197556] [transport.py] [_log()] Compression: none
2026-02-15T03:59:16.492 [DEBUG] [Thread-197556] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:59:16.509 [DEBUG] [Thread-197556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:59:16.510 [DEBUG] [Thread-197556] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:59:16.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:59:16.512 [DEBUG] [Thread-197556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:59:16.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:59:16.513 [DEBUG] [Thread-197556] [transport.py] [_log()] userauth is OK
2026-02-15T03:59:16.514 [DEBUG] [Thread-197556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:59:16.514 [DEBUG] [Thread-197556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:59:16.514 [DEBUG] [Thread-197556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:59:16.514 [DEBUG] [Thread-197556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:59:16.534 [INFO] [Thread-197556] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:59:16.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:59:17.166 [DEBUG] [Thread-197556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:59:17.167 [DEBUG] [Thread-197556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:59:17.167 [DEBUG] [Thread-197556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:59:17.207 [DEBUG] [Thread-197556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:59:17.208 [DEBUG] [Thread-197556] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:59:17.211 [DEBUG] [Thread-197556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:59:17.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:59:17.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:59:17.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:59:17.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:59:17.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:59:17.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:59:17.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:59:17.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:59:17.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:59:17.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.082397 -999.00   +5.50  30.61     94   +4.70 1 2 2 3 1     0    0 0.46 -12.16 ..E.. 30.6 30.6 160.8 36.3 6.8 -15.1 6.5 -12.4 6.3 -12.4 6.8 -12.9
2026-02-15T03:59:17.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:59:17.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:59:17.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.082397
2026-02-15T03:59:17.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:59:17.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:59:17.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:59:17.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:59:17.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:59:17.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:58:57', tmtdew=0.52, humidity=96.34, cloud=0.0, wind=35.73, temperature=5.61, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:58:39.101', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:59:17.238 [DEBUG] [Thread-197556] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:59:17.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-15T03:59:17.333 [DEBUG] [Thread-197559] [transport.py] [_log()] starting thread (client mode): 0xa2d86110
2026-02-15T03:59:17.333 [DEBUG] [Thread-197559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:59:17.348 [DEBUG] [Thread-197559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:59:17.348 [INFO] [Thread-197559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:59:17.356 [DEBUG] [Thread-197559] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:59:17.356 [DEBUG] [Thread-197559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:59:17.356 [DEBUG] [Thread-197559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:59:17.356 [DEBUG] [Thread-197559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:59:17.356 [DEBUG] [Thread-197559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:59:17.356 [DEBUG] [Thread-197559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:59:17.356 [DEBUG] [Thread-197559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:59:17.356 [DEBUG] [Thread-197559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:59:17.356 [DEBUG] [Thread-197559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:59:17.356 [DEBUG] [Thread-197559] [transport.py] [_log()] client lang: <none>
2026-02-15T03:59:17.357 [DEBUG] [Thread-197559] [transport.py] [_log()] server lang: <none>
2026-02-15T03:59:17.357 [DEBUG] [Thread-197559] [transport.py] [_log()] kex follows: False
2026-02-15T03:59:17.357 [DEBUG] [Thread-197559] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:59:17.357 [DEBUG] [Thread-197559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:59:17.357 [DEBUG] [Thread-197559] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:59:17.357 [DEBUG] [Thread-197559] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:59:17.357 [DEBUG] [Thread-197559] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:59:17.357 [DEBUG] [Thread-197559] [transport.py] [_log()] Compression: none
2026-02-15T03:59:17.357 [DEBUG] [Thread-197559] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:59:17.414 [DEBUG] [Thread-197559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:59:17.415 [DEBUG] [Thread-197559] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:59:17.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:59:17.416 [DEBUG] [Thread-197559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:59:17.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:59:17.471 [DEBUG] [Thread-197559] [transport.py] [_log()] userauth is OK
2026-02-15T03:59:17.471 [DEBUG] [Thread-197559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:59:17.471 [DEBUG] [Thread-197559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:59:17.472 [DEBUG] [Thread-197559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:59:17.472 [DEBUG] [Thread-197559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:59:17.490 [INFO] [Thread-197559] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:59:17.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-15T03:59:17.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:59:18.279 [DEBUG] [Thread-197559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:59:18.279 [DEBUG] [Thread-197559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:59:18.326 [DEBUG] [Thread-197559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:59:18.327 [DEBUG] [Thread-197559] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:59:18.336 [DEBUG] [Thread-197559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:59:18.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:59:18.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T03:59:18.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-15T03:59:18.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:59:18.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:59:18.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:59:18.373 [DEBUG] [Thread-197559] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:59:22.678 [DEBUG] [Thread-197561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:59:23.235 [DEBUG] [Thread-197562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:59:38.285 [DEBUG] [Thread-197563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T03:59:48.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T03:59:48.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T03:59:48.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-15T03:59:50.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 3, 59, 32), 0.51, 96.41, 0.0, 34.53, 5.61, 2, 2, 2, 2, 0, 0),)
2026-02-15T03:59:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 03:59:32
2026-02-15T03:59:50.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T03:59:50.861 [DEBUG] [Thread-197564] [transport.py] [_log()] starting thread (client mode): 0xa2d3c3a0
2026-02-15T03:59:50.861 [DEBUG] [Thread-197564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:59:50.881 [DEBUG] [Thread-197564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T03:59:50.882 [INFO] [Thread-197564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T03:59:50.885 [DEBUG] [Thread-197564] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:59:50.885 [DEBUG] [Thread-197564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T03:59:50.885 [DEBUG] [Thread-197564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:59:50.885 [DEBUG] [Thread-197564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:59:50.885 [DEBUG] [Thread-197564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:59:50.885 [DEBUG] [Thread-197564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:59:50.885 [DEBUG] [Thread-197564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:59:50.885 [DEBUG] [Thread-197564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:59:50.885 [DEBUG] [Thread-197564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:59:50.885 [DEBUG] [Thread-197564] [transport.py] [_log()] client lang: <none>
2026-02-15T03:59:50.885 [DEBUG] [Thread-197564] [transport.py] [_log()] server lang: <none>
2026-02-15T03:59:50.885 [DEBUG] [Thread-197564] [transport.py] [_log()] kex follows: False
2026-02-15T03:59:50.885 [DEBUG] [Thread-197564] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:59:50.885 [DEBUG] [Thread-197564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:59:50.885 [DEBUG] [Thread-197564] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:59:50.885 [DEBUG] [Thread-197564] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:59:50.885 [DEBUG] [Thread-197564] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:59:50.885 [DEBUG] [Thread-197564] [transport.py] [_log()] Compression: none
2026-02-15T03:59:50.885 [DEBUG] [Thread-197564] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:59:50.902 [DEBUG] [Thread-197564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:59:50.902 [DEBUG] [Thread-197564] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:59:50.903 [DEBUG] [Thread-197564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T03:59:50.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T03:59:50.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:59:50.905 [DEBUG] [Thread-197564] [transport.py] [_log()] userauth is OK
2026-02-15T03:59:50.905 [DEBUG] [Thread-197564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:59:50.906 [DEBUG] [Thread-197564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:59:50.906 [DEBUG] [Thread-197564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T03:59:50.906 [DEBUG] [Thread-197564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:59:50.931 [INFO] [Thread-197564] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:59:50.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:59:51.559 [DEBUG] [Thread-197564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:59:51.560 [DEBUG] [Thread-197564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:59:51.560 [DEBUG] [Thread-197564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T03:59:51.601 [DEBUG] [Thread-197564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:59:51.601 [DEBUG] [Thread-197564] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:59:51.604 [DEBUG] [Thread-197564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:59:51.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:59:51.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T03:59:51.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T03:59:51.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T03:59:51.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:59:51.626 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T03:59:51.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:59:51.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:59:51.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T03:59:51.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.082744 -999.00   +5.50  22.37     94   +4.70 1 2 1 3 1     0    0 0.47 -11.50 ..E.. 22.4 22.4 152.0 32.4 6.8 -12.9 6.5 -11.9 6.4 -12.7 6.8 -13.9
2026-02-15T03:59:51.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T03:59:51.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T03:59:51.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.082744
2026-02-15T03:59:51.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T03:59:51.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T03:59:51.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T03:59:51.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T03:59:51.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T03:59:51.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T03:59:32', tmtdew=0.51, humidity=96.41, cloud=0.0, wind=34.53, temperature=5.61, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:59:09.082', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T03:59:51.629 [DEBUG] [Thread-197564] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:59:51.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-15T03:59:51.725 [DEBUG] [Thread-197567] [transport.py] [_log()] starting thread (client mode): 0xa2d55ea0
2026-02-15T03:59:51.725 [DEBUG] [Thread-197567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T03:59:51.740 [DEBUG] [Thread-197567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T03:59:51.740 [INFO] [Thread-197567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T03:59:51.747 [DEBUG] [Thread-197567] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T03:59:51.748 [DEBUG] [Thread-197567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T03:59:51.748 [DEBUG] [Thread-197567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T03:59:51.748 [DEBUG] [Thread-197567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:59:51.748 [DEBUG] [Thread-197567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T03:59:51.748 [DEBUG] [Thread-197567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:59:51.748 [DEBUG] [Thread-197567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T03:59:51.748 [DEBUG] [Thread-197567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T03:59:51.749 [DEBUG] [Thread-197567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T03:59:51.749 [DEBUG] [Thread-197567] [transport.py] [_log()] client lang: <none>
2026-02-15T03:59:51.749 [DEBUG] [Thread-197567] [transport.py] [_log()] server lang: <none>
2026-02-15T03:59:51.749 [DEBUG] [Thread-197567] [transport.py] [_log()] kex follows: False
2026-02-15T03:59:51.749 [DEBUG] [Thread-197567] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T03:59:51.749 [DEBUG] [Thread-197567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T03:59:51.749 [DEBUG] [Thread-197567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T03:59:51.749 [DEBUG] [Thread-197567] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T03:59:51.749 [DEBUG] [Thread-197567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T03:59:51.749 [DEBUG] [Thread-197567] [transport.py] [_log()] Compression: none
2026-02-15T03:59:51.749 [DEBUG] [Thread-197567] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T03:59:51.805 [DEBUG] [Thread-197567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T03:59:51.806 [DEBUG] [Thread-197567] [transport.py] [_log()] Switch to new keys ...
2026-02-15T03:59:51.806 [DEBUG] [Thread-197567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T03:59:51.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T03:59:51.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T03:59:51.862 [DEBUG] [Thread-197567] [transport.py] [_log()] userauth is OK
2026-02-15T03:59:51.862 [DEBUG] [Thread-197567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T03:59:51.862 [DEBUG] [Thread-197567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T03:59:51.862 [DEBUG] [Thread-197567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T03:59:51.862 [DEBUG] [Thread-197567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T03:59:51.883 [INFO] [Thread-197567] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T03:59:51.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-15T03:59:51.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T03:59:52.694 [DEBUG] [Thread-197567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T03:59:52.694 [DEBUG] [Thread-197567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T03:59:52.742 [DEBUG] [Thread-197567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T03:59:52.742 [DEBUG] [Thread-197567] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T03:59:52.752 [DEBUG] [Thread-197567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T03:59:52.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T03:59:52.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-15T03:59:52.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-15T03:59:52.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T03:59:52.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T03:59:52.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T03:59:52.789 [DEBUG] [Thread-197567] [transport.py] [_log()] EOF in transport thread
2026-02-15T03:59:53.320 [DEBUG] [Thread-197569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:00:03.084 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:00:03.085 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:00:08.371 [DEBUG] [Thread-197570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:00:22.731 [DEBUG] [Thread-197571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:00:22.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:00:22.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:00: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-15T04:00:23.404 [DEBUG] [Thread-197572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:00:24.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 0, 7), 0.51, 96.39, 0.0, 36.24, 5.57, 2, 2, 2, 2, 0, 0),)
2026-02-15T04:00:24.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:00:07
2026-02-15T04:00:25.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:00:25.194 [DEBUG] [Thread-197573] [transport.py] [_log()] starting thread (client mode): 0xa2d56200
2026-02-15T04:00:25.194 [DEBUG] [Thread-197573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:00:25.214 [DEBUG] [Thread-197573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:00:25.215 [INFO] [Thread-197573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:00:25.216 [DEBUG] [Thread-197573] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:00:25.216 [DEBUG] [Thread-197573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:00:25.216 [DEBUG] [Thread-197573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:00:25.216 [DEBUG] [Thread-197573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:00:25.216 [DEBUG] [Thread-197573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:00:25.216 [DEBUG] [Thread-197573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:00:25.216 [DEBUG] [Thread-197573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:00:25.216 [DEBUG] [Thread-197573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:00:25.216 [DEBUG] [Thread-197573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:00:25.216 [DEBUG] [Thread-197573] [transport.py] [_log()] client lang: <none>
2026-02-15T04:00:25.216 [DEBUG] [Thread-197573] [transport.py] [_log()] server lang: <none>
2026-02-15T04:00:25.216 [DEBUG] [Thread-197573] [transport.py] [_log()] kex follows: False
2026-02-15T04:00:25.217 [DEBUG] [Thread-197573] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:00:25.217 [DEBUG] [Thread-197573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:00:25.217 [DEBUG] [Thread-197573] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:00:25.217 [DEBUG] [Thread-197573] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:00:25.217 [DEBUG] [Thread-197573] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:00:25.217 [DEBUG] [Thread-197573] [transport.py] [_log()] Compression: none
2026-02-15T04:00:25.217 [DEBUG] [Thread-197573] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:00:25.235 [DEBUG] [Thread-197573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:00:25.235 [DEBUG] [Thread-197573] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:00:25.236 [DEBUG] [Thread-197573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:00:25.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:00:25.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:00:25.238 [DEBUG] [Thread-197573] [transport.py] [_log()] userauth is OK
2026-02-15T04:00:25.238 [DEBUG] [Thread-197573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:00:25.238 [DEBUG] [Thread-197573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:00:25.238 [DEBUG] [Thread-197573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:00:25.238 [DEBUG] [Thread-197573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:00:25.262 [INFO] [Thread-197573] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:00:25.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:00:25.844 [DEBUG] [Thread-197573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:00:25.844 [DEBUG] [Thread-197573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:00:25.844 [DEBUG] [Thread-197573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:00:25.885 [DEBUG] [Thread-197573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:00:25.886 [DEBUG] [Thread-197573] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:00:25.889 [DEBUG] [Thread-197573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:00:25.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:00:25.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:00:25.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:00:25.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:00:25.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:00:25.911 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:00:25.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:00:25.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:00:25.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:00:25.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.083091 -999.00   +5.50  21.06     94   +4.70 1 2 1 3 1     0    0 0.48 -11.34 ..E.. 21.1 21.1 160.2 32.2 6.7 -15.1 6.5 -14.2 6.4 -13.1 6.7 -14.4
2026-02-15T04:00:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:00:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:00:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.083091
2026-02-15T04:00:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:00:25.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:00:25.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:00:25.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:00:25.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T04:00:25.914 [DEBUG] [Thread-197573] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:00:25.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:00:07', tmtdew=0.51, humidity=96.39, cloud=0.0, wind=36.24, temperature=5.57, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T01:59:39.062', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T01:32:00')
2026-02-15T04:00:25.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-15T04:00:26.009 [DEBUG] [Thread-197576] [transport.py] [_log()] starting thread (client mode): 0xa2d56e30
2026-02-15T04:00:26.009 [DEBUG] [Thread-197576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:00:26.024 [DEBUG] [Thread-197576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:00:26.024 [INFO] [Thread-197576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:00:26.032 [DEBUG] [Thread-197576] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:00:26.032 [DEBUG] [Thread-197576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:00:26.032 [DEBUG] [Thread-197576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:00:26.032 [DEBUG] [Thread-197576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:00:26.032 [DEBUG] [Thread-197576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:00:26.032 [DEBUG] [Thread-197576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:00:26.032 [DEBUG] [Thread-197576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:00:26.032 [DEBUG] [Thread-197576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:00:26.032 [DEBUG] [Thread-197576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:00:26.032 [DEBUG] [Thread-197576] [transport.py] [_log()] client lang: <none>
2026-02-15T04:00:26.033 [DEBUG] [Thread-197576] [transport.py] [_log()] server lang: <none>
2026-02-15T04:00:26.033 [DEBUG] [Thread-197576] [transport.py] [_log()] kex follows: False
2026-02-15T04:00:26.033 [DEBUG] [Thread-197576] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:00:26.033 [DEBUG] [Thread-197576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:00:26.033 [DEBUG] [Thread-197576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:00:26.033 [DEBUG] [Thread-197576] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:00:26.033 [DEBUG] [Thread-197576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:00:26.033 [DEBUG] [Thread-197576] [transport.py] [_log()] Compression: none
2026-02-15T04:00:26.033 [DEBUG] [Thread-197576] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:00:26.090 [DEBUG] [Thread-197576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:00:26.091 [DEBUG] [Thread-197576] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:00:26.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:00:26.092 [DEBUG] [Thread-197576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:00:26.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:00:26.147 [DEBUG] [Thread-197576] [transport.py] [_log()] userauth is OK
2026-02-15T04:00:26.147 [DEBUG] [Thread-197576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:00:26.148 [DEBUG] [Thread-197576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:00:26.148 [DEBUG] [Thread-197576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:00:26.148 [DEBUG] [Thread-197576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:00:26.167 [INFO] [Thread-197576] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:00:26.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-15T04:00:26.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:00:26.992 [DEBUG] [Thread-197576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:00:26.993 [DEBUG] [Thread-197576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:00:27.040 [DEBUG] [Thread-197576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:00:27.040 [DEBUG] [Thread-197576] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:00:27.050 [DEBUG] [Thread-197576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:00:27.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:00:27.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T04:00:27.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-15T04:00:27.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:00:27.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:00:27.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:00:27.086 [DEBUG] [Thread-197576] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:00:38.443 [DEBUG] [Thread-197578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:00:53.493 [DEBUG] [Thread-197579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:00:57.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:00:57.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:00:57.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-15T04:00:59.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 0, 43), 0.51, 96.42, 0.0, 32.34, 5.57, 2, 2, 2, 2, 0, 0),)
2026-02-15T04:00:59.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:00:43
2026-02-15T04:00:59.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:00:59.916 [DEBUG] [Thread-197580] [transport.py] [_log()] starting thread (client mode): 0xa2d56b60
2026-02-15T04:00:59.916 [DEBUG] [Thread-197580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:00:59.935 [DEBUG] [Thread-197580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:00:59.935 [INFO] [Thread-197580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:00:59.938 [DEBUG] [Thread-197580] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:00:59.938 [DEBUG] [Thread-197580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:00:59.938 [DEBUG] [Thread-197580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:00:59.938 [DEBUG] [Thread-197580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:00:59.938 [DEBUG] [Thread-197580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:00:59.938 [DEBUG] [Thread-197580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:00:59.938 [DEBUG] [Thread-197580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:00:59.939 [DEBUG] [Thread-197580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:00:59.939 [DEBUG] [Thread-197580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:00:59.939 [DEBUG] [Thread-197580] [transport.py] [_log()] client lang: <none>
2026-02-15T04:00:59.939 [DEBUG] [Thread-197580] [transport.py] [_log()] server lang: <none>
2026-02-15T04:00:59.939 [DEBUG] [Thread-197580] [transport.py] [_log()] kex follows: False
2026-02-15T04:00:59.939 [DEBUG] [Thread-197580] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:00:59.939 [DEBUG] [Thread-197580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:00:59.939 [DEBUG] [Thread-197580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:00:59.939 [DEBUG] [Thread-197580] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:00:59.939 [DEBUG] [Thread-197580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:00:59.939 [DEBUG] [Thread-197580] [transport.py] [_log()] Compression: none
2026-02-15T04:00:59.939 [DEBUG] [Thread-197580] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:00:59.948 [DEBUG] [Thread-197580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:00:59.949 [DEBUG] [Thread-197580] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:00:59.950 [DEBUG] [Thread-197580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:00:59.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:00:59.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:00:59.952 [DEBUG] [Thread-197580] [transport.py] [_log()] userauth is OK
2026-02-15T04:00:59.952 [DEBUG] [Thread-197580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:00:59.952 [DEBUG] [Thread-197580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:00:59.952 [DEBUG] [Thread-197580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:00:59.952 [DEBUG] [Thread-197580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:00:59.967 [INFO] [Thread-197580] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:00:59.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:01:00.757 [DEBUG] [Thread-197580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:01:00.757 [DEBUG] [Thread-197580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:01:00.757 [DEBUG] [Thread-197580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:01:00.798 [DEBUG] [Thread-197580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:01:00.798 [DEBUG] [Thread-197580] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:01:00.801 [DEBUG] [Thread-197580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:01:00.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:01:00.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:01:00.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:01:00.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:01:00.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:01:00.824 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:01:00.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:01:00.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:01:00.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:01:00.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.083438 -999.00   +5.50  25.59     94   +4.70 1 2 1 3 1     0    0 0.51 -10.11 ..E.. 25.6 25.6 157.6 30.7 6.7 -16.2 6.5 -10.7 6.3 -11.1 6.7 -12.0
2026-02-15T04:01:00.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:01:00.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:01:00.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.083438
2026-02-15T04:01:00.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:01:00.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:01:00.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:01:00.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:01:00.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T04:01:00.826 [DEBUG] [Thread-197580] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:01:00.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:00:43', tmtdew=0.51, humidity=96.42, cloud=0.0, wind=32.34, temperature=5.57, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:00:09.043', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T02:00:00')
2026-02-15T04:01:00.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-15T04:01:00.925 [DEBUG] [Thread-197583] [transport.py] [_log()] starting thread (client mode): 0xa2d54970
2026-02-15T04:01:00.925 [DEBUG] [Thread-197583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:01:00.940 [DEBUG] [Thread-197583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:01:00.940 [INFO] [Thread-197583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:01:00.948 [DEBUG] [Thread-197583] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:01:00.948 [DEBUG] [Thread-197583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:01:00.948 [DEBUG] [Thread-197583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:01:00.948 [DEBUG] [Thread-197583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:01:00.948 [DEBUG] [Thread-197583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:01:00.948 [DEBUG] [Thread-197583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:01:00.948 [DEBUG] [Thread-197583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:01:00.948 [DEBUG] [Thread-197583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:01:00.948 [DEBUG] [Thread-197583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:01:00.948 [DEBUG] [Thread-197583] [transport.py] [_log()] client lang: <none>
2026-02-15T04:01:00.948 [DEBUG] [Thread-197583] [transport.py] [_log()] server lang: <none>
2026-02-15T04:01:00.948 [DEBUG] [Thread-197583] [transport.py] [_log()] kex follows: False
2026-02-15T04:01:00.948 [DEBUG] [Thread-197583] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:01:00.949 [DEBUG] [Thread-197583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:01:00.949 [DEBUG] [Thread-197583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:01:00.949 [DEBUG] [Thread-197583] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:01:00.949 [DEBUG] [Thread-197583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:01:00.949 [DEBUG] [Thread-197583] [transport.py] [_log()] Compression: none
2026-02-15T04:01:00.949 [DEBUG] [Thread-197583] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:01:01.006 [DEBUG] [Thread-197583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:01:01.007 [DEBUG] [Thread-197583] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:01:01.007 [DEBUG] [Thread-197583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:01:01.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:01:01.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:01:01.062 [DEBUG] [Thread-197583] [transport.py] [_log()] userauth is OK
2026-02-15T04:01:01.063 [DEBUG] [Thread-197583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:01:01.063 [DEBUG] [Thread-197583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:01:01.063 [DEBUG] [Thread-197583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:01:01.063 [DEBUG] [Thread-197583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:01:01.086 [INFO] [Thread-197583] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:01:01.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-15T04:01:01.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:01:01.927 [DEBUG] [Thread-197583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:01:01.927 [DEBUG] [Thread-197583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:01:01.975 [DEBUG] [Thread-197583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:01:01.976 [DEBUG] [Thread-197583] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:01:01.985 [DEBUG] [Thread-197583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:01:01.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:01:01.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-15T04:01:02.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-15T04:01:02.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:01:02.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:01:02.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:01:02.022 [DEBUG] [Thread-197583] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:01:03.285 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:01:03.286 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:01:08.527 [DEBUG] [Thread-197585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:01:22.788 [DEBUG] [Thread-197586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:01:23.569 [DEBUG] [Thread-197587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:01:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:01:32.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:01:32.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-15T04:01:34.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 1, 19), 0.51, 96.41, 0.0, 31.69, 5.56, 2, 2, 2, 2, 0, 0),)
2026-02-15T04:01:34.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:01:19
2026-02-15T04:01:34.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:01:34.765 [DEBUG] [Thread-197588] [transport.py] [_log()] starting thread (client mode): 0xa2d550f0
2026-02-15T04:01:34.765 [DEBUG] [Thread-197588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:01:34.785 [DEBUG] [Thread-197588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:01:34.785 [INFO] [Thread-197588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:01:34.788 [DEBUG] [Thread-197588] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:01:34.789 [DEBUG] [Thread-197588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:01:34.789 [DEBUG] [Thread-197588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:01:34.789 [DEBUG] [Thread-197588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:01:34.789 [DEBUG] [Thread-197588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:01:34.789 [DEBUG] [Thread-197588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:01:34.789 [DEBUG] [Thread-197588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:01:34.789 [DEBUG] [Thread-197588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:01:34.789 [DEBUG] [Thread-197588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:01:34.789 [DEBUG] [Thread-197588] [transport.py] [_log()] client lang: <none>
2026-02-15T04:01:34.789 [DEBUG] [Thread-197588] [transport.py] [_log()] server lang: <none>
2026-02-15T04:01:34.789 [DEBUG] [Thread-197588] [transport.py] [_log()] kex follows: False
2026-02-15T04:01:34.789 [DEBUG] [Thread-197588] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:01:34.790 [DEBUG] [Thread-197588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:01:34.790 [DEBUG] [Thread-197588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:01:34.790 [DEBUG] [Thread-197588] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:01:34.790 [DEBUG] [Thread-197588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:01:34.790 [DEBUG] [Thread-197588] [transport.py] [_log()] Compression: none
2026-02-15T04:01:34.790 [DEBUG] [Thread-197588] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:01:34.811 [DEBUG] [Thread-197588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:01:34.812 [DEBUG] [Thread-197588] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:01:34.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:01:34.813 [DEBUG] [Thread-197588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:01:34.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:01:34.815 [DEBUG] [Thread-197588] [transport.py] [_log()] userauth is OK
2026-02-15T04:01:34.816 [DEBUG] [Thread-197588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:01:34.816 [DEBUG] [Thread-197588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:01:34.816 [DEBUG] [Thread-197588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:01:34.816 [DEBUG] [Thread-197588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:01:34.834 [INFO] [Thread-197588] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:01:34.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:01:35.469 [DEBUG] [Thread-197588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:01:35.470 [DEBUG] [Thread-197588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:01:35.470 [DEBUG] [Thread-197588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:01:35.510 [DEBUG] [Thread-197588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:01:35.511 [DEBUG] [Thread-197588] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:01:35.514 [DEBUG] [Thread-197588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:01:35.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:01:35.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:01:35.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:01:35.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:01:35.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:01:35.539 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:01:35.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:01:35.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:01:35.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:01:35.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.083786 -999.00   +5.50  26.75     95   +4.70 1 2 1 3 1     0    0 0.56 -8.43 ..e.. 26.8 26.8 153.6 33.1 6.7 -14.2 6.5 -15.9 6.3 -14.5 6.7 -15.1
2026-02-15T04:01:35.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:01:35.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:01:35.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.083786
2026-02-15T04:01:35.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:01:35.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:01:35.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:01:35.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:01:35.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T04:01:35.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:01:19', tmtdew=0.51, humidity=96.41, cloud=0.0, wind=31.69, temperature=5.56, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:00:39.110', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T02:00:00')
2026-02-15T04:01:35.543 [DEBUG] [Thread-197588] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:01:35.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T04:01:35.638 [DEBUG] [Thread-197591] [transport.py] [_log()] starting thread (client mode): 0xa2d55180
2026-02-15T04:01:35.638 [DEBUG] [Thread-197591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:01:35.653 [DEBUG] [Thread-197591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:01:35.653 [INFO] [Thread-197591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:01:35.661 [DEBUG] [Thread-197591] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:01:35.661 [DEBUG] [Thread-197591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:01:35.661 [DEBUG] [Thread-197591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:01:35.661 [DEBUG] [Thread-197591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:01:35.661 [DEBUG] [Thread-197591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:01:35.661 [DEBUG] [Thread-197591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:01:35.661 [DEBUG] [Thread-197591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:01:35.661 [DEBUG] [Thread-197591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:01:35.661 [DEBUG] [Thread-197591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:01:35.662 [DEBUG] [Thread-197591] [transport.py] [_log()] client lang: <none>
2026-02-15T04:01:35.662 [DEBUG] [Thread-197591] [transport.py] [_log()] server lang: <none>
2026-02-15T04:01:35.662 [DEBUG] [Thread-197591] [transport.py] [_log()] kex follows: False
2026-02-15T04:01:35.662 [DEBUG] [Thread-197591] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:01:35.662 [DEBUG] [Thread-197591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:01:35.662 [DEBUG] [Thread-197591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:01:35.662 [DEBUG] [Thread-197591] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:01:35.662 [DEBUG] [Thread-197591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:01:35.662 [DEBUG] [Thread-197591] [transport.py] [_log()] Compression: none
2026-02-15T04:01:35.662 [DEBUG] [Thread-197591] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:01:35.718 [DEBUG] [Thread-197591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:01:35.719 [DEBUG] [Thread-197591] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:01:35.720 [DEBUG] [Thread-197591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:01:35.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:01:35.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:01:35.774 [DEBUG] [Thread-197591] [transport.py] [_log()] userauth is OK
2026-02-15T04:01:35.774 [DEBUG] [Thread-197591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:01:35.774 [DEBUG] [Thread-197591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:01:35.775 [DEBUG] [Thread-197591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:01:35.775 [DEBUG] [Thread-197591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:01:35.793 [INFO] [Thread-197591] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:01:35.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-15T04:01:35.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:01:36.601 [DEBUG] [Thread-197591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:01:36.602 [DEBUG] [Thread-197591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:01:36.649 [DEBUG] [Thread-197591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:01:36.649 [DEBUG] [Thread-197591] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:01:36.659 [DEBUG] [Thread-197591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:01:36.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:01:36.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-15T04:01:36.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-15T04:01:36.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:01:36.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:01:36.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:01:36.696 [DEBUG] [Thread-197591] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:01:38.607 [DEBUG] [Thread-197593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:01:53.660 [DEBUG] [Thread-197594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:02:03.493 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:02:03.494 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:02:06.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:02:06.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:02:06.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-15T04:02:08.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 1, 54), 0.5, 96.46, 0.0, 33.14, 5.57, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:02:08.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:01:54
2026-02-15T04:02:08.697 [DEBUG] [Thread-197595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:02:08.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:02:09.039 [DEBUG] [Thread-197596] [transport.py] [_log()] starting thread (client mode): 0xa2d86110
2026-02-15T04:02:09.039 [DEBUG] [Thread-197596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:02:09.058 [DEBUG] [Thread-197596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:02:09.058 [INFO] [Thread-197596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:02:09.060 [DEBUG] [Thread-197596] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:02:09.060 [DEBUG] [Thread-197596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:02:09.060 [DEBUG] [Thread-197596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:02:09.060 [DEBUG] [Thread-197596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:02:09.060 [DEBUG] [Thread-197596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:02:09.060 [DEBUG] [Thread-197596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:02:09.060 [DEBUG] [Thread-197596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:02:09.060 [DEBUG] [Thread-197596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:02:09.060 [DEBUG] [Thread-197596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:02:09.060 [DEBUG] [Thread-197596] [transport.py] [_log()] client lang: <none>
2026-02-15T04:02:09.060 [DEBUG] [Thread-197596] [transport.py] [_log()] server lang: <none>
2026-02-15T04:02:09.060 [DEBUG] [Thread-197596] [transport.py] [_log()] kex follows: False
2026-02-15T04:02:09.060 [DEBUG] [Thread-197596] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:02:09.060 [DEBUG] [Thread-197596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:02:09.060 [DEBUG] [Thread-197596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:02:09.060 [DEBUG] [Thread-197596] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:02:09.060 [DEBUG] [Thread-197596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:02:09.060 [DEBUG] [Thread-197596] [transport.py] [_log()] Compression: none
2026-02-15T04:02:09.060 [DEBUG] [Thread-197596] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:02:09.077 [DEBUG] [Thread-197596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:02:09.077 [DEBUG] [Thread-197596] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:02:09.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:02:09.078 [DEBUG] [Thread-197596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:02:09.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:02:09.081 [DEBUG] [Thread-197596] [transport.py] [_log()] userauth is OK
2026-02-15T04:02:09.081 [DEBUG] [Thread-197596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:02:09.081 [DEBUG] [Thread-197596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:02:09.081 [DEBUG] [Thread-197596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:02:09.081 [DEBUG] [Thread-197596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:02:09.107 [INFO] [Thread-197596] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:02:09.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:02:09.710 [DEBUG] [Thread-197596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:02:09.710 [DEBUG] [Thread-197596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:02:09.710 [DEBUG] [Thread-197596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:02:09.751 [DEBUG] [Thread-197596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:02:09.752 [DEBUG] [Thread-197596] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:02:09.755 [DEBUG] [Thread-197596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:02:09.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:02:09.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:02:09.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:02:09.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:02:09.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:02:09.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:02:09.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:02:09.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:02:09.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:02:09.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.084480 -999.00   +5.50  22.87     95   +4.70 1 2 1 3 1     0    0 0.59 -7.21 ..E.. 22.9 22.9 161.8 29.5 6.7 -14.4 6.5 -17.3 6.3 -13.5 6.7 -14.1
2026-02-15T04:02:09.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:02:09.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:02:09.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.084480
2026-02-15T04:02:09.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:02:09.774 [DEBUG] [Thread-197596] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:02:09.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:02:09.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:02:09.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:02:09.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T04:02:09.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:01:54', tmtdew=0.5, humidity=96.46, cloud=0.0, wind=33.14, temperature=5.57, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:01:39.072', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T02:00:00')
2026-02-15T04:02:09.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-15T04:02:09.868 [DEBUG] [Thread-197599] [transport.py] [_log()] starting thread (client mode): 0xa2d842b0
2026-02-15T04:02:09.868 [DEBUG] [Thread-197599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:02:09.883 [DEBUG] [Thread-197599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:02:09.883 [INFO] [Thread-197599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:02:09.890 [DEBUG] [Thread-197599] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:02:09.890 [DEBUG] [Thread-197599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:02:09.890 [DEBUG] [Thread-197599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:02:09.890 [DEBUG] [Thread-197599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:02:09.890 [DEBUG] [Thread-197599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:02:09.890 [DEBUG] [Thread-197599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:02:09.891 [DEBUG] [Thread-197599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:02:09.891 [DEBUG] [Thread-197599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:02:09.891 [DEBUG] [Thread-197599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:02:09.891 [DEBUG] [Thread-197599] [transport.py] [_log()] client lang: <none>
2026-02-15T04:02:09.891 [DEBUG] [Thread-197599] [transport.py] [_log()] server lang: <none>
2026-02-15T04:02:09.891 [DEBUG] [Thread-197599] [transport.py] [_log()] kex follows: False
2026-02-15T04:02:09.891 [DEBUG] [Thread-197599] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:02:09.891 [DEBUG] [Thread-197599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:02:09.891 [DEBUG] [Thread-197599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:02:09.891 [DEBUG] [Thread-197599] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:02:09.891 [DEBUG] [Thread-197599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:02:09.891 [DEBUG] [Thread-197599] [transport.py] [_log()] Compression: none
2026-02-15T04:02:09.891 [DEBUG] [Thread-197599] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:02:09.952 [DEBUG] [Thread-197599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:02:09.953 [DEBUG] [Thread-197599] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:02:09.953 [DEBUG] [Thread-197599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:02:09.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:02:09.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:02:10.011 [DEBUG] [Thread-197599] [transport.py] [_log()] userauth is OK
2026-02-15T04:02:10.011 [DEBUG] [Thread-197599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:02:10.011 [DEBUG] [Thread-197599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:02:10.011 [DEBUG] [Thread-197599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:02:10.011 [DEBUG] [Thread-197599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:02:10.035 [INFO] [Thread-197599] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:02: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-15T04:02:10.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:02:10.842 [DEBUG] [Thread-197599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:02:10.842 [DEBUG] [Thread-197599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:02:10.890 [DEBUG] [Thread-197599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:02:10.890 [DEBUG] [Thread-197599] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:02:10.900 [DEBUG] [Thread-197599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:02:10.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:02:10.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T04:02:10.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-15T04:02:10.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:02:10.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:02:10.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:02:10.937 [DEBUG] [Thread-197599] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:02:22.862 [DEBUG] [Thread-197601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:02:23.731 [DEBUG] [Thread-197602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:02:38.789 [DEBUG] [Thread-197603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:02:40.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:02:40.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:02:40.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-15T04:02:42.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 2, 30), 0.5, 96.46, 0.0, 33.82, 5.59, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:02:42.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:02:30
2026-02-15T04:02:43.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:02:43.288 [DEBUG] [Thread-197604] [transport.py] [_log()] starting thread (client mode): 0xa2d54430
2026-02-15T04:02:43.289 [DEBUG] [Thread-197604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:02:43.308 [DEBUG] [Thread-197604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:02:43.308 [INFO] [Thread-197604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:02:43.311 [DEBUG] [Thread-197604] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:02:43.311 [DEBUG] [Thread-197604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:02:43.311 [DEBUG] [Thread-197604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:02:43.311 [DEBUG] [Thread-197604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:02:43.311 [DEBUG] [Thread-197604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:02:43.311 [DEBUG] [Thread-197604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:02:43.311 [DEBUG] [Thread-197604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:02:43.312 [DEBUG] [Thread-197604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:02:43.312 [DEBUG] [Thread-197604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:02:43.312 [DEBUG] [Thread-197604] [transport.py] [_log()] client lang: <none>
2026-02-15T04:02:43.312 [DEBUG] [Thread-197604] [transport.py] [_log()] server lang: <none>
2026-02-15T04:02:43.312 [DEBUG] [Thread-197604] [transport.py] [_log()] kex follows: False
2026-02-15T04:02:43.312 [DEBUG] [Thread-197604] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:02:43.312 [DEBUG] [Thread-197604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:02:43.312 [DEBUG] [Thread-197604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:02:43.312 [DEBUG] [Thread-197604] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:02:43.312 [DEBUG] [Thread-197604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:02:43.312 [DEBUG] [Thread-197604] [transport.py] [_log()] Compression: none
2026-02-15T04:02:43.312 [DEBUG] [Thread-197604] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:02:43.331 [DEBUG] [Thread-197604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:02:43.332 [DEBUG] [Thread-197604] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:02:43.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:02:43.334 [DEBUG] [Thread-197604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:02:43.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:02:43.336 [DEBUG] [Thread-197604] [transport.py] [_log()] userauth is OK
2026-02-15T04:02:43.336 [DEBUG] [Thread-197604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:02:43.336 [DEBUG] [Thread-197604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:02:43.336 [DEBUG] [Thread-197604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:02:43.337 [DEBUG] [Thread-197604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:02:43.372 [INFO] [Thread-197604] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:02:43.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:02:43.966 [DEBUG] [Thread-197604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:02:43.966 [DEBUG] [Thread-197604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:02:43.967 [DEBUG] [Thread-197604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:02:44.008 [DEBUG] [Thread-197604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:02:44.008 [DEBUG] [Thread-197604] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:02:44.012 [DEBUG] [Thread-197604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:02:44.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:02:44.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:02:44.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:02:44.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:02:44.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:02:44.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:02:44.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:02:44.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:02:44.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:02:44.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.084827 -999.00   +5.50  24.35     95   +4.70 1 2 1 3 1     0    0 0.61 -6.29 ..E.. 24.4 24.4 157.8 29.3 6.7 -16.6 6.5 -13.9 6.3 -14.1 6.7 -15.0
2026-02-15T04:02:44.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:02:44.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:02:44.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.084827
2026-02-15T04:02:44.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:02:44.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:02:44.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:02:44.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:02:44.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T04:02:44.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:02:30', tmtdew=0.5, humidity=96.46, cloud=0.0, wind=33.82, temperature=5.59, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:02:09.053', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T02:00:00')
2026-02-15T04:02:44.040 [DEBUG] [Thread-197604] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:02:44.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-15T04:02:44.137 [DEBUG] [Thread-197607] [transport.py] [_log()] starting thread (client mode): 0xa2d56d40
2026-02-15T04:02:44.137 [DEBUG] [Thread-197607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:02:44.151 [DEBUG] [Thread-197607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:02:44.151 [INFO] [Thread-197607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:02:44.159 [DEBUG] [Thread-197607] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:02:44.160 [DEBUG] [Thread-197607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:02:44.160 [DEBUG] [Thread-197607] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:02:44.160 [DEBUG] [Thread-197607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:02:44.160 [DEBUG] [Thread-197607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:02:44.160 [DEBUG] [Thread-197607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:02:44.160 [DEBUG] [Thread-197607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:02:44.160 [DEBUG] [Thread-197607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:02:44.160 [DEBUG] [Thread-197607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:02:44.160 [DEBUG] [Thread-197607] [transport.py] [_log()] client lang: <none>
2026-02-15T04:02:44.161 [DEBUG] [Thread-197607] [transport.py] [_log()] server lang: <none>
2026-02-15T04:02:44.161 [DEBUG] [Thread-197607] [transport.py] [_log()] kex follows: False
2026-02-15T04:02:44.161 [DEBUG] [Thread-197607] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:02:44.161 [DEBUG] [Thread-197607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:02:44.161 [DEBUG] [Thread-197607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:02:44.161 [DEBUG] [Thread-197607] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:02:44.161 [DEBUG] [Thread-197607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:02:44.162 [DEBUG] [Thread-197607] [transport.py] [_log()] Compression: none
2026-02-15T04:02:44.162 [DEBUG] [Thread-197607] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:02:44.220 [DEBUG] [Thread-197607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:02:44.221 [DEBUG] [Thread-197607] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:02:44.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:02:44.222 [DEBUG] [Thread-197607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:02:44.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:02:44.279 [DEBUG] [Thread-197607] [transport.py] [_log()] userauth is OK
2026-02-15T04:02:44.279 [DEBUG] [Thread-197607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:02:44.279 [DEBUG] [Thread-197607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:02:44.279 [DEBUG] [Thread-197607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:02:44.280 [DEBUG] [Thread-197607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:02:44.298 [INFO] [Thread-197607] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:02:44.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T04:02:44.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:02:45.094 [DEBUG] [Thread-197607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:02:45.094 [DEBUG] [Thread-197607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:02:45.142 [DEBUG] [Thread-197607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:02:45.143 [DEBUG] [Thread-197607] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:02:45.152 [DEBUG] [Thread-197607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:02:45.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:02: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')
2026-02-15T04:02:45.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-15T04:02:45.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:02:45.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:02:45.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:02:45.190 [DEBUG] [Thread-197607] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:02:53.826 [DEBUG] [Thread-197609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:03:03.698 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:03:03.699 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:03:08.887 [DEBUG] [Thread-197610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:03:15.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:03:15.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:03:15.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T04:03:17.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 3, 6), 0.5, 96.47, 0.0, 31.81, 5.56, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:03:17.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:03:06
2026-02-15T04:03:17.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:03:17.864 [DEBUG] [Thread-197611] [transport.py] [_log()] starting thread (client mode): 0xa2d86170
2026-02-15T04:03:17.864 [DEBUG] [Thread-197611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:03:17.884 [DEBUG] [Thread-197611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:03:17.884 [INFO] [Thread-197611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:03:17.887 [DEBUG] [Thread-197611] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:03:17.887 [DEBUG] [Thread-197611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:03:17.887 [DEBUG] [Thread-197611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:03:17.887 [DEBUG] [Thread-197611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:03:17.887 [DEBUG] [Thread-197611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:03:17.887 [DEBUG] [Thread-197611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:03:17.887 [DEBUG] [Thread-197611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:03:17.887 [DEBUG] [Thread-197611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:03:17.887 [DEBUG] [Thread-197611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:03:17.887 [DEBUG] [Thread-197611] [transport.py] [_log()] client lang: <none>
2026-02-15T04:03:17.887 [DEBUG] [Thread-197611] [transport.py] [_log()] server lang: <none>
2026-02-15T04:03:17.887 [DEBUG] [Thread-197611] [transport.py] [_log()] kex follows: False
2026-02-15T04:03:17.887 [DEBUG] [Thread-197611] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:03:17.887 [DEBUG] [Thread-197611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:03:17.887 [DEBUG] [Thread-197611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:03:17.887 [DEBUG] [Thread-197611] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:03:17.888 [DEBUG] [Thread-197611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:03:17.888 [DEBUG] [Thread-197611] [transport.py] [_log()] Compression: none
2026-02-15T04:03:17.888 [DEBUG] [Thread-197611] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:03:17.907 [DEBUG] [Thread-197611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:03:17.907 [DEBUG] [Thread-197611] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:03:17.908 [DEBUG] [Thread-197611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:03:17.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:03:17.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:03:17.910 [DEBUG] [Thread-197611] [transport.py] [_log()] userauth is OK
2026-02-15T04:03:17.910 [DEBUG] [Thread-197611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:03:17.910 [DEBUG] [Thread-197611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:03:17.910 [DEBUG] [Thread-197611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:03:17.910 [DEBUG] [Thread-197611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:03:17.935 [INFO] [Thread-197611] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:03:17.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:03:18.581 [DEBUG] [Thread-197611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:03:18.581 [DEBUG] [Thread-197611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:03:18.581 [DEBUG] [Thread-197611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:03:18.622 [DEBUG] [Thread-197611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:03:18.623 [DEBUG] [Thread-197611] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:03:18.626 [DEBUG] [Thread-197611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:03:18.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:03:18.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:03:18.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:03:18.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:03:18.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:03:18.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:03:18.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:03:18.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:03:18.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:03:18.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.085175 -999.00   +5.40  24.29     95   +4.70 1 2 1 3 1     0    0 0.62 -5.91 ..E.. 24.3 24.3 165.8 35.6 6.7 -16.0 6.4 -18.5 6.2 -17.7 6.6 -18.0
2026-02-15T04:03:18.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:03:18.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:03:18.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.085175
2026-02-15T04:03:18.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:03:18.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:03:18.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:03:18.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:03:18.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T04:03:18.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:03:06', tmtdew=0.5, humidity=96.47, cloud=0.0, wind=31.81, temperature=5.56, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:02:39.120', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T02:00:00')
2026-02-15T04:03:18.655 [DEBUG] [Thread-197611] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:03:18.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-15T04:03:18.752 [DEBUG] [Thread-197614] [transport.py] [_log()] starting thread (client mode): 0xa2d56b00
2026-02-15T04:03:18.752 [DEBUG] [Thread-197614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:03:18.766 [DEBUG] [Thread-197614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:03:18.767 [INFO] [Thread-197614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:03:18.774 [DEBUG] [Thread-197614] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:03:18.774 [DEBUG] [Thread-197614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:03:18.774 [DEBUG] [Thread-197614] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:03:18.775 [DEBUG] [Thread-197614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:03:18.775 [DEBUG] [Thread-197614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:03:18.775 [DEBUG] [Thread-197614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:03:18.775 [DEBUG] [Thread-197614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:03:18.775 [DEBUG] [Thread-197614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:03:18.775 [DEBUG] [Thread-197614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:03:18.775 [DEBUG] [Thread-197614] [transport.py] [_log()] client lang: <none>
2026-02-15T04:03:18.775 [DEBUG] [Thread-197614] [transport.py] [_log()] server lang: <none>
2026-02-15T04:03:18.775 [DEBUG] [Thread-197614] [transport.py] [_log()] kex follows: False
2026-02-15T04:03:18.775 [DEBUG] [Thread-197614] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:03:18.775 [DEBUG] [Thread-197614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:03:18.775 [DEBUG] [Thread-197614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:03:18.775 [DEBUG] [Thread-197614] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:03:18.775 [DEBUG] [Thread-197614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:03:18.775 [DEBUG] [Thread-197614] [transport.py] [_log()] Compression: none
2026-02-15T04:03:18.775 [DEBUG] [Thread-197614] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:03:18.835 [DEBUG] [Thread-197614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:03:18.835 [DEBUG] [Thread-197614] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:03:18.836 [DEBUG] [Thread-197614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:03:18.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:03:18.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:03:18.891 [DEBUG] [Thread-197614] [transport.py] [_log()] userauth is OK
2026-02-15T04:03:18.891 [DEBUG] [Thread-197614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:03:18.891 [DEBUG] [Thread-197614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:03:18.891 [DEBUG] [Thread-197614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:03:18.891 [DEBUG] [Thread-197614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:03:18.916 [INFO] [Thread-197614] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:03:18.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-15T04:03:18.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:03:19.712 [DEBUG] [Thread-197614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:03:19.713 [DEBUG] [Thread-197614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:03:19.760 [DEBUG] [Thread-197614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:03:19.761 [DEBUG] [Thread-197614] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:03:19.770 [DEBUG] [Thread-197614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:03:19.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:03:19.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T04:03:19.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-15T04:03:19.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:03:19.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:03:19.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:03:19.807 [DEBUG] [Thread-197614] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:03:22.930 [DEBUG] [Thread-197616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:03:23.923 [DEBUG] [Thread-197617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:03:38.975 [DEBUG] [Thread-197618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:03:49.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:03:49.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:03:49.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T04:03:51.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 3, 41), 0.88, 94.01, 0.0, 32.46, 5.95, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:03:51.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:03:41
2026-02-15T04:03:52.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:03:52.176 [DEBUG] [Thread-197619] [transport.py] [_log()] starting thread (client mode): 0xa2d57790
2026-02-15T04:03:52.176 [DEBUG] [Thread-197619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:03:52.196 [DEBUG] [Thread-197619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:03:52.196 [INFO] [Thread-197619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:03:52.199 [DEBUG] [Thread-197619] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:03:52.199 [DEBUG] [Thread-197619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:03:52.199 [DEBUG] [Thread-197619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:03:52.199 [DEBUG] [Thread-197619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:03:52.199 [DEBUG] [Thread-197619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:03:52.199 [DEBUG] [Thread-197619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:03:52.199 [DEBUG] [Thread-197619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:03:52.199 [DEBUG] [Thread-197619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:03:52.199 [DEBUG] [Thread-197619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:03:52.199 [DEBUG] [Thread-197619] [transport.py] [_log()] client lang: <none>
2026-02-15T04:03:52.199 [DEBUG] [Thread-197619] [transport.py] [_log()] server lang: <none>
2026-02-15T04:03:52.199 [DEBUG] [Thread-197619] [transport.py] [_log()] kex follows: False
2026-02-15T04:03:52.199 [DEBUG] [Thread-197619] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:03:52.199 [DEBUG] [Thread-197619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:03:52.199 [DEBUG] [Thread-197619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:03:52.199 [DEBUG] [Thread-197619] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:03:52.199 [DEBUG] [Thread-197619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:03:52.199 [DEBUG] [Thread-197619] [transport.py] [_log()] Compression: none
2026-02-15T04:03:52.199 [DEBUG] [Thread-197619] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:03:52.215 [DEBUG] [Thread-197619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:03:52.215 [DEBUG] [Thread-197619] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:03:52.215 [DEBUG] [Thread-197619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:03:52.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:03:52.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:03:52.216 [DEBUG] [Thread-197619] [transport.py] [_log()] userauth is OK
2026-02-15T04:03:52.216 [DEBUG] [Thread-197619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:03:52.216 [DEBUG] [Thread-197619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:03:52.216 [DEBUG] [Thread-197619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:03:52.216 [DEBUG] [Thread-197619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:03:52.225 [INFO] [Thread-197619] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:03:52.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:03:52.983 [DEBUG] [Thread-197619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:03:52.983 [DEBUG] [Thread-197619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:03:52.983 [DEBUG] [Thread-197619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:03:53.025 [DEBUG] [Thread-197619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:03:53.025 [DEBUG] [Thread-197619] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:03:53.028 [DEBUG] [Thread-197619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:03:53.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:03:53.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:03:53.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:03:53.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:03:53.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:03:53.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:03:53.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:03:53.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:03:53.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:03:53.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.085522 -999.00   +5.40  18.61     95   +4.70 1 2 1 3 1     0    0 0.64 -5.43 ..E.. 18.6 18.6 156.6 30.0 6.6 -18.4 6.4 -14.6 6.3 -14.2 6.6 -15.5
2026-02-15T04:03:53.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:03:53.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:03:53.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.085522
2026-02-15T04:03:53.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:03:53.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:03:53.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:03:53.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:03:53.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T04:03:53.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:03:41', tmtdew=0.88, humidity=94.01, cloud=0.0, wind=32.46, temperature=5.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:03:09.101', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T02:00:00')
2026-02-15T04:03:53.049 [DEBUG] [Thread-197619] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:03:53.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-15T04:03:53.145 [DEBUG] [Thread-197622] [transport.py] [_log()] starting thread (client mode): 0xa2d57340
2026-02-15T04:03:53.145 [DEBUG] [Thread-197622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:03:53.159 [DEBUG] [Thread-197622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:03:53.159 [INFO] [Thread-197622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:03:53.167 [DEBUG] [Thread-197622] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:03:53.167 [DEBUG] [Thread-197622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:03:53.167 [DEBUG] [Thread-197622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:03:53.167 [DEBUG] [Thread-197622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:03:53.167 [DEBUG] [Thread-197622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:03:53.167 [DEBUG] [Thread-197622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:03:53.167 [DEBUG] [Thread-197622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:03:53.168 [DEBUG] [Thread-197622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:03:53.168 [DEBUG] [Thread-197622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:03:53.168 [DEBUG] [Thread-197622] [transport.py] [_log()] client lang: <none>
2026-02-15T04:03:53.168 [DEBUG] [Thread-197622] [transport.py] [_log()] server lang: <none>
2026-02-15T04:03:53.168 [DEBUG] [Thread-197622] [transport.py] [_log()] kex follows: False
2026-02-15T04:03:53.168 [DEBUG] [Thread-197622] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:03:53.168 [DEBUG] [Thread-197622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:03:53.168 [DEBUG] [Thread-197622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:03:53.169 [DEBUG] [Thread-197622] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:03:53.169 [DEBUG] [Thread-197622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:03:53.169 [DEBUG] [Thread-197622] [transport.py] [_log()] Compression: none
2026-02-15T04:03:53.169 [DEBUG] [Thread-197622] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:03:53.226 [DEBUG] [Thread-197622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:03:53.226 [DEBUG] [Thread-197622] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:03:53.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:03:53.227 [DEBUG] [Thread-197622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:03:53.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:03:53.282 [DEBUG] [Thread-197622] [transport.py] [_log()] userauth is OK
2026-02-15T04:03:53.283 [DEBUG] [Thread-197622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:03:53.283 [DEBUG] [Thread-197622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:03:53.283 [DEBUG] [Thread-197622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:03:53.283 [DEBUG] [Thread-197622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:03:53.312 [INFO] [Thread-197622] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:03:53.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-15T04:03:53.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:03:54.011 [DEBUG] [Thread-197624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:03:54.100 [DEBUG] [Thread-197622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:03:54.100 [DEBUG] [Thread-197622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:03:54.148 [DEBUG] [Thread-197622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:03:54.148 [DEBUG] [Thread-197622] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:03:54.158 [DEBUG] [Thread-197622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:03:54.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:03:54.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-15T04:03: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-15T04:03:54.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:03:54.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:03:54.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:03:54.190 [DEBUG] [Thread-197622] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:04:03.903 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:04:03.905 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:04:09.064 [DEBUG] [Thread-197625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:04:22.995 [DEBUG] [Thread-197626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:04:24.101 [DEBUG] [Thread-197627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:04:24.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:04:24.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:04:24.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-15T04:04:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 4, 16), 0.51, 96.41, 0.0, 31.44, 5.51, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:04:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:04:16
2026-02-15T04:04:26.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:04:26.527 [DEBUG] [Thread-197628] [transport.py] [_log()] starting thread (client mode): 0xa2d573a0
2026-02-15T04:04:26.527 [DEBUG] [Thread-197628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:04:26.547 [DEBUG] [Thread-197628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:04:26.547 [INFO] [Thread-197628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:04:26.550 [DEBUG] [Thread-197628] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:04:26.550 [DEBUG] [Thread-197628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:04:26.550 [DEBUG] [Thread-197628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:04:26.550 [DEBUG] [Thread-197628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:04:26.551 [DEBUG] [Thread-197628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:04:26.551 [DEBUG] [Thread-197628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:04:26.551 [DEBUG] [Thread-197628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:04:26.551 [DEBUG] [Thread-197628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:04:26.551 [DEBUG] [Thread-197628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:04:26.551 [DEBUG] [Thread-197628] [transport.py] [_log()] client lang: <none>
2026-02-15T04:04:26.551 [DEBUG] [Thread-197628] [transport.py] [_log()] server lang: <none>
2026-02-15T04:04:26.551 [DEBUG] [Thread-197628] [transport.py] [_log()] kex follows: False
2026-02-15T04:04:26.551 [DEBUG] [Thread-197628] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:04:26.551 [DEBUG] [Thread-197628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:04:26.551 [DEBUG] [Thread-197628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:04:26.551 [DEBUG] [Thread-197628] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:04:26.551 [DEBUG] [Thread-197628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:04:26.551 [DEBUG] [Thread-197628] [transport.py] [_log()] Compression: none
2026-02-15T04:04:26.551 [DEBUG] [Thread-197628] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:04:26.567 [DEBUG] [Thread-197628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:04:26.568 [DEBUG] [Thread-197628] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:04:26.568 [DEBUG] [Thread-197628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:04:26.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:04:26.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:04:26.570 [DEBUG] [Thread-197628] [transport.py] [_log()] userauth is OK
2026-02-15T04:04:26.570 [DEBUG] [Thread-197628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:04:26.570 [DEBUG] [Thread-197628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:04:26.571 [DEBUG] [Thread-197628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:04:26.571 [DEBUG] [Thread-197628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:04:26.594 [INFO] [Thread-197628] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:04:26.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:04:27.201 [DEBUG] [Thread-197628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:04:27.201 [DEBUG] [Thread-197628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:04:27.202 [DEBUG] [Thread-197628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:04:27.242 [DEBUG] [Thread-197628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:04:27.242 [DEBUG] [Thread-197628] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:04:27.246 [DEBUG] [Thread-197628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:04:27.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:04:27.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:04:27.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:04:27.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:04:27.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:04:27.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:04:27.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:04:27.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:04:27.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:04:27.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.085869 -999.00   +5.40  20.43     95   +4.70 1 2 1 3 1     0    0 0.62 -5.62 ..Es. 20.4 20.4 156.4 27.9 6.7 -15.5 6.4 -15.1 6.2 -13.9 6.6 -14.6
2026-02-15T04:04:27.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:04:27.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:04:27.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.085869
2026-02-15T04:04:27.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:04:27.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:04:27.271 [DEBUG] [Thread-197628] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:04:27.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:04:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:04:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T04:04:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:04:16', tmtdew=0.51, humidity=96.41, cloud=0.0, wind=31.44, temperature=5.51, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:03:39.082', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T02:02:00')
2026-02-15T04:04:27.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-15T04:04:27.373 [DEBUG] [Thread-197631] [transport.py] [_log()] starting thread (client mode): 0xa2d55330
2026-02-15T04:04:27.373 [DEBUG] [Thread-197631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:04:27.392 [DEBUG] [Thread-197631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:04:27.392 [INFO] [Thread-197631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:04:27.399 [DEBUG] [Thread-197631] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:04:27.400 [DEBUG] [Thread-197631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:04:27.400 [DEBUG] [Thread-197631] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:04:27.400 [DEBUG] [Thread-197631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:04:27.400 [DEBUG] [Thread-197631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:04:27.400 [DEBUG] [Thread-197631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:04:27.400 [DEBUG] [Thread-197631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:04:27.401 [DEBUG] [Thread-197631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:04:27.401 [DEBUG] [Thread-197631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:04:27.401 [DEBUG] [Thread-197631] [transport.py] [_log()] client lang: <none>
2026-02-15T04:04:27.401 [DEBUG] [Thread-197631] [transport.py] [_log()] server lang: <none>
2026-02-15T04:04:27.401 [DEBUG] [Thread-197631] [transport.py] [_log()] kex follows: False
2026-02-15T04:04:27.401 [DEBUG] [Thread-197631] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:04:27.401 [DEBUG] [Thread-197631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:04:27.401 [DEBUG] [Thread-197631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:04:27.401 [DEBUG] [Thread-197631] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:04:27.401 [DEBUG] [Thread-197631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:04:27.401 [DEBUG] [Thread-197631] [transport.py] [_log()] Compression: none
2026-02-15T04:04:27.401 [DEBUG] [Thread-197631] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:04:27.457 [DEBUG] [Thread-197631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:04:27.458 [DEBUG] [Thread-197631] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:04:27.458 [DEBUG] [Thread-197631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:04:27.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:04:27.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:04:27.514 [DEBUG] [Thread-197631] [transport.py] [_log()] userauth is OK
2026-02-15T04:04:27.514 [DEBUG] [Thread-197631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:04:27.514 [DEBUG] [Thread-197631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:04:27.514 [DEBUG] [Thread-197631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:04:27.514 [DEBUG] [Thread-197631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:04:27.536 [INFO] [Thread-197631] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:04:27.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-15T04:04:27.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:04:28.366 [DEBUG] [Thread-197631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:04:28.366 [DEBUG] [Thread-197631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:04:28.414 [DEBUG] [Thread-197631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:04:28.414 [DEBUG] [Thread-197631] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:04:28.423 [DEBUG] [Thread-197631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:04:28.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:04:28.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T04:04:28.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-15T04:04:28.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:04:28.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:04:28.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:04:28.457 [DEBUG] [Thread-197631] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:04:39.136 [DEBUG] [Thread-197633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:04:54.197 [DEBUG] [Thread-197634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:04:58.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:04:58.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:04:58.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-15T04:05:00.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 4, 16), 0.51, 96.41, 0.0, 31.44, 5.51, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:05:00.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:04:16
2026-02-15T04:05:01.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:05:01.476 [DEBUG] [Thread-197635] [transport.py] [_log()] starting thread (client mode): 0xa57d67a0
2026-02-15T04:05:01.476 [DEBUG] [Thread-197635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:05:01.496 [DEBUG] [Thread-197635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:05:01.497 [INFO] [Thread-197635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:05:01.500 [DEBUG] [Thread-197635] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:05:01.500 [DEBUG] [Thread-197635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:05:01.500 [DEBUG] [Thread-197635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:05:01.500 [DEBUG] [Thread-197635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:05:01.500 [DEBUG] [Thread-197635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:05:01.501 [DEBUG] [Thread-197635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:05:01.501 [DEBUG] [Thread-197635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:05:01.501 [DEBUG] [Thread-197635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:05:01.501 [DEBUG] [Thread-197635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:05:01.501 [DEBUG] [Thread-197635] [transport.py] [_log()] client lang: <none>
2026-02-15T04:05:01.501 [DEBUG] [Thread-197635] [transport.py] [_log()] server lang: <none>
2026-02-15T04:05:01.501 [DEBUG] [Thread-197635] [transport.py] [_log()] kex follows: False
2026-02-15T04:05:01.501 [DEBUG] [Thread-197635] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:05:01.501 [DEBUG] [Thread-197635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:05:01.501 [DEBUG] [Thread-197635] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:05:01.501 [DEBUG] [Thread-197635] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:05:01.501 [DEBUG] [Thread-197635] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:05:01.501 [DEBUG] [Thread-197635] [transport.py] [_log()] Compression: none
2026-02-15T04:05:01.501 [DEBUG] [Thread-197635] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:05:01.516 [DEBUG] [Thread-197635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:05:01.516 [DEBUG] [Thread-197635] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:05:01.517 [DEBUG] [Thread-197635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:05:01.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:05:01.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:05:01.518 [DEBUG] [Thread-197635] [transport.py] [_log()] userauth is OK
2026-02-15T04:05:01.518 [DEBUG] [Thread-197635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:05:01.519 [DEBUG] [Thread-197635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:05:01.519 [DEBUG] [Thread-197635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:05:01.519 [DEBUG] [Thread-197635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:05:01.533 [INFO] [Thread-197635] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:05:01.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:05:02.149 [DEBUG] [Thread-197635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:05:02.150 [DEBUG] [Thread-197635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:05:02.150 [DEBUG] [Thread-197635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:05:02.190 [DEBUG] [Thread-197635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:05:02.191 [DEBUG] [Thread-197635] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:05:02.193 [DEBUG] [Thread-197635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:05:02.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:05:02.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:05:02.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:05:02.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:05:02.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:05:02.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:05:02.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:05:02.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:05:02.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:05:02.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.086216 -999.00   +5.40  21.27     95   +4.70 1 2 1 3 1     0    0 0.64 -5.36 ..Es. 21.3 21.3 161.3 29.6 6.6 -18.6 6.3 -19.3 6.2 -17.2 6.6 -17.2
2026-02-15T04:05:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:05:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:05:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.086216
2026-02-15T04:05:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:05:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:05:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:05:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:05:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T04:05:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:04:16', tmtdew=0.51, humidity=96.41, cloud=0.0, wind=31.44, temperature=5.51, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:04:09.062', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T02:02:00')
2026-02-15T04:05:02.221 [DEBUG] [Thread-197635] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:05: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-15T04:05:02.316 [DEBUG] [Thread-197638] [transport.py] [_log()] starting thread (client mode): 0xa57d41f0
2026-02-15T04:05:02.316 [DEBUG] [Thread-197638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:05:02.331 [DEBUG] [Thread-197638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:05:02.331 [INFO] [Thread-197638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:05:02.339 [DEBUG] [Thread-197638] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:05:02.339 [DEBUG] [Thread-197638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:05:02.339 [DEBUG] [Thread-197638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:05:02.339 [DEBUG] [Thread-197638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:05:02.339 [DEBUG] [Thread-197638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:05:02.339 [DEBUG] [Thread-197638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:05:02.339 [DEBUG] [Thread-197638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:05:02.339 [DEBUG] [Thread-197638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:05:02.339 [DEBUG] [Thread-197638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:05:02.339 [DEBUG] [Thread-197638] [transport.py] [_log()] client lang: <none>
2026-02-15T04:05:02.339 [DEBUG] [Thread-197638] [transport.py] [_log()] server lang: <none>
2026-02-15T04:05:02.340 [DEBUG] [Thread-197638] [transport.py] [_log()] kex follows: False
2026-02-15T04:05:02.340 [DEBUG] [Thread-197638] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:05:02.340 [DEBUG] [Thread-197638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:05:02.340 [DEBUG] [Thread-197638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:05:02.340 [DEBUG] [Thread-197638] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:05:02.340 [DEBUG] [Thread-197638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:05:02.340 [DEBUG] [Thread-197638] [transport.py] [_log()] Compression: none
2026-02-15T04:05:02.340 [DEBUG] [Thread-197638] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:05:02.399 [DEBUG] [Thread-197638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:05:02.400 [DEBUG] [Thread-197638] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:05:02.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:05:02.401 [DEBUG] [Thread-197638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:05:02.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:05:02.458 [DEBUG] [Thread-197638] [transport.py] [_log()] userauth is OK
2026-02-15T04:05:02.459 [DEBUG] [Thread-197638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:05:02.459 [DEBUG] [Thread-197638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:05:02.459 [DEBUG] [Thread-197638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:05:02.459 [DEBUG] [Thread-197638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:05:02.477 [INFO] [Thread-197638] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:05:02.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-15T04:05:02.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:05:03.310 [DEBUG] [Thread-197638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:05:03.310 [DEBUG] [Thread-197638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:05:03.359 [DEBUG] [Thread-197638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:05:03.359 [DEBUG] [Thread-197638] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:05:03.369 [DEBUG] [Thread-197638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:05:03.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:05:03.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-15T04:05:03.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-15T04:05:03.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:05:03.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:05:03.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:05:03.406 [DEBUG] [Thread-197638] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:05:04.113 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:05:04.114 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:05:09.233 [DEBUG] [Thread-197640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:05:23.056 [DEBUG] [Thread-197641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:05:24.288 [DEBUG] [Thread-197642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:05:33.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:05:33.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:05:33.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-15T04:05:35.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 4, 51), 0.49, 96.51, 0.0, 31.6, 5.54, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:05:35.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:04:51
2026-02-15T04:05:35.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:05:35.830 [DEBUG] [Thread-197643] [transport.py] [_log()] starting thread (client mode): 0xa2d844c0
2026-02-15T04:05:35.830 [DEBUG] [Thread-197643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:05:35.850 [DEBUG] [Thread-197643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:05:35.850 [INFO] [Thread-197643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:05:35.851 [DEBUG] [Thread-197643] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:05:35.851 [DEBUG] [Thread-197643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:05:35.851 [DEBUG] [Thread-197643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:05:35.851 [DEBUG] [Thread-197643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:05:35.852 [DEBUG] [Thread-197643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:05:35.852 [DEBUG] [Thread-197643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:05:35.852 [DEBUG] [Thread-197643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:05:35.852 [DEBUG] [Thread-197643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:05:35.852 [DEBUG] [Thread-197643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:05:35.852 [DEBUG] [Thread-197643] [transport.py] [_log()] client lang: <none>
2026-02-15T04:05:35.852 [DEBUG] [Thread-197643] [transport.py] [_log()] server lang: <none>
2026-02-15T04:05:35.852 [DEBUG] [Thread-197643] [transport.py] [_log()] kex follows: False
2026-02-15T04:05:35.852 [DEBUG] [Thread-197643] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:05:35.852 [DEBUG] [Thread-197643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:05:35.852 [DEBUG] [Thread-197643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:05:35.852 [DEBUG] [Thread-197643] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:05:35.852 [DEBUG] [Thread-197643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:05:35.852 [DEBUG] [Thread-197643] [transport.py] [_log()] Compression: none
2026-02-15T04:05:35.852 [DEBUG] [Thread-197643] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:05:35.860 [DEBUG] [Thread-197643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:05:35.861 [DEBUG] [Thread-197643] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:05:35.861 [DEBUG] [Thread-197643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:05:35.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:05:35.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:05:35.863 [DEBUG] [Thread-197643] [transport.py] [_log()] userauth is OK
2026-02-15T04:05:35.863 [DEBUG] [Thread-197643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:05:35.863 [DEBUG] [Thread-197643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:05:35.863 [DEBUG] [Thread-197643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:05:35.863 [DEBUG] [Thread-197643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:05:35.879 [INFO] [Thread-197643] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:05:35.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:05:36.525 [DEBUG] [Thread-197643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:05:36.525 [DEBUG] [Thread-197643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:05:36.525 [DEBUG] [Thread-197643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:05:36.567 [DEBUG] [Thread-197643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:05:36.567 [DEBUG] [Thread-197643] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:05:36.569 [DEBUG] [Thread-197643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:05:36.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:05:36.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:05:36.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:05:36.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:05:36.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:05:36.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:05:36.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:05:36.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:05:36.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:05:36.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.086910 -999.00   +5.40  24.39     95   +4.70 1 2 1 3 1     0    0 0.60 -5.80 ..ES. 24.4 24.4 162.2 31.5 6.6 -14.7 6.4 -12.1 6.2 -11.8 6.5 -12.8
2026-02-15T04:05:36.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:05:36.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:05:36.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.086910
2026-02-15T04:05:36.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:05:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:05:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:05:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:05:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T04:05:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:04:51', tmtdew=0.49, humidity=96.51, cloud=0.0, wind=31.6, temperature=5.54, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:05:09.024', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T02:02:00')
2026-02-15T04:05:36.595 [DEBUG] [Thread-197643] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:05: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-15T04:05:36.697 [DEBUG] [Thread-197646] [transport.py] [_log()] starting thread (client mode): 0xa2d57340
2026-02-15T04:05:36.698 [DEBUG] [Thread-197646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:05:36.713 [DEBUG] [Thread-197646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:05:36.713 [INFO] [Thread-197646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:05:36.722 [DEBUG] [Thread-197646] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:05:36.722 [DEBUG] [Thread-197646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:05:36.722 [DEBUG] [Thread-197646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:05:36.722 [DEBUG] [Thread-197646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:05:36.722 [DEBUG] [Thread-197646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:05:36.722 [DEBUG] [Thread-197646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:05:36.722 [DEBUG] [Thread-197646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:05:36.722 [DEBUG] [Thread-197646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:05:36.723 [DEBUG] [Thread-197646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:05:36.723 [DEBUG] [Thread-197646] [transport.py] [_log()] client lang: <none>
2026-02-15T04:05:36.723 [DEBUG] [Thread-197646] [transport.py] [_log()] server lang: <none>
2026-02-15T04:05:36.723 [DEBUG] [Thread-197646] [transport.py] [_log()] kex follows: False
2026-02-15T04:05:36.723 [DEBUG] [Thread-197646] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:05:36.723 [DEBUG] [Thread-197646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:05:36.723 [DEBUG] [Thread-197646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:05:36.723 [DEBUG] [Thread-197646] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:05:36.723 [DEBUG] [Thread-197646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:05:36.723 [DEBUG] [Thread-197646] [transport.py] [_log()] Compression: none
2026-02-15T04:05:36.723 [DEBUG] [Thread-197646] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:05:36.778 [DEBUG] [Thread-197646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:05:36.779 [DEBUG] [Thread-197646] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:05:36.779 [DEBUG] [Thread-197646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:05:36.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:05:36.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:05:36.835 [DEBUG] [Thread-197646] [transport.py] [_log()] userauth is OK
2026-02-15T04:05:36.835 [DEBUG] [Thread-197646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:05:36.835 [DEBUG] [Thread-197646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:05:36.835 [DEBUG] [Thread-197646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:05:36.835 [DEBUG] [Thread-197646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:05:36.854 [INFO] [Thread-197646] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:05:36.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-15T04:05:36.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:05:37.632 [DEBUG] [Thread-197646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:05:37.632 [DEBUG] [Thread-197646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:05:37.680 [DEBUG] [Thread-197646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:05:37.680 [DEBUG] [Thread-197646] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:05:37.690 [DEBUG] [Thread-197646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:05:37.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:05:37.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-15T04:05:37.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-15T04:05:37.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:05:37.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:05:37.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:05:37.727 [DEBUG] [Thread-197646] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:05:39.324 [DEBUG] [Thread-197648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:05:54.379 [DEBUG] [Thread-197649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:06:04.318 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:06:04.319 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:06:07.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:06:07.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:06:07.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-15T04:06:09.418 [DEBUG] [Thread-197650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:06:09.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 5, 28), 0.49, 96.52, 0.0, 31.65, 5.52, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:06:09.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:05:28
2026-02-15T04:06:10.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:06:10.274 [DEBUG] [Thread-197651] [transport.py] [_log()] starting thread (client mode): 0xa2d86e90
2026-02-15T04:06:10.274 [DEBUG] [Thread-197651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:06:10.294 [DEBUG] [Thread-197651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:06:10.294 [INFO] [Thread-197651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:06:10.298 [DEBUG] [Thread-197651] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:06:10.298 [DEBUG] [Thread-197651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:06:10.298 [DEBUG] [Thread-197651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:06:10.298 [DEBUG] [Thread-197651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:06:10.298 [DEBUG] [Thread-197651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:06:10.298 [DEBUG] [Thread-197651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:06:10.298 [DEBUG] [Thread-197651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:06:10.298 [DEBUG] [Thread-197651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:06:10.299 [DEBUG] [Thread-197651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:06:10.299 [DEBUG] [Thread-197651] [transport.py] [_log()] client lang: <none>
2026-02-15T04:06:10.299 [DEBUG] [Thread-197651] [transport.py] [_log()] server lang: <none>
2026-02-15T04:06:10.299 [DEBUG] [Thread-197651] [transport.py] [_log()] kex follows: False
2026-02-15T04:06:10.299 [DEBUG] [Thread-197651] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:06:10.299 [DEBUG] [Thread-197651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:06:10.299 [DEBUG] [Thread-197651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:06:10.299 [DEBUG] [Thread-197651] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:06:10.299 [DEBUG] [Thread-197651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:06:10.299 [DEBUG] [Thread-197651] [transport.py] [_log()] Compression: none
2026-02-15T04:06:10.299 [DEBUG] [Thread-197651] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:06:10.318 [DEBUG] [Thread-197651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:06:10.319 [DEBUG] [Thread-197651] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:06:10.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:06:10.320 [DEBUG] [Thread-197651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:06:10.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:06:10.323 [DEBUG] [Thread-197651] [transport.py] [_log()] userauth is OK
2026-02-15T04:06:10.323 [DEBUG] [Thread-197651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:06:10.323 [DEBUG] [Thread-197651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:06:10.323 [DEBUG] [Thread-197651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:06:10.324 [DEBUG] [Thread-197651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:06:10.347 [INFO] [Thread-197651] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:06:10.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:06:10.990 [DEBUG] [Thread-197651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:06:10.991 [DEBUG] [Thread-197651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:06:10.991 [DEBUG] [Thread-197651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:06:11.032 [DEBUG] [Thread-197651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:06:11.032 [DEBUG] [Thread-197651] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:06:11.035 [DEBUG] [Thread-197651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:06:11.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:06:11.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:06:11.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:06:11.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:06:11.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:06:11.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:06:11.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:06:11.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:06:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:06:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.087258 -999.00   +5.40  21.01     95   +4.70 1 2 1 3 1     0    0 0.62 -5.56 ..ES. 21.0 21.0 148.8 29.1 6.5 -14.0 6.4 -14.5 6.2 -12.8 6.6 -13.3
2026-02-15T04:06:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:06:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:06:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.087258
2026-02-15T04:06:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:06:11.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:06:11.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:06:11.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:06:11.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T04:06:11.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:05:28', tmtdew=0.49, humidity=96.52, cloud=0.0, wind=31.65, temperature=5.52, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:05:39.091', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T02:02:00')
2026-02-15T04:06:11.061 [DEBUG] [Thread-197651] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:06:11.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T04:06:11.158 [DEBUG] [Thread-197654] [transport.py] [_log()] starting thread (client mode): 0xa57d52d0
2026-02-15T04:06:11.158 [DEBUG] [Thread-197654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:06:11.173 [DEBUG] [Thread-197654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:06:11.173 [INFO] [Thread-197654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:06:11.181 [DEBUG] [Thread-197654] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:06:11.181 [DEBUG] [Thread-197654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:06:11.181 [DEBUG] [Thread-197654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:06:11.181 [DEBUG] [Thread-197654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:06:11.182 [DEBUG] [Thread-197654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:06:11.182 [DEBUG] [Thread-197654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:06:11.182 [DEBUG] [Thread-197654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:06:11.182 [DEBUG] [Thread-197654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:06:11.182 [DEBUG] [Thread-197654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:06:11.182 [DEBUG] [Thread-197654] [transport.py] [_log()] client lang: <none>
2026-02-15T04:06:11.182 [DEBUG] [Thread-197654] [transport.py] [_log()] server lang: <none>
2026-02-15T04:06:11.182 [DEBUG] [Thread-197654] [transport.py] [_log()] kex follows: False
2026-02-15T04:06:11.182 [DEBUG] [Thread-197654] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:06:11.182 [DEBUG] [Thread-197654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:06:11.182 [DEBUG] [Thread-197654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:06:11.182 [DEBUG] [Thread-197654] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:06:11.182 [DEBUG] [Thread-197654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:06:11.182 [DEBUG] [Thread-197654] [transport.py] [_log()] Compression: none
2026-02-15T04:06:11.182 [DEBUG] [Thread-197654] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:06:11.238 [DEBUG] [Thread-197654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:06:11.238 [DEBUG] [Thread-197654] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:06:11.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:06:11.239 [DEBUG] [Thread-197654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:06:11.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:06:11.295 [DEBUG] [Thread-197654] [transport.py] [_log()] userauth is OK
2026-02-15T04:06:11.296 [DEBUG] [Thread-197654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:06:11.296 [DEBUG] [Thread-197654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:06:11.296 [DEBUG] [Thread-197654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:06:11.296 [DEBUG] [Thread-197654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:06:11.315 [INFO] [Thread-197654] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:06:11.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-15T04:06:11.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:06:12.094 [DEBUG] [Thread-197654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:06:12.095 [DEBUG] [Thread-197654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:06:12.142 [DEBUG] [Thread-197654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:06:12.143 [DEBUG] [Thread-197654] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:06:12.152 [DEBUG] [Thread-197654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:06:12.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:06:12.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-15T04:06:12.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-15T04:06:12.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:06:12.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:06:12.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:06:12.189 [DEBUG] [Thread-197654] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:06:23.117 [DEBUG] [Thread-197656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:06:24.455 [DEBUG] [Thread-197657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:06:39.502 [DEBUG] [Thread-197658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:06:42.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:06:42.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:06:42.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-15T04:06:44.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 6, 3), 0.49, 96.54, 0.0, 31.92, 5.52, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:06:44.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:06:03
2026-02-15T04:06:44.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:06:44.770 [DEBUG] [Thread-197659] [transport.py] [_log()] starting thread (client mode): 0xa2d54430
2026-02-15T04:06:44.771 [DEBUG] [Thread-197659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:06:44.792 [DEBUG] [Thread-197659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:06:44.792 [INFO] [Thread-197659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:06:44.795 [DEBUG] [Thread-197659] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:06:44.795 [DEBUG] [Thread-197659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:06:44.795 [DEBUG] [Thread-197659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:06:44.795 [DEBUG] [Thread-197659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:06:44.795 [DEBUG] [Thread-197659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:06:44.795 [DEBUG] [Thread-197659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:06:44.795 [DEBUG] [Thread-197659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:06:44.796 [DEBUG] [Thread-197659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:06:44.796 [DEBUG] [Thread-197659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:06:44.796 [DEBUG] [Thread-197659] [transport.py] [_log()] client lang: <none>
2026-02-15T04:06:44.796 [DEBUG] [Thread-197659] [transport.py] [_log()] server lang: <none>
2026-02-15T04:06:44.796 [DEBUG] [Thread-197659] [transport.py] [_log()] kex follows: False
2026-02-15T04:06:44.796 [DEBUG] [Thread-197659] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:06:44.796 [DEBUG] [Thread-197659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:06:44.796 [DEBUG] [Thread-197659] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:06:44.796 [DEBUG] [Thread-197659] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:06:44.796 [DEBUG] [Thread-197659] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:06:44.796 [DEBUG] [Thread-197659] [transport.py] [_log()] Compression: none
2026-02-15T04:06:44.796 [DEBUG] [Thread-197659] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:06:44.812 [DEBUG] [Thread-197659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:06:44.812 [DEBUG] [Thread-197659] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:06:44.813 [DEBUG] [Thread-197659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:06:44.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:06:44.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:06:44.815 [DEBUG] [Thread-197659] [transport.py] [_log()] userauth is OK
2026-02-15T04:06:44.815 [DEBUG] [Thread-197659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:06:44.815 [DEBUG] [Thread-197659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:06:44.815 [DEBUG] [Thread-197659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:06:44.815 [DEBUG] [Thread-197659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:06:44.841 [INFO] [Thread-197659] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:06:44.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:06:45.470 [DEBUG] [Thread-197659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:06:45.471 [DEBUG] [Thread-197659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:06:45.471 [DEBUG] [Thread-197659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:06:45.511 [DEBUG] [Thread-197659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:06:45.512 [DEBUG] [Thread-197659] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:06:45.515 [DEBUG] [Thread-197659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:06:45.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:06:45.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:06:45.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:06:45.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:06:45.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:06:45.539 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:06:45.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:06:45.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:06:45.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:06:45.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.087605 -999.00   +5.50  19.01     95   +4.70 1 3 1 3 1     0    0 0.62 -5.48 ..e.. 19.0 19.0 153.0 29.4 6.5 -12.2 6.4 -9.7 6.2 -9.8 6.6 -10.5
2026-02-15T04:06:45.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:06:45.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:06:45.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.087605
2026-02-15T04:06:45.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:06:45.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:06:45.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:06:45.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:06:45.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:06:45.541 [DEBUG] [Thread-197659] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:06:45.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:06:03', tmtdew=0.49, humidity=96.54, cloud=0.0, wind=31.92, temperature=5.52, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:06:09.072', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.38525, nan, nan, nan, nan, nan, nan, nan, 2.2270000000000003, 2.6342499999999998, 1.8849999999999998, nan, nan, nan, nan, nan, 1.8365, 2.2619999999999996, nan, nan, nan, nan, nan, 2.0885, 2.4445000000000006, 1.9997499999999997, 2.1175000000000006, 2.268, 2.549500000000001, 2.538000000000001, nan, 2.5642499999999995], zp_timestamp='2026-02-15T02:02:00')
2026-02-15T04:06:45.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-15T04:06:45.638 [DEBUG] [Thread-197662] [transport.py] [_log()] starting thread (client mode): 0xa57d62f0
2026-02-15T04:06:45.639 [DEBUG] [Thread-197662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:06:45.653 [DEBUG] [Thread-197662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:06:45.653 [INFO] [Thread-197662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:06:45.661 [DEBUG] [Thread-197662] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:06:45.661 [DEBUG] [Thread-197662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:06:45.661 [DEBUG] [Thread-197662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:06:45.661 [DEBUG] [Thread-197662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:06:45.661 [DEBUG] [Thread-197662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:06:45.661 [DEBUG] [Thread-197662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:06:45.661 [DEBUG] [Thread-197662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:06:45.661 [DEBUG] [Thread-197662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:06:45.661 [DEBUG] [Thread-197662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:06:45.661 [DEBUG] [Thread-197662] [transport.py] [_log()] client lang: <none>
2026-02-15T04:06:45.662 [DEBUG] [Thread-197662] [transport.py] [_log()] server lang: <none>
2026-02-15T04:06:45.662 [DEBUG] [Thread-197662] [transport.py] [_log()] kex follows: False
2026-02-15T04:06:45.662 [DEBUG] [Thread-197662] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:06:45.662 [DEBUG] [Thread-197662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:06:45.662 [DEBUG] [Thread-197662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:06:45.662 [DEBUG] [Thread-197662] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:06:45.662 [DEBUG] [Thread-197662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:06:45.662 [DEBUG] [Thread-197662] [transport.py] [_log()] Compression: none
2026-02-15T04:06:45.662 [DEBUG] [Thread-197662] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:06:45.718 [DEBUG] [Thread-197662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:06:45.718 [DEBUG] [Thread-197662] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:06:45.719 [DEBUG] [Thread-197662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:06:45.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:06:45.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:06:45.774 [DEBUG] [Thread-197662] [transport.py] [_log()] userauth is OK
2026-02-15T04:06:45.774 [DEBUG] [Thread-197662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:06:45.775 [DEBUG] [Thread-197662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:06:45.775 [DEBUG] [Thread-197662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:06:45.775 [DEBUG] [Thread-197662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:06:45.797 [INFO] [Thread-197662] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:06:45.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-15T04:06:45.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:06:46.641 [DEBUG] [Thread-197662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:06:46.642 [DEBUG] [Thread-197662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:06:46.689 [DEBUG] [Thread-197662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:06:46.689 [DEBUG] [Thread-197662] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:06:46.698 [DEBUG] [Thread-197662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:06:46.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:06:46.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T04:06:46.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T04:06:46.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:06:46.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:06:46.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:06:46.734 [DEBUG] [Thread-197662] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:06:54.538 [DEBUG] [Thread-197664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:07:04.544 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:07:04.545 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:07:09.594 [DEBUG] [Thread-197665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:07:16.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:07:16.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:07: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-15T04:07:19.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 6, 38), 0.87, 94.11, 0.0, 34.4, 5.95, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:07:19.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:06:38
2026-02-15T04:07:19.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:07:19.643 [DEBUG] [Thread-197666] [transport.py] [_log()] starting thread (client mode): 0xa2d54eb0
2026-02-15T04:07:19.644 [DEBUG] [Thread-197666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:07:19.663 [DEBUG] [Thread-197666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:07:19.663 [INFO] [Thread-197666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:07:19.666 [DEBUG] [Thread-197666] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:07:19.666 [DEBUG] [Thread-197666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:07:19.666 [DEBUG] [Thread-197666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:07:19.666 [DEBUG] [Thread-197666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:07:19.666 [DEBUG] [Thread-197666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:07:19.666 [DEBUG] [Thread-197666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:07:19.667 [DEBUG] [Thread-197666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:07:19.667 [DEBUG] [Thread-197666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:07:19.667 [DEBUG] [Thread-197666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:07:19.667 [DEBUG] [Thread-197666] [transport.py] [_log()] client lang: <none>
2026-02-15T04:07:19.667 [DEBUG] [Thread-197666] [transport.py] [_log()] server lang: <none>
2026-02-15T04:07:19.667 [DEBUG] [Thread-197666] [transport.py] [_log()] kex follows: False
2026-02-15T04:07:19.667 [DEBUG] [Thread-197666] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:07:19.667 [DEBUG] [Thread-197666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:07:19.667 [DEBUG] [Thread-197666] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:07:19.667 [DEBUG] [Thread-197666] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:07:19.667 [DEBUG] [Thread-197666] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:07:19.667 [DEBUG] [Thread-197666] [transport.py] [_log()] Compression: none
2026-02-15T04:07:19.668 [DEBUG] [Thread-197666] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:07:19.684 [DEBUG] [Thread-197666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:07:19.684 [DEBUG] [Thread-197666] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:07:19.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:07:19.685 [DEBUG] [Thread-197666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:07:19.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:07:19.728 [DEBUG] [Thread-197666] [transport.py] [_log()] userauth is OK
2026-02-15T04:07:19.729 [DEBUG] [Thread-197666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:07:19.729 [DEBUG] [Thread-197666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:07:19.729 [DEBUG] [Thread-197666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:07:19.729 [DEBUG] [Thread-197666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:07:19.761 [INFO] [Thread-197666] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:07:19.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:07:20.391 [DEBUG] [Thread-197666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:07:20.391 [DEBUG] [Thread-197666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:07:20.392 [DEBUG] [Thread-197666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:07:20.433 [DEBUG] [Thread-197666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:07:20.433 [DEBUG] [Thread-197666] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:07:20.436 [DEBUG] [Thread-197666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:07:20.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:07:20.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:07:20.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:07:20.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:07:20.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:07:20.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:07:20.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:07:20.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:07:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:07:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.087952 -999.00   +5.40  27.15     95   +4.70 1 2 1 3 1     0    0 0.63 -4.85 ..es. 27.1 27.1 163.6 34.8 6.6 -14.2 6.4 -15.3 6.2 -13.7 6.6 -14.2
2026-02-15T04:07:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:07:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:07:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.087952
2026-02-15T04:07:20.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:07:20.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:07:20.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:07:20.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:07:20.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T04:07:20.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:06:38', tmtdew=0.87, humidity=94.11, cloud=0.0, wind=34.4, temperature=5.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:06:39.053', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:07:20.466 [DEBUG] [Thread-197666] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:07:20.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-15T04:07:20.561 [DEBUG] [Thread-197669] [transport.py] [_log()] starting thread (client mode): 0xa2d57580
2026-02-15T04:07:20.561 [DEBUG] [Thread-197669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:07:20.575 [DEBUG] [Thread-197669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:07:20.575 [INFO] [Thread-197669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:07:20.582 [DEBUG] [Thread-197669] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:07:20.583 [DEBUG] [Thread-197669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:07:20.583 [DEBUG] [Thread-197669] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:07:20.583 [DEBUG] [Thread-197669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:07:20.583 [DEBUG] [Thread-197669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:07:20.583 [DEBUG] [Thread-197669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:07:20.583 [DEBUG] [Thread-197669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:07:20.583 [DEBUG] [Thread-197669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:07:20.583 [DEBUG] [Thread-197669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:07:20.583 [DEBUG] [Thread-197669] [transport.py] [_log()] client lang: <none>
2026-02-15T04:07:20.583 [DEBUG] [Thread-197669] [transport.py] [_log()] server lang: <none>
2026-02-15T04:07:20.583 [DEBUG] [Thread-197669] [transport.py] [_log()] kex follows: False
2026-02-15T04:07:20.583 [DEBUG] [Thread-197669] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:07:20.583 [DEBUG] [Thread-197669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:07:20.583 [DEBUG] [Thread-197669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:07:20.583 [DEBUG] [Thread-197669] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:07:20.583 [DEBUG] [Thread-197669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:07:20.583 [DEBUG] [Thread-197669] [transport.py] [_log()] Compression: none
2026-02-15T04:07:20.583 [DEBUG] [Thread-197669] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:07:20.643 [DEBUG] [Thread-197669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:07:20.643 [DEBUG] [Thread-197669] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:07:20.644 [DEBUG] [Thread-197669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:07:20.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:07:20.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:07:20.698 [DEBUG] [Thread-197669] [transport.py] [_log()] userauth is OK
2026-02-15T04:07:20.698 [DEBUG] [Thread-197669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:07:20.698 [DEBUG] [Thread-197669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:07:20.698 [DEBUG] [Thread-197669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:07:20.699 [DEBUG] [Thread-197669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:07:20.718 [INFO] [Thread-197669] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:07:20.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-15T04:07:20.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:07:21.503 [DEBUG] [Thread-197669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:07:21.503 [DEBUG] [Thread-197669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:07:21.555 [DEBUG] [Thread-197669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:07:21.555 [DEBUG] [Thread-197669] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:07:21.566 [DEBUG] [Thread-197669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:07:21.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:07:21.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-15T04:07:21.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-15T04:07:21.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:07:21.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:07:21.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:07:21.603 [DEBUG] [Thread-197669] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:07:23.202 [DEBUG] [Thread-197671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:07:24.630 [DEBUG] [Thread-197672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:07:39.692 [DEBUG] [Thread-197673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:07:51.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:07:51.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:07:51.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-15T04:07:53.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 7, 14), 0.48, 96.57, 0.0, 30.7, 5.57, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:07:53.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:07:14
2026-02-15T04:07:54.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:07:54.698 [DEBUG] [Thread-197674] [transport.py] [_log()] starting thread (client mode): 0xa5770730
2026-02-15T04:07:54.698 [DEBUG] [Thread-197674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:07:54.718 [DEBUG] [Thread-197674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:07:54.719 [INFO] [Thread-197674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:07:54.722 [DEBUG] [Thread-197674] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:07:54.722 [DEBUG] [Thread-197674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:07:54.722 [DEBUG] [Thread-197674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:07:54.722 [DEBUG] [Thread-197674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:07:54.722 [DEBUG] [Thread-197674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:07:54.722 [DEBUG] [Thread-197674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:07:54.722 [DEBUG] [Thread-197674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:07:54.722 [DEBUG] [Thread-197674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:07:54.722 [DEBUG] [Thread-197674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:07:54.722 [DEBUG] [Thread-197674] [transport.py] [_log()] client lang: <none>
2026-02-15T04:07:54.722 [DEBUG] [Thread-197674] [transport.py] [_log()] server lang: <none>
2026-02-15T04:07:54.722 [DEBUG] [Thread-197674] [transport.py] [_log()] kex follows: False
2026-02-15T04:07:54.722 [DEBUG] [Thread-197674] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:07:54.722 [DEBUG] [Thread-197674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:07:54.722 [DEBUG] [Thread-197674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:07:54.722 [DEBUG] [Thread-197674] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:07:54.722 [DEBUG] [Thread-197674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:07:54.722 [DEBUG] [Thread-197674] [transport.py] [_log()] Compression: none
2026-02-15T04:07:54.722 [DEBUG] [Thread-197674] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:07:54.730 [DEBUG] [Thread-197676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:07:54.741 [DEBUG] [Thread-197674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:07:54.741 [DEBUG] [Thread-197674] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:07:54.742 [DEBUG] [Thread-197674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:07:54.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:07:54.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:07:54.743 [DEBUG] [Thread-197674] [transport.py] [_log()] userauth is OK
2026-02-15T04:07:54.744 [DEBUG] [Thread-197674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:07:54.744 [DEBUG] [Thread-197674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:07:54.744 [DEBUG] [Thread-197674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:07:54.744 [DEBUG] [Thread-197674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:07:54.776 [INFO] [Thread-197674] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:07:54.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:07:55.429 [DEBUG] [Thread-197674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:07:55.430 [DEBUG] [Thread-197674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:07:55.430 [DEBUG] [Thread-197674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:07:55.470 [DEBUG] [Thread-197674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:07:55.470 [DEBUG] [Thread-197674] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:07:55.474 [DEBUG] [Thread-197674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:07:55.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:07:55.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:07:55.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:07:55.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:07:55.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:07:55.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:07:55.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:07:55.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:07:55.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:07:55.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.088299 -999.00   +5.40  23.49     95   +4.70 1 2 1 3 1     0    0 0.62 -4.89 ..E.. 23.5 23.5 163.4 32.9 6.6 -14.9 6.4 -11.6 6.2 -11.9 6.6 -13.2
2026-02-15T04:07:55.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:07:55.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:07:55.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.088299
2026-02-15T04:07:55.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:07:55.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:07:55.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:07:55.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:07:55.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2026-02-15T04:07:55.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:07:14', tmtdew=0.48, humidity=96.57, cloud=0.0, wind=30.7, temperature=5.57, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:07:09.034', atlas_cloud=2, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:07:55.501 [DEBUG] [Thread-197674] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:07:55.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-15T04:07:55.595 [DEBUG] [Thread-197678] [transport.py] [_log()] starting thread (client mode): 0xa5771b70
2026-02-15T04:07:55.595 [DEBUG] [Thread-197678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:07:55.613 [DEBUG] [Thread-197678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:07:55.613 [INFO] [Thread-197678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:07:55.620 [DEBUG] [Thread-197678] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:07:55.621 [DEBUG] [Thread-197678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:07:55.621 [DEBUG] [Thread-197678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:07:55.621 [DEBUG] [Thread-197678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:07:55.621 [DEBUG] [Thread-197678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:07:55.621 [DEBUG] [Thread-197678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:07:55.621 [DEBUG] [Thread-197678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:07:55.621 [DEBUG] [Thread-197678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:07:55.621 [DEBUG] [Thread-197678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:07:55.622 [DEBUG] [Thread-197678] [transport.py] [_log()] client lang: <none>
2026-02-15T04:07:55.622 [DEBUG] [Thread-197678] [transport.py] [_log()] server lang: <none>
2026-02-15T04:07:55.622 [DEBUG] [Thread-197678] [transport.py] [_log()] kex follows: False
2026-02-15T04:07:55.622 [DEBUG] [Thread-197678] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:07:55.622 [DEBUG] [Thread-197678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:07:55.622 [DEBUG] [Thread-197678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:07:55.622 [DEBUG] [Thread-197678] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:07:55.623 [DEBUG] [Thread-197678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:07:55.623 [DEBUG] [Thread-197678] [transport.py] [_log()] Compression: none
2026-02-15T04:07:55.623 [DEBUG] [Thread-197678] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:07:55.678 [DEBUG] [Thread-197678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:07:55.679 [DEBUG] [Thread-197678] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:07:55.679 [DEBUG] [Thread-197678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:07:55.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:07:55.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:07:55.734 [DEBUG] [Thread-197678] [transport.py] [_log()] userauth is OK
2026-02-15T04:07:55.734 [DEBUG] [Thread-197678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:07:55.735 [DEBUG] [Thread-197678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:07:55.735 [DEBUG] [Thread-197678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:07:55.735 [DEBUG] [Thread-197678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:07:55.754 [INFO] [Thread-197678] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:07:55.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-15T04:07:55.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:07:56.639 [DEBUG] [Thread-197678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:07:56.639 [DEBUG] [Thread-197678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:07:56.687 [DEBUG] [Thread-197678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:07:56.687 [DEBUG] [Thread-197678] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:07:56.697 [DEBUG] [Thread-197678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:07:56.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:07:56.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-15T04:07:56.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-15T04:07:56.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:07:56.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:07:56.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:07:56.733 [DEBUG] [Thread-197678] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:08:04.749 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:08:04.750 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:08:09.766 [DEBUG] [Thread-197680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:08:23.266 [DEBUG] [Thread-197681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:08:24.816 [DEBUG] [Thread-197682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:08:26.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:08:26.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:08:26.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-15T04:08:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 7, 50), 0.48, 96.55, 0.0, 32.08, 5.56, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:08:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:07:50
2026-02-15T04:08:29.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:08:29.550 [DEBUG] [Thread-197683] [transport.py] [_log()] starting thread (client mode): 0xa2d55060
2026-02-15T04:08:29.550 [DEBUG] [Thread-197683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:08:29.571 [DEBUG] [Thread-197683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:08:29.572 [INFO] [Thread-197683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:08:29.575 [DEBUG] [Thread-197683] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:08:29.575 [DEBUG] [Thread-197683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:08:29.575 [DEBUG] [Thread-197683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:08:29.575 [DEBUG] [Thread-197683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:08:29.575 [DEBUG] [Thread-197683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:08:29.575 [DEBUG] [Thread-197683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:08:29.575 [DEBUG] [Thread-197683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:08:29.575 [DEBUG] [Thread-197683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:08:29.576 [DEBUG] [Thread-197683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:08:29.576 [DEBUG] [Thread-197683] [transport.py] [_log()] client lang: <none>
2026-02-15T04:08:29.576 [DEBUG] [Thread-197683] [transport.py] [_log()] server lang: <none>
2026-02-15T04:08:29.576 [DEBUG] [Thread-197683] [transport.py] [_log()] kex follows: False
2026-02-15T04:08:29.576 [DEBUG] [Thread-197683] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:08:29.576 [DEBUG] [Thread-197683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:08:29.576 [DEBUG] [Thread-197683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:08:29.576 [DEBUG] [Thread-197683] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:08:29.576 [DEBUG] [Thread-197683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:08:29.576 [DEBUG] [Thread-197683] [transport.py] [_log()] Compression: none
2026-02-15T04:08:29.577 [DEBUG] [Thread-197683] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:08:29.595 [DEBUG] [Thread-197683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:08:29.596 [DEBUG] [Thread-197683] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:08:29.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:08:29.597 [DEBUG] [Thread-197683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:08:29.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:08:29.599 [DEBUG] [Thread-197683] [transport.py] [_log()] userauth is OK
2026-02-15T04:08:29.599 [DEBUG] [Thread-197683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:08:29.599 [DEBUG] [Thread-197683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:08:29.599 [DEBUG] [Thread-197683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:08:29.599 [DEBUG] [Thread-197683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:08:29.643 [INFO] [Thread-197683] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:08:29.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:08:30.342 [DEBUG] [Thread-197683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:08:30.342 [DEBUG] [Thread-197683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:08:30.343 [DEBUG] [Thread-197683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:08:30.383 [DEBUG] [Thread-197683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:08:30.384 [DEBUG] [Thread-197683] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:08:30.387 [DEBUG] [Thread-197683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:08:30.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:08:30.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:08:30.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:08:30.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:08:30.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:08:30.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:08:30.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:08:30.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:08:30.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:08:30.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.088994 -999.00   +5.40  23.36     95   +4.70 1 3 1 3 1     0    0 0.66 -4.14 ----- 23.4 23.4 164.0 31.4 6.6 -12.2 6.4 -10.6 6.2 -10.9 6.5 -10.9
2026-02-15T04:08:30.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:08:30.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:08:30.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.088994
2026-02-15T04:08:30.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:08:30.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:08:30.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:08:30.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:08:30.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:08:30.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:07:50', tmtdew=0.48, humidity=96.55, cloud=0.0, wind=32.08, temperature=5.56, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:08:09.082', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:08:30.415 [DEBUG] [Thread-197683] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:08:30.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-15T04:08:30.510 [DEBUG] [Thread-197686] [transport.py] [_log()] starting thread (client mode): 0xa57d40a0
2026-02-15T04:08:30.510 [DEBUG] [Thread-197686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:08:30.525 [DEBUG] [Thread-197686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:08:30.525 [INFO] [Thread-197686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:08:30.532 [DEBUG] [Thread-197686] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:08:30.533 [DEBUG] [Thread-197686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:08:30.533 [DEBUG] [Thread-197686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:08:30.533 [DEBUG] [Thread-197686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:08:30.533 [DEBUG] [Thread-197686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:08:30.533 [DEBUG] [Thread-197686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:08:30.533 [DEBUG] [Thread-197686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:08:30.533 [DEBUG] [Thread-197686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:08:30.533 [DEBUG] [Thread-197686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:08:30.533 [DEBUG] [Thread-197686] [transport.py] [_log()] client lang: <none>
2026-02-15T04:08:30.533 [DEBUG] [Thread-197686] [transport.py] [_log()] server lang: <none>
2026-02-15T04:08:30.533 [DEBUG] [Thread-197686] [transport.py] [_log()] kex follows: False
2026-02-15T04:08:30.533 [DEBUG] [Thread-197686] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:08:30.533 [DEBUG] [Thread-197686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:08:30.533 [DEBUG] [Thread-197686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:08:30.533 [DEBUG] [Thread-197686] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:08:30.533 [DEBUG] [Thread-197686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:08:30.533 [DEBUG] [Thread-197686] [transport.py] [_log()] Compression: none
2026-02-15T04:08:30.533 [DEBUG] [Thread-197686] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:08:30.591 [DEBUG] [Thread-197686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:08:30.591 [DEBUG] [Thread-197686] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:08:30.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:08:30.593 [DEBUG] [Thread-197686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:08:30.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:08:30.647 [DEBUG] [Thread-197686] [transport.py] [_log()] userauth is OK
2026-02-15T04:08:30.647 [DEBUG] [Thread-197686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:08:30.648 [DEBUG] [Thread-197686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:08:30.648 [DEBUG] [Thread-197686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:08:30.648 [DEBUG] [Thread-197686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:08:30.667 [INFO] [Thread-197686] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:08:30.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-15T04:08:30.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:08:31.441 [DEBUG] [Thread-197686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:08:31.442 [DEBUG] [Thread-197686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:08:31.490 [DEBUG] [Thread-197686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:08:31.490 [DEBUG] [Thread-197686] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:08:31.499 [DEBUG] [Thread-197686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:08:31.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:08:31.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-15T04:08:31.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-15T04:08:31.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:08:31.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:08:31.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:08:31.536 [DEBUG] [Thread-197686] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:08:39.850 [DEBUG] [Thread-197688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:08:54.907 [DEBUG] [Thread-197689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:09:01.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:09:01.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:09:01.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-15T04:09:03.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 8, 26), 0.48, 96.55, 0.0, 31.42, 5.51, 2, 2, 2, 2, 0, 0),)
2026-02-15T04:09:03.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:08:26
2026-02-15T04:09:03.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:09:03.945 [DEBUG] [Thread-197690] [transport.py] [_log()] starting thread (client mode): 0xa2d540d0
2026-02-15T04:09:03.946 [DEBUG] [Thread-197690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:09:03.965 [DEBUG] [Thread-197690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:09:03.966 [INFO] [Thread-197690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:09:03.968 [DEBUG] [Thread-197690] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:09:03.968 [DEBUG] [Thread-197690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:09:03.968 [DEBUG] [Thread-197690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:09:03.968 [DEBUG] [Thread-197690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:09:03.968 [DEBUG] [Thread-197690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:09:03.968 [DEBUG] [Thread-197690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:09:03.968 [DEBUG] [Thread-197690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:09:03.968 [DEBUG] [Thread-197690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:09:03.968 [DEBUG] [Thread-197690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:09:03.968 [DEBUG] [Thread-197690] [transport.py] [_log()] client lang: <none>
2026-02-15T04:09:03.968 [DEBUG] [Thread-197690] [transport.py] [_log()] server lang: <none>
2026-02-15T04:09:03.968 [DEBUG] [Thread-197690] [transport.py] [_log()] kex follows: False
2026-02-15T04:09:03.969 [DEBUG] [Thread-197690] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:09:03.969 [DEBUG] [Thread-197690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:09:03.969 [DEBUG] [Thread-197690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:09:03.969 [DEBUG] [Thread-197690] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:09:03.969 [DEBUG] [Thread-197690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:09:03.969 [DEBUG] [Thread-197690] [transport.py] [_log()] Compression: none
2026-02-15T04:09:03.969 [DEBUG] [Thread-197690] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:09:03.986 [DEBUG] [Thread-197690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:09:03.987 [DEBUG] [Thread-197690] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:09:03.988 [DEBUG] [Thread-197690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:09:03.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:09:03.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:09:03.990 [DEBUG] [Thread-197690] [transport.py] [_log()] userauth is OK
2026-02-15T04:09:03.990 [DEBUG] [Thread-197690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:09:03.990 [DEBUG] [Thread-197690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:09:03.990 [DEBUG] [Thread-197690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:09:03.990 [DEBUG] [Thread-197690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:09:04.026 [INFO] [Thread-197690] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:09:04.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:09:04.693 [DEBUG] [Thread-197690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:09:04.693 [DEBUG] [Thread-197690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:09:04.693 [DEBUG] [Thread-197690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:09:04.734 [DEBUG] [Thread-197690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:09:04.735 [DEBUG] [Thread-197690] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:09:04.738 [DEBUG] [Thread-197690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:09:04.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:09:04.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:09:04.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:09:04.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:09:04.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:09:04.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:09:04.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:09:04.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:09:04.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:09:04.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.089341 -999.00   +5.50  22.92     95   +4.70 1 3 1 3 1     0    0 0.66 -4.00 ----- 22.9 22.9 164.4 27.9 6.6 -9.6 6.4 -8.8 6.2 -8.3 6.6 -8.3
2026-02-15T04:09:04.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:09:04.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:09:04.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.089341
2026-02-15T04:09:04.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:09:04.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:09:04.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:09:04.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:09:04.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:09:04.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:08:26', tmtdew=0.48, humidity=96.55, cloud=0.0, wind=31.42, temperature=5.51, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:08:39.062', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:09:04.765 [DEBUG] [Thread-197690] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:09:04.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-15T04:09:04.871 [DEBUG] [Thread-197693] [transport.py] [_log()] starting thread (client mode): 0xa2d546a0
2026-02-15T04:09:04.871 [DEBUG] [Thread-197693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:09:04.887 [DEBUG] [Thread-197693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:09:04.887 [INFO] [Thread-197693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:09:04.895 [DEBUG] [Thread-197693] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:09:04.895 [DEBUG] [Thread-197693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:09:04.895 [DEBUG] [Thread-197693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:09:04.895 [DEBUG] [Thread-197693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:09:04.895 [DEBUG] [Thread-197693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:09:04.895 [DEBUG] [Thread-197693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:09:04.895 [DEBUG] [Thread-197693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:09:04.895 [DEBUG] [Thread-197693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:09:04.895 [DEBUG] [Thread-197693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:09:04.895 [DEBUG] [Thread-197693] [transport.py] [_log()] client lang: <none>
2026-02-15T04:09:04.895 [DEBUG] [Thread-197693] [transport.py] [_log()] server lang: <none>
2026-02-15T04:09:04.895 [DEBUG] [Thread-197693] [transport.py] [_log()] kex follows: False
2026-02-15T04:09:04.895 [DEBUG] [Thread-197693] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:09:04.895 [DEBUG] [Thread-197693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:09:04.895 [DEBUG] [Thread-197693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:09:04.895 [DEBUG] [Thread-197693] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:09:04.895 [DEBUG] [Thread-197693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:09:04.895 [DEBUG] [Thread-197693] [transport.py] [_log()] Compression: none
2026-02-15T04:09:04.895 [DEBUG] [Thread-197693] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:09:04.955 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:09:04.956 [DEBUG] [Thread-197693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:09:04.957 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:09:04.957 [DEBUG] [Thread-197693] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:09:04.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:09:04.959 [DEBUG] [Thread-197693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:09:04.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:09:05.014 [DEBUG] [Thread-197693] [transport.py] [_log()] userauth is OK
2026-02-15T04:09:05.015 [DEBUG] [Thread-197693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:09:05.015 [DEBUG] [Thread-197693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:09:05.015 [DEBUG] [Thread-197693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:09:05.015 [DEBUG] [Thread-197693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:09:05.038 [INFO] [Thread-197693] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:09:05.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-15T04:09:05.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:09:05.840 [DEBUG] [Thread-197693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:09:05.840 [DEBUG] [Thread-197693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:09:05.888 [DEBUG] [Thread-197693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:09:05.889 [DEBUG] [Thread-197693] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:09:05.898 [DEBUG] [Thread-197693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:09:05.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:09:05.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-15T04:09:05.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-15T04:09:05.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:09:05.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:09:05.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:09:05.934 [DEBUG] [Thread-197693] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:09:09.944 [DEBUG] [Thread-197695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:09:23.338 [DEBUG] [Thread-197696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:09:24.997 [DEBUG] [Thread-197697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:09:35.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:09:35.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:09:35.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-15T04:09:37.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 9, 1), 0.48, 96.59, 0.0, 31.2, 5.56, 2, 2, 2, 2, 0, 0),)
2026-02-15T04:09:37.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:09:01
2026-02-15T04:09:38.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:09:38.565 [DEBUG] [Thread-197698] [transport.py] [_log()] starting thread (client mode): 0xa5773cd0
2026-02-15T04:09:38.565 [DEBUG] [Thread-197698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:09:38.584 [DEBUG] [Thread-197698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:09:38.584 [INFO] [Thread-197698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:09:38.587 [DEBUG] [Thread-197698] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:09:38.587 [DEBUG] [Thread-197698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:09:38.588 [DEBUG] [Thread-197698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:09:38.588 [DEBUG] [Thread-197698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:09:38.588 [DEBUG] [Thread-197698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:09:38.588 [DEBUG] [Thread-197698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:09:38.588 [DEBUG] [Thread-197698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:09:38.588 [DEBUG] [Thread-197698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:09:38.588 [DEBUG] [Thread-197698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:09:38.588 [DEBUG] [Thread-197698] [transport.py] [_log()] client lang: <none>
2026-02-15T04:09:38.588 [DEBUG] [Thread-197698] [transport.py] [_log()] server lang: <none>
2026-02-15T04:09:38.588 [DEBUG] [Thread-197698] [transport.py] [_log()] kex follows: False
2026-02-15T04:09:38.588 [DEBUG] [Thread-197698] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:09:38.588 [DEBUG] [Thread-197698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:09:38.588 [DEBUG] [Thread-197698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:09:38.588 [DEBUG] [Thread-197698] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:09:38.588 [DEBUG] [Thread-197698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:09:38.588 [DEBUG] [Thread-197698] [transport.py] [_log()] Compression: none
2026-02-15T04:09:38.589 [DEBUG] [Thread-197698] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:09:38.607 [DEBUG] [Thread-197698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:09:38.607 [DEBUG] [Thread-197698] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:09:38.608 [DEBUG] [Thread-197698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:09:38.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:09:38.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:09:38.610 [DEBUG] [Thread-197698] [transport.py] [_log()] userauth is OK
2026-02-15T04:09:38.610 [DEBUG] [Thread-197698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:09:38.610 [DEBUG] [Thread-197698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:09:38.610 [DEBUG] [Thread-197698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:09:38.610 [DEBUG] [Thread-197698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:09:38.629 [INFO] [Thread-197698] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:09:38.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:09:39.251 [DEBUG] [Thread-197698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:09:39.251 [DEBUG] [Thread-197698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:09:39.251 [DEBUG] [Thread-197698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:09:39.291 [DEBUG] [Thread-197698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:09:39.292 [DEBUG] [Thread-197698] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:09:39.295 [DEBUG] [Thread-197698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:09:39.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:09:39.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:09:39.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:09:39.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:09:39.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:09:39.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:09:39.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:09:39.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:09:39.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:09:39.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.089688 -999.00   +5.50  21.96     95   +4.70 1 3 1 3 1     0    0 0.66 -3.51 ----- 22.0 22.0 161.8 33.2 6.7 -8.5 6.4 -8.4 6.2 -8.6 6.6 -9.2
2026-02-15T04:09:39.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:09:39.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:09:39.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.089688
2026-02-15T04:09:39.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:09:39.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:09:39.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:09:39.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:09:39.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:09:39.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:09:01', tmtdew=0.48, humidity=96.59, cloud=0.0, wind=31.2, temperature=5.56, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:09:09.043', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:09:39.319 [DEBUG] [Thread-197698] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:09:39.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T04:09:39.415 [DEBUG] [Thread-197701] [transport.py] [_log()] starting thread (client mode): 0xa2d57be0
2026-02-15T04:09:39.415 [DEBUG] [Thread-197701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:09:39.431 [DEBUG] [Thread-197701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:09:39.431 [INFO] [Thread-197701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:09:39.439 [DEBUG] [Thread-197701] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:09:39.439 [DEBUG] [Thread-197701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:09:39.439 [DEBUG] [Thread-197701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:09:39.439 [DEBUG] [Thread-197701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:09:39.439 [DEBUG] [Thread-197701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:09:39.439 [DEBUG] [Thread-197701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:09:39.439 [DEBUG] [Thread-197701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:09:39.439 [DEBUG] [Thread-197701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:09:39.439 [DEBUG] [Thread-197701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:09:39.439 [DEBUG] [Thread-197701] [transport.py] [_log()] client lang: <none>
2026-02-15T04:09:39.439 [DEBUG] [Thread-197701] [transport.py] [_log()] server lang: <none>
2026-02-15T04:09:39.439 [DEBUG] [Thread-197701] [transport.py] [_log()] kex follows: False
2026-02-15T04:09:39.439 [DEBUG] [Thread-197701] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:09:39.439 [DEBUG] [Thread-197701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:09:39.439 [DEBUG] [Thread-197701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:09:39.440 [DEBUG] [Thread-197701] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:09:39.440 [DEBUG] [Thread-197701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:09:39.440 [DEBUG] [Thread-197701] [transport.py] [_log()] Compression: none
2026-02-15T04:09:39.440 [DEBUG] [Thread-197701] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:09:39.499 [DEBUG] [Thread-197701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:09:39.499 [DEBUG] [Thread-197701] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:09:39.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:09:39.509 [DEBUG] [Thread-197701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:09:39.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:09:39.554 [DEBUG] [Thread-197701] [transport.py] [_log()] userauth is OK
2026-02-15T04:09:39.555 [DEBUG] [Thread-197701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:09:39.555 [DEBUG] [Thread-197701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:09:39.555 [DEBUG] [Thread-197701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:09:39.555 [DEBUG] [Thread-197701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:09:39.579 [INFO] [Thread-197701] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:09:39.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-15T04:09:39.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:09:40.034 [DEBUG] [Thread-197703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:09:40.381 [DEBUG] [Thread-197701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:09:40.382 [DEBUG] [Thread-197701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:09:40.429 [DEBUG] [Thread-197701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:09:40.430 [DEBUG] [Thread-197701] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:09:40.439 [DEBUG] [Thread-197701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:09:40.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:09:40.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-15T04:09:40.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T04:09:40.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:09:40.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:09:40.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:09:40.477 [DEBUG] [Thread-197701] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:09:55.086 [DEBUG] [Thread-197704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:10:05.159 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:10:05.160 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:10:10.124 [DEBUG] [Thread-197705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:10:10.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:10:10.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:10:10.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T04:10:12.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 9, 36), 0.86, 94.14, 0.0, 35.67, 5.85, 2, 2, 2, 2, 0, 0),)
2026-02-15T04:10:12.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:09:36
2026-02-15T04:10:12.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:10:12.942 [DEBUG] [Thread-197706] [transport.py] [_log()] starting thread (client mode): 0xa2d561d0
2026-02-15T04:10:12.942 [DEBUG] [Thread-197706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:10:12.963 [DEBUG] [Thread-197706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:10:12.963 [INFO] [Thread-197706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:10:12.966 [DEBUG] [Thread-197706] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:10:12.967 [DEBUG] [Thread-197706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:10:12.967 [DEBUG] [Thread-197706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:10:12.967 [DEBUG] [Thread-197706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:10:12.967 [DEBUG] [Thread-197706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:10:12.967 [DEBUG] [Thread-197706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:10:12.967 [DEBUG] [Thread-197706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:10:12.967 [DEBUG] [Thread-197706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:10:12.967 [DEBUG] [Thread-197706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:10:12.967 [DEBUG] [Thread-197706] [transport.py] [_log()] client lang: <none>
2026-02-15T04:10:12.967 [DEBUG] [Thread-197706] [transport.py] [_log()] server lang: <none>
2026-02-15T04:10:12.967 [DEBUG] [Thread-197706] [transport.py] [_log()] kex follows: False
2026-02-15T04:10:12.967 [DEBUG] [Thread-197706] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:10:12.967 [DEBUG] [Thread-197706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:10:12.968 [DEBUG] [Thread-197706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:10:12.968 [DEBUG] [Thread-197706] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:10:12.968 [DEBUG] [Thread-197706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:10:12.968 [DEBUG] [Thread-197706] [transport.py] [_log()] Compression: none
2026-02-15T04:10:12.968 [DEBUG] [Thread-197706] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:10:12.986 [DEBUG] [Thread-197706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:10:12.986 [DEBUG] [Thread-197706] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:10:12.987 [DEBUG] [Thread-197706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:10:12.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:10:12.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:10:12.988 [DEBUG] [Thread-197706] [transport.py] [_log()] userauth is OK
2026-02-15T04:10:12.988 [DEBUG] [Thread-197706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:10:12.988 [DEBUG] [Thread-197706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:10:12.988 [DEBUG] [Thread-197706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:10:12.989 [DEBUG] [Thread-197706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:10:13.011 [INFO] [Thread-197706] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:10:13.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:10:18.877 [DEBUG] [Thread-197706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:10:18.877 [DEBUG] [Thread-197706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:10:18.878 [DEBUG] [Thread-197706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:10:18.919 [DEBUG] [Thread-197706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:10:18.919 [DEBUG] [Thread-197706] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:10:18.923 [DEBUG] [Thread-197706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:10:18.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:10:18.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:10:18.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:10:18.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:10:18.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:10:18.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:10:18.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:10:18.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:10:18.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:10:18.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.090035 -999.00   +5.50  22.77     95   +4.80 1 3 1 3 1     0    0 0.68 -3.14 ----- 22.8 22.8 160.8 32.8 -999.0 -999.0 6.5 -8.1 6.2 -8.2 6.6 -8.4
2026-02-15T04:10:18.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:10:18.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:10:18.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.090035
2026-02-15T04:10:18.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:10:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:10:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:10:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:10:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:10:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:09:36', tmtdew=0.86, humidity=94.14, cloud=0.0, wind=35.67, temperature=5.85, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:09:39.024', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:10:18.960 [DEBUG] [Thread-197706] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:10:19.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-15T04:10:19.058 [DEBUG] [Thread-197709] [transport.py] [_log()] starting thread (client mode): 0xa5773610
2026-02-15T04:10:19.058 [DEBUG] [Thread-197709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:10:19.073 [DEBUG] [Thread-197709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:10:19.073 [INFO] [Thread-197709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:10:19.081 [DEBUG] [Thread-197709] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:10:19.081 [DEBUG] [Thread-197709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:10:19.081 [DEBUG] [Thread-197709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:10:19.081 [DEBUG] [Thread-197709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:10:19.081 [DEBUG] [Thread-197709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:10:19.081 [DEBUG] [Thread-197709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:10:19.081 [DEBUG] [Thread-197709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:10:19.081 [DEBUG] [Thread-197709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:10:19.081 [DEBUG] [Thread-197709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:10:19.081 [DEBUG] [Thread-197709] [transport.py] [_log()] client lang: <none>
2026-02-15T04:10:19.081 [DEBUG] [Thread-197709] [transport.py] [_log()] server lang: <none>
2026-02-15T04:10:19.082 [DEBUG] [Thread-197709] [transport.py] [_log()] kex follows: False
2026-02-15T04:10:19.082 [DEBUG] [Thread-197709] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:10:19.082 [DEBUG] [Thread-197709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:10:19.082 [DEBUG] [Thread-197709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:10:19.082 [DEBUG] [Thread-197709] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:10:19.082 [DEBUG] [Thread-197709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:10:19.082 [DEBUG] [Thread-197709] [transport.py] [_log()] Compression: none
2026-02-15T04:10:19.082 [DEBUG] [Thread-197709] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:10:19.139 [DEBUG] [Thread-197709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:10:19.139 [DEBUG] [Thread-197709] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:10:19.140 [DEBUG] [Thread-197709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:10:19.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:10:19.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:10:19.195 [DEBUG] [Thread-197709] [transport.py] [_log()] userauth is OK
2026-02-15T04:10:19.195 [DEBUG] [Thread-197709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:10:19.195 [DEBUG] [Thread-197709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:10:19.195 [DEBUG] [Thread-197709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:10:19.195 [DEBUG] [Thread-197709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:10:19.218 [INFO] [Thread-197709] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:10:19.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T04:10:19.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:10:20.023 [DEBUG] [Thread-197709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:10:20.023 [DEBUG] [Thread-197709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:10:20.072 [DEBUG] [Thread-197709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:10:20.072 [DEBUG] [Thread-197709] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:10:20.081 [DEBUG] [Thread-197709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:10:20.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:10:20.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T04:10:20.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-15T04:10:20.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:10:20.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:10:20.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:10:20.118 [DEBUG] [Thread-197709] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:10:23.393 [DEBUG] [Thread-197711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:10:25.161 [DEBUG] [Thread-197712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:10:40.203 [DEBUG] [Thread-197713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:10:50.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:10:50.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:10:50.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-15T04:10:52.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 10, 13), 0.47, 96.65, 0.0, 30.63, 5.57, 2, 2, 2, 2, 0, 0),)
2026-02-15T04:10:52.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:10:13
2026-02-15T04:10:52.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:10:52.984 [DEBUG] [Thread-197714] [transport.py] [_log()] starting thread (client mode): 0xa5771120
2026-02-15T04:10:52.984 [DEBUG] [Thread-197714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:10:53.003 [DEBUG] [Thread-197714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:10:53.003 [INFO] [Thread-197714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:10:53.007 [DEBUG] [Thread-197714] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:10:53.007 [DEBUG] [Thread-197714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:10:53.007 [DEBUG] [Thread-197714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:10:53.007 [DEBUG] [Thread-197714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:10:53.007 [DEBUG] [Thread-197714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:10:53.007 [DEBUG] [Thread-197714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:10:53.007 [DEBUG] [Thread-197714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:10:53.007 [DEBUG] [Thread-197714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:10:53.007 [DEBUG] [Thread-197714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:10:53.007 [DEBUG] [Thread-197714] [transport.py] [_log()] client lang: <none>
2026-02-15T04:10:53.007 [DEBUG] [Thread-197714] [transport.py] [_log()] server lang: <none>
2026-02-15T04:10:53.007 [DEBUG] [Thread-197714] [transport.py] [_log()] kex follows: False
2026-02-15T04:10:53.007 [DEBUG] [Thread-197714] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:10:53.007 [DEBUG] [Thread-197714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:10:53.007 [DEBUG] [Thread-197714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:10:53.007 [DEBUG] [Thread-197714] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:10:53.007 [DEBUG] [Thread-197714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:10:53.007 [DEBUG] [Thread-197714] [transport.py] [_log()] Compression: none
2026-02-15T04:10:53.007 [DEBUG] [Thread-197714] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:10:53.023 [DEBUG] [Thread-197714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:10:53.024 [DEBUG] [Thread-197714] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:10:53.024 [DEBUG] [Thread-197714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:10:53.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:10:53.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:10:53.026 [DEBUG] [Thread-197714] [transport.py] [_log()] userauth is OK
2026-02-15T04:10:53.026 [DEBUG] [Thread-197714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:10:53.026 [DEBUG] [Thread-197714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:10:53.026 [DEBUG] [Thread-197714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:10:53.026 [DEBUG] [Thread-197714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:10:53.043 [INFO] [Thread-197714] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:10:53.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:10:53.681 [DEBUG] [Thread-197714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:10:53.681 [DEBUG] [Thread-197714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:10:53.682 [DEBUG] [Thread-197714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:10:53.722 [DEBUG] [Thread-197714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:10:53.722 [DEBUG] [Thread-197714] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:10:53.725 [DEBUG] [Thread-197714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:10:53.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:10:53.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:10:53.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:10:53.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:10:53.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:10:53.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:10:53.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:10:53.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:10:53.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:10:53.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.090382 -999.00   +5.50  23.37     95   +4.70 1 3 1 3 1     0    0 0.69 -2.83 ----- 23.4 23.4 154.4 33.9 6.7 -12.5 6.5 -7.9 6.2 -8.5 6.6 -9.2
2026-02-15T04:10:53.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:10:53.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:10:53.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.090382
2026-02-15T04:10:53.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:10:53.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:10:53.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:10:53.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:10:53.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:10:53.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:10:13', tmtdew=0.47, humidity=96.65, cloud=0.0, wind=30.63, temperature=5.57, tmtdew_warn=2, humidity_warn=2, rain_warn=2, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:10:09.005', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:10:53.748 [DEBUG] [Thread-197714] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:10:53.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-15T04:10:53.847 [DEBUG] [Thread-197717] [transport.py] [_log()] starting thread (client mode): 0xa57719f0
2026-02-15T04:10:53.848 [DEBUG] [Thread-197717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:10:53.862 [DEBUG] [Thread-197717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:10:53.862 [INFO] [Thread-197717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:10:53.870 [DEBUG] [Thread-197717] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:10:53.870 [DEBUG] [Thread-197717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:10:53.870 [DEBUG] [Thread-197717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:10:53.870 [DEBUG] [Thread-197717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:10:53.870 [DEBUG] [Thread-197717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:10:53.871 [DEBUG] [Thread-197717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:10:53.871 [DEBUG] [Thread-197717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:10:53.871 [DEBUG] [Thread-197717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:10:53.871 [DEBUG] [Thread-197717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:10:53.871 [DEBUG] [Thread-197717] [transport.py] [_log()] client lang: <none>
2026-02-15T04:10:53.871 [DEBUG] [Thread-197717] [transport.py] [_log()] server lang: <none>
2026-02-15T04:10:53.871 [DEBUG] [Thread-197717] [transport.py] [_log()] kex follows: False
2026-02-15T04:10:53.871 [DEBUG] [Thread-197717] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:10:53.871 [DEBUG] [Thread-197717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:10:53.871 [DEBUG] [Thread-197717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:10:53.871 [DEBUG] [Thread-197717] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:10:53.871 [DEBUG] [Thread-197717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:10:53.871 [DEBUG] [Thread-197717] [transport.py] [_log()] Compression: none
2026-02-15T04:10:53.871 [DEBUG] [Thread-197717] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:10:53.929 [DEBUG] [Thread-197717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:10:53.930 [DEBUG] [Thread-197717] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:10:53.930 [DEBUG] [Thread-197717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:10:53.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:10:53.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:10:53.986 [DEBUG] [Thread-197717] [transport.py] [_log()] userauth is OK
2026-02-15T04:10:53.986 [DEBUG] [Thread-197717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:10:53.986 [DEBUG] [Thread-197717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:10:53.986 [DEBUG] [Thread-197717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:10:53.986 [DEBUG] [Thread-197717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:10:54.005 [INFO] [Thread-197717] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:10:54.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-15T04:10:54.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:10:54.852 [DEBUG] [Thread-197717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:10:54.852 [DEBUG] [Thread-197717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:10:54.900 [DEBUG] [Thread-197717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:10:54.900 [DEBUG] [Thread-197717] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:10:54.909 [DEBUG] [Thread-197717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:10:54.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:10:54.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T04:10:54.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T04:10:54.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:10:54.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:10:54.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:10:54.944 [DEBUG] [Thread-197717] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:10:55.234 [DEBUG] [Thread-197719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:11:05.361 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:11:05.362 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:11:10.285 [DEBUG] [Thread-197720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:11:23.459 [DEBUG] [Thread-197721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:11:24.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:11:24.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:11:24.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-15T04:11:25.324 [DEBUG] [Thread-197722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:11:27.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 10, 48), 0.48, 96.6, 0.0, 29.89, 5.62, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:11:27.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:10:48
2026-02-15T04:11:27.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:11:28.048 [DEBUG] [Thread-197723] [transport.py] [_log()] starting thread (client mode): 0xa2d55fc0
2026-02-15T04:11:28.048 [DEBUG] [Thread-197723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:11:28.068 [DEBUG] [Thread-197723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:11:28.068 [INFO] [Thread-197723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:11:28.071 [DEBUG] [Thread-197723] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:11:28.071 [DEBUG] [Thread-197723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:11:28.071 [DEBUG] [Thread-197723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:11:28.071 [DEBUG] [Thread-197723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:11:28.071 [DEBUG] [Thread-197723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:11:28.071 [DEBUG] [Thread-197723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:11:28.071 [DEBUG] [Thread-197723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:11:28.071 [DEBUG] [Thread-197723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:11:28.072 [DEBUG] [Thread-197723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:11:28.072 [DEBUG] [Thread-197723] [transport.py] [_log()] client lang: <none>
2026-02-15T04:11:28.072 [DEBUG] [Thread-197723] [transport.py] [_log()] server lang: <none>
2026-02-15T04:11:28.072 [DEBUG] [Thread-197723] [transport.py] [_log()] kex follows: False
2026-02-15T04:11:28.072 [DEBUG] [Thread-197723] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:11:28.072 [DEBUG] [Thread-197723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:11:28.072 [DEBUG] [Thread-197723] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:11:28.072 [DEBUG] [Thread-197723] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:11:28.072 [DEBUG] [Thread-197723] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:11:28.072 [DEBUG] [Thread-197723] [transport.py] [_log()] Compression: none
2026-02-15T04:11:28.072 [DEBUG] [Thread-197723] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:11:28.089 [DEBUG] [Thread-197723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:11:28.090 [DEBUG] [Thread-197723] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:11:28.091 [DEBUG] [Thread-197723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:11:28.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:11:28.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:11:28.092 [DEBUG] [Thread-197723] [transport.py] [_log()] userauth is OK
2026-02-15T04:11:28.093 [DEBUG] [Thread-197723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:11:28.093 [DEBUG] [Thread-197723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:11:28.093 [DEBUG] [Thread-197723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:11:28.093 [DEBUG] [Thread-197723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:11:28.117 [INFO] [Thread-197723] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:11:28.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:11:28.763 [DEBUG] [Thread-197723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:11:28.764 [DEBUG] [Thread-197723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:11:28.764 [DEBUG] [Thread-197723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:11:28.804 [DEBUG] [Thread-197723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:11:28.804 [DEBUG] [Thread-197723] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:11:28.808 [DEBUG] [Thread-197723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:11:28.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:11:28.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:11:28.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:11:28.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:11:28.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:11:28.832 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:11:28.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:11:28.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:11:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:11:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.090730 -999.00   +5.50  21.17     95   +4.80 1 3 1 3 1     0    0 0.67 -2.95 ----- 21.2 21.2 163.4 32.5 6.7 -12.3 6.4 -9.7 6.3 -10.3 6.6 -11.2
2026-02-15T04:11:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:11:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:11:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.090730
2026-02-15T04:11:28.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:11:28.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:11:28.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:11:28.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:11:28.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:11:28.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:10:48', tmtdew=0.48, humidity=96.6, cloud=0.0, wind=29.89, temperature=5.62, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:10:39.072', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:11:28.835 [DEBUG] [Thread-197723] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:11:28.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-15T04:11:28.931 [DEBUG] [Thread-197726] [transport.py] [_log()] starting thread (client mode): 0xa2d3e9b0
2026-02-15T04:11:28.931 [DEBUG] [Thread-197726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:11:28.946 [DEBUG] [Thread-197726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:11:28.946 [INFO] [Thread-197726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:11:28.953 [DEBUG] [Thread-197726] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:11:28.954 [DEBUG] [Thread-197726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:11:28.954 [DEBUG] [Thread-197726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:11:28.954 [DEBUG] [Thread-197726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:11:28.954 [DEBUG] [Thread-197726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:11:28.954 [DEBUG] [Thread-197726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:11:28.954 [DEBUG] [Thread-197726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:11:28.954 [DEBUG] [Thread-197726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:11:28.954 [DEBUG] [Thread-197726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:11:28.954 [DEBUG] [Thread-197726] [transport.py] [_log()] client lang: <none>
2026-02-15T04:11:28.954 [DEBUG] [Thread-197726] [transport.py] [_log()] server lang: <none>
2026-02-15T04:11:28.954 [DEBUG] [Thread-197726] [transport.py] [_log()] kex follows: False
2026-02-15T04:11:28.954 [DEBUG] [Thread-197726] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:11:28.954 [DEBUG] [Thread-197726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:11:28.954 [DEBUG] [Thread-197726] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:11:28.954 [DEBUG] [Thread-197726] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:11:28.954 [DEBUG] [Thread-197726] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:11:28.954 [DEBUG] [Thread-197726] [transport.py] [_log()] Compression: none
2026-02-15T04:11:28.954 [DEBUG] [Thread-197726] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:11:29.018 [DEBUG] [Thread-197726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:11:29.019 [DEBUG] [Thread-197726] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:11:29.020 [DEBUG] [Thread-197726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:11:29.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:11:29.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:11:29.075 [DEBUG] [Thread-197726] [transport.py] [_log()] userauth is OK
2026-02-15T04:11:29.075 [DEBUG] [Thread-197726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:11:29.075 [DEBUG] [Thread-197726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:11:29.075 [DEBUG] [Thread-197726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:11:29.076 [DEBUG] [Thread-197726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:11:29.094 [INFO] [Thread-197726] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:11:29.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T04:11:29.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:11:29.937 [DEBUG] [Thread-197726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:11:29.937 [DEBUG] [Thread-197726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:11:29.985 [DEBUG] [Thread-197726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:11:29.986 [DEBUG] [Thread-197726] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:11:29.995 [DEBUG] [Thread-197726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:11:30.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:11:30.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-15T04:11:30.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-15T04:11:30.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:11:30.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:11:30.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:11:30.032 [DEBUG] [Thread-197726] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:11:40.360 [DEBUG] [Thread-197728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:11:55.413 [DEBUG] [Thread-197729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:12:00.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:12:00.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:12:00.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T04:12:02.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 11, 23), 0.47, 96.67, 0.0, 30.77, 5.61, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:12:02.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:11:23
2026-02-15T04:12:02.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:12:02.907 [DEBUG] [Thread-197730] [transport.py] [_log()] starting thread (client mode): 0xa2d3d330
2026-02-15T04:12:02.907 [DEBUG] [Thread-197730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:12:02.927 [DEBUG] [Thread-197730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:12:02.928 [INFO] [Thread-197730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:12:02.931 [DEBUG] [Thread-197730] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:12:02.931 [DEBUG] [Thread-197730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:12:02.931 [DEBUG] [Thread-197730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:12:02.931 [DEBUG] [Thread-197730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:12:02.931 [DEBUG] [Thread-197730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:12:02.931 [DEBUG] [Thread-197730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:12:02.931 [DEBUG] [Thread-197730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:12:02.931 [DEBUG] [Thread-197730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:12:02.932 [DEBUG] [Thread-197730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:12:02.932 [DEBUG] [Thread-197730] [transport.py] [_log()] client lang: <none>
2026-02-15T04:12:02.932 [DEBUG] [Thread-197730] [transport.py] [_log()] server lang: <none>
2026-02-15T04:12:02.932 [DEBUG] [Thread-197730] [transport.py] [_log()] kex follows: False
2026-02-15T04:12:02.932 [DEBUG] [Thread-197730] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:12:02.932 [DEBUG] [Thread-197730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:12:02.932 [DEBUG] [Thread-197730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:12:02.932 [DEBUG] [Thread-197730] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:12:02.932 [DEBUG] [Thread-197730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:12:02.932 [DEBUG] [Thread-197730] [transport.py] [_log()] Compression: none
2026-02-15T04:12:02.932 [DEBUG] [Thread-197730] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:12:02.948 [DEBUG] [Thread-197730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:12:02.948 [DEBUG] [Thread-197730] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:12:02.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:12:02.949 [DEBUG] [Thread-197730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:12:02.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:12:02.992 [DEBUG] [Thread-197730] [transport.py] [_log()] userauth is OK
2026-02-15T04:12:02.993 [DEBUG] [Thread-197730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:12:02.993 [DEBUG] [Thread-197730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:12:02.993 [DEBUG] [Thread-197730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:12:02.993 [DEBUG] [Thread-197730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:12:03.013 [INFO] [Thread-197730] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:12:03.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:12:03.713 [DEBUG] [Thread-197730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:12:03.713 [DEBUG] [Thread-197730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:12:03.713 [DEBUG] [Thread-197730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:12:03.754 [DEBUG] [Thread-197730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:12:03.754 [DEBUG] [Thread-197730] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:12:03.755 [DEBUG] [Thread-197730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:12:03.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:12:03.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:12:03.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:12:03.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:12:03.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:12:03.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:12:03.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:12:03.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:12:03.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:12:03.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.091077 -999.00   +5.50  20.33     95   +4.80 1 3 1 3 1     0    0 0.68 -2.82 ----- 20.3 20.3 158.0 28.2 6.7 -9.8 6.4 -6.5 6.2 -7.2 6.7 -7.1
2026-02-15T04:12:03.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:12:03.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:12:03.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.091077
2026-02-15T04:12:03.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:12:03.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:12:03.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:12:03.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:12:03.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:12:03.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:11:23', tmtdew=0.47, humidity=96.67, cloud=0.0, wind=30.77, temperature=5.61, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:11:09.053', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:12:03.770 [DEBUG] [Thread-197730] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:12:03.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-15T04:12:05.564 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:12:05.565 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:12:10.452 [DEBUG] [Thread-197733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:12:23.537 [DEBUG] [Thread-197734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:12:25.504 [DEBUG] [Thread-197735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:12:40.545 [DEBUG] [Thread-197736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:12:55.580 [DEBUG] [Thread-197737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:13:05.767 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:13:05.768 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:13:10.612 [DEBUG] [Thread-197738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:13:23.603 [DEBUG] [Thread-197739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:13:25.648 [DEBUG] [Thread-197740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:13:40.689 [DEBUG] [Thread-197741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:13:55.724 [DEBUG] [Thread-197742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:14:05.975 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:14:05.976 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:14:10.765 [DEBUG] [Thread-197743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:14:17.911 [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-15T04:14:23.667 [DEBUG] [Thread-197744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:14:25.802 [DEBUG] [Thread-197745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:14:40.836 [DEBUG] [Thread-197746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:14:47.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:14:47.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:14:47.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-15T04:14:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 14, 23), 0.46, 96.7, 0.0, 29.15, 5.66, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:14:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:14:23
2026-02-15T04:14:50.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:14:50.507 [DEBUG] [Thread-197747] [transport.py] [_log()] starting thread (client mode): 0xa2d3ded0
2026-02-15T04:14:50.507 [DEBUG] [Thread-197747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:14:50.527 [DEBUG] [Thread-197747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:14:50.527 [INFO] [Thread-197747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:14:50.530 [DEBUG] [Thread-197747] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:14:50.530 [DEBUG] [Thread-197747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:14:50.530 [DEBUG] [Thread-197747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:14:50.530 [DEBUG] [Thread-197747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:14:50.530 [DEBUG] [Thread-197747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:14:50.530 [DEBUG] [Thread-197747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:14:50.530 [DEBUG] [Thread-197747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:14:50.530 [DEBUG] [Thread-197747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:14:50.530 [DEBUG] [Thread-197747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:14:50.530 [DEBUG] [Thread-197747] [transport.py] [_log()] client lang: <none>
2026-02-15T04:14:50.530 [DEBUG] [Thread-197747] [transport.py] [_log()] server lang: <none>
2026-02-15T04:14:50.530 [DEBUG] [Thread-197747] [transport.py] [_log()] kex follows: False
2026-02-15T04:14:50.530 [DEBUG] [Thread-197747] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:14:50.530 [DEBUG] [Thread-197747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:14:50.530 [DEBUG] [Thread-197747] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:14:50.530 [DEBUG] [Thread-197747] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:14:50.530 [DEBUG] [Thread-197747] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:14:50.530 [DEBUG] [Thread-197747] [transport.py] [_log()] Compression: none
2026-02-15T04:14:50.530 [DEBUG] [Thread-197747] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:14:50.548 [DEBUG] [Thread-197747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:14:50.548 [DEBUG] [Thread-197747] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:14:50.549 [DEBUG] [Thread-197747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:14:50.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:14:50.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:14:50.551 [DEBUG] [Thread-197747] [transport.py] [_log()] userauth is OK
2026-02-15T04:14:50.551 [DEBUG] [Thread-197747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:14:50.551 [DEBUG] [Thread-197747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:14:50.552 [DEBUG] [Thread-197747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:14:50.552 [DEBUG] [Thread-197747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:14:50.588 [INFO] [Thread-197747] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:14:50.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:14:51.220 [DEBUG] [Thread-197747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:14:51.220 [DEBUG] [Thread-197747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:14:51.221 [DEBUG] [Thread-197747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:14:51.263 [DEBUG] [Thread-197747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:14:51.263 [DEBUG] [Thread-197747] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:14:51.265 [DEBUG] [Thread-197747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:14:51.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:14:51.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:14:51.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:14:51.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:14:51.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:14:51.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:14:51.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:14:51.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:14:51.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:14:51.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.093160 -999.00   +5.50  22.41     95   +4.80 1 3 1 3 1     0    0 0.64 -3.84 ----- 22.4 22.4 166.2 31.2 6.8 -7.9 6.5 -5.1 6.4 -5.9 6.7 -6.3
2026-02-15T04:14:51.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:14:51.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:14:51.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.093160
2026-02-15T04:14:51.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:14:51.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:14:51.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:14:51.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:14:51.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:14:51.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:14:23', tmtdew=0.46, humidity=96.7, cloud=0.0, wind=29.15, temperature=5.66, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:14:09.024', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:14:51.287 [DEBUG] [Thread-197747] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:14:51.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T04:14:51.378 [DEBUG] [Thread-197750] [transport.py] [_log()] starting thread (client mode): 0xa5771ae0
2026-02-15T04:14:51.378 [DEBUG] [Thread-197750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:14:51.393 [DEBUG] [Thread-197750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:14:51.393 [INFO] [Thread-197750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:14:51.401 [DEBUG] [Thread-197750] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:14:51.401 [DEBUG] [Thread-197750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:14:51.401 [DEBUG] [Thread-197750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:14:51.401 [DEBUG] [Thread-197750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:14:51.402 [DEBUG] [Thread-197750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:14:51.402 [DEBUG] [Thread-197750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:14:51.402 [DEBUG] [Thread-197750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:14:51.402 [DEBUG] [Thread-197750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:14:51.402 [DEBUG] [Thread-197750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:14:51.402 [DEBUG] [Thread-197750] [transport.py] [_log()] client lang: <none>
2026-02-15T04:14:51.402 [DEBUG] [Thread-197750] [transport.py] [_log()] server lang: <none>
2026-02-15T04:14:51.402 [DEBUG] [Thread-197750] [transport.py] [_log()] kex follows: False
2026-02-15T04:14:51.402 [DEBUG] [Thread-197750] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:14:51.402 [DEBUG] [Thread-197750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:14:51.402 [DEBUG] [Thread-197750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:14:51.402 [DEBUG] [Thread-197750] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:14:51.402 [DEBUG] [Thread-197750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:14:51.402 [DEBUG] [Thread-197750] [transport.py] [_log()] Compression: none
2026-02-15T04:14:51.402 [DEBUG] [Thread-197750] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:14:51.458 [DEBUG] [Thread-197750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:14:51.458 [DEBUG] [Thread-197750] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:14:51.459 [DEBUG] [Thread-197750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:14:51.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:14:51.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:14:51.515 [DEBUG] [Thread-197750] [transport.py] [_log()] userauth is OK
2026-02-15T04:14:51.515 [DEBUG] [Thread-197750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:14:51.515 [DEBUG] [Thread-197750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:14:51.515 [DEBUG] [Thread-197750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:14:51.515 [DEBUG] [Thread-197750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:14:51.538 [INFO] [Thread-197750] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:14:51.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T04:14:51.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:14:52.341 [DEBUG] [Thread-197750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:14:52.341 [DEBUG] [Thread-197750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:14:52.389 [DEBUG] [Thread-197750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:14:52.390 [DEBUG] [Thread-197750] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:14:52.399 [DEBUG] [Thread-197750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:14:52.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:14:52.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-15T04:14:52.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-15T04:14:52.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:14:52.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:14:52.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:14:52.436 [DEBUG] [Thread-197750] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:14:55.872 [DEBUG] [Thread-197752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:15:06.177 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:15:06.178 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:15:10.919 [DEBUG] [Thread-197753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:15:22.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:15:22.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:15:22.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T04:15:23.723 [DEBUG] [Thread-197754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:15:24.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 14, 58), 0.46, 96.69, 0.0, 29.18, 5.59, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:15:24.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:14:58
2026-02-15T04:15:24.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:15:24.915 [DEBUG] [Thread-197755] [transport.py] [_log()] starting thread (client mode): 0xa2d3cf10
2026-02-15T04:15:24.915 [DEBUG] [Thread-197755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:15:24.934 [DEBUG] [Thread-197755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:15:24.934 [INFO] [Thread-197755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:15:24.937 [DEBUG] [Thread-197755] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:15:24.937 [DEBUG] [Thread-197755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:15:24.938 [DEBUG] [Thread-197755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:15:24.938 [DEBUG] [Thread-197755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:15:24.938 [DEBUG] [Thread-197755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:15:24.938 [DEBUG] [Thread-197755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:15:24.938 [DEBUG] [Thread-197755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:15:24.938 [DEBUG] [Thread-197755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:15:24.938 [DEBUG] [Thread-197755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:15:24.938 [DEBUG] [Thread-197755] [transport.py] [_log()] client lang: <none>
2026-02-15T04:15:24.938 [DEBUG] [Thread-197755] [transport.py] [_log()] server lang: <none>
2026-02-15T04:15:24.938 [DEBUG] [Thread-197755] [transport.py] [_log()] kex follows: False
2026-02-15T04:15:24.938 [DEBUG] [Thread-197755] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:15:24.938 [DEBUG] [Thread-197755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:15:24.939 [DEBUG] [Thread-197755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:15:24.939 [DEBUG] [Thread-197755] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:15:24.939 [DEBUG] [Thread-197755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:15:24.939 [DEBUG] [Thread-197755] [transport.py] [_log()] Compression: none
2026-02-15T04:15:24.939 [DEBUG] [Thread-197755] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:15:24.961 [DEBUG] [Thread-197755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:15:24.961 [DEBUG] [Thread-197755] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:15:24.962 [DEBUG] [Thread-197755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:15:24.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:15:24.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:15:25.005 [DEBUG] [Thread-197755] [transport.py] [_log()] userauth is OK
2026-02-15T04:15:25.005 [DEBUG] [Thread-197755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:15:25.005 [DEBUG] [Thread-197755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:15:25.005 [DEBUG] [Thread-197755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:15:25.005 [DEBUG] [Thread-197755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:15:25.036 [INFO] [Thread-197755] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:15:25.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:15:25.667 [DEBUG] [Thread-197755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:15:25.667 [DEBUG] [Thread-197755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:15:25.667 [DEBUG] [Thread-197755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:15:25.708 [DEBUG] [Thread-197755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:15:25.709 [DEBUG] [Thread-197755] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:15:25.711 [DEBUG] [Thread-197755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:15:25.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:15:25.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:15:25.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:15:25.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:15:25.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:15:25.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:15:25.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:15:25.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:15:25.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:15:25.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.093508 -999.00   +5.50  21.95     95   +4.80 1 3 1 3 1     0    0 0.64 -3.78 ----- 21.9 21.9 164.6 34.8 6.8 -5.8 6.6 -6.8 6.4 -7.2 6.8 -7.2
2026-02-15T04:15:25.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:15:25.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:15:25.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.093508
2026-02-15T04:15:25.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:15:25.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:15:25.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:15:25.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:15:25.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:15:25.736 [DEBUG] [Thread-197755] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:15:25.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:14:58', tmtdew=0.46, humidity=96.69, cloud=0.0, wind=29.18, temperature=5.59, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:14:39.091', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:15:25.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-15T04:15:25.831 [DEBUG] [Thread-197758] [transport.py] [_log()] starting thread (client mode): 0xa2d3d720
2026-02-15T04:15:25.831 [DEBUG] [Thread-197758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:15:25.846 [DEBUG] [Thread-197758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:15:25.846 [INFO] [Thread-197758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:15:25.854 [DEBUG] [Thread-197758] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:15:25.854 [DEBUG] [Thread-197758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:15:25.854 [DEBUG] [Thread-197758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:15:25.854 [DEBUG] [Thread-197758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:15:25.854 [DEBUG] [Thread-197758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:15:25.854 [DEBUG] [Thread-197758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:15:25.854 [DEBUG] [Thread-197758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:15:25.854 [DEBUG] [Thread-197758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:15:25.854 [DEBUG] [Thread-197758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:15:25.854 [DEBUG] [Thread-197758] [transport.py] [_log()] client lang: <none>
2026-02-15T04:15:25.854 [DEBUG] [Thread-197758] [transport.py] [_log()] server lang: <none>
2026-02-15T04:15:25.854 [DEBUG] [Thread-197758] [transport.py] [_log()] kex follows: False
2026-02-15T04:15:25.854 [DEBUG] [Thread-197758] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:15:25.854 [DEBUG] [Thread-197758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:15:25.855 [DEBUG] [Thread-197758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:15:25.855 [DEBUG] [Thread-197758] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:15:25.855 [DEBUG] [Thread-197758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:15:25.855 [DEBUG] [Thread-197758] [transport.py] [_log()] Compression: none
2026-02-15T04:15:25.855 [DEBUG] [Thread-197758] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:15:25.915 [DEBUG] [Thread-197758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:15:25.916 [DEBUG] [Thread-197758] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:15:25.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:15:25.917 [DEBUG] [Thread-197758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:15:25.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:15:25.953 [DEBUG] [Thread-197760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:15:25.974 [DEBUG] [Thread-197758] [transport.py] [_log()] userauth is OK
2026-02-15T04:15:25.974 [DEBUG] [Thread-197758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:15:25.974 [DEBUG] [Thread-197758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:15:25.974 [DEBUG] [Thread-197758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:15:25.974 [DEBUG] [Thread-197758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:15:25.999 [INFO] [Thread-197758] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:15:25.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-15T04:15:26.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:15:26.842 [DEBUG] [Thread-197758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:15:26.843 [DEBUG] [Thread-197758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:15:26.890 [DEBUG] [Thread-197758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:15:26.891 [DEBUG] [Thread-197758] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:15:26.900 [DEBUG] [Thread-197758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:15:26.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:15:26.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-15T04:15:26.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T04:15:26.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:15:26.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:15:26.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:15:26.937 [DEBUG] [Thread-197758] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:15:41.016 [DEBUG] [Thread-197761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:15:56.054 [DEBUG] [Thread-197762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:15:56.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:15:56.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:15:56.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T04:15:59.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 15, 34), 0.82, 94.44, 0.0, 34.51, 5.95, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:15:59.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:15:34
2026-02-15T04:15:59.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:15:59.866 [DEBUG] [Thread-197763] [transport.py] [_log()] starting thread (client mode): 0xa57d6e30
2026-02-15T04:15:59.866 [DEBUG] [Thread-197763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:15:59.885 [DEBUG] [Thread-197763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:15:59.886 [INFO] [Thread-197763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:15:59.889 [DEBUG] [Thread-197763] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:15:59.889 [DEBUG] [Thread-197763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:15:59.889 [DEBUG] [Thread-197763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:15:59.889 [DEBUG] [Thread-197763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:15:59.889 [DEBUG] [Thread-197763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:15:59.889 [DEBUG] [Thread-197763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:15:59.889 [DEBUG] [Thread-197763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:15:59.889 [DEBUG] [Thread-197763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:15:59.889 [DEBUG] [Thread-197763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:15:59.889 [DEBUG] [Thread-197763] [transport.py] [_log()] client lang: <none>
2026-02-15T04:15:59.889 [DEBUG] [Thread-197763] [transport.py] [_log()] server lang: <none>
2026-02-15T04:15:59.889 [DEBUG] [Thread-197763] [transport.py] [_log()] kex follows: False
2026-02-15T04:15:59.889 [DEBUG] [Thread-197763] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:15:59.889 [DEBUG] [Thread-197763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:15:59.889 [DEBUG] [Thread-197763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:15:59.889 [DEBUG] [Thread-197763] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:15:59.889 [DEBUG] [Thread-197763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:15:59.889 [DEBUG] [Thread-197763] [transport.py] [_log()] Compression: none
2026-02-15T04:15:59.889 [DEBUG] [Thread-197763] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:15:59.905 [DEBUG] [Thread-197763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:15:59.906 [DEBUG] [Thread-197763] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:15:59.907 [DEBUG] [Thread-197763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:15:59.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:15:59.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:15:59.909 [DEBUG] [Thread-197763] [transport.py] [_log()] userauth is OK
2026-02-15T04:15:59.909 [DEBUG] [Thread-197763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:15:59.909 [DEBUG] [Thread-197763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:15:59.909 [DEBUG] [Thread-197763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:15:59.909 [DEBUG] [Thread-197763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:15:59.934 [INFO] [Thread-197763] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:15:59.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:16:00.557 [DEBUG] [Thread-197763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:16:00.558 [DEBUG] [Thread-197763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:16:00.558 [DEBUG] [Thread-197763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:16:00.598 [DEBUG] [Thread-197763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:16:00.599 [DEBUG] [Thread-197763] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:16:00.602 [DEBUG] [Thread-197763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:16:00.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:16:00.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:16:00.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:16:00.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:16:00.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:16:00.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:16:00.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:16:00.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:16:00.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:16:00.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.094202 -999.00   +5.50  21.86     95   +4.80 1 3 1 3 1     0    0 0.63 -3.84 ----- 21.9 21.9 148.3 31.7 6.8 -6.4 6.5 -5.7 6.4 -6.2 6.8 -6.4
2026-02-15T04:16:00.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:16:00.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:16:00.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.094202
2026-02-15T04:16:00.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:16:00.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:16:00.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:16:00.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:16:00.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:16:00.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:15:34', tmtdew=0.82, humidity=94.44, cloud=0.0, wind=34.51, temperature=5.95, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:15:39.053', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:16:00.622 [DEBUG] [Thread-197763] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:16:00.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-15T04:16:00.715 [DEBUG] [Thread-197766] [transport.py] [_log()] starting thread (client mode): 0xa2d3ca00
2026-02-15T04:16:00.716 [DEBUG] [Thread-197766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:16:00.734 [DEBUG] [Thread-197766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:16:00.735 [INFO] [Thread-197766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:16:00.742 [DEBUG] [Thread-197766] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:16:00.743 [DEBUG] [Thread-197766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:16:00.743 [DEBUG] [Thread-197766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:16:00.743 [DEBUG] [Thread-197766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:16:00.743 [DEBUG] [Thread-197766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:16:00.743 [DEBUG] [Thread-197766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:16:00.743 [DEBUG] [Thread-197766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:16:00.743 [DEBUG] [Thread-197766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:16:00.743 [DEBUG] [Thread-197766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:16:00.743 [DEBUG] [Thread-197766] [transport.py] [_log()] client lang: <none>
2026-02-15T04:16:00.744 [DEBUG] [Thread-197766] [transport.py] [_log()] server lang: <none>
2026-02-15T04:16:00.744 [DEBUG] [Thread-197766] [transport.py] [_log()] kex follows: False
2026-02-15T04:16:00.744 [DEBUG] [Thread-197766] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:16:00.744 [DEBUG] [Thread-197766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:16:00.744 [DEBUG] [Thread-197766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:16:00.744 [DEBUG] [Thread-197766] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:16:00.744 [DEBUG] [Thread-197766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:16:00.745 [DEBUG] [Thread-197766] [transport.py] [_log()] Compression: none
2026-02-15T04:16:00.745 [DEBUG] [Thread-197766] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:16:00.800 [DEBUG] [Thread-197766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:16:00.801 [DEBUG] [Thread-197766] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:16:00.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:16:00.802 [DEBUG] [Thread-197766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:16:00.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:16:00.856 [DEBUG] [Thread-197766] [transport.py] [_log()] userauth is OK
2026-02-15T04:16:00.856 [DEBUG] [Thread-197766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:16:00.856 [DEBUG] [Thread-197766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:16:00.856 [DEBUG] [Thread-197766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:16:00.856 [DEBUG] [Thread-197766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:16:00.875 [INFO] [Thread-197766] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:16:00.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T04:16:00.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:16:01.708 [DEBUG] [Thread-197766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:16:01.708 [DEBUG] [Thread-197766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:16:01.756 [DEBUG] [Thread-197766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:16:01.757 [DEBUG] [Thread-197766] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:16:01.767 [DEBUG] [Thread-197766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:16:01.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:16:01.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T04:16:01.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T04:16:01.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:16:01.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:16:01.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:16:01.804 [DEBUG] [Thread-197766] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:16:06.381 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:16:06.382 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:16:11.090 [DEBUG] [Thread-197768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:16:23.808 [DEBUG] [Thread-197769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:16:26.142 [DEBUG] [Thread-197770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:16:31.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:16:31.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:16:31.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-15T04:16:33.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 16, 9), 0.46, 96.72, 0.0, 31.07, 5.62, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:16:33.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:16:09
2026-02-15T04:16:34.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:16:34.395 [DEBUG] [Thread-197771] [transport.py] [_log()] starting thread (client mode): 0xa57d46d0
2026-02-15T04:16:34.395 [DEBUG] [Thread-197771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:16:34.419 [DEBUG] [Thread-197771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:16:34.419 [INFO] [Thread-197771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:16:34.423 [DEBUG] [Thread-197771] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:16:34.423 [DEBUG] [Thread-197771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:16:34.423 [DEBUG] [Thread-197771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:16:34.423 [DEBUG] [Thread-197771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:16:34.423 [DEBUG] [Thread-197771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:16:34.423 [DEBUG] [Thread-197771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:16:34.423 [DEBUG] [Thread-197771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:16:34.423 [DEBUG] [Thread-197771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:16:34.423 [DEBUG] [Thread-197771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:16:34.423 [DEBUG] [Thread-197771] [transport.py] [_log()] client lang: <none>
2026-02-15T04:16:34.423 [DEBUG] [Thread-197771] [transport.py] [_log()] server lang: <none>
2026-02-15T04:16:34.423 [DEBUG] [Thread-197771] [transport.py] [_log()] kex follows: False
2026-02-15T04:16:34.423 [DEBUG] [Thread-197771] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:16:34.423 [DEBUG] [Thread-197771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:16:34.423 [DEBUG] [Thread-197771] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:16:34.423 [DEBUG] [Thread-197771] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:16:34.423 [DEBUG] [Thread-197771] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:16:34.423 [DEBUG] [Thread-197771] [transport.py] [_log()] Compression: none
2026-02-15T04:16:34.423 [DEBUG] [Thread-197771] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:16:34.440 [DEBUG] [Thread-197771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:16:34.440 [DEBUG] [Thread-197771] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:16:34.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:16:34.441 [DEBUG] [Thread-197771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:16:34.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:16:34.443 [DEBUG] [Thread-197771] [transport.py] [_log()] userauth is OK
2026-02-15T04:16:34.443 [DEBUG] [Thread-197771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:16:34.444 [DEBUG] [Thread-197771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:16:34.444 [DEBUG] [Thread-197771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:16:34.444 [DEBUG] [Thread-197771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:16:34.465 [INFO] [Thread-197771] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:16:34.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:16:35.105 [DEBUG] [Thread-197771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:16:35.105 [DEBUG] [Thread-197771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:16:35.105 [DEBUG] [Thread-197771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:16:35.146 [DEBUG] [Thread-197771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:16:35.147 [DEBUG] [Thread-197771] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:16:35.150 [DEBUG] [Thread-197771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:16:35.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:16:35.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:16:35.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:16:35.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:16:35.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:16:35.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:16:35.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:16:35.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:16:35.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:16:35.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.094549 -999.00   +5.50  24.96     95   +4.80 1 3 1 3 1     0    0 0.63 -3.62 ----- 25.0 25.0 152.0 33.4 6.8 -5.7 6.6 -4.6 6.4 -5.0 6.8 -5.1
2026-02-15T04:16:35.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:16:35.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:16:35.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.094549
2026-02-15T04:16:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:16:35.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:16:35.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:16:35.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:16:35.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:16:35.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:16:09', tmtdew=0.46, humidity=96.72, cloud=0.0, wind=31.07, temperature=5.62, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:16:09.034', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:16:35.175 [DEBUG] [Thread-197771] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:16:35.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-15T04:16:35.271 [DEBUG] [Thread-197774] [transport.py] [_log()] starting thread (client mode): 0xa57735b0
2026-02-15T04:16:35.271 [DEBUG] [Thread-197774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:16:35.286 [DEBUG] [Thread-197774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:16:35.286 [INFO] [Thread-197774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:16:35.294 [DEBUG] [Thread-197774] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:16:35.294 [DEBUG] [Thread-197774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:16:35.294 [DEBUG] [Thread-197774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:16:35.295 [DEBUG] [Thread-197774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:16:35.295 [DEBUG] [Thread-197774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:16:35.295 [DEBUG] [Thread-197774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:16:35.295 [DEBUG] [Thread-197774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:16:35.295 [DEBUG] [Thread-197774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:16:35.295 [DEBUG] [Thread-197774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:16:35.295 [DEBUG] [Thread-197774] [transport.py] [_log()] client lang: <none>
2026-02-15T04:16:35.295 [DEBUG] [Thread-197774] [transport.py] [_log()] server lang: <none>
2026-02-15T04:16:35.295 [DEBUG] [Thread-197774] [transport.py] [_log()] kex follows: False
2026-02-15T04:16:35.295 [DEBUG] [Thread-197774] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:16:35.295 [DEBUG] [Thread-197774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:16:35.295 [DEBUG] [Thread-197774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:16:35.295 [DEBUG] [Thread-197774] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:16:35.296 [DEBUG] [Thread-197774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:16:35.296 [DEBUG] [Thread-197774] [transport.py] [_log()] Compression: none
2026-02-15T04:16:35.296 [DEBUG] [Thread-197774] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:16:35.354 [DEBUG] [Thread-197774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:16:35.355 [DEBUG] [Thread-197774] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:16:35.355 [DEBUG] [Thread-197774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:16:35.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:16:35.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:16:35.410 [DEBUG] [Thread-197774] [transport.py] [_log()] userauth is OK
2026-02-15T04:16:35.410 [DEBUG] [Thread-197774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:16:35.410 [DEBUG] [Thread-197774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:16:35.410 [DEBUG] [Thread-197774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:16:35.410 [DEBUG] [Thread-197774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:16:35.429 [INFO] [Thread-197774] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:16:35.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-15T04:16:35.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:16:36.249 [DEBUG] [Thread-197774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:16:36.250 [DEBUG] [Thread-197774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:16:36.297 [DEBUG] [Thread-197774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:16:36.298 [DEBUG] [Thread-197774] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:16:36.307 [DEBUG] [Thread-197774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:16:36.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:16:36.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-15T04:16:36.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-15T04:16:36.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:16:36.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:16:36.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:16:36.345 [DEBUG] [Thread-197774] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:16:41.180 [DEBUG] [Thread-197776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:16:56.243 [DEBUG] [Thread-197777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:17:06.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:17:06.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:17:06.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-15T04:17:06.585 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:17:06.586 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:17:08.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 16, 45), 0.46, 96.72, 0.0, 29.85, 5.64, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:17:08.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:16:45
2026-02-15T04:17:09.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:17:09.406 [DEBUG] [Thread-197778] [transport.py] [_log()] starting thread (client mode): 0xa2d3d090
2026-02-15T04:17:09.406 [DEBUG] [Thread-197778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:17:09.416 [DEBUG] [Thread-197778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:17:09.416 [INFO] [Thread-197778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:17:09.417 [DEBUG] [Thread-197778] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:17:09.417 [DEBUG] [Thread-197778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:17:09.417 [DEBUG] [Thread-197778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:17:09.417 [DEBUG] [Thread-197778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:17:09.417 [DEBUG] [Thread-197778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:17:09.417 [DEBUG] [Thread-197778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:17:09.417 [DEBUG] [Thread-197778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:17:09.417 [DEBUG] [Thread-197778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:17:09.417 [DEBUG] [Thread-197778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:17:09.417 [DEBUG] [Thread-197778] [transport.py] [_log()] client lang: <none>
2026-02-15T04:17:09.417 [DEBUG] [Thread-197778] [transport.py] [_log()] server lang: <none>
2026-02-15T04:17:09.417 [DEBUG] [Thread-197778] [transport.py] [_log()] kex follows: False
2026-02-15T04:17:09.418 [DEBUG] [Thread-197778] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:17:09.418 [DEBUG] [Thread-197778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:17:09.418 [DEBUG] [Thread-197778] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:17:09.418 [DEBUG] [Thread-197778] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:17:09.418 [DEBUG] [Thread-197778] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:17:09.418 [DEBUG] [Thread-197778] [transport.py] [_log()] Compression: none
2026-02-15T04:17:09.418 [DEBUG] [Thread-197778] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:17:09.426 [DEBUG] [Thread-197778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:17:09.427 [DEBUG] [Thread-197778] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:17:09.427 [DEBUG] [Thread-197778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:17:09.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:17:09.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:17:09.428 [DEBUG] [Thread-197778] [transport.py] [_log()] userauth is OK
2026-02-15T04:17:09.428 [DEBUG] [Thread-197778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:17:09.429 [DEBUG] [Thread-197778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:17:09.429 [DEBUG] [Thread-197778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:17:09.429 [DEBUG] [Thread-197778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:17:09.457 [INFO] [Thread-197778] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:17:09.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:17:10.258 [DEBUG] [Thread-197778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:17:10.258 [DEBUG] [Thread-197778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:17:10.258 [DEBUG] [Thread-197778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:17:10.298 [DEBUG] [Thread-197778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:17:10.299 [DEBUG] [Thread-197778] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:17:10.302 [DEBUG] [Thread-197778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:17:10.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:17:10.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:17:10.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:17:10.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:17:10.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:17:10.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:17:10.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:17:10.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:17:10.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:17:10.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.094896 -999.00   +5.50  23.72     95   +4.80 1 3 1 3 1     0    0 0.62 -3.71 ----- 23.7 23.7 161.2 32.7 6.8 -6.3 6.6 -6.0 6.4 -6.1 6.8 -6.1
2026-02-15T04:17:10.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:17:10.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:17:10.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.094896
2026-02-15T04:17:10.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:17:10.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:17:10.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:17:10.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:17:10.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:17:10.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:16:45', tmtdew=0.46, humidity=96.72, cloud=0.0, wind=29.85, temperature=5.64, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:16:39.014', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:17:10.331 [DEBUG] [Thread-197778] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:17:10.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-15T04:17:10.438 [DEBUG] [Thread-197781] [transport.py] [_log()] starting thread (client mode): 0xa5772d70
2026-02-15T04:17:10.438 [DEBUG] [Thread-197781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:17:10.452 [DEBUG] [Thread-197781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:17:10.452 [INFO] [Thread-197781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:17:10.460 [DEBUG] [Thread-197781] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:17:10.460 [DEBUG] [Thread-197781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:17:10.461 [DEBUG] [Thread-197781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:17:10.461 [DEBUG] [Thread-197781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:17:10.461 [DEBUG] [Thread-197781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:17:10.461 [DEBUG] [Thread-197781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:17:10.461 [DEBUG] [Thread-197781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:17:10.461 [DEBUG] [Thread-197781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:17:10.461 [DEBUG] [Thread-197781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:17:10.461 [DEBUG] [Thread-197781] [transport.py] [_log()] client lang: <none>
2026-02-15T04:17:10.461 [DEBUG] [Thread-197781] [transport.py] [_log()] server lang: <none>
2026-02-15T04:17:10.461 [DEBUG] [Thread-197781] [transport.py] [_log()] kex follows: False
2026-02-15T04:17:10.461 [DEBUG] [Thread-197781] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:17:10.461 [DEBUG] [Thread-197781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:17:10.461 [DEBUG] [Thread-197781] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:17:10.461 [DEBUG] [Thread-197781] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:17:10.461 [DEBUG] [Thread-197781] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:17:10.461 [DEBUG] [Thread-197781] [transport.py] [_log()] Compression: none
2026-02-15T04:17:10.461 [DEBUG] [Thread-197781] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:17:10.520 [DEBUG] [Thread-197781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:17:10.521 [DEBUG] [Thread-197781] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:17:10.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:17:10.522 [DEBUG] [Thread-197781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:17:10.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:17:10.576 [DEBUG] [Thread-197781] [transport.py] [_log()] userauth is OK
2026-02-15T04:17:10.577 [DEBUG] [Thread-197781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:17:10.577 [DEBUG] [Thread-197781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:17:10.577 [DEBUG] [Thread-197781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:17:10.577 [DEBUG] [Thread-197781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:17:10.596 [INFO] [Thread-197781] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:17:10.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-15T04:17:10.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:17:11.279 [DEBUG] [Thread-197783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:17:11.423 [DEBUG] [Thread-197781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:17:11.423 [DEBUG] [Thread-197781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:17:11.471 [DEBUG] [Thread-197781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:17:11.471 [DEBUG] [Thread-197781] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:17:11.480 [DEBUG] [Thread-197781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:17:11.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:17:11.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-15T04:17:11.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-15T04:17:11.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:17:11.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:17:11.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:17:11.515 [DEBUG] [Thread-197781] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:17:23.866 [DEBUG] [Thread-197784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:17:26.342 [DEBUG] [Thread-197785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:17:41.379 [DEBUG] [Thread-197786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:17:41.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:17:41.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:17:41.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-15T04:17:43.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 17, 20), 0.45, 96.77, 0.0, 28.28, 5.66, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:17:43.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:17:20
2026-02-15T04:17:43.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:17:43.960 [DEBUG] [Thread-197787] [transport.py] [_log()] starting thread (client mode): 0xa2d3f1f0
2026-02-15T04:17:43.960 [DEBUG] [Thread-197787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:17:43.980 [DEBUG] [Thread-197787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:17:43.980 [INFO] [Thread-197787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:17:43.983 [DEBUG] [Thread-197787] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:17:43.983 [DEBUG] [Thread-197787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:17:43.984 [DEBUG] [Thread-197787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:17:43.984 [DEBUG] [Thread-197787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:17:43.984 [DEBUG] [Thread-197787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:17:43.984 [DEBUG] [Thread-197787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:17:43.984 [DEBUG] [Thread-197787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:17:43.984 [DEBUG] [Thread-197787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:17:43.984 [DEBUG] [Thread-197787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:17:43.984 [DEBUG] [Thread-197787] [transport.py] [_log()] client lang: <none>
2026-02-15T04:17:43.984 [DEBUG] [Thread-197787] [transport.py] [_log()] server lang: <none>
2026-02-15T04:17:43.984 [DEBUG] [Thread-197787] [transport.py] [_log()] kex follows: False
2026-02-15T04:17:43.984 [DEBUG] [Thread-197787] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:17:43.984 [DEBUG] [Thread-197787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:17:43.984 [DEBUG] [Thread-197787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:17:43.984 [DEBUG] [Thread-197787] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:17:43.984 [DEBUG] [Thread-197787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:17:43.985 [DEBUG] [Thread-197787] [transport.py] [_log()] Compression: none
2026-02-15T04:17:43.985 [DEBUG] [Thread-197787] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:17:44.004 [DEBUG] [Thread-197787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:17:44.005 [DEBUG] [Thread-197787] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:17:44.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:17:44.006 [DEBUG] [Thread-197787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:17:44.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:17:44.008 [DEBUG] [Thread-197787] [transport.py] [_log()] userauth is OK
2026-02-15T04:17:44.008 [DEBUG] [Thread-197787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:17:44.008 [DEBUG] [Thread-197787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:17:44.008 [DEBUG] [Thread-197787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:17:44.009 [DEBUG] [Thread-197787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:17:44.023 [INFO] [Thread-197787] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:17:44.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:17:44.648 [DEBUG] [Thread-197787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:17:44.649 [DEBUG] [Thread-197787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:17:44.649 [DEBUG] [Thread-197787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:17:44.689 [DEBUG] [Thread-197787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:17:44.690 [DEBUG] [Thread-197787] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:17:44.693 [DEBUG] [Thread-197787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:17:44.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:17:44.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:17:44.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:17:44.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:17:44.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:17:44.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:17:44.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:17:44.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:17:44.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:17:44.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.095244 -999.00   +5.50  22.83     95   +4.80 1 3 1 3 1     0    0 0.65 -3.46 ----- 22.8 22.8 154.2 29.5 6.8 -5.0 6.7 -4.6 6.5 -4.5 6.8 -4.7
2026-02-15T04:17:44.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:17:44.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:17:44.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.095244
2026-02-15T04:17:44.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:17:44.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:17:44.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:17:44.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:17:44.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:17:44.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:17:20', tmtdew=0.45, humidity=96.77, cloud=0.0, wind=28.28, temperature=5.66, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:17:09.082', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:17:44.720 [DEBUG] [Thread-197787] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:17:44.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-15T04:17:44.817 [DEBUG] [Thread-197790] [transport.py] [_log()] starting thread (client mode): 0xa57d5900
2026-02-15T04:17:44.817 [DEBUG] [Thread-197790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:17:44.831 [DEBUG] [Thread-197790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:17:44.831 [INFO] [Thread-197790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:17:44.839 [DEBUG] [Thread-197790] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:17:44.839 [DEBUG] [Thread-197790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:17:44.839 [DEBUG] [Thread-197790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:17:44.839 [DEBUG] [Thread-197790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:17:44.839 [DEBUG] [Thread-197790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:17:44.839 [DEBUG] [Thread-197790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:17:44.839 [DEBUG] [Thread-197790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:17:44.839 [DEBUG] [Thread-197790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:17:44.839 [DEBUG] [Thread-197790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:17:44.839 [DEBUG] [Thread-197790] [transport.py] [_log()] client lang: <none>
2026-02-15T04:17:44.839 [DEBUG] [Thread-197790] [transport.py] [_log()] server lang: <none>
2026-02-15T04:17:44.840 [DEBUG] [Thread-197790] [transport.py] [_log()] kex follows: False
2026-02-15T04:17:44.840 [DEBUG] [Thread-197790] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:17:44.840 [DEBUG] [Thread-197790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:17:44.840 [DEBUG] [Thread-197790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:17:44.840 [DEBUG] [Thread-197790] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:17:44.840 [DEBUG] [Thread-197790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:17:44.840 [DEBUG] [Thread-197790] [transport.py] [_log()] Compression: none
2026-02-15T04:17:44.840 [DEBUG] [Thread-197790] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:17:44.901 [DEBUG] [Thread-197790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:17:44.901 [DEBUG] [Thread-197790] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:17:44.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:17:44.903 [DEBUG] [Thread-197790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:17:44.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:17:44.958 [DEBUG] [Thread-197790] [transport.py] [_log()] userauth is OK
2026-02-15T04:17:44.959 [DEBUG] [Thread-197790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:17:44.959 [DEBUG] [Thread-197790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:17:44.959 [DEBUG] [Thread-197790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:17:44.959 [DEBUG] [Thread-197790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:17:44.978 [INFO] [Thread-197790] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:17:44.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T04:17:44.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:17:45.813 [DEBUG] [Thread-197790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:17:45.813 [DEBUG] [Thread-197790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:17:45.861 [DEBUG] [Thread-197790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:17:45.861 [DEBUG] [Thread-197790] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:17:45.871 [DEBUG] [Thread-197790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:17:45.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:17:45.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-15T04:17:45.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T04:17:45.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:17:45.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:17:45.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:17:45.908 [DEBUG] [Thread-197790] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:17:56.413 [DEBUG] [Thread-197792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:18:06.789 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:18:06.790 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:18:11.465 [DEBUG] [Thread-197793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:18:15.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:18:15.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:18:15.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T04:18:17.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 17, 56), 0.45, 96.79, 0.0, 27.97, 5.66, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:18:17.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:17:56
2026-02-15T04:18:18.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:18:18.357 [DEBUG] [Thread-197794] [transport.py] [_log()] starting thread (client mode): 0xa57d6530
2026-02-15T04:18:18.357 [DEBUG] [Thread-197794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:18:18.372 [DEBUG] [Thread-197794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:18:18.372 [INFO] [Thread-197794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:18:18.375 [DEBUG] [Thread-197794] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:18:18.375 [DEBUG] [Thread-197794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:18:18.375 [DEBUG] [Thread-197794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:18:18.375 [DEBUG] [Thread-197794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:18:18.375 [DEBUG] [Thread-197794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:18:18.376 [DEBUG] [Thread-197794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:18:18.376 [DEBUG] [Thread-197794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:18:18.376 [DEBUG] [Thread-197794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:18:18.376 [DEBUG] [Thread-197794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:18:18.376 [DEBUG] [Thread-197794] [transport.py] [_log()] client lang: <none>
2026-02-15T04:18:18.376 [DEBUG] [Thread-197794] [transport.py] [_log()] server lang: <none>
2026-02-15T04:18:18.376 [DEBUG] [Thread-197794] [transport.py] [_log()] kex follows: False
2026-02-15T04:18:18.376 [DEBUG] [Thread-197794] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:18:18.376 [DEBUG] [Thread-197794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:18:18.376 [DEBUG] [Thread-197794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:18:18.376 [DEBUG] [Thread-197794] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:18:18.376 [DEBUG] [Thread-197794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:18:18.376 [DEBUG] [Thread-197794] [transport.py] [_log()] Compression: none
2026-02-15T04:18:18.376 [DEBUG] [Thread-197794] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:18:18.388 [DEBUG] [Thread-197794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:18:18.388 [DEBUG] [Thread-197794] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:18:18.389 [DEBUG] [Thread-197794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:18:18.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:18:18.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:18:18.390 [DEBUG] [Thread-197794] [transport.py] [_log()] userauth is OK
2026-02-15T04:18:18.390 [DEBUG] [Thread-197794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:18:18.390 [DEBUG] [Thread-197794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:18:18.390 [DEBUG] [Thread-197794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:18:18.390 [DEBUG] [Thread-197794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:18:18.426 [INFO] [Thread-197794] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:18:18.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:18:19.054 [DEBUG] [Thread-197794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:18:19.054 [DEBUG] [Thread-197794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:18:19.055 [DEBUG] [Thread-197794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:18:19.095 [DEBUG] [Thread-197794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:18:19.096 [DEBUG] [Thread-197794] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:18:19.099 [DEBUG] [Thread-197794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:18:19.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:18:19.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:18:19.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:18:19.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:18:19.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:18:19.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:18:19.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:18:19.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:18:19.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:18:19.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.095591 -999.00   +5.50  24.52     95   +4.80 1 3 1 3 1     0    0 0.64 -3.17 ----- 24.5 24.5 158.4 30.7 6.9 -5.7 6.7 -3.1 6.5 -3.5 6.8 -3.7
2026-02-15T04:18:19.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:18:19.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:18:19.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.095591
2026-02-15T04:18:19.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:18:19.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:18:19.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:18:19.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:18:19.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:18:19.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:17:56', tmtdew=0.45, humidity=96.79, cloud=0.0, wind=27.97, temperature=5.66, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:17:39.062', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:18:19.127 [DEBUG] [Thread-197794] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:18:19.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-15T04:18:19.223 [DEBUG] [Thread-197797] [transport.py] [_log()] starting thread (client mode): 0xa57d4f10
2026-02-15T04:18:19.223 [DEBUG] [Thread-197797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:18:19.238 [DEBUG] [Thread-197797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:18:19.238 [INFO] [Thread-197797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:18:19.245 [DEBUG] [Thread-197797] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:18:19.246 [DEBUG] [Thread-197797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:18:19.246 [DEBUG] [Thread-197797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:18:19.246 [DEBUG] [Thread-197797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:18:19.246 [DEBUG] [Thread-197797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:18:19.246 [DEBUG] [Thread-197797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:18:19.246 [DEBUG] [Thread-197797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:18:19.246 [DEBUG] [Thread-197797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:18:19.246 [DEBUG] [Thread-197797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:18:19.247 [DEBUG] [Thread-197797] [transport.py] [_log()] client lang: <none>
2026-02-15T04:18:19.247 [DEBUG] [Thread-197797] [transport.py] [_log()] server lang: <none>
2026-02-15T04:18:19.247 [DEBUG] [Thread-197797] [transport.py] [_log()] kex follows: False
2026-02-15T04:18:19.247 [DEBUG] [Thread-197797] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:18:19.247 [DEBUG] [Thread-197797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:18:19.247 [DEBUG] [Thread-197797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:18:19.247 [DEBUG] [Thread-197797] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:18:19.247 [DEBUG] [Thread-197797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:18:19.247 [DEBUG] [Thread-197797] [transport.py] [_log()] Compression: none
2026-02-15T04:18:19.247 [DEBUG] [Thread-197797] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:18:19.304 [DEBUG] [Thread-197797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:18:19.305 [DEBUG] [Thread-197797] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:18:19.306 [DEBUG] [Thread-197797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:18:19.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:18:19.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:18:19.361 [DEBUG] [Thread-197797] [transport.py] [_log()] userauth is OK
2026-02-15T04:18:19.361 [DEBUG] [Thread-197797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:18:19.361 [DEBUG] [Thread-197797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:18:19.361 [DEBUG] [Thread-197797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:18:19.362 [DEBUG] [Thread-197797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:18:19.381 [INFO] [Thread-197797] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:18:19.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T04:18:19.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:18:20.186 [DEBUG] [Thread-197797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:18:20.187 [DEBUG] [Thread-197797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:18:20.234 [DEBUG] [Thread-197797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:18:20.235 [DEBUG] [Thread-197797] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:18:20.244 [DEBUG] [Thread-197797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:18:20.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:18:20.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-15T04:18:20.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-15T04:18:20.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:18:20.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:18:20.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:18:20.282 [DEBUG] [Thread-197797] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:18:23.923 [DEBUG] [Thread-197799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:18:26.498 [DEBUG] [Thread-197800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:18:41.549 [DEBUG] [Thread-197801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:18:50.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:18:50.304 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:18:50.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-15T04:18:52.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 18, 32), 0.45, 96.77, 0.0, 28.72, 5.64, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:18:52.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:18:32
2026-02-15T04:18:52.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:18:53.142 [DEBUG] [Thread-197802] [transport.py] [_log()] starting thread (client mode): 0xa5773ac0
2026-02-15T04:18:53.142 [DEBUG] [Thread-197802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:18:53.162 [DEBUG] [Thread-197802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:18:53.162 [INFO] [Thread-197802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:18:53.165 [DEBUG] [Thread-197802] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:18:53.166 [DEBUG] [Thread-197802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:18:53.166 [DEBUG] [Thread-197802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:18:53.166 [DEBUG] [Thread-197802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:18:53.166 [DEBUG] [Thread-197802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:18:53.166 [DEBUG] [Thread-197802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:18:53.166 [DEBUG] [Thread-197802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:18:53.166 [DEBUG] [Thread-197802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:18:53.166 [DEBUG] [Thread-197802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:18:53.166 [DEBUG] [Thread-197802] [transport.py] [_log()] client lang: <none>
2026-02-15T04:18:53.166 [DEBUG] [Thread-197802] [transport.py] [_log()] server lang: <none>
2026-02-15T04:18:53.166 [DEBUG] [Thread-197802] [transport.py] [_log()] kex follows: False
2026-02-15T04:18:53.166 [DEBUG] [Thread-197802] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:18:53.167 [DEBUG] [Thread-197802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:18:53.167 [DEBUG] [Thread-197802] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:18:53.167 [DEBUG] [Thread-197802] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:18:53.167 [DEBUG] [Thread-197802] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:18:53.167 [DEBUG] [Thread-197802] [transport.py] [_log()] Compression: none
2026-02-15T04:18:53.167 [DEBUG] [Thread-197802] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:18:53.184 [DEBUG] [Thread-197802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:18:53.185 [DEBUG] [Thread-197802] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:18:53.185 [DEBUG] [Thread-197802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:18:53.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:18:53.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:18:53.187 [DEBUG] [Thread-197802] [transport.py] [_log()] userauth is OK
2026-02-15T04:18:53.187 [DEBUG] [Thread-197802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:18:53.187 [DEBUG] [Thread-197802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:18:53.187 [DEBUG] [Thread-197802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:18:53.188 [DEBUG] [Thread-197802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:18:53.211 [INFO] [Thread-197802] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:18:53.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:18:53.830 [DEBUG] [Thread-197802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:18:53.830 [DEBUG] [Thread-197802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:18:53.830 [DEBUG] [Thread-197802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:18:53.872 [DEBUG] [Thread-197802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:18:53.872 [DEBUG] [Thread-197802] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:18:53.875 [DEBUG] [Thread-197802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:18:53.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:18:53.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:18:53.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:18:53.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:18:53.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:18:53.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:18:53.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:18:53.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:18:53.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:18:53.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.095938 -999.00   +5.50  23.72     95   +4.80 1 3 1 3 1     0    0 0.63 -3.62 ----- 23.7 23.7 163.6 29.2 6.9 -4.4 6.6 -5.2 6.5 -5.4 6.9 -5.6
2026-02-15T04:18:53.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:18:53.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:18:53.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.095938
2026-02-15T04:18:53.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:18:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:18:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:18:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:18:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:18:53.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:18:32', tmtdew=0.45, humidity=96.77, cloud=0.0, wind=28.72, temperature=5.64, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:18:09.043', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:18:53.898 [DEBUG] [Thread-197802] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:18:53.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-15T04:18:53.999 [DEBUG] [Thread-197805] [transport.py] [_log()] starting thread (client mode): 0xa57d5f30
2026-02-15T04:18:53.999 [DEBUG] [Thread-197805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:18:54.014 [DEBUG] [Thread-197805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:18:54.015 [INFO] [Thread-197805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:18:54.022 [DEBUG] [Thread-197805] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:18:54.023 [DEBUG] [Thread-197805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:18:54.023 [DEBUG] [Thread-197805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:18:54.023 [DEBUG] [Thread-197805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:18:54.023 [DEBUG] [Thread-197805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:18:54.023 [DEBUG] [Thread-197805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:18:54.023 [DEBUG] [Thread-197805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:18:54.023 [DEBUG] [Thread-197805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:18:54.023 [DEBUG] [Thread-197805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:18:54.023 [DEBUG] [Thread-197805] [transport.py] [_log()] client lang: <none>
2026-02-15T04:18:54.023 [DEBUG] [Thread-197805] [transport.py] [_log()] server lang: <none>
2026-02-15T04:18:54.023 [DEBUG] [Thread-197805] [transport.py] [_log()] kex follows: False
2026-02-15T04:18:54.023 [DEBUG] [Thread-197805] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:18:54.023 [DEBUG] [Thread-197805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:18:54.023 [DEBUG] [Thread-197805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:18:54.024 [DEBUG] [Thread-197805] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:18:54.024 [DEBUG] [Thread-197805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:18:54.024 [DEBUG] [Thread-197805] [transport.py] [_log()] Compression: none
2026-02-15T04:18:54.024 [DEBUG] [Thread-197805] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:18:54.084 [DEBUG] [Thread-197805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:18:54.084 [DEBUG] [Thread-197805] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:18:54.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:18:54.086 [DEBUG] [Thread-197805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:18:54.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:18:54.143 [DEBUG] [Thread-197805] [transport.py] [_log()] userauth is OK
2026-02-15T04:18:54.143 [DEBUG] [Thread-197805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:18:54.144 [DEBUG] [Thread-197805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:18:54.144 [DEBUG] [Thread-197805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:18:54.144 [DEBUG] [Thread-197805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:18:54.163 [INFO] [Thread-197805] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:18:54.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-15T04:18:54.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:18:54.994 [DEBUG] [Thread-197805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:18:54.995 [DEBUG] [Thread-197805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:18:55.043 [DEBUG] [Thread-197805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:18:55.044 [DEBUG] [Thread-197805] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:18:55.053 [DEBUG] [Thread-197805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:18:55.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:18:55.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-15T04:18:55.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T04:18:55.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:18:55.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:18:55.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:18:55.090 [DEBUG] [Thread-197805] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:18:56.585 [DEBUG] [Thread-197807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:19:06.996 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:19:06.997 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:19:11.636 [DEBUG] [Thread-197808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:19:24.014 [DEBUG] [Thread-197809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:19:25.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:19:25.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:19:25.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-15T04:19:26.667 [DEBUG] [Thread-197810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:19:26.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 19, 7), 0.45, 96.75, 0.0, 28.99, 5.64, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:19:26.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:19:07
2026-02-15T04:19:27.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:19:27.483 [DEBUG] [Thread-197811] [transport.py] [_log()] starting thread (client mode): 0xa57d4850
2026-02-15T04:19:27.484 [DEBUG] [Thread-197811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:19:27.503 [DEBUG] [Thread-197811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:19:27.504 [INFO] [Thread-197811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:19:27.506 [DEBUG] [Thread-197811] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:19:27.507 [DEBUG] [Thread-197811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:19:27.507 [DEBUG] [Thread-197811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:19:27.507 [DEBUG] [Thread-197811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:19:27.507 [DEBUG] [Thread-197811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:19:27.507 [DEBUG] [Thread-197811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:19:27.507 [DEBUG] [Thread-197811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:19:27.507 [DEBUG] [Thread-197811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:19:27.507 [DEBUG] [Thread-197811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:19:27.507 [DEBUG] [Thread-197811] [transport.py] [_log()] client lang: <none>
2026-02-15T04:19:27.507 [DEBUG] [Thread-197811] [transport.py] [_log()] server lang: <none>
2026-02-15T04:19:27.507 [DEBUG] [Thread-197811] [transport.py] [_log()] kex follows: False
2026-02-15T04:19:27.507 [DEBUG] [Thread-197811] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:19:27.507 [DEBUG] [Thread-197811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:19:27.507 [DEBUG] [Thread-197811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:19:27.507 [DEBUG] [Thread-197811] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:19:27.507 [DEBUG] [Thread-197811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:19:27.507 [DEBUG] [Thread-197811] [transport.py] [_log()] Compression: none
2026-02-15T04:19:27.507 [DEBUG] [Thread-197811] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:19:27.526 [DEBUG] [Thread-197811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:19:27.526 [DEBUG] [Thread-197811] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:19:27.527 [DEBUG] [Thread-197811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:19:27.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:19:27.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:19:27.569 [DEBUG] [Thread-197811] [transport.py] [_log()] userauth is OK
2026-02-15T04:19:27.569 [DEBUG] [Thread-197811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:19:27.569 [DEBUG] [Thread-197811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:19:27.569 [DEBUG] [Thread-197811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:19:27.570 [DEBUG] [Thread-197811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:19:27.592 [INFO] [Thread-197811] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:19:27.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:19:28.261 [DEBUG] [Thread-197811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:19:28.262 [DEBUG] [Thread-197811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:19:28.262 [DEBUG] [Thread-197811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:19:28.302 [DEBUG] [Thread-197811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:19:28.303 [DEBUG] [Thread-197811] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:19:28.306 [DEBUG] [Thread-197811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:19:28.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:19:28.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:19:28.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:19:28.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:19:28.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:19:28.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:19:28.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:19:28.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:19:28.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:19:28.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.096285 -999.00   +5.50  20.82     95   +4.80 1 3 1 3 1     0    0 0.62 -3.49 ----- 20.8 20.8 161.2 30.2 6.8 -6.1 6.7 -5.4 6.5 -5.5 6.8 -5.4
2026-02-15T04:19:28.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:19:28.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:19:28.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.096285
2026-02-15T04:19:28.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:19:28.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:19:28.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:19:28.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:19:28.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:19:28.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:19:07', tmtdew=0.45, humidity=96.75, cloud=0.0, wind=28.99, temperature=5.64, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:18:39.024', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:19:28.338 [DEBUG] [Thread-197811] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:19:28.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-15T04:19:28.435 [DEBUG] [Thread-197814] [transport.py] [_log()] starting thread (client mode): 0xa5771ff0
2026-02-15T04:19:28.435 [DEBUG] [Thread-197814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:19:28.449 [DEBUG] [Thread-197814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:19:28.450 [INFO] [Thread-197814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:19:28.457 [DEBUG] [Thread-197814] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:19:28.458 [DEBUG] [Thread-197814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:19:28.458 [DEBUG] [Thread-197814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:19:28.458 [DEBUG] [Thread-197814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:19:28.459 [DEBUG] [Thread-197814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:19:28.459 [DEBUG] [Thread-197814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:19:28.459 [DEBUG] [Thread-197814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:19:28.459 [DEBUG] [Thread-197814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:19:28.459 [DEBUG] [Thread-197814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:19:28.459 [DEBUG] [Thread-197814] [transport.py] [_log()] client lang: <none>
2026-02-15T04:19:28.459 [DEBUG] [Thread-197814] [transport.py] [_log()] server lang: <none>
2026-02-15T04:19:28.459 [DEBUG] [Thread-197814] [transport.py] [_log()] kex follows: False
2026-02-15T04:19:28.459 [DEBUG] [Thread-197814] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:19:28.459 [DEBUG] [Thread-197814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:19:28.459 [DEBUG] [Thread-197814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:19:28.459 [DEBUG] [Thread-197814] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:19:28.459 [DEBUG] [Thread-197814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:19:28.459 [DEBUG] [Thread-197814] [transport.py] [_log()] Compression: none
2026-02-15T04:19:28.460 [DEBUG] [Thread-197814] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:19:28.520 [DEBUG] [Thread-197814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:19:28.521 [DEBUG] [Thread-197814] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:19:28.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:19:28.522 [DEBUG] [Thread-197814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:19:28.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:19:28.577 [DEBUG] [Thread-197814] [transport.py] [_log()] userauth is OK
2026-02-15T04:19:28.578 [DEBUG] [Thread-197814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:19:28.578 [DEBUG] [Thread-197814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:19:28.578 [DEBUG] [Thread-197814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:19:28.578 [DEBUG] [Thread-197814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:19:28.596 [INFO] [Thread-197814] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:19:28.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-15T04:19:28.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:19:29.429 [DEBUG] [Thread-197814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:19:29.429 [DEBUG] [Thread-197814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:19:29.477 [DEBUG] [Thread-197814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:19:29.478 [DEBUG] [Thread-197814] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:19:29.487 [DEBUG] [Thread-197814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:19:29.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:19:29.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-15T04:19:29.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-15T04:19:29.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:19:29.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:19:29.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:19:29.524 [DEBUG] [Thread-197814] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:19:41.706 [DEBUG] [Thread-197816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:19:56.755 [DEBUG] [Thread-197817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:19:59.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:19:59.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:19:59.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-15T04:20:01.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 19, 43), 0.45, 96.77, 0.0, 29.96, 5.57, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:20:01.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:19:43
2026-02-15T04:20:02.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:20:02.332 [DEBUG] [Thread-197818] [transport.py] [_log()] starting thread (client mode): 0xa2d87fa0
2026-02-15T04:20:02.332 [DEBUG] [Thread-197818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:20:02.351 [DEBUG] [Thread-197818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:20:02.351 [INFO] [Thread-197818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:20:02.355 [DEBUG] [Thread-197818] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:20:02.355 [DEBUG] [Thread-197818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:20:02.355 [DEBUG] [Thread-197818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:20:02.355 [DEBUG] [Thread-197818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:20:02.355 [DEBUG] [Thread-197818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:20:02.355 [DEBUG] [Thread-197818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:20:02.355 [DEBUG] [Thread-197818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:20:02.355 [DEBUG] [Thread-197818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:20:02.355 [DEBUG] [Thread-197818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:20:02.355 [DEBUG] [Thread-197818] [transport.py] [_log()] client lang: <none>
2026-02-15T04:20:02.355 [DEBUG] [Thread-197818] [transport.py] [_log()] server lang: <none>
2026-02-15T04:20:02.355 [DEBUG] [Thread-197818] [transport.py] [_log()] kex follows: False
2026-02-15T04:20:02.355 [DEBUG] [Thread-197818] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:20:02.355 [DEBUG] [Thread-197818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:20:02.355 [DEBUG] [Thread-197818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:20:02.355 [DEBUG] [Thread-197818] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:20:02.355 [DEBUG] [Thread-197818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:20:02.355 [DEBUG] [Thread-197818] [transport.py] [_log()] Compression: none
2026-02-15T04:20:02.355 [DEBUG] [Thread-197818] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:20:02.372 [DEBUG] [Thread-197818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:20:02.372 [DEBUG] [Thread-197818] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:20:02.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:20:02.374 [DEBUG] [Thread-197818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:20:02.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:20:02.376 [DEBUG] [Thread-197818] [transport.py] [_log()] userauth is OK
2026-02-15T04:20:02.376 [DEBUG] [Thread-197818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:20:02.376 [DEBUG] [Thread-197818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:20:02.376 [DEBUG] [Thread-197818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:20:02.376 [DEBUG] [Thread-197818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:20:02.391 [INFO] [Thread-197818] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:20:02.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:20:05.019 [DEBUG] [Thread-197818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:20:05.020 [DEBUG] [Thread-197818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:20:05.020 [DEBUG] [Thread-197818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:20:05.060 [DEBUG] [Thread-197818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:20:05.060 [DEBUG] [Thread-197818] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:20:05.063 [DEBUG] [Thread-197818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:20:05.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:20:05.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:20:05.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:20:05.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:20:05.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:20:05.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:20:05.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:20:05.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:20:05.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:20:05.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.096980 -999.00   +5.50  19.66     95   +4.80 1 3 1 3 1     0    0 0.59 -4.16 ----- 19.7 19.7 151.4 30.5 6.8 -7.4 6.7 -5.7 6.5 -5.9 6.8 -6.0
2026-02-15T04:20:05.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:20:05.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:20:05.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.096980
2026-02-15T04:20:05.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:20:05.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:20:05.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:20:05.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:20:05.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:20:05.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:19:43', tmtdew=0.45, humidity=96.77, cloud=0.0, wind=29.96, temperature=5.57, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:19:39.072', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:20:05.096 [DEBUG] [Thread-197818] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:20:05.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-15T04:20:05.182 [DEBUG] [Thread-197821] [transport.py] [_log()] starting thread (client mode): 0xa2d87640
2026-02-15T04:20:05.182 [DEBUG] [Thread-197821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:20:05.197 [DEBUG] [Thread-197821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:20:05.197 [INFO] [Thread-197821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:20:05.205 [DEBUG] [Thread-197821] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:20:05.205 [DEBUG] [Thread-197821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:20:05.206 [DEBUG] [Thread-197821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:20:05.206 [DEBUG] [Thread-197821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:20:05.206 [DEBUG] [Thread-197821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:20:05.206 [DEBUG] [Thread-197821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:20:05.206 [DEBUG] [Thread-197821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:20:05.206 [DEBUG] [Thread-197821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:20:05.206 [DEBUG] [Thread-197821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:20:05.206 [DEBUG] [Thread-197821] [transport.py] [_log()] client lang: <none>
2026-02-15T04:20:05.206 [DEBUG] [Thread-197821] [transport.py] [_log()] server lang: <none>
2026-02-15T04:20:05.206 [DEBUG] [Thread-197821] [transport.py] [_log()] kex follows: False
2026-02-15T04:20:05.206 [DEBUG] [Thread-197821] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:20:05.206 [DEBUG] [Thread-197821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:20:05.206 [DEBUG] [Thread-197821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:20:05.206 [DEBUG] [Thread-197821] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:20:05.206 [DEBUG] [Thread-197821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:20:05.206 [DEBUG] [Thread-197821] [transport.py] [_log()] Compression: none
2026-02-15T04:20:05.206 [DEBUG] [Thread-197821] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:20:05.264 [DEBUG] [Thread-197821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:20:05.265 [DEBUG] [Thread-197821] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:20:05.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:20:05.266 [DEBUG] [Thread-197821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:20:05.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:20:05.320 [DEBUG] [Thread-197821] [transport.py] [_log()] userauth is OK
2026-02-15T04:20:05.321 [DEBUG] [Thread-197821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:20:05.321 [DEBUG] [Thread-197821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:20:05.321 [DEBUG] [Thread-197821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:20:05.321 [DEBUG] [Thread-197821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:20:05.340 [INFO] [Thread-197821] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:20:05.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T04:20:05.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:20:06.152 [DEBUG] [Thread-197821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:20:06.152 [DEBUG] [Thread-197821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:20:06.200 [DEBUG] [Thread-197821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:20:06.201 [DEBUG] [Thread-197821] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:20:06.210 [DEBUG] [Thread-197821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:20:06.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:20:06.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-15T04:20:06.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T04:20:06.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:20:06.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:20:06.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:20:06.247 [DEBUG] [Thread-197821] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:20:07.202 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:20:07.203 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:20:11.790 [DEBUG] [Thread-197823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:20:24.072 [DEBUG] [Thread-197824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:20:26.844 [DEBUG] [Thread-197825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:20:36.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:20:36.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:20:36.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-15T04:20:38.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 20, 19), 0.45, 96.8, 0.0, 31.83, 5.57, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:20:38.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:20:19
2026-02-15T04:20:38.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:20:39.032 [DEBUG] [Thread-197826] [transport.py] [_log()] starting thread (client mode): 0xa2d57e50
2026-02-15T04:20:39.032 [DEBUG] [Thread-197826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:20:39.048 [DEBUG] [Thread-197826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:20:39.048 [INFO] [Thread-197826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:20:39.050 [DEBUG] [Thread-197826] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:20:39.050 [DEBUG] [Thread-197826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:20:39.050 [DEBUG] [Thread-197826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:20:39.050 [DEBUG] [Thread-197826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:20:39.050 [DEBUG] [Thread-197826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:20:39.050 [DEBUG] [Thread-197826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:20:39.050 [DEBUG] [Thread-197826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:20:39.050 [DEBUG] [Thread-197826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:20:39.050 [DEBUG] [Thread-197826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:20:39.050 [DEBUG] [Thread-197826] [transport.py] [_log()] client lang: <none>
2026-02-15T04:20:39.050 [DEBUG] [Thread-197826] [transport.py] [_log()] server lang: <none>
2026-02-15T04:20:39.050 [DEBUG] [Thread-197826] [transport.py] [_log()] kex follows: False
2026-02-15T04:20:39.050 [DEBUG] [Thread-197826] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:20:39.050 [DEBUG] [Thread-197826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:20:39.050 [DEBUG] [Thread-197826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:20:39.051 [DEBUG] [Thread-197826] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:20:39.051 [DEBUG] [Thread-197826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:20:39.051 [DEBUG] [Thread-197826] [transport.py] [_log()] Compression: none
2026-02-15T04:20:39.051 [DEBUG] [Thread-197826] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:20:39.065 [DEBUG] [Thread-197826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:20:39.065 [DEBUG] [Thread-197826] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:20:39.065 [DEBUG] [Thread-197826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:20:39.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:20:39.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:20:39.067 [DEBUG] [Thread-197826] [transport.py] [_log()] userauth is OK
2026-02-15T04:20:39.067 [DEBUG] [Thread-197826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:20:39.067 [DEBUG] [Thread-197826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:20:39.067 [DEBUG] [Thread-197826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:20:39.068 [DEBUG] [Thread-197826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:20:39.103 [INFO] [Thread-197826] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:20:39.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:20:39.679 [DEBUG] [Thread-197826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:20:39.680 [DEBUG] [Thread-197826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:20:39.680 [DEBUG] [Thread-197826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:20:39.720 [DEBUG] [Thread-197826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:20:39.720 [DEBUG] [Thread-197826] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:20:39.725 [DEBUG] [Thread-197826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:20:39.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:20:39.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:20:39.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:20:39.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:20:39.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:20:39.747 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:20:39.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:20:39.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:20:39.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:20:39.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.097327 -999.00   +5.50  23.46     95   +4.80 1 3 1 3 1     0    0 0.61 -4.45 ----- 23.5 23.5 154.2 31.6 6.9 -6.3 6.7 -6.7 6.5 -7.2 6.9 -7.4
2026-02-15T04:20:39.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:20:39.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:20:39.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.097327
2026-02-15T04:20:39.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:20:39.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:20:39.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:20:39.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:20:39.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:20:39.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:20:19', tmtdew=0.45, humidity=96.8, cloud=0.0, wind=31.83, temperature=5.57, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:20:09.053', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:20:39.750 [DEBUG] [Thread-197826] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:20:39.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T04:20:39.848 [DEBUG] [Thread-197829] [transport.py] [_log()] starting thread (client mode): 0xa2d546d0
2026-02-15T04:20:39.848 [DEBUG] [Thread-197829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:20:39.863 [DEBUG] [Thread-197829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:20:39.864 [INFO] [Thread-197829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:20:39.872 [DEBUG] [Thread-197829] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:20:39.872 [DEBUG] [Thread-197829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:20:39.872 [DEBUG] [Thread-197829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:20:39.872 [DEBUG] [Thread-197829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:20:39.872 [DEBUG] [Thread-197829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:20:39.872 [DEBUG] [Thread-197829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:20:39.872 [DEBUG] [Thread-197829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:20:39.872 [DEBUG] [Thread-197829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:20:39.872 [DEBUG] [Thread-197829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:20:39.872 [DEBUG] [Thread-197829] [transport.py] [_log()] client lang: <none>
2026-02-15T04:20:39.872 [DEBUG] [Thread-197829] [transport.py] [_log()] server lang: <none>
2026-02-15T04:20:39.873 [DEBUG] [Thread-197829] [transport.py] [_log()] kex follows: False
2026-02-15T04:20:39.873 [DEBUG] [Thread-197829] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:20:39.873 [DEBUG] [Thread-197829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:20:39.873 [DEBUG] [Thread-197829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:20:39.873 [DEBUG] [Thread-197829] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:20:39.873 [DEBUG] [Thread-197829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:20:39.873 [DEBUG] [Thread-197829] [transport.py] [_log()] Compression: none
2026-02-15T04:20:39.873 [DEBUG] [Thread-197829] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:20:39.939 [DEBUG] [Thread-197829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:20:39.939 [DEBUG] [Thread-197829] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:20:39.940 [DEBUG] [Thread-197829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:20:39.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:20:39.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:20:39.999 [DEBUG] [Thread-197829] [transport.py] [_log()] userauth is OK
2026-02-15T04:20:39.999 [DEBUG] [Thread-197829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:20:39.999 [DEBUG] [Thread-197829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:20:39.999 [DEBUG] [Thread-197829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:20:39.999 [DEBUG] [Thread-197829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:20:40.018 [INFO] [Thread-197829] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:20:40.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-15T04:20:40.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:20:40.843 [DEBUG] [Thread-197829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:20:40.844 [DEBUG] [Thread-197829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:20:40.891 [DEBUG] [Thread-197829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:20:40.892 [DEBUG] [Thread-197829] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:20:40.901 [DEBUG] [Thread-197829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:20:40.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:20:40.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-15T04:20:40.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-15T04:20:40.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:20:40.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:20:40.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:20:40.940 [DEBUG] [Thread-197829] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:20:41.881 [DEBUG] [Thread-197831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:20:56.933 [DEBUG] [Thread-197832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:21:07.407 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:21:07.409 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:21:10.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:21:10.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:21:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T04:21:11.970 [DEBUG] [Thread-197833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:21:13.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 20, 55), 0.44, 96.85, 0.0, 32.15, 5.67, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:21:13.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:20:55
2026-02-15T04:21:13.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:21:13.658 [DEBUG] [Thread-197834] [transport.py] [_log()] starting thread (client mode): 0xa2d87be0
2026-02-15T04:21:13.658 [DEBUG] [Thread-197834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:21:13.677 [DEBUG] [Thread-197834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:21:13.677 [INFO] [Thread-197834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:21:13.681 [DEBUG] [Thread-197834] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:21:13.681 [DEBUG] [Thread-197834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:21:13.681 [DEBUG] [Thread-197834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:21:13.681 [DEBUG] [Thread-197834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:21:13.681 [DEBUG] [Thread-197834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:21:13.681 [DEBUG] [Thread-197834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:21:13.681 [DEBUG] [Thread-197834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:21:13.681 [DEBUG] [Thread-197834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:21:13.681 [DEBUG] [Thread-197834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:21:13.681 [DEBUG] [Thread-197834] [transport.py] [_log()] client lang: <none>
2026-02-15T04:21:13.682 [DEBUG] [Thread-197834] [transport.py] [_log()] server lang: <none>
2026-02-15T04:21:13.682 [DEBUG] [Thread-197834] [transport.py] [_log()] kex follows: False
2026-02-15T04:21:13.682 [DEBUG] [Thread-197834] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:21:13.682 [DEBUG] [Thread-197834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:21:13.682 [DEBUG] [Thread-197834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:21:13.682 [DEBUG] [Thread-197834] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:21:13.682 [DEBUG] [Thread-197834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:21:13.682 [DEBUG] [Thread-197834] [transport.py] [_log()] Compression: none
2026-02-15T04:21:13.682 [DEBUG] [Thread-197834] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:21:13.700 [DEBUG] [Thread-197834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:21:13.701 [DEBUG] [Thread-197834] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:21:13.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:21:13.702 [DEBUG] [Thread-197834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:21:13.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:21:13.703 [DEBUG] [Thread-197834] [transport.py] [_log()] userauth is OK
2026-02-15T04:21:13.704 [DEBUG] [Thread-197834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:21:13.704 [DEBUG] [Thread-197834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:21:13.704 [DEBUG] [Thread-197834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:21:13.704 [DEBUG] [Thread-197834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:21:13.725 [INFO] [Thread-197834] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:21:13.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:21:14.347 [DEBUG] [Thread-197834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:21:14.348 [DEBUG] [Thread-197834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:21:14.348 [DEBUG] [Thread-197834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:21:14.389 [DEBUG] [Thread-197834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:21:14.389 [DEBUG] [Thread-197834] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:21:14.392 [DEBUG] [Thread-197834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:21:14.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:21:14.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:21:14.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:21:14.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:21:14.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:21:14.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:21:14.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:21:14.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:21:14.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:21:14.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.097674 -999.00   +5.50  20.17     95   +4.90 1 3 1 3 1     0    0 0.59 -5.15 ----- 20.2 20.2 156.4 32.8 6.9 -6.2 6.7 -5.0 6.5 -5.3 6.8 -5.5
2026-02-15T04:21:14.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:21:14.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:21:14.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.097674
2026-02-15T04:21:14.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:21:14.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:21:14.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:21:14.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:21:14.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:21:14.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:20:55', tmtdew=0.44, humidity=96.85, cloud=0.0, wind=32.15, temperature=5.67, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:20:39.034', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:21:14.420 [DEBUG] [Thread-197834] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:21:14.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-15T04:21:14.515 [DEBUG] [Thread-197837] [transport.py] [_log()] starting thread (client mode): 0xa2d87670
2026-02-15T04:21:14.515 [DEBUG] [Thread-197837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:21:14.529 [DEBUG] [Thread-197837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:21:14.529 [INFO] [Thread-197837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:21:14.537 [DEBUG] [Thread-197837] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:21:14.537 [DEBUG] [Thread-197837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:21:14.537 [DEBUG] [Thread-197837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:21:14.537 [DEBUG] [Thread-197837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:21:14.537 [DEBUG] [Thread-197837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:21:14.537 [DEBUG] [Thread-197837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:21:14.537 [DEBUG] [Thread-197837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:21:14.537 [DEBUG] [Thread-197837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:21:14.537 [DEBUG] [Thread-197837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:21:14.537 [DEBUG] [Thread-197837] [transport.py] [_log()] client lang: <none>
2026-02-15T04:21:14.537 [DEBUG] [Thread-197837] [transport.py] [_log()] server lang: <none>
2026-02-15T04:21:14.537 [DEBUG] [Thread-197837] [transport.py] [_log()] kex follows: False
2026-02-15T04:21:14.537 [DEBUG] [Thread-197837] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:21:14.537 [DEBUG] [Thread-197837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:21:14.538 [DEBUG] [Thread-197837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:21:14.538 [DEBUG] [Thread-197837] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:21:14.538 [DEBUG] [Thread-197837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:21:14.538 [DEBUG] [Thread-197837] [transport.py] [_log()] Compression: none
2026-02-15T04:21:14.538 [DEBUG] [Thread-197837] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:21:14.598 [DEBUG] [Thread-197837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:21:14.598 [DEBUG] [Thread-197837] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:21:14.608 [DEBUG] [Thread-197837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:21:14.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:21:14.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:21:14.653 [DEBUG] [Thread-197837] [transport.py] [_log()] userauth is OK
2026-02-15T04:21:14.653 [DEBUG] [Thread-197837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:21:14.653 [DEBUG] [Thread-197837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:21:14.653 [DEBUG] [Thread-197837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:21:14.653 [DEBUG] [Thread-197837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:21:14.667 [INFO] [Thread-197837] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:21:14.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-15T04:21:14.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:21:15.477 [DEBUG] [Thread-197837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:21:15.478 [DEBUG] [Thread-197837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:21:15.525 [DEBUG] [Thread-197837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:21:15.526 [DEBUG] [Thread-197837] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:21:15.535 [DEBUG] [Thread-197837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:21:15.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:21:15.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T04:21:15.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-15T04:21:15.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:21:15.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:21:15.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:21:15.572 [DEBUG] [Thread-197837] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:21:24.136 [DEBUG] [Thread-197839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:21:27.005 [DEBUG] [Thread-197840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:21:42.045 [DEBUG] [Thread-197841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:21:45.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:21:45.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:21:45.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-15T04:21:47.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 21, 30), 0.44, 96.84, 0.0, 29.91, 5.66, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:21:47.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:21:30
2026-02-15T04:21:47.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:21:48.032 [DEBUG] [Thread-197842] [transport.py] [_log()] starting thread (client mode): 0xa2d86290
2026-02-15T04:21:48.032 [DEBUG] [Thread-197842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:21:48.052 [DEBUG] [Thread-197842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:21:48.052 [INFO] [Thread-197842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:21:48.055 [DEBUG] [Thread-197842] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:21:48.056 [DEBUG] [Thread-197842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:21:48.056 [DEBUG] [Thread-197842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:21:48.056 [DEBUG] [Thread-197842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:21:48.056 [DEBUG] [Thread-197842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:21:48.056 [DEBUG] [Thread-197842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:21:48.056 [DEBUG] [Thread-197842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:21:48.056 [DEBUG] [Thread-197842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:21:48.056 [DEBUG] [Thread-197842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:21:48.056 [DEBUG] [Thread-197842] [transport.py] [_log()] client lang: <none>
2026-02-15T04:21:48.056 [DEBUG] [Thread-197842] [transport.py] [_log()] server lang: <none>
2026-02-15T04:21:48.056 [DEBUG] [Thread-197842] [transport.py] [_log()] kex follows: False
2026-02-15T04:21:48.056 [DEBUG] [Thread-197842] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:21:48.056 [DEBUG] [Thread-197842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:21:48.056 [DEBUG] [Thread-197842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:21:48.056 [DEBUG] [Thread-197842] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:21:48.056 [DEBUG] [Thread-197842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:21:48.056 [DEBUG] [Thread-197842] [transport.py] [_log()] Compression: none
2026-02-15T04:21:48.056 [DEBUG] [Thread-197842] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:21:48.073 [DEBUG] [Thread-197842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:21:48.073 [DEBUG] [Thread-197842] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:21:48.074 [DEBUG] [Thread-197842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:21:48.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:21:48.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:21:48.076 [DEBUG] [Thread-197842] [transport.py] [_log()] userauth is OK
2026-02-15T04:21:48.076 [DEBUG] [Thread-197842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:21:48.077 [DEBUG] [Thread-197842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:21:48.077 [DEBUG] [Thread-197842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:21:48.077 [DEBUG] [Thread-197842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:21:48.100 [INFO] [Thread-197842] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:21:48.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:21:48.745 [DEBUG] [Thread-197842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:21:48.746 [DEBUG] [Thread-197842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:21:48.746 [DEBUG] [Thread-197842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:21:48.786 [DEBUG] [Thread-197842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:21:48.787 [DEBUG] [Thread-197842] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:21:48.790 [DEBUG] [Thread-197842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:21:48.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:21:48.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:21:48.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:21:48.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:21:48.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:21:48.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:21:48.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:21:48.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:21:48.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:21:48.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.098021 -999.00   +5.50  22.81     95   +4.90 1 3 1 3 1     0    0 0.55 -5.55 ----- 22.8 22.8 163.4 29.3 6.9 -4.5 6.7 -4.6 6.5 -4.9 6.9 -5.1
2026-02-15T04:21:48.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:21:48.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:21:48.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.098021
2026-02-15T04:21:48.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:21:48.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:21:48.818 [DEBUG] [Thread-197842] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:21:48.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:21:48.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:21:48.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:21:48.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:21:30', tmtdew=0.44, humidity=96.84, cloud=0.0, wind=29.91, temperature=5.66, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:21:09.014', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:21:48.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-15T04:21:48.915 [DEBUG] [Thread-197845] [transport.py] [_log()] starting thread (client mode): 0xa2d85c90
2026-02-15T04:21:48.916 [DEBUG] [Thread-197845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:21:48.930 [DEBUG] [Thread-197845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:21:48.931 [INFO] [Thread-197845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:21:48.938 [DEBUG] [Thread-197845] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:21:48.938 [DEBUG] [Thread-197845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:21:48.939 [DEBUG] [Thread-197845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:21:48.939 [DEBUG] [Thread-197845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:21:48.939 [DEBUG] [Thread-197845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:21:48.939 [DEBUG] [Thread-197845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:21:48.939 [DEBUG] [Thread-197845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:21:48.939 [DEBUG] [Thread-197845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:21:48.939 [DEBUG] [Thread-197845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:21:48.939 [DEBUG] [Thread-197845] [transport.py] [_log()] client lang: <none>
2026-02-15T04:21:48.939 [DEBUG] [Thread-197845] [transport.py] [_log()] server lang: <none>
2026-02-15T04:21:48.939 [DEBUG] [Thread-197845] [transport.py] [_log()] kex follows: False
2026-02-15T04:21:48.939 [DEBUG] [Thread-197845] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:21:48.939 [DEBUG] [Thread-197845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:21:48.939 [DEBUG] [Thread-197845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:21:48.939 [DEBUG] [Thread-197845] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:21:48.939 [DEBUG] [Thread-197845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:21:48.939 [DEBUG] [Thread-197845] [transport.py] [_log()] Compression: none
2026-02-15T04:21:48.939 [DEBUG] [Thread-197845] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:21:48.996 [DEBUG] [Thread-197845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:21:48.997 [DEBUG] [Thread-197845] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:21:48.997 [DEBUG] [Thread-197845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:21:48.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:21:48.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:21:49.052 [DEBUG] [Thread-197845] [transport.py] [_log()] userauth is OK
2026-02-15T04:21:49.053 [DEBUG] [Thread-197845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:21:49.053 [DEBUG] [Thread-197845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:21:49.053 [DEBUG] [Thread-197845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:21:49.053 [DEBUG] [Thread-197845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:21:49.072 [INFO] [Thread-197845] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:21:49.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-15T04:21:49.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:21:49.900 [DEBUG] [Thread-197845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:21:49.900 [DEBUG] [Thread-197845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:21:49.949 [DEBUG] [Thread-197845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:21:49.949 [DEBUG] [Thread-197845] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:21:49.958 [DEBUG] [Thread-197845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:21:49.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:21:49.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-15T04:21:49.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T04:21:49.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:21:49.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:21:49.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:21:49.995 [DEBUG] [Thread-197845] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:21:57.080 [DEBUG] [Thread-197847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:22:07.614 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:22:07.615 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:22:12.134 [DEBUG] [Thread-197848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:22:20.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:22:20.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:22:20.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-15T04:22:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 22, 5), 0.45, 96.79, 0.0, 29.4, 5.62, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:22:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:22:05
2026-02-15T04:22:22.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:22:22.435 [DEBUG] [Thread-197849] [transport.py] [_log()] starting thread (client mode): 0xa57d7a60
2026-02-15T04:22:22.435 [DEBUG] [Thread-197849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:22:22.454 [DEBUG] [Thread-197849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:22:22.454 [INFO] [Thread-197849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:22:22.458 [DEBUG] [Thread-197849] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:22:22.458 [DEBUG] [Thread-197849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:22:22.458 [DEBUG] [Thread-197849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:22:22.458 [DEBUG] [Thread-197849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:22:22.458 [DEBUG] [Thread-197849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:22:22.458 [DEBUG] [Thread-197849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:22:22.458 [DEBUG] [Thread-197849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:22:22.458 [DEBUG] [Thread-197849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:22:22.458 [DEBUG] [Thread-197849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:22:22.458 [DEBUG] [Thread-197849] [transport.py] [_log()] client lang: <none>
2026-02-15T04:22:22.458 [DEBUG] [Thread-197849] [transport.py] [_log()] server lang: <none>
2026-02-15T04:22:22.458 [DEBUG] [Thread-197849] [transport.py] [_log()] kex follows: False
2026-02-15T04:22:22.458 [DEBUG] [Thread-197849] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:22:22.458 [DEBUG] [Thread-197849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:22:22.458 [DEBUG] [Thread-197849] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:22:22.458 [DEBUG] [Thread-197849] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:22:22.458 [DEBUG] [Thread-197849] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:22:22.458 [DEBUG] [Thread-197849] [transport.py] [_log()] Compression: none
2026-02-15T04:22:22.458 [DEBUG] [Thread-197849] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:22:22.475 [DEBUG] [Thread-197849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:22:22.476 [DEBUG] [Thread-197849] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:22:22.476 [DEBUG] [Thread-197849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:22:22.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:22:22.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:22:22.479 [DEBUG] [Thread-197849] [transport.py] [_log()] userauth is OK
2026-02-15T04:22:22.479 [DEBUG] [Thread-197849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:22:22.479 [DEBUG] [Thread-197849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:22:22.479 [DEBUG] [Thread-197849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:22:22.479 [DEBUG] [Thread-197849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:22:22.501 [INFO] [Thread-197849] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:22:22.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:22:23.144 [DEBUG] [Thread-197849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:22:23.145 [DEBUG] [Thread-197849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:22:23.145 [DEBUG] [Thread-197849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:22:23.186 [DEBUG] [Thread-197849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:22:23.186 [DEBUG] [Thread-197849] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:22:23.190 [DEBUG] [Thread-197849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:22:23.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:22:23.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:22:23.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:22:23.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:22:23.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:22:23.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:22:23.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:22:23.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:22:23.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:22:23.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.098369 -999.00   +5.50  22.26     95   +4.90 1 3 1 3 1     0    0 0.57 -5.30 ----- 22.3 22.3 147.7 27.8 6.9 -4.1 6.7 -3.9 6.5 -4.0 6.9 -4.2
2026-02-15T04:22:23.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:22:23.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:22:23.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.098369
2026-02-15T04:22:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:22:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:22:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:22:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:22:23.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:22:23.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:22:05', tmtdew=0.45, humidity=96.79, cloud=0.0, wind=29.4, temperature=5.62, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:21:39.082', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:22:23.214 [DEBUG] [Thread-197849] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:22:23.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T04:22:23.310 [DEBUG] [Thread-197852] [transport.py] [_log()] starting thread (client mode): 0xa2d54190
2026-02-15T04:22:23.310 [DEBUG] [Thread-197852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:22:23.325 [DEBUG] [Thread-197852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:22:23.325 [INFO] [Thread-197852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:22:23.332 [DEBUG] [Thread-197852] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:22:23.332 [DEBUG] [Thread-197852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:22:23.333 [DEBUG] [Thread-197852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:22:23.333 [DEBUG] [Thread-197852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:22:23.333 [DEBUG] [Thread-197852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:22:23.333 [DEBUG] [Thread-197852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:22:23.333 [DEBUG] [Thread-197852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:22:23.333 [DEBUG] [Thread-197852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:22:23.334 [DEBUG] [Thread-197852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:22:23.334 [DEBUG] [Thread-197852] [transport.py] [_log()] client lang: <none>
2026-02-15T04:22:23.334 [DEBUG] [Thread-197852] [transport.py] [_log()] server lang: <none>
2026-02-15T04:22:23.334 [DEBUG] [Thread-197852] [transport.py] [_log()] kex follows: False
2026-02-15T04:22:23.334 [DEBUG] [Thread-197852] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:22:23.334 [DEBUG] [Thread-197852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:22:23.334 [DEBUG] [Thread-197852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:22:23.334 [DEBUG] [Thread-197852] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:22:23.334 [DEBUG] [Thread-197852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:22:23.334 [DEBUG] [Thread-197852] [transport.py] [_log()] Compression: none
2026-02-15T04:22:23.334 [DEBUG] [Thread-197852] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:22:23.392 [DEBUG] [Thread-197852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:22:23.392 [DEBUG] [Thread-197852] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:22:23.393 [DEBUG] [Thread-197852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:22:23.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:22:23.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:22:23.455 [DEBUG] [Thread-197852] [transport.py] [_log()] userauth is OK
2026-02-15T04:22:23.455 [DEBUG] [Thread-197852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:22:23.455 [DEBUG] [Thread-197852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:22:23.455 [DEBUG] [Thread-197852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:22:23.455 [DEBUG] [Thread-197852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:22:23.476 [INFO] [Thread-197852] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:22:23.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-15T04:22:23.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:22:24.200 [DEBUG] [Thread-197854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:22:24.289 [DEBUG] [Thread-197852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:22:24.289 [DEBUG] [Thread-197852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:22:24.337 [DEBUG] [Thread-197852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:22:24.337 [DEBUG] [Thread-197852] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:22:24.346 [DEBUG] [Thread-197852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:22:24.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:22:24.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-15T04:22:24.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-15T04:22:24.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:22:24.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:22:24.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:22:24.380 [DEBUG] [Thread-197852] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:22:27.170 [DEBUG] [Thread-197855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:22:42.232 [DEBUG] [Thread-197856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:22:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:22:54.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:22:54.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-15T04:22:56.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 22, 42), 0.78, 94.71, 0.0, 34.37, 5.98, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:22:56.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:22:42
2026-02-15T04:22:56.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:22:56.693 [DEBUG] [Thread-197857] [transport.py] [_log()] starting thread (client mode): 0xa2d55ae0
2026-02-15T04:22:56.693 [DEBUG] [Thread-197857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:22:56.712 [DEBUG] [Thread-197857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:22:56.713 [INFO] [Thread-197857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:22:56.714 [DEBUG] [Thread-197857] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:22:56.714 [DEBUG] [Thread-197857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:22:56.714 [DEBUG] [Thread-197857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:22:56.715 [DEBUG] [Thread-197857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:22:56.715 [DEBUG] [Thread-197857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:22:56.715 [DEBUG] [Thread-197857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:22:56.715 [DEBUG] [Thread-197857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:22:56.715 [DEBUG] [Thread-197857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:22:56.715 [DEBUG] [Thread-197857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:22:56.715 [DEBUG] [Thread-197857] [transport.py] [_log()] client lang: <none>
2026-02-15T04:22:56.715 [DEBUG] [Thread-197857] [transport.py] [_log()] server lang: <none>
2026-02-15T04:22:56.715 [DEBUG] [Thread-197857] [transport.py] [_log()] kex follows: False
2026-02-15T04:22:56.715 [DEBUG] [Thread-197857] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:22:56.715 [DEBUG] [Thread-197857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:22:56.715 [DEBUG] [Thread-197857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:22:56.715 [DEBUG] [Thread-197857] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:22:56.715 [DEBUG] [Thread-197857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:22:56.715 [DEBUG] [Thread-197857] [transport.py] [_log()] Compression: none
2026-02-15T04:22:56.715 [DEBUG] [Thread-197857] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:22:56.728 [DEBUG] [Thread-197857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:22:56.729 [DEBUG] [Thread-197857] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:22:56.729 [DEBUG] [Thread-197857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:22:56.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:22:56.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:22:56.731 [DEBUG] [Thread-197857] [transport.py] [_log()] userauth is OK
2026-02-15T04:22:56.731 [DEBUG] [Thread-197857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:22:56.731 [DEBUG] [Thread-197857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:22:56.731 [DEBUG] [Thread-197857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:22:56.732 [DEBUG] [Thread-197857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:22:56.756 [INFO] [Thread-197857] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:22:56.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:22:57.269 [DEBUG] [Thread-197859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:22:57.403 [DEBUG] [Thread-197857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:22:57.404 [DEBUG] [Thread-197857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:22:57.404 [DEBUG] [Thread-197857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:22:57.445 [DEBUG] [Thread-197857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:22:57.446 [DEBUG] [Thread-197857] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:22:57.449 [DEBUG] [Thread-197857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:22:57.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:22:57.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:22:57.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:22:57.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:22:57.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:22:57.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:22:57.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:22:57.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:22:57.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:22:57.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.098716 -999.00   +5.50  22.05     95   +4.90 1 3 1 3 1     0    0 0.56 -5.48 ----- 22.1 22.1 159.0 30.6 7.0 -4.9 6.7 -4.5 6.5 -4.6 6.9 -4.7
2026-02-15T04:22:57.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:22:57.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:22:57.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.098716
2026-02-15T04:22:57.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:22:57.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:22:57.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:22:57.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:22:57.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:22:57.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:22:42', tmtdew=0.78, humidity=94.71, cloud=0.0, wind=34.37, temperature=5.98, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:22:09.062', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:22:57.477 [DEBUG] [Thread-197857] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:22:57.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-15T04:22:57.572 [DEBUG] [Thread-197861] [transport.py] [_log()] starting thread (client mode): 0xa57716c0
2026-02-15T04:22:57.573 [DEBUG] [Thread-197861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:22:57.587 [DEBUG] [Thread-197861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:22:57.587 [INFO] [Thread-197861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:22:57.595 [DEBUG] [Thread-197861] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:22:57.595 [DEBUG] [Thread-197861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:22:57.595 [DEBUG] [Thread-197861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:22:57.595 [DEBUG] [Thread-197861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:22:57.595 [DEBUG] [Thread-197861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:22:57.595 [DEBUG] [Thread-197861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:22:57.595 [DEBUG] [Thread-197861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:22:57.596 [DEBUG] [Thread-197861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:22:57.596 [DEBUG] [Thread-197861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:22:57.596 [DEBUG] [Thread-197861] [transport.py] [_log()] client lang: <none>
2026-02-15T04:22:57.596 [DEBUG] [Thread-197861] [transport.py] [_log()] server lang: <none>
2026-02-15T04:22:57.596 [DEBUG] [Thread-197861] [transport.py] [_log()] kex follows: False
2026-02-15T04:22:57.596 [DEBUG] [Thread-197861] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:22:57.596 [DEBUG] [Thread-197861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:22:57.596 [DEBUG] [Thread-197861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:22:57.596 [DEBUG] [Thread-197861] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:22:57.596 [DEBUG] [Thread-197861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:22:57.596 [DEBUG] [Thread-197861] [transport.py] [_log()] Compression: none
2026-02-15T04:22:57.596 [DEBUG] [Thread-197861] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:22:57.658 [DEBUG] [Thread-197861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:22:57.659 [DEBUG] [Thread-197861] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:22:57.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:22:57.660 [DEBUG] [Thread-197861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:22:57.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:22:57.714 [DEBUG] [Thread-197861] [transport.py] [_log()] userauth is OK
2026-02-15T04:22:57.715 [DEBUG] [Thread-197861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:22:57.715 [DEBUG] [Thread-197861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:22:57.715 [DEBUG] [Thread-197861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:22:57.715 [DEBUG] [Thread-197861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:22:57.733 [INFO] [Thread-197861] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:22:57.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-15T04:22:57.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:22:58.533 [DEBUG] [Thread-197861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:22:58.533 [DEBUG] [Thread-197861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:22:58.580 [DEBUG] [Thread-197861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:22:58.580 [DEBUG] [Thread-197861] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:22:58.590 [DEBUG] [Thread-197861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:22:58.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:22:58.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T04:22:58.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-15T04:22:58.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:22:58.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:22:58.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:22:58.626 [DEBUG] [Thread-197861] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:23:07.816 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:23:07.818 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:23:12.305 [DEBUG] [Thread-197863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:23:24.261 [DEBUG] [Thread-197864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:23:27.366 [DEBUG] [Thread-197865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:23:28.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:23:28.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:23:28.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-15T04:23:30.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 23, 17), 0.44, 96.87, 0.0, 30.61, 5.62, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:23:30.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:23:17
2026-02-15T04:23:30.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:23:31.029 [DEBUG] [Thread-197866] [transport.py] [_log()] starting thread (client mode): 0xa2d86e90
2026-02-15T04:23:31.029 [DEBUG] [Thread-197866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:23:31.049 [DEBUG] [Thread-197866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:23:31.050 [INFO] [Thread-197866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:23:31.051 [DEBUG] [Thread-197866] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:23:31.051 [DEBUG] [Thread-197866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:23:31.051 [DEBUG] [Thread-197866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:23:31.051 [DEBUG] [Thread-197866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:23:31.051 [DEBUG] [Thread-197866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:23:31.051 [DEBUG] [Thread-197866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:23:31.051 [DEBUG] [Thread-197866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:23:31.051 [DEBUG] [Thread-197866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:23:31.051 [DEBUG] [Thread-197866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:23:31.051 [DEBUG] [Thread-197866] [transport.py] [_log()] client lang: <none>
2026-02-15T04:23:31.051 [DEBUG] [Thread-197866] [transport.py] [_log()] server lang: <none>
2026-02-15T04:23:31.051 [DEBUG] [Thread-197866] [transport.py] [_log()] kex follows: False
2026-02-15T04:23:31.052 [DEBUG] [Thread-197866] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:23:31.052 [DEBUG] [Thread-197866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:23:31.052 [DEBUG] [Thread-197866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:23:31.052 [DEBUG] [Thread-197866] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:23:31.052 [DEBUG] [Thread-197866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:23:31.052 [DEBUG] [Thread-197866] [transport.py] [_log()] Compression: none
2026-02-15T04:23:31.052 [DEBUG] [Thread-197866] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:23:31.071 [DEBUG] [Thread-197866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:23:31.072 [DEBUG] [Thread-197866] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:23:31.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:23:31.073 [DEBUG] [Thread-197866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:23:31.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:23:31.075 [DEBUG] [Thread-197866] [transport.py] [_log()] userauth is OK
2026-02-15T04:23:31.075 [DEBUG] [Thread-197866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:23:31.075 [DEBUG] [Thread-197866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:23:31.075 [DEBUG] [Thread-197866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:23:31.075 [DEBUG] [Thread-197866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:23:31.097 [INFO] [Thread-197866] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:23:31.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:23:31.824 [DEBUG] [Thread-197866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:23:31.824 [DEBUG] [Thread-197866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:23:31.824 [DEBUG] [Thread-197866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:23:31.866 [DEBUG] [Thread-197866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:23:31.866 [DEBUG] [Thread-197866] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:23:31.868 [DEBUG] [Thread-197866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:23:31.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:23:31.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:23:31.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:23:31.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:23:31.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:23:31.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:23:31.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:23:31.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:23:31.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:23:31.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.099063 -999.00   +5.50  22.23     95   +4.90 1 3 1 3 1     0    0 0.53 -5.82 ----- 22.2 22.2 148.4 28.9 6.9 -5.8 6.7 -5.5 6.5 -5.7 6.9 -6.0
2026-02-15T04:23:31.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:23:31.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:23:31.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.099063
2026-02-15T04:23:31.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:23:31.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:23:31.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:23:31.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:23:31.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:23:31.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:23:17', tmtdew=0.44, humidity=96.87, cloud=0.0, wind=30.61, temperature=5.62, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:22:39.043', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:23:31.888 [DEBUG] [Thread-197866] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:23:31.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-15T04:23:31.974 [DEBUG] [Thread-197869] [transport.py] [_log()] starting thread (client mode): 0xa2d12e00
2026-02-15T04:23:31.974 [DEBUG] [Thread-197869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:23:31.989 [DEBUG] [Thread-197869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:23:31.989 [INFO] [Thread-197869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:23:31.997 [DEBUG] [Thread-197869] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:23:31.997 [DEBUG] [Thread-197869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:23:31.997 [DEBUG] [Thread-197869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:23:31.997 [DEBUG] [Thread-197869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:23:31.997 [DEBUG] [Thread-197869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:23:31.997 [DEBUG] [Thread-197869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:23:31.997 [DEBUG] [Thread-197869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:23:31.997 [DEBUG] [Thread-197869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:23:31.997 [DEBUG] [Thread-197869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:23:31.997 [DEBUG] [Thread-197869] [transport.py] [_log()] client lang: <none>
2026-02-15T04:23:31.997 [DEBUG] [Thread-197869] [transport.py] [_log()] server lang: <none>
2026-02-15T04:23:31.997 [DEBUG] [Thread-197869] [transport.py] [_log()] kex follows: False
2026-02-15T04:23:31.997 [DEBUG] [Thread-197869] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:23:31.997 [DEBUG] [Thread-197869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:23:31.997 [DEBUG] [Thread-197869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:23:31.997 [DEBUG] [Thread-197869] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:23:31.997 [DEBUG] [Thread-197869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:23:31.998 [DEBUG] [Thread-197869] [transport.py] [_log()] Compression: none
2026-02-15T04:23:31.998 [DEBUG] [Thread-197869] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:23:32.056 [DEBUG] [Thread-197869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:23:32.056 [DEBUG] [Thread-197869] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:23:32.057 [DEBUG] [Thread-197869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:23:32.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:23:32.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:23:32.114 [DEBUG] [Thread-197869] [transport.py] [_log()] userauth is OK
2026-02-15T04:23:32.114 [DEBUG] [Thread-197869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:23:32.114 [DEBUG] [Thread-197869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:23:32.114 [DEBUG] [Thread-197869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:23:32.114 [DEBUG] [Thread-197869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:23:32.133 [INFO] [Thread-197869] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:23:32.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-15T04:23:32.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:23:32.948 [DEBUG] [Thread-197869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:23:32.948 [DEBUG] [Thread-197869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:23:32.996 [DEBUG] [Thread-197869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:23:32.996 [DEBUG] [Thread-197869] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:23:33.005 [DEBUG] [Thread-197869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:23:33.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:23:33.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')
2026-02-15T04:23:33.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-15T04:23:33.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:23:33.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:23:33.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:23:33.039 [DEBUG] [Thread-197869] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:23:42.399 [DEBUG] [Thread-197871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:23:57.452 [DEBUG] [Thread-197872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:24:03.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:24:03.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:24:03.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T04:24:05.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 23, 53), 0.44, 96.87, 0.0, 31.62, 5.66, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:24:05.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:23:53
2026-02-15T04:24:05.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:24:05.614 [DEBUG] [Thread-197873] [transport.py] [_log()] starting thread (client mode): 0xa57721d0
2026-02-15T04:24:05.614 [DEBUG] [Thread-197873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:24:05.635 [DEBUG] [Thread-197873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:24:05.635 [INFO] [Thread-197873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:24:05.638 [DEBUG] [Thread-197873] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:24:05.638 [DEBUG] [Thread-197873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:24:05.638 [DEBUG] [Thread-197873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:24:05.638 [DEBUG] [Thread-197873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:24:05.638 [DEBUG] [Thread-197873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:24:05.638 [DEBUG] [Thread-197873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:24:05.638 [DEBUG] [Thread-197873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:24:05.638 [DEBUG] [Thread-197873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:24:05.639 [DEBUG] [Thread-197873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:24:05.639 [DEBUG] [Thread-197873] [transport.py] [_log()] client lang: <none>
2026-02-15T04:24:05.639 [DEBUG] [Thread-197873] [transport.py] [_log()] server lang: <none>
2026-02-15T04:24:05.639 [DEBUG] [Thread-197873] [transport.py] [_log()] kex follows: False
2026-02-15T04:24:05.639 [DEBUG] [Thread-197873] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:24:05.639 [DEBUG] [Thread-197873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:24:05.639 [DEBUG] [Thread-197873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:24:05.639 [DEBUG] [Thread-197873] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:24:05.639 [DEBUG] [Thread-197873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:24:05.639 [DEBUG] [Thread-197873] [transport.py] [_log()] Compression: none
2026-02-15T04:24:05.639 [DEBUG] [Thread-197873] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:24:05.658 [DEBUG] [Thread-197873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:24:05.658 [DEBUG] [Thread-197873] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:24:05.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:24:05.660 [DEBUG] [Thread-197873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:24:05.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:24:05.662 [DEBUG] [Thread-197873] [transport.py] [_log()] userauth is OK
2026-02-15T04:24:05.663 [DEBUG] [Thread-197873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:24:05.663 [DEBUG] [Thread-197873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:24:05.663 [DEBUG] [Thread-197873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:24:05.663 [DEBUG] [Thread-197873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:24:05.687 [INFO] [Thread-197873] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:24:05.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:24:06.333 [DEBUG] [Thread-197873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:24:06.333 [DEBUG] [Thread-197873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:24:06.334 [DEBUG] [Thread-197873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:24:06.374 [DEBUG] [Thread-197873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:24:06.375 [DEBUG] [Thread-197873] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:24:06.378 [DEBUG] [Thread-197873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:24:06.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:24:06.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:24:06.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:24:06.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:24:06.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:24:06.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:24:06.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:24:06.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:24:06.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:24:06.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.099757 -999.00   +5.50  24.36     95   +4.90 1 3 1 3 1     0    0 0.52 -6.33 ----- 24.4 24.4 143.6 33.2 7.0 -3.4 6.7 -4.3 6.5 -4.3 7.0 -4.5
2026-02-15T04:24:06.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:24:06.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:24:06.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.099757
2026-02-15T04:24:06.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:24:06.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:24:06.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:24:06.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:24:06.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:24:06.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:23:53', tmtdew=0.44, humidity=96.87, cloud=0.0, wind=31.62, temperature=5.66, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:23:39.005', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:24:06.405 [DEBUG] [Thread-197873] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:24:06.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-15T04:24:06.502 [DEBUG] [Thread-197876] [transport.py] [_log()] starting thread (client mode): 0xa5770760
2026-02-15T04:24:06.502 [DEBUG] [Thread-197876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:24:06.517 [DEBUG] [Thread-197876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:24:06.517 [INFO] [Thread-197876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:24:06.524 [DEBUG] [Thread-197876] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:24:06.525 [DEBUG] [Thread-197876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:24:06.525 [DEBUG] [Thread-197876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:24:06.525 [DEBUG] [Thread-197876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:24:06.525 [DEBUG] [Thread-197876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:24:06.525 [DEBUG] [Thread-197876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:24:06.525 [DEBUG] [Thread-197876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:24:06.525 [DEBUG] [Thread-197876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:24:06.525 [DEBUG] [Thread-197876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:24:06.525 [DEBUG] [Thread-197876] [transport.py] [_log()] client lang: <none>
2026-02-15T04:24:06.525 [DEBUG] [Thread-197876] [transport.py] [_log()] server lang: <none>
2026-02-15T04:24:06.525 [DEBUG] [Thread-197876] [transport.py] [_log()] kex follows: False
2026-02-15T04:24:06.525 [DEBUG] [Thread-197876] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:24:06.525 [DEBUG] [Thread-197876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:24:06.525 [DEBUG] [Thread-197876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:24:06.525 [DEBUG] [Thread-197876] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:24:06.526 [DEBUG] [Thread-197876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:24:06.526 [DEBUG] [Thread-197876] [transport.py] [_log()] Compression: none
2026-02-15T04:24:06.526 [DEBUG] [Thread-197876] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:24:06.584 [DEBUG] [Thread-197876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:24:06.585 [DEBUG] [Thread-197876] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:24:06.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:24:06.586 [DEBUG] [Thread-197876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:24:06.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:24:06.641 [DEBUG] [Thread-197876] [transport.py] [_log()] userauth is OK
2026-02-15T04:24:06.641 [DEBUG] [Thread-197876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:24:06.641 [DEBUG] [Thread-197876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:24:06.641 [DEBUG] [Thread-197876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:24:06.641 [DEBUG] [Thread-197876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:24:06.660 [INFO] [Thread-197876] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:24:06.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-15T04:24:06.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:24:07.511 [DEBUG] [Thread-197876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:24:07.511 [DEBUG] [Thread-197876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:24:07.559 [DEBUG] [Thread-197876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:24:07.560 [DEBUG] [Thread-197876] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:24:07.570 [DEBUG] [Thread-197876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:24:07.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:24:07.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-15T04:24:07.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-15T04:24:07.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:24:07.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:24:07.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:24:07.613 [DEBUG] [Thread-197876] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:24:08.019 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:24:08.020 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:24:12.492 [DEBUG] [Thread-197878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:24:24.319 [DEBUG] [Thread-197879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:24:27.544 [DEBUG] [Thread-197880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:24:37.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:24:37.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:24:37.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-15T04:24:40.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 24, 28), 0.44, 96.85, 0.0, 31.32, 5.64, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:24:40.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:24:28
2026-02-15T04:24:40.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:24:40.928 [DEBUG] [Thread-197881] [transport.py] [_log()] starting thread (client mode): 0xa2d54190
2026-02-15T04:24:40.928 [DEBUG] [Thread-197881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:24:40.947 [DEBUG] [Thread-197881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:24:40.948 [INFO] [Thread-197881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:24:40.951 [DEBUG] [Thread-197881] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:24:40.951 [DEBUG] [Thread-197881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:24:40.951 [DEBUG] [Thread-197881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:24:40.951 [DEBUG] [Thread-197881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:24:40.951 [DEBUG] [Thread-197881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:24:40.951 [DEBUG] [Thread-197881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:24:40.951 [DEBUG] [Thread-197881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:24:40.951 [DEBUG] [Thread-197881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:24:40.951 [DEBUG] [Thread-197881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:24:40.951 [DEBUG] [Thread-197881] [transport.py] [_log()] client lang: <none>
2026-02-15T04:24:40.951 [DEBUG] [Thread-197881] [transport.py] [_log()] server lang: <none>
2026-02-15T04:24:40.952 [DEBUG] [Thread-197881] [transport.py] [_log()] kex follows: False
2026-02-15T04:24:40.952 [DEBUG] [Thread-197881] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:24:40.952 [DEBUG] [Thread-197881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:24:40.952 [DEBUG] [Thread-197881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:24:40.952 [DEBUG] [Thread-197881] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:24:40.952 [DEBUG] [Thread-197881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:24:40.952 [DEBUG] [Thread-197881] [transport.py] [_log()] Compression: none
2026-02-15T04:24:40.952 [DEBUG] [Thread-197881] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:24:40.974 [DEBUG] [Thread-197881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:24:40.975 [DEBUG] [Thread-197881] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:24:40.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:24:40.976 [DEBUG] [Thread-197881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:24:40.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:24:40.979 [DEBUG] [Thread-197881] [transport.py] [_log()] userauth is OK
2026-02-15T04:24:40.979 [DEBUG] [Thread-197881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:24:40.979 [DEBUG] [Thread-197881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:24:40.979 [DEBUG] [Thread-197881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:24:40.979 [DEBUG] [Thread-197881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:24:41.000 [INFO] [Thread-197881] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:24:41.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:24:41.652 [DEBUG] [Thread-197881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:24:41.653 [DEBUG] [Thread-197881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:24:41.653 [DEBUG] [Thread-197881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:24:41.694 [DEBUG] [Thread-197881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:24:41.695 [DEBUG] [Thread-197881] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:24:41.697 [DEBUG] [Thread-197881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:24:41.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:24:41.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:24:41.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:24:41.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:24:41.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:24:41.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:24:41.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:24:41.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:24:41.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:24:41.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.100105 -999.00   +5.50  25.23     95   +4.90 1 3 1 3 1     0    0 0.50 -6.55 ----- 25.2 25.2 152.4 30.4 7.0 -5.6 6.8 -4.1 6.6 -4.6 7.0 -4.8
2026-02-15T04:24:41.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:24:41.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:24:41.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.100105
2026-02-15T04:24:41.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:24:41.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:24:41.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:24:41.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:24:41.723 [DEBUG] [Thread-197881] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:24:41.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:24:41.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:24:28', tmtdew=0.44, humidity=96.85, cloud=0.0, wind=31.32, temperature=5.64, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:24:09.072', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:24:41.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-15T04:24:41.825 [DEBUG] [Thread-197884] [transport.py] [_log()] starting thread (client mode): 0xa5770e50
2026-02-15T04:24:41.825 [DEBUG] [Thread-197884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:24:41.840 [DEBUG] [Thread-197884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:24:41.840 [INFO] [Thread-197884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:24:41.847 [DEBUG] [Thread-197884] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:24:41.847 [DEBUG] [Thread-197884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:24:41.847 [DEBUG] [Thread-197884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:24:41.847 [DEBUG] [Thread-197884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:24:41.847 [DEBUG] [Thread-197884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:24:41.847 [DEBUG] [Thread-197884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:24:41.847 [DEBUG] [Thread-197884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:24:41.847 [DEBUG] [Thread-197884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:24:41.847 [DEBUG] [Thread-197884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:24:41.847 [DEBUG] [Thread-197884] [transport.py] [_log()] client lang: <none>
2026-02-15T04:24:41.847 [DEBUG] [Thread-197884] [transport.py] [_log()] server lang: <none>
2026-02-15T04:24:41.848 [DEBUG] [Thread-197884] [transport.py] [_log()] kex follows: False
2026-02-15T04:24:41.848 [DEBUG] [Thread-197884] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:24:41.848 [DEBUG] [Thread-197884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:24:41.848 [DEBUG] [Thread-197884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:24:41.848 [DEBUG] [Thread-197884] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:24:41.848 [DEBUG] [Thread-197884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:24:41.848 [DEBUG] [Thread-197884] [transport.py] [_log()] Compression: none
2026-02-15T04:24:41.848 [DEBUG] [Thread-197884] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:24:41.906 [DEBUG] [Thread-197884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:24:41.906 [DEBUG] [Thread-197884] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:24:41.906 [DEBUG] [Thread-197884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:24:41.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:24:41.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:24:41.963 [DEBUG] [Thread-197884] [transport.py] [_log()] userauth is OK
2026-02-15T04:24:41.963 [DEBUG] [Thread-197884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:24:41.963 [DEBUG] [Thread-197884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:24:41.963 [DEBUG] [Thread-197884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:24:41.963 [DEBUG] [Thread-197884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:24:41.977 [INFO] [Thread-197884] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:24:41.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-15T04:24:41.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:24:42.580 [DEBUG] [Thread-197886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:24:42.791 [DEBUG] [Thread-197884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:24:42.792 [DEBUG] [Thread-197884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:24:42.840 [DEBUG] [Thread-197884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:24:42.840 [DEBUG] [Thread-197884] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:24:42.850 [DEBUG] [Thread-197884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:24:42.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:24:42.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-15T04:24:42.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-15T04:24:42.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:24:42.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:24:42.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:24:42.885 [DEBUG] [Thread-197884] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:24:57.632 [DEBUG] [Thread-197887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:25:08.222 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:25:08.223 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:25:12.671 [DEBUG] [Thread-197888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:25:12.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:25:12.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:25:12.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T04:25:14.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 25, 4), 0.44, 96.85, 0.0, 31.87, 5.64, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:25:14.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:25:04
2026-02-15T04:25:15.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:25:15.306 [DEBUG] [Thread-197889] [transport.py] [_log()] starting thread (client mode): 0xa57d7760
2026-02-15T04:25:15.306 [DEBUG] [Thread-197889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:25:15.326 [DEBUG] [Thread-197889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:25:15.326 [INFO] [Thread-197889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:25:15.329 [DEBUG] [Thread-197889] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:25:15.329 [DEBUG] [Thread-197889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:25:15.329 [DEBUG] [Thread-197889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:25:15.329 [DEBUG] [Thread-197889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:25:15.329 [DEBUG] [Thread-197889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:25:15.329 [DEBUG] [Thread-197889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:25:15.329 [DEBUG] [Thread-197889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:25:15.329 [DEBUG] [Thread-197889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:25:15.329 [DEBUG] [Thread-197889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:25:15.329 [DEBUG] [Thread-197889] [transport.py] [_log()] client lang: <none>
2026-02-15T04:25:15.329 [DEBUG] [Thread-197889] [transport.py] [_log()] server lang: <none>
2026-02-15T04:25:15.329 [DEBUG] [Thread-197889] [transport.py] [_log()] kex follows: False
2026-02-15T04:25:15.329 [DEBUG] [Thread-197889] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:25:15.329 [DEBUG] [Thread-197889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:25:15.330 [DEBUG] [Thread-197889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:25:15.330 [DEBUG] [Thread-197889] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:25:15.330 [DEBUG] [Thread-197889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:25:15.330 [DEBUG] [Thread-197889] [transport.py] [_log()] Compression: none
2026-02-15T04:25:15.330 [DEBUG] [Thread-197889] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:25:15.346 [DEBUG] [Thread-197889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:25:15.347 [DEBUG] [Thread-197889] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:25:15.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:25:15.348 [DEBUG] [Thread-197889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:25:15.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:25:15.350 [DEBUG] [Thread-197889] [transport.py] [_log()] userauth is OK
2026-02-15T04:25:15.350 [DEBUG] [Thread-197889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:25:15.350 [DEBUG] [Thread-197889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:25:15.350 [DEBUG] [Thread-197889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:25:15.351 [DEBUG] [Thread-197889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:25:15.386 [INFO] [Thread-197889] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:25:15.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:25:18.078 [DEBUG] [Thread-197889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:25:18.078 [DEBUG] [Thread-197889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:25:18.079 [DEBUG] [Thread-197889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:25:18.119 [DEBUG] [Thread-197889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:25:18.120 [DEBUG] [Thread-197889] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:25:18.123 [DEBUG] [Thread-197889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:25:18.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:25:18.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:25:18.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:25:18.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:25:18.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:25:18.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:25:18.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:25:18.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:25:18.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:25:18.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.100452 -999.00   +5.50  19.92     95   +4.90 1 3 1 3 1     0    0 0.49 -6.99 ----- 19.9 19.9 157.4 26.0 7.0 -4.3 6.8 -4.0 6.6 -4.2 7.0 -4.5
2026-02-15T04:25:18.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:25:18.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:25:18.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.100452
2026-02-15T04:25:18.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:25:18.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:25:18.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:25:18.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:25:18.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:25:18.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:25:04', tmtdew=0.44, humidity=96.85, cloud=0.0, wind=31.87, temperature=5.64, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:24:39.053', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:25:18.158 [DEBUG] [Thread-197889] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:25:18.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-15T04:25:18.253 [DEBUG] [Thread-197892] [transport.py] [_log()] starting thread (client mode): 0xa2d11780
2026-02-15T04:25:18.253 [DEBUG] [Thread-197892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:25:18.268 [DEBUG] [Thread-197892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:25:18.268 [INFO] [Thread-197892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:25:18.275 [DEBUG] [Thread-197892] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:25:18.276 [DEBUG] [Thread-197892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:25:18.276 [DEBUG] [Thread-197892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:25:18.276 [DEBUG] [Thread-197892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:25:18.276 [DEBUG] [Thread-197892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:25:18.276 [DEBUG] [Thread-197892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:25:18.276 [DEBUG] [Thread-197892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:25:18.276 [DEBUG] [Thread-197892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:25:18.276 [DEBUG] [Thread-197892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:25:18.276 [DEBUG] [Thread-197892] [transport.py] [_log()] client lang: <none>
2026-02-15T04:25:18.276 [DEBUG] [Thread-197892] [transport.py] [_log()] server lang: <none>
2026-02-15T04:25:18.276 [DEBUG] [Thread-197892] [transport.py] [_log()] kex follows: False
2026-02-15T04:25:18.276 [DEBUG] [Thread-197892] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:25:18.276 [DEBUG] [Thread-197892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:25:18.276 [DEBUG] [Thread-197892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:25:18.276 [DEBUG] [Thread-197892] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:25:18.276 [DEBUG] [Thread-197892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:25:18.277 [DEBUG] [Thread-197892] [transport.py] [_log()] Compression: none
2026-02-15T04:25:18.277 [DEBUG] [Thread-197892] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:25:18.336 [DEBUG] [Thread-197892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:25:18.337 [DEBUG] [Thread-197892] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:25:18.338 [DEBUG] [Thread-197892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:25:18.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:25:18.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:25:18.394 [DEBUG] [Thread-197892] [transport.py] [_log()] userauth is OK
2026-02-15T04:25:18.395 [DEBUG] [Thread-197892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:25:18.395 [DEBUG] [Thread-197892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:25:18.395 [DEBUG] [Thread-197892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:25:18.395 [DEBUG] [Thread-197892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:25:18.414 [INFO] [Thread-197892] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:25:18.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T04:25:18.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:25:19.230 [DEBUG] [Thread-197892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:25:19.231 [DEBUG] [Thread-197892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:25:19.278 [DEBUG] [Thread-197892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:25:19.279 [DEBUG] [Thread-197892] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:25:19.288 [DEBUG] [Thread-197892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:25:19.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:25:19.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-15T04:25:19.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T04:25:19.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:25:19.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:25:19.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:25:19.325 [DEBUG] [Thread-197892] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:25:24.376 [DEBUG] [Thread-197894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:25:27.710 [DEBUG] [Thread-197895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:25:42.761 [DEBUG] [Thread-197896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:25:49.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:25:49.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:25:49.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-15T04:25:51.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 25, 39), 0.77, 94.74, 0.0, 34.82, 6.05, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:25:51.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:25:39
2026-02-15T04:25:51.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:25:51.651 [DEBUG] [Thread-197897] [transport.py] [_log()] starting thread (client mode): 0xa5772140
2026-02-15T04:25:51.651 [DEBUG] [Thread-197897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:25:51.672 [DEBUG] [Thread-197897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:25:51.672 [INFO] [Thread-197897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:25:51.675 [DEBUG] [Thread-197897] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:25:51.675 [DEBUG] [Thread-197897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:25:51.675 [DEBUG] [Thread-197897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:25:51.675 [DEBUG] [Thread-197897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:25:51.675 [DEBUG] [Thread-197897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:25:51.675 [DEBUG] [Thread-197897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:25:51.675 [DEBUG] [Thread-197897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:25:51.675 [DEBUG] [Thread-197897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:25:51.675 [DEBUG] [Thread-197897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:25:51.675 [DEBUG] [Thread-197897] [transport.py] [_log()] client lang: <none>
2026-02-15T04:25:51.675 [DEBUG] [Thread-197897] [transport.py] [_log()] server lang: <none>
2026-02-15T04:25:51.675 [DEBUG] [Thread-197897] [transport.py] [_log()] kex follows: False
2026-02-15T04:25:51.675 [DEBUG] [Thread-197897] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:25:51.675 [DEBUG] [Thread-197897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:25:51.675 [DEBUG] [Thread-197897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:25:51.675 [DEBUG] [Thread-197897] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:25:51.675 [DEBUG] [Thread-197897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:25:51.676 [DEBUG] [Thread-197897] [transport.py] [_log()] Compression: none
2026-02-15T04:25:51.676 [DEBUG] [Thread-197897] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:25:51.693 [DEBUG] [Thread-197897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:25:51.693 [DEBUG] [Thread-197897] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:25:51.694 [DEBUG] [Thread-197897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:25:51.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:25:51.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:25:51.696 [DEBUG] [Thread-197897] [transport.py] [_log()] userauth is OK
2026-02-15T04:25:51.696 [DEBUG] [Thread-197897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:25:51.696 [DEBUG] [Thread-197897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:25:51.696 [DEBUG] [Thread-197897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:25:51.696 [DEBUG] [Thread-197897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:25:51.716 [INFO] [Thread-197897] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:25:51.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:25:52.361 [DEBUG] [Thread-197897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:25:52.362 [DEBUG] [Thread-197897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:25:52.362 [DEBUG] [Thread-197897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:25:52.402 [DEBUG] [Thread-197897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:25:52.403 [DEBUG] [Thread-197897] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:25:52.406 [DEBUG] [Thread-197897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:25:52.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:25:52.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:25:52.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:25:52.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:25:52.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:25:52.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:25:52.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:25:52.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:25:52.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:25:52.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.100799 -999.00   +5.50  21.04     95   +4.90 1 3 1 3 1     0    0 0.49 -7.02 ----- 21.0 21.0 153.8 28.3 7.0 -6.4 6.8 -5.3 6.6 -5.6 7.0 -6.2
2026-02-15T04:25:52.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:25:52.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:25:52.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.100799
2026-02-15T04:25:52.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:25:52.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:25:52.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:25:52.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:25:52.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:25:52.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:25:39', tmtdew=0.77, humidity=94.74, cloud=0.0, wind=34.82, temperature=6.05, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:25:09.034', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:25:52.436 [DEBUG] [Thread-197897] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:25:52.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-15T04:25:52.530 [DEBUG] [Thread-197900] [transport.py] [_log()] starting thread (client mode): 0xa5773220
2026-02-15T04:25:52.530 [DEBUG] [Thread-197900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:25:52.545 [DEBUG] [Thread-197900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:25:52.546 [INFO] [Thread-197900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:25:52.553 [DEBUG] [Thread-197900] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:25:52.553 [DEBUG] [Thread-197900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:25:52.553 [DEBUG] [Thread-197900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:25:52.553 [DEBUG] [Thread-197900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:25:52.553 [DEBUG] [Thread-197900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:25:52.554 [DEBUG] [Thread-197900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:25:52.554 [DEBUG] [Thread-197900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:25:52.554 [DEBUG] [Thread-197900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:25:52.554 [DEBUG] [Thread-197900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:25:52.554 [DEBUG] [Thread-197900] [transport.py] [_log()] client lang: <none>
2026-02-15T04:25:52.554 [DEBUG] [Thread-197900] [transport.py] [_log()] server lang: <none>
2026-02-15T04:25:52.554 [DEBUG] [Thread-197900] [transport.py] [_log()] kex follows: False
2026-02-15T04:25:52.554 [DEBUG] [Thread-197900] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:25:52.554 [DEBUG] [Thread-197900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:25:52.554 [DEBUG] [Thread-197900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:25:52.554 [DEBUG] [Thread-197900] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:25:52.554 [DEBUG] [Thread-197900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:25:52.554 [DEBUG] [Thread-197900] [transport.py] [_log()] Compression: none
2026-02-15T04:25:52.554 [DEBUG] [Thread-197900] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:25:52.613 [DEBUG] [Thread-197900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:25:52.614 [DEBUG] [Thread-197900] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:25:52.614 [DEBUG] [Thread-197900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:25:52.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:25:52.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:25:52.670 [DEBUG] [Thread-197900] [transport.py] [_log()] userauth is OK
2026-02-15T04:25:52.670 [DEBUG] [Thread-197900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:25:52.670 [DEBUG] [Thread-197900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:25:52.670 [DEBUG] [Thread-197900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:25:52.670 [DEBUG] [Thread-197900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:25:52.689 [INFO] [Thread-197900] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:25:52.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T04:25:52.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:25:53.499 [DEBUG] [Thread-197900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:25:53.500 [DEBUG] [Thread-197900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:25:53.547 [DEBUG] [Thread-197900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:25:53.547 [DEBUG] [Thread-197900] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:25:53.557 [DEBUG] [Thread-197900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:25:53.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:25:53.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-15T04:25:53.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-15T04:25:53.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:25:53.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:25:53.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:25:53.594 [DEBUG] [Thread-197900] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:25:57.795 [DEBUG] [Thread-197902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:26:08.425 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:26:08.426 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:26:12.848 [DEBUG] [Thread-197903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:26:23.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:26:23.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:26:23.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-15T04:26:24.447 [DEBUG] [Thread-197904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:26:25.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 26, 15), 0.44, 96.85, 0.0, 31.42, 5.62, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:26:25.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:26:15
2026-02-15T04:26:25.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:26:25.932 [DEBUG] [Thread-197905] [transport.py] [_log()] starting thread (client mode): 0xa5771240
2026-02-15T04:26:25.932 [DEBUG] [Thread-197905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:26:25.955 [DEBUG] [Thread-197905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:26:25.955 [INFO] [Thread-197905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:26:25.958 [DEBUG] [Thread-197905] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:26:25.958 [DEBUG] [Thread-197905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:26:25.958 [DEBUG] [Thread-197905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:26:25.958 [DEBUG] [Thread-197905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:26:25.958 [DEBUG] [Thread-197905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:26:25.959 [DEBUG] [Thread-197905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:26:25.959 [DEBUG] [Thread-197905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:26:25.959 [DEBUG] [Thread-197905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:26:25.959 [DEBUG] [Thread-197905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:26:25.959 [DEBUG] [Thread-197905] [transport.py] [_log()] client lang: <none>
2026-02-15T04:26:25.959 [DEBUG] [Thread-197905] [transport.py] [_log()] server lang: <none>
2026-02-15T04:26:25.959 [DEBUG] [Thread-197905] [transport.py] [_log()] kex follows: False
2026-02-15T04:26:25.959 [DEBUG] [Thread-197905] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:26:25.959 [DEBUG] [Thread-197905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:26:25.959 [DEBUG] [Thread-197905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:26:25.959 [DEBUG] [Thread-197905] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:26:25.959 [DEBUG] [Thread-197905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:26:25.959 [DEBUG] [Thread-197905] [transport.py] [_log()] Compression: none
2026-02-15T04:26:25.959 [DEBUG] [Thread-197905] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:26:25.975 [DEBUG] [Thread-197905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:26:25.976 [DEBUG] [Thread-197905] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:26:25.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:26:25.977 [DEBUG] [Thread-197905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:26:25.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:26:26.021 [DEBUG] [Thread-197905] [transport.py] [_log()] userauth is OK
2026-02-15T04:26:26.021 [DEBUG] [Thread-197905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:26:26.021 [DEBUG] [Thread-197905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:26:26.021 [DEBUG] [Thread-197905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:26:26.021 [DEBUG] [Thread-197905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:26:26.043 [INFO] [Thread-197905] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:26:26.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:26:26.880 [DEBUG] [Thread-197905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:26:26.881 [DEBUG] [Thread-197905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:26:26.881 [DEBUG] [Thread-197905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:26:26.921 [DEBUG] [Thread-197905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:26:26.922 [DEBUG] [Thread-197905] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:26:26.925 [DEBUG] [Thread-197905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:26:26.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:26:26.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:26:26.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:26:26.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:26:26.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:26:26.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:26:26.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:26:26.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:26:26.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:26:26.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.101146 -999.00   +5.50  23.12     95   +4.90 1 3 1 3 1     0    0 0.49 -7.27 ----- 23.1 23.1 140.2 30.5 7.0 -3.6 6.8 -4.0 6.6 -3.7 7.0 -4.0
2026-02-15T04:26:26.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:26:26.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:26:26.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.101146
2026-02-15T04:26:26.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:26:26.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:26:26.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:26:26.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:26:26.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:26:26.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:26:15', tmtdew=0.44, humidity=96.85, cloud=0.0, wind=31.42, temperature=5.62, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:25:39.014', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:26:26.952 [DEBUG] [Thread-197905] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:26:27.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-15T04:26:27.049 [DEBUG] [Thread-197908] [transport.py] [_log()] starting thread (client mode): 0xa2d110f0
2026-02-15T04:26:27.049 [DEBUG] [Thread-197908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:26:27.067 [DEBUG] [Thread-197908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:26:27.067 [INFO] [Thread-197908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:26:27.074 [DEBUG] [Thread-197908] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:26:27.075 [DEBUG] [Thread-197908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:26:27.075 [DEBUG] [Thread-197908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:26:27.075 [DEBUG] [Thread-197908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:26:27.075 [DEBUG] [Thread-197908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:26:27.075 [DEBUG] [Thread-197908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:26:27.075 [DEBUG] [Thread-197908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:26:27.075 [DEBUG] [Thread-197908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:26:27.075 [DEBUG] [Thread-197908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:26:27.075 [DEBUG] [Thread-197908] [transport.py] [_log()] client lang: <none>
2026-02-15T04:26:27.075 [DEBUG] [Thread-197908] [transport.py] [_log()] server lang: <none>
2026-02-15T04:26:27.075 [DEBUG] [Thread-197908] [transport.py] [_log()] kex follows: False
2026-02-15T04:26:27.075 [DEBUG] [Thread-197908] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:26:27.075 [DEBUG] [Thread-197908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:26:27.075 [DEBUG] [Thread-197908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:26:27.076 [DEBUG] [Thread-197908] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:26:27.076 [DEBUG] [Thread-197908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:26:27.076 [DEBUG] [Thread-197908] [transport.py] [_log()] Compression: none
2026-02-15T04:26:27.076 [DEBUG] [Thread-197908] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:26:27.132 [DEBUG] [Thread-197908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:26:27.133 [DEBUG] [Thread-197908] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:26:27.134 [DEBUG] [Thread-197908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:26:27.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:26:27.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:26:27.193 [DEBUG] [Thread-197908] [transport.py] [_log()] userauth is OK
2026-02-15T04:26:27.193 [DEBUG] [Thread-197908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:26:27.194 [DEBUG] [Thread-197908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:26:27.194 [DEBUG] [Thread-197908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:26:27.194 [DEBUG] [Thread-197908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:26:27.213 [INFO] [Thread-197908] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:26:27.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T04:26:27.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:26:27.882 [DEBUG] [Thread-197910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:26:28.022 [DEBUG] [Thread-197908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:26:28.022 [DEBUG] [Thread-197908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:26:28.070 [DEBUG] [Thread-197908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:26:28.070 [DEBUG] [Thread-197908] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:26:28.081 [DEBUG] [Thread-197908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:26:28.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:26:28.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-15T04:26:28.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-15T04:26:28.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:26:28.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:26:28.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:26:28.117 [DEBUG] [Thread-197908] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:26:42.941 [DEBUG] [Thread-197911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:26:57.975 [DEBUG] [Thread-197912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:26:58.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:26:58.138 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:26:58.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-15T04:27:00.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 26, 50), 0.44, 96.87, 0.0, 30.42, 5.56, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:27:00.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:26:50
2026-02-15T04:27:00.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:27:00.848 [DEBUG] [Thread-197913] [transport.py] [_log()] starting thread (client mode): 0xa5772350
2026-02-15T04:27:00.848 [DEBUG] [Thread-197913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:27:00.868 [DEBUG] [Thread-197913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:27:00.868 [INFO] [Thread-197913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:27:00.872 [DEBUG] [Thread-197913] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:27:00.872 [DEBUG] [Thread-197913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:27:00.872 [DEBUG] [Thread-197913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:27:00.872 [DEBUG] [Thread-197913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:27:00.872 [DEBUG] [Thread-197913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:27:00.872 [DEBUG] [Thread-197913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:27:00.872 [DEBUG] [Thread-197913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:27:00.872 [DEBUG] [Thread-197913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:27:00.872 [DEBUG] [Thread-197913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:27:00.872 [DEBUG] [Thread-197913] [transport.py] [_log()] client lang: <none>
2026-02-15T04:27:00.872 [DEBUG] [Thread-197913] [transport.py] [_log()] server lang: <none>
2026-02-15T04:27:00.872 [DEBUG] [Thread-197913] [transport.py] [_log()] kex follows: False
2026-02-15T04:27:00.872 [DEBUG] [Thread-197913] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:27:00.872 [DEBUG] [Thread-197913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:27:00.872 [DEBUG] [Thread-197913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:27:00.872 [DEBUG] [Thread-197913] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:27:00.872 [DEBUG] [Thread-197913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:27:00.872 [DEBUG] [Thread-197913] [transport.py] [_log()] Compression: none
2026-02-15T04:27:00.872 [DEBUG] [Thread-197913] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:27:00.888 [DEBUG] [Thread-197913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:27:00.889 [DEBUG] [Thread-197913] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:27:00.889 [DEBUG] [Thread-197913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:27:00.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:27:00.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:27:00.891 [DEBUG] [Thread-197913] [transport.py] [_log()] userauth is OK
2026-02-15T04:27:00.891 [DEBUG] [Thread-197913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:27:00.891 [DEBUG] [Thread-197913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:27:00.892 [DEBUG] [Thread-197913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:27:00.892 [DEBUG] [Thread-197913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:27:00.912 [INFO] [Thread-197913] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:27:00.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:27:01.566 [DEBUG] [Thread-197913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:27:01.566 [DEBUG] [Thread-197913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:27:01.566 [DEBUG] [Thread-197913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:27:01.606 [DEBUG] [Thread-197913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:27:01.607 [DEBUG] [Thread-197913] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:27:01.610 [DEBUG] [Thread-197913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:27:01.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:27:01.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:27:01.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:27:01.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:27:01.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:27:01.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:27:01.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:27:01.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:27:01.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:27:01.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.101494 -999.00   +5.50  23.62     95   +4.90 1 3 1 3 1     0    0 0.44 -8.40 ----- 23.6 23.6 138.4 28.3 7.0 -5.3 6.8 -3.9 6.6 -3.6 7.0 -3.9
2026-02-15T04:27:01.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:27:01.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:27:01.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.101494
2026-02-15T04:27:01.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:27:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:27:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:27:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:27:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:27:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:26:50', tmtdew=0.44, humidity=96.87, cloud=0.0, wind=30.42, temperature=5.56, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:26:09.082', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:27:01.628 [DEBUG] [Thread-197913] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:27:01.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-15T04:27:01.717 [DEBUG] [Thread-197916] [transport.py] [_log()] starting thread (client mode): 0xa5771cf0
2026-02-15T04:27:01.717 [DEBUG] [Thread-197916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:27:01.732 [DEBUG] [Thread-197916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:27:01.732 [INFO] [Thread-197916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:27:01.739 [DEBUG] [Thread-197916] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:27:01.739 [DEBUG] [Thread-197916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:27:01.740 [DEBUG] [Thread-197916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:27:01.740 [DEBUG] [Thread-197916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:27:01.740 [DEBUG] [Thread-197916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:27:01.740 [DEBUG] [Thread-197916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:27:01.740 [DEBUG] [Thread-197916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:27:01.740 [DEBUG] [Thread-197916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:27:01.740 [DEBUG] [Thread-197916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:27:01.740 [DEBUG] [Thread-197916] [transport.py] [_log()] client lang: <none>
2026-02-15T04:27:01.740 [DEBUG] [Thread-197916] [transport.py] [_log()] server lang: <none>
2026-02-15T04:27:01.740 [DEBUG] [Thread-197916] [transport.py] [_log()] kex follows: False
2026-02-15T04:27:01.740 [DEBUG] [Thread-197916] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:27:01.740 [DEBUG] [Thread-197916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:27:01.740 [DEBUG] [Thread-197916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:27:01.740 [DEBUG] [Thread-197916] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:27:01.741 [DEBUG] [Thread-197916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:27:01.741 [DEBUG] [Thread-197916] [transport.py] [_log()] Compression: none
2026-02-15T04:27:01.741 [DEBUG] [Thread-197916] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:27:01.804 [DEBUG] [Thread-197916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:27:01.805 [DEBUG] [Thread-197916] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:27:01.805 [DEBUG] [Thread-197916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:27:01.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:27:01.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:27:01.860 [DEBUG] [Thread-197916] [transport.py] [_log()] userauth is OK
2026-02-15T04:27:01.860 [DEBUG] [Thread-197916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:27:01.860 [DEBUG] [Thread-197916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:27:01.861 [DEBUG] [Thread-197916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:27:01.861 [DEBUG] [Thread-197916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:27:01.879 [INFO] [Thread-197916] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:27:01.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-15T04:27:01.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:27:02.765 [DEBUG] [Thread-197916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:27:02.765 [DEBUG] [Thread-197916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:27:02.813 [DEBUG] [Thread-197916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:27:02.814 [DEBUG] [Thread-197916] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:27:02.823 [DEBUG] [Thread-197916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:27:02.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:27:02.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-15T04:27:02.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-15T04:27:02.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:27:02.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:27:02.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:27:02.860 [DEBUG] [Thread-197916] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:27:08.627 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:27:08.628 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:27:13.013 [DEBUG] [Thread-197918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:27:24.505 [DEBUG] [Thread-197919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:27:28.072 [DEBUG] [Thread-197920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:27:32.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:27:32.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:27:32.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T04:27:34.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 27, 26), 0.43, 96.92, 0.0, 32.48, 5.61, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:27:34.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:27:26
2026-02-15T04:27:35.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:27:35.276 [DEBUG] [Thread-197921] [transport.py] [_log()] starting thread (client mode): 0xa2d11e70
2026-02-15T04:27:35.276 [DEBUG] [Thread-197921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:27:35.297 [DEBUG] [Thread-197921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:27:35.297 [INFO] [Thread-197921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:27:35.300 [DEBUG] [Thread-197921] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:27:35.301 [DEBUG] [Thread-197921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:27:35.301 [DEBUG] [Thread-197921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:27:35.301 [DEBUG] [Thread-197921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:27:35.301 [DEBUG] [Thread-197921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:27:35.301 [DEBUG] [Thread-197921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:27:35.301 [DEBUG] [Thread-197921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:27:35.301 [DEBUG] [Thread-197921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:27:35.301 [DEBUG] [Thread-197921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:27:35.301 [DEBUG] [Thread-197921] [transport.py] [_log()] client lang: <none>
2026-02-15T04:27:35.301 [DEBUG] [Thread-197921] [transport.py] [_log()] server lang: <none>
2026-02-15T04:27:35.301 [DEBUG] [Thread-197921] [transport.py] [_log()] kex follows: False
2026-02-15T04:27:35.302 [DEBUG] [Thread-197921] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:27:35.302 [DEBUG] [Thread-197921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:27:35.302 [DEBUG] [Thread-197921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:27:35.302 [DEBUG] [Thread-197921] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:27:35.302 [DEBUG] [Thread-197921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:27:35.302 [DEBUG] [Thread-197921] [transport.py] [_log()] Compression: none
2026-02-15T04:27:35.302 [DEBUG] [Thread-197921] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:27:35.323 [DEBUG] [Thread-197921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:27:35.323 [DEBUG] [Thread-197921] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:27:35.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:27:35.324 [DEBUG] [Thread-197921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:27:35.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:27:35.326 [DEBUG] [Thread-197921] [transport.py] [_log()] userauth is OK
2026-02-15T04:27:35.327 [DEBUG] [Thread-197921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:27:35.327 [DEBUG] [Thread-197921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:27:35.327 [DEBUG] [Thread-197921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:27:35.327 [DEBUG] [Thread-197921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:27:35.349 [INFO] [Thread-197921] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:27:35.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:27:35.965 [DEBUG] [Thread-197921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:27:35.966 [DEBUG] [Thread-197921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:27:35.966 [DEBUG] [Thread-197921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:27:36.006 [DEBUG] [Thread-197921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:27:36.007 [DEBUG] [Thread-197921] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:27:36.010 [DEBUG] [Thread-197921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:27:36.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:27:36.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:27:36.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:27:36.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:27:36.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:27:36.034 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:27:36.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:27:36.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:27:36.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:27:36.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.101841 -999.00   +5.50  22.51     95   +4.90 1 3 1 3 1     0    0 0.43 -8.82 ----- 22.5 22.5 155.3 34.9 7.0 -3.2 6.8 -4.0 6.7 -4.1 7.0 -4.7
2026-02-15T04:27:36.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:27:36.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:27:36.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.101841
2026-02-15T04:27:36.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:27:36.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:27:36.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:27:36.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:27:36.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:27:36.037 [DEBUG] [Thread-197921] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:27:36.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:27:26', tmtdew=0.43, humidity=96.92, cloud=0.0, wind=32.48, temperature=5.61, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:26:39.062', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:27: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-15T04:27:36.136 [DEBUG] [Thread-197924] [transport.py] [_log()] starting thread (client mode): 0xa5771360
2026-02-15T04:27:36.136 [DEBUG] [Thread-197924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:27:36.151 [DEBUG] [Thread-197924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:27:36.151 [INFO] [Thread-197924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:27:36.159 [DEBUG] [Thread-197924] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:27:36.159 [DEBUG] [Thread-197924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:27:36.160 [DEBUG] [Thread-197924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:27:36.160 [DEBUG] [Thread-197924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:27:36.160 [DEBUG] [Thread-197924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:27:36.160 [DEBUG] [Thread-197924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:27:36.160 [DEBUG] [Thread-197924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:27:36.160 [DEBUG] [Thread-197924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:27:36.160 [DEBUG] [Thread-197924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:27:36.160 [DEBUG] [Thread-197924] [transport.py] [_log()] client lang: <none>
2026-02-15T04:27:36.160 [DEBUG] [Thread-197924] [transport.py] [_log()] server lang: <none>
2026-02-15T04:27:36.161 [DEBUG] [Thread-197924] [transport.py] [_log()] kex follows: False
2026-02-15T04:27:36.161 [DEBUG] [Thread-197924] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:27:36.161 [DEBUG] [Thread-197924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:27:36.161 [DEBUG] [Thread-197924] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:27:36.161 [DEBUG] [Thread-197924] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:27:36.161 [DEBUG] [Thread-197924] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:27:36.161 [DEBUG] [Thread-197924] [transport.py] [_log()] Compression: none
2026-02-15T04:27:36.162 [DEBUG] [Thread-197924] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:27:36.219 [DEBUG] [Thread-197924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:27:36.220 [DEBUG] [Thread-197924] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:27:36.220 [DEBUG] [Thread-197924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:27:36.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:27:36.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:27:36.276 [DEBUG] [Thread-197924] [transport.py] [_log()] userauth is OK
2026-02-15T04:27:36.276 [DEBUG] [Thread-197924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:27:36.276 [DEBUG] [Thread-197924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:27:36.276 [DEBUG] [Thread-197924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:27:36.276 [DEBUG] [Thread-197924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:27:36.299 [INFO] [Thread-197924] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:27:36.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-15T04:27:36.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:27:37.105 [DEBUG] [Thread-197924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:27:37.105 [DEBUG] [Thread-197924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:27:37.153 [DEBUG] [Thread-197924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:27:37.153 [DEBUG] [Thread-197924] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:27:37.164 [DEBUG] [Thread-197924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:27:37.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:27:37.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-15T04:27:37.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-15T04:27:37.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:27:37.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:27:37.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:27:37.201 [DEBUG] [Thread-197924] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:27:43.108 [DEBUG] [Thread-197926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:27:58.151 [DEBUG] [Thread-197927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:28:07.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:28:07.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:28:07.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-15T04:28:08.830 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:28:08.831 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:28:09.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 27, 26), 0.43, 96.92, 0.0, 32.48, 5.61, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:28:09.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:27:26
2026-02-15T04:28:09.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:28:09.770 [DEBUG] [Thread-197928] [transport.py] [_log()] starting thread (client mode): 0xa2d10cd0
2026-02-15T04:28:09.770 [DEBUG] [Thread-197928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:28:09.789 [DEBUG] [Thread-197928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:28:09.789 [INFO] [Thread-197928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:28:09.792 [DEBUG] [Thread-197928] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:28:09.793 [DEBUG] [Thread-197928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:28:09.793 [DEBUG] [Thread-197928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:28:09.793 [DEBUG] [Thread-197928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:28:09.793 [DEBUG] [Thread-197928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:28:09.793 [DEBUG] [Thread-197928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:28:09.793 [DEBUG] [Thread-197928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:28:09.793 [DEBUG] [Thread-197928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:28:09.793 [DEBUG] [Thread-197928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:28:09.793 [DEBUG] [Thread-197928] [transport.py] [_log()] client lang: <none>
2026-02-15T04:28:09.793 [DEBUG] [Thread-197928] [transport.py] [_log()] server lang: <none>
2026-02-15T04:28:09.793 [DEBUG] [Thread-197928] [transport.py] [_log()] kex follows: False
2026-02-15T04:28:09.793 [DEBUG] [Thread-197928] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:28:09.793 [DEBUG] [Thread-197928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:28:09.793 [DEBUG] [Thread-197928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:28:09.793 [DEBUG] [Thread-197928] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:28:09.793 [DEBUG] [Thread-197928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:28:09.793 [DEBUG] [Thread-197928] [transport.py] [_log()] Compression: none
2026-02-15T04:28:09.793 [DEBUG] [Thread-197928] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:28:09.810 [DEBUG] [Thread-197928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:28:09.811 [DEBUG] [Thread-197928] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:28:09.811 [DEBUG] [Thread-197928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:28:09.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:28:09.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:28:09.813 [DEBUG] [Thread-197928] [transport.py] [_log()] userauth is OK
2026-02-15T04:28:09.813 [DEBUG] [Thread-197928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:28:09.814 [DEBUG] [Thread-197928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:28:09.814 [DEBUG] [Thread-197928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:28:09.814 [DEBUG] [Thread-197928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:28:09.835 [INFO] [Thread-197928] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:28:09.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:28:10.463 [DEBUG] [Thread-197928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:28:10.463 [DEBUG] [Thread-197928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:28:10.463 [DEBUG] [Thread-197928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:28:10.504 [DEBUG] [Thread-197928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:28:10.505 [DEBUG] [Thread-197928] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:28:10.508 [DEBUG] [Thread-197928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:28:10.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:28:10.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:28:10.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:28:10.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:28:10.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:28:10.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:28:10.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:28:10.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:28:10.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:28:10.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.102188 -999.00   +5.50  27.73     95   +4.90 1 3 1 3 1     0    0 0.41 -9.42 ----- 27.7 27.7 142.4 36.0 7.0 -3.2 6.8 -2.8 6.6 -2.9 7.0 -3.0
2026-02-15T04:28:10.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:28:10.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:28:10.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.102188
2026-02-15T04:28:10.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:28:10.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:28:10.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:28:10.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:28:10.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:28:10.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:27:26', tmtdew=0.43, humidity=96.92, cloud=0.0, wind=32.48, temperature=5.61, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:27:09.043', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:28:10.534 [DEBUG] [Thread-197928] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:28:10.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-15T04:28:10.628 [DEBUG] [Thread-197931] [transport.py] [_log()] starting thread (client mode): 0xa2d101f0
2026-02-15T04:28:10.628 [DEBUG] [Thread-197931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:28:10.642 [DEBUG] [Thread-197931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:28:10.642 [INFO] [Thread-197931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:28:10.650 [DEBUG] [Thread-197931] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:28:10.650 [DEBUG] [Thread-197931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:28:10.650 [DEBUG] [Thread-197931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:28:10.650 [DEBUG] [Thread-197931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:28:10.650 [DEBUG] [Thread-197931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:28:10.650 [DEBUG] [Thread-197931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:28:10.651 [DEBUG] [Thread-197931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:28:10.651 [DEBUG] [Thread-197931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:28:10.651 [DEBUG] [Thread-197931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:28:10.651 [DEBUG] [Thread-197931] [transport.py] [_log()] client lang: <none>
2026-02-15T04:28:10.651 [DEBUG] [Thread-197931] [transport.py] [_log()] server lang: <none>
2026-02-15T04:28:10.651 [DEBUG] [Thread-197931] [transport.py] [_log()] kex follows: False
2026-02-15T04:28:10.651 [DEBUG] [Thread-197931] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:28:10.651 [DEBUG] [Thread-197931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:28:10.651 [DEBUG] [Thread-197931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:28:10.651 [DEBUG] [Thread-197931] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:28:10.651 [DEBUG] [Thread-197931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:28:10.651 [DEBUG] [Thread-197931] [transport.py] [_log()] Compression: none
2026-02-15T04:28:10.651 [DEBUG] [Thread-197931] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:28:10.711 [DEBUG] [Thread-197931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:28:10.711 [DEBUG] [Thread-197931] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:28:10.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:28:10.713 [DEBUG] [Thread-197931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:28:10.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:28:10.767 [DEBUG] [Thread-197931] [transport.py] [_log()] userauth is OK
2026-02-15T04:28:10.767 [DEBUG] [Thread-197931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:28:10.768 [DEBUG] [Thread-197931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:28:10.768 [DEBUG] [Thread-197931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:28:10.768 [DEBUG] [Thread-197931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:28:10.787 [INFO] [Thread-197931] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:28:10.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-15T04:28:10.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:28:11.595 [DEBUG] [Thread-197931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:28:11.596 [DEBUG] [Thread-197931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:28:11.644 [DEBUG] [Thread-197931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:28:11.644 [DEBUG] [Thread-197931] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:28:11.653 [DEBUG] [Thread-197931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:28:11.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:28:11.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-15T04:28:11.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-15T04:28:11.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:28:11.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:28:11.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:28:11.690 [DEBUG] [Thread-197931] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:28:13.185 [DEBUG] [Thread-197933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:28:24.563 [DEBUG] [Thread-197934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:28:28.234 [DEBUG] [Thread-197935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:28:41.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:28:41.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:28:41.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T04:28:43.270 [DEBUG] [Thread-197936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:28:43.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 28, 1), 0.43, 96.94, 0.0, 32.27, 5.61, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:28:43.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:28:01
2026-02-15T04:28:44.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:28:44.285 [DEBUG] [Thread-197937] [transport.py] [_log()] starting thread (client mode): 0xa2d87370
2026-02-15T04:28:44.285 [DEBUG] [Thread-197937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:28:44.305 [DEBUG] [Thread-197937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:28:44.305 [INFO] [Thread-197937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:28:44.308 [DEBUG] [Thread-197937] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:28:44.308 [DEBUG] [Thread-197937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:28:44.308 [DEBUG] [Thread-197937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:28:44.309 [DEBUG] [Thread-197937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:28:44.309 [DEBUG] [Thread-197937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:28:44.309 [DEBUG] [Thread-197937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:28:44.309 [DEBUG] [Thread-197937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:28:44.309 [DEBUG] [Thread-197937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:28:44.309 [DEBUG] [Thread-197937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:28:44.309 [DEBUG] [Thread-197937] [transport.py] [_log()] client lang: <none>
2026-02-15T04:28:44.309 [DEBUG] [Thread-197937] [transport.py] [_log()] server lang: <none>
2026-02-15T04:28:44.309 [DEBUG] [Thread-197937] [transport.py] [_log()] kex follows: False
2026-02-15T04:28:44.309 [DEBUG] [Thread-197937] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:28:44.309 [DEBUG] [Thread-197937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:28:44.309 [DEBUG] [Thread-197937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:28:44.309 [DEBUG] [Thread-197937] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:28:44.309 [DEBUG] [Thread-197937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:28:44.309 [DEBUG] [Thread-197937] [transport.py] [_log()] Compression: none
2026-02-15T04:28:44.310 [DEBUG] [Thread-197937] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:28:44.328 [DEBUG] [Thread-197937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:28:44.328 [DEBUG] [Thread-197937] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:28:44.328 [DEBUG] [Thread-197937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:28:44.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:28:44.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:28:44.330 [DEBUG] [Thread-197937] [transport.py] [_log()] userauth is OK
2026-02-15T04:28:44.331 [DEBUG] [Thread-197937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:28:44.331 [DEBUG] [Thread-197937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:28:44.331 [DEBUG] [Thread-197937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:28:44.331 [DEBUG] [Thread-197937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:28:44.366 [INFO] [Thread-197937] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:28:44.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:28:45.021 [DEBUG] [Thread-197937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:28:45.021 [DEBUG] [Thread-197937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:28:45.022 [DEBUG] [Thread-197937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:28:45.062 [DEBUG] [Thread-197937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:28:45.062 [DEBUG] [Thread-197937] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:28:45.065 [DEBUG] [Thread-197937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:28:45.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:28:45.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:28:45.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:28:45.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:28:45.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:28:45.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:28:45.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:28:45.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:28:45.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:28:45.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.102882 -999.00   +5.50  21.33     95   +4.90 1 3 1 3 1     0    0 0.42 -9.08 ----- 21.3 21.3 154.0 28.4 7.0 -6.4 6.8 -5.4 6.6 -5.8 7.0 -6.1
2026-02-15T04:28:45.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:28:45.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:28:45.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.102882
2026-02-15T04:28:45.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:28:45.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:28:45.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:28:45.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:28:45.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:28:45.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:28:01', tmtdew=0.43, humidity=96.94, cloud=0.0, wind=32.27, temperature=5.61, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:28:09.005', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:28:45.090 [DEBUG] [Thread-197937] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:28:45.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-15T04:28:58.305 [DEBUG] [Thread-197940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:29:09.036 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:29:09.037 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:29:13.369 [DEBUG] [Thread-197941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:29:24.632 [DEBUG] [Thread-197942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:29:28.411 [DEBUG] [Thread-197943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:29:43.449 [DEBUG] [Thread-197944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:29:58.485 [DEBUG] [Thread-197945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:30:09.242 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:30:09.243 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:30:13.522 [DEBUG] [Thread-197946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:30:24.699 [DEBUG] [Thread-197947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:30:28.563 [DEBUG] [Thread-197948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:30:43.599 [DEBUG] [Thread-197949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:30:57.335 [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-15T04:30:58.635 [DEBUG] [Thread-197950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:31:09.447 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:31:09.448 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:31:13.671 [DEBUG] [Thread-197951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:31:24.754 [DEBUG] [Thread-197952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:31:27.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:31:27.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:31:27.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-15T04:31:28.711 [DEBUG] [Thread-197953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:31:29.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 30, 59), 0.42, 96.97, 0.0, 31.09, 5.69, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:31:29.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:30:59
2026-02-15T04:31:29.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:31:29.776 [DEBUG] [Thread-197954] [transport.py] [_log()] starting thread (client mode): 0xa2d87c70
2026-02-15T04:31:29.776 [DEBUG] [Thread-197954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:31:29.796 [DEBUG] [Thread-197954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:31:29.796 [INFO] [Thread-197954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:31:29.799 [DEBUG] [Thread-197954] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:31:29.799 [DEBUG] [Thread-197954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:31:29.799 [DEBUG] [Thread-197954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:31:29.799 [DEBUG] [Thread-197954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:31:29.799 [DEBUG] [Thread-197954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:31:29.799 [DEBUG] [Thread-197954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:31:29.799 [DEBUG] [Thread-197954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:31:29.799 [DEBUG] [Thread-197954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:31:29.799 [DEBUG] [Thread-197954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:31:29.800 [DEBUG] [Thread-197954] [transport.py] [_log()] client lang: <none>
2026-02-15T04:31:29.800 [DEBUG] [Thread-197954] [transport.py] [_log()] server lang: <none>
2026-02-15T04:31:29.800 [DEBUG] [Thread-197954] [transport.py] [_log()] kex follows: False
2026-02-15T04:31:29.800 [DEBUG] [Thread-197954] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:31:29.800 [DEBUG] [Thread-197954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:31:29.800 [DEBUG] [Thread-197954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:31:29.800 [DEBUG] [Thread-197954] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:31:29.800 [DEBUG] [Thread-197954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:31:29.800 [DEBUG] [Thread-197954] [transport.py] [_log()] Compression: none
2026-02-15T04:31:29.800 [DEBUG] [Thread-197954] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:31:29.809 [DEBUG] [Thread-197954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:31:29.810 [DEBUG] [Thread-197954] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:31:29.810 [DEBUG] [Thread-197954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:31:29.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:31:29.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:31:29.812 [DEBUG] [Thread-197954] [transport.py] [_log()] userauth is OK
2026-02-15T04:31:29.812 [DEBUG] [Thread-197954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:31:29.812 [DEBUG] [Thread-197954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:31:29.812 [DEBUG] [Thread-197954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:31:29.812 [DEBUG] [Thread-197954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:31:29.836 [INFO] [Thread-197954] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:31:29.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:31:30.493 [DEBUG] [Thread-197954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:31:30.493 [DEBUG] [Thread-197954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:31:30.493 [DEBUG] [Thread-197954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:31:30.535 [DEBUG] [Thread-197954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:31:30.535 [DEBUG] [Thread-197954] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:31:30.538 [DEBUG] [Thread-197954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:31:30.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:31:30.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:31:30.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:31:30.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:31:30.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:31:30.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:31:30.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:31:30.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:31:30.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T04:31:30.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.104619 -999.00   +5.50  24.30     95   +4.90 1 3 1 3 1     0    0 0.42 -8.71 ----- 24.3 24.3 149.6 28.1 7.0 -3.8 6.8 -5.7 6.6 -6.2 7.0 -6.2
2026-02-15T04:31:30.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T04:31:30.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T04:31:30.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.104619
2026-02-15T04:31:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T04:31:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T04:31:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T04:31:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T04:31:30.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 3
2026-02-15T04:31:30.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T04:30:59', tmtdew=0.42, humidity=96.97, cloud=0.0, wind=31.09, temperature=5.69, tmtdew_warn=2, humidity_warn=2, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T02:30:39.082', atlas_cloud=3, atlas_rain=1, zp_data=[nan, 3.0672500000000005, nan, nan, nan, nan, nan, nan, nan, 2.045, 2.460749999999999, 2.212999999999999, nan, nan, nan, nan, 2.1647499999999997, 1.5315000000000003, 1.9719999999999995, 2.174249999999999, nan, nan, nan, nan, 2.027499999999999, 1.9335000000000004, 1.8672500000000003, 1.8064999999999998, 1.888, 2.522000000000001, nan, nan, nan], zp_timestamp='2026-02-15T02:04:00')
2026-02-15T04:31:30.575 [DEBUG] [Thread-197954] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:31:30.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-15T04:31:30.673 [DEBUG] [Thread-197957] [transport.py] [_log()] starting thread (client mode): 0xa2d12170
2026-02-15T04:31:30.673 [DEBUG] [Thread-197957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:31:30.687 [DEBUG] [Thread-197957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T04:31:30.688 [INFO] [Thread-197957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T04:31:30.695 [DEBUG] [Thread-197957] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:31:30.696 [DEBUG] [Thread-197957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T04:31:30.696 [DEBUG] [Thread-197957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:31:30.696 [DEBUG] [Thread-197957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:31:30.696 [DEBUG] [Thread-197957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:31:30.696 [DEBUG] [Thread-197957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:31:30.696 [DEBUG] [Thread-197957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:31:30.696 [DEBUG] [Thread-197957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:31:30.697 [DEBUG] [Thread-197957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:31:30.697 [DEBUG] [Thread-197957] [transport.py] [_log()] client lang: <none>
2026-02-15T04:31:30.697 [DEBUG] [Thread-197957] [transport.py] [_log()] server lang: <none>
2026-02-15T04:31:30.697 [DEBUG] [Thread-197957] [transport.py] [_log()] kex follows: False
2026-02-15T04:31:30.697 [DEBUG] [Thread-197957] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:31:30.697 [DEBUG] [Thread-197957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:31:30.697 [DEBUG] [Thread-197957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:31:30.698 [DEBUG] [Thread-197957] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:31:30.698 [DEBUG] [Thread-197957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:31:30.698 [DEBUG] [Thread-197957] [transport.py] [_log()] Compression: none
2026-02-15T04:31:30.698 [DEBUG] [Thread-197957] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:31:30.760 [DEBUG] [Thread-197957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:31:30.761 [DEBUG] [Thread-197957] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:31:30.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T04:31:30.762 [DEBUG] [Thread-197957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T04:31:30.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:31:30.820 [DEBUG] [Thread-197957] [transport.py] [_log()] userauth is OK
2026-02-15T04:31:30.820 [DEBUG] [Thread-197957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:31:30.820 [DEBUG] [Thread-197957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:31:30.820 [DEBUG] [Thread-197957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T04:31:30.820 [DEBUG] [Thread-197957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:31:30.839 [INFO] [Thread-197957] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:31:30.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-15T04:31:30.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:31:31.639 [DEBUG] [Thread-197957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:31:31.639 [DEBUG] [Thread-197957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:31:31.687 [DEBUG] [Thread-197957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:31:31.687 [DEBUG] [Thread-197957] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:31:31.696 [DEBUG] [Thread-197957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:31:31.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:31:31.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-15T04:31:31.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-15T04:31:31.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:31:31.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:31:31.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:31:31.730 [DEBUG] [Thread-197957] [transport.py] [_log()] EOF in transport thread
2026-02-15T04:31:43.750 [DEBUG] [Thread-197959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:31:58.803 [DEBUG] [Thread-197960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T04:32:01.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T04:32:01.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T04:32:01.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-15T04:32:03.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 4, 31, 35), 0.75, 94.91, 0.0, 35.21, 5.95, 2, 2, 0, 2, 0, 0),)
2026-02-15T04:32:03.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 04:31:35
2026-02-15T04:32:04.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T04:32:04.549 [DEBUG] [Thread-197961] [transport.py] [_log()] starting thread (client mode): 0xa2d11db0
2026-02-15T04:32:04.550 [DEBUG] [Thread-197961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T04:32:04.570 [DEBUG] [Thread-197961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T04:32:04.570 [INFO] [Thread-197961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T04:32:04.573 [DEBUG] [Thread-197961] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T04:32:04.573 [DEBUG] [Thread-197961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T04:32:04.573 [DEBUG] [Thread-197961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T04:32:04.573 [DEBUG] [Thread-197961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:32:04.573 [DEBUG] [Thread-197961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T04:32:04.573 [DEBUG] [Thread-197961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:32:04.574 [DEBUG] [Thread-197961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T04:32:04.574 [DEBUG] [Thread-197961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T04:32:04.574 [DEBUG] [Thread-197961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T04:32:04.574 [DEBUG] [Thread-197961] [transport.py] [_log()] client lang: <none>
2026-02-15T04:32:04.574 [DEBUG] [Thread-197961] [transport.py] [_log()] server lang: <none>
2026-02-15T04:32:04.574 [DEBUG] [Thread-197961] [transport.py] [_log()] kex follows: False
2026-02-15T04:32:04.574 [DEBUG] [Thread-197961] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T04:32:04.574 [DEBUG] [Thread-197961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T04:32:04.574 [DEBUG] [Thread-197961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T04:32:04.574 [DEBUG] [Thread-197961] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T04:32:04.574 [DEBUG] [Thread-197961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T04:32:04.574 [DEBUG] [Thread-197961] [transport.py] [_log()] Compression: none
2026-02-15T04:32:04.574 [DEBUG] [Thread-197961] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T04:32:04.594 [DEBUG] [Thread-197961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T04:32:04.595 [DEBUG] [Thread-197961] [transport.py] [_log()] Switch to new keys ...
2026-02-15T04:32:04.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T04:32:04.596 [DEBUG] [Thread-197961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T04:32:04.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T04:32:04.599 [DEBUG] [Thread-197961] [transport.py] [_log()] userauth is OK
2026-02-15T04:32:04.599 [DEBUG] [Thread-197961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T04:32:04.599 [DEBUG] [Thread-197961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T04:32:04.599 [DEBUG] [Thread-197961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T04:32:04.599 [DEBUG] [Thread-197961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T04:32:04.621 [INFO] [Thread-197961] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T04:32:04.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T04:32:05.285 [DEBUG] [Thread-197961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T04:32:05.285 [DEBUG] [Thread-197961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T04:32:05.286 [DEBUG] [Thread-197961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T04:32:05.326 [DEBUG] [Thread-197961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T04:32:05.327 [DEBUG] [Thread-197961] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T04:32:05.330 [DEBUG] [Thread-197961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T04:32:05.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T04:32:05.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T04:32:05.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T04:32:05.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T04:32:05.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T04:32:05.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T04:32:05.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T04:32:05.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T04:32:05.35
[file cut: first 33554432 bytes kept]
[document cut: first 32642230 of 33554432 characters kept]
